diff --git a/Dockerfile b/Dockerfile index 5ab9e36..7eeb2ac 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,11 +1,17 @@ -FROM nginx:alpine +FROM node:20-alpine -# Copy custom nginx config -COPY nginx.conf /etc/nginx/nginx.conf +WORKDIR /app -# Copy the static export to nginx html directory -COPY build /usr/share/nginx/html +# Next.js standalone runtime. Required because the contact form's Server +# Action (sendEmail.ts, SMTP via nodemailer) needs a live Node process - +# it cannot run under static/nginx serving. +ENV NODE_ENV=production +ENV PORT=3000 +ENV HOSTNAME=0.0.0.0 -EXPOSE 80 +# Copy the standalone build artifact (server.js, .next/, public/) +COPY build /app -CMD ["nginx", "-g", "daemon off;"] +EXPOSE 3000 + +CMD ["node", "server.js"] diff --git a/build.sh b/build.sh index 9ddf254..46f85bb 100755 --- a/build.sh +++ b/build.sh @@ -1,31 +1,92 @@ #!/bin/bash -# Exit on error -set -e +# Deploy pipeline: doormile-next (Next.js standalone Node server) -> build/ -> Node Docker image. +# Standalone (not static export) is required because the contact form's Server +# Action (src/actions/sendEmail.ts, SMTP via nodemailer) needs a live Node +# process at runtime - it cannot run under static/nginx serving. +set -euo pipefail -# Change directory to the Next.js project -echo "🚀 Building Next.js application..." -cd ../doormile-next -npm install -npm run build +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +SOURCE_REPO="${SOURCE_REPO:-$SCRIPT_DIR/../doormile-next}" +DEPLOY_REPO="$SCRIPT_DIR" +STANDALONE_DIR="$SOURCE_REPO/.next/standalone" +BUILD_DIR="$DEPLOY_REPO/build" -# Go back to the build directory -echo "🧹 Preparing build context..." -cd ../doormile-build -rm -rf build -mkdir -p build +echo "Source repository: $SOURCE_REPO" +echo "Deploy repository: $DEPLOY_REPO" -# Copy Next.js standalone server and dependencies -echo "📦 Copying standalone build files..." -cp -R ../doormile-next/.next/standalone/. ./build/ +if [ ! -d "$SOURCE_REPO" ]; then + echo "ERROR: source repository not found at $SOURCE_REPO" >&2 + exit 1 +fi -# Copy public folder and static assets -echo "📦 Copying public and static assets..." -cp -R ../doormile-next/public ./build/ -mkdir -p ./build/.next -cp -R ../doormile-next/.next/static ./build/.next/ +if [ ! -f "$SOURCE_REPO/package.json" ] || [ ! -f "$SOURCE_REPO/next.config.ts" ]; then + echo "ERROR: $SOURCE_REPO does not look like the Next.js source repo (missing package.json or next.config.ts)" >&2 + exit 1 +fi -# Run the docker build -echo "🐳 Building Docker image..." -docker build -t doormile-app . +if ! grep -Eq 'output:\s*"standalone"' "$SOURCE_REPO/next.config.ts"; then + echo "ERROR: $SOURCE_REPO/next.config.ts does not have output: \"standalone\"." >&2 + echo "This pipeline runs the app as a Node server (required by the SMTP Server Action) - a non-standalone build cannot be deployed here." >&2 + exit 1 +fi -echo "✅ Docker build completed successfully!" +SOURCE_BRANCH="$(git -C "$SOURCE_REPO" branch --show-current)" +SOURCE_HEAD="$(git -C "$SOURCE_REPO" rev-parse HEAD)" +DEPLOY_BRANCH="$(git -C "$DEPLOY_REPO" branch --show-current)" +DEPLOY_HEAD_BEFORE="$(git -C "$DEPLOY_REPO" rev-parse HEAD)" + +echo "Source branch/HEAD: $SOURCE_BRANCH @ $SOURCE_HEAD" +echo "Deploy branch/HEAD (before sync): $DEPLOY_BRANCH @ $DEPLOY_HEAD_BEFORE" + +echo "Cleaning previous build artifacts in source repo (.next)..." +rm -rf "$SOURCE_REPO/.next" + +echo "Building Next.js application..." +(cd "$SOURCE_REPO" && npm run build) + +if [ ! -f "$STANDALONE_DIR/server.js" ]; then + echo "ERROR: $STANDALONE_DIR/server.js not found after build. Standalone output was not generated." >&2 + exit 1 +fi +echo "Standalone server verified at $STANDALONE_DIR/server.js" + +echo "Replacing deploy build/ with the fresh standalone artifact..." +rm -rf "$BUILD_DIR" +mkdir -p "$BUILD_DIR" + +# server.js, node_modules, package.json, and the traced .next/server tree +rsync -a "$STANDALONE_DIR"/ "$BUILD_DIR"/ +# static assets and public/ are deliberately excluded from standalone output +# by Next.js and must be copied manually +mkdir -p "$BUILD_DIR/.next" +rsync -a --delete "$SOURCE_REPO/.next/static"/ "$BUILD_DIR/.next/static"/ +rsync -a --delete "$SOURCE_REPO/public"/ "$BUILD_DIR/public"/ + +if [ ! -f "$BUILD_DIR/server.js" ] || [ ! -d "$BUILD_DIR/.next/static" ] || [ ! -d "$BUILD_DIR/public" ]; then + echo "ERROR: $BUILD_DIR is missing required standalone artifacts (server.js, .next/static, public)." >&2 + exit 1 +fi +echo "Artifact verified: build/server.js, build/.next/static, build/public all present." + +echo +echo "Source: $SOURCE_REPO ($SOURCE_BRANCH @ $SOURCE_HEAD)" +echo "Deploy: $DEPLOY_REPO ($DEPLOY_BRANCH @ $DEPLOY_HEAD_BEFORE)" +echo "Synced: $STANDALONE_DIR (+ .next/static, public) -> $BUILD_DIR" +echo +echo "Deploy repo status:" +git -C "$DEPLOY_REPO" status --short + +echo +if command -v docker >/dev/null 2>&1; then + echo "Building Docker image..." + (cd "$DEPLOY_REPO" && docker build -t doormile-app .) +else + echo "WARNING: docker not found on this machine - skipping 'docker build'." >&2 + echo "Run 'docker build -t doormile-app .' from $DEPLOY_REPO once docker is available." >&2 +fi + +echo +echo "Done. This script did NOT commit, push, or trigger Dokploy." +echo "Review the diff above, then: git add -A && git commit && git push, and redeploy doormilesite in Dokploy." +echo "Dokploy must route to internal container port 3000." +echo "Required SMTP environment variables in Dokploy: SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD, CONTACT_RECEIVER" diff --git a/build/404.html b/build/404.html deleted file mode 100644 index 0678dde..0000000 --- a/build/404.html +++ /dev/null @@ -1,680 +0,0 @@ -404: This page could not be found.Doormile — Delivering Trust. Beyond Boundaries

Doormile

Doormile logo
Address
Hyderabad

5th Floor, Vision Ultima,
Street No.3, Jayabheri Enclave,
Gachibowli, Hyderabad,
Telangana 500032.

Coimbatore

Mayflower Valencia,
Near Nava India Bus Stop,
Avinashi Road,
Udayampalayam,
Tamil Nadu 641037.

Bengaluru

C612, 6th Floor,
Trifecta Starlight,
ITPL Road,
Garudacharapalya,
Mahadevapura,
Bangalore 560048,
Karnataka, India.

Contact Us

Tel : +91 86886 97941

Email

care@doormile.com

404

This page could not be found.

\ No newline at end of file diff --git a/build/__next.__PAGE__.txt b/build/__next.__PAGE__.txt deleted file mode 100644 index 38d834e..0000000 --- a/build/__next.__PAGE__.txt +++ /dev/null @@ -1,142 +0,0 @@ -1:"$Sreact.fragment" -2:I[97677,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~5amg8el7~oa.js"],"default"] -3:I[58140,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~5amg8el7~oa.js"],"default"] -4:I[36854,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~5amg8el7~oa.js"],"default"] -12:I[32693,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~5amg8el7~oa.js"],"default"] -13:I[24911,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~5amg8el7~oa.js"],"default"] -14:I[14224,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~5amg8el7~oa.js"],"default"] -1a:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -1b:"$Sreact.suspense" -1e:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~5amg8el7~oa.js"],"ScrollReveal"] -1f:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~5amg8el7~oa.js"],""] -20:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~5amg8el7~oa.js"],"Image"] -:HL["/_next/static/chunks/0v290txaarww5.css","style"] -0:{"rsc":["$","$1","c",{"children":[["$","div",null,{"id":"home","className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","div",null,{"data-elementor-type":"wp-page","data-elementor-id":"61","className":"elementor elementor-61","children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{}],["$","div",null,{"className":"elementor-element elementor-element-b62c0b3 e-con-full e-flex cut-corner-no sticky-container-off e-con e-parent","data-id":"b62c0b3","data-element_type":"container","data-e-type":"container","children":["$","div",null,{"className":"elementor-element elementor-element-592e9e8 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"592e9e8","data-element_type":"container","data-e-type":"container","children":["$","div",null,{"className":"elementor-element elementor-element-ab41b28 elementor-widget elementor-widget-logico_marquee","data-id":"ab41b28","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_marquee.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","div",null,{"className":"logico-ticker-wrapper","style":{"overflow":"hidden","position":"relative","width":"100%"},"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"\n @keyframes cssMarquee {\n 0% { transform: translate3d(0, 0, 0); }\n 100% { transform: translate3d(-33.33%, 0, 0); }\n }\n .marquee-container-css {\n display: flex;\n width: max-content;\n animation: cssMarquee 25s linear infinite;\n }\n .marquee-container-css:hover {\n animation-play-state: paused;\n }\n "}}],["$","div",null,{"className":"marquee-container-css","children":[["$","div","0",{"className":"ticker","style":{"display":"inline-flex","alignItems":"center","whiteSpace":"nowrap","paddingRight":"50px"},"children":[["$","span",null,{"className":"ticker-text","children":["$","p",null,{"style":{"margin":0,"display":"inline"},"children":"30% More Cost Efficient"}]}],["$","span",null,{"className":"separator","style":{"marginLeft":"25px","display":"inline-flex","alignItems":"center"},"children":["$","i",null,{"className":"fontello icon-half-logo"}]}]]}],["$","div","1",{"className":"ticker","style":{"display":"inline-flex","alignItems":"center","whiteSpace":"nowrap","paddingRight":"50px"},"children":[["$","span",null,{"className":"ticker-text","children":["$","p",null,{"style":{"margin":0,"display":"inline"},"children":"30% More Cost Efficient"}]}],["$","span",null,{"className":"separator","style":{"marginLeft":"25px","display":"inline-flex","alignItems":"center"},"children":["$","i",null,{"className":"fontello icon-half-logo"}]}]]}],["$","div","2",{"className":"ticker","style":{"display":"inline-flex","alignItems":"center","whiteSpace":"nowrap","paddingRight":"50px"},"children":[["$","span",null,{"className":"ticker-text","children":["$","p",null,{"style":{"margin":0,"display":"inline"},"children":"30% More Cost Efficient"}]}],["$","span",null,{"className":"separator","style":{"marginLeft":"25px","display":"inline-flex","alignItems":"center"},"children":["$","i",null,{"className":"fontello icon-half-logo"}]}]]}],["$","div","3",{"className":"ticker","style":{"display":"inline-flex","alignItems":"center","whiteSpace":"nowrap","paddingRight":"50px"},"children":[["$","span",null,{"className":"ticker-text","children":["$","p",null,{"style":{"margin":0,"display":"inline"},"children":"30% More Cost Efficient"}]}],["$","span",null,{"className":"separator","style":{"marginLeft":"25px","display":"inline-flex","alignItems":"center"},"children":["$","i",null,{"className":"fontello icon-half-logo"}]}]]}],["$","div","4",{"className":"ticker","style":{"display":"inline-flex","alignItems":"center","whiteSpace":"nowrap","paddingRight":"50px"},"children":[["$","span",null,{"className":"ticker-text","children":["$","p",null,{"style":{"margin":0,"display":"inline"},"children":"30% More Cost Efficient"}]}],["$","span",null,{"className":"separator","style":{"marginLeft":"25px","display":"inline-flex","alignItems":"center"},"children":"$L5"}]]}],"$L6","$L7","$L8","$L9"]}]]}]}]}]}]}],"$La","$Lb","$Lc","$Ld"]}]}]}]}],["$Le","$Lf","$L10"],"$L11"]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} -5:["$","i",null,{"className":"fontello icon-half-logo"}] -6:["$","div","5",{"className":"ticker","style":{"display":"inline-flex","alignItems":"center","whiteSpace":"nowrap","paddingRight":"50px"},"children":[["$","span",null,{"className":"ticker-text","children":["$","p",null,{"style":{"margin":0,"display":"inline"},"children":"30% More Cost Efficient"}]}],["$","span",null,{"className":"separator","style":{"marginLeft":"25px","display":"inline-flex","alignItems":"center"},"children":["$","i",null,{"className":"fontello icon-half-logo"}]}]]}] -7:["$","div","6",{"className":"ticker","style":{"display":"inline-flex","alignItems":"center","whiteSpace":"nowrap","paddingRight":"50px"},"children":[["$","span",null,{"className":"ticker-text","children":["$","p",null,{"style":{"margin":0,"display":"inline"},"children":"30% More Cost Efficient"}]}],["$","span",null,{"className":"separator","style":{"marginLeft":"25px","display":"inline-flex","alignItems":"center"},"children":["$","i",null,{"className":"fontello icon-half-logo"}]}]]}] -8:["$","div","7",{"className":"ticker","style":{"display":"inline-flex","alignItems":"center","whiteSpace":"nowrap","paddingRight":"50px"},"children":[["$","span",null,{"className":"ticker-text","children":["$","p",null,{"style":{"margin":0,"display":"inline"},"children":"30% More Cost Efficient"}]}],["$","span",null,{"className":"separator","style":{"marginLeft":"25px","display":"inline-flex","alignItems":"center"},"children":["$","i",null,{"className":"fontello icon-half-logo"}]}]]}] -9:["$","div","8",{"className":"ticker","style":{"display":"inline-flex","alignItems":"center","whiteSpace":"nowrap","paddingRight":"50px"},"children":[["$","span",null,{"className":"ticker-text","children":["$","p",null,{"style":{"margin":0,"display":"inline"},"children":"30% More Cost Efficient"}]}],["$","span",null,{"className":"separator","style":{"marginLeft":"25px","display":"inline-flex","alignItems":"center"},"children":["$","i",null,{"className":"fontello icon-half-logo"}]}]]}] -a:["$","$L12",null,{}] -b:["$","$L13",null,{}] -c:["$","$L14",null,{}] -15:T95e, - @media (max-width: 768px) { - .elementor-element.elementor-element-3b4a7cc { - --padding-left: 0px !important; - --padding-right: 0px !important; - padding-left: 0px !important; - padding-right: 0px !important; - box-sizing: border-box !important; - } - - .elementor-element.elementor-element-3b4a7cc > .e-con-inner { - width: 100% !important; - max-width: 100% !important; - margin-left: auto !important; - margin-right: auto !important; - padding-left: 0 !important; - padding-right: 0 !important; - } - - .elementor-element.elementor-element-d602f7f { - --padding-left: 20px !important; - --padding-right: 20px !important; - padding-left: 20px !important; - padding-right: 20px !important; - width: 100% !important; - max-width: 100% !important; - margin-left: 0 !important; - margin-right: 0 !important; - box-sizing: border-box !important; - } - - .elementor-element.elementor-element-f64bd88, - .elementor-element.elementor-element-5ed2dbb, - .elementor-element.elementor-element-6829276 { - --padding-left: 0px !important; - --padding-right: 0px !important; - --margin-left: 0px !important; - --margin-right: 0px !important; - width: 100% !important; - max-width: 100% !important; - margin-left: 0 !important; - margin-right: 0 !important; - padding-left: 0 !important; - padding-right: 0 !important; - box-sizing: border-box !important; - } - - .elementor-element.elementor-element-6829276 { - --e-con-grid-template-columns: minmax(0, 1fr) !important; - --grid-justify-content: stretch !important; - --justify-items: stretch !important; - grid-template-columns: minmax(0, 1fr) !important; - justify-content: stretch !important; - justify-items: stretch !important; - min-width: 0 !important; - } - - .industry-solutions-grid, - .industry-card-link { - width: 100% !important; - max-width: 100% !important; - min-width: 0 !important; - } - - .industry-solutions-grid { - margin-left: 0 !important; - margin-right: 0 !important; - } - } - d:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$15"}}],["$","div",null,{"className":"elementor-element elementor-element-3b4a7cc e-flex e-con-boxed cut-corner-no sticky-container-off e-con e-parent","data-id":"3b4a7cc","data-element_type":"container","data-e-type":"container","children":["$","div",null,{"className":"e-con-inner","children":["$","div",null,{"className":"elementor-element elementor-element-d602f7f e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"d602f7f","data-element_type":"container","data-e-type":"container","children":[["$","div",null,{"className":"elementor-element elementor-element-f64bd88 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"f64bd88","data-element_type":"container","data-e-type":"container","children":[["$","div",null,{"className":"elementor-element elementor-element-5ed2dbb e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"5ed2dbb","data-element_type":"container","data-e-type":"container","children":["$L16","$L17"]}],"$L18"]}],"$L19"]}]}]}]] -e:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0v290txaarww5.css","precedence":"next"}] -f:["$","script","script-0",{"src":"/_next/static/chunks/07eq5is00w7sy.js","async":true}] -10:["$","script","script-1",{"src":"/_next/static/chunks/0~5amg8el7~oa.js","async":true}] -11:["$","$L1a",null,{"children":["$","$1b",null,{"name":"Next.MetadataOutlet","children":"$@1c"}]}] -1d:T65e, - /* Minimal section label — matches the "/ Doormile Approach /" pattern */ - .industry-section-label { - width: 100%; - } - .industry-section-label > .elementor-widget-container { - max-width: 100%; - margin: 12px 0 50px 0; - padding: 0 0 14px 0; - border-style: solid; - border-width: 0 0 1px 0; - border-color: rgba(17, 17, 17, 0.15); - } - .industry-section-label .logico-title { - font-size: 14px; - font-weight: 500; - line-height: 2.1429em; - letter-spacing: 2px; - text-transform: uppercase; - color: #111111; - } - @media (max-width: 1024px) { - .industry-section-label > .elementor-widget-container { - margin-bottom: 36px; - padding-bottom: 12px; - } - } - @media (max-width: 767px) { - .industry-section-label > .elementor-widget-container { - margin-bottom: 28px; - padding-bottom: 10px; - } - .industry-section-label .logico-title { - font-size: 12px; - letter-spacing: 1.5px; - } - } - 16:["$","div",null,{"className":"elementor-element elementor-element-c8162c4 elementor-widget elementor-widget-logico_heading industry-section-label","data-id":"c8162c4","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$1d"}}],["$","div",null,{"className":"elementor-widget-container","children":["$","div",null,{"className":"logico-title","children":"/ Industry Solutions /"}]}]]}] -17:["$","div",null,{"className":"elementor-element elementor-element-1487241 elementor-widget__width-initial elementor-widget elementor-widget-logico_heading","data-id":"1487241","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default","children":["$","div",null,{"className":"elementor-widget-container","style":{"margin":"30px 0 0 0"},"children":["$","h3",null,{"className":"logico-title","style":{"fontSize":"clamp(28px, 3.5vw, 48px)","lineHeight":"1.1","fontWeight":800,"textTransform":"uppercase","maxWidth":"900px"},"children":["$","$L1e",null,{"delay":0.05,"duration":0.8,"yOffset":25,"children":["Smart solutions built exclusively for your ",["$","span",null,{"style":{"color":"#c01227"},"children":"industry"}]]}]}]}]}] -18:["$","div",null,{"className":"elementor-element elementor-element-4af73cb e-con-full elementor-hidden-tablet elementor-hidden-mobile_extra elementor-hidden-mobile e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"4af73cb","data-element_type":"container","data-e-type":"container","children":["$","div",null,{"className":"elementor-element elementor-element-46f2f7d elementor-widget__width-initial elementor-widget elementor-widget-logico_button","data-id":"46f2f7d","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_button.default","children":["$","div",null,{"className":"elementor-widget-container"}]}]}] -19:["$","div",null,{"className":"elementor-element elementor-element-6829276 e-grid e-con-full cut-corner-no sticky-container-off e-con e-child","data-id":"6829276","data-element_type":"container","data-e-type":"container","children":["$","div",null,{"className":"industry-solutions-grid","children":[["$","$L1f",null,{"href":"/solutions","className":"industry-card-link","children":[["$","div",null,{"className":"industry-card-bg","children":["$","$L20",null,{"src":"/images/tab-pic-1.webp","alt":"FMCG Logistics","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, (max-width: 1024px) 50vw, 33vw"}]}],["$","div",null,{"className":"industry-card-overlay"}],["$","div",null,{"className":"industry-card-hover-bg"}],["$","div",null,{"className":"industry-card-default-content","children":["$","h4",null,{"className":"industry-card-default-title","children":"FMCG"}]}],["$","div",null,{"className":"industry-card-hover-content","children":[["$","div",null,{"className":"industry-card-hover-top","children":[["$","p",null,{"className":"industry-card-description","children":"High volume, tight margins, zero tolerance for stockouts."}],["$","div",null,{"children":[["$","h5",null,{"className":"industry-card-section-title","children":"Challenges"}],["$","ul",null,{"className":"industry-card-list","children":[["$","li",null,{"className":"industry-card-list-item bullet-1","children":"Unpredictable demand spikes"}],["$","li",null,{"className":"industry-card-list-item bullet-2","children":"Fresh product expiry constraints"}],["$","li",null,{"className":"industry-card-list-item bullet-3","children":"Multi-stop route complexity"}]]}]]}],["$","div",null,{"children":[["$","h5",null,{"className":"industry-card-section-title","children":"Doormile Solutions"}],["$","ul",null,{"className":"industry-card-list","children":[["$","li",null,{"className":"industry-card-list-item bullet-4","children":"AI-driven demand-responsive routing"}],["$","li",null,{"className":"industry-card-list-item bullet-5","children":"Freshness-aware delivery prioritization"}],["$","li",null,{"className":"industry-card-list-item bullet-6","children":"Dynamic batch optimization"}]]}]]}]]}],["$","div",null,{"className":"industry-card-hover-bottom","children":[["$","div",null,{"className":"industry-card-hover-icon","children":["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"3","strokeLinecap":"round","strokeLinejoin":"round","style":{"width":"20px","height":"20px"},"children":[["$","line",null,{"x1":"7","y1":"17","x2":"17","y2":"7"}],["$","polyline",null,{"points":"7 7 17 7 17 17"}]]}]}],["$","h4",null,{"className":"industry-card-hover-title","children":"FMCG"}]]}]]}]]}],["$","$L1f",null,{"href":"/solutions","className":"industry-card-link","children":[["$","div",null,{"className":"industry-card-bg","children":["$","$L20",null,{"src":"/images/tab-pic-2.webp","alt":"Pharma Logistics","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, (max-width: 1024px) 50vw, 33vw"}]}],["$","div",null,{"className":"industry-card-overlay"}],["$","div",null,{"className":"industry-card-hover-bg"}],["$","div",null,{"className":"industry-card-default-content","children":["$","h4",null,{"className":"industry-card-default-title","children":"Pharmaceutical"}]}],["$","div",null,{"className":"industry-card-hover-content","children":[["$","div",null,{"className":"industry-card-hover-top","children":[["$","p",null,{"className":"industry-card-description","children":"Temperature-sensitive, compliance-critical, life-saving."}],["$","div",null,{"children":[["$","h5",null,{"className":"industry-card-section-title","children":"Challenges"}],["$","ul",null,{"className":"industry-card-list","children":[["$","li",null,{"className":"industry-card-list-item bullet-1","children":"Cold chain integrity requirements"}],["$","li",null,{"className":"industry-card-list-item bullet-2","children":"Regulatory compliance tracking"}],["$","li",null,{"className":"industry-card-list-item bullet-3","children":"Critical delivery time windows"}]]}]]}],["$","div",null,{"children":[["$","h5",null,{"className":"industry-card-section-title","children":"Doormile Solutions"}],["$","ul",null,{"className":"industry-card-list","children":[["$","li",null,{"className":"industry-card-list-item bullet-4","children":"Real-time temperature monitoring"}],"$L21","$L22"]}]]}]]}],"$L23"]}]]}],"$L24"]}]}] -1c:null -21:["$","li",null,{"className":"industry-card-list-item bullet-5","children":"Chain-of-custody documentation"}] -22:["$","li",null,{"className":"industry-card-list-item bullet-6","children":"Priority override for critical shipments"}] -23:["$","div",null,{"className":"industry-card-hover-bottom","children":[["$","div",null,{"className":"industry-card-hover-icon","children":["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"3","strokeLinecap":"round","strokeLinejoin":"round","style":{"width":"20px","height":"20px"},"children":[["$","line",null,{"x1":"7","y1":"17","x2":"17","y2":"7"}],["$","polyline",null,{"points":"7 7 17 7 17 17"}]]}]}],["$","h4",null,{"className":"industry-card-hover-title","children":"Pharmaceutical"}]]}] -24:["$","$L1f",null,{"href":"/solutions","className":"industry-card-link","children":[["$","div",null,{"className":"industry-card-bg","children":["$","$L20",null,{"src":"/images/tab-pic-3.webp","alt":"Enterprise Logistics","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, (max-width: 1024px) 50vw, 33vw"}]}],["$","div",null,{"className":"industry-card-overlay"}],["$","div",null,{"className":"industry-card-hover-bg"}],["$","div",null,{"className":"industry-card-default-content","children":["$","h4",null,{"className":"industry-card-default-title","children":"Enterprise & B2B"}]}],["$","div",null,{"className":"industry-card-hover-content","children":[["$","div",null,{"className":"industry-card-hover-top","children":[["$","p",null,{"className":"industry-card-description","children":"High-value shipments with complex delivery requirements."}],["$","div",null,{"children":[["$","h5",null,{"className":"industry-card-section-title","children":"Challenges"}],["$","ul",null,{"className":"industry-card-list","children":[["$","li",null,{"className":"industry-card-list-item bullet-1","children":"Appointment scheduling coordination"}],["$","li",null,{"className":"industry-card-list-item bullet-2","children":"White-glove delivery standards"}],["$","li",null,{"className":"industry-card-list-item bullet-3","children":"Multi-location routing complexity"}]]}]]}],["$","div",null,{"children":[["$","h5",null,{"className":"industry-card-section-title","children":"Doormile Solutions"}],["$","ul",null,{"className":"industry-card-list","children":[["$","li",null,{"className":"industry-card-list-item bullet-4","children":"Automated appointment optimization"}],["$","li",null,{"className":"industry-card-list-item bullet-5","children":"Service level guarantee tracking"}],["$","li",null,{"className":"industry-card-list-item bullet-6","children":"Enterprise integration APIs"}]]}]]}]]}],["$","div",null,{"className":"industry-card-hover-bottom","children":[["$","div",null,{"className":"industry-card-hover-icon","children":["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"3","strokeLinecap":"round","strokeLinejoin":"round","style":{"width":"20px","height":"20px"},"children":[["$","line",null,{"x1":"7","y1":"17","x2":"17","y2":"7"}],["$","polyline",null,{"points":"7 7 17 7 17 17"}]]}]}],["$","h4",null,{"className":"industry-card-hover-title","children":"Enterprise & B2B"}]]}]]}]]}] diff --git a/build/__next._full.txt b/build/__next._full.txt deleted file mode 100644 index 0e1bfd0..0000000 --- a/build/__next._full.txt +++ /dev/null @@ -1,166 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -c:I[97677,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~5amg8el7~oa.js"],"default"] -d:I[58140,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~5amg8el7~oa.js"],"default"] -e:I[36854,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~5amg8el7~oa.js"],"default"] -19:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/chunks/0v290txaarww5.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[["$","div",null,{"id":"home","className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","div",null,{"data-elementor-type":"wp-page","data-elementor-id":"61","className":"elementor elementor-61","children":[["$","$Lc",null,{}],["$","$Ld",null,{}],["$","$Le",null,{}],["$","div",null,{"className":"elementor-element elementor-element-b62c0b3 e-con-full e-flex cut-corner-no sticky-container-off e-con e-parent","data-id":"b62c0b3","data-element_type":"container","data-e-type":"container","children":["$","div",null,{"className":"elementor-element elementor-element-592e9e8 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"592e9e8","data-element_type":"container","data-e-type":"container","children":["$","div",null,{"className":"elementor-element elementor-element-ab41b28 elementor-widget elementor-widget-logico_marquee","data-id":"ab41b28","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_marquee.default","children":"$Lf"}]}]}],"$L10","$L11","$L12","$L13"]}]}]}]}],["$L14","$L15","$L16"],"$L17"]}],{},null,false,null]},null,false,null],"$L18",false]],"m":"$undefined","G":["$19",["$L1a"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -1d:I[32693,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~5amg8el7~oa.js"],"default"] -1e:I[24911,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~5amg8el7~oa.js"],"default"] -1f:I[14224,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~5amg8el7~oa.js"],"default"] -25:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -26:"$Sreact.suspense" -28:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -2a:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -f:["$","div",null,{"className":"elementor-widget-container","children":["$","div",null,{"className":"logico-ticker-wrapper","style":{"overflow":"hidden","position":"relative","width":"100%"},"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"\n @keyframes cssMarquee {\n 0% { transform: translate3d(0, 0, 0); }\n 100% { transform: translate3d(-33.33%, 0, 0); }\n }\n .marquee-container-css {\n display: flex;\n width: max-content;\n animation: cssMarquee 25s linear infinite;\n }\n .marquee-container-css:hover {\n animation-play-state: paused;\n }\n "}}],["$","div",null,{"className":"marquee-container-css","children":[["$","div","0",{"className":"ticker","style":{"display":"inline-flex","alignItems":"center","whiteSpace":"nowrap","paddingRight":"50px"},"children":[["$","span",null,{"className":"ticker-text","children":["$","p",null,{"style":{"margin":0,"display":"inline"},"children":"30% More Cost Efficient"}]}],["$","span",null,{"className":"separator","style":{"marginLeft":"25px","display":"inline-flex","alignItems":"center"},"children":["$","i",null,{"className":"fontello icon-half-logo"}]}]]}],["$","div","1",{"className":"ticker","style":{"display":"inline-flex","alignItems":"center","whiteSpace":"nowrap","paddingRight":"50px"},"children":[["$","span",null,{"className":"ticker-text","children":["$","p",null,{"style":{"margin":0,"display":"inline"},"children":"30% More Cost Efficient"}]}],["$","span",null,{"className":"separator","style":{"marginLeft":"25px","display":"inline-flex","alignItems":"center"},"children":["$","i",null,{"className":"fontello icon-half-logo"}]}]]}],["$","div","2",{"className":"ticker","style":{"display":"inline-flex","alignItems":"center","whiteSpace":"nowrap","paddingRight":"50px"},"children":[["$","span",null,{"className":"ticker-text","children":["$","p",null,{"style":{"margin":0,"display":"inline"},"children":"30% More Cost Efficient"}]}],["$","span",null,{"className":"separator","style":{"marginLeft":"25px","display":"inline-flex","alignItems":"center"},"children":["$","i",null,{"className":"fontello icon-half-logo"}]}]]}],["$","div","3",{"className":"ticker","style":{"display":"inline-flex","alignItems":"center","whiteSpace":"nowrap","paddingRight":"50px"},"children":[["$","span",null,{"className":"ticker-text","children":["$","p",null,{"style":{"margin":0,"display":"inline"},"children":"30% More Cost Efficient"}]}],["$","span",null,{"className":"separator","style":{"marginLeft":"25px","display":"inline-flex","alignItems":"center"},"children":["$","i",null,{"className":"fontello icon-half-logo"}]}]]}],["$","div","4",{"className":"ticker","style":{"display":"inline-flex","alignItems":"center","whiteSpace":"nowrap","paddingRight":"50px"},"children":[["$","span",null,{"className":"ticker-text","children":["$","p",null,{"style":{"margin":0,"display":"inline"},"children":"30% More Cost Efficient"}]}],["$","span",null,{"className":"separator","style":{"marginLeft":"25px","display":"inline-flex","alignItems":"center"},"children":["$","i",null,{"className":"fontello icon-half-logo"}]}]]}],["$","div","5",{"className":"ticker","style":{"display":"inline-flex","alignItems":"center","whiteSpace":"nowrap","paddingRight":"50px"},"children":[["$","span",null,{"className":"ticker-text","children":["$","p",null,{"style":{"margin":0,"display":"inline"},"children":"30% More Cost Efficient"}]}],["$","span",null,{"className":"separator","style":{"marginLeft":"25px","display":"inline-flex","alignItems":"center"},"children":["$","i",null,{"className":"fontello icon-half-logo"}]}]]}],["$","div","6",{"className":"ticker","style":{"display":"inline-flex","alignItems":"center","whiteSpace":"nowrap","paddingRight":"50px"},"children":[["$","span",null,{"className":"ticker-text","children":["$","p",null,{"style":{"margin":0,"display":"inline"},"children":"30% More Cost Efficient"}]}],["$","span",null,{"className":"separator","style":{"marginLeft":"25px","display":"inline-flex","alignItems":"center"},"children":["$","i",null,{"className":"fontello icon-half-logo"}]}]]}],["$","div","7",{"className":"ticker","style":{"display":"inline-flex","alignItems":"center","whiteSpace":"nowrap","paddingRight":"50px"},"children":[["$","span",null,{"className":"ticker-text","children":["$","p",null,{"style":{"margin":0,"display":"inline"},"children":"30% More Cost Efficient"}]}],"$L1b"]}],"$L1c"]}]]}]}] -10:["$","$L1d",null,{}] -11:["$","$L1e",null,{}] -12:["$","$L1f",null,{}] -20:T95e, - @media (max-width: 768px) { - .elementor-element.elementor-element-3b4a7cc { - --padding-left: 0px !important; - --padding-right: 0px !important; - padding-left: 0px !important; - padding-right: 0px !important; - box-sizing: border-box !important; - } - - .elementor-element.elementor-element-3b4a7cc > .e-con-inner { - width: 100% !important; - max-width: 100% !important; - margin-left: auto !important; - margin-right: auto !important; - padding-left: 0 !important; - padding-right: 0 !important; - } - - .elementor-element.elementor-element-d602f7f { - --padding-left: 20px !important; - --padding-right: 20px !important; - padding-left: 20px !important; - padding-right: 20px !important; - width: 100% !important; - max-width: 100% !important; - margin-left: 0 !important; - margin-right: 0 !important; - box-sizing: border-box !important; - } - - .elementor-element.elementor-element-f64bd88, - .elementor-element.elementor-element-5ed2dbb, - .elementor-element.elementor-element-6829276 { - --padding-left: 0px !important; - --padding-right: 0px !important; - --margin-left: 0px !important; - --margin-right: 0px !important; - width: 100% !important; - max-width: 100% !important; - margin-left: 0 !important; - margin-right: 0 !important; - padding-left: 0 !important; - padding-right: 0 !important; - box-sizing: border-box !important; - } - - .elementor-element.elementor-element-6829276 { - --e-con-grid-template-columns: minmax(0, 1fr) !important; - --grid-justify-content: stretch !important; - --justify-items: stretch !important; - grid-template-columns: minmax(0, 1fr) !important; - justify-content: stretch !important; - justify-items: stretch !important; - min-width: 0 !important; - } - - .industry-solutions-grid, - .industry-card-link { - width: 100% !important; - max-width: 100% !important; - min-width: 0 !important; - } - - .industry-solutions-grid { - margin-left: 0 !important; - margin-right: 0 !important; - } - } - 13:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$20"}}],["$","div",null,{"className":"elementor-element elementor-element-3b4a7cc e-flex e-con-boxed cut-corner-no sticky-container-off e-con e-parent","data-id":"3b4a7cc","data-element_type":"container","data-e-type":"container","children":["$","div",null,{"className":"e-con-inner","children":["$","div",null,{"className":"elementor-element elementor-element-d602f7f e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"d602f7f","data-element_type":"container","data-e-type":"container","children":[["$","div",null,{"className":"elementor-element elementor-element-f64bd88 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"f64bd88","data-element_type":"container","data-e-type":"container","children":[["$","div",null,{"className":"elementor-element elementor-element-5ed2dbb e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"5ed2dbb","data-element_type":"container","data-e-type":"container","children":["$L21","$L22"]}],"$L23"]}],"$L24"]}]}]}]] -14:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0v290txaarww5.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] -15:["$","script","script-0",{"src":"/_next/static/chunks/07eq5is00w7sy.js","async":true,"nonce":"$undefined"}] -16:["$","script","script-1",{"src":"/_next/static/chunks/0~5amg8el7~oa.js","async":true,"nonce":"$undefined"}] -17:["$","$L25",null,{"children":["$","$26",null,{"name":"Next.MetadataOutlet","children":"$@27"}]}] -18:["$","$1","h",{"children":[null,["$","$L28",null,{"children":"$L29"}],["$","div",null,{"hidden":true,"children":["$","$L2a",null,{"children":["$","$26",null,{"name":"Next.Metadata","children":"$L2b"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] -1a:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] -2d:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~5amg8el7~oa.js"],"ScrollReveal"] -2e:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~5amg8el7~oa.js"],""] -2f:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~5amg8el7~oa.js"],"Image"] -1b:["$","span",null,{"className":"separator","style":{"marginLeft":"25px","display":"inline-flex","alignItems":"center"},"children":["$","i",null,{"className":"fontello icon-half-logo"}]}] -1c:["$","div","8",{"className":"ticker","style":{"display":"inline-flex","alignItems":"center","whiteSpace":"nowrap","paddingRight":"50px"},"children":[["$","span",null,{"className":"ticker-text","children":["$","p",null,{"style":{"margin":0,"display":"inline"},"children":"30% More Cost Efficient"}]}],["$","span",null,{"className":"separator","style":{"marginLeft":"25px","display":"inline-flex","alignItems":"center"},"children":["$","i",null,{"className":"fontello icon-half-logo"}]}]]}] -2c:T65e, - /* Minimal section label — matches the "/ Doormile Approach /" pattern */ - .industry-section-label { - width: 100%; - } - .industry-section-label > .elementor-widget-container { - max-width: 100%; - margin: 12px 0 50px 0; - padding: 0 0 14px 0; - border-style: solid; - border-width: 0 0 1px 0; - border-color: rgba(17, 17, 17, 0.15); - } - .industry-section-label .logico-title { - font-size: 14px; - font-weight: 500; - line-height: 2.1429em; - letter-spacing: 2px; - text-transform: uppercase; - color: #111111; - } - @media (max-width: 1024px) { - .industry-section-label > .elementor-widget-container { - margin-bottom: 36px; - padding-bottom: 12px; - } - } - @media (max-width: 767px) { - .industry-section-label > .elementor-widget-container { - margin-bottom: 28px; - padding-bottom: 10px; - } - .industry-section-label .logico-title { - font-size: 12px; - letter-spacing: 1.5px; - } - } - 21:["$","div",null,{"className":"elementor-element elementor-element-c8162c4 elementor-widget elementor-widget-logico_heading industry-section-label","data-id":"c8162c4","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$2c"}}],["$","div",null,{"className":"elementor-widget-container","children":["$","div",null,{"className":"logico-title","children":"/ Industry Solutions /"}]}]]}] -22:["$","div",null,{"className":"elementor-element elementor-element-1487241 elementor-widget__width-initial elementor-widget elementor-widget-logico_heading","data-id":"1487241","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default","children":["$","div",null,{"className":"elementor-widget-container","style":{"margin":"30px 0 0 0"},"children":["$","h3",null,{"className":"logico-title","style":{"fontSize":"clamp(28px, 3.5vw, 48px)","lineHeight":"1.1","fontWeight":800,"textTransform":"uppercase","maxWidth":"900px"},"children":["$","$L2d",null,{"delay":0.05,"duration":0.8,"yOffset":25,"children":["Smart solutions built exclusively for your ",["$","span",null,{"style":{"color":"#c01227"},"children":"industry"}]]}]}]}]}] -23:["$","div",null,{"className":"elementor-element elementor-element-4af73cb e-con-full elementor-hidden-tablet elementor-hidden-mobile_extra elementor-hidden-mobile e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"4af73cb","data-element_type":"container","data-e-type":"container","children":["$","div",null,{"className":"elementor-element elementor-element-46f2f7d elementor-widget__width-initial elementor-widget elementor-widget-logico_button","data-id":"46f2f7d","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_button.default","children":["$","div",null,{"className":"elementor-widget-container"}]}]}] -24:["$","div",null,{"className":"elementor-element elementor-element-6829276 e-grid e-con-full cut-corner-no sticky-container-off e-con e-child","data-id":"6829276","data-element_type":"container","data-e-type":"container","children":["$","div",null,{"className":"industry-solutions-grid","children":[["$","$L2e",null,{"href":"/solutions","className":"industry-card-link","children":[["$","div",null,{"className":"industry-card-bg","children":["$","$L2f",null,{"src":"/images/tab-pic-1.webp","alt":"FMCG Logistics","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, (max-width: 1024px) 50vw, 33vw"}]}],["$","div",null,{"className":"industry-card-overlay"}],["$","div",null,{"className":"industry-card-hover-bg"}],["$","div",null,{"className":"industry-card-default-content","children":["$","h4",null,{"className":"industry-card-default-title","children":"FMCG"}]}],["$","div",null,{"className":"industry-card-hover-content","children":[["$","div",null,{"className":"industry-card-hover-top","children":[["$","p",null,{"className":"industry-card-description","children":"High volume, tight margins, zero tolerance for stockouts."}],["$","div",null,{"children":[["$","h5",null,{"className":"industry-card-section-title","children":"Challenges"}],["$","ul",null,{"className":"industry-card-list","children":[["$","li",null,{"className":"industry-card-list-item bullet-1","children":"Unpredictable demand spikes"}],["$","li",null,{"className":"industry-card-list-item bullet-2","children":"Fresh product expiry constraints"}],["$","li",null,{"className":"industry-card-list-item bullet-3","children":"Multi-stop route complexity"}]]}]]}],["$","div",null,{"children":[["$","h5",null,{"className":"industry-card-section-title","children":"Doormile Solutions"}],["$","ul",null,{"className":"industry-card-list","children":[["$","li",null,{"className":"industry-card-list-item bullet-4","children":"AI-driven demand-responsive routing"}],["$","li",null,{"className":"industry-card-list-item bullet-5","children":"Freshness-aware delivery prioritization"}],["$","li",null,{"className":"industry-card-list-item bullet-6","children":"Dynamic batch optimization"}]]}]]}]]}],["$","div",null,{"className":"industry-card-hover-bottom","children":[["$","div",null,{"className":"industry-card-hover-icon","children":["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"3","strokeLinecap":"round","strokeLinejoin":"round","style":{"width":"20px","height":"20px"},"children":[["$","line",null,{"x1":"7","y1":"17","x2":"17","y2":"7"}],["$","polyline",null,{"points":"7 7 17 7 17 17"}]]}]}],["$","h4",null,{"className":"industry-card-hover-title","children":"FMCG"}]]}]]}]]}],["$","$L2e",null,{"href":"/solutions","className":"industry-card-link","children":[["$","div",null,{"className":"industry-card-bg","children":["$","$L2f",null,{"src":"/images/tab-pic-2.webp","alt":"Pharma Logistics","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, (max-width: 1024px) 50vw, 33vw"}]}],["$","div",null,{"className":"industry-card-overlay"}],["$","div",null,{"className":"industry-card-hover-bg"}],["$","div",null,{"className":"industry-card-default-content","children":["$","h4",null,{"className":"industry-card-default-title","children":"Pharmaceutical"}]}],["$","div",null,{"className":"industry-card-hover-content","children":[["$","div",null,{"className":"industry-card-hover-top","children":[["$","p",null,{"className":"industry-card-description","children":"Temperature-sensitive, compliance-critical, life-saving."}],["$","div",null,{"children":[["$","h5",null,{"className":"industry-card-section-title","children":"Challenges"}],["$","ul",null,{"className":"industry-card-list","children":[["$","li",null,{"className":"industry-card-list-item bullet-1","children":"Cold chain integrity requirements"}],["$","li",null,{"className":"industry-card-list-item bullet-2","children":"Regulatory compliance tracking"}],["$","li",null,{"className":"industry-card-list-item bullet-3","children":"Critical delivery time windows"}]]}]]}],["$","div",null,{"children":[["$","h5",null,{"className":"industry-card-section-title","children":"Doormile Solutions"}],["$","ul",null,{"className":"industry-card-list","children":[["$","li",null,{"className":"industry-card-list-item bullet-4","children":"Real-time temperature monitoring"}],"$L30","$L31"]}]]}]]}],"$L32"]}]]}],"$L33"]}]}] -30:["$","li",null,{"className":"industry-card-list-item bullet-5","children":"Chain-of-custody documentation"}] -31:["$","li",null,{"className":"industry-card-list-item bullet-6","children":"Priority override for critical shipments"}] -32:["$","div",null,{"className":"industry-card-hover-bottom","children":[["$","div",null,{"className":"industry-card-hover-icon","children":["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"3","strokeLinecap":"round","strokeLinejoin":"round","style":{"width":"20px","height":"20px"},"children":[["$","line",null,{"x1":"7","y1":"17","x2":"17","y2":"7"}],["$","polyline",null,{"points":"7 7 17 7 17 17"}]]}]}],["$","h4",null,{"className":"industry-card-hover-title","children":"Pharmaceutical"}]]}] -33:["$","$L2e",null,{"href":"/solutions","className":"industry-card-link","children":[["$","div",null,{"className":"industry-card-bg","children":["$","$L2f",null,{"src":"/images/tab-pic-3.webp","alt":"Enterprise Logistics","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, (max-width: 1024px) 50vw, 33vw"}]}],["$","div",null,{"className":"industry-card-overlay"}],["$","div",null,{"className":"industry-card-hover-bg"}],["$","div",null,{"className":"industry-card-default-content","children":["$","h4",null,{"className":"industry-card-default-title","children":"Enterprise & B2B"}]}],["$","div",null,{"className":"industry-card-hover-content","children":[["$","div",null,{"className":"industry-card-hover-top","children":[["$","p",null,{"className":"industry-card-description","children":"High-value shipments with complex delivery requirements."}],["$","div",null,{"children":[["$","h5",null,{"className":"industry-card-section-title","children":"Challenges"}],["$","ul",null,{"className":"industry-card-list","children":[["$","li",null,{"className":"industry-card-list-item bullet-1","children":"Appointment scheduling coordination"}],["$","li",null,{"className":"industry-card-list-item bullet-2","children":"White-glove delivery standards"}],["$","li",null,{"className":"industry-card-list-item bullet-3","children":"Multi-location routing complexity"}]]}]]}],["$","div",null,{"children":[["$","h5",null,{"className":"industry-card-section-title","children":"Doormile Solutions"}],["$","ul",null,{"className":"industry-card-list","children":[["$","li",null,{"className":"industry-card-list-item bullet-4","children":"Automated appointment optimization"}],["$","li",null,{"className":"industry-card-list-item bullet-5","children":"Service level guarantee tracking"}],["$","li",null,{"className":"industry-card-list-item bullet-6","children":"Enterprise integration APIs"}]]}]]}]]}],["$","div",null,{"className":"industry-card-hover-bottom","children":[["$","div",null,{"className":"industry-card-hover-icon","children":["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"3","strokeLinecap":"round","strokeLinejoin":"round","style":{"width":"20px","height":"20px"},"children":[["$","line",null,{"x1":"7","y1":"17","x2":"17","y2":"7"}],["$","polyline",null,{"points":"7 7 17 7 17 17"}]]}]}],["$","h4",null,{"className":"industry-card-hover-title","children":"Enterprise & B2B"}]]}]]}]]}] -29:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -34:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -27:null -2b:[["$","title","0",{"children":"Doormile — Delivering Trust. Beyond Boundaries"}],["$","meta","1",{"name":"description","content":"Doormile helps logistics companies track every mile with MileTruth™ AI. Real-time SLA protection and connected miles visibility."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","4",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","5",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","6",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L34","7",{}]] diff --git a/build/__next._head.txt b/build/__next._head.txt deleted file mode 100644 index bbd69c1..0000000 --- a/build/__next._head.txt +++ /dev/null @@ -1,6 +0,0 @@ -1:"$Sreact.fragment" -2:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -3:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -4:"$Sreact.suspense" -5:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Doormile — Delivering Trust. Beyond Boundaries"}],["$","meta","1",{"name":"description","content":"Doormile helps logistics companies track every mile with MileTruth™ AI. Real-time SLA protection and connected miles visibility."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","4",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","5",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","6",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L5","7",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/__next._index.txt b/build/__next._index.txt deleted file mode 100644 index d0b3355..0000000 --- a/build/__next._index.txt +++ /dev/null @@ -1,15 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","template":["$","$La",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/__next._tree.txt b/build/__next._tree.txt deleted file mode 100644 index d754cc3..0000000 --- a/build/__next._tree.txt +++ /dev/null @@ -1,10 +0,0 @@ -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/chunks/0v290txaarww5.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}},"staleTime":300,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/_next/static/chunks/0-8o5q..xlrv7.js b/build/_next/static/chunks/0-8o5q..xlrv7.js deleted file mode 100644 index dbfdc86..0000000 --- a/build/_next/static/chunks/0-8o5q..xlrv7.js +++ /dev/null @@ -1,212 +0,0 @@ -(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,67585,(e,t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),Object.defineProperty(n,"BailoutToCSR",{enumerable:!0,get:function(){return r}});let i=e.r(32061);function r({reason:e,children:t}){if("u"{"use strict";function i(e){return e.split("/").map(e=>encodeURIComponent(e)).join("/")}Object.defineProperty(n,"__esModule",{value:!0}),Object.defineProperty(n,"encodeURIPath",{enumerable:!0,get:function(){return i}})},52157,(e,t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),Object.defineProperty(n,"PreloadChunks",{enumerable:!0,get:function(){return s}});let i=e.r(43476),r=e.r(74080),o=e.r(63599),l=e.r(9885),a=e.r(43369);function s({moduleIds:e}){if("u">typeof window)return null;let t=o.workAsyncStorage.getStore();if(void 0===t)return null;let n=[];if(t.reactLoadableManifest&&e){let i=t.reactLoadableManifest;for(let t of e){if(!i[t])continue;let e=i[t].files;n.push(...e)}}if(0===n.length)return null;let m=(0,a.getAssetTokenQuery)();return(0,i.jsx)(i.Fragment,{children:n.map(e=>{let n=`${t.assetPrefix}/_next/${(0,l.encodeURIPath)(e)}${m}`;return e.endsWith(".css")?(0,i.jsx)("link",{precedence:"dynamic",href:n,rel:"stylesheet",as:"style",nonce:t.nonce},e):((0,r.preload)(n,{as:"script",fetchPriority:"low",nonce:t.nonce}),null)})})}},69093,(e,t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),Object.defineProperty(n,"default",{enumerable:!0,get:function(){return m}});let i=e.r(43476),r=e.r(71645),o=e.r(67585),l=e.r(52157);function a(e){return{default:e&&"default"in e?e.default:e}}let s={loader:()=>Promise.resolve(a(()=>null)),loading:null,ssr:!0},m=function(e){let t={...s,...e},n=(0,r.lazy)(()=>t.loader().then(a)),m=t.loading;function c(e){let a=m?(0,i.jsx)(m,{isLoading:!0,pastDelay:!0,error:null}):null,s=!t.ssr||!!t.loading,c=s?r.Suspense:r.Fragment,d=t.ssr?(0,i.jsxs)(i.Fragment,{children:["u"{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),Object.defineProperty(n,"default",{enumerable:!0,get:function(){return r}});let i=e.r(55682)._(e.r(69093));function r(e,t){let n={};"function"==typeof e&&(n.loader=e);let r={...n,...t};return(0,i.default)({...r,modules:r.loadableGenerated?.modules})}("function"==typeof n.default||"object"==typeof n.default&&null!==n.default)&&void 0===n.default.__esModule&&(Object.defineProperty(n.default,"__esModule",{value:!0}),Object.assign(n.default,n),t.exports=n.default)},74528,e=>{"use strict";var t=e.i(43476),n=e.i(71645);e.s(["default",0,function(){let[e,i]=(0,n.useState)(0);(0,n.useEffect)(()=>{let e=setInterval(()=>{i(e=>+(0===e))},7e3);return()=>clearInterval(e)},[]);let r=e=>{i(e)};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("link",{rel:"preload",as:"image",href:"/images/home2-banner-1.webp"}),(0,t.jsx)("style",{dangerouslySetInnerHTML:{__html:` - .howits-hero-custom-bg.elementor-repeater-item-3264830, - .howits-hero-custom-bg.elementor-repeater-item-6867061 { - background-image: linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.1)), url('/images/home2-banner-1.webp') !important; - background-position: center !important; - background-repeat: no-repeat !important; - background-size: cover !important; - } - - .howits-hero-custom-bg.elementor-repeater-item-6867061 { - background-image: linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.1)), url('/images/home1-slide-2.webp') !important; - background-position: center !important; - background-repeat: no-repeat !important; - background-size: cover !important; - } - - /* Center alignments for standard content slider elements */ - .elementor-element.elementor-element-6c7cbcb .slide-content { - display: flex !important; - flex-direction: column !important; - justify-content: center !important; - align-items: center !important; - text-align: center !important; - width: 100% !important; - height: 100% !important; - padding: 0 !important; - box-sizing: border-box !important; - } - - .elementor-element.elementor-element-6c7cbcb .slide-content-inner { - display: flex !important; - flex-direction: column !important; - justify-content: center !important; - align-items: center !important; - text-align: center !important; - width: 100% !important; - max-width: 1000px !important; - margin: 0 auto !important; - /* site.css gives the inner content-box sizing + 20px padding, - which makes it 40px wider than its parent and overflows. - Force border-box so width:100% actually fits. */ - box-sizing: border-box !important; - } - - .elementor-element.elementor-element-6c7cbcb .content-slider-item-heading, - .elementor-element.elementor-element-6c7cbcb .content-slider-item-heading .heading-content { - text-align: center !important; - display: block !important; - width: 100% !important; - margin-left: auto !important; - margin-right: auto !important; - padding-left: 15px !important; - padding-right: 15px !important; - } - - .elementor-element.elementor-element-6c7cbcb .content-slider-item-text { - display: flex !important; - justify-content: center !important; - width: 100% !important; - margin-top: 23px !important; - } - - .elementor-element.elementor-element-6c7cbcb .text-content { - text-align: center !important; - max-width: 820px !important; - margin: 0 auto !important; - padding-left: 15px !important; - padding-right: 15px !important; - } - - /* Larger, more readable hero subtitle on large/4K screens */ - .elementor-element.elementor-element-6c7cbcb .content-slider-item-text p { - font-size: clamp(16px, 1.35vw, 23px) !important; - line-height: 1.65 !important; - } - - @media (min-width: 1025px) { - /* Match Home's hero frame so the floating navbar sits with the same - breathing space. Home (.elementor-61) frames the hero card at 20px; - this page falls through to the shared kit's 32px base. */ - .elementor-element.elementor-element-741f56c { - padding: 20px !important; - } - .elementor-element.elementor-element-6c7cbcb .owl-carousel.owl-theme .content-item { - height: 800px !important; - min-height: 800px !important; - } - } - - @media (max-width: 1024px) { - .elementor-element.elementor-element-741f56c { - width: 100% !important; - max-width: 100% !important; - margin-left: auto !important; - margin-right: auto !important; - --padding-top: 0px !important; - --padding-block-start: 0px !important; - padding: 0 10px 10px 10px !important; - overflow: hidden !important; - border-radius: 25px !important; - } - - /* Collapse the stage-outer to the slide height so no empty - black space is left below the hero card on mobile/tablet. */ - .elementor-element.elementor-element-6c7cbcb .owl-stage-outer { - height: 620px !important; - } - - .elementor-element.elementor-element-6c7cbcb .owl-carousel.owl-theme .content-item { - width: 100% !important; - min-height: 620px !important; - height: 620px !important; - border-radius: 25px !important; - overflow: hidden !important; - } - - .elementor-element.elementor-element-6c7cbcb .slide-content { - width: 100% !important; - min-height: 620px !important; - padding-left: 0 !important; - padding-right: 0 !important; - box-sizing: border-box !important; - } - } - - @media (max-width: 767px) { - .elementor-element.elementor-element-741f56c { - width: 100% !important; - max-width: 100% !important; - --padding-top: 0px !important; - --padding-block-start: 0px !important; - padding: 0 10px 10px 10px !important; - border-radius: 22px !important; - } - - .elementor-element.elementor-element-6c7cbcb .owl-stage-outer { - height: 560px !important; - } - - .elementor-element.elementor-element-6c7cbcb .owl-carousel.owl-theme .content-item { - min-height: 560px !important; - height: 560px !important; - border-radius: 22px !important; - } - - /* Center BOTH slides' content. Use the .elementor prefix + - repeater-item classes so these beat the per-slide rules in - site.css (slide 1 has no centering there; slide 2 carries an - asymmetric top margin). */ - .elementor .elementor-element.elementor-element-6c7cbcb .slide-content { - min-height: 560px !important; - padding-left: 0 !important; - padding-right: 0 !important; - align-items: center !important; - justify-content: center !important; - text-align: center !important; - } - - .elementor .elementor-element.elementor-element-6c7cbcb .elementor-repeater-item-3264830 .slide-content-inner, - .elementor .elementor-element.elementor-element-6c7cbcb .elementor-repeater-item-6867061 .slide-content-inner { - margin: 0 auto !important; - width: 100% !important; - max-width: 100% !important; - padding-left: 0 !important; - padding-right: 0 !important; - box-sizing: border-box !important; - align-items: center !important; - text-align: center !important; - } - - .elementor .elementor-element.elementor-element-6c7cbcb .content-slider-item-heading, - .elementor .elementor-element.elementor-element-6c7cbcb .content-slider-item-text, - .elementor .elementor-element.elementor-element-6c7cbcb .text-content { - text-align: center !important; - margin-left: auto !important; - margin-right: auto !important; - } - - /* Smaller, fitting heading so it never overflows the card edge. - site.css forced clamp(38px,11vw,48px) which clipped at 320px. */ - .elementor .elementor-element.elementor-element-6c7cbcb .elementor-repeater-item-3264830 .content-slider-item-heading, - .elementor .elementor-element.elementor-element-6c7cbcb .elementor-repeater-item-6867061 .content-slider-item-heading { - max-width: 100% !important; - font-size: clamp(26px, 8vw, 34px) !important; - line-height: 1.12 !important; - overflow-wrap: break-word !important; - } - - /* Slide counter ("01/02"): keep it bottom-RIGHT, aligned with the - hero text padding (22px) and lifted cleanly off the edge. */ - .elementor .elementor-element.elementor-element-6c7cbcb .slider-footer { - text-align: right !important; - margin-bottom: 24px !important; - } - .elementor .elementor-element.elementor-element-6c7cbcb .slider-footer .slider-pagination { - justify-content: flex-end !important; - margin-left: 22px !important; - margin-right: 22px !important; - } - /* The wide dot navigation eats the right side and shoves "01/02" to - the centre. Hide it on mobile (matching the home hero) so the - counter sits cleanly on the right. */ - .elementor .elementor-element.elementor-element-6c7cbcb .owl-dots { - display: none !important; - } - /* Hide the prev/next arrows on mobile (they overlap the counter) — - slides still auto-rotate, matching the home hero. */ - .elementor .elementor-element.elementor-element-6c7cbcb .owl-nav { - display: none !important; - } - } - `}}),(0,t.jsx)("div",{className:"elementor-element elementor-element-741f56c e-con-full e-flex cut-corner-no sticky-container-off e-con e-parent","data-id":"741f56c","data-element_type":"container","data-e-type":"container",children:(0,t.jsx)("div",{className:"elementor-element elementor-element-6c7cbcb elementor-widget elementor-widget-logico_content_slider","data-id":"6c7cbcb","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_content_slider.default",children:(0,t.jsx)("div",{className:"elementor-widget-container",children:(0,t.jsx)("div",{className:"logico-content-slider-widget",children:(0,t.jsx)("div",{className:"content-slider-wrapper",children:(0,t.jsx)("div",{className:"content-slider-container",children:(0,t.jsxs)("div",{className:"content-slider owl-carousel owl-theme nav-view-vertical nav-h-position-right nav-v-position-bottom owl-loaded owl-drag",children:[(0,t.jsx)("div",{className:"owl-stage-outer",style:{position:"relative",overflow:"hidden",height:"800px"},children:(0,t.jsxs)("div",{className:"owl-stage",style:{position:"relative",width:"100%",height:"100%"},children:[(0,t.jsx)("div",{className:`owl-item ${0===e?"active":""}`,style:{position:"relative",width:"100%",opacity:+(0===e),visibility:0===e?"visible":"hidden",transition:"opacity 0.8s ease-in-out, visibility 0.8s ease-in-out",zIndex:0===e?2:1},children:(0,t.jsx)("div",{className:"content-item slider-item elementor-repeater-item-3264830 slide-style-standard howits-hero-custom-bg",children:(0,t.jsx)("div",{className:"slide-content",children:(0,t.jsxs)("div",{className:"slide-content-inner",children:[(0,t.jsx)("h1",{className:"content-slider-item-heading logico-content-wrapper-1",children:(0,t.jsxs)("span",{className:"heading-content",children:["One Journey. Complete",(0,t.jsx)("br",{}),"Control."]})}),(0,t.jsx)("div",{className:"content-slider-item-text logico-content-wrapper-2",children:(0,t.jsx)("div",{className:"text-content",children:(0,t.jsx)("p",{children:"See how Doormile connects first, mid, and last mile into a seamless delivery experience powered by MileTruth™ AI."})})})]})})})}),(0,t.jsx)("div",{className:`owl-item ${1===e?"active":""}`,style:{position:"absolute",top:0,left:0,width:"100%",opacity:+(1===e),visibility:1===e?"visible":"hidden",transition:"opacity 0.8s ease-in-out, visibility 0.8s ease-in-out",zIndex:1===e?2:1},children:(0,t.jsx)("div",{className:"content-item slider-item elementor-repeater-item-6867061 slide-style-standard howits-hero-custom-bg",children:(0,t.jsx)("div",{className:"slide-content",children:(0,t.jsxs)("div",{className:"slide-content-inner",children:[(0,t.jsx)("h1",{className:"content-slider-item-heading logico-content-wrapper-1",children:(0,t.jsxs)("span",{className:"heading-content",children:["A New Logisitics",(0,t.jsx)("br",{}),"Experience"]})}),(0,t.jsx)("div",{className:"content-slider-item-text logico-content-wrapper-2",children:(0,t.jsx)("div",{className:"text-content",children:(0,t.jsx)("p",{children:"See how Doormile connects first, mid, and last mile into a seamless delivery experience powered by MileTruth™ AI."})})})]})})})})]})}),(0,t.jsxs)("div",{className:"owl-nav",children:[(0,t.jsx)("button",{type:"button",className:"owl-next",onClick:()=>i(e=>+(0===e)),"aria-label":"Next",style:{cursor:"pointer",border:"none",outline:"none"}}),(0,t.jsx)("button",{type:"button",className:"owl-prev",onClick:()=>i(e=>+(0===e)),"aria-label":"Previous",style:{cursor:"pointer",border:"none",outline:"none"}})]}),(0,t.jsx)("div",{className:"slider-footer slider-footer-position-after slider-footer-width-full slider-footer-view-inside",children:(0,t.jsx)("div",{className:"slider-footer-content",children:(0,t.jsxs)("div",{className:"slider-pagination",style:{display:"flex",justifyContent:"flex-end",alignItems:"center",gap:"10px"},children:[(0,t.jsxs)("div",{className:"slider-progress-wrapper",style:{marginRight:"35px",display:"flex",flexDirection:"column",alignItems:"flex-start"},children:[(0,t.jsxs)("div",{style:{fontSize:"16px",fontWeight:600,color:"#FFFFFF",marginBottom:"4px"},children:[(0,t.jsx)("span",{className:"slider-progress-current",children:0===e?"01":"02"})," / ",(0,t.jsx)("span",{className:"slider-progress-all",style:{opacity:.6},children:"02"})]}),(0,t.jsx)("div",{style:{width:"80px",height:"2px",background:"rgba(255, 255, 255, 0.2)",position:"relative",borderRadius:"1px",overflow:"hidden"},children:(0,t.jsx)("div",{style:{position:"absolute",left:0===e?"0":"50%",width:"50%",height:"100%",background:"#c01227",transition:"left 0.3s ease"}})})]}),(0,t.jsxs)("div",{className:"owl-dots owl-dots-6c7cbcb",style:{display:"none"},children:[(0,t.jsx)("button",{type:"button",role:"button",className:`owl-dot ${0===e?"active":""}`,onClick:()=>r(0),children:(0,t.jsx)("span",{})}),(0,t.jsx)("button",{type:"button",role:"button",className:`owl-dot ${1===e?"active":""}`,onClick:()=>r(1),children:(0,t.jsx)("span",{})})]})]})})})]})})})})})})})]})}])},16948,e=>{"use strict";var t=e.i(43476);let n=(0,e.i(70703).default)(()=>e.A(19386),{loadableGenerated:{modules:[88493]},ssr:!1,loading:()=>(0,t.jsx)("div",{style:{minHeight:"100vh"},"aria-hidden":!0})});e.s(["default",0,function(){return(0,t.jsx)(n,{})}])},19386,e=>{e.v(t=>Promise.all(["static/chunks/0b561qo91.1jg.js","static/chunks/04vqjcwjasc-3.js","static/chunks/0_54tjq7o59~u.js","static/chunks/0jraq7~~gf402.js","static/chunks/0zozt9p9-3srt.css"].map(t=>e.l(t))).then(()=>t(88493)))}]); \ No newline at end of file diff --git a/build/_next/static/chunks/0-kxqnmnjtk7l.js b/build/_next/static/chunks/0-kxqnmnjtk7l.js deleted file mode 100644 index 1686cf0..0000000 --- a/build/_next/static/chunks/0-kxqnmnjtk7l.js +++ /dev/null @@ -1,57 +0,0 @@ -(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,69986,e=>{"use strict";var t=e.i(43476),r=e.i(71645),n=e.i(75056),i=e.i(25234),s=e.i(79877),o=e.i(33623),a=e.i(90072);let l="#08080c",c="#C01227",u="#E2354A",d="#7E1420",p="#F2667A",h="#3c3c46",m="#6a6a76",f="#43434d",x="#7c7c86",g="#22C55E",y="#FFFFFF",M=[c,f,x,f,x,f],b=["Multi-Trip","Proximity","Balanced","Fuel Saver","EV-Aware","Time-Aware"],j=[{at:0,pos:[0,20,27],look:[0,1.4,0]},{at:.13,pos:[-2.5,20,26.5],look:[-.5,1.2,0]},{at:.28,pos:[3,18.5,25.5],look:[.6,.8,-.8]},{at:.44,pos:[0,23,24.5],look:[0,1,0]},{at:.6,pos:[2.5,21,25.5],look:[0,1.2,0]},{at:.74,pos:[-2,20,26.5],look:[0,1.2,0]},{at:.88,pos:[0,22,25.5],look:[0,1.8,0]},{at:1,pos:[0,21.5,25.5],look:[0,2,0]}];function v(e){return e<0?0:e>1?1:e}function w(e,t,r){let n=v((r-e)/(t-e||1));return n*n*(3-2*n)}function A(e,t,r,n){return e+(t-e)*(1-Math.exp(-r*n))}function B(e){let t=43758.5453*Math.sin(127.1*e+311.7);return t-Math.floor(t)}function z(e,t=0){let r=new Float32Array(3*e),n=Math.PI*(3-Math.sqrt(5));for(let i=0;iz(j,.18),[j]),S=(0,r.useMemo)(()=>z(B,.55),[B]),W=(0,r.useMemo)(()=>z(Math.floor(.6*B),.7),[B]);return(0,i.useFrame)((t,r)=>{let n=e.current??0;b.current=A(b.current,n,3,r);let i=b.current,a=t.clock.elapsedTime,u=s.current;if(!u)return;let d=w(0,.13,i),p=w(.44,.5,i)*(1-w(.74,.88,i)),h=w(.88,1,i),m=.5*(.001+.999*d)*(1-.32*p)*(1+.18*h)*(1+.03*Math.sin(.9*a));if(u.scale.setScalar(m),u.position.y=3+.18*Math.sin(.6*a),u.rotation.y=.12*a,o.current&&o.current.rotation.set(.18*a,.24*a,0),l.current&&l.current.rotation.set(-(.22*a),.16*a,.1*a),x.current&&(x.current.rotation.y=.06*a),g.current&&(g.current.rotation.y=.35*a,g.current.rotation.x=.3*Math.sin(.2*a)),M.current&&(M.current.rotation.y=-(.28*a),M.current.rotation.z=.18*a),c.current){let e=1+.06*Math.sin(1.6*a)+.4*h;c.current.scale.setScalar(e)}f.current&&(f.current.opacity=v(.22+.05*Math.sin(1.6*a)+.25*h)*d)}),(0,t.jsxs)("group",{ref:s,position:[0,3,0],children:[(0,t.jsxs)("mesh",{children:[(0,t.jsx)("sphereGeometry",{args:[.95,24,24]}),(0,t.jsx)("meshBasicMaterial",{color:d,transparent:!0,opacity:.18,blending:a.AdditiveBlending,depthWrite:!1})]}),(0,t.jsxs)("mesh",{children:[(0,t.jsx)("sphereGeometry",{args:[.42,24,24]}),(0,t.jsx)("meshBasicMaterial",{color:y,transparent:!0,opacity:.9,blending:a.AdditiveBlending,depthWrite:!1})]}),(0,t.jsxs)("mesh",{ref:o,children:[(0,t.jsx)("icosahedronGeometry",{args:[1.35,1]}),(0,t.jsx)("meshBasicMaterial",{color:u,wireframe:!0,transparent:!0,opacity:.55,blending:a.AdditiveBlending,depthWrite:!1})]}),(0,t.jsxs)("mesh",{ref:l,children:[(0,t.jsx)("icosahedronGeometry",{args:[1.7,2]}),(0,t.jsx)("meshBasicMaterial",{color:h,wireframe:!0,transparent:!0,opacity:.32,blending:a.AdditiveBlending,depthWrite:!1})]}),(0,t.jsxs)("points",{ref:x,children:[(0,t.jsx)("bufferGeometry",{children:(0,t.jsx)("bufferAttribute",{attach:"attributes-position",args:[R,3]})}),(0,t.jsx)("pointsMaterial",{size:n?.05:.045,color:p,transparent:!0,opacity:.85,sizeAttenuation:!0,blending:a.AdditiveBlending,depthWrite:!1})]}),(0,t.jsxs)("points",{ref:g,scale:1.6,children:[(0,t.jsx)("bufferGeometry",{children:(0,t.jsx)("bufferAttribute",{attach:"attributes-position",args:[S,3]})}),(0,t.jsx)("pointsMaterial",{size:.04,color:u,transparent:!0,opacity:.6,sizeAttenuation:!0,blending:a.AdditiveBlending,depthWrite:!1})]}),(0,t.jsxs)("points",{ref:M,scale:2,children:[(0,t.jsx)("bufferGeometry",{children:(0,t.jsx)("bufferAttribute",{attach:"attributes-position",args:[W,3]})}),(0,t.jsx)("pointsMaterial",{size:.035,color:m,transparent:!0,opacity:.45,sizeAttenuation:!0,blending:a.AdditiveBlending,depthWrite:!1})]}),(0,t.jsxs)("mesh",{ref:c,rotation:[Math.PI/2,0,0],children:[(0,t.jsx)("ringGeometry",{args:[2.1,2.25,64]}),(0,t.jsx)("meshBasicMaterial",{ref:f,color:u,transparent:!0,opacity:.22,side:a.DoubleSide,blending:a.AdditiveBlending,depthWrite:!1})]})]})}),S=new a.Object3D,W=new a.Color,k=` - attribute vec3 aSize; - attribute float aSeed; - varying vec2 vWinUv; - varying vec3 vWinNrm; - varying vec3 vWinSize; - varying float vWinSeed; -`,G=` - vWinUv = uv; - vWinNrm = normal; - vWinSize = aSize; - vWinSeed = aSeed; -`,C=` - uniform float uTime; - varying vec2 vWinUv; - varying vec3 vWinNrm; - varying vec3 vWinSize; - varying float vWinSeed; - float h11(float p){ p = fract(p*0.1031); p *= p+33.33; p *= p+p; return fract(p); } - float h21(vec2 p){ vec3 p3 = fract(vec3(p.xyx)*0.1031); p3 += dot(p3, p3.yzx+33.33); return fract((p3.x+p3.y)*p3.z); } -`,I=` - // facade tint varies per building — dark neutral charcoal (brand: near-black) - vec3 baseA = vec3(0.040, 0.040, 0.048); - vec3 baseB = vec3(0.065, 0.058, 0.066); - diffuseColor.rgb = mix(baseA, baseB, h11(vWinSeed*1.7)); - - // windows only on the four vertical faces (skip roof/floor) - float isVert = 1.0 - step(0.5, abs(vWinNrm.y)); - vec2 faceDim = abs(vWinNrm.x) > 0.5 ? vec2(vWinSize.z, vWinSize.y) : vec2(vWinSize.x, vWinSize.y); - vec2 cells = max(vec2(1.0), floor(faceDim / 0.52)); - vec2 g = vWinUv * cells; - vec2 id = floor(g); - vec2 f = fract(g); - float m = 0.16; // mullion margin - float pane = step(m, f.x) * step(f.x, 1.0 - m) * step(m, f.y) * step(f.y, 1.0 - m); - - float rnd = h21(id + vWinSeed * 37.0); - float lit = step(0.68, rnd); // ~32% of windows lit (dimmer skyline backdrop) - float toggle = step(0.97, h21(id * 1.31 + vWinSeed * 5.0 + floor(uTime * 0.5))); - lit = clamp(lit + toggle, 0.0, 1.0); // a few flick on/off over time - float flick = 0.9 + 0.1 * sin(uTime * 2.0 + rnd * 30.0); - - // Brand-tinted windows: mostly warm white with occasional brand-red panes. - vec3 warmWhite = vec3(1.0, 0.88, 0.80); - vec3 brandRed = vec3(0.82, 0.18, 0.24); - vec3 wcol = mix(warmWhite, brandRed, step(0.7, h21(id * 0.7 + vWinSeed))); - - float glow = isVert * pane * lit * flick; - totalEmissiveRadiance += wcol * glow * 0.85; - - // dark mullion grid + dimmer unlit glass - diffuseColor.rgb *= (0.42 + 0.58 * pane); -`,F=r.default.memo(function({progress:e,isMobile:n=!1}){let s=(0,r.useRef)(null),o=(0,r.useRef)(null),l=(0,r.useRef)(null),p=(0,r.useRef)(null),m=(0,r.useRef)(null),f=(0,r.useRef)(null),x=(0,r.useRef)(null),g=(0,r.useRef)(null),y=(0,r.useRef)(null),b=(0,r.useRef)(null),j=(0,r.useRef)(0),v=n?20:34,z=(0,r.useMemo)(()=>{let e=[];for(let t=0;t3.4&&B(13.3*t)>.42,d=u?.62*l:l,p=Math.floor(4*B(17.7*t))*Math.PI/8+.12*B(4.1*t),h=l>5;e.push({x:i,z:s,w:o,d:a,h:l,bodyH:d,rot:p,ci:c,tier:u,tall:h})}let t=e.filter(e=>e.tier),r=e.filter(e=>e.tall),n=new a.BoxGeometry(1,1,1),i=new Float32Array(3*v),s=new Float32Array(v);e.forEach((e,t)=>{i[3*t]=e.w,i[3*t+1]=e.bodyH,i[3*t+2]=e.d,s[t]=10*B(23.1*t)}),n.setAttribute("aSize",new a.InstancedBufferAttribute(i,3)),n.setAttribute("aSeed",new a.InstancedBufferAttribute(s,1));let o=new a.BoxGeometry(1,1,1),l=new Float32Array(3*Math.max(1,t.length)),c=new Float32Array(Math.max(1,t.length));return t.forEach((e,t)=>{let r=.64*e.w,n=.64*e.d,i=e.h-e.bodyH;l[3*t]=r,l[3*t+1]=i,l[3*t+2]=n,c[t]=10*B(29.7*t)}),o.setAttribute("aSize",new a.InstancedBufferAttribute(l,3)),o.setAttribute("aSeed",new a.InstancedBufferAttribute(c,1)),{buildings:e,tierList:t,tallList:r,bodyGeom:n,tierGeom:o}},[v]),R=(0,r.useMemo)(()=>{let e=new a.MeshStandardMaterial({color:"#0c1226",emissive:"#000000",metalness:.35,roughness:.62});return e.onBeforeCompile=e=>{e.uniforms.uTime={value:0},b.current=e,e.vertexShader=e.vertexShader.replace("#include ",`#include -${k}`).replace("#include ",`#include -${G}`),e.fragmentShader=e.fragmentShader.replace("#include ",`#include -${C}`).replace("#include ",`#include -${I}`)},e},[]),F=(0,r.useMemo)(()=>{let e=[];for(let t=0;t<12;t++){let r=t/12*Math.PI*2,n=19*(.72+.26*B(4.4*t));e.push(+Math.cos(r),.04,+Math.sin(r)),e.push(Math.cos(r)*n,.04,Math.sin(r)*n)}for(let t of[3.5,7,11,15])for(let r=0;r<64;r++){let n=r/64*Math.PI*2,i=(r+1)/64*Math.PI*2;e.push(Math.cos(n)*t,.04,Math.sin(n)*t),e.push(Math.cos(i)*t,.04,Math.sin(i)*t)}let t=new a.BufferGeometry;return t.setAttribute("position",new a.Float32BufferAttribute(e,3)),t},[]);return(0,r.useLayoutEffect)(()=>{let{buildings:e,tierList:t,tallList:r}=z;o.current&&(e.forEach((e,t)=>{S.position.set(e.x,e.bodyH/2,e.z),S.rotation.set(0,e.rot,0),S.scale.set(e.w,e.bodyH,e.d),S.updateMatrix(),o.current.setMatrixAt(t,S.matrix)}),o.current.instanceMatrix.needsUpdate=!0),l.current&&(t.forEach((e,t)=>{let r=e.h-e.bodyH;S.position.set(e.x,e.bodyH+r/2,e.z),S.rotation.set(0,e.rot,0),S.scale.set(.64*e.w,r,.64*e.d),S.updateMatrix(),l.current.setMatrixAt(t,S.matrix)}),l.current.instanceMatrix.needsUpdate=!0),p.current&&(e.forEach((e,t)=>{let r=e.h,n=e.tier?.64*e.w:e.w,i=e.tier?.64*e.d:e.d;S.position.set(e.x,r+.03,e.z),S.rotation.set(0,e.rot,0),S.scale.set(1.02*n,.07,1.02*i),S.updateMatrix(),p.current.setMatrixAt(t,S.matrix),p.current.setColorAt(t,W.set(M[e.ci]))}),p.current.instanceMatrix.needsUpdate=!0,p.current.instanceColor&&(p.current.instanceColor.needsUpdate=!0)),m.current&&f.current&&(r.forEach((e,t)=>{S.position.set(e.x,e.h+.34,e.z),S.rotation.set(0,0,0),S.scale.set(.05,.68,.05),S.updateMatrix(),m.current.setMatrixAt(t,S.matrix),S.position.set(e.x,e.h+.7,e.z),S.scale.set(1,1,1),S.updateMatrix(),f.current.setMatrixAt(t,S.matrix)}),m.current.instanceMatrix.needsUpdate=!0,f.current.instanceMatrix.needsUpdate=!0)},[z]),(0,i.useFrame)((t,r)=>{let n=e.current??0;j.current=A(j.current,n,3,r);let i=j.current,o=t.clock.elapsedTime;b.current&&(b.current.uniforms.uTime.value=o);let a=w(.01,.15,i);s.current&&(s.current.scale.y=.001+.999*a),f.current&&(f.current.material.opacity=(.5+.3*Math.sin(2.2*o))*a),x.current&&(x.current.opacity=(0+.6*w(.02,.13,i))*(.78+.22*Math.sin(2.2*o)));let l=w(0,.13,i);if(g.current){let e=1+.35*o%1*6;g.current.scale.set(e,e,e),g.current.material.opacity=(1-.35*o%1)*.28*l}if(y.current){let e=1+(.35*o+.5)%1*6;y.current.scale.set(e,e,e),y.current.material.opacity=(1-(.35*o+.5)%1)*.28*l}}),(0,t.jsxs)("group",{children:[(0,t.jsx)("gridHelper",{args:[49.4,60,d,d],position:[0,0,0],children:(0,t.jsx)("lineBasicMaterial",{attach:"material",color:d,transparent:!0,opacity:.11,depthWrite:!1})}),(0,t.jsx)("lineSegments",{geometry:F,children:(0,t.jsx)("lineBasicMaterial",{ref:x,color:u,transparent:!0,opacity:0,blending:a.AdditiveBlending,depthWrite:!1})}),(0,t.jsxs)("mesh",{ref:g,rotation:[-Math.PI/2,0,0],position:[0,.03,0],children:[(0,t.jsx)("ringGeometry",{args:[1,1.12,48]}),(0,t.jsx)("meshBasicMaterial",{color:u,transparent:!0,opacity:0,blending:a.AdditiveBlending,depthWrite:!1})]}),(0,t.jsxs)("mesh",{ref:y,rotation:[-Math.PI/2,0,0],position:[0,.03,0],children:[(0,t.jsx)("ringGeometry",{args:[1,1.12,48]}),(0,t.jsx)("meshBasicMaterial",{color:h,transparent:!0,opacity:0,blending:a.AdditiveBlending,depthWrite:!1})]}),(0,t.jsxs)("group",{ref:s,children:[(0,t.jsx)("instancedMesh",{ref:o,args:[z.bodyGeom,R,z.buildings.length]}),z.tierList.length>0&&(0,t.jsx)("instancedMesh",{ref:l,args:[z.tierGeom,R,z.tierList.length]}),(0,t.jsxs)("instancedMesh",{ref:p,args:[void 0,void 0,z.buildings.length],children:[(0,t.jsx)("boxGeometry",{args:[1,1,1]}),(0,t.jsx)("meshBasicMaterial",{toneMapped:!1,transparent:!0,opacity:.9,blending:a.AdditiveBlending})]}),z.tallList.length>0&&(0,t.jsxs)("instancedMesh",{ref:m,args:[void 0,void 0,z.tallList.length],children:[(0,t.jsx)("boxGeometry",{args:[1,1,1]}),(0,t.jsx)("meshStandardMaterial",{color:"#11182c",metalness:.7,roughness:.4})]}),z.tallList.length>0&&(0,t.jsxs)("instancedMesh",{ref:f,args:[void 0,void 0,z.tallList.length],children:[(0,t.jsx)("sphereGeometry",{args:[.07,8,8]}),(0,t.jsx)("meshBasicMaterial",{color:c,toneMapped:!1,transparent:!0,opacity:.8,blending:a.AdditiveBlending,depthWrite:!1})]})]})]})});var P=e.i(60099);let V=[98,76,84,68,58,90],E={display:"flex",alignItems:"center",gap:"6px",padding:"4px 11px",borderRadius:"999px",background:"rgba(7,11,22,0.72)",border:"1px solid rgba(255,255,255,0.16)",color:"#eaf2ff",fontSize:"11px",fontWeight:600,letterSpacing:"0.04em",whiteSpace:"nowrap",backdropFilter:"blur(6px)",WebkitBackdropFilter:"blur(6px)",fontFamily:"var(--font-space-grotesk), system-ui, sans-serif",opacity:0,pointerEvents:"none",willChange:"opacity"},T=.36,U=new a.Color(g),L=new a.Color("#F59E0B"),H=new a.Color(c),D=new a.Color,$=r.default.memo(function({progress:e,isMobile:n=!1}){let s=(0,r.useRef)(0),o=(0,r.useRef)([]),l=(0,r.useRef)([]),d=(0,r.useRef)(null),h=(0,r.useRef)(null),m=(0,r.useRef)(null),f=(0,r.useRef)(null),x=(0,r.useRef)(null),j=(0,r.useRef)(null),z=(0,r.useMemo)(()=>M.map((e,t)=>{let r,n,i,s,o,l;return r=t/M.length*Math.PI*2+.4,n=9+4*B(6.1*t),i=new a.Vector3(Math.cos(r)*n,.16,Math.sin(r)*n),s=(B(3.7*t)-.5)*5,o=new a.Vector3(Math.cos(r)*n*.4+Math.cos(r+Math.PI/2)*s,.18,Math.sin(r)*n*.4+Math.sin(r+Math.PI/2)*s),l=new a.Vector3(0,.2,0),new a.CatmullRomCurve3([l,o,i])}),[]),R=(0,r.useMemo)(()=>z.map(e=>new a.TubeGeometry(e,60,.05,8,!1)),[z]),S=(0,r.useMemo)(()=>new a.CatmullRomCurve3([new a.Vector3(-11,.3,7),new a.Vector3(-4,.3,3),new a.Vector3(2.6,.3,-1.2),new a.Vector3(9.5,.3,-6.5)]),[]),W=(0,r.useMemo)(()=>new a.TubeGeometry(S,70,.07,8,!1),[S]),k=(0,r.useMemo)(()=>{let e=new a.CatmullRomCurve3([new a.Vector3(-11,.3,7),new a.Vector3(-3.5,.3,1.5),new a.Vector3(2.6,.6,-1.2),new a.Vector3(6.5,.3,-3),new a.Vector3(9.5,.3,-6.5)]);return new a.TubeGeometry(e,80,.08,8,!1)},[]),G=(0,r.useMemo)(()=>new a.Vector3(2.6,0,-1.2),[]),C=(0,r.useMemo)(()=>new a.Vector3,[]),I=(0,r.useMemo)(()=>M.map(e=>new a.Color(e)),[]),F=(0,r.useMemo)(()=>new a.Color(c),[]),$=(0,r.useRef)([]),N=(0,r.useRef)([]),O=(0,r.useRef)(null),_=(0,r.useMemo)(()=>z.map(e=>{let t=e.getPointAt(.82).clone();return t.y+=1,t}),[z]);return(0,i.useFrame)((t,r)=>{let n=e.current??0;s.current=A(s.current,n,3.2,r);let i=s.current,a=t.clock.elapsedTime,c=w(.1,.18,i),u=w(.13,.18,i),p=w(.28,.33,i),g=w(.6,.74,i),y=w(.74,.8,i),M=v((i-.74)/.26),b=w(.97,1,i);for(let e=0;e.02;if(r.visible=n,!n)continue;let i=((.14*a+.34*t)%1+1)%1;e.getPointAt(i,C),r.position.set(C.x,.3,C.z),e.getPointAt(Math.min(.999,i+.02),C),r.lookAt(C.x,.3,C.z),r.scale.setScalar(1e-4+w(0,.12,M)*(1-b))}}let R=w(.26,.28+.03,i),W=1-w(.46,.54,i),G=w(T-.015,T+.03,i),P=R*W,V=v((i-.28)/.15999999999999998);if(d.current){let e=G>.5?k.parameters.path:S;e.getPointAt(v(V),C),d.current.position.set(C.x,.32,C.z),e.getPointAt(v(V+.01),C),d.current.lookAt(C.x,.32,C.z),d.current.visible=P>.02,d.current.scale.setScalar(1e-4+P)}let E=v((i-.28)/(T-.28)),_=G>0?.14+.86*G:v(1-.92*E);if(h.current&&(h.current.scale.x=.02+.98*_,h.current.position.x=-.18*(1-_)),m.current&&(_>.5?D.copy(L).lerp(U,(_-.5)*2):D.copy(H).lerp(L,2*_),m.current.color.copy(D)),x.current){let e=w(T-.06,T,i);x.current.opacity=.55*Math.max(.4*R,e)*P*(1-G)*(.7+.3*Math.sin(5*a))}if(j.current&&(j.current.opacity=P*G*(.65+.25*Math.sin(3*a))),f.current&&(f.current.scale.y=1e-4+G,f.current.visible=G>.01&&W>.02),O.current){let e=G*W;O.current.style.opacity=e.toFixed(3),O.current.style.display=e<.02?"none":"flex"}}),(0,t.jsxs)("group",{children:[R.map((e,r)=>(0,t.jsxs)("group",{children:[(0,t.jsx)("mesh",{geometry:e,children:(0,t.jsx)("meshBasicMaterial",{ref:e=>{o.current[r]=e},color:M[r],toneMapped:!1,transparent:!0,opacity:0,blending:a.AdditiveBlending,depthWrite:!1})}),(0,t.jsxs)("mesh",{ref:e=>{l.current[r]=e},children:[(0,t.jsx)("sphereGeometry",{args:[1,12,12]}),(0,t.jsx)("meshBasicMaterial",{color:y,toneMapped:!1,transparent:!0,opacity:.95,blending:a.AdditiveBlending,depthWrite:!1})]})]},r)),_.map((e,r)=>{let i=0===r,s=4===r;if(n)return null;let o=i||s?c:M[r];return(0,t.jsx)(P.Html,{position:[e.x,e.y,e.z],center:!0,zIndexRange:[30,0],style:{pointerEvents:"none"},children:(0,t.jsxs)("div",{ref:e=>{N.current[r]=e},style:{...E,border:i?"1px solid rgba(226,53,66,0.85)":s?"1px solid rgba(239,68,68,0.7)":E.border,background:i?"rgba(28,8,11,0.85)":E.background,boxShadow:i?"0 0 22px rgba(192,18,39,0.6)":"none"},children:[(0,t.jsx)("span",{style:{width:7,height:7,borderRadius:"50%",background:o,boxShadow:`0 0 8px ${o}`}}),b[r],(0,t.jsx)("span",{style:{fontWeight:800,color:s?"#fca5a5":"#fff",marginLeft:2},children:V[r]}),i?(0,t.jsx)("span",{style:{color:"#4ade80",fontWeight:700},children:" ✓ Best"}):null,s?(0,t.jsx)("span",{style:{color:"#fca5a5",fontWeight:700},children:" ✕ Over range"}):null]})},`lbl${r}`)}),(0,t.jsx)("mesh",{geometry:W,children:(0,t.jsx)("meshBasicMaterial",{ref:x,color:c,toneMapped:!1,transparent:!0,opacity:0,blending:a.AdditiveBlending,depthWrite:!1})}),(0,t.jsx)("mesh",{geometry:k,children:(0,t.jsx)("meshBasicMaterial",{ref:j,color:g,toneMapped:!1,transparent:!0,opacity:0,blending:a.AdditiveBlending,depthWrite:!1})}),(0,t.jsxs)("group",{ref:f,position:G,visible:!1,children:[(0,t.jsxs)("mesh",{position:[0,.55,0],children:[(0,t.jsx)("boxGeometry",{args:[.32,1.1,.32]}),(0,t.jsx)("meshStandardMaterial",{color:"#0e1b14",emissive:g,emissiveIntensity:.6,metalness:.4,roughness:.5})]}),(0,t.jsxs)("mesh",{position:[0,1.18,0],children:[(0,t.jsx)("boxGeometry",{args:[.5,.18,.42]}),(0,t.jsx)("meshBasicMaterial",{color:g,toneMapped:!1,transparent:!0,opacity:.9,blending:a.AdditiveBlending})]}),(0,t.jsxs)("mesh",{rotation:[-Math.PI/2,0,0],position:[0,.03,0],children:[(0,t.jsx)("ringGeometry",{args:[.5,.62,40]}),(0,t.jsx)("meshBasicMaterial",{color:g,toneMapped:!1,transparent:!0,opacity:.7,side:a.DoubleSide,blending:a.AdditiveBlending,depthWrite:!1})]})]}),!n&&(0,t.jsx)(P.Html,{position:[G.x,1.7,G.z],center:!0,zIndexRange:[30,0],style:{pointerEvents:"none"},children:(0,t.jsxs)("div",{ref:O,style:{...E,border:"1px solid rgba(34,197,94,0.65)",boxShadow:"0 0 18px rgba(34,197,94,0.45)"},children:[(0,t.jsx)("span",{style:{width:7,height:7,borderRadius:"50%",background:g,boxShadow:`0 0 8px ${g}`}}),"Recharge Hub"]})}),(0,t.jsxs)("group",{ref:d,visible:!1,children:[(0,t.jsxs)("mesh",{position:[0,.12,0],children:[(0,t.jsx)("boxGeometry",{args:[.5,.16,.22]}),(0,t.jsx)("meshStandardMaterial",{color:"#11203a",emissive:u,emissiveIntensity:.5,metalness:.5,roughness:.4})]}),(0,t.jsxs)("mesh",{position:[.18,.26,0],children:[(0,t.jsx)("boxGeometry",{args:[.06,.28,.12]}),(0,t.jsx)("meshStandardMaterial",{color:"#0d1830",emissive:u,emissiveIntensity:.4,metalness:.5,roughness:.4})]}),(0,t.jsxs)("mesh",{position:[.3,.14,0],children:[(0,t.jsx)("sphereGeometry",{args:[.06,10,10]}),(0,t.jsx)("meshBasicMaterial",{color:y,toneMapped:!1})]}),[-.16,.16].map((e,r)=>(0,t.jsxs)("mesh",{position:[e,.05,0],rotation:[Math.PI/2,0,0],children:[(0,t.jsx)("cylinderGeometry",{args:[.09,.09,.05,14]}),(0,t.jsx)("meshStandardMaterial",{color:"#05070d",metalness:.6,roughness:.5})]},r)),(0,t.jsxs)("group",{position:[0,.62,0],children:[(0,t.jsxs)("mesh",{children:[(0,t.jsx)("boxGeometry",{args:[.42,.12,.02]}),(0,t.jsx)("meshBasicMaterial",{color:"#0a0f1c",toneMapped:!1,transparent:!0,opacity:.85})]}),(0,t.jsxs)("mesh",{ref:h,position:[0,0,.012],children:[(0,t.jsx)("boxGeometry",{args:[.38,.08,.02]}),(0,t.jsx)("meshBasicMaterial",{ref:m,color:g,toneMapped:!1,blending:a.AdditiveBlending})]})]})]}),[{w:.34,h:.16,d:.2,col:p},{w:.46,h:.22,d:.26,col:y},{w:.6,h:.3,d:.32,col:c}].map((e,r)=>(0,t.jsxs)("mesh",{ref:e=>{$.current[r]=e},visible:!1,children:[(0,t.jsx)("boxGeometry",{args:[e.w,e.h,e.d]}),(0,t.jsx)("meshStandardMaterial",{color:"#12060a",emissive:e.col,emissiveIntensity:.7,metalness:.5,roughness:.4})]},`disp${r}`))]})}),N=new a.Object3D,O=new a.Color(d),_=new a.Color(g),q=new a.Color,K=new a.Vector3,X=r.default.memo(function({progress:e,isMobile:n=!1}){let s=(0,r.useRef)(0),o=(0,r.useRef)(null),l=(0,r.useRef)([]),c=(0,r.useRef)(null),m=(0,r.useRef)(null),f=(0,r.useRef)(null),x=(0,r.useRef)(null),g=n?40:70,y=n?70:150,M=n?12:24,b=(0,r.useMemo)(()=>Array.from({length:5},(e,t)=>{let r=t/5*Math.PI*2+.6;return new a.Vector3(6.5*Math.cos(r),0,6.5*Math.sin(r))}),[]),j=(0,r.useMemo)(()=>Array.from({length:g},(e,t)=>{let r=B(3.3*t+1)*Math.PI*2,n=3+17*B(1.9*t+5);return new a.Vector3(Math.cos(r)*n,.12,Math.sin(r)*n)}),[g]),z=(0,r.useMemo)(()=>j.map(e=>{let t=b[0],r=1/0;for(let n of b){let i=e.distanceToSquared(n);i{let e=[];for(let t of z)e.push(t.a.x,t.a.y,t.a.z,t.b.x,t.b.y,t.b.z);let t=new a.BufferGeometry;return t.setAttribute("position",new a.Float32BufferAttribute(e,3)),t},[z]),S=(0,r.useMemo)(()=>{let e=new Float32Array(3*j.length);j.forEach((t,r)=>{e[3*r]=t.x,e[3*r+1]=t.y,e[3*r+2]=t.z});let t=new a.BufferGeometry;return t.setAttribute("position",new a.BufferAttribute(e,3)),t},[j]),W=(0,r.useMemo)(()=>Array.from({length:y},(e,t)=>({seg:Math.floor(B(4.7*t)*z.length),speed:.12+.25*B(2.1*t),phase:B(8.3*t)})),[y,z.length]),k=(0,r.useMemo)(()=>{let e=new a.BufferGeometry;return e.setAttribute("position",new a.BufferAttribute(new Float32Array(3*y),3)),e},[y]),G=(0,r.useMemo)(()=>Array.from({length:M},(e,t)=>({seg:Math.floor(B(5.9*t+3)*z.length),speed:.06+.08*B(3.7*t),phase:B(6.6*t),kind:Math.floor(3*B(9.2*t))})),[M,z.length]);return(0,r.useLayoutEffect)(()=>{x.current&&(j.forEach((e,t)=>{N.position.set(e.x,.18,e.z),N.scale.set(.06,.36,.06),N.rotation.set(0,0,0),N.updateMatrix(),x.current.setMatrixAt(t,N.matrix),x.current.setColorAt(t,O)}),x.current.instanceMatrix.needsUpdate=!0,x.current.instanceColor&&(x.current.instanceColor.needsUpdate=!0)),f.current&&(G.forEach((e,t)=>{N.position.set(0,-50,0),N.updateMatrix(),f.current.setMatrixAt(t,N.matrix);let r=0===e.kind?u:1===e.kind?h:p;f.current.setColorAt(t,q.set(r))}),f.current.instanceMatrix.needsUpdate=!0,f.current.instanceColor&&(f.current.instanceColor.needsUpdate=!0))},[j,G]),(0,i.useFrame)((t,r)=>{let n=e.current??0;s.current=A(s.current,n,3,r);let i=s.current,a=t.clock.elapsedTime,u=w(.11,.19,i),d=w(.71,.8,i),p=w(.88,1,i);if(l.current.forEach((e,t)=>{e&&(e.emissiveIntensity=(.3+1.5*d)*(.85+.15*Math.sin(2*a+t)))}),o.current&&(o.current.visible=u>.02),c.current&&(c.current.opacity=(.05+.16*u+.1*p)*(.8+.2*Math.sin(1.5*a))),m.current){let e=m.current.geometry.getAttribute("position");for(let t=0;t.02}if(x.current){for(let e=0;e(0,t.jsxs)("group",{position:[e.x,0,e.z],children:[(0,t.jsxs)("mesh",{position:[0,.5,0],children:[(0,t.jsx)("boxGeometry",{args:[1.6,1,1.3]}),(0,t.jsx)("meshStandardMaterial",{ref:e=>{l.current[r]=e},color:"#0b1426",emissive:d,emissiveIntensity:.3,metalness:.4,roughness:.5})]}),(0,t.jsxs)("mesh",{rotation:[-Math.PI/2,0,0],position:[0,.03,0],children:[(0,t.jsx)("ringGeometry",{args:[1.2,1.4,36]}),(0,t.jsx)("meshBasicMaterial",{color:u,toneMapped:!1,transparent:!0,opacity:.4,side:a.DoubleSide,blending:a.AdditiveBlending,depthWrite:!1})]})]},r))})]})}),Y=r.default.memo(function({progress:e,isMobile:n=!1}){let s=(0,r.useRef)(0),o=(0,r.useRef)(null),l=(0,r.useRef)(null),p=(0,r.useRef)(null),h=(0,r.useRef)([]),m=(0,r.useRef)(null),f=(0,r.useRef)(null),x=n?90:180,M=(0,r.useMemo)(()=>{let e=[];for(let t=0;t{let e=new a.BufferGeometry;return e.setAttribute("position",new a.BufferAttribute(new Float32Array(3*x),3)),e},[x]),j=(0,r.useMemo)(()=>{let e=new a.CatmullRomCurve3([new a.Vector3(-6,.3,5),new a.Vector3(-2,1.6,1),new a.Vector3(3,.3,-4)]);return new a.TubeGeometry(e,50,.07,8,!1)},[]),z=(0,r.useMemo)(()=>new a.Vector3(-2,.6,1),[]);return(0,i.useFrame)((t,r)=>{let n=e.current??0;s.current=A(s.current,n,3,r);let i=s.current,a=t.clock.elapsedTime,c=w(.57,.65,i),u=c*(1-w(.74,.82,i));o.current&&(o.current.visible=u>.02,o.current.position.y=2.6+1.9999999999999996*c,o.current.scale.setScalar(1e-4+1.5*u),o.current.rotation.z=.02*Math.sin(.3*a)),l.current&&(l.current.rotation.z=-(1.4*a)),p.current&&(p.current.opacity=u*(.6+.2*Math.sin(4*a))),h.current.forEach(e=>{e&&(e.opacity=.8*u)});let d=w(.62,.6+.08,i),x=.45*a%1;if(f.current&&(f.current.opacity=u*d*(1-x)*(.6+.4*Math.sin(6*a))),m.current){let e=m.current.geometry.getAttribute("position"),t=3.4*x;for(let r=0;r{let n=r/12*Math.PI*2;return(0,t.jsxs)("mesh",{position:[.88*Math.cos(n),.88*Math.sin(n),0],rotation:[0,0,n],children:[(0,t.jsx)("boxGeometry",{args:[.1,.02,.02]}),(0,t.jsx)("meshBasicMaterial",{ref:e=>{e&&(h.current[r]=e)},color:r%3==0?y:u,toneMapped:!1,transparent:!0,opacity:.8,blending:a.AdditiveBlending,depthWrite:!1})]},r)}),(0,t.jsxs)("mesh",{ref:l,position:[0,0,.02],children:[(0,t.jsx)("boxGeometry",{args:[.04,1.5,.02]}),(0,t.jsx)("meshBasicMaterial",{ref:p,color:g,toneMapped:!1,transparent:!0,opacity:.7,blending:a.AdditiveBlending,depthWrite:!1})]}),(0,t.jsxs)("mesh",{children:[(0,t.jsx)("sphereGeometry",{args:[.07,16,16]}),(0,t.jsx)("meshBasicMaterial",{color:y,toneMapped:!1})]})]}),(0,t.jsx)("mesh",{geometry:j,children:(0,t.jsx)("meshBasicMaterial",{ref:f,color:c,toneMapped:!1,transparent:!0,opacity:0,blending:a.AdditiveBlending,depthWrite:!1})}),(0,t.jsx)("points",{ref:m,geometry:b,children:(0,t.jsx)("pointsMaterial",{size:n?.12:.1,color:c,transparent:!0,opacity:0,sizeAttenuation:!0,blending:a.AdditiveBlending,depthWrite:!1})})]})}),Z=new a.Vector3,J=new a.Vector3;function Q({progress:e}){let t=(0,r.useRef)(new a.Vector3(0,6,0)),n=(0,r.useRef)(!1);return(0,i.useFrame)((r,i)=>{var s,o,a,l,c,u;let d=v(e.current??0),p=0;for(let e=0;e=j[e].at&&d<=j[e+1].at){p=e;break}d>j[j.length-1].at&&(p=j.length-2)}let h=j[p],m=j[p+1],f=m.at-h.at||1,x=w(0,1,v((d-h.at)/f));Z.set((s=h.pos[0],s+(m.pos[0]-s)*x),(o=h.pos[1],o+(m.pos[1]-o)*x),(a=h.pos[2],a+(m.pos[2]-a)*x)),J.set((l=h.look[0],l+(m.look[0]-l)*x),(c=h.look[1],c+(m.look[1]-c)*x),(u=h.look[2],u+(m.look[2]-u)*x));let g=r.clock.elapsedTime;Z.x+=.14*Math.sin(.16*g),Z.y+=.07*Math.sin(.21*g);let y=r.camera;n.current?(y.position.x=A(y.position.x,Z.x,2.6,i),y.position.y=A(y.position.y,Z.y,2.6,i),y.position.z=A(y.position.z,Z.z,2.6,i),t.current.x=A(t.current.x,J.x,3,i),t.current.y=A(t.current.y,J.y,3,i),t.current.z=A(t.current.z,J.z,3,i)):(y.position.copy(Z),t.current.copy(J),n.current=!0),y.lookAt(t.current)}),null}let ee=r.default.memo(function({progress:e,reduced:r=!1,isMobile:i=!1,active:a=!0}){return(0,t.jsxs)(n.Canvas,{flat:!0,dpr:[1,i||r?1.25:1.5],camera:{position:j[0].pos,fov:52,near:.1,far:200},gl:{antialias:!i,powerPreference:"high-performance",alpha:!1},frameloop:a?"always":"never",children:[(0,t.jsx)("color",{attach:"background",args:[l]}),(0,t.jsx)("fog",{attach:"fog",args:[l,40,100]}),(0,t.jsx)("ambientLight",{intensity:.55}),(0,t.jsx)("directionalLight",{position:[8,18,10],intensity:.7,color:p}),(0,t.jsx)("pointLight",{position:[-10,8,-8],intensity:40,distance:60,color:m}),(0,t.jsx)("pointLight",{position:[0,9,0],intensity:30,distance:40,color:u}),(0,t.jsx)(Q,{progress:e}),(0,t.jsx)(F,{progress:e,reduced:r,isMobile:i}),(0,t.jsx)($,{progress:e,reduced:r,isMobile:i}),(0,t.jsx)(X,{progress:e,reduced:r,isMobile:i}),(0,t.jsx)(Y,{progress:e,reduced:r,isMobile:i}),(0,t.jsx)(R,{progress:e,reduced:r,isMobile:i}),!r&&(0,t.jsx)(s.EffectComposer,{multisampling:2*!i,children:(0,t.jsx)(s.Bloom,{mipmapBlur:!0,intensity:i?.9:1.25,luminanceThreshold:.12,luminanceSmoothing:.045,radius:i?.65:.82,kernelSize:o.KernelSize.MEDIUM})})]})});e.s(["default",0,ee],69986)},39184,e=>{e.n(e.i(69986))}]); \ No newline at end of file diff --git a/build/_next/static/chunks/0-w08rrpmvn8z.js b/build/_next/static/chunks/0-w08rrpmvn8z.js deleted file mode 100644 index 2697d9f..0000000 --- a/build/_next/static/chunks/0-w08rrpmvn8z.js +++ /dev/null @@ -1,243 +0,0 @@ -(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,55838,(e,t,n)=>{"use strict";var i=e.r(71645),r="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=i.useState,s=i.useEffect,o=i.useLayoutEffect,l=i.useDebugValue;function u(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!r(e,n)}catch(e){return!0}}var c="u"{"use strict";t.exports=e.r(55838)},52822,(e,t,n)=>{"use strict";var i=e.r(71645),r=e.r(2239),a="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},s=r.useSyncExternalStore,o=i.useRef,l=i.useEffect,u=i.useMemo,c=i.useDebugValue;n.useSyncExternalStoreWithSelector=function(e,t,n,i,r){var h=o(null);if(null===h.current){var d={hasValue:!1,value:null};h.current=d}else d=h.current;var p=s(e,(h=u(function(){function e(e){if(!l){if(l=!0,s=e,e=i(e),void 0!==r&&d.hasValue){var t=d.value;if(r(t,e))return o=t}return o=e}if(t=o,a(s,e))return t;var n=i(e);return void 0!==r&&r(t,n)?(s=e,t):(s=e,o=n)}var s,o,l=!1,u=void 0===n?null:n;return[function(){return e(t())},null===u?void 0:function(){return e(u())}]},[t,n,i,r]))[0],h[1]);return l(function(){d.hasValue=!0,d.value=p},[p]),c(p),p}},30224,(e,t,n)=>{"use strict";t.exports=e.r(52822)},66936,(e,t,n)=>{"use strict";function i(e,t){var n=e.length;for(e.push(t);0>>1,r=e[i];if(0>>1;is(l,n))us(c,l)?(e[i]=c,e[u]=n,i=u):(e[i]=l,e[o]=n,i=o);else if(us(c,n))e[i]=c,e[u]=n,i=u;else break}}return t}function s(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if(n.unstable_now=void 0,"object"==typeof performance&&"function"==typeof performance.now){var o,l=performance;n.unstable_now=function(){return l.now()}}else{var u=Date,c=u.now();n.unstable_now=function(){return u.now()-c}}var h=[],d=[],p=1,f=null,m=3,g=!1,v=!1,_=!1,y=!1,x="function"==typeof setTimeout?setTimeout:null,b="function"==typeof clearTimeout?clearTimeout:null,S="u">typeof setImmediate?setImmediate:null;function M(e){for(var t=r(d);null!==t;){if(null===t.callback)a(d);else if(t.startTime<=e)a(d),t.sortIndex=t.expirationTime,i(h,t);else break;t=r(d)}}function T(e){if(_=!1,M(e),!v)if(null!==r(h))v=!0,w||(w=!0,o());else{var t=r(d);null!==t&&N(T,t.startTime-e)}}var w=!1,E=-1,A=5,C=-1;function R(){return!!y||!(n.unstable_now()-Ce&&R());){var s=f.callback;if("function"==typeof s){f.callback=null,m=f.priorityLevel;var l=s(f.expirationTime<=e);if(e=n.unstable_now(),"function"==typeof l){f.callback=l,M(e),t=!0;break t}f===r(h)&&a(h),M(e)}else a(h);f=r(h)}if(null!==f)t=!0;else{var u=r(d);null!==u&&N(T,u.startTime-e),t=!1}}break e}finally{f=null,m=i,g=!1}}}finally{t?o():w=!1}}}if("function"==typeof S)o=function(){S(P)};else if("u">typeof MessageChannel){var I=new MessageChannel,L=I.port2;I.port1.onmessage=P,o=function(){L.postMessage(null)}}else o=function(){x(P,0)};function N(e,t){E=x(function(){e(n.unstable_now())},t)}n.unstable_IdlePriority=5,n.unstable_ImmediatePriority=1,n.unstable_LowPriority=4,n.unstable_NormalPriority=3,n.unstable_Profiling=null,n.unstable_UserBlockingPriority=2,n.unstable_cancelCallback=function(e){e.callback=null},n.unstable_forceFrameRate=function(e){0>e||125s?(e.sortIndex=a,i(d,e),null===r(h)&&e===r(d)&&(_?(b(E),E=-1):_=!0,N(T,a-s))):(e.sortIndex=l,i(h,e),v||g||(v=!0,w||(w=!0,o()))),e},n.unstable_shouldYield=R,n.unstable_wrapCallback=function(e){var t=m;return function(){var n=m;m=t;try{return e.apply(this,arguments)}finally{m=n}}}},89499,(e,t,n)=>{"use strict";t.exports=e.r(66936)},75056,90072,8560,8155,1950,25234,28600,e=>{"use strict";let t,n,i,r,a,s,o,l,u,c,h,d,p,f,m,g,v,_;var y,x,b,S,M,T,w=e.i(47167),E=e.i(71645);let A={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},C={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},R="attached",P="detached",I="srgb",L="srgb-linear",N="linear",U="srgb",D="300 es";class O{addEventListener(e,t){void 0===this._listeners&&(this._listeners={});let n=this._listeners;void 0===n[e]&&(n[e]=[]),-1===n[e].indexOf(t)&&n[e].push(t)}hasEventListener(e,t){if(void 0===this._listeners)return!1;let n=this._listeners;return void 0!==n[e]&&-1!==n[e].indexOf(t)}removeEventListener(e,t){if(void 0===this._listeners)return;let n=this._listeners[e];if(void 0!==n){let e=n.indexOf(t);-1!==e&&n.splice(e,1)}}dispatchEvent(e){if(void 0===this._listeners)return;let t=this._listeners[e.type];if(void 0!==t){e.target=this;let n=t.slice(0);for(let t=0,i=n.length;t>8&255]+F[e>>16&255]+F[e>>24&255]+"-"+F[255&t]+F[t>>8&255]+"-"+F[t>>16&15|64]+F[t>>24&255]+"-"+F[63&n|128]+F[n>>8&255]+"-"+F[n>>16&255]+F[n>>24&255]+F[255&i]+F[i>>8&255]+F[i>>16&255]+F[i>>24&255]).toLowerCase()}function V(e,t,n){return Math.max(t,Math.min(n,e))}function G(e,t){return(e%t+t)%t}function W(e,t,n){return(1-n)*e+n*t}function j(e,t){switch(t.constructor){case Float32Array:return e;case Uint32Array:return e/0xffffffff;case Uint16Array:return e/65535;case Uint8Array:return e/255;case Int32Array:return Math.max(e/0x7fffffff,-1);case Int16Array:return Math.max(e/32767,-1);case Int8Array:return Math.max(e/127,-1);default:throw Error("Invalid component type.")}}function X(e,t){switch(t.constructor){case Float32Array:return e;case Uint32Array:return Math.round(0xffffffff*e);case Uint16Array:return Math.round(65535*e);case Uint8Array:return Math.round(255*e);case Int32Array:return Math.round(0x7fffffff*e);case Int16Array:return Math.round(32767*e);case Int8Array:return Math.round(127*e);default:throw Error("Invalid component type.")}}let q={DEG2RAD:B,RAD2DEG:k,generateUUID:H,clamp:V,euclideanModulo:G,mapLinear:function(e,t,n,i,r){return i+(e-t)*(r-i)/(n-t)},inverseLerp:function(e,t,n){return e!==t?(n-e)/(t-e):0},lerp:W,damp:function(e,t,n,i){return W(e,t,1-Math.exp(-n*i))},pingpong:function(e,t=1){return t-Math.abs(G(e,2*t)-t)},smoothstep:function(e,t,n){return e<=t?0:e>=n?1:(e=(e-t)/(n-t))*e*(3-2*e)},smootherstep:function(e,t,n){return e<=t?0:e>=n?1:(e=(e-t)/(n-t))*e*e*(e*(6*e-15)+10)},randInt:function(e,t){return e+Math.floor(Math.random()*(t-e+1))},randFloat:function(e,t){return e+Math.random()*(t-e)},randFloatSpread:function(e){return e*(.5-Math.random())},seededRandom:function(e){void 0!==e&&(z=e);let t=z+=0x6d2b79f5;return t=Math.imul(t^t>>>15,1|t),(((t^=t+Math.imul(t^t>>>7,61|t))^t>>>14)>>>0)/0x100000000},degToRad:function(e){return e*B},radToDeg:function(e){return e*k},isPowerOfTwo:function(e){return(e&e-1)==0&&0!==e},ceilPowerOfTwo:function(e){return Math.pow(2,Math.ceil(Math.log(e)/Math.LN2))},floorPowerOfTwo:function(e){return Math.pow(2,Math.floor(Math.log(e)/Math.LN2))},setQuaternionFromProperEuler:function(e,t,n,i,r){let a=Math.cos,s=Math.sin,o=a(n/2),l=s(n/2),u=a((t+i)/2),c=s((t+i)/2),h=a((t-i)/2),d=s((t-i)/2),p=a((i-t)/2),f=s((i-t)/2);switch(r){case"XYX":e.set(o*c,l*h,l*d,o*u);break;case"YZY":e.set(l*d,o*c,l*h,o*u);break;case"ZXZ":e.set(l*h,l*d,o*c,o*u);break;case"XZX":e.set(o*c,l*f,l*p,o*u);break;case"YXY":e.set(l*p,o*c,l*f,o*u);break;case"ZYZ":e.set(l*f,l*p,o*c,o*u);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+r)}},normalize:X,denormalize:j};class Y{constructor(e=0,t=0){Y.prototype.isVector2=!0,this.x=e,this.y=t}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){let t=this.x,n=this.y,i=e.elements;return this.x=i[0]*t+i[3]*n+i[6],this.y=i[1]*t+i[4]*n+i[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=V(this.x,e.x,t.x),this.y=V(this.y,e.y,t.y),this}clampScalar(e,t){return this.x=V(this.x,e,t),this.y=V(this.y,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(V(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());return 0===t?Math.PI/2:Math.acos(V(this.dot(e)/t,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y;return t*t+n*n}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){let n=Math.cos(t),i=Math.sin(t),r=this.x-e.x,a=this.y-e.y;return this.x=r*n-a*i+e.x,this.y=r*i+a*n+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class Z{constructor(e,t,n,i,r,a,s,o,l){Z.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],void 0!==e&&this.set(e,t,n,i,r,a,s,o,l)}set(e,t,n,i,r,a,s,o,l){let u=this.elements;return u[0]=e,u[1]=i,u[2]=s,u[3]=t,u[4]=r,u[5]=o,u[6]=n,u[7]=a,u[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],this}extractBasis(e,t,n){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(e){let t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,i=t.elements,r=this.elements,a=n[0],s=n[3],o=n[6],l=n[1],u=n[4],c=n[7],h=n[2],d=n[5],p=n[8],f=i[0],m=i[3],g=i[6],v=i[1],_=i[4],y=i[7],x=i[2],b=i[5],S=i[8];return r[0]=a*f+s*v+o*x,r[3]=a*m+s*_+o*b,r[6]=a*g+s*y+o*S,r[1]=l*f+u*v+c*x,r[4]=l*m+u*_+c*b,r[7]=l*g+u*y+c*S,r[2]=h*f+d*v+p*x,r[5]=h*m+d*_+p*b,r[8]=h*g+d*y+p*S,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[1],i=e[2],r=e[3],a=e[4],s=e[5],o=e[6],l=e[7],u=e[8];return t*a*u-t*s*l-n*r*u+n*s*o+i*r*l-i*a*o}invert(){let e=this.elements,t=e[0],n=e[1],i=e[2],r=e[3],a=e[4],s=e[5],o=e[6],l=e[7],u=e[8],c=u*a-s*l,h=s*o-u*r,d=l*r-a*o,p=t*c+n*h+i*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);let f=1/p;return e[0]=c*f,e[1]=(i*l-u*n)*f,e[2]=(s*n-i*a)*f,e[3]=h*f,e[4]=(u*t-i*o)*f,e[5]=(i*r-s*t)*f,e[6]=d*f,e[7]=(n*o-l*t)*f,e[8]=(a*t-n*r)*f,this}transpose(){let e,t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){let t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,n,i,r,a,s){let o=Math.cos(r),l=Math.sin(r);return this.set(n*o,n*l,-n*(o*a+l*s)+a+e,-i*l,i*o,-i*(-l*a+o*s)+s+t,0,0,1),this}scale(e,t){return this.premultiply(J.makeScale(e,t)),this}rotate(e){return this.premultiply(J.makeRotation(-e)),this}translate(e,t){return this.premultiply(J.makeTranslation(e,t)),this}makeTranslation(e,t){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,n,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){let t=this.elements,n=e.elements;for(let e=0;e<9;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<9;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e}clone(){return new this.constructor().fromArray(this.elements)}}let J=new Z;function K(e){for(let t=e.length-1;t>=0;--t)if(e[t]>=65535)return!0;return!1}let $={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:Uint8ClampedArray,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};function Q(e,t){return new $[e](t)}function ee(e){return document.createElementNS("http://www.w3.org/1999/xhtml",e)}function et(){let e=ee("canvas");return e.style.display="block",e}let en={};function ei(e){e in en||(en[e]=!0,console.warn(e))}function er(e,t,n){return new Promise(function(i,r){setTimeout(function a(){switch(e.clientWaitSync(t,e.SYNC_FLUSH_COMMANDS_BIT,0)){case e.WAIT_FAILED:r();break;case e.TIMEOUT_EXPIRED:setTimeout(a,n);break;default:i()}},n)})}function ea(e){let t=e.elements;t[2]=.5*t[2]+.5*t[3],t[6]=.5*t[6]+.5*t[7],t[10]=.5*t[10]+.5*t[11],t[14]=.5*t[14]+.5*t[15]}function es(e){let t=e.elements;-1===t[11]?(t[10]=-t[10]-1,t[14]=-t[14]):(t[10]=-t[10],t[14]=-t[14]+1)}let eo=new Z().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),el=new Z().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715),eu=(d=[.64,.33,.3,.6,.15,.06],p=[.2126,.7152,.0722],f=[.3127,.329],(h={enabled:!0,workingColorSpace:L,spaces:{},convert:function(e,t,n){return!1!==this.enabled&&t!==n&&t&&n&&(this.spaces[t].transfer===U&&(e.r=ec(e.r),e.g=ec(e.g),e.b=ec(e.b)),this.spaces[t].primaries!==this.spaces[n].primaries&&(e.applyMatrix3(this.spaces[t].toXYZ),e.applyMatrix3(this.spaces[n].fromXYZ)),this.spaces[n].transfer===U&&(e.r=eh(e.r),e.g=eh(e.g),e.b=eh(e.b))),e},fromWorkingColorSpace:function(e,t){return this.convert(e,this.workingColorSpace,t)},toWorkingColorSpace:function(e,t){return this.convert(e,t,this.workingColorSpace)},getPrimaries:function(e){return this.spaces[e].primaries},getTransfer:function(e){return""===e?N:this.spaces[e].transfer},getLuminanceCoefficients:function(e,t=this.workingColorSpace){return e.fromArray(this.spaces[t].luminanceCoefficients)},define:function(e){Object.assign(this.spaces,e)},_getMatrix:function(e,t,n){return e.copy(this.spaces[t].toXYZ).multiply(this.spaces[n].fromXYZ)},_getDrawingBufferColorSpace:function(e){return this.spaces[e].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(e=this.workingColorSpace){return this.spaces[e].workingColorSpaceConfig.unpackColorSpace}}).define({[L]:{primaries:d,whitePoint:f,transfer:N,toXYZ:eo,fromXYZ:el,luminanceCoefficients:p,workingColorSpaceConfig:{unpackColorSpace:I},outputColorSpaceConfig:{drawingBufferColorSpace:I}},[I]:{primaries:d,whitePoint:f,transfer:U,toXYZ:eo,fromXYZ:el,luminanceCoefficients:p,outputColorSpaceConfig:{drawingBufferColorSpace:I}}}),h);function ec(e){return e<.04045?.0773993808*e:Math.pow(.9478672986*e+.0521327014,2.4)}function eh(e){return e<.0031308?12.92*e:1.055*Math.pow(e,.41666)-.055}class ed{static getDataURL(e){let n;if(/^data:/i.test(e.src)||"u"2048||n.height>2048?(console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons",e),n.toDataURL("image/jpeg",.6)):n.toDataURL("image/png")}static sRGBToLinear(e){if("u">typeof HTMLImageElement&&e instanceof HTMLImageElement||"u">typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"u">typeof ImageBitmap&&e instanceof ImageBitmap){let t=ee("canvas");t.width=e.width,t.height=e.height;let n=t.getContext("2d");n.drawImage(e,0,0,e.width,e.height);let i=n.getImageData(0,0,e.width,e.height),r=i.data;for(let e=0;etypeof HTMLImageElement&&e instanceof HTMLImageElement||"u">typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"u">typeof ImageBitmap&&e instanceof ImageBitmap?ed.getDataURL(e):e.data?{data:Array.from(e.data),width:e.width,height:e.height,type:e.data.constructor.name}:(console.warn("THREE.Texture: Unable to serialize Texture."),{})}let eg=0;class ev extends O{constructor(e=ev.DEFAULT_IMAGE,t=ev.DEFAULT_MAPPING,n=1001,i=1001,r=1006,a=1008,s=1023,o=1009,l=ev.DEFAULT_ANISOTROPY,u=""){super(),this.isTexture=!0,Object.defineProperty(this,"id",{value:eg++}),this.uuid=H(),this.name="",this.source=new ef(e),this.mipmaps=[],this.mapping=t,this.channel=0,this.wrapS=n,this.wrapT=i,this.magFilter=r,this.minFilter=a,this.anisotropy=l,this.format=s,this.internalFormat=null,this.type=o,this.offset=new Y(0,0),this.repeat=new Y(1,1),this.center=new Y(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new Z,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.colorSpace=u,this.userData={},this.version=0,this.onUpdate=null,this.isRenderTargetTexture=!1,this.pmremVersion=0}get image(){return this.source.data}set image(e=null){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}clone(){return new this.constructor().copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.channel=e.channel,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.colorSpace=e.colorSpace,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}toJSON(e){let t=void 0===e||"string"==typeof e;if(!t&&void 0!==e.textures[this.uuid])return e.textures[this.uuid];let n={metadata:{version:4.6,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(n.userData=this.userData),t||(e.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(e){if(300!==this.mapping)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case 1e3:e.x=e.x-Math.floor(e.x);break;case 1001:e.x=e.x<0?0:1;break;case 1002:1===Math.abs(Math.floor(e.x)%2)?e.x=Math.ceil(e.x)-e.x:e.x=e.x-Math.floor(e.x)}if(e.y<0||e.y>1)switch(this.wrapT){case 1e3:e.y=e.y-Math.floor(e.y);break;case 1001:e.y=e.y<0?0:1;break;case 1002:1===Math.abs(Math.floor(e.y)%2)?e.y=Math.ceil(e.y)-e.y:e.y=e.y-Math.floor(e.y)}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){!0===e&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){!0===e&&this.pmremVersion++}}ev.DEFAULT_IMAGE=null,ev.DEFAULT_MAPPING=300,ev.DEFAULT_ANISOTROPY=1;class e_{constructor(e=0,t=0,n=0,i=1){e_.prototype.isVector4=!0,this.x=e,this.y=t,this.z=n,this.w=i}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,n,i){return this.x=e,this.y=t,this.z=n,this.w=i,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=void 0!==e.w?e.w:1,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){let t=this.x,n=this.y,i=this.z,r=this.w,a=e.elements;return this.x=a[0]*t+a[4]*n+a[8]*i+a[12]*r,this.y=a[1]*t+a[5]*n+a[9]*i+a[13]*r,this.z=a[2]*t+a[6]*n+a[10]*i+a[14]*r,this.w=a[3]*t+a[7]*n+a[11]*i+a[15]*r,this}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this.w/=e.w,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);let t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,n,i,r,a=e.elements,s=a[0],o=a[4],l=a[8],u=a[1],c=a[5],h=a[9],d=a[2],p=a[6],f=a[10];if(.01>Math.abs(o-u)&&.01>Math.abs(l-d)&&.01>Math.abs(h-p)){if(.1>Math.abs(o+u)&&.1>Math.abs(l+d)&&.1>Math.abs(h+p)&&.1>Math.abs(s+c+f-3))return this.set(1,0,0,0),this;t=Math.PI;let e=(s+1)/2,a=(c+1)/2,m=(f+1)/2,g=(o+u)/4,v=(l+d)/4,_=(h+p)/4;return e>a&&e>m?e<.01?(n=0,i=.707106781,r=.707106781):(i=g/(n=Math.sqrt(e)),r=v/n):a>m?a<.01?(n=.707106781,i=0,r=.707106781):(n=g/(i=Math.sqrt(a)),r=_/i):m<.01?(n=.707106781,i=.707106781,r=0):(n=v/(r=Math.sqrt(m)),i=_/r),this.set(n,i,r,t),this}let m=Math.sqrt((p-h)*(p-h)+(l-d)*(l-d)+(u-o)*(u-o));return .001>Math.abs(m)&&(m=1),this.x=(p-h)/m,this.y=(l-d)/m,this.z=(u-o)/m,this.w=Math.acos((s+c+f-1)/2),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this.w=t[15],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this.w=Math.min(this.w,e.w),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this.w=Math.max(this.w,e.w),this}clamp(e,t){return this.x=V(this.x,e.x,t.x),this.y=V(this.y,e.y,t.y),this.z=V(this.z,e.z,t.z),this.w=V(this.w,e.w,t.w),this}clampScalar(e,t){return this.x=V(this.x,e,t),this.y=V(this.y,e,t),this.z=V(this.z,e,t),this.w=V(this.w,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(V(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this.w+=(e.w-this.w)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this.w=e.w+(t.w-e.w)*n,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this.w=e[t+3],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e[t+3]=this.w,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this.w=e.getW(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}class ey extends O{constructor(e=1,t=1,n={}){super(),this.isRenderTarget=!0,this.width=e,this.height=t,this.depth=1,this.scissor=new e_(0,0,e,t),this.scissorTest=!1,this.viewport=new e_(0,0,e,t);const i=new ev({width:e,height:t,depth:1},(n=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:1006,depthBuffer:!0,stencilBuffer:!1,resolveDepthBuffer:!0,resolveStencilBuffer:!0,depthTexture:null,samples:0,count:1},n)).mapping,n.wrapS,n.wrapT,n.magFilter,n.minFilter,n.format,n.type,n.anisotropy,n.colorSpace);i.flipY=!1,i.generateMipmaps=n.generateMipmaps,i.internalFormat=n.internalFormat,this.textures=[];const r=n.count;for(let e=0;e=0?1:-1,i=1-t*t;if(i>Number.EPSILON){let r=Math.sqrt(i),a=Math.atan2(r,t*n);e=Math.sin(e*a)/r,s=Math.sin(s*a)/r}let r=s*n;if(o=o*e+h*r,l=l*e+d*r,u=u*e+p*r,c=c*e+f*r,e===1-s){let e=1/Math.sqrt(o*o+l*l+u*u+c*c);o*=e,l*=e,u*=e,c*=e}}e[t]=o,e[t+1]=l,e[t+2]=u,e[t+3]=c}static multiplyQuaternionsFlat(e,t,n,i,r,a){let s=n[i],o=n[i+1],l=n[i+2],u=n[i+3],c=r[a],h=r[a+1],d=r[a+2],p=r[a+3];return e[t]=s*p+u*c+o*d-l*h,e[t+1]=o*p+u*h+l*c-s*d,e[t+2]=l*p+u*d+s*h-o*c,e[t+3]=u*p-s*c-o*h-l*d,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,n,i){return this._x=e,this._y=t,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t=!0){let n=e._x,i=e._y,r=e._z,a=e._order,s=Math.cos,o=Math.sin,l=s(n/2),u=s(i/2),c=s(r/2),h=o(n/2),d=o(i/2),p=o(r/2);switch(a){case"XYZ":this._x=h*u*c+l*d*p,this._y=l*d*c-h*u*p,this._z=l*u*p+h*d*c,this._w=l*u*c-h*d*p;break;case"YXZ":this._x=h*u*c+l*d*p,this._y=l*d*c-h*u*p,this._z=l*u*p-h*d*c,this._w=l*u*c+h*d*p;break;case"ZXY":this._x=h*u*c-l*d*p,this._y=l*d*c+h*u*p,this._z=l*u*p+h*d*c,this._w=l*u*c-h*d*p;break;case"ZYX":this._x=h*u*c-l*d*p,this._y=l*d*c+h*u*p,this._z=l*u*p-h*d*c,this._w=l*u*c+h*d*p;break;case"YZX":this._x=h*u*c+l*d*p,this._y=l*d*c+h*u*p,this._z=l*u*p-h*d*c,this._w=l*u*c-h*d*p;break;case"XZY":this._x=h*u*c-l*d*p,this._y=l*d*c-h*u*p,this._z=l*u*p+h*d*c,this._w=l*u*c+h*d*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+a)}return!0===t&&this._onChangeCallback(),this}setFromAxisAngle(e,t){let n=t/2,i=Math.sin(n);return this._x=e.x*i,this._y=e.y*i,this._z=e.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(e){let t=e.elements,n=t[0],i=t[4],r=t[8],a=t[1],s=t[5],o=t[9],l=t[2],u=t[6],c=t[10],h=n+s+c;if(h>0){let e=.5/Math.sqrt(h+1);this._w=.25/e,this._x=(u-o)*e,this._y=(r-l)*e,this._z=(a-i)*e}else if(n>s&&n>c){let e=2*Math.sqrt(1+n-s-c);this._w=(u-o)/e,this._x=.25*e,this._y=(i+a)/e,this._z=(r+l)/e}else if(s>c){let e=2*Math.sqrt(1+s-n-c);this._w=(r-l)/e,this._x=(i+a)/e,this._y=.25*e,this._z=(o+u)/e}else{let e=2*Math.sqrt(1+c-n-s);this._w=(a-i)/e,this._x=(r+l)/e,this._y=(o+u)/e,this._z=.25*e}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let n=e.dot(t)+1;return nMath.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0):(this._x=0,this._y=-e.z,this._z=e.y)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x),this._w=n,this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(V(this.dot(e),-1,1)))}rotateTowards(e,t){let n=this.angleTo(e);if(0===n)return this;let i=Math.min(1,t/n);return this.slerp(e,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return 0===e?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){let n=e._x,i=e._y,r=e._z,a=e._w,s=t._x,o=t._y,l=t._z,u=t._w;return this._x=n*u+a*s+i*l-r*o,this._y=i*u+a*o+r*s-n*l,this._z=r*u+a*l+n*o-i*s,this._w=a*u-n*s-i*o-r*l,this._onChangeCallback(),this}slerp(e,t){if(0===t)return this;if(1===t)return this.copy(e);let n=this._x,i=this._y,r=this._z,a=this._w,s=a*e._w+n*e._x+i*e._y+r*e._z;if(s<0?(this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,s=-s):this.copy(e),s>=1)return this._w=a,this._x=n,this._y=i,this._z=r,this;let o=1-s*s;if(o<=Number.EPSILON){let e=1-t;return this._w=e*a+t*this._w,this._x=e*n+t*this._x,this._y=e*i+t*this._y,this._z=e*r+t*this._z,this.normalize(),this}let l=Math.sqrt(o),u=Math.atan2(l,s),c=Math.sin((1-t)*u)/l,h=Math.sin(t*u)/l;return this._w=a*c+this._w*h,this._x=n*c+this._x*h,this._y=i*c+this._y*h,this._z=r*c+this._z*h,this._onChangeCallback(),this}slerpQuaternions(e,t,n){return this.copy(e).slerp(t,n)}random(){let e=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),n=Math.random(),i=Math.sqrt(1-n),r=Math.sqrt(n);return this.set(i*Math.sin(e),i*Math.cos(e),r*Math.sin(t),r*Math.cos(t))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class eE{constructor(e=0,t=0,n=0){eE.prototype.isVector3=!0,this.x=e,this.y=t,this.z=n}set(e,t,n){return void 0===n&&(n=this.z),this.x=e,this.y=t,this.z=n,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(eC.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(eC.setFromAxisAngle(e,t))}applyMatrix3(e){let t=this.x,n=this.y,i=this.z,r=e.elements;return this.x=r[0]*t+r[3]*n+r[6]*i,this.y=r[1]*t+r[4]*n+r[7]*i,this.z=r[2]*t+r[5]*n+r[8]*i,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){let t=this.x,n=this.y,i=this.z,r=e.elements,a=1/(r[3]*t+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*t+r[4]*n+r[8]*i+r[12])*a,this.y=(r[1]*t+r[5]*n+r[9]*i+r[13])*a,this.z=(r[2]*t+r[6]*n+r[10]*i+r[14])*a,this}applyQuaternion(e){let t=this.x,n=this.y,i=this.z,r=e.x,a=e.y,s=e.z,o=e.w,l=2*(a*i-s*n),u=2*(s*t-r*i),c=2*(r*n-a*t);return this.x=t+o*l+a*c-s*u,this.y=n+o*u+s*l-r*c,this.z=i+o*c+r*u-a*l,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){let t=this.x,n=this.y,i=this.z,r=e.elements;return this.x=r[0]*t+r[4]*n+r[8]*i,this.y=r[1]*t+r[5]*n+r[9]*i,this.z=r[2]*t+r[6]*n+r[10]*i,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=V(this.x,e.x,t.x),this.y=V(this.y,e.y,t.y),this.z=V(this.z,e.z,t.z),this}clampScalar(e,t){return this.x=V(this.x,e,t),this.y=V(this.y,e,t),this.z=V(this.z,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(V(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){let n=e.x,i=e.y,r=e.z,a=t.x,s=t.y,o=t.z;return this.x=i*o-r*s,this.y=r*a-n*o,this.z=n*s-i*a,this}projectOnVector(e){let t=e.lengthSq();if(0===t)return this.set(0,0,0);let n=e.dot(this)/t;return this.copy(e).multiplyScalar(n)}projectOnPlane(e){return eA.copy(this).projectOnVector(e),this.sub(eA)}reflect(e){return this.sub(eA.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());return 0===t?Math.PI/2:Math.acos(V(this.dot(e)/t,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y,i=this.z-e.z;return t*t+n*n+i*i}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,n){let i=Math.sin(t)*e;return this.x=i*Math.sin(n),this.y=Math.cos(t)*e,this.z=i*Math.cos(n),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,n){return this.x=e*Math.sin(t),this.y=n,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){let t=this.setFromMatrixColumn(e,0).length(),n=this.setFromMatrixColumn(e,1).length(),i=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=n,this.z=i,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,4*t)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,3*t)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){let e=Math.random()*Math.PI*2,t=2*Math.random()-1,n=Math.sqrt(1-t*t);return this.x=n*Math.cos(e),this.y=t,this.z=n*Math.sin(e),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}let eA=new eE,eC=new ew;class eR{constructor(e=new eE(Infinity,Infinity,Infinity),t=new eE(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){this.makeEmpty();for(let t=0,n=e.length;t=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y&&e.z>=this.min.z&&e.z<=this.max.z}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y&&e.max.z>=this.min.z&&e.min.z<=this.max.z}intersectsSphere(e){return this.clampPoint(e.center,eI),eI.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,n;return e.normal.x>0?(t=e.normal.x*this.min.x,n=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,n=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,n+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,n+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,n+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,n+=e.normal.z*this.min.z),t<=-e.constant&&n>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(eB),ek.subVectors(this.max,eB),eN.subVectors(e.a,eB),eU.subVectors(e.b,eB),eD.subVectors(e.c,eB),eO.subVectors(eU,eN),eF.subVectors(eD,eU),ez.subVectors(eN,eD);let t=[0,-eO.z,eO.y,0,-eF.z,eF.y,0,-ez.z,ez.y,eO.z,0,-eO.x,eF.z,0,-eF.x,ez.z,0,-ez.x,-eO.y,eO.x,0,-eF.y,eF.x,0,-ez.y,ez.x,0];return!!eG(t,eN,eU,eD,ek)&&!!eG(t=[1,0,0,0,1,0,0,0,1],eN,eU,eD,ek)&&(eH.crossVectors(eO,eF),eG(t=[eH.x,eH.y,eH.z],eN,eU,eD,ek))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,eI).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=.5*this.getSize(eI).length()),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()||(eP[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),eP[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),eP[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),eP[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),eP[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),eP[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),eP[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),eP[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(eP)),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}}let eP=[new eE,new eE,new eE,new eE,new eE,new eE,new eE,new eE],eI=new eE,eL=new eR,eN=new eE,eU=new eE,eD=new eE,eO=new eE,eF=new eE,ez=new eE,eB=new eE,ek=new eE,eH=new eE,eV=new eE;function eG(e,t,n,i,r){for(let a=0,s=e.length-3;a<=s;a+=3){eV.fromArray(e,a);let s=r.x*Math.abs(eV.x)+r.y*Math.abs(eV.y)+r.z*Math.abs(eV.z),o=t.dot(eV),l=n.dot(eV),u=i.dot(eV);if(Math.max(-Math.max(o,l,u),Math.min(o,l,u))>s)return!1}return!0}let eW=new eR,ej=new eE,eX=new eE;class eq{constructor(e=new eE,t=-1){this.isSphere=!0,this.center=e,this.radius=t}set(e,t){return this.center.copy(e),this.radius=t,this}setFromPoints(e,t){let n=this.center;void 0!==t?n.copy(t):eW.setFromPoints(e).getCenter(n);let i=0;for(let t=0,r=e.length;tthis.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?e.makeEmpty():(e.set(this.center,this.center),e.expandByScalar(this.radius)),e}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius=this.radius*e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;ej.subVectors(e,this.center);let t=ej.lengthSq();if(t>this.radius*this.radius){let e=Math.sqrt(t),n=(e-this.radius)*.5;this.center.addScaledVector(ej,n/e),this.radius+=n}return this}union(e){return e.isEmpty()||(this.isEmpty()?this.copy(e):!0===this.center.equals(e.center)?this.radius=Math.max(this.radius,e.radius):(eX.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(ej.copy(e.center).add(eX)),this.expandByPoint(ej.copy(e.center).sub(eX)))),this}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return new this.constructor().copy(this)}}let eY=new eE,eZ=new eE,eJ=new eE,eK=new eE,e$=new eE,eQ=new eE,e0=new eE;class e1{constructor(e=new eE,t=new eE(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.origin).addScaledVector(this.direction,e)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,eY)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);let n=t.dot(this.direction);return n<0?t.copy(this.origin):t.copy(this.origin).addScaledVector(this.direction,n)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){let t=eY.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(eY.copy(this.origin).addScaledVector(this.direction,t),eY.distanceToSquared(e))}distanceSqToSegment(e,t,n,i){let r,a,s,o;eZ.copy(e).add(t).multiplyScalar(.5),eJ.copy(t).sub(e).normalize(),eK.copy(this.origin).sub(eZ);let l=.5*e.distanceTo(t),u=-this.direction.dot(eJ),c=eK.dot(this.direction),h=-eK.dot(eJ),d=eK.lengthSq(),p=Math.abs(1-u*u);if(p>0)if(r=u*h-c,a=u*c-h,o=l*p,r>=0)if(a>=-o)if(a<=o){let e=1/p;r*=e,a*=e,s=r*(r+u*a+2*c)+a*(u*r+a+2*h)+d}else s=-(r=Math.max(0,-(u*(a=l)+c)))*r+a*(a+2*h)+d;else s=-(r=Math.max(0,-(u*(a=-l)+c)))*r+a*(a+2*h)+d;else a<=-o?(a=(r=Math.max(0,-(-u*l+c)))>0?-l:Math.min(Math.max(-l,-h),l),s=-r*r+a*(a+2*h)+d):a<=o?(r=0,s=(a=Math.min(Math.max(-l,-h),l))*(a+2*h)+d):(a=(r=Math.max(0,-(u*l+c)))>0?l:Math.min(Math.max(-l,-h),l),s=-r*r+a*(a+2*h)+d);else a=u>0?-l:l,s=-(r=Math.max(0,-(u*a+c)))*r+a*(a+2*h)+d;return n&&n.copy(this.origin).addScaledVector(this.direction,r),i&&i.copy(eZ).addScaledVector(eJ,a),s}intersectSphere(e,t){eY.subVectors(e.center,this.origin);let n=eY.dot(this.direction),i=eY.dot(eY)-n*n,r=e.radius*e.radius;if(i>r)return null;let a=Math.sqrt(r-i),s=n-a,o=n+a;return o<0?null:s<0?this.at(o,t):this.at(s,t)}intersectsSphere(e){return this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){let t=e.normal.dot(this.direction);if(0===t)return 0===e.distanceToPoint(this.origin)?0:null;let n=-(this.origin.dot(e.normal)+e.constant)/t;return n>=0?n:null}intersectPlane(e,t){let n=this.distanceToPlane(e);return null===n?null:this.at(n,t)}intersectsPlane(e){let t=e.distanceToPoint(this.origin);return!!(0===t||e.normal.dot(this.direction)*t<0)}intersectBox(e,t){let n,i,r,a,s,o,l=1/this.direction.x,u=1/this.direction.y,c=1/this.direction.z,h=this.origin;return(l>=0?(n=(e.min.x-h.x)*l,i=(e.max.x-h.x)*l):(n=(e.max.x-h.x)*l,i=(e.min.x-h.x)*l),u>=0?(r=(e.min.y-h.y)*u,a=(e.max.y-h.y)*u):(r=(e.max.y-h.y)*u,a=(e.min.y-h.y)*u),n>a||r>i||((r>n||isNaN(n))&&(n=r),(a=0?(s=(e.min.z-h.z)*c,o=(e.max.z-h.z)*c):(s=(e.max.z-h.z)*c,o=(e.min.z-h.z)*c),n>o||s>i||((s>n||n!=n)&&(n=s),(o=0?n:i,t)}intersectsBox(e){return null!==this.intersectBox(e,eY)}intersectTriangle(e,t,n,i,r){let a;e$.subVectors(t,e),eQ.subVectors(n,e),e0.crossVectors(e$,eQ);let s=this.direction.dot(e0);if(s>0){if(i)return null;a=1}else{if(!(s<0))return null;a=-1,s=-s}eK.subVectors(this.origin,e);let o=a*this.direction.dot(eQ.crossVectors(eK,eQ));if(o<0)return null;let l=a*this.direction.dot(e$.cross(eK));if(l<0||o+l>s)return null;let u=-a*eK.dot(e0);return u<0?null:this.at(u/s,r)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}}class e2{constructor(e,t,n,i,r,a,s,o,l,u,c,h,d,p,f,m){e2.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],void 0!==e&&this.set(e,t,n,i,r,a,s,o,l,u,c,h,d,p,f,m)}set(e,t,n,i,r,a,s,o,l,u,c,h,d,p,f,m){let g=this.elements;return g[0]=e,g[4]=t,g[8]=n,g[12]=i,g[1]=r,g[5]=a,g[9]=s,g[13]=o,g[2]=l,g[6]=u,g[10]=c,g[14]=h,g[3]=d,g[7]=p,g[11]=f,g[15]=m,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new e2().fromArray(this.elements)}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t[9]=n[9],t[10]=n[10],t[11]=n[11],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15],this}copyPosition(e){let t=this.elements,n=e.elements;return t[12]=n[12],t[13]=n[13],t[14]=n[14],this}setFromMatrix3(e){let t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,n){return e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(e,t,n){return this.set(e.x,t.x,n.x,0,e.y,t.y,n.y,0,e.z,t.z,n.z,0,0,0,0,1),this}extractRotation(e){let t=this.elements,n=e.elements,i=1/e3.setFromMatrixColumn(e,0).length(),r=1/e3.setFromMatrixColumn(e,1).length(),a=1/e3.setFromMatrixColumn(e,2).length();return t[0]=n[0]*i,t[1]=n[1]*i,t[2]=n[2]*i,t[3]=0,t[4]=n[4]*r,t[5]=n[5]*r,t[6]=n[6]*r,t[7]=0,t[8]=n[8]*a,t[9]=n[9]*a,t[10]=n[10]*a,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){let t=this.elements,n=e.x,i=e.y,r=e.z,a=Math.cos(n),s=Math.sin(n),o=Math.cos(i),l=Math.sin(i),u=Math.cos(r),c=Math.sin(r);if("XYZ"===e.order){let e=a*u,n=a*c,i=s*u,r=s*c;t[0]=o*u,t[4]=-o*c,t[8]=l,t[1]=n+i*l,t[5]=e-r*l,t[9]=-s*o,t[2]=r-e*l,t[6]=i+n*l,t[10]=a*o}else if("YXZ"===e.order){let e=o*u,n=o*c,i=l*u,r=l*c;t[0]=e+r*s,t[4]=i*s-n,t[8]=a*l,t[1]=a*c,t[5]=a*u,t[9]=-s,t[2]=n*s-i,t[6]=r+e*s,t[10]=a*o}else if("ZXY"===e.order){let e=o*u,n=o*c,i=l*u,r=l*c;t[0]=e-r*s,t[4]=-a*c,t[8]=i+n*s,t[1]=n+i*s,t[5]=a*u,t[9]=r-e*s,t[2]=-a*l,t[6]=s,t[10]=a*o}else if("ZYX"===e.order){let e=a*u,n=a*c,i=s*u,r=s*c;t[0]=o*u,t[4]=i*l-n,t[8]=e*l+r,t[1]=o*c,t[5]=r*l+e,t[9]=n*l-i,t[2]=-l,t[6]=s*o,t[10]=a*o}else if("YZX"===e.order){let e=a*o,n=a*l,i=s*o,r=s*l;t[0]=o*u,t[4]=r-e*c,t[8]=i*c+n,t[1]=c,t[5]=a*u,t[9]=-s*u,t[2]=-l*u,t[6]=n*c+i,t[10]=e-r*c}else if("XZY"===e.order){let e=a*o,n=a*l,i=s*o,r=s*l;t[0]=o*u,t[4]=-c,t[8]=l*u,t[1]=e*c+r,t[5]=a*u,t[9]=n*c-i,t[2]=i*c-n,t[6]=s*u,t[10]=r*c+e}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose(e5,e,e6)}lookAt(e,t,n){let i=this.elements;return e7.subVectors(e,t),0===e7.lengthSq()&&(e7.z=1),e7.normalize(),e8.crossVectors(n,e7),0===e8.lengthSq()&&(1===Math.abs(n.z)?e7.x+=1e-4:e7.z+=1e-4,e7.normalize(),e8.crossVectors(n,e7)),e8.normalize(),e9.crossVectors(e7,e8),i[0]=e8.x,i[4]=e9.x,i[8]=e7.x,i[1]=e8.y,i[5]=e9.y,i[9]=e7.y,i[2]=e8.z,i[6]=e9.z,i[10]=e7.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,i=t.elements,r=this.elements,a=n[0],s=n[4],o=n[8],l=n[12],u=n[1],c=n[5],h=n[9],d=n[13],p=n[2],f=n[6],m=n[10],g=n[14],v=n[3],_=n[7],y=n[11],x=n[15],b=i[0],S=i[4],M=i[8],T=i[12],w=i[1],E=i[5],A=i[9],C=i[13],R=i[2],P=i[6],I=i[10],L=i[14],N=i[3],U=i[7],D=i[11],O=i[15];return r[0]=a*b+s*w+o*R+l*N,r[4]=a*S+s*E+o*P+l*U,r[8]=a*M+s*A+o*I+l*D,r[12]=a*T+s*C+o*L+l*O,r[1]=u*b+c*w+h*R+d*N,r[5]=u*S+c*E+h*P+d*U,r[9]=u*M+c*A+h*I+d*D,r[13]=u*T+c*C+h*L+d*O,r[2]=p*b+f*w+m*R+g*N,r[6]=p*S+f*E+m*P+g*U,r[10]=p*M+f*A+m*I+g*D,r[14]=p*T+f*C+m*L+g*O,r[3]=v*b+_*w+y*R+x*N,r[7]=v*S+_*E+y*P+x*U,r[11]=v*M+_*A+y*I+x*D,r[15]=v*T+_*C+y*L+x*O,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[4],i=e[8],r=e[12],a=e[1],s=e[5],o=e[9],l=e[13],u=e[2],c=e[6],h=e[10],d=e[14];return e[3]*(r*o*c-i*l*c-r*s*h+n*l*h+i*s*d-n*o*d)+e[7]*(t*o*d-t*l*h+r*a*h-i*a*d+i*l*u-r*o*u)+e[11]*(t*l*c-t*s*d-r*a*c+n*a*d+r*s*u-n*l*u)+e[15]*(-i*s*u-t*o*c+t*s*h+i*a*c-n*a*h+n*o*u)}transpose(){let e,t=this.elements;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(e,t,n){let i=this.elements;return e.isVector3?(i[12]=e.x,i[13]=e.y,i[14]=e.z):(i[12]=e,i[13]=t,i[14]=n),this}invert(){let e=this.elements,t=e[0],n=e[1],i=e[2],r=e[3],a=e[4],s=e[5],o=e[6],l=e[7],u=e[8],c=e[9],h=e[10],d=e[11],p=e[12],f=e[13],m=e[14],g=e[15],v=c*m*l-f*h*l+f*o*d-s*m*d-c*o*g+s*h*g,_=p*h*l-u*m*l-p*o*d+a*m*d+u*o*g-a*h*g,y=u*f*l-p*c*l+p*s*d-a*f*d-u*s*g+a*c*g,x=p*c*o-u*f*o-p*s*h+a*f*h+u*s*m-a*c*m,b=t*v+n*_+i*y+r*x;if(0===b)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);let S=1/b;return e[0]=v*S,e[1]=(f*h*r-c*m*r-f*i*d+n*m*d+c*i*g-n*h*g)*S,e[2]=(s*m*r-f*o*r+f*i*l-n*m*l-s*i*g+n*o*g)*S,e[3]=(c*o*r-s*h*r-c*i*l+n*h*l+s*i*d-n*o*d)*S,e[4]=_*S,e[5]=(u*m*r-p*h*r+p*i*d-t*m*d-u*i*g+t*h*g)*S,e[6]=(p*o*r-a*m*r-p*i*l+t*m*l+a*i*g-t*o*g)*S,e[7]=(a*h*r-u*o*r+u*i*l-t*h*l-a*i*d+t*o*d)*S,e[8]=y*S,e[9]=(p*c*r-u*f*r-p*n*d+t*f*d+u*n*g-t*c*g)*S,e[10]=(a*f*r-p*s*r+p*n*l-t*f*l-a*n*g+t*s*g)*S,e[11]=(u*s*r-a*c*r-u*n*l+t*c*l+a*n*d-t*s*d)*S,e[12]=x*S,e[13]=(u*f*i-p*c*i+p*n*h-t*f*h-u*n*m+t*c*m)*S,e[14]=(p*s*i-a*f*i-p*n*o+t*f*o+a*n*m-t*s*m)*S,e[15]=(a*c*i-u*s*i+u*n*o-t*c*o-a*n*h+t*s*h)*S,this}scale(e){let t=this.elements,n=e.x,i=e.y,r=e.z;return t[0]*=n,t[4]*=i,t[8]*=r,t[1]*=n,t[5]*=i,t[9]*=r,t[2]*=n,t[6]*=i,t[10]*=r,t[3]*=n,t[7]*=i,t[11]*=r,this}getMaxScaleOnAxis(){let e=this.elements;return Math.sqrt(Math.max(e[0]*e[0]+e[1]*e[1]+e[2]*e[2],e[4]*e[4]+e[5]*e[5]+e[6]*e[6],e[8]*e[8]+e[9]*e[9]+e[10]*e[10]))}makeTranslation(e,t,n){return e.isVector3?this.set(1,0,0,e.x,0,1,0,e.y,0,0,1,e.z,0,0,0,1):this.set(1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1),this}makeRotationX(e){let t=Math.cos(e),n=Math.sin(e);return this.set(1,0,0,0,0,t,-n,0,0,n,t,0,0,0,0,1),this}makeRotationY(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,0,n,0,0,1,0,0,-n,0,t,0,0,0,0,1),this}makeRotationZ(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,0,n,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){let n=Math.cos(t),i=Math.sin(t),r=1-n,a=e.x,s=e.y,o=e.z,l=r*a,u=r*s;return this.set(l*a+n,l*s-i*o,l*o+i*s,0,l*s+i*o,u*s+n,u*o-i*a,0,l*o-i*s,u*o+i*a,r*o*o+n,0,0,0,0,1),this}makeScale(e,t,n){return this.set(e,0,0,0,0,t,0,0,0,0,n,0,0,0,0,1),this}makeShear(e,t,n,i,r,a){return this.set(1,n,r,0,e,1,a,0,t,i,1,0,0,0,0,1),this}compose(e,t,n){let i=this.elements,r=t._x,a=t._y,s=t._z,o=t._w,l=r+r,u=a+a,c=s+s,h=r*l,d=r*u,p=r*c,f=a*u,m=a*c,g=s*c,v=o*l,_=o*u,y=o*c,x=n.x,b=n.y,S=n.z;return i[0]=(1-(f+g))*x,i[1]=(d+y)*x,i[2]=(p-_)*x,i[3]=0,i[4]=(d-y)*b,i[5]=(1-(h+g))*b,i[6]=(m+v)*b,i[7]=0,i[8]=(p+_)*S,i[9]=(m-v)*S,i[10]=(1-(h+f))*S,i[11]=0,i[12]=e.x,i[13]=e.y,i[14]=e.z,i[15]=1,this}decompose(e,t,n){let i=this.elements,r=e3.set(i[0],i[1],i[2]).length(),a=e3.set(i[4],i[5],i[6]).length(),s=e3.set(i[8],i[9],i[10]).length();0>this.determinant()&&(r=-r),e.x=i[12],e.y=i[13],e.z=i[14],e4.copy(this);let o=1/r,l=1/a,u=1/s;return e4.elements[0]*=o,e4.elements[1]*=o,e4.elements[2]*=o,e4.elements[4]*=l,e4.elements[5]*=l,e4.elements[6]*=l,e4.elements[8]*=u,e4.elements[9]*=u,e4.elements[10]*=u,t.setFromRotationMatrix(e4),n.x=r,n.y=a,n.z=s,this}makePerspective(e,t,n,i,r,a,s=2e3){let o,l,u=this.elements;if(2e3===s)o=-(a+r)/(a-r),l=-2*a*r/(a-r);else if(2001===s)o=-a/(a-r),l=-a*r/(a-r);else throw Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+s);return u[0]=2*r/(t-e),u[4]=0,u[8]=(t+e)/(t-e),u[12]=0,u[1]=0,u[5]=2*r/(n-i),u[9]=(n+i)/(n-i),u[13]=0,u[2]=0,u[6]=0,u[10]=o,u[14]=l,u[3]=0,u[7]=0,u[11]=-1,u[15]=0,this}makeOrthographic(e,t,n,i,r,a,s=2e3){let o,l,u=this.elements,c=1/(t-e),h=1/(n-i),d=1/(a-r);if(2e3===s)o=(a+r)*d,l=-2*d;else if(2001===s)o=r*d,l=-1*d;else throw Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+s);return u[0]=2*c,u[4]=0,u[8]=0,u[12]=-((t+e)*c),u[1]=0,u[5]=2*h,u[9]=0,u[13]=-((n+i)*h),u[2]=0,u[6]=0,u[10]=l,u[14]=-o,u[3]=0,u[7]=0,u[11]=0,u[15]=1,this}equals(e){let t=this.elements,n=e.elements;for(let e=0;e<16;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<16;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e[t+9]=n[9],e[t+10]=n[10],e[t+11]=n[11],e[t+12]=n[12],e[t+13]=n[13],e[t+14]=n[14],e[t+15]=n[15],e}}let e3=new eE,e4=new e2,e5=new eE(0,0,0),e6=new eE(1,1,1),e8=new eE,e9=new eE,e7=new eE,te=new e2,tt=new ew;class tn{constructor(e=0,t=0,n=0,i=tn.DEFAULT_ORDER){this.isEuler=!0,this._x=e,this._y=t,this._z=n,this._order=i}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,t,n,i=this._order){return this._x=e,this._y=t,this._z=n,this._order=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,t=this._order,n=!0){let i=e.elements,r=i[0],a=i[4],s=i[8],o=i[1],l=i[5],u=i[9],c=i[2],h=i[6],d=i[10];switch(t){case"XYZ":this._y=Math.asin(V(s,-1,1)),.9999999>Math.abs(s)?(this._x=Math.atan2(-u,d),this._z=Math.atan2(-a,r)):(this._x=Math.atan2(h,l),this._z=0);break;case"YXZ":this._x=Math.asin(-V(u,-1,1)),.9999999>Math.abs(u)?(this._y=Math.atan2(s,d),this._z=Math.atan2(o,l)):(this._y=Math.atan2(-c,r),this._z=0);break;case"ZXY":this._x=Math.asin(V(h,-1,1)),.9999999>Math.abs(h)?(this._y=Math.atan2(-c,d),this._z=Math.atan2(-a,l)):(this._y=0,this._z=Math.atan2(o,r));break;case"ZYX":this._y=Math.asin(-V(c,-1,1)),.9999999>Math.abs(c)?(this._x=Math.atan2(h,d),this._z=Math.atan2(o,r)):(this._x=0,this._z=Math.atan2(-a,l));break;case"YZX":this._z=Math.asin(V(o,-1,1)),.9999999>Math.abs(o)?(this._x=Math.atan2(-u,l),this._y=Math.atan2(-c,r)):(this._x=0,this._y=Math.atan2(s,d));break;case"XZY":this._z=Math.asin(-V(a,-1,1)),.9999999>Math.abs(a)?(this._x=Math.atan2(h,l),this._y=Math.atan2(s,r)):(this._x=Math.atan2(-u,d),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+t)}return this._order=t,!0===n&&this._onChangeCallback(),this}setFromQuaternion(e,t,n){return te.makeRotationFromQuaternion(e),this.setFromRotationMatrix(te,t,n)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return tt.setFromEuler(this),this.setFromQuaternion(tt,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],void 0!==e[3]&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}tn.DEFAULT_ORDER="XYZ";class ti{constructor(){this.mask=1}set(e){this.mask=1<>>0}enable(e){this.mask|=1<1){for(let e=0;e1){for(let e=0;e0&&(i.userData=this.userData),i.layers=this.layers.mask,i.matrix=this.matrix.toArray(),i.up=this.up.toArray(),!1===this.matrixAutoUpdate&&(i.matrixAutoUpdate=!1),this.isInstancedMesh&&(i.type="InstancedMesh",i.count=this.count,i.instanceMatrix=this.instanceMatrix.toJSON(),null!==this.instanceColor&&(i.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(i.type="BatchedMesh",i.perObjectFrustumCulled=this.perObjectFrustumCulled,i.sortObjects=this.sortObjects,i.drawRanges=this._drawRanges,i.reservedRanges=this._reservedRanges,i.visibility=this._visibility,i.active=this._active,i.bounds=this._bounds.map(e=>({boxInitialized:e.boxInitialized,boxMin:e.box.min.toArray(),boxMax:e.box.max.toArray(),sphereInitialized:e.sphereInitialized,sphereRadius:e.sphere.radius,sphereCenter:e.sphere.center.toArray()})),i.maxInstanceCount=this._maxInstanceCount,i.maxVertexCount=this._maxVertexCount,i.maxIndexCount=this._maxIndexCount,i.geometryInitialized=this._geometryInitialized,i.geometryCount=this._geometryCount,i.matricesTexture=this._matricesTexture.toJSON(e),null!==this._colorsTexture&&(i.colorsTexture=this._colorsTexture.toJSON(e)),null!==this.boundingSphere&&(i.boundingSphere={center:i.boundingSphere.center.toArray(),radius:i.boundingSphere.radius}),null!==this.boundingBox&&(i.boundingBox={min:i.boundingBox.min.toArray(),max:i.boundingBox.max.toArray()})),this.isScene)this.background&&(this.background.isColor?i.background=this.background.toJSON():this.background.isTexture&&(i.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&!0!==this.environment.isRenderTargetTexture&&(i.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){i.geometry=r(e.geometries,this.geometry);let t=this.geometry.parameters;if(void 0!==t&&void 0!==t.shapes){let n=t.shapes;if(Array.isArray(n))for(let t=0,i=n.length;t0){i.children=[];for(let t=0;t0){i.animations=[];for(let t=0;t0&&(n.geometries=t),i.length>0&&(n.materials=i),r.length>0&&(n.textures=r),s.length>0&&(n.images=s),o.length>0&&(n.shapes=o),l.length>0&&(n.skeletons=l),u.length>0&&(n.animations=u),c.length>0&&(n.nodes=c)}return n.object=i,n;function a(e){let t=[];for(let n in e){let i=e[n];delete i.metadata,t.push(i)}return t}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),!0===t)for(let t=0;t0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)}static getBarycoord(e,t,n,i,r){tx.subVectors(i,t),tb.subVectors(n,t),tS.subVectors(e,t);let a=tx.dot(tx),s=tx.dot(tb),o=tx.dot(tS),l=tb.dot(tb),u=tb.dot(tS),c=a*l-s*s;if(0===c)return r.set(0,0,0),null;let h=1/c,d=(l*o-s*u)*h,p=(a*u-s*o)*h;return r.set(1-d-p,p,d)}static containsPoint(e,t,n,i){return null!==this.getBarycoord(e,t,n,i,tM)&&tM.x>=0&&tM.y>=0&&tM.x+tM.y<=1}static getInterpolation(e,t,n,i,r,a,s,o){return null===this.getBarycoord(e,t,n,i,tM)?(o.x=0,o.y=0,"z"in o&&(o.z=0),"w"in o&&(o.w=0),null):(o.setScalar(0),o.addScaledVector(r,tM.x),o.addScaledVector(a,tM.y),o.addScaledVector(s,tM.z),o)}static getInterpolatedAttribute(e,t,n,i,r,a){return tP.setScalar(0),tI.setScalar(0),tL.setScalar(0),tP.fromBufferAttribute(e,t),tI.fromBufferAttribute(e,n),tL.fromBufferAttribute(e,i),a.setScalar(0),a.addScaledVector(tP,r.x),a.addScaledVector(tI,r.y),a.addScaledVector(tL,r.z),a}static isFrontFacing(e,t,n,i){return tx.subVectors(n,t),tb.subVectors(e,t),0>tx.cross(tb).dot(i)}set(e,t,n){return this.a.copy(e),this.b.copy(t),this.c.copy(n),this}setFromPointsAndIndices(e,t,n,i){return this.a.copy(e[t]),this.b.copy(e[n]),this.c.copy(e[i]),this}setFromAttributeAndIndices(e,t,n,i){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,n),this.c.fromBufferAttribute(e,i),this}clone(){return new this.constructor().copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return tx.subVectors(this.c,this.b),tb.subVectors(this.a,this.b),.5*tx.cross(tb).length()}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(e){return tN.getNormal(this.a,this.b,this.c,e)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(e,t){return tN.getBarycoord(e,this.a,this.b,this.c,t)}getInterpolation(e,t,n,i,r){return tN.getInterpolation(e,this.a,this.b,this.c,t,n,i,r)}containsPoint(e){return tN.containsPoint(e,this.a,this.b,this.c)}isFrontFacing(e){return tN.isFrontFacing(this.a,this.b,this.c,e)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){let n,i,r=this.a,a=this.b,s=this.c;tT.subVectors(a,r),tw.subVectors(s,r),tA.subVectors(e,r);let o=tT.dot(tA),l=tw.dot(tA);if(o<=0&&l<=0)return t.copy(r);tC.subVectors(e,a);let u=tT.dot(tC),c=tw.dot(tC);if(u>=0&&c<=u)return t.copy(a);let h=o*c-u*l;if(h<=0&&o>=0&&u<=0)return n=o/(o-u),t.copy(r).addScaledVector(tT,n);tR.subVectors(e,s);let d=tT.dot(tR),p=tw.dot(tR);if(p>=0&&d<=p)return t.copy(s);let f=d*l-o*p;if(f<=0&&l>=0&&p<=0)return i=l/(l-p),t.copy(r).addScaledVector(tw,i);let m=u*p-d*c;if(m<=0&&c-u>=0&&d-p>=0)return tE.subVectors(s,a),i=(c-u)/(c-u+(d-p)),t.copy(a).addScaledVector(tE,i);let g=1/(m+f+h);return n=f*g,i=h*g,t.copy(r).addScaledVector(tT,n).addScaledVector(tw,i)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}}let tU={aliceblue:0xf0f8ff,antiquewhite:0xfaebd7,aqua:65535,aquamarine:8388564,azure:0xf0ffff,beige:0xf5f5dc,bisque:0xffe4c4,black:0,blanchedalmond:0xffebcd,blue:255,blueviolet:9055202,brown:0xa52a2a,burlywood:0xdeb887,cadetblue:6266528,chartreuse:8388352,chocolate:0xd2691e,coral:0xff7f50,cornflowerblue:6591981,cornsilk:0xfff8dc,crimson:0xdc143c,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:0xb8860b,darkgray:0xa9a9a9,darkgreen:25600,darkgrey:0xa9a9a9,darkkhaki:0xbdb76b,darkmagenta:9109643,darkolivegreen:5597999,darkorange:0xff8c00,darkorchid:0x9932cc,darkred:9109504,darksalmon:0xe9967a,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:0xff1493,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:0xb22222,floralwhite:0xfffaf0,forestgreen:2263842,fuchsia:0xff00ff,gainsboro:0xdcdcdc,ghostwhite:0xf8f8ff,gold:0xffd700,goldenrod:0xdaa520,gray:8421504,green:32768,greenyellow:0xadff2f,grey:8421504,honeydew:0xf0fff0,hotpink:0xff69b4,indianred:0xcd5c5c,indigo:4915330,ivory:0xfffff0,khaki:0xf0e68c,lavender:0xe6e6fa,lavenderblush:0xfff0f5,lawngreen:8190976,lemonchiffon:0xfffacd,lightblue:0xadd8e6,lightcoral:0xf08080,lightcyan:0xe0ffff,lightgoldenrodyellow:0xfafad2,lightgray:0xd3d3d3,lightgreen:9498256,lightgrey:0xd3d3d3,lightpink:0xffb6c1,lightsalmon:0xffa07a,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:0xb0c4de,lightyellow:0xffffe0,lime:65280,limegreen:3329330,linen:0xfaf0e6,magenta:0xff00ff,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:0xba55d3,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:0xc71585,midnightblue:1644912,mintcream:0xf5fffa,mistyrose:0xffe4e1,moccasin:0xffe4b5,navajowhite:0xffdead,navy:128,oldlace:0xfdf5e6,olive:8421376,olivedrab:7048739,orange:0xffa500,orangered:0xff4500,orchid:0xda70d6,palegoldenrod:0xeee8aa,palegreen:0x98fb98,paleturquoise:0xafeeee,palevioletred:0xdb7093,papayawhip:0xffefd5,peachpuff:0xffdab9,peru:0xcd853f,pink:0xffc0cb,plum:0xdda0dd,powderblue:0xb0e0e6,purple:8388736,rebeccapurple:6697881,red:0xff0000,rosybrown:0xbc8f8f,royalblue:4286945,saddlebrown:9127187,salmon:0xfa8072,sandybrown:0xf4a460,seagreen:3050327,seashell:0xfff5ee,sienna:0xa0522d,silver:0xc0c0c0,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:0xfffafa,springgreen:65407,steelblue:4620980,tan:0xd2b48c,teal:32896,thistle:0xd8bfd8,tomato:0xff6347,turquoise:4251856,violet:0xee82ee,wheat:0xf5deb3,white:0xffffff,whitesmoke:0xf5f5f5,yellow:0xffff00,yellowgreen:0x9acd32},tD={h:0,s:0,l:0},tO={h:0,s:0,l:0};function tF(e,t,n){return(n<0&&(n+=1),n>1&&(n-=1),n<1/6)?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*6*(2/3-n):e}class tz{constructor(e,t,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,t,n)}set(e,t,n){return void 0===t&&void 0===n?e&&e.isColor?this.copy(e):"number"==typeof e?this.setHex(e):"string"==typeof e&&this.setStyle(e):this.setRGB(e,t,n),this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=I){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(255&e)/255,eu.toWorkingColorSpace(this,t),this}setRGB(e,t,n,i=eu.workingColorSpace){return this.r=e,this.g=t,this.b=n,eu.toWorkingColorSpace(this,i),this}setHSL(e,t,n,i=eu.workingColorSpace){if(e=G(e,1),t=V(t,0,1),n=V(n,0,1),0===t)this.r=this.g=this.b=n;else{let i=n<=.5?n*(1+t):n+t-n*t,r=2*n-i;this.r=tF(r,i,e+1/3),this.g=tF(r,i,e),this.b=tF(r,i,e-1/3)}return eu.toWorkingColorSpace(this,i),this}setStyle(e,t=I){let n;function i(t){void 0!==t&&1>parseFloat(t)&&console.warn("THREE.Color: Alpha component of "+e+" will be ignored.")}if(n=/^(\w+)\(([^\)]*)\)/.exec(e)){let r,a=n[1],s=n[2];switch(a){case"rgb":case"rgba":if(r=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(s))return i(r[4]),this.setRGB(Math.min(255,parseInt(r[1],10))/255,Math.min(255,parseInt(r[2],10))/255,Math.min(255,parseInt(r[3],10))/255,t);if(r=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(s))return i(r[4]),this.setRGB(Math.min(100,parseInt(r[1],10))/100,Math.min(100,parseInt(r[2],10))/100,Math.min(100,parseInt(r[3],10))/100,t);break;case"hsl":case"hsla":if(r=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(s))return i(r[4]),this.setHSL(parseFloat(r[1])/360,parseFloat(r[2])/100,parseFloat(r[3])/100,t);break;default:console.warn("THREE.Color: Unknown color model "+e)}}else if(n=/^\#([A-Fa-f\d]+)$/.exec(e)){let i=n[1],r=i.length;if(3===r)return this.setRGB(parseInt(i.charAt(0),16)/15,parseInt(i.charAt(1),16)/15,parseInt(i.charAt(2),16)/15,t);if(6===r)return this.setHex(parseInt(i,16),t);console.warn("THREE.Color: Invalid hex color "+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t=I){let n=tU[e.toLowerCase()];return void 0!==n?this.setHex(n,t):console.warn("THREE.Color: Unknown color "+e),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=ec(e.r),this.g=ec(e.g),this.b=ec(e.b),this}copyLinearToSRGB(e){return this.r=eh(e.r),this.g=eh(e.g),this.b=eh(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=I){return eu.fromWorkingColorSpace(tB.copy(this),e),65536*Math.round(V(255*tB.r,0,255))+256*Math.round(V(255*tB.g,0,255))+Math.round(V(255*tB.b,0,255))}getHexString(e=I){return("000000"+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=eu.workingColorSpace){let n,i;eu.fromWorkingColorSpace(tB.copy(this),t);let r=tB.r,a=tB.g,s=tB.b,o=Math.max(r,a,s),l=Math.min(r,a,s),u=(l+o)/2;if(l===o)n=0,i=0;else{let e=o-l;switch(i=u<=.5?e/(o+l):e/(2-o-l),o){case r:n=(a-s)/e+6*(a0!=e>0&&this.version++,this._alphaTest=e}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(void 0!==e)for(let t in e){let n=e[t];if(void 0===n){console.warn(`THREE.Material: parameter '${t}' has value of undefined.`);continue}let i=this[t];if(void 0===i){console.warn(`THREE.Material: '${t}' is not a property of THREE.${this.type}.`);continue}i&&i.isColor?i.set(n):i&&i.isVector3&&n&&n.isVector3?i.copy(n):this[t]=n}}toJSON(e){let t=void 0===e||"string"==typeof e;t&&(e={textures:{},images:{}});let n={metadata:{version:4.6,type:"Material",generator:"Material.toJSON"}};function i(e){let t=[];for(let n in e){let i=e[n];delete i.metadata,t.push(i)}return t}if(n.uuid=this.uuid,n.type=this.type,""!==this.name&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),void 0!==this.roughness&&(n.roughness=this.roughness),void 0!==this.metalness&&(n.metalness=this.metalness),void 0!==this.sheen&&(n.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(n.sheenColor=this.sheenColor.getHex()),void 0!==this.sheenRoughness&&(n.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),void 0!==this.emissiveIntensity&&1!==this.emissiveIntensity&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),void 0!==this.specularIntensity&&(n.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(n.specularColor=this.specularColor.getHex()),void 0!==this.shininess&&(n.shininess=this.shininess),void 0!==this.clearcoat&&(n.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),void 0!==this.dispersion&&(n.dispersion=this.dispersion),void 0!==this.iridescence&&(n.iridescence=this.iridescence),void 0!==this.iridescenceIOR&&(n.iridescenceIOR=this.iridescenceIOR),void 0!==this.iridescenceThicknessRange&&(n.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(n.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(n.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),void 0!==this.anisotropy&&(n.anisotropy=this.anisotropy),void 0!==this.anisotropyRotation&&(n.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(n.anisotropyMap=this.anisotropyMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(e).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(e).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(e).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(e).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(e).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(n.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(n.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(e).uuid,void 0!==this.combine&&(n.combine=this.combine)),void 0!==this.envMapRotation&&(n.envMapRotation=this.envMapRotation.toArray()),void 0!==this.envMapIntensity&&(n.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(n.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(e).uuid),void 0!==this.transmission&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(e).uuid),void 0!==this.thickness&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(e).uuid),void 0!==this.attenuationDistance&&this.attenuationDistance!==1/0&&(n.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationColor&&(n.attenuationColor=this.attenuationColor.getHex()),void 0!==this.size&&(n.size=this.size),null!==this.shadowSide&&(n.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(n.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(n.blending=this.blending),0!==this.side&&(n.side=this.side),!0===this.vertexColors&&(n.vertexColors=!0),this.opacity<1&&(n.opacity=this.opacity),!0===this.transparent&&(n.transparent=!0),204!==this.blendSrc&&(n.blendSrc=this.blendSrc),205!==this.blendDst&&(n.blendDst=this.blendDst),100!==this.blendEquation&&(n.blendEquation=this.blendEquation),null!==this.blendSrcAlpha&&(n.blendSrcAlpha=this.blendSrcAlpha),null!==this.blendDstAlpha&&(n.blendDstAlpha=this.blendDstAlpha),null!==this.blendEquationAlpha&&(n.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(n.blendColor=this.blendColor.getHex()),0!==this.blendAlpha&&(n.blendAlpha=this.blendAlpha),3!==this.depthFunc&&(n.depthFunc=this.depthFunc),!1===this.depthTest&&(n.depthTest=this.depthTest),!1===this.depthWrite&&(n.depthWrite=this.depthWrite),!1===this.colorWrite&&(n.colorWrite=this.colorWrite),255!==this.stencilWriteMask&&(n.stencilWriteMask=this.stencilWriteMask),519!==this.stencilFunc&&(n.stencilFunc=this.stencilFunc),0!==this.stencilRef&&(n.stencilRef=this.stencilRef),255!==this.stencilFuncMask&&(n.stencilFuncMask=this.stencilFuncMask),7680!==this.stencilFail&&(n.stencilFail=this.stencilFail),7680!==this.stencilZFail&&(n.stencilZFail=this.stencilZFail),7680!==this.stencilZPass&&(n.stencilZPass=this.stencilZPass),!0===this.stencilWrite&&(n.stencilWrite=this.stencilWrite),void 0!==this.rotation&&0!==this.rotation&&(n.rotation=this.rotation),!0===this.polygonOffset&&(n.polygonOffset=!0),0!==this.polygonOffsetFactor&&(n.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(n.polygonOffsetUnits=this.polygonOffsetUnits),void 0!==this.linewidth&&1!==this.linewidth&&(n.linewidth=this.linewidth),void 0!==this.dashSize&&(n.dashSize=this.dashSize),void 0!==this.gapSize&&(n.gapSize=this.gapSize),void 0!==this.scale&&(n.scale=this.scale),!0===this.dithering&&(n.dithering=!0),this.alphaTest>0&&(n.alphaTest=this.alphaTest),!0===this.alphaHash&&(n.alphaHash=!0),!0===this.alphaToCoverage&&(n.alphaToCoverage=!0),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=!0),!0===this.forceSinglePass&&(n.forceSinglePass=!0),!0===this.wireframe&&(n.wireframe=!0),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.flatShading&&(n.flatShading=!0),!1===this.visible&&(n.visible=!1),!1===this.toneMapped&&(n.toneMapped=!1),!1===this.fog&&(n.fog=!1),Object.keys(this.userData).length>0&&(n.userData=this.userData),t){let t=i(e.textures),r=i(e.images);t.length>0&&(n.textures=t),r.length>0&&(n.images=r)}return n}clone(){return new this.constructor().copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.blendColor.copy(e.blendColor),this.blendAlpha=e.blendAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;let t=e.clippingPlanes,n=null;if(null!==t){let e=t.length;n=Array(e);for(let i=0;i!==e;++i)n[i]=t[i].clone()}return this.clippingPlanes=n,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaHash=e.alphaHash,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(e){!0===e&&this.version++}onBuild(){console.warn("Material: onBuild() has been removed.")}}class tV extends tH{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new tz(0xffffff),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new tn,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}}let tG=function(){let e=new ArrayBuffer(4),t=new Float32Array(e),n=new Uint32Array(e),i=new Uint32Array(512),r=new Uint32Array(512);for(let e=0;e<256;++e){let t=e-127;t<-27?(i[e]=0,i[256|e]=32768,r[e]=24,r[256|e]=24):t<-14?(i[e]=1024>>-t-14,i[256|e]=1024>>-t-14|32768,r[e]=-t-1,r[256|e]=-t-1):t<=15?(i[e]=t+15<<10,i[256|e]=t+15<<10|32768,r[e]=13,r[256|e]=13):t<128?(i[e]=31744,i[256|e]=64512,r[e]=24,r[256|e]=24):(i[e]=31744,i[256|e]=64512,r[e]=13,r[256|e]=13)}let a=new Uint32Array(2048),s=new Uint32Array(64),o=new Uint32Array(64);for(let e=1;e<1024;++e){let t=e<<13,n=0;for(;(8388608&t)==0;)t<<=1,n-=8388608;t&=-8388609,n+=0x38800000,a[e]=t|n}for(let e=1024;e<2048;++e)a[e]=0x38000000+(e-1024<<13);for(let e=1;e<31;++e)s[e]=e<<23;s[31]=0x47800000,s[32]=0x80000000;for(let e=33;e<63;++e)s[e]=0x80000000+(e-32<<23);s[63]=0xc7800000;for(let e=1;e<64;++e)32!==e&&(o[e]=1024);return{floatView:t,uint32View:n,baseTable:i,shiftTable:r,mantissaTable:a,exponentTable:s,offsetTable:o}}();function tW(e){Math.abs(e)>65504&&console.warn("THREE.DataUtils.toHalfFloat(): Value out of range."),e=V(e,-65504,65504),tG.floatView[0]=e;let t=tG.uint32View[0],n=t>>23&511;return tG.baseTable[n]+((8388607&t)>>tG.shiftTable[n])}function tj(e){let t=e>>10;return tG.uint32View[0]=tG.mantissaTable[tG.offsetTable[t]+(1023&e)]+tG.exponentTable[t],tG.floatView[0]}let tX={toHalfFloat:tW,fromHalfFloat:tj},tq=new eE,tY=new Y;class tZ{constructor(e,t,n=!1){if(Array.isArray(e))throw TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,this.name="",this.array=e,this.itemSize=t,this.count=void 0!==e?e.length/t:0,this.normalized=n,this.usage=35044,this.updateRanges=[],this.gpuType=1015,this.version=0}onUploadCallback(){}set needsUpdate(e){!0===e&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this.gpuType=e.gpuType,this}copyAt(e,t,n){e*=this.itemSize,n*=t.itemSize;for(let i=0,r=this.itemSize;it.count&&console.warn("THREE.BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),t.needsUpdate=!0}return this}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new eR);let e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){console.error("THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new eE(-1/0,-1/0,-1/0),new eE(Infinity,Infinity,Infinity));return}if(void 0!==e){if(this.boundingBox.setFromBufferAttribute(e),t)for(let e=0,n=t.length;e0&&(e.userData=this.userData),void 0!==this.parameters){let t=this.parameters;for(let n in t)void 0!==t[n]&&(e[n]=t[n]);return e}e.data={attributes:{}};let t=this.index;null!==t&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});let n=this.attributes;for(let t in n){let i=n[t];e.data.attributes[t]=i.toJSON(e.data)}let i={},r=!1;for(let t in this.morphAttributes){let n=this.morphAttributes[t],a=[];for(let t=0,i=n.length;t0&&(i[t]=a,r=!0)}r&&(e.data.morphAttributes=i,e.data.morphTargetsRelative=this.morphTargetsRelative);let a=this.groups;a.length>0&&(e.data.groups=JSON.parse(JSON.stringify(a)));let s=this.boundingSphere;return null!==s&&(e.data.boundingSphere={center:s.center.toArray(),radius:s.radius}),e}clone(){return new this.constructor().copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;let t={};this.name=e.name;let n=e.index;null!==n&&this.setIndex(n.clone(t));let i=e.attributes;for(let e in i){let n=i[e];this.setAttribute(e,n.clone(t))}let r=e.morphAttributes;for(let e in r){let n=[],i=r[e];for(let e=0,r=i.length;e0){let n=e[t[0]];if(void 0!==n){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;e(e.far-e.near)**2)||(ni.copy(r).invert(),nr.copy(e.ray).applyMatrix4(ni),(null===n.boundingBox||!1!==nr.intersectsBox(n.boundingBox))&&this._computeIntersections(e,t,nr)))}_computeIntersections(e,t,n){let i,r=this.geometry,a=this.material,s=r.index,o=r.attributes.position,l=r.attributes.uv,u=r.attributes.uv1,c=r.attributes.normal,h=r.groups,d=r.drawRange;if(null!==s)if(Array.isArray(a))for(let r=0,o=h.length;rn.far?null:{distance:l,point:np.clone(),object:e}}(e,t,n,i,no,nl,nu,nd);if(c){let e=new eE;tN.getBarycoord(nd,no,nl,nu,e),r&&(c.uv=tN.getInterpolatedAttribute(r,o,l,u,e,new Y)),a&&(c.uv1=tN.getInterpolatedAttribute(a,o,l,u,e,new Y)),s&&(c.normal=tN.getInterpolatedAttribute(s,o,l,u,e,new eE),c.normal.dot(i.direction)>0&&c.normal.multiplyScalar(-1));let t={a:o,b:l,c:u,normal:new eE,materialIndex:0};tN.getNormal(no,nl,nu,t.normal),c.face=t,c.barycoord=e}return c}class ng extends nn{constructor(e=1,t=1,n=1,i=1,r=1,a=1){super(),this.type="BoxGeometry",this.parameters={width:e,height:t,depth:n,widthSegments:i,heightSegments:r,depthSegments:a};const s=this;i=Math.floor(i),r=Math.floor(r);const o=[],l=[],u=[],c=[];let h=0,d=0;function p(e,t,n,i,r,a,p,f,m,g,v){let _=a/m,y=p/g,x=a/2,b=p/2,S=f/2,M=m+1,T=g+1,w=0,E=0,A=new eE;for(let a=0;a0?1:-1,u.push(A.x,A.y,A.z),c.push(o/m),c.push(1-a/g),w+=1}}for(let e=0;e0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader,t.lights=this.lights,t.clipping=this.clipping;let n={};for(let e in this.extensions)!0===this.extensions[e]&&(n[e]=!0);return Object.keys(n).length>0&&(t.extensions=n),t}}class nS extends ty{constructor(){super(),this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new e2,this.projectionMatrix=new e2,this.projectionMatrixInverse=new e2,this.coordinateSystem=2e3}copy(e,t){return super.copy(e,t),this.matrixWorldInverse.copy(e.matrixWorldInverse),this.projectionMatrix.copy(e.projectionMatrix),this.projectionMatrixInverse.copy(e.projectionMatrixInverse),this.coordinateSystem=e.coordinateSystem,this}getWorldDirection(e){return super.getWorldDirection(e).negate()}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(e,t){super.updateWorldMatrix(e,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return new this.constructor().copy(this)}}let nM=new eE,nT=new Y,nw=new Y;class nE extends nS{constructor(e=50,t=1,n=.1,i=2e3){super(),this.isPerspectiveCamera=!0,this.type="PerspectiveCamera",this.fov=e,this.zoom=1,this.near=n,this.far=i,this.focus=10,this.aspect=t,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.fov=e.fov,this.zoom=e.zoom,this.near=e.near,this.far=e.far,this.focus=e.focus,this.aspect=e.aspect,this.view=null===e.view?null:Object.assign({},e.view),this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this}setFocalLength(e){let t=.5*this.getFilmHeight()/e;this.fov=2*k*Math.atan(t),this.updateProjectionMatrix()}getFocalLength(){let e=Math.tan(.5*B*this.fov);return .5*this.getFilmHeight()/e}getEffectiveFOV(){return 2*k*Math.atan(Math.tan(.5*B*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}getViewBounds(e,t,n){nM.set(-1,-1,.5).applyMatrix4(this.projectionMatrixInverse),t.set(nM.x,nM.y).multiplyScalar(-e/nM.z),nM.set(1,1,.5).applyMatrix4(this.projectionMatrixInverse),n.set(nM.x,nM.y).multiplyScalar(-e/nM.z)}getViewSize(e,t){return this.getViewBounds(e,nT,nw),t.subVectors(nw,nT)}setViewOffset(e,t,n,i,r,a){this.aspect=e/t,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){let e=this.near,t=e*Math.tan(.5*B*this.fov)/this.zoom,n=2*t,i=this.aspect*n,r=-.5*i,a=this.view;if(null!==this.view&&this.view.enabled){let e=a.fullWidth,s=a.fullHeight;r+=a.offsetX*i/e,t-=a.offsetY*n/s,i*=a.width/e,n*=a.height/s}let s=this.filmOffset;0!==s&&(r+=e*s/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+i,t,t-n,e,this.far,this.coordinateSystem),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){let t=super.toJSON(e);return t.object.fov=this.fov,t.object.zoom=this.zoom,t.object.near=this.near,t.object.far=this.far,t.object.focus=this.focus,t.object.aspect=this.aspect,null!==this.view&&(t.object.view=Object.assign({},this.view)),t.object.filmGauge=this.filmGauge,t.object.filmOffset=this.filmOffset,t}}class nA extends ty{constructor(e,t,n){super(),this.type="CubeCamera",this.renderTarget=n,this.coordinateSystem=null,this.activeMipmapLevel=0;const i=new nE(-90,1,e,t);i.layers=this.layers,this.add(i);const r=new nE(-90,1,e,t);r.layers=this.layers,this.add(r);const a=new nE(-90,1,e,t);a.layers=this.layers,this.add(a);const s=new nE(-90,1,e,t);s.layers=this.layers,this.add(s);const o=new nE(-90,1,e,t);o.layers=this.layers,this.add(o);const l=new nE(-90,1,e,t);l.layers=this.layers,this.add(l)}updateCoordinateSystem(){let e=this.coordinateSystem,t=this.children.concat(),[n,i,r,a,s,o]=t;for(let e of t)this.remove(e);if(2e3===e)n.up.set(0,1,0),n.lookAt(1,0,0),i.up.set(0,1,0),i.lookAt(-1,0,0),r.up.set(0,0,-1),r.lookAt(0,1,0),a.up.set(0,0,1),a.lookAt(0,-1,0),s.up.set(0,1,0),s.lookAt(0,0,1),o.up.set(0,1,0),o.lookAt(0,0,-1);else if(2001===e)n.up.set(0,-1,0),n.lookAt(-1,0,0),i.up.set(0,-1,0),i.lookAt(1,0,0),r.up.set(0,0,1),r.lookAt(0,1,0),a.up.set(0,0,-1),a.lookAt(0,-1,0),s.up.set(0,-1,0),s.lookAt(0,0,1),o.up.set(0,-1,0),o.lookAt(0,0,-1);else throw Error("THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: "+e);for(let e of t)this.add(e),e.updateMatrixWorld()}update(e,t){null===this.parent&&this.updateMatrixWorld();let{renderTarget:n,activeMipmapLevel:i}=this;this.coordinateSystem!==e.coordinateSystem&&(this.coordinateSystem=e.coordinateSystem,this.updateCoordinateSystem());let[r,a,s,o,l,u]=this.children,c=e.getRenderTarget(),h=e.getActiveCubeFace(),d=e.getActiveMipmapLevel(),p=e.xr.enabled;e.xr.enabled=!1;let f=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,e.setRenderTarget(n,0,i),e.render(t,r),e.setRenderTarget(n,1,i),e.render(t,a),e.setRenderTarget(n,2,i),e.render(t,s),e.setRenderTarget(n,3,i),e.render(t,o),e.setRenderTarget(n,4,i),e.render(t,l),n.texture.generateMipmaps=f,e.setRenderTarget(n,5,i),e.render(t,u),e.setRenderTarget(c,h,d),e.xr.enabled=p,n.texture.needsPMREMUpdate=!0}}class nC extends ev{constructor(e,t,n,i,r,a,s,o,l,u){super(e=void 0!==e?e:[],t=void 0!==t?t:301,n,i,r,a,s,o,l,u),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(e){this.image=e}}class nR extends ex{constructor(e=1,t={}){super(e,e,t),this.isWebGLCubeRenderTarget=!0;const n={width:e,height:e,depth:1};this.texture=new nC([n,n,n,n,n,n],t.mapping,t.wrapS,t.wrapT,t.magFilter,t.minFilter,t.format,t.type,t.anisotropy,t.colorSpace),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=void 0!==t.generateMipmaps&&t.generateMipmaps,this.texture.minFilter=void 0!==t.minFilter?t.minFilter:1006}fromEquirectangularTexture(e,t){this.texture.type=t.type,this.texture.colorSpace=t.colorSpace,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;let n={uniforms:{tEquirect:{value:null}},vertexShader:` - - varying vec3 vWorldDirection; - - vec3 transformDirection( in vec3 dir, in mat4 matrix ) { - - return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); - - } - - void main() { - - vWorldDirection = transformDirection( position, modelMatrix ); - - #include - #include - - } - `,fragmentShader:` - - uniform sampler2D tEquirect; - - varying vec3 vWorldDirection; - - #include - - void main() { - - vec3 direction = normalize( vWorldDirection ); - - vec2 sampleUV = equirectUv( direction ); - - gl_FragColor = texture2D( tEquirect, sampleUV ); - - } - `},i=new ng(5,5,5),r=new nb({name:"CubemapFromEquirect",uniforms:nv(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:1,blending:0});r.uniforms.tEquirect.value=t;let a=new nf(i,r),s=t.minFilter;return 1008===t.minFilter&&(t.minFilter=1006),new nA(1,10,this).update(e,a),t.minFilter=s,a.geometry.dispose(),a.material.dispose(),this}clear(e,t,n,i){let r=e.getRenderTarget();for(let r=0;r<6;r++)e.setRenderTarget(this,r),e.clear(t,n,i);e.setRenderTarget(r)}}class nP{constructor(e,t=25e-5){this.isFogExp2=!0,this.name="",this.color=new tz(e),this.density=t}clone(){return new nP(this.color,this.density)}toJSON(){return{type:"FogExp2",name:this.name,color:this.color.getHex(),density:this.density}}}class nI{constructor(e,t=1,n=1e3){this.isFog=!0,this.name="",this.color=new tz(e),this.near=t,this.far=n}clone(){return new nI(this.color,this.near,this.far)}toJSON(){return{type:"Fog",name:this.name,color:this.color.getHex(),near:this.near,far:this.far}}}class nL extends ty{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.backgroundRotation=new tn,this.environmentIntensity=1,this.environmentRotation=new tn,this.overrideMaterial=null,"u">typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(e,t){return super.copy(e,t),null!==e.background&&(this.background=e.background.clone()),null!==e.environment&&(this.environment=e.environment.clone()),null!==e.fog&&(this.fog=e.fog.clone()),this.backgroundBlurriness=e.backgroundBlurriness,this.backgroundIntensity=e.backgroundIntensity,this.backgroundRotation.copy(e.backgroundRotation),this.environmentIntensity=e.environmentIntensity,this.environmentRotation.copy(e.environmentRotation),null!==e.overrideMaterial&&(this.overrideMaterial=e.overrideMaterial.clone()),this.matrixAutoUpdate=e.matrixAutoUpdate,this}toJSON(e){let t=super.toJSON(e);return null!==this.fog&&(t.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(t.object.backgroundBlurriness=this.backgroundBlurriness),1!==this.backgroundIntensity&&(t.object.backgroundIntensity=this.backgroundIntensity),t.object.backgroundRotation=this.backgroundRotation.toArray(),1!==this.environmentIntensity&&(t.object.environmentIntensity=this.environmentIntensity),t.object.environmentRotation=this.environmentRotation.toArray(),t}}class nN{constructor(e,t){this.isInterleavedBuffer=!0,this.array=e,this.stride=t,this.count=void 0!==e?e.length/t:0,this.usage=35044,this.updateRanges=[],this.version=0,this.uuid=H()}onUploadCallback(){}set needsUpdate(e){!0===e&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.array=new e.array.constructor(e.array),this.count=e.count,this.stride=e.stride,this.usage=e.usage,this}copyAt(e,t,n){e*=this.stride,n*=t.stride;for(let i=0,r=this.stride;ie.far||t.push({distance:o,point:nF.clone(),uv:tN.getInterpolation(nF,nG,nW,nj,nX,nq,nY,new Y),face:null,object:this})}copy(e,t){return super.copy(e,t),void 0!==e.center&&this.center.copy(e.center),this.material=e.material,this}}function nJ(e,t,n,i,r,a){nk.subVectors(e,n).addScalar(.5).multiply(i),void 0!==r?(nH.x=a*nk.x-r*nk.y,nH.y=r*nk.x+a*nk.y):nH.copy(nk),e.copy(t),e.x+=nH.x,e.y+=nH.y,e.applyMatrix4(nV)}let nK=new eE,n$=new eE;class nQ extends ty{constructor(){super(),this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]},isLOD:{value:!0}}),this.autoUpdate=!0}copy(e){super.copy(e,!1);let t=e.levels;for(let e=0,n=t.length;e0){let n,i;for(n=1,i=t.length;n0){nK.setFromMatrixPosition(this.matrixWorld);let n=e.ray.origin.distanceTo(nK);this.getObjectForDistance(n).raycast(e,t)}}update(e){let t=this.levels;if(t.length>1){let n,i;nK.setFromMatrixPosition(e.matrixWorld),n$.setFromMatrixPosition(this.matrixWorld);let r=nK.distanceTo(n$)/e.zoom;for(n=1,t[0].object.visible=!0,i=t.length;n=e)t[n-1].object.visible=!1,t[n].object.visible=!0;else break}for(this._currentLevel=n-1;n1?null:t.copy(e.start).addScaledVector(n,r)}intersectsLine(e){let t=this.distanceToPoint(e.start),n=this.distanceToPoint(e.end);return t<0&&n>0||n<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){let n=t||i_.getNormalMatrix(e),i=this.coplanarPoint(ig).applyMatrix4(e),r=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(r),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return new this.constructor().copy(this)}}let ix=new eq,ib=new eE;class iS{constructor(e=new iy,t=new iy,n=new iy,i=new iy,r=new iy,a=new iy){this.planes=[e,t,n,i,r,a]}set(e,t,n,i,r,a){let s=this.planes;return s[0].copy(e),s[1].copy(t),s[2].copy(n),s[3].copy(i),s[4].copy(r),s[5].copy(a),this}copy(e){let t=this.planes;for(let n=0;n<6;n++)t[n].copy(e.planes[n]);return this}setFromProjectionMatrix(e,t=2e3){let n=this.planes,i=e.elements,r=i[0],a=i[1],s=i[2],o=i[3],l=i[4],u=i[5],c=i[6],h=i[7],d=i[8],p=i[9],f=i[10],m=i[11],g=i[12],v=i[13],_=i[14],y=i[15];if(n[0].setComponents(o-r,h-l,m-d,y-g).normalize(),n[1].setComponents(o+r,h+l,m+d,y+g).normalize(),n[2].setComponents(o+a,h+u,m+p,y+v).normalize(),n[3].setComponents(o-a,h-u,m-p,y-v).normalize(),n[4].setComponents(o-s,h-c,m-f,y-_).normalize(),2e3===t)n[5].setComponents(o+s,h+c,m+f,y+_).normalize();else if(2001===t)n[5].setComponents(s,c,f,_).normalize();else throw Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: "+t);return this}intersectsObject(e){if(void 0!==e.boundingSphere)null===e.boundingSphere&&e.computeBoundingSphere(),ix.copy(e.boundingSphere).applyMatrix4(e.matrixWorld);else{let t=e.geometry;null===t.boundingSphere&&t.computeBoundingSphere(),ix.copy(t.boundingSphere).applyMatrix4(e.matrixWorld)}return this.intersectsSphere(ix)}intersectsSprite(e){return ix.center.set(0,0,0),ix.radius=.7071067811865476,ix.applyMatrix4(e.matrixWorld),this.intersectsSphere(ix)}intersectsSphere(e){let t=this.planes,n=e.center,i=-e.radius;for(let e=0;e<6;e++)if(t[e].distanceToPoint(n)0?e.max.x:e.min.x,ib.y=i.normal.y>0?e.max.y:e.min.y,ib.z=i.normal.z>0?e.max.z:e.min.z,0>i.distanceToPoint(ib))return!1}return!0}containsPoint(e){let t=this.planes;for(let n=0;n<6;n++)if(0>t[n].distanceToPoint(e))return!1;return!0}clone(){return new this.constructor().copy(this)}}function iM(e,t){return e-t}function iT(e,t){return e.z-t.z}function iw(e,t){return t.z-e.z}let iE=new e2,iA=new tz(1,1,1),iC=new iS,iR=new eR,iP=new eq,iI=new eE,iL=new eE,iN=new eE,iU=new class{constructor(){this.index=0,this.pool=[],this.list=[]}push(e,t,n,i){let r=this.pool,a=this.list;this.index>=r.length&&r.push({start:-1,count:-1,z:-1,index:-1});let s=r[this.index];a.push(s),this.index++,s.start=e,s.count=t,s.z=n,s.index=i}reset(){this.list.length=0,this.index=0}},iD=new nf,iO=[];function iF(e,t){if(e.constructor!==t.constructor){let n=Math.min(e.length,t.length);for(let i=0;i65535?new Uint32Array(i):new Uint16Array(i);t.setIndex(new tZ(e,1))}this._geometryInitialized=!0}}_validateGeometry(e){let t=this.geometry;if(!!e.getIndex()!=!!t.getIndex())throw Error('THREE.BatchedMesh: All geometries must consistently have "index".');for(let n in t.attributes){if(!e.hasAttribute(n))throw Error(`THREE.BatchedMesh: Added geometry missing "${n}". All geometries must have consistent attributes.`);let i=e.getAttribute(n),r=t.getAttribute(n);if(i.itemSize!==r.itemSize||i.normalized!==r.normalized)throw Error("THREE.BatchedMesh: All attributes must have a consistent itemSize and normalized value.")}}validateInstanceId(e){let t=this._instanceInfo;if(e<0||e>=t.length||!1===t[e].active)throw Error(`THREE.BatchedMesh: Invalid instanceId ${e}. Instance is either out of range or has been deleted.`)}validateGeometryId(e){let t=this._geometryInfo;if(e<0||e>=t.length||!1===t[e].active)throw Error(`THREE.BatchedMesh: Invalid geometryId ${e}. Geometry is either out of range or has been deleted.`)}setCustomSort(e){return this.customSort=e,this}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new eR);let e=this.boundingBox,t=this._instanceInfo;e.makeEmpty();for(let n=0,i=t.length;n=this.maxInstanceCount&&0===this._availableInstanceIds.length)throw Error("THREE.BatchedMesh: Maximum item count reached.");let t={visible:!0,active:!0,geometryIndex:e},n=null;this._availableInstanceIds.length>0?(this._availableInstanceIds.sort(iM),n=this._availableInstanceIds.shift(),this._instanceInfo[n]=t):(n=this._instanceInfo.length,this._instanceInfo.push(t));let i=this._matricesTexture;iE.identity().toArray(i.image.data,16*n),i.needsUpdate=!0;let r=this._colorsTexture;return r&&(iA.toArray(r.image.data,4*n),r.needsUpdate=!0),this._visibilityChanged=!0,n}addGeometry(e,t=-1,n=-1){let i;this._initializeGeometry(e),this._validateGeometry(e);let r={vertexStart:-1,vertexCount:-1,reservedVertexCount:-1,indexStart:-1,indexCount:-1,reservedIndexCount:-1,start:-1,count:-1,boundingBox:null,boundingSphere:null,active:!0},a=this._geometryInfo;r.vertexStart=this._nextVertexStart,r.reservedVertexCount=-1===t?e.getAttribute("position").count:t;let s=e.getIndex();if(null!==s&&(r.indexStart=this._nextIndexStart,r.reservedIndexCount=-1===n?s.count:n),-1!==r.indexStart&&r.indexStart+r.reservedIndexCount>this._maxIndexCount||r.vertexStart+r.reservedVertexCount>this._maxVertexCount)throw Error("THREE.BatchedMesh: Reserved space request exceeds the maximum buffer size.");return this._availableGeometryIds.length>0?(this._availableGeometryIds.sort(iM),a[i=this._availableGeometryIds.shift()]=r):(i=this._geometryCount,this._geometryCount++,a.push(r)),this.setGeometryAt(i,e),this._nextIndexStart=r.indexStart+r.reservedIndexCount,this._nextVertexStart=r.vertexStart+r.reservedVertexCount,i}setGeometryAt(e,t){if(e>=this._geometryCount)throw Error("THREE.BatchedMesh: Maximum geometry count reached.");this._validateGeometry(t);let n=this.geometry,i=null!==n.getIndex(),r=n.getIndex(),a=t.getIndex(),s=this._geometryInfo[e];if(i&&a.count>s.reservedIndexCount||t.attributes.position.count>s.reservedVertexCount)throw Error("THREE.BatchedMesh: Reserved space not large enough for provided geometry.");let o=s.vertexStart,l=s.reservedVertexCount;for(let e in s.vertexCount=t.getAttribute("position").count,n.attributes){let i=t.getAttribute(e),r=n.getAttribute(e);!function(e,t,n=0){let i=t.itemSize;if(e.isInterleavedBufferAttribute||e.array.constructor!==t.array.constructor){let r=e.count;for(let a=0;a=t.length||!1===t[e].active)return this;let n=this._instanceInfo;for(let t=0,i=n.length;tt).sort((e,t)=>n[e].vertexStart-n[t].vertexStart),r=this.geometry;for(let a=0,s=n.length;a=this._geometryCount)return null;let n=this.geometry,i=this._geometryInfo[e];if(null===i.boundingBox){let e=new eR,t=n.index,r=n.attributes.position;for(let n=i.start,a=i.start+i.count;n=this._geometryCount)return null;let n=this.geometry,i=this._geometryInfo[e];if(null===i.boundingSphere){let t=new eq;this.getBoundingBoxAt(e,iR),iR.getCenter(t.center);let r=n.index,a=n.attributes.position,s=0;for(let e=i.start,n=i.start+i.count;ee.active);if(Math.max(...n.map(e=>e.vertexStart+e.reservedVertexCount))>e)throw Error(`BatchedMesh: Geometry vertex values are being used outside the range ${t}. Cannot shrink further.`);if(this.geometry.index&&Math.max(...n.map(e=>e.indexStart+e.reservedIndexCount))>t)throw Error(`BatchedMesh: Geometry index values are being used outside the range ${t}. Cannot shrink further.`);let i=this.geometry;i.dispose(),this._maxVertexCount=e,this._maxIndexCount=t,this._geometryInitialized&&(this._geometryInitialized=!1,this.geometry=new nn,this._initializeGeometry(i));let r=this.geometry;for(let e in i.index&&iF(i.index.array,r.index.array),i.attributes)iF(i.attributes[e].array,r.attributes[e].array)}raycast(e,t){let n=this._instanceInfo,i=this._geometryInfo,r=this.matrixWorld,a=this.geometry;iD.material=this.material,iD.geometry.index=a.index,iD.geometry.attributes=a.attributes,null===iD.geometry.boundingBox&&(iD.geometry.boundingBox=new eR),null===iD.geometry.boundingSphere&&(iD.geometry.boundingSphere=new eq);for(let a=0,s=n.length;a({...e,boundingBox:null!==e.boundingBox?e.boundingBox.clone():null,boundingSphere:null!==e.boundingSphere?e.boundingSphere.clone():null})),this._instanceInfo=e._instanceInfo.map(e=>({...e})),this._maxInstanceCount=e._maxInstanceCount,this._maxVertexCount=e._maxVertexCount,this._maxIndexCount=e._maxIndexCount,this._geometryInitialized=e._geometryInitialized,this._geometryCount=e._geometryCount,this._multiDrawCounts=e._multiDrawCounts.slice(),this._multiDrawStarts=e._multiDrawStarts.slice(),this._matricesTexture=e._matricesTexture.clone(),this._matricesTexture.image.data=this._matricesTexture.image.data.slice(),null!==this._colorsTexture&&(this._colorsTexture=e._colorsTexture.clone(),this._colorsTexture.image.data=this._colorsTexture.image.data.slice()),this}dispose(){return this.geometry.dispose(),this._matricesTexture.dispose(),this._matricesTexture=null,this._indirectTexture.dispose(),this._indirectTexture=null,null!==this._colorsTexture&&(this._colorsTexture.dispose(),this._colorsTexture=null),this}onBeforeRender(e,t,n,i,r){if(!this._visibilityChanged&&!this.perObjectFrustumCulled&&!this.sortObjects)return;let a=i.getIndex(),s=null===a?1:a.array.BYTES_PER_ELEMENT,o=this._instanceInfo,l=this._multiDrawStarts,u=this._multiDrawCounts,c=this._geometryInfo,h=this.perObjectFrustumCulled,d=this._indirectTexture,p=d.image.data;h&&(iE.multiplyMatrices(n.projectionMatrix,n.matrixWorldInverse).multiply(this.matrixWorld),iC.setFromProjectionMatrix(iE,e.coordinateSystem));let f=0;if(this.sortObjects){iE.copy(this.matrixWorld).invert(),iI.setFromMatrixPosition(n.matrixWorld).applyMatrix4(iE),iL.set(0,0,-1).transformDirection(n.matrixWorld).transformDirection(iE);for(let e=0,t=o.length;e0){let n=e[t[0]];if(void 0!==n){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;ei)return;ij.applyMatrix4(e.matrixWorld);let o=t.ray.origin.distanceTo(ij);if(!(ot.far))return{distance:o,point:iX.clone().applyMatrix4(e.matrixWorld),index:r,face:null,faceIndex:null,barycoord:null,object:e}}let iZ=new eE,iJ=new eE;class iK extends iq{constructor(e,t){super(e,t),this.isLineSegments=!0,this.type="LineSegments"}computeLineDistances(){let e=this.geometry;if(null===e.index){let t=e.attributes.position,n=[];for(let e=0,i=t.count;e0){let n=e[t[0]];if(void 0!==n){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;er.far)return;a.push({distance:l,distanceToRay:Math.sqrt(o),point:n,index:t,face:null,faceIndex:null,barycoord:null,object:s})}}class i6 extends ty{constructor(){super(),this.isGroup=!0,this.type="Group"}}class i8 extends ev{constructor(e,t,n,i,r,a,s,o,l){super(e,t,n,i,r,a,s,o,l),this.isVideoTexture=!0,this.minFilter=void 0!==a?a:1006,this.magFilter=void 0!==r?r:1006,this.generateMipmaps=!1;const u=this;"requestVideoFrameCallback"in e&&e.requestVideoFrameCallback(function t(){u.needsUpdate=!0,e.requestVideoFrameCallback(t)})}clone(){return new this.constructor(this.image).copy(this)}update(){let e=this.image;!1=="requestVideoFrameCallback"in e&&e.readyState>=e.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}class i9 extends ev{constructor(e,t){super({width:e,height:t}),this.isFramebufferTexture=!0,this.magFilter=1003,this.minFilter=1003,this.generateMipmaps=!1,this.needsUpdate=!0}}class i7 extends ev{constructor(e,t,n,i,r,a,s,o,l,u,c,h){super(null,a,s,o,l,u,i,r,c,h),this.isCompressedTexture=!0,this.image={width:t,height:n},this.mipmaps=e,this.flipY=!1,this.generateMipmaps=!1}}class re extends i7{constructor(e,t,n,i,r,a){super(e,t,n,r,a),this.isCompressedArrayTexture=!0,this.image.depth=i,this.wrapR=1001,this.layerUpdates=new Set}addLayerUpdate(e){this.layerUpdates.add(e)}clearLayerUpdates(){this.layerUpdates.clear()}}class rt extends i7{constructor(e,t,n){super(void 0,e[0].width,e[0].height,t,n,301),this.isCompressedCubeTexture=!0,this.isCubeTexture=!0,this.image=e}}class rn extends ev{constructor(e,t,n,i,r,a,s,o,l){super(e,t,n,i,r,a,s,o,l),this.isCanvasTexture=!0,this.needsUpdate=!0}}class ri extends ev{constructor(e,t,n,i,r,a,s,o,l,u=1026){if(1026!==u&&1027!==u)throw Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===n&&1026===u&&(n=1014),void 0===n&&1027===u&&(n=1020),super(null,i,r,a,s,o,u,n,l),this.isDepthTexture=!0,this.image={width:e,height:t},this.magFilter=void 0!==s?s:1003,this.minFilter=void 0!==o?o:1003,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(e){return super.copy(e),this.compareFunction=e.compareFunction,this}toJSON(e){let t=super.toJSON(e);return null!==this.compareFunction&&(t.compareFunction=this.compareFunction),t}}class rr{constructor(){this.type="Curve",this.arcLengthDivisions=200}getPoint(){return console.warn("THREE.Curve: .getPoint() not implemented."),null}getPointAt(e,t){let n=this.getUtoTmapping(e);return this.getPoint(n,t)}getPoints(e=5){let t=[];for(let n=0;n<=e;n++)t.push(this.getPoint(n/e));return t}getSpacedPoints(e=5){let t=[];for(let n=0;n<=e;n++)t.push(this.getPointAt(n/e));return t}getLength(){let e=this.getLengths();return e[e.length-1]}getLengths(e=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===e+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;let t=[],n,i=this.getPoint(0),r=0;t.push(0);for(let a=1;a<=e;a++)t.push(r+=(n=this.getPoint(a/e)).distanceTo(i)),i=n;return this.cacheArcLengths=t,t}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(e,t){let n,i=this.getLengths(),r=0,a=i.length;n=t||e*i[a-1];let s=0,o=a-1,l;for(;s<=o;)if((l=i[r=Math.floor(s+(o-s)/2)]-n)<0)s=r+1;else if(l>0)o=r-1;else{o=r;break}if(i[r=o]===n)return r/(a-1);let u=i[r],c=i[r+1];return(r+(n-u)/(c-u))/(a-1)}getTangent(e,t){let n=e-1e-4,i=e+1e-4;n<0&&(n=0),i>1&&(i=1);let r=this.getPoint(n),a=this.getPoint(i),s=t||(r.isVector2?new Y:new eE);return s.copy(a).sub(r).normalize(),s}getTangentAt(e,t){let n=this.getUtoTmapping(e);return this.getTangent(n,t)}computeFrenetFrames(e,t){let n=new eE,i=[],r=[],a=[],s=new eE,o=new e2;for(let t=0;t<=e;t++){let n=t/e;i[t]=this.getTangentAt(n,new eE)}r[0]=new eE,a[0]=new eE;let l=Number.MAX_VALUE,u=Math.abs(i[0].x),c=Math.abs(i[0].y),h=Math.abs(i[0].z);u<=l&&(l=u,n.set(1,0,0)),c<=l&&(l=c,n.set(0,1,0)),h<=l&&n.set(0,0,1),s.crossVectors(i[0],n).normalize(),r[0].crossVectors(i[0],s),a[0].crossVectors(i[0],r[0]);for(let t=1;t<=e;t++){if(r[t]=r[t-1].clone(),a[t]=a[t-1].clone(),s.crossVectors(i[t-1],i[t]),s.length()>Number.EPSILON){s.normalize();let e=Math.acos(V(i[t-1].dot(i[t]),-1,1));r[t].applyMatrix4(o.makeRotationAxis(s,e))}a[t].crossVectors(i[t],r[t])}if(!0===t){let t=Math.acos(V(r[0].dot(r[e]),-1,1));t/=e,i[0].dot(s.crossVectors(r[0],r[e]))>0&&(t=-t);for(let n=1;n<=e;n++)r[n].applyMatrix4(o.makeRotationAxis(i[n],t*n)),a[n].crossVectors(i[n],r[n])}return{tangents:i,normals:r,binormals:a}}clone(){return new this.constructor().copy(this)}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}toJSON(){let e={metadata:{version:4.6,type:"Curve",generator:"Curve.toJSON"}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.type,e}fromJSON(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}}class ra extends rr{constructor(e=0,t=0,n=1,i=1,r=0,a=2*Math.PI,s=!1,o=0){super(),this.isEllipseCurve=!0,this.type="EllipseCurve",this.aX=e,this.aY=t,this.xRadius=n,this.yRadius=i,this.aStartAngle=r,this.aEndAngle=a,this.aClockwise=s,this.aRotation=o}getPoint(e,t=new Y){let n=2*Math.PI,i=this.aEndAngle-this.aStartAngle,r=Math.abs(i)n;)i-=n;i0?0:(Math.floor(Math.abs(o)/a)+1)*a:0===l&&o===a-1&&(o=a-2,l=1),this.closed||o>0?n=r[(o-1)%a]:(rl.subVectors(r[0],r[1]).add(r[0]),n=rl);let u=r[o%a],c=r[(o+1)%a];if(this.closed||o+2n.length-2?n.length-1:r+1],u=n[r>n.length-3?n.length-1:r+2];return t.set(rp(a,s.x,o.x,l.x,u.x),rp(a,s.y,o.y,l.y,u.y)),t}copy(e){super.copy(e),this.points=[];for(let t=0,n=e.points.length;t=n){let e=i[r]-n,a=this.curves[r],s=a.getLength(),o=0===s?0:1-e/s;return a.getPointAt(o,t)}r++}return null}getLength(){let e=this.getCurveLengths();return e[e.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;let e=[],t=0;for(let n=0,i=this.curves.length;n1&&!n[n.length-1].equals(n[0])&&n.push(n[0]),n}copy(e){super.copy(e),this.curves=[];for(let t=0,n=e.curves.length;t0){let e=l.getPoint(0);e.equals(this.currentPoint)||this.lineTo(e.x,e.y)}this.curves.push(l);let u=l.getPoint(1);return this.currentPoint.copy(u),this}copy(e){return super.copy(e),this.currentPoint.copy(e.currentPoint),this}toJSON(){let e=super.toJSON();return e.currentPoint=this.currentPoint.toArray(),e}fromJSON(e){return super.fromJSON(e),this.currentPoint.fromArray(e.currentPoint),this}}class rE extends nn{constructor(e=[new Y(0,-.5),new Y(.5,0),new Y(0,.5)],t=12,n=0,i=2*Math.PI){super(),this.type="LatheGeometry",this.parameters={points:e,segments:t,phiStart:n,phiLength:i},t=Math.floor(t),i=V(i,0,2*Math.PI);const r=[],a=[],s=[],o=[],l=[],u=1/t,c=new eE,h=new Y,d=new eE,p=new eE,f=new eE;let m=0,g=0;for(let t=0;t<=e.length-1;t++)switch(t){case 0:m=e[t+1].x-e[t].x,d.x=+(g=e[t+1].y-e[t].y),d.y=-m,d.z=0*g,f.copy(d),d.normalize(),o.push(d.x,d.y,d.z);break;case e.length-1:o.push(f.x,f.y,f.z);break;default:m=e[t+1].x-e[t].x,d.x=+(g=e[t+1].y-e[t].y),d.y=-m,d.z=0*g,p.copy(d),d.x+=f.x,d.y+=f.y,d.z+=f.z,d.normalize(),o.push(d.x,d.y,d.z),f.copy(p)}for(let r=0;r<=t;r++){const d=n+r*u*i,p=Math.sin(d),f=Math.cos(d);for(let n=0;n<=e.length-1;n++){c.x=e[n].x*p,c.y=e[n].y,c.z=e[n].x*f,a.push(c.x,c.y,c.z),h.x=r/t,h.y=n/(e.length-1),s.push(h.x,h.y);const i=o[3*n+0]*p,u=o[3*n+1],d=o[3*n+0]*f;l.push(i,u,d)}}for(let n=0;n0||0!==i)&&(u.push(a,s,l),_+=3),(t>0||i!==r-1)&&(u.push(s,o,l),_+=3)}l.addGroup(g,_,0),g+=_})(),!1===a&&(e>0&&v(!0),t>0&&v(!1)),this.setIndex(u),this.setAttribute("position",new t4(c,3)),this.setAttribute("normal",new t4(h,3)),this.setAttribute("uv",new t4(d,2))}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}static fromJSON(e){return new rR(e.radiusTop,e.radiusBottom,e.height,e.radialSegments,e.heightSegments,e.openEnded,e.thetaStart,e.thetaLength)}}class rP extends rR{constructor(e=1,t=1,n=32,i=1,r=!1,a=0,s=2*Math.PI){super(0,e,t,n,i,r,a,s),this.type="ConeGeometry",this.parameters={radius:e,height:t,radialSegments:n,heightSegments:i,openEnded:r,thetaStart:a,thetaLength:s}}static fromJSON(e){return new rP(e.radius,e.height,e.radialSegments,e.heightSegments,e.openEnded,e.thetaStart,e.thetaLength)}}class rI extends nn{constructor(e=[],t=[],n=1,i=0){super(),this.type="PolyhedronGeometry",this.parameters={vertices:e,indices:t,radius:n,detail:i};const r=[],a=[];function s(e){r.push(e.x,e.y,e.z)}function o(t,n){let i=3*t;n.x=e[i+0],n.y=e[i+1],n.z=e[i+2]}function l(e,t,n,i){i<0&&1===e.x&&(a[t]=e.x-1),0===n.x&&0===n.z&&(a[t]=i/2/Math.PI+.5)}function u(e){return Math.atan2(e.z,-e.x)}(function(e){let n=new eE,i=new eE,r=new eE;for(let a=0;a.9&&s<.1&&(t<.2&&(a[e+0]+=1),n<.2&&(a[e+2]+=1),i<.2&&(a[e+4]+=1))}}()}(),this.setAttribute("position",new t4(r,3)),this.setAttribute("normal",new t4(r.slice(),3)),this.setAttribute("uv",new t4(a,2)),0===i?this.computeVertexNormals():this.normalizeNormals()}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}static fromJSON(e){return new rI(e.vertices,e.indices,e.radius,e.details)}}class rL extends rI{constructor(e=1,t=0){const n=(1+Math.sqrt(5))/2,i=1/n;super([-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-i,-n,0,-i,n,0,i,-n,0,i,n,-i,-n,0,-i,n,0,i,-n,0,i,n,0,-n,0,-i,n,0,-i,-n,0,i,n,0,i],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],e,t),this.type="DodecahedronGeometry",this.parameters={radius:e,detail:t}}static fromJSON(e){return new rL(e.radius,e.detail)}}let rN=new eE,rU=new eE,rD=new eE,rO=new tN;class rF extends nn{constructor(e=null,t=1){if(super(),this.type="EdgesGeometry",this.parameters={geometry:e,thresholdAngle:t},null!==e){const n=Math.cos(B*t),i=e.getIndex(),r=e.getAttribute("position"),a=i?i.count:r.count,s=[0,0,0],o=["a","b","c"],l=[,,,],u={},c=[];for(let e=0;e=n.next.y&&n.next.y!==n.y){let e=n.x+(s-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(e<=a&&e>i&&(i=e,r=n.x=n.x&&n.x>=l&&a!==n.x&&rW(sr.x||n.x===r.x&&(d=r,p=n,0>rj(d.prev,d,p.prev)&&0>rj(p.next,d,d.next))))&&(r=n,c=h)),n=n.next}while(n!==o)return r}(e,t);if(!n)return t;let i=rK(n,e);return rH(i,i.next),rH(n,n.next)}(u[r],n);return n}(e,t,d,n)),e.length>80*n){i=a=e[0],r=s=e[1];for(let t=n;ta&&(a=o),l>s&&(s=l);u=0!==(u=Math.max(a-i,s-r))?32767/u:0}return function e(t,n,i,r,a,s,o){if(!t)return;!o&&s&&function(e,t,n,i){let r=e;do 0===r.z&&(r.z=rG(r.x,r.y,t,n,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next;while(r!==e)r.prevZ.nextZ=null,r.prevZ=null,function(e){let t,n,i,r,a,s,o,l,u=1;do{for(n=e,e=null,a=null,s=0;n;){for(s++,i=n,o=0,t=0;t0||l>0&&i;)0!==o&&(0===l||!i||n.z<=i.z)?(r=n,n=n.nextZ,o--):(r=i,i=i.nextZ,l--),a?a.nextZ=r:e=r,r.prevZ=a,a=r;n=i}a.nextZ=null,u*=2}while(s>1)}(r)}(t,r,a,s);let l=t,u,c;for(;t.prev!==t.next;){if(u=t.prev,c=t.next,s?function(e,t,n,i){let r=e.prev,a=e.next;if(rj(r,e,a)>=0)return!1;let s=r.x,o=e.x,l=a.x,u=r.y,c=e.y,h=a.y,d=so?s>l?s:l:o>l?o:l,m=u>c?u>h?u:h:c>h?c:h,g=rG(d,p,t,n,i),v=rG(f,m,t,n,i),_=e.prevZ,y=e.nextZ;for(;_&&_.z>=g&&y&&y.z<=v;){if(_.x>=d&&_.x<=f&&_.y>=p&&_.y<=m&&_!==r&&_!==a&&rW(s,u,o,c,l,h,_.x,_.y)&&rj(_.prev,_,_.next)>=0||(_=_.prevZ,y.x>=d&&y.x<=f&&y.y>=p&&y.y<=m&&y!==r&&y!==a&&rW(s,u,o,c,l,h,y.x,y.y)&&rj(y.prev,y,y.next)>=0))return!1;y=y.nextZ}for(;_&&_.z>=g;){if(_.x>=d&&_.x<=f&&_.y>=p&&_.y<=m&&_!==r&&_!==a&&rW(s,u,o,c,l,h,_.x,_.y)&&rj(_.prev,_,_.next)>=0)return!1;_=_.prevZ}for(;y&&y.z<=v;){if(y.x>=d&&y.x<=f&&y.y>=p&&y.y<=m&&y!==r&&y!==a&&rW(s,u,o,c,l,h,y.x,y.y)&&rj(y.prev,y,y.next)>=0)return!1;y=y.nextZ}return!0}(t,r,a,s):function(e){let t=e.prev,n=e.next;if(rj(t,e,n)>=0)return!1;let i=t.x,r=e.x,a=n.x,s=t.y,o=e.y,l=n.y,u=ir?i>a?i:a:r>a?r:a,d=s>o?s>l?s:l:o>l?o:l,p=n.next;for(;p!==t;){if(p.x>=u&&p.x<=h&&p.y>=c&&p.y<=d&&rW(i,s,r,o,a,l,p.x,p.y)&&rj(p.prev,p,p.next)>=0)return!1;p=p.next}return!0}(t)){n.push(u.i/i|0),n.push(t.i/i|0),n.push(c.i/i|0),rQ(t),t=c.next,l=c.next;continue}if((t=c)===l){o?1===o?e(t=function(e,t,n){let i=e;do{let r=i.prev,a=i.next.next;!rX(r,a)&&rq(r,i,i.next,a)&&rJ(r,a)&&rJ(a,r)&&(t.push(r.i/n|0),t.push(i.i/n|0),t.push(a.i/n|0),rQ(i),rQ(i.next),i=e=a),i=i.next}while(i!==e)return rH(i)}(rH(t),n,i),n,i,r,a,s,2):2===o&&function(t,n,i,r,a,s){let o=t;do{let t=o.next.next;for(;t!==o.prev;){var l,u;if(o.i!==t.i&&(l=o,u=t,l.next.i!==u.i&&l.prev.i!==u.i&&!function(e,t){let n=e;do{if(n.i!==e.i&&n.next.i!==e.i&&n.i!==t.i&&n.next.i!==t.i&&rq(n,n.next,e,t))return!0;n=n.next}while(n!==e)return!1}(l,u)&&(rJ(l,u)&&rJ(u,l)&&function(e,t){let n=e,i=!1,r=(e.x+t.x)/2,a=(e.y+t.y)/2;do n.y>a!=n.next.y>a&&n.next.y!==n.y&&r<(n.next.x-n.x)*(a-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next;while(n!==e)return i}(l,u)&&(rj(l.prev,l,u.prev)||rj(l,u.prev,u))||rX(l,u)&&rj(l.prev,l,l.next)>0&&rj(u.prev,u,u.next)>0))){let l=rK(o,t);o=rH(o,o.next),l=rH(l,l.next),e(o,n,i,r,a,s,0),e(l,n,i,r,a,s,0);return}t=t.next}o=o.next}while(o!==t)}(t,n,i,r,a,s):e(rH(t),n,i,r,a,s,1);break}}}(d,p,n,i,r,u,0),p};function rk(e,t,n,i,r){let a,s;if(r===function(e,t,n,i){let r=0;for(let a=t,s=n-i;a0)for(a=t;a=t;a-=i)s=r$(a,e[a],e[a+1],s);return s&&rX(s,s.next)&&(rQ(s),s=s.next),s}function rH(e,t){if(!e)return e;t||(t=e);let n=e,i;do if(i=!1,!n.steiner&&(rX(n,n.next)||0===rj(n.prev,n,n.next))){if(rQ(n),(n=t=n.prev)===n.next)break;i=!0}else n=n.next;while(i||n!==t)return t}function rV(e,t){return e.x-t.x}function rG(e,t,n,i,r){return(e=((e=((e=((e=((e=(e-n)*r|0)|e<<8)&0xff00ff)|e<<4)&0xf0f0f0f)|e<<2)&0x33333333)|e<<1)&0x55555555)|(t=((t=((t=((t=((t=(t-i)*r|0)|t<<8)&0xff00ff)|t<<4)&0xf0f0f0f)|t<<2)&0x33333333)|t<<1)&0x55555555)<<1}function rW(e,t,n,i,r,a,s,o){return(r-s)*(t-o)>=(e-s)*(a-o)&&(e-s)*(i-o)>=(n-s)*(t-o)&&(n-s)*(a-o)>=(r-s)*(i-o)}function rj(e,t,n){return(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y)}function rX(e,t){return e.x===t.x&&e.y===t.y}function rq(e,t,n,i){let r=rZ(rj(e,t,n)),a=rZ(rj(e,t,i)),s=rZ(rj(n,i,e)),o=rZ(rj(n,i,t));return!!(r!==a&&s!==o||0===r&&rY(e,n,t)||0===a&&rY(e,i,t)||0===s&&rY(n,e,i)||0===o&&rY(n,t,i))}function rY(e,t,n){return t.x<=Math.max(e.x,n.x)&&t.x>=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y)}function rZ(e){return e>0?1:e<0?-1:0}function rJ(e,t){return 0>rj(e.prev,e,e.next)?rj(e,t,e.next)>=0&&rj(e,e.prev,t)>=0:0>rj(e,t,e.prev)||0>rj(e,e.next,t)}function rK(e,t){let n=new r0(e.i,e.x,e.y),i=new r0(t.i,t.x,t.y),r=e.next,a=t.prev;return e.next=t,t.prev=e,n.next=r,r.prev=n,i.next=n,n.prev=i,a.next=i,i.prev=a,i}function r$(e,t,n,i){let r=new r0(e,t,n);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function rQ(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function r0(e,t,n){this.i=e,this.x=t,this.y=n,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}class r1{static area(e){let t=e.length,n=0;for(let i=t-1,r=0;rr1.area(e)}static triangulateShape(e,t){let n=[],i=[],r=[];r2(e),r3(n,e);let a=e.length;t.forEach(r2);for(let e=0;e2&&e[t-1].equals(e[0])&&e.pop()}function r3(e,t){for(let n=0;nNumber.EPSILON){let h=Math.sqrt(c),d=Math.sqrt(l*l+u*u),p=t.x-o/h,f=t.y+s/h,m=((n.x-u/d-p)*u-(n.y+l/d-f)*l)/(s*u-o*l),g=(i=p+s*m-e.x)*i+(r=f+o*m-e.y)*r;if(g<=2)return new Y(i,r);a=Math.sqrt(g/2)}else{let e=!1;s>Number.EPSILON?l>Number.EPSILON&&(e=!0):s<-Number.EPSILON?l<-Number.EPSILON&&(e=!0):Math.sign(o)===Math.sign(u)&&(e=!0),e?(i=-o,r=s,a=Math.sqrt(c)):(i=s,r=o,a=Math.sqrt(c/2))}return new Y(i/a,r/a)}let I=[];for(let e=0,t=E.length,n=t-1,i=e+1;e=0;e--){let t=e/v,n=f*Math.cos(t*Math.PI/2),i=m*Math.sin(t*Math.PI/2)+g;for(let e=0,t=E.length;e=0;){let a=r,s=r-1;s<0&&(s=e.length-1);for(let e=0,r=h+2*v;e0)&&d.push(t,r,l),(e!==n-1||o0!=e>0&&this.version++,this._anisotropy=e}get clearcoat(){return this._clearcoat}set clearcoat(e){this._clearcoat>0!=e>0&&this.version++,this._clearcoat=e}get iridescence(){return this._iridescence}set iridescence(e){this._iridescence>0!=e>0&&this.version++,this._iridescence=e}get dispersion(){return this._dispersion}set dispersion(e){this._dispersion>0!=e>0&&this.version++,this._dispersion=e}get sheen(){return this._sheen}set sheen(e){this._sheen>0!=e>0&&this.version++,this._sheen=e}get transmission(){return this._transmission}set transmission(e){this._transmission>0!=e>0&&this.version++,this._transmission=e}copy(e){return super.copy(e),this.defines={STANDARD:"",PHYSICAL:""},this.anisotropy=e.anisotropy,this.anisotropyRotation=e.anisotropyRotation,this.anisotropyMap=e.anisotropyMap,this.clearcoat=e.clearcoat,this.clearcoatMap=e.clearcoatMap,this.clearcoatRoughness=e.clearcoatRoughness,this.clearcoatRoughnessMap=e.clearcoatRoughnessMap,this.clearcoatNormalMap=e.clearcoatNormalMap,this.clearcoatNormalScale.copy(e.clearcoatNormalScale),this.dispersion=e.dispersion,this.ior=e.ior,this.iridescence=e.iridescence,this.iridescenceMap=e.iridescenceMap,this.iridescenceIOR=e.iridescenceIOR,this.iridescenceThicknessRange=[...e.iridescenceThicknessRange],this.iridescenceThicknessMap=e.iridescenceThicknessMap,this.sheen=e.sheen,this.sheenColor.copy(e.sheenColor),this.sheenColorMap=e.sheenColorMap,this.sheenRoughness=e.sheenRoughness,this.sheenRoughnessMap=e.sheenRoughnessMap,this.transmission=e.transmission,this.transmissionMap=e.transmissionMap,this.thickness=e.thickness,this.thicknessMap=e.thicknessMap,this.attenuationDistance=e.attenuationDistance,this.attenuationColor.copy(e.attenuationColor),this.specularIntensity=e.specularIntensity,this.specularIntensityMap=e.specularIntensityMap,this.specularColor.copy(e.specularColor),this.specularColorMap=e.specularColorMap,this}}class ap extends tH{constructor(e){super(),this.isMeshPhongMaterial=!0,this.type="MeshPhongMaterial",this.color=new tz(0xffffff),this.specular=new tz(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new tz(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Y(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new tn,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.specular.copy(e.specular),this.shininess=e.shininess,this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}}class af extends tH{constructor(e){super(),this.isMeshToonMaterial=!0,this.defines={TOON:""},this.type="MeshToonMaterial",this.color=new tz(0xffffff),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new tz(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Y(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.gradientMap=e.gradientMap,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.alphaMap=e.alphaMap,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}}class am extends tH{constructor(e){super(),this.isMeshNormalMaterial=!0,this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Y(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.flatShading=!1,this.setValues(e)}copy(e){return super.copy(e),this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.flatShading=e.flatShading,this}}class ag extends tH{constructor(e){super(),this.isMeshLambertMaterial=!0,this.type="MeshLambertMaterial",this.color=new tz(0xffffff),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new tz(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Y(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new tn,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}}class av extends tH{constructor(e){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=3200,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(e)}copy(e){return super.copy(e),this.depthPacking=e.depthPacking,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this}}class a_ extends tH{constructor(e){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(e)}copy(e){return super.copy(e),this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this}}class ay extends tH{constructor(e){super(),this.isMeshMatcapMaterial=!0,this.defines={MATCAP:""},this.type="MeshMatcapMaterial",this.color=new tz(0xffffff),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Y(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.defines={MATCAP:""},this.color.copy(e.color),this.matcap=e.matcap,this.map=e.map,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.alphaMap=e.alphaMap,this.flatShading=e.flatShading,this.fog=e.fog,this}}class ax extends iB{constructor(e){super(),this.isLineDashedMaterial=!0,this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(e)}copy(e){return super.copy(e),this.scale=e.scale,this.dashSize=e.dashSize,this.gapSize=e.gapSize,this}}function ab(e,t,n){return e&&(n||e.constructor!==t)?"number"==typeof t.BYTES_PER_ELEMENT?new t(e):Array.prototype.slice.call(e):e}function aS(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function aM(e){let t=e.length,n=Array(t);for(let e=0;e!==t;++e)n[e]=e;return n.sort(function(t,n){return e[t]-e[n]}),n}function aT(e,t,n){let i=e.length,r=new e.constructor(i);for(let a=0,s=0;s!==i;++a){let i=n[a]*t;for(let n=0;n!==t;++n)r[s++]=e[i+n]}return r}function aw(e,t,n,i){let r=1,a=e[0];for(;void 0!==a&&void 0===a[i];)a=e[r++];if(void 0===a)return;let s=a[i];if(void 0!==s)if(Array.isArray(s))do void 0!==(s=a[i])&&(t.push(a.time),n.push.apply(n,s)),a=e[r++];while(void 0!==a)else if(void 0!==s.toArray)do void 0!==(s=a[i])&&(t.push(a.time),s.toArray(n,n.length)),a=e[r++];while(void 0!==a)else do void 0!==(s=a[i])&&(t.push(a.time),n.push(s)),a=e[r++];while(void 0!==a)}let aE={convertArray:ab,isTypedArray:aS,getKeyframeOrder:aM,sortedArray:aT,flattenJSON:aw,subclip:function(e,t,n,i,r=30){let a=e.clone();a.name=t;let s=[];for(let e=0;e=i)){l.push(t.times[e]);for(let n=0;na.tracks[e].times[0]&&(o=a.tracks[e].times[0]);for(let e=0;e=r.times[d]){let e=d*u+l,t=e+u-l;i=r.values.slice(e,t)}else{let e=r.createInterpolant(),t=l,n=u-l;e.evaluate(a),i=e.resultBuffer.slice(t,n)}"quaternion"===s&&new ew().fromArray(i).normalize().conjugate().toArray(i);let p=o.times.length;for(let e=0;e=r)){let s=t[1];e=(r=t[--n-1]))break i}a=n,n=0;break r}break n}for(;n>>1;et;)--a;if(++a,0!==r||a!==i){r>=a&&(r=(a=Math.max(a,1))-1);let e=this.getValueSize();this.times=n.slice(r,a),this.values=this.values.slice(r*e,a*e)}return this}validate(){let e=!0,t=this.getValueSize();t-Math.floor(t)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),e=!1);let n=this.times,i=this.values,r=n.length;0===r&&(console.error("THREE.KeyframeTrack: Track is empty.",this),e=!1);let a=null;for(let t=0;t!==r;t++){let i=n[t];if("number"==typeof i&&isNaN(i)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,t,i),e=!1;break}if(null!==a&&a>i){console.error("THREE.KeyframeTrack: Out of order keys.",this,t,i,a),e=!1;break}a=i}if(void 0!==i&&aS(i))for(let t=0,n=i.length;t!==n;++t){let n=i[t];if(isNaN(n)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,t,n),e=!1;break}}return e}optimize(){let e=this.times.slice(),t=this.values.slice(),n=this.getValueSize(),i=2302===this.getInterpolation(),r=e.length-1,a=1;for(let s=1;s0){e[a]=e[r];for(let e=r*n,i=a*n,s=0;s!==n;++s)t[i+s]=t[e+s];++a}return a!==e.length?(this.times=e.slice(0,a),this.values=t.slice(0,a*n)):(this.times=e,this.values=t),this}clone(){let e=this.times.slice(),t=this.values.slice(),n=new this.constructor(this.name,e,t);return n.createInterpolant=this.createInterpolant,n}}aI.prototype.TimeBufferType=Float32Array,aI.prototype.ValueBufferType=Float32Array,aI.prototype.DefaultInterpolation=2301;class aL extends aI{constructor(e,t,n){super(e,t,n)}}aL.prototype.ValueTypeName="bool",aL.prototype.ValueBufferType=Array,aL.prototype.DefaultInterpolation=2300,aL.prototype.InterpolantFactoryMethodLinear=void 0,aL.prototype.InterpolantFactoryMethodSmooth=void 0;class aN extends aI{}aN.prototype.ValueTypeName="color";class aU extends aI{}aU.prototype.ValueTypeName="number";class aD extends aA{constructor(e,t,n,i){super(e,t,n,i)}interpolate_(e,t,n,i){let r=this.resultBuffer,a=this.sampleValues,s=this.valueSize,o=(n-t)/(i-t),l=e*s;for(let e=l+s;l!==e;l+=4)ew.slerpFlat(r,0,a,l-s,a,l,o);return r}}class aO extends aI{InterpolantFactoryMethodLinear(e){return new aD(this.times,this.values,this.getValueSize(),e)}}aO.prototype.ValueTypeName="quaternion",aO.prototype.InterpolantFactoryMethodSmooth=void 0;class aF extends aI{constructor(e,t,n){super(e,t,n)}}aF.prototype.ValueTypeName="string",aF.prototype.ValueBufferType=Array,aF.prototype.DefaultInterpolation=2300,aF.prototype.InterpolantFactoryMethodLinear=void 0,aF.prototype.InterpolantFactoryMethodSmooth=void 0;class az extends aI{}az.prototype.ValueTypeName="vector";class aB{constructor(e="",t=-1,n=[],i=2500){this.name=e,this.tracks=n,this.duration=t,this.blendMode=i,this.uuid=H(),this.duration<0&&this.resetDuration()}static parse(e){let t=[],n=e.tracks,i=1/(e.fps||1);for(let e=0,r=n.length;e!==r;++e)t.push((function(e){if(void 0===e.type)throw Error("THREE.KeyframeTrack: track type undefined, can not parse");let t=function(e){switch(e.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return aU;case"vector":case"vector2":case"vector3":case"vector4":return az;case"color":return aN;case"quaternion":return aO;case"bool":case"boolean":return aL;case"string":return aF}throw Error("THREE.KeyframeTrack: Unsupported typeName: "+e)}(e.type);if(void 0===e.times){let t=[],n=[];aw(e.keys,t,n,"value"),e.times=t,e.values=n}return void 0!==t.parse?t.parse(e):new t(e.name,e.times,e.values,e.interpolation)})(n[e]).scale(i));let r=new this(e.name,e.duration,t,e.blendMode);return r.uuid=e.uuid,r}static toJSON(e){let t=[],n=e.tracks,i={name:e.name,duration:e.duration,tracks:t,uuid:e.uuid,blendMode:e.blendMode};for(let e=0,i=n.length;e!==i;++e)t.push(aI.toJSON(n[e]));return i}static CreateFromMorphTargetSequence(e,t,n,i){let r=t.length,a=[];for(let e=0;e1){let e=a[1],t=i[e];t||(i[e]=t=[]),t.push(n)}}let a=[];for(let e in i)a.push(this.CreateFromMorphTargetSequence(e,i[e],t,n));return a}static parseAnimation(e,t){if(!e)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;let n=function(e,t,n,i,r){if(0!==n.length){let a=[],s=[];aw(n,a,s,i),0!==a.length&&r.push(new e(t,a,s))}},i=[],r=e.name||"default",a=e.fps||30,s=e.blendMode,o=e.length||-1,l=e.hierarchy||[];for(let e=0;e{t&&t(r),this.manager.itemEnd(e)},0),r;if(void 0!==aW[e])return void aW[e].push({onLoad:t,onProgress:n,onError:i});aW[e]=[],aW[e].push({onLoad:t,onProgress:n,onError:i});let a=new Request(e,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin"}),s=this.mimeType,o=this.responseType;fetch(a).then(t=>{if(200===t.status||0===t.status){if(0===t.status&&console.warn("THREE.FileLoader: HTTP Status 0 received."),"u"{if(i)e.close();else{let i=new ProgressEvent("progress",{lengthComputable:s,loaded:o+=r.byteLength,total:a});for(let e=0,t=n.length;e{e.error(t)})}()}}))}throw new aj(`fetch for "${t.url}" responded with ${t.status}: ${t.statusText}`,t)}).then(e=>{switch(o){case"arraybuffer":return e.arrayBuffer();case"blob":return e.blob();case"document":return e.text().then(e=>new DOMParser().parseFromString(e,s));case"json":return e.json();default:if(void 0===s)return e.text();{let t=/charset="?([^;"\s]*)"?/i.exec(s),n=new TextDecoder(t&&t[1]?t[1].toLowerCase():void 0);return e.arrayBuffer().then(e=>n.decode(e))}}}).then(t=>{ak.add(e,t);let n=aW[e];delete aW[e];for(let e=0,i=n.length;e{let n=aW[e];if(void 0===n)throw this.manager.itemError(e),t;delete aW[e];for(let e=0,i=n.length;e{this.manager.itemEnd(e)}),this.manager.itemStart(e)}setResponseType(e){return this.responseType=e,this}setMimeType(e){return this.mimeType=e,this}}class aq extends aG{constructor(e){super(e)}load(e,t,n,i){let r=this,a=new aX(this.manager);a.setPath(this.path),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,function(n){try{t(r.parse(JSON.parse(n)))}catch(t){i?i(t):console.error(t),r.manager.itemError(e)}},n,i)}parse(e){let t=[];for(let n=0;n0:i.vertexColors=e.vertexColors),void 0!==e.uniforms)for(let t in e.uniforms){let r=e.uniforms[t];switch(i.uniforms[t]={},r.type){case"t":i.uniforms[t].value=n(r.value);break;case"c":i.uniforms[t].value=new tz().setHex(r.value);break;case"v2":i.uniforms[t].value=new Y().fromArray(r.value);break;case"v3":i.uniforms[t].value=new eE().fromArray(r.value);break;case"v4":i.uniforms[t].value=new e_().fromArray(r.value);break;case"m3":i.uniforms[t].value=new Z().fromArray(r.value);break;case"m4":i.uniforms[t].value=new e2().fromArray(r.value);break;default:i.uniforms[t].value=r.value}}if(void 0!==e.defines&&(i.defines=e.defines),void 0!==e.vertexShader&&(i.vertexShader=e.vertexShader),void 0!==e.fragmentShader&&(i.fragmentShader=e.fragmentShader),void 0!==e.glslVersion&&(i.glslVersion=e.glslVersion),void 0!==e.extensions)for(let t in e.extensions)i.extensions[t]=e.extensions[t];if(void 0!==e.lights&&(i.lights=e.lights),void 0!==e.clipping&&(i.clipping=e.clipping),void 0!==e.size&&(i.size=e.size),void 0!==e.sizeAttenuation&&(i.sizeAttenuation=e.sizeAttenuation),void 0!==e.map&&(i.map=n(e.map)),void 0!==e.matcap&&(i.matcap=n(e.matcap)),void 0!==e.alphaMap&&(i.alphaMap=n(e.alphaMap)),void 0!==e.bumpMap&&(i.bumpMap=n(e.bumpMap)),void 0!==e.bumpScale&&(i.bumpScale=e.bumpScale),void 0!==e.normalMap&&(i.normalMap=n(e.normalMap)),void 0!==e.normalMapType&&(i.normalMapType=e.normalMapType),void 0!==e.normalScale){let t=e.normalScale;!1===Array.isArray(t)&&(t=[t,t]),i.normalScale=new Y().fromArray(t)}return void 0!==e.displacementMap&&(i.displacementMap=n(e.displacementMap)),void 0!==e.displacementScale&&(i.displacementScale=e.displacementScale),void 0!==e.displacementBias&&(i.displacementBias=e.displacementBias),void 0!==e.roughnessMap&&(i.roughnessMap=n(e.roughnessMap)),void 0!==e.metalnessMap&&(i.metalnessMap=n(e.metalnessMap)),void 0!==e.emissiveMap&&(i.emissiveMap=n(e.emissiveMap)),void 0!==e.emissiveIntensity&&(i.emissiveIntensity=e.emissiveIntensity),void 0!==e.specularMap&&(i.specularMap=n(e.specularMap)),void 0!==e.specularIntensityMap&&(i.specularIntensityMap=n(e.specularIntensityMap)),void 0!==e.specularColorMap&&(i.specularColorMap=n(e.specularColorMap)),void 0!==e.envMap&&(i.envMap=n(e.envMap)),void 0!==e.envMapRotation&&i.envMapRotation.fromArray(e.envMapRotation),void 0!==e.envMapIntensity&&(i.envMapIntensity=e.envMapIntensity),void 0!==e.reflectivity&&(i.reflectivity=e.reflectivity),void 0!==e.refractionRatio&&(i.refractionRatio=e.refractionRatio),void 0!==e.lightMap&&(i.lightMap=n(e.lightMap)),void 0!==e.lightMapIntensity&&(i.lightMapIntensity=e.lightMapIntensity),void 0!==e.aoMap&&(i.aoMap=n(e.aoMap)),void 0!==e.aoMapIntensity&&(i.aoMapIntensity=e.aoMapIntensity),void 0!==e.gradientMap&&(i.gradientMap=n(e.gradientMap)),void 0!==e.clearcoatMap&&(i.clearcoatMap=n(e.clearcoatMap)),void 0!==e.clearcoatRoughnessMap&&(i.clearcoatRoughnessMap=n(e.clearcoatRoughnessMap)),void 0!==e.clearcoatNormalMap&&(i.clearcoatNormalMap=n(e.clearcoatNormalMap)),void 0!==e.clearcoatNormalScale&&(i.clearcoatNormalScale=new Y().fromArray(e.clearcoatNormalScale)),void 0!==e.iridescenceMap&&(i.iridescenceMap=n(e.iridescenceMap)),void 0!==e.iridescenceThicknessMap&&(i.iridescenceThicknessMap=n(e.iridescenceThicknessMap)),void 0!==e.transmissionMap&&(i.transmissionMap=n(e.transmissionMap)),void 0!==e.thicknessMap&&(i.thicknessMap=n(e.thicknessMap)),void 0!==e.anisotropyMap&&(i.anisotropyMap=n(e.anisotropyMap)),void 0!==e.sheenColorMap&&(i.sheenColorMap=n(e.sheenColorMap)),void 0!==e.sheenRoughnessMap&&(i.sheenRoughnessMap=n(e.sheenRoughnessMap)),i}setTextures(e){return this.textures=e,this}createMaterialFromType(e){return su.createMaterialFromType(e)}static createMaterialFromType(e){return new({ShadowMaterial:au,SpriteMaterial:nO,RawShaderMaterial:ac,ShaderMaterial:nb,PointsMaterial:iQ,MeshPhysicalMaterial:ad,MeshStandardMaterial:ah,MeshPhongMaterial:ap,MeshToonMaterial:af,MeshNormalMaterial:am,MeshLambertMaterial:ag,MeshDepthMaterial:av,MeshDistanceMaterial:a_,MeshBasicMaterial:tV,MeshMatcapMaterial:ay,LineDashedMaterial:ax,LineBasicMaterial:iB,Material:tH})[e]}}class sc{static decodeText(e){if(console.warn("THREE.LoaderUtils: decodeText() has been deprecated with r165 and will be removed with r175. Use TextDecoder instead."),"u">typeof TextDecoder)return new TextDecoder().decode(e);let t="";for(let n=0,i=e.length;n0){(n=new aZ(new aH(t))).setCrossOrigin(this.crossOrigin);for(let t=0,n=e.length;t0){(t=new aZ(this.manager)).setCrossOrigin(this.crossOrigin);for(let t=0,n=e.length;t{let t=new eR;t.min.fromArray(e.boxMin),t.max.fromArray(e.boxMax);let n=new eq;return n.radius=e.sphereRadius,n.center.fromArray(e.sphereCenter),{boxInitialized:e.boxInitialized,box:t,sphereInitialized:e.sphereInitialized,sphere:n}}),a._maxInstanceCount=e.maxInstanceCount,a._maxVertexCount=e.maxVertexCount,a._maxIndexCount=e.maxIndexCount,a._geometryInitialized=e.geometryInitialized,a._geometryCount=e.geometryCount,a._matricesTexture=c(e.matricesTexture.uuid),void 0!==e.colorsTexture&&(a._colorsTexture=c(e.colorsTexture.uuid));break;case"LOD":a=new nQ;break;case"Line":a=new iq(l(e.geometry),u(e.material));break;case"LineLoop":a=new i$(l(e.geometry),u(e.material));break;case"LineSegments":a=new iK(l(e.geometry),u(e.material));break;case"PointCloud":case"Points":a=new i4(l(e.geometry),u(e.material));break;case"Sprite":a=new nZ(u(e.material));break;case"Group":a=new i6;break;case"Bone":a=new ie;break;default:a=new ty}if(a.uuid=e.uuid,void 0!==e.name&&(a.name=e.name),void 0!==e.matrix?(a.matrix.fromArray(e.matrix),void 0!==e.matrixAutoUpdate&&(a.matrixAutoUpdate=e.matrixAutoUpdate),a.matrixAutoUpdate&&a.matrix.decompose(a.position,a.quaternion,a.scale)):(void 0!==e.position&&a.position.fromArray(e.position),void 0!==e.rotation&&a.rotation.fromArray(e.rotation),void 0!==e.quaternion&&a.quaternion.fromArray(e.quaternion),void 0!==e.scale&&a.scale.fromArray(e.scale)),void 0!==e.up&&a.up.fromArray(e.up),void 0!==e.castShadow&&(a.castShadow=e.castShadow),void 0!==e.receiveShadow&&(a.receiveShadow=e.receiveShadow),e.shadow&&(void 0!==e.shadow.intensity&&(a.shadow.intensity=e.shadow.intensity),void 0!==e.shadow.bias&&(a.shadow.bias=e.shadow.bias),void 0!==e.shadow.normalBias&&(a.shadow.normalBias=e.shadow.normalBias),void 0!==e.shadow.radius&&(a.shadow.radius=e.shadow.radius),void 0!==e.shadow.mapSize&&a.shadow.mapSize.fromArray(e.shadow.mapSize),void 0!==e.shadow.camera&&(a.shadow.camera=this.parseObject(e.shadow.camera))),void 0!==e.visible&&(a.visible=e.visible),void 0!==e.frustumCulled&&(a.frustumCulled=e.frustumCulled),void 0!==e.renderOrder&&(a.renderOrder=e.renderOrder),void 0!==e.userData&&(a.userData=e.userData),void 0!==e.layers&&(a.layers.mask=e.layers),void 0!==e.children){let s=e.children;for(let e=0;e{t&&t(n),r.manager.itemEnd(e)}).catch(e=>{i&&i(e)}):(setTimeout(function(){t&&t(a),r.manager.itemEnd(e)},0),a);let s={};s.credentials="anonymous"===this.crossOrigin?"same-origin":"include",s.headers=this.requestHeader;let o=fetch(e,s).then(function(e){return e.blob()}).then(function(e){return createImageBitmap(e,Object.assign(r.options,{colorSpaceConversion:"none"}))}).then(function(n){return ak.add(e,n),t&&t(n),r.manager.itemEnd(e),n}).catch(function(t){i&&i(t),ak.remove(e),r.manager.itemError(e),r.manager.itemEnd(e)});ak.add(e,o),r.manager.itemStart(e)}}class s_{static getContext(){return void 0===i&&(i=new(window.AudioContext||window.webkitAudioContext)),i}static setContext(e){i=e}}class sy extends aG{constructor(e){super(e)}load(e,t,n,i){let r=this,a=new aX(this.manager);function s(t){i?i(t):console.error(t),r.manager.itemError(e)}a.setResponseType("arraybuffer"),a.setPath(this.path),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,function(e){try{let n=e.slice(0);s_.getContext().decodeAudioData(n,function(e){t(e)}).catch(s)}catch(e){s(e)}},n,i)}}let sx=new e2,sb=new e2,sS=new e2;class sM{constructor(){this.type="StereoCamera",this.aspect=1,this.eyeSep=.064,this.cameraL=new nE,this.cameraL.layers.enable(1),this.cameraL.matrixAutoUpdate=!1,this.cameraR=new nE,this.cameraR.layers.enable(2),this.cameraR.matrixAutoUpdate=!1,this._cache={focus:null,fov:null,aspect:null,near:null,far:null,zoom:null,eyeSep:null}}update(e){let t=this._cache;if(t.focus!==e.focus||t.fov!==e.fov||t.aspect!==e.aspect*this.aspect||t.near!==e.near||t.far!==e.far||t.zoom!==e.zoom||t.eyeSep!==this.eyeSep){let n,i;t.focus=e.focus,t.fov=e.fov,t.aspect=e.aspect*this.aspect,t.near=e.near,t.far=e.far,t.zoom=e.zoom,t.eyeSep=this.eyeSep,sS.copy(e.projectionMatrix);let r=t.eyeSep/2,a=r*t.near/t.focus,s=t.near*Math.tan(B*t.fov*.5)/t.zoom;sb.elements[12]=-r,sx.elements[12]=r,n=-s*t.aspect+a,i=s*t.aspect+a,sS.elements[0]=2*t.near/(i-n),sS.elements[8]=(i+n)/(i-n),this.cameraL.projectionMatrix.copy(sS),n=-s*t.aspect-a,i=s*t.aspect-a,sS.elements[0]=2*t.near/(i-n),sS.elements[8]=(i+n)/(i-n),this.cameraR.projectionMatrix.copy(sS)}this.cameraL.matrixWorld.copy(e.matrixWorld).multiply(sb),this.cameraR.matrixWorld.copy(e.matrixWorld).multiply(sx)}}class sT extends nE{constructor(e=[]){super(),this.isArrayCamera=!0,this.cameras=e}}class sw{constructor(e=!0){this.autoStart=e,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}start(){this.startTime=sE(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0}stop(){this.getElapsedTime(),this.running=!1,this.autoStart=!1}getElapsedTime(){return this.getDelta(),this.elapsedTime}getDelta(){let e=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){let t=sE();e=(t-this.oldTime)/1e3,this.oldTime=t,this.elapsedTime+=e}return e}}function sE(){return performance.now()}let sA=new eE,sC=new ew,sR=new eE,sP=new eE;class sI extends ty{constructor(){super(),this.type="AudioListener",this.context=s_.getContext(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null,this.timeDelta=0,this._clock=new sw}getInput(){return this.gain}removeFilter(){return null!==this.filter&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null),this}getFilter(){return this.filter}setFilter(e){return null!==this.filter?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination),this.filter=e,this.gain.connect(this.filter),this.filter.connect(this.context.destination),this}getMasterVolume(){return this.gain.gain.value}setMasterVolume(e){return this.gain.gain.setTargetAtTime(e,this.context.currentTime,.01),this}updateMatrixWorld(e){super.updateMatrixWorld(e);let t=this.context.listener,n=this.up;if(this.timeDelta=this._clock.getDelta(),this.matrixWorld.decompose(sA,sC,sR),sP.set(0,0,-1).applyQuaternion(sC),t.positionX){let e=this.context.currentTime+this.timeDelta;t.positionX.linearRampToValueAtTime(sA.x,e),t.positionY.linearRampToValueAtTime(sA.y,e),t.positionZ.linearRampToValueAtTime(sA.z,e),t.forwardX.linearRampToValueAtTime(sP.x,e),t.forwardY.linearRampToValueAtTime(sP.y,e),t.forwardZ.linearRampToValueAtTime(sP.z,e),t.upX.linearRampToValueAtTime(n.x,e),t.upY.linearRampToValueAtTime(n.y,e),t.upZ.linearRampToValueAtTime(n.z,e)}else t.setPosition(sA.x,sA.y,sA.z),t.setOrientation(sP.x,sP.y,sP.z,n.x,n.y,n.z)}}class sL extends ty{constructor(e){super(),this.type="Audio",this.listener=e,this.context=e.context,this.gain=this.context.createGain(),this.gain.connect(e.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.source=null,this.sourceType="empty",this._startedAt=0,this._progress=0,this._connected=!1,this.filters=[]}getOutput(){return this.gain}setNodeSource(e){return this.hasPlaybackControl=!1,this.sourceType="audioNode",this.source=e,this.connect(),this}setMediaElementSource(e){return this.hasPlaybackControl=!1,this.sourceType="mediaNode",this.source=this.context.createMediaElementSource(e),this.connect(),this}setMediaStreamSource(e){return this.hasPlaybackControl=!1,this.sourceType="mediaStreamNode",this.source=this.context.createMediaStreamSource(e),this.connect(),this}setBuffer(e){return this.buffer=e,this.sourceType="buffer",this.autoplay&&this.play(),this}play(e=0){if(!0===this.isPlaying)return void console.warn("THREE.Audio: Audio is already playing.");if(!1===this.hasPlaybackControl)return void console.warn("THREE.Audio: this Audio has no playback control.");this._startedAt=this.context.currentTime+e;let t=this.context.createBufferSource();return t.buffer=this.buffer,t.loop=this.loop,t.loopStart=this.loopStart,t.loopEnd=this.loopEnd,t.onended=this.onEnded.bind(this),t.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=t,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){return!1===this.hasPlaybackControl?void console.warn("THREE.Audio: this Audio has no playback control."):(!0===this.isPlaying&&(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,!0===this.loop&&(this._progress=this._progress%(this.duration||this.buffer.duration)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this)}stop(e=0){return!1===this.hasPlaybackControl?void console.warn("THREE.Audio: this Audio has no playback control."):(this._progress=0,null!==this.source&&(this.source.stop(this.context.currentTime+e),this.source.onended=null),this.isPlaying=!1,this)}connect(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(let e=1,t=this.filters.length;e0){this.source.disconnect(this.filters[0]);for(let e=1,t=this.filters.length;e0&&this._mixBufferRegionAdditive(n,i,this._addIndex*t,1,t);for(let e=t,r=t+t;e!==r;++e)if(n[e]!==n[e+t]){s.setValue(n,i);break}}saveOriginalState(){let e=this.binding,t=this.buffer,n=this.valueSize,i=n*this._origIndex;e.getValue(t,i);for(let e=n;e!==i;++e)t[e]=t[i+e%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){let e=3*this.valueSize;this.binding.setValue(this.buffer,e)}_setAdditiveIdentityNumeric(){let e=this._addIndex*this.valueSize,t=e+this.valueSize;for(let n=e;n=.5)for(let i=0;i!==r;++i)e[t+i]=e[n+i]}_slerp(e,t,n,i){ew.slerpFlat(e,t,e,t,e,n,i)}_slerpAdditive(e,t,n,i,r){let a=this._workIndex*r;ew.multiplyQuaternionsFlat(e,a,e,t,e,n),ew.slerpFlat(e,t,e,t,e,a,i)}_lerp(e,t,n,i,r){let a=1-i;for(let s=0;s!==r;++s){let r=t+s;e[r]=e[r]*a+e[n+s]*i}}_lerpAdditive(e,t,n,i,r){for(let a=0;a!==r;++a){let r=t+a;e[r]=e[r]+e[n+a]*i}}}let sk="\\[\\]\\.:\\/",sH=RegExp("["+sk+"]","g"),sV="[^"+sk+"]",sG="[^"+sk.replace("\\.","")+"]",sW=RegExp("^"+/((?:WC+[\/:])*)/.source.replace("WC",sV)+/(WCOD+)?/.source.replace("WCOD",sG)+/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",sV)+/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",sV)+"$"),sj=["material","materials","bones","map"];class sX{constructor(e,t,n){this.path=t,this.parsedPath=n||sX.parseTrackName(t),this.node=sX.findNode(e,this.parsedPath.nodeName),this.rootNode=e,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(e,t,n){return e&&e.isAnimationObjectGroup?new sX.Composite(e,t,n):new sX(e,t,n)}static sanitizeNodeName(e){return e.replace(/\s/g,"_").replace(sH,"")}static parseTrackName(e){let t=sW.exec(e);if(null===t)throw Error("PropertyBinding: Cannot parse trackName: "+e);let n={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},i=n.nodeName&&n.nodeName.lastIndexOf(".");if(void 0!==i&&-1!==i){let e=n.nodeName.substring(i+1);-1!==sj.indexOf(e)&&(n.nodeName=n.nodeName.substring(0,i),n.objectName=e)}if(null===n.propertyName||0===n.propertyName.length)throw Error("PropertyBinding: can not parse propertyName from trackName: "+e);return n}static findNode(e,t){if(void 0===t||""===t||"."===t||-1===t||t===e.name||t===e.uuid)return e;if(e.skeleton){let n=e.skeleton.getBoneByName(t);if(void 0!==n)return n}if(e.children){let n=function(e){for(let i=0;i=r){let a=r++,u=e[a];t[u.uuid]=l,e[l]=u,t[o]=a,e[a]=s;for(let e=0;e!==i;++e){let t=n[e],i=t[a],r=t[l];t[l]=i,t[a]=r}}}this.nCachedObjects_=r}uncache(){let e=this._objects,t=this._indicesByUUID,n=this._bindings,i=n.length,r=this.nCachedObjects_,a=e.length;for(let s=0,o=arguments.length;s!==o;++s){let o=arguments[s],l=o.uuid,u=t[l];if(void 0!==u)if(delete t[l],u0&&(t[s.uuid]=u),e[u]=s,e.pop();for(let e=0;e!==i;++e){let t=n[e];t[u]=t[r],t.pop()}}}this.nCachedObjects_=r}subscribe_(e,t){let n=this._bindingsIndicesByPath,i=n[e],r=this._bindings;if(void 0!==i)return r[i];let a=this._paths,s=this._parsedPaths,o=this._objects,l=o.length,u=this.nCachedObjects_,c=Array(l);i=r.length,n[e]=i,a.push(e),s.push(t),r.push(c);for(let n=u,i=o.length;n!==i;++n){let i=o[n];c[n]=new sX(i,e,t)}return c}unsubscribe_(e){let t=this._bindingsIndicesByPath,n=t[e];if(void 0!==n){let i=this._paths,r=this._parsedPaths,a=this._bindings,s=a.length-1,o=a[s];t[e[s]]=n,a[n]=o,a.pop(),r[n]=r[s],r.pop(),i[n]=i[s],i.pop()}}}class sY{constructor(e,t,n=null,i=t.blendMode){this._mixer=e,this._clip=t,this._localRoot=n,this.blendMode=i;const r=t.tracks,a=r.length,s=Array(a),o={endingStart:2400,endingEnd:2400};for(let e=0;e!==a;++e){const t=r[e].createInterpolant(null);s[e]=t,t.settings=o}this._interpolantSettings=o,this._interpolants=s,this._propertyBindings=Array(a),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=2201,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(e){return this._startTime=e,this}setLoop(e,t){return this.loop=e,this.repetitions=t,this}setEffectiveWeight(e){return this.weight=e,this._effectiveWeight=this.enabled?e:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(e){return this._scheduleFading(e,0,1)}fadeOut(e){return this._scheduleFading(e,1,0)}crossFadeFrom(e,t,n){if(e.fadeOut(t),this.fadeIn(t),n){let n=this._clip.duration,i=e._clip.duration;e.warp(1,i/n,t),this.warp(n/i,1,t)}return this}crossFadeTo(e,t,n){return e.crossFadeFrom(this,t,n)}stopFading(){let e=this._weightInterpolant;return null!==e&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(e)),this}setEffectiveTimeScale(e){return this.timeScale=e,this._effectiveTimeScale=this.paused?0:e,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(e){return this.timeScale=this._clip.duration/e,this.stopWarping()}syncWith(e){return this.time=e.time,this.timeScale=e.timeScale,this.stopWarping()}halt(e){return this.warp(this._effectiveTimeScale,0,e)}warp(e,t,n){let i=this._mixer,r=i.time,a=this.timeScale,s=this._timeScaleInterpolant;null===s&&(s=i._lendControlInterpolant(),this._timeScaleInterpolant=s);let o=s.parameterPositions,l=s.sampleValues;return o[0]=r,o[1]=r+n,l[0]=e/a,l[1]=t/a,this}stopWarping(){let e=this._timeScaleInterpolant;return null!==e&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(e)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(e,t,n,i){if(!this.enabled)return void this._updateWeight(e);let r=this._startTime;if(null!==r){let i=(e-r)*n;i<0||0===n?t=0:(this._startTime=null,t=n*i)}t*=this._updateTimeScale(e);let a=this._updateTime(t),s=this._updateWeight(e);if(s>0){let e=this._interpolants,t=this._propertyBindings;if(2501===this.blendMode)for(let n=0,i=e.length;n!==i;++n)e[n].evaluate(a),t[n].accumulateAdditive(s);else for(let n=0,r=e.length;n!==r;++n)e[n].evaluate(a),t[n].accumulate(i,s)}}_updateWeight(e){let t=0;if(this.enabled){t=this.weight;let n=this._weightInterpolant;if(null!==n){let i=n.evaluate(e)[0];t*=i,e>n.parameterPositions[1]&&(this.stopFading(),0===i&&(this.enabled=!1))}}return this._effectiveWeight=t,t}_updateTimeScale(e){let t=0;if(!this.paused){t=this.timeScale;let n=this._timeScaleInterpolant;null!==n&&(t*=n.evaluate(e)[0],e>n.parameterPositions[1]&&(this.stopWarping(),0===t?this.paused=!0:this.timeScale=t))}return this._effectiveTimeScale=t,t}_updateTime(e){let t=this._clip.duration,n=this.loop,i=this.time+e,r=this._loopCount,a=2202===n;if(0===e)return -1===r?i:a&&(1&r)==1?t-i:i;if(2200===n){-1===r&&(this._loopCount=0,this._setEndings(!0,!0,!1));s:{if(i>=t)i=t;else if(i<0)i=0;else{this.time=i;break s}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:e<0?-1:1})}}else{if(-1===r&&(e>=0?(r=0,this._setEndings(!0,0===this.repetitions,a)):this._setEndings(0===this.repetitions,!0,a)),i>=t||i<0){let n=Math.floor(i/t);i-=t*n,r+=Math.abs(n);let s=this.repetitions-r;if(s<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,i=e>0?t:0,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:e>0?1:-1});else{if(1===s){let t=e<0;this._setEndings(t,!t,a)}else this._setEndings(!1,!1,a);this._loopCount=r,this.time=i,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:n})}}else this.time=i;if(a&&(1&r)==1)return t-i}return i}_setEndings(e,t,n){let i=this._interpolantSettings;n?(i.endingStart=2401,i.endingEnd=2401):(e?i.endingStart=this.zeroSlopeAtStart?2401:2400:i.endingStart=2402,t?i.endingEnd=this.zeroSlopeAtEnd?2401:2400:i.endingEnd=2402)}_scheduleFading(e,t,n){let i=this._mixer,r=i.time,a=this._weightInterpolant;null===a&&(a=i._lendControlInterpolant(),this._weightInterpolant=a);let s=a.parameterPositions,o=a.sampleValues;return s[0]=r,o[0]=t,s[1]=r+e,o[1]=n,this}}let sZ=new Float32Array(1);class sJ extends O{constructor(e){super(),this._root=e,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(e,t){let n=e._localRoot||this._root,i=e._clip.tracks,r=i.length,a=e._propertyBindings,s=e._interpolants,o=n.uuid,l=this._bindingsByRootAndName,u=l[o];void 0===u&&(u={},l[o]=u);for(let e=0;e!==r;++e){let r=i[e],l=r.name,c=u[l];if(void 0!==c)++c.referenceCount,a[e]=c;else{if(void 0!==(c=a[e])){null===c._cacheIndex&&(++c.referenceCount,this._addInactiveBinding(c,o,l));continue}let i=t&&t._propertyBindings[e].binding.parsedPath;c=new sB(sX.create(n,l,i),r.ValueTypeName,r.getValueSize()),++c.referenceCount,this._addInactiveBinding(c,o,l),a[e]=c}s[e].resultBuffer=c.buffer}}_activateAction(e){if(!this._isActiveAction(e)){if(null===e._cacheIndex){let t=(e._localRoot||this._root).uuid,n=e._clip.uuid,i=this._actionsByClip[n];this._bindAction(e,i&&i.knownActions[0]),this._addInactiveAction(e,n,t)}let t=e._propertyBindings;for(let e=0,n=t.length;e!==n;++e){let n=t[e];0==n.useCount++&&(this._lendBinding(n),n.saveOriginalState())}this._lendAction(e)}}_deactivateAction(e){if(this._isActiveAction(e)){let t=e._propertyBindings;for(let e=0,n=t.length;e!==n;++e){let n=t[e];0==--n.useCount&&(n.restoreOriginalState(),this._takeBackBinding(n))}this._takeBackAction(e)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;let e=this;this.stats={actions:{get total(){return e._actions.length},get inUse(){return e._nActiveActions}},bindings:{get total(){return e._bindings.length},get inUse(){return e._nActiveBindings}},controlInterpolants:{get total(){return e._controlInterpolants.length},get inUse(){return e._nActiveControlInterpolants}}}}_isActiveAction(e){let t=e._cacheIndex;return null!==t&&t=0;--n)e[n].stop();return this}update(e){e*=this.timeScale;let t=this._actions,n=this._nActiveActions,i=this.time+=e,r=Math.sign(e),a=this._accuIndex^=1;for(let s=0;s!==n;++s)t[s]._update(i,e,r,a);let s=this._bindings,o=this._nActiveBindings;for(let e=0;e!==o;++e)s[e].apply(a);return this}setTime(e){this.time=0;for(let e=0;e=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,s7).distanceTo(e)}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}}let ot=new eE,on=new eE;class oi{constructor(e=new eE,t=new eE){this.start=e,this.end=t}set(e,t){return this.start.copy(e),this.end.copy(t),this}copy(e){return this.start.copy(e.start),this.end.copy(e.end),this}getCenter(e){return e.addVectors(this.start,this.end).multiplyScalar(.5)}delta(e){return e.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(e,t){return this.delta(t).multiplyScalar(e).add(this.start)}closestPointToPointParameter(e,t){ot.subVectors(e,this.start),on.subVectors(this.end,this.start);let n=on.dot(on),i=on.dot(ot)/n;return t&&(i=V(i,0,1)),i}closestPointToPoint(e,t,n){let i=this.closestPointToPointParameter(e,t);return this.delta(n).multiplyScalar(i).add(this.start)}applyMatrix4(e){return this.start.applyMatrix4(e),this.end.applyMatrix4(e),this}equals(e){return e.start.equals(this.start)&&e.end.equals(this.end)}clone(){return new this.constructor().copy(this)}}let or=new eE;class oa extends ty{constructor(e,t){super(),this.light=e,this.matrixAutoUpdate=!1,this.color=t,this.type="SpotLightHelper";const n=new nn,i=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1];for(let e=0,t=1;e<32;e++,t++){const n=e/32*Math.PI*2,r=t/32*Math.PI*2;i.push(Math.cos(n),Math.sin(n),1,Math.cos(r),Math.sin(r),1)}n.setAttribute("position",new t4(i,3));const r=new iB({fog:!1,toneMapped:!1});this.cone=new iK(n,r),this.add(this.cone),this.update()}dispose(){this.cone.geometry.dispose(),this.cone.material.dispose()}update(){this.light.updateWorldMatrix(!0,!1),this.light.target.updateWorldMatrix(!0,!1),this.parent?(this.parent.updateWorldMatrix(!0),this.matrix.copy(this.parent.matrixWorld).invert().multiply(this.light.matrixWorld)):this.matrix.copy(this.light.matrixWorld),this.matrixWorld.copy(this.light.matrixWorld);let e=this.light.distance?this.light.distance:1e3,t=e*Math.tan(this.light.angle);this.cone.scale.set(t,t,e),or.setFromMatrixPosition(this.light.target.matrixWorld),this.cone.lookAt(or),void 0!==this.color?this.cone.material.color.set(this.color):this.cone.material.color.copy(this.light.color)}}let os=new eE,oo=new e2,ol=new e2;class ou extends iK{constructor(e){const t=function e(t){let n=[];!0===t.isBone&&n.push(t);for(let i=0;i1)for(let n=0;n.99999)this.quaternion.set(0,0,0,1);else if(e.y<-.99999)this.quaternion.set(1,0,0,0);else{oR.set(e.z,0,-e.x).normalize();let t=Math.acos(e.y);this.quaternion.setFromAxisAngle(oR,t)}}setLength(e,t=.2*e,n=.2*t){this.line.scale.set(1,Math.max(1e-4,e-t),1),this.line.updateMatrix(),this.cone.scale.set(n,t,n),this.cone.position.y=e,this.cone.updateMatrix()}setColor(e){this.line.material.color.set(e),this.cone.material.color.set(e)}copy(e){return super.copy(e,!1),this.line.copy(e.line),this.cone.copy(e.cone),this}dispose(){this.line.geometry.dispose(),this.line.material.dispose(),this.cone.geometry.dispose(),this.cone.material.dispose()}}class oI extends iK{constructor(e=1){const t=new nn;t.setAttribute("position",new t4([0,0,0,e,0,0,0,0,0,0,e,0,0,0,0,0,0,e],3)),t.setAttribute("color",new t4([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],3)),super(t,new iB({vertexColors:!0,toneMapped:!1})),this.type="AxesHelper"}setColors(e,t,n){let i=new tz,r=this.geometry.attributes.color.array;return i.set(e),i.toArray(r,0),i.toArray(r,3),i.set(t),i.toArray(r,6),i.toArray(r,9),i.set(n),i.toArray(r,12),i.toArray(r,15),this.geometry.attributes.color.needsUpdate=!0,this}dispose(){this.geometry.dispose(),this.material.dispose()}}class oL{constructor(){this.type="ShapePath",this.color=new tz,this.subPaths=[],this.currentPath=null}moveTo(e,t){return this.currentPath=new rw,this.subPaths.push(this.currentPath),this.currentPath.moveTo(e,t),this}lineTo(e,t){return this.currentPath.lineTo(e,t),this}quadraticCurveTo(e,t,n,i){return this.currentPath.quadraticCurveTo(e,t,n,i),this}bezierCurveTo(e,t,n,i,r,a){return this.currentPath.bezierCurveTo(e,t,n,i,r,a),this}splineThru(e){return this.currentPath.splineThru(e),this}toShapes(e){let t,n,i,r,a,s=r1.isClockWise,o=this.subPaths;if(0===o.length)return[];let l=[];if(1===o.length)return n=o[0],(i=new rz).curves=n.curves,l.push(i),l;let u=!s(o[0].getPoints());u=e?!u:u;let c=[],h=[],d=[],p=0;h[0]=void 0,d[p]=[];for(let i=0,a=o.length;i1){let e=!1,t=0;for(let e=0,t=h.length;eNumber.EPSILON){if(l<0&&(n=t[a],o=-o,s=t[r],l=-l),e.ys.y)continue;if(e.y===n.y){if(e.x===n.x)return!0}else{let t=l*(e.x-n.x)-o*(e.y-n.y);if(0===t)return!0;if(t<0)continue;i=!i}}else{if(e.y!==n.y)continue;if(s.x<=e.x&&e.x<=n.x||n.x<=e.x&&e.x<=s.x)return!0}}return i})(a.p,h[i].p)&&(n!==i&&t++,s?(s=!1,c[i].push(a)):e=!0);s&&c[n].push(a)}}t>0&&!1===e&&(d=c)}for(let e=0,t=h.length;et?(e.repeat.x=1,e.repeat.y=n/t,e.offset.x=0,e.offset.y=(1-e.repeat.y)/2):(e.repeat.x=t/n,e.repeat.y=1,e.offset.x=(1-e.repeat.x)/2,e.offset.y=0),e},cover:function(e,t){let n=e.image&&e.image.width?e.image.width/e.image.height:1;return n>t?(e.repeat.x=t/n,e.repeat.y=1,e.offset.x=(1-e.repeat.x)/2,e.offset.y=0):(e.repeat.x=1,e.repeat.y=n/t,e.offset.x=0,e.offset.y=(1-e.repeat.y)/2),e},fill:function(e){return e.repeat.x=1,e.repeat.y=1,e.offset.x=0,e.offset.y=0,e},getByteLength:oU};class oO extends ex{constructor(e=1,t=1,n=1,i={}){console.warn('THREE.WebGLMultipleRenderTargets has been deprecated and will be removed in r172. Use THREE.WebGLRenderTarget and set the "count" parameter to enable MRT.'),super(e,t,{...i,count:n}),this.isWebGLMultipleRenderTargets=!0}get texture(){return this.textures}}function oF(){let e=null,t=!1,n=null,i=null;function r(t,a){n(t,a),i=e.requestAnimationFrame(r)}return{start:function(){!0===t||null!==n&&(i=e.requestAnimationFrame(r),t=!0)},stop:function(){e.cancelAnimationFrame(i),t=!1},setAnimationLoop:function(e){n=e},setContext:function(t){e=t}}}function oz(e){let t=new WeakMap;return{get:function(e){return e.isInterleavedBufferAttribute&&(e=e.data),t.get(e)},remove:function(n){n.isInterleavedBufferAttribute&&(n=n.data);let i=t.get(n);i&&(e.deleteBuffer(i.buffer),t.delete(n))},update:function(n,i){if(n.isInterleavedBufferAttribute&&(n=n.data),n.isGLBufferAttribute){let e=t.get(n);(!e||e.versione.start-t.start);let t=0;for(let e=1;etypeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:"171"}})),"u">typeof window&&(window.__THREE__?console.warn("WARNING: Multiple instances of Three.js being imported."):window.__THREE__="171"),e.s(["ACESFilmicToneMapping",0,4,"AddEquation",0,100,"AddOperation",0,2,"AdditiveAnimationBlendMode",0,2501,"AdditiveBlending",0,2,"AgXToneMapping",0,6,"AlphaFormat",0,1021,"AlwaysCompare",0,519,"AlwaysDepth",0,1,"AlwaysStencilFunc",0,519,"AmbientLight",0,sa,"AnimationAction",0,sY,"AnimationClip",0,aB,"AnimationLoader",0,aq,"AnimationMixer",0,sJ,"AnimationObjectGroup",0,sq,"AnimationUtils",0,aE,"ArcCurve",0,rs,"ArrayCamera",0,sT,"ArrowHelper",0,oP,"AttachedBindMode",0,R,"Audio",0,sL,"AudioAnalyser",0,sz,"AudioContext",0,s_,"AudioListener",0,sI,"AudioLoader",0,sy,"AxesHelper",0,oI,"BackSide",0,1,"BasicDepthPacking",0,3200,"BasicShadowMap",0,0,"BatchedMesh",0,iz,"Bone",0,ie,"BooleanKeyframeTrack",0,aL,"Box2",0,oe,"Box3",0,eR,"Box3Helper",0,oA,"BoxGeometry",0,ng,"BoxHelper",0,oE,"BufferAttribute",0,tZ,"BufferGeometry",0,nn,"BufferGeometryLoader",0,sd,"ByteType",0,1010,"Cache",0,ak,"Camera",0,nS,"CameraHelper",0,oM,"CanvasTexture",0,rn,"CapsuleGeometry",0,rA,"CatmullRomCurve3",0,rd,"CineonToneMapping",0,3,"CircleGeometry",0,rC,"ClampToEdgeWrapping",0,1001,"Clock",0,sw,"Color",0,tz,"ColorKeyframeTrack",0,aN,"ColorManagement",0,eu,"CompressedArrayTexture",0,re,"CompressedCubeTexture",0,rt,"CompressedTexture",0,i7,"CompressedTextureLoader",0,aY,"ConeGeometry",0,rP,"ConstantAlphaFactor",0,213,"ConstantColorFactor",0,211,"Controls",0,oN,"CubeCamera",0,nA,"CubeReflectionMapping",0,301,"CubeRefractionMapping",0,302,"CubeTexture",0,nC,"CubeTextureLoader",0,aJ,"CubeUVReflectionMapping",0,306,"CubicBezierCurve",0,rg,"CubicBezierCurve3",0,rv,"CubicInterpolant",0,aC,"CullFaceBack",0,1,"CullFaceFront",0,2,"CullFaceFrontBack",0,3,"CullFaceNone",0,0,"Curve",0,rr,"CurvePath",0,rT,"CustomBlending",0,5,"CustomToneMapping",0,5,"CylinderGeometry",0,rR,"Cylindrical",0,s8,"Data3DTexture",0,eM,"DataArrayTexture",0,eb,"DataTexture",0,it,"DataTextureLoader",0,aK,"DataUtils",0,tX,"DecrementStencilOp",0,7683,"DecrementWrapStencilOp",0,34056,"DefaultLoadingManager",0,aV,"DepthFormat",0,1026,"DepthStencilFormat",0,1027,"DepthTexture",0,ri,"DetachedBindMode",0,P,"DirectionalLight",0,sr,"DirectionalLightHelper",0,ox,"DiscreteInterpolant",0,aP,"DodecahedronGeometry",0,rL,"DoubleSide",0,2,"DstAlphaFactor",0,206,"DstColorFactor",0,208,"DynamicCopyUsage",0,35050,"DynamicDrawUsage",0,35048,"DynamicReadUsage",0,35049,"EdgesGeometry",0,rF,"EllipseCurve",0,ra,"EqualCompare",0,514,"EqualDepth",0,4,"EqualStencilFunc",0,514,"EquirectangularReflectionMapping",0,303,"EquirectangularRefractionMapping",0,304,"Euler",0,tn,"EventDispatcher",0,O,"ExtrudeGeometry",0,r4,"FileLoader",0,aX,"Float16BufferAttribute",0,t3,"Float32BufferAttribute",0,t4,"FloatType",0,1015,"Fog",0,nI,"FogExp2",0,nP,"FramebufferTexture",0,i9,"FrontSide",0,0,"Frustum",0,iS,"GLBufferAttribute",0,s1,"GLSL1",0,"100","GLSL3",0,D,"GreaterCompare",0,516,"GreaterDepth",0,6,"GreaterEqualCompare",0,518,"GreaterEqualDepth",0,5,"GreaterEqualStencilFunc",0,518,"GreaterStencilFunc",0,516,"GridHelper",0,om,"Group",0,i6,"HalfFloatType",0,1016,"HemisphereLight",0,a0,"HemisphereLightHelper",0,of,"IcosahedronGeometry",0,r6,"ImageBitmapLoader",0,sv,"ImageLoader",0,aZ,"ImageUtils",0,ed,"IncrementStencilOp",0,7682,"IncrementWrapStencilOp",0,34055,"InstancedBufferAttribute",0,is,"InstancedBufferGeometry",0,sh,"InstancedInterleavedBuffer",0,s0,"InstancedMesh",0,im,"Int16BufferAttribute",0,tQ,"Int32BufferAttribute",0,t1,"Int8BufferAttribute",0,tJ,"IntType",0,1013,"InterleavedBuffer",0,nN,"InterleavedBufferAttribute",0,nD,"Interpolant",0,aA,"InterpolateDiscrete",0,2300,"InterpolateLinear",0,2301,"InterpolateSmooth",0,2302,"InvertStencilOp",0,5386,"KeepStencilOp",0,7680,"KeyframeTrack",0,aI,"LOD",0,nQ,"LatheGeometry",0,rE,"Layers",0,ti,"LessCompare",0,513,"LessDepth",0,2,"LessEqualCompare",0,515,"LessEqualDepth",0,3,"LessEqualStencilFunc",0,515,"LessStencilFunc",0,513,"Light",0,aQ,"LightProbe",0,sl,"Line",0,iq,"Line3",0,oi,"LineBasicMaterial",0,iB,"LineCurve",0,r_,"LineCurve3",0,ry,"LineDashedMaterial",0,ax,"LineLoop",0,i$,"LineSegments",0,iK,"LinearFilter",0,1006,"LinearInterpolant",0,aR,"LinearMipMapLinearFilter",0,1008,"LinearMipMapNearestFilter",0,1007,"LinearMipmapLinearFilter",0,1008,"LinearMipmapNearestFilter",0,1007,"LinearSRGBColorSpace",0,L,"LinearToneMapping",0,1,"LinearTransfer",0,N,"Loader",0,aG,"LoaderUtils",0,sc,"LoadingManager",0,aH,"LoopOnce",0,2200,"LoopPingPong",0,2202,"LoopRepeat",0,2201,"LuminanceAlphaFormat",0,1025,"LuminanceFormat",0,1024,"MOUSE",0,A,"Material",0,tH,"MaterialLoader",0,su,"MathUtils",0,q,"Matrix2",0,s9,"Matrix3",0,Z,"Matrix4",0,e2,"MaxEquation",0,104,"Mesh",0,nf,"MeshBasicMaterial",0,tV,"MeshDepthMaterial",0,av,"MeshDistanceMaterial",0,a_,"MeshLambertMaterial",0,ag,"MeshMatcapMaterial",0,ay,"MeshNormalMaterial",0,am,"MeshPhongMaterial",0,ap,"MeshPhysicalMaterial",0,ad,"MeshStandardMaterial",0,ah,"MeshToonMaterial",0,af,"MinEquation",0,103,"MirroredRepeatWrapping",0,1002,"MixOperation",0,1,"MultiplyBlending",0,4,"MultiplyOperation",0,0,"NearestFilter",0,1003,"NearestMipMapLinearFilter",0,1005,"NearestMipMapNearestFilter",0,1004,"NearestMipmapLinearFilter",0,1005,"NearestMipmapNearestFilter",0,1004,"NeutralToneMapping",0,7,"NeverCompare",0,512,"NeverDepth",0,0,"NeverStencilFunc",0,512,"NoBlending",0,0,"NoColorSpace",0,"","NoToneMapping",0,0,"NormalAnimationBlendMode",0,2500,"NormalBlending",0,1,"NotEqualCompare",0,517,"NotEqualDepth",0,7,"NotEqualStencilFunc",0,517,"NumberKeyframeTrack",0,aU,"Object3D",0,ty,"ObjectLoader",0,sp,"ObjectSpaceNormalMap",0,1,"OctahedronGeometry",0,r8,"OneFactor",0,201,"OneMinusConstantAlphaFactor",0,214,"OneMinusConstantColorFactor",0,212,"OneMinusDstAlphaFactor",0,207,"OneMinusDstColorFactor",0,209,"OneMinusSrcAlphaFactor",0,205,"OneMinusSrcColorFactor",0,203,"OrthographicCamera",0,sn,"PCFShadowMap",0,1,"PCFSoftShadowMap",0,2,"Path",0,rw,"PerspectiveCamera",0,nE,"Plane",0,iy,"PlaneGeometry",0,r9,"PlaneHelper",0,oC,"PointLight",0,st,"PointLightHelper",0,oc,"Points",0,i4,"PointsMaterial",0,iQ,"PolarGridHelper",0,og,"PolyhedronGeometry",0,rI,"PositionalAudio",0,sF,"PropertyBinding",0,sX,"PropertyMixer",0,sB,"QuadraticBezierCurve",0,rx,"QuadraticBezierCurve3",0,rb,"Quaternion",0,ew,"QuaternionKeyframeTrack",0,aO,"QuaternionLinearInterpolant",0,aD,"RAD2DEG",0,k,"RED_GREEN_RGTC2_Format",0,36285,"RED_RGTC1_Format",0,36283,"REVISION",0,"171","RGBADepthPacking",0,3201,"RGBAFormat",0,1023,"RGBAIntegerFormat",0,1033,"RGBA_ASTC_10x10_Format",0,37819,"RGBA_ASTC_10x5_Format",0,37816,"RGBA_ASTC_10x6_Format",0,37817,"RGBA_ASTC_10x8_Format",0,37818,"RGBA_ASTC_12x10_Format",0,37820,"RGBA_ASTC_12x12_Format",0,37821,"RGBA_ASTC_4x4_Format",0,37808,"RGBA_ASTC_5x4_Format",0,37809,"RGBA_ASTC_5x5_Format",0,37810,"RGBA_ASTC_6x5_Format",0,37811,"RGBA_ASTC_6x6_Format",0,37812,"RGBA_ASTC_8x5_Format",0,37813,"RGBA_ASTC_8x6_Format",0,37814,"RGBA_ASTC_8x8_Format",0,37815,"RGBA_BPTC_Format",0,36492,"RGBA_ETC2_EAC_Format",0,37496,"RGBA_PVRTC_2BPPV1_Format",0,35843,"RGBA_PVRTC_4BPPV1_Format",0,35842,"RGBA_S3TC_DXT1_Format",0,33777,"RGBA_S3TC_DXT3_Format",0,33778,"RGBA_S3TC_DXT5_Format",0,33779,"RGBDepthPacking",0,3202,"RGBFormat",0,1022,"RGBIntegerFormat",0,1032,"RGB_BPTC_SIGNED_Format",0,36494,"RGB_BPTC_UNSIGNED_Format",0,36495,"RGB_ETC1_Format",0,36196,"RGB_ETC2_Format",0,37492,"RGB_PVRTC_2BPPV1_Format",0,35841,"RGB_PVRTC_4BPPV1_Format",0,35840,"RGB_S3TC_DXT1_Format",0,33776,"RGDepthPacking",0,3203,"RGFormat",0,1030,"RGIntegerFormat",0,1031,"RawShaderMaterial",0,ac,"Ray",0,e1,"Raycaster",0,s3,"RectAreaLight",0,ss,"RedFormat",0,1028,"RedIntegerFormat",0,1029,"ReinhardToneMapping",0,2,"RenderTarget",0,ey,"RepeatWrapping",0,1e3,"ReplaceStencilOp",0,7681,"ReverseSubtractEquation",0,102,"RingGeometry",0,r7,"SIGNED_RED_GREEN_RGTC2_Format",0,36286,"SIGNED_RED_RGTC1_Format",0,36284,"SRGBColorSpace",0,I,"SRGBTransfer",0,U,"Scene",0,nL,"ShaderMaterial",0,nb,"ShadowMaterial",0,au,"Shape",0,rz,"ShapeGeometry",0,ae,"ShapePath",0,oL,"ShapeUtils",0,r1,"ShortType",0,1011,"Skeleton",0,ia,"SkeletonHelper",0,ou,"SkinnedMesh",0,n7,"Source",0,ef,"Sphere",0,eq,"SphereGeometry",0,at,"Spherical",0,s6,"SphericalHarmonics3",0,so,"SplineCurve",0,rS,"SpotLight",0,a6,"SpotLightHelper",0,oa,"Sprite",0,nZ,"SpriteMaterial",0,nO,"SrcAlphaFactor",0,204,"SrcAlphaSaturateFactor",0,210,"SrcColorFactor",0,202,"StaticCopyUsage",0,35046,"StaticDrawUsage",0,35044,"StaticReadUsage",0,35045,"StereoCamera",0,sM,"StreamCopyUsage",0,35042,"StreamDrawUsage",0,35040,"StreamReadUsage",0,35041,"StringKeyframeTrack",0,aF,"SubtractEquation",0,101,"SubtractiveBlending",0,3,"TOUCH",0,C,"TangentSpaceNormalMap",0,0,"TetrahedronGeometry",0,an,"Texture",0,ev,"TextureLoader",0,a$,"TextureUtils",0,oD,"TorusGeometry",0,ai,"TorusKnotGeometry",0,ar,"Triangle",0,tN,"TriangleFanDrawMode",0,2,"TriangleStripDrawMode",0,1,"TrianglesDrawMode",0,0,"TubeGeometry",0,aa,"UVMapping",0,300,"Uint16BufferAttribute",0,t0,"Uint32BufferAttribute",0,t2,"Uint8BufferAttribute",0,tK,"Uint8ClampedBufferAttribute",0,t$,"Uniform",0,sK,"UniformsGroup",0,sQ,"UniformsUtils",0,nx,"UnsignedByteType",0,1009,"UnsignedInt248Type",0,1020,"UnsignedInt5999Type",0,35902,"UnsignedIntType",0,1014,"UnsignedShort4444Type",0,1017,"UnsignedShort5551Type",0,1018,"UnsignedShortType",0,1012,"VSMShadowMap",0,3,"Vector2",0,Y,"Vector3",0,eE,"Vector4",0,e_,"VectorKeyframeTrack",0,az,"VideoTexture",0,i8,"WebGL3DRenderTarget",0,eT,"WebGLArrayRenderTarget",0,eS,"WebGLCoordinateSystem",0,2e3,"WebGLCubeRenderTarget",0,nR,"WebGLMultipleRenderTargets",0,oO,"WebGLRenderTarget",0,ex,"WebGPUCoordinateSystem",0,2001,"WireframeGeometry",0,as,"WrapAroundEnding",0,2402,"ZeroCurvatureEnding",0,2400,"ZeroFactor",0,200,"ZeroSlopeEnding",0,2401,"ZeroStencilOp",0,0,"arrayNeedsUint32",0,K,"cloneUniforms",0,nv,"createCanvasElement",0,et,"createElementNS",0,ee,"getByteLength",0,oU,"getUnlitUniformColorSpace",0,ny,"mergeUniforms",0,n_,"probeAsync",0,er,"toNormalizedProjectionMatrix",0,ea,"toReversedProjectionMatrix",0,es,"warnOnce",0,ei],90072);let oB={alphahash_fragment:"#ifdef USE_ALPHAHASH\n if ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard;\n#endif",alphahash_pars_fragment:"#ifdef USE_ALPHAHASH\n const float ALPHA_HASH_SCALE = 0.05;\n float hash2D( vec2 value ) {\n return fract( 1.0e4 * sin( 17.0 * value.x + 0.1 * value.y ) * ( 0.1 + abs( sin( 13.0 * value.y + value.x ) ) ) );\n }\n float hash3D( vec3 value ) {\n return hash2D( vec2( hash2D( value.xy ), value.z ) );\n }\n float getAlphaHashThreshold( vec3 position ) {\n float maxDeriv = max(\n length( dFdx( position.xyz ) ),\n length( dFdy( position.xyz ) )\n );\n float pixScale = 1.0 / ( ALPHA_HASH_SCALE * maxDeriv );\n vec2 pixScales = vec2(\n exp2( floor( log2( pixScale ) ) ),\n exp2( ceil( log2( pixScale ) ) )\n );\n vec2 alpha = vec2(\n hash3D( floor( pixScales.x * position.xyz ) ),\n hash3D( floor( pixScales.y * position.xyz ) )\n );\n float lerpFactor = fract( log2( pixScale ) );\n float x = ( 1.0 - lerpFactor ) * alpha.x + lerpFactor * alpha.y;\n float a = min( lerpFactor, 1.0 - lerpFactor );\n vec3 cases = vec3(\n x * x / ( 2.0 * a * ( 1.0 - a ) ),\n ( x - 0.5 * a ) / ( 1.0 - a ),\n 1.0 - ( ( 1.0 - x ) * ( 1.0 - x ) / ( 2.0 * a * ( 1.0 - a ) ) )\n );\n float threshold = ( x < ( 1.0 - a ) )\n ? ( ( x < a ) ? cases.x : cases.y )\n : cases.z;\n return clamp( threshold , 1.0e-6, 1.0 );\n }\n#endif",alphamap_fragment:"#ifdef USE_ALPHAMAP\n diffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g;\n#endif",alphamap_pars_fragment:"#ifdef USE_ALPHAMAP\n uniform sampler2D alphaMap;\n#endif",alphatest_fragment:"#ifdef USE_ALPHATEST\n #ifdef ALPHA_TO_COVERAGE\n diffuseColor.a = smoothstep( alphaTest, alphaTest + fwidth( diffuseColor.a ), diffuseColor.a );\n if ( diffuseColor.a == 0.0 ) discard;\n #else\n if ( diffuseColor.a < alphaTest ) discard;\n #endif\n#endif",alphatest_pars_fragment:"#ifdef USE_ALPHATEST\n uniform float alphaTest;\n#endif",aomap_fragment:"#ifdef USE_AOMAP\n float ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;\n reflectedLight.indirectDiffuse *= ambientOcclusion;\n #if defined( USE_CLEARCOAT ) \n clearcoatSpecularIndirect *= ambientOcclusion;\n #endif\n #if defined( USE_SHEEN ) \n sheenSpecularIndirect *= ambientOcclusion;\n #endif\n #if defined( USE_ENVMAP ) && defined( STANDARD )\n float dotNV = saturate( dot( geometryNormal, geometryViewDir ) );\n reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\n #endif\n#endif",aomap_pars_fragment:"#ifdef USE_AOMAP\n uniform sampler2D aoMap;\n uniform float aoMapIntensity;\n#endif",batching_pars_vertex:"#ifdef USE_BATCHING\n #if ! defined( GL_ANGLE_multi_draw )\n #define gl_DrawID _gl_DrawID\n uniform int _gl_DrawID;\n #endif\n uniform highp sampler2D batchingTexture;\n uniform highp usampler2D batchingIdTexture;\n mat4 getBatchingMatrix( const in float i ) {\n int size = textureSize( batchingTexture, 0 ).x;\n int j = int( i ) * 4;\n int x = j % size;\n int y = j / size;\n vec4 v1 = texelFetch( batchingTexture, ivec2( x, y ), 0 );\n vec4 v2 = texelFetch( batchingTexture, ivec2( x + 1, y ), 0 );\n vec4 v3 = texelFetch( batchingTexture, ivec2( x + 2, y ), 0 );\n vec4 v4 = texelFetch( batchingTexture, ivec2( x + 3, y ), 0 );\n return mat4( v1, v2, v3, v4 );\n }\n float getIndirectIndex( const in int i ) {\n int size = textureSize( batchingIdTexture, 0 ).x;\n int x = i % size;\n int y = i / size;\n return float( texelFetch( batchingIdTexture, ivec2( x, y ), 0 ).r );\n }\n#endif\n#ifdef USE_BATCHING_COLOR\n uniform sampler2D batchingColorTexture;\n vec3 getBatchingColor( const in float i ) {\n int size = textureSize( batchingColorTexture, 0 ).x;\n int j = int( i );\n int x = j % size;\n int y = j / size;\n return texelFetch( batchingColorTexture, ivec2( x, y ), 0 ).rgb;\n }\n#endif",batching_vertex:"#ifdef USE_BATCHING\n mat4 batchingMatrix = getBatchingMatrix( getIndirectIndex( gl_DrawID ) );\n#endif",begin_vertex:"vec3 transformed = vec3( position );\n#ifdef USE_ALPHAHASH\n vPosition = vec3( position );\n#endif",beginnormal_vertex:"vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n vec3 objectTangent = vec3( tangent.xyz );\n#endif",bsdfs:"float G_BlinnPhong_Implicit( ) {\n return 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n return RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\n vec3 halfDir = normalize( lightDir + viewDir );\n float dotNH = saturate( dot( normal, halfDir ) );\n float dotVH = saturate( dot( viewDir, halfDir ) );\n vec3 F = F_Schlick( specularColor, 1.0, dotVH );\n float G = G_BlinnPhong_Implicit( );\n float D = D_BlinnPhong( shininess, dotNH );\n return F * ( G * D );\n} // validated",iridescence_fragment:"#ifdef USE_IRIDESCENCE\n const mat3 XYZ_TO_REC709 = mat3(\n 3.2404542, -0.9692660, 0.0556434,\n -1.5371385, 1.8760108, -0.2040259,\n -0.4985314, 0.0415560, 1.0572252\n );\n vec3 Fresnel0ToIor( vec3 fresnel0 ) {\n vec3 sqrtF0 = sqrt( fresnel0 );\n return ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\n }\n vec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\n return pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\n }\n float IorToFresnel0( float transmittedIor, float incidentIor ) {\n return pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\n }\n vec3 evalSensitivity( float OPD, vec3 shift ) {\n float phase = 2.0 * PI * OPD * 1.0e-9;\n vec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );\n vec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );\n vec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );\n vec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );\n xyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );\n xyz /= 1.0685e-7;\n vec3 rgb = XYZ_TO_REC709 * xyz;\n return rgb;\n }\n vec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\n vec3 I;\n float iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\n float sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\n float cosTheta2Sq = 1.0 - sinTheta2Sq;\n if ( cosTheta2Sq < 0.0 ) {\n return vec3( 1.0 );\n }\n float cosTheta2 = sqrt( cosTheta2Sq );\n float R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\n float R12 = F_Schlick( R0, 1.0, cosTheta1 );\n float T121 = 1.0 - R12;\n float phi12 = 0.0;\n if ( iridescenceIOR < outsideIOR ) phi12 = PI;\n float phi21 = PI - phi12;\n vec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) ); vec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );\n vec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );\n vec3 phi23 = vec3( 0.0 );\n if ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;\n if ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;\n if ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;\n float OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\n vec3 phi = vec3( phi21 ) + phi23;\n vec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );\n vec3 r123 = sqrt( R123 );\n vec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );\n vec3 C0 = R12 + Rs;\n I = C0;\n vec3 Cm = Rs - T121;\n for ( int m = 1; m <= 2; ++ m ) {\n Cm *= r123;\n vec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );\n I += Cm * Sm;\n }\n return max( I, vec3( 0.0 ) );\n }\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n uniform sampler2D bumpMap;\n uniform float bumpScale;\n vec2 dHdxy_fwd() {\n vec2 dSTdx = dFdx( vBumpMapUv );\n vec2 dSTdy = dFdy( vBumpMapUv );\n float Hll = bumpScale * texture2D( bumpMap, vBumpMapUv ).x;\n float dBx = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdx ).x - Hll;\n float dBy = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdy ).x - Hll;\n return vec2( dBx, dBy );\n }\n vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n vec3 vSigmaX = normalize( dFdx( surf_pos.xyz ) );\n vec3 vSigmaY = normalize( dFdy( surf_pos.xyz ) );\n vec3 vN = surf_norm;\n vec3 R1 = cross( vSigmaY, vN );\n vec3 R2 = cross( vN, vSigmaX );\n float fDet = dot( vSigmaX, R1 ) * faceDirection;\n vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n return normalize( abs( fDet ) * surf_norm - vGrad );\n }\n#endif",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n vec4 plane;\n #ifdef ALPHA_TO_COVERAGE\n float distanceToPlane, distanceGradient;\n float clipOpacity = 1.0;\n #pragma unroll_loop_start\n for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n plane = clippingPlanes[ i ];\n distanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n distanceGradient = fwidth( distanceToPlane ) / 2.0;\n clipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n if ( clipOpacity == 0.0 ) discard;\n }\n #pragma unroll_loop_end\n #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n float unionClipOpacity = 1.0;\n #pragma unroll_loop_start\n for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n plane = clippingPlanes[ i ];\n distanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n distanceGradient = fwidth( distanceToPlane ) / 2.0;\n unionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n }\n #pragma unroll_loop_end\n clipOpacity *= 1.0 - unionClipOpacity;\n #endif\n diffuseColor.a *= clipOpacity;\n if ( diffuseColor.a == 0.0 ) discard;\n #else\n #pragma unroll_loop_start\n for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n plane = clippingPlanes[ i ];\n if ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n }\n #pragma unroll_loop_end\n #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n bool clipped = true;\n #pragma unroll_loop_start\n for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n plane = clippingPlanes[ i ];\n clipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n }\n #pragma unroll_loop_end\n if ( clipped ) discard;\n #endif\n #endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n varying vec3 vClipPosition;\n uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n varying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n vClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#if defined( USE_COLOR_ALPHA )\n diffuseColor *= vColor;\n#elif defined( USE_COLOR )\n diffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#if defined( USE_COLOR_ALPHA )\n varying vec4 vColor;\n#elif defined( USE_COLOR )\n varying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR_ALPHA )\n varying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n varying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR_ALPHA )\n vColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n vColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n vColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n vColor.xyz *= instanceColor.xyz;\n#endif\n#ifdef USE_BATCHING_COLOR\n vec3 batchingColor = getBatchingColor( getIndirectIndex( gl_DrawID ) );\n vColor.xyz *= batchingColor.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nvec3 pow2( const in vec3 x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\nhighp float rand( const in vec2 uv ) {\n const highp float a = 12.9898, b = 78.233, c = 43758.5453;\n highp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n return fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n float precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n float precisionSafeLength( vec3 v ) {\n float maxComponent = max3( abs( v ) );\n return length( v / maxComponent ) * maxComponent;\n }\n#endif\nstruct IncidentLight {\n vec3 color;\n vec3 direction;\n bool visible;\n};\nstruct ReflectedLight {\n vec3 directDiffuse;\n vec3 directSpecular;\n vec3 indirectDiffuse;\n vec3 indirectSpecular;\n};\n#ifdef USE_ALPHAHASH\n varying vec3 vPosition;\n#endif\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nmat3 transposeMat3( const in mat3 m ) {\n mat3 tmp;\n tmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n tmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n tmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n return tmp;\n}\nbool isPerspectiveMatrix( mat4 m ) {\n return m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n float u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n float v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n return vec2( u, v );\n}\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\n return RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\n float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n}\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\n float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n} // validated",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n #define cubeUV_minMipLevel 4.0\n #define cubeUV_minTileSize 16.0\n float getFace( vec3 direction ) {\n vec3 absDirection = abs( direction );\n float face = - 1.0;\n if ( absDirection.x > absDirection.z ) {\n if ( absDirection.x > absDirection.y )\n face = direction.x > 0.0 ? 0.0 : 3.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n } else {\n if ( absDirection.z > absDirection.y )\n face = direction.z > 0.0 ? 2.0 : 5.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n }\n return face;\n }\n vec2 getUV( vec3 direction, float face ) {\n vec2 uv;\n if ( face == 0.0 ) {\n uv = vec2( direction.z, direction.y ) / abs( direction.x );\n } else if ( face == 1.0 ) {\n uv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n } else if ( face == 2.0 ) {\n uv = vec2( - direction.x, direction.y ) / abs( direction.z );\n } else if ( face == 3.0 ) {\n uv = vec2( - direction.z, direction.y ) / abs( direction.x );\n } else if ( face == 4.0 ) {\n uv = vec2( - direction.x, direction.z ) / abs( direction.y );\n } else {\n uv = vec2( direction.x, direction.y ) / abs( direction.z );\n }\n return 0.5 * ( uv + 1.0 );\n }\n vec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n float face = getFace( direction );\n float filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n mipInt = max( mipInt, cubeUV_minMipLevel );\n float faceSize = exp2( mipInt );\n highp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\n if ( face > 2.0 ) {\n uv.y += faceSize;\n face -= 3.0;\n }\n uv.x += face * faceSize;\n uv.x += filterInt * 3.0 * cubeUV_minTileSize;\n uv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\n uv.x *= CUBEUV_TEXEL_WIDTH;\n uv.y *= CUBEUV_TEXEL_HEIGHT;\n #ifdef texture2DGradEXT\n return texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\n #else\n return texture2D( envMap, uv ).rgb;\n #endif\n }\n #define cubeUV_r0 1.0\n #define cubeUV_m0 - 2.0\n #define cubeUV_r1 0.8\n #define cubeUV_m1 - 1.0\n #define cubeUV_r4 0.4\n #define cubeUV_m4 2.0\n #define cubeUV_r5 0.305\n #define cubeUV_m5 3.0\n #define cubeUV_r6 0.21\n #define cubeUV_m6 4.0\n float roughnessToMip( float roughness ) {\n float mip = 0.0;\n if ( roughness >= cubeUV_r1 ) {\n mip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\n } else if ( roughness >= cubeUV_r4 ) {\n mip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\n } else if ( roughness >= cubeUV_r5 ) {\n mip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\n } else if ( roughness >= cubeUV_r6 ) {\n mip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\n } else {\n mip = - 2.0 * log2( 1.16 * roughness ); }\n return mip;\n }\n vec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n float mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\n float mipF = fract( mip );\n float mipInt = floor( mip );\n vec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n if ( mipF == 0.0 ) {\n return vec4( color0, 1.0 );\n } else {\n vec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n return vec4( mix( color0, color1, mipF ), 1.0 );\n }\n }\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_TANGENT\n vec3 transformedTangent = objectTangent;\n#endif\n#ifdef USE_BATCHING\n mat3 bm = mat3( batchingMatrix );\n transformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) );\n transformedNormal = bm * transformedNormal;\n #ifdef USE_TANGENT\n transformedTangent = bm * transformedTangent;\n #endif\n#endif\n#ifdef USE_INSTANCING\n mat3 im = mat3( instanceMatrix );\n transformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) );\n transformedNormal = im * transformedNormal;\n #ifdef USE_TANGENT\n transformedTangent = im * transformedTangent;\n #endif\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n transformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n transformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz;\n #ifdef FLIP_SIDED\n transformedTangent = - transformedTangent;\n #endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n uniform sampler2D displacementMap;\n uniform float displacementScale;\n uniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n vec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );\n #ifdef DECODE_VIDEO_TEXTURE_EMISSIVE\n emissiveColor = sRGBTransferEOTF( emissiveColor );\n #endif\n totalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n uniform sampler2D emissiveMap;\n#endif",colorspace_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",colorspace_pars_fragment:"vec4 LinearTransferOETF( in vec4 value ) {\n return value;\n}\nvec4 sRGBTransferEOTF( in vec4 value ) {\n return vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 sRGBTransferOETF( in vec4 value ) {\n return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n #ifdef ENV_WORLDPOS\n vec3 cameraToFrag;\n if ( isOrthographic ) {\n cameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n } else {\n cameraToFrag = normalize( vWorldPosition - cameraPosition );\n }\n vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n #ifdef ENVMAP_MODE_REFLECTION\n vec3 reflectVec = reflect( cameraToFrag, worldNormal );\n #else\n vec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n #endif\n #else\n vec3 reflectVec = vReflect;\n #endif\n #ifdef ENVMAP_TYPE_CUBE\n vec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n #else\n vec4 envColor = vec4( 0.0 );\n #endif\n #ifdef ENVMAP_BLENDING_MULTIPLY\n outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n #elif defined( ENVMAP_BLENDING_MIX )\n outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n #elif defined( ENVMAP_BLENDING_ADD )\n outgoingLight += envColor.xyz * specularStrength * reflectivity;\n #endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n uniform float envMapIntensity;\n uniform float flipEnvMap;\n uniform mat3 envMapRotation;\n #ifdef ENVMAP_TYPE_CUBE\n uniform samplerCube envMap;\n #else\n uniform sampler2D envMap;\n #endif\n \n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n uniform float reflectivity;\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n #define ENV_WORLDPOS\n #endif\n #ifdef ENV_WORLDPOS\n varying vec3 vWorldPosition;\n uniform float refractionRatio;\n #else\n varying vec3 vReflect;\n #endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n #define ENV_WORLDPOS\n #endif\n #ifdef ENV_WORLDPOS\n \n varying vec3 vWorldPosition;\n #else\n varying vec3 vReflect;\n uniform float refractionRatio;\n #endif\n#endif",envmap_physical_pars_fragment:"#ifdef USE_ENVMAP\n vec3 getIBLIrradiance( const in vec3 normal ) {\n #ifdef ENVMAP_TYPE_CUBE_UV\n vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n vec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );\n return PI * envMapColor.rgb * envMapIntensity;\n #else\n return vec3( 0.0 );\n #endif\n }\n vec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n #ifdef ENVMAP_TYPE_CUBE_UV\n vec3 reflectVec = reflect( - viewDir, normal );\n reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n reflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n vec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );\n return envMapColor.rgb * envMapIntensity;\n #else\n return vec3( 0.0 );\n #endif\n }\n #ifdef USE_ANISOTROPY\n vec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {\n #ifdef ENVMAP_TYPE_CUBE_UV\n vec3 bentNormal = cross( bitangent, viewDir );\n bentNormal = normalize( cross( bentNormal, bitangent ) );\n bentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) );\n return getIBLRadiance( viewDir, bentNormal, roughness );\n #else\n return vec3( 0.0 );\n #endif\n }\n #endif\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n #ifdef ENV_WORLDPOS\n vWorldPosition = worldPosition.xyz;\n #else\n vec3 cameraToVertex;\n if ( isOrthographic ) {\n cameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n } else {\n cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n }\n vec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n #ifdef ENVMAP_MODE_REFLECTION\n vReflect = reflect( cameraToVertex, worldNormal );\n #else\n vReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n #endif\n #endif\n#endif",fog_vertex:"#ifdef USE_FOG\n vFogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n varying float vFogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n #ifdef FOG_EXP2\n float fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n #else\n float fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n #endif\n gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n uniform vec3 fogColor;\n varying float vFogDepth;\n #ifdef FOG_EXP2\n uniform float fogDensity;\n #else\n uniform float fogNear;\n uniform float fogFar;\n #endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n uniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n float dotNL = dot( normal, lightDirection );\n vec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n #ifdef USE_GRADIENTMAP\n return vec3( texture2D( gradientMap, coord ).r );\n #else\n vec2 fw = fwidth( coord ) * 0.5;\n return mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\n #endif\n}",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n uniform sampler2D lightMap;\n uniform float lightMapIntensity;\n#endif",lights_lambert_fragment:"LambertMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularStrength = specularStrength;",lights_lambert_pars_fragment:"varying vec3 vViewPosition;\nstruct LambertMaterial {\n vec3 diffuseColor;\n float specularStrength;\n};\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct RE_Direct_Lambert\n#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\n#if defined( USE_LIGHT_PROBES )\n uniform vec3 lightProbe[ 9 ];\n#endif\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n float x = normal.x, y = normal.y, z = normal.z;\n vec3 result = shCoefficients[ 0 ] * 0.886227;\n result += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n result += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n result += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n result += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n return result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n vec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n return irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n vec3 irradiance = ambientLightColor;\n return irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n if ( cutoffDistance > 0.0 ) {\n distanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n }\n return distanceFalloff;\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n return smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n struct DirectionalLight {\n vec3 direction;\n vec3 color;\n };\n uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n void getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) {\n light.color = directionalLight.color;\n light.direction = directionalLight.direction;\n light.visible = true;\n }\n#endif\n#if NUM_POINT_LIGHTS > 0\n struct PointLight {\n vec3 position;\n vec3 color;\n float distance;\n float decay;\n };\n uniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n void getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) {\n vec3 lVector = pointLight.position - geometryPosition;\n light.direction = normalize( lVector );\n float lightDistance = length( lVector );\n light.color = pointLight.color;\n light.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n light.visible = ( light.color != vec3( 0.0 ) );\n }\n#endif\n#if NUM_SPOT_LIGHTS > 0\n struct SpotLight {\n vec3 position;\n vec3 direction;\n vec3 color;\n float distance;\n float decay;\n float coneCos;\n float penumbraCos;\n };\n uniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n void getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) {\n vec3 lVector = spotLight.position - geometryPosition;\n light.direction = normalize( lVector );\n float angleCos = dot( light.direction, spotLight.direction );\n float spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n if ( spotAttenuation > 0.0 ) {\n float lightDistance = length( lVector );\n light.color = spotLight.color * spotAttenuation;\n light.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n light.visible = ( light.color != vec3( 0.0 ) );\n } else {\n light.color = vec3( 0.0 );\n light.visible = false;\n }\n }\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n struct RectAreaLight {\n vec3 color;\n vec3 position;\n vec3 halfWidth;\n vec3 halfHeight;\n };\n uniform sampler2D ltc_1; uniform sampler2D ltc_2;\n uniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n struct HemisphereLight {\n vec3 direction;\n vec3 skyColor;\n vec3 groundColor;\n };\n uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n float dotNL = dot( normal, hemiLight.direction );\n float hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n return irradiance;\n }\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\nstruct ToonMaterial {\n vec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n vec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;\n reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct RE_Direct_Toon\n#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n vec3 diffuseColor;\n vec3 specularColor;\n float specularShininess;\n float specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct RE_Direct_BlinnPhong\n#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n material.ior = ior;\n #ifdef USE_SPECULAR\n float specularIntensityFactor = specularIntensity;\n vec3 specularColorFactor = specularColor;\n #ifdef USE_SPECULAR_COLORMAP\n specularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb;\n #endif\n #ifdef USE_SPECULAR_INTENSITYMAP\n specularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a;\n #endif\n material.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n #else\n float specularIntensityFactor = 1.0;\n vec3 specularColorFactor = vec3( 1.0 );\n material.specularF90 = 1.0;\n #endif\n material.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n material.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n material.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n material.clearcoat = clearcoat;\n material.clearcoatRoughness = clearcoatRoughness;\n material.clearcoatF0 = vec3( 0.04 );\n material.clearcoatF90 = 1.0;\n #ifdef USE_CLEARCOATMAP\n material.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x;\n #endif\n #ifdef USE_CLEARCOAT_ROUGHNESSMAP\n material.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y;\n #endif\n material.clearcoat = saturate( material.clearcoat ); material.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n material.clearcoatRoughness += geometryRoughness;\n material.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_DISPERSION\n material.dispersion = dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n material.iridescence = iridescence;\n material.iridescenceIOR = iridescenceIOR;\n #ifdef USE_IRIDESCENCEMAP\n material.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r;\n #endif\n #ifdef USE_IRIDESCENCE_THICKNESSMAP\n material.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum;\n #else\n material.iridescenceThickness = iridescenceThicknessMaximum;\n #endif\n#endif\n#ifdef USE_SHEEN\n material.sheenColor = sheenColor;\n #ifdef USE_SHEEN_COLORMAP\n material.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb;\n #endif\n material.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n #ifdef USE_SHEEN_ROUGHNESSMAP\n material.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a;\n #endif\n#endif\n#ifdef USE_ANISOTROPY\n #ifdef USE_ANISOTROPYMAP\n mat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x );\n vec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb;\n vec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b;\n #else\n vec2 anisotropyV = anisotropyVector;\n #endif\n material.anisotropy = length( anisotropyV );\n if( material.anisotropy == 0.0 ) {\n anisotropyV = vec2( 1.0, 0.0 );\n } else {\n anisotropyV /= material.anisotropy;\n material.anisotropy = saturate( material.anisotropy );\n }\n material.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) );\n material.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y;\n material.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y;\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n vec3 diffuseColor;\n float roughness;\n vec3 specularColor;\n float specularF90;\n float dispersion;\n #ifdef USE_CLEARCOAT\n float clearcoat;\n float clearcoatRoughness;\n vec3 clearcoatF0;\n float clearcoatF90;\n #endif\n #ifdef USE_IRIDESCENCE\n float iridescence;\n float iridescenceIOR;\n float iridescenceThickness;\n vec3 iridescenceFresnel;\n vec3 iridescenceF0;\n #endif\n #ifdef USE_SHEEN\n vec3 sheenColor;\n float sheenRoughness;\n #endif\n #ifdef IOR\n float ior;\n #endif\n #ifdef USE_TRANSMISSION\n float transmission;\n float transmissionAlpha;\n float thickness;\n float attenuationDistance;\n vec3 attenuationColor;\n #endif\n #ifdef USE_ANISOTROPY\n float anisotropy;\n float alphaT;\n vec3 anisotropyT;\n vec3 anisotropyB;\n #endif\n};\nvec3 clearcoatSpecularDirect = vec3( 0.0 );\nvec3 clearcoatSpecularIndirect = vec3( 0.0 );\nvec3 sheenSpecularDirect = vec3( 0.0 );\nvec3 sheenSpecularIndirect = vec3(0.0 );\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\n float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\n float x2 = x * x;\n float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\n}\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n float a2 = pow2( alpha );\n float gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n float gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n return 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n float a2 = pow2( alpha );\n float denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n return RECIPROCAL_PI * a2 / pow2( denom );\n}\n#ifdef USE_ANISOTROPY\n float V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) {\n float gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );\n float gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );\n float v = 0.5 / ( gv + gl );\n return saturate(v);\n }\n float D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) {\n float a2 = alphaT * alphaB;\n highp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH );\n highp float v2 = dot( v, v );\n float w2 = a2 / v2;\n return RECIPROCAL_PI * a2 * pow2 ( w2 );\n }\n#endif\n#ifdef USE_CLEARCOAT\n vec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {\n vec3 f0 = material.clearcoatF0;\n float f90 = material.clearcoatF90;\n float roughness = material.clearcoatRoughness;\n float alpha = pow2( roughness );\n vec3 halfDir = normalize( lightDir + viewDir );\n float dotNL = saturate( dot( normal, lightDir ) );\n float dotNV = saturate( dot( normal, viewDir ) );\n float dotNH = saturate( dot( normal, halfDir ) );\n float dotVH = saturate( dot( viewDir, halfDir ) );\n vec3 F = F_Schlick( f0, f90, dotVH );\n float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n float D = D_GGX( alpha, dotNH );\n return F * ( V * D );\n }\n#endif\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\n vec3 f0 = material.specularColor;\n float f90 = material.specularF90;\n float roughness = material.roughness;\n float alpha = pow2( roughness );\n vec3 halfDir = normalize( lightDir + viewDir );\n float dotNL = saturate( dot( normal, lightDir ) );\n float dotNV = saturate( dot( normal, viewDir ) );\n float dotNH = saturate( dot( normal, halfDir ) );\n float dotVH = saturate( dot( viewDir, halfDir ) );\n vec3 F = F_Schlick( f0, f90, dotVH );\n #ifdef USE_IRIDESCENCE\n F = mix( F, material.iridescenceFresnel, material.iridescence );\n #endif\n #ifdef USE_ANISOTROPY\n float dotTL = dot( material.anisotropyT, lightDir );\n float dotTV = dot( material.anisotropyT, viewDir );\n float dotTH = dot( material.anisotropyT, halfDir );\n float dotBL = dot( material.anisotropyB, lightDir );\n float dotBV = dot( material.anisotropyB, viewDir );\n float dotBH = dot( material.anisotropyB, halfDir );\n float V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );\n float D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );\n #else\n float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n float D = D_GGX( alpha, dotNH );\n #endif\n return F * ( V * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n const float LUT_SIZE = 64.0;\n const float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n const float LUT_BIAS = 0.5 / LUT_SIZE;\n float dotNV = saturate( dot( N, V ) );\n vec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n uv = uv * LUT_SCALE + LUT_BIAS;\n return uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n float l = length( f );\n return max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n float x = dot( v1, v2 );\n float y = abs( x );\n float a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n float b = 3.4175940 + ( 4.1616724 + y ) * y;\n float v = a / b;\n float theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n return cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n vec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n vec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n vec3 lightNormal = cross( v1, v2 );\n if( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n vec3 T1, T2;\n T1 = normalize( V - N * dot( V, N ) );\n T2 = - cross( N, T1 );\n mat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n vec3 coords[ 4 ];\n coords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n coords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n coords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n coords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n coords[ 0 ] = normalize( coords[ 0 ] );\n coords[ 1 ] = normalize( coords[ 1 ] );\n coords[ 2 ] = normalize( coords[ 2 ] );\n coords[ 3 ] = normalize( coords[ 3 ] );\n vec3 vectorFormFactor = vec3( 0.0 );\n vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n float result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n return vec3( result );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n float alpha = pow2( roughness );\n float invAlpha = 1.0 / alpha;\n float cos2h = dotNH * dotNH;\n float sin2h = max( 1.0 - cos2h, 0.0078125 );\n return ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n return saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n vec3 halfDir = normalize( lightDir + viewDir );\n float dotNL = saturate( dot( normal, lightDir ) );\n float dotNV = saturate( dot( normal, viewDir ) );\n float dotNH = saturate( dot( normal, halfDir ) );\n float D = D_Charlie( sheenRoughness, dotNH );\n float V = V_Neubelt( dotNV, dotNL );\n return sheenColor * ( D * V );\n}\n#endif\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n float dotNV = saturate( dot( normal, viewDir ) );\n float r2 = roughness * roughness;\n float a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\n float b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\n float DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\n return saturate( DG * RECIPROCAL_PI );\n}\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n float dotNV = saturate( dot( normal, viewDir ) );\n const vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n const vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n vec4 r = roughness * c0 + c1;\n float a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n vec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n return fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n vec2 fab = DFGApprox( normal, viewDir, roughness );\n return specularColor * fab.x + specularF90 * fab.y;\n}\n#ifdef USE_IRIDESCENCE\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#else\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#endif\n vec2 fab = DFGApprox( normal, viewDir, roughness );\n #ifdef USE_IRIDESCENCE\n vec3 Fr = mix( specularColor, iridescenceF0, iridescence );\n #else\n vec3 Fr = specularColor;\n #endif\n vec3 FssEss = Fr * fab.x + specularF90 * fab.y;\n float Ess = fab.x + fab.y;\n float Ems = 1.0 - Ess;\n vec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619; vec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n singleScatter += FssEss;\n multiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n void RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n vec3 normal = geometryNormal;\n vec3 viewDir = geometryViewDir;\n vec3 position = geometryPosition;\n vec3 lightPos = rectAreaLight.position;\n vec3 halfWidth = rectAreaLight.halfWidth;\n vec3 halfHeight = rectAreaLight.halfHeight;\n vec3 lightColor = rectAreaLight.color;\n float roughness = material.roughness;\n vec3 rectCoords[ 4 ];\n rectCoords[ 0 ] = lightPos + halfWidth - halfHeight; rectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n rectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n rectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n vec2 uv = LTC_Uv( normal, viewDir, roughness );\n vec4 t1 = texture2D( ltc_1, uv );\n vec4 t2 = texture2D( ltc_2, uv );\n mat3 mInv = mat3(\n vec3( t1.x, 0, t1.y ),\n vec3( 0, 1, 0 ),\n vec3( t1.z, 0, t1.w )\n );\n vec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n reflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n reflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n }\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n #ifdef USE_CLEARCOAT\n float dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) );\n vec3 ccIrradiance = dotNLcc * directLight.color;\n clearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );\n #endif\n #ifdef USE_SHEEN\n sheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );\n #endif\n reflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material );\n reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n #ifdef USE_CLEARCOAT\n clearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n #endif\n #ifdef USE_SHEEN\n sheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\n #endif\n vec3 singleScattering = vec3( 0.0 );\n vec3 multiScattering = vec3( 0.0 );\n vec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n #ifdef USE_IRIDESCENCE\n computeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\n #else\n computeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n #endif\n vec3 totalScattering = singleScattering + multiScattering;\n vec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\n reflectedLight.indirectSpecular += radiance * singleScattering;\n reflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n reflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct RE_Direct_Physical\n#define RE_Direct_RectArea RE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse RE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular RE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nvec3 geometryPosition = - vViewPosition;\nvec3 geometryNormal = normal;\nvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\nvec3 geometryClearcoatNormal = vec3( 0.0 );\n#ifdef USE_CLEARCOAT\n geometryClearcoatNormal = clearcoatNormal;\n#endif\n#ifdef USE_IRIDESCENCE\n float dotNVi = saturate( dot( normal, geometryViewDir ) );\n if ( material.iridescenceThickness == 0.0 ) {\n material.iridescence = 0.0;\n } else {\n material.iridescence = saturate( material.iridescence );\n }\n if ( material.iridescence > 0.0 ) {\n material.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\n material.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\n }\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n PointLight pointLight;\n #if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n PointLightShadow pointLightShadow;\n #endif\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n pointLight = pointLights[ i ];\n getPointLightInfo( pointLight, geometryPosition, directLight );\n #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n pointLightShadow = pointLightShadows[ i ];\n directLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n #endif\n RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n }\n #pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n SpotLight spotLight;\n vec4 spotColor;\n vec3 spotLightCoord;\n bool inSpotLightMap;\n #if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n SpotLightShadow spotLightShadow;\n #endif\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n spotLight = spotLights[ i ];\n getSpotLightInfo( spotLight, geometryPosition, directLight );\n #if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n #define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\n #elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n #define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\n #else\n #define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n #endif\n #if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\n spotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\n inSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\n spotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\n directLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\n #endif\n #undef SPOT_LIGHT_MAP_INDEX\n #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n spotLightShadow = spotLightShadows[ i ];\n directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n }\n #pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n DirectionalLight directionalLight;\n #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n DirectionalLightShadow directionalLightShadow;\n #endif\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directionalLight = directionalLights[ i ];\n getDirectionalLightInfo( directionalLight, directLight );\n #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n directionalLightShadow = directionalLightShadows[ i ];\n directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n }\n #pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n RectAreaLight rectAreaLight;\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n rectAreaLight = rectAreaLights[ i ];\n RE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n }\n #pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n vec3 iblIrradiance = vec3( 0.0 );\n vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n #if defined( USE_LIGHT_PROBES )\n irradiance += getLightProbeIrradiance( lightProbe, geometryNormal );\n #endif\n #if ( NUM_HEMI_LIGHTS > 0 )\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\n }\n #pragma unroll_loop_end\n #endif\n#endif\n#if defined( RE_IndirectSpecular )\n vec3 radiance = vec3( 0.0 );\n vec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n #ifdef USE_LIGHTMAP\n vec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n irradiance += lightMapIrradiance;\n #endif\n #if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n iblIrradiance += getIBLIrradiance( geometryNormal );\n #endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n #ifdef USE_ANISOTROPY\n radiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy );\n #else\n radiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness );\n #endif\n #ifdef USE_CLEARCOAT\n clearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness );\n #endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n RE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n RE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF )\n gl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF )\n uniform float logDepthBufFC;\n varying float vFragDepth;\n varying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n varying float vFragDepth;\n varying float vIsPerspective;\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n vFragDepth = 1.0 + gl_Position.w;\n vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n#endif",map_fragment:"#ifdef USE_MAP\n vec4 sampledDiffuseColor = texture2D( map, vMapUv );\n #ifdef DECODE_VIDEO_TEXTURE\n sampledDiffuseColor = sRGBTransferEOTF( sampledDiffuseColor );\n #endif\n diffuseColor *= sampledDiffuseColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n uniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n #if defined( USE_POINTS_UV )\n vec2 uv = vUv;\n #else\n vec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n #endif\n#endif\n#ifdef USE_MAP\n diffuseColor *= texture2D( map, uv );\n#endif\n#ifdef USE_ALPHAMAP\n diffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_POINTS_UV )\n varying vec2 vUv;\n#else\n #if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n uniform mat3 uvTransform;\n #endif\n#endif\n#ifdef USE_MAP\n uniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n uniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n vec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );\n metalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n uniform sampler2D metalnessMap;\n#endif",morphinstance_vertex:"#ifdef USE_INSTANCING_MORPH\n float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n float morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r;\n for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n morphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r;\n }\n#endif",morphcolor_vertex:"#if defined( USE_MORPHCOLORS )\n vColor *= morphTargetBaseInfluence;\n for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n #if defined( USE_COLOR_ALPHA )\n if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\n #elif defined( USE_COLOR )\n if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\n #endif\n }\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n objectNormal *= morphTargetBaseInfluence;\n for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n if ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\n }\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n #ifndef USE_INSTANCING_MORPH\n uniform float morphTargetBaseInfluence;\n uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n #endif\n uniform sampler2DArray morphTargetsTexture;\n uniform ivec2 morphTargetsTextureSize;\n vec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\n int texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\n int y = texelIndex / morphTargetsTextureSize.x;\n int x = texelIndex - y * morphTargetsTextureSize.x;\n ivec3 morphUV = ivec3( x, y, morphTargetIndex );\n return texelFetch( morphTargetsTexture, morphUV, 0 );\n }\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n transformed *= morphTargetBaseInfluence;\n for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n if ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\n }\n#endif",normal_fragment_begin:"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n vec3 fdx = dFdx( vViewPosition );\n vec3 fdy = dFdy( vViewPosition );\n vec3 normal = normalize( cross( fdx, fdy ) );\n#else\n vec3 normal = normalize( vNormal );\n #ifdef DOUBLE_SIDED\n normal *= faceDirection;\n #endif\n#endif\n#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )\n #ifdef USE_TANGENT\n mat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n #else\n mat3 tbn = getTangentFrame( - vViewPosition, normal,\n #if defined( USE_NORMALMAP )\n vNormalMapUv\n #elif defined( USE_CLEARCOAT_NORMALMAP )\n vClearcoatNormalMapUv\n #else\n vUv\n #endif\n );\n #endif\n #if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n tbn[0] *= faceDirection;\n tbn[1] *= faceDirection;\n #endif\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n #ifdef USE_TANGENT\n mat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n #else\n mat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );\n #endif\n #if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n tbn2[0] *= faceDirection;\n tbn2[1] *= faceDirection;\n #endif\n#endif\nvec3 nonPerturbedNormal = normal;",normal_fragment_maps:"#ifdef USE_NORMALMAP_OBJECTSPACE\n normal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n #ifdef FLIP_SIDED\n normal = - normal;\n #endif\n #ifdef DOUBLE_SIDED\n normal = normal * faceDirection;\n #endif\n normal = normalize( normalMatrix * normal );\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\n vec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n mapN.xy *= normalScale;\n normal = normalize( tbn * mapN );\n#elif defined( USE_BUMPMAP )\n normal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif",normal_pars_fragment:"#ifndef FLAT_SHADED\n varying vec3 vNormal;\n #ifdef USE_TANGENT\n varying vec3 vTangent;\n varying vec3 vBitangent;\n #endif\n#endif",normal_pars_vertex:"#ifndef FLAT_SHADED\n varying vec3 vNormal;\n #ifdef USE_TANGENT\n varying vec3 vTangent;\n varying vec3 vBitangent;\n #endif\n#endif",normal_vertex:"#ifndef FLAT_SHADED\n vNormal = normalize( transformedNormal );\n #ifdef USE_TANGENT\n vTangent = normalize( transformedTangent );\n vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n #endif\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n uniform sampler2D normalMap;\n uniform vec2 normalScale;\n#endif\n#ifdef USE_NORMALMAP_OBJECTSPACE\n uniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) )\n mat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) {\n vec3 q0 = dFdx( eye_pos.xyz );\n vec3 q1 = dFdy( eye_pos.xyz );\n vec2 st0 = dFdx( uv.st );\n vec2 st1 = dFdy( uv.st );\n vec3 N = surf_norm;\n vec3 q1perp = cross( q1, N );\n vec3 q0perp = cross( N, q0 );\n vec3 T = q1perp * st0.x + q0perp * st1.x;\n vec3 B = q1perp * st0.y + q0perp * st1.y;\n float det = max( dot( T, T ), dot( B, B ) );\n float scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );\n return mat3( T * scale, B * scale, N );\n }\n#endif",clearcoat_normal_fragment_begin:"#ifdef USE_CLEARCOAT\n vec3 clearcoatNormal = nonPerturbedNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;\n clearcoatMapN.xy *= clearcoatNormalScale;\n clearcoatNormal = normalize( tbn2 * clearcoatMapN );\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n uniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n uniform sampler2D clearcoatNormalMap;\n uniform vec2 clearcoatNormalScale;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n uniform sampler2D clearcoatRoughnessMap;\n#endif",iridescence_pars_fragment:"#ifdef USE_IRIDESCENCEMAP\n uniform sampler2D iridescenceMap;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n uniform sampler2D iridescenceThicknessMap;\n#endif",opaque_fragment:"#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= material.transmissionAlpha;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n return normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n return 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;const float ShiftRight8 = 1. / 256.;\nconst float Inv255 = 1. / 255.;\nconst vec4 PackFactors = vec4( 1.0, 256.0, 256.0 * 256.0, 256.0 * 256.0 * 256.0 );\nconst vec2 UnpackFactors2 = vec2( UnpackDownscale, 1.0 / PackFactors.g );\nconst vec3 UnpackFactors3 = vec3( UnpackDownscale / PackFactors.rg, 1.0 / PackFactors.b );\nconst vec4 UnpackFactors4 = vec4( UnpackDownscale / PackFactors.rgb, 1.0 / PackFactors.a );\nvec4 packDepthToRGBA( const in float v ) {\n if( v <= 0.0 )\n return vec4( 0., 0., 0., 0. );\n if( v >= 1.0 )\n return vec4( 1., 1., 1., 1. );\n float vuf;\n float af = modf( v * PackFactors.a, vuf );\n float bf = modf( vuf * ShiftRight8, vuf );\n float gf = modf( vuf * ShiftRight8, vuf );\n return vec4( vuf * Inv255, gf * PackUpscale, bf * PackUpscale, af );\n}\nvec3 packDepthToRGB( const in float v ) {\n if( v <= 0.0 )\n return vec3( 0., 0., 0. );\n if( v >= 1.0 )\n return vec3( 1., 1., 1. );\n float vuf;\n float bf = modf( v * PackFactors.b, vuf );\n float gf = modf( vuf * ShiftRight8, vuf );\n return vec3( vuf * Inv255, gf * PackUpscale, bf );\n}\nvec2 packDepthToRG( const in float v ) {\n if( v <= 0.0 )\n return vec2( 0., 0. );\n if( v >= 1.0 )\n return vec2( 1., 1. );\n float vuf;\n float gf = modf( v * 256., vuf );\n return vec2( vuf * Inv255, gf );\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n return dot( v, UnpackFactors4 );\n}\nfloat unpackRGBToDepth( const in vec3 v ) {\n return dot( v, UnpackFactors3 );\n}\nfloat unpackRGToDepth( const in vec2 v ) {\n return v.r * UnpackFactors2.r + v.g * UnpackFactors2.g;\n}\nvec4 pack2HalfToRGBA( const in vec2 v ) {\n vec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n return vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( const in vec4 v ) {\n return vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n return ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {\n return depth * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n return ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {\n return ( near * far ) / ( ( far - near ) * depth - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n gl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_BATCHING\n mvPosition = batchingMatrix * mvPosition;\n#endif\n#ifdef USE_INSTANCING\n mvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n gl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n vec3 dithering( vec3 color ) {\n float grid_position = rand( gl_FragCoord.xy );\n vec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n return color + dither_shift_RGB;\n }\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n vec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );\n roughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n uniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#if NUM_SPOT_LIGHT_COORDS > 0\n varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#if NUM_SPOT_LIGHT_MAPS > 0\n uniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\n#endif\n#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHT_SHADOWS > 0\n uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n struct DirectionalLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n #endif\n #if NUM_SPOT_LIGHT_SHADOWS > 0\n uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n struct SpotLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n #endif\n #if NUM_POINT_LIGHT_SHADOWS > 0\n uniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n struct PointLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n float shadowCameraNear;\n float shadowCameraFar;\n };\n uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n #endif\n float texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n return step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n }\n vec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n return unpackRGBATo2Half( texture2D( shadow, uv ) );\n }\n float VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n float occlusion = 1.0;\n vec2 distribution = texture2DDistribution( shadow, uv );\n float hard_shadow = step( compare , distribution.x );\n if (hard_shadow != 1.0 ) {\n float distance = compare - distribution.x ;\n float variance = max( 0.00000, distribution.y * distribution.y );\n float softness_probability = variance / (variance + distance * distance ); softness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 ); occlusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n }\n return occlusion;\n }\n float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n float shadow = 1.0;\n shadowCoord.xyz /= shadowCoord.w;\n shadowCoord.z += shadowBias;\n bool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n bool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n if ( frustumTest ) {\n #if defined( SHADOWMAP_TYPE_PCF )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx0 = - texelSize.x * shadowRadius;\n float dy0 = - texelSize.y * shadowRadius;\n float dx1 = + texelSize.x * shadowRadius;\n float dy1 = + texelSize.y * shadowRadius;\n float dx2 = dx0 / 2.0;\n float dy2 = dy0 / 2.0;\n float dx3 = dx1 / 2.0;\n float dy3 = dy1 / 2.0;\n shadow = (\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n ) * ( 1.0 / 17.0 );\n #elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx = texelSize.x;\n float dy = texelSize.y;\n vec2 uv = shadowCoord.xy;\n vec2 f = fract( uv * shadowMapSize + 0.5 );\n uv -= f * texelSize;\n shadow = (\n texture2DCompare( shadowMap, uv, shadowCoord.z ) +\n texture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n texture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n mix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n f.x ) +\n mix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n f.x ) +\n mix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n f.y ) +\n mix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n f.y ) +\n mix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n f.x ),\n mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n f.x ),\n f.y )\n ) * ( 1.0 / 9.0 );\n #elif defined( SHADOWMAP_TYPE_VSM )\n shadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n #else\n shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n #endif\n }\n return mix( 1.0, shadow, shadowIntensity );\n }\n vec2 cubeToUV( vec3 v, float texelSizeY ) {\n vec3 absV = abs( v );\n float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n absV *= scaleToCube;\n v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n vec2 planar = v.xy;\n float almostATexel = 1.5 * texelSizeY;\n float almostOne = 1.0 - almostATexel;\n if ( absV.z >= almostOne ) {\n if ( v.z > 0.0 )\n planar.x = 4.0 - v.x;\n } else if ( absV.x >= almostOne ) {\n float signX = sign( v.x );\n planar.x = v.z * signX + 2.0 * signX;\n } else if ( absV.y >= almostOne ) {\n float signY = sign( v.y );\n planar.x = v.x + 2.0 * signY + 2.0;\n planar.y = v.z * signY - 2.0;\n }\n return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n }\n float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n float shadow = 1.0;\n vec3 lightToPosition = shadowCoord.xyz;\n \n float lightToPositionLength = length( lightToPosition );\n if ( lightToPositionLength - shadowCameraFar <= 0.0 && lightToPositionLength - shadowCameraNear >= 0.0 ) {\n float dp = ( lightToPositionLength - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear ); dp += shadowBias;\n vec3 bd3D = normalize( lightToPosition );\n vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n #if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n vec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n shadow = (\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n ) * ( 1.0 / 9.0 );\n #else\n shadow = texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n #endif\n }\n return mix( 1.0, shadow, shadowIntensity );\n }\n#endif",shadowmap_pars_vertex:"#if NUM_SPOT_LIGHT_COORDS > 0\n uniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\n varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHT_SHADOWS > 0\n uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n struct DirectionalLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n #endif\n #if NUM_SPOT_LIGHT_SHADOWS > 0\n struct SpotLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n #endif\n #if NUM_POINT_LIGHT_SHADOWS > 0\n uniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n struct PointLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n float shadowCameraNear;\n float shadowCameraFar;\n };\n uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n #endif\n#endif",shadowmap_vertex:"#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\n vec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n vec4 shadowWorldPosition;\n#endif\n#if defined( USE_SHADOWMAP )\n #if NUM_DIR_LIGHT_SHADOWS > 0\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n }\n #pragma unroll_loop_end\n #endif\n #if NUM_POINT_LIGHT_SHADOWS > 0\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n }\n #pragma unroll_loop_end\n #endif\n#endif\n#if NUM_SPOT_LIGHT_COORDS > 0\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\n shadowWorldPosition = worldPosition;\n #if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n shadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\n #endif\n vSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\n }\n #pragma unroll_loop_end\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n float shadow = 1.0;\n #ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHT_SHADOWS > 0\n DirectionalLightShadow directionalLight;\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n directionalLight = directionalLightShadows[ i ];\n shadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowIntensity, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n }\n #pragma unroll_loop_end\n #endif\n #if NUM_SPOT_LIGHT_SHADOWS > 0\n SpotLightShadow spotLight;\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n spotLight = spotLightShadows[ i ];\n shadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowIntensity, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n }\n #pragma unroll_loop_end\n #endif\n #if NUM_POINT_LIGHT_SHADOWS > 0\n PointLightShadow pointLight;\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n pointLight = pointLightShadows[ i ];\n shadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowIntensity, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n }\n #pragma unroll_loop_end\n #endif\n #endif\n return shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n mat4 boneMatX = getBoneMatrix( skinIndex.x );\n mat4 boneMatY = getBoneMatrix( skinIndex.y );\n mat4 boneMatZ = getBoneMatrix( skinIndex.z );\n mat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n uniform mat4 bindMatrix;\n uniform mat4 bindMatrixInverse;\n uniform highp sampler2D boneTexture;\n mat4 getBoneMatrix( const in float i ) {\n int size = textureSize( boneTexture, 0 ).x;\n int j = int( i ) * 4;\n int x = j % size;\n int y = j / size;\n vec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 );\n vec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 );\n vec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 );\n vec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 );\n return mat4( v1, v2, v3, v4 );\n }\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n vec4 skinned = vec4( 0.0 );\n skinned += boneMatX * skinVertex * skinWeight.x;\n skinned += boneMatY * skinVertex * skinWeight.y;\n skinned += boneMatZ * skinVertex * skinWeight.z;\n skinned += boneMatW * skinVertex * skinWeight.w;\n transformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n mat4 skinMatrix = mat4( 0.0 );\n skinMatrix += skinWeight.x * boneMatX;\n skinMatrix += skinWeight.y * boneMatY;\n skinMatrix += skinWeight.z * boneMatZ;\n skinMatrix += skinWeight.w * boneMatW;\n skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n #ifdef USE_TANGENT\n objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n #endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n vec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );\n specularStrength = texelSpecular.r;\n#else\n specularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n uniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n return saturate( toneMappingExposure * color );\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n return saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 CineonToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n color = max( vec3( 0.0 ), color - 0.004 );\n return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n vec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n vec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n return a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n const mat3 ACESInputMat = mat3(\n vec3( 0.59719, 0.07600, 0.02840 ), vec3( 0.35458, 0.90834, 0.13383 ),\n vec3( 0.04823, 0.01566, 0.83777 )\n );\n const mat3 ACESOutputMat = mat3(\n vec3( 1.60475, -0.10208, -0.00327 ), vec3( -0.53108, 1.10813, -0.07276 ),\n vec3( -0.07367, -0.00605, 1.07602 )\n );\n color *= toneMappingExposure / 0.6;\n color = ACESInputMat * color;\n color = RRTAndODTFit( color );\n color = ACESOutputMat * color;\n return saturate( color );\n}\nconst mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3(\n vec3( 1.6605, - 0.1246, - 0.0182 ),\n vec3( - 0.5876, 1.1329, - 0.1006 ),\n vec3( - 0.0728, - 0.0083, 1.1187 )\n);\nconst mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3(\n vec3( 0.6274, 0.0691, 0.0164 ),\n vec3( 0.3293, 0.9195, 0.0880 ),\n vec3( 0.0433, 0.0113, 0.8956 )\n);\nvec3 agxDefaultContrastApprox( vec3 x ) {\n vec3 x2 = x * x;\n vec3 x4 = x2 * x2;\n return + 15.5 * x4 * x2\n - 40.14 * x4 * x\n + 31.96 * x4\n - 6.868 * x2 * x\n + 0.4298 * x2\n + 0.1191 * x\n - 0.00232;\n}\nvec3 AgXToneMapping( vec3 color ) {\n const mat3 AgXInsetMatrix = mat3(\n vec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ),\n vec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ),\n vec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 )\n );\n const mat3 AgXOutsetMatrix = mat3(\n vec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ),\n vec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ),\n vec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 )\n );\n const float AgxMinEv = - 12.47393; const float AgxMaxEv = 4.026069;\n color *= toneMappingExposure;\n color = LINEAR_SRGB_TO_LINEAR_REC2020 * color;\n color = AgXInsetMatrix * color;\n color = max( color, 1e-10 ); color = log2( color );\n color = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv );\n color = clamp( color, 0.0, 1.0 );\n color = agxDefaultContrastApprox( color );\n color = AgXOutsetMatrix * color;\n color = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) );\n color = LINEAR_REC2020_TO_LINEAR_SRGB * color;\n color = clamp( color, 0.0, 1.0 );\n return color;\n}\nvec3 NeutralToneMapping( vec3 color ) {\n const float StartCompression = 0.8 - 0.04;\n const float Desaturation = 0.15;\n color *= toneMappingExposure;\n float x = min( color.r, min( color.g, color.b ) );\n float offset = x < 0.08 ? x - 6.25 * x * x : 0.04;\n color -= offset;\n float peak = max( color.r, max( color.g, color.b ) );\n if ( peak < StartCompression ) return color;\n float d = 1. - StartCompression;\n float newPeak = 1. - d * d / ( peak + d - StartCompression );\n color *= newPeak / peak;\n float g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. );\n return mix( color, vec3( newPeak ), g );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmission_fragment:"#ifdef USE_TRANSMISSION\n material.transmission = transmission;\n material.transmissionAlpha = 1.0;\n material.thickness = thickness;\n material.attenuationDistance = attenuationDistance;\n material.attenuationColor = attenuationColor;\n #ifdef USE_TRANSMISSIONMAP\n material.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r;\n #endif\n #ifdef USE_THICKNESSMAP\n material.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g;\n #endif\n vec3 pos = vWorldPosition;\n vec3 v = normalize( cameraPosition - pos );\n vec3 n = inverseTransformDirection( normal, viewMatrix );\n vec4 transmitted = getIBLVolumeRefraction(\n n, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\n pos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness,\n material.attenuationColor, material.attenuationDistance );\n material.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission );\n totalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission );\n#endif",transmission_pars_fragment:"#ifdef USE_TRANSMISSION\n uniform float transmission;\n uniform float thickness;\n uniform float attenuationDistance;\n uniform vec3 attenuationColor;\n #ifdef USE_TRANSMISSIONMAP\n uniform sampler2D transmissionMap;\n #endif\n #ifdef USE_THICKNESSMAP\n uniform sampler2D thicknessMap;\n #endif\n uniform vec2 transmissionSamplerSize;\n uniform sampler2D transmissionSamplerMap;\n uniform mat4 modelMatrix;\n uniform mat4 projectionMatrix;\n varying vec3 vWorldPosition;\n float w0( float a ) {\n return ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\n }\n float w1( float a ) {\n return ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 );\n }\n float w2( float a ){\n return ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\n }\n float w3( float a ) {\n return ( 1.0 / 6.0 ) * ( a * a * a );\n }\n float g0( float a ) {\n return w0( a ) + w1( a );\n }\n float g1( float a ) {\n return w2( a ) + w3( a );\n }\n float h0( float a ) {\n return - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\n }\n float h1( float a ) {\n return 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\n }\n vec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) {\n uv = uv * texelSize.zw + 0.5;\n vec2 iuv = floor( uv );\n vec2 fuv = fract( uv );\n float g0x = g0( fuv.x );\n float g1x = g1( fuv.x );\n float h0x = h0( fuv.x );\n float h1x = h1( fuv.x );\n float h0y = h0( fuv.y );\n float h1y = h1( fuv.y );\n vec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n vec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n vec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n vec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n return g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\n g1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\n }\n vec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\n vec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\n vec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\n vec2 fLodSizeInv = 1.0 / fLodSize;\n vec2 cLodSizeInv = 1.0 / cLodSize;\n vec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) );\n vec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) );\n return mix( fSample, cSample, fract( lod ) );\n }\n vec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n vec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n vec3 modelScale;\n modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n modelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n return normalize( refractionVector ) * thickness * modelScale;\n }\n float applyIorToRoughness( const in float roughness, const in float ior ) {\n return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n }\n vec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n float lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n return textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\n }\n vec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n if ( isinf( attenuationDistance ) ) {\n return vec3( 1.0 );\n } else {\n vec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n vec3 transmittance = exp( - attenuationCoefficient * transmissionDistance ); return transmittance;\n }\n }\n vec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\n const in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\n const in mat4 viewMatrix, const in mat4 projMatrix, const in float dispersion, const in float ior, const in float thickness,\n const in vec3 attenuationColor, const in float attenuationDistance ) {\n vec4 transmittedLight;\n vec3 transmittance;\n #ifdef USE_DISPERSION\n float halfSpread = ( ior - 1.0 ) * 0.025 * dispersion;\n vec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread );\n for ( int i = 0; i < 3; i ++ ) {\n vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix );\n vec3 refractedRayExit = position + transmissionRay;\n \n vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n vec2 refractionCoords = ndcPos.xy / ndcPos.w;\n refractionCoords += 1.0;\n refractionCoords /= 2.0;\n \n vec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] );\n transmittedLight[ i ] = transmissionSample[ i ];\n transmittedLight.a += transmissionSample.a;\n transmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ];\n }\n transmittedLight.a /= 3.0;\n \n #else\n \n vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n vec3 refractedRayExit = position + transmissionRay;\n vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n vec2 refractionCoords = ndcPos.xy / ndcPos.w;\n refractionCoords += 1.0;\n refractionCoords /= 2.0;\n transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n transmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );\n \n #endif\n vec3 attenuatedColor = transmittance * transmittedLight.rgb;\n vec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n float transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;\n return vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor );\n }\n#endif",uv_pars_fragment:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n varying vec2 vUv;\n#endif\n#ifdef USE_MAP\n varying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n varying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n varying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n varying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n varying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n varying vec2 vNormalMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n varying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n varying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n varying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n varying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n varying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n varying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n varying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n varying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n varying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n varying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n varying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n varying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n varying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n varying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n uniform mat3 transmissionMapTransform;\n varying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n uniform mat3 thicknessMapTransform;\n varying vec2 vThicknessMapUv;\n#endif",uv_pars_vertex:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n varying vec2 vUv;\n#endif\n#ifdef USE_MAP\n uniform mat3 mapTransform;\n varying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n uniform mat3 alphaMapTransform;\n varying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n uniform mat3 lightMapTransform;\n varying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n uniform mat3 aoMapTransform;\n varying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n uniform mat3 bumpMapTransform;\n varying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n uniform mat3 normalMapTransform;\n varying vec2 vNormalMapUv;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n uniform mat3 displacementMapTransform;\n varying vec2 vDisplacementMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n uniform mat3 emissiveMapTransform;\n varying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n uniform mat3 metalnessMapTransform;\n varying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n uniform mat3 roughnessMapTransform;\n varying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n uniform mat3 anisotropyMapTransform;\n varying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n uniform mat3 clearcoatMapTransform;\n varying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n uniform mat3 clearcoatNormalMapTransform;\n varying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n uniform mat3 clearcoatRoughnessMapTransform;\n varying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n uniform mat3 sheenColorMapTransform;\n varying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n uniform mat3 sheenRoughnessMapTransform;\n varying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n uniform mat3 iridescenceMapTransform;\n varying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n uniform mat3 iridescenceThicknessMapTransform;\n varying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n uniform mat3 specularMapTransform;\n varying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n uniform mat3 specularColorMapTransform;\n varying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n uniform mat3 specularIntensityMapTransform;\n varying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n uniform mat3 transmissionMapTransform;\n varying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n uniform mat3 thicknessMapTransform;\n varying vec2 vThicknessMapUv;\n#endif",uv_vertex:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n vUv = vec3( uv, 1 ).xy;\n#endif\n#ifdef USE_MAP\n vMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ALPHAMAP\n vAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_LIGHTMAP\n vLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_AOMAP\n vAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_BUMPMAP\n vBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_NORMALMAP\n vNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n vDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_EMISSIVEMAP\n vEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_METALNESSMAP\n vMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ROUGHNESSMAP\n vRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ANISOTROPYMAP\n vAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOATMAP\n vClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n vClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n vClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n vIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n vIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n vSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n vSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULARMAP\n vSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n vSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n vSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n vTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_THICKNESSMAP\n vThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\n vec4 worldPosition = vec4( transformed, 1.0 );\n #ifdef USE_BATCHING\n worldPosition = batchingMatrix * worldPosition;\n #endif\n #ifdef USE_INSTANCING\n worldPosition = instanceMatrix * worldPosition;\n #endif\n worldPosition = modelMatrix * worldPosition;\n#endif",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n vUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n gl_Position = vec4( position.xy, 1.0, 1.0 );\n}",background_frag:"uniform sampler2D t2D;\nuniform float backgroundIntensity;\nvarying vec2 vUv;\nvoid main() {\n vec4 texColor = texture2D( t2D, vUv );\n #ifdef DECODE_VIDEO_TEXTURE\n texColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );\n #endif\n texColor.rgb *= backgroundIntensity;\n gl_FragColor = texColor;\n #include \n #include \n}",backgroundCube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n vWorldDirection = transformDirection( position, modelMatrix );\n #include \n #include \n gl_Position.z = gl_Position.w;\n}",backgroundCube_frag:"#ifdef ENVMAP_TYPE_CUBE\n uniform samplerCube envMap;\n#elif defined( ENVMAP_TYPE_CUBE_UV )\n uniform sampler2D envMap;\n#endif\nuniform float flipEnvMap;\nuniform float backgroundBlurriness;\nuniform float backgroundIntensity;\nuniform mat3 backgroundRotation;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n #ifdef ENVMAP_TYPE_CUBE\n vec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\n #elif defined( ENVMAP_TYPE_CUBE_UV )\n vec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness );\n #else\n vec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n #endif\n texColor.rgb *= backgroundIntensity;\n gl_FragColor = texColor;\n #include \n #include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n vWorldDirection = transformDirection( position, modelMatrix );\n #include \n #include \n gl_Position.z = gl_Position.w;\n}",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n vec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n gl_FragColor = texColor;\n gl_FragColor.a *= opacity;\n #include \n #include \n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n #include \n #include \n #include \n #include \n #ifdef USE_DISPLACEMENTMAP\n #include \n #include \n #include \n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vHighPrecisionZW = gl_Position.zw;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n uniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n vec4 diffuseColor = vec4( 1.0 );\n #include \n #if DEPTH_PACKING == 3200\n diffuseColor.a = opacity;\n #endif\n #include \n #include \n #include \n #include \n #include \n float fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n #if DEPTH_PACKING == 3200\n gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n #elif DEPTH_PACKING == 3201\n gl_FragColor = packDepthToRGBA( fragCoordZ );\n #elif DEPTH_PACKING == 3202\n gl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 );\n #elif DEPTH_PACKING == 3203\n gl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );\n #endif\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #ifdef USE_DISPLACEMENTMAP\n #include \n #include \n #include \n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vWorldPosition = worldPosition.xyz;\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n vec4 diffuseColor = vec4( 1.0 );\n #include \n #include \n #include \n #include \n #include \n float dist = length( vWorldPosition - referencePosition );\n dist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n dist = saturate( dist );\n gl_FragColor = packDepthToRGBA( dist );\n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n vWorldDirection = transformDirection( position, modelMatrix );\n #include \n #include \n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n vec3 direction = normalize( vWorldDirection );\n vec2 sampleUV = equirectUv( direction );\n gl_FragColor = texture2D( tEquirect, sampleUV );\n #include \n #include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vLineDistance = scale * lineDistance;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n if ( mod( vLineDistance, totalSize ) > dashSize ) {\n discard;\n }\n vec3 outgoingLight = vec3( 0.0 );\n #include \n #include \n #include \n outgoingLight = diffuseColor.rgb;\n #include \n #include \n #include \n #include \n #include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n #include \n #include \n #include \n #include \n #include \n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n #ifdef USE_LIGHTMAP\n vec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n reflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\n #else\n reflectedLight.indirectDiffuse += vec3( 1.0 );\n #endif\n #include \n reflectedLight.indirectDiffuse *= diffuseColor.rgb;\n vec3 outgoingLight = reflectedLight.indirectDiffuse;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n #include \n}",meshlambert_frag:"#define LAMBERT\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 viewDir = normalize( vViewPosition );\n vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n vec3 y = cross( viewDir, x );\n vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n #ifdef USE_MATCAP\n vec4 matcapColor = texture2D( matcap, uv );\n #else\n vec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\n #endif\n vec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n #include \n #include \n #include \n #include \n #include \n #include \n}",meshnormal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n varying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n vViewPosition = - mvPosition.xyz;\n#endif\n}",meshnormal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n varying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( 0.0, 0.0, 0.0, opacity );\n #include \n #include \n #include \n #include \n gl_FragColor = vec4( packNormalToRGB( normal ), diffuseColor.a );\n #ifdef OPAQUE\n gl_FragColor.a = 1.0;\n #endif\n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n #include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n varying vec3 vWorldPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n#ifdef USE_TRANSMISSION\n vWorldPosition = worldPosition.xyz;\n#endif\n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n #define IOR\n #define USE_SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n uniform float ior;\n#endif\n#ifdef USE_SPECULAR\n uniform float specularIntensity;\n uniform vec3 specularColor;\n #ifdef USE_SPECULAR_COLORMAP\n uniform sampler2D specularColorMap;\n #endif\n #ifdef USE_SPECULAR_INTENSITYMAP\n uniform sampler2D specularIntensityMap;\n #endif\n#endif\n#ifdef USE_CLEARCOAT\n uniform float clearcoat;\n uniform float clearcoatRoughness;\n#endif\n#ifdef USE_DISPERSION\n uniform float dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n uniform float iridescence;\n uniform float iridescenceIOR;\n uniform float iridescenceThicknessMinimum;\n uniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n uniform vec3 sheenColor;\n uniform float sheenRoughness;\n #ifdef USE_SHEEN_COLORMAP\n uniform sampler2D sheenColorMap;\n #endif\n #ifdef USE_SHEEN_ROUGHNESSMAP\n uniform sampler2D sheenRoughnessMap;\n #endif\n#endif\n#ifdef USE_ANISOTROPY\n uniform vec2 anisotropyVector;\n #ifdef USE_ANISOTROPYMAP\n uniform sampler2D anisotropyMap;\n #endif\n#endif\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n vec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n #include \n vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n #ifdef USE_SHEEN\n float sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect;\n #endif\n #ifdef USE_CLEARCOAT\n float dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );\n vec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;\n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n #include \n #include \n #include \n #include \n #include \n #include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \n#ifdef USE_POINTS_UV\n varying vec2 vUv;\n uniform mat3 uvTransform;\n#endif\nvoid main() {\n #ifdef USE_POINTS_UV\n vUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n gl_PointSize = size;\n #ifdef USE_SIZEATTENUATION\n bool isPerspective = isPerspectiveMatrix( projectionMatrix );\n if ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n #endif\n #include \n #include \n #include \n #include \n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n vec3 outgoingLight = vec3( 0.0 );\n #include \n #include \n #include \n #include \n #include \n outgoingLight = diffuseColor.rgb;\n #include \n #include \n #include \n #include \n #include \n}",shadow_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n gl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n #include \n #include \n #include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n vec4 mvPosition = modelViewMatrix[ 3 ];\n vec2 scale = vec2( length( modelMatrix[ 0 ].xyz ), length( modelMatrix[ 1 ].xyz ) );\n #ifndef USE_SIZEATTENUATION\n bool isPerspective = isPerspectiveMatrix( projectionMatrix );\n if ( isPerspective ) scale *= - mvPosition.z;\n #endif\n vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n vec2 rotatedPosition;\n rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n mvPosition.xy += rotatedPosition;\n gl_Position = projectionMatrix * mvPosition;\n #include \n #include \n #include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n vec3 outgoingLight = vec3( 0.0 );\n #include \n #include \n #include \n #include \n #include \n outgoingLight = diffuseColor.rgb;\n #include \n #include \n #include \n #include \n}"},ok={common:{diffuse:{value:new tz(0xffffff)},opacity:{value:1},map:{value:null},mapTransform:{value:new Z},alphaMap:{value:null},alphaMapTransform:{value:new Z},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new Z}},envmap:{envMap:{value:null},envMapRotation:{value:new Z},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new Z}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new Z}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new Z},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new Z},normalScale:{value:new Y(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new Z},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new Z}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new Z}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new Z}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new tz(0xffffff)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new tz(0xffffff)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new Z},alphaTest:{value:0},uvTransform:{value:new Z}},sprite:{diffuse:{value:new tz(0xffffff)},opacity:{value:1},center:{value:new Y(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new Z},alphaMap:{value:null},alphaMapTransform:{value:new Z},alphaTest:{value:0}}},oH={basic:{uniforms:n_([ok.common,ok.specularmap,ok.envmap,ok.aomap,ok.lightmap,ok.fog]),vertexShader:oB.meshbasic_vert,fragmentShader:oB.meshbasic_frag},lambert:{uniforms:n_([ok.common,ok.specularmap,ok.envmap,ok.aomap,ok.lightmap,ok.emissivemap,ok.bumpmap,ok.normalmap,ok.displacementmap,ok.fog,ok.lights,{emissive:{value:new tz(0)}}]),vertexShader:oB.meshlambert_vert,fragmentShader:oB.meshlambert_frag},phong:{uniforms:n_([ok.common,ok.specularmap,ok.envmap,ok.aomap,ok.lightmap,ok.emissivemap,ok.bumpmap,ok.normalmap,ok.displacementmap,ok.fog,ok.lights,{emissive:{value:new tz(0)},specular:{value:new tz(1118481)},shininess:{value:30}}]),vertexShader:oB.meshphong_vert,fragmentShader:oB.meshphong_frag},standard:{uniforms:n_([ok.common,ok.envmap,ok.aomap,ok.lightmap,ok.emissivemap,ok.bumpmap,ok.normalmap,ok.displacementmap,ok.roughnessmap,ok.metalnessmap,ok.fog,ok.lights,{emissive:{value:new tz(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:oB.meshphysical_vert,fragmentShader:oB.meshphysical_frag},toon:{uniforms:n_([ok.common,ok.aomap,ok.lightmap,ok.emissivemap,ok.bumpmap,ok.normalmap,ok.displacementmap,ok.gradientmap,ok.fog,ok.lights,{emissive:{value:new tz(0)}}]),vertexShader:oB.meshtoon_vert,fragmentShader:oB.meshtoon_frag},matcap:{uniforms:n_([ok.common,ok.bumpmap,ok.normalmap,ok.displacementmap,ok.fog,{matcap:{value:null}}]),vertexShader:oB.meshmatcap_vert,fragmentShader:oB.meshmatcap_frag},points:{uniforms:n_([ok.points,ok.fog]),vertexShader:oB.points_vert,fragmentShader:oB.points_frag},dashed:{uniforms:n_([ok.common,ok.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:oB.linedashed_vert,fragmentShader:oB.linedashed_frag},depth:{uniforms:n_([ok.common,ok.displacementmap]),vertexShader:oB.depth_vert,fragmentShader:oB.depth_frag},normal:{uniforms:n_([ok.common,ok.bumpmap,ok.normalmap,ok.displacementmap,{opacity:{value:1}}]),vertexShader:oB.meshnormal_vert,fragmentShader:oB.meshnormal_frag},sprite:{uniforms:n_([ok.sprite,ok.fog]),vertexShader:oB.sprite_vert,fragmentShader:oB.sprite_frag},background:{uniforms:{uvTransform:{value:new Z},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:oB.background_vert,fragmentShader:oB.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new Z}},vertexShader:oB.backgroundCube_vert,fragmentShader:oB.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:oB.cube_vert,fragmentShader:oB.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:oB.equirect_vert,fragmentShader:oB.equirect_frag},distanceRGBA:{uniforms:n_([ok.common,ok.displacementmap,{referencePosition:{value:new eE},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:oB.distanceRGBA_vert,fragmentShader:oB.distanceRGBA_frag},shadow:{uniforms:n_([ok.lights,ok.fog,{color:{value:new tz(0)},opacity:{value:1}}]),vertexShader:oB.shadow_vert,fragmentShader:oB.shadow_frag}};oH.physical={uniforms:n_([oH.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new Z},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new Z},clearcoatNormalScale:{value:new Y(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new Z},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new Z},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new Z},sheen:{value:0},sheenColor:{value:new tz(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new Z},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new Z},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new Z},transmissionSamplerSize:{value:new Y},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new Z},attenuationDistance:{value:0},attenuationColor:{value:new tz(0)},specularColor:{value:new tz(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new Z},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new Z},anisotropyVector:{value:new Y},anisotropyMap:{value:null},anisotropyMapTransform:{value:new Z}}]),vertexShader:oB.meshphysical_vert,fragmentShader:oB.meshphysical_frag};let oV={r:0,b:0,g:0},oG=new tn,oW=new e2;function oj(e,t,n,i,r,a,s){let o,l,u=new tz(0),c=+(!0!==a),h=null,d=0,p=null;function f(e){let i=!0===e.isScene?e.background:null;return i&&i.isTexture&&(i=(e.backgroundBlurriness>0?n:t).get(i)),i}function m(t,n){t.getRGB(oV,ny(e)),i.buffers.color.setClear(oV.r,oV.g,oV.b,n,s)}return{getClearColor:function(){return u},setClearColor:function(e,t=1){u.set(e),m(u,c=t)},getClearAlpha:function(){return c},setClearAlpha:function(e){m(u,c=e)},render:function(t){let n=!1,r=f(t);null===r?m(u,c):r&&r.isColor&&(m(r,1),n=!0);let a=e.xr.getEnvironmentBlendMode();"additive"===a?i.buffers.color.setClear(0,0,0,1,s):"alpha-blend"===a&&i.buffers.color.setClear(0,0,0,0,s),(e.autoClear||n)&&(i.buffers.depth.setTest(!0),i.buffers.depth.setMask(!0),i.buffers.color.setMask(!0),e.clear(e.autoClearColor,e.autoClearDepth,e.autoClearStencil))},addToRenderList:function(t,n){let i=f(n);i&&(i.isCubeTexture||306===i.mapping)?(void 0===l&&((l=new nf(new ng(1,1,1),new nb({name:"BackgroundCubeMaterial",uniforms:nv(oH.backgroundCube.uniforms),vertexShader:oH.backgroundCube.vertexShader,fragmentShader:oH.backgroundCube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1}))).geometry.deleteAttribute("normal"),l.geometry.deleteAttribute("uv"),l.onBeforeRender=function(e,t,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(l.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),r.update(l)),oG.copy(n.backgroundRotation),oG.x*=-1,oG.y*=-1,oG.z*=-1,i.isCubeTexture&&!1===i.isRenderTargetTexture&&(oG.y*=-1,oG.z*=-1),l.material.uniforms.envMap.value=i,l.material.uniforms.flipEnvMap.value=i.isCubeTexture&&!1===i.isRenderTargetTexture?-1:1,l.material.uniforms.backgroundBlurriness.value=n.backgroundBlurriness,l.material.uniforms.backgroundIntensity.value=n.backgroundIntensity,l.material.uniforms.backgroundRotation.value.setFromMatrix4(oW.makeRotationFromEuler(oG)),l.material.toneMapped=eu.getTransfer(i.colorSpace)!==U,(h!==i||d!==i.version||p!==e.toneMapping)&&(l.material.needsUpdate=!0,h=i,d=i.version,p=e.toneMapping),l.layers.enableAll(),t.unshift(l,l.geometry,l.material,0,0,null)):i&&i.isTexture&&(void 0===o&&((o=new nf(new r9(2,2),new nb({name:"BackgroundMaterial",uniforms:nv(oH.background.uniforms),vertexShader:oH.background.vertexShader,fragmentShader:oH.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1}))).geometry.deleteAttribute("normal"),Object.defineProperty(o.material,"map",{get:function(){return this.uniforms.t2D.value}}),r.update(o)),o.material.uniforms.t2D.value=i,o.material.uniforms.backgroundIntensity.value=n.backgroundIntensity,o.material.toneMapped=eu.getTransfer(i.colorSpace)!==U,!0===i.matrixAutoUpdate&&i.updateMatrix(),o.material.uniforms.uvTransform.value.copy(i.matrix),(h!==i||d!==i.version||p!==e.toneMapping)&&(o.material.needsUpdate=!0,h=i,d=i.version,p=e.toneMapping),o.layers.enableAll(),t.unshift(o,o.geometry,o.material,0,0,null))},dispose:function(){void 0!==l&&(l.geometry.dispose(),l.material.dispose()),void 0!==o&&(o.geometry.dispose(),o.material.dispose())}}}function oX(e,t){let n=e.getParameter(e.MAX_VERTEX_ATTRIBS),i={},r=u(null),a=r,s=!1;function o(t){return e.bindVertexArray(t)}function l(t){return e.deleteVertexArray(t)}function u(e){let t=[],i=[],r=[];for(let e=0;e=0){let n=r[t],i=s[t];if(void 0===i&&("instanceMatrix"===t&&e.instanceMatrix&&(i=e.instanceMatrix),"instanceColor"===t&&e.instanceColor&&(i=e.instanceColor)),void 0===n||n.attribute!==i||i&&n.data!==i.data)return!0;o++}return a.attributesNum!==o||a.index!==i}(n,m,l,g))&&function(e,t,n,i){let r={},s=t.attributes,o=0,l=n.getAttributes();for(let t in l)if(l[t].location>=0){let n=s[t];void 0===n&&("instanceMatrix"===t&&e.instanceMatrix&&(n=e.instanceMatrix),"instanceColor"===t&&e.instanceColor&&(n=e.instanceColor));let i={};i.attribute=n,n&&n.data&&(i.data=n.data),r[t]=i,o++}a.attributes=r,a.attributesNum=o,a.index=i}(n,m,l,g),null!==g&&t.update(g,e.ELEMENT_ARRAY_BUFFER),(M||s)&&(s=!1,function(n,i,r,a){c();let s=a.attributes,o=r.getAttributes(),l=i.defaultAttributeValues;for(let i in o){let r=o[i];if(r.location>=0){let o=s[i];if(void 0===o&&("instanceMatrix"===i&&n.instanceMatrix&&(o=n.instanceMatrix),"instanceColor"===i&&n.instanceColor&&(o=n.instanceColor)),void 0!==o){let i=o.normalized,s=o.itemSize,l=t.get(o);if(void 0===l)continue;let u=l.buffer,c=l.type,p=l.bytesPerElement,m=c===e.INT||c===e.UNSIGNED_INT||1013===o.gpuType;if(o.isInterleavedBufferAttribute){let t=o.data,l=t.stride,g=o.offset;if(t.isInstancedInterleavedBuffer){for(let e=0;e0&&e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.HIGH_FLOAT).precision>0)return"highp";t="mediump"}return"mediump"===t&&e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.MEDIUM_FLOAT).precision>0&&e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}let s=void 0!==n.precision?n.precision:"highp",o=a(s);o!==s&&(console.warn("THREE.WebGLRenderer:",s,"not supported, using",o,"instead."),s=o);let l=!0===n.logarithmicDepthBuffer,u=!0===n.reverseDepthBuffer&&t.has("EXT_clip_control"),c=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS),h=e.getParameter(e.MAX_VERTEX_TEXTURE_IMAGE_UNITS);return{isWebGL2:!0,getMaxAnisotropy:function(){if(void 0!==r)return r;if(!0===t.has("EXT_texture_filter_anisotropic")){let n=t.get("EXT_texture_filter_anisotropic");r=e.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else r=0;return r},getMaxPrecision:a,textureFormatReadable:function(t){return 1023===t||i.convert(t)===e.getParameter(e.IMPLEMENTATION_COLOR_READ_FORMAT)},textureTypeReadable:function(n){let r=1016===n&&(t.has("EXT_color_buffer_half_float")||t.has("EXT_color_buffer_float"));return 1009===n||i.convert(n)===e.getParameter(e.IMPLEMENTATION_COLOR_READ_TYPE)||1015===n||!!r},precision:s,logarithmicDepthBuffer:l,reverseDepthBuffer:u,maxTextures:c,maxVertexTextures:h,maxTextureSize:e.getParameter(e.MAX_TEXTURE_SIZE),maxCubemapSize:e.getParameter(e.MAX_CUBE_MAP_TEXTURE_SIZE),maxAttributes:e.getParameter(e.MAX_VERTEX_ATTRIBS),maxVertexUniforms:e.getParameter(e.MAX_VERTEX_UNIFORM_VECTORS),maxVaryings:e.getParameter(e.MAX_VARYING_VECTORS),maxFragmentUniforms:e.getParameter(e.MAX_FRAGMENT_UNIFORM_VECTORS),vertexTextures:h>0,maxSamples:e.getParameter(e.MAX_SAMPLES)}}function oZ(e){let t=this,n=null,i=0,r=!1,a=!1,s=new iy,o=new Z,l={value:null,needsUpdate:!1};function u(e,n,i,r){let a=null!==e?e.length:0,u=null;if(0!==a){if(u=l.value,!0!==r||null===u){let t=i+4*a,r=n.matrixWorldInverse;o.getNormalMatrix(r),(null===u||u.length0),t.numPlanes=i,t.numIntersection=0)}}function oJ(e){let t=new WeakMap;function n(e,t){return 303===t?e.mapping=301:304===t&&(e.mapping=302),e}function i(e){let n=e.target;n.removeEventListener("dispose",i);let r=t.get(n);void 0!==r&&(t.delete(n),r.dispose())}return{get:function(r){if(r&&r.isTexture){let a=r.mapping;if(303===a||304===a)if(t.has(r))return n(t.get(r).texture,r.mapping);else{let a=r.image;if(!a||!(a.height>0))return null;{let s=new nR(a.height);return s.fromEquirectangularTexture(e,r),t.set(r,s),r.addEventListener("dispose",i),n(s.texture,r.mapping)}}}return r},dispose:function(){t=new WeakMap}}}let oK=[.125,.215,.35,.446,.526,.582],o$=new sn,oQ=new tz,o0=null,o1=0,o2=0,o3=!1,o4=(1+Math.sqrt(5))/2,o5=1/o4,o6=[new eE(-o4,o5,0),new eE(o4,o5,0),new eE(-o5,0,o4),new eE(o5,0,o4),new eE(0,o4,-o5),new eE(0,o4,o5),new eE(-1,1,-1),new eE(1,1,-1),new eE(-1,1,1),new eE(1,1,1)];class o8{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(e,t=0,n=.1,i=100){o0=this._renderer.getRenderTarget(),o1=this._renderer.getActiveCubeFace(),o2=this._renderer.getActiveMipmapLevel(),o3=this._renderer.xr.enabled,this._renderer.xr.enabled=!1,this._setSize(256);let r=this._allocateTargets();return r.depthBuffer=!0,this._sceneToCubeUV(e,n,i,r),t>0&&this._blur(r,0,0,t),this._applyPMREM(r),this._cleanup(r),r}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){null===this._cubemapMaterial&&(this._cubemapMaterial=lt(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){null===this._equirectMaterial&&(this._equirectMaterial=le(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),null!==this._cubemapMaterial&&this._cubemapMaterial.dispose(),null!==this._equirectMaterial&&this._equirectMaterial.dispose()}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){null!==this._blurMaterial&&this._blurMaterial.dispose(),null!==this._pingPongRenderTarget&&this._pingPongRenderTarget.dispose();for(let e=0;ee-4?o=oK[s-e+4-1]:0===s&&(o=0),i.push(o);let l=1/(a-2),u=-l,c=1+l,h=[u,u,c,u,c,c,u,u,c,c,u,c],d=new Float32Array(108),p=new Float32Array(72),f=new Float32Array(36);for(let e=0;e<6;e++){let t=e%3*2/3-1,n=e>2?0:-1,i=[t,n,0,t+2/3,n,0,t+2/3,n+1,0,t,n,0,t+2/3,n+1,0,t,n+1,0];d.set(i,18*e),p.set(h,12*e);let r=[e,e,e,e,e,e];f.set(r,6*e)}let m=new nn;m.setAttribute("position",new tZ(d,3)),m.setAttribute("uv",new tZ(p,2)),m.setAttribute("faceIndex",new tZ(f,1)),t.push(m),r>4&&r--}return{lodPlanes:t,sizeLods:n,sigmas:i}}(i)),this._blurMaterial=(r=i,new nb({name:"SphericalGaussianBlur",defines:{n:20,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/t,CUBEUV_MAX_MIP:`${r}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:new Float32Array(20)},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:new eE(0,1,0)}},vertexShader:ln(),fragmentShader:` - - precision mediump float; - precision mediump int; - - varying vec3 vOutputDirection; - - uniform sampler2D envMap; - uniform int samples; - uniform float weights[ n ]; - uniform bool latitudinal; - uniform float dTheta; - uniform float mipInt; - uniform vec3 poleAxis; - - #define ENVMAP_TYPE_CUBE_UV - #include - - vec3 getSample( float theta, vec3 axis ) { - - float cosTheta = cos( theta ); - // Rodrigues' axis-angle rotation - vec3 sampleDirection = vOutputDirection * cosTheta - + cross( axis, vOutputDirection ) * sin( theta ) - + axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta ); - - return bilinearCubeUV( envMap, sampleDirection, mipInt ); - - } - - void main() { - - vec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection ); - - if ( all( equal( axis, vec3( 0.0 ) ) ) ) { - - axis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x ); - - } - - axis = normalize( axis ); - - gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 ); - gl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis ); - - for ( int i = 1; i < n; i++ ) { - - if ( i >= samples ) { - - break; - - } - - float theta = dTheta * float( i ); - gl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis ); - gl_FragColor.rgb += weights[ i ] * getSample( theta, axis ); - - } - - } - `,blending:0,depthTest:!1,depthWrite:!1}))}return i}_compileMaterial(e){let t=new nf(this._lodPlanes[0],e);this._renderer.compile(t,o$)}_sceneToCubeUV(e,t,n,i){let r=new nE(90,1,t,n),a=[1,-1,1,1,1,1],s=[1,1,1,-1,-1,-1],o=this._renderer,l=o.autoClear,u=o.toneMapping;o.getClearColor(oQ),o.toneMapping=0,o.autoClear=!1;let c=new tV({name:"PMREM.Background",side:1,depthWrite:!1,depthTest:!1}),h=new nf(new ng,c),d=!1,p=e.background;p?p.isColor&&(c.color.copy(p),e.background=null,d=!0):(c.color.copy(oQ),d=!0);for(let t=0;t<6;t++){let n=t%3;0===n?(r.up.set(0,a[t],0),r.lookAt(s[t],0,0)):1===n?(r.up.set(0,0,a[t]),r.lookAt(0,s[t],0)):(r.up.set(0,a[t],0),r.lookAt(0,0,s[t]));let l=this._cubeSize;o7(i,n*l,t>2?l:0,l,l),o.setRenderTarget(i),d&&o.render(h,r),o.render(e,r)}h.geometry.dispose(),h.material.dispose(),o.toneMapping=u,o.autoClear=l,e.background=p}_textureToCubeUV(e,t){let n=this._renderer,i=301===e.mapping||302===e.mapping;i?(null===this._cubemapMaterial&&(this._cubemapMaterial=lt()),this._cubemapMaterial.uniforms.flipEnvMap.value=!1===e.isRenderTargetTexture?-1:1):null===this._equirectMaterial&&(this._equirectMaterial=le());let r=i?this._cubemapMaterial:this._equirectMaterial,a=new nf(this._lodPlanes[0],r);r.uniforms.envMap.value=e;let s=this._cubeSize;o7(t,0,0,3*s,2*s),n.setRenderTarget(t),n.render(a,o$)}_applyPMREM(e){let t=this._renderer,n=t.autoClear;t.autoClear=!1;let i=this._lodPlanes.length;for(let t=1;t20&&console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${f} samples when the maximum is set to 20`);let m=[],g=0;for(let e=0;e<20;++e){let t=e/p,n=Math.exp(-t*t/2);m.push(n),0===e?g+=n:ev-4?i-v+4:0),y,3*_,2*_),o.setRenderTarget(t),o.render(u,o$)}}function o9(e,t,n){let i=new ex(e,t,n);return i.texture.mapping=306,i.texture.name="PMREM.cubeUv",i.scissorTest=!0,i}function o7(e,t,n,i,r){e.viewport.set(t,n,i,r),e.scissor.set(t,n,i,r)}function le(){return new nb({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:ln(),fragmentShader:` - - precision mediump float; - precision mediump int; - - varying vec3 vOutputDirection; - - uniform sampler2D envMap; - - #include - - void main() { - - vec3 outputDirection = normalize( vOutputDirection ); - vec2 uv = equirectUv( outputDirection ); - - gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 ); - - } - `,blending:0,depthTest:!1,depthWrite:!1})}function lt(){return new nb({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:ln(),fragmentShader:` - - precision mediump float; - precision mediump int; - - uniform float flipEnvMap; - - varying vec3 vOutputDirection; - - uniform samplerCube envMap; - - void main() { - - gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) ); - - } - `,blending:0,depthTest:!1,depthWrite:!1})}function ln(){return` - - precision mediump float; - precision mediump int; - - attribute float faceIndex; - - varying vec3 vOutputDirection; - - // RH coordinate system; PMREM face-indexing convention - vec3 getDirection( vec2 uv, float face ) { - - uv = 2.0 * uv - 1.0; - - vec3 direction = vec3( uv, 1.0 ); - - if ( face == 0.0 ) { - - direction = direction.zyx; // ( 1, v, u ) pos x - - } else if ( face == 1.0 ) { - - direction = direction.xzy; - direction.xz *= -1.0; // ( -u, 1, -v ) pos y - - } else if ( face == 2.0 ) { - - direction.x *= -1.0; // ( -u, v, 1 ) pos z - - } else if ( face == 3.0 ) { - - direction = direction.zyx; - direction.xz *= -1.0; // ( -1, v, -u ) neg x - - } else if ( face == 4.0 ) { - - direction = direction.xzy; - direction.xy *= -1.0; // ( -u, -1, v ) neg y - - } else if ( face == 5.0 ) { - - direction.z *= -1.0; // ( u, v, -1 ) neg z - - } - - return direction; - - } - - void main() { - - vOutputDirection = getDirection( uv, faceIndex ); - gl_Position = vec4( position, 1.0 ); - - } - `}function li(e){let t=new WeakMap,n=null;function i(e){let n=e.target;n.removeEventListener("dispose",i);let r=t.get(n);void 0!==r&&(t.delete(n),r.dispose())}return{get:function(r){if(r&&r.isTexture){let a=r.mapping,s=303===a||304===a,o=301===a||302===a;if(s||o){let a=t.get(r),l=void 0!==a?a.texture.pmremVersion:0;if(r.isRenderTargetTexture&&r.pmremVersion!==l)return null===n&&(n=new o8(e)),(a=s?n.fromEquirectangular(r,a):n.fromCubemap(r,a)).texture.pmremVersion=r.pmremVersion,t.set(r,a),a.texture;{if(void 0!==a)return a.texture;let l=r.image;return s&&l&&l.height>0||o&&l&&function(e){let t=0;for(let n=0;n<6;n++)void 0!==e[n]&&t++;return 6===t}(l)?(null===n&&(n=new o8(e)),(a=s?n.fromEquirectangular(r):n.fromCubemap(r)).texture.pmremVersion=r.pmremVersion,t.set(r,a),r.addEventListener("dispose",i),a.texture):null}}}return r},dispose:function(){t=new WeakMap,null!==n&&(n.dispose(),n=null)}}}function lr(e){let t={};function n(n){let i;if(void 0!==t[n])return t[n];switch(n){case"WEBGL_depth_texture":i=e.getExtension("WEBGL_depth_texture")||e.getExtension("MOZ_WEBGL_depth_texture")||e.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":i=e.getExtension("EXT_texture_filter_anisotropic")||e.getExtension("MOZ_EXT_texture_filter_anisotropic")||e.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":i=e.getExtension("WEBGL_compressed_texture_s3tc")||e.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||e.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":i=e.getExtension("WEBGL_compressed_texture_pvrtc")||e.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:i=e.getExtension(n)}return t[n]=i,i}return{has:function(e){return null!==n(e)},init:function(){n("EXT_color_buffer_float"),n("WEBGL_clip_cull_distance"),n("OES_texture_float_linear"),n("EXT_color_buffer_half_float"),n("WEBGL_multisampled_render_to_texture"),n("WEBGL_render_shared_exponent")},get:function(e){let t=n(e);return null===t&&ei("THREE.WebGLRenderer: "+e+" extension not supported."),t}}}function la(e,t,n,i){let r={},a=new WeakMap;function s(e){let o=e.target;for(let e in null!==o.index&&t.remove(o.index),o.attributes)t.remove(o.attributes[e]);o.removeEventListener("dispose",s),delete r[o.id];let l=a.get(o);l&&(t.remove(l),a.delete(o)),i.releaseStatesOfGeometry(o),!0===o.isInstancedBufferGeometry&&delete o._maxInstanceCount,n.memory.geometries--}function o(e){let n=[],i=e.index,r=e.attributes.position,s=0;if(null!==i){let e=i.array;s=i.version;for(let t=0,i=e.length;tt.maxTextureSize&&(f=Math.ceil(p/t.maxTextureSize),p=t.maxTextureSize);let m=new Float32Array(p*f*4*c),g=new eb(m,p,f,c);g.type=1015,g.needsUpdate=!0;let v=4*d;for(let t=0;t0)return e;let r=t*n,a=lm[r];if(void 0===a&&(a=new Float32Array(r),lm[r]=a),0!==t){i.toArray(a,0);for(let i=1,r=0;i!==t;++i)r+=n,e[i].toArray(a,r)}return a}function lb(e,t){if(e.length!==t.length)return!1;for(let n=0,i=e.length;n":" "} ${r}: ${n[e]}`)}return i.join("\n")}(e.getShaderSource(t),i)}}let ul=new eE;function uu(e){return""!==e}function uc(e,t){let n=t.numSpotLightShadows+t.numSpotLightMaps-t.numSpotLightShadowsWithMaps;return e.replace(/NUM_DIR_LIGHTS/g,t.numDirLights).replace(/NUM_SPOT_LIGHTS/g,t.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g,t.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g,n).replace(/NUM_RECT_AREA_LIGHTS/g,t.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,t.numPointLights).replace(/NUM_HEMI_LIGHTS/g,t.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,t.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g,t.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g,t.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,t.numPointLightShadows)}function uh(e,t){return e.replace(/NUM_CLIPPING_PLANES/g,t.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,t.numClippingPlanes-t.numClipIntersection)}let ud=/^[ \t]*#include +<([\w\d./]+)>/gm;function up(e){return e.replace(ud,um)}let uf=new Map;function um(e,t){let n=oB[t];if(void 0===n){let e=uf.get(t);if(void 0!==e)n=oB[e],console.warn('THREE.WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.',t,e);else throw Error("Can not resolve #include <"+t+">")}return up(n)}let ug=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function uv(e){return e.replace(ug,u_)}function u_(e,t,n,i){let r="";for(let e=parseInt(t);e0&&(r+="\n"),(a=["#define SHADER_TYPE "+n.shaderType,"#define SHADER_NAME "+n.shaderName,x].filter(uu).join("\n")).length>0&&(a+="\n");else{let e,t,i,s;r=[uy(n),"#define SHADER_TYPE "+n.shaderType,"#define SHADER_NAME "+n.shaderName,x,n.extensionClipCullDistance?"#define USE_CLIP_DISTANCE":"",n.batching?"#define USE_BATCHING":"",n.batchingColor?"#define USE_BATCHING_COLOR":"",n.instancing?"#define USE_INSTANCING":"",n.instancingColor?"#define USE_INSTANCING_COLOR":"",n.instancingMorph?"#define USE_INSTANCING_MORPH":"",n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+g:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",n.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",n.displacementMap?"#define USE_DISPLACEMENTMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.anisotropy?"#define USE_ANISOTROPY":"",n.anisotropyMap?"#define USE_ANISOTROPYMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",n.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",n.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.alphaHash?"#define USE_ALPHAHASH":"",n.transmission?"#define USE_TRANSMISSION":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.thicknessMap?"#define USE_THICKNESSMAP":"",n.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",n.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",n.mapUv?"#define MAP_UV "+n.mapUv:"",n.alphaMapUv?"#define ALPHAMAP_UV "+n.alphaMapUv:"",n.lightMapUv?"#define LIGHTMAP_UV "+n.lightMapUv:"",n.aoMapUv?"#define AOMAP_UV "+n.aoMapUv:"",n.emissiveMapUv?"#define EMISSIVEMAP_UV "+n.emissiveMapUv:"",n.bumpMapUv?"#define BUMPMAP_UV "+n.bumpMapUv:"",n.normalMapUv?"#define NORMALMAP_UV "+n.normalMapUv:"",n.displacementMapUv?"#define DISPLACEMENTMAP_UV "+n.displacementMapUv:"",n.metalnessMapUv?"#define METALNESSMAP_UV "+n.metalnessMapUv:"",n.roughnessMapUv?"#define ROUGHNESSMAP_UV "+n.roughnessMapUv:"",n.anisotropyMapUv?"#define ANISOTROPYMAP_UV "+n.anisotropyMapUv:"",n.clearcoatMapUv?"#define CLEARCOATMAP_UV "+n.clearcoatMapUv:"",n.clearcoatNormalMapUv?"#define CLEARCOAT_NORMALMAP_UV "+n.clearcoatNormalMapUv:"",n.clearcoatRoughnessMapUv?"#define CLEARCOAT_ROUGHNESSMAP_UV "+n.clearcoatRoughnessMapUv:"",n.iridescenceMapUv?"#define IRIDESCENCEMAP_UV "+n.iridescenceMapUv:"",n.iridescenceThicknessMapUv?"#define IRIDESCENCE_THICKNESSMAP_UV "+n.iridescenceThicknessMapUv:"",n.sheenColorMapUv?"#define SHEEN_COLORMAP_UV "+n.sheenColorMapUv:"",n.sheenRoughnessMapUv?"#define SHEEN_ROUGHNESSMAP_UV "+n.sheenRoughnessMapUv:"",n.specularMapUv?"#define SPECULARMAP_UV "+n.specularMapUv:"",n.specularColorMapUv?"#define SPECULAR_COLORMAP_UV "+n.specularColorMapUv:"",n.specularIntensityMapUv?"#define SPECULAR_INTENSITYMAP_UV "+n.specularIntensityMapUv:"",n.transmissionMapUv?"#define TRANSMISSIONMAP_UV "+n.transmissionMapUv:"",n.thicknessMapUv?"#define THICKNESSMAP_UV "+n.thicknessMapUv:"",n.vertexTangents&&!1===n.flatShading?"#define USE_TANGENT":"",n.vertexColors?"#define USE_COLOR":"",n.vertexAlphas?"#define USE_COLOR_ALPHA":"",n.vertexUv1s?"#define USE_UV1":"",n.vertexUv2s?"#define USE_UV2":"",n.vertexUv3s?"#define USE_UV3":"",n.pointsUvs?"#define USE_POINTS_UV":"",n.flatShading?"#define FLAT_SHADED":"",n.skinning?"#define USE_SKINNING":"",n.morphTargets?"#define USE_MORPHTARGETS":"",n.morphNormals&&!1===n.flatShading?"#define USE_MORPHNORMALS":"",n.morphColors?"#define USE_MORPHCOLORS":"",n.morphTargetsCount>0?"#define MORPHTARGETS_TEXTURE_STRIDE "+n.morphTextureStride:"",n.morphTargetsCount>0?"#define MORPHTARGETS_COUNT "+n.morphTargetsCount:"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+f:"",n.sizeAttenuation?"#define USE_SIZEATTENUATION":"",n.numLightProbes>0?"#define USE_LIGHT_PROBES":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.reverseDepthBuffer?"#define USE_REVERSEDEPTHBUF":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING"," attribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR"," attribute vec3 instanceColor;","#endif","#ifdef USE_INSTANCING_MORPH"," uniform sampler2D morphTexture;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_UV1"," attribute vec2 uv1;","#endif","#ifdef USE_UV2"," attribute vec2 uv2;","#endif","#ifdef USE_UV3"," attribute vec2 uv3;","#endif","#ifdef USE_TANGENT"," attribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )"," attribute vec4 color;","#elif defined( USE_COLOR )"," attribute vec3 color;","#endif","#ifdef USE_SKINNING"," attribute vec4 skinIndex;"," attribute vec4 skinWeight;","#endif","\n"].filter(uu).join("\n"),a=[uy(n),"#define SHADER_TYPE "+n.shaderType,"#define SHADER_NAME "+n.shaderName,x,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.alphaToCoverage?"#define ALPHA_TO_COVERAGE":"",n.map?"#define USE_MAP":"",n.matcap?"#define USE_MATCAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+m:"",n.envMap?"#define "+g:"",n.envMap?"#define "+v:"",_?"#define CUBEUV_TEXEL_WIDTH "+_.texelWidth:"",_?"#define CUBEUV_TEXEL_HEIGHT "+_.texelHeight:"",_?"#define CUBEUV_MAX_MIP "+_.maxMip+".0":"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",n.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.anisotropy?"#define USE_ANISOTROPY":"",n.anisotropyMap?"#define USE_ANISOTROPYMAP":"",n.clearcoat?"#define USE_CLEARCOAT":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.dispersion?"#define USE_DISPERSION":"",n.iridescence?"#define USE_IRIDESCENCE":"",n.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",n.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",n.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.alphaTest?"#define USE_ALPHATEST":"",n.alphaHash?"#define USE_ALPHAHASH":"",n.sheen?"#define USE_SHEEN":"",n.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",n.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",n.transmission?"#define USE_TRANSMISSION":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.thicknessMap?"#define USE_THICKNESSMAP":"",n.vertexTangents&&!1===n.flatShading?"#define USE_TANGENT":"",n.vertexColors||n.instancingColor||n.batchingColor?"#define USE_COLOR":"",n.vertexAlphas?"#define USE_COLOR_ALPHA":"",n.vertexUv1s?"#define USE_UV1":"",n.vertexUv2s?"#define USE_UV2":"",n.vertexUv3s?"#define USE_UV3":"",n.pointsUvs?"#define USE_POINTS_UV":"",n.gradientMap?"#define USE_GRADIENTMAP":"",n.flatShading?"#define FLAT_SHADED":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+f:"",n.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",n.numLightProbes>0?"#define USE_LIGHT_PROBES":"",n.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",n.decodeVideoTextureEmissive?"#define DECODE_VIDEO_TEXTURE_EMISSIVE":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.reverseDepthBuffer?"#define USE_REVERSEDEPTHBUF":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",0!==n.toneMapping?"#define TONE_MAPPING":"",0!==n.toneMapping?oB.tonemapping_pars_fragment:"",0!==n.toneMapping?function(e,t){let n;switch(t){case 1:n="Linear";break;case 2:n="Reinhard";break;case 3:n="Cineon";break;case 4:n="ACESFilmic";break;case 6:n="AgX";break;case 7:n="Neutral";break;case 5:n="Custom";break;default:console.warn("THREE.WebGLProgram: Unsupported toneMapping:",t),n="Linear"}return"vec3 "+e+"( vec3 color ) { return "+n+"ToneMapping( color ); }"}("toneMapping",n.toneMapping):"",n.dithering?"#define DITHERING":"",n.opaque?"#define OPAQUE":"",oB.colorspace_pars_fragment,(e=function(e){eu._getMatrix(us,eu.workingColorSpace,e);let t=`mat3( ${us.elements.map(e=>e.toFixed(4))} )`;switch(eu.getTransfer(e)){case N:return[t,"LinearTransferOETF"];case U:return[t,"sRGBTransferOETF"];default:return console.warn("THREE.WebGLProgram: Unsupported color space: ",e),[t,"LinearTransferOETF"]}}(n.outputColorSpace),`vec4 linearToOutputTexel( vec4 value ) { - return ${e[1]}( vec4( value.rgb * ${e[0]}, value.a ) ); -}`),(eu.getLuminanceCoefficients(ul),t=ul.x.toFixed(4),i=ul.y.toFixed(4),s=ul.z.toFixed(4),`float luminance( const in vec3 rgb ) { - const vec3 weights = vec3( ${t}, ${i}, ${s} ); - return dot( weights, rgb ); -}`),n.useDepthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(uu).join("\n")}d=uh(d=uc(d=up(d),n),n),p=uh(p=uc(p=up(p),n),n),d=uv(d),p=uv(p),!0!==n.isRawShaderMaterial&&(S="#version 300 es\n",r=[y,"#define attribute in\n#define varying out\n#define texture2D texture"].join("\n")+"\n"+r,a=["#define varying in",n.glslVersion===D?"":"layout(location = 0) out highp vec4 pc_fragColor;",n.glslVersion===D?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth\n#define texture2D texture\n#define textureCube texture\n#define texture2DProj textureProj\n#define texture2DLodEXT textureLod\n#define texture2DProjLodEXT textureProjLod\n#define textureCubeLodEXT textureLod\n#define texture2DGradEXT textureGrad\n#define texture2DProjGradEXT textureProjGrad\n#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+a);let M=S+r+d,T=S+a+p,w=ur(c,c.VERTEX_SHADER,M),E=ur(c,c.FRAGMENT_SHADER,T);function A(t){if(e.debug.checkShaderErrors){let n=c.getProgramInfoLog(b).trim(),i=c.getShaderInfoLog(w).trim(),s=c.getShaderInfoLog(E).trim(),o=!0,l=!0;if(!1===c.getProgramParameter(b,c.LINK_STATUS))if(o=!1,"function"==typeof e.debug.onShaderError)e.debug.onShaderError(c,b,w,E);else{let e=uo(c,w,"vertex"),i=uo(c,E,"fragment");console.error("THREE.WebGLProgram: Shader Error "+c.getError()+" - VALIDATE_STATUS "+c.getProgramParameter(b,c.VALIDATE_STATUS)+"\n\nMaterial Name: "+t.name+"\nMaterial Type: "+t.type+"\n\nProgram Info Log: "+n+"\n"+e+"\n"+i)}else""!==n?console.warn("THREE.WebGLProgram: Program Info Log:",n):(""===i||""===s)&&(l=!1);l&&(t.diagnostics={runnable:o,programLog:n,vertexShader:{log:i,prefix:r},fragmentShader:{log:s,prefix:a}})}c.deleteShader(w),c.deleteShader(E),s=new ui(c,b),o=function(e,t){let n={},i=e.getProgramParameter(t,e.ACTIVE_ATTRIBUTES);for(let r=0;r0,Z=a.clearcoat>0,J=a.dispersion>0,K=a.iridescence>0,$=a.sheen>0,Q=a.transmission>0,ee=Y&&!!a.anisotropyMap,et=Z&&!!a.clearcoatMap,en=Z&&!!a.clearcoatNormalMap,ei=Z&&!!a.clearcoatRoughnessMap,er=K&&!!a.iridescenceMap,ea=K&&!!a.iridescenceThicknessMap,es=$&&!!a.sheenColorMap,eo=$&&!!a.sheenRoughnessMap,el=!!a.specularMap,ec=!!a.specularColorMap,eh=!!a.specularIntensityMap,ed=Q&&!!a.transmissionMap,ep=Q&&!!a.thicknessMap,ef=!!a.gradientMap,em=!!a.alphaMap,eg=a.alphaTest>0,ev=!!a.alphaHash,e_=!!a.extensions,ey=0;a.toneMapped&&(null===I||!0===I.isXRRenderTarget)&&(ey=e.toneMapping);let ex={shaderID:A,shaderType:a.type,shaderName:a.name,vertexShader:_,fragmentShader:y,defines:a.defines,customVertexShaderID:x,customFragmentShaderID:b,isRawShaderMaterial:!0===a.isRawShaderMaterial,glslVersion:a.glslVersion,precision:p,batching:O,batchingColor:O&&null!==v._colorsTexture,instancing:D,instancingColor:D&&null!==v.instanceColor,instancingMorph:D&&null!==v.morphTexture,supportsVertexTextures:d,outputColorSpace:null===I?e.outputColorSpace:!0===I.isXRRenderTarget?I.texture.colorSpace:L,alphaToCoverage:!!a.alphaToCoverage,map:F,matcap:z,envMap:B,envMapMode:B&&w.mapping,envMapCubeUVHeight:E,aoMap:k,lightMap:H,bumpMap:V,normalMap:G,displacementMap:d&&W,emissiveMap:j,normalMapObjectSpace:G&&1===a.normalMapType,normalMapTangentSpace:G&&0===a.normalMapType,metalnessMap:X,roughnessMap:q,anisotropy:Y,anisotropyMap:ee,clearcoat:Z,clearcoatMap:et,clearcoatNormalMap:en,clearcoatRoughnessMap:ei,dispersion:J,iridescence:K,iridescenceMap:er,iridescenceThicknessMap:ea,sheen:$,sheenColorMap:es,sheenRoughnessMap:eo,specularMap:el,specularColorMap:ec,specularIntensityMap:eh,transmission:Q,transmissionMap:ed,thicknessMap:ep,gradientMap:ef,opaque:!1===a.transparent&&1===a.blending&&!1===a.alphaToCoverage,alphaMap:em,alphaTest:eg,alphaHash:ev,combine:a.combine,mapUv:F&&m(a.map.channel),aoMapUv:k&&m(a.aoMap.channel),lightMapUv:H&&m(a.lightMap.channel),bumpMapUv:V&&m(a.bumpMap.channel),normalMapUv:G&&m(a.normalMap.channel),displacementMapUv:W&&m(a.displacementMap.channel),emissiveMapUv:j&&m(a.emissiveMap.channel),metalnessMapUv:X&&m(a.metalnessMap.channel),roughnessMapUv:q&&m(a.roughnessMap.channel),anisotropyMapUv:ee&&m(a.anisotropyMap.channel),clearcoatMapUv:et&&m(a.clearcoatMap.channel),clearcoatNormalMapUv:en&&m(a.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:ei&&m(a.clearcoatRoughnessMap.channel),iridescenceMapUv:er&&m(a.iridescenceMap.channel),iridescenceThicknessMapUv:ea&&m(a.iridescenceThicknessMap.channel),sheenColorMapUv:es&&m(a.sheenColorMap.channel),sheenRoughnessMapUv:eo&&m(a.sheenRoughnessMap.channel),specularMapUv:el&&m(a.specularMap.channel),specularColorMapUv:ec&&m(a.specularColorMap.channel),specularIntensityMapUv:eh&&m(a.specularIntensityMap.channel),transmissionMapUv:ed&&m(a.transmissionMap.channel),thicknessMapUv:ep&&m(a.thicknessMap.channel),alphaMapUv:em&&m(a.alphaMap.channel),vertexTangents:!!M.attributes.tangent&&(G||Y),vertexColors:a.vertexColors,vertexAlphas:!0===a.vertexColors&&!!M.attributes.color&&4===M.attributes.color.itemSize,pointsUvs:!0===v.isPoints&&!!M.attributes.uv&&(F||em),fog:!!S,useFog:!0===a.fog,fogExp2:!!S&&S.isFogExp2,flatShading:!0===a.flatShading,sizeAttenuation:!0===a.sizeAttenuation,logarithmicDepthBuffer:h,reverseDepthBuffer:N,skinning:!0===v.isSkinnedMesh,morphTargets:void 0!==M.morphAttributes.position,morphNormals:void 0!==M.morphAttributes.normal,morphColors:void 0!==M.morphAttributes.color,morphTargetsCount:R,morphTextureStride:P,numDirLights:o.directional.length,numPointLights:o.point.length,numSpotLights:o.spot.length,numSpotLightMaps:o.spotLightMap.length,numRectAreaLights:o.rectArea.length,numHemiLights:o.hemi.length,numDirLightShadows:o.directionalShadowMap.length,numPointLightShadows:o.pointShadowMap.length,numSpotLightShadows:o.spotShadowMap.length,numSpotLightShadowsWithMaps:o.numSpotLightShadowsWithMaps,numLightProbes:o.numLightProbes,numClippingPlanes:s.numPlanes,numClipIntersection:s.numIntersection,dithering:a.dithering,shadowMapEnabled:e.shadowMap.enabled&&c.length>0,shadowMapType:e.shadowMap.type,toneMapping:ey,decodeVideoTexture:F&&!0===a.map.isVideoTexture&&eu.getTransfer(a.map.colorSpace)===U,decodeVideoTextureEmissive:j&&!0===a.emissiveMap.isVideoTexture&&eu.getTransfer(a.emissiveMap.colorSpace)===U,premultipliedAlpha:a.premultipliedAlpha,doubleSided:2===a.side,flipSided:1===a.side,useDepthPacking:a.depthPacking>=0,depthPacking:a.depthPacking||0,index0AttributeName:a.index0AttributeName,extensionClipCullDistance:e_&&!0===a.extensions.clipCullDistance&&i.has("WEBGL_clip_cull_distance"),extensionMultiDraw:(e_&&!0===a.extensions.multiDraw||O)&&i.has("WEBGL_multi_draw"),rendererExtensionParallelShaderCompile:i.has("KHR_parallel_shader_compile"),customProgramCacheKey:a.customProgramCacheKey()};return ex.vertexUv1s=u.has(1),ex.vertexUv2s=u.has(2),ex.vertexUv3s=u.has(3),u.clear(),ex},getProgramCacheKey:function(t){var n,i,r,a;let s=[];if(t.shaderID?s.push(t.shaderID):(s.push(t.customVertexShaderID),s.push(t.customFragmentShaderID)),void 0!==t.defines)for(let e in t.defines)s.push(e),s.push(t.defines[e]);return!1===t.isRawShaderMaterial&&(n=s,i=t,n.push(i.precision),n.push(i.outputColorSpace),n.push(i.envMapMode),n.push(i.envMapCubeUVHeight),n.push(i.mapUv),n.push(i.alphaMapUv),n.push(i.lightMapUv),n.push(i.aoMapUv),n.push(i.bumpMapUv),n.push(i.normalMapUv),n.push(i.displacementMapUv),n.push(i.emissiveMapUv),n.push(i.metalnessMapUv),n.push(i.roughnessMapUv),n.push(i.anisotropyMapUv),n.push(i.clearcoatMapUv),n.push(i.clearcoatNormalMapUv),n.push(i.clearcoatRoughnessMapUv),n.push(i.iridescenceMapUv),n.push(i.iridescenceThicknessMapUv),n.push(i.sheenColorMapUv),n.push(i.sheenRoughnessMapUv),n.push(i.specularMapUv),n.push(i.specularColorMapUv),n.push(i.specularIntensityMapUv),n.push(i.transmissionMapUv),n.push(i.thicknessMapUv),n.push(i.combine),n.push(i.fogExp2),n.push(i.sizeAttenuation),n.push(i.morphTargetsCount),n.push(i.morphAttributeCount),n.push(i.numDirLights),n.push(i.numPointLights),n.push(i.numSpotLights),n.push(i.numSpotLightMaps),n.push(i.numHemiLights),n.push(i.numRectAreaLights),n.push(i.numDirLightShadows),n.push(i.numPointLightShadows),n.push(i.numSpotLightShadows),n.push(i.numSpotLightShadowsWithMaps),n.push(i.numLightProbes),n.push(i.shadowMapType),n.push(i.toneMapping),n.push(i.numClippingPlanes),n.push(i.numClipIntersection),n.push(i.depthPacking),r=s,a=t,o.disableAll(),a.supportsVertexTextures&&o.enable(0),a.instancing&&o.enable(1),a.instancingColor&&o.enable(2),a.instancingMorph&&o.enable(3),a.matcap&&o.enable(4),a.envMap&&o.enable(5),a.normalMapObjectSpace&&o.enable(6),a.normalMapTangentSpace&&o.enable(7),a.clearcoat&&o.enable(8),a.iridescence&&o.enable(9),a.alphaTest&&o.enable(10),a.vertexColors&&o.enable(11),a.vertexAlphas&&o.enable(12),a.vertexUv1s&&o.enable(13),a.vertexUv2s&&o.enable(14),a.vertexUv3s&&o.enable(15),a.vertexTangents&&o.enable(16),a.anisotropy&&o.enable(17),a.alphaHash&&o.enable(18),a.batching&&o.enable(19),a.dispersion&&o.enable(20),a.batchingColor&&o.enable(21),r.push(o.mask),o.disableAll(),a.fog&&o.enable(0),a.useFog&&o.enable(1),a.flatShading&&o.enable(2),a.logarithmicDepthBuffer&&o.enable(3),a.reverseDepthBuffer&&o.enable(4),a.skinning&&o.enable(5),a.morphTargets&&o.enable(6),a.morphNormals&&o.enable(7),a.morphColors&&o.enable(8),a.premultipliedAlpha&&o.enable(9),a.shadowMapEnabled&&o.enable(10),a.doubleSided&&o.enable(11),a.flipSided&&o.enable(12),a.useDepthPacking&&o.enable(13),a.dithering&&o.enable(14),a.transmission&&o.enable(15),a.sheen&&o.enable(16),a.opaque&&o.enable(17),a.pointsUvs&&o.enable(18),a.decodeVideoTexture&&o.enable(19),a.decodeVideoTextureEmissive&&o.enable(20),a.alphaToCoverage&&o.enable(21),r.push(o.mask),s.push(e.outputColorSpace)),s.push(t.customProgramCacheKey),s.join()},getUniforms:function(e){let t,n=f[e.type];if(n){let e=oH[n];t=nx.clone(e.uniforms)}else t=e.uniforms;return t},acquireProgram:function(t,n){let i;for(let e=0,t=c.length;e0?i.push(c):!0===s.transparent?r.push(c):n.push(c)},unshift:function(e,t,s,o,l,u){let c=a(e,t,s,o,l,u);s.transmission>0?i.unshift(c):!0===s.transparent?r.unshift(c):n.unshift(c)},finish:function(){for(let n=t,i=e.length;n1&&n.sort(e||uE),i.length>1&&i.sort(t||uA),r.length>1&&r.sort(t||uA)}}}function uR(){let e=new WeakMap;return{get:function(t,n){let i,r=e.get(t);return void 0===r?(i=new uC,e.set(t,[i])):n>=r.length?(i=new uC,r.push(i)):i=r[n],i},dispose:function(){e=new WeakMap}}}function uP(){let e={};return{get:function(t){let n;if(void 0!==e[t.id])return e[t.id];switch(t.type){case"DirectionalLight":n={direction:new eE,color:new tz};break;case"SpotLight":n={position:new eE,direction:new eE,color:new tz,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":n={position:new eE,color:new tz,distance:0,decay:0};break;case"HemisphereLight":n={direction:new eE,skyColor:new tz,groundColor:new tz};break;case"RectAreaLight":n={color:new tz,position:new eE,halfWidth:new eE,halfHeight:new eE}}return e[t.id]=n,n}}}let uI=0;function uL(e,t){return 2*!!t.castShadow-2*!!e.castShadow+ +!!t.map-!!e.map}function uN(e){let t,n=new uP,i=(t={},{get:function(e){let n;if(void 0!==t[e.id])return t[e.id];switch(e.type){case"DirectionalLight":case"SpotLight":n={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Y};break;case"PointLight":n={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Y,shadowCameraNear:1,shadowCameraFar:1e3}}return t[e.id]=n,n}}),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let e=0;e<9;e++)r.probe.push(new eE);let a=new eE,s=new e2,o=new e2;return{setup:function(t){let a=0,s=0,o=0;for(let e=0;e<9;e++)r.probe[e].set(0,0,0);let l=0,u=0,c=0,h=0,d=0,p=0,f=0,m=0,g=0,v=0,_=0;t.sort(uL);for(let e=0,y=t.length;e0&&(!0===e.has("OES_texture_float_linear")?(r.rectAreaLTC1=ok.LTC_FLOAT_1,r.rectAreaLTC2=ok.LTC_FLOAT_2):(r.rectAreaLTC1=ok.LTC_HALF_1,r.rectAreaLTC2=ok.LTC_HALF_2)),r.ambient[0]=a,r.ambient[1]=s,r.ambient[2]=o;let y=r.hash;(y.directionalLength!==l||y.pointLength!==u||y.spotLength!==c||y.rectAreaLength!==h||y.hemiLength!==d||y.numDirectionalShadows!==p||y.numPointShadows!==f||y.numSpotShadows!==m||y.numSpotMaps!==g||y.numLightProbes!==_)&&(r.directional.length=l,r.spot.length=c,r.rectArea.length=h,r.point.length=u,r.hemi.length=d,r.directionalShadow.length=p,r.directionalShadowMap.length=p,r.pointShadow.length=f,r.pointShadowMap.length=f,r.spotShadow.length=m,r.spotShadowMap.length=m,r.directionalShadowMatrix.length=p,r.pointShadowMatrix.length=f,r.spotLightMatrix.length=m+g-v,r.spotLightMap.length=g,r.numSpotLightShadowsWithMaps=v,r.numLightProbes=_,y.directionalLength=l,y.pointLength=u,y.spotLength=c,y.rectAreaLength=h,y.hemiLength=d,y.numDirectionalShadows=p,y.numPointShadows=f,y.numSpotShadows=m,y.numSpotMaps=g,y.numLightProbes=_,r.version=uI++)},setupView:function(e,t){let n=0,i=0,l=0,u=0,c=0,h=t.matrixWorldInverse;for(let t=0,d=e.length;t=a.length?(r=new uU(e),a.push(r)):r=a[i],r},dispose:function(){t=new WeakMap}}}function uO(e,t,n){let i=new iS,r=new Y,a=new Y,s=new e_,o=new av({depthPacking:3201}),l=new a_,u={},c=n.maxTextureSize,h={0:1,1:0,2:2},d=new nb({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new Y},radius:{value:4}},vertexShader:"void main() {\n gl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n const float samples = float( VSM_SAMPLES );\n float mean = 0.0;\n float squared_mean = 0.0;\n float uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n float uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n for ( float i = 0.0; i < samples; i ++ ) {\n float uvOffset = uvStart + i * uvStride;\n #ifdef HORIZONTAL_PASS\n vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\n mean += distribution.x;\n squared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n #else\n float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\n mean += depth;\n squared_mean += depth * depth;\n #endif\n }\n mean = mean / samples;\n squared_mean = squared_mean / samples;\n float std_dev = sqrt( squared_mean - mean * mean );\n gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}),p=d.clone();p.defines.HORIZONTAL_PASS=1;let f=new nn;f.setAttribute("position",new tZ(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));let m=new nf(f,d),g=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=1;let v=this.type;function _(t,n,i,r){let a=null,s=!0===i.isPointLight?t.customDistanceMaterial:t.customDepthMaterial;if(void 0!==s)a=s;else if(a=!0===i.isPointLight?l:o,e.localClippingEnabled&&!0===n.clipShadows&&Array.isArray(n.clippingPlanes)&&0!==n.clippingPlanes.length||n.displacementMap&&0!==n.displacementScale||n.alphaMap&&n.alphaTest>0||n.map&&n.alphaTest>0){let e=a.uuid,t=n.uuid,i=u[e];void 0===i&&(i={},u[e]=i);let r=i[t];void 0===r&&(r=a.clone(),i[t]=r,n.addEventListener("dispose",y)),a=r}return a.visible=n.visible,a.wireframe=n.wireframe,3===r?a.side=null!==n.shadowSide?n.shadowSide:n.side:a.side=null!==n.shadowSide?n.shadowSide:h[n.side],a.alphaMap=n.alphaMap,a.alphaTest=n.alphaTest,a.map=n.map,a.clipShadows=n.clipShadows,a.clippingPlanes=n.clippingPlanes,a.clipIntersection=n.clipIntersection,a.displacementMap=n.displacementMap,a.displacementScale=n.displacementScale,a.displacementBias=n.displacementBias,a.wireframeLinewidth=n.wireframeLinewidth,a.linewidth=n.linewidth,!0===i.isPointLight&&!0===a.isMeshDistanceMaterial&&(e.properties.get(a).light=i),a}function y(e){for(let t in e.target.removeEventListener("dispose",y),u){let n=u[t],i=e.target.uuid;i in n&&(n[i].dispose(),delete n[i])}}this.render=function(n,o,l){if(!1===g.enabled||!1===g.autoUpdate&&!1===g.needsUpdate||0===n.length)return;let u=e.getRenderTarget(),h=e.getActiveCubeFace(),f=e.getActiveMipmapLevel(),y=e.state;y.setBlending(0),y.buffers.color.setClear(1,1,1,1),y.buffers.depth.setTest(!0),y.setScissorTest(!1);let x=3!==v&&3===this.type,b=3===v&&3!==this.type;for(let u=0,h=n.length;uc||r.y>c)&&(r.x>c&&(a.x=Math.floor(c/g.x),r.x=a.x*g.x,f.mapSize.x=a.x),r.y>c&&(a.y=Math.floor(c/g.y),r.y=a.y*g.y,f.mapSize.y=a.y)),null===f.map||!0===x||!0===b){let e=3!==this.type?{minFilter:1003,magFilter:1003}:{};null!==f.map&&f.map.dispose(),f.map=new ex(r.x,r.y,e),f.map.texture.name=h.name+".shadowMap",f.camera.updateProjectionMatrix()}e.setRenderTarget(f.map),e.clear();let v=f.getViewportCount();for(let n=0;n=1:-1!==P.indexOf("OpenGL ES")&&(R=parseFloat(/^OpenGL ES (\d)/.exec(P)[1])>=2);let I=null,L={},N=e.getParameter(e.SCISSOR_BOX),U=e.getParameter(e.VIEWPORT),D=new e_().fromArray(N),O=new e_().fromArray(U);function F(t,n,i,r){let a=new Uint8Array(4),s=e.createTexture();e.bindTexture(t,s),e.texParameteri(t,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(t,e.TEXTURE_MAG_FILTER,e.NEAREST);for(let s=0;stypeof navigator&&/OculusBrowser/g.test(navigator.userAgent),c=new Y,h=new WeakMap,d=new WeakMap,p=!1;try{p="u">typeof OffscreenCanvas&&null!==new OffscreenCanvas(1,1).getContext("2d")}catch(e){}function f(e,t){return p?new OffscreenCanvas(e,t):ee("canvas")}function m(e,t,n){let i=1,r=G(e);if((r.width>n||r.height>n)&&(i=n/Math.max(r.width,r.height)),i<1)if("u">typeof HTMLImageElement&&e instanceof HTMLImageElement||"u">typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"u">typeof ImageBitmap&&e instanceof ImageBitmap||"u">typeof VideoFrame&&e instanceof VideoFrame){let n=Math.floor(i*r.width),a=Math.floor(i*r.height);void 0===o&&(o=f(n,a));let s=t?f(n,a):o;return s.width=n,s.height=a,s.getContext("2d").drawImage(e,0,0,n,a),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+r.width+"x"+r.height+") to ("+n+"x"+a+")."),s}else"data"in e&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+r.width+"x"+r.height+").");return e}function g(e){return e.generateMipmaps}function v(t){e.generateMipmap(t)}function _(n,i,r,a,s=!1){if(null!==n){if(void 0!==e[n])return e[n];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+n+"'")}let o=i;if(i===e.RED&&(r===e.FLOAT&&(o=e.R32F),r===e.HALF_FLOAT&&(o=e.R16F),r===e.UNSIGNED_BYTE&&(o=e.R8)),i===e.RED_INTEGER&&(r===e.UNSIGNED_BYTE&&(o=e.R8UI),r===e.UNSIGNED_SHORT&&(o=e.R16UI),r===e.UNSIGNED_INT&&(o=e.R32UI),r===e.BYTE&&(o=e.R8I),r===e.SHORT&&(o=e.R16I),r===e.INT&&(o=e.R32I)),i===e.RG&&(r===e.FLOAT&&(o=e.RG32F),r===e.HALF_FLOAT&&(o=e.RG16F),r===e.UNSIGNED_BYTE&&(o=e.RG8)),i===e.RG_INTEGER&&(r===e.UNSIGNED_BYTE&&(o=e.RG8UI),r===e.UNSIGNED_SHORT&&(o=e.RG16UI),r===e.UNSIGNED_INT&&(o=e.RG32UI),r===e.BYTE&&(o=e.RG8I),r===e.SHORT&&(o=e.RG16I),r===e.INT&&(o=e.RG32I)),i===e.RGB_INTEGER&&(r===e.UNSIGNED_BYTE&&(o=e.RGB8UI),r===e.UNSIGNED_SHORT&&(o=e.RGB16UI),r===e.UNSIGNED_INT&&(o=e.RGB32UI),r===e.BYTE&&(o=e.RGB8I),r===e.SHORT&&(o=e.RGB16I),r===e.INT&&(o=e.RGB32I)),i===e.RGBA_INTEGER&&(r===e.UNSIGNED_BYTE&&(o=e.RGBA8UI),r===e.UNSIGNED_SHORT&&(o=e.RGBA16UI),r===e.UNSIGNED_INT&&(o=e.RGBA32UI),r===e.BYTE&&(o=e.RGBA8I),r===e.SHORT&&(o=e.RGBA16I),r===e.INT&&(o=e.RGBA32I)),i===e.RGB&&r===e.UNSIGNED_INT_5_9_9_9_REV&&(o=e.RGB9_E5),i===e.RGBA){let t=s?N:eu.getTransfer(a);r===e.FLOAT&&(o=e.RGBA32F),r===e.HALF_FLOAT&&(o=e.RGBA16F),r===e.UNSIGNED_BYTE&&(o=t===U?e.SRGB8_ALPHA8:e.RGBA8),r===e.UNSIGNED_SHORT_4_4_4_4&&(o=e.RGBA4),r===e.UNSIGNED_SHORT_5_5_5_1&&(o=e.RGB5_A1)}return(o===e.R16F||o===e.R32F||o===e.RG16F||o===e.RG32F||o===e.RGBA16F||o===e.RGBA32F)&&t.get("EXT_color_buffer_float"),o}function y(t,n){let i;return t?null===n||1014===n||1020===n?i=e.DEPTH24_STENCIL8:1015===n?i=e.DEPTH32F_STENCIL8:1012===n&&(i=e.DEPTH24_STENCIL8,console.warn("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):null===n||1014===n||1020===n?i=e.DEPTH_COMPONENT24:1015===n?i=e.DEPTH_COMPONENT32F:1012===n&&(i=e.DEPTH_COMPONENT16),i}function x(e,t){return!0===g(e)||e.isFramebufferTexture&&1003!==e.minFilter&&1006!==e.minFilter?Math.log2(Math.max(t.width,t.height))+1:void 0!==e.mipmaps&&e.mipmaps.length>0?e.mipmaps.length:e.isCompressedTexture&&Array.isArray(e.image)?t.mipmaps.length:1}function b(e){let t=e.target;t.removeEventListener("dispose",b),function(e){let t=i.get(e);if(void 0===t.__webglInit)return;let n=e.source,r=d.get(n);if(r){let i=r[t.__cacheKey];i.usedTimes--,0===i.usedTimes&&M(e),0===Object.keys(r).length&&d.delete(n)}i.remove(e)}(t),t.isVideoTexture&&h.delete(t)}function S(t){let n=t.target;n.removeEventListener("dispose",S),function(t){let n=i.get(t);if(t.depthTexture&&(t.depthTexture.dispose(),i.remove(t.depthTexture)),t.isWebGLCubeRenderTarget)for(let t=0;t<6;t++){if(Array.isArray(n.__webglFramebuffer[t]))for(let i=0;i0&&l.__version!==t.version){let e=t.image;if(null===e)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else{if(!1!==e.complete)return void I(l,t,r);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}n.bindTexture(e.TEXTURE_2D,l.__webglTexture,e.TEXTURE0+r)}let E={1e3:e.REPEAT,1001:e.CLAMP_TO_EDGE,1002:e.MIRRORED_REPEAT},A={1003:e.NEAREST,1004:e.NEAREST_MIPMAP_NEAREST,1005:e.NEAREST_MIPMAP_LINEAR,1006:e.LINEAR,1007:e.LINEAR_MIPMAP_NEAREST,1008:e.LINEAR_MIPMAP_LINEAR},C={512:e.NEVER,519:e.ALWAYS,513:e.LESS,515:e.LEQUAL,514:e.EQUAL,518:e.GEQUAL,516:e.GREATER,517:e.NOTEQUAL};function R(n,a){if((1015===a.type&&!1===t.has("OES_texture_float_linear")&&(1006===a.magFilter||1007===a.magFilter||1005===a.magFilter||1008===a.magFilter||1006===a.minFilter||1007===a.minFilter||1005===a.minFilter||1008===a.minFilter)&&console.warn("THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."),e.texParameteri(n,e.TEXTURE_WRAP_S,E[a.wrapS]),e.texParameteri(n,e.TEXTURE_WRAP_T,E[a.wrapT]),(n===e.TEXTURE_3D||n===e.TEXTURE_2D_ARRAY)&&e.texParameteri(n,e.TEXTURE_WRAP_R,E[a.wrapR]),e.texParameteri(n,e.TEXTURE_MAG_FILTER,A[a.magFilter]),e.texParameteri(n,e.TEXTURE_MIN_FILTER,A[a.minFilter]),a.compareFunction&&(e.texParameteri(n,e.TEXTURE_COMPARE_MODE,e.COMPARE_REF_TO_TEXTURE),e.texParameteri(n,e.TEXTURE_COMPARE_FUNC,C[a.compareFunction])),!0===t.has("EXT_texture_filter_anisotropic"))&&1003!==a.magFilter&&(1005===a.minFilter||1008===a.minFilter)&&(1015!==a.type||!1!==t.has("OES_texture_float_linear"))&&(a.anisotropy>1||i.get(a).__currentAnisotropy)){let s=t.get("EXT_texture_filter_anisotropic");e.texParameterf(n,s.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(a.anisotropy,r.getMaxAnisotropy())),i.get(a).__currentAnisotropy=a.anisotropy}}function P(t,n){let i,r=!1;void 0===t.__webglInit&&(t.__webglInit=!0,n.addEventListener("dispose",b));let a=n.source,o=d.get(a);void 0===o&&(o={},d.set(a,o));let l=((i=[]).push(n.wrapS),i.push(n.wrapT),i.push(n.wrapR||0),i.push(n.magFilter),i.push(n.minFilter),i.push(n.anisotropy),i.push(n.internalFormat),i.push(n.format),i.push(n.type),i.push(n.generateMipmaps),i.push(n.premultiplyAlpha),i.push(n.flipY),i.push(n.unpackAlignment),i.push(n.colorSpace),i.join());if(l!==t.__cacheKey){void 0===o[l]&&(o[l]={texture:e.createTexture(),usedTimes:0},s.memory.textures++,r=!0),o[l].usedTimes++;let i=o[t.__cacheKey];void 0!==i&&(o[t.__cacheKey].usedTimes--,0===i.usedTimes&&M(n)),t.__cacheKey=l,t.__webglTexture=o[l].texture}return r}function I(t,s,o){let l=e.TEXTURE_2D;(s.isDataArrayTexture||s.isCompressedArrayTexture)&&(l=e.TEXTURE_2D_ARRAY),s.isData3DTexture&&(l=e.TEXTURE_3D);let u=P(t,s),c=s.source;n.bindTexture(l,t.__webglTexture,e.TEXTURE0+o);let h=i.get(c);if(c.version!==h.__version||!0===u){let t;n.activeTexture(e.TEXTURE0+o);let i=eu.getPrimaries(eu.workingColorSpace),d=""===s.colorSpace?null:eu.getPrimaries(s.colorSpace),p=""===s.colorSpace||i===d?e.NONE:e.BROWSER_DEFAULT_WEBGL;e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,s.flipY),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,s.premultiplyAlpha),e.pixelStorei(e.UNPACK_ALIGNMENT,s.unpackAlignment),e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL,p);let f=m(s.image,!1,r.maxTextureSize);f=V(s,f);let b=a.convert(s.format,s.colorSpace),S=a.convert(s.type),M=_(s.internalFormat,b,S,s.colorSpace,s.isVideoTexture);R(l,s);let T=s.mipmaps,w=!0!==s.isVideoTexture,E=void 0===h.__version||!0===u,A=c.dataReady,C=x(s,f);if(s.isDepthTexture)M=y(1027===s.format,s.type),E&&(w?n.texStorage2D(e.TEXTURE_2D,1,M,f.width,f.height):n.texImage2D(e.TEXTURE_2D,0,M,f.width,f.height,0,b,S,null));else if(s.isDataTexture)if(T.length>0){w&&E&&n.texStorage2D(e.TEXTURE_2D,C,M,T[0].width,T[0].height);for(let i=0,r=T.length;i0){let r=oU(t.width,t.height,s.format,s.type);for(let a of s.layerUpdates){let s=t.data.subarray(a*r/t.data.BYTES_PER_ELEMENT,(a+1)*r/t.data.BYTES_PER_ELEMENT);n.compressedTexSubImage3D(e.TEXTURE_2D_ARRAY,i,0,0,a,t.width,t.height,1,b,s)}s.clearLayerUpdates()}else n.compressedTexSubImage3D(e.TEXTURE_2D_ARRAY,i,0,0,0,t.width,t.height,f.depth,b,t.data)}else n.compressedTexImage3D(e.TEXTURE_2D_ARRAY,i,M,t.width,t.height,f.depth,0,t.data,0,0);else console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else w?A&&n.texSubImage3D(e.TEXTURE_2D_ARRAY,i,0,0,0,t.width,t.height,f.depth,b,S,t.data):n.texImage3D(e.TEXTURE_2D_ARRAY,i,M,t.width,t.height,f.depth,0,b,S,t.data)}else{w&&E&&n.texStorage2D(e.TEXTURE_2D,C,M,T[0].width,T[0].height);for(let i=0,r=T.length;i0){let t=oU(f.width,f.height,s.format,s.type);for(let i of s.layerUpdates){let r=f.data.subarray(i*t/f.data.BYTES_PER_ELEMENT,(i+1)*t/f.data.BYTES_PER_ELEMENT);n.texSubImage3D(e.TEXTURE_2D_ARRAY,0,0,0,i,f.width,f.height,1,b,S,r)}s.clearLayerUpdates()}else n.texSubImage3D(e.TEXTURE_2D_ARRAY,0,0,0,0,f.width,f.height,f.depth,b,S,f.data)}else n.texImage3D(e.TEXTURE_2D_ARRAY,0,M,f.width,f.height,f.depth,0,b,S,f.data);else if(s.isData3DTexture)w?(E&&n.texStorage3D(e.TEXTURE_3D,C,M,f.width,f.height,f.depth),A&&n.texSubImage3D(e.TEXTURE_3D,0,0,0,0,f.width,f.height,f.depth,b,S,f.data)):n.texImage3D(e.TEXTURE_3D,0,M,f.width,f.height,f.depth,0,b,S,f.data);else if(s.isFramebufferTexture){if(E)if(w)n.texStorage2D(e.TEXTURE_2D,C,M,f.width,f.height);else{let t=f.width,i=f.height;for(let r=0;r>=1,i>>=1}}else if(T.length>0){if(w&&E){let t=G(T[0]);n.texStorage2D(e.TEXTURE_2D,C,M,t.width,t.height)}for(let i=0,r=T.length;i>c),i=Math.max(1,r.height>>c);u===e.TEXTURE_3D||u===e.TEXTURE_2D_ARRAY?n.texImage3D(u,c,p,t,i,r.depth,0,h,d,null):n.texImage2D(u,c,p,t,i,0,h,d,null)}n.bindFramebuffer(e.FRAMEBUFFER,t),H(r)?l.framebufferTexture2DMultisampleEXT(e.FRAMEBUFFER,o,u,m.__webglTexture,0,k(r)):(u===e.TEXTURE_2D||u>=e.TEXTURE_CUBE_MAP_POSITIVE_X&&u<=e.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&e.framebufferTexture2D(e.FRAMEBUFFER,o,u,m.__webglTexture,c),n.bindFramebuffer(e.FRAMEBUFFER,null)}function O(t,n,i){if(e.bindRenderbuffer(e.RENDERBUFFER,t),n.depthBuffer){let r=n.depthTexture,a=r&&r.isDepthTexture?r.type:null,s=y(n.stencilBuffer,a),o=n.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,u=k(n);H(n)?l.renderbufferStorageMultisampleEXT(e.RENDERBUFFER,u,s,n.width,n.height):i?e.renderbufferStorageMultisample(e.RENDERBUFFER,u,s,n.width,n.height):e.renderbufferStorage(e.RENDERBUFFER,s,n.width,n.height),e.framebufferRenderbuffer(e.FRAMEBUFFER,o,e.RENDERBUFFER,t)}else{let t=n.textures;for(let r=0;r{delete r.__boundDepthTexture,delete r.__depthDisposeCallback,e.removeEventListener("dispose",t)};e.addEventListener("dispose",t),r.__depthDisposeCallback=t}r.__boundDepthTexture=e}if(t.depthTexture&&!r.__autoAllocateDepthBuffer){if(a)throw Error("target.depthTexture not supported in Cube render targets");!function(t,r){if(r&&r.isWebGLCubeRenderTarget)throw Error("Depth Texture with cube render targets is not supported");if(n.bindFramebuffer(e.FRAMEBUFFER,t),!(r.depthTexture&&r.depthTexture.isDepthTexture))throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");let a=i.get(r.depthTexture);a.__renderTarget=r,a.__webglTexture&&r.depthTexture.image.width===r.width&&r.depthTexture.image.height===r.height||(r.depthTexture.image.width=r.width,r.depthTexture.image.height=r.height,r.depthTexture.needsUpdate=!0),w(r.depthTexture,0);let s=a.__webglTexture,o=k(r);if(1026===r.depthTexture.format)H(r)?l.framebufferTexture2DMultisampleEXT(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.TEXTURE_2D,s,0,o):e.framebufferTexture2D(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.TEXTURE_2D,s,0);else if(1027===r.depthTexture.format)H(r)?l.framebufferTexture2DMultisampleEXT(e.FRAMEBUFFER,e.DEPTH_STENCIL_ATTACHMENT,e.TEXTURE_2D,s,0,o):e.framebufferTexture2D(e.FRAMEBUFFER,e.DEPTH_STENCIL_ATTACHMENT,e.TEXTURE_2D,s,0);else throw Error("Unknown depthTexture format")}(r.__webglFramebuffer,t)}else if(a){r.__webglDepthbuffer=[];for(let i=0;i<6;i++)if(n.bindFramebuffer(e.FRAMEBUFFER,r.__webglFramebuffer[i]),void 0===r.__webglDepthbuffer[i])r.__webglDepthbuffer[i]=e.createRenderbuffer(),O(r.__webglDepthbuffer[i],t,!1);else{let n=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,a=r.__webglDepthbuffer[i];e.bindRenderbuffer(e.RENDERBUFFER,a),e.framebufferRenderbuffer(e.FRAMEBUFFER,n,e.RENDERBUFFER,a)}}else if(n.bindFramebuffer(e.FRAMEBUFFER,r.__webglFramebuffer),void 0===r.__webglDepthbuffer)r.__webglDepthbuffer=e.createRenderbuffer(),O(r.__webglDepthbuffer,t,!1);else{let n=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,i=r.__webglDepthbuffer;e.bindRenderbuffer(e.RENDERBUFFER,i),e.framebufferRenderbuffer(e.FRAMEBUFFER,n,e.RENDERBUFFER,i)}n.bindFramebuffer(e.FRAMEBUFFER,null)}let z=[],B=[];function k(e){return Math.min(r.maxSamples,e.samples)}function H(e){let n=i.get(e);return e.samples>0&&!0===t.has("WEBGL_multisampled_render_to_texture")&&!1!==n.__useRenderToTexture}function V(e,t){let n=e.colorSpace,i=e.format,r=e.type;return!0===e.isCompressedTexture||!0===e.isVideoTexture||n!==L&&""!==n&&(eu.getTransfer(n)===U?(1023!==i||1009!==r)&&console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture color space:",n)),t}function G(e){return"u">typeof HTMLImageElement&&e instanceof HTMLImageElement?(c.width=e.naturalWidth||e.width,c.height=e.naturalHeight||e.height):"u">typeof VideoFrame&&e instanceof VideoFrame?(c.width=e.displayWidth,c.height=e.displayHeight):(c.width=e.width,c.height=e.height),c}this.allocateTextureUnit=function(){let e=T;return e>=r.maxTextures&&console.warn("THREE.WebGLTextures: Trying to use "+e+" texture units while this GPU supports only "+r.maxTextures),T+=1,e},this.resetTextureUnits=function(){T=0},this.setTexture2D=w,this.setTexture2DArray=function(t,r){let a=i.get(t);t.version>0&&a.__version!==t.version?I(a,t,r):n.bindTexture(e.TEXTURE_2D_ARRAY,a.__webglTexture,e.TEXTURE0+r)},this.setTexture3D=function(t,r){let a=i.get(t);t.version>0&&a.__version!==t.version?I(a,t,r):n.bindTexture(e.TEXTURE_3D,a.__webglTexture,e.TEXTURE0+r)},this.setTextureCube=function(t,s){let o=i.get(t);t.version>0&&o.__version!==t.version?function(t,s,o){if(6!==s.image.length)return;let l=P(t,s),u=s.source;n.bindTexture(e.TEXTURE_CUBE_MAP,t.__webglTexture,e.TEXTURE0+o);let c=i.get(u);if(u.version!==c.__version||!0===l){let t;n.activeTexture(e.TEXTURE0+o);let i=eu.getPrimaries(eu.workingColorSpace),h=""===s.colorSpace?null:eu.getPrimaries(s.colorSpace),d=""===s.colorSpace||i===h?e.NONE:e.BROWSER_DEFAULT_WEBGL;e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,s.flipY),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,s.premultiplyAlpha),e.pixelStorei(e.UNPACK_ALIGNMENT,s.unpackAlignment),e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL,d);let p=s.isCompressedTexture||s.image[0].isCompressedTexture,f=s.image[0]&&s.image[0].isDataTexture,y=[];for(let e=0;e<6;e++)p||f?y[e]=f?s.image[e].image:s.image[e]:y[e]=m(s.image[e],!0,r.maxCubemapSize),y[e]=V(s,y[e]);let b=y[0],S=a.convert(s.format,s.colorSpace),M=a.convert(s.type),T=_(s.internalFormat,S,M,s.colorSpace),w=!0!==s.isVideoTexture,E=void 0===c.__version||!0===l,A=u.dataReady,C=x(s,b);if(R(e.TEXTURE_CUBE_MAP,s),p){w&&E&&n.texStorage2D(e.TEXTURE_CUBE_MAP,C,T,b.width,b.height);for(let i=0;i<6;i++){t=y[i].mipmaps;for(let r=0;r0&&C++;let i=G(y[0]);n.texStorage2D(e.TEXTURE_CUBE_MAP,C,T,i.width,i.height)}for(let i=0;i<6;i++)if(f){w?A&&n.texSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+i,0,0,0,y[i].width,y[i].height,S,M,y[i].data):n.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+i,0,T,y[i].width,y[i].height,0,S,M,y[i].data);for(let r=0;r1;if(!h&&(void 0===l.__webglTexture&&(l.__webglTexture=e.createTexture()),l.__version=r.version,s.memory.textures++),c){o.__webglFramebuffer=[];for(let t=0;t<6;t++)if(r.mipmaps&&r.mipmaps.length>0){o.__webglFramebuffer[t]=[];for(let n=0;n0){o.__webglFramebuffer=[];for(let t=0;t0&&!1===H(t)){o.__webglMultisampledFramebuffer=e.createFramebuffer(),o.__webglColorRenderbuffer=[],n.bindFramebuffer(e.FRAMEBUFFER,o.__webglMultisampledFramebuffer);for(let n=0;n0)for(let i=0;i0)for(let n=0;n0){if(!1===H(t)){let r=t.textures,a=t.width,s=t.height,o=e.COLOR_BUFFER_BIT,l=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,c=i.get(t),h=r.length>1;if(h)for(let t=0;t.025?(l.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:e.handedness,target:this})):!l.inputState.pinching&&s<=.015&&(l.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:e.handedness,target:this}))}else null!==o&&e.gripSpace&&null!==(r=t.getPose(e.gripSpace,n))&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.matrixWorldNeedsUpdate=!0,r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1);null!==s&&(null===(i=t.getPose(e.targetRaySpace,n))&&null!==r&&(i=r),null!==i&&(s.matrix.fromArray(i.transform.matrix),s.matrix.decompose(s.position,s.rotation,s.scale),s.matrixWorldNeedsUpdate=!0,i.linearVelocity?(s.hasLinearVelocity=!0,s.linearVelocity.copy(i.linearVelocity)):s.hasLinearVelocity=!1,i.angularVelocity?(s.hasAngularVelocity=!0,s.angularVelocity.copy(i.angularVelocity)):s.hasAngularVelocity=!1,this.dispatchEvent(uH)))}return null!==s&&(s.visible=null!==i),null!==o&&(o.visible=null!==r),null!==l&&(l.visible=null!==a),this}_getHandJoint(e,t){if(void 0===e.joints[t.jointName]){let n=new i6;n.matrixAutoUpdate=!1,n.visible=!1,e.joints[t.jointName]=n,e.add(n)}return e.joints[t.jointName]}}let uG=` -void main() { - - gl_Position = vec4( position, 1.0 ); - -}`,uW=` -uniform sampler2DArray depthColor; -uniform float depthWidth; -uniform float depthHeight; - -void main() { - - vec2 coord = vec2( gl_FragCoord.x / depthWidth, gl_FragCoord.y / depthHeight ); - - if ( coord.x >= 1.0 ) { - - gl_FragDepth = texture( depthColor, vec3( coord.x - 1.0, coord.y, 1 ) ).r; - - } else { - - gl_FragDepth = texture( depthColor, vec3( coord.x, coord.y, 0 ) ).r; - - } - -}`;class uj{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(e,t,n){if(null===this.texture){let i=new ev;e.properties.get(i).__webglTexture=t.texture,(t.depthNear!=n.depthNear||t.depthFar!=n.depthFar)&&(this.depthNear=t.depthNear,this.depthFar=t.depthFar),this.texture=i}}getMesh(e){if(null!==this.texture&&null===this.mesh){let t=e.cameras[0].viewport,n=new nb({vertexShader:uG,fragmentShader:uW,uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new nf(new r9(20,20),n)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}}class uX extends O{constructor(e,t){super();const n=this;let i=null,r=1,a=null,s="local-floor",o=1,l=null,u=null,c=null,h=null,d=null,p=null;const f=new uj,m=t.getContextAttributes();let g=null,v=null;const _=[],y=[],x=new Y;let b=null;const S=new nE;S.viewport=new e_;const M=new nE;M.viewport=new e_;const T=[S,M],w=new sT;let E=null,A=null;function C(e){let t=y.indexOf(e.inputSource);if(-1===t)return;let n=_[t];void 0!==n&&(n.update(e.inputSource,e.frame,l||a),n.dispatchEvent({type:e.type,data:e.inputSource}))}function R(){i.removeEventListener("select",C),i.removeEventListener("selectstart",C),i.removeEventListener("selectend",C),i.removeEventListener("squeeze",C),i.removeEventListener("squeezestart",C),i.removeEventListener("squeezeend",C),i.removeEventListener("end",R),i.removeEventListener("inputsourceschange",P);for(let e=0;e<_.length;e++){let t=y[e];null!==t&&(y[e]=null,_[e].disconnect(t))}E=null,A=null,f.reset(),e.setRenderTarget(g),d=null,h=null,c=null,i=null,v=null,D.stop(),n.isPresenting=!1,e.setPixelRatio(b),e.setSize(x.width,x.height,!1),n.dispatchEvent({type:"sessionend"})}function P(e){for(let t=0;t=0&&(y[i]=null,_[i].disconnect(n))}for(let t=0;t=y.length){y.push(n),i=e;break}else if(null===y[e]){y[e]=n,i=e;break}if(-1===i)break}let r=_[i];r&&r.connect(n)}}this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(e){let t=_[e];return void 0===t&&(t=new uV,_[e]=t),t.getTargetRaySpace()},this.getControllerGrip=function(e){let t=_[e];return void 0===t&&(t=new uV,_[e]=t),t.getGripSpace()},this.getHand=function(e){let t=_[e];return void 0===t&&(t=new uV,_[e]=t),t.getHandSpace()},this.setFramebufferScaleFactor=function(e){r=e,!0===n.isPresenting&&console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(e){s=e,!0===n.isPresenting&&console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return l||a},this.setReferenceSpace=function(e){l=e},this.getBaseLayer=function(){return null!==h?h:d},this.getBinding=function(){return c},this.getFrame=function(){return p},this.getSession=function(){return i},this.setSession=async function(u){if(null!==(i=u)){if(g=e.getRenderTarget(),i.addEventListener("select",C),i.addEventListener("selectstart",C),i.addEventListener("selectend",C),i.addEventListener("squeeze",C),i.addEventListener("squeezestart",C),i.addEventListener("squeezeend",C),i.addEventListener("end",R),i.addEventListener("inputsourceschange",P),!0!==m.xrCompatible&&await t.makeXRCompatible(),b=e.getPixelRatio(),e.getSize(x),void 0===i.renderState.layers){let n={antialias:m.antialias,alpha:!0,depth:m.depth,stencil:m.stencil,framebufferScaleFactor:r};d=new XRWebGLLayer(i,t,n),i.updateRenderState({baseLayer:d}),e.setPixelRatio(1),e.setSize(d.framebufferWidth,d.framebufferHeight,!1),v=new ex(d.framebufferWidth,d.framebufferHeight,{format:1023,type:1009,colorSpace:e.outputColorSpace,stencilBuffer:m.stencil})}else{let n=null,a=null,s=null;m.depth&&(s=m.stencil?t.DEPTH24_STENCIL8:t.DEPTH_COMPONENT24,n=m.stencil?1027:1026,a=m.stencil?1020:1014);let o={colorFormat:t.RGBA8,depthFormat:s,scaleFactor:r};h=(c=new XRWebGLBinding(i,t)).createProjectionLayer(o),i.updateRenderState({layers:[h]}),e.setPixelRatio(1),e.setSize(h.textureWidth,h.textureHeight,!1),v=new ex(h.textureWidth,h.textureHeight,{format:1023,type:1009,depthTexture:new ri(h.textureWidth,h.textureHeight,a,void 0,void 0,void 0,void 0,void 0,void 0,n),stencilBuffer:m.stencil,colorSpace:e.outputColorSpace,samples:4*!!m.antialias,resolveDepthBuffer:!1===h.ignoreDepthValues})}v.isXRRenderTarget=!0,this.setFoveation(o),l=null,a=await i.requestReferenceSpace(s),D.setContext(i),D.start(),n.isPresenting=!0,n.dispatchEvent({type:"sessionstart"})}},this.getEnvironmentBlendMode=function(){if(null!==i)return i.environmentBlendMode},this.getDepthTexture=function(){return f.getDepthTexture()};const I=new eE,L=new eE;function N(e,t){null===t?e.matrixWorld.copy(e.matrix):e.matrixWorld.multiplyMatrices(t.matrixWorld,e.matrix),e.matrixWorldInverse.copy(e.matrixWorld).invert()}this.updateCamera=function(e){var t,n,r;if(null===i)return;let a=e.near,s=e.far;null!==f.texture&&(f.depthNear>0&&(a=f.depthNear),f.depthFar>0&&(s=f.depthFar)),w.near=M.near=S.near=a,w.far=M.far=S.far=s,(E!==w.near||A!==w.far)&&(i.updateRenderState({depthNear:w.near,depthFar:w.far}),E=w.near,A=w.far),S.layers.mask=2|e.layers.mask,M.layers.mask=4|e.layers.mask,w.layers.mask=S.layers.mask|M.layers.mask;let o=e.parent,l=w.cameras;N(w,o);for(let e=0;e0&&(e.alphaTest.value=i.alphaTest);let r=t.get(i),a=r.envMap,s=r.envMapRotation;a&&(e.envMap.value=a,uq.copy(s),uq.x*=-1,uq.y*=-1,uq.z*=-1,a.isCubeTexture&&!1===a.isRenderTargetTexture&&(uq.y*=-1,uq.z*=-1),e.envMapRotation.value.setFromMatrix4(uY.makeRotationFromEuler(uq)),e.flipEnvMap.value=a.isCubeTexture&&!1===a.isRenderTargetTexture?-1:1,e.reflectivity.value=i.reflectivity,e.ior.value=i.ior,e.refractionRatio.value=i.refractionRatio),i.lightMap&&(e.lightMap.value=i.lightMap,e.lightMapIntensity.value=i.lightMapIntensity,n(i.lightMap,e.lightMapTransform)),i.aoMap&&(e.aoMap.value=i.aoMap,e.aoMapIntensity.value=i.aoMapIntensity,n(i.aoMap,e.aoMapTransform))}return{refreshFogUniforms:function(t,n){n.color.getRGB(t.fogColor.value,ny(e)),n.isFog?(t.fogNear.value=n.near,t.fogFar.value=n.far):n.isFogExp2&&(t.fogDensity.value=n.density)},refreshMaterialUniforms:function(e,r,a,s,o){var l,u,c,h,d,p,f,m,g,v,_,y,x,b,S,M,T,w,E,A,C,R,P;let I;r.isMeshBasicMaterial||r.isMeshLambertMaterial?i(e,r):r.isMeshToonMaterial?(i(e,r),l=e,(u=r).gradientMap&&(l.gradientMap.value=u.gradientMap)):r.isMeshPhongMaterial?(i(e,r),c=e,h=r,c.specular.value.copy(h.specular),c.shininess.value=Math.max(h.shininess,1e-4)):r.isMeshStandardMaterial?(i(e,r),d=e,p=r,d.metalness.value=p.metalness,p.metalnessMap&&(d.metalnessMap.value=p.metalnessMap,n(p.metalnessMap,d.metalnessMapTransform)),d.roughness.value=p.roughness,p.roughnessMap&&(d.roughnessMap.value=p.roughnessMap,n(p.roughnessMap,d.roughnessMapTransform)),p.envMap&&(d.envMapIntensity.value=p.envMapIntensity),r.isMeshPhysicalMaterial&&(f=e,m=r,g=o,f.ior.value=m.ior,m.sheen>0&&(f.sheenColor.value.copy(m.sheenColor).multiplyScalar(m.sheen),f.sheenRoughness.value=m.sheenRoughness,m.sheenColorMap&&(f.sheenColorMap.value=m.sheenColorMap,n(m.sheenColorMap,f.sheenColorMapTransform)),m.sheenRoughnessMap&&(f.sheenRoughnessMap.value=m.sheenRoughnessMap,n(m.sheenRoughnessMap,f.sheenRoughnessMapTransform))),m.clearcoat>0&&(f.clearcoat.value=m.clearcoat,f.clearcoatRoughness.value=m.clearcoatRoughness,m.clearcoatMap&&(f.clearcoatMap.value=m.clearcoatMap,n(m.clearcoatMap,f.clearcoatMapTransform)),m.clearcoatRoughnessMap&&(f.clearcoatRoughnessMap.value=m.clearcoatRoughnessMap,n(m.clearcoatRoughnessMap,f.clearcoatRoughnessMapTransform)),m.clearcoatNormalMap&&(f.clearcoatNormalMap.value=m.clearcoatNormalMap,n(m.clearcoatNormalMap,f.clearcoatNormalMapTransform),f.clearcoatNormalScale.value.copy(m.clearcoatNormalScale),1===m.side&&f.clearcoatNormalScale.value.negate())),m.dispersion>0&&(f.dispersion.value=m.dispersion),m.iridescence>0&&(f.iridescence.value=m.iridescence,f.iridescenceIOR.value=m.iridescenceIOR,f.iridescenceThicknessMinimum.value=m.iridescenceThicknessRange[0],f.iridescenceThicknessMaximum.value=m.iridescenceThicknessRange[1],m.iridescenceMap&&(f.iridescenceMap.value=m.iridescenceMap,n(m.iridescenceMap,f.iridescenceMapTransform)),m.iridescenceThicknessMap&&(f.iridescenceThicknessMap.value=m.iridescenceThicknessMap,n(m.iridescenceThicknessMap,f.iridescenceThicknessMapTransform))),m.transmission>0&&(f.transmission.value=m.transmission,f.transmissionSamplerMap.value=g.texture,f.transmissionSamplerSize.value.set(g.width,g.height),m.transmissionMap&&(f.transmissionMap.value=m.transmissionMap,n(m.transmissionMap,f.transmissionMapTransform)),f.thickness.value=m.thickness,m.thicknessMap&&(f.thicknessMap.value=m.thicknessMap,n(m.thicknessMap,f.thicknessMapTransform)),f.attenuationDistance.value=m.attenuationDistance,f.attenuationColor.value.copy(m.attenuationColor)),m.anisotropy>0&&(f.anisotropyVector.value.set(m.anisotropy*Math.cos(m.anisotropyRotation),m.anisotropy*Math.sin(m.anisotropyRotation)),m.anisotropyMap&&(f.anisotropyMap.value=m.anisotropyMap,n(m.anisotropyMap,f.anisotropyMapTransform))),f.specularIntensity.value=m.specularIntensity,f.specularColor.value.copy(m.specularColor),m.specularColorMap&&(f.specularColorMap.value=m.specularColorMap,n(m.specularColorMap,f.specularColorMapTransform)),m.specularIntensityMap&&(f.specularIntensityMap.value=m.specularIntensityMap,n(m.specularIntensityMap,f.specularIntensityMapTransform)))):r.isMeshMatcapMaterial?(i(e,r),v=e,(_=r).matcap&&(v.matcap.value=_.matcap)):r.isMeshDepthMaterial?i(e,r):r.isMeshDistanceMaterial?(i(e,r),y=e,x=r,I=t.get(x).light,y.referencePosition.value.setFromMatrixPosition(I.matrixWorld),y.nearDistance.value=I.shadow.camera.near,y.farDistance.value=I.shadow.camera.far):r.isMeshNormalMaterial?i(e,r):r.isLineBasicMaterial?(b=e,S=r,b.diffuse.value.copy(S.color),b.opacity.value=S.opacity,S.map&&(b.map.value=S.map,n(S.map,b.mapTransform)),r.isLineDashedMaterial&&(M=e,T=r,M.dashSize.value=T.dashSize,M.totalSize.value=T.dashSize+T.gapSize,M.scale.value=T.scale)):r.isPointsMaterial?(w=e,E=r,A=a,C=s,w.diffuse.value.copy(E.color),w.opacity.value=E.opacity,w.size.value=E.size*A,w.scale.value=.5*C,E.map&&(w.map.value=E.map,n(E.map,w.uvTransform)),E.alphaMap&&(w.alphaMap.value=E.alphaMap,n(E.alphaMap,w.alphaMapTransform)),E.alphaTest>0&&(w.alphaTest.value=E.alphaTest)):r.isSpriteMaterial?(R=e,P=r,R.diffuse.value.copy(P.color),R.opacity.value=P.opacity,R.rotation.value=P.rotation,P.map&&(R.map.value=P.map,n(P.map,R.mapTransform)),P.alphaMap&&(R.alphaMap.value=P.alphaMap,n(P.alphaMap,R.alphaMapTransform)),P.alphaTest>0&&(R.alphaTest.value=P.alphaTest)):r.isShadowMaterial?(e.color.value.copy(r.color),e.opacity.value=r.opacity):r.isShaderMaterial&&(r.uniformsNeedUpdate=!1)}}}function uJ(e,t,n,i){let r={},a={},s=[],o=e.getParameter(e.MAX_UNIFORM_BUFFER_BINDINGS);function l(e){let t={boundary:0,storage:0};return"number"==typeof e||"boolean"==typeof e?(t.boundary=4,t.storage=4):e.isVector2?(t.boundary=8,t.storage=8):e.isVector3||e.isColor?(t.boundary=16,t.storage=12):e.isVector4?(t.boundary=16,t.storage=16):e.isMatrix3?(t.boundary=48,t.storage=48):e.isMatrix4?(t.boundary=64,t.storage=64):e.isTexture?console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."):console.warn("THREE.WebGLRenderer: Unsupported uniform value type.",e),t}function u(t){let n=t.target;n.removeEventListener("dispose",u);let i=s.indexOf(n.__bindingPointIndex);s.splice(i,1),e.deleteBuffer(r[n.id]),delete r[n.id],delete a[n.id]}return{bind:function(e,t){let n=t.program;i.uniformBlockBinding(e,n)},update:function(n,c){var h;let d,p,f,m,g=r[n.id];void 0===g&&(function(e){let t=e.uniforms,n=0;for(let e=0,i=t.length;e0&&(n+=16-i),e.__size=n,e.__cache={}}(n),(h=n).__bindingPointIndex=d=function(){for(let e=0;etypeof WebGLRenderingContext&&A instanceof WebGLRenderingContext)throw Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163.");t=A.getContextAttributes().alpha}else t=P;const B=new Uint32Array(4),k=new Int32Array(4);let H=null,V=null;const G=[],W=[];this.domElement=E,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this._outputColorSpace=I,this.toneMapping=0,this.toneMappingExposure=1;const j=this;let X=!1,q=0,Y=0,Z=null,J=-1,K=null;const $=new e_,Q=new e_;let ee=null;const en=new tz(0);let eo=0,el=E.width,ec=E.height,eh=1,ed=null,ep=null;const ef=new e_(0,0,el,ec),em=new e_(0,0,el,ec);let eg=!1;const ev=new iS;let ey=!1,eb=!1;const eS=new e2,eM=new e2,eT=new eE,ew=new e_,eA={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};let eC=!1;function eR(){return null===Z?eh:1}let eP=A;function eI(e,t){return E.getContext(e,t)}try{if("setAttribute"in E&&E.setAttribute("data-engine","three.js r171"),E.addEventListener("webglcontextlost",eU,!1),E.addEventListener("webglcontextrestored",eD,!1),E.addEventListener("webglcontextcreationerror",eO,!1),null===eP){const e="webgl2";if(eP=eI(e,{alpha:!0,depth:C,stencil:R,antialias:N,premultipliedAlpha:U,preserveDrawingBuffer:D,powerPreference:O,failIfMajorPerformanceCaveat:F}),null===eP)if(eI(e))throw Error("Error creating WebGL context with your selected attributes.");else throw Error("Error creating WebGL context.")}}catch(e){throw console.error("THREE.WebGLRenderer: "+e.message),e}function eL(){(n=new lr(eP)).init(),M=new uk(eP,n),i=new oY(eP,n,e,M),r=new uz(eP,n),i.reverseDepthBuffer&&z&&r.buffers.depth.setReversed(!0),a=new lo(eP),s=new uw,o=new uB(eP,n,r,s,i,M,a),l=new oJ(j),u=new li(j),c=new oz(eP),T=new oX(eP,c),h=new la(eP,c,a,T),d=new lu(eP,h,c,a),x=new ll(eP,i,o),v=new oZ(s),p=new uT(j,l,u,n,i,T,v),f=new uZ(j,s),m=new uR,g=new uD(n),y=new oj(j,l,u,r,d,t,U),_=new uO(j,d,i),w=new uJ(eP,a,i,r),b=new oq(eP,n,a),S=new ls(eP,n,a),a.programs=p.programs,j.capabilities=i,j.extensions=n,j.properties=s,j.renderLists=m,j.shadowMap=_,j.state=r,j.info=a}eL();const eN=new uX(j,eP);function eU(e){e.preventDefault(),console.log("THREE.WebGLRenderer: Context Lost."),X=!0}function eD(){console.log("THREE.WebGLRenderer: Context Restored."),X=!1;let e=a.autoReset,t=_.enabled,n=_.autoUpdate,i=_.needsUpdate,r=_.type;eL(),a.autoReset=e,_.enabled=t,_.autoUpdate=n,_.needsUpdate=i,_.type=r}function eO(e){console.error("THREE.WebGLRenderer: A WebGL context could not be created. Reason: ",e.statusMessage)}function eF(e){var t,n;let i,r=e.target;r.removeEventListener("dispose",eF),n=t=r,void 0!==(i=s.get(n).programs)&&(i.forEach(function(e){p.releaseProgram(e)}),n.isShaderMaterial&&p.releaseShaderCache(n)),s.remove(t)}function ez(e,t,n){!0===e.transparent&&2===e.side&&!1===e.forceSinglePass?(e.side=1,e.needsUpdate=!0,eY(e,t,n),e.side=0,e.needsUpdate=!0,eY(e,t,n),e.side=2):eY(e,t,n)}this.xr=eN,this.getContext=function(){return eP},this.getContextAttributes=function(){return eP.getContextAttributes()},this.forceContextLoss=function(){let e=n.get("WEBGL_lose_context");e&&e.loseContext()},this.forceContextRestore=function(){let e=n.get("WEBGL_lose_context");e&&e.restoreContext()},this.getPixelRatio=function(){return eh},this.setPixelRatio=function(e){void 0!==e&&(eh=e,this.setSize(el,ec,!1))},this.getSize=function(e){return e.set(el,ec)},this.setSize=function(e,t,n=!0){eN.isPresenting?console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting."):(el=e,ec=t,E.width=Math.floor(e*eh),E.height=Math.floor(t*eh),!0===n&&(E.style.width=e+"px",E.style.height=t+"px"),this.setViewport(0,0,e,t))},this.getDrawingBufferSize=function(e){return e.set(el*eh,ec*eh).floor()},this.setDrawingBufferSize=function(e,t,n){el=e,ec=t,eh=n,E.width=Math.floor(e*n),E.height=Math.floor(t*n),this.setViewport(0,0,e,t)},this.getCurrentViewport=function(e){return e.copy($)},this.getViewport=function(e){return e.copy(ef)},this.setViewport=function(e,t,n,i){e.isVector4?ef.set(e.x,e.y,e.z,e.w):ef.set(e,t,n,i),r.viewport($.copy(ef).multiplyScalar(eh).round())},this.getScissor=function(e){return e.copy(em)},this.setScissor=function(e,t,n,i){e.isVector4?em.set(e.x,e.y,e.z,e.w):em.set(e,t,n,i),r.scissor(Q.copy(em).multiplyScalar(eh).round())},this.getScissorTest=function(){return eg},this.setScissorTest=function(e){r.setScissorTest(eg=e)},this.setOpaqueSort=function(e){ed=e},this.setTransparentSort=function(e){ep=e},this.getClearColor=function(e){return e.copy(y.getClearColor())},this.setClearColor=function(){y.setClearColor.apply(y,arguments)},this.getClearAlpha=function(){return y.getClearAlpha()},this.setClearAlpha=function(){y.setClearAlpha.apply(y,arguments)},this.clear=function(e=!0,t=!0,n=!0){let i=0;if(e){let e=!1;if(null!==Z){let t=Z.texture.format;e=1033===t||1031===t||1029===t}if(e){let e=Z.texture.type,t=1009===e||1014===e||1012===e||1020===e||1017===e||1018===e,n=y.getClearColor(),i=y.getClearAlpha(),r=n.r,a=n.g,s=n.b;t?(B[0]=r,B[1]=a,B[2]=s,B[3]=i,eP.clearBufferuiv(eP.COLOR,0,B)):(k[0]=r,k[1]=a,k[2]=s,k[3]=i,eP.clearBufferiv(eP.COLOR,0,k))}else i|=eP.COLOR_BUFFER_BIT}t&&(i|=eP.DEPTH_BUFFER_BIT),n&&(i|=eP.STENCIL_BUFFER_BIT,this.state.buffers.stencil.setMask(0xffffffff)),eP.clear(i)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){E.removeEventListener("webglcontextlost",eU,!1),E.removeEventListener("webglcontextrestored",eD,!1),E.removeEventListener("webglcontextcreationerror",eO,!1),y.dispose(),m.dispose(),g.dispose(),s.dispose(),l.dispose(),u.dispose(),d.dispose(),T.dispose(),w.dispose(),p.dispose(),eN.dispose(),eN.removeEventListener("sessionstart",ek),eN.removeEventListener("sessionend",eH),eV.stop()},this.renderBufferDirect=function(e,t,a,d,p,m){let g;null===t&&(t=eA);let _=p.isMesh&&0>p.matrixWorld.determinant(),y=function(e,t,n,a,c){var h,d;!0!==t.isScene&&(t=eA),o.resetTextureUnits();let p=t.fog,m=a.isMeshStandardMaterial?t.environment:null,g=null===Z?j.outputColorSpace:!0===Z.isXRRenderTarget?Z.texture.colorSpace:L,_=(a.isMeshStandardMaterial?u:l).get(a.envMap||m),y=!0===a.vertexColors&&!!n.attributes.color&&4===n.attributes.color.itemSize,b=!!n.attributes.tangent&&(!!a.normalMap||a.anisotropy>0),S=!!n.morphAttributes.position,M=!!n.morphAttributes.normal,T=!!n.morphAttributes.color,E=0;a.toneMapped&&(null===Z||!0===Z.isXRRenderTarget)&&(E=j.toneMapping);let A=n.morphAttributes.position||n.morphAttributes.normal||n.morphAttributes.color,C=void 0!==A?A.length:0,R=s.get(a),P=V.state.lights;if(!0===ey&&(!0===eb||e!==K)){let t=e===K&&a.id===J;v.setState(a,e,t)}let I=!1;a.version===R.__version?R.needsLights&&R.lightsStateVersion!==P.state.version||R.outputColorSpace!==g||c.isBatchedMesh&&!1===R.batching?I=!0:c.isBatchedMesh||!0!==R.batching?c.isBatchedMesh&&!0===R.batchingColor&&null===c.colorTexture||c.isBatchedMesh&&!1===R.batchingColor&&null!==c.colorTexture||c.isInstancedMesh&&!1===R.instancing?I=!0:c.isInstancedMesh||!0!==R.instancing?c.isSkinnedMesh&&!1===R.skinning?I=!0:c.isSkinnedMesh||!0!==R.skinning?c.isInstancedMesh&&!0===R.instancingColor&&null===c.instanceColor||c.isInstancedMesh&&!1===R.instancingColor&&null!==c.instanceColor||c.isInstancedMesh&&!0===R.instancingMorph&&null===c.morphTexture||c.isInstancedMesh&&!1===R.instancingMorph&&null!==c.morphTexture||R.envMap!==_||!0===a.fog&&R.fog!==p||void 0!==R.numClippingPlanes&&(R.numClippingPlanes!==v.numPlanes||R.numIntersection!==v.numIntersection)||R.vertexAlphas!==y||R.vertexTangents!==b||R.morphTargets!==S||R.morphNormals!==M||R.morphColors!==T||R.toneMapping!==E?I=!0:R.morphTargetsCount!==C&&(I=!0):I=!0:I=!0:I=!0:(I=!0,R.__version=a.version);let N=R.currentProgram;!0===I&&(N=eY(a,t,c));let U=!1,D=!1,O=!1,F=N.getUniforms(),z=R.uniforms;if(r.useProgram(N.program)&&(U=!0,D=!0,O=!0),a.id!==J&&(J=a.id,D=!0),U||K!==e){r.buffers.depth.getReversed()?(eS.copy(e.projectionMatrix),ea(eS),es(eS),F.setValue(eP,"projectionMatrix",eS)):F.setValue(eP,"projectionMatrix",e.projectionMatrix),F.setValue(eP,"viewMatrix",e.matrixWorldInverse);let t=F.map.cameraPosition;void 0!==t&&t.setValue(eP,eT.setFromMatrixPosition(e.matrixWorld)),i.logarithmicDepthBuffer&&F.setValue(eP,"logDepthBufFC",2/(Math.log(e.far+1)/Math.LN2)),(a.isMeshPhongMaterial||a.isMeshToonMaterial||a.isMeshLambertMaterial||a.isMeshBasicMaterial||a.isMeshStandardMaterial||a.isShaderMaterial)&&F.setValue(eP,"isOrthographic",!0===e.isOrthographicCamera),K!==e&&(K=e,D=!0,O=!0)}if(c.isSkinnedMesh){F.setOptional(eP,c,"bindMatrix"),F.setOptional(eP,c,"bindMatrixInverse");let e=c.skeleton;e&&(null===e.boneTexture&&e.computeBoneTexture(),F.setValue(eP,"boneTexture",e.boneTexture,o))}c.isBatchedMesh&&(F.setOptional(eP,c,"batchingTexture"),F.setValue(eP,"batchingTexture",c._matricesTexture,o),F.setOptional(eP,c,"batchingIdTexture"),F.setValue(eP,"batchingIdTexture",c._indirectTexture,o),F.setOptional(eP,c,"batchingColorTexture"),null!==c._colorsTexture&&F.setValue(eP,"batchingColorTexture",c._colorsTexture,o));let B=n.morphAttributes;if((void 0!==B.position||void 0!==B.normal||void 0!==B.color)&&x.update(c,n,N),(D||R.receiveShadow!==c.receiveShadow)&&(R.receiveShadow=c.receiveShadow,F.setValue(eP,"receiveShadow",c.receiveShadow)),a.isMeshGouraudMaterial&&null!==a.envMap&&(z.envMap.value=_,z.flipEnvMap.value=_.isCubeTexture&&!1===_.isRenderTargetTexture?-1:1),a.isMeshStandardMaterial&&null===a.envMap&&null!==t.environment&&(z.envMapIntensity.value=t.environmentIntensity),D&&(F.setValue(eP,"toneMappingExposure",j.toneMappingExposure),R.needsLights&&(h=z,d=O,h.ambientLightColor.needsUpdate=d,h.lightProbe.needsUpdate=d,h.directionalLights.needsUpdate=d,h.directionalLightShadows.needsUpdate=d,h.pointLights.needsUpdate=d,h.pointLightShadows.needsUpdate=d,h.spotLights.needsUpdate=d,h.spotLightShadows.needsUpdate=d,h.rectAreaLights.needsUpdate=d,h.hemisphereLights.needsUpdate=d),p&&!0===a.fog&&f.refreshFogUniforms(z,p),f.refreshMaterialUniforms(z,a,eh,ec,V.state.transmissionRenderTarget[e.id]),ui.upload(eP,eZ(R),z,o)),a.isShaderMaterial&&!0===a.uniformsNeedUpdate&&(ui.upload(eP,eZ(R),z,o),a.uniformsNeedUpdate=!1),a.isSpriteMaterial&&F.setValue(eP,"center",c.center),F.setValue(eP,"modelViewMatrix",c.modelViewMatrix),F.setValue(eP,"normalMatrix",c.normalMatrix),F.setValue(eP,"modelMatrix",c.matrixWorld),a.isShaderMaterial||a.isRawShaderMaterial){let e=a.uniformsGroups;for(let t=0,n=e.length;t{function i(){(r.forEach(function(e){s.get(e).currentProgram.isReady()&&r.delete(e)}),0===r.size)?t(e):setTimeout(i,10)}null!==n.get("KHR_parallel_shader_compile")?i():setTimeout(i,10)})};let eB=null;function ek(){eV.stop()}function eH(){eV.start()}const eV=new oF;function eG(e,t,n,i){if(!1===e.visible)return;if(e.layers.test(t.layers)){if(e.isGroup)n=e.renderOrder;else if(e.isLOD)!0===e.autoUpdate&&e.update(t);else if(e.isLight)V.pushLight(e),e.castShadow&&V.pushShadow(e);else if(e.isSprite){if(!e.frustumCulled||ev.intersectsSprite(e)){i&&ew.setFromMatrixPosition(e.matrixWorld).applyMatrix4(eM);let t=d.update(e),r=e.material;r.visible&&H.push(e,t,r,n,ew.z,null)}}else if((e.isMesh||e.isLine||e.isPoints)&&(!e.frustumCulled||ev.intersectsObject(e))){let t=d.update(e),r=e.material;if(i&&(void 0!==e.boundingSphere?(null===e.boundingSphere&&e.computeBoundingSphere(),ew.copy(e.boundingSphere.center)):(null===t.boundingSphere&&t.computeBoundingSphere(),ew.copy(t.boundingSphere.center)),ew.applyMatrix4(e.matrixWorld).applyMatrix4(eM)),Array.isArray(r)){let i=t.groups;for(let a=0,s=i.length;a0&&eX(a,t,n),s.length>0&&eX(s,t,n),o.length>0&&eX(o,t,n),r.buffers.depth.setTest(!0),r.buffers.depth.setMask(!0),r.buffers.color.setMask(!0),r.setPolygonOffset(!1)}function ej(e,t,i,r){if(null!==(!0===i.isScene?i.overrideMaterial:null))return;void 0===V.state.transmissionRenderTarget[r.id]&&(V.state.transmissionRenderTarget[r.id]=new ex(1,1,{generateMipmaps:!0,type:n.has("EXT_color_buffer_half_float")||n.has("EXT_color_buffer_float")?1016:1009,minFilter:1008,samples:4,stencilBuffer:R,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:eu.workingColorSpace}));let a=V.state.transmissionRenderTarget[r.id],s=r.viewport||$;a.setSize(s.z,s.w);let l=j.getRenderTarget();j.setRenderTarget(a),j.getClearColor(en),(eo=j.getClearAlpha())<1&&j.setClearColor(0xffffff,.5),j.clear(),eC&&y.render(i);let u=j.toneMapping;j.toneMapping=0;let c=r.viewport;if(void 0!==r.viewport&&(r.viewport=void 0),V.setupLightsView(r),!0===ey&&v.setGlobalState(j.clippingPlanes,r),eX(e,i,r),o.updateMultisampleRenderTarget(a),o.updateRenderTargetMipmap(a),!1===n.has("WEBGL_multisampled_render_to_texture")){let e=!1;for(let n=0,a=t.length;ntypeof self&&eV.setContext(self),this.setAnimationLoop=function(e){eB=e,eN.setAnimationLoop(e),null===e?eV.stop():eV.start()},eN.addEventListener("sessionstart",ek),eN.addEventListener("sessionend",eH),this.render=function(e,t){if(void 0!==t&&!0!==t.isCamera)return void console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");if(!0===X)return;if(!0===e.matrixWorldAutoUpdate&&e.updateMatrixWorld(),null===t.parent&&!0===t.matrixWorldAutoUpdate&&t.updateMatrixWorld(),!0===eN.enabled&&!0===eN.isPresenting&&(!0===eN.cameraAutoUpdate&&eN.updateCamera(t),t=eN.getCamera()),!0===e.isScene&&e.onBeforeRender(j,e,t,Z),(V=g.get(e,W.length)).init(t),W.push(V),eM.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),ev.setFromProjectionMatrix(eM),eb=this.localClippingEnabled,ey=v.init(this.clippingPlanes,eb),(H=m.get(e,G.length)).init(),G.push(H),!0===eN.enabled&&!0===eN.isPresenting){let e=j.xr.getDepthSensingMesh();null!==e&&eG(e,t,-1/0,j.sortObjects)}eG(e,t,0,j.sortObjects),H.finish(),!0===j.sortObjects&&H.sort(ed,ep),(eC=!1===eN.enabled||!1===eN.isPresenting||!1===eN.hasDepthSensing())&&y.addToRenderList(H,e),this.info.render.frame++,!0===ey&&v.beginShadows();let n=V.state.shadowsArray;_.render(n,e,t),!0===ey&&v.endShadows(),!0===this.info.autoReset&&this.info.reset();let i=H.opaque,r=H.transmissive;if(V.setupLights(),t.isArrayCamera){let n=t.cameras;if(r.length>0)for(let t=0,a=n.length;t0&&ej(i,r,e,t),eC&&y.render(e),eW(H,e,t);null!==Z&&(o.updateMultisampleRenderTarget(Z),o.updateRenderTargetMipmap(Z)),!0===e.isScene&&e.onAfterRender(j,e,t),T.resetDefaultState(),J=-1,K=null,W.pop(),W.length>0?(V=W[W.length-1],!0===ey&&v.setGlobalState(j.clippingPlanes,V.state.camera)):V=null,G.pop(),H=G.length>0?G[G.length-1]:null},this.getActiveCubeFace=function(){return q},this.getActiveMipmapLevel=function(){return Y},this.getRenderTarget=function(){return Z},this.setRenderTargetTextures=function(e,t,i){s.get(e.texture).__webglTexture=t,s.get(e.depthTexture).__webglTexture=i;let r=s.get(e);r.__hasExternalTextures=!0,r.__autoAllocateDepthBuffer=void 0===i,r.__autoAllocateDepthBuffer||!0!==n.has("WEBGL_multisampled_render_to_texture")||(console.warn("THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided"),r.__useRenderToTexture=!1)},this.setRenderTargetFramebuffer=function(e,t){let n=s.get(e);n.__webglFramebuffer=t,n.__useDefaultFramebuffer=void 0===t},this.setRenderTarget=function(e,t=0,n=0){Z=e,q=t,Y=n;let i=!0,a=null,l=!1,u=!1;if(e){let c=s.get(e);if(void 0!==c.__useDefaultFramebuffer)r.bindFramebuffer(eP.FRAMEBUFFER,null),i=!1;else if(void 0===c.__webglFramebuffer)o.setupRenderTarget(e);else if(c.__hasExternalTextures)o.rebindTextures(e,s.get(e.texture).__webglTexture,s.get(e.depthTexture).__webglTexture);else if(e.depthBuffer){let t=e.depthTexture;if(c.__boundDepthTexture!==t){if(null!==t&&s.has(t)&&(e.width!==t.image.width||e.height!==t.image.height))throw Error("WebGLRenderTarget: Attached DepthTexture is initialized to the incorrect size.");o.setupDepthRenderbuffer(e)}}let h=e.texture;(h.isData3DTexture||h.isDataArrayTexture||h.isCompressedArrayTexture)&&(u=!0);let d=s.get(e).__webglFramebuffer;e.isWebGLCubeRenderTarget?(a=Array.isArray(d[t])?d[t][n]:d[t],l=!0):a=e.samples>0&&!1===o.useMultisampledRTT(e)?s.get(e).__webglMultisampledFramebuffer:Array.isArray(d)?d[n]:d,$.copy(e.viewport),Q.copy(e.scissor),ee=e.scissorTest}else $.copy(ef).multiplyScalar(eh).floor(),Q.copy(em).multiplyScalar(eh).floor(),ee=eg;if(r.bindFramebuffer(eP.FRAMEBUFFER,a)&&i&&r.drawBuffers(e,a),r.viewport($),r.scissor(Q),r.setScissorTest(ee),l){let i=s.get(e.texture);eP.framebufferTexture2D(eP.FRAMEBUFFER,eP.COLOR_ATTACHMENT0,eP.TEXTURE_CUBE_MAP_POSITIVE_X+t,i.__webglTexture,n)}else if(u){let i=s.get(e.texture);eP.framebufferTextureLayer(eP.FRAMEBUFFER,eP.COLOR_ATTACHMENT0,i.__webglTexture,n||0,t||0)}J=-1},this.readRenderTargetPixels=function(e,t,n,a,o,l,u){if(!(e&&e.isWebGLRenderTarget))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let c=s.get(e).__webglFramebuffer;if(e.isWebGLCubeRenderTarget&&void 0!==u&&(c=c[u]),c){r.bindFramebuffer(eP.FRAMEBUFFER,c);try{let r=e.texture,s=r.format,u=r.type;if(!i.textureFormatReadable(s))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");if(!i.textureTypeReadable(u))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");t>=0&&t<=e.width-a&&n>=0&&n<=e.height-o&&eP.readPixels(t,n,a,o,M.convert(s),M.convert(u),l)}finally{let e=null!==Z?s.get(Z).__webglFramebuffer:null;r.bindFramebuffer(eP.FRAMEBUFFER,e)}}},this.readRenderTargetPixelsAsync=async function(e,t,n,a,o,l,u){if(!(e&&e.isWebGLRenderTarget))throw Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let c=s.get(e).__webglFramebuffer;if(e.isWebGLCubeRenderTarget&&void 0!==u&&(c=c[u]),c){let u=e.texture,h=u.format,d=u.type;if(!i.textureFormatReadable(h))throw Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!i.textureTypeReadable(d))throw Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");if(t>=0&&t<=e.width-a&&n>=0&&n<=e.height-o){r.bindFramebuffer(eP.FRAMEBUFFER,c);let e=eP.createBuffer();eP.bindBuffer(eP.PIXEL_PACK_BUFFER,e),eP.bufferData(eP.PIXEL_PACK_BUFFER,l.byteLength,eP.STREAM_READ),eP.readPixels(t,n,a,o,M.convert(h),M.convert(d),0);let i=null!==Z?s.get(Z).__webglFramebuffer:null;r.bindFramebuffer(eP.FRAMEBUFFER,i);let u=eP.fenceSync(eP.SYNC_GPU_COMMANDS_COMPLETE,0);return eP.flush(),await er(eP,u,4),eP.bindBuffer(eP.PIXEL_PACK_BUFFER,e),eP.getBufferSubData(eP.PIXEL_PACK_BUFFER,0,l),eP.deleteBuffer(e),eP.deleteSync(u),l}throw Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")}},this.copyFramebufferToTexture=function(e,t=null,n=0){!0!==e.isTexture&&(ei("WebGLRenderer: copyFramebufferToTexture function signature has changed."),t=arguments[0]||null,e=arguments[1]);let i=Math.pow(2,-n),a=Math.floor(e.image.width*i),s=Math.floor(e.image.height*i),l=null!==t?t.x:0,u=null!==t?t.y:0;o.setTexture2D(e,0),eP.copyTexSubImage2D(eP.TEXTURE_2D,n,0,0,l,u,a,s),r.unbindTexture()};const eK=eP.createFramebuffer(),e$=eP.createFramebuffer();this.copyTextureToTexture=function(e,t,n=null,i=null,a=0,l=null){let u,c,h,d,p,f,m,g,v,_;!0!==e.isTexture&&(ei("WebGLRenderer: copyTextureToTexture function signature has changed."),i=arguments[0]||null,e=arguments[1],t=arguments[2],l=arguments[3]||0,n=null),null===l&&(0!==a?(ei("WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels."),l=a,a=0):l=0);let y=e.isCompressedTexture?e.mipmaps[l]:e.image;if(null!==n)u=n.max.x-n.min.x,c=n.max.y-n.min.y,h=n.isBox3?n.max.z-n.min.z:1,d=n.min.x,p=n.min.y,f=n.isBox3?n.min.z:0;else{let t=Math.pow(2,-a);u=Math.floor(y.width*t),c=Math.floor(y.height*t),h=e.isDataArrayTexture?y.depth:e.isData3DTexture?Math.floor(y.depth*t):1,d=0,p=0,f=0}null!==i?(m=i.x,g=i.y,v=i.z):(m=0,g=0,v=0);let x=M.convert(t.format),b=M.convert(t.type);t.isData3DTexture?(o.setTexture3D(t,0),_=eP.TEXTURE_3D):t.isDataArrayTexture||t.isCompressedArrayTexture?(o.setTexture2DArray(t,0),_=eP.TEXTURE_2D_ARRAY):(o.setTexture2D(t,0),_=eP.TEXTURE_2D),eP.pixelStorei(eP.UNPACK_FLIP_Y_WEBGL,t.flipY),eP.pixelStorei(eP.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t.premultiplyAlpha),eP.pixelStorei(eP.UNPACK_ALIGNMENT,t.unpackAlignment);let S=eP.getParameter(eP.UNPACK_ROW_LENGTH),T=eP.getParameter(eP.UNPACK_IMAGE_HEIGHT),w=eP.getParameter(eP.UNPACK_SKIP_PIXELS),E=eP.getParameter(eP.UNPACK_SKIP_ROWS),A=eP.getParameter(eP.UNPACK_SKIP_IMAGES);eP.pixelStorei(eP.UNPACK_ROW_LENGTH,y.width),eP.pixelStorei(eP.UNPACK_IMAGE_HEIGHT,y.height),eP.pixelStorei(eP.UNPACK_SKIP_PIXELS,d),eP.pixelStorei(eP.UNPACK_SKIP_ROWS,p),eP.pixelStorei(eP.UNPACK_SKIP_IMAGES,f);let C=e.isDataArrayTexture||e.isData3DTexture,R=t.isDataArrayTexture||t.isData3DTexture;if(e.isDepthTexture){let n=s.get(e),i=s.get(t),o=s.get(n.__renderTarget),_=s.get(i.__renderTarget);r.bindFramebuffer(eP.READ_FRAMEBUFFER,o.__webglFramebuffer),r.bindFramebuffer(eP.DRAW_FRAMEBUFFER,_.__webglFramebuffer);for(let n=0;ntypeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}get coordinateSystem(){return 2e3}get outputColorSpace(){return this._outputColorSpace}set outputColorSpace(e){this._outputColorSpace=e;let t=this.getContext();t.drawingBufferColorspace=eu._getDrawingBufferColorSpace(e),t.unpackColorSpace=eu._getUnpackColorSpace()}}e.s(["PMREMGenerator",0,o8,"ShaderChunk",0,oB,"ShaderLib",0,oH,"UniformsLib",0,ok,"WebGLRenderer",0,uK,"WebGLUtils",0,uk],8560);var u$=e.i(30224);let uQ=e=>{let t,n=new Set,i=(e,i)=>{let r="function"==typeof e?e(t):e;if(!Object.is(r,t)){let e=t;t=(null!=i?i:"object"!=typeof r||null===r)?r:Object.assign({},t,r),n.forEach(n=>n(t,e))}},r=()=>t,a={setState:i,getState:r,getInitialState:()=>s,subscribe:e=>(n.add(e),()=>n.delete(e))},s=t=e(i,r,a);return a},u0=e=>e?uQ(e):uQ;e.s(["createStore",0,u0],8155);let{useSyncExternalStoreWithSelector:u1}=u$.default,u2=(e,t)=>{let n=u0(e),i=(e,i=t)=>(function(e,t=e=>e,n){let i=u1(e.subscribe,e.getState,e.getInitialState,t,n);return E.default.useDebugValue(i),i})(n,e,i);return Object.assign(i,n),i},u3=(e,t)=>e?u2(e,t):u2,u4=[];function u5(e,t,n=(e,t)=>e===t){if(e===t)return!0;if(!e||!t)return!1;let i=e.length;if(t.length!==i)return!1;for(let r=0;r0&&(r.timeout&&clearTimeout(r.timeout),r.timeout=setTimeout(r.remove,i.lifespan)),r.response;if(!n)throw r.promise}let r={keys:t,equal:i.equal,remove:()=>{let e=u4.indexOf(r);-1!==e&&u4.splice(e,1)},promise:("object"==typeof e&&"function"==typeof e.then?e:e(...t)).then(e=>{r.response=e,i.lifespan&&i.lifespan>0&&(r.timeout=setTimeout(r.remove,i.lifespan))}).catch(e=>r.error=e)};if(u4.push(r),!n)throw r.promise}var u8=e.i(89499),u9=e.i(43476),u7=E;function ce(e,t,n){if(!e)return;if(!0===n(e))return e;let i=t?e.return:e.child;for(;i;){let e=ce(i,t,n);if(e)return e;i=t?null:i.sibling}}function ct(e){try{return Object.defineProperties(e,{_currentRenderer:{get:()=>null,set(){}},_currentRenderer2:{get:()=>null,set(){}}})}catch(t){return e}}"u">typeof window&&((null==(y=window.document)?void 0:y.createElement)||(null==(x=window.navigator)?void 0:x.product)==="ReactNative")?u7.useLayoutEffect:u7.useEffect;let cn=ct(u7.createContext(null));class ci extends u7.Component{render(){return u7.createElement(cn.Provider,{value:this._reactInternals},this.props.children)}}function cr(){let e=u7.useContext(cn);if(null===e)throw Error("its-fine: useFiber must be called within a !");let t=u7.useId();return u7.useMemo(()=>{for(let n of[e,null==e?void 0:e.alternate]){if(!n)continue;let e=ce(n,!1,e=>{let n=e.memoizedState;for(;n;){if(n.memoizedState===t)return!0;n=n.next}});if(e)return e}},[e,t])}let ca=Symbol.for("react.context"),cs=e=>null!==e&&"object"==typeof e&&"$$typeof"in e&&e.$$typeof===ca;function co(e){let t=e.root;for(;t.getState().previousRoot;)t=t.getState().previousRoot;return t}E.act;let cl=e=>e&&e.hasOwnProperty("current"),cu=e=>null!=e&&("string"==typeof e||"number"==typeof e||e.isColor),cc="u">typeof window&&((null==(m=window.document)?void 0:m.createElement)||(null==(g=window.navigator)?void 0:g.product)==="ReactNative")?E.useLayoutEffect:E.useEffect;function ch(e){let t=E.useRef(e);return cc(()=>void(t.current=e),[e]),t}function cd(){let e,t=cr(),n=(e=function(){let e=cr(),[t]=u7.useState(()=>new Map);t.clear();let n=e;for(;n;){let e=n.type;cs(e)&&e!==cn&&!t.has(e)&&t.set(e,u7.use(ct(e))),n=n.return}return t}(),u7.useMemo(()=>Array.from(e.keys()).reduce((t,n)=>i=>u7.createElement(t,null,u7.createElement(n.Provider,{...i,value:e.get(n)})),e=>u7.createElement(ci,{...e})),[e]));return E.useMemo(()=>({children:e})=>{let i=ce(t,!0,e=>e.type===E.StrictMode)?E.StrictMode:E.Fragment;return(0,u9.jsx)(i,{children:(0,u9.jsx)(n,{children:e})})},[t,n])}function cp({set:e}){return cc(()=>(e(new Promise(()=>null)),()=>e(!1)),[e]),null}let cf=((v=class extends E.Component{constructor(...e){super(...e),this.state={error:!1}}componentDidCatch(e){this.props.set(e)}render(){return this.state.error?null:this.props.children}}).getDerivedStateFromError=()=>({error:!0}),v);function cm(e){var t;let n="u">typeof window?null!=(t=window.devicePixelRatio)?t:2:1;return Array.isArray(e)?Math.min(Math.max(e[0],n),e[1]):e}function cg(e){var t;return null==(t=e.__r3f)?void 0:t.root.getState()}let cv={obj:e=>e===Object(e)&&!cv.arr(e)&&"function"!=typeof e,fun:e=>"function"==typeof e,str:e=>"string"==typeof e,num:e=>"number"==typeof e,boo:e=>"boolean"==typeof e,und:e=>void 0===e,nul:e=>null===e,arr:e=>Array.isArray(e),equ(e,t,{arrays:n="shallow",objects:i="reference",strict:r=!0}={}){let a;if(typeof e!=typeof t||!!e!=!!t)return!1;if(cv.str(e)||cv.num(e)||cv.boo(e))return e===t;let s=cv.obj(e);if(s&&"reference"===i)return e===t;let o=cv.arr(e);if(o&&"reference"===n)return e===t;if((o||s)&&e===t)return!0;for(a in e)if(!(a in t))return!1;if(s&&"shallow"===n&&"shallow"===i){for(a in r?t:e)if(!cv.equ(e[a],t[a],{strict:r,objects:"reference"}))return!1}else for(a in r?t:e)if(e[a]!==t[a])return!1;if(cv.und(a)){if(o&&0===e.length&&0===t.length||s&&0===Object.keys(e).length&&0===Object.keys(t).length)return!0;if(e!==t)return!1}return!0}},c_=["children","key","ref"];function cy(e,t,n,i){let r=null==e?void 0:e.__r3f;return!r&&(r={root:t,type:n,parent:null,children:[],props:function(e){let t={};for(let n in e)c_.includes(n)||(t[n]=e[n]);return t}(i),object:e,eventCount:0,handlers:{},isHidden:!1},e&&(e.__r3f=r)),r}function cx(e,t){if(!t.includes("-")||t in e)return{root:e,key:t,target:e[t]};let n=e,i=t.split("-");for(let r of i){if("object"!=typeof n||null===n){if(void 0!==n)return{root:n,key:i.slice(i.indexOf(r)).join("-"),target:void 0};return{root:e,key:t,target:void 0}}t=r,e=n,n=n[t]}return{root:e,key:t,target:n}}let cb=/-\d+$/;function cS(e,t){if(cv.str(t.props.attach)){if(cb.test(t.props.attach)){let n=t.props.attach.replace(cb,""),{root:i,key:r}=cx(e.object,n);Array.isArray(i[r])||(i[r]=[])}let{root:n,key:i}=cx(e.object,t.props.attach);t.previousAttach=n[i],n[i]=t.object}else cv.fun(t.props.attach)&&(t.previousAttach=t.props.attach(e.object,t.object))}function cM(e,t){if(cv.str(t.props.attach)){let{root:n,key:i}=cx(e.object,t.props.attach),r=t.previousAttach;void 0===r?delete n[i]:n[i]=r}else null==t.previousAttach||t.previousAttach(e.object,t.object);delete t.previousAttach}let cT=[...c_,"args","dispose","attach","object","onUpdate","dispose"],cw=new Map,cE=["map","emissiveMap","sheenColorMap","specularColorMap","envMap"],cA=/^on(Pointer|Click|DoubleClick|ContextMenu|Wheel)/;function cC(e,t){var n,i;let r=e.__r3f,a=r&&co(r).getState(),s=null==r?void 0:r.eventCount;for(let n in t){let s=t[n];if(cT.includes(n))continue;if(r&&cA.test(n)){"function"==typeof s?r.handlers[n]=s:delete r.handlers[n],r.eventCount=Object.keys(r.handlers).length;continue}if(void 0===s)continue;let{root:o,key:l,target:u}=cx(e,n);if(void 0===u&&("object"!=typeof o||null===o))throw Error(`R3F: Cannot set "${n}". Ensure it is an object before setting "${l}".`);if(u instanceof ti&&s instanceof ti)u.mask=s.mask;else if(u instanceof tz&&cu(s))u.set(s);else if(null!==u&&"object"==typeof u&&"function"==typeof u.set&&"function"==typeof u.copy&&null!=s&&s.constructor&&u.constructor===s.constructor)u.copy(s);else if(null!==u&&"object"==typeof u&&"function"==typeof u.set&&Array.isArray(s))"function"==typeof u.fromArray?u.fromArray(s):u.set(...s);else if(null!==u&&"object"==typeof u&&"function"==typeof u.set&&"number"==typeof s)"function"==typeof u.setScalar?u.setScalar(s):u.set(s);else if(o instanceof nb&&"uniforms"===l&&cv.obj(s)){cv.obj(o.uniforms)||(o.uniforms={});let e=o.uniforms;for(let t in s){let n=s[t],i=e[t];i?Object.assign(i,n):e[t]={...n}}}else o[l]=s,a&&!a.linear&&cE.includes(l)&&null!=(i=o[l])&&i.isTexture&&1023===o[l].format&&1009===o[l].type&&(o[l].colorSpace=I)}if(null!=r&&r.parent&&null!=a&&a.internal&&null!=(n=r.object)&&n.isObject3D&&s!==r.eventCount){let e=r.object,t=a.internal.interaction.indexOf(e);t>-1&&a.internal.interaction.splice(t,1),r.eventCount&&null!==e.raycast&&a.internal.interaction.push(e)}return r&&void 0===r.props.attach&&(r.object.isBufferGeometry?r.props.attach="geometry":r.object.isMaterial&&(r.props.attach="material")),r&&cR(r),e}function cR(e){var t;if(!e.parent)return;null==e.props.onUpdate||e.props.onUpdate(e.object);let n=null==(t=e.root)||null==t.getState?void 0:t.getState();n&&0===n.internal.frames&&n.invalidate()}function cP(e,t){!e.manual&&(e&&e.isOrthographicCamera?(e.left=-(t.width/2),e.right=t.width/2,e.top=t.height/2,e.bottom=-(t.height/2)):e.aspect=t.width/t.height,e.updateProjectionMatrix())}let cI=e=>null==e?void 0:e.isObject3D;function cL(e){return(e.eventObject||e.object).uuid+"/"+e.index+e.instanceId}function cN(e,t,n,i){let r=n.get(t);r&&(n.delete(t),0===n.size&&(e.delete(i),r.target.releasePointerCapture(i)))}let cU=e=>!!(null!=e&&e.render),cD=E.createContext(null);function cO(){let e=E.useContext(cD);if(!e)throw Error("R3F: Hooks can only be used within the Canvas component!");return e}function cF(e=e=>e,t){return cO()(e,t)}function cz(e,t=0){let n=cO(),i=n.getState().internal.subscribe,r=ch(e);return cc(()=>i(r,t,n),[t,i,n]),null}let cB=new WeakMap;function ck(e,t){return function(n,...i){var r;let a;return"function"==typeof n&&(null==n||null==(r=n.prototype)?void 0:r.constructor)===n?(a=cB.get(n))||(a=new n,cB.set(n,a)):a=n,e&&e(a),Promise.all(i.map(e=>new Promise((n,i)=>a.load(e,e=>{var t;let i;cI(null==e?void 0:e.scene)&&Object.assign(e,(t=e.scene,i={nodes:{},materials:{},meshes:{}},t&&t.traverse(e=>{e.name&&(i.nodes[e.name]=e),e.material&&!i.materials[e.material.name]&&(i.materials[e.material.name]=e.material),e.isMesh&&!i.meshes[e.name]&&(i.meshes[e.name]=e)}),i)),n(e)},t,t=>i(Error(`Could not load ${e}: ${null==t?void 0:t.message}`))))))}}function cH(e,t,n,i){let r=Array.isArray(t)?t:[t],a=u6(ck(n,i),[e,...r],!1,{equal:cv.equ});return Array.isArray(t)?a:a[0]}cH.preload=function(e,t,n){let i,r=Array.isArray(t)?t:[t];u6(ck(n),[e,...r],!0,i)},cH.clear=function(e,t){var n=[e,...Array.isArray(t)?t:[t]];if(void 0===n||0===n.length)u4.splice(0,u4.length);else{let e=u4.find(e=>u5(n,e.keys,e.equal));e&&e.remove()}};var cV={exports:{}},cG={exports:{}};cG.exports;let cW=(T||(T=1,M||(M=1,cG.exports=function(e){function t(e,t,n,i){return new iJ(e,t,n,i)}function n(){}function i(e){var t="https://react.dev/errors/"+e;if(1sT||(e.current=sM[sT],sM[sT]=null,sT--)}function h(e,t){sM[++sT]=e.current,e.current=t}function d(e){var t=42&e;if(0!==t)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return 261888&e;case 262144:case 524288:case 1048576:case 2097152:return 3932160&e;case 4194304:case 8388608:case 0x1000000:case 0x2000000:return 0x3c00000&e;case 0x4000000:return 0x4000000;case 0x8000000:return 0x8000000;case 0x10000000:return 0x10000000;case 0x20000000:return 0x20000000;case 0x40000000:return 0;default:return e}}function p(e,t,n){var i=e.pendingLanes;if(0===i)return 0;var r=0,a=e.suspendedLanes,s=e.pingedLanes;e=e.warmLanes;var o=0x7ffffff&i;return 0!==o?0!=(i=o&~a)?r=d(i):0!=(s&=o)?r=d(s):n||0!=(n=o&~e)&&(r=d(n)):0!=(o=i&~a)?r=d(o):0!==s?r=d(s):n||0!=(n=i&~e)&&(r=d(n)),0===r?0:0!==t&&t!==r&&(t&a)==0&&((a=r&-r)>=(n=t&-t)||32===a&&(4194048&n)!=0)?t:r}function f(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)==0}function m(){var e=sI;return(0x3c00000&(sI<<=1))==0&&(sI=4194304),e}function g(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function v(e,t){e.pendingLanes|=t,0x10000000!==t&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function _(e,t,n){e.pendingLanes|=t,e.suspendedLanes&=~t;var i=31-sE(t);e.entangledLanes|=t,e.entanglements[i]=0x40000000|e.entanglements[i]|261930&n}function y(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var i=31-sE(n),r=1<)":-1r||l[i]!==u[r]){var c=` -`+l[i].replace(" at new "," at ");return e.displayName&&c.includes("")&&(c=c.replace("",e.displayName)),c}while(1<=i&&0<=r)break}}}finally{sY=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:"")?T(n):""}function C(e){try{var t="",n=null;do t+=function(e,t){switch(e.tag){case 26:case 27:case 5:return T(e.type);case 16:return T("Lazy");case 13:return e.child!==t&&null!==t?T("Suspense Fallback"):T("Suspense");case 19:return T("SuspenseList");case 0:case 15:return A(e.type,!1);case 11:return A(e.type.render,!1);case 1:return A(e.type,!0);case 31:return T("Activity");default:return""}}(e,n),n=e,e=e.return;while(e)return t}catch(e){return` -Error generating stack: `+e.message+` -`+e.stack}}function R(e,t){if("object"==typeof e&&null!==e){var n=sZ.get(e);return void 0!==n?n:(t={value:e,source:t,stack:C(t)},sZ.set(e,t),t)}return{value:e,source:t,stack:C(t)}}function P(e,t){sJ[sK++]=sQ,sJ[sK++]=s$,s$=e,sQ=t}function I(e,t,n){s0[s1++]=s3,s0[s1++]=s4,s0[s1++]=s2,s2=e;var i=s3;e=s4;var r=32-sE(i)-1;i&=~(1<>=s,r-=s,s3=1<<32-sE(t)+r|n<d?(p=h,h=null):p=h.sibling;var v=m(t,h,s[d],o);if(null===v){null===h&&(h=p);break}e&&h&&null===v.alternate&&n(t,h),i=l(v,i,d),null===c?u=v:c.sibling=v,c=v,h=p}if(d===s.length)return r(t,h),ot&&P(t,d),u;if(null===h){for(;dp?(v=d,d=null):v=d.sibling;var y=m(t,d,_.value,u);if(null===y){null===d&&(d=v);break}e&&d&&null===y.alternate&&n(t,d),s=l(y,s,p),null===h?c=y:h.sibling=y,h=y,d=v}if(_.done)return r(t,d),ot&&P(t,p),c;if(null===d){for(;!_.done;p++,_=o.next())null!==(_=f(t,_.value,u))&&(s=l(_,s,p),null===h?c=_:h.sibling=_,h=_);return ot&&P(t,p),c}for(d=a(d);!_.done;p++,_=o.next())null!==(_=g(d,t,p,_.value,u))&&(e&&null!==_.alternate&&d.delete(null===_.key?p:_.key),s=l(_,s,p),null===h?c=_:h.sibling=_,h=_);return e&&d.forEach(function(e){return n(t,e)}),ot&&P(t,p),c}(c,h,d=v.call(d),p)}if("function"==typeof d.then)return t(c,h,eM(d),p);if(d.$$typeof===rd)return t(c,h,ee(c,d),p);ew(c,d)}return"string"==typeof d&&""!==d||"number"==typeof d||"bigint"==typeof d?(d=""+d,null!==h&&6===h.tag?(r(c,h.sibling),(p=s(h,d)).return=c):(r(c,h),(p=i2(d,c.mode,p)).return=c),u(c=p)):r(c,h)}(c,h,d,p);return oR=null,v}catch(e){if(e===oT||e===oE)throw e;var _=t(29,e,null,c.mode);return _.lanes=p,_.return=c,_}finally{}}}function eA(){for(var e=oU,t=oD=oU=0;ta?a:8);var s=rM.T,o={};rM.T=o,t$(e,!1,t,n);try{var l=r(),u=rM.S;if(null!==u&&u(o,l),null!==l&&"object"==typeof l&&"function"==typeof l.then){var c,h,d=(c=[],h={status:"pending",value:null,reason:null,then:function(e){c.push(e)}},l.then(function(){h.status="fulfilled",h.value=i;for(var e=0;e";case lu:return":has("+(id(e)||"")+")";case lc:return'[role="'+e.value+'"]';case ld:return'"'+e.value+'"';case lh:return'[data-testname="'+e.value+'"]';default:throw Error(i(365))}}function ip(e,t){var n=[];e=[e,0];for(var i=0;ilO&&(t.flags|=128,a=!0,nO(r,!1),t.lanes=4194304)}else{if(!a)if(null!==(e=eK(s))){if(t.flags|=128,a=!0,t.updateQueue=e=e.updateQueue,nD(t,e),nO(r,!0),null===r.tail&&"hidden"===r.tailMode&&!s.alternate&&!ot)return nF(t),null}else 2*sO()-r.renderingStartTime>lO&&0x20000000!==n&&(t.flags|=128,a=!0,nO(r,!1),t.lanes=4194304);r.isBackwards?(s.sibling=t.child,t.child=s):(null!==(e=r.last)?e.sibling=s:t.child=s,r.last=s)}return null!==r.tail?(e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=sO(),e.sibling=null,n=oV.current,h(oV,a?1&n|2:1&n),ot&&P(t,r.treeForkCount),e):(nF(t),null);case 22:case 23:return eJ(t),ej(),r=null!==t.memoizedState,null!==e?null!==e.memoizedState!==r&&(t.flags|=8192):r&&(t.flags|=8192),r?(0x20000000&n)!=0&&(128&t.flags)==0&&(nF(t),6&t.subtreeFlags&&(t.flags|=8192)):nF(t),null!==(n=t.updateQueue)&&nD(t,n.retryQueue),n=null,null!==e&&null!==e.memoizedState&&null!==e.memoizedState.cachePool&&(n=e.memoizedState.cachePool.pool),r=null,null!==t.memoizedState&&null!==t.memoizedState.cachePool&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),null!==e&&c(oM),null;case 24:return n=null,null!==e&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),q(oh),nF(t),null;case 25:case 30:return null}throw Error(i(156,t.tag))}(t.alternate,t,lT);if(null!==n){lv=n;return}if(null!==(t=t.sibling)){lv=t;return}lv=t=e}while(null!==t)0===lw&&(lw=5)}function iD(e,t){do{var n=function(e,t){switch(N(t),t.tag){case 1:return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return q(oh),O(),(65536&(e=t.flags))!=0&&(128&e)==0?(t.flags=-65537&e|128,t):null;case 26:case 27:case 5:return z(t),null;case 31:if(null!==t.memoizedState){if(eJ(t),null===t.alternate)throw Error(i(340));G()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 13:if(eJ(t),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(i(340));G()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return c(oV),null;case 4:return O(),null;case 10:return q(t.type),null;case 22:case 23:return eJ(t),ej(),null!==e&&c(oM),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 24:return q(oh),null;default:return null}}(e.alternate,e);if(null!==n){n.flags&=32767,lv=n;return}if(null!==(n=e.return)&&(n.flags|=32768,n.subtreeFlags=0,n.deletions=null),!t&&null!==(e=e.sibling)){lv=e;return}lv=e=n}while(null!==e)lw=6,lv=null}function iO(e,t,n,r,a,s,o,l,u){e.cancelPendingCommit=null;do iH();while(0!==lB)if((6&lm)!=0)throw Error(i(327));if(null!==t){if(t===e.current)throw Error(i(177));if(function(e,t,n,i,r,a){var s=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var o=e.entanglements,l=e.expirationTimes,u=e.hiddenUpdates;for(n=s&~n;0n?32:n;n=rM.T;var a=rq();try{rX(r),rM.T=null,r=lW,lW=null;var s=lk,o=lV;if(lB=0,lH=lk=null,lV=0,(6&lm)!=0)throw Error(i(331));var l=lm;if(lm|=4,il(s.current),it(s,s.current,o,r),lm=l,es(0,!1),sW&&"function"==typeof sW.onPostCommitFiberRoot)try{sW.onPostCommitFiberRoot(sG,s)}catch{}return!0}finally{rX(a),rM.T=n,ik(e,t)}}function iG(e,t,n){t=R(n,t),t=t9(e.stateNode,t,2),null!==(e=eO(e,t,2))&&(v(e,2),ea(e))}function iW(e,t,n){if(3===e.tag)iG(e,e,n);else for(;null!==t;){if(3===t.tag){iG(t,e,n);break}if(1===t.tag){var i=t.stateNode;if("function"==typeof t.type.getDerivedStateFromError||"function"==typeof i.componentDidCatch&&(null===lz||!lz.has(i))){e=R(n,e),null!==(i=eO(t,n=t7(2),2))&&(ne(n,i,t,e),v(i,2),ea(i));break}}t=t.return}}function ij(e,t,n){var i=e.pingCache;if(null===i){i=e.pingCache=new lf;var r=new Set;i.set(t,r)}else void 0===(r=i.get(t))&&(r=new Set,i.set(t,r));r.has(n)||(lM=!0,r.add(n),e=iX.bind(null,e,t,n),t.then(e,e))}function iX(e,t,n){var i=e.pingCache;null!==i&&i.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,lg===e&&(l_&n)===n&&(4===lw||3===lw&&(0x3c00000&l_)===l_&&300>sO()-lU?(2&lm)==0&&iT(e,0):lC|=n,lP===l_&&(lP=0)),ea(e)}function iq(e,t){0===t&&(t=m()),null!==(e=eP(e,t))&&(v(e,t),ea(e))}function iY(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),iq(e,n)}function iZ(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,a=e.memoizedState;null!==a&&(n=a.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}null!==r&&r.delete(t),iq(e,n)}function iJ(e,t,n,i){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.refCleanup=this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=i,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function iK(e){return!(!(e=e.prototype)||!e.isReactComponent)}function i$(e,n){var i=e.alternate;return null===i?((i=t(e.tag,n,e.key,e.mode)).elementType=e.elementType,i.type=e.type,i.stateNode=e.stateNode,i.alternate=e,e.alternate=i):(i.pendingProps=n,i.type=e.type,i.flags=0,i.subtreeFlags=0,i.deletions=null),i.flags=0x3e00000&e.flags,i.childLanes=e.childLanes,i.lanes=e.lanes,i.child=e.child,i.memoizedProps=e.memoizedProps,i.memoizedState=e.memoizedState,i.updateQueue=e.updateQueue,n=e.dependencies,i.dependencies=null===n?null:{lanes:n.lanes,firstContext:n.firstContext},i.sibling=e.sibling,i.index=e.index,i.ref=e.ref,i.refCleanup=e.refCleanup,i}function iQ(e,t){e.flags&=0x3e00002;var n=e.alternate;return null===n?(e.childLanes=0,e.lanes=t,e.child=null,e.subtreeFlags=0,e.memoizedProps=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null,e.stateNode=null):(e.childLanes=n.childLanes,e.lanes=n.lanes,e.child=n.child,e.subtreeFlags=0,e.deletions=null,e.memoizedProps=n.memoizedProps,e.memoizedState=n.memoizedState,e.updateQueue=n.updateQueue,e.type=n.type,e.dependencies=null===(t=n.dependencies)?null:{lanes:t.lanes,firstContext:t.firstContext}),e}function i0(e,n,r,a,s,o){var l=0;if(a=e,"function"==typeof e)iK(e)&&(l=1);else if("string"==typeof e)l=si&&sv?sr(e,r,s5.current)?26:sb(e)?27:5:si?sr(e,r,s5.current)?26:5:sv&&sb(e)?27:5;else o:switch(e){case r_:return(e=t(31,r,n,s)).elementType=r_,e.lanes=o,e;case rl:return i1(r.children,s,o,n);case ru:l=8,s|=24;break;case rc:return(e=t(12,r,n,2|s)).elementType=rc,e.lanes=o,e;case rf:return(e=t(13,r,n,s)).elementType=rf,e.lanes=o,e;case rm:return(e=t(19,r,n,s)).elementType=rm,e.lanes=o,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case rd:l=10;break o;case rh:l=9;break o;case rp:l=11;break o;case rg:l=14;break o;case rv:l=16,a=null;break o}l=29,r=Error(i(130,null===e?"null":typeof e,"")),a=null}return(n=t(l,r,n,s)).elementType=e,n.type=a,n.lanes=o,n}function i1(e,n,i,r){return(e=t(7,e,r,n)).lanes=i,e}function i2(e,n,i){return(e=t(6,e,null,n)).lanes=i,e}function i3(e){var n=t(18,null,null,0);return n.stateNode=e,n}function i4(e,n,i){return(n=t(4,null!==e.children?e.children:[],e.key,n)).lanes=i,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}function i5(e,t,n,i,r,a,s,o,l){this.tag=1,this.containerInfo=e,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=rB,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=g(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=g(0),this.hiddenUpdates=g(null),this.identifierPrefix=i,this.onUncaughtError=r,this.onCaughtError=a,this.onRecoverableError=s,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=l,this.incompleteTransitions=new Map}function i6(e,n,i,r,a,s,o,l,u,c,h,d){return e=new i5(e,n,i,o,u,c,h,d,l),n=1,!0===s&&(n|=24),s=t(3,null,null,n),e.current=s,s.stateNode=e,n=en(),n.refCount++,e.pooledCache=n,n.refCount++,s.memoizedState={element:r,isDehydrated:i,cache:n},eN(s),e}function i8(e){var t=e._reactInternals;if(void 0===t)throw"function"==typeof e.render?Error(i(188)):Error(i(268,e=Object.keys(e).join(",")));return null===(e=null!==(e=s(t))?function e(t){var n=t.tag;if(5===n||26===n||27===n||6===n)return t;for(t=t.child;null!==t;){if(null!==(n=e(t)))return n;t=t.sibling}return null}(e):null)?null:rA(e.stateNode)}function i9(e,t,n,i,r,a){r=sw,null===i.context?i.context=r:i.pendingContext=r,(i=eD(t)).payload={element:n},null!==(a=void 0===a?null:a)&&(i.callback=a),null!==(n=eO(e,i,t))&&(i_(n,e,t),eF(n,e,t))}function i7(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n>>=0)?32:31-(sA(e)/sC|0)|0},sA=Math.log,sC=Math.LN2,sR=256,sP=262144,sI=4194304,sL=ri.unstable_scheduleCallback,sN=ri.unstable_cancelCallback,sU=ri.unstable_shouldYield,sD=ri.unstable_requestPaint,sO=ri.unstable_now,sF=ri.unstable_ImmediatePriority,sz=ri.unstable_UserBlockingPriority,sB=ri.unstable_NormalPriority,sk=ri.unstable_IdlePriority,sH=ri.log,sV=ri.unstable_setDisableYieldValue,sG=null,sW=null,sj="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},sX="function"==typeof reportError?reportError:function(e){if("object"==typeof window&&"function"==typeof window.ErrorEvent){var t=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:"object"==typeof e&&null!==e&&"string"==typeof e.message?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if("object"==typeof w.default&&"function"==typeof w.default.emit)return void w.default.emit("uncaughtException",e);console.error(e)},sq=Object.prototype.hasOwnProperty,sY=!1,sZ=new WeakMap,sJ=[],sK=0,s$=null,sQ=0,s0=[],s1=0,s2=null,s3=1,s4="",s5=u(null),s6=u(null),s8=u(null),s9=u(null),s7=null,oe=null,ot=!1,on=null,oi=!1,or=Error(i(519)),oa=u(null),os=null,oo=null,ol="u">typeof AbortController?AbortController:function(){var e=[],t=this.signal={aborted:!1,addEventListener:function(t,n){e.push(n)}};this.abort=function(){t.aborted=!0,e.forEach(function(e){return e()})}},ou=ri.unstable_scheduleCallback,oc=ri.unstable_NormalPriority,oh={$$typeof:rd,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0},od=null,op=null,of=!1,om=!1,og=!1,ov=0,o_=null,oy=0,ox=0,ob=null,oS=rM.S;rM.S=function(e,t){lD=sO(),"object"==typeof t&&null!==t&&"function"==typeof t.then&&function(e){if(null===o_){var t=o_=[];oy=0,ox=ed(),ob={status:"pending",value:void 0,then:function(e){t.push(e)}}}oy++,e.then(ep,ep)}(t),null!==oS&&oS(e,t)};var oM=u(null),oT=Error(i(460)),ow=Error(i(474)),oE=Error(i(542)),oA={then:function(){}},oC=null,oR=null,oP=0,oI=eE(!0),oL=eE(!1),oN=[],oU=0,oD=0,oO=!1,oF=!1,oz=u(null),oB=u(0),ok=u(null),oH=null,oV=u(0),oG=0,oW=null,oj=null,oX=null,oq=!1,oY=!1,oZ=!1,oJ=0,oK=0,o$=null,oQ=0,o0={readContext:Q,use:tt,useCallback:e$,useContext:e$,useEffect:e$,useImperativeHandle:e$,useLayoutEffect:e$,useInsertionEffect:e$,useMemo:e$,useReducer:e$,useRef:e$,useState:e$,useDebugValue:e$,useDeferredValue:e$,useTransition:e$,useSyncExternalStore:e$,useId:e$,useHostTransitionStatus:e$,useFormState:e$,useActionState:e$,useOptimistic:e$,useMemoCache:e$,useCacheRefresh:e$};o0.useEffectEvent=e$;var o1={readContext:Q,use:tt,useCallback:function(e,t){return e8().memoizedState=[e,void 0===t?null:t],e},useContext:Q,useEffect:tI,useImperativeHandle:function(e,t,n){n=null!=n?n.concat([e]):null,tR(4194308,4,tO.bind(null,t,e),n)},useLayoutEffect:function(e,t){return tR(4194308,4,e,t)},useInsertionEffect:function(e,t){tR(4,2,e,t)},useMemo:function(e,t){var n=e8();t=void 0===t?null:t;var i=e();return n.memoizedState=[i,t],i},useReducer:function(e,t,n){var i=e8();if(void 0!==n)var r=n(t);else r=t;return i.memoizedState=i.baseState=r,i.queue=e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:r},e=e.dispatch=tZ.bind(null,oW,e),[i.memoizedState,e]},useRef:function(e){return e8().memoizedState={current:e}},useState:function(e){var t=(e=tp(e)).queue,n=tJ.bind(null,oW,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:tz,useDeferredValue:function(e,t){return tH(e8(),e,t)},useTransition:function(){var e=tp(!1);return e=tG.bind(null,oW,e.queue,!0,!1),e8().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=oW,a=e8();if(ot){if(void 0===n)throw Error(i(407));n=n()}else{if(n=t(),null===lg)throw Error(i(349));(127&l_)!=0||tl(r,t,n)}a.memoizedState=n;var s={value:n,getSnapshot:t};return a.queue=s,tI(tc.bind(null,r,s,e),[e]),r.flags|=2048,tA(9,{destroy:void 0},tu.bind(null,r,s,n,t),null),n},useId:function(){var e=e8(),t=lg.identifierPrefix;if(ot){var n=s4,i=s3;t="_"+t+"R_"+(n=(i&~(1<<32-sE(i)-1)).toString(32)+n),0<(n=oJ++)&&(t+="H"+n.toString(32)),t+="_"}else t="_"+t+"r_"+(n=oQ++).toString(32)+"_";return e.memoizedState=t},useHostTransitionStatus:tj,useFormState:tS,useActionState:tS,useOptimistic:function(e){var t=e8();t.memoizedState=t.baseState=e;var n={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return t.queue=n,t=t$.bind(null,oW,!0,n),n.dispatch=t,[e,t]},useMemoCache:tn,useCacheRefresh:function(){return e8().memoizedState=tY.bind(null,oW)},useEffectEvent:function(e){var t=e8(),n={impl:e};return t.memoizedState=n,function(){if((2&lm)!=0)throw Error(i(440));return n.impl.apply(void 0,arguments)}}},o2={readContext:Q,use:tt,useCallback:tB,useContext:Q,useEffect:tL,useImperativeHandle:tF,useInsertionEffect:tU,useLayoutEffect:tD,useMemo:tk,useReducer:tr,useRef:tC,useState:function(){return tr(ti)},useDebugValue:tz,useDeferredValue:function(e,t){return tV(e9(),oj.memoizedState,e,t)},useTransition:function(){var e=tr(ti)[0],t=e9().memoizedState;return["boolean"==typeof e?e:te(e),t]},useSyncExternalStore:to,useId:tX,useHostTransitionStatus:tj,useFormState:tM,useActionState:tM,useOptimistic:function(e,t){return tf(e9(),oj,e,t)},useMemoCache:tn,useCacheRefresh:tq};o2.useEffectEvent=tN;var o3={readContext:Q,use:tt,useCallback:tB,useContext:Q,useEffect:tL,useImperativeHandle:tF,useInsertionEffect:tU,useLayoutEffect:tD,useMemo:tk,useReducer:ts,useRef:tC,useState:function(){return ts(ti)},useDebugValue:tz,useDeferredValue:function(e,t){var n=e9();return null===oj?tH(n,e,t):tV(n,oj.memoizedState,e,t)},useTransition:function(){var e=ts(ti)[0],t=e9().memoizedState;return["boolean"==typeof e?e:te(e),t]},useSyncExternalStore:to,useId:tX,useHostTransitionStatus:tj,useFormState:tE,useActionState:tE,useOptimistic:function(e,t){var n=e9();return null!==oj?tf(n,oj,e,t):(n.baseState=e,[e,n.queue.dispatch])},useMemoCache:tn,useCacheRefresh:tq};o3.useEffectEvent=tN;var o4={enqueueSetState:function(e,t,n){e=e._reactInternals;var i=ig(),r=eD(i);r.payload=t,null!=n&&(r.callback=n),null!==(t=eO(e,r,i))&&(i_(t,e,i),eF(t,e,i))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var i=ig(),r=eD(i);r.tag=1,r.payload=t,null!=n&&(r.callback=n),null!==(t=eO(e,r,i))&&(i_(t,e,i),eF(t,e,i))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=ig(),i=eD(n);i.tag=2,null!=t&&(i.callback=t),null!==(t=eO(e,i,n))&&(i_(t,e,n),eF(t,e,n))}},o5=Error(i(461)),o6=!1,o8={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null},o9=!1,o7=!1,le=!1,lt="function"==typeof WeakSet?WeakSet:Set,ln=null,li=null,lr=!1,la=null,ls=8192,lo={getCacheForType:function(e){var t=Q(oh),n=t.data.get(e);return void 0===n&&(n=e(),t.data.set(e,n)),n},cacheSignal:function(){return Q(oh).controller.signal}},ll=0,lu=1,lc=2,lh=3,ld=4;if("function"==typeof Symbol&&Symbol.for){var lp=Symbol.for;ll=lp("selector.component"),lu=lp("selector.has_pseudo_class"),lc=lp("selector.role"),lh=lp("selector.test_id"),ld=lp("selector.text")}var lf="function"==typeof WeakMap?WeakMap:Map,lm=0,lg=null,lv=null,l_=0,ly=0,lx=null,lb=!1,lS=!1,lM=!1,lT=0,lw=0,lE=0,lA=0,lC=0,lR=0,lP=0,lI=null,lL=null,lN=!1,lU=0,lD=0,lO=1/0,lF=null,lz=null,lB=0,lk=null,lH=null,lV=0,lG=0,lW=null,lj=null,lX=0,lq=null;return rt.attemptContinuousHydration=function(e){if(13===e.tag||31===e.tag){var t=eP(e,0x4000000);null!==t&&i_(t,e,0x4000000),re(e,0x4000000)}},rt.attemptHydrationAtCurrentPriority=function(e){if(13===e.tag||31===e.tag){var t=ig(),n=eP(e,t=b(t));null!==n&&i_(n,e,t),re(e,t)}},rt.attemptSynchronousHydration=function(e){switch(e.tag){case 3:if((e=e.stateNode).current.memoizedState.isDehydrated){var t=d(e.pendingLanes);if(0!==t){for(e.pendingLanes|=2,e.entangledLanes|=2;t;){var n=1<<31-sE(t);e.entanglements[1]|=n,t&=~n}ea(e),(6&lm)==0&&(lO=sO()+500,es(0,!1))}}break;case 31:case 13:null!==(t=eP(e,2))&&i_(t,e,2),iS(),re(e,2)}},rt.batchedUpdates=function(e,t){return e(t)},rt.createComponentSelector=function(e){return{$$typeof:ll,value:e}},rt.createContainer=function(e,t,n,i,r,a,s,o,l,u){return i6(e,t,!1,null,n,i,a,null,s,o,l,u)},rt.createHasPseudoClassSelector=function(e){return{$$typeof:lu,value:e}},rt.createHydrationContainer=function(e,t,n,i,r,a,s,o,l,u,c,h,d,p){var f;return(e=i6(n,i,!0,e,r,a,o,p,l,u,c,h)).context=sw,n=e.current,(r=eD(i=b(i=ig()))).callback=null!=(f=t)?f:null,eO(n,r,i),t=i,e.current.lanes=t,v(e,t),ea(e),e},rt.createPortal=function(e,t,n){var i=3=c&&s>=d&&a<=h&&o<=p){e.splice(t,1);break}if(r!==c||n.width!==u.width||po){if(!(s!==d||n.height!==u.height||ha)){c>r&&(u.width+=c-r,u.x=r),hs&&(u.height+=d-s,u.y=s),pn&&(n=l)),l ")+` - -No matching component was found for: - `+e.join(" > ")}return null},rt.getPublicRootInstance=function(e){if(!(e=e.current).child)return null;switch(e.child.tag){case 27:case 5:return rA(e.child.stateNode);default:return e.child.stateNode}},rt.injectIntoDevTools=function(){var e={bundleType:0,version:rT,rendererPackageName:rw,currentDispatcherRef:rM,reconcilerVersion:"19.2.0"};if(null!==rE&&(e.rendererConfig=rE),typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u")e=!1;else{var t=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(t.isDisabled||!t.supportsFiber)e=!0;else{try{sG=t.inject(e),sW=t}catch{}e=!!t.checkDCE}}return e},rt.isAlreadyRendering=function(){return(6&lm)!=0},rt.observeVisibleRects=function(e,t,n,r){if(!r7)throw Error(i(363));var a=as(e=im(e,t),n,r).disconnect;return{disconnect:function(){a()}}},rt.shouldError=function(){return null},rt.shouldSuspend=function(){return!1},rt.startHostTransition=function(e,t,r,a){if(5!==e.tag)throw Error(i(476));var s=tW(e).queue;tG(e,s,t,r4,null===r?n:function(){var t=tW(e);return null===t.next&&(t=e.alternate.memoizedState),tK(e,t.next.queue,{},ig()),r(a)})},rt.updateContainer=function(e,t,n,i){var r=t.current,a=ig();return i9(r,a,e,t,n,i),a},rt.updateContainerSync=function(e,t,n,i){return i9(t.current,2,e,t,n,i),2},rt},cG.exports.default=cG.exports,Object.defineProperty(cG.exports,"__esModule",{value:!0})),cV.exports=cG.exports),(b=cV.exports)&&b.__esModule&&Object.prototype.hasOwnProperty.call(b,"default"))?b.default:b,cj={},cX=/^three(?=[A-Z])/,cq=e=>`${e[0].toUpperCase()}${e.slice(1)}`,cY=0;function cZ(e){if("function"==typeof e){let t=`${cY++}`;return cj[t]=e,t}Object.assign(cj,e)}function cJ(e,t){let n=cq(e),i=cj[n];if("primitive"!==e&&!i)throw Error(`R3F: ${n} is not part of the THREE namespace! Did you forget to extend? See: https://docs.pmnd.rs/react-three-fiber/api/objects#using-3rd-party-objects-declaratively`);if("primitive"===e&&!t.object)throw Error("R3F: Primitives without 'object' are invalid!");if(void 0!==t.args&&!Array.isArray(t.args))throw Error("R3F: The args prop must be an array!")}function cK(e){if(e.isHidden){var t;e.props.attach&&null!=(t=e.parent)&&t.object?cS(e.parent,e):cI(e.object)&&!1!==e.props.visible&&(e.object.visible=!0),e.isHidden=!1,cR(e)}}function c$(e,t,n){let i=t.root.getState();if(e.parent||e.object===i.scene){if(!t.object){var r,a;let e=cj[cq(t.type)];t.object=null!=(r=t.props.object)?r:new e(...null!=(a=t.props.args)?a:[]),t.object.__r3f=t}if(cC(t.object,t.props),t.props.attach)cS(e,t);else if(cI(t.object)&&cI(e.object)){let i=e.object.children.indexOf(null==n?void 0:n.object);if(n&&-1!==i){let n=e.object.children.indexOf(t.object);-1!==n?(e.object.children.splice(n,1),e.object.children.splice(n{try{e.dispose()}catch{}};"u">typeof IS_REACT_ACT_ENVIRONMENT?t():(0,u8.unstable_scheduleCallback)(u8.unstable_IdlePriority,t)}}function c2(e,t,n){if(!t)return;t.parent=null;let i=e.children.indexOf(t);-1!==i&&e.children.splice(i,1),t.props.attach?cM(e,t):cI(t.object)&&cI(e.object)&&(e.object.remove(t.object),function(e,t){let{internal:n}=e.getState();n.interaction=n.interaction.filter(e=>e!==t),n.initialHits=n.initialHits.filter(e=>e!==t),n.hovered.forEach((e,i)=>{(e.eventObject===t||e.object===t)&&n.hovered.delete(i)}),n.capturedMap.forEach((e,i)=>{cN(n.capturedMap,t,e,i)})}(co(t),t.object));let r=null!==t.props.dispose&&!1!==n;for(let e=t.children.length-1;e>=0;e--){let n=t.children[e];c2(t,n,r)}t.children.length=0,delete t.object.__r3f,r&&"primitive"!==t.type&&"Scene"!==t.object.type&&c1(t.object),void 0===n&&cR(t)}let c3=[],c4=()=>{},c5={},c6=0,c8=(S={isPrimaryRenderer:!1,warnsIfNotActing:!1,supportsMutation:!0,supportsPersistence:!1,supportsHydration:!1,createInstance:function(e,t,n){var i;return cJ(e=cq(e)in cj?e:e.replace(cX,""),t),"primitive"===e&&null!=(i=t.object)&&i.__r3f&&delete t.object.__r3f,cy(t.object,n,e,t)},removeChild:c2,appendChild:cQ,appendInitialChild:cQ,insertBefore:c0,appendChildToContainer(e,t){let n=e.getState().scene.__r3f;t&&n&&cQ(n,t)},removeChildFromContainer(e,t){let n=e.getState().scene.__r3f;t&&n&&c2(n,t)},insertInContainerBefore(e,t,n){let i=e.getState().scene.__r3f;t&&n&&i&&c0(i,t,n)},getRootHostContext:()=>c5,getChildHostContext:()=>c5,commitUpdate(e,t,n,i,r){var a,s,o;cJ(t,i);let l=!1;if("primitive"===e.type&&n.object!==i.object||(null==(a=i.args)?void 0:a.length)!==(null==(s=n.args)?void 0:s.length)?l=!0:null!=(o=i.args)&&o.some((e,t)=>{var i;return e!==(null==(i=n.args)?void 0:i[t])})&&(l=!0),l)c3.push([e,{...i},r]);else{let t=function(e,t){let n={};for(let i in t)if(!cT.includes(i)&&!cv.equ(t[i],e.props[i]))for(let e in n[i]=t[i],t)e.startsWith(`${i}-`)&&(n[e]=t[e]);for(let i in e.props){if(cT.includes(i)||t.hasOwnProperty(i))continue;let{root:r,key:a}=cx(e.object,i);if(r.constructor&&0===r.constructor.length){let e=function(e){let t=cw.get(e.constructor);try{t||(t=new e.constructor,cw.set(e.constructor,t))}catch(e){}return t}(r);cv.und(e)||(n[a]=e[a])}else n[a]=0}return n}(e,i);Object.keys(t).length&&(Object.assign(e.props,t),cC(e.object,t))}(null===r.sibling||(4&r.flags)==0)&&function(){for(let[e]of c3){let t=e.parent;if(t)for(let n of(e.props.attach?cM(t,e):cI(e.object)&&cI(t.object)&&t.object.remove(e.object),e.children))n.props.attach?cM(e,n):cI(n.object)&&cI(e.object)&&e.object.remove(n.object);e.isHidden&&cK(e),e.object.__r3f&&delete e.object.__r3f,"primitive"!==e.type&&c1(e.object)}for(let[i,r,a]of c3){i.props=r;let s=i.parent;if(s){let r=cj[cq(i.type)],o=i.object;i.object=null!=(e=i.props.object)?e:new r(...null!=(t=i.props.args)?t:[]),i.object.__r3f=i;var e,t,n=i.object;for(let e of[a,a.alternate])if(null!==e)if("function"==typeof e.ref){null==e.refCleanup||e.refCleanup();let t=e.ref(n);"function"==typeof t&&(e.refCleanup=t)}else e.ref&&(e.ref.current=n);for(let e of(!function(e,t,n){let{internal:i}=e.getState();for(let e=0;e{if(e.eventObject===t||e.object===t){i.hovered.delete(r);let a={...e,eventObject:e.eventObject===t?n:e.eventObject,object:e.object===t?n:e.object};i.hovered.set(cL(a),a)}}),i.capturedMap.forEach(e=>{let i=e.get(t);i&&(e.delete(t),e.set(n,i))})}(co(i),o,i.object),cC(i.object,i.props),i.props.attach?cS(s,i):cI(i.object)&&cI(s.object)&&s.object.add(i.object),i.children))e.props.attach?cS(i,e):cI(e.object)&&cI(i.object)&&i.object.add(e.object);cR(i)}}c3.length=0}()},finalizeInitialChildren:()=>!1,commitMount(){},getPublicInstance:e=>null==e?void 0:e.object,prepareForCommit:()=>null,preparePortalMount:e=>cy(e.getState().scene,e,"",{}),resetAfterCommit:()=>{},shouldSetTextContent:()=>!1,clearContainer:()=>!1,hideInstance:function(e){if(!e.isHidden){var t;e.props.attach&&null!=(t=e.parent)&&t.object?cM(e.parent,e):cI(e.object)&&(e.object.visible=!1),e.isHidden=!0,cR(e)}},unhideInstance:cK,createTextInstance:c4,hideTextInstance:c4,unhideTextInstance:c4,scheduleTimeout:"function"==typeof setTimeout?setTimeout:void 0,cancelTimeout:"function"==typeof clearTimeout?clearTimeout:void 0,noTimeout:-1,getInstanceFromNode:()=>null,beforeActiveInstanceBlur(){},afterActiveInstanceBlur(){},detachDeletedInstance(){},prepareScopeUpdate(){},getInstanceFromScope:()=>null,shouldAttemptEagerTransition:()=>!1,trackSchedulerEvent:()=>{},resolveEventType:()=>null,resolveEventTimeStamp:()=>-1.1,requestPostPaintCallback(){},maySuspendCommit:()=>!1,preloadInstance:()=>!0,suspendInstance(){},waitForCommitToBeReady:()=>null,NotPendingTransition:null,HostTransitionContext:E.createContext(null),setCurrentUpdatePriority(e){c6=e},getCurrentUpdatePriority:()=>c6,resolveUpdatePriority(){var e;if(0!==c6)return c6;switch("u">typeof window&&(null==(e=window.event)?void 0:e.type)){case"click":case"contextmenu":case"dblclick":case"pointercancel":case"pointerdown":case"pointerup":return 2;case"pointermove":case"pointerout":case"pointerover":case"pointerenter":case"pointerleave":case"wheel":return 8;default:return 32}},resetFormInstance(){},rendererPackageName:"@react-three/fiber",rendererVersion:"9.6.1",applyViewTransitionName(e,t,n){},restoreViewTransitionName(e,t){},cancelViewTransitionName(e,t,n){},cancelRootViewTransitionName(e){},restoreRootViewTransitionName(e){},InstanceMeasurement:null,measureInstance:e=>null,wasInstanceInViewport:e=>!0,hasInstanceChanged:(e,t)=>!1,hasInstanceAffectedParent:(e,t)=>!1,suspendOnActiveViewTransition(e,t){},startGestureTransition:()=>null,startViewTransition:()=>null,stopViewTransition(e){},createViewTransitionInstance:e=>null,getCurrentGestureOffset(e){throw Error("startGestureTransition is not yet supported in react-three-fiber.")},cloneMutableInstance:(e,t)=>e,cloneMutableTextInstance:e=>e,cloneRootViewTransitionContainer(e){throw Error("Not implemented.")},removeRootViewTransitionClone(e,t){throw Error("Not implemented.")},createFragmentInstance:e=>null,updateFragmentInstanceFiber(e,t){},commitNewChildToFragmentInstance(e,t){},deleteChildFromFragmentInstance(e,t){},measureClonedInstance:e=>null,maySuspendCommitOnUpdate:(e,t,n)=>!1,maySuspendCommitInSyncRender:(e,t)=>!1,startSuspendingCommit:()=>null,getSuspendedCommitReason:(e,t)=>null},(_=cW(S)).injectIntoDevTools(),_),c9=new Map,c7={objects:"shallow",strict:!1};function he(e){var t,n;let i,r,a,s,o,l,u,c=c9.get(e),h=null==c?void 0:c.fiber,d=null==c?void 0:c.store;c&&console.warn("R3F.createRoot should only be called once!");let p="function"==typeof reportError?reportError:console.error,f=d||(t=hp,n=hf,o=(s=(a=u3((e,i)=>{let r,a=new eE,s=new eE,o=new eE;function l(e=i().camera,t=s,n=i().size){let{width:r,height:u,top:c,left:h}=n,d=r/u;t.isVector3?o.copy(t):o.set(...t);let p=e.getWorldPosition(a).distanceTo(o);if(e&&e.isOrthographicCamera)return{width:r/e.zoom,height:u/e.zoom,top:c,left:h,factor:1,distance:p,aspect:d};{let t=2*Math.tan(e.fov*Math.PI/180/2)*p,n=r/u*t;return{width:n,height:t,top:c,left:h,factor:r/n,distance:p,aspect:d}}}let u=t=>e(e=>({performance:{...e.performance,current:t}})),c=new Y;return{set:e,get:i,gl:null,camera:null,raycaster:null,events:{priority:1,enabled:!0,connected:!1},scene:null,xr:null,invalidate:(e=1)=>t(i(),e),advance:(e,t)=>n(e,t,i()),legacy:!1,linear:!1,flat:!1,controls:null,clock:new sw,pointer:c,mouse:c,frameloop:"always",onPointerMissed:void 0,performance:{current:1,min:.5,max:1,debounce:200,regress:()=>{let e=i();r&&clearTimeout(r),e.performance.current!==e.performance.min&&u(e.performance.min),r=setTimeout(()=>u(i().performance.max),e.performance.debounce)}},size:{width:0,height:0,top:0,left:0},viewport:{initialDpr:0,dpr:0,width:0,height:0,top:0,left:0,aspect:0,distance:0,factor:0,getCurrentViewport:l},setEvents:t=>e(e=>({...e,events:{...e.events,...t}})),setSize:(t,n,r=0,a=0)=>{let o=i().camera,u={width:t,height:n,top:r,left:a};e(e=>({size:u,viewport:{...e.viewport,...l(o,s,u)}}))},setDpr:t=>e(e=>{let n=cm(t);return{viewport:{...e.viewport,dpr:n,initialDpr:e.viewport.initialDpr||n}}}),setFrameloop:(t="always")=>{let n=i().clock;n.stop(),n.elapsedTime=0,"never"!==t&&(n.start(),n.elapsedTime=0),e(()=>({frameloop:t}))},previousRoot:void 0,internal:{interaction:[],hovered:new Map,subscribers:[],initialClick:[0,0],initialHits:[],capturedMap:new Map,lastEvent:E.createRef(),active:!1,frames:0,priority:0,subscribe:(e,t,n)=>{let r=i().internal;return r.priority=r.priority+ +(t>0),r.subscribers.push({ref:e,priority:t,store:n}),r.subscribers=r.subscribers.sort((e,t)=>e.priority-t.priority),()=>{let n=i().internal;null!=n&&n.subscribers&&(n.priority=n.priority-(t>0),n.subscribers=n.subscribers.filter(t=>t.ref!==e))}}}}})).getState()).size,l=s.viewport.dpr,u=s.camera,a.subscribe(()=>{let{camera:e,size:t,viewport:n,gl:i,set:r}=a.getState();if(t.width!==o.width||t.height!==o.height||n.dpr!==l){o=t,l=n.dpr,cP(e,t),n.dpr>0&&i.setPixelRatio(n.dpr);let r="u">typeof HTMLCanvasElement&&i.domElement instanceof HTMLCanvasElement;i.setSize(t.width,t.height,r)}e!==u&&(u=e,r(t=>({viewport:{...t.viewport,...t.viewport.getCurrentViewport(e)}})))}),a.subscribe(e=>t(e)),a),m=h||c8.createContainer(f,1,null,!1,null,"",p,p,p,null);c||c9.set(e,{fiber:m,store:f});let g=!1,v=null;return{async configure(t={}){var n,a;let s;v=new Promise(e=>s=e);let{gl:o,size:l,scene:u,events:c,onCreated:h,shadows:d=!1,linear:p=!1,flat:m=!1,legacy:_=!1,orthographic:y=!1,frameloop:x="always",dpr:b=[1,2],performance:S,raycaster:M,camera:T,onPointerMissed:w}=t,E=f.getState(),A=E.gl;if(!E.gl){let t={canvas:e,powerPreference:"high-performance",antialias:!0,alpha:!0},n="function"==typeof o?await o(t):o;A=cU(n)?n:new uK({...t,...o}),E.set({gl:A})}let C=E.raycaster;C||E.set({raycaster:C=new s3});let{params:R,...P}=M||{};if(cv.equ(P,C,c7)||cC(C,{...P}),cv.equ(R,C.params,c7)||cC(C,{params:{...C.params,...R}}),!E.camera||E.camera===r&&!cv.equ(r,T,c7)){r=T;let e=null==T?void 0:T.isCamera,t=e?T:y?new sn(0,0,0,0,.1,1e3):new nE(75,0,.1,1e3);!e&&(t.position.z=5,T&&(cC(t,T),!t.manual&&("aspect"in T||"left"in T||"right"in T||"bottom"in T||"top"in T)&&(t.manual=!0,t.updateProjectionMatrix())),E.camera||null!=T&&T.rotation||t.lookAt(0,0,0)),E.set({camera:t}),C.camera=t}if(!E.scene){let e;null!=u&&u.isScene?cy(e=u,f,"",{}):(cy(e=new nL,f,"",{}),u&&cC(e,u)),E.set({scene:e})}c&&!E.events.handlers&&E.set({events:c(f)});let N=function(e,t){if(!t&&"u">typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement&&e.parentElement){let{width:t,height:n,top:i,left:r}=e.parentElement.getBoundingClientRect();return{width:t,height:n,top:i,left:r}}return!t&&"u">typeof OffscreenCanvas&&e instanceof OffscreenCanvas?{width:e.width,height:e.height,top:0,left:0}:{width:0,height:0,top:0,left:0,...t}}(e,l);if(cv.equ(N,E.size,c7)||E.setSize(N.width,N.height,N.top,N.left),b&&E.viewport.dpr!==cm(b)&&E.setDpr(b),E.frameloop!==x&&E.setFrameloop(x),E.onPointerMissed||E.set({onPointerMissed:w}),S&&!cv.equ(S,E.performance,c7)&&E.set(e=>({performance:{...e.performance,...S}})),!E.xr){let e=(e,t)=>{let n=f.getState();"never"!==n.frameloop&&hf(e,!0,n,t)},t=()=>{let t=f.getState();t.gl.xr.enabled=t.gl.xr.isPresenting,t.gl.xr.setAnimationLoop(t.gl.xr.isPresenting?e:null),t.gl.xr.isPresenting||hp(t)},i={connect(){let e=f.getState().gl;e.xr.addEventListener("sessionstart",t),e.xr.addEventListener("sessionend",t)},disconnect(){let e=f.getState().gl;e.xr.removeEventListener("sessionstart",t),e.xr.removeEventListener("sessionend",t)}};"function"==typeof(null==(n=A.xr)?void 0:n.addEventListener)&&i.connect(),E.set({xr:i})}if(A.shadowMap){let e=A.shadowMap.enabled,t=A.shadowMap.type;A.shadowMap.enabled=!!d,cv.boo(d)?A.shadowMap.type=2:cv.str(d)?A.shadowMap.type=null!=(a=({basic:0,percentage:1,soft:2,variance:3})[d])?a:2:cv.obj(d)&&Object.assign(A.shadowMap,d),(e!==A.shadowMap.enabled||t!==A.shadowMap.type)&&(A.shadowMap.needsUpdate=!0)}return eu.enabled=!_,g||(A.outputColorSpace=p?L:I,A.toneMapping=4*!m),E.legacy!==_&&E.set(()=>({legacy:_})),E.linear!==p&&E.set(()=>({linear:p})),E.flat!==m&&E.set(()=>({flat:m})),!o||cv.fun(o)||cU(o)||cv.equ(o,A,c7)||cC(A,o),i=h,g=!0,s(),this},render(t){return g||v||this.configure(),v.then(()=>{c8.updateContainer((0,u9.jsx)(ht,{store:f,children:t,onCreated:i,rootElement:e}),m,null,()=>void 0)}),f},unmount(){hn(e)}}}function ht({store:e,children:t,onCreated:n,rootElement:i}){return cc(()=>{let t=e.getState();t.set(e=>({internal:{...e.internal,active:!0}})),n&&n(t),e.getState().events.connected||null==t.events.connect||t.events.connect(i)},[]),(0,u9.jsx)(cD.Provider,{value:e,children:t})}function hn(e,t){let n=c9.get(e),i=null==n?void 0:n.fiber;if(i){let r=null==n?void 0:n.store.getState();r&&(r.internal.active=!1),c8.updateContainer(null,i,null,()=>{r&&setTimeout(()=>{try{null==r.events.disconnect||r.events.disconnect(),null==(n=r.gl)||null==(i=n.renderLists)||null==i.dispose||i.dispose(),null==(a=r.gl)||null==a.forceContextLoss||a.forceContextLoss(),null!=(s=r.gl)&&s.xr&&r.xr.disconnect();var n,i,a,s,o=r.scene;for(let e in"Scene"!==o.type&&(null==o.dispose||o.dispose()),o){let t=o[e];(null==t?void 0:t.type)!=="Scene"&&(null==t||null==t.dispose||t.dispose())}c9.delete(e),t&&t(e)}catch(e){}},500)})}}function hi({state:e={},children:t,container:n}){let{events:i,size:r,...a}=e,s=cO(),[o]=E.useState(()=>new s3),[l]=E.useState(()=>new Y),u=ch((e,t)=>{let a;if(t.camera&&r){let n=t.camera;a=e.viewport.getCurrentViewport(n,new eE,r),n!==e.camera&&cP(n,r)}return{...e,...t,scene:n,raycaster:o,pointer:l,mouse:l,previousRoot:s,events:{...e.events,...t.events,...i},size:{...e.size,...r},viewport:{...e.viewport,...a},setEvents:e=>t.set(t=>({...t,events:{...t.events,...e}}))}}),c=E.useMemo(()=>{let e=u3((e,t)=>({...a,set:e,get:t})),t=t=>e.setState(e=>u.current(t,e));return t(s.getState()),s.subscribe(t),e},[s,n]);return(0,u9.jsx)(u9.Fragment,{children:c8.createPortal((0,u9.jsx)(cD.Provider,{value:c,children:t}),c,null)})}let hr=new Set,ha=new Set,hs=new Set;function ho(e,t){if(e.size)for(let{callback:n}of e.values())n(t)}function hl(e,t){switch(e){case"before":return ho(hr,t);case"after":return ho(ha,t);case"tail":return ho(hs,t)}}function hu(e,t,n){let i=t.clock.getDelta();"never"===t.frameloop&&"number"==typeof e&&(i=e-t.clock.elapsedTime,t.clock.oldTime=t.clock.elapsedTime,t.clock.elapsedTime=e),s=t.internal.subscribers;for(let e=0;e0)&&!(null!=(t=c.gl.xr)&&t.isPresenting)&&(l+=hu(e,c))}if(hh=!1,hl("after",e),0===l)return hl("tail",e),hc=!1,cancelAnimationFrame(u)}function hp(e,t=1){var n;if(!e)return c9.forEach(e=>hp(e.store.getState(),t));(null==(n=e.gl.xr)||!n.isPresenting)&&e.internal.active&&"never"!==e.frameloop&&(t>1?e.internal.frames=Math.min(60,e.internal.frames+t):hh?e.internal.frames=2:e.internal.frames=1,hc||(hc=!0,requestAnimationFrame(hd)))}function hf(e,t=!0,n,i){if(t&&hl("before",e),n)hu(e,n,i);else for(let t of c9.values())hu(e,t.store.getState());t&&hl("after",e)}let hm={onClick:["click",!1],onContextMenu:["contextmenu",!1],onDoubleClick:["dblclick",!1],onWheel:["wheel",!0],onPointerDown:["pointerdown",!0],onPointerUp:["pointerup",!0],onPointerLeave:["pointerleave",!0],onPointerMove:["pointermove",!0],onPointerCancel:["pointercancel",!0],onLostPointerCapture:["lostpointercapture",!0]};function hg(e){let{handlePointer:t}=function(e){function t(e){return e.filter(e=>["Move","Over","Enter","Out","Leave"].some(t=>{var n;return null==(n=e.__r3f)?void 0:n.handlers["onPointer"+t]}))}function n(t){let{internal:n}=e.getState();for(let e of n.hovered.values())if(!t.length||!t.find(t=>t.object===e.object&&t.index===e.index&&t.instanceId===e.instanceId)){let i=e.eventObject.__r3f;if(n.hovered.delete(cL(e)),null!=i&&i.eventCount){let n=i.handlers,r={...e,intersections:t};null==n.onPointerOut||n.onPointerOut(r),null==n.onPointerLeave||n.onPointerLeave(r)}}}function i(e,t){for(let n=0;nn([]);case"onLostPointerCapture":return t=>{let{internal:i}=e.getState();"pointerId"in t&&i.capturedMap.has(t.pointerId)&&requestAnimationFrame(()=>{i.capturedMap.has(t.pointerId)&&(i.capturedMap.delete(t.pointerId),n([]))})}}return function(a){let{onPointerMissed:s,internal:o}=e.getState();o.lastEvent.current=a;let l="onPointerMove"===r,u="onClick"===r||"onContextMenu"===r||"onDoubleClick"===r,c=function(t,n){let i=e.getState(),r=new Set,a=[],s=n?n(i.internal.interaction):i.internal.interaction;for(let e=0;e{let n=cg(e.object),i=cg(t.object);return n&&i&&i.events.priority-n.events.priority||e.distance-t.distance}).filter(e=>{let t=cL(e);return!r.has(t)&&(r.add(t),!0)});for(let e of(i.events.filter&&(o=i.events.filter(o,i)),o)){let t=e.object;for(;t;){var l;null!=(l=t.__r3f)&&l.eventCount&&a.push({...e,eventObject:t}),t=t.parent}}if("pointerId"in t&&i.internal.capturedMap.has(t.pointerId))for(let e of i.internal.capturedMap.get(t.pointerId).values())r.has(cL(e.intersection))||a.push(e.intersection);return a}(a,l?t:void 0),h=u?function(t){let{internal:n}=e.getState(),i=t.offsetX-n.initialClick[0],r=t.offsetY-n.initialClick[1];return Math.round(Math.sqrt(i*i+r*r))}(a):0;"onPointerDown"===r&&(o.initialClick=[a.offsetX,a.offsetY],o.initialHits=c.map(e=>e.eventObject)),u&&!c.length&&h<=2&&(i(a,o.interaction),s&&s(a)),l&&n(c),!function(e,t,i,r){if(e.length){let a={stopped:!1};for(let s of e){let o=cg(s.object);if(o||s.object.traverseAncestors(e=>{let t=cg(e);if(t)return o=t,!1}),o){let{raycaster:l,pointer:u,camera:c,internal:h}=o,d=new eE(u.x,u.y,0).unproject(c),p=e=>{var t,n;return null!=(t=null==(n=h.capturedMap.get(e))?void 0:n.has(s.eventObject))&&t},f=e=>{let n={intersection:s,target:t.target};h.capturedMap.has(e)?h.capturedMap.get(e).set(s.eventObject,n):h.capturedMap.set(e,new Map([[s.eventObject,n]])),t.target.setPointerCapture(e)},m=e=>{let t=h.capturedMap.get(e);t&&cN(h.capturedMap,s.eventObject,t,e)},g={};for(let e in t){let n=t[e];"function"!=typeof n&&(g[e]=n)}let v={...s,...g,pointer:u,intersections:e,stopped:a.stopped,delta:i,unprojectedPoint:d,ray:l.ray,camera:c,stopPropagation(){let i="pointerId"in t&&h.capturedMap.get(t.pointerId);(!i||i.has(s.eventObject))&&(v.stopped=a.stopped=!0,h.hovered.size&&Array.from(h.hovered.values()).find(e=>e.eventObject===s.eventObject)&&n([...e.slice(0,e.indexOf(s)),s]))},target:{hasPointerCapture:p,setPointerCapture:f,releasePointerCapture:m},currentTarget:{hasPointerCapture:p,setPointerCapture:f,releasePointerCapture:m},nativeEvent:t};if(r(v),!0===a.stopped)break}}}}(c,a,h,function(e){let t=e.eventObject,n=t.__r3f;if(!(null!=n&&n.eventCount))return;let s=n.handlers;if(l){if(s.onPointerOver||s.onPointerEnter||s.onPointerOut||s.onPointerLeave){let t=cL(e),n=o.hovered.get(t);n?n.stopped&&e.stopPropagation():(o.hovered.set(t,e),null==s.onPointerOver||s.onPointerOver(e),null==s.onPointerEnter||s.onPointerEnter(e))}null==s.onPointerMove||s.onPointerMove(e)}else{let n=s[r];n?(!u||o.initialHits.includes(t))&&(i(a,o.interaction.filter(e=>!o.initialHits.includes(e))),n(e)):u&&o.initialHits.includes(t)&&i(a,o.interaction.filter(e=>!o.initialHits.includes(e)))}})}}}}(e);return{priority:1,enabled:!0,compute(e,t,n){t.pointer.set(e.offsetX/t.size.width*2-1,-(2*(e.offsetY/t.size.height))+1),t.raycaster.setFromCamera(t.pointer,t.camera)},connected:void 0,handlers:Object.keys(hm).reduce((e,n)=>({...e,[n]:t(n)}),{}),update:()=>{var t;let{events:n,internal:i}=e.getState();null!=(t=i.lastEvent)&&t.current&&n.handlers&&n.handlers.onPointerMove(i.lastEvent.current)},connect:t=>{let{set:n,events:i}=e.getState();if(null==i.disconnect||i.disconnect(),n(e=>({events:{...e.events,connected:t}})),i.handlers)for(let e in i.handlers){let n=i.handlers[e],[r,a]=hm[e];t.addEventListener(r,n,{passive:a})}},disconnect:()=>{let{set:t,events:n}=e.getState();if(n.connected){if(n.handlers)for(let e in n.handlers){let t=n.handlers[e],[i]=hm[e];n.connected.removeEventListener(i,t)}t(e=>({events:{...e.events,connected:void 0}}))}}}}e.s(["A",0,cO,"B",0,cp,"C",0,cF,"D",0,cz,"E",0,cf,"G",0,cH,"a",0,ch,"b",0,cc,"c",0,he,"d",0,hn,"e",0,cZ,"f",0,hg,"i",0,cl,"o",0,function(e,t,n){return(0,u9.jsx)(hi,{children:e,container:t,state:n})},"s",0,cC,"u",0,cd],1950),e.i(8560),e.s(["ACESFilmicToneMapping",0,4,"AddEquation",0,100,"AddOperation",0,2,"AdditiveAnimationBlendMode",0,2501,"AdditiveBlending",0,2,"AgXToneMapping",0,6,"AlphaFormat",0,1021,"AlwaysCompare",0,519,"AlwaysDepth",0,1,"AlwaysStencilFunc",0,519,"AmbientLight",0,sa,"AnimationAction",0,sY,"AnimationClip",0,aB,"AnimationLoader",0,aq,"AnimationMixer",0,sJ,"AnimationObjectGroup",0,sq,"AnimationUtils",0,aE,"ArcCurve",0,rs,"ArrayCamera",0,sT,"ArrowHelper",0,oP,"AttachedBindMode",0,R,"Audio",0,sL,"AudioAnalyser",0,sz,"AudioContext",0,s_,"AudioListener",0,sI,"AudioLoader",0,sy,"AxesHelper",0,oI,"BackSide",0,1,"BasicDepthPacking",0,3200,"BasicShadowMap",0,0,"BatchedMesh",0,iz,"Bone",0,ie,"BooleanKeyframeTrack",0,aL,"Box2",0,oe,"Box3",0,eR,"Box3Helper",0,oA,"BoxGeometry",0,ng,"BoxHelper",0,oE,"BufferAttribute",0,tZ,"BufferGeometry",0,nn,"BufferGeometryLoader",0,sd,"ByteType",0,1010,"Cache",0,ak,"Camera",0,nS,"CameraHelper",0,oM,"CanvasTexture",0,rn,"CapsuleGeometry",0,rA,"CatmullRomCurve3",0,rd,"CineonToneMapping",0,3,"CircleGeometry",0,rC,"ClampToEdgeWrapping",0,1001,"Clock",0,sw,"Color",0,tz,"ColorKeyframeTrack",0,aN,"ColorManagement",0,eu,"CompressedArrayTexture",0,re,"CompressedCubeTexture",0,rt,"CompressedTexture",0,i7,"CompressedTextureLoader",0,aY,"ConeGeometry",0,rP,"ConstantAlphaFactor",0,213,"ConstantColorFactor",0,211,"Controls",0,oN,"CubeCamera",0,nA,"CubeReflectionMapping",0,301,"CubeRefractionMapping",0,302,"CubeTexture",0,nC,"CubeTextureLoader",0,aJ,"CubeUVReflectionMapping",0,306,"CubicBezierCurve",0,rg,"CubicBezierCurve3",0,rv,"CubicInterpolant",0,aC,"CullFaceBack",0,1,"CullFaceFront",0,2,"CullFaceFrontBack",0,3,"CullFaceNone",0,0,"Curve",0,rr,"CurvePath",0,rT,"CustomBlending",0,5,"CustomToneMapping",0,5,"CylinderGeometry",0,rR,"Cylindrical",0,s8,"Data3DTexture",0,eM,"DataArrayTexture",0,eb,"DataTexture",0,it,"DataTextureLoader",0,aK,"DataUtils",0,tX,"DecrementStencilOp",0,7683,"DecrementWrapStencilOp",0,34056,"DefaultLoadingManager",0,aV,"DepthFormat",0,1026,"DepthStencilFormat",0,1027,"DepthTexture",0,ri,"DetachedBindMode",0,P,"DirectionalLight",0,sr,"DirectionalLightHelper",0,ox,"DiscreteInterpolant",0,aP,"DodecahedronGeometry",0,rL,"DoubleSide",0,2,"DstAlphaFactor",0,206,"DstColorFactor",0,208,"DynamicCopyUsage",0,35050,"DynamicDrawUsage",0,35048,"DynamicReadUsage",0,35049,"EdgesGeometry",0,rF,"EllipseCurve",0,ra,"EqualCompare",0,514,"EqualDepth",0,4,"EqualStencilFunc",0,514,"EquirectangularReflectionMapping",0,303,"EquirectangularRefractionMapping",0,304,"Euler",0,tn,"EventDispatcher",0,O,"ExtrudeGeometry",0,r4,"FileLoader",0,aX,"Float16BufferAttribute",0,t3,"Float32BufferAttribute",0,t4,"FloatType",0,1015,"Fog",0,nI,"FogExp2",0,nP,"FramebufferTexture",0,i9,"FrontSide",0,0,"Frustum",0,iS,"GLBufferAttribute",0,s1,"GLSL1",0,"100","GLSL3",0,D,"GreaterCompare",0,516,"GreaterDepth",0,6,"GreaterEqualCompare",0,518,"GreaterEqualDepth",0,5,"GreaterEqualStencilFunc",0,518,"GreaterStencilFunc",0,516,"GridHelper",0,om,"Group",0,i6,"HalfFloatType",0,1016,"HemisphereLight",0,a0,"HemisphereLightHelper",0,of,"IcosahedronGeometry",0,r6,"ImageBitmapLoader",0,sv,"ImageLoader",0,aZ,"ImageUtils",0,ed,"IncrementStencilOp",0,7682,"IncrementWrapStencilOp",0,34055,"InstancedBufferAttribute",0,is,"InstancedBufferGeometry",0,sh,"InstancedInterleavedBuffer",0,s0,"InstancedMesh",0,im,"Int16BufferAttribute",0,tQ,"Int32BufferAttribute",0,t1,"Int8BufferAttribute",0,tJ,"IntType",0,1013,"InterleavedBuffer",0,nN,"InterleavedBufferAttribute",0,nD,"Interpolant",0,aA,"InterpolateDiscrete",0,2300,"InterpolateLinear",0,2301,"InterpolateSmooth",0,2302,"InvertStencilOp",0,5386,"KeepStencilOp",0,7680,"KeyframeTrack",0,aI,"LOD",0,nQ,"LatheGeometry",0,rE,"Layers",0,ti,"LessCompare",0,513,"LessDepth",0,2,"LessEqualCompare",0,515,"LessEqualDepth",0,3,"LessEqualStencilFunc",0,515,"LessStencilFunc",0,513,"Light",0,aQ,"LightProbe",0,sl,"Line",0,iq,"Line3",0,oi,"LineBasicMaterial",0,iB,"LineCurve",0,r_,"LineCurve3",0,ry,"LineDashedMaterial",0,ax,"LineLoop",0,i$,"LineSegments",0,iK,"LinearFilter",0,1006,"LinearInterpolant",0,aR,"LinearMipMapLinearFilter",0,1008,"LinearMipMapNearestFilter",0,1007,"LinearMipmapLinearFilter",0,1008,"LinearMipmapNearestFilter",0,1007,"LinearSRGBColorSpace",0,L,"LinearToneMapping",0,1,"LinearTransfer",0,N,"Loader",0,aG,"LoaderUtils",0,sc,"LoadingManager",0,aH,"LoopOnce",0,2200,"LoopPingPong",0,2202,"LoopRepeat",0,2201,"LuminanceAlphaFormat",0,1025,"LuminanceFormat",0,1024,"MOUSE",0,A,"Material",0,tH,"MaterialLoader",0,su,"MathUtils",0,q,"Matrix2",0,s9,"Matrix3",0,Z,"Matrix4",0,e2,"MaxEquation",0,104,"Mesh",0,nf,"MeshBasicMaterial",0,tV,"MeshDepthMaterial",0,av,"MeshDistanceMaterial",0,a_,"MeshLambertMaterial",0,ag,"MeshMatcapMaterial",0,ay,"MeshNormalMaterial",0,am,"MeshPhongMaterial",0,ap,"MeshPhysicalMaterial",0,ad,"MeshStandardMaterial",0,ah,"MeshToonMaterial",0,af,"MinEquation",0,103,"MirroredRepeatWrapping",0,1002,"MixOperation",0,1,"MultiplyBlending",0,4,"MultiplyOperation",0,0,"NearestFilter",0,1003,"NearestMipMapLinearFilter",0,1005,"NearestMipMapNearestFilter",0,1004,"NearestMipmapLinearFilter",0,1005,"NearestMipmapNearestFilter",0,1004,"NeutralToneMapping",0,7,"NeverCompare",0,512,"NeverDepth",0,0,"NeverStencilFunc",0,512,"NoBlending",0,0,"NoColorSpace",0,"","NoToneMapping",0,0,"NormalAnimationBlendMode",0,2500,"NormalBlending",0,1,"NotEqualCompare",0,517,"NotEqualDepth",0,7,"NotEqualStencilFunc",0,517,"NumberKeyframeTrack",0,aU,"Object3D",0,ty,"ObjectLoader",0,sp,"ObjectSpaceNormalMap",0,1,"OctahedronGeometry",0,r8,"OneFactor",0,201,"OneMinusConstantAlphaFactor",0,214,"OneMinusConstantColorFactor",0,212,"OneMinusDstAlphaFactor",0,207,"OneMinusDstColorFactor",0,209,"OneMinusSrcAlphaFactor",0,205,"OneMinusSrcColorFactor",0,203,"OrthographicCamera",0,sn,"PCFShadowMap",0,1,"PCFSoftShadowMap",0,2,"PMREMGenerator",0,o8,"Path",0,rw,"PerspectiveCamera",0,nE,"Plane",0,iy,"PlaneGeometry",0,r9,"PlaneHelper",0,oC,"PointLight",0,st,"PointLightHelper",0,oc,"Points",0,i4,"PointsMaterial",0,iQ,"PolarGridHelper",0,og,"PolyhedronGeometry",0,rI,"PositionalAudio",0,sF,"PropertyBinding",0,sX,"PropertyMixer",0,sB,"QuadraticBezierCurve",0,rx,"QuadraticBezierCurve3",0,rb,"Quaternion",0,ew,"QuaternionKeyframeTrack",0,aO,"QuaternionLinearInterpolant",0,aD,"RED_GREEN_RGTC2_Format",0,36285,"RED_RGTC1_Format",0,36283,"REVISION",0,"171","RGBADepthPacking",0,3201,"RGBAFormat",0,1023,"RGBAIntegerFormat",0,1033,"RGBA_ASTC_10x10_Format",0,37819,"RGBA_ASTC_10x5_Format",0,37816,"RGBA_ASTC_10x6_Format",0,37817,"RGBA_ASTC_10x8_Format",0,37818,"RGBA_ASTC_12x10_Format",0,37820,"RGBA_ASTC_12x12_Format",0,37821,"RGBA_ASTC_4x4_Format",0,37808,"RGBA_ASTC_5x4_Format",0,37809,"RGBA_ASTC_5x5_Format",0,37810,"RGBA_ASTC_6x5_Format",0,37811,"RGBA_ASTC_6x6_Format",0,37812,"RGBA_ASTC_8x5_Format",0,37813,"RGBA_ASTC_8x6_Format",0,37814,"RGBA_ASTC_8x8_Format",0,37815,"RGBA_BPTC_Format",0,36492,"RGBA_ETC2_EAC_Format",0,37496,"RGBA_PVRTC_2BPPV1_Format",0,35843,"RGBA_PVRTC_4BPPV1_Format",0,35842,"RGBA_S3TC_DXT1_Format",0,33777,"RGBA_S3TC_DXT3_Format",0,33778,"RGBA_S3TC_DXT5_Format",0,33779,"RGBDepthPacking",0,3202,"RGBFormat",0,1022,"RGBIntegerFormat",0,1032,"RGB_BPTC_SIGNED_Format",0,36494,"RGB_BPTC_UNSIGNED_Format",0,36495,"RGB_ETC1_Format",0,36196,"RGB_ETC2_Format",0,37492,"RGB_PVRTC_2BPPV1_Format",0,35841,"RGB_PVRTC_4BPPV1_Format",0,35840,"RGB_S3TC_DXT1_Format",0,33776,"RGDepthPacking",0,3203,"RGFormat",0,1030,"RGIntegerFormat",0,1031,"RawShaderMaterial",0,ac,"Ray",0,e1,"Raycaster",0,s3,"RectAreaLight",0,ss,"RedFormat",0,1028,"RedIntegerFormat",0,1029,"ReinhardToneMapping",0,2,"RenderTarget",0,ey,"RepeatWrapping",0,1e3,"ReplaceStencilOp",0,7681,"ReverseSubtractEquation",0,102,"RingGeometry",0,r7,"SIGNED_RED_GREEN_RGTC2_Format",0,36286,"SIGNED_RED_RGTC1_Format",0,36284,"SRGBColorSpace",0,I,"SRGBTransfer",0,U,"Scene",0,nL,"ShaderChunk",0,oB,"ShaderLib",0,oH,"ShaderMaterial",0,nb,"ShadowMaterial",0,au,"Shape",0,rz,"ShapeGeometry",0,ae,"ShapePath",0,oL,"ShapeUtils",0,r1,"ShortType",0,1011,"Skeleton",0,ia,"SkeletonHelper",0,ou,"SkinnedMesh",0,n7,"Source",0,ef,"Sphere",0,eq,"SphereGeometry",0,at,"Spherical",0,s6,"SphericalHarmonics3",0,so,"SplineCurve",0,rS,"SpotLight",0,a6,"SpotLightHelper",0,oa,"Sprite",0,nZ,"SpriteMaterial",0,nO,"SrcAlphaFactor",0,204,"SrcAlphaSaturateFactor",0,210,"SrcColorFactor",0,202,"StaticCopyUsage",0,35046,"StaticDrawUsage",0,35044,"StaticReadUsage",0,35045,"StereoCamera",0,sM,"StreamCopyUsage",0,35042,"StreamDrawUsage",0,35040,"StreamReadUsage",0,35041,"StringKeyframeTrack",0,aF,"SubtractEquation",0,101,"SubtractiveBlending",0,3,"TOUCH",0,C,"TangentSpaceNormalMap",0,0,"TetrahedronGeometry",0,an,"Texture",0,ev,"TextureLoader",0,a$,"TextureUtils",0,oD,"TorusGeometry",0,ai,"TorusKnotGeometry",0,ar,"Triangle",0,tN,"TriangleFanDrawMode",0,2,"TriangleStripDrawMode",0,1,"TrianglesDrawMode",0,0,"TubeGeometry",0,aa,"UVMapping",0,300,"Uint16BufferAttribute",0,t0,"Uint32BufferAttribute",0,t2,"Uint8BufferAttribute",0,tK,"Uint8ClampedBufferAttribute",0,t$,"Uniform",0,sK,"UniformsGroup",0,sQ,"UniformsLib",0,ok,"UniformsUtils",0,nx,"UnsignedByteType",0,1009,"UnsignedInt248Type",0,1020,"UnsignedInt5999Type",0,35902,"UnsignedIntType",0,1014,"UnsignedShort4444Type",0,1017,"UnsignedShort5551Type",0,1018,"UnsignedShortType",0,1012,"VSMShadowMap",0,3,"Vector2",0,Y,"Vector3",0,eE,"Vector4",0,e_,"VectorKeyframeTrack",0,az,"VideoTexture",0,i8,"WebGL3DRenderTarget",0,eT,"WebGLArrayRenderTarget",0,eS,"WebGLCoordinateSystem",0,2e3,"WebGLCubeRenderTarget",0,nR,"WebGLMultipleRenderTargets",0,oO,"WebGLRenderTarget",0,ex,"WebGLRenderer",0,uK,"WebGLUtils",0,uk,"WebGPUCoordinateSystem",0,2001,"WireframeGeometry",0,as,"WrapAroundEnding",0,2402,"ZeroCurvatureEnding",0,2400,"ZeroFactor",0,200,"ZeroSlopeEnding",0,2401,"ZeroStencilOp",0,0,"createCanvasElement",0,et],32009);var hv=e.i(32009);function h_(e,t){let n;return(...i)=>{window.clearTimeout(n),n=window.setTimeout(()=>e(...i),t)}}let hy=["x","y","top","bottom","left","right","width","height"];function hx({ref:e,children:t,fallback:n,resize:i,style:r,gl:a,events:s=hg,eventSource:o,eventPrefix:l,shadows:u,linear:c,flat:h,legacy:d,orthographic:p,frameloop:f,dpr:m,performance:g,raycaster:v,camera:_,scene:y,onPointerMissed:x,onCreated:b,...S}){E.useMemo(()=>cZ(hv),[]);let M=cd(),[T,w]=function({debounce:e,scroll:t,polyfill:n,offsetSize:i}={debounce:0,scroll:!1,offsetSize:!1}){var r,a,s;let o=n||("u"(p.current=!0,()=>void(p.current=!1)));let[f,m,g]=(0,E.useMemo)(()=>{let e=()=>{let e,t;if(!c.current.element)return;let{left:n,top:r,width:a,height:s,bottom:o,right:l,x:h,y:d}=c.current.element.getBoundingClientRect(),f={left:n,top:r,width:a,height:s,bottom:o,right:l,x:h,y:d};c.current.element instanceof HTMLElement&&i&&(f.height=c.current.element.offsetHeight,f.width=c.current.element.offsetWidth),Object.freeze(f),p.current&&(e=c.current.lastBounds,t=f,!hy.every(n=>e[n]===t[n]))&&u(c.current.lastBounds=f)};return[e,d?h_(e,d):e,h?h_(e,h):e]},[u,i,h,d]);function v(){c.current.scrollContainers&&(c.current.scrollContainers.forEach(e=>e.removeEventListener("scroll",g,!0)),c.current.scrollContainers=null),c.current.resizeObserver&&(c.current.resizeObserver.disconnect(),c.current.resizeObserver=null),c.current.orientationHandler&&("orientation"in screen&&"removeEventListener"in screen.orientation?screen.orientation.removeEventListener("change",c.current.orientationHandler):"onorientationchange"in window&&window.removeEventListener("orientationchange",c.current.orientationHandler))}function _(){c.current.element&&(c.current.resizeObserver=new o(g),c.current.resizeObserver.observe(c.current.element),t&&c.current.scrollContainers&&c.current.scrollContainers.forEach(e=>e.addEventListener("scroll",g,{capture:!0,passive:!0})),c.current.orientationHandler=()=>{g()},"orientation"in screen&&"addEventListener"in screen.orientation?screen.orientation.addEventListener("change",c.current.orientationHandler):"onorientationchange"in window&&window.addEventListener("orientationchange",c.current.orientationHandler))}return r=g,a=!!t,(0,E.useEffect)(()=>{if(a)return window.addEventListener("scroll",r,{capture:!0,passive:!0}),()=>void window.removeEventListener("scroll",r,!0)},[r,a]),s=m,(0,E.useEffect)(()=>(window.addEventListener("resize",s),()=>void window.removeEventListener("resize",s)),[s]),(0,E.useEffect)(()=>{v(),_()},[t,g,m]),(0,E.useEffect)(()=>v,[]),[e=>{e&&e!==c.current.element&&(v(),c.current.element=e,c.current.scrollContainers=function e(t){let n=[];if(!t||t===document.body)return n;let{overflow:i,overflowX:r,overflowY:a}=window.getComputedStyle(t);return[i,r,a].some(e=>"auto"===e||"scroll"===e)&&n.push(t),[...n,...e(t.parentElement)]}(e),_())},l,f]}({scroll:!0,debounce:{scroll:50,resize:0},...i}),A=E.useRef(null),C=E.useRef(null);E.useImperativeHandle(e,()=>A.current);let R=ch(x),[P,I]=E.useState(!1),[L,N]=E.useState(!1);if(P)throw P;if(L)throw L;let U=E.useRef(null);cc(()=>{let e=A.current;w.width>0&&w.height>0&&e&&(U.current||(U.current=he(e)),async function(){await U.current.configure({gl:a,scene:y,events:s,shadows:u,linear:c,flat:h,legacy:d,orthographic:p,frameloop:f,dpr:m,performance:g,raycaster:v,camera:_,size:w,onPointerMissed:(...e)=>null==R.current?void 0:R.current(...e),onCreated:e=>{null==e.events.connect||e.events.connect(o?cl(o)?o.current:o:C.current),l&&e.setEvents({compute:(e,t)=>{let n=e[l+"X"],i=e[l+"Y"];t.pointer.set(n/t.size.width*2-1,-(2*(i/t.size.height))+1),t.raycaster.setFromCamera(t.pointer,t.camera)}}),null==b||b(e)}}),U.current.render((0,u9.jsx)(M,{children:(0,u9.jsx)(cf,{set:N,children:(0,u9.jsx)(E.Suspense,{fallback:(0,u9.jsx)(cp,{set:I}),children:null!=t?t:null})})}))}())}),E.useEffect(()=>{let e=A.current;if(e)return()=>hn(e)},[]);let D=o?"none":"auto";return(0,u9.jsx)("div",{ref:C,style:{position:"relative",width:"100%",height:"100%",overflow:"hidden",pointerEvents:D,...r},...S,children:(0,u9.jsx)("div",{ref:T,style:{width:"100%",height:"100%"},children:(0,u9.jsx)("canvas",{ref:A,style:{display:"block"},children:n})})})}e.s(["Canvas",0,function(e){return(0,u9.jsx)(ci,{children:(0,u9.jsx)(hx,{...e})})}],75056),e.s(["useFrame",0,cz],25234),e.s(["useThree",0,cF],28600)},67335,e=>{"use strict";var t=e.i(1950);e.s(["extend",()=>t.e])},60602,e=>{"use strict";var t=e.i(1950);e.s(["useLoader",()=>t.G])},44208,e=>{"use strict";var t=e.i(1950);e.s(["createPortal",()=>t.o])},24205,e=>{"use strict";var t=e.i(1950);e.s(["applyProps",()=>t.s])}]); \ No newline at end of file diff --git a/build/_next/static/chunks/0.iab0vw_jpg5.js b/build/_next/static/chunks/0.iab0vw_jpg5.js deleted file mode 100644 index 3e5b593..0000000 --- a/build/_next/static/chunks/0.iab0vw_jpg5.js +++ /dev/null @@ -1,243 +0,0 @@ -(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,55838,(e,t,n)=>{"use strict";var i=e.r(71645),r="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=i.useState,s=i.useEffect,o=i.useLayoutEffect,l=i.useDebugValue;function u(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!r(e,n)}catch(e){return!0}}var c="u"{"use strict";t.exports=e.r(55838)},52822,(e,t,n)=>{"use strict";var i=e.r(71645),r=e.r(2239),a="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},s=r.useSyncExternalStore,o=i.useRef,l=i.useEffect,u=i.useMemo,c=i.useDebugValue;n.useSyncExternalStoreWithSelector=function(e,t,n,i,r){var h=o(null);if(null===h.current){var d={hasValue:!1,value:null};h.current=d}else d=h.current;var p=s(e,(h=u(function(){function e(e){if(!l){if(l=!0,s=e,e=i(e),void 0!==r&&d.hasValue){var t=d.value;if(r(t,e))return o=t}return o=e}if(t=o,a(s,e))return t;var n=i(e);return void 0!==r&&r(t,n)?(s=e,t):(s=e,o=n)}var s,o,l=!1,u=void 0===n?null:n;return[function(){return e(t())},null===u?void 0:function(){return e(u())}]},[t,n,i,r]))[0],h[1]);return l(function(){d.hasValue=!0,d.value=p},[p]),c(p),p}},30224,(e,t,n)=>{"use strict";t.exports=e.r(52822)},66936,(e,t,n)=>{"use strict";function i(e,t){var n=e.length;for(e.push(t);0>>1,r=e[i];if(0>>1;is(l,n))us(c,l)?(e[i]=c,e[u]=n,i=u):(e[i]=l,e[o]=n,i=o);else if(us(c,n))e[i]=c,e[u]=n,i=u;else break}}return t}function s(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if(n.unstable_now=void 0,"object"==typeof performance&&"function"==typeof performance.now){var o,l=performance;n.unstable_now=function(){return l.now()}}else{var u=Date,c=u.now();n.unstable_now=function(){return u.now()-c}}var h=[],d=[],p=1,f=null,m=3,g=!1,v=!1,_=!1,y=!1,x="function"==typeof setTimeout?setTimeout:null,b="function"==typeof clearTimeout?clearTimeout:null,S="u">typeof setImmediate?setImmediate:null;function M(e){for(var t=r(d);null!==t;){if(null===t.callback)a(d);else if(t.startTime<=e)a(d),t.sortIndex=t.expirationTime,i(h,t);else break;t=r(d)}}function T(e){if(_=!1,M(e),!v)if(null!==r(h))v=!0,w||(w=!0,o());else{var t=r(d);null!==t&&N(T,t.startTime-e)}}var w=!1,E=-1,A=5,C=-1;function R(){return!!y||!(n.unstable_now()-Ce&&R());){var s=f.callback;if("function"==typeof s){f.callback=null,m=f.priorityLevel;var l=s(f.expirationTime<=e);if(e=n.unstable_now(),"function"==typeof l){f.callback=l,M(e),t=!0;break t}f===r(h)&&a(h),M(e)}else a(h);f=r(h)}if(null!==f)t=!0;else{var u=r(d);null!==u&&N(T,u.startTime-e),t=!1}}break e}finally{f=null,m=i,g=!1}}}finally{t?o():w=!1}}}if("function"==typeof S)o=function(){S(P)};else if("u">typeof MessageChannel){var I=new MessageChannel,L=I.port2;I.port1.onmessage=P,o=function(){L.postMessage(null)}}else o=function(){x(P,0)};function N(e,t){E=x(function(){e(n.unstable_now())},t)}n.unstable_IdlePriority=5,n.unstable_ImmediatePriority=1,n.unstable_LowPriority=4,n.unstable_NormalPriority=3,n.unstable_Profiling=null,n.unstable_UserBlockingPriority=2,n.unstable_cancelCallback=function(e){e.callback=null},n.unstable_forceFrameRate=function(e){0>e||125s?(e.sortIndex=a,i(d,e),null===r(h)&&e===r(d)&&(_?(b(E),E=-1):_=!0,N(T,a-s))):(e.sortIndex=l,i(h,e),v||g||(v=!0,w||(w=!0,o()))),e},n.unstable_shouldYield=R,n.unstable_wrapCallback=function(e){var t=m;return function(){var n=m;m=t;try{return e.apply(this,arguments)}finally{m=n}}}},89499,(e,t,n)=>{"use strict";t.exports=e.r(66936)},75056,90072,8560,8155,1950,25234,28600,e=>{"use strict";let t,n,i,r,a,s,o,l,u,c,h,d,p,f,m,g,v,_;var y,x,b,S,M,T,w=e.i(47167),E=e.i(71645);let A={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},C={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},R="attached",P="detached",I="srgb",L="srgb-linear",N="linear",U="srgb",D="300 es";class O{addEventListener(e,t){void 0===this._listeners&&(this._listeners={});let n=this._listeners;void 0===n[e]&&(n[e]=[]),-1===n[e].indexOf(t)&&n[e].push(t)}hasEventListener(e,t){if(void 0===this._listeners)return!1;let n=this._listeners;return void 0!==n[e]&&-1!==n[e].indexOf(t)}removeEventListener(e,t){if(void 0===this._listeners)return;let n=this._listeners[e];if(void 0!==n){let e=n.indexOf(t);-1!==e&&n.splice(e,1)}}dispatchEvent(e){if(void 0===this._listeners)return;let t=this._listeners[e.type];if(void 0!==t){e.target=this;let n=t.slice(0);for(let t=0,i=n.length;t>8&255]+F[e>>16&255]+F[e>>24&255]+"-"+F[255&t]+F[t>>8&255]+"-"+F[t>>16&15|64]+F[t>>24&255]+"-"+F[63&n|128]+F[n>>8&255]+"-"+F[n>>16&255]+F[n>>24&255]+F[255&i]+F[i>>8&255]+F[i>>16&255]+F[i>>24&255]).toLowerCase()}function V(e,t,n){return Math.max(t,Math.min(n,e))}function G(e,t){return(e%t+t)%t}function W(e,t,n){return(1-n)*e+n*t}function j(e,t){switch(t.constructor){case Float32Array:return e;case Uint32Array:return e/0xffffffff;case Uint16Array:return e/65535;case Uint8Array:return e/255;case Int32Array:return Math.max(e/0x7fffffff,-1);case Int16Array:return Math.max(e/32767,-1);case Int8Array:return Math.max(e/127,-1);default:throw Error("Invalid component type.")}}function X(e,t){switch(t.constructor){case Float32Array:return e;case Uint32Array:return Math.round(0xffffffff*e);case Uint16Array:return Math.round(65535*e);case Uint8Array:return Math.round(255*e);case Int32Array:return Math.round(0x7fffffff*e);case Int16Array:return Math.round(32767*e);case Int8Array:return Math.round(127*e);default:throw Error("Invalid component type.")}}let q={DEG2RAD:B,RAD2DEG:k,generateUUID:H,clamp:V,euclideanModulo:G,mapLinear:function(e,t,n,i,r){return i+(e-t)*(r-i)/(n-t)},inverseLerp:function(e,t,n){return e!==t?(n-e)/(t-e):0},lerp:W,damp:function(e,t,n,i){return W(e,t,1-Math.exp(-n*i))},pingpong:function(e,t=1){return t-Math.abs(G(e,2*t)-t)},smoothstep:function(e,t,n){return e<=t?0:e>=n?1:(e=(e-t)/(n-t))*e*(3-2*e)},smootherstep:function(e,t,n){return e<=t?0:e>=n?1:(e=(e-t)/(n-t))*e*e*(e*(6*e-15)+10)},randInt:function(e,t){return e+Math.floor(Math.random()*(t-e+1))},randFloat:function(e,t){return e+Math.random()*(t-e)},randFloatSpread:function(e){return e*(.5-Math.random())},seededRandom:function(e){void 0!==e&&(z=e);let t=z+=0x6d2b79f5;return t=Math.imul(t^t>>>15,1|t),(((t^=t+Math.imul(t^t>>>7,61|t))^t>>>14)>>>0)/0x100000000},degToRad:function(e){return e*B},radToDeg:function(e){return e*k},isPowerOfTwo:function(e){return(e&e-1)==0&&0!==e},ceilPowerOfTwo:function(e){return Math.pow(2,Math.ceil(Math.log(e)/Math.LN2))},floorPowerOfTwo:function(e){return Math.pow(2,Math.floor(Math.log(e)/Math.LN2))},setQuaternionFromProperEuler:function(e,t,n,i,r){let a=Math.cos,s=Math.sin,o=a(n/2),l=s(n/2),u=a((t+i)/2),c=s((t+i)/2),h=a((t-i)/2),d=s((t-i)/2),p=a((i-t)/2),f=s((i-t)/2);switch(r){case"XYX":e.set(o*c,l*h,l*d,o*u);break;case"YZY":e.set(l*d,o*c,l*h,o*u);break;case"ZXZ":e.set(l*h,l*d,o*c,o*u);break;case"XZX":e.set(o*c,l*f,l*p,o*u);break;case"YXY":e.set(l*p,o*c,l*f,o*u);break;case"ZYZ":e.set(l*f,l*p,o*c,o*u);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+r)}},normalize:X,denormalize:j};class Y{constructor(e=0,t=0){Y.prototype.isVector2=!0,this.x=e,this.y=t}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){let t=this.x,n=this.y,i=e.elements;return this.x=i[0]*t+i[3]*n+i[6],this.y=i[1]*t+i[4]*n+i[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=V(this.x,e.x,t.x),this.y=V(this.y,e.y,t.y),this}clampScalar(e,t){return this.x=V(this.x,e,t),this.y=V(this.y,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(V(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());return 0===t?Math.PI/2:Math.acos(V(this.dot(e)/t,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y;return t*t+n*n}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){let n=Math.cos(t),i=Math.sin(t),r=this.x-e.x,a=this.y-e.y;return this.x=r*n-a*i+e.x,this.y=r*i+a*n+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class Z{constructor(e,t,n,i,r,a,s,o,l){Z.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],void 0!==e&&this.set(e,t,n,i,r,a,s,o,l)}set(e,t,n,i,r,a,s,o,l){let u=this.elements;return u[0]=e,u[1]=i,u[2]=s,u[3]=t,u[4]=r,u[5]=o,u[6]=n,u[7]=a,u[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],this}extractBasis(e,t,n){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(e){let t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,i=t.elements,r=this.elements,a=n[0],s=n[3],o=n[6],l=n[1],u=n[4],c=n[7],h=n[2],d=n[5],p=n[8],f=i[0],m=i[3],g=i[6],v=i[1],_=i[4],y=i[7],x=i[2],b=i[5],S=i[8];return r[0]=a*f+s*v+o*x,r[3]=a*m+s*_+o*b,r[6]=a*g+s*y+o*S,r[1]=l*f+u*v+c*x,r[4]=l*m+u*_+c*b,r[7]=l*g+u*y+c*S,r[2]=h*f+d*v+p*x,r[5]=h*m+d*_+p*b,r[8]=h*g+d*y+p*S,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[1],i=e[2],r=e[3],a=e[4],s=e[5],o=e[6],l=e[7],u=e[8];return t*a*u-t*s*l-n*r*u+n*s*o+i*r*l-i*a*o}invert(){let e=this.elements,t=e[0],n=e[1],i=e[2],r=e[3],a=e[4],s=e[5],o=e[6],l=e[7],u=e[8],c=u*a-s*l,h=s*o-u*r,d=l*r-a*o,p=t*c+n*h+i*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);let f=1/p;return e[0]=c*f,e[1]=(i*l-u*n)*f,e[2]=(s*n-i*a)*f,e[3]=h*f,e[4]=(u*t-i*o)*f,e[5]=(i*r-s*t)*f,e[6]=d*f,e[7]=(n*o-l*t)*f,e[8]=(a*t-n*r)*f,this}transpose(){let e,t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){let t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,n,i,r,a,s){let o=Math.cos(r),l=Math.sin(r);return this.set(n*o,n*l,-n*(o*a+l*s)+a+e,-i*l,i*o,-i*(-l*a+o*s)+s+t,0,0,1),this}scale(e,t){return this.premultiply(J.makeScale(e,t)),this}rotate(e){return this.premultiply(J.makeRotation(-e)),this}translate(e,t){return this.premultiply(J.makeTranslation(e,t)),this}makeTranslation(e,t){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,n,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){let t=this.elements,n=e.elements;for(let e=0;e<9;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<9;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e}clone(){return new this.constructor().fromArray(this.elements)}}let J=new Z;function K(e){for(let t=e.length-1;t>=0;--t)if(e[t]>=65535)return!0;return!1}let $={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:Uint8ClampedArray,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};function Q(e,t){return new $[e](t)}function ee(e){return document.createElementNS("http://www.w3.org/1999/xhtml",e)}function et(){let e=ee("canvas");return e.style.display="block",e}let en={};function ei(e){e in en||(en[e]=!0,console.warn(e))}function er(e,t,n){return new Promise(function(i,r){setTimeout(function a(){switch(e.clientWaitSync(t,e.SYNC_FLUSH_COMMANDS_BIT,0)){case e.WAIT_FAILED:r();break;case e.TIMEOUT_EXPIRED:setTimeout(a,n);break;default:i()}},n)})}function ea(e){let t=e.elements;t[2]=.5*t[2]+.5*t[3],t[6]=.5*t[6]+.5*t[7],t[10]=.5*t[10]+.5*t[11],t[14]=.5*t[14]+.5*t[15]}function es(e){let t=e.elements;-1===t[11]?(t[10]=-t[10]-1,t[14]=-t[14]):(t[10]=-t[10],t[14]=-t[14]+1)}let eo=new Z().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),el=new Z().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715),eu=(d=[.64,.33,.3,.6,.15,.06],p=[.2126,.7152,.0722],f=[.3127,.329],(h={enabled:!0,workingColorSpace:L,spaces:{},convert:function(e,t,n){return!1!==this.enabled&&t!==n&&t&&n&&(this.spaces[t].transfer===U&&(e.r=ec(e.r),e.g=ec(e.g),e.b=ec(e.b)),this.spaces[t].primaries!==this.spaces[n].primaries&&(e.applyMatrix3(this.spaces[t].toXYZ),e.applyMatrix3(this.spaces[n].fromXYZ)),this.spaces[n].transfer===U&&(e.r=eh(e.r),e.g=eh(e.g),e.b=eh(e.b))),e},fromWorkingColorSpace:function(e,t){return this.convert(e,this.workingColorSpace,t)},toWorkingColorSpace:function(e,t){return this.convert(e,t,this.workingColorSpace)},getPrimaries:function(e){return this.spaces[e].primaries},getTransfer:function(e){return""===e?N:this.spaces[e].transfer},getLuminanceCoefficients:function(e,t=this.workingColorSpace){return e.fromArray(this.spaces[t].luminanceCoefficients)},define:function(e){Object.assign(this.spaces,e)},_getMatrix:function(e,t,n){return e.copy(this.spaces[t].toXYZ).multiply(this.spaces[n].fromXYZ)},_getDrawingBufferColorSpace:function(e){return this.spaces[e].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(e=this.workingColorSpace){return this.spaces[e].workingColorSpaceConfig.unpackColorSpace}}).define({[L]:{primaries:d,whitePoint:f,transfer:N,toXYZ:eo,fromXYZ:el,luminanceCoefficients:p,workingColorSpaceConfig:{unpackColorSpace:I},outputColorSpaceConfig:{drawingBufferColorSpace:I}},[I]:{primaries:d,whitePoint:f,transfer:U,toXYZ:eo,fromXYZ:el,luminanceCoefficients:p,outputColorSpaceConfig:{drawingBufferColorSpace:I}}}),h);function ec(e){return e<.04045?.0773993808*e:Math.pow(.9478672986*e+.0521327014,2.4)}function eh(e){return e<.0031308?12.92*e:1.055*Math.pow(e,.41666)-.055}class ed{static getDataURL(e){let n;if(/^data:/i.test(e.src)||"u"2048||n.height>2048?(console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons",e),n.toDataURL("image/jpeg",.6)):n.toDataURL("image/png")}static sRGBToLinear(e){if("u">typeof HTMLImageElement&&e instanceof HTMLImageElement||"u">typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"u">typeof ImageBitmap&&e instanceof ImageBitmap){let t=ee("canvas");t.width=e.width,t.height=e.height;let n=t.getContext("2d");n.drawImage(e,0,0,e.width,e.height);let i=n.getImageData(0,0,e.width,e.height),r=i.data;for(let e=0;etypeof HTMLImageElement&&e instanceof HTMLImageElement||"u">typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"u">typeof ImageBitmap&&e instanceof ImageBitmap?ed.getDataURL(e):e.data?{data:Array.from(e.data),width:e.width,height:e.height,type:e.data.constructor.name}:(console.warn("THREE.Texture: Unable to serialize Texture."),{})}let eg=0;class ev extends O{constructor(e=ev.DEFAULT_IMAGE,t=ev.DEFAULT_MAPPING,n=1001,i=1001,r=1006,a=1008,s=1023,o=1009,l=ev.DEFAULT_ANISOTROPY,u=""){super(),this.isTexture=!0,Object.defineProperty(this,"id",{value:eg++}),this.uuid=H(),this.name="",this.source=new ef(e),this.mipmaps=[],this.mapping=t,this.channel=0,this.wrapS=n,this.wrapT=i,this.magFilter=r,this.minFilter=a,this.anisotropy=l,this.format=s,this.internalFormat=null,this.type=o,this.offset=new Y(0,0),this.repeat=new Y(1,1),this.center=new Y(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new Z,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.colorSpace=u,this.userData={},this.version=0,this.onUpdate=null,this.isRenderTargetTexture=!1,this.pmremVersion=0}get image(){return this.source.data}set image(e=null){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}clone(){return new this.constructor().copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.channel=e.channel,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.colorSpace=e.colorSpace,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}toJSON(e){let t=void 0===e||"string"==typeof e;if(!t&&void 0!==e.textures[this.uuid])return e.textures[this.uuid];let n={metadata:{version:4.6,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(n.userData=this.userData),t||(e.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(e){if(300!==this.mapping)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case 1e3:e.x=e.x-Math.floor(e.x);break;case 1001:e.x=e.x<0?0:1;break;case 1002:1===Math.abs(Math.floor(e.x)%2)?e.x=Math.ceil(e.x)-e.x:e.x=e.x-Math.floor(e.x)}if(e.y<0||e.y>1)switch(this.wrapT){case 1e3:e.y=e.y-Math.floor(e.y);break;case 1001:e.y=e.y<0?0:1;break;case 1002:1===Math.abs(Math.floor(e.y)%2)?e.y=Math.ceil(e.y)-e.y:e.y=e.y-Math.floor(e.y)}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){!0===e&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){!0===e&&this.pmremVersion++}}ev.DEFAULT_IMAGE=null,ev.DEFAULT_MAPPING=300,ev.DEFAULT_ANISOTROPY=1;class e_{constructor(e=0,t=0,n=0,i=1){e_.prototype.isVector4=!0,this.x=e,this.y=t,this.z=n,this.w=i}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,n,i){return this.x=e,this.y=t,this.z=n,this.w=i,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=void 0!==e.w?e.w:1,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){let t=this.x,n=this.y,i=this.z,r=this.w,a=e.elements;return this.x=a[0]*t+a[4]*n+a[8]*i+a[12]*r,this.y=a[1]*t+a[5]*n+a[9]*i+a[13]*r,this.z=a[2]*t+a[6]*n+a[10]*i+a[14]*r,this.w=a[3]*t+a[7]*n+a[11]*i+a[15]*r,this}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this.w/=e.w,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);let t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,n,i,r,a=e.elements,s=a[0],o=a[4],l=a[8],u=a[1],c=a[5],h=a[9],d=a[2],p=a[6],f=a[10];if(.01>Math.abs(o-u)&&.01>Math.abs(l-d)&&.01>Math.abs(h-p)){if(.1>Math.abs(o+u)&&.1>Math.abs(l+d)&&.1>Math.abs(h+p)&&.1>Math.abs(s+c+f-3))return this.set(1,0,0,0),this;t=Math.PI;let e=(s+1)/2,a=(c+1)/2,m=(f+1)/2,g=(o+u)/4,v=(l+d)/4,_=(h+p)/4;return e>a&&e>m?e<.01?(n=0,i=.707106781,r=.707106781):(i=g/(n=Math.sqrt(e)),r=v/n):a>m?a<.01?(n=.707106781,i=0,r=.707106781):(n=g/(i=Math.sqrt(a)),r=_/i):m<.01?(n=.707106781,i=.707106781,r=0):(n=v/(r=Math.sqrt(m)),i=_/r),this.set(n,i,r,t),this}let m=Math.sqrt((p-h)*(p-h)+(l-d)*(l-d)+(u-o)*(u-o));return .001>Math.abs(m)&&(m=1),this.x=(p-h)/m,this.y=(l-d)/m,this.z=(u-o)/m,this.w=Math.acos((s+c+f-1)/2),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this.w=t[15],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this.w=Math.min(this.w,e.w),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this.w=Math.max(this.w,e.w),this}clamp(e,t){return this.x=V(this.x,e.x,t.x),this.y=V(this.y,e.y,t.y),this.z=V(this.z,e.z,t.z),this.w=V(this.w,e.w,t.w),this}clampScalar(e,t){return this.x=V(this.x,e,t),this.y=V(this.y,e,t),this.z=V(this.z,e,t),this.w=V(this.w,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(V(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this.w+=(e.w-this.w)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this.w=e.w+(t.w-e.w)*n,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this.w=e[t+3],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e[t+3]=this.w,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this.w=e.getW(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}class ey extends O{constructor(e=1,t=1,n={}){super(),this.isRenderTarget=!0,this.width=e,this.height=t,this.depth=1,this.scissor=new e_(0,0,e,t),this.scissorTest=!1,this.viewport=new e_(0,0,e,t);const i=new ev({width:e,height:t,depth:1},(n=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:1006,depthBuffer:!0,stencilBuffer:!1,resolveDepthBuffer:!0,resolveStencilBuffer:!0,depthTexture:null,samples:0,count:1},n)).mapping,n.wrapS,n.wrapT,n.magFilter,n.minFilter,n.format,n.type,n.anisotropy,n.colorSpace);i.flipY=!1,i.generateMipmaps=n.generateMipmaps,i.internalFormat=n.internalFormat,this.textures=[];const r=n.count;for(let e=0;e=0?1:-1,i=1-t*t;if(i>Number.EPSILON){let r=Math.sqrt(i),a=Math.atan2(r,t*n);e=Math.sin(e*a)/r,s=Math.sin(s*a)/r}let r=s*n;if(o=o*e+h*r,l=l*e+d*r,u=u*e+p*r,c=c*e+f*r,e===1-s){let e=1/Math.sqrt(o*o+l*l+u*u+c*c);o*=e,l*=e,u*=e,c*=e}}e[t]=o,e[t+1]=l,e[t+2]=u,e[t+3]=c}static multiplyQuaternionsFlat(e,t,n,i,r,a){let s=n[i],o=n[i+1],l=n[i+2],u=n[i+3],c=r[a],h=r[a+1],d=r[a+2],p=r[a+3];return e[t]=s*p+u*c+o*d-l*h,e[t+1]=o*p+u*h+l*c-s*d,e[t+2]=l*p+u*d+s*h-o*c,e[t+3]=u*p-s*c-o*h-l*d,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,n,i){return this._x=e,this._y=t,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t=!0){let n=e._x,i=e._y,r=e._z,a=e._order,s=Math.cos,o=Math.sin,l=s(n/2),u=s(i/2),c=s(r/2),h=o(n/2),d=o(i/2),p=o(r/2);switch(a){case"XYZ":this._x=h*u*c+l*d*p,this._y=l*d*c-h*u*p,this._z=l*u*p+h*d*c,this._w=l*u*c-h*d*p;break;case"YXZ":this._x=h*u*c+l*d*p,this._y=l*d*c-h*u*p,this._z=l*u*p-h*d*c,this._w=l*u*c+h*d*p;break;case"ZXY":this._x=h*u*c-l*d*p,this._y=l*d*c+h*u*p,this._z=l*u*p+h*d*c,this._w=l*u*c-h*d*p;break;case"ZYX":this._x=h*u*c-l*d*p,this._y=l*d*c+h*u*p,this._z=l*u*p-h*d*c,this._w=l*u*c+h*d*p;break;case"YZX":this._x=h*u*c+l*d*p,this._y=l*d*c+h*u*p,this._z=l*u*p-h*d*c,this._w=l*u*c-h*d*p;break;case"XZY":this._x=h*u*c-l*d*p,this._y=l*d*c-h*u*p,this._z=l*u*p+h*d*c,this._w=l*u*c+h*d*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+a)}return!0===t&&this._onChangeCallback(),this}setFromAxisAngle(e,t){let n=t/2,i=Math.sin(n);return this._x=e.x*i,this._y=e.y*i,this._z=e.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(e){let t=e.elements,n=t[0],i=t[4],r=t[8],a=t[1],s=t[5],o=t[9],l=t[2],u=t[6],c=t[10],h=n+s+c;if(h>0){let e=.5/Math.sqrt(h+1);this._w=.25/e,this._x=(u-o)*e,this._y=(r-l)*e,this._z=(a-i)*e}else if(n>s&&n>c){let e=2*Math.sqrt(1+n-s-c);this._w=(u-o)/e,this._x=.25*e,this._y=(i+a)/e,this._z=(r+l)/e}else if(s>c){let e=2*Math.sqrt(1+s-n-c);this._w=(r-l)/e,this._x=(i+a)/e,this._y=.25*e,this._z=(o+u)/e}else{let e=2*Math.sqrt(1+c-n-s);this._w=(a-i)/e,this._x=(r+l)/e,this._y=(o+u)/e,this._z=.25*e}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let n=e.dot(t)+1;return nMath.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0):(this._x=0,this._y=-e.z,this._z=e.y)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x),this._w=n,this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(V(this.dot(e),-1,1)))}rotateTowards(e,t){let n=this.angleTo(e);if(0===n)return this;let i=Math.min(1,t/n);return this.slerp(e,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return 0===e?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){let n=e._x,i=e._y,r=e._z,a=e._w,s=t._x,o=t._y,l=t._z,u=t._w;return this._x=n*u+a*s+i*l-r*o,this._y=i*u+a*o+r*s-n*l,this._z=r*u+a*l+n*o-i*s,this._w=a*u-n*s-i*o-r*l,this._onChangeCallback(),this}slerp(e,t){if(0===t)return this;if(1===t)return this.copy(e);let n=this._x,i=this._y,r=this._z,a=this._w,s=a*e._w+n*e._x+i*e._y+r*e._z;if(s<0?(this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,s=-s):this.copy(e),s>=1)return this._w=a,this._x=n,this._y=i,this._z=r,this;let o=1-s*s;if(o<=Number.EPSILON){let e=1-t;return this._w=e*a+t*this._w,this._x=e*n+t*this._x,this._y=e*i+t*this._y,this._z=e*r+t*this._z,this.normalize(),this}let l=Math.sqrt(o),u=Math.atan2(l,s),c=Math.sin((1-t)*u)/l,h=Math.sin(t*u)/l;return this._w=a*c+this._w*h,this._x=n*c+this._x*h,this._y=i*c+this._y*h,this._z=r*c+this._z*h,this._onChangeCallback(),this}slerpQuaternions(e,t,n){return this.copy(e).slerp(t,n)}random(){let e=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),n=Math.random(),i=Math.sqrt(1-n),r=Math.sqrt(n);return this.set(i*Math.sin(e),i*Math.cos(e),r*Math.sin(t),r*Math.cos(t))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class eE{constructor(e=0,t=0,n=0){eE.prototype.isVector3=!0,this.x=e,this.y=t,this.z=n}set(e,t,n){return void 0===n&&(n=this.z),this.x=e,this.y=t,this.z=n,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(eC.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(eC.setFromAxisAngle(e,t))}applyMatrix3(e){let t=this.x,n=this.y,i=this.z,r=e.elements;return this.x=r[0]*t+r[3]*n+r[6]*i,this.y=r[1]*t+r[4]*n+r[7]*i,this.z=r[2]*t+r[5]*n+r[8]*i,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){let t=this.x,n=this.y,i=this.z,r=e.elements,a=1/(r[3]*t+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*t+r[4]*n+r[8]*i+r[12])*a,this.y=(r[1]*t+r[5]*n+r[9]*i+r[13])*a,this.z=(r[2]*t+r[6]*n+r[10]*i+r[14])*a,this}applyQuaternion(e){let t=this.x,n=this.y,i=this.z,r=e.x,a=e.y,s=e.z,o=e.w,l=2*(a*i-s*n),u=2*(s*t-r*i),c=2*(r*n-a*t);return this.x=t+o*l+a*c-s*u,this.y=n+o*u+s*l-r*c,this.z=i+o*c+r*u-a*l,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){let t=this.x,n=this.y,i=this.z,r=e.elements;return this.x=r[0]*t+r[4]*n+r[8]*i,this.y=r[1]*t+r[5]*n+r[9]*i,this.z=r[2]*t+r[6]*n+r[10]*i,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=V(this.x,e.x,t.x),this.y=V(this.y,e.y,t.y),this.z=V(this.z,e.z,t.z),this}clampScalar(e,t){return this.x=V(this.x,e,t),this.y=V(this.y,e,t),this.z=V(this.z,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(V(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){let n=e.x,i=e.y,r=e.z,a=t.x,s=t.y,o=t.z;return this.x=i*o-r*s,this.y=r*a-n*o,this.z=n*s-i*a,this}projectOnVector(e){let t=e.lengthSq();if(0===t)return this.set(0,0,0);let n=e.dot(this)/t;return this.copy(e).multiplyScalar(n)}projectOnPlane(e){return eA.copy(this).projectOnVector(e),this.sub(eA)}reflect(e){return this.sub(eA.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());return 0===t?Math.PI/2:Math.acos(V(this.dot(e)/t,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y,i=this.z-e.z;return t*t+n*n+i*i}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,n){let i=Math.sin(t)*e;return this.x=i*Math.sin(n),this.y=Math.cos(t)*e,this.z=i*Math.cos(n),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,n){return this.x=e*Math.sin(t),this.y=n,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){let t=this.setFromMatrixColumn(e,0).length(),n=this.setFromMatrixColumn(e,1).length(),i=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=n,this.z=i,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,4*t)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,3*t)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){let e=Math.random()*Math.PI*2,t=2*Math.random()-1,n=Math.sqrt(1-t*t);return this.x=n*Math.cos(e),this.y=t,this.z=n*Math.sin(e),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}let eA=new eE,eC=new ew;class eR{constructor(e=new eE(Infinity,Infinity,Infinity),t=new eE(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){this.makeEmpty();for(let t=0,n=e.length;t=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y&&e.z>=this.min.z&&e.z<=this.max.z}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y&&e.max.z>=this.min.z&&e.min.z<=this.max.z}intersectsSphere(e){return this.clampPoint(e.center,eI),eI.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,n;return e.normal.x>0?(t=e.normal.x*this.min.x,n=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,n=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,n+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,n+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,n+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,n+=e.normal.z*this.min.z),t<=-e.constant&&n>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(eB),ek.subVectors(this.max,eB),eN.subVectors(e.a,eB),eU.subVectors(e.b,eB),eD.subVectors(e.c,eB),eO.subVectors(eU,eN),eF.subVectors(eD,eU),ez.subVectors(eN,eD);let t=[0,-eO.z,eO.y,0,-eF.z,eF.y,0,-ez.z,ez.y,eO.z,0,-eO.x,eF.z,0,-eF.x,ez.z,0,-ez.x,-eO.y,eO.x,0,-eF.y,eF.x,0,-ez.y,ez.x,0];return!!eG(t,eN,eU,eD,ek)&&!!eG(t=[1,0,0,0,1,0,0,0,1],eN,eU,eD,ek)&&(eH.crossVectors(eO,eF),eG(t=[eH.x,eH.y,eH.z],eN,eU,eD,ek))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,eI).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=.5*this.getSize(eI).length()),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()||(eP[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),eP[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),eP[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),eP[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),eP[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),eP[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),eP[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),eP[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(eP)),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}}let eP=[new eE,new eE,new eE,new eE,new eE,new eE,new eE,new eE],eI=new eE,eL=new eR,eN=new eE,eU=new eE,eD=new eE,eO=new eE,eF=new eE,ez=new eE,eB=new eE,ek=new eE,eH=new eE,eV=new eE;function eG(e,t,n,i,r){for(let a=0,s=e.length-3;a<=s;a+=3){eV.fromArray(e,a);let s=r.x*Math.abs(eV.x)+r.y*Math.abs(eV.y)+r.z*Math.abs(eV.z),o=t.dot(eV),l=n.dot(eV),u=i.dot(eV);if(Math.max(-Math.max(o,l,u),Math.min(o,l,u))>s)return!1}return!0}let eW=new eR,ej=new eE,eX=new eE;class eq{constructor(e=new eE,t=-1){this.isSphere=!0,this.center=e,this.radius=t}set(e,t){return this.center.copy(e),this.radius=t,this}setFromPoints(e,t){let n=this.center;void 0!==t?n.copy(t):eW.setFromPoints(e).getCenter(n);let i=0;for(let t=0,r=e.length;tthis.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?e.makeEmpty():(e.set(this.center,this.center),e.expandByScalar(this.radius)),e}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius=this.radius*e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;ej.subVectors(e,this.center);let t=ej.lengthSq();if(t>this.radius*this.radius){let e=Math.sqrt(t),n=(e-this.radius)*.5;this.center.addScaledVector(ej,n/e),this.radius+=n}return this}union(e){return e.isEmpty()||(this.isEmpty()?this.copy(e):!0===this.center.equals(e.center)?this.radius=Math.max(this.radius,e.radius):(eX.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(ej.copy(e.center).add(eX)),this.expandByPoint(ej.copy(e.center).sub(eX)))),this}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return new this.constructor().copy(this)}}let eY=new eE,eZ=new eE,eJ=new eE,eK=new eE,e$=new eE,eQ=new eE,e0=new eE;class e1{constructor(e=new eE,t=new eE(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.origin).addScaledVector(this.direction,e)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,eY)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);let n=t.dot(this.direction);return n<0?t.copy(this.origin):t.copy(this.origin).addScaledVector(this.direction,n)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){let t=eY.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(eY.copy(this.origin).addScaledVector(this.direction,t),eY.distanceToSquared(e))}distanceSqToSegment(e,t,n,i){let r,a,s,o;eZ.copy(e).add(t).multiplyScalar(.5),eJ.copy(t).sub(e).normalize(),eK.copy(this.origin).sub(eZ);let l=.5*e.distanceTo(t),u=-this.direction.dot(eJ),c=eK.dot(this.direction),h=-eK.dot(eJ),d=eK.lengthSq(),p=Math.abs(1-u*u);if(p>0)if(r=u*h-c,a=u*c-h,o=l*p,r>=0)if(a>=-o)if(a<=o){let e=1/p;r*=e,a*=e,s=r*(r+u*a+2*c)+a*(u*r+a+2*h)+d}else s=-(r=Math.max(0,-(u*(a=l)+c)))*r+a*(a+2*h)+d;else s=-(r=Math.max(0,-(u*(a=-l)+c)))*r+a*(a+2*h)+d;else a<=-o?(a=(r=Math.max(0,-(-u*l+c)))>0?-l:Math.min(Math.max(-l,-h),l),s=-r*r+a*(a+2*h)+d):a<=o?(r=0,s=(a=Math.min(Math.max(-l,-h),l))*(a+2*h)+d):(a=(r=Math.max(0,-(u*l+c)))>0?l:Math.min(Math.max(-l,-h),l),s=-r*r+a*(a+2*h)+d);else a=u>0?-l:l,s=-(r=Math.max(0,-(u*a+c)))*r+a*(a+2*h)+d;return n&&n.copy(this.origin).addScaledVector(this.direction,r),i&&i.copy(eZ).addScaledVector(eJ,a),s}intersectSphere(e,t){eY.subVectors(e.center,this.origin);let n=eY.dot(this.direction),i=eY.dot(eY)-n*n,r=e.radius*e.radius;if(i>r)return null;let a=Math.sqrt(r-i),s=n-a,o=n+a;return o<0?null:s<0?this.at(o,t):this.at(s,t)}intersectsSphere(e){return this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){let t=e.normal.dot(this.direction);if(0===t)return 0===e.distanceToPoint(this.origin)?0:null;let n=-(this.origin.dot(e.normal)+e.constant)/t;return n>=0?n:null}intersectPlane(e,t){let n=this.distanceToPlane(e);return null===n?null:this.at(n,t)}intersectsPlane(e){let t=e.distanceToPoint(this.origin);return!!(0===t||e.normal.dot(this.direction)*t<0)}intersectBox(e,t){let n,i,r,a,s,o,l=1/this.direction.x,u=1/this.direction.y,c=1/this.direction.z,h=this.origin;return(l>=0?(n=(e.min.x-h.x)*l,i=(e.max.x-h.x)*l):(n=(e.max.x-h.x)*l,i=(e.min.x-h.x)*l),u>=0?(r=(e.min.y-h.y)*u,a=(e.max.y-h.y)*u):(r=(e.max.y-h.y)*u,a=(e.min.y-h.y)*u),n>a||r>i||((r>n||isNaN(n))&&(n=r),(a=0?(s=(e.min.z-h.z)*c,o=(e.max.z-h.z)*c):(s=(e.max.z-h.z)*c,o=(e.min.z-h.z)*c),n>o||s>i||((s>n||n!=n)&&(n=s),(o=0?n:i,t)}intersectsBox(e){return null!==this.intersectBox(e,eY)}intersectTriangle(e,t,n,i,r){let a;e$.subVectors(t,e),eQ.subVectors(n,e),e0.crossVectors(e$,eQ);let s=this.direction.dot(e0);if(s>0){if(i)return null;a=1}else{if(!(s<0))return null;a=-1,s=-s}eK.subVectors(this.origin,e);let o=a*this.direction.dot(eQ.crossVectors(eK,eQ));if(o<0)return null;let l=a*this.direction.dot(e$.cross(eK));if(l<0||o+l>s)return null;let u=-a*eK.dot(e0);return u<0?null:this.at(u/s,r)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}}class e2{constructor(e,t,n,i,r,a,s,o,l,u,c,h,d,p,f,m){e2.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],void 0!==e&&this.set(e,t,n,i,r,a,s,o,l,u,c,h,d,p,f,m)}set(e,t,n,i,r,a,s,o,l,u,c,h,d,p,f,m){let g=this.elements;return g[0]=e,g[4]=t,g[8]=n,g[12]=i,g[1]=r,g[5]=a,g[9]=s,g[13]=o,g[2]=l,g[6]=u,g[10]=c,g[14]=h,g[3]=d,g[7]=p,g[11]=f,g[15]=m,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new e2().fromArray(this.elements)}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t[9]=n[9],t[10]=n[10],t[11]=n[11],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15],this}copyPosition(e){let t=this.elements,n=e.elements;return t[12]=n[12],t[13]=n[13],t[14]=n[14],this}setFromMatrix3(e){let t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,n){return e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(e,t,n){return this.set(e.x,t.x,n.x,0,e.y,t.y,n.y,0,e.z,t.z,n.z,0,0,0,0,1),this}extractRotation(e){let t=this.elements,n=e.elements,i=1/e3.setFromMatrixColumn(e,0).length(),r=1/e3.setFromMatrixColumn(e,1).length(),a=1/e3.setFromMatrixColumn(e,2).length();return t[0]=n[0]*i,t[1]=n[1]*i,t[2]=n[2]*i,t[3]=0,t[4]=n[4]*r,t[5]=n[5]*r,t[6]=n[6]*r,t[7]=0,t[8]=n[8]*a,t[9]=n[9]*a,t[10]=n[10]*a,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){let t=this.elements,n=e.x,i=e.y,r=e.z,a=Math.cos(n),s=Math.sin(n),o=Math.cos(i),l=Math.sin(i),u=Math.cos(r),c=Math.sin(r);if("XYZ"===e.order){let e=a*u,n=a*c,i=s*u,r=s*c;t[0]=o*u,t[4]=-o*c,t[8]=l,t[1]=n+i*l,t[5]=e-r*l,t[9]=-s*o,t[2]=r-e*l,t[6]=i+n*l,t[10]=a*o}else if("YXZ"===e.order){let e=o*u,n=o*c,i=l*u,r=l*c;t[0]=e+r*s,t[4]=i*s-n,t[8]=a*l,t[1]=a*c,t[5]=a*u,t[9]=-s,t[2]=n*s-i,t[6]=r+e*s,t[10]=a*o}else if("ZXY"===e.order){let e=o*u,n=o*c,i=l*u,r=l*c;t[0]=e-r*s,t[4]=-a*c,t[8]=i+n*s,t[1]=n+i*s,t[5]=a*u,t[9]=r-e*s,t[2]=-a*l,t[6]=s,t[10]=a*o}else if("ZYX"===e.order){let e=a*u,n=a*c,i=s*u,r=s*c;t[0]=o*u,t[4]=i*l-n,t[8]=e*l+r,t[1]=o*c,t[5]=r*l+e,t[9]=n*l-i,t[2]=-l,t[6]=s*o,t[10]=a*o}else if("YZX"===e.order){let e=a*o,n=a*l,i=s*o,r=s*l;t[0]=o*u,t[4]=r-e*c,t[8]=i*c+n,t[1]=c,t[5]=a*u,t[9]=-s*u,t[2]=-l*u,t[6]=n*c+i,t[10]=e-r*c}else if("XZY"===e.order){let e=a*o,n=a*l,i=s*o,r=s*l;t[0]=o*u,t[4]=-c,t[8]=l*u,t[1]=e*c+r,t[5]=a*u,t[9]=n*c-i,t[2]=i*c-n,t[6]=s*u,t[10]=r*c+e}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose(e5,e,e6)}lookAt(e,t,n){let i=this.elements;return e7.subVectors(e,t),0===e7.lengthSq()&&(e7.z=1),e7.normalize(),e8.crossVectors(n,e7),0===e8.lengthSq()&&(1===Math.abs(n.z)?e7.x+=1e-4:e7.z+=1e-4,e7.normalize(),e8.crossVectors(n,e7)),e8.normalize(),e9.crossVectors(e7,e8),i[0]=e8.x,i[4]=e9.x,i[8]=e7.x,i[1]=e8.y,i[5]=e9.y,i[9]=e7.y,i[2]=e8.z,i[6]=e9.z,i[10]=e7.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,i=t.elements,r=this.elements,a=n[0],s=n[4],o=n[8],l=n[12],u=n[1],c=n[5],h=n[9],d=n[13],p=n[2],f=n[6],m=n[10],g=n[14],v=n[3],_=n[7],y=n[11],x=n[15],b=i[0],S=i[4],M=i[8],T=i[12],w=i[1],E=i[5],A=i[9],C=i[13],R=i[2],P=i[6],I=i[10],L=i[14],N=i[3],U=i[7],D=i[11],O=i[15];return r[0]=a*b+s*w+o*R+l*N,r[4]=a*S+s*E+o*P+l*U,r[8]=a*M+s*A+o*I+l*D,r[12]=a*T+s*C+o*L+l*O,r[1]=u*b+c*w+h*R+d*N,r[5]=u*S+c*E+h*P+d*U,r[9]=u*M+c*A+h*I+d*D,r[13]=u*T+c*C+h*L+d*O,r[2]=p*b+f*w+m*R+g*N,r[6]=p*S+f*E+m*P+g*U,r[10]=p*M+f*A+m*I+g*D,r[14]=p*T+f*C+m*L+g*O,r[3]=v*b+_*w+y*R+x*N,r[7]=v*S+_*E+y*P+x*U,r[11]=v*M+_*A+y*I+x*D,r[15]=v*T+_*C+y*L+x*O,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[4],i=e[8],r=e[12],a=e[1],s=e[5],o=e[9],l=e[13],u=e[2],c=e[6],h=e[10],d=e[14];return e[3]*(r*o*c-i*l*c-r*s*h+n*l*h+i*s*d-n*o*d)+e[7]*(t*o*d-t*l*h+r*a*h-i*a*d+i*l*u-r*o*u)+e[11]*(t*l*c-t*s*d-r*a*c+n*a*d+r*s*u-n*l*u)+e[15]*(-i*s*u-t*o*c+t*s*h+i*a*c-n*a*h+n*o*u)}transpose(){let e,t=this.elements;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(e,t,n){let i=this.elements;return e.isVector3?(i[12]=e.x,i[13]=e.y,i[14]=e.z):(i[12]=e,i[13]=t,i[14]=n),this}invert(){let e=this.elements,t=e[0],n=e[1],i=e[2],r=e[3],a=e[4],s=e[5],o=e[6],l=e[7],u=e[8],c=e[9],h=e[10],d=e[11],p=e[12],f=e[13],m=e[14],g=e[15],v=c*m*l-f*h*l+f*o*d-s*m*d-c*o*g+s*h*g,_=p*h*l-u*m*l-p*o*d+a*m*d+u*o*g-a*h*g,y=u*f*l-p*c*l+p*s*d-a*f*d-u*s*g+a*c*g,x=p*c*o-u*f*o-p*s*h+a*f*h+u*s*m-a*c*m,b=t*v+n*_+i*y+r*x;if(0===b)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);let S=1/b;return e[0]=v*S,e[1]=(f*h*r-c*m*r-f*i*d+n*m*d+c*i*g-n*h*g)*S,e[2]=(s*m*r-f*o*r+f*i*l-n*m*l-s*i*g+n*o*g)*S,e[3]=(c*o*r-s*h*r-c*i*l+n*h*l+s*i*d-n*o*d)*S,e[4]=_*S,e[5]=(u*m*r-p*h*r+p*i*d-t*m*d-u*i*g+t*h*g)*S,e[6]=(p*o*r-a*m*r-p*i*l+t*m*l+a*i*g-t*o*g)*S,e[7]=(a*h*r-u*o*r+u*i*l-t*h*l-a*i*d+t*o*d)*S,e[8]=y*S,e[9]=(p*c*r-u*f*r-p*n*d+t*f*d+u*n*g-t*c*g)*S,e[10]=(a*f*r-p*s*r+p*n*l-t*f*l-a*n*g+t*s*g)*S,e[11]=(u*s*r-a*c*r-u*n*l+t*c*l+a*n*d-t*s*d)*S,e[12]=x*S,e[13]=(u*f*i-p*c*i+p*n*h-t*f*h-u*n*m+t*c*m)*S,e[14]=(p*s*i-a*f*i-p*n*o+t*f*o+a*n*m-t*s*m)*S,e[15]=(a*c*i-u*s*i+u*n*o-t*c*o-a*n*h+t*s*h)*S,this}scale(e){let t=this.elements,n=e.x,i=e.y,r=e.z;return t[0]*=n,t[4]*=i,t[8]*=r,t[1]*=n,t[5]*=i,t[9]*=r,t[2]*=n,t[6]*=i,t[10]*=r,t[3]*=n,t[7]*=i,t[11]*=r,this}getMaxScaleOnAxis(){let e=this.elements;return Math.sqrt(Math.max(e[0]*e[0]+e[1]*e[1]+e[2]*e[2],e[4]*e[4]+e[5]*e[5]+e[6]*e[6],e[8]*e[8]+e[9]*e[9]+e[10]*e[10]))}makeTranslation(e,t,n){return e.isVector3?this.set(1,0,0,e.x,0,1,0,e.y,0,0,1,e.z,0,0,0,1):this.set(1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1),this}makeRotationX(e){let t=Math.cos(e),n=Math.sin(e);return this.set(1,0,0,0,0,t,-n,0,0,n,t,0,0,0,0,1),this}makeRotationY(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,0,n,0,0,1,0,0,-n,0,t,0,0,0,0,1),this}makeRotationZ(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,0,n,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){let n=Math.cos(t),i=Math.sin(t),r=1-n,a=e.x,s=e.y,o=e.z,l=r*a,u=r*s;return this.set(l*a+n,l*s-i*o,l*o+i*s,0,l*s+i*o,u*s+n,u*o-i*a,0,l*o-i*s,u*o+i*a,r*o*o+n,0,0,0,0,1),this}makeScale(e,t,n){return this.set(e,0,0,0,0,t,0,0,0,0,n,0,0,0,0,1),this}makeShear(e,t,n,i,r,a){return this.set(1,n,r,0,e,1,a,0,t,i,1,0,0,0,0,1),this}compose(e,t,n){let i=this.elements,r=t._x,a=t._y,s=t._z,o=t._w,l=r+r,u=a+a,c=s+s,h=r*l,d=r*u,p=r*c,f=a*u,m=a*c,g=s*c,v=o*l,_=o*u,y=o*c,x=n.x,b=n.y,S=n.z;return i[0]=(1-(f+g))*x,i[1]=(d+y)*x,i[2]=(p-_)*x,i[3]=0,i[4]=(d-y)*b,i[5]=(1-(h+g))*b,i[6]=(m+v)*b,i[7]=0,i[8]=(p+_)*S,i[9]=(m-v)*S,i[10]=(1-(h+f))*S,i[11]=0,i[12]=e.x,i[13]=e.y,i[14]=e.z,i[15]=1,this}decompose(e,t,n){let i=this.elements,r=e3.set(i[0],i[1],i[2]).length(),a=e3.set(i[4],i[5],i[6]).length(),s=e3.set(i[8],i[9],i[10]).length();0>this.determinant()&&(r=-r),e.x=i[12],e.y=i[13],e.z=i[14],e4.copy(this);let o=1/r,l=1/a,u=1/s;return e4.elements[0]*=o,e4.elements[1]*=o,e4.elements[2]*=o,e4.elements[4]*=l,e4.elements[5]*=l,e4.elements[6]*=l,e4.elements[8]*=u,e4.elements[9]*=u,e4.elements[10]*=u,t.setFromRotationMatrix(e4),n.x=r,n.y=a,n.z=s,this}makePerspective(e,t,n,i,r,a,s=2e3){let o,l,u=this.elements;if(2e3===s)o=-(a+r)/(a-r),l=-2*a*r/(a-r);else if(2001===s)o=-a/(a-r),l=-a*r/(a-r);else throw Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+s);return u[0]=2*r/(t-e),u[4]=0,u[8]=(t+e)/(t-e),u[12]=0,u[1]=0,u[5]=2*r/(n-i),u[9]=(n+i)/(n-i),u[13]=0,u[2]=0,u[6]=0,u[10]=o,u[14]=l,u[3]=0,u[7]=0,u[11]=-1,u[15]=0,this}makeOrthographic(e,t,n,i,r,a,s=2e3){let o,l,u=this.elements,c=1/(t-e),h=1/(n-i),d=1/(a-r);if(2e3===s)o=(a+r)*d,l=-2*d;else if(2001===s)o=r*d,l=-1*d;else throw Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+s);return u[0]=2*c,u[4]=0,u[8]=0,u[12]=-((t+e)*c),u[1]=0,u[5]=2*h,u[9]=0,u[13]=-((n+i)*h),u[2]=0,u[6]=0,u[10]=l,u[14]=-o,u[3]=0,u[7]=0,u[11]=0,u[15]=1,this}equals(e){let t=this.elements,n=e.elements;for(let e=0;e<16;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<16;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e[t+9]=n[9],e[t+10]=n[10],e[t+11]=n[11],e[t+12]=n[12],e[t+13]=n[13],e[t+14]=n[14],e[t+15]=n[15],e}}let e3=new eE,e4=new e2,e5=new eE(0,0,0),e6=new eE(1,1,1),e8=new eE,e9=new eE,e7=new eE,te=new e2,tt=new ew;class tn{constructor(e=0,t=0,n=0,i=tn.DEFAULT_ORDER){this.isEuler=!0,this._x=e,this._y=t,this._z=n,this._order=i}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,t,n,i=this._order){return this._x=e,this._y=t,this._z=n,this._order=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,t=this._order,n=!0){let i=e.elements,r=i[0],a=i[4],s=i[8],o=i[1],l=i[5],u=i[9],c=i[2],h=i[6],d=i[10];switch(t){case"XYZ":this._y=Math.asin(V(s,-1,1)),.9999999>Math.abs(s)?(this._x=Math.atan2(-u,d),this._z=Math.atan2(-a,r)):(this._x=Math.atan2(h,l),this._z=0);break;case"YXZ":this._x=Math.asin(-V(u,-1,1)),.9999999>Math.abs(u)?(this._y=Math.atan2(s,d),this._z=Math.atan2(o,l)):(this._y=Math.atan2(-c,r),this._z=0);break;case"ZXY":this._x=Math.asin(V(h,-1,1)),.9999999>Math.abs(h)?(this._y=Math.atan2(-c,d),this._z=Math.atan2(-a,l)):(this._y=0,this._z=Math.atan2(o,r));break;case"ZYX":this._y=Math.asin(-V(c,-1,1)),.9999999>Math.abs(c)?(this._x=Math.atan2(h,d),this._z=Math.atan2(o,r)):(this._x=0,this._z=Math.atan2(-a,l));break;case"YZX":this._z=Math.asin(V(o,-1,1)),.9999999>Math.abs(o)?(this._x=Math.atan2(-u,l),this._y=Math.atan2(-c,r)):(this._x=0,this._y=Math.atan2(s,d));break;case"XZY":this._z=Math.asin(-V(a,-1,1)),.9999999>Math.abs(a)?(this._x=Math.atan2(h,l),this._y=Math.atan2(s,r)):(this._x=Math.atan2(-u,d),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+t)}return this._order=t,!0===n&&this._onChangeCallback(),this}setFromQuaternion(e,t,n){return te.makeRotationFromQuaternion(e),this.setFromRotationMatrix(te,t,n)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return tt.setFromEuler(this),this.setFromQuaternion(tt,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],void 0!==e[3]&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}tn.DEFAULT_ORDER="XYZ";class ti{constructor(){this.mask=1}set(e){this.mask=1<>>0}enable(e){this.mask|=1<1){for(let e=0;e1){for(let e=0;e0&&(i.userData=this.userData),i.layers=this.layers.mask,i.matrix=this.matrix.toArray(),i.up=this.up.toArray(),!1===this.matrixAutoUpdate&&(i.matrixAutoUpdate=!1),this.isInstancedMesh&&(i.type="InstancedMesh",i.count=this.count,i.instanceMatrix=this.instanceMatrix.toJSON(),null!==this.instanceColor&&(i.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(i.type="BatchedMesh",i.perObjectFrustumCulled=this.perObjectFrustumCulled,i.sortObjects=this.sortObjects,i.drawRanges=this._drawRanges,i.reservedRanges=this._reservedRanges,i.visibility=this._visibility,i.active=this._active,i.bounds=this._bounds.map(e=>({boxInitialized:e.boxInitialized,boxMin:e.box.min.toArray(),boxMax:e.box.max.toArray(),sphereInitialized:e.sphereInitialized,sphereRadius:e.sphere.radius,sphereCenter:e.sphere.center.toArray()})),i.maxInstanceCount=this._maxInstanceCount,i.maxVertexCount=this._maxVertexCount,i.maxIndexCount=this._maxIndexCount,i.geometryInitialized=this._geometryInitialized,i.geometryCount=this._geometryCount,i.matricesTexture=this._matricesTexture.toJSON(e),null!==this._colorsTexture&&(i.colorsTexture=this._colorsTexture.toJSON(e)),null!==this.boundingSphere&&(i.boundingSphere={center:i.boundingSphere.center.toArray(),radius:i.boundingSphere.radius}),null!==this.boundingBox&&(i.boundingBox={min:i.boundingBox.min.toArray(),max:i.boundingBox.max.toArray()})),this.isScene)this.background&&(this.background.isColor?i.background=this.background.toJSON():this.background.isTexture&&(i.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&!0!==this.environment.isRenderTargetTexture&&(i.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){i.geometry=r(e.geometries,this.geometry);let t=this.geometry.parameters;if(void 0!==t&&void 0!==t.shapes){let n=t.shapes;if(Array.isArray(n))for(let t=0,i=n.length;t0){i.children=[];for(let t=0;t0){i.animations=[];for(let t=0;t0&&(n.geometries=t),i.length>0&&(n.materials=i),r.length>0&&(n.textures=r),s.length>0&&(n.images=s),o.length>0&&(n.shapes=o),l.length>0&&(n.skeletons=l),u.length>0&&(n.animations=u),c.length>0&&(n.nodes=c)}return n.object=i,n;function a(e){let t=[];for(let n in e){let i=e[n];delete i.metadata,t.push(i)}return t}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),!0===t)for(let t=0;t0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)}static getBarycoord(e,t,n,i,r){tx.subVectors(i,t),tb.subVectors(n,t),tS.subVectors(e,t);let a=tx.dot(tx),s=tx.dot(tb),o=tx.dot(tS),l=tb.dot(tb),u=tb.dot(tS),c=a*l-s*s;if(0===c)return r.set(0,0,0),null;let h=1/c,d=(l*o-s*u)*h,p=(a*u-s*o)*h;return r.set(1-d-p,p,d)}static containsPoint(e,t,n,i){return null!==this.getBarycoord(e,t,n,i,tM)&&tM.x>=0&&tM.y>=0&&tM.x+tM.y<=1}static getInterpolation(e,t,n,i,r,a,s,o){return null===this.getBarycoord(e,t,n,i,tM)?(o.x=0,o.y=0,"z"in o&&(o.z=0),"w"in o&&(o.w=0),null):(o.setScalar(0),o.addScaledVector(r,tM.x),o.addScaledVector(a,tM.y),o.addScaledVector(s,tM.z),o)}static getInterpolatedAttribute(e,t,n,i,r,a){return tP.setScalar(0),tI.setScalar(0),tL.setScalar(0),tP.fromBufferAttribute(e,t),tI.fromBufferAttribute(e,n),tL.fromBufferAttribute(e,i),a.setScalar(0),a.addScaledVector(tP,r.x),a.addScaledVector(tI,r.y),a.addScaledVector(tL,r.z),a}static isFrontFacing(e,t,n,i){return tx.subVectors(n,t),tb.subVectors(e,t),0>tx.cross(tb).dot(i)}set(e,t,n){return this.a.copy(e),this.b.copy(t),this.c.copy(n),this}setFromPointsAndIndices(e,t,n,i){return this.a.copy(e[t]),this.b.copy(e[n]),this.c.copy(e[i]),this}setFromAttributeAndIndices(e,t,n,i){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,n),this.c.fromBufferAttribute(e,i),this}clone(){return new this.constructor().copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return tx.subVectors(this.c,this.b),tb.subVectors(this.a,this.b),.5*tx.cross(tb).length()}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(e){return tN.getNormal(this.a,this.b,this.c,e)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(e,t){return tN.getBarycoord(e,this.a,this.b,this.c,t)}getInterpolation(e,t,n,i,r){return tN.getInterpolation(e,this.a,this.b,this.c,t,n,i,r)}containsPoint(e){return tN.containsPoint(e,this.a,this.b,this.c)}isFrontFacing(e){return tN.isFrontFacing(this.a,this.b,this.c,e)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){let n,i,r=this.a,a=this.b,s=this.c;tT.subVectors(a,r),tw.subVectors(s,r),tA.subVectors(e,r);let o=tT.dot(tA),l=tw.dot(tA);if(o<=0&&l<=0)return t.copy(r);tC.subVectors(e,a);let u=tT.dot(tC),c=tw.dot(tC);if(u>=0&&c<=u)return t.copy(a);let h=o*c-u*l;if(h<=0&&o>=0&&u<=0)return n=o/(o-u),t.copy(r).addScaledVector(tT,n);tR.subVectors(e,s);let d=tT.dot(tR),p=tw.dot(tR);if(p>=0&&d<=p)return t.copy(s);let f=d*l-o*p;if(f<=0&&l>=0&&p<=0)return i=l/(l-p),t.copy(r).addScaledVector(tw,i);let m=u*p-d*c;if(m<=0&&c-u>=0&&d-p>=0)return tE.subVectors(s,a),i=(c-u)/(c-u+(d-p)),t.copy(a).addScaledVector(tE,i);let g=1/(m+f+h);return n=f*g,i=h*g,t.copy(r).addScaledVector(tT,n).addScaledVector(tw,i)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}}let tU={aliceblue:0xf0f8ff,antiquewhite:0xfaebd7,aqua:65535,aquamarine:8388564,azure:0xf0ffff,beige:0xf5f5dc,bisque:0xffe4c4,black:0,blanchedalmond:0xffebcd,blue:255,blueviolet:9055202,brown:0xa52a2a,burlywood:0xdeb887,cadetblue:6266528,chartreuse:8388352,chocolate:0xd2691e,coral:0xff7f50,cornflowerblue:6591981,cornsilk:0xfff8dc,crimson:0xdc143c,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:0xb8860b,darkgray:0xa9a9a9,darkgreen:25600,darkgrey:0xa9a9a9,darkkhaki:0xbdb76b,darkmagenta:9109643,darkolivegreen:5597999,darkorange:0xff8c00,darkorchid:0x9932cc,darkred:9109504,darksalmon:0xe9967a,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:0xff1493,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:0xb22222,floralwhite:0xfffaf0,forestgreen:2263842,fuchsia:0xff00ff,gainsboro:0xdcdcdc,ghostwhite:0xf8f8ff,gold:0xffd700,goldenrod:0xdaa520,gray:8421504,green:32768,greenyellow:0xadff2f,grey:8421504,honeydew:0xf0fff0,hotpink:0xff69b4,indianred:0xcd5c5c,indigo:4915330,ivory:0xfffff0,khaki:0xf0e68c,lavender:0xe6e6fa,lavenderblush:0xfff0f5,lawngreen:8190976,lemonchiffon:0xfffacd,lightblue:0xadd8e6,lightcoral:0xf08080,lightcyan:0xe0ffff,lightgoldenrodyellow:0xfafad2,lightgray:0xd3d3d3,lightgreen:9498256,lightgrey:0xd3d3d3,lightpink:0xffb6c1,lightsalmon:0xffa07a,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:0xb0c4de,lightyellow:0xffffe0,lime:65280,limegreen:3329330,linen:0xfaf0e6,magenta:0xff00ff,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:0xba55d3,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:0xc71585,midnightblue:1644912,mintcream:0xf5fffa,mistyrose:0xffe4e1,moccasin:0xffe4b5,navajowhite:0xffdead,navy:128,oldlace:0xfdf5e6,olive:8421376,olivedrab:7048739,orange:0xffa500,orangered:0xff4500,orchid:0xda70d6,palegoldenrod:0xeee8aa,palegreen:0x98fb98,paleturquoise:0xafeeee,palevioletred:0xdb7093,papayawhip:0xffefd5,peachpuff:0xffdab9,peru:0xcd853f,pink:0xffc0cb,plum:0xdda0dd,powderblue:0xb0e0e6,purple:8388736,rebeccapurple:6697881,red:0xff0000,rosybrown:0xbc8f8f,royalblue:4286945,saddlebrown:9127187,salmon:0xfa8072,sandybrown:0xf4a460,seagreen:3050327,seashell:0xfff5ee,sienna:0xa0522d,silver:0xc0c0c0,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:0xfffafa,springgreen:65407,steelblue:4620980,tan:0xd2b48c,teal:32896,thistle:0xd8bfd8,tomato:0xff6347,turquoise:4251856,violet:0xee82ee,wheat:0xf5deb3,white:0xffffff,whitesmoke:0xf5f5f5,yellow:0xffff00,yellowgreen:0x9acd32},tD={h:0,s:0,l:0},tO={h:0,s:0,l:0};function tF(e,t,n){return(n<0&&(n+=1),n>1&&(n-=1),n<1/6)?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*6*(2/3-n):e}class tz{constructor(e,t,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,t,n)}set(e,t,n){return void 0===t&&void 0===n?e&&e.isColor?this.copy(e):"number"==typeof e?this.setHex(e):"string"==typeof e&&this.setStyle(e):this.setRGB(e,t,n),this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=I){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(255&e)/255,eu.toWorkingColorSpace(this,t),this}setRGB(e,t,n,i=eu.workingColorSpace){return this.r=e,this.g=t,this.b=n,eu.toWorkingColorSpace(this,i),this}setHSL(e,t,n,i=eu.workingColorSpace){if(e=G(e,1),t=V(t,0,1),n=V(n,0,1),0===t)this.r=this.g=this.b=n;else{let i=n<=.5?n*(1+t):n+t-n*t,r=2*n-i;this.r=tF(r,i,e+1/3),this.g=tF(r,i,e),this.b=tF(r,i,e-1/3)}return eu.toWorkingColorSpace(this,i),this}setStyle(e,t=I){let n;function i(t){void 0!==t&&1>parseFloat(t)&&console.warn("THREE.Color: Alpha component of "+e+" will be ignored.")}if(n=/^(\w+)\(([^\)]*)\)/.exec(e)){let r,a=n[1],s=n[2];switch(a){case"rgb":case"rgba":if(r=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(s))return i(r[4]),this.setRGB(Math.min(255,parseInt(r[1],10))/255,Math.min(255,parseInt(r[2],10))/255,Math.min(255,parseInt(r[3],10))/255,t);if(r=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(s))return i(r[4]),this.setRGB(Math.min(100,parseInt(r[1],10))/100,Math.min(100,parseInt(r[2],10))/100,Math.min(100,parseInt(r[3],10))/100,t);break;case"hsl":case"hsla":if(r=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(s))return i(r[4]),this.setHSL(parseFloat(r[1])/360,parseFloat(r[2])/100,parseFloat(r[3])/100,t);break;default:console.warn("THREE.Color: Unknown color model "+e)}}else if(n=/^\#([A-Fa-f\d]+)$/.exec(e)){let i=n[1],r=i.length;if(3===r)return this.setRGB(parseInt(i.charAt(0),16)/15,parseInt(i.charAt(1),16)/15,parseInt(i.charAt(2),16)/15,t);if(6===r)return this.setHex(parseInt(i,16),t);console.warn("THREE.Color: Invalid hex color "+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t=I){let n=tU[e.toLowerCase()];return void 0!==n?this.setHex(n,t):console.warn("THREE.Color: Unknown color "+e),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=ec(e.r),this.g=ec(e.g),this.b=ec(e.b),this}copyLinearToSRGB(e){return this.r=eh(e.r),this.g=eh(e.g),this.b=eh(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=I){return eu.fromWorkingColorSpace(tB.copy(this),e),65536*Math.round(V(255*tB.r,0,255))+256*Math.round(V(255*tB.g,0,255))+Math.round(V(255*tB.b,0,255))}getHexString(e=I){return("000000"+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=eu.workingColorSpace){let n,i;eu.fromWorkingColorSpace(tB.copy(this),t);let r=tB.r,a=tB.g,s=tB.b,o=Math.max(r,a,s),l=Math.min(r,a,s),u=(l+o)/2;if(l===o)n=0,i=0;else{let e=o-l;switch(i=u<=.5?e/(o+l):e/(2-o-l),o){case r:n=(a-s)/e+6*(a0!=e>0&&this.version++,this._alphaTest=e}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(void 0!==e)for(let t in e){let n=e[t];if(void 0===n){console.warn(`THREE.Material: parameter '${t}' has value of undefined.`);continue}let i=this[t];if(void 0===i){console.warn(`THREE.Material: '${t}' is not a property of THREE.${this.type}.`);continue}i&&i.isColor?i.set(n):i&&i.isVector3&&n&&n.isVector3?i.copy(n):this[t]=n}}toJSON(e){let t=void 0===e||"string"==typeof e;t&&(e={textures:{},images:{}});let n={metadata:{version:4.6,type:"Material",generator:"Material.toJSON"}};function i(e){let t=[];for(let n in e){let i=e[n];delete i.metadata,t.push(i)}return t}if(n.uuid=this.uuid,n.type=this.type,""!==this.name&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),void 0!==this.roughness&&(n.roughness=this.roughness),void 0!==this.metalness&&(n.metalness=this.metalness),void 0!==this.sheen&&(n.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(n.sheenColor=this.sheenColor.getHex()),void 0!==this.sheenRoughness&&(n.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),void 0!==this.emissiveIntensity&&1!==this.emissiveIntensity&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),void 0!==this.specularIntensity&&(n.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(n.specularColor=this.specularColor.getHex()),void 0!==this.shininess&&(n.shininess=this.shininess),void 0!==this.clearcoat&&(n.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),void 0!==this.dispersion&&(n.dispersion=this.dispersion),void 0!==this.iridescence&&(n.iridescence=this.iridescence),void 0!==this.iridescenceIOR&&(n.iridescenceIOR=this.iridescenceIOR),void 0!==this.iridescenceThicknessRange&&(n.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(n.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(n.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),void 0!==this.anisotropy&&(n.anisotropy=this.anisotropy),void 0!==this.anisotropyRotation&&(n.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(n.anisotropyMap=this.anisotropyMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(e).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(e).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(e).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(e).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(e).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(n.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(n.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(e).uuid,void 0!==this.combine&&(n.combine=this.combine)),void 0!==this.envMapRotation&&(n.envMapRotation=this.envMapRotation.toArray()),void 0!==this.envMapIntensity&&(n.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(n.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(e).uuid),void 0!==this.transmission&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(e).uuid),void 0!==this.thickness&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(e).uuid),void 0!==this.attenuationDistance&&this.attenuationDistance!==1/0&&(n.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationColor&&(n.attenuationColor=this.attenuationColor.getHex()),void 0!==this.size&&(n.size=this.size),null!==this.shadowSide&&(n.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(n.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(n.blending=this.blending),0!==this.side&&(n.side=this.side),!0===this.vertexColors&&(n.vertexColors=!0),this.opacity<1&&(n.opacity=this.opacity),!0===this.transparent&&(n.transparent=!0),204!==this.blendSrc&&(n.blendSrc=this.blendSrc),205!==this.blendDst&&(n.blendDst=this.blendDst),100!==this.blendEquation&&(n.blendEquation=this.blendEquation),null!==this.blendSrcAlpha&&(n.blendSrcAlpha=this.blendSrcAlpha),null!==this.blendDstAlpha&&(n.blendDstAlpha=this.blendDstAlpha),null!==this.blendEquationAlpha&&(n.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(n.blendColor=this.blendColor.getHex()),0!==this.blendAlpha&&(n.blendAlpha=this.blendAlpha),3!==this.depthFunc&&(n.depthFunc=this.depthFunc),!1===this.depthTest&&(n.depthTest=this.depthTest),!1===this.depthWrite&&(n.depthWrite=this.depthWrite),!1===this.colorWrite&&(n.colorWrite=this.colorWrite),255!==this.stencilWriteMask&&(n.stencilWriteMask=this.stencilWriteMask),519!==this.stencilFunc&&(n.stencilFunc=this.stencilFunc),0!==this.stencilRef&&(n.stencilRef=this.stencilRef),255!==this.stencilFuncMask&&(n.stencilFuncMask=this.stencilFuncMask),7680!==this.stencilFail&&(n.stencilFail=this.stencilFail),7680!==this.stencilZFail&&(n.stencilZFail=this.stencilZFail),7680!==this.stencilZPass&&(n.stencilZPass=this.stencilZPass),!0===this.stencilWrite&&(n.stencilWrite=this.stencilWrite),void 0!==this.rotation&&0!==this.rotation&&(n.rotation=this.rotation),!0===this.polygonOffset&&(n.polygonOffset=!0),0!==this.polygonOffsetFactor&&(n.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(n.polygonOffsetUnits=this.polygonOffsetUnits),void 0!==this.linewidth&&1!==this.linewidth&&(n.linewidth=this.linewidth),void 0!==this.dashSize&&(n.dashSize=this.dashSize),void 0!==this.gapSize&&(n.gapSize=this.gapSize),void 0!==this.scale&&(n.scale=this.scale),!0===this.dithering&&(n.dithering=!0),this.alphaTest>0&&(n.alphaTest=this.alphaTest),!0===this.alphaHash&&(n.alphaHash=!0),!0===this.alphaToCoverage&&(n.alphaToCoverage=!0),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=!0),!0===this.forceSinglePass&&(n.forceSinglePass=!0),!0===this.wireframe&&(n.wireframe=!0),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.flatShading&&(n.flatShading=!0),!1===this.visible&&(n.visible=!1),!1===this.toneMapped&&(n.toneMapped=!1),!1===this.fog&&(n.fog=!1),Object.keys(this.userData).length>0&&(n.userData=this.userData),t){let t=i(e.textures),r=i(e.images);t.length>0&&(n.textures=t),r.length>0&&(n.images=r)}return n}clone(){return new this.constructor().copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.blendColor.copy(e.blendColor),this.blendAlpha=e.blendAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;let t=e.clippingPlanes,n=null;if(null!==t){let e=t.length;n=Array(e);for(let i=0;i!==e;++i)n[i]=t[i].clone()}return this.clippingPlanes=n,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaHash=e.alphaHash,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(e){!0===e&&this.version++}onBuild(){console.warn("Material: onBuild() has been removed.")}}class tV extends tH{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new tz(0xffffff),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new tn,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}}let tG=function(){let e=new ArrayBuffer(4),t=new Float32Array(e),n=new Uint32Array(e),i=new Uint32Array(512),r=new Uint32Array(512);for(let e=0;e<256;++e){let t=e-127;t<-27?(i[e]=0,i[256|e]=32768,r[e]=24,r[256|e]=24):t<-14?(i[e]=1024>>-t-14,i[256|e]=1024>>-t-14|32768,r[e]=-t-1,r[256|e]=-t-1):t<=15?(i[e]=t+15<<10,i[256|e]=t+15<<10|32768,r[e]=13,r[256|e]=13):t<128?(i[e]=31744,i[256|e]=64512,r[e]=24,r[256|e]=24):(i[e]=31744,i[256|e]=64512,r[e]=13,r[256|e]=13)}let a=new Uint32Array(2048),s=new Uint32Array(64),o=new Uint32Array(64);for(let e=1;e<1024;++e){let t=e<<13,n=0;for(;(8388608&t)==0;)t<<=1,n-=8388608;t&=-8388609,n+=0x38800000,a[e]=t|n}for(let e=1024;e<2048;++e)a[e]=0x38000000+(e-1024<<13);for(let e=1;e<31;++e)s[e]=e<<23;s[31]=0x47800000,s[32]=0x80000000;for(let e=33;e<63;++e)s[e]=0x80000000+(e-32<<23);s[63]=0xc7800000;for(let e=1;e<64;++e)32!==e&&(o[e]=1024);return{floatView:t,uint32View:n,baseTable:i,shiftTable:r,mantissaTable:a,exponentTable:s,offsetTable:o}}();function tW(e){Math.abs(e)>65504&&console.warn("THREE.DataUtils.toHalfFloat(): Value out of range."),e=V(e,-65504,65504),tG.floatView[0]=e;let t=tG.uint32View[0],n=t>>23&511;return tG.baseTable[n]+((8388607&t)>>tG.shiftTable[n])}function tj(e){let t=e>>10;return tG.uint32View[0]=tG.mantissaTable[tG.offsetTable[t]+(1023&e)]+tG.exponentTable[t],tG.floatView[0]}let tX={toHalfFloat:tW,fromHalfFloat:tj},tq=new eE,tY=new Y;class tZ{constructor(e,t,n=!1){if(Array.isArray(e))throw TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,this.name="",this.array=e,this.itemSize=t,this.count=void 0!==e?e.length/t:0,this.normalized=n,this.usage=35044,this.updateRanges=[],this.gpuType=1015,this.version=0}onUploadCallback(){}set needsUpdate(e){!0===e&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this.gpuType=e.gpuType,this}copyAt(e,t,n){e*=this.itemSize,n*=t.itemSize;for(let i=0,r=this.itemSize;it.count&&console.warn("THREE.BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),t.needsUpdate=!0}return this}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new eR);let e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){console.error("THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new eE(-1/0,-1/0,-1/0),new eE(Infinity,Infinity,Infinity));return}if(void 0!==e){if(this.boundingBox.setFromBufferAttribute(e),t)for(let e=0,n=t.length;e0&&(e.userData=this.userData),void 0!==this.parameters){let t=this.parameters;for(let n in t)void 0!==t[n]&&(e[n]=t[n]);return e}e.data={attributes:{}};let t=this.index;null!==t&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});let n=this.attributes;for(let t in n){let i=n[t];e.data.attributes[t]=i.toJSON(e.data)}let i={},r=!1;for(let t in this.morphAttributes){let n=this.morphAttributes[t],a=[];for(let t=0,i=n.length;t0&&(i[t]=a,r=!0)}r&&(e.data.morphAttributes=i,e.data.morphTargetsRelative=this.morphTargetsRelative);let a=this.groups;a.length>0&&(e.data.groups=JSON.parse(JSON.stringify(a)));let s=this.boundingSphere;return null!==s&&(e.data.boundingSphere={center:s.center.toArray(),radius:s.radius}),e}clone(){return new this.constructor().copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;let t={};this.name=e.name;let n=e.index;null!==n&&this.setIndex(n.clone(t));let i=e.attributes;for(let e in i){let n=i[e];this.setAttribute(e,n.clone(t))}let r=e.morphAttributes;for(let e in r){let n=[],i=r[e];for(let e=0,r=i.length;e0){let n=e[t[0]];if(void 0!==n){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;e(e.far-e.near)**2)||(ni.copy(r).invert(),nr.copy(e.ray).applyMatrix4(ni),(null===n.boundingBox||!1!==nr.intersectsBox(n.boundingBox))&&this._computeIntersections(e,t,nr)))}_computeIntersections(e,t,n){let i,r=this.geometry,a=this.material,s=r.index,o=r.attributes.position,l=r.attributes.uv,u=r.attributes.uv1,c=r.attributes.normal,h=r.groups,d=r.drawRange;if(null!==s)if(Array.isArray(a))for(let r=0,o=h.length;rn.far?null:{distance:l,point:np.clone(),object:e}}(e,t,n,i,no,nl,nu,nd);if(c){let e=new eE;tN.getBarycoord(nd,no,nl,nu,e),r&&(c.uv=tN.getInterpolatedAttribute(r,o,l,u,e,new Y)),a&&(c.uv1=tN.getInterpolatedAttribute(a,o,l,u,e,new Y)),s&&(c.normal=tN.getInterpolatedAttribute(s,o,l,u,e,new eE),c.normal.dot(i.direction)>0&&c.normal.multiplyScalar(-1));let t={a:o,b:l,c:u,normal:new eE,materialIndex:0};tN.getNormal(no,nl,nu,t.normal),c.face=t,c.barycoord=e}return c}class ng extends nn{constructor(e=1,t=1,n=1,i=1,r=1,a=1){super(),this.type="BoxGeometry",this.parameters={width:e,height:t,depth:n,widthSegments:i,heightSegments:r,depthSegments:a};const s=this;i=Math.floor(i),r=Math.floor(r);const o=[],l=[],u=[],c=[];let h=0,d=0;function p(e,t,n,i,r,a,p,f,m,g,v){let _=a/m,y=p/g,x=a/2,b=p/2,S=f/2,M=m+1,T=g+1,w=0,E=0,A=new eE;for(let a=0;a0?1:-1,u.push(A.x,A.y,A.z),c.push(o/m),c.push(1-a/g),w+=1}}for(let e=0;e0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader,t.lights=this.lights,t.clipping=this.clipping;let n={};for(let e in this.extensions)!0===this.extensions[e]&&(n[e]=!0);return Object.keys(n).length>0&&(t.extensions=n),t}}class nS extends ty{constructor(){super(),this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new e2,this.projectionMatrix=new e2,this.projectionMatrixInverse=new e2,this.coordinateSystem=2e3}copy(e,t){return super.copy(e,t),this.matrixWorldInverse.copy(e.matrixWorldInverse),this.projectionMatrix.copy(e.projectionMatrix),this.projectionMatrixInverse.copy(e.projectionMatrixInverse),this.coordinateSystem=e.coordinateSystem,this}getWorldDirection(e){return super.getWorldDirection(e).negate()}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(e,t){super.updateWorldMatrix(e,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return new this.constructor().copy(this)}}let nM=new eE,nT=new Y,nw=new Y;class nE extends nS{constructor(e=50,t=1,n=.1,i=2e3){super(),this.isPerspectiveCamera=!0,this.type="PerspectiveCamera",this.fov=e,this.zoom=1,this.near=n,this.far=i,this.focus=10,this.aspect=t,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.fov=e.fov,this.zoom=e.zoom,this.near=e.near,this.far=e.far,this.focus=e.focus,this.aspect=e.aspect,this.view=null===e.view?null:Object.assign({},e.view),this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this}setFocalLength(e){let t=.5*this.getFilmHeight()/e;this.fov=2*k*Math.atan(t),this.updateProjectionMatrix()}getFocalLength(){let e=Math.tan(.5*B*this.fov);return .5*this.getFilmHeight()/e}getEffectiveFOV(){return 2*k*Math.atan(Math.tan(.5*B*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}getViewBounds(e,t,n){nM.set(-1,-1,.5).applyMatrix4(this.projectionMatrixInverse),t.set(nM.x,nM.y).multiplyScalar(-e/nM.z),nM.set(1,1,.5).applyMatrix4(this.projectionMatrixInverse),n.set(nM.x,nM.y).multiplyScalar(-e/nM.z)}getViewSize(e,t){return this.getViewBounds(e,nT,nw),t.subVectors(nw,nT)}setViewOffset(e,t,n,i,r,a){this.aspect=e/t,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){let e=this.near,t=e*Math.tan(.5*B*this.fov)/this.zoom,n=2*t,i=this.aspect*n,r=-.5*i,a=this.view;if(null!==this.view&&this.view.enabled){let e=a.fullWidth,s=a.fullHeight;r+=a.offsetX*i/e,t-=a.offsetY*n/s,i*=a.width/e,n*=a.height/s}let s=this.filmOffset;0!==s&&(r+=e*s/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+i,t,t-n,e,this.far,this.coordinateSystem),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){let t=super.toJSON(e);return t.object.fov=this.fov,t.object.zoom=this.zoom,t.object.near=this.near,t.object.far=this.far,t.object.focus=this.focus,t.object.aspect=this.aspect,null!==this.view&&(t.object.view=Object.assign({},this.view)),t.object.filmGauge=this.filmGauge,t.object.filmOffset=this.filmOffset,t}}class nA extends ty{constructor(e,t,n){super(),this.type="CubeCamera",this.renderTarget=n,this.coordinateSystem=null,this.activeMipmapLevel=0;const i=new nE(-90,1,e,t);i.layers=this.layers,this.add(i);const r=new nE(-90,1,e,t);r.layers=this.layers,this.add(r);const a=new nE(-90,1,e,t);a.layers=this.layers,this.add(a);const s=new nE(-90,1,e,t);s.layers=this.layers,this.add(s);const o=new nE(-90,1,e,t);o.layers=this.layers,this.add(o);const l=new nE(-90,1,e,t);l.layers=this.layers,this.add(l)}updateCoordinateSystem(){let e=this.coordinateSystem,t=this.children.concat(),[n,i,r,a,s,o]=t;for(let e of t)this.remove(e);if(2e3===e)n.up.set(0,1,0),n.lookAt(1,0,0),i.up.set(0,1,0),i.lookAt(-1,0,0),r.up.set(0,0,-1),r.lookAt(0,1,0),a.up.set(0,0,1),a.lookAt(0,-1,0),s.up.set(0,1,0),s.lookAt(0,0,1),o.up.set(0,1,0),o.lookAt(0,0,-1);else if(2001===e)n.up.set(0,-1,0),n.lookAt(-1,0,0),i.up.set(0,-1,0),i.lookAt(1,0,0),r.up.set(0,0,1),r.lookAt(0,1,0),a.up.set(0,0,-1),a.lookAt(0,-1,0),s.up.set(0,-1,0),s.lookAt(0,0,1),o.up.set(0,-1,0),o.lookAt(0,0,-1);else throw Error("THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: "+e);for(let e of t)this.add(e),e.updateMatrixWorld()}update(e,t){null===this.parent&&this.updateMatrixWorld();let{renderTarget:n,activeMipmapLevel:i}=this;this.coordinateSystem!==e.coordinateSystem&&(this.coordinateSystem=e.coordinateSystem,this.updateCoordinateSystem());let[r,a,s,o,l,u]=this.children,c=e.getRenderTarget(),h=e.getActiveCubeFace(),d=e.getActiveMipmapLevel(),p=e.xr.enabled;e.xr.enabled=!1;let f=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,e.setRenderTarget(n,0,i),e.render(t,r),e.setRenderTarget(n,1,i),e.render(t,a),e.setRenderTarget(n,2,i),e.render(t,s),e.setRenderTarget(n,3,i),e.render(t,o),e.setRenderTarget(n,4,i),e.render(t,l),n.texture.generateMipmaps=f,e.setRenderTarget(n,5,i),e.render(t,u),e.setRenderTarget(c,h,d),e.xr.enabled=p,n.texture.needsPMREMUpdate=!0}}class nC extends ev{constructor(e,t,n,i,r,a,s,o,l,u){super(e=void 0!==e?e:[],t=void 0!==t?t:301,n,i,r,a,s,o,l,u),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(e){this.image=e}}class nR extends ex{constructor(e=1,t={}){super(e,e,t),this.isWebGLCubeRenderTarget=!0;const n={width:e,height:e,depth:1};this.texture=new nC([n,n,n,n,n,n],t.mapping,t.wrapS,t.wrapT,t.magFilter,t.minFilter,t.format,t.type,t.anisotropy,t.colorSpace),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=void 0!==t.generateMipmaps&&t.generateMipmaps,this.texture.minFilter=void 0!==t.minFilter?t.minFilter:1006}fromEquirectangularTexture(e,t){this.texture.type=t.type,this.texture.colorSpace=t.colorSpace,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;let n={uniforms:{tEquirect:{value:null}},vertexShader:` - - varying vec3 vWorldDirection; - - vec3 transformDirection( in vec3 dir, in mat4 matrix ) { - - return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); - - } - - void main() { - - vWorldDirection = transformDirection( position, modelMatrix ); - - #include - #include - - } - `,fragmentShader:` - - uniform sampler2D tEquirect; - - varying vec3 vWorldDirection; - - #include - - void main() { - - vec3 direction = normalize( vWorldDirection ); - - vec2 sampleUV = equirectUv( direction ); - - gl_FragColor = texture2D( tEquirect, sampleUV ); - - } - `},i=new ng(5,5,5),r=new nb({name:"CubemapFromEquirect",uniforms:nv(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:1,blending:0});r.uniforms.tEquirect.value=t;let a=new nf(i,r),s=t.minFilter;return 1008===t.minFilter&&(t.minFilter=1006),new nA(1,10,this).update(e,a),t.minFilter=s,a.geometry.dispose(),a.material.dispose(),this}clear(e,t,n,i){let r=e.getRenderTarget();for(let r=0;r<6;r++)e.setRenderTarget(this,r),e.clear(t,n,i);e.setRenderTarget(r)}}class nP{constructor(e,t=25e-5){this.isFogExp2=!0,this.name="",this.color=new tz(e),this.density=t}clone(){return new nP(this.color,this.density)}toJSON(){return{type:"FogExp2",name:this.name,color:this.color.getHex(),density:this.density}}}class nI{constructor(e,t=1,n=1e3){this.isFog=!0,this.name="",this.color=new tz(e),this.near=t,this.far=n}clone(){return new nI(this.color,this.near,this.far)}toJSON(){return{type:"Fog",name:this.name,color:this.color.getHex(),near:this.near,far:this.far}}}class nL extends ty{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.backgroundRotation=new tn,this.environmentIntensity=1,this.environmentRotation=new tn,this.overrideMaterial=null,"u">typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(e,t){return super.copy(e,t),null!==e.background&&(this.background=e.background.clone()),null!==e.environment&&(this.environment=e.environment.clone()),null!==e.fog&&(this.fog=e.fog.clone()),this.backgroundBlurriness=e.backgroundBlurriness,this.backgroundIntensity=e.backgroundIntensity,this.backgroundRotation.copy(e.backgroundRotation),this.environmentIntensity=e.environmentIntensity,this.environmentRotation.copy(e.environmentRotation),null!==e.overrideMaterial&&(this.overrideMaterial=e.overrideMaterial.clone()),this.matrixAutoUpdate=e.matrixAutoUpdate,this}toJSON(e){let t=super.toJSON(e);return null!==this.fog&&(t.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(t.object.backgroundBlurriness=this.backgroundBlurriness),1!==this.backgroundIntensity&&(t.object.backgroundIntensity=this.backgroundIntensity),t.object.backgroundRotation=this.backgroundRotation.toArray(),1!==this.environmentIntensity&&(t.object.environmentIntensity=this.environmentIntensity),t.object.environmentRotation=this.environmentRotation.toArray(),t}}class nN{constructor(e,t){this.isInterleavedBuffer=!0,this.array=e,this.stride=t,this.count=void 0!==e?e.length/t:0,this.usage=35044,this.updateRanges=[],this.version=0,this.uuid=H()}onUploadCallback(){}set needsUpdate(e){!0===e&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.array=new e.array.constructor(e.array),this.count=e.count,this.stride=e.stride,this.usage=e.usage,this}copyAt(e,t,n){e*=this.stride,n*=t.stride;for(let i=0,r=this.stride;ie.far||t.push({distance:o,point:nF.clone(),uv:tN.getInterpolation(nF,nG,nW,nj,nX,nq,nY,new Y),face:null,object:this})}copy(e,t){return super.copy(e,t),void 0!==e.center&&this.center.copy(e.center),this.material=e.material,this}}function nJ(e,t,n,i,r,a){nk.subVectors(e,n).addScalar(.5).multiply(i),void 0!==r?(nH.x=a*nk.x-r*nk.y,nH.y=r*nk.x+a*nk.y):nH.copy(nk),e.copy(t),e.x+=nH.x,e.y+=nH.y,e.applyMatrix4(nV)}let nK=new eE,n$=new eE;class nQ extends ty{constructor(){super(),this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]},isLOD:{value:!0}}),this.autoUpdate=!0}copy(e){super.copy(e,!1);let t=e.levels;for(let e=0,n=t.length;e0){let n,i;for(n=1,i=t.length;n0){nK.setFromMatrixPosition(this.matrixWorld);let n=e.ray.origin.distanceTo(nK);this.getObjectForDistance(n).raycast(e,t)}}update(e){let t=this.levels;if(t.length>1){let n,i;nK.setFromMatrixPosition(e.matrixWorld),n$.setFromMatrixPosition(this.matrixWorld);let r=nK.distanceTo(n$)/e.zoom;for(n=1,t[0].object.visible=!0,i=t.length;n=e)t[n-1].object.visible=!1,t[n].object.visible=!0;else break}for(this._currentLevel=n-1;n1?null:t.copy(e.start).addScaledVector(n,r)}intersectsLine(e){let t=this.distanceToPoint(e.start),n=this.distanceToPoint(e.end);return t<0&&n>0||n<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){let n=t||i_.getNormalMatrix(e),i=this.coplanarPoint(ig).applyMatrix4(e),r=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(r),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return new this.constructor().copy(this)}}let ix=new eq,ib=new eE;class iS{constructor(e=new iy,t=new iy,n=new iy,i=new iy,r=new iy,a=new iy){this.planes=[e,t,n,i,r,a]}set(e,t,n,i,r,a){let s=this.planes;return s[0].copy(e),s[1].copy(t),s[2].copy(n),s[3].copy(i),s[4].copy(r),s[5].copy(a),this}copy(e){let t=this.planes;for(let n=0;n<6;n++)t[n].copy(e.planes[n]);return this}setFromProjectionMatrix(e,t=2e3){let n=this.planes,i=e.elements,r=i[0],a=i[1],s=i[2],o=i[3],l=i[4],u=i[5],c=i[6],h=i[7],d=i[8],p=i[9],f=i[10],m=i[11],g=i[12],v=i[13],_=i[14],y=i[15];if(n[0].setComponents(o-r,h-l,m-d,y-g).normalize(),n[1].setComponents(o+r,h+l,m+d,y+g).normalize(),n[2].setComponents(o+a,h+u,m+p,y+v).normalize(),n[3].setComponents(o-a,h-u,m-p,y-v).normalize(),n[4].setComponents(o-s,h-c,m-f,y-_).normalize(),2e3===t)n[5].setComponents(o+s,h+c,m+f,y+_).normalize();else if(2001===t)n[5].setComponents(s,c,f,_).normalize();else throw Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: "+t);return this}intersectsObject(e){if(void 0!==e.boundingSphere)null===e.boundingSphere&&e.computeBoundingSphere(),ix.copy(e.boundingSphere).applyMatrix4(e.matrixWorld);else{let t=e.geometry;null===t.boundingSphere&&t.computeBoundingSphere(),ix.copy(t.boundingSphere).applyMatrix4(e.matrixWorld)}return this.intersectsSphere(ix)}intersectsSprite(e){return ix.center.set(0,0,0),ix.radius=.7071067811865476,ix.applyMatrix4(e.matrixWorld),this.intersectsSphere(ix)}intersectsSphere(e){let t=this.planes,n=e.center,i=-e.radius;for(let e=0;e<6;e++)if(t[e].distanceToPoint(n)0?e.max.x:e.min.x,ib.y=i.normal.y>0?e.max.y:e.min.y,ib.z=i.normal.z>0?e.max.z:e.min.z,0>i.distanceToPoint(ib))return!1}return!0}containsPoint(e){let t=this.planes;for(let n=0;n<6;n++)if(0>t[n].distanceToPoint(e))return!1;return!0}clone(){return new this.constructor().copy(this)}}function iM(e,t){return e-t}function iT(e,t){return e.z-t.z}function iw(e,t){return t.z-e.z}let iE=new e2,iA=new tz(1,1,1),iC=new iS,iR=new eR,iP=new eq,iI=new eE,iL=new eE,iN=new eE,iU=new class{constructor(){this.index=0,this.pool=[],this.list=[]}push(e,t,n,i){let r=this.pool,a=this.list;this.index>=r.length&&r.push({start:-1,count:-1,z:-1,index:-1});let s=r[this.index];a.push(s),this.index++,s.start=e,s.count=t,s.z=n,s.index=i}reset(){this.list.length=0,this.index=0}},iD=new nf,iO=[];function iF(e,t){if(e.constructor!==t.constructor){let n=Math.min(e.length,t.length);for(let i=0;i65535?new Uint32Array(i):new Uint16Array(i);t.setIndex(new tZ(e,1))}this._geometryInitialized=!0}}_validateGeometry(e){let t=this.geometry;if(!!e.getIndex()!=!!t.getIndex())throw Error('THREE.BatchedMesh: All geometries must consistently have "index".');for(let n in t.attributes){if(!e.hasAttribute(n))throw Error(`THREE.BatchedMesh: Added geometry missing "${n}". All geometries must have consistent attributes.`);let i=e.getAttribute(n),r=t.getAttribute(n);if(i.itemSize!==r.itemSize||i.normalized!==r.normalized)throw Error("THREE.BatchedMesh: All attributes must have a consistent itemSize and normalized value.")}}validateInstanceId(e){let t=this._instanceInfo;if(e<0||e>=t.length||!1===t[e].active)throw Error(`THREE.BatchedMesh: Invalid instanceId ${e}. Instance is either out of range or has been deleted.`)}validateGeometryId(e){let t=this._geometryInfo;if(e<0||e>=t.length||!1===t[e].active)throw Error(`THREE.BatchedMesh: Invalid geometryId ${e}. Geometry is either out of range or has been deleted.`)}setCustomSort(e){return this.customSort=e,this}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new eR);let e=this.boundingBox,t=this._instanceInfo;e.makeEmpty();for(let n=0,i=t.length;n=this.maxInstanceCount&&0===this._availableInstanceIds.length)throw Error("THREE.BatchedMesh: Maximum item count reached.");let t={visible:!0,active:!0,geometryIndex:e},n=null;this._availableInstanceIds.length>0?(this._availableInstanceIds.sort(iM),n=this._availableInstanceIds.shift(),this._instanceInfo[n]=t):(n=this._instanceInfo.length,this._instanceInfo.push(t));let i=this._matricesTexture;iE.identity().toArray(i.image.data,16*n),i.needsUpdate=!0;let r=this._colorsTexture;return r&&(iA.toArray(r.image.data,4*n),r.needsUpdate=!0),this._visibilityChanged=!0,n}addGeometry(e,t=-1,n=-1){let i;this._initializeGeometry(e),this._validateGeometry(e);let r={vertexStart:-1,vertexCount:-1,reservedVertexCount:-1,indexStart:-1,indexCount:-1,reservedIndexCount:-1,start:-1,count:-1,boundingBox:null,boundingSphere:null,active:!0},a=this._geometryInfo;r.vertexStart=this._nextVertexStart,r.reservedVertexCount=-1===t?e.getAttribute("position").count:t;let s=e.getIndex();if(null!==s&&(r.indexStart=this._nextIndexStart,r.reservedIndexCount=-1===n?s.count:n),-1!==r.indexStart&&r.indexStart+r.reservedIndexCount>this._maxIndexCount||r.vertexStart+r.reservedVertexCount>this._maxVertexCount)throw Error("THREE.BatchedMesh: Reserved space request exceeds the maximum buffer size.");return this._availableGeometryIds.length>0?(this._availableGeometryIds.sort(iM),a[i=this._availableGeometryIds.shift()]=r):(i=this._geometryCount,this._geometryCount++,a.push(r)),this.setGeometryAt(i,e),this._nextIndexStart=r.indexStart+r.reservedIndexCount,this._nextVertexStart=r.vertexStart+r.reservedVertexCount,i}setGeometryAt(e,t){if(e>=this._geometryCount)throw Error("THREE.BatchedMesh: Maximum geometry count reached.");this._validateGeometry(t);let n=this.geometry,i=null!==n.getIndex(),r=n.getIndex(),a=t.getIndex(),s=this._geometryInfo[e];if(i&&a.count>s.reservedIndexCount||t.attributes.position.count>s.reservedVertexCount)throw Error("THREE.BatchedMesh: Reserved space not large enough for provided geometry.");let o=s.vertexStart,l=s.reservedVertexCount;for(let e in s.vertexCount=t.getAttribute("position").count,n.attributes){let i=t.getAttribute(e),r=n.getAttribute(e);!function(e,t,n=0){let i=t.itemSize;if(e.isInterleavedBufferAttribute||e.array.constructor!==t.array.constructor){let r=e.count;for(let a=0;a=t.length||!1===t[e].active)return this;let n=this._instanceInfo;for(let t=0,i=n.length;tt).sort((e,t)=>n[e].vertexStart-n[t].vertexStart),r=this.geometry;for(let a=0,s=n.length;a=this._geometryCount)return null;let n=this.geometry,i=this._geometryInfo[e];if(null===i.boundingBox){let e=new eR,t=n.index,r=n.attributes.position;for(let n=i.start,a=i.start+i.count;n=this._geometryCount)return null;let n=this.geometry,i=this._geometryInfo[e];if(null===i.boundingSphere){let t=new eq;this.getBoundingBoxAt(e,iR),iR.getCenter(t.center);let r=n.index,a=n.attributes.position,s=0;for(let e=i.start,n=i.start+i.count;ee.active);if(Math.max(...n.map(e=>e.vertexStart+e.reservedVertexCount))>e)throw Error(`BatchedMesh: Geometry vertex values are being used outside the range ${t}. Cannot shrink further.`);if(this.geometry.index&&Math.max(...n.map(e=>e.indexStart+e.reservedIndexCount))>t)throw Error(`BatchedMesh: Geometry index values are being used outside the range ${t}. Cannot shrink further.`);let i=this.geometry;i.dispose(),this._maxVertexCount=e,this._maxIndexCount=t,this._geometryInitialized&&(this._geometryInitialized=!1,this.geometry=new nn,this._initializeGeometry(i));let r=this.geometry;for(let e in i.index&&iF(i.index.array,r.index.array),i.attributes)iF(i.attributes[e].array,r.attributes[e].array)}raycast(e,t){let n=this._instanceInfo,i=this._geometryInfo,r=this.matrixWorld,a=this.geometry;iD.material=this.material,iD.geometry.index=a.index,iD.geometry.attributes=a.attributes,null===iD.geometry.boundingBox&&(iD.geometry.boundingBox=new eR),null===iD.geometry.boundingSphere&&(iD.geometry.boundingSphere=new eq);for(let a=0,s=n.length;a({...e,boundingBox:null!==e.boundingBox?e.boundingBox.clone():null,boundingSphere:null!==e.boundingSphere?e.boundingSphere.clone():null})),this._instanceInfo=e._instanceInfo.map(e=>({...e})),this._maxInstanceCount=e._maxInstanceCount,this._maxVertexCount=e._maxVertexCount,this._maxIndexCount=e._maxIndexCount,this._geometryInitialized=e._geometryInitialized,this._geometryCount=e._geometryCount,this._multiDrawCounts=e._multiDrawCounts.slice(),this._multiDrawStarts=e._multiDrawStarts.slice(),this._matricesTexture=e._matricesTexture.clone(),this._matricesTexture.image.data=this._matricesTexture.image.data.slice(),null!==this._colorsTexture&&(this._colorsTexture=e._colorsTexture.clone(),this._colorsTexture.image.data=this._colorsTexture.image.data.slice()),this}dispose(){return this.geometry.dispose(),this._matricesTexture.dispose(),this._matricesTexture=null,this._indirectTexture.dispose(),this._indirectTexture=null,null!==this._colorsTexture&&(this._colorsTexture.dispose(),this._colorsTexture=null),this}onBeforeRender(e,t,n,i,r){if(!this._visibilityChanged&&!this.perObjectFrustumCulled&&!this.sortObjects)return;let a=i.getIndex(),s=null===a?1:a.array.BYTES_PER_ELEMENT,o=this._instanceInfo,l=this._multiDrawStarts,u=this._multiDrawCounts,c=this._geometryInfo,h=this.perObjectFrustumCulled,d=this._indirectTexture,p=d.image.data;h&&(iE.multiplyMatrices(n.projectionMatrix,n.matrixWorldInverse).multiply(this.matrixWorld),iC.setFromProjectionMatrix(iE,e.coordinateSystem));let f=0;if(this.sortObjects){iE.copy(this.matrixWorld).invert(),iI.setFromMatrixPosition(n.matrixWorld).applyMatrix4(iE),iL.set(0,0,-1).transformDirection(n.matrixWorld).transformDirection(iE);for(let e=0,t=o.length;e0){let n=e[t[0]];if(void 0!==n){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;ei)return;ij.applyMatrix4(e.matrixWorld);let o=t.ray.origin.distanceTo(ij);if(!(ot.far))return{distance:o,point:iX.clone().applyMatrix4(e.matrixWorld),index:r,face:null,faceIndex:null,barycoord:null,object:e}}let iZ=new eE,iJ=new eE;class iK extends iq{constructor(e,t){super(e,t),this.isLineSegments=!0,this.type="LineSegments"}computeLineDistances(){let e=this.geometry;if(null===e.index){let t=e.attributes.position,n=[];for(let e=0,i=t.count;e0){let n=e[t[0]];if(void 0!==n){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;er.far)return;a.push({distance:l,distanceToRay:Math.sqrt(o),point:n,index:t,face:null,faceIndex:null,barycoord:null,object:s})}}class i6 extends ty{constructor(){super(),this.isGroup=!0,this.type="Group"}}class i8 extends ev{constructor(e,t,n,i,r,a,s,o,l){super(e,t,n,i,r,a,s,o,l),this.isVideoTexture=!0,this.minFilter=void 0!==a?a:1006,this.magFilter=void 0!==r?r:1006,this.generateMipmaps=!1;const u=this;"requestVideoFrameCallback"in e&&e.requestVideoFrameCallback(function t(){u.needsUpdate=!0,e.requestVideoFrameCallback(t)})}clone(){return new this.constructor(this.image).copy(this)}update(){let e=this.image;!1=="requestVideoFrameCallback"in e&&e.readyState>=e.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}class i9 extends ev{constructor(e,t){super({width:e,height:t}),this.isFramebufferTexture=!0,this.magFilter=1003,this.minFilter=1003,this.generateMipmaps=!1,this.needsUpdate=!0}}class i7 extends ev{constructor(e,t,n,i,r,a,s,o,l,u,c,h){super(null,a,s,o,l,u,i,r,c,h),this.isCompressedTexture=!0,this.image={width:t,height:n},this.mipmaps=e,this.flipY=!1,this.generateMipmaps=!1}}class re extends i7{constructor(e,t,n,i,r,a){super(e,t,n,r,a),this.isCompressedArrayTexture=!0,this.image.depth=i,this.wrapR=1001,this.layerUpdates=new Set}addLayerUpdate(e){this.layerUpdates.add(e)}clearLayerUpdates(){this.layerUpdates.clear()}}class rt extends i7{constructor(e,t,n){super(void 0,e[0].width,e[0].height,t,n,301),this.isCompressedCubeTexture=!0,this.isCubeTexture=!0,this.image=e}}class rn extends ev{constructor(e,t,n,i,r,a,s,o,l){super(e,t,n,i,r,a,s,o,l),this.isCanvasTexture=!0,this.needsUpdate=!0}}class ri extends ev{constructor(e,t,n,i,r,a,s,o,l,u=1026){if(1026!==u&&1027!==u)throw Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===n&&1026===u&&(n=1014),void 0===n&&1027===u&&(n=1020),super(null,i,r,a,s,o,u,n,l),this.isDepthTexture=!0,this.image={width:e,height:t},this.magFilter=void 0!==s?s:1003,this.minFilter=void 0!==o?o:1003,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(e){return super.copy(e),this.compareFunction=e.compareFunction,this}toJSON(e){let t=super.toJSON(e);return null!==this.compareFunction&&(t.compareFunction=this.compareFunction),t}}class rr{constructor(){this.type="Curve",this.arcLengthDivisions=200}getPoint(){return console.warn("THREE.Curve: .getPoint() not implemented."),null}getPointAt(e,t){let n=this.getUtoTmapping(e);return this.getPoint(n,t)}getPoints(e=5){let t=[];for(let n=0;n<=e;n++)t.push(this.getPoint(n/e));return t}getSpacedPoints(e=5){let t=[];for(let n=0;n<=e;n++)t.push(this.getPointAt(n/e));return t}getLength(){let e=this.getLengths();return e[e.length-1]}getLengths(e=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===e+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;let t=[],n,i=this.getPoint(0),r=0;t.push(0);for(let a=1;a<=e;a++)t.push(r+=(n=this.getPoint(a/e)).distanceTo(i)),i=n;return this.cacheArcLengths=t,t}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(e,t){let n,i=this.getLengths(),r=0,a=i.length;n=t||e*i[a-1];let s=0,o=a-1,l;for(;s<=o;)if((l=i[r=Math.floor(s+(o-s)/2)]-n)<0)s=r+1;else if(l>0)o=r-1;else{o=r;break}if(i[r=o]===n)return r/(a-1);let u=i[r],c=i[r+1];return(r+(n-u)/(c-u))/(a-1)}getTangent(e,t){let n=e-1e-4,i=e+1e-4;n<0&&(n=0),i>1&&(i=1);let r=this.getPoint(n),a=this.getPoint(i),s=t||(r.isVector2?new Y:new eE);return s.copy(a).sub(r).normalize(),s}getTangentAt(e,t){let n=this.getUtoTmapping(e);return this.getTangent(n,t)}computeFrenetFrames(e,t){let n=new eE,i=[],r=[],a=[],s=new eE,o=new e2;for(let t=0;t<=e;t++){let n=t/e;i[t]=this.getTangentAt(n,new eE)}r[0]=new eE,a[0]=new eE;let l=Number.MAX_VALUE,u=Math.abs(i[0].x),c=Math.abs(i[0].y),h=Math.abs(i[0].z);u<=l&&(l=u,n.set(1,0,0)),c<=l&&(l=c,n.set(0,1,0)),h<=l&&n.set(0,0,1),s.crossVectors(i[0],n).normalize(),r[0].crossVectors(i[0],s),a[0].crossVectors(i[0],r[0]);for(let t=1;t<=e;t++){if(r[t]=r[t-1].clone(),a[t]=a[t-1].clone(),s.crossVectors(i[t-1],i[t]),s.length()>Number.EPSILON){s.normalize();let e=Math.acos(V(i[t-1].dot(i[t]),-1,1));r[t].applyMatrix4(o.makeRotationAxis(s,e))}a[t].crossVectors(i[t],r[t])}if(!0===t){let t=Math.acos(V(r[0].dot(r[e]),-1,1));t/=e,i[0].dot(s.crossVectors(r[0],r[e]))>0&&(t=-t);for(let n=1;n<=e;n++)r[n].applyMatrix4(o.makeRotationAxis(i[n],t*n)),a[n].crossVectors(i[n],r[n])}return{tangents:i,normals:r,binormals:a}}clone(){return new this.constructor().copy(this)}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}toJSON(){let e={metadata:{version:4.6,type:"Curve",generator:"Curve.toJSON"}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.type,e}fromJSON(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}}class ra extends rr{constructor(e=0,t=0,n=1,i=1,r=0,a=2*Math.PI,s=!1,o=0){super(),this.isEllipseCurve=!0,this.type="EllipseCurve",this.aX=e,this.aY=t,this.xRadius=n,this.yRadius=i,this.aStartAngle=r,this.aEndAngle=a,this.aClockwise=s,this.aRotation=o}getPoint(e,t=new Y){let n=2*Math.PI,i=this.aEndAngle-this.aStartAngle,r=Math.abs(i)n;)i-=n;i0?0:(Math.floor(Math.abs(o)/a)+1)*a:0===l&&o===a-1&&(o=a-2,l=1),this.closed||o>0?n=r[(o-1)%a]:(rl.subVectors(r[0],r[1]).add(r[0]),n=rl);let u=r[o%a],c=r[(o+1)%a];if(this.closed||o+2n.length-2?n.length-1:r+1],u=n[r>n.length-3?n.length-1:r+2];return t.set(rp(a,s.x,o.x,l.x,u.x),rp(a,s.y,o.y,l.y,u.y)),t}copy(e){super.copy(e),this.points=[];for(let t=0,n=e.points.length;t=n){let e=i[r]-n,a=this.curves[r],s=a.getLength(),o=0===s?0:1-e/s;return a.getPointAt(o,t)}r++}return null}getLength(){let e=this.getCurveLengths();return e[e.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;let e=[],t=0;for(let n=0,i=this.curves.length;n1&&!n[n.length-1].equals(n[0])&&n.push(n[0]),n}copy(e){super.copy(e),this.curves=[];for(let t=0,n=e.curves.length;t0){let e=l.getPoint(0);e.equals(this.currentPoint)||this.lineTo(e.x,e.y)}this.curves.push(l);let u=l.getPoint(1);return this.currentPoint.copy(u),this}copy(e){return super.copy(e),this.currentPoint.copy(e.currentPoint),this}toJSON(){let e=super.toJSON();return e.currentPoint=this.currentPoint.toArray(),e}fromJSON(e){return super.fromJSON(e),this.currentPoint.fromArray(e.currentPoint),this}}class rE extends nn{constructor(e=[new Y(0,-.5),new Y(.5,0),new Y(0,.5)],t=12,n=0,i=2*Math.PI){super(),this.type="LatheGeometry",this.parameters={points:e,segments:t,phiStart:n,phiLength:i},t=Math.floor(t),i=V(i,0,2*Math.PI);const r=[],a=[],s=[],o=[],l=[],u=1/t,c=new eE,h=new Y,d=new eE,p=new eE,f=new eE;let m=0,g=0;for(let t=0;t<=e.length-1;t++)switch(t){case 0:m=e[t+1].x-e[t].x,d.x=+(g=e[t+1].y-e[t].y),d.y=-m,d.z=0*g,f.copy(d),d.normalize(),o.push(d.x,d.y,d.z);break;case e.length-1:o.push(f.x,f.y,f.z);break;default:m=e[t+1].x-e[t].x,d.x=+(g=e[t+1].y-e[t].y),d.y=-m,d.z=0*g,p.copy(d),d.x+=f.x,d.y+=f.y,d.z+=f.z,d.normalize(),o.push(d.x,d.y,d.z),f.copy(p)}for(let r=0;r<=t;r++){const d=n+r*u*i,p=Math.sin(d),f=Math.cos(d);for(let n=0;n<=e.length-1;n++){c.x=e[n].x*p,c.y=e[n].y,c.z=e[n].x*f,a.push(c.x,c.y,c.z),h.x=r/t,h.y=n/(e.length-1),s.push(h.x,h.y);const i=o[3*n+0]*p,u=o[3*n+1],d=o[3*n+0]*f;l.push(i,u,d)}}for(let n=0;n0||0!==i)&&(u.push(a,s,l),_+=3),(t>0||i!==r-1)&&(u.push(s,o,l),_+=3)}l.addGroup(g,_,0),g+=_})(),!1===a&&(e>0&&v(!0),t>0&&v(!1)),this.setIndex(u),this.setAttribute("position",new t4(c,3)),this.setAttribute("normal",new t4(h,3)),this.setAttribute("uv",new t4(d,2))}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}static fromJSON(e){return new rR(e.radiusTop,e.radiusBottom,e.height,e.radialSegments,e.heightSegments,e.openEnded,e.thetaStart,e.thetaLength)}}class rP extends rR{constructor(e=1,t=1,n=32,i=1,r=!1,a=0,s=2*Math.PI){super(0,e,t,n,i,r,a,s),this.type="ConeGeometry",this.parameters={radius:e,height:t,radialSegments:n,heightSegments:i,openEnded:r,thetaStart:a,thetaLength:s}}static fromJSON(e){return new rP(e.radius,e.height,e.radialSegments,e.heightSegments,e.openEnded,e.thetaStart,e.thetaLength)}}class rI extends nn{constructor(e=[],t=[],n=1,i=0){super(),this.type="PolyhedronGeometry",this.parameters={vertices:e,indices:t,radius:n,detail:i};const r=[],a=[];function s(e){r.push(e.x,e.y,e.z)}function o(t,n){let i=3*t;n.x=e[i+0],n.y=e[i+1],n.z=e[i+2]}function l(e,t,n,i){i<0&&1===e.x&&(a[t]=e.x-1),0===n.x&&0===n.z&&(a[t]=i/2/Math.PI+.5)}function u(e){return Math.atan2(e.z,-e.x)}(function(e){let n=new eE,i=new eE,r=new eE;for(let a=0;a.9&&s<.1&&(t<.2&&(a[e+0]+=1),n<.2&&(a[e+2]+=1),i<.2&&(a[e+4]+=1))}}()}(),this.setAttribute("position",new t4(r,3)),this.setAttribute("normal",new t4(r.slice(),3)),this.setAttribute("uv",new t4(a,2)),0===i?this.computeVertexNormals():this.normalizeNormals()}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}static fromJSON(e){return new rI(e.vertices,e.indices,e.radius,e.details)}}class rL extends rI{constructor(e=1,t=0){const n=(1+Math.sqrt(5))/2,i=1/n;super([-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-i,-n,0,-i,n,0,i,-n,0,i,n,-i,-n,0,-i,n,0,i,-n,0,i,n,0,-n,0,-i,n,0,-i,-n,0,i,n,0,i],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],e,t),this.type="DodecahedronGeometry",this.parameters={radius:e,detail:t}}static fromJSON(e){return new rL(e.radius,e.detail)}}let rN=new eE,rU=new eE,rD=new eE,rO=new tN;class rF extends nn{constructor(e=null,t=1){if(super(),this.type="EdgesGeometry",this.parameters={geometry:e,thresholdAngle:t},null!==e){const n=Math.cos(B*t),i=e.getIndex(),r=e.getAttribute("position"),a=i?i.count:r.count,s=[0,0,0],o=["a","b","c"],l=[,,,],u={},c=[];for(let e=0;e=n.next.y&&n.next.y!==n.y){let e=n.x+(s-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(e<=a&&e>i&&(i=e,r=n.x=n.x&&n.x>=l&&a!==n.x&&rW(sr.x||n.x===r.x&&(d=r,p=n,0>rj(d.prev,d,p.prev)&&0>rj(p.next,d,d.next))))&&(r=n,c=h)),n=n.next}while(n!==o)return r}(e,t);if(!n)return t;let i=rK(n,e);return rH(i,i.next),rH(n,n.next)}(u[r],n);return n}(e,t,d,n)),e.length>80*n){i=a=e[0],r=s=e[1];for(let t=n;ta&&(a=o),l>s&&(s=l);u=0!==(u=Math.max(a-i,s-r))?32767/u:0}return function e(t,n,i,r,a,s,o){if(!t)return;!o&&s&&function(e,t,n,i){let r=e;do 0===r.z&&(r.z=rG(r.x,r.y,t,n,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next;while(r!==e)r.prevZ.nextZ=null,r.prevZ=null,function(e){let t,n,i,r,a,s,o,l,u=1;do{for(n=e,e=null,a=null,s=0;n;){for(s++,i=n,o=0,t=0;t0||l>0&&i;)0!==o&&(0===l||!i||n.z<=i.z)?(r=n,n=n.nextZ,o--):(r=i,i=i.nextZ,l--),a?a.nextZ=r:e=r,r.prevZ=a,a=r;n=i}a.nextZ=null,u*=2}while(s>1)}(r)}(t,r,a,s);let l=t,u,c;for(;t.prev!==t.next;){if(u=t.prev,c=t.next,s?function(e,t,n,i){let r=e.prev,a=e.next;if(rj(r,e,a)>=0)return!1;let s=r.x,o=e.x,l=a.x,u=r.y,c=e.y,h=a.y,d=so?s>l?s:l:o>l?o:l,m=u>c?u>h?u:h:c>h?c:h,g=rG(d,p,t,n,i),v=rG(f,m,t,n,i),_=e.prevZ,y=e.nextZ;for(;_&&_.z>=g&&y&&y.z<=v;){if(_.x>=d&&_.x<=f&&_.y>=p&&_.y<=m&&_!==r&&_!==a&&rW(s,u,o,c,l,h,_.x,_.y)&&rj(_.prev,_,_.next)>=0||(_=_.prevZ,y.x>=d&&y.x<=f&&y.y>=p&&y.y<=m&&y!==r&&y!==a&&rW(s,u,o,c,l,h,y.x,y.y)&&rj(y.prev,y,y.next)>=0))return!1;y=y.nextZ}for(;_&&_.z>=g;){if(_.x>=d&&_.x<=f&&_.y>=p&&_.y<=m&&_!==r&&_!==a&&rW(s,u,o,c,l,h,_.x,_.y)&&rj(_.prev,_,_.next)>=0)return!1;_=_.prevZ}for(;y&&y.z<=v;){if(y.x>=d&&y.x<=f&&y.y>=p&&y.y<=m&&y!==r&&y!==a&&rW(s,u,o,c,l,h,y.x,y.y)&&rj(y.prev,y,y.next)>=0)return!1;y=y.nextZ}return!0}(t,r,a,s):function(e){let t=e.prev,n=e.next;if(rj(t,e,n)>=0)return!1;let i=t.x,r=e.x,a=n.x,s=t.y,o=e.y,l=n.y,u=ir?i>a?i:a:r>a?r:a,d=s>o?s>l?s:l:o>l?o:l,p=n.next;for(;p!==t;){if(p.x>=u&&p.x<=h&&p.y>=c&&p.y<=d&&rW(i,s,r,o,a,l,p.x,p.y)&&rj(p.prev,p,p.next)>=0)return!1;p=p.next}return!0}(t)){n.push(u.i/i|0),n.push(t.i/i|0),n.push(c.i/i|0),rQ(t),t=c.next,l=c.next;continue}if((t=c)===l){o?1===o?e(t=function(e,t,n){let i=e;do{let r=i.prev,a=i.next.next;!rX(r,a)&&rq(r,i,i.next,a)&&rJ(r,a)&&rJ(a,r)&&(t.push(r.i/n|0),t.push(i.i/n|0),t.push(a.i/n|0),rQ(i),rQ(i.next),i=e=a),i=i.next}while(i!==e)return rH(i)}(rH(t),n,i),n,i,r,a,s,2):2===o&&function(t,n,i,r,a,s){let o=t;do{let t=o.next.next;for(;t!==o.prev;){var l,u;if(o.i!==t.i&&(l=o,u=t,l.next.i!==u.i&&l.prev.i!==u.i&&!function(e,t){let n=e;do{if(n.i!==e.i&&n.next.i!==e.i&&n.i!==t.i&&n.next.i!==t.i&&rq(n,n.next,e,t))return!0;n=n.next}while(n!==e)return!1}(l,u)&&(rJ(l,u)&&rJ(u,l)&&function(e,t){let n=e,i=!1,r=(e.x+t.x)/2,a=(e.y+t.y)/2;do n.y>a!=n.next.y>a&&n.next.y!==n.y&&r<(n.next.x-n.x)*(a-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next;while(n!==e)return i}(l,u)&&(rj(l.prev,l,u.prev)||rj(l,u.prev,u))||rX(l,u)&&rj(l.prev,l,l.next)>0&&rj(u.prev,u,u.next)>0))){let l=rK(o,t);o=rH(o,o.next),l=rH(l,l.next),e(o,n,i,r,a,s,0),e(l,n,i,r,a,s,0);return}t=t.next}o=o.next}while(o!==t)}(t,n,i,r,a,s):e(rH(t),n,i,r,a,s,1);break}}}(d,p,n,i,r,u,0),p};function rk(e,t,n,i,r){let a,s;if(r===function(e,t,n,i){let r=0;for(let a=t,s=n-i;a0)for(a=t;a=t;a-=i)s=r$(a,e[a],e[a+1],s);return s&&rX(s,s.next)&&(rQ(s),s=s.next),s}function rH(e,t){if(!e)return e;t||(t=e);let n=e,i;do if(i=!1,!n.steiner&&(rX(n,n.next)||0===rj(n.prev,n,n.next))){if(rQ(n),(n=t=n.prev)===n.next)break;i=!0}else n=n.next;while(i||n!==t)return t}function rV(e,t){return e.x-t.x}function rG(e,t,n,i,r){return(e=((e=((e=((e=((e=(e-n)*r|0)|e<<8)&0xff00ff)|e<<4)&0xf0f0f0f)|e<<2)&0x33333333)|e<<1)&0x55555555)|(t=((t=((t=((t=((t=(t-i)*r|0)|t<<8)&0xff00ff)|t<<4)&0xf0f0f0f)|t<<2)&0x33333333)|t<<1)&0x55555555)<<1}function rW(e,t,n,i,r,a,s,o){return(r-s)*(t-o)>=(e-s)*(a-o)&&(e-s)*(i-o)>=(n-s)*(t-o)&&(n-s)*(a-o)>=(r-s)*(i-o)}function rj(e,t,n){return(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y)}function rX(e,t){return e.x===t.x&&e.y===t.y}function rq(e,t,n,i){let r=rZ(rj(e,t,n)),a=rZ(rj(e,t,i)),s=rZ(rj(n,i,e)),o=rZ(rj(n,i,t));return!!(r!==a&&s!==o||0===r&&rY(e,n,t)||0===a&&rY(e,i,t)||0===s&&rY(n,e,i)||0===o&&rY(n,t,i))}function rY(e,t,n){return t.x<=Math.max(e.x,n.x)&&t.x>=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y)}function rZ(e){return e>0?1:e<0?-1:0}function rJ(e,t){return 0>rj(e.prev,e,e.next)?rj(e,t,e.next)>=0&&rj(e,e.prev,t)>=0:0>rj(e,t,e.prev)||0>rj(e,e.next,t)}function rK(e,t){let n=new r0(e.i,e.x,e.y),i=new r0(t.i,t.x,t.y),r=e.next,a=t.prev;return e.next=t,t.prev=e,n.next=r,r.prev=n,i.next=n,n.prev=i,a.next=i,i.prev=a,i}function r$(e,t,n,i){let r=new r0(e,t,n);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function rQ(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function r0(e,t,n){this.i=e,this.x=t,this.y=n,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}class r1{static area(e){let t=e.length,n=0;for(let i=t-1,r=0;rr1.area(e)}static triangulateShape(e,t){let n=[],i=[],r=[];r2(e),r3(n,e);let a=e.length;t.forEach(r2);for(let e=0;e2&&e[t-1].equals(e[0])&&e.pop()}function r3(e,t){for(let n=0;nNumber.EPSILON){let h=Math.sqrt(c),d=Math.sqrt(l*l+u*u),p=t.x-o/h,f=t.y+s/h,m=((n.x-u/d-p)*u-(n.y+l/d-f)*l)/(s*u-o*l),g=(i=p+s*m-e.x)*i+(r=f+o*m-e.y)*r;if(g<=2)return new Y(i,r);a=Math.sqrt(g/2)}else{let e=!1;s>Number.EPSILON?l>Number.EPSILON&&(e=!0):s<-Number.EPSILON?l<-Number.EPSILON&&(e=!0):Math.sign(o)===Math.sign(u)&&(e=!0),e?(i=-o,r=s,a=Math.sqrt(c)):(i=s,r=o,a=Math.sqrt(c/2))}return new Y(i/a,r/a)}let I=[];for(let e=0,t=E.length,n=t-1,i=e+1;e=0;e--){let t=e/v,n=f*Math.cos(t*Math.PI/2),i=m*Math.sin(t*Math.PI/2)+g;for(let e=0,t=E.length;e=0;){let a=r,s=r-1;s<0&&(s=e.length-1);for(let e=0,r=h+2*v;e0)&&d.push(t,r,l),(e!==n-1||o0!=e>0&&this.version++,this._anisotropy=e}get clearcoat(){return this._clearcoat}set clearcoat(e){this._clearcoat>0!=e>0&&this.version++,this._clearcoat=e}get iridescence(){return this._iridescence}set iridescence(e){this._iridescence>0!=e>0&&this.version++,this._iridescence=e}get dispersion(){return this._dispersion}set dispersion(e){this._dispersion>0!=e>0&&this.version++,this._dispersion=e}get sheen(){return this._sheen}set sheen(e){this._sheen>0!=e>0&&this.version++,this._sheen=e}get transmission(){return this._transmission}set transmission(e){this._transmission>0!=e>0&&this.version++,this._transmission=e}copy(e){return super.copy(e),this.defines={STANDARD:"",PHYSICAL:""},this.anisotropy=e.anisotropy,this.anisotropyRotation=e.anisotropyRotation,this.anisotropyMap=e.anisotropyMap,this.clearcoat=e.clearcoat,this.clearcoatMap=e.clearcoatMap,this.clearcoatRoughness=e.clearcoatRoughness,this.clearcoatRoughnessMap=e.clearcoatRoughnessMap,this.clearcoatNormalMap=e.clearcoatNormalMap,this.clearcoatNormalScale.copy(e.clearcoatNormalScale),this.dispersion=e.dispersion,this.ior=e.ior,this.iridescence=e.iridescence,this.iridescenceMap=e.iridescenceMap,this.iridescenceIOR=e.iridescenceIOR,this.iridescenceThicknessRange=[...e.iridescenceThicknessRange],this.iridescenceThicknessMap=e.iridescenceThicknessMap,this.sheen=e.sheen,this.sheenColor.copy(e.sheenColor),this.sheenColorMap=e.sheenColorMap,this.sheenRoughness=e.sheenRoughness,this.sheenRoughnessMap=e.sheenRoughnessMap,this.transmission=e.transmission,this.transmissionMap=e.transmissionMap,this.thickness=e.thickness,this.thicknessMap=e.thicknessMap,this.attenuationDistance=e.attenuationDistance,this.attenuationColor.copy(e.attenuationColor),this.specularIntensity=e.specularIntensity,this.specularIntensityMap=e.specularIntensityMap,this.specularColor.copy(e.specularColor),this.specularColorMap=e.specularColorMap,this}}class ap extends tH{constructor(e){super(),this.isMeshPhongMaterial=!0,this.type="MeshPhongMaterial",this.color=new tz(0xffffff),this.specular=new tz(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new tz(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Y(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new tn,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.specular.copy(e.specular),this.shininess=e.shininess,this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}}class af extends tH{constructor(e){super(),this.isMeshToonMaterial=!0,this.defines={TOON:""},this.type="MeshToonMaterial",this.color=new tz(0xffffff),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new tz(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Y(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.gradientMap=e.gradientMap,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.alphaMap=e.alphaMap,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}}class am extends tH{constructor(e){super(),this.isMeshNormalMaterial=!0,this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Y(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.flatShading=!1,this.setValues(e)}copy(e){return super.copy(e),this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.flatShading=e.flatShading,this}}class ag extends tH{constructor(e){super(),this.isMeshLambertMaterial=!0,this.type="MeshLambertMaterial",this.color=new tz(0xffffff),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new tz(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Y(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new tn,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}}class av extends tH{constructor(e){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=3200,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(e)}copy(e){return super.copy(e),this.depthPacking=e.depthPacking,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this}}class a_ extends tH{constructor(e){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(e)}copy(e){return super.copy(e),this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this}}class ay extends tH{constructor(e){super(),this.isMeshMatcapMaterial=!0,this.defines={MATCAP:""},this.type="MeshMatcapMaterial",this.color=new tz(0xffffff),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Y(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.defines={MATCAP:""},this.color.copy(e.color),this.matcap=e.matcap,this.map=e.map,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.alphaMap=e.alphaMap,this.flatShading=e.flatShading,this.fog=e.fog,this}}class ax extends iB{constructor(e){super(),this.isLineDashedMaterial=!0,this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(e)}copy(e){return super.copy(e),this.scale=e.scale,this.dashSize=e.dashSize,this.gapSize=e.gapSize,this}}function ab(e,t,n){return e&&(n||e.constructor!==t)?"number"==typeof t.BYTES_PER_ELEMENT?new t(e):Array.prototype.slice.call(e):e}function aS(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function aM(e){let t=e.length,n=Array(t);for(let e=0;e!==t;++e)n[e]=e;return n.sort(function(t,n){return e[t]-e[n]}),n}function aT(e,t,n){let i=e.length,r=new e.constructor(i);for(let a=0,s=0;s!==i;++a){let i=n[a]*t;for(let n=0;n!==t;++n)r[s++]=e[i+n]}return r}function aw(e,t,n,i){let r=1,a=e[0];for(;void 0!==a&&void 0===a[i];)a=e[r++];if(void 0===a)return;let s=a[i];if(void 0!==s)if(Array.isArray(s))do void 0!==(s=a[i])&&(t.push(a.time),n.push.apply(n,s)),a=e[r++];while(void 0!==a)else if(void 0!==s.toArray)do void 0!==(s=a[i])&&(t.push(a.time),s.toArray(n,n.length)),a=e[r++];while(void 0!==a)else do void 0!==(s=a[i])&&(t.push(a.time),n.push(s)),a=e[r++];while(void 0!==a)}let aE={convertArray:ab,isTypedArray:aS,getKeyframeOrder:aM,sortedArray:aT,flattenJSON:aw,subclip:function(e,t,n,i,r=30){let a=e.clone();a.name=t;let s=[];for(let e=0;e=i)){l.push(t.times[e]);for(let n=0;na.tracks[e].times[0]&&(o=a.tracks[e].times[0]);for(let e=0;e=r.times[d]){let e=d*u+l,t=e+u-l;i=r.values.slice(e,t)}else{let e=r.createInterpolant(),t=l,n=u-l;e.evaluate(a),i=e.resultBuffer.slice(t,n)}"quaternion"===s&&new ew().fromArray(i).normalize().conjugate().toArray(i);let p=o.times.length;for(let e=0;e=r)){let s=t[1];e=(r=t[--n-1]))break i}a=n,n=0;break r}break n}for(;n>>1;et;)--a;if(++a,0!==r||a!==i){r>=a&&(r=(a=Math.max(a,1))-1);let e=this.getValueSize();this.times=n.slice(r,a),this.values=this.values.slice(r*e,a*e)}return this}validate(){let e=!0,t=this.getValueSize();t-Math.floor(t)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),e=!1);let n=this.times,i=this.values,r=n.length;0===r&&(console.error("THREE.KeyframeTrack: Track is empty.",this),e=!1);let a=null;for(let t=0;t!==r;t++){let i=n[t];if("number"==typeof i&&isNaN(i)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,t,i),e=!1;break}if(null!==a&&a>i){console.error("THREE.KeyframeTrack: Out of order keys.",this,t,i,a),e=!1;break}a=i}if(void 0!==i&&aS(i))for(let t=0,n=i.length;t!==n;++t){let n=i[t];if(isNaN(n)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,t,n),e=!1;break}}return e}optimize(){let e=this.times.slice(),t=this.values.slice(),n=this.getValueSize(),i=2302===this.getInterpolation(),r=e.length-1,a=1;for(let s=1;s0){e[a]=e[r];for(let e=r*n,i=a*n,s=0;s!==n;++s)t[i+s]=t[e+s];++a}return a!==e.length?(this.times=e.slice(0,a),this.values=t.slice(0,a*n)):(this.times=e,this.values=t),this}clone(){let e=this.times.slice(),t=this.values.slice(),n=new this.constructor(this.name,e,t);return n.createInterpolant=this.createInterpolant,n}}aI.prototype.TimeBufferType=Float32Array,aI.prototype.ValueBufferType=Float32Array,aI.prototype.DefaultInterpolation=2301;class aL extends aI{constructor(e,t,n){super(e,t,n)}}aL.prototype.ValueTypeName="bool",aL.prototype.ValueBufferType=Array,aL.prototype.DefaultInterpolation=2300,aL.prototype.InterpolantFactoryMethodLinear=void 0,aL.prototype.InterpolantFactoryMethodSmooth=void 0;class aN extends aI{}aN.prototype.ValueTypeName="color";class aU extends aI{}aU.prototype.ValueTypeName="number";class aD extends aA{constructor(e,t,n,i){super(e,t,n,i)}interpolate_(e,t,n,i){let r=this.resultBuffer,a=this.sampleValues,s=this.valueSize,o=(n-t)/(i-t),l=e*s;for(let e=l+s;l!==e;l+=4)ew.slerpFlat(r,0,a,l-s,a,l,o);return r}}class aO extends aI{InterpolantFactoryMethodLinear(e){return new aD(this.times,this.values,this.getValueSize(),e)}}aO.prototype.ValueTypeName="quaternion",aO.prototype.InterpolantFactoryMethodSmooth=void 0;class aF extends aI{constructor(e,t,n){super(e,t,n)}}aF.prototype.ValueTypeName="string",aF.prototype.ValueBufferType=Array,aF.prototype.DefaultInterpolation=2300,aF.prototype.InterpolantFactoryMethodLinear=void 0,aF.prototype.InterpolantFactoryMethodSmooth=void 0;class az extends aI{}az.prototype.ValueTypeName="vector";class aB{constructor(e="",t=-1,n=[],i=2500){this.name=e,this.tracks=n,this.duration=t,this.blendMode=i,this.uuid=H(),this.duration<0&&this.resetDuration()}static parse(e){let t=[],n=e.tracks,i=1/(e.fps||1);for(let e=0,r=n.length;e!==r;++e)t.push((function(e){if(void 0===e.type)throw Error("THREE.KeyframeTrack: track type undefined, can not parse");let t=function(e){switch(e.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return aU;case"vector":case"vector2":case"vector3":case"vector4":return az;case"color":return aN;case"quaternion":return aO;case"bool":case"boolean":return aL;case"string":return aF}throw Error("THREE.KeyframeTrack: Unsupported typeName: "+e)}(e.type);if(void 0===e.times){let t=[],n=[];aw(e.keys,t,n,"value"),e.times=t,e.values=n}return void 0!==t.parse?t.parse(e):new t(e.name,e.times,e.values,e.interpolation)})(n[e]).scale(i));let r=new this(e.name,e.duration,t,e.blendMode);return r.uuid=e.uuid,r}static toJSON(e){let t=[],n=e.tracks,i={name:e.name,duration:e.duration,tracks:t,uuid:e.uuid,blendMode:e.blendMode};for(let e=0,i=n.length;e!==i;++e)t.push(aI.toJSON(n[e]));return i}static CreateFromMorphTargetSequence(e,t,n,i){let r=t.length,a=[];for(let e=0;e1){let e=a[1],t=i[e];t||(i[e]=t=[]),t.push(n)}}let a=[];for(let e in i)a.push(this.CreateFromMorphTargetSequence(e,i[e],t,n));return a}static parseAnimation(e,t){if(!e)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;let n=function(e,t,n,i,r){if(0!==n.length){let a=[],s=[];aw(n,a,s,i),0!==a.length&&r.push(new e(t,a,s))}},i=[],r=e.name||"default",a=e.fps||30,s=e.blendMode,o=e.length||-1,l=e.hierarchy||[];for(let e=0;e{t&&t(r),this.manager.itemEnd(e)},0),r;if(void 0!==aW[e])return void aW[e].push({onLoad:t,onProgress:n,onError:i});aW[e]=[],aW[e].push({onLoad:t,onProgress:n,onError:i});let a=new Request(e,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin"}),s=this.mimeType,o=this.responseType;fetch(a).then(t=>{if(200===t.status||0===t.status){if(0===t.status&&console.warn("THREE.FileLoader: HTTP Status 0 received."),"u"{if(i)e.close();else{let i=new ProgressEvent("progress",{lengthComputable:s,loaded:o+=r.byteLength,total:a});for(let e=0,t=n.length;e{e.error(t)})}()}}))}throw new aj(`fetch for "${t.url}" responded with ${t.status}: ${t.statusText}`,t)}).then(e=>{switch(o){case"arraybuffer":return e.arrayBuffer();case"blob":return e.blob();case"document":return e.text().then(e=>new DOMParser().parseFromString(e,s));case"json":return e.json();default:if(void 0===s)return e.text();{let t=/charset="?([^;"\s]*)"?/i.exec(s),n=new TextDecoder(t&&t[1]?t[1].toLowerCase():void 0);return e.arrayBuffer().then(e=>n.decode(e))}}}).then(t=>{ak.add(e,t);let n=aW[e];delete aW[e];for(let e=0,i=n.length;e{let n=aW[e];if(void 0===n)throw this.manager.itemError(e),t;delete aW[e];for(let e=0,i=n.length;e{this.manager.itemEnd(e)}),this.manager.itemStart(e)}setResponseType(e){return this.responseType=e,this}setMimeType(e){return this.mimeType=e,this}}class aq extends aG{constructor(e){super(e)}load(e,t,n,i){let r=this,a=new aX(this.manager);a.setPath(this.path),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,function(n){try{t(r.parse(JSON.parse(n)))}catch(t){i?i(t):console.error(t),r.manager.itemError(e)}},n,i)}parse(e){let t=[];for(let n=0;n0:i.vertexColors=e.vertexColors),void 0!==e.uniforms)for(let t in e.uniforms){let r=e.uniforms[t];switch(i.uniforms[t]={},r.type){case"t":i.uniforms[t].value=n(r.value);break;case"c":i.uniforms[t].value=new tz().setHex(r.value);break;case"v2":i.uniforms[t].value=new Y().fromArray(r.value);break;case"v3":i.uniforms[t].value=new eE().fromArray(r.value);break;case"v4":i.uniforms[t].value=new e_().fromArray(r.value);break;case"m3":i.uniforms[t].value=new Z().fromArray(r.value);break;case"m4":i.uniforms[t].value=new e2().fromArray(r.value);break;default:i.uniforms[t].value=r.value}}if(void 0!==e.defines&&(i.defines=e.defines),void 0!==e.vertexShader&&(i.vertexShader=e.vertexShader),void 0!==e.fragmentShader&&(i.fragmentShader=e.fragmentShader),void 0!==e.glslVersion&&(i.glslVersion=e.glslVersion),void 0!==e.extensions)for(let t in e.extensions)i.extensions[t]=e.extensions[t];if(void 0!==e.lights&&(i.lights=e.lights),void 0!==e.clipping&&(i.clipping=e.clipping),void 0!==e.size&&(i.size=e.size),void 0!==e.sizeAttenuation&&(i.sizeAttenuation=e.sizeAttenuation),void 0!==e.map&&(i.map=n(e.map)),void 0!==e.matcap&&(i.matcap=n(e.matcap)),void 0!==e.alphaMap&&(i.alphaMap=n(e.alphaMap)),void 0!==e.bumpMap&&(i.bumpMap=n(e.bumpMap)),void 0!==e.bumpScale&&(i.bumpScale=e.bumpScale),void 0!==e.normalMap&&(i.normalMap=n(e.normalMap)),void 0!==e.normalMapType&&(i.normalMapType=e.normalMapType),void 0!==e.normalScale){let t=e.normalScale;!1===Array.isArray(t)&&(t=[t,t]),i.normalScale=new Y().fromArray(t)}return void 0!==e.displacementMap&&(i.displacementMap=n(e.displacementMap)),void 0!==e.displacementScale&&(i.displacementScale=e.displacementScale),void 0!==e.displacementBias&&(i.displacementBias=e.displacementBias),void 0!==e.roughnessMap&&(i.roughnessMap=n(e.roughnessMap)),void 0!==e.metalnessMap&&(i.metalnessMap=n(e.metalnessMap)),void 0!==e.emissiveMap&&(i.emissiveMap=n(e.emissiveMap)),void 0!==e.emissiveIntensity&&(i.emissiveIntensity=e.emissiveIntensity),void 0!==e.specularMap&&(i.specularMap=n(e.specularMap)),void 0!==e.specularIntensityMap&&(i.specularIntensityMap=n(e.specularIntensityMap)),void 0!==e.specularColorMap&&(i.specularColorMap=n(e.specularColorMap)),void 0!==e.envMap&&(i.envMap=n(e.envMap)),void 0!==e.envMapRotation&&i.envMapRotation.fromArray(e.envMapRotation),void 0!==e.envMapIntensity&&(i.envMapIntensity=e.envMapIntensity),void 0!==e.reflectivity&&(i.reflectivity=e.reflectivity),void 0!==e.refractionRatio&&(i.refractionRatio=e.refractionRatio),void 0!==e.lightMap&&(i.lightMap=n(e.lightMap)),void 0!==e.lightMapIntensity&&(i.lightMapIntensity=e.lightMapIntensity),void 0!==e.aoMap&&(i.aoMap=n(e.aoMap)),void 0!==e.aoMapIntensity&&(i.aoMapIntensity=e.aoMapIntensity),void 0!==e.gradientMap&&(i.gradientMap=n(e.gradientMap)),void 0!==e.clearcoatMap&&(i.clearcoatMap=n(e.clearcoatMap)),void 0!==e.clearcoatRoughnessMap&&(i.clearcoatRoughnessMap=n(e.clearcoatRoughnessMap)),void 0!==e.clearcoatNormalMap&&(i.clearcoatNormalMap=n(e.clearcoatNormalMap)),void 0!==e.clearcoatNormalScale&&(i.clearcoatNormalScale=new Y().fromArray(e.clearcoatNormalScale)),void 0!==e.iridescenceMap&&(i.iridescenceMap=n(e.iridescenceMap)),void 0!==e.iridescenceThicknessMap&&(i.iridescenceThicknessMap=n(e.iridescenceThicknessMap)),void 0!==e.transmissionMap&&(i.transmissionMap=n(e.transmissionMap)),void 0!==e.thicknessMap&&(i.thicknessMap=n(e.thicknessMap)),void 0!==e.anisotropyMap&&(i.anisotropyMap=n(e.anisotropyMap)),void 0!==e.sheenColorMap&&(i.sheenColorMap=n(e.sheenColorMap)),void 0!==e.sheenRoughnessMap&&(i.sheenRoughnessMap=n(e.sheenRoughnessMap)),i}setTextures(e){return this.textures=e,this}createMaterialFromType(e){return su.createMaterialFromType(e)}static createMaterialFromType(e){return new({ShadowMaterial:au,SpriteMaterial:nO,RawShaderMaterial:ac,ShaderMaterial:nb,PointsMaterial:iQ,MeshPhysicalMaterial:ad,MeshStandardMaterial:ah,MeshPhongMaterial:ap,MeshToonMaterial:af,MeshNormalMaterial:am,MeshLambertMaterial:ag,MeshDepthMaterial:av,MeshDistanceMaterial:a_,MeshBasicMaterial:tV,MeshMatcapMaterial:ay,LineDashedMaterial:ax,LineBasicMaterial:iB,Material:tH})[e]}}class sc{static decodeText(e){if(console.warn("THREE.LoaderUtils: decodeText() has been deprecated with r165 and will be removed with r175. Use TextDecoder instead."),"u">typeof TextDecoder)return new TextDecoder().decode(e);let t="";for(let n=0,i=e.length;n0){(n=new aZ(new aH(t))).setCrossOrigin(this.crossOrigin);for(let t=0,n=e.length;t0){(t=new aZ(this.manager)).setCrossOrigin(this.crossOrigin);for(let t=0,n=e.length;t{let t=new eR;t.min.fromArray(e.boxMin),t.max.fromArray(e.boxMax);let n=new eq;return n.radius=e.sphereRadius,n.center.fromArray(e.sphereCenter),{boxInitialized:e.boxInitialized,box:t,sphereInitialized:e.sphereInitialized,sphere:n}}),a._maxInstanceCount=e.maxInstanceCount,a._maxVertexCount=e.maxVertexCount,a._maxIndexCount=e.maxIndexCount,a._geometryInitialized=e.geometryInitialized,a._geometryCount=e.geometryCount,a._matricesTexture=c(e.matricesTexture.uuid),void 0!==e.colorsTexture&&(a._colorsTexture=c(e.colorsTexture.uuid));break;case"LOD":a=new nQ;break;case"Line":a=new iq(l(e.geometry),u(e.material));break;case"LineLoop":a=new i$(l(e.geometry),u(e.material));break;case"LineSegments":a=new iK(l(e.geometry),u(e.material));break;case"PointCloud":case"Points":a=new i4(l(e.geometry),u(e.material));break;case"Sprite":a=new nZ(u(e.material));break;case"Group":a=new i6;break;case"Bone":a=new ie;break;default:a=new ty}if(a.uuid=e.uuid,void 0!==e.name&&(a.name=e.name),void 0!==e.matrix?(a.matrix.fromArray(e.matrix),void 0!==e.matrixAutoUpdate&&(a.matrixAutoUpdate=e.matrixAutoUpdate),a.matrixAutoUpdate&&a.matrix.decompose(a.position,a.quaternion,a.scale)):(void 0!==e.position&&a.position.fromArray(e.position),void 0!==e.rotation&&a.rotation.fromArray(e.rotation),void 0!==e.quaternion&&a.quaternion.fromArray(e.quaternion),void 0!==e.scale&&a.scale.fromArray(e.scale)),void 0!==e.up&&a.up.fromArray(e.up),void 0!==e.castShadow&&(a.castShadow=e.castShadow),void 0!==e.receiveShadow&&(a.receiveShadow=e.receiveShadow),e.shadow&&(void 0!==e.shadow.intensity&&(a.shadow.intensity=e.shadow.intensity),void 0!==e.shadow.bias&&(a.shadow.bias=e.shadow.bias),void 0!==e.shadow.normalBias&&(a.shadow.normalBias=e.shadow.normalBias),void 0!==e.shadow.radius&&(a.shadow.radius=e.shadow.radius),void 0!==e.shadow.mapSize&&a.shadow.mapSize.fromArray(e.shadow.mapSize),void 0!==e.shadow.camera&&(a.shadow.camera=this.parseObject(e.shadow.camera))),void 0!==e.visible&&(a.visible=e.visible),void 0!==e.frustumCulled&&(a.frustumCulled=e.frustumCulled),void 0!==e.renderOrder&&(a.renderOrder=e.renderOrder),void 0!==e.userData&&(a.userData=e.userData),void 0!==e.layers&&(a.layers.mask=e.layers),void 0!==e.children){let s=e.children;for(let e=0;e{t&&t(n),r.manager.itemEnd(e)}).catch(e=>{i&&i(e)}):(setTimeout(function(){t&&t(a),r.manager.itemEnd(e)},0),a);let s={};s.credentials="anonymous"===this.crossOrigin?"same-origin":"include",s.headers=this.requestHeader;let o=fetch(e,s).then(function(e){return e.blob()}).then(function(e){return createImageBitmap(e,Object.assign(r.options,{colorSpaceConversion:"none"}))}).then(function(n){return ak.add(e,n),t&&t(n),r.manager.itemEnd(e),n}).catch(function(t){i&&i(t),ak.remove(e),r.manager.itemError(e),r.manager.itemEnd(e)});ak.add(e,o),r.manager.itemStart(e)}}class s_{static getContext(){return void 0===i&&(i=new(window.AudioContext||window.webkitAudioContext)),i}static setContext(e){i=e}}class sy extends aG{constructor(e){super(e)}load(e,t,n,i){let r=this,a=new aX(this.manager);function s(t){i?i(t):console.error(t),r.manager.itemError(e)}a.setResponseType("arraybuffer"),a.setPath(this.path),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,function(e){try{let n=e.slice(0);s_.getContext().decodeAudioData(n,function(e){t(e)}).catch(s)}catch(e){s(e)}},n,i)}}let sx=new e2,sb=new e2,sS=new e2;class sM{constructor(){this.type="StereoCamera",this.aspect=1,this.eyeSep=.064,this.cameraL=new nE,this.cameraL.layers.enable(1),this.cameraL.matrixAutoUpdate=!1,this.cameraR=new nE,this.cameraR.layers.enable(2),this.cameraR.matrixAutoUpdate=!1,this._cache={focus:null,fov:null,aspect:null,near:null,far:null,zoom:null,eyeSep:null}}update(e){let t=this._cache;if(t.focus!==e.focus||t.fov!==e.fov||t.aspect!==e.aspect*this.aspect||t.near!==e.near||t.far!==e.far||t.zoom!==e.zoom||t.eyeSep!==this.eyeSep){let n,i;t.focus=e.focus,t.fov=e.fov,t.aspect=e.aspect*this.aspect,t.near=e.near,t.far=e.far,t.zoom=e.zoom,t.eyeSep=this.eyeSep,sS.copy(e.projectionMatrix);let r=t.eyeSep/2,a=r*t.near/t.focus,s=t.near*Math.tan(B*t.fov*.5)/t.zoom;sb.elements[12]=-r,sx.elements[12]=r,n=-s*t.aspect+a,i=s*t.aspect+a,sS.elements[0]=2*t.near/(i-n),sS.elements[8]=(i+n)/(i-n),this.cameraL.projectionMatrix.copy(sS),n=-s*t.aspect-a,i=s*t.aspect-a,sS.elements[0]=2*t.near/(i-n),sS.elements[8]=(i+n)/(i-n),this.cameraR.projectionMatrix.copy(sS)}this.cameraL.matrixWorld.copy(e.matrixWorld).multiply(sb),this.cameraR.matrixWorld.copy(e.matrixWorld).multiply(sx)}}class sT extends nE{constructor(e=[]){super(),this.isArrayCamera=!0,this.cameras=e}}class sw{constructor(e=!0){this.autoStart=e,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}start(){this.startTime=sE(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0}stop(){this.getElapsedTime(),this.running=!1,this.autoStart=!1}getElapsedTime(){return this.getDelta(),this.elapsedTime}getDelta(){let e=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){let t=sE();e=(t-this.oldTime)/1e3,this.oldTime=t,this.elapsedTime+=e}return e}}function sE(){return performance.now()}let sA=new eE,sC=new ew,sR=new eE,sP=new eE;class sI extends ty{constructor(){super(),this.type="AudioListener",this.context=s_.getContext(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null,this.timeDelta=0,this._clock=new sw}getInput(){return this.gain}removeFilter(){return null!==this.filter&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null),this}getFilter(){return this.filter}setFilter(e){return null!==this.filter?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination),this.filter=e,this.gain.connect(this.filter),this.filter.connect(this.context.destination),this}getMasterVolume(){return this.gain.gain.value}setMasterVolume(e){return this.gain.gain.setTargetAtTime(e,this.context.currentTime,.01),this}updateMatrixWorld(e){super.updateMatrixWorld(e);let t=this.context.listener,n=this.up;if(this.timeDelta=this._clock.getDelta(),this.matrixWorld.decompose(sA,sC,sR),sP.set(0,0,-1).applyQuaternion(sC),t.positionX){let e=this.context.currentTime+this.timeDelta;t.positionX.linearRampToValueAtTime(sA.x,e),t.positionY.linearRampToValueAtTime(sA.y,e),t.positionZ.linearRampToValueAtTime(sA.z,e),t.forwardX.linearRampToValueAtTime(sP.x,e),t.forwardY.linearRampToValueAtTime(sP.y,e),t.forwardZ.linearRampToValueAtTime(sP.z,e),t.upX.linearRampToValueAtTime(n.x,e),t.upY.linearRampToValueAtTime(n.y,e),t.upZ.linearRampToValueAtTime(n.z,e)}else t.setPosition(sA.x,sA.y,sA.z),t.setOrientation(sP.x,sP.y,sP.z,n.x,n.y,n.z)}}class sL extends ty{constructor(e){super(),this.type="Audio",this.listener=e,this.context=e.context,this.gain=this.context.createGain(),this.gain.connect(e.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.source=null,this.sourceType="empty",this._startedAt=0,this._progress=0,this._connected=!1,this.filters=[]}getOutput(){return this.gain}setNodeSource(e){return this.hasPlaybackControl=!1,this.sourceType="audioNode",this.source=e,this.connect(),this}setMediaElementSource(e){return this.hasPlaybackControl=!1,this.sourceType="mediaNode",this.source=this.context.createMediaElementSource(e),this.connect(),this}setMediaStreamSource(e){return this.hasPlaybackControl=!1,this.sourceType="mediaStreamNode",this.source=this.context.createMediaStreamSource(e),this.connect(),this}setBuffer(e){return this.buffer=e,this.sourceType="buffer",this.autoplay&&this.play(),this}play(e=0){if(!0===this.isPlaying)return void console.warn("THREE.Audio: Audio is already playing.");if(!1===this.hasPlaybackControl)return void console.warn("THREE.Audio: this Audio has no playback control.");this._startedAt=this.context.currentTime+e;let t=this.context.createBufferSource();return t.buffer=this.buffer,t.loop=this.loop,t.loopStart=this.loopStart,t.loopEnd=this.loopEnd,t.onended=this.onEnded.bind(this),t.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=t,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){return!1===this.hasPlaybackControl?void console.warn("THREE.Audio: this Audio has no playback control."):(!0===this.isPlaying&&(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,!0===this.loop&&(this._progress=this._progress%(this.duration||this.buffer.duration)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this)}stop(e=0){return!1===this.hasPlaybackControl?void console.warn("THREE.Audio: this Audio has no playback control."):(this._progress=0,null!==this.source&&(this.source.stop(this.context.currentTime+e),this.source.onended=null),this.isPlaying=!1,this)}connect(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(let e=1,t=this.filters.length;e0){this.source.disconnect(this.filters[0]);for(let e=1,t=this.filters.length;e0&&this._mixBufferRegionAdditive(n,i,this._addIndex*t,1,t);for(let e=t,r=t+t;e!==r;++e)if(n[e]!==n[e+t]){s.setValue(n,i);break}}saveOriginalState(){let e=this.binding,t=this.buffer,n=this.valueSize,i=n*this._origIndex;e.getValue(t,i);for(let e=n;e!==i;++e)t[e]=t[i+e%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){let e=3*this.valueSize;this.binding.setValue(this.buffer,e)}_setAdditiveIdentityNumeric(){let e=this._addIndex*this.valueSize,t=e+this.valueSize;for(let n=e;n=.5)for(let i=0;i!==r;++i)e[t+i]=e[n+i]}_slerp(e,t,n,i){ew.slerpFlat(e,t,e,t,e,n,i)}_slerpAdditive(e,t,n,i,r){let a=this._workIndex*r;ew.multiplyQuaternionsFlat(e,a,e,t,e,n),ew.slerpFlat(e,t,e,t,e,a,i)}_lerp(e,t,n,i,r){let a=1-i;for(let s=0;s!==r;++s){let r=t+s;e[r]=e[r]*a+e[n+s]*i}}_lerpAdditive(e,t,n,i,r){for(let a=0;a!==r;++a){let r=t+a;e[r]=e[r]+e[n+a]*i}}}let sk="\\[\\]\\.:\\/",sH=RegExp("["+sk+"]","g"),sV="[^"+sk+"]",sG="[^"+sk.replace("\\.","")+"]",sW=RegExp("^"+/((?:WC+[\/:])*)/.source.replace("WC",sV)+/(WCOD+)?/.source.replace("WCOD",sG)+/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",sV)+/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",sV)+"$"),sj=["material","materials","bones","map"];class sX{constructor(e,t,n){this.path=t,this.parsedPath=n||sX.parseTrackName(t),this.node=sX.findNode(e,this.parsedPath.nodeName),this.rootNode=e,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(e,t,n){return e&&e.isAnimationObjectGroup?new sX.Composite(e,t,n):new sX(e,t,n)}static sanitizeNodeName(e){return e.replace(/\s/g,"_").replace(sH,"")}static parseTrackName(e){let t=sW.exec(e);if(null===t)throw Error("PropertyBinding: Cannot parse trackName: "+e);let n={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},i=n.nodeName&&n.nodeName.lastIndexOf(".");if(void 0!==i&&-1!==i){let e=n.nodeName.substring(i+1);-1!==sj.indexOf(e)&&(n.nodeName=n.nodeName.substring(0,i),n.objectName=e)}if(null===n.propertyName||0===n.propertyName.length)throw Error("PropertyBinding: can not parse propertyName from trackName: "+e);return n}static findNode(e,t){if(void 0===t||""===t||"."===t||-1===t||t===e.name||t===e.uuid)return e;if(e.skeleton){let n=e.skeleton.getBoneByName(t);if(void 0!==n)return n}if(e.children){let n=function(e){for(let i=0;i=r){let a=r++,u=e[a];t[u.uuid]=l,e[l]=u,t[o]=a,e[a]=s;for(let e=0;e!==i;++e){let t=n[e],i=t[a],r=t[l];t[l]=i,t[a]=r}}}this.nCachedObjects_=r}uncache(){let e=this._objects,t=this._indicesByUUID,n=this._bindings,i=n.length,r=this.nCachedObjects_,a=e.length;for(let s=0,o=arguments.length;s!==o;++s){let o=arguments[s],l=o.uuid,u=t[l];if(void 0!==u)if(delete t[l],u0&&(t[s.uuid]=u),e[u]=s,e.pop();for(let e=0;e!==i;++e){let t=n[e];t[u]=t[r],t.pop()}}}this.nCachedObjects_=r}subscribe_(e,t){let n=this._bindingsIndicesByPath,i=n[e],r=this._bindings;if(void 0!==i)return r[i];let a=this._paths,s=this._parsedPaths,o=this._objects,l=o.length,u=this.nCachedObjects_,c=Array(l);i=r.length,n[e]=i,a.push(e),s.push(t),r.push(c);for(let n=u,i=o.length;n!==i;++n){let i=o[n];c[n]=new sX(i,e,t)}return c}unsubscribe_(e){let t=this._bindingsIndicesByPath,n=t[e];if(void 0!==n){let i=this._paths,r=this._parsedPaths,a=this._bindings,s=a.length-1,o=a[s];t[e[s]]=n,a[n]=o,a.pop(),r[n]=r[s],r.pop(),i[n]=i[s],i.pop()}}}class sY{constructor(e,t,n=null,i=t.blendMode){this._mixer=e,this._clip=t,this._localRoot=n,this.blendMode=i;const r=t.tracks,a=r.length,s=Array(a),o={endingStart:2400,endingEnd:2400};for(let e=0;e!==a;++e){const t=r[e].createInterpolant(null);s[e]=t,t.settings=o}this._interpolantSettings=o,this._interpolants=s,this._propertyBindings=Array(a),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=2201,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(e){return this._startTime=e,this}setLoop(e,t){return this.loop=e,this.repetitions=t,this}setEffectiveWeight(e){return this.weight=e,this._effectiveWeight=this.enabled?e:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(e){return this._scheduleFading(e,0,1)}fadeOut(e){return this._scheduleFading(e,1,0)}crossFadeFrom(e,t,n){if(e.fadeOut(t),this.fadeIn(t),n){let n=this._clip.duration,i=e._clip.duration;e.warp(1,i/n,t),this.warp(n/i,1,t)}return this}crossFadeTo(e,t,n){return e.crossFadeFrom(this,t,n)}stopFading(){let e=this._weightInterpolant;return null!==e&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(e)),this}setEffectiveTimeScale(e){return this.timeScale=e,this._effectiveTimeScale=this.paused?0:e,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(e){return this.timeScale=this._clip.duration/e,this.stopWarping()}syncWith(e){return this.time=e.time,this.timeScale=e.timeScale,this.stopWarping()}halt(e){return this.warp(this._effectiveTimeScale,0,e)}warp(e,t,n){let i=this._mixer,r=i.time,a=this.timeScale,s=this._timeScaleInterpolant;null===s&&(s=i._lendControlInterpolant(),this._timeScaleInterpolant=s);let o=s.parameterPositions,l=s.sampleValues;return o[0]=r,o[1]=r+n,l[0]=e/a,l[1]=t/a,this}stopWarping(){let e=this._timeScaleInterpolant;return null!==e&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(e)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(e,t,n,i){if(!this.enabled)return void this._updateWeight(e);let r=this._startTime;if(null!==r){let i=(e-r)*n;i<0||0===n?t=0:(this._startTime=null,t=n*i)}t*=this._updateTimeScale(e);let a=this._updateTime(t),s=this._updateWeight(e);if(s>0){let e=this._interpolants,t=this._propertyBindings;if(2501===this.blendMode)for(let n=0,i=e.length;n!==i;++n)e[n].evaluate(a),t[n].accumulateAdditive(s);else for(let n=0,r=e.length;n!==r;++n)e[n].evaluate(a),t[n].accumulate(i,s)}}_updateWeight(e){let t=0;if(this.enabled){t=this.weight;let n=this._weightInterpolant;if(null!==n){let i=n.evaluate(e)[0];t*=i,e>n.parameterPositions[1]&&(this.stopFading(),0===i&&(this.enabled=!1))}}return this._effectiveWeight=t,t}_updateTimeScale(e){let t=0;if(!this.paused){t=this.timeScale;let n=this._timeScaleInterpolant;null!==n&&(t*=n.evaluate(e)[0],e>n.parameterPositions[1]&&(this.stopWarping(),0===t?this.paused=!0:this.timeScale=t))}return this._effectiveTimeScale=t,t}_updateTime(e){let t=this._clip.duration,n=this.loop,i=this.time+e,r=this._loopCount,a=2202===n;if(0===e)return -1===r?i:a&&(1&r)==1?t-i:i;if(2200===n){-1===r&&(this._loopCount=0,this._setEndings(!0,!0,!1));s:{if(i>=t)i=t;else if(i<0)i=0;else{this.time=i;break s}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:e<0?-1:1})}}else{if(-1===r&&(e>=0?(r=0,this._setEndings(!0,0===this.repetitions,a)):this._setEndings(0===this.repetitions,!0,a)),i>=t||i<0){let n=Math.floor(i/t);i-=t*n,r+=Math.abs(n);let s=this.repetitions-r;if(s<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,i=e>0?t:0,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:e>0?1:-1});else{if(1===s){let t=e<0;this._setEndings(t,!t,a)}else this._setEndings(!1,!1,a);this._loopCount=r,this.time=i,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:n})}}else this.time=i;if(a&&(1&r)==1)return t-i}return i}_setEndings(e,t,n){let i=this._interpolantSettings;n?(i.endingStart=2401,i.endingEnd=2401):(e?i.endingStart=this.zeroSlopeAtStart?2401:2400:i.endingStart=2402,t?i.endingEnd=this.zeroSlopeAtEnd?2401:2400:i.endingEnd=2402)}_scheduleFading(e,t,n){let i=this._mixer,r=i.time,a=this._weightInterpolant;null===a&&(a=i._lendControlInterpolant(),this._weightInterpolant=a);let s=a.parameterPositions,o=a.sampleValues;return s[0]=r,o[0]=t,s[1]=r+e,o[1]=n,this}}let sZ=new Float32Array(1);class sJ extends O{constructor(e){super(),this._root=e,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(e,t){let n=e._localRoot||this._root,i=e._clip.tracks,r=i.length,a=e._propertyBindings,s=e._interpolants,o=n.uuid,l=this._bindingsByRootAndName,u=l[o];void 0===u&&(u={},l[o]=u);for(let e=0;e!==r;++e){let r=i[e],l=r.name,c=u[l];if(void 0!==c)++c.referenceCount,a[e]=c;else{if(void 0!==(c=a[e])){null===c._cacheIndex&&(++c.referenceCount,this._addInactiveBinding(c,o,l));continue}let i=t&&t._propertyBindings[e].binding.parsedPath;c=new sB(sX.create(n,l,i),r.ValueTypeName,r.getValueSize()),++c.referenceCount,this._addInactiveBinding(c,o,l),a[e]=c}s[e].resultBuffer=c.buffer}}_activateAction(e){if(!this._isActiveAction(e)){if(null===e._cacheIndex){let t=(e._localRoot||this._root).uuid,n=e._clip.uuid,i=this._actionsByClip[n];this._bindAction(e,i&&i.knownActions[0]),this._addInactiveAction(e,n,t)}let t=e._propertyBindings;for(let e=0,n=t.length;e!==n;++e){let n=t[e];0==n.useCount++&&(this._lendBinding(n),n.saveOriginalState())}this._lendAction(e)}}_deactivateAction(e){if(this._isActiveAction(e)){let t=e._propertyBindings;for(let e=0,n=t.length;e!==n;++e){let n=t[e];0==--n.useCount&&(n.restoreOriginalState(),this._takeBackBinding(n))}this._takeBackAction(e)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;let e=this;this.stats={actions:{get total(){return e._actions.length},get inUse(){return e._nActiveActions}},bindings:{get total(){return e._bindings.length},get inUse(){return e._nActiveBindings}},controlInterpolants:{get total(){return e._controlInterpolants.length},get inUse(){return e._nActiveControlInterpolants}}}}_isActiveAction(e){let t=e._cacheIndex;return null!==t&&t=0;--n)e[n].stop();return this}update(e){e*=this.timeScale;let t=this._actions,n=this._nActiveActions,i=this.time+=e,r=Math.sign(e),a=this._accuIndex^=1;for(let s=0;s!==n;++s)t[s]._update(i,e,r,a);let s=this._bindings,o=this._nActiveBindings;for(let e=0;e!==o;++e)s[e].apply(a);return this}setTime(e){this.time=0;for(let e=0;e=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,s7).distanceTo(e)}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}}let ot=new eE,on=new eE;class oi{constructor(e=new eE,t=new eE){this.start=e,this.end=t}set(e,t){return this.start.copy(e),this.end.copy(t),this}copy(e){return this.start.copy(e.start),this.end.copy(e.end),this}getCenter(e){return e.addVectors(this.start,this.end).multiplyScalar(.5)}delta(e){return e.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(e,t){return this.delta(t).multiplyScalar(e).add(this.start)}closestPointToPointParameter(e,t){ot.subVectors(e,this.start),on.subVectors(this.end,this.start);let n=on.dot(on),i=on.dot(ot)/n;return t&&(i=V(i,0,1)),i}closestPointToPoint(e,t,n){let i=this.closestPointToPointParameter(e,t);return this.delta(n).multiplyScalar(i).add(this.start)}applyMatrix4(e){return this.start.applyMatrix4(e),this.end.applyMatrix4(e),this}equals(e){return e.start.equals(this.start)&&e.end.equals(this.end)}clone(){return new this.constructor().copy(this)}}let or=new eE;class oa extends ty{constructor(e,t){super(),this.light=e,this.matrixAutoUpdate=!1,this.color=t,this.type="SpotLightHelper";const n=new nn,i=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1];for(let e=0,t=1;e<32;e++,t++){const n=e/32*Math.PI*2,r=t/32*Math.PI*2;i.push(Math.cos(n),Math.sin(n),1,Math.cos(r),Math.sin(r),1)}n.setAttribute("position",new t4(i,3));const r=new iB({fog:!1,toneMapped:!1});this.cone=new iK(n,r),this.add(this.cone),this.update()}dispose(){this.cone.geometry.dispose(),this.cone.material.dispose()}update(){this.light.updateWorldMatrix(!0,!1),this.light.target.updateWorldMatrix(!0,!1),this.parent?(this.parent.updateWorldMatrix(!0),this.matrix.copy(this.parent.matrixWorld).invert().multiply(this.light.matrixWorld)):this.matrix.copy(this.light.matrixWorld),this.matrixWorld.copy(this.light.matrixWorld);let e=this.light.distance?this.light.distance:1e3,t=e*Math.tan(this.light.angle);this.cone.scale.set(t,t,e),or.setFromMatrixPosition(this.light.target.matrixWorld),this.cone.lookAt(or),void 0!==this.color?this.cone.material.color.set(this.color):this.cone.material.color.copy(this.light.color)}}let os=new eE,oo=new e2,ol=new e2;class ou extends iK{constructor(e){const t=function e(t){let n=[];!0===t.isBone&&n.push(t);for(let i=0;i1)for(let n=0;n.99999)this.quaternion.set(0,0,0,1);else if(e.y<-.99999)this.quaternion.set(1,0,0,0);else{oR.set(e.z,0,-e.x).normalize();let t=Math.acos(e.y);this.quaternion.setFromAxisAngle(oR,t)}}setLength(e,t=.2*e,n=.2*t){this.line.scale.set(1,Math.max(1e-4,e-t),1),this.line.updateMatrix(),this.cone.scale.set(n,t,n),this.cone.position.y=e,this.cone.updateMatrix()}setColor(e){this.line.material.color.set(e),this.cone.material.color.set(e)}copy(e){return super.copy(e,!1),this.line.copy(e.line),this.cone.copy(e.cone),this}dispose(){this.line.geometry.dispose(),this.line.material.dispose(),this.cone.geometry.dispose(),this.cone.material.dispose()}}class oI extends iK{constructor(e=1){const t=new nn;t.setAttribute("position",new t4([0,0,0,e,0,0,0,0,0,0,e,0,0,0,0,0,0,e],3)),t.setAttribute("color",new t4([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],3)),super(t,new iB({vertexColors:!0,toneMapped:!1})),this.type="AxesHelper"}setColors(e,t,n){let i=new tz,r=this.geometry.attributes.color.array;return i.set(e),i.toArray(r,0),i.toArray(r,3),i.set(t),i.toArray(r,6),i.toArray(r,9),i.set(n),i.toArray(r,12),i.toArray(r,15),this.geometry.attributes.color.needsUpdate=!0,this}dispose(){this.geometry.dispose(),this.material.dispose()}}class oL{constructor(){this.type="ShapePath",this.color=new tz,this.subPaths=[],this.currentPath=null}moveTo(e,t){return this.currentPath=new rw,this.subPaths.push(this.currentPath),this.currentPath.moveTo(e,t),this}lineTo(e,t){return this.currentPath.lineTo(e,t),this}quadraticCurveTo(e,t,n,i){return this.currentPath.quadraticCurveTo(e,t,n,i),this}bezierCurveTo(e,t,n,i,r,a){return this.currentPath.bezierCurveTo(e,t,n,i,r,a),this}splineThru(e){return this.currentPath.splineThru(e),this}toShapes(e){let t,n,i,r,a,s=r1.isClockWise,o=this.subPaths;if(0===o.length)return[];let l=[];if(1===o.length)return n=o[0],(i=new rz).curves=n.curves,l.push(i),l;let u=!s(o[0].getPoints());u=e?!u:u;let c=[],h=[],d=[],p=0;h[0]=void 0,d[p]=[];for(let i=0,a=o.length;i1){let e=!1,t=0;for(let e=0,t=h.length;eNumber.EPSILON){if(l<0&&(n=t[a],o=-o,s=t[r],l=-l),e.ys.y)continue;if(e.y===n.y){if(e.x===n.x)return!0}else{let t=l*(e.x-n.x)-o*(e.y-n.y);if(0===t)return!0;if(t<0)continue;i=!i}}else{if(e.y!==n.y)continue;if(s.x<=e.x&&e.x<=n.x||n.x<=e.x&&e.x<=s.x)return!0}}return i})(a.p,h[i].p)&&(n!==i&&t++,s?(s=!1,c[i].push(a)):e=!0);s&&c[n].push(a)}}t>0&&!1===e&&(d=c)}for(let e=0,t=h.length;et?(e.repeat.x=1,e.repeat.y=n/t,e.offset.x=0,e.offset.y=(1-e.repeat.y)/2):(e.repeat.x=t/n,e.repeat.y=1,e.offset.x=(1-e.repeat.x)/2,e.offset.y=0),e},cover:function(e,t){let n=e.image&&e.image.width?e.image.width/e.image.height:1;return n>t?(e.repeat.x=t/n,e.repeat.y=1,e.offset.x=(1-e.repeat.x)/2,e.offset.y=0):(e.repeat.x=1,e.repeat.y=n/t,e.offset.x=0,e.offset.y=(1-e.repeat.y)/2),e},fill:function(e){return e.repeat.x=1,e.repeat.y=1,e.offset.x=0,e.offset.y=0,e},getByteLength:oU};class oO extends ex{constructor(e=1,t=1,n=1,i={}){console.warn('THREE.WebGLMultipleRenderTargets has been deprecated and will be removed in r172. Use THREE.WebGLRenderTarget and set the "count" parameter to enable MRT.'),super(e,t,{...i,count:n}),this.isWebGLMultipleRenderTargets=!0}get texture(){return this.textures}}function oF(){let e=null,t=!1,n=null,i=null;function r(t,a){n(t,a),i=e.requestAnimationFrame(r)}return{start:function(){!0===t||null!==n&&(i=e.requestAnimationFrame(r),t=!0)},stop:function(){e.cancelAnimationFrame(i),t=!1},setAnimationLoop:function(e){n=e},setContext:function(t){e=t}}}function oz(e){let t=new WeakMap;return{get:function(e){return e.isInterleavedBufferAttribute&&(e=e.data),t.get(e)},remove:function(n){n.isInterleavedBufferAttribute&&(n=n.data);let i=t.get(n);i&&(e.deleteBuffer(i.buffer),t.delete(n))},update:function(n,i){if(n.isInterleavedBufferAttribute&&(n=n.data),n.isGLBufferAttribute){let e=t.get(n);(!e||e.versione.start-t.start);let t=0;for(let e=1;etypeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:"171"}})),"u">typeof window&&(window.__THREE__?console.warn("WARNING: Multiple instances of Three.js being imported."):window.__THREE__="171"),e.s(["ACESFilmicToneMapping",0,4,"AddEquation",0,100,"AddOperation",0,2,"AdditiveAnimationBlendMode",0,2501,"AdditiveBlending",0,2,"AgXToneMapping",0,6,"AlphaFormat",0,1021,"AlwaysCompare",0,519,"AlwaysDepth",0,1,"AlwaysStencilFunc",0,519,"AmbientLight",0,sa,"AnimationAction",0,sY,"AnimationClip",0,aB,"AnimationLoader",0,aq,"AnimationMixer",0,sJ,"AnimationObjectGroup",0,sq,"AnimationUtils",0,aE,"ArcCurve",0,rs,"ArrayCamera",0,sT,"ArrowHelper",0,oP,"AttachedBindMode",0,R,"Audio",0,sL,"AudioAnalyser",0,sz,"AudioContext",0,s_,"AudioListener",0,sI,"AudioLoader",0,sy,"AxesHelper",0,oI,"BackSide",0,1,"BasicDepthPacking",0,3200,"BasicShadowMap",0,0,"BatchedMesh",0,iz,"Bone",0,ie,"BooleanKeyframeTrack",0,aL,"Box2",0,oe,"Box3",0,eR,"Box3Helper",0,oA,"BoxGeometry",0,ng,"BoxHelper",0,oE,"BufferAttribute",0,tZ,"BufferGeometry",0,nn,"BufferGeometryLoader",0,sd,"ByteType",0,1010,"Cache",0,ak,"Camera",0,nS,"CameraHelper",0,oM,"CanvasTexture",0,rn,"CapsuleGeometry",0,rA,"CatmullRomCurve3",0,rd,"CineonToneMapping",0,3,"CircleGeometry",0,rC,"ClampToEdgeWrapping",0,1001,"Clock",0,sw,"Color",0,tz,"ColorKeyframeTrack",0,aN,"ColorManagement",0,eu,"CompressedArrayTexture",0,re,"CompressedCubeTexture",0,rt,"CompressedTexture",0,i7,"CompressedTextureLoader",0,aY,"ConeGeometry",0,rP,"ConstantAlphaFactor",0,213,"ConstantColorFactor",0,211,"Controls",0,oN,"CubeCamera",0,nA,"CubeReflectionMapping",0,301,"CubeRefractionMapping",0,302,"CubeTexture",0,nC,"CubeTextureLoader",0,aJ,"CubeUVReflectionMapping",0,306,"CubicBezierCurve",0,rg,"CubicBezierCurve3",0,rv,"CubicInterpolant",0,aC,"CullFaceBack",0,1,"CullFaceFront",0,2,"CullFaceFrontBack",0,3,"CullFaceNone",0,0,"Curve",0,rr,"CurvePath",0,rT,"CustomBlending",0,5,"CustomToneMapping",0,5,"CylinderGeometry",0,rR,"Cylindrical",0,s8,"Data3DTexture",0,eM,"DataArrayTexture",0,eb,"DataTexture",0,it,"DataTextureLoader",0,aK,"DataUtils",0,tX,"DecrementStencilOp",0,7683,"DecrementWrapStencilOp",0,34056,"DefaultLoadingManager",0,aV,"DepthFormat",0,1026,"DepthStencilFormat",0,1027,"DepthTexture",0,ri,"DetachedBindMode",0,P,"DirectionalLight",0,sr,"DirectionalLightHelper",0,ox,"DiscreteInterpolant",0,aP,"DodecahedronGeometry",0,rL,"DoubleSide",0,2,"DstAlphaFactor",0,206,"DstColorFactor",0,208,"DynamicCopyUsage",0,35050,"DynamicDrawUsage",0,35048,"DynamicReadUsage",0,35049,"EdgesGeometry",0,rF,"EllipseCurve",0,ra,"EqualCompare",0,514,"EqualDepth",0,4,"EqualStencilFunc",0,514,"EquirectangularReflectionMapping",0,303,"EquirectangularRefractionMapping",0,304,"Euler",0,tn,"EventDispatcher",0,O,"ExtrudeGeometry",0,r4,"FileLoader",0,aX,"Float16BufferAttribute",0,t3,"Float32BufferAttribute",0,t4,"FloatType",0,1015,"Fog",0,nI,"FogExp2",0,nP,"FramebufferTexture",0,i9,"FrontSide",0,0,"Frustum",0,iS,"GLBufferAttribute",0,s1,"GLSL1",0,"100","GLSL3",0,D,"GreaterCompare",0,516,"GreaterDepth",0,6,"GreaterEqualCompare",0,518,"GreaterEqualDepth",0,5,"GreaterEqualStencilFunc",0,518,"GreaterStencilFunc",0,516,"GridHelper",0,om,"Group",0,i6,"HalfFloatType",0,1016,"HemisphereLight",0,a0,"HemisphereLightHelper",0,of,"IcosahedronGeometry",0,r6,"ImageBitmapLoader",0,sv,"ImageLoader",0,aZ,"ImageUtils",0,ed,"IncrementStencilOp",0,7682,"IncrementWrapStencilOp",0,34055,"InstancedBufferAttribute",0,is,"InstancedBufferGeometry",0,sh,"InstancedInterleavedBuffer",0,s0,"InstancedMesh",0,im,"Int16BufferAttribute",0,tQ,"Int32BufferAttribute",0,t1,"Int8BufferAttribute",0,tJ,"IntType",0,1013,"InterleavedBuffer",0,nN,"InterleavedBufferAttribute",0,nD,"Interpolant",0,aA,"InterpolateDiscrete",0,2300,"InterpolateLinear",0,2301,"InterpolateSmooth",0,2302,"InvertStencilOp",0,5386,"KeepStencilOp",0,7680,"KeyframeTrack",0,aI,"LOD",0,nQ,"LatheGeometry",0,rE,"Layers",0,ti,"LessCompare",0,513,"LessDepth",0,2,"LessEqualCompare",0,515,"LessEqualDepth",0,3,"LessEqualStencilFunc",0,515,"LessStencilFunc",0,513,"Light",0,aQ,"LightProbe",0,sl,"Line",0,iq,"Line3",0,oi,"LineBasicMaterial",0,iB,"LineCurve",0,r_,"LineCurve3",0,ry,"LineDashedMaterial",0,ax,"LineLoop",0,i$,"LineSegments",0,iK,"LinearFilter",0,1006,"LinearInterpolant",0,aR,"LinearMipMapLinearFilter",0,1008,"LinearMipMapNearestFilter",0,1007,"LinearMipmapLinearFilter",0,1008,"LinearMipmapNearestFilter",0,1007,"LinearSRGBColorSpace",0,L,"LinearToneMapping",0,1,"LinearTransfer",0,N,"Loader",0,aG,"LoaderUtils",0,sc,"LoadingManager",0,aH,"LoopOnce",0,2200,"LoopPingPong",0,2202,"LoopRepeat",0,2201,"LuminanceAlphaFormat",0,1025,"LuminanceFormat",0,1024,"MOUSE",0,A,"Material",0,tH,"MaterialLoader",0,su,"MathUtils",0,q,"Matrix2",0,s9,"Matrix3",0,Z,"Matrix4",0,e2,"MaxEquation",0,104,"Mesh",0,nf,"MeshBasicMaterial",0,tV,"MeshDepthMaterial",0,av,"MeshDistanceMaterial",0,a_,"MeshLambertMaterial",0,ag,"MeshMatcapMaterial",0,ay,"MeshNormalMaterial",0,am,"MeshPhongMaterial",0,ap,"MeshPhysicalMaterial",0,ad,"MeshStandardMaterial",0,ah,"MeshToonMaterial",0,af,"MinEquation",0,103,"MirroredRepeatWrapping",0,1002,"MixOperation",0,1,"MultiplyBlending",0,4,"MultiplyOperation",0,0,"NearestFilter",0,1003,"NearestMipMapLinearFilter",0,1005,"NearestMipMapNearestFilter",0,1004,"NearestMipmapLinearFilter",0,1005,"NearestMipmapNearestFilter",0,1004,"NeutralToneMapping",0,7,"NeverCompare",0,512,"NeverDepth",0,0,"NeverStencilFunc",0,512,"NoBlending",0,0,"NoColorSpace",0,"","NoToneMapping",0,0,"NormalAnimationBlendMode",0,2500,"NormalBlending",0,1,"NotEqualCompare",0,517,"NotEqualDepth",0,7,"NotEqualStencilFunc",0,517,"NumberKeyframeTrack",0,aU,"Object3D",0,ty,"ObjectLoader",0,sp,"ObjectSpaceNormalMap",0,1,"OctahedronGeometry",0,r8,"OneFactor",0,201,"OneMinusConstantAlphaFactor",0,214,"OneMinusConstantColorFactor",0,212,"OneMinusDstAlphaFactor",0,207,"OneMinusDstColorFactor",0,209,"OneMinusSrcAlphaFactor",0,205,"OneMinusSrcColorFactor",0,203,"OrthographicCamera",0,sn,"PCFShadowMap",0,1,"PCFSoftShadowMap",0,2,"Path",0,rw,"PerspectiveCamera",0,nE,"Plane",0,iy,"PlaneGeometry",0,r9,"PlaneHelper",0,oC,"PointLight",0,st,"PointLightHelper",0,oc,"Points",0,i4,"PointsMaterial",0,iQ,"PolarGridHelper",0,og,"PolyhedronGeometry",0,rI,"PositionalAudio",0,sF,"PropertyBinding",0,sX,"PropertyMixer",0,sB,"QuadraticBezierCurve",0,rx,"QuadraticBezierCurve3",0,rb,"Quaternion",0,ew,"QuaternionKeyframeTrack",0,aO,"QuaternionLinearInterpolant",0,aD,"RAD2DEG",0,k,"RED_GREEN_RGTC2_Format",0,36285,"RED_RGTC1_Format",0,36283,"REVISION",0,"171","RGBADepthPacking",0,3201,"RGBAFormat",0,1023,"RGBAIntegerFormat",0,1033,"RGBA_ASTC_10x10_Format",0,37819,"RGBA_ASTC_10x5_Format",0,37816,"RGBA_ASTC_10x6_Format",0,37817,"RGBA_ASTC_10x8_Format",0,37818,"RGBA_ASTC_12x10_Format",0,37820,"RGBA_ASTC_12x12_Format",0,37821,"RGBA_ASTC_4x4_Format",0,37808,"RGBA_ASTC_5x4_Format",0,37809,"RGBA_ASTC_5x5_Format",0,37810,"RGBA_ASTC_6x5_Format",0,37811,"RGBA_ASTC_6x6_Format",0,37812,"RGBA_ASTC_8x5_Format",0,37813,"RGBA_ASTC_8x6_Format",0,37814,"RGBA_ASTC_8x8_Format",0,37815,"RGBA_BPTC_Format",0,36492,"RGBA_ETC2_EAC_Format",0,37496,"RGBA_PVRTC_2BPPV1_Format",0,35843,"RGBA_PVRTC_4BPPV1_Format",0,35842,"RGBA_S3TC_DXT1_Format",0,33777,"RGBA_S3TC_DXT3_Format",0,33778,"RGBA_S3TC_DXT5_Format",0,33779,"RGBDepthPacking",0,3202,"RGBFormat",0,1022,"RGBIntegerFormat",0,1032,"RGB_BPTC_SIGNED_Format",0,36494,"RGB_BPTC_UNSIGNED_Format",0,36495,"RGB_ETC1_Format",0,36196,"RGB_ETC2_Format",0,37492,"RGB_PVRTC_2BPPV1_Format",0,35841,"RGB_PVRTC_4BPPV1_Format",0,35840,"RGB_S3TC_DXT1_Format",0,33776,"RGDepthPacking",0,3203,"RGFormat",0,1030,"RGIntegerFormat",0,1031,"RawShaderMaterial",0,ac,"Ray",0,e1,"Raycaster",0,s3,"RectAreaLight",0,ss,"RedFormat",0,1028,"RedIntegerFormat",0,1029,"ReinhardToneMapping",0,2,"RenderTarget",0,ey,"RepeatWrapping",0,1e3,"ReplaceStencilOp",0,7681,"ReverseSubtractEquation",0,102,"RingGeometry",0,r7,"SIGNED_RED_GREEN_RGTC2_Format",0,36286,"SIGNED_RED_RGTC1_Format",0,36284,"SRGBColorSpace",0,I,"SRGBTransfer",0,U,"Scene",0,nL,"ShaderMaterial",0,nb,"ShadowMaterial",0,au,"Shape",0,rz,"ShapeGeometry",0,ae,"ShapePath",0,oL,"ShapeUtils",0,r1,"ShortType",0,1011,"Skeleton",0,ia,"SkeletonHelper",0,ou,"SkinnedMesh",0,n7,"Source",0,ef,"Sphere",0,eq,"SphereGeometry",0,at,"Spherical",0,s6,"SphericalHarmonics3",0,so,"SplineCurve",0,rS,"SpotLight",0,a6,"SpotLightHelper",0,oa,"Sprite",0,nZ,"SpriteMaterial",0,nO,"SrcAlphaFactor",0,204,"SrcAlphaSaturateFactor",0,210,"SrcColorFactor",0,202,"StaticCopyUsage",0,35046,"StaticDrawUsage",0,35044,"StaticReadUsage",0,35045,"StereoCamera",0,sM,"StreamCopyUsage",0,35042,"StreamDrawUsage",0,35040,"StreamReadUsage",0,35041,"StringKeyframeTrack",0,aF,"SubtractEquation",0,101,"SubtractiveBlending",0,3,"TOUCH",0,C,"TangentSpaceNormalMap",0,0,"TetrahedronGeometry",0,an,"Texture",0,ev,"TextureLoader",0,a$,"TextureUtils",0,oD,"TorusGeometry",0,ai,"TorusKnotGeometry",0,ar,"Triangle",0,tN,"TriangleFanDrawMode",0,2,"TriangleStripDrawMode",0,1,"TrianglesDrawMode",0,0,"TubeGeometry",0,aa,"UVMapping",0,300,"Uint16BufferAttribute",0,t0,"Uint32BufferAttribute",0,t2,"Uint8BufferAttribute",0,tK,"Uint8ClampedBufferAttribute",0,t$,"Uniform",0,sK,"UniformsGroup",0,sQ,"UniformsUtils",0,nx,"UnsignedByteType",0,1009,"UnsignedInt248Type",0,1020,"UnsignedInt5999Type",0,35902,"UnsignedIntType",0,1014,"UnsignedShort4444Type",0,1017,"UnsignedShort5551Type",0,1018,"UnsignedShortType",0,1012,"VSMShadowMap",0,3,"Vector2",0,Y,"Vector3",0,eE,"Vector4",0,e_,"VectorKeyframeTrack",0,az,"VideoTexture",0,i8,"WebGL3DRenderTarget",0,eT,"WebGLArrayRenderTarget",0,eS,"WebGLCoordinateSystem",0,2e3,"WebGLCubeRenderTarget",0,nR,"WebGLMultipleRenderTargets",0,oO,"WebGLRenderTarget",0,ex,"WebGPUCoordinateSystem",0,2001,"WireframeGeometry",0,as,"WrapAroundEnding",0,2402,"ZeroCurvatureEnding",0,2400,"ZeroFactor",0,200,"ZeroSlopeEnding",0,2401,"ZeroStencilOp",0,0,"arrayNeedsUint32",0,K,"cloneUniforms",0,nv,"createCanvasElement",0,et,"createElementNS",0,ee,"getByteLength",0,oU,"getUnlitUniformColorSpace",0,ny,"mergeUniforms",0,n_,"probeAsync",0,er,"toNormalizedProjectionMatrix",0,ea,"toReversedProjectionMatrix",0,es,"warnOnce",0,ei],90072);let oB={alphahash_fragment:"#ifdef USE_ALPHAHASH\n if ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard;\n#endif",alphahash_pars_fragment:"#ifdef USE_ALPHAHASH\n const float ALPHA_HASH_SCALE = 0.05;\n float hash2D( vec2 value ) {\n return fract( 1.0e4 * sin( 17.0 * value.x + 0.1 * value.y ) * ( 0.1 + abs( sin( 13.0 * value.y + value.x ) ) ) );\n }\n float hash3D( vec3 value ) {\n return hash2D( vec2( hash2D( value.xy ), value.z ) );\n }\n float getAlphaHashThreshold( vec3 position ) {\n float maxDeriv = max(\n length( dFdx( position.xyz ) ),\n length( dFdy( position.xyz ) )\n );\n float pixScale = 1.0 / ( ALPHA_HASH_SCALE * maxDeriv );\n vec2 pixScales = vec2(\n exp2( floor( log2( pixScale ) ) ),\n exp2( ceil( log2( pixScale ) ) )\n );\n vec2 alpha = vec2(\n hash3D( floor( pixScales.x * position.xyz ) ),\n hash3D( floor( pixScales.y * position.xyz ) )\n );\n float lerpFactor = fract( log2( pixScale ) );\n float x = ( 1.0 - lerpFactor ) * alpha.x + lerpFactor * alpha.y;\n float a = min( lerpFactor, 1.0 - lerpFactor );\n vec3 cases = vec3(\n x * x / ( 2.0 * a * ( 1.0 - a ) ),\n ( x - 0.5 * a ) / ( 1.0 - a ),\n 1.0 - ( ( 1.0 - x ) * ( 1.0 - x ) / ( 2.0 * a * ( 1.0 - a ) ) )\n );\n float threshold = ( x < ( 1.0 - a ) )\n ? ( ( x < a ) ? cases.x : cases.y )\n : cases.z;\n return clamp( threshold , 1.0e-6, 1.0 );\n }\n#endif",alphamap_fragment:"#ifdef USE_ALPHAMAP\n diffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g;\n#endif",alphamap_pars_fragment:"#ifdef USE_ALPHAMAP\n uniform sampler2D alphaMap;\n#endif",alphatest_fragment:"#ifdef USE_ALPHATEST\n #ifdef ALPHA_TO_COVERAGE\n diffuseColor.a = smoothstep( alphaTest, alphaTest + fwidth( diffuseColor.a ), diffuseColor.a );\n if ( diffuseColor.a == 0.0 ) discard;\n #else\n if ( diffuseColor.a < alphaTest ) discard;\n #endif\n#endif",alphatest_pars_fragment:"#ifdef USE_ALPHATEST\n uniform float alphaTest;\n#endif",aomap_fragment:"#ifdef USE_AOMAP\n float ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;\n reflectedLight.indirectDiffuse *= ambientOcclusion;\n #if defined( USE_CLEARCOAT ) \n clearcoatSpecularIndirect *= ambientOcclusion;\n #endif\n #if defined( USE_SHEEN ) \n sheenSpecularIndirect *= ambientOcclusion;\n #endif\n #if defined( USE_ENVMAP ) && defined( STANDARD )\n float dotNV = saturate( dot( geometryNormal, geometryViewDir ) );\n reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\n #endif\n#endif",aomap_pars_fragment:"#ifdef USE_AOMAP\n uniform sampler2D aoMap;\n uniform float aoMapIntensity;\n#endif",batching_pars_vertex:"#ifdef USE_BATCHING\n #if ! defined( GL_ANGLE_multi_draw )\n #define gl_DrawID _gl_DrawID\n uniform int _gl_DrawID;\n #endif\n uniform highp sampler2D batchingTexture;\n uniform highp usampler2D batchingIdTexture;\n mat4 getBatchingMatrix( const in float i ) {\n int size = textureSize( batchingTexture, 0 ).x;\n int j = int( i ) * 4;\n int x = j % size;\n int y = j / size;\n vec4 v1 = texelFetch( batchingTexture, ivec2( x, y ), 0 );\n vec4 v2 = texelFetch( batchingTexture, ivec2( x + 1, y ), 0 );\n vec4 v3 = texelFetch( batchingTexture, ivec2( x + 2, y ), 0 );\n vec4 v4 = texelFetch( batchingTexture, ivec2( x + 3, y ), 0 );\n return mat4( v1, v2, v3, v4 );\n }\n float getIndirectIndex( const in int i ) {\n int size = textureSize( batchingIdTexture, 0 ).x;\n int x = i % size;\n int y = i / size;\n return float( texelFetch( batchingIdTexture, ivec2( x, y ), 0 ).r );\n }\n#endif\n#ifdef USE_BATCHING_COLOR\n uniform sampler2D batchingColorTexture;\n vec3 getBatchingColor( const in float i ) {\n int size = textureSize( batchingColorTexture, 0 ).x;\n int j = int( i );\n int x = j % size;\n int y = j / size;\n return texelFetch( batchingColorTexture, ivec2( x, y ), 0 ).rgb;\n }\n#endif",batching_vertex:"#ifdef USE_BATCHING\n mat4 batchingMatrix = getBatchingMatrix( getIndirectIndex( gl_DrawID ) );\n#endif",begin_vertex:"vec3 transformed = vec3( position );\n#ifdef USE_ALPHAHASH\n vPosition = vec3( position );\n#endif",beginnormal_vertex:"vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n vec3 objectTangent = vec3( tangent.xyz );\n#endif",bsdfs:"float G_BlinnPhong_Implicit( ) {\n return 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n return RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\n vec3 halfDir = normalize( lightDir + viewDir );\n float dotNH = saturate( dot( normal, halfDir ) );\n float dotVH = saturate( dot( viewDir, halfDir ) );\n vec3 F = F_Schlick( specularColor, 1.0, dotVH );\n float G = G_BlinnPhong_Implicit( );\n float D = D_BlinnPhong( shininess, dotNH );\n return F * ( G * D );\n} // validated",iridescence_fragment:"#ifdef USE_IRIDESCENCE\n const mat3 XYZ_TO_REC709 = mat3(\n 3.2404542, -0.9692660, 0.0556434,\n -1.5371385, 1.8760108, -0.2040259,\n -0.4985314, 0.0415560, 1.0572252\n );\n vec3 Fresnel0ToIor( vec3 fresnel0 ) {\n vec3 sqrtF0 = sqrt( fresnel0 );\n return ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\n }\n vec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\n return pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\n }\n float IorToFresnel0( float transmittedIor, float incidentIor ) {\n return pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\n }\n vec3 evalSensitivity( float OPD, vec3 shift ) {\n float phase = 2.0 * PI * OPD * 1.0e-9;\n vec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );\n vec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );\n vec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );\n vec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );\n xyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );\n xyz /= 1.0685e-7;\n vec3 rgb = XYZ_TO_REC709 * xyz;\n return rgb;\n }\n vec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\n vec3 I;\n float iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\n float sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\n float cosTheta2Sq = 1.0 - sinTheta2Sq;\n if ( cosTheta2Sq < 0.0 ) {\n return vec3( 1.0 );\n }\n float cosTheta2 = sqrt( cosTheta2Sq );\n float R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\n float R12 = F_Schlick( R0, 1.0, cosTheta1 );\n float T121 = 1.0 - R12;\n float phi12 = 0.0;\n if ( iridescenceIOR < outsideIOR ) phi12 = PI;\n float phi21 = PI - phi12;\n vec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) ); vec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );\n vec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );\n vec3 phi23 = vec3( 0.0 );\n if ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;\n if ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;\n if ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;\n float OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\n vec3 phi = vec3( phi21 ) + phi23;\n vec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );\n vec3 r123 = sqrt( R123 );\n vec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );\n vec3 C0 = R12 + Rs;\n I = C0;\n vec3 Cm = Rs - T121;\n for ( int m = 1; m <= 2; ++ m ) {\n Cm *= r123;\n vec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );\n I += Cm * Sm;\n }\n return max( I, vec3( 0.0 ) );\n }\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n uniform sampler2D bumpMap;\n uniform float bumpScale;\n vec2 dHdxy_fwd() {\n vec2 dSTdx = dFdx( vBumpMapUv );\n vec2 dSTdy = dFdy( vBumpMapUv );\n float Hll = bumpScale * texture2D( bumpMap, vBumpMapUv ).x;\n float dBx = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdx ).x - Hll;\n float dBy = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdy ).x - Hll;\n return vec2( dBx, dBy );\n }\n vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n vec3 vSigmaX = normalize( dFdx( surf_pos.xyz ) );\n vec3 vSigmaY = normalize( dFdy( surf_pos.xyz ) );\n vec3 vN = surf_norm;\n vec3 R1 = cross( vSigmaY, vN );\n vec3 R2 = cross( vN, vSigmaX );\n float fDet = dot( vSigmaX, R1 ) * faceDirection;\n vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n return normalize( abs( fDet ) * surf_norm - vGrad );\n }\n#endif",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n vec4 plane;\n #ifdef ALPHA_TO_COVERAGE\n float distanceToPlane, distanceGradient;\n float clipOpacity = 1.0;\n #pragma unroll_loop_start\n for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n plane = clippingPlanes[ i ];\n distanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n distanceGradient = fwidth( distanceToPlane ) / 2.0;\n clipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n if ( clipOpacity == 0.0 ) discard;\n }\n #pragma unroll_loop_end\n #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n float unionClipOpacity = 1.0;\n #pragma unroll_loop_start\n for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n plane = clippingPlanes[ i ];\n distanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n distanceGradient = fwidth( distanceToPlane ) / 2.0;\n unionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n }\n #pragma unroll_loop_end\n clipOpacity *= 1.0 - unionClipOpacity;\n #endif\n diffuseColor.a *= clipOpacity;\n if ( diffuseColor.a == 0.0 ) discard;\n #else\n #pragma unroll_loop_start\n for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n plane = clippingPlanes[ i ];\n if ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n }\n #pragma unroll_loop_end\n #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n bool clipped = true;\n #pragma unroll_loop_start\n for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n plane = clippingPlanes[ i ];\n clipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n }\n #pragma unroll_loop_end\n if ( clipped ) discard;\n #endif\n #endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n varying vec3 vClipPosition;\n uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n varying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n vClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#if defined( USE_COLOR_ALPHA )\n diffuseColor *= vColor;\n#elif defined( USE_COLOR )\n diffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#if defined( USE_COLOR_ALPHA )\n varying vec4 vColor;\n#elif defined( USE_COLOR )\n varying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR_ALPHA )\n varying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n varying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR_ALPHA )\n vColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n vColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n vColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n vColor.xyz *= instanceColor.xyz;\n#endif\n#ifdef USE_BATCHING_COLOR\n vec3 batchingColor = getBatchingColor( getIndirectIndex( gl_DrawID ) );\n vColor.xyz *= batchingColor.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nvec3 pow2( const in vec3 x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\nhighp float rand( const in vec2 uv ) {\n const highp float a = 12.9898, b = 78.233, c = 43758.5453;\n highp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n return fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n float precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n float precisionSafeLength( vec3 v ) {\n float maxComponent = max3( abs( v ) );\n return length( v / maxComponent ) * maxComponent;\n }\n#endif\nstruct IncidentLight {\n vec3 color;\n vec3 direction;\n bool visible;\n};\nstruct ReflectedLight {\n vec3 directDiffuse;\n vec3 directSpecular;\n vec3 indirectDiffuse;\n vec3 indirectSpecular;\n};\n#ifdef USE_ALPHAHASH\n varying vec3 vPosition;\n#endif\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nmat3 transposeMat3( const in mat3 m ) {\n mat3 tmp;\n tmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n tmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n tmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n return tmp;\n}\nbool isPerspectiveMatrix( mat4 m ) {\n return m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n float u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n float v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n return vec2( u, v );\n}\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\n return RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\n float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n}\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\n float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n} // validated",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n #define cubeUV_minMipLevel 4.0\n #define cubeUV_minTileSize 16.0\n float getFace( vec3 direction ) {\n vec3 absDirection = abs( direction );\n float face = - 1.0;\n if ( absDirection.x > absDirection.z ) {\n if ( absDirection.x > absDirection.y )\n face = direction.x > 0.0 ? 0.0 : 3.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n } else {\n if ( absDirection.z > absDirection.y )\n face = direction.z > 0.0 ? 2.0 : 5.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n }\n return face;\n }\n vec2 getUV( vec3 direction, float face ) {\n vec2 uv;\n if ( face == 0.0 ) {\n uv = vec2( direction.z, direction.y ) / abs( direction.x );\n } else if ( face == 1.0 ) {\n uv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n } else if ( face == 2.0 ) {\n uv = vec2( - direction.x, direction.y ) / abs( direction.z );\n } else if ( face == 3.0 ) {\n uv = vec2( - direction.z, direction.y ) / abs( direction.x );\n } else if ( face == 4.0 ) {\n uv = vec2( - direction.x, direction.z ) / abs( direction.y );\n } else {\n uv = vec2( direction.x, direction.y ) / abs( direction.z );\n }\n return 0.5 * ( uv + 1.0 );\n }\n vec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n float face = getFace( direction );\n float filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n mipInt = max( mipInt, cubeUV_minMipLevel );\n float faceSize = exp2( mipInt );\n highp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\n if ( face > 2.0 ) {\n uv.y += faceSize;\n face -= 3.0;\n }\n uv.x += face * faceSize;\n uv.x += filterInt * 3.0 * cubeUV_minTileSize;\n uv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\n uv.x *= CUBEUV_TEXEL_WIDTH;\n uv.y *= CUBEUV_TEXEL_HEIGHT;\n #ifdef texture2DGradEXT\n return texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\n #else\n return texture2D( envMap, uv ).rgb;\n #endif\n }\n #define cubeUV_r0 1.0\n #define cubeUV_m0 - 2.0\n #define cubeUV_r1 0.8\n #define cubeUV_m1 - 1.0\n #define cubeUV_r4 0.4\n #define cubeUV_m4 2.0\n #define cubeUV_r5 0.305\n #define cubeUV_m5 3.0\n #define cubeUV_r6 0.21\n #define cubeUV_m6 4.0\n float roughnessToMip( float roughness ) {\n float mip = 0.0;\n if ( roughness >= cubeUV_r1 ) {\n mip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\n } else if ( roughness >= cubeUV_r4 ) {\n mip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\n } else if ( roughness >= cubeUV_r5 ) {\n mip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\n } else if ( roughness >= cubeUV_r6 ) {\n mip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\n } else {\n mip = - 2.0 * log2( 1.16 * roughness ); }\n return mip;\n }\n vec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n float mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\n float mipF = fract( mip );\n float mipInt = floor( mip );\n vec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n if ( mipF == 0.0 ) {\n return vec4( color0, 1.0 );\n } else {\n vec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n return vec4( mix( color0, color1, mipF ), 1.0 );\n }\n }\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_TANGENT\n vec3 transformedTangent = objectTangent;\n#endif\n#ifdef USE_BATCHING\n mat3 bm = mat3( batchingMatrix );\n transformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) );\n transformedNormal = bm * transformedNormal;\n #ifdef USE_TANGENT\n transformedTangent = bm * transformedTangent;\n #endif\n#endif\n#ifdef USE_INSTANCING\n mat3 im = mat3( instanceMatrix );\n transformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) );\n transformedNormal = im * transformedNormal;\n #ifdef USE_TANGENT\n transformedTangent = im * transformedTangent;\n #endif\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n transformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n transformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz;\n #ifdef FLIP_SIDED\n transformedTangent = - transformedTangent;\n #endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n uniform sampler2D displacementMap;\n uniform float displacementScale;\n uniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n vec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );\n #ifdef DECODE_VIDEO_TEXTURE_EMISSIVE\n emissiveColor = sRGBTransferEOTF( emissiveColor );\n #endif\n totalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n uniform sampler2D emissiveMap;\n#endif",colorspace_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",colorspace_pars_fragment:"vec4 LinearTransferOETF( in vec4 value ) {\n return value;\n}\nvec4 sRGBTransferEOTF( in vec4 value ) {\n return vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 sRGBTransferOETF( in vec4 value ) {\n return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n #ifdef ENV_WORLDPOS\n vec3 cameraToFrag;\n if ( isOrthographic ) {\n cameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n } else {\n cameraToFrag = normalize( vWorldPosition - cameraPosition );\n }\n vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n #ifdef ENVMAP_MODE_REFLECTION\n vec3 reflectVec = reflect( cameraToFrag, worldNormal );\n #else\n vec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n #endif\n #else\n vec3 reflectVec = vReflect;\n #endif\n #ifdef ENVMAP_TYPE_CUBE\n vec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n #else\n vec4 envColor = vec4( 0.0 );\n #endif\n #ifdef ENVMAP_BLENDING_MULTIPLY\n outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n #elif defined( ENVMAP_BLENDING_MIX )\n outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n #elif defined( ENVMAP_BLENDING_ADD )\n outgoingLight += envColor.xyz * specularStrength * reflectivity;\n #endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n uniform float envMapIntensity;\n uniform float flipEnvMap;\n uniform mat3 envMapRotation;\n #ifdef ENVMAP_TYPE_CUBE\n uniform samplerCube envMap;\n #else\n uniform sampler2D envMap;\n #endif\n \n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n uniform float reflectivity;\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n #define ENV_WORLDPOS\n #endif\n #ifdef ENV_WORLDPOS\n varying vec3 vWorldPosition;\n uniform float refractionRatio;\n #else\n varying vec3 vReflect;\n #endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n #define ENV_WORLDPOS\n #endif\n #ifdef ENV_WORLDPOS\n \n varying vec3 vWorldPosition;\n #else\n varying vec3 vReflect;\n uniform float refractionRatio;\n #endif\n#endif",envmap_physical_pars_fragment:"#ifdef USE_ENVMAP\n vec3 getIBLIrradiance( const in vec3 normal ) {\n #ifdef ENVMAP_TYPE_CUBE_UV\n vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n vec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );\n return PI * envMapColor.rgb * envMapIntensity;\n #else\n return vec3( 0.0 );\n #endif\n }\n vec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n #ifdef ENVMAP_TYPE_CUBE_UV\n vec3 reflectVec = reflect( - viewDir, normal );\n reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n reflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n vec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );\n return envMapColor.rgb * envMapIntensity;\n #else\n return vec3( 0.0 );\n #endif\n }\n #ifdef USE_ANISOTROPY\n vec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {\n #ifdef ENVMAP_TYPE_CUBE_UV\n vec3 bentNormal = cross( bitangent, viewDir );\n bentNormal = normalize( cross( bentNormal, bitangent ) );\n bentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) );\n return getIBLRadiance( viewDir, bentNormal, roughness );\n #else\n return vec3( 0.0 );\n #endif\n }\n #endif\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n #ifdef ENV_WORLDPOS\n vWorldPosition = worldPosition.xyz;\n #else\n vec3 cameraToVertex;\n if ( isOrthographic ) {\n cameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n } else {\n cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n }\n vec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n #ifdef ENVMAP_MODE_REFLECTION\n vReflect = reflect( cameraToVertex, worldNormal );\n #else\n vReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n #endif\n #endif\n#endif",fog_vertex:"#ifdef USE_FOG\n vFogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n varying float vFogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n #ifdef FOG_EXP2\n float fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n #else\n float fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n #endif\n gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n uniform vec3 fogColor;\n varying float vFogDepth;\n #ifdef FOG_EXP2\n uniform float fogDensity;\n #else\n uniform float fogNear;\n uniform float fogFar;\n #endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n uniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n float dotNL = dot( normal, lightDirection );\n vec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n #ifdef USE_GRADIENTMAP\n return vec3( texture2D( gradientMap, coord ).r );\n #else\n vec2 fw = fwidth( coord ) * 0.5;\n return mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\n #endif\n}",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n uniform sampler2D lightMap;\n uniform float lightMapIntensity;\n#endif",lights_lambert_fragment:"LambertMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularStrength = specularStrength;",lights_lambert_pars_fragment:"varying vec3 vViewPosition;\nstruct LambertMaterial {\n vec3 diffuseColor;\n float specularStrength;\n};\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct RE_Direct_Lambert\n#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\n#if defined( USE_LIGHT_PROBES )\n uniform vec3 lightProbe[ 9 ];\n#endif\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n float x = normal.x, y = normal.y, z = normal.z;\n vec3 result = shCoefficients[ 0 ] * 0.886227;\n result += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n result += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n result += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n result += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n return result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n vec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n return irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n vec3 irradiance = ambientLightColor;\n return irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n if ( cutoffDistance > 0.0 ) {\n distanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n }\n return distanceFalloff;\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n return smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n struct DirectionalLight {\n vec3 direction;\n vec3 color;\n };\n uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n void getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) {\n light.color = directionalLight.color;\n light.direction = directionalLight.direction;\n light.visible = true;\n }\n#endif\n#if NUM_POINT_LIGHTS > 0\n struct PointLight {\n vec3 position;\n vec3 color;\n float distance;\n float decay;\n };\n uniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n void getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) {\n vec3 lVector = pointLight.position - geometryPosition;\n light.direction = normalize( lVector );\n float lightDistance = length( lVector );\n light.color = pointLight.color;\n light.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n light.visible = ( light.color != vec3( 0.0 ) );\n }\n#endif\n#if NUM_SPOT_LIGHTS > 0\n struct SpotLight {\n vec3 position;\n vec3 direction;\n vec3 color;\n float distance;\n float decay;\n float coneCos;\n float penumbraCos;\n };\n uniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n void getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) {\n vec3 lVector = spotLight.position - geometryPosition;\n light.direction = normalize( lVector );\n float angleCos = dot( light.direction, spotLight.direction );\n float spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n if ( spotAttenuation > 0.0 ) {\n float lightDistance = length( lVector );\n light.color = spotLight.color * spotAttenuation;\n light.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n light.visible = ( light.color != vec3( 0.0 ) );\n } else {\n light.color = vec3( 0.0 );\n light.visible = false;\n }\n }\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n struct RectAreaLight {\n vec3 color;\n vec3 position;\n vec3 halfWidth;\n vec3 halfHeight;\n };\n uniform sampler2D ltc_1; uniform sampler2D ltc_2;\n uniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n struct HemisphereLight {\n vec3 direction;\n vec3 skyColor;\n vec3 groundColor;\n };\n uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n float dotNL = dot( normal, hemiLight.direction );\n float hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n return irradiance;\n }\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\nstruct ToonMaterial {\n vec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n vec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;\n reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct RE_Direct_Toon\n#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n vec3 diffuseColor;\n vec3 specularColor;\n float specularShininess;\n float specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct RE_Direct_BlinnPhong\n#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n material.ior = ior;\n #ifdef USE_SPECULAR\n float specularIntensityFactor = specularIntensity;\n vec3 specularColorFactor = specularColor;\n #ifdef USE_SPECULAR_COLORMAP\n specularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb;\n #endif\n #ifdef USE_SPECULAR_INTENSITYMAP\n specularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a;\n #endif\n material.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n #else\n float specularIntensityFactor = 1.0;\n vec3 specularColorFactor = vec3( 1.0 );\n material.specularF90 = 1.0;\n #endif\n material.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n material.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n material.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n material.clearcoat = clearcoat;\n material.clearcoatRoughness = clearcoatRoughness;\n material.clearcoatF0 = vec3( 0.04 );\n material.clearcoatF90 = 1.0;\n #ifdef USE_CLEARCOATMAP\n material.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x;\n #endif\n #ifdef USE_CLEARCOAT_ROUGHNESSMAP\n material.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y;\n #endif\n material.clearcoat = saturate( material.clearcoat ); material.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n material.clearcoatRoughness += geometryRoughness;\n material.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_DISPERSION\n material.dispersion = dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n material.iridescence = iridescence;\n material.iridescenceIOR = iridescenceIOR;\n #ifdef USE_IRIDESCENCEMAP\n material.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r;\n #endif\n #ifdef USE_IRIDESCENCE_THICKNESSMAP\n material.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum;\n #else\n material.iridescenceThickness = iridescenceThicknessMaximum;\n #endif\n#endif\n#ifdef USE_SHEEN\n material.sheenColor = sheenColor;\n #ifdef USE_SHEEN_COLORMAP\n material.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb;\n #endif\n material.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n #ifdef USE_SHEEN_ROUGHNESSMAP\n material.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a;\n #endif\n#endif\n#ifdef USE_ANISOTROPY\n #ifdef USE_ANISOTROPYMAP\n mat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x );\n vec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb;\n vec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b;\n #else\n vec2 anisotropyV = anisotropyVector;\n #endif\n material.anisotropy = length( anisotropyV );\n if( material.anisotropy == 0.0 ) {\n anisotropyV = vec2( 1.0, 0.0 );\n } else {\n anisotropyV /= material.anisotropy;\n material.anisotropy = saturate( material.anisotropy );\n }\n material.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) );\n material.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y;\n material.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y;\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n vec3 diffuseColor;\n float roughness;\n vec3 specularColor;\n float specularF90;\n float dispersion;\n #ifdef USE_CLEARCOAT\n float clearcoat;\n float clearcoatRoughness;\n vec3 clearcoatF0;\n float clearcoatF90;\n #endif\n #ifdef USE_IRIDESCENCE\n float iridescence;\n float iridescenceIOR;\n float iridescenceThickness;\n vec3 iridescenceFresnel;\n vec3 iridescenceF0;\n #endif\n #ifdef USE_SHEEN\n vec3 sheenColor;\n float sheenRoughness;\n #endif\n #ifdef IOR\n float ior;\n #endif\n #ifdef USE_TRANSMISSION\n float transmission;\n float transmissionAlpha;\n float thickness;\n float attenuationDistance;\n vec3 attenuationColor;\n #endif\n #ifdef USE_ANISOTROPY\n float anisotropy;\n float alphaT;\n vec3 anisotropyT;\n vec3 anisotropyB;\n #endif\n};\nvec3 clearcoatSpecularDirect = vec3( 0.0 );\nvec3 clearcoatSpecularIndirect = vec3( 0.0 );\nvec3 sheenSpecularDirect = vec3( 0.0 );\nvec3 sheenSpecularIndirect = vec3(0.0 );\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\n float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\n float x2 = x * x;\n float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\n}\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n float a2 = pow2( alpha );\n float gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n float gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n return 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n float a2 = pow2( alpha );\n float denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n return RECIPROCAL_PI * a2 / pow2( denom );\n}\n#ifdef USE_ANISOTROPY\n float V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) {\n float gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );\n float gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );\n float v = 0.5 / ( gv + gl );\n return saturate(v);\n }\n float D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) {\n float a2 = alphaT * alphaB;\n highp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH );\n highp float v2 = dot( v, v );\n float w2 = a2 / v2;\n return RECIPROCAL_PI * a2 * pow2 ( w2 );\n }\n#endif\n#ifdef USE_CLEARCOAT\n vec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {\n vec3 f0 = material.clearcoatF0;\n float f90 = material.clearcoatF90;\n float roughness = material.clearcoatRoughness;\n float alpha = pow2( roughness );\n vec3 halfDir = normalize( lightDir + viewDir );\n float dotNL = saturate( dot( normal, lightDir ) );\n float dotNV = saturate( dot( normal, viewDir ) );\n float dotNH = saturate( dot( normal, halfDir ) );\n float dotVH = saturate( dot( viewDir, halfDir ) );\n vec3 F = F_Schlick( f0, f90, dotVH );\n float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n float D = D_GGX( alpha, dotNH );\n return F * ( V * D );\n }\n#endif\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\n vec3 f0 = material.specularColor;\n float f90 = material.specularF90;\n float roughness = material.roughness;\n float alpha = pow2( roughness );\n vec3 halfDir = normalize( lightDir + viewDir );\n float dotNL = saturate( dot( normal, lightDir ) );\n float dotNV = saturate( dot( normal, viewDir ) );\n float dotNH = saturate( dot( normal, halfDir ) );\n float dotVH = saturate( dot( viewDir, halfDir ) );\n vec3 F = F_Schlick( f0, f90, dotVH );\n #ifdef USE_IRIDESCENCE\n F = mix( F, material.iridescenceFresnel, material.iridescence );\n #endif\n #ifdef USE_ANISOTROPY\n float dotTL = dot( material.anisotropyT, lightDir );\n float dotTV = dot( material.anisotropyT, viewDir );\n float dotTH = dot( material.anisotropyT, halfDir );\n float dotBL = dot( material.anisotropyB, lightDir );\n float dotBV = dot( material.anisotropyB, viewDir );\n float dotBH = dot( material.anisotropyB, halfDir );\n float V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );\n float D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );\n #else\n float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n float D = D_GGX( alpha, dotNH );\n #endif\n return F * ( V * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n const float LUT_SIZE = 64.0;\n const float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n const float LUT_BIAS = 0.5 / LUT_SIZE;\n float dotNV = saturate( dot( N, V ) );\n vec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n uv = uv * LUT_SCALE + LUT_BIAS;\n return uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n float l = length( f );\n return max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n float x = dot( v1, v2 );\n float y = abs( x );\n float a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n float b = 3.4175940 + ( 4.1616724 + y ) * y;\n float v = a / b;\n float theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n return cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n vec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n vec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n vec3 lightNormal = cross( v1, v2 );\n if( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n vec3 T1, T2;\n T1 = normalize( V - N * dot( V, N ) );\n T2 = - cross( N, T1 );\n mat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n vec3 coords[ 4 ];\n coords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n coords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n coords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n coords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n coords[ 0 ] = normalize( coords[ 0 ] );\n coords[ 1 ] = normalize( coords[ 1 ] );\n coords[ 2 ] = normalize( coords[ 2 ] );\n coords[ 3 ] = normalize( coords[ 3 ] );\n vec3 vectorFormFactor = vec3( 0.0 );\n vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n float result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n return vec3( result );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n float alpha = pow2( roughness );\n float invAlpha = 1.0 / alpha;\n float cos2h = dotNH * dotNH;\n float sin2h = max( 1.0 - cos2h, 0.0078125 );\n return ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n return saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n vec3 halfDir = normalize( lightDir + viewDir );\n float dotNL = saturate( dot( normal, lightDir ) );\n float dotNV = saturate( dot( normal, viewDir ) );\n float dotNH = saturate( dot( normal, halfDir ) );\n float D = D_Charlie( sheenRoughness, dotNH );\n float V = V_Neubelt( dotNV, dotNL );\n return sheenColor * ( D * V );\n}\n#endif\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n float dotNV = saturate( dot( normal, viewDir ) );\n float r2 = roughness * roughness;\n float a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\n float b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\n float DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\n return saturate( DG * RECIPROCAL_PI );\n}\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n float dotNV = saturate( dot( normal, viewDir ) );\n const vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n const vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n vec4 r = roughness * c0 + c1;\n float a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n vec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n return fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n vec2 fab = DFGApprox( normal, viewDir, roughness );\n return specularColor * fab.x + specularF90 * fab.y;\n}\n#ifdef USE_IRIDESCENCE\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#else\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#endif\n vec2 fab = DFGApprox( normal, viewDir, roughness );\n #ifdef USE_IRIDESCENCE\n vec3 Fr = mix( specularColor, iridescenceF0, iridescence );\n #else\n vec3 Fr = specularColor;\n #endif\n vec3 FssEss = Fr * fab.x + specularF90 * fab.y;\n float Ess = fab.x + fab.y;\n float Ems = 1.0 - Ess;\n vec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619; vec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n singleScatter += FssEss;\n multiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n void RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n vec3 normal = geometryNormal;\n vec3 viewDir = geometryViewDir;\n vec3 position = geometryPosition;\n vec3 lightPos = rectAreaLight.position;\n vec3 halfWidth = rectAreaLight.halfWidth;\n vec3 halfHeight = rectAreaLight.halfHeight;\n vec3 lightColor = rectAreaLight.color;\n float roughness = material.roughness;\n vec3 rectCoords[ 4 ];\n rectCoords[ 0 ] = lightPos + halfWidth - halfHeight; rectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n rectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n rectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n vec2 uv = LTC_Uv( normal, viewDir, roughness );\n vec4 t1 = texture2D( ltc_1, uv );\n vec4 t2 = texture2D( ltc_2, uv );\n mat3 mInv = mat3(\n vec3( t1.x, 0, t1.y ),\n vec3( 0, 1, 0 ),\n vec3( t1.z, 0, t1.w )\n );\n vec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n reflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n reflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n }\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n #ifdef USE_CLEARCOAT\n float dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) );\n vec3 ccIrradiance = dotNLcc * directLight.color;\n clearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );\n #endif\n #ifdef USE_SHEEN\n sheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );\n #endif\n reflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material );\n reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n #ifdef USE_CLEARCOAT\n clearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n #endif\n #ifdef USE_SHEEN\n sheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\n #endif\n vec3 singleScattering = vec3( 0.0 );\n vec3 multiScattering = vec3( 0.0 );\n vec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n #ifdef USE_IRIDESCENCE\n computeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\n #else\n computeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n #endif\n vec3 totalScattering = singleScattering + multiScattering;\n vec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\n reflectedLight.indirectSpecular += radiance * singleScattering;\n reflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n reflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct RE_Direct_Physical\n#define RE_Direct_RectArea RE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse RE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular RE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nvec3 geometryPosition = - vViewPosition;\nvec3 geometryNormal = normal;\nvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\nvec3 geometryClearcoatNormal = vec3( 0.0 );\n#ifdef USE_CLEARCOAT\n geometryClearcoatNormal = clearcoatNormal;\n#endif\n#ifdef USE_IRIDESCENCE\n float dotNVi = saturate( dot( normal, geometryViewDir ) );\n if ( material.iridescenceThickness == 0.0 ) {\n material.iridescence = 0.0;\n } else {\n material.iridescence = saturate( material.iridescence );\n }\n if ( material.iridescence > 0.0 ) {\n material.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\n material.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\n }\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n PointLight pointLight;\n #if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n PointLightShadow pointLightShadow;\n #endif\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n pointLight = pointLights[ i ];\n getPointLightInfo( pointLight, geometryPosition, directLight );\n #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n pointLightShadow = pointLightShadows[ i ];\n directLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n #endif\n RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n }\n #pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n SpotLight spotLight;\n vec4 spotColor;\n vec3 spotLightCoord;\n bool inSpotLightMap;\n #if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n SpotLightShadow spotLightShadow;\n #endif\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n spotLight = spotLights[ i ];\n getSpotLightInfo( spotLight, geometryPosition, directLight );\n #if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n #define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\n #elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n #define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\n #else\n #define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n #endif\n #if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\n spotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\n inSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\n spotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\n directLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\n #endif\n #undef SPOT_LIGHT_MAP_INDEX\n #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n spotLightShadow = spotLightShadows[ i ];\n directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n }\n #pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n DirectionalLight directionalLight;\n #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n DirectionalLightShadow directionalLightShadow;\n #endif\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directionalLight = directionalLights[ i ];\n getDirectionalLightInfo( directionalLight, directLight );\n #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n directionalLightShadow = directionalLightShadows[ i ];\n directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n }\n #pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n RectAreaLight rectAreaLight;\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n rectAreaLight = rectAreaLights[ i ];\n RE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n }\n #pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n vec3 iblIrradiance = vec3( 0.0 );\n vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n #if defined( USE_LIGHT_PROBES )\n irradiance += getLightProbeIrradiance( lightProbe, geometryNormal );\n #endif\n #if ( NUM_HEMI_LIGHTS > 0 )\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\n }\n #pragma unroll_loop_end\n #endif\n#endif\n#if defined( RE_IndirectSpecular )\n vec3 radiance = vec3( 0.0 );\n vec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n #ifdef USE_LIGHTMAP\n vec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n irradiance += lightMapIrradiance;\n #endif\n #if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n iblIrradiance += getIBLIrradiance( geometryNormal );\n #endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n #ifdef USE_ANISOTROPY\n radiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy );\n #else\n radiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness );\n #endif\n #ifdef USE_CLEARCOAT\n clearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness );\n #endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n RE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n RE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF )\n gl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF )\n uniform float logDepthBufFC;\n varying float vFragDepth;\n varying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n varying float vFragDepth;\n varying float vIsPerspective;\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n vFragDepth = 1.0 + gl_Position.w;\n vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n#endif",map_fragment:"#ifdef USE_MAP\n vec4 sampledDiffuseColor = texture2D( map, vMapUv );\n #ifdef DECODE_VIDEO_TEXTURE\n sampledDiffuseColor = sRGBTransferEOTF( sampledDiffuseColor );\n #endif\n diffuseColor *= sampledDiffuseColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n uniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n #if defined( USE_POINTS_UV )\n vec2 uv = vUv;\n #else\n vec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n #endif\n#endif\n#ifdef USE_MAP\n diffuseColor *= texture2D( map, uv );\n#endif\n#ifdef USE_ALPHAMAP\n diffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_POINTS_UV )\n varying vec2 vUv;\n#else\n #if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n uniform mat3 uvTransform;\n #endif\n#endif\n#ifdef USE_MAP\n uniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n uniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n vec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );\n metalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n uniform sampler2D metalnessMap;\n#endif",morphinstance_vertex:"#ifdef USE_INSTANCING_MORPH\n float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n float morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r;\n for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n morphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r;\n }\n#endif",morphcolor_vertex:"#if defined( USE_MORPHCOLORS )\n vColor *= morphTargetBaseInfluence;\n for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n #if defined( USE_COLOR_ALPHA )\n if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\n #elif defined( USE_COLOR )\n if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\n #endif\n }\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n objectNormal *= morphTargetBaseInfluence;\n for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n if ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\n }\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n #ifndef USE_INSTANCING_MORPH\n uniform float morphTargetBaseInfluence;\n uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n #endif\n uniform sampler2DArray morphTargetsTexture;\n uniform ivec2 morphTargetsTextureSize;\n vec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\n int texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\n int y = texelIndex / morphTargetsTextureSize.x;\n int x = texelIndex - y * morphTargetsTextureSize.x;\n ivec3 morphUV = ivec3( x, y, morphTargetIndex );\n return texelFetch( morphTargetsTexture, morphUV, 0 );\n }\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n transformed *= morphTargetBaseInfluence;\n for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n if ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\n }\n#endif",normal_fragment_begin:"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n vec3 fdx = dFdx( vViewPosition );\n vec3 fdy = dFdy( vViewPosition );\n vec3 normal = normalize( cross( fdx, fdy ) );\n#else\n vec3 normal = normalize( vNormal );\n #ifdef DOUBLE_SIDED\n normal *= faceDirection;\n #endif\n#endif\n#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )\n #ifdef USE_TANGENT\n mat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n #else\n mat3 tbn = getTangentFrame( - vViewPosition, normal,\n #if defined( USE_NORMALMAP )\n vNormalMapUv\n #elif defined( USE_CLEARCOAT_NORMALMAP )\n vClearcoatNormalMapUv\n #else\n vUv\n #endif\n );\n #endif\n #if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n tbn[0] *= faceDirection;\n tbn[1] *= faceDirection;\n #endif\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n #ifdef USE_TANGENT\n mat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n #else\n mat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );\n #endif\n #if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n tbn2[0] *= faceDirection;\n tbn2[1] *= faceDirection;\n #endif\n#endif\nvec3 nonPerturbedNormal = normal;",normal_fragment_maps:"#ifdef USE_NORMALMAP_OBJECTSPACE\n normal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n #ifdef FLIP_SIDED\n normal = - normal;\n #endif\n #ifdef DOUBLE_SIDED\n normal = normal * faceDirection;\n #endif\n normal = normalize( normalMatrix * normal );\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\n vec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n mapN.xy *= normalScale;\n normal = normalize( tbn * mapN );\n#elif defined( USE_BUMPMAP )\n normal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif",normal_pars_fragment:"#ifndef FLAT_SHADED\n varying vec3 vNormal;\n #ifdef USE_TANGENT\n varying vec3 vTangent;\n varying vec3 vBitangent;\n #endif\n#endif",normal_pars_vertex:"#ifndef FLAT_SHADED\n varying vec3 vNormal;\n #ifdef USE_TANGENT\n varying vec3 vTangent;\n varying vec3 vBitangent;\n #endif\n#endif",normal_vertex:"#ifndef FLAT_SHADED\n vNormal = normalize( transformedNormal );\n #ifdef USE_TANGENT\n vTangent = normalize( transformedTangent );\n vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n #endif\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n uniform sampler2D normalMap;\n uniform vec2 normalScale;\n#endif\n#ifdef USE_NORMALMAP_OBJECTSPACE\n uniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) )\n mat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) {\n vec3 q0 = dFdx( eye_pos.xyz );\n vec3 q1 = dFdy( eye_pos.xyz );\n vec2 st0 = dFdx( uv.st );\n vec2 st1 = dFdy( uv.st );\n vec3 N = surf_norm;\n vec3 q1perp = cross( q1, N );\n vec3 q0perp = cross( N, q0 );\n vec3 T = q1perp * st0.x + q0perp * st1.x;\n vec3 B = q1perp * st0.y + q0perp * st1.y;\n float det = max( dot( T, T ), dot( B, B ) );\n float scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );\n return mat3( T * scale, B * scale, N );\n }\n#endif",clearcoat_normal_fragment_begin:"#ifdef USE_CLEARCOAT\n vec3 clearcoatNormal = nonPerturbedNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;\n clearcoatMapN.xy *= clearcoatNormalScale;\n clearcoatNormal = normalize( tbn2 * clearcoatMapN );\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n uniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n uniform sampler2D clearcoatNormalMap;\n uniform vec2 clearcoatNormalScale;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n uniform sampler2D clearcoatRoughnessMap;\n#endif",iridescence_pars_fragment:"#ifdef USE_IRIDESCENCEMAP\n uniform sampler2D iridescenceMap;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n uniform sampler2D iridescenceThicknessMap;\n#endif",opaque_fragment:"#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= material.transmissionAlpha;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n return normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n return 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;const float ShiftRight8 = 1. / 256.;\nconst float Inv255 = 1. / 255.;\nconst vec4 PackFactors = vec4( 1.0, 256.0, 256.0 * 256.0, 256.0 * 256.0 * 256.0 );\nconst vec2 UnpackFactors2 = vec2( UnpackDownscale, 1.0 / PackFactors.g );\nconst vec3 UnpackFactors3 = vec3( UnpackDownscale / PackFactors.rg, 1.0 / PackFactors.b );\nconst vec4 UnpackFactors4 = vec4( UnpackDownscale / PackFactors.rgb, 1.0 / PackFactors.a );\nvec4 packDepthToRGBA( const in float v ) {\n if( v <= 0.0 )\n return vec4( 0., 0., 0., 0. );\n if( v >= 1.0 )\n return vec4( 1., 1., 1., 1. );\n float vuf;\n float af = modf( v * PackFactors.a, vuf );\n float bf = modf( vuf * ShiftRight8, vuf );\n float gf = modf( vuf * ShiftRight8, vuf );\n return vec4( vuf * Inv255, gf * PackUpscale, bf * PackUpscale, af );\n}\nvec3 packDepthToRGB( const in float v ) {\n if( v <= 0.0 )\n return vec3( 0., 0., 0. );\n if( v >= 1.0 )\n return vec3( 1., 1., 1. );\n float vuf;\n float bf = modf( v * PackFactors.b, vuf );\n float gf = modf( vuf * ShiftRight8, vuf );\n return vec3( vuf * Inv255, gf * PackUpscale, bf );\n}\nvec2 packDepthToRG( const in float v ) {\n if( v <= 0.0 )\n return vec2( 0., 0. );\n if( v >= 1.0 )\n return vec2( 1., 1. );\n float vuf;\n float gf = modf( v * 256., vuf );\n return vec2( vuf * Inv255, gf );\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n return dot( v, UnpackFactors4 );\n}\nfloat unpackRGBToDepth( const in vec3 v ) {\n return dot( v, UnpackFactors3 );\n}\nfloat unpackRGToDepth( const in vec2 v ) {\n return v.r * UnpackFactors2.r + v.g * UnpackFactors2.g;\n}\nvec4 pack2HalfToRGBA( const in vec2 v ) {\n vec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n return vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( const in vec4 v ) {\n return vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n return ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {\n return depth * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n return ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {\n return ( near * far ) / ( ( far - near ) * depth - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n gl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_BATCHING\n mvPosition = batchingMatrix * mvPosition;\n#endif\n#ifdef USE_INSTANCING\n mvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n gl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n vec3 dithering( vec3 color ) {\n float grid_position = rand( gl_FragCoord.xy );\n vec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n return color + dither_shift_RGB;\n }\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n vec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );\n roughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n uniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#if NUM_SPOT_LIGHT_COORDS > 0\n varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#if NUM_SPOT_LIGHT_MAPS > 0\n uniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\n#endif\n#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHT_SHADOWS > 0\n uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n struct DirectionalLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n #endif\n #if NUM_SPOT_LIGHT_SHADOWS > 0\n uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n struct SpotLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n #endif\n #if NUM_POINT_LIGHT_SHADOWS > 0\n uniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n struct PointLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n float shadowCameraNear;\n float shadowCameraFar;\n };\n uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n #endif\n float texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n return step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n }\n vec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n return unpackRGBATo2Half( texture2D( shadow, uv ) );\n }\n float VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n float occlusion = 1.0;\n vec2 distribution = texture2DDistribution( shadow, uv );\n float hard_shadow = step( compare , distribution.x );\n if (hard_shadow != 1.0 ) {\n float distance = compare - distribution.x ;\n float variance = max( 0.00000, distribution.y * distribution.y );\n float softness_probability = variance / (variance + distance * distance ); softness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 ); occlusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n }\n return occlusion;\n }\n float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n float shadow = 1.0;\n shadowCoord.xyz /= shadowCoord.w;\n shadowCoord.z += shadowBias;\n bool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n bool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n if ( frustumTest ) {\n #if defined( SHADOWMAP_TYPE_PCF )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx0 = - texelSize.x * shadowRadius;\n float dy0 = - texelSize.y * shadowRadius;\n float dx1 = + texelSize.x * shadowRadius;\n float dy1 = + texelSize.y * shadowRadius;\n float dx2 = dx0 / 2.0;\n float dy2 = dy0 / 2.0;\n float dx3 = dx1 / 2.0;\n float dy3 = dy1 / 2.0;\n shadow = (\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n ) * ( 1.0 / 17.0 );\n #elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx = texelSize.x;\n float dy = texelSize.y;\n vec2 uv = shadowCoord.xy;\n vec2 f = fract( uv * shadowMapSize + 0.5 );\n uv -= f * texelSize;\n shadow = (\n texture2DCompare( shadowMap, uv, shadowCoord.z ) +\n texture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n texture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n mix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n f.x ) +\n mix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n f.x ) +\n mix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n f.y ) +\n mix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n f.y ) +\n mix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n f.x ),\n mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n f.x ),\n f.y )\n ) * ( 1.0 / 9.0 );\n #elif defined( SHADOWMAP_TYPE_VSM )\n shadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n #else\n shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n #endif\n }\n return mix( 1.0, shadow, shadowIntensity );\n }\n vec2 cubeToUV( vec3 v, float texelSizeY ) {\n vec3 absV = abs( v );\n float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n absV *= scaleToCube;\n v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n vec2 planar = v.xy;\n float almostATexel = 1.5 * texelSizeY;\n float almostOne = 1.0 - almostATexel;\n if ( absV.z >= almostOne ) {\n if ( v.z > 0.0 )\n planar.x = 4.0 - v.x;\n } else if ( absV.x >= almostOne ) {\n float signX = sign( v.x );\n planar.x = v.z * signX + 2.0 * signX;\n } else if ( absV.y >= almostOne ) {\n float signY = sign( v.y );\n planar.x = v.x + 2.0 * signY + 2.0;\n planar.y = v.z * signY - 2.0;\n }\n return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n }\n float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n float shadow = 1.0;\n vec3 lightToPosition = shadowCoord.xyz;\n \n float lightToPositionLength = length( lightToPosition );\n if ( lightToPositionLength - shadowCameraFar <= 0.0 && lightToPositionLength - shadowCameraNear >= 0.0 ) {\n float dp = ( lightToPositionLength - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear ); dp += shadowBias;\n vec3 bd3D = normalize( lightToPosition );\n vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n #if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n vec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n shadow = (\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n ) * ( 1.0 / 9.0 );\n #else\n shadow = texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n #endif\n }\n return mix( 1.0, shadow, shadowIntensity );\n }\n#endif",shadowmap_pars_vertex:"#if NUM_SPOT_LIGHT_COORDS > 0\n uniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\n varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHT_SHADOWS > 0\n uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n struct DirectionalLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n #endif\n #if NUM_SPOT_LIGHT_SHADOWS > 0\n struct SpotLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n #endif\n #if NUM_POINT_LIGHT_SHADOWS > 0\n uniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n struct PointLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n float shadowCameraNear;\n float shadowCameraFar;\n };\n uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n #endif\n#endif",shadowmap_vertex:"#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\n vec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n vec4 shadowWorldPosition;\n#endif\n#if defined( USE_SHADOWMAP )\n #if NUM_DIR_LIGHT_SHADOWS > 0\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n }\n #pragma unroll_loop_end\n #endif\n #if NUM_POINT_LIGHT_SHADOWS > 0\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n }\n #pragma unroll_loop_end\n #endif\n#endif\n#if NUM_SPOT_LIGHT_COORDS > 0\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\n shadowWorldPosition = worldPosition;\n #if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n shadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\n #endif\n vSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\n }\n #pragma unroll_loop_end\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n float shadow = 1.0;\n #ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHT_SHADOWS > 0\n DirectionalLightShadow directionalLight;\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n directionalLight = directionalLightShadows[ i ];\n shadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowIntensity, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n }\n #pragma unroll_loop_end\n #endif\n #if NUM_SPOT_LIGHT_SHADOWS > 0\n SpotLightShadow spotLight;\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n spotLight = spotLightShadows[ i ];\n shadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowIntensity, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n }\n #pragma unroll_loop_end\n #endif\n #if NUM_POINT_LIGHT_SHADOWS > 0\n PointLightShadow pointLight;\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n pointLight = pointLightShadows[ i ];\n shadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowIntensity, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n }\n #pragma unroll_loop_end\n #endif\n #endif\n return shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n mat4 boneMatX = getBoneMatrix( skinIndex.x );\n mat4 boneMatY = getBoneMatrix( skinIndex.y );\n mat4 boneMatZ = getBoneMatrix( skinIndex.z );\n mat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n uniform mat4 bindMatrix;\n uniform mat4 bindMatrixInverse;\n uniform highp sampler2D boneTexture;\n mat4 getBoneMatrix( const in float i ) {\n int size = textureSize( boneTexture, 0 ).x;\n int j = int( i ) * 4;\n int x = j % size;\n int y = j / size;\n vec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 );\n vec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 );\n vec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 );\n vec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 );\n return mat4( v1, v2, v3, v4 );\n }\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n vec4 skinned = vec4( 0.0 );\n skinned += boneMatX * skinVertex * skinWeight.x;\n skinned += boneMatY * skinVertex * skinWeight.y;\n skinned += boneMatZ * skinVertex * skinWeight.z;\n skinned += boneMatW * skinVertex * skinWeight.w;\n transformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n mat4 skinMatrix = mat4( 0.0 );\n skinMatrix += skinWeight.x * boneMatX;\n skinMatrix += skinWeight.y * boneMatY;\n skinMatrix += skinWeight.z * boneMatZ;\n skinMatrix += skinWeight.w * boneMatW;\n skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n #ifdef USE_TANGENT\n objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n #endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n vec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );\n specularStrength = texelSpecular.r;\n#else\n specularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n uniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n return saturate( toneMappingExposure * color );\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n return saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 CineonToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n color = max( vec3( 0.0 ), color - 0.004 );\n return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n vec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n vec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n return a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n const mat3 ACESInputMat = mat3(\n vec3( 0.59719, 0.07600, 0.02840 ), vec3( 0.35458, 0.90834, 0.13383 ),\n vec3( 0.04823, 0.01566, 0.83777 )\n );\n const mat3 ACESOutputMat = mat3(\n vec3( 1.60475, -0.10208, -0.00327 ), vec3( -0.53108, 1.10813, -0.07276 ),\n vec3( -0.07367, -0.00605, 1.07602 )\n );\n color *= toneMappingExposure / 0.6;\n color = ACESInputMat * color;\n color = RRTAndODTFit( color );\n color = ACESOutputMat * color;\n return saturate( color );\n}\nconst mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3(\n vec3( 1.6605, - 0.1246, - 0.0182 ),\n vec3( - 0.5876, 1.1329, - 0.1006 ),\n vec3( - 0.0728, - 0.0083, 1.1187 )\n);\nconst mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3(\n vec3( 0.6274, 0.0691, 0.0164 ),\n vec3( 0.3293, 0.9195, 0.0880 ),\n vec3( 0.0433, 0.0113, 0.8956 )\n);\nvec3 agxDefaultContrastApprox( vec3 x ) {\n vec3 x2 = x * x;\n vec3 x4 = x2 * x2;\n return + 15.5 * x4 * x2\n - 40.14 * x4 * x\n + 31.96 * x4\n - 6.868 * x2 * x\n + 0.4298 * x2\n + 0.1191 * x\n - 0.00232;\n}\nvec3 AgXToneMapping( vec3 color ) {\n const mat3 AgXInsetMatrix = mat3(\n vec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ),\n vec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ),\n vec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 )\n );\n const mat3 AgXOutsetMatrix = mat3(\n vec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ),\n vec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ),\n vec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 )\n );\n const float AgxMinEv = - 12.47393; const float AgxMaxEv = 4.026069;\n color *= toneMappingExposure;\n color = LINEAR_SRGB_TO_LINEAR_REC2020 * color;\n color = AgXInsetMatrix * color;\n color = max( color, 1e-10 ); color = log2( color );\n color = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv );\n color = clamp( color, 0.0, 1.0 );\n color = agxDefaultContrastApprox( color );\n color = AgXOutsetMatrix * color;\n color = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) );\n color = LINEAR_REC2020_TO_LINEAR_SRGB * color;\n color = clamp( color, 0.0, 1.0 );\n return color;\n}\nvec3 NeutralToneMapping( vec3 color ) {\n const float StartCompression = 0.8 - 0.04;\n const float Desaturation = 0.15;\n color *= toneMappingExposure;\n float x = min( color.r, min( color.g, color.b ) );\n float offset = x < 0.08 ? x - 6.25 * x * x : 0.04;\n color -= offset;\n float peak = max( color.r, max( color.g, color.b ) );\n if ( peak < StartCompression ) return color;\n float d = 1. - StartCompression;\n float newPeak = 1. - d * d / ( peak + d - StartCompression );\n color *= newPeak / peak;\n float g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. );\n return mix( color, vec3( newPeak ), g );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmission_fragment:"#ifdef USE_TRANSMISSION\n material.transmission = transmission;\n material.transmissionAlpha = 1.0;\n material.thickness = thickness;\n material.attenuationDistance = attenuationDistance;\n material.attenuationColor = attenuationColor;\n #ifdef USE_TRANSMISSIONMAP\n material.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r;\n #endif\n #ifdef USE_THICKNESSMAP\n material.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g;\n #endif\n vec3 pos = vWorldPosition;\n vec3 v = normalize( cameraPosition - pos );\n vec3 n = inverseTransformDirection( normal, viewMatrix );\n vec4 transmitted = getIBLVolumeRefraction(\n n, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\n pos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness,\n material.attenuationColor, material.attenuationDistance );\n material.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission );\n totalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission );\n#endif",transmission_pars_fragment:"#ifdef USE_TRANSMISSION\n uniform float transmission;\n uniform float thickness;\n uniform float attenuationDistance;\n uniform vec3 attenuationColor;\n #ifdef USE_TRANSMISSIONMAP\n uniform sampler2D transmissionMap;\n #endif\n #ifdef USE_THICKNESSMAP\n uniform sampler2D thicknessMap;\n #endif\n uniform vec2 transmissionSamplerSize;\n uniform sampler2D transmissionSamplerMap;\n uniform mat4 modelMatrix;\n uniform mat4 projectionMatrix;\n varying vec3 vWorldPosition;\n float w0( float a ) {\n return ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\n }\n float w1( float a ) {\n return ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 );\n }\n float w2( float a ){\n return ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\n }\n float w3( float a ) {\n return ( 1.0 / 6.0 ) * ( a * a * a );\n }\n float g0( float a ) {\n return w0( a ) + w1( a );\n }\n float g1( float a ) {\n return w2( a ) + w3( a );\n }\n float h0( float a ) {\n return - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\n }\n float h1( float a ) {\n return 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\n }\n vec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) {\n uv = uv * texelSize.zw + 0.5;\n vec2 iuv = floor( uv );\n vec2 fuv = fract( uv );\n float g0x = g0( fuv.x );\n float g1x = g1( fuv.x );\n float h0x = h0( fuv.x );\n float h1x = h1( fuv.x );\n float h0y = h0( fuv.y );\n float h1y = h1( fuv.y );\n vec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n vec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n vec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n vec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n return g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\n g1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\n }\n vec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\n vec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\n vec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\n vec2 fLodSizeInv = 1.0 / fLodSize;\n vec2 cLodSizeInv = 1.0 / cLodSize;\n vec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) );\n vec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) );\n return mix( fSample, cSample, fract( lod ) );\n }\n vec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n vec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n vec3 modelScale;\n modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n modelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n return normalize( refractionVector ) * thickness * modelScale;\n }\n float applyIorToRoughness( const in float roughness, const in float ior ) {\n return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n }\n vec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n float lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n return textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\n }\n vec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n if ( isinf( attenuationDistance ) ) {\n return vec3( 1.0 );\n } else {\n vec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n vec3 transmittance = exp( - attenuationCoefficient * transmissionDistance ); return transmittance;\n }\n }\n vec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\n const in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\n const in mat4 viewMatrix, const in mat4 projMatrix, const in float dispersion, const in float ior, const in float thickness,\n const in vec3 attenuationColor, const in float attenuationDistance ) {\n vec4 transmittedLight;\n vec3 transmittance;\n #ifdef USE_DISPERSION\n float halfSpread = ( ior - 1.0 ) * 0.025 * dispersion;\n vec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread );\n for ( int i = 0; i < 3; i ++ ) {\n vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix );\n vec3 refractedRayExit = position + transmissionRay;\n \n vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n vec2 refractionCoords = ndcPos.xy / ndcPos.w;\n refractionCoords += 1.0;\n refractionCoords /= 2.0;\n \n vec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] );\n transmittedLight[ i ] = transmissionSample[ i ];\n transmittedLight.a += transmissionSample.a;\n transmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ];\n }\n transmittedLight.a /= 3.0;\n \n #else\n \n vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n vec3 refractedRayExit = position + transmissionRay;\n vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n vec2 refractionCoords = ndcPos.xy / ndcPos.w;\n refractionCoords += 1.0;\n refractionCoords /= 2.0;\n transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n transmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );\n \n #endif\n vec3 attenuatedColor = transmittance * transmittedLight.rgb;\n vec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n float transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;\n return vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor );\n }\n#endif",uv_pars_fragment:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n varying vec2 vUv;\n#endif\n#ifdef USE_MAP\n varying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n varying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n varying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n varying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n varying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n varying vec2 vNormalMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n varying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n varying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n varying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n varying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n varying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n varying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n varying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n varying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n varying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n varying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n varying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n varying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n varying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n varying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n uniform mat3 transmissionMapTransform;\n varying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n uniform mat3 thicknessMapTransform;\n varying vec2 vThicknessMapUv;\n#endif",uv_pars_vertex:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n varying vec2 vUv;\n#endif\n#ifdef USE_MAP\n uniform mat3 mapTransform;\n varying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n uniform mat3 alphaMapTransform;\n varying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n uniform mat3 lightMapTransform;\n varying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n uniform mat3 aoMapTransform;\n varying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n uniform mat3 bumpMapTransform;\n varying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n uniform mat3 normalMapTransform;\n varying vec2 vNormalMapUv;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n uniform mat3 displacementMapTransform;\n varying vec2 vDisplacementMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n uniform mat3 emissiveMapTransform;\n varying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n uniform mat3 metalnessMapTransform;\n varying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n uniform mat3 roughnessMapTransform;\n varying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n uniform mat3 anisotropyMapTransform;\n varying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n uniform mat3 clearcoatMapTransform;\n varying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n uniform mat3 clearcoatNormalMapTransform;\n varying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n uniform mat3 clearcoatRoughnessMapTransform;\n varying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n uniform mat3 sheenColorMapTransform;\n varying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n uniform mat3 sheenRoughnessMapTransform;\n varying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n uniform mat3 iridescenceMapTransform;\n varying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n uniform mat3 iridescenceThicknessMapTransform;\n varying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n uniform mat3 specularMapTransform;\n varying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n uniform mat3 specularColorMapTransform;\n varying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n uniform mat3 specularIntensityMapTransform;\n varying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n uniform mat3 transmissionMapTransform;\n varying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n uniform mat3 thicknessMapTransform;\n varying vec2 vThicknessMapUv;\n#endif",uv_vertex:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n vUv = vec3( uv, 1 ).xy;\n#endif\n#ifdef USE_MAP\n vMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ALPHAMAP\n vAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_LIGHTMAP\n vLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_AOMAP\n vAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_BUMPMAP\n vBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_NORMALMAP\n vNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n vDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_EMISSIVEMAP\n vEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_METALNESSMAP\n vMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ROUGHNESSMAP\n vRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ANISOTROPYMAP\n vAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOATMAP\n vClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n vClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n vClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n vIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n vIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n vSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n vSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULARMAP\n vSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n vSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n vSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n vTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_THICKNESSMAP\n vThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\n vec4 worldPosition = vec4( transformed, 1.0 );\n #ifdef USE_BATCHING\n worldPosition = batchingMatrix * worldPosition;\n #endif\n #ifdef USE_INSTANCING\n worldPosition = instanceMatrix * worldPosition;\n #endif\n worldPosition = modelMatrix * worldPosition;\n#endif",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n vUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n gl_Position = vec4( position.xy, 1.0, 1.0 );\n}",background_frag:"uniform sampler2D t2D;\nuniform float backgroundIntensity;\nvarying vec2 vUv;\nvoid main() {\n vec4 texColor = texture2D( t2D, vUv );\n #ifdef DECODE_VIDEO_TEXTURE\n texColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );\n #endif\n texColor.rgb *= backgroundIntensity;\n gl_FragColor = texColor;\n #include \n #include \n}",backgroundCube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n vWorldDirection = transformDirection( position, modelMatrix );\n #include \n #include \n gl_Position.z = gl_Position.w;\n}",backgroundCube_frag:"#ifdef ENVMAP_TYPE_CUBE\n uniform samplerCube envMap;\n#elif defined( ENVMAP_TYPE_CUBE_UV )\n uniform sampler2D envMap;\n#endif\nuniform float flipEnvMap;\nuniform float backgroundBlurriness;\nuniform float backgroundIntensity;\nuniform mat3 backgroundRotation;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n #ifdef ENVMAP_TYPE_CUBE\n vec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\n #elif defined( ENVMAP_TYPE_CUBE_UV )\n vec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness );\n #else\n vec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n #endif\n texColor.rgb *= backgroundIntensity;\n gl_FragColor = texColor;\n #include \n #include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n vWorldDirection = transformDirection( position, modelMatrix );\n #include \n #include \n gl_Position.z = gl_Position.w;\n}",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n vec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n gl_FragColor = texColor;\n gl_FragColor.a *= opacity;\n #include \n #include \n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n #include \n #include \n #include \n #include \n #ifdef USE_DISPLACEMENTMAP\n #include \n #include \n #include \n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vHighPrecisionZW = gl_Position.zw;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n uniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n vec4 diffuseColor = vec4( 1.0 );\n #include \n #if DEPTH_PACKING == 3200\n diffuseColor.a = opacity;\n #endif\n #include \n #include \n #include \n #include \n #include \n float fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n #if DEPTH_PACKING == 3200\n gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n #elif DEPTH_PACKING == 3201\n gl_FragColor = packDepthToRGBA( fragCoordZ );\n #elif DEPTH_PACKING == 3202\n gl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 );\n #elif DEPTH_PACKING == 3203\n gl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );\n #endif\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #ifdef USE_DISPLACEMENTMAP\n #include \n #include \n #include \n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vWorldPosition = worldPosition.xyz;\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n vec4 diffuseColor = vec4( 1.0 );\n #include \n #include \n #include \n #include \n #include \n float dist = length( vWorldPosition - referencePosition );\n dist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n dist = saturate( dist );\n gl_FragColor = packDepthToRGBA( dist );\n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n vWorldDirection = transformDirection( position, modelMatrix );\n #include \n #include \n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n vec3 direction = normalize( vWorldDirection );\n vec2 sampleUV = equirectUv( direction );\n gl_FragColor = texture2D( tEquirect, sampleUV );\n #include \n #include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vLineDistance = scale * lineDistance;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n if ( mod( vLineDistance, totalSize ) > dashSize ) {\n discard;\n }\n vec3 outgoingLight = vec3( 0.0 );\n #include \n #include \n #include \n outgoingLight = diffuseColor.rgb;\n #include \n #include \n #include \n #include \n #include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n #include \n #include \n #include \n #include \n #include \n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n #ifdef USE_LIGHTMAP\n vec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n reflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\n #else\n reflectedLight.indirectDiffuse += vec3( 1.0 );\n #endif\n #include \n reflectedLight.indirectDiffuse *= diffuseColor.rgb;\n vec3 outgoingLight = reflectedLight.indirectDiffuse;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n #include \n}",meshlambert_frag:"#define LAMBERT\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 viewDir = normalize( vViewPosition );\n vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n vec3 y = cross( viewDir, x );\n vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n #ifdef USE_MATCAP\n vec4 matcapColor = texture2D( matcap, uv );\n #else\n vec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\n #endif\n vec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n #include \n #include \n #include \n #include \n #include \n #include \n}",meshnormal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n varying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n vViewPosition = - mvPosition.xyz;\n#endif\n}",meshnormal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n varying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( 0.0, 0.0, 0.0, opacity );\n #include \n #include \n #include \n #include \n gl_FragColor = vec4( packNormalToRGB( normal ), diffuseColor.a );\n #ifdef OPAQUE\n gl_FragColor.a = 1.0;\n #endif\n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n #include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n varying vec3 vWorldPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n#ifdef USE_TRANSMISSION\n vWorldPosition = worldPosition.xyz;\n#endif\n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n #define IOR\n #define USE_SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n uniform float ior;\n#endif\n#ifdef USE_SPECULAR\n uniform float specularIntensity;\n uniform vec3 specularColor;\n #ifdef USE_SPECULAR_COLORMAP\n uniform sampler2D specularColorMap;\n #endif\n #ifdef USE_SPECULAR_INTENSITYMAP\n uniform sampler2D specularIntensityMap;\n #endif\n#endif\n#ifdef USE_CLEARCOAT\n uniform float clearcoat;\n uniform float clearcoatRoughness;\n#endif\n#ifdef USE_DISPERSION\n uniform float dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n uniform float iridescence;\n uniform float iridescenceIOR;\n uniform float iridescenceThicknessMinimum;\n uniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n uniform vec3 sheenColor;\n uniform float sheenRoughness;\n #ifdef USE_SHEEN_COLORMAP\n uniform sampler2D sheenColorMap;\n #endif\n #ifdef USE_SHEEN_ROUGHNESSMAP\n uniform sampler2D sheenRoughnessMap;\n #endif\n#endif\n#ifdef USE_ANISOTROPY\n uniform vec2 anisotropyVector;\n #ifdef USE_ANISOTROPYMAP\n uniform sampler2D anisotropyMap;\n #endif\n#endif\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n vec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n #include \n vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n #ifdef USE_SHEEN\n float sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect;\n #endif\n #ifdef USE_CLEARCOAT\n float dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );\n vec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;\n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n #include \n #include \n #include \n #include \n #include \n #include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \n#ifdef USE_POINTS_UV\n varying vec2 vUv;\n uniform mat3 uvTransform;\n#endif\nvoid main() {\n #ifdef USE_POINTS_UV\n vUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n gl_PointSize = size;\n #ifdef USE_SIZEATTENUATION\n bool isPerspective = isPerspectiveMatrix( projectionMatrix );\n if ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n #endif\n #include \n #include \n #include \n #include \n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n vec3 outgoingLight = vec3( 0.0 );\n #include \n #include \n #include \n #include \n #include \n outgoingLight = diffuseColor.rgb;\n #include \n #include \n #include \n #include \n #include \n}",shadow_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n gl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n #include \n #include \n #include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n vec4 mvPosition = modelViewMatrix[ 3 ];\n vec2 scale = vec2( length( modelMatrix[ 0 ].xyz ), length( modelMatrix[ 1 ].xyz ) );\n #ifndef USE_SIZEATTENUATION\n bool isPerspective = isPerspectiveMatrix( projectionMatrix );\n if ( isPerspective ) scale *= - mvPosition.z;\n #endif\n vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n vec2 rotatedPosition;\n rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n mvPosition.xy += rotatedPosition;\n gl_Position = projectionMatrix * mvPosition;\n #include \n #include \n #include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n vec3 outgoingLight = vec3( 0.0 );\n #include \n #include \n #include \n #include \n #include \n outgoingLight = diffuseColor.rgb;\n #include \n #include \n #include \n #include \n}"},ok={common:{diffuse:{value:new tz(0xffffff)},opacity:{value:1},map:{value:null},mapTransform:{value:new Z},alphaMap:{value:null},alphaMapTransform:{value:new Z},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new Z}},envmap:{envMap:{value:null},envMapRotation:{value:new Z},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new Z}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new Z}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new Z},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new Z},normalScale:{value:new Y(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new Z},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new Z}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new Z}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new Z}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new tz(0xffffff)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new tz(0xffffff)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new Z},alphaTest:{value:0},uvTransform:{value:new Z}},sprite:{diffuse:{value:new tz(0xffffff)},opacity:{value:1},center:{value:new Y(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new Z},alphaMap:{value:null},alphaMapTransform:{value:new Z},alphaTest:{value:0}}},oH={basic:{uniforms:n_([ok.common,ok.specularmap,ok.envmap,ok.aomap,ok.lightmap,ok.fog]),vertexShader:oB.meshbasic_vert,fragmentShader:oB.meshbasic_frag},lambert:{uniforms:n_([ok.common,ok.specularmap,ok.envmap,ok.aomap,ok.lightmap,ok.emissivemap,ok.bumpmap,ok.normalmap,ok.displacementmap,ok.fog,ok.lights,{emissive:{value:new tz(0)}}]),vertexShader:oB.meshlambert_vert,fragmentShader:oB.meshlambert_frag},phong:{uniforms:n_([ok.common,ok.specularmap,ok.envmap,ok.aomap,ok.lightmap,ok.emissivemap,ok.bumpmap,ok.normalmap,ok.displacementmap,ok.fog,ok.lights,{emissive:{value:new tz(0)},specular:{value:new tz(1118481)},shininess:{value:30}}]),vertexShader:oB.meshphong_vert,fragmentShader:oB.meshphong_frag},standard:{uniforms:n_([ok.common,ok.envmap,ok.aomap,ok.lightmap,ok.emissivemap,ok.bumpmap,ok.normalmap,ok.displacementmap,ok.roughnessmap,ok.metalnessmap,ok.fog,ok.lights,{emissive:{value:new tz(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:oB.meshphysical_vert,fragmentShader:oB.meshphysical_frag},toon:{uniforms:n_([ok.common,ok.aomap,ok.lightmap,ok.emissivemap,ok.bumpmap,ok.normalmap,ok.displacementmap,ok.gradientmap,ok.fog,ok.lights,{emissive:{value:new tz(0)}}]),vertexShader:oB.meshtoon_vert,fragmentShader:oB.meshtoon_frag},matcap:{uniforms:n_([ok.common,ok.bumpmap,ok.normalmap,ok.displacementmap,ok.fog,{matcap:{value:null}}]),vertexShader:oB.meshmatcap_vert,fragmentShader:oB.meshmatcap_frag},points:{uniforms:n_([ok.points,ok.fog]),vertexShader:oB.points_vert,fragmentShader:oB.points_frag},dashed:{uniforms:n_([ok.common,ok.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:oB.linedashed_vert,fragmentShader:oB.linedashed_frag},depth:{uniforms:n_([ok.common,ok.displacementmap]),vertexShader:oB.depth_vert,fragmentShader:oB.depth_frag},normal:{uniforms:n_([ok.common,ok.bumpmap,ok.normalmap,ok.displacementmap,{opacity:{value:1}}]),vertexShader:oB.meshnormal_vert,fragmentShader:oB.meshnormal_frag},sprite:{uniforms:n_([ok.sprite,ok.fog]),vertexShader:oB.sprite_vert,fragmentShader:oB.sprite_frag},background:{uniforms:{uvTransform:{value:new Z},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:oB.background_vert,fragmentShader:oB.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new Z}},vertexShader:oB.backgroundCube_vert,fragmentShader:oB.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:oB.cube_vert,fragmentShader:oB.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:oB.equirect_vert,fragmentShader:oB.equirect_frag},distanceRGBA:{uniforms:n_([ok.common,ok.displacementmap,{referencePosition:{value:new eE},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:oB.distanceRGBA_vert,fragmentShader:oB.distanceRGBA_frag},shadow:{uniforms:n_([ok.lights,ok.fog,{color:{value:new tz(0)},opacity:{value:1}}]),vertexShader:oB.shadow_vert,fragmentShader:oB.shadow_frag}};oH.physical={uniforms:n_([oH.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new Z},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new Z},clearcoatNormalScale:{value:new Y(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new Z},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new Z},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new Z},sheen:{value:0},sheenColor:{value:new tz(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new Z},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new Z},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new Z},transmissionSamplerSize:{value:new Y},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new Z},attenuationDistance:{value:0},attenuationColor:{value:new tz(0)},specularColor:{value:new tz(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new Z},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new Z},anisotropyVector:{value:new Y},anisotropyMap:{value:null},anisotropyMapTransform:{value:new Z}}]),vertexShader:oB.meshphysical_vert,fragmentShader:oB.meshphysical_frag};let oV={r:0,b:0,g:0},oG=new tn,oW=new e2;function oj(e,t,n,i,r,a,s){let o,l,u=new tz(0),c=+(!0!==a),h=null,d=0,p=null;function f(e){let i=!0===e.isScene?e.background:null;return i&&i.isTexture&&(i=(e.backgroundBlurriness>0?n:t).get(i)),i}function m(t,n){t.getRGB(oV,ny(e)),i.buffers.color.setClear(oV.r,oV.g,oV.b,n,s)}return{getClearColor:function(){return u},setClearColor:function(e,t=1){u.set(e),m(u,c=t)},getClearAlpha:function(){return c},setClearAlpha:function(e){m(u,c=e)},render:function(t){let n=!1,r=f(t);null===r?m(u,c):r&&r.isColor&&(m(r,1),n=!0);let a=e.xr.getEnvironmentBlendMode();"additive"===a?i.buffers.color.setClear(0,0,0,1,s):"alpha-blend"===a&&i.buffers.color.setClear(0,0,0,0,s),(e.autoClear||n)&&(i.buffers.depth.setTest(!0),i.buffers.depth.setMask(!0),i.buffers.color.setMask(!0),e.clear(e.autoClearColor,e.autoClearDepth,e.autoClearStencil))},addToRenderList:function(t,n){let i=f(n);i&&(i.isCubeTexture||306===i.mapping)?(void 0===l&&((l=new nf(new ng(1,1,1),new nb({name:"BackgroundCubeMaterial",uniforms:nv(oH.backgroundCube.uniforms),vertexShader:oH.backgroundCube.vertexShader,fragmentShader:oH.backgroundCube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1}))).geometry.deleteAttribute("normal"),l.geometry.deleteAttribute("uv"),l.onBeforeRender=function(e,t,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(l.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),r.update(l)),oG.copy(n.backgroundRotation),oG.x*=-1,oG.y*=-1,oG.z*=-1,i.isCubeTexture&&!1===i.isRenderTargetTexture&&(oG.y*=-1,oG.z*=-1),l.material.uniforms.envMap.value=i,l.material.uniforms.flipEnvMap.value=i.isCubeTexture&&!1===i.isRenderTargetTexture?-1:1,l.material.uniforms.backgroundBlurriness.value=n.backgroundBlurriness,l.material.uniforms.backgroundIntensity.value=n.backgroundIntensity,l.material.uniforms.backgroundRotation.value.setFromMatrix4(oW.makeRotationFromEuler(oG)),l.material.toneMapped=eu.getTransfer(i.colorSpace)!==U,(h!==i||d!==i.version||p!==e.toneMapping)&&(l.material.needsUpdate=!0,h=i,d=i.version,p=e.toneMapping),l.layers.enableAll(),t.unshift(l,l.geometry,l.material,0,0,null)):i&&i.isTexture&&(void 0===o&&((o=new nf(new r9(2,2),new nb({name:"BackgroundMaterial",uniforms:nv(oH.background.uniforms),vertexShader:oH.background.vertexShader,fragmentShader:oH.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1}))).geometry.deleteAttribute("normal"),Object.defineProperty(o.material,"map",{get:function(){return this.uniforms.t2D.value}}),r.update(o)),o.material.uniforms.t2D.value=i,o.material.uniforms.backgroundIntensity.value=n.backgroundIntensity,o.material.toneMapped=eu.getTransfer(i.colorSpace)!==U,!0===i.matrixAutoUpdate&&i.updateMatrix(),o.material.uniforms.uvTransform.value.copy(i.matrix),(h!==i||d!==i.version||p!==e.toneMapping)&&(o.material.needsUpdate=!0,h=i,d=i.version,p=e.toneMapping),o.layers.enableAll(),t.unshift(o,o.geometry,o.material,0,0,null))},dispose:function(){void 0!==l&&(l.geometry.dispose(),l.material.dispose()),void 0!==o&&(o.geometry.dispose(),o.material.dispose())}}}function oX(e,t){let n=e.getParameter(e.MAX_VERTEX_ATTRIBS),i={},r=u(null),a=r,s=!1;function o(t){return e.bindVertexArray(t)}function l(t){return e.deleteVertexArray(t)}function u(e){let t=[],i=[],r=[];for(let e=0;e=0){let n=r[t],i=s[t];if(void 0===i&&("instanceMatrix"===t&&e.instanceMatrix&&(i=e.instanceMatrix),"instanceColor"===t&&e.instanceColor&&(i=e.instanceColor)),void 0===n||n.attribute!==i||i&&n.data!==i.data)return!0;o++}return a.attributesNum!==o||a.index!==i}(n,m,l,g))&&function(e,t,n,i){let r={},s=t.attributes,o=0,l=n.getAttributes();for(let t in l)if(l[t].location>=0){let n=s[t];void 0===n&&("instanceMatrix"===t&&e.instanceMatrix&&(n=e.instanceMatrix),"instanceColor"===t&&e.instanceColor&&(n=e.instanceColor));let i={};i.attribute=n,n&&n.data&&(i.data=n.data),r[t]=i,o++}a.attributes=r,a.attributesNum=o,a.index=i}(n,m,l,g),null!==g&&t.update(g,e.ELEMENT_ARRAY_BUFFER),(M||s)&&(s=!1,function(n,i,r,a){c();let s=a.attributes,o=r.getAttributes(),l=i.defaultAttributeValues;for(let i in o){let r=o[i];if(r.location>=0){let o=s[i];if(void 0===o&&("instanceMatrix"===i&&n.instanceMatrix&&(o=n.instanceMatrix),"instanceColor"===i&&n.instanceColor&&(o=n.instanceColor)),void 0!==o){let i=o.normalized,s=o.itemSize,l=t.get(o);if(void 0===l)continue;let u=l.buffer,c=l.type,p=l.bytesPerElement,m=c===e.INT||c===e.UNSIGNED_INT||1013===o.gpuType;if(o.isInterleavedBufferAttribute){let t=o.data,l=t.stride,g=o.offset;if(t.isInstancedInterleavedBuffer){for(let e=0;e0&&e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.HIGH_FLOAT).precision>0)return"highp";t="mediump"}return"mediump"===t&&e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.MEDIUM_FLOAT).precision>0&&e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}let s=void 0!==n.precision?n.precision:"highp",o=a(s);o!==s&&(console.warn("THREE.WebGLRenderer:",s,"not supported, using",o,"instead."),s=o);let l=!0===n.logarithmicDepthBuffer,u=!0===n.reverseDepthBuffer&&t.has("EXT_clip_control"),c=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS),h=e.getParameter(e.MAX_VERTEX_TEXTURE_IMAGE_UNITS);return{isWebGL2:!0,getMaxAnisotropy:function(){if(void 0!==r)return r;if(!0===t.has("EXT_texture_filter_anisotropic")){let n=t.get("EXT_texture_filter_anisotropic");r=e.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else r=0;return r},getMaxPrecision:a,textureFormatReadable:function(t){return 1023===t||i.convert(t)===e.getParameter(e.IMPLEMENTATION_COLOR_READ_FORMAT)},textureTypeReadable:function(n){let r=1016===n&&(t.has("EXT_color_buffer_half_float")||t.has("EXT_color_buffer_float"));return 1009===n||i.convert(n)===e.getParameter(e.IMPLEMENTATION_COLOR_READ_TYPE)||1015===n||!!r},precision:s,logarithmicDepthBuffer:l,reverseDepthBuffer:u,maxTextures:c,maxVertexTextures:h,maxTextureSize:e.getParameter(e.MAX_TEXTURE_SIZE),maxCubemapSize:e.getParameter(e.MAX_CUBE_MAP_TEXTURE_SIZE),maxAttributes:e.getParameter(e.MAX_VERTEX_ATTRIBS),maxVertexUniforms:e.getParameter(e.MAX_VERTEX_UNIFORM_VECTORS),maxVaryings:e.getParameter(e.MAX_VARYING_VECTORS),maxFragmentUniforms:e.getParameter(e.MAX_FRAGMENT_UNIFORM_VECTORS),vertexTextures:h>0,maxSamples:e.getParameter(e.MAX_SAMPLES)}}function oZ(e){let t=this,n=null,i=0,r=!1,a=!1,s=new iy,o=new Z,l={value:null,needsUpdate:!1};function u(e,n,i,r){let a=null!==e?e.length:0,u=null;if(0!==a){if(u=l.value,!0!==r||null===u){let t=i+4*a,r=n.matrixWorldInverse;o.getNormalMatrix(r),(null===u||u.length0),t.numPlanes=i,t.numIntersection=0)}}function oJ(e){let t=new WeakMap;function n(e,t){return 303===t?e.mapping=301:304===t&&(e.mapping=302),e}function i(e){let n=e.target;n.removeEventListener("dispose",i);let r=t.get(n);void 0!==r&&(t.delete(n),r.dispose())}return{get:function(r){if(r&&r.isTexture){let a=r.mapping;if(303===a||304===a)if(t.has(r))return n(t.get(r).texture,r.mapping);else{let a=r.image;if(!a||!(a.height>0))return null;{let s=new nR(a.height);return s.fromEquirectangularTexture(e,r),t.set(r,s),r.addEventListener("dispose",i),n(s.texture,r.mapping)}}}return r},dispose:function(){t=new WeakMap}}}let oK=[.125,.215,.35,.446,.526,.582],o$=new sn,oQ=new tz,o0=null,o1=0,o2=0,o3=!1,o4=(1+Math.sqrt(5))/2,o5=1/o4,o6=[new eE(-o4,o5,0),new eE(o4,o5,0),new eE(-o5,0,o4),new eE(o5,0,o4),new eE(0,o4,-o5),new eE(0,o4,o5),new eE(-1,1,-1),new eE(1,1,-1),new eE(-1,1,1),new eE(1,1,1)];class o8{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(e,t=0,n=.1,i=100){o0=this._renderer.getRenderTarget(),o1=this._renderer.getActiveCubeFace(),o2=this._renderer.getActiveMipmapLevel(),o3=this._renderer.xr.enabled,this._renderer.xr.enabled=!1,this._setSize(256);let r=this._allocateTargets();return r.depthBuffer=!0,this._sceneToCubeUV(e,n,i,r),t>0&&this._blur(r,0,0,t),this._applyPMREM(r),this._cleanup(r),r}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){null===this._cubemapMaterial&&(this._cubemapMaterial=lt(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){null===this._equirectMaterial&&(this._equirectMaterial=le(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),null!==this._cubemapMaterial&&this._cubemapMaterial.dispose(),null!==this._equirectMaterial&&this._equirectMaterial.dispose()}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){null!==this._blurMaterial&&this._blurMaterial.dispose(),null!==this._pingPongRenderTarget&&this._pingPongRenderTarget.dispose();for(let e=0;ee-4?o=oK[s-e+4-1]:0===s&&(o=0),i.push(o);let l=1/(a-2),u=-l,c=1+l,h=[u,u,c,u,c,c,u,u,c,c,u,c],d=new Float32Array(108),p=new Float32Array(72),f=new Float32Array(36);for(let e=0;e<6;e++){let t=e%3*2/3-1,n=e>2?0:-1,i=[t,n,0,t+2/3,n,0,t+2/3,n+1,0,t,n,0,t+2/3,n+1,0,t,n+1,0];d.set(i,18*e),p.set(h,12*e);let r=[e,e,e,e,e,e];f.set(r,6*e)}let m=new nn;m.setAttribute("position",new tZ(d,3)),m.setAttribute("uv",new tZ(p,2)),m.setAttribute("faceIndex",new tZ(f,1)),t.push(m),r>4&&r--}return{lodPlanes:t,sizeLods:n,sigmas:i}}(i)),this._blurMaterial=(r=i,new nb({name:"SphericalGaussianBlur",defines:{n:20,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/t,CUBEUV_MAX_MIP:`${r}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:new Float32Array(20)},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:new eE(0,1,0)}},vertexShader:ln(),fragmentShader:` - - precision mediump float; - precision mediump int; - - varying vec3 vOutputDirection; - - uniform sampler2D envMap; - uniform int samples; - uniform float weights[ n ]; - uniform bool latitudinal; - uniform float dTheta; - uniform float mipInt; - uniform vec3 poleAxis; - - #define ENVMAP_TYPE_CUBE_UV - #include - - vec3 getSample( float theta, vec3 axis ) { - - float cosTheta = cos( theta ); - // Rodrigues' axis-angle rotation - vec3 sampleDirection = vOutputDirection * cosTheta - + cross( axis, vOutputDirection ) * sin( theta ) - + axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta ); - - return bilinearCubeUV( envMap, sampleDirection, mipInt ); - - } - - void main() { - - vec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection ); - - if ( all( equal( axis, vec3( 0.0 ) ) ) ) { - - axis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x ); - - } - - axis = normalize( axis ); - - gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 ); - gl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis ); - - for ( int i = 1; i < n; i++ ) { - - if ( i >= samples ) { - - break; - - } - - float theta = dTheta * float( i ); - gl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis ); - gl_FragColor.rgb += weights[ i ] * getSample( theta, axis ); - - } - - } - `,blending:0,depthTest:!1,depthWrite:!1}))}return i}_compileMaterial(e){let t=new nf(this._lodPlanes[0],e);this._renderer.compile(t,o$)}_sceneToCubeUV(e,t,n,i){let r=new nE(90,1,t,n),a=[1,-1,1,1,1,1],s=[1,1,1,-1,-1,-1],o=this._renderer,l=o.autoClear,u=o.toneMapping;o.getClearColor(oQ),o.toneMapping=0,o.autoClear=!1;let c=new tV({name:"PMREM.Background",side:1,depthWrite:!1,depthTest:!1}),h=new nf(new ng,c),d=!1,p=e.background;p?p.isColor&&(c.color.copy(p),e.background=null,d=!0):(c.color.copy(oQ),d=!0);for(let t=0;t<6;t++){let n=t%3;0===n?(r.up.set(0,a[t],0),r.lookAt(s[t],0,0)):1===n?(r.up.set(0,0,a[t]),r.lookAt(0,s[t],0)):(r.up.set(0,a[t],0),r.lookAt(0,0,s[t]));let l=this._cubeSize;o7(i,n*l,t>2?l:0,l,l),o.setRenderTarget(i),d&&o.render(h,r),o.render(e,r)}h.geometry.dispose(),h.material.dispose(),o.toneMapping=u,o.autoClear=l,e.background=p}_textureToCubeUV(e,t){let n=this._renderer,i=301===e.mapping||302===e.mapping;i?(null===this._cubemapMaterial&&(this._cubemapMaterial=lt()),this._cubemapMaterial.uniforms.flipEnvMap.value=!1===e.isRenderTargetTexture?-1:1):null===this._equirectMaterial&&(this._equirectMaterial=le());let r=i?this._cubemapMaterial:this._equirectMaterial,a=new nf(this._lodPlanes[0],r);r.uniforms.envMap.value=e;let s=this._cubeSize;o7(t,0,0,3*s,2*s),n.setRenderTarget(t),n.render(a,o$)}_applyPMREM(e){let t=this._renderer,n=t.autoClear;t.autoClear=!1;let i=this._lodPlanes.length;for(let t=1;t20&&console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${f} samples when the maximum is set to 20`);let m=[],g=0;for(let e=0;e<20;++e){let t=e/p,n=Math.exp(-t*t/2);m.push(n),0===e?g+=n:ev-4?i-v+4:0),y,3*_,2*_),o.setRenderTarget(t),o.render(u,o$)}}function o9(e,t,n){let i=new ex(e,t,n);return i.texture.mapping=306,i.texture.name="PMREM.cubeUv",i.scissorTest=!0,i}function o7(e,t,n,i,r){e.viewport.set(t,n,i,r),e.scissor.set(t,n,i,r)}function le(){return new nb({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:ln(),fragmentShader:` - - precision mediump float; - precision mediump int; - - varying vec3 vOutputDirection; - - uniform sampler2D envMap; - - #include - - void main() { - - vec3 outputDirection = normalize( vOutputDirection ); - vec2 uv = equirectUv( outputDirection ); - - gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 ); - - } - `,blending:0,depthTest:!1,depthWrite:!1})}function lt(){return new nb({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:ln(),fragmentShader:` - - precision mediump float; - precision mediump int; - - uniform float flipEnvMap; - - varying vec3 vOutputDirection; - - uniform samplerCube envMap; - - void main() { - - gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) ); - - } - `,blending:0,depthTest:!1,depthWrite:!1})}function ln(){return` - - precision mediump float; - precision mediump int; - - attribute float faceIndex; - - varying vec3 vOutputDirection; - - // RH coordinate system; PMREM face-indexing convention - vec3 getDirection( vec2 uv, float face ) { - - uv = 2.0 * uv - 1.0; - - vec3 direction = vec3( uv, 1.0 ); - - if ( face == 0.0 ) { - - direction = direction.zyx; // ( 1, v, u ) pos x - - } else if ( face == 1.0 ) { - - direction = direction.xzy; - direction.xz *= -1.0; // ( -u, 1, -v ) pos y - - } else if ( face == 2.0 ) { - - direction.x *= -1.0; // ( -u, v, 1 ) pos z - - } else if ( face == 3.0 ) { - - direction = direction.zyx; - direction.xz *= -1.0; // ( -1, v, -u ) neg x - - } else if ( face == 4.0 ) { - - direction = direction.xzy; - direction.xy *= -1.0; // ( -u, -1, v ) neg y - - } else if ( face == 5.0 ) { - - direction.z *= -1.0; // ( u, v, -1 ) neg z - - } - - return direction; - - } - - void main() { - - vOutputDirection = getDirection( uv, faceIndex ); - gl_Position = vec4( position, 1.0 ); - - } - `}function li(e){let t=new WeakMap,n=null;function i(e){let n=e.target;n.removeEventListener("dispose",i);let r=t.get(n);void 0!==r&&(t.delete(n),r.dispose())}return{get:function(r){if(r&&r.isTexture){let a=r.mapping,s=303===a||304===a,o=301===a||302===a;if(s||o){let a=t.get(r),l=void 0!==a?a.texture.pmremVersion:0;if(r.isRenderTargetTexture&&r.pmremVersion!==l)return null===n&&(n=new o8(e)),(a=s?n.fromEquirectangular(r,a):n.fromCubemap(r,a)).texture.pmremVersion=r.pmremVersion,t.set(r,a),a.texture;{if(void 0!==a)return a.texture;let l=r.image;return s&&l&&l.height>0||o&&l&&function(e){let t=0;for(let n=0;n<6;n++)void 0!==e[n]&&t++;return 6===t}(l)?(null===n&&(n=new o8(e)),(a=s?n.fromEquirectangular(r):n.fromCubemap(r)).texture.pmremVersion=r.pmremVersion,t.set(r,a),r.addEventListener("dispose",i),a.texture):null}}}return r},dispose:function(){t=new WeakMap,null!==n&&(n.dispose(),n=null)}}}function lr(e){let t={};function n(n){let i;if(void 0!==t[n])return t[n];switch(n){case"WEBGL_depth_texture":i=e.getExtension("WEBGL_depth_texture")||e.getExtension("MOZ_WEBGL_depth_texture")||e.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":i=e.getExtension("EXT_texture_filter_anisotropic")||e.getExtension("MOZ_EXT_texture_filter_anisotropic")||e.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":i=e.getExtension("WEBGL_compressed_texture_s3tc")||e.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||e.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":i=e.getExtension("WEBGL_compressed_texture_pvrtc")||e.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:i=e.getExtension(n)}return t[n]=i,i}return{has:function(e){return null!==n(e)},init:function(){n("EXT_color_buffer_float"),n("WEBGL_clip_cull_distance"),n("OES_texture_float_linear"),n("EXT_color_buffer_half_float"),n("WEBGL_multisampled_render_to_texture"),n("WEBGL_render_shared_exponent")},get:function(e){let t=n(e);return null===t&&ei("THREE.WebGLRenderer: "+e+" extension not supported."),t}}}function la(e,t,n,i){let r={},a=new WeakMap;function s(e){let o=e.target;for(let e in null!==o.index&&t.remove(o.index),o.attributes)t.remove(o.attributes[e]);o.removeEventListener("dispose",s),delete r[o.id];let l=a.get(o);l&&(t.remove(l),a.delete(o)),i.releaseStatesOfGeometry(o),!0===o.isInstancedBufferGeometry&&delete o._maxInstanceCount,n.memory.geometries--}function o(e){let n=[],i=e.index,r=e.attributes.position,s=0;if(null!==i){let e=i.array;s=i.version;for(let t=0,i=e.length;tt.maxTextureSize&&(f=Math.ceil(p/t.maxTextureSize),p=t.maxTextureSize);let m=new Float32Array(p*f*4*c),g=new eb(m,p,f,c);g.type=1015,g.needsUpdate=!0;let v=4*d;for(let t=0;t0)return e;let r=t*n,a=lm[r];if(void 0===a&&(a=new Float32Array(r),lm[r]=a),0!==t){i.toArray(a,0);for(let i=1,r=0;i!==t;++i)r+=n,e[i].toArray(a,r)}return a}function lb(e,t){if(e.length!==t.length)return!1;for(let n=0,i=e.length;n":" "} ${r}: ${n[e]}`)}return i.join("\n")}(e.getShaderSource(t),i)}}let ul=new eE;function uu(e){return""!==e}function uc(e,t){let n=t.numSpotLightShadows+t.numSpotLightMaps-t.numSpotLightShadowsWithMaps;return e.replace(/NUM_DIR_LIGHTS/g,t.numDirLights).replace(/NUM_SPOT_LIGHTS/g,t.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g,t.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g,n).replace(/NUM_RECT_AREA_LIGHTS/g,t.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,t.numPointLights).replace(/NUM_HEMI_LIGHTS/g,t.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,t.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g,t.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g,t.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,t.numPointLightShadows)}function uh(e,t){return e.replace(/NUM_CLIPPING_PLANES/g,t.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,t.numClippingPlanes-t.numClipIntersection)}let ud=/^[ \t]*#include +<([\w\d./]+)>/gm;function up(e){return e.replace(ud,um)}let uf=new Map;function um(e,t){let n=oB[t];if(void 0===n){let e=uf.get(t);if(void 0!==e)n=oB[e],console.warn('THREE.WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.',t,e);else throw Error("Can not resolve #include <"+t+">")}return up(n)}let ug=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function uv(e){return e.replace(ug,u_)}function u_(e,t,n,i){let r="";for(let e=parseInt(t);e0&&(r+="\n"),(a=["#define SHADER_TYPE "+n.shaderType,"#define SHADER_NAME "+n.shaderName,x].filter(uu).join("\n")).length>0&&(a+="\n");else{let e,t,i,s;r=[uy(n),"#define SHADER_TYPE "+n.shaderType,"#define SHADER_NAME "+n.shaderName,x,n.extensionClipCullDistance?"#define USE_CLIP_DISTANCE":"",n.batching?"#define USE_BATCHING":"",n.batchingColor?"#define USE_BATCHING_COLOR":"",n.instancing?"#define USE_INSTANCING":"",n.instancingColor?"#define USE_INSTANCING_COLOR":"",n.instancingMorph?"#define USE_INSTANCING_MORPH":"",n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+g:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",n.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",n.displacementMap?"#define USE_DISPLACEMENTMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.anisotropy?"#define USE_ANISOTROPY":"",n.anisotropyMap?"#define USE_ANISOTROPYMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",n.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",n.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.alphaHash?"#define USE_ALPHAHASH":"",n.transmission?"#define USE_TRANSMISSION":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.thicknessMap?"#define USE_THICKNESSMAP":"",n.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",n.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",n.mapUv?"#define MAP_UV "+n.mapUv:"",n.alphaMapUv?"#define ALPHAMAP_UV "+n.alphaMapUv:"",n.lightMapUv?"#define LIGHTMAP_UV "+n.lightMapUv:"",n.aoMapUv?"#define AOMAP_UV "+n.aoMapUv:"",n.emissiveMapUv?"#define EMISSIVEMAP_UV "+n.emissiveMapUv:"",n.bumpMapUv?"#define BUMPMAP_UV "+n.bumpMapUv:"",n.normalMapUv?"#define NORMALMAP_UV "+n.normalMapUv:"",n.displacementMapUv?"#define DISPLACEMENTMAP_UV "+n.displacementMapUv:"",n.metalnessMapUv?"#define METALNESSMAP_UV "+n.metalnessMapUv:"",n.roughnessMapUv?"#define ROUGHNESSMAP_UV "+n.roughnessMapUv:"",n.anisotropyMapUv?"#define ANISOTROPYMAP_UV "+n.anisotropyMapUv:"",n.clearcoatMapUv?"#define CLEARCOATMAP_UV "+n.clearcoatMapUv:"",n.clearcoatNormalMapUv?"#define CLEARCOAT_NORMALMAP_UV "+n.clearcoatNormalMapUv:"",n.clearcoatRoughnessMapUv?"#define CLEARCOAT_ROUGHNESSMAP_UV "+n.clearcoatRoughnessMapUv:"",n.iridescenceMapUv?"#define IRIDESCENCEMAP_UV "+n.iridescenceMapUv:"",n.iridescenceThicknessMapUv?"#define IRIDESCENCE_THICKNESSMAP_UV "+n.iridescenceThicknessMapUv:"",n.sheenColorMapUv?"#define SHEEN_COLORMAP_UV "+n.sheenColorMapUv:"",n.sheenRoughnessMapUv?"#define SHEEN_ROUGHNESSMAP_UV "+n.sheenRoughnessMapUv:"",n.specularMapUv?"#define SPECULARMAP_UV "+n.specularMapUv:"",n.specularColorMapUv?"#define SPECULAR_COLORMAP_UV "+n.specularColorMapUv:"",n.specularIntensityMapUv?"#define SPECULAR_INTENSITYMAP_UV "+n.specularIntensityMapUv:"",n.transmissionMapUv?"#define TRANSMISSIONMAP_UV "+n.transmissionMapUv:"",n.thicknessMapUv?"#define THICKNESSMAP_UV "+n.thicknessMapUv:"",n.vertexTangents&&!1===n.flatShading?"#define USE_TANGENT":"",n.vertexColors?"#define USE_COLOR":"",n.vertexAlphas?"#define USE_COLOR_ALPHA":"",n.vertexUv1s?"#define USE_UV1":"",n.vertexUv2s?"#define USE_UV2":"",n.vertexUv3s?"#define USE_UV3":"",n.pointsUvs?"#define USE_POINTS_UV":"",n.flatShading?"#define FLAT_SHADED":"",n.skinning?"#define USE_SKINNING":"",n.morphTargets?"#define USE_MORPHTARGETS":"",n.morphNormals&&!1===n.flatShading?"#define USE_MORPHNORMALS":"",n.morphColors?"#define USE_MORPHCOLORS":"",n.morphTargetsCount>0?"#define MORPHTARGETS_TEXTURE_STRIDE "+n.morphTextureStride:"",n.morphTargetsCount>0?"#define MORPHTARGETS_COUNT "+n.morphTargetsCount:"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+f:"",n.sizeAttenuation?"#define USE_SIZEATTENUATION":"",n.numLightProbes>0?"#define USE_LIGHT_PROBES":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.reverseDepthBuffer?"#define USE_REVERSEDEPTHBUF":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING"," attribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR"," attribute vec3 instanceColor;","#endif","#ifdef USE_INSTANCING_MORPH"," uniform sampler2D morphTexture;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_UV1"," attribute vec2 uv1;","#endif","#ifdef USE_UV2"," attribute vec2 uv2;","#endif","#ifdef USE_UV3"," attribute vec2 uv3;","#endif","#ifdef USE_TANGENT"," attribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )"," attribute vec4 color;","#elif defined( USE_COLOR )"," attribute vec3 color;","#endif","#ifdef USE_SKINNING"," attribute vec4 skinIndex;"," attribute vec4 skinWeight;","#endif","\n"].filter(uu).join("\n"),a=[uy(n),"#define SHADER_TYPE "+n.shaderType,"#define SHADER_NAME "+n.shaderName,x,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.alphaToCoverage?"#define ALPHA_TO_COVERAGE":"",n.map?"#define USE_MAP":"",n.matcap?"#define USE_MATCAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+m:"",n.envMap?"#define "+g:"",n.envMap?"#define "+v:"",_?"#define CUBEUV_TEXEL_WIDTH "+_.texelWidth:"",_?"#define CUBEUV_TEXEL_HEIGHT "+_.texelHeight:"",_?"#define CUBEUV_MAX_MIP "+_.maxMip+".0":"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",n.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.anisotropy?"#define USE_ANISOTROPY":"",n.anisotropyMap?"#define USE_ANISOTROPYMAP":"",n.clearcoat?"#define USE_CLEARCOAT":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.dispersion?"#define USE_DISPERSION":"",n.iridescence?"#define USE_IRIDESCENCE":"",n.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",n.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",n.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.alphaTest?"#define USE_ALPHATEST":"",n.alphaHash?"#define USE_ALPHAHASH":"",n.sheen?"#define USE_SHEEN":"",n.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",n.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",n.transmission?"#define USE_TRANSMISSION":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.thicknessMap?"#define USE_THICKNESSMAP":"",n.vertexTangents&&!1===n.flatShading?"#define USE_TANGENT":"",n.vertexColors||n.instancingColor||n.batchingColor?"#define USE_COLOR":"",n.vertexAlphas?"#define USE_COLOR_ALPHA":"",n.vertexUv1s?"#define USE_UV1":"",n.vertexUv2s?"#define USE_UV2":"",n.vertexUv3s?"#define USE_UV3":"",n.pointsUvs?"#define USE_POINTS_UV":"",n.gradientMap?"#define USE_GRADIENTMAP":"",n.flatShading?"#define FLAT_SHADED":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+f:"",n.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",n.numLightProbes>0?"#define USE_LIGHT_PROBES":"",n.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",n.decodeVideoTextureEmissive?"#define DECODE_VIDEO_TEXTURE_EMISSIVE":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.reverseDepthBuffer?"#define USE_REVERSEDEPTHBUF":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",0!==n.toneMapping?"#define TONE_MAPPING":"",0!==n.toneMapping?oB.tonemapping_pars_fragment:"",0!==n.toneMapping?function(e,t){let n;switch(t){case 1:n="Linear";break;case 2:n="Reinhard";break;case 3:n="Cineon";break;case 4:n="ACESFilmic";break;case 6:n="AgX";break;case 7:n="Neutral";break;case 5:n="Custom";break;default:console.warn("THREE.WebGLProgram: Unsupported toneMapping:",t),n="Linear"}return"vec3 "+e+"( vec3 color ) { return "+n+"ToneMapping( color ); }"}("toneMapping",n.toneMapping):"",n.dithering?"#define DITHERING":"",n.opaque?"#define OPAQUE":"",oB.colorspace_pars_fragment,(e=function(e){eu._getMatrix(us,eu.workingColorSpace,e);let t=`mat3( ${us.elements.map(e=>e.toFixed(4))} )`;switch(eu.getTransfer(e)){case N:return[t,"LinearTransferOETF"];case U:return[t,"sRGBTransferOETF"];default:return console.warn("THREE.WebGLProgram: Unsupported color space: ",e),[t,"LinearTransferOETF"]}}(n.outputColorSpace),`vec4 linearToOutputTexel( vec4 value ) { - return ${e[1]}( vec4( value.rgb * ${e[0]}, value.a ) ); -}`),(eu.getLuminanceCoefficients(ul),t=ul.x.toFixed(4),i=ul.y.toFixed(4),s=ul.z.toFixed(4),`float luminance( const in vec3 rgb ) { - const vec3 weights = vec3( ${t}, ${i}, ${s} ); - return dot( weights, rgb ); -}`),n.useDepthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(uu).join("\n")}d=uh(d=uc(d=up(d),n),n),p=uh(p=uc(p=up(p),n),n),d=uv(d),p=uv(p),!0!==n.isRawShaderMaterial&&(S="#version 300 es\n",r=[y,"#define attribute in\n#define varying out\n#define texture2D texture"].join("\n")+"\n"+r,a=["#define varying in",n.glslVersion===D?"":"layout(location = 0) out highp vec4 pc_fragColor;",n.glslVersion===D?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth\n#define texture2D texture\n#define textureCube texture\n#define texture2DProj textureProj\n#define texture2DLodEXT textureLod\n#define texture2DProjLodEXT textureProjLod\n#define textureCubeLodEXT textureLod\n#define texture2DGradEXT textureGrad\n#define texture2DProjGradEXT textureProjGrad\n#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+a);let M=S+r+d,T=S+a+p,w=ur(c,c.VERTEX_SHADER,M),E=ur(c,c.FRAGMENT_SHADER,T);function A(t){if(e.debug.checkShaderErrors){let n=c.getProgramInfoLog(b).trim(),i=c.getShaderInfoLog(w).trim(),s=c.getShaderInfoLog(E).trim(),o=!0,l=!0;if(!1===c.getProgramParameter(b,c.LINK_STATUS))if(o=!1,"function"==typeof e.debug.onShaderError)e.debug.onShaderError(c,b,w,E);else{let e=uo(c,w,"vertex"),i=uo(c,E,"fragment");console.error("THREE.WebGLProgram: Shader Error "+c.getError()+" - VALIDATE_STATUS "+c.getProgramParameter(b,c.VALIDATE_STATUS)+"\n\nMaterial Name: "+t.name+"\nMaterial Type: "+t.type+"\n\nProgram Info Log: "+n+"\n"+e+"\n"+i)}else""!==n?console.warn("THREE.WebGLProgram: Program Info Log:",n):(""===i||""===s)&&(l=!1);l&&(t.diagnostics={runnable:o,programLog:n,vertexShader:{log:i,prefix:r},fragmentShader:{log:s,prefix:a}})}c.deleteShader(w),c.deleteShader(E),s=new ui(c,b),o=function(e,t){let n={},i=e.getProgramParameter(t,e.ACTIVE_ATTRIBUTES);for(let r=0;r0,Z=a.clearcoat>0,J=a.dispersion>0,K=a.iridescence>0,$=a.sheen>0,Q=a.transmission>0,ee=Y&&!!a.anisotropyMap,et=Z&&!!a.clearcoatMap,en=Z&&!!a.clearcoatNormalMap,ei=Z&&!!a.clearcoatRoughnessMap,er=K&&!!a.iridescenceMap,ea=K&&!!a.iridescenceThicknessMap,es=$&&!!a.sheenColorMap,eo=$&&!!a.sheenRoughnessMap,el=!!a.specularMap,ec=!!a.specularColorMap,eh=!!a.specularIntensityMap,ed=Q&&!!a.transmissionMap,ep=Q&&!!a.thicknessMap,ef=!!a.gradientMap,em=!!a.alphaMap,eg=a.alphaTest>0,ev=!!a.alphaHash,e_=!!a.extensions,ey=0;a.toneMapped&&(null===I||!0===I.isXRRenderTarget)&&(ey=e.toneMapping);let ex={shaderID:A,shaderType:a.type,shaderName:a.name,vertexShader:_,fragmentShader:y,defines:a.defines,customVertexShaderID:x,customFragmentShaderID:b,isRawShaderMaterial:!0===a.isRawShaderMaterial,glslVersion:a.glslVersion,precision:p,batching:O,batchingColor:O&&null!==v._colorsTexture,instancing:D,instancingColor:D&&null!==v.instanceColor,instancingMorph:D&&null!==v.morphTexture,supportsVertexTextures:d,outputColorSpace:null===I?e.outputColorSpace:!0===I.isXRRenderTarget?I.texture.colorSpace:L,alphaToCoverage:!!a.alphaToCoverage,map:F,matcap:z,envMap:B,envMapMode:B&&w.mapping,envMapCubeUVHeight:E,aoMap:k,lightMap:H,bumpMap:V,normalMap:G,displacementMap:d&&W,emissiveMap:j,normalMapObjectSpace:G&&1===a.normalMapType,normalMapTangentSpace:G&&0===a.normalMapType,metalnessMap:X,roughnessMap:q,anisotropy:Y,anisotropyMap:ee,clearcoat:Z,clearcoatMap:et,clearcoatNormalMap:en,clearcoatRoughnessMap:ei,dispersion:J,iridescence:K,iridescenceMap:er,iridescenceThicknessMap:ea,sheen:$,sheenColorMap:es,sheenRoughnessMap:eo,specularMap:el,specularColorMap:ec,specularIntensityMap:eh,transmission:Q,transmissionMap:ed,thicknessMap:ep,gradientMap:ef,opaque:!1===a.transparent&&1===a.blending&&!1===a.alphaToCoverage,alphaMap:em,alphaTest:eg,alphaHash:ev,combine:a.combine,mapUv:F&&m(a.map.channel),aoMapUv:k&&m(a.aoMap.channel),lightMapUv:H&&m(a.lightMap.channel),bumpMapUv:V&&m(a.bumpMap.channel),normalMapUv:G&&m(a.normalMap.channel),displacementMapUv:W&&m(a.displacementMap.channel),emissiveMapUv:j&&m(a.emissiveMap.channel),metalnessMapUv:X&&m(a.metalnessMap.channel),roughnessMapUv:q&&m(a.roughnessMap.channel),anisotropyMapUv:ee&&m(a.anisotropyMap.channel),clearcoatMapUv:et&&m(a.clearcoatMap.channel),clearcoatNormalMapUv:en&&m(a.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:ei&&m(a.clearcoatRoughnessMap.channel),iridescenceMapUv:er&&m(a.iridescenceMap.channel),iridescenceThicknessMapUv:ea&&m(a.iridescenceThicknessMap.channel),sheenColorMapUv:es&&m(a.sheenColorMap.channel),sheenRoughnessMapUv:eo&&m(a.sheenRoughnessMap.channel),specularMapUv:el&&m(a.specularMap.channel),specularColorMapUv:ec&&m(a.specularColorMap.channel),specularIntensityMapUv:eh&&m(a.specularIntensityMap.channel),transmissionMapUv:ed&&m(a.transmissionMap.channel),thicknessMapUv:ep&&m(a.thicknessMap.channel),alphaMapUv:em&&m(a.alphaMap.channel),vertexTangents:!!M.attributes.tangent&&(G||Y),vertexColors:a.vertexColors,vertexAlphas:!0===a.vertexColors&&!!M.attributes.color&&4===M.attributes.color.itemSize,pointsUvs:!0===v.isPoints&&!!M.attributes.uv&&(F||em),fog:!!S,useFog:!0===a.fog,fogExp2:!!S&&S.isFogExp2,flatShading:!0===a.flatShading,sizeAttenuation:!0===a.sizeAttenuation,logarithmicDepthBuffer:h,reverseDepthBuffer:N,skinning:!0===v.isSkinnedMesh,morphTargets:void 0!==M.morphAttributes.position,morphNormals:void 0!==M.morphAttributes.normal,morphColors:void 0!==M.morphAttributes.color,morphTargetsCount:R,morphTextureStride:P,numDirLights:o.directional.length,numPointLights:o.point.length,numSpotLights:o.spot.length,numSpotLightMaps:o.spotLightMap.length,numRectAreaLights:o.rectArea.length,numHemiLights:o.hemi.length,numDirLightShadows:o.directionalShadowMap.length,numPointLightShadows:o.pointShadowMap.length,numSpotLightShadows:o.spotShadowMap.length,numSpotLightShadowsWithMaps:o.numSpotLightShadowsWithMaps,numLightProbes:o.numLightProbes,numClippingPlanes:s.numPlanes,numClipIntersection:s.numIntersection,dithering:a.dithering,shadowMapEnabled:e.shadowMap.enabled&&c.length>0,shadowMapType:e.shadowMap.type,toneMapping:ey,decodeVideoTexture:F&&!0===a.map.isVideoTexture&&eu.getTransfer(a.map.colorSpace)===U,decodeVideoTextureEmissive:j&&!0===a.emissiveMap.isVideoTexture&&eu.getTransfer(a.emissiveMap.colorSpace)===U,premultipliedAlpha:a.premultipliedAlpha,doubleSided:2===a.side,flipSided:1===a.side,useDepthPacking:a.depthPacking>=0,depthPacking:a.depthPacking||0,index0AttributeName:a.index0AttributeName,extensionClipCullDistance:e_&&!0===a.extensions.clipCullDistance&&i.has("WEBGL_clip_cull_distance"),extensionMultiDraw:(e_&&!0===a.extensions.multiDraw||O)&&i.has("WEBGL_multi_draw"),rendererExtensionParallelShaderCompile:i.has("KHR_parallel_shader_compile"),customProgramCacheKey:a.customProgramCacheKey()};return ex.vertexUv1s=u.has(1),ex.vertexUv2s=u.has(2),ex.vertexUv3s=u.has(3),u.clear(),ex},getProgramCacheKey:function(t){var n,i,r,a;let s=[];if(t.shaderID?s.push(t.shaderID):(s.push(t.customVertexShaderID),s.push(t.customFragmentShaderID)),void 0!==t.defines)for(let e in t.defines)s.push(e),s.push(t.defines[e]);return!1===t.isRawShaderMaterial&&(n=s,i=t,n.push(i.precision),n.push(i.outputColorSpace),n.push(i.envMapMode),n.push(i.envMapCubeUVHeight),n.push(i.mapUv),n.push(i.alphaMapUv),n.push(i.lightMapUv),n.push(i.aoMapUv),n.push(i.bumpMapUv),n.push(i.normalMapUv),n.push(i.displacementMapUv),n.push(i.emissiveMapUv),n.push(i.metalnessMapUv),n.push(i.roughnessMapUv),n.push(i.anisotropyMapUv),n.push(i.clearcoatMapUv),n.push(i.clearcoatNormalMapUv),n.push(i.clearcoatRoughnessMapUv),n.push(i.iridescenceMapUv),n.push(i.iridescenceThicknessMapUv),n.push(i.sheenColorMapUv),n.push(i.sheenRoughnessMapUv),n.push(i.specularMapUv),n.push(i.specularColorMapUv),n.push(i.specularIntensityMapUv),n.push(i.transmissionMapUv),n.push(i.thicknessMapUv),n.push(i.combine),n.push(i.fogExp2),n.push(i.sizeAttenuation),n.push(i.morphTargetsCount),n.push(i.morphAttributeCount),n.push(i.numDirLights),n.push(i.numPointLights),n.push(i.numSpotLights),n.push(i.numSpotLightMaps),n.push(i.numHemiLights),n.push(i.numRectAreaLights),n.push(i.numDirLightShadows),n.push(i.numPointLightShadows),n.push(i.numSpotLightShadows),n.push(i.numSpotLightShadowsWithMaps),n.push(i.numLightProbes),n.push(i.shadowMapType),n.push(i.toneMapping),n.push(i.numClippingPlanes),n.push(i.numClipIntersection),n.push(i.depthPacking),r=s,a=t,o.disableAll(),a.supportsVertexTextures&&o.enable(0),a.instancing&&o.enable(1),a.instancingColor&&o.enable(2),a.instancingMorph&&o.enable(3),a.matcap&&o.enable(4),a.envMap&&o.enable(5),a.normalMapObjectSpace&&o.enable(6),a.normalMapTangentSpace&&o.enable(7),a.clearcoat&&o.enable(8),a.iridescence&&o.enable(9),a.alphaTest&&o.enable(10),a.vertexColors&&o.enable(11),a.vertexAlphas&&o.enable(12),a.vertexUv1s&&o.enable(13),a.vertexUv2s&&o.enable(14),a.vertexUv3s&&o.enable(15),a.vertexTangents&&o.enable(16),a.anisotropy&&o.enable(17),a.alphaHash&&o.enable(18),a.batching&&o.enable(19),a.dispersion&&o.enable(20),a.batchingColor&&o.enable(21),r.push(o.mask),o.disableAll(),a.fog&&o.enable(0),a.useFog&&o.enable(1),a.flatShading&&o.enable(2),a.logarithmicDepthBuffer&&o.enable(3),a.reverseDepthBuffer&&o.enable(4),a.skinning&&o.enable(5),a.morphTargets&&o.enable(6),a.morphNormals&&o.enable(7),a.morphColors&&o.enable(8),a.premultipliedAlpha&&o.enable(9),a.shadowMapEnabled&&o.enable(10),a.doubleSided&&o.enable(11),a.flipSided&&o.enable(12),a.useDepthPacking&&o.enable(13),a.dithering&&o.enable(14),a.transmission&&o.enable(15),a.sheen&&o.enable(16),a.opaque&&o.enable(17),a.pointsUvs&&o.enable(18),a.decodeVideoTexture&&o.enable(19),a.decodeVideoTextureEmissive&&o.enable(20),a.alphaToCoverage&&o.enable(21),r.push(o.mask),s.push(e.outputColorSpace)),s.push(t.customProgramCacheKey),s.join()},getUniforms:function(e){let t,n=f[e.type];if(n){let e=oH[n];t=nx.clone(e.uniforms)}else t=e.uniforms;return t},acquireProgram:function(t,n){let i;for(let e=0,t=c.length;e0?i.push(c):!0===s.transparent?r.push(c):n.push(c)},unshift:function(e,t,s,o,l,u){let c=a(e,t,s,o,l,u);s.transmission>0?i.unshift(c):!0===s.transparent?r.unshift(c):n.unshift(c)},finish:function(){for(let n=t,i=e.length;n1&&n.sort(e||uE),i.length>1&&i.sort(t||uA),r.length>1&&r.sort(t||uA)}}}function uR(){let e=new WeakMap;return{get:function(t,n){let i,r=e.get(t);return void 0===r?(i=new uC,e.set(t,[i])):n>=r.length?(i=new uC,r.push(i)):i=r[n],i},dispose:function(){e=new WeakMap}}}function uP(){let e={};return{get:function(t){let n;if(void 0!==e[t.id])return e[t.id];switch(t.type){case"DirectionalLight":n={direction:new eE,color:new tz};break;case"SpotLight":n={position:new eE,direction:new eE,color:new tz,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":n={position:new eE,color:new tz,distance:0,decay:0};break;case"HemisphereLight":n={direction:new eE,skyColor:new tz,groundColor:new tz};break;case"RectAreaLight":n={color:new tz,position:new eE,halfWidth:new eE,halfHeight:new eE}}return e[t.id]=n,n}}}let uI=0;function uL(e,t){return 2*!!t.castShadow-2*!!e.castShadow+ +!!t.map-!!e.map}function uN(e){let t,n=new uP,i=(t={},{get:function(e){let n;if(void 0!==t[e.id])return t[e.id];switch(e.type){case"DirectionalLight":case"SpotLight":n={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Y};break;case"PointLight":n={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Y,shadowCameraNear:1,shadowCameraFar:1e3}}return t[e.id]=n,n}}),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let e=0;e<9;e++)r.probe.push(new eE);let a=new eE,s=new e2,o=new e2;return{setup:function(t){let a=0,s=0,o=0;for(let e=0;e<9;e++)r.probe[e].set(0,0,0);let l=0,u=0,c=0,h=0,d=0,p=0,f=0,m=0,g=0,v=0,_=0;t.sort(uL);for(let e=0,y=t.length;e0&&(!0===e.has("OES_texture_float_linear")?(r.rectAreaLTC1=ok.LTC_FLOAT_1,r.rectAreaLTC2=ok.LTC_FLOAT_2):(r.rectAreaLTC1=ok.LTC_HALF_1,r.rectAreaLTC2=ok.LTC_HALF_2)),r.ambient[0]=a,r.ambient[1]=s,r.ambient[2]=o;let y=r.hash;(y.directionalLength!==l||y.pointLength!==u||y.spotLength!==c||y.rectAreaLength!==h||y.hemiLength!==d||y.numDirectionalShadows!==p||y.numPointShadows!==f||y.numSpotShadows!==m||y.numSpotMaps!==g||y.numLightProbes!==_)&&(r.directional.length=l,r.spot.length=c,r.rectArea.length=h,r.point.length=u,r.hemi.length=d,r.directionalShadow.length=p,r.directionalShadowMap.length=p,r.pointShadow.length=f,r.pointShadowMap.length=f,r.spotShadow.length=m,r.spotShadowMap.length=m,r.directionalShadowMatrix.length=p,r.pointShadowMatrix.length=f,r.spotLightMatrix.length=m+g-v,r.spotLightMap.length=g,r.numSpotLightShadowsWithMaps=v,r.numLightProbes=_,y.directionalLength=l,y.pointLength=u,y.spotLength=c,y.rectAreaLength=h,y.hemiLength=d,y.numDirectionalShadows=p,y.numPointShadows=f,y.numSpotShadows=m,y.numSpotMaps=g,y.numLightProbes=_,r.version=uI++)},setupView:function(e,t){let n=0,i=0,l=0,u=0,c=0,h=t.matrixWorldInverse;for(let t=0,d=e.length;t=a.length?(r=new uU(e),a.push(r)):r=a[i],r},dispose:function(){t=new WeakMap}}}function uO(e,t,n){let i=new iS,r=new Y,a=new Y,s=new e_,o=new av({depthPacking:3201}),l=new a_,u={},c=n.maxTextureSize,h={0:1,1:0,2:2},d=new nb({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new Y},radius:{value:4}},vertexShader:"void main() {\n gl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n const float samples = float( VSM_SAMPLES );\n float mean = 0.0;\n float squared_mean = 0.0;\n float uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n float uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n for ( float i = 0.0; i < samples; i ++ ) {\n float uvOffset = uvStart + i * uvStride;\n #ifdef HORIZONTAL_PASS\n vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\n mean += distribution.x;\n squared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n #else\n float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\n mean += depth;\n squared_mean += depth * depth;\n #endif\n }\n mean = mean / samples;\n squared_mean = squared_mean / samples;\n float std_dev = sqrt( squared_mean - mean * mean );\n gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}),p=d.clone();p.defines.HORIZONTAL_PASS=1;let f=new nn;f.setAttribute("position",new tZ(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));let m=new nf(f,d),g=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=1;let v=this.type;function _(t,n,i,r){let a=null,s=!0===i.isPointLight?t.customDistanceMaterial:t.customDepthMaterial;if(void 0!==s)a=s;else if(a=!0===i.isPointLight?l:o,e.localClippingEnabled&&!0===n.clipShadows&&Array.isArray(n.clippingPlanes)&&0!==n.clippingPlanes.length||n.displacementMap&&0!==n.displacementScale||n.alphaMap&&n.alphaTest>0||n.map&&n.alphaTest>0){let e=a.uuid,t=n.uuid,i=u[e];void 0===i&&(i={},u[e]=i);let r=i[t];void 0===r&&(r=a.clone(),i[t]=r,n.addEventListener("dispose",y)),a=r}return a.visible=n.visible,a.wireframe=n.wireframe,3===r?a.side=null!==n.shadowSide?n.shadowSide:n.side:a.side=null!==n.shadowSide?n.shadowSide:h[n.side],a.alphaMap=n.alphaMap,a.alphaTest=n.alphaTest,a.map=n.map,a.clipShadows=n.clipShadows,a.clippingPlanes=n.clippingPlanes,a.clipIntersection=n.clipIntersection,a.displacementMap=n.displacementMap,a.displacementScale=n.displacementScale,a.displacementBias=n.displacementBias,a.wireframeLinewidth=n.wireframeLinewidth,a.linewidth=n.linewidth,!0===i.isPointLight&&!0===a.isMeshDistanceMaterial&&(e.properties.get(a).light=i),a}function y(e){for(let t in e.target.removeEventListener("dispose",y),u){let n=u[t],i=e.target.uuid;i in n&&(n[i].dispose(),delete n[i])}}this.render=function(n,o,l){if(!1===g.enabled||!1===g.autoUpdate&&!1===g.needsUpdate||0===n.length)return;let u=e.getRenderTarget(),h=e.getActiveCubeFace(),f=e.getActiveMipmapLevel(),y=e.state;y.setBlending(0),y.buffers.color.setClear(1,1,1,1),y.buffers.depth.setTest(!0),y.setScissorTest(!1);let x=3!==v&&3===this.type,b=3===v&&3!==this.type;for(let u=0,h=n.length;uc||r.y>c)&&(r.x>c&&(a.x=Math.floor(c/g.x),r.x=a.x*g.x,f.mapSize.x=a.x),r.y>c&&(a.y=Math.floor(c/g.y),r.y=a.y*g.y,f.mapSize.y=a.y)),null===f.map||!0===x||!0===b){let e=3!==this.type?{minFilter:1003,magFilter:1003}:{};null!==f.map&&f.map.dispose(),f.map=new ex(r.x,r.y,e),f.map.texture.name=h.name+".shadowMap",f.camera.updateProjectionMatrix()}e.setRenderTarget(f.map),e.clear();let v=f.getViewportCount();for(let n=0;n=1:-1!==P.indexOf("OpenGL ES")&&(R=parseFloat(/^OpenGL ES (\d)/.exec(P)[1])>=2);let I=null,L={},N=e.getParameter(e.SCISSOR_BOX),U=e.getParameter(e.VIEWPORT),D=new e_().fromArray(N),O=new e_().fromArray(U);function F(t,n,i,r){let a=new Uint8Array(4),s=e.createTexture();e.bindTexture(t,s),e.texParameteri(t,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(t,e.TEXTURE_MAG_FILTER,e.NEAREST);for(let s=0;stypeof navigator&&/OculusBrowser/g.test(navigator.userAgent),c=new Y,h=new WeakMap,d=new WeakMap,p=!1;try{p="u">typeof OffscreenCanvas&&null!==new OffscreenCanvas(1,1).getContext("2d")}catch(e){}function f(e,t){return p?new OffscreenCanvas(e,t):ee("canvas")}function m(e,t,n){let i=1,r=G(e);if((r.width>n||r.height>n)&&(i=n/Math.max(r.width,r.height)),i<1)if("u">typeof HTMLImageElement&&e instanceof HTMLImageElement||"u">typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"u">typeof ImageBitmap&&e instanceof ImageBitmap||"u">typeof VideoFrame&&e instanceof VideoFrame){let n=Math.floor(i*r.width),a=Math.floor(i*r.height);void 0===o&&(o=f(n,a));let s=t?f(n,a):o;return s.width=n,s.height=a,s.getContext("2d").drawImage(e,0,0,n,a),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+r.width+"x"+r.height+") to ("+n+"x"+a+")."),s}else"data"in e&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+r.width+"x"+r.height+").");return e}function g(e){return e.generateMipmaps}function v(t){e.generateMipmap(t)}function _(n,i,r,a,s=!1){if(null!==n){if(void 0!==e[n])return e[n];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+n+"'")}let o=i;if(i===e.RED&&(r===e.FLOAT&&(o=e.R32F),r===e.HALF_FLOAT&&(o=e.R16F),r===e.UNSIGNED_BYTE&&(o=e.R8)),i===e.RED_INTEGER&&(r===e.UNSIGNED_BYTE&&(o=e.R8UI),r===e.UNSIGNED_SHORT&&(o=e.R16UI),r===e.UNSIGNED_INT&&(o=e.R32UI),r===e.BYTE&&(o=e.R8I),r===e.SHORT&&(o=e.R16I),r===e.INT&&(o=e.R32I)),i===e.RG&&(r===e.FLOAT&&(o=e.RG32F),r===e.HALF_FLOAT&&(o=e.RG16F),r===e.UNSIGNED_BYTE&&(o=e.RG8)),i===e.RG_INTEGER&&(r===e.UNSIGNED_BYTE&&(o=e.RG8UI),r===e.UNSIGNED_SHORT&&(o=e.RG16UI),r===e.UNSIGNED_INT&&(o=e.RG32UI),r===e.BYTE&&(o=e.RG8I),r===e.SHORT&&(o=e.RG16I),r===e.INT&&(o=e.RG32I)),i===e.RGB_INTEGER&&(r===e.UNSIGNED_BYTE&&(o=e.RGB8UI),r===e.UNSIGNED_SHORT&&(o=e.RGB16UI),r===e.UNSIGNED_INT&&(o=e.RGB32UI),r===e.BYTE&&(o=e.RGB8I),r===e.SHORT&&(o=e.RGB16I),r===e.INT&&(o=e.RGB32I)),i===e.RGBA_INTEGER&&(r===e.UNSIGNED_BYTE&&(o=e.RGBA8UI),r===e.UNSIGNED_SHORT&&(o=e.RGBA16UI),r===e.UNSIGNED_INT&&(o=e.RGBA32UI),r===e.BYTE&&(o=e.RGBA8I),r===e.SHORT&&(o=e.RGBA16I),r===e.INT&&(o=e.RGBA32I)),i===e.RGB&&r===e.UNSIGNED_INT_5_9_9_9_REV&&(o=e.RGB9_E5),i===e.RGBA){let t=s?N:eu.getTransfer(a);r===e.FLOAT&&(o=e.RGBA32F),r===e.HALF_FLOAT&&(o=e.RGBA16F),r===e.UNSIGNED_BYTE&&(o=t===U?e.SRGB8_ALPHA8:e.RGBA8),r===e.UNSIGNED_SHORT_4_4_4_4&&(o=e.RGBA4),r===e.UNSIGNED_SHORT_5_5_5_1&&(o=e.RGB5_A1)}return(o===e.R16F||o===e.R32F||o===e.RG16F||o===e.RG32F||o===e.RGBA16F||o===e.RGBA32F)&&t.get("EXT_color_buffer_float"),o}function y(t,n){let i;return t?null===n||1014===n||1020===n?i=e.DEPTH24_STENCIL8:1015===n?i=e.DEPTH32F_STENCIL8:1012===n&&(i=e.DEPTH24_STENCIL8,console.warn("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):null===n||1014===n||1020===n?i=e.DEPTH_COMPONENT24:1015===n?i=e.DEPTH_COMPONENT32F:1012===n&&(i=e.DEPTH_COMPONENT16),i}function x(e,t){return!0===g(e)||e.isFramebufferTexture&&1003!==e.minFilter&&1006!==e.minFilter?Math.log2(Math.max(t.width,t.height))+1:void 0!==e.mipmaps&&e.mipmaps.length>0?e.mipmaps.length:e.isCompressedTexture&&Array.isArray(e.image)?t.mipmaps.length:1}function b(e){let t=e.target;t.removeEventListener("dispose",b),function(e){let t=i.get(e);if(void 0===t.__webglInit)return;let n=e.source,r=d.get(n);if(r){let i=r[t.__cacheKey];i.usedTimes--,0===i.usedTimes&&M(e),0===Object.keys(r).length&&d.delete(n)}i.remove(e)}(t),t.isVideoTexture&&h.delete(t)}function S(t){let n=t.target;n.removeEventListener("dispose",S),function(t){let n=i.get(t);if(t.depthTexture&&(t.depthTexture.dispose(),i.remove(t.depthTexture)),t.isWebGLCubeRenderTarget)for(let t=0;t<6;t++){if(Array.isArray(n.__webglFramebuffer[t]))for(let i=0;i0&&l.__version!==t.version){let e=t.image;if(null===e)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else{if(!1!==e.complete)return void I(l,t,r);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}n.bindTexture(e.TEXTURE_2D,l.__webglTexture,e.TEXTURE0+r)}let E={1e3:e.REPEAT,1001:e.CLAMP_TO_EDGE,1002:e.MIRRORED_REPEAT},A={1003:e.NEAREST,1004:e.NEAREST_MIPMAP_NEAREST,1005:e.NEAREST_MIPMAP_LINEAR,1006:e.LINEAR,1007:e.LINEAR_MIPMAP_NEAREST,1008:e.LINEAR_MIPMAP_LINEAR},C={512:e.NEVER,519:e.ALWAYS,513:e.LESS,515:e.LEQUAL,514:e.EQUAL,518:e.GEQUAL,516:e.GREATER,517:e.NOTEQUAL};function R(n,a){if((1015===a.type&&!1===t.has("OES_texture_float_linear")&&(1006===a.magFilter||1007===a.magFilter||1005===a.magFilter||1008===a.magFilter||1006===a.minFilter||1007===a.minFilter||1005===a.minFilter||1008===a.minFilter)&&console.warn("THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."),e.texParameteri(n,e.TEXTURE_WRAP_S,E[a.wrapS]),e.texParameteri(n,e.TEXTURE_WRAP_T,E[a.wrapT]),(n===e.TEXTURE_3D||n===e.TEXTURE_2D_ARRAY)&&e.texParameteri(n,e.TEXTURE_WRAP_R,E[a.wrapR]),e.texParameteri(n,e.TEXTURE_MAG_FILTER,A[a.magFilter]),e.texParameteri(n,e.TEXTURE_MIN_FILTER,A[a.minFilter]),a.compareFunction&&(e.texParameteri(n,e.TEXTURE_COMPARE_MODE,e.COMPARE_REF_TO_TEXTURE),e.texParameteri(n,e.TEXTURE_COMPARE_FUNC,C[a.compareFunction])),!0===t.has("EXT_texture_filter_anisotropic"))&&1003!==a.magFilter&&(1005===a.minFilter||1008===a.minFilter)&&(1015!==a.type||!1!==t.has("OES_texture_float_linear"))&&(a.anisotropy>1||i.get(a).__currentAnisotropy)){let s=t.get("EXT_texture_filter_anisotropic");e.texParameterf(n,s.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(a.anisotropy,r.getMaxAnisotropy())),i.get(a).__currentAnisotropy=a.anisotropy}}function P(t,n){let i,r=!1;void 0===t.__webglInit&&(t.__webglInit=!0,n.addEventListener("dispose",b));let a=n.source,o=d.get(a);void 0===o&&(o={},d.set(a,o));let l=((i=[]).push(n.wrapS),i.push(n.wrapT),i.push(n.wrapR||0),i.push(n.magFilter),i.push(n.minFilter),i.push(n.anisotropy),i.push(n.internalFormat),i.push(n.format),i.push(n.type),i.push(n.generateMipmaps),i.push(n.premultiplyAlpha),i.push(n.flipY),i.push(n.unpackAlignment),i.push(n.colorSpace),i.join());if(l!==t.__cacheKey){void 0===o[l]&&(o[l]={texture:e.createTexture(),usedTimes:0},s.memory.textures++,r=!0),o[l].usedTimes++;let i=o[t.__cacheKey];void 0!==i&&(o[t.__cacheKey].usedTimes--,0===i.usedTimes&&M(n)),t.__cacheKey=l,t.__webglTexture=o[l].texture}return r}function I(t,s,o){let l=e.TEXTURE_2D;(s.isDataArrayTexture||s.isCompressedArrayTexture)&&(l=e.TEXTURE_2D_ARRAY),s.isData3DTexture&&(l=e.TEXTURE_3D);let u=P(t,s),c=s.source;n.bindTexture(l,t.__webglTexture,e.TEXTURE0+o);let h=i.get(c);if(c.version!==h.__version||!0===u){let t;n.activeTexture(e.TEXTURE0+o);let i=eu.getPrimaries(eu.workingColorSpace),d=""===s.colorSpace?null:eu.getPrimaries(s.colorSpace),p=""===s.colorSpace||i===d?e.NONE:e.BROWSER_DEFAULT_WEBGL;e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,s.flipY),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,s.premultiplyAlpha),e.pixelStorei(e.UNPACK_ALIGNMENT,s.unpackAlignment),e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL,p);let f=m(s.image,!1,r.maxTextureSize);f=V(s,f);let b=a.convert(s.format,s.colorSpace),S=a.convert(s.type),M=_(s.internalFormat,b,S,s.colorSpace,s.isVideoTexture);R(l,s);let T=s.mipmaps,w=!0!==s.isVideoTexture,E=void 0===h.__version||!0===u,A=c.dataReady,C=x(s,f);if(s.isDepthTexture)M=y(1027===s.format,s.type),E&&(w?n.texStorage2D(e.TEXTURE_2D,1,M,f.width,f.height):n.texImage2D(e.TEXTURE_2D,0,M,f.width,f.height,0,b,S,null));else if(s.isDataTexture)if(T.length>0){w&&E&&n.texStorage2D(e.TEXTURE_2D,C,M,T[0].width,T[0].height);for(let i=0,r=T.length;i0){let r=oU(t.width,t.height,s.format,s.type);for(let a of s.layerUpdates){let s=t.data.subarray(a*r/t.data.BYTES_PER_ELEMENT,(a+1)*r/t.data.BYTES_PER_ELEMENT);n.compressedTexSubImage3D(e.TEXTURE_2D_ARRAY,i,0,0,a,t.width,t.height,1,b,s)}s.clearLayerUpdates()}else n.compressedTexSubImage3D(e.TEXTURE_2D_ARRAY,i,0,0,0,t.width,t.height,f.depth,b,t.data)}else n.compressedTexImage3D(e.TEXTURE_2D_ARRAY,i,M,t.width,t.height,f.depth,0,t.data,0,0);else console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else w?A&&n.texSubImage3D(e.TEXTURE_2D_ARRAY,i,0,0,0,t.width,t.height,f.depth,b,S,t.data):n.texImage3D(e.TEXTURE_2D_ARRAY,i,M,t.width,t.height,f.depth,0,b,S,t.data)}else{w&&E&&n.texStorage2D(e.TEXTURE_2D,C,M,T[0].width,T[0].height);for(let i=0,r=T.length;i0){let t=oU(f.width,f.height,s.format,s.type);for(let i of s.layerUpdates){let r=f.data.subarray(i*t/f.data.BYTES_PER_ELEMENT,(i+1)*t/f.data.BYTES_PER_ELEMENT);n.texSubImage3D(e.TEXTURE_2D_ARRAY,0,0,0,i,f.width,f.height,1,b,S,r)}s.clearLayerUpdates()}else n.texSubImage3D(e.TEXTURE_2D_ARRAY,0,0,0,0,f.width,f.height,f.depth,b,S,f.data)}else n.texImage3D(e.TEXTURE_2D_ARRAY,0,M,f.width,f.height,f.depth,0,b,S,f.data);else if(s.isData3DTexture)w?(E&&n.texStorage3D(e.TEXTURE_3D,C,M,f.width,f.height,f.depth),A&&n.texSubImage3D(e.TEXTURE_3D,0,0,0,0,f.width,f.height,f.depth,b,S,f.data)):n.texImage3D(e.TEXTURE_3D,0,M,f.width,f.height,f.depth,0,b,S,f.data);else if(s.isFramebufferTexture){if(E)if(w)n.texStorage2D(e.TEXTURE_2D,C,M,f.width,f.height);else{let t=f.width,i=f.height;for(let r=0;r>=1,i>>=1}}else if(T.length>0){if(w&&E){let t=G(T[0]);n.texStorage2D(e.TEXTURE_2D,C,M,t.width,t.height)}for(let i=0,r=T.length;i>c),i=Math.max(1,r.height>>c);u===e.TEXTURE_3D||u===e.TEXTURE_2D_ARRAY?n.texImage3D(u,c,p,t,i,r.depth,0,h,d,null):n.texImage2D(u,c,p,t,i,0,h,d,null)}n.bindFramebuffer(e.FRAMEBUFFER,t),H(r)?l.framebufferTexture2DMultisampleEXT(e.FRAMEBUFFER,o,u,m.__webglTexture,0,k(r)):(u===e.TEXTURE_2D||u>=e.TEXTURE_CUBE_MAP_POSITIVE_X&&u<=e.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&e.framebufferTexture2D(e.FRAMEBUFFER,o,u,m.__webglTexture,c),n.bindFramebuffer(e.FRAMEBUFFER,null)}function O(t,n,i){if(e.bindRenderbuffer(e.RENDERBUFFER,t),n.depthBuffer){let r=n.depthTexture,a=r&&r.isDepthTexture?r.type:null,s=y(n.stencilBuffer,a),o=n.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,u=k(n);H(n)?l.renderbufferStorageMultisampleEXT(e.RENDERBUFFER,u,s,n.width,n.height):i?e.renderbufferStorageMultisample(e.RENDERBUFFER,u,s,n.width,n.height):e.renderbufferStorage(e.RENDERBUFFER,s,n.width,n.height),e.framebufferRenderbuffer(e.FRAMEBUFFER,o,e.RENDERBUFFER,t)}else{let t=n.textures;for(let r=0;r{delete r.__boundDepthTexture,delete r.__depthDisposeCallback,e.removeEventListener("dispose",t)};e.addEventListener("dispose",t),r.__depthDisposeCallback=t}r.__boundDepthTexture=e}if(t.depthTexture&&!r.__autoAllocateDepthBuffer){if(a)throw Error("target.depthTexture not supported in Cube render targets");!function(t,r){if(r&&r.isWebGLCubeRenderTarget)throw Error("Depth Texture with cube render targets is not supported");if(n.bindFramebuffer(e.FRAMEBUFFER,t),!(r.depthTexture&&r.depthTexture.isDepthTexture))throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");let a=i.get(r.depthTexture);a.__renderTarget=r,a.__webglTexture&&r.depthTexture.image.width===r.width&&r.depthTexture.image.height===r.height||(r.depthTexture.image.width=r.width,r.depthTexture.image.height=r.height,r.depthTexture.needsUpdate=!0),w(r.depthTexture,0);let s=a.__webglTexture,o=k(r);if(1026===r.depthTexture.format)H(r)?l.framebufferTexture2DMultisampleEXT(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.TEXTURE_2D,s,0,o):e.framebufferTexture2D(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.TEXTURE_2D,s,0);else if(1027===r.depthTexture.format)H(r)?l.framebufferTexture2DMultisampleEXT(e.FRAMEBUFFER,e.DEPTH_STENCIL_ATTACHMENT,e.TEXTURE_2D,s,0,o):e.framebufferTexture2D(e.FRAMEBUFFER,e.DEPTH_STENCIL_ATTACHMENT,e.TEXTURE_2D,s,0);else throw Error("Unknown depthTexture format")}(r.__webglFramebuffer,t)}else if(a){r.__webglDepthbuffer=[];for(let i=0;i<6;i++)if(n.bindFramebuffer(e.FRAMEBUFFER,r.__webglFramebuffer[i]),void 0===r.__webglDepthbuffer[i])r.__webglDepthbuffer[i]=e.createRenderbuffer(),O(r.__webglDepthbuffer[i],t,!1);else{let n=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,a=r.__webglDepthbuffer[i];e.bindRenderbuffer(e.RENDERBUFFER,a),e.framebufferRenderbuffer(e.FRAMEBUFFER,n,e.RENDERBUFFER,a)}}else if(n.bindFramebuffer(e.FRAMEBUFFER,r.__webglFramebuffer),void 0===r.__webglDepthbuffer)r.__webglDepthbuffer=e.createRenderbuffer(),O(r.__webglDepthbuffer,t,!1);else{let n=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,i=r.__webglDepthbuffer;e.bindRenderbuffer(e.RENDERBUFFER,i),e.framebufferRenderbuffer(e.FRAMEBUFFER,n,e.RENDERBUFFER,i)}n.bindFramebuffer(e.FRAMEBUFFER,null)}let z=[],B=[];function k(e){return Math.min(r.maxSamples,e.samples)}function H(e){let n=i.get(e);return e.samples>0&&!0===t.has("WEBGL_multisampled_render_to_texture")&&!1!==n.__useRenderToTexture}function V(e,t){let n=e.colorSpace,i=e.format,r=e.type;return!0===e.isCompressedTexture||!0===e.isVideoTexture||n!==L&&""!==n&&(eu.getTransfer(n)===U?(1023!==i||1009!==r)&&console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture color space:",n)),t}function G(e){return"u">typeof HTMLImageElement&&e instanceof HTMLImageElement?(c.width=e.naturalWidth||e.width,c.height=e.naturalHeight||e.height):"u">typeof VideoFrame&&e instanceof VideoFrame?(c.width=e.displayWidth,c.height=e.displayHeight):(c.width=e.width,c.height=e.height),c}this.allocateTextureUnit=function(){let e=T;return e>=r.maxTextures&&console.warn("THREE.WebGLTextures: Trying to use "+e+" texture units while this GPU supports only "+r.maxTextures),T+=1,e},this.resetTextureUnits=function(){T=0},this.setTexture2D=w,this.setTexture2DArray=function(t,r){let a=i.get(t);t.version>0&&a.__version!==t.version?I(a,t,r):n.bindTexture(e.TEXTURE_2D_ARRAY,a.__webglTexture,e.TEXTURE0+r)},this.setTexture3D=function(t,r){let a=i.get(t);t.version>0&&a.__version!==t.version?I(a,t,r):n.bindTexture(e.TEXTURE_3D,a.__webglTexture,e.TEXTURE0+r)},this.setTextureCube=function(t,s){let o=i.get(t);t.version>0&&o.__version!==t.version?function(t,s,o){if(6!==s.image.length)return;let l=P(t,s),u=s.source;n.bindTexture(e.TEXTURE_CUBE_MAP,t.__webglTexture,e.TEXTURE0+o);let c=i.get(u);if(u.version!==c.__version||!0===l){let t;n.activeTexture(e.TEXTURE0+o);let i=eu.getPrimaries(eu.workingColorSpace),h=""===s.colorSpace?null:eu.getPrimaries(s.colorSpace),d=""===s.colorSpace||i===h?e.NONE:e.BROWSER_DEFAULT_WEBGL;e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,s.flipY),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,s.premultiplyAlpha),e.pixelStorei(e.UNPACK_ALIGNMENT,s.unpackAlignment),e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL,d);let p=s.isCompressedTexture||s.image[0].isCompressedTexture,f=s.image[0]&&s.image[0].isDataTexture,y=[];for(let e=0;e<6;e++)p||f?y[e]=f?s.image[e].image:s.image[e]:y[e]=m(s.image[e],!0,r.maxCubemapSize),y[e]=V(s,y[e]);let b=y[0],S=a.convert(s.format,s.colorSpace),M=a.convert(s.type),T=_(s.internalFormat,S,M,s.colorSpace),w=!0!==s.isVideoTexture,E=void 0===c.__version||!0===l,A=u.dataReady,C=x(s,b);if(R(e.TEXTURE_CUBE_MAP,s),p){w&&E&&n.texStorage2D(e.TEXTURE_CUBE_MAP,C,T,b.width,b.height);for(let i=0;i<6;i++){t=y[i].mipmaps;for(let r=0;r0&&C++;let i=G(y[0]);n.texStorage2D(e.TEXTURE_CUBE_MAP,C,T,i.width,i.height)}for(let i=0;i<6;i++)if(f){w?A&&n.texSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+i,0,0,0,y[i].width,y[i].height,S,M,y[i].data):n.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+i,0,T,y[i].width,y[i].height,0,S,M,y[i].data);for(let r=0;r1;if(!h&&(void 0===l.__webglTexture&&(l.__webglTexture=e.createTexture()),l.__version=r.version,s.memory.textures++),c){o.__webglFramebuffer=[];for(let t=0;t<6;t++)if(r.mipmaps&&r.mipmaps.length>0){o.__webglFramebuffer[t]=[];for(let n=0;n0){o.__webglFramebuffer=[];for(let t=0;t0&&!1===H(t)){o.__webglMultisampledFramebuffer=e.createFramebuffer(),o.__webglColorRenderbuffer=[],n.bindFramebuffer(e.FRAMEBUFFER,o.__webglMultisampledFramebuffer);for(let n=0;n0)for(let i=0;i0)for(let n=0;n0){if(!1===H(t)){let r=t.textures,a=t.width,s=t.height,o=e.COLOR_BUFFER_BIT,l=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,c=i.get(t),h=r.length>1;if(h)for(let t=0;t.025?(l.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:e.handedness,target:this})):!l.inputState.pinching&&s<=.015&&(l.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:e.handedness,target:this}))}else null!==o&&e.gripSpace&&null!==(r=t.getPose(e.gripSpace,n))&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.matrixWorldNeedsUpdate=!0,r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1);null!==s&&(null===(i=t.getPose(e.targetRaySpace,n))&&null!==r&&(i=r),null!==i&&(s.matrix.fromArray(i.transform.matrix),s.matrix.decompose(s.position,s.rotation,s.scale),s.matrixWorldNeedsUpdate=!0,i.linearVelocity?(s.hasLinearVelocity=!0,s.linearVelocity.copy(i.linearVelocity)):s.hasLinearVelocity=!1,i.angularVelocity?(s.hasAngularVelocity=!0,s.angularVelocity.copy(i.angularVelocity)):s.hasAngularVelocity=!1,this.dispatchEvent(uH)))}return null!==s&&(s.visible=null!==i),null!==o&&(o.visible=null!==r),null!==l&&(l.visible=null!==a),this}_getHandJoint(e,t){if(void 0===e.joints[t.jointName]){let n=new i6;n.matrixAutoUpdate=!1,n.visible=!1,e.joints[t.jointName]=n,e.add(n)}return e.joints[t.jointName]}}let uG=` -void main() { - - gl_Position = vec4( position, 1.0 ); - -}`,uW=` -uniform sampler2DArray depthColor; -uniform float depthWidth; -uniform float depthHeight; - -void main() { - - vec2 coord = vec2( gl_FragCoord.x / depthWidth, gl_FragCoord.y / depthHeight ); - - if ( coord.x >= 1.0 ) { - - gl_FragDepth = texture( depthColor, vec3( coord.x - 1.0, coord.y, 1 ) ).r; - - } else { - - gl_FragDepth = texture( depthColor, vec3( coord.x, coord.y, 0 ) ).r; - - } - -}`;class uj{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(e,t,n){if(null===this.texture){let i=new ev;e.properties.get(i).__webglTexture=t.texture,(t.depthNear!=n.depthNear||t.depthFar!=n.depthFar)&&(this.depthNear=t.depthNear,this.depthFar=t.depthFar),this.texture=i}}getMesh(e){if(null!==this.texture&&null===this.mesh){let t=e.cameras[0].viewport,n=new nb({vertexShader:uG,fragmentShader:uW,uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new nf(new r9(20,20),n)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}}class uX extends O{constructor(e,t){super();const n=this;let i=null,r=1,a=null,s="local-floor",o=1,l=null,u=null,c=null,h=null,d=null,p=null;const f=new uj,m=t.getContextAttributes();let g=null,v=null;const _=[],y=[],x=new Y;let b=null;const S=new nE;S.viewport=new e_;const M=new nE;M.viewport=new e_;const T=[S,M],w=new sT;let E=null,A=null;function C(e){let t=y.indexOf(e.inputSource);if(-1===t)return;let n=_[t];void 0!==n&&(n.update(e.inputSource,e.frame,l||a),n.dispatchEvent({type:e.type,data:e.inputSource}))}function R(){i.removeEventListener("select",C),i.removeEventListener("selectstart",C),i.removeEventListener("selectend",C),i.removeEventListener("squeeze",C),i.removeEventListener("squeezestart",C),i.removeEventListener("squeezeend",C),i.removeEventListener("end",R),i.removeEventListener("inputsourceschange",P);for(let e=0;e<_.length;e++){let t=y[e];null!==t&&(y[e]=null,_[e].disconnect(t))}E=null,A=null,f.reset(),e.setRenderTarget(g),d=null,h=null,c=null,i=null,v=null,D.stop(),n.isPresenting=!1,e.setPixelRatio(b),e.setSize(x.width,x.height,!1),n.dispatchEvent({type:"sessionend"})}function P(e){for(let t=0;t=0&&(y[i]=null,_[i].disconnect(n))}for(let t=0;t=y.length){y.push(n),i=e;break}else if(null===y[e]){y[e]=n,i=e;break}if(-1===i)break}let r=_[i];r&&r.connect(n)}}this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(e){let t=_[e];return void 0===t&&(t=new uV,_[e]=t),t.getTargetRaySpace()},this.getControllerGrip=function(e){let t=_[e];return void 0===t&&(t=new uV,_[e]=t),t.getGripSpace()},this.getHand=function(e){let t=_[e];return void 0===t&&(t=new uV,_[e]=t),t.getHandSpace()},this.setFramebufferScaleFactor=function(e){r=e,!0===n.isPresenting&&console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(e){s=e,!0===n.isPresenting&&console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return l||a},this.setReferenceSpace=function(e){l=e},this.getBaseLayer=function(){return null!==h?h:d},this.getBinding=function(){return c},this.getFrame=function(){return p},this.getSession=function(){return i},this.setSession=async function(u){if(null!==(i=u)){if(g=e.getRenderTarget(),i.addEventListener("select",C),i.addEventListener("selectstart",C),i.addEventListener("selectend",C),i.addEventListener("squeeze",C),i.addEventListener("squeezestart",C),i.addEventListener("squeezeend",C),i.addEventListener("end",R),i.addEventListener("inputsourceschange",P),!0!==m.xrCompatible&&await t.makeXRCompatible(),b=e.getPixelRatio(),e.getSize(x),void 0===i.renderState.layers){let n={antialias:m.antialias,alpha:!0,depth:m.depth,stencil:m.stencil,framebufferScaleFactor:r};d=new XRWebGLLayer(i,t,n),i.updateRenderState({baseLayer:d}),e.setPixelRatio(1),e.setSize(d.framebufferWidth,d.framebufferHeight,!1),v=new ex(d.framebufferWidth,d.framebufferHeight,{format:1023,type:1009,colorSpace:e.outputColorSpace,stencilBuffer:m.stencil})}else{let n=null,a=null,s=null;m.depth&&(s=m.stencil?t.DEPTH24_STENCIL8:t.DEPTH_COMPONENT24,n=m.stencil?1027:1026,a=m.stencil?1020:1014);let o={colorFormat:t.RGBA8,depthFormat:s,scaleFactor:r};h=(c=new XRWebGLBinding(i,t)).createProjectionLayer(o),i.updateRenderState({layers:[h]}),e.setPixelRatio(1),e.setSize(h.textureWidth,h.textureHeight,!1),v=new ex(h.textureWidth,h.textureHeight,{format:1023,type:1009,depthTexture:new ri(h.textureWidth,h.textureHeight,a,void 0,void 0,void 0,void 0,void 0,void 0,n),stencilBuffer:m.stencil,colorSpace:e.outputColorSpace,samples:4*!!m.antialias,resolveDepthBuffer:!1===h.ignoreDepthValues})}v.isXRRenderTarget=!0,this.setFoveation(o),l=null,a=await i.requestReferenceSpace(s),D.setContext(i),D.start(),n.isPresenting=!0,n.dispatchEvent({type:"sessionstart"})}},this.getEnvironmentBlendMode=function(){if(null!==i)return i.environmentBlendMode},this.getDepthTexture=function(){return f.getDepthTexture()};const I=new eE,L=new eE;function N(e,t){null===t?e.matrixWorld.copy(e.matrix):e.matrixWorld.multiplyMatrices(t.matrixWorld,e.matrix),e.matrixWorldInverse.copy(e.matrixWorld).invert()}this.updateCamera=function(e){var t,n,r;if(null===i)return;let a=e.near,s=e.far;null!==f.texture&&(f.depthNear>0&&(a=f.depthNear),f.depthFar>0&&(s=f.depthFar)),w.near=M.near=S.near=a,w.far=M.far=S.far=s,(E!==w.near||A!==w.far)&&(i.updateRenderState({depthNear:w.near,depthFar:w.far}),E=w.near,A=w.far),S.layers.mask=2|e.layers.mask,M.layers.mask=4|e.layers.mask,w.layers.mask=S.layers.mask|M.layers.mask;let o=e.parent,l=w.cameras;N(w,o);for(let e=0;e0&&(e.alphaTest.value=i.alphaTest);let r=t.get(i),a=r.envMap,s=r.envMapRotation;a&&(e.envMap.value=a,uq.copy(s),uq.x*=-1,uq.y*=-1,uq.z*=-1,a.isCubeTexture&&!1===a.isRenderTargetTexture&&(uq.y*=-1,uq.z*=-1),e.envMapRotation.value.setFromMatrix4(uY.makeRotationFromEuler(uq)),e.flipEnvMap.value=a.isCubeTexture&&!1===a.isRenderTargetTexture?-1:1,e.reflectivity.value=i.reflectivity,e.ior.value=i.ior,e.refractionRatio.value=i.refractionRatio),i.lightMap&&(e.lightMap.value=i.lightMap,e.lightMapIntensity.value=i.lightMapIntensity,n(i.lightMap,e.lightMapTransform)),i.aoMap&&(e.aoMap.value=i.aoMap,e.aoMapIntensity.value=i.aoMapIntensity,n(i.aoMap,e.aoMapTransform))}return{refreshFogUniforms:function(t,n){n.color.getRGB(t.fogColor.value,ny(e)),n.isFog?(t.fogNear.value=n.near,t.fogFar.value=n.far):n.isFogExp2&&(t.fogDensity.value=n.density)},refreshMaterialUniforms:function(e,r,a,s,o){var l,u,c,h,d,p,f,m,g,v,_,y,x,b,S,M,T,w,E,A,C,R,P;let I;r.isMeshBasicMaterial||r.isMeshLambertMaterial?i(e,r):r.isMeshToonMaterial?(i(e,r),l=e,(u=r).gradientMap&&(l.gradientMap.value=u.gradientMap)):r.isMeshPhongMaterial?(i(e,r),c=e,h=r,c.specular.value.copy(h.specular),c.shininess.value=Math.max(h.shininess,1e-4)):r.isMeshStandardMaterial?(i(e,r),d=e,p=r,d.metalness.value=p.metalness,p.metalnessMap&&(d.metalnessMap.value=p.metalnessMap,n(p.metalnessMap,d.metalnessMapTransform)),d.roughness.value=p.roughness,p.roughnessMap&&(d.roughnessMap.value=p.roughnessMap,n(p.roughnessMap,d.roughnessMapTransform)),p.envMap&&(d.envMapIntensity.value=p.envMapIntensity),r.isMeshPhysicalMaterial&&(f=e,m=r,g=o,f.ior.value=m.ior,m.sheen>0&&(f.sheenColor.value.copy(m.sheenColor).multiplyScalar(m.sheen),f.sheenRoughness.value=m.sheenRoughness,m.sheenColorMap&&(f.sheenColorMap.value=m.sheenColorMap,n(m.sheenColorMap,f.sheenColorMapTransform)),m.sheenRoughnessMap&&(f.sheenRoughnessMap.value=m.sheenRoughnessMap,n(m.sheenRoughnessMap,f.sheenRoughnessMapTransform))),m.clearcoat>0&&(f.clearcoat.value=m.clearcoat,f.clearcoatRoughness.value=m.clearcoatRoughness,m.clearcoatMap&&(f.clearcoatMap.value=m.clearcoatMap,n(m.clearcoatMap,f.clearcoatMapTransform)),m.clearcoatRoughnessMap&&(f.clearcoatRoughnessMap.value=m.clearcoatRoughnessMap,n(m.clearcoatRoughnessMap,f.clearcoatRoughnessMapTransform)),m.clearcoatNormalMap&&(f.clearcoatNormalMap.value=m.clearcoatNormalMap,n(m.clearcoatNormalMap,f.clearcoatNormalMapTransform),f.clearcoatNormalScale.value.copy(m.clearcoatNormalScale),1===m.side&&f.clearcoatNormalScale.value.negate())),m.dispersion>0&&(f.dispersion.value=m.dispersion),m.iridescence>0&&(f.iridescence.value=m.iridescence,f.iridescenceIOR.value=m.iridescenceIOR,f.iridescenceThicknessMinimum.value=m.iridescenceThicknessRange[0],f.iridescenceThicknessMaximum.value=m.iridescenceThicknessRange[1],m.iridescenceMap&&(f.iridescenceMap.value=m.iridescenceMap,n(m.iridescenceMap,f.iridescenceMapTransform)),m.iridescenceThicknessMap&&(f.iridescenceThicknessMap.value=m.iridescenceThicknessMap,n(m.iridescenceThicknessMap,f.iridescenceThicknessMapTransform))),m.transmission>0&&(f.transmission.value=m.transmission,f.transmissionSamplerMap.value=g.texture,f.transmissionSamplerSize.value.set(g.width,g.height),m.transmissionMap&&(f.transmissionMap.value=m.transmissionMap,n(m.transmissionMap,f.transmissionMapTransform)),f.thickness.value=m.thickness,m.thicknessMap&&(f.thicknessMap.value=m.thicknessMap,n(m.thicknessMap,f.thicknessMapTransform)),f.attenuationDistance.value=m.attenuationDistance,f.attenuationColor.value.copy(m.attenuationColor)),m.anisotropy>0&&(f.anisotropyVector.value.set(m.anisotropy*Math.cos(m.anisotropyRotation),m.anisotropy*Math.sin(m.anisotropyRotation)),m.anisotropyMap&&(f.anisotropyMap.value=m.anisotropyMap,n(m.anisotropyMap,f.anisotropyMapTransform))),f.specularIntensity.value=m.specularIntensity,f.specularColor.value.copy(m.specularColor),m.specularColorMap&&(f.specularColorMap.value=m.specularColorMap,n(m.specularColorMap,f.specularColorMapTransform)),m.specularIntensityMap&&(f.specularIntensityMap.value=m.specularIntensityMap,n(m.specularIntensityMap,f.specularIntensityMapTransform)))):r.isMeshMatcapMaterial?(i(e,r),v=e,(_=r).matcap&&(v.matcap.value=_.matcap)):r.isMeshDepthMaterial?i(e,r):r.isMeshDistanceMaterial?(i(e,r),y=e,x=r,I=t.get(x).light,y.referencePosition.value.setFromMatrixPosition(I.matrixWorld),y.nearDistance.value=I.shadow.camera.near,y.farDistance.value=I.shadow.camera.far):r.isMeshNormalMaterial?i(e,r):r.isLineBasicMaterial?(b=e,S=r,b.diffuse.value.copy(S.color),b.opacity.value=S.opacity,S.map&&(b.map.value=S.map,n(S.map,b.mapTransform)),r.isLineDashedMaterial&&(M=e,T=r,M.dashSize.value=T.dashSize,M.totalSize.value=T.dashSize+T.gapSize,M.scale.value=T.scale)):r.isPointsMaterial?(w=e,E=r,A=a,C=s,w.diffuse.value.copy(E.color),w.opacity.value=E.opacity,w.size.value=E.size*A,w.scale.value=.5*C,E.map&&(w.map.value=E.map,n(E.map,w.uvTransform)),E.alphaMap&&(w.alphaMap.value=E.alphaMap,n(E.alphaMap,w.alphaMapTransform)),E.alphaTest>0&&(w.alphaTest.value=E.alphaTest)):r.isSpriteMaterial?(R=e,P=r,R.diffuse.value.copy(P.color),R.opacity.value=P.opacity,R.rotation.value=P.rotation,P.map&&(R.map.value=P.map,n(P.map,R.mapTransform)),P.alphaMap&&(R.alphaMap.value=P.alphaMap,n(P.alphaMap,R.alphaMapTransform)),P.alphaTest>0&&(R.alphaTest.value=P.alphaTest)):r.isShadowMaterial?(e.color.value.copy(r.color),e.opacity.value=r.opacity):r.isShaderMaterial&&(r.uniformsNeedUpdate=!1)}}}function uJ(e,t,n,i){let r={},a={},s=[],o=e.getParameter(e.MAX_UNIFORM_BUFFER_BINDINGS);function l(e){let t={boundary:0,storage:0};return"number"==typeof e||"boolean"==typeof e?(t.boundary=4,t.storage=4):e.isVector2?(t.boundary=8,t.storage=8):e.isVector3||e.isColor?(t.boundary=16,t.storage=12):e.isVector4?(t.boundary=16,t.storage=16):e.isMatrix3?(t.boundary=48,t.storage=48):e.isMatrix4?(t.boundary=64,t.storage=64):e.isTexture?console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."):console.warn("THREE.WebGLRenderer: Unsupported uniform value type.",e),t}function u(t){let n=t.target;n.removeEventListener("dispose",u);let i=s.indexOf(n.__bindingPointIndex);s.splice(i,1),e.deleteBuffer(r[n.id]),delete r[n.id],delete a[n.id]}return{bind:function(e,t){let n=t.program;i.uniformBlockBinding(e,n)},update:function(n,c){var h;let d,p,f,m,g=r[n.id];void 0===g&&(function(e){let t=e.uniforms,n=0;for(let e=0,i=t.length;e0&&(n+=16-i),e.__size=n,e.__cache={}}(n),(h=n).__bindingPointIndex=d=function(){for(let e=0;etypeof WebGLRenderingContext&&A instanceof WebGLRenderingContext)throw Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163.");t=A.getContextAttributes().alpha}else t=P;const B=new Uint32Array(4),k=new Int32Array(4);let H=null,V=null;const G=[],W=[];this.domElement=E,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this._outputColorSpace=I,this.toneMapping=0,this.toneMappingExposure=1;const j=this;let X=!1,q=0,Y=0,Z=null,J=-1,K=null;const $=new e_,Q=new e_;let ee=null;const en=new tz(0);let eo=0,el=E.width,ec=E.height,eh=1,ed=null,ep=null;const ef=new e_(0,0,el,ec),em=new e_(0,0,el,ec);let eg=!1;const ev=new iS;let ey=!1,eb=!1;const eS=new e2,eM=new e2,eT=new eE,ew=new e_,eA={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};let eC=!1;function eR(){return null===Z?eh:1}let eP=A;function eI(e,t){return E.getContext(e,t)}try{if("setAttribute"in E&&E.setAttribute("data-engine","three.js r171"),E.addEventListener("webglcontextlost",eU,!1),E.addEventListener("webglcontextrestored",eD,!1),E.addEventListener("webglcontextcreationerror",eO,!1),null===eP){const e="webgl2";if(eP=eI(e,{alpha:!0,depth:C,stencil:R,antialias:N,premultipliedAlpha:U,preserveDrawingBuffer:D,powerPreference:O,failIfMajorPerformanceCaveat:F}),null===eP)if(eI(e))throw Error("Error creating WebGL context with your selected attributes.");else throw Error("Error creating WebGL context.")}}catch(e){throw console.error("THREE.WebGLRenderer: "+e.message),e}function eL(){(n=new lr(eP)).init(),M=new uk(eP,n),i=new oY(eP,n,e,M),r=new uz(eP,n),i.reverseDepthBuffer&&z&&r.buffers.depth.setReversed(!0),a=new lo(eP),s=new uw,o=new uB(eP,n,r,s,i,M,a),l=new oJ(j),u=new li(j),c=new oz(eP),T=new oX(eP,c),h=new la(eP,c,a,T),d=new lu(eP,h,c,a),x=new ll(eP,i,o),v=new oZ(s),p=new uT(j,l,u,n,i,T,v),f=new uZ(j,s),m=new uR,g=new uD(n),y=new oj(j,l,u,r,d,t,U),_=new uO(j,d,i),w=new uJ(eP,a,i,r),b=new oq(eP,n,a),S=new ls(eP,n,a),a.programs=p.programs,j.capabilities=i,j.extensions=n,j.properties=s,j.renderLists=m,j.shadowMap=_,j.state=r,j.info=a}eL();const eN=new uX(j,eP);function eU(e){e.preventDefault(),console.log("THREE.WebGLRenderer: Context Lost."),X=!0}function eD(){console.log("THREE.WebGLRenderer: Context Restored."),X=!1;let e=a.autoReset,t=_.enabled,n=_.autoUpdate,i=_.needsUpdate,r=_.type;eL(),a.autoReset=e,_.enabled=t,_.autoUpdate=n,_.needsUpdate=i,_.type=r}function eO(e){console.error("THREE.WebGLRenderer: A WebGL context could not be created. Reason: ",e.statusMessage)}function eF(e){var t,n;let i,r=e.target;r.removeEventListener("dispose",eF),n=t=r,void 0!==(i=s.get(n).programs)&&(i.forEach(function(e){p.releaseProgram(e)}),n.isShaderMaterial&&p.releaseShaderCache(n)),s.remove(t)}function ez(e,t,n){!0===e.transparent&&2===e.side&&!1===e.forceSinglePass?(e.side=1,e.needsUpdate=!0,eY(e,t,n),e.side=0,e.needsUpdate=!0,eY(e,t,n),e.side=2):eY(e,t,n)}this.xr=eN,this.getContext=function(){return eP},this.getContextAttributes=function(){return eP.getContextAttributes()},this.forceContextLoss=function(){let e=n.get("WEBGL_lose_context");e&&e.loseContext()},this.forceContextRestore=function(){let e=n.get("WEBGL_lose_context");e&&e.restoreContext()},this.getPixelRatio=function(){return eh},this.setPixelRatio=function(e){void 0!==e&&(eh=e,this.setSize(el,ec,!1))},this.getSize=function(e){return e.set(el,ec)},this.setSize=function(e,t,n=!0){eN.isPresenting?console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting."):(el=e,ec=t,E.width=Math.floor(e*eh),E.height=Math.floor(t*eh),!0===n&&(E.style.width=e+"px",E.style.height=t+"px"),this.setViewport(0,0,e,t))},this.getDrawingBufferSize=function(e){return e.set(el*eh,ec*eh).floor()},this.setDrawingBufferSize=function(e,t,n){el=e,ec=t,eh=n,E.width=Math.floor(e*n),E.height=Math.floor(t*n),this.setViewport(0,0,e,t)},this.getCurrentViewport=function(e){return e.copy($)},this.getViewport=function(e){return e.copy(ef)},this.setViewport=function(e,t,n,i){e.isVector4?ef.set(e.x,e.y,e.z,e.w):ef.set(e,t,n,i),r.viewport($.copy(ef).multiplyScalar(eh).round())},this.getScissor=function(e){return e.copy(em)},this.setScissor=function(e,t,n,i){e.isVector4?em.set(e.x,e.y,e.z,e.w):em.set(e,t,n,i),r.scissor(Q.copy(em).multiplyScalar(eh).round())},this.getScissorTest=function(){return eg},this.setScissorTest=function(e){r.setScissorTest(eg=e)},this.setOpaqueSort=function(e){ed=e},this.setTransparentSort=function(e){ep=e},this.getClearColor=function(e){return e.copy(y.getClearColor())},this.setClearColor=function(){y.setClearColor.apply(y,arguments)},this.getClearAlpha=function(){return y.getClearAlpha()},this.setClearAlpha=function(){y.setClearAlpha.apply(y,arguments)},this.clear=function(e=!0,t=!0,n=!0){let i=0;if(e){let e=!1;if(null!==Z){let t=Z.texture.format;e=1033===t||1031===t||1029===t}if(e){let e=Z.texture.type,t=1009===e||1014===e||1012===e||1020===e||1017===e||1018===e,n=y.getClearColor(),i=y.getClearAlpha(),r=n.r,a=n.g,s=n.b;t?(B[0]=r,B[1]=a,B[2]=s,B[3]=i,eP.clearBufferuiv(eP.COLOR,0,B)):(k[0]=r,k[1]=a,k[2]=s,k[3]=i,eP.clearBufferiv(eP.COLOR,0,k))}else i|=eP.COLOR_BUFFER_BIT}t&&(i|=eP.DEPTH_BUFFER_BIT),n&&(i|=eP.STENCIL_BUFFER_BIT,this.state.buffers.stencil.setMask(0xffffffff)),eP.clear(i)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){E.removeEventListener("webglcontextlost",eU,!1),E.removeEventListener("webglcontextrestored",eD,!1),E.removeEventListener("webglcontextcreationerror",eO,!1),y.dispose(),m.dispose(),g.dispose(),s.dispose(),l.dispose(),u.dispose(),d.dispose(),T.dispose(),w.dispose(),p.dispose(),eN.dispose(),eN.removeEventListener("sessionstart",ek),eN.removeEventListener("sessionend",eH),eV.stop()},this.renderBufferDirect=function(e,t,a,d,p,m){let g;null===t&&(t=eA);let _=p.isMesh&&0>p.matrixWorld.determinant(),y=function(e,t,n,a,c){var h,d;!0!==t.isScene&&(t=eA),o.resetTextureUnits();let p=t.fog,m=a.isMeshStandardMaterial?t.environment:null,g=null===Z?j.outputColorSpace:!0===Z.isXRRenderTarget?Z.texture.colorSpace:L,_=(a.isMeshStandardMaterial?u:l).get(a.envMap||m),y=!0===a.vertexColors&&!!n.attributes.color&&4===n.attributes.color.itemSize,b=!!n.attributes.tangent&&(!!a.normalMap||a.anisotropy>0),S=!!n.morphAttributes.position,M=!!n.morphAttributes.normal,T=!!n.morphAttributes.color,E=0;a.toneMapped&&(null===Z||!0===Z.isXRRenderTarget)&&(E=j.toneMapping);let A=n.morphAttributes.position||n.morphAttributes.normal||n.morphAttributes.color,C=void 0!==A?A.length:0,R=s.get(a),P=V.state.lights;if(!0===ey&&(!0===eb||e!==K)){let t=e===K&&a.id===J;v.setState(a,e,t)}let I=!1;a.version===R.__version?R.needsLights&&R.lightsStateVersion!==P.state.version||R.outputColorSpace!==g||c.isBatchedMesh&&!1===R.batching?I=!0:c.isBatchedMesh||!0!==R.batching?c.isBatchedMesh&&!0===R.batchingColor&&null===c.colorTexture||c.isBatchedMesh&&!1===R.batchingColor&&null!==c.colorTexture||c.isInstancedMesh&&!1===R.instancing?I=!0:c.isInstancedMesh||!0!==R.instancing?c.isSkinnedMesh&&!1===R.skinning?I=!0:c.isSkinnedMesh||!0!==R.skinning?c.isInstancedMesh&&!0===R.instancingColor&&null===c.instanceColor||c.isInstancedMesh&&!1===R.instancingColor&&null!==c.instanceColor||c.isInstancedMesh&&!0===R.instancingMorph&&null===c.morphTexture||c.isInstancedMesh&&!1===R.instancingMorph&&null!==c.morphTexture||R.envMap!==_||!0===a.fog&&R.fog!==p||void 0!==R.numClippingPlanes&&(R.numClippingPlanes!==v.numPlanes||R.numIntersection!==v.numIntersection)||R.vertexAlphas!==y||R.vertexTangents!==b||R.morphTargets!==S||R.morphNormals!==M||R.morphColors!==T||R.toneMapping!==E?I=!0:R.morphTargetsCount!==C&&(I=!0):I=!0:I=!0:I=!0:(I=!0,R.__version=a.version);let N=R.currentProgram;!0===I&&(N=eY(a,t,c));let U=!1,D=!1,O=!1,F=N.getUniforms(),z=R.uniforms;if(r.useProgram(N.program)&&(U=!0,D=!0,O=!0),a.id!==J&&(J=a.id,D=!0),U||K!==e){r.buffers.depth.getReversed()?(eS.copy(e.projectionMatrix),ea(eS),es(eS),F.setValue(eP,"projectionMatrix",eS)):F.setValue(eP,"projectionMatrix",e.projectionMatrix),F.setValue(eP,"viewMatrix",e.matrixWorldInverse);let t=F.map.cameraPosition;void 0!==t&&t.setValue(eP,eT.setFromMatrixPosition(e.matrixWorld)),i.logarithmicDepthBuffer&&F.setValue(eP,"logDepthBufFC",2/(Math.log(e.far+1)/Math.LN2)),(a.isMeshPhongMaterial||a.isMeshToonMaterial||a.isMeshLambertMaterial||a.isMeshBasicMaterial||a.isMeshStandardMaterial||a.isShaderMaterial)&&F.setValue(eP,"isOrthographic",!0===e.isOrthographicCamera),K!==e&&(K=e,D=!0,O=!0)}if(c.isSkinnedMesh){F.setOptional(eP,c,"bindMatrix"),F.setOptional(eP,c,"bindMatrixInverse");let e=c.skeleton;e&&(null===e.boneTexture&&e.computeBoneTexture(),F.setValue(eP,"boneTexture",e.boneTexture,o))}c.isBatchedMesh&&(F.setOptional(eP,c,"batchingTexture"),F.setValue(eP,"batchingTexture",c._matricesTexture,o),F.setOptional(eP,c,"batchingIdTexture"),F.setValue(eP,"batchingIdTexture",c._indirectTexture,o),F.setOptional(eP,c,"batchingColorTexture"),null!==c._colorsTexture&&F.setValue(eP,"batchingColorTexture",c._colorsTexture,o));let B=n.morphAttributes;if((void 0!==B.position||void 0!==B.normal||void 0!==B.color)&&x.update(c,n,N),(D||R.receiveShadow!==c.receiveShadow)&&(R.receiveShadow=c.receiveShadow,F.setValue(eP,"receiveShadow",c.receiveShadow)),a.isMeshGouraudMaterial&&null!==a.envMap&&(z.envMap.value=_,z.flipEnvMap.value=_.isCubeTexture&&!1===_.isRenderTargetTexture?-1:1),a.isMeshStandardMaterial&&null===a.envMap&&null!==t.environment&&(z.envMapIntensity.value=t.environmentIntensity),D&&(F.setValue(eP,"toneMappingExposure",j.toneMappingExposure),R.needsLights&&(h=z,d=O,h.ambientLightColor.needsUpdate=d,h.lightProbe.needsUpdate=d,h.directionalLights.needsUpdate=d,h.directionalLightShadows.needsUpdate=d,h.pointLights.needsUpdate=d,h.pointLightShadows.needsUpdate=d,h.spotLights.needsUpdate=d,h.spotLightShadows.needsUpdate=d,h.rectAreaLights.needsUpdate=d,h.hemisphereLights.needsUpdate=d),p&&!0===a.fog&&f.refreshFogUniforms(z,p),f.refreshMaterialUniforms(z,a,eh,ec,V.state.transmissionRenderTarget[e.id]),ui.upload(eP,eZ(R),z,o)),a.isShaderMaterial&&!0===a.uniformsNeedUpdate&&(ui.upload(eP,eZ(R),z,o),a.uniformsNeedUpdate=!1),a.isSpriteMaterial&&F.setValue(eP,"center",c.center),F.setValue(eP,"modelViewMatrix",c.modelViewMatrix),F.setValue(eP,"normalMatrix",c.normalMatrix),F.setValue(eP,"modelMatrix",c.matrixWorld),a.isShaderMaterial||a.isRawShaderMaterial){let e=a.uniformsGroups;for(let t=0,n=e.length;t{function i(){(r.forEach(function(e){s.get(e).currentProgram.isReady()&&r.delete(e)}),0===r.size)?t(e):setTimeout(i,10)}null!==n.get("KHR_parallel_shader_compile")?i():setTimeout(i,10)})};let eB=null;function ek(){eV.stop()}function eH(){eV.start()}const eV=new oF;function eG(e,t,n,i){if(!1===e.visible)return;if(e.layers.test(t.layers)){if(e.isGroup)n=e.renderOrder;else if(e.isLOD)!0===e.autoUpdate&&e.update(t);else if(e.isLight)V.pushLight(e),e.castShadow&&V.pushShadow(e);else if(e.isSprite){if(!e.frustumCulled||ev.intersectsSprite(e)){i&&ew.setFromMatrixPosition(e.matrixWorld).applyMatrix4(eM);let t=d.update(e),r=e.material;r.visible&&H.push(e,t,r,n,ew.z,null)}}else if((e.isMesh||e.isLine||e.isPoints)&&(!e.frustumCulled||ev.intersectsObject(e))){let t=d.update(e),r=e.material;if(i&&(void 0!==e.boundingSphere?(null===e.boundingSphere&&e.computeBoundingSphere(),ew.copy(e.boundingSphere.center)):(null===t.boundingSphere&&t.computeBoundingSphere(),ew.copy(t.boundingSphere.center)),ew.applyMatrix4(e.matrixWorld).applyMatrix4(eM)),Array.isArray(r)){let i=t.groups;for(let a=0,s=i.length;a0&&eX(a,t,n),s.length>0&&eX(s,t,n),o.length>0&&eX(o,t,n),r.buffers.depth.setTest(!0),r.buffers.depth.setMask(!0),r.buffers.color.setMask(!0),r.setPolygonOffset(!1)}function ej(e,t,i,r){if(null!==(!0===i.isScene?i.overrideMaterial:null))return;void 0===V.state.transmissionRenderTarget[r.id]&&(V.state.transmissionRenderTarget[r.id]=new ex(1,1,{generateMipmaps:!0,type:n.has("EXT_color_buffer_half_float")||n.has("EXT_color_buffer_float")?1016:1009,minFilter:1008,samples:4,stencilBuffer:R,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:eu.workingColorSpace}));let a=V.state.transmissionRenderTarget[r.id],s=r.viewport||$;a.setSize(s.z,s.w);let l=j.getRenderTarget();j.setRenderTarget(a),j.getClearColor(en),(eo=j.getClearAlpha())<1&&j.setClearColor(0xffffff,.5),j.clear(),eC&&y.render(i);let u=j.toneMapping;j.toneMapping=0;let c=r.viewport;if(void 0!==r.viewport&&(r.viewport=void 0),V.setupLightsView(r),!0===ey&&v.setGlobalState(j.clippingPlanes,r),eX(e,i,r),o.updateMultisampleRenderTarget(a),o.updateRenderTargetMipmap(a),!1===n.has("WEBGL_multisampled_render_to_texture")){let e=!1;for(let n=0,a=t.length;ntypeof self&&eV.setContext(self),this.setAnimationLoop=function(e){eB=e,eN.setAnimationLoop(e),null===e?eV.stop():eV.start()},eN.addEventListener("sessionstart",ek),eN.addEventListener("sessionend",eH),this.render=function(e,t){if(void 0!==t&&!0!==t.isCamera)return void console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");if(!0===X)return;if(!0===e.matrixWorldAutoUpdate&&e.updateMatrixWorld(),null===t.parent&&!0===t.matrixWorldAutoUpdate&&t.updateMatrixWorld(),!0===eN.enabled&&!0===eN.isPresenting&&(!0===eN.cameraAutoUpdate&&eN.updateCamera(t),t=eN.getCamera()),!0===e.isScene&&e.onBeforeRender(j,e,t,Z),(V=g.get(e,W.length)).init(t),W.push(V),eM.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),ev.setFromProjectionMatrix(eM),eb=this.localClippingEnabled,ey=v.init(this.clippingPlanes,eb),(H=m.get(e,G.length)).init(),G.push(H),!0===eN.enabled&&!0===eN.isPresenting){let e=j.xr.getDepthSensingMesh();null!==e&&eG(e,t,-1/0,j.sortObjects)}eG(e,t,0,j.sortObjects),H.finish(),!0===j.sortObjects&&H.sort(ed,ep),(eC=!1===eN.enabled||!1===eN.isPresenting||!1===eN.hasDepthSensing())&&y.addToRenderList(H,e),this.info.render.frame++,!0===ey&&v.beginShadows();let n=V.state.shadowsArray;_.render(n,e,t),!0===ey&&v.endShadows(),!0===this.info.autoReset&&this.info.reset();let i=H.opaque,r=H.transmissive;if(V.setupLights(),t.isArrayCamera){let n=t.cameras;if(r.length>0)for(let t=0,a=n.length;t0&&ej(i,r,e,t),eC&&y.render(e),eW(H,e,t);null!==Z&&(o.updateMultisampleRenderTarget(Z),o.updateRenderTargetMipmap(Z)),!0===e.isScene&&e.onAfterRender(j,e,t),T.resetDefaultState(),J=-1,K=null,W.pop(),W.length>0?(V=W[W.length-1],!0===ey&&v.setGlobalState(j.clippingPlanes,V.state.camera)):V=null,G.pop(),H=G.length>0?G[G.length-1]:null},this.getActiveCubeFace=function(){return q},this.getActiveMipmapLevel=function(){return Y},this.getRenderTarget=function(){return Z},this.setRenderTargetTextures=function(e,t,i){s.get(e.texture).__webglTexture=t,s.get(e.depthTexture).__webglTexture=i;let r=s.get(e);r.__hasExternalTextures=!0,r.__autoAllocateDepthBuffer=void 0===i,r.__autoAllocateDepthBuffer||!0!==n.has("WEBGL_multisampled_render_to_texture")||(console.warn("THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided"),r.__useRenderToTexture=!1)},this.setRenderTargetFramebuffer=function(e,t){let n=s.get(e);n.__webglFramebuffer=t,n.__useDefaultFramebuffer=void 0===t},this.setRenderTarget=function(e,t=0,n=0){Z=e,q=t,Y=n;let i=!0,a=null,l=!1,u=!1;if(e){let c=s.get(e);if(void 0!==c.__useDefaultFramebuffer)r.bindFramebuffer(eP.FRAMEBUFFER,null),i=!1;else if(void 0===c.__webglFramebuffer)o.setupRenderTarget(e);else if(c.__hasExternalTextures)o.rebindTextures(e,s.get(e.texture).__webglTexture,s.get(e.depthTexture).__webglTexture);else if(e.depthBuffer){let t=e.depthTexture;if(c.__boundDepthTexture!==t){if(null!==t&&s.has(t)&&(e.width!==t.image.width||e.height!==t.image.height))throw Error("WebGLRenderTarget: Attached DepthTexture is initialized to the incorrect size.");o.setupDepthRenderbuffer(e)}}let h=e.texture;(h.isData3DTexture||h.isDataArrayTexture||h.isCompressedArrayTexture)&&(u=!0);let d=s.get(e).__webglFramebuffer;e.isWebGLCubeRenderTarget?(a=Array.isArray(d[t])?d[t][n]:d[t],l=!0):a=e.samples>0&&!1===o.useMultisampledRTT(e)?s.get(e).__webglMultisampledFramebuffer:Array.isArray(d)?d[n]:d,$.copy(e.viewport),Q.copy(e.scissor),ee=e.scissorTest}else $.copy(ef).multiplyScalar(eh).floor(),Q.copy(em).multiplyScalar(eh).floor(),ee=eg;if(r.bindFramebuffer(eP.FRAMEBUFFER,a)&&i&&r.drawBuffers(e,a),r.viewport($),r.scissor(Q),r.setScissorTest(ee),l){let i=s.get(e.texture);eP.framebufferTexture2D(eP.FRAMEBUFFER,eP.COLOR_ATTACHMENT0,eP.TEXTURE_CUBE_MAP_POSITIVE_X+t,i.__webglTexture,n)}else if(u){let i=s.get(e.texture);eP.framebufferTextureLayer(eP.FRAMEBUFFER,eP.COLOR_ATTACHMENT0,i.__webglTexture,n||0,t||0)}J=-1},this.readRenderTargetPixels=function(e,t,n,a,o,l,u){if(!(e&&e.isWebGLRenderTarget))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let c=s.get(e).__webglFramebuffer;if(e.isWebGLCubeRenderTarget&&void 0!==u&&(c=c[u]),c){r.bindFramebuffer(eP.FRAMEBUFFER,c);try{let r=e.texture,s=r.format,u=r.type;if(!i.textureFormatReadable(s))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");if(!i.textureTypeReadable(u))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");t>=0&&t<=e.width-a&&n>=0&&n<=e.height-o&&eP.readPixels(t,n,a,o,M.convert(s),M.convert(u),l)}finally{let e=null!==Z?s.get(Z).__webglFramebuffer:null;r.bindFramebuffer(eP.FRAMEBUFFER,e)}}},this.readRenderTargetPixelsAsync=async function(e,t,n,a,o,l,u){if(!(e&&e.isWebGLRenderTarget))throw Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let c=s.get(e).__webglFramebuffer;if(e.isWebGLCubeRenderTarget&&void 0!==u&&(c=c[u]),c){let u=e.texture,h=u.format,d=u.type;if(!i.textureFormatReadable(h))throw Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!i.textureTypeReadable(d))throw Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");if(t>=0&&t<=e.width-a&&n>=0&&n<=e.height-o){r.bindFramebuffer(eP.FRAMEBUFFER,c);let e=eP.createBuffer();eP.bindBuffer(eP.PIXEL_PACK_BUFFER,e),eP.bufferData(eP.PIXEL_PACK_BUFFER,l.byteLength,eP.STREAM_READ),eP.readPixels(t,n,a,o,M.convert(h),M.convert(d),0);let i=null!==Z?s.get(Z).__webglFramebuffer:null;r.bindFramebuffer(eP.FRAMEBUFFER,i);let u=eP.fenceSync(eP.SYNC_GPU_COMMANDS_COMPLETE,0);return eP.flush(),await er(eP,u,4),eP.bindBuffer(eP.PIXEL_PACK_BUFFER,e),eP.getBufferSubData(eP.PIXEL_PACK_BUFFER,0,l),eP.deleteBuffer(e),eP.deleteSync(u),l}throw Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")}},this.copyFramebufferToTexture=function(e,t=null,n=0){!0!==e.isTexture&&(ei("WebGLRenderer: copyFramebufferToTexture function signature has changed."),t=arguments[0]||null,e=arguments[1]);let i=Math.pow(2,-n),a=Math.floor(e.image.width*i),s=Math.floor(e.image.height*i),l=null!==t?t.x:0,u=null!==t?t.y:0;o.setTexture2D(e,0),eP.copyTexSubImage2D(eP.TEXTURE_2D,n,0,0,l,u,a,s),r.unbindTexture()};const eK=eP.createFramebuffer(),e$=eP.createFramebuffer();this.copyTextureToTexture=function(e,t,n=null,i=null,a=0,l=null){let u,c,h,d,p,f,m,g,v,_;!0!==e.isTexture&&(ei("WebGLRenderer: copyTextureToTexture function signature has changed."),i=arguments[0]||null,e=arguments[1],t=arguments[2],l=arguments[3]||0,n=null),null===l&&(0!==a?(ei("WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels."),l=a,a=0):l=0);let y=e.isCompressedTexture?e.mipmaps[l]:e.image;if(null!==n)u=n.max.x-n.min.x,c=n.max.y-n.min.y,h=n.isBox3?n.max.z-n.min.z:1,d=n.min.x,p=n.min.y,f=n.isBox3?n.min.z:0;else{let t=Math.pow(2,-a);u=Math.floor(y.width*t),c=Math.floor(y.height*t),h=e.isDataArrayTexture?y.depth:e.isData3DTexture?Math.floor(y.depth*t):1,d=0,p=0,f=0}null!==i?(m=i.x,g=i.y,v=i.z):(m=0,g=0,v=0);let x=M.convert(t.format),b=M.convert(t.type);t.isData3DTexture?(o.setTexture3D(t,0),_=eP.TEXTURE_3D):t.isDataArrayTexture||t.isCompressedArrayTexture?(o.setTexture2DArray(t,0),_=eP.TEXTURE_2D_ARRAY):(o.setTexture2D(t,0),_=eP.TEXTURE_2D),eP.pixelStorei(eP.UNPACK_FLIP_Y_WEBGL,t.flipY),eP.pixelStorei(eP.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t.premultiplyAlpha),eP.pixelStorei(eP.UNPACK_ALIGNMENT,t.unpackAlignment);let S=eP.getParameter(eP.UNPACK_ROW_LENGTH),T=eP.getParameter(eP.UNPACK_IMAGE_HEIGHT),w=eP.getParameter(eP.UNPACK_SKIP_PIXELS),E=eP.getParameter(eP.UNPACK_SKIP_ROWS),A=eP.getParameter(eP.UNPACK_SKIP_IMAGES);eP.pixelStorei(eP.UNPACK_ROW_LENGTH,y.width),eP.pixelStorei(eP.UNPACK_IMAGE_HEIGHT,y.height),eP.pixelStorei(eP.UNPACK_SKIP_PIXELS,d),eP.pixelStorei(eP.UNPACK_SKIP_ROWS,p),eP.pixelStorei(eP.UNPACK_SKIP_IMAGES,f);let C=e.isDataArrayTexture||e.isData3DTexture,R=t.isDataArrayTexture||t.isData3DTexture;if(e.isDepthTexture){let n=s.get(e),i=s.get(t),o=s.get(n.__renderTarget),_=s.get(i.__renderTarget);r.bindFramebuffer(eP.READ_FRAMEBUFFER,o.__webglFramebuffer),r.bindFramebuffer(eP.DRAW_FRAMEBUFFER,_.__webglFramebuffer);for(let n=0;ntypeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}get coordinateSystem(){return 2e3}get outputColorSpace(){return this._outputColorSpace}set outputColorSpace(e){this._outputColorSpace=e;let t=this.getContext();t.drawingBufferColorspace=eu._getDrawingBufferColorSpace(e),t.unpackColorSpace=eu._getUnpackColorSpace()}}e.s(["PMREMGenerator",0,o8,"ShaderChunk",0,oB,"ShaderLib",0,oH,"UniformsLib",0,ok,"WebGLRenderer",0,uK,"WebGLUtils",0,uk],8560);var u$=e.i(30224);let uQ=e=>{let t,n=new Set,i=(e,i)=>{let r="function"==typeof e?e(t):e;if(!Object.is(r,t)){let e=t;t=(null!=i?i:"object"!=typeof r||null===r)?r:Object.assign({},t,r),n.forEach(n=>n(t,e))}},r=()=>t,a={setState:i,getState:r,getInitialState:()=>s,subscribe:e=>(n.add(e),()=>n.delete(e))},s=t=e(i,r,a);return a},u0=e=>e?uQ(e):uQ;e.s(["createStore",0,u0],8155);let{useSyncExternalStoreWithSelector:u1}=u$.default,u2=(e,t)=>{let n=u0(e),i=(e,i=t)=>(function(e,t=e=>e,n){let i=u1(e.subscribe,e.getState,e.getInitialState,t,n);return E.default.useDebugValue(i),i})(n,e,i);return Object.assign(i,n),i},u3=(e,t)=>e?u2(e,t):u2,u4=[];function u5(e,t,n=(e,t)=>e===t){if(e===t)return!0;if(!e||!t)return!1;let i=e.length;if(t.length!==i)return!1;for(let r=0;r0&&(r.timeout&&clearTimeout(r.timeout),r.timeout=setTimeout(r.remove,i.lifespan)),r.response;if(!n)throw r.promise}let r={keys:t,equal:i.equal,remove:()=>{let e=u4.indexOf(r);-1!==e&&u4.splice(e,1)},promise:("object"==typeof e&&"function"==typeof e.then?e:e(...t)).then(e=>{r.response=e,i.lifespan&&i.lifespan>0&&(r.timeout=setTimeout(r.remove,i.lifespan))}).catch(e=>r.error=e)};if(u4.push(r),!n)throw r.promise}var u8=e.i(89499),u9=e.i(43476),u7=E;function ce(e,t,n){if(!e)return;if(!0===n(e))return e;let i=t?e.return:e.child;for(;i;){let e=ce(i,t,n);if(e)return e;i=t?null:i.sibling}}function ct(e){try{return Object.defineProperties(e,{_currentRenderer:{get:()=>null,set(){}},_currentRenderer2:{get:()=>null,set(){}}})}catch(t){return e}}"u">typeof window&&((null==(y=window.document)?void 0:y.createElement)||(null==(x=window.navigator)?void 0:x.product)==="ReactNative")?u7.useLayoutEffect:u7.useEffect;let cn=ct(u7.createContext(null));class ci extends u7.Component{render(){return u7.createElement(cn.Provider,{value:this._reactInternals},this.props.children)}}function cr(){let e=u7.useContext(cn);if(null===e)throw Error("its-fine: useFiber must be called within a !");let t=u7.useId();return u7.useMemo(()=>{for(let n of[e,null==e?void 0:e.alternate]){if(!n)continue;let e=ce(n,!1,e=>{let n=e.memoizedState;for(;n;){if(n.memoizedState===t)return!0;n=n.next}});if(e)return e}},[e,t])}let ca=Symbol.for("react.context"),cs=e=>null!==e&&"object"==typeof e&&"$$typeof"in e&&e.$$typeof===ca;function co(e){let t=e.root;for(;t.getState().previousRoot;)t=t.getState().previousRoot;return t}E.act;let cl=e=>e&&e.hasOwnProperty("current"),cu=e=>null!=e&&("string"==typeof e||"number"==typeof e||e.isColor),cc="u">typeof window&&((null==(m=window.document)?void 0:m.createElement)||(null==(g=window.navigator)?void 0:g.product)==="ReactNative")?E.useLayoutEffect:E.useEffect;function ch(e){let t=E.useRef(e);return cc(()=>void(t.current=e),[e]),t}function cd(){let e,t=cr(),n=(e=function(){let e=cr(),[t]=u7.useState(()=>new Map);t.clear();let n=e;for(;n;){let e=n.type;cs(e)&&e!==cn&&!t.has(e)&&t.set(e,u7.use(ct(e))),n=n.return}return t}(),u7.useMemo(()=>Array.from(e.keys()).reduce((t,n)=>i=>u7.createElement(t,null,u7.createElement(n.Provider,{...i,value:e.get(n)})),e=>u7.createElement(ci,{...e})),[e]));return E.useMemo(()=>({children:e})=>{let i=ce(t,!0,e=>e.type===E.StrictMode)?E.StrictMode:E.Fragment;return(0,u9.jsx)(i,{children:(0,u9.jsx)(n,{children:e})})},[t,n])}function cp({set:e}){return cc(()=>(e(new Promise(()=>null)),()=>e(!1)),[e]),null}let cf=((v=class extends E.Component{constructor(...e){super(...e),this.state={error:!1}}componentDidCatch(e){this.props.set(e)}render(){return this.state.error?null:this.props.children}}).getDerivedStateFromError=()=>({error:!0}),v);function cm(e){var t;let n="u">typeof window?null!=(t=window.devicePixelRatio)?t:2:1;return Array.isArray(e)?Math.min(Math.max(e[0],n),e[1]):e}function cg(e){var t;return null==(t=e.__r3f)?void 0:t.root.getState()}let cv={obj:e=>e===Object(e)&&!cv.arr(e)&&"function"!=typeof e,fun:e=>"function"==typeof e,str:e=>"string"==typeof e,num:e=>"number"==typeof e,boo:e=>"boolean"==typeof e,und:e=>void 0===e,nul:e=>null===e,arr:e=>Array.isArray(e),equ(e,t,{arrays:n="shallow",objects:i="reference",strict:r=!0}={}){let a;if(typeof e!=typeof t||!!e!=!!t)return!1;if(cv.str(e)||cv.num(e)||cv.boo(e))return e===t;let s=cv.obj(e);if(s&&"reference"===i)return e===t;let o=cv.arr(e);if(o&&"reference"===n)return e===t;if((o||s)&&e===t)return!0;for(a in e)if(!(a in t))return!1;if(s&&"shallow"===n&&"shallow"===i){for(a in r?t:e)if(!cv.equ(e[a],t[a],{strict:r,objects:"reference"}))return!1}else for(a in r?t:e)if(e[a]!==t[a])return!1;if(cv.und(a)){if(o&&0===e.length&&0===t.length||s&&0===Object.keys(e).length&&0===Object.keys(t).length)return!0;if(e!==t)return!1}return!0}},c_=["children","key","ref"];function cy(e,t,n,i){let r=null==e?void 0:e.__r3f;return!r&&(r={root:t,type:n,parent:null,children:[],props:function(e){let t={};for(let n in e)c_.includes(n)||(t[n]=e[n]);return t}(i),object:e,eventCount:0,handlers:{},isHidden:!1},e&&(e.__r3f=r)),r}function cx(e,t){if(!t.includes("-")||t in e)return{root:e,key:t,target:e[t]};let n=e,i=t.split("-");for(let r of i){if("object"!=typeof n||null===n){if(void 0!==n)return{root:n,key:i.slice(i.indexOf(r)).join("-"),target:void 0};return{root:e,key:t,target:void 0}}t=r,e=n,n=n[t]}return{root:e,key:t,target:n}}let cb=/-\d+$/;function cS(e,t){if(cv.str(t.props.attach)){if(cb.test(t.props.attach)){let n=t.props.attach.replace(cb,""),{root:i,key:r}=cx(e.object,n);Array.isArray(i[r])||(i[r]=[])}let{root:n,key:i}=cx(e.object,t.props.attach);t.previousAttach=n[i],n[i]=t.object}else cv.fun(t.props.attach)&&(t.previousAttach=t.props.attach(e.object,t.object))}function cM(e,t){if(cv.str(t.props.attach)){let{root:n,key:i}=cx(e.object,t.props.attach),r=t.previousAttach;void 0===r?delete n[i]:n[i]=r}else null==t.previousAttach||t.previousAttach(e.object,t.object);delete t.previousAttach}let cT=[...c_,"args","dispose","attach","object","onUpdate","dispose"],cw=new Map,cE=["map","emissiveMap","sheenColorMap","specularColorMap","envMap"],cA=/^on(Pointer|Click|DoubleClick|ContextMenu|Wheel)/;function cC(e,t){var n,i;let r=e.__r3f,a=r&&co(r).getState(),s=null==r?void 0:r.eventCount;for(let n in t){let s=t[n];if(cT.includes(n))continue;if(r&&cA.test(n)){"function"==typeof s?r.handlers[n]=s:delete r.handlers[n],r.eventCount=Object.keys(r.handlers).length;continue}if(void 0===s)continue;let{root:o,key:l,target:u}=cx(e,n);if(void 0===u&&("object"!=typeof o||null===o))throw Error(`R3F: Cannot set "${n}". Ensure it is an object before setting "${l}".`);if(u instanceof ti&&s instanceof ti)u.mask=s.mask;else if(u instanceof tz&&cu(s))u.set(s);else if(null!==u&&"object"==typeof u&&"function"==typeof u.set&&"function"==typeof u.copy&&null!=s&&s.constructor&&u.constructor===s.constructor)u.copy(s);else if(null!==u&&"object"==typeof u&&"function"==typeof u.set&&Array.isArray(s))"function"==typeof u.fromArray?u.fromArray(s):u.set(...s);else if(null!==u&&"object"==typeof u&&"function"==typeof u.set&&"number"==typeof s)"function"==typeof u.setScalar?u.setScalar(s):u.set(s);else if(o instanceof nb&&"uniforms"===l&&cv.obj(s)){cv.obj(o.uniforms)||(o.uniforms={});let e=o.uniforms;for(let t in s){let n=s[t],i=e[t];i?Object.assign(i,n):e[t]={...n}}}else o[l]=s,a&&!a.linear&&cE.includes(l)&&null!=(i=o[l])&&i.isTexture&&1023===o[l].format&&1009===o[l].type&&(o[l].colorSpace=I)}if(null!=r&&r.parent&&null!=a&&a.internal&&null!=(n=r.object)&&n.isObject3D&&s!==r.eventCount){let e=r.object,t=a.internal.interaction.indexOf(e);t>-1&&a.internal.interaction.splice(t,1),r.eventCount&&null!==e.raycast&&a.internal.interaction.push(e)}return r&&void 0===r.props.attach&&(r.object.isBufferGeometry?r.props.attach="geometry":r.object.isMaterial&&(r.props.attach="material")),r&&cR(r),e}function cR(e){var t;if(!e.parent)return;null==e.props.onUpdate||e.props.onUpdate(e.object);let n=null==(t=e.root)||null==t.getState?void 0:t.getState();n&&0===n.internal.frames&&n.invalidate()}function cP(e,t){!e.manual&&(e&&e.isOrthographicCamera?(e.left=-(t.width/2),e.right=t.width/2,e.top=t.height/2,e.bottom=-(t.height/2)):e.aspect=t.width/t.height,e.updateProjectionMatrix())}let cI=e=>null==e?void 0:e.isObject3D;function cL(e){return(e.eventObject||e.object).uuid+"/"+e.index+e.instanceId}function cN(e,t,n,i){let r=n.get(t);r&&(n.delete(t),0===n.size&&(e.delete(i),r.target.releasePointerCapture(i)))}let cU=e=>!!(null!=e&&e.render),cD=E.createContext(null);function cO(){let e=E.useContext(cD);if(!e)throw Error("R3F: Hooks can only be used within the Canvas component!");return e}function cF(e=e=>e,t){return cO()(e,t)}function cz(e,t=0){let n=cO(),i=n.getState().internal.subscribe,r=ch(e);return cc(()=>i(r,t,n),[t,i,n]),null}let cB=new WeakMap;function ck(e,t){return function(n,...i){var r;let a;return"function"==typeof n&&(null==n||null==(r=n.prototype)?void 0:r.constructor)===n?(a=cB.get(n))||(a=new n,cB.set(n,a)):a=n,e&&e(a),Promise.all(i.map(e=>new Promise((n,i)=>a.load(e,e=>{var t;let i;cI(null==e?void 0:e.scene)&&Object.assign(e,(t=e.scene,i={nodes:{},materials:{},meshes:{}},t&&t.traverse(e=>{e.name&&(i.nodes[e.name]=e),e.material&&!i.materials[e.material.name]&&(i.materials[e.material.name]=e.material),e.isMesh&&!i.meshes[e.name]&&(i.meshes[e.name]=e)}),i)),n(e)},t,t=>i(Error(`Could not load ${e}: ${null==t?void 0:t.message}`))))))}}function cH(e,t,n,i){let r=Array.isArray(t)?t:[t],a=u6(ck(n,i),[e,...r],!1,{equal:cv.equ});return Array.isArray(t)?a:a[0]}cH.preload=function(e,t,n){let i,r=Array.isArray(t)?t:[t];u6(ck(n),[e,...r],!0,i)},cH.clear=function(e,t){var n=[e,...Array.isArray(t)?t:[t]];if(void 0===n||0===n.length)u4.splice(0,u4.length);else{let e=u4.find(e=>u5(n,e.keys,e.equal));e&&e.remove()}};var cV={exports:{}},cG={exports:{}};cG.exports;let cW=(T||(T=1,M||(M=1,cG.exports=function(e){function t(e,t,n,i){return new iJ(e,t,n,i)}function n(){}function i(e){var t="https://react.dev/errors/"+e;if(1sT||(e.current=sM[sT],sM[sT]=null,sT--)}function h(e,t){sM[++sT]=e.current,e.current=t}function d(e){var t=42&e;if(0!==t)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return 261888&e;case 262144:case 524288:case 1048576:case 2097152:return 3932160&e;case 4194304:case 8388608:case 0x1000000:case 0x2000000:return 0x3c00000&e;case 0x4000000:return 0x4000000;case 0x8000000:return 0x8000000;case 0x10000000:return 0x10000000;case 0x20000000:return 0x20000000;case 0x40000000:return 0;default:return e}}function p(e,t,n){var i=e.pendingLanes;if(0===i)return 0;var r=0,a=e.suspendedLanes,s=e.pingedLanes;e=e.warmLanes;var o=0x7ffffff&i;return 0!==o?0!=(i=o&~a)?r=d(i):0!=(s&=o)?r=d(s):n||0!=(n=o&~e)&&(r=d(n)):0!=(o=i&~a)?r=d(o):0!==s?r=d(s):n||0!=(n=i&~e)&&(r=d(n)),0===r?0:0!==t&&t!==r&&(t&a)==0&&((a=r&-r)>=(n=t&-t)||32===a&&(4194048&n)!=0)?t:r}function f(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)==0}function m(){var e=sI;return(0x3c00000&(sI<<=1))==0&&(sI=4194304),e}function g(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function v(e,t){e.pendingLanes|=t,0x10000000!==t&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function _(e,t,n){e.pendingLanes|=t,e.suspendedLanes&=~t;var i=31-sE(t);e.entangledLanes|=t,e.entanglements[i]=0x40000000|e.entanglements[i]|261930&n}function y(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var i=31-sE(n),r=1<)":-1r||l[i]!==u[r]){var c=` -`+l[i].replace(" at new "," at ");return e.displayName&&c.includes("")&&(c=c.replace("",e.displayName)),c}while(1<=i&&0<=r)break}}}finally{sY=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:"")?T(n):""}function C(e){try{var t="",n=null;do t+=function(e,t){switch(e.tag){case 26:case 27:case 5:return T(e.type);case 16:return T("Lazy");case 13:return e.child!==t&&null!==t?T("Suspense Fallback"):T("Suspense");case 19:return T("SuspenseList");case 0:case 15:return A(e.type,!1);case 11:return A(e.type.render,!1);case 1:return A(e.type,!0);case 31:return T("Activity");default:return""}}(e,n),n=e,e=e.return;while(e)return t}catch(e){return` -Error generating stack: `+e.message+` -`+e.stack}}function R(e,t){if("object"==typeof e&&null!==e){var n=sZ.get(e);return void 0!==n?n:(t={value:e,source:t,stack:C(t)},sZ.set(e,t),t)}return{value:e,source:t,stack:C(t)}}function P(e,t){sJ[sK++]=sQ,sJ[sK++]=s$,s$=e,sQ=t}function I(e,t,n){s0[s1++]=s3,s0[s1++]=s4,s0[s1++]=s2,s2=e;var i=s3;e=s4;var r=32-sE(i)-1;i&=~(1<>=s,r-=s,s3=1<<32-sE(t)+r|n<d?(p=h,h=null):p=h.sibling;var v=m(t,h,s[d],o);if(null===v){null===h&&(h=p);break}e&&h&&null===v.alternate&&n(t,h),i=l(v,i,d),null===c?u=v:c.sibling=v,c=v,h=p}if(d===s.length)return r(t,h),ot&&P(t,d),u;if(null===h){for(;dp?(v=d,d=null):v=d.sibling;var y=m(t,d,_.value,u);if(null===y){null===d&&(d=v);break}e&&d&&null===y.alternate&&n(t,d),s=l(y,s,p),null===h?c=y:h.sibling=y,h=y,d=v}if(_.done)return r(t,d),ot&&P(t,p),c;if(null===d){for(;!_.done;p++,_=o.next())null!==(_=f(t,_.value,u))&&(s=l(_,s,p),null===h?c=_:h.sibling=_,h=_);return ot&&P(t,p),c}for(d=a(d);!_.done;p++,_=o.next())null!==(_=g(d,t,p,_.value,u))&&(e&&null!==_.alternate&&d.delete(null===_.key?p:_.key),s=l(_,s,p),null===h?c=_:h.sibling=_,h=_);return e&&d.forEach(function(e){return n(t,e)}),ot&&P(t,p),c}(c,h,d=v.call(d),p)}if("function"==typeof d.then)return t(c,h,eM(d),p);if(d.$$typeof===rd)return t(c,h,ee(c,d),p);ew(c,d)}return"string"==typeof d&&""!==d||"number"==typeof d||"bigint"==typeof d?(d=""+d,null!==h&&6===h.tag?(r(c,h.sibling),(p=s(h,d)).return=c):(r(c,h),(p=i2(d,c.mode,p)).return=c),u(c=p)):r(c,h)}(c,h,d,p);return oR=null,v}catch(e){if(e===oT||e===oE)throw e;var _=t(29,e,null,c.mode);return _.lanes=p,_.return=c,_}finally{}}}function eA(){for(var e=oU,t=oD=oU=0;ta?a:8);var s=rM.T,o={};rM.T=o,t$(e,!1,t,n);try{var l=r(),u=rM.S;if(null!==u&&u(o,l),null!==l&&"object"==typeof l&&"function"==typeof l.then){var c,h,d=(c=[],h={status:"pending",value:null,reason:null,then:function(e){c.push(e)}},l.then(function(){h.status="fulfilled",h.value=i;for(var e=0;e";case lu:return":has("+(id(e)||"")+")";case lc:return'[role="'+e.value+'"]';case ld:return'"'+e.value+'"';case lh:return'[data-testname="'+e.value+'"]';default:throw Error(i(365))}}function ip(e,t){var n=[];e=[e,0];for(var i=0;ilO&&(t.flags|=128,a=!0,nO(r,!1),t.lanes=4194304)}else{if(!a)if(null!==(e=eK(s))){if(t.flags|=128,a=!0,t.updateQueue=e=e.updateQueue,nD(t,e),nO(r,!0),null===r.tail&&"hidden"===r.tailMode&&!s.alternate&&!ot)return nF(t),null}else 2*sO()-r.renderingStartTime>lO&&0x20000000!==n&&(t.flags|=128,a=!0,nO(r,!1),t.lanes=4194304);r.isBackwards?(s.sibling=t.child,t.child=s):(null!==(e=r.last)?e.sibling=s:t.child=s,r.last=s)}return null!==r.tail?(e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=sO(),e.sibling=null,n=oV.current,h(oV,a?1&n|2:1&n),ot&&P(t,r.treeForkCount),e):(nF(t),null);case 22:case 23:return eJ(t),ej(),r=null!==t.memoizedState,null!==e?null!==e.memoizedState!==r&&(t.flags|=8192):r&&(t.flags|=8192),r?(0x20000000&n)!=0&&(128&t.flags)==0&&(nF(t),6&t.subtreeFlags&&(t.flags|=8192)):nF(t),null!==(n=t.updateQueue)&&nD(t,n.retryQueue),n=null,null!==e&&null!==e.memoizedState&&null!==e.memoizedState.cachePool&&(n=e.memoizedState.cachePool.pool),r=null,null!==t.memoizedState&&null!==t.memoizedState.cachePool&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),null!==e&&c(oM),null;case 24:return n=null,null!==e&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),q(oh),nF(t),null;case 25:case 30:return null}throw Error(i(156,t.tag))}(t.alternate,t,lT);if(null!==n){lv=n;return}if(null!==(t=t.sibling)){lv=t;return}lv=t=e}while(null!==t)0===lw&&(lw=5)}function iD(e,t){do{var n=function(e,t){switch(N(t),t.tag){case 1:return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return q(oh),O(),(65536&(e=t.flags))!=0&&(128&e)==0?(t.flags=-65537&e|128,t):null;case 26:case 27:case 5:return z(t),null;case 31:if(null!==t.memoizedState){if(eJ(t),null===t.alternate)throw Error(i(340));G()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 13:if(eJ(t),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(i(340));G()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return c(oV),null;case 4:return O(),null;case 10:return q(t.type),null;case 22:case 23:return eJ(t),ej(),null!==e&&c(oM),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 24:return q(oh),null;default:return null}}(e.alternate,e);if(null!==n){n.flags&=32767,lv=n;return}if(null!==(n=e.return)&&(n.flags|=32768,n.subtreeFlags=0,n.deletions=null),!t&&null!==(e=e.sibling)){lv=e;return}lv=e=n}while(null!==e)lw=6,lv=null}function iO(e,t,n,r,a,s,o,l,u){e.cancelPendingCommit=null;do iH();while(0!==lB)if((6&lm)!=0)throw Error(i(327));if(null!==t){if(t===e.current)throw Error(i(177));if(function(e,t,n,i,r,a){var s=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var o=e.entanglements,l=e.expirationTimes,u=e.hiddenUpdates;for(n=s&~n;0n?32:n;n=rM.T;var a=rq();try{rX(r),rM.T=null,r=lW,lW=null;var s=lk,o=lV;if(lB=0,lH=lk=null,lV=0,(6&lm)!=0)throw Error(i(331));var l=lm;if(lm|=4,il(s.current),it(s,s.current,o,r),lm=l,es(0,!1),sW&&"function"==typeof sW.onPostCommitFiberRoot)try{sW.onPostCommitFiberRoot(sG,s)}catch{}return!0}finally{rX(a),rM.T=n,ik(e,t)}}function iG(e,t,n){t=R(n,t),t=t9(e.stateNode,t,2),null!==(e=eO(e,t,2))&&(v(e,2),ea(e))}function iW(e,t,n){if(3===e.tag)iG(e,e,n);else for(;null!==t;){if(3===t.tag){iG(t,e,n);break}if(1===t.tag){var i=t.stateNode;if("function"==typeof t.type.getDerivedStateFromError||"function"==typeof i.componentDidCatch&&(null===lz||!lz.has(i))){e=R(n,e),null!==(i=eO(t,n=t7(2),2))&&(ne(n,i,t,e),v(i,2),ea(i));break}}t=t.return}}function ij(e,t,n){var i=e.pingCache;if(null===i){i=e.pingCache=new lf;var r=new Set;i.set(t,r)}else void 0===(r=i.get(t))&&(r=new Set,i.set(t,r));r.has(n)||(lM=!0,r.add(n),e=iX.bind(null,e,t,n),t.then(e,e))}function iX(e,t,n){var i=e.pingCache;null!==i&&i.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,lg===e&&(l_&n)===n&&(4===lw||3===lw&&(0x3c00000&l_)===l_&&300>sO()-lU?(2&lm)==0&&iT(e,0):lC|=n,lP===l_&&(lP=0)),ea(e)}function iq(e,t){0===t&&(t=m()),null!==(e=eP(e,t))&&(v(e,t),ea(e))}function iY(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),iq(e,n)}function iZ(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,a=e.memoizedState;null!==a&&(n=a.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}null!==r&&r.delete(t),iq(e,n)}function iJ(e,t,n,i){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.refCleanup=this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=i,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function iK(e){return!(!(e=e.prototype)||!e.isReactComponent)}function i$(e,n){var i=e.alternate;return null===i?((i=t(e.tag,n,e.key,e.mode)).elementType=e.elementType,i.type=e.type,i.stateNode=e.stateNode,i.alternate=e,e.alternate=i):(i.pendingProps=n,i.type=e.type,i.flags=0,i.subtreeFlags=0,i.deletions=null),i.flags=0x3e00000&e.flags,i.childLanes=e.childLanes,i.lanes=e.lanes,i.child=e.child,i.memoizedProps=e.memoizedProps,i.memoizedState=e.memoizedState,i.updateQueue=e.updateQueue,n=e.dependencies,i.dependencies=null===n?null:{lanes:n.lanes,firstContext:n.firstContext},i.sibling=e.sibling,i.index=e.index,i.ref=e.ref,i.refCleanup=e.refCleanup,i}function iQ(e,t){e.flags&=0x3e00002;var n=e.alternate;return null===n?(e.childLanes=0,e.lanes=t,e.child=null,e.subtreeFlags=0,e.memoizedProps=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null,e.stateNode=null):(e.childLanes=n.childLanes,e.lanes=n.lanes,e.child=n.child,e.subtreeFlags=0,e.deletions=null,e.memoizedProps=n.memoizedProps,e.memoizedState=n.memoizedState,e.updateQueue=n.updateQueue,e.type=n.type,e.dependencies=null===(t=n.dependencies)?null:{lanes:t.lanes,firstContext:t.firstContext}),e}function i0(e,n,r,a,s,o){var l=0;if(a=e,"function"==typeof e)iK(e)&&(l=1);else if("string"==typeof e)l=si&&sv?sr(e,r,s5.current)?26:sb(e)?27:5:si?sr(e,r,s5.current)?26:5:sv&&sb(e)?27:5;else o:switch(e){case r_:return(e=t(31,r,n,s)).elementType=r_,e.lanes=o,e;case rl:return i1(r.children,s,o,n);case ru:l=8,s|=24;break;case rc:return(e=t(12,r,n,2|s)).elementType=rc,e.lanes=o,e;case rf:return(e=t(13,r,n,s)).elementType=rf,e.lanes=o,e;case rm:return(e=t(19,r,n,s)).elementType=rm,e.lanes=o,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case rd:l=10;break o;case rh:l=9;break o;case rp:l=11;break o;case rg:l=14;break o;case rv:l=16,a=null;break o}l=29,r=Error(i(130,null===e?"null":typeof e,"")),a=null}return(n=t(l,r,n,s)).elementType=e,n.type=a,n.lanes=o,n}function i1(e,n,i,r){return(e=t(7,e,r,n)).lanes=i,e}function i2(e,n,i){return(e=t(6,e,null,n)).lanes=i,e}function i3(e){var n=t(18,null,null,0);return n.stateNode=e,n}function i4(e,n,i){return(n=t(4,null!==e.children?e.children:[],e.key,n)).lanes=i,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}function i5(e,t,n,i,r,a,s,o,l){this.tag=1,this.containerInfo=e,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=rB,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=g(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=g(0),this.hiddenUpdates=g(null),this.identifierPrefix=i,this.onUncaughtError=r,this.onCaughtError=a,this.onRecoverableError=s,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=l,this.incompleteTransitions=new Map}function i6(e,n,i,r,a,s,o,l,u,c,h,d){return e=new i5(e,n,i,o,u,c,h,d,l),n=1,!0===s&&(n|=24),s=t(3,null,null,n),e.current=s,s.stateNode=e,n=en(),n.refCount++,e.pooledCache=n,n.refCount++,s.memoizedState={element:r,isDehydrated:i,cache:n},eN(s),e}function i8(e){var t=e._reactInternals;if(void 0===t)throw"function"==typeof e.render?Error(i(188)):Error(i(268,e=Object.keys(e).join(",")));return null===(e=null!==(e=s(t))?function e(t){var n=t.tag;if(5===n||26===n||27===n||6===n)return t;for(t=t.child;null!==t;){if(null!==(n=e(t)))return n;t=t.sibling}return null}(e):null)?null:rA(e.stateNode)}function i9(e,t,n,i,r,a){r=sw,null===i.context?i.context=r:i.pendingContext=r,(i=eD(t)).payload={element:n},null!==(a=void 0===a?null:a)&&(i.callback=a),null!==(n=eO(e,i,t))&&(i_(n,e,t),eF(n,e,t))}function i7(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n>>=0)?32:31-(sA(e)/sC|0)|0},sA=Math.log,sC=Math.LN2,sR=256,sP=262144,sI=4194304,sL=ri.unstable_scheduleCallback,sN=ri.unstable_cancelCallback,sU=ri.unstable_shouldYield,sD=ri.unstable_requestPaint,sO=ri.unstable_now,sF=ri.unstable_ImmediatePriority,sz=ri.unstable_UserBlockingPriority,sB=ri.unstable_NormalPriority,sk=ri.unstable_IdlePriority,sH=ri.log,sV=ri.unstable_setDisableYieldValue,sG=null,sW=null,sj="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},sX="function"==typeof reportError?reportError:function(e){if("object"==typeof window&&"function"==typeof window.ErrorEvent){var t=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:"object"==typeof e&&null!==e&&"string"==typeof e.message?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if("object"==typeof w.default&&"function"==typeof w.default.emit)return void w.default.emit("uncaughtException",e);console.error(e)},sq=Object.prototype.hasOwnProperty,sY=!1,sZ=new WeakMap,sJ=[],sK=0,s$=null,sQ=0,s0=[],s1=0,s2=null,s3=1,s4="",s5=u(null),s6=u(null),s8=u(null),s9=u(null),s7=null,oe=null,ot=!1,on=null,oi=!1,or=Error(i(519)),oa=u(null),os=null,oo=null,ol="u">typeof AbortController?AbortController:function(){var e=[],t=this.signal={aborted:!1,addEventListener:function(t,n){e.push(n)}};this.abort=function(){t.aborted=!0,e.forEach(function(e){return e()})}},ou=ri.unstable_scheduleCallback,oc=ri.unstable_NormalPriority,oh={$$typeof:rd,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0},od=null,op=null,of=!1,om=!1,og=!1,ov=0,o_=null,oy=0,ox=0,ob=null,oS=rM.S;rM.S=function(e,t){lD=sO(),"object"==typeof t&&null!==t&&"function"==typeof t.then&&function(e){if(null===o_){var t=o_=[];oy=0,ox=ed(),ob={status:"pending",value:void 0,then:function(e){t.push(e)}}}oy++,e.then(ep,ep)}(t),null!==oS&&oS(e,t)};var oM=u(null),oT=Error(i(460)),ow=Error(i(474)),oE=Error(i(542)),oA={then:function(){}},oC=null,oR=null,oP=0,oI=eE(!0),oL=eE(!1),oN=[],oU=0,oD=0,oO=!1,oF=!1,oz=u(null),oB=u(0),ok=u(null),oH=null,oV=u(0),oG=0,oW=null,oj=null,oX=null,oq=!1,oY=!1,oZ=!1,oJ=0,oK=0,o$=null,oQ=0,o0={readContext:Q,use:tt,useCallback:e$,useContext:e$,useEffect:e$,useImperativeHandle:e$,useLayoutEffect:e$,useInsertionEffect:e$,useMemo:e$,useReducer:e$,useRef:e$,useState:e$,useDebugValue:e$,useDeferredValue:e$,useTransition:e$,useSyncExternalStore:e$,useId:e$,useHostTransitionStatus:e$,useFormState:e$,useActionState:e$,useOptimistic:e$,useMemoCache:e$,useCacheRefresh:e$};o0.useEffectEvent=e$;var o1={readContext:Q,use:tt,useCallback:function(e,t){return e8().memoizedState=[e,void 0===t?null:t],e},useContext:Q,useEffect:tI,useImperativeHandle:function(e,t,n){n=null!=n?n.concat([e]):null,tR(4194308,4,tO.bind(null,t,e),n)},useLayoutEffect:function(e,t){return tR(4194308,4,e,t)},useInsertionEffect:function(e,t){tR(4,2,e,t)},useMemo:function(e,t){var n=e8();t=void 0===t?null:t;var i=e();return n.memoizedState=[i,t],i},useReducer:function(e,t,n){var i=e8();if(void 0!==n)var r=n(t);else r=t;return i.memoizedState=i.baseState=r,i.queue=e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:r},e=e.dispatch=tZ.bind(null,oW,e),[i.memoizedState,e]},useRef:function(e){return e8().memoizedState={current:e}},useState:function(e){var t=(e=tp(e)).queue,n=tJ.bind(null,oW,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:tz,useDeferredValue:function(e,t){return tH(e8(),e,t)},useTransition:function(){var e=tp(!1);return e=tG.bind(null,oW,e.queue,!0,!1),e8().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=oW,a=e8();if(ot){if(void 0===n)throw Error(i(407));n=n()}else{if(n=t(),null===lg)throw Error(i(349));(127&l_)!=0||tl(r,t,n)}a.memoizedState=n;var s={value:n,getSnapshot:t};return a.queue=s,tI(tc.bind(null,r,s,e),[e]),r.flags|=2048,tA(9,{destroy:void 0},tu.bind(null,r,s,n,t),null),n},useId:function(){var e=e8(),t=lg.identifierPrefix;if(ot){var n=s4,i=s3;t="_"+t+"R_"+(n=(i&~(1<<32-sE(i)-1)).toString(32)+n),0<(n=oJ++)&&(t+="H"+n.toString(32)),t+="_"}else t="_"+t+"r_"+(n=oQ++).toString(32)+"_";return e.memoizedState=t},useHostTransitionStatus:tj,useFormState:tS,useActionState:tS,useOptimistic:function(e){var t=e8();t.memoizedState=t.baseState=e;var n={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return t.queue=n,t=t$.bind(null,oW,!0,n),n.dispatch=t,[e,t]},useMemoCache:tn,useCacheRefresh:function(){return e8().memoizedState=tY.bind(null,oW)},useEffectEvent:function(e){var t=e8(),n={impl:e};return t.memoizedState=n,function(){if((2&lm)!=0)throw Error(i(440));return n.impl.apply(void 0,arguments)}}},o2={readContext:Q,use:tt,useCallback:tB,useContext:Q,useEffect:tL,useImperativeHandle:tF,useInsertionEffect:tU,useLayoutEffect:tD,useMemo:tk,useReducer:tr,useRef:tC,useState:function(){return tr(ti)},useDebugValue:tz,useDeferredValue:function(e,t){return tV(e9(),oj.memoizedState,e,t)},useTransition:function(){var e=tr(ti)[0],t=e9().memoizedState;return["boolean"==typeof e?e:te(e),t]},useSyncExternalStore:to,useId:tX,useHostTransitionStatus:tj,useFormState:tM,useActionState:tM,useOptimistic:function(e,t){return tf(e9(),oj,e,t)},useMemoCache:tn,useCacheRefresh:tq};o2.useEffectEvent=tN;var o3={readContext:Q,use:tt,useCallback:tB,useContext:Q,useEffect:tL,useImperativeHandle:tF,useInsertionEffect:tU,useLayoutEffect:tD,useMemo:tk,useReducer:ts,useRef:tC,useState:function(){return ts(ti)},useDebugValue:tz,useDeferredValue:function(e,t){var n=e9();return null===oj?tH(n,e,t):tV(n,oj.memoizedState,e,t)},useTransition:function(){var e=ts(ti)[0],t=e9().memoizedState;return["boolean"==typeof e?e:te(e),t]},useSyncExternalStore:to,useId:tX,useHostTransitionStatus:tj,useFormState:tE,useActionState:tE,useOptimistic:function(e,t){var n=e9();return null!==oj?tf(n,oj,e,t):(n.baseState=e,[e,n.queue.dispatch])},useMemoCache:tn,useCacheRefresh:tq};o3.useEffectEvent=tN;var o4={enqueueSetState:function(e,t,n){e=e._reactInternals;var i=ig(),r=eD(i);r.payload=t,null!=n&&(r.callback=n),null!==(t=eO(e,r,i))&&(i_(t,e,i),eF(t,e,i))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var i=ig(),r=eD(i);r.tag=1,r.payload=t,null!=n&&(r.callback=n),null!==(t=eO(e,r,i))&&(i_(t,e,i),eF(t,e,i))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=ig(),i=eD(n);i.tag=2,null!=t&&(i.callback=t),null!==(t=eO(e,i,n))&&(i_(t,e,n),eF(t,e,n))}},o5=Error(i(461)),o6=!1,o8={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null},o9=!1,o7=!1,le=!1,lt="function"==typeof WeakSet?WeakSet:Set,ln=null,li=null,lr=!1,la=null,ls=8192,lo={getCacheForType:function(e){var t=Q(oh),n=t.data.get(e);return void 0===n&&(n=e(),t.data.set(e,n)),n},cacheSignal:function(){return Q(oh).controller.signal}},ll=0,lu=1,lc=2,lh=3,ld=4;if("function"==typeof Symbol&&Symbol.for){var lp=Symbol.for;ll=lp("selector.component"),lu=lp("selector.has_pseudo_class"),lc=lp("selector.role"),lh=lp("selector.test_id"),ld=lp("selector.text")}var lf="function"==typeof WeakMap?WeakMap:Map,lm=0,lg=null,lv=null,l_=0,ly=0,lx=null,lb=!1,lS=!1,lM=!1,lT=0,lw=0,lE=0,lA=0,lC=0,lR=0,lP=0,lI=null,lL=null,lN=!1,lU=0,lD=0,lO=1/0,lF=null,lz=null,lB=0,lk=null,lH=null,lV=0,lG=0,lW=null,lj=null,lX=0,lq=null;return rt.attemptContinuousHydration=function(e){if(13===e.tag||31===e.tag){var t=eP(e,0x4000000);null!==t&&i_(t,e,0x4000000),re(e,0x4000000)}},rt.attemptHydrationAtCurrentPriority=function(e){if(13===e.tag||31===e.tag){var t=ig(),n=eP(e,t=b(t));null!==n&&i_(n,e,t),re(e,t)}},rt.attemptSynchronousHydration=function(e){switch(e.tag){case 3:if((e=e.stateNode).current.memoizedState.isDehydrated){var t=d(e.pendingLanes);if(0!==t){for(e.pendingLanes|=2,e.entangledLanes|=2;t;){var n=1<<31-sE(t);e.entanglements[1]|=n,t&=~n}ea(e),(6&lm)==0&&(lO=sO()+500,es(0,!1))}}break;case 31:case 13:null!==(t=eP(e,2))&&i_(t,e,2),iS(),re(e,2)}},rt.batchedUpdates=function(e,t){return e(t)},rt.createComponentSelector=function(e){return{$$typeof:ll,value:e}},rt.createContainer=function(e,t,n,i,r,a,s,o,l,u){return i6(e,t,!1,null,n,i,a,null,s,o,l,u)},rt.createHasPseudoClassSelector=function(e){return{$$typeof:lu,value:e}},rt.createHydrationContainer=function(e,t,n,i,r,a,s,o,l,u,c,h,d,p){var f;return(e=i6(n,i,!0,e,r,a,o,p,l,u,c,h)).context=sw,n=e.current,(r=eD(i=b(i=ig()))).callback=null!=(f=t)?f:null,eO(n,r,i),t=i,e.current.lanes=t,v(e,t),ea(e),e},rt.createPortal=function(e,t,n){var i=3=c&&s>=d&&a<=h&&o<=p){e.splice(t,1);break}if(r!==c||n.width!==u.width||po){if(!(s!==d||n.height!==u.height||ha)){c>r&&(u.width+=c-r,u.x=r),hs&&(u.height+=d-s,u.y=s),pn&&(n=l)),l ")+` - -No matching component was found for: - `+e.join(" > ")}return null},rt.getPublicRootInstance=function(e){if(!(e=e.current).child)return null;switch(e.child.tag){case 27:case 5:return rA(e.child.stateNode);default:return e.child.stateNode}},rt.injectIntoDevTools=function(){var e={bundleType:0,version:rT,rendererPackageName:rw,currentDispatcherRef:rM,reconcilerVersion:"19.2.0"};if(null!==rE&&(e.rendererConfig=rE),typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u")e=!1;else{var t=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(t.isDisabled||!t.supportsFiber)e=!0;else{try{sG=t.inject(e),sW=t}catch{}e=!!t.checkDCE}}return e},rt.isAlreadyRendering=function(){return(6&lm)!=0},rt.observeVisibleRects=function(e,t,n,r){if(!r7)throw Error(i(363));var a=as(e=im(e,t),n,r).disconnect;return{disconnect:function(){a()}}},rt.shouldError=function(){return null},rt.shouldSuspend=function(){return!1},rt.startHostTransition=function(e,t,r,a){if(5!==e.tag)throw Error(i(476));var s=tW(e).queue;tG(e,s,t,r4,null===r?n:function(){var t=tW(e);return null===t.next&&(t=e.alternate.memoizedState),tK(e,t.next.queue,{},ig()),r(a)})},rt.updateContainer=function(e,t,n,i){var r=t.current,a=ig();return i9(r,a,e,t,n,i),a},rt.updateContainerSync=function(e,t,n,i){return i9(t.current,2,e,t,n,i),2},rt},cG.exports.default=cG.exports,Object.defineProperty(cG.exports,"__esModule",{value:!0})),cV.exports=cG.exports),(b=cV.exports)&&b.__esModule&&Object.prototype.hasOwnProperty.call(b,"default"))?b.default:b,cj={},cX=/^three(?=[A-Z])/,cq=e=>`${e[0].toUpperCase()}${e.slice(1)}`,cY=0;function cZ(e){if("function"==typeof e){let t=`${cY++}`;return cj[t]=e,t}Object.assign(cj,e)}function cJ(e,t){let n=cq(e),i=cj[n];if("primitive"!==e&&!i)throw Error(`R3F: ${n} is not part of the THREE namespace! Did you forget to extend? See: https://docs.pmnd.rs/react-three-fiber/api/objects#using-3rd-party-objects-declaratively`);if("primitive"===e&&!t.object)throw Error("R3F: Primitives without 'object' are invalid!");if(void 0!==t.args&&!Array.isArray(t.args))throw Error("R3F: The args prop must be an array!")}function cK(e){if(e.isHidden){var t;e.props.attach&&null!=(t=e.parent)&&t.object?cS(e.parent,e):cI(e.object)&&!1!==e.props.visible&&(e.object.visible=!0),e.isHidden=!1,cR(e)}}function c$(e,t,n){let i=t.root.getState();if(e.parent||e.object===i.scene){if(!t.object){var r,a;let e=cj[cq(t.type)];t.object=null!=(r=t.props.object)?r:new e(...null!=(a=t.props.args)?a:[]),t.object.__r3f=t}if(cC(t.object,t.props),t.props.attach)cS(e,t);else if(cI(t.object)&&cI(e.object)){let i=e.object.children.indexOf(null==n?void 0:n.object);if(n&&-1!==i){let n=e.object.children.indexOf(t.object);-1!==n?(e.object.children.splice(n,1),e.object.children.splice(n{try{e.dispose()}catch{}};"u">typeof IS_REACT_ACT_ENVIRONMENT?t():(0,u8.unstable_scheduleCallback)(u8.unstable_IdlePriority,t)}}function c2(e,t,n){if(!t)return;t.parent=null;let i=e.children.indexOf(t);-1!==i&&e.children.splice(i,1),t.props.attach?cM(e,t):cI(t.object)&&cI(e.object)&&(e.object.remove(t.object),function(e,t){let{internal:n}=e.getState();n.interaction=n.interaction.filter(e=>e!==t),n.initialHits=n.initialHits.filter(e=>e!==t),n.hovered.forEach((e,i)=>{(e.eventObject===t||e.object===t)&&n.hovered.delete(i)}),n.capturedMap.forEach((e,i)=>{cN(n.capturedMap,t,e,i)})}(co(t),t.object));let r=null!==t.props.dispose&&!1!==n;for(let e=t.children.length-1;e>=0;e--){let n=t.children[e];c2(t,n,r)}t.children.length=0,delete t.object.__r3f,r&&"primitive"!==t.type&&"Scene"!==t.object.type&&c1(t.object),void 0===n&&cR(t)}let c3=[],c4=()=>{},c5={},c6=0,c8=(S={isPrimaryRenderer:!1,warnsIfNotActing:!1,supportsMutation:!0,supportsPersistence:!1,supportsHydration:!1,createInstance:function(e,t,n){var i;return cJ(e=cq(e)in cj?e:e.replace(cX,""),t),"primitive"===e&&null!=(i=t.object)&&i.__r3f&&delete t.object.__r3f,cy(t.object,n,e,t)},removeChild:c2,appendChild:cQ,appendInitialChild:cQ,insertBefore:c0,appendChildToContainer(e,t){let n=e.getState().scene.__r3f;t&&n&&cQ(n,t)},removeChildFromContainer(e,t){let n=e.getState().scene.__r3f;t&&n&&c2(n,t)},insertInContainerBefore(e,t,n){let i=e.getState().scene.__r3f;t&&n&&i&&c0(i,t,n)},getRootHostContext:()=>c5,getChildHostContext:()=>c5,commitUpdate(e,t,n,i,r){var a,s,o;cJ(t,i);let l=!1;if("primitive"===e.type&&n.object!==i.object||(null==(a=i.args)?void 0:a.length)!==(null==(s=n.args)?void 0:s.length)?l=!0:null!=(o=i.args)&&o.some((e,t)=>{var i;return e!==(null==(i=n.args)?void 0:i[t])})&&(l=!0),l)c3.push([e,{...i},r]);else{let t=function(e,t){let n={};for(let i in t)if(!cT.includes(i)&&!cv.equ(t[i],e.props[i]))for(let e in n[i]=t[i],t)e.startsWith(`${i}-`)&&(n[e]=t[e]);for(let i in e.props){if(cT.includes(i)||t.hasOwnProperty(i))continue;let{root:r,key:a}=cx(e.object,i);if(r.constructor&&0===r.constructor.length){let e=function(e){let t=cw.get(e.constructor);try{t||(t=new e.constructor,cw.set(e.constructor,t))}catch(e){}return t}(r);cv.und(e)||(n[a]=e[a])}else n[a]=0}return n}(e,i);Object.keys(t).length&&(Object.assign(e.props,t),cC(e.object,t))}(null===r.sibling||(4&r.flags)==0)&&function(){for(let[e]of c3){let t=e.parent;if(t)for(let n of(e.props.attach?cM(t,e):cI(e.object)&&cI(t.object)&&t.object.remove(e.object),e.children))n.props.attach?cM(e,n):cI(n.object)&&cI(e.object)&&e.object.remove(n.object);e.isHidden&&cK(e),e.object.__r3f&&delete e.object.__r3f,"primitive"!==e.type&&c1(e.object)}for(let[i,r,a]of c3){i.props=r;let s=i.parent;if(s){let r=cj[cq(i.type)],o=i.object;i.object=null!=(e=i.props.object)?e:new r(...null!=(t=i.props.args)?t:[]),i.object.__r3f=i;var e,t,n=i.object;for(let e of[a,a.alternate])if(null!==e)if("function"==typeof e.ref){null==e.refCleanup||e.refCleanup();let t=e.ref(n);"function"==typeof t&&(e.refCleanup=t)}else e.ref&&(e.ref.current=n);for(let e of(!function(e,t,n){let{internal:i}=e.getState();for(let e=0;e{if(e.eventObject===t||e.object===t){i.hovered.delete(r);let a={...e,eventObject:e.eventObject===t?n:e.eventObject,object:e.object===t?n:e.object};i.hovered.set(cL(a),a)}}),i.capturedMap.forEach(e=>{let i=e.get(t);i&&(e.delete(t),e.set(n,i))})}(co(i),o,i.object),cC(i.object,i.props),i.props.attach?cS(s,i):cI(i.object)&&cI(s.object)&&s.object.add(i.object),i.children))e.props.attach?cS(i,e):cI(e.object)&&cI(i.object)&&i.object.add(e.object);cR(i)}}c3.length=0}()},finalizeInitialChildren:()=>!1,commitMount(){},getPublicInstance:e=>null==e?void 0:e.object,prepareForCommit:()=>null,preparePortalMount:e=>cy(e.getState().scene,e,"",{}),resetAfterCommit:()=>{},shouldSetTextContent:()=>!1,clearContainer:()=>!1,hideInstance:function(e){if(!e.isHidden){var t;e.props.attach&&null!=(t=e.parent)&&t.object?cM(e.parent,e):cI(e.object)&&(e.object.visible=!1),e.isHidden=!0,cR(e)}},unhideInstance:cK,createTextInstance:c4,hideTextInstance:c4,unhideTextInstance:c4,scheduleTimeout:"function"==typeof setTimeout?setTimeout:void 0,cancelTimeout:"function"==typeof clearTimeout?clearTimeout:void 0,noTimeout:-1,getInstanceFromNode:()=>null,beforeActiveInstanceBlur(){},afterActiveInstanceBlur(){},detachDeletedInstance(){},prepareScopeUpdate(){},getInstanceFromScope:()=>null,shouldAttemptEagerTransition:()=>!1,trackSchedulerEvent:()=>{},resolveEventType:()=>null,resolveEventTimeStamp:()=>-1.1,requestPostPaintCallback(){},maySuspendCommit:()=>!1,preloadInstance:()=>!0,suspendInstance(){},waitForCommitToBeReady:()=>null,NotPendingTransition:null,HostTransitionContext:E.createContext(null),setCurrentUpdatePriority(e){c6=e},getCurrentUpdatePriority:()=>c6,resolveUpdatePriority(){var e;if(0!==c6)return c6;switch("u">typeof window&&(null==(e=window.event)?void 0:e.type)){case"click":case"contextmenu":case"dblclick":case"pointercancel":case"pointerdown":case"pointerup":return 2;case"pointermove":case"pointerout":case"pointerover":case"pointerenter":case"pointerleave":case"wheel":return 8;default:return 32}},resetFormInstance(){},rendererPackageName:"@react-three/fiber",rendererVersion:"9.6.1",applyViewTransitionName(e,t,n){},restoreViewTransitionName(e,t){},cancelViewTransitionName(e,t,n){},cancelRootViewTransitionName(e){},restoreRootViewTransitionName(e){},InstanceMeasurement:null,measureInstance:e=>null,wasInstanceInViewport:e=>!0,hasInstanceChanged:(e,t)=>!1,hasInstanceAffectedParent:(e,t)=>!1,suspendOnActiveViewTransition(e,t){},startGestureTransition:()=>null,startViewTransition:()=>null,stopViewTransition(e){},createViewTransitionInstance:e=>null,getCurrentGestureOffset(e){throw Error("startGestureTransition is not yet supported in react-three-fiber.")},cloneMutableInstance:(e,t)=>e,cloneMutableTextInstance:e=>e,cloneRootViewTransitionContainer(e){throw Error("Not implemented.")},removeRootViewTransitionClone(e,t){throw Error("Not implemented.")},createFragmentInstance:e=>null,updateFragmentInstanceFiber(e,t){},commitNewChildToFragmentInstance(e,t){},deleteChildFromFragmentInstance(e,t){},measureClonedInstance:e=>null,maySuspendCommitOnUpdate:(e,t,n)=>!1,maySuspendCommitInSyncRender:(e,t)=>!1,startSuspendingCommit:()=>null,getSuspendedCommitReason:(e,t)=>null},(_=cW(S)).injectIntoDevTools(),_),c9=new Map,c7={objects:"shallow",strict:!1};function he(e){var t,n;let i,r,a,s,o,l,u,c=c9.get(e),h=null==c?void 0:c.fiber,d=null==c?void 0:c.store;c&&console.warn("R3F.createRoot should only be called once!");let p="function"==typeof reportError?reportError:console.error,f=d||(t=hp,n=hf,o=(s=(a=u3((e,i)=>{let r,a=new eE,s=new eE,o=new eE;function l(e=i().camera,t=s,n=i().size){let{width:r,height:u,top:c,left:h}=n,d=r/u;t.isVector3?o.copy(t):o.set(...t);let p=e.getWorldPosition(a).distanceTo(o);if(e&&e.isOrthographicCamera)return{width:r/e.zoom,height:u/e.zoom,top:c,left:h,factor:1,distance:p,aspect:d};{let t=2*Math.tan(e.fov*Math.PI/180/2)*p,n=r/u*t;return{width:n,height:t,top:c,left:h,factor:r/n,distance:p,aspect:d}}}let u=t=>e(e=>({performance:{...e.performance,current:t}})),c=new Y;return{set:e,get:i,gl:null,camera:null,raycaster:null,events:{priority:1,enabled:!0,connected:!1},scene:null,xr:null,invalidate:(e=1)=>t(i(),e),advance:(e,t)=>n(e,t,i()),legacy:!1,linear:!1,flat:!1,controls:null,clock:new sw,pointer:c,mouse:c,frameloop:"always",onPointerMissed:void 0,performance:{current:1,min:.5,max:1,debounce:200,regress:()=>{let e=i();r&&clearTimeout(r),e.performance.current!==e.performance.min&&u(e.performance.min),r=setTimeout(()=>u(i().performance.max),e.performance.debounce)}},size:{width:0,height:0,top:0,left:0},viewport:{initialDpr:0,dpr:0,width:0,height:0,top:0,left:0,aspect:0,distance:0,factor:0,getCurrentViewport:l},setEvents:t=>e(e=>({...e,events:{...e.events,...t}})),setSize:(t,n,r=0,a=0)=>{let o=i().camera,u={width:t,height:n,top:r,left:a};e(e=>({size:u,viewport:{...e.viewport,...l(o,s,u)}}))},setDpr:t=>e(e=>{let n=cm(t);return{viewport:{...e.viewport,dpr:n,initialDpr:e.viewport.initialDpr||n}}}),setFrameloop:(t="always")=>{let n=i().clock;n.stop(),n.elapsedTime=0,"never"!==t&&(n.start(),n.elapsedTime=0),e(()=>({frameloop:t}))},previousRoot:void 0,internal:{interaction:[],hovered:new Map,subscribers:[],initialClick:[0,0],initialHits:[],capturedMap:new Map,lastEvent:E.createRef(),active:!1,frames:0,priority:0,subscribe:(e,t,n)=>{let r=i().internal;return r.priority=r.priority+ +(t>0),r.subscribers.push({ref:e,priority:t,store:n}),r.subscribers=r.subscribers.sort((e,t)=>e.priority-t.priority),()=>{let n=i().internal;null!=n&&n.subscribers&&(n.priority=n.priority-(t>0),n.subscribers=n.subscribers.filter(t=>t.ref!==e))}}}}})).getState()).size,l=s.viewport.dpr,u=s.camera,a.subscribe(()=>{let{camera:e,size:t,viewport:n,gl:i,set:r}=a.getState();if(t.width!==o.width||t.height!==o.height||n.dpr!==l){o=t,l=n.dpr,cP(e,t),n.dpr>0&&i.setPixelRatio(n.dpr);let r="u">typeof HTMLCanvasElement&&i.domElement instanceof HTMLCanvasElement;i.setSize(t.width,t.height,r)}e!==u&&(u=e,r(t=>({viewport:{...t.viewport,...t.viewport.getCurrentViewport(e)}})))}),a.subscribe(e=>t(e)),a),m=h||c8.createContainer(f,1,null,!1,null,"",p,p,p,null);c||c9.set(e,{fiber:m,store:f});let g=!1,v=null;return{async configure(t={}){var n,a;let s;v=new Promise(e=>s=e);let{gl:o,size:l,scene:u,events:c,onCreated:h,shadows:d=!1,linear:p=!1,flat:m=!1,legacy:_=!1,orthographic:y=!1,frameloop:x="always",dpr:b=[1,2],performance:S,raycaster:M,camera:T,onPointerMissed:w}=t,E=f.getState(),A=E.gl;if(!E.gl){let t={canvas:e,powerPreference:"high-performance",antialias:!0,alpha:!0},n="function"==typeof o?await o(t):o;A=cU(n)?n:new uK({...t,...o}),E.set({gl:A})}let C=E.raycaster;C||E.set({raycaster:C=new s3});let{params:R,...P}=M||{};if(cv.equ(P,C,c7)||cC(C,{...P}),cv.equ(R,C.params,c7)||cC(C,{params:{...C.params,...R}}),!E.camera||E.camera===r&&!cv.equ(r,T,c7)){r=T;let e=null==T?void 0:T.isCamera,t=e?T:y?new sn(0,0,0,0,.1,1e3):new nE(75,0,.1,1e3);!e&&(t.position.z=5,T&&(cC(t,T),!t.manual&&("aspect"in T||"left"in T||"right"in T||"bottom"in T||"top"in T)&&(t.manual=!0,t.updateProjectionMatrix())),E.camera||null!=T&&T.rotation||t.lookAt(0,0,0)),E.set({camera:t}),C.camera=t}if(!E.scene){let e;null!=u&&u.isScene?cy(e=u,f,"",{}):(cy(e=new nL,f,"",{}),u&&cC(e,u)),E.set({scene:e})}c&&!E.events.handlers&&E.set({events:c(f)});let N=function(e,t){if(!t&&"u">typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement&&e.parentElement){let{width:t,height:n,top:i,left:r}=e.parentElement.getBoundingClientRect();return{width:t,height:n,top:i,left:r}}return!t&&"u">typeof OffscreenCanvas&&e instanceof OffscreenCanvas?{width:e.width,height:e.height,top:0,left:0}:{width:0,height:0,top:0,left:0,...t}}(e,l);if(cv.equ(N,E.size,c7)||E.setSize(N.width,N.height,N.top,N.left),b&&E.viewport.dpr!==cm(b)&&E.setDpr(b),E.frameloop!==x&&E.setFrameloop(x),E.onPointerMissed||E.set({onPointerMissed:w}),S&&!cv.equ(S,E.performance,c7)&&E.set(e=>({performance:{...e.performance,...S}})),!E.xr){let e=(e,t)=>{let n=f.getState();"never"!==n.frameloop&&hf(e,!0,n,t)},t=()=>{let t=f.getState();t.gl.xr.enabled=t.gl.xr.isPresenting,t.gl.xr.setAnimationLoop(t.gl.xr.isPresenting?e:null),t.gl.xr.isPresenting||hp(t)},i={connect(){let e=f.getState().gl;e.xr.addEventListener("sessionstart",t),e.xr.addEventListener("sessionend",t)},disconnect(){let e=f.getState().gl;e.xr.removeEventListener("sessionstart",t),e.xr.removeEventListener("sessionend",t)}};"function"==typeof(null==(n=A.xr)?void 0:n.addEventListener)&&i.connect(),E.set({xr:i})}if(A.shadowMap){let e=A.shadowMap.enabled,t=A.shadowMap.type;A.shadowMap.enabled=!!d,cv.boo(d)?A.shadowMap.type=2:cv.str(d)?A.shadowMap.type=null!=(a=({basic:0,percentage:1,soft:2,variance:3})[d])?a:2:cv.obj(d)&&Object.assign(A.shadowMap,d),(e!==A.shadowMap.enabled||t!==A.shadowMap.type)&&(A.shadowMap.needsUpdate=!0)}return eu.enabled=!_,g||(A.outputColorSpace=p?L:I,A.toneMapping=4*!m),E.legacy!==_&&E.set(()=>({legacy:_})),E.linear!==p&&E.set(()=>({linear:p})),E.flat!==m&&E.set(()=>({flat:m})),!o||cv.fun(o)||cU(o)||cv.equ(o,A,c7)||cC(A,o),i=h,g=!0,s(),this},render(t){return g||v||this.configure(),v.then(()=>{c8.updateContainer((0,u9.jsx)(ht,{store:f,children:t,onCreated:i,rootElement:e}),m,null,()=>void 0)}),f},unmount(){hn(e)}}}function ht({store:e,children:t,onCreated:n,rootElement:i}){return cc(()=>{let t=e.getState();t.set(e=>({internal:{...e.internal,active:!0}})),n&&n(t),e.getState().events.connected||null==t.events.connect||t.events.connect(i)},[]),(0,u9.jsx)(cD.Provider,{value:e,children:t})}function hn(e,t){let n=c9.get(e),i=null==n?void 0:n.fiber;if(i){let r=null==n?void 0:n.store.getState();r&&(r.internal.active=!1),c8.updateContainer(null,i,null,()=>{r&&setTimeout(()=>{try{null==r.events.disconnect||r.events.disconnect(),null==(n=r.gl)||null==(i=n.renderLists)||null==i.dispose||i.dispose(),null==(a=r.gl)||null==a.forceContextLoss||a.forceContextLoss(),null!=(s=r.gl)&&s.xr&&r.xr.disconnect();var n,i,a,s,o=r.scene;for(let e in"Scene"!==o.type&&(null==o.dispose||o.dispose()),o){let t=o[e];(null==t?void 0:t.type)!=="Scene"&&(null==t||null==t.dispose||t.dispose())}c9.delete(e),t&&t(e)}catch(e){}},500)})}}function hi({state:e={},children:t,container:n}){let{events:i,size:r,...a}=e,s=cO(),[o]=E.useState(()=>new s3),[l]=E.useState(()=>new Y),u=ch((e,t)=>{let a;if(t.camera&&r){let n=t.camera;a=e.viewport.getCurrentViewport(n,new eE,r),n!==e.camera&&cP(n,r)}return{...e,...t,scene:n,raycaster:o,pointer:l,mouse:l,previousRoot:s,events:{...e.events,...t.events,...i},size:{...e.size,...r},viewport:{...e.viewport,...a},setEvents:e=>t.set(t=>({...t,events:{...t.events,...e}}))}}),c=E.useMemo(()=>{let e=u3((e,t)=>({...a,set:e,get:t})),t=t=>e.setState(e=>u.current(t,e));return t(s.getState()),s.subscribe(t),e},[s,n]);return(0,u9.jsx)(u9.Fragment,{children:c8.createPortal((0,u9.jsx)(cD.Provider,{value:c,children:t}),c,null)})}let hr=new Set,ha=new Set,hs=new Set;function ho(e,t){if(e.size)for(let{callback:n}of e.values())n(t)}function hl(e,t){switch(e){case"before":return ho(hr,t);case"after":return ho(ha,t);case"tail":return ho(hs,t)}}function hu(e,t,n){let i=t.clock.getDelta();"never"===t.frameloop&&"number"==typeof e&&(i=e-t.clock.elapsedTime,t.clock.oldTime=t.clock.elapsedTime,t.clock.elapsedTime=e),s=t.internal.subscribers;for(let e=0;e0)&&!(null!=(t=c.gl.xr)&&t.isPresenting)&&(l+=hu(e,c))}if(hh=!1,hl("after",e),0===l)return hl("tail",e),hc=!1,cancelAnimationFrame(u)}function hp(e,t=1){var n;if(!e)return c9.forEach(e=>hp(e.store.getState(),t));(null==(n=e.gl.xr)||!n.isPresenting)&&e.internal.active&&"never"!==e.frameloop&&(t>1?e.internal.frames=Math.min(60,e.internal.frames+t):hh?e.internal.frames=2:e.internal.frames=1,hc||(hc=!0,requestAnimationFrame(hd)))}function hf(e,t=!0,n,i){if(t&&hl("before",e),n)hu(e,n,i);else for(let t of c9.values())hu(e,t.store.getState());t&&hl("after",e)}let hm={onClick:["click",!1],onContextMenu:["contextmenu",!1],onDoubleClick:["dblclick",!1],onWheel:["wheel",!0],onPointerDown:["pointerdown",!0],onPointerUp:["pointerup",!0],onPointerLeave:["pointerleave",!0],onPointerMove:["pointermove",!0],onPointerCancel:["pointercancel",!0],onLostPointerCapture:["lostpointercapture",!0]};function hg(e){let{handlePointer:t}=function(e){function t(e){return e.filter(e=>["Move","Over","Enter","Out","Leave"].some(t=>{var n;return null==(n=e.__r3f)?void 0:n.handlers["onPointer"+t]}))}function n(t){let{internal:n}=e.getState();for(let e of n.hovered.values())if(!t.length||!t.find(t=>t.object===e.object&&t.index===e.index&&t.instanceId===e.instanceId)){let i=e.eventObject.__r3f;if(n.hovered.delete(cL(e)),null!=i&&i.eventCount){let n=i.handlers,r={...e,intersections:t};null==n.onPointerOut||n.onPointerOut(r),null==n.onPointerLeave||n.onPointerLeave(r)}}}function i(e,t){for(let n=0;nn([]);case"onLostPointerCapture":return t=>{let{internal:i}=e.getState();"pointerId"in t&&i.capturedMap.has(t.pointerId)&&requestAnimationFrame(()=>{i.capturedMap.has(t.pointerId)&&(i.capturedMap.delete(t.pointerId),n([]))})}}return function(a){let{onPointerMissed:s,internal:o}=e.getState();o.lastEvent.current=a;let l="onPointerMove"===r,u="onClick"===r||"onContextMenu"===r||"onDoubleClick"===r,c=function(t,n){let i=e.getState(),r=new Set,a=[],s=n?n(i.internal.interaction):i.internal.interaction;for(let e=0;e{let n=cg(e.object),i=cg(t.object);return n&&i&&i.events.priority-n.events.priority||e.distance-t.distance}).filter(e=>{let t=cL(e);return!r.has(t)&&(r.add(t),!0)});for(let e of(i.events.filter&&(o=i.events.filter(o,i)),o)){let t=e.object;for(;t;){var l;null!=(l=t.__r3f)&&l.eventCount&&a.push({...e,eventObject:t}),t=t.parent}}if("pointerId"in t&&i.internal.capturedMap.has(t.pointerId))for(let e of i.internal.capturedMap.get(t.pointerId).values())r.has(cL(e.intersection))||a.push(e.intersection);return a}(a,l?t:void 0),h=u?function(t){let{internal:n}=e.getState(),i=t.offsetX-n.initialClick[0],r=t.offsetY-n.initialClick[1];return Math.round(Math.sqrt(i*i+r*r))}(a):0;"onPointerDown"===r&&(o.initialClick=[a.offsetX,a.offsetY],o.initialHits=c.map(e=>e.eventObject)),u&&!c.length&&h<=2&&(i(a,o.interaction),s&&s(a)),l&&n(c),!function(e,t,i,r){if(e.length){let a={stopped:!1};for(let s of e){let o=cg(s.object);if(o||s.object.traverseAncestors(e=>{let t=cg(e);if(t)return o=t,!1}),o){let{raycaster:l,pointer:u,camera:c,internal:h}=o,d=new eE(u.x,u.y,0).unproject(c),p=e=>{var t,n;return null!=(t=null==(n=h.capturedMap.get(e))?void 0:n.has(s.eventObject))&&t},f=e=>{let n={intersection:s,target:t.target};h.capturedMap.has(e)?h.capturedMap.get(e).set(s.eventObject,n):h.capturedMap.set(e,new Map([[s.eventObject,n]])),t.target.setPointerCapture(e)},m=e=>{let t=h.capturedMap.get(e);t&&cN(h.capturedMap,s.eventObject,t,e)},g={};for(let e in t){let n=t[e];"function"!=typeof n&&(g[e]=n)}let v={...s,...g,pointer:u,intersections:e,stopped:a.stopped,delta:i,unprojectedPoint:d,ray:l.ray,camera:c,stopPropagation(){let i="pointerId"in t&&h.capturedMap.get(t.pointerId);(!i||i.has(s.eventObject))&&(v.stopped=a.stopped=!0,h.hovered.size&&Array.from(h.hovered.values()).find(e=>e.eventObject===s.eventObject)&&n([...e.slice(0,e.indexOf(s)),s]))},target:{hasPointerCapture:p,setPointerCapture:f,releasePointerCapture:m},currentTarget:{hasPointerCapture:p,setPointerCapture:f,releasePointerCapture:m},nativeEvent:t};if(r(v),!0===a.stopped)break}}}}(c,a,h,function(e){let t=e.eventObject,n=t.__r3f;if(!(null!=n&&n.eventCount))return;let s=n.handlers;if(l){if(s.onPointerOver||s.onPointerEnter||s.onPointerOut||s.onPointerLeave){let t=cL(e),n=o.hovered.get(t);n?n.stopped&&e.stopPropagation():(o.hovered.set(t,e),null==s.onPointerOver||s.onPointerOver(e),null==s.onPointerEnter||s.onPointerEnter(e))}null==s.onPointerMove||s.onPointerMove(e)}else{let n=s[r];n?(!u||o.initialHits.includes(t))&&(i(a,o.interaction.filter(e=>!o.initialHits.includes(e))),n(e)):u&&o.initialHits.includes(t)&&i(a,o.interaction.filter(e=>!o.initialHits.includes(e)))}})}}}}(e);return{priority:1,enabled:!0,compute(e,t,n){t.pointer.set(e.offsetX/t.size.width*2-1,-(2*(e.offsetY/t.size.height))+1),t.raycaster.setFromCamera(t.pointer,t.camera)},connected:void 0,handlers:Object.keys(hm).reduce((e,n)=>({...e,[n]:t(n)}),{}),update:()=>{var t;let{events:n,internal:i}=e.getState();null!=(t=i.lastEvent)&&t.current&&n.handlers&&n.handlers.onPointerMove(i.lastEvent.current)},connect:t=>{let{set:n,events:i}=e.getState();if(null==i.disconnect||i.disconnect(),n(e=>({events:{...e.events,connected:t}})),i.handlers)for(let e in i.handlers){let n=i.handlers[e],[r,a]=hm[e];t.addEventListener(r,n,{passive:a})}},disconnect:()=>{let{set:t,events:n}=e.getState();if(n.connected){if(n.handlers)for(let e in n.handlers){let t=n.handlers[e],[i]=hm[e];n.connected.removeEventListener(i,t)}t(e=>({events:{...e.events,connected:void 0}}))}}}}e.s(["A",0,cO,"B",0,cp,"C",0,cF,"D",0,cz,"E",0,cf,"G",0,cH,"a",0,ch,"b",0,cc,"c",0,he,"d",0,hn,"e",0,cZ,"f",0,hg,"i",0,cl,"o",0,function(e,t,n){return(0,u9.jsx)(hi,{children:e,container:t,state:n})},"s",0,cC,"u",0,cd],1950),e.i(8560),e.s(["ACESFilmicToneMapping",0,4,"AddEquation",0,100,"AddOperation",0,2,"AdditiveAnimationBlendMode",0,2501,"AdditiveBlending",0,2,"AgXToneMapping",0,6,"AlphaFormat",0,1021,"AlwaysCompare",0,519,"AlwaysDepth",0,1,"AlwaysStencilFunc",0,519,"AmbientLight",0,sa,"AnimationAction",0,sY,"AnimationClip",0,aB,"AnimationLoader",0,aq,"AnimationMixer",0,sJ,"AnimationObjectGroup",0,sq,"AnimationUtils",0,aE,"ArcCurve",0,rs,"ArrayCamera",0,sT,"ArrowHelper",0,oP,"AttachedBindMode",0,R,"Audio",0,sL,"AudioAnalyser",0,sz,"AudioContext",0,s_,"AudioListener",0,sI,"AudioLoader",0,sy,"AxesHelper",0,oI,"BackSide",0,1,"BasicDepthPacking",0,3200,"BasicShadowMap",0,0,"BatchedMesh",0,iz,"Bone",0,ie,"BooleanKeyframeTrack",0,aL,"Box2",0,oe,"Box3",0,eR,"Box3Helper",0,oA,"BoxGeometry",0,ng,"BoxHelper",0,oE,"BufferAttribute",0,tZ,"BufferGeometry",0,nn,"BufferGeometryLoader",0,sd,"ByteType",0,1010,"Cache",0,ak,"Camera",0,nS,"CameraHelper",0,oM,"CanvasTexture",0,rn,"CapsuleGeometry",0,rA,"CatmullRomCurve3",0,rd,"CineonToneMapping",0,3,"CircleGeometry",0,rC,"ClampToEdgeWrapping",0,1001,"Clock",0,sw,"Color",0,tz,"ColorKeyframeTrack",0,aN,"ColorManagement",0,eu,"CompressedArrayTexture",0,re,"CompressedCubeTexture",0,rt,"CompressedTexture",0,i7,"CompressedTextureLoader",0,aY,"ConeGeometry",0,rP,"ConstantAlphaFactor",0,213,"ConstantColorFactor",0,211,"Controls",0,oN,"CubeCamera",0,nA,"CubeReflectionMapping",0,301,"CubeRefractionMapping",0,302,"CubeTexture",0,nC,"CubeTextureLoader",0,aJ,"CubeUVReflectionMapping",0,306,"CubicBezierCurve",0,rg,"CubicBezierCurve3",0,rv,"CubicInterpolant",0,aC,"CullFaceBack",0,1,"CullFaceFront",0,2,"CullFaceFrontBack",0,3,"CullFaceNone",0,0,"Curve",0,rr,"CurvePath",0,rT,"CustomBlending",0,5,"CustomToneMapping",0,5,"CylinderGeometry",0,rR,"Cylindrical",0,s8,"Data3DTexture",0,eM,"DataArrayTexture",0,eb,"DataTexture",0,it,"DataTextureLoader",0,aK,"DataUtils",0,tX,"DecrementStencilOp",0,7683,"DecrementWrapStencilOp",0,34056,"DefaultLoadingManager",0,aV,"DepthFormat",0,1026,"DepthStencilFormat",0,1027,"DepthTexture",0,ri,"DetachedBindMode",0,P,"DirectionalLight",0,sr,"DirectionalLightHelper",0,ox,"DiscreteInterpolant",0,aP,"DodecahedronGeometry",0,rL,"DoubleSide",0,2,"DstAlphaFactor",0,206,"DstColorFactor",0,208,"DynamicCopyUsage",0,35050,"DynamicDrawUsage",0,35048,"DynamicReadUsage",0,35049,"EdgesGeometry",0,rF,"EllipseCurve",0,ra,"EqualCompare",0,514,"EqualDepth",0,4,"EqualStencilFunc",0,514,"EquirectangularReflectionMapping",0,303,"EquirectangularRefractionMapping",0,304,"Euler",0,tn,"EventDispatcher",0,O,"ExtrudeGeometry",0,r4,"FileLoader",0,aX,"Float16BufferAttribute",0,t3,"Float32BufferAttribute",0,t4,"FloatType",0,1015,"Fog",0,nI,"FogExp2",0,nP,"FramebufferTexture",0,i9,"FrontSide",0,0,"Frustum",0,iS,"GLBufferAttribute",0,s1,"GLSL1",0,"100","GLSL3",0,D,"GreaterCompare",0,516,"GreaterDepth",0,6,"GreaterEqualCompare",0,518,"GreaterEqualDepth",0,5,"GreaterEqualStencilFunc",0,518,"GreaterStencilFunc",0,516,"GridHelper",0,om,"Group",0,i6,"HalfFloatType",0,1016,"HemisphereLight",0,a0,"HemisphereLightHelper",0,of,"IcosahedronGeometry",0,r6,"ImageBitmapLoader",0,sv,"ImageLoader",0,aZ,"ImageUtils",0,ed,"IncrementStencilOp",0,7682,"IncrementWrapStencilOp",0,34055,"InstancedBufferAttribute",0,is,"InstancedBufferGeometry",0,sh,"InstancedInterleavedBuffer",0,s0,"InstancedMesh",0,im,"Int16BufferAttribute",0,tQ,"Int32BufferAttribute",0,t1,"Int8BufferAttribute",0,tJ,"IntType",0,1013,"InterleavedBuffer",0,nN,"InterleavedBufferAttribute",0,nD,"Interpolant",0,aA,"InterpolateDiscrete",0,2300,"InterpolateLinear",0,2301,"InterpolateSmooth",0,2302,"InvertStencilOp",0,5386,"KeepStencilOp",0,7680,"KeyframeTrack",0,aI,"LOD",0,nQ,"LatheGeometry",0,rE,"Layers",0,ti,"LessCompare",0,513,"LessDepth",0,2,"LessEqualCompare",0,515,"LessEqualDepth",0,3,"LessEqualStencilFunc",0,515,"LessStencilFunc",0,513,"Light",0,aQ,"LightProbe",0,sl,"Line",0,iq,"Line3",0,oi,"LineBasicMaterial",0,iB,"LineCurve",0,r_,"LineCurve3",0,ry,"LineDashedMaterial",0,ax,"LineLoop",0,i$,"LineSegments",0,iK,"LinearFilter",0,1006,"LinearInterpolant",0,aR,"LinearMipMapLinearFilter",0,1008,"LinearMipMapNearestFilter",0,1007,"LinearMipmapLinearFilter",0,1008,"LinearMipmapNearestFilter",0,1007,"LinearSRGBColorSpace",0,L,"LinearToneMapping",0,1,"LinearTransfer",0,N,"Loader",0,aG,"LoaderUtils",0,sc,"LoadingManager",0,aH,"LoopOnce",0,2200,"LoopPingPong",0,2202,"LoopRepeat",0,2201,"LuminanceAlphaFormat",0,1025,"LuminanceFormat",0,1024,"MOUSE",0,A,"Material",0,tH,"MaterialLoader",0,su,"MathUtils",0,q,"Matrix2",0,s9,"Matrix3",0,Z,"Matrix4",0,e2,"MaxEquation",0,104,"Mesh",0,nf,"MeshBasicMaterial",0,tV,"MeshDepthMaterial",0,av,"MeshDistanceMaterial",0,a_,"MeshLambertMaterial",0,ag,"MeshMatcapMaterial",0,ay,"MeshNormalMaterial",0,am,"MeshPhongMaterial",0,ap,"MeshPhysicalMaterial",0,ad,"MeshStandardMaterial",0,ah,"MeshToonMaterial",0,af,"MinEquation",0,103,"MirroredRepeatWrapping",0,1002,"MixOperation",0,1,"MultiplyBlending",0,4,"MultiplyOperation",0,0,"NearestFilter",0,1003,"NearestMipMapLinearFilter",0,1005,"NearestMipMapNearestFilter",0,1004,"NearestMipmapLinearFilter",0,1005,"NearestMipmapNearestFilter",0,1004,"NeutralToneMapping",0,7,"NeverCompare",0,512,"NeverDepth",0,0,"NeverStencilFunc",0,512,"NoBlending",0,0,"NoColorSpace",0,"","NoToneMapping",0,0,"NormalAnimationBlendMode",0,2500,"NormalBlending",0,1,"NotEqualCompare",0,517,"NotEqualDepth",0,7,"NotEqualStencilFunc",0,517,"NumberKeyframeTrack",0,aU,"Object3D",0,ty,"ObjectLoader",0,sp,"ObjectSpaceNormalMap",0,1,"OctahedronGeometry",0,r8,"OneFactor",0,201,"OneMinusConstantAlphaFactor",0,214,"OneMinusConstantColorFactor",0,212,"OneMinusDstAlphaFactor",0,207,"OneMinusDstColorFactor",0,209,"OneMinusSrcAlphaFactor",0,205,"OneMinusSrcColorFactor",0,203,"OrthographicCamera",0,sn,"PCFShadowMap",0,1,"PCFSoftShadowMap",0,2,"PMREMGenerator",0,o8,"Path",0,rw,"PerspectiveCamera",0,nE,"Plane",0,iy,"PlaneGeometry",0,r9,"PlaneHelper",0,oC,"PointLight",0,st,"PointLightHelper",0,oc,"Points",0,i4,"PointsMaterial",0,iQ,"PolarGridHelper",0,og,"PolyhedronGeometry",0,rI,"PositionalAudio",0,sF,"PropertyBinding",0,sX,"PropertyMixer",0,sB,"QuadraticBezierCurve",0,rx,"QuadraticBezierCurve3",0,rb,"Quaternion",0,ew,"QuaternionKeyframeTrack",0,aO,"QuaternionLinearInterpolant",0,aD,"RED_GREEN_RGTC2_Format",0,36285,"RED_RGTC1_Format",0,36283,"REVISION",0,"171","RGBADepthPacking",0,3201,"RGBAFormat",0,1023,"RGBAIntegerFormat",0,1033,"RGBA_ASTC_10x10_Format",0,37819,"RGBA_ASTC_10x5_Format",0,37816,"RGBA_ASTC_10x6_Format",0,37817,"RGBA_ASTC_10x8_Format",0,37818,"RGBA_ASTC_12x10_Format",0,37820,"RGBA_ASTC_12x12_Format",0,37821,"RGBA_ASTC_4x4_Format",0,37808,"RGBA_ASTC_5x4_Format",0,37809,"RGBA_ASTC_5x5_Format",0,37810,"RGBA_ASTC_6x5_Format",0,37811,"RGBA_ASTC_6x6_Format",0,37812,"RGBA_ASTC_8x5_Format",0,37813,"RGBA_ASTC_8x6_Format",0,37814,"RGBA_ASTC_8x8_Format",0,37815,"RGBA_BPTC_Format",0,36492,"RGBA_ETC2_EAC_Format",0,37496,"RGBA_PVRTC_2BPPV1_Format",0,35843,"RGBA_PVRTC_4BPPV1_Format",0,35842,"RGBA_S3TC_DXT1_Format",0,33777,"RGBA_S3TC_DXT3_Format",0,33778,"RGBA_S3TC_DXT5_Format",0,33779,"RGBDepthPacking",0,3202,"RGBFormat",0,1022,"RGBIntegerFormat",0,1032,"RGB_BPTC_SIGNED_Format",0,36494,"RGB_BPTC_UNSIGNED_Format",0,36495,"RGB_ETC1_Format",0,36196,"RGB_ETC2_Format",0,37492,"RGB_PVRTC_2BPPV1_Format",0,35841,"RGB_PVRTC_4BPPV1_Format",0,35840,"RGB_S3TC_DXT1_Format",0,33776,"RGDepthPacking",0,3203,"RGFormat",0,1030,"RGIntegerFormat",0,1031,"RawShaderMaterial",0,ac,"Ray",0,e1,"Raycaster",0,s3,"RectAreaLight",0,ss,"RedFormat",0,1028,"RedIntegerFormat",0,1029,"ReinhardToneMapping",0,2,"RenderTarget",0,ey,"RepeatWrapping",0,1e3,"ReplaceStencilOp",0,7681,"ReverseSubtractEquation",0,102,"RingGeometry",0,r7,"SIGNED_RED_GREEN_RGTC2_Format",0,36286,"SIGNED_RED_RGTC1_Format",0,36284,"SRGBColorSpace",0,I,"SRGBTransfer",0,U,"Scene",0,nL,"ShaderChunk",0,oB,"ShaderLib",0,oH,"ShaderMaterial",0,nb,"ShadowMaterial",0,au,"Shape",0,rz,"ShapeGeometry",0,ae,"ShapePath",0,oL,"ShapeUtils",0,r1,"ShortType",0,1011,"Skeleton",0,ia,"SkeletonHelper",0,ou,"SkinnedMesh",0,n7,"Source",0,ef,"Sphere",0,eq,"SphereGeometry",0,at,"Spherical",0,s6,"SphericalHarmonics3",0,so,"SplineCurve",0,rS,"SpotLight",0,a6,"SpotLightHelper",0,oa,"Sprite",0,nZ,"SpriteMaterial",0,nO,"SrcAlphaFactor",0,204,"SrcAlphaSaturateFactor",0,210,"SrcColorFactor",0,202,"StaticCopyUsage",0,35046,"StaticDrawUsage",0,35044,"StaticReadUsage",0,35045,"StereoCamera",0,sM,"StreamCopyUsage",0,35042,"StreamDrawUsage",0,35040,"StreamReadUsage",0,35041,"StringKeyframeTrack",0,aF,"SubtractEquation",0,101,"SubtractiveBlending",0,3,"TOUCH",0,C,"TangentSpaceNormalMap",0,0,"TetrahedronGeometry",0,an,"Texture",0,ev,"TextureLoader",0,a$,"TextureUtils",0,oD,"TorusGeometry",0,ai,"TorusKnotGeometry",0,ar,"Triangle",0,tN,"TriangleFanDrawMode",0,2,"TriangleStripDrawMode",0,1,"TrianglesDrawMode",0,0,"TubeGeometry",0,aa,"UVMapping",0,300,"Uint16BufferAttribute",0,t0,"Uint32BufferAttribute",0,t2,"Uint8BufferAttribute",0,tK,"Uint8ClampedBufferAttribute",0,t$,"Uniform",0,sK,"UniformsGroup",0,sQ,"UniformsLib",0,ok,"UniformsUtils",0,nx,"UnsignedByteType",0,1009,"UnsignedInt248Type",0,1020,"UnsignedInt5999Type",0,35902,"UnsignedIntType",0,1014,"UnsignedShort4444Type",0,1017,"UnsignedShort5551Type",0,1018,"UnsignedShortType",0,1012,"VSMShadowMap",0,3,"Vector2",0,Y,"Vector3",0,eE,"Vector4",0,e_,"VectorKeyframeTrack",0,az,"VideoTexture",0,i8,"WebGL3DRenderTarget",0,eT,"WebGLArrayRenderTarget",0,eS,"WebGLCoordinateSystem",0,2e3,"WebGLCubeRenderTarget",0,nR,"WebGLMultipleRenderTargets",0,oO,"WebGLRenderTarget",0,ex,"WebGLRenderer",0,uK,"WebGLUtils",0,uk,"WebGPUCoordinateSystem",0,2001,"WireframeGeometry",0,as,"WrapAroundEnding",0,2402,"ZeroCurvatureEnding",0,2400,"ZeroFactor",0,200,"ZeroSlopeEnding",0,2401,"ZeroStencilOp",0,0,"createCanvasElement",0,et],32009);var hv=e.i(32009);function h_(e,t){let n;return(...i)=>{window.clearTimeout(n),n=window.setTimeout(()=>e(...i),t)}}let hy=["x","y","top","bottom","left","right","width","height"];function hx({ref:e,children:t,fallback:n,resize:i,style:r,gl:a,events:s=hg,eventSource:o,eventPrefix:l,shadows:u,linear:c,flat:h,legacy:d,orthographic:p,frameloop:f,dpr:m,performance:g,raycaster:v,camera:_,scene:y,onPointerMissed:x,onCreated:b,...S}){E.useMemo(()=>cZ(hv),[]);let M=cd(),[T,w]=function({debounce:e,scroll:t,polyfill:n,offsetSize:i}={debounce:0,scroll:!1,offsetSize:!1}){var r,a,s;let o=n||("u"(p.current=!0,()=>void(p.current=!1)));let[f,m,g]=(0,E.useMemo)(()=>{let e=()=>{let e,t;if(!c.current.element)return;let{left:n,top:r,width:a,height:s,bottom:o,right:l,x:h,y:d}=c.current.element.getBoundingClientRect(),f={left:n,top:r,width:a,height:s,bottom:o,right:l,x:h,y:d};c.current.element instanceof HTMLElement&&i&&(f.height=c.current.element.offsetHeight,f.width=c.current.element.offsetWidth),Object.freeze(f),p.current&&(e=c.current.lastBounds,t=f,!hy.every(n=>e[n]===t[n]))&&u(c.current.lastBounds=f)};return[e,d?h_(e,d):e,h?h_(e,h):e]},[u,i,h,d]);function v(){c.current.scrollContainers&&(c.current.scrollContainers.forEach(e=>e.removeEventListener("scroll",g,!0)),c.current.scrollContainers=null),c.current.resizeObserver&&(c.current.resizeObserver.disconnect(),c.current.resizeObserver=null),c.current.orientationHandler&&("orientation"in screen&&"removeEventListener"in screen.orientation?screen.orientation.removeEventListener("change",c.current.orientationHandler):"onorientationchange"in window&&window.removeEventListener("orientationchange",c.current.orientationHandler))}function _(){c.current.element&&(c.current.resizeObserver=new o(g),c.current.resizeObserver.observe(c.current.element),t&&c.current.scrollContainers&&c.current.scrollContainers.forEach(e=>e.addEventListener("scroll",g,{capture:!0,passive:!0})),c.current.orientationHandler=()=>{g()},"orientation"in screen&&"addEventListener"in screen.orientation?screen.orientation.addEventListener("change",c.current.orientationHandler):"onorientationchange"in window&&window.addEventListener("orientationchange",c.current.orientationHandler))}return r=g,a=!!t,(0,E.useEffect)(()=>{if(a)return window.addEventListener("scroll",r,{capture:!0,passive:!0}),()=>void window.removeEventListener("scroll",r,!0)},[r,a]),s=m,(0,E.useEffect)(()=>(window.addEventListener("resize",s),()=>void window.removeEventListener("resize",s)),[s]),(0,E.useEffect)(()=>{v(),_()},[t,g,m]),(0,E.useEffect)(()=>v,[]),[e=>{e&&e!==c.current.element&&(v(),c.current.element=e,c.current.scrollContainers=function e(t){let n=[];if(!t||t===document.body)return n;let{overflow:i,overflowX:r,overflowY:a}=window.getComputedStyle(t);return[i,r,a].some(e=>"auto"===e||"scroll"===e)&&n.push(t),[...n,...e(t.parentElement)]}(e),_())},l,f]}({scroll:!0,debounce:{scroll:50,resize:0},...i}),A=E.useRef(null),C=E.useRef(null);E.useImperativeHandle(e,()=>A.current);let R=ch(x),[P,I]=E.useState(!1),[L,N]=E.useState(!1);if(P)throw P;if(L)throw L;let U=E.useRef(null);cc(()=>{let e=A.current;w.width>0&&w.height>0&&e&&(U.current||(U.current=he(e)),async function(){await U.current.configure({gl:a,scene:y,events:s,shadows:u,linear:c,flat:h,legacy:d,orthographic:p,frameloop:f,dpr:m,performance:g,raycaster:v,camera:_,size:w,onPointerMissed:(...e)=>null==R.current?void 0:R.current(...e),onCreated:e=>{null==e.events.connect||e.events.connect(o?cl(o)?o.current:o:C.current),l&&e.setEvents({compute:(e,t)=>{let n=e[l+"X"],i=e[l+"Y"];t.pointer.set(n/t.size.width*2-1,-(2*(i/t.size.height))+1),t.raycaster.setFromCamera(t.pointer,t.camera)}}),null==b||b(e)}}),U.current.render((0,u9.jsx)(M,{children:(0,u9.jsx)(cf,{set:N,children:(0,u9.jsx)(E.Suspense,{fallback:(0,u9.jsx)(cp,{set:I}),children:null!=t?t:null})})}))}())}),E.useEffect(()=>{let e=A.current;if(e)return()=>hn(e)},[]);let D=o?"none":"auto";return(0,u9.jsx)("div",{ref:C,style:{position:"relative",width:"100%",height:"100%",overflow:"hidden",pointerEvents:D,...r},...S,children:(0,u9.jsx)("div",{ref:T,style:{width:"100%",height:"100%"},children:(0,u9.jsx)("canvas",{ref:A,style:{display:"block"},children:n})})})}e.s(["Canvas",0,function(e){return(0,u9.jsx)(ci,{children:(0,u9.jsx)(hx,{...e})})}],75056),e.s(["useFrame",0,cz],25234),e.s(["useThree",0,cF],28600)},67335,e=>{"use strict";var t=e.i(1950);e.s(["extend",()=>t.e])},44208,e=>{"use strict";var t=e.i(1950);e.s(["createPortal",()=>t.o])},60602,e=>{"use strict";var t=e.i(1950);e.s(["useLoader",()=>t.G])},24205,e=>{"use strict";var t=e.i(1950);e.s(["applyProps",()=>t.s])}]); \ No newline at end of file diff --git a/build/_next/static/chunks/00fiud~fayo7s.css b/build/_next/static/chunks/00fiud~fayo7s.css deleted file mode 100644 index f80e93b..0000000 --- a/build/_next/static/chunks/00fiud~fayo7s.css +++ /dev/null @@ -1 +0,0 @@ -.OfficeMap-module__ToIo3G__root{border-radius:inherit;isolation:isolate;background:#0b0b0b;width:100%;height:100%;position:relative;overflow:hidden}.OfficeMap-module__ToIo3G__map{width:100%;height:100%;font-family:var(--font-manrope), system-ui, -apple-system, sans-serif;background:#0b0b0b}.OfficeMap-module__ToIo3G__map:focus-visible{outline-offset:-2px;outline:2px solid #c01227}.OfficeMap-module__ToIo3G__controls{z-index:600;pointer-events:none;flex-wrap:wrap;justify-content:center;gap:8px;display:flex;position:absolute;top:14px;left:12px;right:12px}.OfficeMap-module__ToIo3G__controlBtn{pointer-events:auto;appearance:none;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);color:#f5f5f5;font-family:var(--font-manrope), system-ui, -apple-system, sans-serif;letter-spacing:.01em;cursor:pointer;white-space:nowrap;background:#0f0f11d1;border:1px solid #ffffff2e;border-radius:999px;margin:0;padding:9px 16px;font-size:13px;font-weight:700;line-height:1;transition:background-color .2s,border-color .2s,color .2s,transform .2s cubic-bezier(.16,1,.3,1),box-shadow .2s}.OfficeMap-module__ToIo3G__controlBtn:hover{background:#c01227e6;border-color:#c01227;transform:translateY(-1px)}.OfficeMap-module__ToIo3G__controlBtn:focus-visible{outline-offset:2px;outline:2px solid #fff}.OfficeMap-module__ToIo3G__controlBtnActive,.OfficeMap-module__ToIo3G__controlBtnActive:hover{color:#fff;background:#c01227;border-color:#c01227;box-shadow:0 6px 18px #c0122773}.OfficeMap-module__ToIo3G__controlBtnHq{border-color:#c012278c;box-shadow:0 0 0 1px #c0122740,0 4px 14px #c0122733}.OfficeMap-module__ToIo3G__controlBtnHq.OfficeMap-module__ToIo3G__controlBtnActive{box-shadow:0 6px 20px #c012278c}@media (max-width:480px){.OfficeMap-module__ToIo3G__controls{flex-wrap:nowrap;gap:5px;top:12px}.OfficeMap-module__ToIo3G__controlBtn{padding:7px 9px;font-size:11px}}.OfficeMap-module__ToIo3G__markerIcon{filter:drop-shadow(0 4px 6px #0000008c);background:0 0;border:0;transition:transform .18s cubic-bezier(.16,1,.3,1)}.OfficeMap-module__ToIo3G__markerIcon:hover,.OfficeMap-module__ToIo3G__markerIcon:focus-visible{transform:translateY(-3px)scale(1.06)}.OfficeMap-module__ToIo3G__markerIconHq{filter:drop-shadow(0 0 9px #c01227d9)drop-shadow(0 5px 7px #0000008c);background:0 0;border:0;transition:transform .18s cubic-bezier(.16,1,.3,1)}.OfficeMap-module__ToIo3G__markerIconHq svg{z-index:2;position:relative}.OfficeMap-module__ToIo3G__markerIconHq:hover,.OfficeMap-module__ToIo3G__markerIconHq:focus-visible{transform:translateY(-3px)scale(1.05)}.OfficeMap-module__ToIo3G__pinPulse{z-index:1;pointer-events:none;background:#c0122780;border-radius:50%;width:18px;height:18px;margin:-9px 0 0 -9px;animation:2.2s ease-out infinite OfficeMap-module__ToIo3G__hqPulse;position:absolute;top:19px;left:20px}@keyframes OfficeMap-module__ToIo3G__hqPulse{0%{opacity:.75;transform:scale(.6)}70%{opacity:0;transform:scale(3)}to{opacity:0;transform:scale(3)}}.OfficeMap-module__ToIo3G__root .leaflet-container{background:#0b0b0b}.OfficeMap-module__ToIo3G__root .leaflet-bar{border:1px solid #ffffff1f;box-shadow:0 6px 18px #0006}.OfficeMap-module__ToIo3G__root .leaflet-bar a{color:#f5f5f5;background:#0f0f11eb;border-bottom-color:#ffffff1f;transition:background-color .2s,color .2s}.OfficeMap-module__ToIo3G__root .leaflet-bar a:hover{color:#fff;background:#c01227}.OfficeMap-module__ToIo3G__root .leaflet-bar a:focus-visible{outline-offset:2px;outline:2px solid #c01227}.OfficeMap-module__ToIo3G__root .leaflet-control-attribution{color:#ffffffa6;-webkit-backdrop-filter:blur(6px);background:#0a0a0ab8;border-radius:6px 0 0;padding:2px 8px;font-size:11px}.OfficeMap-module__ToIo3G__root .leaflet-control-attribution a{color:#ffffffd9}.OfficeMap-module__ToIo3G__root .leaflet-popup{animation:.2s ease-out forwards OfficeMap-module__ToIo3G__popupFade}.OfficeMap-module__ToIo3G__root .leaflet-popup-content-wrapper{color:#fff;transform-origin:bottom;background:#0f0f11;border:1px solid #ffffff14;border-radius:8px;padding:0;animation:.2s cubic-bezier(.16,1,.3,1) forwards OfficeMap-module__ToIo3G__popupScale;overflow:hidden;box-shadow:0 12px 32px #0009}.OfficeMap-module__ToIo3G__root .leaflet-popup-content{width:auto!important;height:auto!important;margin:0!important}.OfficeMap-module__ToIo3G__root .leaflet-popup-tip{background:#0f0f11;border:1px solid #ffffff14}@keyframes OfficeMap-module__ToIo3G__popupFade{0%{opacity:0}to{opacity:1}}@keyframes OfficeMap-module__ToIo3G__popupScale{0%{transform:scale(.92)}to{transform:scale(1)}}.OfficeMap-module__ToIo3G__card{box-sizing:border-box;min-width:230px;max-width:280px;font-family:var(--font-manrope), system-ui, -apple-system, sans-serif;background:#0f0f11;border-top:2px solid #c01227;flex-direction:column;height:auto;padding:12px 16px;display:flex}.OfficeMap-module__ToIo3G__cardHeader{border-bottom:1px solid #ffffff14;align-items:center;gap:6px;margin-bottom:8px;padding-bottom:6px;display:flex}.OfficeMap-module__ToIo3G__cardIcon{align-items:center;font-size:15px;display:inline-flex}.OfficeMap-module__ToIo3G__cardTitle{color:#fff!important;letter-spacing:-.01em!important;margin:0!important;font-size:17px!important;font-weight:800!important}.OfficeMap-module__ToIo3G__cardBody{flex-direction:column;gap:4px;display:flex}.OfficeMap-module__ToIo3G__addressLine{color:#ffffffbf!important;margin:0 0 6px!important;padding:0!important;font-size:14px!important;font-weight:500!important;line-height:1.5!important}.OfficeMap-module__ToIo3G__addressLine:last-child{margin-bottom:0!important}@media (max-width:480px){.OfficeMap-module__ToIo3G__card{min-width:200px;max-width:230px;padding:9px 12px}.OfficeMap-module__ToIo3G__cardTitle{font-size:14px!important}.OfficeMap-module__ToIo3G__addressLine{margin-bottom:3px!important;font-size:12px!important;line-height:1.4!important}}.OfficeMap-module__ToIo3G__mapMountReserve{border-radius:inherit;width:100%;height:100%}@media (prefers-reduced-motion:reduce){.OfficeMap-module__ToIo3G__markerIcon,.OfficeMap-module__ToIo3G__markerIconHq{transition:none}.OfficeMap-module__ToIo3G__pinPulse{opacity:.45;animation:none}}.OfficeMap-module__ToIo3G__errorOverlay{z-index:500;text-align:center;color:#ffffffd1;font-family:var(--font-manrope), system-ui, sans-serif;background:#101012;flex-direction:column;justify-content:center;align-items:center;gap:14px;padding:24px;display:flex;position:absolute;inset:0}.OfficeMap-module__ToIo3G__errorTitle{color:#fff;margin:0;font-size:clamp(15px,2.4vw,18px);font-weight:800}.OfficeMap-module__ToIo3G__errorText{color:#fff9;max-width:38ch;margin:0;font-size:13px;line-height:1.55}.OfficeMap-module__ToIo3G__errorList{flex-wrap:wrap;justify-content:center;gap:8px 12px;margin:4px 0 0;padding:0;list-style:none;display:flex}.OfficeMap-module__ToIo3G__errorList li{color:#f1f1f1;align-items:center;gap:7px;font-size:13px;font-weight:700;display:inline-flex}.OfficeMap-module__ToIo3G__errorList li:before{content:"";background:#c01227;border-radius:50%;width:7px;height:7px}.OfficeMap-module__ToIo3G__srOnly{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden} diff --git a/build/_next/static/chunks/01xlw8hd842-c.js b/build/_next/static/chunks/01xlw8hd842-c.js deleted file mode 100644 index fd61718..0000000 --- a/build/_next/static/chunks/01xlw8hd842-c.js +++ /dev/null @@ -1 +0,0 @@ -(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,33525,(e,r,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"warnOnce",{enumerable:!0,get:function(){return n}});let n=e=>{}},18967,(e,r,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={DecodeError:function(){return P},MiddlewareNotFoundError:function(){return O},MissingStaticPage:function(){return h},NormalizeError:function(){return E},PageNotFoundError:function(){return b},SP:function(){return m},ST:function(){return y},WEB_VITALS:function(){return i},execOnce:function(){return u},getDisplayName:function(){return l},getLocationOrigin:function(){return c},getURL:function(){return f},isAbsoluteUrl:function(){return a},isResSent:function(){return d},loadGetInitialProps:function(){return g},normalizeRepeatedSlashes:function(){return p},stringifyError:function(){return N}};for(var o in n)Object.defineProperty(t,o,{enumerable:!0,get:n[o]});let i=["CLS","FCP","FID","INP","LCP","TTFB"];function u(e){let r,t=!1;return(...n)=>(t||(t=!0,r=e(...n)),r)}let s=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,a=e=>s.test(e);function c(){let{protocol:e,hostname:r,port:t}=window.location;return`${e}//${r}${t?":"+t:""}`}function f(){let{href:e}=window.location,r=c();return e.substring(r.length)}function l(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function d(e){return e.finished||e.headersSent}function p(e){let r=e.split("?");return r[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(r[1]?`?${r.slice(1).join("?")}`:"")}async function g(e,r){let t=r.res||r.ctx&&r.ctx.res;if(!e.getInitialProps)return r.ctx&&r.Component?{pageProps:await g(r.Component,r.ctx)}:{};let n=await e.getInitialProps(r);if(t&&d(t))return n;if(!n)throw Object.defineProperty(Error(`"${l(e)}.getInitialProps()" should resolve to an object. But found "${n}" instead.`),"__NEXT_ERROR_CODE",{value:"E1025",enumerable:!1,configurable:!0});return n}let m="u">typeof performance,y=m&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class P extends Error{}class E extends Error{}class b extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message=`Cannot find module for page: ${e}`}}class h extends Error{constructor(e,r){super(),this.message=`Failed to load static file for page: ${e} ${r}`}}class O extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function N(e){return JSON.stringify({message:e.message,stack:e.stack})}},98183,(e,r,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={assign:function(){return a},searchParamsToUrlQuery:function(){return i},urlQueryToSearchParams:function(){return s}};for(var o in n)Object.defineProperty(t,o,{enumerable:!0,get:n[o]});function i(e){let r={};for(let[t,n]of e.entries()){let e=r[t];void 0===e?r[t]=n:Array.isArray(e)?e.push(n):r[t]=[e,n]}return r}function u(e){return"string"==typeof e?e:("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}function s(e){let r=new URLSearchParams;for(let[t,n]of Object.entries(e))if(Array.isArray(n))for(let e of n)r.append(t,u(e));else r.set(t,u(n));return r}function a(e,...r){for(let t of r){for(let r of t.keys())e.delete(r);for(let[r,n]of t.entries())e.append(r,n)}return e}}]); \ No newline at end of file diff --git a/build/_next/static/chunks/03~yq9q893hmn.js b/build/_next/static/chunks/03~yq9q893hmn.js deleted file mode 100644 index ab422b9..0000000 --- a/build/_next/static/chunks/03~yq9q893hmn.js +++ /dev/null @@ -1 +0,0 @@ -!function(){var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function e(t){var e={exports:{}};return t(e,e.exports),e.exports}var r,n,o=function(t){return t&&t.Math===Math&&t},i=o("object"==typeof globalThis&&globalThis)||o("object"==typeof window&&window)||o("object"==typeof self&&self)||o("object"==typeof t&&t)||o("object"==typeof t&&t)||function(){return this}()||Function("return this")(),a=function(t){try{return!!t()}catch(t){return!0}},u=!a(function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]}),s=!a(function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")}),c=Function.prototype.call,f=s?c.bind(c):function(){return c.apply(c,arguments)},l={}.propertyIsEnumerable,h=Object.getOwnPropertyDescriptor,p=h&&!l.call({1:2},1)?function(t){var e=h(this,t);return!!e&&e.enumerable}:l,v={f:p},d=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},g=Function.prototype,y=g.call,m=s&&g.bind.bind(y,y),b=s?m:function(t){return function(){return y.apply(t,arguments)}},w=b({}.toString),S=b("".slice),E=function(t){return S(w(t),8,-1)},O=Object,x=b("".split),R=a(function(){return!O("z").propertyIsEnumerable(0)})?function(t){return"String"===E(t)?x(t,""):O(t)}:O,P=function(t){return null==t},A=TypeError,j=function(t){if(P(t))throw new A("Can't call method on "+t);return t},k=function(t){return R(j(t))},I="object"==typeof document&&document.all,T=void 0===I&&void 0!==I?function(t){return"function"==typeof t||t===I}:function(t){return"function"==typeof t},M=function(t){return"object"==typeof t?null!==t:T(t)},L=function(t,e){return arguments.length<2?T(r=i[t])?r:void 0:i[t]&&i[t][e];var r},U=b({}.isPrototypeOf),N=i.navigator,C=N&&N.userAgent,_=C?String(C):"",F=i.process,B=i.Deno,D=F&&F.versions||B&&B.version,z=D&&D.v8;z&&(n=(r=z.split("."))[0]>0&&r[0]<4?1:+(r[0]+r[1])),!n&&_&&(!(r=_.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=_.match(/Chrome\/(\d+)/))&&(n=+r[1]);var W=n,q=i.String,H=!!Object.getOwnPropertySymbols&&!a(function(){var t=Symbol("symbol detection");return!q(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&W&&W<41}),$=H&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,K=Object,G=$?function(t){return"symbol"==typeof t}:function(t){var e=L("Symbol");return T(e)&&U(e.prototype,K(t))},V=String,Y=function(t){try{return V(t)}catch(t){return"Object"}},X=TypeError,J=function(t){if(T(t))return t;throw new X(Y(t)+" is not a function")},Q=function(t,e){var r=t[e];return P(r)?void 0:J(r)},Z=TypeError,tt=Object.defineProperty,et=function(t,e){try{tt(i,t,{value:e,configurable:!0,writable:!0})}catch(r){i[t]=e}return e},rt=e(function(t){var e="__core-js_shared__",r=t.exports=i[e]||et(e,{});(r.versions||(r.versions=[])).push({version:"3.38.1",mode:"global",copyright:"© 2014-2024 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE",source:"https://github.com/zloirock/core-js"})}),nt=function(t,e){return rt[t]||(rt[t]=e||{})},ot=Object,it=function(t){return ot(j(t))},at=b({}.hasOwnProperty),ut=Object.hasOwn||function(t,e){return at(it(t),e)},st=0,ct=Math.random(),ft=b(1..toString),lt=function(t){return"Symbol("+(void 0===t?"":t)+")_"+ft(++st+ct,36)},ht=i.Symbol,pt=nt("wks"),vt=$?ht.for||ht:ht&&ht.withoutSetter||lt,dt=function(t){return ut(pt,t)||(pt[t]=H&&ut(ht,t)?ht[t]:vt("Symbol."+t)),pt[t]},gt=TypeError,yt=dt("toPrimitive"),mt=function(t,e){if(!M(t)||G(t))return t;var r,n=Q(t,yt);if(n){if(void 0===e&&(e="default"),r=f(n,t,e),!M(r)||G(r))return r;throw new gt("Can't convert object to primitive value")}return void 0===e&&(e="number"),function(t,e){var r,n;if("string"===e&&T(r=t.toString)&&!M(n=f(r,t)))return n;if(T(r=t.valueOf)&&!M(n=f(r,t)))return n;if("string"!==e&&T(r=t.toString)&&!M(n=f(r,t)))return n;throw new Z("Can't convert object to primitive value")}(t,e)},bt=function(t){var e=mt(t,"string");return G(e)?e:e+""},wt=i.document,St=M(wt)&&M(wt.createElement),Et=function(t){return St?wt.createElement(t):{}},Ot=!u&&!a(function(){return 7!==Object.defineProperty(Et("div"),"a",{get:function(){return 7}}).a}),xt=Object.getOwnPropertyDescriptor,Rt={f:u?xt:function(t,e){if(t=k(t),e=bt(e),Ot)try{return xt(t,e)}catch(t){}if(ut(t,e))return d(!f(v.f,t,e),t[e])}},Pt=u&&a(function(){return 42!==Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype}),At=String,jt=TypeError,kt=function(t){if(M(t))return t;throw new jt(At(t)+" is not an object")},It=TypeError,Tt=Object.defineProperty,Mt=Object.getOwnPropertyDescriptor,Lt="enumerable",Ut="configurable",Nt="writable",Ct={f:u?Pt?function(t,e,r){if(kt(t),e=bt(e),kt(r),"function"==typeof t&&"prototype"===e&&"value"in r&&Nt in r&&!r[Nt]){var n=Mt(t,e);n&&n[Nt]&&(t[e]=r.value,r={configurable:Ut in r?r[Ut]:n[Ut],enumerable:Lt in r?r[Lt]:n[Lt],writable:!1})}return Tt(t,e,r)}:Tt:function(t,e,r){if(kt(t),e=bt(e),kt(r),Ot)try{return Tt(t,e,r)}catch(t){}if("get"in r||"set"in r)throw new It("Accessors not supported");return"value"in r&&(t[e]=r.value),t}},_t=u?function(t,e,r){return Ct.f(t,e,d(1,r))}:function(t,e,r){return t[e]=r,t},Ft=Function.prototype,Bt=u&&Object.getOwnPropertyDescriptor,Dt=ut(Ft,"name"),zt={EXISTS:Dt,PROPER:Dt&&"something"===function(){}.name,CONFIGURABLE:Dt&&(!u||u&&Bt(Ft,"name").configurable)},Wt=b(Function.toString);T(rt.inspectSource)||(rt.inspectSource=function(t){return Wt(t)});var qt,Ht,$t,Kt=rt.inspectSource,Gt=i.WeakMap,Vt=T(Gt)&&/native code/.test(String(Gt)),Yt=nt("keys"),Xt=function(t){return Yt[t]||(Yt[t]=lt(t))},Jt={},Qt="Object already initialized",Zt=i.TypeError;if(Vt||rt.state){var te=rt.state||(rt.state=new(0,i.WeakMap));te.get=te.get,te.has=te.has,te.set=te.set,qt=function(t,e){if(te.has(t))throw new Zt(Qt);return e.facade=t,te.set(t,e),e},Ht=function(t){return te.get(t)||{}},$t=function(t){return te.has(t)}}else{var ee=Xt("state");Jt[ee]=!0,qt=function(t,e){if(ut(t,ee))throw new Zt(Qt);return e.facade=t,_t(t,ee,e),e},Ht=function(t){return ut(t,ee)?t[ee]:{}},$t=function(t){return ut(t,ee)}}var re,ne={set:qt,get:Ht,has:$t,enforce:function(t){return $t(t)?Ht(t):qt(t,{})},getterFor:function(t){return function(e){var r;if(!M(e)||(r=Ht(e)).type!==t)throw new Zt("Incompatible receiver, "+t+" required");return r}}},oe=e(function(t){var e=zt.CONFIGURABLE,r=ne.enforce,n=ne.get,o=String,i=Object.defineProperty,s=b("".slice),c=b("".replace),f=b([].join),l=u&&!a(function(){return 8!==i(function(){},"length",{value:8}).length}),h=String(String).split("String"),p=t.exports=function(t,n,a){"Symbol("===s(o(n),0,7)&&(n="["+c(o(n),/^Symbol\(([^)]*)\).*$/,"$1")+"]"),a&&a.getter&&(n="get "+n),a&&a.setter&&(n="set "+n),(!ut(t,"name")||e&&t.name!==n)&&(u?i(t,"name",{value:n,configurable:!0}):t.name=n),l&&a&&ut(a,"arity")&&t.length!==a.arity&&i(t,"length",{value:a.arity});try{a&&ut(a,"constructor")&&a.constructor?u&&i(t,"prototype",{writable:!1}):t.prototype&&(t.prototype=void 0)}catch(t){}var p=r(t);return ut(p,"source")||(p.source=f(h,"string"==typeof n?n:"")),t};Function.prototype.toString=p(function(){return T(this)&&n(this).source||Kt(this)},"toString")}),ie=function(t,e,r,n){n||(n={});var o=n.enumerable,i=void 0!==n.name?n.name:e;if(T(r)&&oe(r,i,n),n.global)o?t[e]=r:et(e,r);else{try{n.unsafe?t[e]&&(o=!0):delete t[e]}catch(t){}o?t[e]=r:Ct.f(t,e,{value:r,enumerable:!1,configurable:!n.nonConfigurable,writable:!n.nonWritable})}return t},ae=Math.ceil,ue=Math.floor,se=Math.trunc||function(t){var e=+t;return(e>0?ue:ae)(e)},ce=function(t){var e=+t;return e!=e||0===e?0:se(e)},fe=Math.max,le=Math.min,he=function(t,e){var r=ce(t);return r<0?fe(r+e,0):le(r,e)},pe=Math.min,ve=function(t){var e=ce(t);return e>0?pe(e,9007199254740991):0},de=function(t){return ve(t.length)},ge=function(t){return function(e,r,n){var o=k(e),i=de(o);if(0===i)return!t&&-1;var a,u=he(n,i);if(t&&r!=r){for(;i>u;)if((a=o[u++])!=a)return!0}else for(;i>u;u++)if((t||u in o)&&o[u]===r)return t||u||0;return!t&&-1}},ye={includes:ge(!0),indexOf:ge(!1)},me=ye.indexOf,be=b([].push),we=function(t,e){var r,n=k(t),o=0,i=[];for(r in n)!ut(Jt,r)&&ut(n,r)&&be(i,r);for(;e.length>o;)ut(n,r=e[o++])&&(~me(i,r)||be(i,r));return i},Se=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Ee=Se.concat("length","prototype"),Oe={f:Object.getOwnPropertyNames||function(t){return we(t,Ee)}},xe={f:Object.getOwnPropertySymbols},Re=b([].concat),Pe=L("Reflect","ownKeys")||function(t){var e=Oe.f(kt(t)),r=xe.f;return r?Re(e,r(t)):e},Ae=function(t,e,r){for(var n=Pe(e),o=Ct.f,i=Rt.f,a=0;aa;)Ct.f(t,r=o[a++],n[r]);return t},Be={f:Fe},De=L("document","documentElement"),ze="prototype",We="script",qe=Xt("IE_PROTO"),He=function(){},$e=function(t){return"<"+We+">"+t+""},Ke=function(t){t.write($e("")),t.close();var e=t.parentWindow.Object;return t=null,e},Ge=function(){try{re=new ActiveXObject("htmlfile")}catch(t){}var t,e,r;Ge="undefined"!=typeof document?document.domain&&re?Ke(re):(e=Et("iframe"),r="java"+We+":",e.style.display="none",De.appendChild(e),e.src=String(r),(t=e.contentWindow.document).open(),t.write($e("document.F=Object")),t.close(),t.F):Ke(re);for(var n=Se.length;n--;)delete Ge[ze][Se[n]];return Ge()};Jt[qe]=!0;var Ve=Object.create||function(t,e){var r;return null!==t?(He[ze]=kt(t),r=new He,He[ze]=null,r[qe]=t):r=Ge(),void 0===e?r:Be.f(r,e)},Ye=Ct.f,Xe=dt("unscopables"),Je=Array.prototype;void 0===Je[Xe]&&Ye(Je,Xe,{configurable:!0,value:Ve(null)});var Qe=function(t){Je[Xe][t]=!0};Ce({target:"Array",proto:!0},{at:function(t){var e=it(this),r=de(e),n=ce(t),o=n>=0?n:r+n;return o<0||o>=r?void 0:e[o]}}),Qe("at");var Ze=function(t,e){return b(i[t].prototype[e])},tr=(Ze("Array","at"),TypeError),er=function(t,e){if(!delete t[e])throw new tr("Cannot delete property "+Y(e)+" of "+Y(t))},rr=Math.min,nr=[].copyWithin||function(t,e){var r=it(this),n=de(r),o=he(t,n),i=he(e,n),a=arguments.length>2?arguments[2]:void 0,u=rr((void 0===a?n:he(a,n))-i,n-o),s=1;for(i0;)i in r?r[o]=r[i]:er(r,o),o+=s,i+=s;return r};Ce({target:"Array",proto:!0},{copyWithin:nr}),Qe("copyWithin"),Ze("Array","copyWithin"),Ce({target:"Array",proto:!0},{fill:function(t){for(var e=it(this),r=de(e),n=arguments.length,o=he(n>1?arguments[1]:void 0,r),i=n>2?arguments[2]:void 0,a=void 0===i?r:he(i,r);a>o;)e[o++]=t;return e}}),Qe("fill"),Ze("Array","fill");var or=function(t){if("Function"===E(t))return b(t)},ir=or(or.bind),ar=function(t,e){return J(t),void 0===e?t:s?ir(t,e):function(){return t.apply(e,arguments)}},ur=Array.isArray||function(t){return"Array"===E(t)},sr={};sr[dt("toStringTag")]="z";var cr="[object z]"===String(sr),fr=dt("toStringTag"),lr=Object,hr="Arguments"===E(function(){return arguments}()),pr=cr?E:function(t){var e,r,n;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(r=function(t,e){try{return t[e]}catch(t){}}(e=lr(t),fr))?r:hr?E(e):"Object"===(n=E(e))&&T(e.callee)?"Arguments":n},vr=function(){},dr=L("Reflect","construct"),gr=/^\s*(?:class|function)\b/,yr=b(gr.exec),mr=!gr.test(vr),br=function(t){if(!T(t))return!1;try{return dr(vr,[],t),!0}catch(t){return!1}},wr=function(t){if(!T(t))return!1;switch(pr(t)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return mr||!!yr(gr,Kt(t))}catch(t){return!0}};wr.sham=!0;var Sr=!dr||a(function(){var t;return br(br.call)||!br(Object)||!br(function(){t=!0})||t})?wr:br,Er=dt("species"),Or=Array,xr=function(t,e){return new(function(t){var e;return ur(t)&&(Sr(e=t.constructor)&&(e===Or||ur(e.prototype))||M(e)&&null===(e=e[Er]))&&(e=void 0),void 0===e?Or:e}(t))(0===e?0:e)},Rr=b([].push),Pr=function(t){var e=1===t,r=2===t,n=3===t,o=4===t,i=6===t,a=7===t,u=5===t||i;return function(s,c,f,l){for(var h,p,v=it(s),d=R(v),g=de(d),y=ar(c,f),m=0,b=l||xr,w=e?b(s,g):r||a?b(s,0):void 0;g>m;m++)if((u||m in d)&&(p=y(h=d[m],m,v),t))if(e)w[m]=p;else if(p)switch(t){case 3:return!0;case 5:return h;case 6:return m;case 2:Rr(w,h)}else switch(t){case 4:return!1;case 7:Rr(w,h)}return i?-1:n||o?o:w}},Ar={forEach:Pr(0),map:Pr(1),filter:Pr(2),some:Pr(3),every:Pr(4),find:Pr(5),findIndex:Pr(6),filterReject:Pr(7)},jr=Ar.find,kr="find",Ir=!0;kr in[]&&Array(1)[kr](function(){Ir=!1}),Ce({target:"Array",proto:!0,forced:Ir},{find:function(t){return jr(this,t,arguments.length>1?arguments[1]:void 0)}}),Qe(kr),Ze("Array","find");var Tr=Ar.findIndex,Mr="findIndex",Lr=!0;Mr in[]&&Array(1)[Mr](function(){Lr=!1}),Ce({target:"Array",proto:!0,forced:Lr},{findIndex:function(t){return Tr(this,t,arguments.length>1?arguments[1]:void 0)}}),Qe(Mr),Ze("Array","findIndex");var Ur=TypeError,Nr=function(t){if(t>9007199254740991)throw Ur("Maximum allowed index exceeded");return t},Cr=function(t,e,r,n,o,i,a,u){for(var s,c,f=o,l=0,h=!!a&&ar(a,u);l0&&ur(s)?(c=de(s),f=Cr(t,e,s,c,f,i-1)-1):(Nr(f+1),t[f]=s),f++),l++;return f},_r=Cr;Ce({target:"Array",proto:!0},{flatMap:function(t){var e,r=it(this),n=de(r);return J(t),(e=xr(r,0)).length=_r(e,r,r,n,0,1,t,arguments.length>1?arguments[1]:void 0),e}}),Qe("flatMap"),Ze("Array","flatMap"),Ce({target:"Array",proto:!0},{flat:function(){var t=arguments.length?arguments[0]:void 0,e=it(this),r=de(e),n=xr(e,0);return n.length=_r(n,e,e,r,0,void 0===t?1:ce(t)),n}}),Qe("flat"),Ze("Array","flat");var Fr,Br,Dr,zr=String,Wr=function(t){if("Symbol"===pr(t))throw new TypeError("Cannot convert a Symbol value to a string");return zr(t)},qr=b("".charAt),Hr=b("".charCodeAt),$r=b("".slice),Kr=function(t){return function(e,r){var n,o,i=Wr(j(e)),a=ce(r),u=i.length;return a<0||a>=u?t?"":void 0:(n=Hr(i,a))<55296||n>56319||a+1===u||(o=Hr(i,a+1))<56320||o>57343?t?qr(i,a):n:t?$r(i,a,a+2):o-56320+(n-55296<<10)+65536}},Gr={codeAt:Kr(!1),charAt:Kr(!0)},Vr=!a(function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}),Yr=Xt("IE_PROTO"),Xr=Object,Jr=Xr.prototype,Qr=Vr?Xr.getPrototypeOf:function(t){var e=it(t);if(ut(e,Yr))return e[Yr];var r=e.constructor;return T(r)&&e instanceof r?r.prototype:e instanceof Xr?Jr:null},Zr=dt("iterator"),tn=!1;[].keys&&("next"in(Dr=[].keys())?(Br=Qr(Qr(Dr)))!==Object.prototype&&(Fr=Br):tn=!0);var en=!M(Fr)||a(function(){var t={};return Fr[Zr].call(t)!==t});en&&(Fr={}),T(Fr[Zr])||ie(Fr,Zr,function(){return this});var rn={IteratorPrototype:Fr,BUGGY_SAFARI_ITERATORS:tn},nn=Ct.f,on=dt("toStringTag"),an=function(t,e,r){t&&!r&&(t=t.prototype),t&&!ut(t,on)&&nn(t,on,{configurable:!0,value:e})},un={},sn=rn.IteratorPrototype,cn=function(){return this},fn=function(t,e,r,n){var o=e+" Iterator";return t.prototype=Ve(sn,{next:d(+!n,r)}),an(t,o,!1),un[o]=cn,t},ln=function(t,e,r){try{return b(J(Object.getOwnPropertyDescriptor(t,e)[r]))}catch(t){}},hn=String,pn=TypeError,vn=function(t){if(function(t){return M(t)||null===t}(t))return t;throw new pn("Can't set "+hn(t)+" as a prototype")},dn=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,r={};try{(t=ln(Object.prototype,"__proto__","set"))(r,[]),e=r instanceof Array}catch(t){}return function(r,n){return j(r),vn(n),M(r)?(e?t(r,n):r.__proto__=n,r):r}}():void 0),gn=zt.PROPER,yn=zt.CONFIGURABLE,mn=rn.IteratorPrototype,bn=rn.BUGGY_SAFARI_ITERATORS,wn=dt("iterator"),Sn="keys",En="values",On="entries",xn=function(){return this},Rn=function(t,e,r,n,o,i,a){fn(r,e,n);var u,s,c,l=function(t){if(t===o&&g)return g;if(!bn&&t&&t in v)return v[t];switch(t){case Sn:case En:case On:return function(){return new r(this,t)}}return function(){return new r(this)}},h=e+" Iterator",p=!1,v=t.prototype,d=v[wn]||v["@@iterator"]||o&&v[o],g=!bn&&d||l(o),y="Array"===e&&v.entries||d;if(y&&(u=Qr(y.call(new t)))!==Object.prototype&&u.next&&(Qr(u)!==mn&&(dn?dn(u,mn):T(u[wn])||ie(u,wn,xn)),an(u,h,!0)),gn&&o===En&&d&&d.name!==En&&(yn?_t(v,"name",En):(p=!0,g=function(){return f(d,this)})),o)if(s={values:l(En),keys:i?g:l(Sn),entries:l(On)},a)for(c in s)(bn||p||!(c in v))&&ie(v,c,s[c]);else Ce({target:e,proto:!0,forced:bn||p},s);return v[wn]!==g&&ie(v,wn,g,{name:o}),un[e]=g,s},Pn=function(t,e){return{value:t,done:e}},An=Gr.charAt,jn="String Iterator",kn=ne.set,In=ne.getterFor(jn);Rn(String,"String",function(t){kn(this,{type:jn,string:Wr(t),index:0})},function(){var t,e=In(this),r=e.string,n=e.index;return n>=r.length?Pn(void 0,!0):(t=An(r,n),e.index+=t.length,Pn(t,!1))});var Tn=function(t,e,r){var n,o;kt(t);try{if(!(n=Q(t,"return"))){if("throw"===e)throw r;return r}n=f(n,t)}catch(t){o=!0,n=t}if("throw"===e)throw r;if(o)throw n;return kt(n),r},Mn=function(t,e,r,n){try{return n?e(kt(r)[0],r[1]):e(r)}catch(e){Tn(t,"throw",e)}},Ln=dt("iterator"),Un=Array.prototype,Nn=function(t){return void 0!==t&&(un.Array===t||Un[Ln]===t)},Cn=function(t,e,r){u?Ct.f(t,e,d(0,r)):t[e]=r},_n=dt("iterator"),Fn=function(t){if(!P(t))return Q(t,_n)||Q(t,"@@iterator")||un[pr(t)]},Bn=TypeError,Dn=function(t,e){var r=arguments.length<2?Fn(t):e;if(J(r))return kt(f(r,t));throw new Bn(Y(t)+" is not iterable")},zn=Array,Wn=function(t){var e=it(t),r=Sr(this),n=arguments.length,o=n>1?arguments[1]:void 0,i=void 0!==o;i&&(o=ar(o,n>2?arguments[2]:void 0));var a,u,s,c,l,h,p=Fn(e),v=0;if(!p||this===zn&&Nn(p))for(a=de(e),u=r?new this(a):zn(a);a>v;v++)h=i?o(e[v],v):e[v],Cn(u,v,h);else for(u=r?new this:[],l=(c=Dn(e,p)).next;!(s=f(l,c)).done;v++)h=i?Mn(c,o,[s.value,v],!0):s.value,Cn(u,v,h);return u.length=v,u},qn=dt("iterator"),Hn=!1;try{var $n=0,Kn={next:function(){return{done:!!$n++}},return:function(){Hn=!0}};Kn[qn]=function(){return this},Array.from(Kn,function(){throw 2})}catch(t){}var Gn=function(t,e){try{if(!e&&!Hn)return!1}catch(t){return!1}var r=!1;try{var n={};n[qn]=function(){return{next:function(){return{done:r=!0}}}},t(n)}catch(t){}return r},Vn=!Gn(function(t){Array.from(t)});Ce({target:"Array",stat:!0,forced:Vn},{from:Wn});var Yn=i,Xn=ye.includes,Jn=a(function(){return!Array(1).includes()});Ce({target:"Array",proto:!0,forced:Jn},{includes:function(t){return Xn(this,t,arguments.length>1?arguments[1]:void 0)}}),Qe("includes"),Ze("Array","includes");var Qn=Ct.f,Zn="Array Iterator",to=ne.set,eo=ne.getterFor(Zn),ro=Rn(Array,"Array",function(t,e){to(this,{type:Zn,target:k(t),index:0,kind:e})},function(){var t=eo(this),e=t.target,r=t.index++;if(!e||r>=e.length)return t.target=null,Pn(void 0,!0);switch(t.kind){case"keys":return Pn(r,!1);case"values":return Pn(e[r],!1)}return Pn([r,e[r]],!1)},"values"),no=un.Arguments=un.Array;if(Qe("keys"),Qe("values"),Qe("entries"),u&&"values"!==no.name)try{Qn(no,"name",{value:"values"})}catch(t){}cr||ie(Object.prototype,"toString",cr?{}.toString:function(){return"[object "+pr(this)+"]"},{unsafe:!0}),Ze("Array","values");var oo=Array,io=a(function(){function t(){}return!(oo.of.call(t)instanceof t)});Ce({target:"Array",stat:!0,forced:io},{of:function(){for(var t=0,e=arguments.length,r=new(Sr(this)?this:oo)(e);e>t;)Cn(r,t,arguments[t++]);return r.length=e,r}});var ao=dt("hasInstance"),uo=Function.prototype;ao in uo||Ct.f(uo,ao,{value:oe(function(t){if(!T(this)||!M(t))return!1;var e=this.prototype;return M(e)?U(e,t):t instanceof this},ao)}),dt("hasInstance");var so=function(t,e,r){return r.get&&oe(r.get,e,{getter:!0}),r.set&&oe(r.set,e,{setter:!0}),Ct.f(t,e,r)},co=zt.EXISTS,fo=Function.prototype,lo=b(fo.toString),ho=/function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/,po=b(ho.exec);u&&!co&&so(fo,"name",{configurable:!0,get:function(){try{return po(ho,lo(this))[1]}catch(t){return""}}});var vo=b([].slice),go=Oe.f,yo="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],mo={f:function(t){return yo&&"Window"===E(t)?function(t){try{return go(t)}catch(t){return vo(yo)}}(t):go(k(t))}},bo=a(function(){if("function"==typeof ArrayBuffer){var t=new ArrayBuffer(8);Object.isExtensible(t)&&Object.defineProperty(t,"a",{value:8})}}),wo=Object.isExtensible,So=a(function(){wo(1)})||bo?function(t){return!!M(t)&&(!bo||"ArrayBuffer"!==E(t))&&(!wo||wo(t))}:wo,Eo=!a(function(){return Object.isExtensible(Object.preventExtensions({}))}),Oo=e(function(t){var e=Ct.f,r=!1,n=lt("meta"),o=0,i=function(t){e(t,n,{value:{objectID:"O"+o++,weakData:{}}})},a=t.exports={enable:function(){a.enable=function(){},r=!0;var t=Oe.f,e=b([].splice),o={};o[n]=1,t(o).length&&(Oe.f=function(r){for(var o=t(r),i=0,a=o.length;ii;i++)if((u=y(t[i]))&&U(Po,u))return u;return new Ro(!1)}n=Dn(t,o)}for(s=h?t.next:n.next;!(c=f(s,n)).done;){try{u=y(c.value)}catch(t){Tn(n,"throw",t)}if("object"==typeof u&&u&&U(Po,u))return u}return new Ro(!1)},jo=TypeError,ko=function(t,e){if(U(e,t))return t;throw new jo("Incorrect invocation")},Io=function(t,e,r){var n,o;return dn&&T(n=e.constructor)&&n!==r&&M(o=n.prototype)&&o!==r.prototype&&dn(t,o),t},To=function(t,e,r){var n=-1!==t.indexOf("Map"),o=-1!==t.indexOf("Weak"),u=n?"set":"add",s=i[t],c=s&&s.prototype,f=s,l={},h=function(t){var e=b(c[t]);ie(c,t,"add"===t?function(t){return e(this,0===t?0:t),this}:"delete"===t?function(t){return!(o&&!M(t))&&e(this,0===t?0:t)}:"get"===t?function(t){return o&&!M(t)?void 0:e(this,0===t?0:t)}:"has"===t?function(t){return!(o&&!M(t))&&e(this,0===t?0:t)}:function(t,r){return e(this,0===t?0:t,r),this})};if(Ue(t,!T(s)||!(o||c.forEach&&!a(function(){(new s).entries().next()}))))f=r.getConstructor(e,t,n,u),Oo.enable();else if(Ue(t,!0)){var p=new f,v=p[u](o?{}:-0,1)!==p,d=a(function(){p.has(1)}),g=Gn(function(t){new s(t)}),y=!o&&a(function(){for(var t=new s,e=5;e--;)t[u](e,e);return!t.has(-0)});g||((f=e(function(t,e){ko(t,c);var r=Io(new s,t,f);return P(e)||Ao(e,r[u],{that:r,AS_ENTRIES:n}),r})).prototype=c,c.constructor=f),(d||y)&&(h("delete"),h("has"),n&&h("get")),(y||v)&&h(u),o&&c.clear&&delete c.clear}return l[t]=f,Ce({global:!0,constructor:!0,forced:f!==s},l),an(f,t),o||r.setStrong(f,t,n),f},Mo=function(t,e,r){for(var n in e)ie(t,n,e[n],r);return t},Lo=dt("species"),Uo=function(t){var e=L(t);u&&e&&!e[Lo]&&so(e,Lo,{configurable:!0,get:function(){return this}})},No=Oo.fastKey,Co=ne.set,_o=ne.getterFor,Fo={getConstructor:function(t,e,r,n){var o=t(function(t,o){ko(t,i),Co(t,{type:e,index:Ve(null),first:null,last:null,size:0}),u||(t.size=0),P(o)||Ao(o,t[n],{that:t,AS_ENTRIES:r})}),i=o.prototype,a=_o(e),s=function(t,e,r){var n,o,i=a(t),s=c(t,e);return s?s.value=r:(i.last=s={index:o=No(e,!0),key:e,value:r,previous:n=i.last,next:null,removed:!1},i.first||(i.first=s),n&&(n.next=s),u?i.size++:t.size++,"F"!==o&&(i.index[o]=s)),t},c=function(t,e){var r,n=a(t),o=No(e);if("F"!==o)return n.index[o];for(r=n.first;r;r=r.next)if(r.key===e)return r};return Mo(i,{clear:function(){for(var t=a(this),e=t.first;e;)e.removed=!0,e.previous&&(e.previous=e.previous.next=null),e=e.next;t.first=t.last=null,t.index=Ve(null),u?t.size=0:this.size=0},delete:function(t){var e=this,r=a(e),n=c(e,t);if(n){var o=n.next,i=n.previous;delete r.index[n.index],n.removed=!0,i&&(i.next=o),o&&(o.previous=i),r.first===n&&(r.first=o),r.last===n&&(r.last=i),u?r.size--:e.size--}return!!n},forEach:function(t){for(var e,r=a(this),n=ar(t,arguments.length>1?arguments[1]:void 0);e=e?e.next:r.first;)for(n(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!c(this,t)}}),Mo(i,r?{get:function(t){var e=c(this,t);return e&&e.value},set:function(t,e){return s(this,0===t?0:t,e)}}:{add:function(t){return s(this,t=0===t?0:t,t)}}),u&&so(i,"size",{configurable:!0,get:function(){return a(this).size}}),o},setStrong:function(t,e,r){var n=e+" Iterator",o=_o(e),i=_o(n);Rn(t,e,function(t,e){Co(this,{type:n,target:t,state:o(t),kind:e,last:null})},function(){for(var t=i(this),e=t.kind,r=t.last;r&&r.removed;)r=r.previous;return t.target&&(t.last=r=r?r.next:t.state.first)?Pn("keys"===e?r.key:"values"===e?r.value:[r.key,r.value],!1):(t.target=null,Pn(void 0,!0))},r?"entries":"values",!r,!0),Uo(e)}};To("Map",function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},Fo);var Bo=Map.prototype,Do={Map:Map,set:b(Bo.set),get:b(Bo.get),has:b(Bo.has),remove:b(Bo.delete),proto:Bo},zo=Do.Map,Wo=Do.has,qo=Do.get,Ho=Do.set,$o=b([].push),Ko=a(function(){return 1!==zo.groupBy("ab",function(t){return t}).get("a").length});Ce({target:"Map",stat:!0,forced:Ko},{groupBy:function(t,e){j(t),J(e);var r=new zo,n=0;return Ao(t,function(t){var o=e(t,n++);Wo(r,o)?$o(qo(r,o),t):Ho(r,o,[t])}),r}});var Go={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},Vo=Et("span").classList,Yo=Vo&&Vo.constructor&&Vo.constructor.prototype,Xo=Yo===Object.prototype?void 0:Yo,Jo=dt("iterator"),Qo=ro.values,Zo=function(t,e){if(t){if(t[Jo]!==Qo)try{_t(t,Jo,Qo)}catch(e){t[Jo]=Qo}if(an(t,e,!0),Go[e])for(var r in ro)if(t[r]!==ro[r])try{_t(t,r,ro[r])}catch(e){t[r]=ro[r]}}};for(var ti in Go)Zo(i[ti]&&i[ti].prototype,ti);Zo(Xo,"DOMTokenList");var ei=function(t,e,r){return function(n){var o=it(n),i=arguments.length,a=i>1?arguments[1]:void 0,u=void 0!==a,s=u?ar(a,i>2?arguments[2]:void 0):void 0,c=new t,f=0;return Ao(o,function(t){var n=u?s(t,f++):t;r?e(c,kt(n)[0],n[1]):e(c,n)}),c}};Ce({target:"Map",stat:!0,forced:!0},{from:ei(Do.Map,Do.set,!0)});var ri=function(t,e,r){return function(){for(var n=new t,o=arguments.length,i=0;i1?arguments[1]:void 0);return!1!==di(e,function(t,n){if(!r(t,n,e))return!1},!0)}});var gi=Do.Map,yi=Do.set;Ce({target:"Map",proto:!0,real:!0,forced:!0},{filter:function(t){var e=oi(this),r=ar(t,arguments.length>1?arguments[1]:void 0),n=new gi;return di(e,function(t,o){r(t,o,e)&&yi(n,o,t)}),n}}),Ce({target:"Map",proto:!0,real:!0,forced:!0},{find:function(t){var e=oi(this),r=ar(t,arguments.length>1?arguments[1]:void 0),n=di(e,function(t,n){if(r(t,n,e))return{value:t}},!0);return n&&n.value}}),Ce({target:"Map",proto:!0,real:!0,forced:!0},{findKey:function(t){var e=oi(this),r=ar(t,arguments.length>1?arguments[1]:void 0),n=di(e,function(t,n){if(r(t,n,e))return{key:n}},!0);return n&&n.key}}),Ce({target:"Map",proto:!0,real:!0,forced:!0},{includes:function(t){return!0===di(oi(this),function(e){if((r=e)===(n=t)||r!=r&&n!=n)return!0;var r,n},!0)}});var mi=Do.Map;Ce({target:"Map",stat:!0,forced:!0},{keyBy:function(t,e){var r=new(T(this)?this:mi);J(e);var n=J(r.set);return Ao(t,function(t){f(n,r,e(t),t)}),r}}),Ce({target:"Map",proto:!0,real:!0,forced:!0},{keyOf:function(t){var e=di(oi(this),function(e,r){if(e===t)return{key:r}},!0);return e&&e.key}});var bi=Do.Map,wi=Do.set;Ce({target:"Map",proto:!0,real:!0,forced:!0},{mapKeys:function(t){var e=oi(this),r=ar(t,arguments.length>1?arguments[1]:void 0),n=new bi;return di(e,function(t,o){wi(n,r(t,o,e),t)}),n}});var Si=Do.Map,Ei=Do.set;Ce({target:"Map",proto:!0,real:!0,forced:!0},{mapValues:function(t){var e=oi(this),r=ar(t,arguments.length>1?arguments[1]:void 0),n=new Si;return di(e,function(t,o){Ei(n,o,r(t,o,e))}),n}});var Oi=Do.set;Ce({target:"Map",proto:!0,real:!0,arity:1,forced:!0},{merge:function(t){for(var e=oi(this),r=arguments.length,n=0;n1?arguments[1]:void 0);return!0===di(e,function(t,n){if(r(t,n,e))return!0},!0)}});var Ri=TypeError,Pi=Do.get,Ai=Do.has,ji=Do.set;Ce({target:"Map",proto:!0,real:!0,forced:!0},{update:function(t,e){var r=oi(this),n=arguments.length;J(e);var o=Ai(r,t);if(!o&&n<3)throw new Ri("Updating absent value");var i=o?Pi(r,t):J(n>2?arguments[2]:void 0)(t,r);return ji(r,t,e(i,t,r)),r}});var ki=TypeError,Ii=function(t,e){var r,n=kt(this),o=J(n.get),i=J(n.has),a=J(n.set),u=arguments.length>2?arguments[2]:void 0;if(!T(e)&&!T(u))throw new ki("At least one callback required");return f(i,n,t)?(r=f(o,n,t),T(e)&&(r=e(r),f(a,n,t,r))):T(u)&&(r=u(),f(a,n,t,r)),r};Ce({target:"Map",proto:!0,real:!0,forced:!0},{upsert:Ii}),Ce({target:"Map",proto:!0,real:!0,name:"upsert",forced:!0},{updateOrInsert:Ii});var Ti=b(1..valueOf),Mi="\t\n\v\f\r                 \u2028\u2029\ufeff",Li=b("".replace),Ui=RegExp("^["+Mi+"]+"),Ni=RegExp("(^|[^"+Mi+"])["+Mi+"]+$"),Ci=function(t){return function(e){var r=Wr(j(e));return 1&t&&(r=Li(r,Ui,"")),2&t&&(r=Li(r,Ni,"$1")),r}},_i={start:Ci(1),end:Ci(2),trim:Ci(3)},Fi=Oe.f,Bi=Rt.f,Di=Ct.f,zi=_i.trim,Wi="Number",qi=i[Wi],Hi=qi.prototype,$i=i.TypeError,Ki=b("".slice),Gi=b("".charCodeAt),Vi=Ue(Wi,!qi(" 0o1")||!qi("0b1")||qi("+0x1")),Yi=function(t){var e,r=arguments.length<1?0:qi(function(t){var e=mt(t,"number");return"bigint"==typeof e?e:function(t){var e,r,n,o,i,a,u,s,c=mt(t,"number");if(G(c))throw new $i("Cannot convert a Symbol value to a number");if("string"==typeof c&&c.length>2)if(c=zi(c),43===(e=Gi(c,0))||45===e){if(88===(r=Gi(c,2))||120===r)return NaN}else if(48===e){switch(Gi(c,1)){case 66:case 98:n=2,o=49;break;case 79:case 111:n=8,o=55;break;default:return+c}for(a=(i=Ki(c,2)).length,u=0;uo)return NaN;return parseInt(i,n)}return+c}(e)}(t));return U(Hi,e=this)&&a(function(){Ti(e)})?Io(Object(r),this,Yi):r};Yi.prototype=Hi,Vi&&(Hi.constructor=Yi),Ce({global:!0,constructor:!0,wrap:!0,forced:Vi},{Number:Yi}),Vi&&function(t,e){for(var r,n=u?Fi(e):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range".split(","),o=0;n.length>o;o++)ut(e,r=n[o])&&!ut(t,r)&&Di(t,r,Bi(e,r))}(Yn[Wi],qi),Ce({target:"Number",stat:!0,nonConfigurable:!0,nonWritable:!0},{EPSILON:Math.pow(2,-52)});var Xi=i.isFinite;Ce({target:"Number",stat:!0},{isFinite:Number.isFinite||function(t){return"number"==typeof t&&Xi(t)}});var Ji=Math.floor,Qi=Number.isInteger||function(t){return!M(t)&&isFinite(t)&&Ji(t)===t};Ce({target:"Number",stat:!0},{isInteger:Qi}),Ce({target:"Number",stat:!0},{isNaN:function(t){return t!=t}});var Zi=Math.abs;Ce({target:"Number",stat:!0},{isSafeInteger:function(t){return Qi(t)&&Zi(t)<=9007199254740991}}),Ce({target:"Number",stat:!0,nonConfigurable:!0,nonWritable:!0},{MAX_SAFE_INTEGER:9007199254740991}),Ce({target:"Number",stat:!0,nonConfigurable:!0,nonWritable:!0},{MIN_SAFE_INTEGER:-9007199254740991});var ta=_i.trim,ea=b("".charAt),ra=i.parseFloat,na=i.Symbol,oa=na&&na.iterator,ia=1/ra(Mi+"-0")!=-Infinity||oa&&!a(function(){ra(Object(oa))})?function(t){var e=ta(Wr(t)),r=ra(e);return 0===r&&"-"===ea(e,0)?-0:r}:ra;Ce({target:"Number",stat:!0,forced:Number.parseFloat!==ia},{parseFloat:ia});var aa=_i.trim,ua=i.parseInt,sa=i.Symbol,ca=sa&&sa.iterator,fa=/^[+-]?0x/i,la=b(fa.exec),ha=8!==ua(Mi+"08")||22!==ua(Mi+"0x16")||ca&&!a(function(){ua(Object(ca))})?function(t,e){var r=aa(Wr(t));return ua(r,e>>>0||(la(fa,r)?16:10))}:ua;Ce({target:"Number",stat:!0,forced:Number.parseInt!==ha},{parseInt:ha});var pa=b(v.f),va=b([].push),da=u&&a(function(){var t=Object.create(null);return t[2]=2,!pa(t,2)}),ga=function(t){return function(e){for(var r,n=k(e),o=_e(n),i=da&&null===Qr(n),a=o.length,s=0,c=[];a>s;)r=o[s++],u&&!(i?r in n:pa(n,r))||va(c,t?[r,n[r]]:n[r]);return c}},ya={entries:ga(!0),values:ga(!1)},ma=ya.entries;Ce({target:"Object",stat:!0},{entries:function(t){return ma(t)}}),Ce({target:"Object",stat:!0,sham:!u},{getOwnPropertyDescriptors:function(t){for(var e,r,n=k(t),o=Rt.f,i=Pe(n),a={},u=0;i.length>u;)void 0!==(r=o(n,e=i[u++]))&&Cn(a,e,r);return a}});var ba=a(function(){_e(1)});Ce({target:"Object",stat:!0,forced:ba},{keys:function(t){return _e(it(t))}});var wa=Object.is||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e};Ce({target:"Object",stat:!0},{is:wa});var Sa=ya.values;Ce({target:"Object",stat:!0},{values:function(t){return Sa(t)}}),Ce({target:"Object",stat:!0},{hasOwn:ut});var Ea=Function.prototype,Oa=Ea.apply,xa=Ea.call,Ra="object"==typeof Reflect&&Reflect.apply||(s?xa.bind(Oa):function(){return xa.apply(Oa,arguments)}),Pa=!a(function(){Reflect.apply(function(){})});Ce({target:"Reflect",stat:!0,forced:Pa},{apply:function(t,e,r){return Ra(J(t),e,kt(r))}});var Aa=Function,ja=b([].concat),ka=b([].join),Ia={},Ta=s?Aa.bind:function(t){var e=J(this),r=e.prototype,n=vo(arguments,1),o=function(){var r=ja(n,vo(arguments));return this instanceof o?function(t,e,r){if(!ut(Ia,e)){for(var n=[],o=0;ob)","g");return"b"!==t.exec("b").groups.a||"bc"!=="b".replace(t,"$c")}),gs=Oe.f,ys=ne.enforce,ms=dt("match"),bs=i.RegExp,ws=bs.prototype,Ss=i.SyntaxError,Es=b(ws.exec),Os=b("".charAt),xs=b("".replace),Rs=b("".indexOf),Ps=b("".slice),As=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,js=/a/g,ks=/a/g,Is=new bs(js)!==js,Ts=cs.MISSED_STICKY,Ms=cs.UNSUPPORTED_Y,Ls=u&&(!Is||Ts||ps||ds||a(function(){return ks[ms]=!1,bs(js)!==js||bs(ks)===ks||"/a/i"!==String(bs(js,"i"))}));if(Ue("RegExp",Ls)){for(var Us=function(t,e){var r,n,o,i,a,u,s=U(ws,this),c=es(t),f=void 0===e,l=[],h=t;if(!s&&c&&f&&t.constructor===Us)return t;if((c||U(ws,t))&&(t=t.source,f&&(e=os(h))),t=void 0===t?"":Wr(t),e=void 0===e?"":Wr(e),h=t,ps&&"dotAll"in js&&(n=!!e&&Rs(e,"s")>-1)&&(e=xs(e,/s/g,"")),r=e,Ts&&"sticky"in js&&(o=!!e&&Rs(e,"y")>-1)&&Ms&&(e=xs(e,/y/g,"")),ds&&(i=function(t){for(var e,r=t.length,n=0,o="",i=[],a=Ve(null),u=!1,s=!1,c=0,f="";n<=r;n++){if("\\"===(e=Os(t,n)))e+=Os(t,++n);else if("]"===e)u=!1;else if(!u)switch(!0){case"["===e:u=!0;break;case"("===e:if(o+=e,"?:"===Ps(t,n+1,n+3))continue;Es(As,Ps(t,n+1))&&(n+=2,s=!0),c++;continue;case">"===e&&s:if(""===f||ut(a,f))throw new Ss("Invalid capture group name");a[f]=!0,i[i.length]=[f,c],s=!1,f="";continue}s?f+=e:o+=e}return[o,i]}(t),t=i[0],l=i[1]),a=Io(bs(t,e),s?this:ws,Us),(n||o||l.length)&&(u=ys(a),n&&(u.dotAll=!0,u.raw=Us(function(t){for(var e,r=t.length,n=0,o="",i=!1;n<=r;n++)"\\"!==(e=Os(t,n))?i||"."!==e?("["===e?i=!0:"]"===e&&(i=!1),o+=e):o+="[\\s\\S]":o+=e+Os(t,++n);return o}(t),r)),o&&(u.sticky=!0),l.length&&(u.groups=l)),t!==h)try{_t(a,"source",""===h?"(?:)":h)}catch(t){}return a},Ns=gs(bs),Cs=0;Ns.length>Cs;)ls(Us,bs,Ns[Cs++]);ws.constructor=Us,Us.prototype=ws,ie(i,"RegExp",Us,{constructor:!0})}Uo("RegExp");var _s=zt.PROPER,Fs="toString",Bs=RegExp.prototype,Ds=Bs[Fs];(a(function(){return"/a/b"!==Ds.call({source:"a",flags:"b"})})||_s&&Ds.name!==Fs)&&ie(Bs,Fs,function(){var t=kt(this);return"/"+Wr(t.source)+"/"+Wr(os(t))},{unsafe:!0});var zs=ne.get,Ws=RegExp.prototype,qs=TypeError;u&&ps&&so(Ws,"dotAll",{configurable:!0,get:function(){if(this!==Ws){if("RegExp"===E(this))return!!zs(this).dotAll;throw new qs("Incompatible receiver, RegExp required")}}});var Hs=ne.get,$s=nt("native-string-replace",String.prototype.replace),Ks=RegExp.prototype.exec,Gs=Ks,Vs=b("".charAt),Ys=b("".indexOf),Xs=b("".replace),Js=b("".slice),Qs=function(){var t=/a/,e=/b*/g;return f(Ks,t,"a"),f(Ks,e,"a"),0!==t.lastIndex||0!==e.lastIndex}(),Zs=cs.BROKEN_CARET,tc=void 0!==/()??/.exec("")[1];(Qs||tc||Zs||ps||ds)&&(Gs=function(t){var e,r,n,o,i,a,u,s=this,c=Hs(s),l=Wr(t),h=c.raw;if(h)return h.lastIndex=s.lastIndex,e=f(Gs,h,l),s.lastIndex=h.lastIndex,e;var p=c.groups,v=Zs&&s.sticky,d=f(rs,s),g=s.source,y=0,m=l;if(v&&(d=Xs(d,"y",""),-1===Ys(d,"g")&&(d+="g"),m=Js(l,s.lastIndex),s.lastIndex>0&&(!s.multiline||s.multiline&&"\n"!==Vs(l,s.lastIndex-1))&&(g="(?: "+g+")",m=" "+m,y++),r=new RegExp("^(?:"+g+")",d)),tc&&(r=new RegExp("^"+g+"$(?!\\s)",d)),Qs&&(n=s.lastIndex),o=f(Ks,v?r:s,m),v?o?(o.input=Js(o.input,y),o[0]=Js(o[0],y),o.index=s.lastIndex,s.lastIndex+=o[0].length):s.lastIndex=0:Qs&&o&&(s.lastIndex=s.global?o.index+o[0].length:n),tc&&o&&o.length>1&&f($s,o[0],r,function(){for(i=1;i]*>)/g,Oc=/\$([$&'`]|\d{1,2})/g,xc=function(t,e,r,n,o,i){var a=r+t.length,u=n.length,s=Oc;return void 0!==o&&(o=it(o),s=Ec),wc(i,s,function(i,s){var c;switch(bc(s,0)){case"$":return"$";case"&":return t;case"`":return Sc(e,0,r);case"'":return Sc(e,a);case"<":c=o[Sc(s,1,-1)];break;default:var f=+s;if(0===f)return i;if(f>u){var l=mc(f/10);return 0===l?i:l<=u?void 0===n[l-1]?bc(s,1):n[l-1]+bc(s,1):i}c=n[f-1]}return void 0===c?"":c})},Rc=dt("replace"),Pc=Math.max,Ac=Math.min,jc=b([].concat),kc=b([].push),Ic=b("".indexOf),Tc=b("".slice),Mc="$0"==="a".replace(/./,"$0"),Lc=!!/./[Rc]&&""===/./[Rc]("a","$0"),Uc=!a(function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$")});pc("replace",function(t,e,r){var n=Lc?"$":"$0";return[function(t,r){var n=j(this),o=P(t)?void 0:Q(t,Rc);return o?f(o,t,n,r):f(e,Wr(n),t,r)},function(t,o){var i=kt(this),a=Wr(t);if("string"==typeof o&&-1===Ic(o,n)&&-1===Ic(o,"$<")){var u=r(e,i,a,o);if(u.done)return u.value}var s=T(o);s||(o=Wr(o));var c,f=i.global;f&&(c=i.unicode,i.lastIndex=0);for(var l,h=[];null!==(l=yc(i,a))&&(kc(h,l),f);)""===Wr(l[0])&&(i.lastIndex=dc(a,ve(i.lastIndex),c));for(var p,v="",d=0,g=0;g=d&&(v+=Tc(a,d,b)+y,d=b+m.length)}return v+Tc(a,d)}]},!Uc||!Mc||Lc),pc("search",function(t,e,r){return[function(e){var r=j(this),n=P(e)?void 0:Q(e,t);return n?f(n,e,r):new RegExp(e)[t](Wr(r))},function(t){var n=kt(this),o=Wr(t),i=r(e,n,o);if(i.done)return i.value;var a=n.lastIndex;wa(a,0)||(n.lastIndex=0);var u=yc(n,o);return wa(n.lastIndex,a)||(n.lastIndex=a),null===u?-1:u.index}]});var Nc=dt("species"),Cc=function(t,e){var r,n=kt(t).constructor;return void 0===n||P(r=kt(n)[Nc])?e:La(r)},_c=cs.UNSUPPORTED_Y,Fc=Math.min,Bc=b([].push),Dc=b("".slice),zc=!a(function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var r="ab".split(t);return 2!==r.length||"a"!==r[0]||"b"!==r[1]}),Wc="c"==="abbc".split(/(b)*/)[1]||4!=="test".split(/(?:)/,-1).length||2!=="ab".split(/(?:ab)*/).length||4!==".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length;pc("split",function(t,e,r){var n="0".split(void 0,0).length?function(t,r){return void 0===t&&0===r?[]:f(e,this,t,r)}:e;return[function(e,r){var o=j(this),i=P(e)?void 0:Q(e,t);return i?f(i,e,o,r):f(n,Wr(o),e,r)},function(t,o){var i=kt(this),a=Wr(t);if(!Wc){var u=r(n,i,a,o,n!==e);if(u.done)return u.value}var s=Cc(i,RegExp),c=i.unicode,f=new s(_c?"^(?:"+i.source+")":i,(i.ignoreCase?"i":"")+(i.multiline?"m":"")+(i.unicode?"u":"")+(_c?"g":"y")),l=void 0===o?4294967295:o>>>0;if(0===l)return[];if(0===a.length)return null===yc(f,a)?[a]:[];for(var h=0,p=0,v=[];p0;(n>>>=1)&&(e+=e))1&n&&(r+=e);return r},Kc=b($c),Gc=b("".slice),Vc=Math.ceil,Yc=function(t){return function(e,r,n){var o,i,a=Wr(j(e)),u=ve(r),s=a.length,c=void 0===n?" ":Wr(n);return u<=s||""===c?a:((i=Kc(c,Vc((o=u-s)/c.length))).length>o&&(i=Gc(i,0,o)),t?a+i:i+a)}},Xc={start:Yc(!1),end:Yc(!0)},Jc=Xc.start,Qc=Array,Zc=RegExp.escape,tf=b("".charAt),ef=b("".charCodeAt),rf=b(1.1.toString),nf=b([].join),of=/^[0-9a-z]/i,af=/^[$()*+./?[\\\]^{|}]/,uf=RegExp("^[!\"#%&',\\-:;<=>@`~"+Mi+"]"),sf=b(of.exec),cf={"\t":"t","\n":"n","\v":"v","\f":"f","\r":"r"},ff=function(t){var e=rf(ef(t,0),16);return e.length<3?"\\x"+Jc(e,2,"0"):"\\u"+Jc(e,4,"0")},lf=!Zc||"\\x61b"!==Zc("ab");Ce({target:"RegExp",stat:!0,forced:lf},{escape:function(t){!function(t){if("string"==typeof t)return t;throw new qc("Argument is not a string")}(t);for(var e=t.length,r=Qc(e),n=0;n=56320||n+1>=e||56320!=(64512&ef(t,n+1))?r[n]=ff(o):(r[n]=o,r[++n]=tf(t,n))}}return nf(r,"")}}),To("Set",function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},Fo);var hf=Set.prototype,pf={Set:Set,add:b(hf.add),has:b(hf.has),remove:b(hf.delete),proto:hf},vf=pf.has,df=function(t){return vf(t),t},gf=pf.Set,yf=pf.proto,mf=b(yf.forEach),bf=b(yf.keys),wf=bf(new gf).next,Sf=function(t,e,r){return r?ci({iterator:bf(t),next:wf},e):mf(t,e)},Ef=pf.Set,Of=pf.add,xf=function(t){var e=new Ef;return Sf(t,function(t){Of(e,t)}),e},Rf=ln(pf.proto,"size","get")||function(t){return t.size},Pf="Invalid size",Af=RangeError,jf=TypeError,kf=Math.max,If=function(t,e){this.set=t,this.size=kf(e,0),this.has=J(t.has),this.keys=J(t.keys)};If.prototype={getIterator:function(){return{iterator:t=kt(f(this.keys,this.set)),next:t.next,done:!1};var t},includes:function(t){return f(this.has,this.set,t)}};var Tf=function(t){kt(t);var e=+t.size;if(e!=e)throw new jf(Pf);var r=ce(e);if(r<0)throw new Af(Pf);return new If(t,r)},Mf=pf.has,Lf=pf.remove,Uf=function(t){var e=df(this),r=Tf(t),n=xf(e);return Rf(e)<=r.size?Sf(e,function(t){r.includes(t)&&Lf(n,t)}):ci(r.getIterator(),function(t){Mf(e,t)&&Lf(n,t)}),n},Nf=function(t){return{size:t,has:function(){return!1},keys:function(){return{next:function(){return{done:!0}}}}}},Cf=function(t){var e=L("Set");try{(new e)[t](Nf(0));try{return(new e)[t](Nf(-1)),!1}catch(t){return!0}}catch(t){return!1}};Ce({target:"Set",proto:!0,real:!0,forced:!Cf("difference")},{difference:Uf});var _f=pf.Set,Ff=pf.add,Bf=pf.has,Df=function(t){var e=df(this),r=Tf(t),n=new _f;return Rf(e)>r.size?ci(r.getIterator(),function(t){Bf(e,t)&&Ff(n,t)}):Sf(e,function(t){r.includes(t)&&Ff(n,t)}),n},zf=!Cf("intersection")||a(function(){return"3,2"!==String(Array.from(new Set([1,2,3]).intersection(new Set([3,2]))))});Ce({target:"Set",proto:!0,real:!0,forced:zf},{intersection:Df});var Wf=pf.has,qf=function(t){var e=df(this),r=Tf(t);if(Rf(e)<=r.size)return!1!==Sf(e,function(t){if(r.includes(t))return!1},!0);var n=r.getIterator();return!1!==ci(n,function(t){if(Wf(e,t))return Tn(n,"normal",!1)})};Ce({target:"Set",proto:!0,real:!0,forced:!Cf("isDisjointFrom")},{isDisjointFrom:qf});var Hf=function(t){var e=df(this),r=Tf(t);return!(Rf(e)>r.size)&&!1!==Sf(e,function(t){if(!r.includes(t))return!1},!0)};Ce({target:"Set",proto:!0,real:!0,forced:!Cf("isSubsetOf")},{isSubsetOf:Hf});var $f=pf.has,Kf=function(t){var e=df(this),r=Tf(t);if(Rf(e)1?arguments[1]:void 0);return!1!==Sf(e,function(t){if(!r(t,t,e))return!1},!0)}});var el=dt("iterator"),rl=Object,nl=L("Set"),ol=function(t){return function(t){return M(t)&&"number"==typeof t.size&&T(t.has)&&T(t.keys)}(t)?t:function(t){if(P(t))return!1;var e=rl(t);return void 0!==e[el]||"@@iterator"in e||ut(un,pr(e))}(t)?new nl(t):t};Ce({target:"Set",proto:!0,real:!0,forced:!0},{difference:function(t){return f(Uf,this,ol(t))}});var il=pf.Set,al=pf.add;Ce({target:"Set",proto:!0,real:!0,forced:!0},{filter:function(t){var e=df(this),r=ar(t,arguments.length>1?arguments[1]:void 0),n=new il;return Sf(e,function(t){r(t,t,e)&&al(n,t)}),n}}),Ce({target:"Set",proto:!0,real:!0,forced:!0},{find:function(t){var e=df(this),r=ar(t,arguments.length>1?arguments[1]:void 0),n=Sf(e,function(t){if(r(t,t,e))return{value:t}},!0);return n&&n.value}}),Ce({target:"Set",proto:!0,real:!0,forced:!0},{intersection:function(t){return f(Df,this,ol(t))}}),Ce({target:"Set",proto:!0,real:!0,forced:!0},{isDisjointFrom:function(t){return f(qf,this,ol(t))}}),Ce({target:"Set",proto:!0,real:!0,forced:!0},{isSubsetOf:function(t){return f(Hf,this,ol(t))}}),Ce({target:"Set",proto:!0,real:!0,forced:!0},{isSupersetOf:function(t){return f(Kf,this,ol(t))}});var ul=b([].join),sl=b([].push);Ce({target:"Set",proto:!0,real:!0,forced:!0},{join:function(t){var e=df(this),r=void 0===t?",":Wr(t),n=[];return Sf(e,function(t){sl(n,t)}),ul(n,r)}});var cl=pf.Set,fl=pf.add;Ce({target:"Set",proto:!0,real:!0,forced:!0},{map:function(t){var e=df(this),r=ar(t,arguments.length>1?arguments[1]:void 0),n=new cl;return Sf(e,function(t){fl(n,r(t,t,e))}),n}});var ll=TypeError;Ce({target:"Set",proto:!0,real:!0,forced:!0},{reduce:function(t){var e=df(this),r=arguments.length<2,n=r?void 0:arguments[1];if(J(t),Sf(e,function(o){r?(r=!1,n=o):n=t(n,o,o,e)}),r)throw new ll("Reduce of empty set with no initial value");return n}}),Ce({target:"Set",proto:!0,real:!0,forced:!0},{some:function(t){var e=df(this),r=ar(t,arguments.length>1?arguments[1]:void 0);return!0===Sf(e,function(t){if(r(t,t,e))return!0},!0)}}),Ce({target:"Set",proto:!0,real:!0,forced:!0},{symmetricDifference:function(t){return f(Xf,this,ol(t))}}),Ce({target:"Set",proto:!0,real:!0,forced:!0},{union:function(t){return f(Qf,this,ol(t))}});var hl=dt("species"),pl=dt("isConcatSpreadable"),vl=W>=51||!a(function(){var t=[];return t[pl]=!1,t.concat()[0]!==t}),dl=function(t){if(!M(t))return!1;var e=t[pl];return void 0!==e?!!e:ur(t)},gl=!(vl&&(W>=51||!a(function(){var t=[];return(t.constructor={})[hl]=function(){return{foo:1}},1!==t.concat(Boolean).foo})));Ce({target:"Array",proto:!0,arity:1,forced:gl},{concat:function(t){var e,r,n,o,i,a=it(this),u=xr(a,0),s=0;for(e=-1,n=arguments.length;e1?arguments[1]:void 0,n=e.length,o=void 0===r?n:ip(ve(r),n),i=Wr(t);return op(e,o-i.length,o)===i}}),Ze("String","endsWith");var sp=RangeError,cp=String.fromCharCode,fp=String.fromCodePoint,lp=b([].join);Ce({target:"String",stat:!0,arity:1,forced:!!fp&&1!==fp.length},{fromCodePoint:function(t){for(var e,r=[],n=arguments.length,o=0;n>o;){if(e=+arguments[o++],he(e,1114111)!==e)throw new sp(e+" is not a valid code point");r[o]=e<65536?cp(e):cp(55296+((e-=65536)>>10),e%1024+56320)}return lp(r,"")}});var hp=b("".indexOf);Ce({target:"String",proto:!0,forced:!rp("includes")},{includes:function(t){return!!~hp(Wr(j(this)),Wr(tp(t)),arguments.length>1?arguments[1]:void 0)}}),Ze("String","includes"),b(un.String);var pp=/Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(_),vp=Xc.start;Ce({target:"String",proto:!0,forced:pp},{padStart:function(t){return vp(this,t,arguments.length>1?arguments[1]:void 0)}}),Ze("String","padStart");var dp=Xc.end;Ce({target:"String",proto:!0,forced:pp},{padEnd:function(t){return dp(this,t,arguments.length>1?arguments[1]:void 0)}}),Ze("String","padEnd");var gp=b([].push),yp=b([].join);Ce({target:"String",stat:!0},{raw:function(t){var e=k(it(t).raw),r=de(e);if(!r)return"";for(var n=arguments.length,o=[],i=0;;){if(gp(o,Wr(e[i++])),i===r)return yp(o,"");i1?arguments[1]:void 0,e.length)),n=Wr(t);return bp(e,r,r+n.length)===n}}),Ze("String","startsWith");var Op=zt.PROPER,xp=function(t){return a(function(){return!!Mi[t]()||"​…᠎"!=="​…᠎"[t]()||Op&&Mi[t].name!==t})},Rp=_i.start,Pp=xp("trimStart")?function(){return Rp(this)}:"".trimStart;Ce({target:"String",proto:!0,name:"trimStart",forced:"".trimLeft!==Pp},{trimLeft:Pp}),Ce({target:"String",proto:!0,name:"trimStart",forced:"".trimStart!==Pp},{trimStart:Pp}),Ze("String","trimLeft");var Ap=_i.end,jp=xp("trimEnd")?function(){return Ap(this)}:"".trimEnd;Ce({target:"String",proto:!0,name:"trimEnd",forced:"".trimRight!==jp},{trimRight:jp}),Ce({target:"String",proto:!0,name:"trimEnd",forced:"".trimEnd!==jp},{trimEnd:jp}),Ze("String","trimRight");var kp=Object.getOwnPropertyDescriptor,Ip=function(t){if(!u)return i[t];var e=kp(i,t);return e&&e.value},Tp=dt("iterator"),Mp=!a(function(){var t=new URL("b?a=1&b=2&c=3","https://a"),e=t.searchParams,r=new URLSearchParams("a=1&a=2&b=3"),n="";return t.pathname="c%20d",e.forEach(function(t,r){e.delete("b"),n+=r+t}),r.delete("a",2),r.delete("b",void 0),!e.size&&!u||!e.sort||"https://a/c%20d?a=1&c=3"!==t.href||"3"!==e.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!e[Tp]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("https://тест").host||"#%D0%B1"!==new URL("https://a#б").hash||"a1c3"!==n||"x"!==new URL("https://x",void 0).host}),Lp=TypeError,Up=function(t,e){if(t0;)t[o]=t[--o];o!==i++&&(t[o]=n)}else for(var a=Np(r/2),u=Cp(vo(t,0,a),e),s=Cp(vo(t,a),e),c=u.length,f=s.length,l=0,h=0;l0&&0!=(t&r);r>>=1)e++;return e},pv=function(t){var e=null;switch(t.length){case 1:e=t[0];break;case 2:e=(31&t[0])<<6|63&t[1];break;case 3:e=(15&t[0])<<12|(63&t[1])<<6|63&t[2];break;case 4:e=(7&t[0])<<18|(63&t[1])<<12|(63&t[2])<<6|63&t[3]}return e>1114111?null:e},vv=function(t){for(var e=(t=nv(t,cv," ")).length,r="",n=0;ne){r+="%",n++;continue}var i=lv(t,n+1);if(i!=i){r+=o,n++;continue}n+=2;var a=hv(i);if(0===a)o=Jp(i);else{if(1===a||a>4){r+="�",n++;continue}for(var u=[i],s=1;se||"%"!==tv(t,n));){var c=lv(t,n+1);if(c!=c){n+=3;break}if(c>191||c<128)break;rv(u,c),n+=2,s++}if(u.length!==a){r+="�";continue}var f=pv(u);null===f?r+="�":o=Qp(f)}}r+=o,n++}return r},dv=/[!'()~]|%20/g,gv={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},yv=function(t){return gv[t]},mv=function(t){return nv(Xp(t),dv,yv)},bv=fn(function(t,e){zp(this,{type:Dp,target:Wp(t).entries,index:0,kind:e})},Bp,function(){var t=qp(this),e=t.target,r=t.index++;if(!e||r>=e.length)return t.target=null,Pn(void 0,!0);var n=e[r];switch(t.kind){case"keys":return Pn(n.key,!1);case"values":return Pn(n.value,!1)}return Pn([n.key,n.value],!1)},!0),wv=function(t){this.entries=[],this.url=null,void 0!==t&&(M(t)?this.parseObject(t):this.parseQuery("string"==typeof t?"?"===tv(t,0)?uv(t,1):t:Wr(t)))};wv.prototype={type:Bp,bindURL:function(t){this.url=t,this.update()},parseObject:function(t){var e,r,n,o,i,a,u,s=this.entries,c=Fn(t);if(c)for(r=(e=Dn(t,c)).next;!(n=f(r,e)).done;){if(o=Dn(kt(n.value)),(a=f(i=o.next,o)).done||(u=f(i,o)).done||!f(i,o).done)throw new Yp("Expected sequence with length 2");rv(s,{key:Wr(a.value),value:Wr(u.value)})}else for(var l in t)ut(t,l)&&rv(s,{key:l,value:Wr(t[l])})},parseQuery:function(t){if(t)for(var e,r,n=this.entries,o=av(t,"&"),i=0;i0?arguments[0]:void 0));u||(this.size=t.entries.length)},Ev=Sv.prototype;if(Mo(Ev,{append:function(t,e){var r=Wp(this);Up(arguments.length,2),rv(r.entries,{key:Wr(t),value:Wr(e)}),u||this.length++,r.updateURL()},delete:function(t){for(var e=Wp(this),r=Up(arguments.length,1),n=e.entries,o=Wr(t),i=r<2?void 0:arguments[1],a=void 0===i?i:Wr(i),s=0;se.key?1:-1}),t.updateURL()},forEach:function(t){for(var e,r=Wp(this).entries,n=ar(t,arguments.length>1?arguments[1]:void 0),o=0;o1?Rv(arguments[1]):{})}}),T($p)){var Pv=function(t){return ko(this,Gp),new $p(t,arguments.length>1?Rv(arguments[1]):{})};Gp.constructor=Pv,Pv.prototype=Gp,Ce({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:Pv})}}var Av={URLSearchParams:Sv,getState:Wp},jv=URLSearchParams,kv=jv.prototype,Iv=b(kv.append),Tv=b(kv.delete),Mv=b(kv.forEach),Lv=b([].push),Uv=new jv("a=1&a=2&b=3");Uv.delete("a",1),Uv.delete("b",void 0),Uv+""!="a=2"&&ie(kv,"delete",function(t){var e=arguments.length,r=e<2?void 0:arguments[1];if(e&&void 0===r)return Tv(this,t);var n=[];Mv(this,function(t,e){Lv(n,{key:e,value:t})}),Up(e,1);for(var o,i=Wr(t),a=Wr(r),u=0,s=0,c=!1,f=n.length;uo;)for(var s,c=R(arguments[o++]),l=i?$v(_e(c),i(c)):_e(c),h=l.length,p=0;h>p;)s=l[p++],u&&!f(a,c,s)||(r[s]=c[s]);return r}:qv,Gv=2147483647,Vv=/[^\0-\u007E]/,Yv=/[.\u3002\uFF0E\uFF61]/g,Xv="Overflow: input needs wider integers to process",Jv=RangeError,Qv=b(Yv.exec),Zv=Math.floor,td=String.fromCharCode,ed=b("".charCodeAt),rd=b([].join),nd=b([].push),od=b("".replace),id=b("".split),ad=b("".toLowerCase),ud=function(t){return t+22+75*(t<26)},sd=function(t,e,r){var n=0;for(t=r?Zv(t/700):t>>1,t+=Zv(t/e);t>455;)t=Zv(t/35),n+=36;return Zv(n+36*t/(t+38))},cd=function(t){var e=[];t=function(t){for(var e=[],r=0,n=t.length;r=55296&&o<=56319&&r=i&&nZv((Gv-a)/l))throw new Jv(Xv);for(a+=(f-i)*l,i=f,r=0;rGv)throw new Jv(Xv);if(n===i){for(var h=a,p=36;;){var v=p<=u?1:p>=u+26?26:p-u;if(h?@[\\\]^|]/,qd=/[\0\t\n\r #/:<>?@[\\\]^|]/,Hd=/^[\u0000-\u0020]+/,$d=/(^|[^\u0000-\u0020])[\u0000-\u0020]+$/,Kd=/[\t\n\r]/g,Gd=function(t){var e,r,n,o;if("number"==typeof t){for(e=[],r=0;r<4;r++)Td(e,t%256),t=md(t/256);return Ed(e,".")}if("object"==typeof t){for(e="",n=function(t){for(var e=null,r=1,n=null,o=0,i=0;i<8;i++)0!==t[i]?(o>r&&(e=n,r=o),n=null,o=0):(null===n&&(n=i),++o);return o>r?n:e}(t),r=0;r<8;r++)o&&0===t[r]||(o&&(o=!1),n===r?(e+=r?":":"::",o=!0):(e+=Od(t[r],16),r<7&&(e+=":")));return"["+e+"]"}return t},Vd={},Yd=Kv({},Vd,{" ":1,'"':1,"<":1,">":1,"`":1}),Xd=Kv({},Yd,{"#":1,"?":1,"{":1,"}":1}),Jd=Kv({},Xd,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),Qd=function(t,e){var r=fd(t,0);return r>32&&r<127&&!ut(e,t)?t:encodeURIComponent(t)},Zd={ftp:21,file:null,http:80,https:443,ws:80,wss:443},tg=function(t,e){var r;return 2===t.length&&Sd(Nd,wd(t,0))&&(":"===(r=wd(t,1))||!e&&"|"===r)},eg=function(t){var e;return t.length>1&&tg(kd(t,0,2))&&(2===t.length||"/"===(e=wd(t,2))||"\\"===e||"?"===e||"#"===e)},rg=function(t){return"."===t||"%2e"===Id(t)},ng={},og={},ig={},ag={},ug={},sg={},cg={},fg={},lg={},hg={},pg={},vg={},dg={},gg={},yg={},mg={},bg={},wg={},Sg={},Eg={},Og={},xg=function(t,e,r){var n,o,i,a=Wr(t);if(e){if(o=this.parse(a))throw new gd(o);this.searchParams=null}else{if(void 0!==r&&(n=new xg(r,!0)),o=this.parse(a,null,n))throw new gd(o);(i=vd(new pd)).bindURL(this),this.searchParams=i}};xg.prototype={type:"URL",parse:function(t,e,r){var n,o,i,a,u,s=this,c=e||ng,f=0,l="",h=!1,p=!1,v=!1;for(t=Wr(t),e||(s.scheme="",s.username="",s.password="",s.host=null,s.port=null,s.path=[],s.query=null,s.fragment=null,s.cannotBeABaseURL=!1,t=Pd(t,Hd,""),t=Pd(t,$d,"$1")),t=Pd(t,Kd,""),n=Wn(t);f<=n.length;){switch(o=n[f],c){case ng:if(!o||!Sd(Nd,o)){if(e)return Md;c=ig;continue}l+=Id(o),c=og;break;case og:if(o&&(Sd(Cd,o)||"+"===o||"-"===o||"."===o))l+=Id(o);else{if(":"!==o){if(e)return Md;l="",c=ig,f=0;continue}if(e&&(s.isSpecial()!==ut(Zd,l)||"file"===l&&(s.includesCredentials()||null!==s.port)||"file"===s.scheme&&!s.host))return;if(s.scheme=l,e)return void(s.isSpecial()&&Zd[s.scheme]===s.port&&(s.port=null));l="","file"===s.scheme?c=gg:s.isSpecial()&&r&&r.scheme===s.scheme?c=ag:s.isSpecial()?c=fg:"/"===n[f+1]?(c=ug,f++):(s.cannotBeABaseURL=!0,Rd(s.path,""),c=Sg)}break;case ig:if(!r||r.cannotBeABaseURL&&"#"!==o)return Md;if(r.cannotBeABaseURL&&"#"===o){s.scheme=r.scheme,s.path=vo(r.path),s.query=r.query,s.fragment="",s.cannotBeABaseURL=!0,c=Og;break}c="file"===r.scheme?gg:sg;continue;case ag:if("/"!==o||"/"!==n[f+1]){c=sg;continue}c=lg,f++;break;case ug:if("/"===o){c=hg;break}c=wg;continue;case sg:if(s.scheme=r.scheme,o===Wv)s.username=r.username,s.password=r.password,s.host=r.host,s.port=r.port,s.path=vo(r.path),s.query=r.query;else if("/"===o||"\\"===o&&s.isSpecial())c=cg;else if("?"===o)s.username=r.username,s.password=r.password,s.host=r.host,s.port=r.port,s.path=vo(r.path),s.query="",c=Eg;else{if("#"!==o){s.username=r.username,s.password=r.password,s.host=r.host,s.port=r.port,s.path=vo(r.path),s.path.length--,c=wg;continue}s.username=r.username,s.password=r.password,s.host=r.host,s.port=r.port,s.path=vo(r.path),s.query=r.query,s.fragment="",c=Og}break;case cg:if(!s.isSpecial()||"/"!==o&&"\\"!==o){if("/"!==o){s.username=r.username,s.password=r.password,s.host=r.host,s.port=r.port,c=wg;continue}c=hg}else c=lg;break;case fg:if(c=lg,"/"!==o||"/"!==wd(l,f+1))continue;f++;break;case lg:if("/"!==o&&"\\"!==o){c=hg;continue}break;case hg:if("@"===o){h&&(l="%40"+l),h=!0,i=Wn(l);for(var d=0;d65535)return Ud;s.port=s.isSpecial()&&m===Zd[s.scheme]?null:m,l=""}if(e)return;c=bg;continue}return Ud}l+=o;break;case gg:if(s.scheme="file","/"===o||"\\"===o)c=yg;else{if(!r||"file"!==r.scheme){c=wg;continue}switch(o){case Wv:s.host=r.host,s.path=vo(r.path),s.query=r.query;break;case"?":s.host=r.host,s.path=vo(r.path),s.query="",c=Eg;break;case"#":s.host=r.host,s.path=vo(r.path),s.query=r.query,s.fragment="",c=Og;break;default:eg(Ed(vo(n,f),""))||(s.host=r.host,s.path=vo(r.path),s.shortenPath()),c=wg;continue}}break;case yg:if("/"===o||"\\"===o){c=mg;break}r&&"file"===r.scheme&&!eg(Ed(vo(n,f),""))&&(tg(r.path[0],!0)?Rd(s.path,r.path[0]):s.host=r.host),c=wg;continue;case mg:if(o===Wv||"/"===o||"\\"===o||"?"===o||"#"===o){if(!e&&tg(l))c=wg;else if(""===l){if(s.host="",e)return;c=bg}else{if(a=s.parseHost(l))return a;if("localhost"===s.host&&(s.host=""),e)return;l="",c=bg}continue}l+=o;break;case bg:if(s.isSpecial()){if(c=wg,"/"!==o&&"\\"!==o)continue}else if(e||"?"!==o)if(e||"#"!==o){if(o!==Wv&&(c=wg,"/"!==o))continue}else s.fragment="",c=Og;else s.query="",c=Eg;break;case wg:if(o===Wv||"/"===o||"\\"===o&&s.isSpecial()||!e&&("?"===o||"#"===o)){if(".."===(u=Id(u=l))||"%2e."===u||".%2e"===u||"%2e%2e"===u?(s.shortenPath(),"/"===o||"\\"===o&&s.isSpecial()||Rd(s.path,"")):rg(l)?"/"===o||"\\"===o&&s.isSpecial()||Rd(s.path,""):("file"===s.scheme&&!s.path.length&&tg(l)&&(s.host&&(s.host=""),l=wd(l,0)+":"),Rd(s.path,l)),l="","file"===s.scheme&&(o===Wv||"?"===o||"#"===o))for(;s.path.length>1&&""===s.path[0];)Ad(s.path);"?"===o?(s.query="",c=Eg):"#"===o&&(s.fragment="",c=Og)}else l+=Qd(o,Xd);break;case Sg:"?"===o?(s.query="",c=Eg):"#"===o?(s.fragment="",c=Og):o!==Wv&&(s.path[0]+=Qd(o,Vd));break;case Eg:e||"#"!==o?o!==Wv&&("'"===o&&s.isSpecial()?s.query+="%27":s.query+="#"===o?"%23":Qd(o,Vd)):(s.fragment="",c=Og);break;case Og:o!==Wv&&(s.fragment+=Qd(o,Yd))}f++}},parseHost:function(t){var e,r,n;if("["===wd(t,0)){if("]"!==wd(t,t.length-1))return Ld;if(e=function(t){var e,r,n,o,i,a,u,s=[0,0,0,0,0,0,0,0],c=0,f=null,l=0,h=function(){return wd(t,l)};if(":"===h()){if(":"!==wd(t,1))return;l+=2,f=++c}for(;h();){if(8===c)return;if(":"!==h()){for(e=r=0;r<4&&Sd(zd,h());)e=16*e+yd(h(),16),l++,r++;if("."===h()){if(0===r)return;if(l-=r,c>6)return;for(n=0;h();){if(o=null,n>0){if(!("."===h()&&n<4))return;l++}if(!Sd(_d,h()))return;for(;Sd(_d,h());){if(i=yd(h(),10),null===o)o=i;else{if(0===o)return;o=10*o+i}if(o>255)return;l++}s[c]=256*s[c]+o,2!=++n&&4!==n||c++}if(4!==n)return;break}if(":"===h()){if(l++,!h())return}else if(h())return;s[c++]=e}else{if(null!==f)return;l++,f=++c}}if(null!==f)for(a=c-f,c=7;0!==c&&a>0;)u=s[c],s[c--]=s[f+a-1],s[f+--a]=u;else if(8!==c)return;return s}(kd(t,1,-1)),!e)return Ld;this.host=e}else if(this.isSpecial()){if(t=function(t){var e,r,n=[],o=id(od(ad(t),Yv,"."),".");for(e=0;e4)return t;for(r=[],n=0;n1&&"0"===wd(o,0)&&(i=Sd(Fd,o)?16:8,o=kd(o,8===i?1:2)),""===o)a=0;else{if(!Sd(10===i?Dd:8===i?Bd:zd,o))return t;a=yd(o,i)}Rd(r,a)}for(n=0;n=bd(256,5-e))return null}else if(a>255)return null;for(u=xd(r),n=0;n1?arguments[1]:void 0,n=ld(e,new xg(t,!1,r));u||(e.href=n.serialize(),e.origin=n.getOrigin(),e.protocol=n.getProtocol(),e.username=n.getUsername(),e.password=n.getPassword(),e.host=n.getHost(),e.hostname=n.getHostname(),e.port=n.getPort(),e.pathname=n.getPathname(),e.search=n.getSearch(),e.searchParams=n.getSearchParams(),e.hash=n.getHash())},Pg=Rg.prototype,Ag=function(t,e){return{get:function(){return hd(this)[t]()},set:e&&function(t){return hd(this)[e](t)},configurable:!0,enumerable:!0}};if(u&&(so(Pg,"href",Ag("serialize","setHref")),so(Pg,"origin",Ag("getOrigin")),so(Pg,"protocol",Ag("getProtocol","setProtocol")),so(Pg,"username",Ag("getUsername","setUsername")),so(Pg,"password",Ag("getPassword","setPassword")),so(Pg,"host",Ag("getHost","setHost")),so(Pg,"hostname",Ag("getHostname","setHostname")),so(Pg,"port",Ag("getPort","setPort")),so(Pg,"pathname",Ag("getPathname","setPathname")),so(Pg,"search",Ag("getSearch","setSearch")),so(Pg,"searchParams",Ag("getSearchParams")),so(Pg,"hash",Ag("getHash","setHash"))),ie(Pg,"toJSON",function(){return hd(this).serialize()},{enumerable:!0}),ie(Pg,"toString",function(){return hd(this).serialize()},{enumerable:!0}),dd){var jg=dd.createObjectURL,kg=dd.revokeObjectURL;jg&&ie(Rg,"createObjectURL",ar(jg,dd)),kg&&ie(Rg,"revokeObjectURL",ar(kg,dd))}an(Rg,"URL"),Ce({global:!0,constructor:!0,forced:!Mp,sham:!u},{URL:Rg});var Ig=L("URL"),Tg=Mp&&a(function(){Ig.canParse()}),Mg=a(function(){return 1!==Ig.canParse.length});Ce({target:"URL",stat:!0,forced:!Tg||Mg},{canParse:function(t){var e=Up(arguments.length,1),r=Wr(t),n=e<2||void 0===arguments[1]?void 0:Wr(arguments[1]);try{return!!new Ig(r,n)}catch(t){return!1}}});var Lg=L("URL");Ce({target:"URL",stat:!0,forced:!Mp},{parse:function(t){var e=Up(arguments.length,1),r=Wr(t),n=e<2||void 0===arguments[1]?void 0:Wr(arguments[1]);try{return new Lg(r,n)}catch(t){return null}}}),Ce({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return f(URL.prototype.toString,this)}});var Ug=WeakMap.prototype,Ng={WeakMap:WeakMap,set:b(Ug.set),get:b(Ug.get),has:b(Ug.has),remove:b(Ug.delete)},Cg=Ng.has,_g=function(t){return Cg(t),t},Fg=Ng.get,Bg=Ng.has,Dg=Ng.set;Ce({target:"WeakMap",proto:!0,real:!0,forced:!0},{emplace:function(t,e){var r,n,o=_g(this);return Bg(o,t)?(r=Fg(o,t),"update"in e&&(r=e.update(r,t,o),Dg(o,t,r)),r):(n=e.insert(t,o),Dg(o,t,n),n)}}),Ce({target:"WeakMap",stat:!0,forced:!0},{from:ei(Ng.WeakMap,Ng.set,!0)}),Ce({target:"WeakMap",stat:!0,forced:!0},{of:ri(Ng.WeakMap,Ng.set,!0)});var zg=Ng.remove;Ce({target:"WeakMap",proto:!0,real:!0,forced:!0},{deleteAll:function(){for(var t,e=_g(this),r=!0,n=0,o=arguments.length;n2&&(n=r,M(o=arguments[2])&&"cause"in o&&_t(n,"cause",o.cause));var s=[];return Ao(t,ny,{that:s}),_t(r,"errors",s),r};dn?dn(oy,ry):Ae(oy,ry,{name:!0});var iy=oy.prototype=Ve(ry.prototype,{constructor:d(1,oy),message:d(1,""),name:d(1,"AggregateError")});Ce({global:!0,constructor:!0,arity:2},{AggregateError:oy});var ay,uy,sy,cy,fy=function(t){return _.slice(0,t.length)===t},ly=fy("Bun/")?"BUN":fy("Cloudflare-Workers")?"CLOUDFLARE":fy("Deno/")?"DENO":fy("Node.js/")?"NODE":i.Bun&&"string"==typeof Bun.version?"BUN":i.Deno&&"object"==typeof Deno.version?"DENO":"process"===E(i.process)?"NODE":i.window&&i.document?"BROWSER":"REST",hy="NODE"===ly,py=/(?:ipad|iphone|ipod).*applewebkit/i.test(_),vy=i.setImmediate,dy=i.clearImmediate,gy=i.process,yy=i.Dispatch,my=i.Function,by=i.MessageChannel,wy=i.String,Sy=0,Ey={},Oy="onreadystatechange";a(function(){ay=i.location});var xy=function(t){if(ut(Ey,t)){var e=Ey[t];delete Ey[t],e()}},Ry=function(t){return function(){xy(t)}},Py=function(t){xy(t.data)},Ay=function(t){i.postMessage(wy(t),ay.protocol+"//"+ay.host)};vy&&dy||(vy=function(t){Up(arguments.length,1);var e=T(t)?t:my(t),r=vo(arguments,1);return Ey[++Sy]=function(){Ra(e,void 0,r)},uy(Sy),Sy},dy=function(t){delete Ey[t]},hy?uy=function(t){gy.nextTick(Ry(t))}:yy&&yy.now?uy=function(t){yy.now(Ry(t))}:by&&!py?(cy=(sy=new by).port2,sy.port1.onmessage=Py,uy=ar(cy.postMessage,cy)):i.addEventListener&&T(i.postMessage)&&!i.importScripts&&ay&&"file:"!==ay.protocol&&!a(Ay)?(uy=Ay,i.addEventListener("message",Py,!1)):uy=Oy in Et("script")?function(t){De.appendChild(Et("script"))[Oy]=function(){De.removeChild(this),xy(t)}}:function(t){setTimeout(Ry(t),0)});var jy={set:vy,clear:dy},ky=function(){this.head=null,this.tail=null};ky.prototype={add:function(t){var e={item:t,next:null},r=this.tail;r?r.next=e:this.head=e,this.tail=e},get:function(){var t=this.head;if(t)return null===(this.head=t.next)&&(this.tail=null),t.item}};var Iy,Ty,My,Ly,Uy,Ny=ky,Cy=/ipad|iphone|ipod/i.test(_)&&"undefined"!=typeof Pebble,_y=/web0s(?!.*chrome)/i.test(_),Fy=jy.set,By=i.MutationObserver||i.WebKitMutationObserver,Dy=i.document,zy=i.process,Wy=i.Promise,qy=Ip("queueMicrotask");if(!qy){var Hy=new Ny,$y=function(){var t,e;for(hy&&(t=zy.domain)&&t.exit();e=Hy.get();)try{e()}catch(t){throw Hy.head&&Iy(),t}t&&t.enter()};py||hy||_y||!By||!Dy?!Cy&&Wy&&Wy.resolve?((Ly=Wy.resolve(void 0)).constructor=Wy,Uy=ar(Ly.then,Ly),Iy=function(){Uy($y)}):hy?Iy=function(){zy.nextTick($y)}:(Fy=ar(Fy,i),Iy=function(){Fy($y)}):(Ty=!0,My=Dy.createTextNode(""),new By($y).observe(My,{characterData:!0}),Iy=function(){My.data=Ty=!Ty}),qy=function(t){Hy.head||Iy(),Hy.add(t)}}var Ky,Gy,Vy,Yy=qy,Xy=function(t){try{return{error:!1,value:t()}}catch(t){return{error:!0,value:t}}},Jy=i.Promise,Qy=dt("species"),Zy=!1,tm=T(i.PromiseRejectionEvent),em=Ue("Promise",function(){var t=Kt(Jy),e=t!==String(Jy);if(!e&&66===W)return!0;if(!W||W<51||!/native code/.test(t)){var r=new Jy(function(t){t(1)}),n=function(t){t(function(){},function(){})};if((r.constructor={})[Qy]=n,!(Zy=r.then(function(){})instanceof n))return!0}return!(e||"BROWSER"!==ly&&"DENO"!==ly||tm)}),rm={CONSTRUCTOR:em,REJECTION_EVENT:tm,SUBCLASSING:Zy},nm=TypeError,om=function(t){var e,r;this.promise=new t(function(t,n){if(void 0!==e||void 0!==r)throw new nm("Bad Promise constructor");e=t,r=n}),this.resolve=J(e),this.reject=J(r)},im={f:function(t){return new om(t)}},am=jy.set,um="Promise",sm=rm.CONSTRUCTOR,cm=rm.REJECTION_EVENT,fm=rm.SUBCLASSING,lm=ne.getterFor(um),hm=ne.set,pm=Jy&&Jy.prototype,vm=Jy,dm=pm,gm=i.TypeError,ym=i.document,mm=i.process,bm=im.f,wm=bm,Sm=!!(ym&&ym.createEvent&&i.dispatchEvent),Em="unhandledrejection",Om=function(t){var e;return!(!M(t)||!T(e=t.then))&&e},xm=function(t,e){var r,n,o,i=e.value,a=1===e.state,u=a?t.ok:t.fail,s=t.resolve,c=t.reject,l=t.domain;try{u?(a||(2===e.rejection&&km(e),e.rejection=1),!0===u?r=i:(l&&l.enter(),r=u(i),l&&(l.exit(),o=!0)),r===t.promise?c(new gm("Promise-chain cycle")):(n=Om(r))?f(n,r,s,c):s(r)):c(i)}catch(t){l&&!o&&l.exit(),c(t)}},Rm=function(t,e){t.notified||(t.notified=!0,Yy(function(){for(var r,n=t.reactions;r=n.get();)xm(r,t);t.notified=!1,e&&!t.rejection&&Am(t)}))},Pm=function(t,e,r){var n,o;Sm?((n=ym.createEvent("Event")).promise=e,n.reason=r,n.initEvent(t,!1,!0),i.dispatchEvent(n)):n={promise:e,reason:r},!cm&&(o=i["on"+t])?o(n):t===Em&&function(t,e){try{1===arguments.length?console.error(t):console.error(t,e)}catch(t){}}("Unhandled promise rejection",r)},Am=function(t){f(am,i,function(){var e,r=t.facade,n=t.value;if(jm(t)&&(e=Xy(function(){hy?mm.emit("unhandledRejection",n,r):Pm(Em,r,n)}),t.rejection=hy||jm(t)?2:1,e.error))throw e.value})},jm=function(t){return 1!==t.rejection&&!t.parent},km=function(t){f(am,i,function(){var e=t.facade;hy?mm.emit("rejectionHandled",e):Pm("rejectionhandled",e,t.value)})},Im=function(t,e,r){return function(n){t(e,n,r)}},Tm=function(t,e,r){t.done||(t.done=!0,r&&(t=r),t.value=e,t.state=2,Rm(t,!0))},Mm=function(t,e,r){if(!t.done){t.done=!0,r&&(t=r);try{if(t.facade===e)throw new gm("Promise can't be resolved itself");var n=Om(e);n?Yy(function(){var r={done:!1};try{f(n,e,Im(Mm,r,t),Im(Tm,r,t))}catch(e){Tm(r,e,t)}}):(t.value=e,t.state=1,Rm(t,!1))}catch(e){Tm({done:!1},e,t)}}};if(sm&&(vm=function(t){ko(this,dm),J(t),f(Ky,this);var e=lm(this);try{t(Im(Mm,e),Im(Tm,e))}catch(t){Tm(e,t)}},(Ky=function(t){hm(this,{type:um,done:!1,notified:!1,parent:!1,reactions:new Ny,rejection:!1,state:0,value:null})}).prototype=ie(dm=vm.prototype,"then",function(t,e){var r=lm(this),n=bm(Cc(this,vm));return r.parent=!0,n.ok=!T(t)||t,n.fail=T(e)&&e,n.domain=hy?mm.domain:void 0,0===r.state?r.reactions.add(n):Yy(function(){xm(n,r)}),n.promise}),Gy=function(){var t=new Ky,e=lm(t);this.promise=t,this.resolve=Im(Mm,e),this.reject=Im(Tm,e)},im.f=bm=function(t){return t===vm||void 0===t?new Gy(t):wm(t)},T(Jy)&&pm!==Object.prototype)){Vy=pm.then,fm||ie(pm,"then",function(t,e){var r=this;return new vm(function(t,e){f(Vy,r,t,e)}).then(t,e)},{unsafe:!0});try{delete pm.constructor}catch(t){}dn&&dn(pm,dm)}Ce({global:!0,constructor:!0,wrap:!0,forced:sm},{Promise:vm}),an(vm,um,!1),Uo(um);var Lm=rm.CONSTRUCTOR||!Gn(function(t){Jy.all(t).then(void 0,function(){})});Ce({target:"Promise",stat:!0,forced:Lm},{all:function(t){var e=this,r=im.f(e),n=r.resolve,o=r.reject,i=Xy(function(){var r=J(e.resolve),i=[],a=0,u=1;Ao(t,function(t){var s=a++,c=!1;u++,f(r,e,t).then(function(t){c||(c=!0,i[s]=t,--u||n(i))},o)}),--u||n(i)});return i.error&&o(i.value),r.promise}});var Um=Jy&&Jy.prototype;if(Ce({target:"Promise",proto:!0,forced:rm.CONSTRUCTOR,real:!0},{catch:function(t){return this.then(void 0,t)}}),T(Jy)){var Nm=L("Promise").prototype.catch;Um.catch!==Nm&&ie(Um,"catch",Nm,{unsafe:!0})}Ce({target:"Promise",stat:!0,forced:Lm},{race:function(t){var e=this,r=im.f(e),n=r.reject,o=Xy(function(){var o=J(e.resolve);Ao(t,function(t){f(o,e,t).then(r.resolve,n)})});return o.error&&n(o.value),r.promise}}),Ce({target:"Promise",stat:!0,forced:rm.CONSTRUCTOR},{reject:function(t){var e=im.f(this);return(0,e.reject)(t),e.promise}});var Cm=function(t,e){if(kt(t),M(e)&&e.constructor===t)return e;var r=im.f(t);return(0,r.resolve)(e),r.promise};Ce({target:"Promise",stat:!0,forced:rm.CONSTRUCTOR},{resolve:function(t){return Cm(this,t)}}),Ce({target:"Promise",stat:!0,forced:Lm},{allSettled:function(t){var e=this,r=im.f(e),n=r.resolve,o=r.reject,i=Xy(function(){var r=J(e.resolve),o=[],i=0,a=1;Ao(t,function(t){var u=i++,s=!1;a++,f(r,e,t).then(function(t){s||(s=!0,o[u]={status:"fulfilled",value:t},--a||n(o))},function(t){s||(s=!0,o[u]={status:"rejected",reason:t},--a||n(o))})}),--a||n(o)});return i.error&&o(i.value),r.promise}});var _m="No one promise resolved";Ce({target:"Promise",stat:!0,forced:Lm},{any:function(t){var e=this,r=L("AggregateError"),n=im.f(e),o=n.resolve,i=n.reject,a=Xy(function(){var n=J(e.resolve),a=[],u=0,s=1,c=!1;Ao(t,function(t){var l=u++,h=!1;s++,f(n,e,t).then(function(t){h||c||(c=!0,o(t))},function(t){h||c||(h=!0,a[l]=t,--s||i(new r(a,_m)))})}),--s||i(new r(a,_m))});return a.error&&i(a.value),n.promise}}),Ce({target:"Promise",stat:!0},{withResolvers:function(){var t=im.f(this);return{promise:t.promise,resolve:t.resolve,reject:t.reject}}});var Fm=Jy&&Jy.prototype,Bm=!!Jy&&a(function(){Fm.finally.call({then:function(){}},function(){})});if(Ce({target:"Promise",proto:!0,real:!0,forced:Bm},{finally:function(t){var e=Cc(this,L("Promise")),r=T(t);return this.then(r?function(r){return Cm(e,t()).then(function(){return r})}:t,r?function(r){return Cm(e,t()).then(function(){throw r})}:t)}}),T(Jy)){var Dm=L("Promise").prototype.finally;Fm.finally!==Dm&&ie(Fm,"finally",Dm,{unsafe:!0})}var zm=i.Promise,Wm=!1,qm=!zm||!zm.try||Xy(function(){zm.try(function(t){Wm=8===t},8)}).error||!Wm;Ce({target:"Promise",stat:!0,forced:qm},{try:function(t){var e=arguments.length>1?vo(arguments,1):[],r=im.f(this),n=Xy(function(){return Ra(J(t),void 0,e)});return(n.error?r.reject:r.resolve)(n.value),r.promise}}),Ze("Promise","finally");var Hm="URLSearchParams"in self,$m="Symbol"in self&&"iterator"in Symbol,Km="FileReader"in self&&"Blob"in self&&function(){try{return new Blob,!0}catch(t){return!1}}(),Gm="FormData"in self,Vm="ArrayBuffer"in self;if(Vm)var Ym=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],Xm=ArrayBuffer.isView||function(t){return t&&Ym.indexOf(Object.prototype.toString.call(t))>-1};function Jm(t){if("string"!=typeof t&&(t=String(t)),/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(t))throw new TypeError("Invalid character in header field name");return t.toLowerCase()}function Qm(t){return"string"!=typeof t&&(t=String(t)),t}function Zm(t){var e={next:function(){var e=t.shift();return{done:void 0===e,value:e}}};return $m&&(e[Symbol.iterator]=function(){return e}),e}function tb(t){this.map={},t instanceof tb?t.forEach(function(t,e){this.append(e,t)},this):Array.isArray(t)?t.forEach(function(t){this.append(t[0],t[1])},this):t&&Object.getOwnPropertyNames(t).forEach(function(e){this.append(e,t[e])},this)}function eb(t){if(t.bodyUsed)return Promise.reject(new TypeError("Already read"));t.bodyUsed=!0}function rb(t){return new Promise(function(e,r){t.onload=function(){e(t.result)},t.onerror=function(){r(t.error)}})}function nb(t){var e=new FileReader,r=rb(e);return e.readAsArrayBuffer(t),r}function ob(t){if(t.slice)return t.slice(0);var e=new Uint8Array(t.byteLength);return e.set(new Uint8Array(t)),e.buffer}function ib(){return this.bodyUsed=!1,this._initBody=function(t){var e;this._bodyInit=t,t?"string"==typeof t?this._bodyText=t:Km&&Blob.prototype.isPrototypeOf(t)?this._bodyBlob=t:Gm&&FormData.prototype.isPrototypeOf(t)?this._bodyFormData=t:Hm&&URLSearchParams.prototype.isPrototypeOf(t)?this._bodyText=t.toString():Vm&&Km&&(e=t)&&DataView.prototype.isPrototypeOf(e)?(this._bodyArrayBuffer=ob(t.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):Vm&&(ArrayBuffer.prototype.isPrototypeOf(t)||Xm(t))?this._bodyArrayBuffer=ob(t):this._bodyText=t=Object.prototype.toString.call(t):this._bodyText="",this.headers.get("content-type")||("string"==typeof t?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):Hm&&URLSearchParams.prototype.isPrototypeOf(t)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},Km&&(this.blob=function(){var t=eb(this);if(t)return t;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?eb(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(nb)}),this.text=function(){var t=eb(this);if(t)return t;if(this._bodyBlob)return function(t){var e=new FileReader,r=rb(e);return e.readAsText(t),r}(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(function(t){for(var e=new Uint8Array(t),r=new Array(e.length),n=0;n-1?e:t}(e.method||this.method||"GET"),this.mode=e.mode||this.mode||null,this.signal=e.signal||this.signal,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&r)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(r)}function sb(t){var e=new FormData;return t.trim().split("&").forEach(function(t){if(t){var r=t.split("="),n=r.shift().replace(/\+/g," "),o=r.join("=").replace(/\+/g," ");e.append(decodeURIComponent(n),decodeURIComponent(o))}}),e}function cb(t,e){e||(e={}),this.type="default",this.status=void 0===e.status?200:e.status,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in e?e.statusText:"OK",this.headers=new tb(e.headers),this.url=e.url||"",this._initBody(t)}ub.prototype.clone=function(){return new ub(this,{body:this._bodyInit})},ib.call(ub.prototype),ib.call(cb.prototype),cb.prototype.clone=function(){return new cb(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new tb(this.headers),url:this.url})},cb.error=function(){var t=new cb(null,{status:0,statusText:""});return t.type="error",t};var fb=[301,302,303,307,308];cb.redirect=function(t,e){if(-1===fb.indexOf(e))throw new RangeError("Invalid status code");return new cb(null,{status:e,headers:{location:t}})};var lb=self.DOMException;try{new lb}catch(t){(lb=function(t,e){this.message=t,this.name=e;var r=Error(t);this.stack=r.stack}).prototype=Object.create(Error.prototype),lb.prototype.constructor=lb}function hb(t,e){return new Promise(function(r,n){var o=new ub(t,e);if(o.signal&&o.signal.aborted)return n(new lb("Aborted","AbortError"));var i=new XMLHttpRequest;function a(){i.abort()}i.onload=function(){var t,e,n={status:i.status,statusText:i.statusText,headers:(t=i.getAllResponseHeaders()||"",e=new tb,t.replace(/\r?\n[\t ]+/g," ").split(/\r?\n/).forEach(function(t){var r=t.split(":"),n=r.shift().trim();if(n){var o=r.join(":").trim();e.append(n,o)}}),e)};n.url="responseURL"in i?i.responseURL:n.headers.get("X-Request-URL"),r(new cb("response"in i?i.response:i.responseText,n))},i.onerror=function(){n(new TypeError("Network request failed"))},i.ontimeout=function(){n(new TypeError("Network request failed"))},i.onabort=function(){n(new lb("Aborted","AbortError"))},i.open(o.method,o.url,!0),"include"===o.credentials?i.withCredentials=!0:"omit"===o.credentials&&(i.withCredentials=!1),"responseType"in i&&Km&&(i.responseType="blob"),o.headers.forEach(function(t,e){i.setRequestHeader(e,t)}),o.signal&&(o.signal.addEventListener("abort",a),i.onreadystatechange=function(){4===i.readyState&&o.signal.removeEventListener("abort",a)}),i.send(void 0===o._bodyInit?null:o._bodyInit)})}hb.polyfill=!0,self.fetch||(self.fetch=hb,self.Headers=tb,self.Request=ub,self.Response=cb);var pb=Object.getOwnPropertySymbols,vb=Object.prototype.hasOwnProperty,db=Object.prototype.propertyIsEnumerable,gb=function(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},r=0;r<10;r++)e["_"+String.fromCharCode(r)]=r;if("0123456789"!==Object.getOwnPropertyNames(e).map(function(t){return e[t]}).join(""))return!1;var n={};return"abcdefghijklmnopqrst".split("").forEach(function(t){n[t]=t}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},n)).join("")}catch(t){return!1}}()?Object.assign:function(t,e){for(var r,n,o=function(t){if(null==t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}(t),i=1;i{"use strict";var t,r,n,i,s,o,a,l,c,u,d,p,f,m,h,g,v,y,x,w,b,_,j,M,S,R=e.i(43476),N=e.i(71645),k=e.i(75056),V=e.i(25234),A=e.i(43257),P=e.i(8560),C=e.i(28600);function T(e,t,r){t.traverse(t=>{t.material&&(e.properties.remove(t.material),null==t.material.dispose||t.material.dispose())}),e.info.programs.length=0,e.compile(t,r)}function I({focus:e=0,samples:t=10,size:r=25}){let n=(0,C.useThree)(e=>e.gl),i=(0,C.useThree)(e=>e.scene),s=(0,C.useThree)(e=>e.camera);return N.useEffect(()=>{let o=P.ShaderChunk.shadowmap_pars_fragment;return P.ShaderChunk.shadowmap_pars_fragment=P.ShaderChunk.shadowmap_pars_fragment.replace("#ifdef USE_SHADOWMAP","#ifdef USE_SHADOWMAP\n"+(({focus:e=0,size:t=25,samples:r=10}={})=>` -#define PENUMBRA_FILTER_SIZE float(${t}) -#define RGB_NOISE_FUNCTION(uv) (randRGB(uv)) -vec3 randRGB(vec2 uv) { - return vec3( - fract(sin(dot(uv, vec2(12.75613, 38.12123))) * 13234.76575), - fract(sin(dot(uv, vec2(19.45531, 58.46547))) * 43678.23431), - fract(sin(dot(uv, vec2(23.67817, 78.23121))) * 93567.23423) - ); -} - -vec3 lowPassRandRGB(vec2 uv) { - // 3x3 convolution (average) - // can be implemented as separable with an extra buffer for a total of 6 samples instead of 9 - vec3 result = vec3(0); - result += RGB_NOISE_FUNCTION(uv + vec2(-1.0, -1.0)); - result += RGB_NOISE_FUNCTION(uv + vec2(-1.0, 0.0)); - result += RGB_NOISE_FUNCTION(uv + vec2(-1.0, +1.0)); - result += RGB_NOISE_FUNCTION(uv + vec2( 0.0, -1.0)); - result += RGB_NOISE_FUNCTION(uv + vec2( 0.0, 0.0)); - result += RGB_NOISE_FUNCTION(uv + vec2( 0.0, +1.0)); - result += RGB_NOISE_FUNCTION(uv + vec2(+1.0, -1.0)); - result += RGB_NOISE_FUNCTION(uv + vec2(+1.0, 0.0)); - result += RGB_NOISE_FUNCTION(uv + vec2(+1.0, +1.0)); - result *= 0.111111111; // 1.0 / 9.0 - return result; -} -vec3 highPassRandRGB(vec2 uv) { - // by subtracting the low-pass signal from the original signal, we're being left with the high-pass signal - // hp(x) = x - lp(x) - return RGB_NOISE_FUNCTION(uv) - lowPassRandRGB(uv) + 0.5; -} - - -vec2 vogelDiskSample(int sampleIndex, int sampleCount, float angle) { - const float goldenAngle = 2.399963f; // radians - float r = sqrt(float(sampleIndex) + 0.5f) / sqrt(float(sampleCount)); - float theta = float(sampleIndex) * goldenAngle + angle; - float sine = sin(theta); - float cosine = cos(theta); - return vec2(cosine, sine) * r; -} -float penumbraSize( const in float zReceiver, const in float zBlocker ) { // Parallel plane estimation - return (zReceiver - zBlocker) / zBlocker; -} -float findBlocker(sampler2D shadowMap, vec2 uv, float compare, float angle) { - float texelSize = 1.0 / float(textureSize(shadowMap, 0).x); - float blockerDepthSum = float(${e}); - float blockers = 0.0; - - int j = 0; - vec2 offset = vec2(0.); - float depth = 0.; - - #pragma unroll_loop_start - for(int i = 0; i < ${r}; i ++) { - offset = (vogelDiskSample(j, ${r}, angle) * texelSize) * 2.0 * PENUMBRA_FILTER_SIZE; - depth = unpackRGBAToDepth( texture2D( shadowMap, uv + offset)); - if (depth < compare) { - blockerDepthSum += depth; - blockers++; - } - j++; - } - #pragma unroll_loop_end - - if (blockers > 0.0) { - return blockerDepthSum / blockers; - } - return -1.0; -} - - -float vogelFilter(sampler2D shadowMap, vec2 uv, float zReceiver, float filterRadius, float angle) { - float texelSize = 1.0 / float(textureSize(shadowMap, 0).x); - float shadow = 0.0f; - int j = 0; - vec2 vogelSample = vec2(0.0); - vec2 offset = vec2(0.0); - #pragma unroll_loop_start - for (int i = 0; i < ${r}; i++) { - vogelSample = vogelDiskSample(j, ${r}, angle) * texelSize; - offset = vogelSample * (1.0 + filterRadius * float(${t})); - shadow += step( zReceiver, unpackRGBAToDepth( texture2D( shadowMap, uv + offset ) ) ); - j++; - } - #pragma unroll_loop_end - return shadow * 1.0 / ${r}.0; -} - -float PCSS (sampler2D shadowMap, vec4 coords) { - vec2 uv = coords.xy; - float zReceiver = coords.z; // Assumed to be eye-space z in this code - float angle = highPassRandRGB(gl_FragCoord.xy).r * PI2; - float avgBlockerDepth = findBlocker(shadowMap, uv, zReceiver, angle); - if (avgBlockerDepth == -1.0) { - return 1.0; - } - float penumbraRatio = penumbraSize(zReceiver, avgBlockerDepth); - return vogelFilter(shadowMap, uv, zReceiver, 1.25 * penumbraRatio, angle); -}`)({size:r,samples:t,focus:e})).replace("#if defined( SHADOWMAP_TYPE_PCF )","\nreturn PCSS(shadowMap, shadowCoord);\n#if defined( SHADOWMAP_TYPE_PCF )"),T(n,i,s),()=>{P.ShaderChunk.shadowmap_pars_fragment=o,T(n,i,s)}},[e,r,t]),null}var F=e.i(90072);e.i(47167);var z=e.i(78140);let E="/models/3d_scene_final.glb",O="/draco/",B=[/WheelStock_FR_RB1c_Tire_1k_0$/i,/WheelStock_FR_RB1c_Tire_1k_0\.001$/i,/WheelStock_RL_RB1c_Tire/i,/WheelStock_RR_RB1c_Tire/i],L=/^LCT300007/i,D=/road|floor|slab|driveway|apron|grass|ground|pad|curb/i,W=/asphalt|concrete|lane|apron|curb|pavement|tarmac|grass/i,G=/tree|foliage|atlas|bush|hedge|shrub/i,q=/tree|leaf|leaves|bark|foliage|shrub|grass/i,U=/carton|cube|crate|package_box|barrel|pallet|bench/i,$=/cardboard|pallet/i,H=/street_light|streetlight|lamp/i,Z=/street_light/i,Q=/atlas|background_tree/i,Y=/background_tree_atlas/i;function K({truckRef:e,wheelRefs:t,tier:r="desktop",...n}){let{scene:i}=(0,z.useGLTF)(E,O);return(0,N.useLayoutEffect)(()=>{let n=[null,null,null,null],s=null;if(i.traverse(e=>{if(!e.isMesh)return;let t=e.name||"";/WheelStock_(FR|RL|RR)_RB1c_Tire/i.test(t)&&(s=e,B.forEach((r,i)=>{!n[i]&&r.test(t)&&(n[i]=e)}))}),n.forEach((e,r)=>{let n=e?.parent?.parent??null;n&&t?.[r]&&(t[r].current=n)}),e){let t=s;for(;t&&t.parent&&t.parent!==i;)t=t.parent;e.current=t??null}i.traverse(e=>{if(!e.isMesh)return;let t=e.name||"",n=(Array.isArray(e.material)?e.material[0]?.name:e.material?.name)||"",i=L.test(t),s=D.test(t)||W.test(n);e.castShadow=i,e.receiveShadow=i||s,i&&(e.frustumCulled=!1);let o=!1;"mobile"===r?o=G.test(t)||q.test(n)||U.test(t)||$.test(n)||H.test(t)||Z.test(n):"tablet"===r&&(o=Q.test(t)||Y.test(n)),e.visible=!o})},[i,e,t,r]),(0,R.jsx)("primitive",{object:i,...n,dispose:null})}z.useGLTF.preload(E,O);let J=(0,e.i(68834).create)(e=>({scrollProgress:0,activeSection:0,truckProgress:0,cameraTarget:[19.727,4.397,-31.08],lenis:null,setScrollProgress:t=>e({scrollProgress:t}),setActiveSection:t=>e({activeSection:t}),setTruckProgress:t=>e({truckProgress:t}),setCameraTarget:t=>e({cameraTarget:t}),setLenis:t=>e({lenis:t})})),X=[new F.Vector3(15.5,.45,-26.5),new F.Vector3(13.399,.324,-24.742),new F.Vector3(11.211,.178,-22.973),new F.Vector3(8.823,.111,-20.949),new F.Vector3(6.447,.059,-19.06),new F.Vector3(3.786,.072,-17.002),new F.Vector3(.732,.124,-14.955),new F.Vector3(-2.156,.124,-12.903),new F.Vector3(-4.417,.124,-10.929),new F.Vector3(-5.896,.124,-8.052),new F.Vector3(-5.985,.124,-5.497),new F.Vector3(-4.362,.124,-3.25),new F.Vector3(-1.448,.124,-1.234),new F.Vector3(2.539,.124,.986),new F.Vector3(6.686,.124,3.379),new F.Vector3(8.213,.124,6.14),new F.Vector3(7.976,.124,9.176),new F.Vector3(6.424,.124,12.428),new F.Vector3(3.883,.124,15.769),new F.Vector3(1.241,.124,19.056)],ee=new F.CatmullRomCurve3(X);function et(e){return e<.14?0:e<.38?.5*(e-.14)/.24:e<.5?.5:e<.76?.5+.5*(e-.5)/.26:1}let er={firstMileWhole:{position:new F.Vector3(38,15,-10),target:new F.Vector3(24.377,4,-39.303)},firstMileFront:{position:new F.Vector3(7,3,-19),target:new F.Vector3(15.5,1.5,-26.5)},midMile:{position:new F.Vector3(-7,7.5,8),target:new F.Vector3(-19.146,2.5,-9)},lastMileClose:{position:new F.Vector3(-3.5,4,15),target:new F.Vector3(8,2,20)},lastMileZoomedOut:{position:new F.Vector3(-10.4,5.2,12),target:new F.Vector3(8,2,20)},analytics:{position:new F.Vector3(-13.5,5,31),target:new F.Vector3(-7.7,3.5,25.4)}},en=new F.Vector3,ei=new F.Vector3,es=new F.Vector3(0,1,0),eo=new F.Vector3,ea=new F.Vector3,el=new F.Vector3,ec=e=>e*e*(3-2*e);function eu(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ed(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);rtypeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||ep(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}new F.Vector2,new F.Vector2;function em(e,t){if(!(e instanceof t))throw TypeError("Cannot call a class as a function")}var eh=function e(t,r,n){var i=this;em(this,e),eu(this,"dot2",function(e,t){return i.x*e+i.y*t}),eu(this,"dot3",function(e,t,r){return i.x*e+i.y*t+i.z*r}),this.x=t,this.y=r,this.z=n},eg=[new eh(1,1,0),new eh(-1,1,0),new eh(1,-1,0),new eh(-1,-1,0),new eh(1,0,1),new eh(-1,0,1),new eh(1,0,-1),new eh(-1,0,-1),new eh(0,1,1),new eh(0,-1,1),new eh(0,1,-1),new eh(0,-1,-1)],ev=[151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208,89,18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180],ey=Array(512),ex=Array(512),ew=0;(ew=Math.floor(ew))<256&&(ew|=ew<<8);for(var eb,e_=0;e_<256;e_++)eb=1&e_?ev[e_]^255&ew:ev[e_]^ew>>8&255,ey[e_]=ey[e_+256]=eb,ex[e_]=ex[e_+256]=eg[eb%12];function ej(e){var t=function(e){if("number"==typeof e)e=Math.abs(e);else if("string"==typeof e){var t=e;e=0;for(var r=0;r3&&void 0!==arguments[3]?arguments[3]:.25,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:.01,s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:1/0,o=arguments.length>6&&void 0!==arguments[6]?arguments[6]:eM,a=arguments.length>7&&void 0!==arguments[7]?arguments[7]:.001,l="velocity_"+t;if(void 0===e.__damp&&(e.__damp={}),void 0===e.__damp[l]&&(e.__damp[l]=0),Math.abs(e[t]-r)<=a)return e[t]=r,!1;var c=2/(n=Math.max(1e-4,n)),u=o(c*i),d=e[t]-r,p=r,f=s*n;d=Math.min(Math.max(d,-f),f),r=e[t]-d;var m=(e.__damp[l]+c*d)*i;e.__damp[l]=(e.__damp[l]-c*m)*u;var h=r+(d+m)*u;return p-e[t]>0==h>p&&(h=p,e.__damp[l]=(h-p)/i),e[t]=h,!0}var eR=new F.Vector3,eN=new F.Quaternion,ek=new F.Quaternion,eV=new F.Matrix4,eA=new F.Vector3;function eP(e,t,r,n,i,s,o,a){var l,c,u,d;return eS(e,t,e[t]+(u=(l=r-e[t])-Math.floor(l/(c=2*Math.PI))*c,(d=Math.max(0,Math.min(c,u)))>Math.PI&&(d-=2*Math.PI),d),n,i,s,o,a)}var eC=new F.Vector2,eT=new F.Vector3;function eI(e,t,r,o,a,l,c){return"number"==typeof t?eT.setScalar(t):Array.isArray(t)?eT.set(t[0],t[1],t[2]):eT.copy(t),n=eS(e,"x",eT.x,r,o,a,l,c),i=eS(e,"y",eT.y,r,o,a,l,c),s=eS(e,"z",eT.z,r,o,a,l,c),n||i||s}var eF=new F.Vector4,ez=new F.Euler,eE=new F.Color,eO=new F.Quaternion,eB=new F.Vector4,eL=new F.Vector4,eD=new F.Vector4;function eW(e,t,r,n,i,s,o){Array.isArray(t)?eO.set(t[0],t[1],t[2],t[3]):eO.copy(t);var a=e.dot(eO)>0?1:-1;return eO.x*=a,eO.y*=a,eO.z*=a,eO.w*=a,g=eS(e,"x",eO.x,r,n,i,s,o),v=eS(e,"y",eO.y,r,n,i,s,o),y=eS(e,"z",eO.z,r,n,i,s,o),x=eS(e,"w",eO.w,r,n,i,s,o),eB.set(e.x,e.y,e.z,e.w).normalize(),eL.set(e.__damp.velocity_x,e.__damp.velocity_y,e.__damp.velocity_z,e.__damp.velocity_w),eD.copy(eB).multiplyScalar(eL.dot(eB)/eB.dot(eB)),e.__damp.velocity_x-=eD.x,e.__damp.velocity_y-=eD.y,e.__damp.velocity_z-=eD.z,e.__damp.velocity_w-=eD.w,e.set(eB.x,eB.y,eB.z,eB.w),g||v||y||x}var eG=new F.Spherical,eq=new F.Matrix4,eU=new F.Vector3,e$=new F.Quaternion,eH=new F.Vector3,eZ=Object.freeze({__proto__:null,rsqw:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.01,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1/(2*Math.PI);return r/Math.atan(1/t)*Math.atan(Math.sin(2*Math.PI*e*n)/t)},exp:eM,linear:function(e){return e},sine:{in:function(e){return 1-Math.cos(e*Math.PI/2)},out:function(e){return Math.sin(e*Math.PI/2)},inOut:function(e){return-(Math.cos(Math.PI*e)-1)/2}},cubic:{in:function(e){return e*e*e},out:function(e){return 1-Math.pow(1-e,3)},inOut:function(e){return e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2}},quint:{in:function(e){return e*e*e*e*e},out:function(e){return 1-Math.pow(1-e,5)},inOut:function(e){return e<.5?16*e*e*e*e*e:1-Math.pow(-2*e+2,5)/2}},circ:{in:function(e){return 1-Math.sqrt(1-Math.pow(e,2))},out:function(e){return Math.sqrt(1-Math.pow(e-1,2))},inOut:function(e){return e<.5?(1-Math.sqrt(1-Math.pow(2*e,2)))/2:(Math.sqrt(1-Math.pow(-2*e+2,2))+1)/2}},quart:{in:function(e){return e*e*e*e},out:function(e){return 1- --e*e*e*e},inOut:function(e){return e<.5?8*e*e*e*e:1-8*--e*e*e*e}},expo:{in:function(e){return 0===e?0:Math.pow(2,10*e-10)},out:function(e){return 1===e?1:1-Math.pow(2,-10*e)},inOut:function(e){return 0===e?0:1===e?1:e<.5?Math.pow(2,20*e-10)/2:(2-Math.pow(2,-20*e+10))/2}},damp:eS,dampLookAt:function(e,t,r,n,i,s,o){"number"==typeof t?eR.setScalar(t):Array.isArray(t)?eR.set(t[0],t[1],t[2]):eR.copy(t);var a=e.parent;(e.updateWorldMatrix(!0,!1),eA.setFromMatrixPosition(e.matrixWorld),e&&e.isCamera||e&&e.isLight)?eV.lookAt(eA,eR,e.up):eV.lookAt(eR,eA,e.up),eW(e.quaternion,ek.setFromRotationMatrix(eV),r,n,i,s,o),a&&(eV.extractRotation(a.matrixWorld),eN.setFromRotationMatrix(eV),eW(e.quaternion,ek.copy(e.quaternion).premultiply(eN.invert()),r,n,i,s,o))},dampAngle:eP,damp2:function(e,n,i,s,o,a,l){return"number"==typeof n?eC.setScalar(n):Array.isArray(n)?eC.set(n[0],n[1]):eC.copy(n),t=eS(e,"x",eC.x,i,s,o,a,l),r=eS(e,"y",eC.y,i,s,o,a,l),t||r},damp3:eI,damp4:function(e,t,r,n,i,s,u){return"number"==typeof t?eF.setScalar(t):Array.isArray(t)?eF.set(t[0],t[1],t[2],t[3]):eF.copy(t),o=eS(e,"x",eF.x,r,n,i,s,u),a=eS(e,"y",eF.y,r,n,i,s,u),l=eS(e,"z",eF.z,r,n,i,s,u),c=eS(e,"w",eF.w,r,n,i,s,u),o||a||l||c},dampE:function(e,t,r,n,i,s,o){return Array.isArray(t)?ez.set(t[0],t[1],t[2],t[3]):ez.copy(t),u=eP(e,"x",ez.x,r,n,i,s,o),d=eP(e,"y",ez.y,r,n,i,s,o),p=eP(e,"z",ez.z,r,n,i,s,o),u||d||p},dampC:function(e,t,r,n,i,s,o){return t instanceof F.Color?eE.copy(t):Array.isArray(t)?eE.setRGB(t[0],t[1],t[2]):eE.set(t),f=eS(e,"r",eE.r,r,n,i,s,o),m=eS(e,"g",eE.g,r,n,i,s,o),h=eS(e,"b",eE.b,r,n,i,s,o),f||m||h},dampQ:eW,dampS:function(e,t,r,n,i,s,o){return Array.isArray(t)?eG.set(t[0],t[1],t[2]):eG.copy(t),w=eS(e,"radius",eG.radius,r,n,i,s,o),b=eP(e,"phi",eG.phi,r,n,i,s,o),_=eP(e,"theta",eG.theta,r,n,i,s,o),w||b||_},dampM:function(e,t,r,n,i,s,o){return void 0===e.__damp&&(e.__damp={position:new F.Vector3,rotation:new F.Quaternion,scale:new F.Vector3},e.decompose(e.__damp.position,e.__damp.rotation,e.__damp.scale)),Array.isArray(t)?eq.set.apply(eq,ef(t)):eq.copy(t),eq.decompose(eU,e$,eH),j=eI(e.__damp.position,eU,r,n,i,s,o),M=eW(e.__damp.rotation,e$,r,n,i,s,o),S=eI(e.__damp.scale,eH,r,n,i,s,o),e.compose(e.__damp.position,e.__damp.rotation,e.__damp.scale),j||M||S}});function eQ(){let e=(0,N.useRef)(new F.Vector3(19.7,4.4,-31.08)),t=(0,N.useRef)(new F.Vector3).current,r=(0,N.useRef)(new F.Vector3).current;return(0,V.useFrame)((n,i)=>{let{camera:s}=n;!function(e,t,r){let n=et(e);if(ee.getPoint(n,en),ee.getTangent(n,ei).normalize(),eo.crossVectors(ei,es).normalize(),ea.copy(en).addScaledVector(ei,7.2).addScaledVector(es,3.2).addScaledVector(eo,-3),el.copy(en).addScaledVector(ei,7.2).addScaledVector(es,3.2).addScaledVector(eo,3),e<.04)t.copy(er.firstMileWhole.position),r.copy(er.firstMileWhole.target);else if(e<.14){let n=ec((e-.04)/.1);t.lerpVectors(er.firstMileWhole.position,er.firstMileFront.position,n),r.lerpVectors(er.firstMileWhole.target,er.firstMileFront.target,n)}else if(e<.18){let n=ec((e-.14)/.04);t.lerpVectors(er.firstMileFront.position,ea,n),r.lerpVectors(er.firstMileFront.target,en,n)}else if(e<.34)t.copy(ea),r.copy(en);else if(e<.38){let n=ec((e-.34)/.04);t.lerpVectors(ea,er.midMile.position,n),r.lerpVectors(en,er.midMile.target,n)}else if(e<.5)t.copy(er.midMile.position),r.copy(er.midMile.target);else if(e<.54){let n=ec((e-.5)/.04);t.lerpVectors(er.midMile.position,el,n),r.lerpVectors(er.midMile.target,en,n)}else if(e<.72)t.copy(el),r.copy(en);else if(e<.76){let n=ec((e-.72)/.04);t.lerpVectors(el,er.lastMileClose.position,n),r.lerpVectors(en,er.lastMileClose.target,n)}else if(e<.92)if(e<.8)t.copy(er.lastMileClose.position),r.copy(er.lastMileClose.target);else if(e<.84){let n=ec((e-.8)/.04);t.lerpVectors(er.lastMileClose.position,er.lastMileZoomedOut.position,n),r.lerpVectors(er.lastMileClose.target,er.lastMileZoomedOut.target,n)}else t.copy(er.lastMileZoomedOut.position),r.copy(er.lastMileZoomedOut.target);else if(e<.96){let n=ec((e-.92)/.04);t.lerpVectors(er.lastMileZoomedOut.position,er.analytics.position,n),r.lerpVectors(er.lastMileZoomedOut.target,er.analytics.target,n)}else t.copy(er.analytics.position),r.copy(er.analytics.target)}(J.getState().scrollProgress,t,r);let o=Number.isFinite(i)&&i>0?Math.min(i,.1):1/60;eZ.damp3(s.position,t,.35,o),eZ.damp3(e.current,r,.25,o),Number.isFinite(s.position.x)||s.position.copy(t),Number.isFinite(e.current.x)||e.current.copy(r),s.lookAt(e.current);let a=n.size.width/n.size.height,l=a<1?Math.min(75,45/Math.sqrt(a)):45;s.fov!==l&&(s.fov=l,s.updateProjectionMatrix())}),null}function eY({truckRef:e,wheelRefs:t}){let r=(0,N.useRef)(!1),n=(0,N.useRef)(0),i=(0,N.useRef)(0),s=(0,N.useRef)(!1),o=(0,N.useRef)(0),a=(0,N.useRef)(0),l=(0,N.useRef)(0);return(0,V.useFrame)((c,u)=>{var d;let p;if(!e.current)return;let f=Number.isFinite(u)&&u>0?Math.min(u,.1):1/60,m=J.getState().scrollProgress,h=et(m),g=m-i.current;g<-1e-4?s.current=!0:g>1e-4&&(s.current=!1),i.current=m;let v=e.current.children[0];if(v&&e.current.children.length>1&&([...e.current.children].slice(1).forEach(e=>{v.attach(e)}),v.rotation.set(0,-Math.PI/2,0),e.current.traverse(e=>{e.isMesh&&(e.frustumCulled=!1,e.castShadow=!0,e.receiveShadow=!0)})),!r.current){let t;n.current=h,n.current_velocity=0,l.current=h,i.current=m,s.current=!1,o.current=0,o.current_velocity=0;let a=ee.getPoint(n.current);if(n.current>=.99){let e=ee.getTangent(1),r=ee.getPoint(1);t=new F.Vector3().copy(r).addScaledVector(e,1)}else{let e=Math.min(n.current+.01,1);t=ee.getPoint(e)}e.current.position.copy(a),e.current.position.distanceToSquared(t)>1e-4&&e.current.lookAt(t),r.current=!0}eZ.damp(n,"current",h,.3,f),!Number.isFinite(n.current)&&(n.current=h,n.__damp&&(n.__damp={})),n.current=F.MathUtils.clamp(n.current,0,1);let y=ee.getPoint(n.current);if(n.current>=.99){let e=ee.getTangent(1),t=ee.getPoint(1);p=new F.Vector3().copy(t).addScaledVector(e,1)}else{let e=Math.min(n.current+.01,1);p=ee.getPoint(e)}e.current.position.copy(y),e.current.position.distanceToSquared(p)>1e-4&&e.current.lookAt(p);let x=0;n.current>.05&&n.current<.95&&s.current&&(x=Math.PI),eZ.damp(o,"current",x,.2,f),!Number.isFinite(o.current)&&(o.current=x,o.current_velocity=0,o.__damp&&(o.__damp={})),e.current.rotateY(o.current);let w=Math.abs(n.current-l.current);l.current=n.current,n.current>.001&&n.current<.999&&(a.current+=250*w),d=a.current,t&&0!==t.length&&t.forEach((e,t)=>{e.current&&(e.current.rotation.y=d*(t%2==0?1:-1))}),e.current.children&&e.current.children[0]&&(e.current.children[0].position.y=.003*Math.sin(45*c.clock.getElapsedTime()))}),null}let eK=[{pos:[0,4.2,-4.56],target:[0,0,-4.56]},{pos:[9.113,4.2,.944],target:[9.113,0,.944]},{pos:[-10.158,4.2,-9.874],target:[-10.158,0,-9.874]},{pos:[3.513,4.2,9.195],target:[3.513,0,9.195]},{pos:[3.96,4.2,-21.17],target:[3.96,0,-21.17]},{pos:[12.25,4.2,-16.7],target:[12.25,0,-16.7]},{pos:[3.052,4.2,-12.335],target:[3.052,0,-12.335]},{pos:[-2.03,4.2,-16.89],target:[-2.03,0,-16.89]},{pos:[-27.151,3.98,-9],target:[-27.151,0,-9]}],eJ=new F.Color("#333333"),eX=new F.Color("#ffdf6d"),e0=new F.Color("#000000"),e1=new F.Color("#ffdf6d");function e2({pos:e,targetPos:t}){let r=(0,N.useRef)(),n=(0,N.useRef)(),i=(0,N.useRef)();return(0,N.useEffect)(()=>{r.current&&n.current&&(r.current.target=n.current,r.current.target.updateMatrixWorld())},[]),(0,V.useFrame)(()=>{r.current&&(r.current.intensity=0),i.current&&(i.current.material.color.lerpColors(eJ,eX,0),i.current.material.emissive.lerpColors(e0,e1,0))}),(0,R.jsxs)("group",{children:[(0,R.jsx)("spotLight",{ref:r,position:e,intensity:0,distance:12,angle:Math.PI/4.5,penumbra:.6,decay:1.2,color:"#ffdf6d",castShadow:!1}),(0,R.jsxs)("mesh",{ref:i,position:e,children:[(0,R.jsx)("sphereGeometry",{args:[.16,16,16]}),(0,R.jsx)("meshStandardMaterial",{color:"#333333",emissive:"#000000",emissiveIntensity:3.5,roughness:.1})]}),(0,R.jsx)("object3D",{ref:n,position:t})]})}let e3=N.default.memo(function(){return(0,R.jsx)("group",{children:eK.map((e,t)=>(0,R.jsx)(e2,{pos:e.pos,targetPos:e.target},t))})}),e5=new F.Color("#f5f5f7"),e4=new F.Color,e9=new F.Vector3,e6={desktop:{shadows:!0,softShadows:!0,environment:!0,streetLights:!0,dpr:[1,1.5],antialias:!0,shadowMap:2048},tablet:{shadows:!0,softShadows:!1,environment:!0,streetLights:!1,dpr:[1,1.5],antialias:!1,shadowMap:1024},mobile:{shadows:!1,softShadows:!1,environment:!1,streetLights:!1,dpr:[1,1],antialias:!1,shadowMap:512}},e7=N.default.memo(function({truckRef:e,shadows:t,shadowMap:r}){let n=(0,N.useRef)(),i=(0,N.useRef)();return(0,N.useEffect)(()=>{n.current&&i.current&&(n.current.target=i.current)},[]),(0,V.useFrame)(t=>{n.current&&i.current&&e.current&&(e.current.getWorldPosition(e9),i.current.position.copy(e9),i.current.updateMatrixWorld(),n.current.position.set(e9.x+10,e9.y+20,e9.z+10)),t.scene&&(t.scene.background=e4.copy(e5),t.scene.environmentIntensity=1)}),(0,R.jsxs)("group",{children:[(0,R.jsx)("ambientLight",{intensity:.45}),(0,R.jsx)("directionalLight",{ref:n,castShadow:t,position:[10,20,10],intensity:1.5,"shadow-mapSize-width":r,"shadow-mapSize-height":r,"shadow-camera-far":100,"shadow-camera-left":-35,"shadow-camera-right":35,"shadow-camera-top":35,"shadow-camera-bottom":-35,"shadow-bias":-1e-4}),(0,R.jsx)("object3D",{ref:i})]})});function e8({onReady:e}){return(0,N.useEffect)(()=>{let t=0,r=0;return t=requestAnimationFrame(()=>{r=requestAnimationFrame(()=>e?.())}),()=>{cancelAnimationFrame(t),cancelAnimationFrame(r)}},[e]),null}let te=N.default.memo(function({dashboardRefs:e,wheelRefs:t,truckRef:r,tier:n="desktop",onReady:i}){let s=e6[n]??e6.desktop;return(0,R.jsx)("div",{style:{width:"100%",height:"100%",position:"absolute",top:0,left:0},children:(0,R.jsxs)(k.Canvas,{shadows:s.shadows,dpr:s.dpr,camera:{position:[32,12,-18],fov:45},gl:{antialias:s.antialias,powerPreference:"high-performance"},children:[(0,R.jsx)("color",{attach:"background",args:["#f5f5f7"]}),s.softShadows&&(0,R.jsx)(I,{size:10,samples:12,focus:1}),(0,R.jsx)(e7,{truckRef:r,shadows:s.shadows,shadowMap:s.shadowMap}),s.streetLights&&(0,R.jsx)(e3,{}),s.environment?(0,R.jsx)(N.Suspense,{fallback:null,children:(0,R.jsx)(A.Environment,{preset:"city"})}):(0,R.jsx)("hemisphereLight",{args:["#ffffff","#9aa0a6",.9]}),(0,R.jsxs)(N.Suspense,{fallback:null,children:[(0,R.jsx)(K,{dashboardRefs:e,truckRef:r,wheelRefs:t,tier:n}),(0,R.jsx)(e8,{onReady:i})]}),(0,R.jsx)(eY,{truckRef:r,wheelRefs:t}),(0,R.jsx)(eQ,{})]})})});var tt=e.i(89970),tr=e.i(83495);let tn=(e,t,r)=>Math.min(Math.max(e,t),r),ti=e=>{if("u"{e?e.scrollTo(t,{duration:1.5}):window.scrollTo({top:t,behavior:"smooth"})};tt.default.registerPlugin(tr.ScrollTrigger);let to={desktop:600,tablet:550,mobile:500};function ta({dashboardRefs:e,onPinState:t,tier:r="desktop",ready:n=!1}){let i=J(e=>e.setScrollProgress),s=J(e=>e.setActiveSection),o=(0,N.useRef)(null),a=(0,N.useRef)(0),l=(0,N.useRef)("before"),c=(0,N.useRef)(null);return(0,N.useEffect)(()=>{let r=o.current;if(!r)return;let n=r=>{i(r);let n=r<=2e-4?"before":r>=.9998?"after":"pinned";n!==l.current&&(l.current=n,t?.(n));let o=0;if(r>=.92?o=3:r>=.5?o=2:r>=.12&&(o=1),o!==a.current&&(a.current=o,s(o)),e){var c,u,d;c=e.bars||[],u=e.pieQuarters||[],d=r>=.92?(r-.92)/.08:0,c.forEach((e,t)=>{if(e.current){let r=tn((d-.08*t)/.5,0,1);e.current.scale.y=r}}),u.forEach((e,t)=>{e.current&&(e.current.rotation.y=-.709+d*Math.PI*2*(2+.5*t))})}},u=tr.ScrollTrigger.create({trigger:r,start:"top top",end:"bottom bottom",scrub:2.5,invalidateOnRefresh:!0,onUpdate:e=>n(e.progress),onRefresh:e=>n(e.progress)});c.current=u;let d=requestAnimationFrame(()=>tr.ScrollTrigger.refresh()),p=0,f=new ResizeObserver(()=>{cancelAnimationFrame(p),p=requestAnimationFrame(()=>tr.ScrollTrigger.refresh())});f.observe(document.documentElement);let m=!1;return document.fonts?.ready&&document.fonts.ready.then(()=>{m||tr.ScrollTrigger.refresh()}),()=>{cancelAnimationFrame(d),cancelAnimationFrame(p),f.disconnect(),m=!0,u.kill(),c.current=null}},[i,s,e,t]),(0,N.useEffect)(()=>{n&&tr.ScrollTrigger.refresh()},[n]),(0,R.jsx)("div",{ref:o,id:"scroll-trigger-trigger",style:{position:"relative",width:"100%",height:`${to[r]??600}vh`,pointerEvents:"none",zIndex:0}})}function tl(){let e=J(e=>e.activeSection),t=J(e=>e.lenis);return(0,R.jsx)("div",{className:"side-navigation",id:"main-navbar",children:[{label:"First Mile",index:0},{label:"Mid Mile",index:1},{label:"Last Mile",index:2},{label:"Analytics",index:3}].map(r=>(0,R.jsxs)("button",{onClick:()=>{ts(t,ti([0,.38,.76,.92][r.index]))},className:`side-nav-item ${e===r.index?"active":""}`,children:[(0,R.jsx)("span",{className:"side-nav-label",children:r.label}),(0,R.jsx)("span",{className:"side-nav-dot"})]},r.index))})}let tc=[{id:"first-mile",title:"First Mile Warehouse",subtitle:"Consolidation & Prep",description:"Incoming shipments are securely loaded, checked, and queued for transfer in our high-capacity fulfillment centers.",progressStart:0,progressEnd:.25},{id:"mid-mile",title:"Mid Mile Hub",subtitle:"Sorting & Direct Dispatch",description:"Consolidated goods travel between primary distribution nodes. Heavy logistics lanes sorting thousands of parcels per hour.",progressStart:.25,progressEnd:.5},{id:"last-mile",title:"Last Mile Delivery",subtitle:"Doorstep Courier Services",description:"Local courier fleets take over for the final leg — MileTruth™ AI sequences the fastest doorstep routes and keeps every package tracked through to a confirmed delivery.",progressStart:.5,progressEnd:.75},{id:"analytics",title:"Fulfillment Analytics",subtitle:"Real-Time Operational Insights",description:"A fully centralized dashboard monitoring transit times, fleet coordinates, carbon footprint, and delivery success rates.",progressStart:.75,progressEnd:1}];function tu({children:e,active:t,id:r,className:n=""}){let i=(0,N.useRef)(null);return(0,N.useEffect)(()=>{let e=i.current;if(!e)return;let n=e.querySelectorAll(".section-badge, .section-title, .section-subtitle, .section-description, .section-metrics, .section-supporting, .section-close-btn"),s="promise-section"===r;t?(tt.default.killTweensOf([e,n]),tt.default.to(e,{xPercent:s?-50:0,yPercent:s?-50:0,y:0,scale:1,opacity:1,duration:.85,ease:"power4.out"}),tt.default.fromTo(n,{y:15,opacity:0},{y:0,opacity:1,duration:.6,stagger:.08,ease:"power3.out",delay:.1})):(tt.default.killTweensOf([e,n]),tt.default.to(e,{xPercent:s?-50:0,yPercent:s?-50:0,y:s?18:20,scale:.96,opacity:0,duration:.5,ease:"power3.inOut"}),tt.default.to(n,{y:10,opacity:0,duration:.35,ease:"power2.in"}))},[t,r]),(0,R.jsx)("div",{ref:i,id:r,className:`section-panel ${t?"active":""} ${n}`,style:{opacity:0,transform:"promise-section"===r?"translate(-50%, -50%) translateY(18px) scale(0.96)":"translateY(20px) scale(0.96)"},children:e})}function td({active:e}){let t=tc[0];return(0,R.jsxs)(tu,{active:e,id:"first-mile-section",children:[(0,R.jsx)("div",{className:"section-badge",children:"Stage 01"}),(0,R.jsx)("h2",{className:"section-title",children:t.title}),(0,R.jsx)("h3",{className:"section-subtitle",children:t.subtitle}),(0,R.jsx)("p",{className:"section-description",children:t.description}),(0,R.jsxs)("div",{className:"section-metrics",children:[(0,R.jsxs)("div",{className:"metric-item",children:[(0,R.jsx)("span",{className:"metric-value",children:"14,250"}),(0,R.jsx)("span",{className:"metric-label",children:"Parcels Processed"})]}),(0,R.jsxs)("div",{className:"metric-item",children:[(0,R.jsx)("span",{className:"metric-value",children:"99.98%"}),(0,R.jsx)("span",{className:"metric-label",children:"Sorting Accuracy"})]})]})]})}function tp({active:e}){let t=tc[1],r=J(e=>e.lenis);return(0,R.jsxs)(tu,{active:e,id:"mid-mile-section",children:[(0,R.jsx)("div",{className:"section-badge",children:"Stage 02"}),(0,R.jsx)("h2",{className:"section-title",children:t.title}),(0,R.jsx)("h3",{className:"section-subtitle",children:t.subtitle}),(0,R.jsx)("p",{className:"section-description",children:t.description}),(0,R.jsxs)("div",{className:"section-metrics mm-info-strip",children:[(0,R.jsxs)("div",{className:"mm-info-row",children:[(0,R.jsx)("span",{className:"mm-info-icon","aria-hidden":"true",children:(0,R.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,R.jsx)("rect",{x:"1",y:"3",width:"15",height:"13"}),(0,R.jsx)("polygon",{points:"16 8 20 8 23 11 23 16 16 16 16 8"}),(0,R.jsx)("circle",{cx:"5.5",cy:"18.5",r:"2.5"}),(0,R.jsx)("circle",{cx:"18.5",cy:"18.5",r:"2.5"})]})}),(0,R.jsxs)("div",{className:"mm-info-content",children:[(0,R.jsx)("h4",{className:"mm-info-title",children:"Vehicles In Transit"}),(0,R.jsx)("p",{className:"mm-info-text",children:"A live view of active vehicles moving shipments between regional distribution hubs."})]})]}),(0,R.jsxs)("div",{className:"mm-info-row",children:[(0,R.jsx)("span",{className:"mm-info-icon","aria-hidden":"true",children:(0,R.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,R.jsx)("line",{x1:"16.5",y1:"9.4",x2:"7.5",y2:"4.21"}),(0,R.jsx)("path",{d:"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"}),(0,R.jsx)("polyline",{points:"3.27 6.96 12 12.01 20.73 6.96"}),(0,R.jsx)("line",{x1:"12",y1:"22.08",x2:"12",y2:"12"})]})}),(0,R.jsxs)("div",{className:"mm-info-content",children:[(0,R.jsx)("h4",{className:"mm-info-title",children:"Packages In Transit"}),(0,R.jsx)("p",{className:"mm-info-text",children:"Real-time visibility into parcels currently moving through the mid-mile network."})]})]})]}),(0,R.jsxs)("button",{className:"section-close-btn",onClick:()=>{ts(r,ti(.575))},children:["Continue Journey",(0,R.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",style:{marginLeft:"6px"},children:[(0,R.jsx)("line",{x1:"5",y1:"12",x2:"19",y2:"12"}),(0,R.jsx)("polyline",{points:"12 5 19 12 12 19"})]})]})]})}function tf({active:e}){let t=tc[2],r=J(e=>e.lenis);return(0,R.jsxs)(tu,{active:e,id:"last-mile-section",children:[(0,R.jsx)("div",{className:"section-badge",children:"Stage 03"}),(0,R.jsx)("h2",{className:"section-title",children:t.title}),(0,R.jsx)("h3",{className:"section-subtitle",children:t.subtitle}),(0,R.jsx)("p",{className:"section-description",children:t.description}),(0,R.jsxs)("div",{className:"section-metrics",children:[(0,R.jsxs)("div",{className:"metric-item",children:[(0,R.jsx)("span",{className:"metric-value",children:"99.4%"}),(0,R.jsx)("span",{className:"metric-label",children:"On-Time Delivery"})]}),(0,R.jsxs)("div",{className:"metric-item",children:[(0,R.jsx)("span",{className:"metric-value",children:"12.5 min"}),(0,R.jsx)("span",{className:"metric-label",children:"Avg. Doorstep Time"})]})]}),(0,R.jsxs)("div",{className:"section-supporting",children:[(0,R.jsx)("span",{className:"supporting-dot"}),(0,R.jsxs)("div",{className:"supporting-text",children:[(0,R.jsx)("span",{className:"supporting-value",children:"Real-Time visibility"}),(0,R.jsx)("span",{className:"supporting-label",children:"Live GPS · Active now"})]})]}),(0,R.jsxs)("button",{className:"section-close-btn",onClick:()=>{ts(r,ti(.92))},children:["Continue",(0,R.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",style:{marginLeft:"6px"},children:[(0,R.jsx)("line",{x1:"5",y1:"12",x2:"19",y2:"12"}),(0,R.jsx)("polyline",{points:"12 5 19 12 12 19"})]})]})]})}function tm({active:e}){return(0,R.jsxs)(tu,{active:e,id:"promise-section",children:[(0,R.jsx)("div",{className:"section-badge",children:"The Doormile Promise"}),(0,R.jsxs)("h2",{className:"section-title promise-title",children:["One Connected System.",(0,R.jsx)("br",{}),"One Promise Kept."]}),(0,R.jsx)("span",{className:"promise-divider","aria-hidden":!0}),(0,R.jsx)("p",{className:"section-description promise-desc",children:"Stop managing three separate logistics services. Doormile unifies first, mid and last mile into a single intelligent delivery system powered by MileTruth™ AI."})]})}var th=e.i(92599);function tg(){let e=J(e=>e.scrollProgress<.14),t=J(e=>e.scrollProgress>=.38&&e.scrollProgress<.5),r=J(e=>e.scrollProgress>=.78&&e.scrollProgress<.875),n=J(e=>e.scrollProgress>=.9);return(0,R.jsxs)("div",{className:"sections-overlay-container",children:[(0,R.jsx)(td,{active:e}),(0,R.jsx)(tp,{active:t}),(0,R.jsx)(tf,{active:r}),(0,R.jsx)(tm,{active:n})]})}function tv({hidden:e}){return(0,R.jsxs)("div",{className:"dm-hiw-3d-loader","aria-hidden":e,style:{position:"absolute",inset:0,zIndex:50,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:"18px",background:"linear-gradient(180deg, #f5f5f7 0%, #e9edf2 100%)",opacity:+!e,pointerEvents:e?"none":"auto",transition:"opacity 0.6s ease"},children:[(0,R.jsx)("span",{style:{width:30,height:30,borderRadius:"50%",border:"3px solid rgba(192,18,39,0.18)",borderTopColor:"#c01227",animation:"dm-hiw-spin 0.8s linear infinite"}}),(0,R.jsx)("span",{style:{fontWeight:600,letterSpacing:"0.01em",color:"#1f1f1f",fontSize:"0.95rem"},children:"Loading Doormile Experience…"}),(0,R.jsx)("style",{children:"@keyframes dm-hiw-spin{to{transform:rotate(360deg)}}"})]})}function ty(){return(0,R.jsxs)("section",{className:"dm-hiw-3d-fallback",style:{position:"relative",minHeight:"70vh",display:"flex",alignItems:"flex-end",background:"linear-gradient(180deg, #eef1f5 0%, #dfe5ec 55%, #cfd7e0 100%)",overflow:"hidden"},children:[(0,R.jsx)("img",{src:"/images/home2-banner-1.webp",alt:"Doormile delivery journey — first mile to last mile",loading:"lazy",decoding:"async",onError:e=>{e.currentTarget.style.display="none"},style:{position:"absolute",inset:0,width:"100%",height:"100%",objectFit:"cover"}}),(0,R.jsx)("div",{style:{position:"relative",padding:"2rem clamp(1rem, 5vw, 4rem)",maxWidth:720},children:(0,R.jsx)("p",{style:{fontWeight:700,fontSize:"clamp(1.25rem, 3vw, 2rem)",lineHeight:1.2,margin:0},children:"From first mile to last mile, every delivery tracked."})})]})}tt.default.registerPlugin(tr.ScrollTrigger),e.s(["default",0,function(){let e=J(e=>e.setLenis),t=function(){let[e,t]=(0,N.useState)(null);return(0,N.useEffect)(()=>{let e,r,n,i,s,o,a;t((r=window.matchMedia("(prefers-reduced-motion: reduce)").matches,n=window.matchMedia("(pointer: coarse)").matches||navigator.maxTouchPoints>0,i=window.innerWidth,s="number"==typeof navigator.deviceMemory?navigator.deviceMemory:8,o=navigator.hardwareConcurrency||8,a=function(){if("u"=1024?"desktop":i>=768&&i<=1366?"tablet":n&&i<768||i<768?"mobile":"tablet",(s<=2||o<=2)&&"mobile"!==e&&(e="mobile"),{tier:e,isTouch:n,reducedMotion:r,fallback:r||!a||s<=1,lowMemory:s<=4}))},[]),e}(),r=(0,N.useRef)(null),n=(0,N.useRef)(null),[i,s]=(0,N.useState)("before"),[o,a]=(0,N.useState)(!1),[l,c]=(0,N.useState)(!1),u=(0,N.useCallback)(()=>c(!0),[]),d=t?.tier??"desktop",p=t?.fallback??!1,f=t?.isTouch??!1,m=null!=t&&!p;(0,N.useEffect)(()=>{if(!m)return;let e=r.current;if(!e)return;let t=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&(a(!0),t.disconnect())},{rootMargin:"200% 0px"});return t.observe(e),()=>t.disconnect()},[m]),(0,N.useEffect)(()=>{let t;if(!m||f)return;let r=new th.default({duration:1.2,lerp:.08,syncTouch:!1});e(r),r.on("scroll",tr.ScrollTrigger.update);let n=e=>{r.raf(e),t=requestAnimationFrame(n)};return t=requestAnimationFrame(n),tr.ScrollTrigger.refresh(),()=>{cancelAnimationFrame(t),r.destroy(),e(null)}},[m,f,e]),(0,N.useEffect)(()=>{if(!o)return;let e=n.current;if(!e)return;let t=null,r=r=>{let n=r>=.92;n!==t&&(t=n,e.style.opacity=n?"0.85":"1")};return r(J.getState().scrollProgress),J.subscribe(e=>r(e.scrollProgress))},[o]);let h=(0,N.useRef)(null),g=N.default.useMemo(()=>[{current:null},{current:null},{current:null},{current:null}],[]),v=N.default.useMemo(()=>({bars:[],floorBars:[],pieQuarters:[]}),[]);return null==t?(0,R.jsx)("div",{ref:r,className:"dm-hiw-3d",style:{minHeight:"100vh"},"aria-hidden":!0}):p?(0,R.jsx)(ty,{}):(0,R.jsxs)("div",{ref:r,className:`dm-hiw-3d is-${i}`,children:[(0,R.jsxs)("div",{className:"dm-hiw-3d-stage",children:[(0,R.jsx)("div",{ref:n,className:"canvas-wrapper",style:{transition:"opacity 0.8s cubic-bezier(0.16, 1, 0.3, 1)"},children:o&&(0,R.jsx)(te,{truckRef:h,wheelRefs:g,dashboardRefs:v,tier:d,onReady:u})}),o&&(0,R.jsx)(tv,{hidden:l}),(0,R.jsx)(tl,{}),(0,R.jsx)(tg,{})]}),(0,R.jsx)(ta,{dashboardRefs:v,onPinState:s,tier:d,ready:l})]})}],41626)},88493,e=>{e.n(e.i(41626))}]); \ No newline at end of file diff --git a/build/_next/static/chunks/04xui0pxt.et1.js b/build/_next/static/chunks/04xui0pxt.et1.js deleted file mode 100644 index ba8e2d7..0000000 --- a/build/_next/static/chunks/04xui0pxt.et1.js +++ /dev/null @@ -1 +0,0 @@ -(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,89970,83495,t=>{"use strict";function e(t){if(void 0===t)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function r(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.__proto__=e}var n,i,s,a,o,u,l,c,f,h,p,d,_,g,m,v,y,x,b,T,w,k,M,O,C,E,S={autoSleep:120,force3D:"auto",nullTargetWarn:1,units:{lineHeight:""}},A={duration:.5,overwrite:!1,delay:0},P=2*Math.PI,D=P/4,R=0,z=Math.sqrt,F=Math.cos,I=Math.sin,B=function(t){return"string"==typeof t},Y=function(t){return"function"==typeof t},L=function(t){return"number"==typeof t},N=function(t){return void 0===t},X=function(t){return"object"==typeof t},U=function(t){return!1!==t},q=function(){return"u">typeof window},H=function(t){return Y(t)||B(t)},W="function"==typeof ArrayBuffer&&ArrayBuffer.isView||function(){},V=Array.isArray,j=/random\([^)]+\)/g,G=/,\s*/g,Q=/(?:-?\.?\d|\.)+/gi,Z=/[-+=.]*\d+[.e\-+]*\d*[e\-+]*\d*/g,$=/[-+=.]*\d+[.e-]*\d*[a-z%]*/g,K=/[-+=.]*\d+\.?\d*(?:e-|e\+)?\d*/gi,J=/[+-]=-?[.\d]+/,tt=/[^,'"\[\]\s]+/gi,te=/^[+\-=e\s\d]*\d+[.\d]*([a-z]*|%)\s*$/i,tr={},tn={},ti=function(t){return(tn=tz(t,tr))&&rM},ts=function(t,e){return console.warn("Invalid property",t,"set to",e,"Missing plugin? gsap.registerPlugin()")},ta=function(t,e){return!e&&console.warn(t)},to=function(t,e){return t&&(tr[t]=e)&&tn&&(tn[t]=e)||tr},tu=function(){return 0},tl={suppressEvents:!0,isStart:!0,kill:!1},tc={suppressEvents:!0,kill:!1},tf={suppressEvents:!0},th={},tp=[],td={},t_={},tg={},tm=30,tv=[],ty="",tx=function(t){var e,r,n=t[0];if(X(n)||Y(n)||(t=[t]),!(e=(n._gsap||{}).harness)){for(r=tv.length;r--&&!tv[r].targetTest(n););e=tv[r]}for(r=t.length;r--;)t[r]&&(t[r]._gsap||(t[r]._gsap=new eX(t[r],e)))||t.splice(r,1);return t},tb=function(t){return t._gsap||tx(ei(t))[0]._gsap},tT=function(t,e,r){return(r=t[e])&&Y(r)?t[e]():N(r)&&t.getAttribute&&t.getAttribute(e)||r},tw=function(t,e){return(t=t.split(",")).forEach(e)||t},tk=function(t){return Math.round(1e5*t)/1e5||0},tM=function(t){return Math.round(1e7*t)/1e7||0},tO=function(t,e){var r=e.charAt(0),n=parseFloat(e.substr(2));return t=parseFloat(t),"+"===r?t+n:"-"===r?t-n:"*"===r?t*n:t/n},tC=function(t,e){for(var r=e.length,n=0;0>t.indexOf(e[n])&&++ns;)a=a._prev;return a?(e._next=a._next,a._next=e):(e._next=t[r],t[r]=e),e._next?e._next._prev=e:t[n]=e,e._prev=a,e.parent=e._dp=t,e},tN=function(t,e,r,n){void 0===r&&(r="_first"),void 0===n&&(n="_last");var i=e._prev,s=e._next;i?i._next=s:t[r]===e&&(t[r]=s),s?s._prev=i:t[n]===e&&(t[n]=i),e._next=e._prev=e.parent=null},tX=function(t,e){t.parent&&(!e||t.parent.autoRemoveChildren)&&t.parent.remove&&t.parent.remove(t),t._act=0},tU=function(t,e){if(t&&(!e||e._end>t._dur||e._start<0))for(var r=t;r;)r._dirty=1,r=r.parent;return t},tq=function(t){for(var e=t.parent;e&&e.parent;)e._dirty=1,e.totalDuration(),e=e.parent;return t},tH=function(t,e,r,n){return t._startAt&&(y?t._startAt.revert(tc):t.vars.immediateRender&&!t.vars.autoRevert||t._startAt.render(e,!0,n))},tW=function(t){return t._repeat?tV(t._tTime,t=t.duration()+t._rDelay)*t:0},tV=function(t,e){var r=Math.floor(t=tM(t/e));return t&&r===t?r-1:r},tj=function(t,e){return(t-e._start)*e._ts+(e._ts>=0?0:e._dirty?e.totalDuration():e._tDur)},tG=function(t){return t._end=tM(t._start+(t._tDur/Math.abs(t._ts||t._rts||1e-8)||0))},tQ=function(t,e){var r=t._dp;return r&&r.smoothChildTiming&&t._ts&&(t._start=tM(r._time-(t._ts>0?e/t._ts:-(((t._dirty?t.totalDuration():t._tDur)-e)/t._ts))),tG(t),r._dirty||tU(r,t)),t},tZ=function(t,e){var r;if((e._time||!e._dur&&e._initted||e._start1e-8)&&e.render(r,!0)),tU(t,e)._dp&&t._initted&&t._time>=t._dur&&t._ts){if(t._dur=0&&r.totalTime(r._tTime),r=r._dp;t._zTime=-1e-8}},t$=function(t,e,r,n){return e.parent&&tX(e),e._start=tM((L(r)?r:r||t!==b?t4(t,r,e):t._time)+e._delay),e._end=tM(e._start+(e.totalDuration()/Math.abs(e.timeScale())||0)),tL(t,e,"_first","_last",t._sort?"_start":0),t1(e)||(t._recent=e),n||tZ(t,e),t._ts<0&&tQ(t,t._tTime),t},tK=function(t,e){return(tr.ScrollTrigger||ts("scrollTrigger",e))&&tr.ScrollTrigger.create(e,t)},tJ=function(t,e,r,n,i){return(e0(t,e,i),t._initted)?!r&&t._pt&&!y&&(t._dur&&!1!==t.vars.lazy||!t._dur&&t.vars.lazy)&&O!==eC.frame?(tp.push(t),t._lazy=[i,n],1):void 0:1},t0=function t(e){var r=e.parent;return r&&r._ts&&r._initted&&!r._lock&&(0>r.rawTime()||t(r))},t1=function(t){var e=t.data;return"isFromStart"===e||"isStart"===e},t2=function(t,e,r,n){var i,s,a,o=t.ratio,u=e<0||!e&&(!t._start&&t0(t)&&!(!t._initted&&t1(t))||(t._ts<0||t._dp._ts<0)&&!t1(t))?0:1,l=t._rDelay,c=0;if(l&&t._repeat&&(s=tV(c=et(0,t._tDur,e),l),t._yoyo&&1&s&&(u=1-u),s!==tV(t._tTime,l)&&(o=1-u,t.vars.repeatRefresh&&t._initted&&t.invalidate())),u!==o||y||n||1e-8===t._zTime||!e&&t._zTime){if(!t._initted&&tJ(t,e,n,r,c))return;for(a=t._zTime,t._zTime=e||1e-8*!!r,r||(r=e&&!a),t.ratio=u,t._from&&(u=1-u),t._time=0,t._tTime=c,i=t._pt;i;)i.r(u,i.d),i=i._next;e<0&&tH(t,e,r,!0),t._onUpdate&&!r&&e_(t,"onUpdate"),c&&t._repeat&&!r&&t.parent&&e_(t,"onRepeat"),(e>=t._tDur||e<0)&&t.ratio===u&&(u&&tX(t,1),r||y||(e_(t,u?"onComplete":"onReverseComplete",!0),t._prom&&t._prom()))}else t._zTime||(t._zTime=e)},t5=function(t,e,r){var n;if(r>e)for(n=t._first;n&&n._start<=r;){if("isPause"===n.data&&n._start>e)return n;n=n._next}else for(n=t._last;n&&n._start>=r;){if("isPause"===n.data&&n._start0&&!n&&tQ(t,t._tTime=t._tDur*a),t.parent&&tG(t),r||tU(t.parent,t),t},t8=function(t){return t instanceof eq?tU(t):t3(t,t._dur)},t6={_start:0,endTime:tu,totalDuration:tu},t4=function t(e,r,n){var i,s,a,o=e.labels,u=e._recent||t6,l=e.duration()>=1e8?u.endTime(!1):e._dur;return B(r)&&(isNaN(r)||r in o)?(s=r.charAt(0),a="%"===r.substr(-1),i=r.indexOf("="),"<"===s||">"===s)?(i>=0&&(r=r.replace(/=/,"")),("<"===s?u._start:u.endTime(u._repeat>=0))+(parseFloat(r.substr(1))||0)*(a?(i<0?u:n).totalDuration()/100:1)):i<0?(r in o||(o[r]=l),o[r]):(s=parseFloat(r.charAt(i-1)+r.substr(i+1)),a&&n&&(s=s/100*(V(n)?n[0]:n).totalDuration()),i>1?t(e,r.substr(0,i-1),n)+s:l+s):null==r?l:+r},t9=function(t,e,r){var n,i,s=L(e[1]),a=(s?2:1)+(t<2?0:1),o=e[a];if(s&&(o.duration=e[1]),o.parent=r,t){for(n=o,i=r;i&&!("immediateRender"in n);)n=i.vars.defaults||{},i=U(i.vars.inherit)&&i.parent;o.immediateRender=U(n.immediateRender),t<2?o.runBackwards=1:o.startAt=e[a-1]}return new e4(e[0],o,e[a+1])},t7=function(t,e){return t||0===t?e(t):e},et=function(t,e,r){return re?e:r},ee=function(t,e){return B(t)&&(e=te.exec(t))?e[1]:""},er=[].slice,en=function(t,e){return t&&X(t)&&"length"in t&&(!e&&!t.length||t.length-1 in t&&X(t[0]))&&!t.nodeType&&t!==T},ei=function(t,e,r){var n;return x&&!e&&x.selector?x.selector(t):B(t)&&!r&&(w||!eE())?er.call((e||k).querySelectorAll(t),0):V(t)?(void 0===n&&(n=[]),t.forEach(function(t){var e;return B(t)&&!r||en(t,1)?(e=n).push.apply(e,ei(t)):n.push(t)})||n):en(t)?er.call(t,0):t?[t]:[]},es=function(t){return t=ei(t)[0]||ta("Invalid scope")||{},function(e){var r=t.current||t.nativeElement||t;return ei(e,r.querySelectorAll?r:r===t?ta("Invalid scope")||k.createElement("div"):t)}},ea=function(t){return t.sort(function(){return .5-Math.random()})},eo=function(t){if(Y(t))return t;var e=X(t)?t:{each:t},r=eI(e.ease),n=e.from||0,i=parseFloat(e.base)||0,s={},a=n>0&&n<1,o=isNaN(n)||a,u=e.axis,l=n,c=n;return B(n)?l=c=({center:.5,edges:.5,end:1})[n]||0:!a&&o&&(l=n[0],c=n[1]),function(t,a,f){var h,p,d,_,g,m,v,y,x,b=(f||e).length,T=s[b];if(!T){if(!(x="auto"===e.grid?0:(e.grid||[1,1e8])[1])){for(v=-1e8;v<(v=f[x++].getBoundingClientRect().left)&&xv&&(v=g),gb?b-1:u?"y"===u?b/x:x:Math.max(x,b/x))||0)*("edges"===n?-1:1),T.b=b<0?i-b:i,T.u=ee(e.amount||e.each)||0,r=r&&b<0?eF(r):r}return b=(T[t]-T.min)/T.max||0,tM(T.b+(r?r(b):b)*T.v)+T.u}},eu=function(t){var e=Math.pow(10,((t+"").split(".")[1]||"").length);return function(r){var n=tM(Math.round(parseFloat(r)/t)*t*e);return(n-n%1)/e+(L(r)?0:ee(r))}},el=function(t,e){var r,n,i=V(t);return!i&&X(t)&&(r=i=t.radius||1e8,t.values?(n=!L((t=ei(t.values))[0]))&&(r*=r):t=eu(t.increment)),t7(e,i?Y(t)?function(e){return Math.abs((n=t(e))-e)<=r?n:e}:function(e){for(var i,s,a=parseFloat(n?e.x:e),o=parseFloat(n?e.y:0),u=1e8,l=0,c=t.length;c--;)(i=n?(i=t[c].x-a)*i+(s=t[c].y-o)*s:Math.abs(t[c]-a))(i=Math.abs(i))&&(s=n,o=i);return s},e_=function(t,e,r){var n,i,s,a=t.vars,o=a[e],u=x,l=t._ctx;if(o)return n=a[e+"Params"],i=a.callbackScope||t,r&&tp.length&&tE(),l&&(x=l),s=n?o.apply(i,n):o.call(i),x=u,s},eg=function(t){return tX(t),t.scrollTrigger&&t.scrollTrigger.kill(!!y),1>t.progress()&&e_(t,"onInterrupt"),t},em=[],ev=function(t){if(t)if(t=!t.name&&t.default||t,q()||t.headless){var e=t.name,r=Y(t),n=e&&!r&&t.init?function(){this._props=[]}:t,i={init:tu,render:ra,add:e$,kill:ru,modifier:ro,rawVars:0},s={targetTest:0,get:0,getSetter:rr,aliases:{},register:0};if(eE(),t!==n){if(t_[e])return;tR(n,tR(tI(t,i),s)),tz(n.prototype,tz(i,tI(t,s))),t_[n.prop=e]=n,t.targetTest&&(tv.push(n),th[e]=1),e=("css"===e?"CSS":e.charAt(0).toUpperCase()+e.substr(1))+"Plugin"}to(e,n),t.register&&t.register(rM,n,rf)}else em.push(t)},ey={aqua:[0,255,255],lime:[0,255,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,255],navy:[0,0,128],white:[255,255,255],olive:[128,128,0],yellow:[255,255,0],orange:[255,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[255,0,0],pink:[255,192,203],cyan:[0,255,255],transparent:[255,255,255,0]},ex=function(t,e,r){return(6*(t+=t<0?1:t>1?-1:0)<1?e+(r-e)*t*6:t<.5?r:3*t<2?e+(r-e)*(2/3-t)*6:e)*255+.5|0},eb=function(t,e,r){var n,i,s,a,o,u,l,c,f,h,p=t?L(t)?[t>>16,t>>8&255,255&t]:0:ey.black;if(!p){if(","===t.substr(-1)&&(t=t.substr(0,t.length-1)),ey[t])p=ey[t];else if("#"===t.charAt(0)){if(t.length<6&&(n=t.charAt(1),t="#"+n+n+(i=t.charAt(2))+i+(s=t.charAt(3))+s+(5===t.length?t.charAt(4)+t.charAt(4):"")),9===t.length)return[(p=parseInt(t.substr(1,6),16))>>16,p>>8&255,255&p,parseInt(t.substr(7),16)/255];p=[(t=parseInt(t.substr(1),16))>>16,t>>8&255,255&t]}else if("hsl"===t.substr(0,3))if(p=h=t.match(Q),e){if(~t.indexOf("="))return p=t.match(Z),r&&p.length<4&&(p[3]=1),p}else a=p[0]%360/360,o=p[1]/100,i=(u=p[2]/100)<=.5?u*(o+1):u+o-u*o,n=2*u-i,p.length>3&&(p[3]*=1),p[0]=ex(a+1/3,n,i),p[1]=ex(a,n,i),p[2]=ex(a-1/3,n,i);else p=t.match(Q)||ey.transparent;p=p.map(Number)}return e&&!h&&(n=p[0]/255,u=((l=Math.max(n,i=p[1]/255,s=p[2]/255))+(c=Math.min(n,i,s)))/2,l===c?a=o=0:(f=l-c,o=u>.5?f/(2-l-c):f/(l+c),a=(l===n?(i-s)/f+6*(ic||y<0)&&(h+=y-f),p+=y,((r=(m=p-h)-_)>0||x)&&(v=++a.frame,o=m-1e3*a.time,a.time=m/=1e3,_+=r+(r>=d?4:d-r),s=1),x||(n=i(t)),s)for(u=0;utypeof requestAnimationFrame&&requestAnimationFrame,n&&a.sleep(),i=s||function(t){return setTimeout(t,_-1e3*a.time+1|0)},E=1,m(2))},sleep:function(){(s?cancelAnimationFrame:clearTimeout)(n),E=0,i=tu},lagSmoothing:function(t,e){f=Math.min(e||33,c=t||1/0)},fps:function(t){d=1e3/(t||240),_=1e3*a.time+d},add:function(t,e,r){var n=e?function(e,r,i,s){t(e,r,i,s),a.remove(n)}:t;return a.remove(t),g[r?"unshift":"push"](n),eE(),n},remove:function(t,e){~(e=g.indexOf(t))&&g.splice(e,1)&&u>=e&&u--},_listeners:g}),eE=function(){return!E&&eC.wake()},eS={},eA=/^[\d.\-M][\d.\-,\s]/,eP=/["']/g,eD=function(t){for(var e,r,n,i={},s=t.substr(1,t.length-3).split(":"),a=s[0],o=1,u=s.length;o1&&r.config?r.config.apply(null,~t.indexOf("{")?[eD(e[1])]:eR(t).split(",").map(tP)):eS._CE&&eA.test(t)?eS._CE("",t):r},eF=function(t){return function(e){return 1-t(1-e)}},eI=function(t,e){return t&&(Y(t)?t:eS[t]||ez(t))||e},eB=function(t,e,r,n){void 0===r&&(r=function(t){return 1-e(1-t)}),void 0===n&&(n=function(t){return t<.5?e(2*t)/2:1-e((1-t)*2)/2});var i,s={easeIn:e,easeOut:r,easeInOut:n};return tw(t,function(t){for(var e in eS[t]=tr[t]=s,eS[i=t.toLowerCase()]=r,s)eS[i+("easeIn"===e?".in":"easeOut"===e?".out":".inOut")]=eS[t+"."+e]=s[e]}),s},eY=function(t){return function(e){return e<.5?(1-t(1-2*e))/2:.5+t((e-.5)*2)/2}},eL=function t(e,r,n){var i=r>=1?r:1,s=(n||(e?.3:.45))/(r<1?r:1),a=s/P*(Math.asin(1/i)||0),o=function(t){return 1===t?1:i*Math.pow(2,-10*t)*I((t-a)*s)+1},u="out"===e?o:"in"===e?function(t){return 1-o(1-t)}:eY(o);return s=P/s,u.config=function(r,n){return t(e,r,n)},u},eN=function t(e,r){void 0===r&&(r=1.70158);var n=function(t){return t?--t*t*((r+1)*t+r)+1:0},i="out"===e?n:"in"===e?function(t){return 1-n(1-t)}:eY(n);return i.config=function(r){return t(e,r)},i};tw("Linear,Quad,Cubic,Quart,Quint,Strong",function(t,e){var r=e<5?e+1:e;eB(t+",Power"+(r-1),e?function(t){return Math.pow(t,r)}:function(t){return t},function(t){return 1-Math.pow(1-t,r)},function(t){return t<.5?Math.pow(2*t,r)/2:1-Math.pow((1-t)*2,r)/2})}),eS.Linear.easeNone=eS.none=eS.Linear.easeIn,eB("Elastic",eL("in"),eL("out"),eL()),eW=2*(eH=1/2.75),eV=2.5*eH,eB("Bounce",function(t){return 1-ej(1-t)},ej=function(t){return t0?t+(t+this._rDelay)*this._repeat:t):this.totalDuration()&&this._dur},e.totalDuration=function(t){return arguments.length?(this._dirty=0,t3(this,this._repeat<0?t:(t-this._repeat*this._rDelay)/(this._repeat+1))):this._tDur},e.totalTime=function(t,e){if(eE(),!arguments.length)return this._tTime;var r=this._dp;if(r&&r.smoothChildTiming&&this._ts){for(tQ(this,t),!r._dp||r.parent||tZ(r,this);r&&r.parent;)r.parent._time!==r._start+(r._ts>=0?r._tTime/r._ts:-((r.totalDuration()-r._tTime)/r._ts))&&r.totalTime(r._tTime,!0),r=r.parent;!this.parent&&this._dp.autoRemoveChildren&&(this._ts>0&&t0||!this._tDur&&!t)&&t$(this._dp,this,this._start-this._delay)}return(this._tTime!==t||!this._dur&&!e||this._initted&&1e-8===Math.abs(this._zTime)||!this._initted&&this._dur&&t||!t&&!this._initted&&(this.add||this._ptLookup))&&(this._ts||(this._pTime=t),tA(this,t,e)),this},e.time=function(t,e){return arguments.length?this.totalTime(Math.min(this.totalDuration(),t+tW(this))%(this._dur+this._rDelay)||(t?this._dur:0),e):this._time},e.totalProgress=function(t,e){return arguments.length?this.totalTime(this.totalDuration()*t,e):this.totalDuration()?Math.min(1,this._tTime/this._tDur):this.rawTime()>=0&&this._initted?1:0},e.progress=function(t,e){return arguments.length?this.totalTime(this.duration()*(this._yoyo&&!(1&this.iteration())?1-t:t)+tW(this),e):this.duration()?Math.min(1,this._time/this._dur):+(this.rawTime()>0)},e.iteration=function(t,e){var r=this.duration()+this._rDelay;return arguments.length?this.totalTime(this._time+(t-1)*r,e):this._repeat?tV(this._tTime,r)+1:1},e.timeScale=function(t,e){if(!arguments.length)return -1e-8===this._rts?0:this._rts;if(this._rts===t)return this;var r=this.parent&&this._ts?tj(this.parent._time,this):this._tTime;return this._rts=+t||0,this._ts=this._ps||-1e-8===t?0:this._rts,this.totalTime(et(-Math.abs(this._delay),this.totalDuration(),r),!1!==e),tG(this),tq(this)},e.paused=function(t){return arguments.length?(this._ps!==t&&(this._ps=t,t?(this._pTime=this._tTime||Math.max(-this._delay,this.rawTime()),this._ts=this._act=0):(eE(),this._ts=this._rts,this.totalTime(this.parent&&!this.parent.smoothChildTiming?this.rawTime():this._tTime||this._pTime,1===this.progress()&&1e-8!==Math.abs(this._zTime)&&(this._tTime-=1e-8)))),this):this._ps},e.startTime=function(t){if(arguments.length){this._start=tM(t);var e=this.parent||this._dp;return e&&(e._sort||!this.parent)&&t$(e,this,this._start-this._delay),this}return this._start},e.endTime=function(t){return this._start+(U(t)?this.totalDuration():this.duration())/Math.abs(this._ts||1)},e.rawTime=function(t){var e=this.parent||this._dp;return e?t&&(!this._ts||this._repeat&&this._time&&1>this.totalProgress())?this._tTime%(this._dur+this._rDelay):this._ts?tj(e.rawTime(t),this):this._tTime:this._tTime},e.revert=function(t){void 0===t&&(t=tf);var e=y;return y=t,tS(this)&&(this.timeline&&this.timeline.revert(t),this.totalTime(-.01,t.suppressEvents)),"nested"!==this.data&&!1!==t.kill&&this.kill(),y=e,this},e.globalTime=function(t){for(var e=this,r=arguments.length?t:e.rawTime();e;)r=e._start+r/(Math.abs(e._ts)||1),e=e._dp;return!this.parent&&this._sat?this._sat.globalTime(t):r},e.repeat=function(t){return arguments.length?(this._repeat=t===1/0?-2:t,t8(this)):-2===this._repeat?1/0:this._repeat},e.repeatDelay=function(t){if(arguments.length){var e=this._time;return this._rDelay=t,t8(this),e?this.time(e):this}return this._rDelay},e.yoyo=function(t){return arguments.length?(this._yoyo=t,this):this._yoyo},e.seek=function(t,e){return this.totalTime(t4(this,t),U(e))},e.restart=function(t,e){return this.play().totalTime(t?-this._delay:0,U(e)),this._dur||(this._zTime=-1e-8),this},e.play=function(t,e){return null!=t&&this.seek(t,e),this.reversed(!1).paused(!1)},e.reverse=function(t,e){return null!=t&&this.seek(t||this.totalDuration(),e),this.reversed(!0).paused(!1)},e.pause=function(t,e){return null!=t&&this.seek(t,e),this.paused(!0)},e.resume=function(){return this.paused(!1)},e.reversed=function(t){return arguments.length?(!!t!==this.reversed()&&this.timeScale(-this._rts||(t?-1e-8:0)),this):this._rts<0},e.invalidate=function(){return this._initted=this._act=0,this._zTime=-1e-8,this},e.isActive=function(){var t,e=this.parent||this._dp,r=this._start;return!!(!e||this._ts&&this._initted&&e.isActive()&&(t=e.rawTime(!0))>=r&&t1?(e?(n[t]=e,r&&(n[t+"Params"]=r),"onUpdate"===t&&(this._onUpdate=e)):delete n[t],this):n[t]},e.then=function(t){var e=this,r=e._prom;return new Promise(function(n){var i=Y(t)?t:tD,s=function(){var t=e.then;e.then=null,r&&r(),Y(i)&&(i=i(e))&&(i.then||i===e)&&(e.then=t),n(i),e.then=t};e._initted&&1===e.totalProgress()&&e._ts>=0||!e._tTime&&e._ts<0?s():e._prom=s})},e.kill=function(){eg(this)},t}();tR(eU.prototype,{_time:0,_start:0,_end:0,_tTime:0,_tDur:0,_dirty:0,_repeat:0,_yoyo:!1,parent:null,_initted:!1,_rDelay:0,_ts:1,_dp:0,ratio:0,_zTime:-1e-8,_prom:0,_ps:!1,_rts:1});var eq=function(t){function n(r,n){var i;return void 0===r&&(r={}),(i=t.call(this,r)||this).labels={},i.smoothChildTiming=!!r.smoothChildTiming,i.autoRemoveChildren=!!r.autoRemoveChildren,i._sort=U(r.sortChildren),b&&t$(r.parent||b,e(i),n),r.reversed&&i.reverse(),r.paused&&i.paused(!0),r.scrollTrigger&&tK(e(i),r.scrollTrigger),i}r(n,t);var i=n.prototype;return i.to=function(t,e,r){return t9(0,arguments,this),this},i.from=function(t,e,r){return t9(1,arguments,this),this},i.fromTo=function(t,e,r,n){return t9(2,arguments,this),this},i.set=function(t,e,r){return e.duration=0,e.parent=this,tB(e).repeatDelay||(e.repeat=0),e.immediateRender=!!e.immediateRender,new e4(t,e,t4(this,r),1),this},i.call=function(t,e,r){return t$(this,e4.delayedCall(0,t,e),r)},i.staggerTo=function(t,e,r,n,i,s,a){return r.duration=e,r.stagger=r.stagger||n,r.onComplete=s,r.onCompleteParams=a,r.parent=this,new e4(t,r,t4(this,i)),this},i.staggerFrom=function(t,e,r,n,i,s,a){return r.runBackwards=1,tB(r).immediateRender=U(r.immediateRender),this.staggerTo(t,e,r,n,i,s,a)},i.staggerFromTo=function(t,e,r,n,i,s,a,o){return n.startAt=r,tB(n).immediateRender=U(n.immediateRender),this.staggerTo(t,e,n,i,s,a,o)},i.render=function(t,e,r){var n,i,s,a,o,u,l,c,f,h,p,d,_=this._time,g=this._dirty?this.totalDuration():this._tDur,m=this._dur,v=t<=0?0:tM(t),x=this._zTime<0!=t<0&&(this._initted||!m);if(this!==b&&v>g&&t>=0&&(v=g),v!==this._tTime||r||x){if(_!==this._time&&m&&(v+=this._time-_,t+=this._time-_),n=v,f=this._start,u=!(c=this._ts),x&&(m||(_=this._zTime),(t||!e)&&(this._zTime=t)),this._repeat){if(p=this._yoyo,o=m+this._rDelay,this._repeat<-1&&t<0)return this.totalTime(100*o+t,e,r);if(n=tM(v%o),v===g?(a=this._repeat,n=m):((a=~~(h=tM(v/o)))&&a===h&&(n=m,a--),n>m&&(n=m)),h=tV(this._tTime,o),!_&&this._tTime&&h!==a&&this._tTime-h*o-this._dur<=0&&(h=a),p&&1&a&&(n=m-n,d=1),a!==h&&!this._lock){var T=p&&1&h,w=T===(p&&1&a);if(a=_&&t>=0)for(i=this._first;i;){if(s=i._next,(i._act||n>=i._start)&&i._ts&&l!==i){if(i.parent!==this)return this.render(t,e,r);if(i.render(i._ts>0?(n-i._start)*i._ts:(i._dirty?i.totalDuration():i._tDur)+(n-i._start)*i._ts,e,r),n!==this._time||!this._ts&&!u){l=0,s&&(v+=this._zTime=-1e-8);break}}i=s}else{i=this._last;for(var k=t<0?t:n;i;){if(s=i._prev,(i._act||k<=i._end)&&i._ts&&l!==i){if(i.parent!==this)return this.render(t,e,r);if(i.render(i._ts>0?(k-i._start)*i._ts:(i._dirty?i.totalDuration():i._tDur)+(k-i._start)*i._ts,e,r||y&&tS(i)),n!==this._time||!this._ts&&!u){l=0,s&&(v+=this._zTime=k?-1e-8:1e-8);break}}i=s}}if(l&&!e&&(this.pause(),l.render(n>=_?0:-1e-8)._zTime=n>=_?1:-1,this._ts))return this._start=f,tG(this),this.render(t,e,r);this._onUpdate&&!e&&e_(this,"onUpdate",!0),(v===g&&this._tTime>=this.totalDuration()||!v&&_)&&(f===this._start||Math.abs(c)!==Math.abs(this._ts))&&!this._lock&&((t||!m)&&(v===g&&this._ts>0||!v&&this._ts<0)&&tX(this,1),e||t<0&&!_||!v&&!_&&g||(e_(this,v===g&&t>=0?"onComplete":"onReverseComplete",!0),this._prom&&!(v0)&&this._prom()))}return this},i.add=function(t,e){var r=this;if(L(e)||(e=t4(this,e,t)),!(t instanceof eU)){if(V(t))return t.forEach(function(t){return r.add(t,e)}),this;if(B(t))return this.addLabel(t,e);if(!Y(t))return this;t=e4.delayedCall(0,t)}return this!==t?t$(this,t,e):this},i.getChildren=function(t,e,r,n){void 0===t&&(t=!0),void 0===e&&(e=!0),void 0===r&&(r=!0),void 0===n&&(n=-1e8);for(var i=[],s=this._first;s;)s._start>=n&&(s instanceof e4?e&&i.push(s):(r&&i.push(s),t&&i.push.apply(i,s.getChildren(!0,e,r)))),s=s._next;return i},i.getById=function(t){for(var e=this.getChildren(1,1,1),r=e.length;r--;)if(e[r].vars.id===t)return e[r]},i.remove=function(t){return B(t)?this.removeLabel(t):Y(t)?this.killTweensOf(t):(t.parent===this&&tN(this,t),t===this._recent&&(this._recent=this._last),tU(this))},i.totalTime=function(e,r){return arguments.length?(this._forcing=1,!this._dp&&this._ts&&(this._start=tM(eC.time-(this._ts>0?e/this._ts:-((this.totalDuration()-e)/this._ts)))),t.prototype.totalTime.call(this,e,r),this._forcing=0,this):this._tTime},i.addLabel=function(t,e){return this.labels[t]=t4(this,e),this},i.removeLabel=function(t){return delete this.labels[t],this},i.addPause=function(t,e,r){var n=e4.delayedCall(0,e||tu,r);return n.data="isPause",this._hasPause=1,t$(this,n,t4(this,t))},i.removePause=function(t){var e=this._first;for(t=t4(this,t);e;)e._start===t&&"isPause"===e.data&&tX(e),e=e._next},i.killTweensOf=function(t,e,r){for(var n=this.getTweensOf(t,r),i=n.length;i--;)eG!==n[i]&&n[i].kill(t,e);return this},i.getTweensOf=function(t,e){for(var r,n=[],i=ei(t),s=this._first,a=L(e);s;)s instanceof e4?tC(s._targets,i)&&(a?(!eG||s._initted&&s._ts)&&s.globalTime(0)<=e&&s.globalTime(s.totalDuration())>e:!e||s.isActive())&&n.push(s):(r=s.getTweensOf(i,e)).length&&n.push.apply(n,r),s=s._next;return n},i.tweenTo=function(t,e){e=e||{};var r,n=this,i=t4(n,t),s=e,a=s.startAt,o=s.onStart,u=s.onStartParams,l=s.immediateRender,c=e4.to(n,tR({ease:e.ease||"none",lazy:!1,immediateRender:!1,time:i,overwrite:"auto",duration:e.duration||Math.abs((i-(a&&"time"in a?a.time:n._time))/n.timeScale())||1e-8,onStart:function(){if(n.pause(),!r){var t=e.duration||Math.abs((i-(a&&"time"in a?a.time:n._time))/n.timeScale());c._dur!==t&&t3(c,t,0,1).render(c._time,!0,!0),r=1}o&&o.apply(c,u||[])}},e));return l?c.render(0):c},i.tweenFromTo=function(t,e,r){return this.tweenTo(e,tR({startAt:{time:t4(this,t)}},r))},i.recent=function(){return this._recent},i.nextLabel=function(t){return void 0===t&&(t=this._time),ed(this,t4(this,t))},i.previousLabel=function(t){return void 0===t&&(t=this._time),ed(this,t4(this,t),1)},i.currentLabel=function(t){return arguments.length?this.seek(t,!0):this.previousLabel(this._time+1e-8)},i.shiftChildren=function(t,e,r){void 0===r&&(r=0);var n,i=this._first,s=this.labels;for(t=tM(t);i;)i._start>=r&&(i._start+=t,i._end+=t),i=i._next;if(e)for(n in s)s[n]>=r&&(s[n]+=t);return tU(this)},i.invalidate=function(e){var r=this._first;for(this._lock=0;r;)r.invalidate(e),r=r._next;return t.prototype.invalidate.call(this,e)},i.clear=function(t){void 0===t&&(t=!0);for(var e,r=this._first;r;)e=r._next,this.remove(r),r=e;return this._dp&&(this._time=this._tTime=this._pTime=0),t&&(this.labels={}),tU(this)},i.totalDuration=function(t){var e,r,n,i=0,s=this._last,a=1e8;if(arguments.length)return this.timeScale((this._repeat<0?this.duration():this.totalDuration())/(this.reversed()?-t:t));if(this._dirty){for(n=this.parent;s;)e=s._prev,s._dirty&&s.totalDuration(),(r=s._start)>a&&this._sort&&s._ts&&!this._lock?(this._lock=1,t$(this,s,r-s._delay,1)._lock=0):a=r,r<0&&s._ts&&(i-=r,(!n&&!this._dp||n&&n.smoothChildTiming)&&(this._start+=tM(r/this._ts),this._time-=r,this._tTime-=r),this.shiftChildren(-r,!1,-Infinity),a=0),s._end>i&&s._ts&&(i=s._end),s=e;t3(this,this===b&&this._time>i?this._time:i,1,1),this._dirty=0}return this._tDur},n.updateRoot=function(t){if(b._ts&&(tA(b,tj(t,b)),O=eC.frame),eC.frame>=tm){tm+=S.autoSleep||120;var e=b._first;if((!e||!e._ts)&&S.autoSleep&&eC._listeners.length<2){for(;e&&!e._ts;)e=e._next;e||eC.sleep()}}},n}(eU);tR(eq.prototype,{_lock:0,_hasPause:0,_forcing:0});var eH,eW,eV,ej,eG,eQ,eZ=function(t,e,r,n,i,s,a){var o,u,l,c,f,h,p,d,_=new rf(this._pt,t,e,0,1,rs,null,i),g=0,m=0;for(_.b=r,_.e=n,r+="",n+="",(p=~n.indexOf("random("))&&(n=eh(n)),s&&(s(d=[r,n],t,e),r=d[0],n=d[1]),u=r.match(K)||[];o=K.exec(n);)c=o[0],f=n.substring(g,o.index),l?l=(l+1)%5:"rgba("===f.substr(-5)&&(l=1),c!==u[m++]&&(h=parseFloat(u[m-1])||0,_._pt={_next:_._pt,p:f||1===m?f:",",s:h,c:"="===c.charAt(1)?tO(h,c)-h:parseFloat(c)-h,m:l&&l<4?Math.round:0},g=K.lastIndex);return _.c=g")}),a.duration();else{for(c in u={},w)"ease"===c||"easeEach"===c||e5(c,w[c],u,w.easeEach);for(c in u)for(o=0,A=u[c].sort(function(t,e){return t.t-e.t}),R=0;oh-1e-8&&!d?h:t<1e-8?0:t;if(p){if(_!==this._tTime||!t||r||!this._initted&&this._tTime||this._startAt&&this._zTime<0!==d||this._lazy){if(n=_,c=this.timeline,this._repeat){if(a=p+this._rDelay,this._repeat<-1&&d)return this.totalTime(100*a+t,e,r);if(n=tM(_%a),_===h?(s=this._repeat,n=p):(s=~~(o=tM(_/a)))&&s===o?(n=p,s--):n>p&&(n=p),(u=this._yoyo&&1&s)&&(n=p-n),o=tV(this._tTime,a),n===f&&!r&&this._initted&&s===o)return this._tTime=_,this;s!==o&&this.vars.repeatRefresh&&!u&&!this._lock&&n!==a&&this._initted&&(this._lock=r=1,this.render(tM(a*s),!0).invalidate()._lock=0)}if(!this._initted){if(tJ(this,d?t:n,r,e,_))return this._tTime=0,this;if(f!==this._time&&!(r&&this.vars.repeatRefresh&&s!==o))return this;if(p!==this._dur)return this.render(t,e,r)}if(this._rEase){var g=n0||!_&&this._ts<0)&&tX(this,1),!e&&!(d&&!f)&&(_||f||u)&&(e_(this,_===h?"onComplete":"onReverseComplete",!0),this._prom&&!(_0)&&this._prom()))}}else t2(this,t,e,r);return this},i.targets=function(){return this._targets},i.invalidate=function(e){return e&&this.vars.runBackwards||(this._startAt=0),this._pt=this._op=this._onUpdate=this._lazy=this.ratio=0,this._ptLookup=[],this.timeline&&this.timeline.invalidate(e),t.prototype.invalidate.call(this,e)},i.resetTo=function(t,e,r,n,i){E||eC.wake(),this._ts||this.play();var s=Math.min(this._dur,(this._dp._time-this._start)*this._ts);return(this._initted||e0(this,s),e1(this,t,e,r,n,this._ease(s/this._dur),s,i))?this.resetTo(t,e,r,n,1):(tQ(this,0),this.parent||tL(this._dp,this,"_first","_last",this._dp._sort?"_start":0),this.render(0))},i.kill=function(t,e){if(void 0===e&&(e="all"),!t&&(!e||"all"===e))return this._lazy=this._pt=0,this.parent?eg(this):this.scrollTrigger&&this.scrollTrigger.kill(!!y),this;if(this.timeline){var r=this.timeline.totalDuration();return this.timeline.killTweensOf(t,e,eG&&!0!==eG.vars.overwrite)._first||eg(this),this.parent&&r!==this.timeline.totalDuration()&&t3(this,this._dur*this.timeline._tDur/r,0,1),this}var n,i,s,a,o,u,l,c=this._targets,f=t?ei(t):c,h=this._ptLookup,p=this._pt;if((!e||"all"===e)&&tY(c,f))return"all"===e&&(this._pt=0),eg(this);for(n=this._op=this._op||[],"all"!==e&&(B(e)&&(o={},tw(e,function(t){return o[t]=1}),e=o),e=e2(c,e)),l=c.length;l--;)if(~f.indexOf(c[l]))for(o in i=h[l],"all"===e?(n[l]=e,a=i,s={}):(s=n[l]=n[l]||{},a=e),a)(u=i&&i[o])&&("kill"in u.d&&!0!==u.d.kill(o)||tN(this,u,"_pt"),delete i[o]),"all"!==s&&(s[o]=1);return this._initted&&!this._pt&&p&&eg(this),this},n.to=function(t,e){return new n(t,e,arguments[2])},n.from=function(t,e){return t9(1,arguments)},n.delayedCall=function(t,e,r,i){return new n(e,0,{immediateRender:!1,lazy:!1,overwrite:!1,delay:t,onComplete:e,onReverseComplete:e,onCompleteParams:r,onReverseCompleteParams:r,callbackScope:i})},n.fromTo=function(t,e,r){return t9(2,arguments)},n.set=function(t,e){return e.duration=0,e.repeatDelay||(e.repeat=0),new n(t,e)},n.killTweensOf=function(t,e,r){return b.killTweensOf(t,e,r)},n}(eU);tR(e4.prototype,{_targets:[],_lazy:0,_startAt:0,_op:0,_onInit:0}),tw("staggerTo,staggerFrom,staggerFromTo",function(t){e4[t]=function(){var e=new eq,r=er.call(arguments,0);return r.splice("staggerFromTo"===t?5:4,0,0),e[t].apply(e,r)}});var e9=function(t,e,r){return t[e]=r},e7=function(t,e,r){return t[e](r)},rt=function(t,e,r,n){return t[e](n.fp,r)},re=function(t,e,r){return t.setAttribute(e,r)},rr=function(t,e){return Y(t[e])?e7:N(t[e])&&t.setAttribute?re:e9},rn=function(t,e){return e.set(e.t,e.p,Math.round((e.s+e.c*t)*1e6)/1e6,e)},ri=function(t,e){return e.set(e.t,e.p,!!(e.s+e.c*t),e)},rs=function(t,e){var r=e._pt,n="";if(!t&&e.b)n=e.b;else if(1===t&&e.e)n=e.e;else{for(;r;)n=r.p+(r.m?r.m(r.s+r.c*t):Math.round((r.s+r.c*t)*1e4)/1e4)+n,r=r._next;n+=e.c}e.set(e.t,e.p,n,e)},ra=function(t,e){for(var r=e._pt;r;)r.r(t,r.d),r=r._next},ro=function(t,e,r,n){for(var i,s=this._pt;s;)i=s._next,s.p===n&&s.modifier(t,e,r),s=i},ru=function(t){for(var e,r,n=this._pt;n;)r=n._next,(n.p!==t||n.op)&&n.op!==t?n.dep||(e=1):tN(this,n,"_pt"),n=r;return!e},rl=function(t,e,r,n){n.mSet(t,e,n.m.call(n.tween,r,n.mt),n)},rc=function(t){for(var e,r,n,i,s=t._pt;s;){for(e=s._next,r=n;r&&r.pr>s.pr;)r=r._next;(s._prev=r?r._prev:i)?s._prev._next=s:n=s,(s._next=r)?r._prev=s:i=s,s=e}t._pt=n},rf=function(){function t(t,e,r,n,i,s,a,o,u){this.t=e,this.s=n,this.c=i,this.p=r,this.r=s||rn,this.d=a||this,this.set=o||e9,this.pr=u||0,this._next=t,t&&(t._prev=this)}return t.prototype.modifier=function(t,e,r){this.mSet=this.mSet||this.set,this.set=rl,this.m=t,this.mt=r,this.tween=e},t}();tw(ty+"parent,duration,ease,delay,overwrite,runBackwards,startAt,yoyo,immediateRender,repeat,repeatDelay,data,paused,reversed,lazy,callbackScope,stringFilter,id,yoyoEase,stagger,inherit,repeatRefresh,keyframes,autoRevert,scrollTrigger,easeReverse",function(t){return th[t]=1}),tr.TweenMax=tr.TweenLite=e4,tr.TimelineLite=tr.TimelineMax=eq,b=new eq({sortChildren:!1,defaults:A,autoRemoveChildren:!0,id:"root",smoothChildTiming:!0}),S.stringFilter=eO;var rh=[],rp={},rd=[],r_=0,rg=0,rm=function(t){return(rp[t]||rd).map(function(t){return t()})},rv=function(){var t=Date.now(),e=[];t-r_>2&&(rm("matchMediaInit"),rh.forEach(function(t){var r,n,i,s,a=t.queries,o=t.conditions;for(n in a)(r=T.matchMedia(a[n]).matches)&&(i=1),r!==o[n]&&(o[n]=r,s=1);s&&(t.revert(),i&&e.push(t))}),rm("matchMediaRevert"),e.forEach(function(t){return t.onMatch(t,function(e){return t.add(null,e)})}),r_=t,rm("matchMedia"))},ry=function(){function t(t,e){this.selector=e&&es(e),this.data=[],this._r=[],this.isReverted=!1,this.id=rg++,t&&this.add(t)}var e=t.prototype;return e.add=function(t,e,r){Y(t)&&(r=e,e=t,t=Y);var n=this,i=function(){var t,i=x,s=n.selector;return i&&i!==n&&i.data.push(n),r&&(n.selector=es(r)),x=n,t=e.apply(n,arguments),Y(t)&&n._r.push(t),x=i,n.selector=s,n.isReverted=!1,t};return n.last=i,t===Y?i(n,function(t){return n.add(null,t)}):t?n[t]=i:i},e.ignore=function(t){var e=x;x=null,t(this),x=e},e.getTweens=function(){var e=[];return this.data.forEach(function(r){return r instanceof t?e.push.apply(e,r.getTweens()):r instanceof e4&&!(r.parent&&"nested"===r.parent.data)&&e.push(r)}),e},e.clear=function(){this._r.length=this.data.length=0},e.kill=function(t,e){var r=this;if(t){for(var n,i=r.getTweens(),s=r.data.length;s--;)"isFlip"===(n=r.data[s]).data&&(n.revert(),n.getChildren(!0,!0,!1).forEach(function(t){return i.splice(i.indexOf(t),1)}));for(i.map(function(t){return{g:t._dur||t._delay||t._sat&&!t._sat.vars.immediateRender?t.globalTime(0):-1/0,t:t}}).sort(function(t,e){return e.g-t.g||-1/0}).forEach(function(e){return e.t.revert(t)}),s=r.data.length;s--;)(n=r.data[s])instanceof eq?"nested"!==n.data&&(n.scrollTrigger&&n.scrollTrigger.revert(),n.kill()):n instanceof e4||!n.revert||n.revert(t);r._r.forEach(function(e){return e(t,r)}),r.isReverted=!0}else this.data.forEach(function(t){return t.kill&&t.kill()});if(this.clear(),e)for(var a=rh.length;a--;)rh[a].id===this.id&&rh.splice(a,1)},e.revert=function(t){this.kill(t||{})},t}(),rx=function(){function t(t){this.contexts=[],this.scope=t,x&&x.data.push(this)}var e=t.prototype;return e.add=function(t,e,r){X(t)||(t={matches:t});var n,i,s,a=new ry(0,r||this.scope),o=a.conditions={};for(i in x&&!a.selector&&(a.selector=x.selector),this.contexts.push(a),e=a.add("onMatch",e),a.queries=t,t)"all"===i?s=1:(n=T.matchMedia(t[i]))&&(0>rh.indexOf(a)&&rh.push(a),(o[i]=n.matches)&&(s=1),n.addListener?n.addListener(rv):n.addEventListener("change",rv));return s&&e(a,function(t){return a.add(null,t)}),this},e.revert=function(t){this.kill(t||{})},e.kill=function(t){this.contexts.forEach(function(e){return e.kill(t,!0)})},t}(),rb={registerPlugin:function(){for(var t=arguments.length,e=Array(t),r=0;r1){var n=t.map(function(t){return rM.quickSetter(t,e,r)}),i=n.length;return function(t){for(var e=i;e--;)n[e](t)}}t=t[0]||{};var s=t_[e],a=tb(t),o=a.harness&&(a.harness.aliases||{})[e]||e,u=s?function(e){var n=new s;C._pt=0,n.init(t,r?e+r:e,C,0,[t]),n.render(1,n),C._pt&&ra(1,C)}:a.set(t,o);return s?u:function(e){return u(t,o,r?e+r:e,a,1)}},quickTo:function(t,e,r){var n,i=rM.to(t,tR(((n={})[e]="+=0.1",n.paused=!0,n.stagger=0,n),r||{})),s=function(t,r,n){return i.resetTo(e,t,r,n)};return s.tween=i,s},isTweening:function(t){return b.getTweensOf(t,!0).length>0},defaults:function(t){return t&&t.ease&&(t.ease=eI(t.ease,A.ease)),tF(A,t||{})},config:function(t){return tF(S,t||{})},registerEffect:function(t){var e=t.name,r=t.effect,n=t.plugins,i=t.defaults,s=t.extendTimeline;(n||"").split(",").forEach(function(t){return t&&!t_[t]&&!tr[t]&&ta(e+" effect requires "+t+" plugin.")}),tg[e]=function(t,e,n){return r(ei(t),tR(e||{},i),n)},s&&(eq.prototype[e]=function(t,r,n){return this.add(tg[e](t,X(r)?r:(n=r)&&{},this),n)})},registerEase:function(t,e){eS[t]=eI(e)},parseEase:function(t,e){return arguments.length?eI(t,e):eS},getById:function(t){return b.getById(t)},exportRoot:function(t,e){void 0===t&&(t={});var r,n,i=new eq(t);for(i.smoothChildTiming=U(t.smoothChildTiming),b.remove(i),i._dp=0,i._time=i._tTime=b._time,r=b._first;r;)n=r._next,(e||!(!r._dur&&r instanceof e4&&r.vars.onComplete===r._targets[0]))&&t$(i,r,r._start-r._delay),r=n;return t$(b,i,0),i},context:function(t,e){return t?new ry(t,e):x},matchMedia:function(t){return new rx(t)},matchMediaRefresh:function(){return rh.forEach(function(t){var e,r,n=t.conditions;for(r in n)n[r]&&(n[r]=!1,e=1);e&&t.revert()})||rv()},addEventListener:function(t,e){var r=rp[t]||(rp[t]=[]);~r.indexOf(e)||r.push(e)},removeEventListener:function(t,e){var r=rp[t],n=r&&r.indexOf(e);n>=0&&r.splice(n,1)},utils:{wrap:function t(e,r,n){var i=r-e;return V(e)?ef(e,t(0,e.length),r):t7(n,function(t){return(i+(t-e)%i)%i+e})},wrapYoyo:function t(e,r,n){var i=r-e,s=2*i;return V(e)?ef(e,t(0,e.length-1),r):t7(n,function(t){return t=(s+(t-e)%s)%s||0,e+(t>i?s-t:t)})},distribute:eo,random:ec,snap:el,normalize:function(t,e,r){return ep(t,e,0,1,r)},getUnit:ee,clamp:function(t,e,r){return t7(r,function(r){return et(t,e,r)})},splitColor:eb,toArray:ei,selector:es,mapRange:ep,pipe:function(){for(var t=arguments.length,e=Array(t),r=0;r=0)return;a.svg&&(this.svgo=i.getAttribute("data-svg-origin"),this.props.push(r1,r,"")),e=r0}(s||r)&&this.props.push(e,r,s[e])},r5=function(t){t.translate&&(t.removeProperty("translate"),t.removeProperty("scale"),t.removeProperty("rotate"))},r3=function(){var t,e,r=this.props,n=this.target,i=n.style,s=n._gsap;for(t=0;t=0?r9[i]:"")+t},nt=function(){"u">typeof window&&window.document&&(rC=(rO=window.document).documentElement,rS=r6("div")||{style:{}},r6("div"),r1=(r0=r7(r0))+"Origin",rS.style.cssText="border-width:0;line-height:0;position:absolute;padding:0",rD=!!r7("perspective"),rP=rM.core.reverting,rE=1)},ne=function(t){var e,r=t.ownerSVGElement,n=r6("svg",r&&r.getAttribute("xmlns")||"http://www.w3.org/2000/svg"),i=t.cloneNode(!0);i.style.display="block",n.appendChild(i),rC.appendChild(n);try{e=i.getBBox()}catch(t){}return n.removeChild(i),rC.removeChild(n),e},nr=function(t,e){for(var r=e.length;r--;)if(t.hasAttribute(e[r]))return t.getAttribute(e[r])},nn=function(t){var e,r;try{e=t.getBBox()}catch(n){e=ne(t),r=1}return e&&(e.width||e.height)||r||(e=ne(t)),!e||e.width||e.x||e.y?e:{x:+nr(t,["x","cx","x1"])||0,y:+nr(t,["y","cy","y1"])||0,width:0,height:0}},ni=function(t){return!!(t.getCTM&&(!t.parentNode||t.ownerSVGElement)&&nn(t))},ns=function(t,e){if(e){var r,n=t.style;e in rR&&e!==r1&&(e=r0),n.removeProperty?(("ms"===(r=e.substr(0,2))||"webkit"===e.substr(0,6))&&(e="-"+e),n.removeProperty("--"===r?e:e.replace(rB,"-$1").toLowerCase())):n.removeAttribute(e)}},na=function(t,e,r,n,i,s){var a=new rf(t._pt,e,r,0,1,s?rj:rV);return t._pt=a,a.b=n,a.e=i,t._props.push(r),a},no={deg:1,rad:1,turn:1},nu={grid:1,flex:1},nl=function t(e,r,n,i){var s,a,o,u,l=parseFloat(n)||0,c=(n+"").trim().substr((l+"").length)||"px",f=rS.style,h=rY.test(r),p="svg"===e.tagName.toLowerCase(),d=(p?"client":"offset")+(h?"Width":"Height"),_="px"===i,g="%"===i;if(i===c||!l||no[i]||no[c])return l;if("px"===c||_||(l=t(e,r,n,"px")),u=e.getCTM&&ni(e),(g||"%"===c)&&(rR[r]||~r.indexOf("adius")))return s=u?e.getBBox()[h?"width":"height"]:e[d],tk(g?l/s*100:l/100*s);if(f[h?"width":"height"]=100+(_?c:i),a="rem"!==i&&~r.indexOf("adius")||"em"===i&&e.appendChild&&!p?e:e.parentNode,u&&(a=(e.ownerSVGElement||{}).parentNode),a&&a!==rO&&a.appendChild||(a=rO.body),(o=a._gsap)&&g&&o.width&&h&&o.time===eC.time&&!o.uncache)return tk(l/o.width*100);if(g&&("height"===r||"width"===r)){var m=e.style[r];e.style[r]=100+i,s=e[d],m?e.style[r]=m:ns(e,r)}else(g||"%"===c)&&!nu[r4(a,"display")]&&(f.position=r4(e,"position")),a===e&&(f.position="static"),a.appendChild(rS),s=rS[d],a.removeChild(rS),f.position="absolute";return h&&g&&((o=tb(a)).time=eC.time,o.width=a[d]),tk(_?s*l/100:s&&l?100/s*l:0)},nc=function(t,e,r,n){var i;return rE||nt(),e in rN&&"transform"!==e&&~(e=rN[e]).indexOf(",")&&(e=e.split(",")[0]),rR[e]&&"transform"!==e?(i=nT(t,n),i="transformOrigin"!==e?i[e]:i.svg?i.origin:nw(r4(t,r1))+" "+i.zOrigin+"px"):(!(i=t.style[e])||"auto"===i||n||~(i+"").indexOf("calc("))&&(i=n_[e]&&n_[e](t,e,r)||r4(t,e)||tT(t,e)||+("opacity"===e)),r&&!~(i+"").trim().indexOf(" ")?nl(t,e,i,r)+r:i},nf=function(t,e,r,n){if(!r||"none"===r){var i=r7(e,t,1),s=i&&r4(t,i,1);s&&s!==r?(e=i,r=s):"borderColor"===e&&(r=r4(t,"borderTopColor"))}var a,o,u,l,c,f,h,p,d,_,g,m=new rf(this._pt,t.style,e,0,1,rs),v=0,y=0;if(m.b=r,m.e=n,r+="","var(--"===(n+="").substring(0,6)&&(n=r4(t,n.substring(4,n.indexOf(")")))),"auto"===n&&(f=t.style[e],t.style[e]=n,n=r4(t,e)||n,f?t.style[e]=f:ns(t,e)),eO(a=[r,n]),r=a[0],n=a[1],u=r.match($)||[],(n.match($)||[]).length){for(;o=$.exec(n);)h=o[0],d=n.substring(v,o.index),c?c=(c+1)%5:("rgba("===d.substr(-5)||"hsla("===d.substr(-5))&&(c=1),h!==(f=u[y++]||"")&&(l=parseFloat(f)||0,g=f.substr((l+"").length),"="===h.charAt(1)&&(h=tO(l,h)+g),p=parseFloat(h),_=h.substr((p+"").length),v=$.lastIndex-_.length,_||(_=_||S.units[e]||g,v===n.length&&(n+=_,m.e+=_)),g!==_&&(l=nl(t,e,f,_)||0),m._pt={_next:m._pt,p:d||1===y?d:",",s:l,c:p-l,m:c&&c<4||"zIndex"===e?Math.round:0});m.c=v-1;)rR[r=o[i]]&&(n=1,r="transformOrigin"===r?r1:r0),ns(s,r);n&&(ns(s,r0),u&&(u.svg&&s.removeAttribute("transform"),a.scale=a.rotate=a.translate="none",nT(s,1),u.uncache=1,r5(a)))}},n_={clearProps:function(t,e,r,n,i){if("isFromStart"!==i.data){var s=t._pt=new rf(t._pt,e,r,0,0,nd);return s.u=n,s.pr=-10,s.tween=i,t._props.push(r),1}}},ng=[1,0,0,1,0,0],nm={},nv=function(t){return"matrix(1, 0, 0, 1, 0, 0)"===t||"none"===t||!t},ny=function(t){var e=r4(t,r0);return nv(e)?ng:e.substr(7).match(Z).map(tk)},nx=function(t,e){var r,n,i,s,a=t._gsap||tb(t),o=t.style,u=ny(t);return a.svg&&t.getAttribute("transform")?"1,0,0,1,0,0"===(u=[(i=t.transform.baseVal.consolidate().matrix).a,i.b,i.c,i.d,i.e,i.f]).join(",")?ng:u:(u!==ng||t.offsetParent||t===rC||a.svg||(i=o.display,o.display="block",(r=t.parentNode)&&(t.offsetParent||t.getBoundingClientRect().width)||(s=1,n=t.nextElementSibling,rC.appendChild(t)),u=ny(t),i?o.display=i:ns(t,"display"),s&&(n?r.insertBefore(t,n):r?r.appendChild(t):rC.removeChild(t))),e&&u.length>6?[u[0],u[1],u[4],u[5],u[12],u[13]]:u)},nb=function(t,e,r,n,i,s){var a,o,u,l,c=t._gsap,f=i||nx(t,!0),h=c.xOrigin||0,p=c.yOrigin||0,d=c.xOffset||0,_=c.yOffset||0,g=f[0],m=f[1],v=f[2],y=f[3],x=f[4],b=f[5],T=e.split(" "),w=parseFloat(T[0])||0,k=parseFloat(T[1])||0;r?f!==ng&&(o=g*y-m*v)&&(u=y/o*w+-v/o*k+(v*b-y*x)/o,l=-m/o*w+g/o*k-(g*b-m*x)/o,w=u,k=l):(w=(a=nn(t)).x+(~T[0].indexOf("%")?w/100*a.width:w),k=a.y+(~(T[1]||T[0]).indexOf("%")?k/100*a.height:k)),n||!1!==n&&c.smooth?(c.xOffset=d+((x=w-h)*g+(b=k-p)*v)-x,c.yOffset=_+(x*m+b*y)-b):c.xOffset=c.yOffset=0,c.xOrigin=w,c.yOrigin=k,c.smooth=!!n,c.origin=e,c.originIsAbsolute=!!r,t.style[r1]="0px 0px",s&&(na(s,c,"xOrigin",h,w),na(s,c,"yOrigin",p,k),na(s,c,"xOffset",d,c.xOffset),na(s,c,"yOffset",_,c.yOffset)),t.setAttribute("data-svg-origin",w+" "+k)},nT=function(t,e){var r=t._gsap||new eX(t);if("x"in r&&!e&&!r.uncache)return r;var n,i,s,a,o,u,l,c,f,h,p,d,_,g,m,v,y,x,b,T,w,k,M,O,C,E,A,P,D,R,z,F,I=t.style,B=r.scaleX<0,Y=getComputedStyle(t),L=r4(t,r1)||"0";return n=i=s=u=l=c=f=h=p=0,a=o=1,r.svg=!!(t.getCTM&&ni(t)),Y.translate&&(("none"!==Y.translate||"none"!==Y.scale||"none"!==Y.rotate)&&(I[r0]=("none"!==Y.translate?"translate3d("+(Y.translate+" 0 0").split(" ").slice(0,3).join(", ")+") ":"")+("none"!==Y.rotate?"rotate("+Y.rotate+") ":"")+("none"!==Y.scale?"scale("+Y.scale.split(" ").join(",")+") ":"")+("none"!==Y[r0]?Y[r0]:"")),I.scale=I.rotate=I.translate="none"),g=nx(t,r.svg),r.svg&&(r.uncache?(C=t.getBBox(),L=r.xOrigin-C.x+"px "+(r.yOrigin-C.y)+"px",O=""):O=!e&&t.getAttribute("data-svg-origin"),nb(t,O||L,!!O||r.originIsAbsolute,!1!==r.smooth,g)),d=r.xOrigin||0,_=r.yOrigin||0,g!==ng&&(x=g[0],b=g[1],T=g[2],w=g[3],n=k=g[4],i=M=g[5],6===g.length?(a=Math.sqrt(x*x+b*b),o=Math.sqrt(w*w+T*T),u=x||b?rI(b,x)*rz:0,(f=T||w?rI(T,w)*rz+u:0)&&(o*=Math.abs(Math.cos(f*rF))),r.svg&&(n-=d-(d*x+_*T),i-=_-(d*b+_*w))):(F=g[6],R=g[7],A=g[8],P=g[9],D=g[10],z=g[11],n=g[12],i=g[13],s=g[14],l=(m=rI(F,D))*rz,m&&(O=k*(v=Math.cos(-m))+A*(y=Math.sin(-m)),C=M*v+P*y,E=F*v+D*y,A=-(k*y)+A*v,P=-(M*y)+P*v,D=-(F*y)+D*v,z=-(R*y)+z*v,k=O,M=C,F=E),c=(m=rI(-T,D))*rz,m&&(O=x*(v=Math.cos(-m))-A*(y=Math.sin(-m)),C=b*v-P*y,E=T*v-D*y,z=w*y+z*v,x=O,b=C,T=E),u=(m=rI(b,x))*rz,m&&(O=x*(v=Math.cos(m))+b*(y=Math.sin(m)),C=k*v+M*y,b=b*v-x*y,M=M*v-k*y,x=O,k=C),l&&Math.abs(l)+Math.abs(u)>359.9&&(l=u=0,c=180-c),a=tk(Math.sqrt(x*x+b*b+T*T)),o=tk(Math.sqrt(M*M+F*F)),f=Math.abs(m=rI(k,M))>2e-4?m*rz:0,p=z?1/(z<0?-z:z):0),r.svg&&(O=t.getAttribute("transform"),r.forceCSS=t.setAttribute("transform","")||!nv(r4(t,r0)),O&&t.setAttribute("transform",O))),Math.abs(f)>90&&270>Math.abs(f)&&(B?(a*=-1,f+=u<=0?180:-180,u+=u<=0?180:-180):(o*=-1,f+=f<=0?180:-180)),e=e||r.uncache,r.x=n-((r.xPercent=n&&(!e&&r.xPercent||(Math.round(t.offsetWidth/2)===Math.round(-n)?-50:0)))?t.offsetWidth*r.xPercent/100:0)+"px",r.y=i-((r.yPercent=i&&(!e&&r.yPercent||(Math.round(t.offsetHeight/2)===Math.round(-i)?-50:0)))?t.offsetHeight*r.yPercent/100:0)+"px",r.z=s+"px",r.scaleX=tk(a),r.scaleY=tk(o),r.rotation=tk(u)+"deg",r.rotationX=tk(l)+"deg",r.rotationY=tk(c)+"deg",r.skewX=f+"deg",r.skewY=h+"deg",r.transformPerspective=p+"px",(r.zOrigin=parseFloat(L.split(" ")[2])||!e&&r.zOrigin||0)&&(I[r1]=nw(L)),r.xOffset=r.yOffset=0,r.force3D=S.force3D,r.renderTransform=r.svg?nE:rD?nC:nM,r.uncache=0,r},nw=function(t){return(t=t.split(" "))[0]+" "+t[1]},nk=function(t,e,r){var n=ee(e);return tk(parseFloat(e)+parseFloat(nl(t,"x",r+"px",n)))+n},nM=function(t,e){e.z="0px",e.rotationY=e.rotationX="0deg",e.force3D=0,nC(t,e)},nO="0deg",nC=function(t,e){var r=e||this,n=r.xPercent,i=r.yPercent,s=r.x,a=r.y,o=r.z,u=r.rotation,l=r.rotationY,c=r.rotationX,f=r.skewX,h=r.skewY,p=r.scaleX,d=r.scaleY,_=r.transformPerspective,g=r.force3D,m=r.target,v=r.zOrigin,y="",x="auto"===g&&t&&1!==t||!0===g;if(v&&(c!==nO||l!==nO)){var b,T=parseFloat(l)*rF,w=Math.sin(T),k=Math.cos(T);s=nk(m,s,-(w*(b=Math.cos(T=parseFloat(c)*rF))*v)),a=nk(m,a,-(-Math.sin(T)*v)),o=nk(m,o,-(k*b*v)+v)}"0px"!==_&&(y+="perspective("+_+") "),(n||i)&&(y+="translate("+n+"%, "+i+"%) "),(x||"0px"!==s||"0px"!==a||"0px"!==o)&&(y+="0px"!==o||x?"translate3d("+s+", "+a+", "+o+") ":"translate("+s+", "+a+") "),u!==nO&&(y+="rotate("+u+") "),l!==nO&&(y+="rotateY("+l+") "),c!==nO&&(y+="rotateX("+c+") "),(f!==nO||h!==nO)&&(y+="skew("+f+", "+h+") "),(1!==p||1!==d)&&(y+="scale("+p+", "+d+") "),m.style[r0]=y||"translate(0, 0)"},nE=function(t,e){var r,n,i,s,a,o=e||this,u=o.xPercent,l=o.yPercent,c=o.x,f=o.y,h=o.rotation,p=o.skewX,d=o.skewY,_=o.scaleX,g=o.scaleY,m=o.target,v=o.xOrigin,y=o.yOrigin,x=o.xOffset,b=o.yOffset,T=o.forceCSS,w=parseFloat(c),k=parseFloat(f);h=parseFloat(h),p=parseFloat(p),(d=parseFloat(d))&&(p+=d=parseFloat(d),h+=d),h||p?(h*=rF,p*=rF,r=Math.cos(h)*_,n=Math.sin(h)*_,i=-(Math.sin(h-p)*g),s=Math.cos(h-p)*g,p&&(d*=rF,i*=a=Math.sqrt(1+(a=Math.tan(p-d))*a),s*=a,d&&(r*=a=Math.sqrt(1+(a=Math.tan(d))*a),n*=a)),r=tk(r),n=tk(n),i=tk(i),s=tk(s)):(r=_,s=g,n=i=0),(w&&!~(c+"").indexOf("px")||k&&!~(f+"").indexOf("px"))&&(w=nl(m,"x",c,"px"),k=nl(m,"y",f,"px")),(v||y||x||b)&&(w=tk(w+v-(v*r+y*i)+x),k=tk(k+y-(v*n+y*s)+b)),(u||l)&&(w=tk(w+u/100*(a=m.getBBox()).width),k=tk(k+l/100*a.height)),a="matrix("+r+","+n+","+i+","+s+","+w+","+k+")",m.setAttribute("transform",a),T&&(m.style[r0]=a)},nS=function(t,e,r,n,i){var s,a,o=B(i),u=parseFloat(i)*(o&&~i.indexOf("rad")?rz:1)-n,l=n+u+"deg";return o&&("short"===(s=i.split("_")[1])&&(u%=360)!=u%180&&(u+=u<0?360:-360),"cw"===s&&u<0?u=(u+36e9)%360-360*~~(u/360):"ccw"===s&&u>0&&(u=(u-36e9)%360-360*~~(u/360))),t._pt=a=new rf(t._pt,e,r,n,u,rU),a.e=l,a.u="deg",t._props.push(r),a},nA=function(t,e){for(var r in e)t[r]=e[r];return t},nP=function(t,e,r){var n,i,s,a,o,u,l,c=nA({},r._gsap),f=r.style;for(i in c.svg?(s=r.getAttribute("transform"),r.setAttribute("transform",""),f[r0]=e,n=nT(r,1),ns(r,r0),r.setAttribute("transform",s)):(s=getComputedStyle(r)[r0],f[r0]=e,n=nT(r,1),f[r0]=s),rR)(s=c[i])!==(a=n[i])&&0>"perspective,force3D,transformOrigin,svgOrigin".indexOf(i)&&(o=ee(s)!==(l=ee(a))?nl(r,i,s,l):parseFloat(s),u=parseFloat(a),t._pt=new rf(t._pt,n,i,o,u-o,rX),t._pt.u=l||0,t._props.push(i));nA(n,c)};tw("padding,margin,Width,Radius",function(t,e){var r="Right",n="Bottom",i="Left",s=(e<3?["Top",r,n,i]:["Top"+i,"Top"+r,n+r,n+i]).map(function(r){return e<2?t+r:"border"+r+t});n_[e>1?"border"+t:t]=function(t,e,r,n,i){var a,o;if(arguments.length<4)return 5===(o=(a=s.map(function(e){return nc(t,e,r)})).join(" ")).split(a[0]).length?a[0]:o;a=(n+"").split(" "),o={},s.forEach(function(t,e){return o[t]=a[e]=a[e]||a[(e-1)/2|0]}),t.init(e,o,i)}});var nD={name:"css",register:nt,targetTest:function(t){return t.style&&t.nodeType},init:function(t,e,r,n,i){var s,a,o,u,l,c,f,h,p,d,_,g,m,v,y,x,b,T=this._props,w=t.style,k=r.vars.startAt;for(f in rE||nt(),this.styles=this.styles||r8(t),x=this.styles.props,this.tween=r,e)if("autoRound"!==f&&(a=e[f],!(t_[f]&&eJ(f,e,r,n,t,i)))){if(l=typeof a,c=n_[f],"function"===l&&(l=typeof(a=a.call(r,n,t,i))),"string"===l&&~a.indexOf("random(")&&(a=eh(a)),c)c(this,t,f,a,r)&&(y=1);else if("--"===f.substr(0,2))s=(getComputedStyle(t).getPropertyValue(f)+"").trim(),a+="",ek.lastIndex=0,!ek.test(s)&&(h=ee(s),(p=ee(a))?h!==p&&(s=nl(t,f,s,p)+p):h&&(a+=h)),this.add(w,"setProperty",s,a,n,i,0,0,f),T.push(f),x.push(f,0,w[f]);else if("undefined"!==l){if(k&&f in k?(B(s="function"==typeof k[f]?k[f].call(r,n,t,i):k[f])&&~s.indexOf("random(")&&(s=eh(s)),ee(s+"")||"auto"===s||(s+=S.units[f]||ee(nc(t,f))||""),"="===(s+"").charAt(1)&&(s=nc(t,f))):s=nc(t,f),u=parseFloat(s),(d="string"===l&&"="===a.charAt(1)&&a.substr(0,2))&&(a=a.substr(2)),o=parseFloat(a),f in rN&&("autoAlpha"===f&&(1===u&&"hidden"===nc(t,"visibility")&&o&&(u=0),x.push("visibility",0,w.visibility),na(this,w,"visibility",u?"inherit":"hidden",o?"inherit":"hidden",!o)),"scale"!==f&&"transform"!==f&&~(f=rN[f]).indexOf(",")&&(f=f.split(",")[0])),_=f in rR){if(this.styles.save(f),b=a,"string"===l&&"var(--"===a.substring(0,6)){if("calc("===(a=r4(t,a.substring(4,a.indexOf(")")))).substring(0,5)){var M=t.style.perspective;t.style.perspective=a,a=r4(t,"perspective"),M?t.style.perspective=M:ns(t,"perspective")}o=parseFloat(a)}if(g||((m=t._gsap).renderTransform&&!e.parseTransform||nT(t,e.parseTransform),v=!1!==e.smoothOrigin&&m.smooth,(g=this._pt=new rf(this._pt,w,r0,0,1,m.renderTransform,m,0,-1)).dep=1),"scale"===f)this._pt=new rf(this._pt,m,"scaleY",m.scaleY,(d?tO(m.scaleY,d+o):o)-m.scaleY||0,rX),this._pt.u=0,T.push("scaleY",f),f+="X";else if("transformOrigin"===f){x.push(r1,0,w[r1]),a=np(a),m.svg?nb(t,a,0,v,0,this):((p=parseFloat(a.split(" ")[2])||0)!==m.zOrigin&&na(this,m,"zOrigin",m.zOrigin,p),na(this,w,f,nw(s),nw(a)));continue}else if("svgOrigin"===f){nb(t,a,1,v,0,this);continue}else if(f in nm){nS(this,m,f,u,d?tO(u,d+a):a);continue}else if("smoothOrigin"===f){na(this,m,"smooth",m.smooth,a);continue}else if("force3D"===f){m[f]=a;continue}else if("transform"===f){nP(this,a,t);continue}}else f in w||(f=r7(f)||f);if(_||(o||0===o)&&(u||0===u)&&!rL.test(a)&&f in w)h=(s+"").substr((u+"").length),o||(o=0),p=ee(a)||(f in S.units?S.units[f]:h),h!==p&&(u=nl(t,f,s,p)),this._pt=new rf(this._pt,_?m:w,f,u,(d?tO(u,d+o):o)-u,!_&&("px"===p||"zIndex"===f)&&!1!==e.autoRound?rW:rX),this._pt.u=p||0,_&&b!==a?(this._pt.b=s,this._pt.e=b,this._pt.r=rH):h!==p&&"%"!==p&&(this._pt.b=s,this._pt.r=rq);else if(f in w)nf.call(this,t,f,s,d?d+a:a);else if(f in t)this.add(t,f,s||t[f],d?d+a:a,n,i);else if("parseTransform"!==f){ts(f,a);continue}_||(f in w?x.push(f,0,w[f]):"function"==typeof t[f]?x.push(f,2,t[f]()):x.push(f,1,s||t[f])),T.push(f)}}y&&rc(this)},render:function(t,e){if(e.tween._time||!rP())for(var r=e._pt;r;)r.r(t,r.d),r=r._next;else e.styles.revert()},get:nc,aliases:rN,getSetter:function(t,e,r){var n=rN[e];return n&&0>n.indexOf(",")&&(e=n),e in rR&&e!==r1&&(t._gsap.x||nc(t,"x"))?r&&rA===r?"scale"===e?r$:rZ:(rA=r||{},"scale"===e?rK:rJ):t.style&&!N(t.style[e])?rG:~e.indexOf("-")?rQ:rr(t,e)},core:{_removeProperty:ns,_getMatrix:nx}};rM.utils.checkPrefix=r7,rM.core.getStyleSaver=r8,nF=tw("x,y,z,scale,scaleX,scaleY,xPercent,yPercent,"+(nz="rotation,rotationX,rotationY,skewX,skewY")+",transform,transformOrigin,svgOrigin,force3D,smoothOrigin,transformPerspective",function(t){rR[t]=1}),tw(nz,function(t){S.units[t]="deg",nm[t]=1}),rN[nF[13]]="x,y,z,scale,scaleX,scaleY,xPercent,yPercent,"+nz,tw("0:translateX,1:translateY,2:translateZ,8:rotate,8:rotationZ,8:rotateZ,9:rotateX,10:rotateY",function(t){var e=t.split(":");rN[e[1]]=nF[e[0]]}),tw("x,y,z,top,right,bottom,left,width,height,fontSize,padding,margin,perspective",function(t){S.units[t]="px"}),rM.registerPlugin(nD);var nR=rM.registerPlugin(nD)||rM;nR.core.Tween,t.s(["default",0,nR],89970);var nz,nF,nI,nB,nY,nL,nN,nX,nU,nq,nH,nW,nV,nj,nG,nQ=function(){return nI||"u">typeof window&&(nI=window.gsap)&&nI.registerPlugin&&nI},nZ=1,n$=[],nK=[],nJ=[],n0=Date.now,n1=function(t,e){return e},n2=function(){var t=nH.core,e=t.bridge||{},r=t._scrollers,n=t._proxies;r.push.apply(r,nK),n.push.apply(n,nJ),nK=r,nJ=n,n1=function(t,r){return e[t](r)}},n5=function(t,e){return~nJ.indexOf(t)&&nJ[nJ.indexOf(t)+1][e]},n3=function(t){return!!~nW.indexOf(t)},n8=function(t,e,r,n,i){return t.addEventListener(e,r,{passive:!1!==n,capture:!!i})},n6=function(t,e,r,n){return t.removeEventListener(e,r,!!n)},n4="scrollLeft",n9="scrollTop",n7=function(){return nV&&nV.isPressed||nK.cache++},it=function(t,e){var r=function r(n){if(n||0===n){nZ&&(nY.history.scrollRestoration="manual");var i=nV&&nV.isPressed;t(n=r.v=Math.round(n)||(nV&&nV.iOS?1:0)),r.cacheID=nK.cache,i&&n1("ss",n)}else(e||nK.cache!==r.cacheID||n1("ref"))&&(r.cacheID=nK.cache,r.v=t());return r.v+r.offset};return r.offset=0,t&&r},ie={s:n4,p:"left",p2:"Left",os:"right",os2:"Right",d:"width",d2:"Width",a:"x",sc:it(function(t){return arguments.length?nY.scrollTo(t,ir.sc()):nY.pageXOffset||nL[n4]||nN[n4]||nX[n4]||0})},ir={s:n9,p:"top",p2:"Top",os:"bottom",os2:"Bottom",d:"height",d2:"Height",a:"y",op:ie,sc:it(function(t){return arguments.length?nY.scrollTo(ie.sc(),t):nY.pageYOffset||nL[n9]||nN[n9]||nX[n9]||0})},ii=function(t,e){return(e&&e._ctx&&e._ctx.selector||nI.utils.toArray)(t)[0]||("string"==typeof t&&!1!==nI.config().nullTargetWarn?console.warn("Element not found:",t):null)},is=function(t,e){for(var r=e.length;r--;)if(e[r]===t||e[r].contains(t))return!0;return!1},ia=function(t,e){var r=e.s,n=e.sc;n3(t)&&(t=nL.scrollingElement||nN);var i=nK.indexOf(t),s=n===ir.sc?1:2;~i||(i=nK.push(t)-1),nK[i+s]||n8(t,"scroll",n7);var a=nK[i+s],o=a||(nK[i+s]=it(n5(t,r),!0)||(n3(t)?n:it(function(e){return arguments.length?t[r]=e:t[r]})));return o.target=t,a||(o.smooth="smooth"===nI.getProperty(t,"scrollBehavior")),o},io=function(t,e,r){var n=t,i=t,s=n0(),a=s,o=e||50,u=Math.max(500,3*o),l=function(t,e){var u=n0();e||u-s>o?(i=n,n=t,a=s,s=u):r?n+=t:n=i+(t-i)/(u-a)*(s-a)};return{update:l,reset:function(){i=n=r?0:n,a=s=0},getVelocity:function(t){var e=a,o=i,c=n0();return(t||0===t)&&t!==n&&l(t),s===a||c-a>u?0:(n+(r?o:-o))/((r?c:s)-e)*1e3}}},iu=function(t,e){return e&&!t._gsapAllow&&!1!==t.cancelable&&t.preventDefault(),t.changedTouches?t.changedTouches[0]:t},il=function(t){var e=Math.max.apply(Math,t),r=Math.min.apply(Math,t);return Math.abs(e)>=Math.abs(r)?e:r},ic=function(){(nH=nI.core.globals().ScrollTrigger)&&nH.core&&n2()},ih=function(t){return nI=t||nQ(),!nB&&nI&&"u">typeof document&&document.body&&(nY=window,nN=(nL=document).documentElement,nX=nL.body,nW=[nY,nL,nN,nX],nI.utils.clamp,nG=nI.core.context||function(){},nq="onpointerenter"in nX?"pointer":"mouse",nU=ip.isTouch=nY.matchMedia&&nY.matchMedia("(hover: none), (pointer: coarse)").matches?1:2*("ontouchstart"in nY||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0),nj=ip.eventTypes=("ontouchstart"in nN?"touchstart,touchmove,touchcancel,touchend":!("onpointerdown"in nN)?"mousedown,mousemove,mouseup,mouseup":"pointerdown,pointermove,pointercancel,pointerup").split(","),setTimeout(function(){return nZ=0},500),nB=1),nH||ic(),nB};ie.op=ir,nK.cache=0;var ip=function(){var t;function e(t){this.init(t)}return e.prototype.init=function(t){nB||ih(nI)||console.warn("Please gsap.registerPlugin(Observer)"),nH||ic();var e=t.tolerance,r=t.dragMinimum,n=t.type,i=t.target,s=t.lineHeight,a=t.debounce,o=t.preventDefault,u=t.onStop,l=t.onStopDelay,c=t.ignore,f=t.wheelSpeed,h=t.event,p=t.onDragStart,d=t.onDragEnd,_=t.onDrag,g=t.onPress,m=t.onRelease,v=t.onRight,y=t.onLeft,x=t.onUp,b=t.onDown,T=t.onChangeX,w=t.onChangeY,k=t.onChange,M=t.onToggleX,O=t.onToggleY,C=t.onHover,E=t.onHoverEnd,S=t.onMove,A=t.ignoreCheck,P=t.isNormalizer,D=t.onGestureStart,R=t.onGestureEnd,z=t.onWheel,F=t.onEnable,I=t.onDisable,B=t.onClick,Y=t.scrollSpeed,L=t.capture,N=t.allowClicks,X=t.lockAxis,U=t.onLockAxis;this.target=i=ii(i)||nN,this.vars=t,c&&(c=nI.utils.toArray(c)),e=e||1e-9,r=r||0,f=f||1,Y=Y||1,n=n||"wheel,touch,pointer",a=!1!==a,s||(s=parseFloat(nY.getComputedStyle(nX).lineHeight)||22);var q,H,W,V,j,G,Q,Z=this,$=0,K=0,J=t.passive||!o&&!1!==t.passive,tt=ia(i,ie),te=ia(i,ir),tr=tt(),tn=te(),ti=~n.indexOf("touch")&&!~n.indexOf("pointer")&&"pointerdown"===nj[0],ts=n3(i),ta=i.ownerDocument||nL,to=[0,0,0],tu=[0,0,0],tl=0,tc=function(){return tl=n0()},tf=function(t,e){return(Z.event=t)&&c&&is(t.target,c)||e&&ti&&"touch"!==t.pointerType||A&&A(t,e)},th=function(){var t=Z.deltaX=il(to),r=Z.deltaY=il(tu),n=Math.abs(t)>=e,i=Math.abs(r)>=e;k&&(n||i)&&k(Z,t,r,to,tu),n&&(v&&Z.deltaX>0&&v(Z),y&&Z.deltaX<0&&y(Z),T&&T(Z),M&&Z.deltaX<0!=$<0&&M(Z),$=Z.deltaX,to[0]=to[1]=to[2]=0),i&&(b&&Z.deltaY>0&&b(Z),x&&Z.deltaY<0&&x(Z),w&&w(Z),O&&Z.deltaY<0!=K<0&&O(Z),K=Z.deltaY,tu[0]=tu[1]=tu[2]=0),(V||W)&&(S&&S(Z),W&&(p&&1===W&&p(Z),_&&_(Z),W=0),V=!1),G&&(G=!1,1)&&U&&U(Z),j&&(z(Z),j=!1),q=0},tp=function(t,e,r){to[r]+=t,tu[r]+=e,Z._vx.update(t),Z._vy.update(e),a?q||(q=requestAnimationFrame(th)):th()},td=function(t,e){X&&!Q&&(Z.axis=Q=Math.abs(t)>Math.abs(e)?"x":"y",G=!0),"y"!==Q&&(to[2]+=t,Z._vx.update(t,!0)),"x"!==Q&&(tu[2]+=e,Z._vy.update(e,!0)),a?q||(q=requestAnimationFrame(th)):th()},t_=function(t){if(!tf(t,1)){var e=(t=iu(t,o)).clientX,n=t.clientY,i=e-Z.x,s=n-Z.y,a=Z.isDragging;Z.x=e,Z.y=n,(a||(i||s)&&(Math.abs(Z.startX-e)>=r||Math.abs(Z.startY-n)>=r))&&(W||(W=a?2:1),a||(Z.isDragging=!0),td(i,s))}},tg=Z.onPress=function(t){tf(t,1)||t&&t.button||(Z.axis=Q=null,H.pause(),Z.isPressed=!0,t=iu(t),$=K=0,Z.startX=Z.x=t.clientX,Z.startY=Z.y=t.clientY,Z._vx.reset(),Z._vy.reset(),n8(P?i:ta,nj[1],t_,J,!0),Z.deltaX=Z.deltaY=0,g&&g(Z))},tm=Z.onRelease=function(t){if(!tf(t,1)){n6(P?i:ta,nj[1],t_,!0);var e=!isNaN(Z.y-Z.startY),r=Z.isDragging,n=r&&(Math.abs(Z.x-Z.startX)>3||Math.abs(Z.y-Z.startY)>3),s=iu(t);!n&&e&&(Z._vx.reset(),Z._vy.reset(),o&&N&&nI.delayedCall(.08,function(){if(n0()-tl>300&&!t.defaultPrevented){if(t.target.click)t.target.click();else if(ta.createEvent){var e=ta.createEvent("MouseEvents");e.initMouseEvent("click",!0,!0,nY,1,s.screenX,s.screenY,s.clientX,s.clientY,!1,!1,!1,!1,0,null),t.target.dispatchEvent(e)}}})),Z.isDragging=Z.isGesturing=Z.isPressed=!1,u&&r&&!P&&H.restart(!0),W&&th(),d&&r&&d(Z),m&&m(Z,n)}},tv=function(t){return t.touches&&t.touches.length>1&&(Z.isGesturing=!0)&&D(t,Z.isDragging)},ty=function(){return Z.isGesturing=!1,R(Z)},tx=function(t){if(!tf(t)){var e=tt(),r=te();tp((e-tr)*Y,(r-tn)*Y,1),tr=e,tn=r,u&&H.restart(!0)}},tb=function(t){if(!tf(t)){t=iu(t,o),z&&(j=!0);var e=(1===t.deltaMode?s:2===t.deltaMode?nY.innerHeight:1)*f;tp(t.deltaX*e,t.deltaY*e,0),u&&!P&&H.restart(!0)}},tT=function(t){if(!tf(t)){var e=t.clientX,r=t.clientY,n=e-Z.x,i=r-Z.y;Z.x=e,Z.y=r,V=!0,u&&H.restart(!0),(n||i)&&td(n,i)}},tw=function(t){Z.event=t,C(Z)},tk=function(t){Z.event=t,E(Z)},tM=function(t){return tf(t)||iu(t,o)&&B(Z)};H=Z._dc=nI.delayedCall(l||.25,function(){Z._vx.reset(),Z._vy.reset(),H.pause(),u&&u(Z)}).pause(),Z.deltaX=Z.deltaY=0,Z._vx=io(0,50,!0),Z._vy=io(0,50,!0),Z.scrollX=tt,Z.scrollY=te,Z.isDragging=Z.isGesturing=Z.isPressed=!1,nG(this),Z.enable=function(t){return!Z.isEnabled&&(n8(ts?ta:i,"scroll",n7),n.indexOf("scroll")>=0&&n8(ts?ta:i,"scroll",tx,J,L),n.indexOf("wheel")>=0&&n8(i,"wheel",tb,J,L),(n.indexOf("touch")>=0&&nU||n.indexOf("pointer")>=0)&&(n8(i,nj[0],tg,J,L),n8(ta,nj[2],tm),n8(ta,nj[3],tm),N&&n8(i,"click",tc,!0,!0),B&&n8(i,"click",tM),D&&n8(ta,"gesturestart",tv),R&&n8(ta,"gestureend",ty),C&&n8(i,nq+"enter",tw),E&&n8(i,nq+"leave",tk),S&&n8(i,nq+"move",tT)),Z.isEnabled=!0,Z.isDragging=Z.isGesturing=Z.isPressed=V=W=!1,Z._vx.reset(),Z._vy.reset(),tr=tt(),tn=te(),t&&t.type&&tg(t),F&&F(Z)),Z},Z.disable=function(){Z.isEnabled&&(n$.filter(function(t){return t!==Z&&n3(t.target)}).length||n6(ts?ta:i,"scroll",n7),Z.isPressed&&(Z._vx.reset(),Z._vy.reset(),n6(P?i:ta,nj[1],t_,!0)),n6(ts?ta:i,"scroll",tx,L),n6(i,"wheel",tb,L),n6(i,nj[0],tg,L),n6(ta,nj[2],tm),n6(ta,nj[3],tm),n6(i,"click",tc,!0),n6(i,"click",tM),n6(ta,"gesturestart",tv),n6(ta,"gestureend",ty),n6(i,nq+"enter",tw),n6(i,nq+"leave",tk),n6(i,nq+"move",tT),Z.isEnabled=Z.isPressed=Z.isDragging=!1,I&&I(Z))},Z.kill=Z.revert=function(){Z.disable();var t=n$.indexOf(Z);t>=0&&n$.splice(t,1),nV===Z&&(nV=0)},n$.push(Z),P&&n3(i)&&(nV=Z),Z.enable(h)},t=[{key:"velocityX",get:function(){return this._vx.getVelocity()}},{key:"velocityY",get:function(){return this._vy.getVelocity()}}],function(t,e){for(var r=0;r-1);return r["_"+e+"Clamp"]=n,n?t.substr(6,t.length-7):t},i3=function(t,e){return e&&(!so(t)||"clamp("!==t.substr(0,6))?"clamp("+t+")":t},i8=function(){return iC=1},i6=function(){return iC=0},i4=function(t){return t},i9=function(t){return Math.round(1e5*t)/1e5||0},i7=function(){return"u">typeof window},st=function(){return id||i7()&&(id=window.gsap)&&id.registerPlugin&&id},se=function(t){return!!~ix.indexOf(t)},sr=function(t){return("Height"===t?iH:ig["inner"+t])||iv["client"+t]||iy["client"+t]},sn=function(t){return n5(t,"getBoundingClientRect")||(se(t)?function(){return ac.width=ig.innerWidth,ac.height=iH,ac}:function(){return sS(t)})},si=function(t,e,r){var n=r.d,i=r.d2,s=r.a;return(s=n5(t,"getBoundingClientRect"))?function(){return s()[n]}:function(){return(e?sr(i):t["client"+i])||0}},ss=function(t,e){var r=e.s,n=e.d2,i=e.d,s=e.a;return Math.max(0,(s=n5(t,r="scroll"+n))?s()-sn(t)()[i]:se(t)?(iv[r]||iy[r])-sr(n):t[r]-t["offset"+n])},sa=function(t,e){for(var r=0;r0){for(t-=i,s=0;s=t)return r[s];return r[s-1]}for(s=r.length,t+=i;s--;)if(r[s]<=t)return r[s];return r[0]}:function(r,n,i){void 0===i&&(i=.001);var s=e(r);return!n||Math.abs(s-r)r&&(n*=e/100),t=t.substr(0,r-1)),t=n+(t in sL?sL[t]*e:~t.indexOf("%")?parseFloat(t)*e/100:parseFloat(t)||0)}return t},sX=function(t,e,r,n,i,s,a,o){var u=i.startColor,l=i.endColor,c=i.fontSize,f=i.indent,h=i.fontWeight,p=im.createElement("div"),d=se(r)||"fixed"===n5(r,"pinType"),_=-1!==t.indexOf("scroller"),g=d?iy:"IFRAME"===r.tagName?r.contentDocument.body:r,m=-1!==t.indexOf("start"),v=m?u:l,y="border-color:"+v+";font-size:"+c+";color:"+v+";font-weight:"+h+";pointer-events:none;white-space:nowrap;font-family:sans-serif,Arial;z-index:1000;padding:4px 8px;border-width:0;border-style:solid;";return y+="position:"+((_||o)&&d?"fixed;":"absolute;"),(_||o||!d)&&(y+=(n===ir?s_:sg)+":"+(s+parseFloat(f))+"px;"),a&&(y+="box-sizing:border-box;text-align:left;width:"+a.offsetWidth+"px;"),p._isStart=m,p.setAttribute("class","gsap-marker-"+t+(e?" marker-"+e:"")),p.style.cssText=y,p.innerText=e||0===e?t+"-"+e:t,g.children[0]?g.insertBefore(p,g.children[0]):g.appendChild(p),p._offset=p["offset"+n.op.d2],sU(p,0,n,m),p},sU=function(t,e,r,n){var i={display:"block"},s=r[n?"os2":"p2"],a=r[n?"p2":"os2"];t._isFlipped=n,i[r.a+"Percent"]=n?-100:0,i[r.a]=n?"1px":0,i["border"+s+sk]=1,i["border"+a+sk]=0,i[r.p]=e+"px",id.set(t,i)},sq=[],sH={},sW=function(){return iJ()-i1>34&&(iG||(iG=requestAnimationFrame(ae)))},sV=function(){iI&&iI.isPressed&&!(iI.startX>iy.clientWidth)||(nK.cache++,iI?iG||(iG=requestAnimationFrame(ae)):ae(),i1||sK("scrollStart"),i1=iJ())},sj=function(){iL=ig.innerWidth,iY=ig.innerHeight},sG=function(t){nK.cache++,(!0===t||!iO&&!iF&&!im.fullscreenElement&&!im.webkitFullscreenElement&&(!iB||iL!==ig.innerWidth||Math.abs(ig.innerHeight-iY)>.25*ig.innerHeight))&&ib.restart(!0)},sQ={},sZ=[],s$=function t(){return sF(am,"scrollEnd",t)||s9(!0)},sK=function(t){return sQ[t]&&sQ[t].map(function(t){return t()})||sZ},sJ=[],s0=function(t){for(var e=0;ee,n=t._startClamp&&t.start>=e;(r||n)&&t.setPositions(n?e-1:t.start,r?Math.max(n?e:t.start+1,e):t.end,!0)}),s4(!1),iV=0,r.forEach(function(t){return t&&t.render&&t.render(-1)}),nK.forEach(function(t){su(t)&&(t.smooth&&requestAnimationFrame(function(){return t.target.style.scrollBehavior="smooth"}),t.rec&&t(t.rec))}),s5(iU,1),ib.pause(),s3++,iQ=2,ae(2),sq.forEach(function(t){return su(t.vars.onRefresh)&&t.vars.onRefresh(t)}),iQ=am.isRefreshing=!1,sK("refresh")},s7=0,at=1,ae=function(t){if(2===t||!iQ&&!iW){am.isUpdating=!0,i$&&i$.update(0);var e=sq.length,r=iJ(),n=r-i0>=50,i=e&&sq[0].scroll();if(at=s7>i?-1:1,iQ||(s7=i),n&&(i1&&!iC&&r-i1>200&&(i1=0,sK("scrollEnd")),ik=i0,i0=r),at<0){for(iS=e;iS-- >0;)sq[iS]&&sq[iS].update(0,n);at=1}else for(iS=0;iS20),r-=r-x}if(p&&(o[p]=t||-.001,t<0&&(t=0)),s){var w=t+r,k=s._isStart;d="scroll"+n.d2,sU(s,w,n,k&&w>20||!k&&(c?Math.max(iy[d],iv[d]):s.parentNode[d])<=w+1),c&&(u=sS(a),c&&(s.style[n.op.p]=u[n.op.p]-n.op.m-s._offset+"px"))}return h&&g&&(d=sS(g),h.seek(f),_=sS(g),h._caScrollDist=d[n.p]-_[n.p],t=t/h._caScrollDist*f),h&&h.seek(m),h?t:Math.round(t)},ah=/(webkit|moz|length|cssText|inset)/i,ap=function(t,e,r,n){if(t.parentNode!==e){var i,s,a=t.style;if(e===iy){for(i in t._stOrig=a.cssText,s=sO(t))+i||ah.test(i)||!s[i]||"string"!=typeof a[i]||"0"===i||(a[i]=s[i]);a.top=r,a.left=n}else a.cssText=t._stOrig;id.core.getCache(t).uncache=1,e.appendChild(t)}},ad=function(t,e,r){var n=e,i=n;return function(e){var s=Math.round(t());return s!==n&&s!==i&&Math.abs(s-n)>3&&Math.abs(s-i)>3&&(e=s,r&&r()),i=n,n=Math.round(e)}},a_=function(t,e,r){var n={};n[e.p]="+="+r,id.set(t,n)},ag=function(t,e){var r=ia(t,e),n="_scroll"+e.p2,i=function e(i,s,a,o,u){var l=e.tween,c=s.onComplete,f={};a=a||r();var h=ad(r,a,function(){l.kill(),e.tween=0});return u=o&&u||0,o=o||i-a,l&&l.kill(),s[n]=i,s.inherit=!1,s.modifiers=f,f[n]=function(){return h(a+o*l.ratio+u*l.ratio*l.ratio)},s.onUpdate=function(){nK.cache++,e.tween&&ae()},s.onComplete=function(){e.tween=0,c&&c.call(l)},l=e.tween=id.to(t,s)};return t[n]=r,r.wheelHandler=function(){return i.tween&&i.tween.kill()&&(i.tween=0)},sz(t,"wheel",r.wheelHandler),am.isTouch&&sz(t,"touchmove",r.wheelHandler),i},am=function(){function t(e,r){i_||t.register(id)||console.warn("Please gsap.registerPlugin(ScrollTrigger)"),iX(this),this.init(e,r)}return t.prototype.init=function(e,r){if(this.progress=this.start=0,this.vars&&this.kill(!0,!0),!i2){this.update=this.refresh=this.kill=i4;return}var n,i,s,a,o,u,l,c,f,h,p,d,_,g,m,v,y,x,b,T,w,k,M,O,C,E,S,A,P,D,R,z,F,I,B,Y,L,N,X,U,q,H=e=sE(so(e)||sl(e)||e.nodeType?{trigger:e}:e,sY),W=H.onUpdate,V=H.toggleClass,j=H.id,G=H.onToggle,Q=H.onRefresh,Z=H.scrub,$=H.trigger,K=H.pin,J=H.pinSpacing,tt=H.invalidateOnRefresh,te=H.anticipatePin,tr=H.onScrubComplete,tn=H.onSnapComplete,ti=H.once,ts=H.snap,ta=H.pinReparent,to=H.pinSpacer,tu=H.containerAnimation,tl=H.fastScrollEnd,tc=H.preventOverlaps,tf=e.horizontal||e.containerAnimation&&!1!==e.horizontal?ie:ir,th=!Z&&0!==Z,tp=ii(e.scroller||ig),td=id.core.getCache(tp),t_=se(tp),tg=("pinType"in e?e.pinType:n5(tp,"pinType")||t_&&"fixed")==="fixed",tm=[e.onEnter,e.onLeave,e.onEnterBack,e.onLeaveBack],tv=th&&e.toggleActions.split(" "),ty="markers"in e?e.markers:sY.markers,tx=t_?0:parseFloat(sO(tp)["border"+tf.p2+sk])||0,tb=this,tT=e.onRefreshInit&&function(){return e.onRefreshInit(tb)},tw=si(tp,t_,tf),tk=!t_||~nJ.indexOf(tp)?sn(tp):function(){return ac},tM=0,tO=0,tC=0,tE=ia(tp,tf);if(tb._startClamp=tb._endClamp=!1,tb._dir=tf,te*=45,tb.scroller=tp,tb.scroll=tu?tu.time.bind(tu):tE,u=tE(),tb.vars=e,r=r||e.animation,"refreshPriority"in e&&(iR=1,-9999===e.refreshPriority&&(i$=tb)),td.tweenScroll=td.tweenScroll||{top:ag(tp,ir),left:ag(tp,ie)},tb.tweenTo=s=td.tweenScroll[tf.p],tb.scrubDuration=function(t){(B=sl(t)&&t)?I?I.duration(t):I=id.to(r,{ease:"expo",totalProgress:"+=0",inherit:!1,duration:B,paused:!0,onComplete:function(){return tr&&tr(tb)}}):(I&&I.progress(1).kill(),I=0)},r&&(r.vars.lazy=!1,r._initted&&!tb.isReverted||!1!==r.vars.immediateRender&&!1!==e.immediateRender&&r.duration()&&r.render(0,!0,!0),tb.animation=r.pause(),r.scrollTrigger=tb,tb.scrubDuration(Z),z=0,j||(j=r.vars.id)),ts&&((!sc(ts)||ts.push)&&(ts={snapTo:ts}),"scrollBehavior"in iy.style&&id.set(t_?[iy,iv]:tp,{scrollBehavior:"auto"}),nK.forEach(function(t){return su(t)&&t.target===(t_?im.scrollingElement||iv:tp)&&(t.smooth=!1)}),o=su(ts.snapTo)?ts.snapTo:"labels"===ts.snapTo?(n=r,function(t){return id.utils.snap(sP(n),t)}):"labelsDirectional"===ts.snapTo?(i=r,function(t,e){return sD(sP(i))(t,e.direction)}):!1!==ts.directional?function(t,e){return sD(ts.snapTo)(t,iJ()-tO<500?0:e.direction)}:id.utils.snap(ts.snapTo),Y=sc(Y=ts.duration||{min:.1,max:2})?iw(Y.min,Y.max):iw(Y,Y),L=id.delayedCall(ts.delay||B/2||.1,function(){var t=tE(),e=iJ()-tO<500,n=s.tween;if((e||10>Math.abs(tb.getVelocity()))&&!n&&!iC&&tM!==t){var i,a,u=(t-c)/v,l=r&&!th?r.totalProgress():u,h=e?0:(l-F)/(iJ()-ik)*1e3||0,p=id.utils.clamp(-u,1-u,sp(h/2)*h/.185),d=u+(!1===ts.inertia?0:p),_=ts,g=_.onStart,m=_.onInterrupt,y=_.onComplete;if(sl(i=o(d,tb))||(i=d),a=Math.max(0,Math.round(c+i*v)),t<=f&&t>=c&&a!==t){if(n&&!n._initted&&n.data<=sp(a-t))return;!1===ts.inertia&&(p=i-u),s(a,{duration:Y(sp(.185*Math.max(sp(d-l),sp(i-l))/h/.05||0)),ease:ts.ease||"power3",data:sp(a-t),onInterrupt:function(){return L.restart(!0)&&m&&sh(tb,m)},onComplete:function(){tb.update(),tM=tE(),r&&!th&&(I?I.resetTo("totalProgress",i,r._tTime/r._tDur):r.progress(i)),z=F=r&&!th?r.totalProgress():tb.progress,tn&&tn(tb),y&&sh(tb,y)}},t,p*v,a-t-p*v),g&&sh(tb,g,s.tween)}}else tb.isActive&&tM!==t&&L.restart(!0)}).pause()),j&&(sH[j]=tb),(q=($=tb.trigger=ii($||!0!==K&&K))&&$._gsap&&$._gsap.stRevert)&&(q=q(tb)),K=!0===K?$:ii(K),so(V)&&(V={targets:$,className:V}),K&&(!1===J||J===sw||(J=(!!J||!K.parentNode||!K.parentNode.style||"flex"!==sO(K.parentNode).display)&&sT),tb.pin=K,(a=id.core.getCache(K)).spacer?y=a.pinState:(to&&((to=ii(to))&&!to.nodeType&&(to=to.current||to.nativeElement),a.spacerIsNative=!!to,to&&(a.spacerState=au(to))),a.spacer=T=to||im.createElement("div"),T.classList.add("pin-spacer"),j&&T.classList.add("pin-spacer-"+j),a.pinState=y=au(K)),!1!==e.force3D&&id.set(K,{force3D:!0}),tb.spacer=T=a.spacer,E=(R=sO(K))[J+tf.os2],k=id.getProperty(K),M=id.quickSetter(K,tf.a,"px"),as(K,T,R),b=au(K)),ty){g=sc(ty)?sE(ty,sB):sB,d=sX("scroller-start",j,tp,tf,g,0),_=sX("scroller-end",j,tp,tf,g,0,d),w=d["offset"+tf.op.d2];var tS=ii(n5(tp,"content")||tp);h=this.markerStart=sX("start",j,tS,tf,g,w,0,tu),p=this.markerEnd=sX("end",j,tS,tf,g,w,0,tu),tu&&(U=id.quickSetter([h,p],tf.a,"px")),tg||nJ.length&&!0===n5(tp,"fixedMarkers")||(sC(t_?iy:tp),id.set([d,_],{force3D:!0}),A=id.quickSetter(d,tf.a,"px"),D=id.quickSetter(_,tf.a,"px"))}if(tu){var tA=tu.vars.onUpdate,tP=tu.vars.onUpdateParams;tu.eventCallback("onUpdate",function(){tb.update(0,0,1),tA&&tA.apply(tu,tP||[])})}if(tb.previous=function(){return sq[sq.indexOf(tb)-1]},tb.next=function(){return sq[sq.indexOf(tb)+1]},tb.revert=function(t,e){if(!e)return tb.kill(!0);var n=!1!==t||!tb.enabled,i=iO;n!==tb.isReverted&&(n&&(N=Math.max(tE(),tb.scroll.rec||0),tC=tb.progress,X=r&&r.progress()),h&&[h,p,d,_].forEach(function(t){return t.style.display=n?"none":"block"}),n&&(iO=tb,tb.update(n)),!K||ta&&tb.isActive||(n?ai(K,T,y):as(K,T,sO(K),S)),n||tb.update(n),iO=i,tb.isReverted=n)},tb.refresh=function(n,i,a,o){if(!iO&&tb.enabled||i){if(K&&n&&i1)return void sz(t,"scrollEnd",s$);!iQ&&tT&&tT(tb),iO=tb,s.tween&&!a&&(s.tween.kill(),s.tween=0),I&&I.pause(),tt&&r&&(r.revert({kill:!1}).invalidate(),r.getChildren?r.getChildren(!0,!0,!1).forEach(function(t){return t.vars.immediateRender&&t.render(0,!0,!0)}):r.vars.immediateRender&&r.render(0,!0,!0)),tb.isReverted||tb.revert(!0,!0),tb._subPinOffset=!1;var g,w,M,E,A,D,R,z,F,B,Y,U,q,H=tw(),W=tk(),V=tu?tu.duration():ss(tp,tf),j=v<=.01||!v,G=0,Z=o||0,te=sc(a)?a.end:e.end,tr=e.endTrigger||$,tn=sc(a)?a.start:e.start||(0!==e.start&&$?K?"0 0":"0 100%":0),ti=tb.pinnedContainer=e.pinnedContainer&&ii(e.pinnedContainer,tb),ts=$&&Math.max(0,sq.indexOf(tb))||0,to=ts;for(ty&&sc(a)&&(U=id.getProperty(d,tf.p),q=id.getProperty(_,tf.p));to-- >0;)(D=sq[to]).end||D.refresh(0,1)||(iO=tb),(R=D.pin)&&(R===$||R===K||R===ti)&&!D.isReverted&&(B||(B=[]),B.unshift(D),D.revert(!0,!0)),D!==sq[to]&&(ts--,to--);for(su(tn)&&(tn=tn(tb)),c=af(tn=i5(tn,"start",tb),$,H,tf,tE(),h,d,tb,W,tx,tg,V,tu,tb._startClamp&&"_startClamp")||(K?-.001:0),su(te)&&(te=te(tb)),so(te)&&!te.indexOf("+=")&&(~te.indexOf(" ")?te=(so(tn)?tn.split(" ")[0]:"")+te:(G=sN(te.substr(2),H),te=so(tn)?tn:(tu?id.utils.mapRange(0,tu.duration(),tu.scrollTrigger.start,tu.scrollTrigger.end,c):c)+G,tr=$)),te=i5(te,"end",tb),f=Math.max(c,af(te||(tr?"100% 0":V),tr,H,tf,tE()+G,p,_,tb,W,tx,tg,V,tu,tb._endClamp&&"_endClamp"))||-.001,G=0,to=ts;to--;)(R=(D=sq[to]||{}).pin)&&D.start-D._pinPush<=c&&!tu&&D.end>0&&(g=D.end-(tb._startClamp?Math.max(0,D.start):D.start),(R===$&&D.start-D._pinPush=ss(tp,tf)))g=sO(K),E=tf===ir,M=tE(),O=parseFloat(k(tf.a))+Z,!V&&f>1&&(Y={style:Y=(t_?im.scrollingElement||iv:tp).style,value:Y["overflow"+tf.a.toUpperCase()]},t_&&"scroll"!==sO(iy)["overflow"+tf.a.toUpperCase()]&&(Y.style["overflow"+tf.a.toUpperCase()]="scroll")),as(K,T,g),b=au(K),w=sS(K,!0),z=tg&&ia(tp,E?ie:ir)(),J?((S=[J+tf.os2,v+Z+"px"]).t=T,(to=J===sT?sA(K,tf)+v+Z:0)&&(S.push(tf.d,to+"px"),"auto"!==T.style.flexBasis&&(T.style.flexBasis=to+"px")),ao(S),ti&&sq.forEach(function(t){t.pin===ti&&!1!==t.vars.pinSpacing&&(t._subPinOffset=!0)}),tg&&tE(N)):(to=sA(K,tf))&&"auto"!==T.style.flexBasis&&(T.style.flexBasis=to+"px"),tg&&((A={top:w.top+(E?M-c:z)+"px",left:w.left+(E?z:M-c)+"px",boxSizing:"border-box",position:"fixed"})[sm]=A["max"+sk]=Math.ceil(w.width)+"px",A[sv]=A["max"+sM]=Math.ceil(w.height)+"px",A[sw]=A[sw+"Top"]=A[sw+sy]=A[sw+sb]=A[sw+sx]="0",A[sT]=g[sT],A[sT+"Top"]=g[sT+"Top"],A[sT+sy]=g[sT+sy],A[sT+sb]=g[sT+sb],A[sT+sx]=g[sT+sx],x=al(y,A,ta),iQ&&tE(0)),r?(F=r._initted,iz(1),r.render(r.duration(),!0,!0),C=k(tf.a)-O+v+Z,P=Math.abs(v-C)>1,tg&&P&&x.splice(x.length-2,2),r.render(0,!0,!0),F||r.invalidate(!0),r.parent||r.totalTime(r.totalTime()),iz(0)):C=v,Y&&(Y.value?Y.style["overflow"+tf.a.toUpperCase()]=Y.value:Y.style.removeProperty("overflow-"+tf.a));else if($&&tE()&&!tu)for(w=$.parentNode;w&&w!==iy;)w._pinOffset&&(c-=w._pinOffset,f-=w._pinOffset),w=w.parentNode;B&&B.forEach(function(t){return t.revert(!1,!0)}),tb.start=c,tb.end=f,u=l=iQ?N:tE(),tu||iQ||(u0?sq.slice(0,e).reverse():sq.slice(e+1);return(so(t)?r.filter(function(e){return e.vars.preventOverlaps===t}):r).filter(function(t){return tb.direction>0?t.end<=c:t.start>=f})},tb.update=function(t,e,n){if(!tu||n||t){var i,a,o,h,p,_,g,m=!0===iQ?N:tb.scroll(),y=t?0:(m-c)/v,w=y<0?0:y>1?1:y||0,k=tb.progress;if(e&&(l=u,u=tu?tE():m,ts&&(F=z,z=r&&!th?r.totalProgress():w)),te&&K&&!iO&&!iK&&i1&&(!w&&cm+(m-l)/(iJ()-ik)*te&&(w=.9999)),w!==k&&tb.enabled){if(h=(p=(i=tb.isActive=!!w&&w<1)!=(!!k&&k<1))||!!w!=!!k,tb.direction=w>k?1:-1,tb.progress=w,h&&!iO&&(a=w&&!k?0:1===w?1:1===k?2:3,th&&(o=!p&&"none"!==tv[a+1]&&tv[a+1]||tv[a],g=r&&("complete"===o||"reset"===o||o in r))),tc&&(p||g)&&(g||Z||!r)&&(su(tc)?tc(tb):tb.getTrailing(tc).forEach(function(t){return t.endAnimation()})),!th&&(!I||iO||iK?r&&r.totalProgress(w,!!(iO&&(tO||t))):(I._dp._time-I._start!==I._time&&I.render(I._dp._time-I._start),I.resetTo?I.resetTo("totalProgress",w,r._tTime/r._tDur):(I.vars.totalProgress=w,I.invalidate().restart()))),K)if(t&&J&&(T.style[J+tf.os2]=E),tg){if(h){if(_=!t&&w>k&&f+1>m&&m+1>=ss(tp,tf),ta)if(!t&&(i||_)){var S=sS(K,!0),R=m-c;ap(K,iy,S.top+(tf===ir?R:0)+"px",S.left+(tf===ir?0:R)+"px")}else ap(K,T);ao(i||_?x:b),P&&w<1&&i||M(O+(1!==w||_?0:C))}}else M(i9(O+C*w));!ts||s.tween||iO||iK||L.restart(!0),V&&(p||ti&&w&&(w<1||!ij))&&iT(V.targets).forEach(function(t){return t.classList[i||ti?"add":"remove"](V.className)}),!W||th||t||W(tb),h&&!iO?(th&&(g&&("complete"===o?r.pause().totalProgress(1):"reset"===o?r.restart(!0).pause():"restart"===o?r.restart(!0):r[o]()),W&&W(tb)),(p||!ij)&&(G&&p&&sh(tb,G),tm[a]&&sh(tb,tm[a]),ti&&(1===w?tb.kill(!1,1):tm[a]=0),!p&&tm[a=1===w?1:3]&&sh(tb,tm[a])),tl&&!i&&Math.abs(tb.getVelocity())>(sl(tl)?tl:2500)&&(sf(tb.callbackAnimation),I?I.progress(1):sf(r,"reverse"===o?1:!w,1))):th&&W&&!iO&&W(tb)}if(D){var B=tu?m/tu.duration()*(tu._caScrollDist||0):m;A(B+ +!!d._isFlipped),D(B)}U&&U(-m/tu.duration()*(tu._caScrollDist||0))}},tb.enable=function(e,r){tb.enabled||(tb.enabled=!0,sz(tp,"resize",sG),t_||sz(tp,"scroll",sV),tT&&sz(t,"refreshInit",tT),!1!==e&&(tb.progress=tC=0,u=l=tM=tE()),!1!==r&&tb.refresh())},tb.getTween=function(t){return t&&s?s.tween:I},tb.setPositions=function(t,e,r,n){if(tu){var i=tu.scrollTrigger,s=tu.duration(),a=i.end-i.start;t=i.start+a*t/s,e=i.start+a*e/s}tb.refresh(!1,!1,{start:i3(t,r&&!!tb._startClamp),end:i3(e,r&&!!tb._endClamp)},n),tb.update()},tb.adjustPinSpacing=function(t){if(S&&t){var e=S.indexOf(tf.d)+1;S[e]=parseFloat(S[e])+t+"px",S[1]=parseFloat(S[1])+t+"px",ao(S)}},tb.disable=function(e,r){if(!1!==e&&tb.revert(!0,!0),tb.enabled&&(tb.enabled=tb.isActive=!1,r||I&&I.pause(),N=0,a&&(a.uncache=1),tT&&sF(t,"refreshInit",tT),L&&(L.pause(),s.tween&&s.tween.kill()&&(s.tween=0)),!t_)){for(var n=sq.length;n--;)if(sq[n].scroller===tp&&sq[n]!==tb)return;sF(tp,"resize",sG),t_||sF(tp,"scroll",sV)}},tb.kill=function(t,n){tb.disable(t,n),I&&!n&&I.kill(),j&&delete sH[j];var i=sq.indexOf(tb);i>=0&&sq.splice(i,1),i===iS&&at>0&&iS--,i=0,sq.forEach(function(t){return t.scroller===tb.scroller&&(i=1)}),i||iQ||(tb.scroll.rec=0),r&&(r.scrollTrigger=null,t&&r.revert({kill:!1}),n||r.kill()),h&&[h,p,d,_].forEach(function(t){return t.parentNode&&t.parentNode.removeChild(t)}),i$===tb&&(i$=0),K&&(a&&(a.uncache=1),i=0,sq.forEach(function(t){return t.pin===K&&i++}),i||(a.spacer=0)),e.onKill&&e.onKill(tb)},sq.push(tb),tb.enable(!1,!1),q&&q(tb),r&&r.add&&!v){var tD=tb.update;tb.update=function(){tb.update=tD,nK.cache++,c||f||tb.refresh()},id.delayedCall(.01,tb.update),v=.01,c=f=0}else tb.refresh();K&&s8()},t.register=function(e){return i_||(id=e||st(),i7()&&window.document&&t.enable(),i_=i2),i_},t.defaults=function(t){if(t)for(var e in t)sY[e]=t[e];return sY},t.disable=function(t,e){i2=0,sq.forEach(function(r){return r[e?"kill":"disable"](t)}),sF(ig,"wheel",sV),sF(im,"scroll",sV),clearInterval(iM),sF(im,"touchcancel",i4),sF(iy,"touchstart",i4),sR(sF,im,"pointerdown,touchstart,mousedown",i8),sR(sF,im,"pointerup,touchend,mouseup",i6),ib.kill(),sa(sF);for(var r=0;r0&&n.left+i0&&n.top+i=0&&sJ.splice(e,5),sJ.push(t,t.style.cssText,t.getBBox&&t.getAttribute("transform"),id.core.getCache(t),iX())}}):sJ},am.revert=function(t,e){return s2(!t,e)},am.create=function(t,e){return new am(t,e)},am.refresh=function(t){return t?sG(!0):(i_||am.register())&&s9(!0)},am.update=function(t){return++nK.cache&&ae(2*(!0===t))},am.clearScrollMemory=s5,am.maxScroll=function(t,e){return ss(t,e?ie:ir)},am.getScrollFunc=function(t,e){return ia(ii(t),e?ie:ir)},am.getById=function(t){return sH[t]},am.getAll=function(){return sq.filter(function(t){return"ScrollSmoother"!==t.vars.id})},am.isScrolling=function(){return!!i1},am.snapDirectional=sD,am.addEventListener=function(t,e){var r=sQ[t]||(sQ[t]=[]);~r.indexOf(e)||r.push(e)},am.removeEventListener=function(t,e){var r=sQ[t],n=r&&r.indexOf(e);n>=0&&r.splice(n,1)},am.batch=function(t,e){var r,n=[],i={},s=e.interval||.016,a=e.batchMax||1e9,o=function(t,e){var r=[],n=[],i=id.delayedCall(s,function(){e(r,n),r=[],n=[]}).pause();return function(t){r.length||i.restart(!0),r.push(t.trigger),n.push(t),a<=r.length&&i.progress(1)}};for(r in e)i[r]="on"===r.substr(0,2)&&su(e[r])&&"onRefreshInit"!==r?o(r,e[r]):e[r];return su(a)&&(a=a(),sz(am,"refresh",function(){return a=e.batchMax()})),iT(t).forEach(function(t){var e={};for(r in i)e[r]=i[r];e.trigger=t,n.push(am.create(e))}),n};var av,ay=function(t,e,r,n){return e>n?t(n):e<0&&t(0),r>n?(n-e)/(r-e):r<0?e/(e-r):1},ax=function t(e,r){!0===r?e.style.removeProperty("touch-action"):e.style.touchAction=!0===r?"auto":r?"pan-"+r+(ip.isTouch?" pinch-zoom":""):"none",e===iv&&t(iy,r)},ab={auto:1,scroll:1},aT=function(t){var e,r=t.event,n=t.target,i=t.axis,s=(r.changedTouches?r.changedTouches[0]:r).target,a=s._gsap||id.core.getCache(s),o=iJ();if(!a._isScrollT||o-a._isScrollT>2e3){for(;s&&s!==iy&&(s.scrollHeight<=s.clientHeight&&s.scrollWidth<=s.clientWidth||!(ab[(e=sO(s)).overflowY]||ab[e.overflowX]));)s=s.parentNode;a._isScroll=s&&s!==n&&!se(s)&&(ab[(e=sO(s)).overflowY]||ab[e.overflowX]),a._isScrollT=o}(a._isScroll||"x"===i)&&(r.stopPropagation(),r._gsapAllow=!0)},aw=function(t,e,r,n){return ip.create({target:t,capture:!0,debounce:!1,lockAxis:!0,type:e,onWheel:n=n&&aT,onPress:n,onDrag:n,onScroll:n,onEnable:function(){return r&&sz(im,ip.eventTypes[0],aM,!1,!0)},onDisable:function(){return sF(im,ip.eventTypes[0],aM,!0)}})},ak=/(input|label|select|textarea)/i,aM=function(t){var e=ak.test(t.target.tagName);(e||av)&&(t._gsapAllow=!0,av=e)},aO=function(t){sc(t)||(t={}),t.preventDefault=t.isNormalizer=t.allowClicks=!0,t.type||(t.type="wheel,touch"),t.debounce=!!t.debounce,t.id=t.id||"normalizer";var e,r,n,i,s,a,o,u,l=t,c=l.normalizeScrollX,f=l.momentum,h=l.allowNestedScroll,p=l.onRelease,d=ii(t.target)||iv,_=id.core.globals().ScrollSmoother,g=_&&_.get(),m=iN&&(t.content&&ii(t.content)||g&&!1!==t.content&&!g.smooth()&&g.content()),v=ia(d,ir),y=ia(d,ie),x=1,b=(ip.isTouch&&ig.visualViewport?ig.visualViewport.scale*ig.visualViewport.width:ig.outerWidth)/ig.innerWidth,T=0,w=su(f)?function(){return f(e)}:function(){return f||2.8},k=aw(d,t.type,!0,h),M=function(){return i=!1},O=i4,C=i4,E=function(){r=ss(d,ir),C=iw(+!!iN,r),c&&(O=iw(0,ss(d,ie))),n=s3},S=function(){m._gsap.y=i9(parseFloat(m._gsap.y)+v.offset)+"px",m.style.transform="matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, "+parseFloat(m._gsap.y)+", 0, 1)",v.offset=v.cacheID=0},A=function(){if(i){requestAnimationFrame(M);var t=i9(e.deltaY/2),r=C(v.v-t);if(m&&r!==v.v+v.offset){v.offset=r-v.v;var n=i9((parseFloat(m&&m._gsap.y)||0)-v.offset);m.style.transform="matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, "+n+", 0, 1)",m._gsap.y=n+"px",v.cacheID=nK.cache,ae()}return!0}v.offset&&S(),i=!0},P=function(){E(),s.isActive()&&s.vars.scrollY>r&&(v()>r?s.progress(1)&&v(r):s.resetTo("scrollY",r))};return m&&id.set(m,{y:"+=0"}),t.ignoreCheck=function(t){return iN&&"touchmove"===t.type&&A(t)||x>1.05&&"touchstart"!==t.type||e.isGesturing||t.touches&&t.touches.length>1},t.onPress=function(){i=!1;var t=x;x=i9((ig.visualViewport&&ig.visualViewport.scale||1)/b),s.pause(),t!==x&&ax(d,x>1.01||!c&&"x"),a=y(),o=v(),E(),n=s3},t.onRelease=t.onGestureStart=function(t,e){if(v.offset&&S(),e){nK.cache++;var n,i,a=w();c&&(i=(n=y())+-(.05*a*t.velocityX)/.227,a*=ay(y,n,i,ss(d,ie)),s.vars.scrollX=O(i)),i=(n=v())+-(.05*a*t.velocityY)/.227,a*=ay(v,n,i,ss(d,ir)),s.vars.scrollY=C(i),s.invalidate().duration(a).play(.01),(iN&&s.vars.scrollY>=r||n>=r-1)&&id.to({},{onUpdate:P,duration:a})}else u.restart(!0);p&&p(t)},t.onWheel=function(){s._ts&&s.pause(),iJ()-T>1e3&&(n=0,T=iJ())},t.onChange=function(t,e,r,i,s){if(s3!==n&&E(),e&&c&&y(O(i[2]===e?a+(t.startX-t.x):y()+e-i[1])),r){v.offset&&S();var u=s[2]===r,l=u?o+t.startY-t.y:v()+r-s[1],f=C(l);u&&l!==f&&(o+=f-l),v(f)}(r||e)&&ae()},t.onEnable=function(){ax(d,!c&&"x"),am.addEventListener("refresh",P),sz(ig,"resize",P),v.smooth&&(v.target.style.scrollBehavior="auto",v.smooth=y.smooth=!1),k.enable()},t.onDisable=function(){ax(d,!0),sF(ig,"resize",P),am.removeEventListener("refresh",P),k.kill()},t.lockAxis=!1!==t.lockAxis,(e=new ip(t)).iOS=iN,iN&&!v()&&v(1),iN&&id.ticker.add(i4),u=e._dc,s=id.to(e,{ease:"power4",paused:!0,inherit:!1,scrollX:c?"+=0.1":"+=0",scrollY:"+=0.1",modifiers:{scrollY:ad(v,v(),function(){return s.pause()})},onUpdate:ae,onComplete:u.vars.onComplete}),e};am.sort=function(t){if(su(t))return sq.sort(t);var e=ig.pageYOffset||0;return am.getAll().forEach(function(t){return t._sortY=t.trigger?e+t.trigger.getBoundingClientRect().top:t.start+ig.innerHeight}),sq.sort(t||function(t,e){return -1e6*(t.vars.refreshPriority||0)+(t.vars.containerAnimation?1e6:t._sortY)-((e.vars.containerAnimation?1e6:e._sortY)+-1e6*(e.vars.refreshPriority||0))})},am.observe=function(t){return new ip(t)},am.normalizeScroll=function(t){if(void 0===t)return iI;if(!0===t&&iI)return iI.enable();if(!1===t){iI&&iI.kill(),iI=t;return}var e=t instanceof ip?t:aO(t);return iI&&iI.target===e.target&&iI.kill(),se(e.target)&&(iI=e),e},am.core={_getVelocityProp:io,_inputObserver:aw,_scrollers:nK,_proxies:nJ,bridge:{ss:function(){i1||sK("scrollStart"),i1=iJ()},ref:function(){return iO}}},st()&&id.registerPlugin(am),t.s(["ScrollTrigger",0,am],83495)}]); \ No newline at end of file diff --git a/build/_next/static/chunks/06n0m6ck5r8gy.js b/build/_next/static/chunks/06n0m6ck5r8gy.js deleted file mode 100644 index a71123e..0000000 --- a/build/_next/static/chunks/06n0m6ck5r8gy.js +++ /dev/null @@ -1 +0,0 @@ -(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,94909,(t,e,i)=>{"use strict";Object.defineProperty(i,"__esModule",{value:!0});var s={default:function(){return c},getImageProps:function(){return a}};for(var o in s)Object.defineProperty(i,o,{enumerable:!0,get:s[o]});let r=t.r(55682),n=t.r(8927),l=t.r(5500),h=r._(t.r(1948));function a(t){let{props:e}=(0,n.getImgProps)(t,{defaultLoader:h.default,imgConf:{deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[32,48,64,96,128,256,384],qualities:[75],path:"/_next/image",loader:"default",dangerouslyAllowSVG:!1,unoptimized:!0}});for(let[t,i]of Object.entries(e))void 0===i&&delete e[t];return{props:e}}let c=l.Image},57688,(t,e,i)=>{e.exports=t.r(94909)},92599,t=>{"use strict";var e="1.3.23";function i(t,e,i){return Math.max(t,Math.min(e,i))}var s=class{isRunning=!1;value=0;from=0;to=0;currentTime=0;lerp;duration;easing;onUpdate;advance(t){if(!this.isRunning)return;let e=!1;if(this.duration&&this.easing){this.currentTime+=t;let s=i(0,this.currentTime/this.duration,1),o=(e=s>=1)?1:this.easing(s);this.value=this.from+(this.to-this.from)*o}else if(this.lerp){var s,o,r,n;this.value=(s=this.value,o=this.to,r=60*this.lerp,(1-(n=1-Math.exp(-r*t)))*s+n*o),Math.round(this.value)===Math.round(this.to)&&(this.value=this.to,e=!0)}else this.value=this.to,e=!0;e&&this.stop(),this.onUpdate?.(this.value,e)}stop(){this.isRunning=!1}fromTo(t,e,{lerp:i,duration:s,easing:o,onStart:r,onUpdate:n}){this.from=this.value=t,this.to=e,this.lerp=i,this.duration=s,this.easing=o,this.currentTime=0,this.isRunning=!0,r?.(),this.onUpdate=n}},o=class{width=0;height=0;scrollHeight=0;scrollWidth=0;debouncedResize;wrapperResizeObserver;contentResizeObserver;constructor(t,e,{autoResize:i=!0,debounce:s=250}={}){this.wrapper=t,this.content=e,i&&(this.debouncedResize=function(t,e){let i;return function(...s){clearTimeout(i),i=setTimeout(()=>{i=void 0,t.apply(this,s)},e)}}(this.resize,s),this.wrapper instanceof Window?window.addEventListener("resize",this.debouncedResize):(this.wrapperResizeObserver=new ResizeObserver(this.debouncedResize),this.wrapperResizeObserver.observe(this.wrapper)),this.contentResizeObserver=new ResizeObserver(this.debouncedResize),this.contentResizeObserver.observe(this.content)),this.resize()}destroy(){this.wrapperResizeObserver?.disconnect(),this.contentResizeObserver?.disconnect(),this.wrapper===window&&this.debouncedResize&&window.removeEventListener("resize",this.debouncedResize)}resize=()=>{this.onWrapperResize(),this.onContentResize()};onWrapperResize=()=>{this.wrapper instanceof Window?(this.width=window.innerWidth,this.height=window.innerHeight):(this.width=this.wrapper.clientWidth,this.height=this.wrapper.clientHeight)};onContentResize=()=>{this.wrapper instanceof Window?(this.scrollHeight=this.content.scrollHeight,this.scrollWidth=this.content.scrollWidth):(this.scrollHeight=this.wrapper.scrollHeight,this.scrollWidth=this.wrapper.scrollWidth)};get limit(){return{x:this.scrollWidth-this.width,y:this.scrollHeight-this.height}}},r=class{events={};emit(t,...e){let i=this.events[t]||[];for(let t=0,s=i.length;t{this.events[t]=this.events[t]?.filter(t=>e!==t)}}off(t,e){this.events[t]=this.events[t]?.filter(t=>e!==t)}destroy(){this.events={}}};let n=100/6,l={passive:!1};function h(t,e){return 1===t?n:2===t?e:1}var a=class{touchStart={x:0,y:0};lastDelta={x:0,y:0};window={width:0,height:0};emitter=new r;constructor(t,e={wheelMultiplier:1,touchMultiplier:1}){this.element=t,this.options=e,window.addEventListener("resize",this.onWindowResize),this.onWindowResize(),this.element.addEventListener("wheel",this.onWheel,l),this.element.addEventListener("touchstart",this.onTouchStart,l),this.element.addEventListener("touchmove",this.onTouchMove,l),this.element.addEventListener("touchend",this.onTouchEnd,l)}on(t,e){return this.emitter.on(t,e)}destroy(){this.emitter.destroy(),window.removeEventListener("resize",this.onWindowResize),this.element.removeEventListener("wheel",this.onWheel,l),this.element.removeEventListener("touchstart",this.onTouchStart,l),this.element.removeEventListener("touchmove",this.onTouchMove,l),this.element.removeEventListener("touchend",this.onTouchEnd,l)}onTouchStart=t=>{let{clientX:e,clientY:i}=t.targetTouches?t.targetTouches[0]:t;this.touchStart.x=e,this.touchStart.y=i,this.lastDelta={x:0,y:0},this.emitter.emit("scroll",{deltaX:0,deltaY:0,event:t})};onTouchMove=t=>{let{clientX:e,clientY:i}=t.targetTouches?t.targetTouches[0]:t,s=-(e-this.touchStart.x)*this.options.touchMultiplier,o=-(i-this.touchStart.y)*this.options.touchMultiplier;this.touchStart.x=e,this.touchStart.y=i,this.lastDelta={x:s,y:o},this.emitter.emit("scroll",{deltaX:s,deltaY:o,event:t})};onTouchEnd=t=>{this.emitter.emit("scroll",{deltaX:this.lastDelta.x,deltaY:this.lastDelta.y,event:t})};onWheel=t=>{let{deltaX:e,deltaY:i,deltaMode:s}=t,o=h(s,this.window.width),r=h(s,this.window.height);e*=o,i*=r,e*=this.options.wheelMultiplier,i*=this.options.wheelMultiplier,this.emitter.emit("scroll",{deltaX:e,deltaY:i,event:t})};onWindowResize=()=>{this.window={width:window.innerWidth,height:window.innerHeight}}};let c=t=>Math.min(1,1.001-2**(-10*t));var p=class{_isScrolling=!1;_isStopped=!1;_isLocked=!1;_preventNextNativeScrollEvent=!1;_resetVelocityTimeout=null;_rafId=null;isTouching;time=0;userData={};lastVelocity=0;velocity=0;direction=0;options;targetScroll;animatedScroll;animate=new s;emitter=new r;dimensions;virtualScroll;constructor({wrapper:t=window,content:i=document.documentElement,eventsTarget:s=t,smoothWheel:r=!0,syncTouch:n=!1,syncTouchLerp:l=.075,touchInertiaExponent:h=1.7,duration:p,easing:d,lerp:u=.1,infinite:m=!1,orientation:v="vertical",gestureOrientation:f="horizontal"===v?"both":"vertical",touchMultiplier:g=1,wheelMultiplier:w=1,autoResize:S=!0,prevent:y,virtualScroll:E,overscroll:b=!0,autoRaf:T=!1,anchors:z=!1,autoToggle:L=!1,allowNestedScroll:N=!1,__experimental__naiveDimensions:R=!1,naiveDimensions:O=R,stopInertiaOnNavigate:_=!1}={}){window.lenisVersion=e,window.lenis||(window.lenis={}),window.lenis.version=e,"horizontal"===v&&(window.lenis.horizontal=!0),!0===n&&(window.lenis.touch=!0),t&&t!==document.documentElement||(t=window),"number"==typeof p&&"function"!=typeof d?d=c:"function"==typeof d&&"number"!=typeof p&&(p=1),this.options={wrapper:t,content:i,eventsTarget:s,smoothWheel:r,syncTouch:n,syncTouchLerp:l,touchInertiaExponent:h,duration:p,easing:d,lerp:u,infinite:m,gestureOrientation:f,orientation:v,touchMultiplier:g,wheelMultiplier:w,autoResize:S,prevent:y,virtualScroll:E,overscroll:b,autoRaf:T,anchors:z,autoToggle:L,allowNestedScroll:N,naiveDimensions:O,stopInertiaOnNavigate:_},this.dimensions=new o(t,i,{autoResize:S}),this.updateClassName(),this.targetScroll=this.animatedScroll=this.actualScroll,this.options.wrapper.addEventListener("scroll",this.onNativeScroll),this.options.wrapper.addEventListener("scrollend",this.onScrollEnd,{capture:!0}),(this.options.anchors||this.options.stopInertiaOnNavigate)&&this.options.wrapper.addEventListener("click",this.onClick),this.options.wrapper.addEventListener("pointerdown",this.onPointerDown),this.virtualScroll=new a(s,{touchMultiplier:g,wheelMultiplier:w}),this.virtualScroll.on("scroll",this.onVirtualScroll),this.options.autoToggle&&(this.checkOverflow(),this.rootElement.addEventListener("transitionend",this.onTransitionEnd)),this.options.autoRaf&&(this._rafId=requestAnimationFrame(this.raf))}destroy(){this.emitter.destroy(),this.options.wrapper.removeEventListener("scroll",this.onNativeScroll),this.options.wrapper.removeEventListener("scrollend",this.onScrollEnd,{capture:!0}),this.options.wrapper.removeEventListener("pointerdown",this.onPointerDown),(this.options.anchors||this.options.stopInertiaOnNavigate)&&this.options.wrapper.removeEventListener("click",this.onClick),this.virtualScroll.destroy(),this.dimensions.destroy(),this.cleanUpClassName(),this._rafId&&cancelAnimationFrame(this._rafId)}on(t,e){return this.emitter.on(t,e)}off(t,e){return this.emitter.off(t,e)}onScrollEnd=t=>{t instanceof CustomEvent||"smooth"!==this.isScrolling&&!1!==this.isScrolling||t.stopPropagation()};dispatchScrollendEvent=()=>{this.options.wrapper.dispatchEvent(new CustomEvent("scrollend",{bubbles:this.options.wrapper===window,detail:{lenisScrollEnd:!0}}))};get overflow(){let t=this.isHorizontal?"overflow-x":"overflow-y";return getComputedStyle(this.rootElement)[t]}checkOverflow(){["hidden","clip"].includes(this.overflow)?this.internalStop():this.internalStart()}onTransitionEnd=t=>{t.propertyName?.includes("overflow")&&t.target===this.rootElement&&this.checkOverflow()};setScroll(t){this.isHorizontal?this.options.wrapper.scrollTo({left:t,behavior:"instant"}):this.options.wrapper.scrollTo({top:t,behavior:"instant"})}onClick=t=>{let e=t.composedPath().filter(t=>t instanceof HTMLAnchorElement&&t.href).map(t=>new URL(t.href)),i=new URL(window.location.href);if(this.options.anchors){let t=e.find(t=>i.host===t.host&&i.pathname===t.pathname&&t.hash);if(t){let e="object"==typeof this.options.anchors&&this.options.anchors?this.options.anchors:void 0,i=`#${t.hash.split("#")[1]}`;this.scrollTo(i,e);return}}if(this.options.stopInertiaOnNavigate&&e.some(t=>i.host===t.host&&i.pathname!==t.pathname))return void this.reset()};onPointerDown=t=>{1===t.button&&this.reset()};onVirtualScroll=t=>{if("function"==typeof this.options.virtualScroll&&!1===this.options.virtualScroll(t))return;let{deltaX:e,deltaY:i,event:s}=t;if(this.emitter.emit("virtual-scroll",{deltaX:e,deltaY:i,event:s}),s.ctrlKey||s.lenisStopPropagation)return;let o=s.type.includes("touch"),r=s.type.includes("wheel");this.isTouching="touchstart"===s.type||"touchmove"===s.type;let n=0===e&&0===i;if(this.options.syncTouch&&o&&"touchstart"===s.type&&n&&!this.isStopped&&!this.isLocked)return void this.reset();let l="vertical"===this.options.gestureOrientation&&0===i||"horizontal"===this.options.gestureOrientation&&0===e;if(n||l)return;let h=s.composedPath();h=h.slice(0,h.indexOf(this.rootElement));let a=this.options.prevent,c=Math.abs(e)>=Math.abs(i)?"horizontal":"vertical";if(h.find(t=>t instanceof HTMLElement&&("function"==typeof a&&a?.(t)||t.hasAttribute?.("data-lenis-prevent")||"vertical"===c&&t.hasAttribute?.("data-lenis-prevent-vertical")||"horizontal"===c&&t.hasAttribute?.("data-lenis-prevent-horizontal")||o&&t.hasAttribute?.("data-lenis-prevent-touch")||r&&t.hasAttribute?.("data-lenis-prevent-wheel")||this.options.allowNestedScroll&&this.hasNestedScroll(t,{deltaX:e,deltaY:i}))))return;if(this.isStopped||this.isLocked){s.cancelable&&s.preventDefault();return}if(!(this.options.syncTouch&&o||this.options.smoothWheel&&r)){this.isScrolling="native",this.animate.stop(),s.lenisStopPropagation=!0;return}let p=i;"both"===this.options.gestureOrientation?p=Math.abs(i)>Math.abs(e)?i:e:"horizontal"===this.options.gestureOrientation&&(p=e),(!this.options.overscroll||this.options.infinite||this.options.wrapper!==window&&this.limit>0&&(this.animatedScroll>0&&this.animatedScroll0||this.animatedScroll===this.limit&&i<0))&&(s.lenisStopPropagation=!0),s.cancelable&&s.preventDefault();let d=o&&this.options.syncTouch,u=o&&"touchend"===s.type;u&&(p=Math.sign(p)*Math.abs(this.velocity)**this.options.touchInertiaExponent),this.scrollTo(this.targetScroll+p,{programmatic:!1,...d?{lerp:u?this.options.syncTouchLerp:1}:{lerp:this.options.lerp,duration:this.options.duration,easing:this.options.easing}})};resize(){this.dimensions.resize(),this.animatedScroll=this.targetScroll=this.actualScroll,this.emit()}emit(){this.emitter.emit("scroll",this)}onNativeScroll=()=>{if(null!==this._resetVelocityTimeout&&(clearTimeout(this._resetVelocityTimeout),this._resetVelocityTimeout=null),this._preventNextNativeScrollEvent){this._preventNextNativeScrollEvent=!1;return}if(!1===this.isScrolling||"native"===this.isScrolling){let t=this.animatedScroll;this.animatedScroll=this.targetScroll=this.actualScroll,this.lastVelocity=this.velocity,this.velocity=this.animatedScroll-t,this.direction=Math.sign(this.animatedScroll-t),this.isStopped||(this.isScrolling="native"),this.emit(),0!==this.velocity&&(this._resetVelocityTimeout=setTimeout(()=>{this.lastVelocity=this.velocity,this.velocity=0,this.isScrolling=!1,this.emit()},400))}};reset(){this.isLocked=!1,this.isScrolling=!1,this.animatedScroll=this.targetScroll=this.actualScroll,this.lastVelocity=this.velocity=0,this.animate.stop()}start(){if(this.isStopped){if(this.options.autoToggle)return void this.rootElement.style.removeProperty("overflow");this.internalStart()}}internalStart(){this.isStopped&&(this.reset(),this.isStopped=!1,this.emit())}stop(){if(!this.isStopped){if(this.options.autoToggle)return void this.rootElement.style.setProperty("overflow","clip");this.internalStop()}}internalStop(){this.isStopped||(this.reset(),this.isStopped=!0,this.emit())}raf=t=>{let e=t-(this.time||t);this.time=t,this.animate.advance(.001*e),this.options.autoRaf&&(this._rafId=requestAnimationFrame(this.raf))};scrollTo(t,{offset:e=0,immediate:s=!1,lock:o=!1,programmatic:r=!0,lerp:n=r?this.options.lerp:void 0,duration:l=r?this.options.duration:void 0,easing:h=r?this.options.easing:void 0,onStart:a,onComplete:p,force:d=!1,userData:u}={}){if((this.isStopped||this.isLocked)&&!d)return;let m=t,v=e;if("string"==typeof m&&["top","left","start","#"].includes(m))m=0;else if("string"==typeof m&&["bottom","right","end"].includes(m))m=this.limit;else{let t=null;if("string"==typeof m?(t=document.querySelector(m))||("#top"===m?m=0:console.warn("Lenis: Target not found",m)):m instanceof HTMLElement&&m?.nodeType&&(t=m),t){if(this.options.wrapper!==window){let t=this.rootElement.getBoundingClientRect();v-=this.isHorizontal?t.left:t.top}let e=t.getBoundingClientRect(),i=getComputedStyle(t),s=this.isHorizontal?Number.parseFloat(i.scrollMarginLeft):Number.parseFloat(i.scrollMarginTop),o=getComputedStyle(this.rootElement),r=this.isHorizontal?Number.parseFloat(o.scrollPaddingLeft):Number.parseFloat(o.scrollPaddingTop);m=(this.isHorizontal?e.left:e.top)+this.animatedScroll-(Number.isNaN(s)?0:s)-(Number.isNaN(r)?0:r)}}if("number"==typeof m){if(m+=v,this.options.infinite){if(r){this.targetScroll=this.animatedScroll=this.scroll;let t=m-this.animatedScroll;t>this.limit/2?m-=this.limit:t<-this.limit/2&&(m+=this.limit)}}else m=i(0,m,this.limit);if(m===this.targetScroll){a?.(this),p?.(this);return}if(this.userData=u??{},s){this.animatedScroll=this.targetScroll=m,this.setScroll(this.scroll),this.reset(),this.preventNextNativeScrollEvent(),this.emit(),p?.(this),this.userData={},requestAnimationFrame(()=>{this.dispatchScrollendEvent()});return}r||(this.targetScroll=m),"number"==typeof l&&"function"!=typeof h?h=c:"function"==typeof h&&"number"!=typeof l&&(l=1),this.animate.fromTo(this.animatedScroll,m,{duration:l,easing:h,lerp:n,onStart:()=>{o&&(this.isLocked=!0),this.isScrolling="smooth",a?.(this)},onUpdate:(t,e)=>{this.isScrolling="smooth",this.lastVelocity=this.velocity,this.velocity=t-this.animatedScroll,this.direction=Math.sign(this.velocity),this.animatedScroll=t,this.setScroll(this.scroll),r&&(this.targetScroll=t),e||this.emit(),e&&(this.reset(),this.emit(),p?.(this),this.userData={},requestAnimationFrame(()=>{this.dispatchScrollendEvent()}),this.preventNextNativeScrollEvent())}})}}preventNextNativeScrollEvent(){this._preventNextNativeScrollEvent=!0,requestAnimationFrame(()=>{this._preventNextNativeScrollEvent=!1})}hasNestedScroll(t,{deltaX:e,deltaY:i}){let s,o,r,n,l,h,a,c,p,d,u,m,v,f,g,w,S=Date.now();t._lenis||(t._lenis={});let y=t._lenis;if(S-(y.time??0)>2e3){y.time=Date.now();let e=window.getComputedStyle(t);if(y.computedStyle=e,s=["auto","overlay","scroll"].includes(e.overflowX),o=["auto","overlay","scroll"].includes(e.overflowY),l=["auto"].includes(e.overscrollBehaviorX),h=["auto"].includes(e.overscrollBehaviorY),y.hasOverflowX=s,y.hasOverflowY=o,!(s||o))return!1;a=t.scrollWidth,c=t.scrollHeight,p=t.clientWidth,d=t.clientHeight,r=a>p,n=c>d,y.isScrollableX=r,y.isScrollableY=n,y.scrollWidth=a,y.scrollHeight=c,y.clientWidth=p,y.clientHeight=d,y.hasOverscrollBehaviorX=l,y.hasOverscrollBehaviorY=h}else r=y.isScrollableX,n=y.isScrollableY,s=y.hasOverflowX,o=y.hasOverflowY,a=y.scrollWidth,c=y.scrollHeight,p=y.clientWidth,d=y.clientHeight,l=y.hasOverscrollBehaviorX,h=y.hasOverscrollBehaviorY;if(!(s&&r||o&&n))return!1;let E=Math.abs(e)>=Math.abs(i)?"horizontal":"vertical";if("horizontal"===E)u=Math.round(t.scrollLeft),m=a-p,v=e,f=s,g=r,w=l;else{if("vertical"!==E)return!1;u=Math.round(t.scrollTop),m=c-d,v=i,f=o,g=n,w=h}return!w&&(u>=m||u<=0)||(v>0?u0)&&f&&g}get rootElement(){return this.options.wrapper===window?document.documentElement:this.options.wrapper}get limit(){return this.options.naiveDimensions?this.isHorizontal?this.rootElement.scrollWidth-this.rootElement.clientWidth:this.rootElement.scrollHeight-this.rootElement.clientHeight:this.dimensions.limit[this.isHorizontal?"x":"y"]}get isHorizontal(){return"horizontal"===this.options.orientation}get actualScroll(){let t=this.options.wrapper;return this.isHorizontal?t.scrollX??t.scrollLeft:t.scrollY??t.scrollTop}get scroll(){var t;return this.options.infinite?(this.animatedScroll%(t=this.limit)+t)%t:this.animatedScroll}get progress(){return 0===this.limit?1:this.scroll/this.limit}get isScrolling(){return this._isScrolling}set isScrolling(t){this._isScrolling!==t&&(this._isScrolling=t,this.updateClassName())}get isStopped(){return this._isStopped}set isStopped(t){this._isStopped!==t&&(this._isStopped=t,this.updateClassName())}get isLocked(){return this._isLocked}set isLocked(t){this._isLocked!==t&&(this._isLocked=t,this.updateClassName())}get isSmooth(){return"smooth"===this.isScrolling}get className(){let t="lenis";return this.options.autoToggle&&(t+=" lenis-autoToggle"),this.isStopped&&(t+=" lenis-stopped"),this.isLocked&&(t+=" lenis-locked"),this.isScrolling&&(t+=" lenis-scrolling"),"smooth"===this.isScrolling&&(t+=" lenis-smooth"),t}updateClassName(){this.cleanUpClassName(),this.className.split(" ").forEach(t=>{this.rootElement.classList.add(t)})}cleanUpClassName(){for(let t of Array.from(this.rootElement.classList))("lenis"===t||t.startsWith("lenis-"))&&this.rootElement.classList.remove(t)}};t.s(["default",0,p])}]); \ No newline at end of file diff --git a/build/_next/static/chunks/074ch-b_0x~v-.js b/build/_next/static/chunks/074ch-b_0x~v-.js deleted file mode 100644 index c5ff7fc..0000000 --- a/build/_next/static/chunks/074ch-b_0x~v-.js +++ /dev/null @@ -1,702 +0,0 @@ -(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,18566,(e,t,i)=>{t.exports=e.r(76562)},82637,e=>{"use strict";var t=e.i(43476),i=e.i(71645);let n=(0,i.createContext)(null);e.s(["HeaderUIProvider",0,function({children:e}){let[l,a]=(0,i.useState)(!1),[o,r]=(0,i.useState)(!1),s=(0,i.useCallback)(()=>{a(e=>!e),r(!1)},[]),d=(0,i.useCallback)(()=>{r(e=>!e),a(!1)},[]),c=(0,i.useCallback)(()=>{a(!1),r(!1)},[]);return(0,t.jsx)(n.Provider,{value:{isMenuOpen:l,isSidebarOpen:o,toggleMenu:s,toggleSidebar:d,closeAll:c},children:e})},"useHeaderUI",0,function(){let e=(0,i.useContext)(n);if(!e)throw Error("useHeaderUI must be used inside ");return e}])},3374,e=>{"use strict";var t=e.i(43476),i=e.i(71645),n=e.i(22016),l=e.i(57688),a=e.i(18566),o=e.i(82637);let r={"/":"home","/how-it-works":"how-it-works","/miletruth":"miletruth","/solutions":"solutions","/doormile-wings":"doormile-wings","/empowerment":"entarpreneurship","/express":"express","/about-us":"about","/blog":"blogs"},s={home:["home"],"how-it-works":["how-it-works","how-its-works"],miletruth:["miletruth"],solutions:["solutions"],"doormile-wings":["doormile-wings"],entarpreneurship:["entarpreneurship"],blogs:["blogs"],company:["blogs","how-it-works","about"]};e.s(["default",0,function(){let e=(0,a.usePathname)(),{isMenuOpen:d,isSidebarOpen:c,toggleMenu:m,toggleSidebar:h,closeAll:p}=(0,o.useHeaderUI)(),u=r[e]??"",g=e=>(s[e]??[]).includes(u)?" active":"",f=(t,i,n,l=!1)=>{if(l&&_(),e!==i)return;t.preventDefault();let a=`${i}#${n}`;`${window.location.pathname}${window.location.hash}`!==a&&window.history.pushState(null,"",a),requestAnimationFrame(()=>{let e;(e=document.getElementById(n))?e.scrollIntoView({behavior:"smooth",block:"start"}):window.scrollTo({top:0,behavior:"smooth"})})},[w,x]=(0,i.useState)(!1),[b,v]=(0,i.useState)(!1),[y,j]=(0,i.useState)(!1),[k,N]=(0,i.useState)(!1),_=()=>{N(!1),p()};(0,i.useEffect)(()=>{let e=requestAnimationFrame(()=>{x(!0)});return()=>cancelAnimationFrame(e)},[]),(0,i.useEffect)(()=>{let e=null,t=()=>{null===e&&(e=requestAnimationFrame(()=>{v(window.scrollY>50),e=null}))};return t(),window.addEventListener("scroll",t),()=>{window.removeEventListener("scroll",t),null!==e&&cancelAnimationFrame(e)}},[]);let C=["elementor-element","elementor-element-466de1b","e-con-full","sticky-container-on","e-flex","cut-corner-no","e-con","e-parent","header-hide-until-scroll",w?"header-visible-scrolled":"",b?"dm-header-scrolled":""].filter(Boolean).join(" ");return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("header",{id:"masthead",itemScope:!0,itemType:"https://schema.org/WPHeader",children:[(0,t.jsx)("p",{className:"main-title bhf-hidden",itemProp:"headline",children:(0,t.jsx)(n.default,{href:"/",title:"Doormile",rel:"home",children:"Doormile"})}),(0,t.jsx)("div",{"data-elementor-type":"wp-post","data-elementor-id":"5180",className:"elementor elementor-5180",children:(0,t.jsxs)("div",{className:C,"data-id":"466de1b","data-element_type":"container","data-settings":'{"position":"absolute"}',style:"/"!==e||w?void 0:{opacity:0,visibility:"hidden"},children:[(0,t.jsx)("div",{className:"elementor-element elementor-element-e052838 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"e052838","data-element_type":"container",children:(0,t.jsxs)("div",{className:"elementor-element elementor-element-d681ece e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"d681ece","data-element_type":"container",children:[(0,t.jsxs)("div",{className:"elementor-element elementor-element-472172e e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"472172e","data-element_type":"container",children:[(0,t.jsx)("div",{className:"elementor-element elementor-element-2f31137 elementor-hidden-laptop elementor-hidden-tablet_extra elementor-hidden-tablet elementor-hidden-mobile_extra elementor-hidden-mobile elementor-widget elementor-widget-logico_slide_sidebar","data-id":"2f31137","data-element_type":"widget","data-widget_type":"logico_slide_sidebar.default",children:(0,t.jsxs)("div",{className:"elementor-widget-container",children:[(0,t.jsx)("div",{className:"logico-slide-sidebar-widget",children:(0,t.jsx)("div",{className:"dropdown-trigger","data-id":"2f31137",onClick:h,children:(0,t.jsx)("span",{className:"dropdown-trigger-icon"})})}),(0,t.jsxs)("div",{style:{zIndex:1e5},className:`slide-sidebar-wrapper slide-sidebar-position-left${c?" active":""}`,id:"side-panel-2f31137",children:[(0,t.jsx)("div",{className:"slide-sidebar-close",onClick:p}),(0,t.jsxs)("div",{className:"slide-sidebar",children:[(0,t.jsx)("div",{className:"slide-sidebar-header",children:(0,t.jsx)("figure",{className:"wp-block-image size-full is-resized",children:(0,t.jsx)(l.default,{width:305,height:58,src:"/images/doormile-logo.png",alt:"Doormile logo",className:"wp-image-5851",style:{width:"210px",height:"auto"},sizes:"(max-width: 305px) 100vw, 305px"})})}),(0,t.jsx)("div",{className:"slide-sidebar-content",tabIndex:0,role:"region","aria-label":"Menu content",children:(0,t.jsx)("div",{id:"block-37",className:"widget widget_block",children:(0,t.jsx)("div",{className:"widget-wrapper",children:(0,t.jsxs)("div",{className:"dm-block-group is-layout-constrained dm-block-group-is-layout-constrained",children:[(0,t.jsx)("div",{className:"wp-block-title",children:(0,t.jsx)("h6",{className:"wp-block-heading has-text-font-font-family",style:{fontSize:"18px",fontStyle:"normal",fontWeight:700,letterSpacing:"0px",textTransform:"none"},children:"Address"})}),(0,t.jsx)("h6",{className:"wp-block-heading has-text-font-font-family",style:{fontSize:"14px",fontStyle:"normal",fontWeight:700,letterSpacing:"0px",textTransform:"none"},children:"Hyderabad"}),(0,t.jsxs)("p",{children:["5th Floor, Vision Ultima,",(0,t.jsx)("br",{}),"Street No.3, Jayabheri Enclave,",(0,t.jsx)("br",{}),"Gachibowli, Hyderabad,",(0,t.jsx)("br",{}),"Telangana 500032."]}),(0,t.jsx)("div",{style:{height:"12px"},"aria-hidden":"true",className:"wp-block-spacer"}),(0,t.jsx)("h6",{className:"wp-block-heading has-text-font-font-family",style:{fontSize:"14px",fontStyle:"normal",fontWeight:700,letterSpacing:"0px",textTransform:"none"},children:"Coimbatore"}),(0,t.jsxs)("p",{children:["Mayflower Valencia,",(0,t.jsx)("br",{}),"Near Nava India Bus Stop,",(0,t.jsx)("br",{}),"Avinashi Road,",(0,t.jsx)("br",{}),"Udayampalayam,",(0,t.jsx)("br",{}),"Tamil Nadu 641037."]}),(0,t.jsx)("div",{style:{height:"12px"},"aria-hidden":"true",className:"wp-block-spacer"}),(0,t.jsx)("h6",{className:"wp-block-heading has-text-font-font-family",style:{fontSize:"14px",fontStyle:"normal",fontWeight:700,letterSpacing:"0px",textTransform:"none"},children:"Bengaluru"}),(0,t.jsxs)("p",{children:["C612, 6th Floor,",(0,t.jsx)("br",{}),"Trifecta Starlight,",(0,t.jsx)("br",{}),"ITPL Road,",(0,t.jsx)("br",{}),"Garudacharapalya,",(0,t.jsx)("br",{}),"Mahadevapura,",(0,t.jsx)("br",{}),"Bangalore 560048,",(0,t.jsx)("br",{}),"Karnataka, India."]}),(0,t.jsx)("div",{style:{height:"3px"},"aria-hidden":"true",className:"wp-block-spacer"}),(0,t.jsx)("div",{className:"wp-block-title",children:(0,t.jsx)("h6",{className:"wp-block-heading has-text-font-font-family",style:{fontSize:"18px",fontStyle:"normal",fontWeight:700,letterSpacing:"0px",textTransform:"none"},children:"Contact Us"})}),(0,t.jsx)("p",{children:"Tel : +91 86886 97941"}),(0,t.jsx)("div",{style:{height:"3px"},"aria-hidden":"true",className:"wp-block-spacer"}),(0,t.jsx)("div",{className:"wp-block-title",children:(0,t.jsx)("h6",{className:"wp-block-heading has-text-font-font-family",style:{fontSize:"18px",fontStyle:"normal",fontWeight:700,letterSpacing:"0px",textTransform:"none"},children:"Email"})}),(0,t.jsx)("p",{children:(0,t.jsx)("a",{href:"mailto:care@doormile.com","data-wplink-edit":"true",children:"care@doormile.com"})}),(0,t.jsx)("div",{style:{height:"3px"},"aria-hidden":"true",className:"wp-block-spacer"}),(0,t.jsxs)("ul",{className:"wp-block-social-links has-icon-color is-style-logos-only has-background is-layout-flex wp-block-social-links-is-layout-flex",style:{backgroundColor:"#1f1f1f"},children:[(0,t.jsx)("li",{style:{color:"#ffffff"},className:"wp-social-link wp-social-link-facebook has-white-color wp-block-social-link",children:(0,t.jsxs)("a",{rel:"noopener nofollow",target:"_blank",href:"https://www.facebook.com/",className:"wp-block-social-link-anchor",children:[(0,t.jsx)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",version:"1.1",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",children:(0,t.jsx)("path",{d:"M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z"})}),(0,t.jsx)("span",{className:"wp-block-social-link-label screen-reader-text",children:"Facebook"})]})}),(0,t.jsx)("li",{style:{color:"#ffffff"},className:"wp-social-link wp-social-link-x has-white-color wp-block-social-link",children:(0,t.jsxs)("a",{rel:"noopener nofollow",target:"_blank",href:"https://x.com/",className:"wp-block-social-link-anchor",children:[(0,t.jsx)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",version:"1.1",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",children:(0,t.jsx)("path",{d:"M13.982 10.622 20.54 3h-1.554l-5.693 6.618L8.745 3H3.5l6.876 10.007L3.5 21h1.554l6.012-6.989L15.868 21h5.245l-7.131-10.378Zm-2.128 2.474-.697-.997-5.543-7.93H8l4.474 6.4.697.996 5.815 8.318h-2.387l-4.745-6.787Z"})}),(0,t.jsx)("span",{className:"wp-block-social-link-label screen-reader-text",children:"X"})]})}),(0,t.jsx)("li",{style:{color:"#ffffff"},className:"wp-social-link wp-social-link-linkedin has-white-color wp-block-social-link",children:(0,t.jsxs)("a",{rel:"noopener nofollow",target:"_blank",href:"https://www.linkedin.com/",className:"wp-block-social-link-anchor",children:[(0,t.jsx)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",version:"1.1",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",children:(0,t.jsx)("path",{d:"M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z"})}),(0,t.jsx)("span",{className:"wp-block-social-link-label screen-reader-text",children:"LinkedIn"})]})}),(0,t.jsx)("li",{style:{color:"#ffffff"},className:"wp-social-link wp-social-link-youtube has-white-color wp-block-social-link",children:(0,t.jsxs)("a",{rel:"noopener nofollow",target:"_blank",href:"https://www.youtube.com/",className:"wp-block-social-link-anchor",children:[(0,t.jsx)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",version:"1.1",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",children:(0,t.jsx)("path",{d:"M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z"})}),(0,t.jsx)("span",{className:"wp-block-social-link-label screen-reader-text",children:"YouTube"})]})})]})]})})})}),(0,t.jsx)("div",{className:"slide-sidebar-cta",children:(0,t.jsx)("div",{className:"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex",children:(0,t.jsx)("div",{className:"wp-block-button is-style-simple is-style-theme",children:(0,t.jsx)(n.default,{href:"/contact",className:"wp-block-button__link wp-element-button",style:{borderRadius:"10px"},children:"Get in touch"})})})})]})]})]})}),(0,t.jsx)("div",{className:"elementor-element elementor-element-846e53d elementor-widget elementor-widget-site-logo","data-id":"846e53d","data-element_type":"widget","data-widget_type":"site-logo.default",children:(0,t.jsx)("div",{className:"elementor-widget-container",children:(0,t.jsx)("div",{className:"hfe-site-logo",children:(0,t.jsx)(n.default,{"data-elementor-open-lightbox":"",className:"elementor-clickable",href:"/",children:(0,t.jsx)("div",{className:"hfe-site-logo-set",children:(0,t.jsxs)("div",{className:"hfe-site-logo-container",children:[(0,t.jsx)(l.default,{width:400,height:76,className:"hfe-site-logo-img logo-desktop elementor-animation-",src:"/images/doormile-white.png",alt:"doormile-logo",priority:!0}),(0,t.jsx)(l.default,{width:400,height:76,className:"hfe-site-logo-img logo-mobile elementor-animation-",src:"/images/doormile-black.png",alt:"doormile-logo",priority:!0})]})})})})})})]}),(0,t.jsx)("div",{className:"elementor-element elementor-element-e44ee7e e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"e44ee7e","data-element_type":"container",children:(0,t.jsx)("div",{className:"elementor-element elementor-element-0b7bf6f logico-breakpoint-laptop elementor-widget__width-auto elementor-widget elementor-widget-logico_navigation_menu","data-id":"0b7bf6f","data-element_type":"widget","data-widget_type":"logico_navigation_menu.default",children:(0,t.jsxs)("div",{className:"elementor-widget-container",children:[(0,t.jsx)("div",{className:"header-menu-container",children:(0,t.jsx)("nav",{children:(0,t.jsxs)("ul",{id:"menu-main-menu",className:"main-menu",children:[(0,t.jsx)("li",{id:"menu-item-10508",className:`menu-item menu-item-type-custom menu-item-object-custom menu-item-10508${g("home")}`,children:(0,t.jsx)(n.default,{href:"/#home",onClick:e=>f(e,"/","home"),children:"Home"})}),(0,t.jsx)("li",{id:"menu-item-10509",className:`menu-item menu-item-type-custom menu-item-object-custom menu-item-10509${g("doormile-wings")}`,children:(0,t.jsx)(n.default,{href:"/doormile-wings",prefetch:!0,children:"Wings"})}),(0,t.jsx)("li",{id:"menu-item-10510",className:`menu-item menu-item-type-custom menu-item-object-custom menu-item-10510${g("miletruth")}`,children:(0,t.jsx)(n.default,{href:"/miletruth#miletruth",onClick:e=>f(e,"/miletruth","miletruth"),children:"MileTruth™ AI"})}),(0,t.jsx)("li",{id:"menu-item-10511",className:`menu-item menu-item-type-custom menu-item-object-custom menu-item-10511${g("solutions")}`,children:(0,t.jsx)(n.default,{href:"/solutions",prefetch:!0,children:"Solutions"})}),(0,t.jsx)("li",{id:"menu-item-10513",className:`menu-item menu-item-type-custom menu-item-object-custom menu-item-10513${g("entarpreneurship")}`,children:(0,t.jsx)(n.default,{href:"/empowerment",prefetch:!0,children:"Entrepreneurship"})}),(0,t.jsxs)("li",{id:"menu-item-10535",className:`menu-item menu-item-type-custom menu-item-has-children menu-item-10535${g("company")}`,onMouseEnter:()=>j(!0),onMouseLeave:()=>j(!1),onKeyDown:e=>{"Escape"===e.key&&(j(!1),e.currentTarget.querySelector(":scope > a")?.focus())},onBlur:e=>{e.currentTarget.contains(e.relatedTarget)||j(!1)},children:[(0,t.jsx)("a",{href:"#","aria-haspopup":"true","aria-expanded":y,onFocus:()=>j(!0),onClick:e=>{e.preventDefault(),j(e=>!e)},children:"Company"}),(0,t.jsxs)("ul",{className:"dm-solutions-dropdown",children:[(0,t.jsx)("li",{className:"about"===u?"dm-child-active":"",children:(0,t.jsx)(n.default,{href:"/about-us#about",onClick:e=>{j(!1),f(e,"/about-us","about")},children:"About"})}),(0,t.jsx)("li",{className:"blogs"===u?"dm-child-active":"",children:(0,t.jsx)(n.default,{href:"/blog#blogs",onClick:e=>{j(!1),f(e,"/blog","blogs")},children:"Blogs"})}),(0,t.jsx)("li",{className:"how-it-works"===u?"dm-child-active":"",children:(0,t.jsx)(n.default,{href:"/how-it-works#how-it-works",onClick:e=>{j(!1),f(e,"/how-it-works","how-it-works")},children:"How It Works"})})]})]})]})})}),(0,t.jsx)("div",{className:"menu-trigger","data-id":"0b7bf6f",onClick:()=>{N(!1),m()},children:(0,t.jsx)("span",{className:"menu-trigger-icon",children:(0,t.jsxs)("span",{className:"hamburger",children:[(0,t.jsx)("span",{}),(0,t.jsx)("span",{}),(0,t.jsx)("span",{})]})})}),(0,t.jsxs)("div",{style:{zIndex:1e5},className:`mobile-header-menu-container${d?" active":""}`,id:"mobile-header-0b7bf6f",children:[(0,t.jsx)("div",{className:"mobile-header-row",children:(0,t.jsxs)("div",{className:"header-icons-container",children:[(0,t.jsx)("div",{className:"header-icon login-logout",children:(0,t.jsx)("a",{href:"#",title:"Login/Register",className:"link-login"})}),(0,t.jsx)("div",{className:"header-icon menu-close",onClick:_,children:(0,t.jsx)("span",{className:"menu-close-icon"})})]})}),(0,t.jsx)("nav",{children:(0,t.jsxs)("ul",{id:"menu-main-menu-1",className:"main-menu",children:[(0,t.jsx)("li",{className:`menu-item menu-item-type-custom menu-item-object-custom menu-item-10508${g("home")}`,children:(0,t.jsx)(n.default,{href:"/#home",onClick:e=>f(e,"/","home",!0),children:"Home"})}),(0,t.jsx)("li",{className:`menu-item menu-item-type-custom menu-item-object-custom menu-item-10509${g("doormile-wings")}`,children:(0,t.jsx)(n.default,{href:"/doormile-wings",prefetch:!0,onClick:_,children:"Wings"})}),(0,t.jsx)("li",{className:`menu-item menu-item-type-custom menu-item-object-custom menu-item-10510${g("miletruth")}`,children:(0,t.jsx)(n.default,{href:"/miletruth#miletruth",onClick:e=>f(e,"/miletruth","miletruth",!0),children:"MileTruth™ AI"})}),(0,t.jsx)("li",{className:`menu-item menu-item-type-custom menu-item-object-custom menu-item-10511${g("solutions")}`,children:(0,t.jsx)(n.default,{href:"/solutions",prefetch:!0,onClick:_,children:"Solutions"})}),(0,t.jsx)("li",{className:`menu-item menu-item-type-custom menu-item-object-custom menu-item-10513${g("entarpreneurship")}`,children:(0,t.jsx)(n.default,{href:"/empowerment",prefetch:!0,onClick:_,children:"Entrepreneurship"})}),(0,t.jsxs)("li",{className:`menu-item menu-item-type-custom menu-item-10535 dm-mobile-solutions${g("company")}${k?" dm-accordion-open":""}`,children:[(0,t.jsxs)("div",{className:"dm-mobile-solutions-row",children:[(0,t.jsx)("a",{href:"#",onClick:e=>{e.preventDefault(),N(e=>!e)},children:"Company"}),(0,t.jsx)("button",{type:"button",className:"dm-mobile-solutions-toggle","aria-label":k?"Close Company menu":"Open Company menu","aria-haspopup":"true","aria-expanded":k,onClick:()=>N(e=>!e),children:(0,t.jsx)("span",{className:"dm-accordion-chevron","aria-hidden":"true"})})]}),(0,t.jsxs)("ul",{className:"dm-mobile-solutions-panel",children:[(0,t.jsx)("li",{className:"about"===u?"dm-child-active":"",children:(0,t.jsx)(n.default,{href:"/about-us#about",onClick:e=>f(e,"/about-us","about",!0),children:"About"})}),(0,t.jsx)("li",{className:"blogs"===u?"dm-child-active":"",children:(0,t.jsx)(n.default,{href:"/blog#blogs",onClick:e=>f(e,"/blog","blogs",!0),children:"Blogs"})}),(0,t.jsx)("li",{className:"how-it-works"===u?"dm-child-active":"",children:(0,t.jsx)(n.default,{href:"/how-it-works#how-it-works",onClick:e=>f(e,"/how-it-works","how-it-works",!0),children:"How It Works"})})]})]})]})}),(0,t.jsxs)("div",{className:"header-mobile-contacts",children:[(0,t.jsxs)("div",{className:"contact-item contact-item-phone",children:[(0,t.jsx)("span",{className:"contact-item-label",children:"Phone"}),(0,t.jsx)("div",{className:"contact-item-value",children:(0,t.jsx)("p",{children:"Tel : +91 86886 97941"})})]}),(0,t.jsxs)("div",{className:"contact-item contact-item-email",children:[(0,t.jsx)("span",{className:"contact-item-label",children:"Email"}),(0,t.jsx)("div",{className:"contact-item-value",children:(0,t.jsx)("p",{children:(0,t.jsx)("a",{href:"mailto:care@doormile.com","data-wplink-edit":"true",children:"care@doormile.com"})})})]})]}),(0,t.jsx)("div",{className:"header-mobile-socials",children:(0,t.jsxs)("ul",{className:"mobile-menu-socials wrapper-socials",children:[(0,t.jsx)("li",{children:(0,t.jsx)("a",{href:"https://www.facebook.com/",target:"_blank","aria-label":"Facebook",rel:"noreferrer",children:(0,t.jsx)("svg",{"aria-hidden":"true",width:"18",height:"18",viewBox:"0 0 320 512",xmlns:"http://www.w3.org/2000/svg",fill:"currentColor",children:(0,t.jsx)("path",{d:"M279.14 288l14.22-92.66h-88.91v-60.13c0-25.35 12.42-50.06 52.24-50.06h40.42V6.26S260.43 0 225.36 0c-73.22 0-121.08 44.38-121.08 124.72v70.62H22.89V288h81.39v224h100.17V288z"})})})}),(0,t.jsx)("li",{children:(0,t.jsx)("a",{href:"https://x.com/",target:"_blank","aria-label":"X (Twitter)",rel:"noreferrer",children:(0,t.jsx)("svg",{"aria-hidden":"true",width:"18",height:"18",viewBox:"0 0 512 512",xmlns:"http://www.w3.org/2000/svg",fill:"currentColor",children:(0,t.jsx)("path",{d:"M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z"})})})}),(0,t.jsx)("li",{children:(0,t.jsx)("a",{href:"https://www.linkedin.com/",target:"_blank","aria-label":"LinkedIn",rel:"noreferrer",children:(0,t.jsx)("svg",{"aria-hidden":"true",width:"18",height:"18",viewBox:"0 0 448 512",xmlns:"http://www.w3.org/2000/svg",fill:"currentColor",children:(0,t.jsx)("path",{d:"M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z"})})})}),(0,t.jsx)("li",{children:(0,t.jsx)("a",{href:"https://www.youtube.com/",target:"_blank","aria-label":"YouTube",rel:"noreferrer",children:(0,t.jsx)("svg",{"aria-hidden":"true",width:"18",height:"18",viewBox:"0 0 576 512",xmlns:"http://www.w3.org/2000/svg",fill:"currentColor",children:(0,t.jsx)("path",{d:"M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"})})})})]})}),(0,t.jsx)("div",{className:"header-mobile-button",children:(0,t.jsx)(n.default,{className:"logico-alter-button",href:"/contact",children:"Get in Touch"})})]})]})})})]})}),(0,t.jsx)("div",{className:"elementor-element elementor-element-f961133 e-con-full elementor-hidden-laptop elementor-hidden-tablet_extra elementor-hidden-tablet elementor-hidden-mobile_extra elementor-hidden-mobile e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"f961133","data-element_type":"container",children:(0,t.jsx)("div",{className:"elementor-element elementor-element-cabdb09 elementor-widget elementor-widget-logico_header_button","data-id":"cabdb09","data-element_type":"widget","data-widget_type":"logico_header_button.default",children:(0,t.jsx)("div",{className:"elementor-widget-container",children:(0,t.jsx)("div",{className:"header-button-container",children:(0,t.jsx)(n.default,{href:"/contact",className:"header-button header-button-animation-fade",children:"Contact Us"})})})})})]})})]}),(0,t.jsx)("style",{suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:` - /* ── Off-canvas menu: full-height flex column ── - Header (logo) at top, scrollable content in the middle, and the - "Get in touch" CTA pinned at the bottom — so the panel stays - usable however much content (e.g. multiple office addresses) it - holds. Scoped to #side-panel-2f31137; no other sidebar is touched. - Width, colors, the slide-in animation, and open/close behaviour - (driven by the .active class on the wrapper) are all unchanged. */ - #side-panel-2f31137 .slide-sidebar { - display: flex !important; - flex-direction: column !important; - height: 100% !important; - padding: 0 !important; /* the three sections own their padding */ - overflow: hidden !important; /* scrolling lives on the content area */ - } - /* Fit the *visible* viewport. The panel height is calc(100vh - 20px), - but on mobile 100vh is the larger, URL-bar-inclusive height, which - pushed the bottom of the scroll list + the CTA below the fold and - made scrolling appear broken. dvh tracks the actually-visible area; - vh is kept as a fallback for older browsers. */ - #side-panel-2f31137.slide-sidebar-wrapper { - height: calc(100vh - 20px); - height: calc(100dvh - 20px) !important; - } - #side-panel-2f31137 .slide-sidebar-header { - flex: 0 0 auto; - padding: 52px 36px 18px; /* top clears the floating close button */ - text-align: center; /* centre the logo */ - } - #side-panel-2f31137 .slide-sidebar-header figure { - margin: 0; - text-align: center; - } - #side-panel-2f31137 .slide-sidebar-header img { - display: inline-block; /* centred by the header's text-align */ - } - #side-panel-2f31137 .slide-sidebar-content { - flex: 1 1 auto; - min-height: 0; /* let the flex child shrink so it can scroll */ - overflow-y: auto; - overflow-x: hidden; - -webkit-overflow-scrolling: touch; /* momentum scroll on iOS */ - overscroll-behavior: contain; /* don't chain scroll to the page */ - padding: 18px 60px 8px; /* top gap below the logo header */ - } - #side-panel-2f31137 .slide-sidebar-content:focus-visible { - outline: none; /* container is scroll-focusable, not a control */ - } - #side-panel-2f31137 .slide-sidebar-cta { - flex: 0 0 auto; - padding: 16px 60px 36px; - } - /* Compact, readable address blocks (tighter line + lead-in than the - default 1.75em body spacing). */ - #side-panel-2f31137 .slide-sidebar-content p { - line-height: 1.5; - margin-top: 4px; - } - /* Larger social icons — the logos-only block style renders them at 18px. */ - #side-panel-2f31137 .wp-block-social-links.is-style-logos-only .wp-block-social-link a svg { - width: 26px !important; - height: 26px !important; - } - - #masthead .elementor-element.elementor-element-466de1b { - position: absolute !important; - top: 5px !important; - left: 0 !important; - right: 0 !important; - width: auto !important; - transition: background-color 0.25s ease, box-shadow 0.25s ease, padding 0.25s ease !important; - z-index: 10000 !important; - } - - /* .e-con's --padding-* falls through two competing stylesheets and lands at 10px locally - (vs 0 in production). Zero out the pill wrappers so the navbar matches prod height (~122px). */ - #masthead .elementor-element.elementor-element-e052838, - #masthead .elementor-element.elementor-element-d681ece { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - - @media (min-width: 1025px) { - #masthead { - position: relative; - z-index: 10000; - } - - /* Production pins the wrapper via Elementor sticky-effects JS (not shipped here). - Force position:fixed once scrolled past 50px so the header stays in viewport. */ - #masthead .elementor-element.elementor-element-466de1b.dm-header-scrolled { - position: fixed !important; - background: rgba(26, 26, 26, 0.92) !important; - -webkit-backdrop-filter: blur(14px) !important; - backdrop-filter: blur(14px) !important; - box-shadow: 0 10px 30px rgba(0, 0, 0, 0.22) !important; - top: 0 !important; - } - - #masthead .elementor-element.elementor-element-466de1b.dm-header-scrolled .elementor-element.elementor-element-e052838 { - background: transparent !important; - } - } - - /* ── Desktop navbar layout (3-section balanced grid) ── - The earlier Mac-M1 fix used justify-content:space-between, which - on wide screens flung the logo and nav to opposite edges and - left a large asymmetric gap between them. Replace it with a - responsive three-column grid so the nav stays optically centred - with equal space on both sides, the logo group sits left and the - Contact button right — proportional at every desktop width. - - The logo group (472172e) and nav (e44ee7e) are nested inside - e052838 › d681ece, while the Contact button (f961133) is their - uncle. Those two wrappers carry no visual styling on desktop - (their background/padding live only in the <1024px mobile block), - so display:contents flattens them and promotes all three logical - sections to be direct items of one header grid. The grid only - applies >=1025px, leaving the mobile pill layout untouched. */ - @media (min-width: 1025px) { - #masthead .elementor-element.elementor-element-466de1b { - display: grid !important; - grid-template-columns: 1fr auto 1fr !important; - align-items: center !important; - column-gap: clamp(16px, 2vw, 32px) !important; - /* Equal left/right safe areas pull the logo and Contact - button inward off the viewport edges. Because the inset - is symmetric, the 1fr side columns shrink equally and the - centred nav does not shift. */ - padding-inline: clamp(24px, 3vw, 48px) !important; - /* Consistent top/bottom breathing room inside the bar; with - align-items:center every section stays vertically centred. */ - padding-block: clamp(8px, 1vw, 16px) !important; - } - - #masthead .elementor-element.elementor-element-e052838, - #masthead .elementor-element.elementor-element-d681ece { - display: contents !important; - } - - /* navbar-left: menu/grid icon + logo */ - #masthead .elementor-element.elementor-element-472172e { - justify-self: start !important; - display: flex !important; - align-items: center !important; - gap: clamp(16px, 1.5vw, 28px) !important; - flex: 0 0 auto !important; - } - - /* Logo never shrinks — keeps a clean edge against the nav. */ - #masthead .elementor-element.elementor-element-846e53d { - flex-shrink: 0 !important; - } - - /* navbar-center: navigation menu, optically centred. */ - #masthead .elementor-element.elementor-element-e44ee7e { - justify-self: center !important; - display: flex !important; - align-items: center !important; - } - - /* navbar-right: Contact button, aligned to the right edge. */ - #masthead .elementor-element.elementor-element-f961133 { - justify-self: end !important; - } - } - - #masthead .header-menu-container .main-menu > li.active > a:before { - background-color: #ffffff !important; - opacity: 1 !important; - } - - #masthead .header-menu-container .main-menu > li.active > a { - color: #ffffff !important; - } - - #masthead .header-menu-container .main-menu > li > a:focus, - #masthead .header-menu-container .main-menu > li > a:focus-visible { - outline: none !important; - box-shadow: none !important; - } - - /* Responsive logo adjustment on mobile/tablet */ - @media (max-width: 1024px) { - #masthead .elementor-element.elementor-element-466de1b { - top: 18px !important; - } - #masthead .elementor-element.elementor-element-846e53d .hfe-site-logo .hfe-site-logo-container img { - width: 150px !important; - height: auto !important; - margin-left: 20px !important; - } - #masthead .header-menu-container { - display: none !important; - } - #masthead .menu-trigger { - display: block !important; - } - - /* Sticky header on scroll for mobile/tablet too — the desktop - rule lived only in the min-width:1025px block, so on phones the - absolutely-positioned navbar scrolled away with the page. Pin it - to the top once scrolled past 50px, matching desktop behaviour. */ - #masthead .elementor-element.elementor-element-466de1b.dm-header-scrolled { - position: fixed !important; - top: 18px !important; - left: 0 !important; - right: 0 !important; - } - - #masthead .elementor-element.elementor-element-e052838 { - margin-left: 0px !important; - margin-right: 0px !important; - border-radius: 16px !important; - } - } - - @media (max-width: 480px) { - #masthead .elementor-element.elementor-element-846e53d .hfe-site-logo .hfe-site-logo-container img { - width: 150px !important; - margin-left: 8px !important; - } - } - - /* The theme reveals the mobile slide-in menu via Elementor's - body[data-elementor-device-mode="mobile"] rules, which are set by - Elementor's frontend JS — that JS isn't shipped in this Next port, - so the panel stayed display:none and the hamburger opened nothing. - Restore it with the same 1024px breakpoint the nav already switches - at. The panel sits off-screen (right:-320px) until .active slides - it in, matching production behaviour. */ - @media (max-width: 1024px) { - #masthead .elementor-widget-logico_navigation_menu .mobile-header-menu-container { - display: block !important; - } - } - - /* The bundled 'fontello' subset is missing the search (\\e85c) and - close (\\e845) glyphs, so those two icons render as empty tofu - boxes. Replace them with inline SVGs via CSS masks so they paint - in the current text colour (matching the working cart/user icons) - and respond to hover. */ - #masthead .header-icon.search-link .search-trigger-icon::before, - #masthead .header-icon.menu-close .menu-close-icon::before { - content: "" !important; - display: block; - width: 1em; - height: 1em; - background-color: currentColor; - -webkit-mask-repeat: no-repeat; - mask-repeat: no-repeat; - -webkit-mask-position: center; - mask-position: center; - -webkit-mask-size: contain; - mask-size: contain; - } - #masthead .header-icon.search-link .search-trigger-icon::before { - -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cline x1='16.5' y1='16.5' x2='21' y2='21'/%3E%3C/svg%3E"); - mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cline x1='16.5' y1='16.5' x2='21' y2='21'/%3E%3C/svg%3E"); - } - #masthead .header-icon.menu-close .menu-close-icon::before { - -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round'%3E%3Cline x1='5' y1='5' x2='19' y2='19'/%3E%3Cline x1='19' y1='5' x2='5' y2='19'/%3E%3C/svg%3E"); - mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round'%3E%3Cline x1='5' y1='5' x2='19' y2='19'/%3E%3Cline x1='19' y1='5' x2='5' y2='19'/%3E%3C/svg%3E"); - } - - /* ── Company dropdown (desktop) / accordion (mobile) ── - Company (Blogs + How It Works) is a non-navigating parent — - its trigger is a plain anchor with no href target, only a - dropdown toggle. Class names below (.dm-solutions-dropdown, - .dm-mobile-solutions*) are unchanged from when this same - component/markup belonged to Solutions, reusing site.css's dead - .menu-item-has-children chevron (fontello glyph, already - coloured white for this exact header widget) instead of - inventing a new arrow. Desktop opens on hover/focus; mobile is a - height-collapsing accordion controlled by the chevron button. */ - @media (min-width: 1025px) { - #masthead .header-menu-container nav { - display: flex; - align-items: center; - } - - #masthead .header-menu-container .main-menu { - display: inline-flex !important; - align-items: center; - gap: 16px !important; - margin: 0 !important; - line-height: 1; - } - - #masthead .header-menu-container .main-menu > li { - display: flex; - align-items: center; - margin-right: 0 !important; - } - - #masthead .header-menu-container .main-menu > li > a { - display: inline-flex !important; - align-items: center; - justify-content: center; - padding-top: 0 !important; - padding-bottom: 0 !important; - min-height: 48px; - line-height: 1.2 !important; - } - - #masthead .header-menu-container .main-menu > li.menu-item-has-children { - position: relative; - } - - #masthead .header-menu-container .main-menu > li.menu-item-has-children:after { - content: ""; - position: absolute; - top: 100%; - left: 50%; - width: 100%; - min-width: 360px; - height: 24px; - transform: translateX(-50%); - pointer-events: auto; - } - - #masthead .header-menu-container .main-menu > li.menu-item-has-children .dm-solutions-dropdown { - position: absolute; - top: 100%; - left: 50%; - transform: translate(-50%, 34px); - width: 240px; - min-width: 240px; - margin: 0; - padding: 12px; - list-style: none; - background: linear-gradient(180deg, rgba(31, 31, 31, 0.98) 0%, rgba(18, 18, 18, 0.98) 100%); - -webkit-backdrop-filter: blur(20px); - backdrop-filter: blur(20px); - box-shadow: 0 24px 60px rgba(0, 0, 0, 0.38), inset 0 1px 0 rgba(255, 255, 255, 0.08); - border: 1px solid rgba(255, 255, 255, 0.09); - border-radius: 18px; - opacity: 0; - visibility: hidden; - pointer-events: none; - transition: opacity 0.25s ease, transform 0.25s ease, visibility 0.25s; - z-index: 20; - } - - /* .main-menu li:not(:last-of-type) (site.css) is a descendant - selector that also matches these nested
  • s, pushing every - row but the last 12px to the right. Cancel it here. */ - #masthead .header-menu-container .main-menu > li.menu-item-has-children .dm-solutions-dropdown li { - margin-right: 0 !important; - } - - #masthead .header-menu-container .main-menu > li.menu-item-has-children .dm-solutions-dropdown li + li { - margin-top: 10px; - } - - #masthead .header-menu-container .main-menu > li.menu-item-has-children .dm-solutions-dropdown li > a { - display: flex; - align-items: center; - justify-content: flex-start; - gap: 10px; - height: 48px; - padding: 0 16px; - border-radius: 10px; - /* Hardcoded rather than var(--logico-dark-text-color): that - variable is only overridden to white inside a few unrelated - scoped contexts (e.g. #side-panel-2f31137) and otherwise - falls back to the sitewide light-theme value (#111111), - which would be invisible on this dark glass panel. */ - color: rgba(255, 255, 255, 0.85); - font-family: var(--font-manrope), "Manrope", sans-serif; - font-size: 15px; - font-weight: 600; - line-height: 1.25; - letter-spacing: normal; - white-space: nowrap; - text-decoration: none; - transition: background-color 0.25s ease, color 0.25s ease, padding-left 0.25s ease; - } - - #masthead .header-menu-container .main-menu > li.menu-item-has-children .dm-solutions-dropdown li > a:before { - content: ""; - width: 11px; - height: 11px; - margin-left: -16px; - flex: 0 0 11px; - background-color: #c01227; - opacity: 0; - transform: translateX(-10px); - -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 12 12 4'/%3E%3Cpath d='M5 4h7v7'/%3E%3C/svg%3E"); - mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 12 12 4'/%3E%3Cpath d='M5 4h7v7'/%3E%3C/svg%3E"); - -webkit-mask-repeat: no-repeat; - mask-repeat: no-repeat; - -webkit-mask-position: center; - mask-position: center; - -webkit-mask-size: contain; - mask-size: contain; - transition: opacity 0.25s ease-in-out, transform 0.25s ease-in-out, background-color 0.25s ease-in-out; - } - - #masthead .header-menu-container .main-menu > li.menu-item-has-children .dm-solutions-dropdown li > a:hover, - #masthead .header-menu-container .main-menu > li.menu-item-has-children .dm-solutions-dropdown li > a:focus-visible { - background-color: rgba(255, 255, 255, 0.08); - color: #ffffff; - padding-left: 22px; - } - - #masthead .header-menu-container .main-menu > li.menu-item-has-children .dm-solutions-dropdown li > a:hover:before, - #masthead .header-menu-container .main-menu > li.menu-item-has-children .dm-solutions-dropdown li > a:focus-visible:before { - opacity: 1; - transform: translateX(0); - background-color: #c01227; - } - - #masthead .header-menu-container .main-menu > li.menu-item-has-children .dm-solutions-dropdown li.dm-child-active > a { - color: #ffffff; - font-weight: 700; - } - - #masthead .header-menu-container .main-menu > li.menu-item-has-children > a[aria-expanded="true"] ~ .dm-solutions-dropdown { - opacity: 1; - visibility: visible; - pointer-events: auto; - transform: translate(-50%, 24px); - } - - #masthead .header-menu-container .main-menu > li.menu-item-has-children > a[aria-expanded="true"]:after { - transform: rotate(180deg); - } - - /* Outlines are globally suppressed for .main-menu>li>a above; - restore a visible focus ring scoped only to this trigger. */ - #masthead .header-menu-container .main-menu > li.menu-item-has-children > a:focus-visible { - outline: 2px solid var(--logico-dark-text-color, #ffffff); - outline-offset: 6px; - border-radius: 4px; - } - } - - #masthead .mobile-header-menu-container .dm-mobile-solutions-row { - display: flex !important; - align-items: center; - justify-content: space-between; - } - - #masthead .mobile-header-menu-container .dm-mobile-solutions-row > a { - display: block; - flex: 1 1 auto; - padding: 0.75em 0; - color: var(--logico-default-text-color); - text-decoration: none; - } - - #masthead .mobile-header-menu-container .dm-mobile-solutions-toggle { - display: inline-flex; - align-items: center; - justify-content: center; - width: 44px; - height: 44px; - margin: 0; - padding: 0; - flex: 0 0 44px; - border: 0; - background: transparent; - color: var(--logico-default-text-color); - cursor: pointer; - } - - #masthead .mobile-header-menu-container .dm-mobile-solutions-toggle:focus-visible { - outline: 2px solid currentColor; - outline-offset: 2px; - border-radius: 4px; - } - - #masthead .mobile-header-menu-container .dm-accordion-chevron { - display: inline-block; - width: 0.7em; - height: 0.7em; - flex: 0 0 auto; - background-color: currentColor; - -webkit-mask-repeat: no-repeat; - mask-repeat: no-repeat; - -webkit-mask-position: center; - mask-position: center; - -webkit-mask-size: contain; - mask-size: contain; - -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E"); - mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E"); - transition: transform 0.3s ease; - } - - #masthead .mobile-header-menu-container .dm-mobile-solutions.dm-accordion-open .dm-accordion-chevron { - transform: rotate(180deg); - } - - #masthead .mobile-header-menu-container .dm-mobile-solutions-panel { - max-height: 0; - overflow: hidden; - list-style: none; - margin: 0; - padding: 0; - padding-left: 18px; - transition: max-height 0.3s ease; - } - - #masthead .mobile-header-menu-container .dm-mobile-solutions.dm-accordion-open .dm-mobile-solutions-panel { - max-height: 160px; - } - - #masthead .mobile-header-menu-container .dm-mobile-solutions-panel > li { - font-size: 0.9em; - } - - /* .mobile-header-menu-container ul.main-menu>li>a (site.css) only - matches direct children of .main-menu, so these nested links - fall through to the sitewide generic underlined-anchor default. - Restore the plain sibling-item look explicitly. */ - #masthead .mobile-header-menu-container .dm-mobile-solutions-panel > li > a { - display: block; - padding: 0.35em 0; - color: var(--logico-default-text-color); - text-decoration: none; - } - - /* A vendor li:before rule (checkmark bullet, likely intended for a - feature-list style elsewhere) leaks through here since the reset - at .mobile-header-menu-container ul.main-menu>li:before only - matches direct children of .main-menu, not this nested li. - Suppress it on both the
  • and — these child rows aren't - top-level nav items and shouldn't carry any bullet/indicator. */ - #masthead .mobile-header-menu-container .dm-mobile-solutions-panel > li:before, - #masthead .mobile-header-menu-container .dm-mobile-solutions-panel > li > a:before { - content: none !important; - display: none !important; - } - - #masthead .mobile-header-menu-container .dm-mobile-solutions-panel > li.dm-child-active > a { - color: var(--logico-light-text-color); - text-decoration: underline; - } - `}})]})}])},58234,e=>{"use strict";var t=e.i(43476),i=e.i(71645),n=e.i(22016),l=e.i(57688),a=e.i(47167);class o{constructor(e=0,t="Network Error"){this.status=e,this.text=t}}let r={origin:"https://api.emailjs.com",blockHeadless:!1,storageProvider:(()=>{if("u">typeof localStorage)return{get:e=>Promise.resolve(localStorage.getItem(e)),set:(e,t)=>Promise.resolve(localStorage.setItem(e,t)),remove:e=>Promise.resolve(localStorage.removeItem(e))}})()},s=e=>e?"string"==typeof e?{publicKey:e}:"[object Object]"===e.toString()?e:{}:{},d=async(e,t,i={})=>{let n=await fetch(r.origin+e,{method:"POST",headers:i,body:t}),l=await n.text(),a=new o(n.status,l);if(n.ok)return a;throw a},c=(e,t,i)=>{if(!e||"string"!=typeof e)throw"The public key is required. Visit https://dashboard.emailjs.com/admin/account";if(!t||"string"!=typeof t)throw"The service ID is required. Visit https://dashboard.emailjs.com/admin";if(!i||"string"!=typeof i)throw"The template ID is required. Visit https://dashboard.emailjs.com/admin/templates"},m=e=>e.webdriver||!e.languages||0===e.languages.length,h=()=>new o(451,"Unavailable For Headless Browser"),p=(e,t)=>{let i;if(!e.list?.length||!e.watchVariable)return!1;var n=e.list,l=e.watchVariable;if(!Array.isArray(n))throw"The BlockList list has to be an array";if("string"!=typeof l)throw"The BlockList watchVariable has to be a string";let a=(i=e.watchVariable,t instanceof FormData?t.get(i):t[i]);return"string"==typeof a&&e.list.includes(a)},u=()=>new o(403,"Forbidden"),g=async(e,t,i)=>{let n=Number(await i.get(e)||0);return t-Date.now()+n},f=async(e,t,i)=>{if(!t.throttle||!i)return!1;var n=t.throttle,l=t.id;if("number"!=typeof n||n<0)throw"The LimitRate throttle has to be a positive number";if(l&&"string"!=typeof l)throw"The LimitRate ID has to be a non-empty string";let a=t.id||e;return await g(a,t.throttle,i)>0||(await i.set(a,Date.now().toString()),!1)},w=()=>new o(429,"Too Many Requests"),x=async(e,t,i,n)=>{let l=s(n),a=l.publicKey||r.publicKey,o=l.blockHeadless||r.blockHeadless,g=l.storageProvider||r.storageProvider,x={...r.blockList,...l.blockList},b={...r.limitRate,...l.limitRate};if(o&&m(navigator))return Promise.reject(h());c(a,e,t);if(i&&"[object Object]"!==i.toString())throw"The template params have to be the object. Visit https://www.emailjs.com/docs/sdk/send/";return i&&p(x,i)?Promise.reject(u()):await f(location.pathname,b,g)?Promise.reject(w()):d("/api/v1.0/email/send",JSON.stringify({lib_version:"4.4.1",user_id:a,service_id:e,template_id:t,template_params:i}),{"Content-type":"application/json"})};async function b(e){let t=a.default.env.NEXT_PUBLIC_EMAILJS_SERVICE_ID,i=a.default.env.NEXT_PUBLIC_EMAILJS_TEMPLATE_ID,n=a.default.env.NEXT_PUBLIC_EMAILJS_PUBLIC_KEY;if(!t||!i||!n)return console.warn("EmailJS credentials are not configured. Falling back to mock success."),await new Promise(e=>setTimeout(e,800)),{success:!0,mock:!0};try{return await x(t,i,{name:e.fullName,email:e.email,subject:e.subject,message:e.message},n),{success:!0}}catch(e){throw console.error("EmailJS sending failed:",e),e}}var v=e.i(2018);e.s(["default",0,function(){let e={"--grid-column-gap":"52px","--grid-row-gap":"18px",columnGap:"52px",rowGap:"18px"},[a,o]=(0,i.useState)(!1),[r,s]=(0,i.useState)({fullName:"",email:"",subject:"",message:""}),[d,c]=(0,i.useState)("idle");(0,i.useEffect)(()=>{let e=()=>{window.scrollY>300?o(!0):o(!1)};return window.addEventListener("scroll",e),()=>window.removeEventListener("scroll",e)},[]);let m=e=>{let{name:t,value:i}=e.target;s(e=>({...e,[t]:i})),("success"===d||"error"===d)&&c("idle")},h=async e=>{e.preventDefault(),c("submitting");try{(await b(r)).success?(c("success"),s({fullName:"",email:"",subject:"",message:""})):(console.error("Failed to submit contact form"),c("error"))}catch(e){console.error("Error submitting contact form:",e),c("error")}};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("style",{dangerouslySetInnerHTML:{__html:` - .logico-form-field.dm-field-filled .logico-label-wrapper>label { - font-size: 14px; - top: -14px; - color: var(--logico-dark-text-color); - } - .logico-form-field.dm-field-filled .logico-label-placeholder .logico-label-placeholder-text:before { - right: 100%; - left: initial; - } - .logico-form-field.dm-field-filled .logico-label-placeholder .logico-label-placeholder-text:after { - left: 100%; - right: initial; - } - `}}),(0,t.jsx)("footer",{"data-rocket-location-hash":"1eeca93394c4fc14089e9d12a2a92e22",itemScope:!0,itemType:"https://schema.org/WPFooter",id:"colophon",role:"contentinfo",children:(0,t.jsx)("div",{className:"footer-width-fixer",children:(0,t.jsx)("div",{"data-elementor-type":"wp-post","data-elementor-id":"6585",className:"elementor elementor-6585",children:(0,t.jsx)("div",{className:"elementor-element elementor-element-3cd920c e-con-full e-flex cut-corner-no sticky-container-off e-con e-parent","data-id":"3cd920c","data-element_type":"container","data-e-type":"container",children:(0,t.jsx)("div",{className:"elementor-element elementor-element-b29b8fc e-flex e-con-boxed cut-corner-no sticky-container-off e-con e-child","data-id":"b29b8fc","data-element_type":"container","data-e-type":"container","data-settings":'{"background_background":"classic"}',children:(0,t.jsxs)("div",{className:"e-con-inner",children:[(0,t.jsxs)("div",{className:"elementor-element elementor-element-ef6fa6d e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"ef6fa6d","data-element_type":"container","data-e-type":"container",children:[(0,t.jsxs)("div",{className:"elementor-element elementor-element-9990148 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"9990148","data-element_type":"container","data-e-type":"container",children:[(0,t.jsx)("div",{className:"elementor-element elementor-element-8899bdf elementor-absolute elementor-widget elementor-widget-image","data-id":"8899bdf","data-element_type":"widget","data-e-type":"widget","data-settings":'{"_position":"absolute"}',"data-widget_type":"image.default",children:(0,t.jsx)("div",{className:"elementor-widget-container",children:(0,t.jsx)(l.default,{width:965,height:474,src:"/images/bg-map.png",className:"attachment-full size-full wp-image-1148",alt:""})})}),(0,t.jsx)("div",{className:"elementor-element elementor-element-a0e7516 elementor-widget elementor-widget-logico_heading","data-id":"a0e7516","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default",children:(0,t.jsx)("div",{className:"elementor-widget-container",children:(0,t.jsx)("div",{className:"logico-title",children:"/ get in touch /"})})}),(0,t.jsx)("div",{className:"elementor-element elementor-element-687d944 elementor-widget elementor-widget-logico_heading","data-id":"687d944","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default",children:(0,t.jsx)("div",{className:"elementor-widget-container",children:(0,t.jsx)(v.ScrollReveal,{delay:.1,duration:.8,yOffset:25,children:(0,t.jsx)("h3",{className:"logico-title",style:{color:"white"},children:"We are always ready to help you and answer your questions"})})})}),(0,t.jsx)("div",{className:"elementor-element elementor-element-670d1b2 elementor-widget elementor-widget-text-editor","data-id":"670d1b2","data-element_type":"widget","data-e-type":"widget","data-widget_type":"text-editor.default",children:(0,t.jsx)("div",{className:"elementor-widget-container",children:(0,t.jsx)("p",{children:"Connecting businesses with fast, secure, smart deliveries."})})}),(0,t.jsx)("div",{className:"elementor-element elementor-element-2631b42 e-flex e-con-boxed cut-corner-no sticky-container-off e-con e-child","data-id":"2631b42","data-element_type":"container","data-e-type":"container",children:(0,t.jsxs)("div",{className:"e-con-inner",children:[(0,t.jsxs)("div",{className:"elementor-element elementor-element-df89993 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"df89993","data-element_type":"container","data-e-type":"container",children:[(0,t.jsx)("div",{className:"elementor-element elementor-element-69b6892 elementor-widget elementor-widget-logico_heading","data-id":"69b6892","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default",children:(0,t.jsx)("div",{className:"elementor-widget-container",children:(0,t.jsxs)("div",{className:"logico-title dm-foot-label",children:[(0,t.jsx)("svg",{className:"dm-foot-ic",width:"15",height:"15",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:(0,t.jsx)("path",{d:"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.36 1.9.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.91.34 1.85.57 2.81.7A2 2 0 0 1 22 16.92z"})}),(0,t.jsx)("span",{children:"Contect"})]})})}),(0,t.jsx)("div",{className:"elementor-element elementor-element-87be926 elementor-widget elementor-widget-text-editor","data-id":"87be926","data-element_type":"widget","data-e-type":"widget","data-widget_type":"text-editor.default",children:(0,t.jsx)("div",{className:"elementor-widget-container",children:(0,t.jsx)("p",{children:"Tel : +91 86886 97941"})})})]}),(0,t.jsxs)("div",{className:"elementor-element elementor-element-f5d8e63 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"f5d8e63","data-element_type":"container","data-e-type":"container",children:[(0,t.jsx)("div",{className:"elementor-element elementor-element-774e540 elementor-widget elementor-widget-logico_heading","data-id":"774e540","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default",children:(0,t.jsx)("div",{className:"elementor-widget-container",children:(0,t.jsxs)("div",{className:"logico-title dm-foot-label",children:[(0,t.jsxs)("svg",{className:"dm-foot-ic",width:"15",height:"15",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,t.jsx)("path",{d:"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"}),(0,t.jsx)("circle",{cx:"12",cy:"10",r:"3"})]}),(0,t.jsx)("span",{children:"Address"})]})})}),(0,t.jsx)("div",{className:"elementor-element elementor-element-9c1cf03 elementor-widget elementor-widget-text-editor","data-id":"9c1cf03","data-element_type":"widget","data-e-type":"widget","data-widget_type":"text-editor.default",children:(0,t.jsx)("div",{className:"elementor-widget-container",children:(0,t.jsx)("p",{children:"5th Floor, Vision Ultima, Street No.3, Jayabheri Enclave, Gachibowli, Hyderabad, Telangana 500032."})})})]})]})}),(0,t.jsx)("div",{className:"elementor-element elementor-element-645be8d e-flex e-con-boxed cut-corner-no sticky-container-off e-con e-child","data-id":"645be8d","data-element_type":"container","data-e-type":"container",children:(0,t.jsxs)("div",{className:"e-con-inner",children:[(0,t.jsxs)("div",{className:"elementor-element elementor-element-a96d151 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"a96d151","data-element_type":"container","data-e-type":"container",children:[(0,t.jsx)("div",{className:"elementor-element elementor-element-37e647f elementor-widget elementor-widget-logico_heading","data-id":"37e647f","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default",children:(0,t.jsx)("div",{className:"elementor-widget-container",children:(0,t.jsxs)("div",{className:"logico-title dm-foot-label",children:[(0,t.jsxs)("svg",{className:"dm-foot-ic",width:"15",height:"15",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,t.jsx)("rect",{x:"2",y:"4",width:"20",height:"16",rx:"2"}),(0,t.jsx)("path",{d:"m22 7-10 5L2 7"})]}),(0,t.jsx)("span",{children:"Email"})]})})}),(0,t.jsx)("div",{className:"elementor-element elementor-element-ba67644 elementor-widget elementor-widget-text-editor","data-id":"ba67644","data-element_type":"widget","data-e-type":"widget","data-widget_type":"text-editor.default",children:(0,t.jsx)("div",{className:"elementor-widget-container",children:(0,t.jsx)("p",{children:(0,t.jsx)("a",{href:"mailto:care@doormile.com",children:"care@doormile.com"})})})})]}),(0,t.jsxs)("div",{className:"elementor-element elementor-element-9ba4b82 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"9ba4b82","data-element_type":"container","data-e-type":"container",children:[(0,t.jsx)("div",{className:"elementor-element elementor-element-e9a5d79 elementor-widget elementor-widget-logico_heading","data-id":"e9a5d79","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default",children:(0,t.jsx)("div",{className:"elementor-widget-container",children:(0,t.jsxs)("div",{className:"logico-title dm-foot-label",children:[(0,t.jsxs)("svg",{className:"dm-foot-ic",width:"15",height:"15",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,t.jsx)("circle",{cx:"18",cy:"5",r:"3"}),(0,t.jsx)("circle",{cx:"6",cy:"12",r:"3"}),(0,t.jsx)("circle",{cx:"18",cy:"19",r:"3"}),(0,t.jsx)("line",{x1:"8.59",y1:"13.51",x2:"15.42",y2:"17.49"}),(0,t.jsx)("line",{x1:"15.41",y1:"6.51",x2:"8.59",y2:"10.49"})]}),(0,t.jsx)("span",{children:"Social"})]})})}),(0,t.jsx)("div",{className:"elementor-element elementor-element-a6bccba elementor-shape-square elementor-grid-0 elementor-widget elementor-widget-social-icons","data-id":"a6bccba","data-element_type":"widget","data-e-type":"widget","data-widget_type":"social-icons.default",children:(0,t.jsx)("div",{className:"elementor-widget-container",children:(0,t.jsxs)("div",{className:"elementor-social-icons-wrapper elementor-grid",role:"list",style:e,children:[(0,t.jsx)("span",{className:"elementor-grid-item",role:"listitem",style:{padding:"0 15px"},children:(0,t.jsxs)("a",{className:"elementor-icon elementor-social-icon elementor-social-icon-linkedin-in elementor-repeater-item-38e1bcc",href:"https://www.linkedin.com",target:"_blank",rel:"noopener noreferrer",children:[(0,t.jsx)("span",{className:"elementor-screen-only",children:"LinkedIn"}),(0,t.jsx)("svg",{"aria-hidden":"true",className:"e-font-icon-svg e-fab-linkedin-in",viewBox:"0 0 448 512",xmlns:"http://www.w3.org/2000/svg",children:(0,t.jsx)("path",{d:"M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z"})})]})}),(0,t.jsx)("span",{className:"elementor-grid-item",role:"listitem",style:{padding:"0 15px"},children:(0,t.jsxs)("a",{className:"elementor-icon elementor-social-icon elementor-social-icon-youtube elementor-repeater-item-b0d5e1f",href:"https://www.youtube.com",target:"_blank",rel:"noopener noreferrer",children:[(0,t.jsx)("span",{className:"elementor-screen-only",children:"YouTube"}),(0,t.jsx)("svg",{"aria-hidden":"true",className:"e-font-icon-svg e-fab-youtube",viewBox:"0 0 576 512",xmlns:"http://www.w3.org/2000/svg",children:(0,t.jsx)("path",{d:"M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"})})]})})]})})})]})]})})]}),(0,t.jsxs)("div",{className:"elementor-element elementor-element-a5c503d e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"a5c503d","data-element_type":"container","data-e-type":"container","data-settings":'{"background_background":"classic"}',children:[(0,t.jsx)("div",{className:"elementor-element elementor-element-535776a elementor-widget elementor-widget-logico_heading","data-id":"535776a","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default",children:(0,t.jsx)("div",{className:"elementor-widget-container",children:(0,t.jsx)("div",{className:"logico-title",children:"Get in Touch"})})}),(0,t.jsx)("div",{className:"elementor-element elementor-element-0e6fedf elementor-widget elementor-widget-logico_wpforms","data-id":"0e6fedf","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_wpforms.default",children:(0,t.jsx)("div",{className:"elementor-widget-container",children:(0,t.jsx)("div",{className:"logico-wpforms-widget",children:(0,t.jsx)("div",{className:"wpforms-container wpforms-render-modern",id:"wpforms-369",children:(0,t.jsxs)("form",{id:"wpforms-form-369",className:"wpforms-validate wpforms-form",onSubmit:h,children:[(0,t.jsxs)("div",{className:"wpforms-field-container",children:[(0,t.jsxs)("div",{className:`wpforms-field-wrapper logico-form-field${r.fullName?" dm-field-filled":""}`,children:[(0,t.jsxs)("div",{className:"logico-label-wrapper",style:{marginBottom:"12px"},children:[(0,t.jsx)("div",{className:"logico-label-placeholder",children:(0,t.jsx)("div",{className:"logico-label-placeholder-text",children:"Full name"})}),(0,t.jsx)("label",{className:"wpforms-field-label",htmlFor:"footer-field-name",children:"Full name"})]}),(0,t.jsx)("input",{type:"text",id:"footer-field-name",className:"wpforms-field-large",name:"fullName",value:r.fullName,onChange:m,required:!0})]}),(0,t.jsxs)("div",{className:`wpforms-field-wrapper logico-form-field${r.email?" dm-field-filled":""}`,children:[(0,t.jsxs)("div",{className:"logico-label-wrapper",style:{marginBottom:"12px"},children:[(0,t.jsx)("div",{className:"logico-label-placeholder",children:(0,t.jsx)("div",{className:"logico-label-placeholder-text",children:"Email"})}),(0,t.jsx)("label",{className:"wpforms-field-label",htmlFor:"footer-field-email",children:"Email"})]}),(0,t.jsx)("input",{type:"email",id:"footer-field-email",className:"wpforms-field-large",name:"email",value:r.email,onChange:m,required:!0})]}),(0,t.jsxs)("div",{className:`wpforms-field-wrapper logico-form-field${r.subject?" dm-field-filled":""}`,children:[(0,t.jsxs)("div",{className:"logico-label-wrapper",style:{marginBottom:"12px"},children:[(0,t.jsx)("div",{className:"logico-label-placeholder",children:(0,t.jsx)("div",{className:"logico-label-placeholder-text",children:"Subject"})}),(0,t.jsx)("label",{className:"wpforms-field-label",htmlFor:"footer-field-subject",children:"Subject"})]}),(0,t.jsx)("input",{type:"text",id:"footer-field-subject",className:"wpforms-field-large",name:"subject",value:r.subject,onChange:m,required:!0})]}),(0,t.jsxs)("div",{className:`wpforms-field-wrapper logico-form-field${r.message?" dm-field-filled":""}`,children:[(0,t.jsxs)("div",{className:"logico-label-wrapper",style:{marginBottom:"12px"},children:[(0,t.jsx)("div",{className:"logico-label-placeholder",children:(0,t.jsx)("div",{className:"logico-label-placeholder-text",children:"Message"})}),(0,t.jsx)("label",{className:"wpforms-field-label",htmlFor:"footer-field-message",children:"Message"})]}),(0,t.jsx)("textarea",{id:"footer-field-message",className:"wpforms-field-large",name:"message",value:r.message,onChange:m,required:!0})]})]}),(0,t.jsxs)("div",{className:"wpforms-submit-container",children:[(0,t.jsx)("button",{type:"submit",id:"wpforms-submit-369",className:"logico-alter-button wpforms-submit",disabled:"submitting"===d,children:"submitting"===d?"Sending...":"Send a message"}),"success"===d&&(0,t.jsx)("div",{style:{color:"#4caf50",marginTop:"10px",fontSize:"14px"},children:"Message sent successfully."}),"error"===d&&(0,t.jsx)("div",{style:{color:"#f44336",marginTop:"10px",fontSize:"14px"},children:"Failed to send message. Please try again."})]})]})})})})})]})]}),(0,t.jsx)("div",{className:"elementor-element elementor-element-e183a77 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"e183a77","data-element_type":"container","data-e-type":"container",children:(0,t.jsx)("div",{className:"elementor-element elementor-element-5219697 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"5219697","data-element_type":"container","data-e-type":"container",children:(0,t.jsx)("div",{className:"elementor-element elementor-element-e6af8aa elementor-widget__width-initial elementor-widget elementor-widget-logico_heading","data-id":"e6af8aa","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default",children:(0,t.jsx)("div",{className:"elementor-widget-container",children:(0,t.jsx)(v.ScrollReveal,{delay:.1,duration:.8,yOffset:25,children:(0,t.jsxs)("h2",{className:"logico-title",children:["Delivered ",(0,t.jsx)("span",{style:{color:"#c01227"},children:"on time"})," with no hassle."]})})})})})}),(0,t.jsx)("div",{className:"elementor-element elementor-element-ba22941 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"ba22941","data-element_type":"container","data-e-type":"container",children:(0,t.jsx)("div",{className:"elementor-element elementor-element-54629ca elementor-widget-divider--view-line elementor-widget elementor-widget-divider","data-id":"54629ca","data-element_type":"widget","data-e-type":"widget","data-widget_type":"divider.default",children:(0,t.jsx)("div",{className:"elementor-widget-container",children:(0,t.jsx)("div",{className:"elementor-divider",children:(0,t.jsx)("span",{className:"elementor-divider-separator"})})})})}),(0,t.jsxs)("div",{className:"elementor-element elementor-element-3f1ba7a e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"3f1ba7a","data-element_type":"container","data-e-type":"container",children:[(0,t.jsxs)("div",{className:"elementor-element elementor-element-64e2e81 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"64e2e81","data-element_type":"container","data-e-type":"container",children:[(0,t.jsx)("div",{className:"elementor-element elementor-element-b5c897d elementor-widget elementor-widget-image","data-id":"b5c897d","data-element_type":"widget","data-e-type":"widget","data-widget_type":"image.default",children:(0,t.jsx)("div",{className:"elementor-widget-container",children:(0,t.jsx)(n.default,{href:"/",children:(0,t.jsx)(l.default,{width:300,height:57,src:"/images/logo-slogan.png",style:{width:"280px",height:"auto"},className:"attachment-full size-full wp-image-5851",alt:"Doormile Tagline"})})})}),(0,t.jsx)("div",{className:"elementor-element elementor-element-e4e6486 elementor-shape-square elementor-grid-0 elementor-widget elementor-widget-social-icons","data-id":"e4e6486","data-element_type":"widget","data-e-type":"widget","data-widget_type":"social-icons.default",children:(0,t.jsx)("div",{className:"elementor-widget-container",children:(0,t.jsxs)("div",{className:"elementor-social-icons-wrapper elementor-grid",role:"list",style:e,children:[(0,t.jsx)("span",{className:"elementor-grid-item",role:"listitem",style:{padding:"0 15px"},children:(0,t.jsxs)("a",{className:"elementor-icon elementor-social-icon elementor-social-icon-linkedin-in",href:"https://www.linkedin.com",target:"_blank",rel:"noopener noreferrer",children:[(0,t.jsx)("span",{className:"elementor-screen-only",children:"LinkedIn"}),(0,t.jsx)("svg",{"aria-hidden":"true",className:"e-font-icon-svg e-fab-linkedin-in",viewBox:"0 0 448 512",xmlns:"http://www.w3.org/2000/svg",children:(0,t.jsx)("path",{d:"M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z"})})]})}),(0,t.jsx)("span",{className:"elementor-grid-item",role:"listitem",style:{padding:"0 15px"},children:(0,t.jsxs)("a",{className:"elementor-icon elementor-social-icon elementor-social-icon-youtube",href:"https://www.youtube.com",target:"_blank",rel:"noopener noreferrer",children:[(0,t.jsx)("span",{className:"elementor-screen-only",children:"YouTube"}),(0,t.jsx)("svg",{"aria-hidden":"true",className:"e-font-icon-svg e-fab-youtube",viewBox:"0 0 576 512",xmlns:"http://www.w3.org/2000/svg",children:(0,t.jsx)("path",{d:"M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"})})]})})]})})})]}),(0,t.jsxs)("div",{className:"elementor-element elementor-element-5b73dd3 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"5b73dd3","data-element_type":"container","data-e-type":"container",children:[(0,t.jsx)("div",{className:"elementor-element elementor-element-10ead4d elementor-widget elementor-widget-logico_heading","data-id":"10ead4d","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default",children:(0,t.jsx)("div",{className:"elementor-widget-container",children:(0,t.jsx)("div",{className:"logico-title",children:"Solutions"})})}),(0,t.jsx)("div",{className:"elementor-element elementor-element-b2507df elementor-widget elementor-widget-logico_custom_navigation_menu","data-id":"b2507df","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_custom_navigation_menu.default",children:(0,t.jsx)("div",{className:"elementor-widget-container",children:(0,t.jsxs)("ul",{className:"logico-custom-menu-widget",children:[(0,t.jsx)("li",{children:(0,t.jsx)(n.default,{href:"/miletruth",children:"MileTruth™"})}),(0,t.jsx)("li",{children:(0,t.jsx)(n.default,{href:"/how-it-works",children:"How It Works"})}),(0,t.jsx)("li",{children:(0,t.jsx)(n.default,{href:"/solutions",children:"Use Cases"})}),(0,t.jsx)("li",{children:(0,t.jsx)(n.default,{href:"/contact",children:"Request Demo"})})]})})})]}),(0,t.jsxs)("div",{className:"elementor-element elementor-element-451f15c e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"451f15c","data-element_type":"container","data-e-type":"container",children:[(0,t.jsx)("div",{className:"elementor-element elementor-element-0ec06ff elementor-widget elementor-widget-logico_heading","data-id":"0ec06ff","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default",children:(0,t.jsx)("div",{className:"elementor-widget-container",children:(0,t.jsx)("div",{className:"logico-title",children:"Services"})})}),(0,t.jsx)("div",{className:"elementor-element elementor-element-a219b7d elementor-widget elementor-widget-logico_custom_navigation_menu","data-id":"a219b7d","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_custom_navigation_menu.default",children:(0,t.jsx)("div",{className:"elementor-widget-container",children:(0,t.jsxs)("ul",{className:"logico-custom-menu-widget",children:[(0,t.jsx)("li",{children:(0,t.jsx)(n.default,{href:"/doormile-wings",children:"Doormile Wings"})}),(0,t.jsx)("li",{children:(0,t.jsx)(n.default,{href:"/about-us",children:"About Us"})}),(0,t.jsx)("li",{children:(0,t.jsx)(n.default,{href:"/about-us#women-entrepreneurship",children:"Women entrepreneurship"})}),(0,t.jsx)("li",{children:(0,t.jsx)(n.default,{href:"/blog",children:"Blog"})}),(0,t.jsx)("li",{children:(0,t.jsx)(n.default,{href:"/contact",children:"Contact"})})]})})})]}),(0,t.jsxs)("div",{className:"elementor-element elementor-element-44a1f5d e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"44a1f5d","data-element_type":"container","data-e-type":"container",children:[(0,t.jsx)("div",{className:"elementor-element elementor-element-0edc8fd elementor-widget elementor-widget-logico_heading","data-id":"0edc8fd","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default",children:(0,t.jsx)("div",{className:"elementor-widget-container",children:(0,t.jsx)("div",{className:"logico-title",children:"Legal"})})}),(0,t.jsx)("div",{className:"elementor-element elementor-element-189484a elementor-widget elementor-widget-logico_custom_navigation_menu","data-id":"189484a","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_custom_navigation_menu.default",children:(0,t.jsx)("div",{className:"elementor-widget-container",children:(0,t.jsxs)("ul",{className:"logico-custom-menu-widget",children:[(0,t.jsx)("li",{children:(0,t.jsx)(n.default,{href:"/privacy-policy",children:"Privacy Policy"})}),(0,t.jsx)("li",{children:(0,t.jsx)(n.default,{href:"/terms-of-service",children:"Terms Service"})}),(0,t.jsx)("li",{children:(0,t.jsx)(n.default,{href:"/cookie-policy",children:"Cookie Policy"})})]})})})]})]})]})})})})})}),(0,t.jsx)("div",{className:`footer-scroll-top ${a?"active":""}`,onClick:()=>{window.scrollTo({top:0,behavior:"smooth"})},style:{cursor:"pointer"}}),(0,t.jsx)("style",{dangerouslySetInnerHTML:{__html:` - .elementor-6585 .elementor-element.elementor-element-e6af8aa .logico-title, - .elementor-6585 .elementor-element.elementor-element-3f1ba7a .logico-title, - .elementor-6585 .elementor-element.elementor-element-3f1ba7a .logico-custom-menu-widget { - font-family: var(--font-manrope), system-ui, -apple-system, "Segoe UI", sans-serif; - } - /* Prevent footer custom navigation menu items from wrapping on hover, - which causes layout shifts, height changes, and cursor flickering loops. */ - .elementor-6585 .logico-custom-menu-widget li a { - white-space: nowrap !important; - } - /* The divider widget is a flex child that should grow via Elementor's - --container-widget-flex-grow variable, but the base rule wiring that - variable to flex-grow lives in elementor-frontend.css (not loaded). */ - .elementor-6585 .elementor-element.elementor-element-54629ca { - flex-grow: 1; - width: 100%; - } - .elementor-6585 .elementor-element.elementor-element-54629ca .elementor-divider-separator { - display: block; - border-top: var(--divider-border-width, 1px) var(--divider-border-style, solid) var(--divider-color, #CBCBCB); - } - - /* Production renders footer social icons at ~25px; ours default to 50px because the - base Elementor icon-size rule (font-size + SVG width:1em) is in elementor-frontend.css - which isn't loaded. Match prod for both upper (a6bccba) and lower (e4e6486) groups. */ - .elementor-6585 .elementor-element.elementor-element-a6bccba .elementor-social-icon, - .elementor-6585 .elementor-element.elementor-element-e4e6486 .elementor-social-icon { - font-size: 16px; - } - .elementor-6585 .elementor-element.elementor-element-a6bccba .elementor-social-icon svg, - .elementor-6585 .elementor-element.elementor-element-e4e6486 .elementor-social-icon svg { - width: 25px; - height: 25px; - } - - /* Compact footer link columns on phones (<=480px). The kit only sets - column --width at min-width:481px, so below that all four blocks - fall back to 100% and stack into one very tall column. Put the - logo+social full-width on top, then lay the three link groups out - in a 2-up grid (matching the tablet 47% intent) so the footer is - roughly half as tall. */ - /* Inline icon beside each contact label (Call Center / Our Location / - Email / Social network). */ - .elementor-6585 .dm-foot-label { - display: inline-flex !important; - align-items: center; - gap: 8px; - } - .elementor-6585 .dm-foot-label .dm-foot-ic { - flex: 0 0 auto; - color: #C01227; - } - - /* ── Compact mobile contact footer (<=600px) ── - On phones the upper contact section stacked into one very tall - column with 50px margins between every block. Tighten the heading, - collapse those stack margins, and pair Email + Social side-by-side - (both are short) so the footer is far shorter without losing the - full-width address readability. */ - @media (max-width: 600px) { - /* Trim the band's oversized top/bottom padding on phones. */ - .elementor-6585 .elementor-element.elementor-element-b29b8fc > .e-con-inner { - padding-top: 40px !important; - padding-bottom: 40px !important; - } - .elementor-6585 .elementor-element.elementor-element-687d944 .logico-title { - font-size: clamp(24px, 6.6vw, 32px) !important; - line-height: 1.2 !important; - } - .elementor-6585 .dm-foot-label .dm-foot-ic { width: 14px; height: 14px; } - /* The Call Center / Our Location group carries a 10px side padding - the Email / Social group doesn't, leaving its labels indented - 10px out of line with everything else — zero it so all four - contact blocks share the same left edge as the heading. */ - .elementor-6585 .elementor-element.elementor-element-2631b42 { - padding-left: 0 !important; - padding-right: 0 !important; - } - /* All four contact blocks stack in one left-aligned column with a - consistent gap (Social network sits below Email). */ - .elementor-6585 .elementor-element.elementor-element-2631b42, - .elementor-6585 .elementor-element.elementor-element-f5d8e63, - .elementor-6585 .elementor-element.elementor-element-645be8d, - .elementor-6585 .elementor-element.elementor-element-9ba4b82 { - margin-top: 22px !important; - } - .elementor-6585 .elementor-element.elementor-element-645be8d > .e-con-inner { - flex-direction: column !important; - gap: 0 !important; - align-items: stretch !important; - } - .elementor-6585 .elementor-element.elementor-element-a96d151, - .elementor-6585 .elementor-element.elementor-element-9ba4b82 { - width: 100% !important; - } - } - - @media (max-width: 480px) { - .elementor-6585 .elementor-element.elementor-element-3f1ba7a { - display: flex !important; - flex-direction: row !important; - flex-wrap: wrap !important; - gap: 36px 16px !important; - } - .elementor-6585 .elementor-element.elementor-element-64e2e81 { - flex: 0 0 100% !important; - width: 100% !important; - } - .elementor-6585 .elementor-element.elementor-element-5b73dd3, - .elementor-6585 .elementor-element.elementor-element-451f15c, - .elementor-6585 .elementor-element.elementor-element-44a1f5d { - flex: 1 1 calc(50% - 8px) !important; - width: calc(50% - 8px) !important; - min-width: 0 !important; - } - /* Allow long links (e.g. "Women entrepreneurship") to wrap inside - the narrow columns instead of overflowing. */ - .elementor-6585 .logico-custom-menu-widget li a { - white-space: normal !important; - } - /* Trim the large social-icons top gap so the brand block stays tight. */ - .elementor-6585 .elementor-element.elementor-element-e4e6486 > .elementor-widget-container { - margin-top: 24px !important; - } - } - `}})]})}],58234)},67989,e=>{"use strict";var t=e.i(71645),i=e.i(18566);let n="wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page",l={"/":`home-page ${n} page-id-61 elementor-page-61 is-home-page`,"/how-it-works":"wp-singular page-template-default page page-id-59 wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-page elementor-page-59","/miletruth":`${n} page-id-59 elementor-page-59`,"/solutions":`${n} page-id-59 elementor-page-59`,"/about-us":`home ${n} page-id-59 elementor-page-59`,"/empowerment":`home ${n} page-id-59 elementor-page-59`,"/blog":`${n} page-id-59 elementor-page-59`,"/contact":`${n} page-id-59 elementor-page-59`};e.s(["default",0,function(){let e=(0,i.usePathname)();return(0,t.useEffect)(()=>{document.body.className=l[e]??n},[e]),null}],67989)},92260,e=>{"use strict";var t=e.i(43476),i=e.i(82637);e.s(["default",0,function(){let{isMenuOpen:e,isSidebarOpen:n,closeAll:l}=(0,i.useHeaderUI)();return(0,t.jsx)("div",{className:`body-overlay${e||n?" active":""}`,onClick:l})}])},48064,e=>{"use strict";var t=e.i(43476),i=e.i(71645),n=e.i(18566),l=e.i(89970),a=e.i(83495);e.s(["default",0,function({children:e}){let o=(0,n.usePathname)(),r=()=>{a.ScrollTrigger.getAll().forEach(e=>{e.vars&&"block-deco"===e.vars.id&&e.kill()});let e=window.innerHeight||document.documentElement.clientHeight;document.querySelectorAll(".block-decoration").forEach(t=>{a.ScrollTrigger.create({id:"block-deco",trigger:t,start:"top 92%",onEnter:()=>{setTimeout(()=>{t.classList.add("animated")},150)},onEnterBack:()=>{setTimeout(()=>{t.classList.add("animated")},150)},onLeave:()=>{t.classList.remove("animated")},onLeaveBack:()=>{t.classList.remove("animated")}});let i=t.getBoundingClientRect();i.top0&&t.classList.add("animated")})};return(0,i.useEffect)(()=>{let e;l.default.registerPlugin(a.ScrollTrigger),l.default.defaults({ease:"power3.out",duration:.8}),a.ScrollTrigger.config({ignoreMobileResize:!0}),r();let t=()=>{r(),a.ScrollTrigger.refresh(!0)};window.addEventListener("load",t);let i=()=>{clearTimeout(e),e=setTimeout(()=>{r(),a.ScrollTrigger.refresh(!0)},200)};return window.addEventListener("resize",i),()=>{clearTimeout(e),window.removeEventListener("load",t),window.removeEventListener("resize",i),a.ScrollTrigger.getAll().forEach(e=>e.kill())}},[]),(0,i.useEffect)(()=>{let e=()=>{r(),a.ScrollTrigger.refresh(!0)};e();let t=[setTimeout(e,100),setTimeout(e,400),setTimeout(e,800),setTimeout(e,1500)];return()=>{t.forEach(clearTimeout)}},[o]),(0,t.jsx)(t.Fragment,{children:e})}])},26290,e=>{"use strict";var t=e.i(71645),i=e.i(18566),n=e.i(89970),l=e.i(83495),a=e.i(92599);let o=["/how-it-works"];e.s(["default",0,function(){let e=(0,i.usePathname)();return(0,t.useEffect)(()=>{let t,i=o.some(t=>e===t||e.startsWith(`${t}/`)),r=window.matchMedia("(prefers-reduced-motion: reduce)").matches,s=window.matchMedia("(hover: hover) and (pointer: fine)").matches;if(i||r||!s){if(window.location.hash){let e=()=>{try{let e=document.querySelector(window.location.hash);e&&e.scrollIntoView()}catch(e){console.warn(e)}};e(),t=setTimeout(e,100)}else window.scrollTo(0,0);return()=>{t&&clearTimeout(t)}}n.default.registerPlugin(l.ScrollTrigger);let d="/miletruth"===e||e.startsWith("/miletruth/"),c=new a.default(d?{lerp:.13,wheelMultiplier:1.3,touchMultiplier:1.6,orientation:"vertical",gestureOrientation:"vertical",smoothWheel:!0}:{duration:1.05,easing:e=>Math.min(1,1.001-Math.pow(2,-10*e)),orientation:"vertical",gestureOrientation:"vertical",smoothWheel:!0});if(window.location.hash){let e=()=>{try{let e=document.querySelector(window.location.hash);e&&c.scrollTo(e,{immediate:!0})}catch(e){console.warn(e)}};e(),t=setTimeout(e,100)}else c.scrollTo(0,{immediate:!0}),window.scrollTo(0,0);c.on("scroll",l.ScrollTrigger.update);let m=e=>c.raf(1e3*e);return n.default.ticker.add(m),n.default.ticker.lagSmoothing(0),l.ScrollTrigger.refresh(),()=>{t&&clearTimeout(t),n.default.ticker.remove(m),c.destroy()}},[e]),null}])},8971,e=>{"use strict";var t=e.i(43476),i=e.i(71645),n=e.i(57688),l=e.i(18566);function a(e){return`${e.pathname}${e.search}`}e.s(["default",0,function(){let e=(0,l.usePathname)(),[o,r]=(0,i.useState)("hidden"),s=(0,i.useRef)("hidden"),d=(0,i.useRef)(0),c=(0,i.useRef)(null),m=(0,i.useRef)(null),h=(0,i.useRef)(null),p=(0,i.useRef)(null),u=e=>{s.current=e,r(e)},g=e=>{e.current&&(clearTimeout(e.current),e.current=null)},f=()=>{if(c.current=null,g(p),"hidden"===s.current||"hiding"===s.current)return;let e=Math.max(0,420-(performance.now()-d.current));g(h),h.current=setTimeout(()=>{u("hiding"),h.current=setTimeout(()=>u("hidden"),360)},e)};return((0,i.useEffect)(()=>{m.current=`${e}${window.location.search}`,f()},[e]),(0,i.useEffect)(()=>{let e=(e,t=!1)=>{(t||e!==a(new URL(window.location.href)))&&(c.current!==e||"visible"!==s.current)&&(c.current=e,g(h),g(p),d.current=performance.now(),u("visible"),p.current=setTimeout(()=>{f()},800))},t=t=>{if(t.defaultPrevented||0!==t.button||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey)return;let i=t.target?.closest("a[href]");if(!i||!(i instanceof HTMLAnchorElement))return;let n=(e=>{let t=e.getAttribute("href");if(!t||t.startsWith("#")||e.target&&"_self"!==e.target||e.hasAttribute("download")||/^(mailto:|tel:|sms:|javascript:)/i.test(t))return null;let i=new URL(t,window.location.href);if(i.origin!==window.location.origin)return null;let n=new URL(window.location.href);return i.pathname===n.pathname&&i.search===n.search?null:a(i)})(i);n&&e(n)},i=window.history.pushState,n=window.history.replaceState,l=t=>{t!==a(new URL(window.location.href))&&window.setTimeout(()=>{e(t,!0)},0)};window.history.pushState=function(...e){let t=e[2];if("string"==typeof t||t instanceof URL){let e=new URL(t,window.location.href);e.origin===window.location.origin&&l(a(e))}return i.apply(this,e)},window.history.replaceState=function(...e){let t=e[2];if("string"==typeof t||t instanceof URL){let e=new URL(t,window.location.href);e.origin===window.location.origin&&l(a(e))}return n.apply(this,e)};let o=()=>{let t=a(new URL(window.location.href));t!==m.current&&e(t,!0)};return document.addEventListener("click",t,!0),window.addEventListener("popstate",o),()=>{document.removeEventListener("click",t,!0),window.removeEventListener("popstate",o),window.history.pushState=i,window.history.replaceState=n,g(h),g(p)}},[]),"hidden"===o)?null:(0,t.jsxs)("div",{className:`dm-loader${"hiding"===o?" is-hiding":""}`,role:"status","aria-live":"polite","aria-label":"Loading",onTransitionEnd:e=>{"opacity"===e.propertyName&&"hiding"===o&&(r("hidden"),s.current="hidden")},children:[(0,t.jsx)("div",{className:"dm-loader__pulse",children:(0,t.jsx)(n.default,{src:"/images/preloader.png",alt:"Doormile",width:325,height:239,priority:!0,className:"dm-loader__logo"})}),(0,t.jsx)("style",{children:` - .dm-loader { - position: fixed; - inset: 0; - z-index: 100000; - display: grid; - place-items: center; - background: #000; - opacity: 1; - transition: opacity 0.32s ease; - will-change: opacity; - } - .dm-loader.is-hiding { opacity: 0; pointer-events: none; } - .dm-loader__pulse { animation: dmLoaderPulse 1.5s linear infinite; display: grid; place-items: center; } - .dm-loader__logo { display: block; margin: 0 auto; width: clamp(120px, 32vw, 180px); height: auto; } - @keyframes dmLoaderPulse { - 50% { transform: scale(0.85); } - 100% { transform: scale(1); } - } - @media (prefers-reduced-motion: reduce) { - .dm-loader__pulse { animation: none; } - } - `})]})}])}]); \ No newline at end of file diff --git a/build/_next/static/chunks/07eq5is00w7sy.js b/build/_next/static/chunks/07eq5is00w7sy.js deleted file mode 100644 index 9415780..0000000 --- a/build/_next/static/chunks/07eq5is00w7sy.js +++ /dev/null @@ -1,812 +0,0 @@ -(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,5074,e=>{"use strict";var t=e.i(43476),a=e.i(71645);let n=[[[.04,.2],[.1,.12],[.18,.1],[.24,.13],[.29,.12],[.3,.18],[.27,.22],[.26,.28],[.22,.3],[.2,.38],[.17,.44],[.15,.4],[.16,.32],[.12,.3],[.09,.26],[.06,.24]],[[.21,.5],[.27,.48],[.31,.52],[.31,.6],[.29,.66],[.27,.74],[.24,.82],[.22,.8],[.22,.7],[.205,.62],[.2,.55]],[[.45,.16],[.5,.13],[.55,.15],[.57,.19],[.55,.24],[.5,.27],[.47,.25],[.455,.2]],[[.46,.34],[.53,.32],[.58,.36],[.585,.44],[.56,.52],[.53,.6],[.5,.66],[.47,.62],[.46,.52],[.45,.44],[.45,.38]],[[.56,.14],[.64,.1],[.74,.1],[.84,.14],[.9,.2],[.92,.26],[.86,.3],[.8,.3],[.74,.34],[.7,.34],[.66,.3],[.6,.3],[.575,.24],[.565,.18]],[[.81,.66],[.87,.64],[.92,.68],[.92,.74],[.86,.77],[.81,.74],[.8,.7]]],i=[[.115,.3],[.265,.255],[.285,.66],[.475,.185],[.605,.345],[.655,.4],[.745,.5],[.815,.275],[.865,.715]],r=[[0,1],[1,3],[3,4],[4,5],[5,6],[6,7],[7,8],[1,2],[3,7],[0,7]];e.s(["default",0,function({accent:e="#ef4444"}){let o=(0,a.useRef)(null);return(0,a.useEffect)(()=>{let[t,a,d]=function(e){let t=/^#?([0-9a-f]{6})$/i.exec(e.trim());if(!t)return[239,68,68];let a=parseInt(t[1],16);return[a>>16&255,a>>8&255,255&a]}(e),s=e=>`rgba(${t},${a},${d},${e})`,l=`rgb(${t},${a},${d})`,p=o.current,c=p?.parentElement;if(!p||!c)return;let m=p.getContext("2d");if(!m)return;let h=window.matchMedia?.("(prefers-reduced-motion: reduce)").matches,g=0,x=0,v=[],f=0,_=0,b=()=>{let e=c.getBoundingClientRect();g=Math.max(1,e.width),x=Math.max(1,e.height);let t=Math.min(window.devicePixelRatio||1,2);p.width=Math.round(g*t),p.height=Math.round(x*t),p.style.width=g+"px",p.style.height=x+"px",m.setTransform(t,0,0,t,0,0),(()=>{v=[];let e=Math.max(11,Math.min(17,g/70));for(let t=e/2;tt!=l>t&&e<(s-o)*(t-d)/(l-d)+o&&(n=!n)}return n}(e,i,r)){v.push({x:t,y:a});break}}})()},u=(e,t)=>({x:(e.x+t.x)/2,y:(e.y+t.y)/2-.28*Math.hypot(t.x-e.x,t.y-e.y)}),w=(e,t,a,n)=>{let i=1-n;return{x:i*i*e.x+2*i*n*t.x+n*n*a.x,y:i*i*e.y+2*i*n*t.y+n*n*a.y}},y=e=>{for(let e of(m.clearRect(0,0,g,x),m.fillStyle="rgba(120,122,130,0.55)",v))m.beginPath(),m.arc(e.x,e.y,1.15,0,2*Math.PI),m.fill();let t=i.map(([e,t])=>({x:e*g,y:t*x}));for(let[e,a]of(m.save(),m.setLineDash([4,7]),m.lineWidth=1,m.strokeStyle=s(.13),r)){let n=u(t[e],t[a]);m.beginPath(),m.moveTo(t[e].x,t[e].y),m.quadraticCurveTo(n.x,n.y,t[a].x,t[a].y),m.stroke()}m.restore(),m.save();for(let a=0;a{_||(_=e),y((e-_)/1e3),f=requestAnimationFrame(k)};b(),h?y(0):f=requestAnimationFrame(k);let j=new ResizeObserver(()=>{b(),h&&y(0)});return j.observe(c),()=>{cancelAnimationFrame(f),j.disconnect()}},[e]),(0,t.jsx)("canvas",{ref:o,className:"ind__map","aria-hidden":"true"})}])},14224,e=>{"use strict";var t=e.i(43476),a=e.i(71645),n=e.i(89970),i=e.i(83495),r=e.i(5074);n.default.registerPlugin(i.ScrollTrigger);let o=[{icon:(0,t.jsx)("svg",{className:"evnd-icon",viewBox:"0 0 24 24",fill:"none",stroke:"#f59e0b",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,t.jsx)("polygon",{points:"13 2 3 14 12 14 11 22 21 10 12 10 13 2"})}),title:"Battery-Aware Routing",desc:"Battery level, health, and degradation are first-class inputs to route optimization — not afterthoughts."},{icon:(0,t.jsx)("svg",{className:"evnd-icon",viewBox:"0 0 24 24",fill:"none",stroke:"#94a3b8",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,t.jsx)("path",{d:"M18 10h-1.28A6 6 0 0 0 12 5V3M12 5V3M6 10h1.28A6 6 0 0 0 12 5M12 18v2M12 18v2M8 10v6a4 4 0 0 0 8 0v-6"})}),title:"Charging Integration",desc:"Seamlessly integrate charging stops without compromising delivery windows or SLA commitments."},{icon:(0,t.jsx)("svg",{className:"evnd-icon",viewBox:"0 0 24 24",fill:"none",stroke:"#ef4444",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,t.jsx)("path",{d:"m8 3 4 8 5-5 5 15H2L8 3z"})}),title:"Energy-Optimized Paths",desc:"Factor in elevation, speed limits, payload weight, and live weather for maximum range efficiency."},{icon:(0,t.jsx)("svg",{className:"evnd-icon",viewBox:"0 0 24 24",fill:"none",stroke:"#ef4444",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,t.jsx)("path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"})}),title:"Predictable Operations",desc:"EVs become predictable assets, not operational risks. Full visibility from depot to doorstep."}],d=[{value:"100%",label:"ELECTRIC FLEET"},{value:"-40%",label:"COST / MILE"}],s=[{value:99.9,decimals:1,suffix:"%",label:"SLA Compliance"},{value:42,suffix:"%",label:"Distance Saved"},{value:37,suffix:"%",label:"Fewer Vehicles"},{value:45,suffix:"ms",label:"Dispatch Latency"}];function l({value:e,decimals:n=0,suffix:i="",duration:r=1700,className:o}){let[d,s]=(0,a.useState)(0),p=(0,a.useRef)(null),c=(0,a.useRef)(!1);return(0,a.useEffect)(()=>{let t=p.current;if(!t)return;if(window.matchMedia?.("(prefers-reduced-motion: reduce)").matches)return void requestAnimationFrame(()=>s(e));let a=new IntersectionObserver(t=>{for(let n of t)if(n.isIntersecting&&!c.current){c.current=!0;let t=performance.now(),n=e=>1-Math.pow(1-e,3),i=a=>{let o=Math.min(1,(a-t)/r);s(e*n(o)),o<1?requestAnimationFrame(i):s(e)};requestAnimationFrame(i),a.disconnect()}},{threshold:.2});return a.observe(t),()=>a.disconnect()},[e,r]),(0,t.jsxs)("b",{ref:p,className:o,children:[d.toFixed(n),i]})}function p({accent:e}){return(0,t.jsx)("div",{className:"evnd__map","aria-hidden":"true",children:(0,t.jsx)(r.default,{accent:e})})}function c({metrics:e,features:a,heading:n,theme:i}){let r=i?{"--ca":i.accent,"--ca2":i.accent2,"--cg":i.glow}:void 0;return(0,t.jsxs)("div",{className:"evnd__dash",style:r,children:[n&&(0,t.jsxs)("div",{className:"evnd__dash-head",children:[(0,t.jsxs)("span",{className:"evnd__dash-live",children:[(0,t.jsx)("span",{className:"evnd__dash-livedot"}),n]}),(0,t.jsx)("span",{className:"evnd__dash-sys",children:"AI ENGINE"})]}),(0,t.jsx)("div",{className:"evnd__dash-kpis",children:e.map(e=>(0,t.jsxs)("div",{className:"evnd__kpi",children:[(0,t.jsx)(l,{value:e.value,decimals:e.decimals,suffix:e.suffix,className:"evnd__kpi-val"}),(0,t.jsx)("span",{className:"evnd__kpi-label",children:e.label})]},e.label))}),(0,t.jsx)("div",{className:"evnd__dash-feats",children:a.map(e=>(0,t.jsxs)("div",{className:"evnd__dfeat",children:[(0,t.jsx)("span",{className:"evnd__dfeat-ico","aria-hidden":"true",children:e.icon}),(0,t.jsxs)("div",{className:"evnd__dfeat-body",children:[(0,t.jsx)("span",{className:"evnd__dfeat-title",children:e.title}),(0,t.jsx)("p",{className:"evnd__dfeat-desc",children:e.desc})]})]},e.title))})]})}e.s(["default",0,function({bannerImage:e="/images/bg-header-5.webp",cardNumber:r="",cardTitle:m="EV Logistics",cardSubtitle:h="Cleaner miles, lower costs",eyebrow:g="/ EV-Native Design /",titleLead:x="BUILT FOR ELECTRIC. ",titleAccent:v="NOT ADAPTED.",features:f=o,image:_="/images/premium-ev-van.webp",imageAlt:b="DoorMile electric delivery van",badges:u=d,stats:w=s,gapTop:y=!1,gapBottom:k=!1,ariaLabel:j,mediaSlot:N,metrics:z,cardsHeading:T,cardsTheme:I}){let M=(0,a.useRef)(null),P=!!z&&z.length>0,E=P&&I?{"--ca":I.accent,"--ca2":I.accent2,"--cg":I.glow}:void 0;(0,a.useEffect)(()=>{let e=M.current;if(!e)return;let t=i.ScrollTrigger.create({trigger:e,start:"top bottom",end:"bottom top",scrub:!0,onUpdate:()=>{if(window.innerWidth>=1021){let t=window.scrollY,a=e.getBoundingClientRect().top+t;n.default.set(e,{backgroundPosition:`center ${.3*(t-a)}px`})}else n.default.set(e,{backgroundPosition:""})}});return()=>t?.kill()},[]);let S="elementor-element elementor-element-bbc6760 e-con-full e-flex cut-corner-no sticky-container-off e-con e-parent"+(P?" evnd-workflow-shell":"")+(y?" evnd-gap-top":"")+(k?" evnd-gap-bottom":"");return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("style",{dangerouslySetInnerHTML:{__html:` - /* ============================================================ - EV-Native Design — redesigned section - bg #080808 \xb7 red #ef4444 \xb7 Manrope - ============================================================ */ - - .evnd, .evnd * { font-family: "Manrope", Sans-serif !important; } - - /* External gap helpers — keep stacked workflow sections on one rhythm - (Desktop 40 \xb7 Tablet 32 \xb7 Mobile 24). Single-sided per boundary. */ - .evnd-gap-top { margin-top: 40px !important; } - .evnd-gap-bottom { margin-bottom: 40px !important; } - - .evnd { - position: relative; - isolation: isolate; - overflow: hidden; - background: #080808; - /* flat top so it connects seamlessly to the banner above; rounded - bottom only, and no top margin so there is no white gap */ - border-radius: 0 0 clamp(16px, 2vw, 28px) clamp(16px, 2vw, 28px); - margin: 0 0 clamp(28px, 5vw, 64px); - padding: 64px 48px clamp(48px, 6vw, 80px); - } - /* ---- Tighten the space below the KPI bar (WF1/WF2 only) ---- - The base section reserves a tall padding-bottom (up to 80px) plus a - margin-bottom (up to 64px) that renders as a #0d0d0d band inside the - rounded container — together ~144px of empty space after the KPI bar. - The workflows end at the bar, so trim both: the bar now sits close to - the section's bottom edge, and the outer .evnd-gap-bottom (40px) still - provides clean separation to the next section. Scoped to .evnd--cards - (specificity beats the base + responsive .evnd rules at every - breakpoint) so the homepage EV section keeps its original spacing. */ - .evnd.evnd--cards { - padding-bottom: clamp(28px, 3vw, 40px); - margin-bottom: clamp(8px, 1vw, 14px); - } - /* ---- Tighten the banner → black-section transition (≥768px) ---- - From 768px up the floating title card overlaps with a FIXED budget - (margin-top:-298px into the banner, -70px into this section). The - workflow cards carry longer subtitles than the homepage card, so they - run taller than that budget and the overflow shows as a dark #0d0d0d - spacer between the hero image and this black section. Pull the section - up under the banner to swallow that strip — the card (z-index 2) stays - on top, so the overlapping card design is preserved. The flat top tucks - cleanly behind the banner. Not applied ≤767px, where the card sits - inline (no overlap) and no spacer exists — so mobile is unchanged. */ - @media (min-width: 768px) { - .evnd { margin-top: -60px; } - } - /* ---- Floating card sizing: content-driven, not container-driven ---- - The exported Elementor card reserves a lot of vertical space that the - short title + subtitle don't fill: the red text block (3b61435) carried - 64px/73px top/bottom padding and the empty white footer strip (5aea22e) - a 70px min-height. Trim both so the card height tracks the text, while - keeping the two-tone red/white design, the 25px corner radius, and the - typography untouched. These rules live in the (body) inline

    404

    This page could not be found.

    \ No newline at end of file diff --git a/build/_not-found.txt b/build/_not-found.txt deleted file mode 100644 index 1fd59ca..0000000 --- a/build/_not-found.txt +++ /dev/null @@ -1,27 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -c:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -d:"$Sreact.suspense" -10:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -12:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -14:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","_not-found"],"q":"","i":false,"f":[[["",{"children":["/_not-found",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:1:props:children:2:props:children:1:props:children:1:props:children:props:children:1:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:1:props:children:2:props:children:1:props:children:1:props:children:props:children:1:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:1:props:children:2:props:children:1:props:children:1:props:children:props:children:1:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:1:props:children:2:props:children:1:props:children:1:props:children:props:children:1:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],null,["$","$Lc",null,{"children":["$","$d",null,{"name":"Next.MetadataOutlet","children":"$@e"}]}]]}],{},null,false,null]},null,false,"$@f"]},null,false,null],["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$L10",null,{"children":"$L11"}],["$","div",null,{"hidden":true,"children":["$","$L12",null,{"children":["$","$d",null,{"name":"Next.Metadata","children":"$L13"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$14",["$L15"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -16:[] -f:"$W16" -15:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] -11:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -17:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -e:null -13:[["$","title","0",{"children":"Doormile — Delivering Trust. Beyond Boundaries"}],["$","meta","1",{"name":"description","content":"Doormile powers last-mile logistics with MileTruth™ AI, providing connected miles, SLA protection, and carrier management."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","4",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","5",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","6",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L17","7",{}]] diff --git a/build/_not-found/__next._full.txt b/build/_not-found/__next._full.txt deleted file mode 100644 index 1fd59ca..0000000 --- a/build/_not-found/__next._full.txt +++ /dev/null @@ -1,27 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -c:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -d:"$Sreact.suspense" -10:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -12:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -14:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","_not-found"],"q":"","i":false,"f":[[["",{"children":["/_not-found",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:1:props:children:2:props:children:1:props:children:1:props:children:props:children:1:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:1:props:children:2:props:children:1:props:children:1:props:children:props:children:1:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:1:props:children:2:props:children:1:props:children:1:props:children:props:children:1:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:1:props:children:2:props:children:1:props:children:1:props:children:props:children:1:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],null,["$","$Lc",null,{"children":["$","$d",null,{"name":"Next.MetadataOutlet","children":"$@e"}]}]]}],{},null,false,null]},null,false,"$@f"]},null,false,null],["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$L10",null,{"children":"$L11"}],["$","div",null,{"hidden":true,"children":["$","$L12",null,{"children":["$","$d",null,{"name":"Next.Metadata","children":"$L13"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$14",["$L15"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -16:[] -f:"$W16" -15:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] -11:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -17:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -e:null -13:[["$","title","0",{"children":"Doormile — Delivering Trust. Beyond Boundaries"}],["$","meta","1",{"name":"description","content":"Doormile powers last-mile logistics with MileTruth™ AI, providing connected miles, SLA protection, and carrier management."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","4",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","5",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","6",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L17","7",{}]] diff --git a/build/_not-found/__next._head.txt b/build/_not-found/__next._head.txt deleted file mode 100644 index c09c4ed..0000000 --- a/build/_not-found/__next._head.txt +++ /dev/null @@ -1,6 +0,0 @@ -1:"$Sreact.fragment" -2:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -3:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -4:"$Sreact.suspense" -5:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -0:{"rsc":["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Doormile — Delivering Trust. Beyond Boundaries"}],["$","meta","1",{"name":"description","content":"Doormile powers last-mile logistics with MileTruth™ AI, providing connected miles, SLA protection, and carrier management."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","4",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","5",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","6",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L5","7",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/_not-found/__next._index.txt b/build/_not-found/__next._index.txt deleted file mode 100644 index d0b3355..0000000 --- a/build/_not-found/__next._index.txt +++ /dev/null @@ -1,15 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","template":["$","$La",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/_not-found/__next._not-found.__PAGE__.txt b/build/_not-found/__next._not-found.__PAGE__.txt deleted file mode 100644 index 3aad019..0000000 --- a/build/_not-found/__next._not-found.__PAGE__.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -3:"$Sreact.suspense" -0:{"rsc":["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],null,["$","$L2",null,{"children":["$","$3",null,{"name":"Next.MetadataOutlet","children":"$@4"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} -4:null diff --git a/build/_not-found/__next._not-found.txt b/build/_not-found/__next._not-found.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/_not-found/__next._not-found.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/_not-found/__next._tree.txt b/build/_not-found/__next._tree.txt deleted file mode 100644 index 9976e64..0000000 --- a/build/_not-found/__next._tree.txt +++ /dev/null @@ -1,4 +0,0 @@ -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"/_not-found","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/about-us.html b/build/about-us.html deleted file mode 100644 index 51184c6..0000000 --- a/build/about-us.html +++ /dev/null @@ -1,2042 +0,0 @@ -About Us – Doormile

    Doormile

    Doormile logo
    Address
    Hyderabad

    5th Floor, Vision Ultima,
    Street No.3, Jayabheri Enclave,
    Gachibowli, Hyderabad,
    Telangana 500032.

    Coimbatore

    Mayflower Valencia,
    Near Nava India Bus Stop,
    Avinashi Road,
    Udayampalayam,
    Tamil Nadu 641037.

    Bengaluru

    C612, 6th Floor,
    Trifecta Starlight,
    ITPL Road,
    Garudacharapalya,
    Mahadevapura,
    Bangalore 560048,
    Karnataka, India.

    Contact Us

    Tel : +91 86886 97941

    Email

    care@doormile.com

    The Operators Building
    Doormile

    / Doormile Approach /


    The Doormile Way

    Smarter, Faster, Connected Logistics

    We connect first mile and last mile into one seamless system, reducing delays and improving efficiency. With real-time tracking and digital workflows,
    every delivery is faster, reliable, and fully transparent.

    Seamless logistics powered by real-time tracking, digital processes, and reliable delivery execution.

    End-to-End Protection

    End-to-end visibility ensures every shipment stays secure and on schedule.

    Proactive delay prevention

    Real-time monitoring helps prevent delays before they impact deliveries.

    Single owner, single promise

    One unified system manages the entire delivery process seamlessly.

    Dynamic AI-driven adjustments

    AI-powered routing adapts instantly to improve speed and efficiency.

    / Built for Electric Vehicles /
    Logistics Built for EV Vehicles
    EV Logistics

    Operational Visibility

    Real-time tracking and centralized control provide complete visibility across every shipment, vehicle, and delivery milestone.

    Intelligent Routing

    AI-powered route optimization reduces travel time, improves delivery accuracy, and maximizes fleet utilization.

    EV-First Logistics

    Purpose-built workflows for electric fleets improve battery efficiency, charging management, and sustainable operations.

    Scalable Network

    Flexible logistics infrastructure supports growth across cities, regions, and high-volume delivery operations without disruption.

    / DoorMile wins/

    WHERE DOORMILE WINS

    A side-by-side technical capabilities comparison showing how operational fleet ownership and dynamic AI planning disrupt basic aggregators.

    CapabilityDoormileAggregatorsLocal CouriersSoftware Platforms
    Owned fleet control✓ YesNoYesNo
    Dynamic routing & dispatch✓ AdvancedBasicNoAdvanced
    EV-aware planning✓ YesNoNoNo
    Documentation & proof trail✓ YesPartialNoYes
    Real-time tracking✓ YesYesNoYes
    Verified handling✓ YesPartialNoNo
    Hyperlocal learning✓ YesNoNoNo
    SLA accountability✓ HighLowMediumLow
    VISION / 2030

    The Intelligence Grid Behind Every Urban Mile

    From Hyderabad EV pilot to nationwide AI logistics intelligence by 2030

    ROADMAP TO 2030
    100% COMPLETE →
    2026
    Pilot Phase
    Pilot

    Launch operations in Hyderabad with dedicated EV hubs and MileTruth AI v1.0.

    100+ orders/day
    1 city
    10+ women partners
    2027
    Multi-City
    Scale

    Expand to Bengaluru and Chennai, securing key B2B enterprise traction.

    500+ orders/day
    3 cities
    50+ EVs
    2028
    Platform
    Expansion

    Scale to 5+ cities. Strengthen regional operations.

    5000+ orders/day
    5+ cities
    100+ women partners
    2030
    Vision State
    AI Pulse Layer

    Nationwide AI logistics grid reaching 15+ cities, empowering female micro-entrepreneurs.

    50,000+ orders/day
    Rs50+ cities
    2,000+ women partners
    /Team /

    Meet crew

    Ratan Kumar
    Ratan Kumar
    COO & Operational Specialist
    Aravinth
    Aravinth
    CFO & Finance Specialist
    Fazul Ilahi
    Fazul Ilahi
    CTO & Technology Specialist
    Suriya Kumar
    Suriya Kumar
    Engineering Head & AI Specialist

    Ready to Start
    Your Journey?

    Join our Women Entrepreneurship program and become part of
    India's fastest-growing logistics network.

    \ No newline at end of file diff --git a/build/about-us.txt b/build/about-us.txt deleted file mode 100644 index 79e2396..0000000 --- a/build/about-us.txt +++ /dev/null @@ -1,173 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -19:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/chunks/0v290txaarww5.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -:HL["/images/about-bg.webp","image"] -0:{"P":null,"c":["","about-us"],"q":"","i":false,"f":[[["",{"children":["about-us",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","div",null,{"id":"about","className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","div",null,{"data-elementor-type":"wp-page","data-elementor-id":"86","className":"elementor elementor-86 elementor-59","children":[[["$","link",null,{"rel":"preload","as":"image","href":"/images/about-bg.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"\n .about-us-hero-content {\n width: 100% !important;\n text-align: center !important;\n color: #fff !important;\n padding: 0 15px !important;\n z-index: 2;\n display: flex !important;\n flex-direction: column !important;\n justify-content: center !important;\n align-items: center !important;\n height: 100% !important;\n }\n\n .about-us-hero-title {\n margin: 0 !important;\n font-family: \"Manrope\", Sans-serif !important;\n font-size: clamp(34px, 5.5vw, 68px) !important;\n font-weight: 850 !important;\n line-height: 1.1 !important;\n text-transform: uppercase !important;\n letter-spacing: -1.5px !important;\n color: #ffffff !important;\n text-align: center !important;\n }\n "}}],"$Lc"],"$Ld","$Le","$Lf","$L10","$L11","$L12"]}]}]}]}],["$L13","$L14","$L15"],"$L16"]}],{},null,false,null]},null,false,"$@17"]},null,false,null],"$L18",false]],"m":"$undefined","G":["$19",["$L1a"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -1b:I[24911,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0dt55bg8oa_k~.js","/_next/static/chunks/0nzz4x75f.ixz.js"],"default"] -1c:I[61867,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0dt55bg8oa_k~.js","/_next/static/chunks/0nzz4x75f.ixz.js"],"default"] -1d:I[47580,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0dt55bg8oa_k~.js","/_next/static/chunks/0nzz4x75f.ixz.js"],"default"] -1e:I[2012,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0dt55bg8oa_k~.js","/_next/static/chunks/0nzz4x75f.ixz.js"],"default"] -21:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0dt55bg8oa_k~.js","/_next/static/chunks/0nzz4x75f.ixz.js"],""] -22:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -23:"$Sreact.suspense" -26:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -28:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -c:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"style":{"backgroundImage":"url('/images/about-bg.webp')","--hero-overlay":"linear-gradient(to bottom, rgba(0, 0, 0, 0.85) 0%, rgba(0, 0, 0, 0.92) 60%, rgba(0, 0, 0, 0.98) 100%)"},"className":"custom-standard-hero-card","children":["$","div",null,{"className":"about-us-hero-content","children":["$","h3",null,{"className":"about-us-hero-title","children":["The Operators Building ",["$","br",null,{}]," ",["$","span",null,{"style":{"color":"#C01227"},"children":"Doormile"}]]}]}]}]}] -d:["$","$L1b",null,{}] -e:["$","$L1c",null,{}] -f:["$","$L1d",null,{}] -10:["$","$L1e",null,{}] -1f:T102e, - /* Box this section to the same inset width the sibling sections use. - The container's "display: var(--display)" resolves to the invalid - fallback (inline) here, so max-width was being ignored and the section - spanned edge-to-edge (heading clipped at the viewport edge). Force the - flex display back on and pin the inner to the shared 1480px inset. */ - .elementor-86 .elementor-element-c2c601a { - display: flex; - } - .elementor-86 .elementor-element-c2c601a > .e-con-inner { - display: flex; - flex-direction: column; - max-width: 1480px; - width: 100%; - margin-left: auto; - margin-right: auto; - padding-left: clamp(20px, 4vw, 50px) !important; - padding-right: clamp(20px, 4vw, 50px) !important; - box-sizing: border-box; - } - - /* Breathing room above and below the "Meet our the best crew" heading. */ - .elementor-86 .elementor-element-c46350e > .elementor-widget-container { - margin-top: 40px; - margin-bottom: 56px; - } - - /* Team photos: grayscale by default, full colour on hover (matches design) */ - .team-listing-wrapper.team-grid-listing .team-item .post-media img { - filter: grayscale(100%); - transition: filter 0.45s ease; - } - .team-listing-wrapper.team-grid-listing .team-item:hover .post-media img { - filter: grayscale(0%); - } - - /* Grid: four columns that wrap, with tightened row/column gaps. */ - .team-listing-wrapper.team-grid-listing { - display: flex; - flex-wrap: wrap; - margin: 0 -16px -40px; - } - .team-listing-wrapper.team-grid-listing .team-item-wrapper { - width: 25%; - padding: 0 16px; - margin-bottom: 40px; - box-sizing: border-box; - } - @media (max-width: 1024px) { - .team-listing-wrapper.team-grid-listing .team-item-wrapper { width: 50%; } - } - @media (max-width: 767px) { - .elementor-86 .elementor-element-c2c601a > .e-con-inner { - padding-left: 0 !important; - padding-right: 0 !important; - padding-top: 32px !important; - padding-bottom: 32px !important; - } - .elementor-86 .elementor-element-c46350e > .elementor-widget-container { - margin-top: 24px !important; - margin-bottom: 24px !important; - } - .team-listing-wrapper.team-grid-listing { - margin: 0 0 -28px; - } - .team-listing-wrapper.team-grid-listing .team-item-wrapper { - width: 100%; - padding: 0; - margin-bottom: 28px; - } - } - @media (max-width: 480px) { - .team-listing-wrapper.team-grid-listing { - margin: 0 0 -28px; - } - .team-listing-wrapper.team-grid-listing .team-item-wrapper { - width: 100%; - padding: 0; - margin-bottom: 28px; - } - } - - /* Card: photo on top, name/position at the bottom (down to image). */ - .team-listing-wrapper.team-grid-listing .team-item { - display: flex; - flex-direction: column; - align-items: flex-start; - gap: 16px; - width: 100%; - } - /* Compact portrait photo. Extra .team-item in the selector raises the - specificity so it beats the cached vendor rule (width: 45.65%). */ - .team-listing-wrapper.team-grid-listing .team-item .team-item-media { - width: 100%; - margin: 0; - } - .team-listing-wrapper.team-grid-listing .team-item .post-media { - height: 0; - padding-top: 120%; - border-radius: 16px; - overflow: hidden; - } - .team-listing-wrapper.team-grid-listing .team-item .post-media img { - position: absolute; - inset: 0; - width: 100%; - height: 100%; - object-fit: cover; - } - .team-listing-wrapper.team-grid-listing .team-item .team-item-content { - width: 100%; - margin: 0; - } - .team-listing-wrapper.team-grid-listing .team-item .post-title .team-member-name { - color: inherit; - text-decoration: none; - } - 11:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$1f"}}],"$L20"] -12:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"\n @media (max-width: 768px) {\n .we-container {\n margin-top: 40px !important;\n margin-bottom: 40px !important;\n padding: 0 10px !important;\n }\n .we-cta {\n padding: 48px 20px !important;\n border-radius: 22px !important;\n }\n .we-cta-title {\n font-size: clamp(28px, 6vw, 38px) !important;\n line-height: 1.25 !important;\n margin-bottom: 16px !important;\n }\n .we-cta-sub {\n font-size: 15px !important;\n line-height: 1.5 !important;\n margin-bottom: 24px !important;\n }\n }\n "}}],["$","div",null,{"className":"we-container","children":["$","div",null,{"className":"we-cta reveal","children":["$","div",null,{"className":"we-cta-inner","children":[["$","h2",null,{"className":"we-cta-title","children":["Ready to Start",["$","br",null,{}],["$","em",null,{"children":"Your Journey?"}]]}],["$","p",null,{"className":"we-cta-sub","children":["Join our Women Entrepreneurship program and become part of ",["$","br",null,{}],"India's fastest-growing logistics network."]}],["$","div",null,{"className":"we-cta-btns","children":["$","$L21",null,{"href":"/contact","className":"btn-we-primary","style":{"textDecoration":"none"},"children":["Apply Now",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","style":{"marginLeft":"8px","display":"inline-block","verticalAlign":"middle"},"children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]}]]}]}]}]] -13:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0v290txaarww5.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] -14:["$","script","script-0",{"src":"/_next/static/chunks/0dt55bg8oa_k~.js","async":true,"nonce":"$undefined"}] -15:["$","script","script-1",{"src":"/_next/static/chunks/0nzz4x75f.ixz.js","async":true,"nonce":"$undefined"}] -16:["$","$L22",null,{"children":["$","$23",null,{"name":"Next.MetadataOutlet","children":"$@24"}]}] -25:[] -17:"$W25" -18:["$","$1","h",{"children":[null,["$","$L26",null,{"children":"$L27"}],["$","div",null,{"hidden":true,"children":["$","$L28",null,{"children":["$","$23",null,{"name":"Next.Metadata","children":"$L29"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] -1a:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] -2a:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0dt55bg8oa_k~.js","/_next/static/chunks/0nzz4x75f.ixz.js"],"Image"] -20:["$","div",null,{"className":"elementor-element elementor-element-c2c601a e-flex e-con-boxed cut-corner-no sticky-container-off e-con e-parent","data-id":"c2c601a","data-element_type":"container","data-e-type":"container","children":["$","div",null,{"className":"e-con-inner","children":["$","div",null,{"className":"elementor-element elementor-element-3306a27 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"3306a27","data-element_type":"container","data-e-type":"container","children":[["$","div",null,{"className":"elementor-element elementor-element-7afb238 elementor-widget elementor-widget-logico_heading","data-id":"7afb238","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","div",null,{"className":"logico-title","children":"/Team /"}]}]}],["$","div",null,{"style":{"alignSelf":"flex-start","width":"100%"},"className":"elementor-element elementor-element-c46350e elementor-widget__width-initial elementor-widget elementor-widget-logico_heading","data-id":"c46350e","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","h3",null,{"className":"logico-title","style":{"textAlign":"left"},"children":"Meet crew"}]}]}],["$","div",null,{"className":"elementor-element elementor-element-ac909e5 elementor-widget elementor-widget-logico_team_listing","data-id":"ac909e5","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_team_listing.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","div",null,{"className":"logico-team-listing-widget","children":["$","div",null,{"className":"archive-listing","children":["$","div",null,{"className":"archive-listing-wrapper team-listing-wrapper team-grid-listing columns-4","children":[["$","div","0",{"className":"team-item-wrapper post-2866 team type-team status-publish has-post-thumbnail hentry","children":["$","div",null,{"className":"team-item","children":[["$","div",null,{"className":"team-item-media","children":["$","div",null,{"className":"post-media","children":["$","$L2a",null,{"src":"/images/Investor.webp","alt":"Ratan Kumar","width":300,"height":360,"style":{"objectFit":"cover","width":"100%","height":"100%"}}]}]}],["$","div",null,{"className":"team-item-content","children":[["$","div",null,{"className":"post-title","children":["$","span",null,{"className":"team-member-name","children":"Ratan Kumar"}]}],["$","div",null,{"className":"team-item-position","dangerouslySetInnerHTML":{"__html":"COO & Operational Specialist"}}],["$","div",null,{"className":"team-item-socials","children":["$","ul",null,{"className":"team-socials wrapper-socials","children":["$","li",null,{"children":["$","a",null,{"href":"https://www.linkedin.com/","target":"_blank","rel":"noreferrer","className":"fab fa-linkedin-in"}]}]}]}]]}]]}]}],["$","div","1",{"className":"team-item-wrapper post-2866 team type-team status-publish has-post-thumbnail hentry","children":["$","div",null,{"className":"team-item","children":[["$","div",null,{"className":"team-item-media","children":["$","div",null,{"className":"post-media","children":["$","$L2a",null,{"src":"/images/Aravinth.webp","alt":"Aravinth","width":300,"height":360,"style":{"objectFit":"cover","width":"100%","height":"100%"}}]}]}],["$","div",null,{"className":"team-item-content","children":[["$","div",null,{"className":"post-title","children":["$","span",null,{"className":"team-member-name","children":"Aravinth"}]}],["$","div",null,{"className":"team-item-position","dangerouslySetInnerHTML":{"__html":"CFO & Finance Specialist"}}],["$","div",null,{"className":"team-item-socials","children":["$","ul",null,{"className":"team-socials wrapper-socials","children":["$","li",null,{"children":["$","a",null,{"href":"https://www.linkedin.com/","target":"_blank","rel":"noreferrer","className":"fab fa-linkedin-in"}]}]}]}]]}]]}]}],["$","div","2",{"className":"team-item-wrapper post-2866 team type-team status-publish has-post-thumbnail hentry","children":["$","div",null,{"className":"team-item","children":[["$","div",null,{"className":"team-item-media","children":["$","div",null,{"className":"post-media","children":"$L2b"}]}],"$L2c"]}]}],"$L2d"]}]}]}]}]}]]}]}]}] -2b:["$","$L2a",null,{"src":"/images/Fazul.webp","alt":"Fazul Ilahi","width":300,"height":360,"style":{"objectFit":"cover","width":"100%","height":"100%"}}] -2c:["$","div",null,{"className":"team-item-content","children":[["$","div",null,{"className":"post-title","children":["$","span",null,{"className":"team-member-name","children":"Fazul Ilahi"}]}],["$","div",null,{"className":"team-item-position","dangerouslySetInnerHTML":{"__html":"CTO & Technology Specialist"}}],["$","div",null,{"className":"team-item-socials","children":["$","ul",null,{"className":"team-socials wrapper-socials","children":["$","li",null,{"children":["$","a",null,{"href":"https://www.linkedin.com/","target":"_blank","rel":"noreferrer","className":"fab fa-linkedin-in"}]}]}]}]]}] -2d:["$","div","3",{"className":"team-item-wrapper post-2866 team type-team status-publish has-post-thumbnail hentry","children":["$","div",null,{"className":"team-item","children":[["$","div",null,{"className":"team-item-media","children":["$","div",null,{"className":"post-media","children":["$","$L2a",null,{"src":"/images/Suriya.webp","alt":"Suriya Kumar","width":300,"height":360,"style":{"objectFit":"cover","width":"100%","height":"100%"}}]}]}],["$","div",null,{"className":"team-item-content","children":[["$","div",null,{"className":"post-title","children":["$","span",null,{"className":"team-member-name","children":"Suriya Kumar"}]}],["$","div",null,{"className":"team-item-position","dangerouslySetInnerHTML":{"__html":"Engineering Head & AI Specialist"}}],["$","div",null,{"className":"team-item-socials","children":["$","ul",null,{"className":"team-socials wrapper-socials","children":["$","li",null,{"children":["$","a",null,{"href":"https://www.linkedin.com/","target":"_blank","rel":"noreferrer","className":"fab fa-linkedin-in"}]}]}]}]]}]]}]}] -27:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -2e:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -24:null -29:[["$","title","0",{"children":"About Us – Doormile"}],["$","meta","1",{"name":"description","content":"Meet the best crew and operators behind Doormile. Explore our roadmap, competitive edge, and operational excellence in EV and last-mile logistics."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","4",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","5",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","6",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L2e","7",{}]] diff --git a/build/about-us/__next._full.txt b/build/about-us/__next._full.txt deleted file mode 100644 index 79e2396..0000000 --- a/build/about-us/__next._full.txt +++ /dev/null @@ -1,173 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -19:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/chunks/0v290txaarww5.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -:HL["/images/about-bg.webp","image"] -0:{"P":null,"c":["","about-us"],"q":"","i":false,"f":[[["",{"children":["about-us",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","div",null,{"id":"about","className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","div",null,{"data-elementor-type":"wp-page","data-elementor-id":"86","className":"elementor elementor-86 elementor-59","children":[[["$","link",null,{"rel":"preload","as":"image","href":"/images/about-bg.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"\n .about-us-hero-content {\n width: 100% !important;\n text-align: center !important;\n color: #fff !important;\n padding: 0 15px !important;\n z-index: 2;\n display: flex !important;\n flex-direction: column !important;\n justify-content: center !important;\n align-items: center !important;\n height: 100% !important;\n }\n\n .about-us-hero-title {\n margin: 0 !important;\n font-family: \"Manrope\", Sans-serif !important;\n font-size: clamp(34px, 5.5vw, 68px) !important;\n font-weight: 850 !important;\n line-height: 1.1 !important;\n text-transform: uppercase !important;\n letter-spacing: -1.5px !important;\n color: #ffffff !important;\n text-align: center !important;\n }\n "}}],"$Lc"],"$Ld","$Le","$Lf","$L10","$L11","$L12"]}]}]}]}],["$L13","$L14","$L15"],"$L16"]}],{},null,false,null]},null,false,"$@17"]},null,false,null],"$L18",false]],"m":"$undefined","G":["$19",["$L1a"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -1b:I[24911,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0dt55bg8oa_k~.js","/_next/static/chunks/0nzz4x75f.ixz.js"],"default"] -1c:I[61867,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0dt55bg8oa_k~.js","/_next/static/chunks/0nzz4x75f.ixz.js"],"default"] -1d:I[47580,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0dt55bg8oa_k~.js","/_next/static/chunks/0nzz4x75f.ixz.js"],"default"] -1e:I[2012,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0dt55bg8oa_k~.js","/_next/static/chunks/0nzz4x75f.ixz.js"],"default"] -21:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0dt55bg8oa_k~.js","/_next/static/chunks/0nzz4x75f.ixz.js"],""] -22:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -23:"$Sreact.suspense" -26:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -28:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -c:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"style":{"backgroundImage":"url('/images/about-bg.webp')","--hero-overlay":"linear-gradient(to bottom, rgba(0, 0, 0, 0.85) 0%, rgba(0, 0, 0, 0.92) 60%, rgba(0, 0, 0, 0.98) 100%)"},"className":"custom-standard-hero-card","children":["$","div",null,{"className":"about-us-hero-content","children":["$","h3",null,{"className":"about-us-hero-title","children":["The Operators Building ",["$","br",null,{}]," ",["$","span",null,{"style":{"color":"#C01227"},"children":"Doormile"}]]}]}]}]}] -d:["$","$L1b",null,{}] -e:["$","$L1c",null,{}] -f:["$","$L1d",null,{}] -10:["$","$L1e",null,{}] -1f:T102e, - /* Box this section to the same inset width the sibling sections use. - The container's "display: var(--display)" resolves to the invalid - fallback (inline) here, so max-width was being ignored and the section - spanned edge-to-edge (heading clipped at the viewport edge). Force the - flex display back on and pin the inner to the shared 1480px inset. */ - .elementor-86 .elementor-element-c2c601a { - display: flex; - } - .elementor-86 .elementor-element-c2c601a > .e-con-inner { - display: flex; - flex-direction: column; - max-width: 1480px; - width: 100%; - margin-left: auto; - margin-right: auto; - padding-left: clamp(20px, 4vw, 50px) !important; - padding-right: clamp(20px, 4vw, 50px) !important; - box-sizing: border-box; - } - - /* Breathing room above and below the "Meet our the best crew" heading. */ - .elementor-86 .elementor-element-c46350e > .elementor-widget-container { - margin-top: 40px; - margin-bottom: 56px; - } - - /* Team photos: grayscale by default, full colour on hover (matches design) */ - .team-listing-wrapper.team-grid-listing .team-item .post-media img { - filter: grayscale(100%); - transition: filter 0.45s ease; - } - .team-listing-wrapper.team-grid-listing .team-item:hover .post-media img { - filter: grayscale(0%); - } - - /* Grid: four columns that wrap, with tightened row/column gaps. */ - .team-listing-wrapper.team-grid-listing { - display: flex; - flex-wrap: wrap; - margin: 0 -16px -40px; - } - .team-listing-wrapper.team-grid-listing .team-item-wrapper { - width: 25%; - padding: 0 16px; - margin-bottom: 40px; - box-sizing: border-box; - } - @media (max-width: 1024px) { - .team-listing-wrapper.team-grid-listing .team-item-wrapper { width: 50%; } - } - @media (max-width: 767px) { - .elementor-86 .elementor-element-c2c601a > .e-con-inner { - padding-left: 0 !important; - padding-right: 0 !important; - padding-top: 32px !important; - padding-bottom: 32px !important; - } - .elementor-86 .elementor-element-c46350e > .elementor-widget-container { - margin-top: 24px !important; - margin-bottom: 24px !important; - } - .team-listing-wrapper.team-grid-listing { - margin: 0 0 -28px; - } - .team-listing-wrapper.team-grid-listing .team-item-wrapper { - width: 100%; - padding: 0; - margin-bottom: 28px; - } - } - @media (max-width: 480px) { - .team-listing-wrapper.team-grid-listing { - margin: 0 0 -28px; - } - .team-listing-wrapper.team-grid-listing .team-item-wrapper { - width: 100%; - padding: 0; - margin-bottom: 28px; - } - } - - /* Card: photo on top, name/position at the bottom (down to image). */ - .team-listing-wrapper.team-grid-listing .team-item { - display: flex; - flex-direction: column; - align-items: flex-start; - gap: 16px; - width: 100%; - } - /* Compact portrait photo. Extra .team-item in the selector raises the - specificity so it beats the cached vendor rule (width: 45.65%). */ - .team-listing-wrapper.team-grid-listing .team-item .team-item-media { - width: 100%; - margin: 0; - } - .team-listing-wrapper.team-grid-listing .team-item .post-media { - height: 0; - padding-top: 120%; - border-radius: 16px; - overflow: hidden; - } - .team-listing-wrapper.team-grid-listing .team-item .post-media img { - position: absolute; - inset: 0; - width: 100%; - height: 100%; - object-fit: cover; - } - .team-listing-wrapper.team-grid-listing .team-item .team-item-content { - width: 100%; - margin: 0; - } - .team-listing-wrapper.team-grid-listing .team-item .post-title .team-member-name { - color: inherit; - text-decoration: none; - } - 11:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$1f"}}],"$L20"] -12:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"\n @media (max-width: 768px) {\n .we-container {\n margin-top: 40px !important;\n margin-bottom: 40px !important;\n padding: 0 10px !important;\n }\n .we-cta {\n padding: 48px 20px !important;\n border-radius: 22px !important;\n }\n .we-cta-title {\n font-size: clamp(28px, 6vw, 38px) !important;\n line-height: 1.25 !important;\n margin-bottom: 16px !important;\n }\n .we-cta-sub {\n font-size: 15px !important;\n line-height: 1.5 !important;\n margin-bottom: 24px !important;\n }\n }\n "}}],["$","div",null,{"className":"we-container","children":["$","div",null,{"className":"we-cta reveal","children":["$","div",null,{"className":"we-cta-inner","children":[["$","h2",null,{"className":"we-cta-title","children":["Ready to Start",["$","br",null,{}],["$","em",null,{"children":"Your Journey?"}]]}],["$","p",null,{"className":"we-cta-sub","children":["Join our Women Entrepreneurship program and become part of ",["$","br",null,{}],"India's fastest-growing logistics network."]}],["$","div",null,{"className":"we-cta-btns","children":["$","$L21",null,{"href":"/contact","className":"btn-we-primary","style":{"textDecoration":"none"},"children":["Apply Now",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","style":{"marginLeft":"8px","display":"inline-block","verticalAlign":"middle"},"children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]}]]}]}]}]] -13:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0v290txaarww5.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] -14:["$","script","script-0",{"src":"/_next/static/chunks/0dt55bg8oa_k~.js","async":true,"nonce":"$undefined"}] -15:["$","script","script-1",{"src":"/_next/static/chunks/0nzz4x75f.ixz.js","async":true,"nonce":"$undefined"}] -16:["$","$L22",null,{"children":["$","$23",null,{"name":"Next.MetadataOutlet","children":"$@24"}]}] -25:[] -17:"$W25" -18:["$","$1","h",{"children":[null,["$","$L26",null,{"children":"$L27"}],["$","div",null,{"hidden":true,"children":["$","$L28",null,{"children":["$","$23",null,{"name":"Next.Metadata","children":"$L29"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] -1a:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] -2a:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0dt55bg8oa_k~.js","/_next/static/chunks/0nzz4x75f.ixz.js"],"Image"] -20:["$","div",null,{"className":"elementor-element elementor-element-c2c601a e-flex e-con-boxed cut-corner-no sticky-container-off e-con e-parent","data-id":"c2c601a","data-element_type":"container","data-e-type":"container","children":["$","div",null,{"className":"e-con-inner","children":["$","div",null,{"className":"elementor-element elementor-element-3306a27 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"3306a27","data-element_type":"container","data-e-type":"container","children":[["$","div",null,{"className":"elementor-element elementor-element-7afb238 elementor-widget elementor-widget-logico_heading","data-id":"7afb238","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","div",null,{"className":"logico-title","children":"/Team /"}]}]}],["$","div",null,{"style":{"alignSelf":"flex-start","width":"100%"},"className":"elementor-element elementor-element-c46350e elementor-widget__width-initial elementor-widget elementor-widget-logico_heading","data-id":"c46350e","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","h3",null,{"className":"logico-title","style":{"textAlign":"left"},"children":"Meet crew"}]}]}],["$","div",null,{"className":"elementor-element elementor-element-ac909e5 elementor-widget elementor-widget-logico_team_listing","data-id":"ac909e5","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_team_listing.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","div",null,{"className":"logico-team-listing-widget","children":["$","div",null,{"className":"archive-listing","children":["$","div",null,{"className":"archive-listing-wrapper team-listing-wrapper team-grid-listing columns-4","children":[["$","div","0",{"className":"team-item-wrapper post-2866 team type-team status-publish has-post-thumbnail hentry","children":["$","div",null,{"className":"team-item","children":[["$","div",null,{"className":"team-item-media","children":["$","div",null,{"className":"post-media","children":["$","$L2a",null,{"src":"/images/Investor.webp","alt":"Ratan Kumar","width":300,"height":360,"style":{"objectFit":"cover","width":"100%","height":"100%"}}]}]}],["$","div",null,{"className":"team-item-content","children":[["$","div",null,{"className":"post-title","children":["$","span",null,{"className":"team-member-name","children":"Ratan Kumar"}]}],["$","div",null,{"className":"team-item-position","dangerouslySetInnerHTML":{"__html":"COO & Operational Specialist"}}],["$","div",null,{"className":"team-item-socials","children":["$","ul",null,{"className":"team-socials wrapper-socials","children":["$","li",null,{"children":["$","a",null,{"href":"https://www.linkedin.com/","target":"_blank","rel":"noreferrer","className":"fab fa-linkedin-in"}]}]}]}]]}]]}]}],["$","div","1",{"className":"team-item-wrapper post-2866 team type-team status-publish has-post-thumbnail hentry","children":["$","div",null,{"className":"team-item","children":[["$","div",null,{"className":"team-item-media","children":["$","div",null,{"className":"post-media","children":["$","$L2a",null,{"src":"/images/Aravinth.webp","alt":"Aravinth","width":300,"height":360,"style":{"objectFit":"cover","width":"100%","height":"100%"}}]}]}],["$","div",null,{"className":"team-item-content","children":[["$","div",null,{"className":"post-title","children":["$","span",null,{"className":"team-member-name","children":"Aravinth"}]}],["$","div",null,{"className":"team-item-position","dangerouslySetInnerHTML":{"__html":"CFO & Finance Specialist"}}],["$","div",null,{"className":"team-item-socials","children":["$","ul",null,{"className":"team-socials wrapper-socials","children":["$","li",null,{"children":["$","a",null,{"href":"https://www.linkedin.com/","target":"_blank","rel":"noreferrer","className":"fab fa-linkedin-in"}]}]}]}]]}]]}]}],["$","div","2",{"className":"team-item-wrapper post-2866 team type-team status-publish has-post-thumbnail hentry","children":["$","div",null,{"className":"team-item","children":[["$","div",null,{"className":"team-item-media","children":["$","div",null,{"className":"post-media","children":"$L2b"}]}],"$L2c"]}]}],"$L2d"]}]}]}]}]}]]}]}]}] -2b:["$","$L2a",null,{"src":"/images/Fazul.webp","alt":"Fazul Ilahi","width":300,"height":360,"style":{"objectFit":"cover","width":"100%","height":"100%"}}] -2c:["$","div",null,{"className":"team-item-content","children":[["$","div",null,{"className":"post-title","children":["$","span",null,{"className":"team-member-name","children":"Fazul Ilahi"}]}],["$","div",null,{"className":"team-item-position","dangerouslySetInnerHTML":{"__html":"CTO & Technology Specialist"}}],["$","div",null,{"className":"team-item-socials","children":["$","ul",null,{"className":"team-socials wrapper-socials","children":["$","li",null,{"children":["$","a",null,{"href":"https://www.linkedin.com/","target":"_blank","rel":"noreferrer","className":"fab fa-linkedin-in"}]}]}]}]]}] -2d:["$","div","3",{"className":"team-item-wrapper post-2866 team type-team status-publish has-post-thumbnail hentry","children":["$","div",null,{"className":"team-item","children":[["$","div",null,{"className":"team-item-media","children":["$","div",null,{"className":"post-media","children":["$","$L2a",null,{"src":"/images/Suriya.webp","alt":"Suriya Kumar","width":300,"height":360,"style":{"objectFit":"cover","width":"100%","height":"100%"}}]}]}],["$","div",null,{"className":"team-item-content","children":[["$","div",null,{"className":"post-title","children":["$","span",null,{"className":"team-member-name","children":"Suriya Kumar"}]}],["$","div",null,{"className":"team-item-position","dangerouslySetInnerHTML":{"__html":"Engineering Head & AI Specialist"}}],["$","div",null,{"className":"team-item-socials","children":["$","ul",null,{"className":"team-socials wrapper-socials","children":["$","li",null,{"children":["$","a",null,{"href":"https://www.linkedin.com/","target":"_blank","rel":"noreferrer","className":"fab fa-linkedin-in"}]}]}]}]]}]]}]}] -27:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -2e:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -24:null -29:[["$","title","0",{"children":"About Us – Doormile"}],["$","meta","1",{"name":"description","content":"Meet the best crew and operators behind Doormile. Explore our roadmap, competitive edge, and operational excellence in EV and last-mile logistics."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","4",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","5",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","6",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L2e","7",{}]] diff --git a/build/about-us/__next._head.txt b/build/about-us/__next._head.txt deleted file mode 100644 index c9bd61f..0000000 --- a/build/about-us/__next._head.txt +++ /dev/null @@ -1,6 +0,0 @@ -1:"$Sreact.fragment" -2:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -3:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -4:"$Sreact.suspense" -5:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"About Us – Doormile"}],["$","meta","1",{"name":"description","content":"Meet the best crew and operators behind Doormile. Explore our roadmap, competitive edge, and operational excellence in EV and last-mile logistics."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","4",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","5",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","6",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L5","7",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/about-us/__next._index.txt b/build/about-us/__next._index.txt deleted file mode 100644 index d0b3355..0000000 --- a/build/about-us/__next._index.txt +++ /dev/null @@ -1,15 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","template":["$","$La",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/about-us/__next._tree.txt b/build/about-us/__next._tree.txt deleted file mode 100644 index cd3fa9a..0000000 --- a/build/about-us/__next._tree.txt +++ /dev/null @@ -1,11 +0,0 @@ -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/chunks/0v290txaarww5.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -:HL["/images/about-bg.webp","image"] -0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"about-us","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/about-us/__next.about-us.__PAGE__.txt b/build/about-us/__next.about-us.__PAGE__.txt deleted file mode 100644 index d482fba..0000000 --- a/build/about-us/__next.about-us.__PAGE__.txt +++ /dev/null @@ -1,139 +0,0 @@ -1:"$Sreact.fragment" -2:I[24911,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0dt55bg8oa_k~.js","/_next/static/chunks/0nzz4x75f.ixz.js"],"default"] -3:I[61867,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0dt55bg8oa_k~.js","/_next/static/chunks/0nzz4x75f.ixz.js"],"default"] -4:I[47580,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0dt55bg8oa_k~.js","/_next/static/chunks/0nzz4x75f.ixz.js"],"default"] -5:I[2012,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0dt55bg8oa_k~.js","/_next/static/chunks/0nzz4x75f.ixz.js"],"default"] -d:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0dt55bg8oa_k~.js","/_next/static/chunks/0nzz4x75f.ixz.js"],"Image"] -11:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0dt55bg8oa_k~.js","/_next/static/chunks/0nzz4x75f.ixz.js"],""] -12:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -13:"$Sreact.suspense" -:HL["/images/about-bg.webp","image"] -:HL["/_next/static/chunks/0v290txaarww5.css","style"] -6:T102e, - /* Box this section to the same inset width the sibling sections use. - The container's "display: var(--display)" resolves to the invalid - fallback (inline) here, so max-width was being ignored and the section - spanned edge-to-edge (heading clipped at the viewport edge). Force the - flex display back on and pin the inner to the shared 1480px inset. */ - .elementor-86 .elementor-element-c2c601a { - display: flex; - } - .elementor-86 .elementor-element-c2c601a > .e-con-inner { - display: flex; - flex-direction: column; - max-width: 1480px; - width: 100%; - margin-left: auto; - margin-right: auto; - padding-left: clamp(20px, 4vw, 50px) !important; - padding-right: clamp(20px, 4vw, 50px) !important; - box-sizing: border-box; - } - - /* Breathing room above and below the "Meet our the best crew" heading. */ - .elementor-86 .elementor-element-c46350e > .elementor-widget-container { - margin-top: 40px; - margin-bottom: 56px; - } - - /* Team photos: grayscale by default, full colour on hover (matches design) */ - .team-listing-wrapper.team-grid-listing .team-item .post-media img { - filter: grayscale(100%); - transition: filter 0.45s ease; - } - .team-listing-wrapper.team-grid-listing .team-item:hover .post-media img { - filter: grayscale(0%); - } - - /* Grid: four columns that wrap, with tightened row/column gaps. */ - .team-listing-wrapper.team-grid-listing { - display: flex; - flex-wrap: wrap; - margin: 0 -16px -40px; - } - .team-listing-wrapper.team-grid-listing .team-item-wrapper { - width: 25%; - padding: 0 16px; - margin-bottom: 40px; - box-sizing: border-box; - } - @media (max-width: 1024px) { - .team-listing-wrapper.team-grid-listing .team-item-wrapper { width: 50%; } - } - @media (max-width: 767px) { - .elementor-86 .elementor-element-c2c601a > .e-con-inner { - padding-left: 0 !important; - padding-right: 0 !important; - padding-top: 32px !important; - padding-bottom: 32px !important; - } - .elementor-86 .elementor-element-c46350e > .elementor-widget-container { - margin-top: 24px !important; - margin-bottom: 24px !important; - } - .team-listing-wrapper.team-grid-listing { - margin: 0 0 -28px; - } - .team-listing-wrapper.team-grid-listing .team-item-wrapper { - width: 100%; - padding: 0; - margin-bottom: 28px; - } - } - @media (max-width: 480px) { - .team-listing-wrapper.team-grid-listing { - margin: 0 0 -28px; - } - .team-listing-wrapper.team-grid-listing .team-item-wrapper { - width: 100%; - padding: 0; - margin-bottom: 28px; - } - } - - /* Card: photo on top, name/position at the bottom (down to image). */ - .team-listing-wrapper.team-grid-listing .team-item { - display: flex; - flex-direction: column; - align-items: flex-start; - gap: 16px; - width: 100%; - } - /* Compact portrait photo. Extra .team-item in the selector raises the - specificity so it beats the cached vendor rule (width: 45.65%). */ - .team-listing-wrapper.team-grid-listing .team-item .team-item-media { - width: 100%; - margin: 0; - } - .team-listing-wrapper.team-grid-listing .team-item .post-media { - height: 0; - padding-top: 120%; - border-radius: 16px; - overflow: hidden; - } - .team-listing-wrapper.team-grid-listing .team-item .post-media img { - position: absolute; - inset: 0; - width: 100%; - height: 100%; - object-fit: cover; - } - .team-listing-wrapper.team-grid-listing .team-item .team-item-content { - width: 100%; - margin: 0; - } - .team-listing-wrapper.team-grid-listing .team-item .post-title .team-member-name { - color: inherit; - text-decoration: none; - } - 0:{"rsc":["$","$1","c",{"children":[["$","div",null,{"id":"about","className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","div",null,{"data-elementor-type":"wp-page","data-elementor-id":"86","className":"elementor elementor-86 elementor-59","children":[[["$","link",null,{"rel":"preload","as":"image","href":"/images/about-bg.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"\n .about-us-hero-content {\n width: 100% !important;\n text-align: center !important;\n color: #fff !important;\n padding: 0 15px !important;\n z-index: 2;\n display: flex !important;\n flex-direction: column !important;\n justify-content: center !important;\n align-items: center !important;\n height: 100% !important;\n }\n\n .about-us-hero-title {\n margin: 0 !important;\n font-family: \"Manrope\", Sans-serif !important;\n font-size: clamp(34px, 5.5vw, 68px) !important;\n font-weight: 850 !important;\n line-height: 1.1 !important;\n text-transform: uppercase !important;\n letter-spacing: -1.5px !important;\n color: #ffffff !important;\n text-align: center !important;\n }\n "}}],["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"style":{"backgroundImage":"url('/images/about-bg.webp')","--hero-overlay":"linear-gradient(to bottom, rgba(0, 0, 0, 0.85) 0%, rgba(0, 0, 0, 0.92) 60%, rgba(0, 0, 0, 0.98) 100%)"},"className":"custom-standard-hero-card","children":["$","div",null,{"className":"about-us-hero-content","children":["$","h3",null,{"className":"about-us-hero-title","children":["The Operators Building ",["$","br",null,{}]," ",["$","span",null,{"style":{"color":"#C01227"},"children":"Doormile"}]]}]}]}]}]],["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{}],["$","$L5",null,{}],[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$6"}}],"$L7"],"$L8"]}]}]}]}],["$L9","$La","$Lb"],"$Lc"]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} -7:["$","div",null,{"className":"elementor-element elementor-element-c2c601a e-flex e-con-boxed cut-corner-no sticky-container-off e-con e-parent","data-id":"c2c601a","data-element_type":"container","data-e-type":"container","children":["$","div",null,{"className":"e-con-inner","children":["$","div",null,{"className":"elementor-element elementor-element-3306a27 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"3306a27","data-element_type":"container","data-e-type":"container","children":[["$","div",null,{"className":"elementor-element elementor-element-7afb238 elementor-widget elementor-widget-logico_heading","data-id":"7afb238","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","div",null,{"className":"logico-title","children":"/Team /"}]}]}],["$","div",null,{"style":{"alignSelf":"flex-start","width":"100%"},"className":"elementor-element elementor-element-c46350e elementor-widget__width-initial elementor-widget elementor-widget-logico_heading","data-id":"c46350e","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","h3",null,{"className":"logico-title","style":{"textAlign":"left"},"children":"Meet crew"}]}]}],["$","div",null,{"className":"elementor-element elementor-element-ac909e5 elementor-widget elementor-widget-logico_team_listing","data-id":"ac909e5","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_team_listing.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","div",null,{"className":"logico-team-listing-widget","children":["$","div",null,{"className":"archive-listing","children":["$","div",null,{"className":"archive-listing-wrapper team-listing-wrapper team-grid-listing columns-4","children":[["$","div","0",{"className":"team-item-wrapper post-2866 team type-team status-publish has-post-thumbnail hentry","children":["$","div",null,{"className":"team-item","children":[["$","div",null,{"className":"team-item-media","children":["$","div",null,{"className":"post-media","children":["$","$Ld",null,{"src":"/images/Investor.webp","alt":"Ratan Kumar","width":300,"height":360,"style":{"objectFit":"cover","width":"100%","height":"100%"}}]}]}],["$","div",null,{"className":"team-item-content","children":[["$","div",null,{"className":"post-title","children":["$","span",null,{"className":"team-member-name","children":"Ratan Kumar"}]}],["$","div",null,{"className":"team-item-position","dangerouslySetInnerHTML":{"__html":"COO & Operational Specialist"}}],["$","div",null,{"className":"team-item-socials","children":["$","ul",null,{"className":"team-socials wrapper-socials","children":["$","li",null,{"children":["$","a",null,{"href":"https://www.linkedin.com/","target":"_blank","rel":"noreferrer","className":"fab fa-linkedin-in"}]}]}]}]]}]]}]}],["$","div","1",{"className":"team-item-wrapper post-2866 team type-team status-publish has-post-thumbnail hentry","children":["$","div",null,{"className":"team-item","children":[["$","div",null,{"className":"team-item-media","children":["$","div",null,{"className":"post-media","children":["$","$Ld",null,{"src":"/images/Aravinth.webp","alt":"Aravinth","width":300,"height":360,"style":{"objectFit":"cover","width":"100%","height":"100%"}}]}]}],["$","div",null,{"className":"team-item-content","children":[["$","div",null,{"className":"post-title","children":["$","span",null,{"className":"team-member-name","children":"Aravinth"}]}],["$","div",null,{"className":"team-item-position","dangerouslySetInnerHTML":{"__html":"CFO & Finance Specialist"}}],["$","div",null,{"className":"team-item-socials","children":["$","ul",null,{"className":"team-socials wrapper-socials","children":["$","li",null,{"children":["$","a",null,{"href":"https://www.linkedin.com/","target":"_blank","rel":"noreferrer","className":"fab fa-linkedin-in"}]}]}]}]]}]]}]}],["$","div","2",{"className":"team-item-wrapper post-2866 team type-team status-publish has-post-thumbnail hentry","children":["$","div",null,{"className":"team-item","children":[["$","div",null,{"className":"team-item-media","children":["$","div",null,{"className":"post-media","children":"$Le"}]}],"$Lf"]}]}],"$L10"]}]}]}]}]}]]}]}]}] -8:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"\n @media (max-width: 768px) {\n .we-container {\n margin-top: 40px !important;\n margin-bottom: 40px !important;\n padding: 0 10px !important;\n }\n .we-cta {\n padding: 48px 20px !important;\n border-radius: 22px !important;\n }\n .we-cta-title {\n font-size: clamp(28px, 6vw, 38px) !important;\n line-height: 1.25 !important;\n margin-bottom: 16px !important;\n }\n .we-cta-sub {\n font-size: 15px !important;\n line-height: 1.5 !important;\n margin-bottom: 24px !important;\n }\n }\n "}}],["$","div",null,{"className":"we-container","children":["$","div",null,{"className":"we-cta reveal","children":["$","div",null,{"className":"we-cta-inner","children":[["$","h2",null,{"className":"we-cta-title","children":["Ready to Start",["$","br",null,{}],["$","em",null,{"children":"Your Journey?"}]]}],["$","p",null,{"className":"we-cta-sub","children":["Join our Women Entrepreneurship program and become part of ",["$","br",null,{}],"India's fastest-growing logistics network."]}],["$","div",null,{"className":"we-cta-btns","children":["$","$L11",null,{"href":"/contact","className":"btn-we-primary","style":{"textDecoration":"none"},"children":["Apply Now",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","style":{"marginLeft":"8px","display":"inline-block","verticalAlign":"middle"},"children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]}]]}]}]}]] -9:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0v290txaarww5.css","precedence":"next"}] -a:["$","script","script-0",{"src":"/_next/static/chunks/0dt55bg8oa_k~.js","async":true}] -b:["$","script","script-1",{"src":"/_next/static/chunks/0nzz4x75f.ixz.js","async":true}] -c:["$","$L12",null,{"children":["$","$13",null,{"name":"Next.MetadataOutlet","children":"$@14"}]}] -e:["$","$Ld",null,{"src":"/images/Fazul.webp","alt":"Fazul Ilahi","width":300,"height":360,"style":{"objectFit":"cover","width":"100%","height":"100%"}}] -f:["$","div",null,{"className":"team-item-content","children":[["$","div",null,{"className":"post-title","children":["$","span",null,{"className":"team-member-name","children":"Fazul Ilahi"}]}],["$","div",null,{"className":"team-item-position","dangerouslySetInnerHTML":{"__html":"CTO & Technology Specialist"}}],["$","div",null,{"className":"team-item-socials","children":["$","ul",null,{"className":"team-socials wrapper-socials","children":["$","li",null,{"children":["$","a",null,{"href":"https://www.linkedin.com/","target":"_blank","rel":"noreferrer","className":"fab fa-linkedin-in"}]}]}]}]]}] -10:["$","div","3",{"className":"team-item-wrapper post-2866 team type-team status-publish has-post-thumbnail hentry","children":["$","div",null,{"className":"team-item","children":[["$","div",null,{"className":"team-item-media","children":["$","div",null,{"className":"post-media","children":["$","$Ld",null,{"src":"/images/Suriya.webp","alt":"Suriya Kumar","width":300,"height":360,"style":{"objectFit":"cover","width":"100%","height":"100%"}}]}]}],["$","div",null,{"className":"team-item-content","children":[["$","div",null,{"className":"post-title","children":["$","span",null,{"className":"team-member-name","children":"Suriya Kumar"}]}],["$","div",null,{"className":"team-item-position","dangerouslySetInnerHTML":{"__html":"Engineering Head & AI Specialist"}}],["$","div",null,{"className":"team-item-socials","children":["$","ul",null,{"className":"team-socials wrapper-socials","children":["$","li",null,{"children":["$","a",null,{"href":"https://www.linkedin.com/","target":"_blank","rel":"noreferrer","className":"fab fa-linkedin-in"}]}]}]}]]}]]}]}] -14:null diff --git a/build/about-us/__next.about-us.txt b/build/about-us/__next.about-us.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/about-us/__next.about-us.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/air-freight.html b/build/air-freight.html deleted file mode 100644 index ab59448..0000000 --- a/build/air-freight.html +++ /dev/null @@ -1 +0,0 @@ -Doormile — Delivering Trust. Beyond Boundaries \ No newline at end of file diff --git a/build/air-freight.txt b/build/air-freight.txt deleted file mode 100644 index 45eed24..0000000 --- a/build/air-freight.txt +++ /dev/null @@ -1,32 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -d:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -e:"$Sreact.suspense" -11:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -13:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -15:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","air-freight"],"q":"","i":false,"f":[[["",{"children":["air-freight",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":["$Lc",null,["$","$Ld",null,{"children":["$","$e",null,{"name":"Next.MetadataOutlet","children":"$@f"}]}]]}],{},null,false,null]},null,false,"$@10"]},null,false,null],["$","$1","h",{"children":[null,["$","$L11",null,{"children":"$L12"}],["$","div",null,{"hidden":true,"children":["$","$L13",null,{"children":["$","$e",null,{"name":"Next.Metadata","children":"$L14"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$15",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -c:E{"digest":"NEXT_REDIRECT;replace;/doormile-wings;308;"} -16:[] -10:"$W16" -12:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -17:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -f:null -14:[["$","title","0",{"children":"Doormile — Delivering Trust. Beyond Boundaries"}],["$","meta","1",{"name":"description","content":"Doormile powers last-mile logistics with MileTruth™ AI, providing connected miles, SLA protection, and carrier management."}],["$","meta","2",{"name":"robots","content":"noindex, follow"}],["$","link","3",{"rel":"canonical","href":"https://doormile.com/doormile-wings"}],["$","link","4",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","5",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","6",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","7",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L17","8",{}]] diff --git a/build/air-freight/__next._full.txt b/build/air-freight/__next._full.txt deleted file mode 100644 index 45eed24..0000000 --- a/build/air-freight/__next._full.txt +++ /dev/null @@ -1,32 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -d:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -e:"$Sreact.suspense" -11:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -13:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -15:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","air-freight"],"q":"","i":false,"f":[[["",{"children":["air-freight",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":["$Lc",null,["$","$Ld",null,{"children":["$","$e",null,{"name":"Next.MetadataOutlet","children":"$@f"}]}]]}],{},null,false,null]},null,false,"$@10"]},null,false,null],["$","$1","h",{"children":[null,["$","$L11",null,{"children":"$L12"}],["$","div",null,{"hidden":true,"children":["$","$L13",null,{"children":["$","$e",null,{"name":"Next.Metadata","children":"$L14"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$15",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -c:E{"digest":"NEXT_REDIRECT;replace;/doormile-wings;308;"} -16:[] -10:"$W16" -12:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -17:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -f:null -14:[["$","title","0",{"children":"Doormile — Delivering Trust. Beyond Boundaries"}],["$","meta","1",{"name":"description","content":"Doormile powers last-mile logistics with MileTruth™ AI, providing connected miles, SLA protection, and carrier management."}],["$","meta","2",{"name":"robots","content":"noindex, follow"}],["$","link","3",{"rel":"canonical","href":"https://doormile.com/doormile-wings"}],["$","link","4",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","5",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","6",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","7",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L17","8",{}]] diff --git a/build/air-freight/__next._head.txt b/build/air-freight/__next._head.txt deleted file mode 100644 index c63e142..0000000 --- a/build/air-freight/__next._head.txt +++ /dev/null @@ -1,6 +0,0 @@ -1:"$Sreact.fragment" -2:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -3:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -4:"$Sreact.suspense" -5:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Doormile — Delivering Trust. Beyond Boundaries"}],["$","meta","1",{"name":"description","content":"Doormile powers last-mile logistics with MileTruth™ AI, providing connected miles, SLA protection, and carrier management."}],["$","meta","2",{"name":"robots","content":"noindex, follow"}],["$","link","3",{"rel":"canonical","href":"https://doormile.com/doormile-wings"}],["$","link","4",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","5",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","6",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","7",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L5","8",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/air-freight/__next._index.txt b/build/air-freight/__next._index.txt deleted file mode 100644 index d0b3355..0000000 --- a/build/air-freight/__next._index.txt +++ /dev/null @@ -1,15 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","template":["$","$La",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/air-freight/__next._tree.txt b/build/air-freight/__next._tree.txt deleted file mode 100644 index f115266..0000000 --- a/build/air-freight/__next._tree.txt +++ /dev/null @@ -1,9 +0,0 @@ -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"air-freight","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/air-freight/__next.air-freight.__PAGE__.txt b/build/air-freight/__next.air-freight.__PAGE__.txt deleted file mode 100644 index 299e14c..0000000 --- a/build/air-freight/__next.air-freight.__PAGE__.txt +++ /dev/null @@ -1,6 +0,0 @@ -1:"$Sreact.fragment" -3:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -4:"$Sreact.suspense" -0:{"rsc":["$","$1","c",{"children":["$L2",null,["$","$L3",null,{"children":["$","$4",null,{"name":"Next.MetadataOutlet","children":"$@5"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} -5:null -2:E{"digest":"NEXT_REDIRECT;replace;/doormile-wings;308;"} diff --git a/build/air-freight/__next.air-freight.txt b/build/air-freight/__next.air-freight.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/air-freight/__next.air-freight.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog.html b/build/blog.html deleted file mode 100644 index 1e67d0c..0000000 --- a/build/blog.html +++ /dev/null @@ -1,863 +0,0 @@ -Blog – Doormile

    Doormile

    Doormile logo
    Address
    Hyderabad

    5th Floor, Vision Ultima,
    Street No.3, Jayabheri Enclave,
    Gachibowli, Hyderabad,
    Telangana 500032.

    Coimbatore

    Mayflower Valencia,
    Near Nava India Bus Stop,
    Avinashi Road,
    Udayampalayam,
    Tamil Nadu 641037.

    Bengaluru

    C612, 6th Floor,
    Trifecta Starlight,
    ITPL Road,
    Garudacharapalya,
    Mahadevapura,
    Bangalore 560048,
    Karnataka, India.

    Contact Us

    Tel : +91 86886 97941

    Email

    care@doormile.com

    Delivering Trust.
    Beyond Boundaries

    \ No newline at end of file diff --git a/build/blog.txt b/build/blog.txt deleted file mode 100644 index ed53a74..0000000 --- a/build/blog.txt +++ /dev/null @@ -1,207 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -11:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -:HL["/images/home2-banner-1.webp","image"] -0:{"P":null,"c":["","blog"],"q":"","i":false,"f":[[["",{"children":["blog",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","div",null,{"id":"blogs","className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","div",null,{"data-elementor-type":"wp-page","data-elementor-id":"104","className":"elementor elementor-104","children":[[["$","link",null,{"rel":"preload","as":"image","href":"/images/home2-banner-1.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"\n .blogs-hero-title {\n color: #ffffff !important;\n font-family: var(--font-manrope), sans-serif !important;\n font-size: clamp(34px, 5.5vw, 68px) !important;\n font-weight: 850 !important;\n line-height: 1.08 !important;\n text-transform: uppercase !important;\n letter-spacing: -1.5px !important;\n margin: 0 !important;\n }\n .blogs-hero-content {\n position: relative !important;\n width: 100% !important;\n height: 100% !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n flex-direction: column !important;\n max-width: 1000px !important;\n margin: 0 auto !important;\n padding: 0 15px !important;\n box-sizing: border-box !important;\n }\n "}}],"$Lc"],"$Ld"]}]}]}]}],null,"$Le"]}],{},null,false,null]},null,false,"$@f"]},null,false,null],"$L10",false]],"m":"$undefined","G":["$11",["$L12"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -15:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -16:"$Sreact.suspense" -19:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -1b:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -c:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"style":{"backgroundImage":"url(/images/home2-banner-1.webp)","backgroundPosition":"center center","backgroundRepeat":"no-repeat","backgroundSize":"cover"},"className":"custom-standard-hero-card","children":["$","div",null,{"className":"blogs-hero-content","children":["$","div",null,{"style":{"textAlign":"center","color":"#fff","zIndex":5},"children":["$","h1",null,{"className":"blogs-hero-title","children":["Delivering Trust.",["$","br",null,{}],["$","span",null,{"style":{"color":"#C01227"},"children":"Beyond Boundaries"}]]}]}]}]}]}] -13:T17ff, - .custom-blog-grid { - display: grid !important; - grid-template-columns: repeat(3, 1fr) !important; - gap: 40px !important; - width: 100% !important; - max-width: 1200px !important; - margin: 0 auto !important; - padding: 40px 20px !important; - } - - @media (max-width: 1024px) { - .custom-blog-grid { - grid-template-columns: repeat(2, 1fr) !important; - } - } - @media (max-width: 768px) { - .elementor-104 .elementor-element.elementor-element-c70681e { - margin-top: var(--space-section) !important; - margin-bottom: 16px !important; - } - .custom-blog-grid { - grid-template-columns: 1fr !important; - gap: 28px !important; - padding: 24px 20px !important; - } - } - - @media (max-width: 767px) { - .elementor-104 .elementor-element.elementor-element-c70681e { - --padding-left: 10px !important; - --padding-right: 10px !important; - padding-left: 10px !important; - padding-right: 10px !important; - } - .elementor-104 .elementor-element.elementor-element-3dec5cf { - --padding-left: 0px !important; - --padding-right: 0px !important; - padding-left: 0 !important; - padding-right: 0 !important; - } - .elementor-104 .elementor-element.elementor-element-aa12479, - .elementor-104 .elementor-element.elementor-element-aa12479 > .elementor-widget-container, - .elementor-104 .archive-listing, - .elementor-104 .custom-blog-grid { - width: 100% !important; - max-width: 100% !important; - } - .elementor-104 .custom-blog-grid { - padding-left: 0 !important; - padding-right: 0 !important; - } - } - - .custom-blog-card { - display: flex !important; - flex-direction: column !important; - justify-content: space-between !important; - height: 100% !important; - background: #ffffff !important; - border: 1px solid rgba(0, 0, 0, 0.08) !important; - border-radius: 28px !important; - padding: 28px !important; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.03) !important; - transition: transform 0.4s cubic-bezier(0.2, 0.8, 0.2, 1), box-shadow 0.4s ease !important; - cursor: pointer !important; - } - - .custom-blog-card:hover { - transform: translateY(-8px) !important; - box-shadow: 0 20px 40px rgba(192, 18, 39, 0.12) !important; - border-color: rgba(192, 18, 39, 0.2) !important; - } - - .custom-blog-title { - font-size: 20px !important; - font-weight: 800 !important; - color: #1e293b !important; - line-height: 1.35 !important; - text-transform: none !important; - letter-spacing: -0.4px !important; - margin: 0 0 12px 0 !important; - display: -webkit-box !important; - -webkit-line-clamp: 2 !important; - -webkit-box-orient: vertical !important; - overflow: hidden !important; - transition: color 0.2s ease !important; - font-family: var(--font-manrope), sans-serif !important; - } - - .custom-blog-card:hover .custom-blog-title { - color: #c01227 !important; - } - - .custom-blog-excerpt { - font-size: 13.5px !important; - font-weight: 500 !important; - color: #64748b !important; - line-height: 1.6 !important; - margin: 0 0 18px 0 !important; - text-transform: none !important; - font-family: var(--font-manrope), sans-serif !important; - } - - /* Bottom block pinned to the card base. Keeps Read More + image at the - same vertical position across cards with different text lengths. */ - .custom-blog-bottom { - display: flex !important; - flex-direction: column !important; - margin-top: auto !important; - } - - .custom-blog-readmore { - display: inline-flex !important; - align-items: center !important; - align-self: flex-start !important; - gap: 6px !important; - font-size: 13px !important; - font-weight: 800 !important; - color: #c01227 !important; - text-transform: uppercase !important; - letter-spacing: 0.5px !important; - margin: 0 0 24px 0 !important; - font-family: var(--font-manrope), sans-serif !important; - } - - .custom-blog-readmore-arrow { - transition: transform 0.3s cubic-bezier(0.2, 0.8, 0.2, 1) !important; - } - - .custom-blog-card:hover .custom-blog-readmore-arrow { - transform: translateX(5px) !important; - } - - .custom-blog-img-container { - position: relative !important; - width: 100% !important; - aspect-ratio: 4 / 3 !important; - border-radius: 20px !important; - overflow: hidden !important; - box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.05) !important; - } - - .custom-blog-badge { - position: absolute !important; - top: 14px !important; - left: 14px !important; - z-index: 5 !important; - background: #c01227 !important; - color: #ffffff !important; - font-size: 9px !important; - font-weight: 800 !important; - text-transform: uppercase !important; - letter-spacing: 1.2px !important; - padding: 4px 10px !important; - border-radius: 6px !important; - box-shadow: 0 4px 10px rgba(192, 18, 39, 0.2) !important; - font-family: var(--font-manrope), sans-serif !important; - } - d:["$","div",null,{"className":"elementor-element elementor-element-c70681e e-flex e-con-boxed cut-corner-no sticky-container-off e-con e-parent","data-id":"c70681e","data-element_type":"container","data-e-type":"container","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$13"}}],"$L14"]}] -e:["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}] -18:[] -f:"$W18" -10:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] -12:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] -1d:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ScrollReveal"] -1e:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],""] -1f:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"Image"] -14:["$","div",null,{"className":"e-con-inner","children":["$","div",null,{"className":"elementor-element elementor-element-3dec5cf e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"3dec5cf","data-element_type":"container","data-e-type":"container","children":["$","div",null,{"className":"elementor-element elementor-element-aa12479 elementor-widget elementor-widget-logico_blog_listing","data-id":"aa12479","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_blog_listing.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","div",null,{"className":"archive-listing","children":["$","div",null,{"className":"custom-blog-grid","children":[["$","$L1d","how-ai-is-transforming-last-mile-ev-delivery",{"delay":0,"duration":0.8,"yOffset":35,"children":["$","$L1e",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"custom-blog-card","style":{"textDecoration":"none"},"children":[["$","div",null,{"className":"flex flex-col","children":[["$","h3",null,{"className":"custom-blog-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","p",null,{"className":"custom-blog-excerpt","children":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}]]}],["$","div",null,{"className":"custom-blog-bottom","children":[["$","span",null,{"className":"custom-blog-readmore","children":["Read More",["$","svg",null,{"className":"custom-blog-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","div",null,{"className":"custom-blog-img-container","children":[["$","$L1f",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, 33vw"}],["$","span",null,{"className":"custom-blog-badge","children":"Technology"}]]}]]}]]}]}],["$","$L1d","42-less-distance-insights-from-our-hyderabad-hub",{"delay":0.08,"duration":0.8,"yOffset":35,"children":["$","$L1e",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"custom-blog-card","style":{"textDecoration":"none"},"children":[["$","div",null,{"className":"flex flex-col","children":[["$","h3",null,{"className":"custom-blog-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","p",null,{"className":"custom-blog-excerpt","children":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}]]}],["$","div",null,{"className":"custom-blog-bottom","children":[["$","span",null,{"className":"custom-blog-readmore","children":["Read More",["$","svg",null,{"className":"custom-blog-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","div",null,{"className":"custom-blog-img-container","children":[["$","$L1f",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, 33vw"}],["$","span",null,{"className":"custom-blog-badge","children":"Case Study"}]]}]]}]]}]}],["$","$L1d","miletruth-ai-10-stages-to-smarter-dispatch",{"delay":0.16,"duration":0.8,"yOffset":35,"children":["$","$L1e",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"custom-blog-card","style":{"textDecoration":"none"},"children":[["$","div",null,{"className":"flex flex-col","children":[["$","h3",null,{"className":"custom-blog-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","p",null,{"className":"custom-blog-excerpt","children":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}]]}],"$L20"]}]}],"$L21","$L22","$L23","$L24","$L25","$L26"]}]}]}]}]}]}] -20:["$","div",null,{"className":"custom-blog-bottom","children":[["$","span",null,{"className":"custom-blog-readmore","children":["Read More",["$","svg",null,{"className":"custom-blog-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","div",null,{"className":"custom-blog-img-container","children":[["$","$L1f",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, 33vw"}],["$","span",null,{"className":"custom-blog-badge","children":"MileTruth"}]]}]]}] -21:["$","$L1d","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"delay":0,"duration":0.8,"yOffset":35,"children":["$","$L1e",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"custom-blog-card","style":{"textDecoration":"none"},"children":[["$","div",null,{"className":"flex flex-col","children":[["$","h3",null,{"className":"custom-blog-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","p",null,{"className":"custom-blog-excerpt","children":"Electric vehicles lower running costs, but battery range changes how routes must be planned before dispatch."}]]}],["$","div",null,{"className":"custom-blog-bottom","children":[["$","span",null,{"className":"custom-blog-readmore","children":["Read More",["$","svg",null,{"className":"custom-blog-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","div",null,{"className":"custom-blog-img-container","children":[["$","$L1f",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, 33vw"}],["$","span",null,{"className":"custom-blog-badge","children":"EV Fleet"}]]}]]}]]}]}] -22:["$","$L1d","why-mathematical-precision-beats-heuristics-in-routing",{"delay":0.08,"duration":0.8,"yOffset":35,"children":["$","$L1e",null,{"href":"/blog/why-mathematical-precision-beats-heuristics-in-routing","className":"custom-blog-card","style":{"textDecoration":"none"},"children":[["$","div",null,{"className":"flex flex-col","children":[["$","h3",null,{"className":"custom-blog-title","children":"Why Mathematical Precision Beats Heuristics in Routing"}],["$","p",null,{"className":"custom-blog-excerpt","children":"Fixed routing rules are easy to start with, but they often miss better stop sequences as order volume grows."}]]}],["$","div",null,{"className":"custom-blog-bottom","children":[["$","span",null,{"className":"custom-blog-readmore","children":["Read More",["$","svg",null,{"className":"custom-blog-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","div",null,{"className":"custom-blog-img-container","children":[["$","$L1f",null,{"src":"/images/blog-post-pic-14.webp","alt":"Why Mathematical Precision Beats Heuristics in Routing","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, 33vw"}],["$","span",null,{"className":"custom-blog-badge","children":"Technology"}]]}]]}]]}]}] -23:["$","$L1d","fleet-reduction-without-compromising-delivery-volume",{"delay":0.16,"duration":0.8,"yOffset":35,"children":["$","$L1e",null,{"href":"/blog/fleet-reduction-without-compromising-delivery-volume","className":"custom-blog-card","style":{"textDecoration":"none"},"children":[["$","div",null,{"className":"flex flex-col","children":[["$","h3",null,{"className":"custom-blog-title","children":"Fleet Reduction Without Compromising Delivery Volume"}],["$","p",null,{"className":"custom-blog-excerpt","children":"Handling the same order volume with fewer vehicles starts by removing avoidable kilometres and overlapping routes."}]]}],["$","div",null,{"className":"custom-blog-bottom","children":[["$","span",null,{"className":"custom-blog-readmore","children":["Read More",["$","svg",null,{"className":"custom-blog-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","div",null,{"className":"custom-blog-img-container","children":[["$","$L1f",null,{"src":"/images/blog-post-pic-8.webp","alt":"Fleet Reduction Without Compromising Delivery Volume","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, 33vw"}],["$","span",null,{"className":"custom-blog-badge","children":"Fleet Management"}]]}]]}]]}]}] -24:["$","$L1d","building-a-greener-city-the-future-of-urban-logistics",{"delay":0,"duration":0.8,"yOffset":35,"children":["$","$L1e",null,{"href":"/blog/building-a-greener-city-the-future-of-urban-logistics","className":"custom-blog-card","style":{"textDecoration":"none"},"children":[["$","div",null,{"className":"flex flex-col","children":[["$","h3",null,{"className":"custom-blog-title","children":"Building a Greener City: The Future of Urban Logistics"}],["$","p",null,{"className":"custom-blog-excerpt","children":"Cities are asking for cleaner delivery. The practical challenge is planning EV routes that can meet customer windows without wasting charge."}]]}],["$","div",null,{"className":"custom-blog-bottom","children":[["$","span",null,{"className":"custom-blog-readmore","children":["Read More",["$","svg",null,{"className":"custom-blog-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","div",null,{"className":"custom-blog-img-container","children":[["$","$L1f",null,{"src":"/images/blog-post-pic-6.webp","alt":"Building a Greener City: The Future of Urban Logistics","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, 33vw"}],["$","span",null,{"className":"custom-blog-badge","children":"Sustainability"}]]}]]}]]}]}] -25:["$","$L1d","how-doormile-maintains-99-9-sla-compliance-at-scale",{"delay":0.08,"duration":0.8,"yOffset":35,"children":["$","$L1e",null,{"href":"/blog/how-doormile-maintains-99-9-sla-compliance-at-scale","className":"custom-blog-card","style":{"textDecoration":"none"},"children":[["$","div",null,{"className":"flex flex-col","children":[["$","h3",null,{"className":"custom-blog-title","children":"How Doormile Maintains 99.9% SLA Compliance at Scale"}],["$","p",null,{"className":"custom-blog-excerpt","children":"High SLA performance comes from checking ETAs before dispatch, reacting early to delays, and keeping customer commitments visible throughout the day."}]]}],["$","div",null,{"className":"custom-blog-bottom","children":[["$","span",null,{"className":"custom-blog-readmore","children":["Read More",["$","svg",null,{"className":"custom-blog-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","div",null,{"className":"custom-blog-img-container","children":[["$","$L1f",null,{"src":"/images/last-mile-approach.webp","alt":"How Doormile Maintains 99.9% SLA Compliance at Scale","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, 33vw"}],["$","span",null,{"className":"custom-blog-badge","children":"Operations"}]]}]]}]]}]}] -26:["$","$L1d","battery-simulation-the-secret-to-ev-route-pre-validation",{"delay":0.16,"duration":0.8,"yOffset":35,"children":["$","$L1e",null,{"href":"/blog/battery-simulation-the-secret-to-ev-route-pre-validation","className":"custom-blog-card","style":{"textDecoration":"none"},"children":[["$","div",null,{"className":"flex flex-col","children":[["$","h3",null,{"className":"custom-blog-title","children":"Battery Simulation: The Secret to EV Route Pre-Validation"}],["$","p",null,{"className":"custom-blog-excerpt","children":"Before a rider leaves the hub, every EV route should be checked against real charge capacity and the expected return plan."}]]}],["$","div",null,{"className":"custom-blog-bottom","children":[["$","span",null,{"className":"custom-blog-readmore","children":["Read More",["$","svg",null,{"className":"custom-blog-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","div",null,{"className":"custom-blog-img-container","children":[["$","$L1f",null,{"src":"/images/blog-post-pic-3.webp","alt":"Battery Simulation: The Secret to EV Route Pre-Validation","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, 33vw"}],["$","span",null,{"className":"custom-blog-badge","children":"EV Fleet"}]]}]]}]]}]}] -1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -27:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -17:null -1c:[["$","title","0",{"children":"Blog – Doormile"}],["$","meta","1",{"name":"description","content":"Practical notes on delivery planning, EV fleet operations, route optimisation, charging, and last-mile performance from the Doormile team."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","4",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","5",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","6",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L27","7",{}]] diff --git a/build/blog/42-less-distance-insights-from-our-hyderabad-hub.html b/build/blog/42-less-distance-insights-from-our-hyderabad-hub.html deleted file mode 100644 index 79447c9..0000000 --- a/build/blog/42-less-distance-insights-from-our-hyderabad-hub.html +++ /dev/null @@ -1,1168 +0,0 @@ -42% Less Distance: Insights from Our Hyderabad Hub – Doormile

    Doormile

    Doormile logo
    Address
    Hyderabad

    5th Floor, Vision Ultima,
    Street No.3, Jayabheri Enclave,
    Gachibowli, Hyderabad,
    Telangana 500032.

    Coimbatore

    Mayflower Valencia,
    Near Nava India Bus Stop,
    Avinashi Road,
    Udayampalayam,
    Tamil Nadu 641037.

    Bengaluru

    C612, 6th Floor,
    Trifecta Starlight,
    ITPL Road,
    Garudacharapalya,
    Mahadevapura,
    Bangalore 560048,
    Karnataka, India.

    Contact Us

    Tel : +91 86886 97941

    Email

    care@doormile.com

    Case Study

    42% Less Distance: Insights from Our Hyderabad Hub

    Doormile Team2 min read

    Numbers settle arguments. At our Hyderabad hub, the goal was simple: reduce avoidable distance without missing customer commitments. The result was a 42% reduction in total distance travelled.

    Hyderabad is not an easy city for delivery planning. Dense commercial areas, fast-growing suburbs, flyover work, narrow service lanes, apartment security checks, and sudden traffic build-up can all change the day.

    The baseline

    Before MileTruth, the hub planned routes in the usual way. Zones were drawn from experience, dispatchers sequenced stops manually, and riders adjusted on the road when something changed.

    That process worked, but it carried hidden costs. Two riders might cross the same area in the same hour. A vehicle might take a longer loop to avoid one late stop. A dispatcher might hold back an order because the best vehicle was not obvious in the moment.

    • Zone-based allocation that missed nearby cross-zone drops
    • Manual stop sequencing during busy dispatch windows
    • ETAs checked after routing instead of before dispatch
    • Traffic and delay handling that depended on phone calls from riders

    What changed

    The main change was treating the day's orders as one connected plan instead of separate zone lists. The route plan considered distance, rider capacity, delivery windows, traffic, and vehicle availability together.

    During peak traffic hours in Hyderabad, some vehicles were arriving 20 to 30 minutes later than planned. By adjusting routes based on live traffic and battery levels, we reduced missed delivery windows and improved on-time performance.

    Hyderabad delivery hub routing analysis
    Planning the day's deliveries together removed repeated cross-town travel.

    The results

    • 42% reduction in total distance travelled across the hub
    • 37% fewer vehicles required for the same delivery volume
    • No SLA misses during the measured deployment window
    • Lower fuel use and fewer unnecessary kilometres per parcel

    The improvement did not come from asking riders to work harder. It came from giving the team a better route plan before the vehicles left.

    Hyderabad Hub Operations

    Why this applies beyond one hub

    The Hyderabad result was not a one-city exception. Most hubs deal with the same issues: overlapping routes, conservative sequencing, traffic surprises, charging constraints, and last-minute order changes.

    A 42% cut in distance changes the cost of running the operation. It also gives dispatchers more breathing room when the day gets messy.

    \ No newline at end of file diff --git a/build/blog/42-less-distance-insights-from-our-hyderabad-hub.txt b/build/blog/42-less-distance-insights-from-our-hyderabad-hub.txt deleted file mode 100644 index d8c37fe..0000000 --- a/build/blog/42-less-distance-insights-from-our-hyderabad-hub.txt +++ /dev/null @@ -1,547 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -d:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -e:"$Sreact.suspense" -11:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -13:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -15:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","blog","42-less-distance-insights-from-our-hyderabad-hub"],"q":"","i":false,"f":[[["",{"children":["blog",{"children":[["slug","42-less-distance-insights-from-our-hyderabad-hub","d",null],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":["$Lc",[["$","script","script-0",{"src":"/_next/static/chunks/0yvxf3ok9gcp_.js","async":true,"nonce":"$undefined"}]],["$","$Ld",null,{"children":["$","$e",null,{"name":"Next.MetadataOutlet","children":"$@f"}]}]]}],{},null,false,null]},null,false,"$@10"]},null,false,"$@10"]},null,false,null],["$","$1","h",{"children":[null,["$","$L11",null,{"children":"$L12"}],["$","div",null,{"hidden":true,"children":["$","$L13",null,{"children":["$","$e",null,{"name":"Next.Metadata","children":"$L14"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$15",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -16:[] -10:"$W16" -:HL["/images/blog-post-pic-15.webp","image"] -17:T3d6f, - .dm-single-blog { - --dm-red: #c01227; - --dm-red-hover: #e31d32; - --dm-radius-card: 22px; - --dm-radius-img: 20px; - --dm-radius-badge: 8px; - --dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05); - --dm-border: 1px solid rgba(15, 23, 42, 0.09); - --dm-space-p: 24px; - --dm-space-h: 32px; - --dm-space-img: 32px; - --dm-space-quote: 40px; - --dm-sticky-top: 138px; - --dm-measure: min(1100px, 100%); - font-family: var(--font-manrope), sans-serif; - } - - /* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6 - (120/80/60px UPPERCASE) rules with !important on our own classes. */ - .dm-single-blog :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline, - specificity 0-1-1) so blog links keep our colors and never get underlined. */ - .dm-single-blog a { text-decoration: none !important; } - - /* Page banner: tall homepage-scale frame with only badge + title inside */ - /* Compound selector (specificity 20) + !important beats the global 800px - single-class height rules so the blog banner can use viewport heights. */ - .custom-standard-hero-card.dm-banner-card { - height: 90vh !important; - min-height: 85vh !important; - } - @media (max-width: 1024px) { - .custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; } - } - @media (max-width: 600px) { - .custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; } - } - - .dm-banner-inner { - position: relative; width: 100%; height: 100%; - display: flex; flex-direction: column; align-items: center; justify-content: center; - text-align: center; gap: clamp(22px, 2.6vw, 34px); - padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px); - } - - .dm-banner-category { - display: inline-block; background: var(--dm-red); color: #fff; - font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px; - padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45); - } - .dm-banner-title { - font-family: var(--font-manrope), sans-serif !important; - font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important; - line-height: 1.16 !important; letter-spacing: -1.2px !important; - color: #ffffff !important; margin: 0; max-width: 820px; - text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38); - } - @media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } } - @media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } } - - /* Content wrap begins immediately below the banner */ - /* Shared content container: the SAME max-width + horizontal padding is used - by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings, - images, Prev/Next, Related Articles and the CTA banner all align to one - grid with identical left/right edges. Keep both in sync. */ - .dm-blog-wrap { - max-width: 1280px; margin: 0 auto; - /* 20px mobile padding floor → 40px on desktop; matches the footer container. */ - padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0; - } - @media (max-width: 767px) { - .dm-blog-wrap { - padding-left: 16px; - padding-right: 16px; - } - } - - /* ── Article meta bar (directly under the hero) ── */ - .dm-meta-bar { - display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px; - padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px); - border-bottom: 1px solid rgba(15,23,42,0.10); - } - .dm-meta-breadcrumb ol { - list-style: none; display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b; - } - .dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; } - .dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; } - .dm-meta-sep { color: #cbd5e1; } - .dm-meta-current { - color: #0f172a; font-weight: 700; - max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - } - @media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } } - .dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; } - .dm-meta-item { - display: inline-flex; align-items: center; gap: 7px; - font-size: 13.5px; font-weight: 600; color: #475569; - } - .dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; } - .dm-meta-author { color: #0f172a; font-weight: 700; } - @media (max-width: 600px) { .dm-meta-bar { gap: 12px; } } - .dm-blog-layout { - display: grid; grid-template-columns: minmax(0,1fr) 320px; - /* Tighter gap gives the reading column more room next to the 320px sidebar. */ - gap: clamp(28px, 3vw, 56px); align-items: start; - } - @media (max-width: 1024px) { - .dm-blog-layout { grid-template-columns: 1fr; gap: 48px; } - /* Single-column (tablet/mobile): cap the reading column and centre it so the - article never sits left-aligned with a large empty right gutter. */ - .dm-blog-main { max-width: 900px; margin-inline: auto; } - } - .dm-blog-main { min-width: 0; } - - /* ── Intro lead ── */ - .dm-blog-intro { - max-width: var(--dm-measure); - font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500; - color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px; - border-left: 3px solid var(--dm-red); - } - - /* ── Article body ── */ - .dm-article-body { max-width: var(--dm-measure); } - .dm-article-p { - font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450; - margin: 0 0 var(--dm-space-p); - } - .dm-article-h2 { - font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important; - color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h); - text-wrap: balance; - } - /* Each article block is wrapped in its OWN ScrollReveal
    , so a bare - :first-child rule matched every heading (each is the only child of its - wrapper) and zeroed its top margin, collapsing the gap above every - section heading. Scope the reset to only the article body's first block. */ - .dm-article-body > :first-child :where(.dm-article-h2, .dm-article-h3), - .dm-article-body > .dm-article-h2:first-child, - .dm-article-body > .dm-article-h3:first-child { margin-top: 0; } - .dm-article-h3 { - font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important; - color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px; - text-wrap: balance; - } - @media (max-width: 600px) { - .dm-article-p { font-size: 16px !important; } - .dm-article-ul li, .dm-article-ol li { font-size: 15.5px; } - .dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; } - .dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; } - } - - .dm-article-ul, .dm-article-ol { - /* Top margin (was 0) separates the list from the paragraph above it; - matching bottom margin keeps it clear of the next heading/paragraph. - Slightly larger than --dm-space-p so the list reads as its own block. */ - margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px); - padding-left: 2px; list-style: none; - display: flex; flex-direction: column; gap: 15px; - } - /* Prefixed with .dm-article-body so these beat the theme's global - ".logico-front-end ul li:before" fontello-glyph bullet (specificity 0,1,3), - which otherwise replaces our clean red dot with a misaligned checkmark glyph - and adds its own 1.7em indent. */ - .dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li { - position: relative; padding-left: 34px; - font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450; - } - .dm-article-body .dm-article-ul li::before { - content: ""; position: absolute; left: 7px; top: 10px; - width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red); - /* kill any inherited fontello glyph from the global rule */ - font-size: 0; line-height: 0; - } - .dm-article-ol { counter-reset: dm-li; } - .dm-article-body .dm-article-ol li { counter-increment: dm-li; } - .dm-article-body .dm-article-ol li::before { - content: counter(dm-li); position: absolute; left: 0; top: 0; - width: 24px; height: 24px; border-radius: 7px; - background: rgba(192,18,39,0.10); color: var(--dm-red); - font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; - } - - /* ── Quote ── */ - .dm-article-quote { - position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px; - background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%); - border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0; - box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06); - } - .dm-article-quote::before { - content: "\201C"; position: absolute; left: 22px; top: 8px; - font-family: Georgia, "Times New Roman", serif; - font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700; - } - .dm-article-quote p { - font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600; - font-style: italic; color: #1e293b; margin: 0; - } - .dm-article-quote cite { - display: block; margin-top: 16px; font-size: 13px; font-weight: 700; - font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px; - } - @media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } } - - /* ── Images ── */ - .dm-article-figure { margin: var(--dm-space-img) 0; } - .dm-article-figure-img { - position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; - border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10); - } - .dm-article-figure figcaption { - margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500; - text-align: center; font-style: italic; - } - - /* ── Sidebar ── */ - .dm-blog-aside-wrap { position: relative; } - .dm-blog-sidebar { - display: flex; flex-direction: column; gap: 18px; - position: sticky; top: var(--dm-sticky-top); - } - @media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } } - - .dm-blog-widget { - background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card); - padding: 20px; box-shadow: var(--dm-shadow-card); - } - .dm-blog-widget-title { - font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important; - letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important; - margin: 0 0 15px; padding: 0 0 12px; - border-bottom: 1px solid rgba(15,23,42,0.08); - overflow: visible; white-space: normal; word-break: normal; - } - - /* Search */ - .dm-sr-only { - position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; - overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; - } - .dm-blog-search { position: relative; } - .dm-blog-search-form { position: relative; } - .dm-blog-search-input { - width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px; - padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a; - background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; - } - .dm-blog-search-input::placeholder { color: #9c9c9c; } - .dm-blog-search-input:focus { - outline: none; border-color: var(--dm-red); background: #fff; - box-shadow: 0 0 0 3px rgba(192,18,39,0.11); - } - .dm-blog-search-icon { - position: absolute; right: 14px; top: 50%; transform: translateY(-50%); - color: #94a3b8; pointer-events: none; display: flex; - } - .dm-blog-search-results { - position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0; - background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px; - box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden; - } - .dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; } - .dm-blog-search-result { - display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; - border-radius: 10px; text-decoration: none; transition: background .15s ease; - } - .dm-blog-search-result:hover { background: #f8fafc; } - .dm-blog-search-result-cat { - font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red); - } - .dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; } - .dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; } - - /* Recent posts */ - .dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; } - .dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; } - .dm-blog-recent-thumb { - position: relative; flex: 0 0 62px; width: 62px; height: 62px; - border-radius: 13px; overflow: hidden; background: #f1f5f9; - } - .dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; } - .dm-blog-recent-title { - font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); } - .dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; } - - /* Categories */ - .dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; } - .dm-blog-category-item { - display: flex; align-items: center; justify-content: space-between; gap: 10px; - padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important; - border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease; - } - .dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; } - .dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; } - .dm-blog-category-item > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .dm-blog-category-count { - flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9; - min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex; - align-items: center; justify-content: center; padding: 0 7px; - } - - /* CTA card */ - .dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; } - .dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; } - .dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; } - .dm-blog-cta-btn { - display: inline-flex; align-items: center; gap: 8px; - background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700; - padding: 12px 22px; border-radius: 12px; text-decoration: none; - transition: background .2s ease, transform .2s ease; - } - .dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } -c:["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"headline\":\"42% Less Distance: Insights from Our Hyderabad Hub\",\"description\":\"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning.\",\"image\":[\"https://www.doormile.com/images/blog-post-pic-15.webp\"],\"datePublished\":\"2025-09-18T00:00:00.000Z\",\"dateModified\":\"2025-09-18T00:00:00.000Z\",\"author\":{\"@type\":\"Organization\",\"name\":\"Doormile Team\",\"url\":\"https://www.doormile.com\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Doormile\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.doormile.com/images/cropped-image-2.png\"}},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.doormile.com/blog/42-less-distance-insights-from-our-hyderabad-hub\"},\"articleSection\":\"Case Study\"}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://www.doormile.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https://www.doormile.com/blog\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"42% Less Distance: Insights from Our Hyderabad Hub\",\"item\":\"https://www.doormile.com/blog/42-less-distance-insights-from-our-hyderabad-hub\"}]}"}}],["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":[["$","article",null,{"className":"dm-single-blog","children":[["$","link",null,{"rel":"preload","as":"image","href":"/images/blog-post-pic-15.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$17"}}],"$L18","$L19"]}],"$L1a"]}]}]]}] -1b:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],""] -1c:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"ScrollReveal"] -18:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card dm-banner-card","style":{"backgroundImage":"url(/images/blog-post-pic-15.webp)","--hero-overlay":"linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)"},"children":["$","div",null,{"className":"e-con-inner dm-banner-inner","children":[["$","span",null,{"className":"dm-banner-category","children":"Case Study"}],["$","h1",null,{"className":"dm-banner-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}]]}]}]}] -19:["$","div",null,{"className":"dm-blog-wrap","children":[["$","div",null,{"className":"dm-meta-bar","children":[["$","nav",null,{"className":"dm-meta-breadcrumb","aria-label":"Breadcrumb","children":["$","ol",null,{"children":[["$","li",null,{"children":["$","$L1b",null,{"href":"/","children":"Home"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"children":["$","$L1b",null,{"href":"/blog","children":"Blog"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"aria-current":"page","className":"dm-meta-current","children":"42% Less Distance: Insights from Our Hyderabad Hub"}]]}]}],["$","div",null,{"className":"dm-meta-items","children":[["$","span",null,{"className":"dm-meta-item dm-meta-author","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","path",null,{"d":"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}],["$","circle",null,{"cx":"12","cy":"7","r":"4"}]]}],"Doormile Team"]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"2"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}]]}],["$","time",null,{"dateTime":"2025-09-18","children":"Sep 18, 2025"}]]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","circle",null,{"cx":"12","cy":"12","r":"9"}],["$","polyline",null,{"points":"12 7 12 12 15 14"}]]}],2," min read"]}]]}]]}],["$","div",null,{"className":"dm-blog-layout","children":[["$","div",null,{"className":"dm-blog-main","children":[["$","p",null,{"className":"dm-blog-intro","children":"Numbers settle arguments. At our Hyderabad hub, the goal was simple: reduce avoidable distance without missing customer commitments. The result was a 42% reduction in total distance travelled."}],["$","div",null,{"className":"dm-article-body","children":[["$","$L1c","0",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Hyderabad is not an easy city for delivery planning. Dense commercial areas, fast-growing suburbs, flyover work, narrow service lanes, apartment security checks, and sudden traffic build-up can all change the day."}]}],["$","$L1c","1",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"The baseline"}]}],["$","$L1c","2",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Before MileTruth, the hub planned routes in the usual way. Zones were drawn from experience, dispatchers sequenced stops manually, and riders adjusted on the road when something changed."}]}],["$","$L1c","3",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"That process worked, but it carried hidden costs. Two riders might cross the same area in the same hour. A vehicle might take a longer loop to avoid one late stop. A dispatcher might hold back an order because the best vehicle was not obvious in the moment."}]}],["$","$L1c","4",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"Zone-based allocation that missed nearby cross-zone drops"}],["$","li","1",{"children":"Manual stop sequencing during busy dispatch windows"}],["$","li","2",{"children":"ETAs checked after routing instead of before dispatch"}],["$","li","3",{"children":"Traffic and delay handling that depended on phone calls from riders"}]]}]}],["$","$L1c","5",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"What changed"}]}],["$","$L1c","6",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The main change was treating the day's orders as one connected plan instead of separate zone lists. The route plan considered distance, rider capacity, delivery windows, traffic, and vehicle availability together."}]}],"$L1d","$L1e","$L1f","$L20","$L21","$L22","$L23","$L24"]}]]}],"$L25"]}]]}] -26:T2021, - .dm-blog-footer { - font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32; - /* The global theme applies 72px top/bottom section padding — strip it so the - inner container is the single source of vertical rhythm (no double gap). */ - padding: 0 !important; - } - /* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */ - .dm-blog-footer :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline) */ - .dm-blog-footer a { text-decoration: none !important; } - /* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px - max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA - align to the exact same left/right edges as the article body above. - Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a - consistent ~64–72px section→section gap (no 120px+ voids). */ - .dm-blog-footer-inner { - max-width: 1280px; margin: 0 auto; - /* Compact vertical rhythm on an 8px system. Top padding sets the - article→Prev/Next gap (~24–32px); the inter-section gap sets the - Prev/Next→Related gap (~32–48px). No large arbitrary voids. */ - /* Minimal bottom padding — the global site footer already contributes its - own 20px top inset, so the CTA banner sits close to it without a void. */ - padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px); - display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px); - } - @media (max-width: 767px) { - .dm-blog-footer-inner { - padding-left: 16px; - padding-right: 16px; - } - } - - /* Prev / Next */ - .dm-prevnext { - display: grid; grid-template-columns: 1fr 1fr; gap: 20px; - /* Halved from 40px: tight divider→cards spacing without crowding. */ - padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08); - } - @media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } } - .dm-prevnext-placeholder { display: block; } - .dm-prevnext-card { - display: flex; gap: 16px; align-items: center; padding: 16px; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; - } - .dm-prevnext-card:hover { - transform: translateY(-4px); border-color: rgba(192,18,39,0.2); - box-shadow: 0 16px 34px rgba(192,18,39,0.10); - } - .dm-prevnext-thumb { - position: relative; flex: 0 0 80px; width: 80px; height: 80px; - border-radius: 16px; overflow: hidden; background: #f1f5f9; - } - .dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; } - .dm-prevnext-next { text-align: right; } - .dm-prevnext-next .dm-prevnext-text { align-items: flex-end; } - .dm-prevnext-label { - display: inline-flex; align-items: center; gap: 6px; - font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red); - } - .dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; } - .dm-prevnext-title { - font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); } - - /* Related */ - .dm-related-heading { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important; - line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px; - } - .dm-related-grid { - display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; - } - @media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } } - @media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } } - - .dm-related-card { - display: flex; flex-direction: column; height: 100%; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none; - transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease; - } - .dm-related-card:hover { - transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13); - border-color: rgba(192,18,39,0.2); - } - .dm-related-img { - position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9; - } - .dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-img img { transform: scale(1.05); } - .dm-related-badge { - position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff; - font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px; - padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25); - } - .dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; } - .dm-related-card-title { - font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important; - letter-spacing: -.2px !important; margin: 0 0 10px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-related-card:hover .dm-related-card-title { color: var(--dm-red); } - .dm-related-card-excerpt { - font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - } - .dm-related-readmore { - margin-top: auto; display: inline-flex; align-items: center; gap: 7px; - font-size: 12.5px; font-weight: 800; color: var(--dm-red); - text-transform: uppercase; letter-spacing: .6px; - } - .dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); } - - /* Contact CTA banner */ - .dm-blog-contact-cta { - display: flex; align-items: center; justify-content: space-between; gap: 32px; - flex-wrap: wrap; - background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%); - border-radius: 30px; padding: clamp(32px, 4vw, 56px); - position: relative; overflow: hidden; - } - .dm-blog-contact-cta::after { - content: ""; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px; - background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%); - pointer-events: none; - } - .dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; } - .dm-blog-contact-eyebrow { - display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase; - letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px; - } - .dm-blog-contact-title { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important; - letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance; - } - .dm-blog-contact-sub { - font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450; - } - .dm-blog-contact-btn { - position: relative; z-index: 1; flex-shrink: 0; - display: inline-flex; align-items: center; justify-content: center; gap: 10px; - background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700; - padding: 16px 32px; border-radius: 16px; text-decoration: none; - box-shadow: 0 10px 26px rgba(192,18,39,0.34); - transition: background .2s ease, transform .2s ease; - } - .dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } - @media (max-width: 720px) { - .dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; } - .dm-blog-contact-btn { width: 100%; } - } -1a:["$","section",null,{"className":"dm-blog-footer","aria-label":"More articles","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$26"}}],"$L27"]}] -28:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"Image"] -29:I[23096,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"default"] -1d:["$","$L1c","7",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"During peak traffic hours in Hyderabad, some vehicles were arriving 20 to 30 minutes later than planned. By adjusting routes based on live traffic and battery levels, we reduced missed delivery windows and improved on-time performance."}]}] -1e:["$","$L1c","8",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","figure",null,{"className":"dm-article-figure","children":[["$","span",null,{"className":"dm-article-figure-img","children":["$","$L28",null,{"src":"/images/last-mile-approach.webp","alt":"Hyderabad delivery hub routing analysis","fill":true,"sizes":"(max-width: 768px) 100vw, 760px","style":{"objectFit":"cover"}}]}],["$","figcaption",null,{"children":"Planning the day's deliveries together removed repeated cross-town travel."}]]}]}] -1f:["$","$L1c","9",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"The results"}]}] -20:["$","$L1c","10",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"42% reduction in total distance travelled across the hub"}],["$","li","1",{"children":"37% fewer vehicles required for the same delivery volume"}],["$","li","2",{"children":"No SLA misses during the measured deployment window"}],["$","li","3",{"children":"Lower fuel use and fewer unnecessary kilometres per parcel"}]]}]}] -21:["$","$L1c","11",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","blockquote",null,{"className":"dm-article-quote","children":[["$","p",null,{"children":"The improvement did not come from asking riders to work harder. It came from giving the team a better route plan before the vehicles left."}],["$","cite",null,{"children":"Hyderabad Hub Operations"}]]}]}] -22:["$","$L1c","12",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"Why this applies beyond one hub"}]}] -23:["$","$L1c","13",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The Hyderabad result was not a one-city exception. Most hubs deal with the same issues: overlapping routes, conservative sequencing, traffic surprises, charging constraints, and last-minute order changes."}]}] -24:["$","$L1c","14",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"A 42% cut in distance changes the cost of running the operation. It also gives dispatchers more breathing room when the day gets messy."}]}] -25:["$","div",null,{"className":"dm-blog-aside-wrap","children":["$","aside",null,{"className":"dm-blog-sidebar","aria-label":"Blog sidebar","children":[["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Search"}],["$","$L29",null,{}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Recent Posts"}],["$","ul",null,{"className":"dm-blog-recent","children":[["$","li","how-ai-is-transforming-last-mile-ev-delivery",{"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L28",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","time",null,{"dateTime":"2025-10-02","className":"dm-blog-recent-date","children":"Oct 2, 2025"}]]}]]}]}],["$","li","miletruth-ai-10-stages-to-smarter-dispatch",{"children":["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L28",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","time",null,{"dateTime":"2025-09-05","className":"dm-blog-recent-date","children":"Sep 5, 2025"}]]}]]}]}],["$","li","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"children":["$","$L1b",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L28",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","time",null,{"dateTime":"2025-08-21","className":"dm-blog-recent-date","children":"Aug 21, 2025"}]]}]]}]}],["$","li","why-mathematical-precision-beats-heuristics-in-routing",{"children":["$","$L1b",null,{"href":"/blog/why-mathematical-precision-beats-heuristics-in-routing","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L28",null,{"src":"/images/blog-post-pic-14.webp","alt":"Why Mathematical Precision Beats Heuristics in Routing","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"Why Mathematical Precision Beats Heuristics in Routing"}],["$","time",null,{"dateTime":"2025-08-07","className":"dm-blog-recent-date","children":"Aug 7, 2025"}]]}]]}]}]]}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Categories"}],["$","ul",null,{"className":"dm-blog-categories","children":[["$","li","Case Study",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Case Study"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","EV Fleet",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"EV Fleet"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}],["$","li","Fleet Management",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Fleet Management"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","MileTruth",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"MileTruth"}],"$L2a"]}]}],"$L2b","$L2c","$L2d"]}]]}],"$L2e"]}]}] -27:["$","div",null,{"className":"dm-blog-footer-inner","children":[["$","nav",null,{"className":"dm-prevnext","aria-label":"Article navigation","children":[["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-prevnext-card dm-prevnext-prev","children":[["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L28",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"19","y1":"12","x2":"5","y2":"12"}],["$","polyline",null,{"points":"12 19 5 12 12 5"}]]}],"Previous"]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Technology"}],["$","span",null,{"className":"dm-prevnext-title","children":"How Better Planning Improves Last-Mile EV Delivery"}]]}]]}],["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-prevnext-card dm-prevnext-next","children":[["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":["Next",["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","span",null,{"className":"dm-prevnext-cat","children":"MileTruth"}],["$","span",null,{"className":"dm-prevnext-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}]]}],["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L28",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}]]}]]}],["$","div",null,{"className":"dm-related","children":[["$","h2",null,{"className":"dm-related-heading","children":"Related Articles"}],["$","div",null,{"className":"dm-related-grid","children":[["$","$L1c","how-ai-is-transforming-last-mile-ev-delivery",{"delay":0,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L28",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Technology"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L1c","miletruth-ai-10-stages-to-smarter-dispatch",{"delay":0.08,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L28",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"MileTruth"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],"$L2f","$L30"]}]]}]}],"$L31"]}]]}],"$L32"]}] -2a:["$","span",null,{"className":"dm-blog-category-count","children":1}] -2b:["$","li","Operations",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Operations"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2c:["$","li","Sustainability",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Sustainability"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2d:["$","li","Technology",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Technology"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}] -2e:["$","section",null,{"className":"dm-blog-widget dm-blog-cta-card","children":[["$","h2",null,{"className":"dm-blog-cta-title","children":"Planning delivery routes?"}],["$","p",null,{"className":"dm-blog-cta-text","children":"Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time."}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-cta-btn","children":["Contact Us",["$","svg",null,{"width":"18","height":"18","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -2f:["$","p",null,{"className":"dm-related-card-excerpt","children":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}] -30:["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}] -31:["$","$L1c","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"delay":0.16,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L28",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"EV Fleet"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"Electric vehicles lower running costs, but battery range changes how routes must be planned before dispatch."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}] -32:["$","div",null,{"className":"dm-blog-contact-cta","children":[["$","div",null,{"className":"dm-blog-contact-cta-content","children":[["$","span",null,{"className":"dm-blog-contact-eyebrow","children":"Let's talk logistics"}],["$","h2",null,{"className":"dm-blog-contact-title","children":"Ready to move smarter with Doormile?"}],["$","p",null,{"className":"dm-blog-contact-sub","children":"Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding."}]]}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-contact-btn","children":["Get in Touch",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -12:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -33:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -f:null -14:[["$","title","0",{"children":"42% Less Distance: Insights from Our Hyderabad Hub – Doormile"}],["$","meta","1",{"name":"description","content":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}],["$","meta","2",{"name":"author","content":"Doormile Team"}],["$","meta","3",{"name":"keywords","content":"Case Study,last-mile logistics,EV fleet,MileTruth,route optimisation"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","link","5",{"rel":"canonical","href":"https://www.doormile.com/blog/42-less-distance-insights-from-our-hyderabad-hub"}],["$","meta","6",{"property":"og:title","content":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","meta","7",{"property":"og:description","content":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}],["$","meta","8",{"property":"og:url","content":"https://www.doormile.com/blog/42-less-distance-insights-from-our-hyderabad-hub"}],["$","meta","9",{"property":"og:site_name","content":"Doormile"}],["$","meta","10",{"property":"og:image","content":"https://www.doormile.com/images/blog-post-pic-15.webp"}],["$","meta","11",{"property":"og:image:alt","content":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","meta","12",{"property":"og:type","content":"article"}],["$","meta","13",{"property":"article:published_time","content":"2025-09-18T00:00:00.000Z"}],["$","meta","14",{"property":"article:author","content":"Doormile Team"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","meta","17",{"name":"twitter:description","content":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}],["$","meta","18",{"name":"twitter:image","content":"https://www.doormile.com/images/blog-post-pic-15.webp"}],["$","link","19",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","21",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","22",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L33","23",{}]] diff --git a/build/blog/42-less-distance-insights-from-our-hyderabad-hub/__next._full.txt b/build/blog/42-less-distance-insights-from-our-hyderabad-hub/__next._full.txt deleted file mode 100644 index d8c37fe..0000000 --- a/build/blog/42-less-distance-insights-from-our-hyderabad-hub/__next._full.txt +++ /dev/null @@ -1,547 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -d:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -e:"$Sreact.suspense" -11:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -13:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -15:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","blog","42-less-distance-insights-from-our-hyderabad-hub"],"q":"","i":false,"f":[[["",{"children":["blog",{"children":[["slug","42-less-distance-insights-from-our-hyderabad-hub","d",null],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":["$Lc",[["$","script","script-0",{"src":"/_next/static/chunks/0yvxf3ok9gcp_.js","async":true,"nonce":"$undefined"}]],["$","$Ld",null,{"children":["$","$e",null,{"name":"Next.MetadataOutlet","children":"$@f"}]}]]}],{},null,false,null]},null,false,"$@10"]},null,false,"$@10"]},null,false,null],["$","$1","h",{"children":[null,["$","$L11",null,{"children":"$L12"}],["$","div",null,{"hidden":true,"children":["$","$L13",null,{"children":["$","$e",null,{"name":"Next.Metadata","children":"$L14"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$15",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -16:[] -10:"$W16" -:HL["/images/blog-post-pic-15.webp","image"] -17:T3d6f, - .dm-single-blog { - --dm-red: #c01227; - --dm-red-hover: #e31d32; - --dm-radius-card: 22px; - --dm-radius-img: 20px; - --dm-radius-badge: 8px; - --dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05); - --dm-border: 1px solid rgba(15, 23, 42, 0.09); - --dm-space-p: 24px; - --dm-space-h: 32px; - --dm-space-img: 32px; - --dm-space-quote: 40px; - --dm-sticky-top: 138px; - --dm-measure: min(1100px, 100%); - font-family: var(--font-manrope), sans-serif; - } - - /* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6 - (120/80/60px UPPERCASE) rules with !important on our own classes. */ - .dm-single-blog :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline, - specificity 0-1-1) so blog links keep our colors and never get underlined. */ - .dm-single-blog a { text-decoration: none !important; } - - /* Page banner: tall homepage-scale frame with only badge + title inside */ - /* Compound selector (specificity 20) + !important beats the global 800px - single-class height rules so the blog banner can use viewport heights. */ - .custom-standard-hero-card.dm-banner-card { - height: 90vh !important; - min-height: 85vh !important; - } - @media (max-width: 1024px) { - .custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; } - } - @media (max-width: 600px) { - .custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; } - } - - .dm-banner-inner { - position: relative; width: 100%; height: 100%; - display: flex; flex-direction: column; align-items: center; justify-content: center; - text-align: center; gap: clamp(22px, 2.6vw, 34px); - padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px); - } - - .dm-banner-category { - display: inline-block; background: var(--dm-red); color: #fff; - font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px; - padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45); - } - .dm-banner-title { - font-family: var(--font-manrope), sans-serif !important; - font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important; - line-height: 1.16 !important; letter-spacing: -1.2px !important; - color: #ffffff !important; margin: 0; max-width: 820px; - text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38); - } - @media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } } - @media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } } - - /* Content wrap begins immediately below the banner */ - /* Shared content container: the SAME max-width + horizontal padding is used - by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings, - images, Prev/Next, Related Articles and the CTA banner all align to one - grid with identical left/right edges. Keep both in sync. */ - .dm-blog-wrap { - max-width: 1280px; margin: 0 auto; - /* 20px mobile padding floor → 40px on desktop; matches the footer container. */ - padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0; - } - @media (max-width: 767px) { - .dm-blog-wrap { - padding-left: 16px; - padding-right: 16px; - } - } - - /* ── Article meta bar (directly under the hero) ── */ - .dm-meta-bar { - display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px; - padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px); - border-bottom: 1px solid rgba(15,23,42,0.10); - } - .dm-meta-breadcrumb ol { - list-style: none; display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b; - } - .dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; } - .dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; } - .dm-meta-sep { color: #cbd5e1; } - .dm-meta-current { - color: #0f172a; font-weight: 700; - max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - } - @media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } } - .dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; } - .dm-meta-item { - display: inline-flex; align-items: center; gap: 7px; - font-size: 13.5px; font-weight: 600; color: #475569; - } - .dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; } - .dm-meta-author { color: #0f172a; font-weight: 700; } - @media (max-width: 600px) { .dm-meta-bar { gap: 12px; } } - .dm-blog-layout { - display: grid; grid-template-columns: minmax(0,1fr) 320px; - /* Tighter gap gives the reading column more room next to the 320px sidebar. */ - gap: clamp(28px, 3vw, 56px); align-items: start; - } - @media (max-width: 1024px) { - .dm-blog-layout { grid-template-columns: 1fr; gap: 48px; } - /* Single-column (tablet/mobile): cap the reading column and centre it so the - article never sits left-aligned with a large empty right gutter. */ - .dm-blog-main { max-width: 900px; margin-inline: auto; } - } - .dm-blog-main { min-width: 0; } - - /* ── Intro lead ── */ - .dm-blog-intro { - max-width: var(--dm-measure); - font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500; - color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px; - border-left: 3px solid var(--dm-red); - } - - /* ── Article body ── */ - .dm-article-body { max-width: var(--dm-measure); } - .dm-article-p { - font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450; - margin: 0 0 var(--dm-space-p); - } - .dm-article-h2 { - font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important; - color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h); - text-wrap: balance; - } - /* Each article block is wrapped in its OWN ScrollReveal
    , so a bare - :first-child rule matched every heading (each is the only child of its - wrapper) and zeroed its top margin, collapsing the gap above every - section heading. Scope the reset to only the article body's first block. */ - .dm-article-body > :first-child :where(.dm-article-h2, .dm-article-h3), - .dm-article-body > .dm-article-h2:first-child, - .dm-article-body > .dm-article-h3:first-child { margin-top: 0; } - .dm-article-h3 { - font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important; - color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px; - text-wrap: balance; - } - @media (max-width: 600px) { - .dm-article-p { font-size: 16px !important; } - .dm-article-ul li, .dm-article-ol li { font-size: 15.5px; } - .dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; } - .dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; } - } - - .dm-article-ul, .dm-article-ol { - /* Top margin (was 0) separates the list from the paragraph above it; - matching bottom margin keeps it clear of the next heading/paragraph. - Slightly larger than --dm-space-p so the list reads as its own block. */ - margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px); - padding-left: 2px; list-style: none; - display: flex; flex-direction: column; gap: 15px; - } - /* Prefixed with .dm-article-body so these beat the theme's global - ".logico-front-end ul li:before" fontello-glyph bullet (specificity 0,1,3), - which otherwise replaces our clean red dot with a misaligned checkmark glyph - and adds its own 1.7em indent. */ - .dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li { - position: relative; padding-left: 34px; - font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450; - } - .dm-article-body .dm-article-ul li::before { - content: ""; position: absolute; left: 7px; top: 10px; - width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red); - /* kill any inherited fontello glyph from the global rule */ - font-size: 0; line-height: 0; - } - .dm-article-ol { counter-reset: dm-li; } - .dm-article-body .dm-article-ol li { counter-increment: dm-li; } - .dm-article-body .dm-article-ol li::before { - content: counter(dm-li); position: absolute; left: 0; top: 0; - width: 24px; height: 24px; border-radius: 7px; - background: rgba(192,18,39,0.10); color: var(--dm-red); - font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; - } - - /* ── Quote ── */ - .dm-article-quote { - position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px; - background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%); - border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0; - box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06); - } - .dm-article-quote::before { - content: "\201C"; position: absolute; left: 22px; top: 8px; - font-family: Georgia, "Times New Roman", serif; - font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700; - } - .dm-article-quote p { - font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600; - font-style: italic; color: #1e293b; margin: 0; - } - .dm-article-quote cite { - display: block; margin-top: 16px; font-size: 13px; font-weight: 700; - font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px; - } - @media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } } - - /* ── Images ── */ - .dm-article-figure { margin: var(--dm-space-img) 0; } - .dm-article-figure-img { - position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; - border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10); - } - .dm-article-figure figcaption { - margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500; - text-align: center; font-style: italic; - } - - /* ── Sidebar ── */ - .dm-blog-aside-wrap { position: relative; } - .dm-blog-sidebar { - display: flex; flex-direction: column; gap: 18px; - position: sticky; top: var(--dm-sticky-top); - } - @media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } } - - .dm-blog-widget { - background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card); - padding: 20px; box-shadow: var(--dm-shadow-card); - } - .dm-blog-widget-title { - font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important; - letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important; - margin: 0 0 15px; padding: 0 0 12px; - border-bottom: 1px solid rgba(15,23,42,0.08); - overflow: visible; white-space: normal; word-break: normal; - } - - /* Search */ - .dm-sr-only { - position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; - overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; - } - .dm-blog-search { position: relative; } - .dm-blog-search-form { position: relative; } - .dm-blog-search-input { - width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px; - padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a; - background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; - } - .dm-blog-search-input::placeholder { color: #9c9c9c; } - .dm-blog-search-input:focus { - outline: none; border-color: var(--dm-red); background: #fff; - box-shadow: 0 0 0 3px rgba(192,18,39,0.11); - } - .dm-blog-search-icon { - position: absolute; right: 14px; top: 50%; transform: translateY(-50%); - color: #94a3b8; pointer-events: none; display: flex; - } - .dm-blog-search-results { - position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0; - background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px; - box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden; - } - .dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; } - .dm-blog-search-result { - display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; - border-radius: 10px; text-decoration: none; transition: background .15s ease; - } - .dm-blog-search-result:hover { background: #f8fafc; } - .dm-blog-search-result-cat { - font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red); - } - .dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; } - .dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; } - - /* Recent posts */ - .dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; } - .dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; } - .dm-blog-recent-thumb { - position: relative; flex: 0 0 62px; width: 62px; height: 62px; - border-radius: 13px; overflow: hidden; background: #f1f5f9; - } - .dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; } - .dm-blog-recent-title { - font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); } - .dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; } - - /* Categories */ - .dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; } - .dm-blog-category-item { - display: flex; align-items: center; justify-content: space-between; gap: 10px; - padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important; - border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease; - } - .dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; } - .dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; } - .dm-blog-category-item > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .dm-blog-category-count { - flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9; - min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex; - align-items: center; justify-content: center; padding: 0 7px; - } - - /* CTA card */ - .dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; } - .dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; } - .dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; } - .dm-blog-cta-btn { - display: inline-flex; align-items: center; gap: 8px; - background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700; - padding: 12px 22px; border-radius: 12px; text-decoration: none; - transition: background .2s ease, transform .2s ease; - } - .dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } -c:["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"headline\":\"42% Less Distance: Insights from Our Hyderabad Hub\",\"description\":\"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning.\",\"image\":[\"https://www.doormile.com/images/blog-post-pic-15.webp\"],\"datePublished\":\"2025-09-18T00:00:00.000Z\",\"dateModified\":\"2025-09-18T00:00:00.000Z\",\"author\":{\"@type\":\"Organization\",\"name\":\"Doormile Team\",\"url\":\"https://www.doormile.com\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Doormile\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.doormile.com/images/cropped-image-2.png\"}},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.doormile.com/blog/42-less-distance-insights-from-our-hyderabad-hub\"},\"articleSection\":\"Case Study\"}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://www.doormile.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https://www.doormile.com/blog\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"42% Less Distance: Insights from Our Hyderabad Hub\",\"item\":\"https://www.doormile.com/blog/42-less-distance-insights-from-our-hyderabad-hub\"}]}"}}],["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":[["$","article",null,{"className":"dm-single-blog","children":[["$","link",null,{"rel":"preload","as":"image","href":"/images/blog-post-pic-15.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$17"}}],"$L18","$L19"]}],"$L1a"]}]}]]}] -1b:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],""] -1c:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"ScrollReveal"] -18:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card dm-banner-card","style":{"backgroundImage":"url(/images/blog-post-pic-15.webp)","--hero-overlay":"linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)"},"children":["$","div",null,{"className":"e-con-inner dm-banner-inner","children":[["$","span",null,{"className":"dm-banner-category","children":"Case Study"}],["$","h1",null,{"className":"dm-banner-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}]]}]}]}] -19:["$","div",null,{"className":"dm-blog-wrap","children":[["$","div",null,{"className":"dm-meta-bar","children":[["$","nav",null,{"className":"dm-meta-breadcrumb","aria-label":"Breadcrumb","children":["$","ol",null,{"children":[["$","li",null,{"children":["$","$L1b",null,{"href":"/","children":"Home"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"children":["$","$L1b",null,{"href":"/blog","children":"Blog"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"aria-current":"page","className":"dm-meta-current","children":"42% Less Distance: Insights from Our Hyderabad Hub"}]]}]}],["$","div",null,{"className":"dm-meta-items","children":[["$","span",null,{"className":"dm-meta-item dm-meta-author","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","path",null,{"d":"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}],["$","circle",null,{"cx":"12","cy":"7","r":"4"}]]}],"Doormile Team"]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"2"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}]]}],["$","time",null,{"dateTime":"2025-09-18","children":"Sep 18, 2025"}]]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","circle",null,{"cx":"12","cy":"12","r":"9"}],["$","polyline",null,{"points":"12 7 12 12 15 14"}]]}],2," min read"]}]]}]]}],["$","div",null,{"className":"dm-blog-layout","children":[["$","div",null,{"className":"dm-blog-main","children":[["$","p",null,{"className":"dm-blog-intro","children":"Numbers settle arguments. At our Hyderabad hub, the goal was simple: reduce avoidable distance without missing customer commitments. The result was a 42% reduction in total distance travelled."}],["$","div",null,{"className":"dm-article-body","children":[["$","$L1c","0",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Hyderabad is not an easy city for delivery planning. Dense commercial areas, fast-growing suburbs, flyover work, narrow service lanes, apartment security checks, and sudden traffic build-up can all change the day."}]}],["$","$L1c","1",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"The baseline"}]}],["$","$L1c","2",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Before MileTruth, the hub planned routes in the usual way. Zones were drawn from experience, dispatchers sequenced stops manually, and riders adjusted on the road when something changed."}]}],["$","$L1c","3",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"That process worked, but it carried hidden costs. Two riders might cross the same area in the same hour. A vehicle might take a longer loop to avoid one late stop. A dispatcher might hold back an order because the best vehicle was not obvious in the moment."}]}],["$","$L1c","4",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"Zone-based allocation that missed nearby cross-zone drops"}],["$","li","1",{"children":"Manual stop sequencing during busy dispatch windows"}],["$","li","2",{"children":"ETAs checked after routing instead of before dispatch"}],["$","li","3",{"children":"Traffic and delay handling that depended on phone calls from riders"}]]}]}],["$","$L1c","5",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"What changed"}]}],["$","$L1c","6",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The main change was treating the day's orders as one connected plan instead of separate zone lists. The route plan considered distance, rider capacity, delivery windows, traffic, and vehicle availability together."}]}],"$L1d","$L1e","$L1f","$L20","$L21","$L22","$L23","$L24"]}]]}],"$L25"]}]]}] -26:T2021, - .dm-blog-footer { - font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32; - /* The global theme applies 72px top/bottom section padding — strip it so the - inner container is the single source of vertical rhythm (no double gap). */ - padding: 0 !important; - } - /* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */ - .dm-blog-footer :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline) */ - .dm-blog-footer a { text-decoration: none !important; } - /* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px - max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA - align to the exact same left/right edges as the article body above. - Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a - consistent ~64–72px section→section gap (no 120px+ voids). */ - .dm-blog-footer-inner { - max-width: 1280px; margin: 0 auto; - /* Compact vertical rhythm on an 8px system. Top padding sets the - article→Prev/Next gap (~24–32px); the inter-section gap sets the - Prev/Next→Related gap (~32–48px). No large arbitrary voids. */ - /* Minimal bottom padding — the global site footer already contributes its - own 20px top inset, so the CTA banner sits close to it without a void. */ - padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px); - display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px); - } - @media (max-width: 767px) { - .dm-blog-footer-inner { - padding-left: 16px; - padding-right: 16px; - } - } - - /* Prev / Next */ - .dm-prevnext { - display: grid; grid-template-columns: 1fr 1fr; gap: 20px; - /* Halved from 40px: tight divider→cards spacing without crowding. */ - padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08); - } - @media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } } - .dm-prevnext-placeholder { display: block; } - .dm-prevnext-card { - display: flex; gap: 16px; align-items: center; padding: 16px; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; - } - .dm-prevnext-card:hover { - transform: translateY(-4px); border-color: rgba(192,18,39,0.2); - box-shadow: 0 16px 34px rgba(192,18,39,0.10); - } - .dm-prevnext-thumb { - position: relative; flex: 0 0 80px; width: 80px; height: 80px; - border-radius: 16px; overflow: hidden; background: #f1f5f9; - } - .dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; } - .dm-prevnext-next { text-align: right; } - .dm-prevnext-next .dm-prevnext-text { align-items: flex-end; } - .dm-prevnext-label { - display: inline-flex; align-items: center; gap: 6px; - font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red); - } - .dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; } - .dm-prevnext-title { - font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); } - - /* Related */ - .dm-related-heading { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important; - line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px; - } - .dm-related-grid { - display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; - } - @media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } } - @media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } } - - .dm-related-card { - display: flex; flex-direction: column; height: 100%; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none; - transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease; - } - .dm-related-card:hover { - transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13); - border-color: rgba(192,18,39,0.2); - } - .dm-related-img { - position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9; - } - .dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-img img { transform: scale(1.05); } - .dm-related-badge { - position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff; - font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px; - padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25); - } - .dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; } - .dm-related-card-title { - font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important; - letter-spacing: -.2px !important; margin: 0 0 10px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-related-card:hover .dm-related-card-title { color: var(--dm-red); } - .dm-related-card-excerpt { - font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - } - .dm-related-readmore { - margin-top: auto; display: inline-flex; align-items: center; gap: 7px; - font-size: 12.5px; font-weight: 800; color: var(--dm-red); - text-transform: uppercase; letter-spacing: .6px; - } - .dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); } - - /* Contact CTA banner */ - .dm-blog-contact-cta { - display: flex; align-items: center; justify-content: space-between; gap: 32px; - flex-wrap: wrap; - background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%); - border-radius: 30px; padding: clamp(32px, 4vw, 56px); - position: relative; overflow: hidden; - } - .dm-blog-contact-cta::after { - content: ""; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px; - background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%); - pointer-events: none; - } - .dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; } - .dm-blog-contact-eyebrow { - display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase; - letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px; - } - .dm-blog-contact-title { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important; - letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance; - } - .dm-blog-contact-sub { - font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450; - } - .dm-blog-contact-btn { - position: relative; z-index: 1; flex-shrink: 0; - display: inline-flex; align-items: center; justify-content: center; gap: 10px; - background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700; - padding: 16px 32px; border-radius: 16px; text-decoration: none; - box-shadow: 0 10px 26px rgba(192,18,39,0.34); - transition: background .2s ease, transform .2s ease; - } - .dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } - @media (max-width: 720px) { - .dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; } - .dm-blog-contact-btn { width: 100%; } - } -1a:["$","section",null,{"className":"dm-blog-footer","aria-label":"More articles","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$26"}}],"$L27"]}] -28:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"Image"] -29:I[23096,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"default"] -1d:["$","$L1c","7",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"During peak traffic hours in Hyderabad, some vehicles were arriving 20 to 30 minutes later than planned. By adjusting routes based on live traffic and battery levels, we reduced missed delivery windows and improved on-time performance."}]}] -1e:["$","$L1c","8",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","figure",null,{"className":"dm-article-figure","children":[["$","span",null,{"className":"dm-article-figure-img","children":["$","$L28",null,{"src":"/images/last-mile-approach.webp","alt":"Hyderabad delivery hub routing analysis","fill":true,"sizes":"(max-width: 768px) 100vw, 760px","style":{"objectFit":"cover"}}]}],["$","figcaption",null,{"children":"Planning the day's deliveries together removed repeated cross-town travel."}]]}]}] -1f:["$","$L1c","9",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"The results"}]}] -20:["$","$L1c","10",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"42% reduction in total distance travelled across the hub"}],["$","li","1",{"children":"37% fewer vehicles required for the same delivery volume"}],["$","li","2",{"children":"No SLA misses during the measured deployment window"}],["$","li","3",{"children":"Lower fuel use and fewer unnecessary kilometres per parcel"}]]}]}] -21:["$","$L1c","11",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","blockquote",null,{"className":"dm-article-quote","children":[["$","p",null,{"children":"The improvement did not come from asking riders to work harder. It came from giving the team a better route plan before the vehicles left."}],["$","cite",null,{"children":"Hyderabad Hub Operations"}]]}]}] -22:["$","$L1c","12",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"Why this applies beyond one hub"}]}] -23:["$","$L1c","13",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The Hyderabad result was not a one-city exception. Most hubs deal with the same issues: overlapping routes, conservative sequencing, traffic surprises, charging constraints, and last-minute order changes."}]}] -24:["$","$L1c","14",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"A 42% cut in distance changes the cost of running the operation. It also gives dispatchers more breathing room when the day gets messy."}]}] -25:["$","div",null,{"className":"dm-blog-aside-wrap","children":["$","aside",null,{"className":"dm-blog-sidebar","aria-label":"Blog sidebar","children":[["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Search"}],["$","$L29",null,{}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Recent Posts"}],["$","ul",null,{"className":"dm-blog-recent","children":[["$","li","how-ai-is-transforming-last-mile-ev-delivery",{"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L28",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","time",null,{"dateTime":"2025-10-02","className":"dm-blog-recent-date","children":"Oct 2, 2025"}]]}]]}]}],["$","li","miletruth-ai-10-stages-to-smarter-dispatch",{"children":["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L28",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","time",null,{"dateTime":"2025-09-05","className":"dm-blog-recent-date","children":"Sep 5, 2025"}]]}]]}]}],["$","li","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"children":["$","$L1b",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L28",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","time",null,{"dateTime":"2025-08-21","className":"dm-blog-recent-date","children":"Aug 21, 2025"}]]}]]}]}],["$","li","why-mathematical-precision-beats-heuristics-in-routing",{"children":["$","$L1b",null,{"href":"/blog/why-mathematical-precision-beats-heuristics-in-routing","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L28",null,{"src":"/images/blog-post-pic-14.webp","alt":"Why Mathematical Precision Beats Heuristics in Routing","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"Why Mathematical Precision Beats Heuristics in Routing"}],["$","time",null,{"dateTime":"2025-08-07","className":"dm-blog-recent-date","children":"Aug 7, 2025"}]]}]]}]}]]}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Categories"}],["$","ul",null,{"className":"dm-blog-categories","children":[["$","li","Case Study",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Case Study"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","EV Fleet",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"EV Fleet"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}],["$","li","Fleet Management",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Fleet Management"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","MileTruth",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"MileTruth"}],"$L2a"]}]}],"$L2b","$L2c","$L2d"]}]]}],"$L2e"]}]}] -27:["$","div",null,{"className":"dm-blog-footer-inner","children":[["$","nav",null,{"className":"dm-prevnext","aria-label":"Article navigation","children":[["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-prevnext-card dm-prevnext-prev","children":[["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L28",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"19","y1":"12","x2":"5","y2":"12"}],["$","polyline",null,{"points":"12 19 5 12 12 5"}]]}],"Previous"]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Technology"}],["$","span",null,{"className":"dm-prevnext-title","children":"How Better Planning Improves Last-Mile EV Delivery"}]]}]]}],["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-prevnext-card dm-prevnext-next","children":[["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":["Next",["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","span",null,{"className":"dm-prevnext-cat","children":"MileTruth"}],["$","span",null,{"className":"dm-prevnext-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}]]}],["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L28",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}]]}]]}],["$","div",null,{"className":"dm-related","children":[["$","h2",null,{"className":"dm-related-heading","children":"Related Articles"}],["$","div",null,{"className":"dm-related-grid","children":[["$","$L1c","how-ai-is-transforming-last-mile-ev-delivery",{"delay":0,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L28",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Technology"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L1c","miletruth-ai-10-stages-to-smarter-dispatch",{"delay":0.08,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L28",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"MileTruth"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],"$L2f","$L30"]}]]}]}],"$L31"]}]]}],"$L32"]}] -2a:["$","span",null,{"className":"dm-blog-category-count","children":1}] -2b:["$","li","Operations",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Operations"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2c:["$","li","Sustainability",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Sustainability"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2d:["$","li","Technology",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Technology"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}] -2e:["$","section",null,{"className":"dm-blog-widget dm-blog-cta-card","children":[["$","h2",null,{"className":"dm-blog-cta-title","children":"Planning delivery routes?"}],["$","p",null,{"className":"dm-blog-cta-text","children":"Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time."}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-cta-btn","children":["Contact Us",["$","svg",null,{"width":"18","height":"18","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -2f:["$","p",null,{"className":"dm-related-card-excerpt","children":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}] -30:["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}] -31:["$","$L1c","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"delay":0.16,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L28",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"EV Fleet"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"Electric vehicles lower running costs, but battery range changes how routes must be planned before dispatch."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}] -32:["$","div",null,{"className":"dm-blog-contact-cta","children":[["$","div",null,{"className":"dm-blog-contact-cta-content","children":[["$","span",null,{"className":"dm-blog-contact-eyebrow","children":"Let's talk logistics"}],["$","h2",null,{"className":"dm-blog-contact-title","children":"Ready to move smarter with Doormile?"}],["$","p",null,{"className":"dm-blog-contact-sub","children":"Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding."}]]}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-contact-btn","children":["Get in Touch",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -12:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -33:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -f:null -14:[["$","title","0",{"children":"42% Less Distance: Insights from Our Hyderabad Hub – Doormile"}],["$","meta","1",{"name":"description","content":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}],["$","meta","2",{"name":"author","content":"Doormile Team"}],["$","meta","3",{"name":"keywords","content":"Case Study,last-mile logistics,EV fleet,MileTruth,route optimisation"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","link","5",{"rel":"canonical","href":"https://www.doormile.com/blog/42-less-distance-insights-from-our-hyderabad-hub"}],["$","meta","6",{"property":"og:title","content":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","meta","7",{"property":"og:description","content":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}],["$","meta","8",{"property":"og:url","content":"https://www.doormile.com/blog/42-less-distance-insights-from-our-hyderabad-hub"}],["$","meta","9",{"property":"og:site_name","content":"Doormile"}],["$","meta","10",{"property":"og:image","content":"https://www.doormile.com/images/blog-post-pic-15.webp"}],["$","meta","11",{"property":"og:image:alt","content":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","meta","12",{"property":"og:type","content":"article"}],["$","meta","13",{"property":"article:published_time","content":"2025-09-18T00:00:00.000Z"}],["$","meta","14",{"property":"article:author","content":"Doormile Team"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","meta","17",{"name":"twitter:description","content":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}],["$","meta","18",{"name":"twitter:image","content":"https://www.doormile.com/images/blog-post-pic-15.webp"}],["$","link","19",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","21",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","22",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L33","23",{}]] diff --git a/build/blog/42-less-distance-insights-from-our-hyderabad-hub/__next._head.txt b/build/blog/42-less-distance-insights-from-our-hyderabad-hub/__next._head.txt deleted file mode 100644 index 28a70ee..0000000 --- a/build/blog/42-less-distance-insights-from-our-hyderabad-hub/__next._head.txt +++ /dev/null @@ -1,6 +0,0 @@ -1:"$Sreact.fragment" -2:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -3:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -4:"$Sreact.suspense" -5:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"42% Less Distance: Insights from Our Hyderabad Hub – Doormile"}],["$","meta","1",{"name":"description","content":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}],["$","meta","2",{"name":"author","content":"Doormile Team"}],["$","meta","3",{"name":"keywords","content":"Case Study,last-mile logistics,EV fleet,MileTruth,route optimisation"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","link","5",{"rel":"canonical","href":"https://www.doormile.com/blog/42-less-distance-insights-from-our-hyderabad-hub"}],["$","meta","6",{"property":"og:title","content":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","meta","7",{"property":"og:description","content":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}],["$","meta","8",{"property":"og:url","content":"https://www.doormile.com/blog/42-less-distance-insights-from-our-hyderabad-hub"}],["$","meta","9",{"property":"og:site_name","content":"Doormile"}],["$","meta","10",{"property":"og:image","content":"https://www.doormile.com/images/blog-post-pic-15.webp"}],["$","meta","11",{"property":"og:image:alt","content":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","meta","12",{"property":"og:type","content":"article"}],["$","meta","13",{"property":"article:published_time","content":"2025-09-18T00:00:00.000Z"}],["$","meta","14",{"property":"article:author","content":"Doormile Team"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","meta","17",{"name":"twitter:description","content":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}],["$","meta","18",{"name":"twitter:image","content":"https://www.doormile.com/images/blog-post-pic-15.webp"}],["$","link","19",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","21",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","22",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L5","23",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/42-less-distance-insights-from-our-hyderabad-hub/__next._index.txt b/build/blog/42-less-distance-insights-from-our-hyderabad-hub/__next._index.txt deleted file mode 100644 index d0b3355..0000000 --- a/build/blog/42-less-distance-insights-from-our-hyderabad-hub/__next._index.txt +++ /dev/null @@ -1,15 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","template":["$","$La",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/42-less-distance-insights-from-our-hyderabad-hub/__next._tree.txt b/build/blog/42-less-distance-insights-from-our-hyderabad-hub/__next._tree.txt deleted file mode 100644 index 298e353..0000000 --- a/build/blog/42-less-distance-insights-from-our-hyderabad-hub/__next._tree.txt +++ /dev/null @@ -1,10 +0,0 @@ -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -:HL["/images/blog-post-pic-15.webp","image"] -0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"blog","param":null,"prefetchHints":0,"slots":{"children":{"name":"slug","param":{"type":"d","key":"42-less-distance-insights-from-our-hyderabad-hub","siblings":null},"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/42-less-distance-insights-from-our-hyderabad-hub/__next.blog.$d$slug.__PAGE__.txt b/build/blog/42-less-distance-insights-from-our-hyderabad-hub/__next.blog.$d$slug.__PAGE__.txt deleted file mode 100644 index 846d9a3..0000000 --- a/build/blog/42-less-distance-insights-from-our-hyderabad-hub/__next.blog.$d$slug.__PAGE__.txt +++ /dev/null @@ -1,522 +0,0 @@ -1:"$Sreact.fragment" -8:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],""] -9:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"ScrollReveal"] -15:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -16:"$Sreact.suspense" -18:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"Image"] -19:I[23096,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"default"] -:HL["/images/blog-post-pic-15.webp","image"] -2:T3d6f, - .dm-single-blog { - --dm-red: #c01227; - --dm-red-hover: #e31d32; - --dm-radius-card: 22px; - --dm-radius-img: 20px; - --dm-radius-badge: 8px; - --dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05); - --dm-border: 1px solid rgba(15, 23, 42, 0.09); - --dm-space-p: 24px; - --dm-space-h: 32px; - --dm-space-img: 32px; - --dm-space-quote: 40px; - --dm-sticky-top: 138px; - --dm-measure: min(1100px, 100%); - font-family: var(--font-manrope), sans-serif; - } - - /* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6 - (120/80/60px UPPERCASE) rules with !important on our own classes. */ - .dm-single-blog :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline, - specificity 0-1-1) so blog links keep our colors and never get underlined. */ - .dm-single-blog a { text-decoration: none !important; } - - /* Page banner: tall homepage-scale frame with only badge + title inside */ - /* Compound selector (specificity 20) + !important beats the global 800px - single-class height rules so the blog banner can use viewport heights. */ - .custom-standard-hero-card.dm-banner-card { - height: 90vh !important; - min-height: 85vh !important; - } - @media (max-width: 1024px) { - .custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; } - } - @media (max-width: 600px) { - .custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; } - } - - .dm-banner-inner { - position: relative; width: 100%; height: 100%; - display: flex; flex-direction: column; align-items: center; justify-content: center; - text-align: center; gap: clamp(22px, 2.6vw, 34px); - padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px); - } - - .dm-banner-category { - display: inline-block; background: var(--dm-red); color: #fff; - font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px; - padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45); - } - .dm-banner-title { - font-family: var(--font-manrope), sans-serif !important; - font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important; - line-height: 1.16 !important; letter-spacing: -1.2px !important; - color: #ffffff !important; margin: 0; max-width: 820px; - text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38); - } - @media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } } - @media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } } - - /* Content wrap begins immediately below the banner */ - /* Shared content container: the SAME max-width + horizontal padding is used - by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings, - images, Prev/Next, Related Articles and the CTA banner all align to one - grid with identical left/right edges. Keep both in sync. */ - .dm-blog-wrap { - max-width: 1280px; margin: 0 auto; - /* 20px mobile padding floor → 40px on desktop; matches the footer container. */ - padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0; - } - @media (max-width: 767px) { - .dm-blog-wrap { - padding-left: 16px; - padding-right: 16px; - } - } - - /* ── Article meta bar (directly under the hero) ── */ - .dm-meta-bar { - display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px; - padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px); - border-bottom: 1px solid rgba(15,23,42,0.10); - } - .dm-meta-breadcrumb ol { - list-style: none; display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b; - } - .dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; } - .dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; } - .dm-meta-sep { color: #cbd5e1; } - .dm-meta-current { - color: #0f172a; font-weight: 700; - max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - } - @media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } } - .dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; } - .dm-meta-item { - display: inline-flex; align-items: center; gap: 7px; - font-size: 13.5px; font-weight: 600; color: #475569; - } - .dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; } - .dm-meta-author { color: #0f172a; font-weight: 700; } - @media (max-width: 600px) { .dm-meta-bar { gap: 12px; } } - .dm-blog-layout { - display: grid; grid-template-columns: minmax(0,1fr) 320px; - /* Tighter gap gives the reading column more room next to the 320px sidebar. */ - gap: clamp(28px, 3vw, 56px); align-items: start; - } - @media (max-width: 1024px) { - .dm-blog-layout { grid-template-columns: 1fr; gap: 48px; } - /* Single-column (tablet/mobile): cap the reading column and centre it so the - article never sits left-aligned with a large empty right gutter. */ - .dm-blog-main { max-width: 900px; margin-inline: auto; } - } - .dm-blog-main { min-width: 0; } - - /* ── Intro lead ── */ - .dm-blog-intro { - max-width: var(--dm-measure); - font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500; - color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px; - border-left: 3px solid var(--dm-red); - } - - /* ── Article body ── */ - .dm-article-body { max-width: var(--dm-measure); } - .dm-article-p { - font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450; - margin: 0 0 var(--dm-space-p); - } - .dm-article-h2 { - font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important; - color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h); - text-wrap: balance; - } - /* Each article block is wrapped in its OWN ScrollReveal
    , so a bare - :first-child rule matched every heading (each is the only child of its - wrapper) and zeroed its top margin, collapsing the gap above every - section heading. Scope the reset to only the article body's first block. */ - .dm-article-body > :first-child :where(.dm-article-h2, .dm-article-h3), - .dm-article-body > .dm-article-h2:first-child, - .dm-article-body > .dm-article-h3:first-child { margin-top: 0; } - .dm-article-h3 { - font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important; - color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px; - text-wrap: balance; - } - @media (max-width: 600px) { - .dm-article-p { font-size: 16px !important; } - .dm-article-ul li, .dm-article-ol li { font-size: 15.5px; } - .dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; } - .dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; } - } - - .dm-article-ul, .dm-article-ol { - /* Top margin (was 0) separates the list from the paragraph above it; - matching bottom margin keeps it clear of the next heading/paragraph. - Slightly larger than --dm-space-p so the list reads as its own block. */ - margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px); - padding-left: 2px; list-style: none; - display: flex; flex-direction: column; gap: 15px; - } - /* Prefixed with .dm-article-body so these beat the theme's global - ".logico-front-end ul li:before" fontello-glyph bullet (specificity 0,1,3), - which otherwise replaces our clean red dot with a misaligned checkmark glyph - and adds its own 1.7em indent. */ - .dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li { - position: relative; padding-left: 34px; - font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450; - } - .dm-article-body .dm-article-ul li::before { - content: ""; position: absolute; left: 7px; top: 10px; - width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red); - /* kill any inherited fontello glyph from the global rule */ - font-size: 0; line-height: 0; - } - .dm-article-ol { counter-reset: dm-li; } - .dm-article-body .dm-article-ol li { counter-increment: dm-li; } - .dm-article-body .dm-article-ol li::before { - content: counter(dm-li); position: absolute; left: 0; top: 0; - width: 24px; height: 24px; border-radius: 7px; - background: rgba(192,18,39,0.10); color: var(--dm-red); - font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; - } - - /* ── Quote ── */ - .dm-article-quote { - position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px; - background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%); - border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0; - box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06); - } - .dm-article-quote::before { - content: "\201C"; position: absolute; left: 22px; top: 8px; - font-family: Georgia, "Times New Roman", serif; - font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700; - } - .dm-article-quote p { - font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600; - font-style: italic; color: #1e293b; margin: 0; - } - .dm-article-quote cite { - display: block; margin-top: 16px; font-size: 13px; font-weight: 700; - font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px; - } - @media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } } - - /* ── Images ── */ - .dm-article-figure { margin: var(--dm-space-img) 0; } - .dm-article-figure-img { - position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; - border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10); - } - .dm-article-figure figcaption { - margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500; - text-align: center; font-style: italic; - } - - /* ── Sidebar ── */ - .dm-blog-aside-wrap { position: relative; } - .dm-blog-sidebar { - display: flex; flex-direction: column; gap: 18px; - position: sticky; top: var(--dm-sticky-top); - } - @media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } } - - .dm-blog-widget { - background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card); - padding: 20px; box-shadow: var(--dm-shadow-card); - } - .dm-blog-widget-title { - font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important; - letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important; - margin: 0 0 15px; padding: 0 0 12px; - border-bottom: 1px solid rgba(15,23,42,0.08); - overflow: visible; white-space: normal; word-break: normal; - } - - /* Search */ - .dm-sr-only { - position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; - overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; - } - .dm-blog-search { position: relative; } - .dm-blog-search-form { position: relative; } - .dm-blog-search-input { - width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px; - padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a; - background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; - } - .dm-blog-search-input::placeholder { color: #9c9c9c; } - .dm-blog-search-input:focus { - outline: none; border-color: var(--dm-red); background: #fff; - box-shadow: 0 0 0 3px rgba(192,18,39,0.11); - } - .dm-blog-search-icon { - position: absolute; right: 14px; top: 50%; transform: translateY(-50%); - color: #94a3b8; pointer-events: none; display: flex; - } - .dm-blog-search-results { - position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0; - background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px; - box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden; - } - .dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; } - .dm-blog-search-result { - display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; - border-radius: 10px; text-decoration: none; transition: background .15s ease; - } - .dm-blog-search-result:hover { background: #f8fafc; } - .dm-blog-search-result-cat { - font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red); - } - .dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; } - .dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; } - - /* Recent posts */ - .dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; } - .dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; } - .dm-blog-recent-thumb { - position: relative; flex: 0 0 62px; width: 62px; height: 62px; - border-radius: 13px; overflow: hidden; background: #f1f5f9; - } - .dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; } - .dm-blog-recent-title { - font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); } - .dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; } - - /* Categories */ - .dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; } - .dm-blog-category-item { - display: flex; align-items: center; justify-content: space-between; gap: 10px; - padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important; - border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease; - } - .dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; } - .dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; } - .dm-blog-category-item > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .dm-blog-category-count { - flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9; - min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex; - align-items: center; justify-content: center; padding: 0 7px; - } - - /* CTA card */ - .dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; } - .dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; } - .dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; } - .dm-blog-cta-btn { - display: inline-flex; align-items: center; gap: 8px; - background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700; - padding: 12px 22px; border-radius: 12px; text-decoration: none; - transition: background .2s ease, transform .2s ease; - } - .dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } -0:{"rsc":["$","$1","c",{"children":[["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"headline\":\"42% Less Distance: Insights from Our Hyderabad Hub\",\"description\":\"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning.\",\"image\":[\"https://www.doormile.com/images/blog-post-pic-15.webp\"],\"datePublished\":\"2025-09-18T00:00:00.000Z\",\"dateModified\":\"2025-09-18T00:00:00.000Z\",\"author\":{\"@type\":\"Organization\",\"name\":\"Doormile Team\",\"url\":\"https://www.doormile.com\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Doormile\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.doormile.com/images/cropped-image-2.png\"}},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.doormile.com/blog/42-less-distance-insights-from-our-hyderabad-hub\"},\"articleSection\":\"Case Study\"}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://www.doormile.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https://www.doormile.com/blog\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"42% Less Distance: Insights from Our Hyderabad Hub\",\"item\":\"https://www.doormile.com/blog/42-less-distance-insights-from-our-hyderabad-hub\"}]}"}}],["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":[["$","article",null,{"className":"dm-single-blog","children":[["$","link",null,{"rel":"preload","as":"image","href":"/images/blog-post-pic-15.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$2"}}],"$L3","$L4"]}],"$L5"]}]}]]}],["$L6"],"$L7"]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} -3:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card dm-banner-card","style":{"backgroundImage":"url(/images/blog-post-pic-15.webp)","--hero-overlay":"linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)"},"children":["$","div",null,{"className":"e-con-inner dm-banner-inner","children":[["$","span",null,{"className":"dm-banner-category","children":"Case Study"}],["$","h1",null,{"className":"dm-banner-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}]]}]}]}] -4:["$","div",null,{"className":"dm-blog-wrap","children":[["$","div",null,{"className":"dm-meta-bar","children":[["$","nav",null,{"className":"dm-meta-breadcrumb","aria-label":"Breadcrumb","children":["$","ol",null,{"children":[["$","li",null,{"children":["$","$L8",null,{"href":"/","children":"Home"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"children":["$","$L8",null,{"href":"/blog","children":"Blog"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"aria-current":"page","className":"dm-meta-current","children":"42% Less Distance: Insights from Our Hyderabad Hub"}]]}]}],["$","div",null,{"className":"dm-meta-items","children":[["$","span",null,{"className":"dm-meta-item dm-meta-author","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","path",null,{"d":"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}],["$","circle",null,{"cx":"12","cy":"7","r":"4"}]]}],"Doormile Team"]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"2"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}]]}],["$","time",null,{"dateTime":"2025-09-18","children":"Sep 18, 2025"}]]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","circle",null,{"cx":"12","cy":"12","r":"9"}],["$","polyline",null,{"points":"12 7 12 12 15 14"}]]}],2," min read"]}]]}]]}],["$","div",null,{"className":"dm-blog-layout","children":[["$","div",null,{"className":"dm-blog-main","children":[["$","p",null,{"className":"dm-blog-intro","children":"Numbers settle arguments. At our Hyderabad hub, the goal was simple: reduce avoidable distance without missing customer commitments. The result was a 42% reduction in total distance travelled."}],["$","div",null,{"className":"dm-article-body","children":[["$","$L9","0",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Hyderabad is not an easy city for delivery planning. Dense commercial areas, fast-growing suburbs, flyover work, narrow service lanes, apartment security checks, and sudden traffic build-up can all change the day."}]}],["$","$L9","1",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"The baseline"}]}],["$","$L9","2",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Before MileTruth, the hub planned routes in the usual way. Zones were drawn from experience, dispatchers sequenced stops manually, and riders adjusted on the road when something changed."}]}],["$","$L9","3",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"That process worked, but it carried hidden costs. Two riders might cross the same area in the same hour. A vehicle might take a longer loop to avoid one late stop. A dispatcher might hold back an order because the best vehicle was not obvious in the moment."}]}],["$","$L9","4",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"Zone-based allocation that missed nearby cross-zone drops"}],["$","li","1",{"children":"Manual stop sequencing during busy dispatch windows"}],["$","li","2",{"children":"ETAs checked after routing instead of before dispatch"}],["$","li","3",{"children":"Traffic and delay handling that depended on phone calls from riders"}]]}]}],["$","$L9","5",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"What changed"}]}],["$","$L9","6",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The main change was treating the day's orders as one connected plan instead of separate zone lists. The route plan considered distance, rider capacity, delivery windows, traffic, and vehicle availability together."}]}],"$La","$Lb","$Lc","$Ld","$Le","$Lf","$L10","$L11"]}]]}],"$L12"]}]]}] -13:T2021, - .dm-blog-footer { - font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32; - /* The global theme applies 72px top/bottom section padding — strip it so the - inner container is the single source of vertical rhythm (no double gap). */ - padding: 0 !important; - } - /* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */ - .dm-blog-footer :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline) */ - .dm-blog-footer a { text-decoration: none !important; } - /* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px - max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA - align to the exact same left/right edges as the article body above. - Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a - consistent ~64–72px section→section gap (no 120px+ voids). */ - .dm-blog-footer-inner { - max-width: 1280px; margin: 0 auto; - /* Compact vertical rhythm on an 8px system. Top padding sets the - article→Prev/Next gap (~24–32px); the inter-section gap sets the - Prev/Next→Related gap (~32–48px). No large arbitrary voids. */ - /* Minimal bottom padding — the global site footer already contributes its - own 20px top inset, so the CTA banner sits close to it without a void. */ - padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px); - display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px); - } - @media (max-width: 767px) { - .dm-blog-footer-inner { - padding-left: 16px; - padding-right: 16px; - } - } - - /* Prev / Next */ - .dm-prevnext { - display: grid; grid-template-columns: 1fr 1fr; gap: 20px; - /* Halved from 40px: tight divider→cards spacing without crowding. */ - padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08); - } - @media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } } - .dm-prevnext-placeholder { display: block; } - .dm-prevnext-card { - display: flex; gap: 16px; align-items: center; padding: 16px; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; - } - .dm-prevnext-card:hover { - transform: translateY(-4px); border-color: rgba(192,18,39,0.2); - box-shadow: 0 16px 34px rgba(192,18,39,0.10); - } - .dm-prevnext-thumb { - position: relative; flex: 0 0 80px; width: 80px; height: 80px; - border-radius: 16px; overflow: hidden; background: #f1f5f9; - } - .dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; } - .dm-prevnext-next { text-align: right; } - .dm-prevnext-next .dm-prevnext-text { align-items: flex-end; } - .dm-prevnext-label { - display: inline-flex; align-items: center; gap: 6px; - font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red); - } - .dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; } - .dm-prevnext-title { - font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); } - - /* Related */ - .dm-related-heading { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important; - line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px; - } - .dm-related-grid { - display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; - } - @media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } } - @media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } } - - .dm-related-card { - display: flex; flex-direction: column; height: 100%; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none; - transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease; - } - .dm-related-card:hover { - transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13); - border-color: rgba(192,18,39,0.2); - } - .dm-related-img { - position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9; - } - .dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-img img { transform: scale(1.05); } - .dm-related-badge { - position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff; - font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px; - padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25); - } - .dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; } - .dm-related-card-title { - font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important; - letter-spacing: -.2px !important; margin: 0 0 10px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-related-card:hover .dm-related-card-title { color: var(--dm-red); } - .dm-related-card-excerpt { - font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - } - .dm-related-readmore { - margin-top: auto; display: inline-flex; align-items: center; gap: 7px; - font-size: 12.5px; font-weight: 800; color: var(--dm-red); - text-transform: uppercase; letter-spacing: .6px; - } - .dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); } - - /* Contact CTA banner */ - .dm-blog-contact-cta { - display: flex; align-items: center; justify-content: space-between; gap: 32px; - flex-wrap: wrap; - background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%); - border-radius: 30px; padding: clamp(32px, 4vw, 56px); - position: relative; overflow: hidden; - } - .dm-blog-contact-cta::after { - content: ""; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px; - background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%); - pointer-events: none; - } - .dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; } - .dm-blog-contact-eyebrow { - display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase; - letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px; - } - .dm-blog-contact-title { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important; - letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance; - } - .dm-blog-contact-sub { - font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450; - } - .dm-blog-contact-btn { - position: relative; z-index: 1; flex-shrink: 0; - display: inline-flex; align-items: center; justify-content: center; gap: 10px; - background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700; - padding: 16px 32px; border-radius: 16px; text-decoration: none; - box-shadow: 0 10px 26px rgba(192,18,39,0.34); - transition: background .2s ease, transform .2s ease; - } - .dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } - @media (max-width: 720px) { - .dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; } - .dm-blog-contact-btn { width: 100%; } - } -5:["$","section",null,{"className":"dm-blog-footer","aria-label":"More articles","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$13"}}],"$L14"]}] -6:["$","script","script-0",{"src":"/_next/static/chunks/0yvxf3ok9gcp_.js","async":true}] -7:["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}] -a:["$","$L9","7",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"During peak traffic hours in Hyderabad, some vehicles were arriving 20 to 30 minutes later than planned. By adjusting routes based on live traffic and battery levels, we reduced missed delivery windows and improved on-time performance."}]}] -b:["$","$L9","8",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","figure",null,{"className":"dm-article-figure","children":[["$","span",null,{"className":"dm-article-figure-img","children":["$","$L18",null,{"src":"/images/last-mile-approach.webp","alt":"Hyderabad delivery hub routing analysis","fill":true,"sizes":"(max-width: 768px) 100vw, 760px","style":{"objectFit":"cover"}}]}],["$","figcaption",null,{"children":"Planning the day's deliveries together removed repeated cross-town travel."}]]}]}] -c:["$","$L9","9",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"The results"}]}] -d:["$","$L9","10",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"42% reduction in total distance travelled across the hub"}],["$","li","1",{"children":"37% fewer vehicles required for the same delivery volume"}],["$","li","2",{"children":"No SLA misses during the measured deployment window"}],["$","li","3",{"children":"Lower fuel use and fewer unnecessary kilometres per parcel"}]]}]}] -e:["$","$L9","11",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","blockquote",null,{"className":"dm-article-quote","children":[["$","p",null,{"children":"The improvement did not come from asking riders to work harder. It came from giving the team a better route plan before the vehicles left."}],["$","cite",null,{"children":"Hyderabad Hub Operations"}]]}]}] -f:["$","$L9","12",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"Why this applies beyond one hub"}]}] -10:["$","$L9","13",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The Hyderabad result was not a one-city exception. Most hubs deal with the same issues: overlapping routes, conservative sequencing, traffic surprises, charging constraints, and last-minute order changes."}]}] -11:["$","$L9","14",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"A 42% cut in distance changes the cost of running the operation. It also gives dispatchers more breathing room when the day gets messy."}]}] -12:["$","div",null,{"className":"dm-blog-aside-wrap","children":["$","aside",null,{"className":"dm-blog-sidebar","aria-label":"Blog sidebar","children":[["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Search"}],["$","$L19",null,{}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Recent Posts"}],["$","ul",null,{"className":"dm-blog-recent","children":[["$","li","how-ai-is-transforming-last-mile-ev-delivery",{"children":["$","$L8",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L18",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","time",null,{"dateTime":"2025-10-02","className":"dm-blog-recent-date","children":"Oct 2, 2025"}]]}]]}]}],["$","li","miletruth-ai-10-stages-to-smarter-dispatch",{"children":["$","$L8",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L18",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","time",null,{"dateTime":"2025-09-05","className":"dm-blog-recent-date","children":"Sep 5, 2025"}]]}]]}]}],["$","li","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"children":["$","$L8",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L18",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","time",null,{"dateTime":"2025-08-21","className":"dm-blog-recent-date","children":"Aug 21, 2025"}]]}]]}]}],["$","li","why-mathematical-precision-beats-heuristics-in-routing",{"children":["$","$L8",null,{"href":"/blog/why-mathematical-precision-beats-heuristics-in-routing","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L18",null,{"src":"/images/blog-post-pic-14.webp","alt":"Why Mathematical Precision Beats Heuristics in Routing","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"Why Mathematical Precision Beats Heuristics in Routing"}],["$","time",null,{"dateTime":"2025-08-07","className":"dm-blog-recent-date","children":"Aug 7, 2025"}]]}]]}]}]]}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Categories"}],["$","ul",null,{"className":"dm-blog-categories","children":[["$","li","Case Study",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Case Study"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","EV Fleet",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"EV Fleet"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}],["$","li","Fleet Management",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Fleet Management"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","MileTruth",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"MileTruth"}],"$L1a"]}]}],"$L1b","$L1c","$L1d"]}]]}],"$L1e"]}]}] -14:["$","div",null,{"className":"dm-blog-footer-inner","children":[["$","nav",null,{"className":"dm-prevnext","aria-label":"Article navigation","children":[["$","$L8",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-prevnext-card dm-prevnext-prev","children":[["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L18",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"19","y1":"12","x2":"5","y2":"12"}],["$","polyline",null,{"points":"12 19 5 12 12 5"}]]}],"Previous"]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Technology"}],["$","span",null,{"className":"dm-prevnext-title","children":"How Better Planning Improves Last-Mile EV Delivery"}]]}]]}],["$","$L8",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-prevnext-card dm-prevnext-next","children":[["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":["Next",["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","span",null,{"className":"dm-prevnext-cat","children":"MileTruth"}],["$","span",null,{"className":"dm-prevnext-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}]]}],["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L18",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}]]}]]}],["$","div",null,{"className":"dm-related","children":[["$","h2",null,{"className":"dm-related-heading","children":"Related Articles"}],["$","div",null,{"className":"dm-related-grid","children":[["$","$L9","how-ai-is-transforming-last-mile-ev-delivery",{"delay":0,"duration":0.7,"yOffset":30,"children":["$","$L8",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L18",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Technology"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L9","miletruth-ai-10-stages-to-smarter-dispatch",{"delay":0.08,"duration":0.7,"yOffset":30,"children":["$","$L8",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L18",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"MileTruth"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],"$L1f","$L20"]}]]}]}],"$L21"]}]]}],"$L22"]}] -17:null -1a:["$","span",null,{"className":"dm-blog-category-count","children":1}] -1b:["$","li","Operations",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Operations"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -1c:["$","li","Sustainability",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Sustainability"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -1d:["$","li","Technology",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Technology"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}] -1e:["$","section",null,{"className":"dm-blog-widget dm-blog-cta-card","children":[["$","h2",null,{"className":"dm-blog-cta-title","children":"Planning delivery routes?"}],["$","p",null,{"className":"dm-blog-cta-text","children":"Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time."}],["$","$L8",null,{"href":"/contact","className":"dm-blog-cta-btn","children":["Contact Us",["$","svg",null,{"width":"18","height":"18","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -1f:["$","p",null,{"className":"dm-related-card-excerpt","children":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}] -20:["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}] -21:["$","$L9","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"delay":0.16,"duration":0.7,"yOffset":30,"children":["$","$L8",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L18",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"EV Fleet"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"Electric vehicles lower running costs, but battery range changes how routes must be planned before dispatch."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}] -22:["$","div",null,{"className":"dm-blog-contact-cta","children":[["$","div",null,{"className":"dm-blog-contact-cta-content","children":[["$","span",null,{"className":"dm-blog-contact-eyebrow","children":"Let's talk logistics"}],["$","h2",null,{"className":"dm-blog-contact-title","children":"Ready to move smarter with Doormile?"}],["$","p",null,{"className":"dm-blog-contact-sub","children":"Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding."}]]}],["$","$L8",null,{"href":"/contact","className":"dm-blog-contact-btn","children":["Get in Touch",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] diff --git a/build/blog/42-less-distance-insights-from-our-hyderabad-hub/__next.blog.$d$slug.txt b/build/blog/42-less-distance-insights-from-our-hyderabad-hub/__next.blog.$d$slug.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/blog/42-less-distance-insights-from-our-hyderabad-hub/__next.blog.$d$slug.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/42-less-distance-insights-from-our-hyderabad-hub/__next.blog.txt b/build/blog/42-less-distance-insights-from-our-hyderabad-hub/__next.blog.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/blog/42-less-distance-insights-from-our-hyderabad-hub/__next.blog.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/__next._full.txt b/build/blog/__next._full.txt deleted file mode 100644 index ed53a74..0000000 --- a/build/blog/__next._full.txt +++ /dev/null @@ -1,207 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -11:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -:HL["/images/home2-banner-1.webp","image"] -0:{"P":null,"c":["","blog"],"q":"","i":false,"f":[[["",{"children":["blog",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","div",null,{"id":"blogs","className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","div",null,{"data-elementor-type":"wp-page","data-elementor-id":"104","className":"elementor elementor-104","children":[[["$","link",null,{"rel":"preload","as":"image","href":"/images/home2-banner-1.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"\n .blogs-hero-title {\n color: #ffffff !important;\n font-family: var(--font-manrope), sans-serif !important;\n font-size: clamp(34px, 5.5vw, 68px) !important;\n font-weight: 850 !important;\n line-height: 1.08 !important;\n text-transform: uppercase !important;\n letter-spacing: -1.5px !important;\n margin: 0 !important;\n }\n .blogs-hero-content {\n position: relative !important;\n width: 100% !important;\n height: 100% !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n flex-direction: column !important;\n max-width: 1000px !important;\n margin: 0 auto !important;\n padding: 0 15px !important;\n box-sizing: border-box !important;\n }\n "}}],"$Lc"],"$Ld"]}]}]}]}],null,"$Le"]}],{},null,false,null]},null,false,"$@f"]},null,false,null],"$L10",false]],"m":"$undefined","G":["$11",["$L12"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -15:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -16:"$Sreact.suspense" -19:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -1b:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -c:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"style":{"backgroundImage":"url(/images/home2-banner-1.webp)","backgroundPosition":"center center","backgroundRepeat":"no-repeat","backgroundSize":"cover"},"className":"custom-standard-hero-card","children":["$","div",null,{"className":"blogs-hero-content","children":["$","div",null,{"style":{"textAlign":"center","color":"#fff","zIndex":5},"children":["$","h1",null,{"className":"blogs-hero-title","children":["Delivering Trust.",["$","br",null,{}],["$","span",null,{"style":{"color":"#C01227"},"children":"Beyond Boundaries"}]]}]}]}]}]}] -13:T17ff, - .custom-blog-grid { - display: grid !important; - grid-template-columns: repeat(3, 1fr) !important; - gap: 40px !important; - width: 100% !important; - max-width: 1200px !important; - margin: 0 auto !important; - padding: 40px 20px !important; - } - - @media (max-width: 1024px) { - .custom-blog-grid { - grid-template-columns: repeat(2, 1fr) !important; - } - } - @media (max-width: 768px) { - .elementor-104 .elementor-element.elementor-element-c70681e { - margin-top: var(--space-section) !important; - margin-bottom: 16px !important; - } - .custom-blog-grid { - grid-template-columns: 1fr !important; - gap: 28px !important; - padding: 24px 20px !important; - } - } - - @media (max-width: 767px) { - .elementor-104 .elementor-element.elementor-element-c70681e { - --padding-left: 10px !important; - --padding-right: 10px !important; - padding-left: 10px !important; - padding-right: 10px !important; - } - .elementor-104 .elementor-element.elementor-element-3dec5cf { - --padding-left: 0px !important; - --padding-right: 0px !important; - padding-left: 0 !important; - padding-right: 0 !important; - } - .elementor-104 .elementor-element.elementor-element-aa12479, - .elementor-104 .elementor-element.elementor-element-aa12479 > .elementor-widget-container, - .elementor-104 .archive-listing, - .elementor-104 .custom-blog-grid { - width: 100% !important; - max-width: 100% !important; - } - .elementor-104 .custom-blog-grid { - padding-left: 0 !important; - padding-right: 0 !important; - } - } - - .custom-blog-card { - display: flex !important; - flex-direction: column !important; - justify-content: space-between !important; - height: 100% !important; - background: #ffffff !important; - border: 1px solid rgba(0, 0, 0, 0.08) !important; - border-radius: 28px !important; - padding: 28px !important; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.03) !important; - transition: transform 0.4s cubic-bezier(0.2, 0.8, 0.2, 1), box-shadow 0.4s ease !important; - cursor: pointer !important; - } - - .custom-blog-card:hover { - transform: translateY(-8px) !important; - box-shadow: 0 20px 40px rgba(192, 18, 39, 0.12) !important; - border-color: rgba(192, 18, 39, 0.2) !important; - } - - .custom-blog-title { - font-size: 20px !important; - font-weight: 800 !important; - color: #1e293b !important; - line-height: 1.35 !important; - text-transform: none !important; - letter-spacing: -0.4px !important; - margin: 0 0 12px 0 !important; - display: -webkit-box !important; - -webkit-line-clamp: 2 !important; - -webkit-box-orient: vertical !important; - overflow: hidden !important; - transition: color 0.2s ease !important; - font-family: var(--font-manrope), sans-serif !important; - } - - .custom-blog-card:hover .custom-blog-title { - color: #c01227 !important; - } - - .custom-blog-excerpt { - font-size: 13.5px !important; - font-weight: 500 !important; - color: #64748b !important; - line-height: 1.6 !important; - margin: 0 0 18px 0 !important; - text-transform: none !important; - font-family: var(--font-manrope), sans-serif !important; - } - - /* Bottom block pinned to the card base. Keeps Read More + image at the - same vertical position across cards with different text lengths. */ - .custom-blog-bottom { - display: flex !important; - flex-direction: column !important; - margin-top: auto !important; - } - - .custom-blog-readmore { - display: inline-flex !important; - align-items: center !important; - align-self: flex-start !important; - gap: 6px !important; - font-size: 13px !important; - font-weight: 800 !important; - color: #c01227 !important; - text-transform: uppercase !important; - letter-spacing: 0.5px !important; - margin: 0 0 24px 0 !important; - font-family: var(--font-manrope), sans-serif !important; - } - - .custom-blog-readmore-arrow { - transition: transform 0.3s cubic-bezier(0.2, 0.8, 0.2, 1) !important; - } - - .custom-blog-card:hover .custom-blog-readmore-arrow { - transform: translateX(5px) !important; - } - - .custom-blog-img-container { - position: relative !important; - width: 100% !important; - aspect-ratio: 4 / 3 !important; - border-radius: 20px !important; - overflow: hidden !important; - box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.05) !important; - } - - .custom-blog-badge { - position: absolute !important; - top: 14px !important; - left: 14px !important; - z-index: 5 !important; - background: #c01227 !important; - color: #ffffff !important; - font-size: 9px !important; - font-weight: 800 !important; - text-transform: uppercase !important; - letter-spacing: 1.2px !important; - padding: 4px 10px !important; - border-radius: 6px !important; - box-shadow: 0 4px 10px rgba(192, 18, 39, 0.2) !important; - font-family: var(--font-manrope), sans-serif !important; - } - d:["$","div",null,{"className":"elementor-element elementor-element-c70681e e-flex e-con-boxed cut-corner-no sticky-container-off e-con e-parent","data-id":"c70681e","data-element_type":"container","data-e-type":"container","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$13"}}],"$L14"]}] -e:["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}] -18:[] -f:"$W18" -10:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] -12:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] -1d:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ScrollReveal"] -1e:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],""] -1f:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"Image"] -14:["$","div",null,{"className":"e-con-inner","children":["$","div",null,{"className":"elementor-element elementor-element-3dec5cf e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"3dec5cf","data-element_type":"container","data-e-type":"container","children":["$","div",null,{"className":"elementor-element elementor-element-aa12479 elementor-widget elementor-widget-logico_blog_listing","data-id":"aa12479","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_blog_listing.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","div",null,{"className":"archive-listing","children":["$","div",null,{"className":"custom-blog-grid","children":[["$","$L1d","how-ai-is-transforming-last-mile-ev-delivery",{"delay":0,"duration":0.8,"yOffset":35,"children":["$","$L1e",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"custom-blog-card","style":{"textDecoration":"none"},"children":[["$","div",null,{"className":"flex flex-col","children":[["$","h3",null,{"className":"custom-blog-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","p",null,{"className":"custom-blog-excerpt","children":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}]]}],["$","div",null,{"className":"custom-blog-bottom","children":[["$","span",null,{"className":"custom-blog-readmore","children":["Read More",["$","svg",null,{"className":"custom-blog-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","div",null,{"className":"custom-blog-img-container","children":[["$","$L1f",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, 33vw"}],["$","span",null,{"className":"custom-blog-badge","children":"Technology"}]]}]]}]]}]}],["$","$L1d","42-less-distance-insights-from-our-hyderabad-hub",{"delay":0.08,"duration":0.8,"yOffset":35,"children":["$","$L1e",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"custom-blog-card","style":{"textDecoration":"none"},"children":[["$","div",null,{"className":"flex flex-col","children":[["$","h3",null,{"className":"custom-blog-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","p",null,{"className":"custom-blog-excerpt","children":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}]]}],["$","div",null,{"className":"custom-blog-bottom","children":[["$","span",null,{"className":"custom-blog-readmore","children":["Read More",["$","svg",null,{"className":"custom-blog-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","div",null,{"className":"custom-blog-img-container","children":[["$","$L1f",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, 33vw"}],["$","span",null,{"className":"custom-blog-badge","children":"Case Study"}]]}]]}]]}]}],["$","$L1d","miletruth-ai-10-stages-to-smarter-dispatch",{"delay":0.16,"duration":0.8,"yOffset":35,"children":["$","$L1e",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"custom-blog-card","style":{"textDecoration":"none"},"children":[["$","div",null,{"className":"flex flex-col","children":[["$","h3",null,{"className":"custom-blog-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","p",null,{"className":"custom-blog-excerpt","children":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}]]}],"$L20"]}]}],"$L21","$L22","$L23","$L24","$L25","$L26"]}]}]}]}]}]}] -20:["$","div",null,{"className":"custom-blog-bottom","children":[["$","span",null,{"className":"custom-blog-readmore","children":["Read More",["$","svg",null,{"className":"custom-blog-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","div",null,{"className":"custom-blog-img-container","children":[["$","$L1f",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, 33vw"}],["$","span",null,{"className":"custom-blog-badge","children":"MileTruth"}]]}]]}] -21:["$","$L1d","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"delay":0,"duration":0.8,"yOffset":35,"children":["$","$L1e",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"custom-blog-card","style":{"textDecoration":"none"},"children":[["$","div",null,{"className":"flex flex-col","children":[["$","h3",null,{"className":"custom-blog-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","p",null,{"className":"custom-blog-excerpt","children":"Electric vehicles lower running costs, but battery range changes how routes must be planned before dispatch."}]]}],["$","div",null,{"className":"custom-blog-bottom","children":[["$","span",null,{"className":"custom-blog-readmore","children":["Read More",["$","svg",null,{"className":"custom-blog-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","div",null,{"className":"custom-blog-img-container","children":[["$","$L1f",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, 33vw"}],["$","span",null,{"className":"custom-blog-badge","children":"EV Fleet"}]]}]]}]]}]}] -22:["$","$L1d","why-mathematical-precision-beats-heuristics-in-routing",{"delay":0.08,"duration":0.8,"yOffset":35,"children":["$","$L1e",null,{"href":"/blog/why-mathematical-precision-beats-heuristics-in-routing","className":"custom-blog-card","style":{"textDecoration":"none"},"children":[["$","div",null,{"className":"flex flex-col","children":[["$","h3",null,{"className":"custom-blog-title","children":"Why Mathematical Precision Beats Heuristics in Routing"}],["$","p",null,{"className":"custom-blog-excerpt","children":"Fixed routing rules are easy to start with, but they often miss better stop sequences as order volume grows."}]]}],["$","div",null,{"className":"custom-blog-bottom","children":[["$","span",null,{"className":"custom-blog-readmore","children":["Read More",["$","svg",null,{"className":"custom-blog-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","div",null,{"className":"custom-blog-img-container","children":[["$","$L1f",null,{"src":"/images/blog-post-pic-14.webp","alt":"Why Mathematical Precision Beats Heuristics in Routing","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, 33vw"}],["$","span",null,{"className":"custom-blog-badge","children":"Technology"}]]}]]}]]}]}] -23:["$","$L1d","fleet-reduction-without-compromising-delivery-volume",{"delay":0.16,"duration":0.8,"yOffset":35,"children":["$","$L1e",null,{"href":"/blog/fleet-reduction-without-compromising-delivery-volume","className":"custom-blog-card","style":{"textDecoration":"none"},"children":[["$","div",null,{"className":"flex flex-col","children":[["$","h3",null,{"className":"custom-blog-title","children":"Fleet Reduction Without Compromising Delivery Volume"}],["$","p",null,{"className":"custom-blog-excerpt","children":"Handling the same order volume with fewer vehicles starts by removing avoidable kilometres and overlapping routes."}]]}],["$","div",null,{"className":"custom-blog-bottom","children":[["$","span",null,{"className":"custom-blog-readmore","children":["Read More",["$","svg",null,{"className":"custom-blog-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","div",null,{"className":"custom-blog-img-container","children":[["$","$L1f",null,{"src":"/images/blog-post-pic-8.webp","alt":"Fleet Reduction Without Compromising Delivery Volume","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, 33vw"}],["$","span",null,{"className":"custom-blog-badge","children":"Fleet Management"}]]}]]}]]}]}] -24:["$","$L1d","building-a-greener-city-the-future-of-urban-logistics",{"delay":0,"duration":0.8,"yOffset":35,"children":["$","$L1e",null,{"href":"/blog/building-a-greener-city-the-future-of-urban-logistics","className":"custom-blog-card","style":{"textDecoration":"none"},"children":[["$","div",null,{"className":"flex flex-col","children":[["$","h3",null,{"className":"custom-blog-title","children":"Building a Greener City: The Future of Urban Logistics"}],["$","p",null,{"className":"custom-blog-excerpt","children":"Cities are asking for cleaner delivery. The practical challenge is planning EV routes that can meet customer windows without wasting charge."}]]}],["$","div",null,{"className":"custom-blog-bottom","children":[["$","span",null,{"className":"custom-blog-readmore","children":["Read More",["$","svg",null,{"className":"custom-blog-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","div",null,{"className":"custom-blog-img-container","children":[["$","$L1f",null,{"src":"/images/blog-post-pic-6.webp","alt":"Building a Greener City: The Future of Urban Logistics","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, 33vw"}],["$","span",null,{"className":"custom-blog-badge","children":"Sustainability"}]]}]]}]]}]}] -25:["$","$L1d","how-doormile-maintains-99-9-sla-compliance-at-scale",{"delay":0.08,"duration":0.8,"yOffset":35,"children":["$","$L1e",null,{"href":"/blog/how-doormile-maintains-99-9-sla-compliance-at-scale","className":"custom-blog-card","style":{"textDecoration":"none"},"children":[["$","div",null,{"className":"flex flex-col","children":[["$","h3",null,{"className":"custom-blog-title","children":"How Doormile Maintains 99.9% SLA Compliance at Scale"}],["$","p",null,{"className":"custom-blog-excerpt","children":"High SLA performance comes from checking ETAs before dispatch, reacting early to delays, and keeping customer commitments visible throughout the day."}]]}],["$","div",null,{"className":"custom-blog-bottom","children":[["$","span",null,{"className":"custom-blog-readmore","children":["Read More",["$","svg",null,{"className":"custom-blog-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","div",null,{"className":"custom-blog-img-container","children":[["$","$L1f",null,{"src":"/images/last-mile-approach.webp","alt":"How Doormile Maintains 99.9% SLA Compliance at Scale","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, 33vw"}],["$","span",null,{"className":"custom-blog-badge","children":"Operations"}]]}]]}]]}]}] -26:["$","$L1d","battery-simulation-the-secret-to-ev-route-pre-validation",{"delay":0.16,"duration":0.8,"yOffset":35,"children":["$","$L1e",null,{"href":"/blog/battery-simulation-the-secret-to-ev-route-pre-validation","className":"custom-blog-card","style":{"textDecoration":"none"},"children":[["$","div",null,{"className":"flex flex-col","children":[["$","h3",null,{"className":"custom-blog-title","children":"Battery Simulation: The Secret to EV Route Pre-Validation"}],["$","p",null,{"className":"custom-blog-excerpt","children":"Before a rider leaves the hub, every EV route should be checked against real charge capacity and the expected return plan."}]]}],["$","div",null,{"className":"custom-blog-bottom","children":[["$","span",null,{"className":"custom-blog-readmore","children":["Read More",["$","svg",null,{"className":"custom-blog-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","div",null,{"className":"custom-blog-img-container","children":[["$","$L1f",null,{"src":"/images/blog-post-pic-3.webp","alt":"Battery Simulation: The Secret to EV Route Pre-Validation","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, 33vw"}],["$","span",null,{"className":"custom-blog-badge","children":"EV Fleet"}]]}]]}]]}]}] -1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -27:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -17:null -1c:[["$","title","0",{"children":"Blog – Doormile"}],["$","meta","1",{"name":"description","content":"Practical notes on delivery planning, EV fleet operations, route optimisation, charging, and last-mile performance from the Doormile team."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","4",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","5",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","6",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L27","7",{}]] diff --git a/build/blog/__next._head.txt b/build/blog/__next._head.txt deleted file mode 100644 index 7c5439b..0000000 --- a/build/blog/__next._head.txt +++ /dev/null @@ -1,6 +0,0 @@ -1:"$Sreact.fragment" -2:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -3:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -4:"$Sreact.suspense" -5:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Blog – Doormile"}],["$","meta","1",{"name":"description","content":"Practical notes on delivery planning, EV fleet operations, route optimisation, charging, and last-mile performance from the Doormile team."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","4",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","5",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","6",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L5","7",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/__next._index.txt b/build/blog/__next._index.txt deleted file mode 100644 index d0b3355..0000000 --- a/build/blog/__next._index.txt +++ /dev/null @@ -1,15 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","template":["$","$La",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/__next._tree.txt b/build/blog/__next._tree.txt deleted file mode 100644 index 8fbbdb8..0000000 --- a/build/blog/__next._tree.txt +++ /dev/null @@ -1,10 +0,0 @@ -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -:HL["/images/home2-banner-1.webp","image"] -0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"blog","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/__next.blog.__PAGE__.txt b/build/blog/__next.blog.__PAGE__.txt deleted file mode 100644 index 6a03a1e..0000000 --- a/build/blog/__next.blog.__PAGE__.txt +++ /dev/null @@ -1,177 +0,0 @@ -1:"$Sreact.fragment" -5:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ScrollReveal"] -6:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],""] -7:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"Image"] -f:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -10:"$Sreact.suspense" -:HL["/images/home2-banner-1.webp","image"] -2:T17ff, - .custom-blog-grid { - display: grid !important; - grid-template-columns: repeat(3, 1fr) !important; - gap: 40px !important; - width: 100% !important; - max-width: 1200px !important; - margin: 0 auto !important; - padding: 40px 20px !important; - } - - @media (max-width: 1024px) { - .custom-blog-grid { - grid-template-columns: repeat(2, 1fr) !important; - } - } - @media (max-width: 768px) { - .elementor-104 .elementor-element.elementor-element-c70681e { - margin-top: var(--space-section) !important; - margin-bottom: 16px !important; - } - .custom-blog-grid { - grid-template-columns: 1fr !important; - gap: 28px !important; - padding: 24px 20px !important; - } - } - - @media (max-width: 767px) { - .elementor-104 .elementor-element.elementor-element-c70681e { - --padding-left: 10px !important; - --padding-right: 10px !important; - padding-left: 10px !important; - padding-right: 10px !important; - } - .elementor-104 .elementor-element.elementor-element-3dec5cf { - --padding-left: 0px !important; - --padding-right: 0px !important; - padding-left: 0 !important; - padding-right: 0 !important; - } - .elementor-104 .elementor-element.elementor-element-aa12479, - .elementor-104 .elementor-element.elementor-element-aa12479 > .elementor-widget-container, - .elementor-104 .archive-listing, - .elementor-104 .custom-blog-grid { - width: 100% !important; - max-width: 100% !important; - } - .elementor-104 .custom-blog-grid { - padding-left: 0 !important; - padding-right: 0 !important; - } - } - - .custom-blog-card { - display: flex !important; - flex-direction: column !important; - justify-content: space-between !important; - height: 100% !important; - background: #ffffff !important; - border: 1px solid rgba(0, 0, 0, 0.08) !important; - border-radius: 28px !important; - padding: 28px !important; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.03) !important; - transition: transform 0.4s cubic-bezier(0.2, 0.8, 0.2, 1), box-shadow 0.4s ease !important; - cursor: pointer !important; - } - - .custom-blog-card:hover { - transform: translateY(-8px) !important; - box-shadow: 0 20px 40px rgba(192, 18, 39, 0.12) !important; - border-color: rgba(192, 18, 39, 0.2) !important; - } - - .custom-blog-title { - font-size: 20px !important; - font-weight: 800 !important; - color: #1e293b !important; - line-height: 1.35 !important; - text-transform: none !important; - letter-spacing: -0.4px !important; - margin: 0 0 12px 0 !important; - display: -webkit-box !important; - -webkit-line-clamp: 2 !important; - -webkit-box-orient: vertical !important; - overflow: hidden !important; - transition: color 0.2s ease !important; - font-family: var(--font-manrope), sans-serif !important; - } - - .custom-blog-card:hover .custom-blog-title { - color: #c01227 !important; - } - - .custom-blog-excerpt { - font-size: 13.5px !important; - font-weight: 500 !important; - color: #64748b !important; - line-height: 1.6 !important; - margin: 0 0 18px 0 !important; - text-transform: none !important; - font-family: var(--font-manrope), sans-serif !important; - } - - /* Bottom block pinned to the card base. Keeps Read More + image at the - same vertical position across cards with different text lengths. */ - .custom-blog-bottom { - display: flex !important; - flex-direction: column !important; - margin-top: auto !important; - } - - .custom-blog-readmore { - display: inline-flex !important; - align-items: center !important; - align-self: flex-start !important; - gap: 6px !important; - font-size: 13px !important; - font-weight: 800 !important; - color: #c01227 !important; - text-transform: uppercase !important; - letter-spacing: 0.5px !important; - margin: 0 0 24px 0 !important; - font-family: var(--font-manrope), sans-serif !important; - } - - .custom-blog-readmore-arrow { - transition: transform 0.3s cubic-bezier(0.2, 0.8, 0.2, 1) !important; - } - - .custom-blog-card:hover .custom-blog-readmore-arrow { - transform: translateX(5px) !important; - } - - .custom-blog-img-container { - position: relative !important; - width: 100% !important; - aspect-ratio: 4 / 3 !important; - border-radius: 20px !important; - overflow: hidden !important; - box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.05) !important; - } - - .custom-blog-badge { - position: absolute !important; - top: 14px !important; - left: 14px !important; - z-index: 5 !important; - background: #c01227 !important; - color: #ffffff !important; - font-size: 9px !important; - font-weight: 800 !important; - text-transform: uppercase !important; - letter-spacing: 1.2px !important; - padding: 4px 10px !important; - border-radius: 6px !important; - box-shadow: 0 4px 10px rgba(192, 18, 39, 0.2) !important; - font-family: var(--font-manrope), sans-serif !important; - } - 0:{"rsc":["$","$1","c",{"children":[["$","div",null,{"id":"blogs","className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","div",null,{"data-elementor-type":"wp-page","data-elementor-id":"104","className":"elementor elementor-104","children":[[["$","link",null,{"rel":"preload","as":"image","href":"/images/home2-banner-1.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"\n .blogs-hero-title {\n color: #ffffff !important;\n font-family: var(--font-manrope), sans-serif !important;\n font-size: clamp(34px, 5.5vw, 68px) !important;\n font-weight: 850 !important;\n line-height: 1.08 !important;\n text-transform: uppercase !important;\n letter-spacing: -1.5px !important;\n margin: 0 !important;\n }\n .blogs-hero-content {\n position: relative !important;\n width: 100% !important;\n height: 100% !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n flex-direction: column !important;\n max-width: 1000px !important;\n margin: 0 auto !important;\n padding: 0 15px !important;\n box-sizing: border-box !important;\n }\n "}}],["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"style":{"backgroundImage":"url(/images/home2-banner-1.webp)","backgroundPosition":"center center","backgroundRepeat":"no-repeat","backgroundSize":"cover"},"className":"custom-standard-hero-card","children":["$","div",null,{"className":"blogs-hero-content","children":["$","div",null,{"style":{"textAlign":"center","color":"#fff","zIndex":5},"children":["$","h1",null,{"className":"blogs-hero-title","children":["Delivering Trust.",["$","br",null,{}],["$","span",null,{"style":{"color":"#C01227"},"children":"Beyond Boundaries"}]]}]}]}]}]}]],["$","div",null,{"className":"elementor-element elementor-element-c70681e e-flex e-con-boxed cut-corner-no sticky-container-off e-con e-parent","data-id":"c70681e","data-element_type":"container","data-e-type":"container","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$2"}}],"$L3"]}]]}]}]}]}],null,"$L4"]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} -3:["$","div",null,{"className":"e-con-inner","children":["$","div",null,{"className":"elementor-element elementor-element-3dec5cf e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"3dec5cf","data-element_type":"container","data-e-type":"container","children":["$","div",null,{"className":"elementor-element elementor-element-aa12479 elementor-widget elementor-widget-logico_blog_listing","data-id":"aa12479","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_blog_listing.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","div",null,{"className":"archive-listing","children":["$","div",null,{"className":"custom-blog-grid","children":[["$","$L5","how-ai-is-transforming-last-mile-ev-delivery",{"delay":0,"duration":0.8,"yOffset":35,"children":["$","$L6",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"custom-blog-card","style":{"textDecoration":"none"},"children":[["$","div",null,{"className":"flex flex-col","children":[["$","h3",null,{"className":"custom-blog-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","p",null,{"className":"custom-blog-excerpt","children":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}]]}],["$","div",null,{"className":"custom-blog-bottom","children":[["$","span",null,{"className":"custom-blog-readmore","children":["Read More",["$","svg",null,{"className":"custom-blog-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","div",null,{"className":"custom-blog-img-container","children":[["$","$L7",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, 33vw"}],["$","span",null,{"className":"custom-blog-badge","children":"Technology"}]]}]]}]]}]}],["$","$L5","42-less-distance-insights-from-our-hyderabad-hub",{"delay":0.08,"duration":0.8,"yOffset":35,"children":["$","$L6",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"custom-blog-card","style":{"textDecoration":"none"},"children":[["$","div",null,{"className":"flex flex-col","children":[["$","h3",null,{"className":"custom-blog-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","p",null,{"className":"custom-blog-excerpt","children":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}]]}],["$","div",null,{"className":"custom-blog-bottom","children":[["$","span",null,{"className":"custom-blog-readmore","children":["Read More",["$","svg",null,{"className":"custom-blog-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","div",null,{"className":"custom-blog-img-container","children":[["$","$L7",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, 33vw"}],["$","span",null,{"className":"custom-blog-badge","children":"Case Study"}]]}]]}]]}]}],["$","$L5","miletruth-ai-10-stages-to-smarter-dispatch",{"delay":0.16,"duration":0.8,"yOffset":35,"children":["$","$L6",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"custom-blog-card","style":{"textDecoration":"none"},"children":[["$","div",null,{"className":"flex flex-col","children":[["$","h3",null,{"className":"custom-blog-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","p",null,{"className":"custom-blog-excerpt","children":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}]]}],"$L8"]}]}],"$L9","$La","$Lb","$Lc","$Ld","$Le"]}]}]}]}]}]}] -4:["$","$Lf",null,{"children":["$","$10",null,{"name":"Next.MetadataOutlet","children":"$@11"}]}] -8:["$","div",null,{"className":"custom-blog-bottom","children":[["$","span",null,{"className":"custom-blog-readmore","children":["Read More",["$","svg",null,{"className":"custom-blog-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","div",null,{"className":"custom-blog-img-container","children":[["$","$L7",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, 33vw"}],["$","span",null,{"className":"custom-blog-badge","children":"MileTruth"}]]}]]}] -9:["$","$L5","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"delay":0,"duration":0.8,"yOffset":35,"children":["$","$L6",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"custom-blog-card","style":{"textDecoration":"none"},"children":[["$","div",null,{"className":"flex flex-col","children":[["$","h3",null,{"className":"custom-blog-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","p",null,{"className":"custom-blog-excerpt","children":"Electric vehicles lower running costs, but battery range changes how routes must be planned before dispatch."}]]}],["$","div",null,{"className":"custom-blog-bottom","children":[["$","span",null,{"className":"custom-blog-readmore","children":["Read More",["$","svg",null,{"className":"custom-blog-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","div",null,{"className":"custom-blog-img-container","children":[["$","$L7",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, 33vw"}],["$","span",null,{"className":"custom-blog-badge","children":"EV Fleet"}]]}]]}]]}]}] -a:["$","$L5","why-mathematical-precision-beats-heuristics-in-routing",{"delay":0.08,"duration":0.8,"yOffset":35,"children":["$","$L6",null,{"href":"/blog/why-mathematical-precision-beats-heuristics-in-routing","className":"custom-blog-card","style":{"textDecoration":"none"},"children":[["$","div",null,{"className":"flex flex-col","children":[["$","h3",null,{"className":"custom-blog-title","children":"Why Mathematical Precision Beats Heuristics in Routing"}],["$","p",null,{"className":"custom-blog-excerpt","children":"Fixed routing rules are easy to start with, but they often miss better stop sequences as order volume grows."}]]}],["$","div",null,{"className":"custom-blog-bottom","children":[["$","span",null,{"className":"custom-blog-readmore","children":["Read More",["$","svg",null,{"className":"custom-blog-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","div",null,{"className":"custom-blog-img-container","children":[["$","$L7",null,{"src":"/images/blog-post-pic-14.webp","alt":"Why Mathematical Precision Beats Heuristics in Routing","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, 33vw"}],["$","span",null,{"className":"custom-blog-badge","children":"Technology"}]]}]]}]]}]}] -b:["$","$L5","fleet-reduction-without-compromising-delivery-volume",{"delay":0.16,"duration":0.8,"yOffset":35,"children":["$","$L6",null,{"href":"/blog/fleet-reduction-without-compromising-delivery-volume","className":"custom-blog-card","style":{"textDecoration":"none"},"children":[["$","div",null,{"className":"flex flex-col","children":[["$","h3",null,{"className":"custom-blog-title","children":"Fleet Reduction Without Compromising Delivery Volume"}],["$","p",null,{"className":"custom-blog-excerpt","children":"Handling the same order volume with fewer vehicles starts by removing avoidable kilometres and overlapping routes."}]]}],["$","div",null,{"className":"custom-blog-bottom","children":[["$","span",null,{"className":"custom-blog-readmore","children":["Read More",["$","svg",null,{"className":"custom-blog-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","div",null,{"className":"custom-blog-img-container","children":[["$","$L7",null,{"src":"/images/blog-post-pic-8.webp","alt":"Fleet Reduction Without Compromising Delivery Volume","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, 33vw"}],["$","span",null,{"className":"custom-blog-badge","children":"Fleet Management"}]]}]]}]]}]}] -c:["$","$L5","building-a-greener-city-the-future-of-urban-logistics",{"delay":0,"duration":0.8,"yOffset":35,"children":["$","$L6",null,{"href":"/blog/building-a-greener-city-the-future-of-urban-logistics","className":"custom-blog-card","style":{"textDecoration":"none"},"children":[["$","div",null,{"className":"flex flex-col","children":[["$","h3",null,{"className":"custom-blog-title","children":"Building a Greener City: The Future of Urban Logistics"}],["$","p",null,{"className":"custom-blog-excerpt","children":"Cities are asking for cleaner delivery. The practical challenge is planning EV routes that can meet customer windows without wasting charge."}]]}],["$","div",null,{"className":"custom-blog-bottom","children":[["$","span",null,{"className":"custom-blog-readmore","children":["Read More",["$","svg",null,{"className":"custom-blog-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","div",null,{"className":"custom-blog-img-container","children":[["$","$L7",null,{"src":"/images/blog-post-pic-6.webp","alt":"Building a Greener City: The Future of Urban Logistics","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, 33vw"}],["$","span",null,{"className":"custom-blog-badge","children":"Sustainability"}]]}]]}]]}]}] -d:["$","$L5","how-doormile-maintains-99-9-sla-compliance-at-scale",{"delay":0.08,"duration":0.8,"yOffset":35,"children":["$","$L6",null,{"href":"/blog/how-doormile-maintains-99-9-sla-compliance-at-scale","className":"custom-blog-card","style":{"textDecoration":"none"},"children":[["$","div",null,{"className":"flex flex-col","children":[["$","h3",null,{"className":"custom-blog-title","children":"How Doormile Maintains 99.9% SLA Compliance at Scale"}],["$","p",null,{"className":"custom-blog-excerpt","children":"High SLA performance comes from checking ETAs before dispatch, reacting early to delays, and keeping customer commitments visible throughout the day."}]]}],["$","div",null,{"className":"custom-blog-bottom","children":[["$","span",null,{"className":"custom-blog-readmore","children":["Read More",["$","svg",null,{"className":"custom-blog-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","div",null,{"className":"custom-blog-img-container","children":[["$","$L7",null,{"src":"/images/last-mile-approach.webp","alt":"How Doormile Maintains 99.9% SLA Compliance at Scale","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, 33vw"}],["$","span",null,{"className":"custom-blog-badge","children":"Operations"}]]}]]}]]}]}] -e:["$","$L5","battery-simulation-the-secret-to-ev-route-pre-validation",{"delay":0.16,"duration":0.8,"yOffset":35,"children":["$","$L6",null,{"href":"/blog/battery-simulation-the-secret-to-ev-route-pre-validation","className":"custom-blog-card","style":{"textDecoration":"none"},"children":[["$","div",null,{"className":"flex flex-col","children":[["$","h3",null,{"className":"custom-blog-title","children":"Battery Simulation: The Secret to EV Route Pre-Validation"}],["$","p",null,{"className":"custom-blog-excerpt","children":"Before a rider leaves the hub, every EV route should be checked against real charge capacity and the expected return plan."}]]}],["$","div",null,{"className":"custom-blog-bottom","children":[["$","span",null,{"className":"custom-blog-readmore","children":["Read More",["$","svg",null,{"className":"custom-blog-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","div",null,{"className":"custom-blog-img-container","children":[["$","$L7",null,{"src":"/images/blog-post-pic-3.webp","alt":"Battery Simulation: The Secret to EV Route Pre-Validation","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, 33vw"}],["$","span",null,{"className":"custom-blog-badge","children":"EV Fleet"}]]}]]}]]}]}] -11:null diff --git a/build/blog/__next.blog.txt b/build/blog/__next.blog.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/blog/__next.blog.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/battery-simulation-the-secret-to-ev-route-pre-validation.html b/build/blog/battery-simulation-the-secret-to-ev-route-pre-validation.html deleted file mode 100644 index e9505df..0000000 --- a/build/blog/battery-simulation-the-secret-to-ev-route-pre-validation.html +++ /dev/null @@ -1,1168 +0,0 @@ -Battery Simulation: The Secret to EV Route Pre-Validation – Doormile

    Doormile

    Doormile logo
    Address
    Hyderabad

    5th Floor, Vision Ultima,
    Street No.3, Jayabheri Enclave,
    Gachibowli, Hyderabad,
    Telangana 500032.

    Coimbatore

    Mayflower Valencia,
    Near Nava India Bus Stop,
    Avinashi Road,
    Udayampalayam,
    Tamil Nadu 641037.

    Bengaluru

    C612, 6th Floor,
    Trifecta Starlight,
    ITPL Road,
    Garudacharapalya,
    Mahadevapura,
    Bangalore 560048,
    Karnataka, India.

    Contact Us

    Tel : +91 86886 97941

    Email

    care@doormile.com

    EV Fleet

    Battery Simulation: The Secret to EV Route Pre-Validation

    Doormile Team2 min read

    A stranded EV is not just a late delivery. It means a vehicle is out of service, a customer is waiting, and the hub has to arrange recovery. Range checks need to happen before dispatch.

    In last-mile logistics, a missed SLA is rarely caused by one big failure. It usually comes from small delays adding up across a route. Battery Simulation: The Secret to EV Route Pre-Validation looks at how delivery teams can spot those delays early and plan around them before vehicles leave the hub.

    Why this matters for fleet teams

    Every extra kilometre costs money. It uses fuel or charge, adds rider time, wears down vehicles, and increases the chance of a late delivery. When routes are built from fixed zones or old habits, those costs repeat every day.

    • Fewer vehicles needed for the same number of drops
    • Lower cost per drop through better stop sequencing
    • ETAs that match traffic, distance, and delivery windows
    • Less fuel or charge used per completed order

    From orders to dispatch

    A good dispatch plan starts with the basics: order locations, promised delivery windows, rider capacity, vehicle range, and known traffic trouble spots. MileTruth™ checks those inputs before dispatch so the team is not fixing avoidable mistakes on the road.

    Battery Simulation: The Secret to EV Route Pre-Validation
    EV Fleet: route planning decisions made before dispatch.

    A route should be checked before the rider leaves, not explained after the customer calls.

    Doormile Operations

    Putting it into practice

    The best improvements usually start with simple measurements. Track distance per route, failed delivery windows, rider idle time, and orders moved between vehicles after dispatch. Those numbers show where the operation is leaking time.

    1. Benchmark today's distance, fleet size, and on-time rate.
    2. Include vehicle capacity, delivery windows, rider shifts, and battery charge.
    3. Check routes against traffic and customer commitments before dispatch.
    4. Compare the next dispatch cycle against the old plan.

    Better routing is not about pushing riders harder. It is about giving them a plan that already accounts for the real day ahead.

    \ No newline at end of file diff --git a/build/blog/battery-simulation-the-secret-to-ev-route-pre-validation.txt b/build/blog/battery-simulation-the-secret-to-ev-route-pre-validation.txt deleted file mode 100644 index a5e3880..0000000 --- a/build/blog/battery-simulation-the-secret-to-ev-route-pre-validation.txt +++ /dev/null @@ -1,544 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -d:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -e:"$Sreact.suspense" -11:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -13:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -15:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","blog","battery-simulation-the-secret-to-ev-route-pre-validation"],"q":"","i":false,"f":[[["",{"children":["blog",{"children":[["slug","battery-simulation-the-secret-to-ev-route-pre-validation","d",null],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":["$Lc",[["$","script","script-0",{"src":"/_next/static/chunks/0yvxf3ok9gcp_.js","async":true,"nonce":"$undefined"}]],["$","$Ld",null,{"children":["$","$e",null,{"name":"Next.MetadataOutlet","children":"$@f"}]}]]}],{},null,false,null]},null,false,"$@10"]},null,false,"$@10"]},null,false,null],["$","$1","h",{"children":[null,["$","$L11",null,{"children":"$L12"}],["$","div",null,{"hidden":true,"children":["$","$L13",null,{"children":["$","$e",null,{"name":"Next.Metadata","children":"$L14"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$15",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -16:[] -10:"$W16" -:HL["/images/blog-post-pic-3.webp","image"] -17:T3d6f, - .dm-single-blog { - --dm-red: #c01227; - --dm-red-hover: #e31d32; - --dm-radius-card: 22px; - --dm-radius-img: 20px; - --dm-radius-badge: 8px; - --dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05); - --dm-border: 1px solid rgba(15, 23, 42, 0.09); - --dm-space-p: 24px; - --dm-space-h: 32px; - --dm-space-img: 32px; - --dm-space-quote: 40px; - --dm-sticky-top: 138px; - --dm-measure: min(1100px, 100%); - font-family: var(--font-manrope), sans-serif; - } - - /* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6 - (120/80/60px UPPERCASE) rules with !important on our own classes. */ - .dm-single-blog :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline, - specificity 0-1-1) so blog links keep our colors and never get underlined. */ - .dm-single-blog a { text-decoration: none !important; } - - /* Page banner: tall homepage-scale frame with only badge + title inside */ - /* Compound selector (specificity 20) + !important beats the global 800px - single-class height rules so the blog banner can use viewport heights. */ - .custom-standard-hero-card.dm-banner-card { - height: 90vh !important; - min-height: 85vh !important; - } - @media (max-width: 1024px) { - .custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; } - } - @media (max-width: 600px) { - .custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; } - } - - .dm-banner-inner { - position: relative; width: 100%; height: 100%; - display: flex; flex-direction: column; align-items: center; justify-content: center; - text-align: center; gap: clamp(22px, 2.6vw, 34px); - padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px); - } - - .dm-banner-category { - display: inline-block; background: var(--dm-red); color: #fff; - font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px; - padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45); - } - .dm-banner-title { - font-family: var(--font-manrope), sans-serif !important; - font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important; - line-height: 1.16 !important; letter-spacing: -1.2px !important; - color: #ffffff !important; margin: 0; max-width: 820px; - text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38); - } - @media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } } - @media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } } - - /* Content wrap begins immediately below the banner */ - /* Shared content container: the SAME max-width + horizontal padding is used - by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings, - images, Prev/Next, Related Articles and the CTA banner all align to one - grid with identical left/right edges. Keep both in sync. */ - .dm-blog-wrap { - max-width: 1280px; margin: 0 auto; - /* 20px mobile padding floor → 40px on desktop; matches the footer container. */ - padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0; - } - @media (max-width: 767px) { - .dm-blog-wrap { - padding-left: 16px; - padding-right: 16px; - } - } - - /* ── Article meta bar (directly under the hero) ── */ - .dm-meta-bar { - display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px; - padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px); - border-bottom: 1px solid rgba(15,23,42,0.10); - } - .dm-meta-breadcrumb ol { - list-style: none; display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b; - } - .dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; } - .dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; } - .dm-meta-sep { color: #cbd5e1; } - .dm-meta-current { - color: #0f172a; font-weight: 700; - max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - } - @media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } } - .dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; } - .dm-meta-item { - display: inline-flex; align-items: center; gap: 7px; - font-size: 13.5px; font-weight: 600; color: #475569; - } - .dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; } - .dm-meta-author { color: #0f172a; font-weight: 700; } - @media (max-width: 600px) { .dm-meta-bar { gap: 12px; } } - .dm-blog-layout { - display: grid; grid-template-columns: minmax(0,1fr) 320px; - /* Tighter gap gives the reading column more room next to the 320px sidebar. */ - gap: clamp(28px, 3vw, 56px); align-items: start; - } - @media (max-width: 1024px) { - .dm-blog-layout { grid-template-columns: 1fr; gap: 48px; } - /* Single-column (tablet/mobile): cap the reading column and centre it so the - article never sits left-aligned with a large empty right gutter. */ - .dm-blog-main { max-width: 900px; margin-inline: auto; } - } - .dm-blog-main { min-width: 0; } - - /* ── Intro lead ── */ - .dm-blog-intro { - max-width: var(--dm-measure); - font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500; - color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px; - border-left: 3px solid var(--dm-red); - } - - /* ── Article body ── */ - .dm-article-body { max-width: var(--dm-measure); } - .dm-article-p { - font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450; - margin: 0 0 var(--dm-space-p); - } - .dm-article-h2 { - font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important; - color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h); - text-wrap: balance; - } - /* Each article block is wrapped in its OWN ScrollReveal
    , so a bare - :first-child rule matched every heading (each is the only child of its - wrapper) and zeroed its top margin, collapsing the gap above every - section heading. Scope the reset to only the article body's first block. */ - .dm-article-body > :first-child :where(.dm-article-h2, .dm-article-h3), - .dm-article-body > .dm-article-h2:first-child, - .dm-article-body > .dm-article-h3:first-child { margin-top: 0; } - .dm-article-h3 { - font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important; - color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px; - text-wrap: balance; - } - @media (max-width: 600px) { - .dm-article-p { font-size: 16px !important; } - .dm-article-ul li, .dm-article-ol li { font-size: 15.5px; } - .dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; } - .dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; } - } - - .dm-article-ul, .dm-article-ol { - /* Top margin (was 0) separates the list from the paragraph above it; - matching bottom margin keeps it clear of the next heading/paragraph. - Slightly larger than --dm-space-p so the list reads as its own block. */ - margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px); - padding-left: 2px; list-style: none; - display: flex; flex-direction: column; gap: 15px; - } - /* Prefixed with .dm-article-body so these beat the theme's global - ".logico-front-end ul li:before" fontello-glyph bullet (specificity 0,1,3), - which otherwise replaces our clean red dot with a misaligned checkmark glyph - and adds its own 1.7em indent. */ - .dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li { - position: relative; padding-left: 34px; - font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450; - } - .dm-article-body .dm-article-ul li::before { - content: ""; position: absolute; left: 7px; top: 10px; - width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red); - /* kill any inherited fontello glyph from the global rule */ - font-size: 0; line-height: 0; - } - .dm-article-ol { counter-reset: dm-li; } - .dm-article-body .dm-article-ol li { counter-increment: dm-li; } - .dm-article-body .dm-article-ol li::before { - content: counter(dm-li); position: absolute; left: 0; top: 0; - width: 24px; height: 24px; border-radius: 7px; - background: rgba(192,18,39,0.10); color: var(--dm-red); - font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; - } - - /* ── Quote ── */ - .dm-article-quote { - position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px; - background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%); - border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0; - box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06); - } - .dm-article-quote::before { - content: "\201C"; position: absolute; left: 22px; top: 8px; - font-family: Georgia, "Times New Roman", serif; - font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700; - } - .dm-article-quote p { - font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600; - font-style: italic; color: #1e293b; margin: 0; - } - .dm-article-quote cite { - display: block; margin-top: 16px; font-size: 13px; font-weight: 700; - font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px; - } - @media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } } - - /* ── Images ── */ - .dm-article-figure { margin: var(--dm-space-img) 0; } - .dm-article-figure-img { - position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; - border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10); - } - .dm-article-figure figcaption { - margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500; - text-align: center; font-style: italic; - } - - /* ── Sidebar ── */ - .dm-blog-aside-wrap { position: relative; } - .dm-blog-sidebar { - display: flex; flex-direction: column; gap: 18px; - position: sticky; top: var(--dm-sticky-top); - } - @media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } } - - .dm-blog-widget { - background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card); - padding: 20px; box-shadow: var(--dm-shadow-card); - } - .dm-blog-widget-title { - font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important; - letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important; - margin: 0 0 15px; padding: 0 0 12px; - border-bottom: 1px solid rgba(15,23,42,0.08); - overflow: visible; white-space: normal; word-break: normal; - } - - /* Search */ - .dm-sr-only { - position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; - overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; - } - .dm-blog-search { position: relative; } - .dm-blog-search-form { position: relative; } - .dm-blog-search-input { - width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px; - padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a; - background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; - } - .dm-blog-search-input::placeholder { color: #9c9c9c; } - .dm-blog-search-input:focus { - outline: none; border-color: var(--dm-red); background: #fff; - box-shadow: 0 0 0 3px rgba(192,18,39,0.11); - } - .dm-blog-search-icon { - position: absolute; right: 14px; top: 50%; transform: translateY(-50%); - color: #94a3b8; pointer-events: none; display: flex; - } - .dm-blog-search-results { - position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0; - background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px; - box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden; - } - .dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; } - .dm-blog-search-result { - display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; - border-radius: 10px; text-decoration: none; transition: background .15s ease; - } - .dm-blog-search-result:hover { background: #f8fafc; } - .dm-blog-search-result-cat { - font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red); - } - .dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; } - .dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; } - - /* Recent posts */ - .dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; } - .dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; } - .dm-blog-recent-thumb { - position: relative; flex: 0 0 62px; width: 62px; height: 62px; - border-radius: 13px; overflow: hidden; background: #f1f5f9; - } - .dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; } - .dm-blog-recent-title { - font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); } - .dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; } - - /* Categories */ - .dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; } - .dm-blog-category-item { - display: flex; align-items: center; justify-content: space-between; gap: 10px; - padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important; - border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease; - } - .dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; } - .dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; } - .dm-blog-category-item > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .dm-blog-category-count { - flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9; - min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex; - align-items: center; justify-content: center; padding: 0 7px; - } - - /* CTA card */ - .dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; } - .dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; } - .dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; } - .dm-blog-cta-btn { - display: inline-flex; align-items: center; gap: 8px; - background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700; - padding: 12px 22px; border-radius: 12px; text-decoration: none; - transition: background .2s ease, transform .2s ease; - } - .dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } -c:["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"headline\":\"Battery Simulation: The Secret to EV Route Pre-Validation\",\"description\":\"Before a rider leaves the hub, every EV route should be checked against real charge capacity and the expected return plan.\",\"image\":[\"https://www.doormile.com/images/blog-post-pic-3.webp\"],\"datePublished\":\"2025-06-12T00:00:00.000Z\",\"dateModified\":\"2025-06-12T00:00:00.000Z\",\"author\":{\"@type\":\"Organization\",\"name\":\"Doormile Team\",\"url\":\"https://www.doormile.com\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Doormile\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.doormile.com/images/cropped-image-2.png\"}},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.doormile.com/blog/battery-simulation-the-secret-to-ev-route-pre-validation\"},\"articleSection\":\"EV Fleet\"}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://www.doormile.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https://www.doormile.com/blog\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Battery Simulation: The Secret to EV Route Pre-Validation\",\"item\":\"https://www.doormile.com/blog/battery-simulation-the-secret-to-ev-route-pre-validation\"}]}"}}],["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":[["$","article",null,{"className":"dm-single-blog","children":[["$","link",null,{"rel":"preload","as":"image","href":"/images/blog-post-pic-3.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$17"}}],"$L18","$L19"]}],"$L1a"]}]}]]}] -1b:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],""] -1c:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"ScrollReveal"] -18:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card dm-banner-card","style":{"backgroundImage":"url(/images/blog-post-pic-3.webp)","--hero-overlay":"linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)"},"children":["$","div",null,{"className":"e-con-inner dm-banner-inner","children":[["$","span",null,{"className":"dm-banner-category","children":"EV Fleet"}],["$","h1",null,{"className":"dm-banner-title","children":"Battery Simulation: The Secret to EV Route Pre-Validation"}]]}]}]}] -19:["$","div",null,{"className":"dm-blog-wrap","children":[["$","div",null,{"className":"dm-meta-bar","children":[["$","nav",null,{"className":"dm-meta-breadcrumb","aria-label":"Breadcrumb","children":["$","ol",null,{"children":[["$","li",null,{"children":["$","$L1b",null,{"href":"/","children":"Home"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"children":["$","$L1b",null,{"href":"/blog","children":"Blog"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"aria-current":"page","className":"dm-meta-current","children":"Battery Simulation: The Secret to EV Route Pre-Validation"}]]}]}],["$","div",null,{"className":"dm-meta-items","children":[["$","span",null,{"className":"dm-meta-item dm-meta-author","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","path",null,{"d":"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}],["$","circle",null,{"cx":"12","cy":"7","r":"4"}]]}],"Doormile Team"]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"2"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}]]}],["$","time",null,{"dateTime":"2025-06-12","children":"Jun 12, 2025"}]]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","circle",null,{"cx":"12","cy":"12","r":"9"}],["$","polyline",null,{"points":"12 7 12 12 15 14"}]]}],2," min read"]}]]}]]}],["$","div",null,{"className":"dm-blog-layout","children":[["$","div",null,{"className":"dm-blog-main","children":[["$","p",null,{"className":"dm-blog-intro","children":"A stranded EV is not just a late delivery. It means a vehicle is out of service, a customer is waiting, and the hub has to arrange recovery. Range checks need to happen before dispatch."}],["$","div",null,{"className":"dm-article-body","children":[["$","$L1c","0",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"In last-mile logistics, a missed SLA is rarely caused by one big failure. It usually comes from small delays adding up across a route. Battery Simulation: The Secret to EV Route Pre-Validation looks at how delivery teams can spot those delays early and plan around them before vehicles leave the hub."}]}],["$","$L1c","1",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Why this matters for fleet teams"}]}],["$","$L1c","2",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Every extra kilometre costs money. It uses fuel or charge, adds rider time, wears down vehicles, and increases the chance of a late delivery. When routes are built from fixed zones or old habits, those costs repeat every day."}]}],["$","$L1c","3",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"Fewer vehicles needed for the same number of drops"}],["$","li","1",{"children":"Lower cost per drop through better stop sequencing"}],["$","li","2",{"children":"ETAs that match traffic, distance, and delivery windows"}],["$","li","3",{"children":"Less fuel or charge used per completed order"}]]}]}],["$","$L1c","4",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"From orders to dispatch"}]}],["$","$L1c","5",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"A good dispatch plan starts with the basics: order locations, promised delivery windows, rider capacity, vehicle range, and known traffic trouble spots. MileTruth™ checks those inputs before dispatch so the team is not fixing avoidable mistakes on the road."}]}],["$","$L1c","6",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","figure",null,{"className":"dm-article-figure","children":["$L1d","$L1e"]}]}],"$L1f","$L20","$L21","$L22","$L23"]}]]}],"$L24"]}]]}] -25:T2021, - .dm-blog-footer { - font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32; - /* The global theme applies 72px top/bottom section padding — strip it so the - inner container is the single source of vertical rhythm (no double gap). */ - padding: 0 !important; - } - /* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */ - .dm-blog-footer :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline) */ - .dm-blog-footer a { text-decoration: none !important; } - /* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px - max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA - align to the exact same left/right edges as the article body above. - Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a - consistent ~64–72px section→section gap (no 120px+ voids). */ - .dm-blog-footer-inner { - max-width: 1280px; margin: 0 auto; - /* Compact vertical rhythm on an 8px system. Top padding sets the - article→Prev/Next gap (~24–32px); the inter-section gap sets the - Prev/Next→Related gap (~32–48px). No large arbitrary voids. */ - /* Minimal bottom padding — the global site footer already contributes its - own 20px top inset, so the CTA banner sits close to it without a void. */ - padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px); - display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px); - } - @media (max-width: 767px) { - .dm-blog-footer-inner { - padding-left: 16px; - padding-right: 16px; - } - } - - /* Prev / Next */ - .dm-prevnext { - display: grid; grid-template-columns: 1fr 1fr; gap: 20px; - /* Halved from 40px: tight divider→cards spacing without crowding. */ - padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08); - } - @media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } } - .dm-prevnext-placeholder { display: block; } - .dm-prevnext-card { - display: flex; gap: 16px; align-items: center; padding: 16px; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; - } - .dm-prevnext-card:hover { - transform: translateY(-4px); border-color: rgba(192,18,39,0.2); - box-shadow: 0 16px 34px rgba(192,18,39,0.10); - } - .dm-prevnext-thumb { - position: relative; flex: 0 0 80px; width: 80px; height: 80px; - border-radius: 16px; overflow: hidden; background: #f1f5f9; - } - .dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; } - .dm-prevnext-next { text-align: right; } - .dm-prevnext-next .dm-prevnext-text { align-items: flex-end; } - .dm-prevnext-label { - display: inline-flex; align-items: center; gap: 6px; - font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red); - } - .dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; } - .dm-prevnext-title { - font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); } - - /* Related */ - .dm-related-heading { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important; - line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px; - } - .dm-related-grid { - display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; - } - @media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } } - @media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } } - - .dm-related-card { - display: flex; flex-direction: column; height: 100%; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none; - transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease; - } - .dm-related-card:hover { - transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13); - border-color: rgba(192,18,39,0.2); - } - .dm-related-img { - position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9; - } - .dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-img img { transform: scale(1.05); } - .dm-related-badge { - position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff; - font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px; - padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25); - } - .dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; } - .dm-related-card-title { - font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important; - letter-spacing: -.2px !important; margin: 0 0 10px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-related-card:hover .dm-related-card-title { color: var(--dm-red); } - .dm-related-card-excerpt { - font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - } - .dm-related-readmore { - margin-top: auto; display: inline-flex; align-items: center; gap: 7px; - font-size: 12.5px; font-weight: 800; color: var(--dm-red); - text-transform: uppercase; letter-spacing: .6px; - } - .dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); } - - /* Contact CTA banner */ - .dm-blog-contact-cta { - display: flex; align-items: center; justify-content: space-between; gap: 32px; - flex-wrap: wrap; - background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%); - border-radius: 30px; padding: clamp(32px, 4vw, 56px); - position: relative; overflow: hidden; - } - .dm-blog-contact-cta::after { - content: ""; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px; - background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%); - pointer-events: none; - } - .dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; } - .dm-blog-contact-eyebrow { - display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase; - letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px; - } - .dm-blog-contact-title { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important; - letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance; - } - .dm-blog-contact-sub { - font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450; - } - .dm-blog-contact-btn { - position: relative; z-index: 1; flex-shrink: 0; - display: inline-flex; align-items: center; justify-content: center; gap: 10px; - background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700; - padding: 16px 32px; border-radius: 16px; text-decoration: none; - box-shadow: 0 10px 26px rgba(192,18,39,0.34); - transition: background .2s ease, transform .2s ease; - } - .dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } - @media (max-width: 720px) { - .dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; } - .dm-blog-contact-btn { width: 100%; } - } -1a:["$","section",null,{"className":"dm-blog-footer","aria-label":"More articles","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$25"}}],"$L26"]}] -27:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"Image"] -28:I[23096,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"default"] -1d:["$","span",null,{"className":"dm-article-figure-img","children":["$","$L27",null,{"src":"/images/blog-post-pic-3.webp","alt":"Battery Simulation: The Secret to EV Route Pre-Validation","fill":true,"sizes":"(max-width: 768px) 100vw, 760px","style":{"objectFit":"cover"}}]}] -1e:["$","figcaption",null,{"children":"EV Fleet: route planning decisions made before dispatch."}] -1f:["$","$L1c","7",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","blockquote",null,{"className":"dm-article-quote","children":[["$","p",null,{"children":"A route should be checked before the rider leaves, not explained after the customer calls."}],["$","cite",null,{"children":"Doormile Operations"}]]}]}] -20:["$","$L1c","8",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Putting it into practice"}]}] -21:["$","$L1c","9",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The best improvements usually start with simple measurements. Track distance per route, failed delivery windows, rider idle time, and orders moved between vehicles after dispatch. Those numbers show where the operation is leaking time."}]}] -22:["$","$L1c","10",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ol",null,{"className":"dm-article-ol","children":[["$","li","0",{"children":"Benchmark today's distance, fleet size, and on-time rate."}],["$","li","1",{"children":"Include vehicle capacity, delivery windows, rider shifts, and battery charge."}],["$","li","2",{"children":"Check routes against traffic and customer commitments before dispatch."}],["$","li","3",{"children":"Compare the next dispatch cycle against the old plan."}]]}]}] -23:["$","$L1c","11",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Better routing is not about pushing riders harder. It is about giving them a plan that already accounts for the real day ahead."}]}] -24:["$","div",null,{"className":"dm-blog-aside-wrap","children":["$","aside",null,{"className":"dm-blog-sidebar","aria-label":"Blog sidebar","children":[["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Search"}],["$","$L28",null,{}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Recent Posts"}],["$","ul",null,{"className":"dm-blog-recent","children":[["$","li","how-ai-is-transforming-last-mile-ev-delivery",{"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","time",null,{"dateTime":"2025-10-02","className":"dm-blog-recent-date","children":"Oct 2, 2025"}]]}]]}]}],["$","li","42-less-distance-insights-from-our-hyderabad-hub",{"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","time",null,{"dateTime":"2025-09-18","className":"dm-blog-recent-date","children":"Sep 18, 2025"}]]}]]}]}],["$","li","miletruth-ai-10-stages-to-smarter-dispatch",{"children":["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","time",null,{"dateTime":"2025-09-05","className":"dm-blog-recent-date","children":"Sep 5, 2025"}]]}]]}]}],["$","li","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"children":["$","$L1b",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","time",null,{"dateTime":"2025-08-21","className":"dm-blog-recent-date","children":"Aug 21, 2025"}]]}]]}]}]]}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Categories"}],["$","ul",null,{"className":"dm-blog-categories","children":[["$","li","Case Study",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Case Study"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","EV Fleet",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"EV Fleet"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}],["$","li","Fleet Management",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Fleet Management"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","MileTruth",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"MileTruth"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],"$L29","$L2a","$L2b"]}]]}],"$L2c"]}]}] -26:["$","div",null,{"className":"dm-blog-footer-inner","children":[["$","nav",null,{"className":"dm-prevnext","aria-label":"Article navigation","children":[["$","$L1b",null,{"href":"/blog/how-doormile-maintains-99-9-sla-compliance-at-scale","className":"dm-prevnext-card dm-prevnext-prev","children":[["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L27",null,{"src":"/images/last-mile-approach.webp","alt":"How Doormile Maintains 99.9% SLA Compliance at Scale","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"19","y1":"12","x2":"5","y2":"12"}],["$","polyline",null,{"points":"12 19 5 12 12 5"}]]}],"Previous"]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Operations"}],["$","span",null,{"className":"dm-prevnext-title","children":"How Doormile Maintains 99.9% SLA Compliance at Scale"}]]}]]}],["$","span",null,{"className":"dm-prevnext-placeholder"}]]}],["$","div",null,{"className":"dm-related","children":[["$","h2",null,{"className":"dm-related-heading","children":"Related Articles"}],["$","div",null,{"className":"dm-related-grid","children":[["$","$L1c","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"delay":0,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"EV Fleet"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"Electric vehicles lower running costs, but battery range changes how routes must be planned before dispatch."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L1c","how-ai-is-transforming-last-mile-ev-delivery",{"delay":0.08,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Technology"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L1c","42-less-distance-insights-from-our-hyderabad-hub",{"delay":0.16,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-related-card","children":["$L2d","$L2e"]}]}]]}]]}],"$L2f"]}] -29:["$","li","Operations",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Operations"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2a:["$","li","Sustainability",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Sustainability"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2b:["$","li","Technology",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Technology"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}] -2c:["$","section",null,{"className":"dm-blog-widget dm-blog-cta-card","children":[["$","h2",null,{"className":"dm-blog-cta-title","children":"Planning delivery routes?"}],["$","p",null,{"className":"dm-blog-cta-text","children":"Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time."}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-cta-btn","children":["Contact Us",["$","svg",null,{"width":"18","height":"18","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -2d:["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Case Study"}]]}] -2e:["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -2f:["$","div",null,{"className":"dm-blog-contact-cta","children":[["$","div",null,{"className":"dm-blog-contact-cta-content","children":[["$","span",null,{"className":"dm-blog-contact-eyebrow","children":"Let's talk logistics"}],["$","h2",null,{"className":"dm-blog-contact-title","children":"Ready to move smarter with Doormile?"}],["$","p",null,{"className":"dm-blog-contact-sub","children":"Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding."}]]}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-contact-btn","children":["Get in Touch",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -12:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -30:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -f:null -14:[["$","title","0",{"children":"Battery Simulation: The Secret to EV Route Pre-Validation – Doormile"}],["$","meta","1",{"name":"description","content":"Before a rider leaves the hub, every EV route should be checked against real charge capacity and the expected return plan."}],["$","meta","2",{"name":"author","content":"Doormile Team"}],["$","meta","3",{"name":"keywords","content":"EV Fleet,last-mile logistics,EV fleet,MileTruth,route optimisation"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","link","5",{"rel":"canonical","href":"https://www.doormile.com/blog/battery-simulation-the-secret-to-ev-route-pre-validation"}],["$","meta","6",{"property":"og:title","content":"Battery Simulation: The Secret to EV Route Pre-Validation"}],["$","meta","7",{"property":"og:description","content":"Before a rider leaves the hub, every EV route should be checked against real charge capacity and the expected return plan."}],["$","meta","8",{"property":"og:url","content":"https://www.doormile.com/blog/battery-simulation-the-secret-to-ev-route-pre-validation"}],["$","meta","9",{"property":"og:site_name","content":"Doormile"}],["$","meta","10",{"property":"og:image","content":"https://www.doormile.com/images/blog-post-pic-3.webp"}],["$","meta","11",{"property":"og:image:alt","content":"Battery Simulation: The Secret to EV Route Pre-Validation"}],["$","meta","12",{"property":"og:type","content":"article"}],["$","meta","13",{"property":"article:published_time","content":"2025-06-12T00:00:00.000Z"}],["$","meta","14",{"property":"article:author","content":"Doormile Team"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"Battery Simulation: The Secret to EV Route Pre-Validation"}],["$","meta","17",{"name":"twitter:description","content":"Before a rider leaves the hub, every EV route should be checked against real charge capacity and the expected return plan."}],["$","meta","18",{"name":"twitter:image","content":"https://www.doormile.com/images/blog-post-pic-3.webp"}],["$","link","19",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","21",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","22",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L30","23",{}]] diff --git a/build/blog/battery-simulation-the-secret-to-ev-route-pre-validation/__next._full.txt b/build/blog/battery-simulation-the-secret-to-ev-route-pre-validation/__next._full.txt deleted file mode 100644 index a5e3880..0000000 --- a/build/blog/battery-simulation-the-secret-to-ev-route-pre-validation/__next._full.txt +++ /dev/null @@ -1,544 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -d:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -e:"$Sreact.suspense" -11:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -13:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -15:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","blog","battery-simulation-the-secret-to-ev-route-pre-validation"],"q":"","i":false,"f":[[["",{"children":["blog",{"children":[["slug","battery-simulation-the-secret-to-ev-route-pre-validation","d",null],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":["$Lc",[["$","script","script-0",{"src":"/_next/static/chunks/0yvxf3ok9gcp_.js","async":true,"nonce":"$undefined"}]],["$","$Ld",null,{"children":["$","$e",null,{"name":"Next.MetadataOutlet","children":"$@f"}]}]]}],{},null,false,null]},null,false,"$@10"]},null,false,"$@10"]},null,false,null],["$","$1","h",{"children":[null,["$","$L11",null,{"children":"$L12"}],["$","div",null,{"hidden":true,"children":["$","$L13",null,{"children":["$","$e",null,{"name":"Next.Metadata","children":"$L14"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$15",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -16:[] -10:"$W16" -:HL["/images/blog-post-pic-3.webp","image"] -17:T3d6f, - .dm-single-blog { - --dm-red: #c01227; - --dm-red-hover: #e31d32; - --dm-radius-card: 22px; - --dm-radius-img: 20px; - --dm-radius-badge: 8px; - --dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05); - --dm-border: 1px solid rgba(15, 23, 42, 0.09); - --dm-space-p: 24px; - --dm-space-h: 32px; - --dm-space-img: 32px; - --dm-space-quote: 40px; - --dm-sticky-top: 138px; - --dm-measure: min(1100px, 100%); - font-family: var(--font-manrope), sans-serif; - } - - /* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6 - (120/80/60px UPPERCASE) rules with !important on our own classes. */ - .dm-single-blog :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline, - specificity 0-1-1) so blog links keep our colors and never get underlined. */ - .dm-single-blog a { text-decoration: none !important; } - - /* Page banner: tall homepage-scale frame with only badge + title inside */ - /* Compound selector (specificity 20) + !important beats the global 800px - single-class height rules so the blog banner can use viewport heights. */ - .custom-standard-hero-card.dm-banner-card { - height: 90vh !important; - min-height: 85vh !important; - } - @media (max-width: 1024px) { - .custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; } - } - @media (max-width: 600px) { - .custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; } - } - - .dm-banner-inner { - position: relative; width: 100%; height: 100%; - display: flex; flex-direction: column; align-items: center; justify-content: center; - text-align: center; gap: clamp(22px, 2.6vw, 34px); - padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px); - } - - .dm-banner-category { - display: inline-block; background: var(--dm-red); color: #fff; - font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px; - padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45); - } - .dm-banner-title { - font-family: var(--font-manrope), sans-serif !important; - font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important; - line-height: 1.16 !important; letter-spacing: -1.2px !important; - color: #ffffff !important; margin: 0; max-width: 820px; - text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38); - } - @media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } } - @media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } } - - /* Content wrap begins immediately below the banner */ - /* Shared content container: the SAME max-width + horizontal padding is used - by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings, - images, Prev/Next, Related Articles and the CTA banner all align to one - grid with identical left/right edges. Keep both in sync. */ - .dm-blog-wrap { - max-width: 1280px; margin: 0 auto; - /* 20px mobile padding floor → 40px on desktop; matches the footer container. */ - padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0; - } - @media (max-width: 767px) { - .dm-blog-wrap { - padding-left: 16px; - padding-right: 16px; - } - } - - /* ── Article meta bar (directly under the hero) ── */ - .dm-meta-bar { - display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px; - padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px); - border-bottom: 1px solid rgba(15,23,42,0.10); - } - .dm-meta-breadcrumb ol { - list-style: none; display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b; - } - .dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; } - .dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; } - .dm-meta-sep { color: #cbd5e1; } - .dm-meta-current { - color: #0f172a; font-weight: 700; - max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - } - @media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } } - .dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; } - .dm-meta-item { - display: inline-flex; align-items: center; gap: 7px; - font-size: 13.5px; font-weight: 600; color: #475569; - } - .dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; } - .dm-meta-author { color: #0f172a; font-weight: 700; } - @media (max-width: 600px) { .dm-meta-bar { gap: 12px; } } - .dm-blog-layout { - display: grid; grid-template-columns: minmax(0,1fr) 320px; - /* Tighter gap gives the reading column more room next to the 320px sidebar. */ - gap: clamp(28px, 3vw, 56px); align-items: start; - } - @media (max-width: 1024px) { - .dm-blog-layout { grid-template-columns: 1fr; gap: 48px; } - /* Single-column (tablet/mobile): cap the reading column and centre it so the - article never sits left-aligned with a large empty right gutter. */ - .dm-blog-main { max-width: 900px; margin-inline: auto; } - } - .dm-blog-main { min-width: 0; } - - /* ── Intro lead ── */ - .dm-blog-intro { - max-width: var(--dm-measure); - font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500; - color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px; - border-left: 3px solid var(--dm-red); - } - - /* ── Article body ── */ - .dm-article-body { max-width: var(--dm-measure); } - .dm-article-p { - font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450; - margin: 0 0 var(--dm-space-p); - } - .dm-article-h2 { - font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important; - color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h); - text-wrap: balance; - } - /* Each article block is wrapped in its OWN ScrollReveal
    , so a bare - :first-child rule matched every heading (each is the only child of its - wrapper) and zeroed its top margin, collapsing the gap above every - section heading. Scope the reset to only the article body's first block. */ - .dm-article-body > :first-child :where(.dm-article-h2, .dm-article-h3), - .dm-article-body > .dm-article-h2:first-child, - .dm-article-body > .dm-article-h3:first-child { margin-top: 0; } - .dm-article-h3 { - font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important; - color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px; - text-wrap: balance; - } - @media (max-width: 600px) { - .dm-article-p { font-size: 16px !important; } - .dm-article-ul li, .dm-article-ol li { font-size: 15.5px; } - .dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; } - .dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; } - } - - .dm-article-ul, .dm-article-ol { - /* Top margin (was 0) separates the list from the paragraph above it; - matching bottom margin keeps it clear of the next heading/paragraph. - Slightly larger than --dm-space-p so the list reads as its own block. */ - margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px); - padding-left: 2px; list-style: none; - display: flex; flex-direction: column; gap: 15px; - } - /* Prefixed with .dm-article-body so these beat the theme's global - ".logico-front-end ul li:before" fontello-glyph bullet (specificity 0,1,3), - which otherwise replaces our clean red dot with a misaligned checkmark glyph - and adds its own 1.7em indent. */ - .dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li { - position: relative; padding-left: 34px; - font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450; - } - .dm-article-body .dm-article-ul li::before { - content: ""; position: absolute; left: 7px; top: 10px; - width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red); - /* kill any inherited fontello glyph from the global rule */ - font-size: 0; line-height: 0; - } - .dm-article-ol { counter-reset: dm-li; } - .dm-article-body .dm-article-ol li { counter-increment: dm-li; } - .dm-article-body .dm-article-ol li::before { - content: counter(dm-li); position: absolute; left: 0; top: 0; - width: 24px; height: 24px; border-radius: 7px; - background: rgba(192,18,39,0.10); color: var(--dm-red); - font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; - } - - /* ── Quote ── */ - .dm-article-quote { - position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px; - background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%); - border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0; - box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06); - } - .dm-article-quote::before { - content: "\201C"; position: absolute; left: 22px; top: 8px; - font-family: Georgia, "Times New Roman", serif; - font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700; - } - .dm-article-quote p { - font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600; - font-style: italic; color: #1e293b; margin: 0; - } - .dm-article-quote cite { - display: block; margin-top: 16px; font-size: 13px; font-weight: 700; - font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px; - } - @media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } } - - /* ── Images ── */ - .dm-article-figure { margin: var(--dm-space-img) 0; } - .dm-article-figure-img { - position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; - border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10); - } - .dm-article-figure figcaption { - margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500; - text-align: center; font-style: italic; - } - - /* ── Sidebar ── */ - .dm-blog-aside-wrap { position: relative; } - .dm-blog-sidebar { - display: flex; flex-direction: column; gap: 18px; - position: sticky; top: var(--dm-sticky-top); - } - @media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } } - - .dm-blog-widget { - background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card); - padding: 20px; box-shadow: var(--dm-shadow-card); - } - .dm-blog-widget-title { - font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important; - letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important; - margin: 0 0 15px; padding: 0 0 12px; - border-bottom: 1px solid rgba(15,23,42,0.08); - overflow: visible; white-space: normal; word-break: normal; - } - - /* Search */ - .dm-sr-only { - position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; - overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; - } - .dm-blog-search { position: relative; } - .dm-blog-search-form { position: relative; } - .dm-blog-search-input { - width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px; - padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a; - background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; - } - .dm-blog-search-input::placeholder { color: #9c9c9c; } - .dm-blog-search-input:focus { - outline: none; border-color: var(--dm-red); background: #fff; - box-shadow: 0 0 0 3px rgba(192,18,39,0.11); - } - .dm-blog-search-icon { - position: absolute; right: 14px; top: 50%; transform: translateY(-50%); - color: #94a3b8; pointer-events: none; display: flex; - } - .dm-blog-search-results { - position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0; - background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px; - box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden; - } - .dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; } - .dm-blog-search-result { - display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; - border-radius: 10px; text-decoration: none; transition: background .15s ease; - } - .dm-blog-search-result:hover { background: #f8fafc; } - .dm-blog-search-result-cat { - font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red); - } - .dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; } - .dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; } - - /* Recent posts */ - .dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; } - .dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; } - .dm-blog-recent-thumb { - position: relative; flex: 0 0 62px; width: 62px; height: 62px; - border-radius: 13px; overflow: hidden; background: #f1f5f9; - } - .dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; } - .dm-blog-recent-title { - font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); } - .dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; } - - /* Categories */ - .dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; } - .dm-blog-category-item { - display: flex; align-items: center; justify-content: space-between; gap: 10px; - padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important; - border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease; - } - .dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; } - .dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; } - .dm-blog-category-item > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .dm-blog-category-count { - flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9; - min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex; - align-items: center; justify-content: center; padding: 0 7px; - } - - /* CTA card */ - .dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; } - .dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; } - .dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; } - .dm-blog-cta-btn { - display: inline-flex; align-items: center; gap: 8px; - background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700; - padding: 12px 22px; border-radius: 12px; text-decoration: none; - transition: background .2s ease, transform .2s ease; - } - .dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } -c:["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"headline\":\"Battery Simulation: The Secret to EV Route Pre-Validation\",\"description\":\"Before a rider leaves the hub, every EV route should be checked against real charge capacity and the expected return plan.\",\"image\":[\"https://www.doormile.com/images/blog-post-pic-3.webp\"],\"datePublished\":\"2025-06-12T00:00:00.000Z\",\"dateModified\":\"2025-06-12T00:00:00.000Z\",\"author\":{\"@type\":\"Organization\",\"name\":\"Doormile Team\",\"url\":\"https://www.doormile.com\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Doormile\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.doormile.com/images/cropped-image-2.png\"}},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.doormile.com/blog/battery-simulation-the-secret-to-ev-route-pre-validation\"},\"articleSection\":\"EV Fleet\"}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://www.doormile.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https://www.doormile.com/blog\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Battery Simulation: The Secret to EV Route Pre-Validation\",\"item\":\"https://www.doormile.com/blog/battery-simulation-the-secret-to-ev-route-pre-validation\"}]}"}}],["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":[["$","article",null,{"className":"dm-single-blog","children":[["$","link",null,{"rel":"preload","as":"image","href":"/images/blog-post-pic-3.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$17"}}],"$L18","$L19"]}],"$L1a"]}]}]]}] -1b:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],""] -1c:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"ScrollReveal"] -18:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card dm-banner-card","style":{"backgroundImage":"url(/images/blog-post-pic-3.webp)","--hero-overlay":"linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)"},"children":["$","div",null,{"className":"e-con-inner dm-banner-inner","children":[["$","span",null,{"className":"dm-banner-category","children":"EV Fleet"}],["$","h1",null,{"className":"dm-banner-title","children":"Battery Simulation: The Secret to EV Route Pre-Validation"}]]}]}]}] -19:["$","div",null,{"className":"dm-blog-wrap","children":[["$","div",null,{"className":"dm-meta-bar","children":[["$","nav",null,{"className":"dm-meta-breadcrumb","aria-label":"Breadcrumb","children":["$","ol",null,{"children":[["$","li",null,{"children":["$","$L1b",null,{"href":"/","children":"Home"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"children":["$","$L1b",null,{"href":"/blog","children":"Blog"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"aria-current":"page","className":"dm-meta-current","children":"Battery Simulation: The Secret to EV Route Pre-Validation"}]]}]}],["$","div",null,{"className":"dm-meta-items","children":[["$","span",null,{"className":"dm-meta-item dm-meta-author","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","path",null,{"d":"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}],["$","circle",null,{"cx":"12","cy":"7","r":"4"}]]}],"Doormile Team"]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"2"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}]]}],["$","time",null,{"dateTime":"2025-06-12","children":"Jun 12, 2025"}]]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","circle",null,{"cx":"12","cy":"12","r":"9"}],["$","polyline",null,{"points":"12 7 12 12 15 14"}]]}],2," min read"]}]]}]]}],["$","div",null,{"className":"dm-blog-layout","children":[["$","div",null,{"className":"dm-blog-main","children":[["$","p",null,{"className":"dm-blog-intro","children":"A stranded EV is not just a late delivery. It means a vehicle is out of service, a customer is waiting, and the hub has to arrange recovery. Range checks need to happen before dispatch."}],["$","div",null,{"className":"dm-article-body","children":[["$","$L1c","0",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"In last-mile logistics, a missed SLA is rarely caused by one big failure. It usually comes from small delays adding up across a route. Battery Simulation: The Secret to EV Route Pre-Validation looks at how delivery teams can spot those delays early and plan around them before vehicles leave the hub."}]}],["$","$L1c","1",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Why this matters for fleet teams"}]}],["$","$L1c","2",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Every extra kilometre costs money. It uses fuel or charge, adds rider time, wears down vehicles, and increases the chance of a late delivery. When routes are built from fixed zones or old habits, those costs repeat every day."}]}],["$","$L1c","3",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"Fewer vehicles needed for the same number of drops"}],["$","li","1",{"children":"Lower cost per drop through better stop sequencing"}],["$","li","2",{"children":"ETAs that match traffic, distance, and delivery windows"}],["$","li","3",{"children":"Less fuel or charge used per completed order"}]]}]}],["$","$L1c","4",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"From orders to dispatch"}]}],["$","$L1c","5",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"A good dispatch plan starts with the basics: order locations, promised delivery windows, rider capacity, vehicle range, and known traffic trouble spots. MileTruth™ checks those inputs before dispatch so the team is not fixing avoidable mistakes on the road."}]}],["$","$L1c","6",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","figure",null,{"className":"dm-article-figure","children":["$L1d","$L1e"]}]}],"$L1f","$L20","$L21","$L22","$L23"]}]]}],"$L24"]}]]}] -25:T2021, - .dm-blog-footer { - font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32; - /* The global theme applies 72px top/bottom section padding — strip it so the - inner container is the single source of vertical rhythm (no double gap). */ - padding: 0 !important; - } - /* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */ - .dm-blog-footer :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline) */ - .dm-blog-footer a { text-decoration: none !important; } - /* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px - max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA - align to the exact same left/right edges as the article body above. - Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a - consistent ~64–72px section→section gap (no 120px+ voids). */ - .dm-blog-footer-inner { - max-width: 1280px; margin: 0 auto; - /* Compact vertical rhythm on an 8px system. Top padding sets the - article→Prev/Next gap (~24–32px); the inter-section gap sets the - Prev/Next→Related gap (~32–48px). No large arbitrary voids. */ - /* Minimal bottom padding — the global site footer already contributes its - own 20px top inset, so the CTA banner sits close to it without a void. */ - padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px); - display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px); - } - @media (max-width: 767px) { - .dm-blog-footer-inner { - padding-left: 16px; - padding-right: 16px; - } - } - - /* Prev / Next */ - .dm-prevnext { - display: grid; grid-template-columns: 1fr 1fr; gap: 20px; - /* Halved from 40px: tight divider→cards spacing without crowding. */ - padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08); - } - @media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } } - .dm-prevnext-placeholder { display: block; } - .dm-prevnext-card { - display: flex; gap: 16px; align-items: center; padding: 16px; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; - } - .dm-prevnext-card:hover { - transform: translateY(-4px); border-color: rgba(192,18,39,0.2); - box-shadow: 0 16px 34px rgba(192,18,39,0.10); - } - .dm-prevnext-thumb { - position: relative; flex: 0 0 80px; width: 80px; height: 80px; - border-radius: 16px; overflow: hidden; background: #f1f5f9; - } - .dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; } - .dm-prevnext-next { text-align: right; } - .dm-prevnext-next .dm-prevnext-text { align-items: flex-end; } - .dm-prevnext-label { - display: inline-flex; align-items: center; gap: 6px; - font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red); - } - .dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; } - .dm-prevnext-title { - font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); } - - /* Related */ - .dm-related-heading { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important; - line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px; - } - .dm-related-grid { - display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; - } - @media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } } - @media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } } - - .dm-related-card { - display: flex; flex-direction: column; height: 100%; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none; - transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease; - } - .dm-related-card:hover { - transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13); - border-color: rgba(192,18,39,0.2); - } - .dm-related-img { - position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9; - } - .dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-img img { transform: scale(1.05); } - .dm-related-badge { - position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff; - font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px; - padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25); - } - .dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; } - .dm-related-card-title { - font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important; - letter-spacing: -.2px !important; margin: 0 0 10px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-related-card:hover .dm-related-card-title { color: var(--dm-red); } - .dm-related-card-excerpt { - font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - } - .dm-related-readmore { - margin-top: auto; display: inline-flex; align-items: center; gap: 7px; - font-size: 12.5px; font-weight: 800; color: var(--dm-red); - text-transform: uppercase; letter-spacing: .6px; - } - .dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); } - - /* Contact CTA banner */ - .dm-blog-contact-cta { - display: flex; align-items: center; justify-content: space-between; gap: 32px; - flex-wrap: wrap; - background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%); - border-radius: 30px; padding: clamp(32px, 4vw, 56px); - position: relative; overflow: hidden; - } - .dm-blog-contact-cta::after { - content: ""; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px; - background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%); - pointer-events: none; - } - .dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; } - .dm-blog-contact-eyebrow { - display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase; - letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px; - } - .dm-blog-contact-title { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important; - letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance; - } - .dm-blog-contact-sub { - font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450; - } - .dm-blog-contact-btn { - position: relative; z-index: 1; flex-shrink: 0; - display: inline-flex; align-items: center; justify-content: center; gap: 10px; - background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700; - padding: 16px 32px; border-radius: 16px; text-decoration: none; - box-shadow: 0 10px 26px rgba(192,18,39,0.34); - transition: background .2s ease, transform .2s ease; - } - .dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } - @media (max-width: 720px) { - .dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; } - .dm-blog-contact-btn { width: 100%; } - } -1a:["$","section",null,{"className":"dm-blog-footer","aria-label":"More articles","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$25"}}],"$L26"]}] -27:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"Image"] -28:I[23096,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"default"] -1d:["$","span",null,{"className":"dm-article-figure-img","children":["$","$L27",null,{"src":"/images/blog-post-pic-3.webp","alt":"Battery Simulation: The Secret to EV Route Pre-Validation","fill":true,"sizes":"(max-width: 768px) 100vw, 760px","style":{"objectFit":"cover"}}]}] -1e:["$","figcaption",null,{"children":"EV Fleet: route planning decisions made before dispatch."}] -1f:["$","$L1c","7",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","blockquote",null,{"className":"dm-article-quote","children":[["$","p",null,{"children":"A route should be checked before the rider leaves, not explained after the customer calls."}],["$","cite",null,{"children":"Doormile Operations"}]]}]}] -20:["$","$L1c","8",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Putting it into practice"}]}] -21:["$","$L1c","9",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The best improvements usually start with simple measurements. Track distance per route, failed delivery windows, rider idle time, and orders moved between vehicles after dispatch. Those numbers show where the operation is leaking time."}]}] -22:["$","$L1c","10",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ol",null,{"className":"dm-article-ol","children":[["$","li","0",{"children":"Benchmark today's distance, fleet size, and on-time rate."}],["$","li","1",{"children":"Include vehicle capacity, delivery windows, rider shifts, and battery charge."}],["$","li","2",{"children":"Check routes against traffic and customer commitments before dispatch."}],["$","li","3",{"children":"Compare the next dispatch cycle against the old plan."}]]}]}] -23:["$","$L1c","11",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Better routing is not about pushing riders harder. It is about giving them a plan that already accounts for the real day ahead."}]}] -24:["$","div",null,{"className":"dm-blog-aside-wrap","children":["$","aside",null,{"className":"dm-blog-sidebar","aria-label":"Blog sidebar","children":[["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Search"}],["$","$L28",null,{}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Recent Posts"}],["$","ul",null,{"className":"dm-blog-recent","children":[["$","li","how-ai-is-transforming-last-mile-ev-delivery",{"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","time",null,{"dateTime":"2025-10-02","className":"dm-blog-recent-date","children":"Oct 2, 2025"}]]}]]}]}],["$","li","42-less-distance-insights-from-our-hyderabad-hub",{"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","time",null,{"dateTime":"2025-09-18","className":"dm-blog-recent-date","children":"Sep 18, 2025"}]]}]]}]}],["$","li","miletruth-ai-10-stages-to-smarter-dispatch",{"children":["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","time",null,{"dateTime":"2025-09-05","className":"dm-blog-recent-date","children":"Sep 5, 2025"}]]}]]}]}],["$","li","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"children":["$","$L1b",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","time",null,{"dateTime":"2025-08-21","className":"dm-blog-recent-date","children":"Aug 21, 2025"}]]}]]}]}]]}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Categories"}],["$","ul",null,{"className":"dm-blog-categories","children":[["$","li","Case Study",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Case Study"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","EV Fleet",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"EV Fleet"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}],["$","li","Fleet Management",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Fleet Management"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","MileTruth",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"MileTruth"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],"$L29","$L2a","$L2b"]}]]}],"$L2c"]}]}] -26:["$","div",null,{"className":"dm-blog-footer-inner","children":[["$","nav",null,{"className":"dm-prevnext","aria-label":"Article navigation","children":[["$","$L1b",null,{"href":"/blog/how-doormile-maintains-99-9-sla-compliance-at-scale","className":"dm-prevnext-card dm-prevnext-prev","children":[["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L27",null,{"src":"/images/last-mile-approach.webp","alt":"How Doormile Maintains 99.9% SLA Compliance at Scale","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"19","y1":"12","x2":"5","y2":"12"}],["$","polyline",null,{"points":"12 19 5 12 12 5"}]]}],"Previous"]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Operations"}],["$","span",null,{"className":"dm-prevnext-title","children":"How Doormile Maintains 99.9% SLA Compliance at Scale"}]]}]]}],["$","span",null,{"className":"dm-prevnext-placeholder"}]]}],["$","div",null,{"className":"dm-related","children":[["$","h2",null,{"className":"dm-related-heading","children":"Related Articles"}],["$","div",null,{"className":"dm-related-grid","children":[["$","$L1c","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"delay":0,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"EV Fleet"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"Electric vehicles lower running costs, but battery range changes how routes must be planned before dispatch."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L1c","how-ai-is-transforming-last-mile-ev-delivery",{"delay":0.08,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Technology"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L1c","42-less-distance-insights-from-our-hyderabad-hub",{"delay":0.16,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-related-card","children":["$L2d","$L2e"]}]}]]}]]}],"$L2f"]}] -29:["$","li","Operations",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Operations"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2a:["$","li","Sustainability",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Sustainability"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2b:["$","li","Technology",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Technology"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}] -2c:["$","section",null,{"className":"dm-blog-widget dm-blog-cta-card","children":[["$","h2",null,{"className":"dm-blog-cta-title","children":"Planning delivery routes?"}],["$","p",null,{"className":"dm-blog-cta-text","children":"Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time."}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-cta-btn","children":["Contact Us",["$","svg",null,{"width":"18","height":"18","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -2d:["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Case Study"}]]}] -2e:["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -2f:["$","div",null,{"className":"dm-blog-contact-cta","children":[["$","div",null,{"className":"dm-blog-contact-cta-content","children":[["$","span",null,{"className":"dm-blog-contact-eyebrow","children":"Let's talk logistics"}],["$","h2",null,{"className":"dm-blog-contact-title","children":"Ready to move smarter with Doormile?"}],["$","p",null,{"className":"dm-blog-contact-sub","children":"Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding."}]]}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-contact-btn","children":["Get in Touch",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -12:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -30:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -f:null -14:[["$","title","0",{"children":"Battery Simulation: The Secret to EV Route Pre-Validation – Doormile"}],["$","meta","1",{"name":"description","content":"Before a rider leaves the hub, every EV route should be checked against real charge capacity and the expected return plan."}],["$","meta","2",{"name":"author","content":"Doormile Team"}],["$","meta","3",{"name":"keywords","content":"EV Fleet,last-mile logistics,EV fleet,MileTruth,route optimisation"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","link","5",{"rel":"canonical","href":"https://www.doormile.com/blog/battery-simulation-the-secret-to-ev-route-pre-validation"}],["$","meta","6",{"property":"og:title","content":"Battery Simulation: The Secret to EV Route Pre-Validation"}],["$","meta","7",{"property":"og:description","content":"Before a rider leaves the hub, every EV route should be checked against real charge capacity and the expected return plan."}],["$","meta","8",{"property":"og:url","content":"https://www.doormile.com/blog/battery-simulation-the-secret-to-ev-route-pre-validation"}],["$","meta","9",{"property":"og:site_name","content":"Doormile"}],["$","meta","10",{"property":"og:image","content":"https://www.doormile.com/images/blog-post-pic-3.webp"}],["$","meta","11",{"property":"og:image:alt","content":"Battery Simulation: The Secret to EV Route Pre-Validation"}],["$","meta","12",{"property":"og:type","content":"article"}],["$","meta","13",{"property":"article:published_time","content":"2025-06-12T00:00:00.000Z"}],["$","meta","14",{"property":"article:author","content":"Doormile Team"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"Battery Simulation: The Secret to EV Route Pre-Validation"}],["$","meta","17",{"name":"twitter:description","content":"Before a rider leaves the hub, every EV route should be checked against real charge capacity and the expected return plan."}],["$","meta","18",{"name":"twitter:image","content":"https://www.doormile.com/images/blog-post-pic-3.webp"}],["$","link","19",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","21",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","22",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L30","23",{}]] diff --git a/build/blog/battery-simulation-the-secret-to-ev-route-pre-validation/__next._head.txt b/build/blog/battery-simulation-the-secret-to-ev-route-pre-validation/__next._head.txt deleted file mode 100644 index 94bdfb7..0000000 --- a/build/blog/battery-simulation-the-secret-to-ev-route-pre-validation/__next._head.txt +++ /dev/null @@ -1,6 +0,0 @@ -1:"$Sreact.fragment" -2:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -3:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -4:"$Sreact.suspense" -5:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Battery Simulation: The Secret to EV Route Pre-Validation – Doormile"}],["$","meta","1",{"name":"description","content":"Before a rider leaves the hub, every EV route should be checked against real charge capacity and the expected return plan."}],["$","meta","2",{"name":"author","content":"Doormile Team"}],["$","meta","3",{"name":"keywords","content":"EV Fleet,last-mile logistics,EV fleet,MileTruth,route optimisation"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","link","5",{"rel":"canonical","href":"https://www.doormile.com/blog/battery-simulation-the-secret-to-ev-route-pre-validation"}],["$","meta","6",{"property":"og:title","content":"Battery Simulation: The Secret to EV Route Pre-Validation"}],["$","meta","7",{"property":"og:description","content":"Before a rider leaves the hub, every EV route should be checked against real charge capacity and the expected return plan."}],["$","meta","8",{"property":"og:url","content":"https://www.doormile.com/blog/battery-simulation-the-secret-to-ev-route-pre-validation"}],["$","meta","9",{"property":"og:site_name","content":"Doormile"}],["$","meta","10",{"property":"og:image","content":"https://www.doormile.com/images/blog-post-pic-3.webp"}],["$","meta","11",{"property":"og:image:alt","content":"Battery Simulation: The Secret to EV Route Pre-Validation"}],["$","meta","12",{"property":"og:type","content":"article"}],["$","meta","13",{"property":"article:published_time","content":"2025-06-12T00:00:00.000Z"}],["$","meta","14",{"property":"article:author","content":"Doormile Team"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"Battery Simulation: The Secret to EV Route Pre-Validation"}],["$","meta","17",{"name":"twitter:description","content":"Before a rider leaves the hub, every EV route should be checked against real charge capacity and the expected return plan."}],["$","meta","18",{"name":"twitter:image","content":"https://www.doormile.com/images/blog-post-pic-3.webp"}],["$","link","19",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","21",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","22",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L5","23",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/battery-simulation-the-secret-to-ev-route-pre-validation/__next._index.txt b/build/blog/battery-simulation-the-secret-to-ev-route-pre-validation/__next._index.txt deleted file mode 100644 index d0b3355..0000000 --- a/build/blog/battery-simulation-the-secret-to-ev-route-pre-validation/__next._index.txt +++ /dev/null @@ -1,15 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","template":["$","$La",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/battery-simulation-the-secret-to-ev-route-pre-validation/__next._tree.txt b/build/blog/battery-simulation-the-secret-to-ev-route-pre-validation/__next._tree.txt deleted file mode 100644 index ac35bc5..0000000 --- a/build/blog/battery-simulation-the-secret-to-ev-route-pre-validation/__next._tree.txt +++ /dev/null @@ -1,10 +0,0 @@ -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -:HL["/images/blog-post-pic-3.webp","image"] -0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"blog","param":null,"prefetchHints":0,"slots":{"children":{"name":"slug","param":{"type":"d","key":"battery-simulation-the-secret-to-ev-route-pre-validation","siblings":null},"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/battery-simulation-the-secret-to-ev-route-pre-validation/__next.blog.$d$slug.__PAGE__.txt b/build/blog/battery-simulation-the-secret-to-ev-route-pre-validation/__next.blog.$d$slug.__PAGE__.txt deleted file mode 100644 index b1f238e..0000000 --- a/build/blog/battery-simulation-the-secret-to-ev-route-pre-validation/__next.blog.$d$slug.__PAGE__.txt +++ /dev/null @@ -1,519 +0,0 @@ -1:"$Sreact.fragment" -8:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],""] -9:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"ScrollReveal"] -14:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -15:"$Sreact.suspense" -17:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"Image"] -18:I[23096,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"default"] -:HL["/images/blog-post-pic-3.webp","image"] -2:T3d6f, - .dm-single-blog { - --dm-red: #c01227; - --dm-red-hover: #e31d32; - --dm-radius-card: 22px; - --dm-radius-img: 20px; - --dm-radius-badge: 8px; - --dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05); - --dm-border: 1px solid rgba(15, 23, 42, 0.09); - --dm-space-p: 24px; - --dm-space-h: 32px; - --dm-space-img: 32px; - --dm-space-quote: 40px; - --dm-sticky-top: 138px; - --dm-measure: min(1100px, 100%); - font-family: var(--font-manrope), sans-serif; - } - - /* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6 - (120/80/60px UPPERCASE) rules with !important on our own classes. */ - .dm-single-blog :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline, - specificity 0-1-1) so blog links keep our colors and never get underlined. */ - .dm-single-blog a { text-decoration: none !important; } - - /* Page banner: tall homepage-scale frame with only badge + title inside */ - /* Compound selector (specificity 20) + !important beats the global 800px - single-class height rules so the blog banner can use viewport heights. */ - .custom-standard-hero-card.dm-banner-card { - height: 90vh !important; - min-height: 85vh !important; - } - @media (max-width: 1024px) { - .custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; } - } - @media (max-width: 600px) { - .custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; } - } - - .dm-banner-inner { - position: relative; width: 100%; height: 100%; - display: flex; flex-direction: column; align-items: center; justify-content: center; - text-align: center; gap: clamp(22px, 2.6vw, 34px); - padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px); - } - - .dm-banner-category { - display: inline-block; background: var(--dm-red); color: #fff; - font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px; - padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45); - } - .dm-banner-title { - font-family: var(--font-manrope), sans-serif !important; - font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important; - line-height: 1.16 !important; letter-spacing: -1.2px !important; - color: #ffffff !important; margin: 0; max-width: 820px; - text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38); - } - @media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } } - @media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } } - - /* Content wrap begins immediately below the banner */ - /* Shared content container: the SAME max-width + horizontal padding is used - by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings, - images, Prev/Next, Related Articles and the CTA banner all align to one - grid with identical left/right edges. Keep both in sync. */ - .dm-blog-wrap { - max-width: 1280px; margin: 0 auto; - /* 20px mobile padding floor → 40px on desktop; matches the footer container. */ - padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0; - } - @media (max-width: 767px) { - .dm-blog-wrap { - padding-left: 16px; - padding-right: 16px; - } - } - - /* ── Article meta bar (directly under the hero) ── */ - .dm-meta-bar { - display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px; - padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px); - border-bottom: 1px solid rgba(15,23,42,0.10); - } - .dm-meta-breadcrumb ol { - list-style: none; display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b; - } - .dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; } - .dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; } - .dm-meta-sep { color: #cbd5e1; } - .dm-meta-current { - color: #0f172a; font-weight: 700; - max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - } - @media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } } - .dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; } - .dm-meta-item { - display: inline-flex; align-items: center; gap: 7px; - font-size: 13.5px; font-weight: 600; color: #475569; - } - .dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; } - .dm-meta-author { color: #0f172a; font-weight: 700; } - @media (max-width: 600px) { .dm-meta-bar { gap: 12px; } } - .dm-blog-layout { - display: grid; grid-template-columns: minmax(0,1fr) 320px; - /* Tighter gap gives the reading column more room next to the 320px sidebar. */ - gap: clamp(28px, 3vw, 56px); align-items: start; - } - @media (max-width: 1024px) { - .dm-blog-layout { grid-template-columns: 1fr; gap: 48px; } - /* Single-column (tablet/mobile): cap the reading column and centre it so the - article never sits left-aligned with a large empty right gutter. */ - .dm-blog-main { max-width: 900px; margin-inline: auto; } - } - .dm-blog-main { min-width: 0; } - - /* ── Intro lead ── */ - .dm-blog-intro { - max-width: var(--dm-measure); - font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500; - color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px; - border-left: 3px solid var(--dm-red); - } - - /* ── Article body ── */ - .dm-article-body { max-width: var(--dm-measure); } - .dm-article-p { - font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450; - margin: 0 0 var(--dm-space-p); - } - .dm-article-h2 { - font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important; - color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h); - text-wrap: balance; - } - /* Each article block is wrapped in its OWN ScrollReveal
    , so a bare - :first-child rule matched every heading (each is the only child of its - wrapper) and zeroed its top margin, collapsing the gap above every - section heading. Scope the reset to only the article body's first block. */ - .dm-article-body > :first-child :where(.dm-article-h2, .dm-article-h3), - .dm-article-body > .dm-article-h2:first-child, - .dm-article-body > .dm-article-h3:first-child { margin-top: 0; } - .dm-article-h3 { - font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important; - color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px; - text-wrap: balance; - } - @media (max-width: 600px) { - .dm-article-p { font-size: 16px !important; } - .dm-article-ul li, .dm-article-ol li { font-size: 15.5px; } - .dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; } - .dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; } - } - - .dm-article-ul, .dm-article-ol { - /* Top margin (was 0) separates the list from the paragraph above it; - matching bottom margin keeps it clear of the next heading/paragraph. - Slightly larger than --dm-space-p so the list reads as its own block. */ - margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px); - padding-left: 2px; list-style: none; - display: flex; flex-direction: column; gap: 15px; - } - /* Prefixed with .dm-article-body so these beat the theme's global - ".logico-front-end ul li:before" fontello-glyph bullet (specificity 0,1,3), - which otherwise replaces our clean red dot with a misaligned checkmark glyph - and adds its own 1.7em indent. */ - .dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li { - position: relative; padding-left: 34px; - font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450; - } - .dm-article-body .dm-article-ul li::before { - content: ""; position: absolute; left: 7px; top: 10px; - width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red); - /* kill any inherited fontello glyph from the global rule */ - font-size: 0; line-height: 0; - } - .dm-article-ol { counter-reset: dm-li; } - .dm-article-body .dm-article-ol li { counter-increment: dm-li; } - .dm-article-body .dm-article-ol li::before { - content: counter(dm-li); position: absolute; left: 0; top: 0; - width: 24px; height: 24px; border-radius: 7px; - background: rgba(192,18,39,0.10); color: var(--dm-red); - font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; - } - - /* ── Quote ── */ - .dm-article-quote { - position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px; - background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%); - border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0; - box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06); - } - .dm-article-quote::before { - content: "\201C"; position: absolute; left: 22px; top: 8px; - font-family: Georgia, "Times New Roman", serif; - font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700; - } - .dm-article-quote p { - font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600; - font-style: italic; color: #1e293b; margin: 0; - } - .dm-article-quote cite { - display: block; margin-top: 16px; font-size: 13px; font-weight: 700; - font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px; - } - @media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } } - - /* ── Images ── */ - .dm-article-figure { margin: var(--dm-space-img) 0; } - .dm-article-figure-img { - position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; - border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10); - } - .dm-article-figure figcaption { - margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500; - text-align: center; font-style: italic; - } - - /* ── Sidebar ── */ - .dm-blog-aside-wrap { position: relative; } - .dm-blog-sidebar { - display: flex; flex-direction: column; gap: 18px; - position: sticky; top: var(--dm-sticky-top); - } - @media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } } - - .dm-blog-widget { - background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card); - padding: 20px; box-shadow: var(--dm-shadow-card); - } - .dm-blog-widget-title { - font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important; - letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important; - margin: 0 0 15px; padding: 0 0 12px; - border-bottom: 1px solid rgba(15,23,42,0.08); - overflow: visible; white-space: normal; word-break: normal; - } - - /* Search */ - .dm-sr-only { - position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; - overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; - } - .dm-blog-search { position: relative; } - .dm-blog-search-form { position: relative; } - .dm-blog-search-input { - width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px; - padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a; - background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; - } - .dm-blog-search-input::placeholder { color: #9c9c9c; } - .dm-blog-search-input:focus { - outline: none; border-color: var(--dm-red); background: #fff; - box-shadow: 0 0 0 3px rgba(192,18,39,0.11); - } - .dm-blog-search-icon { - position: absolute; right: 14px; top: 50%; transform: translateY(-50%); - color: #94a3b8; pointer-events: none; display: flex; - } - .dm-blog-search-results { - position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0; - background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px; - box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden; - } - .dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; } - .dm-blog-search-result { - display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; - border-radius: 10px; text-decoration: none; transition: background .15s ease; - } - .dm-blog-search-result:hover { background: #f8fafc; } - .dm-blog-search-result-cat { - font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red); - } - .dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; } - .dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; } - - /* Recent posts */ - .dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; } - .dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; } - .dm-blog-recent-thumb { - position: relative; flex: 0 0 62px; width: 62px; height: 62px; - border-radius: 13px; overflow: hidden; background: #f1f5f9; - } - .dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; } - .dm-blog-recent-title { - font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); } - .dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; } - - /* Categories */ - .dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; } - .dm-blog-category-item { - display: flex; align-items: center; justify-content: space-between; gap: 10px; - padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important; - border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease; - } - .dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; } - .dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; } - .dm-blog-category-item > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .dm-blog-category-count { - flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9; - min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex; - align-items: center; justify-content: center; padding: 0 7px; - } - - /* CTA card */ - .dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; } - .dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; } - .dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; } - .dm-blog-cta-btn { - display: inline-flex; align-items: center; gap: 8px; - background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700; - padding: 12px 22px; border-radius: 12px; text-decoration: none; - transition: background .2s ease, transform .2s ease; - } - .dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } -0:{"rsc":["$","$1","c",{"children":[["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"headline\":\"Battery Simulation: The Secret to EV Route Pre-Validation\",\"description\":\"Before a rider leaves the hub, every EV route should be checked against real charge capacity and the expected return plan.\",\"image\":[\"https://www.doormile.com/images/blog-post-pic-3.webp\"],\"datePublished\":\"2025-06-12T00:00:00.000Z\",\"dateModified\":\"2025-06-12T00:00:00.000Z\",\"author\":{\"@type\":\"Organization\",\"name\":\"Doormile Team\",\"url\":\"https://www.doormile.com\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Doormile\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.doormile.com/images/cropped-image-2.png\"}},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.doormile.com/blog/battery-simulation-the-secret-to-ev-route-pre-validation\"},\"articleSection\":\"EV Fleet\"}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://www.doormile.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https://www.doormile.com/blog\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Battery Simulation: The Secret to EV Route Pre-Validation\",\"item\":\"https://www.doormile.com/blog/battery-simulation-the-secret-to-ev-route-pre-validation\"}]}"}}],["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":[["$","article",null,{"className":"dm-single-blog","children":[["$","link",null,{"rel":"preload","as":"image","href":"/images/blog-post-pic-3.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$2"}}],"$L3","$L4"]}],"$L5"]}]}]]}],["$L6"],"$L7"]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} -3:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card dm-banner-card","style":{"backgroundImage":"url(/images/blog-post-pic-3.webp)","--hero-overlay":"linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)"},"children":["$","div",null,{"className":"e-con-inner dm-banner-inner","children":[["$","span",null,{"className":"dm-banner-category","children":"EV Fleet"}],["$","h1",null,{"className":"dm-banner-title","children":"Battery Simulation: The Secret to EV Route Pre-Validation"}]]}]}]}] -4:["$","div",null,{"className":"dm-blog-wrap","children":[["$","div",null,{"className":"dm-meta-bar","children":[["$","nav",null,{"className":"dm-meta-breadcrumb","aria-label":"Breadcrumb","children":["$","ol",null,{"children":[["$","li",null,{"children":["$","$L8",null,{"href":"/","children":"Home"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"children":["$","$L8",null,{"href":"/blog","children":"Blog"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"aria-current":"page","className":"dm-meta-current","children":"Battery Simulation: The Secret to EV Route Pre-Validation"}]]}]}],["$","div",null,{"className":"dm-meta-items","children":[["$","span",null,{"className":"dm-meta-item dm-meta-author","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","path",null,{"d":"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}],["$","circle",null,{"cx":"12","cy":"7","r":"4"}]]}],"Doormile Team"]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"2"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}]]}],["$","time",null,{"dateTime":"2025-06-12","children":"Jun 12, 2025"}]]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","circle",null,{"cx":"12","cy":"12","r":"9"}],["$","polyline",null,{"points":"12 7 12 12 15 14"}]]}],2," min read"]}]]}]]}],["$","div",null,{"className":"dm-blog-layout","children":[["$","div",null,{"className":"dm-blog-main","children":[["$","p",null,{"className":"dm-blog-intro","children":"A stranded EV is not just a late delivery. It means a vehicle is out of service, a customer is waiting, and the hub has to arrange recovery. Range checks need to happen before dispatch."}],["$","div",null,{"className":"dm-article-body","children":[["$","$L9","0",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"In last-mile logistics, a missed SLA is rarely caused by one big failure. It usually comes from small delays adding up across a route. Battery Simulation: The Secret to EV Route Pre-Validation looks at how delivery teams can spot those delays early and plan around them before vehicles leave the hub."}]}],["$","$L9","1",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Why this matters for fleet teams"}]}],["$","$L9","2",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Every extra kilometre costs money. It uses fuel or charge, adds rider time, wears down vehicles, and increases the chance of a late delivery. When routes are built from fixed zones or old habits, those costs repeat every day."}]}],["$","$L9","3",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"Fewer vehicles needed for the same number of drops"}],["$","li","1",{"children":"Lower cost per drop through better stop sequencing"}],["$","li","2",{"children":"ETAs that match traffic, distance, and delivery windows"}],["$","li","3",{"children":"Less fuel or charge used per completed order"}]]}]}],["$","$L9","4",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"From orders to dispatch"}]}],["$","$L9","5",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"A good dispatch plan starts with the basics: order locations, promised delivery windows, rider capacity, vehicle range, and known traffic trouble spots. MileTruth™ checks those inputs before dispatch so the team is not fixing avoidable mistakes on the road."}]}],["$","$L9","6",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","figure",null,{"className":"dm-article-figure","children":["$La","$Lb"]}]}],"$Lc","$Ld","$Le","$Lf","$L10"]}]]}],"$L11"]}]]}] -12:T2021, - .dm-blog-footer { - font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32; - /* The global theme applies 72px top/bottom section padding — strip it so the - inner container is the single source of vertical rhythm (no double gap). */ - padding: 0 !important; - } - /* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */ - .dm-blog-footer :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline) */ - .dm-blog-footer a { text-decoration: none !important; } - /* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px - max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA - align to the exact same left/right edges as the article body above. - Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a - consistent ~64–72px section→section gap (no 120px+ voids). */ - .dm-blog-footer-inner { - max-width: 1280px; margin: 0 auto; - /* Compact vertical rhythm on an 8px system. Top padding sets the - article→Prev/Next gap (~24–32px); the inter-section gap sets the - Prev/Next→Related gap (~32–48px). No large arbitrary voids. */ - /* Minimal bottom padding — the global site footer already contributes its - own 20px top inset, so the CTA banner sits close to it without a void. */ - padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px); - display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px); - } - @media (max-width: 767px) { - .dm-blog-footer-inner { - padding-left: 16px; - padding-right: 16px; - } - } - - /* Prev / Next */ - .dm-prevnext { - display: grid; grid-template-columns: 1fr 1fr; gap: 20px; - /* Halved from 40px: tight divider→cards spacing without crowding. */ - padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08); - } - @media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } } - .dm-prevnext-placeholder { display: block; } - .dm-prevnext-card { - display: flex; gap: 16px; align-items: center; padding: 16px; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; - } - .dm-prevnext-card:hover { - transform: translateY(-4px); border-color: rgba(192,18,39,0.2); - box-shadow: 0 16px 34px rgba(192,18,39,0.10); - } - .dm-prevnext-thumb { - position: relative; flex: 0 0 80px; width: 80px; height: 80px; - border-radius: 16px; overflow: hidden; background: #f1f5f9; - } - .dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; } - .dm-prevnext-next { text-align: right; } - .dm-prevnext-next .dm-prevnext-text { align-items: flex-end; } - .dm-prevnext-label { - display: inline-flex; align-items: center; gap: 6px; - font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red); - } - .dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; } - .dm-prevnext-title { - font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); } - - /* Related */ - .dm-related-heading { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important; - line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px; - } - .dm-related-grid { - display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; - } - @media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } } - @media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } } - - .dm-related-card { - display: flex; flex-direction: column; height: 100%; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none; - transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease; - } - .dm-related-card:hover { - transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13); - border-color: rgba(192,18,39,0.2); - } - .dm-related-img { - position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9; - } - .dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-img img { transform: scale(1.05); } - .dm-related-badge { - position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff; - font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px; - padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25); - } - .dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; } - .dm-related-card-title { - font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important; - letter-spacing: -.2px !important; margin: 0 0 10px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-related-card:hover .dm-related-card-title { color: var(--dm-red); } - .dm-related-card-excerpt { - font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - } - .dm-related-readmore { - margin-top: auto; display: inline-flex; align-items: center; gap: 7px; - font-size: 12.5px; font-weight: 800; color: var(--dm-red); - text-transform: uppercase; letter-spacing: .6px; - } - .dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); } - - /* Contact CTA banner */ - .dm-blog-contact-cta { - display: flex; align-items: center; justify-content: space-between; gap: 32px; - flex-wrap: wrap; - background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%); - border-radius: 30px; padding: clamp(32px, 4vw, 56px); - position: relative; overflow: hidden; - } - .dm-blog-contact-cta::after { - content: ""; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px; - background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%); - pointer-events: none; - } - .dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; } - .dm-blog-contact-eyebrow { - display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase; - letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px; - } - .dm-blog-contact-title { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important; - letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance; - } - .dm-blog-contact-sub { - font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450; - } - .dm-blog-contact-btn { - position: relative; z-index: 1; flex-shrink: 0; - display: inline-flex; align-items: center; justify-content: center; gap: 10px; - background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700; - padding: 16px 32px; border-radius: 16px; text-decoration: none; - box-shadow: 0 10px 26px rgba(192,18,39,0.34); - transition: background .2s ease, transform .2s ease; - } - .dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } - @media (max-width: 720px) { - .dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; } - .dm-blog-contact-btn { width: 100%; } - } -5:["$","section",null,{"className":"dm-blog-footer","aria-label":"More articles","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$12"}}],"$L13"]}] -6:["$","script","script-0",{"src":"/_next/static/chunks/0yvxf3ok9gcp_.js","async":true}] -7:["$","$L14",null,{"children":["$","$15",null,{"name":"Next.MetadataOutlet","children":"$@16"}]}] -a:["$","span",null,{"className":"dm-article-figure-img","children":["$","$L17",null,{"src":"/images/blog-post-pic-3.webp","alt":"Battery Simulation: The Secret to EV Route Pre-Validation","fill":true,"sizes":"(max-width: 768px) 100vw, 760px","style":{"objectFit":"cover"}}]}] -b:["$","figcaption",null,{"children":"EV Fleet: route planning decisions made before dispatch."}] -c:["$","$L9","7",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","blockquote",null,{"className":"dm-article-quote","children":[["$","p",null,{"children":"A route should be checked before the rider leaves, not explained after the customer calls."}],["$","cite",null,{"children":"Doormile Operations"}]]}]}] -d:["$","$L9","8",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Putting it into practice"}]}] -e:["$","$L9","9",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The best improvements usually start with simple measurements. Track distance per route, failed delivery windows, rider idle time, and orders moved between vehicles after dispatch. Those numbers show where the operation is leaking time."}]}] -f:["$","$L9","10",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ol",null,{"className":"dm-article-ol","children":[["$","li","0",{"children":"Benchmark today's distance, fleet size, and on-time rate."}],["$","li","1",{"children":"Include vehicle capacity, delivery windows, rider shifts, and battery charge."}],["$","li","2",{"children":"Check routes against traffic and customer commitments before dispatch."}],["$","li","3",{"children":"Compare the next dispatch cycle against the old plan."}]]}]}] -10:["$","$L9","11",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Better routing is not about pushing riders harder. It is about giving them a plan that already accounts for the real day ahead."}]}] -11:["$","div",null,{"className":"dm-blog-aside-wrap","children":["$","aside",null,{"className":"dm-blog-sidebar","aria-label":"Blog sidebar","children":[["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Search"}],["$","$L18",null,{}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Recent Posts"}],["$","ul",null,{"className":"dm-blog-recent","children":[["$","li","how-ai-is-transforming-last-mile-ev-delivery",{"children":["$","$L8",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","time",null,{"dateTime":"2025-10-02","className":"dm-blog-recent-date","children":"Oct 2, 2025"}]]}]]}]}],["$","li","42-less-distance-insights-from-our-hyderabad-hub",{"children":["$","$L8",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","time",null,{"dateTime":"2025-09-18","className":"dm-blog-recent-date","children":"Sep 18, 2025"}]]}]]}]}],["$","li","miletruth-ai-10-stages-to-smarter-dispatch",{"children":["$","$L8",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","time",null,{"dateTime":"2025-09-05","className":"dm-blog-recent-date","children":"Sep 5, 2025"}]]}]]}]}],["$","li","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"children":["$","$L8",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L17",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","time",null,{"dateTime":"2025-08-21","className":"dm-blog-recent-date","children":"Aug 21, 2025"}]]}]]}]}]]}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Categories"}],["$","ul",null,{"className":"dm-blog-categories","children":[["$","li","Case Study",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Case Study"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","EV Fleet",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"EV Fleet"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}],["$","li","Fleet Management",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Fleet Management"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","MileTruth",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"MileTruth"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],"$L19","$L1a","$L1b"]}]]}],"$L1c"]}]}] -13:["$","div",null,{"className":"dm-blog-footer-inner","children":[["$","nav",null,{"className":"dm-prevnext","aria-label":"Article navigation","children":[["$","$L8",null,{"href":"/blog/how-doormile-maintains-99-9-sla-compliance-at-scale","className":"dm-prevnext-card dm-prevnext-prev","children":[["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L17",null,{"src":"/images/last-mile-approach.webp","alt":"How Doormile Maintains 99.9% SLA Compliance at Scale","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"19","y1":"12","x2":"5","y2":"12"}],["$","polyline",null,{"points":"12 19 5 12 12 5"}]]}],"Previous"]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Operations"}],["$","span",null,{"className":"dm-prevnext-title","children":"How Doormile Maintains 99.9% SLA Compliance at Scale"}]]}]]}],["$","span",null,{"className":"dm-prevnext-placeholder"}]]}],["$","div",null,{"className":"dm-related","children":[["$","h2",null,{"className":"dm-related-heading","children":"Related Articles"}],["$","div",null,{"className":"dm-related-grid","children":[["$","$L9","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"delay":0,"duration":0.7,"yOffset":30,"children":["$","$L8",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L17",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"EV Fleet"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"Electric vehicles lower running costs, but battery range changes how routes must be planned before dispatch."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L9","how-ai-is-transforming-last-mile-ev-delivery",{"delay":0.08,"duration":0.7,"yOffset":30,"children":["$","$L8",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L17",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Technology"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L9","42-less-distance-insights-from-our-hyderabad-hub",{"delay":0.16,"duration":0.7,"yOffset":30,"children":["$","$L8",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-related-card","children":["$L1d","$L1e"]}]}]]}]]}],"$L1f"]}] -16:null -19:["$","li","Operations",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Operations"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -1a:["$","li","Sustainability",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Sustainability"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -1b:["$","li","Technology",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Technology"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}] -1c:["$","section",null,{"className":"dm-blog-widget dm-blog-cta-card","children":[["$","h2",null,{"className":"dm-blog-cta-title","children":"Planning delivery routes?"}],["$","p",null,{"className":"dm-blog-cta-text","children":"Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time."}],["$","$L8",null,{"href":"/contact","className":"dm-blog-cta-btn","children":["Contact Us",["$","svg",null,{"width":"18","height":"18","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -1d:["$","div",null,{"className":"dm-related-img","children":[["$","$L17",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Case Study"}]]}] -1e:["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -1f:["$","div",null,{"className":"dm-blog-contact-cta","children":[["$","div",null,{"className":"dm-blog-contact-cta-content","children":[["$","span",null,{"className":"dm-blog-contact-eyebrow","children":"Let's talk logistics"}],["$","h2",null,{"className":"dm-blog-contact-title","children":"Ready to move smarter with Doormile?"}],["$","p",null,{"className":"dm-blog-contact-sub","children":"Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding."}]]}],["$","$L8",null,{"href":"/contact","className":"dm-blog-contact-btn","children":["Get in Touch",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] diff --git a/build/blog/battery-simulation-the-secret-to-ev-route-pre-validation/__next.blog.$d$slug.txt b/build/blog/battery-simulation-the-secret-to-ev-route-pre-validation/__next.blog.$d$slug.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/blog/battery-simulation-the-secret-to-ev-route-pre-validation/__next.blog.$d$slug.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/battery-simulation-the-secret-to-ev-route-pre-validation/__next.blog.txt b/build/blog/battery-simulation-the-secret-to-ev-route-pre-validation/__next.blog.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/blog/battery-simulation-the-secret-to-ev-route-pre-validation/__next.blog.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/building-a-greener-city-the-future-of-urban-logistics.html b/build/blog/building-a-greener-city-the-future-of-urban-logistics.html deleted file mode 100644 index 2efa575..0000000 --- a/build/blog/building-a-greener-city-the-future-of-urban-logistics.html +++ /dev/null @@ -1,1168 +0,0 @@ -Building a Greener City: The Future of Urban Logistics – Doormile

    Doormile

    Doormile logo
    Address
    Hyderabad

    5th Floor, Vision Ultima,
    Street No.3, Jayabheri Enclave,
    Gachibowli, Hyderabad,
    Telangana 500032.

    Coimbatore

    Mayflower Valencia,
    Near Nava India Bus Stop,
    Avinashi Road,
    Udayampalayam,
    Tamil Nadu 641037.

    Bengaluru

    C612, 6th Floor,
    Trifecta Starlight,
    ITPL Road,
    Garudacharapalya,
    Mahadevapura,
    Bangalore 560048,
    Karnataka, India.

    Contact Us

    Tel : +91 86886 97941

    Email

    care@doormile.com

    Sustainability

    Building a Greener City: The Future of Urban Logistics

    Doormile Team2 min read

    Cleaner delivery is becoming an operating requirement, not just a brand message. It depends on EV adoption and route plans that make those vehicles practical every day.

    In last-mile logistics, a missed SLA is rarely caused by one big failure. It usually comes from small delays adding up across a route. Building a Greener City: The Future of Urban Logistics looks at how delivery teams can spot those delays early and plan around them before vehicles leave the hub.

    Why this matters for fleet teams

    Every extra kilometre costs money. It uses fuel or charge, adds rider time, wears down vehicles, and increases the chance of a late delivery. When routes are built from fixed zones or old habits, those costs repeat every day.

    • Fewer vehicles needed for the same number of drops
    • Lower cost per drop through better stop sequencing
    • ETAs that match traffic, distance, and delivery windows
    • Less fuel or charge used per completed order

    From orders to dispatch

    A good dispatch plan starts with the basics: order locations, promised delivery windows, rider capacity, vehicle range, and known traffic trouble spots. MileTruth™ checks those inputs before dispatch so the team is not fixing avoidable mistakes on the road.

    Building a Greener City: The Future of Urban Logistics
    Sustainability: route planning decisions made before dispatch.

    A route should be checked before the rider leaves, not explained after the customer calls.

    Doormile Operations

    Putting it into practice

    The best improvements usually start with simple measurements. Track distance per route, failed delivery windows, rider idle time, and orders moved between vehicles after dispatch. Those numbers show where the operation is leaking time.

    1. Benchmark today's distance, fleet size, and on-time rate.
    2. Include vehicle capacity, delivery windows, rider shifts, and battery charge.
    3. Check routes against traffic and customer commitments before dispatch.
    4. Compare the next dispatch cycle against the old plan.

    Better routing is not about pushing riders harder. It is about giving them a plan that already accounts for the real day ahead.

    \ No newline at end of file diff --git a/build/blog/building-a-greener-city-the-future-of-urban-logistics.txt b/build/blog/building-a-greener-city-the-future-of-urban-logistics.txt deleted file mode 100644 index be17cd9..0000000 --- a/build/blog/building-a-greener-city-the-future-of-urban-logistics.txt +++ /dev/null @@ -1,545 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -d:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -e:"$Sreact.suspense" -11:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -13:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -15:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","blog","building-a-greener-city-the-future-of-urban-logistics"],"q":"","i":false,"f":[[["",{"children":["blog",{"children":[["slug","building-a-greener-city-the-future-of-urban-logistics","d",null],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":["$Lc",[["$","script","script-0",{"src":"/_next/static/chunks/0yvxf3ok9gcp_.js","async":true,"nonce":"$undefined"}]],["$","$Ld",null,{"children":["$","$e",null,{"name":"Next.MetadataOutlet","children":"$@f"}]}]]}],{},null,false,null]},null,false,"$@10"]},null,false,"$@10"]},null,false,null],["$","$1","h",{"children":[null,["$","$L11",null,{"children":"$L12"}],["$","div",null,{"hidden":true,"children":["$","$L13",null,{"children":["$","$e",null,{"name":"Next.Metadata","children":"$L14"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$15",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -16:[] -10:"$W16" -:HL["/images/blog-post-pic-6.webp","image"] -17:T3d6f, - .dm-single-blog { - --dm-red: #c01227; - --dm-red-hover: #e31d32; - --dm-radius-card: 22px; - --dm-radius-img: 20px; - --dm-radius-badge: 8px; - --dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05); - --dm-border: 1px solid rgba(15, 23, 42, 0.09); - --dm-space-p: 24px; - --dm-space-h: 32px; - --dm-space-img: 32px; - --dm-space-quote: 40px; - --dm-sticky-top: 138px; - --dm-measure: min(1100px, 100%); - font-family: var(--font-manrope), sans-serif; - } - - /* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6 - (120/80/60px UPPERCASE) rules with !important on our own classes. */ - .dm-single-blog :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline, - specificity 0-1-1) so blog links keep our colors and never get underlined. */ - .dm-single-blog a { text-decoration: none !important; } - - /* Page banner: tall homepage-scale frame with only badge + title inside */ - /* Compound selector (specificity 20) + !important beats the global 800px - single-class height rules so the blog banner can use viewport heights. */ - .custom-standard-hero-card.dm-banner-card { - height: 90vh !important; - min-height: 85vh !important; - } - @media (max-width: 1024px) { - .custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; } - } - @media (max-width: 600px) { - .custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; } - } - - .dm-banner-inner { - position: relative; width: 100%; height: 100%; - display: flex; flex-direction: column; align-items: center; justify-content: center; - text-align: center; gap: clamp(22px, 2.6vw, 34px); - padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px); - } - - .dm-banner-category { - display: inline-block; background: var(--dm-red); color: #fff; - font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px; - padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45); - } - .dm-banner-title { - font-family: var(--font-manrope), sans-serif !important; - font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important; - line-height: 1.16 !important; letter-spacing: -1.2px !important; - color: #ffffff !important; margin: 0; max-width: 820px; - text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38); - } - @media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } } - @media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } } - - /* Content wrap begins immediately below the banner */ - /* Shared content container: the SAME max-width + horizontal padding is used - by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings, - images, Prev/Next, Related Articles and the CTA banner all align to one - grid with identical left/right edges. Keep both in sync. */ - .dm-blog-wrap { - max-width: 1280px; margin: 0 auto; - /* 20px mobile padding floor → 40px on desktop; matches the footer container. */ - padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0; - } - @media (max-width: 767px) { - .dm-blog-wrap { - padding-left: 16px; - padding-right: 16px; - } - } - - /* ── Article meta bar (directly under the hero) ── */ - .dm-meta-bar { - display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px; - padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px); - border-bottom: 1px solid rgba(15,23,42,0.10); - } - .dm-meta-breadcrumb ol { - list-style: none; display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b; - } - .dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; } - .dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; } - .dm-meta-sep { color: #cbd5e1; } - .dm-meta-current { - color: #0f172a; font-weight: 700; - max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - } - @media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } } - .dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; } - .dm-meta-item { - display: inline-flex; align-items: center; gap: 7px; - font-size: 13.5px; font-weight: 600; color: #475569; - } - .dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; } - .dm-meta-author { color: #0f172a; font-weight: 700; } - @media (max-width: 600px) { .dm-meta-bar { gap: 12px; } } - .dm-blog-layout { - display: grid; grid-template-columns: minmax(0,1fr) 320px; - /* Tighter gap gives the reading column more room next to the 320px sidebar. */ - gap: clamp(28px, 3vw, 56px); align-items: start; - } - @media (max-width: 1024px) { - .dm-blog-layout { grid-template-columns: 1fr; gap: 48px; } - /* Single-column (tablet/mobile): cap the reading column and centre it so the - article never sits left-aligned with a large empty right gutter. */ - .dm-blog-main { max-width: 900px; margin-inline: auto; } - } - .dm-blog-main { min-width: 0; } - - /* ── Intro lead ── */ - .dm-blog-intro { - max-width: var(--dm-measure); - font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500; - color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px; - border-left: 3px solid var(--dm-red); - } - - /* ── Article body ── */ - .dm-article-body { max-width: var(--dm-measure); } - .dm-article-p { - font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450; - margin: 0 0 var(--dm-space-p); - } - .dm-article-h2 { - font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important; - color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h); - text-wrap: balance; - } - /* Each article block is wrapped in its OWN ScrollReveal
    , so a bare - :first-child rule matched every heading (each is the only child of its - wrapper) and zeroed its top margin, collapsing the gap above every - section heading. Scope the reset to only the article body's first block. */ - .dm-article-body > :first-child :where(.dm-article-h2, .dm-article-h3), - .dm-article-body > .dm-article-h2:first-child, - .dm-article-body > .dm-article-h3:first-child { margin-top: 0; } - .dm-article-h3 { - font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important; - color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px; - text-wrap: balance; - } - @media (max-width: 600px) { - .dm-article-p { font-size: 16px !important; } - .dm-article-ul li, .dm-article-ol li { font-size: 15.5px; } - .dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; } - .dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; } - } - - .dm-article-ul, .dm-article-ol { - /* Top margin (was 0) separates the list from the paragraph above it; - matching bottom margin keeps it clear of the next heading/paragraph. - Slightly larger than --dm-space-p so the list reads as its own block. */ - margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px); - padding-left: 2px; list-style: none; - display: flex; flex-direction: column; gap: 15px; - } - /* Prefixed with .dm-article-body so these beat the theme's global - ".logico-front-end ul li:before" fontello-glyph bullet (specificity 0,1,3), - which otherwise replaces our clean red dot with a misaligned checkmark glyph - and adds its own 1.7em indent. */ - .dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li { - position: relative; padding-left: 34px; - font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450; - } - .dm-article-body .dm-article-ul li::before { - content: ""; position: absolute; left: 7px; top: 10px; - width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red); - /* kill any inherited fontello glyph from the global rule */ - font-size: 0; line-height: 0; - } - .dm-article-ol { counter-reset: dm-li; } - .dm-article-body .dm-article-ol li { counter-increment: dm-li; } - .dm-article-body .dm-article-ol li::before { - content: counter(dm-li); position: absolute; left: 0; top: 0; - width: 24px; height: 24px; border-radius: 7px; - background: rgba(192,18,39,0.10); color: var(--dm-red); - font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; - } - - /* ── Quote ── */ - .dm-article-quote { - position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px; - background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%); - border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0; - box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06); - } - .dm-article-quote::before { - content: "\201C"; position: absolute; left: 22px; top: 8px; - font-family: Georgia, "Times New Roman", serif; - font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700; - } - .dm-article-quote p { - font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600; - font-style: italic; color: #1e293b; margin: 0; - } - .dm-article-quote cite { - display: block; margin-top: 16px; font-size: 13px; font-weight: 700; - font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px; - } - @media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } } - - /* ── Images ── */ - .dm-article-figure { margin: var(--dm-space-img) 0; } - .dm-article-figure-img { - position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; - border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10); - } - .dm-article-figure figcaption { - margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500; - text-align: center; font-style: italic; - } - - /* ── Sidebar ── */ - .dm-blog-aside-wrap { position: relative; } - .dm-blog-sidebar { - display: flex; flex-direction: column; gap: 18px; - position: sticky; top: var(--dm-sticky-top); - } - @media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } } - - .dm-blog-widget { - background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card); - padding: 20px; box-shadow: var(--dm-shadow-card); - } - .dm-blog-widget-title { - font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important; - letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important; - margin: 0 0 15px; padding: 0 0 12px; - border-bottom: 1px solid rgba(15,23,42,0.08); - overflow: visible; white-space: normal; word-break: normal; - } - - /* Search */ - .dm-sr-only { - position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; - overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; - } - .dm-blog-search { position: relative; } - .dm-blog-search-form { position: relative; } - .dm-blog-search-input { - width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px; - padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a; - background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; - } - .dm-blog-search-input::placeholder { color: #9c9c9c; } - .dm-blog-search-input:focus { - outline: none; border-color: var(--dm-red); background: #fff; - box-shadow: 0 0 0 3px rgba(192,18,39,0.11); - } - .dm-blog-search-icon { - position: absolute; right: 14px; top: 50%; transform: translateY(-50%); - color: #94a3b8; pointer-events: none; display: flex; - } - .dm-blog-search-results { - position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0; - background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px; - box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden; - } - .dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; } - .dm-blog-search-result { - display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; - border-radius: 10px; text-decoration: none; transition: background .15s ease; - } - .dm-blog-search-result:hover { background: #f8fafc; } - .dm-blog-search-result-cat { - font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red); - } - .dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; } - .dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; } - - /* Recent posts */ - .dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; } - .dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; } - .dm-blog-recent-thumb { - position: relative; flex: 0 0 62px; width: 62px; height: 62px; - border-radius: 13px; overflow: hidden; background: #f1f5f9; - } - .dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; } - .dm-blog-recent-title { - font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); } - .dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; } - - /* Categories */ - .dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; } - .dm-blog-category-item { - display: flex; align-items: center; justify-content: space-between; gap: 10px; - padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important; - border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease; - } - .dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; } - .dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; } - .dm-blog-category-item > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .dm-blog-category-count { - flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9; - min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex; - align-items: center; justify-content: center; padding: 0 7px; - } - - /* CTA card */ - .dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; } - .dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; } - .dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; } - .dm-blog-cta-btn { - display: inline-flex; align-items: center; gap: 8px; - background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700; - padding: 12px 22px; border-radius: 12px; text-decoration: none; - transition: background .2s ease, transform .2s ease; - } - .dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } -c:["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"headline\":\"Building a Greener City: The Future of Urban Logistics\",\"description\":\"Cities are asking for cleaner delivery. The practical challenge is planning EV routes that can meet customer windows without wasting charge.\",\"image\":[\"https://www.doormile.com/images/blog-post-pic-6.webp\"],\"datePublished\":\"2025-07-10T00:00:00.000Z\",\"dateModified\":\"2025-07-10T00:00:00.000Z\",\"author\":{\"@type\":\"Organization\",\"name\":\"Doormile Team\",\"url\":\"https://www.doormile.com\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Doormile\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.doormile.com/images/cropped-image-2.png\"}},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.doormile.com/blog/building-a-greener-city-the-future-of-urban-logistics\"},\"articleSection\":\"Sustainability\"}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://www.doormile.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https://www.doormile.com/blog\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Building a Greener City: The Future of Urban Logistics\",\"item\":\"https://www.doormile.com/blog/building-a-greener-city-the-future-of-urban-logistics\"}]}"}}],["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":[["$","article",null,{"className":"dm-single-blog","children":[["$","link",null,{"rel":"preload","as":"image","href":"/images/blog-post-pic-6.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$17"}}],"$L18","$L19"]}],"$L1a"]}]}]]}] -1b:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],""] -1c:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"ScrollReveal"] -18:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card dm-banner-card","style":{"backgroundImage":"url(/images/blog-post-pic-6.webp)","--hero-overlay":"linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)"},"children":["$","div",null,{"className":"e-con-inner dm-banner-inner","children":[["$","span",null,{"className":"dm-banner-category","children":"Sustainability"}],["$","h1",null,{"className":"dm-banner-title","children":"Building a Greener City: The Future of Urban Logistics"}]]}]}]}] -19:["$","div",null,{"className":"dm-blog-wrap","children":[["$","div",null,{"className":"dm-meta-bar","children":[["$","nav",null,{"className":"dm-meta-breadcrumb","aria-label":"Breadcrumb","children":["$","ol",null,{"children":[["$","li",null,{"children":["$","$L1b",null,{"href":"/","children":"Home"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"children":["$","$L1b",null,{"href":"/blog","children":"Blog"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"aria-current":"page","className":"dm-meta-current","children":"Building a Greener City: The Future of Urban Logistics"}]]}]}],["$","div",null,{"className":"dm-meta-items","children":[["$","span",null,{"className":"dm-meta-item dm-meta-author","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","path",null,{"d":"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}],["$","circle",null,{"cx":"12","cy":"7","r":"4"}]]}],"Doormile Team"]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"2"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}]]}],["$","time",null,{"dateTime":"2025-07-10","children":"Jul 10, 2025"}]]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","circle",null,{"cx":"12","cy":"12","r":"9"}],["$","polyline",null,{"points":"12 7 12 12 15 14"}]]}],2," min read"]}]]}]]}],["$","div",null,{"className":"dm-blog-layout","children":[["$","div",null,{"className":"dm-blog-main","children":[["$","p",null,{"className":"dm-blog-intro","children":"Cleaner delivery is becoming an operating requirement, not just a brand message. It depends on EV adoption and route plans that make those vehicles practical every day."}],["$","div",null,{"className":"dm-article-body","children":[["$","$L1c","0",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"In last-mile logistics, a missed SLA is rarely caused by one big failure. It usually comes from small delays adding up across a route. Building a Greener City: The Future of Urban Logistics looks at how delivery teams can spot those delays early and plan around them before vehicles leave the hub."}]}],["$","$L1c","1",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Why this matters for fleet teams"}]}],["$","$L1c","2",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Every extra kilometre costs money. It uses fuel or charge, adds rider time, wears down vehicles, and increases the chance of a late delivery. When routes are built from fixed zones or old habits, those costs repeat every day."}]}],["$","$L1c","3",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"Fewer vehicles needed for the same number of drops"}],["$","li","1",{"children":"Lower cost per drop through better stop sequencing"}],["$","li","2",{"children":"ETAs that match traffic, distance, and delivery windows"}],["$","li","3",{"children":"Less fuel or charge used per completed order"}]]}]}],["$","$L1c","4",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"From orders to dispatch"}]}],["$","$L1c","5",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"A good dispatch plan starts with the basics: order locations, promised delivery windows, rider capacity, vehicle range, and known traffic trouble spots. MileTruth™ checks those inputs before dispatch so the team is not fixing avoidable mistakes on the road."}]}],["$","$L1c","6",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","figure",null,{"className":"dm-article-figure","children":["$L1d","$L1e"]}]}],"$L1f","$L20","$L21","$L22","$L23"]}]]}],"$L24"]}]]}] -25:T2021, - .dm-blog-footer { - font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32; - /* The global theme applies 72px top/bottom section padding — strip it so the - inner container is the single source of vertical rhythm (no double gap). */ - padding: 0 !important; - } - /* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */ - .dm-blog-footer :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline) */ - .dm-blog-footer a { text-decoration: none !important; } - /* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px - max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA - align to the exact same left/right edges as the article body above. - Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a - consistent ~64–72px section→section gap (no 120px+ voids). */ - .dm-blog-footer-inner { - max-width: 1280px; margin: 0 auto; - /* Compact vertical rhythm on an 8px system. Top padding sets the - article→Prev/Next gap (~24–32px); the inter-section gap sets the - Prev/Next→Related gap (~32–48px). No large arbitrary voids. */ - /* Minimal bottom padding — the global site footer already contributes its - own 20px top inset, so the CTA banner sits close to it without a void. */ - padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px); - display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px); - } - @media (max-width: 767px) { - .dm-blog-footer-inner { - padding-left: 16px; - padding-right: 16px; - } - } - - /* Prev / Next */ - .dm-prevnext { - display: grid; grid-template-columns: 1fr 1fr; gap: 20px; - /* Halved from 40px: tight divider→cards spacing without crowding. */ - padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08); - } - @media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } } - .dm-prevnext-placeholder { display: block; } - .dm-prevnext-card { - display: flex; gap: 16px; align-items: center; padding: 16px; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; - } - .dm-prevnext-card:hover { - transform: translateY(-4px); border-color: rgba(192,18,39,0.2); - box-shadow: 0 16px 34px rgba(192,18,39,0.10); - } - .dm-prevnext-thumb { - position: relative; flex: 0 0 80px; width: 80px; height: 80px; - border-radius: 16px; overflow: hidden; background: #f1f5f9; - } - .dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; } - .dm-prevnext-next { text-align: right; } - .dm-prevnext-next .dm-prevnext-text { align-items: flex-end; } - .dm-prevnext-label { - display: inline-flex; align-items: center; gap: 6px; - font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red); - } - .dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; } - .dm-prevnext-title { - font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); } - - /* Related */ - .dm-related-heading { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important; - line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px; - } - .dm-related-grid { - display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; - } - @media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } } - @media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } } - - .dm-related-card { - display: flex; flex-direction: column; height: 100%; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none; - transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease; - } - .dm-related-card:hover { - transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13); - border-color: rgba(192,18,39,0.2); - } - .dm-related-img { - position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9; - } - .dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-img img { transform: scale(1.05); } - .dm-related-badge { - position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff; - font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px; - padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25); - } - .dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; } - .dm-related-card-title { - font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important; - letter-spacing: -.2px !important; margin: 0 0 10px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-related-card:hover .dm-related-card-title { color: var(--dm-red); } - .dm-related-card-excerpt { - font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - } - .dm-related-readmore { - margin-top: auto; display: inline-flex; align-items: center; gap: 7px; - font-size: 12.5px; font-weight: 800; color: var(--dm-red); - text-transform: uppercase; letter-spacing: .6px; - } - .dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); } - - /* Contact CTA banner */ - .dm-blog-contact-cta { - display: flex; align-items: center; justify-content: space-between; gap: 32px; - flex-wrap: wrap; - background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%); - border-radius: 30px; padding: clamp(32px, 4vw, 56px); - position: relative; overflow: hidden; - } - .dm-blog-contact-cta::after { - content: ""; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px; - background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%); - pointer-events: none; - } - .dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; } - .dm-blog-contact-eyebrow { - display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase; - letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px; - } - .dm-blog-contact-title { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important; - letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance; - } - .dm-blog-contact-sub { - font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450; - } - .dm-blog-contact-btn { - position: relative; z-index: 1; flex-shrink: 0; - display: inline-flex; align-items: center; justify-content: center; gap: 10px; - background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700; - padding: 16px 32px; border-radius: 16px; text-decoration: none; - box-shadow: 0 10px 26px rgba(192,18,39,0.34); - transition: background .2s ease, transform .2s ease; - } - .dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } - @media (max-width: 720px) { - .dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; } - .dm-blog-contact-btn { width: 100%; } - } -1a:["$","section",null,{"className":"dm-blog-footer","aria-label":"More articles","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$25"}}],"$L26"]}] -27:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"Image"] -28:I[23096,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"default"] -1d:["$","span",null,{"className":"dm-article-figure-img","children":["$","$L27",null,{"src":"/images/blog-post-pic-6.webp","alt":"Building a Greener City: The Future of Urban Logistics","fill":true,"sizes":"(max-width: 768px) 100vw, 760px","style":{"objectFit":"cover"}}]}] -1e:["$","figcaption",null,{"children":"Sustainability: route planning decisions made before dispatch."}] -1f:["$","$L1c","7",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","blockquote",null,{"className":"dm-article-quote","children":[["$","p",null,{"children":"A route should be checked before the rider leaves, not explained after the customer calls."}],["$","cite",null,{"children":"Doormile Operations"}]]}]}] -20:["$","$L1c","8",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Putting it into practice"}]}] -21:["$","$L1c","9",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The best improvements usually start with simple measurements. Track distance per route, failed delivery windows, rider idle time, and orders moved between vehicles after dispatch. Those numbers show where the operation is leaking time."}]}] -22:["$","$L1c","10",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ol",null,{"className":"dm-article-ol","children":[["$","li","0",{"children":"Benchmark today's distance, fleet size, and on-time rate."}],["$","li","1",{"children":"Include vehicle capacity, delivery windows, rider shifts, and battery charge."}],["$","li","2",{"children":"Check routes against traffic and customer commitments before dispatch."}],["$","li","3",{"children":"Compare the next dispatch cycle against the old plan."}]]}]}] -23:["$","$L1c","11",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Better routing is not about pushing riders harder. It is about giving them a plan that already accounts for the real day ahead."}]}] -24:["$","div",null,{"className":"dm-blog-aside-wrap","children":["$","aside",null,{"className":"dm-blog-sidebar","aria-label":"Blog sidebar","children":[["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Search"}],["$","$L28",null,{}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Recent Posts"}],["$","ul",null,{"className":"dm-blog-recent","children":[["$","li","how-ai-is-transforming-last-mile-ev-delivery",{"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","time",null,{"dateTime":"2025-10-02","className":"dm-blog-recent-date","children":"Oct 2, 2025"}]]}]]}]}],["$","li","42-less-distance-insights-from-our-hyderabad-hub",{"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","time",null,{"dateTime":"2025-09-18","className":"dm-blog-recent-date","children":"Sep 18, 2025"}]]}]]}]}],["$","li","miletruth-ai-10-stages-to-smarter-dispatch",{"children":["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","time",null,{"dateTime":"2025-09-05","className":"dm-blog-recent-date","children":"Sep 5, 2025"}]]}]]}]}],["$","li","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"children":["$","$L1b",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","time",null,{"dateTime":"2025-08-21","className":"dm-blog-recent-date","children":"Aug 21, 2025"}]]}]]}]}]]}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Categories"}],["$","ul",null,{"className":"dm-blog-categories","children":[["$","li","Case Study",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Case Study"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","EV Fleet",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"EV Fleet"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}],["$","li","Fleet Management",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Fleet Management"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","MileTruth",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"MileTruth"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],"$L29","$L2a","$L2b"]}]]}],"$L2c"]}]}] -26:["$","div",null,{"className":"dm-blog-footer-inner","children":[["$","nav",null,{"className":"dm-prevnext","aria-label":"Article navigation","children":[["$","$L1b",null,{"href":"/blog/fleet-reduction-without-compromising-delivery-volume","className":"dm-prevnext-card dm-prevnext-prev","children":[["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-8.webp","alt":"Fleet Reduction Without Compromising Delivery Volume","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"19","y1":"12","x2":"5","y2":"12"}],["$","polyline",null,{"points":"12 19 5 12 12 5"}]]}],"Previous"]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Fleet Management"}],["$","span",null,{"className":"dm-prevnext-title","children":"Fleet Reduction Without Compromising Delivery Volume"}]]}]]}],["$","$L1b",null,{"href":"/blog/how-doormile-maintains-99-9-sla-compliance-at-scale","className":"dm-prevnext-card dm-prevnext-next","children":[["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":["Next",["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Operations"}],["$","span",null,{"className":"dm-prevnext-title","children":"How Doormile Maintains 99.9% SLA Compliance at Scale"}]]}],["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L27",null,{"src":"/images/last-mile-approach.webp","alt":"How Doormile Maintains 99.9% SLA Compliance at Scale","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}]]}]]}],["$","div",null,{"className":"dm-related","children":[["$","h2",null,{"className":"dm-related-heading","children":"Related Articles"}],["$","div",null,{"className":"dm-related-grid","children":[["$","$L1c","how-ai-is-transforming-last-mile-ev-delivery",{"delay":0,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Technology"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L1c","42-less-distance-insights-from-our-hyderabad-hub",{"delay":0.08,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Case Study"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],"$L2d","$L2e"]}]]}]}],"$L2f"]}]]}],"$L30"]}] -29:["$","li","Operations",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Operations"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2a:["$","li","Sustainability",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Sustainability"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2b:["$","li","Technology",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Technology"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}] -2c:["$","section",null,{"className":"dm-blog-widget dm-blog-cta-card","children":[["$","h2",null,{"className":"dm-blog-cta-title","children":"Planning delivery routes?"}],["$","p",null,{"className":"dm-blog-cta-text","children":"Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time."}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-cta-btn","children":["Contact Us",["$","svg",null,{"width":"18","height":"18","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -2d:["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}] -2e:["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}] -2f:["$","$L1c","miletruth-ai-10-stages-to-smarter-dispatch",{"delay":0.16,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"MileTruth"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}] -30:["$","div",null,{"className":"dm-blog-contact-cta","children":[["$","div",null,{"className":"dm-blog-contact-cta-content","children":[["$","span",null,{"className":"dm-blog-contact-eyebrow","children":"Let's talk logistics"}],["$","h2",null,{"className":"dm-blog-contact-title","children":"Ready to move smarter with Doormile?"}],["$","p",null,{"className":"dm-blog-contact-sub","children":"Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding."}]]}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-contact-btn","children":["Get in Touch",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -12:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -31:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -f:null -14:[["$","title","0",{"children":"Building a Greener City: The Future of Urban Logistics – Doormile"}],["$","meta","1",{"name":"description","content":"Cities are asking for cleaner delivery. The practical challenge is planning EV routes that can meet customer windows without wasting charge."}],["$","meta","2",{"name":"author","content":"Doormile Team"}],["$","meta","3",{"name":"keywords","content":"Sustainability,last-mile logistics,EV fleet,MileTruth,route optimisation"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","link","5",{"rel":"canonical","href":"https://www.doormile.com/blog/building-a-greener-city-the-future-of-urban-logistics"}],["$","meta","6",{"property":"og:title","content":"Building a Greener City: The Future of Urban Logistics"}],["$","meta","7",{"property":"og:description","content":"Cities are asking for cleaner delivery. The practical challenge is planning EV routes that can meet customer windows without wasting charge."}],["$","meta","8",{"property":"og:url","content":"https://www.doormile.com/blog/building-a-greener-city-the-future-of-urban-logistics"}],["$","meta","9",{"property":"og:site_name","content":"Doormile"}],["$","meta","10",{"property":"og:image","content":"https://www.doormile.com/images/blog-post-pic-6.webp"}],["$","meta","11",{"property":"og:image:alt","content":"Building a Greener City: The Future of Urban Logistics"}],["$","meta","12",{"property":"og:type","content":"article"}],["$","meta","13",{"property":"article:published_time","content":"2025-07-10T00:00:00.000Z"}],["$","meta","14",{"property":"article:author","content":"Doormile Team"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"Building a Greener City: The Future of Urban Logistics"}],["$","meta","17",{"name":"twitter:description","content":"Cities are asking for cleaner delivery. The practical challenge is planning EV routes that can meet customer windows without wasting charge."}],["$","meta","18",{"name":"twitter:image","content":"https://www.doormile.com/images/blog-post-pic-6.webp"}],["$","link","19",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","21",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","22",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L31","23",{}]] diff --git a/build/blog/building-a-greener-city-the-future-of-urban-logistics/__next._full.txt b/build/blog/building-a-greener-city-the-future-of-urban-logistics/__next._full.txt deleted file mode 100644 index be17cd9..0000000 --- a/build/blog/building-a-greener-city-the-future-of-urban-logistics/__next._full.txt +++ /dev/null @@ -1,545 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -d:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -e:"$Sreact.suspense" -11:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -13:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -15:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","blog","building-a-greener-city-the-future-of-urban-logistics"],"q":"","i":false,"f":[[["",{"children":["blog",{"children":[["slug","building-a-greener-city-the-future-of-urban-logistics","d",null],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":["$Lc",[["$","script","script-0",{"src":"/_next/static/chunks/0yvxf3ok9gcp_.js","async":true,"nonce":"$undefined"}]],["$","$Ld",null,{"children":["$","$e",null,{"name":"Next.MetadataOutlet","children":"$@f"}]}]]}],{},null,false,null]},null,false,"$@10"]},null,false,"$@10"]},null,false,null],["$","$1","h",{"children":[null,["$","$L11",null,{"children":"$L12"}],["$","div",null,{"hidden":true,"children":["$","$L13",null,{"children":["$","$e",null,{"name":"Next.Metadata","children":"$L14"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$15",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -16:[] -10:"$W16" -:HL["/images/blog-post-pic-6.webp","image"] -17:T3d6f, - .dm-single-blog { - --dm-red: #c01227; - --dm-red-hover: #e31d32; - --dm-radius-card: 22px; - --dm-radius-img: 20px; - --dm-radius-badge: 8px; - --dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05); - --dm-border: 1px solid rgba(15, 23, 42, 0.09); - --dm-space-p: 24px; - --dm-space-h: 32px; - --dm-space-img: 32px; - --dm-space-quote: 40px; - --dm-sticky-top: 138px; - --dm-measure: min(1100px, 100%); - font-family: var(--font-manrope), sans-serif; - } - - /* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6 - (120/80/60px UPPERCASE) rules with !important on our own classes. */ - .dm-single-blog :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline, - specificity 0-1-1) so blog links keep our colors and never get underlined. */ - .dm-single-blog a { text-decoration: none !important; } - - /* Page banner: tall homepage-scale frame with only badge + title inside */ - /* Compound selector (specificity 20) + !important beats the global 800px - single-class height rules so the blog banner can use viewport heights. */ - .custom-standard-hero-card.dm-banner-card { - height: 90vh !important; - min-height: 85vh !important; - } - @media (max-width: 1024px) { - .custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; } - } - @media (max-width: 600px) { - .custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; } - } - - .dm-banner-inner { - position: relative; width: 100%; height: 100%; - display: flex; flex-direction: column; align-items: center; justify-content: center; - text-align: center; gap: clamp(22px, 2.6vw, 34px); - padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px); - } - - .dm-banner-category { - display: inline-block; background: var(--dm-red); color: #fff; - font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px; - padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45); - } - .dm-banner-title { - font-family: var(--font-manrope), sans-serif !important; - font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important; - line-height: 1.16 !important; letter-spacing: -1.2px !important; - color: #ffffff !important; margin: 0; max-width: 820px; - text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38); - } - @media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } } - @media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } } - - /* Content wrap begins immediately below the banner */ - /* Shared content container: the SAME max-width + horizontal padding is used - by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings, - images, Prev/Next, Related Articles and the CTA banner all align to one - grid with identical left/right edges. Keep both in sync. */ - .dm-blog-wrap { - max-width: 1280px; margin: 0 auto; - /* 20px mobile padding floor → 40px on desktop; matches the footer container. */ - padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0; - } - @media (max-width: 767px) { - .dm-blog-wrap { - padding-left: 16px; - padding-right: 16px; - } - } - - /* ── Article meta bar (directly under the hero) ── */ - .dm-meta-bar { - display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px; - padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px); - border-bottom: 1px solid rgba(15,23,42,0.10); - } - .dm-meta-breadcrumb ol { - list-style: none; display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b; - } - .dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; } - .dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; } - .dm-meta-sep { color: #cbd5e1; } - .dm-meta-current { - color: #0f172a; font-weight: 700; - max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - } - @media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } } - .dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; } - .dm-meta-item { - display: inline-flex; align-items: center; gap: 7px; - font-size: 13.5px; font-weight: 600; color: #475569; - } - .dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; } - .dm-meta-author { color: #0f172a; font-weight: 700; } - @media (max-width: 600px) { .dm-meta-bar { gap: 12px; } } - .dm-blog-layout { - display: grid; grid-template-columns: minmax(0,1fr) 320px; - /* Tighter gap gives the reading column more room next to the 320px sidebar. */ - gap: clamp(28px, 3vw, 56px); align-items: start; - } - @media (max-width: 1024px) { - .dm-blog-layout { grid-template-columns: 1fr; gap: 48px; } - /* Single-column (tablet/mobile): cap the reading column and centre it so the - article never sits left-aligned with a large empty right gutter. */ - .dm-blog-main { max-width: 900px; margin-inline: auto; } - } - .dm-blog-main { min-width: 0; } - - /* ── Intro lead ── */ - .dm-blog-intro { - max-width: var(--dm-measure); - font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500; - color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px; - border-left: 3px solid var(--dm-red); - } - - /* ── Article body ── */ - .dm-article-body { max-width: var(--dm-measure); } - .dm-article-p { - font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450; - margin: 0 0 var(--dm-space-p); - } - .dm-article-h2 { - font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important; - color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h); - text-wrap: balance; - } - /* Each article block is wrapped in its OWN ScrollReveal
    , so a bare - :first-child rule matched every heading (each is the only child of its - wrapper) and zeroed its top margin, collapsing the gap above every - section heading. Scope the reset to only the article body's first block. */ - .dm-article-body > :first-child :where(.dm-article-h2, .dm-article-h3), - .dm-article-body > .dm-article-h2:first-child, - .dm-article-body > .dm-article-h3:first-child { margin-top: 0; } - .dm-article-h3 { - font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important; - color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px; - text-wrap: balance; - } - @media (max-width: 600px) { - .dm-article-p { font-size: 16px !important; } - .dm-article-ul li, .dm-article-ol li { font-size: 15.5px; } - .dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; } - .dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; } - } - - .dm-article-ul, .dm-article-ol { - /* Top margin (was 0) separates the list from the paragraph above it; - matching bottom margin keeps it clear of the next heading/paragraph. - Slightly larger than --dm-space-p so the list reads as its own block. */ - margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px); - padding-left: 2px; list-style: none; - display: flex; flex-direction: column; gap: 15px; - } - /* Prefixed with .dm-article-body so these beat the theme's global - ".logico-front-end ul li:before" fontello-glyph bullet (specificity 0,1,3), - which otherwise replaces our clean red dot with a misaligned checkmark glyph - and adds its own 1.7em indent. */ - .dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li { - position: relative; padding-left: 34px; - font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450; - } - .dm-article-body .dm-article-ul li::before { - content: ""; position: absolute; left: 7px; top: 10px; - width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red); - /* kill any inherited fontello glyph from the global rule */ - font-size: 0; line-height: 0; - } - .dm-article-ol { counter-reset: dm-li; } - .dm-article-body .dm-article-ol li { counter-increment: dm-li; } - .dm-article-body .dm-article-ol li::before { - content: counter(dm-li); position: absolute; left: 0; top: 0; - width: 24px; height: 24px; border-radius: 7px; - background: rgba(192,18,39,0.10); color: var(--dm-red); - font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; - } - - /* ── Quote ── */ - .dm-article-quote { - position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px; - background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%); - border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0; - box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06); - } - .dm-article-quote::before { - content: "\201C"; position: absolute; left: 22px; top: 8px; - font-family: Georgia, "Times New Roman", serif; - font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700; - } - .dm-article-quote p { - font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600; - font-style: italic; color: #1e293b; margin: 0; - } - .dm-article-quote cite { - display: block; margin-top: 16px; font-size: 13px; font-weight: 700; - font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px; - } - @media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } } - - /* ── Images ── */ - .dm-article-figure { margin: var(--dm-space-img) 0; } - .dm-article-figure-img { - position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; - border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10); - } - .dm-article-figure figcaption { - margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500; - text-align: center; font-style: italic; - } - - /* ── Sidebar ── */ - .dm-blog-aside-wrap { position: relative; } - .dm-blog-sidebar { - display: flex; flex-direction: column; gap: 18px; - position: sticky; top: var(--dm-sticky-top); - } - @media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } } - - .dm-blog-widget { - background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card); - padding: 20px; box-shadow: var(--dm-shadow-card); - } - .dm-blog-widget-title { - font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important; - letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important; - margin: 0 0 15px; padding: 0 0 12px; - border-bottom: 1px solid rgba(15,23,42,0.08); - overflow: visible; white-space: normal; word-break: normal; - } - - /* Search */ - .dm-sr-only { - position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; - overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; - } - .dm-blog-search { position: relative; } - .dm-blog-search-form { position: relative; } - .dm-blog-search-input { - width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px; - padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a; - background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; - } - .dm-blog-search-input::placeholder { color: #9c9c9c; } - .dm-blog-search-input:focus { - outline: none; border-color: var(--dm-red); background: #fff; - box-shadow: 0 0 0 3px rgba(192,18,39,0.11); - } - .dm-blog-search-icon { - position: absolute; right: 14px; top: 50%; transform: translateY(-50%); - color: #94a3b8; pointer-events: none; display: flex; - } - .dm-blog-search-results { - position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0; - background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px; - box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden; - } - .dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; } - .dm-blog-search-result { - display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; - border-radius: 10px; text-decoration: none; transition: background .15s ease; - } - .dm-blog-search-result:hover { background: #f8fafc; } - .dm-blog-search-result-cat { - font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red); - } - .dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; } - .dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; } - - /* Recent posts */ - .dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; } - .dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; } - .dm-blog-recent-thumb { - position: relative; flex: 0 0 62px; width: 62px; height: 62px; - border-radius: 13px; overflow: hidden; background: #f1f5f9; - } - .dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; } - .dm-blog-recent-title { - font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); } - .dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; } - - /* Categories */ - .dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; } - .dm-blog-category-item { - display: flex; align-items: center; justify-content: space-between; gap: 10px; - padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important; - border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease; - } - .dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; } - .dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; } - .dm-blog-category-item > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .dm-blog-category-count { - flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9; - min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex; - align-items: center; justify-content: center; padding: 0 7px; - } - - /* CTA card */ - .dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; } - .dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; } - .dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; } - .dm-blog-cta-btn { - display: inline-flex; align-items: center; gap: 8px; - background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700; - padding: 12px 22px; border-radius: 12px; text-decoration: none; - transition: background .2s ease, transform .2s ease; - } - .dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } -c:["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"headline\":\"Building a Greener City: The Future of Urban Logistics\",\"description\":\"Cities are asking for cleaner delivery. The practical challenge is planning EV routes that can meet customer windows without wasting charge.\",\"image\":[\"https://www.doormile.com/images/blog-post-pic-6.webp\"],\"datePublished\":\"2025-07-10T00:00:00.000Z\",\"dateModified\":\"2025-07-10T00:00:00.000Z\",\"author\":{\"@type\":\"Organization\",\"name\":\"Doormile Team\",\"url\":\"https://www.doormile.com\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Doormile\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.doormile.com/images/cropped-image-2.png\"}},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.doormile.com/blog/building-a-greener-city-the-future-of-urban-logistics\"},\"articleSection\":\"Sustainability\"}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://www.doormile.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https://www.doormile.com/blog\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Building a Greener City: The Future of Urban Logistics\",\"item\":\"https://www.doormile.com/blog/building-a-greener-city-the-future-of-urban-logistics\"}]}"}}],["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":[["$","article",null,{"className":"dm-single-blog","children":[["$","link",null,{"rel":"preload","as":"image","href":"/images/blog-post-pic-6.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$17"}}],"$L18","$L19"]}],"$L1a"]}]}]]}] -1b:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],""] -1c:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"ScrollReveal"] -18:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card dm-banner-card","style":{"backgroundImage":"url(/images/blog-post-pic-6.webp)","--hero-overlay":"linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)"},"children":["$","div",null,{"className":"e-con-inner dm-banner-inner","children":[["$","span",null,{"className":"dm-banner-category","children":"Sustainability"}],["$","h1",null,{"className":"dm-banner-title","children":"Building a Greener City: The Future of Urban Logistics"}]]}]}]}] -19:["$","div",null,{"className":"dm-blog-wrap","children":[["$","div",null,{"className":"dm-meta-bar","children":[["$","nav",null,{"className":"dm-meta-breadcrumb","aria-label":"Breadcrumb","children":["$","ol",null,{"children":[["$","li",null,{"children":["$","$L1b",null,{"href":"/","children":"Home"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"children":["$","$L1b",null,{"href":"/blog","children":"Blog"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"aria-current":"page","className":"dm-meta-current","children":"Building a Greener City: The Future of Urban Logistics"}]]}]}],["$","div",null,{"className":"dm-meta-items","children":[["$","span",null,{"className":"dm-meta-item dm-meta-author","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","path",null,{"d":"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}],["$","circle",null,{"cx":"12","cy":"7","r":"4"}]]}],"Doormile Team"]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"2"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}]]}],["$","time",null,{"dateTime":"2025-07-10","children":"Jul 10, 2025"}]]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","circle",null,{"cx":"12","cy":"12","r":"9"}],["$","polyline",null,{"points":"12 7 12 12 15 14"}]]}],2," min read"]}]]}]]}],["$","div",null,{"className":"dm-blog-layout","children":[["$","div",null,{"className":"dm-blog-main","children":[["$","p",null,{"className":"dm-blog-intro","children":"Cleaner delivery is becoming an operating requirement, not just a brand message. It depends on EV adoption and route plans that make those vehicles practical every day."}],["$","div",null,{"className":"dm-article-body","children":[["$","$L1c","0",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"In last-mile logistics, a missed SLA is rarely caused by one big failure. It usually comes from small delays adding up across a route. Building a Greener City: The Future of Urban Logistics looks at how delivery teams can spot those delays early and plan around them before vehicles leave the hub."}]}],["$","$L1c","1",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Why this matters for fleet teams"}]}],["$","$L1c","2",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Every extra kilometre costs money. It uses fuel or charge, adds rider time, wears down vehicles, and increases the chance of a late delivery. When routes are built from fixed zones or old habits, those costs repeat every day."}]}],["$","$L1c","3",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"Fewer vehicles needed for the same number of drops"}],["$","li","1",{"children":"Lower cost per drop through better stop sequencing"}],["$","li","2",{"children":"ETAs that match traffic, distance, and delivery windows"}],["$","li","3",{"children":"Less fuel or charge used per completed order"}]]}]}],["$","$L1c","4",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"From orders to dispatch"}]}],["$","$L1c","5",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"A good dispatch plan starts with the basics: order locations, promised delivery windows, rider capacity, vehicle range, and known traffic trouble spots. MileTruth™ checks those inputs before dispatch so the team is not fixing avoidable mistakes on the road."}]}],["$","$L1c","6",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","figure",null,{"className":"dm-article-figure","children":["$L1d","$L1e"]}]}],"$L1f","$L20","$L21","$L22","$L23"]}]]}],"$L24"]}]]}] -25:T2021, - .dm-blog-footer { - font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32; - /* The global theme applies 72px top/bottom section padding — strip it so the - inner container is the single source of vertical rhythm (no double gap). */ - padding: 0 !important; - } - /* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */ - .dm-blog-footer :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline) */ - .dm-blog-footer a { text-decoration: none !important; } - /* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px - max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA - align to the exact same left/right edges as the article body above. - Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a - consistent ~64–72px section→section gap (no 120px+ voids). */ - .dm-blog-footer-inner { - max-width: 1280px; margin: 0 auto; - /* Compact vertical rhythm on an 8px system. Top padding sets the - article→Prev/Next gap (~24–32px); the inter-section gap sets the - Prev/Next→Related gap (~32–48px). No large arbitrary voids. */ - /* Minimal bottom padding — the global site footer already contributes its - own 20px top inset, so the CTA banner sits close to it without a void. */ - padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px); - display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px); - } - @media (max-width: 767px) { - .dm-blog-footer-inner { - padding-left: 16px; - padding-right: 16px; - } - } - - /* Prev / Next */ - .dm-prevnext { - display: grid; grid-template-columns: 1fr 1fr; gap: 20px; - /* Halved from 40px: tight divider→cards spacing without crowding. */ - padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08); - } - @media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } } - .dm-prevnext-placeholder { display: block; } - .dm-prevnext-card { - display: flex; gap: 16px; align-items: center; padding: 16px; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; - } - .dm-prevnext-card:hover { - transform: translateY(-4px); border-color: rgba(192,18,39,0.2); - box-shadow: 0 16px 34px rgba(192,18,39,0.10); - } - .dm-prevnext-thumb { - position: relative; flex: 0 0 80px; width: 80px; height: 80px; - border-radius: 16px; overflow: hidden; background: #f1f5f9; - } - .dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; } - .dm-prevnext-next { text-align: right; } - .dm-prevnext-next .dm-prevnext-text { align-items: flex-end; } - .dm-prevnext-label { - display: inline-flex; align-items: center; gap: 6px; - font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red); - } - .dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; } - .dm-prevnext-title { - font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); } - - /* Related */ - .dm-related-heading { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important; - line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px; - } - .dm-related-grid { - display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; - } - @media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } } - @media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } } - - .dm-related-card { - display: flex; flex-direction: column; height: 100%; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none; - transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease; - } - .dm-related-card:hover { - transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13); - border-color: rgba(192,18,39,0.2); - } - .dm-related-img { - position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9; - } - .dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-img img { transform: scale(1.05); } - .dm-related-badge { - position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff; - font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px; - padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25); - } - .dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; } - .dm-related-card-title { - font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important; - letter-spacing: -.2px !important; margin: 0 0 10px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-related-card:hover .dm-related-card-title { color: var(--dm-red); } - .dm-related-card-excerpt { - font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - } - .dm-related-readmore { - margin-top: auto; display: inline-flex; align-items: center; gap: 7px; - font-size: 12.5px; font-weight: 800; color: var(--dm-red); - text-transform: uppercase; letter-spacing: .6px; - } - .dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); } - - /* Contact CTA banner */ - .dm-blog-contact-cta { - display: flex; align-items: center; justify-content: space-between; gap: 32px; - flex-wrap: wrap; - background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%); - border-radius: 30px; padding: clamp(32px, 4vw, 56px); - position: relative; overflow: hidden; - } - .dm-blog-contact-cta::after { - content: ""; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px; - background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%); - pointer-events: none; - } - .dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; } - .dm-blog-contact-eyebrow { - display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase; - letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px; - } - .dm-blog-contact-title { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important; - letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance; - } - .dm-blog-contact-sub { - font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450; - } - .dm-blog-contact-btn { - position: relative; z-index: 1; flex-shrink: 0; - display: inline-flex; align-items: center; justify-content: center; gap: 10px; - background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700; - padding: 16px 32px; border-radius: 16px; text-decoration: none; - box-shadow: 0 10px 26px rgba(192,18,39,0.34); - transition: background .2s ease, transform .2s ease; - } - .dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } - @media (max-width: 720px) { - .dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; } - .dm-blog-contact-btn { width: 100%; } - } -1a:["$","section",null,{"className":"dm-blog-footer","aria-label":"More articles","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$25"}}],"$L26"]}] -27:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"Image"] -28:I[23096,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"default"] -1d:["$","span",null,{"className":"dm-article-figure-img","children":["$","$L27",null,{"src":"/images/blog-post-pic-6.webp","alt":"Building a Greener City: The Future of Urban Logistics","fill":true,"sizes":"(max-width: 768px) 100vw, 760px","style":{"objectFit":"cover"}}]}] -1e:["$","figcaption",null,{"children":"Sustainability: route planning decisions made before dispatch."}] -1f:["$","$L1c","7",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","blockquote",null,{"className":"dm-article-quote","children":[["$","p",null,{"children":"A route should be checked before the rider leaves, not explained after the customer calls."}],["$","cite",null,{"children":"Doormile Operations"}]]}]}] -20:["$","$L1c","8",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Putting it into practice"}]}] -21:["$","$L1c","9",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The best improvements usually start with simple measurements. Track distance per route, failed delivery windows, rider idle time, and orders moved between vehicles after dispatch. Those numbers show where the operation is leaking time."}]}] -22:["$","$L1c","10",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ol",null,{"className":"dm-article-ol","children":[["$","li","0",{"children":"Benchmark today's distance, fleet size, and on-time rate."}],["$","li","1",{"children":"Include vehicle capacity, delivery windows, rider shifts, and battery charge."}],["$","li","2",{"children":"Check routes against traffic and customer commitments before dispatch."}],["$","li","3",{"children":"Compare the next dispatch cycle against the old plan."}]]}]}] -23:["$","$L1c","11",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Better routing is not about pushing riders harder. It is about giving them a plan that already accounts for the real day ahead."}]}] -24:["$","div",null,{"className":"dm-blog-aside-wrap","children":["$","aside",null,{"className":"dm-blog-sidebar","aria-label":"Blog sidebar","children":[["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Search"}],["$","$L28",null,{}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Recent Posts"}],["$","ul",null,{"className":"dm-blog-recent","children":[["$","li","how-ai-is-transforming-last-mile-ev-delivery",{"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","time",null,{"dateTime":"2025-10-02","className":"dm-blog-recent-date","children":"Oct 2, 2025"}]]}]]}]}],["$","li","42-less-distance-insights-from-our-hyderabad-hub",{"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","time",null,{"dateTime":"2025-09-18","className":"dm-blog-recent-date","children":"Sep 18, 2025"}]]}]]}]}],["$","li","miletruth-ai-10-stages-to-smarter-dispatch",{"children":["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","time",null,{"dateTime":"2025-09-05","className":"dm-blog-recent-date","children":"Sep 5, 2025"}]]}]]}]}],["$","li","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"children":["$","$L1b",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","time",null,{"dateTime":"2025-08-21","className":"dm-blog-recent-date","children":"Aug 21, 2025"}]]}]]}]}]]}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Categories"}],["$","ul",null,{"className":"dm-blog-categories","children":[["$","li","Case Study",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Case Study"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","EV Fleet",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"EV Fleet"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}],["$","li","Fleet Management",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Fleet Management"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","MileTruth",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"MileTruth"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],"$L29","$L2a","$L2b"]}]]}],"$L2c"]}]}] -26:["$","div",null,{"className":"dm-blog-footer-inner","children":[["$","nav",null,{"className":"dm-prevnext","aria-label":"Article navigation","children":[["$","$L1b",null,{"href":"/blog/fleet-reduction-without-compromising-delivery-volume","className":"dm-prevnext-card dm-prevnext-prev","children":[["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-8.webp","alt":"Fleet Reduction Without Compromising Delivery Volume","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"19","y1":"12","x2":"5","y2":"12"}],["$","polyline",null,{"points":"12 19 5 12 12 5"}]]}],"Previous"]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Fleet Management"}],["$","span",null,{"className":"dm-prevnext-title","children":"Fleet Reduction Without Compromising Delivery Volume"}]]}]]}],["$","$L1b",null,{"href":"/blog/how-doormile-maintains-99-9-sla-compliance-at-scale","className":"dm-prevnext-card dm-prevnext-next","children":[["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":["Next",["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Operations"}],["$","span",null,{"className":"dm-prevnext-title","children":"How Doormile Maintains 99.9% SLA Compliance at Scale"}]]}],["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L27",null,{"src":"/images/last-mile-approach.webp","alt":"How Doormile Maintains 99.9% SLA Compliance at Scale","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}]]}]]}],["$","div",null,{"className":"dm-related","children":[["$","h2",null,{"className":"dm-related-heading","children":"Related Articles"}],["$","div",null,{"className":"dm-related-grid","children":[["$","$L1c","how-ai-is-transforming-last-mile-ev-delivery",{"delay":0,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Technology"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L1c","42-less-distance-insights-from-our-hyderabad-hub",{"delay":0.08,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Case Study"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],"$L2d","$L2e"]}]]}]}],"$L2f"]}]]}],"$L30"]}] -29:["$","li","Operations",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Operations"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2a:["$","li","Sustainability",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Sustainability"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2b:["$","li","Technology",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Technology"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}] -2c:["$","section",null,{"className":"dm-blog-widget dm-blog-cta-card","children":[["$","h2",null,{"className":"dm-blog-cta-title","children":"Planning delivery routes?"}],["$","p",null,{"className":"dm-blog-cta-text","children":"Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time."}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-cta-btn","children":["Contact Us",["$","svg",null,{"width":"18","height":"18","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -2d:["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}] -2e:["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}] -2f:["$","$L1c","miletruth-ai-10-stages-to-smarter-dispatch",{"delay":0.16,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"MileTruth"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}] -30:["$","div",null,{"className":"dm-blog-contact-cta","children":[["$","div",null,{"className":"dm-blog-contact-cta-content","children":[["$","span",null,{"className":"dm-blog-contact-eyebrow","children":"Let's talk logistics"}],["$","h2",null,{"className":"dm-blog-contact-title","children":"Ready to move smarter with Doormile?"}],["$","p",null,{"className":"dm-blog-contact-sub","children":"Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding."}]]}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-contact-btn","children":["Get in Touch",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -12:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -31:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -f:null -14:[["$","title","0",{"children":"Building a Greener City: The Future of Urban Logistics – Doormile"}],["$","meta","1",{"name":"description","content":"Cities are asking for cleaner delivery. The practical challenge is planning EV routes that can meet customer windows without wasting charge."}],["$","meta","2",{"name":"author","content":"Doormile Team"}],["$","meta","3",{"name":"keywords","content":"Sustainability,last-mile logistics,EV fleet,MileTruth,route optimisation"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","link","5",{"rel":"canonical","href":"https://www.doormile.com/blog/building-a-greener-city-the-future-of-urban-logistics"}],["$","meta","6",{"property":"og:title","content":"Building a Greener City: The Future of Urban Logistics"}],["$","meta","7",{"property":"og:description","content":"Cities are asking for cleaner delivery. The practical challenge is planning EV routes that can meet customer windows without wasting charge."}],["$","meta","8",{"property":"og:url","content":"https://www.doormile.com/blog/building-a-greener-city-the-future-of-urban-logistics"}],["$","meta","9",{"property":"og:site_name","content":"Doormile"}],["$","meta","10",{"property":"og:image","content":"https://www.doormile.com/images/blog-post-pic-6.webp"}],["$","meta","11",{"property":"og:image:alt","content":"Building a Greener City: The Future of Urban Logistics"}],["$","meta","12",{"property":"og:type","content":"article"}],["$","meta","13",{"property":"article:published_time","content":"2025-07-10T00:00:00.000Z"}],["$","meta","14",{"property":"article:author","content":"Doormile Team"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"Building a Greener City: The Future of Urban Logistics"}],["$","meta","17",{"name":"twitter:description","content":"Cities are asking for cleaner delivery. The practical challenge is planning EV routes that can meet customer windows without wasting charge."}],["$","meta","18",{"name":"twitter:image","content":"https://www.doormile.com/images/blog-post-pic-6.webp"}],["$","link","19",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","21",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","22",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L31","23",{}]] diff --git a/build/blog/building-a-greener-city-the-future-of-urban-logistics/__next._head.txt b/build/blog/building-a-greener-city-the-future-of-urban-logistics/__next._head.txt deleted file mode 100644 index 219a702..0000000 --- a/build/blog/building-a-greener-city-the-future-of-urban-logistics/__next._head.txt +++ /dev/null @@ -1,6 +0,0 @@ -1:"$Sreact.fragment" -2:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -3:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -4:"$Sreact.suspense" -5:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Building a Greener City: The Future of Urban Logistics – Doormile"}],["$","meta","1",{"name":"description","content":"Cities are asking for cleaner delivery. The practical challenge is planning EV routes that can meet customer windows without wasting charge."}],["$","meta","2",{"name":"author","content":"Doormile Team"}],["$","meta","3",{"name":"keywords","content":"Sustainability,last-mile logistics,EV fleet,MileTruth,route optimisation"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","link","5",{"rel":"canonical","href":"https://www.doormile.com/blog/building-a-greener-city-the-future-of-urban-logistics"}],["$","meta","6",{"property":"og:title","content":"Building a Greener City: The Future of Urban Logistics"}],["$","meta","7",{"property":"og:description","content":"Cities are asking for cleaner delivery. The practical challenge is planning EV routes that can meet customer windows without wasting charge."}],["$","meta","8",{"property":"og:url","content":"https://www.doormile.com/blog/building-a-greener-city-the-future-of-urban-logistics"}],["$","meta","9",{"property":"og:site_name","content":"Doormile"}],["$","meta","10",{"property":"og:image","content":"https://www.doormile.com/images/blog-post-pic-6.webp"}],["$","meta","11",{"property":"og:image:alt","content":"Building a Greener City: The Future of Urban Logistics"}],["$","meta","12",{"property":"og:type","content":"article"}],["$","meta","13",{"property":"article:published_time","content":"2025-07-10T00:00:00.000Z"}],["$","meta","14",{"property":"article:author","content":"Doormile Team"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"Building a Greener City: The Future of Urban Logistics"}],["$","meta","17",{"name":"twitter:description","content":"Cities are asking for cleaner delivery. The practical challenge is planning EV routes that can meet customer windows without wasting charge."}],["$","meta","18",{"name":"twitter:image","content":"https://www.doormile.com/images/blog-post-pic-6.webp"}],["$","link","19",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","21",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","22",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L5","23",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/building-a-greener-city-the-future-of-urban-logistics/__next._index.txt b/build/blog/building-a-greener-city-the-future-of-urban-logistics/__next._index.txt deleted file mode 100644 index d0b3355..0000000 --- a/build/blog/building-a-greener-city-the-future-of-urban-logistics/__next._index.txt +++ /dev/null @@ -1,15 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","template":["$","$La",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/building-a-greener-city-the-future-of-urban-logistics/__next._tree.txt b/build/blog/building-a-greener-city-the-future-of-urban-logistics/__next._tree.txt deleted file mode 100644 index ae214b8..0000000 --- a/build/blog/building-a-greener-city-the-future-of-urban-logistics/__next._tree.txt +++ /dev/null @@ -1,10 +0,0 @@ -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -:HL["/images/blog-post-pic-6.webp","image"] -0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"blog","param":null,"prefetchHints":0,"slots":{"children":{"name":"slug","param":{"type":"d","key":"building-a-greener-city-the-future-of-urban-logistics","siblings":null},"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/building-a-greener-city-the-future-of-urban-logistics/__next.blog.$d$slug.__PAGE__.txt b/build/blog/building-a-greener-city-the-future-of-urban-logistics/__next.blog.$d$slug.__PAGE__.txt deleted file mode 100644 index 0aeb898..0000000 --- a/build/blog/building-a-greener-city-the-future-of-urban-logistics/__next.blog.$d$slug.__PAGE__.txt +++ /dev/null @@ -1,520 +0,0 @@ -1:"$Sreact.fragment" -8:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],""] -9:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"ScrollReveal"] -14:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -15:"$Sreact.suspense" -17:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"Image"] -18:I[23096,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"default"] -:HL["/images/blog-post-pic-6.webp","image"] -2:T3d6f, - .dm-single-blog { - --dm-red: #c01227; - --dm-red-hover: #e31d32; - --dm-radius-card: 22px; - --dm-radius-img: 20px; - --dm-radius-badge: 8px; - --dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05); - --dm-border: 1px solid rgba(15, 23, 42, 0.09); - --dm-space-p: 24px; - --dm-space-h: 32px; - --dm-space-img: 32px; - --dm-space-quote: 40px; - --dm-sticky-top: 138px; - --dm-measure: min(1100px, 100%); - font-family: var(--font-manrope), sans-serif; - } - - /* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6 - (120/80/60px UPPERCASE) rules with !important on our own classes. */ - .dm-single-blog :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline, - specificity 0-1-1) so blog links keep our colors and never get underlined. */ - .dm-single-blog a { text-decoration: none !important; } - - /* Page banner: tall homepage-scale frame with only badge + title inside */ - /* Compound selector (specificity 20) + !important beats the global 800px - single-class height rules so the blog banner can use viewport heights. */ - .custom-standard-hero-card.dm-banner-card { - height: 90vh !important; - min-height: 85vh !important; - } - @media (max-width: 1024px) { - .custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; } - } - @media (max-width: 600px) { - .custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; } - } - - .dm-banner-inner { - position: relative; width: 100%; height: 100%; - display: flex; flex-direction: column; align-items: center; justify-content: center; - text-align: center; gap: clamp(22px, 2.6vw, 34px); - padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px); - } - - .dm-banner-category { - display: inline-block; background: var(--dm-red); color: #fff; - font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px; - padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45); - } - .dm-banner-title { - font-family: var(--font-manrope), sans-serif !important; - font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important; - line-height: 1.16 !important; letter-spacing: -1.2px !important; - color: #ffffff !important; margin: 0; max-width: 820px; - text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38); - } - @media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } } - @media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } } - - /* Content wrap begins immediately below the banner */ - /* Shared content container: the SAME max-width + horizontal padding is used - by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings, - images, Prev/Next, Related Articles and the CTA banner all align to one - grid with identical left/right edges. Keep both in sync. */ - .dm-blog-wrap { - max-width: 1280px; margin: 0 auto; - /* 20px mobile padding floor → 40px on desktop; matches the footer container. */ - padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0; - } - @media (max-width: 767px) { - .dm-blog-wrap { - padding-left: 16px; - padding-right: 16px; - } - } - - /* ── Article meta bar (directly under the hero) ── */ - .dm-meta-bar { - display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px; - padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px); - border-bottom: 1px solid rgba(15,23,42,0.10); - } - .dm-meta-breadcrumb ol { - list-style: none; display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b; - } - .dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; } - .dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; } - .dm-meta-sep { color: #cbd5e1; } - .dm-meta-current { - color: #0f172a; font-weight: 700; - max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - } - @media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } } - .dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; } - .dm-meta-item { - display: inline-flex; align-items: center; gap: 7px; - font-size: 13.5px; font-weight: 600; color: #475569; - } - .dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; } - .dm-meta-author { color: #0f172a; font-weight: 700; } - @media (max-width: 600px) { .dm-meta-bar { gap: 12px; } } - .dm-blog-layout { - display: grid; grid-template-columns: minmax(0,1fr) 320px; - /* Tighter gap gives the reading column more room next to the 320px sidebar. */ - gap: clamp(28px, 3vw, 56px); align-items: start; - } - @media (max-width: 1024px) { - .dm-blog-layout { grid-template-columns: 1fr; gap: 48px; } - /* Single-column (tablet/mobile): cap the reading column and centre it so the - article never sits left-aligned with a large empty right gutter. */ - .dm-blog-main { max-width: 900px; margin-inline: auto; } - } - .dm-blog-main { min-width: 0; } - - /* ── Intro lead ── */ - .dm-blog-intro { - max-width: var(--dm-measure); - font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500; - color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px; - border-left: 3px solid var(--dm-red); - } - - /* ── Article body ── */ - .dm-article-body { max-width: var(--dm-measure); } - .dm-article-p { - font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450; - margin: 0 0 var(--dm-space-p); - } - .dm-article-h2 { - font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important; - color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h); - text-wrap: balance; - } - /* Each article block is wrapped in its OWN ScrollReveal
    , so a bare - :first-child rule matched every heading (each is the only child of its - wrapper) and zeroed its top margin, collapsing the gap above every - section heading. Scope the reset to only the article body's first block. */ - .dm-article-body > :first-child :where(.dm-article-h2, .dm-article-h3), - .dm-article-body > .dm-article-h2:first-child, - .dm-article-body > .dm-article-h3:first-child { margin-top: 0; } - .dm-article-h3 { - font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important; - color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px; - text-wrap: balance; - } - @media (max-width: 600px) { - .dm-article-p { font-size: 16px !important; } - .dm-article-ul li, .dm-article-ol li { font-size: 15.5px; } - .dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; } - .dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; } - } - - .dm-article-ul, .dm-article-ol { - /* Top margin (was 0) separates the list from the paragraph above it; - matching bottom margin keeps it clear of the next heading/paragraph. - Slightly larger than --dm-space-p so the list reads as its own block. */ - margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px); - padding-left: 2px; list-style: none; - display: flex; flex-direction: column; gap: 15px; - } - /* Prefixed with .dm-article-body so these beat the theme's global - ".logico-front-end ul li:before" fontello-glyph bullet (specificity 0,1,3), - which otherwise replaces our clean red dot with a misaligned checkmark glyph - and adds its own 1.7em indent. */ - .dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li { - position: relative; padding-left: 34px; - font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450; - } - .dm-article-body .dm-article-ul li::before { - content: ""; position: absolute; left: 7px; top: 10px; - width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red); - /* kill any inherited fontello glyph from the global rule */ - font-size: 0; line-height: 0; - } - .dm-article-ol { counter-reset: dm-li; } - .dm-article-body .dm-article-ol li { counter-increment: dm-li; } - .dm-article-body .dm-article-ol li::before { - content: counter(dm-li); position: absolute; left: 0; top: 0; - width: 24px; height: 24px; border-radius: 7px; - background: rgba(192,18,39,0.10); color: var(--dm-red); - font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; - } - - /* ── Quote ── */ - .dm-article-quote { - position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px; - background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%); - border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0; - box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06); - } - .dm-article-quote::before { - content: "\201C"; position: absolute; left: 22px; top: 8px; - font-family: Georgia, "Times New Roman", serif; - font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700; - } - .dm-article-quote p { - font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600; - font-style: italic; color: #1e293b; margin: 0; - } - .dm-article-quote cite { - display: block; margin-top: 16px; font-size: 13px; font-weight: 700; - font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px; - } - @media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } } - - /* ── Images ── */ - .dm-article-figure { margin: var(--dm-space-img) 0; } - .dm-article-figure-img { - position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; - border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10); - } - .dm-article-figure figcaption { - margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500; - text-align: center; font-style: italic; - } - - /* ── Sidebar ── */ - .dm-blog-aside-wrap { position: relative; } - .dm-blog-sidebar { - display: flex; flex-direction: column; gap: 18px; - position: sticky; top: var(--dm-sticky-top); - } - @media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } } - - .dm-blog-widget { - background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card); - padding: 20px; box-shadow: var(--dm-shadow-card); - } - .dm-blog-widget-title { - font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important; - letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important; - margin: 0 0 15px; padding: 0 0 12px; - border-bottom: 1px solid rgba(15,23,42,0.08); - overflow: visible; white-space: normal; word-break: normal; - } - - /* Search */ - .dm-sr-only { - position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; - overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; - } - .dm-blog-search { position: relative; } - .dm-blog-search-form { position: relative; } - .dm-blog-search-input { - width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px; - padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a; - background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; - } - .dm-blog-search-input::placeholder { color: #9c9c9c; } - .dm-blog-search-input:focus { - outline: none; border-color: var(--dm-red); background: #fff; - box-shadow: 0 0 0 3px rgba(192,18,39,0.11); - } - .dm-blog-search-icon { - position: absolute; right: 14px; top: 50%; transform: translateY(-50%); - color: #94a3b8; pointer-events: none; display: flex; - } - .dm-blog-search-results { - position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0; - background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px; - box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden; - } - .dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; } - .dm-blog-search-result { - display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; - border-radius: 10px; text-decoration: none; transition: background .15s ease; - } - .dm-blog-search-result:hover { background: #f8fafc; } - .dm-blog-search-result-cat { - font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red); - } - .dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; } - .dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; } - - /* Recent posts */ - .dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; } - .dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; } - .dm-blog-recent-thumb { - position: relative; flex: 0 0 62px; width: 62px; height: 62px; - border-radius: 13px; overflow: hidden; background: #f1f5f9; - } - .dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; } - .dm-blog-recent-title { - font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); } - .dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; } - - /* Categories */ - .dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; } - .dm-blog-category-item { - display: flex; align-items: center; justify-content: space-between; gap: 10px; - padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important; - border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease; - } - .dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; } - .dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; } - .dm-blog-category-item > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .dm-blog-category-count { - flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9; - min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex; - align-items: center; justify-content: center; padding: 0 7px; - } - - /* CTA card */ - .dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; } - .dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; } - .dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; } - .dm-blog-cta-btn { - display: inline-flex; align-items: center; gap: 8px; - background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700; - padding: 12px 22px; border-radius: 12px; text-decoration: none; - transition: background .2s ease, transform .2s ease; - } - .dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } -0:{"rsc":["$","$1","c",{"children":[["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"headline\":\"Building a Greener City: The Future of Urban Logistics\",\"description\":\"Cities are asking for cleaner delivery. The practical challenge is planning EV routes that can meet customer windows without wasting charge.\",\"image\":[\"https://www.doormile.com/images/blog-post-pic-6.webp\"],\"datePublished\":\"2025-07-10T00:00:00.000Z\",\"dateModified\":\"2025-07-10T00:00:00.000Z\",\"author\":{\"@type\":\"Organization\",\"name\":\"Doormile Team\",\"url\":\"https://www.doormile.com\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Doormile\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.doormile.com/images/cropped-image-2.png\"}},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.doormile.com/blog/building-a-greener-city-the-future-of-urban-logistics\"},\"articleSection\":\"Sustainability\"}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://www.doormile.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https://www.doormile.com/blog\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Building a Greener City: The Future of Urban Logistics\",\"item\":\"https://www.doormile.com/blog/building-a-greener-city-the-future-of-urban-logistics\"}]}"}}],["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":[["$","article",null,{"className":"dm-single-blog","children":[["$","link",null,{"rel":"preload","as":"image","href":"/images/blog-post-pic-6.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$2"}}],"$L3","$L4"]}],"$L5"]}]}]]}],["$L6"],"$L7"]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} -3:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card dm-banner-card","style":{"backgroundImage":"url(/images/blog-post-pic-6.webp)","--hero-overlay":"linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)"},"children":["$","div",null,{"className":"e-con-inner dm-banner-inner","children":[["$","span",null,{"className":"dm-banner-category","children":"Sustainability"}],["$","h1",null,{"className":"dm-banner-title","children":"Building a Greener City: The Future of Urban Logistics"}]]}]}]}] -4:["$","div",null,{"className":"dm-blog-wrap","children":[["$","div",null,{"className":"dm-meta-bar","children":[["$","nav",null,{"className":"dm-meta-breadcrumb","aria-label":"Breadcrumb","children":["$","ol",null,{"children":[["$","li",null,{"children":["$","$L8",null,{"href":"/","children":"Home"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"children":["$","$L8",null,{"href":"/blog","children":"Blog"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"aria-current":"page","className":"dm-meta-current","children":"Building a Greener City: The Future of Urban Logistics"}]]}]}],["$","div",null,{"className":"dm-meta-items","children":[["$","span",null,{"className":"dm-meta-item dm-meta-author","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","path",null,{"d":"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}],["$","circle",null,{"cx":"12","cy":"7","r":"4"}]]}],"Doormile Team"]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"2"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}]]}],["$","time",null,{"dateTime":"2025-07-10","children":"Jul 10, 2025"}]]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","circle",null,{"cx":"12","cy":"12","r":"9"}],["$","polyline",null,{"points":"12 7 12 12 15 14"}]]}],2," min read"]}]]}]]}],["$","div",null,{"className":"dm-blog-layout","children":[["$","div",null,{"className":"dm-blog-main","children":[["$","p",null,{"className":"dm-blog-intro","children":"Cleaner delivery is becoming an operating requirement, not just a brand message. It depends on EV adoption and route plans that make those vehicles practical every day."}],["$","div",null,{"className":"dm-article-body","children":[["$","$L9","0",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"In last-mile logistics, a missed SLA is rarely caused by one big failure. It usually comes from small delays adding up across a route. Building a Greener City: The Future of Urban Logistics looks at how delivery teams can spot those delays early and plan around them before vehicles leave the hub."}]}],["$","$L9","1",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Why this matters for fleet teams"}]}],["$","$L9","2",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Every extra kilometre costs money. It uses fuel or charge, adds rider time, wears down vehicles, and increases the chance of a late delivery. When routes are built from fixed zones or old habits, those costs repeat every day."}]}],["$","$L9","3",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"Fewer vehicles needed for the same number of drops"}],["$","li","1",{"children":"Lower cost per drop through better stop sequencing"}],["$","li","2",{"children":"ETAs that match traffic, distance, and delivery windows"}],["$","li","3",{"children":"Less fuel or charge used per completed order"}]]}]}],["$","$L9","4",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"From orders to dispatch"}]}],["$","$L9","5",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"A good dispatch plan starts with the basics: order locations, promised delivery windows, rider capacity, vehicle range, and known traffic trouble spots. MileTruth™ checks those inputs before dispatch so the team is not fixing avoidable mistakes on the road."}]}],["$","$L9","6",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","figure",null,{"className":"dm-article-figure","children":["$La","$Lb"]}]}],"$Lc","$Ld","$Le","$Lf","$L10"]}]]}],"$L11"]}]]}] -12:T2021, - .dm-blog-footer { - font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32; - /* The global theme applies 72px top/bottom section padding — strip it so the - inner container is the single source of vertical rhythm (no double gap). */ - padding: 0 !important; - } - /* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */ - .dm-blog-footer :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline) */ - .dm-blog-footer a { text-decoration: none !important; } - /* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px - max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA - align to the exact same left/right edges as the article body above. - Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a - consistent ~64–72px section→section gap (no 120px+ voids). */ - .dm-blog-footer-inner { - max-width: 1280px; margin: 0 auto; - /* Compact vertical rhythm on an 8px system. Top padding sets the - article→Prev/Next gap (~24–32px); the inter-section gap sets the - Prev/Next→Related gap (~32–48px). No large arbitrary voids. */ - /* Minimal bottom padding — the global site footer already contributes its - own 20px top inset, so the CTA banner sits close to it without a void. */ - padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px); - display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px); - } - @media (max-width: 767px) { - .dm-blog-footer-inner { - padding-left: 16px; - padding-right: 16px; - } - } - - /* Prev / Next */ - .dm-prevnext { - display: grid; grid-template-columns: 1fr 1fr; gap: 20px; - /* Halved from 40px: tight divider→cards spacing without crowding. */ - padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08); - } - @media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } } - .dm-prevnext-placeholder { display: block; } - .dm-prevnext-card { - display: flex; gap: 16px; align-items: center; padding: 16px; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; - } - .dm-prevnext-card:hover { - transform: translateY(-4px); border-color: rgba(192,18,39,0.2); - box-shadow: 0 16px 34px rgba(192,18,39,0.10); - } - .dm-prevnext-thumb { - position: relative; flex: 0 0 80px; width: 80px; height: 80px; - border-radius: 16px; overflow: hidden; background: #f1f5f9; - } - .dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; } - .dm-prevnext-next { text-align: right; } - .dm-prevnext-next .dm-prevnext-text { align-items: flex-end; } - .dm-prevnext-label { - display: inline-flex; align-items: center; gap: 6px; - font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red); - } - .dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; } - .dm-prevnext-title { - font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); } - - /* Related */ - .dm-related-heading { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important; - line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px; - } - .dm-related-grid { - display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; - } - @media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } } - @media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } } - - .dm-related-card { - display: flex; flex-direction: column; height: 100%; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none; - transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease; - } - .dm-related-card:hover { - transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13); - border-color: rgba(192,18,39,0.2); - } - .dm-related-img { - position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9; - } - .dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-img img { transform: scale(1.05); } - .dm-related-badge { - position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff; - font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px; - padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25); - } - .dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; } - .dm-related-card-title { - font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important; - letter-spacing: -.2px !important; margin: 0 0 10px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-related-card:hover .dm-related-card-title { color: var(--dm-red); } - .dm-related-card-excerpt { - font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - } - .dm-related-readmore { - margin-top: auto; display: inline-flex; align-items: center; gap: 7px; - font-size: 12.5px; font-weight: 800; color: var(--dm-red); - text-transform: uppercase; letter-spacing: .6px; - } - .dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); } - - /* Contact CTA banner */ - .dm-blog-contact-cta { - display: flex; align-items: center; justify-content: space-between; gap: 32px; - flex-wrap: wrap; - background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%); - border-radius: 30px; padding: clamp(32px, 4vw, 56px); - position: relative; overflow: hidden; - } - .dm-blog-contact-cta::after { - content: ""; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px; - background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%); - pointer-events: none; - } - .dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; } - .dm-blog-contact-eyebrow { - display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase; - letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px; - } - .dm-blog-contact-title { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important; - letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance; - } - .dm-blog-contact-sub { - font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450; - } - .dm-blog-contact-btn { - position: relative; z-index: 1; flex-shrink: 0; - display: inline-flex; align-items: center; justify-content: center; gap: 10px; - background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700; - padding: 16px 32px; border-radius: 16px; text-decoration: none; - box-shadow: 0 10px 26px rgba(192,18,39,0.34); - transition: background .2s ease, transform .2s ease; - } - .dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } - @media (max-width: 720px) { - .dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; } - .dm-blog-contact-btn { width: 100%; } - } -5:["$","section",null,{"className":"dm-blog-footer","aria-label":"More articles","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$12"}}],"$L13"]}] -6:["$","script","script-0",{"src":"/_next/static/chunks/0yvxf3ok9gcp_.js","async":true}] -7:["$","$L14",null,{"children":["$","$15",null,{"name":"Next.MetadataOutlet","children":"$@16"}]}] -a:["$","span",null,{"className":"dm-article-figure-img","children":["$","$L17",null,{"src":"/images/blog-post-pic-6.webp","alt":"Building a Greener City: The Future of Urban Logistics","fill":true,"sizes":"(max-width: 768px) 100vw, 760px","style":{"objectFit":"cover"}}]}] -b:["$","figcaption",null,{"children":"Sustainability: route planning decisions made before dispatch."}] -c:["$","$L9","7",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","blockquote",null,{"className":"dm-article-quote","children":[["$","p",null,{"children":"A route should be checked before the rider leaves, not explained after the customer calls."}],["$","cite",null,{"children":"Doormile Operations"}]]}]}] -d:["$","$L9","8",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Putting it into practice"}]}] -e:["$","$L9","9",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The best improvements usually start with simple measurements. Track distance per route, failed delivery windows, rider idle time, and orders moved between vehicles after dispatch. Those numbers show where the operation is leaking time."}]}] -f:["$","$L9","10",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ol",null,{"className":"dm-article-ol","children":[["$","li","0",{"children":"Benchmark today's distance, fleet size, and on-time rate."}],["$","li","1",{"children":"Include vehicle capacity, delivery windows, rider shifts, and battery charge."}],["$","li","2",{"children":"Check routes against traffic and customer commitments before dispatch."}],["$","li","3",{"children":"Compare the next dispatch cycle against the old plan."}]]}]}] -10:["$","$L9","11",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Better routing is not about pushing riders harder. It is about giving them a plan that already accounts for the real day ahead."}]}] -11:["$","div",null,{"className":"dm-blog-aside-wrap","children":["$","aside",null,{"className":"dm-blog-sidebar","aria-label":"Blog sidebar","children":[["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Search"}],["$","$L18",null,{}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Recent Posts"}],["$","ul",null,{"className":"dm-blog-recent","children":[["$","li","how-ai-is-transforming-last-mile-ev-delivery",{"children":["$","$L8",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","time",null,{"dateTime":"2025-10-02","className":"dm-blog-recent-date","children":"Oct 2, 2025"}]]}]]}]}],["$","li","42-less-distance-insights-from-our-hyderabad-hub",{"children":["$","$L8",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","time",null,{"dateTime":"2025-09-18","className":"dm-blog-recent-date","children":"Sep 18, 2025"}]]}]]}]}],["$","li","miletruth-ai-10-stages-to-smarter-dispatch",{"children":["$","$L8",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","time",null,{"dateTime":"2025-09-05","className":"dm-blog-recent-date","children":"Sep 5, 2025"}]]}]]}]}],["$","li","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"children":["$","$L8",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L17",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","time",null,{"dateTime":"2025-08-21","className":"dm-blog-recent-date","children":"Aug 21, 2025"}]]}]]}]}]]}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Categories"}],["$","ul",null,{"className":"dm-blog-categories","children":[["$","li","Case Study",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Case Study"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","EV Fleet",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"EV Fleet"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}],["$","li","Fleet Management",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Fleet Management"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","MileTruth",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"MileTruth"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],"$L19","$L1a","$L1b"]}]]}],"$L1c"]}]}] -13:["$","div",null,{"className":"dm-blog-footer-inner","children":[["$","nav",null,{"className":"dm-prevnext","aria-label":"Article navigation","children":[["$","$L8",null,{"href":"/blog/fleet-reduction-without-compromising-delivery-volume","className":"dm-prevnext-card dm-prevnext-prev","children":[["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-8.webp","alt":"Fleet Reduction Without Compromising Delivery Volume","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"19","y1":"12","x2":"5","y2":"12"}],["$","polyline",null,{"points":"12 19 5 12 12 5"}]]}],"Previous"]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Fleet Management"}],["$","span",null,{"className":"dm-prevnext-title","children":"Fleet Reduction Without Compromising Delivery Volume"}]]}]]}],["$","$L8",null,{"href":"/blog/how-doormile-maintains-99-9-sla-compliance-at-scale","className":"dm-prevnext-card dm-prevnext-next","children":[["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":["Next",["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Operations"}],["$","span",null,{"className":"dm-prevnext-title","children":"How Doormile Maintains 99.9% SLA Compliance at Scale"}]]}],["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L17",null,{"src":"/images/last-mile-approach.webp","alt":"How Doormile Maintains 99.9% SLA Compliance at Scale","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}]]}]]}],["$","div",null,{"className":"dm-related","children":[["$","h2",null,{"className":"dm-related-heading","children":"Related Articles"}],["$","div",null,{"className":"dm-related-grid","children":[["$","$L9","how-ai-is-transforming-last-mile-ev-delivery",{"delay":0,"duration":0.7,"yOffset":30,"children":["$","$L8",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L17",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Technology"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L9","42-less-distance-insights-from-our-hyderabad-hub",{"delay":0.08,"duration":0.7,"yOffset":30,"children":["$","$L8",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L17",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Case Study"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],"$L1d","$L1e"]}]]}]}],"$L1f"]}]]}],"$L20"]}] -16:null -19:["$","li","Operations",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Operations"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -1a:["$","li","Sustainability",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Sustainability"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -1b:["$","li","Technology",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Technology"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}] -1c:["$","section",null,{"className":"dm-blog-widget dm-blog-cta-card","children":[["$","h2",null,{"className":"dm-blog-cta-title","children":"Planning delivery routes?"}],["$","p",null,{"className":"dm-blog-cta-text","children":"Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time."}],["$","$L8",null,{"href":"/contact","className":"dm-blog-cta-btn","children":["Contact Us",["$","svg",null,{"width":"18","height":"18","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -1d:["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}] -1e:["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}] -1f:["$","$L9","miletruth-ai-10-stages-to-smarter-dispatch",{"delay":0.16,"duration":0.7,"yOffset":30,"children":["$","$L8",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L17",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"MileTruth"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}] -20:["$","div",null,{"className":"dm-blog-contact-cta","children":[["$","div",null,{"className":"dm-blog-contact-cta-content","children":[["$","span",null,{"className":"dm-blog-contact-eyebrow","children":"Let's talk logistics"}],["$","h2",null,{"className":"dm-blog-contact-title","children":"Ready to move smarter with Doormile?"}],["$","p",null,{"className":"dm-blog-contact-sub","children":"Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding."}]]}],["$","$L8",null,{"href":"/contact","className":"dm-blog-contact-btn","children":["Get in Touch",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] diff --git a/build/blog/building-a-greener-city-the-future-of-urban-logistics/__next.blog.$d$slug.txt b/build/blog/building-a-greener-city-the-future-of-urban-logistics/__next.blog.$d$slug.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/blog/building-a-greener-city-the-future-of-urban-logistics/__next.blog.$d$slug.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/building-a-greener-city-the-future-of-urban-logistics/__next.blog.txt b/build/blog/building-a-greener-city-the-future-of-urban-logistics/__next.blog.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/blog/building-a-greener-city-the-future-of-urban-logistics/__next.blog.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/fleet-reduction-without-compromising-delivery-volume.html b/build/blog/fleet-reduction-without-compromising-delivery-volume.html deleted file mode 100644 index 9af44cb..0000000 --- a/build/blog/fleet-reduction-without-compromising-delivery-volume.html +++ /dev/null @@ -1,1168 +0,0 @@ -Fleet Reduction Without Compromising Delivery Volume – Doormile

    Doormile

    Doormile logo
    Address
    Hyderabad

    5th Floor, Vision Ultima,
    Street No.3, Jayabheri Enclave,
    Gachibowli, Hyderabad,
    Telangana 500032.

    Coimbatore

    Mayflower Valencia,
    Near Nava India Bus Stop,
    Avinashi Road,
    Udayampalayam,
    Tamil Nadu 641037.

    Bengaluru

    C612, 6th Floor,
    Trifecta Starlight,
    ITPL Road,
    Garudacharapalya,
    Mahadevapura,
    Bangalore 560048,
    Karnataka, India.

    Contact Us

    Tel : +91 86886 97941

    Email

    care@doormile.com

    Fleet Management

    Fleet Reduction Without Compromising Delivery Volume

    Doormile Team2 min read

    Cutting vehicles usually means cutting capacity unless the removed kilometres were never needed. Better route planning turns wasted distance into operating headroom.

    In last-mile logistics, a missed SLA is rarely caused by one big failure. It usually comes from small delays adding up across a route. Fleet Reduction Without Compromising Delivery Volume looks at how delivery teams can spot those delays early and plan around them before vehicles leave the hub.

    Why this matters for fleet teams

    Every extra kilometre costs money. It uses fuel or charge, adds rider time, wears down vehicles, and increases the chance of a late delivery. When routes are built from fixed zones or old habits, those costs repeat every day.

    • Fewer vehicles needed for the same number of drops
    • Lower cost per drop through better stop sequencing
    • ETAs that match traffic, distance, and delivery windows
    • Less fuel or charge used per completed order

    From orders to dispatch

    A good dispatch plan starts with the basics: order locations, promised delivery windows, rider capacity, vehicle range, and known traffic trouble spots. MileTruth™ checks those inputs before dispatch so the team is not fixing avoidable mistakes on the road.

    Fleet Reduction Without Compromising Delivery Volume
    Fleet Management: route planning decisions made before dispatch.

    A route should be checked before the rider leaves, not explained after the customer calls.

    Doormile Operations

    Putting it into practice

    The best improvements usually start with simple measurements. Track distance per route, failed delivery windows, rider idle time, and orders moved between vehicles after dispatch. Those numbers show where the operation is leaking time.

    1. Benchmark today's distance, fleet size, and on-time rate.
    2. Include vehicle capacity, delivery windows, rider shifts, and battery charge.
    3. Check routes against traffic and customer commitments before dispatch.
    4. Compare the next dispatch cycle against the old plan.

    Better routing is not about pushing riders harder. It is about giving them a plan that already accounts for the real day ahead.

    \ No newline at end of file diff --git a/build/blog/fleet-reduction-without-compromising-delivery-volume.txt b/build/blog/fleet-reduction-without-compromising-delivery-volume.txt deleted file mode 100644 index e06d939..0000000 --- a/build/blog/fleet-reduction-without-compromising-delivery-volume.txt +++ /dev/null @@ -1,546 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -d:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -e:"$Sreact.suspense" -11:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -13:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -15:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","blog","fleet-reduction-without-compromising-delivery-volume"],"q":"","i":false,"f":[[["",{"children":["blog",{"children":[["slug","fleet-reduction-without-compromising-delivery-volume","d",null],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":["$Lc",[["$","script","script-0",{"src":"/_next/static/chunks/0yvxf3ok9gcp_.js","async":true,"nonce":"$undefined"}]],["$","$Ld",null,{"children":["$","$e",null,{"name":"Next.MetadataOutlet","children":"$@f"}]}]]}],{},null,false,null]},null,false,"$@10"]},null,false,"$@10"]},null,false,null],["$","$1","h",{"children":[null,["$","$L11",null,{"children":"$L12"}],["$","div",null,{"hidden":true,"children":["$","$L13",null,{"children":["$","$e",null,{"name":"Next.Metadata","children":"$L14"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$15",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -16:[] -10:"$W16" -:HL["/images/blog-post-pic-8.webp","image"] -17:T3d6f, - .dm-single-blog { - --dm-red: #c01227; - --dm-red-hover: #e31d32; - --dm-radius-card: 22px; - --dm-radius-img: 20px; - --dm-radius-badge: 8px; - --dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05); - --dm-border: 1px solid rgba(15, 23, 42, 0.09); - --dm-space-p: 24px; - --dm-space-h: 32px; - --dm-space-img: 32px; - --dm-space-quote: 40px; - --dm-sticky-top: 138px; - --dm-measure: min(1100px, 100%); - font-family: var(--font-manrope), sans-serif; - } - - /* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6 - (120/80/60px UPPERCASE) rules with !important on our own classes. */ - .dm-single-blog :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline, - specificity 0-1-1) so blog links keep our colors and never get underlined. */ - .dm-single-blog a { text-decoration: none !important; } - - /* Page banner: tall homepage-scale frame with only badge + title inside */ - /* Compound selector (specificity 20) + !important beats the global 800px - single-class height rules so the blog banner can use viewport heights. */ - .custom-standard-hero-card.dm-banner-card { - height: 90vh !important; - min-height: 85vh !important; - } - @media (max-width: 1024px) { - .custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; } - } - @media (max-width: 600px) { - .custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; } - } - - .dm-banner-inner { - position: relative; width: 100%; height: 100%; - display: flex; flex-direction: column; align-items: center; justify-content: center; - text-align: center; gap: clamp(22px, 2.6vw, 34px); - padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px); - } - - .dm-banner-category { - display: inline-block; background: var(--dm-red); color: #fff; - font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px; - padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45); - } - .dm-banner-title { - font-family: var(--font-manrope), sans-serif !important; - font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important; - line-height: 1.16 !important; letter-spacing: -1.2px !important; - color: #ffffff !important; margin: 0; max-width: 820px; - text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38); - } - @media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } } - @media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } } - - /* Content wrap begins immediately below the banner */ - /* Shared content container: the SAME max-width + horizontal padding is used - by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings, - images, Prev/Next, Related Articles and the CTA banner all align to one - grid with identical left/right edges. Keep both in sync. */ - .dm-blog-wrap { - max-width: 1280px; margin: 0 auto; - /* 20px mobile padding floor → 40px on desktop; matches the footer container. */ - padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0; - } - @media (max-width: 767px) { - .dm-blog-wrap { - padding-left: 16px; - padding-right: 16px; - } - } - - /* ── Article meta bar (directly under the hero) ── */ - .dm-meta-bar { - display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px; - padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px); - border-bottom: 1px solid rgba(15,23,42,0.10); - } - .dm-meta-breadcrumb ol { - list-style: none; display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b; - } - .dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; } - .dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; } - .dm-meta-sep { color: #cbd5e1; } - .dm-meta-current { - color: #0f172a; font-weight: 700; - max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - } - @media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } } - .dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; } - .dm-meta-item { - display: inline-flex; align-items: center; gap: 7px; - font-size: 13.5px; font-weight: 600; color: #475569; - } - .dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; } - .dm-meta-author { color: #0f172a; font-weight: 700; } - @media (max-width: 600px) { .dm-meta-bar { gap: 12px; } } - .dm-blog-layout { - display: grid; grid-template-columns: minmax(0,1fr) 320px; - /* Tighter gap gives the reading column more room next to the 320px sidebar. */ - gap: clamp(28px, 3vw, 56px); align-items: start; - } - @media (max-width: 1024px) { - .dm-blog-layout { grid-template-columns: 1fr; gap: 48px; } - /* Single-column (tablet/mobile): cap the reading column and centre it so the - article never sits left-aligned with a large empty right gutter. */ - .dm-blog-main { max-width: 900px; margin-inline: auto; } - } - .dm-blog-main { min-width: 0; } - - /* ── Intro lead ── */ - .dm-blog-intro { - max-width: var(--dm-measure); - font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500; - color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px; - border-left: 3px solid var(--dm-red); - } - - /* ── Article body ── */ - .dm-article-body { max-width: var(--dm-measure); } - .dm-article-p { - font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450; - margin: 0 0 var(--dm-space-p); - } - .dm-article-h2 { - font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important; - color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h); - text-wrap: balance; - } - /* Each article block is wrapped in its OWN ScrollReveal
    , so a bare - :first-child rule matched every heading (each is the only child of its - wrapper) and zeroed its top margin, collapsing the gap above every - section heading. Scope the reset to only the article body's first block. */ - .dm-article-body > :first-child :where(.dm-article-h2, .dm-article-h3), - .dm-article-body > .dm-article-h2:first-child, - .dm-article-body > .dm-article-h3:first-child { margin-top: 0; } - .dm-article-h3 { - font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important; - color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px; - text-wrap: balance; - } - @media (max-width: 600px) { - .dm-article-p { font-size: 16px !important; } - .dm-article-ul li, .dm-article-ol li { font-size: 15.5px; } - .dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; } - .dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; } - } - - .dm-article-ul, .dm-article-ol { - /* Top margin (was 0) separates the list from the paragraph above it; - matching bottom margin keeps it clear of the next heading/paragraph. - Slightly larger than --dm-space-p so the list reads as its own block. */ - margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px); - padding-left: 2px; list-style: none; - display: flex; flex-direction: column; gap: 15px; - } - /* Prefixed with .dm-article-body so these beat the theme's global - ".logico-front-end ul li:before" fontello-glyph bullet (specificity 0,1,3), - which otherwise replaces our clean red dot with a misaligned checkmark glyph - and adds its own 1.7em indent. */ - .dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li { - position: relative; padding-left: 34px; - font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450; - } - .dm-article-body .dm-article-ul li::before { - content: ""; position: absolute; left: 7px; top: 10px; - width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red); - /* kill any inherited fontello glyph from the global rule */ - font-size: 0; line-height: 0; - } - .dm-article-ol { counter-reset: dm-li; } - .dm-article-body .dm-article-ol li { counter-increment: dm-li; } - .dm-article-body .dm-article-ol li::before { - content: counter(dm-li); position: absolute; left: 0; top: 0; - width: 24px; height: 24px; border-radius: 7px; - background: rgba(192,18,39,0.10); color: var(--dm-red); - font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; - } - - /* ── Quote ── */ - .dm-article-quote { - position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px; - background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%); - border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0; - box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06); - } - .dm-article-quote::before { - content: "\201C"; position: absolute; left: 22px; top: 8px; - font-family: Georgia, "Times New Roman", serif; - font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700; - } - .dm-article-quote p { - font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600; - font-style: italic; color: #1e293b; margin: 0; - } - .dm-article-quote cite { - display: block; margin-top: 16px; font-size: 13px; font-weight: 700; - font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px; - } - @media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } } - - /* ── Images ── */ - .dm-article-figure { margin: var(--dm-space-img) 0; } - .dm-article-figure-img { - position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; - border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10); - } - .dm-article-figure figcaption { - margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500; - text-align: center; font-style: italic; - } - - /* ── Sidebar ── */ - .dm-blog-aside-wrap { position: relative; } - .dm-blog-sidebar { - display: flex; flex-direction: column; gap: 18px; - position: sticky; top: var(--dm-sticky-top); - } - @media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } } - - .dm-blog-widget { - background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card); - padding: 20px; box-shadow: var(--dm-shadow-card); - } - .dm-blog-widget-title { - font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important; - letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important; - margin: 0 0 15px; padding: 0 0 12px; - border-bottom: 1px solid rgba(15,23,42,0.08); - overflow: visible; white-space: normal; word-break: normal; - } - - /* Search */ - .dm-sr-only { - position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; - overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; - } - .dm-blog-search { position: relative; } - .dm-blog-search-form { position: relative; } - .dm-blog-search-input { - width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px; - padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a; - background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; - } - .dm-blog-search-input::placeholder { color: #9c9c9c; } - .dm-blog-search-input:focus { - outline: none; border-color: var(--dm-red); background: #fff; - box-shadow: 0 0 0 3px rgba(192,18,39,0.11); - } - .dm-blog-search-icon { - position: absolute; right: 14px; top: 50%; transform: translateY(-50%); - color: #94a3b8; pointer-events: none; display: flex; - } - .dm-blog-search-results { - position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0; - background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px; - box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden; - } - .dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; } - .dm-blog-search-result { - display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; - border-radius: 10px; text-decoration: none; transition: background .15s ease; - } - .dm-blog-search-result:hover { background: #f8fafc; } - .dm-blog-search-result-cat { - font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red); - } - .dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; } - .dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; } - - /* Recent posts */ - .dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; } - .dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; } - .dm-blog-recent-thumb { - position: relative; flex: 0 0 62px; width: 62px; height: 62px; - border-radius: 13px; overflow: hidden; background: #f1f5f9; - } - .dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; } - .dm-blog-recent-title { - font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); } - .dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; } - - /* Categories */ - .dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; } - .dm-blog-category-item { - display: flex; align-items: center; justify-content: space-between; gap: 10px; - padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important; - border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease; - } - .dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; } - .dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; } - .dm-blog-category-item > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .dm-blog-category-count { - flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9; - min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex; - align-items: center; justify-content: center; padding: 0 7px; - } - - /* CTA card */ - .dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; } - .dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; } - .dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; } - .dm-blog-cta-btn { - display: inline-flex; align-items: center; gap: 8px; - background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700; - padding: 12px 22px; border-radius: 12px; text-decoration: none; - transition: background .2s ease, transform .2s ease; - } - .dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } -c:["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"headline\":\"Fleet Reduction Without Compromising Delivery Volume\",\"description\":\"Handling the same order volume with fewer vehicles starts by removing avoidable kilometres and overlapping routes.\",\"image\":[\"https://www.doormile.com/images/blog-post-pic-8.webp\"],\"datePublished\":\"2025-07-24T00:00:00.000Z\",\"dateModified\":\"2025-07-24T00:00:00.000Z\",\"author\":{\"@type\":\"Organization\",\"name\":\"Doormile Team\",\"url\":\"https://www.doormile.com\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Doormile\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.doormile.com/images/cropped-image-2.png\"}},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.doormile.com/blog/fleet-reduction-without-compromising-delivery-volume\"},\"articleSection\":\"Fleet Management\"}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://www.doormile.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https://www.doormile.com/blog\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Fleet Reduction Without Compromising Delivery Volume\",\"item\":\"https://www.doormile.com/blog/fleet-reduction-without-compromising-delivery-volume\"}]}"}}],["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":[["$","article",null,{"className":"dm-single-blog","children":[["$","link",null,{"rel":"preload","as":"image","href":"/images/blog-post-pic-8.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$17"}}],"$L18","$L19"]}],"$L1a"]}]}]]}] -1b:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],""] -1c:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"ScrollReveal"] -18:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card dm-banner-card","style":{"backgroundImage":"url(/images/blog-post-pic-8.webp)","--hero-overlay":"linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)"},"children":["$","div",null,{"className":"e-con-inner dm-banner-inner","children":[["$","span",null,{"className":"dm-banner-category","children":"Fleet Management"}],["$","h1",null,{"className":"dm-banner-title","children":"Fleet Reduction Without Compromising Delivery Volume"}]]}]}]}] -19:["$","div",null,{"className":"dm-blog-wrap","children":[["$","div",null,{"className":"dm-meta-bar","children":[["$","nav",null,{"className":"dm-meta-breadcrumb","aria-label":"Breadcrumb","children":["$","ol",null,{"children":[["$","li",null,{"children":["$","$L1b",null,{"href":"/","children":"Home"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"children":["$","$L1b",null,{"href":"/blog","children":"Blog"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"aria-current":"page","className":"dm-meta-current","children":"Fleet Reduction Without Compromising Delivery Volume"}]]}]}],["$","div",null,{"className":"dm-meta-items","children":[["$","span",null,{"className":"dm-meta-item dm-meta-author","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","path",null,{"d":"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}],["$","circle",null,{"cx":"12","cy":"7","r":"4"}]]}],"Doormile Team"]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"2"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}]]}],["$","time",null,{"dateTime":"2025-07-24","children":"Jul 24, 2025"}]]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","circle",null,{"cx":"12","cy":"12","r":"9"}],["$","polyline",null,{"points":"12 7 12 12 15 14"}]]}],2," min read"]}]]}]]}],["$","div",null,{"className":"dm-blog-layout","children":[["$","div",null,{"className":"dm-blog-main","children":[["$","p",null,{"className":"dm-blog-intro","children":"Cutting vehicles usually means cutting capacity unless the removed kilometres were never needed. Better route planning turns wasted distance into operating headroom."}],["$","div",null,{"className":"dm-article-body","children":[["$","$L1c","0",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"In last-mile logistics, a missed SLA is rarely caused by one big failure. It usually comes from small delays adding up across a route. Fleet Reduction Without Compromising Delivery Volume looks at how delivery teams can spot those delays early and plan around them before vehicles leave the hub."}]}],["$","$L1c","1",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Why this matters for fleet teams"}]}],["$","$L1c","2",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Every extra kilometre costs money. It uses fuel or charge, adds rider time, wears down vehicles, and increases the chance of a late delivery. When routes are built from fixed zones or old habits, those costs repeat every day."}]}],["$","$L1c","3",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"Fewer vehicles needed for the same number of drops"}],["$","li","1",{"children":"Lower cost per drop through better stop sequencing"}],["$","li","2",{"children":"ETAs that match traffic, distance, and delivery windows"}],["$","li","3",{"children":"Less fuel or charge used per completed order"}]]}]}],["$","$L1c","4",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"From orders to dispatch"}]}],["$","$L1c","5",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"A good dispatch plan starts with the basics: order locations, promised delivery windows, rider capacity, vehicle range, and known traffic trouble spots. MileTruth™ checks those inputs before dispatch so the team is not fixing avoidable mistakes on the road."}]}],["$","$L1c","6",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","figure",null,{"className":"dm-article-figure","children":["$L1d","$L1e"]}]}],"$L1f","$L20","$L21","$L22","$L23"]}]]}],"$L24"]}]]}] -25:T2021, - .dm-blog-footer { - font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32; - /* The global theme applies 72px top/bottom section padding — strip it so the - inner container is the single source of vertical rhythm (no double gap). */ - padding: 0 !important; - } - /* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */ - .dm-blog-footer :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline) */ - .dm-blog-footer a { text-decoration: none !important; } - /* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px - max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA - align to the exact same left/right edges as the article body above. - Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a - consistent ~64–72px section→section gap (no 120px+ voids). */ - .dm-blog-footer-inner { - max-width: 1280px; margin: 0 auto; - /* Compact vertical rhythm on an 8px system. Top padding sets the - article→Prev/Next gap (~24–32px); the inter-section gap sets the - Prev/Next→Related gap (~32–48px). No large arbitrary voids. */ - /* Minimal bottom padding — the global site footer already contributes its - own 20px top inset, so the CTA banner sits close to it without a void. */ - padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px); - display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px); - } - @media (max-width: 767px) { - .dm-blog-footer-inner { - padding-left: 16px; - padding-right: 16px; - } - } - - /* Prev / Next */ - .dm-prevnext { - display: grid; grid-template-columns: 1fr 1fr; gap: 20px; - /* Halved from 40px: tight divider→cards spacing without crowding. */ - padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08); - } - @media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } } - .dm-prevnext-placeholder { display: block; } - .dm-prevnext-card { - display: flex; gap: 16px; align-items: center; padding: 16px; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; - } - .dm-prevnext-card:hover { - transform: translateY(-4px); border-color: rgba(192,18,39,0.2); - box-shadow: 0 16px 34px rgba(192,18,39,0.10); - } - .dm-prevnext-thumb { - position: relative; flex: 0 0 80px; width: 80px; height: 80px; - border-radius: 16px; overflow: hidden; background: #f1f5f9; - } - .dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; } - .dm-prevnext-next { text-align: right; } - .dm-prevnext-next .dm-prevnext-text { align-items: flex-end; } - .dm-prevnext-label { - display: inline-flex; align-items: center; gap: 6px; - font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red); - } - .dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; } - .dm-prevnext-title { - font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); } - - /* Related */ - .dm-related-heading { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important; - line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px; - } - .dm-related-grid { - display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; - } - @media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } } - @media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } } - - .dm-related-card { - display: flex; flex-direction: column; height: 100%; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none; - transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease; - } - .dm-related-card:hover { - transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13); - border-color: rgba(192,18,39,0.2); - } - .dm-related-img { - position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9; - } - .dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-img img { transform: scale(1.05); } - .dm-related-badge { - position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff; - font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px; - padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25); - } - .dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; } - .dm-related-card-title { - font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important; - letter-spacing: -.2px !important; margin: 0 0 10px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-related-card:hover .dm-related-card-title { color: var(--dm-red); } - .dm-related-card-excerpt { - font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - } - .dm-related-readmore { - margin-top: auto; display: inline-flex; align-items: center; gap: 7px; - font-size: 12.5px; font-weight: 800; color: var(--dm-red); - text-transform: uppercase; letter-spacing: .6px; - } - .dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); } - - /* Contact CTA banner */ - .dm-blog-contact-cta { - display: flex; align-items: center; justify-content: space-between; gap: 32px; - flex-wrap: wrap; - background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%); - border-radius: 30px; padding: clamp(32px, 4vw, 56px); - position: relative; overflow: hidden; - } - .dm-blog-contact-cta::after { - content: ""; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px; - background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%); - pointer-events: none; - } - .dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; } - .dm-blog-contact-eyebrow { - display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase; - letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px; - } - .dm-blog-contact-title { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important; - letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance; - } - .dm-blog-contact-sub { - font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450; - } - .dm-blog-contact-btn { - position: relative; z-index: 1; flex-shrink: 0; - display: inline-flex; align-items: center; justify-content: center; gap: 10px; - background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700; - padding: 16px 32px; border-radius: 16px; text-decoration: none; - box-shadow: 0 10px 26px rgba(192,18,39,0.34); - transition: background .2s ease, transform .2s ease; - } - .dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } - @media (max-width: 720px) { - .dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; } - .dm-blog-contact-btn { width: 100%; } - } -1a:["$","section",null,{"className":"dm-blog-footer","aria-label":"More articles","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$25"}}],"$L26"]}] -27:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"Image"] -28:I[23096,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"default"] -1d:["$","span",null,{"className":"dm-article-figure-img","children":["$","$L27",null,{"src":"/images/blog-post-pic-8.webp","alt":"Fleet Reduction Without Compromising Delivery Volume","fill":true,"sizes":"(max-width: 768px) 100vw, 760px","style":{"objectFit":"cover"}}]}] -1e:["$","figcaption",null,{"children":"Fleet Management: route planning decisions made before dispatch."}] -1f:["$","$L1c","7",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","blockquote",null,{"className":"dm-article-quote","children":[["$","p",null,{"children":"A route should be checked before the rider leaves, not explained after the customer calls."}],["$","cite",null,{"children":"Doormile Operations"}]]}]}] -20:["$","$L1c","8",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Putting it into practice"}]}] -21:["$","$L1c","9",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The best improvements usually start with simple measurements. Track distance per route, failed delivery windows, rider idle time, and orders moved between vehicles after dispatch. Those numbers show where the operation is leaking time."}]}] -22:["$","$L1c","10",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ol",null,{"className":"dm-article-ol","children":[["$","li","0",{"children":"Benchmark today's distance, fleet size, and on-time rate."}],["$","li","1",{"children":"Include vehicle capacity, delivery windows, rider shifts, and battery charge."}],["$","li","2",{"children":"Check routes against traffic and customer commitments before dispatch."}],["$","li","3",{"children":"Compare the next dispatch cycle against the old plan."}]]}]}] -23:["$","$L1c","11",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Better routing is not about pushing riders harder. It is about giving them a plan that already accounts for the real day ahead."}]}] -24:["$","div",null,{"className":"dm-blog-aside-wrap","children":["$","aside",null,{"className":"dm-blog-sidebar","aria-label":"Blog sidebar","children":[["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Search"}],["$","$L28",null,{}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Recent Posts"}],["$","ul",null,{"className":"dm-blog-recent","children":[["$","li","how-ai-is-transforming-last-mile-ev-delivery",{"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","time",null,{"dateTime":"2025-10-02","className":"dm-blog-recent-date","children":"Oct 2, 2025"}]]}]]}]}],["$","li","42-less-distance-insights-from-our-hyderabad-hub",{"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","time",null,{"dateTime":"2025-09-18","className":"dm-blog-recent-date","children":"Sep 18, 2025"}]]}]]}]}],["$","li","miletruth-ai-10-stages-to-smarter-dispatch",{"children":["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","time",null,{"dateTime":"2025-09-05","className":"dm-blog-recent-date","children":"Sep 5, 2025"}]]}]]}]}],["$","li","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"children":["$","$L1b",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","time",null,{"dateTime":"2025-08-21","className":"dm-blog-recent-date","children":"Aug 21, 2025"}]]}]]}]}]]}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Categories"}],["$","ul",null,{"className":"dm-blog-categories","children":[["$","li","Case Study",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Case Study"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","EV Fleet",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"EV Fleet"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}],["$","li","Fleet Management",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Fleet Management"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","MileTruth",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"MileTruth"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],"$L29","$L2a","$L2b"]}]]}],"$L2c"]}]}] -26:["$","div",null,{"className":"dm-blog-footer-inner","children":[["$","nav",null,{"className":"dm-prevnext","aria-label":"Article navigation","children":[["$","$L1b",null,{"href":"/blog/why-mathematical-precision-beats-heuristics-in-routing","className":"dm-prevnext-card dm-prevnext-prev","children":[["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-14.webp","alt":"Why Mathematical Precision Beats Heuristics in Routing","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"19","y1":"12","x2":"5","y2":"12"}],["$","polyline",null,{"points":"12 19 5 12 12 5"}]]}],"Previous"]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Technology"}],["$","span",null,{"className":"dm-prevnext-title","children":"Why Mathematical Precision Beats Heuristics in Routing"}]]}]]}],["$","$L1b",null,{"href":"/blog/building-a-greener-city-the-future-of-urban-logistics","className":"dm-prevnext-card dm-prevnext-next","children":[["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":["Next",["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Sustainability"}],["$","span",null,{"className":"dm-prevnext-title","children":"Building a Greener City: The Future of Urban Logistics"}]]}],["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-6.webp","alt":"Building a Greener City: The Future of Urban Logistics","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}]]}]]}],["$","div",null,{"className":"dm-related","children":[["$","h2",null,{"className":"dm-related-heading","children":"Related Articles"}],["$","div",null,{"className":"dm-related-grid","children":[["$","$L1c","how-ai-is-transforming-last-mile-ev-delivery",{"delay":0,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Technology"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L1c","42-less-distance-insights-from-our-hyderabad-hub",{"delay":0.08,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Case Study"}]]}],["$","div",null,{"className":"dm-related-body","children":["$L2d","$L2e","$L2f"]}]]}]}],"$L30"]}]]}],"$L31"]}] -29:["$","li","Operations",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Operations"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2a:["$","li","Sustainability",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Sustainability"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2b:["$","li","Technology",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Technology"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}] -2c:["$","section",null,{"className":"dm-blog-widget dm-blog-cta-card","children":[["$","h2",null,{"className":"dm-blog-cta-title","children":"Planning delivery routes?"}],["$","p",null,{"className":"dm-blog-cta-text","children":"Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time."}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-cta-btn","children":["Contact Us",["$","svg",null,{"width":"18","height":"18","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -2d:["$","h3",null,{"className":"dm-related-card-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}] -2e:["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}] -2f:["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}] -30:["$","$L1c","miletruth-ai-10-stages-to-smarter-dispatch",{"delay":0.16,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"MileTruth"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}] -31:["$","div",null,{"className":"dm-blog-contact-cta","children":[["$","div",null,{"className":"dm-blog-contact-cta-content","children":[["$","span",null,{"className":"dm-blog-contact-eyebrow","children":"Let's talk logistics"}],["$","h2",null,{"className":"dm-blog-contact-title","children":"Ready to move smarter with Doormile?"}],["$","p",null,{"className":"dm-blog-contact-sub","children":"Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding."}]]}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-contact-btn","children":["Get in Touch",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -12:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -32:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -f:null -14:[["$","title","0",{"children":"Fleet Reduction Without Compromising Delivery Volume – Doormile"}],["$","meta","1",{"name":"description","content":"Handling the same order volume with fewer vehicles starts by removing avoidable kilometres and overlapping routes."}],["$","meta","2",{"name":"author","content":"Doormile Team"}],["$","meta","3",{"name":"keywords","content":"Fleet Management,last-mile logistics,EV fleet,MileTruth,route optimisation"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","link","5",{"rel":"canonical","href":"https://www.doormile.com/blog/fleet-reduction-without-compromising-delivery-volume"}],["$","meta","6",{"property":"og:title","content":"Fleet Reduction Without Compromising Delivery Volume"}],["$","meta","7",{"property":"og:description","content":"Handling the same order volume with fewer vehicles starts by removing avoidable kilometres and overlapping routes."}],["$","meta","8",{"property":"og:url","content":"https://www.doormile.com/blog/fleet-reduction-without-compromising-delivery-volume"}],["$","meta","9",{"property":"og:site_name","content":"Doormile"}],["$","meta","10",{"property":"og:image","content":"https://www.doormile.com/images/blog-post-pic-8.webp"}],["$","meta","11",{"property":"og:image:alt","content":"Fleet Reduction Without Compromising Delivery Volume"}],["$","meta","12",{"property":"og:type","content":"article"}],["$","meta","13",{"property":"article:published_time","content":"2025-07-24T00:00:00.000Z"}],["$","meta","14",{"property":"article:author","content":"Doormile Team"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"Fleet Reduction Without Compromising Delivery Volume"}],["$","meta","17",{"name":"twitter:description","content":"Handling the same order volume with fewer vehicles starts by removing avoidable kilometres and overlapping routes."}],["$","meta","18",{"name":"twitter:image","content":"https://www.doormile.com/images/blog-post-pic-8.webp"}],["$","link","19",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","21",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","22",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L32","23",{}]] diff --git a/build/blog/fleet-reduction-without-compromising-delivery-volume/__next._full.txt b/build/blog/fleet-reduction-without-compromising-delivery-volume/__next._full.txt deleted file mode 100644 index e06d939..0000000 --- a/build/blog/fleet-reduction-without-compromising-delivery-volume/__next._full.txt +++ /dev/null @@ -1,546 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -d:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -e:"$Sreact.suspense" -11:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -13:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -15:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","blog","fleet-reduction-without-compromising-delivery-volume"],"q":"","i":false,"f":[[["",{"children":["blog",{"children":[["slug","fleet-reduction-without-compromising-delivery-volume","d",null],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":["$Lc",[["$","script","script-0",{"src":"/_next/static/chunks/0yvxf3ok9gcp_.js","async":true,"nonce":"$undefined"}]],["$","$Ld",null,{"children":["$","$e",null,{"name":"Next.MetadataOutlet","children":"$@f"}]}]]}],{},null,false,null]},null,false,"$@10"]},null,false,"$@10"]},null,false,null],["$","$1","h",{"children":[null,["$","$L11",null,{"children":"$L12"}],["$","div",null,{"hidden":true,"children":["$","$L13",null,{"children":["$","$e",null,{"name":"Next.Metadata","children":"$L14"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$15",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -16:[] -10:"$W16" -:HL["/images/blog-post-pic-8.webp","image"] -17:T3d6f, - .dm-single-blog { - --dm-red: #c01227; - --dm-red-hover: #e31d32; - --dm-radius-card: 22px; - --dm-radius-img: 20px; - --dm-radius-badge: 8px; - --dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05); - --dm-border: 1px solid rgba(15, 23, 42, 0.09); - --dm-space-p: 24px; - --dm-space-h: 32px; - --dm-space-img: 32px; - --dm-space-quote: 40px; - --dm-sticky-top: 138px; - --dm-measure: min(1100px, 100%); - font-family: var(--font-manrope), sans-serif; - } - - /* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6 - (120/80/60px UPPERCASE) rules with !important on our own classes. */ - .dm-single-blog :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline, - specificity 0-1-1) so blog links keep our colors and never get underlined. */ - .dm-single-blog a { text-decoration: none !important; } - - /* Page banner: tall homepage-scale frame with only badge + title inside */ - /* Compound selector (specificity 20) + !important beats the global 800px - single-class height rules so the blog banner can use viewport heights. */ - .custom-standard-hero-card.dm-banner-card { - height: 90vh !important; - min-height: 85vh !important; - } - @media (max-width: 1024px) { - .custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; } - } - @media (max-width: 600px) { - .custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; } - } - - .dm-banner-inner { - position: relative; width: 100%; height: 100%; - display: flex; flex-direction: column; align-items: center; justify-content: center; - text-align: center; gap: clamp(22px, 2.6vw, 34px); - padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px); - } - - .dm-banner-category { - display: inline-block; background: var(--dm-red); color: #fff; - font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px; - padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45); - } - .dm-banner-title { - font-family: var(--font-manrope), sans-serif !important; - font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important; - line-height: 1.16 !important; letter-spacing: -1.2px !important; - color: #ffffff !important; margin: 0; max-width: 820px; - text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38); - } - @media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } } - @media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } } - - /* Content wrap begins immediately below the banner */ - /* Shared content container: the SAME max-width + horizontal padding is used - by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings, - images, Prev/Next, Related Articles and the CTA banner all align to one - grid with identical left/right edges. Keep both in sync. */ - .dm-blog-wrap { - max-width: 1280px; margin: 0 auto; - /* 20px mobile padding floor → 40px on desktop; matches the footer container. */ - padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0; - } - @media (max-width: 767px) { - .dm-blog-wrap { - padding-left: 16px; - padding-right: 16px; - } - } - - /* ── Article meta bar (directly under the hero) ── */ - .dm-meta-bar { - display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px; - padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px); - border-bottom: 1px solid rgba(15,23,42,0.10); - } - .dm-meta-breadcrumb ol { - list-style: none; display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b; - } - .dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; } - .dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; } - .dm-meta-sep { color: #cbd5e1; } - .dm-meta-current { - color: #0f172a; font-weight: 700; - max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - } - @media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } } - .dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; } - .dm-meta-item { - display: inline-flex; align-items: center; gap: 7px; - font-size: 13.5px; font-weight: 600; color: #475569; - } - .dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; } - .dm-meta-author { color: #0f172a; font-weight: 700; } - @media (max-width: 600px) { .dm-meta-bar { gap: 12px; } } - .dm-blog-layout { - display: grid; grid-template-columns: minmax(0,1fr) 320px; - /* Tighter gap gives the reading column more room next to the 320px sidebar. */ - gap: clamp(28px, 3vw, 56px); align-items: start; - } - @media (max-width: 1024px) { - .dm-blog-layout { grid-template-columns: 1fr; gap: 48px; } - /* Single-column (tablet/mobile): cap the reading column and centre it so the - article never sits left-aligned with a large empty right gutter. */ - .dm-blog-main { max-width: 900px; margin-inline: auto; } - } - .dm-blog-main { min-width: 0; } - - /* ── Intro lead ── */ - .dm-blog-intro { - max-width: var(--dm-measure); - font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500; - color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px; - border-left: 3px solid var(--dm-red); - } - - /* ── Article body ── */ - .dm-article-body { max-width: var(--dm-measure); } - .dm-article-p { - font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450; - margin: 0 0 var(--dm-space-p); - } - .dm-article-h2 { - font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important; - color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h); - text-wrap: balance; - } - /* Each article block is wrapped in its OWN ScrollReveal
    , so a bare - :first-child rule matched every heading (each is the only child of its - wrapper) and zeroed its top margin, collapsing the gap above every - section heading. Scope the reset to only the article body's first block. */ - .dm-article-body > :first-child :where(.dm-article-h2, .dm-article-h3), - .dm-article-body > .dm-article-h2:first-child, - .dm-article-body > .dm-article-h3:first-child { margin-top: 0; } - .dm-article-h3 { - font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important; - color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px; - text-wrap: balance; - } - @media (max-width: 600px) { - .dm-article-p { font-size: 16px !important; } - .dm-article-ul li, .dm-article-ol li { font-size: 15.5px; } - .dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; } - .dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; } - } - - .dm-article-ul, .dm-article-ol { - /* Top margin (was 0) separates the list from the paragraph above it; - matching bottom margin keeps it clear of the next heading/paragraph. - Slightly larger than --dm-space-p so the list reads as its own block. */ - margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px); - padding-left: 2px; list-style: none; - display: flex; flex-direction: column; gap: 15px; - } - /* Prefixed with .dm-article-body so these beat the theme's global - ".logico-front-end ul li:before" fontello-glyph bullet (specificity 0,1,3), - which otherwise replaces our clean red dot with a misaligned checkmark glyph - and adds its own 1.7em indent. */ - .dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li { - position: relative; padding-left: 34px; - font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450; - } - .dm-article-body .dm-article-ul li::before { - content: ""; position: absolute; left: 7px; top: 10px; - width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red); - /* kill any inherited fontello glyph from the global rule */ - font-size: 0; line-height: 0; - } - .dm-article-ol { counter-reset: dm-li; } - .dm-article-body .dm-article-ol li { counter-increment: dm-li; } - .dm-article-body .dm-article-ol li::before { - content: counter(dm-li); position: absolute; left: 0; top: 0; - width: 24px; height: 24px; border-radius: 7px; - background: rgba(192,18,39,0.10); color: var(--dm-red); - font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; - } - - /* ── Quote ── */ - .dm-article-quote { - position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px; - background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%); - border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0; - box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06); - } - .dm-article-quote::before { - content: "\201C"; position: absolute; left: 22px; top: 8px; - font-family: Georgia, "Times New Roman", serif; - font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700; - } - .dm-article-quote p { - font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600; - font-style: italic; color: #1e293b; margin: 0; - } - .dm-article-quote cite { - display: block; margin-top: 16px; font-size: 13px; font-weight: 700; - font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px; - } - @media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } } - - /* ── Images ── */ - .dm-article-figure { margin: var(--dm-space-img) 0; } - .dm-article-figure-img { - position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; - border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10); - } - .dm-article-figure figcaption { - margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500; - text-align: center; font-style: italic; - } - - /* ── Sidebar ── */ - .dm-blog-aside-wrap { position: relative; } - .dm-blog-sidebar { - display: flex; flex-direction: column; gap: 18px; - position: sticky; top: var(--dm-sticky-top); - } - @media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } } - - .dm-blog-widget { - background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card); - padding: 20px; box-shadow: var(--dm-shadow-card); - } - .dm-blog-widget-title { - font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important; - letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important; - margin: 0 0 15px; padding: 0 0 12px; - border-bottom: 1px solid rgba(15,23,42,0.08); - overflow: visible; white-space: normal; word-break: normal; - } - - /* Search */ - .dm-sr-only { - position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; - overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; - } - .dm-blog-search { position: relative; } - .dm-blog-search-form { position: relative; } - .dm-blog-search-input { - width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px; - padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a; - background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; - } - .dm-blog-search-input::placeholder { color: #9c9c9c; } - .dm-blog-search-input:focus { - outline: none; border-color: var(--dm-red); background: #fff; - box-shadow: 0 0 0 3px rgba(192,18,39,0.11); - } - .dm-blog-search-icon { - position: absolute; right: 14px; top: 50%; transform: translateY(-50%); - color: #94a3b8; pointer-events: none; display: flex; - } - .dm-blog-search-results { - position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0; - background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px; - box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden; - } - .dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; } - .dm-blog-search-result { - display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; - border-radius: 10px; text-decoration: none; transition: background .15s ease; - } - .dm-blog-search-result:hover { background: #f8fafc; } - .dm-blog-search-result-cat { - font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red); - } - .dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; } - .dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; } - - /* Recent posts */ - .dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; } - .dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; } - .dm-blog-recent-thumb { - position: relative; flex: 0 0 62px; width: 62px; height: 62px; - border-radius: 13px; overflow: hidden; background: #f1f5f9; - } - .dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; } - .dm-blog-recent-title { - font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); } - .dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; } - - /* Categories */ - .dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; } - .dm-blog-category-item { - display: flex; align-items: center; justify-content: space-between; gap: 10px; - padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important; - border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease; - } - .dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; } - .dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; } - .dm-blog-category-item > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .dm-blog-category-count { - flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9; - min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex; - align-items: center; justify-content: center; padding: 0 7px; - } - - /* CTA card */ - .dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; } - .dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; } - .dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; } - .dm-blog-cta-btn { - display: inline-flex; align-items: center; gap: 8px; - background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700; - padding: 12px 22px; border-radius: 12px; text-decoration: none; - transition: background .2s ease, transform .2s ease; - } - .dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } -c:["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"headline\":\"Fleet Reduction Without Compromising Delivery Volume\",\"description\":\"Handling the same order volume with fewer vehicles starts by removing avoidable kilometres and overlapping routes.\",\"image\":[\"https://www.doormile.com/images/blog-post-pic-8.webp\"],\"datePublished\":\"2025-07-24T00:00:00.000Z\",\"dateModified\":\"2025-07-24T00:00:00.000Z\",\"author\":{\"@type\":\"Organization\",\"name\":\"Doormile Team\",\"url\":\"https://www.doormile.com\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Doormile\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.doormile.com/images/cropped-image-2.png\"}},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.doormile.com/blog/fleet-reduction-without-compromising-delivery-volume\"},\"articleSection\":\"Fleet Management\"}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://www.doormile.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https://www.doormile.com/blog\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Fleet Reduction Without Compromising Delivery Volume\",\"item\":\"https://www.doormile.com/blog/fleet-reduction-without-compromising-delivery-volume\"}]}"}}],["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":[["$","article",null,{"className":"dm-single-blog","children":[["$","link",null,{"rel":"preload","as":"image","href":"/images/blog-post-pic-8.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$17"}}],"$L18","$L19"]}],"$L1a"]}]}]]}] -1b:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],""] -1c:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"ScrollReveal"] -18:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card dm-banner-card","style":{"backgroundImage":"url(/images/blog-post-pic-8.webp)","--hero-overlay":"linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)"},"children":["$","div",null,{"className":"e-con-inner dm-banner-inner","children":[["$","span",null,{"className":"dm-banner-category","children":"Fleet Management"}],["$","h1",null,{"className":"dm-banner-title","children":"Fleet Reduction Without Compromising Delivery Volume"}]]}]}]}] -19:["$","div",null,{"className":"dm-blog-wrap","children":[["$","div",null,{"className":"dm-meta-bar","children":[["$","nav",null,{"className":"dm-meta-breadcrumb","aria-label":"Breadcrumb","children":["$","ol",null,{"children":[["$","li",null,{"children":["$","$L1b",null,{"href":"/","children":"Home"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"children":["$","$L1b",null,{"href":"/blog","children":"Blog"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"aria-current":"page","className":"dm-meta-current","children":"Fleet Reduction Without Compromising Delivery Volume"}]]}]}],["$","div",null,{"className":"dm-meta-items","children":[["$","span",null,{"className":"dm-meta-item dm-meta-author","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","path",null,{"d":"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}],["$","circle",null,{"cx":"12","cy":"7","r":"4"}]]}],"Doormile Team"]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"2"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}]]}],["$","time",null,{"dateTime":"2025-07-24","children":"Jul 24, 2025"}]]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","circle",null,{"cx":"12","cy":"12","r":"9"}],["$","polyline",null,{"points":"12 7 12 12 15 14"}]]}],2," min read"]}]]}]]}],["$","div",null,{"className":"dm-blog-layout","children":[["$","div",null,{"className":"dm-blog-main","children":[["$","p",null,{"className":"dm-blog-intro","children":"Cutting vehicles usually means cutting capacity unless the removed kilometres were never needed. Better route planning turns wasted distance into operating headroom."}],["$","div",null,{"className":"dm-article-body","children":[["$","$L1c","0",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"In last-mile logistics, a missed SLA is rarely caused by one big failure. It usually comes from small delays adding up across a route. Fleet Reduction Without Compromising Delivery Volume looks at how delivery teams can spot those delays early and plan around them before vehicles leave the hub."}]}],["$","$L1c","1",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Why this matters for fleet teams"}]}],["$","$L1c","2",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Every extra kilometre costs money. It uses fuel or charge, adds rider time, wears down vehicles, and increases the chance of a late delivery. When routes are built from fixed zones or old habits, those costs repeat every day."}]}],["$","$L1c","3",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"Fewer vehicles needed for the same number of drops"}],["$","li","1",{"children":"Lower cost per drop through better stop sequencing"}],["$","li","2",{"children":"ETAs that match traffic, distance, and delivery windows"}],["$","li","3",{"children":"Less fuel or charge used per completed order"}]]}]}],["$","$L1c","4",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"From orders to dispatch"}]}],["$","$L1c","5",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"A good dispatch plan starts with the basics: order locations, promised delivery windows, rider capacity, vehicle range, and known traffic trouble spots. MileTruth™ checks those inputs before dispatch so the team is not fixing avoidable mistakes on the road."}]}],["$","$L1c","6",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","figure",null,{"className":"dm-article-figure","children":["$L1d","$L1e"]}]}],"$L1f","$L20","$L21","$L22","$L23"]}]]}],"$L24"]}]]}] -25:T2021, - .dm-blog-footer { - font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32; - /* The global theme applies 72px top/bottom section padding — strip it so the - inner container is the single source of vertical rhythm (no double gap). */ - padding: 0 !important; - } - /* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */ - .dm-blog-footer :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline) */ - .dm-blog-footer a { text-decoration: none !important; } - /* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px - max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA - align to the exact same left/right edges as the article body above. - Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a - consistent ~64–72px section→section gap (no 120px+ voids). */ - .dm-blog-footer-inner { - max-width: 1280px; margin: 0 auto; - /* Compact vertical rhythm on an 8px system. Top padding sets the - article→Prev/Next gap (~24–32px); the inter-section gap sets the - Prev/Next→Related gap (~32–48px). No large arbitrary voids. */ - /* Minimal bottom padding — the global site footer already contributes its - own 20px top inset, so the CTA banner sits close to it without a void. */ - padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px); - display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px); - } - @media (max-width: 767px) { - .dm-blog-footer-inner { - padding-left: 16px; - padding-right: 16px; - } - } - - /* Prev / Next */ - .dm-prevnext { - display: grid; grid-template-columns: 1fr 1fr; gap: 20px; - /* Halved from 40px: tight divider→cards spacing without crowding. */ - padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08); - } - @media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } } - .dm-prevnext-placeholder { display: block; } - .dm-prevnext-card { - display: flex; gap: 16px; align-items: center; padding: 16px; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; - } - .dm-prevnext-card:hover { - transform: translateY(-4px); border-color: rgba(192,18,39,0.2); - box-shadow: 0 16px 34px rgba(192,18,39,0.10); - } - .dm-prevnext-thumb { - position: relative; flex: 0 0 80px; width: 80px; height: 80px; - border-radius: 16px; overflow: hidden; background: #f1f5f9; - } - .dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; } - .dm-prevnext-next { text-align: right; } - .dm-prevnext-next .dm-prevnext-text { align-items: flex-end; } - .dm-prevnext-label { - display: inline-flex; align-items: center; gap: 6px; - font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red); - } - .dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; } - .dm-prevnext-title { - font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); } - - /* Related */ - .dm-related-heading { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important; - line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px; - } - .dm-related-grid { - display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; - } - @media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } } - @media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } } - - .dm-related-card { - display: flex; flex-direction: column; height: 100%; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none; - transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease; - } - .dm-related-card:hover { - transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13); - border-color: rgba(192,18,39,0.2); - } - .dm-related-img { - position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9; - } - .dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-img img { transform: scale(1.05); } - .dm-related-badge { - position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff; - font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px; - padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25); - } - .dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; } - .dm-related-card-title { - font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important; - letter-spacing: -.2px !important; margin: 0 0 10px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-related-card:hover .dm-related-card-title { color: var(--dm-red); } - .dm-related-card-excerpt { - font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - } - .dm-related-readmore { - margin-top: auto; display: inline-flex; align-items: center; gap: 7px; - font-size: 12.5px; font-weight: 800; color: var(--dm-red); - text-transform: uppercase; letter-spacing: .6px; - } - .dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); } - - /* Contact CTA banner */ - .dm-blog-contact-cta { - display: flex; align-items: center; justify-content: space-between; gap: 32px; - flex-wrap: wrap; - background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%); - border-radius: 30px; padding: clamp(32px, 4vw, 56px); - position: relative; overflow: hidden; - } - .dm-blog-contact-cta::after { - content: ""; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px; - background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%); - pointer-events: none; - } - .dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; } - .dm-blog-contact-eyebrow { - display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase; - letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px; - } - .dm-blog-contact-title { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important; - letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance; - } - .dm-blog-contact-sub { - font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450; - } - .dm-blog-contact-btn { - position: relative; z-index: 1; flex-shrink: 0; - display: inline-flex; align-items: center; justify-content: center; gap: 10px; - background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700; - padding: 16px 32px; border-radius: 16px; text-decoration: none; - box-shadow: 0 10px 26px rgba(192,18,39,0.34); - transition: background .2s ease, transform .2s ease; - } - .dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } - @media (max-width: 720px) { - .dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; } - .dm-blog-contact-btn { width: 100%; } - } -1a:["$","section",null,{"className":"dm-blog-footer","aria-label":"More articles","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$25"}}],"$L26"]}] -27:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"Image"] -28:I[23096,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"default"] -1d:["$","span",null,{"className":"dm-article-figure-img","children":["$","$L27",null,{"src":"/images/blog-post-pic-8.webp","alt":"Fleet Reduction Without Compromising Delivery Volume","fill":true,"sizes":"(max-width: 768px) 100vw, 760px","style":{"objectFit":"cover"}}]}] -1e:["$","figcaption",null,{"children":"Fleet Management: route planning decisions made before dispatch."}] -1f:["$","$L1c","7",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","blockquote",null,{"className":"dm-article-quote","children":[["$","p",null,{"children":"A route should be checked before the rider leaves, not explained after the customer calls."}],["$","cite",null,{"children":"Doormile Operations"}]]}]}] -20:["$","$L1c","8",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Putting it into practice"}]}] -21:["$","$L1c","9",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The best improvements usually start with simple measurements. Track distance per route, failed delivery windows, rider idle time, and orders moved between vehicles after dispatch. Those numbers show where the operation is leaking time."}]}] -22:["$","$L1c","10",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ol",null,{"className":"dm-article-ol","children":[["$","li","0",{"children":"Benchmark today's distance, fleet size, and on-time rate."}],["$","li","1",{"children":"Include vehicle capacity, delivery windows, rider shifts, and battery charge."}],["$","li","2",{"children":"Check routes against traffic and customer commitments before dispatch."}],["$","li","3",{"children":"Compare the next dispatch cycle against the old plan."}]]}]}] -23:["$","$L1c","11",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Better routing is not about pushing riders harder. It is about giving them a plan that already accounts for the real day ahead."}]}] -24:["$","div",null,{"className":"dm-blog-aside-wrap","children":["$","aside",null,{"className":"dm-blog-sidebar","aria-label":"Blog sidebar","children":[["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Search"}],["$","$L28",null,{}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Recent Posts"}],["$","ul",null,{"className":"dm-blog-recent","children":[["$","li","how-ai-is-transforming-last-mile-ev-delivery",{"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","time",null,{"dateTime":"2025-10-02","className":"dm-blog-recent-date","children":"Oct 2, 2025"}]]}]]}]}],["$","li","42-less-distance-insights-from-our-hyderabad-hub",{"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","time",null,{"dateTime":"2025-09-18","className":"dm-blog-recent-date","children":"Sep 18, 2025"}]]}]]}]}],["$","li","miletruth-ai-10-stages-to-smarter-dispatch",{"children":["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","time",null,{"dateTime":"2025-09-05","className":"dm-blog-recent-date","children":"Sep 5, 2025"}]]}]]}]}],["$","li","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"children":["$","$L1b",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","time",null,{"dateTime":"2025-08-21","className":"dm-blog-recent-date","children":"Aug 21, 2025"}]]}]]}]}]]}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Categories"}],["$","ul",null,{"className":"dm-blog-categories","children":[["$","li","Case Study",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Case Study"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","EV Fleet",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"EV Fleet"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}],["$","li","Fleet Management",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Fleet Management"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","MileTruth",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"MileTruth"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],"$L29","$L2a","$L2b"]}]]}],"$L2c"]}]}] -26:["$","div",null,{"className":"dm-blog-footer-inner","children":[["$","nav",null,{"className":"dm-prevnext","aria-label":"Article navigation","children":[["$","$L1b",null,{"href":"/blog/why-mathematical-precision-beats-heuristics-in-routing","className":"dm-prevnext-card dm-prevnext-prev","children":[["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-14.webp","alt":"Why Mathematical Precision Beats Heuristics in Routing","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"19","y1":"12","x2":"5","y2":"12"}],["$","polyline",null,{"points":"12 19 5 12 12 5"}]]}],"Previous"]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Technology"}],["$","span",null,{"className":"dm-prevnext-title","children":"Why Mathematical Precision Beats Heuristics in Routing"}]]}]]}],["$","$L1b",null,{"href":"/blog/building-a-greener-city-the-future-of-urban-logistics","className":"dm-prevnext-card dm-prevnext-next","children":[["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":["Next",["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Sustainability"}],["$","span",null,{"className":"dm-prevnext-title","children":"Building a Greener City: The Future of Urban Logistics"}]]}],["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-6.webp","alt":"Building a Greener City: The Future of Urban Logistics","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}]]}]]}],["$","div",null,{"className":"dm-related","children":[["$","h2",null,{"className":"dm-related-heading","children":"Related Articles"}],["$","div",null,{"className":"dm-related-grid","children":[["$","$L1c","how-ai-is-transforming-last-mile-ev-delivery",{"delay":0,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Technology"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L1c","42-less-distance-insights-from-our-hyderabad-hub",{"delay":0.08,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Case Study"}]]}],["$","div",null,{"className":"dm-related-body","children":["$L2d","$L2e","$L2f"]}]]}]}],"$L30"]}]]}],"$L31"]}] -29:["$","li","Operations",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Operations"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2a:["$","li","Sustainability",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Sustainability"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2b:["$","li","Technology",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Technology"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}] -2c:["$","section",null,{"className":"dm-blog-widget dm-blog-cta-card","children":[["$","h2",null,{"className":"dm-blog-cta-title","children":"Planning delivery routes?"}],["$","p",null,{"className":"dm-blog-cta-text","children":"Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time."}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-cta-btn","children":["Contact Us",["$","svg",null,{"width":"18","height":"18","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -2d:["$","h3",null,{"className":"dm-related-card-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}] -2e:["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}] -2f:["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}] -30:["$","$L1c","miletruth-ai-10-stages-to-smarter-dispatch",{"delay":0.16,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"MileTruth"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}] -31:["$","div",null,{"className":"dm-blog-contact-cta","children":[["$","div",null,{"className":"dm-blog-contact-cta-content","children":[["$","span",null,{"className":"dm-blog-contact-eyebrow","children":"Let's talk logistics"}],["$","h2",null,{"className":"dm-blog-contact-title","children":"Ready to move smarter with Doormile?"}],["$","p",null,{"className":"dm-blog-contact-sub","children":"Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding."}]]}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-contact-btn","children":["Get in Touch",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -12:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -32:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -f:null -14:[["$","title","0",{"children":"Fleet Reduction Without Compromising Delivery Volume – Doormile"}],["$","meta","1",{"name":"description","content":"Handling the same order volume with fewer vehicles starts by removing avoidable kilometres and overlapping routes."}],["$","meta","2",{"name":"author","content":"Doormile Team"}],["$","meta","3",{"name":"keywords","content":"Fleet Management,last-mile logistics,EV fleet,MileTruth,route optimisation"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","link","5",{"rel":"canonical","href":"https://www.doormile.com/blog/fleet-reduction-without-compromising-delivery-volume"}],["$","meta","6",{"property":"og:title","content":"Fleet Reduction Without Compromising Delivery Volume"}],["$","meta","7",{"property":"og:description","content":"Handling the same order volume with fewer vehicles starts by removing avoidable kilometres and overlapping routes."}],["$","meta","8",{"property":"og:url","content":"https://www.doormile.com/blog/fleet-reduction-without-compromising-delivery-volume"}],["$","meta","9",{"property":"og:site_name","content":"Doormile"}],["$","meta","10",{"property":"og:image","content":"https://www.doormile.com/images/blog-post-pic-8.webp"}],["$","meta","11",{"property":"og:image:alt","content":"Fleet Reduction Without Compromising Delivery Volume"}],["$","meta","12",{"property":"og:type","content":"article"}],["$","meta","13",{"property":"article:published_time","content":"2025-07-24T00:00:00.000Z"}],["$","meta","14",{"property":"article:author","content":"Doormile Team"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"Fleet Reduction Without Compromising Delivery Volume"}],["$","meta","17",{"name":"twitter:description","content":"Handling the same order volume with fewer vehicles starts by removing avoidable kilometres and overlapping routes."}],["$","meta","18",{"name":"twitter:image","content":"https://www.doormile.com/images/blog-post-pic-8.webp"}],["$","link","19",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","21",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","22",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L32","23",{}]] diff --git a/build/blog/fleet-reduction-without-compromising-delivery-volume/__next._head.txt b/build/blog/fleet-reduction-without-compromising-delivery-volume/__next._head.txt deleted file mode 100644 index 2ba8289..0000000 --- a/build/blog/fleet-reduction-without-compromising-delivery-volume/__next._head.txt +++ /dev/null @@ -1,6 +0,0 @@ -1:"$Sreact.fragment" -2:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -3:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -4:"$Sreact.suspense" -5:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Fleet Reduction Without Compromising Delivery Volume – Doormile"}],["$","meta","1",{"name":"description","content":"Handling the same order volume with fewer vehicles starts by removing avoidable kilometres and overlapping routes."}],["$","meta","2",{"name":"author","content":"Doormile Team"}],["$","meta","3",{"name":"keywords","content":"Fleet Management,last-mile logistics,EV fleet,MileTruth,route optimisation"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","link","5",{"rel":"canonical","href":"https://www.doormile.com/blog/fleet-reduction-without-compromising-delivery-volume"}],["$","meta","6",{"property":"og:title","content":"Fleet Reduction Without Compromising Delivery Volume"}],["$","meta","7",{"property":"og:description","content":"Handling the same order volume with fewer vehicles starts by removing avoidable kilometres and overlapping routes."}],["$","meta","8",{"property":"og:url","content":"https://www.doormile.com/blog/fleet-reduction-without-compromising-delivery-volume"}],["$","meta","9",{"property":"og:site_name","content":"Doormile"}],["$","meta","10",{"property":"og:image","content":"https://www.doormile.com/images/blog-post-pic-8.webp"}],["$","meta","11",{"property":"og:image:alt","content":"Fleet Reduction Without Compromising Delivery Volume"}],["$","meta","12",{"property":"og:type","content":"article"}],["$","meta","13",{"property":"article:published_time","content":"2025-07-24T00:00:00.000Z"}],["$","meta","14",{"property":"article:author","content":"Doormile Team"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"Fleet Reduction Without Compromising Delivery Volume"}],["$","meta","17",{"name":"twitter:description","content":"Handling the same order volume with fewer vehicles starts by removing avoidable kilometres and overlapping routes."}],["$","meta","18",{"name":"twitter:image","content":"https://www.doormile.com/images/blog-post-pic-8.webp"}],["$","link","19",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","21",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","22",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L5","23",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/fleet-reduction-without-compromising-delivery-volume/__next._index.txt b/build/blog/fleet-reduction-without-compromising-delivery-volume/__next._index.txt deleted file mode 100644 index d0b3355..0000000 --- a/build/blog/fleet-reduction-without-compromising-delivery-volume/__next._index.txt +++ /dev/null @@ -1,15 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","template":["$","$La",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/fleet-reduction-without-compromising-delivery-volume/__next._tree.txt b/build/blog/fleet-reduction-without-compromising-delivery-volume/__next._tree.txt deleted file mode 100644 index 3bf8395..0000000 --- a/build/blog/fleet-reduction-without-compromising-delivery-volume/__next._tree.txt +++ /dev/null @@ -1,10 +0,0 @@ -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -:HL["/images/blog-post-pic-8.webp","image"] -0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"blog","param":null,"prefetchHints":0,"slots":{"children":{"name":"slug","param":{"type":"d","key":"fleet-reduction-without-compromising-delivery-volume","siblings":null},"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/fleet-reduction-without-compromising-delivery-volume/__next.blog.$d$slug.__PAGE__.txt b/build/blog/fleet-reduction-without-compromising-delivery-volume/__next.blog.$d$slug.__PAGE__.txt deleted file mode 100644 index 5239b9b..0000000 --- a/build/blog/fleet-reduction-without-compromising-delivery-volume/__next.blog.$d$slug.__PAGE__.txt +++ /dev/null @@ -1,521 +0,0 @@ -1:"$Sreact.fragment" -8:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],""] -9:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"ScrollReveal"] -14:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -15:"$Sreact.suspense" -17:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"Image"] -18:I[23096,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"default"] -:HL["/images/blog-post-pic-8.webp","image"] -2:T3d6f, - .dm-single-blog { - --dm-red: #c01227; - --dm-red-hover: #e31d32; - --dm-radius-card: 22px; - --dm-radius-img: 20px; - --dm-radius-badge: 8px; - --dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05); - --dm-border: 1px solid rgba(15, 23, 42, 0.09); - --dm-space-p: 24px; - --dm-space-h: 32px; - --dm-space-img: 32px; - --dm-space-quote: 40px; - --dm-sticky-top: 138px; - --dm-measure: min(1100px, 100%); - font-family: var(--font-manrope), sans-serif; - } - - /* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6 - (120/80/60px UPPERCASE) rules with !important on our own classes. */ - .dm-single-blog :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline, - specificity 0-1-1) so blog links keep our colors and never get underlined. */ - .dm-single-blog a { text-decoration: none !important; } - - /* Page banner: tall homepage-scale frame with only badge + title inside */ - /* Compound selector (specificity 20) + !important beats the global 800px - single-class height rules so the blog banner can use viewport heights. */ - .custom-standard-hero-card.dm-banner-card { - height: 90vh !important; - min-height: 85vh !important; - } - @media (max-width: 1024px) { - .custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; } - } - @media (max-width: 600px) { - .custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; } - } - - .dm-banner-inner { - position: relative; width: 100%; height: 100%; - display: flex; flex-direction: column; align-items: center; justify-content: center; - text-align: center; gap: clamp(22px, 2.6vw, 34px); - padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px); - } - - .dm-banner-category { - display: inline-block; background: var(--dm-red); color: #fff; - font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px; - padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45); - } - .dm-banner-title { - font-family: var(--font-manrope), sans-serif !important; - font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important; - line-height: 1.16 !important; letter-spacing: -1.2px !important; - color: #ffffff !important; margin: 0; max-width: 820px; - text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38); - } - @media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } } - @media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } } - - /* Content wrap begins immediately below the banner */ - /* Shared content container: the SAME max-width + horizontal padding is used - by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings, - images, Prev/Next, Related Articles and the CTA banner all align to one - grid with identical left/right edges. Keep both in sync. */ - .dm-blog-wrap { - max-width: 1280px; margin: 0 auto; - /* 20px mobile padding floor → 40px on desktop; matches the footer container. */ - padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0; - } - @media (max-width: 767px) { - .dm-blog-wrap { - padding-left: 16px; - padding-right: 16px; - } - } - - /* ── Article meta bar (directly under the hero) ── */ - .dm-meta-bar { - display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px; - padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px); - border-bottom: 1px solid rgba(15,23,42,0.10); - } - .dm-meta-breadcrumb ol { - list-style: none; display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b; - } - .dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; } - .dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; } - .dm-meta-sep { color: #cbd5e1; } - .dm-meta-current { - color: #0f172a; font-weight: 700; - max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - } - @media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } } - .dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; } - .dm-meta-item { - display: inline-flex; align-items: center; gap: 7px; - font-size: 13.5px; font-weight: 600; color: #475569; - } - .dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; } - .dm-meta-author { color: #0f172a; font-weight: 700; } - @media (max-width: 600px) { .dm-meta-bar { gap: 12px; } } - .dm-blog-layout { - display: grid; grid-template-columns: minmax(0,1fr) 320px; - /* Tighter gap gives the reading column more room next to the 320px sidebar. */ - gap: clamp(28px, 3vw, 56px); align-items: start; - } - @media (max-width: 1024px) { - .dm-blog-layout { grid-template-columns: 1fr; gap: 48px; } - /* Single-column (tablet/mobile): cap the reading column and centre it so the - article never sits left-aligned with a large empty right gutter. */ - .dm-blog-main { max-width: 900px; margin-inline: auto; } - } - .dm-blog-main { min-width: 0; } - - /* ── Intro lead ── */ - .dm-blog-intro { - max-width: var(--dm-measure); - font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500; - color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px; - border-left: 3px solid var(--dm-red); - } - - /* ── Article body ── */ - .dm-article-body { max-width: var(--dm-measure); } - .dm-article-p { - font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450; - margin: 0 0 var(--dm-space-p); - } - .dm-article-h2 { - font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important; - color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h); - text-wrap: balance; - } - /* Each article block is wrapped in its OWN ScrollReveal
    , so a bare - :first-child rule matched every heading (each is the only child of its - wrapper) and zeroed its top margin, collapsing the gap above every - section heading. Scope the reset to only the article body's first block. */ - .dm-article-body > :first-child :where(.dm-article-h2, .dm-article-h3), - .dm-article-body > .dm-article-h2:first-child, - .dm-article-body > .dm-article-h3:first-child { margin-top: 0; } - .dm-article-h3 { - font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important; - color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px; - text-wrap: balance; - } - @media (max-width: 600px) { - .dm-article-p { font-size: 16px !important; } - .dm-article-ul li, .dm-article-ol li { font-size: 15.5px; } - .dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; } - .dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; } - } - - .dm-article-ul, .dm-article-ol { - /* Top margin (was 0) separates the list from the paragraph above it; - matching bottom margin keeps it clear of the next heading/paragraph. - Slightly larger than --dm-space-p so the list reads as its own block. */ - margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px); - padding-left: 2px; list-style: none; - display: flex; flex-direction: column; gap: 15px; - } - /* Prefixed with .dm-article-body so these beat the theme's global - ".logico-front-end ul li:before" fontello-glyph bullet (specificity 0,1,3), - which otherwise replaces our clean red dot with a misaligned checkmark glyph - and adds its own 1.7em indent. */ - .dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li { - position: relative; padding-left: 34px; - font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450; - } - .dm-article-body .dm-article-ul li::before { - content: ""; position: absolute; left: 7px; top: 10px; - width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red); - /* kill any inherited fontello glyph from the global rule */ - font-size: 0; line-height: 0; - } - .dm-article-ol { counter-reset: dm-li; } - .dm-article-body .dm-article-ol li { counter-increment: dm-li; } - .dm-article-body .dm-article-ol li::before { - content: counter(dm-li); position: absolute; left: 0; top: 0; - width: 24px; height: 24px; border-radius: 7px; - background: rgba(192,18,39,0.10); color: var(--dm-red); - font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; - } - - /* ── Quote ── */ - .dm-article-quote { - position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px; - background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%); - border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0; - box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06); - } - .dm-article-quote::before { - content: "\201C"; position: absolute; left: 22px; top: 8px; - font-family: Georgia, "Times New Roman", serif; - font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700; - } - .dm-article-quote p { - font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600; - font-style: italic; color: #1e293b; margin: 0; - } - .dm-article-quote cite { - display: block; margin-top: 16px; font-size: 13px; font-weight: 700; - font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px; - } - @media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } } - - /* ── Images ── */ - .dm-article-figure { margin: var(--dm-space-img) 0; } - .dm-article-figure-img { - position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; - border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10); - } - .dm-article-figure figcaption { - margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500; - text-align: center; font-style: italic; - } - - /* ── Sidebar ── */ - .dm-blog-aside-wrap { position: relative; } - .dm-blog-sidebar { - display: flex; flex-direction: column; gap: 18px; - position: sticky; top: var(--dm-sticky-top); - } - @media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } } - - .dm-blog-widget { - background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card); - padding: 20px; box-shadow: var(--dm-shadow-card); - } - .dm-blog-widget-title { - font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important; - letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important; - margin: 0 0 15px; padding: 0 0 12px; - border-bottom: 1px solid rgba(15,23,42,0.08); - overflow: visible; white-space: normal; word-break: normal; - } - - /* Search */ - .dm-sr-only { - position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; - overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; - } - .dm-blog-search { position: relative; } - .dm-blog-search-form { position: relative; } - .dm-blog-search-input { - width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px; - padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a; - background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; - } - .dm-blog-search-input::placeholder { color: #9c9c9c; } - .dm-blog-search-input:focus { - outline: none; border-color: var(--dm-red); background: #fff; - box-shadow: 0 0 0 3px rgba(192,18,39,0.11); - } - .dm-blog-search-icon { - position: absolute; right: 14px; top: 50%; transform: translateY(-50%); - color: #94a3b8; pointer-events: none; display: flex; - } - .dm-blog-search-results { - position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0; - background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px; - box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden; - } - .dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; } - .dm-blog-search-result { - display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; - border-radius: 10px; text-decoration: none; transition: background .15s ease; - } - .dm-blog-search-result:hover { background: #f8fafc; } - .dm-blog-search-result-cat { - font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red); - } - .dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; } - .dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; } - - /* Recent posts */ - .dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; } - .dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; } - .dm-blog-recent-thumb { - position: relative; flex: 0 0 62px; width: 62px; height: 62px; - border-radius: 13px; overflow: hidden; background: #f1f5f9; - } - .dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; } - .dm-blog-recent-title { - font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); } - .dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; } - - /* Categories */ - .dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; } - .dm-blog-category-item { - display: flex; align-items: center; justify-content: space-between; gap: 10px; - padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important; - border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease; - } - .dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; } - .dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; } - .dm-blog-category-item > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .dm-blog-category-count { - flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9; - min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex; - align-items: center; justify-content: center; padding: 0 7px; - } - - /* CTA card */ - .dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; } - .dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; } - .dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; } - .dm-blog-cta-btn { - display: inline-flex; align-items: center; gap: 8px; - background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700; - padding: 12px 22px; border-radius: 12px; text-decoration: none; - transition: background .2s ease, transform .2s ease; - } - .dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } -0:{"rsc":["$","$1","c",{"children":[["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"headline\":\"Fleet Reduction Without Compromising Delivery Volume\",\"description\":\"Handling the same order volume with fewer vehicles starts by removing avoidable kilometres and overlapping routes.\",\"image\":[\"https://www.doormile.com/images/blog-post-pic-8.webp\"],\"datePublished\":\"2025-07-24T00:00:00.000Z\",\"dateModified\":\"2025-07-24T00:00:00.000Z\",\"author\":{\"@type\":\"Organization\",\"name\":\"Doormile Team\",\"url\":\"https://www.doormile.com\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Doormile\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.doormile.com/images/cropped-image-2.png\"}},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.doormile.com/blog/fleet-reduction-without-compromising-delivery-volume\"},\"articleSection\":\"Fleet Management\"}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://www.doormile.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https://www.doormile.com/blog\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Fleet Reduction Without Compromising Delivery Volume\",\"item\":\"https://www.doormile.com/blog/fleet-reduction-without-compromising-delivery-volume\"}]}"}}],["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":[["$","article",null,{"className":"dm-single-blog","children":[["$","link",null,{"rel":"preload","as":"image","href":"/images/blog-post-pic-8.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$2"}}],"$L3","$L4"]}],"$L5"]}]}]]}],["$L6"],"$L7"]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} -3:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card dm-banner-card","style":{"backgroundImage":"url(/images/blog-post-pic-8.webp)","--hero-overlay":"linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)"},"children":["$","div",null,{"className":"e-con-inner dm-banner-inner","children":[["$","span",null,{"className":"dm-banner-category","children":"Fleet Management"}],["$","h1",null,{"className":"dm-banner-title","children":"Fleet Reduction Without Compromising Delivery Volume"}]]}]}]}] -4:["$","div",null,{"className":"dm-blog-wrap","children":[["$","div",null,{"className":"dm-meta-bar","children":[["$","nav",null,{"className":"dm-meta-breadcrumb","aria-label":"Breadcrumb","children":["$","ol",null,{"children":[["$","li",null,{"children":["$","$L8",null,{"href":"/","children":"Home"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"children":["$","$L8",null,{"href":"/blog","children":"Blog"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"aria-current":"page","className":"dm-meta-current","children":"Fleet Reduction Without Compromising Delivery Volume"}]]}]}],["$","div",null,{"className":"dm-meta-items","children":[["$","span",null,{"className":"dm-meta-item dm-meta-author","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","path",null,{"d":"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}],["$","circle",null,{"cx":"12","cy":"7","r":"4"}]]}],"Doormile Team"]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"2"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}]]}],["$","time",null,{"dateTime":"2025-07-24","children":"Jul 24, 2025"}]]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","circle",null,{"cx":"12","cy":"12","r":"9"}],["$","polyline",null,{"points":"12 7 12 12 15 14"}]]}],2," min read"]}]]}]]}],["$","div",null,{"className":"dm-blog-layout","children":[["$","div",null,{"className":"dm-blog-main","children":[["$","p",null,{"className":"dm-blog-intro","children":"Cutting vehicles usually means cutting capacity unless the removed kilometres were never needed. Better route planning turns wasted distance into operating headroom."}],["$","div",null,{"className":"dm-article-body","children":[["$","$L9","0",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"In last-mile logistics, a missed SLA is rarely caused by one big failure. It usually comes from small delays adding up across a route. Fleet Reduction Without Compromising Delivery Volume looks at how delivery teams can spot those delays early and plan around them before vehicles leave the hub."}]}],["$","$L9","1",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Why this matters for fleet teams"}]}],["$","$L9","2",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Every extra kilometre costs money. It uses fuel or charge, adds rider time, wears down vehicles, and increases the chance of a late delivery. When routes are built from fixed zones or old habits, those costs repeat every day."}]}],["$","$L9","3",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"Fewer vehicles needed for the same number of drops"}],["$","li","1",{"children":"Lower cost per drop through better stop sequencing"}],["$","li","2",{"children":"ETAs that match traffic, distance, and delivery windows"}],["$","li","3",{"children":"Less fuel or charge used per completed order"}]]}]}],["$","$L9","4",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"From orders to dispatch"}]}],["$","$L9","5",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"A good dispatch plan starts with the basics: order locations, promised delivery windows, rider capacity, vehicle range, and known traffic trouble spots. MileTruth™ checks those inputs before dispatch so the team is not fixing avoidable mistakes on the road."}]}],["$","$L9","6",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","figure",null,{"className":"dm-article-figure","children":["$La","$Lb"]}]}],"$Lc","$Ld","$Le","$Lf","$L10"]}]]}],"$L11"]}]]}] -12:T2021, - .dm-blog-footer { - font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32; - /* The global theme applies 72px top/bottom section padding — strip it so the - inner container is the single source of vertical rhythm (no double gap). */ - padding: 0 !important; - } - /* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */ - .dm-blog-footer :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline) */ - .dm-blog-footer a { text-decoration: none !important; } - /* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px - max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA - align to the exact same left/right edges as the article body above. - Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a - consistent ~64–72px section→section gap (no 120px+ voids). */ - .dm-blog-footer-inner { - max-width: 1280px; margin: 0 auto; - /* Compact vertical rhythm on an 8px system. Top padding sets the - article→Prev/Next gap (~24–32px); the inter-section gap sets the - Prev/Next→Related gap (~32–48px). No large arbitrary voids. */ - /* Minimal bottom padding — the global site footer already contributes its - own 20px top inset, so the CTA banner sits close to it without a void. */ - padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px); - display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px); - } - @media (max-width: 767px) { - .dm-blog-footer-inner { - padding-left: 16px; - padding-right: 16px; - } - } - - /* Prev / Next */ - .dm-prevnext { - display: grid; grid-template-columns: 1fr 1fr; gap: 20px; - /* Halved from 40px: tight divider→cards spacing without crowding. */ - padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08); - } - @media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } } - .dm-prevnext-placeholder { display: block; } - .dm-prevnext-card { - display: flex; gap: 16px; align-items: center; padding: 16px; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; - } - .dm-prevnext-card:hover { - transform: translateY(-4px); border-color: rgba(192,18,39,0.2); - box-shadow: 0 16px 34px rgba(192,18,39,0.10); - } - .dm-prevnext-thumb { - position: relative; flex: 0 0 80px; width: 80px; height: 80px; - border-radius: 16px; overflow: hidden; background: #f1f5f9; - } - .dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; } - .dm-prevnext-next { text-align: right; } - .dm-prevnext-next .dm-prevnext-text { align-items: flex-end; } - .dm-prevnext-label { - display: inline-flex; align-items: center; gap: 6px; - font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red); - } - .dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; } - .dm-prevnext-title { - font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); } - - /* Related */ - .dm-related-heading { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important; - line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px; - } - .dm-related-grid { - display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; - } - @media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } } - @media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } } - - .dm-related-card { - display: flex; flex-direction: column; height: 100%; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none; - transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease; - } - .dm-related-card:hover { - transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13); - border-color: rgba(192,18,39,0.2); - } - .dm-related-img { - position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9; - } - .dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-img img { transform: scale(1.05); } - .dm-related-badge { - position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff; - font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px; - padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25); - } - .dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; } - .dm-related-card-title { - font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important; - letter-spacing: -.2px !important; margin: 0 0 10px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-related-card:hover .dm-related-card-title { color: var(--dm-red); } - .dm-related-card-excerpt { - font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - } - .dm-related-readmore { - margin-top: auto; display: inline-flex; align-items: center; gap: 7px; - font-size: 12.5px; font-weight: 800; color: var(--dm-red); - text-transform: uppercase; letter-spacing: .6px; - } - .dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); } - - /* Contact CTA banner */ - .dm-blog-contact-cta { - display: flex; align-items: center; justify-content: space-between; gap: 32px; - flex-wrap: wrap; - background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%); - border-radius: 30px; padding: clamp(32px, 4vw, 56px); - position: relative; overflow: hidden; - } - .dm-blog-contact-cta::after { - content: ""; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px; - background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%); - pointer-events: none; - } - .dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; } - .dm-blog-contact-eyebrow { - display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase; - letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px; - } - .dm-blog-contact-title { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important; - letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance; - } - .dm-blog-contact-sub { - font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450; - } - .dm-blog-contact-btn { - position: relative; z-index: 1; flex-shrink: 0; - display: inline-flex; align-items: center; justify-content: center; gap: 10px; - background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700; - padding: 16px 32px; border-radius: 16px; text-decoration: none; - box-shadow: 0 10px 26px rgba(192,18,39,0.34); - transition: background .2s ease, transform .2s ease; - } - .dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } - @media (max-width: 720px) { - .dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; } - .dm-blog-contact-btn { width: 100%; } - } -5:["$","section",null,{"className":"dm-blog-footer","aria-label":"More articles","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$12"}}],"$L13"]}] -6:["$","script","script-0",{"src":"/_next/static/chunks/0yvxf3ok9gcp_.js","async":true}] -7:["$","$L14",null,{"children":["$","$15",null,{"name":"Next.MetadataOutlet","children":"$@16"}]}] -a:["$","span",null,{"className":"dm-article-figure-img","children":["$","$L17",null,{"src":"/images/blog-post-pic-8.webp","alt":"Fleet Reduction Without Compromising Delivery Volume","fill":true,"sizes":"(max-width: 768px) 100vw, 760px","style":{"objectFit":"cover"}}]}] -b:["$","figcaption",null,{"children":"Fleet Management: route planning decisions made before dispatch."}] -c:["$","$L9","7",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","blockquote",null,{"className":"dm-article-quote","children":[["$","p",null,{"children":"A route should be checked before the rider leaves, not explained after the customer calls."}],["$","cite",null,{"children":"Doormile Operations"}]]}]}] -d:["$","$L9","8",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Putting it into practice"}]}] -e:["$","$L9","9",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The best improvements usually start with simple measurements. Track distance per route, failed delivery windows, rider idle time, and orders moved between vehicles after dispatch. Those numbers show where the operation is leaking time."}]}] -f:["$","$L9","10",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ol",null,{"className":"dm-article-ol","children":[["$","li","0",{"children":"Benchmark today's distance, fleet size, and on-time rate."}],["$","li","1",{"children":"Include vehicle capacity, delivery windows, rider shifts, and battery charge."}],["$","li","2",{"children":"Check routes against traffic and customer commitments before dispatch."}],["$","li","3",{"children":"Compare the next dispatch cycle against the old plan."}]]}]}] -10:["$","$L9","11",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Better routing is not about pushing riders harder. It is about giving them a plan that already accounts for the real day ahead."}]}] -11:["$","div",null,{"className":"dm-blog-aside-wrap","children":["$","aside",null,{"className":"dm-blog-sidebar","aria-label":"Blog sidebar","children":[["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Search"}],["$","$L18",null,{}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Recent Posts"}],["$","ul",null,{"className":"dm-blog-recent","children":[["$","li","how-ai-is-transforming-last-mile-ev-delivery",{"children":["$","$L8",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","time",null,{"dateTime":"2025-10-02","className":"dm-blog-recent-date","children":"Oct 2, 2025"}]]}]]}]}],["$","li","42-less-distance-insights-from-our-hyderabad-hub",{"children":["$","$L8",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","time",null,{"dateTime":"2025-09-18","className":"dm-blog-recent-date","children":"Sep 18, 2025"}]]}]]}]}],["$","li","miletruth-ai-10-stages-to-smarter-dispatch",{"children":["$","$L8",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","time",null,{"dateTime":"2025-09-05","className":"dm-blog-recent-date","children":"Sep 5, 2025"}]]}]]}]}],["$","li","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"children":["$","$L8",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L17",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","time",null,{"dateTime":"2025-08-21","className":"dm-blog-recent-date","children":"Aug 21, 2025"}]]}]]}]}]]}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Categories"}],["$","ul",null,{"className":"dm-blog-categories","children":[["$","li","Case Study",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Case Study"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","EV Fleet",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"EV Fleet"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}],["$","li","Fleet Management",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Fleet Management"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","MileTruth",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"MileTruth"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],"$L19","$L1a","$L1b"]}]]}],"$L1c"]}]}] -13:["$","div",null,{"className":"dm-blog-footer-inner","children":[["$","nav",null,{"className":"dm-prevnext","aria-label":"Article navigation","children":[["$","$L8",null,{"href":"/blog/why-mathematical-precision-beats-heuristics-in-routing","className":"dm-prevnext-card dm-prevnext-prev","children":[["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-14.webp","alt":"Why Mathematical Precision Beats Heuristics in Routing","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"19","y1":"12","x2":"5","y2":"12"}],["$","polyline",null,{"points":"12 19 5 12 12 5"}]]}],"Previous"]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Technology"}],["$","span",null,{"className":"dm-prevnext-title","children":"Why Mathematical Precision Beats Heuristics in Routing"}]]}]]}],["$","$L8",null,{"href":"/blog/building-a-greener-city-the-future-of-urban-logistics","className":"dm-prevnext-card dm-prevnext-next","children":[["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":["Next",["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Sustainability"}],["$","span",null,{"className":"dm-prevnext-title","children":"Building a Greener City: The Future of Urban Logistics"}]]}],["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-6.webp","alt":"Building a Greener City: The Future of Urban Logistics","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}]]}]]}],["$","div",null,{"className":"dm-related","children":[["$","h2",null,{"className":"dm-related-heading","children":"Related Articles"}],["$","div",null,{"className":"dm-related-grid","children":[["$","$L9","how-ai-is-transforming-last-mile-ev-delivery",{"delay":0,"duration":0.7,"yOffset":30,"children":["$","$L8",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L17",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Technology"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L9","42-less-distance-insights-from-our-hyderabad-hub",{"delay":0.08,"duration":0.7,"yOffset":30,"children":["$","$L8",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L17",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Case Study"}]]}],["$","div",null,{"className":"dm-related-body","children":["$L1d","$L1e","$L1f"]}]]}]}],"$L20"]}]]}],"$L21"]}] -16:null -19:["$","li","Operations",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Operations"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -1a:["$","li","Sustainability",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Sustainability"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -1b:["$","li","Technology",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Technology"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}] -1c:["$","section",null,{"className":"dm-blog-widget dm-blog-cta-card","children":[["$","h2",null,{"className":"dm-blog-cta-title","children":"Planning delivery routes?"}],["$","p",null,{"className":"dm-blog-cta-text","children":"Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time."}],["$","$L8",null,{"href":"/contact","className":"dm-blog-cta-btn","children":["Contact Us",["$","svg",null,{"width":"18","height":"18","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -1d:["$","h3",null,{"className":"dm-related-card-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}] -1e:["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}] -1f:["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}] -20:["$","$L9","miletruth-ai-10-stages-to-smarter-dispatch",{"delay":0.16,"duration":0.7,"yOffset":30,"children":["$","$L8",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L17",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"MileTruth"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}] -21:["$","div",null,{"className":"dm-blog-contact-cta","children":[["$","div",null,{"className":"dm-blog-contact-cta-content","children":[["$","span",null,{"className":"dm-blog-contact-eyebrow","children":"Let's talk logistics"}],["$","h2",null,{"className":"dm-blog-contact-title","children":"Ready to move smarter with Doormile?"}],["$","p",null,{"className":"dm-blog-contact-sub","children":"Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding."}]]}],["$","$L8",null,{"href":"/contact","className":"dm-blog-contact-btn","children":["Get in Touch",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] diff --git a/build/blog/fleet-reduction-without-compromising-delivery-volume/__next.blog.$d$slug.txt b/build/blog/fleet-reduction-without-compromising-delivery-volume/__next.blog.$d$slug.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/blog/fleet-reduction-without-compromising-delivery-volume/__next.blog.$d$slug.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/fleet-reduction-without-compromising-delivery-volume/__next.blog.txt b/build/blog/fleet-reduction-without-compromising-delivery-volume/__next.blog.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/blog/fleet-reduction-without-compromising-delivery-volume/__next.blog.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/how-ai-is-transforming-last-mile-ev-delivery.html b/build/blog/how-ai-is-transforming-last-mile-ev-delivery.html deleted file mode 100644 index 8830acc..0000000 --- a/build/blog/how-ai-is-transforming-last-mile-ev-delivery.html +++ /dev/null @@ -1,1168 +0,0 @@ -How Better Planning Improves Last-Mile EV Delivery – Doormile

    Doormile

    Doormile logo
    Address
    Hyderabad

    5th Floor, Vision Ultima,
    Street No.3, Jayabheri Enclave,
    Gachibowli, Hyderabad,
    Telangana 500032.

    Coimbatore

    Mayflower Valencia,
    Near Nava India Bus Stop,
    Avinashi Road,
    Udayampalayam,
    Tamil Nadu 641037.

    Bengaluru

    C612, 6th Floor,
    Trifecta Starlight,
    ITPL Road,
    Garudacharapalya,
    Mahadevapura,
    Bangalore 560048,
    Karnataka, India.

    Contact Us

    Tel : +91 86886 97941

    Email

    care@doormile.com

    Technology

    How Better Planning Improves Last-Mile EV Delivery

    Doormile Team2 min read

    The last mile is already difficult to plan. With electric vehicles, the team also has to think about battery range, charging time, rider load, traffic, and delivery windows. Good planning turns those moving parts into a workable dispatch plan.

    For a long time, last-mile planning depended on dispatchers, spreadsheets, and local experience. That experience still matters. The problem is that it gets stretched thin when order volume rises and the fleet includes EVs.

    The shift from fixed rules to daily planning

    A fixed-zone plan may look clean in the morning, but the road rarely follows the plan. A rider may get delayed near Hitec City, a gated community may hold a vehicle for ten extra minutes, or a battery may drain faster because the load is heavier than usual.

    • Order volumes by area, time slot, and customer type
    • Travel times based on the city's actual traffic patterns
    • Battery use by vehicle type, rider load, and route length
    • Feedback from completed deliveries, failed attempts, and late arrivals

    Adjusting during the day

    The first plan is only the starting point. By 11 a.m., traffic may change, a high-priority order may arrive, or one vehicle may return with less charge than expected. The dispatch team needs a way to adjust without rebuilding the whole day by hand.

    During peak traffic hours in Hyderabad, some vehicles were arriving 20 to 30 minutes later than planned. By adjusting routes based on live traffic and battery levels, the hub reduced missed delivery windows and improved on-time performance.

    Electric delivery vehicle routing visualisation
    EV route plans need to account for range, load, traffic, and charging time before riders leave the hub.

    With EVs, a route is only useful if the vehicle can finish it and still return safely.

    Doormile Operations

    What this means for operators

    For a fleet manager, this is not about fancy software. It is about fewer emergency calls, fewer mid-route swaps, and fewer customers asking why their delivery missed the promised window.

    1. Record delivery times, failed attempts, traffic delays, and charging cycles.
    2. Build travel-time estimates from the areas your riders actually serve.
    3. Check every route against battery capacity before dispatch.
    4. Replan when traffic, orders, or vehicle availability changes.

    The fleets that improve fastest are usually not the ones adding vehicles first. They are the ones removing wasted distance, planning charging properly, and giving riders routes they can complete on time.

    \ No newline at end of file diff --git a/build/blog/how-ai-is-transforming-last-mile-ev-delivery.txt b/build/blog/how-ai-is-transforming-last-mile-ev-delivery.txt deleted file mode 100644 index e4ac319..0000000 --- a/build/blog/how-ai-is-transforming-last-mile-ev-delivery.txt +++ /dev/null @@ -1,545 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -d:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -e:"$Sreact.suspense" -11:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -13:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -15:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","blog","how-ai-is-transforming-last-mile-ev-delivery"],"q":"","i":false,"f":[[["",{"children":["blog",{"children":[["slug","how-ai-is-transforming-last-mile-ev-delivery","d",null],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":["$Lc",[["$","script","script-0",{"src":"/_next/static/chunks/0yvxf3ok9gcp_.js","async":true,"nonce":"$undefined"}]],["$","$Ld",null,{"children":["$","$e",null,{"name":"Next.MetadataOutlet","children":"$@f"}]}]]}],{},null,false,null]},null,false,"$@10"]},null,false,"$@10"]},null,false,null],["$","$1","h",{"children":[null,["$","$L11",null,{"children":"$L12"}],["$","div",null,{"hidden":true,"children":["$","$L13",null,{"children":["$","$e",null,{"name":"Next.Metadata","children":"$L14"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$15",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -16:[] -10:"$W16" -:HL["/images/blog-post-pic-17.webp","image"] -17:T3d6f, - .dm-single-blog { - --dm-red: #c01227; - --dm-red-hover: #e31d32; - --dm-radius-card: 22px; - --dm-radius-img: 20px; - --dm-radius-badge: 8px; - --dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05); - --dm-border: 1px solid rgba(15, 23, 42, 0.09); - --dm-space-p: 24px; - --dm-space-h: 32px; - --dm-space-img: 32px; - --dm-space-quote: 40px; - --dm-sticky-top: 138px; - --dm-measure: min(1100px, 100%); - font-family: var(--font-manrope), sans-serif; - } - - /* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6 - (120/80/60px UPPERCASE) rules with !important on our own classes. */ - .dm-single-blog :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline, - specificity 0-1-1) so blog links keep our colors and never get underlined. */ - .dm-single-blog a { text-decoration: none !important; } - - /* Page banner: tall homepage-scale frame with only badge + title inside */ - /* Compound selector (specificity 20) + !important beats the global 800px - single-class height rules so the blog banner can use viewport heights. */ - .custom-standard-hero-card.dm-banner-card { - height: 90vh !important; - min-height: 85vh !important; - } - @media (max-width: 1024px) { - .custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; } - } - @media (max-width: 600px) { - .custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; } - } - - .dm-banner-inner { - position: relative; width: 100%; height: 100%; - display: flex; flex-direction: column; align-items: center; justify-content: center; - text-align: center; gap: clamp(22px, 2.6vw, 34px); - padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px); - } - - .dm-banner-category { - display: inline-block; background: var(--dm-red); color: #fff; - font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px; - padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45); - } - .dm-banner-title { - font-family: var(--font-manrope), sans-serif !important; - font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important; - line-height: 1.16 !important; letter-spacing: -1.2px !important; - color: #ffffff !important; margin: 0; max-width: 820px; - text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38); - } - @media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } } - @media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } } - - /* Content wrap begins immediately below the banner */ - /* Shared content container: the SAME max-width + horizontal padding is used - by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings, - images, Prev/Next, Related Articles and the CTA banner all align to one - grid with identical left/right edges. Keep both in sync. */ - .dm-blog-wrap { - max-width: 1280px; margin: 0 auto; - /* 20px mobile padding floor → 40px on desktop; matches the footer container. */ - padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0; - } - @media (max-width: 767px) { - .dm-blog-wrap { - padding-left: 16px; - padding-right: 16px; - } - } - - /* ── Article meta bar (directly under the hero) ── */ - .dm-meta-bar { - display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px; - padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px); - border-bottom: 1px solid rgba(15,23,42,0.10); - } - .dm-meta-breadcrumb ol { - list-style: none; display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b; - } - .dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; } - .dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; } - .dm-meta-sep { color: #cbd5e1; } - .dm-meta-current { - color: #0f172a; font-weight: 700; - max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - } - @media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } } - .dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; } - .dm-meta-item { - display: inline-flex; align-items: center; gap: 7px; - font-size: 13.5px; font-weight: 600; color: #475569; - } - .dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; } - .dm-meta-author { color: #0f172a; font-weight: 700; } - @media (max-width: 600px) { .dm-meta-bar { gap: 12px; } } - .dm-blog-layout { - display: grid; grid-template-columns: minmax(0,1fr) 320px; - /* Tighter gap gives the reading column more room next to the 320px sidebar. */ - gap: clamp(28px, 3vw, 56px); align-items: start; - } - @media (max-width: 1024px) { - .dm-blog-layout { grid-template-columns: 1fr; gap: 48px; } - /* Single-column (tablet/mobile): cap the reading column and centre it so the - article never sits left-aligned with a large empty right gutter. */ - .dm-blog-main { max-width: 900px; margin-inline: auto; } - } - .dm-blog-main { min-width: 0; } - - /* ── Intro lead ── */ - .dm-blog-intro { - max-width: var(--dm-measure); - font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500; - color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px; - border-left: 3px solid var(--dm-red); - } - - /* ── Article body ── */ - .dm-article-body { max-width: var(--dm-measure); } - .dm-article-p { - font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450; - margin: 0 0 var(--dm-space-p); - } - .dm-article-h2 { - font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important; - color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h); - text-wrap: balance; - } - /* Each article block is wrapped in its OWN ScrollReveal
    , so a bare - :first-child rule matched every heading (each is the only child of its - wrapper) and zeroed its top margin, collapsing the gap above every - section heading. Scope the reset to only the article body's first block. */ - .dm-article-body > :first-child :where(.dm-article-h2, .dm-article-h3), - .dm-article-body > .dm-article-h2:first-child, - .dm-article-body > .dm-article-h3:first-child { margin-top: 0; } - .dm-article-h3 { - font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important; - color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px; - text-wrap: balance; - } - @media (max-width: 600px) { - .dm-article-p { font-size: 16px !important; } - .dm-article-ul li, .dm-article-ol li { font-size: 15.5px; } - .dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; } - .dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; } - } - - .dm-article-ul, .dm-article-ol { - /* Top margin (was 0) separates the list from the paragraph above it; - matching bottom margin keeps it clear of the next heading/paragraph. - Slightly larger than --dm-space-p so the list reads as its own block. */ - margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px); - padding-left: 2px; list-style: none; - display: flex; flex-direction: column; gap: 15px; - } - /* Prefixed with .dm-article-body so these beat the theme's global - ".logico-front-end ul li:before" fontello-glyph bullet (specificity 0,1,3), - which otherwise replaces our clean red dot with a misaligned checkmark glyph - and adds its own 1.7em indent. */ - .dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li { - position: relative; padding-left: 34px; - font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450; - } - .dm-article-body .dm-article-ul li::before { - content: ""; position: absolute; left: 7px; top: 10px; - width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red); - /* kill any inherited fontello glyph from the global rule */ - font-size: 0; line-height: 0; - } - .dm-article-ol { counter-reset: dm-li; } - .dm-article-body .dm-article-ol li { counter-increment: dm-li; } - .dm-article-body .dm-article-ol li::before { - content: counter(dm-li); position: absolute; left: 0; top: 0; - width: 24px; height: 24px; border-radius: 7px; - background: rgba(192,18,39,0.10); color: var(--dm-red); - font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; - } - - /* ── Quote ── */ - .dm-article-quote { - position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px; - background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%); - border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0; - box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06); - } - .dm-article-quote::before { - content: "\201C"; position: absolute; left: 22px; top: 8px; - font-family: Georgia, "Times New Roman", serif; - font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700; - } - .dm-article-quote p { - font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600; - font-style: italic; color: #1e293b; margin: 0; - } - .dm-article-quote cite { - display: block; margin-top: 16px; font-size: 13px; font-weight: 700; - font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px; - } - @media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } } - - /* ── Images ── */ - .dm-article-figure { margin: var(--dm-space-img) 0; } - .dm-article-figure-img { - position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; - border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10); - } - .dm-article-figure figcaption { - margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500; - text-align: center; font-style: italic; - } - - /* ── Sidebar ── */ - .dm-blog-aside-wrap { position: relative; } - .dm-blog-sidebar { - display: flex; flex-direction: column; gap: 18px; - position: sticky; top: var(--dm-sticky-top); - } - @media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } } - - .dm-blog-widget { - background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card); - padding: 20px; box-shadow: var(--dm-shadow-card); - } - .dm-blog-widget-title { - font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important; - letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important; - margin: 0 0 15px; padding: 0 0 12px; - border-bottom: 1px solid rgba(15,23,42,0.08); - overflow: visible; white-space: normal; word-break: normal; - } - - /* Search */ - .dm-sr-only { - position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; - overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; - } - .dm-blog-search { position: relative; } - .dm-blog-search-form { position: relative; } - .dm-blog-search-input { - width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px; - padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a; - background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; - } - .dm-blog-search-input::placeholder { color: #9c9c9c; } - .dm-blog-search-input:focus { - outline: none; border-color: var(--dm-red); background: #fff; - box-shadow: 0 0 0 3px rgba(192,18,39,0.11); - } - .dm-blog-search-icon { - position: absolute; right: 14px; top: 50%; transform: translateY(-50%); - color: #94a3b8; pointer-events: none; display: flex; - } - .dm-blog-search-results { - position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0; - background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px; - box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden; - } - .dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; } - .dm-blog-search-result { - display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; - border-radius: 10px; text-decoration: none; transition: background .15s ease; - } - .dm-blog-search-result:hover { background: #f8fafc; } - .dm-blog-search-result-cat { - font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red); - } - .dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; } - .dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; } - - /* Recent posts */ - .dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; } - .dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; } - .dm-blog-recent-thumb { - position: relative; flex: 0 0 62px; width: 62px; height: 62px; - border-radius: 13px; overflow: hidden; background: #f1f5f9; - } - .dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; } - .dm-blog-recent-title { - font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); } - .dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; } - - /* Categories */ - .dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; } - .dm-blog-category-item { - display: flex; align-items: center; justify-content: space-between; gap: 10px; - padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important; - border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease; - } - .dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; } - .dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; } - .dm-blog-category-item > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .dm-blog-category-count { - flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9; - min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex; - align-items: center; justify-content: center; padding: 0 7px; - } - - /* CTA card */ - .dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; } - .dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; } - .dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; } - .dm-blog-cta-btn { - display: inline-flex; align-items: center; gap: 8px; - background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700; - padding: 12px 22px; border-radius: 12px; text-decoration: none; - transition: background .2s ease, transform .2s ease; - } - .dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } -c:["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"headline\":\"How Better Planning Improves Last-Mile EV Delivery\",\"description\":\"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles.\",\"image\":[\"https://www.doormile.com/images/blog-post-pic-17.webp\"],\"datePublished\":\"2025-10-02T00:00:00.000Z\",\"dateModified\":\"2025-10-02T00:00:00.000Z\",\"author\":{\"@type\":\"Organization\",\"name\":\"Doormile Team\",\"url\":\"https://www.doormile.com\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Doormile\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.doormile.com/images/cropped-image-2.png\"}},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.doormile.com/blog/how-ai-is-transforming-last-mile-ev-delivery\"},\"articleSection\":\"Technology\"}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://www.doormile.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https://www.doormile.com/blog\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How Better Planning Improves Last-Mile EV Delivery\",\"item\":\"https://www.doormile.com/blog/how-ai-is-transforming-last-mile-ev-delivery\"}]}"}}],["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":[["$","article",null,{"className":"dm-single-blog","children":[["$","link",null,{"rel":"preload","as":"image","href":"/images/blog-post-pic-17.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$17"}}],"$L18","$L19"]}],"$L1a"]}]}]]}] -1b:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],""] -1c:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"ScrollReveal"] -18:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card dm-banner-card","style":{"backgroundImage":"url(/images/blog-post-pic-17.webp)","--hero-overlay":"linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)"},"children":["$","div",null,{"className":"e-con-inner dm-banner-inner","children":[["$","span",null,{"className":"dm-banner-category","children":"Technology"}],["$","h1",null,{"className":"dm-banner-title","children":"How Better Planning Improves Last-Mile EV Delivery"}]]}]}]}] -19:["$","div",null,{"className":"dm-blog-wrap","children":[["$","div",null,{"className":"dm-meta-bar","children":[["$","nav",null,{"className":"dm-meta-breadcrumb","aria-label":"Breadcrumb","children":["$","ol",null,{"children":[["$","li",null,{"children":["$","$L1b",null,{"href":"/","children":"Home"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"children":["$","$L1b",null,{"href":"/blog","children":"Blog"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"aria-current":"page","className":"dm-meta-current","children":"How Better Planning Improves Last-Mile EV Delivery"}]]}]}],["$","div",null,{"className":"dm-meta-items","children":[["$","span",null,{"className":"dm-meta-item dm-meta-author","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","path",null,{"d":"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}],["$","circle",null,{"cx":"12","cy":"7","r":"4"}]]}],"Doormile Team"]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"2"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}]]}],["$","time",null,{"dateTime":"2025-10-02","children":"Oct 2, 2025"}]]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","circle",null,{"cx":"12","cy":"12","r":"9"}],["$","polyline",null,{"points":"12 7 12 12 15 14"}]]}],2," min read"]}]]}]]}],["$","div",null,{"className":"dm-blog-layout","children":[["$","div",null,{"className":"dm-blog-main","children":[["$","p",null,{"className":"dm-blog-intro","children":"The last mile is already difficult to plan. With electric vehicles, the team also has to think about battery range, charging time, rider load, traffic, and delivery windows. Good planning turns those moving parts into a workable dispatch plan."}],["$","div",null,{"className":"dm-article-body","children":[["$","$L1c","0",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"For a long time, last-mile planning depended on dispatchers, spreadsheets, and local experience. That experience still matters. The problem is that it gets stretched thin when order volume rises and the fleet includes EVs."}]}],["$","$L1c","1",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"The shift from fixed rules to daily planning"}]}],["$","$L1c","2",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"A fixed-zone plan may look clean in the morning, but the road rarely follows the plan. A rider may get delayed near Hitec City, a gated community may hold a vehicle for ten extra minutes, or a battery may drain faster because the load is heavier than usual."}]}],["$","$L1c","3",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"Order volumes by area, time slot, and customer type"}],["$","li","1",{"children":"Travel times based on the city's actual traffic patterns"}],["$","li","2",{"children":"Battery use by vehicle type, rider load, and route length"}],["$","li","3",{"children":"Feedback from completed deliveries, failed attempts, and late arrivals"}]]}]}],["$","$L1c","4",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"Adjusting during the day"}]}],["$","$L1c","5",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The first plan is only the starting point. By 11 a.m., traffic may change, a high-priority order may arrive, or one vehicle may return with less charge than expected. The dispatch team needs a way to adjust without rebuilding the whole day by hand."}]}],"$L1d","$L1e","$L1f","$L20","$L21","$L22","$L23"]}]]}],"$L24"]}]]}] -25:T2021, - .dm-blog-footer { - font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32; - /* The global theme applies 72px top/bottom section padding — strip it so the - inner container is the single source of vertical rhythm (no double gap). */ - padding: 0 !important; - } - /* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */ - .dm-blog-footer :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline) */ - .dm-blog-footer a { text-decoration: none !important; } - /* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px - max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA - align to the exact same left/right edges as the article body above. - Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a - consistent ~64–72px section→section gap (no 120px+ voids). */ - .dm-blog-footer-inner { - max-width: 1280px; margin: 0 auto; - /* Compact vertical rhythm on an 8px system. Top padding sets the - article→Prev/Next gap (~24–32px); the inter-section gap sets the - Prev/Next→Related gap (~32–48px). No large arbitrary voids. */ - /* Minimal bottom padding — the global site footer already contributes its - own 20px top inset, so the CTA banner sits close to it without a void. */ - padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px); - display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px); - } - @media (max-width: 767px) { - .dm-blog-footer-inner { - padding-left: 16px; - padding-right: 16px; - } - } - - /* Prev / Next */ - .dm-prevnext { - display: grid; grid-template-columns: 1fr 1fr; gap: 20px; - /* Halved from 40px: tight divider→cards spacing without crowding. */ - padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08); - } - @media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } } - .dm-prevnext-placeholder { display: block; } - .dm-prevnext-card { - display: flex; gap: 16px; align-items: center; padding: 16px; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; - } - .dm-prevnext-card:hover { - transform: translateY(-4px); border-color: rgba(192,18,39,0.2); - box-shadow: 0 16px 34px rgba(192,18,39,0.10); - } - .dm-prevnext-thumb { - position: relative; flex: 0 0 80px; width: 80px; height: 80px; - border-radius: 16px; overflow: hidden; background: #f1f5f9; - } - .dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; } - .dm-prevnext-next { text-align: right; } - .dm-prevnext-next .dm-prevnext-text { align-items: flex-end; } - .dm-prevnext-label { - display: inline-flex; align-items: center; gap: 6px; - font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red); - } - .dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; } - .dm-prevnext-title { - font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); } - - /* Related */ - .dm-related-heading { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important; - line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px; - } - .dm-related-grid { - display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; - } - @media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } } - @media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } } - - .dm-related-card { - display: flex; flex-direction: column; height: 100%; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none; - transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease; - } - .dm-related-card:hover { - transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13); - border-color: rgba(192,18,39,0.2); - } - .dm-related-img { - position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9; - } - .dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-img img { transform: scale(1.05); } - .dm-related-badge { - position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff; - font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px; - padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25); - } - .dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; } - .dm-related-card-title { - font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important; - letter-spacing: -.2px !important; margin: 0 0 10px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-related-card:hover .dm-related-card-title { color: var(--dm-red); } - .dm-related-card-excerpt { - font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - } - .dm-related-readmore { - margin-top: auto; display: inline-flex; align-items: center; gap: 7px; - font-size: 12.5px; font-weight: 800; color: var(--dm-red); - text-transform: uppercase; letter-spacing: .6px; - } - .dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); } - - /* Contact CTA banner */ - .dm-blog-contact-cta { - display: flex; align-items: center; justify-content: space-between; gap: 32px; - flex-wrap: wrap; - background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%); - border-radius: 30px; padding: clamp(32px, 4vw, 56px); - position: relative; overflow: hidden; - } - .dm-blog-contact-cta::after { - content: ""; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px; - background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%); - pointer-events: none; - } - .dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; } - .dm-blog-contact-eyebrow { - display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase; - letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px; - } - .dm-blog-contact-title { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important; - letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance; - } - .dm-blog-contact-sub { - font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450; - } - .dm-blog-contact-btn { - position: relative; z-index: 1; flex-shrink: 0; - display: inline-flex; align-items: center; justify-content: center; gap: 10px; - background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700; - padding: 16px 32px; border-radius: 16px; text-decoration: none; - box-shadow: 0 10px 26px rgba(192,18,39,0.34); - transition: background .2s ease, transform .2s ease; - } - .dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } - @media (max-width: 720px) { - .dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; } - .dm-blog-contact-btn { width: 100%; } - } -1a:["$","section",null,{"className":"dm-blog-footer","aria-label":"More articles","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$25"}}],"$L26"]}] -27:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"Image"] -28:I[23096,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"default"] -1d:["$","$L1c","6",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"During peak traffic hours in Hyderabad, some vehicles were arriving 20 to 30 minutes later than planned. By adjusting routes based on live traffic and battery levels, the hub reduced missed delivery windows and improved on-time performance."}]}] -1e:["$","$L1c","7",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","figure",null,{"className":"dm-article-figure","children":[["$","span",null,{"className":"dm-article-figure-img","children":["$","$L27",null,{"src":"/images/ev-paradox.webp","alt":"Electric delivery vehicle routing visualisation","fill":true,"sizes":"(max-width: 768px) 100vw, 760px","style":{"objectFit":"cover"}}]}],["$","figcaption",null,{"children":"EV route plans need to account for range, load, traffic, and charging time before riders leave the hub."}]]}]}] -1f:["$","$L1c","8",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","blockquote",null,{"className":"dm-article-quote","children":[["$","p",null,{"children":"With EVs, a route is only useful if the vehicle can finish it and still return safely."}],["$","cite",null,{"children":"Doormile Operations"}]]}]}] -20:["$","$L1c","9",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"What this means for operators"}]}] -21:["$","$L1c","10",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"For a fleet manager, this is not about fancy software. It is about fewer emergency calls, fewer mid-route swaps, and fewer customers asking why their delivery missed the promised window."}]}] -22:["$","$L1c","11",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ol",null,{"className":"dm-article-ol","children":[["$","li","0",{"children":"Record delivery times, failed attempts, traffic delays, and charging cycles."}],["$","li","1",{"children":"Build travel-time estimates from the areas your riders actually serve."}],["$","li","2",{"children":"Check every route against battery capacity before dispatch."}],["$","li","3",{"children":"Replan when traffic, orders, or vehicle availability changes."}]]}]}] -23:["$","$L1c","12",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The fleets that improve fastest are usually not the ones adding vehicles first. They are the ones removing wasted distance, planning charging properly, and giving riders routes they can complete on time."}]}] -24:["$","div",null,{"className":"dm-blog-aside-wrap","children":["$","aside",null,{"className":"dm-blog-sidebar","aria-label":"Blog sidebar","children":[["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Search"}],["$","$L28",null,{}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Recent Posts"}],["$","ul",null,{"className":"dm-blog-recent","children":[["$","li","42-less-distance-insights-from-our-hyderabad-hub",{"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","time",null,{"dateTime":"2025-09-18","className":"dm-blog-recent-date","children":"Sep 18, 2025"}]]}]]}]}],["$","li","miletruth-ai-10-stages-to-smarter-dispatch",{"children":["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","time",null,{"dateTime":"2025-09-05","className":"dm-blog-recent-date","children":"Sep 5, 2025"}]]}]]}]}],["$","li","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"children":["$","$L1b",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","time",null,{"dateTime":"2025-08-21","className":"dm-blog-recent-date","children":"Aug 21, 2025"}]]}]]}]}],["$","li","why-mathematical-precision-beats-heuristics-in-routing",{"children":["$","$L1b",null,{"href":"/blog/why-mathematical-precision-beats-heuristics-in-routing","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-14.webp","alt":"Why Mathematical Precision Beats Heuristics in Routing","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"Why Mathematical Precision Beats Heuristics in Routing"}],["$","time",null,{"dateTime":"2025-08-07","className":"dm-blog-recent-date","children":"Aug 7, 2025"}]]}]]}]}]]}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Categories"}],["$","ul",null,{"className":"dm-blog-categories","children":[["$","li","Case Study",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Case Study"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","EV Fleet",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"EV Fleet"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}],["$","li","Fleet Management",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Fleet Management"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","MileTruth",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"MileTruth"}],"$L29"]}]}],"$L2a","$L2b","$L2c"]}]]}],"$L2d"]}]}] -26:["$","div",null,{"className":"dm-blog-footer-inner","children":[["$","nav",null,{"className":"dm-prevnext","aria-label":"Article navigation","children":[["$","span",null,{"className":"dm-prevnext-placeholder"}],["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-prevnext-card dm-prevnext-next","children":[["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":["Next",["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Case Study"}],["$","span",null,{"className":"dm-prevnext-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}]]}],["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}]]}]]}],["$","div",null,{"className":"dm-related","children":[["$","h2",null,{"className":"dm-related-heading","children":"Related Articles"}],["$","div",null,{"className":"dm-related-grid","children":[["$","$L1c","why-mathematical-precision-beats-heuristics-in-routing",{"delay":0,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/why-mathematical-precision-beats-heuristics-in-routing","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-14.webp","alt":"Why Mathematical Precision Beats Heuristics in Routing","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Technology"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"Why Mathematical Precision Beats Heuristics in Routing"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"Fixed routing rules are easy to start with, but they often miss better stop sequences as order volume grows."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L1c","42-less-distance-insights-from-our-hyderabad-hub",{"delay":0.08,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Case Study"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L1c","miletruth-ai-10-stages-to-smarter-dispatch",{"delay":0.16,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-related-card","children":["$L2e","$L2f"]}]}]]}]]}],"$L30"]}] -29:["$","span",null,{"className":"dm-blog-category-count","children":1}] -2a:["$","li","Operations",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Operations"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2b:["$","li","Sustainability",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Sustainability"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2c:["$","li","Technology",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Technology"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}] -2d:["$","section",null,{"className":"dm-blog-widget dm-blog-cta-card","children":[["$","h2",null,{"className":"dm-blog-cta-title","children":"Planning delivery routes?"}],["$","p",null,{"className":"dm-blog-cta-text","children":"Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time."}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-cta-btn","children":["Contact Us",["$","svg",null,{"width":"18","height":"18","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -2e:["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"MileTruth"}]]}] -2f:["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -30:["$","div",null,{"className":"dm-blog-contact-cta","children":[["$","div",null,{"className":"dm-blog-contact-cta-content","children":[["$","span",null,{"className":"dm-blog-contact-eyebrow","children":"Let's talk logistics"}],["$","h2",null,{"className":"dm-blog-contact-title","children":"Ready to move smarter with Doormile?"}],["$","p",null,{"className":"dm-blog-contact-sub","children":"Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding."}]]}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-contact-btn","children":["Get in Touch",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -12:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -31:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -f:null -14:[["$","title","0",{"children":"How Better Planning Improves Last-Mile EV Delivery – Doormile"}],["$","meta","1",{"name":"description","content":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","meta","2",{"name":"author","content":"Doormile Team"}],["$","meta","3",{"name":"keywords","content":"Technology,last-mile logistics,EV fleet,MileTruth,route optimisation"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","link","5",{"rel":"canonical","href":"https://www.doormile.com/blog/how-ai-is-transforming-last-mile-ev-delivery"}],["$","meta","6",{"property":"og:title","content":"How Better Planning Improves Last-Mile EV Delivery"}],["$","meta","7",{"property":"og:description","content":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","meta","8",{"property":"og:url","content":"https://www.doormile.com/blog/how-ai-is-transforming-last-mile-ev-delivery"}],["$","meta","9",{"property":"og:site_name","content":"Doormile"}],["$","meta","10",{"property":"og:image","content":"https://www.doormile.com/images/blog-post-pic-17.webp"}],["$","meta","11",{"property":"og:image:alt","content":"How Better Planning Improves Last-Mile EV Delivery"}],["$","meta","12",{"property":"og:type","content":"article"}],["$","meta","13",{"property":"article:published_time","content":"2025-10-02T00:00:00.000Z"}],["$","meta","14",{"property":"article:author","content":"Doormile Team"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"How Better Planning Improves Last-Mile EV Delivery"}],["$","meta","17",{"name":"twitter:description","content":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","meta","18",{"name":"twitter:image","content":"https://www.doormile.com/images/blog-post-pic-17.webp"}],["$","link","19",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","21",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","22",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L31","23",{}]] diff --git a/build/blog/how-ai-is-transforming-last-mile-ev-delivery/__next._full.txt b/build/blog/how-ai-is-transforming-last-mile-ev-delivery/__next._full.txt deleted file mode 100644 index e4ac319..0000000 --- a/build/blog/how-ai-is-transforming-last-mile-ev-delivery/__next._full.txt +++ /dev/null @@ -1,545 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -d:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -e:"$Sreact.suspense" -11:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -13:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -15:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","blog","how-ai-is-transforming-last-mile-ev-delivery"],"q":"","i":false,"f":[[["",{"children":["blog",{"children":[["slug","how-ai-is-transforming-last-mile-ev-delivery","d",null],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":["$Lc",[["$","script","script-0",{"src":"/_next/static/chunks/0yvxf3ok9gcp_.js","async":true,"nonce":"$undefined"}]],["$","$Ld",null,{"children":["$","$e",null,{"name":"Next.MetadataOutlet","children":"$@f"}]}]]}],{},null,false,null]},null,false,"$@10"]},null,false,"$@10"]},null,false,null],["$","$1","h",{"children":[null,["$","$L11",null,{"children":"$L12"}],["$","div",null,{"hidden":true,"children":["$","$L13",null,{"children":["$","$e",null,{"name":"Next.Metadata","children":"$L14"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$15",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -16:[] -10:"$W16" -:HL["/images/blog-post-pic-17.webp","image"] -17:T3d6f, - .dm-single-blog { - --dm-red: #c01227; - --dm-red-hover: #e31d32; - --dm-radius-card: 22px; - --dm-radius-img: 20px; - --dm-radius-badge: 8px; - --dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05); - --dm-border: 1px solid rgba(15, 23, 42, 0.09); - --dm-space-p: 24px; - --dm-space-h: 32px; - --dm-space-img: 32px; - --dm-space-quote: 40px; - --dm-sticky-top: 138px; - --dm-measure: min(1100px, 100%); - font-family: var(--font-manrope), sans-serif; - } - - /* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6 - (120/80/60px UPPERCASE) rules with !important on our own classes. */ - .dm-single-blog :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline, - specificity 0-1-1) so blog links keep our colors and never get underlined. */ - .dm-single-blog a { text-decoration: none !important; } - - /* Page banner: tall homepage-scale frame with only badge + title inside */ - /* Compound selector (specificity 20) + !important beats the global 800px - single-class height rules so the blog banner can use viewport heights. */ - .custom-standard-hero-card.dm-banner-card { - height: 90vh !important; - min-height: 85vh !important; - } - @media (max-width: 1024px) { - .custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; } - } - @media (max-width: 600px) { - .custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; } - } - - .dm-banner-inner { - position: relative; width: 100%; height: 100%; - display: flex; flex-direction: column; align-items: center; justify-content: center; - text-align: center; gap: clamp(22px, 2.6vw, 34px); - padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px); - } - - .dm-banner-category { - display: inline-block; background: var(--dm-red); color: #fff; - font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px; - padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45); - } - .dm-banner-title { - font-family: var(--font-manrope), sans-serif !important; - font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important; - line-height: 1.16 !important; letter-spacing: -1.2px !important; - color: #ffffff !important; margin: 0; max-width: 820px; - text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38); - } - @media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } } - @media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } } - - /* Content wrap begins immediately below the banner */ - /* Shared content container: the SAME max-width + horizontal padding is used - by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings, - images, Prev/Next, Related Articles and the CTA banner all align to one - grid with identical left/right edges. Keep both in sync. */ - .dm-blog-wrap { - max-width: 1280px; margin: 0 auto; - /* 20px mobile padding floor → 40px on desktop; matches the footer container. */ - padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0; - } - @media (max-width: 767px) { - .dm-blog-wrap { - padding-left: 16px; - padding-right: 16px; - } - } - - /* ── Article meta bar (directly under the hero) ── */ - .dm-meta-bar { - display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px; - padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px); - border-bottom: 1px solid rgba(15,23,42,0.10); - } - .dm-meta-breadcrumb ol { - list-style: none; display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b; - } - .dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; } - .dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; } - .dm-meta-sep { color: #cbd5e1; } - .dm-meta-current { - color: #0f172a; font-weight: 700; - max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - } - @media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } } - .dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; } - .dm-meta-item { - display: inline-flex; align-items: center; gap: 7px; - font-size: 13.5px; font-weight: 600; color: #475569; - } - .dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; } - .dm-meta-author { color: #0f172a; font-weight: 700; } - @media (max-width: 600px) { .dm-meta-bar { gap: 12px; } } - .dm-blog-layout { - display: grid; grid-template-columns: minmax(0,1fr) 320px; - /* Tighter gap gives the reading column more room next to the 320px sidebar. */ - gap: clamp(28px, 3vw, 56px); align-items: start; - } - @media (max-width: 1024px) { - .dm-blog-layout { grid-template-columns: 1fr; gap: 48px; } - /* Single-column (tablet/mobile): cap the reading column and centre it so the - article never sits left-aligned with a large empty right gutter. */ - .dm-blog-main { max-width: 900px; margin-inline: auto; } - } - .dm-blog-main { min-width: 0; } - - /* ── Intro lead ── */ - .dm-blog-intro { - max-width: var(--dm-measure); - font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500; - color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px; - border-left: 3px solid var(--dm-red); - } - - /* ── Article body ── */ - .dm-article-body { max-width: var(--dm-measure); } - .dm-article-p { - font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450; - margin: 0 0 var(--dm-space-p); - } - .dm-article-h2 { - font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important; - color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h); - text-wrap: balance; - } - /* Each article block is wrapped in its OWN ScrollReveal
    , so a bare - :first-child rule matched every heading (each is the only child of its - wrapper) and zeroed its top margin, collapsing the gap above every - section heading. Scope the reset to only the article body's first block. */ - .dm-article-body > :first-child :where(.dm-article-h2, .dm-article-h3), - .dm-article-body > .dm-article-h2:first-child, - .dm-article-body > .dm-article-h3:first-child { margin-top: 0; } - .dm-article-h3 { - font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important; - color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px; - text-wrap: balance; - } - @media (max-width: 600px) { - .dm-article-p { font-size: 16px !important; } - .dm-article-ul li, .dm-article-ol li { font-size: 15.5px; } - .dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; } - .dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; } - } - - .dm-article-ul, .dm-article-ol { - /* Top margin (was 0) separates the list from the paragraph above it; - matching bottom margin keeps it clear of the next heading/paragraph. - Slightly larger than --dm-space-p so the list reads as its own block. */ - margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px); - padding-left: 2px; list-style: none; - display: flex; flex-direction: column; gap: 15px; - } - /* Prefixed with .dm-article-body so these beat the theme's global - ".logico-front-end ul li:before" fontello-glyph bullet (specificity 0,1,3), - which otherwise replaces our clean red dot with a misaligned checkmark glyph - and adds its own 1.7em indent. */ - .dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li { - position: relative; padding-left: 34px; - font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450; - } - .dm-article-body .dm-article-ul li::before { - content: ""; position: absolute; left: 7px; top: 10px; - width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red); - /* kill any inherited fontello glyph from the global rule */ - font-size: 0; line-height: 0; - } - .dm-article-ol { counter-reset: dm-li; } - .dm-article-body .dm-article-ol li { counter-increment: dm-li; } - .dm-article-body .dm-article-ol li::before { - content: counter(dm-li); position: absolute; left: 0; top: 0; - width: 24px; height: 24px; border-radius: 7px; - background: rgba(192,18,39,0.10); color: var(--dm-red); - font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; - } - - /* ── Quote ── */ - .dm-article-quote { - position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px; - background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%); - border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0; - box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06); - } - .dm-article-quote::before { - content: "\201C"; position: absolute; left: 22px; top: 8px; - font-family: Georgia, "Times New Roman", serif; - font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700; - } - .dm-article-quote p { - font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600; - font-style: italic; color: #1e293b; margin: 0; - } - .dm-article-quote cite { - display: block; margin-top: 16px; font-size: 13px; font-weight: 700; - font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px; - } - @media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } } - - /* ── Images ── */ - .dm-article-figure { margin: var(--dm-space-img) 0; } - .dm-article-figure-img { - position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; - border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10); - } - .dm-article-figure figcaption { - margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500; - text-align: center; font-style: italic; - } - - /* ── Sidebar ── */ - .dm-blog-aside-wrap { position: relative; } - .dm-blog-sidebar { - display: flex; flex-direction: column; gap: 18px; - position: sticky; top: var(--dm-sticky-top); - } - @media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } } - - .dm-blog-widget { - background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card); - padding: 20px; box-shadow: var(--dm-shadow-card); - } - .dm-blog-widget-title { - font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important; - letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important; - margin: 0 0 15px; padding: 0 0 12px; - border-bottom: 1px solid rgba(15,23,42,0.08); - overflow: visible; white-space: normal; word-break: normal; - } - - /* Search */ - .dm-sr-only { - position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; - overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; - } - .dm-blog-search { position: relative; } - .dm-blog-search-form { position: relative; } - .dm-blog-search-input { - width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px; - padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a; - background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; - } - .dm-blog-search-input::placeholder { color: #9c9c9c; } - .dm-blog-search-input:focus { - outline: none; border-color: var(--dm-red); background: #fff; - box-shadow: 0 0 0 3px rgba(192,18,39,0.11); - } - .dm-blog-search-icon { - position: absolute; right: 14px; top: 50%; transform: translateY(-50%); - color: #94a3b8; pointer-events: none; display: flex; - } - .dm-blog-search-results { - position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0; - background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px; - box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden; - } - .dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; } - .dm-blog-search-result { - display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; - border-radius: 10px; text-decoration: none; transition: background .15s ease; - } - .dm-blog-search-result:hover { background: #f8fafc; } - .dm-blog-search-result-cat { - font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red); - } - .dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; } - .dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; } - - /* Recent posts */ - .dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; } - .dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; } - .dm-blog-recent-thumb { - position: relative; flex: 0 0 62px; width: 62px; height: 62px; - border-radius: 13px; overflow: hidden; background: #f1f5f9; - } - .dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; } - .dm-blog-recent-title { - font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); } - .dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; } - - /* Categories */ - .dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; } - .dm-blog-category-item { - display: flex; align-items: center; justify-content: space-between; gap: 10px; - padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important; - border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease; - } - .dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; } - .dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; } - .dm-blog-category-item > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .dm-blog-category-count { - flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9; - min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex; - align-items: center; justify-content: center; padding: 0 7px; - } - - /* CTA card */ - .dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; } - .dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; } - .dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; } - .dm-blog-cta-btn { - display: inline-flex; align-items: center; gap: 8px; - background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700; - padding: 12px 22px; border-radius: 12px; text-decoration: none; - transition: background .2s ease, transform .2s ease; - } - .dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } -c:["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"headline\":\"How Better Planning Improves Last-Mile EV Delivery\",\"description\":\"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles.\",\"image\":[\"https://www.doormile.com/images/blog-post-pic-17.webp\"],\"datePublished\":\"2025-10-02T00:00:00.000Z\",\"dateModified\":\"2025-10-02T00:00:00.000Z\",\"author\":{\"@type\":\"Organization\",\"name\":\"Doormile Team\",\"url\":\"https://www.doormile.com\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Doormile\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.doormile.com/images/cropped-image-2.png\"}},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.doormile.com/blog/how-ai-is-transforming-last-mile-ev-delivery\"},\"articleSection\":\"Technology\"}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://www.doormile.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https://www.doormile.com/blog\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How Better Planning Improves Last-Mile EV Delivery\",\"item\":\"https://www.doormile.com/blog/how-ai-is-transforming-last-mile-ev-delivery\"}]}"}}],["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":[["$","article",null,{"className":"dm-single-blog","children":[["$","link",null,{"rel":"preload","as":"image","href":"/images/blog-post-pic-17.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$17"}}],"$L18","$L19"]}],"$L1a"]}]}]]}] -1b:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],""] -1c:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"ScrollReveal"] -18:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card dm-banner-card","style":{"backgroundImage":"url(/images/blog-post-pic-17.webp)","--hero-overlay":"linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)"},"children":["$","div",null,{"className":"e-con-inner dm-banner-inner","children":[["$","span",null,{"className":"dm-banner-category","children":"Technology"}],["$","h1",null,{"className":"dm-banner-title","children":"How Better Planning Improves Last-Mile EV Delivery"}]]}]}]}] -19:["$","div",null,{"className":"dm-blog-wrap","children":[["$","div",null,{"className":"dm-meta-bar","children":[["$","nav",null,{"className":"dm-meta-breadcrumb","aria-label":"Breadcrumb","children":["$","ol",null,{"children":[["$","li",null,{"children":["$","$L1b",null,{"href":"/","children":"Home"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"children":["$","$L1b",null,{"href":"/blog","children":"Blog"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"aria-current":"page","className":"dm-meta-current","children":"How Better Planning Improves Last-Mile EV Delivery"}]]}]}],["$","div",null,{"className":"dm-meta-items","children":[["$","span",null,{"className":"dm-meta-item dm-meta-author","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","path",null,{"d":"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}],["$","circle",null,{"cx":"12","cy":"7","r":"4"}]]}],"Doormile Team"]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"2"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}]]}],["$","time",null,{"dateTime":"2025-10-02","children":"Oct 2, 2025"}]]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","circle",null,{"cx":"12","cy":"12","r":"9"}],["$","polyline",null,{"points":"12 7 12 12 15 14"}]]}],2," min read"]}]]}]]}],["$","div",null,{"className":"dm-blog-layout","children":[["$","div",null,{"className":"dm-blog-main","children":[["$","p",null,{"className":"dm-blog-intro","children":"The last mile is already difficult to plan. With electric vehicles, the team also has to think about battery range, charging time, rider load, traffic, and delivery windows. Good planning turns those moving parts into a workable dispatch plan."}],["$","div",null,{"className":"dm-article-body","children":[["$","$L1c","0",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"For a long time, last-mile planning depended on dispatchers, spreadsheets, and local experience. That experience still matters. The problem is that it gets stretched thin when order volume rises and the fleet includes EVs."}]}],["$","$L1c","1",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"The shift from fixed rules to daily planning"}]}],["$","$L1c","2",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"A fixed-zone plan may look clean in the morning, but the road rarely follows the plan. A rider may get delayed near Hitec City, a gated community may hold a vehicle for ten extra minutes, or a battery may drain faster because the load is heavier than usual."}]}],["$","$L1c","3",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"Order volumes by area, time slot, and customer type"}],["$","li","1",{"children":"Travel times based on the city's actual traffic patterns"}],["$","li","2",{"children":"Battery use by vehicle type, rider load, and route length"}],["$","li","3",{"children":"Feedback from completed deliveries, failed attempts, and late arrivals"}]]}]}],["$","$L1c","4",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"Adjusting during the day"}]}],["$","$L1c","5",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The first plan is only the starting point. By 11 a.m., traffic may change, a high-priority order may arrive, or one vehicle may return with less charge than expected. The dispatch team needs a way to adjust without rebuilding the whole day by hand."}]}],"$L1d","$L1e","$L1f","$L20","$L21","$L22","$L23"]}]]}],"$L24"]}]]}] -25:T2021, - .dm-blog-footer { - font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32; - /* The global theme applies 72px top/bottom section padding — strip it so the - inner container is the single source of vertical rhythm (no double gap). */ - padding: 0 !important; - } - /* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */ - .dm-blog-footer :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline) */ - .dm-blog-footer a { text-decoration: none !important; } - /* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px - max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA - align to the exact same left/right edges as the article body above. - Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a - consistent ~64–72px section→section gap (no 120px+ voids). */ - .dm-blog-footer-inner { - max-width: 1280px; margin: 0 auto; - /* Compact vertical rhythm on an 8px system. Top padding sets the - article→Prev/Next gap (~24–32px); the inter-section gap sets the - Prev/Next→Related gap (~32–48px). No large arbitrary voids. */ - /* Minimal bottom padding — the global site footer already contributes its - own 20px top inset, so the CTA banner sits close to it without a void. */ - padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px); - display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px); - } - @media (max-width: 767px) { - .dm-blog-footer-inner { - padding-left: 16px; - padding-right: 16px; - } - } - - /* Prev / Next */ - .dm-prevnext { - display: grid; grid-template-columns: 1fr 1fr; gap: 20px; - /* Halved from 40px: tight divider→cards spacing without crowding. */ - padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08); - } - @media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } } - .dm-prevnext-placeholder { display: block; } - .dm-prevnext-card { - display: flex; gap: 16px; align-items: center; padding: 16px; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; - } - .dm-prevnext-card:hover { - transform: translateY(-4px); border-color: rgba(192,18,39,0.2); - box-shadow: 0 16px 34px rgba(192,18,39,0.10); - } - .dm-prevnext-thumb { - position: relative; flex: 0 0 80px; width: 80px; height: 80px; - border-radius: 16px; overflow: hidden; background: #f1f5f9; - } - .dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; } - .dm-prevnext-next { text-align: right; } - .dm-prevnext-next .dm-prevnext-text { align-items: flex-end; } - .dm-prevnext-label { - display: inline-flex; align-items: center; gap: 6px; - font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red); - } - .dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; } - .dm-prevnext-title { - font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); } - - /* Related */ - .dm-related-heading { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important; - line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px; - } - .dm-related-grid { - display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; - } - @media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } } - @media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } } - - .dm-related-card { - display: flex; flex-direction: column; height: 100%; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none; - transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease; - } - .dm-related-card:hover { - transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13); - border-color: rgba(192,18,39,0.2); - } - .dm-related-img { - position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9; - } - .dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-img img { transform: scale(1.05); } - .dm-related-badge { - position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff; - font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px; - padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25); - } - .dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; } - .dm-related-card-title { - font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important; - letter-spacing: -.2px !important; margin: 0 0 10px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-related-card:hover .dm-related-card-title { color: var(--dm-red); } - .dm-related-card-excerpt { - font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - } - .dm-related-readmore { - margin-top: auto; display: inline-flex; align-items: center; gap: 7px; - font-size: 12.5px; font-weight: 800; color: var(--dm-red); - text-transform: uppercase; letter-spacing: .6px; - } - .dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); } - - /* Contact CTA banner */ - .dm-blog-contact-cta { - display: flex; align-items: center; justify-content: space-between; gap: 32px; - flex-wrap: wrap; - background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%); - border-radius: 30px; padding: clamp(32px, 4vw, 56px); - position: relative; overflow: hidden; - } - .dm-blog-contact-cta::after { - content: ""; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px; - background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%); - pointer-events: none; - } - .dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; } - .dm-blog-contact-eyebrow { - display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase; - letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px; - } - .dm-blog-contact-title { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important; - letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance; - } - .dm-blog-contact-sub { - font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450; - } - .dm-blog-contact-btn { - position: relative; z-index: 1; flex-shrink: 0; - display: inline-flex; align-items: center; justify-content: center; gap: 10px; - background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700; - padding: 16px 32px; border-radius: 16px; text-decoration: none; - box-shadow: 0 10px 26px rgba(192,18,39,0.34); - transition: background .2s ease, transform .2s ease; - } - .dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } - @media (max-width: 720px) { - .dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; } - .dm-blog-contact-btn { width: 100%; } - } -1a:["$","section",null,{"className":"dm-blog-footer","aria-label":"More articles","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$25"}}],"$L26"]}] -27:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"Image"] -28:I[23096,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"default"] -1d:["$","$L1c","6",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"During peak traffic hours in Hyderabad, some vehicles were arriving 20 to 30 minutes later than planned. By adjusting routes based on live traffic and battery levels, the hub reduced missed delivery windows and improved on-time performance."}]}] -1e:["$","$L1c","7",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","figure",null,{"className":"dm-article-figure","children":[["$","span",null,{"className":"dm-article-figure-img","children":["$","$L27",null,{"src":"/images/ev-paradox.webp","alt":"Electric delivery vehicle routing visualisation","fill":true,"sizes":"(max-width: 768px) 100vw, 760px","style":{"objectFit":"cover"}}]}],["$","figcaption",null,{"children":"EV route plans need to account for range, load, traffic, and charging time before riders leave the hub."}]]}]}] -1f:["$","$L1c","8",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","blockquote",null,{"className":"dm-article-quote","children":[["$","p",null,{"children":"With EVs, a route is only useful if the vehicle can finish it and still return safely."}],["$","cite",null,{"children":"Doormile Operations"}]]}]}] -20:["$","$L1c","9",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"What this means for operators"}]}] -21:["$","$L1c","10",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"For a fleet manager, this is not about fancy software. It is about fewer emergency calls, fewer mid-route swaps, and fewer customers asking why their delivery missed the promised window."}]}] -22:["$","$L1c","11",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ol",null,{"className":"dm-article-ol","children":[["$","li","0",{"children":"Record delivery times, failed attempts, traffic delays, and charging cycles."}],["$","li","1",{"children":"Build travel-time estimates from the areas your riders actually serve."}],["$","li","2",{"children":"Check every route against battery capacity before dispatch."}],["$","li","3",{"children":"Replan when traffic, orders, or vehicle availability changes."}]]}]}] -23:["$","$L1c","12",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The fleets that improve fastest are usually not the ones adding vehicles first. They are the ones removing wasted distance, planning charging properly, and giving riders routes they can complete on time."}]}] -24:["$","div",null,{"className":"dm-blog-aside-wrap","children":["$","aside",null,{"className":"dm-blog-sidebar","aria-label":"Blog sidebar","children":[["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Search"}],["$","$L28",null,{}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Recent Posts"}],["$","ul",null,{"className":"dm-blog-recent","children":[["$","li","42-less-distance-insights-from-our-hyderabad-hub",{"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","time",null,{"dateTime":"2025-09-18","className":"dm-blog-recent-date","children":"Sep 18, 2025"}]]}]]}]}],["$","li","miletruth-ai-10-stages-to-smarter-dispatch",{"children":["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","time",null,{"dateTime":"2025-09-05","className":"dm-blog-recent-date","children":"Sep 5, 2025"}]]}]]}]}],["$","li","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"children":["$","$L1b",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","time",null,{"dateTime":"2025-08-21","className":"dm-blog-recent-date","children":"Aug 21, 2025"}]]}]]}]}],["$","li","why-mathematical-precision-beats-heuristics-in-routing",{"children":["$","$L1b",null,{"href":"/blog/why-mathematical-precision-beats-heuristics-in-routing","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-14.webp","alt":"Why Mathematical Precision Beats Heuristics in Routing","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"Why Mathematical Precision Beats Heuristics in Routing"}],["$","time",null,{"dateTime":"2025-08-07","className":"dm-blog-recent-date","children":"Aug 7, 2025"}]]}]]}]}]]}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Categories"}],["$","ul",null,{"className":"dm-blog-categories","children":[["$","li","Case Study",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Case Study"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","EV Fleet",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"EV Fleet"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}],["$","li","Fleet Management",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Fleet Management"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","MileTruth",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"MileTruth"}],"$L29"]}]}],"$L2a","$L2b","$L2c"]}]]}],"$L2d"]}]}] -26:["$","div",null,{"className":"dm-blog-footer-inner","children":[["$","nav",null,{"className":"dm-prevnext","aria-label":"Article navigation","children":[["$","span",null,{"className":"dm-prevnext-placeholder"}],["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-prevnext-card dm-prevnext-next","children":[["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":["Next",["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Case Study"}],["$","span",null,{"className":"dm-prevnext-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}]]}],["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}]]}]]}],["$","div",null,{"className":"dm-related","children":[["$","h2",null,{"className":"dm-related-heading","children":"Related Articles"}],["$","div",null,{"className":"dm-related-grid","children":[["$","$L1c","why-mathematical-precision-beats-heuristics-in-routing",{"delay":0,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/why-mathematical-precision-beats-heuristics-in-routing","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-14.webp","alt":"Why Mathematical Precision Beats Heuristics in Routing","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Technology"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"Why Mathematical Precision Beats Heuristics in Routing"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"Fixed routing rules are easy to start with, but they often miss better stop sequences as order volume grows."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L1c","42-less-distance-insights-from-our-hyderabad-hub",{"delay":0.08,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Case Study"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L1c","miletruth-ai-10-stages-to-smarter-dispatch",{"delay":0.16,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-related-card","children":["$L2e","$L2f"]}]}]]}]]}],"$L30"]}] -29:["$","span",null,{"className":"dm-blog-category-count","children":1}] -2a:["$","li","Operations",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Operations"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2b:["$","li","Sustainability",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Sustainability"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2c:["$","li","Technology",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Technology"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}] -2d:["$","section",null,{"className":"dm-blog-widget dm-blog-cta-card","children":[["$","h2",null,{"className":"dm-blog-cta-title","children":"Planning delivery routes?"}],["$","p",null,{"className":"dm-blog-cta-text","children":"Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time."}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-cta-btn","children":["Contact Us",["$","svg",null,{"width":"18","height":"18","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -2e:["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"MileTruth"}]]}] -2f:["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -30:["$","div",null,{"className":"dm-blog-contact-cta","children":[["$","div",null,{"className":"dm-blog-contact-cta-content","children":[["$","span",null,{"className":"dm-blog-contact-eyebrow","children":"Let's talk logistics"}],["$","h2",null,{"className":"dm-blog-contact-title","children":"Ready to move smarter with Doormile?"}],["$","p",null,{"className":"dm-blog-contact-sub","children":"Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding."}]]}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-contact-btn","children":["Get in Touch",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -12:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -31:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -f:null -14:[["$","title","0",{"children":"How Better Planning Improves Last-Mile EV Delivery – Doormile"}],["$","meta","1",{"name":"description","content":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","meta","2",{"name":"author","content":"Doormile Team"}],["$","meta","3",{"name":"keywords","content":"Technology,last-mile logistics,EV fleet,MileTruth,route optimisation"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","link","5",{"rel":"canonical","href":"https://www.doormile.com/blog/how-ai-is-transforming-last-mile-ev-delivery"}],["$","meta","6",{"property":"og:title","content":"How Better Planning Improves Last-Mile EV Delivery"}],["$","meta","7",{"property":"og:description","content":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","meta","8",{"property":"og:url","content":"https://www.doormile.com/blog/how-ai-is-transforming-last-mile-ev-delivery"}],["$","meta","9",{"property":"og:site_name","content":"Doormile"}],["$","meta","10",{"property":"og:image","content":"https://www.doormile.com/images/blog-post-pic-17.webp"}],["$","meta","11",{"property":"og:image:alt","content":"How Better Planning Improves Last-Mile EV Delivery"}],["$","meta","12",{"property":"og:type","content":"article"}],["$","meta","13",{"property":"article:published_time","content":"2025-10-02T00:00:00.000Z"}],["$","meta","14",{"property":"article:author","content":"Doormile Team"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"How Better Planning Improves Last-Mile EV Delivery"}],["$","meta","17",{"name":"twitter:description","content":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","meta","18",{"name":"twitter:image","content":"https://www.doormile.com/images/blog-post-pic-17.webp"}],["$","link","19",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","21",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","22",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L31","23",{}]] diff --git a/build/blog/how-ai-is-transforming-last-mile-ev-delivery/__next._head.txt b/build/blog/how-ai-is-transforming-last-mile-ev-delivery/__next._head.txt deleted file mode 100644 index 23b2374..0000000 --- a/build/blog/how-ai-is-transforming-last-mile-ev-delivery/__next._head.txt +++ /dev/null @@ -1,6 +0,0 @@ -1:"$Sreact.fragment" -2:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -3:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -4:"$Sreact.suspense" -5:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"How Better Planning Improves Last-Mile EV Delivery – Doormile"}],["$","meta","1",{"name":"description","content":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","meta","2",{"name":"author","content":"Doormile Team"}],["$","meta","3",{"name":"keywords","content":"Technology,last-mile logistics,EV fleet,MileTruth,route optimisation"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","link","5",{"rel":"canonical","href":"https://www.doormile.com/blog/how-ai-is-transforming-last-mile-ev-delivery"}],["$","meta","6",{"property":"og:title","content":"How Better Planning Improves Last-Mile EV Delivery"}],["$","meta","7",{"property":"og:description","content":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","meta","8",{"property":"og:url","content":"https://www.doormile.com/blog/how-ai-is-transforming-last-mile-ev-delivery"}],["$","meta","9",{"property":"og:site_name","content":"Doormile"}],["$","meta","10",{"property":"og:image","content":"https://www.doormile.com/images/blog-post-pic-17.webp"}],["$","meta","11",{"property":"og:image:alt","content":"How Better Planning Improves Last-Mile EV Delivery"}],["$","meta","12",{"property":"og:type","content":"article"}],["$","meta","13",{"property":"article:published_time","content":"2025-10-02T00:00:00.000Z"}],["$","meta","14",{"property":"article:author","content":"Doormile Team"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"How Better Planning Improves Last-Mile EV Delivery"}],["$","meta","17",{"name":"twitter:description","content":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","meta","18",{"name":"twitter:image","content":"https://www.doormile.com/images/blog-post-pic-17.webp"}],["$","link","19",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","21",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","22",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L5","23",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/how-ai-is-transforming-last-mile-ev-delivery/__next._index.txt b/build/blog/how-ai-is-transforming-last-mile-ev-delivery/__next._index.txt deleted file mode 100644 index d0b3355..0000000 --- a/build/blog/how-ai-is-transforming-last-mile-ev-delivery/__next._index.txt +++ /dev/null @@ -1,15 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","template":["$","$La",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/how-ai-is-transforming-last-mile-ev-delivery/__next._tree.txt b/build/blog/how-ai-is-transforming-last-mile-ev-delivery/__next._tree.txt deleted file mode 100644 index 1bdf87d..0000000 --- a/build/blog/how-ai-is-transforming-last-mile-ev-delivery/__next._tree.txt +++ /dev/null @@ -1,10 +0,0 @@ -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -:HL["/images/blog-post-pic-17.webp","image"] -0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"blog","param":null,"prefetchHints":0,"slots":{"children":{"name":"slug","param":{"type":"d","key":"how-ai-is-transforming-last-mile-ev-delivery","siblings":null},"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/how-ai-is-transforming-last-mile-ev-delivery/__next.blog.$d$slug.__PAGE__.txt b/build/blog/how-ai-is-transforming-last-mile-ev-delivery/__next.blog.$d$slug.__PAGE__.txt deleted file mode 100644 index 725c261..0000000 --- a/build/blog/how-ai-is-transforming-last-mile-ev-delivery/__next.blog.$d$slug.__PAGE__.txt +++ /dev/null @@ -1,520 +0,0 @@ -1:"$Sreact.fragment" -8:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],""] -9:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"ScrollReveal"] -14:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -15:"$Sreact.suspense" -17:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"Image"] -18:I[23096,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"default"] -:HL["/images/blog-post-pic-17.webp","image"] -2:T3d6f, - .dm-single-blog { - --dm-red: #c01227; - --dm-red-hover: #e31d32; - --dm-radius-card: 22px; - --dm-radius-img: 20px; - --dm-radius-badge: 8px; - --dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05); - --dm-border: 1px solid rgba(15, 23, 42, 0.09); - --dm-space-p: 24px; - --dm-space-h: 32px; - --dm-space-img: 32px; - --dm-space-quote: 40px; - --dm-sticky-top: 138px; - --dm-measure: min(1100px, 100%); - font-family: var(--font-manrope), sans-serif; - } - - /* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6 - (120/80/60px UPPERCASE) rules with !important on our own classes. */ - .dm-single-blog :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline, - specificity 0-1-1) so blog links keep our colors and never get underlined. */ - .dm-single-blog a { text-decoration: none !important; } - - /* Page banner: tall homepage-scale frame with only badge + title inside */ - /* Compound selector (specificity 20) + !important beats the global 800px - single-class height rules so the blog banner can use viewport heights. */ - .custom-standard-hero-card.dm-banner-card { - height: 90vh !important; - min-height: 85vh !important; - } - @media (max-width: 1024px) { - .custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; } - } - @media (max-width: 600px) { - .custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; } - } - - .dm-banner-inner { - position: relative; width: 100%; height: 100%; - display: flex; flex-direction: column; align-items: center; justify-content: center; - text-align: center; gap: clamp(22px, 2.6vw, 34px); - padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px); - } - - .dm-banner-category { - display: inline-block; background: var(--dm-red); color: #fff; - font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px; - padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45); - } - .dm-banner-title { - font-family: var(--font-manrope), sans-serif !important; - font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important; - line-height: 1.16 !important; letter-spacing: -1.2px !important; - color: #ffffff !important; margin: 0; max-width: 820px; - text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38); - } - @media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } } - @media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } } - - /* Content wrap begins immediately below the banner */ - /* Shared content container: the SAME max-width + horizontal padding is used - by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings, - images, Prev/Next, Related Articles and the CTA banner all align to one - grid with identical left/right edges. Keep both in sync. */ - .dm-blog-wrap { - max-width: 1280px; margin: 0 auto; - /* 20px mobile padding floor → 40px on desktop; matches the footer container. */ - padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0; - } - @media (max-width: 767px) { - .dm-blog-wrap { - padding-left: 16px; - padding-right: 16px; - } - } - - /* ── Article meta bar (directly under the hero) ── */ - .dm-meta-bar { - display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px; - padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px); - border-bottom: 1px solid rgba(15,23,42,0.10); - } - .dm-meta-breadcrumb ol { - list-style: none; display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b; - } - .dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; } - .dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; } - .dm-meta-sep { color: #cbd5e1; } - .dm-meta-current { - color: #0f172a; font-weight: 700; - max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - } - @media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } } - .dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; } - .dm-meta-item { - display: inline-flex; align-items: center; gap: 7px; - font-size: 13.5px; font-weight: 600; color: #475569; - } - .dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; } - .dm-meta-author { color: #0f172a; font-weight: 700; } - @media (max-width: 600px) { .dm-meta-bar { gap: 12px; } } - .dm-blog-layout { - display: grid; grid-template-columns: minmax(0,1fr) 320px; - /* Tighter gap gives the reading column more room next to the 320px sidebar. */ - gap: clamp(28px, 3vw, 56px); align-items: start; - } - @media (max-width: 1024px) { - .dm-blog-layout { grid-template-columns: 1fr; gap: 48px; } - /* Single-column (tablet/mobile): cap the reading column and centre it so the - article never sits left-aligned with a large empty right gutter. */ - .dm-blog-main { max-width: 900px; margin-inline: auto; } - } - .dm-blog-main { min-width: 0; } - - /* ── Intro lead ── */ - .dm-blog-intro { - max-width: var(--dm-measure); - font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500; - color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px; - border-left: 3px solid var(--dm-red); - } - - /* ── Article body ── */ - .dm-article-body { max-width: var(--dm-measure); } - .dm-article-p { - font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450; - margin: 0 0 var(--dm-space-p); - } - .dm-article-h2 { - font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important; - color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h); - text-wrap: balance; - } - /* Each article block is wrapped in its OWN ScrollReveal
    , so a bare - :first-child rule matched every heading (each is the only child of its - wrapper) and zeroed its top margin, collapsing the gap above every - section heading. Scope the reset to only the article body's first block. */ - .dm-article-body > :first-child :where(.dm-article-h2, .dm-article-h3), - .dm-article-body > .dm-article-h2:first-child, - .dm-article-body > .dm-article-h3:first-child { margin-top: 0; } - .dm-article-h3 { - font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important; - color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px; - text-wrap: balance; - } - @media (max-width: 600px) { - .dm-article-p { font-size: 16px !important; } - .dm-article-ul li, .dm-article-ol li { font-size: 15.5px; } - .dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; } - .dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; } - } - - .dm-article-ul, .dm-article-ol { - /* Top margin (was 0) separates the list from the paragraph above it; - matching bottom margin keeps it clear of the next heading/paragraph. - Slightly larger than --dm-space-p so the list reads as its own block. */ - margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px); - padding-left: 2px; list-style: none; - display: flex; flex-direction: column; gap: 15px; - } - /* Prefixed with .dm-article-body so these beat the theme's global - ".logico-front-end ul li:before" fontello-glyph bullet (specificity 0,1,3), - which otherwise replaces our clean red dot with a misaligned checkmark glyph - and adds its own 1.7em indent. */ - .dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li { - position: relative; padding-left: 34px; - font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450; - } - .dm-article-body .dm-article-ul li::before { - content: ""; position: absolute; left: 7px; top: 10px; - width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red); - /* kill any inherited fontello glyph from the global rule */ - font-size: 0; line-height: 0; - } - .dm-article-ol { counter-reset: dm-li; } - .dm-article-body .dm-article-ol li { counter-increment: dm-li; } - .dm-article-body .dm-article-ol li::before { - content: counter(dm-li); position: absolute; left: 0; top: 0; - width: 24px; height: 24px; border-radius: 7px; - background: rgba(192,18,39,0.10); color: var(--dm-red); - font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; - } - - /* ── Quote ── */ - .dm-article-quote { - position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px; - background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%); - border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0; - box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06); - } - .dm-article-quote::before { - content: "\201C"; position: absolute; left: 22px; top: 8px; - font-family: Georgia, "Times New Roman", serif; - font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700; - } - .dm-article-quote p { - font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600; - font-style: italic; color: #1e293b; margin: 0; - } - .dm-article-quote cite { - display: block; margin-top: 16px; font-size: 13px; font-weight: 700; - font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px; - } - @media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } } - - /* ── Images ── */ - .dm-article-figure { margin: var(--dm-space-img) 0; } - .dm-article-figure-img { - position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; - border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10); - } - .dm-article-figure figcaption { - margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500; - text-align: center; font-style: italic; - } - - /* ── Sidebar ── */ - .dm-blog-aside-wrap { position: relative; } - .dm-blog-sidebar { - display: flex; flex-direction: column; gap: 18px; - position: sticky; top: var(--dm-sticky-top); - } - @media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } } - - .dm-blog-widget { - background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card); - padding: 20px; box-shadow: var(--dm-shadow-card); - } - .dm-blog-widget-title { - font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important; - letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important; - margin: 0 0 15px; padding: 0 0 12px; - border-bottom: 1px solid rgba(15,23,42,0.08); - overflow: visible; white-space: normal; word-break: normal; - } - - /* Search */ - .dm-sr-only { - position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; - overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; - } - .dm-blog-search { position: relative; } - .dm-blog-search-form { position: relative; } - .dm-blog-search-input { - width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px; - padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a; - background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; - } - .dm-blog-search-input::placeholder { color: #9c9c9c; } - .dm-blog-search-input:focus { - outline: none; border-color: var(--dm-red); background: #fff; - box-shadow: 0 0 0 3px rgba(192,18,39,0.11); - } - .dm-blog-search-icon { - position: absolute; right: 14px; top: 50%; transform: translateY(-50%); - color: #94a3b8; pointer-events: none; display: flex; - } - .dm-blog-search-results { - position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0; - background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px; - box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden; - } - .dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; } - .dm-blog-search-result { - display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; - border-radius: 10px; text-decoration: none; transition: background .15s ease; - } - .dm-blog-search-result:hover { background: #f8fafc; } - .dm-blog-search-result-cat { - font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red); - } - .dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; } - .dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; } - - /* Recent posts */ - .dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; } - .dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; } - .dm-blog-recent-thumb { - position: relative; flex: 0 0 62px; width: 62px; height: 62px; - border-radius: 13px; overflow: hidden; background: #f1f5f9; - } - .dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; } - .dm-blog-recent-title { - font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); } - .dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; } - - /* Categories */ - .dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; } - .dm-blog-category-item { - display: flex; align-items: center; justify-content: space-between; gap: 10px; - padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important; - border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease; - } - .dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; } - .dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; } - .dm-blog-category-item > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .dm-blog-category-count { - flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9; - min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex; - align-items: center; justify-content: center; padding: 0 7px; - } - - /* CTA card */ - .dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; } - .dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; } - .dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; } - .dm-blog-cta-btn { - display: inline-flex; align-items: center; gap: 8px; - background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700; - padding: 12px 22px; border-radius: 12px; text-decoration: none; - transition: background .2s ease, transform .2s ease; - } - .dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } -0:{"rsc":["$","$1","c",{"children":[["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"headline\":\"How Better Planning Improves Last-Mile EV Delivery\",\"description\":\"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles.\",\"image\":[\"https://www.doormile.com/images/blog-post-pic-17.webp\"],\"datePublished\":\"2025-10-02T00:00:00.000Z\",\"dateModified\":\"2025-10-02T00:00:00.000Z\",\"author\":{\"@type\":\"Organization\",\"name\":\"Doormile Team\",\"url\":\"https://www.doormile.com\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Doormile\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.doormile.com/images/cropped-image-2.png\"}},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.doormile.com/blog/how-ai-is-transforming-last-mile-ev-delivery\"},\"articleSection\":\"Technology\"}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://www.doormile.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https://www.doormile.com/blog\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How Better Planning Improves Last-Mile EV Delivery\",\"item\":\"https://www.doormile.com/blog/how-ai-is-transforming-last-mile-ev-delivery\"}]}"}}],["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":[["$","article",null,{"className":"dm-single-blog","children":[["$","link",null,{"rel":"preload","as":"image","href":"/images/blog-post-pic-17.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$2"}}],"$L3","$L4"]}],"$L5"]}]}]]}],["$L6"],"$L7"]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} -3:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card dm-banner-card","style":{"backgroundImage":"url(/images/blog-post-pic-17.webp)","--hero-overlay":"linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)"},"children":["$","div",null,{"className":"e-con-inner dm-banner-inner","children":[["$","span",null,{"className":"dm-banner-category","children":"Technology"}],["$","h1",null,{"className":"dm-banner-title","children":"How Better Planning Improves Last-Mile EV Delivery"}]]}]}]}] -4:["$","div",null,{"className":"dm-blog-wrap","children":[["$","div",null,{"className":"dm-meta-bar","children":[["$","nav",null,{"className":"dm-meta-breadcrumb","aria-label":"Breadcrumb","children":["$","ol",null,{"children":[["$","li",null,{"children":["$","$L8",null,{"href":"/","children":"Home"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"children":["$","$L8",null,{"href":"/blog","children":"Blog"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"aria-current":"page","className":"dm-meta-current","children":"How Better Planning Improves Last-Mile EV Delivery"}]]}]}],["$","div",null,{"className":"dm-meta-items","children":[["$","span",null,{"className":"dm-meta-item dm-meta-author","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","path",null,{"d":"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}],["$","circle",null,{"cx":"12","cy":"7","r":"4"}]]}],"Doormile Team"]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"2"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}]]}],["$","time",null,{"dateTime":"2025-10-02","children":"Oct 2, 2025"}]]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","circle",null,{"cx":"12","cy":"12","r":"9"}],["$","polyline",null,{"points":"12 7 12 12 15 14"}]]}],2," min read"]}]]}]]}],["$","div",null,{"className":"dm-blog-layout","children":[["$","div",null,{"className":"dm-blog-main","children":[["$","p",null,{"className":"dm-blog-intro","children":"The last mile is already difficult to plan. With electric vehicles, the team also has to think about battery range, charging time, rider load, traffic, and delivery windows. Good planning turns those moving parts into a workable dispatch plan."}],["$","div",null,{"className":"dm-article-body","children":[["$","$L9","0",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"For a long time, last-mile planning depended on dispatchers, spreadsheets, and local experience. That experience still matters. The problem is that it gets stretched thin when order volume rises and the fleet includes EVs."}]}],["$","$L9","1",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"The shift from fixed rules to daily planning"}]}],["$","$L9","2",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"A fixed-zone plan may look clean in the morning, but the road rarely follows the plan. A rider may get delayed near Hitec City, a gated community may hold a vehicle for ten extra minutes, or a battery may drain faster because the load is heavier than usual."}]}],["$","$L9","3",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"Order volumes by area, time slot, and customer type"}],["$","li","1",{"children":"Travel times based on the city's actual traffic patterns"}],["$","li","2",{"children":"Battery use by vehicle type, rider load, and route length"}],["$","li","3",{"children":"Feedback from completed deliveries, failed attempts, and late arrivals"}]]}]}],["$","$L9","4",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"Adjusting during the day"}]}],["$","$L9","5",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The first plan is only the starting point. By 11 a.m., traffic may change, a high-priority order may arrive, or one vehicle may return with less charge than expected. The dispatch team needs a way to adjust without rebuilding the whole day by hand."}]}],"$La","$Lb","$Lc","$Ld","$Le","$Lf","$L10"]}]]}],"$L11"]}]]}] -12:T2021, - .dm-blog-footer { - font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32; - /* The global theme applies 72px top/bottom section padding — strip it so the - inner container is the single source of vertical rhythm (no double gap). */ - padding: 0 !important; - } - /* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */ - .dm-blog-footer :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline) */ - .dm-blog-footer a { text-decoration: none !important; } - /* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px - max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA - align to the exact same left/right edges as the article body above. - Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a - consistent ~64–72px section→section gap (no 120px+ voids). */ - .dm-blog-footer-inner { - max-width: 1280px; margin: 0 auto; - /* Compact vertical rhythm on an 8px system. Top padding sets the - article→Prev/Next gap (~24–32px); the inter-section gap sets the - Prev/Next→Related gap (~32–48px). No large arbitrary voids. */ - /* Minimal bottom padding — the global site footer already contributes its - own 20px top inset, so the CTA banner sits close to it without a void. */ - padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px); - display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px); - } - @media (max-width: 767px) { - .dm-blog-footer-inner { - padding-left: 16px; - padding-right: 16px; - } - } - - /* Prev / Next */ - .dm-prevnext { - display: grid; grid-template-columns: 1fr 1fr; gap: 20px; - /* Halved from 40px: tight divider→cards spacing without crowding. */ - padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08); - } - @media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } } - .dm-prevnext-placeholder { display: block; } - .dm-prevnext-card { - display: flex; gap: 16px; align-items: center; padding: 16px; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; - } - .dm-prevnext-card:hover { - transform: translateY(-4px); border-color: rgba(192,18,39,0.2); - box-shadow: 0 16px 34px rgba(192,18,39,0.10); - } - .dm-prevnext-thumb { - position: relative; flex: 0 0 80px; width: 80px; height: 80px; - border-radius: 16px; overflow: hidden; background: #f1f5f9; - } - .dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; } - .dm-prevnext-next { text-align: right; } - .dm-prevnext-next .dm-prevnext-text { align-items: flex-end; } - .dm-prevnext-label { - display: inline-flex; align-items: center; gap: 6px; - font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red); - } - .dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; } - .dm-prevnext-title { - font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); } - - /* Related */ - .dm-related-heading { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important; - line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px; - } - .dm-related-grid { - display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; - } - @media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } } - @media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } } - - .dm-related-card { - display: flex; flex-direction: column; height: 100%; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none; - transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease; - } - .dm-related-card:hover { - transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13); - border-color: rgba(192,18,39,0.2); - } - .dm-related-img { - position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9; - } - .dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-img img { transform: scale(1.05); } - .dm-related-badge { - position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff; - font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px; - padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25); - } - .dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; } - .dm-related-card-title { - font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important; - letter-spacing: -.2px !important; margin: 0 0 10px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-related-card:hover .dm-related-card-title { color: var(--dm-red); } - .dm-related-card-excerpt { - font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - } - .dm-related-readmore { - margin-top: auto; display: inline-flex; align-items: center; gap: 7px; - font-size: 12.5px; font-weight: 800; color: var(--dm-red); - text-transform: uppercase; letter-spacing: .6px; - } - .dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); } - - /* Contact CTA banner */ - .dm-blog-contact-cta { - display: flex; align-items: center; justify-content: space-between; gap: 32px; - flex-wrap: wrap; - background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%); - border-radius: 30px; padding: clamp(32px, 4vw, 56px); - position: relative; overflow: hidden; - } - .dm-blog-contact-cta::after { - content: ""; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px; - background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%); - pointer-events: none; - } - .dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; } - .dm-blog-contact-eyebrow { - display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase; - letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px; - } - .dm-blog-contact-title { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important; - letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance; - } - .dm-blog-contact-sub { - font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450; - } - .dm-blog-contact-btn { - position: relative; z-index: 1; flex-shrink: 0; - display: inline-flex; align-items: center; justify-content: center; gap: 10px; - background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700; - padding: 16px 32px; border-radius: 16px; text-decoration: none; - box-shadow: 0 10px 26px rgba(192,18,39,0.34); - transition: background .2s ease, transform .2s ease; - } - .dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } - @media (max-width: 720px) { - .dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; } - .dm-blog-contact-btn { width: 100%; } - } -5:["$","section",null,{"className":"dm-blog-footer","aria-label":"More articles","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$12"}}],"$L13"]}] -6:["$","script","script-0",{"src":"/_next/static/chunks/0yvxf3ok9gcp_.js","async":true}] -7:["$","$L14",null,{"children":["$","$15",null,{"name":"Next.MetadataOutlet","children":"$@16"}]}] -a:["$","$L9","6",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"During peak traffic hours in Hyderabad, some vehicles were arriving 20 to 30 minutes later than planned. By adjusting routes based on live traffic and battery levels, the hub reduced missed delivery windows and improved on-time performance."}]}] -b:["$","$L9","7",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","figure",null,{"className":"dm-article-figure","children":[["$","span",null,{"className":"dm-article-figure-img","children":["$","$L17",null,{"src":"/images/ev-paradox.webp","alt":"Electric delivery vehicle routing visualisation","fill":true,"sizes":"(max-width: 768px) 100vw, 760px","style":{"objectFit":"cover"}}]}],["$","figcaption",null,{"children":"EV route plans need to account for range, load, traffic, and charging time before riders leave the hub."}]]}]}] -c:["$","$L9","8",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","blockquote",null,{"className":"dm-article-quote","children":[["$","p",null,{"children":"With EVs, a route is only useful if the vehicle can finish it and still return safely."}],["$","cite",null,{"children":"Doormile Operations"}]]}]}] -d:["$","$L9","9",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"What this means for operators"}]}] -e:["$","$L9","10",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"For a fleet manager, this is not about fancy software. It is about fewer emergency calls, fewer mid-route swaps, and fewer customers asking why their delivery missed the promised window."}]}] -f:["$","$L9","11",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ol",null,{"className":"dm-article-ol","children":[["$","li","0",{"children":"Record delivery times, failed attempts, traffic delays, and charging cycles."}],["$","li","1",{"children":"Build travel-time estimates from the areas your riders actually serve."}],["$","li","2",{"children":"Check every route against battery capacity before dispatch."}],["$","li","3",{"children":"Replan when traffic, orders, or vehicle availability changes."}]]}]}] -10:["$","$L9","12",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The fleets that improve fastest are usually not the ones adding vehicles first. They are the ones removing wasted distance, planning charging properly, and giving riders routes they can complete on time."}]}] -11:["$","div",null,{"className":"dm-blog-aside-wrap","children":["$","aside",null,{"className":"dm-blog-sidebar","aria-label":"Blog sidebar","children":[["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Search"}],["$","$L18",null,{}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Recent Posts"}],["$","ul",null,{"className":"dm-blog-recent","children":[["$","li","42-less-distance-insights-from-our-hyderabad-hub",{"children":["$","$L8",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","time",null,{"dateTime":"2025-09-18","className":"dm-blog-recent-date","children":"Sep 18, 2025"}]]}]]}]}],["$","li","miletruth-ai-10-stages-to-smarter-dispatch",{"children":["$","$L8",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","time",null,{"dateTime":"2025-09-05","className":"dm-blog-recent-date","children":"Sep 5, 2025"}]]}]]}]}],["$","li","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"children":["$","$L8",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L17",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","time",null,{"dateTime":"2025-08-21","className":"dm-blog-recent-date","children":"Aug 21, 2025"}]]}]]}]}],["$","li","why-mathematical-precision-beats-heuristics-in-routing",{"children":["$","$L8",null,{"href":"/blog/why-mathematical-precision-beats-heuristics-in-routing","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-14.webp","alt":"Why Mathematical Precision Beats Heuristics in Routing","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"Why Mathematical Precision Beats Heuristics in Routing"}],["$","time",null,{"dateTime":"2025-08-07","className":"dm-blog-recent-date","children":"Aug 7, 2025"}]]}]]}]}]]}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Categories"}],["$","ul",null,{"className":"dm-blog-categories","children":[["$","li","Case Study",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Case Study"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","EV Fleet",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"EV Fleet"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}],["$","li","Fleet Management",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Fleet Management"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","MileTruth",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"MileTruth"}],"$L19"]}]}],"$L1a","$L1b","$L1c"]}]]}],"$L1d"]}]}] -13:["$","div",null,{"className":"dm-blog-footer-inner","children":[["$","nav",null,{"className":"dm-prevnext","aria-label":"Article navigation","children":[["$","span",null,{"className":"dm-prevnext-placeholder"}],["$","$L8",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-prevnext-card dm-prevnext-next","children":[["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":["Next",["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Case Study"}],["$","span",null,{"className":"dm-prevnext-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}]]}],["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}]]}]]}],["$","div",null,{"className":"dm-related","children":[["$","h2",null,{"className":"dm-related-heading","children":"Related Articles"}],["$","div",null,{"className":"dm-related-grid","children":[["$","$L9","why-mathematical-precision-beats-heuristics-in-routing",{"delay":0,"duration":0.7,"yOffset":30,"children":["$","$L8",null,{"href":"/blog/why-mathematical-precision-beats-heuristics-in-routing","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L17",null,{"src":"/images/blog-post-pic-14.webp","alt":"Why Mathematical Precision Beats Heuristics in Routing","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Technology"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"Why Mathematical Precision Beats Heuristics in Routing"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"Fixed routing rules are easy to start with, but they often miss better stop sequences as order volume grows."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L9","42-less-distance-insights-from-our-hyderabad-hub",{"delay":0.08,"duration":0.7,"yOffset":30,"children":["$","$L8",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L17",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Case Study"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L9","miletruth-ai-10-stages-to-smarter-dispatch",{"delay":0.16,"duration":0.7,"yOffset":30,"children":["$","$L8",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-related-card","children":["$L1e","$L1f"]}]}]]}]]}],"$L20"]}] -16:null -19:["$","span",null,{"className":"dm-blog-category-count","children":1}] -1a:["$","li","Operations",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Operations"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -1b:["$","li","Sustainability",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Sustainability"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -1c:["$","li","Technology",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Technology"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}] -1d:["$","section",null,{"className":"dm-blog-widget dm-blog-cta-card","children":[["$","h2",null,{"className":"dm-blog-cta-title","children":"Planning delivery routes?"}],["$","p",null,{"className":"dm-blog-cta-text","children":"Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time."}],["$","$L8",null,{"href":"/contact","className":"dm-blog-cta-btn","children":["Contact Us",["$","svg",null,{"width":"18","height":"18","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -1e:["$","div",null,{"className":"dm-related-img","children":[["$","$L17",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"MileTruth"}]]}] -1f:["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -20:["$","div",null,{"className":"dm-blog-contact-cta","children":[["$","div",null,{"className":"dm-blog-contact-cta-content","children":[["$","span",null,{"className":"dm-blog-contact-eyebrow","children":"Let's talk logistics"}],["$","h2",null,{"className":"dm-blog-contact-title","children":"Ready to move smarter with Doormile?"}],["$","p",null,{"className":"dm-blog-contact-sub","children":"Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding."}]]}],["$","$L8",null,{"href":"/contact","className":"dm-blog-contact-btn","children":["Get in Touch",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] diff --git a/build/blog/how-ai-is-transforming-last-mile-ev-delivery/__next.blog.$d$slug.txt b/build/blog/how-ai-is-transforming-last-mile-ev-delivery/__next.blog.$d$slug.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/blog/how-ai-is-transforming-last-mile-ev-delivery/__next.blog.$d$slug.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/how-ai-is-transforming-last-mile-ev-delivery/__next.blog.txt b/build/blog/how-ai-is-transforming-last-mile-ev-delivery/__next.blog.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/blog/how-ai-is-transforming-last-mile-ev-delivery/__next.blog.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/how-doormile-maintains-99-9-sla-compliance-at-scale.html b/build/blog/how-doormile-maintains-99-9-sla-compliance-at-scale.html deleted file mode 100644 index 937906b..0000000 --- a/build/blog/how-doormile-maintains-99-9-sla-compliance-at-scale.html +++ /dev/null @@ -1,1168 +0,0 @@ -How Doormile Maintains 99.9% SLA Compliance at Scale – Doormile

    Doormile

    Doormile logo
    Address
    Hyderabad

    5th Floor, Vision Ultima,
    Street No.3, Jayabheri Enclave,
    Gachibowli, Hyderabad,
    Telangana 500032.

    Coimbatore

    Mayflower Valencia,
    Near Nava India Bus Stop,
    Avinashi Road,
    Udayampalayam,
    Tamil Nadu 641037.

    Bengaluru

    C612, 6th Floor,
    Trifecta Starlight,
    ITPL Road,
    Garudacharapalya,
    Mahadevapura,
    Bangalore 560048,
    Karnataka, India.

    Contact Us

    Tel : +91 86886 97941

    Email

    care@doormile.com

    Operations

    How Doormile Maintains 99.9% SLA Compliance at Scale

    Doormile Team2 min read

    Strong SLA performance is not luck. It comes from planning the day so late deliveries are the exception, not the expected risk.

    In last-mile logistics, a missed SLA is rarely caused by one big failure. It usually comes from small delays adding up across a route. How Doormile Maintains 99.9% SLA Compliance at Scale looks at how delivery teams can spot those delays early and plan around them before vehicles leave the hub.

    Why this matters for fleet teams

    Every extra kilometre costs money. It uses fuel or charge, adds rider time, wears down vehicles, and increases the chance of a late delivery. When routes are built from fixed zones or old habits, those costs repeat every day.

    • Fewer vehicles needed for the same number of drops
    • Lower cost per drop through better stop sequencing
    • ETAs that match traffic, distance, and delivery windows
    • Less fuel or charge used per completed order

    From orders to dispatch

    A good dispatch plan starts with the basics: order locations, promised delivery windows, rider capacity, vehicle range, and known traffic trouble spots. MileTruth™ checks those inputs before dispatch so the team is not fixing avoidable mistakes on the road.

    How Doormile Maintains 99.9% SLA Compliance at Scale
    Operations: route planning decisions made before dispatch.

    A route should be checked before the rider leaves, not explained after the customer calls.

    Doormile Operations

    Putting it into practice

    The best improvements usually start with simple measurements. Track distance per route, failed delivery windows, rider idle time, and orders moved between vehicles after dispatch. Those numbers show where the operation is leaking time.

    1. Benchmark today's distance, fleet size, and on-time rate.
    2. Include vehicle capacity, delivery windows, rider shifts, and battery charge.
    3. Check routes against traffic and customer commitments before dispatch.
    4. Compare the next dispatch cycle against the old plan.

    Better routing is not about pushing riders harder. It is about giving them a plan that already accounts for the real day ahead.

    \ No newline at end of file diff --git a/build/blog/how-doormile-maintains-99-9-sla-compliance-at-scale.txt b/build/blog/how-doormile-maintains-99-9-sla-compliance-at-scale.txt deleted file mode 100644 index 2e8a0a9..0000000 --- a/build/blog/how-doormile-maintains-99-9-sla-compliance-at-scale.txt +++ /dev/null @@ -1,546 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -d:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -e:"$Sreact.suspense" -11:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -13:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -15:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","blog","how-doormile-maintains-99-9-sla-compliance-at-scale"],"q":"","i":false,"f":[[["",{"children":["blog",{"children":[["slug","how-doormile-maintains-99-9-sla-compliance-at-scale","d",null],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":["$Lc",[["$","script","script-0",{"src":"/_next/static/chunks/0yvxf3ok9gcp_.js","async":true,"nonce":"$undefined"}]],["$","$Ld",null,{"children":["$","$e",null,{"name":"Next.MetadataOutlet","children":"$@f"}]}]]}],{},null,false,null]},null,false,"$@10"]},null,false,"$@10"]},null,false,null],["$","$1","h",{"children":[null,["$","$L11",null,{"children":"$L12"}],["$","div",null,{"hidden":true,"children":["$","$L13",null,{"children":["$","$e",null,{"name":"Next.Metadata","children":"$L14"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$15",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -16:[] -10:"$W16" -:HL["/images/last-mile-approach.webp","image"] -17:T3d6f, - .dm-single-blog { - --dm-red: #c01227; - --dm-red-hover: #e31d32; - --dm-radius-card: 22px; - --dm-radius-img: 20px; - --dm-radius-badge: 8px; - --dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05); - --dm-border: 1px solid rgba(15, 23, 42, 0.09); - --dm-space-p: 24px; - --dm-space-h: 32px; - --dm-space-img: 32px; - --dm-space-quote: 40px; - --dm-sticky-top: 138px; - --dm-measure: min(1100px, 100%); - font-family: var(--font-manrope), sans-serif; - } - - /* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6 - (120/80/60px UPPERCASE) rules with !important on our own classes. */ - .dm-single-blog :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline, - specificity 0-1-1) so blog links keep our colors and never get underlined. */ - .dm-single-blog a { text-decoration: none !important; } - - /* Page banner: tall homepage-scale frame with only badge + title inside */ - /* Compound selector (specificity 20) + !important beats the global 800px - single-class height rules so the blog banner can use viewport heights. */ - .custom-standard-hero-card.dm-banner-card { - height: 90vh !important; - min-height: 85vh !important; - } - @media (max-width: 1024px) { - .custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; } - } - @media (max-width: 600px) { - .custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; } - } - - .dm-banner-inner { - position: relative; width: 100%; height: 100%; - display: flex; flex-direction: column; align-items: center; justify-content: center; - text-align: center; gap: clamp(22px, 2.6vw, 34px); - padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px); - } - - .dm-banner-category { - display: inline-block; background: var(--dm-red); color: #fff; - font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px; - padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45); - } - .dm-banner-title { - font-family: var(--font-manrope), sans-serif !important; - font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important; - line-height: 1.16 !important; letter-spacing: -1.2px !important; - color: #ffffff !important; margin: 0; max-width: 820px; - text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38); - } - @media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } } - @media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } } - - /* Content wrap begins immediately below the banner */ - /* Shared content container: the SAME max-width + horizontal padding is used - by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings, - images, Prev/Next, Related Articles and the CTA banner all align to one - grid with identical left/right edges. Keep both in sync. */ - .dm-blog-wrap { - max-width: 1280px; margin: 0 auto; - /* 20px mobile padding floor → 40px on desktop; matches the footer container. */ - padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0; - } - @media (max-width: 767px) { - .dm-blog-wrap { - padding-left: 16px; - padding-right: 16px; - } - } - - /* ── Article meta bar (directly under the hero) ── */ - .dm-meta-bar { - display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px; - padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px); - border-bottom: 1px solid rgba(15,23,42,0.10); - } - .dm-meta-breadcrumb ol { - list-style: none; display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b; - } - .dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; } - .dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; } - .dm-meta-sep { color: #cbd5e1; } - .dm-meta-current { - color: #0f172a; font-weight: 700; - max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - } - @media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } } - .dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; } - .dm-meta-item { - display: inline-flex; align-items: center; gap: 7px; - font-size: 13.5px; font-weight: 600; color: #475569; - } - .dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; } - .dm-meta-author { color: #0f172a; font-weight: 700; } - @media (max-width: 600px) { .dm-meta-bar { gap: 12px; } } - .dm-blog-layout { - display: grid; grid-template-columns: minmax(0,1fr) 320px; - /* Tighter gap gives the reading column more room next to the 320px sidebar. */ - gap: clamp(28px, 3vw, 56px); align-items: start; - } - @media (max-width: 1024px) { - .dm-blog-layout { grid-template-columns: 1fr; gap: 48px; } - /* Single-column (tablet/mobile): cap the reading column and centre it so the - article never sits left-aligned with a large empty right gutter. */ - .dm-blog-main { max-width: 900px; margin-inline: auto; } - } - .dm-blog-main { min-width: 0; } - - /* ── Intro lead ── */ - .dm-blog-intro { - max-width: var(--dm-measure); - font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500; - color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px; - border-left: 3px solid var(--dm-red); - } - - /* ── Article body ── */ - .dm-article-body { max-width: var(--dm-measure); } - .dm-article-p { - font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450; - margin: 0 0 var(--dm-space-p); - } - .dm-article-h2 { - font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important; - color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h); - text-wrap: balance; - } - /* Each article block is wrapped in its OWN ScrollReveal
    , so a bare - :first-child rule matched every heading (each is the only child of its - wrapper) and zeroed its top margin, collapsing the gap above every - section heading. Scope the reset to only the article body's first block. */ - .dm-article-body > :first-child :where(.dm-article-h2, .dm-article-h3), - .dm-article-body > .dm-article-h2:first-child, - .dm-article-body > .dm-article-h3:first-child { margin-top: 0; } - .dm-article-h3 { - font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important; - color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px; - text-wrap: balance; - } - @media (max-width: 600px) { - .dm-article-p { font-size: 16px !important; } - .dm-article-ul li, .dm-article-ol li { font-size: 15.5px; } - .dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; } - .dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; } - } - - .dm-article-ul, .dm-article-ol { - /* Top margin (was 0) separates the list from the paragraph above it; - matching bottom margin keeps it clear of the next heading/paragraph. - Slightly larger than --dm-space-p so the list reads as its own block. */ - margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px); - padding-left: 2px; list-style: none; - display: flex; flex-direction: column; gap: 15px; - } - /* Prefixed with .dm-article-body so these beat the theme's global - ".logico-front-end ul li:before" fontello-glyph bullet (specificity 0,1,3), - which otherwise replaces our clean red dot with a misaligned checkmark glyph - and adds its own 1.7em indent. */ - .dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li { - position: relative; padding-left: 34px; - font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450; - } - .dm-article-body .dm-article-ul li::before { - content: ""; position: absolute; left: 7px; top: 10px; - width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red); - /* kill any inherited fontello glyph from the global rule */ - font-size: 0; line-height: 0; - } - .dm-article-ol { counter-reset: dm-li; } - .dm-article-body .dm-article-ol li { counter-increment: dm-li; } - .dm-article-body .dm-article-ol li::before { - content: counter(dm-li); position: absolute; left: 0; top: 0; - width: 24px; height: 24px; border-radius: 7px; - background: rgba(192,18,39,0.10); color: var(--dm-red); - font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; - } - - /* ── Quote ── */ - .dm-article-quote { - position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px; - background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%); - border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0; - box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06); - } - .dm-article-quote::before { - content: "\201C"; position: absolute; left: 22px; top: 8px; - font-family: Georgia, "Times New Roman", serif; - font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700; - } - .dm-article-quote p { - font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600; - font-style: italic; color: #1e293b; margin: 0; - } - .dm-article-quote cite { - display: block; margin-top: 16px; font-size: 13px; font-weight: 700; - font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px; - } - @media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } } - - /* ── Images ── */ - .dm-article-figure { margin: var(--dm-space-img) 0; } - .dm-article-figure-img { - position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; - border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10); - } - .dm-article-figure figcaption { - margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500; - text-align: center; font-style: italic; - } - - /* ── Sidebar ── */ - .dm-blog-aside-wrap { position: relative; } - .dm-blog-sidebar { - display: flex; flex-direction: column; gap: 18px; - position: sticky; top: var(--dm-sticky-top); - } - @media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } } - - .dm-blog-widget { - background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card); - padding: 20px; box-shadow: var(--dm-shadow-card); - } - .dm-blog-widget-title { - font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important; - letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important; - margin: 0 0 15px; padding: 0 0 12px; - border-bottom: 1px solid rgba(15,23,42,0.08); - overflow: visible; white-space: normal; word-break: normal; - } - - /* Search */ - .dm-sr-only { - position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; - overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; - } - .dm-blog-search { position: relative; } - .dm-blog-search-form { position: relative; } - .dm-blog-search-input { - width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px; - padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a; - background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; - } - .dm-blog-search-input::placeholder { color: #9c9c9c; } - .dm-blog-search-input:focus { - outline: none; border-color: var(--dm-red); background: #fff; - box-shadow: 0 0 0 3px rgba(192,18,39,0.11); - } - .dm-blog-search-icon { - position: absolute; right: 14px; top: 50%; transform: translateY(-50%); - color: #94a3b8; pointer-events: none; display: flex; - } - .dm-blog-search-results { - position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0; - background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px; - box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden; - } - .dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; } - .dm-blog-search-result { - display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; - border-radius: 10px; text-decoration: none; transition: background .15s ease; - } - .dm-blog-search-result:hover { background: #f8fafc; } - .dm-blog-search-result-cat { - font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red); - } - .dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; } - .dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; } - - /* Recent posts */ - .dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; } - .dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; } - .dm-blog-recent-thumb { - position: relative; flex: 0 0 62px; width: 62px; height: 62px; - border-radius: 13px; overflow: hidden; background: #f1f5f9; - } - .dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; } - .dm-blog-recent-title { - font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); } - .dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; } - - /* Categories */ - .dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; } - .dm-blog-category-item { - display: flex; align-items: center; justify-content: space-between; gap: 10px; - padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important; - border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease; - } - .dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; } - .dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; } - .dm-blog-category-item > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .dm-blog-category-count { - flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9; - min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex; - align-items: center; justify-content: center; padding: 0 7px; - } - - /* CTA card */ - .dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; } - .dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; } - .dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; } - .dm-blog-cta-btn { - display: inline-flex; align-items: center; gap: 8px; - background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700; - padding: 12px 22px; border-radius: 12px; text-decoration: none; - transition: background .2s ease, transform .2s ease; - } - .dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } -c:["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"headline\":\"How Doormile Maintains 99.9% SLA Compliance at Scale\",\"description\":\"High SLA performance comes from checking ETAs before dispatch, reacting early to delays, and keeping customer commitments visible throughout the day.\",\"image\":[\"https://www.doormile.com/images/last-mile-approach.webp\"],\"datePublished\":\"2025-06-26T00:00:00.000Z\",\"dateModified\":\"2025-06-26T00:00:00.000Z\",\"author\":{\"@type\":\"Organization\",\"name\":\"Doormile Team\",\"url\":\"https://www.doormile.com\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Doormile\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.doormile.com/images/cropped-image-2.png\"}},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.doormile.com/blog/how-doormile-maintains-99-9-sla-compliance-at-scale\"},\"articleSection\":\"Operations\"}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://www.doormile.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https://www.doormile.com/blog\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How Doormile Maintains 99.9% SLA Compliance at Scale\",\"item\":\"https://www.doormile.com/blog/how-doormile-maintains-99-9-sla-compliance-at-scale\"}]}"}}],["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":[["$","article",null,{"className":"dm-single-blog","children":[["$","link",null,{"rel":"preload","as":"image","href":"/images/last-mile-approach.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$17"}}],"$L18","$L19"]}],"$L1a"]}]}]]}] -1b:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],""] -1c:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"ScrollReveal"] -18:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card dm-banner-card","style":{"backgroundImage":"url(/images/last-mile-approach.webp)","--hero-overlay":"linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)"},"children":["$","div",null,{"className":"e-con-inner dm-banner-inner","children":[["$","span",null,{"className":"dm-banner-category","children":"Operations"}],["$","h1",null,{"className":"dm-banner-title","children":"How Doormile Maintains 99.9% SLA Compliance at Scale"}]]}]}]}] -19:["$","div",null,{"className":"dm-blog-wrap","children":[["$","div",null,{"className":"dm-meta-bar","children":[["$","nav",null,{"className":"dm-meta-breadcrumb","aria-label":"Breadcrumb","children":["$","ol",null,{"children":[["$","li",null,{"children":["$","$L1b",null,{"href":"/","children":"Home"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"children":["$","$L1b",null,{"href":"/blog","children":"Blog"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"aria-current":"page","className":"dm-meta-current","children":"How Doormile Maintains 99.9% SLA Compliance at Scale"}]]}]}],["$","div",null,{"className":"dm-meta-items","children":[["$","span",null,{"className":"dm-meta-item dm-meta-author","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","path",null,{"d":"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}],["$","circle",null,{"cx":"12","cy":"7","r":"4"}]]}],"Doormile Team"]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"2"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}]]}],["$","time",null,{"dateTime":"2025-06-26","children":"Jun 26, 2025"}]]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","circle",null,{"cx":"12","cy":"12","r":"9"}],["$","polyline",null,{"points":"12 7 12 12 15 14"}]]}],2," min read"]}]]}]]}],["$","div",null,{"className":"dm-blog-layout","children":[["$","div",null,{"className":"dm-blog-main","children":[["$","p",null,{"className":"dm-blog-intro","children":"Strong SLA performance is not luck. It comes from planning the day so late deliveries are the exception, not the expected risk."}],["$","div",null,{"className":"dm-article-body","children":[["$","$L1c","0",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"In last-mile logistics, a missed SLA is rarely caused by one big failure. It usually comes from small delays adding up across a route. How Doormile Maintains 99.9% SLA Compliance at Scale looks at how delivery teams can spot those delays early and plan around them before vehicles leave the hub."}]}],["$","$L1c","1",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Why this matters for fleet teams"}]}],["$","$L1c","2",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Every extra kilometre costs money. It uses fuel or charge, adds rider time, wears down vehicles, and increases the chance of a late delivery. When routes are built from fixed zones or old habits, those costs repeat every day."}]}],["$","$L1c","3",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"Fewer vehicles needed for the same number of drops"}],["$","li","1",{"children":"Lower cost per drop through better stop sequencing"}],["$","li","2",{"children":"ETAs that match traffic, distance, and delivery windows"}],["$","li","3",{"children":"Less fuel or charge used per completed order"}]]}]}],["$","$L1c","4",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"From orders to dispatch"}]}],["$","$L1c","5",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"A good dispatch plan starts with the basics: order locations, promised delivery windows, rider capacity, vehicle range, and known traffic trouble spots. MileTruth™ checks those inputs before dispatch so the team is not fixing avoidable mistakes on the road."}]}],["$","$L1c","6",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","figure",null,{"className":"dm-article-figure","children":[["$","span",null,{"className":"dm-article-figure-img","children":"$L1d"}],"$L1e"]}]}],"$L1f","$L20","$L21","$L22","$L23"]}]]}],"$L24"]}]]}] -25:T2021, - .dm-blog-footer { - font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32; - /* The global theme applies 72px top/bottom section padding — strip it so the - inner container is the single source of vertical rhythm (no double gap). */ - padding: 0 !important; - } - /* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */ - .dm-blog-footer :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline) */ - .dm-blog-footer a { text-decoration: none !important; } - /* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px - max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA - align to the exact same left/right edges as the article body above. - Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a - consistent ~64–72px section→section gap (no 120px+ voids). */ - .dm-blog-footer-inner { - max-width: 1280px; margin: 0 auto; - /* Compact vertical rhythm on an 8px system. Top padding sets the - article→Prev/Next gap (~24–32px); the inter-section gap sets the - Prev/Next→Related gap (~32–48px). No large arbitrary voids. */ - /* Minimal bottom padding — the global site footer already contributes its - own 20px top inset, so the CTA banner sits close to it without a void. */ - padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px); - display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px); - } - @media (max-width: 767px) { - .dm-blog-footer-inner { - padding-left: 16px; - padding-right: 16px; - } - } - - /* Prev / Next */ - .dm-prevnext { - display: grid; grid-template-columns: 1fr 1fr; gap: 20px; - /* Halved from 40px: tight divider→cards spacing without crowding. */ - padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08); - } - @media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } } - .dm-prevnext-placeholder { display: block; } - .dm-prevnext-card { - display: flex; gap: 16px; align-items: center; padding: 16px; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; - } - .dm-prevnext-card:hover { - transform: translateY(-4px); border-color: rgba(192,18,39,0.2); - box-shadow: 0 16px 34px rgba(192,18,39,0.10); - } - .dm-prevnext-thumb { - position: relative; flex: 0 0 80px; width: 80px; height: 80px; - border-radius: 16px; overflow: hidden; background: #f1f5f9; - } - .dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; } - .dm-prevnext-next { text-align: right; } - .dm-prevnext-next .dm-prevnext-text { align-items: flex-end; } - .dm-prevnext-label { - display: inline-flex; align-items: center; gap: 6px; - font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red); - } - .dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; } - .dm-prevnext-title { - font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); } - - /* Related */ - .dm-related-heading { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important; - line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px; - } - .dm-related-grid { - display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; - } - @media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } } - @media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } } - - .dm-related-card { - display: flex; flex-direction: column; height: 100%; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none; - transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease; - } - .dm-related-card:hover { - transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13); - border-color: rgba(192,18,39,0.2); - } - .dm-related-img { - position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9; - } - .dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-img img { transform: scale(1.05); } - .dm-related-badge { - position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff; - font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px; - padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25); - } - .dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; } - .dm-related-card-title { - font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important; - letter-spacing: -.2px !important; margin: 0 0 10px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-related-card:hover .dm-related-card-title { color: var(--dm-red); } - .dm-related-card-excerpt { - font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - } - .dm-related-readmore { - margin-top: auto; display: inline-flex; align-items: center; gap: 7px; - font-size: 12.5px; font-weight: 800; color: var(--dm-red); - text-transform: uppercase; letter-spacing: .6px; - } - .dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); } - - /* Contact CTA banner */ - .dm-blog-contact-cta { - display: flex; align-items: center; justify-content: space-between; gap: 32px; - flex-wrap: wrap; - background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%); - border-radius: 30px; padding: clamp(32px, 4vw, 56px); - position: relative; overflow: hidden; - } - .dm-blog-contact-cta::after { - content: ""; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px; - background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%); - pointer-events: none; - } - .dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; } - .dm-blog-contact-eyebrow { - display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase; - letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px; - } - .dm-blog-contact-title { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important; - letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance; - } - .dm-blog-contact-sub { - font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450; - } - .dm-blog-contact-btn { - position: relative; z-index: 1; flex-shrink: 0; - display: inline-flex; align-items: center; justify-content: center; gap: 10px; - background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700; - padding: 16px 32px; border-radius: 16px; text-decoration: none; - box-shadow: 0 10px 26px rgba(192,18,39,0.34); - transition: background .2s ease, transform .2s ease; - } - .dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } - @media (max-width: 720px) { - .dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; } - .dm-blog-contact-btn { width: 100%; } - } -1a:["$","section",null,{"className":"dm-blog-footer","aria-label":"More articles","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$25"}}],"$L26"]}] -27:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"Image"] -28:I[23096,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"default"] -1d:["$","$L27",null,{"src":"/images/last-mile-approach.webp","alt":"How Doormile Maintains 99.9% SLA Compliance at Scale","fill":true,"sizes":"(max-width: 768px) 100vw, 760px","style":{"objectFit":"cover"}}] -1e:["$","figcaption",null,{"children":"Operations: route planning decisions made before dispatch."}] -1f:["$","$L1c","7",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","blockquote",null,{"className":"dm-article-quote","children":[["$","p",null,{"children":"A route should be checked before the rider leaves, not explained after the customer calls."}],["$","cite",null,{"children":"Doormile Operations"}]]}]}] -20:["$","$L1c","8",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Putting it into practice"}]}] -21:["$","$L1c","9",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The best improvements usually start with simple measurements. Track distance per route, failed delivery windows, rider idle time, and orders moved between vehicles after dispatch. Those numbers show where the operation is leaking time."}]}] -22:["$","$L1c","10",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ol",null,{"className":"dm-article-ol","children":[["$","li","0",{"children":"Benchmark today's distance, fleet size, and on-time rate."}],["$","li","1",{"children":"Include vehicle capacity, delivery windows, rider shifts, and battery charge."}],["$","li","2",{"children":"Check routes against traffic and customer commitments before dispatch."}],["$","li","3",{"children":"Compare the next dispatch cycle against the old plan."}]]}]}] -23:["$","$L1c","11",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Better routing is not about pushing riders harder. It is about giving them a plan that already accounts for the real day ahead."}]}] -24:["$","div",null,{"className":"dm-blog-aside-wrap","children":["$","aside",null,{"className":"dm-blog-sidebar","aria-label":"Blog sidebar","children":[["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Search"}],["$","$L28",null,{}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Recent Posts"}],["$","ul",null,{"className":"dm-blog-recent","children":[["$","li","how-ai-is-transforming-last-mile-ev-delivery",{"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","time",null,{"dateTime":"2025-10-02","className":"dm-blog-recent-date","children":"Oct 2, 2025"}]]}]]}]}],["$","li","42-less-distance-insights-from-our-hyderabad-hub",{"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","time",null,{"dateTime":"2025-09-18","className":"dm-blog-recent-date","children":"Sep 18, 2025"}]]}]]}]}],["$","li","miletruth-ai-10-stages-to-smarter-dispatch",{"children":["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","time",null,{"dateTime":"2025-09-05","className":"dm-blog-recent-date","children":"Sep 5, 2025"}]]}]]}]}],["$","li","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"children":["$","$L1b",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","time",null,{"dateTime":"2025-08-21","className":"dm-blog-recent-date","children":"Aug 21, 2025"}]]}]]}]}]]}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Categories"}],["$","ul",null,{"className":"dm-blog-categories","children":[["$","li","Case Study",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Case Study"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","EV Fleet",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"EV Fleet"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}],["$","li","Fleet Management",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Fleet Management"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","MileTruth",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"MileTruth"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],"$L29","$L2a","$L2b"]}]]}],"$L2c"]}]}] -26:["$","div",null,{"className":"dm-blog-footer-inner","children":[["$","nav",null,{"className":"dm-prevnext","aria-label":"Article navigation","children":[["$","$L1b",null,{"href":"/blog/building-a-greener-city-the-future-of-urban-logistics","className":"dm-prevnext-card dm-prevnext-prev","children":[["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-6.webp","alt":"Building a Greener City: The Future of Urban Logistics","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"19","y1":"12","x2":"5","y2":"12"}],["$","polyline",null,{"points":"12 19 5 12 12 5"}]]}],"Previous"]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Sustainability"}],["$","span",null,{"className":"dm-prevnext-title","children":"Building a Greener City: The Future of Urban Logistics"}]]}]]}],["$","$L1b",null,{"href":"/blog/battery-simulation-the-secret-to-ev-route-pre-validation","className":"dm-prevnext-card dm-prevnext-next","children":[["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":["Next",["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","span",null,{"className":"dm-prevnext-cat","children":"EV Fleet"}],["$","span",null,{"className":"dm-prevnext-title","children":"Battery Simulation: The Secret to EV Route Pre-Validation"}]]}],["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-3.webp","alt":"Battery Simulation: The Secret to EV Route Pre-Validation","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}]]}]]}],["$","div",null,{"className":"dm-related","children":[["$","h2",null,{"className":"dm-related-heading","children":"Related Articles"}],["$","div",null,{"className":"dm-related-grid","children":[["$","$L1c","how-ai-is-transforming-last-mile-ev-delivery",{"delay":0,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Technology"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L1c","42-less-distance-insights-from-our-hyderabad-hub",{"delay":0.08,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Case Study"}]]}],["$","div",null,{"className":"dm-related-body","children":["$L2d","$L2e","$L2f"]}]]}]}],"$L30"]}]]}],"$L31"]}] -29:["$","li","Operations",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Operations"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2a:["$","li","Sustainability",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Sustainability"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2b:["$","li","Technology",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Technology"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}] -2c:["$","section",null,{"className":"dm-blog-widget dm-blog-cta-card","children":[["$","h2",null,{"className":"dm-blog-cta-title","children":"Planning delivery routes?"}],["$","p",null,{"className":"dm-blog-cta-text","children":"Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time."}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-cta-btn","children":["Contact Us",["$","svg",null,{"width":"18","height":"18","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -2d:["$","h3",null,{"className":"dm-related-card-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}] -2e:["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}] -2f:["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}] -30:["$","$L1c","miletruth-ai-10-stages-to-smarter-dispatch",{"delay":0.16,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"MileTruth"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}] -31:["$","div",null,{"className":"dm-blog-contact-cta","children":[["$","div",null,{"className":"dm-blog-contact-cta-content","children":[["$","span",null,{"className":"dm-blog-contact-eyebrow","children":"Let's talk logistics"}],["$","h2",null,{"className":"dm-blog-contact-title","children":"Ready to move smarter with Doormile?"}],["$","p",null,{"className":"dm-blog-contact-sub","children":"Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding."}]]}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-contact-btn","children":["Get in Touch",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -12:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -32:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -f:null -14:[["$","title","0",{"children":"How Doormile Maintains 99.9% SLA Compliance at Scale – Doormile"}],["$","meta","1",{"name":"description","content":"High SLA performance comes from checking ETAs before dispatch, reacting early to delays, and keeping customer commitments visible throughout the day."}],["$","meta","2",{"name":"author","content":"Doormile Team"}],["$","meta","3",{"name":"keywords","content":"Operations,last-mile logistics,EV fleet,MileTruth,route optimisation"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","link","5",{"rel":"canonical","href":"https://www.doormile.com/blog/how-doormile-maintains-99-9-sla-compliance-at-scale"}],["$","meta","6",{"property":"og:title","content":"How Doormile Maintains 99.9% SLA Compliance at Scale"}],["$","meta","7",{"property":"og:description","content":"High SLA performance comes from checking ETAs before dispatch, reacting early to delays, and keeping customer commitments visible throughout the day."}],["$","meta","8",{"property":"og:url","content":"https://www.doormile.com/blog/how-doormile-maintains-99-9-sla-compliance-at-scale"}],["$","meta","9",{"property":"og:site_name","content":"Doormile"}],["$","meta","10",{"property":"og:image","content":"https://www.doormile.com/images/last-mile-approach.webp"}],["$","meta","11",{"property":"og:image:alt","content":"How Doormile Maintains 99.9% SLA Compliance at Scale"}],["$","meta","12",{"property":"og:type","content":"article"}],["$","meta","13",{"property":"article:published_time","content":"2025-06-26T00:00:00.000Z"}],["$","meta","14",{"property":"article:author","content":"Doormile Team"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"How Doormile Maintains 99.9% SLA Compliance at Scale"}],["$","meta","17",{"name":"twitter:description","content":"High SLA performance comes from checking ETAs before dispatch, reacting early to delays, and keeping customer commitments visible throughout the day."}],["$","meta","18",{"name":"twitter:image","content":"https://www.doormile.com/images/last-mile-approach.webp"}],["$","link","19",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","21",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","22",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L32","23",{}]] diff --git a/build/blog/how-doormile-maintains-99-9-sla-compliance-at-scale/__next._full.txt b/build/blog/how-doormile-maintains-99-9-sla-compliance-at-scale/__next._full.txt deleted file mode 100644 index 2e8a0a9..0000000 --- a/build/blog/how-doormile-maintains-99-9-sla-compliance-at-scale/__next._full.txt +++ /dev/null @@ -1,546 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -d:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -e:"$Sreact.suspense" -11:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -13:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -15:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","blog","how-doormile-maintains-99-9-sla-compliance-at-scale"],"q":"","i":false,"f":[[["",{"children":["blog",{"children":[["slug","how-doormile-maintains-99-9-sla-compliance-at-scale","d",null],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":["$Lc",[["$","script","script-0",{"src":"/_next/static/chunks/0yvxf3ok9gcp_.js","async":true,"nonce":"$undefined"}]],["$","$Ld",null,{"children":["$","$e",null,{"name":"Next.MetadataOutlet","children":"$@f"}]}]]}],{},null,false,null]},null,false,"$@10"]},null,false,"$@10"]},null,false,null],["$","$1","h",{"children":[null,["$","$L11",null,{"children":"$L12"}],["$","div",null,{"hidden":true,"children":["$","$L13",null,{"children":["$","$e",null,{"name":"Next.Metadata","children":"$L14"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$15",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -16:[] -10:"$W16" -:HL["/images/last-mile-approach.webp","image"] -17:T3d6f, - .dm-single-blog { - --dm-red: #c01227; - --dm-red-hover: #e31d32; - --dm-radius-card: 22px; - --dm-radius-img: 20px; - --dm-radius-badge: 8px; - --dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05); - --dm-border: 1px solid rgba(15, 23, 42, 0.09); - --dm-space-p: 24px; - --dm-space-h: 32px; - --dm-space-img: 32px; - --dm-space-quote: 40px; - --dm-sticky-top: 138px; - --dm-measure: min(1100px, 100%); - font-family: var(--font-manrope), sans-serif; - } - - /* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6 - (120/80/60px UPPERCASE) rules with !important on our own classes. */ - .dm-single-blog :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline, - specificity 0-1-1) so blog links keep our colors and never get underlined. */ - .dm-single-blog a { text-decoration: none !important; } - - /* Page banner: tall homepage-scale frame with only badge + title inside */ - /* Compound selector (specificity 20) + !important beats the global 800px - single-class height rules so the blog banner can use viewport heights. */ - .custom-standard-hero-card.dm-banner-card { - height: 90vh !important; - min-height: 85vh !important; - } - @media (max-width: 1024px) { - .custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; } - } - @media (max-width: 600px) { - .custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; } - } - - .dm-banner-inner { - position: relative; width: 100%; height: 100%; - display: flex; flex-direction: column; align-items: center; justify-content: center; - text-align: center; gap: clamp(22px, 2.6vw, 34px); - padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px); - } - - .dm-banner-category { - display: inline-block; background: var(--dm-red); color: #fff; - font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px; - padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45); - } - .dm-banner-title { - font-family: var(--font-manrope), sans-serif !important; - font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important; - line-height: 1.16 !important; letter-spacing: -1.2px !important; - color: #ffffff !important; margin: 0; max-width: 820px; - text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38); - } - @media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } } - @media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } } - - /* Content wrap begins immediately below the banner */ - /* Shared content container: the SAME max-width + horizontal padding is used - by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings, - images, Prev/Next, Related Articles and the CTA banner all align to one - grid with identical left/right edges. Keep both in sync. */ - .dm-blog-wrap { - max-width: 1280px; margin: 0 auto; - /* 20px mobile padding floor → 40px on desktop; matches the footer container. */ - padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0; - } - @media (max-width: 767px) { - .dm-blog-wrap { - padding-left: 16px; - padding-right: 16px; - } - } - - /* ── Article meta bar (directly under the hero) ── */ - .dm-meta-bar { - display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px; - padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px); - border-bottom: 1px solid rgba(15,23,42,0.10); - } - .dm-meta-breadcrumb ol { - list-style: none; display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b; - } - .dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; } - .dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; } - .dm-meta-sep { color: #cbd5e1; } - .dm-meta-current { - color: #0f172a; font-weight: 700; - max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - } - @media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } } - .dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; } - .dm-meta-item { - display: inline-flex; align-items: center; gap: 7px; - font-size: 13.5px; font-weight: 600; color: #475569; - } - .dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; } - .dm-meta-author { color: #0f172a; font-weight: 700; } - @media (max-width: 600px) { .dm-meta-bar { gap: 12px; } } - .dm-blog-layout { - display: grid; grid-template-columns: minmax(0,1fr) 320px; - /* Tighter gap gives the reading column more room next to the 320px sidebar. */ - gap: clamp(28px, 3vw, 56px); align-items: start; - } - @media (max-width: 1024px) { - .dm-blog-layout { grid-template-columns: 1fr; gap: 48px; } - /* Single-column (tablet/mobile): cap the reading column and centre it so the - article never sits left-aligned with a large empty right gutter. */ - .dm-blog-main { max-width: 900px; margin-inline: auto; } - } - .dm-blog-main { min-width: 0; } - - /* ── Intro lead ── */ - .dm-blog-intro { - max-width: var(--dm-measure); - font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500; - color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px; - border-left: 3px solid var(--dm-red); - } - - /* ── Article body ── */ - .dm-article-body { max-width: var(--dm-measure); } - .dm-article-p { - font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450; - margin: 0 0 var(--dm-space-p); - } - .dm-article-h2 { - font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important; - color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h); - text-wrap: balance; - } - /* Each article block is wrapped in its OWN ScrollReveal
    , so a bare - :first-child rule matched every heading (each is the only child of its - wrapper) and zeroed its top margin, collapsing the gap above every - section heading. Scope the reset to only the article body's first block. */ - .dm-article-body > :first-child :where(.dm-article-h2, .dm-article-h3), - .dm-article-body > .dm-article-h2:first-child, - .dm-article-body > .dm-article-h3:first-child { margin-top: 0; } - .dm-article-h3 { - font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important; - color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px; - text-wrap: balance; - } - @media (max-width: 600px) { - .dm-article-p { font-size: 16px !important; } - .dm-article-ul li, .dm-article-ol li { font-size: 15.5px; } - .dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; } - .dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; } - } - - .dm-article-ul, .dm-article-ol { - /* Top margin (was 0) separates the list from the paragraph above it; - matching bottom margin keeps it clear of the next heading/paragraph. - Slightly larger than --dm-space-p so the list reads as its own block. */ - margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px); - padding-left: 2px; list-style: none; - display: flex; flex-direction: column; gap: 15px; - } - /* Prefixed with .dm-article-body so these beat the theme's global - ".logico-front-end ul li:before" fontello-glyph bullet (specificity 0,1,3), - which otherwise replaces our clean red dot with a misaligned checkmark glyph - and adds its own 1.7em indent. */ - .dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li { - position: relative; padding-left: 34px; - font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450; - } - .dm-article-body .dm-article-ul li::before { - content: ""; position: absolute; left: 7px; top: 10px; - width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red); - /* kill any inherited fontello glyph from the global rule */ - font-size: 0; line-height: 0; - } - .dm-article-ol { counter-reset: dm-li; } - .dm-article-body .dm-article-ol li { counter-increment: dm-li; } - .dm-article-body .dm-article-ol li::before { - content: counter(dm-li); position: absolute; left: 0; top: 0; - width: 24px; height: 24px; border-radius: 7px; - background: rgba(192,18,39,0.10); color: var(--dm-red); - font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; - } - - /* ── Quote ── */ - .dm-article-quote { - position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px; - background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%); - border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0; - box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06); - } - .dm-article-quote::before { - content: "\201C"; position: absolute; left: 22px; top: 8px; - font-family: Georgia, "Times New Roman", serif; - font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700; - } - .dm-article-quote p { - font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600; - font-style: italic; color: #1e293b; margin: 0; - } - .dm-article-quote cite { - display: block; margin-top: 16px; font-size: 13px; font-weight: 700; - font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px; - } - @media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } } - - /* ── Images ── */ - .dm-article-figure { margin: var(--dm-space-img) 0; } - .dm-article-figure-img { - position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; - border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10); - } - .dm-article-figure figcaption { - margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500; - text-align: center; font-style: italic; - } - - /* ── Sidebar ── */ - .dm-blog-aside-wrap { position: relative; } - .dm-blog-sidebar { - display: flex; flex-direction: column; gap: 18px; - position: sticky; top: var(--dm-sticky-top); - } - @media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } } - - .dm-blog-widget { - background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card); - padding: 20px; box-shadow: var(--dm-shadow-card); - } - .dm-blog-widget-title { - font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important; - letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important; - margin: 0 0 15px; padding: 0 0 12px; - border-bottom: 1px solid rgba(15,23,42,0.08); - overflow: visible; white-space: normal; word-break: normal; - } - - /* Search */ - .dm-sr-only { - position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; - overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; - } - .dm-blog-search { position: relative; } - .dm-blog-search-form { position: relative; } - .dm-blog-search-input { - width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px; - padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a; - background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; - } - .dm-blog-search-input::placeholder { color: #9c9c9c; } - .dm-blog-search-input:focus { - outline: none; border-color: var(--dm-red); background: #fff; - box-shadow: 0 0 0 3px rgba(192,18,39,0.11); - } - .dm-blog-search-icon { - position: absolute; right: 14px; top: 50%; transform: translateY(-50%); - color: #94a3b8; pointer-events: none; display: flex; - } - .dm-blog-search-results { - position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0; - background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px; - box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden; - } - .dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; } - .dm-blog-search-result { - display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; - border-radius: 10px; text-decoration: none; transition: background .15s ease; - } - .dm-blog-search-result:hover { background: #f8fafc; } - .dm-blog-search-result-cat { - font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red); - } - .dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; } - .dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; } - - /* Recent posts */ - .dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; } - .dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; } - .dm-blog-recent-thumb { - position: relative; flex: 0 0 62px; width: 62px; height: 62px; - border-radius: 13px; overflow: hidden; background: #f1f5f9; - } - .dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; } - .dm-blog-recent-title { - font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); } - .dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; } - - /* Categories */ - .dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; } - .dm-blog-category-item { - display: flex; align-items: center; justify-content: space-between; gap: 10px; - padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important; - border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease; - } - .dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; } - .dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; } - .dm-blog-category-item > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .dm-blog-category-count { - flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9; - min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex; - align-items: center; justify-content: center; padding: 0 7px; - } - - /* CTA card */ - .dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; } - .dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; } - .dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; } - .dm-blog-cta-btn { - display: inline-flex; align-items: center; gap: 8px; - background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700; - padding: 12px 22px; border-radius: 12px; text-decoration: none; - transition: background .2s ease, transform .2s ease; - } - .dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } -c:["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"headline\":\"How Doormile Maintains 99.9% SLA Compliance at Scale\",\"description\":\"High SLA performance comes from checking ETAs before dispatch, reacting early to delays, and keeping customer commitments visible throughout the day.\",\"image\":[\"https://www.doormile.com/images/last-mile-approach.webp\"],\"datePublished\":\"2025-06-26T00:00:00.000Z\",\"dateModified\":\"2025-06-26T00:00:00.000Z\",\"author\":{\"@type\":\"Organization\",\"name\":\"Doormile Team\",\"url\":\"https://www.doormile.com\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Doormile\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.doormile.com/images/cropped-image-2.png\"}},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.doormile.com/blog/how-doormile-maintains-99-9-sla-compliance-at-scale\"},\"articleSection\":\"Operations\"}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://www.doormile.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https://www.doormile.com/blog\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How Doormile Maintains 99.9% SLA Compliance at Scale\",\"item\":\"https://www.doormile.com/blog/how-doormile-maintains-99-9-sla-compliance-at-scale\"}]}"}}],["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":[["$","article",null,{"className":"dm-single-blog","children":[["$","link",null,{"rel":"preload","as":"image","href":"/images/last-mile-approach.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$17"}}],"$L18","$L19"]}],"$L1a"]}]}]]}] -1b:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],""] -1c:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"ScrollReveal"] -18:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card dm-banner-card","style":{"backgroundImage":"url(/images/last-mile-approach.webp)","--hero-overlay":"linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)"},"children":["$","div",null,{"className":"e-con-inner dm-banner-inner","children":[["$","span",null,{"className":"dm-banner-category","children":"Operations"}],["$","h1",null,{"className":"dm-banner-title","children":"How Doormile Maintains 99.9% SLA Compliance at Scale"}]]}]}]}] -19:["$","div",null,{"className":"dm-blog-wrap","children":[["$","div",null,{"className":"dm-meta-bar","children":[["$","nav",null,{"className":"dm-meta-breadcrumb","aria-label":"Breadcrumb","children":["$","ol",null,{"children":[["$","li",null,{"children":["$","$L1b",null,{"href":"/","children":"Home"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"children":["$","$L1b",null,{"href":"/blog","children":"Blog"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"aria-current":"page","className":"dm-meta-current","children":"How Doormile Maintains 99.9% SLA Compliance at Scale"}]]}]}],["$","div",null,{"className":"dm-meta-items","children":[["$","span",null,{"className":"dm-meta-item dm-meta-author","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","path",null,{"d":"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}],["$","circle",null,{"cx":"12","cy":"7","r":"4"}]]}],"Doormile Team"]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"2"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}]]}],["$","time",null,{"dateTime":"2025-06-26","children":"Jun 26, 2025"}]]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","circle",null,{"cx":"12","cy":"12","r":"9"}],["$","polyline",null,{"points":"12 7 12 12 15 14"}]]}],2," min read"]}]]}]]}],["$","div",null,{"className":"dm-blog-layout","children":[["$","div",null,{"className":"dm-blog-main","children":[["$","p",null,{"className":"dm-blog-intro","children":"Strong SLA performance is not luck. It comes from planning the day so late deliveries are the exception, not the expected risk."}],["$","div",null,{"className":"dm-article-body","children":[["$","$L1c","0",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"In last-mile logistics, a missed SLA is rarely caused by one big failure. It usually comes from small delays adding up across a route. How Doormile Maintains 99.9% SLA Compliance at Scale looks at how delivery teams can spot those delays early and plan around them before vehicles leave the hub."}]}],["$","$L1c","1",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Why this matters for fleet teams"}]}],["$","$L1c","2",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Every extra kilometre costs money. It uses fuel or charge, adds rider time, wears down vehicles, and increases the chance of a late delivery. When routes are built from fixed zones or old habits, those costs repeat every day."}]}],["$","$L1c","3",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"Fewer vehicles needed for the same number of drops"}],["$","li","1",{"children":"Lower cost per drop through better stop sequencing"}],["$","li","2",{"children":"ETAs that match traffic, distance, and delivery windows"}],["$","li","3",{"children":"Less fuel or charge used per completed order"}]]}]}],["$","$L1c","4",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"From orders to dispatch"}]}],["$","$L1c","5",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"A good dispatch plan starts with the basics: order locations, promised delivery windows, rider capacity, vehicle range, and known traffic trouble spots. MileTruth™ checks those inputs before dispatch so the team is not fixing avoidable mistakes on the road."}]}],["$","$L1c","6",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","figure",null,{"className":"dm-article-figure","children":[["$","span",null,{"className":"dm-article-figure-img","children":"$L1d"}],"$L1e"]}]}],"$L1f","$L20","$L21","$L22","$L23"]}]]}],"$L24"]}]]}] -25:T2021, - .dm-blog-footer { - font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32; - /* The global theme applies 72px top/bottom section padding — strip it so the - inner container is the single source of vertical rhythm (no double gap). */ - padding: 0 !important; - } - /* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */ - .dm-blog-footer :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline) */ - .dm-blog-footer a { text-decoration: none !important; } - /* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px - max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA - align to the exact same left/right edges as the article body above. - Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a - consistent ~64–72px section→section gap (no 120px+ voids). */ - .dm-blog-footer-inner { - max-width: 1280px; margin: 0 auto; - /* Compact vertical rhythm on an 8px system. Top padding sets the - article→Prev/Next gap (~24–32px); the inter-section gap sets the - Prev/Next→Related gap (~32–48px). No large arbitrary voids. */ - /* Minimal bottom padding — the global site footer already contributes its - own 20px top inset, so the CTA banner sits close to it without a void. */ - padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px); - display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px); - } - @media (max-width: 767px) { - .dm-blog-footer-inner { - padding-left: 16px; - padding-right: 16px; - } - } - - /* Prev / Next */ - .dm-prevnext { - display: grid; grid-template-columns: 1fr 1fr; gap: 20px; - /* Halved from 40px: tight divider→cards spacing without crowding. */ - padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08); - } - @media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } } - .dm-prevnext-placeholder { display: block; } - .dm-prevnext-card { - display: flex; gap: 16px; align-items: center; padding: 16px; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; - } - .dm-prevnext-card:hover { - transform: translateY(-4px); border-color: rgba(192,18,39,0.2); - box-shadow: 0 16px 34px rgba(192,18,39,0.10); - } - .dm-prevnext-thumb { - position: relative; flex: 0 0 80px; width: 80px; height: 80px; - border-radius: 16px; overflow: hidden; background: #f1f5f9; - } - .dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; } - .dm-prevnext-next { text-align: right; } - .dm-prevnext-next .dm-prevnext-text { align-items: flex-end; } - .dm-prevnext-label { - display: inline-flex; align-items: center; gap: 6px; - font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red); - } - .dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; } - .dm-prevnext-title { - font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); } - - /* Related */ - .dm-related-heading { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important; - line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px; - } - .dm-related-grid { - display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; - } - @media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } } - @media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } } - - .dm-related-card { - display: flex; flex-direction: column; height: 100%; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none; - transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease; - } - .dm-related-card:hover { - transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13); - border-color: rgba(192,18,39,0.2); - } - .dm-related-img { - position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9; - } - .dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-img img { transform: scale(1.05); } - .dm-related-badge { - position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff; - font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px; - padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25); - } - .dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; } - .dm-related-card-title { - font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important; - letter-spacing: -.2px !important; margin: 0 0 10px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-related-card:hover .dm-related-card-title { color: var(--dm-red); } - .dm-related-card-excerpt { - font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - } - .dm-related-readmore { - margin-top: auto; display: inline-flex; align-items: center; gap: 7px; - font-size: 12.5px; font-weight: 800; color: var(--dm-red); - text-transform: uppercase; letter-spacing: .6px; - } - .dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); } - - /* Contact CTA banner */ - .dm-blog-contact-cta { - display: flex; align-items: center; justify-content: space-between; gap: 32px; - flex-wrap: wrap; - background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%); - border-radius: 30px; padding: clamp(32px, 4vw, 56px); - position: relative; overflow: hidden; - } - .dm-blog-contact-cta::after { - content: ""; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px; - background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%); - pointer-events: none; - } - .dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; } - .dm-blog-contact-eyebrow { - display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase; - letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px; - } - .dm-blog-contact-title { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important; - letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance; - } - .dm-blog-contact-sub { - font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450; - } - .dm-blog-contact-btn { - position: relative; z-index: 1; flex-shrink: 0; - display: inline-flex; align-items: center; justify-content: center; gap: 10px; - background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700; - padding: 16px 32px; border-radius: 16px; text-decoration: none; - box-shadow: 0 10px 26px rgba(192,18,39,0.34); - transition: background .2s ease, transform .2s ease; - } - .dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } - @media (max-width: 720px) { - .dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; } - .dm-blog-contact-btn { width: 100%; } - } -1a:["$","section",null,{"className":"dm-blog-footer","aria-label":"More articles","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$25"}}],"$L26"]}] -27:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"Image"] -28:I[23096,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"default"] -1d:["$","$L27",null,{"src":"/images/last-mile-approach.webp","alt":"How Doormile Maintains 99.9% SLA Compliance at Scale","fill":true,"sizes":"(max-width: 768px) 100vw, 760px","style":{"objectFit":"cover"}}] -1e:["$","figcaption",null,{"children":"Operations: route planning decisions made before dispatch."}] -1f:["$","$L1c","7",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","blockquote",null,{"className":"dm-article-quote","children":[["$","p",null,{"children":"A route should be checked before the rider leaves, not explained after the customer calls."}],["$","cite",null,{"children":"Doormile Operations"}]]}]}] -20:["$","$L1c","8",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Putting it into practice"}]}] -21:["$","$L1c","9",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The best improvements usually start with simple measurements. Track distance per route, failed delivery windows, rider idle time, and orders moved between vehicles after dispatch. Those numbers show where the operation is leaking time."}]}] -22:["$","$L1c","10",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ol",null,{"className":"dm-article-ol","children":[["$","li","0",{"children":"Benchmark today's distance, fleet size, and on-time rate."}],["$","li","1",{"children":"Include vehicle capacity, delivery windows, rider shifts, and battery charge."}],["$","li","2",{"children":"Check routes against traffic and customer commitments before dispatch."}],["$","li","3",{"children":"Compare the next dispatch cycle against the old plan."}]]}]}] -23:["$","$L1c","11",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Better routing is not about pushing riders harder. It is about giving them a plan that already accounts for the real day ahead."}]}] -24:["$","div",null,{"className":"dm-blog-aside-wrap","children":["$","aside",null,{"className":"dm-blog-sidebar","aria-label":"Blog sidebar","children":[["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Search"}],["$","$L28",null,{}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Recent Posts"}],["$","ul",null,{"className":"dm-blog-recent","children":[["$","li","how-ai-is-transforming-last-mile-ev-delivery",{"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","time",null,{"dateTime":"2025-10-02","className":"dm-blog-recent-date","children":"Oct 2, 2025"}]]}]]}]}],["$","li","42-less-distance-insights-from-our-hyderabad-hub",{"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","time",null,{"dateTime":"2025-09-18","className":"dm-blog-recent-date","children":"Sep 18, 2025"}]]}]]}]}],["$","li","miletruth-ai-10-stages-to-smarter-dispatch",{"children":["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","time",null,{"dateTime":"2025-09-05","className":"dm-blog-recent-date","children":"Sep 5, 2025"}]]}]]}]}],["$","li","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"children":["$","$L1b",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","time",null,{"dateTime":"2025-08-21","className":"dm-blog-recent-date","children":"Aug 21, 2025"}]]}]]}]}]]}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Categories"}],["$","ul",null,{"className":"dm-blog-categories","children":[["$","li","Case Study",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Case Study"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","EV Fleet",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"EV Fleet"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}],["$","li","Fleet Management",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Fleet Management"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","MileTruth",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"MileTruth"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],"$L29","$L2a","$L2b"]}]]}],"$L2c"]}]}] -26:["$","div",null,{"className":"dm-blog-footer-inner","children":[["$","nav",null,{"className":"dm-prevnext","aria-label":"Article navigation","children":[["$","$L1b",null,{"href":"/blog/building-a-greener-city-the-future-of-urban-logistics","className":"dm-prevnext-card dm-prevnext-prev","children":[["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-6.webp","alt":"Building a Greener City: The Future of Urban Logistics","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"19","y1":"12","x2":"5","y2":"12"}],["$","polyline",null,{"points":"12 19 5 12 12 5"}]]}],"Previous"]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Sustainability"}],["$","span",null,{"className":"dm-prevnext-title","children":"Building a Greener City: The Future of Urban Logistics"}]]}]]}],["$","$L1b",null,{"href":"/blog/battery-simulation-the-secret-to-ev-route-pre-validation","className":"dm-prevnext-card dm-prevnext-next","children":[["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":["Next",["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","span",null,{"className":"dm-prevnext-cat","children":"EV Fleet"}],["$","span",null,{"className":"dm-prevnext-title","children":"Battery Simulation: The Secret to EV Route Pre-Validation"}]]}],["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-3.webp","alt":"Battery Simulation: The Secret to EV Route Pre-Validation","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}]]}]]}],["$","div",null,{"className":"dm-related","children":[["$","h2",null,{"className":"dm-related-heading","children":"Related Articles"}],["$","div",null,{"className":"dm-related-grid","children":[["$","$L1c","how-ai-is-transforming-last-mile-ev-delivery",{"delay":0,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Technology"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L1c","42-less-distance-insights-from-our-hyderabad-hub",{"delay":0.08,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Case Study"}]]}],["$","div",null,{"className":"dm-related-body","children":["$L2d","$L2e","$L2f"]}]]}]}],"$L30"]}]]}],"$L31"]}] -29:["$","li","Operations",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Operations"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2a:["$","li","Sustainability",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Sustainability"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2b:["$","li","Technology",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Technology"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}] -2c:["$","section",null,{"className":"dm-blog-widget dm-blog-cta-card","children":[["$","h2",null,{"className":"dm-blog-cta-title","children":"Planning delivery routes?"}],["$","p",null,{"className":"dm-blog-cta-text","children":"Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time."}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-cta-btn","children":["Contact Us",["$","svg",null,{"width":"18","height":"18","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -2d:["$","h3",null,{"className":"dm-related-card-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}] -2e:["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}] -2f:["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}] -30:["$","$L1c","miletruth-ai-10-stages-to-smarter-dispatch",{"delay":0.16,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"MileTruth"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}] -31:["$","div",null,{"className":"dm-blog-contact-cta","children":[["$","div",null,{"className":"dm-blog-contact-cta-content","children":[["$","span",null,{"className":"dm-blog-contact-eyebrow","children":"Let's talk logistics"}],["$","h2",null,{"className":"dm-blog-contact-title","children":"Ready to move smarter with Doormile?"}],["$","p",null,{"className":"dm-blog-contact-sub","children":"Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding."}]]}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-contact-btn","children":["Get in Touch",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -12:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -32:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -f:null -14:[["$","title","0",{"children":"How Doormile Maintains 99.9% SLA Compliance at Scale – Doormile"}],["$","meta","1",{"name":"description","content":"High SLA performance comes from checking ETAs before dispatch, reacting early to delays, and keeping customer commitments visible throughout the day."}],["$","meta","2",{"name":"author","content":"Doormile Team"}],["$","meta","3",{"name":"keywords","content":"Operations,last-mile logistics,EV fleet,MileTruth,route optimisation"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","link","5",{"rel":"canonical","href":"https://www.doormile.com/blog/how-doormile-maintains-99-9-sla-compliance-at-scale"}],["$","meta","6",{"property":"og:title","content":"How Doormile Maintains 99.9% SLA Compliance at Scale"}],["$","meta","7",{"property":"og:description","content":"High SLA performance comes from checking ETAs before dispatch, reacting early to delays, and keeping customer commitments visible throughout the day."}],["$","meta","8",{"property":"og:url","content":"https://www.doormile.com/blog/how-doormile-maintains-99-9-sla-compliance-at-scale"}],["$","meta","9",{"property":"og:site_name","content":"Doormile"}],["$","meta","10",{"property":"og:image","content":"https://www.doormile.com/images/last-mile-approach.webp"}],["$","meta","11",{"property":"og:image:alt","content":"How Doormile Maintains 99.9% SLA Compliance at Scale"}],["$","meta","12",{"property":"og:type","content":"article"}],["$","meta","13",{"property":"article:published_time","content":"2025-06-26T00:00:00.000Z"}],["$","meta","14",{"property":"article:author","content":"Doormile Team"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"How Doormile Maintains 99.9% SLA Compliance at Scale"}],["$","meta","17",{"name":"twitter:description","content":"High SLA performance comes from checking ETAs before dispatch, reacting early to delays, and keeping customer commitments visible throughout the day."}],["$","meta","18",{"name":"twitter:image","content":"https://www.doormile.com/images/last-mile-approach.webp"}],["$","link","19",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","21",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","22",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L32","23",{}]] diff --git a/build/blog/how-doormile-maintains-99-9-sla-compliance-at-scale/__next._head.txt b/build/blog/how-doormile-maintains-99-9-sla-compliance-at-scale/__next._head.txt deleted file mode 100644 index 6be6839..0000000 --- a/build/blog/how-doormile-maintains-99-9-sla-compliance-at-scale/__next._head.txt +++ /dev/null @@ -1,6 +0,0 @@ -1:"$Sreact.fragment" -2:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -3:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -4:"$Sreact.suspense" -5:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"How Doormile Maintains 99.9% SLA Compliance at Scale – Doormile"}],["$","meta","1",{"name":"description","content":"High SLA performance comes from checking ETAs before dispatch, reacting early to delays, and keeping customer commitments visible throughout the day."}],["$","meta","2",{"name":"author","content":"Doormile Team"}],["$","meta","3",{"name":"keywords","content":"Operations,last-mile logistics,EV fleet,MileTruth,route optimisation"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","link","5",{"rel":"canonical","href":"https://www.doormile.com/blog/how-doormile-maintains-99-9-sla-compliance-at-scale"}],["$","meta","6",{"property":"og:title","content":"How Doormile Maintains 99.9% SLA Compliance at Scale"}],["$","meta","7",{"property":"og:description","content":"High SLA performance comes from checking ETAs before dispatch, reacting early to delays, and keeping customer commitments visible throughout the day."}],["$","meta","8",{"property":"og:url","content":"https://www.doormile.com/blog/how-doormile-maintains-99-9-sla-compliance-at-scale"}],["$","meta","9",{"property":"og:site_name","content":"Doormile"}],["$","meta","10",{"property":"og:image","content":"https://www.doormile.com/images/last-mile-approach.webp"}],["$","meta","11",{"property":"og:image:alt","content":"How Doormile Maintains 99.9% SLA Compliance at Scale"}],["$","meta","12",{"property":"og:type","content":"article"}],["$","meta","13",{"property":"article:published_time","content":"2025-06-26T00:00:00.000Z"}],["$","meta","14",{"property":"article:author","content":"Doormile Team"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"How Doormile Maintains 99.9% SLA Compliance at Scale"}],["$","meta","17",{"name":"twitter:description","content":"High SLA performance comes from checking ETAs before dispatch, reacting early to delays, and keeping customer commitments visible throughout the day."}],["$","meta","18",{"name":"twitter:image","content":"https://www.doormile.com/images/last-mile-approach.webp"}],["$","link","19",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","21",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","22",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L5","23",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/how-doormile-maintains-99-9-sla-compliance-at-scale/__next._index.txt b/build/blog/how-doormile-maintains-99-9-sla-compliance-at-scale/__next._index.txt deleted file mode 100644 index d0b3355..0000000 --- a/build/blog/how-doormile-maintains-99-9-sla-compliance-at-scale/__next._index.txt +++ /dev/null @@ -1,15 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","template":["$","$La",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/how-doormile-maintains-99-9-sla-compliance-at-scale/__next._tree.txt b/build/blog/how-doormile-maintains-99-9-sla-compliance-at-scale/__next._tree.txt deleted file mode 100644 index 9ae97a2..0000000 --- a/build/blog/how-doormile-maintains-99-9-sla-compliance-at-scale/__next._tree.txt +++ /dev/null @@ -1,10 +0,0 @@ -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -:HL["/images/last-mile-approach.webp","image"] -0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"blog","param":null,"prefetchHints":0,"slots":{"children":{"name":"slug","param":{"type":"d","key":"how-doormile-maintains-99-9-sla-compliance-at-scale","siblings":null},"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/how-doormile-maintains-99-9-sla-compliance-at-scale/__next.blog.$d$slug.__PAGE__.txt b/build/blog/how-doormile-maintains-99-9-sla-compliance-at-scale/__next.blog.$d$slug.__PAGE__.txt deleted file mode 100644 index a7c822f..0000000 --- a/build/blog/how-doormile-maintains-99-9-sla-compliance-at-scale/__next.blog.$d$slug.__PAGE__.txt +++ /dev/null @@ -1,521 +0,0 @@ -1:"$Sreact.fragment" -8:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],""] -9:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"ScrollReveal"] -14:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -15:"$Sreact.suspense" -17:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"Image"] -18:I[23096,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"default"] -:HL["/images/last-mile-approach.webp","image"] -2:T3d6f, - .dm-single-blog { - --dm-red: #c01227; - --dm-red-hover: #e31d32; - --dm-radius-card: 22px; - --dm-radius-img: 20px; - --dm-radius-badge: 8px; - --dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05); - --dm-border: 1px solid rgba(15, 23, 42, 0.09); - --dm-space-p: 24px; - --dm-space-h: 32px; - --dm-space-img: 32px; - --dm-space-quote: 40px; - --dm-sticky-top: 138px; - --dm-measure: min(1100px, 100%); - font-family: var(--font-manrope), sans-serif; - } - - /* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6 - (120/80/60px UPPERCASE) rules with !important on our own classes. */ - .dm-single-blog :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline, - specificity 0-1-1) so blog links keep our colors and never get underlined. */ - .dm-single-blog a { text-decoration: none !important; } - - /* Page banner: tall homepage-scale frame with only badge + title inside */ - /* Compound selector (specificity 20) + !important beats the global 800px - single-class height rules so the blog banner can use viewport heights. */ - .custom-standard-hero-card.dm-banner-card { - height: 90vh !important; - min-height: 85vh !important; - } - @media (max-width: 1024px) { - .custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; } - } - @media (max-width: 600px) { - .custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; } - } - - .dm-banner-inner { - position: relative; width: 100%; height: 100%; - display: flex; flex-direction: column; align-items: center; justify-content: center; - text-align: center; gap: clamp(22px, 2.6vw, 34px); - padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px); - } - - .dm-banner-category { - display: inline-block; background: var(--dm-red); color: #fff; - font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px; - padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45); - } - .dm-banner-title { - font-family: var(--font-manrope), sans-serif !important; - font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important; - line-height: 1.16 !important; letter-spacing: -1.2px !important; - color: #ffffff !important; margin: 0; max-width: 820px; - text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38); - } - @media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } } - @media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } } - - /* Content wrap begins immediately below the banner */ - /* Shared content container: the SAME max-width + horizontal padding is used - by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings, - images, Prev/Next, Related Articles and the CTA banner all align to one - grid with identical left/right edges. Keep both in sync. */ - .dm-blog-wrap { - max-width: 1280px; margin: 0 auto; - /* 20px mobile padding floor → 40px on desktop; matches the footer container. */ - padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0; - } - @media (max-width: 767px) { - .dm-blog-wrap { - padding-left: 16px; - padding-right: 16px; - } - } - - /* ── Article meta bar (directly under the hero) ── */ - .dm-meta-bar { - display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px; - padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px); - border-bottom: 1px solid rgba(15,23,42,0.10); - } - .dm-meta-breadcrumb ol { - list-style: none; display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b; - } - .dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; } - .dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; } - .dm-meta-sep { color: #cbd5e1; } - .dm-meta-current { - color: #0f172a; font-weight: 700; - max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - } - @media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } } - .dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; } - .dm-meta-item { - display: inline-flex; align-items: center; gap: 7px; - font-size: 13.5px; font-weight: 600; color: #475569; - } - .dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; } - .dm-meta-author { color: #0f172a; font-weight: 700; } - @media (max-width: 600px) { .dm-meta-bar { gap: 12px; } } - .dm-blog-layout { - display: grid; grid-template-columns: minmax(0,1fr) 320px; - /* Tighter gap gives the reading column more room next to the 320px sidebar. */ - gap: clamp(28px, 3vw, 56px); align-items: start; - } - @media (max-width: 1024px) { - .dm-blog-layout { grid-template-columns: 1fr; gap: 48px; } - /* Single-column (tablet/mobile): cap the reading column and centre it so the - article never sits left-aligned with a large empty right gutter. */ - .dm-blog-main { max-width: 900px; margin-inline: auto; } - } - .dm-blog-main { min-width: 0; } - - /* ── Intro lead ── */ - .dm-blog-intro { - max-width: var(--dm-measure); - font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500; - color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px; - border-left: 3px solid var(--dm-red); - } - - /* ── Article body ── */ - .dm-article-body { max-width: var(--dm-measure); } - .dm-article-p { - font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450; - margin: 0 0 var(--dm-space-p); - } - .dm-article-h2 { - font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important; - color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h); - text-wrap: balance; - } - /* Each article block is wrapped in its OWN ScrollReveal
    , so a bare - :first-child rule matched every heading (each is the only child of its - wrapper) and zeroed its top margin, collapsing the gap above every - section heading. Scope the reset to only the article body's first block. */ - .dm-article-body > :first-child :where(.dm-article-h2, .dm-article-h3), - .dm-article-body > .dm-article-h2:first-child, - .dm-article-body > .dm-article-h3:first-child { margin-top: 0; } - .dm-article-h3 { - font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important; - color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px; - text-wrap: balance; - } - @media (max-width: 600px) { - .dm-article-p { font-size: 16px !important; } - .dm-article-ul li, .dm-article-ol li { font-size: 15.5px; } - .dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; } - .dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; } - } - - .dm-article-ul, .dm-article-ol { - /* Top margin (was 0) separates the list from the paragraph above it; - matching bottom margin keeps it clear of the next heading/paragraph. - Slightly larger than --dm-space-p so the list reads as its own block. */ - margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px); - padding-left: 2px; list-style: none; - display: flex; flex-direction: column; gap: 15px; - } - /* Prefixed with .dm-article-body so these beat the theme's global - ".logico-front-end ul li:before" fontello-glyph bullet (specificity 0,1,3), - which otherwise replaces our clean red dot with a misaligned checkmark glyph - and adds its own 1.7em indent. */ - .dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li { - position: relative; padding-left: 34px; - font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450; - } - .dm-article-body .dm-article-ul li::before { - content: ""; position: absolute; left: 7px; top: 10px; - width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red); - /* kill any inherited fontello glyph from the global rule */ - font-size: 0; line-height: 0; - } - .dm-article-ol { counter-reset: dm-li; } - .dm-article-body .dm-article-ol li { counter-increment: dm-li; } - .dm-article-body .dm-article-ol li::before { - content: counter(dm-li); position: absolute; left: 0; top: 0; - width: 24px; height: 24px; border-radius: 7px; - background: rgba(192,18,39,0.10); color: var(--dm-red); - font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; - } - - /* ── Quote ── */ - .dm-article-quote { - position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px; - background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%); - border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0; - box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06); - } - .dm-article-quote::before { - content: "\201C"; position: absolute; left: 22px; top: 8px; - font-family: Georgia, "Times New Roman", serif; - font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700; - } - .dm-article-quote p { - font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600; - font-style: italic; color: #1e293b; margin: 0; - } - .dm-article-quote cite { - display: block; margin-top: 16px; font-size: 13px; font-weight: 700; - font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px; - } - @media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } } - - /* ── Images ── */ - .dm-article-figure { margin: var(--dm-space-img) 0; } - .dm-article-figure-img { - position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; - border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10); - } - .dm-article-figure figcaption { - margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500; - text-align: center; font-style: italic; - } - - /* ── Sidebar ── */ - .dm-blog-aside-wrap { position: relative; } - .dm-blog-sidebar { - display: flex; flex-direction: column; gap: 18px; - position: sticky; top: var(--dm-sticky-top); - } - @media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } } - - .dm-blog-widget { - background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card); - padding: 20px; box-shadow: var(--dm-shadow-card); - } - .dm-blog-widget-title { - font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important; - letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important; - margin: 0 0 15px; padding: 0 0 12px; - border-bottom: 1px solid rgba(15,23,42,0.08); - overflow: visible; white-space: normal; word-break: normal; - } - - /* Search */ - .dm-sr-only { - position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; - overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; - } - .dm-blog-search { position: relative; } - .dm-blog-search-form { position: relative; } - .dm-blog-search-input { - width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px; - padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a; - background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; - } - .dm-blog-search-input::placeholder { color: #9c9c9c; } - .dm-blog-search-input:focus { - outline: none; border-color: var(--dm-red); background: #fff; - box-shadow: 0 0 0 3px rgba(192,18,39,0.11); - } - .dm-blog-search-icon { - position: absolute; right: 14px; top: 50%; transform: translateY(-50%); - color: #94a3b8; pointer-events: none; display: flex; - } - .dm-blog-search-results { - position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0; - background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px; - box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden; - } - .dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; } - .dm-blog-search-result { - display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; - border-radius: 10px; text-decoration: none; transition: background .15s ease; - } - .dm-blog-search-result:hover { background: #f8fafc; } - .dm-blog-search-result-cat { - font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red); - } - .dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; } - .dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; } - - /* Recent posts */ - .dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; } - .dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; } - .dm-blog-recent-thumb { - position: relative; flex: 0 0 62px; width: 62px; height: 62px; - border-radius: 13px; overflow: hidden; background: #f1f5f9; - } - .dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; } - .dm-blog-recent-title { - font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); } - .dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; } - - /* Categories */ - .dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; } - .dm-blog-category-item { - display: flex; align-items: center; justify-content: space-between; gap: 10px; - padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important; - border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease; - } - .dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; } - .dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; } - .dm-blog-category-item > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .dm-blog-category-count { - flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9; - min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex; - align-items: center; justify-content: center; padding: 0 7px; - } - - /* CTA card */ - .dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; } - .dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; } - .dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; } - .dm-blog-cta-btn { - display: inline-flex; align-items: center; gap: 8px; - background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700; - padding: 12px 22px; border-radius: 12px; text-decoration: none; - transition: background .2s ease, transform .2s ease; - } - .dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } -0:{"rsc":["$","$1","c",{"children":[["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"headline\":\"How Doormile Maintains 99.9% SLA Compliance at Scale\",\"description\":\"High SLA performance comes from checking ETAs before dispatch, reacting early to delays, and keeping customer commitments visible throughout the day.\",\"image\":[\"https://www.doormile.com/images/last-mile-approach.webp\"],\"datePublished\":\"2025-06-26T00:00:00.000Z\",\"dateModified\":\"2025-06-26T00:00:00.000Z\",\"author\":{\"@type\":\"Organization\",\"name\":\"Doormile Team\",\"url\":\"https://www.doormile.com\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Doormile\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.doormile.com/images/cropped-image-2.png\"}},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.doormile.com/blog/how-doormile-maintains-99-9-sla-compliance-at-scale\"},\"articleSection\":\"Operations\"}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://www.doormile.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https://www.doormile.com/blog\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How Doormile Maintains 99.9% SLA Compliance at Scale\",\"item\":\"https://www.doormile.com/blog/how-doormile-maintains-99-9-sla-compliance-at-scale\"}]}"}}],["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":[["$","article",null,{"className":"dm-single-blog","children":[["$","link",null,{"rel":"preload","as":"image","href":"/images/last-mile-approach.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$2"}}],"$L3","$L4"]}],"$L5"]}]}]]}],["$L6"],"$L7"]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} -3:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card dm-banner-card","style":{"backgroundImage":"url(/images/last-mile-approach.webp)","--hero-overlay":"linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)"},"children":["$","div",null,{"className":"e-con-inner dm-banner-inner","children":[["$","span",null,{"className":"dm-banner-category","children":"Operations"}],["$","h1",null,{"className":"dm-banner-title","children":"How Doormile Maintains 99.9% SLA Compliance at Scale"}]]}]}]}] -4:["$","div",null,{"className":"dm-blog-wrap","children":[["$","div",null,{"className":"dm-meta-bar","children":[["$","nav",null,{"className":"dm-meta-breadcrumb","aria-label":"Breadcrumb","children":["$","ol",null,{"children":[["$","li",null,{"children":["$","$L8",null,{"href":"/","children":"Home"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"children":["$","$L8",null,{"href":"/blog","children":"Blog"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"aria-current":"page","className":"dm-meta-current","children":"How Doormile Maintains 99.9% SLA Compliance at Scale"}]]}]}],["$","div",null,{"className":"dm-meta-items","children":[["$","span",null,{"className":"dm-meta-item dm-meta-author","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","path",null,{"d":"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}],["$","circle",null,{"cx":"12","cy":"7","r":"4"}]]}],"Doormile Team"]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"2"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}]]}],["$","time",null,{"dateTime":"2025-06-26","children":"Jun 26, 2025"}]]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","circle",null,{"cx":"12","cy":"12","r":"9"}],["$","polyline",null,{"points":"12 7 12 12 15 14"}]]}],2," min read"]}]]}]]}],["$","div",null,{"className":"dm-blog-layout","children":[["$","div",null,{"className":"dm-blog-main","children":[["$","p",null,{"className":"dm-blog-intro","children":"Strong SLA performance is not luck. It comes from planning the day so late deliveries are the exception, not the expected risk."}],["$","div",null,{"className":"dm-article-body","children":[["$","$L9","0",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"In last-mile logistics, a missed SLA is rarely caused by one big failure. It usually comes from small delays adding up across a route. How Doormile Maintains 99.9% SLA Compliance at Scale looks at how delivery teams can spot those delays early and plan around them before vehicles leave the hub."}]}],["$","$L9","1",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Why this matters for fleet teams"}]}],["$","$L9","2",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Every extra kilometre costs money. It uses fuel or charge, adds rider time, wears down vehicles, and increases the chance of a late delivery. When routes are built from fixed zones or old habits, those costs repeat every day."}]}],["$","$L9","3",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"Fewer vehicles needed for the same number of drops"}],["$","li","1",{"children":"Lower cost per drop through better stop sequencing"}],["$","li","2",{"children":"ETAs that match traffic, distance, and delivery windows"}],["$","li","3",{"children":"Less fuel or charge used per completed order"}]]}]}],["$","$L9","4",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"From orders to dispatch"}]}],["$","$L9","5",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"A good dispatch plan starts with the basics: order locations, promised delivery windows, rider capacity, vehicle range, and known traffic trouble spots. MileTruth™ checks those inputs before dispatch so the team is not fixing avoidable mistakes on the road."}]}],["$","$L9","6",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","figure",null,{"className":"dm-article-figure","children":[["$","span",null,{"className":"dm-article-figure-img","children":"$La"}],"$Lb"]}]}],"$Lc","$Ld","$Le","$Lf","$L10"]}]]}],"$L11"]}]]}] -12:T2021, - .dm-blog-footer { - font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32; - /* The global theme applies 72px top/bottom section padding — strip it so the - inner container is the single source of vertical rhythm (no double gap). */ - padding: 0 !important; - } - /* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */ - .dm-blog-footer :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline) */ - .dm-blog-footer a { text-decoration: none !important; } - /* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px - max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA - align to the exact same left/right edges as the article body above. - Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a - consistent ~64–72px section→section gap (no 120px+ voids). */ - .dm-blog-footer-inner { - max-width: 1280px; margin: 0 auto; - /* Compact vertical rhythm on an 8px system. Top padding sets the - article→Prev/Next gap (~24–32px); the inter-section gap sets the - Prev/Next→Related gap (~32–48px). No large arbitrary voids. */ - /* Minimal bottom padding — the global site footer already contributes its - own 20px top inset, so the CTA banner sits close to it without a void. */ - padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px); - display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px); - } - @media (max-width: 767px) { - .dm-blog-footer-inner { - padding-left: 16px; - padding-right: 16px; - } - } - - /* Prev / Next */ - .dm-prevnext { - display: grid; grid-template-columns: 1fr 1fr; gap: 20px; - /* Halved from 40px: tight divider→cards spacing without crowding. */ - padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08); - } - @media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } } - .dm-prevnext-placeholder { display: block; } - .dm-prevnext-card { - display: flex; gap: 16px; align-items: center; padding: 16px; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; - } - .dm-prevnext-card:hover { - transform: translateY(-4px); border-color: rgba(192,18,39,0.2); - box-shadow: 0 16px 34px rgba(192,18,39,0.10); - } - .dm-prevnext-thumb { - position: relative; flex: 0 0 80px; width: 80px; height: 80px; - border-radius: 16px; overflow: hidden; background: #f1f5f9; - } - .dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; } - .dm-prevnext-next { text-align: right; } - .dm-prevnext-next .dm-prevnext-text { align-items: flex-end; } - .dm-prevnext-label { - display: inline-flex; align-items: center; gap: 6px; - font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red); - } - .dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; } - .dm-prevnext-title { - font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); } - - /* Related */ - .dm-related-heading { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important; - line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px; - } - .dm-related-grid { - display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; - } - @media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } } - @media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } } - - .dm-related-card { - display: flex; flex-direction: column; height: 100%; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none; - transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease; - } - .dm-related-card:hover { - transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13); - border-color: rgba(192,18,39,0.2); - } - .dm-related-img { - position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9; - } - .dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-img img { transform: scale(1.05); } - .dm-related-badge { - position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff; - font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px; - padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25); - } - .dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; } - .dm-related-card-title { - font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important; - letter-spacing: -.2px !important; margin: 0 0 10px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-related-card:hover .dm-related-card-title { color: var(--dm-red); } - .dm-related-card-excerpt { - font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - } - .dm-related-readmore { - margin-top: auto; display: inline-flex; align-items: center; gap: 7px; - font-size: 12.5px; font-weight: 800; color: var(--dm-red); - text-transform: uppercase; letter-spacing: .6px; - } - .dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); } - - /* Contact CTA banner */ - .dm-blog-contact-cta { - display: flex; align-items: center; justify-content: space-between; gap: 32px; - flex-wrap: wrap; - background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%); - border-radius: 30px; padding: clamp(32px, 4vw, 56px); - position: relative; overflow: hidden; - } - .dm-blog-contact-cta::after { - content: ""; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px; - background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%); - pointer-events: none; - } - .dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; } - .dm-blog-contact-eyebrow { - display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase; - letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px; - } - .dm-blog-contact-title { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important; - letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance; - } - .dm-blog-contact-sub { - font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450; - } - .dm-blog-contact-btn { - position: relative; z-index: 1; flex-shrink: 0; - display: inline-flex; align-items: center; justify-content: center; gap: 10px; - background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700; - padding: 16px 32px; border-radius: 16px; text-decoration: none; - box-shadow: 0 10px 26px rgba(192,18,39,0.34); - transition: background .2s ease, transform .2s ease; - } - .dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } - @media (max-width: 720px) { - .dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; } - .dm-blog-contact-btn { width: 100%; } - } -5:["$","section",null,{"className":"dm-blog-footer","aria-label":"More articles","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$12"}}],"$L13"]}] -6:["$","script","script-0",{"src":"/_next/static/chunks/0yvxf3ok9gcp_.js","async":true}] -7:["$","$L14",null,{"children":["$","$15",null,{"name":"Next.MetadataOutlet","children":"$@16"}]}] -a:["$","$L17",null,{"src":"/images/last-mile-approach.webp","alt":"How Doormile Maintains 99.9% SLA Compliance at Scale","fill":true,"sizes":"(max-width: 768px) 100vw, 760px","style":{"objectFit":"cover"}}] -b:["$","figcaption",null,{"children":"Operations: route planning decisions made before dispatch."}] -c:["$","$L9","7",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","blockquote",null,{"className":"dm-article-quote","children":[["$","p",null,{"children":"A route should be checked before the rider leaves, not explained after the customer calls."}],["$","cite",null,{"children":"Doormile Operations"}]]}]}] -d:["$","$L9","8",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Putting it into practice"}]}] -e:["$","$L9","9",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The best improvements usually start with simple measurements. Track distance per route, failed delivery windows, rider idle time, and orders moved between vehicles after dispatch. Those numbers show where the operation is leaking time."}]}] -f:["$","$L9","10",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ol",null,{"className":"dm-article-ol","children":[["$","li","0",{"children":"Benchmark today's distance, fleet size, and on-time rate."}],["$","li","1",{"children":"Include vehicle capacity, delivery windows, rider shifts, and battery charge."}],["$","li","2",{"children":"Check routes against traffic and customer commitments before dispatch."}],["$","li","3",{"children":"Compare the next dispatch cycle against the old plan."}]]}]}] -10:["$","$L9","11",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Better routing is not about pushing riders harder. It is about giving them a plan that already accounts for the real day ahead."}]}] -11:["$","div",null,{"className":"dm-blog-aside-wrap","children":["$","aside",null,{"className":"dm-blog-sidebar","aria-label":"Blog sidebar","children":[["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Search"}],["$","$L18",null,{}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Recent Posts"}],["$","ul",null,{"className":"dm-blog-recent","children":[["$","li","how-ai-is-transforming-last-mile-ev-delivery",{"children":["$","$L8",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","time",null,{"dateTime":"2025-10-02","className":"dm-blog-recent-date","children":"Oct 2, 2025"}]]}]]}]}],["$","li","42-less-distance-insights-from-our-hyderabad-hub",{"children":["$","$L8",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","time",null,{"dateTime":"2025-09-18","className":"dm-blog-recent-date","children":"Sep 18, 2025"}]]}]]}]}],["$","li","miletruth-ai-10-stages-to-smarter-dispatch",{"children":["$","$L8",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","time",null,{"dateTime":"2025-09-05","className":"dm-blog-recent-date","children":"Sep 5, 2025"}]]}]]}]}],["$","li","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"children":["$","$L8",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L17",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","time",null,{"dateTime":"2025-08-21","className":"dm-blog-recent-date","children":"Aug 21, 2025"}]]}]]}]}]]}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Categories"}],["$","ul",null,{"className":"dm-blog-categories","children":[["$","li","Case Study",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Case Study"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","EV Fleet",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"EV Fleet"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}],["$","li","Fleet Management",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Fleet Management"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","MileTruth",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"MileTruth"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],"$L19","$L1a","$L1b"]}]]}],"$L1c"]}]}] -13:["$","div",null,{"className":"dm-blog-footer-inner","children":[["$","nav",null,{"className":"dm-prevnext","aria-label":"Article navigation","children":[["$","$L8",null,{"href":"/blog/building-a-greener-city-the-future-of-urban-logistics","className":"dm-prevnext-card dm-prevnext-prev","children":[["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-6.webp","alt":"Building a Greener City: The Future of Urban Logistics","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"19","y1":"12","x2":"5","y2":"12"}],["$","polyline",null,{"points":"12 19 5 12 12 5"}]]}],"Previous"]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Sustainability"}],["$","span",null,{"className":"dm-prevnext-title","children":"Building a Greener City: The Future of Urban Logistics"}]]}]]}],["$","$L8",null,{"href":"/blog/battery-simulation-the-secret-to-ev-route-pre-validation","className":"dm-prevnext-card dm-prevnext-next","children":[["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":["Next",["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","span",null,{"className":"dm-prevnext-cat","children":"EV Fleet"}],["$","span",null,{"className":"dm-prevnext-title","children":"Battery Simulation: The Secret to EV Route Pre-Validation"}]]}],["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-3.webp","alt":"Battery Simulation: The Secret to EV Route Pre-Validation","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}]]}]]}],["$","div",null,{"className":"dm-related","children":[["$","h2",null,{"className":"dm-related-heading","children":"Related Articles"}],["$","div",null,{"className":"dm-related-grid","children":[["$","$L9","how-ai-is-transforming-last-mile-ev-delivery",{"delay":0,"duration":0.7,"yOffset":30,"children":["$","$L8",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L17",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Technology"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L9","42-less-distance-insights-from-our-hyderabad-hub",{"delay":0.08,"duration":0.7,"yOffset":30,"children":["$","$L8",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L17",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Case Study"}]]}],["$","div",null,{"className":"dm-related-body","children":["$L1d","$L1e","$L1f"]}]]}]}],"$L20"]}]]}],"$L21"]}] -16:null -19:["$","li","Operations",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Operations"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -1a:["$","li","Sustainability",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Sustainability"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -1b:["$","li","Technology",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Technology"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}] -1c:["$","section",null,{"className":"dm-blog-widget dm-blog-cta-card","children":[["$","h2",null,{"className":"dm-blog-cta-title","children":"Planning delivery routes?"}],["$","p",null,{"className":"dm-blog-cta-text","children":"Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time."}],["$","$L8",null,{"href":"/contact","className":"dm-blog-cta-btn","children":["Contact Us",["$","svg",null,{"width":"18","height":"18","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -1d:["$","h3",null,{"className":"dm-related-card-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}] -1e:["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}] -1f:["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}] -20:["$","$L9","miletruth-ai-10-stages-to-smarter-dispatch",{"delay":0.16,"duration":0.7,"yOffset":30,"children":["$","$L8",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L17",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"MileTruth"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}] -21:["$","div",null,{"className":"dm-blog-contact-cta","children":[["$","div",null,{"className":"dm-blog-contact-cta-content","children":[["$","span",null,{"className":"dm-blog-contact-eyebrow","children":"Let's talk logistics"}],["$","h2",null,{"className":"dm-blog-contact-title","children":"Ready to move smarter with Doormile?"}],["$","p",null,{"className":"dm-blog-contact-sub","children":"Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding."}]]}],["$","$L8",null,{"href":"/contact","className":"dm-blog-contact-btn","children":["Get in Touch",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] diff --git a/build/blog/how-doormile-maintains-99-9-sla-compliance-at-scale/__next.blog.$d$slug.txt b/build/blog/how-doormile-maintains-99-9-sla-compliance-at-scale/__next.blog.$d$slug.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/blog/how-doormile-maintains-99-9-sla-compliance-at-scale/__next.blog.$d$slug.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/how-doormile-maintains-99-9-sla-compliance-at-scale/__next.blog.txt b/build/blog/how-doormile-maintains-99-9-sla-compliance-at-scale/__next.blog.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/blog/how-doormile-maintains-99-9-sla-compliance-at-scale/__next.blog.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/miletruth-ai-10-stages-to-smarter-dispatch.html b/build/blog/miletruth-ai-10-stages-to-smarter-dispatch.html deleted file mode 100644 index 8b89543..0000000 --- a/build/blog/miletruth-ai-10-stages-to-smarter-dispatch.html +++ /dev/null @@ -1,1168 +0,0 @@ -MileTruth™: 10 Stages to Smarter Dispatch – Doormile

    Doormile

    Doormile logo
    Address
    Hyderabad

    5th Floor, Vision Ultima,
    Street No.3, Jayabheri Enclave,
    Gachibowli, Hyderabad,
    Telangana 500032.

    Coimbatore

    Mayflower Valencia,
    Near Nava India Bus Stop,
    Avinashi Road,
    Udayampalayam,
    Tamil Nadu 641037.

    Bengaluru

    C612, 6th Floor,
    Trifecta Starlight,
    ITPL Road,
    Garudacharapalya,
    Mahadevapura,
    Bangalore 560048,
    Karnataka, India.

    Contact Us

    Tel : +91 86886 97941

    Email

    care@doormile.com

    MileTruth

    MileTruth™: 10 Stages to Smarter Dispatch

    Doormile Team2 min read

    Behind every Doormile dispatch is a step-by-step route planning process. Each stage removes a common source of error before the plan reaches the rider.

    A dispatch plan has to be fast, but it also has to be usable. A quick route that ignores a bad address, low battery, or tight delivery window creates problems later in the day.

    The ten stages

    1. Order intake: new orders, rider availability, and vehicle status are collected.
    2. Address check: delivery points, time windows, and service notes are verified.
    3. Stop planning: each stop gets an expected service time and delivery priority.
    4. Travel-time check: routes are compared against time-of-day traffic.
    5. Constraint check: capacity, shift time, customer windows, and range are applied.
    6. Route options: several possible plans are built for the same order set.
    7. Plan selection: the lowest-cost workable route plan is selected.
    8. Battery check: EV routes are checked against real charge capacity.
    9. ETA check: promised delivery times are verified before dispatch.
    10. Dispatch output: the final route is sent to the operations team.

    Why staging matters

    When everything is checked in one step, small errors slip through. A wrong pin, a missing apartment note, or a low battery warning can reach the rider and become a customer issue.

    MileTruth routing pipeline diagram
    A staged dispatch process catches address, range, and ETA issues before riders leave.

    Each stage should remove one kind of mistake. By dispatch time, the route should already be practical.

    MileTruth Engineering

    Comparing route options

    The useful part is not only building one route. It is comparing a few workable route options before choosing the plan. One option may save distance, another may protect a tight delivery window, and another may keep an EV closer to a charger.

    • Several route plans checked before dispatch
    • Distance, time windows, capacity, and range considered together
    • Range and ETA checked before the route reaches the rider
    • Fast output that still leaves room for dispatcher review

    The goal is simple: give the dispatch team a route plan they can trust before the first vehicle leaves the hub.

    \ No newline at end of file diff --git a/build/blog/miletruth-ai-10-stages-to-smarter-dispatch.txt b/build/blog/miletruth-ai-10-stages-to-smarter-dispatch.txt deleted file mode 100644 index baf8ed9..0000000 --- a/build/blog/miletruth-ai-10-stages-to-smarter-dispatch.txt +++ /dev/null @@ -1,546 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -d:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -e:"$Sreact.suspense" -11:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -13:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -15:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","blog","miletruth-ai-10-stages-to-smarter-dispatch"],"q":"","i":false,"f":[[["",{"children":["blog",{"children":[["slug","miletruth-ai-10-stages-to-smarter-dispatch","d",null],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":["$Lc",[["$","script","script-0",{"src":"/_next/static/chunks/0yvxf3ok9gcp_.js","async":true,"nonce":"$undefined"}]],["$","$Ld",null,{"children":["$","$e",null,{"name":"Next.MetadataOutlet","children":"$@f"}]}]]}],{},null,false,null]},null,false,"$@10"]},null,false,"$@10"]},null,false,null],["$","$1","h",{"children":[null,["$","$L11",null,{"children":"$L12"}],["$","div",null,{"hidden":true,"children":["$","$L13",null,{"children":["$","$e",null,{"name":"Next.Metadata","children":"$L14"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$15",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -16:[] -10:"$W16" -:HL["/images/blog-post-pic-31.webp","image"] -17:T3d6f, - .dm-single-blog { - --dm-red: #c01227; - --dm-red-hover: #e31d32; - --dm-radius-card: 22px; - --dm-radius-img: 20px; - --dm-radius-badge: 8px; - --dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05); - --dm-border: 1px solid rgba(15, 23, 42, 0.09); - --dm-space-p: 24px; - --dm-space-h: 32px; - --dm-space-img: 32px; - --dm-space-quote: 40px; - --dm-sticky-top: 138px; - --dm-measure: min(1100px, 100%); - font-family: var(--font-manrope), sans-serif; - } - - /* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6 - (120/80/60px UPPERCASE) rules with !important on our own classes. */ - .dm-single-blog :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline, - specificity 0-1-1) so blog links keep our colors and never get underlined. */ - .dm-single-blog a { text-decoration: none !important; } - - /* Page banner: tall homepage-scale frame with only badge + title inside */ - /* Compound selector (specificity 20) + !important beats the global 800px - single-class height rules so the blog banner can use viewport heights. */ - .custom-standard-hero-card.dm-banner-card { - height: 90vh !important; - min-height: 85vh !important; - } - @media (max-width: 1024px) { - .custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; } - } - @media (max-width: 600px) { - .custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; } - } - - .dm-banner-inner { - position: relative; width: 100%; height: 100%; - display: flex; flex-direction: column; align-items: center; justify-content: center; - text-align: center; gap: clamp(22px, 2.6vw, 34px); - padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px); - } - - .dm-banner-category { - display: inline-block; background: var(--dm-red); color: #fff; - font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px; - padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45); - } - .dm-banner-title { - font-family: var(--font-manrope), sans-serif !important; - font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important; - line-height: 1.16 !important; letter-spacing: -1.2px !important; - color: #ffffff !important; margin: 0; max-width: 820px; - text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38); - } - @media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } } - @media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } } - - /* Content wrap begins immediately below the banner */ - /* Shared content container: the SAME max-width + horizontal padding is used - by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings, - images, Prev/Next, Related Articles and the CTA banner all align to one - grid with identical left/right edges. Keep both in sync. */ - .dm-blog-wrap { - max-width: 1280px; margin: 0 auto; - /* 20px mobile padding floor → 40px on desktop; matches the footer container. */ - padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0; - } - @media (max-width: 767px) { - .dm-blog-wrap { - padding-left: 16px; - padding-right: 16px; - } - } - - /* ── Article meta bar (directly under the hero) ── */ - .dm-meta-bar { - display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px; - padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px); - border-bottom: 1px solid rgba(15,23,42,0.10); - } - .dm-meta-breadcrumb ol { - list-style: none; display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b; - } - .dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; } - .dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; } - .dm-meta-sep { color: #cbd5e1; } - .dm-meta-current { - color: #0f172a; font-weight: 700; - max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - } - @media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } } - .dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; } - .dm-meta-item { - display: inline-flex; align-items: center; gap: 7px; - font-size: 13.5px; font-weight: 600; color: #475569; - } - .dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; } - .dm-meta-author { color: #0f172a; font-weight: 700; } - @media (max-width: 600px) { .dm-meta-bar { gap: 12px; } } - .dm-blog-layout { - display: grid; grid-template-columns: minmax(0,1fr) 320px; - /* Tighter gap gives the reading column more room next to the 320px sidebar. */ - gap: clamp(28px, 3vw, 56px); align-items: start; - } - @media (max-width: 1024px) { - .dm-blog-layout { grid-template-columns: 1fr; gap: 48px; } - /* Single-column (tablet/mobile): cap the reading column and centre it so the - article never sits left-aligned with a large empty right gutter. */ - .dm-blog-main { max-width: 900px; margin-inline: auto; } - } - .dm-blog-main { min-width: 0; } - - /* ── Intro lead ── */ - .dm-blog-intro { - max-width: var(--dm-measure); - font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500; - color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px; - border-left: 3px solid var(--dm-red); - } - - /* ── Article body ── */ - .dm-article-body { max-width: var(--dm-measure); } - .dm-article-p { - font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450; - margin: 0 0 var(--dm-space-p); - } - .dm-article-h2 { - font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important; - color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h); - text-wrap: balance; - } - /* Each article block is wrapped in its OWN ScrollReveal
    , so a bare - :first-child rule matched every heading (each is the only child of its - wrapper) and zeroed its top margin, collapsing the gap above every - section heading. Scope the reset to only the article body's first block. */ - .dm-article-body > :first-child :where(.dm-article-h2, .dm-article-h3), - .dm-article-body > .dm-article-h2:first-child, - .dm-article-body > .dm-article-h3:first-child { margin-top: 0; } - .dm-article-h3 { - font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important; - color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px; - text-wrap: balance; - } - @media (max-width: 600px) { - .dm-article-p { font-size: 16px !important; } - .dm-article-ul li, .dm-article-ol li { font-size: 15.5px; } - .dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; } - .dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; } - } - - .dm-article-ul, .dm-article-ol { - /* Top margin (was 0) separates the list from the paragraph above it; - matching bottom margin keeps it clear of the next heading/paragraph. - Slightly larger than --dm-space-p so the list reads as its own block. */ - margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px); - padding-left: 2px; list-style: none; - display: flex; flex-direction: column; gap: 15px; - } - /* Prefixed with .dm-article-body so these beat the theme's global - ".logico-front-end ul li:before" fontello-glyph bullet (specificity 0,1,3), - which otherwise replaces our clean red dot with a misaligned checkmark glyph - and adds its own 1.7em indent. */ - .dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li { - position: relative; padding-left: 34px; - font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450; - } - .dm-article-body .dm-article-ul li::before { - content: ""; position: absolute; left: 7px; top: 10px; - width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red); - /* kill any inherited fontello glyph from the global rule */ - font-size: 0; line-height: 0; - } - .dm-article-ol { counter-reset: dm-li; } - .dm-article-body .dm-article-ol li { counter-increment: dm-li; } - .dm-article-body .dm-article-ol li::before { - content: counter(dm-li); position: absolute; left: 0; top: 0; - width: 24px; height: 24px; border-radius: 7px; - background: rgba(192,18,39,0.10); color: var(--dm-red); - font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; - } - - /* ── Quote ── */ - .dm-article-quote { - position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px; - background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%); - border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0; - box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06); - } - .dm-article-quote::before { - content: "\201C"; position: absolute; left: 22px; top: 8px; - font-family: Georgia, "Times New Roman", serif; - font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700; - } - .dm-article-quote p { - font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600; - font-style: italic; color: #1e293b; margin: 0; - } - .dm-article-quote cite { - display: block; margin-top: 16px; font-size: 13px; font-weight: 700; - font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px; - } - @media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } } - - /* ── Images ── */ - .dm-article-figure { margin: var(--dm-space-img) 0; } - .dm-article-figure-img { - position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; - border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10); - } - .dm-article-figure figcaption { - margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500; - text-align: center; font-style: italic; - } - - /* ── Sidebar ── */ - .dm-blog-aside-wrap { position: relative; } - .dm-blog-sidebar { - display: flex; flex-direction: column; gap: 18px; - position: sticky; top: var(--dm-sticky-top); - } - @media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } } - - .dm-blog-widget { - background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card); - padding: 20px; box-shadow: var(--dm-shadow-card); - } - .dm-blog-widget-title { - font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important; - letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important; - margin: 0 0 15px; padding: 0 0 12px; - border-bottom: 1px solid rgba(15,23,42,0.08); - overflow: visible; white-space: normal; word-break: normal; - } - - /* Search */ - .dm-sr-only { - position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; - overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; - } - .dm-blog-search { position: relative; } - .dm-blog-search-form { position: relative; } - .dm-blog-search-input { - width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px; - padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a; - background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; - } - .dm-blog-search-input::placeholder { color: #9c9c9c; } - .dm-blog-search-input:focus { - outline: none; border-color: var(--dm-red); background: #fff; - box-shadow: 0 0 0 3px rgba(192,18,39,0.11); - } - .dm-blog-search-icon { - position: absolute; right: 14px; top: 50%; transform: translateY(-50%); - color: #94a3b8; pointer-events: none; display: flex; - } - .dm-blog-search-results { - position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0; - background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px; - box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden; - } - .dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; } - .dm-blog-search-result { - display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; - border-radius: 10px; text-decoration: none; transition: background .15s ease; - } - .dm-blog-search-result:hover { background: #f8fafc; } - .dm-blog-search-result-cat { - font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red); - } - .dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; } - .dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; } - - /* Recent posts */ - .dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; } - .dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; } - .dm-blog-recent-thumb { - position: relative; flex: 0 0 62px; width: 62px; height: 62px; - border-radius: 13px; overflow: hidden; background: #f1f5f9; - } - .dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; } - .dm-blog-recent-title { - font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); } - .dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; } - - /* Categories */ - .dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; } - .dm-blog-category-item { - display: flex; align-items: center; justify-content: space-between; gap: 10px; - padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important; - border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease; - } - .dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; } - .dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; } - .dm-blog-category-item > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .dm-blog-category-count { - flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9; - min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex; - align-items: center; justify-content: center; padding: 0 7px; - } - - /* CTA card */ - .dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; } - .dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; } - .dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; } - .dm-blog-cta-btn { - display: inline-flex; align-items: center; gap: 8px; - background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700; - padding: 12px 22px; border-radius: 12px; text-decoration: none; - transition: background .2s ease, transform .2s ease; - } - .dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } -c:["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"headline\":\"MileTruth™: 10 Stages to Smarter Dispatch\",\"description\":\"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub.\",\"image\":[\"https://www.doormile.com/images/blog-post-pic-31.webp\"],\"datePublished\":\"2025-09-05T00:00:00.000Z\",\"dateModified\":\"2025-09-05T00:00:00.000Z\",\"author\":{\"@type\":\"Organization\",\"name\":\"Doormile Team\",\"url\":\"https://www.doormile.com\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Doormile\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.doormile.com/images/cropped-image-2.png\"}},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.doormile.com/blog/miletruth-ai-10-stages-to-smarter-dispatch\"},\"articleSection\":\"MileTruth\"}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://www.doormile.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https://www.doormile.com/blog\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"MileTruth™: 10 Stages to Smarter Dispatch\",\"item\":\"https://www.doormile.com/blog/miletruth-ai-10-stages-to-smarter-dispatch\"}]}"}}],["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":[["$","article",null,{"className":"dm-single-blog","children":[["$","link",null,{"rel":"preload","as":"image","href":"/images/blog-post-pic-31.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$17"}}],"$L18","$L19"]}],"$L1a"]}]}]]}] -1b:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],""] -1c:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"ScrollReveal"] -18:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card dm-banner-card","style":{"backgroundImage":"url(/images/blog-post-pic-31.webp)","--hero-overlay":"linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)"},"children":["$","div",null,{"className":"e-con-inner dm-banner-inner","children":[["$","span",null,{"className":"dm-banner-category","children":"MileTruth"}],["$","h1",null,{"className":"dm-banner-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}]]}]}]}] -19:["$","div",null,{"className":"dm-blog-wrap","children":[["$","div",null,{"className":"dm-meta-bar","children":[["$","nav",null,{"className":"dm-meta-breadcrumb","aria-label":"Breadcrumb","children":["$","ol",null,{"children":[["$","li",null,{"children":["$","$L1b",null,{"href":"/","children":"Home"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"children":["$","$L1b",null,{"href":"/blog","children":"Blog"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"aria-current":"page","className":"dm-meta-current","children":"MileTruth™: 10 Stages to Smarter Dispatch"}]]}]}],["$","div",null,{"className":"dm-meta-items","children":[["$","span",null,{"className":"dm-meta-item dm-meta-author","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","path",null,{"d":"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}],["$","circle",null,{"cx":"12","cy":"7","r":"4"}]]}],"Doormile Team"]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"2"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}]]}],["$","time",null,{"dateTime":"2025-09-05","children":"Sep 5, 2025"}]]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","circle",null,{"cx":"12","cy":"12","r":"9"}],["$","polyline",null,{"points":"12 7 12 12 15 14"}]]}],2," min read"]}]]}]]}],["$","div",null,{"className":"dm-blog-layout","children":[["$","div",null,{"className":"dm-blog-main","children":[["$","p",null,{"className":"dm-blog-intro","children":"Behind every Doormile dispatch is a step-by-step route planning process. Each stage removes a common source of error before the plan reaches the rider."}],["$","div",null,{"className":"dm-article-body","children":[["$","$L1c","0",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"A dispatch plan has to be fast, but it also has to be usable. A quick route that ignores a bad address, low battery, or tight delivery window creates problems later in the day."}]}],["$","$L1c","1",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"The ten stages"}]}],["$","$L1c","2",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ol",null,{"className":"dm-article-ol","children":[["$","li","0",{"children":"Order intake: new orders, rider availability, and vehicle status are collected."}],["$","li","1",{"children":"Address check: delivery points, time windows, and service notes are verified."}],["$","li","2",{"children":"Stop planning: each stop gets an expected service time and delivery priority."}],["$","li","3",{"children":"Travel-time check: routes are compared against time-of-day traffic."}],["$","li","4",{"children":"Constraint check: capacity, shift time, customer windows, and range are applied."}],["$","li","5",{"children":"Route options: several possible plans are built for the same order set."}],["$","li","6",{"children":"Plan selection: the lowest-cost workable route plan is selected."}],["$","li","7",{"children":"Battery check: EV routes are checked against real charge capacity."}],["$","li","8",{"children":"ETA check: promised delivery times are verified before dispatch."}],["$","li","9",{"children":"Dispatch output: the final route is sent to the operations team."}]]}]}],["$","$L1c","3",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"Why staging matters"}]}],["$","$L1c","4",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"When everything is checked in one step, small errors slip through. A wrong pin, a missing apartment note, or a low battery warning can reach the rider and become a customer issue."}]}],"$L1d","$L1e","$L1f","$L20","$L21","$L22"]}]]}],"$L23"]}]]}] -24:T2021, - .dm-blog-footer { - font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32; - /* The global theme applies 72px top/bottom section padding — strip it so the - inner container is the single source of vertical rhythm (no double gap). */ - padding: 0 !important; - } - /* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */ - .dm-blog-footer :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline) */ - .dm-blog-footer a { text-decoration: none !important; } - /* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px - max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA - align to the exact same left/right edges as the article body above. - Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a - consistent ~64–72px section→section gap (no 120px+ voids). */ - .dm-blog-footer-inner { - max-width: 1280px; margin: 0 auto; - /* Compact vertical rhythm on an 8px system. Top padding sets the - article→Prev/Next gap (~24–32px); the inter-section gap sets the - Prev/Next→Related gap (~32–48px). No large arbitrary voids. */ - /* Minimal bottom padding — the global site footer already contributes its - own 20px top inset, so the CTA banner sits close to it without a void. */ - padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px); - display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px); - } - @media (max-width: 767px) { - .dm-blog-footer-inner { - padding-left: 16px; - padding-right: 16px; - } - } - - /* Prev / Next */ - .dm-prevnext { - display: grid; grid-template-columns: 1fr 1fr; gap: 20px; - /* Halved from 40px: tight divider→cards spacing without crowding. */ - padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08); - } - @media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } } - .dm-prevnext-placeholder { display: block; } - .dm-prevnext-card { - display: flex; gap: 16px; align-items: center; padding: 16px; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; - } - .dm-prevnext-card:hover { - transform: translateY(-4px); border-color: rgba(192,18,39,0.2); - box-shadow: 0 16px 34px rgba(192,18,39,0.10); - } - .dm-prevnext-thumb { - position: relative; flex: 0 0 80px; width: 80px; height: 80px; - border-radius: 16px; overflow: hidden; background: #f1f5f9; - } - .dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; } - .dm-prevnext-next { text-align: right; } - .dm-prevnext-next .dm-prevnext-text { align-items: flex-end; } - .dm-prevnext-label { - display: inline-flex; align-items: center; gap: 6px; - font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red); - } - .dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; } - .dm-prevnext-title { - font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); } - - /* Related */ - .dm-related-heading { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important; - line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px; - } - .dm-related-grid { - display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; - } - @media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } } - @media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } } - - .dm-related-card { - display: flex; flex-direction: column; height: 100%; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none; - transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease; - } - .dm-related-card:hover { - transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13); - border-color: rgba(192,18,39,0.2); - } - .dm-related-img { - position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9; - } - .dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-img img { transform: scale(1.05); } - .dm-related-badge { - position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff; - font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px; - padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25); - } - .dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; } - .dm-related-card-title { - font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important; - letter-spacing: -.2px !important; margin: 0 0 10px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-related-card:hover .dm-related-card-title { color: var(--dm-red); } - .dm-related-card-excerpt { - font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - } - .dm-related-readmore { - margin-top: auto; display: inline-flex; align-items: center; gap: 7px; - font-size: 12.5px; font-weight: 800; color: var(--dm-red); - text-transform: uppercase; letter-spacing: .6px; - } - .dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); } - - /* Contact CTA banner */ - .dm-blog-contact-cta { - display: flex; align-items: center; justify-content: space-between; gap: 32px; - flex-wrap: wrap; - background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%); - border-radius: 30px; padding: clamp(32px, 4vw, 56px); - position: relative; overflow: hidden; - } - .dm-blog-contact-cta::after { - content: ""; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px; - background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%); - pointer-events: none; - } - .dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; } - .dm-blog-contact-eyebrow { - display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase; - letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px; - } - .dm-blog-contact-title { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important; - letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance; - } - .dm-blog-contact-sub { - font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450; - } - .dm-blog-contact-btn { - position: relative; z-index: 1; flex-shrink: 0; - display: inline-flex; align-items: center; justify-content: center; gap: 10px; - background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700; - padding: 16px 32px; border-radius: 16px; text-decoration: none; - box-shadow: 0 10px 26px rgba(192,18,39,0.34); - transition: background .2s ease, transform .2s ease; - } - .dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } - @media (max-width: 720px) { - .dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; } - .dm-blog-contact-btn { width: 100%; } - } -1a:["$","section",null,{"className":"dm-blog-footer","aria-label":"More articles","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$24"}}],"$L25"]}] -26:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"Image"] -27:I[23096,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"default"] -1d:["$","$L1c","5",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","figure",null,{"className":"dm-article-figure","children":[["$","span",null,{"className":"dm-article-figure-img","children":["$","$L26",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth routing pipeline diagram","fill":true,"sizes":"(max-width: 768px) 100vw, 760px","style":{"objectFit":"cover"}}]}],["$","figcaption",null,{"children":"A staged dispatch process catches address, range, and ETA issues before riders leave."}]]}]}] -1e:["$","$L1c","6",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","blockquote",null,{"className":"dm-article-quote","children":[["$","p",null,{"children":"Each stage should remove one kind of mistake. By dispatch time, the route should already be practical."}],["$","cite",null,{"children":"MileTruth Engineering"}]]}]}] -1f:["$","$L1c","7",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Comparing route options"}]}] -20:["$","$L1c","8",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The useful part is not only building one route. It is comparing a few workable route options before choosing the plan. One option may save distance, another may protect a tight delivery window, and another may keep an EV closer to a charger."}]}] -21:["$","$L1c","9",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"Several route plans checked before dispatch"}],["$","li","1",{"children":"Distance, time windows, capacity, and range considered together"}],["$","li","2",{"children":"Range and ETA checked before the route reaches the rider"}],["$","li","3",{"children":"Fast output that still leaves room for dispatcher review"}]]}]}] -22:["$","$L1c","10",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The goal is simple: give the dispatch team a route plan they can trust before the first vehicle leaves the hub."}]}] -23:["$","div",null,{"className":"dm-blog-aside-wrap","children":["$","aside",null,{"className":"dm-blog-sidebar","aria-label":"Blog sidebar","children":[["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Search"}],["$","$L27",null,{}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Recent Posts"}],["$","ul",null,{"className":"dm-blog-recent","children":[["$","li","how-ai-is-transforming-last-mile-ev-delivery",{"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L26",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","time",null,{"dateTime":"2025-10-02","className":"dm-blog-recent-date","children":"Oct 2, 2025"}]]}]]}]}],["$","li","42-less-distance-insights-from-our-hyderabad-hub",{"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L26",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","time",null,{"dateTime":"2025-09-18","className":"dm-blog-recent-date","children":"Sep 18, 2025"}]]}]]}]}],["$","li","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"children":["$","$L1b",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L26",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","time",null,{"dateTime":"2025-08-21","className":"dm-blog-recent-date","children":"Aug 21, 2025"}]]}]]}]}],["$","li","why-mathematical-precision-beats-heuristics-in-routing",{"children":["$","$L1b",null,{"href":"/blog/why-mathematical-precision-beats-heuristics-in-routing","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L26",null,{"src":"/images/blog-post-pic-14.webp","alt":"Why Mathematical Precision Beats Heuristics in Routing","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"Why Mathematical Precision Beats Heuristics in Routing"}],["$","time",null,{"dateTime":"2025-08-07","className":"dm-blog-recent-date","children":"Aug 7, 2025"}]]}]]}]}]]}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Categories"}],["$","ul",null,{"className":"dm-blog-categories","children":[["$","li","Case Study",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Case Study"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","EV Fleet",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"EV Fleet"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}],["$","li","Fleet Management",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Fleet Management"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","MileTruth",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":["$L28","$L29"]}]}],"$L2a","$L2b","$L2c"]}]]}],"$L2d"]}]}] -25:["$","div",null,{"className":"dm-blog-footer-inner","children":[["$","nav",null,{"className":"dm-prevnext","aria-label":"Article navigation","children":[["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-prevnext-card dm-prevnext-prev","children":[["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L26",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"19","y1":"12","x2":"5","y2":"12"}],["$","polyline",null,{"points":"12 19 5 12 12 5"}]]}],"Previous"]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Case Study"}],["$","span",null,{"className":"dm-prevnext-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}]]}]]}],["$","$L1b",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-prevnext-card dm-prevnext-next","children":[["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":["Next",["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","span",null,{"className":"dm-prevnext-cat","children":"EV Fleet"}],["$","span",null,{"className":"dm-prevnext-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}]]}],["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L26",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}]]}]]}],["$","div",null,{"className":"dm-related","children":[["$","h2",null,{"className":"dm-related-heading","children":"Related Articles"}],["$","div",null,{"className":"dm-related-grid","children":[["$","$L1c","how-ai-is-transforming-last-mile-ev-delivery",{"delay":0,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L26",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Technology"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L1c","42-less-distance-insights-from-our-hyderabad-hub",{"delay":0.08,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L26",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Case Study"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],"$L2e","$L2f"]}]]}]}],"$L30"]}]]}],"$L31"]}] -28:["$","span",null,{"children":"MileTruth"}] -29:["$","span",null,{"className":"dm-blog-category-count","children":1}] -2a:["$","li","Operations",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Operations"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2b:["$","li","Sustainability",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Sustainability"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2c:["$","li","Technology",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Technology"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}] -2d:["$","section",null,{"className":"dm-blog-widget dm-blog-cta-card","children":[["$","h2",null,{"className":"dm-blog-cta-title","children":"Planning delivery routes?"}],["$","p",null,{"className":"dm-blog-cta-text","children":"Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time."}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-cta-btn","children":["Contact Us",["$","svg",null,{"width":"18","height":"18","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -2e:["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}] -2f:["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}] -30:["$","$L1c","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"delay":0.16,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L26",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"EV Fleet"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"Electric vehicles lower running costs, but battery range changes how routes must be planned before dispatch."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}] -31:["$","div",null,{"className":"dm-blog-contact-cta","children":[["$","div",null,{"className":"dm-blog-contact-cta-content","children":[["$","span",null,{"className":"dm-blog-contact-eyebrow","children":"Let's talk logistics"}],["$","h2",null,{"className":"dm-blog-contact-title","children":"Ready to move smarter with Doormile?"}],["$","p",null,{"className":"dm-blog-contact-sub","children":"Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding."}]]}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-contact-btn","children":["Get in Touch",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -12:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -32:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -f:null -14:[["$","title","0",{"children":"MileTruth™: 10 Stages to Smarter Dispatch – Doormile"}],["$","meta","1",{"name":"description","content":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}],["$","meta","2",{"name":"author","content":"Doormile Team"}],["$","meta","3",{"name":"keywords","content":"MileTruth,last-mile logistics,EV fleet,MileTruth,route optimisation"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","link","5",{"rel":"canonical","href":"https://www.doormile.com/blog/miletruth-ai-10-stages-to-smarter-dispatch"}],["$","meta","6",{"property":"og:title","content":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","meta","7",{"property":"og:description","content":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}],["$","meta","8",{"property":"og:url","content":"https://www.doormile.com/blog/miletruth-ai-10-stages-to-smarter-dispatch"}],["$","meta","9",{"property":"og:site_name","content":"Doormile"}],["$","meta","10",{"property":"og:image","content":"https://www.doormile.com/images/blog-post-pic-31.webp"}],["$","meta","11",{"property":"og:image:alt","content":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","meta","12",{"property":"og:type","content":"article"}],["$","meta","13",{"property":"article:published_time","content":"2025-09-05T00:00:00.000Z"}],["$","meta","14",{"property":"article:author","content":"Doormile Team"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","meta","17",{"name":"twitter:description","content":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}],["$","meta","18",{"name":"twitter:image","content":"https://www.doormile.com/images/blog-post-pic-31.webp"}],["$","link","19",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","21",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","22",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L32","23",{}]] diff --git a/build/blog/miletruth-ai-10-stages-to-smarter-dispatch/__next._full.txt b/build/blog/miletruth-ai-10-stages-to-smarter-dispatch/__next._full.txt deleted file mode 100644 index baf8ed9..0000000 --- a/build/blog/miletruth-ai-10-stages-to-smarter-dispatch/__next._full.txt +++ /dev/null @@ -1,546 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -d:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -e:"$Sreact.suspense" -11:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -13:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -15:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","blog","miletruth-ai-10-stages-to-smarter-dispatch"],"q":"","i":false,"f":[[["",{"children":["blog",{"children":[["slug","miletruth-ai-10-stages-to-smarter-dispatch","d",null],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":["$Lc",[["$","script","script-0",{"src":"/_next/static/chunks/0yvxf3ok9gcp_.js","async":true,"nonce":"$undefined"}]],["$","$Ld",null,{"children":["$","$e",null,{"name":"Next.MetadataOutlet","children":"$@f"}]}]]}],{},null,false,null]},null,false,"$@10"]},null,false,"$@10"]},null,false,null],["$","$1","h",{"children":[null,["$","$L11",null,{"children":"$L12"}],["$","div",null,{"hidden":true,"children":["$","$L13",null,{"children":["$","$e",null,{"name":"Next.Metadata","children":"$L14"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$15",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -16:[] -10:"$W16" -:HL["/images/blog-post-pic-31.webp","image"] -17:T3d6f, - .dm-single-blog { - --dm-red: #c01227; - --dm-red-hover: #e31d32; - --dm-radius-card: 22px; - --dm-radius-img: 20px; - --dm-radius-badge: 8px; - --dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05); - --dm-border: 1px solid rgba(15, 23, 42, 0.09); - --dm-space-p: 24px; - --dm-space-h: 32px; - --dm-space-img: 32px; - --dm-space-quote: 40px; - --dm-sticky-top: 138px; - --dm-measure: min(1100px, 100%); - font-family: var(--font-manrope), sans-serif; - } - - /* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6 - (120/80/60px UPPERCASE) rules with !important on our own classes. */ - .dm-single-blog :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline, - specificity 0-1-1) so blog links keep our colors and never get underlined. */ - .dm-single-blog a { text-decoration: none !important; } - - /* Page banner: tall homepage-scale frame with only badge + title inside */ - /* Compound selector (specificity 20) + !important beats the global 800px - single-class height rules so the blog banner can use viewport heights. */ - .custom-standard-hero-card.dm-banner-card { - height: 90vh !important; - min-height: 85vh !important; - } - @media (max-width: 1024px) { - .custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; } - } - @media (max-width: 600px) { - .custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; } - } - - .dm-banner-inner { - position: relative; width: 100%; height: 100%; - display: flex; flex-direction: column; align-items: center; justify-content: center; - text-align: center; gap: clamp(22px, 2.6vw, 34px); - padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px); - } - - .dm-banner-category { - display: inline-block; background: var(--dm-red); color: #fff; - font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px; - padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45); - } - .dm-banner-title { - font-family: var(--font-manrope), sans-serif !important; - font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important; - line-height: 1.16 !important; letter-spacing: -1.2px !important; - color: #ffffff !important; margin: 0; max-width: 820px; - text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38); - } - @media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } } - @media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } } - - /* Content wrap begins immediately below the banner */ - /* Shared content container: the SAME max-width + horizontal padding is used - by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings, - images, Prev/Next, Related Articles and the CTA banner all align to one - grid with identical left/right edges. Keep both in sync. */ - .dm-blog-wrap { - max-width: 1280px; margin: 0 auto; - /* 20px mobile padding floor → 40px on desktop; matches the footer container. */ - padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0; - } - @media (max-width: 767px) { - .dm-blog-wrap { - padding-left: 16px; - padding-right: 16px; - } - } - - /* ── Article meta bar (directly under the hero) ── */ - .dm-meta-bar { - display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px; - padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px); - border-bottom: 1px solid rgba(15,23,42,0.10); - } - .dm-meta-breadcrumb ol { - list-style: none; display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b; - } - .dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; } - .dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; } - .dm-meta-sep { color: #cbd5e1; } - .dm-meta-current { - color: #0f172a; font-weight: 700; - max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - } - @media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } } - .dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; } - .dm-meta-item { - display: inline-flex; align-items: center; gap: 7px; - font-size: 13.5px; font-weight: 600; color: #475569; - } - .dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; } - .dm-meta-author { color: #0f172a; font-weight: 700; } - @media (max-width: 600px) { .dm-meta-bar { gap: 12px; } } - .dm-blog-layout { - display: grid; grid-template-columns: minmax(0,1fr) 320px; - /* Tighter gap gives the reading column more room next to the 320px sidebar. */ - gap: clamp(28px, 3vw, 56px); align-items: start; - } - @media (max-width: 1024px) { - .dm-blog-layout { grid-template-columns: 1fr; gap: 48px; } - /* Single-column (tablet/mobile): cap the reading column and centre it so the - article never sits left-aligned with a large empty right gutter. */ - .dm-blog-main { max-width: 900px; margin-inline: auto; } - } - .dm-blog-main { min-width: 0; } - - /* ── Intro lead ── */ - .dm-blog-intro { - max-width: var(--dm-measure); - font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500; - color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px; - border-left: 3px solid var(--dm-red); - } - - /* ── Article body ── */ - .dm-article-body { max-width: var(--dm-measure); } - .dm-article-p { - font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450; - margin: 0 0 var(--dm-space-p); - } - .dm-article-h2 { - font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important; - color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h); - text-wrap: balance; - } - /* Each article block is wrapped in its OWN ScrollReveal
    , so a bare - :first-child rule matched every heading (each is the only child of its - wrapper) and zeroed its top margin, collapsing the gap above every - section heading. Scope the reset to only the article body's first block. */ - .dm-article-body > :first-child :where(.dm-article-h2, .dm-article-h3), - .dm-article-body > .dm-article-h2:first-child, - .dm-article-body > .dm-article-h3:first-child { margin-top: 0; } - .dm-article-h3 { - font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important; - color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px; - text-wrap: balance; - } - @media (max-width: 600px) { - .dm-article-p { font-size: 16px !important; } - .dm-article-ul li, .dm-article-ol li { font-size: 15.5px; } - .dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; } - .dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; } - } - - .dm-article-ul, .dm-article-ol { - /* Top margin (was 0) separates the list from the paragraph above it; - matching bottom margin keeps it clear of the next heading/paragraph. - Slightly larger than --dm-space-p so the list reads as its own block. */ - margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px); - padding-left: 2px; list-style: none; - display: flex; flex-direction: column; gap: 15px; - } - /* Prefixed with .dm-article-body so these beat the theme's global - ".logico-front-end ul li:before" fontello-glyph bullet (specificity 0,1,3), - which otherwise replaces our clean red dot with a misaligned checkmark glyph - and adds its own 1.7em indent. */ - .dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li { - position: relative; padding-left: 34px; - font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450; - } - .dm-article-body .dm-article-ul li::before { - content: ""; position: absolute; left: 7px; top: 10px; - width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red); - /* kill any inherited fontello glyph from the global rule */ - font-size: 0; line-height: 0; - } - .dm-article-ol { counter-reset: dm-li; } - .dm-article-body .dm-article-ol li { counter-increment: dm-li; } - .dm-article-body .dm-article-ol li::before { - content: counter(dm-li); position: absolute; left: 0; top: 0; - width: 24px; height: 24px; border-radius: 7px; - background: rgba(192,18,39,0.10); color: var(--dm-red); - font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; - } - - /* ── Quote ── */ - .dm-article-quote { - position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px; - background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%); - border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0; - box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06); - } - .dm-article-quote::before { - content: "\201C"; position: absolute; left: 22px; top: 8px; - font-family: Georgia, "Times New Roman", serif; - font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700; - } - .dm-article-quote p { - font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600; - font-style: italic; color: #1e293b; margin: 0; - } - .dm-article-quote cite { - display: block; margin-top: 16px; font-size: 13px; font-weight: 700; - font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px; - } - @media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } } - - /* ── Images ── */ - .dm-article-figure { margin: var(--dm-space-img) 0; } - .dm-article-figure-img { - position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; - border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10); - } - .dm-article-figure figcaption { - margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500; - text-align: center; font-style: italic; - } - - /* ── Sidebar ── */ - .dm-blog-aside-wrap { position: relative; } - .dm-blog-sidebar { - display: flex; flex-direction: column; gap: 18px; - position: sticky; top: var(--dm-sticky-top); - } - @media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } } - - .dm-blog-widget { - background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card); - padding: 20px; box-shadow: var(--dm-shadow-card); - } - .dm-blog-widget-title { - font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important; - letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important; - margin: 0 0 15px; padding: 0 0 12px; - border-bottom: 1px solid rgba(15,23,42,0.08); - overflow: visible; white-space: normal; word-break: normal; - } - - /* Search */ - .dm-sr-only { - position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; - overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; - } - .dm-blog-search { position: relative; } - .dm-blog-search-form { position: relative; } - .dm-blog-search-input { - width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px; - padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a; - background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; - } - .dm-blog-search-input::placeholder { color: #9c9c9c; } - .dm-blog-search-input:focus { - outline: none; border-color: var(--dm-red); background: #fff; - box-shadow: 0 0 0 3px rgba(192,18,39,0.11); - } - .dm-blog-search-icon { - position: absolute; right: 14px; top: 50%; transform: translateY(-50%); - color: #94a3b8; pointer-events: none; display: flex; - } - .dm-blog-search-results { - position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0; - background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px; - box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden; - } - .dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; } - .dm-blog-search-result { - display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; - border-radius: 10px; text-decoration: none; transition: background .15s ease; - } - .dm-blog-search-result:hover { background: #f8fafc; } - .dm-blog-search-result-cat { - font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red); - } - .dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; } - .dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; } - - /* Recent posts */ - .dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; } - .dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; } - .dm-blog-recent-thumb { - position: relative; flex: 0 0 62px; width: 62px; height: 62px; - border-radius: 13px; overflow: hidden; background: #f1f5f9; - } - .dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; } - .dm-blog-recent-title { - font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); } - .dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; } - - /* Categories */ - .dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; } - .dm-blog-category-item { - display: flex; align-items: center; justify-content: space-between; gap: 10px; - padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important; - border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease; - } - .dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; } - .dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; } - .dm-blog-category-item > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .dm-blog-category-count { - flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9; - min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex; - align-items: center; justify-content: center; padding: 0 7px; - } - - /* CTA card */ - .dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; } - .dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; } - .dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; } - .dm-blog-cta-btn { - display: inline-flex; align-items: center; gap: 8px; - background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700; - padding: 12px 22px; border-radius: 12px; text-decoration: none; - transition: background .2s ease, transform .2s ease; - } - .dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } -c:["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"headline\":\"MileTruth™: 10 Stages to Smarter Dispatch\",\"description\":\"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub.\",\"image\":[\"https://www.doormile.com/images/blog-post-pic-31.webp\"],\"datePublished\":\"2025-09-05T00:00:00.000Z\",\"dateModified\":\"2025-09-05T00:00:00.000Z\",\"author\":{\"@type\":\"Organization\",\"name\":\"Doormile Team\",\"url\":\"https://www.doormile.com\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Doormile\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.doormile.com/images/cropped-image-2.png\"}},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.doormile.com/blog/miletruth-ai-10-stages-to-smarter-dispatch\"},\"articleSection\":\"MileTruth\"}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://www.doormile.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https://www.doormile.com/blog\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"MileTruth™: 10 Stages to Smarter Dispatch\",\"item\":\"https://www.doormile.com/blog/miletruth-ai-10-stages-to-smarter-dispatch\"}]}"}}],["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":[["$","article",null,{"className":"dm-single-blog","children":[["$","link",null,{"rel":"preload","as":"image","href":"/images/blog-post-pic-31.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$17"}}],"$L18","$L19"]}],"$L1a"]}]}]]}] -1b:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],""] -1c:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"ScrollReveal"] -18:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card dm-banner-card","style":{"backgroundImage":"url(/images/blog-post-pic-31.webp)","--hero-overlay":"linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)"},"children":["$","div",null,{"className":"e-con-inner dm-banner-inner","children":[["$","span",null,{"className":"dm-banner-category","children":"MileTruth"}],["$","h1",null,{"className":"dm-banner-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}]]}]}]}] -19:["$","div",null,{"className":"dm-blog-wrap","children":[["$","div",null,{"className":"dm-meta-bar","children":[["$","nav",null,{"className":"dm-meta-breadcrumb","aria-label":"Breadcrumb","children":["$","ol",null,{"children":[["$","li",null,{"children":["$","$L1b",null,{"href":"/","children":"Home"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"children":["$","$L1b",null,{"href":"/blog","children":"Blog"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"aria-current":"page","className":"dm-meta-current","children":"MileTruth™: 10 Stages to Smarter Dispatch"}]]}]}],["$","div",null,{"className":"dm-meta-items","children":[["$","span",null,{"className":"dm-meta-item dm-meta-author","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","path",null,{"d":"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}],["$","circle",null,{"cx":"12","cy":"7","r":"4"}]]}],"Doormile Team"]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"2"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}]]}],["$","time",null,{"dateTime":"2025-09-05","children":"Sep 5, 2025"}]]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","circle",null,{"cx":"12","cy":"12","r":"9"}],["$","polyline",null,{"points":"12 7 12 12 15 14"}]]}],2," min read"]}]]}]]}],["$","div",null,{"className":"dm-blog-layout","children":[["$","div",null,{"className":"dm-blog-main","children":[["$","p",null,{"className":"dm-blog-intro","children":"Behind every Doormile dispatch is a step-by-step route planning process. Each stage removes a common source of error before the plan reaches the rider."}],["$","div",null,{"className":"dm-article-body","children":[["$","$L1c","0",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"A dispatch plan has to be fast, but it also has to be usable. A quick route that ignores a bad address, low battery, or tight delivery window creates problems later in the day."}]}],["$","$L1c","1",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"The ten stages"}]}],["$","$L1c","2",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ol",null,{"className":"dm-article-ol","children":[["$","li","0",{"children":"Order intake: new orders, rider availability, and vehicle status are collected."}],["$","li","1",{"children":"Address check: delivery points, time windows, and service notes are verified."}],["$","li","2",{"children":"Stop planning: each stop gets an expected service time and delivery priority."}],["$","li","3",{"children":"Travel-time check: routes are compared against time-of-day traffic."}],["$","li","4",{"children":"Constraint check: capacity, shift time, customer windows, and range are applied."}],["$","li","5",{"children":"Route options: several possible plans are built for the same order set."}],["$","li","6",{"children":"Plan selection: the lowest-cost workable route plan is selected."}],["$","li","7",{"children":"Battery check: EV routes are checked against real charge capacity."}],["$","li","8",{"children":"ETA check: promised delivery times are verified before dispatch."}],["$","li","9",{"children":"Dispatch output: the final route is sent to the operations team."}]]}]}],["$","$L1c","3",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"Why staging matters"}]}],["$","$L1c","4",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"When everything is checked in one step, small errors slip through. A wrong pin, a missing apartment note, or a low battery warning can reach the rider and become a customer issue."}]}],"$L1d","$L1e","$L1f","$L20","$L21","$L22"]}]]}],"$L23"]}]]}] -24:T2021, - .dm-blog-footer { - font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32; - /* The global theme applies 72px top/bottom section padding — strip it so the - inner container is the single source of vertical rhythm (no double gap). */ - padding: 0 !important; - } - /* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */ - .dm-blog-footer :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline) */ - .dm-blog-footer a { text-decoration: none !important; } - /* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px - max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA - align to the exact same left/right edges as the article body above. - Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a - consistent ~64–72px section→section gap (no 120px+ voids). */ - .dm-blog-footer-inner { - max-width: 1280px; margin: 0 auto; - /* Compact vertical rhythm on an 8px system. Top padding sets the - article→Prev/Next gap (~24–32px); the inter-section gap sets the - Prev/Next→Related gap (~32–48px). No large arbitrary voids. */ - /* Minimal bottom padding — the global site footer already contributes its - own 20px top inset, so the CTA banner sits close to it without a void. */ - padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px); - display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px); - } - @media (max-width: 767px) { - .dm-blog-footer-inner { - padding-left: 16px; - padding-right: 16px; - } - } - - /* Prev / Next */ - .dm-prevnext { - display: grid; grid-template-columns: 1fr 1fr; gap: 20px; - /* Halved from 40px: tight divider→cards spacing without crowding. */ - padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08); - } - @media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } } - .dm-prevnext-placeholder { display: block; } - .dm-prevnext-card { - display: flex; gap: 16px; align-items: center; padding: 16px; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; - } - .dm-prevnext-card:hover { - transform: translateY(-4px); border-color: rgba(192,18,39,0.2); - box-shadow: 0 16px 34px rgba(192,18,39,0.10); - } - .dm-prevnext-thumb { - position: relative; flex: 0 0 80px; width: 80px; height: 80px; - border-radius: 16px; overflow: hidden; background: #f1f5f9; - } - .dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; } - .dm-prevnext-next { text-align: right; } - .dm-prevnext-next .dm-prevnext-text { align-items: flex-end; } - .dm-prevnext-label { - display: inline-flex; align-items: center; gap: 6px; - font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red); - } - .dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; } - .dm-prevnext-title { - font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); } - - /* Related */ - .dm-related-heading { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important; - line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px; - } - .dm-related-grid { - display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; - } - @media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } } - @media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } } - - .dm-related-card { - display: flex; flex-direction: column; height: 100%; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none; - transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease; - } - .dm-related-card:hover { - transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13); - border-color: rgba(192,18,39,0.2); - } - .dm-related-img { - position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9; - } - .dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-img img { transform: scale(1.05); } - .dm-related-badge { - position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff; - font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px; - padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25); - } - .dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; } - .dm-related-card-title { - font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important; - letter-spacing: -.2px !important; margin: 0 0 10px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-related-card:hover .dm-related-card-title { color: var(--dm-red); } - .dm-related-card-excerpt { - font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - } - .dm-related-readmore { - margin-top: auto; display: inline-flex; align-items: center; gap: 7px; - font-size: 12.5px; font-weight: 800; color: var(--dm-red); - text-transform: uppercase; letter-spacing: .6px; - } - .dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); } - - /* Contact CTA banner */ - .dm-blog-contact-cta { - display: flex; align-items: center; justify-content: space-between; gap: 32px; - flex-wrap: wrap; - background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%); - border-radius: 30px; padding: clamp(32px, 4vw, 56px); - position: relative; overflow: hidden; - } - .dm-blog-contact-cta::after { - content: ""; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px; - background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%); - pointer-events: none; - } - .dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; } - .dm-blog-contact-eyebrow { - display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase; - letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px; - } - .dm-blog-contact-title { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important; - letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance; - } - .dm-blog-contact-sub { - font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450; - } - .dm-blog-contact-btn { - position: relative; z-index: 1; flex-shrink: 0; - display: inline-flex; align-items: center; justify-content: center; gap: 10px; - background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700; - padding: 16px 32px; border-radius: 16px; text-decoration: none; - box-shadow: 0 10px 26px rgba(192,18,39,0.34); - transition: background .2s ease, transform .2s ease; - } - .dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } - @media (max-width: 720px) { - .dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; } - .dm-blog-contact-btn { width: 100%; } - } -1a:["$","section",null,{"className":"dm-blog-footer","aria-label":"More articles","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$24"}}],"$L25"]}] -26:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"Image"] -27:I[23096,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"default"] -1d:["$","$L1c","5",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","figure",null,{"className":"dm-article-figure","children":[["$","span",null,{"className":"dm-article-figure-img","children":["$","$L26",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth routing pipeline diagram","fill":true,"sizes":"(max-width: 768px) 100vw, 760px","style":{"objectFit":"cover"}}]}],["$","figcaption",null,{"children":"A staged dispatch process catches address, range, and ETA issues before riders leave."}]]}]}] -1e:["$","$L1c","6",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","blockquote",null,{"className":"dm-article-quote","children":[["$","p",null,{"children":"Each stage should remove one kind of mistake. By dispatch time, the route should already be practical."}],["$","cite",null,{"children":"MileTruth Engineering"}]]}]}] -1f:["$","$L1c","7",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Comparing route options"}]}] -20:["$","$L1c","8",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The useful part is not only building one route. It is comparing a few workable route options before choosing the plan. One option may save distance, another may protect a tight delivery window, and another may keep an EV closer to a charger."}]}] -21:["$","$L1c","9",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"Several route plans checked before dispatch"}],["$","li","1",{"children":"Distance, time windows, capacity, and range considered together"}],["$","li","2",{"children":"Range and ETA checked before the route reaches the rider"}],["$","li","3",{"children":"Fast output that still leaves room for dispatcher review"}]]}]}] -22:["$","$L1c","10",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The goal is simple: give the dispatch team a route plan they can trust before the first vehicle leaves the hub."}]}] -23:["$","div",null,{"className":"dm-blog-aside-wrap","children":["$","aside",null,{"className":"dm-blog-sidebar","aria-label":"Blog sidebar","children":[["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Search"}],["$","$L27",null,{}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Recent Posts"}],["$","ul",null,{"className":"dm-blog-recent","children":[["$","li","how-ai-is-transforming-last-mile-ev-delivery",{"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L26",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","time",null,{"dateTime":"2025-10-02","className":"dm-blog-recent-date","children":"Oct 2, 2025"}]]}]]}]}],["$","li","42-less-distance-insights-from-our-hyderabad-hub",{"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L26",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","time",null,{"dateTime":"2025-09-18","className":"dm-blog-recent-date","children":"Sep 18, 2025"}]]}]]}]}],["$","li","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"children":["$","$L1b",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L26",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","time",null,{"dateTime":"2025-08-21","className":"dm-blog-recent-date","children":"Aug 21, 2025"}]]}]]}]}],["$","li","why-mathematical-precision-beats-heuristics-in-routing",{"children":["$","$L1b",null,{"href":"/blog/why-mathematical-precision-beats-heuristics-in-routing","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L26",null,{"src":"/images/blog-post-pic-14.webp","alt":"Why Mathematical Precision Beats Heuristics in Routing","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"Why Mathematical Precision Beats Heuristics in Routing"}],["$","time",null,{"dateTime":"2025-08-07","className":"dm-blog-recent-date","children":"Aug 7, 2025"}]]}]]}]}]]}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Categories"}],["$","ul",null,{"className":"dm-blog-categories","children":[["$","li","Case Study",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Case Study"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","EV Fleet",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"EV Fleet"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}],["$","li","Fleet Management",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Fleet Management"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","MileTruth",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":["$L28","$L29"]}]}],"$L2a","$L2b","$L2c"]}]]}],"$L2d"]}]}] -25:["$","div",null,{"className":"dm-blog-footer-inner","children":[["$","nav",null,{"className":"dm-prevnext","aria-label":"Article navigation","children":[["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-prevnext-card dm-prevnext-prev","children":[["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L26",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"19","y1":"12","x2":"5","y2":"12"}],["$","polyline",null,{"points":"12 19 5 12 12 5"}]]}],"Previous"]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Case Study"}],["$","span",null,{"className":"dm-prevnext-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}]]}]]}],["$","$L1b",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-prevnext-card dm-prevnext-next","children":[["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":["Next",["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","span",null,{"className":"dm-prevnext-cat","children":"EV Fleet"}],["$","span",null,{"className":"dm-prevnext-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}]]}],["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L26",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}]]}]]}],["$","div",null,{"className":"dm-related","children":[["$","h2",null,{"className":"dm-related-heading","children":"Related Articles"}],["$","div",null,{"className":"dm-related-grid","children":[["$","$L1c","how-ai-is-transforming-last-mile-ev-delivery",{"delay":0,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L26",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Technology"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L1c","42-less-distance-insights-from-our-hyderabad-hub",{"delay":0.08,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L26",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Case Study"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],"$L2e","$L2f"]}]]}]}],"$L30"]}]]}],"$L31"]}] -28:["$","span",null,{"children":"MileTruth"}] -29:["$","span",null,{"className":"dm-blog-category-count","children":1}] -2a:["$","li","Operations",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Operations"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2b:["$","li","Sustainability",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Sustainability"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2c:["$","li","Technology",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Technology"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}] -2d:["$","section",null,{"className":"dm-blog-widget dm-blog-cta-card","children":[["$","h2",null,{"className":"dm-blog-cta-title","children":"Planning delivery routes?"}],["$","p",null,{"className":"dm-blog-cta-text","children":"Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time."}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-cta-btn","children":["Contact Us",["$","svg",null,{"width":"18","height":"18","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -2e:["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}] -2f:["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}] -30:["$","$L1c","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"delay":0.16,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L26",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"EV Fleet"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"Electric vehicles lower running costs, but battery range changes how routes must be planned before dispatch."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}] -31:["$","div",null,{"className":"dm-blog-contact-cta","children":[["$","div",null,{"className":"dm-blog-contact-cta-content","children":[["$","span",null,{"className":"dm-blog-contact-eyebrow","children":"Let's talk logistics"}],["$","h2",null,{"className":"dm-blog-contact-title","children":"Ready to move smarter with Doormile?"}],["$","p",null,{"className":"dm-blog-contact-sub","children":"Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding."}]]}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-contact-btn","children":["Get in Touch",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -12:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -32:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -f:null -14:[["$","title","0",{"children":"MileTruth™: 10 Stages to Smarter Dispatch – Doormile"}],["$","meta","1",{"name":"description","content":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}],["$","meta","2",{"name":"author","content":"Doormile Team"}],["$","meta","3",{"name":"keywords","content":"MileTruth,last-mile logistics,EV fleet,MileTruth,route optimisation"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","link","5",{"rel":"canonical","href":"https://www.doormile.com/blog/miletruth-ai-10-stages-to-smarter-dispatch"}],["$","meta","6",{"property":"og:title","content":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","meta","7",{"property":"og:description","content":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}],["$","meta","8",{"property":"og:url","content":"https://www.doormile.com/blog/miletruth-ai-10-stages-to-smarter-dispatch"}],["$","meta","9",{"property":"og:site_name","content":"Doormile"}],["$","meta","10",{"property":"og:image","content":"https://www.doormile.com/images/blog-post-pic-31.webp"}],["$","meta","11",{"property":"og:image:alt","content":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","meta","12",{"property":"og:type","content":"article"}],["$","meta","13",{"property":"article:published_time","content":"2025-09-05T00:00:00.000Z"}],["$","meta","14",{"property":"article:author","content":"Doormile Team"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","meta","17",{"name":"twitter:description","content":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}],["$","meta","18",{"name":"twitter:image","content":"https://www.doormile.com/images/blog-post-pic-31.webp"}],["$","link","19",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","21",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","22",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L32","23",{}]] diff --git a/build/blog/miletruth-ai-10-stages-to-smarter-dispatch/__next._head.txt b/build/blog/miletruth-ai-10-stages-to-smarter-dispatch/__next._head.txt deleted file mode 100644 index e1f7850..0000000 --- a/build/blog/miletruth-ai-10-stages-to-smarter-dispatch/__next._head.txt +++ /dev/null @@ -1,6 +0,0 @@ -1:"$Sreact.fragment" -2:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -3:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -4:"$Sreact.suspense" -5:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"MileTruth™: 10 Stages to Smarter Dispatch – Doormile"}],["$","meta","1",{"name":"description","content":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}],["$","meta","2",{"name":"author","content":"Doormile Team"}],["$","meta","3",{"name":"keywords","content":"MileTruth,last-mile logistics,EV fleet,MileTruth,route optimisation"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","link","5",{"rel":"canonical","href":"https://www.doormile.com/blog/miletruth-ai-10-stages-to-smarter-dispatch"}],["$","meta","6",{"property":"og:title","content":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","meta","7",{"property":"og:description","content":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}],["$","meta","8",{"property":"og:url","content":"https://www.doormile.com/blog/miletruth-ai-10-stages-to-smarter-dispatch"}],["$","meta","9",{"property":"og:site_name","content":"Doormile"}],["$","meta","10",{"property":"og:image","content":"https://www.doormile.com/images/blog-post-pic-31.webp"}],["$","meta","11",{"property":"og:image:alt","content":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","meta","12",{"property":"og:type","content":"article"}],["$","meta","13",{"property":"article:published_time","content":"2025-09-05T00:00:00.000Z"}],["$","meta","14",{"property":"article:author","content":"Doormile Team"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","meta","17",{"name":"twitter:description","content":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}],["$","meta","18",{"name":"twitter:image","content":"https://www.doormile.com/images/blog-post-pic-31.webp"}],["$","link","19",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","21",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","22",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L5","23",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/miletruth-ai-10-stages-to-smarter-dispatch/__next._index.txt b/build/blog/miletruth-ai-10-stages-to-smarter-dispatch/__next._index.txt deleted file mode 100644 index d0b3355..0000000 --- a/build/blog/miletruth-ai-10-stages-to-smarter-dispatch/__next._index.txt +++ /dev/null @@ -1,15 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","template":["$","$La",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/miletruth-ai-10-stages-to-smarter-dispatch/__next._tree.txt b/build/blog/miletruth-ai-10-stages-to-smarter-dispatch/__next._tree.txt deleted file mode 100644 index c319922..0000000 --- a/build/blog/miletruth-ai-10-stages-to-smarter-dispatch/__next._tree.txt +++ /dev/null @@ -1,10 +0,0 @@ -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -:HL["/images/blog-post-pic-31.webp","image"] -0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"blog","param":null,"prefetchHints":0,"slots":{"children":{"name":"slug","param":{"type":"d","key":"miletruth-ai-10-stages-to-smarter-dispatch","siblings":null},"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/miletruth-ai-10-stages-to-smarter-dispatch/__next.blog.$d$slug.__PAGE__.txt b/build/blog/miletruth-ai-10-stages-to-smarter-dispatch/__next.blog.$d$slug.__PAGE__.txt deleted file mode 100644 index a7c77dc..0000000 --- a/build/blog/miletruth-ai-10-stages-to-smarter-dispatch/__next.blog.$d$slug.__PAGE__.txt +++ /dev/null @@ -1,521 +0,0 @@ -1:"$Sreact.fragment" -8:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],""] -9:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"ScrollReveal"] -13:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -14:"$Sreact.suspense" -16:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"Image"] -17:I[23096,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"default"] -:HL["/images/blog-post-pic-31.webp","image"] -2:T3d6f, - .dm-single-blog { - --dm-red: #c01227; - --dm-red-hover: #e31d32; - --dm-radius-card: 22px; - --dm-radius-img: 20px; - --dm-radius-badge: 8px; - --dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05); - --dm-border: 1px solid rgba(15, 23, 42, 0.09); - --dm-space-p: 24px; - --dm-space-h: 32px; - --dm-space-img: 32px; - --dm-space-quote: 40px; - --dm-sticky-top: 138px; - --dm-measure: min(1100px, 100%); - font-family: var(--font-manrope), sans-serif; - } - - /* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6 - (120/80/60px UPPERCASE) rules with !important on our own classes. */ - .dm-single-blog :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline, - specificity 0-1-1) so blog links keep our colors and never get underlined. */ - .dm-single-blog a { text-decoration: none !important; } - - /* Page banner: tall homepage-scale frame with only badge + title inside */ - /* Compound selector (specificity 20) + !important beats the global 800px - single-class height rules so the blog banner can use viewport heights. */ - .custom-standard-hero-card.dm-banner-card { - height: 90vh !important; - min-height: 85vh !important; - } - @media (max-width: 1024px) { - .custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; } - } - @media (max-width: 600px) { - .custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; } - } - - .dm-banner-inner { - position: relative; width: 100%; height: 100%; - display: flex; flex-direction: column; align-items: center; justify-content: center; - text-align: center; gap: clamp(22px, 2.6vw, 34px); - padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px); - } - - .dm-banner-category { - display: inline-block; background: var(--dm-red); color: #fff; - font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px; - padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45); - } - .dm-banner-title { - font-family: var(--font-manrope), sans-serif !important; - font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important; - line-height: 1.16 !important; letter-spacing: -1.2px !important; - color: #ffffff !important; margin: 0; max-width: 820px; - text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38); - } - @media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } } - @media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } } - - /* Content wrap begins immediately below the banner */ - /* Shared content container: the SAME max-width + horizontal padding is used - by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings, - images, Prev/Next, Related Articles and the CTA banner all align to one - grid with identical left/right edges. Keep both in sync. */ - .dm-blog-wrap { - max-width: 1280px; margin: 0 auto; - /* 20px mobile padding floor → 40px on desktop; matches the footer container. */ - padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0; - } - @media (max-width: 767px) { - .dm-blog-wrap { - padding-left: 16px; - padding-right: 16px; - } - } - - /* ── Article meta bar (directly under the hero) ── */ - .dm-meta-bar { - display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px; - padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px); - border-bottom: 1px solid rgba(15,23,42,0.10); - } - .dm-meta-breadcrumb ol { - list-style: none; display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b; - } - .dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; } - .dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; } - .dm-meta-sep { color: #cbd5e1; } - .dm-meta-current { - color: #0f172a; font-weight: 700; - max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - } - @media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } } - .dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; } - .dm-meta-item { - display: inline-flex; align-items: center; gap: 7px; - font-size: 13.5px; font-weight: 600; color: #475569; - } - .dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; } - .dm-meta-author { color: #0f172a; font-weight: 700; } - @media (max-width: 600px) { .dm-meta-bar { gap: 12px; } } - .dm-blog-layout { - display: grid; grid-template-columns: minmax(0,1fr) 320px; - /* Tighter gap gives the reading column more room next to the 320px sidebar. */ - gap: clamp(28px, 3vw, 56px); align-items: start; - } - @media (max-width: 1024px) { - .dm-blog-layout { grid-template-columns: 1fr; gap: 48px; } - /* Single-column (tablet/mobile): cap the reading column and centre it so the - article never sits left-aligned with a large empty right gutter. */ - .dm-blog-main { max-width: 900px; margin-inline: auto; } - } - .dm-blog-main { min-width: 0; } - - /* ── Intro lead ── */ - .dm-blog-intro { - max-width: var(--dm-measure); - font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500; - color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px; - border-left: 3px solid var(--dm-red); - } - - /* ── Article body ── */ - .dm-article-body { max-width: var(--dm-measure); } - .dm-article-p { - font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450; - margin: 0 0 var(--dm-space-p); - } - .dm-article-h2 { - font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important; - color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h); - text-wrap: balance; - } - /* Each article block is wrapped in its OWN ScrollReveal
    , so a bare - :first-child rule matched every heading (each is the only child of its - wrapper) and zeroed its top margin, collapsing the gap above every - section heading. Scope the reset to only the article body's first block. */ - .dm-article-body > :first-child :where(.dm-article-h2, .dm-article-h3), - .dm-article-body > .dm-article-h2:first-child, - .dm-article-body > .dm-article-h3:first-child { margin-top: 0; } - .dm-article-h3 { - font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important; - color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px; - text-wrap: balance; - } - @media (max-width: 600px) { - .dm-article-p { font-size: 16px !important; } - .dm-article-ul li, .dm-article-ol li { font-size: 15.5px; } - .dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; } - .dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; } - } - - .dm-article-ul, .dm-article-ol { - /* Top margin (was 0) separates the list from the paragraph above it; - matching bottom margin keeps it clear of the next heading/paragraph. - Slightly larger than --dm-space-p so the list reads as its own block. */ - margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px); - padding-left: 2px; list-style: none; - display: flex; flex-direction: column; gap: 15px; - } - /* Prefixed with .dm-article-body so these beat the theme's global - ".logico-front-end ul li:before" fontello-glyph bullet (specificity 0,1,3), - which otherwise replaces our clean red dot with a misaligned checkmark glyph - and adds its own 1.7em indent. */ - .dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li { - position: relative; padding-left: 34px; - font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450; - } - .dm-article-body .dm-article-ul li::before { - content: ""; position: absolute; left: 7px; top: 10px; - width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red); - /* kill any inherited fontello glyph from the global rule */ - font-size: 0; line-height: 0; - } - .dm-article-ol { counter-reset: dm-li; } - .dm-article-body .dm-article-ol li { counter-increment: dm-li; } - .dm-article-body .dm-article-ol li::before { - content: counter(dm-li); position: absolute; left: 0; top: 0; - width: 24px; height: 24px; border-radius: 7px; - background: rgba(192,18,39,0.10); color: var(--dm-red); - font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; - } - - /* ── Quote ── */ - .dm-article-quote { - position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px; - background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%); - border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0; - box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06); - } - .dm-article-quote::before { - content: "\201C"; position: absolute; left: 22px; top: 8px; - font-family: Georgia, "Times New Roman", serif; - font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700; - } - .dm-article-quote p { - font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600; - font-style: italic; color: #1e293b; margin: 0; - } - .dm-article-quote cite { - display: block; margin-top: 16px; font-size: 13px; font-weight: 700; - font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px; - } - @media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } } - - /* ── Images ── */ - .dm-article-figure { margin: var(--dm-space-img) 0; } - .dm-article-figure-img { - position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; - border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10); - } - .dm-article-figure figcaption { - margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500; - text-align: center; font-style: italic; - } - - /* ── Sidebar ── */ - .dm-blog-aside-wrap { position: relative; } - .dm-blog-sidebar { - display: flex; flex-direction: column; gap: 18px; - position: sticky; top: var(--dm-sticky-top); - } - @media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } } - - .dm-blog-widget { - background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card); - padding: 20px; box-shadow: var(--dm-shadow-card); - } - .dm-blog-widget-title { - font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important; - letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important; - margin: 0 0 15px; padding: 0 0 12px; - border-bottom: 1px solid rgba(15,23,42,0.08); - overflow: visible; white-space: normal; word-break: normal; - } - - /* Search */ - .dm-sr-only { - position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; - overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; - } - .dm-blog-search { position: relative; } - .dm-blog-search-form { position: relative; } - .dm-blog-search-input { - width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px; - padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a; - background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; - } - .dm-blog-search-input::placeholder { color: #9c9c9c; } - .dm-blog-search-input:focus { - outline: none; border-color: var(--dm-red); background: #fff; - box-shadow: 0 0 0 3px rgba(192,18,39,0.11); - } - .dm-blog-search-icon { - position: absolute; right: 14px; top: 50%; transform: translateY(-50%); - color: #94a3b8; pointer-events: none; display: flex; - } - .dm-blog-search-results { - position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0; - background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px; - box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden; - } - .dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; } - .dm-blog-search-result { - display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; - border-radius: 10px; text-decoration: none; transition: background .15s ease; - } - .dm-blog-search-result:hover { background: #f8fafc; } - .dm-blog-search-result-cat { - font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red); - } - .dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; } - .dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; } - - /* Recent posts */ - .dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; } - .dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; } - .dm-blog-recent-thumb { - position: relative; flex: 0 0 62px; width: 62px; height: 62px; - border-radius: 13px; overflow: hidden; background: #f1f5f9; - } - .dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; } - .dm-blog-recent-title { - font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); } - .dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; } - - /* Categories */ - .dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; } - .dm-blog-category-item { - display: flex; align-items: center; justify-content: space-between; gap: 10px; - padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important; - border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease; - } - .dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; } - .dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; } - .dm-blog-category-item > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .dm-blog-category-count { - flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9; - min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex; - align-items: center; justify-content: center; padding: 0 7px; - } - - /* CTA card */ - .dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; } - .dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; } - .dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; } - .dm-blog-cta-btn { - display: inline-flex; align-items: center; gap: 8px; - background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700; - padding: 12px 22px; border-radius: 12px; text-decoration: none; - transition: background .2s ease, transform .2s ease; - } - .dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } -0:{"rsc":["$","$1","c",{"children":[["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"headline\":\"MileTruth™: 10 Stages to Smarter Dispatch\",\"description\":\"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub.\",\"image\":[\"https://www.doormile.com/images/blog-post-pic-31.webp\"],\"datePublished\":\"2025-09-05T00:00:00.000Z\",\"dateModified\":\"2025-09-05T00:00:00.000Z\",\"author\":{\"@type\":\"Organization\",\"name\":\"Doormile Team\",\"url\":\"https://www.doormile.com\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Doormile\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.doormile.com/images/cropped-image-2.png\"}},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.doormile.com/blog/miletruth-ai-10-stages-to-smarter-dispatch\"},\"articleSection\":\"MileTruth\"}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://www.doormile.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https://www.doormile.com/blog\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"MileTruth™: 10 Stages to Smarter Dispatch\",\"item\":\"https://www.doormile.com/blog/miletruth-ai-10-stages-to-smarter-dispatch\"}]}"}}],["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":[["$","article",null,{"className":"dm-single-blog","children":[["$","link",null,{"rel":"preload","as":"image","href":"/images/blog-post-pic-31.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$2"}}],"$L3","$L4"]}],"$L5"]}]}]]}],["$L6"],"$L7"]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} -3:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card dm-banner-card","style":{"backgroundImage":"url(/images/blog-post-pic-31.webp)","--hero-overlay":"linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)"},"children":["$","div",null,{"className":"e-con-inner dm-banner-inner","children":[["$","span",null,{"className":"dm-banner-category","children":"MileTruth"}],["$","h1",null,{"className":"dm-banner-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}]]}]}]}] -4:["$","div",null,{"className":"dm-blog-wrap","children":[["$","div",null,{"className":"dm-meta-bar","children":[["$","nav",null,{"className":"dm-meta-breadcrumb","aria-label":"Breadcrumb","children":["$","ol",null,{"children":[["$","li",null,{"children":["$","$L8",null,{"href":"/","children":"Home"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"children":["$","$L8",null,{"href":"/blog","children":"Blog"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"aria-current":"page","className":"dm-meta-current","children":"MileTruth™: 10 Stages to Smarter Dispatch"}]]}]}],["$","div",null,{"className":"dm-meta-items","children":[["$","span",null,{"className":"dm-meta-item dm-meta-author","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","path",null,{"d":"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}],["$","circle",null,{"cx":"12","cy":"7","r":"4"}]]}],"Doormile Team"]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"2"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}]]}],["$","time",null,{"dateTime":"2025-09-05","children":"Sep 5, 2025"}]]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","circle",null,{"cx":"12","cy":"12","r":"9"}],["$","polyline",null,{"points":"12 7 12 12 15 14"}]]}],2," min read"]}]]}]]}],["$","div",null,{"className":"dm-blog-layout","children":[["$","div",null,{"className":"dm-blog-main","children":[["$","p",null,{"className":"dm-blog-intro","children":"Behind every Doormile dispatch is a step-by-step route planning process. Each stage removes a common source of error before the plan reaches the rider."}],["$","div",null,{"className":"dm-article-body","children":[["$","$L9","0",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"A dispatch plan has to be fast, but it also has to be usable. A quick route that ignores a bad address, low battery, or tight delivery window creates problems later in the day."}]}],["$","$L9","1",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"The ten stages"}]}],["$","$L9","2",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ol",null,{"className":"dm-article-ol","children":[["$","li","0",{"children":"Order intake: new orders, rider availability, and vehicle status are collected."}],["$","li","1",{"children":"Address check: delivery points, time windows, and service notes are verified."}],["$","li","2",{"children":"Stop planning: each stop gets an expected service time and delivery priority."}],["$","li","3",{"children":"Travel-time check: routes are compared against time-of-day traffic."}],["$","li","4",{"children":"Constraint check: capacity, shift time, customer windows, and range are applied."}],["$","li","5",{"children":"Route options: several possible plans are built for the same order set."}],["$","li","6",{"children":"Plan selection: the lowest-cost workable route plan is selected."}],["$","li","7",{"children":"Battery check: EV routes are checked against real charge capacity."}],["$","li","8",{"children":"ETA check: promised delivery times are verified before dispatch."}],["$","li","9",{"children":"Dispatch output: the final route is sent to the operations team."}]]}]}],["$","$L9","3",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"Why staging matters"}]}],["$","$L9","4",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"When everything is checked in one step, small errors slip through. A wrong pin, a missing apartment note, or a low battery warning can reach the rider and become a customer issue."}]}],"$La","$Lb","$Lc","$Ld","$Le","$Lf"]}]]}],"$L10"]}]]}] -11:T2021, - .dm-blog-footer { - font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32; - /* The global theme applies 72px top/bottom section padding — strip it so the - inner container is the single source of vertical rhythm (no double gap). */ - padding: 0 !important; - } - /* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */ - .dm-blog-footer :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline) */ - .dm-blog-footer a { text-decoration: none !important; } - /* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px - max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA - align to the exact same left/right edges as the article body above. - Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a - consistent ~64–72px section→section gap (no 120px+ voids). */ - .dm-blog-footer-inner { - max-width: 1280px; margin: 0 auto; - /* Compact vertical rhythm on an 8px system. Top padding sets the - article→Prev/Next gap (~24–32px); the inter-section gap sets the - Prev/Next→Related gap (~32–48px). No large arbitrary voids. */ - /* Minimal bottom padding — the global site footer already contributes its - own 20px top inset, so the CTA banner sits close to it without a void. */ - padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px); - display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px); - } - @media (max-width: 767px) { - .dm-blog-footer-inner { - padding-left: 16px; - padding-right: 16px; - } - } - - /* Prev / Next */ - .dm-prevnext { - display: grid; grid-template-columns: 1fr 1fr; gap: 20px; - /* Halved from 40px: tight divider→cards spacing without crowding. */ - padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08); - } - @media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } } - .dm-prevnext-placeholder { display: block; } - .dm-prevnext-card { - display: flex; gap: 16px; align-items: center; padding: 16px; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; - } - .dm-prevnext-card:hover { - transform: translateY(-4px); border-color: rgba(192,18,39,0.2); - box-shadow: 0 16px 34px rgba(192,18,39,0.10); - } - .dm-prevnext-thumb { - position: relative; flex: 0 0 80px; width: 80px; height: 80px; - border-radius: 16px; overflow: hidden; background: #f1f5f9; - } - .dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; } - .dm-prevnext-next { text-align: right; } - .dm-prevnext-next .dm-prevnext-text { align-items: flex-end; } - .dm-prevnext-label { - display: inline-flex; align-items: center; gap: 6px; - font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red); - } - .dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; } - .dm-prevnext-title { - font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); } - - /* Related */ - .dm-related-heading { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important; - line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px; - } - .dm-related-grid { - display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; - } - @media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } } - @media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } } - - .dm-related-card { - display: flex; flex-direction: column; height: 100%; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none; - transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease; - } - .dm-related-card:hover { - transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13); - border-color: rgba(192,18,39,0.2); - } - .dm-related-img { - position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9; - } - .dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-img img { transform: scale(1.05); } - .dm-related-badge { - position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff; - font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px; - padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25); - } - .dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; } - .dm-related-card-title { - font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important; - letter-spacing: -.2px !important; margin: 0 0 10px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-related-card:hover .dm-related-card-title { color: var(--dm-red); } - .dm-related-card-excerpt { - font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - } - .dm-related-readmore { - margin-top: auto; display: inline-flex; align-items: center; gap: 7px; - font-size: 12.5px; font-weight: 800; color: var(--dm-red); - text-transform: uppercase; letter-spacing: .6px; - } - .dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); } - - /* Contact CTA banner */ - .dm-blog-contact-cta { - display: flex; align-items: center; justify-content: space-between; gap: 32px; - flex-wrap: wrap; - background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%); - border-radius: 30px; padding: clamp(32px, 4vw, 56px); - position: relative; overflow: hidden; - } - .dm-blog-contact-cta::after { - content: ""; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px; - background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%); - pointer-events: none; - } - .dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; } - .dm-blog-contact-eyebrow { - display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase; - letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px; - } - .dm-blog-contact-title { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important; - letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance; - } - .dm-blog-contact-sub { - font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450; - } - .dm-blog-contact-btn { - position: relative; z-index: 1; flex-shrink: 0; - display: inline-flex; align-items: center; justify-content: center; gap: 10px; - background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700; - padding: 16px 32px; border-radius: 16px; text-decoration: none; - box-shadow: 0 10px 26px rgba(192,18,39,0.34); - transition: background .2s ease, transform .2s ease; - } - .dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } - @media (max-width: 720px) { - .dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; } - .dm-blog-contact-btn { width: 100%; } - } -5:["$","section",null,{"className":"dm-blog-footer","aria-label":"More articles","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$11"}}],"$L12"]}] -6:["$","script","script-0",{"src":"/_next/static/chunks/0yvxf3ok9gcp_.js","async":true}] -7:["$","$L13",null,{"children":["$","$14",null,{"name":"Next.MetadataOutlet","children":"$@15"}]}] -a:["$","$L9","5",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","figure",null,{"className":"dm-article-figure","children":[["$","span",null,{"className":"dm-article-figure-img","children":["$","$L16",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth routing pipeline diagram","fill":true,"sizes":"(max-width: 768px) 100vw, 760px","style":{"objectFit":"cover"}}]}],["$","figcaption",null,{"children":"A staged dispatch process catches address, range, and ETA issues before riders leave."}]]}]}] -b:["$","$L9","6",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","blockquote",null,{"className":"dm-article-quote","children":[["$","p",null,{"children":"Each stage should remove one kind of mistake. By dispatch time, the route should already be practical."}],["$","cite",null,{"children":"MileTruth Engineering"}]]}]}] -c:["$","$L9","7",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Comparing route options"}]}] -d:["$","$L9","8",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The useful part is not only building one route. It is comparing a few workable route options before choosing the plan. One option may save distance, another may protect a tight delivery window, and another may keep an EV closer to a charger."}]}] -e:["$","$L9","9",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"Several route plans checked before dispatch"}],["$","li","1",{"children":"Distance, time windows, capacity, and range considered together"}],["$","li","2",{"children":"Range and ETA checked before the route reaches the rider"}],["$","li","3",{"children":"Fast output that still leaves room for dispatcher review"}]]}]}] -f:["$","$L9","10",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The goal is simple: give the dispatch team a route plan they can trust before the first vehicle leaves the hub."}]}] -10:["$","div",null,{"className":"dm-blog-aside-wrap","children":["$","aside",null,{"className":"dm-blog-sidebar","aria-label":"Blog sidebar","children":[["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Search"}],["$","$L17",null,{}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Recent Posts"}],["$","ul",null,{"className":"dm-blog-recent","children":[["$","li","how-ai-is-transforming-last-mile-ev-delivery",{"children":["$","$L8",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L16",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","time",null,{"dateTime":"2025-10-02","className":"dm-blog-recent-date","children":"Oct 2, 2025"}]]}]]}]}],["$","li","42-less-distance-insights-from-our-hyderabad-hub",{"children":["$","$L8",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L16",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","time",null,{"dateTime":"2025-09-18","className":"dm-blog-recent-date","children":"Sep 18, 2025"}]]}]]}]}],["$","li","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"children":["$","$L8",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L16",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","time",null,{"dateTime":"2025-08-21","className":"dm-blog-recent-date","children":"Aug 21, 2025"}]]}]]}]}],["$","li","why-mathematical-precision-beats-heuristics-in-routing",{"children":["$","$L8",null,{"href":"/blog/why-mathematical-precision-beats-heuristics-in-routing","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L16",null,{"src":"/images/blog-post-pic-14.webp","alt":"Why Mathematical Precision Beats Heuristics in Routing","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"Why Mathematical Precision Beats Heuristics in Routing"}],["$","time",null,{"dateTime":"2025-08-07","className":"dm-blog-recent-date","children":"Aug 7, 2025"}]]}]]}]}]]}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Categories"}],["$","ul",null,{"className":"dm-blog-categories","children":[["$","li","Case Study",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Case Study"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","EV Fleet",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"EV Fleet"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}],["$","li","Fleet Management",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Fleet Management"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","MileTruth",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":["$L18","$L19"]}]}],"$L1a","$L1b","$L1c"]}]]}],"$L1d"]}]}] -12:["$","div",null,{"className":"dm-blog-footer-inner","children":[["$","nav",null,{"className":"dm-prevnext","aria-label":"Article navigation","children":[["$","$L8",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-prevnext-card dm-prevnext-prev","children":[["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L16",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"19","y1":"12","x2":"5","y2":"12"}],["$","polyline",null,{"points":"12 19 5 12 12 5"}]]}],"Previous"]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Case Study"}],["$","span",null,{"className":"dm-prevnext-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}]]}]]}],["$","$L8",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-prevnext-card dm-prevnext-next","children":[["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":["Next",["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","span",null,{"className":"dm-prevnext-cat","children":"EV Fleet"}],["$","span",null,{"className":"dm-prevnext-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}]]}],["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L16",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}]]}]]}],["$","div",null,{"className":"dm-related","children":[["$","h2",null,{"className":"dm-related-heading","children":"Related Articles"}],["$","div",null,{"className":"dm-related-grid","children":[["$","$L9","how-ai-is-transforming-last-mile-ev-delivery",{"delay":0,"duration":0.7,"yOffset":30,"children":["$","$L8",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L16",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Technology"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L9","42-less-distance-insights-from-our-hyderabad-hub",{"delay":0.08,"duration":0.7,"yOffset":30,"children":["$","$L8",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L16",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Case Study"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],"$L1e","$L1f"]}]]}]}],"$L20"]}]]}],"$L21"]}] -15:null -18:["$","span",null,{"children":"MileTruth"}] -19:["$","span",null,{"className":"dm-blog-category-count","children":1}] -1a:["$","li","Operations",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Operations"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -1b:["$","li","Sustainability",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Sustainability"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -1c:["$","li","Technology",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Technology"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}] -1d:["$","section",null,{"className":"dm-blog-widget dm-blog-cta-card","children":[["$","h2",null,{"className":"dm-blog-cta-title","children":"Planning delivery routes?"}],["$","p",null,{"className":"dm-blog-cta-text","children":"Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time."}],["$","$L8",null,{"href":"/contact","className":"dm-blog-cta-btn","children":["Contact Us",["$","svg",null,{"width":"18","height":"18","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -1e:["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}] -1f:["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}] -20:["$","$L9","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"delay":0.16,"duration":0.7,"yOffset":30,"children":["$","$L8",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L16",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"EV Fleet"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"Electric vehicles lower running costs, but battery range changes how routes must be planned before dispatch."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}] -21:["$","div",null,{"className":"dm-blog-contact-cta","children":[["$","div",null,{"className":"dm-blog-contact-cta-content","children":[["$","span",null,{"className":"dm-blog-contact-eyebrow","children":"Let's talk logistics"}],["$","h2",null,{"className":"dm-blog-contact-title","children":"Ready to move smarter with Doormile?"}],["$","p",null,{"className":"dm-blog-contact-sub","children":"Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding."}]]}],["$","$L8",null,{"href":"/contact","className":"dm-blog-contact-btn","children":["Get in Touch",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] diff --git a/build/blog/miletruth-ai-10-stages-to-smarter-dispatch/__next.blog.$d$slug.txt b/build/blog/miletruth-ai-10-stages-to-smarter-dispatch/__next.blog.$d$slug.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/blog/miletruth-ai-10-stages-to-smarter-dispatch/__next.blog.$d$slug.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/miletruth-ai-10-stages-to-smarter-dispatch/__next.blog.txt b/build/blog/miletruth-ai-10-stages-to-smarter-dispatch/__next.blog.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/blog/miletruth-ai-10-stages-to-smarter-dispatch/__next.blog.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets.html b/build/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets.html deleted file mode 100644 index ce7eb8e..0000000 --- a/build/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets.html +++ /dev/null @@ -1,1168 +0,0 @@ -The EV Paradox: Solving Range Anxiety for Urban Fleets – Doormile

    Doormile

    Doormile logo
    Address
    Hyderabad

    5th Floor, Vision Ultima,
    Street No.3, Jayabheri Enclave,
    Gachibowli, Hyderabad,
    Telangana 500032.

    Coimbatore

    Mayflower Valencia,
    Near Nava India Bus Stop,
    Avinashi Road,
    Udayampalayam,
    Tamil Nadu 641037.

    Bengaluru

    C612, 6th Floor,
    Trifecta Starlight,
    ITPL Road,
    Garudacharapalya,
    Mahadevapura,
    Bangalore 560048,
    Karnataka, India.

    Contact Us

    Tel : +91 86886 97941

    Email

    care@doormile.com

    EV Fleet

    The EV Paradox: Solving Range Anxiety for Urban Fleets

    Doormile Team2 min read

    Electric fleets can lower running costs, but range becomes a daily planning constraint. The route has to match the battery, the load, the traffic, and the return plan.

    In last-mile logistics, a missed SLA is rarely caused by one big failure. It usually comes from small delays adding up across a route. The EV Paradox: Solving Range Anxiety for Urban Fleets looks at how delivery teams can spot those delays early and plan around them before vehicles leave the hub.

    Why this matters for fleet teams

    Every extra kilometre costs money. It uses fuel or charge, adds rider time, wears down vehicles, and increases the chance of a late delivery. When routes are built from fixed zones or old habits, those costs repeat every day.

    • Fewer vehicles needed for the same number of drops
    • Lower cost per drop through better stop sequencing
    • ETAs that match traffic, distance, and delivery windows
    • Less fuel or charge used per completed order

    From orders to dispatch

    A good dispatch plan starts with the basics: order locations, promised delivery windows, rider capacity, vehicle range, and known traffic trouble spots. MileTruth™ checks those inputs before dispatch so the team is not fixing avoidable mistakes on the road.

    The EV Paradox: Solving Range Anxiety for Urban Fleets
    EV Fleet: route planning decisions made before dispatch.

    A route should be checked before the rider leaves, not explained after the customer calls.

    Doormile Operations

    Putting it into practice

    The best improvements usually start with simple measurements. Track distance per route, failed delivery windows, rider idle time, and orders moved between vehicles after dispatch. Those numbers show where the operation is leaking time.

    1. Benchmark today's distance, fleet size, and on-time rate.
    2. Include vehicle capacity, delivery windows, rider shifts, and battery charge.
    3. Check routes against traffic and customer commitments before dispatch.
    4. Compare the next dispatch cycle against the old plan.

    Better routing is not about pushing riders harder. It is about giving them a plan that already accounts for the real day ahead.

    \ No newline at end of file diff --git a/build/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets.txt b/build/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets.txt deleted file mode 100644 index 7d48a4a..0000000 --- a/build/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets.txt +++ /dev/null @@ -1,545 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -d:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -e:"$Sreact.suspense" -11:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -13:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -15:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","blog","the-ev-paradox-solving-range-anxiety-for-urban-fleets"],"q":"","i":false,"f":[[["",{"children":["blog",{"children":[["slug","the-ev-paradox-solving-range-anxiety-for-urban-fleets","d",null],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":["$Lc",[["$","script","script-0",{"src":"/_next/static/chunks/0yvxf3ok9gcp_.js","async":true,"nonce":"$undefined"}]],["$","$Ld",null,{"children":["$","$e",null,{"name":"Next.MetadataOutlet","children":"$@f"}]}]]}],{},null,false,null]},null,false,"$@10"]},null,false,"$@10"]},null,false,null],["$","$1","h",{"children":[null,["$","$L11",null,{"children":"$L12"}],["$","div",null,{"hidden":true,"children":["$","$L13",null,{"children":["$","$e",null,{"name":"Next.Metadata","children":"$L14"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$15",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -16:[] -10:"$W16" -:HL["/images/ev-paradox.webp","image"] -17:T3d6f, - .dm-single-blog { - --dm-red: #c01227; - --dm-red-hover: #e31d32; - --dm-radius-card: 22px; - --dm-radius-img: 20px; - --dm-radius-badge: 8px; - --dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05); - --dm-border: 1px solid rgba(15, 23, 42, 0.09); - --dm-space-p: 24px; - --dm-space-h: 32px; - --dm-space-img: 32px; - --dm-space-quote: 40px; - --dm-sticky-top: 138px; - --dm-measure: min(1100px, 100%); - font-family: var(--font-manrope), sans-serif; - } - - /* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6 - (120/80/60px UPPERCASE) rules with !important on our own classes. */ - .dm-single-blog :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline, - specificity 0-1-1) so blog links keep our colors and never get underlined. */ - .dm-single-blog a { text-decoration: none !important; } - - /* Page banner: tall homepage-scale frame with only badge + title inside */ - /* Compound selector (specificity 20) + !important beats the global 800px - single-class height rules so the blog banner can use viewport heights. */ - .custom-standard-hero-card.dm-banner-card { - height: 90vh !important; - min-height: 85vh !important; - } - @media (max-width: 1024px) { - .custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; } - } - @media (max-width: 600px) { - .custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; } - } - - .dm-banner-inner { - position: relative; width: 100%; height: 100%; - display: flex; flex-direction: column; align-items: center; justify-content: center; - text-align: center; gap: clamp(22px, 2.6vw, 34px); - padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px); - } - - .dm-banner-category { - display: inline-block; background: var(--dm-red); color: #fff; - font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px; - padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45); - } - .dm-banner-title { - font-family: var(--font-manrope), sans-serif !important; - font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important; - line-height: 1.16 !important; letter-spacing: -1.2px !important; - color: #ffffff !important; margin: 0; max-width: 820px; - text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38); - } - @media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } } - @media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } } - - /* Content wrap begins immediately below the banner */ - /* Shared content container: the SAME max-width + horizontal padding is used - by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings, - images, Prev/Next, Related Articles and the CTA banner all align to one - grid with identical left/right edges. Keep both in sync. */ - .dm-blog-wrap { - max-width: 1280px; margin: 0 auto; - /* 20px mobile padding floor → 40px on desktop; matches the footer container. */ - padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0; - } - @media (max-width: 767px) { - .dm-blog-wrap { - padding-left: 16px; - padding-right: 16px; - } - } - - /* ── Article meta bar (directly under the hero) ── */ - .dm-meta-bar { - display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px; - padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px); - border-bottom: 1px solid rgba(15,23,42,0.10); - } - .dm-meta-breadcrumb ol { - list-style: none; display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b; - } - .dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; } - .dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; } - .dm-meta-sep { color: #cbd5e1; } - .dm-meta-current { - color: #0f172a; font-weight: 700; - max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - } - @media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } } - .dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; } - .dm-meta-item { - display: inline-flex; align-items: center; gap: 7px; - font-size: 13.5px; font-weight: 600; color: #475569; - } - .dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; } - .dm-meta-author { color: #0f172a; font-weight: 700; } - @media (max-width: 600px) { .dm-meta-bar { gap: 12px; } } - .dm-blog-layout { - display: grid; grid-template-columns: minmax(0,1fr) 320px; - /* Tighter gap gives the reading column more room next to the 320px sidebar. */ - gap: clamp(28px, 3vw, 56px); align-items: start; - } - @media (max-width: 1024px) { - .dm-blog-layout { grid-template-columns: 1fr; gap: 48px; } - /* Single-column (tablet/mobile): cap the reading column and centre it so the - article never sits left-aligned with a large empty right gutter. */ - .dm-blog-main { max-width: 900px; margin-inline: auto; } - } - .dm-blog-main { min-width: 0; } - - /* ── Intro lead ── */ - .dm-blog-intro { - max-width: var(--dm-measure); - font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500; - color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px; - border-left: 3px solid var(--dm-red); - } - - /* ── Article body ── */ - .dm-article-body { max-width: var(--dm-measure); } - .dm-article-p { - font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450; - margin: 0 0 var(--dm-space-p); - } - .dm-article-h2 { - font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important; - color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h); - text-wrap: balance; - } - /* Each article block is wrapped in its OWN ScrollReveal
    , so a bare - :first-child rule matched every heading (each is the only child of its - wrapper) and zeroed its top margin, collapsing the gap above every - section heading. Scope the reset to only the article body's first block. */ - .dm-article-body > :first-child :where(.dm-article-h2, .dm-article-h3), - .dm-article-body > .dm-article-h2:first-child, - .dm-article-body > .dm-article-h3:first-child { margin-top: 0; } - .dm-article-h3 { - font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important; - color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px; - text-wrap: balance; - } - @media (max-width: 600px) { - .dm-article-p { font-size: 16px !important; } - .dm-article-ul li, .dm-article-ol li { font-size: 15.5px; } - .dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; } - .dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; } - } - - .dm-article-ul, .dm-article-ol { - /* Top margin (was 0) separates the list from the paragraph above it; - matching bottom margin keeps it clear of the next heading/paragraph. - Slightly larger than --dm-space-p so the list reads as its own block. */ - margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px); - padding-left: 2px; list-style: none; - display: flex; flex-direction: column; gap: 15px; - } - /* Prefixed with .dm-article-body so these beat the theme's global - ".logico-front-end ul li:before" fontello-glyph bullet (specificity 0,1,3), - which otherwise replaces our clean red dot with a misaligned checkmark glyph - and adds its own 1.7em indent. */ - .dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li { - position: relative; padding-left: 34px; - font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450; - } - .dm-article-body .dm-article-ul li::before { - content: ""; position: absolute; left: 7px; top: 10px; - width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red); - /* kill any inherited fontello glyph from the global rule */ - font-size: 0; line-height: 0; - } - .dm-article-ol { counter-reset: dm-li; } - .dm-article-body .dm-article-ol li { counter-increment: dm-li; } - .dm-article-body .dm-article-ol li::before { - content: counter(dm-li); position: absolute; left: 0; top: 0; - width: 24px; height: 24px; border-radius: 7px; - background: rgba(192,18,39,0.10); color: var(--dm-red); - font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; - } - - /* ── Quote ── */ - .dm-article-quote { - position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px; - background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%); - border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0; - box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06); - } - .dm-article-quote::before { - content: "\201C"; position: absolute; left: 22px; top: 8px; - font-family: Georgia, "Times New Roman", serif; - font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700; - } - .dm-article-quote p { - font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600; - font-style: italic; color: #1e293b; margin: 0; - } - .dm-article-quote cite { - display: block; margin-top: 16px; font-size: 13px; font-weight: 700; - font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px; - } - @media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } } - - /* ── Images ── */ - .dm-article-figure { margin: var(--dm-space-img) 0; } - .dm-article-figure-img { - position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; - border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10); - } - .dm-article-figure figcaption { - margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500; - text-align: center; font-style: italic; - } - - /* ── Sidebar ── */ - .dm-blog-aside-wrap { position: relative; } - .dm-blog-sidebar { - display: flex; flex-direction: column; gap: 18px; - position: sticky; top: var(--dm-sticky-top); - } - @media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } } - - .dm-blog-widget { - background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card); - padding: 20px; box-shadow: var(--dm-shadow-card); - } - .dm-blog-widget-title { - font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important; - letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important; - margin: 0 0 15px; padding: 0 0 12px; - border-bottom: 1px solid rgba(15,23,42,0.08); - overflow: visible; white-space: normal; word-break: normal; - } - - /* Search */ - .dm-sr-only { - position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; - overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; - } - .dm-blog-search { position: relative; } - .dm-blog-search-form { position: relative; } - .dm-blog-search-input { - width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px; - padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a; - background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; - } - .dm-blog-search-input::placeholder { color: #9c9c9c; } - .dm-blog-search-input:focus { - outline: none; border-color: var(--dm-red); background: #fff; - box-shadow: 0 0 0 3px rgba(192,18,39,0.11); - } - .dm-blog-search-icon { - position: absolute; right: 14px; top: 50%; transform: translateY(-50%); - color: #94a3b8; pointer-events: none; display: flex; - } - .dm-blog-search-results { - position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0; - background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px; - box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden; - } - .dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; } - .dm-blog-search-result { - display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; - border-radius: 10px; text-decoration: none; transition: background .15s ease; - } - .dm-blog-search-result:hover { background: #f8fafc; } - .dm-blog-search-result-cat { - font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red); - } - .dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; } - .dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; } - - /* Recent posts */ - .dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; } - .dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; } - .dm-blog-recent-thumb { - position: relative; flex: 0 0 62px; width: 62px; height: 62px; - border-radius: 13px; overflow: hidden; background: #f1f5f9; - } - .dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; } - .dm-blog-recent-title { - font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); } - .dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; } - - /* Categories */ - .dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; } - .dm-blog-category-item { - display: flex; align-items: center; justify-content: space-between; gap: 10px; - padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important; - border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease; - } - .dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; } - .dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; } - .dm-blog-category-item > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .dm-blog-category-count { - flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9; - min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex; - align-items: center; justify-content: center; padding: 0 7px; - } - - /* CTA card */ - .dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; } - .dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; } - .dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; } - .dm-blog-cta-btn { - display: inline-flex; align-items: center; gap: 8px; - background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700; - padding: 12px 22px; border-radius: 12px; text-decoration: none; - transition: background .2s ease, transform .2s ease; - } - .dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } -c:["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"headline\":\"The EV Paradox: Solving Range Anxiety for Urban Fleets\",\"description\":\"Electric vehicles lower running costs, but battery range changes how routes must be planned before dispatch.\",\"image\":[\"https://www.doormile.com/images/ev-paradox.webp\"],\"datePublished\":\"2025-08-21T00:00:00.000Z\",\"dateModified\":\"2025-08-21T00:00:00.000Z\",\"author\":{\"@type\":\"Organization\",\"name\":\"Doormile Team\",\"url\":\"https://www.doormile.com\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Doormile\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.doormile.com/images/cropped-image-2.png\"}},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.doormile.com/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets\"},\"articleSection\":\"EV Fleet\"}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://www.doormile.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https://www.doormile.com/blog\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"The EV Paradox: Solving Range Anxiety for Urban Fleets\",\"item\":\"https://www.doormile.com/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets\"}]}"}}],["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":[["$","article",null,{"className":"dm-single-blog","children":[["$","link",null,{"rel":"preload","as":"image","href":"/images/ev-paradox.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$17"}}],"$L18","$L19"]}],"$L1a"]}]}]]}] -1b:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],""] -1c:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"ScrollReveal"] -18:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card dm-banner-card","style":{"backgroundImage":"url(/images/ev-paradox.webp)","--hero-overlay":"linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)"},"children":["$","div",null,{"className":"e-con-inner dm-banner-inner","children":[["$","span",null,{"className":"dm-banner-category","children":"EV Fleet"}],["$","h1",null,{"className":"dm-banner-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}]]}]}]}] -19:["$","div",null,{"className":"dm-blog-wrap","children":[["$","div",null,{"className":"dm-meta-bar","children":[["$","nav",null,{"className":"dm-meta-breadcrumb","aria-label":"Breadcrumb","children":["$","ol",null,{"children":[["$","li",null,{"children":["$","$L1b",null,{"href":"/","children":"Home"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"children":["$","$L1b",null,{"href":"/blog","children":"Blog"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"aria-current":"page","className":"dm-meta-current","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}]]}]}],["$","div",null,{"className":"dm-meta-items","children":[["$","span",null,{"className":"dm-meta-item dm-meta-author","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","path",null,{"d":"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}],["$","circle",null,{"cx":"12","cy":"7","r":"4"}]]}],"Doormile Team"]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"2"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}]]}],["$","time",null,{"dateTime":"2025-08-21","children":"Aug 21, 2025"}]]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","circle",null,{"cx":"12","cy":"12","r":"9"}],["$","polyline",null,{"points":"12 7 12 12 15 14"}]]}],2," min read"]}]]}]]}],["$","div",null,{"className":"dm-blog-layout","children":[["$","div",null,{"className":"dm-blog-main","children":[["$","p",null,{"className":"dm-blog-intro","children":"Electric fleets can lower running costs, but range becomes a daily planning constraint. The route has to match the battery, the load, the traffic, and the return plan."}],["$","div",null,{"className":"dm-article-body","children":[["$","$L1c","0",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"In last-mile logistics, a missed SLA is rarely caused by one big failure. It usually comes from small delays adding up across a route. The EV Paradox: Solving Range Anxiety for Urban Fleets looks at how delivery teams can spot those delays early and plan around them before vehicles leave the hub."}]}],["$","$L1c","1",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Why this matters for fleet teams"}]}],["$","$L1c","2",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Every extra kilometre costs money. It uses fuel or charge, adds rider time, wears down vehicles, and increases the chance of a late delivery. When routes are built from fixed zones or old habits, those costs repeat every day."}]}],["$","$L1c","3",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"Fewer vehicles needed for the same number of drops"}],["$","li","1",{"children":"Lower cost per drop through better stop sequencing"}],["$","li","2",{"children":"ETAs that match traffic, distance, and delivery windows"}],["$","li","3",{"children":"Less fuel or charge used per completed order"}]]}]}],["$","$L1c","4",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"From orders to dispatch"}]}],["$","$L1c","5",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"A good dispatch plan starts with the basics: order locations, promised delivery windows, rider capacity, vehicle range, and known traffic trouble spots. MileTruth™ checks those inputs before dispatch so the team is not fixing avoidable mistakes on the road."}]}],["$","$L1c","6",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","figure",null,{"className":"dm-article-figure","children":["$L1d","$L1e"]}]}],"$L1f","$L20","$L21","$L22","$L23"]}]]}],"$L24"]}]]}] -25:T2021, - .dm-blog-footer { - font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32; - /* The global theme applies 72px top/bottom section padding — strip it so the - inner container is the single source of vertical rhythm (no double gap). */ - padding: 0 !important; - } - /* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */ - .dm-blog-footer :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline) */ - .dm-blog-footer a { text-decoration: none !important; } - /* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px - max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA - align to the exact same left/right edges as the article body above. - Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a - consistent ~64–72px section→section gap (no 120px+ voids). */ - .dm-blog-footer-inner { - max-width: 1280px; margin: 0 auto; - /* Compact vertical rhythm on an 8px system. Top padding sets the - article→Prev/Next gap (~24–32px); the inter-section gap sets the - Prev/Next→Related gap (~32–48px). No large arbitrary voids. */ - /* Minimal bottom padding — the global site footer already contributes its - own 20px top inset, so the CTA banner sits close to it without a void. */ - padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px); - display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px); - } - @media (max-width: 767px) { - .dm-blog-footer-inner { - padding-left: 16px; - padding-right: 16px; - } - } - - /* Prev / Next */ - .dm-prevnext { - display: grid; grid-template-columns: 1fr 1fr; gap: 20px; - /* Halved from 40px: tight divider→cards spacing without crowding. */ - padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08); - } - @media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } } - .dm-prevnext-placeholder { display: block; } - .dm-prevnext-card { - display: flex; gap: 16px; align-items: center; padding: 16px; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; - } - .dm-prevnext-card:hover { - transform: translateY(-4px); border-color: rgba(192,18,39,0.2); - box-shadow: 0 16px 34px rgba(192,18,39,0.10); - } - .dm-prevnext-thumb { - position: relative; flex: 0 0 80px; width: 80px; height: 80px; - border-radius: 16px; overflow: hidden; background: #f1f5f9; - } - .dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; } - .dm-prevnext-next { text-align: right; } - .dm-prevnext-next .dm-prevnext-text { align-items: flex-end; } - .dm-prevnext-label { - display: inline-flex; align-items: center; gap: 6px; - font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red); - } - .dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; } - .dm-prevnext-title { - font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); } - - /* Related */ - .dm-related-heading { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important; - line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px; - } - .dm-related-grid { - display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; - } - @media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } } - @media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } } - - .dm-related-card { - display: flex; flex-direction: column; height: 100%; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none; - transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease; - } - .dm-related-card:hover { - transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13); - border-color: rgba(192,18,39,0.2); - } - .dm-related-img { - position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9; - } - .dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-img img { transform: scale(1.05); } - .dm-related-badge { - position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff; - font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px; - padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25); - } - .dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; } - .dm-related-card-title { - font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important; - letter-spacing: -.2px !important; margin: 0 0 10px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-related-card:hover .dm-related-card-title { color: var(--dm-red); } - .dm-related-card-excerpt { - font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - } - .dm-related-readmore { - margin-top: auto; display: inline-flex; align-items: center; gap: 7px; - font-size: 12.5px; font-weight: 800; color: var(--dm-red); - text-transform: uppercase; letter-spacing: .6px; - } - .dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); } - - /* Contact CTA banner */ - .dm-blog-contact-cta { - display: flex; align-items: center; justify-content: space-between; gap: 32px; - flex-wrap: wrap; - background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%); - border-radius: 30px; padding: clamp(32px, 4vw, 56px); - position: relative; overflow: hidden; - } - .dm-blog-contact-cta::after { - content: ""; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px; - background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%); - pointer-events: none; - } - .dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; } - .dm-blog-contact-eyebrow { - display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase; - letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px; - } - .dm-blog-contact-title { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important; - letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance; - } - .dm-blog-contact-sub { - font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450; - } - .dm-blog-contact-btn { - position: relative; z-index: 1; flex-shrink: 0; - display: inline-flex; align-items: center; justify-content: center; gap: 10px; - background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700; - padding: 16px 32px; border-radius: 16px; text-decoration: none; - box-shadow: 0 10px 26px rgba(192,18,39,0.34); - transition: background .2s ease, transform .2s ease; - } - .dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } - @media (max-width: 720px) { - .dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; } - .dm-blog-contact-btn { width: 100%; } - } -1a:["$","section",null,{"className":"dm-blog-footer","aria-label":"More articles","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$25"}}],"$L26"]}] -27:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"Image"] -28:I[23096,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"default"] -1d:["$","span",null,{"className":"dm-article-figure-img","children":["$","$L27",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"(max-width: 768px) 100vw, 760px","style":{"objectFit":"cover"}}]}] -1e:["$","figcaption",null,{"children":"EV Fleet: route planning decisions made before dispatch."}] -1f:["$","$L1c","7",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","blockquote",null,{"className":"dm-article-quote","children":[["$","p",null,{"children":"A route should be checked before the rider leaves, not explained after the customer calls."}],["$","cite",null,{"children":"Doormile Operations"}]]}]}] -20:["$","$L1c","8",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Putting it into practice"}]}] -21:["$","$L1c","9",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The best improvements usually start with simple measurements. Track distance per route, failed delivery windows, rider idle time, and orders moved between vehicles after dispatch. Those numbers show where the operation is leaking time."}]}] -22:["$","$L1c","10",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ol",null,{"className":"dm-article-ol","children":[["$","li","0",{"children":"Benchmark today's distance, fleet size, and on-time rate."}],["$","li","1",{"children":"Include vehicle capacity, delivery windows, rider shifts, and battery charge."}],["$","li","2",{"children":"Check routes against traffic and customer commitments before dispatch."}],["$","li","3",{"children":"Compare the next dispatch cycle against the old plan."}]]}]}] -23:["$","$L1c","11",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Better routing is not about pushing riders harder. It is about giving them a plan that already accounts for the real day ahead."}]}] -24:["$","div",null,{"className":"dm-blog-aside-wrap","children":["$","aside",null,{"className":"dm-blog-sidebar","aria-label":"Blog sidebar","children":[["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Search"}],["$","$L28",null,{}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Recent Posts"}],["$","ul",null,{"className":"dm-blog-recent","children":[["$","li","how-ai-is-transforming-last-mile-ev-delivery",{"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","time",null,{"dateTime":"2025-10-02","className":"dm-blog-recent-date","children":"Oct 2, 2025"}]]}]]}]}],["$","li","42-less-distance-insights-from-our-hyderabad-hub",{"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","time",null,{"dateTime":"2025-09-18","className":"dm-blog-recent-date","children":"Sep 18, 2025"}]]}]]}]}],["$","li","miletruth-ai-10-stages-to-smarter-dispatch",{"children":["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","time",null,{"dateTime":"2025-09-05","className":"dm-blog-recent-date","children":"Sep 5, 2025"}]]}]]}]}],["$","li","why-mathematical-precision-beats-heuristics-in-routing",{"children":["$","$L1b",null,{"href":"/blog/why-mathematical-precision-beats-heuristics-in-routing","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-14.webp","alt":"Why Mathematical Precision Beats Heuristics in Routing","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"Why Mathematical Precision Beats Heuristics in Routing"}],["$","time",null,{"dateTime":"2025-08-07","className":"dm-blog-recent-date","children":"Aug 7, 2025"}]]}]]}]}]]}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Categories"}],["$","ul",null,{"className":"dm-blog-categories","children":[["$","li","Case Study",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Case Study"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","EV Fleet",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"EV Fleet"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}],["$","li","Fleet Management",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Fleet Management"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","MileTruth",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"MileTruth"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],"$L29","$L2a","$L2b"]}]]}],"$L2c"]}]}] -26:["$","div",null,{"className":"dm-blog-footer-inner","children":[["$","nav",null,{"className":"dm-prevnext","aria-label":"Article navigation","children":[["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-prevnext-card dm-prevnext-prev","children":[["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"19","y1":"12","x2":"5","y2":"12"}],["$","polyline",null,{"points":"12 19 5 12 12 5"}]]}],"Previous"]}],["$","span",null,{"className":"dm-prevnext-cat","children":"MileTruth"}],["$","span",null,{"className":"dm-prevnext-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}]]}]]}],["$","$L1b",null,{"href":"/blog/why-mathematical-precision-beats-heuristics-in-routing","className":"dm-prevnext-card dm-prevnext-next","children":[["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":["Next",["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Technology"}],["$","span",null,{"className":"dm-prevnext-title","children":"Why Mathematical Precision Beats Heuristics in Routing"}]]}],["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-14.webp","alt":"Why Mathematical Precision Beats Heuristics in Routing","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}]]}]]}],["$","div",null,{"className":"dm-related","children":[["$","h2",null,{"className":"dm-related-heading","children":"Related Articles"}],["$","div",null,{"className":"dm-related-grid","children":[["$","$L1c","battery-simulation-the-secret-to-ev-route-pre-validation",{"delay":0,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/battery-simulation-the-secret-to-ev-route-pre-validation","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-3.webp","alt":"Battery Simulation: The Secret to EV Route Pre-Validation","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"EV Fleet"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"Battery Simulation: The Secret to EV Route Pre-Validation"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"Before a rider leaves the hub, every EV route should be checked against real charge capacity and the expected return plan."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L1c","how-ai-is-transforming-last-mile-ev-delivery",{"delay":0.08,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Technology"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],"$L2d","$L2e"]}]]}]}],"$L2f"]}]]}],"$L30"]}] -29:["$","li","Operations",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Operations"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2a:["$","li","Sustainability",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Sustainability"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2b:["$","li","Technology",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Technology"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}] -2c:["$","section",null,{"className":"dm-blog-widget dm-blog-cta-card","children":[["$","h2",null,{"className":"dm-blog-cta-title","children":"Planning delivery routes?"}],["$","p",null,{"className":"dm-blog-cta-text","children":"Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time."}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-cta-btn","children":["Contact Us",["$","svg",null,{"width":"18","height":"18","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -2d:["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}] -2e:["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}] -2f:["$","$L1c","42-less-distance-insights-from-our-hyderabad-hub",{"delay":0.16,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Case Study"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}] -30:["$","div",null,{"className":"dm-blog-contact-cta","children":[["$","div",null,{"className":"dm-blog-contact-cta-content","children":[["$","span",null,{"className":"dm-blog-contact-eyebrow","children":"Let's talk logistics"}],["$","h2",null,{"className":"dm-blog-contact-title","children":"Ready to move smarter with Doormile?"}],["$","p",null,{"className":"dm-blog-contact-sub","children":"Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding."}]]}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-contact-btn","children":["Get in Touch",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -12:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -31:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -f:null -14:[["$","title","0",{"children":"The EV Paradox: Solving Range Anxiety for Urban Fleets – Doormile"}],["$","meta","1",{"name":"description","content":"Electric vehicles lower running costs, but battery range changes how routes must be planned before dispatch."}],["$","meta","2",{"name":"author","content":"Doormile Team"}],["$","meta","3",{"name":"keywords","content":"EV Fleet,last-mile logistics,EV fleet,MileTruth,route optimisation"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","link","5",{"rel":"canonical","href":"https://www.doormile.com/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets"}],["$","meta","6",{"property":"og:title","content":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","meta","7",{"property":"og:description","content":"Electric vehicles lower running costs, but battery range changes how routes must be planned before dispatch."}],["$","meta","8",{"property":"og:url","content":"https://www.doormile.com/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets"}],["$","meta","9",{"property":"og:site_name","content":"Doormile"}],["$","meta","10",{"property":"og:image","content":"https://www.doormile.com/images/ev-paradox.webp"}],["$","meta","11",{"property":"og:image:alt","content":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","meta","12",{"property":"og:type","content":"article"}],["$","meta","13",{"property":"article:published_time","content":"2025-08-21T00:00:00.000Z"}],["$","meta","14",{"property":"article:author","content":"Doormile Team"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","meta","17",{"name":"twitter:description","content":"Electric vehicles lower running costs, but battery range changes how routes must be planned before dispatch."}],["$","meta","18",{"name":"twitter:image","content":"https://www.doormile.com/images/ev-paradox.webp"}],["$","link","19",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","21",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","22",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L31","23",{}]] diff --git a/build/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets/__next._full.txt b/build/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets/__next._full.txt deleted file mode 100644 index 7d48a4a..0000000 --- a/build/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets/__next._full.txt +++ /dev/null @@ -1,545 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -d:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -e:"$Sreact.suspense" -11:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -13:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -15:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","blog","the-ev-paradox-solving-range-anxiety-for-urban-fleets"],"q":"","i":false,"f":[[["",{"children":["blog",{"children":[["slug","the-ev-paradox-solving-range-anxiety-for-urban-fleets","d",null],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":["$Lc",[["$","script","script-0",{"src":"/_next/static/chunks/0yvxf3ok9gcp_.js","async":true,"nonce":"$undefined"}]],["$","$Ld",null,{"children":["$","$e",null,{"name":"Next.MetadataOutlet","children":"$@f"}]}]]}],{},null,false,null]},null,false,"$@10"]},null,false,"$@10"]},null,false,null],["$","$1","h",{"children":[null,["$","$L11",null,{"children":"$L12"}],["$","div",null,{"hidden":true,"children":["$","$L13",null,{"children":["$","$e",null,{"name":"Next.Metadata","children":"$L14"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$15",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -16:[] -10:"$W16" -:HL["/images/ev-paradox.webp","image"] -17:T3d6f, - .dm-single-blog { - --dm-red: #c01227; - --dm-red-hover: #e31d32; - --dm-radius-card: 22px; - --dm-radius-img: 20px; - --dm-radius-badge: 8px; - --dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05); - --dm-border: 1px solid rgba(15, 23, 42, 0.09); - --dm-space-p: 24px; - --dm-space-h: 32px; - --dm-space-img: 32px; - --dm-space-quote: 40px; - --dm-sticky-top: 138px; - --dm-measure: min(1100px, 100%); - font-family: var(--font-manrope), sans-serif; - } - - /* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6 - (120/80/60px UPPERCASE) rules with !important on our own classes. */ - .dm-single-blog :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline, - specificity 0-1-1) so blog links keep our colors and never get underlined. */ - .dm-single-blog a { text-decoration: none !important; } - - /* Page banner: tall homepage-scale frame with only badge + title inside */ - /* Compound selector (specificity 20) + !important beats the global 800px - single-class height rules so the blog banner can use viewport heights. */ - .custom-standard-hero-card.dm-banner-card { - height: 90vh !important; - min-height: 85vh !important; - } - @media (max-width: 1024px) { - .custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; } - } - @media (max-width: 600px) { - .custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; } - } - - .dm-banner-inner { - position: relative; width: 100%; height: 100%; - display: flex; flex-direction: column; align-items: center; justify-content: center; - text-align: center; gap: clamp(22px, 2.6vw, 34px); - padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px); - } - - .dm-banner-category { - display: inline-block; background: var(--dm-red); color: #fff; - font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px; - padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45); - } - .dm-banner-title { - font-family: var(--font-manrope), sans-serif !important; - font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important; - line-height: 1.16 !important; letter-spacing: -1.2px !important; - color: #ffffff !important; margin: 0; max-width: 820px; - text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38); - } - @media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } } - @media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } } - - /* Content wrap begins immediately below the banner */ - /* Shared content container: the SAME max-width + horizontal padding is used - by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings, - images, Prev/Next, Related Articles and the CTA banner all align to one - grid with identical left/right edges. Keep both in sync. */ - .dm-blog-wrap { - max-width: 1280px; margin: 0 auto; - /* 20px mobile padding floor → 40px on desktop; matches the footer container. */ - padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0; - } - @media (max-width: 767px) { - .dm-blog-wrap { - padding-left: 16px; - padding-right: 16px; - } - } - - /* ── Article meta bar (directly under the hero) ── */ - .dm-meta-bar { - display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px; - padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px); - border-bottom: 1px solid rgba(15,23,42,0.10); - } - .dm-meta-breadcrumb ol { - list-style: none; display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b; - } - .dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; } - .dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; } - .dm-meta-sep { color: #cbd5e1; } - .dm-meta-current { - color: #0f172a; font-weight: 700; - max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - } - @media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } } - .dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; } - .dm-meta-item { - display: inline-flex; align-items: center; gap: 7px; - font-size: 13.5px; font-weight: 600; color: #475569; - } - .dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; } - .dm-meta-author { color: #0f172a; font-weight: 700; } - @media (max-width: 600px) { .dm-meta-bar { gap: 12px; } } - .dm-blog-layout { - display: grid; grid-template-columns: minmax(0,1fr) 320px; - /* Tighter gap gives the reading column more room next to the 320px sidebar. */ - gap: clamp(28px, 3vw, 56px); align-items: start; - } - @media (max-width: 1024px) { - .dm-blog-layout { grid-template-columns: 1fr; gap: 48px; } - /* Single-column (tablet/mobile): cap the reading column and centre it so the - article never sits left-aligned with a large empty right gutter. */ - .dm-blog-main { max-width: 900px; margin-inline: auto; } - } - .dm-blog-main { min-width: 0; } - - /* ── Intro lead ── */ - .dm-blog-intro { - max-width: var(--dm-measure); - font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500; - color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px; - border-left: 3px solid var(--dm-red); - } - - /* ── Article body ── */ - .dm-article-body { max-width: var(--dm-measure); } - .dm-article-p { - font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450; - margin: 0 0 var(--dm-space-p); - } - .dm-article-h2 { - font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important; - color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h); - text-wrap: balance; - } - /* Each article block is wrapped in its OWN ScrollReveal
    , so a bare - :first-child rule matched every heading (each is the only child of its - wrapper) and zeroed its top margin, collapsing the gap above every - section heading. Scope the reset to only the article body's first block. */ - .dm-article-body > :first-child :where(.dm-article-h2, .dm-article-h3), - .dm-article-body > .dm-article-h2:first-child, - .dm-article-body > .dm-article-h3:first-child { margin-top: 0; } - .dm-article-h3 { - font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important; - color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px; - text-wrap: balance; - } - @media (max-width: 600px) { - .dm-article-p { font-size: 16px !important; } - .dm-article-ul li, .dm-article-ol li { font-size: 15.5px; } - .dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; } - .dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; } - } - - .dm-article-ul, .dm-article-ol { - /* Top margin (was 0) separates the list from the paragraph above it; - matching bottom margin keeps it clear of the next heading/paragraph. - Slightly larger than --dm-space-p so the list reads as its own block. */ - margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px); - padding-left: 2px; list-style: none; - display: flex; flex-direction: column; gap: 15px; - } - /* Prefixed with .dm-article-body so these beat the theme's global - ".logico-front-end ul li:before" fontello-glyph bullet (specificity 0,1,3), - which otherwise replaces our clean red dot with a misaligned checkmark glyph - and adds its own 1.7em indent. */ - .dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li { - position: relative; padding-left: 34px; - font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450; - } - .dm-article-body .dm-article-ul li::before { - content: ""; position: absolute; left: 7px; top: 10px; - width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red); - /* kill any inherited fontello glyph from the global rule */ - font-size: 0; line-height: 0; - } - .dm-article-ol { counter-reset: dm-li; } - .dm-article-body .dm-article-ol li { counter-increment: dm-li; } - .dm-article-body .dm-article-ol li::before { - content: counter(dm-li); position: absolute; left: 0; top: 0; - width: 24px; height: 24px; border-radius: 7px; - background: rgba(192,18,39,0.10); color: var(--dm-red); - font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; - } - - /* ── Quote ── */ - .dm-article-quote { - position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px; - background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%); - border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0; - box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06); - } - .dm-article-quote::before { - content: "\201C"; position: absolute; left: 22px; top: 8px; - font-family: Georgia, "Times New Roman", serif; - font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700; - } - .dm-article-quote p { - font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600; - font-style: italic; color: #1e293b; margin: 0; - } - .dm-article-quote cite { - display: block; margin-top: 16px; font-size: 13px; font-weight: 700; - font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px; - } - @media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } } - - /* ── Images ── */ - .dm-article-figure { margin: var(--dm-space-img) 0; } - .dm-article-figure-img { - position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; - border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10); - } - .dm-article-figure figcaption { - margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500; - text-align: center; font-style: italic; - } - - /* ── Sidebar ── */ - .dm-blog-aside-wrap { position: relative; } - .dm-blog-sidebar { - display: flex; flex-direction: column; gap: 18px; - position: sticky; top: var(--dm-sticky-top); - } - @media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } } - - .dm-blog-widget { - background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card); - padding: 20px; box-shadow: var(--dm-shadow-card); - } - .dm-blog-widget-title { - font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important; - letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important; - margin: 0 0 15px; padding: 0 0 12px; - border-bottom: 1px solid rgba(15,23,42,0.08); - overflow: visible; white-space: normal; word-break: normal; - } - - /* Search */ - .dm-sr-only { - position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; - overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; - } - .dm-blog-search { position: relative; } - .dm-blog-search-form { position: relative; } - .dm-blog-search-input { - width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px; - padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a; - background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; - } - .dm-blog-search-input::placeholder { color: #9c9c9c; } - .dm-blog-search-input:focus { - outline: none; border-color: var(--dm-red); background: #fff; - box-shadow: 0 0 0 3px rgba(192,18,39,0.11); - } - .dm-blog-search-icon { - position: absolute; right: 14px; top: 50%; transform: translateY(-50%); - color: #94a3b8; pointer-events: none; display: flex; - } - .dm-blog-search-results { - position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0; - background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px; - box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden; - } - .dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; } - .dm-blog-search-result { - display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; - border-radius: 10px; text-decoration: none; transition: background .15s ease; - } - .dm-blog-search-result:hover { background: #f8fafc; } - .dm-blog-search-result-cat { - font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red); - } - .dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; } - .dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; } - - /* Recent posts */ - .dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; } - .dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; } - .dm-blog-recent-thumb { - position: relative; flex: 0 0 62px; width: 62px; height: 62px; - border-radius: 13px; overflow: hidden; background: #f1f5f9; - } - .dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; } - .dm-blog-recent-title { - font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); } - .dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; } - - /* Categories */ - .dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; } - .dm-blog-category-item { - display: flex; align-items: center; justify-content: space-between; gap: 10px; - padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important; - border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease; - } - .dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; } - .dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; } - .dm-blog-category-item > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .dm-blog-category-count { - flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9; - min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex; - align-items: center; justify-content: center; padding: 0 7px; - } - - /* CTA card */ - .dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; } - .dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; } - .dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; } - .dm-blog-cta-btn { - display: inline-flex; align-items: center; gap: 8px; - background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700; - padding: 12px 22px; border-radius: 12px; text-decoration: none; - transition: background .2s ease, transform .2s ease; - } - .dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } -c:["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"headline\":\"The EV Paradox: Solving Range Anxiety for Urban Fleets\",\"description\":\"Electric vehicles lower running costs, but battery range changes how routes must be planned before dispatch.\",\"image\":[\"https://www.doormile.com/images/ev-paradox.webp\"],\"datePublished\":\"2025-08-21T00:00:00.000Z\",\"dateModified\":\"2025-08-21T00:00:00.000Z\",\"author\":{\"@type\":\"Organization\",\"name\":\"Doormile Team\",\"url\":\"https://www.doormile.com\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Doormile\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.doormile.com/images/cropped-image-2.png\"}},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.doormile.com/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets\"},\"articleSection\":\"EV Fleet\"}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://www.doormile.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https://www.doormile.com/blog\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"The EV Paradox: Solving Range Anxiety for Urban Fleets\",\"item\":\"https://www.doormile.com/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets\"}]}"}}],["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":[["$","article",null,{"className":"dm-single-blog","children":[["$","link",null,{"rel":"preload","as":"image","href":"/images/ev-paradox.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$17"}}],"$L18","$L19"]}],"$L1a"]}]}]]}] -1b:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],""] -1c:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"ScrollReveal"] -18:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card dm-banner-card","style":{"backgroundImage":"url(/images/ev-paradox.webp)","--hero-overlay":"linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)"},"children":["$","div",null,{"className":"e-con-inner dm-banner-inner","children":[["$","span",null,{"className":"dm-banner-category","children":"EV Fleet"}],["$","h1",null,{"className":"dm-banner-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}]]}]}]}] -19:["$","div",null,{"className":"dm-blog-wrap","children":[["$","div",null,{"className":"dm-meta-bar","children":[["$","nav",null,{"className":"dm-meta-breadcrumb","aria-label":"Breadcrumb","children":["$","ol",null,{"children":[["$","li",null,{"children":["$","$L1b",null,{"href":"/","children":"Home"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"children":["$","$L1b",null,{"href":"/blog","children":"Blog"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"aria-current":"page","className":"dm-meta-current","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}]]}]}],["$","div",null,{"className":"dm-meta-items","children":[["$","span",null,{"className":"dm-meta-item dm-meta-author","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","path",null,{"d":"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}],["$","circle",null,{"cx":"12","cy":"7","r":"4"}]]}],"Doormile Team"]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"2"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}]]}],["$","time",null,{"dateTime":"2025-08-21","children":"Aug 21, 2025"}]]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","circle",null,{"cx":"12","cy":"12","r":"9"}],["$","polyline",null,{"points":"12 7 12 12 15 14"}]]}],2," min read"]}]]}]]}],["$","div",null,{"className":"dm-blog-layout","children":[["$","div",null,{"className":"dm-blog-main","children":[["$","p",null,{"className":"dm-blog-intro","children":"Electric fleets can lower running costs, but range becomes a daily planning constraint. The route has to match the battery, the load, the traffic, and the return plan."}],["$","div",null,{"className":"dm-article-body","children":[["$","$L1c","0",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"In last-mile logistics, a missed SLA is rarely caused by one big failure. It usually comes from small delays adding up across a route. The EV Paradox: Solving Range Anxiety for Urban Fleets looks at how delivery teams can spot those delays early and plan around them before vehicles leave the hub."}]}],["$","$L1c","1",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Why this matters for fleet teams"}]}],["$","$L1c","2",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Every extra kilometre costs money. It uses fuel or charge, adds rider time, wears down vehicles, and increases the chance of a late delivery. When routes are built from fixed zones or old habits, those costs repeat every day."}]}],["$","$L1c","3",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"Fewer vehicles needed for the same number of drops"}],["$","li","1",{"children":"Lower cost per drop through better stop sequencing"}],["$","li","2",{"children":"ETAs that match traffic, distance, and delivery windows"}],["$","li","3",{"children":"Less fuel or charge used per completed order"}]]}]}],["$","$L1c","4",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"From orders to dispatch"}]}],["$","$L1c","5",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"A good dispatch plan starts with the basics: order locations, promised delivery windows, rider capacity, vehicle range, and known traffic trouble spots. MileTruth™ checks those inputs before dispatch so the team is not fixing avoidable mistakes on the road."}]}],["$","$L1c","6",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","figure",null,{"className":"dm-article-figure","children":["$L1d","$L1e"]}]}],"$L1f","$L20","$L21","$L22","$L23"]}]]}],"$L24"]}]]}] -25:T2021, - .dm-blog-footer { - font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32; - /* The global theme applies 72px top/bottom section padding — strip it so the - inner container is the single source of vertical rhythm (no double gap). */ - padding: 0 !important; - } - /* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */ - .dm-blog-footer :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline) */ - .dm-blog-footer a { text-decoration: none !important; } - /* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px - max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA - align to the exact same left/right edges as the article body above. - Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a - consistent ~64–72px section→section gap (no 120px+ voids). */ - .dm-blog-footer-inner { - max-width: 1280px; margin: 0 auto; - /* Compact vertical rhythm on an 8px system. Top padding sets the - article→Prev/Next gap (~24–32px); the inter-section gap sets the - Prev/Next→Related gap (~32–48px). No large arbitrary voids. */ - /* Minimal bottom padding — the global site footer already contributes its - own 20px top inset, so the CTA banner sits close to it without a void. */ - padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px); - display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px); - } - @media (max-width: 767px) { - .dm-blog-footer-inner { - padding-left: 16px; - padding-right: 16px; - } - } - - /* Prev / Next */ - .dm-prevnext { - display: grid; grid-template-columns: 1fr 1fr; gap: 20px; - /* Halved from 40px: tight divider→cards spacing without crowding. */ - padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08); - } - @media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } } - .dm-prevnext-placeholder { display: block; } - .dm-prevnext-card { - display: flex; gap: 16px; align-items: center; padding: 16px; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; - } - .dm-prevnext-card:hover { - transform: translateY(-4px); border-color: rgba(192,18,39,0.2); - box-shadow: 0 16px 34px rgba(192,18,39,0.10); - } - .dm-prevnext-thumb { - position: relative; flex: 0 0 80px; width: 80px; height: 80px; - border-radius: 16px; overflow: hidden; background: #f1f5f9; - } - .dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; } - .dm-prevnext-next { text-align: right; } - .dm-prevnext-next .dm-prevnext-text { align-items: flex-end; } - .dm-prevnext-label { - display: inline-flex; align-items: center; gap: 6px; - font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red); - } - .dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; } - .dm-prevnext-title { - font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); } - - /* Related */ - .dm-related-heading { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important; - line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px; - } - .dm-related-grid { - display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; - } - @media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } } - @media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } } - - .dm-related-card { - display: flex; flex-direction: column; height: 100%; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none; - transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease; - } - .dm-related-card:hover { - transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13); - border-color: rgba(192,18,39,0.2); - } - .dm-related-img { - position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9; - } - .dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-img img { transform: scale(1.05); } - .dm-related-badge { - position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff; - font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px; - padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25); - } - .dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; } - .dm-related-card-title { - font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important; - letter-spacing: -.2px !important; margin: 0 0 10px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-related-card:hover .dm-related-card-title { color: var(--dm-red); } - .dm-related-card-excerpt { - font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - } - .dm-related-readmore { - margin-top: auto; display: inline-flex; align-items: center; gap: 7px; - font-size: 12.5px; font-weight: 800; color: var(--dm-red); - text-transform: uppercase; letter-spacing: .6px; - } - .dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); } - - /* Contact CTA banner */ - .dm-blog-contact-cta { - display: flex; align-items: center; justify-content: space-between; gap: 32px; - flex-wrap: wrap; - background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%); - border-radius: 30px; padding: clamp(32px, 4vw, 56px); - position: relative; overflow: hidden; - } - .dm-blog-contact-cta::after { - content: ""; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px; - background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%); - pointer-events: none; - } - .dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; } - .dm-blog-contact-eyebrow { - display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase; - letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px; - } - .dm-blog-contact-title { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important; - letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance; - } - .dm-blog-contact-sub { - font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450; - } - .dm-blog-contact-btn { - position: relative; z-index: 1; flex-shrink: 0; - display: inline-flex; align-items: center; justify-content: center; gap: 10px; - background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700; - padding: 16px 32px; border-radius: 16px; text-decoration: none; - box-shadow: 0 10px 26px rgba(192,18,39,0.34); - transition: background .2s ease, transform .2s ease; - } - .dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } - @media (max-width: 720px) { - .dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; } - .dm-blog-contact-btn { width: 100%; } - } -1a:["$","section",null,{"className":"dm-blog-footer","aria-label":"More articles","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$25"}}],"$L26"]}] -27:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"Image"] -28:I[23096,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"default"] -1d:["$","span",null,{"className":"dm-article-figure-img","children":["$","$L27",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"(max-width: 768px) 100vw, 760px","style":{"objectFit":"cover"}}]}] -1e:["$","figcaption",null,{"children":"EV Fleet: route planning decisions made before dispatch."}] -1f:["$","$L1c","7",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","blockquote",null,{"className":"dm-article-quote","children":[["$","p",null,{"children":"A route should be checked before the rider leaves, not explained after the customer calls."}],["$","cite",null,{"children":"Doormile Operations"}]]}]}] -20:["$","$L1c","8",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Putting it into practice"}]}] -21:["$","$L1c","9",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The best improvements usually start with simple measurements. Track distance per route, failed delivery windows, rider idle time, and orders moved between vehicles after dispatch. Those numbers show where the operation is leaking time."}]}] -22:["$","$L1c","10",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ol",null,{"className":"dm-article-ol","children":[["$","li","0",{"children":"Benchmark today's distance, fleet size, and on-time rate."}],["$","li","1",{"children":"Include vehicle capacity, delivery windows, rider shifts, and battery charge."}],["$","li","2",{"children":"Check routes against traffic and customer commitments before dispatch."}],["$","li","3",{"children":"Compare the next dispatch cycle against the old plan."}]]}]}] -23:["$","$L1c","11",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Better routing is not about pushing riders harder. It is about giving them a plan that already accounts for the real day ahead."}]}] -24:["$","div",null,{"className":"dm-blog-aside-wrap","children":["$","aside",null,{"className":"dm-blog-sidebar","aria-label":"Blog sidebar","children":[["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Search"}],["$","$L28",null,{}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Recent Posts"}],["$","ul",null,{"className":"dm-blog-recent","children":[["$","li","how-ai-is-transforming-last-mile-ev-delivery",{"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","time",null,{"dateTime":"2025-10-02","className":"dm-blog-recent-date","children":"Oct 2, 2025"}]]}]]}]}],["$","li","42-less-distance-insights-from-our-hyderabad-hub",{"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","time",null,{"dateTime":"2025-09-18","className":"dm-blog-recent-date","children":"Sep 18, 2025"}]]}]]}]}],["$","li","miletruth-ai-10-stages-to-smarter-dispatch",{"children":["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","time",null,{"dateTime":"2025-09-05","className":"dm-blog-recent-date","children":"Sep 5, 2025"}]]}]]}]}],["$","li","why-mathematical-precision-beats-heuristics-in-routing",{"children":["$","$L1b",null,{"href":"/blog/why-mathematical-precision-beats-heuristics-in-routing","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-14.webp","alt":"Why Mathematical Precision Beats Heuristics in Routing","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"Why Mathematical Precision Beats Heuristics in Routing"}],["$","time",null,{"dateTime":"2025-08-07","className":"dm-blog-recent-date","children":"Aug 7, 2025"}]]}]]}]}]]}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Categories"}],["$","ul",null,{"className":"dm-blog-categories","children":[["$","li","Case Study",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Case Study"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","EV Fleet",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"EV Fleet"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}],["$","li","Fleet Management",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Fleet Management"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","MileTruth",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"MileTruth"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],"$L29","$L2a","$L2b"]}]]}],"$L2c"]}]}] -26:["$","div",null,{"className":"dm-blog-footer-inner","children":[["$","nav",null,{"className":"dm-prevnext","aria-label":"Article navigation","children":[["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-prevnext-card dm-prevnext-prev","children":[["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"19","y1":"12","x2":"5","y2":"12"}],["$","polyline",null,{"points":"12 19 5 12 12 5"}]]}],"Previous"]}],["$","span",null,{"className":"dm-prevnext-cat","children":"MileTruth"}],["$","span",null,{"className":"dm-prevnext-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}]]}]]}],["$","$L1b",null,{"href":"/blog/why-mathematical-precision-beats-heuristics-in-routing","className":"dm-prevnext-card dm-prevnext-next","children":[["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":["Next",["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Technology"}],["$","span",null,{"className":"dm-prevnext-title","children":"Why Mathematical Precision Beats Heuristics in Routing"}]]}],["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-14.webp","alt":"Why Mathematical Precision Beats Heuristics in Routing","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}]]}]]}],["$","div",null,{"className":"dm-related","children":[["$","h2",null,{"className":"dm-related-heading","children":"Related Articles"}],["$","div",null,{"className":"dm-related-grid","children":[["$","$L1c","battery-simulation-the-secret-to-ev-route-pre-validation",{"delay":0,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/battery-simulation-the-secret-to-ev-route-pre-validation","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-3.webp","alt":"Battery Simulation: The Secret to EV Route Pre-Validation","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"EV Fleet"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"Battery Simulation: The Secret to EV Route Pre-Validation"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"Before a rider leaves the hub, every EV route should be checked against real charge capacity and the expected return plan."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L1c","how-ai-is-transforming-last-mile-ev-delivery",{"delay":0.08,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Technology"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],"$L2d","$L2e"]}]]}]}],"$L2f"]}]]}],"$L30"]}] -29:["$","li","Operations",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Operations"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2a:["$","li","Sustainability",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Sustainability"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2b:["$","li","Technology",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Technology"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}] -2c:["$","section",null,{"className":"dm-blog-widget dm-blog-cta-card","children":[["$","h2",null,{"className":"dm-blog-cta-title","children":"Planning delivery routes?"}],["$","p",null,{"className":"dm-blog-cta-text","children":"Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time."}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-cta-btn","children":["Contact Us",["$","svg",null,{"width":"18","height":"18","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -2d:["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}] -2e:["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}] -2f:["$","$L1c","42-less-distance-insights-from-our-hyderabad-hub",{"delay":0.16,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Case Study"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}] -30:["$","div",null,{"className":"dm-blog-contact-cta","children":[["$","div",null,{"className":"dm-blog-contact-cta-content","children":[["$","span",null,{"className":"dm-blog-contact-eyebrow","children":"Let's talk logistics"}],["$","h2",null,{"className":"dm-blog-contact-title","children":"Ready to move smarter with Doormile?"}],["$","p",null,{"className":"dm-blog-contact-sub","children":"Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding."}]]}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-contact-btn","children":["Get in Touch",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -12:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -31:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -f:null -14:[["$","title","0",{"children":"The EV Paradox: Solving Range Anxiety for Urban Fleets – Doormile"}],["$","meta","1",{"name":"description","content":"Electric vehicles lower running costs, but battery range changes how routes must be planned before dispatch."}],["$","meta","2",{"name":"author","content":"Doormile Team"}],["$","meta","3",{"name":"keywords","content":"EV Fleet,last-mile logistics,EV fleet,MileTruth,route optimisation"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","link","5",{"rel":"canonical","href":"https://www.doormile.com/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets"}],["$","meta","6",{"property":"og:title","content":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","meta","7",{"property":"og:description","content":"Electric vehicles lower running costs, but battery range changes how routes must be planned before dispatch."}],["$","meta","8",{"property":"og:url","content":"https://www.doormile.com/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets"}],["$","meta","9",{"property":"og:site_name","content":"Doormile"}],["$","meta","10",{"property":"og:image","content":"https://www.doormile.com/images/ev-paradox.webp"}],["$","meta","11",{"property":"og:image:alt","content":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","meta","12",{"property":"og:type","content":"article"}],["$","meta","13",{"property":"article:published_time","content":"2025-08-21T00:00:00.000Z"}],["$","meta","14",{"property":"article:author","content":"Doormile Team"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","meta","17",{"name":"twitter:description","content":"Electric vehicles lower running costs, but battery range changes how routes must be planned before dispatch."}],["$","meta","18",{"name":"twitter:image","content":"https://www.doormile.com/images/ev-paradox.webp"}],["$","link","19",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","21",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","22",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L31","23",{}]] diff --git a/build/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets/__next._head.txt b/build/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets/__next._head.txt deleted file mode 100644 index 9ff2960..0000000 --- a/build/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets/__next._head.txt +++ /dev/null @@ -1,6 +0,0 @@ -1:"$Sreact.fragment" -2:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -3:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -4:"$Sreact.suspense" -5:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"The EV Paradox: Solving Range Anxiety for Urban Fleets – Doormile"}],["$","meta","1",{"name":"description","content":"Electric vehicles lower running costs, but battery range changes how routes must be planned before dispatch."}],["$","meta","2",{"name":"author","content":"Doormile Team"}],["$","meta","3",{"name":"keywords","content":"EV Fleet,last-mile logistics,EV fleet,MileTruth,route optimisation"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","link","5",{"rel":"canonical","href":"https://www.doormile.com/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets"}],["$","meta","6",{"property":"og:title","content":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","meta","7",{"property":"og:description","content":"Electric vehicles lower running costs, but battery range changes how routes must be planned before dispatch."}],["$","meta","8",{"property":"og:url","content":"https://www.doormile.com/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets"}],["$","meta","9",{"property":"og:site_name","content":"Doormile"}],["$","meta","10",{"property":"og:image","content":"https://www.doormile.com/images/ev-paradox.webp"}],["$","meta","11",{"property":"og:image:alt","content":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","meta","12",{"property":"og:type","content":"article"}],["$","meta","13",{"property":"article:published_time","content":"2025-08-21T00:00:00.000Z"}],["$","meta","14",{"property":"article:author","content":"Doormile Team"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","meta","17",{"name":"twitter:description","content":"Electric vehicles lower running costs, but battery range changes how routes must be planned before dispatch."}],["$","meta","18",{"name":"twitter:image","content":"https://www.doormile.com/images/ev-paradox.webp"}],["$","link","19",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","21",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","22",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L5","23",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets/__next._index.txt b/build/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets/__next._index.txt deleted file mode 100644 index d0b3355..0000000 --- a/build/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets/__next._index.txt +++ /dev/null @@ -1,15 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","template":["$","$La",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets/__next._tree.txt b/build/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets/__next._tree.txt deleted file mode 100644 index 1c23eff..0000000 --- a/build/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets/__next._tree.txt +++ /dev/null @@ -1,10 +0,0 @@ -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -:HL["/images/ev-paradox.webp","image"] -0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"blog","param":null,"prefetchHints":0,"slots":{"children":{"name":"slug","param":{"type":"d","key":"the-ev-paradox-solving-range-anxiety-for-urban-fleets","siblings":null},"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets/__next.blog.$d$slug.__PAGE__.txt b/build/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets/__next.blog.$d$slug.__PAGE__.txt deleted file mode 100644 index 079e1a6..0000000 --- a/build/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets/__next.blog.$d$slug.__PAGE__.txt +++ /dev/null @@ -1,520 +0,0 @@ -1:"$Sreact.fragment" -8:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],""] -9:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"ScrollReveal"] -14:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -15:"$Sreact.suspense" -17:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"Image"] -18:I[23096,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"default"] -:HL["/images/ev-paradox.webp","image"] -2:T3d6f, - .dm-single-blog { - --dm-red: #c01227; - --dm-red-hover: #e31d32; - --dm-radius-card: 22px; - --dm-radius-img: 20px; - --dm-radius-badge: 8px; - --dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05); - --dm-border: 1px solid rgba(15, 23, 42, 0.09); - --dm-space-p: 24px; - --dm-space-h: 32px; - --dm-space-img: 32px; - --dm-space-quote: 40px; - --dm-sticky-top: 138px; - --dm-measure: min(1100px, 100%); - font-family: var(--font-manrope), sans-serif; - } - - /* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6 - (120/80/60px UPPERCASE) rules with !important on our own classes. */ - .dm-single-blog :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline, - specificity 0-1-1) so blog links keep our colors and never get underlined. */ - .dm-single-blog a { text-decoration: none !important; } - - /* Page banner: tall homepage-scale frame with only badge + title inside */ - /* Compound selector (specificity 20) + !important beats the global 800px - single-class height rules so the blog banner can use viewport heights. */ - .custom-standard-hero-card.dm-banner-card { - height: 90vh !important; - min-height: 85vh !important; - } - @media (max-width: 1024px) { - .custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; } - } - @media (max-width: 600px) { - .custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; } - } - - .dm-banner-inner { - position: relative; width: 100%; height: 100%; - display: flex; flex-direction: column; align-items: center; justify-content: center; - text-align: center; gap: clamp(22px, 2.6vw, 34px); - padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px); - } - - .dm-banner-category { - display: inline-block; background: var(--dm-red); color: #fff; - font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px; - padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45); - } - .dm-banner-title { - font-family: var(--font-manrope), sans-serif !important; - font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important; - line-height: 1.16 !important; letter-spacing: -1.2px !important; - color: #ffffff !important; margin: 0; max-width: 820px; - text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38); - } - @media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } } - @media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } } - - /* Content wrap begins immediately below the banner */ - /* Shared content container: the SAME max-width + horizontal padding is used - by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings, - images, Prev/Next, Related Articles and the CTA banner all align to one - grid with identical left/right edges. Keep both in sync. */ - .dm-blog-wrap { - max-width: 1280px; margin: 0 auto; - /* 20px mobile padding floor → 40px on desktop; matches the footer container. */ - padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0; - } - @media (max-width: 767px) { - .dm-blog-wrap { - padding-left: 16px; - padding-right: 16px; - } - } - - /* ── Article meta bar (directly under the hero) ── */ - .dm-meta-bar { - display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px; - padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px); - border-bottom: 1px solid rgba(15,23,42,0.10); - } - .dm-meta-breadcrumb ol { - list-style: none; display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b; - } - .dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; } - .dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; } - .dm-meta-sep { color: #cbd5e1; } - .dm-meta-current { - color: #0f172a; font-weight: 700; - max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - } - @media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } } - .dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; } - .dm-meta-item { - display: inline-flex; align-items: center; gap: 7px; - font-size: 13.5px; font-weight: 600; color: #475569; - } - .dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; } - .dm-meta-author { color: #0f172a; font-weight: 700; } - @media (max-width: 600px) { .dm-meta-bar { gap: 12px; } } - .dm-blog-layout { - display: grid; grid-template-columns: minmax(0,1fr) 320px; - /* Tighter gap gives the reading column more room next to the 320px sidebar. */ - gap: clamp(28px, 3vw, 56px); align-items: start; - } - @media (max-width: 1024px) { - .dm-blog-layout { grid-template-columns: 1fr; gap: 48px; } - /* Single-column (tablet/mobile): cap the reading column and centre it so the - article never sits left-aligned with a large empty right gutter. */ - .dm-blog-main { max-width: 900px; margin-inline: auto; } - } - .dm-blog-main { min-width: 0; } - - /* ── Intro lead ── */ - .dm-blog-intro { - max-width: var(--dm-measure); - font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500; - color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px; - border-left: 3px solid var(--dm-red); - } - - /* ── Article body ── */ - .dm-article-body { max-width: var(--dm-measure); } - .dm-article-p { - font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450; - margin: 0 0 var(--dm-space-p); - } - .dm-article-h2 { - font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important; - color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h); - text-wrap: balance; - } - /* Each article block is wrapped in its OWN ScrollReveal
    , so a bare - :first-child rule matched every heading (each is the only child of its - wrapper) and zeroed its top margin, collapsing the gap above every - section heading. Scope the reset to only the article body's first block. */ - .dm-article-body > :first-child :where(.dm-article-h2, .dm-article-h3), - .dm-article-body > .dm-article-h2:first-child, - .dm-article-body > .dm-article-h3:first-child { margin-top: 0; } - .dm-article-h3 { - font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important; - color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px; - text-wrap: balance; - } - @media (max-width: 600px) { - .dm-article-p { font-size: 16px !important; } - .dm-article-ul li, .dm-article-ol li { font-size: 15.5px; } - .dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; } - .dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; } - } - - .dm-article-ul, .dm-article-ol { - /* Top margin (was 0) separates the list from the paragraph above it; - matching bottom margin keeps it clear of the next heading/paragraph. - Slightly larger than --dm-space-p so the list reads as its own block. */ - margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px); - padding-left: 2px; list-style: none; - display: flex; flex-direction: column; gap: 15px; - } - /* Prefixed with .dm-article-body so these beat the theme's global - ".logico-front-end ul li:before" fontello-glyph bullet (specificity 0,1,3), - which otherwise replaces our clean red dot with a misaligned checkmark glyph - and adds its own 1.7em indent. */ - .dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li { - position: relative; padding-left: 34px; - font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450; - } - .dm-article-body .dm-article-ul li::before { - content: ""; position: absolute; left: 7px; top: 10px; - width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red); - /* kill any inherited fontello glyph from the global rule */ - font-size: 0; line-height: 0; - } - .dm-article-ol { counter-reset: dm-li; } - .dm-article-body .dm-article-ol li { counter-increment: dm-li; } - .dm-article-body .dm-article-ol li::before { - content: counter(dm-li); position: absolute; left: 0; top: 0; - width: 24px; height: 24px; border-radius: 7px; - background: rgba(192,18,39,0.10); color: var(--dm-red); - font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; - } - - /* ── Quote ── */ - .dm-article-quote { - position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px; - background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%); - border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0; - box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06); - } - .dm-article-quote::before { - content: "\201C"; position: absolute; left: 22px; top: 8px; - font-family: Georgia, "Times New Roman", serif; - font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700; - } - .dm-article-quote p { - font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600; - font-style: italic; color: #1e293b; margin: 0; - } - .dm-article-quote cite { - display: block; margin-top: 16px; font-size: 13px; font-weight: 700; - font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px; - } - @media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } } - - /* ── Images ── */ - .dm-article-figure { margin: var(--dm-space-img) 0; } - .dm-article-figure-img { - position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; - border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10); - } - .dm-article-figure figcaption { - margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500; - text-align: center; font-style: italic; - } - - /* ── Sidebar ── */ - .dm-blog-aside-wrap { position: relative; } - .dm-blog-sidebar { - display: flex; flex-direction: column; gap: 18px; - position: sticky; top: var(--dm-sticky-top); - } - @media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } } - - .dm-blog-widget { - background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card); - padding: 20px; box-shadow: var(--dm-shadow-card); - } - .dm-blog-widget-title { - font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important; - letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important; - margin: 0 0 15px; padding: 0 0 12px; - border-bottom: 1px solid rgba(15,23,42,0.08); - overflow: visible; white-space: normal; word-break: normal; - } - - /* Search */ - .dm-sr-only { - position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; - overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; - } - .dm-blog-search { position: relative; } - .dm-blog-search-form { position: relative; } - .dm-blog-search-input { - width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px; - padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a; - background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; - } - .dm-blog-search-input::placeholder { color: #9c9c9c; } - .dm-blog-search-input:focus { - outline: none; border-color: var(--dm-red); background: #fff; - box-shadow: 0 0 0 3px rgba(192,18,39,0.11); - } - .dm-blog-search-icon { - position: absolute; right: 14px; top: 50%; transform: translateY(-50%); - color: #94a3b8; pointer-events: none; display: flex; - } - .dm-blog-search-results { - position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0; - background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px; - box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden; - } - .dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; } - .dm-blog-search-result { - display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; - border-radius: 10px; text-decoration: none; transition: background .15s ease; - } - .dm-blog-search-result:hover { background: #f8fafc; } - .dm-blog-search-result-cat { - font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red); - } - .dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; } - .dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; } - - /* Recent posts */ - .dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; } - .dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; } - .dm-blog-recent-thumb { - position: relative; flex: 0 0 62px; width: 62px; height: 62px; - border-radius: 13px; overflow: hidden; background: #f1f5f9; - } - .dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; } - .dm-blog-recent-title { - font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); } - .dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; } - - /* Categories */ - .dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; } - .dm-blog-category-item { - display: flex; align-items: center; justify-content: space-between; gap: 10px; - padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important; - border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease; - } - .dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; } - .dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; } - .dm-blog-category-item > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .dm-blog-category-count { - flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9; - min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex; - align-items: center; justify-content: center; padding: 0 7px; - } - - /* CTA card */ - .dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; } - .dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; } - .dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; } - .dm-blog-cta-btn { - display: inline-flex; align-items: center; gap: 8px; - background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700; - padding: 12px 22px; border-radius: 12px; text-decoration: none; - transition: background .2s ease, transform .2s ease; - } - .dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } -0:{"rsc":["$","$1","c",{"children":[["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"headline\":\"The EV Paradox: Solving Range Anxiety for Urban Fleets\",\"description\":\"Electric vehicles lower running costs, but battery range changes how routes must be planned before dispatch.\",\"image\":[\"https://www.doormile.com/images/ev-paradox.webp\"],\"datePublished\":\"2025-08-21T00:00:00.000Z\",\"dateModified\":\"2025-08-21T00:00:00.000Z\",\"author\":{\"@type\":\"Organization\",\"name\":\"Doormile Team\",\"url\":\"https://www.doormile.com\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Doormile\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.doormile.com/images/cropped-image-2.png\"}},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.doormile.com/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets\"},\"articleSection\":\"EV Fleet\"}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://www.doormile.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https://www.doormile.com/blog\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"The EV Paradox: Solving Range Anxiety for Urban Fleets\",\"item\":\"https://www.doormile.com/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets\"}]}"}}],["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":[["$","article",null,{"className":"dm-single-blog","children":[["$","link",null,{"rel":"preload","as":"image","href":"/images/ev-paradox.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$2"}}],"$L3","$L4"]}],"$L5"]}]}]]}],["$L6"],"$L7"]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} -3:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card dm-banner-card","style":{"backgroundImage":"url(/images/ev-paradox.webp)","--hero-overlay":"linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)"},"children":["$","div",null,{"className":"e-con-inner dm-banner-inner","children":[["$","span",null,{"className":"dm-banner-category","children":"EV Fleet"}],["$","h1",null,{"className":"dm-banner-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}]]}]}]}] -4:["$","div",null,{"className":"dm-blog-wrap","children":[["$","div",null,{"className":"dm-meta-bar","children":[["$","nav",null,{"className":"dm-meta-breadcrumb","aria-label":"Breadcrumb","children":["$","ol",null,{"children":[["$","li",null,{"children":["$","$L8",null,{"href":"/","children":"Home"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"children":["$","$L8",null,{"href":"/blog","children":"Blog"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"aria-current":"page","className":"dm-meta-current","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}]]}]}],["$","div",null,{"className":"dm-meta-items","children":[["$","span",null,{"className":"dm-meta-item dm-meta-author","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","path",null,{"d":"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}],["$","circle",null,{"cx":"12","cy":"7","r":"4"}]]}],"Doormile Team"]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"2"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}]]}],["$","time",null,{"dateTime":"2025-08-21","children":"Aug 21, 2025"}]]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","circle",null,{"cx":"12","cy":"12","r":"9"}],["$","polyline",null,{"points":"12 7 12 12 15 14"}]]}],2," min read"]}]]}]]}],["$","div",null,{"className":"dm-blog-layout","children":[["$","div",null,{"className":"dm-blog-main","children":[["$","p",null,{"className":"dm-blog-intro","children":"Electric fleets can lower running costs, but range becomes a daily planning constraint. The route has to match the battery, the load, the traffic, and the return plan."}],["$","div",null,{"className":"dm-article-body","children":[["$","$L9","0",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"In last-mile logistics, a missed SLA is rarely caused by one big failure. It usually comes from small delays adding up across a route. The EV Paradox: Solving Range Anxiety for Urban Fleets looks at how delivery teams can spot those delays early and plan around them before vehicles leave the hub."}]}],["$","$L9","1",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Why this matters for fleet teams"}]}],["$","$L9","2",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Every extra kilometre costs money. It uses fuel or charge, adds rider time, wears down vehicles, and increases the chance of a late delivery. When routes are built from fixed zones or old habits, those costs repeat every day."}]}],["$","$L9","3",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"Fewer vehicles needed for the same number of drops"}],["$","li","1",{"children":"Lower cost per drop through better stop sequencing"}],["$","li","2",{"children":"ETAs that match traffic, distance, and delivery windows"}],["$","li","3",{"children":"Less fuel or charge used per completed order"}]]}]}],["$","$L9","4",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"From orders to dispatch"}]}],["$","$L9","5",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"A good dispatch plan starts with the basics: order locations, promised delivery windows, rider capacity, vehicle range, and known traffic trouble spots. MileTruth™ checks those inputs before dispatch so the team is not fixing avoidable mistakes on the road."}]}],["$","$L9","6",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","figure",null,{"className":"dm-article-figure","children":["$La","$Lb"]}]}],"$Lc","$Ld","$Le","$Lf","$L10"]}]]}],"$L11"]}]]}] -12:T2021, - .dm-blog-footer { - font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32; - /* The global theme applies 72px top/bottom section padding — strip it so the - inner container is the single source of vertical rhythm (no double gap). */ - padding: 0 !important; - } - /* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */ - .dm-blog-footer :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline) */ - .dm-blog-footer a { text-decoration: none !important; } - /* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px - max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA - align to the exact same left/right edges as the article body above. - Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a - consistent ~64–72px section→section gap (no 120px+ voids). */ - .dm-blog-footer-inner { - max-width: 1280px; margin: 0 auto; - /* Compact vertical rhythm on an 8px system. Top padding sets the - article→Prev/Next gap (~24–32px); the inter-section gap sets the - Prev/Next→Related gap (~32–48px). No large arbitrary voids. */ - /* Minimal bottom padding — the global site footer already contributes its - own 20px top inset, so the CTA banner sits close to it without a void. */ - padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px); - display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px); - } - @media (max-width: 767px) { - .dm-blog-footer-inner { - padding-left: 16px; - padding-right: 16px; - } - } - - /* Prev / Next */ - .dm-prevnext { - display: grid; grid-template-columns: 1fr 1fr; gap: 20px; - /* Halved from 40px: tight divider→cards spacing without crowding. */ - padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08); - } - @media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } } - .dm-prevnext-placeholder { display: block; } - .dm-prevnext-card { - display: flex; gap: 16px; align-items: center; padding: 16px; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; - } - .dm-prevnext-card:hover { - transform: translateY(-4px); border-color: rgba(192,18,39,0.2); - box-shadow: 0 16px 34px rgba(192,18,39,0.10); - } - .dm-prevnext-thumb { - position: relative; flex: 0 0 80px; width: 80px; height: 80px; - border-radius: 16px; overflow: hidden; background: #f1f5f9; - } - .dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; } - .dm-prevnext-next { text-align: right; } - .dm-prevnext-next .dm-prevnext-text { align-items: flex-end; } - .dm-prevnext-label { - display: inline-flex; align-items: center; gap: 6px; - font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red); - } - .dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; } - .dm-prevnext-title { - font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); } - - /* Related */ - .dm-related-heading { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important; - line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px; - } - .dm-related-grid { - display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; - } - @media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } } - @media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } } - - .dm-related-card { - display: flex; flex-direction: column; height: 100%; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none; - transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease; - } - .dm-related-card:hover { - transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13); - border-color: rgba(192,18,39,0.2); - } - .dm-related-img { - position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9; - } - .dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-img img { transform: scale(1.05); } - .dm-related-badge { - position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff; - font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px; - padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25); - } - .dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; } - .dm-related-card-title { - font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important; - letter-spacing: -.2px !important; margin: 0 0 10px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-related-card:hover .dm-related-card-title { color: var(--dm-red); } - .dm-related-card-excerpt { - font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - } - .dm-related-readmore { - margin-top: auto; display: inline-flex; align-items: center; gap: 7px; - font-size: 12.5px; font-weight: 800; color: var(--dm-red); - text-transform: uppercase; letter-spacing: .6px; - } - .dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); } - - /* Contact CTA banner */ - .dm-blog-contact-cta { - display: flex; align-items: center; justify-content: space-between; gap: 32px; - flex-wrap: wrap; - background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%); - border-radius: 30px; padding: clamp(32px, 4vw, 56px); - position: relative; overflow: hidden; - } - .dm-blog-contact-cta::after { - content: ""; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px; - background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%); - pointer-events: none; - } - .dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; } - .dm-blog-contact-eyebrow { - display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase; - letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px; - } - .dm-blog-contact-title { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important; - letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance; - } - .dm-blog-contact-sub { - font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450; - } - .dm-blog-contact-btn { - position: relative; z-index: 1; flex-shrink: 0; - display: inline-flex; align-items: center; justify-content: center; gap: 10px; - background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700; - padding: 16px 32px; border-radius: 16px; text-decoration: none; - box-shadow: 0 10px 26px rgba(192,18,39,0.34); - transition: background .2s ease, transform .2s ease; - } - .dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } - @media (max-width: 720px) { - .dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; } - .dm-blog-contact-btn { width: 100%; } - } -5:["$","section",null,{"className":"dm-blog-footer","aria-label":"More articles","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$12"}}],"$L13"]}] -6:["$","script","script-0",{"src":"/_next/static/chunks/0yvxf3ok9gcp_.js","async":true}] -7:["$","$L14",null,{"children":["$","$15",null,{"name":"Next.MetadataOutlet","children":"$@16"}]}] -a:["$","span",null,{"className":"dm-article-figure-img","children":["$","$L17",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"(max-width: 768px) 100vw, 760px","style":{"objectFit":"cover"}}]}] -b:["$","figcaption",null,{"children":"EV Fleet: route planning decisions made before dispatch."}] -c:["$","$L9","7",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","blockquote",null,{"className":"dm-article-quote","children":[["$","p",null,{"children":"A route should be checked before the rider leaves, not explained after the customer calls."}],["$","cite",null,{"children":"Doormile Operations"}]]}]}] -d:["$","$L9","8",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Putting it into practice"}]}] -e:["$","$L9","9",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The best improvements usually start with simple measurements. Track distance per route, failed delivery windows, rider idle time, and orders moved between vehicles after dispatch. Those numbers show where the operation is leaking time."}]}] -f:["$","$L9","10",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ol",null,{"className":"dm-article-ol","children":[["$","li","0",{"children":"Benchmark today's distance, fleet size, and on-time rate."}],["$","li","1",{"children":"Include vehicle capacity, delivery windows, rider shifts, and battery charge."}],["$","li","2",{"children":"Check routes against traffic and customer commitments before dispatch."}],["$","li","3",{"children":"Compare the next dispatch cycle against the old plan."}]]}]}] -10:["$","$L9","11",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Better routing is not about pushing riders harder. It is about giving them a plan that already accounts for the real day ahead."}]}] -11:["$","div",null,{"className":"dm-blog-aside-wrap","children":["$","aside",null,{"className":"dm-blog-sidebar","aria-label":"Blog sidebar","children":[["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Search"}],["$","$L18",null,{}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Recent Posts"}],["$","ul",null,{"className":"dm-blog-recent","children":[["$","li","how-ai-is-transforming-last-mile-ev-delivery",{"children":["$","$L8",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","time",null,{"dateTime":"2025-10-02","className":"dm-blog-recent-date","children":"Oct 2, 2025"}]]}]]}]}],["$","li","42-less-distance-insights-from-our-hyderabad-hub",{"children":["$","$L8",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","time",null,{"dateTime":"2025-09-18","className":"dm-blog-recent-date","children":"Sep 18, 2025"}]]}]]}]}],["$","li","miletruth-ai-10-stages-to-smarter-dispatch",{"children":["$","$L8",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","time",null,{"dateTime":"2025-09-05","className":"dm-blog-recent-date","children":"Sep 5, 2025"}]]}]]}]}],["$","li","why-mathematical-precision-beats-heuristics-in-routing",{"children":["$","$L8",null,{"href":"/blog/why-mathematical-precision-beats-heuristics-in-routing","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-14.webp","alt":"Why Mathematical Precision Beats Heuristics in Routing","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"Why Mathematical Precision Beats Heuristics in Routing"}],["$","time",null,{"dateTime":"2025-08-07","className":"dm-blog-recent-date","children":"Aug 7, 2025"}]]}]]}]}]]}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Categories"}],["$","ul",null,{"className":"dm-blog-categories","children":[["$","li","Case Study",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Case Study"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","EV Fleet",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"EV Fleet"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}],["$","li","Fleet Management",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Fleet Management"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","MileTruth",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"MileTruth"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],"$L19","$L1a","$L1b"]}]]}],"$L1c"]}]}] -13:["$","div",null,{"className":"dm-blog-footer-inner","children":[["$","nav",null,{"className":"dm-prevnext","aria-label":"Article navigation","children":[["$","$L8",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-prevnext-card dm-prevnext-prev","children":[["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"19","y1":"12","x2":"5","y2":"12"}],["$","polyline",null,{"points":"12 19 5 12 12 5"}]]}],"Previous"]}],["$","span",null,{"className":"dm-prevnext-cat","children":"MileTruth"}],["$","span",null,{"className":"dm-prevnext-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}]]}]]}],["$","$L8",null,{"href":"/blog/why-mathematical-precision-beats-heuristics-in-routing","className":"dm-prevnext-card dm-prevnext-next","children":[["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":["Next",["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Technology"}],["$","span",null,{"className":"dm-prevnext-title","children":"Why Mathematical Precision Beats Heuristics in Routing"}]]}],["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-14.webp","alt":"Why Mathematical Precision Beats Heuristics in Routing","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}]]}]]}],["$","div",null,{"className":"dm-related","children":[["$","h2",null,{"className":"dm-related-heading","children":"Related Articles"}],["$","div",null,{"className":"dm-related-grid","children":[["$","$L9","battery-simulation-the-secret-to-ev-route-pre-validation",{"delay":0,"duration":0.7,"yOffset":30,"children":["$","$L8",null,{"href":"/blog/battery-simulation-the-secret-to-ev-route-pre-validation","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L17",null,{"src":"/images/blog-post-pic-3.webp","alt":"Battery Simulation: The Secret to EV Route Pre-Validation","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"EV Fleet"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"Battery Simulation: The Secret to EV Route Pre-Validation"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"Before a rider leaves the hub, every EV route should be checked against real charge capacity and the expected return plan."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L9","how-ai-is-transforming-last-mile-ev-delivery",{"delay":0.08,"duration":0.7,"yOffset":30,"children":["$","$L8",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L17",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Technology"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],"$L1d","$L1e"]}]]}]}],"$L1f"]}]]}],"$L20"]}] -16:null -19:["$","li","Operations",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Operations"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -1a:["$","li","Sustainability",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Sustainability"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -1b:["$","li","Technology",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Technology"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}] -1c:["$","section",null,{"className":"dm-blog-widget dm-blog-cta-card","children":[["$","h2",null,{"className":"dm-blog-cta-title","children":"Planning delivery routes?"}],["$","p",null,{"className":"dm-blog-cta-text","children":"Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time."}],["$","$L8",null,{"href":"/contact","className":"dm-blog-cta-btn","children":["Contact Us",["$","svg",null,{"width":"18","height":"18","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -1d:["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}] -1e:["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}] -1f:["$","$L9","42-less-distance-insights-from-our-hyderabad-hub",{"delay":0.16,"duration":0.7,"yOffset":30,"children":["$","$L8",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L17",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Case Study"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}] -20:["$","div",null,{"className":"dm-blog-contact-cta","children":[["$","div",null,{"className":"dm-blog-contact-cta-content","children":[["$","span",null,{"className":"dm-blog-contact-eyebrow","children":"Let's talk logistics"}],["$","h2",null,{"className":"dm-blog-contact-title","children":"Ready to move smarter with Doormile?"}],["$","p",null,{"className":"dm-blog-contact-sub","children":"Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding."}]]}],["$","$L8",null,{"href":"/contact","className":"dm-blog-contact-btn","children":["Get in Touch",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] diff --git a/build/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets/__next.blog.$d$slug.txt b/build/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets/__next.blog.$d$slug.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets/__next.blog.$d$slug.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets/__next.blog.txt b/build/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets/__next.blog.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets/__next.blog.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/why-mathematical-precision-beats-heuristics-in-routing.html b/build/blog/why-mathematical-precision-beats-heuristics-in-routing.html deleted file mode 100644 index 7ea3c0a..0000000 --- a/build/blog/why-mathematical-precision-beats-heuristics-in-routing.html +++ /dev/null @@ -1,1168 +0,0 @@ -Why Mathematical Precision Beats Heuristics in Routing – Doormile

    Doormile

    Doormile logo
    Address
    Hyderabad

    5th Floor, Vision Ultima,
    Street No.3, Jayabheri Enclave,
    Gachibowli, Hyderabad,
    Telangana 500032.

    Coimbatore

    Mayflower Valencia,
    Near Nava India Bus Stop,
    Avinashi Road,
    Udayampalayam,
    Tamil Nadu 641037.

    Bengaluru

    C612, 6th Floor,
    Trifecta Starlight,
    ITPL Road,
    Garudacharapalya,
    Mahadevapura,
    Bangalore 560048,
    Karnataka, India.

    Contact Us

    Tel : +91 86886 97941

    Email

    care@doormile.com

    Technology

    Why Mathematical Precision Beats Heuristics in Routing

    Doormile Team2 min read

    Simple routing rules are fast to set up, but they can quietly add distance every day. Better planning compares more route options before dispatch.

    In last-mile logistics, a missed SLA is rarely caused by one big failure. It usually comes from small delays adding up across a route. Why Mathematical Precision Beats Heuristics in Routing looks at how delivery teams can spot those delays early and plan around them before vehicles leave the hub.

    Why this matters for fleet teams

    Every extra kilometre costs money. It uses fuel or charge, adds rider time, wears down vehicles, and increases the chance of a late delivery. When routes are built from fixed zones or old habits, those costs repeat every day.

    • Fewer vehicles needed for the same number of drops
    • Lower cost per drop through better stop sequencing
    • ETAs that match traffic, distance, and delivery windows
    • Less fuel or charge used per completed order

    From orders to dispatch

    A good dispatch plan starts with the basics: order locations, promised delivery windows, rider capacity, vehicle range, and known traffic trouble spots. MileTruth™ checks those inputs before dispatch so the team is not fixing avoidable mistakes on the road.

    Why Mathematical Precision Beats Heuristics in Routing
    Technology: route planning decisions made before dispatch.

    A route should be checked before the rider leaves, not explained after the customer calls.

    Doormile Operations

    Putting it into practice

    The best improvements usually start with simple measurements. Track distance per route, failed delivery windows, rider idle time, and orders moved between vehicles after dispatch. Those numbers show where the operation is leaking time.

    1. Benchmark today's distance, fleet size, and on-time rate.
    2. Include vehicle capacity, delivery windows, rider shifts, and battery charge.
    3. Check routes against traffic and customer commitments before dispatch.
    4. Compare the next dispatch cycle against the old plan.

    Better routing is not about pushing riders harder. It is about giving them a plan that already accounts for the real day ahead.

    \ No newline at end of file diff --git a/build/blog/why-mathematical-precision-beats-heuristics-in-routing.txt b/build/blog/why-mathematical-precision-beats-heuristics-in-routing.txt deleted file mode 100644 index 0c30390..0000000 --- a/build/blog/why-mathematical-precision-beats-heuristics-in-routing.txt +++ /dev/null @@ -1,545 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -d:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -e:"$Sreact.suspense" -11:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -13:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -15:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","blog","why-mathematical-precision-beats-heuristics-in-routing"],"q":"","i":false,"f":[[["",{"children":["blog",{"children":[["slug","why-mathematical-precision-beats-heuristics-in-routing","d",null],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":["$Lc",[["$","script","script-0",{"src":"/_next/static/chunks/0yvxf3ok9gcp_.js","async":true,"nonce":"$undefined"}]],["$","$Ld",null,{"children":["$","$e",null,{"name":"Next.MetadataOutlet","children":"$@f"}]}]]}],{},null,false,null]},null,false,"$@10"]},null,false,"$@10"]},null,false,null],["$","$1","h",{"children":[null,["$","$L11",null,{"children":"$L12"}],["$","div",null,{"hidden":true,"children":["$","$L13",null,{"children":["$","$e",null,{"name":"Next.Metadata","children":"$L14"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$15",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -16:[] -10:"$W16" -:HL["/images/blog-post-pic-14.webp","image"] -17:T3d6f, - .dm-single-blog { - --dm-red: #c01227; - --dm-red-hover: #e31d32; - --dm-radius-card: 22px; - --dm-radius-img: 20px; - --dm-radius-badge: 8px; - --dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05); - --dm-border: 1px solid rgba(15, 23, 42, 0.09); - --dm-space-p: 24px; - --dm-space-h: 32px; - --dm-space-img: 32px; - --dm-space-quote: 40px; - --dm-sticky-top: 138px; - --dm-measure: min(1100px, 100%); - font-family: var(--font-manrope), sans-serif; - } - - /* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6 - (120/80/60px UPPERCASE) rules with !important on our own classes. */ - .dm-single-blog :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline, - specificity 0-1-1) so blog links keep our colors and never get underlined. */ - .dm-single-blog a { text-decoration: none !important; } - - /* Page banner: tall homepage-scale frame with only badge + title inside */ - /* Compound selector (specificity 20) + !important beats the global 800px - single-class height rules so the blog banner can use viewport heights. */ - .custom-standard-hero-card.dm-banner-card { - height: 90vh !important; - min-height: 85vh !important; - } - @media (max-width: 1024px) { - .custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; } - } - @media (max-width: 600px) { - .custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; } - } - - .dm-banner-inner { - position: relative; width: 100%; height: 100%; - display: flex; flex-direction: column; align-items: center; justify-content: center; - text-align: center; gap: clamp(22px, 2.6vw, 34px); - padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px); - } - - .dm-banner-category { - display: inline-block; background: var(--dm-red); color: #fff; - font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px; - padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45); - } - .dm-banner-title { - font-family: var(--font-manrope), sans-serif !important; - font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important; - line-height: 1.16 !important; letter-spacing: -1.2px !important; - color: #ffffff !important; margin: 0; max-width: 820px; - text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38); - } - @media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } } - @media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } } - - /* Content wrap begins immediately below the banner */ - /* Shared content container: the SAME max-width + horizontal padding is used - by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings, - images, Prev/Next, Related Articles and the CTA banner all align to one - grid with identical left/right edges. Keep both in sync. */ - .dm-blog-wrap { - max-width: 1280px; margin: 0 auto; - /* 20px mobile padding floor → 40px on desktop; matches the footer container. */ - padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0; - } - @media (max-width: 767px) { - .dm-blog-wrap { - padding-left: 16px; - padding-right: 16px; - } - } - - /* ── Article meta bar (directly under the hero) ── */ - .dm-meta-bar { - display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px; - padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px); - border-bottom: 1px solid rgba(15,23,42,0.10); - } - .dm-meta-breadcrumb ol { - list-style: none; display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b; - } - .dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; } - .dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; } - .dm-meta-sep { color: #cbd5e1; } - .dm-meta-current { - color: #0f172a; font-weight: 700; - max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - } - @media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } } - .dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; } - .dm-meta-item { - display: inline-flex; align-items: center; gap: 7px; - font-size: 13.5px; font-weight: 600; color: #475569; - } - .dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; } - .dm-meta-author { color: #0f172a; font-weight: 700; } - @media (max-width: 600px) { .dm-meta-bar { gap: 12px; } } - .dm-blog-layout { - display: grid; grid-template-columns: minmax(0,1fr) 320px; - /* Tighter gap gives the reading column more room next to the 320px sidebar. */ - gap: clamp(28px, 3vw, 56px); align-items: start; - } - @media (max-width: 1024px) { - .dm-blog-layout { grid-template-columns: 1fr; gap: 48px; } - /* Single-column (tablet/mobile): cap the reading column and centre it so the - article never sits left-aligned with a large empty right gutter. */ - .dm-blog-main { max-width: 900px; margin-inline: auto; } - } - .dm-blog-main { min-width: 0; } - - /* ── Intro lead ── */ - .dm-blog-intro { - max-width: var(--dm-measure); - font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500; - color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px; - border-left: 3px solid var(--dm-red); - } - - /* ── Article body ── */ - .dm-article-body { max-width: var(--dm-measure); } - .dm-article-p { - font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450; - margin: 0 0 var(--dm-space-p); - } - .dm-article-h2 { - font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important; - color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h); - text-wrap: balance; - } - /* Each article block is wrapped in its OWN ScrollReveal
    , so a bare - :first-child rule matched every heading (each is the only child of its - wrapper) and zeroed its top margin, collapsing the gap above every - section heading. Scope the reset to only the article body's first block. */ - .dm-article-body > :first-child :where(.dm-article-h2, .dm-article-h3), - .dm-article-body > .dm-article-h2:first-child, - .dm-article-body > .dm-article-h3:first-child { margin-top: 0; } - .dm-article-h3 { - font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important; - color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px; - text-wrap: balance; - } - @media (max-width: 600px) { - .dm-article-p { font-size: 16px !important; } - .dm-article-ul li, .dm-article-ol li { font-size: 15.5px; } - .dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; } - .dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; } - } - - .dm-article-ul, .dm-article-ol { - /* Top margin (was 0) separates the list from the paragraph above it; - matching bottom margin keeps it clear of the next heading/paragraph. - Slightly larger than --dm-space-p so the list reads as its own block. */ - margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px); - padding-left: 2px; list-style: none; - display: flex; flex-direction: column; gap: 15px; - } - /* Prefixed with .dm-article-body so these beat the theme's global - ".logico-front-end ul li:before" fontello-glyph bullet (specificity 0,1,3), - which otherwise replaces our clean red dot with a misaligned checkmark glyph - and adds its own 1.7em indent. */ - .dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li { - position: relative; padding-left: 34px; - font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450; - } - .dm-article-body .dm-article-ul li::before { - content: ""; position: absolute; left: 7px; top: 10px; - width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red); - /* kill any inherited fontello glyph from the global rule */ - font-size: 0; line-height: 0; - } - .dm-article-ol { counter-reset: dm-li; } - .dm-article-body .dm-article-ol li { counter-increment: dm-li; } - .dm-article-body .dm-article-ol li::before { - content: counter(dm-li); position: absolute; left: 0; top: 0; - width: 24px; height: 24px; border-radius: 7px; - background: rgba(192,18,39,0.10); color: var(--dm-red); - font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; - } - - /* ── Quote ── */ - .dm-article-quote { - position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px; - background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%); - border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0; - box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06); - } - .dm-article-quote::before { - content: "\201C"; position: absolute; left: 22px; top: 8px; - font-family: Georgia, "Times New Roman", serif; - font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700; - } - .dm-article-quote p { - font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600; - font-style: italic; color: #1e293b; margin: 0; - } - .dm-article-quote cite { - display: block; margin-top: 16px; font-size: 13px; font-weight: 700; - font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px; - } - @media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } } - - /* ── Images ── */ - .dm-article-figure { margin: var(--dm-space-img) 0; } - .dm-article-figure-img { - position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; - border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10); - } - .dm-article-figure figcaption { - margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500; - text-align: center; font-style: italic; - } - - /* ── Sidebar ── */ - .dm-blog-aside-wrap { position: relative; } - .dm-blog-sidebar { - display: flex; flex-direction: column; gap: 18px; - position: sticky; top: var(--dm-sticky-top); - } - @media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } } - - .dm-blog-widget { - background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card); - padding: 20px; box-shadow: var(--dm-shadow-card); - } - .dm-blog-widget-title { - font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important; - letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important; - margin: 0 0 15px; padding: 0 0 12px; - border-bottom: 1px solid rgba(15,23,42,0.08); - overflow: visible; white-space: normal; word-break: normal; - } - - /* Search */ - .dm-sr-only { - position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; - overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; - } - .dm-blog-search { position: relative; } - .dm-blog-search-form { position: relative; } - .dm-blog-search-input { - width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px; - padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a; - background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; - } - .dm-blog-search-input::placeholder { color: #9c9c9c; } - .dm-blog-search-input:focus { - outline: none; border-color: var(--dm-red); background: #fff; - box-shadow: 0 0 0 3px rgba(192,18,39,0.11); - } - .dm-blog-search-icon { - position: absolute; right: 14px; top: 50%; transform: translateY(-50%); - color: #94a3b8; pointer-events: none; display: flex; - } - .dm-blog-search-results { - position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0; - background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px; - box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden; - } - .dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; } - .dm-blog-search-result { - display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; - border-radius: 10px; text-decoration: none; transition: background .15s ease; - } - .dm-blog-search-result:hover { background: #f8fafc; } - .dm-blog-search-result-cat { - font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red); - } - .dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; } - .dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; } - - /* Recent posts */ - .dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; } - .dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; } - .dm-blog-recent-thumb { - position: relative; flex: 0 0 62px; width: 62px; height: 62px; - border-radius: 13px; overflow: hidden; background: #f1f5f9; - } - .dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; } - .dm-blog-recent-title { - font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); } - .dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; } - - /* Categories */ - .dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; } - .dm-blog-category-item { - display: flex; align-items: center; justify-content: space-between; gap: 10px; - padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important; - border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease; - } - .dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; } - .dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; } - .dm-blog-category-item > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .dm-blog-category-count { - flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9; - min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex; - align-items: center; justify-content: center; padding: 0 7px; - } - - /* CTA card */ - .dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; } - .dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; } - .dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; } - .dm-blog-cta-btn { - display: inline-flex; align-items: center; gap: 8px; - background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700; - padding: 12px 22px; border-radius: 12px; text-decoration: none; - transition: background .2s ease, transform .2s ease; - } - .dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } -c:["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"headline\":\"Why Mathematical Precision Beats Heuristics in Routing\",\"description\":\"Fixed routing rules are easy to start with, but they often miss better stop sequences as order volume grows.\",\"image\":[\"https://www.doormile.com/images/blog-post-pic-14.webp\"],\"datePublished\":\"2025-08-07T00:00:00.000Z\",\"dateModified\":\"2025-08-07T00:00:00.000Z\",\"author\":{\"@type\":\"Organization\",\"name\":\"Doormile Team\",\"url\":\"https://www.doormile.com\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Doormile\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.doormile.com/images/cropped-image-2.png\"}},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.doormile.com/blog/why-mathematical-precision-beats-heuristics-in-routing\"},\"articleSection\":\"Technology\"}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://www.doormile.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https://www.doormile.com/blog\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Why Mathematical Precision Beats Heuristics in Routing\",\"item\":\"https://www.doormile.com/blog/why-mathematical-precision-beats-heuristics-in-routing\"}]}"}}],["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":[["$","article",null,{"className":"dm-single-blog","children":[["$","link",null,{"rel":"preload","as":"image","href":"/images/blog-post-pic-14.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$17"}}],"$L18","$L19"]}],"$L1a"]}]}]]}] -1b:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],""] -1c:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"ScrollReveal"] -18:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card dm-banner-card","style":{"backgroundImage":"url(/images/blog-post-pic-14.webp)","--hero-overlay":"linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)"},"children":["$","div",null,{"className":"e-con-inner dm-banner-inner","children":[["$","span",null,{"className":"dm-banner-category","children":"Technology"}],["$","h1",null,{"className":"dm-banner-title","children":"Why Mathematical Precision Beats Heuristics in Routing"}]]}]}]}] -19:["$","div",null,{"className":"dm-blog-wrap","children":[["$","div",null,{"className":"dm-meta-bar","children":[["$","nav",null,{"className":"dm-meta-breadcrumb","aria-label":"Breadcrumb","children":["$","ol",null,{"children":[["$","li",null,{"children":["$","$L1b",null,{"href":"/","children":"Home"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"children":["$","$L1b",null,{"href":"/blog","children":"Blog"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"aria-current":"page","className":"dm-meta-current","children":"Why Mathematical Precision Beats Heuristics in Routing"}]]}]}],["$","div",null,{"className":"dm-meta-items","children":[["$","span",null,{"className":"dm-meta-item dm-meta-author","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","path",null,{"d":"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}],["$","circle",null,{"cx":"12","cy":"7","r":"4"}]]}],"Doormile Team"]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"2"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}]]}],["$","time",null,{"dateTime":"2025-08-07","children":"Aug 7, 2025"}]]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","circle",null,{"cx":"12","cy":"12","r":"9"}],["$","polyline",null,{"points":"12 7 12 12 15 14"}]]}],2," min read"]}]]}]]}],["$","div",null,{"className":"dm-blog-layout","children":[["$","div",null,{"className":"dm-blog-main","children":[["$","p",null,{"className":"dm-blog-intro","children":"Simple routing rules are fast to set up, but they can quietly add distance every day. Better planning compares more route options before dispatch."}],["$","div",null,{"className":"dm-article-body","children":[["$","$L1c","0",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"In last-mile logistics, a missed SLA is rarely caused by one big failure. It usually comes from small delays adding up across a route. Why Mathematical Precision Beats Heuristics in Routing looks at how delivery teams can spot those delays early and plan around them before vehicles leave the hub."}]}],["$","$L1c","1",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Why this matters for fleet teams"}]}],["$","$L1c","2",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Every extra kilometre costs money. It uses fuel or charge, adds rider time, wears down vehicles, and increases the chance of a late delivery. When routes are built from fixed zones or old habits, those costs repeat every day."}]}],["$","$L1c","3",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"Fewer vehicles needed for the same number of drops"}],["$","li","1",{"children":"Lower cost per drop through better stop sequencing"}],["$","li","2",{"children":"ETAs that match traffic, distance, and delivery windows"}],["$","li","3",{"children":"Less fuel or charge used per completed order"}]]}]}],["$","$L1c","4",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"From orders to dispatch"}]}],["$","$L1c","5",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"A good dispatch plan starts with the basics: order locations, promised delivery windows, rider capacity, vehicle range, and known traffic trouble spots. MileTruth™ checks those inputs before dispatch so the team is not fixing avoidable mistakes on the road."}]}],["$","$L1c","6",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","figure",null,{"className":"dm-article-figure","children":[["$","span",null,{"className":"dm-article-figure-img","children":"$L1d"}],"$L1e"]}]}],"$L1f","$L20","$L21","$L22","$L23"]}]]}],"$L24"]}]]}] -25:T2021, - .dm-blog-footer { - font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32; - /* The global theme applies 72px top/bottom section padding — strip it so the - inner container is the single source of vertical rhythm (no double gap). */ - padding: 0 !important; - } - /* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */ - .dm-blog-footer :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline) */ - .dm-blog-footer a { text-decoration: none !important; } - /* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px - max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA - align to the exact same left/right edges as the article body above. - Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a - consistent ~64–72px section→section gap (no 120px+ voids). */ - .dm-blog-footer-inner { - max-width: 1280px; margin: 0 auto; - /* Compact vertical rhythm on an 8px system. Top padding sets the - article→Prev/Next gap (~24–32px); the inter-section gap sets the - Prev/Next→Related gap (~32–48px). No large arbitrary voids. */ - /* Minimal bottom padding — the global site footer already contributes its - own 20px top inset, so the CTA banner sits close to it without a void. */ - padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px); - display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px); - } - @media (max-width: 767px) { - .dm-blog-footer-inner { - padding-left: 16px; - padding-right: 16px; - } - } - - /* Prev / Next */ - .dm-prevnext { - display: grid; grid-template-columns: 1fr 1fr; gap: 20px; - /* Halved from 40px: tight divider→cards spacing without crowding. */ - padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08); - } - @media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } } - .dm-prevnext-placeholder { display: block; } - .dm-prevnext-card { - display: flex; gap: 16px; align-items: center; padding: 16px; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; - } - .dm-prevnext-card:hover { - transform: translateY(-4px); border-color: rgba(192,18,39,0.2); - box-shadow: 0 16px 34px rgba(192,18,39,0.10); - } - .dm-prevnext-thumb { - position: relative; flex: 0 0 80px; width: 80px; height: 80px; - border-radius: 16px; overflow: hidden; background: #f1f5f9; - } - .dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; } - .dm-prevnext-next { text-align: right; } - .dm-prevnext-next .dm-prevnext-text { align-items: flex-end; } - .dm-prevnext-label { - display: inline-flex; align-items: center; gap: 6px; - font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red); - } - .dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; } - .dm-prevnext-title { - font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); } - - /* Related */ - .dm-related-heading { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important; - line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px; - } - .dm-related-grid { - display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; - } - @media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } } - @media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } } - - .dm-related-card { - display: flex; flex-direction: column; height: 100%; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none; - transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease; - } - .dm-related-card:hover { - transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13); - border-color: rgba(192,18,39,0.2); - } - .dm-related-img { - position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9; - } - .dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-img img { transform: scale(1.05); } - .dm-related-badge { - position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff; - font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px; - padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25); - } - .dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; } - .dm-related-card-title { - font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important; - letter-spacing: -.2px !important; margin: 0 0 10px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-related-card:hover .dm-related-card-title { color: var(--dm-red); } - .dm-related-card-excerpt { - font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - } - .dm-related-readmore { - margin-top: auto; display: inline-flex; align-items: center; gap: 7px; - font-size: 12.5px; font-weight: 800; color: var(--dm-red); - text-transform: uppercase; letter-spacing: .6px; - } - .dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); } - - /* Contact CTA banner */ - .dm-blog-contact-cta { - display: flex; align-items: center; justify-content: space-between; gap: 32px; - flex-wrap: wrap; - background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%); - border-radius: 30px; padding: clamp(32px, 4vw, 56px); - position: relative; overflow: hidden; - } - .dm-blog-contact-cta::after { - content: ""; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px; - background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%); - pointer-events: none; - } - .dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; } - .dm-blog-contact-eyebrow { - display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase; - letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px; - } - .dm-blog-contact-title { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important; - letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance; - } - .dm-blog-contact-sub { - font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450; - } - .dm-blog-contact-btn { - position: relative; z-index: 1; flex-shrink: 0; - display: inline-flex; align-items: center; justify-content: center; gap: 10px; - background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700; - padding: 16px 32px; border-radius: 16px; text-decoration: none; - box-shadow: 0 10px 26px rgba(192,18,39,0.34); - transition: background .2s ease, transform .2s ease; - } - .dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } - @media (max-width: 720px) { - .dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; } - .dm-blog-contact-btn { width: 100%; } - } -1a:["$","section",null,{"className":"dm-blog-footer","aria-label":"More articles","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$25"}}],"$L26"]}] -27:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"Image"] -28:I[23096,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"default"] -1d:["$","$L27",null,{"src":"/images/blog-post-pic-14.webp","alt":"Why Mathematical Precision Beats Heuristics in Routing","fill":true,"sizes":"(max-width: 768px) 100vw, 760px","style":{"objectFit":"cover"}}] -1e:["$","figcaption",null,{"children":"Technology: route planning decisions made before dispatch."}] -1f:["$","$L1c","7",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","blockquote",null,{"className":"dm-article-quote","children":[["$","p",null,{"children":"A route should be checked before the rider leaves, not explained after the customer calls."}],["$","cite",null,{"children":"Doormile Operations"}]]}]}] -20:["$","$L1c","8",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Putting it into practice"}]}] -21:["$","$L1c","9",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The best improvements usually start with simple measurements. Track distance per route, failed delivery windows, rider idle time, and orders moved between vehicles after dispatch. Those numbers show where the operation is leaking time."}]}] -22:["$","$L1c","10",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ol",null,{"className":"dm-article-ol","children":[["$","li","0",{"children":"Benchmark today's distance, fleet size, and on-time rate."}],["$","li","1",{"children":"Include vehicle capacity, delivery windows, rider shifts, and battery charge."}],["$","li","2",{"children":"Check routes against traffic and customer commitments before dispatch."}],["$","li","3",{"children":"Compare the next dispatch cycle against the old plan."}]]}]}] -23:["$","$L1c","11",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Better routing is not about pushing riders harder. It is about giving them a plan that already accounts for the real day ahead."}]}] -24:["$","div",null,{"className":"dm-blog-aside-wrap","children":["$","aside",null,{"className":"dm-blog-sidebar","aria-label":"Blog sidebar","children":[["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Search"}],["$","$L28",null,{}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Recent Posts"}],["$","ul",null,{"className":"dm-blog-recent","children":[["$","li","how-ai-is-transforming-last-mile-ev-delivery",{"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","time",null,{"dateTime":"2025-10-02","className":"dm-blog-recent-date","children":"Oct 2, 2025"}]]}]]}]}],["$","li","42-less-distance-insights-from-our-hyderabad-hub",{"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","time",null,{"dateTime":"2025-09-18","className":"dm-blog-recent-date","children":"Sep 18, 2025"}]]}]]}]}],["$","li","miletruth-ai-10-stages-to-smarter-dispatch",{"children":["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","time",null,{"dateTime":"2025-09-05","className":"dm-blog-recent-date","children":"Sep 5, 2025"}]]}]]}]}],["$","li","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"children":["$","$L1b",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","time",null,{"dateTime":"2025-08-21","className":"dm-blog-recent-date","children":"Aug 21, 2025"}]]}]]}]}]]}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Categories"}],["$","ul",null,{"className":"dm-blog-categories","children":[["$","li","Case Study",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Case Study"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","EV Fleet",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"EV Fleet"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}],["$","li","Fleet Management",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Fleet Management"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","MileTruth",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"MileTruth"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],"$L29","$L2a","$L2b"]}]]}],"$L2c"]}]}] -26:["$","div",null,{"className":"dm-blog-footer-inner","children":[["$","nav",null,{"className":"dm-prevnext","aria-label":"Article navigation","children":[["$","$L1b",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-prevnext-card dm-prevnext-prev","children":[["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L27",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"19","y1":"12","x2":"5","y2":"12"}],["$","polyline",null,{"points":"12 19 5 12 12 5"}]]}],"Previous"]}],["$","span",null,{"className":"dm-prevnext-cat","children":"EV Fleet"}],["$","span",null,{"className":"dm-prevnext-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}]]}]]}],["$","$L1b",null,{"href":"/blog/fleet-reduction-without-compromising-delivery-volume","className":"dm-prevnext-card dm-prevnext-next","children":[["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":["Next",["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Fleet Management"}],["$","span",null,{"className":"dm-prevnext-title","children":"Fleet Reduction Without Compromising Delivery Volume"}]]}],["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-8.webp","alt":"Fleet Reduction Without Compromising Delivery Volume","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}]]}]]}],["$","div",null,{"className":"dm-related","children":[["$","h2",null,{"className":"dm-related-heading","children":"Related Articles"}],["$","div",null,{"className":"dm-related-grid","children":[["$","$L1c","how-ai-is-transforming-last-mile-ev-delivery",{"delay":0,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Technology"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L1c","42-less-distance-insights-from-our-hyderabad-hub",{"delay":0.08,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Case Study"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],"$L2d","$L2e"]}]]}]}],"$L2f"]}]]}],"$L30"]}] -29:["$","li","Operations",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Operations"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2a:["$","li","Sustainability",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Sustainability"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2b:["$","li","Technology",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Technology"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}] -2c:["$","section",null,{"className":"dm-blog-widget dm-blog-cta-card","children":[["$","h2",null,{"className":"dm-blog-cta-title","children":"Planning delivery routes?"}],["$","p",null,{"className":"dm-blog-cta-text","children":"Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time."}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-cta-btn","children":["Contact Us",["$","svg",null,{"width":"18","height":"18","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -2d:["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}] -2e:["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}] -2f:["$","$L1c","miletruth-ai-10-stages-to-smarter-dispatch",{"delay":0.16,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"MileTruth"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}] -30:["$","div",null,{"className":"dm-blog-contact-cta","children":[["$","div",null,{"className":"dm-blog-contact-cta-content","children":[["$","span",null,{"className":"dm-blog-contact-eyebrow","children":"Let's talk logistics"}],["$","h2",null,{"className":"dm-blog-contact-title","children":"Ready to move smarter with Doormile?"}],["$","p",null,{"className":"dm-blog-contact-sub","children":"Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding."}]]}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-contact-btn","children":["Get in Touch",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -12:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -31:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -f:null -14:[["$","title","0",{"children":"Why Mathematical Precision Beats Heuristics in Routing – Doormile"}],["$","meta","1",{"name":"description","content":"Fixed routing rules are easy to start with, but they often miss better stop sequences as order volume grows."}],["$","meta","2",{"name":"author","content":"Doormile Team"}],["$","meta","3",{"name":"keywords","content":"Technology,last-mile logistics,EV fleet,MileTruth,route optimisation"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","link","5",{"rel":"canonical","href":"https://www.doormile.com/blog/why-mathematical-precision-beats-heuristics-in-routing"}],["$","meta","6",{"property":"og:title","content":"Why Mathematical Precision Beats Heuristics in Routing"}],["$","meta","7",{"property":"og:description","content":"Fixed routing rules are easy to start with, but they often miss better stop sequences as order volume grows."}],["$","meta","8",{"property":"og:url","content":"https://www.doormile.com/blog/why-mathematical-precision-beats-heuristics-in-routing"}],["$","meta","9",{"property":"og:site_name","content":"Doormile"}],["$","meta","10",{"property":"og:image","content":"https://www.doormile.com/images/blog-post-pic-14.webp"}],["$","meta","11",{"property":"og:image:alt","content":"Why Mathematical Precision Beats Heuristics in Routing"}],["$","meta","12",{"property":"og:type","content":"article"}],["$","meta","13",{"property":"article:published_time","content":"2025-08-07T00:00:00.000Z"}],["$","meta","14",{"property":"article:author","content":"Doormile Team"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"Why Mathematical Precision Beats Heuristics in Routing"}],["$","meta","17",{"name":"twitter:description","content":"Fixed routing rules are easy to start with, but they often miss better stop sequences as order volume grows."}],["$","meta","18",{"name":"twitter:image","content":"https://www.doormile.com/images/blog-post-pic-14.webp"}],["$","link","19",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","21",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","22",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L31","23",{}]] diff --git a/build/blog/why-mathematical-precision-beats-heuristics-in-routing/__next._full.txt b/build/blog/why-mathematical-precision-beats-heuristics-in-routing/__next._full.txt deleted file mode 100644 index 0c30390..0000000 --- a/build/blog/why-mathematical-precision-beats-heuristics-in-routing/__next._full.txt +++ /dev/null @@ -1,545 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -d:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -e:"$Sreact.suspense" -11:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -13:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -15:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","blog","why-mathematical-precision-beats-heuristics-in-routing"],"q":"","i":false,"f":[[["",{"children":["blog",{"children":[["slug","why-mathematical-precision-beats-heuristics-in-routing","d",null],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":["$Lc",[["$","script","script-0",{"src":"/_next/static/chunks/0yvxf3ok9gcp_.js","async":true,"nonce":"$undefined"}]],["$","$Ld",null,{"children":["$","$e",null,{"name":"Next.MetadataOutlet","children":"$@f"}]}]]}],{},null,false,null]},null,false,"$@10"]},null,false,"$@10"]},null,false,null],["$","$1","h",{"children":[null,["$","$L11",null,{"children":"$L12"}],["$","div",null,{"hidden":true,"children":["$","$L13",null,{"children":["$","$e",null,{"name":"Next.Metadata","children":"$L14"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$15",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -16:[] -10:"$W16" -:HL["/images/blog-post-pic-14.webp","image"] -17:T3d6f, - .dm-single-blog { - --dm-red: #c01227; - --dm-red-hover: #e31d32; - --dm-radius-card: 22px; - --dm-radius-img: 20px; - --dm-radius-badge: 8px; - --dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05); - --dm-border: 1px solid rgba(15, 23, 42, 0.09); - --dm-space-p: 24px; - --dm-space-h: 32px; - --dm-space-img: 32px; - --dm-space-quote: 40px; - --dm-sticky-top: 138px; - --dm-measure: min(1100px, 100%); - font-family: var(--font-manrope), sans-serif; - } - - /* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6 - (120/80/60px UPPERCASE) rules with !important on our own classes. */ - .dm-single-blog :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline, - specificity 0-1-1) so blog links keep our colors and never get underlined. */ - .dm-single-blog a { text-decoration: none !important; } - - /* Page banner: tall homepage-scale frame with only badge + title inside */ - /* Compound selector (specificity 20) + !important beats the global 800px - single-class height rules so the blog banner can use viewport heights. */ - .custom-standard-hero-card.dm-banner-card { - height: 90vh !important; - min-height: 85vh !important; - } - @media (max-width: 1024px) { - .custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; } - } - @media (max-width: 600px) { - .custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; } - } - - .dm-banner-inner { - position: relative; width: 100%; height: 100%; - display: flex; flex-direction: column; align-items: center; justify-content: center; - text-align: center; gap: clamp(22px, 2.6vw, 34px); - padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px); - } - - .dm-banner-category { - display: inline-block; background: var(--dm-red); color: #fff; - font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px; - padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45); - } - .dm-banner-title { - font-family: var(--font-manrope), sans-serif !important; - font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important; - line-height: 1.16 !important; letter-spacing: -1.2px !important; - color: #ffffff !important; margin: 0; max-width: 820px; - text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38); - } - @media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } } - @media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } } - - /* Content wrap begins immediately below the banner */ - /* Shared content container: the SAME max-width + horizontal padding is used - by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings, - images, Prev/Next, Related Articles and the CTA banner all align to one - grid with identical left/right edges. Keep both in sync. */ - .dm-blog-wrap { - max-width: 1280px; margin: 0 auto; - /* 20px mobile padding floor → 40px on desktop; matches the footer container. */ - padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0; - } - @media (max-width: 767px) { - .dm-blog-wrap { - padding-left: 16px; - padding-right: 16px; - } - } - - /* ── Article meta bar (directly under the hero) ── */ - .dm-meta-bar { - display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px; - padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px); - border-bottom: 1px solid rgba(15,23,42,0.10); - } - .dm-meta-breadcrumb ol { - list-style: none; display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b; - } - .dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; } - .dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; } - .dm-meta-sep { color: #cbd5e1; } - .dm-meta-current { - color: #0f172a; font-weight: 700; - max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - } - @media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } } - .dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; } - .dm-meta-item { - display: inline-flex; align-items: center; gap: 7px; - font-size: 13.5px; font-weight: 600; color: #475569; - } - .dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; } - .dm-meta-author { color: #0f172a; font-weight: 700; } - @media (max-width: 600px) { .dm-meta-bar { gap: 12px; } } - .dm-blog-layout { - display: grid; grid-template-columns: minmax(0,1fr) 320px; - /* Tighter gap gives the reading column more room next to the 320px sidebar. */ - gap: clamp(28px, 3vw, 56px); align-items: start; - } - @media (max-width: 1024px) { - .dm-blog-layout { grid-template-columns: 1fr; gap: 48px; } - /* Single-column (tablet/mobile): cap the reading column and centre it so the - article never sits left-aligned with a large empty right gutter. */ - .dm-blog-main { max-width: 900px; margin-inline: auto; } - } - .dm-blog-main { min-width: 0; } - - /* ── Intro lead ── */ - .dm-blog-intro { - max-width: var(--dm-measure); - font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500; - color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px; - border-left: 3px solid var(--dm-red); - } - - /* ── Article body ── */ - .dm-article-body { max-width: var(--dm-measure); } - .dm-article-p { - font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450; - margin: 0 0 var(--dm-space-p); - } - .dm-article-h2 { - font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important; - color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h); - text-wrap: balance; - } - /* Each article block is wrapped in its OWN ScrollReveal
    , so a bare - :first-child rule matched every heading (each is the only child of its - wrapper) and zeroed its top margin, collapsing the gap above every - section heading. Scope the reset to only the article body's first block. */ - .dm-article-body > :first-child :where(.dm-article-h2, .dm-article-h3), - .dm-article-body > .dm-article-h2:first-child, - .dm-article-body > .dm-article-h3:first-child { margin-top: 0; } - .dm-article-h3 { - font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important; - color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px; - text-wrap: balance; - } - @media (max-width: 600px) { - .dm-article-p { font-size: 16px !important; } - .dm-article-ul li, .dm-article-ol li { font-size: 15.5px; } - .dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; } - .dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; } - } - - .dm-article-ul, .dm-article-ol { - /* Top margin (was 0) separates the list from the paragraph above it; - matching bottom margin keeps it clear of the next heading/paragraph. - Slightly larger than --dm-space-p so the list reads as its own block. */ - margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px); - padding-left: 2px; list-style: none; - display: flex; flex-direction: column; gap: 15px; - } - /* Prefixed with .dm-article-body so these beat the theme's global - ".logico-front-end ul li:before" fontello-glyph bullet (specificity 0,1,3), - which otherwise replaces our clean red dot with a misaligned checkmark glyph - and adds its own 1.7em indent. */ - .dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li { - position: relative; padding-left: 34px; - font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450; - } - .dm-article-body .dm-article-ul li::before { - content: ""; position: absolute; left: 7px; top: 10px; - width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red); - /* kill any inherited fontello glyph from the global rule */ - font-size: 0; line-height: 0; - } - .dm-article-ol { counter-reset: dm-li; } - .dm-article-body .dm-article-ol li { counter-increment: dm-li; } - .dm-article-body .dm-article-ol li::before { - content: counter(dm-li); position: absolute; left: 0; top: 0; - width: 24px; height: 24px; border-radius: 7px; - background: rgba(192,18,39,0.10); color: var(--dm-red); - font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; - } - - /* ── Quote ── */ - .dm-article-quote { - position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px; - background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%); - border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0; - box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06); - } - .dm-article-quote::before { - content: "\201C"; position: absolute; left: 22px; top: 8px; - font-family: Georgia, "Times New Roman", serif; - font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700; - } - .dm-article-quote p { - font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600; - font-style: italic; color: #1e293b; margin: 0; - } - .dm-article-quote cite { - display: block; margin-top: 16px; font-size: 13px; font-weight: 700; - font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px; - } - @media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } } - - /* ── Images ── */ - .dm-article-figure { margin: var(--dm-space-img) 0; } - .dm-article-figure-img { - position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; - border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10); - } - .dm-article-figure figcaption { - margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500; - text-align: center; font-style: italic; - } - - /* ── Sidebar ── */ - .dm-blog-aside-wrap { position: relative; } - .dm-blog-sidebar { - display: flex; flex-direction: column; gap: 18px; - position: sticky; top: var(--dm-sticky-top); - } - @media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } } - - .dm-blog-widget { - background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card); - padding: 20px; box-shadow: var(--dm-shadow-card); - } - .dm-blog-widget-title { - font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important; - letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important; - margin: 0 0 15px; padding: 0 0 12px; - border-bottom: 1px solid rgba(15,23,42,0.08); - overflow: visible; white-space: normal; word-break: normal; - } - - /* Search */ - .dm-sr-only { - position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; - overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; - } - .dm-blog-search { position: relative; } - .dm-blog-search-form { position: relative; } - .dm-blog-search-input { - width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px; - padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a; - background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; - } - .dm-blog-search-input::placeholder { color: #9c9c9c; } - .dm-blog-search-input:focus { - outline: none; border-color: var(--dm-red); background: #fff; - box-shadow: 0 0 0 3px rgba(192,18,39,0.11); - } - .dm-blog-search-icon { - position: absolute; right: 14px; top: 50%; transform: translateY(-50%); - color: #94a3b8; pointer-events: none; display: flex; - } - .dm-blog-search-results { - position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0; - background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px; - box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden; - } - .dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; } - .dm-blog-search-result { - display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; - border-radius: 10px; text-decoration: none; transition: background .15s ease; - } - .dm-blog-search-result:hover { background: #f8fafc; } - .dm-blog-search-result-cat { - font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red); - } - .dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; } - .dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; } - - /* Recent posts */ - .dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; } - .dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; } - .dm-blog-recent-thumb { - position: relative; flex: 0 0 62px; width: 62px; height: 62px; - border-radius: 13px; overflow: hidden; background: #f1f5f9; - } - .dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; } - .dm-blog-recent-title { - font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); } - .dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; } - - /* Categories */ - .dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; } - .dm-blog-category-item { - display: flex; align-items: center; justify-content: space-between; gap: 10px; - padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important; - border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease; - } - .dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; } - .dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; } - .dm-blog-category-item > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .dm-blog-category-count { - flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9; - min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex; - align-items: center; justify-content: center; padding: 0 7px; - } - - /* CTA card */ - .dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; } - .dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; } - .dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; } - .dm-blog-cta-btn { - display: inline-flex; align-items: center; gap: 8px; - background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700; - padding: 12px 22px; border-radius: 12px; text-decoration: none; - transition: background .2s ease, transform .2s ease; - } - .dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } -c:["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"headline\":\"Why Mathematical Precision Beats Heuristics in Routing\",\"description\":\"Fixed routing rules are easy to start with, but they often miss better stop sequences as order volume grows.\",\"image\":[\"https://www.doormile.com/images/blog-post-pic-14.webp\"],\"datePublished\":\"2025-08-07T00:00:00.000Z\",\"dateModified\":\"2025-08-07T00:00:00.000Z\",\"author\":{\"@type\":\"Organization\",\"name\":\"Doormile Team\",\"url\":\"https://www.doormile.com\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Doormile\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.doormile.com/images/cropped-image-2.png\"}},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.doormile.com/blog/why-mathematical-precision-beats-heuristics-in-routing\"},\"articleSection\":\"Technology\"}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://www.doormile.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https://www.doormile.com/blog\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Why Mathematical Precision Beats Heuristics in Routing\",\"item\":\"https://www.doormile.com/blog/why-mathematical-precision-beats-heuristics-in-routing\"}]}"}}],["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":[["$","article",null,{"className":"dm-single-blog","children":[["$","link",null,{"rel":"preload","as":"image","href":"/images/blog-post-pic-14.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$17"}}],"$L18","$L19"]}],"$L1a"]}]}]]}] -1b:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],""] -1c:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"ScrollReveal"] -18:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card dm-banner-card","style":{"backgroundImage":"url(/images/blog-post-pic-14.webp)","--hero-overlay":"linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)"},"children":["$","div",null,{"className":"e-con-inner dm-banner-inner","children":[["$","span",null,{"className":"dm-banner-category","children":"Technology"}],["$","h1",null,{"className":"dm-banner-title","children":"Why Mathematical Precision Beats Heuristics in Routing"}]]}]}]}] -19:["$","div",null,{"className":"dm-blog-wrap","children":[["$","div",null,{"className":"dm-meta-bar","children":[["$","nav",null,{"className":"dm-meta-breadcrumb","aria-label":"Breadcrumb","children":["$","ol",null,{"children":[["$","li",null,{"children":["$","$L1b",null,{"href":"/","children":"Home"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"children":["$","$L1b",null,{"href":"/blog","children":"Blog"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"aria-current":"page","className":"dm-meta-current","children":"Why Mathematical Precision Beats Heuristics in Routing"}]]}]}],["$","div",null,{"className":"dm-meta-items","children":[["$","span",null,{"className":"dm-meta-item dm-meta-author","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","path",null,{"d":"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}],["$","circle",null,{"cx":"12","cy":"7","r":"4"}]]}],"Doormile Team"]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"2"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}]]}],["$","time",null,{"dateTime":"2025-08-07","children":"Aug 7, 2025"}]]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","circle",null,{"cx":"12","cy":"12","r":"9"}],["$","polyline",null,{"points":"12 7 12 12 15 14"}]]}],2," min read"]}]]}]]}],["$","div",null,{"className":"dm-blog-layout","children":[["$","div",null,{"className":"dm-blog-main","children":[["$","p",null,{"className":"dm-blog-intro","children":"Simple routing rules are fast to set up, but they can quietly add distance every day. Better planning compares more route options before dispatch."}],["$","div",null,{"className":"dm-article-body","children":[["$","$L1c","0",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"In last-mile logistics, a missed SLA is rarely caused by one big failure. It usually comes from small delays adding up across a route. Why Mathematical Precision Beats Heuristics in Routing looks at how delivery teams can spot those delays early and plan around them before vehicles leave the hub."}]}],["$","$L1c","1",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Why this matters for fleet teams"}]}],["$","$L1c","2",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Every extra kilometre costs money. It uses fuel or charge, adds rider time, wears down vehicles, and increases the chance of a late delivery. When routes are built from fixed zones or old habits, those costs repeat every day."}]}],["$","$L1c","3",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"Fewer vehicles needed for the same number of drops"}],["$","li","1",{"children":"Lower cost per drop through better stop sequencing"}],["$","li","2",{"children":"ETAs that match traffic, distance, and delivery windows"}],["$","li","3",{"children":"Less fuel or charge used per completed order"}]]}]}],["$","$L1c","4",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"From orders to dispatch"}]}],["$","$L1c","5",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"A good dispatch plan starts with the basics: order locations, promised delivery windows, rider capacity, vehicle range, and known traffic trouble spots. MileTruth™ checks those inputs before dispatch so the team is not fixing avoidable mistakes on the road."}]}],["$","$L1c","6",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","figure",null,{"className":"dm-article-figure","children":[["$","span",null,{"className":"dm-article-figure-img","children":"$L1d"}],"$L1e"]}]}],"$L1f","$L20","$L21","$L22","$L23"]}]]}],"$L24"]}]]}] -25:T2021, - .dm-blog-footer { - font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32; - /* The global theme applies 72px top/bottom section padding — strip it so the - inner container is the single source of vertical rhythm (no double gap). */ - padding: 0 !important; - } - /* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */ - .dm-blog-footer :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline) */ - .dm-blog-footer a { text-decoration: none !important; } - /* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px - max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA - align to the exact same left/right edges as the article body above. - Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a - consistent ~64–72px section→section gap (no 120px+ voids). */ - .dm-blog-footer-inner { - max-width: 1280px; margin: 0 auto; - /* Compact vertical rhythm on an 8px system. Top padding sets the - article→Prev/Next gap (~24–32px); the inter-section gap sets the - Prev/Next→Related gap (~32–48px). No large arbitrary voids. */ - /* Minimal bottom padding — the global site footer already contributes its - own 20px top inset, so the CTA banner sits close to it without a void. */ - padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px); - display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px); - } - @media (max-width: 767px) { - .dm-blog-footer-inner { - padding-left: 16px; - padding-right: 16px; - } - } - - /* Prev / Next */ - .dm-prevnext { - display: grid; grid-template-columns: 1fr 1fr; gap: 20px; - /* Halved from 40px: tight divider→cards spacing without crowding. */ - padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08); - } - @media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } } - .dm-prevnext-placeholder { display: block; } - .dm-prevnext-card { - display: flex; gap: 16px; align-items: center; padding: 16px; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; - } - .dm-prevnext-card:hover { - transform: translateY(-4px); border-color: rgba(192,18,39,0.2); - box-shadow: 0 16px 34px rgba(192,18,39,0.10); - } - .dm-prevnext-thumb { - position: relative; flex: 0 0 80px; width: 80px; height: 80px; - border-radius: 16px; overflow: hidden; background: #f1f5f9; - } - .dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; } - .dm-prevnext-next { text-align: right; } - .dm-prevnext-next .dm-prevnext-text { align-items: flex-end; } - .dm-prevnext-label { - display: inline-flex; align-items: center; gap: 6px; - font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red); - } - .dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; } - .dm-prevnext-title { - font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); } - - /* Related */ - .dm-related-heading { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important; - line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px; - } - .dm-related-grid { - display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; - } - @media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } } - @media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } } - - .dm-related-card { - display: flex; flex-direction: column; height: 100%; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none; - transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease; - } - .dm-related-card:hover { - transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13); - border-color: rgba(192,18,39,0.2); - } - .dm-related-img { - position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9; - } - .dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-img img { transform: scale(1.05); } - .dm-related-badge { - position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff; - font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px; - padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25); - } - .dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; } - .dm-related-card-title { - font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important; - letter-spacing: -.2px !important; margin: 0 0 10px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-related-card:hover .dm-related-card-title { color: var(--dm-red); } - .dm-related-card-excerpt { - font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - } - .dm-related-readmore { - margin-top: auto; display: inline-flex; align-items: center; gap: 7px; - font-size: 12.5px; font-weight: 800; color: var(--dm-red); - text-transform: uppercase; letter-spacing: .6px; - } - .dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); } - - /* Contact CTA banner */ - .dm-blog-contact-cta { - display: flex; align-items: center; justify-content: space-between; gap: 32px; - flex-wrap: wrap; - background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%); - border-radius: 30px; padding: clamp(32px, 4vw, 56px); - position: relative; overflow: hidden; - } - .dm-blog-contact-cta::after { - content: ""; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px; - background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%); - pointer-events: none; - } - .dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; } - .dm-blog-contact-eyebrow { - display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase; - letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px; - } - .dm-blog-contact-title { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important; - letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance; - } - .dm-blog-contact-sub { - font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450; - } - .dm-blog-contact-btn { - position: relative; z-index: 1; flex-shrink: 0; - display: inline-flex; align-items: center; justify-content: center; gap: 10px; - background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700; - padding: 16px 32px; border-radius: 16px; text-decoration: none; - box-shadow: 0 10px 26px rgba(192,18,39,0.34); - transition: background .2s ease, transform .2s ease; - } - .dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } - @media (max-width: 720px) { - .dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; } - .dm-blog-contact-btn { width: 100%; } - } -1a:["$","section",null,{"className":"dm-blog-footer","aria-label":"More articles","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$25"}}],"$L26"]}] -27:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"Image"] -28:I[23096,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"default"] -1d:["$","$L27",null,{"src":"/images/blog-post-pic-14.webp","alt":"Why Mathematical Precision Beats Heuristics in Routing","fill":true,"sizes":"(max-width: 768px) 100vw, 760px","style":{"objectFit":"cover"}}] -1e:["$","figcaption",null,{"children":"Technology: route planning decisions made before dispatch."}] -1f:["$","$L1c","7",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","blockquote",null,{"className":"dm-article-quote","children":[["$","p",null,{"children":"A route should be checked before the rider leaves, not explained after the customer calls."}],["$","cite",null,{"children":"Doormile Operations"}]]}]}] -20:["$","$L1c","8",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Putting it into practice"}]}] -21:["$","$L1c","9",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The best improvements usually start with simple measurements. Track distance per route, failed delivery windows, rider idle time, and orders moved between vehicles after dispatch. Those numbers show where the operation is leaking time."}]}] -22:["$","$L1c","10",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ol",null,{"className":"dm-article-ol","children":[["$","li","0",{"children":"Benchmark today's distance, fleet size, and on-time rate."}],["$","li","1",{"children":"Include vehicle capacity, delivery windows, rider shifts, and battery charge."}],["$","li","2",{"children":"Check routes against traffic and customer commitments before dispatch."}],["$","li","3",{"children":"Compare the next dispatch cycle against the old plan."}]]}]}] -23:["$","$L1c","11",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Better routing is not about pushing riders harder. It is about giving them a plan that already accounts for the real day ahead."}]}] -24:["$","div",null,{"className":"dm-blog-aside-wrap","children":["$","aside",null,{"className":"dm-blog-sidebar","aria-label":"Blog sidebar","children":[["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Search"}],["$","$L28",null,{}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Recent Posts"}],["$","ul",null,{"className":"dm-blog-recent","children":[["$","li","how-ai-is-transforming-last-mile-ev-delivery",{"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","time",null,{"dateTime":"2025-10-02","className":"dm-blog-recent-date","children":"Oct 2, 2025"}]]}]]}]}],["$","li","42-less-distance-insights-from-our-hyderabad-hub",{"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","time",null,{"dateTime":"2025-09-18","className":"dm-blog-recent-date","children":"Sep 18, 2025"}]]}]]}]}],["$","li","miletruth-ai-10-stages-to-smarter-dispatch",{"children":["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","time",null,{"dateTime":"2025-09-05","className":"dm-blog-recent-date","children":"Sep 5, 2025"}]]}]]}]}],["$","li","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"children":["$","$L1b",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L27",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","time",null,{"dateTime":"2025-08-21","className":"dm-blog-recent-date","children":"Aug 21, 2025"}]]}]]}]}]]}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Categories"}],["$","ul",null,{"className":"dm-blog-categories","children":[["$","li","Case Study",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Case Study"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","EV Fleet",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"EV Fleet"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}],["$","li","Fleet Management",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Fleet Management"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","MileTruth",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"MileTruth"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],"$L29","$L2a","$L2b"]}]]}],"$L2c"]}]}] -26:["$","div",null,{"className":"dm-blog-footer-inner","children":[["$","nav",null,{"className":"dm-prevnext","aria-label":"Article navigation","children":[["$","$L1b",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-prevnext-card dm-prevnext-prev","children":[["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L27",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"19","y1":"12","x2":"5","y2":"12"}],["$","polyline",null,{"points":"12 19 5 12 12 5"}]]}],"Previous"]}],["$","span",null,{"className":"dm-prevnext-cat","children":"EV Fleet"}],["$","span",null,{"className":"dm-prevnext-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}]]}]]}],["$","$L1b",null,{"href":"/blog/fleet-reduction-without-compromising-delivery-volume","className":"dm-prevnext-card dm-prevnext-next","children":[["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":["Next",["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Fleet Management"}],["$","span",null,{"className":"dm-prevnext-title","children":"Fleet Reduction Without Compromising Delivery Volume"}]]}],["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L27",null,{"src":"/images/blog-post-pic-8.webp","alt":"Fleet Reduction Without Compromising Delivery Volume","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}]]}]]}],["$","div",null,{"className":"dm-related","children":[["$","h2",null,{"className":"dm-related-heading","children":"Related Articles"}],["$","div",null,{"className":"dm-related-grid","children":[["$","$L1c","how-ai-is-transforming-last-mile-ev-delivery",{"delay":0,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Technology"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L1c","42-less-distance-insights-from-our-hyderabad-hub",{"delay":0.08,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Case Study"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],"$L2d","$L2e"]}]]}]}],"$L2f"]}]]}],"$L30"]}] -29:["$","li","Operations",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Operations"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2a:["$","li","Sustainability",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Sustainability"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -2b:["$","li","Technology",{"children":["$","$L1b",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Technology"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}] -2c:["$","section",null,{"className":"dm-blog-widget dm-blog-cta-card","children":[["$","h2",null,{"className":"dm-blog-cta-title","children":"Planning delivery routes?"}],["$","p",null,{"className":"dm-blog-cta-text","children":"Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time."}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-cta-btn","children":["Contact Us",["$","svg",null,{"width":"18","height":"18","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -2d:["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}] -2e:["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}] -2f:["$","$L1c","miletruth-ai-10-stages-to-smarter-dispatch",{"delay":0.16,"duration":0.7,"yOffset":30,"children":["$","$L1b",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L27",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"MileTruth"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}] -30:["$","div",null,{"className":"dm-blog-contact-cta","children":[["$","div",null,{"className":"dm-blog-contact-cta-content","children":[["$","span",null,{"className":"dm-blog-contact-eyebrow","children":"Let's talk logistics"}],["$","h2",null,{"className":"dm-blog-contact-title","children":"Ready to move smarter with Doormile?"}],["$","p",null,{"className":"dm-blog-contact-sub","children":"Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding."}]]}],["$","$L1b",null,{"href":"/contact","className":"dm-blog-contact-btn","children":["Get in Touch",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -12:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -31:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -f:null -14:[["$","title","0",{"children":"Why Mathematical Precision Beats Heuristics in Routing – Doormile"}],["$","meta","1",{"name":"description","content":"Fixed routing rules are easy to start with, but they often miss better stop sequences as order volume grows."}],["$","meta","2",{"name":"author","content":"Doormile Team"}],["$","meta","3",{"name":"keywords","content":"Technology,last-mile logistics,EV fleet,MileTruth,route optimisation"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","link","5",{"rel":"canonical","href":"https://www.doormile.com/blog/why-mathematical-precision-beats-heuristics-in-routing"}],["$","meta","6",{"property":"og:title","content":"Why Mathematical Precision Beats Heuristics in Routing"}],["$","meta","7",{"property":"og:description","content":"Fixed routing rules are easy to start with, but they often miss better stop sequences as order volume grows."}],["$","meta","8",{"property":"og:url","content":"https://www.doormile.com/blog/why-mathematical-precision-beats-heuristics-in-routing"}],["$","meta","9",{"property":"og:site_name","content":"Doormile"}],["$","meta","10",{"property":"og:image","content":"https://www.doormile.com/images/blog-post-pic-14.webp"}],["$","meta","11",{"property":"og:image:alt","content":"Why Mathematical Precision Beats Heuristics in Routing"}],["$","meta","12",{"property":"og:type","content":"article"}],["$","meta","13",{"property":"article:published_time","content":"2025-08-07T00:00:00.000Z"}],["$","meta","14",{"property":"article:author","content":"Doormile Team"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"Why Mathematical Precision Beats Heuristics in Routing"}],["$","meta","17",{"name":"twitter:description","content":"Fixed routing rules are easy to start with, but they often miss better stop sequences as order volume grows."}],["$","meta","18",{"name":"twitter:image","content":"https://www.doormile.com/images/blog-post-pic-14.webp"}],["$","link","19",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","21",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","22",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L31","23",{}]] diff --git a/build/blog/why-mathematical-precision-beats-heuristics-in-routing/__next._head.txt b/build/blog/why-mathematical-precision-beats-heuristics-in-routing/__next._head.txt deleted file mode 100644 index 43c123e..0000000 --- a/build/blog/why-mathematical-precision-beats-heuristics-in-routing/__next._head.txt +++ /dev/null @@ -1,6 +0,0 @@ -1:"$Sreact.fragment" -2:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -3:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -4:"$Sreact.suspense" -5:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Why Mathematical Precision Beats Heuristics in Routing – Doormile"}],["$","meta","1",{"name":"description","content":"Fixed routing rules are easy to start with, but they often miss better stop sequences as order volume grows."}],["$","meta","2",{"name":"author","content":"Doormile Team"}],["$","meta","3",{"name":"keywords","content":"Technology,last-mile logistics,EV fleet,MileTruth,route optimisation"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","link","5",{"rel":"canonical","href":"https://www.doormile.com/blog/why-mathematical-precision-beats-heuristics-in-routing"}],["$","meta","6",{"property":"og:title","content":"Why Mathematical Precision Beats Heuristics in Routing"}],["$","meta","7",{"property":"og:description","content":"Fixed routing rules are easy to start with, but they often miss better stop sequences as order volume grows."}],["$","meta","8",{"property":"og:url","content":"https://www.doormile.com/blog/why-mathematical-precision-beats-heuristics-in-routing"}],["$","meta","9",{"property":"og:site_name","content":"Doormile"}],["$","meta","10",{"property":"og:image","content":"https://www.doormile.com/images/blog-post-pic-14.webp"}],["$","meta","11",{"property":"og:image:alt","content":"Why Mathematical Precision Beats Heuristics in Routing"}],["$","meta","12",{"property":"og:type","content":"article"}],["$","meta","13",{"property":"article:published_time","content":"2025-08-07T00:00:00.000Z"}],["$","meta","14",{"property":"article:author","content":"Doormile Team"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"Why Mathematical Precision Beats Heuristics in Routing"}],["$","meta","17",{"name":"twitter:description","content":"Fixed routing rules are easy to start with, but they often miss better stop sequences as order volume grows."}],["$","meta","18",{"name":"twitter:image","content":"https://www.doormile.com/images/blog-post-pic-14.webp"}],["$","link","19",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","21",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","22",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L5","23",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/why-mathematical-precision-beats-heuristics-in-routing/__next._index.txt b/build/blog/why-mathematical-precision-beats-heuristics-in-routing/__next._index.txt deleted file mode 100644 index d0b3355..0000000 --- a/build/blog/why-mathematical-precision-beats-heuristics-in-routing/__next._index.txt +++ /dev/null @@ -1,15 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","template":["$","$La",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/why-mathematical-precision-beats-heuristics-in-routing/__next._tree.txt b/build/blog/why-mathematical-precision-beats-heuristics-in-routing/__next._tree.txt deleted file mode 100644 index cfcf78d..0000000 --- a/build/blog/why-mathematical-precision-beats-heuristics-in-routing/__next._tree.txt +++ /dev/null @@ -1,10 +0,0 @@ -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -:HL["/images/blog-post-pic-14.webp","image"] -0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"blog","param":null,"prefetchHints":0,"slots":{"children":{"name":"slug","param":{"type":"d","key":"why-mathematical-precision-beats-heuristics-in-routing","siblings":null},"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/why-mathematical-precision-beats-heuristics-in-routing/__next.blog.$d$slug.__PAGE__.txt b/build/blog/why-mathematical-precision-beats-heuristics-in-routing/__next.blog.$d$slug.__PAGE__.txt deleted file mode 100644 index d991266..0000000 --- a/build/blog/why-mathematical-precision-beats-heuristics-in-routing/__next.blog.$d$slug.__PAGE__.txt +++ /dev/null @@ -1,520 +0,0 @@ -1:"$Sreact.fragment" -8:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],""] -9:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"ScrollReveal"] -14:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -15:"$Sreact.suspense" -17:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"Image"] -18:I[23096,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yvxf3ok9gcp_.js"],"default"] -:HL["/images/blog-post-pic-14.webp","image"] -2:T3d6f, - .dm-single-blog { - --dm-red: #c01227; - --dm-red-hover: #e31d32; - --dm-radius-card: 22px; - --dm-radius-img: 20px; - --dm-radius-badge: 8px; - --dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05); - --dm-border: 1px solid rgba(15, 23, 42, 0.09); - --dm-space-p: 24px; - --dm-space-h: 32px; - --dm-space-img: 32px; - --dm-space-quote: 40px; - --dm-sticky-top: 138px; - --dm-measure: min(1100px, 100%); - font-family: var(--font-manrope), sans-serif; - } - - /* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6 - (120/80/60px UPPERCASE) rules with !important on our own classes. */ - .dm-single-blog :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline, - specificity 0-1-1) so blog links keep our colors and never get underlined. */ - .dm-single-blog a { text-decoration: none !important; } - - /* Page banner: tall homepage-scale frame with only badge + title inside */ - /* Compound selector (specificity 20) + !important beats the global 800px - single-class height rules so the blog banner can use viewport heights. */ - .custom-standard-hero-card.dm-banner-card { - height: 90vh !important; - min-height: 85vh !important; - } - @media (max-width: 1024px) { - .custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; } - } - @media (max-width: 600px) { - .custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; } - } - - .dm-banner-inner { - position: relative; width: 100%; height: 100%; - display: flex; flex-direction: column; align-items: center; justify-content: center; - text-align: center; gap: clamp(22px, 2.6vw, 34px); - padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px); - } - - .dm-banner-category { - display: inline-block; background: var(--dm-red); color: #fff; - font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px; - padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45); - } - .dm-banner-title { - font-family: var(--font-manrope), sans-serif !important; - font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important; - line-height: 1.16 !important; letter-spacing: -1.2px !important; - color: #ffffff !important; margin: 0; max-width: 820px; - text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38); - } - @media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } } - @media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } } - - /* Content wrap begins immediately below the banner */ - /* Shared content container: the SAME max-width + horizontal padding is used - by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings, - images, Prev/Next, Related Articles and the CTA banner all align to one - grid with identical left/right edges. Keep both in sync. */ - .dm-blog-wrap { - max-width: 1280px; margin: 0 auto; - /* 20px mobile padding floor → 40px on desktop; matches the footer container. */ - padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0; - } - @media (max-width: 767px) { - .dm-blog-wrap { - padding-left: 16px; - padding-right: 16px; - } - } - - /* ── Article meta bar (directly under the hero) ── */ - .dm-meta-bar { - display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px; - padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px); - border-bottom: 1px solid rgba(15,23,42,0.10); - } - .dm-meta-breadcrumb ol { - list-style: none; display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b; - } - .dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; } - .dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; } - .dm-meta-sep { color: #cbd5e1; } - .dm-meta-current { - color: #0f172a; font-weight: 700; - max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - } - @media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } } - .dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; } - .dm-meta-item { - display: inline-flex; align-items: center; gap: 7px; - font-size: 13.5px; font-weight: 600; color: #475569; - } - .dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; } - .dm-meta-author { color: #0f172a; font-weight: 700; } - @media (max-width: 600px) { .dm-meta-bar { gap: 12px; } } - .dm-blog-layout { - display: grid; grid-template-columns: minmax(0,1fr) 320px; - /* Tighter gap gives the reading column more room next to the 320px sidebar. */ - gap: clamp(28px, 3vw, 56px); align-items: start; - } - @media (max-width: 1024px) { - .dm-blog-layout { grid-template-columns: 1fr; gap: 48px; } - /* Single-column (tablet/mobile): cap the reading column and centre it so the - article never sits left-aligned with a large empty right gutter. */ - .dm-blog-main { max-width: 900px; margin-inline: auto; } - } - .dm-blog-main { min-width: 0; } - - /* ── Intro lead ── */ - .dm-blog-intro { - max-width: var(--dm-measure); - font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500; - color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px; - border-left: 3px solid var(--dm-red); - } - - /* ── Article body ── */ - .dm-article-body { max-width: var(--dm-measure); } - .dm-article-p { - font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450; - margin: 0 0 var(--dm-space-p); - } - .dm-article-h2 { - font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important; - color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h); - text-wrap: balance; - } - /* Each article block is wrapped in its OWN ScrollReveal
    , so a bare - :first-child rule matched every heading (each is the only child of its - wrapper) and zeroed its top margin, collapsing the gap above every - section heading. Scope the reset to only the article body's first block. */ - .dm-article-body > :first-child :where(.dm-article-h2, .dm-article-h3), - .dm-article-body > .dm-article-h2:first-child, - .dm-article-body > .dm-article-h3:first-child { margin-top: 0; } - .dm-article-h3 { - font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important; - color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px; - text-wrap: balance; - } - @media (max-width: 600px) { - .dm-article-p { font-size: 16px !important; } - .dm-article-ul li, .dm-article-ol li { font-size: 15.5px; } - .dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; } - .dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; } - } - - .dm-article-ul, .dm-article-ol { - /* Top margin (was 0) separates the list from the paragraph above it; - matching bottom margin keeps it clear of the next heading/paragraph. - Slightly larger than --dm-space-p so the list reads as its own block. */ - margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px); - padding-left: 2px; list-style: none; - display: flex; flex-direction: column; gap: 15px; - } - /* Prefixed with .dm-article-body so these beat the theme's global - ".logico-front-end ul li:before" fontello-glyph bullet (specificity 0,1,3), - which otherwise replaces our clean red dot with a misaligned checkmark glyph - and adds its own 1.7em indent. */ - .dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li { - position: relative; padding-left: 34px; - font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450; - } - .dm-article-body .dm-article-ul li::before { - content: ""; position: absolute; left: 7px; top: 10px; - width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red); - /* kill any inherited fontello glyph from the global rule */ - font-size: 0; line-height: 0; - } - .dm-article-ol { counter-reset: dm-li; } - .dm-article-body .dm-article-ol li { counter-increment: dm-li; } - .dm-article-body .dm-article-ol li::before { - content: counter(dm-li); position: absolute; left: 0; top: 0; - width: 24px; height: 24px; border-radius: 7px; - background: rgba(192,18,39,0.10); color: var(--dm-red); - font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; - } - - /* ── Quote ── */ - .dm-article-quote { - position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px; - background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%); - border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0; - box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06); - } - .dm-article-quote::before { - content: "\201C"; position: absolute; left: 22px; top: 8px; - font-family: Georgia, "Times New Roman", serif; - font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700; - } - .dm-article-quote p { - font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600; - font-style: italic; color: #1e293b; margin: 0; - } - .dm-article-quote cite { - display: block; margin-top: 16px; font-size: 13px; font-weight: 700; - font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px; - } - @media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } } - - /* ── Images ── */ - .dm-article-figure { margin: var(--dm-space-img) 0; } - .dm-article-figure-img { - position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; - border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10); - } - .dm-article-figure figcaption { - margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500; - text-align: center; font-style: italic; - } - - /* ── Sidebar ── */ - .dm-blog-aside-wrap { position: relative; } - .dm-blog-sidebar { - display: flex; flex-direction: column; gap: 18px; - position: sticky; top: var(--dm-sticky-top); - } - @media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } } - - .dm-blog-widget { - background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card); - padding: 20px; box-shadow: var(--dm-shadow-card); - } - .dm-blog-widget-title { - font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important; - letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important; - margin: 0 0 15px; padding: 0 0 12px; - border-bottom: 1px solid rgba(15,23,42,0.08); - overflow: visible; white-space: normal; word-break: normal; - } - - /* Search */ - .dm-sr-only { - position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; - overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; - } - .dm-blog-search { position: relative; } - .dm-blog-search-form { position: relative; } - .dm-blog-search-input { - width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px; - padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a; - background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; - } - .dm-blog-search-input::placeholder { color: #9c9c9c; } - .dm-blog-search-input:focus { - outline: none; border-color: var(--dm-red); background: #fff; - box-shadow: 0 0 0 3px rgba(192,18,39,0.11); - } - .dm-blog-search-icon { - position: absolute; right: 14px; top: 50%; transform: translateY(-50%); - color: #94a3b8; pointer-events: none; display: flex; - } - .dm-blog-search-results { - position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0; - background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px; - box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden; - } - .dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; } - .dm-blog-search-result { - display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; - border-radius: 10px; text-decoration: none; transition: background .15s ease; - } - .dm-blog-search-result:hover { background: #f8fafc; } - .dm-blog-search-result-cat { - font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red); - } - .dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; } - .dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; } - - /* Recent posts */ - .dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; } - .dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; } - .dm-blog-recent-thumb { - position: relative; flex: 0 0 62px; width: 62px; height: 62px; - border-radius: 13px; overflow: hidden; background: #f1f5f9; - } - .dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; } - .dm-blog-recent-title { - font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); } - .dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; } - - /* Categories */ - .dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; } - .dm-blog-category-item { - display: flex; align-items: center; justify-content: space-between; gap: 10px; - padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important; - border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease; - } - .dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; } - .dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; } - .dm-blog-category-item > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .dm-blog-category-count { - flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9; - min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex; - align-items: center; justify-content: center; padding: 0 7px; - } - - /* CTA card */ - .dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; } - .dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; } - .dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; } - .dm-blog-cta-btn { - display: inline-flex; align-items: center; gap: 8px; - background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700; - padding: 12px 22px; border-radius: 12px; text-decoration: none; - transition: background .2s ease, transform .2s ease; - } - .dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } -0:{"rsc":["$","$1","c",{"children":[["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"headline\":\"Why Mathematical Precision Beats Heuristics in Routing\",\"description\":\"Fixed routing rules are easy to start with, but they often miss better stop sequences as order volume grows.\",\"image\":[\"https://www.doormile.com/images/blog-post-pic-14.webp\"],\"datePublished\":\"2025-08-07T00:00:00.000Z\",\"dateModified\":\"2025-08-07T00:00:00.000Z\",\"author\":{\"@type\":\"Organization\",\"name\":\"Doormile Team\",\"url\":\"https://www.doormile.com\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Doormile\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.doormile.com/images/cropped-image-2.png\"}},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.doormile.com/blog/why-mathematical-precision-beats-heuristics-in-routing\"},\"articleSection\":\"Technology\"}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://www.doormile.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https://www.doormile.com/blog\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Why Mathematical Precision Beats Heuristics in Routing\",\"item\":\"https://www.doormile.com/blog/why-mathematical-precision-beats-heuristics-in-routing\"}]}"}}],["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":[["$","article",null,{"className":"dm-single-blog","children":[["$","link",null,{"rel":"preload","as":"image","href":"/images/blog-post-pic-14.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$2"}}],"$L3","$L4"]}],"$L5"]}]}]]}],["$L6"],"$L7"]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} -3:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card dm-banner-card","style":{"backgroundImage":"url(/images/blog-post-pic-14.webp)","--hero-overlay":"linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)"},"children":["$","div",null,{"className":"e-con-inner dm-banner-inner","children":[["$","span",null,{"className":"dm-banner-category","children":"Technology"}],["$","h1",null,{"className":"dm-banner-title","children":"Why Mathematical Precision Beats Heuristics in Routing"}]]}]}]}] -4:["$","div",null,{"className":"dm-blog-wrap","children":[["$","div",null,{"className":"dm-meta-bar","children":[["$","nav",null,{"className":"dm-meta-breadcrumb","aria-label":"Breadcrumb","children":["$","ol",null,{"children":[["$","li",null,{"children":["$","$L8",null,{"href":"/","children":"Home"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"children":["$","$L8",null,{"href":"/blog","children":"Blog"}]}],["$","li",null,{"aria-hidden":"true","className":"dm-meta-sep","children":"/"}],["$","li",null,{"aria-current":"page","className":"dm-meta-current","children":"Why Mathematical Precision Beats Heuristics in Routing"}]]}]}],["$","div",null,{"className":"dm-meta-items","children":[["$","span",null,{"className":"dm-meta-item dm-meta-author","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","path",null,{"d":"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}],["$","circle",null,{"cx":"12","cy":"7","r":"4"}]]}],"Doormile Team"]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"2"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}]]}],["$","time",null,{"dateTime":"2025-08-07","children":"Aug 7, 2025"}]]}],["$","span",null,{"className":"dm-meta-item","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","circle",null,{"cx":"12","cy":"12","r":"9"}],["$","polyline",null,{"points":"12 7 12 12 15 14"}]]}],2," min read"]}]]}]]}],["$","div",null,{"className":"dm-blog-layout","children":[["$","div",null,{"className":"dm-blog-main","children":[["$","p",null,{"className":"dm-blog-intro","children":"Simple routing rules are fast to set up, but they can quietly add distance every day. Better planning compares more route options before dispatch."}],["$","div",null,{"className":"dm-article-body","children":[["$","$L9","0",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"In last-mile logistics, a missed SLA is rarely caused by one big failure. It usually comes from small delays adding up across a route. Why Mathematical Precision Beats Heuristics in Routing looks at how delivery teams can spot those delays early and plan around them before vehicles leave the hub."}]}],["$","$L9","1",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Why this matters for fleet teams"}]}],["$","$L9","2",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Every extra kilometre costs money. It uses fuel or charge, adds rider time, wears down vehicles, and increases the chance of a late delivery. When routes are built from fixed zones or old habits, those costs repeat every day."}]}],["$","$L9","3",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ul",null,{"className":"dm-article-ul","children":[["$","li","0",{"children":"Fewer vehicles needed for the same number of drops"}],["$","li","1",{"children":"Lower cost per drop through better stop sequencing"}],["$","li","2",{"children":"ETAs that match traffic, distance, and delivery windows"}],["$","li","3",{"children":"Less fuel or charge used per completed order"}]]}]}],["$","$L9","4",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h3",null,{"className":"dm-article-h3","children":"From orders to dispatch"}]}],["$","$L9","5",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"A good dispatch plan starts with the basics: order locations, promised delivery windows, rider capacity, vehicle range, and known traffic trouble spots. MileTruth™ checks those inputs before dispatch so the team is not fixing avoidable mistakes on the road."}]}],["$","$L9","6",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","figure",null,{"className":"dm-article-figure","children":[["$","span",null,{"className":"dm-article-figure-img","children":"$La"}],"$Lb"]}]}],"$Lc","$Ld","$Le","$Lf","$L10"]}]]}],"$L11"]}]]}] -12:T2021, - .dm-blog-footer { - font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32; - /* The global theme applies 72px top/bottom section padding — strip it so the - inner container is the single source of vertical rhythm (no double gap). */ - padding: 0 !important; - } - /* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */ - .dm-blog-footer :where(h1, h2, h3, h4, h5, h6) { - font-family: var(--font-manrope), sans-serif !important; - text-transform: none !important; - font-style: normal !important; - font-weight: 800; - } - /* Neutralize the theme's .elementor-kit-5 a (red color + underline) */ - .dm-blog-footer a { text-decoration: none !important; } - /* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px - max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA - align to the exact same left/right edges as the article body above. - Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a - consistent ~64–72px section→section gap (no 120px+ voids). */ - .dm-blog-footer-inner { - max-width: 1280px; margin: 0 auto; - /* Compact vertical rhythm on an 8px system. Top padding sets the - article→Prev/Next gap (~24–32px); the inter-section gap sets the - Prev/Next→Related gap (~32–48px). No large arbitrary voids. */ - /* Minimal bottom padding — the global site footer already contributes its - own 20px top inset, so the CTA banner sits close to it without a void. */ - padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px); - display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px); - } - @media (max-width: 767px) { - .dm-blog-footer-inner { - padding-left: 16px; - padding-right: 16px; - } - } - - /* Prev / Next */ - .dm-prevnext { - display: grid; grid-template-columns: 1fr 1fr; gap: 20px; - /* Halved from 40px: tight divider→cards spacing without crowding. */ - padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08); - } - @media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } } - .dm-prevnext-placeholder { display: block; } - .dm-prevnext-card { - display: flex; gap: 16px; align-items: center; padding: 16px; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; - } - .dm-prevnext-card:hover { - transform: translateY(-4px); border-color: rgba(192,18,39,0.2); - box-shadow: 0 16px 34px rgba(192,18,39,0.10); - } - .dm-prevnext-thumb { - position: relative; flex: 0 0 80px; width: 80px; height: 80px; - border-radius: 16px; overflow: hidden; background: #f1f5f9; - } - .dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; } - .dm-prevnext-next { text-align: right; } - .dm-prevnext-next .dm-prevnext-text { align-items: flex-end; } - .dm-prevnext-label { - display: inline-flex; align-items: center; gap: 6px; - font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red); - } - .dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; } - .dm-prevnext-title { - font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); } - - /* Related */ - .dm-related-heading { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important; - line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px; - } - .dm-related-grid { - display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; - } - @media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } } - @media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } } - - .dm-related-card { - display: flex; flex-direction: column; height: 100%; - background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px; - overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none; - transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease; - } - .dm-related-card:hover { - transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13); - border-color: rgba(192,18,39,0.2); - } - .dm-related-img { - position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9; - } - .dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-img img { transform: scale(1.05); } - .dm-related-badge { - position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff; - font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px; - padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25); - } - .dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; } - .dm-related-card-title { - font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important; - letter-spacing: -.2px !important; margin: 0 0 10px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - transition: color .2s ease; - } - .dm-related-card:hover .dm-related-card-title { color: var(--dm-red); } - .dm-related-card-excerpt { - font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; - } - .dm-related-readmore { - margin-top: auto; display: inline-flex; align-items: center; gap: 7px; - font-size: 12.5px; font-weight: 800; color: var(--dm-red); - text-transform: uppercase; letter-spacing: .6px; - } - .dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); } - .dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); } - - /* Contact CTA banner */ - .dm-blog-contact-cta { - display: flex; align-items: center; justify-content: space-between; gap: 32px; - flex-wrap: wrap; - background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%); - border-radius: 30px; padding: clamp(32px, 4vw, 56px); - position: relative; overflow: hidden; - } - .dm-blog-contact-cta::after { - content: ""; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px; - background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%); - pointer-events: none; - } - .dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; } - .dm-blog-contact-eyebrow { - display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase; - letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px; - } - .dm-blog-contact-title { - font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important; - letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance; - } - .dm-blog-contact-sub { - font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450; - } - .dm-blog-contact-btn { - position: relative; z-index: 1; flex-shrink: 0; - display: inline-flex; align-items: center; justify-content: center; gap: 10px; - background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700; - padding: 16px 32px; border-radius: 16px; text-decoration: none; - box-shadow: 0 10px 26px rgba(192,18,39,0.34); - transition: background .2s ease, transform .2s ease; - } - .dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); } - @media (max-width: 720px) { - .dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; } - .dm-blog-contact-btn { width: 100%; } - } -5:["$","section",null,{"className":"dm-blog-footer","aria-label":"More articles","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$12"}}],"$L13"]}] -6:["$","script","script-0",{"src":"/_next/static/chunks/0yvxf3ok9gcp_.js","async":true}] -7:["$","$L14",null,{"children":["$","$15",null,{"name":"Next.MetadataOutlet","children":"$@16"}]}] -a:["$","$L17",null,{"src":"/images/blog-post-pic-14.webp","alt":"Why Mathematical Precision Beats Heuristics in Routing","fill":true,"sizes":"(max-width: 768px) 100vw, 760px","style":{"objectFit":"cover"}}] -b:["$","figcaption",null,{"children":"Technology: route planning decisions made before dispatch."}] -c:["$","$L9","7",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","blockquote",null,{"className":"dm-article-quote","children":[["$","p",null,{"children":"A route should be checked before the rider leaves, not explained after the customer calls."}],["$","cite",null,{"children":"Doormile Operations"}]]}]}] -d:["$","$L9","8",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","h2",null,{"className":"dm-article-h2","children":"Putting it into practice"}]}] -e:["$","$L9","9",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"The best improvements usually start with simple measurements. Track distance per route, failed delivery windows, rider idle time, and orders moved between vehicles after dispatch. Those numbers show where the operation is leaking time."}]}] -f:["$","$L9","10",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","ol",null,{"className":"dm-article-ol","children":[["$","li","0",{"children":"Benchmark today's distance, fleet size, and on-time rate."}],["$","li","1",{"children":"Include vehicle capacity, delivery windows, rider shifts, and battery charge."}],["$","li","2",{"children":"Check routes against traffic and customer commitments before dispatch."}],["$","li","3",{"children":"Compare the next dispatch cycle against the old plan."}]]}]}] -10:["$","$L9","11",{"delay":0,"duration":0.6,"yOffset":20,"children":["$","p",null,{"className":"dm-article-p","children":"Better routing is not about pushing riders harder. It is about giving them a plan that already accounts for the real day ahead."}]}] -11:["$","div",null,{"className":"dm-blog-aside-wrap","children":["$","aside",null,{"className":"dm-blog-sidebar","aria-label":"Blog sidebar","children":[["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Search"}],["$","$L18",null,{}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Recent Posts"}],["$","ul",null,{"className":"dm-blog-recent","children":[["$","li","how-ai-is-transforming-last-mile-ev-delivery",{"children":["$","$L8",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","time",null,{"dateTime":"2025-10-02","className":"dm-blog-recent-date","children":"Oct 2, 2025"}]]}]]}]}],["$","li","42-less-distance-insights-from-our-hyderabad-hub",{"children":["$","$L8",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],["$","time",null,{"dateTime":"2025-09-18","className":"dm-blog-recent-date","children":"Sep 18, 2025"}]]}]]}]}],["$","li","miletruth-ai-10-stages-to-smarter-dispatch",{"children":["$","$L8",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","time",null,{"dateTime":"2025-09-05","className":"dm-blog-recent-date","children":"Sep 5, 2025"}]]}]]}]}],["$","li","the-ev-paradox-solving-range-anxiety-for-urban-fleets",{"children":["$","$L8",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-blog-recent-item","children":[["$","span",null,{"className":"dm-blog-recent-thumb","children":["$","$L17",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"62px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-blog-recent-meta","children":[["$","span",null,{"className":"dm-blog-recent-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}],["$","time",null,{"dateTime":"2025-08-21","className":"dm-blog-recent-date","children":"Aug 21, 2025"}]]}]]}]}]]}]]}],["$","section",null,{"className":"dm-blog-widget","children":[["$","h2",null,{"className":"dm-blog-widget-title","children":"Categories"}],["$","ul",null,{"className":"dm-blog-categories","children":[["$","li","Case Study",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Case Study"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","EV Fleet",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"EV Fleet"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}],["$","li","Fleet Management",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Fleet Management"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],["$","li","MileTruth",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"MileTruth"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}],"$L19","$L1a","$L1b"]}]]}],"$L1c"]}]}] -13:["$","div",null,{"className":"dm-blog-footer-inner","children":[["$","nav",null,{"className":"dm-prevnext","aria-label":"Article navigation","children":[["$","$L8",null,{"href":"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets","className":"dm-prevnext-card dm-prevnext-prev","children":[["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L17",null,{"src":"/images/ev-paradox.webp","alt":"The EV Paradox: Solving Range Anxiety for Urban Fleets","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}],["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":[["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"19","y1":"12","x2":"5","y2":"12"}],["$","polyline",null,{"points":"12 19 5 12 12 5"}]]}],"Previous"]}],["$","span",null,{"className":"dm-prevnext-cat","children":"EV Fleet"}],["$","span",null,{"className":"dm-prevnext-title","children":"The EV Paradox: Solving Range Anxiety for Urban Fleets"}]]}]]}],["$","$L8",null,{"href":"/blog/fleet-reduction-without-compromising-delivery-volume","className":"dm-prevnext-card dm-prevnext-next","children":[["$","span",null,{"className":"dm-prevnext-text","children":[["$","span",null,{"className":"dm-prevnext-label","children":["Next",["$","svg",null,{"width":"15","height":"15","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}],["$","span",null,{"className":"dm-prevnext-cat","children":"Fleet Management"}],["$","span",null,{"className":"dm-prevnext-title","children":"Fleet Reduction Without Compromising Delivery Volume"}]]}],["$","span",null,{"className":"dm-prevnext-thumb","children":["$","$L17",null,{"src":"/images/blog-post-pic-8.webp","alt":"Fleet Reduction Without Compromising Delivery Volume","fill":true,"sizes":"80px","style":{"objectFit":"cover"}}]}]]}]]}],["$","div",null,{"className":"dm-related","children":[["$","h2",null,{"className":"dm-related-heading","children":"Related Articles"}],["$","div",null,{"className":"dm-related-grid","children":[["$","$L9","how-ai-is-transforming-last-mile-ev-delivery",{"delay":0,"duration":0.7,"yOffset":30,"children":["$","$L8",null,{"href":"/blog/how-ai-is-transforming-last-mile-ev-delivery","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L17",null,{"src":"/images/blog-post-pic-17.webp","alt":"How Better Planning Improves Last-Mile EV Delivery","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Technology"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"How Better Planning Improves Last-Mile EV Delivery"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}],["$","$L9","42-less-distance-insights-from-our-hyderabad-hub",{"delay":0.08,"duration":0.7,"yOffset":30,"children":["$","$L8",null,{"href":"/blog/42-less-distance-insights-from-our-hyderabad-hub","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L17",null,{"src":"/images/blog-post-pic-15.webp","alt":"42% Less Distance: Insights from Our Hyderabad Hub","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"Case Study"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"42% Less Distance: Insights from Our Hyderabad Hub"}],"$L1d","$L1e"]}]]}]}],"$L1f"]}]]}],"$L20"]}] -16:null -19:["$","li","Operations",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Operations"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -1a:["$","li","Sustainability",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Sustainability"}],["$","span",null,{"className":"dm-blog-category-count","children":1}]]}]}] -1b:["$","li","Technology",{"children":["$","$L8",null,{"href":"/blog","className":"dm-blog-category-item","children":[["$","span",null,{"children":"Technology"}],["$","span",null,{"className":"dm-blog-category-count","children":2}]]}]}] -1c:["$","section",null,{"className":"dm-blog-widget dm-blog-cta-card","children":[["$","h2",null,{"className":"dm-blog-cta-title","children":"Planning delivery routes?"}],["$","p",null,{"className":"dm-blog-cta-text","children":"Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time."}],["$","$L8",null,{"href":"/contact","className":"dm-blog-cta-btn","children":["Contact Us",["$","svg",null,{"width":"18","height":"18","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] -1d:["$","p",null,{"className":"dm-related-card-excerpt","children":"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning."}] -1e:["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}] -1f:["$","$L9","miletruth-ai-10-stages-to-smarter-dispatch",{"delay":0.16,"duration":0.7,"yOffset":30,"children":["$","$L8",null,{"href":"/blog/miletruth-ai-10-stages-to-smarter-dispatch","className":"dm-related-card","children":[["$","div",null,{"className":"dm-related-img","children":[["$","$L17",null,{"src":"/images/blog-post-pic-31.webp","alt":"MileTruth™: 10 Stages to Smarter Dispatch","fill":true,"sizes":"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw","style":{"objectFit":"cover"}}],["$","span",null,{"className":"dm-related-badge","children":"MileTruth"}]]}],["$","div",null,{"className":"dm-related-body","children":[["$","h3",null,{"className":"dm-related-card-title","children":"MileTruth™: 10 Stages to Smarter Dispatch"}],["$","p",null,{"className":"dm-related-card-excerpt","children":"From order intake to final route output, here is how a dispatch plan is checked before riders leave the hub."}],["$","span",null,{"className":"dm-related-readmore","children":["Read More",["$","svg",null,{"className":"dm-related-readmore-arrow","width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}]]}]}] -20:["$","div",null,{"className":"dm-blog-contact-cta","children":[["$","div",null,{"className":"dm-blog-contact-cta-content","children":[["$","span",null,{"className":"dm-blog-contact-eyebrow","children":"Let's talk logistics"}],["$","h2",null,{"className":"dm-blog-contact-title","children":"Ready to move smarter with Doormile?"}],["$","p",null,{"className":"dm-blog-contact-sub","children":"Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding."}]]}],["$","$L8",null,{"href":"/contact","className":"dm-blog-contact-btn","children":["Get in Touch",["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.5","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]]}] diff --git a/build/blog/why-mathematical-precision-beats-heuristics-in-routing/__next.blog.$d$slug.txt b/build/blog/why-mathematical-precision-beats-heuristics-in-routing/__next.blog.$d$slug.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/blog/why-mathematical-precision-beats-heuristics-in-routing/__next.blog.$d$slug.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/blog/why-mathematical-precision-beats-heuristics-in-routing/__next.blog.txt b/build/blog/why-mathematical-precision-beats-heuristics-in-routing/__next.blog.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/blog/why-mathematical-precision-beats-heuristics-in-routing/__next.blog.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/contact.html b/build/contact.html deleted file mode 100644 index 9137844..0000000 --- a/build/contact.html +++ /dev/null @@ -1,914 +0,0 @@ -Contact Us – Doormile

    Doormile

    Doormile logo
    Address
    Hyderabad

    5th Floor, Vision Ultima,
    Street No.3, Jayabheri Enclave,
    Gachibowli, Hyderabad,
    Telangana 500032.

    Coimbatore

    Mayflower Valencia,
    Near Nava India Bus Stop,
    Avinashi Road,
    Udayampalayam,
    Tamil Nadu 641037.

    Bengaluru

    C612, 6th Floor,
    Trifecta Starlight,
    ITPL Road,
    Garudacharapalya,
    Mahadevapura,
    Bangalore 560048,
    Karnataka, India.

    Contact Us

    Tel : +91 86886 97941

    Email

    care@doormile.com

    Delivering Trust.Beyond Boundaries.

    \ No newline at end of file diff --git a/build/contact.txt b/build/contact.txt deleted file mode 100644 index 71429f2..0000000 --- a/build/contact.txt +++ /dev/null @@ -1,275 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -14:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/chunks/00fiud~fayo7s.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -:HL["/images/home2-banner-3.webp","image"] -c:T1c00, - .contacts-hero-custom { - background-color: #0b0b0b !important; - background-image: url('/images/home2-banner-3.webp') !important; - background-size: cover !important; - background-position: center !important; - } - - .contacts-hero-card-custom { - position: relative !important; - width: 100% !important; - height: 100% !important; - display: flex !important; - align-items: center !important; - justify-content: center !important; - flex-direction: column !important; - box-sizing: border-box !important; - overflow: hidden !important; - } - - .contacts-hero-bg-overlay { - position: absolute !important; - inset: 0 !important; - /* Lighter wash so the red van / sunset stays vivid like the reference, - while keeping the centered heading readable. */ - background-image: linear-gradient(180deg, rgba(0, 0, 0, 0.30) 0%, rgba(0, 0, 0, 0.42) 55%, rgba(0, 0, 0, 0.62) 100%) !important; - z-index: 1 !important; - } - - /* Ambient Glowing Orbs */ - .contacts-hero-glow-red { - position: absolute !important; - bottom: -15% !important; - right: -10% !important; - width: min(500px, 75vw) !important; - height: min(500px, 75vw) !important; - background: radial-gradient(circle, rgba(192, 18, 39, 0.24) 0%, rgba(192, 18, 39, 0) 70%) !important; - filter: blur(70px) !important; - pointer-events: none !important; - z-index: 1 !important; - animation: float-glow 10s ease-in-out infinite alternate !important; - } - - .contacts-hero-glow-blue { - position: absolute !important; - top: -15% !important; - left: -10% !important; - width: min(450px, 60vw) !important; - height: min(450px, 60vw) !important; - background: radial-gradient(circle, rgba(0, 150, 255, 0.06) 0%, rgba(0, 150, 255, 0) 70%) !important; - filter: blur(75px) !important; - pointer-events: none !important; - z-index: 1 !important; - } - - /* Abstract Tech Grid */ - .contacts-hero-grid { - position: absolute !important; - inset: 0 !important; - background-image: - linear-gradient(rgba(255, 255, 255, 0.015) 1px, transparent 1px), - linear-gradient(90deg, rgba(255, 255, 255, 0.015) 1px, transparent 1px) !important; - background-size: 50px 50px !important; - opacity: 0.8 !important; - pointer-events: none !important; - z-index: 2 !important; - } - - /* Center content — card frame removed (no background, border, blur or - shadow); the text sits directly on the hero background. */ - .contacts-hero-glass-card { - position: relative !important; - z-index: 3 !important; - background: transparent !important; - backdrop-filter: none !important; - -webkit-backdrop-filter: none !important; - border: none !important; - border-radius: 0 !important; - padding: 0 24px !important; - max-width: 1500px !important; - width: 92% !important; - box-shadow: none !important; - text-align: center !important; - } - - .contacts-hero-glass-card:hover { - transform: none !important; - box-shadow: none !important; - border-color: transparent !important; - } - - /* Hero headline — large, light, reference-matched display type. - Size scales with the viewport so the line-to-container width ratio - stays constant; the cap keeps the longest line inside the 1500px - container (with nowrap on desktop) so it can never overflow/clip. */ - .contacts-hero-title { - font-size: clamp(34px, 5.9vw, 98px) !important; - font-weight: 400 !important; - line-height: 0.95 !important; - color: #ffffff !important; - text-transform: uppercase !important; - letter-spacing: -0.02em !important; - margin: 0 0 28px 0 !important; - font-family: var(--font-manrope), "Manrope", sans-serif !important; - } - - .contacts-hero-title-line { - display: block !important; - } - - /* Keep each line intact on desktop — never split SYSTEM or PROMISE/KEPT */ - @media (min-width: 1024px) { - .contacts-hero-title-line { - white-space: nowrap !important; - } - } - - .contacts-hero-title-highlight { - color: #c01227 !important; - } - - /* Description text */ - .contacts-hero-desc { - font-size: clamp(15px, 1.3vw, 19px) !important; - line-height: 1.6 !important; - color: rgba(255, 255, 255, 0.82) !important; - max-width: 640px !important; - margin: 0 auto 24px auto !important; - font-weight: 500 !important; - font-family: var(--font-manrope), "Manrope", sans-serif !important; - } - - .contacts-hero-desc-trademark { - color: #ffffff !important; - font-weight: 700 !important; - white-space: nowrap !important; - } - - /* Breadcrumb capsule */ - .contacts-hero-breadcrumbs { - display: inline-flex !important; - align-items: center !important; - gap: 10px !important; - background: rgba(255, 255, 255, 0.04) !important; - border: 1px solid rgba(255, 255, 255, 0.08) !important; - padding: 8px 22px !important; - border-radius: 30px !important; - transition: background 0.3s, border-color 0.3s !important; - } - - .contacts-hero-breadcrumbs:hover { - background: rgba(255, 255, 255, 0.08) !important; - border-color: rgba(255, 255, 255, 0.15) !important; - } - - .contacts-breadcrumb-link { - color: rgba(255, 255, 255, 0.65) !important; - text-decoration: none !important; - font-size: 13px !important; - font-weight: 600 !important; - transition: color 0.2s !important; - font-family: var(--font-manrope), "Manrope", sans-serif !important; - } - - .contacts-breadcrumb-link:hover { - color: #ffffff !important; - } - - .contacts-breadcrumb-del { - color: rgba(255, 255, 255, 0.3) !important; - font-size: 11px !important; - } - - .contacts-breadcrumb-cur { - color: #C01227 !important; - font-size: 13px !important; - font-weight: 700 !important; - font-family: var(--font-manrope), "Manrope", sans-serif !important; - } - - @keyframes float-glow { - 0% { transform: translate(0, 0) scale(1); } - 100% { transform: translate(-15px, -25px) scale(1.08); } - } - - @media (max-width: 768px) { - .contacts-hero-glass-card { - padding: 0 16px !important; - width: 95% !important; - } - .contacts-hero-title { - letter-spacing: -1px !important; - } - } - 0:{"P":null,"c":["","contact"],"q":"","i":false,"f":[[["",{"children":["contact",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","div",null,{"data-elementor-type":"wp-page","data-elementor-id":"41","className":"elementor elementor-41","children":[[["$","link",null,{"rel":"preload","as":"image","href":"/images/home2-banner-3.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$c"}}],"$Ld"],"$Le"]}]}]}]}],["$Lf","$L10"],"$L11"]}],{},null,false,null]},null,false,"$@12"]},null,false,null],"$L13",false]],"m":"$undefined","G":["$14",["$L15"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -17:I[23466,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0vp~o9giaq0t~.js"],"default"] -18:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -19:"$Sreact.suspense" -1c:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -1e:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -d:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card contacts-hero-custom","children":["$","div",null,{"className":"contacts-hero-card-custom","children":[["$","div",null,{"className":"contacts-hero-bg-overlay"}],["$","div",null,{"className":"contacts-hero-grid"}],["$","div",null,{"className":"contacts-hero-glow-red"}],["$","div",null,{"className":"contacts-hero-glow-blue"}],["$","div",null,{"className":"contacts-hero-glass-card","children":["$","h1",null,{"className":"contacts-hero-title","children":[["$","span",null,{"className":"contacts-hero-title-line","children":"Delivering Trust."}],["$","span",null,{"className":"contacts-hero-title-line","children":["Beyond ",["$","span",null,{"className":"contacts-hero-title-highlight","children":"Boundaries."}]]}]]}]}]]}]}]}] -16:T6ac, - .elementor-element-7304a53 { - --padding-left: 20px; - --padding-right: 20px; - --margin-top: 12px; - --margin-bottom: 0px; - /* Reduce the large gap above the map (was 40px). */ - margin-top: 12px !important; - padding-top: 0 !important; - /* Real side padding so the map is inset like the hero/footer sections - (the --padding-* vars only work with elementor-frontend.css, which - isn't loaded, so the map was going edge-to-edge). Matches - .custom-standard-hero-container: 20px desktop / 10px mobile. */ - padding-left: 20px; - padding-right: 20px; - box-sizing: border-box; - /* The section computes to display:inline here (the --display:flex var - isn't mapped without elementor-frontend.css), so its padding never - constrained the block child. Force flex so the padding insets the map. */ - display: flex; - flex-direction: column; - width: 100%; - } - .elementor-element-7304a53 .elementor-custom-embed { - /* Rounded on all corners so the map reads as a self-contained card - (bottom was square before, leaving a hard edge above the footer gap). */ - border-radius: 25px; - overflow: hidden; - background: transparent; - line-height: 0; - } - @media (max-width: 840px) { - .elementor-element-7304a53 { - padding-left: 10px; - padding-right: 10px; - } - } - @media (max-width: 768px) { - .elementor-element-7304a53 .elementor-custom-embed { height: 360px !important; } - } - e:["$","div",null,{"className":"elementor-element elementor-element-7304a53 e-con-full e-flex cut-corner-no sticky-container-off e-con e-parent","data-id":"7304a53","data-element_type":"container","data-e-type":"container","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$16"}}],["$","div",null,{"className":"elementor-element elementor-element-5a3eed4 elementor-widget","data-id":"5a3eed4","data-element_type":"widget","data-e-type":"widget","children":["$","div",null,{"className":"elementor-widget-container","children":["$","div",null,{"className":"elementor-custom-embed","style":{"width":"100%","height":"500px"},"children":["$","$L17",null,{}]}]}]}]]}] -f:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/00fiud~fayo7s.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] -10:["$","script","script-0",{"src":"/_next/static/chunks/0vp~o9giaq0t~.js","async":true,"nonce":"$undefined"}] -11:["$","$L18",null,{"children":["$","$19",null,{"name":"Next.MetadataOutlet","children":"$@1a"}]}] -1b:[] -12:"$W1b" -13:["$","$1","h",{"children":[null,["$","$L1c",null,{"children":"$L1d"}],["$","div",null,{"hidden":true,"children":["$","$L1e",null,{"children":["$","$19",null,{"name":"Next.Metadata","children":"$L1f"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] -15:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] -1d:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -20:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -1a:null -1f:[["$","title","0",{"children":"Contact Us – Doormile"}],["$","meta","1",{"name":"description","content":"Get in touch with Doormile's last-mile logistics team. Call us, email, visit our Gachibowli, Hyderabad office, or drop a message."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","4",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","5",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","6",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L20","7",{}]] diff --git a/build/contact/__next._full.txt b/build/contact/__next._full.txt deleted file mode 100644 index 71429f2..0000000 --- a/build/contact/__next._full.txt +++ /dev/null @@ -1,275 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -14:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/chunks/00fiud~fayo7s.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -:HL["/images/home2-banner-3.webp","image"] -c:T1c00, - .contacts-hero-custom { - background-color: #0b0b0b !important; - background-image: url('/images/home2-banner-3.webp') !important; - background-size: cover !important; - background-position: center !important; - } - - .contacts-hero-card-custom { - position: relative !important; - width: 100% !important; - height: 100% !important; - display: flex !important; - align-items: center !important; - justify-content: center !important; - flex-direction: column !important; - box-sizing: border-box !important; - overflow: hidden !important; - } - - .contacts-hero-bg-overlay { - position: absolute !important; - inset: 0 !important; - /* Lighter wash so the red van / sunset stays vivid like the reference, - while keeping the centered heading readable. */ - background-image: linear-gradient(180deg, rgba(0, 0, 0, 0.30) 0%, rgba(0, 0, 0, 0.42) 55%, rgba(0, 0, 0, 0.62) 100%) !important; - z-index: 1 !important; - } - - /* Ambient Glowing Orbs */ - .contacts-hero-glow-red { - position: absolute !important; - bottom: -15% !important; - right: -10% !important; - width: min(500px, 75vw) !important; - height: min(500px, 75vw) !important; - background: radial-gradient(circle, rgba(192, 18, 39, 0.24) 0%, rgba(192, 18, 39, 0) 70%) !important; - filter: blur(70px) !important; - pointer-events: none !important; - z-index: 1 !important; - animation: float-glow 10s ease-in-out infinite alternate !important; - } - - .contacts-hero-glow-blue { - position: absolute !important; - top: -15% !important; - left: -10% !important; - width: min(450px, 60vw) !important; - height: min(450px, 60vw) !important; - background: radial-gradient(circle, rgba(0, 150, 255, 0.06) 0%, rgba(0, 150, 255, 0) 70%) !important; - filter: blur(75px) !important; - pointer-events: none !important; - z-index: 1 !important; - } - - /* Abstract Tech Grid */ - .contacts-hero-grid { - position: absolute !important; - inset: 0 !important; - background-image: - linear-gradient(rgba(255, 255, 255, 0.015) 1px, transparent 1px), - linear-gradient(90deg, rgba(255, 255, 255, 0.015) 1px, transparent 1px) !important; - background-size: 50px 50px !important; - opacity: 0.8 !important; - pointer-events: none !important; - z-index: 2 !important; - } - - /* Center content — card frame removed (no background, border, blur or - shadow); the text sits directly on the hero background. */ - .contacts-hero-glass-card { - position: relative !important; - z-index: 3 !important; - background: transparent !important; - backdrop-filter: none !important; - -webkit-backdrop-filter: none !important; - border: none !important; - border-radius: 0 !important; - padding: 0 24px !important; - max-width: 1500px !important; - width: 92% !important; - box-shadow: none !important; - text-align: center !important; - } - - .contacts-hero-glass-card:hover { - transform: none !important; - box-shadow: none !important; - border-color: transparent !important; - } - - /* Hero headline — large, light, reference-matched display type. - Size scales with the viewport so the line-to-container width ratio - stays constant; the cap keeps the longest line inside the 1500px - container (with nowrap on desktop) so it can never overflow/clip. */ - .contacts-hero-title { - font-size: clamp(34px, 5.9vw, 98px) !important; - font-weight: 400 !important; - line-height: 0.95 !important; - color: #ffffff !important; - text-transform: uppercase !important; - letter-spacing: -0.02em !important; - margin: 0 0 28px 0 !important; - font-family: var(--font-manrope), "Manrope", sans-serif !important; - } - - .contacts-hero-title-line { - display: block !important; - } - - /* Keep each line intact on desktop — never split SYSTEM or PROMISE/KEPT */ - @media (min-width: 1024px) { - .contacts-hero-title-line { - white-space: nowrap !important; - } - } - - .contacts-hero-title-highlight { - color: #c01227 !important; - } - - /* Description text */ - .contacts-hero-desc { - font-size: clamp(15px, 1.3vw, 19px) !important; - line-height: 1.6 !important; - color: rgba(255, 255, 255, 0.82) !important; - max-width: 640px !important; - margin: 0 auto 24px auto !important; - font-weight: 500 !important; - font-family: var(--font-manrope), "Manrope", sans-serif !important; - } - - .contacts-hero-desc-trademark { - color: #ffffff !important; - font-weight: 700 !important; - white-space: nowrap !important; - } - - /* Breadcrumb capsule */ - .contacts-hero-breadcrumbs { - display: inline-flex !important; - align-items: center !important; - gap: 10px !important; - background: rgba(255, 255, 255, 0.04) !important; - border: 1px solid rgba(255, 255, 255, 0.08) !important; - padding: 8px 22px !important; - border-radius: 30px !important; - transition: background 0.3s, border-color 0.3s !important; - } - - .contacts-hero-breadcrumbs:hover { - background: rgba(255, 255, 255, 0.08) !important; - border-color: rgba(255, 255, 255, 0.15) !important; - } - - .contacts-breadcrumb-link { - color: rgba(255, 255, 255, 0.65) !important; - text-decoration: none !important; - font-size: 13px !important; - font-weight: 600 !important; - transition: color 0.2s !important; - font-family: var(--font-manrope), "Manrope", sans-serif !important; - } - - .contacts-breadcrumb-link:hover { - color: #ffffff !important; - } - - .contacts-breadcrumb-del { - color: rgba(255, 255, 255, 0.3) !important; - font-size: 11px !important; - } - - .contacts-breadcrumb-cur { - color: #C01227 !important; - font-size: 13px !important; - font-weight: 700 !important; - font-family: var(--font-manrope), "Manrope", sans-serif !important; - } - - @keyframes float-glow { - 0% { transform: translate(0, 0) scale(1); } - 100% { transform: translate(-15px, -25px) scale(1.08); } - } - - @media (max-width: 768px) { - .contacts-hero-glass-card { - padding: 0 16px !important; - width: 95% !important; - } - .contacts-hero-title { - letter-spacing: -1px !important; - } - } - 0:{"P":null,"c":["","contact"],"q":"","i":false,"f":[[["",{"children":["contact",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","div",null,{"data-elementor-type":"wp-page","data-elementor-id":"41","className":"elementor elementor-41","children":[[["$","link",null,{"rel":"preload","as":"image","href":"/images/home2-banner-3.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$c"}}],"$Ld"],"$Le"]}]}]}]}],["$Lf","$L10"],"$L11"]}],{},null,false,null]},null,false,"$@12"]},null,false,null],"$L13",false]],"m":"$undefined","G":["$14",["$L15"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -17:I[23466,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0vp~o9giaq0t~.js"],"default"] -18:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -19:"$Sreact.suspense" -1c:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -1e:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -d:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card contacts-hero-custom","children":["$","div",null,{"className":"contacts-hero-card-custom","children":[["$","div",null,{"className":"contacts-hero-bg-overlay"}],["$","div",null,{"className":"contacts-hero-grid"}],["$","div",null,{"className":"contacts-hero-glow-red"}],["$","div",null,{"className":"contacts-hero-glow-blue"}],["$","div",null,{"className":"contacts-hero-glass-card","children":["$","h1",null,{"className":"contacts-hero-title","children":[["$","span",null,{"className":"contacts-hero-title-line","children":"Delivering Trust."}],["$","span",null,{"className":"contacts-hero-title-line","children":["Beyond ",["$","span",null,{"className":"contacts-hero-title-highlight","children":"Boundaries."}]]}]]}]}]]}]}]}] -16:T6ac, - .elementor-element-7304a53 { - --padding-left: 20px; - --padding-right: 20px; - --margin-top: 12px; - --margin-bottom: 0px; - /* Reduce the large gap above the map (was 40px). */ - margin-top: 12px !important; - padding-top: 0 !important; - /* Real side padding so the map is inset like the hero/footer sections - (the --padding-* vars only work with elementor-frontend.css, which - isn't loaded, so the map was going edge-to-edge). Matches - .custom-standard-hero-container: 20px desktop / 10px mobile. */ - padding-left: 20px; - padding-right: 20px; - box-sizing: border-box; - /* The section computes to display:inline here (the --display:flex var - isn't mapped without elementor-frontend.css), so its padding never - constrained the block child. Force flex so the padding insets the map. */ - display: flex; - flex-direction: column; - width: 100%; - } - .elementor-element-7304a53 .elementor-custom-embed { - /* Rounded on all corners so the map reads as a self-contained card - (bottom was square before, leaving a hard edge above the footer gap). */ - border-radius: 25px; - overflow: hidden; - background: transparent; - line-height: 0; - } - @media (max-width: 840px) { - .elementor-element-7304a53 { - padding-left: 10px; - padding-right: 10px; - } - } - @media (max-width: 768px) { - .elementor-element-7304a53 .elementor-custom-embed { height: 360px !important; } - } - e:["$","div",null,{"className":"elementor-element elementor-element-7304a53 e-con-full e-flex cut-corner-no sticky-container-off e-con e-parent","data-id":"7304a53","data-element_type":"container","data-e-type":"container","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$16"}}],["$","div",null,{"className":"elementor-element elementor-element-5a3eed4 elementor-widget","data-id":"5a3eed4","data-element_type":"widget","data-e-type":"widget","children":["$","div",null,{"className":"elementor-widget-container","children":["$","div",null,{"className":"elementor-custom-embed","style":{"width":"100%","height":"500px"},"children":["$","$L17",null,{}]}]}]}]]}] -f:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/00fiud~fayo7s.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] -10:["$","script","script-0",{"src":"/_next/static/chunks/0vp~o9giaq0t~.js","async":true,"nonce":"$undefined"}] -11:["$","$L18",null,{"children":["$","$19",null,{"name":"Next.MetadataOutlet","children":"$@1a"}]}] -1b:[] -12:"$W1b" -13:["$","$1","h",{"children":[null,["$","$L1c",null,{"children":"$L1d"}],["$","div",null,{"hidden":true,"children":["$","$L1e",null,{"children":["$","$19",null,{"name":"Next.Metadata","children":"$L1f"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] -15:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] -1d:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -20:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -1a:null -1f:[["$","title","0",{"children":"Contact Us – Doormile"}],["$","meta","1",{"name":"description","content":"Get in touch with Doormile's last-mile logistics team. Call us, email, visit our Gachibowli, Hyderabad office, or drop a message."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","4",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","5",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","6",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L20","7",{}]] diff --git a/build/contact/__next._head.txt b/build/contact/__next._head.txt deleted file mode 100644 index bcf7724..0000000 --- a/build/contact/__next._head.txt +++ /dev/null @@ -1,6 +0,0 @@ -1:"$Sreact.fragment" -2:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -3:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -4:"$Sreact.suspense" -5:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Contact Us – Doormile"}],["$","meta","1",{"name":"description","content":"Get in touch with Doormile's last-mile logistics team. Call us, email, visit our Gachibowli, Hyderabad office, or drop a message."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","4",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","5",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","6",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L5","7",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/contact/__next._index.txt b/build/contact/__next._index.txt deleted file mode 100644 index d0b3355..0000000 --- a/build/contact/__next._index.txt +++ /dev/null @@ -1,15 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","template":["$","$La",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/contact/__next._tree.txt b/build/contact/__next._tree.txt deleted file mode 100644 index e82b7f1..0000000 --- a/build/contact/__next._tree.txt +++ /dev/null @@ -1,11 +0,0 @@ -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/chunks/00fiud~fayo7s.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -:HL["/images/home2-banner-3.webp","image"] -0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"contact","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/contact/__next.contact.__PAGE__.txt b/build/contact/__next.contact.__PAGE__.txt deleted file mode 100644 index 9d11f69..0000000 --- a/build/contact/__next.contact.__PAGE__.txt +++ /dev/null @@ -1,247 +0,0 @@ -1:"$Sreact.fragment" -9:I[23466,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0vp~o9giaq0t~.js"],"default"] -a:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -b:"$Sreact.suspense" -:HL["/images/home2-banner-3.webp","image"] -:HL["/_next/static/chunks/00fiud~fayo7s.css","style"] -2:T1c00, - .contacts-hero-custom { - background-color: #0b0b0b !important; - background-image: url('/images/home2-banner-3.webp') !important; - background-size: cover !important; - background-position: center !important; - } - - .contacts-hero-card-custom { - position: relative !important; - width: 100% !important; - height: 100% !important; - display: flex !important; - align-items: center !important; - justify-content: center !important; - flex-direction: column !important; - box-sizing: border-box !important; - overflow: hidden !important; - } - - .contacts-hero-bg-overlay { - position: absolute !important; - inset: 0 !important; - /* Lighter wash so the red van / sunset stays vivid like the reference, - while keeping the centered heading readable. */ - background-image: linear-gradient(180deg, rgba(0, 0, 0, 0.30) 0%, rgba(0, 0, 0, 0.42) 55%, rgba(0, 0, 0, 0.62) 100%) !important; - z-index: 1 !important; - } - - /* Ambient Glowing Orbs */ - .contacts-hero-glow-red { - position: absolute !important; - bottom: -15% !important; - right: -10% !important; - width: min(500px, 75vw) !important; - height: min(500px, 75vw) !important; - background: radial-gradient(circle, rgba(192, 18, 39, 0.24) 0%, rgba(192, 18, 39, 0) 70%) !important; - filter: blur(70px) !important; - pointer-events: none !important; - z-index: 1 !important; - animation: float-glow 10s ease-in-out infinite alternate !important; - } - - .contacts-hero-glow-blue { - position: absolute !important; - top: -15% !important; - left: -10% !important; - width: min(450px, 60vw) !important; - height: min(450px, 60vw) !important; - background: radial-gradient(circle, rgba(0, 150, 255, 0.06) 0%, rgba(0, 150, 255, 0) 70%) !important; - filter: blur(75px) !important; - pointer-events: none !important; - z-index: 1 !important; - } - - /* Abstract Tech Grid */ - .contacts-hero-grid { - position: absolute !important; - inset: 0 !important; - background-image: - linear-gradient(rgba(255, 255, 255, 0.015) 1px, transparent 1px), - linear-gradient(90deg, rgba(255, 255, 255, 0.015) 1px, transparent 1px) !important; - background-size: 50px 50px !important; - opacity: 0.8 !important; - pointer-events: none !important; - z-index: 2 !important; - } - - /* Center content — card frame removed (no background, border, blur or - shadow); the text sits directly on the hero background. */ - .contacts-hero-glass-card { - position: relative !important; - z-index: 3 !important; - background: transparent !important; - backdrop-filter: none !important; - -webkit-backdrop-filter: none !important; - border: none !important; - border-radius: 0 !important; - padding: 0 24px !important; - max-width: 1500px !important; - width: 92% !important; - box-shadow: none !important; - text-align: center !important; - } - - .contacts-hero-glass-card:hover { - transform: none !important; - box-shadow: none !important; - border-color: transparent !important; - } - - /* Hero headline — large, light, reference-matched display type. - Size scales with the viewport so the line-to-container width ratio - stays constant; the cap keeps the longest line inside the 1500px - container (with nowrap on desktop) so it can never overflow/clip. */ - .contacts-hero-title { - font-size: clamp(34px, 5.9vw, 98px) !important; - font-weight: 400 !important; - line-height: 0.95 !important; - color: #ffffff !important; - text-transform: uppercase !important; - letter-spacing: -0.02em !important; - margin: 0 0 28px 0 !important; - font-family: var(--font-manrope), "Manrope", sans-serif !important; - } - - .contacts-hero-title-line { - display: block !important; - } - - /* Keep each line intact on desktop — never split SYSTEM or PROMISE/KEPT */ - @media (min-width: 1024px) { - .contacts-hero-title-line { - white-space: nowrap !important; - } - } - - .contacts-hero-title-highlight { - color: #c01227 !important; - } - - /* Description text */ - .contacts-hero-desc { - font-size: clamp(15px, 1.3vw, 19px) !important; - line-height: 1.6 !important; - color: rgba(255, 255, 255, 0.82) !important; - max-width: 640px !important; - margin: 0 auto 24px auto !important; - font-weight: 500 !important; - font-family: var(--font-manrope), "Manrope", sans-serif !important; - } - - .contacts-hero-desc-trademark { - color: #ffffff !important; - font-weight: 700 !important; - white-space: nowrap !important; - } - - /* Breadcrumb capsule */ - .contacts-hero-breadcrumbs { - display: inline-flex !important; - align-items: center !important; - gap: 10px !important; - background: rgba(255, 255, 255, 0.04) !important; - border: 1px solid rgba(255, 255, 255, 0.08) !important; - padding: 8px 22px !important; - border-radius: 30px !important; - transition: background 0.3s, border-color 0.3s !important; - } - - .contacts-hero-breadcrumbs:hover { - background: rgba(255, 255, 255, 0.08) !important; - border-color: rgba(255, 255, 255, 0.15) !important; - } - - .contacts-breadcrumb-link { - color: rgba(255, 255, 255, 0.65) !important; - text-decoration: none !important; - font-size: 13px !important; - font-weight: 600 !important; - transition: color 0.2s !important; - font-family: var(--font-manrope), "Manrope", sans-serif !important; - } - - .contacts-breadcrumb-link:hover { - color: #ffffff !important; - } - - .contacts-breadcrumb-del { - color: rgba(255, 255, 255, 0.3) !important; - font-size: 11px !important; - } - - .contacts-breadcrumb-cur { - color: #C01227 !important; - font-size: 13px !important; - font-weight: 700 !important; - font-family: var(--font-manrope), "Manrope", sans-serif !important; - } - - @keyframes float-glow { - 0% { transform: translate(0, 0) scale(1); } - 100% { transform: translate(-15px, -25px) scale(1.08); } - } - - @media (max-width: 768px) { - .contacts-hero-glass-card { - padding: 0 16px !important; - width: 95% !important; - } - .contacts-hero-title { - letter-spacing: -1px !important; - } - } - 0:{"rsc":["$","$1","c",{"children":[["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","div",null,{"data-elementor-type":"wp-page","data-elementor-id":"41","className":"elementor elementor-41","children":[[["$","link",null,{"rel":"preload","as":"image","href":"/images/home2-banner-3.webp"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$2"}}],"$L3"],"$L4"]}]}]}]}],["$L5","$L6"],"$L7"]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} -3:["$","div",null,{"className":"custom-standard-hero-container","children":["$","div",null,{"className":"custom-standard-hero-card contacts-hero-custom","children":["$","div",null,{"className":"contacts-hero-card-custom","children":[["$","div",null,{"className":"contacts-hero-bg-overlay"}],["$","div",null,{"className":"contacts-hero-grid"}],["$","div",null,{"className":"contacts-hero-glow-red"}],["$","div",null,{"className":"contacts-hero-glow-blue"}],["$","div",null,{"className":"contacts-hero-glass-card","children":["$","h1",null,{"className":"contacts-hero-title","children":[["$","span",null,{"className":"contacts-hero-title-line","children":"Delivering Trust."}],["$","span",null,{"className":"contacts-hero-title-line","children":["Beyond ",["$","span",null,{"className":"contacts-hero-title-highlight","children":"Boundaries."}]]}]]}]}]]}]}]}] -8:T6ac, - .elementor-element-7304a53 { - --padding-left: 20px; - --padding-right: 20px; - --margin-top: 12px; - --margin-bottom: 0px; - /* Reduce the large gap above the map (was 40px). */ - margin-top: 12px !important; - padding-top: 0 !important; - /* Real side padding so the map is inset like the hero/footer sections - (the --padding-* vars only work with elementor-frontend.css, which - isn't loaded, so the map was going edge-to-edge). Matches - .custom-standard-hero-container: 20px desktop / 10px mobile. */ - padding-left: 20px; - padding-right: 20px; - box-sizing: border-box; - /* The section computes to display:inline here (the --display:flex var - isn't mapped without elementor-frontend.css), so its padding never - constrained the block child. Force flex so the padding insets the map. */ - display: flex; - flex-direction: column; - width: 100%; - } - .elementor-element-7304a53 .elementor-custom-embed { - /* Rounded on all corners so the map reads as a self-contained card - (bottom was square before, leaving a hard edge above the footer gap). */ - border-radius: 25px; - overflow: hidden; - background: transparent; - line-height: 0; - } - @media (max-width: 840px) { - .elementor-element-7304a53 { - padding-left: 10px; - padding-right: 10px; - } - } - @media (max-width: 768px) { - .elementor-element-7304a53 .elementor-custom-embed { height: 360px !important; } - } - 4:["$","div",null,{"className":"elementor-element elementor-element-7304a53 e-con-full e-flex cut-corner-no sticky-container-off e-con e-parent","data-id":"7304a53","data-element_type":"container","data-e-type":"container","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$8"}}],["$","div",null,{"className":"elementor-element elementor-element-5a3eed4 elementor-widget","data-id":"5a3eed4","data-element_type":"widget","data-e-type":"widget","children":["$","div",null,{"className":"elementor-widget-container","children":["$","div",null,{"className":"elementor-custom-embed","style":{"width":"100%","height":"500px"},"children":["$","$L9",null,{}]}]}]}]]}] -5:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/00fiud~fayo7s.css","precedence":"next"}] -6:["$","script","script-0",{"src":"/_next/static/chunks/0vp~o9giaq0t~.js","async":true}] -7:["$","$La",null,{"children":["$","$b",null,{"name":"Next.MetadataOutlet","children":"$@c"}]}] -c:null diff --git a/build/contact/__next.contact.txt b/build/contact/__next.contact.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/contact/__next.contact.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/cookie-policy.html b/build/cookie-policy.html deleted file mode 100644 index 4516438..0000000 --- a/build/cookie-policy.html +++ /dev/null @@ -1,853 +0,0 @@ -Cookie Policy – Doormile

    Doormile

    Doormile logo
    Address
    Hyderabad

    5th Floor, Vision Ultima,
    Street No.3, Jayabheri Enclave,
    Gachibowli, Hyderabad,
    Telangana 500032.

    Coimbatore

    Mayflower Valencia,
    Near Nava India Bus Stop,
    Avinashi Road,
    Udayampalayam,
    Tamil Nadu 641037.

    Bengaluru

    C612, 6th Floor,
    Trifecta Starlight,
    ITPL Road,
    Garudacharapalya,
    Mahadevapura,
    Bangalore 560048,
    Karnataka, India.

    Contact Us

    Tel : +91 86886 97941

    Email

    care@doormile.com

    \ No newline at end of file diff --git a/build/cookie-policy.txt b/build/cookie-policy.txt deleted file mode 100644 index 1e7a78f..0000000 --- a/build/cookie-policy.txt +++ /dev/null @@ -1,216 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -16:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","cookie-policy"],"q":"","i":false,"f":[[["",{"children":["cookie-policy",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","section",null,{"className":"dm-legal","aria-label":"Cookie Policy","children":[["$","div",null,{"className":"dm-legal__wrap","children":[["$","aside",null,{"className":"dm-legal__toc","aria-label":"On this page","children":["$","div",null,{"className":"dm-legal__toc-inner","children":[["$","p",null,{"className":"dm-legal__toc-label","children":"On this page"}],["$","nav",null,{"children":["$","ul",null,{"children":[["$","li","What Are Cookies?",{"children":["$","a",null,{"href":"#what-are-cookies","children":"What Are Cookies?"}]}],["$","li","Why We Use Cookies",{"children":["$","a",null,{"href":"#why-we-use-cookies","children":"Why We Use Cookies"}]}],["$","li","Types of Cookies We Use",{"children":"$Lc"}],"$Ld","$Le","$Lf","$L10"]}]}]]}]}],"$L11"]}],"$L12"]}]}]}]}],null,"$L13"]}],{},null,false,null]},null,false,"$@14"]},null,false,null],"$L15",false]],"m":"$undefined","G":["$16",["$L17"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -1a:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -1b:"$Sreact.suspense" -1e:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -20:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -c:["$","a",null,{"href":"#types-of-cookies-we-use","children":"Types of Cookies We Use"}] -d:["$","li","Managing Cookies",{"children":["$","a",null,{"href":"#managing-cookies","children":"Managing Cookies"}]}] -e:["$","li","Cookie Consent",{"children":["$","a",null,{"href":"#cookie-consent","children":"Cookie Consent"}]}] -f:["$","li","Policy Updates",{"children":["$","a",null,{"href":"#policy-updates","children":"Policy Updates"}]}] -10:["$","li","Contact Us",{"children":["$","a",null,{"href":"#contact-us","children":"Contact Us"}]}] -11:["$","div",null,{"className":"dm-legal__main","children":[["$","header",null,{"className":"dm-legal__hero","children":[["$","h1",null,{"className":"dm-legal__title","children":"Cookie Policy"}],["$","p",null,{"className":"dm-legal__updated","children":["Last Updated: ","June 2026"]}],["$","p",null,{"className":"dm-legal__lead","children":"This Cookie Policy explains how Doormile uses cookies and similar technologies when you visit our website."}]]}],["$","article",null,{"className":"dm-legal__content","children":[["$","section","What Are Cookies?",{"id":"what-are-cookies","className":"dm-legal__section","children":[["$","h2",null,{"className":"dm-legal__h2","children":"What Are Cookies?"}],[["$","p","0",{"className":"dm-legal__p","children":"Cookies are small text files stored on your device that help websites remember information about your visit and improve the browsing experience."}]]]}],["$","section","Why We Use Cookies",{"id":"why-we-use-cookies","className":"dm-legal__section","children":[["$","h2",null,{"className":"dm-legal__h2","children":"Why We Use Cookies"}],[["$","p","0",{"className":"dm-legal__p","children":"We use cookies to:"}],["$","ul","1",{"className":"dm-legal__ul","children":[["$","li","0",{"children":"Enable essential website functionality"}],["$","li","1",{"children":"Improve website performance"}],["$","li","2",{"children":"Analyze visitor behavior and traffic patterns"}],["$","li","3",{"children":"Remember user preferences"}],["$","li","4",{"children":"Enhance overall user experience"}],["$","li","5",{"children":"Support website security"}]]}]]]}],["$","section","Types of Cookies We Use",{"id":"types-of-cookies-we-use","className":"dm-legal__section","children":[["$","h2",null,{"className":"dm-legal__h2","children":"Types of Cookies We Use"}],[["$","h3","0",{"className":"dm-legal__h3","children":"Essential Cookies"}],["$","p","1",{"className":"dm-legal__p","children":"These cookies are required for core website functionality and security features. The website may not function correctly without them."}],["$","h3","2",{"className":"dm-legal__h3","children":"Performance Cookies"}],["$","p","3",{"className":"dm-legal__p","children":"These cookies collect information about how visitors interact with the website and help us improve performance and usability."}],["$","h3","4",{"className":"dm-legal__h3","children":"Analytics Cookies"}],["$","p","5",{"className":"dm-legal__p","children":"Analytics cookies help us understand website traffic, visitor engagement, popular content, and user journeys."}],["$","h3","6",{"className":"dm-legal__h3","children":"Functional Cookies"}],["$","p","7",{"className":"dm-legal__p","children":"These cookies remember user preferences such as language, region, and other customization settings."}],["$","h3","8",{"className":"dm-legal__h3","children":"Third-Party Cookies"}],["$","p","9",{"className":"dm-legal__p","children":"Some third-party services integrated into our website, including analytics and performance monitoring tools, may place cookies on your device."}]]]}],["$","section","Managing Cookies",{"id":"managing-cookies","className":"dm-legal__section","children":[["$","h2",null,{"className":"dm-legal__h2","children":"Managing Cookies"}],[["$","p","0",{"className":"dm-legal__p","children":"Most web browsers allow users to control, block, or delete cookies through browser settings. Please note that disabling cookies may impact certain website features and functionality."}]]]}],["$","section","Cookie Consent",{"id":"cookie-consent","className":"dm-legal__section","children":[["$","h2",null,{"className":"dm-legal__h2","children":"Cookie Consent"}],[["$","p","0",{"className":"dm-legal__p","children":"Where required by applicable law, visitors may be presented with cookie consent options when accessing the website."}]]]}],["$","section","Policy Updates",{"id":"policy-updates","className":"dm-legal__section","children":[["$","h2",null,{"className":"dm-legal__h2","children":"Policy Updates"}],[["$","p","0",{"className":"dm-legal__p","children":"We may revise this Cookie Policy periodically to reflect changes in technology, regulations, or business practices. Updated versions will be published on this page."}]]]}],"$L18"]}]]}] -19:T15aa, -.dm-legal { - background: #ffffff; - color: #334155; - /* Top padding clears the fixed/absolute floating navbar (~104px) + breathing room. */ - padding: clamp(132px, 16vh, 184px) 0 clamp(72px, 10vw, 96px); - font-family: var(--font-manrope), system-ui, -apple-system, sans-serif; -} - -.dm-legal__wrap { - max-width: 1180px; - margin: 0 auto; - padding: 0 clamp(20px, 5vw, 40px); - display: grid; - grid-template-columns: minmax(0, 1fr); - gap: 0; -} - -/* ---- Sticky table of contents (desktop only) ---- */ -.dm-legal__toc { display: none; } - -@media (min-width: 1080px) { - .dm-legal__wrap { - grid-template-columns: 248px minmax(0, 800px); - justify-content: center; - gap: 64px; - } - .dm-legal__toc { display: block; } -} - -.dm-legal__toc-inner { position: sticky; top: 128px; } -.dm-legal__toc-label { - margin: 0 0 14px; - font-size: 12px; - font-weight: 700; - letter-spacing: 0.14em; - text-transform: uppercase; - color: #94a3b8; -} -.dm-legal__toc nav ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; } -.dm-legal__toc nav a { - display: block; - font-size: 14px; - line-height: 1.4; - color: #64748b; - text-decoration: none; - border-left: 2px solid transparent; - padding-left: 12px; - transition: color 0.2s ease, border-color 0.2s ease; -} -.dm-legal__toc nav a:hover { color: #c01227; border-left-color: #c01227; } - -/* ---- Reading column (max 800px) ---- */ -.dm-legal__main { min-width: 0; max-width: 800px; } - -.dm-legal__hero { margin-bottom: clamp(40px, 6vw, 56px); } -.dm-legal__title { - margin: 0 !important; - padding: 0 !important; - /* !important / text-transform override the global ".elementor-kit-5 h1" - (uppercase + kit font-size) so headings render in normal case at the spec sizes. */ - font-size: clamp(40px, 6vw, 60px) !important; - font-weight: 800 !important; - line-height: 1.08 !important; - letter-spacing: -0.02em !important; - text-transform: none !important; - color: #0f172a !important; -} -.dm-legal__updated { - margin: 16px 0 0; - font-size: 14px; - font-weight: 700; - letter-spacing: 0.08em; - text-transform: uppercase; - color: #94a3b8; -} - -.dm-legal__lead { - margin: 24px 0 0; - font-size: clamp(18px, 1.6vw, 20px); - line-height: 1.7; - color: #475569; -} -.dm-legal__hero .dm-legal__lead { margin-top: 24px; } - -/* ---- Sections ---- */ -.dm-legal__content { display: flex; flex-direction: column; } -.dm-legal__section { padding-top: 32px; } -.dm-legal__section:first-child { padding-top: 0; } - -.dm-legal__h2 { - margin: 0 0 16px !important; - padding: 0 !important; - font-size: clamp(24px, 3vw, 32px) !important; - font-weight: 700 !important; - line-height: 1.2 !important; - letter-spacing: -0.01em !important; - text-transform: none !important; - color: #0f172a !important; - /* Offset anchor jumps so the heading isn't hidden under the fixed navbar. */ - scroll-margin-top: 120px; -} -.dm-legal__h3 { - margin: 24px 0 8px !important; - padding: 0 !important; - font-size: 20px !important; - font-weight: 700 !important; - line-height: 1.35 !important; - text-transform: none !important; - color: #0f172a !important; -} -.dm-legal__p { - margin: 0 0 16px; - font-size: 18px; - line-height: 1.7; - color: #334155; -} -.dm-legal__p:last-child { margin-bottom: 0; } - -.dm-legal__ul { margin: 4px 0 16px; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 10px; } -.dm-legal__ul li { - position: relative; - padding-left: 26px; - font-size: 18px; - line-height: 1.7; - color: #334155; -} -/* Extra .dm-legal prefix raises specificity above the global theme rule - ".logico-front-end ul li:before" (a fontello glyph), so our clean red dot - replaces the inherited checkmark marker. */ -.dm-legal .dm-legal__ul li::before { - content: "" !important; - position: absolute; - left: 4px; - top: 0.62em; - width: 7px; - height: 7px; - border-radius: 50%; - background: #c01227; - font-size: 0; -} -/* TOC links are inside a
      too — suppress the same inherited glyph marker. */ -.dm-legal .dm-legal__toc nav li::before { content: none !important; } - -.dm-legal__link { color: #c01227; font-weight: 600; text-decoration: none; border-bottom: 1px solid rgba(192,18,39,0.35); } -.dm-legal__link:hover { border-bottom-color: #c01227; } - -@media (max-width: 1079px) { - .dm-legal__main { margin: 0 auto; } -} - -/* ============================================================ - Navbar visibility — LEGAL PAGES ONLY. - This
      / Why Doormile Wings /

      Built for the speed of the Gen-Z economy

      Same-Day Air Logistics

      Max 3-hour door-to-door delivery between India's major regional capitals.

      AI-Powered Operations

      MileTruth™ AI continuously forecasts demand and optimizes every route and load.

      Regional Connectivity

      Dedicated air capacity linking major economic hubs, not passenger-belly space.

      EV Last Mile

      Zero-emission electric vehicles complete every first- and final-mile delivery.

      / The Speed Advantage /

      Same-day, not some-day

      Surface Logistics
      48–0
      Hours

      Delhi–Mumbai standard surface transit time.

      VS
      Doormile Wings
      Max 0
      Hours, Door-to-Door

      Same-day delivery between major regional capitals.

      / Why Businesses Choose Doormile Wings /

      Built to be depended on

      AI Decision Engine

      MileTruth™ AI continuously forecasts demand and optimizes routing and load decisions in real time.

      Real-Time Visibility

      Live shipment tracking keeps shippers, ground teams, and customers updated at every stage.

      Faster Regional Reach

      A dedicated network linking major regional capitals, built for speed rather than passenger schedules.

      Reliable Scheduled Operations

      Dedicated freighter capacity with consistent schedules — not subject to passenger-belly bumping.

      / Industries We Serve /

      Built for the shipments that can’t wait

      Quick Commerce

      Quick Commerce

      Challenge

      Sub-3-hour delivery windows for dark stores and micro-warehouses.

      Doormile Wings

      Dedicated same-day air capacity linking metros to fulfillment hubs.

      Express B2B Cargo

      Express B2B Cargo

      Challenge

      Time-critical industrial parts and components stuck on slow trunk routes.

      Doormile Wings

      Rapid airport-to-airport transport between major economic nodes.

      Healthcare & Pharma

      Healthcare & Pharma

      Challenge

      Temperature-sensitive, compliance-critical shipments with zero margin for error.

      Doormile Wings

      Active and passive cold-chain packaging with full chain-of-custody tracking.

      Cold Chain Logistics

      Cold Chain Logistics

      Challenge

      Perishables and fresh goods that can't survive slow surface transit.

      Doormile Wings

      Precision temperature tracking matched to airline-speed transit.

      High-Value Cargo

      High-Value Cargo

      Challenge

      Zero tolerance for loss, tampering, or delay on high-value shipments.

      Doormile Wings

      Maximum-security handling with real-time electronic custody tracking.

      E-Commerce Logistics

      E-Commerce Logistics

      Challenge

      Next-day and same-day fulfillment expectations across tier-1 and tier-2 cities.

      Doormile Wings

      Direct sorting-hub-to-airport clearance network for faster regional delivery.

      / How It Works /

      Pickup to
      delivery, one
      connected flow

      01Step

      Local Pickup

      Fast, on-demand first-mile logistics dispatched by electric vehicle.

      02Step

      Airport Clearance

      Automated screening, grouping, and rapid cross-docking at the hub.

      03Step

      Air Transit

      Optimized cargo flights bypass surface congestion on our regional fleet.

      04Step

      Destination Hub

      Immediate de-consolidation and screening upon arrival.

      05Step

      EV Last-Mile

      Zero-emission electric vehicles complete the final delivery.

      Quick Logistics

      Same-Day Air Network

      / Fleet Strategy /

      Purpose-Built for Regional Speed

      3Phase 1 Aircraft
      25Phase 2 Vision
      FLEET SPECIFICATIONSAI ENGINE
      0.0tATR72 Payload
      0kmATR72 Range
      0.0tQ400 Payload
      0km/hQ400 Speed
      Dedicated Freighter Capacity

      Purpose-built cargo lift, not passenger-belly space competing with baggage.

      Regional Route Design

      Turboprop range and speed matched to India's major regional-capital corridors.

      Scaling to 25 Aircraft

      Phase 2 vision: pan-India connectivity hubs and international regional routes.

      ATR72 Payload0.0t
      ATR72 Range0km
      Q400 Payload0.0t
      Q400 Speed0km/h
      / Infrastructure /

      A network built to move, not to sit idle

      Airport Cargo Hubs

      Near-airport clearance hubs instead of standalone warehouses — closer to the tarmac, faster to the aircraft.

      Cross-Docking

      Screening, grouping, and consolidation happen in one motion, minimizing dwell time between arrival and departure.

      Asset-Light Network

      Leased terminal space that flexes with demand, keeping the network nimble as new routes come online.

      Scalable Operations

      Modular ground infrastructure built to expand city by city without slowing down day-to-day operations.

      / MileTruth™ AI /

      The intelligence layer behind every delivery

      Demand Forecasting

      AI-driven forward projection of cargo demand, preemptively positioning aircraft and ground capacity.

      Dynamic Pricing

      Real-time rate adjustments that track market capacity fluctuations and optimize yield.

      Route Optimization

      Dynamic scheduling for ground EV pickups and flights that bypasses congestion for the fastest path.

      Load Balancing

      Automated weight-and-balance modeling for optimal, safe aircraft load layout within minutes.

      Predictive Maintenance

      Continuous telemetry monitoring triggers preemptive alerts, drastically reducing aircraft downtime.

      Real-Time Tracking

      End-to-end sensor monitoring keeps shippers, airline, and EV operators updated on exact shipment state.

      Digital Twin of the Logistics Network

      A live virtual model of every ground vehicle, terminal, and flight — simulating what-if scenarios before bottlenecks ever form.

      SaaS Ready
      / Future Roadmap /

      A ten-year path to national scale

      Year 1
      Launch Phase

      Establish localized clearance hubs and launch cargo services connecting 5–6 key commercial cities.

      Year 2
      Network Growth

      Expand hub operations and airfield schedules, serving 15 regional and secondary cargo airports.

      Year 3
      Cross-Border Nodes

      Add international regional routes, bridging key freight corridors in South Asia.

      Year 5
      Operational Scale

      Expand to a fleet of 25 leased cargo aircraft, servicing over 50 regional airports nationwide.

      Year 10
      Global Duplication

      Replicate our asset-light, AI-powered logistics framework across Asia, Africa, and the Middle East.

    \ No newline at end of file diff --git a/build/doormile-wings.txt b/build/doormile-wings.txt deleted file mode 100644 index e45d876..0000000 --- a/build/doormile-wings.txt +++ /dev/null @@ -1,299 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -c:I[36202,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~6a87_s8h6ue.js"],"default"] -d:I[63061,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~6a87_s8h6ue.js"],"default"] -e:I[10425,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~6a87_s8h6ue.js"],"default"] -1d:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/chunks/0zi3_4wi6-b2t.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -f:Tafb, - .wfg-section { - background: #ffffff; - padding: var(--space-section-lg, 80px) 0; - } - - .wfg-header { - margin: 0 auto 48px auto; - max-width: 720px; - text-align: center; - } - - .wfg-eyebrow { - font-size: 13px; - font-weight: 700; - letter-spacing: 2px; - text-transform: uppercase; - color: rgba(17, 17, 17, 0.45); - margin-bottom: 16px; - } - - .wfg-title { - font-size: clamp(28px, 3.2vw, 46px) !important; - font-weight: 800 !important; - letter-spacing: -0.03em !important; - line-height: 1.15 !important; - text-transform: none !important; - color: #111111 !important; - margin: 0; - } - - .wfg-inner { - max-width: 1380px; - margin: 0 auto; - } - - .wfg-grid { - display: grid; - grid-template-columns: repeat(4, minmax(0, 1fr)); - gap: 20px; - } - - .wfg-card { - min-width: 0; - background: #ffffff; - border: 1px solid rgba(17, 17, 17, 0.1); - border-radius: 20px; - padding: 30px 26px; - transition: border-color 0.35s ease, box-shadow 0.35s ease, transform 0.35s cubic-bezier(0.165, 0.84, 0.44, 1); - } - - .wfg-card:hover { - border-color: #c8102e; - box-shadow: 0 20px 40px rgba(200, 16, 46, 0.08); - transform: translateY(-8px); - } - - .wfg-icon { - width: 46px; - height: 46px; - display: flex; - align-items: center; - justify-content: center; - border-radius: 12px; - background: rgba(200, 16, 46, 0.06); - color: #c8102e; - margin-bottom: 20px; - } - - .wfg-card-title { - font-size: 16.5px !important; - font-weight: 700 !important; - line-height: 1.3 !important; - text-transform: none !important; - color: #111111 !important; - margin: 0 0 8px 0; - } - - .wfg-card-desc { - font-size: 14px; - line-height: 1.55; - color: rgba(17, 17, 17, 0.6); - margin: 0; - } - - @media (max-width: 1024px) { - .wfg-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } - } - - @media (max-width: 600px) { - .wfg-grid { grid-template-columns: 1fr; } - /* var(--space-section-lg) floors at a fixed 52px on any phone - width (clamp() has no further breakpoint-based step-down), which - reads as noticeably heavier than the section rhythm near the - footer. Trimmed to a real mobile value here instead. */ - .wfg-section { padding-top: 44px; padding-bottom: 44px; } - } - 0:{"P":null,"c":["","doormile-wings"],"q":"","i":false,"f":[[["",{"children":["doormile-wings",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","div",null,{"id":"doormile-wings","className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","div",null,{"data-elementor-type":"wp-page","data-elementor-id":"95","className":"elementor elementor-95 elementor-59","children":[["$","$Lc",null,{}],["$","$Ld",null,{}],["$","$Le",null,{}],[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$f"}}],"$L10"],"$L11","$L12","$L13","$L14","$L15","$L16"]}]}]}]}],["$L17","$L18","$L19"],"$L1a"]}],{},null,false,null]},null,false,"$@1b"]},null,false,null],"$L1c",false]],"m":"$undefined","G":["$1d",["$L1e"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -1f:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~6a87_s8h6ue.js"],"ScrollReveal"] -20:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~6a87_s8h6ue.js"],"StaggerChildren"] -23:I[48920,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~6a87_s8h6ue.js"],"default"] -24:I[14224,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~6a87_s8h6ue.js"],"default"] -25:I[55064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~6a87_s8h6ue.js"],"default"] -26:I[13378,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~6a87_s8h6ue.js"],"default"] -27:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -28:"$Sreact.suspense" -2b:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -2d:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -10:["$","section",null,{"className":"wfg-section","id":"wings-features","children":["$","div",null,{"className":"dm-section-container","children":["$","div",null,{"className":"wfg-inner","children":[["$","$L1f",null,{"delay":0.05,"duration":0.75,"yOffset":25,"className":"wfg-header","children":[["$","div",null,{"className":"wfg-eyebrow","children":"/ Why Businesses Choose Doormile Wings /"}],["$","h2",null,{"className":"wfg-title","children":"Built to be depended on"}]]}],["$","$L20",null,{"stagger":0.1,"duration":0.7,"yOffset":30,"className":"wfg-grid","children":[["$","div","AI Decision Engine",{"className":"wfg-card","children":[["$","div",null,{"className":"wfg-icon","aria-hidden":"true","children":["$","svg",null,{"width":"24","height":"24","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","path",null,{"d":"M12 2a4 4 0 0 1 4 4v1a4 4 0 0 1-1.2 2.86A4 4 0 0 1 16 13v1a4 4 0 0 1-4 4 4 4 0 0 1-4-4v-1a4 4 0 0 1 1.2-3.14A4 4 0 0 1 8 7V6a4 4 0 0 1 4-4Z"}],["$","path",null,{"d":"M9 21h6M12 18v3"}]]}]}],["$","h3",null,{"className":"wfg-card-title","children":"AI Decision Engine"}],["$","p",null,{"className":"wfg-card-desc","children":"MileTruth™ AI continuously forecasts demand and optimizes routing and load decisions in real time."}]]}],["$","div","Real-Time Visibility",{"className":"wfg-card","children":[["$","div",null,{"className":"wfg-icon","aria-hidden":"true","children":["$","svg",null,{"width":"24","height":"24","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","path",null,{"d":"M1 12s4-7 11-7 11 7 11 7-4 7-11 7-11-7-11-7Z"}],["$","circle",null,{"cx":"12","cy":"12","r":"3"}]]}]}],["$","h3",null,{"className":"wfg-card-title","children":"Real-Time Visibility"}],["$","p",null,{"className":"wfg-card-desc","children":"Live shipment tracking keeps shippers, ground teams, and customers updated at every stage."}]]}],["$","div","Faster Regional Reach",{"className":"wfg-card","children":[["$","div",null,{"className":"wfg-icon","aria-hidden":"true","children":["$","svg",null,{"width":"24","height":"24","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"13 6 19 12 13 18"}]]}]}],["$","h3",null,{"className":"wfg-card-title","children":"Faster Regional Reach"}],["$","p",null,{"className":"wfg-card-desc","children":"A dedicated network linking major regional capitals, built for speed rather than passenger schedules."}]]}],["$","div","Reliable Scheduled Operations",{"className":"wfg-card","children":[["$","div",null,{"className":"wfg-icon","aria-hidden":"true","children":["$","svg",null,{"width":"24","height":"24","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"3"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}],["$","path",null,{"d":"M9 16l2 2 4-4"}]]}]}],["$","h3",null,{"className":"wfg-card-title","children":"Reliable Scheduled Operations"}],["$","p",null,{"className":"wfg-card-desc","children":"Dedicated freighter capacity with consistent schedules — not subject to passenger-belly bumping."}]]}]]}]]}]}]}] -21:Tfac, - .wind-section { - background: #fafafa; - padding: var(--space-section-lg, 80px) 0 20px 0; /* Reduced bottom padding to minimize gap */ - } - - .wind-header { - margin: 0 auto 48px auto; - max-width: 720px; - text-align: center; - } - - .wind-eyebrow { - font-size: 13px; - font-weight: 700; - letter-spacing: 2px; - text-transform: uppercase; - color: rgba(17, 17, 17, 0.45); - margin-bottom: 16px; - } - - .wind-title { - font-size: clamp(28px, 3.2vw, 46px) !important; - font-weight: 800 !important; - letter-spacing: -0.03em !important; - line-height: 1.15 !important; - text-transform: none !important; - color: #111111 !important; - margin: 0; - } - - .wind-inner { - max-width: 1380px; - margin: 0 auto; - } - - .wind-grid { - display: grid; - grid-template-columns: repeat(3, minmax(0, 1fr)); - gap: 20px; - } - - .wind-card { - position: relative; - min-width: 0; - aspect-ratio: 4 / 5; - border-radius: 20px; - overflow: hidden; - background: linear-gradient(150deg, #17171b 0%, #0b0b0d 100%); - isolation: isolate; - } - - .wind-card-wash { - position: absolute; - inset: 0; - background: linear-gradient(160deg, rgba(200, 16, 46, 0.35) 0%, rgba(200, 16, 46, 0) 60%); - opacity: 0.5; - transition: opacity 0.4s ease; - } - - .wind-card:hover .wind-card-wash { - opacity: 1; - } - - .wind-card-default { - position: absolute; - left: 24px; - right: 24px; - bottom: 24px; - transition: opacity 0.3s ease, transform 0.3s ease; - } - - .wind-card:hover .wind-card-default { - opacity: 0; - transform: translateY(8px); - pointer-events: none; - } - - .wind-card .wind-card-default-title { - font-size: 20px !important; - font-weight: 800 !important; - line-height: 1.3 !important; - text-transform: none !important; - color: #ffffff !important; - margin: 0; - } - - .wind-card-hover { - position: absolute; - inset: 0; - padding: 26px 24px; - display: flex; - flex-direction: column; - justify-content: flex-end; - gap: 14px; - opacity: 0; - transform: translateY(10px); - transition: opacity 0.35s ease, transform 0.35s ease; - } - - .wind-card:hover .wind-card-hover { - opacity: 1; - transform: translateY(0); - } - - .wind-card .wind-card-hover-title { - font-size: 19px !important; - font-weight: 800 !important; - line-height: 1.3 !important; - text-transform: none !important; - color: #ffffff !important; - margin: 0; - } - - .wind-card-label { - font-size: 10.5px; - font-weight: 800; - letter-spacing: 1.2px; - text-transform: uppercase; - color: rgba(255, 255, 255, 0.5); - margin: 0 0 4px 0; - } - - .wind-card-text { - font-size: 13px; - line-height: 1.5; - color: rgba(255, 255, 255, 0.85); - margin: 0; - } - - @media (max-width: 1024px) { - .wind-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } - } - - @media (max-width: 600px) { - .wind-grid { grid-template-columns: 1fr; } - .wind-card { aspect-ratio: 3 / 4; } - /* var(--space-section-lg) floors at a fixed 52px on any phone - width; bottom is already trimmed to 20px, so only the top needs - a real mobile reduction to match the section rhythm near the - footer. */ - .wind-section { padding-top: 44px; } - } - 11:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$21"}}],"$L22"] -12:["$","$L23",null,{}] -13:["$","div",null,{"id":"wings-fleet","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"\n @media (max-width: 767px) {\n #wings-fleet .evnd-gap-bottom { margin-bottom: 14px !important; }\n }\n "}}],["$","$L24",null,{"bannerImage":"/images/pahse1.png","cardTitle":"Quick Logistics","cardSubtitle":"Same-Day Air Network","eyebrow":"/ Fleet Strategy /","titleLead":"Purpose-Built for ","titleAccent":"Regional Speed","features":[{"icon":["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M22 12h-6l-4-9-2 1 3 8H5l-2-3-1.5.6L3 14l1.5 4.4L6 18l-2-3h8l3 8 2-1-3-8h6z"}]}],"title":"Dedicated Freighter Capacity","desc":"Purpose-built cargo lift, not passenger-belly space competing with baggage."},{"icon":["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","circle",null,{"cx":"6","cy":"6","r":"2.5"}],["$","circle",null,{"cx":"18","cy":"6","r":"2.5"}],["$","circle",null,{"cx":"12","cy":"18","r":"2.5"}],["$","path",null,{"d":"M8.2 7.2 10 16M15.8 7.2 14 16M8.5 6h7"}]]}],"title":"Regional Route Design","desc":"Turboprop range and speed matched to India's major regional-capital corridors."},{"icon":["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","path",null,{"d":"M3 3v18h18"}],["$","path",null,{"d":"M7 14l4-4 3 3 6-7"}]]}],"title":"Scaling to 25 Aircraft","desc":"Phase 2 vision: pan-India connectivity hubs and international regional routes."}],"metrics":[{"value":8.2,"decimals":1,"suffix":"t","label":"ATR72 Payload"},{"value":1600,"suffix":"km","label":"ATR72 Range"},{"value":8.6,"decimals":1,"suffix":"t","label":"Q400 Payload"},{"value":667,"suffix":"km/h","label":"Q400 Speed"}],"cardsHeading":"FLEET SPECIFICATIONS","cardsTheme":{"accent":"#c8102e","accent2":"#ff6a3d","glow":"rgba(200,16,46,0.22)"},"gapTop":true,"gapBottom":true,"badges":[{"value":"3","label":"Phase 1 Aircraft"},{"value":"25","label":"Phase 2 Vision"}],"mediaSlot":["$","video",null,{"autoPlay":true,"loop":true,"muted":true,"playsInline":true,"style":{"width":"100%","height":"100%","minHeight":420,"objectFit":"cover","display":"block","background":"#17171b"},"children":["$","source",null,{"src":"/videos/fleet.mp4","type":"video/mp4"}]}],"ariaLabel":"Doormile Wings fleet strategy"}]]}] -14:["$","section",null,{"className":"WingsInfrastructure-module__akH2-q__section","id":"wings-infrastructure","children":["$","div",null,{"className":"WingsInfrastructure-module__akH2-q__sectionShell","children":[["$","$L1f",null,{"delay":0.05,"duration":0.7,"yOffset":20,"className":"WingsInfrastructure-module__akH2-q__header","children":[["$","div",null,{"className":"WingsInfrastructure-module__akH2-q__eyebrow","children":"/ Infrastructure /"}],["$","h2",null,{"className":"WingsInfrastructure-module__akH2-q__title","children":"A network built to move, not to sit idle"}]]}],["$","$L20",null,{"stagger":0.08,"duration":0.6,"yOffset":20,"className":"WingsInfrastructure-module__akH2-q__grid","children":[["$","div","Airport Cargo Hubs",{"className":"WingsInfrastructure-module__akH2-q__card","children":[["$","div",null,{"className":"WingsInfrastructure-module__akH2-q__icon","aria-hidden":"true","children":["$","svg",null,{"width":"24","height":"24","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10Z"}]}]}],["$","h3",null,{"className":"WingsInfrastructure-module__akH2-q__cardTitle","children":"Airport Cargo Hubs"}],["$","p",null,{"className":"WingsInfrastructure-module__akH2-q__cardDesc","children":"Near-airport clearance hubs instead of standalone warehouses — closer to the tarmac, faster to the aircraft."}]]}],["$","div","Cross-Docking",{"className":"WingsInfrastructure-module__akH2-q__card","children":[["$","div",null,{"className":"WingsInfrastructure-module__akH2-q__icon","aria-hidden":"true","children":["$","svg",null,{"width":"24","height":"24","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M3 7h7l2 3h9M3 7v10h18V10"}]}]}],["$","h3",null,{"className":"WingsInfrastructure-module__akH2-q__cardTitle","children":"Cross-Docking"}],["$","p",null,{"className":"WingsInfrastructure-module__akH2-q__cardDesc","children":"Screening, grouping, and consolidation happen in one motion, minimizing dwell time between arrival and departure."}]]}],["$","div","Asset-Light Network",{"className":"WingsInfrastructure-module__akH2-q__card","children":[["$","div",null,{"className":"WingsInfrastructure-module__akH2-q__icon","aria-hidden":"true","children":["$","svg",null,{"width":"24","height":"24","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","rect",null,{"x":"3","y":"3","width":"7","height":"7","rx":"1"}],["$","rect",null,{"x":"14","y":"3","width":"7","height":"7","rx":"1"}],["$","rect",null,{"x":"3","y":"14","width":"7","height":"7","rx":"1"}],["$","rect",null,{"x":"14","y":"14","width":"7","height":"7","rx":"1"}]]}]}],["$","h3",null,{"className":"WingsInfrastructure-module__akH2-q__cardTitle","children":"Asset-Light Network"}],["$","p",null,{"className":"WingsInfrastructure-module__akH2-q__cardDesc","children":"Leased terminal space that flexes with demand, keeping the network nimble as new routes come online."}]]}],["$","div","Scalable Operations",{"className":"WingsInfrastructure-module__akH2-q__card","children":[["$","div",null,{"className":"WingsInfrastructure-module__akH2-q__icon","aria-hidden":"true","children":["$","svg",null,{"width":"24","height":"24","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M3 21V9l6-4 6 4v12M9 21V13h6v8"}]}]}],["$","h3",null,{"className":"WingsInfrastructure-module__akH2-q__cardTitle","children":"Scalable Operations"}],["$","p",null,{"className":"WingsInfrastructure-module__akH2-q__cardDesc","children":"Modular ground infrastructure built to expand city by city without slowing down day-to-day operations."}]]}]]}]]}]}] -15:["$","$L25",null,{}] -16:["$","$L26",null,{}] -17:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0zi3_4wi6-b2t.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] -18:["$","script","script-0",{"src":"/_next/static/chunks/07eq5is00w7sy.js","async":true,"nonce":"$undefined"}] -19:["$","script","script-1",{"src":"/_next/static/chunks/0~6a87_s8h6ue.js","async":true,"nonce":"$undefined"}] -1a:["$","$L27",null,{"children":["$","$28",null,{"name":"Next.MetadataOutlet","children":"$@29"}]}] -2a:[] -1b:"$W2a" -1c:["$","$1","h",{"children":[null,["$","$L2b",null,{"children":"$L2c"}],["$","div",null,{"hidden":true,"children":["$","$L2d",null,{"children":["$","$28",null,{"name":"Next.Metadata","children":"$L2e"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] -1e:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] -22:["$","section",null,{"className":"wind-section","id":"wings-industries","children":["$","div",null,{"className":"dm-section-container","children":["$","div",null,{"className":"wind-inner","children":[["$","$L1f",null,{"delay":0.05,"duration":0.75,"yOffset":25,"className":"wind-header","children":[["$","div",null,{"className":"wind-eyebrow","children":"/ Industries We Serve /"}],["$","h2",null,{"className":"wind-title","children":"Built for the shipments that can’t wait"}]]}],["$","$L1f",null,{"delay":0.1,"duration":0.8,"yOffset":30,"className":"wind-grid","children":[["$","div","Quick Commerce",{"className":"wind-card","style":{"backgroundImage":"linear-gradient(to bottom, rgba(0,0,0,0.2), rgba(0,0,0,0.8)), url('/images/card 1.png')","backgroundSize":"cover","backgroundPosition":"center"},"children":[["$","div",null,{"className":"wind-card-wash","aria-hidden":"true"}],["$","div",null,{"className":"wind-card-default","children":["$","h3",null,{"className":"wind-card-default-title","children":"Quick Commerce"}]}],["$","div",null,{"className":"wind-card-hover","children":[["$","h3",null,{"className":"wind-card-hover-title","children":"Quick Commerce"}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Challenge"}],["$","p",null,{"className":"wind-card-text","children":"Sub-3-hour delivery windows for dark stores and micro-warehouses."}]]}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Doormile Wings"}],["$","p",null,{"className":"wind-card-text","children":"Dedicated same-day air capacity linking metros to fulfillment hubs."}]]}]]}]]}],["$","div","Express B2B Cargo",{"className":"wind-card","style":{"backgroundImage":"linear-gradient(to bottom, rgba(0,0,0,0.2), rgba(0,0,0,0.8)), url('/images/card 2.png')","backgroundSize":"cover","backgroundPosition":"center"},"children":[["$","div",null,{"className":"wind-card-wash","aria-hidden":"true"}],["$","div",null,{"className":"wind-card-default","children":["$","h3",null,{"className":"wind-card-default-title","children":"Express B2B Cargo"}]}],["$","div",null,{"className":"wind-card-hover","children":[["$","h3",null,{"className":"wind-card-hover-title","children":"Express B2B Cargo"}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Challenge"}],["$","p",null,{"className":"wind-card-text","children":"Time-critical industrial parts and components stuck on slow trunk routes."}]]}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Doormile Wings"}],["$","p",null,{"className":"wind-card-text","children":"Rapid airport-to-airport transport between major economic nodes."}]]}]]}]]}],["$","div","Healthcare & Pharma",{"className":"wind-card","style":{"backgroundImage":"linear-gradient(to bottom, rgba(0,0,0,0.2), rgba(0,0,0,0.8)), url('/images/card 3.png')","backgroundSize":"cover","backgroundPosition":"center"},"children":[["$","div",null,{"className":"wind-card-wash","aria-hidden":"true"}],["$","div",null,{"className":"wind-card-default","children":["$","h3",null,{"className":"wind-card-default-title","children":"Healthcare & Pharma"}]}],["$","div",null,{"className":"wind-card-hover","children":[["$","h3",null,{"className":"wind-card-hover-title","children":"Healthcare & Pharma"}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Challenge"}],["$","p",null,{"className":"wind-card-text","children":"Temperature-sensitive, compliance-critical shipments with zero margin for error."}]]}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Doormile Wings"}],["$","p",null,{"className":"wind-card-text","children":"Active and passive cold-chain packaging with full chain-of-custody tracking."}]]}]]}]]}],["$","div","Cold Chain Logistics",{"className":"wind-card","style":{"backgroundImage":"linear-gradient(to bottom, rgba(0,0,0,0.2), rgba(0,0,0,0.8)), url('/images/card4.png')","backgroundSize":"cover","backgroundPosition":"center"},"children":[["$","div",null,{"className":"wind-card-wash","aria-hidden":"true"}],["$","div",null,{"className":"wind-card-default","children":["$","h3",null,{"className":"wind-card-default-title","children":"Cold Chain Logistics"}]}],["$","div",null,{"className":"wind-card-hover","children":[["$","h3",null,{"className":"wind-card-hover-title","children":"Cold Chain Logistics"}],"$L2f","$L30"]}]]}],"$L31","$L32"]}]]}]}]}] -2f:["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Challenge"}],["$","p",null,{"className":"wind-card-text","children":"Perishables and fresh goods that can't survive slow surface transit."}]]}] -30:["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Doormile Wings"}],["$","p",null,{"className":"wind-card-text","children":"Precision temperature tracking matched to airline-speed transit."}]]}] -31:["$","div","High-Value Cargo",{"className":"wind-card","style":{"backgroundImage":"linear-gradient(to bottom, rgba(0,0,0,0.2), rgba(0,0,0,0.8)), url('/images/card5.png')","backgroundSize":"cover","backgroundPosition":"center"},"children":[["$","div",null,{"className":"wind-card-wash","aria-hidden":"true"}],["$","div",null,{"className":"wind-card-default","children":["$","h3",null,{"className":"wind-card-default-title","children":"High-Value Cargo"}]}],["$","div",null,{"className":"wind-card-hover","children":[["$","h3",null,{"className":"wind-card-hover-title","children":"High-Value Cargo"}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Challenge"}],["$","p",null,{"className":"wind-card-text","children":"Zero tolerance for loss, tampering, or delay on high-value shipments."}]]}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Doormile Wings"}],["$","p",null,{"className":"wind-card-text","children":"Maximum-security handling with real-time electronic custody tracking."}]]}]]}]]}] -32:["$","div","E-Commerce Logistics",{"className":"wind-card","style":{"backgroundImage":"linear-gradient(to bottom, rgba(0,0,0,0.2), rgba(0,0,0,0.8)), url('/images/card6.png')","backgroundSize":"cover","backgroundPosition":"center"},"children":[["$","div",null,{"className":"wind-card-wash","aria-hidden":"true"}],["$","div",null,{"className":"wind-card-default","children":["$","h3",null,{"className":"wind-card-default-title","children":"E-Commerce Logistics"}]}],["$","div",null,{"className":"wind-card-hover","children":[["$","h3",null,{"className":"wind-card-hover-title","children":"E-Commerce Logistics"}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Challenge"}],["$","p",null,{"className":"wind-card-text","children":"Next-day and same-day fulfillment expectations across tier-1 and tier-2 cities."}]]}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Doormile Wings"}],["$","p",null,{"className":"wind-card-text","children":"Direct sorting-hub-to-airport clearance network for faster regional delivery."}]]}]]}]]}] -2c:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -33:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -29:null -2e:[["$","title","0",{"children":"Doormile Wings – Redefining Domestic Air Logistics Through AI"}],["$","meta","1",{"name":"description","content":"Doormile Wings links India's major regional capitals with AI-powered, same-day air logistics and zero-emission EV last-mile delivery — where quick commerce meets quick logistics."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"canonical","href":"https://doormile.com/doormile-wings"}],["$","meta","4",{"property":"og:title","content":"Doormile Wings – Redefining Domestic Air Logistics Through AI"}],["$","meta","5",{"property":"og:description","content":"Same-day air logistics linking India's major regional capitals, powered by MileTruth™ AI and zero-emission EV last-mile delivery."}],["$","meta","6",{"property":"og:url","content":"https://doormile.com/doormile-wings"}],["$","meta","7",{"property":"og:site_name","content":"Doormile"}],["$","meta","8",{"property":"og:image","content":"https://doormile.com/images/wings-logo.png"}],["$","meta","9",{"property":"og:image:width","content":"1200"}],["$","meta","10",{"property":"og:image:height","content":"630"}],["$","meta","11",{"property":"og:image:alt","content":"Doormile Wings"}],["$","meta","12",{"property":"og:type","content":"website"}],["$","meta","13",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","14",{"name":"twitter:title","content":"Doormile Wings – Redefining Domestic Air Logistics Through AI"}],["$","meta","15",{"name":"twitter:description","content":"Same-day air logistics linking India's major regional capitals, powered by MileTruth™ AI and zero-emission EV last-mile delivery."}],["$","meta","16",{"name":"twitter:image","content":"https://doormile.com/images/wings-logo.png"}],["$","link","17",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","18",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","19",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L33","21",{}]] diff --git a/build/doormile-wings/__next._full.txt b/build/doormile-wings/__next._full.txt deleted file mode 100644 index e45d876..0000000 --- a/build/doormile-wings/__next._full.txt +++ /dev/null @@ -1,299 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -c:I[36202,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~6a87_s8h6ue.js"],"default"] -d:I[63061,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~6a87_s8h6ue.js"],"default"] -e:I[10425,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~6a87_s8h6ue.js"],"default"] -1d:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/chunks/0zi3_4wi6-b2t.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -f:Tafb, - .wfg-section { - background: #ffffff; - padding: var(--space-section-lg, 80px) 0; - } - - .wfg-header { - margin: 0 auto 48px auto; - max-width: 720px; - text-align: center; - } - - .wfg-eyebrow { - font-size: 13px; - font-weight: 700; - letter-spacing: 2px; - text-transform: uppercase; - color: rgba(17, 17, 17, 0.45); - margin-bottom: 16px; - } - - .wfg-title { - font-size: clamp(28px, 3.2vw, 46px) !important; - font-weight: 800 !important; - letter-spacing: -0.03em !important; - line-height: 1.15 !important; - text-transform: none !important; - color: #111111 !important; - margin: 0; - } - - .wfg-inner { - max-width: 1380px; - margin: 0 auto; - } - - .wfg-grid { - display: grid; - grid-template-columns: repeat(4, minmax(0, 1fr)); - gap: 20px; - } - - .wfg-card { - min-width: 0; - background: #ffffff; - border: 1px solid rgba(17, 17, 17, 0.1); - border-radius: 20px; - padding: 30px 26px; - transition: border-color 0.35s ease, box-shadow 0.35s ease, transform 0.35s cubic-bezier(0.165, 0.84, 0.44, 1); - } - - .wfg-card:hover { - border-color: #c8102e; - box-shadow: 0 20px 40px rgba(200, 16, 46, 0.08); - transform: translateY(-8px); - } - - .wfg-icon { - width: 46px; - height: 46px; - display: flex; - align-items: center; - justify-content: center; - border-radius: 12px; - background: rgba(200, 16, 46, 0.06); - color: #c8102e; - margin-bottom: 20px; - } - - .wfg-card-title { - font-size: 16.5px !important; - font-weight: 700 !important; - line-height: 1.3 !important; - text-transform: none !important; - color: #111111 !important; - margin: 0 0 8px 0; - } - - .wfg-card-desc { - font-size: 14px; - line-height: 1.55; - color: rgba(17, 17, 17, 0.6); - margin: 0; - } - - @media (max-width: 1024px) { - .wfg-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } - } - - @media (max-width: 600px) { - .wfg-grid { grid-template-columns: 1fr; } - /* var(--space-section-lg) floors at a fixed 52px on any phone - width (clamp() has no further breakpoint-based step-down), which - reads as noticeably heavier than the section rhythm near the - footer. Trimmed to a real mobile value here instead. */ - .wfg-section { padding-top: 44px; padding-bottom: 44px; } - } - 0:{"P":null,"c":["","doormile-wings"],"q":"","i":false,"f":[[["",{"children":["doormile-wings",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","div",null,{"id":"doormile-wings","className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","div",null,{"data-elementor-type":"wp-page","data-elementor-id":"95","className":"elementor elementor-95 elementor-59","children":[["$","$Lc",null,{}],["$","$Ld",null,{}],["$","$Le",null,{}],[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$f"}}],"$L10"],"$L11","$L12","$L13","$L14","$L15","$L16"]}]}]}]}],["$L17","$L18","$L19"],"$L1a"]}],{},null,false,null]},null,false,"$@1b"]},null,false,null],"$L1c",false]],"m":"$undefined","G":["$1d",["$L1e"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -1f:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~6a87_s8h6ue.js"],"ScrollReveal"] -20:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~6a87_s8h6ue.js"],"StaggerChildren"] -23:I[48920,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~6a87_s8h6ue.js"],"default"] -24:I[14224,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~6a87_s8h6ue.js"],"default"] -25:I[55064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~6a87_s8h6ue.js"],"default"] -26:I[13378,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~6a87_s8h6ue.js"],"default"] -27:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -28:"$Sreact.suspense" -2b:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -2d:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -10:["$","section",null,{"className":"wfg-section","id":"wings-features","children":["$","div",null,{"className":"dm-section-container","children":["$","div",null,{"className":"wfg-inner","children":[["$","$L1f",null,{"delay":0.05,"duration":0.75,"yOffset":25,"className":"wfg-header","children":[["$","div",null,{"className":"wfg-eyebrow","children":"/ Why Businesses Choose Doormile Wings /"}],["$","h2",null,{"className":"wfg-title","children":"Built to be depended on"}]]}],["$","$L20",null,{"stagger":0.1,"duration":0.7,"yOffset":30,"className":"wfg-grid","children":[["$","div","AI Decision Engine",{"className":"wfg-card","children":[["$","div",null,{"className":"wfg-icon","aria-hidden":"true","children":["$","svg",null,{"width":"24","height":"24","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","path",null,{"d":"M12 2a4 4 0 0 1 4 4v1a4 4 0 0 1-1.2 2.86A4 4 0 0 1 16 13v1a4 4 0 0 1-4 4 4 4 0 0 1-4-4v-1a4 4 0 0 1 1.2-3.14A4 4 0 0 1 8 7V6a4 4 0 0 1 4-4Z"}],["$","path",null,{"d":"M9 21h6M12 18v3"}]]}]}],["$","h3",null,{"className":"wfg-card-title","children":"AI Decision Engine"}],["$","p",null,{"className":"wfg-card-desc","children":"MileTruth™ AI continuously forecasts demand and optimizes routing and load decisions in real time."}]]}],["$","div","Real-Time Visibility",{"className":"wfg-card","children":[["$","div",null,{"className":"wfg-icon","aria-hidden":"true","children":["$","svg",null,{"width":"24","height":"24","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","path",null,{"d":"M1 12s4-7 11-7 11 7 11 7-4 7-11 7-11-7-11-7Z"}],["$","circle",null,{"cx":"12","cy":"12","r":"3"}]]}]}],["$","h3",null,{"className":"wfg-card-title","children":"Real-Time Visibility"}],["$","p",null,{"className":"wfg-card-desc","children":"Live shipment tracking keeps shippers, ground teams, and customers updated at every stage."}]]}],["$","div","Faster Regional Reach",{"className":"wfg-card","children":[["$","div",null,{"className":"wfg-icon","aria-hidden":"true","children":["$","svg",null,{"width":"24","height":"24","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"13 6 19 12 13 18"}]]}]}],["$","h3",null,{"className":"wfg-card-title","children":"Faster Regional Reach"}],["$","p",null,{"className":"wfg-card-desc","children":"A dedicated network linking major regional capitals, built for speed rather than passenger schedules."}]]}],["$","div","Reliable Scheduled Operations",{"className":"wfg-card","children":[["$","div",null,{"className":"wfg-icon","aria-hidden":"true","children":["$","svg",null,{"width":"24","height":"24","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"3"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}],["$","path",null,{"d":"M9 16l2 2 4-4"}]]}]}],["$","h3",null,{"className":"wfg-card-title","children":"Reliable Scheduled Operations"}],["$","p",null,{"className":"wfg-card-desc","children":"Dedicated freighter capacity with consistent schedules — not subject to passenger-belly bumping."}]]}]]}]]}]}]}] -21:Tfac, - .wind-section { - background: #fafafa; - padding: var(--space-section-lg, 80px) 0 20px 0; /* Reduced bottom padding to minimize gap */ - } - - .wind-header { - margin: 0 auto 48px auto; - max-width: 720px; - text-align: center; - } - - .wind-eyebrow { - font-size: 13px; - font-weight: 700; - letter-spacing: 2px; - text-transform: uppercase; - color: rgba(17, 17, 17, 0.45); - margin-bottom: 16px; - } - - .wind-title { - font-size: clamp(28px, 3.2vw, 46px) !important; - font-weight: 800 !important; - letter-spacing: -0.03em !important; - line-height: 1.15 !important; - text-transform: none !important; - color: #111111 !important; - margin: 0; - } - - .wind-inner { - max-width: 1380px; - margin: 0 auto; - } - - .wind-grid { - display: grid; - grid-template-columns: repeat(3, minmax(0, 1fr)); - gap: 20px; - } - - .wind-card { - position: relative; - min-width: 0; - aspect-ratio: 4 / 5; - border-radius: 20px; - overflow: hidden; - background: linear-gradient(150deg, #17171b 0%, #0b0b0d 100%); - isolation: isolate; - } - - .wind-card-wash { - position: absolute; - inset: 0; - background: linear-gradient(160deg, rgba(200, 16, 46, 0.35) 0%, rgba(200, 16, 46, 0) 60%); - opacity: 0.5; - transition: opacity 0.4s ease; - } - - .wind-card:hover .wind-card-wash { - opacity: 1; - } - - .wind-card-default { - position: absolute; - left: 24px; - right: 24px; - bottom: 24px; - transition: opacity 0.3s ease, transform 0.3s ease; - } - - .wind-card:hover .wind-card-default { - opacity: 0; - transform: translateY(8px); - pointer-events: none; - } - - .wind-card .wind-card-default-title { - font-size: 20px !important; - font-weight: 800 !important; - line-height: 1.3 !important; - text-transform: none !important; - color: #ffffff !important; - margin: 0; - } - - .wind-card-hover { - position: absolute; - inset: 0; - padding: 26px 24px; - display: flex; - flex-direction: column; - justify-content: flex-end; - gap: 14px; - opacity: 0; - transform: translateY(10px); - transition: opacity 0.35s ease, transform 0.35s ease; - } - - .wind-card:hover .wind-card-hover { - opacity: 1; - transform: translateY(0); - } - - .wind-card .wind-card-hover-title { - font-size: 19px !important; - font-weight: 800 !important; - line-height: 1.3 !important; - text-transform: none !important; - color: #ffffff !important; - margin: 0; - } - - .wind-card-label { - font-size: 10.5px; - font-weight: 800; - letter-spacing: 1.2px; - text-transform: uppercase; - color: rgba(255, 255, 255, 0.5); - margin: 0 0 4px 0; - } - - .wind-card-text { - font-size: 13px; - line-height: 1.5; - color: rgba(255, 255, 255, 0.85); - margin: 0; - } - - @media (max-width: 1024px) { - .wind-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } - } - - @media (max-width: 600px) { - .wind-grid { grid-template-columns: 1fr; } - .wind-card { aspect-ratio: 3 / 4; } - /* var(--space-section-lg) floors at a fixed 52px on any phone - width; bottom is already trimmed to 20px, so only the top needs - a real mobile reduction to match the section rhythm near the - footer. */ - .wind-section { padding-top: 44px; } - } - 11:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$21"}}],"$L22"] -12:["$","$L23",null,{}] -13:["$","div",null,{"id":"wings-fleet","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"\n @media (max-width: 767px) {\n #wings-fleet .evnd-gap-bottom { margin-bottom: 14px !important; }\n }\n "}}],["$","$L24",null,{"bannerImage":"/images/pahse1.png","cardTitle":"Quick Logistics","cardSubtitle":"Same-Day Air Network","eyebrow":"/ Fleet Strategy /","titleLead":"Purpose-Built for ","titleAccent":"Regional Speed","features":[{"icon":["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M22 12h-6l-4-9-2 1 3 8H5l-2-3-1.5.6L3 14l1.5 4.4L6 18l-2-3h8l3 8 2-1-3-8h6z"}]}],"title":"Dedicated Freighter Capacity","desc":"Purpose-built cargo lift, not passenger-belly space competing with baggage."},{"icon":["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","circle",null,{"cx":"6","cy":"6","r":"2.5"}],["$","circle",null,{"cx":"18","cy":"6","r":"2.5"}],["$","circle",null,{"cx":"12","cy":"18","r":"2.5"}],["$","path",null,{"d":"M8.2 7.2 10 16M15.8 7.2 14 16M8.5 6h7"}]]}],"title":"Regional Route Design","desc":"Turboprop range and speed matched to India's major regional-capital corridors."},{"icon":["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","path",null,{"d":"M3 3v18h18"}],["$","path",null,{"d":"M7 14l4-4 3 3 6-7"}]]}],"title":"Scaling to 25 Aircraft","desc":"Phase 2 vision: pan-India connectivity hubs and international regional routes."}],"metrics":[{"value":8.2,"decimals":1,"suffix":"t","label":"ATR72 Payload"},{"value":1600,"suffix":"km","label":"ATR72 Range"},{"value":8.6,"decimals":1,"suffix":"t","label":"Q400 Payload"},{"value":667,"suffix":"km/h","label":"Q400 Speed"}],"cardsHeading":"FLEET SPECIFICATIONS","cardsTheme":{"accent":"#c8102e","accent2":"#ff6a3d","glow":"rgba(200,16,46,0.22)"},"gapTop":true,"gapBottom":true,"badges":[{"value":"3","label":"Phase 1 Aircraft"},{"value":"25","label":"Phase 2 Vision"}],"mediaSlot":["$","video",null,{"autoPlay":true,"loop":true,"muted":true,"playsInline":true,"style":{"width":"100%","height":"100%","minHeight":420,"objectFit":"cover","display":"block","background":"#17171b"},"children":["$","source",null,{"src":"/videos/fleet.mp4","type":"video/mp4"}]}],"ariaLabel":"Doormile Wings fleet strategy"}]]}] -14:["$","section",null,{"className":"WingsInfrastructure-module__akH2-q__section","id":"wings-infrastructure","children":["$","div",null,{"className":"WingsInfrastructure-module__akH2-q__sectionShell","children":[["$","$L1f",null,{"delay":0.05,"duration":0.7,"yOffset":20,"className":"WingsInfrastructure-module__akH2-q__header","children":[["$","div",null,{"className":"WingsInfrastructure-module__akH2-q__eyebrow","children":"/ Infrastructure /"}],["$","h2",null,{"className":"WingsInfrastructure-module__akH2-q__title","children":"A network built to move, not to sit idle"}]]}],["$","$L20",null,{"stagger":0.08,"duration":0.6,"yOffset":20,"className":"WingsInfrastructure-module__akH2-q__grid","children":[["$","div","Airport Cargo Hubs",{"className":"WingsInfrastructure-module__akH2-q__card","children":[["$","div",null,{"className":"WingsInfrastructure-module__akH2-q__icon","aria-hidden":"true","children":["$","svg",null,{"width":"24","height":"24","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10Z"}]}]}],["$","h3",null,{"className":"WingsInfrastructure-module__akH2-q__cardTitle","children":"Airport Cargo Hubs"}],["$","p",null,{"className":"WingsInfrastructure-module__akH2-q__cardDesc","children":"Near-airport clearance hubs instead of standalone warehouses — closer to the tarmac, faster to the aircraft."}]]}],["$","div","Cross-Docking",{"className":"WingsInfrastructure-module__akH2-q__card","children":[["$","div",null,{"className":"WingsInfrastructure-module__akH2-q__icon","aria-hidden":"true","children":["$","svg",null,{"width":"24","height":"24","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M3 7h7l2 3h9M3 7v10h18V10"}]}]}],["$","h3",null,{"className":"WingsInfrastructure-module__akH2-q__cardTitle","children":"Cross-Docking"}],["$","p",null,{"className":"WingsInfrastructure-module__akH2-q__cardDesc","children":"Screening, grouping, and consolidation happen in one motion, minimizing dwell time between arrival and departure."}]]}],["$","div","Asset-Light Network",{"className":"WingsInfrastructure-module__akH2-q__card","children":[["$","div",null,{"className":"WingsInfrastructure-module__akH2-q__icon","aria-hidden":"true","children":["$","svg",null,{"width":"24","height":"24","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","rect",null,{"x":"3","y":"3","width":"7","height":"7","rx":"1"}],["$","rect",null,{"x":"14","y":"3","width":"7","height":"7","rx":"1"}],["$","rect",null,{"x":"3","y":"14","width":"7","height":"7","rx":"1"}],["$","rect",null,{"x":"14","y":"14","width":"7","height":"7","rx":"1"}]]}]}],["$","h3",null,{"className":"WingsInfrastructure-module__akH2-q__cardTitle","children":"Asset-Light Network"}],["$","p",null,{"className":"WingsInfrastructure-module__akH2-q__cardDesc","children":"Leased terminal space that flexes with demand, keeping the network nimble as new routes come online."}]]}],["$","div","Scalable Operations",{"className":"WingsInfrastructure-module__akH2-q__card","children":[["$","div",null,{"className":"WingsInfrastructure-module__akH2-q__icon","aria-hidden":"true","children":["$","svg",null,{"width":"24","height":"24","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M3 21V9l6-4 6 4v12M9 21V13h6v8"}]}]}],["$","h3",null,{"className":"WingsInfrastructure-module__akH2-q__cardTitle","children":"Scalable Operations"}],["$","p",null,{"className":"WingsInfrastructure-module__akH2-q__cardDesc","children":"Modular ground infrastructure built to expand city by city without slowing down day-to-day operations."}]]}]]}]]}]}] -15:["$","$L25",null,{}] -16:["$","$L26",null,{}] -17:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0zi3_4wi6-b2t.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] -18:["$","script","script-0",{"src":"/_next/static/chunks/07eq5is00w7sy.js","async":true,"nonce":"$undefined"}] -19:["$","script","script-1",{"src":"/_next/static/chunks/0~6a87_s8h6ue.js","async":true,"nonce":"$undefined"}] -1a:["$","$L27",null,{"children":["$","$28",null,{"name":"Next.MetadataOutlet","children":"$@29"}]}] -2a:[] -1b:"$W2a" -1c:["$","$1","h",{"children":[null,["$","$L2b",null,{"children":"$L2c"}],["$","div",null,{"hidden":true,"children":["$","$L2d",null,{"children":["$","$28",null,{"name":"Next.Metadata","children":"$L2e"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] -1e:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] -22:["$","section",null,{"className":"wind-section","id":"wings-industries","children":["$","div",null,{"className":"dm-section-container","children":["$","div",null,{"className":"wind-inner","children":[["$","$L1f",null,{"delay":0.05,"duration":0.75,"yOffset":25,"className":"wind-header","children":[["$","div",null,{"className":"wind-eyebrow","children":"/ Industries We Serve /"}],["$","h2",null,{"className":"wind-title","children":"Built for the shipments that can’t wait"}]]}],["$","$L1f",null,{"delay":0.1,"duration":0.8,"yOffset":30,"className":"wind-grid","children":[["$","div","Quick Commerce",{"className":"wind-card","style":{"backgroundImage":"linear-gradient(to bottom, rgba(0,0,0,0.2), rgba(0,0,0,0.8)), url('/images/card 1.png')","backgroundSize":"cover","backgroundPosition":"center"},"children":[["$","div",null,{"className":"wind-card-wash","aria-hidden":"true"}],["$","div",null,{"className":"wind-card-default","children":["$","h3",null,{"className":"wind-card-default-title","children":"Quick Commerce"}]}],["$","div",null,{"className":"wind-card-hover","children":[["$","h3",null,{"className":"wind-card-hover-title","children":"Quick Commerce"}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Challenge"}],["$","p",null,{"className":"wind-card-text","children":"Sub-3-hour delivery windows for dark stores and micro-warehouses."}]]}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Doormile Wings"}],["$","p",null,{"className":"wind-card-text","children":"Dedicated same-day air capacity linking metros to fulfillment hubs."}]]}]]}]]}],["$","div","Express B2B Cargo",{"className":"wind-card","style":{"backgroundImage":"linear-gradient(to bottom, rgba(0,0,0,0.2), rgba(0,0,0,0.8)), url('/images/card 2.png')","backgroundSize":"cover","backgroundPosition":"center"},"children":[["$","div",null,{"className":"wind-card-wash","aria-hidden":"true"}],["$","div",null,{"className":"wind-card-default","children":["$","h3",null,{"className":"wind-card-default-title","children":"Express B2B Cargo"}]}],["$","div",null,{"className":"wind-card-hover","children":[["$","h3",null,{"className":"wind-card-hover-title","children":"Express B2B Cargo"}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Challenge"}],["$","p",null,{"className":"wind-card-text","children":"Time-critical industrial parts and components stuck on slow trunk routes."}]]}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Doormile Wings"}],["$","p",null,{"className":"wind-card-text","children":"Rapid airport-to-airport transport between major economic nodes."}]]}]]}]]}],["$","div","Healthcare & Pharma",{"className":"wind-card","style":{"backgroundImage":"linear-gradient(to bottom, rgba(0,0,0,0.2), rgba(0,0,0,0.8)), url('/images/card 3.png')","backgroundSize":"cover","backgroundPosition":"center"},"children":[["$","div",null,{"className":"wind-card-wash","aria-hidden":"true"}],["$","div",null,{"className":"wind-card-default","children":["$","h3",null,{"className":"wind-card-default-title","children":"Healthcare & Pharma"}]}],["$","div",null,{"className":"wind-card-hover","children":[["$","h3",null,{"className":"wind-card-hover-title","children":"Healthcare & Pharma"}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Challenge"}],["$","p",null,{"className":"wind-card-text","children":"Temperature-sensitive, compliance-critical shipments with zero margin for error."}]]}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Doormile Wings"}],["$","p",null,{"className":"wind-card-text","children":"Active and passive cold-chain packaging with full chain-of-custody tracking."}]]}]]}]]}],["$","div","Cold Chain Logistics",{"className":"wind-card","style":{"backgroundImage":"linear-gradient(to bottom, rgba(0,0,0,0.2), rgba(0,0,0,0.8)), url('/images/card4.png')","backgroundSize":"cover","backgroundPosition":"center"},"children":[["$","div",null,{"className":"wind-card-wash","aria-hidden":"true"}],["$","div",null,{"className":"wind-card-default","children":["$","h3",null,{"className":"wind-card-default-title","children":"Cold Chain Logistics"}]}],["$","div",null,{"className":"wind-card-hover","children":[["$","h3",null,{"className":"wind-card-hover-title","children":"Cold Chain Logistics"}],"$L2f","$L30"]}]]}],"$L31","$L32"]}]]}]}]}] -2f:["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Challenge"}],["$","p",null,{"className":"wind-card-text","children":"Perishables and fresh goods that can't survive slow surface transit."}]]}] -30:["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Doormile Wings"}],["$","p",null,{"className":"wind-card-text","children":"Precision temperature tracking matched to airline-speed transit."}]]}] -31:["$","div","High-Value Cargo",{"className":"wind-card","style":{"backgroundImage":"linear-gradient(to bottom, rgba(0,0,0,0.2), rgba(0,0,0,0.8)), url('/images/card5.png')","backgroundSize":"cover","backgroundPosition":"center"},"children":[["$","div",null,{"className":"wind-card-wash","aria-hidden":"true"}],["$","div",null,{"className":"wind-card-default","children":["$","h3",null,{"className":"wind-card-default-title","children":"High-Value Cargo"}]}],["$","div",null,{"className":"wind-card-hover","children":[["$","h3",null,{"className":"wind-card-hover-title","children":"High-Value Cargo"}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Challenge"}],["$","p",null,{"className":"wind-card-text","children":"Zero tolerance for loss, tampering, or delay on high-value shipments."}]]}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Doormile Wings"}],["$","p",null,{"className":"wind-card-text","children":"Maximum-security handling with real-time electronic custody tracking."}]]}]]}]]}] -32:["$","div","E-Commerce Logistics",{"className":"wind-card","style":{"backgroundImage":"linear-gradient(to bottom, rgba(0,0,0,0.2), rgba(0,0,0,0.8)), url('/images/card6.png')","backgroundSize":"cover","backgroundPosition":"center"},"children":[["$","div",null,{"className":"wind-card-wash","aria-hidden":"true"}],["$","div",null,{"className":"wind-card-default","children":["$","h3",null,{"className":"wind-card-default-title","children":"E-Commerce Logistics"}]}],["$","div",null,{"className":"wind-card-hover","children":[["$","h3",null,{"className":"wind-card-hover-title","children":"E-Commerce Logistics"}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Challenge"}],["$","p",null,{"className":"wind-card-text","children":"Next-day and same-day fulfillment expectations across tier-1 and tier-2 cities."}]]}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Doormile Wings"}],["$","p",null,{"className":"wind-card-text","children":"Direct sorting-hub-to-airport clearance network for faster regional delivery."}]]}]]}]]}] -2c:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -33:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -29:null -2e:[["$","title","0",{"children":"Doormile Wings – Redefining Domestic Air Logistics Through AI"}],["$","meta","1",{"name":"description","content":"Doormile Wings links India's major regional capitals with AI-powered, same-day air logistics and zero-emission EV last-mile delivery — where quick commerce meets quick logistics."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"canonical","href":"https://doormile.com/doormile-wings"}],["$","meta","4",{"property":"og:title","content":"Doormile Wings – Redefining Domestic Air Logistics Through AI"}],["$","meta","5",{"property":"og:description","content":"Same-day air logistics linking India's major regional capitals, powered by MileTruth™ AI and zero-emission EV last-mile delivery."}],["$","meta","6",{"property":"og:url","content":"https://doormile.com/doormile-wings"}],["$","meta","7",{"property":"og:site_name","content":"Doormile"}],["$","meta","8",{"property":"og:image","content":"https://doormile.com/images/wings-logo.png"}],["$","meta","9",{"property":"og:image:width","content":"1200"}],["$","meta","10",{"property":"og:image:height","content":"630"}],["$","meta","11",{"property":"og:image:alt","content":"Doormile Wings"}],["$","meta","12",{"property":"og:type","content":"website"}],["$","meta","13",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","14",{"name":"twitter:title","content":"Doormile Wings – Redefining Domestic Air Logistics Through AI"}],["$","meta","15",{"name":"twitter:description","content":"Same-day air logistics linking India's major regional capitals, powered by MileTruth™ AI and zero-emission EV last-mile delivery."}],["$","meta","16",{"name":"twitter:image","content":"https://doormile.com/images/wings-logo.png"}],["$","link","17",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","18",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","19",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L33","21",{}]] diff --git a/build/doormile-wings/__next._head.txt b/build/doormile-wings/__next._head.txt deleted file mode 100644 index 1c2274e..0000000 --- a/build/doormile-wings/__next._head.txt +++ /dev/null @@ -1,6 +0,0 @@ -1:"$Sreact.fragment" -2:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -3:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -4:"$Sreact.suspense" -5:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Doormile Wings – Redefining Domestic Air Logistics Through AI"}],["$","meta","1",{"name":"description","content":"Doormile Wings links India's major regional capitals with AI-powered, same-day air logistics and zero-emission EV last-mile delivery — where quick commerce meets quick logistics."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"canonical","href":"https://doormile.com/doormile-wings"}],["$","meta","4",{"property":"og:title","content":"Doormile Wings – Redefining Domestic Air Logistics Through AI"}],["$","meta","5",{"property":"og:description","content":"Same-day air logistics linking India's major regional capitals, powered by MileTruth™ AI and zero-emission EV last-mile delivery."}],["$","meta","6",{"property":"og:url","content":"https://doormile.com/doormile-wings"}],["$","meta","7",{"property":"og:site_name","content":"Doormile"}],["$","meta","8",{"property":"og:image","content":"https://doormile.com/images/wings-logo.png"}],["$","meta","9",{"property":"og:image:width","content":"1200"}],["$","meta","10",{"property":"og:image:height","content":"630"}],["$","meta","11",{"property":"og:image:alt","content":"Doormile Wings"}],["$","meta","12",{"property":"og:type","content":"website"}],["$","meta","13",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","14",{"name":"twitter:title","content":"Doormile Wings – Redefining Domestic Air Logistics Through AI"}],["$","meta","15",{"name":"twitter:description","content":"Same-day air logistics linking India's major regional capitals, powered by MileTruth™ AI and zero-emission EV last-mile delivery."}],["$","meta","16",{"name":"twitter:image","content":"https://doormile.com/images/wings-logo.png"}],["$","link","17",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","18",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","19",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L5","21",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/doormile-wings/__next._index.txt b/build/doormile-wings/__next._index.txt deleted file mode 100644 index d0b3355..0000000 --- a/build/doormile-wings/__next._index.txt +++ /dev/null @@ -1,15 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","template":["$","$La",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/doormile-wings/__next._tree.txt b/build/doormile-wings/__next._tree.txt deleted file mode 100644 index f7f3493..0000000 --- a/build/doormile-wings/__next._tree.txt +++ /dev/null @@ -1,10 +0,0 @@ -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/chunks/0zi3_4wi6-b2t.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"doormile-wings","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/doormile-wings/__next.doormile-wings.__PAGE__.txt b/build/doormile-wings/__next.doormile-wings.__PAGE__.txt deleted file mode 100644 index c27a2d8..0000000 --- a/build/doormile-wings/__next.doormile-wings.__PAGE__.txt +++ /dev/null @@ -1,271 +0,0 @@ -1:"$Sreact.fragment" -2:I[36202,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~6a87_s8h6ue.js"],"default"] -3:I[63061,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~6a87_s8h6ue.js"],"default"] -4:I[10425,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~6a87_s8h6ue.js"],"default"] -11:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~6a87_s8h6ue.js"],"ScrollReveal"] -12:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~6a87_s8h6ue.js"],"StaggerChildren"] -15:I[48920,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~6a87_s8h6ue.js"],"default"] -16:I[14224,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~6a87_s8h6ue.js"],"default"] -17:I[55064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~6a87_s8h6ue.js"],"default"] -18:I[13378,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~6a87_s8h6ue.js"],"default"] -19:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -1a:"$Sreact.suspense" -:HL["/_next/static/chunks/0zi3_4wi6-b2t.css","style"] -5:Tafb, - .wfg-section { - background: #ffffff; - padding: var(--space-section-lg, 80px) 0; - } - - .wfg-header { - margin: 0 auto 48px auto; - max-width: 720px; - text-align: center; - } - - .wfg-eyebrow { - font-size: 13px; - font-weight: 700; - letter-spacing: 2px; - text-transform: uppercase; - color: rgba(17, 17, 17, 0.45); - margin-bottom: 16px; - } - - .wfg-title { - font-size: clamp(28px, 3.2vw, 46px) !important; - font-weight: 800 !important; - letter-spacing: -0.03em !important; - line-height: 1.15 !important; - text-transform: none !important; - color: #111111 !important; - margin: 0; - } - - .wfg-inner { - max-width: 1380px; - margin: 0 auto; - } - - .wfg-grid { - display: grid; - grid-template-columns: repeat(4, minmax(0, 1fr)); - gap: 20px; - } - - .wfg-card { - min-width: 0; - background: #ffffff; - border: 1px solid rgba(17, 17, 17, 0.1); - border-radius: 20px; - padding: 30px 26px; - transition: border-color 0.35s ease, box-shadow 0.35s ease, transform 0.35s cubic-bezier(0.165, 0.84, 0.44, 1); - } - - .wfg-card:hover { - border-color: #c8102e; - box-shadow: 0 20px 40px rgba(200, 16, 46, 0.08); - transform: translateY(-8px); - } - - .wfg-icon { - width: 46px; - height: 46px; - display: flex; - align-items: center; - justify-content: center; - border-radius: 12px; - background: rgba(200, 16, 46, 0.06); - color: #c8102e; - margin-bottom: 20px; - } - - .wfg-card-title { - font-size: 16.5px !important; - font-weight: 700 !important; - line-height: 1.3 !important; - text-transform: none !important; - color: #111111 !important; - margin: 0 0 8px 0; - } - - .wfg-card-desc { - font-size: 14px; - line-height: 1.55; - color: rgba(17, 17, 17, 0.6); - margin: 0; - } - - @media (max-width: 1024px) { - .wfg-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } - } - - @media (max-width: 600px) { - .wfg-grid { grid-template-columns: 1fr; } - /* var(--space-section-lg) floors at a fixed 52px on any phone - width (clamp() has no further breakpoint-based step-down), which - reads as noticeably heavier than the section rhythm near the - footer. Trimmed to a real mobile value here instead. */ - .wfg-section { padding-top: 44px; padding-bottom: 44px; } - } - 0:{"rsc":["$","$1","c",{"children":[["$","div",null,{"id":"doormile-wings","className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","div",null,{"data-elementor-type":"wp-page","data-elementor-id":"95","className":"elementor elementor-95 elementor-59","children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{}],[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$5"}}],["$","section",null,{"className":"wfg-section","id":"wings-features","children":"$L6"}]],"$L7","$L8","$L9","$La","$Lb","$Lc"]}]}]}]}],["$Ld","$Le","$Lf"],"$L10"]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} -6:["$","div",null,{"className":"dm-section-container","children":["$","div",null,{"className":"wfg-inner","children":[["$","$L11",null,{"delay":0.05,"duration":0.75,"yOffset":25,"className":"wfg-header","children":[["$","div",null,{"className":"wfg-eyebrow","children":"/ Why Businesses Choose Doormile Wings /"}],["$","h2",null,{"className":"wfg-title","children":"Built to be depended on"}]]}],["$","$L12",null,{"stagger":0.1,"duration":0.7,"yOffset":30,"className":"wfg-grid","children":[["$","div","AI Decision Engine",{"className":"wfg-card","children":[["$","div",null,{"className":"wfg-icon","aria-hidden":"true","children":["$","svg",null,{"width":"24","height":"24","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","path",null,{"d":"M12 2a4 4 0 0 1 4 4v1a4 4 0 0 1-1.2 2.86A4 4 0 0 1 16 13v1a4 4 0 0 1-4 4 4 4 0 0 1-4-4v-1a4 4 0 0 1 1.2-3.14A4 4 0 0 1 8 7V6a4 4 0 0 1 4-4Z"}],["$","path",null,{"d":"M9 21h6M12 18v3"}]]}]}],["$","h3",null,{"className":"wfg-card-title","children":"AI Decision Engine"}],["$","p",null,{"className":"wfg-card-desc","children":"MileTruth™ AI continuously forecasts demand and optimizes routing and load decisions in real time."}]]}],["$","div","Real-Time Visibility",{"className":"wfg-card","children":[["$","div",null,{"className":"wfg-icon","aria-hidden":"true","children":["$","svg",null,{"width":"24","height":"24","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","path",null,{"d":"M1 12s4-7 11-7 11 7 11 7-4 7-11 7-11-7-11-7Z"}],["$","circle",null,{"cx":"12","cy":"12","r":"3"}]]}]}],["$","h3",null,{"className":"wfg-card-title","children":"Real-Time Visibility"}],["$","p",null,{"className":"wfg-card-desc","children":"Live shipment tracking keeps shippers, ground teams, and customers updated at every stage."}]]}],["$","div","Faster Regional Reach",{"className":"wfg-card","children":[["$","div",null,{"className":"wfg-icon","aria-hidden":"true","children":["$","svg",null,{"width":"24","height":"24","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"13 6 19 12 13 18"}]]}]}],["$","h3",null,{"className":"wfg-card-title","children":"Faster Regional Reach"}],["$","p",null,{"className":"wfg-card-desc","children":"A dedicated network linking major regional capitals, built for speed rather than passenger schedules."}]]}],["$","div","Reliable Scheduled Operations",{"className":"wfg-card","children":[["$","div",null,{"className":"wfg-icon","aria-hidden":"true","children":["$","svg",null,{"width":"24","height":"24","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","rect",null,{"x":"3","y":"4","width":"18","height":"18","rx":"3"}],["$","line",null,{"x1":"16","y1":"2","x2":"16","y2":"6"}],["$","line",null,{"x1":"8","y1":"2","x2":"8","y2":"6"}],["$","line",null,{"x1":"3","y1":"10","x2":"21","y2":"10"}],["$","path",null,{"d":"M9 16l2 2 4-4"}]]}]}],["$","h3",null,{"className":"wfg-card-title","children":"Reliable Scheduled Operations"}],["$","p",null,{"className":"wfg-card-desc","children":"Dedicated freighter capacity with consistent schedules — not subject to passenger-belly bumping."}]]}]]}]]}]}] -13:Tfac, - .wind-section { - background: #fafafa; - padding: var(--space-section-lg, 80px) 0 20px 0; /* Reduced bottom padding to minimize gap */ - } - - .wind-header { - margin: 0 auto 48px auto; - max-width: 720px; - text-align: center; - } - - .wind-eyebrow { - font-size: 13px; - font-weight: 700; - letter-spacing: 2px; - text-transform: uppercase; - color: rgba(17, 17, 17, 0.45); - margin-bottom: 16px; - } - - .wind-title { - font-size: clamp(28px, 3.2vw, 46px) !important; - font-weight: 800 !important; - letter-spacing: -0.03em !important; - line-height: 1.15 !important; - text-transform: none !important; - color: #111111 !important; - margin: 0; - } - - .wind-inner { - max-width: 1380px; - margin: 0 auto; - } - - .wind-grid { - display: grid; - grid-template-columns: repeat(3, minmax(0, 1fr)); - gap: 20px; - } - - .wind-card { - position: relative; - min-width: 0; - aspect-ratio: 4 / 5; - border-radius: 20px; - overflow: hidden; - background: linear-gradient(150deg, #17171b 0%, #0b0b0d 100%); - isolation: isolate; - } - - .wind-card-wash { - position: absolute; - inset: 0; - background: linear-gradient(160deg, rgba(200, 16, 46, 0.35) 0%, rgba(200, 16, 46, 0) 60%); - opacity: 0.5; - transition: opacity 0.4s ease; - } - - .wind-card:hover .wind-card-wash { - opacity: 1; - } - - .wind-card-default { - position: absolute; - left: 24px; - right: 24px; - bottom: 24px; - transition: opacity 0.3s ease, transform 0.3s ease; - } - - .wind-card:hover .wind-card-default { - opacity: 0; - transform: translateY(8px); - pointer-events: none; - } - - .wind-card .wind-card-default-title { - font-size: 20px !important; - font-weight: 800 !important; - line-height: 1.3 !important; - text-transform: none !important; - color: #ffffff !important; - margin: 0; - } - - .wind-card-hover { - position: absolute; - inset: 0; - padding: 26px 24px; - display: flex; - flex-direction: column; - justify-content: flex-end; - gap: 14px; - opacity: 0; - transform: translateY(10px); - transition: opacity 0.35s ease, transform 0.35s ease; - } - - .wind-card:hover .wind-card-hover { - opacity: 1; - transform: translateY(0); - } - - .wind-card .wind-card-hover-title { - font-size: 19px !important; - font-weight: 800 !important; - line-height: 1.3 !important; - text-transform: none !important; - color: #ffffff !important; - margin: 0; - } - - .wind-card-label { - font-size: 10.5px; - font-weight: 800; - letter-spacing: 1.2px; - text-transform: uppercase; - color: rgba(255, 255, 255, 0.5); - margin: 0 0 4px 0; - } - - .wind-card-text { - font-size: 13px; - line-height: 1.5; - color: rgba(255, 255, 255, 0.85); - margin: 0; - } - - @media (max-width: 1024px) { - .wind-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } - } - - @media (max-width: 600px) { - .wind-grid { grid-template-columns: 1fr; } - .wind-card { aspect-ratio: 3 / 4; } - /* var(--space-section-lg) floors at a fixed 52px on any phone - width; bottom is already trimmed to 20px, so only the top needs - a real mobile reduction to match the section rhythm near the - footer. */ - .wind-section { padding-top: 44px; } - } - 7:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$13"}}],"$L14"] -8:["$","$L15",null,{}] -9:["$","div",null,{"id":"wings-fleet","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"\n @media (max-width: 767px) {\n #wings-fleet .evnd-gap-bottom { margin-bottom: 14px !important; }\n }\n "}}],["$","$L16",null,{"bannerImage":"/images/pahse1.png","cardTitle":"Quick Logistics","cardSubtitle":"Same-Day Air Network","eyebrow":"/ Fleet Strategy /","titleLead":"Purpose-Built for ","titleAccent":"Regional Speed","features":[{"icon":["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M22 12h-6l-4-9-2 1 3 8H5l-2-3-1.5.6L3 14l1.5 4.4L6 18l-2-3h8l3 8 2-1-3-8h6z"}]}],"title":"Dedicated Freighter Capacity","desc":"Purpose-built cargo lift, not passenger-belly space competing with baggage."},{"icon":["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","circle",null,{"cx":"6","cy":"6","r":"2.5"}],["$","circle",null,{"cx":"18","cy":"6","r":"2.5"}],["$","circle",null,{"cx":"12","cy":"18","r":"2.5"}],["$","path",null,{"d":"M8.2 7.2 10 16M15.8 7.2 14 16M8.5 6h7"}]]}],"title":"Regional Route Design","desc":"Turboprop range and speed matched to India's major regional-capital corridors."},{"icon":["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","path",null,{"d":"M3 3v18h18"}],["$","path",null,{"d":"M7 14l4-4 3 3 6-7"}]]}],"title":"Scaling to 25 Aircraft","desc":"Phase 2 vision: pan-India connectivity hubs and international regional routes."}],"metrics":[{"value":8.2,"decimals":1,"suffix":"t","label":"ATR72 Payload"},{"value":1600,"suffix":"km","label":"ATR72 Range"},{"value":8.6,"decimals":1,"suffix":"t","label":"Q400 Payload"},{"value":667,"suffix":"km/h","label":"Q400 Speed"}],"cardsHeading":"FLEET SPECIFICATIONS","cardsTheme":{"accent":"#c8102e","accent2":"#ff6a3d","glow":"rgba(200,16,46,0.22)"},"gapTop":true,"gapBottom":true,"badges":[{"value":"3","label":"Phase 1 Aircraft"},{"value":"25","label":"Phase 2 Vision"}],"mediaSlot":["$","video",null,{"autoPlay":true,"loop":true,"muted":true,"playsInline":true,"style":{"width":"100%","height":"100%","minHeight":420,"objectFit":"cover","display":"block","background":"#17171b"},"children":["$","source",null,{"src":"/videos/fleet.mp4","type":"video/mp4"}]}],"ariaLabel":"Doormile Wings fleet strategy"}]]}] -a:["$","section",null,{"className":"WingsInfrastructure-module__akH2-q__section","id":"wings-infrastructure","children":["$","div",null,{"className":"WingsInfrastructure-module__akH2-q__sectionShell","children":[["$","$L11",null,{"delay":0.05,"duration":0.7,"yOffset":20,"className":"WingsInfrastructure-module__akH2-q__header","children":[["$","div",null,{"className":"WingsInfrastructure-module__akH2-q__eyebrow","children":"/ Infrastructure /"}],["$","h2",null,{"className":"WingsInfrastructure-module__akH2-q__title","children":"A network built to move, not to sit idle"}]]}],["$","$L12",null,{"stagger":0.08,"duration":0.6,"yOffset":20,"className":"WingsInfrastructure-module__akH2-q__grid","children":[["$","div","Airport Cargo Hubs",{"className":"WingsInfrastructure-module__akH2-q__card","children":[["$","div",null,{"className":"WingsInfrastructure-module__akH2-q__icon","aria-hidden":"true","children":["$","svg",null,{"width":"24","height":"24","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10Z"}]}]}],["$","h3",null,{"className":"WingsInfrastructure-module__akH2-q__cardTitle","children":"Airport Cargo Hubs"}],["$","p",null,{"className":"WingsInfrastructure-module__akH2-q__cardDesc","children":"Near-airport clearance hubs instead of standalone warehouses — closer to the tarmac, faster to the aircraft."}]]}],["$","div","Cross-Docking",{"className":"WingsInfrastructure-module__akH2-q__card","children":[["$","div",null,{"className":"WingsInfrastructure-module__akH2-q__icon","aria-hidden":"true","children":["$","svg",null,{"width":"24","height":"24","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M3 7h7l2 3h9M3 7v10h18V10"}]}]}],["$","h3",null,{"className":"WingsInfrastructure-module__akH2-q__cardTitle","children":"Cross-Docking"}],["$","p",null,{"className":"WingsInfrastructure-module__akH2-q__cardDesc","children":"Screening, grouping, and consolidation happen in one motion, minimizing dwell time between arrival and departure."}]]}],["$","div","Asset-Light Network",{"className":"WingsInfrastructure-module__akH2-q__card","children":[["$","div",null,{"className":"WingsInfrastructure-module__akH2-q__icon","aria-hidden":"true","children":["$","svg",null,{"width":"24","height":"24","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","rect",null,{"x":"3","y":"3","width":"7","height":"7","rx":"1"}],["$","rect",null,{"x":"14","y":"3","width":"7","height":"7","rx":"1"}],["$","rect",null,{"x":"3","y":"14","width":"7","height":"7","rx":"1"}],["$","rect",null,{"x":"14","y":"14","width":"7","height":"7","rx":"1"}]]}]}],["$","h3",null,{"className":"WingsInfrastructure-module__akH2-q__cardTitle","children":"Asset-Light Network"}],["$","p",null,{"className":"WingsInfrastructure-module__akH2-q__cardDesc","children":"Leased terminal space that flexes with demand, keeping the network nimble as new routes come online."}]]}],["$","div","Scalable Operations",{"className":"WingsInfrastructure-module__akH2-q__card","children":[["$","div",null,{"className":"WingsInfrastructure-module__akH2-q__icon","aria-hidden":"true","children":["$","svg",null,{"width":"24","height":"24","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M3 21V9l6-4 6 4v12M9 21V13h6v8"}]}]}],["$","h3",null,{"className":"WingsInfrastructure-module__akH2-q__cardTitle","children":"Scalable Operations"}],["$","p",null,{"className":"WingsInfrastructure-module__akH2-q__cardDesc","children":"Modular ground infrastructure built to expand city by city without slowing down day-to-day operations."}]]}]]}]]}]}] -b:["$","$L17",null,{}] -c:["$","$L18",null,{}] -d:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0zi3_4wi6-b2t.css","precedence":"next"}] -e:["$","script","script-0",{"src":"/_next/static/chunks/07eq5is00w7sy.js","async":true}] -f:["$","script","script-1",{"src":"/_next/static/chunks/0~6a87_s8h6ue.js","async":true}] -10:["$","$L19",null,{"children":["$","$1a",null,{"name":"Next.MetadataOutlet","children":"$@1b"}]}] -14:["$","section",null,{"className":"wind-section","id":"wings-industries","children":["$","div",null,{"className":"dm-section-container","children":["$","div",null,{"className":"wind-inner","children":[["$","$L11",null,{"delay":0.05,"duration":0.75,"yOffset":25,"className":"wind-header","children":[["$","div",null,{"className":"wind-eyebrow","children":"/ Industries We Serve /"}],["$","h2",null,{"className":"wind-title","children":"Built for the shipments that can’t wait"}]]}],["$","$L11",null,{"delay":0.1,"duration":0.8,"yOffset":30,"className":"wind-grid","children":[["$","div","Quick Commerce",{"className":"wind-card","style":{"backgroundImage":"linear-gradient(to bottom, rgba(0,0,0,0.2), rgba(0,0,0,0.8)), url('/images/card 1.png')","backgroundSize":"cover","backgroundPosition":"center"},"children":[["$","div",null,{"className":"wind-card-wash","aria-hidden":"true"}],["$","div",null,{"className":"wind-card-default","children":["$","h3",null,{"className":"wind-card-default-title","children":"Quick Commerce"}]}],["$","div",null,{"className":"wind-card-hover","children":[["$","h3",null,{"className":"wind-card-hover-title","children":"Quick Commerce"}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Challenge"}],["$","p",null,{"className":"wind-card-text","children":"Sub-3-hour delivery windows for dark stores and micro-warehouses."}]]}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Doormile Wings"}],["$","p",null,{"className":"wind-card-text","children":"Dedicated same-day air capacity linking metros to fulfillment hubs."}]]}]]}]]}],["$","div","Express B2B Cargo",{"className":"wind-card","style":{"backgroundImage":"linear-gradient(to bottom, rgba(0,0,0,0.2), rgba(0,0,0,0.8)), url('/images/card 2.png')","backgroundSize":"cover","backgroundPosition":"center"},"children":[["$","div",null,{"className":"wind-card-wash","aria-hidden":"true"}],["$","div",null,{"className":"wind-card-default","children":["$","h3",null,{"className":"wind-card-default-title","children":"Express B2B Cargo"}]}],["$","div",null,{"className":"wind-card-hover","children":[["$","h3",null,{"className":"wind-card-hover-title","children":"Express B2B Cargo"}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Challenge"}],["$","p",null,{"className":"wind-card-text","children":"Time-critical industrial parts and components stuck on slow trunk routes."}]]}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Doormile Wings"}],["$","p",null,{"className":"wind-card-text","children":"Rapid airport-to-airport transport between major economic nodes."}]]}]]}]]}],["$","div","Healthcare & Pharma",{"className":"wind-card","style":{"backgroundImage":"linear-gradient(to bottom, rgba(0,0,0,0.2), rgba(0,0,0,0.8)), url('/images/card 3.png')","backgroundSize":"cover","backgroundPosition":"center"},"children":[["$","div",null,{"className":"wind-card-wash","aria-hidden":"true"}],["$","div",null,{"className":"wind-card-default","children":["$","h3",null,{"className":"wind-card-default-title","children":"Healthcare & Pharma"}]}],["$","div",null,{"className":"wind-card-hover","children":[["$","h3",null,{"className":"wind-card-hover-title","children":"Healthcare & Pharma"}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Challenge"}],["$","p",null,{"className":"wind-card-text","children":"Temperature-sensitive, compliance-critical shipments with zero margin for error."}]]}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Doormile Wings"}],["$","p",null,{"className":"wind-card-text","children":"Active and passive cold-chain packaging with full chain-of-custody tracking."}]]}]]}]]}],["$","div","Cold Chain Logistics",{"className":"wind-card","style":{"backgroundImage":"linear-gradient(to bottom, rgba(0,0,0,0.2), rgba(0,0,0,0.8)), url('/images/card4.png')","backgroundSize":"cover","backgroundPosition":"center"},"children":[["$","div",null,{"className":"wind-card-wash","aria-hidden":"true"}],["$","div",null,{"className":"wind-card-default","children":["$","h3",null,{"className":"wind-card-default-title","children":"Cold Chain Logistics"}]}],["$","div",null,{"className":"wind-card-hover","children":[["$","h3",null,{"className":"wind-card-hover-title","children":"Cold Chain Logistics"}],"$L1c","$L1d"]}]]}],"$L1e","$L1f"]}]]}]}]}] -1b:null -1c:["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Challenge"}],["$","p",null,{"className":"wind-card-text","children":"Perishables and fresh goods that can't survive slow surface transit."}]]}] -1d:["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Doormile Wings"}],["$","p",null,{"className":"wind-card-text","children":"Precision temperature tracking matched to airline-speed transit."}]]}] -1e:["$","div","High-Value Cargo",{"className":"wind-card","style":{"backgroundImage":"linear-gradient(to bottom, rgba(0,0,0,0.2), rgba(0,0,0,0.8)), url('/images/card5.png')","backgroundSize":"cover","backgroundPosition":"center"},"children":[["$","div",null,{"className":"wind-card-wash","aria-hidden":"true"}],["$","div",null,{"className":"wind-card-default","children":["$","h3",null,{"className":"wind-card-default-title","children":"High-Value Cargo"}]}],["$","div",null,{"className":"wind-card-hover","children":[["$","h3",null,{"className":"wind-card-hover-title","children":"High-Value Cargo"}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Challenge"}],["$","p",null,{"className":"wind-card-text","children":"Zero tolerance for loss, tampering, or delay on high-value shipments."}]]}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Doormile Wings"}],["$","p",null,{"className":"wind-card-text","children":"Maximum-security handling with real-time electronic custody tracking."}]]}]]}]]}] -1f:["$","div","E-Commerce Logistics",{"className":"wind-card","style":{"backgroundImage":"linear-gradient(to bottom, rgba(0,0,0,0.2), rgba(0,0,0,0.8)), url('/images/card6.png')","backgroundSize":"cover","backgroundPosition":"center"},"children":[["$","div",null,{"className":"wind-card-wash","aria-hidden":"true"}],["$","div",null,{"className":"wind-card-default","children":["$","h3",null,{"className":"wind-card-default-title","children":"E-Commerce Logistics"}]}],["$","div",null,{"className":"wind-card-hover","children":[["$","h3",null,{"className":"wind-card-hover-title","children":"E-Commerce Logistics"}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Challenge"}],["$","p",null,{"className":"wind-card-text","children":"Next-day and same-day fulfillment expectations across tier-1 and tier-2 cities."}]]}],["$","div",null,{"children":[["$","p",null,{"className":"wind-card-label","children":"Doormile Wings"}],["$","p",null,{"className":"wind-card-text","children":"Direct sorting-hub-to-airport clearance network for faster regional delivery."}]]}]]}]]}] diff --git a/build/doormile-wings/__next.doormile-wings.txt b/build/doormile-wings/__next.doormile-wings.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/doormile-wings/__next.doormile-wings.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/empowerment.html b/build/empowerment.html deleted file mode 100644 index 1e64dbc..0000000 --- a/build/empowerment.html +++ /dev/null @@ -1,2734 +0,0 @@ -Doormile Wings — Women Entrepreneurship Initiative

    Doormile

    Doormile logo
    Address
    Hyderabad

    5th Floor, Vision Ultima,
    Street No.3, Jayabheri Enclave,
    Gachibowli, Hyderabad,
    Telangana 500032.

    Coimbatore

    Mayflower Valencia,
    Near Nava India Bus Stop,
    Avinashi Road,
    Udayampalayam,
    Tamil Nadu 641037.

    Bengaluru

    C612, 6th Floor,
    Trifecta Starlight,
    ITPL Road,
    Garudacharapalya,
    Mahadevapura,
    Bangalore 560048,
    Karnataka, India.

    Contact Us

    Tel : +91 86886 97941

    Email

    care@doormile.com

    Building Women
    Entrepreneurs.

    Empowering ambitious women with the network, strategic partnerships, and opportunities to build, grow, and lead successful enterprises that shape the future of logistics.

    / Our Vision /


    Women Own The Future.

    A logistics ecosystem where women don’t just participate — they own, build, and lead.

    The vision

    We are building an entrepreneurial ecosystem where women launch enterprises, scale operations, and shape the future of logistics from the inside.

    Why it matters

    Industries transform when founders emerge from every corner. Women-led enterprises bring fresh perspective, operational resilience, and long-term economic impact to logistics.

    How Wings contributes

    Wings provides the infrastructure — strategic partnerships, funding access, founder networks, and industry connections — that turns ambition into enterprise.

    / Our Approach /

    Not a program on a brochure. An ecosystem women can build in.

    Manifesto

    A venture that starts with conviction. A network that turns it into momentum.

    Wings is designed around the moments that define a founder: the first partnership signed, the first client won, the first team hired, the first enterprise scaled.

    01

    Women Entrepreneurship

    An ecosystem where women build, own, and scale enterprises across logistics.

    / Doormile Wings /

    Women Building The Next Mile

    Women Map
    0+
    Women Founders
    0+
    Cities Active
    0+
    Enterprises Launched
    Venture Building

    End-to-end support for women launching logistics enterprises — from ideation to market entry.

    Entrepreneurship

    Women building, owning, and scaling sustainable businesses within the logistics ecosystem.

    Founder Networks

    Peer communities and strategic connections that accelerate growth and open new markets.

    Enterprise Leadership

    Strategic decision-making, operational excellence, and vision-driven leadership for women founders.

    / Entrepreneurship Pillars /

    Every pillar is built around ownership.

    02
    Connect and grow

    Strategic Partnerships

    Direct access to supply chain networks, B2B relationships, industry alliances, and commercial agreements that accelerate growth.

    03
    Learn from builders

    Founder Mentorship

    One-on-one guidance from established entrepreneurs, operators, and investors who understand what it takes to scale.

    04
    Scale with confidence

    Growth & Scale

    Operational expansion frameworks, team building, funding readiness, and sustainable unit economics for ventures ready to grow.

    05
    See the opportunity

    Industry Immersion

    Real exposure to logistics operations, supply chain infrastructure, and distribution networks before founders commit to a vertical.

    / Our Impact /

    Growth we can measure


    0+Women-Led Enterprises In The Ecosystem

    0+Enterprises Launched
    0+Industry Partners
    0+Cities Active
    MillionsIn Economic Value Created

    Every number on this page represents a woman who walked into a room with an idea and walked out with a business. An enterprise launched, a partnership secured, a market entered — each is a marker of real economic impact, not a statistic collected for its own sake.

    / The Founder Journey /

    A clear path, from idea to enterprise

    01

    Apply

    Submit your venture idea and tell us about your entrepreneurial vision.

    02

    Discovery

    Identify the right market opportunity and validate your business model.

    03

    Build

    Develop your enterprise with ecosystem support, mentorship, and partnerships.

    04

    Launch

    Go to market with strategic backing, industry connections, and operational infrastructure.

    05

    Scale

    Grow your team, expand operations, and lead your enterprise to sustainable impact.

    / Women in Motion /

    Small steps. Lasting careers.

    A Wings program participant on the operations floor at a Doormile logistics hub
    Wings Participant building a career, one milestone at a time.

    I came in looking for a way forward. I found the confidence to lead.

    She started with limited exposure to logistics. Through structured training, mentorship, and hands-on experience, she built real operational skills — and now supports other women stepping into the industry.

    / Collaboration /

    Partnership is how ecosystems grow.

    The strongest ecosystems are built by many hands.

    Wings partners bring industry access, strategic infrastructure, capital, and networks. Together, we build the foundation women-led enterprises need to thrive.

    01

    Industry Partners

    Strategic alliances with logistics operators, supply chain leaders, and distribution networks that open doors for women-led enterprises.

    02

    Technology Partners

    Platforms, tools, and infrastructure that give founders the operational edge to compete and scale efficiently.

    03

    Community Networks

    Founder communities, women's business networks, and ecosystem builders who extend reach and amplify impact.

    04

    Investment Partners

    Funding access, grant programs, angel networks, and capital partners aligned with women-led enterprise growth.

    500+Women Founders
    100+Enterprises Launched
    25+Industry Partners
    / Build the next mile /

    Build what’s next.

    Join Doormile Wings in building the entrepreneurial ecosystem where women launch, grow, and lead enterprises that create lasting value across logistics.

    \ No newline at end of file diff --git a/build/empowerment.txt b/build/empowerment.txt deleted file mode 100644 index d866020..0000000 --- a/build/empowerment.txt +++ /dev/null @@ -1,2125 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -1b:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -c:Tf99, - .eh-outer { - box-sizing: border-box; - padding: 20px; - } - - .eh-section { - position: relative; - border-radius: 25px; - overflow: hidden; - box-sizing: border-box; - height: 800px; - display: flex; - align-items: center; - justify-content: center; - background: #07080c; - } - - .eh-bg { - position: absolute; - inset: 0; - background-image: url("/images/women-hero-slider-2.png"); - background-size: cover; - background-position: 30% 72%; - z-index: 0; - } - - .eh-scrim { - position: absolute; - inset: 0; - background: - linear-gradient(180deg, rgba(7, 8, 12, 0.72) 0%, rgba(7, 8, 12, 0.5) 40%, rgba(7, 8, 12, 0.86) 100%); - z-index: 1; - } - - .eh-inner { - position: relative; - z-index: 2; - width: 100%; - max-width: 1000px; - margin: 0 auto; - padding: 0 15px; - display: flex; - flex-direction: column; - align-items: center; - text-align: center; - box-sizing: border-box; - } - - .eh-eyebrow { - font-size: 13px; - font-weight: 800; - letter-spacing: 2.6px; - text-transform: uppercase; - color: #ff5470; - margin-bottom: 20px; - } - - .eh-title { - width: 100%; - font-size: clamp(30px, 5.5vw, 80px) !important; - font-weight: 800 !important; - letter-spacing: -0.03em !important; - line-height: 1.08 !important; - text-transform: uppercase !important; - color: #ffffff !important; - margin: 0; - word-wrap: break-word; - overflow-wrap: break-word; - } - - .eh-title .eh-soft { - color: rgba(255, 255, 255, 0.72); - } - - .eh-desc { - width: 100%; - max-width: 680px; - margin: 23px auto 0; - font-size: clamp(16px, 1.35vw, 23px); - line-height: 1.65; - color: rgba(255, 255, 255, 0.78); - } - - .eh-btns { - display: flex; - align-items: center; - justify-content: center; - gap: 14px; - flex-wrap: wrap; - margin-top: 32px; - } - - .eh-btn-primary, - .eh-btn-outline { - display: inline-flex; - align-items: center; - gap: 10px; - padding: 15px 28px; - border-radius: 100px; - font-weight: 800; - font-size: 14px; - text-decoration: none; - transition: transform 0.35s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.35s ease, background-color 0.3s ease, border-color 0.3s ease; - } - - .eh-btn-primary { - background: #c01227; - color: #ffffff !important; - border: 1.5px solid #c01227; - } - - .eh-btn-primary:hover { - transform: translateY(-3px); - box-shadow: 0 14px 30px rgba(192, 18, 39, 0.4); - } - - .eh-btn-outline { - background: rgba(255, 255, 255, 0.04); - color: #ffffff !important; - border: 1.5px solid rgba(255, 255, 255, 0.36); - } - - .eh-btn-outline:hover { - border-color: rgba(255, 255, 255, 0.82); - background: rgba(255, 255, 255, 0.09); - transform: translateY(-3px); - } - - @media (max-width: 1020px) { - .eh-outer { padding: 10px; } - } - - @media (max-width: 840px) { - .eh-section { height: 600px; } - } - - @media (max-width: 660px) { - .eh-title { - font-size: clamp(20px, 7vw, 32px) !important; - } - } - - @media (max-width: 480px) { - .eh-section { height: 520px; } - .eh-btn-primary, .eh-btn-outline { width: 100%; justify-content: center; padding: 14px 22px; } - .eh-btns { width: 100%; } - } - 0:{"P":null,"c":["","empowerment"],"q":"","i":false,"f":[[["",{"children":["empowerment",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","div",null,{"id":"empowerment","className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","div",null,{"data-elementor-type":"wp-page","data-elementor-id":"86","className":"elementor elementor-86 elementor-59 elementor-empowerment","children":[[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$c"}}],"$Ld"],"$Le","$Lf","$L10","$L11","$L12","$L13","$L14","$L15","$L16"]}]}]}]}],["$L17"],"$L18"]}],{},null,false,null]},null,false,"$@19"]},null,false,null],"$L1a",false]],"m":"$undefined","G":["$1b",["$L1c"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -1d:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0vzdvje64yndv.js"],"ScrollReveal"] -1e:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0vzdvje64yndv.js"],"ShimmerText"] -32:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -33:"$Sreact.suspense" -36:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -38:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -d:["$","div",null,{"className":"eh-outer","children":["$","section",null,{"className":"eh-section","id":"wings-empowerment-hero","children":[["$","div",null,{"className":"eh-bg","aria-hidden":"true"}],["$","div",null,{"className":"eh-scrim","aria-hidden":"true"}],["$","$L1d",null,{"delay":0.05,"duration":0.85,"yOffset":30,"className":"eh-inner","children":[["$","h1",null,{"className":"eh-title","children":["Building ",["$","span",null,{"className":"eh-soft","children":"Women"}],["$","br",null,{}],["$","$L1e",null,{"children":"Entrepreneurs."}]]}],["$","p",null,{"className":"eh-desc","children":"Empowering ambitious women with the network, strategic partnerships, and opportunities to build, grow, and lead successful enterprises that shape the future of logistics."}]]}]]}]}] -1f:Te8f, - .ev-section { - position: relative; - background: #ffffff; - padding: clamp(96px, 11vw, 150px) 0; - overflow: hidden; - } - - .ev-map { - position: absolute; - inset: 0; - z-index: 0; - opacity: 0.4; - pointer-events: none; - } - - .ev-inner { - position: relative; - z-index: 1; - max-width: 1380px; - min-width: 0; - margin: 0 auto; - } - - .ev-eyebrow { - margin: 0 0 18px 0; - font-size: 14px; - font-weight: 500; - letter-spacing: 1.5px; - color: rgba(17, 17, 17, 0.6); - } - - .ev-divider { - width: 100%; - height: 1px; - margin: 0 0 clamp(64px, 7.8vw, 92px) 0; - border: none; - background-color: rgba(17, 17, 17, 0.16); - } - - .ev-title { - margin: 0 0 clamp(92px, 11.5vw, 156px) 0 !important; - max-width: 1320px; - display: block; - font-weight: 800 !important; - font-style: normal !important; - letter-spacing: -0.018em !important; - word-spacing: 0.02em; - line-height: 1.04em !important; - text-transform: none !important; - color: #ffffff !important; - -webkit-text-stroke: 2px #c01227; - paint-order: stroke fill; - font-size: clamp(48px, 8.5vw, 128px) !important; - white-space: normal; - overflow-wrap: normal; - text-wrap: balance; - } - - @media (max-width: 1280px) { - .ev-title { - font-size: 118px !important; - } - } - - @media (max-width: 1020px) { - .ev-title { - font-size: 96px !important; - } - } - - @media (max-width: 767px) { - .ev-title { - font-size: 72px !important; - } - } - - .ev-columns { - display: grid; - grid-template-columns: minmax(0, 0.6fr) minmax(0, 1fr); - gap: clamp(60px, 8vw, 122px); - align-items: start; - } - - .ev-columns > * { - min-width: 0; - } - - .ev-statement { - margin: 0; - font-size: clamp(28px, 3vw, 52px); - font-weight: 600; - line-height: 1.2; - letter-spacing: -0.03em; - color: #111111; - overflow-wrap: break-word; - } - - .ev-support { - display: grid; - gap: clamp(34px, 3.8vw, 52px); - min-width: 0; - } - - .ev-block { - display: grid; - gap: 12px; - } - - .ev-block-label { - margin: 0; - font-size: 12px; - font-weight: 700; - letter-spacing: 1.4px; - line-height: 1; - text-transform: uppercase; - color: rgba(192, 18, 39, 0.86); - } - - .ev-lead, - .ev-note { - font-size: clamp(17px, 1.3vw, 20px); - line-height: 1.6; - color: #333333; - margin: 0; - overflow-wrap: break-word; - } - - .ev-lead { - font-weight: 700; - } - - .ev-note { - font-weight: 400; - } - - @media (max-width: 900px) { - .ev-columns { - grid-template-columns: 1fr; - } - } - - @media (max-width: 600px) { - .ev-section { padding-top: 64px; padding-bottom: 64px; } - .ev-title { - max-width: calc(100vw - (var(--dm-mobile-gutter, 10px) * 2)); - font-size: 56px !important; - letter-spacing: -0.025em !important; - line-height: 1.02em !important; - -webkit-text-stroke-width: 1.5px; - } - } - e:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$1f"}}],"$L20"] -21:Tbc4, - .esy-section { - position: relative; - width: calc(100% - 40px); - margin: 0 auto clamp(24px, 4vw, 40px); - border-radius: 28px; - overflow: hidden; - box-sizing: border-box; - min-height: clamp(500px, 50vw, 690px); - display: flex; - align-items: stretch; - background: #09090b; - } - - .esy-bg { - position: absolute; - inset: 0; - background-image: - linear-gradient(100deg, rgba(9, 9, 11, 0.96) 0%, rgba(9, 9, 11, 0.84) 43%, rgba(192, 18, 39, 0.28) 100%), - url("/images/wings-heroslider4.png"); - background-size: cover; - background-position: center; - z-index: 0; - } - - .esy-inner { - position: relative; - z-index: 1; - max-width: 1380px; - margin: 0 auto; - width: 100%; - padding-top: clamp(60px, 7vw, 98px); - padding-bottom: clamp(60px, 7vw, 98px); - display: grid; - grid-template-columns: minmax(0, 0.9fr) minmax(280px, 0.52fr); - gap: clamp(36px, 6vw, 96px); - align-items: end; - } - - .esy-eyebrow { - font-size: 13px; - font-weight: 800; - letter-spacing: 2.5px; - text-transform: uppercase; - color: #ff5470; - margin-bottom: 24px; - } - - .esy-statement { - max-width: 920px; - font-size: clamp(38px, 5.7vw, 86px); - font-weight: 800; - letter-spacing: -0.055em; - line-height: 0.98; - text-transform: uppercase; - color: #ffffff; - margin: 0; - } - - .esy-statement em { - color: #ff5470; - font-style: normal; - } - - .esy-side { - border-left: 1px solid rgba(255, 255, 255, 0.18); - padding-left: clamp(24px, 3vw, 42px); - } - - .esy-label { - display: block; - font-size: 12px; - font-weight: 800; - letter-spacing: 1.8px; - text-transform: uppercase; - color: rgba(255, 255, 255, 0.45); - margin-bottom: 18px; - } - - .esy-pull { - font-size: clamp(22px, 2.3vw, 34px); - font-weight: 800; - line-height: 1.16; - letter-spacing: -0.03em; - color: #ffffff; - margin: 0 0 22px 0; - } - - .esy-sub { - font-size: 15.5px; - line-height: 1.65; - color: rgba(255, 255, 255, 0.64); - margin: 0; - } - - @media (max-width: 1024px) { - .esy-section { width: calc(100% - 24px); border-radius: 22px; } - .esy-inner { grid-template-columns: 1fr; align-items: start; } - .esy-side { max-width: 640px; } - } - - @media (max-width: 640px) { - .esy-section { min-height: 560px; } - .esy-side { border-left: none; padding-left: 0; border-top: 1px solid rgba(255, 255, 255, 0.18); padding-top: 24px; } - } - f:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$21"}}],["$","section",null,{"className":"esy-section","id":"wings-empowerment-story","children":[["$","div",null,{"className":"esy-bg","aria-hidden":"true"}],["$","div",null,{"className":"esy-inner dm-section-container","children":["$L22","$L23"]}]]}]] -24:T3756, - /* ============================================================ - Success Stories — redesigned right column (stats + 2x2 cards) - Dark section · red accent #dc2626 / #ef4444 · Manrope - ============================================================ */ - /* Neutralise the right column's asymmetric 140px left padding so the - box group can be centered instead of pushed to one side. */ - .elementor-element.elementor-element-b2c956f { padding: 0 !important; } - - /* Vertically center the two columns so the right content lines up with - the image instead of needing a big top gap; tighten row gap. */ - .elementor-element.elementor-element-2ed47f3 { align-items: center !important; } - - /* Animated map background behind the Success Stories content */ - .elementor-element.elementor-element-b6e14bd { position: relative; overflow: hidden; } - .elementor-element.elementor-element-b6e14bd > .e-con-inner { position: relative; z-index: 1; } - .ws-map { position: absolute; inset: 0; z-index: 0; opacity: 0.5; pointer-events: none; } - .ws-map canvas { display: block; } - - #ws-stories { - display: flex; - flex-direction: column; - gap: 16px; - width: 100%; - max-width: 620px; - margin: 0 auto; /* center the 7 boxes as a group — no negative margins */ - } - - #ws-stories .ws__stats { - display: grid; - grid-template-columns: repeat(3, 1fr); - gap: 12px; - } - #ws-stories .ws__stat { - background: rgba(255,255,255,0.04); - border: 1px solid rgba(255,255,255,0.08); - border-radius: 14px; - padding: 20px 16px; - transition: border-color 0.3s ease, background-color 0.3s ease; - } - #ws-stories .ws__stat:hover { border-color: rgba(220,38,38,0.28); background: rgba(220,38,38,0.05); } - #ws-stories .ws__stat-num { - color: #fff !important; - font-weight: 900; - font-size: clamp(28px, 3vw, 38px); - line-height: 1; - letter-spacing: -0.01em; - } - #ws-stories .ws__stat-num span { color: #dc2626 !important; } - #ws-stories .ws__stat-label { - margin-top: 9px; - color: rgba(255,255,255,0.7) !important; - font-size: 14px !important; - font-weight: 700; - letter-spacing: 0.03em; - text-transform: uppercase; - } - - #ws-stories .ws__cards { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 14px; - align-items: stretch; - } - #ws-stories .ws__card { - position: relative; - overflow: hidden; - display: flex; - flex-direction: column; - min-height: 168px; - background: rgba(255,255,255,0.035); - border: 1px solid rgba(255,255,255,0.08); - border-radius: 14px; - padding: 20px; - transition: transform 0.35s cubic-bezier(.25,1,.5,1), border-color 0.35s ease, background-color 0.35s ease, box-shadow 0.35s ease; - } - #ws-stories .ws__card::after { - content: ''; - position: absolute; - top: -45%; left: -25%; - width: 150px; height: 150px; - background: radial-gradient(circle, rgba(220,38,38,0.2), transparent 70%); - opacity: 0; - transition: opacity 0.35s ease; - pointer-events: none; - } - #ws-stories .ws__card:hover { - transform: translateY(-4px); - border-color: rgba(220,38,38,0.3); - background: rgba(220,38,38,0.05); - box-shadow: 0 18px 44px -20px rgba(0,0,0,0.7); - } - #ws-stories .ws__card:hover::after { opacity: 1; } - #ws-stories .ws__card-icon { - display: inline-flex; - align-items: center; - justify-content: center; - width: 40px; height: 40px; - border-radius: 11px; - background: rgba(220,38,38,0.12); - border: 1px solid rgba(220,38,38,0.25); - color: #ef4444; - margin-bottom: 16px; - transition: background-color 0.3s ease, color 0.3s ease; - } - #ws-stories .ws__card:hover .ws__card-icon { background: #dc2626; color: #fff; } - #ws-stories .ws__card-icon svg { width: 21px; height: 21px; } - #ws-stories .ws__card-title { - color: #fff !important; - font-weight: 800; - font-size: 19px; - line-height: 1.2; - letter-spacing: 0; - margin-bottom: 9px; - } - #ws-stories .ws__card-desc { - max-width: 28ch; - color: rgba(255,255,255,0.66) !important; - font-size: 15px; - line-height: 1.52; - margin: 0; - font-weight: 500; - } - - /* ---- Floating card sizing: content-driven, not container-driven ---- - Matches the EV Logistics card height proportions exactly by trimming - red content padding and white footer min-height. */ - .elementor-element.elementor-element-3b61435 { - --padding-top: 46px; - --padding-bottom: 38px; - } - .elementor-element.elementor-element-5aea22e { - --min-height: 38px; - --padding-top: 14px; - --padding-bottom: 14px; - } - @media (max-width: 1020px) { - .elementor-element.elementor-element-3b61435 { - --padding-top: 34px; - --padding-bottom: 28px; - } - .elementor-element.elementor-element-5aea22e { - --min-height: 32px; - --padding-top: 12px; - --padding-bottom: 12px; - } - } - @media (max-width: 660px) { - .elementor-element.elementor-element-3b61435 { - --padding-top: 26px; - --padding-bottom: 22px; - } - .elementor-element.elementor-element-5aea22e { - --min-height: 24px; - --padding-top: 10px; - --padding-bottom: 10px; - } - } - - .elementor-element-778840d .logico-title { - white-space: nowrap !important; - } - - /* The banner image (bg-header-women.png) is very wide (≈2.48:1) and the - woman — the subject of this section — sits on the right. On narrow - screens "cover" center-crops her out, so shift the focal point right - to keep her face in frame. */ - @media (max-width: 1024px) { - .elementor-element.elementor-element-7da6646:not(.elementor-motion-effects-element-type-background) { - background-position: 78% center !important; - } - } - @media (max-width: 767px) { - .elementor-element.elementor-element-7da6646:not(.elementor-motion-effects-element-type-background) { - background-position: 82% 25% !important; - } - } - - /* Stack the two columns below the desktop breakpoint so the box group - always gets full width and stays centered — never clipped. */ - @media (max-width: 1024px) { - .elementor-element-778840d .logico-title { - white-space: normal !important; - } - .elementor-element.elementor-element-2ed47f3 { grid-template-columns: 1fr !important; } - #ws-stories { max-width: 640px; margin: 0 auto; } - /* Align the heading, image and stats/cards to one shared left/right - edge — the heading + image widgets carried extra inset that left - them staggered (80px / 70px / 60px) against the stats column. */ - #women-entrepreneurship .elementor-element-36efec7, - #women-entrepreneurship .elementor-element-b2c956f { - padding-left: 0 !important; - padding-right: 0 !important; - } - #women-entrepreneurship .elementor-element-778840d, - #women-entrepreneurship .elementor-element-bbfb67f, - #women-entrepreneurship .elementor-element-778840d > .elementor-widget-container, - #women-entrepreneurship .elementor-element-bbfb67f > .elementor-widget-container { - padding-left: 0 !important; - padding-right: 0 !important; - margin-left: 0 !important; - margin-right: 0 !important; - } - } - - @media (max-width: 767px) { - #women-entrepreneurship { - width: calc(100% - 20px) !important; - margin-left: 10px !important; - margin-right: 10px !important; - border-radius: 22px !important; - padding-left: 0px !important; - padding-right: 0px !important; - } - #women-entrepreneurship .e-con-boxed > .e-con-inner { - padding-top: 32px !important; - padding-bottom: 32px !important; - padding-left: 0 !important; - padding-right: 0 !important; - } - #women-entrepreneurship .elementor-element-8b5d6e6, - #women-entrepreneurship .elementor-element-b6e14bd, - #women-entrepreneurship .elementor-element-90cc867, - #women-entrepreneurship .elementor-element-36efec7, - #women-entrepreneurship .elementor-element-b2c956f { - padding-left: 0 !important; - padding-right: 0 !important; - margin-left: 0 !important; - margin-right: 0 !important; - } - #women-entrepreneurship .elementor-element-1f766ea { - width: 100% !important; - max-width: 100% !important; - margin-left: auto !important; - margin-right: auto !important; - padding-left: 0 !important; - padding-right: 0 !important; - } - #women-entrepreneurship .elementor-element.elementor-element-2ed47f3 { - padding-left: 0 !important; - padding-right: 0 !important; - margin-left: 0 !important; - margin-right: 0 !important; - margin-top: 0 !important; - padding-top: 0 !important; - gap: 24px !important; - } - #women-entrepreneurship .elementor-element-36efec7 { - margin-top: 0px !important; - padding-top: 0px !important; - gap: 0px !important; - } - #women-entrepreneurship .elementor-element-24c0280 { - margin-bottom: 0px !important; - padding-left: 14px !important; - padding-right: 14px !important; - box-sizing: border-box !important; - } - #women-entrepreneurship .elementor-element-778840d { - margin-top: 14px !important; - margin-bottom: 14px !important; - padding-top: 0px !important; - padding-bottom: 0px !important; - padding-left: 14px !important; - padding-right: 14px !important; - box-sizing: border-box !important; - } - #women-entrepreneurship .elementor-element-778840d h3.logico-title, - #women-entrepreneurship .elementor-element-778840d > .elementor-widget-container { - margin: 0px !important; - padding: 0px !important; - } - #women-entrepreneurship .elementor-element-7da6646 { - width: calc(100% - 28px) !important; - margin-left: 14px !important; - margin-right: 14px !important; - border-radius: 18px !important; - min-height: 240px !important; - margin-top: 15px !important; - margin-bottom: -50px !important; - box-sizing: border-box !important; - } - #women-entrepreneurship .elementor-element-8b5d6e6 { - padding-left: 14px !important; - padding-right: 14px !important; - margin-left: 0px !important; - margin-right: 0px !important; - width: 100% !important; - max-width: 100% !important; - box-sizing: border-box !important; - } - #women-entrepreneurship .elementor-element-bbfb67f img { - width: 100% !important; - } - #women-entrepreneurship .elementor-element-bbfb67f { - margin-top: 0px !important; - margin-bottom: 16px !important; - padding-left: 14px !important; - padding-right: 14px !important; - box-sizing: border-box !important; - } - #ws-stories { - padding-left: 14px !important; - padding-right: 14px !important; - box-sizing: border-box !important; - } - /* KPI stat cards stack one-per-row on mobile. Inside each card the big - number sits on the left and the label on the right, vertically - centered, so every stat reads as a clean full-width row instead of - three cramped columns. */ - #ws-stories .ws__stats { grid-template-columns: 1fr; gap: 12px; } - #ws-stories .ws__stat { - display: flex; - align-items: center; - justify-content: space-between; - gap: 16px; - padding: 16px 20px; - min-width: 0; - } - #ws-stories .ws__stat-num { font-size: clamp(30px, 9vw, 40px); } - #ws-stories .ws__stat-label { - margin-top: 0; - font-size: 13px !important; - letter-spacing: 0.02em; - text-align: right; - min-height: 0; - } - #ws-stories .ws__cards { grid-template-columns: 1fr; gap: 12px; } - } - 10:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$24"}}],"$L25"] -26:T2d38, - .epr-section { - background: #ffffff; - padding: clamp(78px, 9vw, 132px) 0; - overflow: visible; - } - - .epr-inner { - max-width: 1380px; - min-width: 0; - margin: 0 auto; - } - - .epr-head { - display: flex; - flex-direction: column; - align-items: flex-start; - margin-bottom: clamp(54px, 7vw, 86px); - } - - .epr-head-reveal { - width: 100%; - } - - .epr-divider { - width: 100%; - height: 1px; - margin: 18px 0 clamp(24px, 3.5vw, 40px) 0; - border: none; - background-color: rgba(17, 17, 17, 0.14); - } - - .epr-eyebrow { - font-size: 13px; - font-weight: 800; - letter-spacing: 2.4px; - text-transform: uppercase; - color: rgba(17, 17, 17, 0.42); - } - - .epr-title { - max-width: 950px; - font-size: clamp(42px, 6.2vw, 88px) !important; - font-weight: 800 !important; - letter-spacing: -0.055em !important; - line-height: 0.98 !important; - text-transform: uppercase !important; - color: #111111 !important; - margin: 0; - } - - .epr-stage { - display: grid; - grid-template-columns: minmax(300px, 0.38fr) minmax(0, 0.62fr); - gap: clamp(32px, 5vw, 78px); - /* stretch (not start): the left column's grid-item box must span - the full row — i.e. match the taller Programs list — or the - sticky aside inside it runs out of room and un-sticks well - before the list finishes scrolling. */ - align-items: stretch; - min-width: 0; - } - - .epr-stage > * { - min-width: 0; - } - - /* Plain stretching grid item. Carries no visual styling of its own — - it exists only to give .epr-aside (sized/centered independently - inside it) the full row height to stick within. */ - .epr-aside-wrap { - min-width: 0; - } - - .epr-aside { - position: sticky; - top: 110px; - min-width: 0; - min-height: clamp(480px, 44vw, 660px); - padding: clamp(18px, 3vw, 34px) 0 clamp(24px, 3.5vw, 42px); - display: flex; - flex-direction: column; - justify-content: center; - overflow: hidden; - color: #111111; - } - - .epr-aside-map { - position: absolute; - inset: 8% -22% 8% -28%; - z-index: 0; - opacity: 0.22; - pointer-events: none; - } - - .epr-aside-map canvas { - display: block; - } - - .epr-aside-content { - position: relative; - z-index: 1; - display: grid; - gap: clamp(18px, 2.2vw, 28px); - } - - .epr-aside-num { - position: relative; - font-size: clamp(164px, 17vw, 300px); - font-weight: 900; - line-height: 0.78; - letter-spacing: -0.06em; - color: transparent; - -webkit-text-stroke: 2px rgba(200, 16, 46, 0.2); - } - - .epr-aside-copy { - position: relative; - max-width: 12ch; - font-size: clamp(30px, 3.6vw, 56px); - font-weight: 800; - line-height: 0.98; - letter-spacing: -0.055em; - text-transform: uppercase; - color: #111111; - margin: 0; - } - - .epr-aside-copy em { - font-style: normal; - color: #c8102e; - } - - .epr-aside-desc { - position: relative; - max-width: 34ch; - font-size: 15.5px; - line-height: 1.65; - color: rgba(17, 17, 17, 0.58); - margin: 0; - } - - /* Continues the editorial narrative below the original hero - statement/paragraph — same grid, same gap rhythm as the rest of - .epr-aside-content, so it reads as one uninterrupted column rather - than a bolted-on block. Exists so the sticky aside still has real - editorial content to show while the list scrolls through its last - two entries, instead of ending early and leaving the left side - blank for the remainder of the scroll. */ - .epr-aside-divider { - position: relative; - width: 100%; - height: 1px; - border: none; - margin: 0; - background-color: rgba(17, 17, 17, 0.12); - } - - .epr-aside-label { - position: relative; - font-size: 12px; - font-weight: 800; - letter-spacing: 1.7px; - text-transform: uppercase; - color: rgba(17, 17, 17, 0.4); - margin: 0 0 -6px 0; - } - - .epr-aside-gains-list { - position: relative; - list-style: none; - margin: 0; - padding: 0; - display: grid; - gap: 9px; - } - - .epr-aside-gains-list li { - position: relative; - padding-left: 19px; - font-size: 15.5px; - line-height: 1.5; - color: rgba(17, 17, 17, 0.68); - } - - /* Extra .epr-aside prefix raises specificity above the global theme - rule ".logico-front-end ul li:before" (a fontello glyph), so our - clean red dot replaces the inherited checkmark marker — same fix - already established for this exact conflict in LegalDocument.tsx. */ - .epr-aside .epr-aside-gains-list li::before { - content: "" !important; - position: absolute; - left: 2px; - top: 0.62em; - width: 5px; - height: 5px; - border-radius: 50%; - background: #c8102e; - font-size: 0; - } - - .epr-aside-final { - position: relative; - max-width: 30ch; - font-size: clamp(17px, 1.7vw, 20px); - font-weight: 700; - line-height: 1.5; - letter-spacing: -0.01em; - color: #111111; - margin: 0; - } - - .epr-aside-final em { - font-style: normal; - color: #c8102e; - } - - .epr-list { - display: grid; - gap: clamp(28px, 4vw, 52px); - } - - .epr-row { - display: grid; - grid-template-columns: 110px minmax(0, 1fr); - gap: clamp(22px, 4vw, 58px); - padding-bottom: clamp(28px, 4vw, 52px); - border-bottom: 1px solid rgba(17, 17, 17, 0.14); - } - - .epr-row:nth-child(even) { - margin-left: clamp(0px, 7vw, 96px); - } - - .epr-row-index { - font-size: clamp(38px, 4.2vw, 62px); - font-weight: 900; - line-height: 1; - letter-spacing: -0.05em; - color: #c8102e; - } - - .epr-row-featured { - padding: clamp(28px, 4vw, 44px) clamp(24px, 3vw, 40px); - background: #09090b; - border-radius: 22px; - border-bottom: none; - margin-bottom: clamp(28px, 4vw, 52px); - } - - .epr-row-featured .epr-row-index { - color: rgba(255, 255, 255, 0.22); - -webkit-text-stroke: 1.5px rgba(255, 255, 255, 0.5); - } - - .epr-row-featured .epr-row-title { - font-size: clamp(32px, 4vw, 64px) !important; - color: #ffffff !important; - } - - .epr-row-featured .epr-row-desc { - color: rgba(255, 255, 255, 0.62); - } - - .epr-row-flag { - display: inline-block; - font-size: 12px; - font-weight: 800; - letter-spacing: 1.3px; - text-transform: uppercase; - color: #ffffff; - background: #c8102e; - padding: 6px 14px; - border-radius: 100px; - margin-bottom: 16px; - } - - .epr-row-type { - display: block; - font-size: 12px; - font-weight: 800; - letter-spacing: 1.7px; - text-transform: uppercase; - color: rgba(17, 17, 17, 0.42); - margin-bottom: 14px; - } - - .epr-row-featured .epr-row-type { - color: rgba(255, 255, 255, 0.42); - } - - .epr-row-title { - font-size: clamp(28px, 3.4vw, 52px) !important; - font-weight: 800 !important; - letter-spacing: -0.045em !important; - line-height: 1.02 !important; - text-transform: uppercase !important; - color: #111111 !important; - margin: 0 0 14px 0; - } - - .epr-row-desc { - max-width: 660px; - font-size: 15.5px; - line-height: 1.65; - color: rgba(17, 17, 17, 0.58); - margin: 0; - } - - .epr-cta { - margin-top: clamp(48px, 6vw, 72px); - } - - .epr-cta-link { - display: inline-flex; - align-items: center; - gap: 10px; - font-size: 15px; - font-weight: 800; - color: #111111 !important; - text-decoration: none !important; - border-bottom: 1.5px solid rgba(17, 17, 17, 0.2); - padding-bottom: 5px; - transition: border-color 0.3s ease, color 0.3s ease; - } - - .epr-cta-link:hover { - color: #c8102e !important; - border-color: #c8102e; - } - - /* Laptop: sticky stays enabled, just a narrower gutter. */ - @media (max-width: 1180px) { - .epr-stage { grid-template-columns: minmax(220px, 0.34fr) minmax(0, 0.66fr); gap: clamp(28px, 4vw, 46px); } - .epr-aside { min-height: 420px; } - .epr-row:nth-child(even) { margin-left: 0; } - } - - /* Tablet: sticky disabled — the aside scrolls in normal flow instead - of pinning, since there's no longer enough vertical runway next to - the (now narrower, shorter) program list for pinning to read well. - The wrapper no longer needs to stretch once its child isn't sticky. */ - @media (max-width: 1023px) { - .epr-aside-wrap { - align-self: start; - } - .epr-aside { - position: relative; - top: auto; - } - } - - @media (max-width: 767px) { - .epr-stage { grid-template-columns: 1fr; } - .epr-aside { - position: relative; - top: auto; - min-height: 300px; - padding-top: 4px; - padding-bottom: clamp(24px, 7vw, 38px); - } - .epr-aside-map { - inset: -8% -18% 0 -20%; - opacity: 0.18; - } - .epr-aside-content { - gap: 20px; - } - .epr-aside-num { - font-size: clamp(128px, 34vw, 180px); - } - .epr-aside-copy { - max-width: 11ch; - font-size: clamp(34px, 10vw, 48px); - } - .epr-aside-desc { - max-width: 32ch; - font-size: 14.5px; - } - .epr-aside-gains-list li { - font-size: 14.5px; - } - .epr-aside-final { - max-width: 28ch; - font-size: 16.5px; - } - } - - @media (max-width: 640px) { - .epr-section { padding-top: 54px; padding-bottom: 54px; } - .epr-title { - font-size: clamp(34px, 10vw, 40px) !important; - letter-spacing: -0.045em !important; - overflow-wrap: anywhere; - } - .epr-row-title { - font-size: clamp(27px, 8.5vw, 36px) !important; - overflow-wrap: anywhere; - } - .epr-row { grid-template-columns: 1fr; gap: 12px; } - } - 11:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$26"}}],"$L27"] -28:Te98, - .eim-section { - position: relative; - width: calc(100% - 40px); - margin: clamp(24px, 4vw, 40px) auto; - border-radius: 28px; - overflow: hidden; - box-sizing: border-box; - background: #09090b; - padding: clamp(64px, 8vw, 100px) clamp(24px, 5vw, 48px); - } - - .eim-inner { - position: relative; - z-index: 1; - max-width: 1380px; - margin: 0 auto; - } - - .eim-eyebrow { - font-size: 13px; - font-weight: 800; - letter-spacing: 2.5px; - text-transform: uppercase; - color: #c8102e; - margin-bottom: 20px; - } - - .eim-title { - font-size: clamp(28px, 3.4vw, 46px) !important; - font-weight: 800 !important; - letter-spacing: -0.03em !important; - line-height: 1.15 !important; - text-transform: none !important; - color: #ffffff !important; - margin: 0 0 clamp(32px, 4vw, 48px) 0; - } - - .eim-divider { - border: none; - border-top: 1px solid rgba(255, 255, 255, 0.12); - margin: 0 0 clamp(40px, 5vw, 56px) 0; - } - - .eim-hero-row { - display: flex; - align-items: flex-end; - gap: clamp(20px, 3vw, 36px); - margin-bottom: clamp(48px, 6vw, 72px); - } - - .eim-hero-num { - font-size: clamp(90px, 13vw, 190px); - font-weight: 800; - line-height: 0.85; - letter-spacing: -0.03em; - color: transparent; - -webkit-text-stroke: 2px #c8102e; - } - - .eim-hero-label { - font-size: 13px; - font-weight: 700; - letter-spacing: 1.5px; - text-transform: uppercase; - color: rgba(255, 255, 255, 0.55); - max-width: 90px; - line-height: 1.4; - padding-bottom: clamp(12px, 1.5vw, 24px); - } - - .eim-divider-2 { - border: none; - border-top: 1px solid rgba(255, 255, 255, 0.12); - margin: 0 0 clamp(40px, 5vw, 56px) 0; - } - - .eim-secondary-row { - display: grid; - grid-template-columns: repeat(4, minmax(0, 1fr)); - } - - .eim-secondary-item { - padding-right: 24px; - border-left: 1px solid rgba(255, 255, 255, 0.12); - padding-left: 24px; - } - - .eim-secondary-item:first-child { - border-left: none; - padding-left: 0; - } - - .eim-secondary-num { - display: block; - font-size: clamp(32px, 3vw, 44px); - font-weight: 800; - color: #ff5470; - letter-spacing: -0.02em; - margin-bottom: 10px; - } - - .eim-secondary-label { - font-size: 13px; - font-weight: 600; - color: rgba(255, 255, 255, 0.5); - line-height: 1.4; - } - - .eim-copy { - max-width: 720px; - margin-top: clamp(48px, 6vw, 72px); - font-size: 15.5px; - line-height: 1.7; - color: rgba(255, 255, 255, 0.55); - } - - @media (max-width: 1024px) { - .eim-section { width: calc(100% - 24px); border-radius: 22px; } - } - - @media (max-width: 700px) { - .eim-hero-row { align-items: flex-start; flex-direction: column; gap: 12px; } - .eim-hero-label { padding-bottom: 0; max-width: none; } - .eim-secondary-row { grid-template-columns: repeat(2, minmax(0, 1fr)); row-gap: 28px; } - .eim-secondary-item:nth-child(3) { border-left: none; padding-left: 0; } - } - - @media (max-width: 460px) { - .eim-section { padding-top: 48px; padding-bottom: 48px; } - } - 12:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$28"}}],"$L29"] -2a:T1573, - .ehw-section { - background: #ffffff; - padding: var(--space-section-lg, 80px) 0 calc(var(--space-section-lg, 80px) + 32px) 0; - overflow: hidden; - } - - .ehw-inner { - max-width: 1380px; - margin: 0 auto; - } - - .ehw-head { - display: flex; - flex-direction: column; - align-items: flex-start; - margin-bottom: clamp(126px, calc(7vw + 60px), 172px); - } - - .ehw-head-reveal { - width: 100%; - } - - .ehw-divider { - width: 100%; - height: 1px; - margin: 18px 0 clamp(24px, 3.5vw, 40px) 0; - border: none; - background-color: rgba(17, 17, 17, 0.14); - } - - .ehw-eyebrow { - font-size: 13px; - font-weight: 800; - letter-spacing: 2.4px; - text-transform: uppercase; - color: rgba(17, 17, 17, 0.42); - } - - .ehw-title { - max-width: 820px; - font-size: clamp(32px, 4vw, 54px) !important; - font-weight: 800 !important; - letter-spacing: -0.03em !important; - line-height: 1.08 !important; - text-transform: none !important; - color: #111111 !important; - margin: 0 !important; - } - - /* ---------------------------------------------------------------- - Premium editorial process row: five milestones in a single - sequence, separated by thin hairline dividers (no cards, no - shadows, no boxed containers). One flex-wrap sequence with - responsive flex-basis handles the composition at every size — - 5-across on desktop, 3 + 2 (centered) on tablet, a single - vertical column on mobile — from one shared markup. - ---------------------------------------------------------------- */ - .ehw-sequence { - display: flex; - flex-wrap: wrap; - justify-content: center; - --ehw-gap: clamp(24px, 2.6vw, 48px); - column-gap: var(--ehw-gap); - row-gap: clamp(48px, 6vw, 84px); - } - - .ehw-step { - position: relative; - flex: 0 1 calc((100% - 4 * var(--ehw-gap)) / 5); - min-width: 168px; - padding-left: clamp(20px, 2vw, 32px); - border-left: 1px solid rgba(17, 17, 17, 0.14); - transition: border-color 0.3s ease; - } - - .ehw-step:first-child { - border-left: none; - padding-left: 0; - } - - .ehw-step:hover { - border-left-color: rgba(200, 16, 46, 0.4); - } - - .ehw-step-num { - font-size: clamp(48px, 4.6vw, 78px); - font-weight: 900; - line-height: 0.84; - letter-spacing: -0.03em; - color: transparent; - -webkit-text-stroke: 1.5px rgba(17, 17, 17, 0.24); - margin: 0 0 18px 0; - transition: -webkit-text-stroke-color 0.3s ease; - } - - .ehw-step.is-accent .ehw-step-num { - -webkit-text-stroke: 1.5px rgba(200, 16, 46, 0.58); - } - - .ehw-step-kicker { - display: flex; - align-items: center; - gap: 7px; - margin-bottom: 18px; - } - - .ehw-step-kicker svg { - width: 13px; - height: 13px; - color: rgba(17, 17, 17, 0.36); - flex-shrink: 0; - } - - .ehw-step-kicker span { - font-size: 11px; - font-weight: 800; - letter-spacing: 2px; - text-transform: uppercase; - color: rgba(17, 17, 17, 0.4); - } - - .ehw-step.is-accent .ehw-step-kicker svg, - .ehw-step.is-accent .ehw-step-kicker span { - color: #c8102e; - } - - .ehw-step-title { - font-size: clamp(18px, 1.4vw, 22px) !important; - font-weight: 800 !important; - letter-spacing: -0.02em !important; - line-height: 1.2 !important; - text-transform: none !important; - color: #111111 !important; - margin: 0 0 22px 0; - } - - .ehw-step-desc { - max-width: 27ch; - font-size: 14px; - line-height: 1.6; - color: rgba(17, 17, 17, 0.55); - margin: 0; - } - - /* Tablet: 3 + 2, centered — sever the divider at the start of each row. */ - @media (max-width: 1100px) { - .ehw-step { - flex-basis: calc((100% - 2 * var(--ehw-gap)) / 3); - } - .ehw-step:nth-child(4) { - border-left: none; - padding-left: 0; - } - } - - /* Mobile: single column — dividers rotate from vertical to horizontal. */ - @media (max-width: 640px) { - .ehw-sequence { - row-gap: 0; - } - .ehw-step { - flex-basis: 100%; - padding-left: 0; - padding-top: clamp(28px, 8vw, 38px); - border-left: none; - border-top: 1px solid rgba(17, 17, 17, 0.14); - } - .ehw-step:first-child { - padding-top: 0; - border-top: none; - } - .ehw-step:nth-child(4) { - border-top: 1px solid rgba(17, 17, 17, 0.14); - } - .ehw-step:hover { - border-left-color: transparent; - } - .ehw-step-num { - font-size: clamp(44px, 13vw, 56px); - } - } - - @media (max-width: 480px) { - .ehw-section { padding-top: 48px; padding-bottom: 68px; } - } - 13:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$2a"}}],"$L2b"] -2c:T1bff, - .est-section { - position: relative; - background: #ffffff; - padding-top: clamp(24px, 3vw, 48px); - padding-bottom: clamp(78px, 9vw, 132px); - overflow: hidden; - } - - .est-inner { - max-width: 1380px; - margin: 0 auto; - } - - .est-head { - display: flex; - flex-direction: column; - align-items: flex-start; - margin-bottom: clamp(54px, 7vw, 86px); - } - - .est-head-reveal { - width: 100%; - } - - .est-divider { - width: 100%; - height: 1px; - margin: 18px 0 clamp(24px, 3.5vw, 40px) 0; - border: none; - background-color: rgba(17, 17, 17, 0.14); - } - - .est-eyebrow { - font-size: 13px; - font-weight: 800; - letter-spacing: 2.4px; - text-transform: uppercase; - color: rgba(17, 17, 17, 0.42); - } - - .est-title { - max-width: 940px; - font-size: clamp(42px, 6.3vw, 90px) !important; - font-weight: 800 !important; - letter-spacing: -0.055em !important; - line-height: 0.98 !important; - text-transform: uppercase !important; - color: #111111 !important; - margin: 0; - } - - .est-feature { - display: grid; - grid-template-columns: minmax(0, 0.94fr) minmax(340px, 0.64fr); - gap: clamp(28px, 4vw, 62px); - align-items: stretch; - margin-bottom: clamp(44px, 6vw, 76px); - } - - .est-photo { - position: relative; - min-height: clamp(460px, 48vw, 680px); - border-radius: 26px; - overflow: hidden; - background: #09090b; - } - - .est-photo img { - object-fit: cover; - object-position: center; - } - - .est-photo::after { - content: ""; - position: absolute; - inset: 0; - background: linear-gradient(180deg, rgba(9, 9, 11, 0) 34%, rgba(9, 9, 11, 0.72) 100%); - pointer-events: none; - } - - .est-photo-caption { - position: absolute; - left: clamp(24px, 3vw, 42px); - right: clamp(24px, 3vw, 42px); - bottom: clamp(24px, 3vw, 42px); - z-index: 1; - color: #ffffff; - } - - .est-photo-caption span { - display: block; - font-size: 12px; - font-weight: 800; - letter-spacing: 1.7px; - text-transform: uppercase; - color: rgba(255, 255, 255, 0.6); - margin-bottom: 8px; - } - - .est-photo-caption strong { - display: block; - font-size: clamp(24px, 3vw, 42px); - font-weight: 900; - line-height: 1.02; - letter-spacing: -0.04em; - } - - .est-copy { - border-radius: 26px; - background: #09090b; - color: #ffffff; - padding: clamp(34px, 5vw, 62px); - display: flex; - flex-direction: column; - justify-content: space-between; - overflow: hidden; - position: relative; - } - - .est-copy::before { - content: ""; - position: absolute; - width: 320px; - height: 320px; - right: -120px; - top: -120px; - background: radial-gradient(circle, rgba(200, 16, 46, 0.42), transparent 68%); - pointer-events: none; - } - - .est-quote-mark { - position: relative; - font-family: Georgia, serif; - font-size: 92px; - line-height: 0.8; - color: #c8102e; - display: block; - margin-bottom: 20px; - } - - .est-quote-text { - position: relative; - font-size: clamp(25px, 3vw, 44px); - font-weight: 800; - line-height: 1.12; - letter-spacing: -0.04em; - color: #ffffff; - margin: 0 0 28px 0; - } - - .est-narrative { - position: relative; - font-size: 15.5px; - line-height: 1.68; - color: rgba(255, 255, 255, 0.66); - margin: 0; - max-width: 46ch; - } - - .est-person { - position: relative; - padding-top: clamp(38px, 5vw, 64px); - } - - .est-person-name { - font-size: 18px; - font-weight: 900; - color: #ffffff; - } - - .est-person-role { - font-size: 13.5px; - color: rgba(255, 255, 255, 0.52); - margin-top: 3px; - } - - .est-list-label { - font-size: 12px; - font-weight: 800; - letter-spacing: 1.8px; - text-transform: uppercase; - color: rgba(17, 17, 17, 0.42); - padding-top: clamp(24px, 3vw, 38px); - border-top: 1px solid rgba(17, 17, 17, 0.14); - margin-bottom: clamp(20px, 3vw, 30px); - } - - .est-list { - display: flex; - gap: 18px; - overflow-x: auto; - scroll-snap-type: x mandatory; - padding-bottom: 12px; - margin-bottom: clamp(6px, 1vw, 10px); - -webkit-overflow-scrolling: touch; - } - - .est-list::-webkit-scrollbar { - height: 4px; - } - - .est-list::-webkit-scrollbar-thumb { - background: rgba(17, 17, 17, 0.18); - border-radius: 100px; - } - - .est-row { - scroll-snap-align: start; - flex: 0 0 clamp(260px, 30vw, 340px); - min-height: 220px; - padding: clamp(24px, 2.6vw, 32px); - border: 1px solid rgba(17, 17, 17, 0.14); - border-radius: 20px; - display: flex; - flex-direction: column; - justify-content: space-between; - transition: border-color 0.3s ease, transform 0.3s ease; - } - - .est-row:hover { - border-color: rgba(200, 16, 46, 0.4); - transform: translateY(-4px); - } - - .est-row-name { - font-size: 20px; - font-weight: 900; - color: #111111; - } - - .est-row-role { - font-size: 13px; - font-weight: 800; - letter-spacing: 1.4px; - text-transform: uppercase; - color: #c8102e; - margin-top: 6px; - } - - .est-row-line { - font-size: 15px; - line-height: 1.6; - color: rgba(17, 17, 17, 0.62); - margin: 28px 0 0; - } - - @media (max-width: 1000px) { - .est-head, - .est-feature { grid-template-columns: 1fr; } - .est-row { - min-height: 0; - flex-basis: 78vw; - } - } - - @media (max-width: 640px) { - .est-section { padding-top: 54px; padding-bottom: 54px; } - .est-title { - font-size: clamp(34px, 10vw, 40px) !important; - letter-spacing: -0.045em !important; - overflow-wrap: anywhere; - } - .est-quote-text { - font-size: clamp(25px, 8vw, 34px); - overflow-wrap: anywhere; - } - .est-photo, - .est-copy { border-radius: 20px; } - .est-photo { min-height: 420px; } - } - 14:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$2c"}}],"$L2d"] -2e:T16dc, - .epn-section { - position: relative; - width: calc(100% - 40px); - margin: clamp(24px, 4vw, 40px) auto; - border-radius: 28px; - overflow: hidden; - box-sizing: border-box; - background: #09090b; - padding: clamp(68px, 8vw, 112px) 0; - } - - .epn-section::before { - content: ""; - position: absolute; - inset: 0; - background: - linear-gradient(120deg, rgba(9, 9, 11, 0.98) 0%, rgba(9, 9, 11, 0.88) 54%, rgba(192, 18, 39, 0.18) 100%), - url("/images/wings-heroslider3.png"); - background-size: cover; - background-position: center 70%; - opacity: 1; - } - - .epn-inner { - position: relative; - z-index: 1; - max-width: 1380px; - margin: 0 auto; - } - - .epn-head { - display: flex; - flex-direction: column; - align-items: flex-start; - margin-bottom: clamp(50px, 7vw, 84px); - } - - .epn-head-reveal { - width: 100%; - } - - .epn-divider { - width: 100%; - height: 1px; - margin: 18px 0 clamp(24px, 3.5vw, 40px) 0; - border: none; - background-color: rgba(255, 255, 255, 0.16); - } - - .epn-eyebrow { - font-size: 13px; - font-weight: 800; - letter-spacing: 2.5px; - text-transform: uppercase; - color: rgba(255, 255, 255, 0.52); - } - - .epn-title { - max-width: 930px; - font-size: clamp(42px, 6.3vw, 90px) !important; - font-weight: 800 !important; - letter-spacing: -0.055em !important; - line-height: 0.98 !important; - text-transform: uppercase !important; - color: #ffffff !important; - margin: 0; - } - - .epn-title em { - color: #ff5470; - font-style: normal; - } - - .epn-body { - display: grid; - grid-template-columns: minmax(280px, 0.46fr) minmax(0, 1fr); - gap: clamp(32px, 5vw, 72px); - align-items: stretch; - } - - .epn-manifesto { - border-left: 4px solid #c8102e; - padding-left: clamp(22px, 3vw, 36px); - align-self: start; - } - - .epn-intro { - font-size: clamp(22px, 2.5vw, 36px); - font-weight: 800; - line-height: 1.12; - letter-spacing: -0.035em; - color: #ffffff; - margin: 0 0 22px; - } - - .epn-note { - font-size: 15.5px; - line-height: 1.68; - color: rgba(255, 255, 255, 0.62); - margin: 0; - max-width: 38ch; - } - - .epn-grid { - display: flex; - flex-direction: column; - border-top: 1px solid rgba(255, 255, 255, 0.16); - } - - .epn-card { - position: relative; - display: grid; - grid-template-columns: 70px minmax(0, 1fr) 32px; - align-items: center; - gap: clamp(18px, 3vw, 40px); - padding: clamp(22px, 2.6vw, 32px) clamp(4px, 1vw, 16px); - border-bottom: 1px solid rgba(255, 255, 255, 0.16); - border-left: 2px solid transparent; - transition: border-color 0.3s ease, padding-left 0.3s ease, background-color 0.3s ease; - } - - .epn-card:hover { - border-left-color: #c8102e; - background: rgba(200, 16, 46, 0.06); - padding-left: clamp(20px, 2.5vw, 32px); - } - - .epn-card-index { - font-size: 15px; - font-weight: 900; - color: rgba(255, 255, 255, 0.35); - } - - .epn-card-title { - font-size: clamp(22px, 2.2vw, 30px) !important; - font-weight: 900 !important; - line-height: 1.1 !important; - letter-spacing: -0.03em !important; - text-transform: none !important; - color: #ffffff !important; - margin: 0 0 8px; - } - - .epn-card-desc { - max-width: 46ch; - font-size: 14.5px; - line-height: 1.6; - color: rgba(255, 255, 255, 0.58); - margin: 0; - } - - .epn-card-arrow { - display: flex; - color: rgba(255, 255, 255, 0.3); - transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1), color 0.3s ease; - } - - .epn-card:hover .epn-card-arrow { - transform: translateX(4px); - color: #ff5470; - } - - .epn-cta { - margin-top: clamp(42px, 5vw, 64px); - } - - .epn-cta-btn { - display: inline-flex; - align-items: center; - gap: 10px; - padding: 16px 36px; - border-radius: 100px; - background: #c01227; - color: #ffffff !important; - font-weight: 800; - font-size: 15px; - text-decoration: none !important; - transition: transform 0.35s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.35s ease; - } - - .epn-cta-btn:hover { - transform: translateY(-3px); - box-shadow: 0 14px 30px rgba(192, 18, 39, 0.35); - } - - @media (max-width: 1024px) { - .epn-section { width: calc(100% - 24px); border-radius: 22px; } - } - - @media (max-width: 900px) { - .epn-head, - .epn-body { grid-template-columns: 1fr; } - } - - @media (max-width: 700px) { - .epn-title { - font-size: clamp(34px, 10vw, 40px) !important; - letter-spacing: -0.045em !important; - overflow-wrap: anywhere; - } - .epn-card { - grid-template-columns: 44px minmax(0, 1fr); - } - .epn-card-arrow { display: none; } - } - - @media (max-width: 460px) { - .epn-section { padding-top: 54px; padding-bottom: 54px; } - } - 15:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$2e"}}],"$L2f"] -30:Tdad, - .emp-cta-wrap { - width: calc(100% - 40px); - margin: clamp(24px, 4vw, 40px) auto clamp(40px, 5vw, 64px); - } - - .emp-cta { - position: relative; - overflow: hidden; - border-radius: 28px; - min-height: clamp(480px, 48vw, 680px); - background: #09090b; - display: flex; - align-items: flex-end; - } - - .emp-cta::before { - content: ""; - position: absolute; - inset: 0; - background-image: - linear-gradient(180deg, rgba(9, 9, 11, 0.18) 0%, rgba(9, 9, 11, 0.52) 48%, rgba(9, 9, 11, 0.96) 100%), - linear-gradient(90deg, rgba(9, 9, 11, 0.88) 0%, rgba(9, 9, 11, 0.35) 58%, rgba(9, 9, 11, 0.12) 100%), - url("/images/bg-header-women.webp"); - background-size: cover; - background-position: center; - transform: scale(1.02); - } - - .emp-cta-inner { - position: relative; - z-index: 1; - max-width: 1380px; - width: 100%; - margin: 0 auto; - padding: clamp(46px, 7vw, 88px) clamp(24px, 5vw, 64px); - box-sizing: border-box; - } - - .emp-cta-recap { - display: flex; - gap: clamp(28px, 4vw, 52px); - margin-bottom: clamp(28px, 4vw, 44px); - padding-bottom: clamp(24px, 3vw, 36px); - border-bottom: 1px solid rgba(255, 255, 255, 0.16); - } - - .emp-cta-recap-item { - display: flex; - align-items: baseline; - gap: 10px; - } - - .emp-cta-recap-num { - font-size: clamp(22px, 2.4vw, 32px); - font-weight: 900; - letter-spacing: -0.02em; - color: transparent; - -webkit-text-stroke: 1.3px rgba(255, 255, 255, 0.85); - } - - .emp-cta-recap-label { - font-size: 12px; - font-weight: 700; - letter-spacing: 0.6px; - color: rgba(255, 255, 255, 0.5); - } - - .emp-cta-kicker { - font-size: 13px; - font-weight: 900; - letter-spacing: 2.4px; - text-transform: uppercase; - color: #ff5470; - margin-bottom: 22px; - } - - .emp-cta-title { - max-width: 980px; - color: #ffffff !important; - font-size: clamp(44px, 7vw, 108px) !important; - font-weight: 900 !important; - line-height: 0.95 !important; - letter-spacing: -0.06em !important; - text-transform: uppercase !important; - margin: 0 0 clamp(24px, 3vw, 34px); - } - - .emp-cta-title em { - color: #ff5470; - font-style: normal; - } - - .emp-cta-bottom { - display: block; - max-width: 1120px; - } - - .emp-cta-sub { - max-width: 620px; - font-size: 16px; - line-height: 1.68; - color: rgba(255, 255, 255, 0.68); - margin: 0; - } - - @media (max-width: 1024px) { - .emp-cta-wrap { width: calc(100% - 24px); } - .emp-cta { border-radius: 22px; } - } - - @media (max-width: 760px) { - .emp-cta { min-height: 600px; } - .emp-cta::before { background-position: 76% center; } - .emp-cta-title { - font-size: clamp(36px, 11vw, 44px) !important; - letter-spacing: -0.05em !important; - overflow-wrap: anywhere; - } - .emp-cta-recap { flex-wrap: wrap; row-gap: 14px; } - } - 16:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$30"}}],"$L31"] -17:["$","script","script-0",{"src":"/_next/static/chunks/0vzdvje64yndv.js","async":true,"nonce":"$undefined"}] -18:["$","$L32",null,{"children":["$","$33",null,{"name":"Next.MetadataOutlet","children":"$@34"}]}] -35:[] -19:"$W35" -1a:["$","$1","h",{"children":[null,["$","$L36",null,{"children":"$L37"}],["$","div",null,{"hidden":true,"children":["$","$L38",null,{"children":["$","$33",null,{"name":"Next.Metadata","children":"$L39"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] -1c:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] -3a:I[5074,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0vzdvje64yndv.js"],"default"] -41:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0vzdvje64yndv.js"],"CountUp"] -42:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0vzdvje64yndv.js"],"StaggerChildren"] -43:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0vzdvje64yndv.js"],"Image"] -20:["$","section",null,{"className":"ev-section","id":"wings-empowerment-vision","children":[["$","div",null,{"className":"ev-map","aria-hidden":"true","children":["$","$L3a",null,{}]}],["$","div",null,{"className":"dm-section-container","children":["$","div",null,{"className":"ev-inner","children":[["$","$L1d",null,{"delay":0.05,"duration":0.7,"yOffset":20,"children":[["$","p",null,{"className":"ev-eyebrow","children":"/ Our Vision /"}],["$","hr",null,{"className":"ev-divider"}]]}],["$","$L1d",null,{"delay":0.12,"duration":0.85,"yOffset":30,"children":["$","h2",null,{"className":"ev-title","children":"Women Own The Future."}]}],["$","div",null,{"className":"ev-columns","children":[["$","$L1d",null,{"delay":0.18,"duration":0.8,"yOffset":25,"children":["$","p",null,{"className":"ev-statement","children":"A logistics ecosystem where women don’t just participate — they own, build, and lead."}]}],["$","$L1d",null,{"delay":0.26,"duration":0.8,"yOffset":25,"className":"ev-support","children":[["$","div",null,{"className":"ev-block","children":[["$","p",null,{"className":"ev-block-label","children":"The vision"}],["$","p",null,{"className":"ev-lead","children":"We are building an entrepreneurial ecosystem where women launch enterprises, scale operations, and shape the future of logistics from the inside."}]]}],["$","div",null,{"className":"ev-block","children":[["$","p",null,{"className":"ev-block-label","children":"Why it matters"}],["$","p",null,{"className":"ev-note","children":"Industries transform when founders emerge from every corner. Women-led enterprises bring fresh perspective, operational resilience, and long-term economic impact to logistics."}]]}],["$","div",null,{"className":"ev-block","children":[["$","p",null,{"className":"ev-block-label","children":"How Wings contributes"}],["$","p",null,{"className":"ev-note","children":"Wings provides the infrastructure — strategic partnerships, funding access, founder networks, and industry connections — that turns ambition into enterprise."}]]}]]}]]}]]}]}]]}] -22:["$","$L1d",null,{"delay":0.05,"duration":0.85,"yOffset":25,"children":[["$","div",null,{"className":"esy-eyebrow","children":"/ Our Approach /"}],["$","p",null,{"className":"esy-statement","children":["Not a program on a brochure. ",["$","em",null,{"children":"An ecosystem women can build in."}]]}]]}] -23:["$","$L1d",null,{"delay":0.15,"duration":0.8,"yOffset":25,"className":"esy-side","children":[["$","span",null,{"className":"esy-label","children":"Manifesto"}],["$","p",null,{"className":"esy-pull","children":"A venture that starts with conviction. A network that turns it into momentum."}],["$","p",null,{"className":"esy-sub","children":"Wings is designed around the moments that define a founder: the first partnership signed, the first client won, the first team hired, the first enterprise scaled."}]]}] -25:["$","div",null,{"id":"women-entrepreneurship","className":"elementor-element elementor-element-bbc6760 e-con-full e-flex cut-corner-no sticky-container-off e-con e-parent","data-id":"bbc6760","data-element_type":"container","data-e-type":"container","style":{"backgroundColor":"#1f1f1f","width":"calc(100% - 40px)","marginLeft":"20px","marginRight":"20px","borderRadius":"25px"},"children":[["$","div",null,{"className":"elementor-element elementor-element-13a7637 elementor-widget__width-auto elementor-absolute elementor-widget elementor-widget-logico_decorative_block","data-id":"13a7637","data-element_type":"widget","data-e-type":"widget","style":{"position":"absolute"},"children":["$","div",null,{"className":"elementor-widget-container","children":["$","div",null,{"className":"block-decoration animation-enable block-decoration-style-1","children":["$","div",null,{"className":"block-decoration-item"}]}]}]}],["$","div",null,{"style":{"backgroundImage":"url(/images/bg-header-women.webp)"},"className":"elementor-element elementor-element-7da6646 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"7da6646","data-element_type":"container","data-e-type":"container"}],["$","div",null,{"className":"elementor-element elementor-element-8b5d6e6 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"8b5d6e6","data-element_type":"container","data-e-type":"container","children":["$","div",null,{"className":"elementor-element elementor-element-1f766ea e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"1f766ea","data-element_type":"container","data-e-type":"container","children":[["$","div",null,{"className":"elementor-element elementor-element-3b61435 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"3b61435","data-element_type":"container","data-e-type":"container","data-settings":"{\"background_background\":\"classic\"}","children":[["$","div",null,{"className":"elementor-element elementor-element-c364d1c elementor-widget elementor-widget-text-editor","data-id":"c364d1c","data-element_type":"widget","data-e-type":"widget","data-widget_type":"text-editor.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","p",null,{"children":"01"}]}]}],["$","div",null,{"className":"elementor-element elementor-element-239afbb elementor-widget elementor-widget-logico_heading","data-id":"239afbb","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","h5",null,{"className":"logico-title","children":"Women Entrepreneurship"}]}]}],["$","div",null,{"className":"elementor-element elementor-element-0d307dd elementor-widget elementor-widget-text-editor","data-id":"0d307dd","data-element_type":"widget","data-e-type":"widget","data-widget_type":"text-editor.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","p",null,{"children":"An ecosystem where women build, own, and scale enterprises across logistics."}]}]}]]}],["$","div",null,{"className":"elementor-element elementor-element-5aea22e e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"5aea22e","data-element_type":"container","data-e-type":"container","data-settings":"{\"background_background\":\"classic\"}","children":["$","div",null,{"className":"elementor-element elementor-element-46b9ffa elementor-widget elementor-widget-logico_button","data-id":"46b9ffa","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_button.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","div",null,{"className":"button-widget","children":["$","div",null,{"className":"button-container","children":["$","a",null,{"href":"#wings-empowerment-programs","className":"logico-small-button","children":["Explore the ecosystem",["$","svg",null,{"viewBox":"0 0 13 20","children":"$L3b"}]]}]}]}]}]}]}]]}]}],"$L3c"]}] -27:["$","section",null,{"className":"epr-section","id":"wings-empowerment-programs","children":["$","div",null,{"className":"dm-section-container","children":["$","div",null,{"className":"epr-inner","children":[["$","div",null,{"className":"epr-head","children":[["$","$L1d",null,{"delay":0.05,"duration":0.75,"yOffset":20,"className":"epr-head-reveal","children":[["$","div",null,{"className":"epr-eyebrow","children":"/ Entrepreneurship Pillars /"}],["$","hr",null,{"className":"epr-divider"}]]}],["$","$L1d",null,{"delay":0.1,"duration":0.85,"yOffset":24,"children":["$","h2",null,{"className":"epr-title","children":"Every pillar is built around ownership."}]}]]}],["$","div",null,{"className":"epr-stage","children":[["$","div",null,{"className":"epr-aside-wrap","children":["$","aside",null,{"className":"epr-aside","children":[["$","div",null,{"className":"epr-aside-map","aria-hidden":"true","children":["$","$L3a",null,{}]}],["$","$L1d",null,{"delay":0.05,"duration":0.8,"yOffset":24,"className":"epr-aside-content","children":[["$","div",null,{"className":"epr-aside-num","children":"05"}],["$","p",null,{"className":"epr-aside-copy","children":["Building tomorrow’s ",["$","em",null,{"children":"women entrepreneurs."}]]}],["$","p",null,{"className":"epr-aside-desc","children":"Every enterprise starts with one decision. Our pillars move women from idea to ownership through mentorship, real industry partnerships, and hands-on venture building across the logistics ecosystem."}],["$","hr",null,{"className":"epr-aside-divider"}],["$","div",null,{"className":"epr-aside-label","children":"Journey Summary"}],["$","p",null,{"className":"epr-aside-desc","children":"Each pillar builds on the one before it — moving founders from validating an idea, to forming partnerships, to receiving hands-on guidance, to growing a sustainable logistics business."}],["$","div",null,{"className":"epr-aside-label","children":"What Participants Gain"}],["$","ul",null,{"className":"epr-aside-gains-list","children":[["$","li","Business validation",{"children":"Business validation"}],["$","li","Industry partnerships",{"children":"Industry partnerships"}],["$","li","Founder mentorship",{"children":"Founder mentorship"}],["$","li","Market readiness",{"children":"Market readiness"}],["$","li","Sustainable growth",{"children":"Sustainable growth"}]]}],["$","p",null,{"className":"epr-aside-final","children":["The destination is never just launching a business. It is building ",["$","em",null,{"children":"women-led enterprises that strengthen the logistics ecosystem."}]]}]]}]]}]}],["$","div",null,{"children":[["$","$L1d",null,{"delay":0.1,"duration":0.8,"yOffset":24,"children":["$","div",null,{"className":"epr-list","children":[["$","article","Venture Launchpad",{"className":"epr-row epr-row-featured","children":[["$","div",null,{"className":"epr-row-index","children":"01"}],["$","div",null,{"children":[["$","span",null,{"className":"epr-row-flag","children":"Where most founders begin"}],["$","span",null,{"className":"epr-row-type","children":"Start building"}],["$","h3",null,{"className":"epr-row-title","children":"Venture Launchpad"}],["$","p",null,{"className":"epr-row-desc","children":"Business model validation, market entry strategy, entity formation, and go-to-market execution for women-led logistics enterprises."}]]}]]}],["$","article","Strategic Partnerships",{"className":"epr-row","children":[["$","div",null,{"className":"epr-row-index","children":"02"}],["$","div",null,{"children":[false,["$","span",null,{"className":"epr-row-type","children":"Connect and grow"}],["$","h3",null,{"className":"epr-row-title","children":"Strategic Partnerships"}],["$","p",null,{"className":"epr-row-desc","children":"Direct access to supply chain networks, B2B relationships, industry alliances, and commercial agreements that accelerate growth."}]]}]]}],["$","article","Founder Mentorship",{"className":"epr-row","children":[["$","div",null,{"className":"epr-row-index","children":"03"}],["$","div",null,{"children":[false,["$","span",null,{"className":"epr-row-type","children":"Learn from builders"}],["$","h3",null,{"className":"epr-row-title","children":"Founder Mentorship"}],["$","p",null,{"className":"epr-row-desc","children":"One-on-one guidance from established entrepreneurs, operators, and investors who understand what it takes to scale."}]]}]]}],["$","article","Growth & Scale",{"className":"epr-row","children":["$L3d","$L3e"]}],"$L3f"]}]}],"$L40"]}]]}]]}]}]}] -29:["$","section",null,{"className":"eim-section","id":"wings-empowerment-impact","children":["$","div",null,{"className":"eim-inner dm-section-container","children":[["$","$L1d",null,{"delay":0.05,"duration":0.75,"yOffset":20,"children":[["$","div",null,{"className":"eim-eyebrow","children":"/ Our Impact /"}],["$","h2",null,{"className":"eim-title","children":"Growth we can measure"}]]}],["$","hr",null,{"className":"eim-divider"}],["$","$L1d",null,{"delay":0.08,"duration":0.8,"yOffset":20,"className":"eim-hero-row","children":[["$","span",null,{"className":"eim-hero-num","children":["$","$L41",null,{"end":500,"suffix":"+","duration":2.2,"triggerOnce":true}]}],["$","span",null,{"className":"eim-hero-label","children":"Women-Led Enterprises In The Ecosystem"}]]}],["$","hr",null,{"className":"eim-divider-2"}],["$","$L1d",null,{"delay":0.1,"duration":0.8,"yOffset":20,"children":["$","div",null,{"className":"eim-secondary-row","children":[["$","div","Enterprises Launched",{"className":"eim-secondary-item","children":[["$","span",null,{"className":"eim-secondary-num","children":["$","$L41",null,{"end":100,"suffix":"+","duration":2,"triggerOnce":true}]}],["$","span",null,{"className":"eim-secondary-label","children":"Enterprises Launched"}]]}],["$","div","Industry Partners",{"className":"eim-secondary-item","children":[["$","span",null,{"className":"eim-secondary-num","children":["$","$L41",null,{"end":25,"suffix":"+","duration":2,"triggerOnce":true}]}],["$","span",null,{"className":"eim-secondary-label","children":"Industry Partners"}]]}],["$","div","Cities Active",{"className":"eim-secondary-item","children":[["$","span",null,{"className":"eim-secondary-num","children":["$","$L41",null,{"end":15,"suffix":"+","duration":2,"triggerOnce":true}]}],["$","span",null,{"className":"eim-secondary-label","children":"Cities Active"}]]}],["$","div","In Economic Value Created",{"className":"eim-secondary-item","children":[["$","span",null,{"className":"eim-secondary-num","children":"Millions"}],["$","span",null,{"className":"eim-secondary-label","children":"In Economic Value Created"}]]}]]}]}],["$","$L1d",null,{"delay":0.12,"duration":0.75,"yOffset":20,"className":"eim-copy","children":["$","p",null,{"children":"Every number on this page represents a woman who walked into a room with an idea and walked out with a business. An enterprise launched, a partnership secured, a market entered — each is a marker of real economic impact, not a statistic collected for its own sake."}]}]]}]}] -2b:["$","section",null,{"className":"ehw-section","id":"wings-empowerment-how-it-works","children":["$","div",null,{"className":"dm-section-container","children":["$","div",null,{"className":"ehw-inner","children":[["$","div",null,{"className":"ehw-head","children":[["$","$L1d",null,{"delay":0.05,"duration":0.75,"yOffset":20,"className":"ehw-head-reveal","children":[["$","div",null,{"className":"ehw-eyebrow","children":"/ The Founder Journey /"}],["$","hr",null,{"className":"ehw-divider"}]]}],["$","$L1d",null,{"delay":0.1,"duration":0.85,"yOffset":24,"children":["$","h2",null,{"className":"ehw-title","children":"A clear path, from idea to enterprise"}]}]]}],["$","$L42",null,{"className":"ehw-sequence","stagger":0.12,"duration":0.7,"yOffset":30,"triggerOnce":true,"children":[["$","div","01",{"className":"ehw-step","children":[["$","div",null,{"className":"ehw-step-num","children":"01"}],["$","div",null,{"className":"ehw-step-kicker","aria-hidden":"true","children":[["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M7 17 17 7M9 7h8v8"}]}],["$","span",null,{"children":"Step"}]]}],["$","h3",null,{"className":"ehw-step-title","children":"Apply"}],["$","p",null,{"className":"ehw-step-desc","children":"Submit your venture idea and tell us about your entrepreneurial vision."}]]}],["$","div","02",{"className":"ehw-step","children":[["$","div",null,{"className":"ehw-step-num","children":"02"}],["$","div",null,{"className":"ehw-step-kicker","aria-hidden":"true","children":[["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M7 17 17 7M9 7h8v8"}]}],["$","span",null,{"children":"Step"}]]}],["$","h3",null,{"className":"ehw-step-title","children":"Discovery"}],["$","p",null,{"className":"ehw-step-desc","children":"Identify the right market opportunity and validate your business model."}]]}],["$","div","03",{"className":"ehw-step is-accent","children":[["$","div",null,{"className":"ehw-step-num","children":"03"}],["$","div",null,{"className":"ehw-step-kicker","aria-hidden":"true","children":[["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M7 17 17 7M9 7h8v8"}]}],["$","span",null,{"children":"Step"}]]}],["$","h3",null,{"className":"ehw-step-title","children":"Build"}],["$","p",null,{"className":"ehw-step-desc","children":"Develop your enterprise with ecosystem support, mentorship, and partnerships."}]]}],["$","div","04",{"className":"ehw-step","children":[["$","div",null,{"className":"ehw-step-num","children":"04"}],["$","div",null,{"className":"ehw-step-kicker","aria-hidden":"true","children":[["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M7 17 17 7M9 7h8v8"}]}],["$","span",null,{"children":"Step"}]]}],["$","h3",null,{"className":"ehw-step-title","children":"Launch"}],["$","p",null,{"className":"ehw-step-desc","children":"Go to market with strategic backing, industry connections, and operational infrastructure."}]]}],["$","div","05",{"className":"ehw-step","children":[["$","div",null,{"className":"ehw-step-num","children":"05"}],["$","div",null,{"className":"ehw-step-kicker","aria-hidden":"true","children":[["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M7 17 17 7M9 7h8v8"}]}],["$","span",null,{"children":"Step"}]]}],["$","h3",null,{"className":"ehw-step-title","children":"Scale"}],["$","p",null,{"className":"ehw-step-desc","children":"Grow your team, expand operations, and lead your enterprise to sustainable impact."}]]}]]}]]}]}]}] -2d:["$","section",null,{"className":"est-section","id":"wings-empowerment-stories","children":["$","div",null,{"className":"dm-section-container","children":["$","div",null,{"className":"est-inner","children":[["$","div",null,{"className":"est-head","children":[["$","$L1d",null,{"delay":0.05,"duration":0.75,"yOffset":20,"className":"est-head-reveal","children":[["$","div",null,{"className":"est-eyebrow","children":"/ Women in Motion /"}],["$","hr",null,{"className":"est-divider"}]]}],["$","$L1d",null,{"delay":0.1,"duration":0.85,"yOffset":24,"children":["$","h2",null,{"className":"est-title","children":"Small steps. Lasting careers."}]}]]}],["$","div",null,{"className":"est-feature","children":[["$","$L1d",null,{"delay":0.05,"duration":0.85,"yOffset":24,"className":"est-photo","children":[["$","$L43",null,{"src":"/images/women-hero-slider-3.png","alt":"A Wings program participant on the operations floor at a Doormile logistics hub","fill":true,"sizes":"(max-width: 1000px) 100vw, 58vw","style":{"objectPosition":"80% 22%"}}],["$","div",null,{"className":"est-photo-caption","children":[["$","span",null,{"children":"Wings Participant"}],["$","strong",null,{"children":" building a career, one milestone at a time."}]]}]]}],["$","$L1d",null,{"delay":0.12,"duration":0.85,"yOffset":24,"className":"est-copy","children":["$","div",null,{"children":[["$","span",null,{"className":"est-quote-mark","aria-hidden":"true","children":"“"}],["$","p",null,{"className":"est-quote-text","children":"I came in looking for a way forward. I found the confidence to lead."}],["$","p",null,{"className":"est-narrative","children":"She started with limited exposure to logistics. Through structured training, mentorship, and hands-on experience, she built real operational skills — and now supports other women stepping into the industry."}]]}]}]]}]]}]}]}] -2f:["$","section",null,{"className":"epn-section","id":"wings-empowerment-partners","children":["$","div",null,{"className":"dm-section-container","children":["$","div",null,{"className":"epn-inner","children":[["$","div",null,{"className":"epn-head","children":[["$","$L1d",null,{"delay":0.05,"duration":0.75,"yOffset":20,"className":"epn-head-reveal","children":[["$","div",null,{"className":"epn-eyebrow","children":"/ Collaboration /"}],["$","hr",null,{"className":"epn-divider"}]]}],["$","$L1d",null,{"delay":0.1,"duration":0.85,"yOffset":24,"children":["$","h2",null,{"className":"epn-title","children":["Partnership is how ",["$","em",null,{"children":"ecosystems grow."}]]}]}]]}],["$","div",null,{"className":"epn-body","children":[["$","$L1d",null,{"delay":0.08,"duration":0.8,"yOffset":22,"className":"epn-manifesto","children":[["$","p",null,{"className":"epn-intro","children":"The strongest ecosystems are built by many hands."}],["$","p",null,{"className":"epn-note","children":"Wings partners bring industry access, strategic infrastructure, capital, and networks. Together, we build the foundation women-led enterprises need to thrive."}]]}],["$","$L1d",null,{"delay":0.12,"duration":0.8,"yOffset":22,"children":["$","div",null,{"className":"epn-grid","children":[["$","article","Industry Partners",{"className":"epn-card","children":[["$","span",null,{"className":"epn-card-index","children":"01"}],["$","div",null,{"children":[["$","h3",null,{"className":"epn-card-title","children":"Industry Partners"}],["$","p",null,{"className":"epn-card-desc","children":"Strategic alliances with logistics operators, supply chain leaders, and distribution networks that open doors for women-led enterprises."}]]}],["$","span",null,{"className":"epn-card-arrow","aria-hidden":"true","children":["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M5 12h14M13 6l6 6-6 6"}]}]}]]}],["$","article","Technology Partners",{"className":"epn-card","children":[["$","span",null,{"className":"epn-card-index","children":"02"}],["$","div",null,{"children":[["$","h3",null,{"className":"epn-card-title","children":"Technology Partners"}],["$","p",null,{"className":"epn-card-desc","children":"Platforms, tools, and infrastructure that give founders the operational edge to compete and scale efficiently."}]]}],["$","span",null,{"className":"epn-card-arrow","aria-hidden":"true","children":["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M5 12h14M13 6l6 6-6 6"}]}]}]]}],["$","article","Community Networks",{"className":"epn-card","children":[["$","span",null,{"className":"epn-card-index","children":"03"}],["$","div",null,{"children":[["$","h3",null,{"className":"epn-card-title","children":"Community Networks"}],["$","p",null,{"className":"epn-card-desc","children":"Founder communities, women's business networks, and ecosystem builders who extend reach and amplify impact."}]]}],["$","span",null,{"className":"epn-card-arrow","aria-hidden":"true","children":["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M5 12h14M13 6l6 6-6 6"}]}]}]]}],["$","article","Investment Partners",{"className":"epn-card","children":[["$","span",null,{"className":"epn-card-index","children":"04"}],["$","div",null,{"children":[["$","h3",null,{"className":"epn-card-title","children":"Investment Partners"}],["$","p",null,{"className":"epn-card-desc","children":"Funding access, grant programs, angel networks, and capital partners aligned with women-led enterprise growth."}]]}],["$","span",null,{"className":"epn-card-arrow","aria-hidden":"true","children":["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M5 12h14M13 6l6 6-6 6"}]}]}]]}]]}]}]]}]]}]}]}] -31:["$","div",null,{"className":"emp-cta-wrap","children":["$","section",null,{"className":"emp-cta","aria-labelledby":"empowerment-final-cta","children":["$","div",null,{"className":"emp-cta-inner","children":[["$","div",null,{"className":"emp-cta-recap","children":[["$","div",null,{"className":"emp-cta-recap-item","children":[["$","span",null,{"className":"emp-cta-recap-num","children":"500+"}],["$","span",null,{"className":"emp-cta-recap-label","children":"Women Founders"}]]}],["$","div",null,{"className":"emp-cta-recap-item","children":[["$","span",null,{"className":"emp-cta-recap-num","children":"100+"}],["$","span",null,{"className":"emp-cta-recap-label","children":"Enterprises Launched"}]]}],["$","div",null,{"className":"emp-cta-recap-item","children":[["$","span",null,{"className":"emp-cta-recap-num","children":"25+"}],["$","span",null,{"className":"emp-cta-recap-label","children":"Industry Partners"}]]}]]}],["$","div",null,{"className":"emp-cta-kicker","children":"/ Build the next mile /"}],["$","h2",null,{"className":"emp-cta-title","id":"empowerment-final-cta","children":["Build what’s ",["$","em",null,{"children":"next."}]]}],["$","div",null,{"className":"emp-cta-bottom","children":["$","p",null,{"className":"emp-cta-sub","children":"Join Doormile Wings in building the entrepreneurial ecosystem where women launch, grow, and lead enterprises that create lasting value across logistics."}]}]]}]}]}] -47:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0vzdvje64yndv.js"],""] -3b:["$","polyline",null,{"points":"0.5 19.5 3 19.5 12.5 10 3 0.5"}] -3c:["$","div",null,{"className":"elementor-element elementor-element-b6e14bd e-flex e-con-boxed cut-corner-no sticky-container-off e-con e-child","data-id":"b6e14bd","data-element_type":"container","data-e-type":"container","data-settings":"{\"background_background\":\"classic\"}","children":[["$","div",null,{"className":"ws-map","aria-hidden":"true","children":["$","$L3a",null,{}]}],["$","div",null,{"className":"e-con-inner","children":["$","div",null,{"className":"elementor-element elementor-element-90cc867 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"90cc867","data-element_type":"container","data-e-type":"container","children":[["$","div",null,{"className":"elementor-element elementor-element-24c0280 elementor-widget__width-inherit elementor-widget elementor-widget-logico_heading","data-id":"24c0280","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","div",null,{"className":"logico-title","children":"/ Doormile Wings /"}]}]}],["$","div",null,{"className":"elementor-element elementor-element-2ed47f3 e-con-full e-grid cut-corner-no sticky-container-off e-con e-child","data-id":"2ed47f3","data-element_type":"container","data-e-type":"container","children":[["$","div",null,{"className":"elementor-element elementor-element-36efec7 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"36efec7","data-element_type":"container","data-e-type":"container","children":[["$","$L1d",null,{"duration":0.8,"yOffset":28,"triggerOnce":true,"children":["$","div",null,{"className":"elementor-element elementor-element-778840d elementor-widget elementor-widget-logico_heading","data-id":"778840d","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","h3",null,{"className":"logico-title","children":"Women Building The Next Mile"}]}]}]}],["$","div",null,{"className":"elementor-element elementor-element-bbfb67f elementor-widget elementor-widget-image","data-id":"bbfb67f","data-element_type":"widget","data-e-type":"widget","data-widget_type":"image.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","$L43",null,{"src":"/images/bg-map-women.webp","alt":"Women Map","width":626,"height":692,"style":{"maxWidth":"100%","height":"auto"}}]}]}]]}],["$","div",null,{"className":"elementor-element elementor-element-b2c956f e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"b2c956f","data-element_type":"container","data-e-type":"container","children":["$","div",null,{"id":"ws-stories","children":[["$","$L42",null,{"className":"ws__stats","stagger":0.1,"duration":0.6,"yOffset":20,"triggerOnce":true,"children":[["$","div","Women Founders",{"className":"ws__stat","children":[["$","div",null,{"className":"ws__stat-num","children":[["$","$L41",null,{"end":500,"suffix":"","duration":1.8,"triggerOnce":true}],["$","span",null,{"children":"+"}]]}],["$","div",null,{"className":"ws__stat-label","children":"Women Founders"}]]}],["$","div","Cities Active",{"className":"ws__stat","children":[["$","div",null,{"className":"ws__stat-num","children":[["$","$L41",null,{"end":35,"suffix":"","duration":1.8,"triggerOnce":true}],["$","span",null,{"children":"+"}]]}],["$","div",null,{"className":"ws__stat-label","children":"Cities Active"}]]}],["$","div","Enterprises Launched",{"className":"ws__stat","children":[["$","div",null,{"className":"ws__stat-num","children":[["$","$L41",null,{"end":100,"suffix":"","duration":1.8,"triggerOnce":true}],["$","span",null,{"children":"+"}]]}],["$","div",null,{"className":"ws__stat-label","children":"Enterprises Launched"}]]}]]}],["$","$L42",null,{"className":"ws__cards","stagger":0.08,"duration":0.6,"yOffset":24,"triggerOnce":true,"children":[["$","div","Venture Building",{"className":"ws__card","children":[["$","span",null,{"className":"ws__card-icon","aria-hidden":"true","children":["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"1.8","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","path",null,{"d":"M4 19V5"}],["$","path",null,{"d":"M4 7h12l-2 4 2 4H4"}],["$","path",null,{"d":"M18 19h2"}]]}]}],["$","div",null,{"className":"ws__card-title","children":"Venture Building"}],["$","p",null,{"className":"ws__card-desc","children":"End-to-end support for women launching logistics enterprises — from ideation to market entry."}]]}],"$L44","$L45","$L46"]}]]}]}]]}]]}]}]]}] -3d:["$","div",null,{"className":"epr-row-index","children":"04"}] -3e:["$","div",null,{"children":[false,["$","span",null,{"className":"epr-row-type","children":"Scale with confidence"}],["$","h3",null,{"className":"epr-row-title","children":"Growth & Scale"}],["$","p",null,{"className":"epr-row-desc","children":"Operational expansion frameworks, team building, funding readiness, and sustainable unit economics for ventures ready to grow."}]]}] -3f:["$","article","Industry Immersion",{"className":"epr-row","children":[["$","div",null,{"className":"epr-row-index","children":"05"}],["$","div",null,{"children":[false,["$","span",null,{"className":"epr-row-type","children":"See the opportunity"}],["$","h3",null,{"className":"epr-row-title","children":"Industry Immersion"}],["$","p",null,{"className":"epr-row-desc","children":"Real exposure to logistics operations, supply chain infrastructure, and distribution networks before founders commit to a vertical."}]]}]]}] -40:["$","div",null,{"className":"epr-cta","children":["$","$L47",null,{"href":"/contact","className":"epr-cta-link","children":["Start your venture",["$","svg",null,{"width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M5 12h14M13 6l6 6-6 6"}]}]]}]}] -44:["$","div","Entrepreneurship",{"className":"ws__card","children":[["$","span",null,{"className":"ws__card-icon","aria-hidden":"true","children":["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"1.8","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","rect",null,{"x":"3","y":"7","width":"18","height":"13","rx":"2"}],["$","path",null,{"d":"M8 7V5a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2M3 12h18"}]]}]}],["$","div",null,{"className":"ws__card-title","children":"Entrepreneurship"}],["$","p",null,{"className":"ws__card-desc","children":"Women building, owning, and scaling sustainable businesses within the logistics ecosystem."}]]}] -45:["$","div","Founder Networks",{"className":"ws__card","children":[["$","span",null,{"className":"ws__card-icon","aria-hidden":"true","children":["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"1.8","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","circle",null,{"cx":"8","cy":"8","r":"3"}],["$","circle",null,{"cx":"16","cy":"8","r":"3"}],["$","path",null,{"d":"M2.5 20c.7-3.1 2.8-5 5.5-5s4.8 1.9 5.5 5"}],["$","path",null,{"d":"M10.5 20c.7-3.1 2.8-5 5.5-5s4.8 1.9 5.5 5"}]]}]}],["$","div",null,{"className":"ws__card-title","children":"Founder Networks"}],["$","p",null,{"className":"ws__card-desc","children":"Peer communities and strategic connections that accelerate growth and open new markets."}]]}] -46:["$","div","Enterprise Leadership",{"className":"ws__card","children":[["$","span",null,{"className":"ws__card-icon","aria-hidden":"true","children":["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"1.8","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","circle",null,{"cx":"12","cy":"9","r":"5"}],["$","path",null,{"d":"M9 13.5 7.5 21 12 18l4.5 3-1.5-7.5"}]]}]}],["$","div",null,{"className":"ws__card-title","children":"Enterprise Leadership"}],["$","p",null,{"className":"ws__card-desc","children":"Strategic decision-making, operational excellence, and vision-driven leadership for women founders."}]]}] -37:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -48:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -34:null -39:[["$","title","0",{"children":"Doormile Wings — Women Entrepreneurship Initiative"}],["$","meta","1",{"name":"description","content":"Doormile Wings empowers women to build, own, and lead enterprises within the logistics ecosystem through strategic partnerships, founder networks, and entrepreneurial infrastructure."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"canonical","href":"https://doormile.com/empowerment"}],["$","meta","4",{"property":"og:title","content":"Doormile Wings — Women Entrepreneurship Initiative"}],["$","meta","5",{"property":"og:description","content":"An entrepreneurial ecosystem empowering women to launch, grow, and lead logistics enterprises with strategic partnerships and industry collaboration."}],["$","meta","6",{"property":"og:url","content":"https://doormile.com/empowerment"}],["$","meta","7",{"property":"og:site_name","content":"Doormile"}],["$","meta","8",{"property":"og:image","content":"https://doormile.com/images/wings-logo.png"}],["$","meta","9",{"property":"og:image:width","content":"1200"}],["$","meta","10",{"property":"og:image:height","content":"630"}],["$","meta","11",{"property":"og:image:alt","content":"Doormile Wings — Women Entrepreneurship Initiative"}],["$","meta","12",{"property":"og:type","content":"website"}],["$","meta","13",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","14",{"name":"twitter:title","content":"Doormile Wings — Women Entrepreneurship Initiative"}],["$","meta","15",{"name":"twitter:description","content":"An entrepreneurial ecosystem empowering women to launch, grow, and lead logistics enterprises with strategic partnerships and industry collaboration."}],["$","meta","16",{"name":"twitter:image","content":"https://doormile.com/images/wings-logo.png"}],["$","link","17",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","18",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","19",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L48","21",{}]] diff --git a/build/empowerment/__next._full.txt b/build/empowerment/__next._full.txt deleted file mode 100644 index d866020..0000000 --- a/build/empowerment/__next._full.txt +++ /dev/null @@ -1,2125 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -1b:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -c:Tf99, - .eh-outer { - box-sizing: border-box; - padding: 20px; - } - - .eh-section { - position: relative; - border-radius: 25px; - overflow: hidden; - box-sizing: border-box; - height: 800px; - display: flex; - align-items: center; - justify-content: center; - background: #07080c; - } - - .eh-bg { - position: absolute; - inset: 0; - background-image: url("/images/women-hero-slider-2.png"); - background-size: cover; - background-position: 30% 72%; - z-index: 0; - } - - .eh-scrim { - position: absolute; - inset: 0; - background: - linear-gradient(180deg, rgba(7, 8, 12, 0.72) 0%, rgba(7, 8, 12, 0.5) 40%, rgba(7, 8, 12, 0.86) 100%); - z-index: 1; - } - - .eh-inner { - position: relative; - z-index: 2; - width: 100%; - max-width: 1000px; - margin: 0 auto; - padding: 0 15px; - display: flex; - flex-direction: column; - align-items: center; - text-align: center; - box-sizing: border-box; - } - - .eh-eyebrow { - font-size: 13px; - font-weight: 800; - letter-spacing: 2.6px; - text-transform: uppercase; - color: #ff5470; - margin-bottom: 20px; - } - - .eh-title { - width: 100%; - font-size: clamp(30px, 5.5vw, 80px) !important; - font-weight: 800 !important; - letter-spacing: -0.03em !important; - line-height: 1.08 !important; - text-transform: uppercase !important; - color: #ffffff !important; - margin: 0; - word-wrap: break-word; - overflow-wrap: break-word; - } - - .eh-title .eh-soft { - color: rgba(255, 255, 255, 0.72); - } - - .eh-desc { - width: 100%; - max-width: 680px; - margin: 23px auto 0; - font-size: clamp(16px, 1.35vw, 23px); - line-height: 1.65; - color: rgba(255, 255, 255, 0.78); - } - - .eh-btns { - display: flex; - align-items: center; - justify-content: center; - gap: 14px; - flex-wrap: wrap; - margin-top: 32px; - } - - .eh-btn-primary, - .eh-btn-outline { - display: inline-flex; - align-items: center; - gap: 10px; - padding: 15px 28px; - border-radius: 100px; - font-weight: 800; - font-size: 14px; - text-decoration: none; - transition: transform 0.35s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.35s ease, background-color 0.3s ease, border-color 0.3s ease; - } - - .eh-btn-primary { - background: #c01227; - color: #ffffff !important; - border: 1.5px solid #c01227; - } - - .eh-btn-primary:hover { - transform: translateY(-3px); - box-shadow: 0 14px 30px rgba(192, 18, 39, 0.4); - } - - .eh-btn-outline { - background: rgba(255, 255, 255, 0.04); - color: #ffffff !important; - border: 1.5px solid rgba(255, 255, 255, 0.36); - } - - .eh-btn-outline:hover { - border-color: rgba(255, 255, 255, 0.82); - background: rgba(255, 255, 255, 0.09); - transform: translateY(-3px); - } - - @media (max-width: 1020px) { - .eh-outer { padding: 10px; } - } - - @media (max-width: 840px) { - .eh-section { height: 600px; } - } - - @media (max-width: 660px) { - .eh-title { - font-size: clamp(20px, 7vw, 32px) !important; - } - } - - @media (max-width: 480px) { - .eh-section { height: 520px; } - .eh-btn-primary, .eh-btn-outline { width: 100%; justify-content: center; padding: 14px 22px; } - .eh-btns { width: 100%; } - } - 0:{"P":null,"c":["","empowerment"],"q":"","i":false,"f":[[["",{"children":["empowerment",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","div",null,{"id":"empowerment","className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","div",null,{"data-elementor-type":"wp-page","data-elementor-id":"86","className":"elementor elementor-86 elementor-59 elementor-empowerment","children":[[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$c"}}],"$Ld"],"$Le","$Lf","$L10","$L11","$L12","$L13","$L14","$L15","$L16"]}]}]}]}],["$L17"],"$L18"]}],{},null,false,null]},null,false,"$@19"]},null,false,null],"$L1a",false]],"m":"$undefined","G":["$1b",["$L1c"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -1d:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0vzdvje64yndv.js"],"ScrollReveal"] -1e:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0vzdvje64yndv.js"],"ShimmerText"] -32:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -33:"$Sreact.suspense" -36:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -38:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -d:["$","div",null,{"className":"eh-outer","children":["$","section",null,{"className":"eh-section","id":"wings-empowerment-hero","children":[["$","div",null,{"className":"eh-bg","aria-hidden":"true"}],["$","div",null,{"className":"eh-scrim","aria-hidden":"true"}],["$","$L1d",null,{"delay":0.05,"duration":0.85,"yOffset":30,"className":"eh-inner","children":[["$","h1",null,{"className":"eh-title","children":["Building ",["$","span",null,{"className":"eh-soft","children":"Women"}],["$","br",null,{}],["$","$L1e",null,{"children":"Entrepreneurs."}]]}],["$","p",null,{"className":"eh-desc","children":"Empowering ambitious women with the network, strategic partnerships, and opportunities to build, grow, and lead successful enterprises that shape the future of logistics."}]]}]]}]}] -1f:Te8f, - .ev-section { - position: relative; - background: #ffffff; - padding: clamp(96px, 11vw, 150px) 0; - overflow: hidden; - } - - .ev-map { - position: absolute; - inset: 0; - z-index: 0; - opacity: 0.4; - pointer-events: none; - } - - .ev-inner { - position: relative; - z-index: 1; - max-width: 1380px; - min-width: 0; - margin: 0 auto; - } - - .ev-eyebrow { - margin: 0 0 18px 0; - font-size: 14px; - font-weight: 500; - letter-spacing: 1.5px; - color: rgba(17, 17, 17, 0.6); - } - - .ev-divider { - width: 100%; - height: 1px; - margin: 0 0 clamp(64px, 7.8vw, 92px) 0; - border: none; - background-color: rgba(17, 17, 17, 0.16); - } - - .ev-title { - margin: 0 0 clamp(92px, 11.5vw, 156px) 0 !important; - max-width: 1320px; - display: block; - font-weight: 800 !important; - font-style: normal !important; - letter-spacing: -0.018em !important; - word-spacing: 0.02em; - line-height: 1.04em !important; - text-transform: none !important; - color: #ffffff !important; - -webkit-text-stroke: 2px #c01227; - paint-order: stroke fill; - font-size: clamp(48px, 8.5vw, 128px) !important; - white-space: normal; - overflow-wrap: normal; - text-wrap: balance; - } - - @media (max-width: 1280px) { - .ev-title { - font-size: 118px !important; - } - } - - @media (max-width: 1020px) { - .ev-title { - font-size: 96px !important; - } - } - - @media (max-width: 767px) { - .ev-title { - font-size: 72px !important; - } - } - - .ev-columns { - display: grid; - grid-template-columns: minmax(0, 0.6fr) minmax(0, 1fr); - gap: clamp(60px, 8vw, 122px); - align-items: start; - } - - .ev-columns > * { - min-width: 0; - } - - .ev-statement { - margin: 0; - font-size: clamp(28px, 3vw, 52px); - font-weight: 600; - line-height: 1.2; - letter-spacing: -0.03em; - color: #111111; - overflow-wrap: break-word; - } - - .ev-support { - display: grid; - gap: clamp(34px, 3.8vw, 52px); - min-width: 0; - } - - .ev-block { - display: grid; - gap: 12px; - } - - .ev-block-label { - margin: 0; - font-size: 12px; - font-weight: 700; - letter-spacing: 1.4px; - line-height: 1; - text-transform: uppercase; - color: rgba(192, 18, 39, 0.86); - } - - .ev-lead, - .ev-note { - font-size: clamp(17px, 1.3vw, 20px); - line-height: 1.6; - color: #333333; - margin: 0; - overflow-wrap: break-word; - } - - .ev-lead { - font-weight: 700; - } - - .ev-note { - font-weight: 400; - } - - @media (max-width: 900px) { - .ev-columns { - grid-template-columns: 1fr; - } - } - - @media (max-width: 600px) { - .ev-section { padding-top: 64px; padding-bottom: 64px; } - .ev-title { - max-width: calc(100vw - (var(--dm-mobile-gutter, 10px) * 2)); - font-size: 56px !important; - letter-spacing: -0.025em !important; - line-height: 1.02em !important; - -webkit-text-stroke-width: 1.5px; - } - } - e:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$1f"}}],"$L20"] -21:Tbc4, - .esy-section { - position: relative; - width: calc(100% - 40px); - margin: 0 auto clamp(24px, 4vw, 40px); - border-radius: 28px; - overflow: hidden; - box-sizing: border-box; - min-height: clamp(500px, 50vw, 690px); - display: flex; - align-items: stretch; - background: #09090b; - } - - .esy-bg { - position: absolute; - inset: 0; - background-image: - linear-gradient(100deg, rgba(9, 9, 11, 0.96) 0%, rgba(9, 9, 11, 0.84) 43%, rgba(192, 18, 39, 0.28) 100%), - url("/images/wings-heroslider4.png"); - background-size: cover; - background-position: center; - z-index: 0; - } - - .esy-inner { - position: relative; - z-index: 1; - max-width: 1380px; - margin: 0 auto; - width: 100%; - padding-top: clamp(60px, 7vw, 98px); - padding-bottom: clamp(60px, 7vw, 98px); - display: grid; - grid-template-columns: minmax(0, 0.9fr) minmax(280px, 0.52fr); - gap: clamp(36px, 6vw, 96px); - align-items: end; - } - - .esy-eyebrow { - font-size: 13px; - font-weight: 800; - letter-spacing: 2.5px; - text-transform: uppercase; - color: #ff5470; - margin-bottom: 24px; - } - - .esy-statement { - max-width: 920px; - font-size: clamp(38px, 5.7vw, 86px); - font-weight: 800; - letter-spacing: -0.055em; - line-height: 0.98; - text-transform: uppercase; - color: #ffffff; - margin: 0; - } - - .esy-statement em { - color: #ff5470; - font-style: normal; - } - - .esy-side { - border-left: 1px solid rgba(255, 255, 255, 0.18); - padding-left: clamp(24px, 3vw, 42px); - } - - .esy-label { - display: block; - font-size: 12px; - font-weight: 800; - letter-spacing: 1.8px; - text-transform: uppercase; - color: rgba(255, 255, 255, 0.45); - margin-bottom: 18px; - } - - .esy-pull { - font-size: clamp(22px, 2.3vw, 34px); - font-weight: 800; - line-height: 1.16; - letter-spacing: -0.03em; - color: #ffffff; - margin: 0 0 22px 0; - } - - .esy-sub { - font-size: 15.5px; - line-height: 1.65; - color: rgba(255, 255, 255, 0.64); - margin: 0; - } - - @media (max-width: 1024px) { - .esy-section { width: calc(100% - 24px); border-radius: 22px; } - .esy-inner { grid-template-columns: 1fr; align-items: start; } - .esy-side { max-width: 640px; } - } - - @media (max-width: 640px) { - .esy-section { min-height: 560px; } - .esy-side { border-left: none; padding-left: 0; border-top: 1px solid rgba(255, 255, 255, 0.18); padding-top: 24px; } - } - f:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$21"}}],["$","section",null,{"className":"esy-section","id":"wings-empowerment-story","children":[["$","div",null,{"className":"esy-bg","aria-hidden":"true"}],["$","div",null,{"className":"esy-inner dm-section-container","children":["$L22","$L23"]}]]}]] -24:T3756, - /* ============================================================ - Success Stories — redesigned right column (stats + 2x2 cards) - Dark section · red accent #dc2626 / #ef4444 · Manrope - ============================================================ */ - /* Neutralise the right column's asymmetric 140px left padding so the - box group can be centered instead of pushed to one side. */ - .elementor-element.elementor-element-b2c956f { padding: 0 !important; } - - /* Vertically center the two columns so the right content lines up with - the image instead of needing a big top gap; tighten row gap. */ - .elementor-element.elementor-element-2ed47f3 { align-items: center !important; } - - /* Animated map background behind the Success Stories content */ - .elementor-element.elementor-element-b6e14bd { position: relative; overflow: hidden; } - .elementor-element.elementor-element-b6e14bd > .e-con-inner { position: relative; z-index: 1; } - .ws-map { position: absolute; inset: 0; z-index: 0; opacity: 0.5; pointer-events: none; } - .ws-map canvas { display: block; } - - #ws-stories { - display: flex; - flex-direction: column; - gap: 16px; - width: 100%; - max-width: 620px; - margin: 0 auto; /* center the 7 boxes as a group — no negative margins */ - } - - #ws-stories .ws__stats { - display: grid; - grid-template-columns: repeat(3, 1fr); - gap: 12px; - } - #ws-stories .ws__stat { - background: rgba(255,255,255,0.04); - border: 1px solid rgba(255,255,255,0.08); - border-radius: 14px; - padding: 20px 16px; - transition: border-color 0.3s ease, background-color 0.3s ease; - } - #ws-stories .ws__stat:hover { border-color: rgba(220,38,38,0.28); background: rgba(220,38,38,0.05); } - #ws-stories .ws__stat-num { - color: #fff !important; - font-weight: 900; - font-size: clamp(28px, 3vw, 38px); - line-height: 1; - letter-spacing: -0.01em; - } - #ws-stories .ws__stat-num span { color: #dc2626 !important; } - #ws-stories .ws__stat-label { - margin-top: 9px; - color: rgba(255,255,255,0.7) !important; - font-size: 14px !important; - font-weight: 700; - letter-spacing: 0.03em; - text-transform: uppercase; - } - - #ws-stories .ws__cards { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 14px; - align-items: stretch; - } - #ws-stories .ws__card { - position: relative; - overflow: hidden; - display: flex; - flex-direction: column; - min-height: 168px; - background: rgba(255,255,255,0.035); - border: 1px solid rgba(255,255,255,0.08); - border-radius: 14px; - padding: 20px; - transition: transform 0.35s cubic-bezier(.25,1,.5,1), border-color 0.35s ease, background-color 0.35s ease, box-shadow 0.35s ease; - } - #ws-stories .ws__card::after { - content: ''; - position: absolute; - top: -45%; left: -25%; - width: 150px; height: 150px; - background: radial-gradient(circle, rgba(220,38,38,0.2), transparent 70%); - opacity: 0; - transition: opacity 0.35s ease; - pointer-events: none; - } - #ws-stories .ws__card:hover { - transform: translateY(-4px); - border-color: rgba(220,38,38,0.3); - background: rgba(220,38,38,0.05); - box-shadow: 0 18px 44px -20px rgba(0,0,0,0.7); - } - #ws-stories .ws__card:hover::after { opacity: 1; } - #ws-stories .ws__card-icon { - display: inline-flex; - align-items: center; - justify-content: center; - width: 40px; height: 40px; - border-radius: 11px; - background: rgba(220,38,38,0.12); - border: 1px solid rgba(220,38,38,0.25); - color: #ef4444; - margin-bottom: 16px; - transition: background-color 0.3s ease, color 0.3s ease; - } - #ws-stories .ws__card:hover .ws__card-icon { background: #dc2626; color: #fff; } - #ws-stories .ws__card-icon svg { width: 21px; height: 21px; } - #ws-stories .ws__card-title { - color: #fff !important; - font-weight: 800; - font-size: 19px; - line-height: 1.2; - letter-spacing: 0; - margin-bottom: 9px; - } - #ws-stories .ws__card-desc { - max-width: 28ch; - color: rgba(255,255,255,0.66) !important; - font-size: 15px; - line-height: 1.52; - margin: 0; - font-weight: 500; - } - - /* ---- Floating card sizing: content-driven, not container-driven ---- - Matches the EV Logistics card height proportions exactly by trimming - red content padding and white footer min-height. */ - .elementor-element.elementor-element-3b61435 { - --padding-top: 46px; - --padding-bottom: 38px; - } - .elementor-element.elementor-element-5aea22e { - --min-height: 38px; - --padding-top: 14px; - --padding-bottom: 14px; - } - @media (max-width: 1020px) { - .elementor-element.elementor-element-3b61435 { - --padding-top: 34px; - --padding-bottom: 28px; - } - .elementor-element.elementor-element-5aea22e { - --min-height: 32px; - --padding-top: 12px; - --padding-bottom: 12px; - } - } - @media (max-width: 660px) { - .elementor-element.elementor-element-3b61435 { - --padding-top: 26px; - --padding-bottom: 22px; - } - .elementor-element.elementor-element-5aea22e { - --min-height: 24px; - --padding-top: 10px; - --padding-bottom: 10px; - } - } - - .elementor-element-778840d .logico-title { - white-space: nowrap !important; - } - - /* The banner image (bg-header-women.png) is very wide (≈2.48:1) and the - woman — the subject of this section — sits on the right. On narrow - screens "cover" center-crops her out, so shift the focal point right - to keep her face in frame. */ - @media (max-width: 1024px) { - .elementor-element.elementor-element-7da6646:not(.elementor-motion-effects-element-type-background) { - background-position: 78% center !important; - } - } - @media (max-width: 767px) { - .elementor-element.elementor-element-7da6646:not(.elementor-motion-effects-element-type-background) { - background-position: 82% 25% !important; - } - } - - /* Stack the two columns below the desktop breakpoint so the box group - always gets full width and stays centered — never clipped. */ - @media (max-width: 1024px) { - .elementor-element-778840d .logico-title { - white-space: normal !important; - } - .elementor-element.elementor-element-2ed47f3 { grid-template-columns: 1fr !important; } - #ws-stories { max-width: 640px; margin: 0 auto; } - /* Align the heading, image and stats/cards to one shared left/right - edge — the heading + image widgets carried extra inset that left - them staggered (80px / 70px / 60px) against the stats column. */ - #women-entrepreneurship .elementor-element-36efec7, - #women-entrepreneurship .elementor-element-b2c956f { - padding-left: 0 !important; - padding-right: 0 !important; - } - #women-entrepreneurship .elementor-element-778840d, - #women-entrepreneurship .elementor-element-bbfb67f, - #women-entrepreneurship .elementor-element-778840d > .elementor-widget-container, - #women-entrepreneurship .elementor-element-bbfb67f > .elementor-widget-container { - padding-left: 0 !important; - padding-right: 0 !important; - margin-left: 0 !important; - margin-right: 0 !important; - } - } - - @media (max-width: 767px) { - #women-entrepreneurship { - width: calc(100% - 20px) !important; - margin-left: 10px !important; - margin-right: 10px !important; - border-radius: 22px !important; - padding-left: 0px !important; - padding-right: 0px !important; - } - #women-entrepreneurship .e-con-boxed > .e-con-inner { - padding-top: 32px !important; - padding-bottom: 32px !important; - padding-left: 0 !important; - padding-right: 0 !important; - } - #women-entrepreneurship .elementor-element-8b5d6e6, - #women-entrepreneurship .elementor-element-b6e14bd, - #women-entrepreneurship .elementor-element-90cc867, - #women-entrepreneurship .elementor-element-36efec7, - #women-entrepreneurship .elementor-element-b2c956f { - padding-left: 0 !important; - padding-right: 0 !important; - margin-left: 0 !important; - margin-right: 0 !important; - } - #women-entrepreneurship .elementor-element-1f766ea { - width: 100% !important; - max-width: 100% !important; - margin-left: auto !important; - margin-right: auto !important; - padding-left: 0 !important; - padding-right: 0 !important; - } - #women-entrepreneurship .elementor-element.elementor-element-2ed47f3 { - padding-left: 0 !important; - padding-right: 0 !important; - margin-left: 0 !important; - margin-right: 0 !important; - margin-top: 0 !important; - padding-top: 0 !important; - gap: 24px !important; - } - #women-entrepreneurship .elementor-element-36efec7 { - margin-top: 0px !important; - padding-top: 0px !important; - gap: 0px !important; - } - #women-entrepreneurship .elementor-element-24c0280 { - margin-bottom: 0px !important; - padding-left: 14px !important; - padding-right: 14px !important; - box-sizing: border-box !important; - } - #women-entrepreneurship .elementor-element-778840d { - margin-top: 14px !important; - margin-bottom: 14px !important; - padding-top: 0px !important; - padding-bottom: 0px !important; - padding-left: 14px !important; - padding-right: 14px !important; - box-sizing: border-box !important; - } - #women-entrepreneurship .elementor-element-778840d h3.logico-title, - #women-entrepreneurship .elementor-element-778840d > .elementor-widget-container { - margin: 0px !important; - padding: 0px !important; - } - #women-entrepreneurship .elementor-element-7da6646 { - width: calc(100% - 28px) !important; - margin-left: 14px !important; - margin-right: 14px !important; - border-radius: 18px !important; - min-height: 240px !important; - margin-top: 15px !important; - margin-bottom: -50px !important; - box-sizing: border-box !important; - } - #women-entrepreneurship .elementor-element-8b5d6e6 { - padding-left: 14px !important; - padding-right: 14px !important; - margin-left: 0px !important; - margin-right: 0px !important; - width: 100% !important; - max-width: 100% !important; - box-sizing: border-box !important; - } - #women-entrepreneurship .elementor-element-bbfb67f img { - width: 100% !important; - } - #women-entrepreneurship .elementor-element-bbfb67f { - margin-top: 0px !important; - margin-bottom: 16px !important; - padding-left: 14px !important; - padding-right: 14px !important; - box-sizing: border-box !important; - } - #ws-stories { - padding-left: 14px !important; - padding-right: 14px !important; - box-sizing: border-box !important; - } - /* KPI stat cards stack one-per-row on mobile. Inside each card the big - number sits on the left and the label on the right, vertically - centered, so every stat reads as a clean full-width row instead of - three cramped columns. */ - #ws-stories .ws__stats { grid-template-columns: 1fr; gap: 12px; } - #ws-stories .ws__stat { - display: flex; - align-items: center; - justify-content: space-between; - gap: 16px; - padding: 16px 20px; - min-width: 0; - } - #ws-stories .ws__stat-num { font-size: clamp(30px, 9vw, 40px); } - #ws-stories .ws__stat-label { - margin-top: 0; - font-size: 13px !important; - letter-spacing: 0.02em; - text-align: right; - min-height: 0; - } - #ws-stories .ws__cards { grid-template-columns: 1fr; gap: 12px; } - } - 10:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$24"}}],"$L25"] -26:T2d38, - .epr-section { - background: #ffffff; - padding: clamp(78px, 9vw, 132px) 0; - overflow: visible; - } - - .epr-inner { - max-width: 1380px; - min-width: 0; - margin: 0 auto; - } - - .epr-head { - display: flex; - flex-direction: column; - align-items: flex-start; - margin-bottom: clamp(54px, 7vw, 86px); - } - - .epr-head-reveal { - width: 100%; - } - - .epr-divider { - width: 100%; - height: 1px; - margin: 18px 0 clamp(24px, 3.5vw, 40px) 0; - border: none; - background-color: rgba(17, 17, 17, 0.14); - } - - .epr-eyebrow { - font-size: 13px; - font-weight: 800; - letter-spacing: 2.4px; - text-transform: uppercase; - color: rgba(17, 17, 17, 0.42); - } - - .epr-title { - max-width: 950px; - font-size: clamp(42px, 6.2vw, 88px) !important; - font-weight: 800 !important; - letter-spacing: -0.055em !important; - line-height: 0.98 !important; - text-transform: uppercase !important; - color: #111111 !important; - margin: 0; - } - - .epr-stage { - display: grid; - grid-template-columns: minmax(300px, 0.38fr) minmax(0, 0.62fr); - gap: clamp(32px, 5vw, 78px); - /* stretch (not start): the left column's grid-item box must span - the full row — i.e. match the taller Programs list — or the - sticky aside inside it runs out of room and un-sticks well - before the list finishes scrolling. */ - align-items: stretch; - min-width: 0; - } - - .epr-stage > * { - min-width: 0; - } - - /* Plain stretching grid item. Carries no visual styling of its own — - it exists only to give .epr-aside (sized/centered independently - inside it) the full row height to stick within. */ - .epr-aside-wrap { - min-width: 0; - } - - .epr-aside { - position: sticky; - top: 110px; - min-width: 0; - min-height: clamp(480px, 44vw, 660px); - padding: clamp(18px, 3vw, 34px) 0 clamp(24px, 3.5vw, 42px); - display: flex; - flex-direction: column; - justify-content: center; - overflow: hidden; - color: #111111; - } - - .epr-aside-map { - position: absolute; - inset: 8% -22% 8% -28%; - z-index: 0; - opacity: 0.22; - pointer-events: none; - } - - .epr-aside-map canvas { - display: block; - } - - .epr-aside-content { - position: relative; - z-index: 1; - display: grid; - gap: clamp(18px, 2.2vw, 28px); - } - - .epr-aside-num { - position: relative; - font-size: clamp(164px, 17vw, 300px); - font-weight: 900; - line-height: 0.78; - letter-spacing: -0.06em; - color: transparent; - -webkit-text-stroke: 2px rgba(200, 16, 46, 0.2); - } - - .epr-aside-copy { - position: relative; - max-width: 12ch; - font-size: clamp(30px, 3.6vw, 56px); - font-weight: 800; - line-height: 0.98; - letter-spacing: -0.055em; - text-transform: uppercase; - color: #111111; - margin: 0; - } - - .epr-aside-copy em { - font-style: normal; - color: #c8102e; - } - - .epr-aside-desc { - position: relative; - max-width: 34ch; - font-size: 15.5px; - line-height: 1.65; - color: rgba(17, 17, 17, 0.58); - margin: 0; - } - - /* Continues the editorial narrative below the original hero - statement/paragraph — same grid, same gap rhythm as the rest of - .epr-aside-content, so it reads as one uninterrupted column rather - than a bolted-on block. Exists so the sticky aside still has real - editorial content to show while the list scrolls through its last - two entries, instead of ending early and leaving the left side - blank for the remainder of the scroll. */ - .epr-aside-divider { - position: relative; - width: 100%; - height: 1px; - border: none; - margin: 0; - background-color: rgba(17, 17, 17, 0.12); - } - - .epr-aside-label { - position: relative; - font-size: 12px; - font-weight: 800; - letter-spacing: 1.7px; - text-transform: uppercase; - color: rgba(17, 17, 17, 0.4); - margin: 0 0 -6px 0; - } - - .epr-aside-gains-list { - position: relative; - list-style: none; - margin: 0; - padding: 0; - display: grid; - gap: 9px; - } - - .epr-aside-gains-list li { - position: relative; - padding-left: 19px; - font-size: 15.5px; - line-height: 1.5; - color: rgba(17, 17, 17, 0.68); - } - - /* Extra .epr-aside prefix raises specificity above the global theme - rule ".logico-front-end ul li:before" (a fontello glyph), so our - clean red dot replaces the inherited checkmark marker — same fix - already established for this exact conflict in LegalDocument.tsx. */ - .epr-aside .epr-aside-gains-list li::before { - content: "" !important; - position: absolute; - left: 2px; - top: 0.62em; - width: 5px; - height: 5px; - border-radius: 50%; - background: #c8102e; - font-size: 0; - } - - .epr-aside-final { - position: relative; - max-width: 30ch; - font-size: clamp(17px, 1.7vw, 20px); - font-weight: 700; - line-height: 1.5; - letter-spacing: -0.01em; - color: #111111; - margin: 0; - } - - .epr-aside-final em { - font-style: normal; - color: #c8102e; - } - - .epr-list { - display: grid; - gap: clamp(28px, 4vw, 52px); - } - - .epr-row { - display: grid; - grid-template-columns: 110px minmax(0, 1fr); - gap: clamp(22px, 4vw, 58px); - padding-bottom: clamp(28px, 4vw, 52px); - border-bottom: 1px solid rgba(17, 17, 17, 0.14); - } - - .epr-row:nth-child(even) { - margin-left: clamp(0px, 7vw, 96px); - } - - .epr-row-index { - font-size: clamp(38px, 4.2vw, 62px); - font-weight: 900; - line-height: 1; - letter-spacing: -0.05em; - color: #c8102e; - } - - .epr-row-featured { - padding: clamp(28px, 4vw, 44px) clamp(24px, 3vw, 40px); - background: #09090b; - border-radius: 22px; - border-bottom: none; - margin-bottom: clamp(28px, 4vw, 52px); - } - - .epr-row-featured .epr-row-index { - color: rgba(255, 255, 255, 0.22); - -webkit-text-stroke: 1.5px rgba(255, 255, 255, 0.5); - } - - .epr-row-featured .epr-row-title { - font-size: clamp(32px, 4vw, 64px) !important; - color: #ffffff !important; - } - - .epr-row-featured .epr-row-desc { - color: rgba(255, 255, 255, 0.62); - } - - .epr-row-flag { - display: inline-block; - font-size: 12px; - font-weight: 800; - letter-spacing: 1.3px; - text-transform: uppercase; - color: #ffffff; - background: #c8102e; - padding: 6px 14px; - border-radius: 100px; - margin-bottom: 16px; - } - - .epr-row-type { - display: block; - font-size: 12px; - font-weight: 800; - letter-spacing: 1.7px; - text-transform: uppercase; - color: rgba(17, 17, 17, 0.42); - margin-bottom: 14px; - } - - .epr-row-featured .epr-row-type { - color: rgba(255, 255, 255, 0.42); - } - - .epr-row-title { - font-size: clamp(28px, 3.4vw, 52px) !important; - font-weight: 800 !important; - letter-spacing: -0.045em !important; - line-height: 1.02 !important; - text-transform: uppercase !important; - color: #111111 !important; - margin: 0 0 14px 0; - } - - .epr-row-desc { - max-width: 660px; - font-size: 15.5px; - line-height: 1.65; - color: rgba(17, 17, 17, 0.58); - margin: 0; - } - - .epr-cta { - margin-top: clamp(48px, 6vw, 72px); - } - - .epr-cta-link { - display: inline-flex; - align-items: center; - gap: 10px; - font-size: 15px; - font-weight: 800; - color: #111111 !important; - text-decoration: none !important; - border-bottom: 1.5px solid rgba(17, 17, 17, 0.2); - padding-bottom: 5px; - transition: border-color 0.3s ease, color 0.3s ease; - } - - .epr-cta-link:hover { - color: #c8102e !important; - border-color: #c8102e; - } - - /* Laptop: sticky stays enabled, just a narrower gutter. */ - @media (max-width: 1180px) { - .epr-stage { grid-template-columns: minmax(220px, 0.34fr) minmax(0, 0.66fr); gap: clamp(28px, 4vw, 46px); } - .epr-aside { min-height: 420px; } - .epr-row:nth-child(even) { margin-left: 0; } - } - - /* Tablet: sticky disabled — the aside scrolls in normal flow instead - of pinning, since there's no longer enough vertical runway next to - the (now narrower, shorter) program list for pinning to read well. - The wrapper no longer needs to stretch once its child isn't sticky. */ - @media (max-width: 1023px) { - .epr-aside-wrap { - align-self: start; - } - .epr-aside { - position: relative; - top: auto; - } - } - - @media (max-width: 767px) { - .epr-stage { grid-template-columns: 1fr; } - .epr-aside { - position: relative; - top: auto; - min-height: 300px; - padding-top: 4px; - padding-bottom: clamp(24px, 7vw, 38px); - } - .epr-aside-map { - inset: -8% -18% 0 -20%; - opacity: 0.18; - } - .epr-aside-content { - gap: 20px; - } - .epr-aside-num { - font-size: clamp(128px, 34vw, 180px); - } - .epr-aside-copy { - max-width: 11ch; - font-size: clamp(34px, 10vw, 48px); - } - .epr-aside-desc { - max-width: 32ch; - font-size: 14.5px; - } - .epr-aside-gains-list li { - font-size: 14.5px; - } - .epr-aside-final { - max-width: 28ch; - font-size: 16.5px; - } - } - - @media (max-width: 640px) { - .epr-section { padding-top: 54px; padding-bottom: 54px; } - .epr-title { - font-size: clamp(34px, 10vw, 40px) !important; - letter-spacing: -0.045em !important; - overflow-wrap: anywhere; - } - .epr-row-title { - font-size: clamp(27px, 8.5vw, 36px) !important; - overflow-wrap: anywhere; - } - .epr-row { grid-template-columns: 1fr; gap: 12px; } - } - 11:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$26"}}],"$L27"] -28:Te98, - .eim-section { - position: relative; - width: calc(100% - 40px); - margin: clamp(24px, 4vw, 40px) auto; - border-radius: 28px; - overflow: hidden; - box-sizing: border-box; - background: #09090b; - padding: clamp(64px, 8vw, 100px) clamp(24px, 5vw, 48px); - } - - .eim-inner { - position: relative; - z-index: 1; - max-width: 1380px; - margin: 0 auto; - } - - .eim-eyebrow { - font-size: 13px; - font-weight: 800; - letter-spacing: 2.5px; - text-transform: uppercase; - color: #c8102e; - margin-bottom: 20px; - } - - .eim-title { - font-size: clamp(28px, 3.4vw, 46px) !important; - font-weight: 800 !important; - letter-spacing: -0.03em !important; - line-height: 1.15 !important; - text-transform: none !important; - color: #ffffff !important; - margin: 0 0 clamp(32px, 4vw, 48px) 0; - } - - .eim-divider { - border: none; - border-top: 1px solid rgba(255, 255, 255, 0.12); - margin: 0 0 clamp(40px, 5vw, 56px) 0; - } - - .eim-hero-row { - display: flex; - align-items: flex-end; - gap: clamp(20px, 3vw, 36px); - margin-bottom: clamp(48px, 6vw, 72px); - } - - .eim-hero-num { - font-size: clamp(90px, 13vw, 190px); - font-weight: 800; - line-height: 0.85; - letter-spacing: -0.03em; - color: transparent; - -webkit-text-stroke: 2px #c8102e; - } - - .eim-hero-label { - font-size: 13px; - font-weight: 700; - letter-spacing: 1.5px; - text-transform: uppercase; - color: rgba(255, 255, 255, 0.55); - max-width: 90px; - line-height: 1.4; - padding-bottom: clamp(12px, 1.5vw, 24px); - } - - .eim-divider-2 { - border: none; - border-top: 1px solid rgba(255, 255, 255, 0.12); - margin: 0 0 clamp(40px, 5vw, 56px) 0; - } - - .eim-secondary-row { - display: grid; - grid-template-columns: repeat(4, minmax(0, 1fr)); - } - - .eim-secondary-item { - padding-right: 24px; - border-left: 1px solid rgba(255, 255, 255, 0.12); - padding-left: 24px; - } - - .eim-secondary-item:first-child { - border-left: none; - padding-left: 0; - } - - .eim-secondary-num { - display: block; - font-size: clamp(32px, 3vw, 44px); - font-weight: 800; - color: #ff5470; - letter-spacing: -0.02em; - margin-bottom: 10px; - } - - .eim-secondary-label { - font-size: 13px; - font-weight: 600; - color: rgba(255, 255, 255, 0.5); - line-height: 1.4; - } - - .eim-copy { - max-width: 720px; - margin-top: clamp(48px, 6vw, 72px); - font-size: 15.5px; - line-height: 1.7; - color: rgba(255, 255, 255, 0.55); - } - - @media (max-width: 1024px) { - .eim-section { width: calc(100% - 24px); border-radius: 22px; } - } - - @media (max-width: 700px) { - .eim-hero-row { align-items: flex-start; flex-direction: column; gap: 12px; } - .eim-hero-label { padding-bottom: 0; max-width: none; } - .eim-secondary-row { grid-template-columns: repeat(2, minmax(0, 1fr)); row-gap: 28px; } - .eim-secondary-item:nth-child(3) { border-left: none; padding-left: 0; } - } - - @media (max-width: 460px) { - .eim-section { padding-top: 48px; padding-bottom: 48px; } - } - 12:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$28"}}],"$L29"] -2a:T1573, - .ehw-section { - background: #ffffff; - padding: var(--space-section-lg, 80px) 0 calc(var(--space-section-lg, 80px) + 32px) 0; - overflow: hidden; - } - - .ehw-inner { - max-width: 1380px; - margin: 0 auto; - } - - .ehw-head { - display: flex; - flex-direction: column; - align-items: flex-start; - margin-bottom: clamp(126px, calc(7vw + 60px), 172px); - } - - .ehw-head-reveal { - width: 100%; - } - - .ehw-divider { - width: 100%; - height: 1px; - margin: 18px 0 clamp(24px, 3.5vw, 40px) 0; - border: none; - background-color: rgba(17, 17, 17, 0.14); - } - - .ehw-eyebrow { - font-size: 13px; - font-weight: 800; - letter-spacing: 2.4px; - text-transform: uppercase; - color: rgba(17, 17, 17, 0.42); - } - - .ehw-title { - max-width: 820px; - font-size: clamp(32px, 4vw, 54px) !important; - font-weight: 800 !important; - letter-spacing: -0.03em !important; - line-height: 1.08 !important; - text-transform: none !important; - color: #111111 !important; - margin: 0 !important; - } - - /* ---------------------------------------------------------------- - Premium editorial process row: five milestones in a single - sequence, separated by thin hairline dividers (no cards, no - shadows, no boxed containers). One flex-wrap sequence with - responsive flex-basis handles the composition at every size — - 5-across on desktop, 3 + 2 (centered) on tablet, a single - vertical column on mobile — from one shared markup. - ---------------------------------------------------------------- */ - .ehw-sequence { - display: flex; - flex-wrap: wrap; - justify-content: center; - --ehw-gap: clamp(24px, 2.6vw, 48px); - column-gap: var(--ehw-gap); - row-gap: clamp(48px, 6vw, 84px); - } - - .ehw-step { - position: relative; - flex: 0 1 calc((100% - 4 * var(--ehw-gap)) / 5); - min-width: 168px; - padding-left: clamp(20px, 2vw, 32px); - border-left: 1px solid rgba(17, 17, 17, 0.14); - transition: border-color 0.3s ease; - } - - .ehw-step:first-child { - border-left: none; - padding-left: 0; - } - - .ehw-step:hover { - border-left-color: rgba(200, 16, 46, 0.4); - } - - .ehw-step-num { - font-size: clamp(48px, 4.6vw, 78px); - font-weight: 900; - line-height: 0.84; - letter-spacing: -0.03em; - color: transparent; - -webkit-text-stroke: 1.5px rgba(17, 17, 17, 0.24); - margin: 0 0 18px 0; - transition: -webkit-text-stroke-color 0.3s ease; - } - - .ehw-step.is-accent .ehw-step-num { - -webkit-text-stroke: 1.5px rgba(200, 16, 46, 0.58); - } - - .ehw-step-kicker { - display: flex; - align-items: center; - gap: 7px; - margin-bottom: 18px; - } - - .ehw-step-kicker svg { - width: 13px; - height: 13px; - color: rgba(17, 17, 17, 0.36); - flex-shrink: 0; - } - - .ehw-step-kicker span { - font-size: 11px; - font-weight: 800; - letter-spacing: 2px; - text-transform: uppercase; - color: rgba(17, 17, 17, 0.4); - } - - .ehw-step.is-accent .ehw-step-kicker svg, - .ehw-step.is-accent .ehw-step-kicker span { - color: #c8102e; - } - - .ehw-step-title { - font-size: clamp(18px, 1.4vw, 22px) !important; - font-weight: 800 !important; - letter-spacing: -0.02em !important; - line-height: 1.2 !important; - text-transform: none !important; - color: #111111 !important; - margin: 0 0 22px 0; - } - - .ehw-step-desc { - max-width: 27ch; - font-size: 14px; - line-height: 1.6; - color: rgba(17, 17, 17, 0.55); - margin: 0; - } - - /* Tablet: 3 + 2, centered — sever the divider at the start of each row. */ - @media (max-width: 1100px) { - .ehw-step { - flex-basis: calc((100% - 2 * var(--ehw-gap)) / 3); - } - .ehw-step:nth-child(4) { - border-left: none; - padding-left: 0; - } - } - - /* Mobile: single column — dividers rotate from vertical to horizontal. */ - @media (max-width: 640px) { - .ehw-sequence { - row-gap: 0; - } - .ehw-step { - flex-basis: 100%; - padding-left: 0; - padding-top: clamp(28px, 8vw, 38px); - border-left: none; - border-top: 1px solid rgba(17, 17, 17, 0.14); - } - .ehw-step:first-child { - padding-top: 0; - border-top: none; - } - .ehw-step:nth-child(4) { - border-top: 1px solid rgba(17, 17, 17, 0.14); - } - .ehw-step:hover { - border-left-color: transparent; - } - .ehw-step-num { - font-size: clamp(44px, 13vw, 56px); - } - } - - @media (max-width: 480px) { - .ehw-section { padding-top: 48px; padding-bottom: 68px; } - } - 13:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$2a"}}],"$L2b"] -2c:T1bff, - .est-section { - position: relative; - background: #ffffff; - padding-top: clamp(24px, 3vw, 48px); - padding-bottom: clamp(78px, 9vw, 132px); - overflow: hidden; - } - - .est-inner { - max-width: 1380px; - margin: 0 auto; - } - - .est-head { - display: flex; - flex-direction: column; - align-items: flex-start; - margin-bottom: clamp(54px, 7vw, 86px); - } - - .est-head-reveal { - width: 100%; - } - - .est-divider { - width: 100%; - height: 1px; - margin: 18px 0 clamp(24px, 3.5vw, 40px) 0; - border: none; - background-color: rgba(17, 17, 17, 0.14); - } - - .est-eyebrow { - font-size: 13px; - font-weight: 800; - letter-spacing: 2.4px; - text-transform: uppercase; - color: rgba(17, 17, 17, 0.42); - } - - .est-title { - max-width: 940px; - font-size: clamp(42px, 6.3vw, 90px) !important; - font-weight: 800 !important; - letter-spacing: -0.055em !important; - line-height: 0.98 !important; - text-transform: uppercase !important; - color: #111111 !important; - margin: 0; - } - - .est-feature { - display: grid; - grid-template-columns: minmax(0, 0.94fr) minmax(340px, 0.64fr); - gap: clamp(28px, 4vw, 62px); - align-items: stretch; - margin-bottom: clamp(44px, 6vw, 76px); - } - - .est-photo { - position: relative; - min-height: clamp(460px, 48vw, 680px); - border-radius: 26px; - overflow: hidden; - background: #09090b; - } - - .est-photo img { - object-fit: cover; - object-position: center; - } - - .est-photo::after { - content: ""; - position: absolute; - inset: 0; - background: linear-gradient(180deg, rgba(9, 9, 11, 0) 34%, rgba(9, 9, 11, 0.72) 100%); - pointer-events: none; - } - - .est-photo-caption { - position: absolute; - left: clamp(24px, 3vw, 42px); - right: clamp(24px, 3vw, 42px); - bottom: clamp(24px, 3vw, 42px); - z-index: 1; - color: #ffffff; - } - - .est-photo-caption span { - display: block; - font-size: 12px; - font-weight: 800; - letter-spacing: 1.7px; - text-transform: uppercase; - color: rgba(255, 255, 255, 0.6); - margin-bottom: 8px; - } - - .est-photo-caption strong { - display: block; - font-size: clamp(24px, 3vw, 42px); - font-weight: 900; - line-height: 1.02; - letter-spacing: -0.04em; - } - - .est-copy { - border-radius: 26px; - background: #09090b; - color: #ffffff; - padding: clamp(34px, 5vw, 62px); - display: flex; - flex-direction: column; - justify-content: space-between; - overflow: hidden; - position: relative; - } - - .est-copy::before { - content: ""; - position: absolute; - width: 320px; - height: 320px; - right: -120px; - top: -120px; - background: radial-gradient(circle, rgba(200, 16, 46, 0.42), transparent 68%); - pointer-events: none; - } - - .est-quote-mark { - position: relative; - font-family: Georgia, serif; - font-size: 92px; - line-height: 0.8; - color: #c8102e; - display: block; - margin-bottom: 20px; - } - - .est-quote-text { - position: relative; - font-size: clamp(25px, 3vw, 44px); - font-weight: 800; - line-height: 1.12; - letter-spacing: -0.04em; - color: #ffffff; - margin: 0 0 28px 0; - } - - .est-narrative { - position: relative; - font-size: 15.5px; - line-height: 1.68; - color: rgba(255, 255, 255, 0.66); - margin: 0; - max-width: 46ch; - } - - .est-person { - position: relative; - padding-top: clamp(38px, 5vw, 64px); - } - - .est-person-name { - font-size: 18px; - font-weight: 900; - color: #ffffff; - } - - .est-person-role { - font-size: 13.5px; - color: rgba(255, 255, 255, 0.52); - margin-top: 3px; - } - - .est-list-label { - font-size: 12px; - font-weight: 800; - letter-spacing: 1.8px; - text-transform: uppercase; - color: rgba(17, 17, 17, 0.42); - padding-top: clamp(24px, 3vw, 38px); - border-top: 1px solid rgba(17, 17, 17, 0.14); - margin-bottom: clamp(20px, 3vw, 30px); - } - - .est-list { - display: flex; - gap: 18px; - overflow-x: auto; - scroll-snap-type: x mandatory; - padding-bottom: 12px; - margin-bottom: clamp(6px, 1vw, 10px); - -webkit-overflow-scrolling: touch; - } - - .est-list::-webkit-scrollbar { - height: 4px; - } - - .est-list::-webkit-scrollbar-thumb { - background: rgba(17, 17, 17, 0.18); - border-radius: 100px; - } - - .est-row { - scroll-snap-align: start; - flex: 0 0 clamp(260px, 30vw, 340px); - min-height: 220px; - padding: clamp(24px, 2.6vw, 32px); - border: 1px solid rgba(17, 17, 17, 0.14); - border-radius: 20px; - display: flex; - flex-direction: column; - justify-content: space-between; - transition: border-color 0.3s ease, transform 0.3s ease; - } - - .est-row:hover { - border-color: rgba(200, 16, 46, 0.4); - transform: translateY(-4px); - } - - .est-row-name { - font-size: 20px; - font-weight: 900; - color: #111111; - } - - .est-row-role { - font-size: 13px; - font-weight: 800; - letter-spacing: 1.4px; - text-transform: uppercase; - color: #c8102e; - margin-top: 6px; - } - - .est-row-line { - font-size: 15px; - line-height: 1.6; - color: rgba(17, 17, 17, 0.62); - margin: 28px 0 0; - } - - @media (max-width: 1000px) { - .est-head, - .est-feature { grid-template-columns: 1fr; } - .est-row { - min-height: 0; - flex-basis: 78vw; - } - } - - @media (max-width: 640px) { - .est-section { padding-top: 54px; padding-bottom: 54px; } - .est-title { - font-size: clamp(34px, 10vw, 40px) !important; - letter-spacing: -0.045em !important; - overflow-wrap: anywhere; - } - .est-quote-text { - font-size: clamp(25px, 8vw, 34px); - overflow-wrap: anywhere; - } - .est-photo, - .est-copy { border-radius: 20px; } - .est-photo { min-height: 420px; } - } - 14:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$2c"}}],"$L2d"] -2e:T16dc, - .epn-section { - position: relative; - width: calc(100% - 40px); - margin: clamp(24px, 4vw, 40px) auto; - border-radius: 28px; - overflow: hidden; - box-sizing: border-box; - background: #09090b; - padding: clamp(68px, 8vw, 112px) 0; - } - - .epn-section::before { - content: ""; - position: absolute; - inset: 0; - background: - linear-gradient(120deg, rgba(9, 9, 11, 0.98) 0%, rgba(9, 9, 11, 0.88) 54%, rgba(192, 18, 39, 0.18) 100%), - url("/images/wings-heroslider3.png"); - background-size: cover; - background-position: center 70%; - opacity: 1; - } - - .epn-inner { - position: relative; - z-index: 1; - max-width: 1380px; - margin: 0 auto; - } - - .epn-head { - display: flex; - flex-direction: column; - align-items: flex-start; - margin-bottom: clamp(50px, 7vw, 84px); - } - - .epn-head-reveal { - width: 100%; - } - - .epn-divider { - width: 100%; - height: 1px; - margin: 18px 0 clamp(24px, 3.5vw, 40px) 0; - border: none; - background-color: rgba(255, 255, 255, 0.16); - } - - .epn-eyebrow { - font-size: 13px; - font-weight: 800; - letter-spacing: 2.5px; - text-transform: uppercase; - color: rgba(255, 255, 255, 0.52); - } - - .epn-title { - max-width: 930px; - font-size: clamp(42px, 6.3vw, 90px) !important; - font-weight: 800 !important; - letter-spacing: -0.055em !important; - line-height: 0.98 !important; - text-transform: uppercase !important; - color: #ffffff !important; - margin: 0; - } - - .epn-title em { - color: #ff5470; - font-style: normal; - } - - .epn-body { - display: grid; - grid-template-columns: minmax(280px, 0.46fr) minmax(0, 1fr); - gap: clamp(32px, 5vw, 72px); - align-items: stretch; - } - - .epn-manifesto { - border-left: 4px solid #c8102e; - padding-left: clamp(22px, 3vw, 36px); - align-self: start; - } - - .epn-intro { - font-size: clamp(22px, 2.5vw, 36px); - font-weight: 800; - line-height: 1.12; - letter-spacing: -0.035em; - color: #ffffff; - margin: 0 0 22px; - } - - .epn-note { - font-size: 15.5px; - line-height: 1.68; - color: rgba(255, 255, 255, 0.62); - margin: 0; - max-width: 38ch; - } - - .epn-grid { - display: flex; - flex-direction: column; - border-top: 1px solid rgba(255, 255, 255, 0.16); - } - - .epn-card { - position: relative; - display: grid; - grid-template-columns: 70px minmax(0, 1fr) 32px; - align-items: center; - gap: clamp(18px, 3vw, 40px); - padding: clamp(22px, 2.6vw, 32px) clamp(4px, 1vw, 16px); - border-bottom: 1px solid rgba(255, 255, 255, 0.16); - border-left: 2px solid transparent; - transition: border-color 0.3s ease, padding-left 0.3s ease, background-color 0.3s ease; - } - - .epn-card:hover { - border-left-color: #c8102e; - background: rgba(200, 16, 46, 0.06); - padding-left: clamp(20px, 2.5vw, 32px); - } - - .epn-card-index { - font-size: 15px; - font-weight: 900; - color: rgba(255, 255, 255, 0.35); - } - - .epn-card-title { - font-size: clamp(22px, 2.2vw, 30px) !important; - font-weight: 900 !important; - line-height: 1.1 !important; - letter-spacing: -0.03em !important; - text-transform: none !important; - color: #ffffff !important; - margin: 0 0 8px; - } - - .epn-card-desc { - max-width: 46ch; - font-size: 14.5px; - line-height: 1.6; - color: rgba(255, 255, 255, 0.58); - margin: 0; - } - - .epn-card-arrow { - display: flex; - color: rgba(255, 255, 255, 0.3); - transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1), color 0.3s ease; - } - - .epn-card:hover .epn-card-arrow { - transform: translateX(4px); - color: #ff5470; - } - - .epn-cta { - margin-top: clamp(42px, 5vw, 64px); - } - - .epn-cta-btn { - display: inline-flex; - align-items: center; - gap: 10px; - padding: 16px 36px; - border-radius: 100px; - background: #c01227; - color: #ffffff !important; - font-weight: 800; - font-size: 15px; - text-decoration: none !important; - transition: transform 0.35s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.35s ease; - } - - .epn-cta-btn:hover { - transform: translateY(-3px); - box-shadow: 0 14px 30px rgba(192, 18, 39, 0.35); - } - - @media (max-width: 1024px) { - .epn-section { width: calc(100% - 24px); border-radius: 22px; } - } - - @media (max-width: 900px) { - .epn-head, - .epn-body { grid-template-columns: 1fr; } - } - - @media (max-width: 700px) { - .epn-title { - font-size: clamp(34px, 10vw, 40px) !important; - letter-spacing: -0.045em !important; - overflow-wrap: anywhere; - } - .epn-card { - grid-template-columns: 44px minmax(0, 1fr); - } - .epn-card-arrow { display: none; } - } - - @media (max-width: 460px) { - .epn-section { padding-top: 54px; padding-bottom: 54px; } - } - 15:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$2e"}}],"$L2f"] -30:Tdad, - .emp-cta-wrap { - width: calc(100% - 40px); - margin: clamp(24px, 4vw, 40px) auto clamp(40px, 5vw, 64px); - } - - .emp-cta { - position: relative; - overflow: hidden; - border-radius: 28px; - min-height: clamp(480px, 48vw, 680px); - background: #09090b; - display: flex; - align-items: flex-end; - } - - .emp-cta::before { - content: ""; - position: absolute; - inset: 0; - background-image: - linear-gradient(180deg, rgba(9, 9, 11, 0.18) 0%, rgba(9, 9, 11, 0.52) 48%, rgba(9, 9, 11, 0.96) 100%), - linear-gradient(90deg, rgba(9, 9, 11, 0.88) 0%, rgba(9, 9, 11, 0.35) 58%, rgba(9, 9, 11, 0.12) 100%), - url("/images/bg-header-women.webp"); - background-size: cover; - background-position: center; - transform: scale(1.02); - } - - .emp-cta-inner { - position: relative; - z-index: 1; - max-width: 1380px; - width: 100%; - margin: 0 auto; - padding: clamp(46px, 7vw, 88px) clamp(24px, 5vw, 64px); - box-sizing: border-box; - } - - .emp-cta-recap { - display: flex; - gap: clamp(28px, 4vw, 52px); - margin-bottom: clamp(28px, 4vw, 44px); - padding-bottom: clamp(24px, 3vw, 36px); - border-bottom: 1px solid rgba(255, 255, 255, 0.16); - } - - .emp-cta-recap-item { - display: flex; - align-items: baseline; - gap: 10px; - } - - .emp-cta-recap-num { - font-size: clamp(22px, 2.4vw, 32px); - font-weight: 900; - letter-spacing: -0.02em; - color: transparent; - -webkit-text-stroke: 1.3px rgba(255, 255, 255, 0.85); - } - - .emp-cta-recap-label { - font-size: 12px; - font-weight: 700; - letter-spacing: 0.6px; - color: rgba(255, 255, 255, 0.5); - } - - .emp-cta-kicker { - font-size: 13px; - font-weight: 900; - letter-spacing: 2.4px; - text-transform: uppercase; - color: #ff5470; - margin-bottom: 22px; - } - - .emp-cta-title { - max-width: 980px; - color: #ffffff !important; - font-size: clamp(44px, 7vw, 108px) !important; - font-weight: 900 !important; - line-height: 0.95 !important; - letter-spacing: -0.06em !important; - text-transform: uppercase !important; - margin: 0 0 clamp(24px, 3vw, 34px); - } - - .emp-cta-title em { - color: #ff5470; - font-style: normal; - } - - .emp-cta-bottom { - display: block; - max-width: 1120px; - } - - .emp-cta-sub { - max-width: 620px; - font-size: 16px; - line-height: 1.68; - color: rgba(255, 255, 255, 0.68); - margin: 0; - } - - @media (max-width: 1024px) { - .emp-cta-wrap { width: calc(100% - 24px); } - .emp-cta { border-radius: 22px; } - } - - @media (max-width: 760px) { - .emp-cta { min-height: 600px; } - .emp-cta::before { background-position: 76% center; } - .emp-cta-title { - font-size: clamp(36px, 11vw, 44px) !important; - letter-spacing: -0.05em !important; - overflow-wrap: anywhere; - } - .emp-cta-recap { flex-wrap: wrap; row-gap: 14px; } - } - 16:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$30"}}],"$L31"] -17:["$","script","script-0",{"src":"/_next/static/chunks/0vzdvje64yndv.js","async":true,"nonce":"$undefined"}] -18:["$","$L32",null,{"children":["$","$33",null,{"name":"Next.MetadataOutlet","children":"$@34"}]}] -35:[] -19:"$W35" -1a:["$","$1","h",{"children":[null,["$","$L36",null,{"children":"$L37"}],["$","div",null,{"hidden":true,"children":["$","$L38",null,{"children":["$","$33",null,{"name":"Next.Metadata","children":"$L39"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] -1c:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] -3a:I[5074,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0vzdvje64yndv.js"],"default"] -41:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0vzdvje64yndv.js"],"CountUp"] -42:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0vzdvje64yndv.js"],"StaggerChildren"] -43:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0vzdvje64yndv.js"],"Image"] -20:["$","section",null,{"className":"ev-section","id":"wings-empowerment-vision","children":[["$","div",null,{"className":"ev-map","aria-hidden":"true","children":["$","$L3a",null,{}]}],["$","div",null,{"className":"dm-section-container","children":["$","div",null,{"className":"ev-inner","children":[["$","$L1d",null,{"delay":0.05,"duration":0.7,"yOffset":20,"children":[["$","p",null,{"className":"ev-eyebrow","children":"/ Our Vision /"}],["$","hr",null,{"className":"ev-divider"}]]}],["$","$L1d",null,{"delay":0.12,"duration":0.85,"yOffset":30,"children":["$","h2",null,{"className":"ev-title","children":"Women Own The Future."}]}],["$","div",null,{"className":"ev-columns","children":[["$","$L1d",null,{"delay":0.18,"duration":0.8,"yOffset":25,"children":["$","p",null,{"className":"ev-statement","children":"A logistics ecosystem where women don’t just participate — they own, build, and lead."}]}],["$","$L1d",null,{"delay":0.26,"duration":0.8,"yOffset":25,"className":"ev-support","children":[["$","div",null,{"className":"ev-block","children":[["$","p",null,{"className":"ev-block-label","children":"The vision"}],["$","p",null,{"className":"ev-lead","children":"We are building an entrepreneurial ecosystem where women launch enterprises, scale operations, and shape the future of logistics from the inside."}]]}],["$","div",null,{"className":"ev-block","children":[["$","p",null,{"className":"ev-block-label","children":"Why it matters"}],["$","p",null,{"className":"ev-note","children":"Industries transform when founders emerge from every corner. Women-led enterprises bring fresh perspective, operational resilience, and long-term economic impact to logistics."}]]}],["$","div",null,{"className":"ev-block","children":[["$","p",null,{"className":"ev-block-label","children":"How Wings contributes"}],["$","p",null,{"className":"ev-note","children":"Wings provides the infrastructure — strategic partnerships, funding access, founder networks, and industry connections — that turns ambition into enterprise."}]]}]]}]]}]]}]}]]}] -22:["$","$L1d",null,{"delay":0.05,"duration":0.85,"yOffset":25,"children":[["$","div",null,{"className":"esy-eyebrow","children":"/ Our Approach /"}],["$","p",null,{"className":"esy-statement","children":["Not a program on a brochure. ",["$","em",null,{"children":"An ecosystem women can build in."}]]}]]}] -23:["$","$L1d",null,{"delay":0.15,"duration":0.8,"yOffset":25,"className":"esy-side","children":[["$","span",null,{"className":"esy-label","children":"Manifesto"}],["$","p",null,{"className":"esy-pull","children":"A venture that starts with conviction. A network that turns it into momentum."}],["$","p",null,{"className":"esy-sub","children":"Wings is designed around the moments that define a founder: the first partnership signed, the first client won, the first team hired, the first enterprise scaled."}]]}] -25:["$","div",null,{"id":"women-entrepreneurship","className":"elementor-element elementor-element-bbc6760 e-con-full e-flex cut-corner-no sticky-container-off e-con e-parent","data-id":"bbc6760","data-element_type":"container","data-e-type":"container","style":{"backgroundColor":"#1f1f1f","width":"calc(100% - 40px)","marginLeft":"20px","marginRight":"20px","borderRadius":"25px"},"children":[["$","div",null,{"className":"elementor-element elementor-element-13a7637 elementor-widget__width-auto elementor-absolute elementor-widget elementor-widget-logico_decorative_block","data-id":"13a7637","data-element_type":"widget","data-e-type":"widget","style":{"position":"absolute"},"children":["$","div",null,{"className":"elementor-widget-container","children":["$","div",null,{"className":"block-decoration animation-enable block-decoration-style-1","children":["$","div",null,{"className":"block-decoration-item"}]}]}]}],["$","div",null,{"style":{"backgroundImage":"url(/images/bg-header-women.webp)"},"className":"elementor-element elementor-element-7da6646 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"7da6646","data-element_type":"container","data-e-type":"container"}],["$","div",null,{"className":"elementor-element elementor-element-8b5d6e6 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"8b5d6e6","data-element_type":"container","data-e-type":"container","children":["$","div",null,{"className":"elementor-element elementor-element-1f766ea e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"1f766ea","data-element_type":"container","data-e-type":"container","children":[["$","div",null,{"className":"elementor-element elementor-element-3b61435 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"3b61435","data-element_type":"container","data-e-type":"container","data-settings":"{\"background_background\":\"classic\"}","children":[["$","div",null,{"className":"elementor-element elementor-element-c364d1c elementor-widget elementor-widget-text-editor","data-id":"c364d1c","data-element_type":"widget","data-e-type":"widget","data-widget_type":"text-editor.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","p",null,{"children":"01"}]}]}],["$","div",null,{"className":"elementor-element elementor-element-239afbb elementor-widget elementor-widget-logico_heading","data-id":"239afbb","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","h5",null,{"className":"logico-title","children":"Women Entrepreneurship"}]}]}],["$","div",null,{"className":"elementor-element elementor-element-0d307dd elementor-widget elementor-widget-text-editor","data-id":"0d307dd","data-element_type":"widget","data-e-type":"widget","data-widget_type":"text-editor.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","p",null,{"children":"An ecosystem where women build, own, and scale enterprises across logistics."}]}]}]]}],["$","div",null,{"className":"elementor-element elementor-element-5aea22e e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"5aea22e","data-element_type":"container","data-e-type":"container","data-settings":"{\"background_background\":\"classic\"}","children":["$","div",null,{"className":"elementor-element elementor-element-46b9ffa elementor-widget elementor-widget-logico_button","data-id":"46b9ffa","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_button.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","div",null,{"className":"button-widget","children":["$","div",null,{"className":"button-container","children":["$","a",null,{"href":"#wings-empowerment-programs","className":"logico-small-button","children":["Explore the ecosystem",["$","svg",null,{"viewBox":"0 0 13 20","children":"$L3b"}]]}]}]}]}]}]}]]}]}],"$L3c"]}] -27:["$","section",null,{"className":"epr-section","id":"wings-empowerment-programs","children":["$","div",null,{"className":"dm-section-container","children":["$","div",null,{"className":"epr-inner","children":[["$","div",null,{"className":"epr-head","children":[["$","$L1d",null,{"delay":0.05,"duration":0.75,"yOffset":20,"className":"epr-head-reveal","children":[["$","div",null,{"className":"epr-eyebrow","children":"/ Entrepreneurship Pillars /"}],["$","hr",null,{"className":"epr-divider"}]]}],["$","$L1d",null,{"delay":0.1,"duration":0.85,"yOffset":24,"children":["$","h2",null,{"className":"epr-title","children":"Every pillar is built around ownership."}]}]]}],["$","div",null,{"className":"epr-stage","children":[["$","div",null,{"className":"epr-aside-wrap","children":["$","aside",null,{"className":"epr-aside","children":[["$","div",null,{"className":"epr-aside-map","aria-hidden":"true","children":["$","$L3a",null,{}]}],["$","$L1d",null,{"delay":0.05,"duration":0.8,"yOffset":24,"className":"epr-aside-content","children":[["$","div",null,{"className":"epr-aside-num","children":"05"}],["$","p",null,{"className":"epr-aside-copy","children":["Building tomorrow’s ",["$","em",null,{"children":"women entrepreneurs."}]]}],["$","p",null,{"className":"epr-aside-desc","children":"Every enterprise starts with one decision. Our pillars move women from idea to ownership through mentorship, real industry partnerships, and hands-on venture building across the logistics ecosystem."}],["$","hr",null,{"className":"epr-aside-divider"}],["$","div",null,{"className":"epr-aside-label","children":"Journey Summary"}],["$","p",null,{"className":"epr-aside-desc","children":"Each pillar builds on the one before it — moving founders from validating an idea, to forming partnerships, to receiving hands-on guidance, to growing a sustainable logistics business."}],["$","div",null,{"className":"epr-aside-label","children":"What Participants Gain"}],["$","ul",null,{"className":"epr-aside-gains-list","children":[["$","li","Business validation",{"children":"Business validation"}],["$","li","Industry partnerships",{"children":"Industry partnerships"}],["$","li","Founder mentorship",{"children":"Founder mentorship"}],["$","li","Market readiness",{"children":"Market readiness"}],["$","li","Sustainable growth",{"children":"Sustainable growth"}]]}],["$","p",null,{"className":"epr-aside-final","children":["The destination is never just launching a business. It is building ",["$","em",null,{"children":"women-led enterprises that strengthen the logistics ecosystem."}]]}]]}]]}]}],["$","div",null,{"children":[["$","$L1d",null,{"delay":0.1,"duration":0.8,"yOffset":24,"children":["$","div",null,{"className":"epr-list","children":[["$","article","Venture Launchpad",{"className":"epr-row epr-row-featured","children":[["$","div",null,{"className":"epr-row-index","children":"01"}],["$","div",null,{"children":[["$","span",null,{"className":"epr-row-flag","children":"Where most founders begin"}],["$","span",null,{"className":"epr-row-type","children":"Start building"}],["$","h3",null,{"className":"epr-row-title","children":"Venture Launchpad"}],["$","p",null,{"className":"epr-row-desc","children":"Business model validation, market entry strategy, entity formation, and go-to-market execution for women-led logistics enterprises."}]]}]]}],["$","article","Strategic Partnerships",{"className":"epr-row","children":[["$","div",null,{"className":"epr-row-index","children":"02"}],["$","div",null,{"children":[false,["$","span",null,{"className":"epr-row-type","children":"Connect and grow"}],["$","h3",null,{"className":"epr-row-title","children":"Strategic Partnerships"}],["$","p",null,{"className":"epr-row-desc","children":"Direct access to supply chain networks, B2B relationships, industry alliances, and commercial agreements that accelerate growth."}]]}]]}],["$","article","Founder Mentorship",{"className":"epr-row","children":[["$","div",null,{"className":"epr-row-index","children":"03"}],["$","div",null,{"children":[false,["$","span",null,{"className":"epr-row-type","children":"Learn from builders"}],["$","h3",null,{"className":"epr-row-title","children":"Founder Mentorship"}],["$","p",null,{"className":"epr-row-desc","children":"One-on-one guidance from established entrepreneurs, operators, and investors who understand what it takes to scale."}]]}]]}],["$","article","Growth & Scale",{"className":"epr-row","children":["$L3d","$L3e"]}],"$L3f"]}]}],"$L40"]}]]}]]}]}]}] -29:["$","section",null,{"className":"eim-section","id":"wings-empowerment-impact","children":["$","div",null,{"className":"eim-inner dm-section-container","children":[["$","$L1d",null,{"delay":0.05,"duration":0.75,"yOffset":20,"children":[["$","div",null,{"className":"eim-eyebrow","children":"/ Our Impact /"}],["$","h2",null,{"className":"eim-title","children":"Growth we can measure"}]]}],["$","hr",null,{"className":"eim-divider"}],["$","$L1d",null,{"delay":0.08,"duration":0.8,"yOffset":20,"className":"eim-hero-row","children":[["$","span",null,{"className":"eim-hero-num","children":["$","$L41",null,{"end":500,"suffix":"+","duration":2.2,"triggerOnce":true}]}],["$","span",null,{"className":"eim-hero-label","children":"Women-Led Enterprises In The Ecosystem"}]]}],["$","hr",null,{"className":"eim-divider-2"}],["$","$L1d",null,{"delay":0.1,"duration":0.8,"yOffset":20,"children":["$","div",null,{"className":"eim-secondary-row","children":[["$","div","Enterprises Launched",{"className":"eim-secondary-item","children":[["$","span",null,{"className":"eim-secondary-num","children":["$","$L41",null,{"end":100,"suffix":"+","duration":2,"triggerOnce":true}]}],["$","span",null,{"className":"eim-secondary-label","children":"Enterprises Launched"}]]}],["$","div","Industry Partners",{"className":"eim-secondary-item","children":[["$","span",null,{"className":"eim-secondary-num","children":["$","$L41",null,{"end":25,"suffix":"+","duration":2,"triggerOnce":true}]}],["$","span",null,{"className":"eim-secondary-label","children":"Industry Partners"}]]}],["$","div","Cities Active",{"className":"eim-secondary-item","children":[["$","span",null,{"className":"eim-secondary-num","children":["$","$L41",null,{"end":15,"suffix":"+","duration":2,"triggerOnce":true}]}],["$","span",null,{"className":"eim-secondary-label","children":"Cities Active"}]]}],["$","div","In Economic Value Created",{"className":"eim-secondary-item","children":[["$","span",null,{"className":"eim-secondary-num","children":"Millions"}],["$","span",null,{"className":"eim-secondary-label","children":"In Economic Value Created"}]]}]]}]}],["$","$L1d",null,{"delay":0.12,"duration":0.75,"yOffset":20,"className":"eim-copy","children":["$","p",null,{"children":"Every number on this page represents a woman who walked into a room with an idea and walked out with a business. An enterprise launched, a partnership secured, a market entered — each is a marker of real economic impact, not a statistic collected for its own sake."}]}]]}]}] -2b:["$","section",null,{"className":"ehw-section","id":"wings-empowerment-how-it-works","children":["$","div",null,{"className":"dm-section-container","children":["$","div",null,{"className":"ehw-inner","children":[["$","div",null,{"className":"ehw-head","children":[["$","$L1d",null,{"delay":0.05,"duration":0.75,"yOffset":20,"className":"ehw-head-reveal","children":[["$","div",null,{"className":"ehw-eyebrow","children":"/ The Founder Journey /"}],["$","hr",null,{"className":"ehw-divider"}]]}],["$","$L1d",null,{"delay":0.1,"duration":0.85,"yOffset":24,"children":["$","h2",null,{"className":"ehw-title","children":"A clear path, from idea to enterprise"}]}]]}],["$","$L42",null,{"className":"ehw-sequence","stagger":0.12,"duration":0.7,"yOffset":30,"triggerOnce":true,"children":[["$","div","01",{"className":"ehw-step","children":[["$","div",null,{"className":"ehw-step-num","children":"01"}],["$","div",null,{"className":"ehw-step-kicker","aria-hidden":"true","children":[["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M7 17 17 7M9 7h8v8"}]}],["$","span",null,{"children":"Step"}]]}],["$","h3",null,{"className":"ehw-step-title","children":"Apply"}],["$","p",null,{"className":"ehw-step-desc","children":"Submit your venture idea and tell us about your entrepreneurial vision."}]]}],["$","div","02",{"className":"ehw-step","children":[["$","div",null,{"className":"ehw-step-num","children":"02"}],["$","div",null,{"className":"ehw-step-kicker","aria-hidden":"true","children":[["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M7 17 17 7M9 7h8v8"}]}],["$","span",null,{"children":"Step"}]]}],["$","h3",null,{"className":"ehw-step-title","children":"Discovery"}],["$","p",null,{"className":"ehw-step-desc","children":"Identify the right market opportunity and validate your business model."}]]}],["$","div","03",{"className":"ehw-step is-accent","children":[["$","div",null,{"className":"ehw-step-num","children":"03"}],["$","div",null,{"className":"ehw-step-kicker","aria-hidden":"true","children":[["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M7 17 17 7M9 7h8v8"}]}],["$","span",null,{"children":"Step"}]]}],["$","h3",null,{"className":"ehw-step-title","children":"Build"}],["$","p",null,{"className":"ehw-step-desc","children":"Develop your enterprise with ecosystem support, mentorship, and partnerships."}]]}],["$","div","04",{"className":"ehw-step","children":[["$","div",null,{"className":"ehw-step-num","children":"04"}],["$","div",null,{"className":"ehw-step-kicker","aria-hidden":"true","children":[["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M7 17 17 7M9 7h8v8"}]}],["$","span",null,{"children":"Step"}]]}],["$","h3",null,{"className":"ehw-step-title","children":"Launch"}],["$","p",null,{"className":"ehw-step-desc","children":"Go to market with strategic backing, industry connections, and operational infrastructure."}]]}],["$","div","05",{"className":"ehw-step","children":[["$","div",null,{"className":"ehw-step-num","children":"05"}],["$","div",null,{"className":"ehw-step-kicker","aria-hidden":"true","children":[["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M7 17 17 7M9 7h8v8"}]}],["$","span",null,{"children":"Step"}]]}],["$","h3",null,{"className":"ehw-step-title","children":"Scale"}],["$","p",null,{"className":"ehw-step-desc","children":"Grow your team, expand operations, and lead your enterprise to sustainable impact."}]]}]]}]]}]}]}] -2d:["$","section",null,{"className":"est-section","id":"wings-empowerment-stories","children":["$","div",null,{"className":"dm-section-container","children":["$","div",null,{"className":"est-inner","children":[["$","div",null,{"className":"est-head","children":[["$","$L1d",null,{"delay":0.05,"duration":0.75,"yOffset":20,"className":"est-head-reveal","children":[["$","div",null,{"className":"est-eyebrow","children":"/ Women in Motion /"}],["$","hr",null,{"className":"est-divider"}]]}],["$","$L1d",null,{"delay":0.1,"duration":0.85,"yOffset":24,"children":["$","h2",null,{"className":"est-title","children":"Small steps. Lasting careers."}]}]]}],["$","div",null,{"className":"est-feature","children":[["$","$L1d",null,{"delay":0.05,"duration":0.85,"yOffset":24,"className":"est-photo","children":[["$","$L43",null,{"src":"/images/women-hero-slider-3.png","alt":"A Wings program participant on the operations floor at a Doormile logistics hub","fill":true,"sizes":"(max-width: 1000px) 100vw, 58vw","style":{"objectPosition":"80% 22%"}}],["$","div",null,{"className":"est-photo-caption","children":[["$","span",null,{"children":"Wings Participant"}],["$","strong",null,{"children":" building a career, one milestone at a time."}]]}]]}],["$","$L1d",null,{"delay":0.12,"duration":0.85,"yOffset":24,"className":"est-copy","children":["$","div",null,{"children":[["$","span",null,{"className":"est-quote-mark","aria-hidden":"true","children":"“"}],["$","p",null,{"className":"est-quote-text","children":"I came in looking for a way forward. I found the confidence to lead."}],["$","p",null,{"className":"est-narrative","children":"She started with limited exposure to logistics. Through structured training, mentorship, and hands-on experience, she built real operational skills — and now supports other women stepping into the industry."}]]}]}]]}]]}]}]}] -2f:["$","section",null,{"className":"epn-section","id":"wings-empowerment-partners","children":["$","div",null,{"className":"dm-section-container","children":["$","div",null,{"className":"epn-inner","children":[["$","div",null,{"className":"epn-head","children":[["$","$L1d",null,{"delay":0.05,"duration":0.75,"yOffset":20,"className":"epn-head-reveal","children":[["$","div",null,{"className":"epn-eyebrow","children":"/ Collaboration /"}],["$","hr",null,{"className":"epn-divider"}]]}],["$","$L1d",null,{"delay":0.1,"duration":0.85,"yOffset":24,"children":["$","h2",null,{"className":"epn-title","children":["Partnership is how ",["$","em",null,{"children":"ecosystems grow."}]]}]}]]}],["$","div",null,{"className":"epn-body","children":[["$","$L1d",null,{"delay":0.08,"duration":0.8,"yOffset":22,"className":"epn-manifesto","children":[["$","p",null,{"className":"epn-intro","children":"The strongest ecosystems are built by many hands."}],["$","p",null,{"className":"epn-note","children":"Wings partners bring industry access, strategic infrastructure, capital, and networks. Together, we build the foundation women-led enterprises need to thrive."}]]}],["$","$L1d",null,{"delay":0.12,"duration":0.8,"yOffset":22,"children":["$","div",null,{"className":"epn-grid","children":[["$","article","Industry Partners",{"className":"epn-card","children":[["$","span",null,{"className":"epn-card-index","children":"01"}],["$","div",null,{"children":[["$","h3",null,{"className":"epn-card-title","children":"Industry Partners"}],["$","p",null,{"className":"epn-card-desc","children":"Strategic alliances with logistics operators, supply chain leaders, and distribution networks that open doors for women-led enterprises."}]]}],["$","span",null,{"className":"epn-card-arrow","aria-hidden":"true","children":["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M5 12h14M13 6l6 6-6 6"}]}]}]]}],["$","article","Technology Partners",{"className":"epn-card","children":[["$","span",null,{"className":"epn-card-index","children":"02"}],["$","div",null,{"children":[["$","h3",null,{"className":"epn-card-title","children":"Technology Partners"}],["$","p",null,{"className":"epn-card-desc","children":"Platforms, tools, and infrastructure that give founders the operational edge to compete and scale efficiently."}]]}],["$","span",null,{"className":"epn-card-arrow","aria-hidden":"true","children":["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M5 12h14M13 6l6 6-6 6"}]}]}]]}],["$","article","Community Networks",{"className":"epn-card","children":[["$","span",null,{"className":"epn-card-index","children":"03"}],["$","div",null,{"children":[["$","h3",null,{"className":"epn-card-title","children":"Community Networks"}],["$","p",null,{"className":"epn-card-desc","children":"Founder communities, women's business networks, and ecosystem builders who extend reach and amplify impact."}]]}],["$","span",null,{"className":"epn-card-arrow","aria-hidden":"true","children":["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M5 12h14M13 6l6 6-6 6"}]}]}]]}],["$","article","Investment Partners",{"className":"epn-card","children":[["$","span",null,{"className":"epn-card-index","children":"04"}],["$","div",null,{"children":[["$","h3",null,{"className":"epn-card-title","children":"Investment Partners"}],["$","p",null,{"className":"epn-card-desc","children":"Funding access, grant programs, angel networks, and capital partners aligned with women-led enterprise growth."}]]}],["$","span",null,{"className":"epn-card-arrow","aria-hidden":"true","children":["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M5 12h14M13 6l6 6-6 6"}]}]}]]}]]}]}]]}]]}]}]}] -31:["$","div",null,{"className":"emp-cta-wrap","children":["$","section",null,{"className":"emp-cta","aria-labelledby":"empowerment-final-cta","children":["$","div",null,{"className":"emp-cta-inner","children":[["$","div",null,{"className":"emp-cta-recap","children":[["$","div",null,{"className":"emp-cta-recap-item","children":[["$","span",null,{"className":"emp-cta-recap-num","children":"500+"}],["$","span",null,{"className":"emp-cta-recap-label","children":"Women Founders"}]]}],["$","div",null,{"className":"emp-cta-recap-item","children":[["$","span",null,{"className":"emp-cta-recap-num","children":"100+"}],["$","span",null,{"className":"emp-cta-recap-label","children":"Enterprises Launched"}]]}],["$","div",null,{"className":"emp-cta-recap-item","children":[["$","span",null,{"className":"emp-cta-recap-num","children":"25+"}],["$","span",null,{"className":"emp-cta-recap-label","children":"Industry Partners"}]]}]]}],["$","div",null,{"className":"emp-cta-kicker","children":"/ Build the next mile /"}],["$","h2",null,{"className":"emp-cta-title","id":"empowerment-final-cta","children":["Build what’s ",["$","em",null,{"children":"next."}]]}],["$","div",null,{"className":"emp-cta-bottom","children":["$","p",null,{"className":"emp-cta-sub","children":"Join Doormile Wings in building the entrepreneurial ecosystem where women launch, grow, and lead enterprises that create lasting value across logistics."}]}]]}]}]}] -47:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0vzdvje64yndv.js"],""] -3b:["$","polyline",null,{"points":"0.5 19.5 3 19.5 12.5 10 3 0.5"}] -3c:["$","div",null,{"className":"elementor-element elementor-element-b6e14bd e-flex e-con-boxed cut-corner-no sticky-container-off e-con e-child","data-id":"b6e14bd","data-element_type":"container","data-e-type":"container","data-settings":"{\"background_background\":\"classic\"}","children":[["$","div",null,{"className":"ws-map","aria-hidden":"true","children":["$","$L3a",null,{}]}],["$","div",null,{"className":"e-con-inner","children":["$","div",null,{"className":"elementor-element elementor-element-90cc867 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"90cc867","data-element_type":"container","data-e-type":"container","children":[["$","div",null,{"className":"elementor-element elementor-element-24c0280 elementor-widget__width-inherit elementor-widget elementor-widget-logico_heading","data-id":"24c0280","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","div",null,{"className":"logico-title","children":"/ Doormile Wings /"}]}]}],["$","div",null,{"className":"elementor-element elementor-element-2ed47f3 e-con-full e-grid cut-corner-no sticky-container-off e-con e-child","data-id":"2ed47f3","data-element_type":"container","data-e-type":"container","children":[["$","div",null,{"className":"elementor-element elementor-element-36efec7 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"36efec7","data-element_type":"container","data-e-type":"container","children":[["$","$L1d",null,{"duration":0.8,"yOffset":28,"triggerOnce":true,"children":["$","div",null,{"className":"elementor-element elementor-element-778840d elementor-widget elementor-widget-logico_heading","data-id":"778840d","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","h3",null,{"className":"logico-title","children":"Women Building The Next Mile"}]}]}]}],["$","div",null,{"className":"elementor-element elementor-element-bbfb67f elementor-widget elementor-widget-image","data-id":"bbfb67f","data-element_type":"widget","data-e-type":"widget","data-widget_type":"image.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","$L43",null,{"src":"/images/bg-map-women.webp","alt":"Women Map","width":626,"height":692,"style":{"maxWidth":"100%","height":"auto"}}]}]}]]}],["$","div",null,{"className":"elementor-element elementor-element-b2c956f e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"b2c956f","data-element_type":"container","data-e-type":"container","children":["$","div",null,{"id":"ws-stories","children":[["$","$L42",null,{"className":"ws__stats","stagger":0.1,"duration":0.6,"yOffset":20,"triggerOnce":true,"children":[["$","div","Women Founders",{"className":"ws__stat","children":[["$","div",null,{"className":"ws__stat-num","children":[["$","$L41",null,{"end":500,"suffix":"","duration":1.8,"triggerOnce":true}],["$","span",null,{"children":"+"}]]}],["$","div",null,{"className":"ws__stat-label","children":"Women Founders"}]]}],["$","div","Cities Active",{"className":"ws__stat","children":[["$","div",null,{"className":"ws__stat-num","children":[["$","$L41",null,{"end":35,"suffix":"","duration":1.8,"triggerOnce":true}],["$","span",null,{"children":"+"}]]}],["$","div",null,{"className":"ws__stat-label","children":"Cities Active"}]]}],["$","div","Enterprises Launched",{"className":"ws__stat","children":[["$","div",null,{"className":"ws__stat-num","children":[["$","$L41",null,{"end":100,"suffix":"","duration":1.8,"triggerOnce":true}],["$","span",null,{"children":"+"}]]}],["$","div",null,{"className":"ws__stat-label","children":"Enterprises Launched"}]]}]]}],["$","$L42",null,{"className":"ws__cards","stagger":0.08,"duration":0.6,"yOffset":24,"triggerOnce":true,"children":[["$","div","Venture Building",{"className":"ws__card","children":[["$","span",null,{"className":"ws__card-icon","aria-hidden":"true","children":["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"1.8","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","path",null,{"d":"M4 19V5"}],["$","path",null,{"d":"M4 7h12l-2 4 2 4H4"}],["$","path",null,{"d":"M18 19h2"}]]}]}],["$","div",null,{"className":"ws__card-title","children":"Venture Building"}],["$","p",null,{"className":"ws__card-desc","children":"End-to-end support for women launching logistics enterprises — from ideation to market entry."}]]}],"$L44","$L45","$L46"]}]]}]}]]}]]}]}]]}] -3d:["$","div",null,{"className":"epr-row-index","children":"04"}] -3e:["$","div",null,{"children":[false,["$","span",null,{"className":"epr-row-type","children":"Scale with confidence"}],["$","h3",null,{"className":"epr-row-title","children":"Growth & Scale"}],["$","p",null,{"className":"epr-row-desc","children":"Operational expansion frameworks, team building, funding readiness, and sustainable unit economics for ventures ready to grow."}]]}] -3f:["$","article","Industry Immersion",{"className":"epr-row","children":[["$","div",null,{"className":"epr-row-index","children":"05"}],["$","div",null,{"children":[false,["$","span",null,{"className":"epr-row-type","children":"See the opportunity"}],["$","h3",null,{"className":"epr-row-title","children":"Industry Immersion"}],["$","p",null,{"className":"epr-row-desc","children":"Real exposure to logistics operations, supply chain infrastructure, and distribution networks before founders commit to a vertical."}]]}]]}] -40:["$","div",null,{"className":"epr-cta","children":["$","$L47",null,{"href":"/contact","className":"epr-cta-link","children":["Start your venture",["$","svg",null,{"width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M5 12h14M13 6l6 6-6 6"}]}]]}]}] -44:["$","div","Entrepreneurship",{"className":"ws__card","children":[["$","span",null,{"className":"ws__card-icon","aria-hidden":"true","children":["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"1.8","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","rect",null,{"x":"3","y":"7","width":"18","height":"13","rx":"2"}],["$","path",null,{"d":"M8 7V5a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2M3 12h18"}]]}]}],["$","div",null,{"className":"ws__card-title","children":"Entrepreneurship"}],["$","p",null,{"className":"ws__card-desc","children":"Women building, owning, and scaling sustainable businesses within the logistics ecosystem."}]]}] -45:["$","div","Founder Networks",{"className":"ws__card","children":[["$","span",null,{"className":"ws__card-icon","aria-hidden":"true","children":["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"1.8","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","circle",null,{"cx":"8","cy":"8","r":"3"}],["$","circle",null,{"cx":"16","cy":"8","r":"3"}],["$","path",null,{"d":"M2.5 20c.7-3.1 2.8-5 5.5-5s4.8 1.9 5.5 5"}],["$","path",null,{"d":"M10.5 20c.7-3.1 2.8-5 5.5-5s4.8 1.9 5.5 5"}]]}]}],["$","div",null,{"className":"ws__card-title","children":"Founder Networks"}],["$","p",null,{"className":"ws__card-desc","children":"Peer communities and strategic connections that accelerate growth and open new markets."}]]}] -46:["$","div","Enterprise Leadership",{"className":"ws__card","children":[["$","span",null,{"className":"ws__card-icon","aria-hidden":"true","children":["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"1.8","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","circle",null,{"cx":"12","cy":"9","r":"5"}],["$","path",null,{"d":"M9 13.5 7.5 21 12 18l4.5 3-1.5-7.5"}]]}]}],["$","div",null,{"className":"ws__card-title","children":"Enterprise Leadership"}],["$","p",null,{"className":"ws__card-desc","children":"Strategic decision-making, operational excellence, and vision-driven leadership for women founders."}]]}] -37:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -48:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -34:null -39:[["$","title","0",{"children":"Doormile Wings — Women Entrepreneurship Initiative"}],["$","meta","1",{"name":"description","content":"Doormile Wings empowers women to build, own, and lead enterprises within the logistics ecosystem through strategic partnerships, founder networks, and entrepreneurial infrastructure."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"canonical","href":"https://doormile.com/empowerment"}],["$","meta","4",{"property":"og:title","content":"Doormile Wings — Women Entrepreneurship Initiative"}],["$","meta","5",{"property":"og:description","content":"An entrepreneurial ecosystem empowering women to launch, grow, and lead logistics enterprises with strategic partnerships and industry collaboration."}],["$","meta","6",{"property":"og:url","content":"https://doormile.com/empowerment"}],["$","meta","7",{"property":"og:site_name","content":"Doormile"}],["$","meta","8",{"property":"og:image","content":"https://doormile.com/images/wings-logo.png"}],["$","meta","9",{"property":"og:image:width","content":"1200"}],["$","meta","10",{"property":"og:image:height","content":"630"}],["$","meta","11",{"property":"og:image:alt","content":"Doormile Wings — Women Entrepreneurship Initiative"}],["$","meta","12",{"property":"og:type","content":"website"}],["$","meta","13",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","14",{"name":"twitter:title","content":"Doormile Wings — Women Entrepreneurship Initiative"}],["$","meta","15",{"name":"twitter:description","content":"An entrepreneurial ecosystem empowering women to launch, grow, and lead logistics enterprises with strategic partnerships and industry collaboration."}],["$","meta","16",{"name":"twitter:image","content":"https://doormile.com/images/wings-logo.png"}],["$","link","17",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","18",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","19",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L48","21",{}]] diff --git a/build/empowerment/__next._head.txt b/build/empowerment/__next._head.txt deleted file mode 100644 index a4b3c56..0000000 --- a/build/empowerment/__next._head.txt +++ /dev/null @@ -1,6 +0,0 @@ -1:"$Sreact.fragment" -2:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -3:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -4:"$Sreact.suspense" -5:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Doormile Wings — Women Entrepreneurship Initiative"}],["$","meta","1",{"name":"description","content":"Doormile Wings empowers women to build, own, and lead enterprises within the logistics ecosystem through strategic partnerships, founder networks, and entrepreneurial infrastructure."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"canonical","href":"https://doormile.com/empowerment"}],["$","meta","4",{"property":"og:title","content":"Doormile Wings — Women Entrepreneurship Initiative"}],["$","meta","5",{"property":"og:description","content":"An entrepreneurial ecosystem empowering women to launch, grow, and lead logistics enterprises with strategic partnerships and industry collaboration."}],["$","meta","6",{"property":"og:url","content":"https://doormile.com/empowerment"}],["$","meta","7",{"property":"og:site_name","content":"Doormile"}],["$","meta","8",{"property":"og:image","content":"https://doormile.com/images/wings-logo.png"}],["$","meta","9",{"property":"og:image:width","content":"1200"}],["$","meta","10",{"property":"og:image:height","content":"630"}],["$","meta","11",{"property":"og:image:alt","content":"Doormile Wings — Women Entrepreneurship Initiative"}],["$","meta","12",{"property":"og:type","content":"website"}],["$","meta","13",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","14",{"name":"twitter:title","content":"Doormile Wings — Women Entrepreneurship Initiative"}],["$","meta","15",{"name":"twitter:description","content":"An entrepreneurial ecosystem empowering women to launch, grow, and lead logistics enterprises with strategic partnerships and industry collaboration."}],["$","meta","16",{"name":"twitter:image","content":"https://doormile.com/images/wings-logo.png"}],["$","link","17",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","18",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","19",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","20",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L5","21",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/empowerment/__next._index.txt b/build/empowerment/__next._index.txt deleted file mode 100644 index d0b3355..0000000 --- a/build/empowerment/__next._index.txt +++ /dev/null @@ -1,15 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","template":["$","$La",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/empowerment/__next._tree.txt b/build/empowerment/__next._tree.txt deleted file mode 100644 index 2aeb53c..0000000 --- a/build/empowerment/__next._tree.txt +++ /dev/null @@ -1,9 +0,0 @@ -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"empowerment","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/empowerment/__next.empowerment.__PAGE__.txt b/build/empowerment/__next.empowerment.__PAGE__.txt deleted file mode 100644 index d309ad8..0000000 --- a/build/empowerment/__next.empowerment.__PAGE__.txt +++ /dev/null @@ -1,2097 +0,0 @@ -1:"$Sreact.fragment" -f:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0vzdvje64yndv.js"],"ScrollReveal"] -10:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0vzdvje64yndv.js"],"ShimmerText"] -24:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -25:"$Sreact.suspense" -27:I[5074,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0vzdvje64yndv.js"],"default"] -2e:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0vzdvje64yndv.js"],"CountUp"] -2f:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0vzdvje64yndv.js"],"StaggerChildren"] -30:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0vzdvje64yndv.js"],"Image"] -34:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0vzdvje64yndv.js"],""] -2:Tf99, - .eh-outer { - box-sizing: border-box; - padding: 20px; - } - - .eh-section { - position: relative; - border-radius: 25px; - overflow: hidden; - box-sizing: border-box; - height: 800px; - display: flex; - align-items: center; - justify-content: center; - background: #07080c; - } - - .eh-bg { - position: absolute; - inset: 0; - background-image: url("/images/women-hero-slider-2.png"); - background-size: cover; - background-position: 30% 72%; - z-index: 0; - } - - .eh-scrim { - position: absolute; - inset: 0; - background: - linear-gradient(180deg, rgba(7, 8, 12, 0.72) 0%, rgba(7, 8, 12, 0.5) 40%, rgba(7, 8, 12, 0.86) 100%); - z-index: 1; - } - - .eh-inner { - position: relative; - z-index: 2; - width: 100%; - max-width: 1000px; - margin: 0 auto; - padding: 0 15px; - display: flex; - flex-direction: column; - align-items: center; - text-align: center; - box-sizing: border-box; - } - - .eh-eyebrow { - font-size: 13px; - font-weight: 800; - letter-spacing: 2.6px; - text-transform: uppercase; - color: #ff5470; - margin-bottom: 20px; - } - - .eh-title { - width: 100%; - font-size: clamp(30px, 5.5vw, 80px) !important; - font-weight: 800 !important; - letter-spacing: -0.03em !important; - line-height: 1.08 !important; - text-transform: uppercase !important; - color: #ffffff !important; - margin: 0; - word-wrap: break-word; - overflow-wrap: break-word; - } - - .eh-title .eh-soft { - color: rgba(255, 255, 255, 0.72); - } - - .eh-desc { - width: 100%; - max-width: 680px; - margin: 23px auto 0; - font-size: clamp(16px, 1.35vw, 23px); - line-height: 1.65; - color: rgba(255, 255, 255, 0.78); - } - - .eh-btns { - display: flex; - align-items: center; - justify-content: center; - gap: 14px; - flex-wrap: wrap; - margin-top: 32px; - } - - .eh-btn-primary, - .eh-btn-outline { - display: inline-flex; - align-items: center; - gap: 10px; - padding: 15px 28px; - border-radius: 100px; - font-weight: 800; - font-size: 14px; - text-decoration: none; - transition: transform 0.35s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.35s ease, background-color 0.3s ease, border-color 0.3s ease; - } - - .eh-btn-primary { - background: #c01227; - color: #ffffff !important; - border: 1.5px solid #c01227; - } - - .eh-btn-primary:hover { - transform: translateY(-3px); - box-shadow: 0 14px 30px rgba(192, 18, 39, 0.4); - } - - .eh-btn-outline { - background: rgba(255, 255, 255, 0.04); - color: #ffffff !important; - border: 1.5px solid rgba(255, 255, 255, 0.36); - } - - .eh-btn-outline:hover { - border-color: rgba(255, 255, 255, 0.82); - background: rgba(255, 255, 255, 0.09); - transform: translateY(-3px); - } - - @media (max-width: 1020px) { - .eh-outer { padding: 10px; } - } - - @media (max-width: 840px) { - .eh-section { height: 600px; } - } - - @media (max-width: 660px) { - .eh-title { - font-size: clamp(20px, 7vw, 32px) !important; - } - } - - @media (max-width: 480px) { - .eh-section { height: 520px; } - .eh-btn-primary, .eh-btn-outline { width: 100%; justify-content: center; padding: 14px 22px; } - .eh-btns { width: 100%; } - } - 0:{"rsc":["$","$1","c",{"children":[["$","div",null,{"id":"empowerment","className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","div",null,{"data-elementor-type":"wp-page","data-elementor-id":"86","className":"elementor elementor-86 elementor-59 elementor-empowerment","children":[[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$2"}}],"$L3"],"$L4","$L5","$L6","$L7","$L8","$L9","$La","$Lb","$Lc"]}]}]}]}],["$Ld"],"$Le"]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} -3:["$","div",null,{"className":"eh-outer","children":["$","section",null,{"className":"eh-section","id":"wings-empowerment-hero","children":[["$","div",null,{"className":"eh-bg","aria-hidden":"true"}],["$","div",null,{"className":"eh-scrim","aria-hidden":"true"}],["$","$Lf",null,{"delay":0.05,"duration":0.85,"yOffset":30,"className":"eh-inner","children":[["$","h1",null,{"className":"eh-title","children":["Building ",["$","span",null,{"className":"eh-soft","children":"Women"}],["$","br",null,{}],["$","$L10",null,{"children":"Entrepreneurs."}]]}],["$","p",null,{"className":"eh-desc","children":"Empowering ambitious women with the network, strategic partnerships, and opportunities to build, grow, and lead successful enterprises that shape the future of logistics."}]]}]]}]}] -11:Te8f, - .ev-section { - position: relative; - background: #ffffff; - padding: clamp(96px, 11vw, 150px) 0; - overflow: hidden; - } - - .ev-map { - position: absolute; - inset: 0; - z-index: 0; - opacity: 0.4; - pointer-events: none; - } - - .ev-inner { - position: relative; - z-index: 1; - max-width: 1380px; - min-width: 0; - margin: 0 auto; - } - - .ev-eyebrow { - margin: 0 0 18px 0; - font-size: 14px; - font-weight: 500; - letter-spacing: 1.5px; - color: rgba(17, 17, 17, 0.6); - } - - .ev-divider { - width: 100%; - height: 1px; - margin: 0 0 clamp(64px, 7.8vw, 92px) 0; - border: none; - background-color: rgba(17, 17, 17, 0.16); - } - - .ev-title { - margin: 0 0 clamp(92px, 11.5vw, 156px) 0 !important; - max-width: 1320px; - display: block; - font-weight: 800 !important; - font-style: normal !important; - letter-spacing: -0.018em !important; - word-spacing: 0.02em; - line-height: 1.04em !important; - text-transform: none !important; - color: #ffffff !important; - -webkit-text-stroke: 2px #c01227; - paint-order: stroke fill; - font-size: clamp(48px, 8.5vw, 128px) !important; - white-space: normal; - overflow-wrap: normal; - text-wrap: balance; - } - - @media (max-width: 1280px) { - .ev-title { - font-size: 118px !important; - } - } - - @media (max-width: 1020px) { - .ev-title { - font-size: 96px !important; - } - } - - @media (max-width: 767px) { - .ev-title { - font-size: 72px !important; - } - } - - .ev-columns { - display: grid; - grid-template-columns: minmax(0, 0.6fr) minmax(0, 1fr); - gap: clamp(60px, 8vw, 122px); - align-items: start; - } - - .ev-columns > * { - min-width: 0; - } - - .ev-statement { - margin: 0; - font-size: clamp(28px, 3vw, 52px); - font-weight: 600; - line-height: 1.2; - letter-spacing: -0.03em; - color: #111111; - overflow-wrap: break-word; - } - - .ev-support { - display: grid; - gap: clamp(34px, 3.8vw, 52px); - min-width: 0; - } - - .ev-block { - display: grid; - gap: 12px; - } - - .ev-block-label { - margin: 0; - font-size: 12px; - font-weight: 700; - letter-spacing: 1.4px; - line-height: 1; - text-transform: uppercase; - color: rgba(192, 18, 39, 0.86); - } - - .ev-lead, - .ev-note { - font-size: clamp(17px, 1.3vw, 20px); - line-height: 1.6; - color: #333333; - margin: 0; - overflow-wrap: break-word; - } - - .ev-lead { - font-weight: 700; - } - - .ev-note { - font-weight: 400; - } - - @media (max-width: 900px) { - .ev-columns { - grid-template-columns: 1fr; - } - } - - @media (max-width: 600px) { - .ev-section { padding-top: 64px; padding-bottom: 64px; } - .ev-title { - max-width: calc(100vw - (var(--dm-mobile-gutter, 10px) * 2)); - font-size: 56px !important; - letter-spacing: -0.025em !important; - line-height: 1.02em !important; - -webkit-text-stroke-width: 1.5px; - } - } - 4:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$11"}}],"$L12"] -13:Tbc4, - .esy-section { - position: relative; - width: calc(100% - 40px); - margin: 0 auto clamp(24px, 4vw, 40px); - border-radius: 28px; - overflow: hidden; - box-sizing: border-box; - min-height: clamp(500px, 50vw, 690px); - display: flex; - align-items: stretch; - background: #09090b; - } - - .esy-bg { - position: absolute; - inset: 0; - background-image: - linear-gradient(100deg, rgba(9, 9, 11, 0.96) 0%, rgba(9, 9, 11, 0.84) 43%, rgba(192, 18, 39, 0.28) 100%), - url("/images/wings-heroslider4.png"); - background-size: cover; - background-position: center; - z-index: 0; - } - - .esy-inner { - position: relative; - z-index: 1; - max-width: 1380px; - margin: 0 auto; - width: 100%; - padding-top: clamp(60px, 7vw, 98px); - padding-bottom: clamp(60px, 7vw, 98px); - display: grid; - grid-template-columns: minmax(0, 0.9fr) minmax(280px, 0.52fr); - gap: clamp(36px, 6vw, 96px); - align-items: end; - } - - .esy-eyebrow { - font-size: 13px; - font-weight: 800; - letter-spacing: 2.5px; - text-transform: uppercase; - color: #ff5470; - margin-bottom: 24px; - } - - .esy-statement { - max-width: 920px; - font-size: clamp(38px, 5.7vw, 86px); - font-weight: 800; - letter-spacing: -0.055em; - line-height: 0.98; - text-transform: uppercase; - color: #ffffff; - margin: 0; - } - - .esy-statement em { - color: #ff5470; - font-style: normal; - } - - .esy-side { - border-left: 1px solid rgba(255, 255, 255, 0.18); - padding-left: clamp(24px, 3vw, 42px); - } - - .esy-label { - display: block; - font-size: 12px; - font-weight: 800; - letter-spacing: 1.8px; - text-transform: uppercase; - color: rgba(255, 255, 255, 0.45); - margin-bottom: 18px; - } - - .esy-pull { - font-size: clamp(22px, 2.3vw, 34px); - font-weight: 800; - line-height: 1.16; - letter-spacing: -0.03em; - color: #ffffff; - margin: 0 0 22px 0; - } - - .esy-sub { - font-size: 15.5px; - line-height: 1.65; - color: rgba(255, 255, 255, 0.64); - margin: 0; - } - - @media (max-width: 1024px) { - .esy-section { width: calc(100% - 24px); border-radius: 22px; } - .esy-inner { grid-template-columns: 1fr; align-items: start; } - .esy-side { max-width: 640px; } - } - - @media (max-width: 640px) { - .esy-section { min-height: 560px; } - .esy-side { border-left: none; padding-left: 0; border-top: 1px solid rgba(255, 255, 255, 0.18); padding-top: 24px; } - } - 5:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$13"}}],["$","section",null,{"className":"esy-section","id":"wings-empowerment-story","children":[["$","div",null,{"className":"esy-bg","aria-hidden":"true"}],["$","div",null,{"className":"esy-inner dm-section-container","children":["$L14","$L15"]}]]}]] -16:T3756, - /* ============================================================ - Success Stories — redesigned right column (stats + 2x2 cards) - Dark section · red accent #dc2626 / #ef4444 · Manrope - ============================================================ */ - /* Neutralise the right column's asymmetric 140px left padding so the - box group can be centered instead of pushed to one side. */ - .elementor-element.elementor-element-b2c956f { padding: 0 !important; } - - /* Vertically center the two columns so the right content lines up with - the image instead of needing a big top gap; tighten row gap. */ - .elementor-element.elementor-element-2ed47f3 { align-items: center !important; } - - /* Animated map background behind the Success Stories content */ - .elementor-element.elementor-element-b6e14bd { position: relative; overflow: hidden; } - .elementor-element.elementor-element-b6e14bd > .e-con-inner { position: relative; z-index: 1; } - .ws-map { position: absolute; inset: 0; z-index: 0; opacity: 0.5; pointer-events: none; } - .ws-map canvas { display: block; } - - #ws-stories { - display: flex; - flex-direction: column; - gap: 16px; - width: 100%; - max-width: 620px; - margin: 0 auto; /* center the 7 boxes as a group — no negative margins */ - } - - #ws-stories .ws__stats { - display: grid; - grid-template-columns: repeat(3, 1fr); - gap: 12px; - } - #ws-stories .ws__stat { - background: rgba(255,255,255,0.04); - border: 1px solid rgba(255,255,255,0.08); - border-radius: 14px; - padding: 20px 16px; - transition: border-color 0.3s ease, background-color 0.3s ease; - } - #ws-stories .ws__stat:hover { border-color: rgba(220,38,38,0.28); background: rgba(220,38,38,0.05); } - #ws-stories .ws__stat-num { - color: #fff !important; - font-weight: 900; - font-size: clamp(28px, 3vw, 38px); - line-height: 1; - letter-spacing: -0.01em; - } - #ws-stories .ws__stat-num span { color: #dc2626 !important; } - #ws-stories .ws__stat-label { - margin-top: 9px; - color: rgba(255,255,255,0.7) !important; - font-size: 14px !important; - font-weight: 700; - letter-spacing: 0.03em; - text-transform: uppercase; - } - - #ws-stories .ws__cards { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 14px; - align-items: stretch; - } - #ws-stories .ws__card { - position: relative; - overflow: hidden; - display: flex; - flex-direction: column; - min-height: 168px; - background: rgba(255,255,255,0.035); - border: 1px solid rgba(255,255,255,0.08); - border-radius: 14px; - padding: 20px; - transition: transform 0.35s cubic-bezier(.25,1,.5,1), border-color 0.35s ease, background-color 0.35s ease, box-shadow 0.35s ease; - } - #ws-stories .ws__card::after { - content: ''; - position: absolute; - top: -45%; left: -25%; - width: 150px; height: 150px; - background: radial-gradient(circle, rgba(220,38,38,0.2), transparent 70%); - opacity: 0; - transition: opacity 0.35s ease; - pointer-events: none; - } - #ws-stories .ws__card:hover { - transform: translateY(-4px); - border-color: rgba(220,38,38,0.3); - background: rgba(220,38,38,0.05); - box-shadow: 0 18px 44px -20px rgba(0,0,0,0.7); - } - #ws-stories .ws__card:hover::after { opacity: 1; } - #ws-stories .ws__card-icon { - display: inline-flex; - align-items: center; - justify-content: center; - width: 40px; height: 40px; - border-radius: 11px; - background: rgba(220,38,38,0.12); - border: 1px solid rgba(220,38,38,0.25); - color: #ef4444; - margin-bottom: 16px; - transition: background-color 0.3s ease, color 0.3s ease; - } - #ws-stories .ws__card:hover .ws__card-icon { background: #dc2626; color: #fff; } - #ws-stories .ws__card-icon svg { width: 21px; height: 21px; } - #ws-stories .ws__card-title { - color: #fff !important; - font-weight: 800; - font-size: 19px; - line-height: 1.2; - letter-spacing: 0; - margin-bottom: 9px; - } - #ws-stories .ws__card-desc { - max-width: 28ch; - color: rgba(255,255,255,0.66) !important; - font-size: 15px; - line-height: 1.52; - margin: 0; - font-weight: 500; - } - - /* ---- Floating card sizing: content-driven, not container-driven ---- - Matches the EV Logistics card height proportions exactly by trimming - red content padding and white footer min-height. */ - .elementor-element.elementor-element-3b61435 { - --padding-top: 46px; - --padding-bottom: 38px; - } - .elementor-element.elementor-element-5aea22e { - --min-height: 38px; - --padding-top: 14px; - --padding-bottom: 14px; - } - @media (max-width: 1020px) { - .elementor-element.elementor-element-3b61435 { - --padding-top: 34px; - --padding-bottom: 28px; - } - .elementor-element.elementor-element-5aea22e { - --min-height: 32px; - --padding-top: 12px; - --padding-bottom: 12px; - } - } - @media (max-width: 660px) { - .elementor-element.elementor-element-3b61435 { - --padding-top: 26px; - --padding-bottom: 22px; - } - .elementor-element.elementor-element-5aea22e { - --min-height: 24px; - --padding-top: 10px; - --padding-bottom: 10px; - } - } - - .elementor-element-778840d .logico-title { - white-space: nowrap !important; - } - - /* The banner image (bg-header-women.png) is very wide (≈2.48:1) and the - woman — the subject of this section — sits on the right. On narrow - screens "cover" center-crops her out, so shift the focal point right - to keep her face in frame. */ - @media (max-width: 1024px) { - .elementor-element.elementor-element-7da6646:not(.elementor-motion-effects-element-type-background) { - background-position: 78% center !important; - } - } - @media (max-width: 767px) { - .elementor-element.elementor-element-7da6646:not(.elementor-motion-effects-element-type-background) { - background-position: 82% 25% !important; - } - } - - /* Stack the two columns below the desktop breakpoint so the box group - always gets full width and stays centered — never clipped. */ - @media (max-width: 1024px) { - .elementor-element-778840d .logico-title { - white-space: normal !important; - } - .elementor-element.elementor-element-2ed47f3 { grid-template-columns: 1fr !important; } - #ws-stories { max-width: 640px; margin: 0 auto; } - /* Align the heading, image and stats/cards to one shared left/right - edge — the heading + image widgets carried extra inset that left - them staggered (80px / 70px / 60px) against the stats column. */ - #women-entrepreneurship .elementor-element-36efec7, - #women-entrepreneurship .elementor-element-b2c956f { - padding-left: 0 !important; - padding-right: 0 !important; - } - #women-entrepreneurship .elementor-element-778840d, - #women-entrepreneurship .elementor-element-bbfb67f, - #women-entrepreneurship .elementor-element-778840d > .elementor-widget-container, - #women-entrepreneurship .elementor-element-bbfb67f > .elementor-widget-container { - padding-left: 0 !important; - padding-right: 0 !important; - margin-left: 0 !important; - margin-right: 0 !important; - } - } - - @media (max-width: 767px) { - #women-entrepreneurship { - width: calc(100% - 20px) !important; - margin-left: 10px !important; - margin-right: 10px !important; - border-radius: 22px !important; - padding-left: 0px !important; - padding-right: 0px !important; - } - #women-entrepreneurship .e-con-boxed > .e-con-inner { - padding-top: 32px !important; - padding-bottom: 32px !important; - padding-left: 0 !important; - padding-right: 0 !important; - } - #women-entrepreneurship .elementor-element-8b5d6e6, - #women-entrepreneurship .elementor-element-b6e14bd, - #women-entrepreneurship .elementor-element-90cc867, - #women-entrepreneurship .elementor-element-36efec7, - #women-entrepreneurship .elementor-element-b2c956f { - padding-left: 0 !important; - padding-right: 0 !important; - margin-left: 0 !important; - margin-right: 0 !important; - } - #women-entrepreneurship .elementor-element-1f766ea { - width: 100% !important; - max-width: 100% !important; - margin-left: auto !important; - margin-right: auto !important; - padding-left: 0 !important; - padding-right: 0 !important; - } - #women-entrepreneurship .elementor-element.elementor-element-2ed47f3 { - padding-left: 0 !important; - padding-right: 0 !important; - margin-left: 0 !important; - margin-right: 0 !important; - margin-top: 0 !important; - padding-top: 0 !important; - gap: 24px !important; - } - #women-entrepreneurship .elementor-element-36efec7 { - margin-top: 0px !important; - padding-top: 0px !important; - gap: 0px !important; - } - #women-entrepreneurship .elementor-element-24c0280 { - margin-bottom: 0px !important; - padding-left: 14px !important; - padding-right: 14px !important; - box-sizing: border-box !important; - } - #women-entrepreneurship .elementor-element-778840d { - margin-top: 14px !important; - margin-bottom: 14px !important; - padding-top: 0px !important; - padding-bottom: 0px !important; - padding-left: 14px !important; - padding-right: 14px !important; - box-sizing: border-box !important; - } - #women-entrepreneurship .elementor-element-778840d h3.logico-title, - #women-entrepreneurship .elementor-element-778840d > .elementor-widget-container { - margin: 0px !important; - padding: 0px !important; - } - #women-entrepreneurship .elementor-element-7da6646 { - width: calc(100% - 28px) !important; - margin-left: 14px !important; - margin-right: 14px !important; - border-radius: 18px !important; - min-height: 240px !important; - margin-top: 15px !important; - margin-bottom: -50px !important; - box-sizing: border-box !important; - } - #women-entrepreneurship .elementor-element-8b5d6e6 { - padding-left: 14px !important; - padding-right: 14px !important; - margin-left: 0px !important; - margin-right: 0px !important; - width: 100% !important; - max-width: 100% !important; - box-sizing: border-box !important; - } - #women-entrepreneurship .elementor-element-bbfb67f img { - width: 100% !important; - } - #women-entrepreneurship .elementor-element-bbfb67f { - margin-top: 0px !important; - margin-bottom: 16px !important; - padding-left: 14px !important; - padding-right: 14px !important; - box-sizing: border-box !important; - } - #ws-stories { - padding-left: 14px !important; - padding-right: 14px !important; - box-sizing: border-box !important; - } - /* KPI stat cards stack one-per-row on mobile. Inside each card the big - number sits on the left and the label on the right, vertically - centered, so every stat reads as a clean full-width row instead of - three cramped columns. */ - #ws-stories .ws__stats { grid-template-columns: 1fr; gap: 12px; } - #ws-stories .ws__stat { - display: flex; - align-items: center; - justify-content: space-between; - gap: 16px; - padding: 16px 20px; - min-width: 0; - } - #ws-stories .ws__stat-num { font-size: clamp(30px, 9vw, 40px); } - #ws-stories .ws__stat-label { - margin-top: 0; - font-size: 13px !important; - letter-spacing: 0.02em; - text-align: right; - min-height: 0; - } - #ws-stories .ws__cards { grid-template-columns: 1fr; gap: 12px; } - } - 6:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$16"}}],"$L17"] -18:T2d38, - .epr-section { - background: #ffffff; - padding: clamp(78px, 9vw, 132px) 0; - overflow: visible; - } - - .epr-inner { - max-width: 1380px; - min-width: 0; - margin: 0 auto; - } - - .epr-head { - display: flex; - flex-direction: column; - align-items: flex-start; - margin-bottom: clamp(54px, 7vw, 86px); - } - - .epr-head-reveal { - width: 100%; - } - - .epr-divider { - width: 100%; - height: 1px; - margin: 18px 0 clamp(24px, 3.5vw, 40px) 0; - border: none; - background-color: rgba(17, 17, 17, 0.14); - } - - .epr-eyebrow { - font-size: 13px; - font-weight: 800; - letter-spacing: 2.4px; - text-transform: uppercase; - color: rgba(17, 17, 17, 0.42); - } - - .epr-title { - max-width: 950px; - font-size: clamp(42px, 6.2vw, 88px) !important; - font-weight: 800 !important; - letter-spacing: -0.055em !important; - line-height: 0.98 !important; - text-transform: uppercase !important; - color: #111111 !important; - margin: 0; - } - - .epr-stage { - display: grid; - grid-template-columns: minmax(300px, 0.38fr) minmax(0, 0.62fr); - gap: clamp(32px, 5vw, 78px); - /* stretch (not start): the left column's grid-item box must span - the full row — i.e. match the taller Programs list — or the - sticky aside inside it runs out of room and un-sticks well - before the list finishes scrolling. */ - align-items: stretch; - min-width: 0; - } - - .epr-stage > * { - min-width: 0; - } - - /* Plain stretching grid item. Carries no visual styling of its own — - it exists only to give .epr-aside (sized/centered independently - inside it) the full row height to stick within. */ - .epr-aside-wrap { - min-width: 0; - } - - .epr-aside { - position: sticky; - top: 110px; - min-width: 0; - min-height: clamp(480px, 44vw, 660px); - padding: clamp(18px, 3vw, 34px) 0 clamp(24px, 3.5vw, 42px); - display: flex; - flex-direction: column; - justify-content: center; - overflow: hidden; - color: #111111; - } - - .epr-aside-map { - position: absolute; - inset: 8% -22% 8% -28%; - z-index: 0; - opacity: 0.22; - pointer-events: none; - } - - .epr-aside-map canvas { - display: block; - } - - .epr-aside-content { - position: relative; - z-index: 1; - display: grid; - gap: clamp(18px, 2.2vw, 28px); - } - - .epr-aside-num { - position: relative; - font-size: clamp(164px, 17vw, 300px); - font-weight: 900; - line-height: 0.78; - letter-spacing: -0.06em; - color: transparent; - -webkit-text-stroke: 2px rgba(200, 16, 46, 0.2); - } - - .epr-aside-copy { - position: relative; - max-width: 12ch; - font-size: clamp(30px, 3.6vw, 56px); - font-weight: 800; - line-height: 0.98; - letter-spacing: -0.055em; - text-transform: uppercase; - color: #111111; - margin: 0; - } - - .epr-aside-copy em { - font-style: normal; - color: #c8102e; - } - - .epr-aside-desc { - position: relative; - max-width: 34ch; - font-size: 15.5px; - line-height: 1.65; - color: rgba(17, 17, 17, 0.58); - margin: 0; - } - - /* Continues the editorial narrative below the original hero - statement/paragraph — same grid, same gap rhythm as the rest of - .epr-aside-content, so it reads as one uninterrupted column rather - than a bolted-on block. Exists so the sticky aside still has real - editorial content to show while the list scrolls through its last - two entries, instead of ending early and leaving the left side - blank for the remainder of the scroll. */ - .epr-aside-divider { - position: relative; - width: 100%; - height: 1px; - border: none; - margin: 0; - background-color: rgba(17, 17, 17, 0.12); - } - - .epr-aside-label { - position: relative; - font-size: 12px; - font-weight: 800; - letter-spacing: 1.7px; - text-transform: uppercase; - color: rgba(17, 17, 17, 0.4); - margin: 0 0 -6px 0; - } - - .epr-aside-gains-list { - position: relative; - list-style: none; - margin: 0; - padding: 0; - display: grid; - gap: 9px; - } - - .epr-aside-gains-list li { - position: relative; - padding-left: 19px; - font-size: 15.5px; - line-height: 1.5; - color: rgba(17, 17, 17, 0.68); - } - - /* Extra .epr-aside prefix raises specificity above the global theme - rule ".logico-front-end ul li:before" (a fontello glyph), so our - clean red dot replaces the inherited checkmark marker — same fix - already established for this exact conflict in LegalDocument.tsx. */ - .epr-aside .epr-aside-gains-list li::before { - content: "" !important; - position: absolute; - left: 2px; - top: 0.62em; - width: 5px; - height: 5px; - border-radius: 50%; - background: #c8102e; - font-size: 0; - } - - .epr-aside-final { - position: relative; - max-width: 30ch; - font-size: clamp(17px, 1.7vw, 20px); - font-weight: 700; - line-height: 1.5; - letter-spacing: -0.01em; - color: #111111; - margin: 0; - } - - .epr-aside-final em { - font-style: normal; - color: #c8102e; - } - - .epr-list { - display: grid; - gap: clamp(28px, 4vw, 52px); - } - - .epr-row { - display: grid; - grid-template-columns: 110px minmax(0, 1fr); - gap: clamp(22px, 4vw, 58px); - padding-bottom: clamp(28px, 4vw, 52px); - border-bottom: 1px solid rgba(17, 17, 17, 0.14); - } - - .epr-row:nth-child(even) { - margin-left: clamp(0px, 7vw, 96px); - } - - .epr-row-index { - font-size: clamp(38px, 4.2vw, 62px); - font-weight: 900; - line-height: 1; - letter-spacing: -0.05em; - color: #c8102e; - } - - .epr-row-featured { - padding: clamp(28px, 4vw, 44px) clamp(24px, 3vw, 40px); - background: #09090b; - border-radius: 22px; - border-bottom: none; - margin-bottom: clamp(28px, 4vw, 52px); - } - - .epr-row-featured .epr-row-index { - color: rgba(255, 255, 255, 0.22); - -webkit-text-stroke: 1.5px rgba(255, 255, 255, 0.5); - } - - .epr-row-featured .epr-row-title { - font-size: clamp(32px, 4vw, 64px) !important; - color: #ffffff !important; - } - - .epr-row-featured .epr-row-desc { - color: rgba(255, 255, 255, 0.62); - } - - .epr-row-flag { - display: inline-block; - font-size: 12px; - font-weight: 800; - letter-spacing: 1.3px; - text-transform: uppercase; - color: #ffffff; - background: #c8102e; - padding: 6px 14px; - border-radius: 100px; - margin-bottom: 16px; - } - - .epr-row-type { - display: block; - font-size: 12px; - font-weight: 800; - letter-spacing: 1.7px; - text-transform: uppercase; - color: rgba(17, 17, 17, 0.42); - margin-bottom: 14px; - } - - .epr-row-featured .epr-row-type { - color: rgba(255, 255, 255, 0.42); - } - - .epr-row-title { - font-size: clamp(28px, 3.4vw, 52px) !important; - font-weight: 800 !important; - letter-spacing: -0.045em !important; - line-height: 1.02 !important; - text-transform: uppercase !important; - color: #111111 !important; - margin: 0 0 14px 0; - } - - .epr-row-desc { - max-width: 660px; - font-size: 15.5px; - line-height: 1.65; - color: rgba(17, 17, 17, 0.58); - margin: 0; - } - - .epr-cta { - margin-top: clamp(48px, 6vw, 72px); - } - - .epr-cta-link { - display: inline-flex; - align-items: center; - gap: 10px; - font-size: 15px; - font-weight: 800; - color: #111111 !important; - text-decoration: none !important; - border-bottom: 1.5px solid rgba(17, 17, 17, 0.2); - padding-bottom: 5px; - transition: border-color 0.3s ease, color 0.3s ease; - } - - .epr-cta-link:hover { - color: #c8102e !important; - border-color: #c8102e; - } - - /* Laptop: sticky stays enabled, just a narrower gutter. */ - @media (max-width: 1180px) { - .epr-stage { grid-template-columns: minmax(220px, 0.34fr) minmax(0, 0.66fr); gap: clamp(28px, 4vw, 46px); } - .epr-aside { min-height: 420px; } - .epr-row:nth-child(even) { margin-left: 0; } - } - - /* Tablet: sticky disabled — the aside scrolls in normal flow instead - of pinning, since there's no longer enough vertical runway next to - the (now narrower, shorter) program list for pinning to read well. - The wrapper no longer needs to stretch once its child isn't sticky. */ - @media (max-width: 1023px) { - .epr-aside-wrap { - align-self: start; - } - .epr-aside { - position: relative; - top: auto; - } - } - - @media (max-width: 767px) { - .epr-stage { grid-template-columns: 1fr; } - .epr-aside { - position: relative; - top: auto; - min-height: 300px; - padding-top: 4px; - padding-bottom: clamp(24px, 7vw, 38px); - } - .epr-aside-map { - inset: -8% -18% 0 -20%; - opacity: 0.18; - } - .epr-aside-content { - gap: 20px; - } - .epr-aside-num { - font-size: clamp(128px, 34vw, 180px); - } - .epr-aside-copy { - max-width: 11ch; - font-size: clamp(34px, 10vw, 48px); - } - .epr-aside-desc { - max-width: 32ch; - font-size: 14.5px; - } - .epr-aside-gains-list li { - font-size: 14.5px; - } - .epr-aside-final { - max-width: 28ch; - font-size: 16.5px; - } - } - - @media (max-width: 640px) { - .epr-section { padding-top: 54px; padding-bottom: 54px; } - .epr-title { - font-size: clamp(34px, 10vw, 40px) !important; - letter-spacing: -0.045em !important; - overflow-wrap: anywhere; - } - .epr-row-title { - font-size: clamp(27px, 8.5vw, 36px) !important; - overflow-wrap: anywhere; - } - .epr-row { grid-template-columns: 1fr; gap: 12px; } - } - 7:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$18"}}],"$L19"] -1a:Te98, - .eim-section { - position: relative; - width: calc(100% - 40px); - margin: clamp(24px, 4vw, 40px) auto; - border-radius: 28px; - overflow: hidden; - box-sizing: border-box; - background: #09090b; - padding: clamp(64px, 8vw, 100px) clamp(24px, 5vw, 48px); - } - - .eim-inner { - position: relative; - z-index: 1; - max-width: 1380px; - margin: 0 auto; - } - - .eim-eyebrow { - font-size: 13px; - font-weight: 800; - letter-spacing: 2.5px; - text-transform: uppercase; - color: #c8102e; - margin-bottom: 20px; - } - - .eim-title { - font-size: clamp(28px, 3.4vw, 46px) !important; - font-weight: 800 !important; - letter-spacing: -0.03em !important; - line-height: 1.15 !important; - text-transform: none !important; - color: #ffffff !important; - margin: 0 0 clamp(32px, 4vw, 48px) 0; - } - - .eim-divider { - border: none; - border-top: 1px solid rgba(255, 255, 255, 0.12); - margin: 0 0 clamp(40px, 5vw, 56px) 0; - } - - .eim-hero-row { - display: flex; - align-items: flex-end; - gap: clamp(20px, 3vw, 36px); - margin-bottom: clamp(48px, 6vw, 72px); - } - - .eim-hero-num { - font-size: clamp(90px, 13vw, 190px); - font-weight: 800; - line-height: 0.85; - letter-spacing: -0.03em; - color: transparent; - -webkit-text-stroke: 2px #c8102e; - } - - .eim-hero-label { - font-size: 13px; - font-weight: 700; - letter-spacing: 1.5px; - text-transform: uppercase; - color: rgba(255, 255, 255, 0.55); - max-width: 90px; - line-height: 1.4; - padding-bottom: clamp(12px, 1.5vw, 24px); - } - - .eim-divider-2 { - border: none; - border-top: 1px solid rgba(255, 255, 255, 0.12); - margin: 0 0 clamp(40px, 5vw, 56px) 0; - } - - .eim-secondary-row { - display: grid; - grid-template-columns: repeat(4, minmax(0, 1fr)); - } - - .eim-secondary-item { - padding-right: 24px; - border-left: 1px solid rgba(255, 255, 255, 0.12); - padding-left: 24px; - } - - .eim-secondary-item:first-child { - border-left: none; - padding-left: 0; - } - - .eim-secondary-num { - display: block; - font-size: clamp(32px, 3vw, 44px); - font-weight: 800; - color: #ff5470; - letter-spacing: -0.02em; - margin-bottom: 10px; - } - - .eim-secondary-label { - font-size: 13px; - font-weight: 600; - color: rgba(255, 255, 255, 0.5); - line-height: 1.4; - } - - .eim-copy { - max-width: 720px; - margin-top: clamp(48px, 6vw, 72px); - font-size: 15.5px; - line-height: 1.7; - color: rgba(255, 255, 255, 0.55); - } - - @media (max-width: 1024px) { - .eim-section { width: calc(100% - 24px); border-radius: 22px; } - } - - @media (max-width: 700px) { - .eim-hero-row { align-items: flex-start; flex-direction: column; gap: 12px; } - .eim-hero-label { padding-bottom: 0; max-width: none; } - .eim-secondary-row { grid-template-columns: repeat(2, minmax(0, 1fr)); row-gap: 28px; } - .eim-secondary-item:nth-child(3) { border-left: none; padding-left: 0; } - } - - @media (max-width: 460px) { - .eim-section { padding-top: 48px; padding-bottom: 48px; } - } - 8:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$1a"}}],"$L1b"] -1c:T1573, - .ehw-section { - background: #ffffff; - padding: var(--space-section-lg, 80px) 0 calc(var(--space-section-lg, 80px) + 32px) 0; - overflow: hidden; - } - - .ehw-inner { - max-width: 1380px; - margin: 0 auto; - } - - .ehw-head { - display: flex; - flex-direction: column; - align-items: flex-start; - margin-bottom: clamp(126px, calc(7vw + 60px), 172px); - } - - .ehw-head-reveal { - width: 100%; - } - - .ehw-divider { - width: 100%; - height: 1px; - margin: 18px 0 clamp(24px, 3.5vw, 40px) 0; - border: none; - background-color: rgba(17, 17, 17, 0.14); - } - - .ehw-eyebrow { - font-size: 13px; - font-weight: 800; - letter-spacing: 2.4px; - text-transform: uppercase; - color: rgba(17, 17, 17, 0.42); - } - - .ehw-title { - max-width: 820px; - font-size: clamp(32px, 4vw, 54px) !important; - font-weight: 800 !important; - letter-spacing: -0.03em !important; - line-height: 1.08 !important; - text-transform: none !important; - color: #111111 !important; - margin: 0 !important; - } - - /* ---------------------------------------------------------------- - Premium editorial process row: five milestones in a single - sequence, separated by thin hairline dividers (no cards, no - shadows, no boxed containers). One flex-wrap sequence with - responsive flex-basis handles the composition at every size — - 5-across on desktop, 3 + 2 (centered) on tablet, a single - vertical column on mobile — from one shared markup. - ---------------------------------------------------------------- */ - .ehw-sequence { - display: flex; - flex-wrap: wrap; - justify-content: center; - --ehw-gap: clamp(24px, 2.6vw, 48px); - column-gap: var(--ehw-gap); - row-gap: clamp(48px, 6vw, 84px); - } - - .ehw-step { - position: relative; - flex: 0 1 calc((100% - 4 * var(--ehw-gap)) / 5); - min-width: 168px; - padding-left: clamp(20px, 2vw, 32px); - border-left: 1px solid rgba(17, 17, 17, 0.14); - transition: border-color 0.3s ease; - } - - .ehw-step:first-child { - border-left: none; - padding-left: 0; - } - - .ehw-step:hover { - border-left-color: rgba(200, 16, 46, 0.4); - } - - .ehw-step-num { - font-size: clamp(48px, 4.6vw, 78px); - font-weight: 900; - line-height: 0.84; - letter-spacing: -0.03em; - color: transparent; - -webkit-text-stroke: 1.5px rgba(17, 17, 17, 0.24); - margin: 0 0 18px 0; - transition: -webkit-text-stroke-color 0.3s ease; - } - - .ehw-step.is-accent .ehw-step-num { - -webkit-text-stroke: 1.5px rgba(200, 16, 46, 0.58); - } - - .ehw-step-kicker { - display: flex; - align-items: center; - gap: 7px; - margin-bottom: 18px; - } - - .ehw-step-kicker svg { - width: 13px; - height: 13px; - color: rgba(17, 17, 17, 0.36); - flex-shrink: 0; - } - - .ehw-step-kicker span { - font-size: 11px; - font-weight: 800; - letter-spacing: 2px; - text-transform: uppercase; - color: rgba(17, 17, 17, 0.4); - } - - .ehw-step.is-accent .ehw-step-kicker svg, - .ehw-step.is-accent .ehw-step-kicker span { - color: #c8102e; - } - - .ehw-step-title { - font-size: clamp(18px, 1.4vw, 22px) !important; - font-weight: 800 !important; - letter-spacing: -0.02em !important; - line-height: 1.2 !important; - text-transform: none !important; - color: #111111 !important; - margin: 0 0 22px 0; - } - - .ehw-step-desc { - max-width: 27ch; - font-size: 14px; - line-height: 1.6; - color: rgba(17, 17, 17, 0.55); - margin: 0; - } - - /* Tablet: 3 + 2, centered — sever the divider at the start of each row. */ - @media (max-width: 1100px) { - .ehw-step { - flex-basis: calc((100% - 2 * var(--ehw-gap)) / 3); - } - .ehw-step:nth-child(4) { - border-left: none; - padding-left: 0; - } - } - - /* Mobile: single column — dividers rotate from vertical to horizontal. */ - @media (max-width: 640px) { - .ehw-sequence { - row-gap: 0; - } - .ehw-step { - flex-basis: 100%; - padding-left: 0; - padding-top: clamp(28px, 8vw, 38px); - border-left: none; - border-top: 1px solid rgba(17, 17, 17, 0.14); - } - .ehw-step:first-child { - padding-top: 0; - border-top: none; - } - .ehw-step:nth-child(4) { - border-top: 1px solid rgba(17, 17, 17, 0.14); - } - .ehw-step:hover { - border-left-color: transparent; - } - .ehw-step-num { - font-size: clamp(44px, 13vw, 56px); - } - } - - @media (max-width: 480px) { - .ehw-section { padding-top: 48px; padding-bottom: 68px; } - } - 9:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$1c"}}],"$L1d"] -1e:T1bff, - .est-section { - position: relative; - background: #ffffff; - padding-top: clamp(24px, 3vw, 48px); - padding-bottom: clamp(78px, 9vw, 132px); - overflow: hidden; - } - - .est-inner { - max-width: 1380px; - margin: 0 auto; - } - - .est-head { - display: flex; - flex-direction: column; - align-items: flex-start; - margin-bottom: clamp(54px, 7vw, 86px); - } - - .est-head-reveal { - width: 100%; - } - - .est-divider { - width: 100%; - height: 1px; - margin: 18px 0 clamp(24px, 3.5vw, 40px) 0; - border: none; - background-color: rgba(17, 17, 17, 0.14); - } - - .est-eyebrow { - font-size: 13px; - font-weight: 800; - letter-spacing: 2.4px; - text-transform: uppercase; - color: rgba(17, 17, 17, 0.42); - } - - .est-title { - max-width: 940px; - font-size: clamp(42px, 6.3vw, 90px) !important; - font-weight: 800 !important; - letter-spacing: -0.055em !important; - line-height: 0.98 !important; - text-transform: uppercase !important; - color: #111111 !important; - margin: 0; - } - - .est-feature { - display: grid; - grid-template-columns: minmax(0, 0.94fr) minmax(340px, 0.64fr); - gap: clamp(28px, 4vw, 62px); - align-items: stretch; - margin-bottom: clamp(44px, 6vw, 76px); - } - - .est-photo { - position: relative; - min-height: clamp(460px, 48vw, 680px); - border-radius: 26px; - overflow: hidden; - background: #09090b; - } - - .est-photo img { - object-fit: cover; - object-position: center; - } - - .est-photo::after { - content: ""; - position: absolute; - inset: 0; - background: linear-gradient(180deg, rgba(9, 9, 11, 0) 34%, rgba(9, 9, 11, 0.72) 100%); - pointer-events: none; - } - - .est-photo-caption { - position: absolute; - left: clamp(24px, 3vw, 42px); - right: clamp(24px, 3vw, 42px); - bottom: clamp(24px, 3vw, 42px); - z-index: 1; - color: #ffffff; - } - - .est-photo-caption span { - display: block; - font-size: 12px; - font-weight: 800; - letter-spacing: 1.7px; - text-transform: uppercase; - color: rgba(255, 255, 255, 0.6); - margin-bottom: 8px; - } - - .est-photo-caption strong { - display: block; - font-size: clamp(24px, 3vw, 42px); - font-weight: 900; - line-height: 1.02; - letter-spacing: -0.04em; - } - - .est-copy { - border-radius: 26px; - background: #09090b; - color: #ffffff; - padding: clamp(34px, 5vw, 62px); - display: flex; - flex-direction: column; - justify-content: space-between; - overflow: hidden; - position: relative; - } - - .est-copy::before { - content: ""; - position: absolute; - width: 320px; - height: 320px; - right: -120px; - top: -120px; - background: radial-gradient(circle, rgba(200, 16, 46, 0.42), transparent 68%); - pointer-events: none; - } - - .est-quote-mark { - position: relative; - font-family: Georgia, serif; - font-size: 92px; - line-height: 0.8; - color: #c8102e; - display: block; - margin-bottom: 20px; - } - - .est-quote-text { - position: relative; - font-size: clamp(25px, 3vw, 44px); - font-weight: 800; - line-height: 1.12; - letter-spacing: -0.04em; - color: #ffffff; - margin: 0 0 28px 0; - } - - .est-narrative { - position: relative; - font-size: 15.5px; - line-height: 1.68; - color: rgba(255, 255, 255, 0.66); - margin: 0; - max-width: 46ch; - } - - .est-person { - position: relative; - padding-top: clamp(38px, 5vw, 64px); - } - - .est-person-name { - font-size: 18px; - font-weight: 900; - color: #ffffff; - } - - .est-person-role { - font-size: 13.5px; - color: rgba(255, 255, 255, 0.52); - margin-top: 3px; - } - - .est-list-label { - font-size: 12px; - font-weight: 800; - letter-spacing: 1.8px; - text-transform: uppercase; - color: rgba(17, 17, 17, 0.42); - padding-top: clamp(24px, 3vw, 38px); - border-top: 1px solid rgba(17, 17, 17, 0.14); - margin-bottom: clamp(20px, 3vw, 30px); - } - - .est-list { - display: flex; - gap: 18px; - overflow-x: auto; - scroll-snap-type: x mandatory; - padding-bottom: 12px; - margin-bottom: clamp(6px, 1vw, 10px); - -webkit-overflow-scrolling: touch; - } - - .est-list::-webkit-scrollbar { - height: 4px; - } - - .est-list::-webkit-scrollbar-thumb { - background: rgba(17, 17, 17, 0.18); - border-radius: 100px; - } - - .est-row { - scroll-snap-align: start; - flex: 0 0 clamp(260px, 30vw, 340px); - min-height: 220px; - padding: clamp(24px, 2.6vw, 32px); - border: 1px solid rgba(17, 17, 17, 0.14); - border-radius: 20px; - display: flex; - flex-direction: column; - justify-content: space-between; - transition: border-color 0.3s ease, transform 0.3s ease; - } - - .est-row:hover { - border-color: rgba(200, 16, 46, 0.4); - transform: translateY(-4px); - } - - .est-row-name { - font-size: 20px; - font-weight: 900; - color: #111111; - } - - .est-row-role { - font-size: 13px; - font-weight: 800; - letter-spacing: 1.4px; - text-transform: uppercase; - color: #c8102e; - margin-top: 6px; - } - - .est-row-line { - font-size: 15px; - line-height: 1.6; - color: rgba(17, 17, 17, 0.62); - margin: 28px 0 0; - } - - @media (max-width: 1000px) { - .est-head, - .est-feature { grid-template-columns: 1fr; } - .est-row { - min-height: 0; - flex-basis: 78vw; - } - } - - @media (max-width: 640px) { - .est-section { padding-top: 54px; padding-bottom: 54px; } - .est-title { - font-size: clamp(34px, 10vw, 40px) !important; - letter-spacing: -0.045em !important; - overflow-wrap: anywhere; - } - .est-quote-text { - font-size: clamp(25px, 8vw, 34px); - overflow-wrap: anywhere; - } - .est-photo, - .est-copy { border-radius: 20px; } - .est-photo { min-height: 420px; } - } - a:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$1e"}}],"$L1f"] -20:T16dc, - .epn-section { - position: relative; - width: calc(100% - 40px); - margin: clamp(24px, 4vw, 40px) auto; - border-radius: 28px; - overflow: hidden; - box-sizing: border-box; - background: #09090b; - padding: clamp(68px, 8vw, 112px) 0; - } - - .epn-section::before { - content: ""; - position: absolute; - inset: 0; - background: - linear-gradient(120deg, rgba(9, 9, 11, 0.98) 0%, rgba(9, 9, 11, 0.88) 54%, rgba(192, 18, 39, 0.18) 100%), - url("/images/wings-heroslider3.png"); - background-size: cover; - background-position: center 70%; - opacity: 1; - } - - .epn-inner { - position: relative; - z-index: 1; - max-width: 1380px; - margin: 0 auto; - } - - .epn-head { - display: flex; - flex-direction: column; - align-items: flex-start; - margin-bottom: clamp(50px, 7vw, 84px); - } - - .epn-head-reveal { - width: 100%; - } - - .epn-divider { - width: 100%; - height: 1px; - margin: 18px 0 clamp(24px, 3.5vw, 40px) 0; - border: none; - background-color: rgba(255, 255, 255, 0.16); - } - - .epn-eyebrow { - font-size: 13px; - font-weight: 800; - letter-spacing: 2.5px; - text-transform: uppercase; - color: rgba(255, 255, 255, 0.52); - } - - .epn-title { - max-width: 930px; - font-size: clamp(42px, 6.3vw, 90px) !important; - font-weight: 800 !important; - letter-spacing: -0.055em !important; - line-height: 0.98 !important; - text-transform: uppercase !important; - color: #ffffff !important; - margin: 0; - } - - .epn-title em { - color: #ff5470; - font-style: normal; - } - - .epn-body { - display: grid; - grid-template-columns: minmax(280px, 0.46fr) minmax(0, 1fr); - gap: clamp(32px, 5vw, 72px); - align-items: stretch; - } - - .epn-manifesto { - border-left: 4px solid #c8102e; - padding-left: clamp(22px, 3vw, 36px); - align-self: start; - } - - .epn-intro { - font-size: clamp(22px, 2.5vw, 36px); - font-weight: 800; - line-height: 1.12; - letter-spacing: -0.035em; - color: #ffffff; - margin: 0 0 22px; - } - - .epn-note { - font-size: 15.5px; - line-height: 1.68; - color: rgba(255, 255, 255, 0.62); - margin: 0; - max-width: 38ch; - } - - .epn-grid { - display: flex; - flex-direction: column; - border-top: 1px solid rgba(255, 255, 255, 0.16); - } - - .epn-card { - position: relative; - display: grid; - grid-template-columns: 70px minmax(0, 1fr) 32px; - align-items: center; - gap: clamp(18px, 3vw, 40px); - padding: clamp(22px, 2.6vw, 32px) clamp(4px, 1vw, 16px); - border-bottom: 1px solid rgba(255, 255, 255, 0.16); - border-left: 2px solid transparent; - transition: border-color 0.3s ease, padding-left 0.3s ease, background-color 0.3s ease; - } - - .epn-card:hover { - border-left-color: #c8102e; - background: rgba(200, 16, 46, 0.06); - padding-left: clamp(20px, 2.5vw, 32px); - } - - .epn-card-index { - font-size: 15px; - font-weight: 900; - color: rgba(255, 255, 255, 0.35); - } - - .epn-card-title { - font-size: clamp(22px, 2.2vw, 30px) !important; - font-weight: 900 !important; - line-height: 1.1 !important; - letter-spacing: -0.03em !important; - text-transform: none !important; - color: #ffffff !important; - margin: 0 0 8px; - } - - .epn-card-desc { - max-width: 46ch; - font-size: 14.5px; - line-height: 1.6; - color: rgba(255, 255, 255, 0.58); - margin: 0; - } - - .epn-card-arrow { - display: flex; - color: rgba(255, 255, 255, 0.3); - transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1), color 0.3s ease; - } - - .epn-card:hover .epn-card-arrow { - transform: translateX(4px); - color: #ff5470; - } - - .epn-cta { - margin-top: clamp(42px, 5vw, 64px); - } - - .epn-cta-btn { - display: inline-flex; - align-items: center; - gap: 10px; - padding: 16px 36px; - border-radius: 100px; - background: #c01227; - color: #ffffff !important; - font-weight: 800; - font-size: 15px; - text-decoration: none !important; - transition: transform 0.35s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.35s ease; - } - - .epn-cta-btn:hover { - transform: translateY(-3px); - box-shadow: 0 14px 30px rgba(192, 18, 39, 0.35); - } - - @media (max-width: 1024px) { - .epn-section { width: calc(100% - 24px); border-radius: 22px; } - } - - @media (max-width: 900px) { - .epn-head, - .epn-body { grid-template-columns: 1fr; } - } - - @media (max-width: 700px) { - .epn-title { - font-size: clamp(34px, 10vw, 40px) !important; - letter-spacing: -0.045em !important; - overflow-wrap: anywhere; - } - .epn-card { - grid-template-columns: 44px minmax(0, 1fr); - } - .epn-card-arrow { display: none; } - } - - @media (max-width: 460px) { - .epn-section { padding-top: 54px; padding-bottom: 54px; } - } - b:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$20"}}],"$L21"] -22:Tdad, - .emp-cta-wrap { - width: calc(100% - 40px); - margin: clamp(24px, 4vw, 40px) auto clamp(40px, 5vw, 64px); - } - - .emp-cta { - position: relative; - overflow: hidden; - border-radius: 28px; - min-height: clamp(480px, 48vw, 680px); - background: #09090b; - display: flex; - align-items: flex-end; - } - - .emp-cta::before { - content: ""; - position: absolute; - inset: 0; - background-image: - linear-gradient(180deg, rgba(9, 9, 11, 0.18) 0%, rgba(9, 9, 11, 0.52) 48%, rgba(9, 9, 11, 0.96) 100%), - linear-gradient(90deg, rgba(9, 9, 11, 0.88) 0%, rgba(9, 9, 11, 0.35) 58%, rgba(9, 9, 11, 0.12) 100%), - url("/images/bg-header-women.webp"); - background-size: cover; - background-position: center; - transform: scale(1.02); - } - - .emp-cta-inner { - position: relative; - z-index: 1; - max-width: 1380px; - width: 100%; - margin: 0 auto; - padding: clamp(46px, 7vw, 88px) clamp(24px, 5vw, 64px); - box-sizing: border-box; - } - - .emp-cta-recap { - display: flex; - gap: clamp(28px, 4vw, 52px); - margin-bottom: clamp(28px, 4vw, 44px); - padding-bottom: clamp(24px, 3vw, 36px); - border-bottom: 1px solid rgba(255, 255, 255, 0.16); - } - - .emp-cta-recap-item { - display: flex; - align-items: baseline; - gap: 10px; - } - - .emp-cta-recap-num { - font-size: clamp(22px, 2.4vw, 32px); - font-weight: 900; - letter-spacing: -0.02em; - color: transparent; - -webkit-text-stroke: 1.3px rgba(255, 255, 255, 0.85); - } - - .emp-cta-recap-label { - font-size: 12px; - font-weight: 700; - letter-spacing: 0.6px; - color: rgba(255, 255, 255, 0.5); - } - - .emp-cta-kicker { - font-size: 13px; - font-weight: 900; - letter-spacing: 2.4px; - text-transform: uppercase; - color: #ff5470; - margin-bottom: 22px; - } - - .emp-cta-title { - max-width: 980px; - color: #ffffff !important; - font-size: clamp(44px, 7vw, 108px) !important; - font-weight: 900 !important; - line-height: 0.95 !important; - letter-spacing: -0.06em !important; - text-transform: uppercase !important; - margin: 0 0 clamp(24px, 3vw, 34px); - } - - .emp-cta-title em { - color: #ff5470; - font-style: normal; - } - - .emp-cta-bottom { - display: block; - max-width: 1120px; - } - - .emp-cta-sub { - max-width: 620px; - font-size: 16px; - line-height: 1.68; - color: rgba(255, 255, 255, 0.68); - margin: 0; - } - - @media (max-width: 1024px) { - .emp-cta-wrap { width: calc(100% - 24px); } - .emp-cta { border-radius: 22px; } - } - - @media (max-width: 760px) { - .emp-cta { min-height: 600px; } - .emp-cta::before { background-position: 76% center; } - .emp-cta-title { - font-size: clamp(36px, 11vw, 44px) !important; - letter-spacing: -0.05em !important; - overflow-wrap: anywhere; - } - .emp-cta-recap { flex-wrap: wrap; row-gap: 14px; } - } - c:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$22"}}],"$L23"] -d:["$","script","script-0",{"src":"/_next/static/chunks/0vzdvje64yndv.js","async":true}] -e:["$","$L24",null,{"children":["$","$25",null,{"name":"Next.MetadataOutlet","children":"$@26"}]}] -12:["$","section",null,{"className":"ev-section","id":"wings-empowerment-vision","children":[["$","div",null,{"className":"ev-map","aria-hidden":"true","children":["$","$L27",null,{}]}],["$","div",null,{"className":"dm-section-container","children":["$","div",null,{"className":"ev-inner","children":[["$","$Lf",null,{"delay":0.05,"duration":0.7,"yOffset":20,"children":[["$","p",null,{"className":"ev-eyebrow","children":"/ Our Vision /"}],["$","hr",null,{"className":"ev-divider"}]]}],["$","$Lf",null,{"delay":0.12,"duration":0.85,"yOffset":30,"children":["$","h2",null,{"className":"ev-title","children":"Women Own The Future."}]}],["$","div",null,{"className":"ev-columns","children":[["$","$Lf",null,{"delay":0.18,"duration":0.8,"yOffset":25,"children":["$","p",null,{"className":"ev-statement","children":"A logistics ecosystem where women don’t just participate — they own, build, and lead."}]}],["$","$Lf",null,{"delay":0.26,"duration":0.8,"yOffset":25,"className":"ev-support","children":[["$","div",null,{"className":"ev-block","children":[["$","p",null,{"className":"ev-block-label","children":"The vision"}],["$","p",null,{"className":"ev-lead","children":"We are building an entrepreneurial ecosystem where women launch enterprises, scale operations, and shape the future of logistics from the inside."}]]}],["$","div",null,{"className":"ev-block","children":[["$","p",null,{"className":"ev-block-label","children":"Why it matters"}],["$","p",null,{"className":"ev-note","children":"Industries transform when founders emerge from every corner. Women-led enterprises bring fresh perspective, operational resilience, and long-term economic impact to logistics."}]]}],["$","div",null,{"className":"ev-block","children":[["$","p",null,{"className":"ev-block-label","children":"How Wings contributes"}],["$","p",null,{"className":"ev-note","children":"Wings provides the infrastructure — strategic partnerships, funding access, founder networks, and industry connections — that turns ambition into enterprise."}]]}]]}]]}]]}]}]]}] -14:["$","$Lf",null,{"delay":0.05,"duration":0.85,"yOffset":25,"children":[["$","div",null,{"className":"esy-eyebrow","children":"/ Our Approach /"}],["$","p",null,{"className":"esy-statement","children":["Not a program on a brochure. ",["$","em",null,{"children":"An ecosystem women can build in."}]]}]]}] -15:["$","$Lf",null,{"delay":0.15,"duration":0.8,"yOffset":25,"className":"esy-side","children":[["$","span",null,{"className":"esy-label","children":"Manifesto"}],["$","p",null,{"className":"esy-pull","children":"A venture that starts with conviction. A network that turns it into momentum."}],["$","p",null,{"className":"esy-sub","children":"Wings is designed around the moments that define a founder: the first partnership signed, the first client won, the first team hired, the first enterprise scaled."}]]}] -17:["$","div",null,{"id":"women-entrepreneurship","className":"elementor-element elementor-element-bbc6760 e-con-full e-flex cut-corner-no sticky-container-off e-con e-parent","data-id":"bbc6760","data-element_type":"container","data-e-type":"container","style":{"backgroundColor":"#1f1f1f","width":"calc(100% - 40px)","marginLeft":"20px","marginRight":"20px","borderRadius":"25px"},"children":[["$","div",null,{"className":"elementor-element elementor-element-13a7637 elementor-widget__width-auto elementor-absolute elementor-widget elementor-widget-logico_decorative_block","data-id":"13a7637","data-element_type":"widget","data-e-type":"widget","style":{"position":"absolute"},"children":["$","div",null,{"className":"elementor-widget-container","children":["$","div",null,{"className":"block-decoration animation-enable block-decoration-style-1","children":["$","div",null,{"className":"block-decoration-item"}]}]}]}],["$","div",null,{"style":{"backgroundImage":"url(/images/bg-header-women.webp)"},"className":"elementor-element elementor-element-7da6646 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"7da6646","data-element_type":"container","data-e-type":"container"}],["$","div",null,{"className":"elementor-element elementor-element-8b5d6e6 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"8b5d6e6","data-element_type":"container","data-e-type":"container","children":["$","div",null,{"className":"elementor-element elementor-element-1f766ea e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"1f766ea","data-element_type":"container","data-e-type":"container","children":[["$","div",null,{"className":"elementor-element elementor-element-3b61435 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"3b61435","data-element_type":"container","data-e-type":"container","data-settings":"{\"background_background\":\"classic\"}","children":[["$","div",null,{"className":"elementor-element elementor-element-c364d1c elementor-widget elementor-widget-text-editor","data-id":"c364d1c","data-element_type":"widget","data-e-type":"widget","data-widget_type":"text-editor.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","p",null,{"children":"01"}]}]}],["$","div",null,{"className":"elementor-element elementor-element-239afbb elementor-widget elementor-widget-logico_heading","data-id":"239afbb","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","h5",null,{"className":"logico-title","children":"Women Entrepreneurship"}]}]}],["$","div",null,{"className":"elementor-element elementor-element-0d307dd elementor-widget elementor-widget-text-editor","data-id":"0d307dd","data-element_type":"widget","data-e-type":"widget","data-widget_type":"text-editor.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","p",null,{"children":"An ecosystem where women build, own, and scale enterprises across logistics."}]}]}]]}],["$","div",null,{"className":"elementor-element elementor-element-5aea22e e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"5aea22e","data-element_type":"container","data-e-type":"container","data-settings":"{\"background_background\":\"classic\"}","children":["$","div",null,{"className":"elementor-element elementor-element-46b9ffa elementor-widget elementor-widget-logico_button","data-id":"46b9ffa","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_button.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","div",null,{"className":"button-widget","children":["$","div",null,{"className":"button-container","children":["$","a",null,{"href":"#wings-empowerment-programs","className":"logico-small-button","children":["Explore the ecosystem",["$","svg",null,{"viewBox":"0 0 13 20","children":"$L28"}]]}]}]}]}]}]}]]}]}],"$L29"]}] -19:["$","section",null,{"className":"epr-section","id":"wings-empowerment-programs","children":["$","div",null,{"className":"dm-section-container","children":["$","div",null,{"className":"epr-inner","children":[["$","div",null,{"className":"epr-head","children":[["$","$Lf",null,{"delay":0.05,"duration":0.75,"yOffset":20,"className":"epr-head-reveal","children":[["$","div",null,{"className":"epr-eyebrow","children":"/ Entrepreneurship Pillars /"}],["$","hr",null,{"className":"epr-divider"}]]}],["$","$Lf",null,{"delay":0.1,"duration":0.85,"yOffset":24,"children":["$","h2",null,{"className":"epr-title","children":"Every pillar is built around ownership."}]}]]}],["$","div",null,{"className":"epr-stage","children":[["$","div",null,{"className":"epr-aside-wrap","children":["$","aside",null,{"className":"epr-aside","children":[["$","div",null,{"className":"epr-aside-map","aria-hidden":"true","children":["$","$L27",null,{}]}],["$","$Lf",null,{"delay":0.05,"duration":0.8,"yOffset":24,"className":"epr-aside-content","children":[["$","div",null,{"className":"epr-aside-num","children":"05"}],["$","p",null,{"className":"epr-aside-copy","children":["Building tomorrow’s ",["$","em",null,{"children":"women entrepreneurs."}]]}],["$","p",null,{"className":"epr-aside-desc","children":"Every enterprise starts with one decision. Our pillars move women from idea to ownership through mentorship, real industry partnerships, and hands-on venture building across the logistics ecosystem."}],["$","hr",null,{"className":"epr-aside-divider"}],["$","div",null,{"className":"epr-aside-label","children":"Journey Summary"}],["$","p",null,{"className":"epr-aside-desc","children":"Each pillar builds on the one before it — moving founders from validating an idea, to forming partnerships, to receiving hands-on guidance, to growing a sustainable logistics business."}],["$","div",null,{"className":"epr-aside-label","children":"What Participants Gain"}],["$","ul",null,{"className":"epr-aside-gains-list","children":[["$","li","Business validation",{"children":"Business validation"}],["$","li","Industry partnerships",{"children":"Industry partnerships"}],["$","li","Founder mentorship",{"children":"Founder mentorship"}],["$","li","Market readiness",{"children":"Market readiness"}],["$","li","Sustainable growth",{"children":"Sustainable growth"}]]}],["$","p",null,{"className":"epr-aside-final","children":["The destination is never just launching a business. It is building ",["$","em",null,{"children":"women-led enterprises that strengthen the logistics ecosystem."}]]}]]}]]}]}],["$","div",null,{"children":[["$","$Lf",null,{"delay":0.1,"duration":0.8,"yOffset":24,"children":["$","div",null,{"className":"epr-list","children":[["$","article","Venture Launchpad",{"className":"epr-row epr-row-featured","children":[["$","div",null,{"className":"epr-row-index","children":"01"}],["$","div",null,{"children":[["$","span",null,{"className":"epr-row-flag","children":"Where most founders begin"}],["$","span",null,{"className":"epr-row-type","children":"Start building"}],["$","h3",null,{"className":"epr-row-title","children":"Venture Launchpad"}],["$","p",null,{"className":"epr-row-desc","children":"Business model validation, market entry strategy, entity formation, and go-to-market execution for women-led logistics enterprises."}]]}]]}],["$","article","Strategic Partnerships",{"className":"epr-row","children":[["$","div",null,{"className":"epr-row-index","children":"02"}],["$","div",null,{"children":[false,["$","span",null,{"className":"epr-row-type","children":"Connect and grow"}],["$","h3",null,{"className":"epr-row-title","children":"Strategic Partnerships"}],["$","p",null,{"className":"epr-row-desc","children":"Direct access to supply chain networks, B2B relationships, industry alliances, and commercial agreements that accelerate growth."}]]}]]}],["$","article","Founder Mentorship",{"className":"epr-row","children":[["$","div",null,{"className":"epr-row-index","children":"03"}],["$","div",null,{"children":[false,["$","span",null,{"className":"epr-row-type","children":"Learn from builders"}],["$","h3",null,{"className":"epr-row-title","children":"Founder Mentorship"}],["$","p",null,{"className":"epr-row-desc","children":"One-on-one guidance from established entrepreneurs, operators, and investors who understand what it takes to scale."}]]}]]}],["$","article","Growth & Scale",{"className":"epr-row","children":["$L2a","$L2b"]}],"$L2c"]}]}],"$L2d"]}]]}]]}]}]}] -1b:["$","section",null,{"className":"eim-section","id":"wings-empowerment-impact","children":["$","div",null,{"className":"eim-inner dm-section-container","children":[["$","$Lf",null,{"delay":0.05,"duration":0.75,"yOffset":20,"children":[["$","div",null,{"className":"eim-eyebrow","children":"/ Our Impact /"}],["$","h2",null,{"className":"eim-title","children":"Growth we can measure"}]]}],["$","hr",null,{"className":"eim-divider"}],["$","$Lf",null,{"delay":0.08,"duration":0.8,"yOffset":20,"className":"eim-hero-row","children":[["$","span",null,{"className":"eim-hero-num","children":["$","$L2e",null,{"end":500,"suffix":"+","duration":2.2,"triggerOnce":true}]}],["$","span",null,{"className":"eim-hero-label","children":"Women-Led Enterprises In The Ecosystem"}]]}],["$","hr",null,{"className":"eim-divider-2"}],["$","$Lf",null,{"delay":0.1,"duration":0.8,"yOffset":20,"children":["$","div",null,{"className":"eim-secondary-row","children":[["$","div","Enterprises Launched",{"className":"eim-secondary-item","children":[["$","span",null,{"className":"eim-secondary-num","children":["$","$L2e",null,{"end":100,"suffix":"+","duration":2,"triggerOnce":true}]}],["$","span",null,{"className":"eim-secondary-label","children":"Enterprises Launched"}]]}],["$","div","Industry Partners",{"className":"eim-secondary-item","children":[["$","span",null,{"className":"eim-secondary-num","children":["$","$L2e",null,{"end":25,"suffix":"+","duration":2,"triggerOnce":true}]}],["$","span",null,{"className":"eim-secondary-label","children":"Industry Partners"}]]}],["$","div","Cities Active",{"className":"eim-secondary-item","children":[["$","span",null,{"className":"eim-secondary-num","children":["$","$L2e",null,{"end":15,"suffix":"+","duration":2,"triggerOnce":true}]}],["$","span",null,{"className":"eim-secondary-label","children":"Cities Active"}]]}],["$","div","In Economic Value Created",{"className":"eim-secondary-item","children":[["$","span",null,{"className":"eim-secondary-num","children":"Millions"}],["$","span",null,{"className":"eim-secondary-label","children":"In Economic Value Created"}]]}]]}]}],["$","$Lf",null,{"delay":0.12,"duration":0.75,"yOffset":20,"className":"eim-copy","children":["$","p",null,{"children":"Every number on this page represents a woman who walked into a room with an idea and walked out with a business. An enterprise launched, a partnership secured, a market entered — each is a marker of real economic impact, not a statistic collected for its own sake."}]}]]}]}] -1d:["$","section",null,{"className":"ehw-section","id":"wings-empowerment-how-it-works","children":["$","div",null,{"className":"dm-section-container","children":["$","div",null,{"className":"ehw-inner","children":[["$","div",null,{"className":"ehw-head","children":[["$","$Lf",null,{"delay":0.05,"duration":0.75,"yOffset":20,"className":"ehw-head-reveal","children":[["$","div",null,{"className":"ehw-eyebrow","children":"/ The Founder Journey /"}],["$","hr",null,{"className":"ehw-divider"}]]}],["$","$Lf",null,{"delay":0.1,"duration":0.85,"yOffset":24,"children":["$","h2",null,{"className":"ehw-title","children":"A clear path, from idea to enterprise"}]}]]}],["$","$L2f",null,{"className":"ehw-sequence","stagger":0.12,"duration":0.7,"yOffset":30,"triggerOnce":true,"children":[["$","div","01",{"className":"ehw-step","children":[["$","div",null,{"className":"ehw-step-num","children":"01"}],["$","div",null,{"className":"ehw-step-kicker","aria-hidden":"true","children":[["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M7 17 17 7M9 7h8v8"}]}],["$","span",null,{"children":"Step"}]]}],["$","h3",null,{"className":"ehw-step-title","children":"Apply"}],["$","p",null,{"className":"ehw-step-desc","children":"Submit your venture idea and tell us about your entrepreneurial vision."}]]}],["$","div","02",{"className":"ehw-step","children":[["$","div",null,{"className":"ehw-step-num","children":"02"}],["$","div",null,{"className":"ehw-step-kicker","aria-hidden":"true","children":[["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M7 17 17 7M9 7h8v8"}]}],["$","span",null,{"children":"Step"}]]}],["$","h3",null,{"className":"ehw-step-title","children":"Discovery"}],["$","p",null,{"className":"ehw-step-desc","children":"Identify the right market opportunity and validate your business model."}]]}],["$","div","03",{"className":"ehw-step is-accent","children":[["$","div",null,{"className":"ehw-step-num","children":"03"}],["$","div",null,{"className":"ehw-step-kicker","aria-hidden":"true","children":[["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M7 17 17 7M9 7h8v8"}]}],["$","span",null,{"children":"Step"}]]}],["$","h3",null,{"className":"ehw-step-title","children":"Build"}],["$","p",null,{"className":"ehw-step-desc","children":"Develop your enterprise with ecosystem support, mentorship, and partnerships."}]]}],["$","div","04",{"className":"ehw-step","children":[["$","div",null,{"className":"ehw-step-num","children":"04"}],["$","div",null,{"className":"ehw-step-kicker","aria-hidden":"true","children":[["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M7 17 17 7M9 7h8v8"}]}],["$","span",null,{"children":"Step"}]]}],["$","h3",null,{"className":"ehw-step-title","children":"Launch"}],["$","p",null,{"className":"ehw-step-desc","children":"Go to market with strategic backing, industry connections, and operational infrastructure."}]]}],["$","div","05",{"className":"ehw-step","children":[["$","div",null,{"className":"ehw-step-num","children":"05"}],["$","div",null,{"className":"ehw-step-kicker","aria-hidden":"true","children":[["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M7 17 17 7M9 7h8v8"}]}],["$","span",null,{"children":"Step"}]]}],["$","h3",null,{"className":"ehw-step-title","children":"Scale"}],["$","p",null,{"className":"ehw-step-desc","children":"Grow your team, expand operations, and lead your enterprise to sustainable impact."}]]}]]}]]}]}]}] -1f:["$","section",null,{"className":"est-section","id":"wings-empowerment-stories","children":["$","div",null,{"className":"dm-section-container","children":["$","div",null,{"className":"est-inner","children":[["$","div",null,{"className":"est-head","children":[["$","$Lf",null,{"delay":0.05,"duration":0.75,"yOffset":20,"className":"est-head-reveal","children":[["$","div",null,{"className":"est-eyebrow","children":"/ Women in Motion /"}],["$","hr",null,{"className":"est-divider"}]]}],["$","$Lf",null,{"delay":0.1,"duration":0.85,"yOffset":24,"children":["$","h2",null,{"className":"est-title","children":"Small steps. Lasting careers."}]}]]}],["$","div",null,{"className":"est-feature","children":[["$","$Lf",null,{"delay":0.05,"duration":0.85,"yOffset":24,"className":"est-photo","children":[["$","$L30",null,{"src":"/images/women-hero-slider-3.png","alt":"A Wings program participant on the operations floor at a Doormile logistics hub","fill":true,"sizes":"(max-width: 1000px) 100vw, 58vw","style":{"objectPosition":"80% 22%"}}],["$","div",null,{"className":"est-photo-caption","children":[["$","span",null,{"children":"Wings Participant"}],["$","strong",null,{"children":" building a career, one milestone at a time."}]]}]]}],["$","$Lf",null,{"delay":0.12,"duration":0.85,"yOffset":24,"className":"est-copy","children":["$","div",null,{"children":[["$","span",null,{"className":"est-quote-mark","aria-hidden":"true","children":"“"}],["$","p",null,{"className":"est-quote-text","children":"I came in looking for a way forward. I found the confidence to lead."}],["$","p",null,{"className":"est-narrative","children":"She started with limited exposure to logistics. Through structured training, mentorship, and hands-on experience, she built real operational skills — and now supports other women stepping into the industry."}]]}]}]]}]]}]}]}] -21:["$","section",null,{"className":"epn-section","id":"wings-empowerment-partners","children":["$","div",null,{"className":"dm-section-container","children":["$","div",null,{"className":"epn-inner","children":[["$","div",null,{"className":"epn-head","children":[["$","$Lf",null,{"delay":0.05,"duration":0.75,"yOffset":20,"className":"epn-head-reveal","children":[["$","div",null,{"className":"epn-eyebrow","children":"/ Collaboration /"}],["$","hr",null,{"className":"epn-divider"}]]}],["$","$Lf",null,{"delay":0.1,"duration":0.85,"yOffset":24,"children":["$","h2",null,{"className":"epn-title","children":["Partnership is how ",["$","em",null,{"children":"ecosystems grow."}]]}]}]]}],["$","div",null,{"className":"epn-body","children":[["$","$Lf",null,{"delay":0.08,"duration":0.8,"yOffset":22,"className":"epn-manifesto","children":[["$","p",null,{"className":"epn-intro","children":"The strongest ecosystems are built by many hands."}],["$","p",null,{"className":"epn-note","children":"Wings partners bring industry access, strategic infrastructure, capital, and networks. Together, we build the foundation women-led enterprises need to thrive."}]]}],["$","$Lf",null,{"delay":0.12,"duration":0.8,"yOffset":22,"children":["$","div",null,{"className":"epn-grid","children":[["$","article","Industry Partners",{"className":"epn-card","children":[["$","span",null,{"className":"epn-card-index","children":"01"}],["$","div",null,{"children":[["$","h3",null,{"className":"epn-card-title","children":"Industry Partners"}],["$","p",null,{"className":"epn-card-desc","children":"Strategic alliances with logistics operators, supply chain leaders, and distribution networks that open doors for women-led enterprises."}]]}],["$","span",null,{"className":"epn-card-arrow","aria-hidden":"true","children":["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M5 12h14M13 6l6 6-6 6"}]}]}]]}],["$","article","Technology Partners",{"className":"epn-card","children":[["$","span",null,{"className":"epn-card-index","children":"02"}],["$","div",null,{"children":[["$","h3",null,{"className":"epn-card-title","children":"Technology Partners"}],["$","p",null,{"className":"epn-card-desc","children":"Platforms, tools, and infrastructure that give founders the operational edge to compete and scale efficiently."}]]}],["$","span",null,{"className":"epn-card-arrow","aria-hidden":"true","children":["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M5 12h14M13 6l6 6-6 6"}]}]}]]}],["$","article","Community Networks",{"className":"epn-card","children":[["$","span",null,{"className":"epn-card-index","children":"03"}],["$","div",null,{"children":[["$","h3",null,{"className":"epn-card-title","children":"Community Networks"}],["$","p",null,{"className":"epn-card-desc","children":"Founder communities, women's business networks, and ecosystem builders who extend reach and amplify impact."}]]}],["$","span",null,{"className":"epn-card-arrow","aria-hidden":"true","children":["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M5 12h14M13 6l6 6-6 6"}]}]}]]}],["$","article","Investment Partners",{"className":"epn-card","children":[["$","span",null,{"className":"epn-card-index","children":"04"}],["$","div",null,{"children":[["$","h3",null,{"className":"epn-card-title","children":"Investment Partners"}],["$","p",null,{"className":"epn-card-desc","children":"Funding access, grant programs, angel networks, and capital partners aligned with women-led enterprise growth."}]]}],["$","span",null,{"className":"epn-card-arrow","aria-hidden":"true","children":["$","svg",null,{"width":"20","height":"20","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M5 12h14M13 6l6 6-6 6"}]}]}]]}]]}]}]]}]]}]}]}] -23:["$","div",null,{"className":"emp-cta-wrap","children":["$","section",null,{"className":"emp-cta","aria-labelledby":"empowerment-final-cta","children":["$","div",null,{"className":"emp-cta-inner","children":[["$","div",null,{"className":"emp-cta-recap","children":[["$","div",null,{"className":"emp-cta-recap-item","children":[["$","span",null,{"className":"emp-cta-recap-num","children":"500+"}],["$","span",null,{"className":"emp-cta-recap-label","children":"Women Founders"}]]}],["$","div",null,{"className":"emp-cta-recap-item","children":[["$","span",null,{"className":"emp-cta-recap-num","children":"100+"}],["$","span",null,{"className":"emp-cta-recap-label","children":"Enterprises Launched"}]]}],["$","div",null,{"className":"emp-cta-recap-item","children":[["$","span",null,{"className":"emp-cta-recap-num","children":"25+"}],["$","span",null,{"className":"emp-cta-recap-label","children":"Industry Partners"}]]}]]}],["$","div",null,{"className":"emp-cta-kicker","children":"/ Build the next mile /"}],["$","h2",null,{"className":"emp-cta-title","id":"empowerment-final-cta","children":["Build what’s ",["$","em",null,{"children":"next."}]]}],["$","div",null,{"className":"emp-cta-bottom","children":["$","p",null,{"className":"emp-cta-sub","children":"Join Doormile Wings in building the entrepreneurial ecosystem where women launch, grow, and lead enterprises that create lasting value across logistics."}]}]]}]}]}] -26:null -28:["$","polyline",null,{"points":"0.5 19.5 3 19.5 12.5 10 3 0.5"}] -29:["$","div",null,{"className":"elementor-element elementor-element-b6e14bd e-flex e-con-boxed cut-corner-no sticky-container-off e-con e-child","data-id":"b6e14bd","data-element_type":"container","data-e-type":"container","data-settings":"{\"background_background\":\"classic\"}","children":[["$","div",null,{"className":"ws-map","aria-hidden":"true","children":["$","$L27",null,{}]}],["$","div",null,{"className":"e-con-inner","children":["$","div",null,{"className":"elementor-element elementor-element-90cc867 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"90cc867","data-element_type":"container","data-e-type":"container","children":[["$","div",null,{"className":"elementor-element elementor-element-24c0280 elementor-widget__width-inherit elementor-widget elementor-widget-logico_heading","data-id":"24c0280","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","div",null,{"className":"logico-title","children":"/ Doormile Wings /"}]}]}],["$","div",null,{"className":"elementor-element elementor-element-2ed47f3 e-con-full e-grid cut-corner-no sticky-container-off e-con e-child","data-id":"2ed47f3","data-element_type":"container","data-e-type":"container","children":[["$","div",null,{"className":"elementor-element elementor-element-36efec7 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"36efec7","data-element_type":"container","data-e-type":"container","children":[["$","$Lf",null,{"duration":0.8,"yOffset":28,"triggerOnce":true,"children":["$","div",null,{"className":"elementor-element elementor-element-778840d elementor-widget elementor-widget-logico_heading","data-id":"778840d","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","h3",null,{"className":"logico-title","children":"Women Building The Next Mile"}]}]}]}],["$","div",null,{"className":"elementor-element elementor-element-bbfb67f elementor-widget elementor-widget-image","data-id":"bbfb67f","data-element_type":"widget","data-e-type":"widget","data-widget_type":"image.default","children":["$","div",null,{"className":"elementor-widget-container","children":["$","$L30",null,{"src":"/images/bg-map-women.webp","alt":"Women Map","width":626,"height":692,"style":{"maxWidth":"100%","height":"auto"}}]}]}]]}],["$","div",null,{"className":"elementor-element elementor-element-b2c956f e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"b2c956f","data-element_type":"container","data-e-type":"container","children":["$","div",null,{"id":"ws-stories","children":[["$","$L2f",null,{"className":"ws__stats","stagger":0.1,"duration":0.6,"yOffset":20,"triggerOnce":true,"children":[["$","div","Women Founders",{"className":"ws__stat","children":[["$","div",null,{"className":"ws__stat-num","children":[["$","$L2e",null,{"end":500,"suffix":"","duration":1.8,"triggerOnce":true}],["$","span",null,{"children":"+"}]]}],["$","div",null,{"className":"ws__stat-label","children":"Women Founders"}]]}],["$","div","Cities Active",{"className":"ws__stat","children":[["$","div",null,{"className":"ws__stat-num","children":[["$","$L2e",null,{"end":35,"suffix":"","duration":1.8,"triggerOnce":true}],["$","span",null,{"children":"+"}]]}],["$","div",null,{"className":"ws__stat-label","children":"Cities Active"}]]}],["$","div","Enterprises Launched",{"className":"ws__stat","children":[["$","div",null,{"className":"ws__stat-num","children":[["$","$L2e",null,{"end":100,"suffix":"","duration":1.8,"triggerOnce":true}],["$","span",null,{"children":"+"}]]}],["$","div",null,{"className":"ws__stat-label","children":"Enterprises Launched"}]]}]]}],["$","$L2f",null,{"className":"ws__cards","stagger":0.08,"duration":0.6,"yOffset":24,"triggerOnce":true,"children":[["$","div","Venture Building",{"className":"ws__card","children":[["$","span",null,{"className":"ws__card-icon","aria-hidden":"true","children":["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"1.8","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","path",null,{"d":"M4 19V5"}],["$","path",null,{"d":"M4 7h12l-2 4 2 4H4"}],["$","path",null,{"d":"M18 19h2"}]]}]}],["$","div",null,{"className":"ws__card-title","children":"Venture Building"}],["$","p",null,{"className":"ws__card-desc","children":"End-to-end support for women launching logistics enterprises — from ideation to market entry."}]]}],"$L31","$L32","$L33"]}]]}]}]]}]]}]}]]}] -2a:["$","div",null,{"className":"epr-row-index","children":"04"}] -2b:["$","div",null,{"children":[false,["$","span",null,{"className":"epr-row-type","children":"Scale with confidence"}],["$","h3",null,{"className":"epr-row-title","children":"Growth & Scale"}],["$","p",null,{"className":"epr-row-desc","children":"Operational expansion frameworks, team building, funding readiness, and sustainable unit economics for ventures ready to grow."}]]}] -2c:["$","article","Industry Immersion",{"className":"epr-row","children":[["$","div",null,{"className":"epr-row-index","children":"05"}],["$","div",null,{"children":[false,["$","span",null,{"className":"epr-row-type","children":"See the opportunity"}],["$","h3",null,{"className":"epr-row-title","children":"Industry Immersion"}],["$","p",null,{"className":"epr-row-desc","children":"Real exposure to logistics operations, supply chain infrastructure, and distribution networks before founders commit to a vertical."}]]}]]}] -2d:["$","div",null,{"className":"epr-cta","children":["$","$L34",null,{"href":"/contact","className":"epr-cta-link","children":["Start your venture",["$","svg",null,{"width":"16","height":"16","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2.25","strokeLinecap":"round","strokeLinejoin":"round","children":["$","path",null,{"d":"M5 12h14M13 6l6 6-6 6"}]}]]}]}] -31:["$","div","Entrepreneurship",{"className":"ws__card","children":[["$","span",null,{"className":"ws__card-icon","aria-hidden":"true","children":["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"1.8","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","rect",null,{"x":"3","y":"7","width":"18","height":"13","rx":"2"}],["$","path",null,{"d":"M8 7V5a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2M3 12h18"}]]}]}],["$","div",null,{"className":"ws__card-title","children":"Entrepreneurship"}],["$","p",null,{"className":"ws__card-desc","children":"Women building, owning, and scaling sustainable businesses within the logistics ecosystem."}]]}] -32:["$","div","Founder Networks",{"className":"ws__card","children":[["$","span",null,{"className":"ws__card-icon","aria-hidden":"true","children":["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"1.8","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","circle",null,{"cx":"8","cy":"8","r":"3"}],["$","circle",null,{"cx":"16","cy":"8","r":"3"}],["$","path",null,{"d":"M2.5 20c.7-3.1 2.8-5 5.5-5s4.8 1.9 5.5 5"}],["$","path",null,{"d":"M10.5 20c.7-3.1 2.8-5 5.5-5s4.8 1.9 5.5 5"}]]}]}],["$","div",null,{"className":"ws__card-title","children":"Founder Networks"}],["$","p",null,{"className":"ws__card-desc","children":"Peer communities and strategic connections that accelerate growth and open new markets."}]]}] -33:["$","div","Enterprise Leadership",{"className":"ws__card","children":[["$","span",null,{"className":"ws__card-icon","aria-hidden":"true","children":["$","svg",null,{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"1.8","strokeLinecap":"round","strokeLinejoin":"round","children":[["$","circle",null,{"cx":"12","cy":"9","r":"5"}],["$","path",null,{"d":"M9 13.5 7.5 21 12 18l4.5 3-1.5-7.5"}]]}]}],["$","div",null,{"className":"ws__card-title","children":"Enterprise Leadership"}],["$","p",null,{"className":"ws__card-desc","children":"Strategic decision-making, operational excellence, and vision-driven leadership for women founders."}]]}] diff --git a/build/empowerment/__next.empowerment.txt b/build/empowerment/__next.empowerment.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/empowerment/__next.empowerment.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/express.html b/build/express.html deleted file mode 100644 index 8509a17..0000000 --- a/build/express.html +++ /dev/null @@ -1,756 +0,0 @@ -Express – Doormile

    Doormile

    Doormile logo
    Address
    Hyderabad

    5th Floor, Vision Ultima,
    Street No.3, Jayabheri Enclave,
    Gachibowli, Hyderabad,
    Telangana 500032.

    Coimbatore

    Mayflower Valencia,
    Near Nava India Bus Stop,
    Avinashi Road,
    Udayampalayam,
    Tamil Nadu 641037.

    Bengaluru

    C612, 6th Floor,
    Trifecta Starlight,
    ITPL Road,
    Garudacharapalya,
    Mahadevapura,
    Bangalore 560048,
    Karnataka, India.

    Contact Us

    Tel : +91 86886 97941

    Email

    care@doormile.com

    Solutions / Express

    Doormile Express is on its way

    We're building a fast-lane logistics service for time-critical shipments. Check back soon, or explore what Doormile already delivers today.

    \ No newline at end of file diff --git a/build/express.txt b/build/express.txt deleted file mode 100644 index b4ee347..0000000 --- a/build/express.txt +++ /dev/null @@ -1,113 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -11:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","express"],"q":"","i":false,"f":[[["",{"children":["express",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","div",null,{"id":"express","className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","section",null,{"className":"express-coming-soon","children":["$","div",null,{"className":"express-coming-soon-inner","children":[["$","span",null,{"className":"express-coming-soon-eyebrow","children":"Solutions / Express"}],["$","h1",null,{"className":"express-coming-soon-heading","children":["Doormile Express is ",["$","span",null,{"className":"express-coming-soon-accent","children":"on its way"}]]}],["$","p",null,{"className":"express-coming-soon-text","children":"We're building a fast-lane logistics service for time-critical shipments. Check back soon, or explore what Doormile already delivers today."}],"$Lc"]}]}]}]}],"$Ld"]}],null,"$Le"]}],{},null,false,null]},null,false,"$@f"]},null,false,null],"$L10",false]],"m":"$undefined","G":["$11",["$L12"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -13:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],""] -15:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -16:"$Sreact.suspense" -19:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -1b:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -c:["$","div",null,{"className":"express-coming-soon-actions","children":[["$","$L13",null,{"href":"/doormile-wings","prefetch":true,"className":"logico-alter-button","children":"Explore Doormile Wings"}],["$","$L13",null,{"href":"/contact","className":"express-coming-soon-link","children":"Get notified when we launch →"}]]}] -14:Tb69, - .express-coming-soon { - --logico-dark-text-color: #ffffff; - --logico-light-text-color: #bebebe; - --logico-accent-color: #C01227; - min-height: calc(100vh - 160px); - display: flex; - align-items: center; - justify-content: center; - padding: clamp(48px, 8vw, 120px) 24px; - background: radial-gradient(120% 120% at 50% 0%, rgba(192, 18, 39, 0.18) 0%, rgba(26, 26, 26, 0.98) 55%, #111111 100%); - } - .express-coming-soon-inner { - max-width: 720px; - text-align: center; - } - .express-coming-soon-eyebrow { - display: inline-block; - font-size: 13px; - font-weight: 700; - letter-spacing: 0.14em; - text-transform: uppercase; - color: var(--logico-accent-color); - margin-bottom: 20px; - } - .express-coming-soon-heading { - font-family: 'Manrope', sans-serif; - font-size: clamp(32px, 5vw, 56px); - line-height: 1.15em; - font-weight: 700; - color: var(--logico-dark-text-color); - margin: 0 0 20px; - } - .express-coming-soon-accent { - color: var(--logico-accent-color); - } - .express-coming-soon-text { - font-size: 16px; - line-height: 1.75em; - color: var(--logico-light-text-color); - margin: 0 auto 36px; - max-width: 520px; - } - .express-coming-soon-actions { - display: flex; - flex-wrap: wrap; - align-items: center; - justify-content: center; - gap: 24px; - } - .express-coming-soon .logico-alter-button { - color: #ffffff !important; - border-color: rgba(255, 255, 255, 0.45) !important; - background: transparent !important; - } - .express-coming-soon .logico-alter-button:hover { - background: #ffffff !important; - color: #1a1a1a !important; - border-color: #ffffff !important; - } - .express-coming-soon-link { - font-size: 15px; - font-weight: 600; - color: var(--logico-light-text-color); - text-decoration: underline; - text-underline-offset: 4px; - } - .express-coming-soon-link:hover { - color: #ffffff; - } - @media (max-width: 480px) { - .express-coming-soon-actions { - flex-direction: column; - gap: 16px; - } - } - d:["$","style",null,{"suppressHydrationWarning":true,"dangerouslySetInnerHTML":{"__html":"$14"}}] -e:["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}] -18:[] -f:"$W18" -10:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] -12:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] -1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -1d:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -17:null -1c:[["$","title","0",{"children":"Express – Doormile"}],["$","meta","1",{"name":"description","content":"Doormile Express — a fast-lane logistics service for time-critical shipments. Coming soon."}],["$","meta","2",{"name":"robots","content":"noindex, follow"}],["$","link","3",{"rel":"canonical","href":"https://doormile.com/express"}],["$","link","4",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","5",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","6",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","7",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L1d","8",{}]] diff --git a/build/express/__next._full.txt b/build/express/__next._full.txt deleted file mode 100644 index b4ee347..0000000 --- a/build/express/__next._full.txt +++ /dev/null @@ -1,113 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -11:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","express"],"q":"","i":false,"f":[[["",{"children":["express",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","div",null,{"id":"express","className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","section",null,{"className":"express-coming-soon","children":["$","div",null,{"className":"express-coming-soon-inner","children":[["$","span",null,{"className":"express-coming-soon-eyebrow","children":"Solutions / Express"}],["$","h1",null,{"className":"express-coming-soon-heading","children":["Doormile Express is ",["$","span",null,{"className":"express-coming-soon-accent","children":"on its way"}]]}],["$","p",null,{"className":"express-coming-soon-text","children":"We're building a fast-lane logistics service for time-critical shipments. Check back soon, or explore what Doormile already delivers today."}],"$Lc"]}]}]}]}],"$Ld"]}],null,"$Le"]}],{},null,false,null]},null,false,"$@f"]},null,false,null],"$L10",false]],"m":"$undefined","G":["$11",["$L12"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -13:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],""] -15:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -16:"$Sreact.suspense" -19:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -1b:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -c:["$","div",null,{"className":"express-coming-soon-actions","children":[["$","$L13",null,{"href":"/doormile-wings","prefetch":true,"className":"logico-alter-button","children":"Explore Doormile Wings"}],["$","$L13",null,{"href":"/contact","className":"express-coming-soon-link","children":"Get notified when we launch →"}]]}] -14:Tb69, - .express-coming-soon { - --logico-dark-text-color: #ffffff; - --logico-light-text-color: #bebebe; - --logico-accent-color: #C01227; - min-height: calc(100vh - 160px); - display: flex; - align-items: center; - justify-content: center; - padding: clamp(48px, 8vw, 120px) 24px; - background: radial-gradient(120% 120% at 50% 0%, rgba(192, 18, 39, 0.18) 0%, rgba(26, 26, 26, 0.98) 55%, #111111 100%); - } - .express-coming-soon-inner { - max-width: 720px; - text-align: center; - } - .express-coming-soon-eyebrow { - display: inline-block; - font-size: 13px; - font-weight: 700; - letter-spacing: 0.14em; - text-transform: uppercase; - color: var(--logico-accent-color); - margin-bottom: 20px; - } - .express-coming-soon-heading { - font-family: 'Manrope', sans-serif; - font-size: clamp(32px, 5vw, 56px); - line-height: 1.15em; - font-weight: 700; - color: var(--logico-dark-text-color); - margin: 0 0 20px; - } - .express-coming-soon-accent { - color: var(--logico-accent-color); - } - .express-coming-soon-text { - font-size: 16px; - line-height: 1.75em; - color: var(--logico-light-text-color); - margin: 0 auto 36px; - max-width: 520px; - } - .express-coming-soon-actions { - display: flex; - flex-wrap: wrap; - align-items: center; - justify-content: center; - gap: 24px; - } - .express-coming-soon .logico-alter-button { - color: #ffffff !important; - border-color: rgba(255, 255, 255, 0.45) !important; - background: transparent !important; - } - .express-coming-soon .logico-alter-button:hover { - background: #ffffff !important; - color: #1a1a1a !important; - border-color: #ffffff !important; - } - .express-coming-soon-link { - font-size: 15px; - font-weight: 600; - color: var(--logico-light-text-color); - text-decoration: underline; - text-underline-offset: 4px; - } - .express-coming-soon-link:hover { - color: #ffffff; - } - @media (max-width: 480px) { - .express-coming-soon-actions { - flex-direction: column; - gap: 16px; - } - } - d:["$","style",null,{"suppressHydrationWarning":true,"dangerouslySetInnerHTML":{"__html":"$14"}}] -e:["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}] -18:[] -f:"$W18" -10:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] -12:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] -1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -1d:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -17:null -1c:[["$","title","0",{"children":"Express – Doormile"}],["$","meta","1",{"name":"description","content":"Doormile Express — a fast-lane logistics service for time-critical shipments. Coming soon."}],["$","meta","2",{"name":"robots","content":"noindex, follow"}],["$","link","3",{"rel":"canonical","href":"https://doormile.com/express"}],["$","link","4",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","5",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","6",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","7",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L1d","8",{}]] diff --git a/build/express/__next._head.txt b/build/express/__next._head.txt deleted file mode 100644 index 37eface..0000000 --- a/build/express/__next._head.txt +++ /dev/null @@ -1,6 +0,0 @@ -1:"$Sreact.fragment" -2:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -3:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -4:"$Sreact.suspense" -5:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Express – Doormile"}],["$","meta","1",{"name":"description","content":"Doormile Express — a fast-lane logistics service for time-critical shipments. Coming soon."}],["$","meta","2",{"name":"robots","content":"noindex, follow"}],["$","link","3",{"rel":"canonical","href":"https://doormile.com/express"}],["$","link","4",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","5",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","6",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","7",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L5","8",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/express/__next._index.txt b/build/express/__next._index.txt deleted file mode 100644 index d0b3355..0000000 --- a/build/express/__next._index.txt +++ /dev/null @@ -1,15 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","template":["$","$La",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/express/__next._tree.txt b/build/express/__next._tree.txt deleted file mode 100644 index c2a0126..0000000 --- a/build/express/__next._tree.txt +++ /dev/null @@ -1,9 +0,0 @@ -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"express","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/express/__next.express.__PAGE__.txt b/build/express/__next.express.__PAGE__.txt deleted file mode 100644 index fac1f98..0000000 --- a/build/express/__next.express.__PAGE__.txt +++ /dev/null @@ -1,83 +0,0 @@ -1:"$Sreact.fragment" -2:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],""] -5:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -6:"$Sreact.suspense" -3:Tb69, - .express-coming-soon { - --logico-dark-text-color: #ffffff; - --logico-light-text-color: #bebebe; - --logico-accent-color: #C01227; - min-height: calc(100vh - 160px); - display: flex; - align-items: center; - justify-content: center; - padding: clamp(48px, 8vw, 120px) 24px; - background: radial-gradient(120% 120% at 50% 0%, rgba(192, 18, 39, 0.18) 0%, rgba(26, 26, 26, 0.98) 55%, #111111 100%); - } - .express-coming-soon-inner { - max-width: 720px; - text-align: center; - } - .express-coming-soon-eyebrow { - display: inline-block; - font-size: 13px; - font-weight: 700; - letter-spacing: 0.14em; - text-transform: uppercase; - color: var(--logico-accent-color); - margin-bottom: 20px; - } - .express-coming-soon-heading { - font-family: 'Manrope', sans-serif; - font-size: clamp(32px, 5vw, 56px); - line-height: 1.15em; - font-weight: 700; - color: var(--logico-dark-text-color); - margin: 0 0 20px; - } - .express-coming-soon-accent { - color: var(--logico-accent-color); - } - .express-coming-soon-text { - font-size: 16px; - line-height: 1.75em; - color: var(--logico-light-text-color); - margin: 0 auto 36px; - max-width: 520px; - } - .express-coming-soon-actions { - display: flex; - flex-wrap: wrap; - align-items: center; - justify-content: center; - gap: 24px; - } - .express-coming-soon .logico-alter-button { - color: #ffffff !important; - border-color: rgba(255, 255, 255, 0.45) !important; - background: transparent !important; - } - .express-coming-soon .logico-alter-button:hover { - background: #ffffff !important; - color: #1a1a1a !important; - border-color: #ffffff !important; - } - .express-coming-soon-link { - font-size: 15px; - font-weight: 600; - color: var(--logico-light-text-color); - text-decoration: underline; - text-underline-offset: 4px; - } - .express-coming-soon-link:hover { - color: #ffffff; - } - @media (max-width: 480px) { - .express-coming-soon-actions { - flex-direction: column; - gap: 16px; - } - } - 0:{"rsc":["$","$1","c",{"children":[["$","div",null,{"id":"express","className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":[["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","section",null,{"className":"express-coming-soon","children":["$","div",null,{"className":"express-coming-soon-inner","children":[["$","span",null,{"className":"express-coming-soon-eyebrow","children":"Solutions / Express"}],["$","h1",null,{"className":"express-coming-soon-heading","children":["Doormile Express is ",["$","span",null,{"className":"express-coming-soon-accent","children":"on its way"}]]}],["$","p",null,{"className":"express-coming-soon-text","children":"We're building a fast-lane logistics service for time-critical shipments. Check back soon, or explore what Doormile already delivers today."}],["$","div",null,{"className":"express-coming-soon-actions","children":[["$","$L2",null,{"href":"/doormile-wings","prefetch":true,"className":"logico-alter-button","children":"Explore Doormile Wings"}],["$","$L2",null,{"href":"/contact","className":"express-coming-soon-link","children":"Get notified when we launch →"}]]}]]}]}]}]}],["$","style",null,{"suppressHydrationWarning":true,"dangerouslySetInnerHTML":{"__html":"$3"}}]]}],null,"$L4"]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} -4:["$","$L5",null,{"children":["$","$6",null,{"name":"Next.MetadataOutlet","children":"$@7"}]}] -7:null diff --git a/build/express/__next.express.txt b/build/express/__next.express.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/express/__next.express.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/favicon.ico b/build/favicon.ico deleted file mode 100644 index 91c79c6..0000000 Binary files a/build/favicon.ico and /dev/null differ diff --git a/build/how-it-works.html b/build/how-it-works.html deleted file mode 100644 index 1b081d0..0000000 --- a/build/how-it-works.html +++ /dev/null @@ -1,891 +0,0 @@ -How It Works – Doormile

    Doormile

    Doormile logo
    Address
    Hyderabad

    5th Floor, Vision Ultima,
    Street No.3, Jayabheri Enclave,
    Gachibowli, Hyderabad,
    Telangana 500032.

    Coimbatore

    Mayflower Valencia,
    Near Nava India Bus Stop,
    Avinashi Road,
    Udayampalayam,
    Tamil Nadu 641037.

    Bengaluru

    C612, 6th Floor,
    Trifecta Starlight,
    ITPL Road,
    Garudacharapalya,
    Mahadevapura,
    Bangalore 560048,
    Karnataka, India.

    Contact Us

    Tel : +91 86886 97941

    Email

    care@doormile.com

    \ No newline at end of file diff --git a/build/how-it-works.txt b/build/how-it-works.txt deleted file mode 100644 index 03a28ad..0000000 --- a/build/how-it-works.txt +++ /dev/null @@ -1,33 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -c:I[74528,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0-8o5q..xlrv7.js"],"default"] -d:I[16948,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0-8o5q..xlrv7.js"],"default"] -e:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -f:"$Sreact.suspense" -12:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -14:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -16:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","how-it-works"],"q":"","i":false,"f":[[["",{"children":["how-it-works",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","div",null,{"id":"how-it-works","className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","div",null,{"data-elementor-type":"wp-page","data-elementor-id":"59","className":"elementor elementor-59","children":[["$","$Lc",null,{}],["$","$Ld",null,{}]]}]}]}]}],[["$","script","script-0",{"src":"/_next/static/chunks/0-8o5q..xlrv7.js","async":true,"nonce":"$undefined"}]],["$","$Le",null,{"children":["$","$f",null,{"name":"Next.MetadataOutlet","children":"$@10"}]}]]}],{},null,false,null]},null,false,"$@11"]},null,false,null],["$","$1","h",{"children":[null,["$","$L12",null,{"children":"$L13"}],["$","div",null,{"hidden":true,"children":["$","$L14",null,{"children":["$","$f",null,{"name":"Next.Metadata","children":"$L15"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$16",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -17:[] -11:"$W17" -13:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -18:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -10:null -15:[["$","title","0",{"children":"How It Works – Doormile"}],["$","meta","1",{"name":"description","content":"See how Doormile connects first, mid, and last mile into a seamless delivery experience powered by MileTruth™ AI."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","4",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","5",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","6",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L18","7",{}]] diff --git a/build/how-it-works/__next._full.txt b/build/how-it-works/__next._full.txt deleted file mode 100644 index 03a28ad..0000000 --- a/build/how-it-works/__next._full.txt +++ /dev/null @@ -1,33 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -c:I[74528,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0-8o5q..xlrv7.js"],"default"] -d:I[16948,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0-8o5q..xlrv7.js"],"default"] -e:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -f:"$Sreact.suspense" -12:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -14:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -16:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","how-it-works"],"q":"","i":false,"f":[[["",{"children":["how-it-works",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","div",null,{"id":"how-it-works","className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","div",null,{"data-elementor-type":"wp-page","data-elementor-id":"59","className":"elementor elementor-59","children":[["$","$Lc",null,{}],["$","$Ld",null,{}]]}]}]}]}],[["$","script","script-0",{"src":"/_next/static/chunks/0-8o5q..xlrv7.js","async":true,"nonce":"$undefined"}]],["$","$Le",null,{"children":["$","$f",null,{"name":"Next.MetadataOutlet","children":"$@10"}]}]]}],{},null,false,null]},null,false,"$@11"]},null,false,null],["$","$1","h",{"children":[null,["$","$L12",null,{"children":"$L13"}],["$","div",null,{"hidden":true,"children":["$","$L14",null,{"children":["$","$f",null,{"name":"Next.Metadata","children":"$L15"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$16",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -17:[] -11:"$W17" -13:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -18:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -10:null -15:[["$","title","0",{"children":"How It Works – Doormile"}],["$","meta","1",{"name":"description","content":"See how Doormile connects first, mid, and last mile into a seamless delivery experience powered by MileTruth™ AI."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","4",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","5",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","6",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L18","7",{}]] diff --git a/build/how-it-works/__next._head.txt b/build/how-it-works/__next._head.txt deleted file mode 100644 index d9b12e4..0000000 --- a/build/how-it-works/__next._head.txt +++ /dev/null @@ -1,6 +0,0 @@ -1:"$Sreact.fragment" -2:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -3:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -4:"$Sreact.suspense" -5:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"How It Works – Doormile"}],["$","meta","1",{"name":"description","content":"See how Doormile connects first, mid, and last mile into a seamless delivery experience powered by MileTruth™ AI."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","4",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","5",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","6",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L5","7",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/how-it-works/__next._index.txt b/build/how-it-works/__next._index.txt deleted file mode 100644 index d0b3355..0000000 --- a/build/how-it-works/__next._index.txt +++ /dev/null @@ -1,15 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","template":["$","$La",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/how-it-works/__next._tree.txt b/build/how-it-works/__next._tree.txt deleted file mode 100644 index 46313f7..0000000 --- a/build/how-it-works/__next._tree.txt +++ /dev/null @@ -1,9 +0,0 @@ -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"how-it-works","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/how-it-works/__next.how-it-works.__PAGE__.txt b/build/how-it-works/__next.how-it-works.__PAGE__.txt deleted file mode 100644 index bbcc794..0000000 --- a/build/how-it-works/__next.how-it-works.__PAGE__.txt +++ /dev/null @@ -1,7 +0,0 @@ -1:"$Sreact.fragment" -2:I[74528,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0-8o5q..xlrv7.js"],"default"] -3:I[16948,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0-8o5q..xlrv7.js"],"default"] -4:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -5:"$Sreact.suspense" -0:{"rsc":["$","$1","c",{"children":[["$","div",null,{"id":"how-it-works","className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","div",null,{"data-elementor-type":"wp-page","data-elementor-id":"59","className":"elementor elementor-59","children":[["$","$L2",null,{}],["$","$L3",null,{}]]}]}]}]}],[["$","script","script-0",{"src":"/_next/static/chunks/0-8o5q..xlrv7.js","async":true}]],["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} -6:null diff --git a/build/how-it-works/__next.how-it-works.txt b/build/how-it-works/__next.how-it-works.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/how-it-works/__next.how-it-works.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/icon.png b/build/icon.png deleted file mode 100644 index 91c79c6..0000000 Binary files a/build/icon.png and /dev/null differ diff --git a/build/images/Aravinth.png b/build/images/Aravinth.png deleted file mode 100644 index 2f8146c..0000000 Binary files a/build/images/Aravinth.png and /dev/null differ diff --git a/build/images/Fazul.png b/build/images/Fazul.png deleted file mode 100644 index 0464aca..0000000 Binary files a/build/images/Fazul.png and /dev/null differ diff --git a/build/images/Investor.png b/build/images/Investor.png deleted file mode 100644 index 3089f76..0000000 Binary files a/build/images/Investor.png and /dev/null differ diff --git a/build/images/Parthi.png b/build/images/Parthi.png deleted file mode 100644 index c958a53..0000000 Binary files a/build/images/Parthi.png and /dev/null differ diff --git a/build/images/Suriya.png b/build/images/Suriya.png deleted file mode 100644 index 3ffd5b0..0000000 Binary files a/build/images/Suriya.png and /dev/null differ diff --git a/build/images/about-bg.png b/build/images/about-bg.png deleted file mode 100644 index 626fe75..0000000 Binary files a/build/images/about-bg.png and /dev/null differ diff --git a/build/images/b5b560fe-aab0-4fe6-9f8c-4b187c2f0e99.png b/build/images/b5b560fe-aab0-4fe6-9f8c-4b187c2f0e99.png deleted file mode 100644 index b74d2e9..0000000 Binary files a/build/images/b5b560fe-aab0-4fe6-9f8c-4b187c2f0e99.png and /dev/null differ diff --git a/build/images/b5b560fe-aab0-4fe6-9f8c-4b187c2f0e99.webp b/build/images/b5b560fe-aab0-4fe6-9f8c-4b187c2f0e99.webp deleted file mode 100644 index 15a6a0d..0000000 Binary files a/build/images/b5b560fe-aab0-4fe6-9f8c-4b187c2f0e99.webp and /dev/null differ diff --git a/build/images/bg-404.png b/build/images/bg-404.png deleted file mode 100644 index 34bac05..0000000 Binary files a/build/images/bg-404.png and /dev/null differ diff --git a/build/images/bg-contacts.png b/build/images/bg-contacts.png deleted file mode 100644 index 3f131e1..0000000 Binary files a/build/images/bg-contacts.png and /dev/null differ diff --git a/build/images/bg-header-1.jpg b/build/images/bg-header-1.jpg deleted file mode 100644 index 20f4cd4..0000000 Binary files a/build/images/bg-header-1.jpg and /dev/null differ diff --git a/build/images/bg-header-3.jpeg b/build/images/bg-header-3.jpeg deleted file mode 100644 index 1f326e2..0000000 Binary files a/build/images/bg-header-3.jpeg and /dev/null differ diff --git a/build/images/bg-header-3.png b/build/images/bg-header-3.png deleted file mode 100644 index 9a14267..0000000 Binary files a/build/images/bg-header-3.png and /dev/null differ diff --git a/build/images/bg-header-5.png b/build/images/bg-header-5.png deleted file mode 100644 index d7ab42a..0000000 Binary files a/build/images/bg-header-5.png and /dev/null differ diff --git a/build/images/bg-map-about.png b/build/images/bg-map-about.png deleted file mode 100644 index b2f436a..0000000 Binary files a/build/images/bg-map-about.png and /dev/null differ diff --git a/build/images/bg-map-women.png b/build/images/bg-map-women.png deleted file mode 100644 index 8974f64..0000000 Binary files a/build/images/bg-map-women.png and /dev/null differ diff --git a/build/images/bg-slide-sidebar.jpg b/build/images/bg-slide-sidebar.jpg deleted file mode 100644 index c9c185d..0000000 Binary files a/build/images/bg-slide-sidebar.jpg and /dev/null differ diff --git a/build/images/blog-post-pic-14.jpeg b/build/images/blog-post-pic-14.jpeg deleted file mode 100644 index 4e04093..0000000 Binary files a/build/images/blog-post-pic-14.jpeg and /dev/null differ diff --git a/build/images/blog-post-pic-15.png b/build/images/blog-post-pic-15.png deleted file mode 100644 index 1d9b4fa..0000000 Binary files a/build/images/blog-post-pic-15.png and /dev/null differ diff --git a/build/images/blog-post-pic-17.png b/build/images/blog-post-pic-17.png deleted file mode 100644 index d613310..0000000 Binary files a/build/images/blog-post-pic-17.png and /dev/null differ diff --git a/build/images/blog-post-pic-18-840x840.jpg b/build/images/blog-post-pic-18-840x840.jpg deleted file mode 100644 index 8ff8360..0000000 Binary files a/build/images/blog-post-pic-18-840x840.jpg and /dev/null differ diff --git a/build/images/blog-post-pic-3.jpeg b/build/images/blog-post-pic-3.jpeg deleted file mode 100644 index fb974ba..0000000 Binary files a/build/images/blog-post-pic-3.jpeg and /dev/null differ diff --git a/build/images/blog-post-pic-31.png b/build/images/blog-post-pic-31.png deleted file mode 100644 index 6ff58cc..0000000 Binary files a/build/images/blog-post-pic-31.png and /dev/null differ diff --git a/build/images/blog-post-pic-4.jpeg b/build/images/blog-post-pic-4.jpeg deleted file mode 100644 index 52c1763..0000000 Binary files a/build/images/blog-post-pic-4.jpeg and /dev/null differ diff --git a/build/images/blog-post-pic-6.jpeg b/build/images/blog-post-pic-6.jpeg deleted file mode 100644 index 5c9251f..0000000 Binary files a/build/images/blog-post-pic-6.jpeg and /dev/null differ diff --git a/build/images/blog-post-pic-8.jpeg b/build/images/blog-post-pic-8.jpeg deleted file mode 100644 index 1376b0f..0000000 Binary files a/build/images/blog-post-pic-8.jpeg and /dev/null differ diff --git a/build/images/ev-paradox.png b/build/images/ev-paradox.png deleted file mode 100644 index 15707f2..0000000 Binary files a/build/images/ev-paradox.png and /dev/null differ diff --git a/build/images/ev.jpeg b/build/images/ev.jpeg deleted file mode 100644 index 472a2a4..0000000 Binary files a/build/images/ev.jpeg and /dev/null differ diff --git a/build/images/first-mile-approach.jpg b/build/images/first-mile-approach.jpg deleted file mode 100644 index bcc7a2a..0000000 Binary files a/build/images/first-mile-approach.jpg and /dev/null differ diff --git a/build/images/home-bg-1.png b/build/images/home-bg-1.png deleted file mode 100644 index 1e7768c..0000000 Binary files a/build/images/home-bg-1.png and /dev/null differ diff --git a/build/images/home1-bg2.png b/build/images/home1-bg2.png deleted file mode 100644 index 75cbf6e..0000000 Binary files a/build/images/home1-bg2.png and /dev/null differ diff --git a/build/images/home1-slide-1.png b/build/images/home1-slide-1.png deleted file mode 100644 index 828c01f..0000000 Binary files a/build/images/home1-slide-1.png and /dev/null differ diff --git a/build/images/home1-slide-2.png b/build/images/home1-slide-2.png deleted file mode 100644 index f85c31b..0000000 Binary files a/build/images/home1-slide-2.png and /dev/null differ diff --git a/build/images/home1alt-bg-2.png b/build/images/home1alt-bg-2.png deleted file mode 100644 index ceb4d86..0000000 Binary files a/build/images/home1alt-bg-2.png and /dev/null differ diff --git a/build/images/home2-banner-1.jpg b/build/images/home2-banner-1.jpg deleted file mode 100644 index 298babc..0000000 Binary files a/build/images/home2-banner-1.jpg and /dev/null differ diff --git a/build/images/home2-banner-3.jpg b/build/images/home2-banner-3.jpg deleted file mode 100644 index 98d5f2c..0000000 Binary files a/build/images/home2-banner-3.jpg and /dev/null differ diff --git a/build/images/home2-banner-4.png b/build/images/home2-banner-4.png deleted file mode 100644 index 78acc68..0000000 Binary files a/build/images/home2-banner-4.png and /dev/null differ diff --git a/build/images/home2-banner-5 b/build/images/home2-banner-5 deleted file mode 100644 index 9d83670..0000000 Binary files a/build/images/home2-banner-5 and /dev/null differ diff --git a/build/images/home2-pic-3.png b/build/images/home2-pic-3.png deleted file mode 100644 index 215148b..0000000 Binary files a/build/images/home2-pic-3.png and /dev/null differ diff --git a/build/images/home2-slide-1.jpg b/build/images/home2-slide-1.jpg deleted file mode 100644 index fdeb71d..0000000 Binary files a/build/images/home2-slide-1.jpg and /dev/null differ diff --git a/build/images/home2-slide-2.jpg b/build/images/home2-slide-2.jpg deleted file mode 100644 index 9cda61d..0000000 Binary files a/build/images/home2-slide-2.jpg and /dev/null differ diff --git a/build/images/home2alt-bg-1.jpeg b/build/images/home2alt-bg-1.jpeg deleted file mode 100644 index 34c3fe8..0000000 Binary files a/build/images/home2alt-bg-1.jpeg and /dev/null differ diff --git a/build/images/home2alt-bg-1.jpg b/build/images/home2alt-bg-1.jpg deleted file mode 100644 index 191954d..0000000 Binary files a/build/images/home2alt-bg-1.jpg and /dev/null differ diff --git a/build/images/home3-slide-1.jpg b/build/images/home3-slide-1.jpg deleted file mode 100644 index d7e92c4..0000000 Binary files a/build/images/home3-slide-1.jpg and /dev/null differ diff --git a/build/images/home3-slide-2.jpg b/build/images/home3-slide-2.jpg deleted file mode 100644 index b2b34c6..0000000 Binary files a/build/images/home3-slide-2.jpg and /dev/null differ diff --git a/build/images/home6-banner.jpg b/build/images/home6-banner.jpg deleted file mode 100644 index 0ff26a7..0000000 Binary files a/build/images/home6-banner.jpg and /dev/null differ diff --git a/build/images/home6-slide-1.jpg b/build/images/home6-slide-1.jpg deleted file mode 100644 index 60d8cee..0000000 Binary files a/build/images/home6-slide-1.jpg and /dev/null differ diff --git a/build/images/home6-slide-2.jpg b/build/images/home6-slide-2.jpg deleted file mode 100644 index 927b864..0000000 Binary files a/build/images/home6-slide-2.jpg and /dev/null differ diff --git a/build/images/last-mile-approach.jpg b/build/images/last-mile-approach.jpg deleted file mode 100644 index dd2d904..0000000 Binary files a/build/images/last-mile-approach.jpg and /dev/null differ diff --git a/build/images/mid-mile-approach.jpg b/build/images/mid-mile-approach.jpg deleted file mode 100644 index 0bb2252..0000000 Binary files a/build/images/mid-mile-approach.jpg and /dev/null differ diff --git a/build/images/mile-1.png b/build/images/mile-1.png deleted file mode 100644 index 0287905..0000000 Binary files a/build/images/mile-1.png and /dev/null differ diff --git a/build/images/miletruth-bg.png b/build/images/miletruth-bg.png deleted file mode 100644 index 5124af5..0000000 Binary files a/build/images/miletruth-bg.png and /dev/null differ diff --git a/build/images/premium-ev-van.png b/build/images/premium-ev-van.png deleted file mode 100644 index b108f07..0000000 Binary files a/build/images/premium-ev-van.png and /dev/null differ diff --git a/build/images/tab-pic-1-solution.jpeg b/build/images/tab-pic-1-solution.jpeg deleted file mode 100644 index 3eabb7c..0000000 Binary files a/build/images/tab-pic-1-solution.jpeg and /dev/null differ diff --git a/build/images/tab-pic-1.jpeg b/build/images/tab-pic-1.jpeg deleted file mode 100644 index 2ce3559..0000000 Binary files a/build/images/tab-pic-1.jpeg and /dev/null differ diff --git a/build/images/tab-pic-2-solution.jpeg b/build/images/tab-pic-2-solution.jpeg deleted file mode 100644 index 324efc7..0000000 Binary files a/build/images/tab-pic-2-solution.jpeg and /dev/null differ diff --git a/build/images/tab-pic-2.jpeg b/build/images/tab-pic-2.jpeg deleted file mode 100644 index a9a898c..0000000 Binary files a/build/images/tab-pic-2.jpeg and /dev/null differ diff --git a/build/images/tab-pic-3-solution.jpeg b/build/images/tab-pic-3-solution.jpeg deleted file mode 100644 index b288ba8..0000000 Binary files a/build/images/tab-pic-3-solution.jpeg and /dev/null differ diff --git a/build/images/tab-pic-3.jpeg b/build/images/tab-pic-3.jpeg deleted file mode 100644 index c3f5c16..0000000 Binary files a/build/images/tab-pic-3.jpeg and /dev/null differ diff --git a/build/index.html b/build/index.html deleted file mode 100644 index ac161e8..0000000 --- a/build/index.html +++ /dev/null @@ -1,1858 +0,0 @@ -Doormile — Delivering Trust. Beyond Boundaries

    Doormile

    0.0%
    On-Time Delivery
    0x Faster
    Faster Response
    0%
    Cost Reduction
    / The Problem /

    Fragmented Logistics is Broken

    73%

    of delays happen at handoffs

    3x

    higher risk of missed SLAs

    2.5x

    more time spent on coordination

    28%

    increase in operational costs

    30% More Cost Efficient

    30% More Cost Efficient

    30% More Cost Efficient

    30% More Cost Efficient

    30% More Cost Efficient

    30% More Cost Efficient

    30% More Cost Efficient

    30% More Cost Efficient

    30% More Cost Efficient

    Connected Logistics
    / Connected Logistics /

    Smart logistics solutions we deliver for modern supply chains

    Real-Time Visibility

    See every shipment, every vehicle, every handoff—live. No blind spots.

    Dynamic Route Adjustment

    AI continuously optimizes routes based on traffic, weather, and real-world conditions.

    Proactive Delay Prevention

    Detect SLA risks hours before they become problems. Act, don't react.

    Execution Intelligence

    Learn from every delivery. Get smarter with every mile traveled.

    / Doormile Approach /


    The Doormile Way

    Smarter, Faster, Connected Logistics

    We connect first mile and last mile into one seamless system, reducing delays and improving efficiency. With real-time tracking and digital workflows,
    every delivery is faster, reliable, and fully transparent.

    Seamless logistics powered by real-time tracking, digital processes, and reliable delivery execution.

    End-to-End Protection

    End-to-end visibility ensures every shipment stays secure and on schedule.

    Proactive delay prevention

    Real-time monitoring helps prevent delays before they impact deliveries.

    Single owner, single promise

    One unified system manages the entire delivery process seamlessly.

    Dynamic AI-driven adjustments

    AI-powered routing adapts instantly to improve speed and efficiency.

    EV Logistics

    Cleaner miles, lower costs

    / EV-Native Design /

    BUILT FOR ELECTRIC. NOT ADAPTED.

    DoorMile electric delivery van
    100%ELECTRIC FLEET
    -40%COST / MILE
    Battery-Aware Routing

    Battery level, health, and degradation are first-class inputs to route optimization — not afterthoughts.

    Charging Integration

    Seamlessly integrate charging stops without compromising delivery windows or SLA commitments.

    Energy-Optimized Paths

    Factor in elevation, speed limits, payload weight, and live weather for maximum range efficiency.

    Predictable Operations

    EVs become predictable assets, not operational risks. Full visibility from depot to doorstep.

    SLA Compliance0.0%
    Distance Saved0%
    Fewer Vehicles0%
    Dispatch Latency0ms

    Smart solutions built exclusively for your industry

    \ No newline at end of file diff --git a/build/index.txt b/build/index.txt deleted file mode 100644 index 0e1bfd0..0000000 --- a/build/index.txt +++ /dev/null @@ -1,166 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -c:I[97677,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~5amg8el7~oa.js"],"default"] -d:I[58140,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~5amg8el7~oa.js"],"default"] -e:I[36854,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~5amg8el7~oa.js"],"default"] -19:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/chunks/0v290txaarww5.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[["$","div",null,{"id":"home","className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","div",null,{"data-elementor-type":"wp-page","data-elementor-id":"61","className":"elementor elementor-61","children":[["$","$Lc",null,{}],["$","$Ld",null,{}],["$","$Le",null,{}],["$","div",null,{"className":"elementor-element elementor-element-b62c0b3 e-con-full e-flex cut-corner-no sticky-container-off e-con e-parent","data-id":"b62c0b3","data-element_type":"container","data-e-type":"container","children":["$","div",null,{"className":"elementor-element elementor-element-592e9e8 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"592e9e8","data-element_type":"container","data-e-type":"container","children":["$","div",null,{"className":"elementor-element elementor-element-ab41b28 elementor-widget elementor-widget-logico_marquee","data-id":"ab41b28","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_marquee.default","children":"$Lf"}]}]}],"$L10","$L11","$L12","$L13"]}]}]}]}],["$L14","$L15","$L16"],"$L17"]}],{},null,false,null]},null,false,null],"$L18",false]],"m":"$undefined","G":["$19",["$L1a"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -1d:I[32693,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~5amg8el7~oa.js"],"default"] -1e:I[24911,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~5amg8el7~oa.js"],"default"] -1f:I[14224,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~5amg8el7~oa.js"],"default"] -25:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -26:"$Sreact.suspense" -28:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -2a:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -f:["$","div",null,{"className":"elementor-widget-container","children":["$","div",null,{"className":"logico-ticker-wrapper","style":{"overflow":"hidden","position":"relative","width":"100%"},"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"\n @keyframes cssMarquee {\n 0% { transform: translate3d(0, 0, 0); }\n 100% { transform: translate3d(-33.33%, 0, 0); }\n }\n .marquee-container-css {\n display: flex;\n width: max-content;\n animation: cssMarquee 25s linear infinite;\n }\n .marquee-container-css:hover {\n animation-play-state: paused;\n }\n "}}],["$","div",null,{"className":"marquee-container-css","children":[["$","div","0",{"className":"ticker","style":{"display":"inline-flex","alignItems":"center","whiteSpace":"nowrap","paddingRight":"50px"},"children":[["$","span",null,{"className":"ticker-text","children":["$","p",null,{"style":{"margin":0,"display":"inline"},"children":"30% More Cost Efficient"}]}],["$","span",null,{"className":"separator","style":{"marginLeft":"25px","display":"inline-flex","alignItems":"center"},"children":["$","i",null,{"className":"fontello icon-half-logo"}]}]]}],["$","div","1",{"className":"ticker","style":{"display":"inline-flex","alignItems":"center","whiteSpace":"nowrap","paddingRight":"50px"},"children":[["$","span",null,{"className":"ticker-text","children":["$","p",null,{"style":{"margin":0,"display":"inline"},"children":"30% More Cost Efficient"}]}],["$","span",null,{"className":"separator","style":{"marginLeft":"25px","display":"inline-flex","alignItems":"center"},"children":["$","i",null,{"className":"fontello icon-half-logo"}]}]]}],["$","div","2",{"className":"ticker","style":{"display":"inline-flex","alignItems":"center","whiteSpace":"nowrap","paddingRight":"50px"},"children":[["$","span",null,{"className":"ticker-text","children":["$","p",null,{"style":{"margin":0,"display":"inline"},"children":"30% More Cost Efficient"}]}],["$","span",null,{"className":"separator","style":{"marginLeft":"25px","display":"inline-flex","alignItems":"center"},"children":["$","i",null,{"className":"fontello icon-half-logo"}]}]]}],["$","div","3",{"className":"ticker","style":{"display":"inline-flex","alignItems":"center","whiteSpace":"nowrap","paddingRight":"50px"},"children":[["$","span",null,{"className":"ticker-text","children":["$","p",null,{"style":{"margin":0,"display":"inline"},"children":"30% More Cost Efficient"}]}],["$","span",null,{"className":"separator","style":{"marginLeft":"25px","display":"inline-flex","alignItems":"center"},"children":["$","i",null,{"className":"fontello icon-half-logo"}]}]]}],["$","div","4",{"className":"ticker","style":{"display":"inline-flex","alignItems":"center","whiteSpace":"nowrap","paddingRight":"50px"},"children":[["$","span",null,{"className":"ticker-text","children":["$","p",null,{"style":{"margin":0,"display":"inline"},"children":"30% More Cost Efficient"}]}],["$","span",null,{"className":"separator","style":{"marginLeft":"25px","display":"inline-flex","alignItems":"center"},"children":["$","i",null,{"className":"fontello icon-half-logo"}]}]]}],["$","div","5",{"className":"ticker","style":{"display":"inline-flex","alignItems":"center","whiteSpace":"nowrap","paddingRight":"50px"},"children":[["$","span",null,{"className":"ticker-text","children":["$","p",null,{"style":{"margin":0,"display":"inline"},"children":"30% More Cost Efficient"}]}],["$","span",null,{"className":"separator","style":{"marginLeft":"25px","display":"inline-flex","alignItems":"center"},"children":["$","i",null,{"className":"fontello icon-half-logo"}]}]]}],["$","div","6",{"className":"ticker","style":{"display":"inline-flex","alignItems":"center","whiteSpace":"nowrap","paddingRight":"50px"},"children":[["$","span",null,{"className":"ticker-text","children":["$","p",null,{"style":{"margin":0,"display":"inline"},"children":"30% More Cost Efficient"}]}],["$","span",null,{"className":"separator","style":{"marginLeft":"25px","display":"inline-flex","alignItems":"center"},"children":["$","i",null,{"className":"fontello icon-half-logo"}]}]]}],["$","div","7",{"className":"ticker","style":{"display":"inline-flex","alignItems":"center","whiteSpace":"nowrap","paddingRight":"50px"},"children":[["$","span",null,{"className":"ticker-text","children":["$","p",null,{"style":{"margin":0,"display":"inline"},"children":"30% More Cost Efficient"}]}],"$L1b"]}],"$L1c"]}]]}]}] -10:["$","$L1d",null,{}] -11:["$","$L1e",null,{}] -12:["$","$L1f",null,{}] -20:T95e, - @media (max-width: 768px) { - .elementor-element.elementor-element-3b4a7cc { - --padding-left: 0px !important; - --padding-right: 0px !important; - padding-left: 0px !important; - padding-right: 0px !important; - box-sizing: border-box !important; - } - - .elementor-element.elementor-element-3b4a7cc > .e-con-inner { - width: 100% !important; - max-width: 100% !important; - margin-left: auto !important; - margin-right: auto !important; - padding-left: 0 !important; - padding-right: 0 !important; - } - - .elementor-element.elementor-element-d602f7f { - --padding-left: 20px !important; - --padding-right: 20px !important; - padding-left: 20px !important; - padding-right: 20px !important; - width: 100% !important; - max-width: 100% !important; - margin-left: 0 !important; - margin-right: 0 !important; - box-sizing: border-box !important; - } - - .elementor-element.elementor-element-f64bd88, - .elementor-element.elementor-element-5ed2dbb, - .elementor-element.elementor-element-6829276 { - --padding-left: 0px !important; - --padding-right: 0px !important; - --margin-left: 0px !important; - --margin-right: 0px !important; - width: 100% !important; - max-width: 100% !important; - margin-left: 0 !important; - margin-right: 0 !important; - padding-left: 0 !important; - padding-right: 0 !important; - box-sizing: border-box !important; - } - - .elementor-element.elementor-element-6829276 { - --e-con-grid-template-columns: minmax(0, 1fr) !important; - --grid-justify-content: stretch !important; - --justify-items: stretch !important; - grid-template-columns: minmax(0, 1fr) !important; - justify-content: stretch !important; - justify-items: stretch !important; - min-width: 0 !important; - } - - .industry-solutions-grid, - .industry-card-link { - width: 100% !important; - max-width: 100% !important; - min-width: 0 !important; - } - - .industry-solutions-grid { - margin-left: 0 !important; - margin-right: 0 !important; - } - } - 13:[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$20"}}],["$","div",null,{"className":"elementor-element elementor-element-3b4a7cc e-flex e-con-boxed cut-corner-no sticky-container-off e-con e-parent","data-id":"3b4a7cc","data-element_type":"container","data-e-type":"container","children":["$","div",null,{"className":"e-con-inner","children":["$","div",null,{"className":"elementor-element elementor-element-d602f7f e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"d602f7f","data-element_type":"container","data-e-type":"container","children":[["$","div",null,{"className":"elementor-element elementor-element-f64bd88 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"f64bd88","data-element_type":"container","data-e-type":"container","children":[["$","div",null,{"className":"elementor-element elementor-element-5ed2dbb e-con-full e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"5ed2dbb","data-element_type":"container","data-e-type":"container","children":["$L21","$L22"]}],"$L23"]}],"$L24"]}]}]}]] -14:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0v290txaarww5.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] -15:["$","script","script-0",{"src":"/_next/static/chunks/07eq5is00w7sy.js","async":true,"nonce":"$undefined"}] -16:["$","script","script-1",{"src":"/_next/static/chunks/0~5amg8el7~oa.js","async":true,"nonce":"$undefined"}] -17:["$","$L25",null,{"children":["$","$26",null,{"name":"Next.MetadataOutlet","children":"$@27"}]}] -18:["$","$1","h",{"children":[null,["$","$L28",null,{"children":"$L29"}],["$","div",null,{"hidden":true,"children":["$","$L2a",null,{"children":["$","$26",null,{"name":"Next.Metadata","children":"$L2b"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] -1a:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] -2d:I[2018,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~5amg8el7~oa.js"],"ScrollReveal"] -2e:I[22016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~5amg8el7~oa.js"],""] -2f:I[5500,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/07eq5is00w7sy.js","/_next/static/chunks/0~5amg8el7~oa.js"],"Image"] -1b:["$","span",null,{"className":"separator","style":{"marginLeft":"25px","display":"inline-flex","alignItems":"center"},"children":["$","i",null,{"className":"fontello icon-half-logo"}]}] -1c:["$","div","8",{"className":"ticker","style":{"display":"inline-flex","alignItems":"center","whiteSpace":"nowrap","paddingRight":"50px"},"children":[["$","span",null,{"className":"ticker-text","children":["$","p",null,{"style":{"margin":0,"display":"inline"},"children":"30% More Cost Efficient"}]}],["$","span",null,{"className":"separator","style":{"marginLeft":"25px","display":"inline-flex","alignItems":"center"},"children":["$","i",null,{"className":"fontello icon-half-logo"}]}]]}] -2c:T65e, - /* Minimal section label — matches the "/ Doormile Approach /" pattern */ - .industry-section-label { - width: 100%; - } - .industry-section-label > .elementor-widget-container { - max-width: 100%; - margin: 12px 0 50px 0; - padding: 0 0 14px 0; - border-style: solid; - border-width: 0 0 1px 0; - border-color: rgba(17, 17, 17, 0.15); - } - .industry-section-label .logico-title { - font-size: 14px; - font-weight: 500; - line-height: 2.1429em; - letter-spacing: 2px; - text-transform: uppercase; - color: #111111; - } - @media (max-width: 1024px) { - .industry-section-label > .elementor-widget-container { - margin-bottom: 36px; - padding-bottom: 12px; - } - } - @media (max-width: 767px) { - .industry-section-label > .elementor-widget-container { - margin-bottom: 28px; - padding-bottom: 10px; - } - .industry-section-label .logico-title { - font-size: 12px; - letter-spacing: 1.5px; - } - } - 21:["$","div",null,{"className":"elementor-element elementor-element-c8162c4 elementor-widget elementor-widget-logico_heading industry-section-label","data-id":"c8162c4","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default","children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$2c"}}],["$","div",null,{"className":"elementor-widget-container","children":["$","div",null,{"className":"logico-title","children":"/ Industry Solutions /"}]}]]}] -22:["$","div",null,{"className":"elementor-element elementor-element-1487241 elementor-widget__width-initial elementor-widget elementor-widget-logico_heading","data-id":"1487241","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_heading.default","children":["$","div",null,{"className":"elementor-widget-container","style":{"margin":"30px 0 0 0"},"children":["$","h3",null,{"className":"logico-title","style":{"fontSize":"clamp(28px, 3.5vw, 48px)","lineHeight":"1.1","fontWeight":800,"textTransform":"uppercase","maxWidth":"900px"},"children":["$","$L2d",null,{"delay":0.05,"duration":0.8,"yOffset":25,"children":["Smart solutions built exclusively for your ",["$","span",null,{"style":{"color":"#c01227"},"children":"industry"}]]}]}]}]}] -23:["$","div",null,{"className":"elementor-element elementor-element-4af73cb e-con-full elementor-hidden-tablet elementor-hidden-mobile_extra elementor-hidden-mobile e-flex cut-corner-no sticky-container-off e-con e-child","data-id":"4af73cb","data-element_type":"container","data-e-type":"container","children":["$","div",null,{"className":"elementor-element elementor-element-46f2f7d elementor-widget__width-initial elementor-widget elementor-widget-logico_button","data-id":"46f2f7d","data-element_type":"widget","data-e-type":"widget","data-widget_type":"logico_button.default","children":["$","div",null,{"className":"elementor-widget-container"}]}]}] -24:["$","div",null,{"className":"elementor-element elementor-element-6829276 e-grid e-con-full cut-corner-no sticky-container-off e-con e-child","data-id":"6829276","data-element_type":"container","data-e-type":"container","children":["$","div",null,{"className":"industry-solutions-grid","children":[["$","$L2e",null,{"href":"/solutions","className":"industry-card-link","children":[["$","div",null,{"className":"industry-card-bg","children":["$","$L2f",null,{"src":"/images/tab-pic-1.webp","alt":"FMCG Logistics","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, (max-width: 1024px) 50vw, 33vw"}]}],["$","div",null,{"className":"industry-card-overlay"}],["$","div",null,{"className":"industry-card-hover-bg"}],["$","div",null,{"className":"industry-card-default-content","children":["$","h4",null,{"className":"industry-card-default-title","children":"FMCG"}]}],["$","div",null,{"className":"industry-card-hover-content","children":[["$","div",null,{"className":"industry-card-hover-top","children":[["$","p",null,{"className":"industry-card-description","children":"High volume, tight margins, zero tolerance for stockouts."}],["$","div",null,{"children":[["$","h5",null,{"className":"industry-card-section-title","children":"Challenges"}],["$","ul",null,{"className":"industry-card-list","children":[["$","li",null,{"className":"industry-card-list-item bullet-1","children":"Unpredictable demand spikes"}],["$","li",null,{"className":"industry-card-list-item bullet-2","children":"Fresh product expiry constraints"}],["$","li",null,{"className":"industry-card-list-item bullet-3","children":"Multi-stop route complexity"}]]}]]}],["$","div",null,{"children":[["$","h5",null,{"className":"industry-card-section-title","children":"Doormile Solutions"}],["$","ul",null,{"className":"industry-card-list","children":[["$","li",null,{"className":"industry-card-list-item bullet-4","children":"AI-driven demand-responsive routing"}],["$","li",null,{"className":"industry-card-list-item bullet-5","children":"Freshness-aware delivery prioritization"}],["$","li",null,{"className":"industry-card-list-item bullet-6","children":"Dynamic batch optimization"}]]}]]}]]}],["$","div",null,{"className":"industry-card-hover-bottom","children":[["$","div",null,{"className":"industry-card-hover-icon","children":["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"3","strokeLinecap":"round","strokeLinejoin":"round","style":{"width":"20px","height":"20px"},"children":[["$","line",null,{"x1":"7","y1":"17","x2":"17","y2":"7"}],["$","polyline",null,{"points":"7 7 17 7 17 17"}]]}]}],["$","h4",null,{"className":"industry-card-hover-title","children":"FMCG"}]]}]]}]]}],["$","$L2e",null,{"href":"/solutions","className":"industry-card-link","children":[["$","div",null,{"className":"industry-card-bg","children":["$","$L2f",null,{"src":"/images/tab-pic-2.webp","alt":"Pharma Logistics","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, (max-width: 1024px) 50vw, 33vw"}]}],["$","div",null,{"className":"industry-card-overlay"}],["$","div",null,{"className":"industry-card-hover-bg"}],["$","div",null,{"className":"industry-card-default-content","children":["$","h4",null,{"className":"industry-card-default-title","children":"Pharmaceutical"}]}],["$","div",null,{"className":"industry-card-hover-content","children":[["$","div",null,{"className":"industry-card-hover-top","children":[["$","p",null,{"className":"industry-card-description","children":"Temperature-sensitive, compliance-critical, life-saving."}],["$","div",null,{"children":[["$","h5",null,{"className":"industry-card-section-title","children":"Challenges"}],["$","ul",null,{"className":"industry-card-list","children":[["$","li",null,{"className":"industry-card-list-item bullet-1","children":"Cold chain integrity requirements"}],["$","li",null,{"className":"industry-card-list-item bullet-2","children":"Regulatory compliance tracking"}],["$","li",null,{"className":"industry-card-list-item bullet-3","children":"Critical delivery time windows"}]]}]]}],["$","div",null,{"children":[["$","h5",null,{"className":"industry-card-section-title","children":"Doormile Solutions"}],["$","ul",null,{"className":"industry-card-list","children":[["$","li",null,{"className":"industry-card-list-item bullet-4","children":"Real-time temperature monitoring"}],"$L30","$L31"]}]]}]]}],"$L32"]}]]}],"$L33"]}]}] -30:["$","li",null,{"className":"industry-card-list-item bullet-5","children":"Chain-of-custody documentation"}] -31:["$","li",null,{"className":"industry-card-list-item bullet-6","children":"Priority override for critical shipments"}] -32:["$","div",null,{"className":"industry-card-hover-bottom","children":[["$","div",null,{"className":"industry-card-hover-icon","children":["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"3","strokeLinecap":"round","strokeLinejoin":"round","style":{"width":"20px","height":"20px"},"children":[["$","line",null,{"x1":"7","y1":"17","x2":"17","y2":"7"}],["$","polyline",null,{"points":"7 7 17 7 17 17"}]]}]}],["$","h4",null,{"className":"industry-card-hover-title","children":"Pharmaceutical"}]]}] -33:["$","$L2e",null,{"href":"/solutions","className":"industry-card-link","children":[["$","div",null,{"className":"industry-card-bg","children":["$","$L2f",null,{"src":"/images/tab-pic-3.webp","alt":"Enterprise Logistics","fill":true,"style":{"objectFit":"cover"},"sizes":"(max-width: 768px) 100vw, (max-width: 1024px) 50vw, 33vw"}]}],["$","div",null,{"className":"industry-card-overlay"}],["$","div",null,{"className":"industry-card-hover-bg"}],["$","div",null,{"className":"industry-card-default-content","children":["$","h4",null,{"className":"industry-card-default-title","children":"Enterprise & B2B"}]}],["$","div",null,{"className":"industry-card-hover-content","children":[["$","div",null,{"className":"industry-card-hover-top","children":[["$","p",null,{"className":"industry-card-description","children":"High-value shipments with complex delivery requirements."}],["$","div",null,{"children":[["$","h5",null,{"className":"industry-card-section-title","children":"Challenges"}],["$","ul",null,{"className":"industry-card-list","children":[["$","li",null,{"className":"industry-card-list-item bullet-1","children":"Appointment scheduling coordination"}],["$","li",null,{"className":"industry-card-list-item bullet-2","children":"White-glove delivery standards"}],["$","li",null,{"className":"industry-card-list-item bullet-3","children":"Multi-location routing complexity"}]]}]]}],["$","div",null,{"children":[["$","h5",null,{"className":"industry-card-section-title","children":"Doormile Solutions"}],["$","ul",null,{"className":"industry-card-list","children":[["$","li",null,{"className":"industry-card-list-item bullet-4","children":"Automated appointment optimization"}],["$","li",null,{"className":"industry-card-list-item bullet-5","children":"Service level guarantee tracking"}],["$","li",null,{"className":"industry-card-list-item bullet-6","children":"Enterprise integration APIs"}]]}]]}]]}],["$","div",null,{"className":"industry-card-hover-bottom","children":[["$","div",null,{"className":"industry-card-hover-icon","children":["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"3","strokeLinecap":"round","strokeLinejoin":"round","style":{"width":"20px","height":"20px"},"children":[["$","line",null,{"x1":"7","y1":"17","x2":"17","y2":"7"}],["$","polyline",null,{"points":"7 7 17 7 17 17"}]]}]}],["$","h4",null,{"className":"industry-card-hover-title","children":"Enterprise & B2B"}]]}]]}]]}] -29:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -34:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -27:null -2b:[["$","title","0",{"children":"Doormile — Delivering Trust. Beyond Boundaries"}],["$","meta","1",{"name":"description","content":"Doormile helps logistics companies track every mile with MileTruth™ AI. Real-time SLA protection and connected miles visibility."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","4",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","5",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","6",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L34","7",{}]] diff --git a/build/miletruth.html b/build/miletruth.html deleted file mode 100644 index b0dd5d8..0000000 --- a/build/miletruth.html +++ /dev/null @@ -1,2612 +0,0 @@ -MileTruth – Doormile

    Doormile

    Doormile logo
    Address
    Hyderabad

    5th Floor, Vision Ultima,
    Street No.3, Jayabheri Enclave,
    Gachibowli, Hyderabad,
    Telangana 500032.

    Coimbatore

    Mayflower Valencia,
    Near Nava India Bus Stop,
    Avinashi Road,
    Udayampalayam,
    Tamil Nadu 641037.

    Bengaluru

    C612, 6th Floor,
    Trifecta Starlight,
    ITPL Road,
    Garudacharapalya,
    Mahadevapura,
    Bangalore 560048,
    Karnataka, India.

    Contact Us

    Tel : +91 86886 97941

    Email

    care@doormile.com

    SLA Compliance
    1 %
    Distance Saved
    1 %
    Fewer Vehicles
    1 %
    Dispatch Latency
    45ms
    OPTIMIZE EVERY MILE

    Cut travel distance, reduce operating cost, and improve fleet productivity across every route.

    / Performance /

    SMARTER ROUTES. LOWER COSTS.

    -42%DISTANCE SAVED
    -37%FEWER VEHICLES
    Performance InsightAI ENGINE
    0%Distance Saved
    0%Faster Routes
    0%Lower Cost
    0.0%On-Time
    Route Optimization

    AI selects the most efficient path across every zone.

    Distance Reduction

    Same volume delivered with a leaner, better-used fleet.

    Fleet Efficiency

    Higher utilisation and lower operating cost.

    SLA Performance

    Real-time correction keeps deliveries on time.

    Distance Saved0%
    Faster Routes0%
    Lower Cost0%
    On-Time0.0%
    CHOOSE THE BEST PLAN

    Analyze thousands of route possibilities and automatically select the most efficient delivery strategy.

    / Innovation /

    MANY STRATEGIES. ONE BEST PLAN.

    45msINFERENCE
    100%SLA-FIRST
    AI Decision EngineAI ENGINE
    0msInference
    0+Strategies
    0.0%SLA Met
    0/7Adaptive
    Generate Routes

    Many strategies explored per dispatch window.

    Check Constraints

    Battery, capacity, distance and time validated.

    Score & Compare

    Plans ranked by total cost in parallel.

    Select Best Plan

    SLA-first plan locked in and dispatched.

    Inference0ms
    Strategies0+
    SLA Met0.0%
    Adaptive0/7
    \ No newline at end of file diff --git a/build/miletruth.txt b/build/miletruth.txt deleted file mode 100644 index bb4a712..0000000 --- a/build/miletruth.txt +++ /dev/null @@ -1,35 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -c:I[58829,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0~gr-u6_wl8~w.js","/_next/static/chunks/07eq5is00w7sy.js"],"default"] -d:I[76756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0~gr-u6_wl8~w.js","/_next/static/chunks/07eq5is00w7sy.js"],"default"] -e:I[38730,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0~gr-u6_wl8~w.js","/_next/static/chunks/07eq5is00w7sy.js"],"default"] -f:I[33016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0~gr-u6_wl8~w.js","/_next/static/chunks/07eq5is00w7sy.js"],"default"] -10:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -11:"$Sreact.suspense" -14:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -16:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -18:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","miletruth"],"q":"","i":false,"f":[[["",{"children":["miletruth",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","div",null,{"id":"miletruth","className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","div",null,{"data-elementor-type":"wp-page","data-elementor-id":"59","className":"elementor elementor-59","children":[["$","$Lc",null,{}],["$","$Ld",null,{}],["$","$Le",null,{}],["$","$Lf",null,{}]]}]}]}]}],[["$","script","script-0",{"src":"/_next/static/chunks/0~gr-u6_wl8~w.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/07eq5is00w7sy.js","async":true,"nonce":"$undefined"}]],["$","$L10",null,{"children":["$","$11",null,{"name":"Next.MetadataOutlet","children":"$@12"}]}]]}],{},null,false,null]},null,false,"$@13"]},null,false,null],["$","$1","h",{"children":[null,["$","$L14",null,{"children":"$L15"}],["$","div",null,{"hidden":true,"children":["$","$L16",null,{"children":["$","$11",null,{"name":"Next.Metadata","children":"$L17"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$18",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -19:[] -13:"$W19" -15:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -1a:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -12:null -17:[["$","title","0",{"children":"MileTruth – Doormile"}],["$","meta","1",{"name":"description","content":"Optimizes every stage of the delivery journey for maximum efficiency. Explore the only AI built exclusively for logistics."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","4",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","5",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","6",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L1a","7",{}]] diff --git a/build/miletruth/__next._full.txt b/build/miletruth/__next._full.txt deleted file mode 100644 index bb4a712..0000000 --- a/build/miletruth/__next._full.txt +++ /dev/null @@ -1,35 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -c:I[58829,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0~gr-u6_wl8~w.js","/_next/static/chunks/07eq5is00w7sy.js"],"default"] -d:I[76756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0~gr-u6_wl8~w.js","/_next/static/chunks/07eq5is00w7sy.js"],"default"] -e:I[38730,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0~gr-u6_wl8~w.js","/_next/static/chunks/07eq5is00w7sy.js"],"default"] -f:I[33016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0~gr-u6_wl8~w.js","/_next/static/chunks/07eq5is00w7sy.js"],"default"] -10:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -11:"$Sreact.suspense" -14:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -16:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -18:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","miletruth"],"q":"","i":false,"f":[[["",{"children":["miletruth",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","div",null,{"id":"miletruth","className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","div",null,{"data-elementor-type":"wp-page","data-elementor-id":"59","className":"elementor elementor-59","children":[["$","$Lc",null,{}],["$","$Ld",null,{}],["$","$Le",null,{}],["$","$Lf",null,{}]]}]}]}]}],[["$","script","script-0",{"src":"/_next/static/chunks/0~gr-u6_wl8~w.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/07eq5is00w7sy.js","async":true,"nonce":"$undefined"}]],["$","$L10",null,{"children":["$","$11",null,{"name":"Next.MetadataOutlet","children":"$@12"}]}]]}],{},null,false,null]},null,false,"$@13"]},null,false,null],["$","$1","h",{"children":[null,["$","$L14",null,{"children":"$L15"}],["$","div",null,{"hidden":true,"children":["$","$L16",null,{"children":["$","$11",null,{"name":"Next.Metadata","children":"$L17"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$18",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -19:[] -13:"$W19" -15:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -1a:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -12:null -17:[["$","title","0",{"children":"MileTruth – Doormile"}],["$","meta","1",{"name":"description","content":"Optimizes every stage of the delivery journey for maximum efficiency. Explore the only AI built exclusively for logistics."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","4",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","5",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","6",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L1a","7",{}]] diff --git a/build/miletruth/__next._head.txt b/build/miletruth/__next._head.txt deleted file mode 100644 index ddffea7..0000000 --- a/build/miletruth/__next._head.txt +++ /dev/null @@ -1,6 +0,0 @@ -1:"$Sreact.fragment" -2:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -3:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -4:"$Sreact.suspense" -5:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"MileTruth – Doormile"}],["$","meta","1",{"name":"description","content":"Optimizes every stage of the delivery journey for maximum efficiency. Explore the only AI built exclusively for logistics."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","4",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","5",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","6",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L5","7",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/miletruth/__next._index.txt b/build/miletruth/__next._index.txt deleted file mode 100644 index d0b3355..0000000 --- a/build/miletruth/__next._index.txt +++ /dev/null @@ -1,15 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","template":["$","$La",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/miletruth/__next._tree.txt b/build/miletruth/__next._tree.txt deleted file mode 100644 index 6e1310c..0000000 --- a/build/miletruth/__next._tree.txt +++ /dev/null @@ -1,9 +0,0 @@ -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"miletruth","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/miletruth/__next.miletruth.__PAGE__.txt b/build/miletruth/__next.miletruth.__PAGE__.txt deleted file mode 100644 index 85dba76..0000000 --- a/build/miletruth/__next.miletruth.__PAGE__.txt +++ /dev/null @@ -1,9 +0,0 @@ -1:"$Sreact.fragment" -2:I[58829,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0~gr-u6_wl8~w.js","/_next/static/chunks/07eq5is00w7sy.js"],"default"] -3:I[76756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0~gr-u6_wl8~w.js","/_next/static/chunks/07eq5is00w7sy.js"],"default"] -4:I[38730,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0~gr-u6_wl8~w.js","/_next/static/chunks/07eq5is00w7sy.js"],"default"] -5:I[33016,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0~gr-u6_wl8~w.js","/_next/static/chunks/07eq5is00w7sy.js"],"default"] -6:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -7:"$Sreact.suspense" -0:{"rsc":["$","$1","c",{"children":[["$","div",null,{"id":"miletruth","className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","div",null,{"data-elementor-type":"wp-page","data-elementor-id":"59","className":"elementor elementor-59","children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{}],["$","$L5",null,{}]]}]}]}]}],[["$","script","script-0",{"src":"/_next/static/chunks/0~gr-u6_wl8~w.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/07eq5is00w7sy.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} -8:null diff --git a/build/miletruth/__next.miletruth.txt b/build/miletruth/__next.miletruth.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/miletruth/__next.miletruth.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/node_modules/@img/colour/color.cjs b/build/node_modules/@img/colour/color.cjs new file mode 100644 index 0000000..d5b7ee2 --- /dev/null +++ b/build/node_modules/@img/colour/color.cjs @@ -0,0 +1,1596 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// node_modules/color/index.js +var index_exports = {}; +__export(index_exports, { + default: () => index_default +}); +module.exports = __toCommonJS(index_exports); + +// node_modules/color-name/index.js +var colors = { + aliceblue: [240, 248, 255], + antiquewhite: [250, 235, 215], + aqua: [0, 255, 255], + aquamarine: [127, 255, 212], + azure: [240, 255, 255], + beige: [245, 245, 220], + bisque: [255, 228, 196], + black: [0, 0, 0], + blanchedalmond: [255, 235, 205], + blue: [0, 0, 255], + blueviolet: [138, 43, 226], + brown: [165, 42, 42], + burlywood: [222, 184, 135], + cadetblue: [95, 158, 160], + chartreuse: [127, 255, 0], + chocolate: [210, 105, 30], + coral: [255, 127, 80], + cornflowerblue: [100, 149, 237], + cornsilk: [255, 248, 220], + crimson: [220, 20, 60], + cyan: [0, 255, 255], + darkblue: [0, 0, 139], + darkcyan: [0, 139, 139], + darkgoldenrod: [184, 134, 11], + darkgray: [169, 169, 169], + darkgreen: [0, 100, 0], + darkgrey: [169, 169, 169], + darkkhaki: [189, 183, 107], + darkmagenta: [139, 0, 139], + darkolivegreen: [85, 107, 47], + darkorange: [255, 140, 0], + darkorchid: [153, 50, 204], + darkred: [139, 0, 0], + darksalmon: [233, 150, 122], + darkseagreen: [143, 188, 143], + darkslateblue: [72, 61, 139], + darkslategray: [47, 79, 79], + darkslategrey: [47, 79, 79], + darkturquoise: [0, 206, 209], + darkviolet: [148, 0, 211], + deeppink: [255, 20, 147], + deepskyblue: [0, 191, 255], + dimgray: [105, 105, 105], + dimgrey: [105, 105, 105], + dodgerblue: [30, 144, 255], + firebrick: [178, 34, 34], + floralwhite: [255, 250, 240], + forestgreen: [34, 139, 34], + fuchsia: [255, 0, 255], + gainsboro: [220, 220, 220], + ghostwhite: [248, 248, 255], + gold: [255, 215, 0], + goldenrod: [218, 165, 32], + gray: [128, 128, 128], + green: [0, 128, 0], + greenyellow: [173, 255, 47], + grey: [128, 128, 128], + honeydew: [240, 255, 240], + hotpink: [255, 105, 180], + indianred: [205, 92, 92], + indigo: [75, 0, 130], + ivory: [255, 255, 240], + khaki: [240, 230, 140], + lavender: [230, 230, 250], + lavenderblush: [255, 240, 245], + lawngreen: [124, 252, 0], + lemonchiffon: [255, 250, 205], + lightblue: [173, 216, 230], + lightcoral: [240, 128, 128], + lightcyan: [224, 255, 255], + lightgoldenrodyellow: [250, 250, 210], + lightgray: [211, 211, 211], + lightgreen: [144, 238, 144], + lightgrey: [211, 211, 211], + lightpink: [255, 182, 193], + lightsalmon: [255, 160, 122], + lightseagreen: [32, 178, 170], + lightskyblue: [135, 206, 250], + lightslategray: [119, 136, 153], + lightslategrey: [119, 136, 153], + lightsteelblue: [176, 196, 222], + lightyellow: [255, 255, 224], + lime: [0, 255, 0], + limegreen: [50, 205, 50], + linen: [250, 240, 230], + magenta: [255, 0, 255], + maroon: [128, 0, 0], + mediumaquamarine: [102, 205, 170], + mediumblue: [0, 0, 205], + mediumorchid: [186, 85, 211], + mediumpurple: [147, 112, 219], + mediumseagreen: [60, 179, 113], + mediumslateblue: [123, 104, 238], + mediumspringgreen: [0, 250, 154], + mediumturquoise: [72, 209, 204], + mediumvioletred: [199, 21, 133], + midnightblue: [25, 25, 112], + mintcream: [245, 255, 250], + mistyrose: [255, 228, 225], + moccasin: [255, 228, 181], + navajowhite: [255, 222, 173], + navy: [0, 0, 128], + oldlace: [253, 245, 230], + olive: [128, 128, 0], + olivedrab: [107, 142, 35], + orange: [255, 165, 0], + orangered: [255, 69, 0], + orchid: [218, 112, 214], + palegoldenrod: [238, 232, 170], + palegreen: [152, 251, 152], + paleturquoise: [175, 238, 238], + palevioletred: [219, 112, 147], + papayawhip: [255, 239, 213], + peachpuff: [255, 218, 185], + peru: [205, 133, 63], + pink: [255, 192, 203], + plum: [221, 160, 221], + powderblue: [176, 224, 230], + purple: [128, 0, 128], + rebeccapurple: [102, 51, 153], + red: [255, 0, 0], + rosybrown: [188, 143, 143], + royalblue: [65, 105, 225], + saddlebrown: [139, 69, 19], + salmon: [250, 128, 114], + sandybrown: [244, 164, 96], + seagreen: [46, 139, 87], + seashell: [255, 245, 238], + sienna: [160, 82, 45], + silver: [192, 192, 192], + skyblue: [135, 206, 235], + slateblue: [106, 90, 205], + slategray: [112, 128, 144], + slategrey: [112, 128, 144], + snow: [255, 250, 250], + springgreen: [0, 255, 127], + steelblue: [70, 130, 180], + tan: [210, 180, 140], + teal: [0, 128, 128], + thistle: [216, 191, 216], + tomato: [255, 99, 71], + turquoise: [64, 224, 208], + violet: [238, 130, 238], + wheat: [245, 222, 179], + white: [255, 255, 255], + whitesmoke: [245, 245, 245], + yellow: [255, 255, 0], + yellowgreen: [154, 205, 50] +}; +for (const key in colors) Object.freeze(colors[key]); +var color_name_default = Object.freeze(colors); + +// node_modules/color-string/index.js +var reverseNames = /* @__PURE__ */ Object.create(null); +for (const name in color_name_default) { + if (Object.hasOwn(color_name_default, name)) { + reverseNames[color_name_default[name]] = name; + } +} +var cs = { + to: {}, + get: {} +}; +cs.get = function(string) { + const prefix = string.slice(0, 3).toLowerCase(); + let value; + let model; + switch (prefix) { + case "hsl": { + value = cs.get.hsl(string); + model = "hsl"; + break; + } + case "hwb": { + value = cs.get.hwb(string); + model = "hwb"; + break; + } + default: { + value = cs.get.rgb(string); + model = "rgb"; + break; + } + } + if (!value) { + return null; + } + return { model, value }; +}; +cs.get.rgb = function(string) { + if (!string) { + return null; + } + const abbr = /^#([a-f\d]{3,4})$/i; + const hex = /^#([a-f\d]{6})([a-f\d]{2})?$/i; + const rgba = /^rgba?\(\s*([+-]?(?:\d*\.)?\d+(?:e\d+)?)(?=[\s,])\s*(?:,\s*)?([+-]?(?:\d*\.)?\d+(?:e\d+)?)(?=[\s,])\s*(?:,\s*)?([+-]?(?:\d*\.)?\d+(?:e\d+)?)\s*(?:[\s,|/]\s*([+-]?(?:\d*\.)?\d+(?:e\d+)?)(%?)\s*)?\)$/i; + const per = /^rgba?\(\s*([+-]?[\d.]+)%\s*,?\s*([+-]?[\d.]+)%\s*,?\s*([+-]?[\d.]+)%\s*(?:[\s,|/]\s*([+-]?[\d.]+)(%?)\s*)?\)$/i; + const keyword = /^(\w+)$/; + let rgb = [0, 0, 0, 1]; + let match; + let i; + let hexAlpha; + if (match = string.match(hex)) { + hexAlpha = match[2]; + match = match[1]; + for (i = 0; i < 3; i++) { + const i2 = i * 2; + rgb[i] = Number.parseInt(match.slice(i2, i2 + 2), 16); + } + if (hexAlpha) { + rgb[3] = Number.parseInt(hexAlpha, 16) / 255; + } + } else if (match = string.match(abbr)) { + match = match[1]; + hexAlpha = match[3]; + for (i = 0; i < 3; i++) { + rgb[i] = Number.parseInt(match[i] + match[i], 16); + } + if (hexAlpha) { + rgb[3] = Number.parseInt(hexAlpha + hexAlpha, 16) / 255; + } + } else if (match = string.match(rgba)) { + for (i = 0; i < 3; i++) { + rgb[i] = Number.parseFloat(match[i + 1]); + } + if (match[4]) { + rgb[3] = match[5] ? Number.parseFloat(match[4]) * 0.01 : Number.parseFloat(match[4]); + } + } else if (match = string.match(per)) { + for (i = 0; i < 3; i++) { + rgb[i] = Math.round(Number.parseFloat(match[i + 1]) * 2.55); + } + if (match[4]) { + rgb[3] = match[5] ? Number.parseFloat(match[4]) * 0.01 : Number.parseFloat(match[4]); + } + } else if (match = string.toLowerCase().match(keyword)) { + if (match[1] === "transparent") { + return [0, 0, 0, 0]; + } + if (!Object.hasOwn(color_name_default, match[1])) { + return null; + } + rgb = color_name_default[match[1]].slice(); + rgb[3] = 1; + return rgb; + } else { + return null; + } + for (i = 0; i < 3; i++) { + rgb[i] = clamp(rgb[i], 0, 255); + } + rgb[3] = clamp(rgb[3], 0, 1); + return rgb; +}; +cs.get.hsl = function(string) { + if (!string) { + return null; + } + const hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d.]+)%\s*,?\s*([+-]?[\d.]+)%\s*(?:[,|/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:e[+-]?\d+)?)\s*)?\)$/i; + const match = string.match(hsl); + if (match) { + const alpha = Number.parseFloat(match[4]); + const h = (Number.parseFloat(match[1]) % 360 + 360) % 360; + const s = clamp(Number.parseFloat(match[2]), 0, 100); + const l = clamp(Number.parseFloat(match[3]), 0, 100); + const a = clamp(Number.isNaN(alpha) ? 1 : alpha, 0, 1); + return [h, s, l, a]; + } + return null; +}; +cs.get.hwb = function(string) { + if (!string) { + return null; + } + const hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*[\s,]\s*([+-]?[\d.]+)%\s*[\s,]\s*([+-]?[\d.]+)%\s*(?:[\s,]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:e[+-]?\d+)?)\s*)?\)$/i; + const match = string.match(hwb); + if (match) { + const alpha = Number.parseFloat(match[4]); + const h = (Number.parseFloat(match[1]) % 360 + 360) % 360; + const w = clamp(Number.parseFloat(match[2]), 0, 100); + const b = clamp(Number.parseFloat(match[3]), 0, 100); + const a = clamp(Number.isNaN(alpha) ? 1 : alpha, 0, 1); + return [h, w, b, a]; + } + return null; +}; +cs.to.hex = function(...rgba) { + return "#" + hexDouble(rgba[0]) + hexDouble(rgba[1]) + hexDouble(rgba[2]) + (rgba[3] < 1 ? hexDouble(Math.round(rgba[3] * 255)) : ""); +}; +cs.to.rgb = function(...rgba) { + return rgba.length < 4 || rgba[3] === 1 ? "rgb(" + Math.round(rgba[0]) + ", " + Math.round(rgba[1]) + ", " + Math.round(rgba[2]) + ")" : "rgba(" + Math.round(rgba[0]) + ", " + Math.round(rgba[1]) + ", " + Math.round(rgba[2]) + ", " + rgba[3] + ")"; +}; +cs.to.rgb.percent = function(...rgba) { + const r = Math.round(rgba[0] / 255 * 100); + const g = Math.round(rgba[1] / 255 * 100); + const b = Math.round(rgba[2] / 255 * 100); + return rgba.length < 4 || rgba[3] === 1 ? "rgb(" + r + "%, " + g + "%, " + b + "%)" : "rgba(" + r + "%, " + g + "%, " + b + "%, " + rgba[3] + ")"; +}; +cs.to.hsl = function(...hsla) { + return hsla.length < 4 || hsla[3] === 1 ? "hsl(" + hsla[0] + ", " + hsla[1] + "%, " + hsla[2] + "%)" : "hsla(" + hsla[0] + ", " + hsla[1] + "%, " + hsla[2] + "%, " + hsla[3] + ")"; +}; +cs.to.hwb = function(...hwba) { + let a = ""; + if (hwba.length >= 4 && hwba[3] !== 1) { + a = ", " + hwba[3]; + } + return "hwb(" + hwba[0] + ", " + hwba[1] + "%, " + hwba[2] + "%" + a + ")"; +}; +cs.to.keyword = function(...rgb) { + return reverseNames[rgb.slice(0, 3)]; +}; +function clamp(number_, min, max) { + return Math.min(Math.max(min, number_), max); +} +function hexDouble(number_) { + const string_ = Math.round(number_).toString(16).toUpperCase(); + return string_.length < 2 ? "0" + string_ : string_; +} +var color_string_default = cs; + +// node_modules/color-convert/conversions.js +var reverseKeywords = {}; +for (const key of Object.keys(color_name_default)) { + reverseKeywords[color_name_default[key]] = key; +} +var convert = { + rgb: { channels: 3, labels: "rgb" }, + hsl: { channels: 3, labels: "hsl" }, + hsv: { channels: 3, labels: "hsv" }, + hwb: { channels: 3, labels: "hwb" }, + cmyk: { channels: 4, labels: "cmyk" }, + xyz: { channels: 3, labels: "xyz" }, + lab: { channels: 3, labels: "lab" }, + oklab: { channels: 3, labels: ["okl", "oka", "okb"] }, + lch: { channels: 3, labels: "lch" }, + oklch: { channels: 3, labels: ["okl", "okc", "okh"] }, + hex: { channels: 1, labels: ["hex"] }, + keyword: { channels: 1, labels: ["keyword"] }, + ansi16: { channels: 1, labels: ["ansi16"] }, + ansi256: { channels: 1, labels: ["ansi256"] }, + hcg: { channels: 3, labels: ["h", "c", "g"] }, + apple: { channels: 3, labels: ["r16", "g16", "b16"] }, + gray: { channels: 1, labels: ["gray"] } +}; +var conversions_default = convert; +var LAB_FT = (6 / 29) ** 3; +function srgbNonlinearTransform(c) { + const cc = c > 31308e-7 ? 1.055 * c ** (1 / 2.4) - 0.055 : c * 12.92; + return Math.min(Math.max(0, cc), 1); +} +function srgbNonlinearTransformInv(c) { + return c > 0.04045 ? ((c + 0.055) / 1.055) ** 2.4 : c / 12.92; +} +for (const model of Object.keys(convert)) { + if (!("channels" in convert[model])) { + throw new Error("missing channels property: " + model); + } + if (!("labels" in convert[model])) { + throw new Error("missing channel labels property: " + model); + } + if (convert[model].labels.length !== convert[model].channels) { + throw new Error("channel and label counts mismatch: " + model); + } + const { channels, labels } = convert[model]; + delete convert[model].channels; + delete convert[model].labels; + Object.defineProperty(convert[model], "channels", { value: channels }); + Object.defineProperty(convert[model], "labels", { value: labels }); +} +convert.rgb.hsl = function(rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const min = Math.min(r, g, b); + const max = Math.max(r, g, b); + const delta = max - min; + let h; + let s; + switch (max) { + case min: { + h = 0; + break; + } + case r: { + h = (g - b) / delta; + break; + } + case g: { + h = 2 + (b - r) / delta; + break; + } + case b: { + h = 4 + (r - g) / delta; + break; + } + } + h = Math.min(h * 60, 360); + if (h < 0) { + h += 360; + } + const l = (min + max) / 2; + if (max === min) { + s = 0; + } else if (l <= 0.5) { + s = delta / (max + min); + } else { + s = delta / (2 - max - min); + } + return [h, s * 100, l * 100]; +}; +convert.rgb.hsv = function(rgb) { + let rdif; + let gdif; + let bdif; + let h; + let s; + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const v = Math.max(r, g, b); + const diff = v - Math.min(r, g, b); + const diffc = function(c) { + return (v - c) / 6 / diff + 1 / 2; + }; + if (diff === 0) { + h = 0; + s = 0; + } else { + s = diff / v; + rdif = diffc(r); + gdif = diffc(g); + bdif = diffc(b); + switch (v) { + case r: { + h = bdif - gdif; + break; + } + case g: { + h = 1 / 3 + rdif - bdif; + break; + } + case b: { + h = 2 / 3 + gdif - rdif; + break; + } + } + if (h < 0) { + h += 1; + } else if (h > 1) { + h -= 1; + } + } + return [ + h * 360, + s * 100, + v * 100 + ]; +}; +convert.rgb.hwb = function(rgb) { + const r = rgb[0]; + const g = rgb[1]; + let b = rgb[2]; + const h = convert.rgb.hsl(rgb)[0]; + const w = 1 / 255 * Math.min(r, Math.min(g, b)); + b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); + return [h, w * 100, b * 100]; +}; +convert.rgb.oklab = function(rgb) { + const r = srgbNonlinearTransformInv(rgb[0] / 255); + const g = srgbNonlinearTransformInv(rgb[1] / 255); + const b = srgbNonlinearTransformInv(rgb[2] / 255); + const lp = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b); + const mp = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b); + const sp = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b); + const l = 0.2104542553 * lp + 0.793617785 * mp - 0.0040720468 * sp; + const aa = 1.9779984951 * lp - 2.428592205 * mp + 0.4505937099 * sp; + const bb = 0.0259040371 * lp + 0.7827717662 * mp - 0.808675766 * sp; + return [l * 100, aa * 100, bb * 100]; +}; +convert.rgb.cmyk = function(rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const k = Math.min(1 - r, 1 - g, 1 - b); + const c = (1 - r - k) / (1 - k) || 0; + const m = (1 - g - k) / (1 - k) || 0; + const y = (1 - b - k) / (1 - k) || 0; + return [c * 100, m * 100, y * 100, k * 100]; +}; +function comparativeDistance(x, y) { + return (x[0] - y[0]) ** 2 + (x[1] - y[1]) ** 2 + (x[2] - y[2]) ** 2; +} +convert.rgb.keyword = function(rgb) { + const reversed = reverseKeywords[rgb]; + if (reversed) { + return reversed; + } + let currentClosestDistance = Number.POSITIVE_INFINITY; + let currentClosestKeyword; + for (const keyword of Object.keys(color_name_default)) { + const value = color_name_default[keyword]; + const distance = comparativeDistance(rgb, value); + if (distance < currentClosestDistance) { + currentClosestDistance = distance; + currentClosestKeyword = keyword; + } + } + return currentClosestKeyword; +}; +convert.keyword.rgb = function(keyword) { + return [...color_name_default[keyword]]; +}; +convert.rgb.xyz = function(rgb) { + const r = srgbNonlinearTransformInv(rgb[0] / 255); + const g = srgbNonlinearTransformInv(rgb[1] / 255); + const b = srgbNonlinearTransformInv(rgb[2] / 255); + const x = r * 0.4124564 + g * 0.3575761 + b * 0.1804375; + const y = r * 0.2126729 + g * 0.7151522 + b * 0.072175; + const z = r * 0.0193339 + g * 0.119192 + b * 0.9503041; + return [x * 100, y * 100, z * 100]; +}; +convert.rgb.lab = function(rgb) { + const xyz = convert.rgb.xyz(rgb); + let x = xyz[0]; + let y = xyz[1]; + let z = xyz[2]; + x /= 95.047; + y /= 100; + z /= 108.883; + x = x > LAB_FT ? x ** (1 / 3) : 7.787 * x + 16 / 116; + y = y > LAB_FT ? y ** (1 / 3) : 7.787 * y + 16 / 116; + z = z > LAB_FT ? z ** (1 / 3) : 7.787 * z + 16 / 116; + const l = 116 * y - 16; + const a = 500 * (x - y); + const b = 200 * (y - z); + return [l, a, b]; +}; +convert.hsl.rgb = function(hsl) { + const h = hsl[0] / 360; + const s = hsl[1] / 100; + const l = hsl[2] / 100; + let t3; + let value; + if (s === 0) { + value = l * 255; + return [value, value, value]; + } + const t2 = l < 0.5 ? l * (1 + s) : l + s - l * s; + const t1 = 2 * l - t2; + const rgb = [0, 0, 0]; + for (let i = 0; i < 3; i++) { + t3 = h + 1 / 3 * -(i - 1); + if (t3 < 0) { + t3++; + } + if (t3 > 1) { + t3--; + } + if (6 * t3 < 1) { + value = t1 + (t2 - t1) * 6 * t3; + } else if (2 * t3 < 1) { + value = t2; + } else if (3 * t3 < 2) { + value = t1 + (t2 - t1) * (2 / 3 - t3) * 6; + } else { + value = t1; + } + rgb[i] = value * 255; + } + return rgb; +}; +convert.hsl.hsv = function(hsl) { + const h = hsl[0]; + let s = hsl[1] / 100; + let l = hsl[2] / 100; + let smin = s; + const lmin = Math.max(l, 0.01); + l *= 2; + s *= l <= 1 ? l : 2 - l; + smin *= lmin <= 1 ? lmin : 2 - lmin; + const v = (l + s) / 2; + const sv = l === 0 ? 2 * smin / (lmin + smin) : 2 * s / (l + s); + return [h, sv * 100, v * 100]; +}; +convert.hsv.rgb = function(hsv) { + const h = hsv[0] / 60; + const s = hsv[1] / 100; + let v = hsv[2] / 100; + const hi = Math.floor(h) % 6; + const f = h - Math.floor(h); + const p = 255 * v * (1 - s); + const q = 255 * v * (1 - s * f); + const t = 255 * v * (1 - s * (1 - f)); + v *= 255; + switch (hi) { + case 0: { + return [v, t, p]; + } + case 1: { + return [q, v, p]; + } + case 2: { + return [p, v, t]; + } + case 3: { + return [p, q, v]; + } + case 4: { + return [t, p, v]; + } + case 5: { + return [v, p, q]; + } + } +}; +convert.hsv.hsl = function(hsv) { + const h = hsv[0]; + const s = hsv[1] / 100; + const v = hsv[2] / 100; + const vmin = Math.max(v, 0.01); + let sl; + let l; + l = (2 - s) * v; + const lmin = (2 - s) * vmin; + sl = s * vmin; + sl /= lmin <= 1 ? lmin : 2 - lmin; + sl = sl || 0; + l /= 2; + return [h, sl * 100, l * 100]; +}; +convert.hwb.rgb = function(hwb) { + const h = hwb[0] / 360; + let wh = hwb[1] / 100; + let bl = hwb[2] / 100; + const ratio = wh + bl; + let f; + if (ratio > 1) { + wh /= ratio; + bl /= ratio; + } + const i = Math.floor(6 * h); + const v = 1 - bl; + f = 6 * h - i; + if ((i & 1) !== 0) { + f = 1 - f; + } + const n = wh + f * (v - wh); + let r; + let g; + let b; + switch (i) { + default: + case 6: + case 0: { + r = v; + g = n; + b = wh; + break; + } + case 1: { + r = n; + g = v; + b = wh; + break; + } + case 2: { + r = wh; + g = v; + b = n; + break; + } + case 3: { + r = wh; + g = n; + b = v; + break; + } + case 4: { + r = n; + g = wh; + b = v; + break; + } + case 5: { + r = v; + g = wh; + b = n; + break; + } + } + return [r * 255, g * 255, b * 255]; +}; +convert.cmyk.rgb = function(cmyk) { + const c = cmyk[0] / 100; + const m = cmyk[1] / 100; + const y = cmyk[2] / 100; + const k = cmyk[3] / 100; + const r = 1 - Math.min(1, c * (1 - k) + k); + const g = 1 - Math.min(1, m * (1 - k) + k); + const b = 1 - Math.min(1, y * (1 - k) + k); + return [r * 255, g * 255, b * 255]; +}; +convert.xyz.rgb = function(xyz) { + const x = xyz[0] / 100; + const y = xyz[1] / 100; + const z = xyz[2] / 100; + let r; + let g; + let b; + r = x * 3.2404542 + y * -1.5371385 + z * -0.4985314; + g = x * -0.969266 + y * 1.8760108 + z * 0.041556; + b = x * 0.0556434 + y * -0.2040259 + z * 1.0572252; + r = srgbNonlinearTransform(r); + g = srgbNonlinearTransform(g); + b = srgbNonlinearTransform(b); + return [r * 255, g * 255, b * 255]; +}; +convert.xyz.lab = function(xyz) { + let x = xyz[0]; + let y = xyz[1]; + let z = xyz[2]; + x /= 95.047; + y /= 100; + z /= 108.883; + x = x > LAB_FT ? x ** (1 / 3) : 7.787 * x + 16 / 116; + y = y > LAB_FT ? y ** (1 / 3) : 7.787 * y + 16 / 116; + z = z > LAB_FT ? z ** (1 / 3) : 7.787 * z + 16 / 116; + const l = 116 * y - 16; + const a = 500 * (x - y); + const b = 200 * (y - z); + return [l, a, b]; +}; +convert.xyz.oklab = function(xyz) { + const x = xyz[0] / 100; + const y = xyz[1] / 100; + const z = xyz[2] / 100; + const lp = Math.cbrt(0.8189330101 * x + 0.3618667424 * y - 0.1288597137 * z); + const mp = Math.cbrt(0.0329845436 * x + 0.9293118715 * y + 0.0361456387 * z); + const sp = Math.cbrt(0.0482003018 * x + 0.2643662691 * y + 0.633851707 * z); + const l = 0.2104542553 * lp + 0.793617785 * mp - 0.0040720468 * sp; + const a = 1.9779984951 * lp - 2.428592205 * mp + 0.4505937099 * sp; + const b = 0.0259040371 * lp + 0.7827717662 * mp - 0.808675766 * sp; + return [l * 100, a * 100, b * 100]; +}; +convert.oklab.oklch = function(oklab) { + return convert.lab.lch(oklab); +}; +convert.oklab.xyz = function(oklab) { + const ll = oklab[0] / 100; + const a = oklab[1] / 100; + const b = oklab[2] / 100; + const l = (0.999999998 * ll + 0.396337792 * a + 0.215803758 * b) ** 3; + const m = (1.000000008 * ll - 0.105561342 * a - 0.063854175 * b) ** 3; + const s = (1.000000055 * ll - 0.089484182 * a - 1.291485538 * b) ** 3; + const x = 1.227013851 * l - 0.55779998 * m + 0.281256149 * s; + const y = -0.040580178 * l + 1.11225687 * m - 0.071676679 * s; + const z = -0.076381285 * l - 0.421481978 * m + 1.58616322 * s; + return [x * 100, y * 100, z * 100]; +}; +convert.oklab.rgb = function(oklab) { + const ll = oklab[0] / 100; + const aa = oklab[1] / 100; + const bb = oklab[2] / 100; + const l = (ll + 0.3963377774 * aa + 0.2158037573 * bb) ** 3; + const m = (ll - 0.1055613458 * aa - 0.0638541728 * bb) ** 3; + const s = (ll - 0.0894841775 * aa - 1.291485548 * bb) ** 3; + const r = srgbNonlinearTransform(4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s); + const g = srgbNonlinearTransform(-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s); + const b = srgbNonlinearTransform(-0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s); + return [r * 255, g * 255, b * 255]; +}; +convert.oklch.oklab = function(oklch) { + return convert.lch.lab(oklch); +}; +convert.lab.xyz = function(lab) { + const l = lab[0]; + const a = lab[1]; + const b = lab[2]; + let x; + let y; + let z; + y = (l + 16) / 116; + x = a / 500 + y; + z = y - b / 200; + const y2 = y ** 3; + const x2 = x ** 3; + const z2 = z ** 3; + y = y2 > LAB_FT ? y2 : (y - 16 / 116) / 7.787; + x = x2 > LAB_FT ? x2 : (x - 16 / 116) / 7.787; + z = z2 > LAB_FT ? z2 : (z - 16 / 116) / 7.787; + x *= 95.047; + y *= 100; + z *= 108.883; + return [x, y, z]; +}; +convert.lab.lch = function(lab) { + const l = lab[0]; + const a = lab[1]; + const b = lab[2]; + let h; + const hr = Math.atan2(b, a); + h = hr * 360 / 2 / Math.PI; + if (h < 0) { + h += 360; + } + const c = Math.sqrt(a * a + b * b); + return [l, c, h]; +}; +convert.lch.lab = function(lch) { + const l = lch[0]; + const c = lch[1]; + const h = lch[2]; + const hr = h / 360 * 2 * Math.PI; + const a = c * Math.cos(hr); + const b = c * Math.sin(hr); + return [l, a, b]; +}; +convert.rgb.ansi16 = function(args, saturation = null) { + const [r, g, b] = args; + let value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; + value = Math.round(value / 50); + if (value === 0) { + return 30; + } + let ansi = 30 + (Math.round(b / 255) << 2 | Math.round(g / 255) << 1 | Math.round(r / 255)); + if (value === 2) { + ansi += 60; + } + return ansi; +}; +convert.hsv.ansi16 = function(args) { + return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); +}; +convert.rgb.ansi256 = function(args) { + const r = args[0]; + const g = args[1]; + const b = args[2]; + if (r >> 4 === g >> 4 && g >> 4 === b >> 4) { + if (r < 8) { + return 16; + } + if (r > 248) { + return 231; + } + return Math.round((r - 8) / 247 * 24) + 232; + } + const ansi = 16 + 36 * Math.round(r / 255 * 5) + 6 * Math.round(g / 255 * 5) + Math.round(b / 255 * 5); + return ansi; +}; +convert.ansi16.rgb = function(args) { + args = args[0]; + let color = args % 10; + if (color === 0 || color === 7) { + if (args > 50) { + color += 3.5; + } + color = color / 10.5 * 255; + return [color, color, color]; + } + const mult = (Math.trunc(args > 50) + 1) * 0.5; + const r = (color & 1) * mult * 255; + const g = (color >> 1 & 1) * mult * 255; + const b = (color >> 2 & 1) * mult * 255; + return [r, g, b]; +}; +convert.ansi256.rgb = function(args) { + args = args[0]; + if (args >= 232) { + const c = (args - 232) * 10 + 8; + return [c, c, c]; + } + args -= 16; + let rem; + const r = Math.floor(args / 36) / 5 * 255; + const g = Math.floor((rem = args % 36) / 6) / 5 * 255; + const b = rem % 6 / 5 * 255; + return [r, g, b]; +}; +convert.rgb.hex = function(args) { + const integer = ((Math.round(args[0]) & 255) << 16) + ((Math.round(args[1]) & 255) << 8) + (Math.round(args[2]) & 255); + const string = integer.toString(16).toUpperCase(); + return "000000".slice(string.length) + string; +}; +convert.hex.rgb = function(args) { + const match = args.toString(16).match(/[a-f\d]{6}|[a-f\d]{3}/i); + if (!match) { + return [0, 0, 0]; + } + let colorString = match[0]; + if (match[0].length === 3) { + colorString = [...colorString].map((char) => char + char).join(""); + } + const integer = Number.parseInt(colorString, 16); + const r = integer >> 16 & 255; + const g = integer >> 8 & 255; + const b = integer & 255; + return [r, g, b]; +}; +convert.rgb.hcg = function(rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const max = Math.max(Math.max(r, g), b); + const min = Math.min(Math.min(r, g), b); + const chroma = max - min; + let hue; + const grayscale = chroma < 1 ? min / (1 - chroma) : 0; + if (chroma <= 0) { + hue = 0; + } else if (max === r) { + hue = (g - b) / chroma % 6; + } else if (max === g) { + hue = 2 + (b - r) / chroma; + } else { + hue = 4 + (r - g) / chroma; + } + hue /= 6; + hue %= 1; + return [hue * 360, chroma * 100, grayscale * 100]; +}; +convert.hsl.hcg = function(hsl) { + const s = hsl[1] / 100; + const l = hsl[2] / 100; + const c = l < 0.5 ? 2 * s * l : 2 * s * (1 - l); + let f = 0; + if (c < 1) { + f = (l - 0.5 * c) / (1 - c); + } + return [hsl[0], c * 100, f * 100]; +}; +convert.hsv.hcg = function(hsv) { + const s = hsv[1] / 100; + const v = hsv[2] / 100; + const c = s * v; + let f = 0; + if (c < 1) { + f = (v - c) / (1 - c); + } + return [hsv[0], c * 100, f * 100]; +}; +convert.hcg.rgb = function(hcg) { + const h = hcg[0] / 360; + const c = hcg[1] / 100; + const g = hcg[2] / 100; + if (c === 0) { + return [g * 255, g * 255, g * 255]; + } + const pure = [0, 0, 0]; + const hi = h % 1 * 6; + const v = hi % 1; + const w = 1 - v; + let mg = 0; + switch (Math.floor(hi)) { + case 0: { + pure[0] = 1; + pure[1] = v; + pure[2] = 0; + break; + } + case 1: { + pure[0] = w; + pure[1] = 1; + pure[2] = 0; + break; + } + case 2: { + pure[0] = 0; + pure[1] = 1; + pure[2] = v; + break; + } + case 3: { + pure[0] = 0; + pure[1] = w; + pure[2] = 1; + break; + } + case 4: { + pure[0] = v; + pure[1] = 0; + pure[2] = 1; + break; + } + default: { + pure[0] = 1; + pure[1] = 0; + pure[2] = w; + } + } + mg = (1 - c) * g; + return [ + (c * pure[0] + mg) * 255, + (c * pure[1] + mg) * 255, + (c * pure[2] + mg) * 255 + ]; +}; +convert.hcg.hsv = function(hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; + const v = c + g * (1 - c); + let f = 0; + if (v > 0) { + f = c / v; + } + return [hcg[0], f * 100, v * 100]; +}; +convert.hcg.hsl = function(hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; + const l = g * (1 - c) + 0.5 * c; + let s = 0; + if (l > 0 && l < 0.5) { + s = c / (2 * l); + } else if (l >= 0.5 && l < 1) { + s = c / (2 * (1 - l)); + } + return [hcg[0], s * 100, l * 100]; +}; +convert.hcg.hwb = function(hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; + const v = c + g * (1 - c); + return [hcg[0], (v - c) * 100, (1 - v) * 100]; +}; +convert.hwb.hcg = function(hwb) { + const w = hwb[1] / 100; + const b = hwb[2] / 100; + const v = 1 - b; + const c = v - w; + let g = 0; + if (c < 1) { + g = (v - c) / (1 - c); + } + return [hwb[0], c * 100, g * 100]; +}; +convert.apple.rgb = function(apple) { + return [apple[0] / 65535 * 255, apple[1] / 65535 * 255, apple[2] / 65535 * 255]; +}; +convert.rgb.apple = function(rgb) { + return [rgb[0] / 255 * 65535, rgb[1] / 255 * 65535, rgb[2] / 255 * 65535]; +}; +convert.gray.rgb = function(args) { + return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; +}; +convert.gray.hsl = function(args) { + return [0, 0, args[0]]; +}; +convert.gray.hsv = convert.gray.hsl; +convert.gray.hwb = function(gray) { + return [0, 100, gray[0]]; +}; +convert.gray.cmyk = function(gray) { + return [0, 0, 0, gray[0]]; +}; +convert.gray.lab = function(gray) { + return [gray[0], 0, 0]; +}; +convert.gray.hex = function(gray) { + const value = Math.round(gray[0] / 100 * 255) & 255; + const integer = (value << 16) + (value << 8) + value; + const string = integer.toString(16).toUpperCase(); + return "000000".slice(string.length) + string; +}; +convert.rgb.gray = function(rgb) { + const value = (rgb[0] + rgb[1] + rgb[2]) / 3; + return [value / 255 * 100]; +}; + +// node_modules/color-convert/route.js +function buildGraph() { + const graph = {}; + const models2 = Object.keys(conversions_default); + for (let { length } = models2, i = 0; i < length; i++) { + graph[models2[i]] = { + // http://jsperf.com/1-vs-infinity + // micro-opt, but this is simple. + distance: -1, + parent: null + }; + } + return graph; +} +function deriveBFS(fromModel) { + const graph = buildGraph(); + const queue = [fromModel]; + graph[fromModel].distance = 0; + while (queue.length > 0) { + const current = queue.pop(); + const adjacents = Object.keys(conversions_default[current]); + for (let { length } = adjacents, i = 0; i < length; i++) { + const adjacent = adjacents[i]; + const node = graph[adjacent]; + if (node.distance === -1) { + node.distance = graph[current].distance + 1; + node.parent = current; + queue.unshift(adjacent); + } + } + } + return graph; +} +function link(from, to) { + return function(args) { + return to(from(args)); + }; +} +function wrapConversion(toModel, graph) { + const path = [graph[toModel].parent, toModel]; + let fn = conversions_default[graph[toModel].parent][toModel]; + let cur = graph[toModel].parent; + while (graph[cur].parent) { + path.unshift(graph[cur].parent); + fn = link(conversions_default[graph[cur].parent][cur], fn); + cur = graph[cur].parent; + } + fn.conversion = path; + return fn; +} +function route(fromModel) { + const graph = deriveBFS(fromModel); + const conversion = {}; + const models2 = Object.keys(graph); + for (let { length } = models2, i = 0; i < length; i++) { + const toModel = models2[i]; + const node = graph[toModel]; + if (node.parent === null) { + continue; + } + conversion[toModel] = wrapConversion(toModel, graph); + } + return conversion; +} +var route_default = route; + +// node_modules/color-convert/index.js +var convert2 = {}; +var models = Object.keys(conversions_default); +function wrapRaw(fn) { + const wrappedFn = function(...args) { + const arg0 = args[0]; + if (arg0 === void 0 || arg0 === null) { + return arg0; + } + if (arg0.length > 1) { + args = arg0; + } + return fn(args); + }; + if ("conversion" in fn) { + wrappedFn.conversion = fn.conversion; + } + return wrappedFn; +} +function wrapRounded(fn) { + const wrappedFn = function(...args) { + const arg0 = args[0]; + if (arg0 === void 0 || arg0 === null) { + return arg0; + } + if (arg0.length > 1) { + args = arg0; + } + const result = fn(args); + if (typeof result === "object") { + for (let { length } = result, i = 0; i < length; i++) { + result[i] = Math.round(result[i]); + } + } + return result; + }; + if ("conversion" in fn) { + wrappedFn.conversion = fn.conversion; + } + return wrappedFn; +} +for (const fromModel of models) { + convert2[fromModel] = {}; + Object.defineProperty(convert2[fromModel], "channels", { value: conversions_default[fromModel].channels }); + Object.defineProperty(convert2[fromModel], "labels", { value: conversions_default[fromModel].labels }); + const routes = route_default(fromModel); + const routeModels = Object.keys(routes); + for (const toModel of routeModels) { + const fn = routes[toModel]; + convert2[fromModel][toModel] = wrapRounded(fn); + convert2[fromModel][toModel].raw = wrapRaw(fn); + } +} +var color_convert_default = convert2; + +// node_modules/color/index.js +var skippedModels = [ + // To be honest, I don't really feel like keyword belongs in color convert, but eh. + "keyword", + // Gray conflicts with some method names, and has its own method defined. + "gray", + // Shouldn't really be in color-convert either... + "hex" +]; +var hashedModelKeys = {}; +for (const model of Object.keys(color_convert_default)) { + hashedModelKeys[[...color_convert_default[model].labels].sort().join("")] = model; +} +var limiters = {}; +function Color(object, model) { + if (!(this instanceof Color)) { + return new Color(object, model); + } + if (model && model in skippedModels) { + model = null; + } + if (model && !(model in color_convert_default)) { + throw new Error("Unknown model: " + model); + } + let i; + let channels; + if (object == null) { + this.model = "rgb"; + this.color = [0, 0, 0]; + this.valpha = 1; + } else if (object instanceof Color) { + this.model = object.model; + this.color = [...object.color]; + this.valpha = object.valpha; + } else if (typeof object === "string") { + const result = color_string_default.get(object); + if (result === null) { + throw new Error("Unable to parse color from string: " + object); + } + this.model = result.model; + channels = color_convert_default[this.model].channels; + this.color = result.value.slice(0, channels); + this.valpha = typeof result.value[channels] === "number" ? result.value[channels] : 1; + } else if (object.length > 0) { + this.model = model || "rgb"; + channels = color_convert_default[this.model].channels; + const newArray = Array.prototype.slice.call(object, 0, channels); + this.color = zeroArray(newArray, channels); + this.valpha = typeof object[channels] === "number" ? object[channels] : 1; + } else if (typeof object === "number") { + this.model = "rgb"; + this.color = [ + object >> 16 & 255, + object >> 8 & 255, + object & 255 + ]; + this.valpha = 1; + } else { + this.valpha = 1; + const keys = Object.keys(object); + if ("alpha" in object) { + keys.splice(keys.indexOf("alpha"), 1); + this.valpha = typeof object.alpha === "number" ? object.alpha : 0; + } + const hashedKeys = keys.sort().join(""); + if (!(hashedKeys in hashedModelKeys)) { + throw new Error("Unable to parse color from object: " + JSON.stringify(object)); + } + this.model = hashedModelKeys[hashedKeys]; + const { labels } = color_convert_default[this.model]; + const color = []; + for (i = 0; i < labels.length; i++) { + color.push(object[labels[i]]); + } + this.color = zeroArray(color); + } + if (limiters[this.model]) { + channels = color_convert_default[this.model].channels; + for (i = 0; i < channels; i++) { + const limit = limiters[this.model][i]; + if (limit) { + this.color[i] = limit(this.color[i]); + } + } + } + this.valpha = Math.max(0, Math.min(1, this.valpha)); + if (Object.freeze) { + Object.freeze(this); + } +} +Color.prototype = { + toString() { + return this.string(); + }, + toJSON() { + return this[this.model](); + }, + string(places) { + let self = this.model in color_string_default.to ? this : this.rgb(); + self = self.round(typeof places === "number" ? places : 1); + const arguments_ = self.valpha === 1 ? self.color : [...self.color, this.valpha]; + return color_string_default.to[self.model](...arguments_); + }, + percentString(places) { + const self = this.rgb().round(typeof places === "number" ? places : 1); + const arguments_ = self.valpha === 1 ? self.color : [...self.color, this.valpha]; + return color_string_default.to.rgb.percent(...arguments_); + }, + array() { + return this.valpha === 1 ? [...this.color] : [...this.color, this.valpha]; + }, + object() { + const result = {}; + const { channels } = color_convert_default[this.model]; + const { labels } = color_convert_default[this.model]; + for (let i = 0; i < channels; i++) { + result[labels[i]] = this.color[i]; + } + if (this.valpha !== 1) { + result.alpha = this.valpha; + } + return result; + }, + unitArray() { + const rgb = this.rgb().color; + rgb[0] /= 255; + rgb[1] /= 255; + rgb[2] /= 255; + if (this.valpha !== 1) { + rgb.push(this.valpha); + } + return rgb; + }, + unitObject() { + const rgb = this.rgb().object(); + rgb.r /= 255; + rgb.g /= 255; + rgb.b /= 255; + if (this.valpha !== 1) { + rgb.alpha = this.valpha; + } + return rgb; + }, + round(places) { + places = Math.max(places || 0, 0); + return new Color([...this.color.map(roundToPlace(places)), this.valpha], this.model); + }, + alpha(value) { + if (value !== void 0) { + return new Color([...this.color, Math.max(0, Math.min(1, value))], this.model); + } + return this.valpha; + }, + // Rgb + red: getset("rgb", 0, maxfn(255)), + green: getset("rgb", 1, maxfn(255)), + blue: getset("rgb", 2, maxfn(255)), + hue: getset(["hsl", "hsv", "hsl", "hwb", "hcg"], 0, (value) => (value % 360 + 360) % 360), + saturationl: getset("hsl", 1, maxfn(100)), + lightness: getset("hsl", 2, maxfn(100)), + saturationv: getset("hsv", 1, maxfn(100)), + value: getset("hsv", 2, maxfn(100)), + chroma: getset("hcg", 1, maxfn(100)), + gray: getset("hcg", 2, maxfn(100)), + white: getset("hwb", 1, maxfn(100)), + wblack: getset("hwb", 2, maxfn(100)), + cyan: getset("cmyk", 0, maxfn(100)), + magenta: getset("cmyk", 1, maxfn(100)), + yellow: getset("cmyk", 2, maxfn(100)), + black: getset("cmyk", 3, maxfn(100)), + x: getset("xyz", 0, maxfn(95.047)), + y: getset("xyz", 1, maxfn(100)), + z: getset("xyz", 2, maxfn(108.833)), + l: getset("lab", 0, maxfn(100)), + a: getset("lab", 1), + b: getset("lab", 2), + keyword(value) { + if (value !== void 0) { + return new Color(value); + } + return color_convert_default[this.model].keyword(this.color); + }, + hex(value) { + if (value !== void 0) { + return new Color(value); + } + return color_string_default.to.hex(...this.rgb().round().color); + }, + hexa(value) { + if (value !== void 0) { + return new Color(value); + } + const rgbArray = this.rgb().round().color; + let alphaHex = Math.round(this.valpha * 255).toString(16).toUpperCase(); + if (alphaHex.length === 1) { + alphaHex = "0" + alphaHex; + } + return color_string_default.to.hex(...rgbArray) + alphaHex; + }, + rgbNumber() { + const rgb = this.rgb().color; + return (rgb[0] & 255) << 16 | (rgb[1] & 255) << 8 | rgb[2] & 255; + }, + luminosity() { + const rgb = this.rgb().color; + const lum = []; + for (const [i, element] of rgb.entries()) { + const chan = element / 255; + lum[i] = chan <= 0.04045 ? chan / 12.92 : ((chan + 0.055) / 1.055) ** 2.4; + } + return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2]; + }, + contrast(color2) { + const lum1 = this.luminosity(); + const lum2 = color2.luminosity(); + if (lum1 > lum2) { + return (lum1 + 0.05) / (lum2 + 0.05); + } + return (lum2 + 0.05) / (lum1 + 0.05); + }, + level(color2) { + const contrastRatio = this.contrast(color2); + if (contrastRatio >= 7) { + return "AAA"; + } + return contrastRatio >= 4.5 ? "AA" : ""; + }, + isDark() { + const rgb = this.rgb().color; + const yiq = (rgb[0] * 2126 + rgb[1] * 7152 + rgb[2] * 722) / 1e4; + return yiq < 128; + }, + isLight() { + return !this.isDark(); + }, + negate() { + const rgb = this.rgb(); + for (let i = 0; i < 3; i++) { + rgb.color[i] = 255 - rgb.color[i]; + } + return rgb; + }, + lighten(ratio) { + const hsl = this.hsl(); + hsl.color[2] += hsl.color[2] * ratio; + return hsl; + }, + darken(ratio) { + const hsl = this.hsl(); + hsl.color[2] -= hsl.color[2] * ratio; + return hsl; + }, + saturate(ratio) { + const hsl = this.hsl(); + hsl.color[1] += hsl.color[1] * ratio; + return hsl; + }, + desaturate(ratio) { + const hsl = this.hsl(); + hsl.color[1] -= hsl.color[1] * ratio; + return hsl; + }, + whiten(ratio) { + const hwb = this.hwb(); + hwb.color[1] += hwb.color[1] * ratio; + return hwb; + }, + blacken(ratio) { + const hwb = this.hwb(); + hwb.color[2] += hwb.color[2] * ratio; + return hwb; + }, + grayscale() { + const rgb = this.rgb().color; + const value = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11; + return Color.rgb(value, value, value); + }, + fade(ratio) { + return this.alpha(this.valpha - this.valpha * ratio); + }, + opaquer(ratio) { + return this.alpha(this.valpha + this.valpha * ratio); + }, + rotate(degrees) { + const hsl = this.hsl(); + let hue = hsl.color[0]; + hue = (hue + degrees) % 360; + hue = hue < 0 ? 360 + hue : hue; + hsl.color[0] = hue; + return hsl; + }, + mix(mixinColor, weight) { + if (!mixinColor || !mixinColor.rgb) { + throw new Error('Argument to "mix" was not a Color instance, but rather an instance of ' + typeof mixinColor); + } + const color1 = mixinColor.rgb(); + const color2 = this.rgb(); + const p = weight === void 0 ? 0.5 : weight; + const w = 2 * p - 1; + const a = color1.alpha() - color2.alpha(); + const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2; + const w2 = 1 - w1; + return Color.rgb( + w1 * color1.red() + w2 * color2.red(), + w1 * color1.green() + w2 * color2.green(), + w1 * color1.blue() + w2 * color2.blue(), + color1.alpha() * p + color2.alpha() * (1 - p) + ); + } +}; +for (const model of Object.keys(color_convert_default)) { + if (skippedModels.includes(model)) { + continue; + } + const { channels } = color_convert_default[model]; + Color.prototype[model] = function(...arguments_) { + if (this.model === model) { + return new Color(this); + } + if (arguments_.length > 0) { + return new Color(arguments_, model); + } + return new Color([...assertArray(color_convert_default[this.model][model].raw(this.color)), this.valpha], model); + }; + Color[model] = function(...arguments_) { + let color = arguments_[0]; + if (typeof color === "number") { + color = zeroArray(arguments_, channels); + } + return new Color(color, model); + }; +} +function roundTo(number, places) { + return Number(number.toFixed(places)); +} +function roundToPlace(places) { + return function(number) { + return roundTo(number, places); + }; +} +function getset(model, channel, modifier) { + model = Array.isArray(model) ? model : [model]; + for (const m of model) { + (limiters[m] ||= [])[channel] = modifier; + } + model = model[0]; + return function(value) { + let result; + if (value !== void 0) { + if (modifier) { + value = modifier(value); + } + result = this[model](); + result.color[channel] = value; + return result; + } + result = this[model]().color[channel]; + if (modifier) { + result = modifier(result); + } + return result; + }; +} +function maxfn(max) { + return function(v) { + return Math.max(0, Math.min(max, v)); + }; +} +function assertArray(value) { + return Array.isArray(value) ? value : [value]; +} +function zeroArray(array, length) { + for (let i = 0; i < length; i++) { + if (typeof array[i] !== "number") { + array[i] = 0; + } + } + return array; +} +var index_default = Color; diff --git a/build/node_modules/@img/colour/index.cjs b/build/node_modules/@img/colour/index.cjs new file mode 100644 index 0000000..25596b2 --- /dev/null +++ b/build/node_modules/@img/colour/index.cjs @@ -0,0 +1 @@ +module.exports = require("./color.cjs").default; diff --git a/build/node_modules/@img/colour/package.json b/build/node_modules/@img/colour/package.json new file mode 100644 index 0000000..38887d1 --- /dev/null +++ b/build/node_modules/@img/colour/package.json @@ -0,0 +1,58 @@ +{ + "name": "@img/colour", + "version": "1.1.0", + "description": "The ESM-only 'color' package made compatible for use with CommonJS runtimes", + "license": "MIT", + "main": "index.cjs", + "types": "index.d.ts", + "exports": { + ".": { + "types": "./index.d.ts", + "require": "./index.cjs", + "default": "./index.cjs" + }, + "./package.json": "./package.json" + }, + "authors": [ + "Heather Arthur ", + "Josh Junon ", + "Maxime Thirouin", + "Dyma Ywanov ", + "LitoMore (https://github.com/LitoMore)" + ], + "engines": { + "node": ">=18" + }, + "files": [ + "color.cjs", + "index.d.ts" + ], + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/lovell/colour.git" + }, + "type": "commonjs", + "keywords": [ + "color", + "colour", + "cjs", + "commonjs" + ], + "scripts": { + "build:cjs": "esbuild node_modules/color/index.js --bundle --platform=node --outfile=color.cjs", + "build:dts": "dts-bundle-generator ./dts-src.ts -o index.d.ts --project tsconfig.build.json --external-inlines color --external-inlines color-convert --export-referenced-types=false", + "build": "npm run build:cjs && npm run build:dts", + "test": "node --test" + }, + "devDependencies": { + "color": "5.0.3", + "color-convert": "3.1.3", + "color-name": "2.1.0", + "color-string": "2.1.4", + "dts-bundle-generator": "^9.5.1", + "esbuild": "^0.27.3" + } +} diff --git a/build/node_modules/@img/sharp-darwin-arm64/lib/sharp-darwin-arm64.node b/build/node_modules/@img/sharp-darwin-arm64/lib/sharp-darwin-arm64.node new file mode 100644 index 0000000..9cb0ada Binary files /dev/null and b/build/node_modules/@img/sharp-darwin-arm64/lib/sharp-darwin-arm64.node differ diff --git a/build/node_modules/@img/sharp-darwin-arm64/package.json b/build/node_modules/@img/sharp-darwin-arm64/package.json new file mode 100644 index 0000000..df6b34a --- /dev/null +++ b/build/node_modules/@img/sharp-darwin-arm64/package.json @@ -0,0 +1,40 @@ +{ + "name": "@img/sharp-darwin-arm64", + "version": "0.34.5", + "description": "Prebuilt sharp for use with macOS 64-bit ARM", + "author": "Lovell Fuller ", + "homepage": "https://sharp.pixelplumbing.com", + "repository": { + "type": "git", + "url": "git+https://github.com/lovell/sharp.git", + "directory": "npm/darwin-arm64" + }, + "license": "Apache-2.0", + "funding": { + "url": "https://opencollective.com/libvips" + }, + "preferUnplugged": true, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + }, + "files": [ + "lib" + ], + "publishConfig": { + "access": "public" + }, + "type": "commonjs", + "exports": { + "./sharp.node": "./lib/sharp-darwin-arm64.node", + "./package": "./package.json" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "os": [ + "darwin" + ], + "cpu": [ + "arm64" + ] +} diff --git a/build/node_modules/@img/sharp-libvips-darwin-arm64/README.md b/build/node_modules/@img/sharp-libvips-darwin-arm64/README.md new file mode 100644 index 0000000..7516f72 --- /dev/null +++ b/build/node_modules/@img/sharp-libvips-darwin-arm64/README.md @@ -0,0 +1,46 @@ +# `@img/sharp-libvips-darwin-arm64` + +Prebuilt libvips and dependencies for use with sharp on macOS 64-bit ARM. + +## Licensing + +This software contains third-party libraries +used under the terms of the following licences: + +| Library | Used under the terms of | +|---------------|-----------------------------------------------------------------------------------------------------------| +| aom | BSD 2-Clause + [Alliance for Open Media Patent License 1.0](https://aomedia.org/license/patent-license/) | +| cairo | Mozilla Public License 2.0 | +| cgif | MIT Licence | +| expat | MIT Licence | +| fontconfig | [fontconfig Licence](https://gitlab.freedesktop.org/fontconfig/fontconfig/blob/main/COPYING) (BSD-like) | +| freetype | [freetype Licence](https://git.savannah.gnu.org/cgit/freetype/freetype2.git/tree/docs/FTL.TXT) (BSD-like) | +| fribidi | LGPLv3 | +| glib | LGPLv3 | +| harfbuzz | MIT Licence | +| highway | Apache-2.0 License, BSD 3-Clause | +| lcms | MIT Licence | +| libarchive | BSD 2-Clause | +| libexif | LGPLv3 | +| libffi | MIT Licence | +| libheif | LGPLv3 | +| libimagequant | [BSD 2-Clause](https://github.com/lovell/libimagequant/blob/main/COPYRIGHT) | +| libnsgif | MIT Licence | +| libpng | [libpng License](https://github.com/pnggroup/libpng/blob/master/LICENSE) | +| librsvg | LGPLv3 | +| libspng | [BSD 2-Clause, libpng License](https://github.com/randy408/libspng/blob/master/LICENSE) | +| libtiff | [libtiff License](https://gitlab.com/libtiff/libtiff/blob/master/LICENSE.md) (BSD-like) | +| libvips | LGPLv3 | +| libwebp | New BSD License | +| libxml2 | MIT Licence | +| mozjpeg | [zlib License, IJG License, BSD-3-Clause](https://github.com/mozilla/mozjpeg/blob/master/LICENSE.md) | +| pango | LGPLv3 | +| pixman | MIT Licence | +| proxy-libintl | LGPLv3 | +| zlib-ng | [zlib Licence](https://github.com/zlib-ng/zlib-ng/blob/develop/LICENSE.md) | + +Use of libraries under the terms of the LGPLv3 is via the +"any later version" clause of the LGPLv2 or LGPLv2.1. + +Please report any errors or omissions via +https://github.com/lovell/sharp-libvips/issues/new diff --git a/build/node_modules/@img/sharp-libvips-darwin-arm64/lib/glib-2.0/include/glibconfig.h b/build/node_modules/@img/sharp-libvips-darwin-arm64/lib/glib-2.0/include/glibconfig.h new file mode 100644 index 0000000..d43d321 --- /dev/null +++ b/build/node_modules/@img/sharp-libvips-darwin-arm64/lib/glib-2.0/include/glibconfig.h @@ -0,0 +1,220 @@ +/* glibconfig.h + * + * This is a generated file. Please modify 'glibconfig.h.in' + */ + +#ifndef __GLIBCONFIG_H__ +#define __GLIBCONFIG_H__ + +#include + +#include +#include +#define GLIB_HAVE_ALLOCA_H + +#define GLIB_STATIC_COMPILATION 1 +#define GOBJECT_STATIC_COMPILATION 1 +#define GIO_STATIC_COMPILATION 1 +#define GMODULE_STATIC_COMPILATION 1 +#define GI_STATIC_COMPILATION 1 +#define G_INTL_STATIC_COMPILATION 1 +#define FFI_STATIC_BUILD 1 + +/* Specifies that GLib's g_print*() functions wrap the + * system printf functions. This is useful to know, for example, + * when using glibc's register_printf_function(). + */ +#define GLIB_USING_SYSTEM_PRINTF + +G_BEGIN_DECLS + +#define G_MINFLOAT FLT_MIN +#define G_MAXFLOAT FLT_MAX +#define G_MINDOUBLE DBL_MIN +#define G_MAXDOUBLE DBL_MAX +#define G_MINSHORT SHRT_MIN +#define G_MAXSHORT SHRT_MAX +#define G_MAXUSHORT USHRT_MAX +#define G_MININT INT_MIN +#define G_MAXINT INT_MAX +#define G_MAXUINT UINT_MAX +#define G_MINLONG LONG_MIN +#define G_MAXLONG LONG_MAX +#define G_MAXULONG ULONG_MAX + +typedef signed char gint8; +typedef unsigned char guint8; + +typedef signed short gint16; +typedef unsigned short guint16; + +#define G_GINT16_MODIFIER "h" +#define G_GINT16_FORMAT "hi" +#define G_GUINT16_FORMAT "hu" + + +typedef signed int gint32; +typedef unsigned int guint32; + +#define G_GINT32_MODIFIER "" +#define G_GINT32_FORMAT "i" +#define G_GUINT32_FORMAT "u" + + +#define G_HAVE_GINT64 1 /* deprecated, always true */ + +G_GNUC_EXTENSION typedef signed long long gint64; +G_GNUC_EXTENSION typedef unsigned long long guint64; + +#define G_GINT64_CONSTANT(val) (G_GNUC_EXTENSION (val##LL)) +#define G_GUINT64_CONSTANT(val) (G_GNUC_EXTENSION (val##ULL)) + +#define G_GINT64_MODIFIER "ll" +#define G_GINT64_FORMAT "lli" +#define G_GUINT64_FORMAT "llu" + + +#define GLIB_SIZEOF_VOID_P 8 +#define GLIB_SIZEOF_LONG 8 +#define GLIB_SIZEOF_SIZE_T 8 +#define GLIB_SIZEOF_SSIZE_T 8 + +typedef signed long gssize; +typedef unsigned long gsize; +#define G_GSIZE_MODIFIER "l" +#define G_GSSIZE_MODIFIER "l" +#define G_GSIZE_FORMAT "lu" +#define G_GSSIZE_FORMAT "li" + +#define G_MAXSIZE G_MAXULONG +#define G_MINSSIZE G_MINLONG +#define G_MAXSSIZE G_MAXLONG + +typedef gint64 goffset; +#define G_MINOFFSET G_MININT64 +#define G_MAXOFFSET G_MAXINT64 + +#define G_GOFFSET_MODIFIER G_GINT64_MODIFIER +#define G_GOFFSET_FORMAT G_GINT64_FORMAT +#define G_GOFFSET_CONSTANT(val) G_GINT64_CONSTANT(val) + +#define G_POLLFD_FORMAT "%d" + +#define GPOINTER_TO_INT(p) ((gint) (glong) (p)) +#define GPOINTER_TO_UINT(p) ((guint) (gulong) (p)) + +#define GINT_TO_POINTER(i) ((gpointer) (glong) (i)) +#define GUINT_TO_POINTER(u) ((gpointer) (gulong) (u)) + +typedef signed long gintptr; +typedef unsigned long guintptr; + +#define G_GINTPTR_MODIFIER "l" +#define G_GINTPTR_FORMAT "li" +#define G_GUINTPTR_FORMAT "lu" + +#define GLIB_MAJOR_VERSION 2 +#define GLIB_MINOR_VERSION 86 +#define GLIB_MICRO_VERSION 1 + +#define G_OS_UNIX + +#define G_VA_COPY va_copy + + +#define G_HAVE_ISO_VARARGS 1 + +/* gcc-2.95.x supports both gnu style and ISO varargs, but if -ansi + * is passed ISO vararg support is turned off, and there is no work + * around to turn it on, so we unconditionally turn it off. + */ +#if __GNUC__ == 2 && __GNUC_MINOR__ == 95 +# undef G_HAVE_ISO_VARARGS +#endif + +#define G_HAVE_GROWING_STACK 0 + +#ifndef _MSC_VER +# define G_HAVE_GNUC_VARARGS 1 +#endif + +#if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590) +#define G_GNUC_INTERNAL __attribute__((visibility("hidden"))) +#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550) +#define G_GNUC_INTERNAL __hidden +#elif defined (__GNUC__) && defined (G_HAVE_GNUC_VISIBILITY) +#define G_GNUC_INTERNAL __attribute__((visibility("hidden"))) +#else +#define G_GNUC_INTERNAL +#endif + +#define G_THREADS_ENABLED +#define G_THREADS_IMPL_POSIX + +#define G_ATOMIC_LOCK_FREE + +#define GINT16_TO_LE(val) ((gint16) (val)) +#define GUINT16_TO_LE(val) ((guint16) (val)) +#define GINT16_TO_BE(val) ((gint16) GUINT16_SWAP_LE_BE (val)) +#define GUINT16_TO_BE(val) (GUINT16_SWAP_LE_BE (val)) + +#define GINT32_TO_LE(val) ((gint32) (val)) +#define GUINT32_TO_LE(val) ((guint32) (val)) +#define GINT32_TO_BE(val) ((gint32) GUINT32_SWAP_LE_BE (val)) +#define GUINT32_TO_BE(val) (GUINT32_SWAP_LE_BE (val)) + +#define GINT64_TO_LE(val) ((gint64) (val)) +#define GUINT64_TO_LE(val) ((guint64) (val)) +#define GINT64_TO_BE(val) ((gint64) GUINT64_SWAP_LE_BE (val)) +#define GUINT64_TO_BE(val) (GUINT64_SWAP_LE_BE (val)) + +#define GLONG_TO_LE(val) ((glong) GINT64_TO_LE (val)) +#define GULONG_TO_LE(val) ((gulong) GUINT64_TO_LE (val)) +#define GLONG_TO_BE(val) ((glong) GINT64_TO_BE (val)) +#define GULONG_TO_BE(val) ((gulong) GUINT64_TO_BE (val)) +#define GINT_TO_LE(val) ((gint) GINT32_TO_LE (val)) +#define GUINT_TO_LE(val) ((guint) GUINT32_TO_LE (val)) +#define GINT_TO_BE(val) ((gint) GINT32_TO_BE (val)) +#define GUINT_TO_BE(val) ((guint) GUINT32_TO_BE (val)) +#define GSIZE_TO_LE(val) ((gsize) GUINT64_TO_LE (val)) +#define GSSIZE_TO_LE(val) ((gssize) GINT64_TO_LE (val)) +#define GSIZE_TO_BE(val) ((gsize) GUINT64_TO_BE (val)) +#define GSSIZE_TO_BE(val) ((gssize) GINT64_TO_BE (val)) +#define G_BYTE_ORDER G_LITTLE_ENDIAN + +#define GLIB_SYSDEF_POLLIN =1 +#define GLIB_SYSDEF_POLLOUT =4 +#define GLIB_SYSDEF_POLLPRI =2 +#define GLIB_SYSDEF_POLLHUP =16 +#define GLIB_SYSDEF_POLLERR =8 +#define GLIB_SYSDEF_POLLNVAL =32 + +/* No way to disable deprecation warnings for macros, so only emit deprecation + * warnings on platforms where usage of this macro is broken */ +#if defined(__APPLE__) || defined(_MSC_VER) || defined(__CYGWIN__) +#define G_MODULE_SUFFIX "so" GLIB_DEPRECATED_MACRO_IN_2_76 +#else +#define G_MODULE_SUFFIX "so" +#endif + +typedef int GPid; +#define G_PID_FORMAT "i" + +#define GLIB_SYSDEF_AF_UNIX 1 +#define GLIB_SYSDEF_AF_INET 2 +#define GLIB_SYSDEF_AF_INET6 30 + +#define GLIB_SYSDEF_MSG_OOB 1 +#define GLIB_SYSDEF_MSG_PEEK 2 +#define GLIB_SYSDEF_MSG_DONTROUTE 4 + +#define G_DIR_SEPARATOR '/' +#define G_DIR_SEPARATOR_S "/" +#define G_SEARCHPATH_SEPARATOR ':' +#define G_SEARCHPATH_SEPARATOR_S ":" + +#undef G_HAVE_FREE_SIZED + +G_END_DECLS + +#endif /* __GLIBCONFIG_H__ */ diff --git a/build/node_modules/@img/sharp-libvips-darwin-arm64/lib/index.js b/build/node_modules/@img/sharp-libvips-darwin-arm64/lib/index.js new file mode 100644 index 0000000..5092b4d --- /dev/null +++ b/build/node_modules/@img/sharp-libvips-darwin-arm64/lib/index.js @@ -0,0 +1 @@ +module.exports = __dirname; diff --git a/build/node_modules/@img/sharp-libvips-darwin-arm64/lib/libvips-cpp.8.17.3.dylib b/build/node_modules/@img/sharp-libvips-darwin-arm64/lib/libvips-cpp.8.17.3.dylib new file mode 100644 index 0000000..377e5f8 Binary files /dev/null and b/build/node_modules/@img/sharp-libvips-darwin-arm64/lib/libvips-cpp.8.17.3.dylib differ diff --git a/build/node_modules/@img/sharp-libvips-darwin-arm64/package.json b/build/node_modules/@img/sharp-libvips-darwin-arm64/package.json new file mode 100644 index 0000000..7b3a933 --- /dev/null +++ b/build/node_modules/@img/sharp-libvips-darwin-arm64/package.json @@ -0,0 +1,36 @@ +{ + "name": "@img/sharp-libvips-darwin-arm64", + "version": "1.2.4", + "description": "Prebuilt libvips and dependencies for use with sharp on macOS 64-bit ARM", + "author": "Lovell Fuller ", + "homepage": "https://sharp.pixelplumbing.com", + "repository": { + "type": "git", + "url": "git+https://github.com/lovell/sharp-libvips.git", + "directory": "npm/darwin-arm64" + }, + "license": "LGPL-3.0-or-later", + "funding": { + "url": "https://opencollective.com/libvips" + }, + "preferUnplugged": true, + "publishConfig": { + "access": "public" + }, + "files": [ + "lib", + "versions.json" + ], + "type": "commonjs", + "exports": { + "./lib": "./lib/index.js", + "./package": "./package.json", + "./versions": "./versions.json" + }, + "os": [ + "darwin" + ], + "cpu": [ + "arm64" + ] +} diff --git a/build/node_modules/@img/sharp-libvips-darwin-arm64/versions.json b/build/node_modules/@img/sharp-libvips-darwin-arm64/versions.json new file mode 100644 index 0000000..fec67b1 --- /dev/null +++ b/build/node_modules/@img/sharp-libvips-darwin-arm64/versions.json @@ -0,0 +1,30 @@ +{ + "aom": "3.13.1", + "archive": "3.8.2", + "cairo": "1.18.4", + "cgif": "0.5.0", + "exif": "0.6.25", + "expat": "2.7.3", + "ffi": "3.5.2", + "fontconfig": "2.17.1", + "freetype": "2.14.1", + "fribidi": "1.0.16", + "glib": "2.86.1", + "harfbuzz": "12.1.0", + "heif": "1.20.2", + "highway": "1.3.0", + "imagequant": "2.4.1", + "lcms": "2.17", + "mozjpeg": "0826579", + "pango": "1.57.0", + "pixman": "0.46.4", + "png": "1.6.50", + "proxy-libintl": "0.5", + "rsvg": "2.61.2", + "spng": "0.7.4", + "tiff": "4.7.1", + "vips": "8.17.3", + "webp": "1.6.0", + "xml2": "2.15.1", + "zlib-ng": "2.2.5" +} \ No newline at end of file diff --git a/build/node_modules/@next/env/dist/index.js b/build/node_modules/@next/env/dist/index.js new file mode 100644 index 0000000..a2b8afb --- /dev/null +++ b/build/node_modules/@next/env/dist/index.js @@ -0,0 +1 @@ +(()=>{var e={383:e=>{"use strict";function _searchLast(e,t){const n=Array.from(e.matchAll(t));return n.length>0?n.slice(-1)[0].index:-1}function _interpolate(e,t,n){const r=_searchLast(e,/(?!(?<=\\))\$/g);if(r===-1)return e;const o=e.slice(r);const s=/((?!(?<=\\))\${?([\w]+)(?::-([^}\\]*))?}?)/;const i=o.match(s);if(i!=null){const[,r,o,s]=i;return _interpolate(e.replace(r,t[o]||s||n.parsed[o]||""),t,n)}return e}function _resolveEscapeSequences(e){return e.replace(/\\\$/g,"$")}function expand(e){const t=e.ignoreProcessEnv?{}:process.env;for(const n in e.parsed){const r=Object.prototype.hasOwnProperty.call(t,n)?t[n]:e.parsed[n];e.parsed[n]=_resolveEscapeSequences(_interpolate(r,t,e))}for(const n in e.parsed){t[n]=e.parsed[n]}return e}e.exports.j=expand},234:(e,t,n)=>{const r=n(147);const o=n(17);const s=n(37);const i=n(113);const c=n(803);const a=c.version;const p=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/gm;function parse(e){const t={};let n=e.toString();n=n.replace(/\r\n?/gm,"\n");let r;while((r=p.exec(n))!=null){const e=r[1];let n=r[2]||"";n=n.trim();const o=n[0];n=n.replace(/^(['"`])([\s\S]*)\1$/gm,"$2");if(o==='"'){n=n.replace(/\\n/g,"\n");n=n.replace(/\\r/g,"\r")}t[e]=n}return t}function _parseVault(e){const t=_vaultPath(e);const n=l.configDotenv({path:t});if(!n.parsed){throw new Error(`MISSING_DATA: Cannot parse ${t} for an unknown reason`)}const r=_dotenvKey(e).split(",");const o=r.length;let s;for(let e=0;e=o){throw t}}}return l.parse(s)}function _log(e){console.log(`[dotenv@${a}][INFO] ${e}`)}function _warn(e){console.log(`[dotenv@${a}][WARN] ${e}`)}function _debug(e){console.log(`[dotenv@${a}][DEBUG] ${e}`)}function _dotenvKey(e){if(e&&e.DOTENV_KEY&&e.DOTENV_KEY.length>0){return e.DOTENV_KEY}if(process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0){return process.env.DOTENV_KEY}return""}function _instructions(e,t){let n;try{n=new URL(t)}catch(e){if(e.code==="ERR_INVALID_URL"){throw new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenv.org/vault/.env.vault?environment=development")}throw e}const r=n.password;if(!r){throw new Error("INVALID_DOTENV_KEY: Missing key part")}const o=n.searchParams.get("environment");if(!o){throw new Error("INVALID_DOTENV_KEY: Missing environment part")}const s=`DOTENV_VAULT_${o.toUpperCase()}`;const i=e.parsed[s];if(!i){throw new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${s} in your .env.vault file.`)}return{ciphertext:i,key:r}}function _vaultPath(e){let t=o.resolve(process.cwd(),".env");if(e&&e.path&&e.path.length>0){t=e.path}return t.endsWith(".vault")?t:`${t}.vault`}function _resolveHome(e){return e[0]==="~"?o.join(s.homedir(),e.slice(1)):e}function _configVault(e){_log("Loading env from encrypted .env.vault");const t=l._parseVault(e);let n=process.env;if(e&&e.processEnv!=null){n=e.processEnv}l.populate(n,t,e);return{parsed:t}}function configDotenv(e){let t=o.resolve(process.cwd(),".env");let n="utf8";const s=Boolean(e&&e.debug);if(e){if(e.path!=null){t=_resolveHome(e.path)}if(e.encoding!=null){n=e.encoding}}try{const o=l.parse(r.readFileSync(t,{encoding:n}));let s=process.env;if(e&&e.processEnv!=null){s=e.processEnv}l.populate(s,o,e);return{parsed:o}}catch(e){if(s){_debug(`Failed to load ${t} ${e.message}`)}return{error:e}}}function config(e){const t=_vaultPath(e);if(_dotenvKey(e).length===0){return l.configDotenv(e)}if(!r.existsSync(t)){_warn(`You set DOTENV_KEY but you are missing a .env.vault file at ${t}. Did you forget to build it?`);return l.configDotenv(e)}return l._configVault(e)}function decrypt(e,t){const n=Buffer.from(t.slice(-64),"hex");let r=Buffer.from(e,"base64");const o=r.slice(0,12);const s=r.slice(-16);r=r.slice(12,-16);try{const e=i.createDecipheriv("aes-256-gcm",n,o);e.setAuthTag(s);return`${e.update(r)}${e.final()}`}catch(e){const t=e instanceof RangeError;const n=e.message==="Invalid key length";const r=e.message==="Unsupported state or unable to authenticate data";if(t||n){const e="INVALID_DOTENV_KEY: It must be 64 characters long (or more)";throw new Error(e)}else if(r){const e="DECRYPTION_FAILED: Please check your DOTENV_KEY";throw new Error(e)}else{console.error("Error: ",e.code);console.error("Error: ",e.message);throw e}}}function populate(e,t,n={}){const r=Boolean(n&&n.debug);const o=Boolean(n&&n.override);if(typeof t!=="object"){throw new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate")}for(const n of Object.keys(t)){if(Object.prototype.hasOwnProperty.call(e,n)){if(o===true){e[n]=t[n]}if(r){if(o===true){_debug(`"${n}" is already defined and WAS overwritten`)}else{_debug(`"${n}" is already defined and was NOT overwritten`)}}}else{e[n]=t[n]}}}const l={configDotenv:configDotenv,_configVault:_configVault,_parseVault:_parseVault,config:config,decrypt:decrypt,parse:parse,populate:populate};e.exports.configDotenv=l.configDotenv;e.exports._configVault=l._configVault;e.exports._parseVault=l._parseVault;e.exports.config=l.config;e.exports.decrypt=l.decrypt;e.exports.parse=l.parse;e.exports.populate=l.populate;e.exports=l},113:e=>{"use strict";e.exports=require("crypto")},147:e=>{"use strict";e.exports=require("fs")},37:e=>{"use strict";e.exports=require("os")},17:e=>{"use strict";e.exports=require("path")},803:e=>{"use strict";e.exports=JSON.parse('{"name":"dotenv","version":"16.3.1","description":"Loads environment variables from .env file","main":"lib/main.js","types":"lib/main.d.ts","exports":{".":{"types":"./lib/main.d.ts","require":"./lib/main.js","default":"./lib/main.js"},"./config":"./config.js","./config.js":"./config.js","./lib/env-options":"./lib/env-options.js","./lib/env-options.js":"./lib/env-options.js","./lib/cli-options":"./lib/cli-options.js","./lib/cli-options.js":"./lib/cli-options.js","./package.json":"./package.json"},"scripts":{"dts-check":"tsc --project tests/types/tsconfig.json","lint":"standard","lint-readme":"standard-markdown","pretest":"npm run lint && npm run dts-check","test":"tap tests/*.js --100 -Rspec","prerelease":"npm test","release":"standard-version"},"repository":{"type":"git","url":"git://github.com/motdotla/dotenv.git"},"funding":"https://github.com/motdotla/dotenv?sponsor=1","keywords":["dotenv","env",".env","environment","variables","config","settings"],"readmeFilename":"README.md","license":"BSD-2-Clause","devDependencies":{"@definitelytyped/dtslint":"^0.0.133","@types/node":"^18.11.3","decache":"^4.6.1","sinon":"^14.0.1","standard":"^17.0.0","standard-markdown":"^7.1.0","standard-version":"^9.5.0","tap":"^16.3.0","tar":"^6.1.11","typescript":"^4.8.4"},"engines":{"node":">=12"},"browser":{"fs":false}}')}};var t={};function __nccwpck_require__(n){var r=t[n];if(r!==undefined){return r.exports}var o=t[n]={exports:{}};var s=true;try{e[n](o,o.exports,__nccwpck_require__);s=false}finally{if(s)delete t[n]}return o.exports}(()=>{__nccwpck_require__.n=e=>{var t=e&&e.__esModule?()=>e["default"]:()=>e;__nccwpck_require__.d(t,{a:t});return t}})();(()=>{__nccwpck_require__.d=(e,t)=>{for(var n in t){if(__nccwpck_require__.o(t,n)&&!__nccwpck_require__.o(e,n)){Object.defineProperty(e,n,{enumerable:true,get:t[n]})}}}})();(()=>{__nccwpck_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t)})();(()=>{__nccwpck_require__.r=e=>{if(typeof Symbol!=="undefined"&&Symbol.toStringTag){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})}Object.defineProperty(e,"__esModule",{value:true})}})();if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var n={};(()=>{"use strict";__nccwpck_require__.r(n);__nccwpck_require__.d(n,{initialEnv:()=>a,updateInitialEnv:()=>updateInitialEnv,processEnv:()=>processEnv,resetEnv:()=>resetEnv,loadEnvConfig:()=>loadEnvConfig});var e=__nccwpck_require__(147);var t=__nccwpck_require__.n(e);var r=__nccwpck_require__(17);var o=__nccwpck_require__.n(r);var s=__nccwpck_require__(234);var i=__nccwpck_require__.n(s);var c=__nccwpck_require__(383);let a=undefined;let p=undefined;let l=undefined;let u=[];let _=[];function updateInitialEnv(e){Object.assign(a||{},e)}function replaceProcessEnv(e){Object.keys(process.env).forEach((t=>{if(!t.startsWith("__NEXT_PRIVATE")){if(e[t]===undefined||e[t]===""){delete process.env[t]}}}));Object.entries(e).forEach((([e,t])=>{process.env[e]=t}))}function processEnv(e,t,n=console,o=false,i){var p;if(!a){a=Object.assign({},process.env)}if(!o&&(process.env.__NEXT_PROCESSED_ENV||e.length===0)){return[process.env]}process.env.__NEXT_PROCESSED_ENV="true";const l=Object.assign({},a);const u={};for(const o of e){try{let e={};e.parsed=s.parse(o.contents);e=(0,c.j)(e);if(e.parsed&&!_.some((e=>e.contents===o.contents&&e.path===o.path))){i===null||i===void 0?void 0:i(o.path)}for(const t of Object.keys(e.parsed||{})){if(typeof u[t]==="undefined"&&typeof l[t]==="undefined"){u[t]=(p=e.parsed)===null||p===void 0?void 0:p[t]}}o.env=e.parsed||{}}catch(e){n.error(`Failed to load env from ${r.join(t||"",o.path)}`,e)}}return[Object.assign(process.env,u),u]}function resetEnv(){if(a){replaceProcessEnv(a)}}function loadEnvConfig(t,n,o=console,s=false,i){if(!a){a=Object.assign({},process.env)}if(p&&!s){return{combinedEnv:p,parsedEnv:l,loadedEnvFiles:u}}replaceProcessEnv(a);_=u;u=[];const c=process.env.NODE_ENV==="test";const d=c?"test":n?"development":"production";const f=[`.env.${d}.local`,d!=="test"&&`.env.local`,`.env.${d}`,".env"].filter(Boolean);for(const n of f){const s=r.join(t,n);try{const t=e.statSync(s);if(!t.isFile()&&!t.isFIFO()){continue}const r=e.readFileSync(s,"utf8");u.push({path:n,contents:r,env:{}})}catch(e){if(e.code!=="ENOENT"){o.error(`Failed to load env from ${n}`,e)}}}[p,l]=processEnv(u,t,o,s,i);return{combinedEnv:p,parsedEnv:l,loadedEnvFiles:u}}})();module.exports=n})(); \ No newline at end of file diff --git a/build/node_modules/@next/env/package.json b/build/node_modules/@next/env/package.json new file mode 100644 index 0000000..d4038cb --- /dev/null +++ b/build/node_modules/@next/env/package.json @@ -0,0 +1,36 @@ +{ + "name": "@next/env", + "version": "16.2.6", + "keywords": [ + "react", + "next", + "next.js", + "dotenv" + ], + "description": "Next.js dotenv file loading", + "repository": { + "type": "git", + "url": "https://github.com/vercel/next.js", + "directory": "packages/next-env" + }, + "author": "Next.js Team ", + "license": "MIT", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "dev": "ncc build ./index.ts -w -o dist/", + "prebuild:source": "node ../../scripts/rm.mjs dist", + "types": "tsc --declaration --emitDeclarationOnly --declarationDir dist", + "build:source": "ncc build ./index.ts -o ./dist/ --minify --no-cache --no-source-map-register", + "build": "pnpm build:source && pnpm types", + "prepublishOnly": "cd ../../ && turbo run build" + }, + "devDependencies": { + "@vercel/ncc": "0.34.0", + "dotenv": "16.3.1", + "dotenv-expand": "10.0.0" + } +} diff --git a/build/node_modules/@swc/helpers/cjs/_interop_require_default.cjs b/build/node_modules/@swc/helpers/cjs/_interop_require_default.cjs new file mode 100644 index 0000000..c9e5240 --- /dev/null +++ b/build/node_modules/@swc/helpers/cjs/_interop_require_default.cjs @@ -0,0 +1,6 @@ +"use strict"; + +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { default: obj }; +} +exports._ = _interop_require_default; diff --git a/build/node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs b/build/node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs new file mode 100644 index 0000000..9c2abcd --- /dev/null +++ b/build/node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs @@ -0,0 +1,38 @@ +"use strict"; + +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) return obj; + if (obj === null || typeof obj !== "object" && typeof obj !== "function") return { default: obj }; + + var cache = _getRequireWildcardCache(nodeInterop); + + if (cache && cache.has(obj)) return cache.get(obj); + + var newObj = { __proto__: null }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + + for (var key in obj) { + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc); + else newObj[key] = obj[key]; + } + } + + newObj.default = obj; + + if (cache) cache.set(obj, newObj); + + return newObj; +} +exports._ = _interop_require_wildcard; diff --git a/build/node_modules/@swc/helpers/package.json b/build/node_modules/@swc/helpers/package.json new file mode 100644 index 0000000..c847275 --- /dev/null +++ b/build/node_modules/@swc/helpers/package.json @@ -0,0 +1,471 @@ +{ + "name": "@swc/helpers", + "packageManager": "yarn@4.0.2", + "version": "0.5.15", + "description": "External helpers for the swc project.", + "module": "esm/index.js", + "main": "cjs/index.cjs", + "sideEffects": false, + "scripts": { + "build": "zx ./scripts/build.js", + "prepack": "zx ./scripts/build.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/swc-project/swc.git" + }, + "publishConfig": { + "registry": "https://registry.npmjs.org/", + "access": "public" + }, + "keywords": [ + "swc", + "helpers" + ], + "author": "강동윤 ", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/swc-project/swc/issues" + }, + "homepage": "https://swc.rs", + "type": "module", + "devDependencies": { + "@ast-grep/napi": "^0.3.1", + "dprint": "^0.35.3", + "magic-string": "^0.30.0", + "zx": "^7.2.1" + }, + "dependencies": { + "tslib": "^2.8.0" + }, + "exports": { + "./package.json": "./package.json", + "./esm/*": "./esm/*", + "./cjs/*": "./cjs/*", + "./src/*": "./src/*", + ".": { + "import": "./esm/index.js", + "default": "./cjs/index.cjs" + }, + "./_": { + "import": "./esm/index.js", + "default": "./cjs/index.cjs" + }, + "./_/_apply_decorated_descriptor": { + "import": "./esm/_apply_decorated_descriptor.js", + "default": "./cjs/_apply_decorated_descriptor.cjs" + }, + "./_/_apply_decs_2203_r": { + "import": "./esm/_apply_decs_2203_r.js", + "default": "./cjs/_apply_decs_2203_r.cjs" + }, + "./_/_array_like_to_array": { + "import": "./esm/_array_like_to_array.js", + "default": "./cjs/_array_like_to_array.cjs" + }, + "./_/_array_with_holes": { + "import": "./esm/_array_with_holes.js", + "default": "./cjs/_array_with_holes.cjs" + }, + "./_/_array_without_holes": { + "import": "./esm/_array_without_holes.js", + "default": "./cjs/_array_without_holes.cjs" + }, + "./_/_assert_this_initialized": { + "import": "./esm/_assert_this_initialized.js", + "default": "./cjs/_assert_this_initialized.cjs" + }, + "./_/_async_generator": { + "import": "./esm/_async_generator.js", + "default": "./cjs/_async_generator.cjs" + }, + "./_/_async_generator_delegate": { + "import": "./esm/_async_generator_delegate.js", + "default": "./cjs/_async_generator_delegate.cjs" + }, + "./_/_async_iterator": { + "import": "./esm/_async_iterator.js", + "default": "./cjs/_async_iterator.cjs" + }, + "./_/_async_to_generator": { + "import": "./esm/_async_to_generator.js", + "default": "./cjs/_async_to_generator.cjs" + }, + "./_/_await_async_generator": { + "import": "./esm/_await_async_generator.js", + "default": "./cjs/_await_async_generator.cjs" + }, + "./_/_await_value": { + "import": "./esm/_await_value.js", + "default": "./cjs/_await_value.cjs" + }, + "./_/_call_super": { + "import": "./esm/_call_super.js", + "default": "./cjs/_call_super.cjs" + }, + "./_/_check_private_redeclaration": { + "import": "./esm/_check_private_redeclaration.js", + "default": "./cjs/_check_private_redeclaration.cjs" + }, + "./_/_class_apply_descriptor_destructure": { + "import": "./esm/_class_apply_descriptor_destructure.js", + "default": "./cjs/_class_apply_descriptor_destructure.cjs" + }, + "./_/_class_apply_descriptor_get": { + "import": "./esm/_class_apply_descriptor_get.js", + "default": "./cjs/_class_apply_descriptor_get.cjs" + }, + "./_/_class_apply_descriptor_set": { + "import": "./esm/_class_apply_descriptor_set.js", + "default": "./cjs/_class_apply_descriptor_set.cjs" + }, + "./_/_class_apply_descriptor_update": { + "import": "./esm/_class_apply_descriptor_update.js", + "default": "./cjs/_class_apply_descriptor_update.cjs" + }, + "./_/_class_call_check": { + "import": "./esm/_class_call_check.js", + "default": "./cjs/_class_call_check.cjs" + }, + "./_/_class_check_private_static_access": { + "import": "./esm/_class_check_private_static_access.js", + "default": "./cjs/_class_check_private_static_access.cjs" + }, + "./_/_class_check_private_static_field_descriptor": { + "import": "./esm/_class_check_private_static_field_descriptor.js", + "default": "./cjs/_class_check_private_static_field_descriptor.cjs" + }, + "./_/_class_extract_field_descriptor": { + "import": "./esm/_class_extract_field_descriptor.js", + "default": "./cjs/_class_extract_field_descriptor.cjs" + }, + "./_/_class_name_tdz_error": { + "import": "./esm/_class_name_tdz_error.js", + "default": "./cjs/_class_name_tdz_error.cjs" + }, + "./_/_class_private_field_destructure": { + "import": "./esm/_class_private_field_destructure.js", + "default": "./cjs/_class_private_field_destructure.cjs" + }, + "./_/_class_private_field_get": { + "import": "./esm/_class_private_field_get.js", + "default": "./cjs/_class_private_field_get.cjs" + }, + "./_/_class_private_field_init": { + "import": "./esm/_class_private_field_init.js", + "default": "./cjs/_class_private_field_init.cjs" + }, + "./_/_class_private_field_loose_base": { + "import": "./esm/_class_private_field_loose_base.js", + "default": "./cjs/_class_private_field_loose_base.cjs" + }, + "./_/_class_private_field_loose_key": { + "import": "./esm/_class_private_field_loose_key.js", + "default": "./cjs/_class_private_field_loose_key.cjs" + }, + "./_/_class_private_field_set": { + "import": "./esm/_class_private_field_set.js", + "default": "./cjs/_class_private_field_set.cjs" + }, + "./_/_class_private_field_update": { + "import": "./esm/_class_private_field_update.js", + "default": "./cjs/_class_private_field_update.cjs" + }, + "./_/_class_private_method_get": { + "import": "./esm/_class_private_method_get.js", + "default": "./cjs/_class_private_method_get.cjs" + }, + "./_/_class_private_method_init": { + "import": "./esm/_class_private_method_init.js", + "default": "./cjs/_class_private_method_init.cjs" + }, + "./_/_class_private_method_set": { + "import": "./esm/_class_private_method_set.js", + "default": "./cjs/_class_private_method_set.cjs" + }, + "./_/_class_static_private_field_destructure": { + "import": "./esm/_class_static_private_field_destructure.js", + "default": "./cjs/_class_static_private_field_destructure.cjs" + }, + "./_/_class_static_private_field_spec_get": { + "import": "./esm/_class_static_private_field_spec_get.js", + "default": "./cjs/_class_static_private_field_spec_get.cjs" + }, + "./_/_class_static_private_field_spec_set": { + "import": "./esm/_class_static_private_field_spec_set.js", + "default": "./cjs/_class_static_private_field_spec_set.cjs" + }, + "./_/_class_static_private_field_update": { + "import": "./esm/_class_static_private_field_update.js", + "default": "./cjs/_class_static_private_field_update.cjs" + }, + "./_/_class_static_private_method_get": { + "import": "./esm/_class_static_private_method_get.js", + "default": "./cjs/_class_static_private_method_get.cjs" + }, + "./_/_construct": { + "import": "./esm/_construct.js", + "default": "./cjs/_construct.cjs" + }, + "./_/_create_class": { + "import": "./esm/_create_class.js", + "default": "./cjs/_create_class.cjs" + }, + "./_/_create_for_of_iterator_helper_loose": { + "import": "./esm/_create_for_of_iterator_helper_loose.js", + "default": "./cjs/_create_for_of_iterator_helper_loose.cjs" + }, + "./_/_create_super": { + "import": "./esm/_create_super.js", + "default": "./cjs/_create_super.cjs" + }, + "./_/_decorate": { + "import": "./esm/_decorate.js", + "default": "./cjs/_decorate.cjs" + }, + "./_/_defaults": { + "import": "./esm/_defaults.js", + "default": "./cjs/_defaults.cjs" + }, + "./_/_define_enumerable_properties": { + "import": "./esm/_define_enumerable_properties.js", + "default": "./cjs/_define_enumerable_properties.cjs" + }, + "./_/_define_property": { + "import": "./esm/_define_property.js", + "default": "./cjs/_define_property.cjs" + }, + "./_/_dispose": { + "import": "./esm/_dispose.js", + "default": "./cjs/_dispose.cjs" + }, + "./_/_export_star": { + "import": "./esm/_export_star.js", + "default": "./cjs/_export_star.cjs" + }, + "./_/_extends": { + "import": "./esm/_extends.js", + "default": "./cjs/_extends.cjs" + }, + "./_/_get": { + "import": "./esm/_get.js", + "default": "./cjs/_get.cjs" + }, + "./_/_get_prototype_of": { + "import": "./esm/_get_prototype_of.js", + "default": "./cjs/_get_prototype_of.cjs" + }, + "./_/_identity": { + "import": "./esm/_identity.js", + "default": "./cjs/_identity.cjs" + }, + "./_/_inherits": { + "import": "./esm/_inherits.js", + "default": "./cjs/_inherits.cjs" + }, + "./_/_inherits_loose": { + "import": "./esm/_inherits_loose.js", + "default": "./cjs/_inherits_loose.cjs" + }, + "./_/_initializer_define_property": { + "import": "./esm/_initializer_define_property.js", + "default": "./cjs/_initializer_define_property.cjs" + }, + "./_/_initializer_warning_helper": { + "import": "./esm/_initializer_warning_helper.js", + "default": "./cjs/_initializer_warning_helper.cjs" + }, + "./_/_instanceof": { + "import": "./esm/_instanceof.js", + "default": "./cjs/_instanceof.cjs" + }, + "./_/_interop_require_default": { + "import": "./esm/_interop_require_default.js", + "default": "./cjs/_interop_require_default.cjs" + }, + "./_/_interop_require_wildcard": { + "import": "./esm/_interop_require_wildcard.js", + "default": "./cjs/_interop_require_wildcard.cjs" + }, + "./_/_is_native_function": { + "import": "./esm/_is_native_function.js", + "default": "./cjs/_is_native_function.cjs" + }, + "./_/_is_native_reflect_construct": { + "import": "./esm/_is_native_reflect_construct.js", + "default": "./cjs/_is_native_reflect_construct.cjs" + }, + "./_/_iterable_to_array": { + "import": "./esm/_iterable_to_array.js", + "default": "./cjs/_iterable_to_array.cjs" + }, + "./_/_iterable_to_array_limit": { + "import": "./esm/_iterable_to_array_limit.js", + "default": "./cjs/_iterable_to_array_limit.cjs" + }, + "./_/_iterable_to_array_limit_loose": { + "import": "./esm/_iterable_to_array_limit_loose.js", + "default": "./cjs/_iterable_to_array_limit_loose.cjs" + }, + "./_/_jsx": { + "import": "./esm/_jsx.js", + "default": "./cjs/_jsx.cjs" + }, + "./_/_new_arrow_check": { + "import": "./esm/_new_arrow_check.js", + "default": "./cjs/_new_arrow_check.cjs" + }, + "./_/_non_iterable_rest": { + "import": "./esm/_non_iterable_rest.js", + "default": "./cjs/_non_iterable_rest.cjs" + }, + "./_/_non_iterable_spread": { + "import": "./esm/_non_iterable_spread.js", + "default": "./cjs/_non_iterable_spread.cjs" + }, + "./_/_object_destructuring_empty": { + "import": "./esm/_object_destructuring_empty.js", + "default": "./cjs/_object_destructuring_empty.cjs" + }, + "./_/_object_spread": { + "import": "./esm/_object_spread.js", + "default": "./cjs/_object_spread.cjs" + }, + "./_/_object_spread_props": { + "import": "./esm/_object_spread_props.js", + "default": "./cjs/_object_spread_props.cjs" + }, + "./_/_object_without_properties": { + "import": "./esm/_object_without_properties.js", + "default": "./cjs/_object_without_properties.cjs" + }, + "./_/_object_without_properties_loose": { + "import": "./esm/_object_without_properties_loose.js", + "default": "./cjs/_object_without_properties_loose.cjs" + }, + "./_/_possible_constructor_return": { + "import": "./esm/_possible_constructor_return.js", + "default": "./cjs/_possible_constructor_return.cjs" + }, + "./_/_read_only_error": { + "import": "./esm/_read_only_error.js", + "default": "./cjs/_read_only_error.cjs" + }, + "./_/_set": { + "import": "./esm/_set.js", + "default": "./cjs/_set.cjs" + }, + "./_/_set_prototype_of": { + "import": "./esm/_set_prototype_of.js", + "default": "./cjs/_set_prototype_of.cjs" + }, + "./_/_skip_first_generator_next": { + "import": "./esm/_skip_first_generator_next.js", + "default": "./cjs/_skip_first_generator_next.cjs" + }, + "./_/_sliced_to_array": { + "import": "./esm/_sliced_to_array.js", + "default": "./cjs/_sliced_to_array.cjs" + }, + "./_/_sliced_to_array_loose": { + "import": "./esm/_sliced_to_array_loose.js", + "default": "./cjs/_sliced_to_array_loose.cjs" + }, + "./_/_super_prop_base": { + "import": "./esm/_super_prop_base.js", + "default": "./cjs/_super_prop_base.cjs" + }, + "./_/_tagged_template_literal": { + "import": "./esm/_tagged_template_literal.js", + "default": "./cjs/_tagged_template_literal.cjs" + }, + "./_/_tagged_template_literal_loose": { + "import": "./esm/_tagged_template_literal_loose.js", + "default": "./cjs/_tagged_template_literal_loose.cjs" + }, + "./_/_throw": { + "import": "./esm/_throw.js", + "default": "./cjs/_throw.cjs" + }, + "./_/_to_array": { + "import": "./esm/_to_array.js", + "default": "./cjs/_to_array.cjs" + }, + "./_/_to_consumable_array": { + "import": "./esm/_to_consumable_array.js", + "default": "./cjs/_to_consumable_array.cjs" + }, + "./_/_to_primitive": { + "import": "./esm/_to_primitive.js", + "default": "./cjs/_to_primitive.cjs" + }, + "./_/_to_property_key": { + "import": "./esm/_to_property_key.js", + "default": "./cjs/_to_property_key.cjs" + }, + "./_/_ts_add_disposable_resource": { + "import": "./esm/_ts_add_disposable_resource.js", + "default": "./cjs/_ts_add_disposable_resource.cjs" + }, + "./_/_ts_decorate": { + "import": "./esm/_ts_decorate.js", + "default": "./cjs/_ts_decorate.cjs" + }, + "./_/_ts_dispose_resources": { + "import": "./esm/_ts_dispose_resources.js", + "default": "./cjs/_ts_dispose_resources.cjs" + }, + "./_/_ts_generator": { + "import": "./esm/_ts_generator.js", + "default": "./cjs/_ts_generator.cjs" + }, + "./_/_ts_metadata": { + "import": "./esm/_ts_metadata.js", + "default": "./cjs/_ts_metadata.cjs" + }, + "./_/_ts_param": { + "import": "./esm/_ts_param.js", + "default": "./cjs/_ts_param.cjs" + }, + "./_/_ts_values": { + "import": "./esm/_ts_values.js", + "default": "./cjs/_ts_values.cjs" + }, + "./_/_type_of": { + "import": "./esm/_type_of.js", + "default": "./cjs/_type_of.cjs" + }, + "./_/_unsupported_iterable_to_array": { + "import": "./esm/_unsupported_iterable_to_array.js", + "default": "./cjs/_unsupported_iterable_to_array.cjs" + }, + "./_/_update": { + "import": "./esm/_update.js", + "default": "./cjs/_update.cjs" + }, + "./_/_using": { + "import": "./esm/_using.js", + "default": "./cjs/_using.cjs" + }, + "./_/_using_ctx": { + "import": "./esm/_using_ctx.js", + "default": "./cjs/_using_ctx.cjs" + }, + "./_/_wrap_async_generator": { + "import": "./esm/_wrap_async_generator.js", + "default": "./cjs/_wrap_async_generator.cjs" + }, + "./_/_wrap_native_super": { + "import": "./esm/_wrap_native_super.js", + "default": "./cjs/_wrap_native_super.cjs" + }, + "./_/_write_only_error": { + "import": "./esm/_write_only_error.js", + "default": "./cjs/_write_only_error.cjs" + }, + "./_/index": { + "import": "./esm/index.js", + "default": "./cjs/index.cjs" + } + } +} diff --git a/build/node_modules/client-only/index.js b/build/node_modules/client-only/index.js new file mode 100644 index 0000000..e69de29 diff --git a/build/node_modules/client-only/package.json b/build/node_modules/client-only/package.json new file mode 100644 index 0000000..9af6d8d --- /dev/null +++ b/build/node_modules/client-only/package.json @@ -0,0 +1,19 @@ +{ + "name": "client-only", + "description": "This is a marker package to indicate that a module can only be used in Client Components.", + "keywords": [ + "react" + ], + "version": "0.0.1", + "homepage": "https://reactjs.org/", + "bugs": "https://github.com/facebook/react/issues", + "license": "MIT", + "files": ["index.js", "error.js"], + "main": "index.js", + "exports": { + ".": { + "react-server": "./error.js", + "default": "./index.js" + } + } +} diff --git a/build/node_modules/detect-libc/lib/detect-libc.js b/build/node_modules/detect-libc/lib/detect-libc.js new file mode 100644 index 0000000..01299b4 --- /dev/null +++ b/build/node_modules/detect-libc/lib/detect-libc.js @@ -0,0 +1,313 @@ +// Copyright 2017 Lovell Fuller and others. +// SPDX-License-Identifier: Apache-2.0 + +'use strict'; + +const childProcess = require('child_process'); +const { isLinux, getReport } = require('./process'); +const { LDD_PATH, SELF_PATH, readFile, readFileSync } = require('./filesystem'); +const { interpreterPath } = require('./elf'); + +let cachedFamilyInterpreter; +let cachedFamilyFilesystem; +let cachedVersionFilesystem; + +const command = 'getconf GNU_LIBC_VERSION 2>&1 || true; ldd --version 2>&1 || true'; +let commandOut = ''; + +const safeCommand = () => { + if (!commandOut) { + return new Promise((resolve) => { + childProcess.exec(command, (err, out) => { + commandOut = err ? ' ' : out; + resolve(commandOut); + }); + }); + } + return commandOut; +}; + +const safeCommandSync = () => { + if (!commandOut) { + try { + commandOut = childProcess.execSync(command, { encoding: 'utf8' }); + } catch (_err) { + commandOut = ' '; + } + } + return commandOut; +}; + +/** + * A String constant containing the value `glibc`. + * @type {string} + * @public + */ +const GLIBC = 'glibc'; + +/** + * A Regexp constant to get the GLIBC Version. + * @type {string} + */ +const RE_GLIBC_VERSION = /LIBC[a-z0-9 \-).]*?(\d+\.\d+)/i; + +/** + * A String constant containing the value `musl`. + * @type {string} + * @public + */ +const MUSL = 'musl'; + +const isFileMusl = (f) => f.includes('libc.musl-') || f.includes('ld-musl-'); + +const familyFromReport = () => { + const report = getReport(); + if (report.header && report.header.glibcVersionRuntime) { + return GLIBC; + } + if (Array.isArray(report.sharedObjects)) { + if (report.sharedObjects.some(isFileMusl)) { + return MUSL; + } + } + return null; +}; + +const familyFromCommand = (out) => { + const [getconf, ldd1] = out.split(/[\r\n]+/); + if (getconf && getconf.includes(GLIBC)) { + return GLIBC; + } + if (ldd1 && ldd1.includes(MUSL)) { + return MUSL; + } + return null; +}; + +const familyFromInterpreterPath = (path) => { + if (path) { + if (path.includes('/ld-musl-')) { + return MUSL; + } else if (path.includes('/ld-linux-')) { + return GLIBC; + } + } + return null; +}; + +const getFamilyFromLddContent = (content) => { + content = content.toString(); + if (content.includes('musl')) { + return MUSL; + } + if (content.includes('GNU C Library')) { + return GLIBC; + } + return null; +}; + +const familyFromFilesystem = async () => { + if (cachedFamilyFilesystem !== undefined) { + return cachedFamilyFilesystem; + } + cachedFamilyFilesystem = null; + try { + const lddContent = await readFile(LDD_PATH); + cachedFamilyFilesystem = getFamilyFromLddContent(lddContent); + } catch (e) {} + return cachedFamilyFilesystem; +}; + +const familyFromFilesystemSync = () => { + if (cachedFamilyFilesystem !== undefined) { + return cachedFamilyFilesystem; + } + cachedFamilyFilesystem = null; + try { + const lddContent = readFileSync(LDD_PATH); + cachedFamilyFilesystem = getFamilyFromLddContent(lddContent); + } catch (e) {} + return cachedFamilyFilesystem; +}; + +const familyFromInterpreter = async () => { + if (cachedFamilyInterpreter !== undefined) { + return cachedFamilyInterpreter; + } + cachedFamilyInterpreter = null; + try { + const selfContent = await readFile(SELF_PATH); + const path = interpreterPath(selfContent); + cachedFamilyInterpreter = familyFromInterpreterPath(path); + } catch (e) {} + return cachedFamilyInterpreter; +}; + +const familyFromInterpreterSync = () => { + if (cachedFamilyInterpreter !== undefined) { + return cachedFamilyInterpreter; + } + cachedFamilyInterpreter = null; + try { + const selfContent = readFileSync(SELF_PATH); + const path = interpreterPath(selfContent); + cachedFamilyInterpreter = familyFromInterpreterPath(path); + } catch (e) {} + return cachedFamilyInterpreter; +}; + +/** + * Resolves with the libc family when it can be determined, `null` otherwise. + * @returns {Promise} + */ +const family = async () => { + let family = null; + if (isLinux()) { + family = await familyFromInterpreter(); + if (!family) { + family = await familyFromFilesystem(); + if (!family) { + family = familyFromReport(); + } + if (!family) { + const out = await safeCommand(); + family = familyFromCommand(out); + } + } + } + return family; +}; + +/** + * Returns the libc family when it can be determined, `null` otherwise. + * @returns {?string} + */ +const familySync = () => { + let family = null; + if (isLinux()) { + family = familyFromInterpreterSync(); + if (!family) { + family = familyFromFilesystemSync(); + if (!family) { + family = familyFromReport(); + } + if (!family) { + const out = safeCommandSync(); + family = familyFromCommand(out); + } + } + } + return family; +}; + +/** + * Resolves `true` only when the platform is Linux and the libc family is not `glibc`. + * @returns {Promise} + */ +const isNonGlibcLinux = async () => isLinux() && await family() !== GLIBC; + +/** + * Returns `true` only when the platform is Linux and the libc family is not `glibc`. + * @returns {boolean} + */ +const isNonGlibcLinuxSync = () => isLinux() && familySync() !== GLIBC; + +const versionFromFilesystem = async () => { + if (cachedVersionFilesystem !== undefined) { + return cachedVersionFilesystem; + } + cachedVersionFilesystem = null; + try { + const lddContent = await readFile(LDD_PATH); + const versionMatch = lddContent.match(RE_GLIBC_VERSION); + if (versionMatch) { + cachedVersionFilesystem = versionMatch[1]; + } + } catch (e) {} + return cachedVersionFilesystem; +}; + +const versionFromFilesystemSync = () => { + if (cachedVersionFilesystem !== undefined) { + return cachedVersionFilesystem; + } + cachedVersionFilesystem = null; + try { + const lddContent = readFileSync(LDD_PATH); + const versionMatch = lddContent.match(RE_GLIBC_VERSION); + if (versionMatch) { + cachedVersionFilesystem = versionMatch[1]; + } + } catch (e) {} + return cachedVersionFilesystem; +}; + +const versionFromReport = () => { + const report = getReport(); + if (report.header && report.header.glibcVersionRuntime) { + return report.header.glibcVersionRuntime; + } + return null; +}; + +const versionSuffix = (s) => s.trim().split(/\s+/)[1]; + +const versionFromCommand = (out) => { + const [getconf, ldd1, ldd2] = out.split(/[\r\n]+/); + if (getconf && getconf.includes(GLIBC)) { + return versionSuffix(getconf); + } + if (ldd1 && ldd2 && ldd1.includes(MUSL)) { + return versionSuffix(ldd2); + } + return null; +}; + +/** + * Resolves with the libc version when it can be determined, `null` otherwise. + * @returns {Promise} + */ +const version = async () => { + let version = null; + if (isLinux()) { + version = await versionFromFilesystem(); + if (!version) { + version = versionFromReport(); + } + if (!version) { + const out = await safeCommand(); + version = versionFromCommand(out); + } + } + return version; +}; + +/** + * Returns the libc version when it can be determined, `null` otherwise. + * @returns {?string} + */ +const versionSync = () => { + let version = null; + if (isLinux()) { + version = versionFromFilesystemSync(); + if (!version) { + version = versionFromReport(); + } + if (!version) { + const out = safeCommandSync(); + version = versionFromCommand(out); + } + } + return version; +}; + +module.exports = { + GLIBC, + MUSL, + family, + familySync, + isNonGlibcLinux, + isNonGlibcLinuxSync, + version, + versionSync +}; diff --git a/build/node_modules/detect-libc/lib/elf.js b/build/node_modules/detect-libc/lib/elf.js new file mode 100644 index 0000000..aa166aa --- /dev/null +++ b/build/node_modules/detect-libc/lib/elf.js @@ -0,0 +1,39 @@ +// Copyright 2017 Lovell Fuller and others. +// SPDX-License-Identifier: Apache-2.0 + +'use strict'; + +const interpreterPath = (elf) => { + if (elf.length < 64) { + return null; + } + if (elf.readUInt32BE(0) !== 0x7F454C46) { + // Unexpected magic bytes + return null; + } + if (elf.readUInt8(4) !== 2) { + // Not a 64-bit ELF + return null; + } + if (elf.readUInt8(5) !== 1) { + // Not little-endian + return null; + } + const offset = elf.readUInt32LE(32); + const size = elf.readUInt16LE(54); + const count = elf.readUInt16LE(56); + for (let i = 0; i < count; i++) { + const headerOffset = offset + (i * size); + const type = elf.readUInt32LE(headerOffset); + if (type === 3) { + const fileOffset = elf.readUInt32LE(headerOffset + 8); + const fileSize = elf.readUInt32LE(headerOffset + 32); + return elf.subarray(fileOffset, fileOffset + fileSize).toString().replace(/\0.*$/g, ''); + } + } + return null; +}; + +module.exports = { + interpreterPath +}; diff --git a/build/node_modules/detect-libc/lib/filesystem.js b/build/node_modules/detect-libc/lib/filesystem.js new file mode 100644 index 0000000..4c2443c --- /dev/null +++ b/build/node_modules/detect-libc/lib/filesystem.js @@ -0,0 +1,51 @@ +// Copyright 2017 Lovell Fuller and others. +// SPDX-License-Identifier: Apache-2.0 + +'use strict'; + +const fs = require('fs'); + +const LDD_PATH = '/usr/bin/ldd'; +const SELF_PATH = '/proc/self/exe'; +const MAX_LENGTH = 2048; + +/** + * Read the content of a file synchronous + * + * @param {string} path + * @returns {Buffer} + */ +const readFileSync = (path) => { + const fd = fs.openSync(path, 'r'); + const buffer = Buffer.alloc(MAX_LENGTH); + const bytesRead = fs.readSync(fd, buffer, 0, MAX_LENGTH, 0); + fs.close(fd, () => {}); + return buffer.subarray(0, bytesRead); +}; + +/** + * Read the content of a file + * + * @param {string} path + * @returns {Promise} + */ +const readFile = (path) => new Promise((resolve, reject) => { + fs.open(path, 'r', (err, fd) => { + if (err) { + reject(err); + } else { + const buffer = Buffer.alloc(MAX_LENGTH); + fs.read(fd, buffer, 0, MAX_LENGTH, 0, (_, bytesRead) => { + resolve(buffer.subarray(0, bytesRead)); + fs.close(fd, () => {}); + }); + } + }); +}); + +module.exports = { + LDD_PATH, + SELF_PATH, + readFileSync, + readFile +}; diff --git a/build/node_modules/detect-libc/lib/process.js b/build/node_modules/detect-libc/lib/process.js new file mode 100644 index 0000000..ee78ad2 --- /dev/null +++ b/build/node_modules/detect-libc/lib/process.js @@ -0,0 +1,24 @@ +// Copyright 2017 Lovell Fuller and others. +// SPDX-License-Identifier: Apache-2.0 + +'use strict'; + +const isLinux = () => process.platform === 'linux'; + +let report = null; +const getReport = () => { + if (!report) { + /* istanbul ignore next */ + if (isLinux() && process.report) { + const orig = process.report.excludeNetwork; + process.report.excludeNetwork = true; + report = process.report.getReport(); + process.report.excludeNetwork = orig; + } else { + report = {}; + } + } + return report; +}; + +module.exports = { isLinux, getReport }; diff --git a/build/node_modules/detect-libc/package.json b/build/node_modules/detect-libc/package.json new file mode 100644 index 0000000..36d0f2b --- /dev/null +++ b/build/node_modules/detect-libc/package.json @@ -0,0 +1,44 @@ +{ + "name": "detect-libc", + "version": "2.1.2", + "description": "Node.js module to detect the C standard library (libc) implementation family and version", + "main": "lib/detect-libc.js", + "files": [ + "lib/", + "index.d.ts" + ], + "scripts": { + "test": "semistandard && nyc --reporter=text --check-coverage --branches=100 ava test/unit.js", + "changelog": "conventional-changelog -i CHANGELOG.md -s", + "bench": "node benchmark/detect-libc", + "bench:calls": "node benchmark/call-familySync.js && sleep 1 && node benchmark/call-isNonGlibcLinuxSync.js && sleep 1 && node benchmark/call-versionSync.js" + }, + "repository": { + "type": "git", + "url": "git://github.com/lovell/detect-libc.git" + }, + "keywords": [ + "libc", + "glibc", + "musl" + ], + "author": "Lovell Fuller ", + "contributors": [ + "Niklas Salmoukas ", + "Vinícius Lourenço " + ], + "license": "Apache-2.0", + "devDependencies": { + "ava": "^2.4.0", + "benchmark": "^2.1.4", + "conventional-changelog-cli": "^5.0.0", + "eslint-config-standard": "^13.0.1", + "nyc": "^15.1.0", + "proxyquire": "^2.1.3", + "semistandard": "^14.2.3" + }, + "engines": { + "node": ">=8" + }, + "types": "index.d.ts" +} diff --git a/build/node_modules/next/dist/build/adapter/setup-node-env.external.js b/build/node_modules/next/dist/build/adapter/setup-node-env.external.js new file mode 100644 index 0000000..cbca7cb --- /dev/null +++ b/build/node_modules/next/dist/build/adapter/setup-node-env.external.js @@ -0,0 +1,15 @@ +// This is a minimal import that initializes the node +// environment, it is traced automatically for entries +// and can be used to ensure Node.js APIs are setup +// as expected without require `next-server` +"use strict"; +if (process.env.NEXT_RUNTIME !== 'edge') { + // eslint-disable-next-line @next/internal/typechecked-require + require('next/dist/server/node-environment'); + // eslint-disable-next-line @next/internal/typechecked-require + require('next/dist/server/require-hook'); + // eslint-disable-next-line @next/internal/typechecked-require + require('next/dist/server/node-polyfill-crypto'); +} + +//# sourceMappingURL=setup-node-env.external.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/build/define-env.js b/build/node_modules/next/dist/build/define-env.js new file mode 100644 index 0000000..d281a81 --- /dev/null +++ b/build/node_modules/next/dist/build/define-env.js @@ -0,0 +1,255 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getDefineEnv", { + enumerable: true, + get: function() { + return getDefineEnv; + } +}); +const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path")); +const _needsexperimentalreact = require("../lib/needs-experimental-react"); +const _ppr = require("../server/lib/experimental/ppr"); +const _staticenv = require("../lib/static-env"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const DEFINE_ENV_EXPRESSION = Symbol('DEFINE_ENV_EXPRESSION'); +/** + * Serializes the DefineEnv config so that it can be inserted into the code by Webpack/Turbopack, JSON stringifies each value. + */ function serializeDefineEnv(defineEnv) { + const defineEnvStringified = Object.fromEntries(Object.entries(defineEnv).map(([key, value])=>[ + key, + typeof value === 'object' && DEFINE_ENV_EXPRESSION in value ? value[DEFINE_ENV_EXPRESSION] : JSON.stringify(value) + ])); + return defineEnvStringified; +} +function getImageConfig(config, dev) { + var _config_images, _config_images1, _config_images2; + return { + 'process.env.__NEXT_IMAGE_OPTS': { + deviceSizes: config.images.deviceSizes, + imageSizes: config.images.imageSizes, + qualities: config.images.qualities, + path: config.images.path, + loader: config.images.loader, + dangerouslyAllowSVG: config.images.dangerouslyAllowSVG, + unoptimized: config == null ? void 0 : (_config_images = config.images) == null ? void 0 : _config_images.unoptimized, + ...dev ? { + // additional config in dev to allow validating on the client + domains: config.images.domains, + remotePatterns: (_config_images1 = config.images) == null ? void 0 : _config_images1.remotePatterns, + localPatterns: (_config_images2 = config.images) == null ? void 0 : _config_images2.localPatterns, + output: config.output + } : {} + } + }; +} +function getDefineEnv({ isTurbopack, clientRouterFilters, config, dev, distDir, projectPath, fetchCacheKeyPrefix, hasRewrites, isClient, isEdgeServer, isNodeServer, middlewareMatchers, omitNonDeterministic, rewrites }) { + var _config_experimental, _config_experimental1, _config_experimental_staleTimes, _config_experimental_staleTimes1, _config_experimental_staleTimes2, _config_experimental_staleTimes3, _config_i18n, _config_compiler; + const nextPublicEnv = (0, _staticenv.getNextPublicEnvironmentVariables)(); + const nextConfigEnv = (0, _staticenv.getNextConfigEnv)(config); + const isPPREnabled = (0, _ppr.checkIsAppPPREnabled)(config.experimental.ppr); + const isCacheComponentsEnabled = !!config.cacheComponents; + const isUseCacheEnabled = !!config.experimental.useCache; + const defineEnv = { + // internal field to identify the plugin config + __NEXT_DEFINE_ENV: true, + ...nextPublicEnv, + ...nextConfigEnv, + ...!isEdgeServer ? {} : { + EdgeRuntime: /** + * Cloud providers can set this environment variable to allow users + * and library authors to have different implementations based on + * the runtime they are running with, if it's not using `edge-runtime` + */ process.env.NEXT_EDGE_RUNTIME_PROVIDER ?? 'edge-runtime', + // process should be only { env: {...} } for edge runtime. + // For ignore avoid warn on `process.emit` usage but directly omit it. + 'process.emit': false + }, + 'process.turbopack': isTurbopack, + 'process.env.TURBOPACK': isTurbopack, + 'process.env.__NEXT_BUNDLER': isTurbopack ? 'Turbopack' : process.env.NEXT_RSPACK ? 'Rspack' : 'Webpack', + // TODO: enforce `NODE_ENV` on `process.env`, and add a test: + 'process.env.NODE_ENV': dev || config.experimental.allowDevelopmentBuild ? 'development' : 'production', + 'process.env.__NEXT_DEV_SERVER': dev ? '1' : '', + 'process.env.NEXT_RUNTIME': isEdgeServer ? 'edge' : isNodeServer ? 'nodejs' : '', + 'process.env.NEXT_MINIMAL': '', + 'process.env.__NEXT_APP_NAV_FAIL_HANDLING': Boolean(config.experimental.appNavFailHandling), + 'process.env.__NEXT_APP_NEW_SCROLL_HANDLER': Boolean(config.experimental.appNewScrollHandler), + 'process.env.__NEXT_PPR': isPPREnabled, + 'process.env.__NEXT_CACHE_COMPONENTS': isCacheComponentsEnabled, + 'process.env.__NEXT_EXPERIMENTAL_CACHED_NAVIGATIONS': Boolean(config.experimental.cachedNavigations), + 'process.env.__NEXT_INSTANT_NAV_TOGGLE': !!config.experimental.instantNavigationDevToolsToggle, + 'process.env.__NEXT_USE_CACHE': isUseCacheEnabled, + 'process.env.NEXT_IMMUTABLE_ASSET_TOKEN': config.experimental.immutableAssetToken || '', + ...((_config_experimental = config.experimental) == null ? void 0 : _config_experimental.useSkewCookie) || !config.deploymentId ? { + 'process.env.NEXT_DEPLOYMENT_ID': false + } : isClient ? isTurbopack ? { + // This is set at runtime by packages/next/src/client/register-deployment-id-global.ts + 'process.env.NEXT_DEPLOYMENT_ID': { + [DEFINE_ENV_EXPRESSION]: 'globalThis.NEXT_DEPLOYMENT_ID' + } + } : { + // For Webpack, we currently don't use the non-inlining globalThis.NEXT_DEPLOYMENT_ID + // approach because we cannot forward this global variable to web workers easily. + 'process.env.NEXT_DEPLOYMENT_ID': config.deploymentId || false + } : ((_config_experimental1 = config.experimental) == null ? void 0 : _config_experimental1.runtimeServerDeploymentId) ? { + } : { + 'process.env.NEXT_DEPLOYMENT_ID': config.deploymentId || false + }, + // Propagates the `__NEXT_EXPERIMENTAL_STATIC_SHELL_DEBUGGING` environment + // variable to the client. + 'process.env.__NEXT_EXPERIMENTAL_STATIC_SHELL_DEBUGGING': process.env.__NEXT_EXPERIMENTAL_STATIC_SHELL_DEBUGGING || false, + 'process.env.__NEXT_FETCH_CACHE_KEY_PREFIX': fetchCacheKeyPrefix ?? '', + ...isTurbopack ? {} : { + 'process.env.__NEXT_MIDDLEWARE_MATCHERS': middlewareMatchers ?? [] + }, + 'process.env.__NEXT_MANUAL_CLIENT_BASE_PATH': config.experimental.manualClientBasePath ?? false, + 'process.env.__NEXT_CLIENT_ROUTER_DYNAMIC_STALETIME': JSON.stringify(isNaN(Number((_config_experimental_staleTimes = config.experimental.staleTimes) == null ? void 0 : _config_experimental_staleTimes.dynamic)) ? 0 : (_config_experimental_staleTimes1 = config.experimental.staleTimes) == null ? void 0 : _config_experimental_staleTimes1.dynamic), + 'process.env.__NEXT_CLIENT_ROUTER_STATIC_STALETIME': JSON.stringify(isNaN(Number((_config_experimental_staleTimes2 = config.experimental.staleTimes) == null ? void 0 : _config_experimental_staleTimes2.static)) ? 5 * 60 // 5 minutes + : (_config_experimental_staleTimes3 = config.experimental.staleTimes) == null ? void 0 : _config_experimental_staleTimes3.static), + 'process.env.__NEXT_CLIENT_ROUTER_FILTER_ENABLED': config.experimental.clientRouterFilter ?? true, + 'process.env.__NEXT_CLIENT_ROUTER_S_FILTER': (clientRouterFilters == null ? void 0 : clientRouterFilters.staticFilter) ?? false, + 'process.env.__NEXT_CLIENT_ROUTER_D_FILTER': (clientRouterFilters == null ? void 0 : clientRouterFilters.dynamicFilter) ?? false, + 'process.env.__NEXT_CLIENT_VALIDATE_RSC_REQUEST_HEADERS': Boolean(config.experimental.validateRSCRequestHeaders), + 'process.env.__NEXT_DYNAMIC_ON_HOVER': Boolean(config.experimental.dynamicOnHover), + 'process.env.__NEXT_PREFETCH_INLINING': Boolean(config.experimental.prefetchInlining), + 'process.env.__NEXT_OPTIMISTIC_CLIENT_CACHE': config.experimental.optimisticClientCache ?? true, + 'process.env.__NEXT_MIDDLEWARE_PREFETCH': config.experimental.proxyPrefetch ?? 'flexible', + 'process.env.__NEXT_CROSS_ORIGIN': config.crossOrigin, + 'process.browser': isClient, + 'process.env.__NEXT_TEST_MODE': process.env.__NEXT_TEST_MODE ?? false, + // This is used in client/dev-error-overlay/hot-dev-client.js to replace the dist directory + ...dev && (isClient ?? isEdgeServer) ? { + 'process.env.__NEXT_DIST_DIR': distDir + } : {}, + // This is used in devtools to strip the project path in edge runtime, + // as there's only a dummy `dir` value (`.`) as edge runtime doesn't have concept of file system. + ...dev && isEdgeServer ? { + 'process.env.__NEXT_EDGE_PROJECT_DIR': isTurbopack ? _nodepath.default.relative(process.cwd(), projectPath) : projectPath + } : {}, + 'process.env.__NEXT_BASE_PATH': config.basePath, + 'process.env.__NEXT_CASE_SENSITIVE_ROUTES': Boolean(config.experimental.caseSensitiveRoutes), + 'process.env.__NEXT_REWRITES': rewrites, + 'process.env.__NEXT_TRAILING_SLASH': config.trailingSlash, + 'process.env.__NEXT_DEV_INDICATOR': config.devIndicators !== false, + 'process.env.__NEXT_DEV_INDICATOR_POSITION': config.devIndicators === false ? 'bottom-left' // This will not be used as the indicator is disabled. + : config.devIndicators.position ?? 'bottom-left', + 'process.env.__NEXT_STRICT_MODE': config.reactStrictMode === null ? false : config.reactStrictMode, + 'process.env.__NEXT_STRICT_MODE_APP': // When next.config.js does not have reactStrictMode it's enabled by default. + config.reactStrictMode === null ? true : config.reactStrictMode, + 'process.env.__NEXT_OPTIMIZE_CSS': (config.experimental.optimizeCss && !dev) ?? false, + 'process.env.__NEXT_SCRIPT_WORKERS': (config.experimental.nextScriptWorkers && !dev) ?? false, + 'process.env.__NEXT_SCROLL_RESTORATION': config.experimental.scrollRestoration ?? false, + ...getImageConfig(config, dev), + 'process.env.__NEXT_ROUTER_BASEPATH': config.basePath, + 'process.env.__NEXT_HAS_REWRITES': hasRewrites, + 'process.env.__NEXT_CONFIG_OUTPUT': config.output, + 'process.env.__NEXT_I18N_SUPPORT': !!config.i18n, + 'process.env.__NEXT_I18N_DOMAINS': ((_config_i18n = config.i18n) == null ? void 0 : _config_i18n.domains) ?? false, + 'process.env.__NEXT_I18N_CONFIG': config.i18n || '', + 'process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE': config.skipProxyUrlNormalize, + 'process.env.__NEXT_EXTERNAL_MIDDLEWARE_REWRITE_RESOLVE': config.experimental.externalProxyRewritesResolve ?? false, + 'process.env.__NEXT_MANUAL_TRAILING_SLASH': config.skipTrailingSlashRedirect, + 'process.env.__NEXT_HAS_WEB_VITALS_ATTRIBUTION': (config.experimental.webVitalsAttribution && config.experimental.webVitalsAttribution.length > 0) ?? false, + 'process.env.__NEXT_WEB_VITALS_ATTRIBUTION': config.experimental.webVitalsAttribution ?? false, + 'process.env.__NEXT_LINK_NO_TOUCH_START': config.experimental.linkNoTouchStart ?? false, + 'process.env.__NEXT_ASSET_PREFIX': config.assetPrefix, + 'process.env.__NEXT_EXPERIMENTAL_AUTH_INTERRUPTS': !!config.experimental.authInterrupts, + 'process.env.__NEXT_TELEMETRY_DISABLED': Boolean(process.env.NEXT_TELEMETRY_DISABLED), + ...isNodeServer || isEdgeServer ? { + // Fix bad-actors in the npm ecosystem (e.g. `node-formidable`) + // This is typically found in unmaintained modules from the + // pre-webpack era (common in server-side code) + 'global.GENTLY': false + } : undefined, + ...isNodeServer || isEdgeServer ? { + 'process.env.__NEXT_EXPERIMENTAL_REACT': (0, _needsexperimentalreact.needsExperimentalReact)(config) + } : undefined, + 'process.env.__NEXT_MULTI_ZONE_DRAFT_MODE': config.experimental.multiZoneDraftMode ?? false, + 'process.env.__NEXT_TRUST_HOST_HEADER': config.experimental.trustHostHeader ?? false, + 'process.env.__NEXT_ALLOWED_REVALIDATE_HEADERS': config.experimental.allowedRevalidateHeaderKeys ?? [], + ...isNodeServer || isEdgeServer ? { + 'process.env.__NEXT_RELATIVE_DIST_DIR': config.distDir, + 'process.env.__NEXT_RELATIVE_PROJECT_DIR': _nodepath.default.relative(process.cwd(), projectPath) + } : {}, + 'process.env.__NEXT_BROWSER_DEBUG_INFO_IN_TERMINAL': JSON.stringify(config.logging && config.logging.browserToTerminal || false), + 'process.env.__NEXT_MCP_SERVER': !!config.experimental.mcpServer, + // The devtools need to know whether or not to show an option to clear the + // bundler cache. This option may be removed later once Turbopack's + // filesystem cache feature is more stable. + // + // This environment value is currently best-effort: + // - It's possible to disable the webpack filesystem cache, but it's + // unlikely for a user to do that. + // - Rspack's filesystem cache is unstable and requires a different + // configuration than webpack to enable (which we don't do). + // + // In the worst case we'll show an option to clear the cache, but it'll be a + // no-op that just restarts the development server. + 'process.env.__NEXT_BUNDLER_HAS_PERSISTENT_CACHE': !isTurbopack || (config.experimental.turbopackFileSystemCacheForDev ?? false), + 'process.env.__NEXT_REACT_DEBUG_CHANNEL': config.experimental.reactDebugChannel ?? false, + 'process.env.__NEXT_TRANSITION_INDICATOR': config.experimental.transitionIndicator ?? false, + 'process.env.__NEXT_GESTURE_TRANSITION': config.experimental.gestureTransition ?? false, + 'process.env.__NEXT_OPTIMISTIC_ROUTING': config.experimental.optimisticRouting ?? false, + 'process.env.__NEXT_VARY_PARAMS': config.experimental.varyParams ?? false, + 'process.env.__NEXT_EXPOSE_TESTING_API': dev || config.experimental.exposeTestingApiInProductionBuild === true, + 'process.env.__NEXT_CACHE_LIFE': config.cacheLife, + 'process.env.__NEXT_CLIENT_PARAM_PARSING_ORIGINS': config.experimental.clientParamParsingOrigins || [] + }; + const userDefines = ((_config_compiler = config.compiler) == null ? void 0 : _config_compiler.define) ?? {}; + for(const key in userDefines){ + if (defineEnv.hasOwnProperty(key)) { + throw Object.defineProperty(new Error(`The \`compiler.define\` option is configured to replace the \`${key}\` variable. This variable is either part of a Next.js built-in or is already configured.`), "__NEXT_ERROR_CODE", { + value: "E688", + enumerable: false, + configurable: true + }); + } + defineEnv[key] = userDefines[key]; + } + if (isNodeServer || isEdgeServer) { + var _config_compiler1; + const userDefinesServer = ((_config_compiler1 = config.compiler) == null ? void 0 : _config_compiler1.defineServer) ?? {}; + for(const key in userDefinesServer){ + if (defineEnv.hasOwnProperty(key)) { + throw Object.defineProperty(new Error(`The \`compiler.defineServer\` option is configured to replace the \`${key}\` variable. This variable is either part of a Next.js built-in or is already configured.`), "__NEXT_ERROR_CODE", { + value: "E689", + enumerable: false, + configurable: true + }); + } + defineEnv[key] = userDefinesServer[key]; + } + } + const serializedDefineEnv = serializeDefineEnv(defineEnv); + // we delay inlining these values until after the build + // with flying shuttle enabled so we can update them + // without invalidating entries + if (!dev && omitNonDeterministic) { + // client uses window. instead of leaving process.env + // in case process isn't polyfilled on client already + // since by this point it won't be added by webpack + const safeKey = (key)=>isClient ? `window.${key.split('.').pop()}` : key; + for(const key in nextPublicEnv){ + serializedDefineEnv[key] = safeKey(key); + } + for(const key in nextConfigEnv){ + serializedDefineEnv[key] = safeKey(key); + } + if (!config.experimental.runtimeServerDeploymentId) { + for (const key of [ + 'process.env.NEXT_DEPLOYMENT_ID' + ]){ + serializedDefineEnv[key] = safeKey(key); + } + } + } + return serializedDefineEnv; +} + +//# sourceMappingURL=define-env.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/build/duration-to-string.js b/build/node_modules/next/dist/build/duration-to-string.js new file mode 100644 index 0000000..ec42d98 --- /dev/null +++ b/build/node_modules/next/dist/build/duration-to-string.js @@ -0,0 +1,99 @@ +// Time thresholds in seconds +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + durationToString: null, + hrtimeBigIntDurationToString: null, + hrtimeDurationToString: null, + hrtimeToSeconds: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + durationToString: function() { + return durationToString; + }, + hrtimeBigIntDurationToString: function() { + return hrtimeBigIntDurationToString; + }, + hrtimeDurationToString: function() { + return hrtimeDurationToString; + }, + hrtimeToSeconds: function() { + return hrtimeToSeconds; + } +}); +const SECONDS_IN_MINUTE = 60; +const MINUTES_THRESHOLD_SECONDS = 120 // 2 minutes +; +const SECONDS_THRESHOLD_HIGH = 40; +const SECONDS_THRESHOLD_LOW = 2; +const MILLISECONDS_PER_SECOND = 1000; +// Time thresholds and conversion factors for nanoseconds +const NANOSECONDS_PER_SECOND = 1000000000; +const NANOSECONDS_PER_MILLISECOND = 1000000; +const NANOSECONDS_PER_MICROSECOND = 1000; +const NANOSECONDS_IN_MINUTE = 60000000000 // 60 * 1_000_000_000 +; +const MINUTES_THRESHOLD_NANOSECONDS = 120000000000 // 2 minutes in nanoseconds +; +const SECONDS_THRESHOLD_HIGH_NANOSECONDS = 40000000000 // 40 seconds in nanoseconds +; +const SECONDS_THRESHOLD_LOW_NANOSECONDS = 2000000000 // 2 seconds in nanoseconds +; +const MILLISECONDS_THRESHOLD_NANOSECONDS = 2000000 // 2 milliseconds in nanoseconds +; +function durationToString(compilerDuration) { + if (compilerDuration > MINUTES_THRESHOLD_SECONDS) { + return `${(compilerDuration / SECONDS_IN_MINUTE).toFixed(1)}min`; + } else if (compilerDuration > SECONDS_THRESHOLD_HIGH) { + return `${compilerDuration.toFixed(0)}s`; + } else if (compilerDuration > SECONDS_THRESHOLD_LOW) { + return `${compilerDuration.toFixed(1)}s`; + } else { + return `${(compilerDuration * MILLISECONDS_PER_SECOND).toFixed(0)}ms`; + } +} +/** + * Converts a nanosecond duration to a human-readable string format. + * Formats duration based on magnitude for optimal readability: + * - >= 2 minutes: show in minutes with 1 decimal place (e.g., "2.5min") + * - >= 40 seconds: show in whole seconds (e.g., "45s") + * - >= 2 seconds: show in seconds with 1 decimal place (e.g., "3.2s") + * - >= 2 milliseconds: show in whole milliseconds (e.g., "250ms") + * - < 2 milliseconds: show in whole microseconds (e.g., "500µs") + * + * @param durationBigInt - Duration in nanoseconds as a BigInt + * @returns Formatted duration string with appropriate unit and precision + */ function durationToStringWithNanoseconds(durationBigInt) { + const duration = Number(durationBigInt); + if (duration >= MINUTES_THRESHOLD_NANOSECONDS) { + return `${(duration / NANOSECONDS_IN_MINUTE).toFixed(1)}min`; + } else if (duration >= SECONDS_THRESHOLD_HIGH_NANOSECONDS) { + return `${(duration / NANOSECONDS_PER_SECOND).toFixed(0)}s`; + } else if (duration >= SECONDS_THRESHOLD_LOW_NANOSECONDS) { + return `${(duration / NANOSECONDS_PER_SECOND).toFixed(1)}s`; + } else if (duration >= MILLISECONDS_THRESHOLD_NANOSECONDS) { + return `${(duration / NANOSECONDS_PER_MILLISECOND).toFixed(0)}ms`; + } else { + return `${(duration / NANOSECONDS_PER_MICROSECOND).toFixed(0)}µs`; + } +} +function hrtimeToSeconds(hrtime) { + // hrtime is a tuple of [seconds, nanoseconds] + return hrtime[0] + hrtime[1] / NANOSECONDS_PER_SECOND; +} +function hrtimeBigIntDurationToString(hrtime) { + return durationToStringWithNanoseconds(hrtime); +} +function hrtimeDurationToString(hrtime) { + return durationToString(hrtimeToSeconds(hrtime)); +} + +//# sourceMappingURL=duration-to-string.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/build/get-supported-browsers.js b/build/node_modules/next/dist/build/get-supported-browsers.js new file mode 100644 index 0000000..0ab24cb --- /dev/null +++ b/build/node_modules/next/dist/build/get-supported-browsers.js @@ -0,0 +1,38 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getSupportedBrowsers", { + enumerable: true, + get: function() { + return getSupportedBrowsers; + } +}); +const _browserslist = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/browserslist")); +const _constants = require("../shared/lib/constants"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function getSupportedBrowsers(dir, isDevelopment) { + let browsers; + try { + const browsersListConfig = _browserslist.default.loadConfig({ + path: dir, + env: isDevelopment ? 'development' : 'production' + }); + // Running `browserslist` resolves `extends` and other config features into a list of browsers + if (browsersListConfig && browsersListConfig.length > 0) { + browsers = (0, _browserslist.default)(browsersListConfig); + } + } catch {} + // When user has browserslist use that target + if (browsers && browsers.length > 0) { + return browsers; + } + // Uses modern browsers as the default. + return _constants.MODERN_BROWSERSLIST_TARGET; +} + +//# sourceMappingURL=get-supported-browsers.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/build/next-config-ts/require-hook.js b/build/node_modules/next/dist/build/next-config-ts/require-hook.js new file mode 100644 index 0000000..bce387c --- /dev/null +++ b/build/node_modules/next/dist/build/next-config-ts/require-hook.js @@ -0,0 +1,85 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + deregisterHook: null, + registerHook: null, + requireFromString: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + deregisterHook: function() { + return deregisterHook; + }, + registerHook: function() { + return registerHook; + }, + requireFromString: function() { + return requireFromString; + } +}); +const _nodemodule = /*#__PURE__*/ _interop_require_default(require("node:module")); +const _nodefs = require("node:fs"); +const _nodepath = require("node:path"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const oldJSHook = require.extensions['.js']; +const extensions = [ + '.ts', + '.cts', + '.mts', + '.cjs', + '.mjs' +]; +function registerHook(swcOptions) { + // lazy require swc since it loads React before even setting NODE_ENV + // resulting loading Development React on Production + const { transformSync } = require('../swc'); + require.extensions['.js'] = function(mod, oldFilename) { + try { + return oldJSHook(mod, oldFilename); + } catch (error) { + if (error.code !== 'ERR_REQUIRE_ESM') { + throw error; + } + // calling oldJSHook throws ERR_REQUIRE_ESM, so run _compile manually + // TODO: investigate if we can remove readFileSync + const content = (0, _nodefs.readFileSync)(oldFilename, 'utf8'); + const { code } = transformSync(content, swcOptions); + mod._compile(code, oldFilename); + } + }; + for (const ext of extensions){ + const oldHook = require.extensions[ext] ?? oldJSHook; + require.extensions[ext] = function(mod, oldFilename) { + const _compile = mod._compile; + mod._compile = function(code, filename) { + const swc = transformSync(code, swcOptions); + return _compile.call(this, swc.code, filename); + }; + return oldHook(mod, oldFilename); + }; + } +} +function deregisterHook() { + require.extensions['.js'] = oldJSHook; + extensions.forEach((ext)=>delete require.extensions[ext]); +} +function requireFromString(code, filename) { + const paths = _nodemodule.default._nodeModulePaths((0, _nodepath.dirname)(filename)); + const m = new _nodemodule.default(filename, module.parent); + m.paths = paths; + m._compile(code, filename); + return m.exports; +} + +//# sourceMappingURL=require-hook.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/build/next-config-ts/transpile-config.js b/build/node_modules/next/dist/build/next-config-ts/transpile-config.js new file mode 100644 index 0000000..7dc39fc --- /dev/null +++ b/build/node_modules/next/dist/build/next-config-ts/transpile-config.js @@ -0,0 +1,251 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "transpileConfig", { + enumerable: true, + get: function() { + return transpileConfig; + } +}); +const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path")); +const _nodefs = require("node:fs"); +const _nodeurl = require("node:url"); +const _commentjson = /*#__PURE__*/ _interop_require_wildcard(require("next/dist/compiled/comment-json")); +const _requirehook = require("./require-hook"); +const _log = require("../output/log"); +const _utils = require("../../server/lib/utils"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +function resolveSWCOptions(cwd, compilerOptions) { + var _process_versions, _process; + return { + jsc: { + parser: { + syntax: 'typescript' + }, + ...compilerOptions.paths ? { + paths: compilerOptions.paths + } : {}, + ...compilerOptions.baseUrl ? { + baseUrl: _nodepath.default.resolve(cwd, compilerOptions.baseUrl) + } : compilerOptions.paths ? { + baseUrl: cwd + } : {} + }, + module: { + type: 'commonjs' + }, + isModule: 'unknown', + env: { + targets: { + // Setting the Node.js version can reduce unnecessary code generation. + node: ((_process = process) == null ? void 0 : (_process_versions = _process.versions) == null ? void 0 : _process_versions.node) ?? '20.19.0' + } + } + }; +} +function resolveExtends(extendsPath, currentConfigDir) { + // Relative paths are resolved relative to the current config's directory + if (extendsPath.startsWith('./') || extendsPath.startsWith('../') || _nodepath.default.isAbsolute(extendsPath)) { + const resolved = _nodepath.default.resolve(currentConfigDir, extendsPath); + // TypeScript allows omitting .json extension + if ((0, _nodefs.existsSync)(resolved)) { + return resolved; + } + if (!resolved.endsWith('.json') && (0, _nodefs.existsSync)(resolved + '.json')) { + return resolved + '.json'; + } + return resolved; + } + // Package paths - use require.resolve to find the package + try { + // Try resolving as a direct path within the package + return require.resolve(extendsPath, { + paths: [ + currentConfigDir + ] + }); + } catch { + // If that fails, try appending tsconfig.json for package names like "@tsconfig/node18" + try { + return require.resolve(extendsPath + '/tsconfig.json', { + paths: [ + currentConfigDir + ] + }); + } catch { + // Return the original path and let it fail later with a clear error + return _nodepath.default.resolve(currentConfigDir, extendsPath); + } + } +} +function loadTsConfigFile(configPath, visited) { + const resolvedPath = _nodepath.default.resolve(configPath); + if (visited.has(resolvedPath)) { + return {}; + } + visited.add(resolvedPath); + if (!(0, _nodefs.existsSync)(resolvedPath)) { + return {}; + } + const configContent = (0, _nodefs.readFileSync)(resolvedPath, 'utf8'); + const config = _commentjson.parse(configContent); + const configDir = _nodepath.default.dirname(resolvedPath); + let mergedOptions = {}; + // Note that config options from `extends` should get overwritten, not merged + if (config.extends) { + const extendsList = Array.isArray(config.extends) ? config.extends : [ + config.extends + ]; + for (const extendsPath of extendsList){ + const parentConfigPath = resolveExtends(extendsPath, configDir); + const parentOptions = loadTsConfigFile(parentConfigPath, visited); + mergedOptions = { + ...mergedOptions, + ...parentOptions + }; + } + } + const currentOptions = config.compilerOptions ?? {}; + mergedOptions = { + ...mergedOptions, + paths: currentOptions.paths ?? mergedOptions.paths, + baseUrl: currentOptions.baseUrl ?? mergedOptions.baseUrl + }; + return mergedOptions; +} +async function loadTsConfig(dir) { + // NOTE: This doesn't fully cover the edge case for setting + // "typescript.tsconfigPath" in next config which is currently + // a restriction. + // It's a chicken-and-egg problem since we need to transpile + // the next config to get that value. + const resolvedTsConfigPath = _nodepath.default.join(dir, 'tsconfig.json'); + if (!(0, _nodefs.existsSync)(resolvedTsConfigPath)) { + return {}; + } + return loadTsConfigFile(resolvedTsConfigPath, new Set()); +} +async function transpileConfig({ nextConfigPath, dir }) { + try { + // envs are passed to the workers and preserve the flag + if (process.env.__NEXT_NODE_NATIVE_TS_LOADER_ENABLED === 'true') { + try { + // Node.js v22.10.0+ + // Value is 'strip' or 'transform' based on how the feature is enabled. + // https://nodejs.org/api/process.html#processfeaturestypescript + // TODO: Remove `as any` once we bump @types/node to v22.10.0+ + if (process.features.typescript) { + // Run import() here to catch errors and fallback to legacy resolution. + return (await import((0, _nodeurl.pathToFileURL)(nextConfigPath).href)).default; + } + if ((0, _utils.getNodeOptionsArgs)().includes('--no-experimental-strip-types') || process.execArgv.includes('--no-experimental-strip-types')) { + (0, _log.warnOnce)(`Skipped resolving "${_nodepath.default.basename(nextConfigPath)}" using Node.js native TypeScript resolution because it was disabled by the "--no-experimental-strip-types" flag.` + ' Falling back to legacy resolution.' + ' Learn more: https://nextjs.org/docs/app/api-reference/config/typescript#using-nodejs-native-typescript-resolver-for-nextconfigts'); + } + // Feature is not enabled, fallback to legacy resolution for current session. + process.env.__NEXT_NODE_NATIVE_TS_LOADER_ENABLED = 'false'; + } catch (cause) { + (0, _log.warnOnce)(`Failed to import "${_nodepath.default.basename(nextConfigPath)}" using Node.js native TypeScript resolution.` + ' Falling back to legacy resolution.' + ' Learn more: https://nextjs.org/docs/app/api-reference/config/typescript#using-nodejs-native-typescript-resolver-for-nextconfigts', { + cause + }); + // Once failed, fallback to legacy resolution for current session. + process.env.__NEXT_NODE_NATIVE_TS_LOADER_ENABLED = 'false'; + } + } + const compilerOptions = await loadTsConfig(dir); + return handleCJS({ + dir, + nextConfigPath, + compilerOptions + }); + } catch (cause) { + throw Object.defineProperty(new Error(`Failed to transpile "${_nodepath.default.basename(nextConfigPath)}".`, { + cause + }), "__NEXT_ERROR_CODE", { + value: "E797", + enumerable: false, + configurable: true + }); + } +} +async function handleCJS({ dir, nextConfigPath, compilerOptions }) { + const swcOptions = resolveSWCOptions(dir, compilerOptions); + let hasRequire = false; + try { + var _config_experimental; + const nextConfigString = (0, _nodefs.readFileSync)(nextConfigPath, 'utf8'); + // lazy require swc since it loads React before even setting NODE_ENV + // resulting loading Development React on Production + const { loadBindings } = require('../swc'); + const bindings = await loadBindings(); + const { code } = await bindings.transform(nextConfigString, swcOptions); + // register require hook only if require exists + if (code.includes('require(')) { + (0, _requirehook.registerHook)(swcOptions); + hasRequire = true; + } + // filename & extension don't matter here + const config = (0, _requirehook.requireFromString)(code, _nodepath.default.resolve(dir, 'next.config.compiled.js')); + // At this point we have already loaded the bindings without this configuration setting due to the `transform` call above. + // Possibly we fell back to wasm in which case, it all works out but if not we need to warn + // that the configuration was ignored. + if ((config == null ? void 0 : (_config_experimental = config.experimental) == null ? void 0 : _config_experimental.useWasmBinary) && !bindings.isWasm) { + (0, _log.warn)('Using a next.config.ts file is incompatible with `experimental.useWasmBinary` unless ' + '`--experimental-next-config-strip-types` is also passed.\nSetting `useWasmBinary` to `false'); + config.experimental.useWasmBinary = false; + } + return config; + } catch (error) { + throw error; + } finally{ + if (hasRequire) { + (0, _requirehook.deregisterHook)(); + } + } +} + +//# sourceMappingURL=transpile-config.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/build/output/format.js b/build/node_modules/next/dist/build/output/format.js new file mode 100644 index 0000000..46b1a80 --- /dev/null +++ b/build/node_modules/next/dist/build/output/format.js @@ -0,0 +1,84 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + formatExpire: null, + formatRevalidate: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + formatExpire: function() { + return formatExpire; + }, + formatRevalidate: function() { + return formatRevalidate; + } +}); +const timeUnits = [ + { + label: 'y', + seconds: 31536000 + }, + { + label: 'w', + seconds: 604800 + }, + { + label: 'd', + seconds: 86400 + }, + { + label: 'h', + seconds: 3600 + }, + { + label: 'm', + seconds: 60 + }, + { + label: 's', + seconds: 1 + } +]; +function humanReadableTimeRounded(seconds) { + // Find the largest fitting unit. + let candidateIndex = timeUnits.length - 1; + for(let i = 0; i < timeUnits.length; i++){ + if (seconds >= timeUnits[i].seconds) { + candidateIndex = i; + break; + } + } + const candidate = timeUnits[candidateIndex]; + const value = seconds / candidate.seconds; + const isExact = Number.isInteger(value); + // For days and weeks only, check if using the next smaller unit yields an + // exact result. + if (!isExact && (candidate.label === 'd' || candidate.label === 'w')) { + const nextUnit = timeUnits[candidateIndex + 1]; + const nextValue = seconds / nextUnit.seconds; + if (Number.isInteger(nextValue)) { + return `${nextValue}${nextUnit.label}`; + } + } + if (isExact) { + return `${value}${candidate.label}`; + } + return `≈${Math.round(value)}${candidate.label}`; +} +function formatRevalidate(cacheControl) { + const { revalidate } = cacheControl; + return revalidate ? humanReadableTimeRounded(revalidate) : ''; +} +function formatExpire(cacheControl) { + const { expire } = cacheControl; + return expire ? humanReadableTimeRounded(expire) : ''; +} + +//# sourceMappingURL=format.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/build/output/log.js b/build/node_modules/next/dist/build/output/log.js new file mode 100644 index 0000000..ccb826d --- /dev/null +++ b/build/node_modules/next/dist/build/output/log.js @@ -0,0 +1,135 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + bootstrap: null, + error: null, + errorOnce: null, + event: null, + info: null, + prefixes: null, + ready: null, + trace: null, + wait: null, + warn: null, + warnOnce: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + bootstrap: function() { + return bootstrap; + }, + error: function() { + return error; + }, + errorOnce: function() { + return errorOnce; + }, + event: function() { + return event; + }, + info: function() { + return info; + }, + prefixes: function() { + return prefixes; + }, + ready: function() { + return ready; + }, + trace: function() { + return trace; + }, + wait: function() { + return wait; + }, + warn: function() { + return warn; + }, + warnOnce: function() { + return warnOnce; + } +}); +const _picocolors = require("../../lib/picocolors"); +const _lrucache = require("../../server/lib/lru-cache"); +const prefixes = { + wait: (0, _picocolors.white)((0, _picocolors.bold)('○')), + error: (0, _picocolors.red)((0, _picocolors.bold)('⨯')), + warn: (0, _picocolors.yellow)((0, _picocolors.bold)('⚠')), + ready: '▲', + info: (0, _picocolors.white)((0, _picocolors.bold)(' ')), + event: (0, _picocolors.green)((0, _picocolors.bold)('✓')), + trace: (0, _picocolors.magenta)((0, _picocolors.bold)('»')) +}; +const LOGGING_METHOD = { + log: 'log', + warn: 'warn', + error: 'error' +}; +function prefixedLog(prefixType, ...message) { + if ((message[0] === '' || message[0] === undefined) && message.length === 1) { + message.shift(); + } + const consoleMethod = prefixType in LOGGING_METHOD ? LOGGING_METHOD[prefixType] : 'log'; + const prefix = prefixes[prefixType]; + // If there's no message, don't print the prefix but a new line + if (message.length === 0) { + console[consoleMethod](''); + } else { + // Ensure if there's ANSI escape codes it's concatenated into one string. + // Chrome DevTool can only handle color if it's in one string. + if (message.length === 1 && typeof message[0] === 'string') { + console[consoleMethod](prefix + ' ' + message[0]); + } else { + console[consoleMethod](prefix, ...message); + } + } +} +function bootstrap(message) { + console.log(message); +} +function wait(...message) { + prefixedLog('wait', ...message); +} +function error(...message) { + prefixedLog('error', ...message); +} +function warn(...message) { + prefixedLog('warn', ...message); +} +function ready(...message) { + prefixedLog('ready', ...message); +} +function info(...message) { + prefixedLog('info', ...message); +} +function event(...message) { + prefixedLog('event', ...message); +} +function trace(...message) { + prefixedLog('trace', ...message); +} +const warnOnceCache = new _lrucache.LRUCache(10000, (value)=>value.length); +function warnOnce(...message) { + const key = message.join(' '); + if (!warnOnceCache.has(key)) { + warnOnceCache.set(key, key); + warn(...message); + } +} +const errorOnceCache = new _lrucache.LRUCache(10000, (value)=>value.length); +function errorOnce(...message) { + const key = message.join(' '); + if (!errorOnceCache.has(key)) { + errorOnceCache.set(key, key); + error(...message); + } +} + +//# sourceMappingURL=log.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/build/segment-config/app/app-segment-config.js b/build/node_modules/next/dist/build/segment-config/app/app-segment-config.js new file mode 100644 index 0000000..bffde80 --- /dev/null +++ b/build/node_modules/next/dist/build/segment-config/app/app-segment-config.js @@ -0,0 +1,162 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + AppSegmentConfigSchemaKeys: null, + parseAppSegmentConfig: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + AppSegmentConfigSchemaKeys: function() { + return AppSegmentConfigSchemaKeys; + }, + parseAppSegmentConfig: function() { + return parseAppSegmentConfig; + } +}); +const _zod = require("next/dist/compiled/zod"); +const _zod1 = require("../../../shared/lib/zod"); +const CookieSchema = _zod.z.object({ + name: _zod.z.string(), + value: _zod.z.string().or(_zod.z.null()) +}).strict(); +const RuntimeSampleSchema = _zod.z.object({ + cookies: _zod.z.array(CookieSchema).optional(), + headers: _zod.z.array(_zod.z.tuple([ + _zod.z.string(), + _zod.z.string().or(_zod.z.null()) + ])).optional(), + params: _zod.z.record(_zod.z.union([ + _zod.z.string(), + _zod.z.array(_zod.z.string()) + ])).optional(), + searchParams: _zod.z.record(_zod.z.union([ + _zod.z.string(), + _zod.z.array(_zod.z.string()), + _zod.z.null() + ])).optional() +}).strict(); +const InstantConfigStaticSchema = _zod.z.object({ + prefetch: _zod.z.literal('static'), + samples: _zod.z.array(RuntimeSampleSchema).min(1).optional(), + from: _zod.z.array(_zod.z.string()).optional(), + unstable_disableValidation: _zod.z.literal(true).optional(), + unstable_disableDevValidation: _zod.z.literal(true).optional(), + unstable_disableBuildValidation: _zod.z.literal(true).optional() +}).strict(); +const InstantConfigRuntimeSchema = _zod.z.object({ + prefetch: _zod.z.literal('runtime'), + samples: _zod.z.array(RuntimeSampleSchema).min(1), + from: _zod.z.array(_zod.z.string()).optional(), + unstable_disableValidation: _zod.z.literal(true).optional(), + unstable_disableDevValidation: _zod.z.literal(true).optional(), + unstable_disableBuildValidation: _zod.z.literal(true).optional() +}).strict(); +const InstantConfigSchema = _zod.z.union([ + _zod.z.discriminatedUnion('prefetch', [ + InstantConfigStaticSchema, + InstantConfigRuntimeSchema + ]), + _zod.z.literal(false) +]); +/** + * The schema for configuration for a page. + */ const AppSegmentConfigSchema = _zod.z.object({ + /** + * The number of seconds to revalidate the page or false to disable revalidation. + */ revalidate: _zod.z.union([ + _zod.z.number().int().nonnegative(), + _zod.z.literal(false) + ]).optional(), + /** + * Whether the page supports dynamic parameters. + */ dynamicParams: _zod.z.boolean().optional(), + /** + * The dynamic behavior of the page. + */ dynamic: _zod.z.enum([ + 'auto', + 'error', + 'force-static', + 'force-dynamic' + ]).optional(), + /** + * The caching behavior of the page. + */ fetchCache: _zod.z.enum([ + 'auto', + 'default-cache', + 'only-cache', + 'force-cache', + 'force-no-store', + 'default-no-store', + 'only-no-store' + ]).optional(), + /** + * How this segment should be prefetched. + */ unstable_instant: InstantConfigSchema.optional(), + /** + * The stale time for dynamic responses in seconds. + * Controls how long the client-side router cache retains dynamic page data. + * Pages only — not allowed in layouts. + */ unstable_dynamicStaleTime: _zod.z.number().int().nonnegative().optional(), + /** + * The preferred region for the page. + */ preferredRegion: _zod.z.union([ + _zod.z.string(), + _zod.z.array(_zod.z.string()) + ]).optional(), + /** + * The runtime to use for the page. + */ runtime: _zod.z.enum([ + 'edge', + 'nodejs' + ]).optional(), + /** + * The maximum duration for the page in seconds. + */ maxDuration: _zod.z.number().int().nonnegative().optional() +}); +function parseAppSegmentConfig(data, route) { + const parsed = AppSegmentConfigSchema.safeParse(data, { + errorMap: (issue, ctx)=>{ + if (issue.path.length === 1) { + switch(issue.path[0]){ + case 'revalidate': + { + return { + message: `Invalid revalidate value ${JSON.stringify(ctx.data)} on "${route}", must be a non-negative number or false` + }; + } + case 'unstable_instant': + { + return { + // @TODO replace this link with a link to the docs when they are written + message: `Invalid unstable_instant value ${JSON.stringify(ctx.data)} on "${route}", must be an object with \`prefetch: "static"\` or \`prefetch: "runtime"\`, or \`false\`. Read more at https://nextjs.org/docs/messages/invalid-instant-configuration` + }; + } + case 'unstable_dynamicStaleTime': + { + return { + message: `Invalid unstable_dynamicStaleTime value ${JSON.stringify(ctx.data)} on "${route}", must be a non-negative number` + }; + } + default: + } + } + return { + message: ctx.defaultError + }; + } + }); + if (!parsed.success) { + throw (0, _zod1.formatZodError)(`Invalid segment configuration options detected for "${route}". Read more at https://nextjs.org/docs/app/api-reference/file-conventions/route-segment-config`, parsed.error); + } + return parsed.data; +} +const AppSegmentConfigSchemaKeys = AppSegmentConfigSchema.keyof().options; + +//# sourceMappingURL=app-segment-config.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/build/segment-config/app/app-segments.js b/build/node_modules/next/dist/build/segment-config/app/app-segments.js new file mode 100644 index 0000000..b81df8c --- /dev/null +++ b/build/node_modules/next/dist/build/segment-config/app/app-segments.js @@ -0,0 +1,137 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "collectSegments", { + enumerable: true, + get: function() { + return collectSegments; + } +}); +const _appsegmentconfig = require("./app-segment-config"); +const _invarianterror = require("../../../shared/lib/invariant-error"); +const _checks = require("../../../server/route-modules/checks"); +const _clientandserverreferences = require("../../../lib/client-and-server-references"); +const _getsegmentparam = require("../../../shared/lib/router/utils/get-segment-param"); +const _appdirmodule = require("../../../server/lib/app-dir-module"); +/** + * Parses the app config and attaches it to the segment. + */ function attach(segment, userland, route) { + // If the userland is not an object, then we can't do anything with it. + if (typeof userland !== 'object' || userland === null) { + return; + } + // Try to parse the application configuration. + const config = (0, _appsegmentconfig.parseAppSegmentConfig)(userland, route); + // If there was any keys on the config, then attach it to the segment. + if (Object.keys(config).length > 0) { + segment.config = config; + } + if ('generateStaticParams' in userland && typeof userland.generateStaticParams === 'function') { + var _segment_config; + segment.generateStaticParams = userland.generateStaticParams; + // Validate that `generateStaticParams` makes sense in this context. + if (((_segment_config = segment.config) == null ? void 0 : _segment_config.runtime) === 'edge') { + throw Object.defineProperty(new Error('Edge runtime is not supported with `generateStaticParams`.'), "__NEXT_ERROR_CODE", { + value: "E502", + enumerable: false, + configurable: true + }); + } + } +} +/** + * Walks the loader tree and collects the generate parameters for each segment. + * + * @param routeModule the app page route module + * @returns the segments for the app page route module + */ async function collectAppPageSegments(routeModule) { + // We keep track of unique segments, since with parallel routes, it's possible + // to see the same segment multiple times. + const segments = []; + // Queue will store loader trees. + const queue = [ + routeModule.userland.loaderTree + ]; + while(queue.length > 0){ + const loaderTree = queue.shift(); + const [name, parallelRoutes] = loaderTree; + // Process current node + const { mod: userland, filePath } = await (0, _appdirmodule.getLayoutOrPageModule)(loaderTree); + const isClientComponent = userland && (0, _clientandserverreferences.isClientReference)(userland); + const param = (0, _getsegmentparam.getSegmentParam)(name); + const segment = { + name, + paramName: param == null ? void 0 : param.paramName, + paramType: param == null ? void 0 : param.paramType, + filePath, + config: undefined, + generateStaticParams: undefined + }; + // Only server components can have app segment configurations + if (!isClientComponent) { + attach(segment, userland, routeModule.definition.pathname); + } + // If this segment doesn't already exist, then add it to the segments array. + // The list of segments is short so we just use a list traversal to check + // for duplicates and spare us needing to maintain the string key. + if (segments.every((s)=>s.name !== segment.name || s.paramName !== segment.paramName || s.paramType !== segment.paramType || s.filePath !== segment.filePath)) { + segments.push(segment); + } + // Add all parallel routes to the queue + for (const parallelRoute of Object.values(parallelRoutes)){ + queue.push(parallelRoute); + } + } + return segments; +} +/** + * Collects the segments for a given app route module. + * + * @param routeModule the app route module + * @returns the segments for the app route module + */ function collectAppRouteSegments(routeModule) { + // Get the pathname parts, slice off the first element (which is empty). + const parts = routeModule.definition.pathname.split('/').slice(1); + if (parts.length === 0) { + throw Object.defineProperty(new _invarianterror.InvariantError('Expected at least one segment'), "__NEXT_ERROR_CODE", { + value: "E580", + enumerable: false, + configurable: true + }); + } + // Generate all the segments. + const segments = parts.map((name)=>{ + const param = (0, _getsegmentparam.getSegmentParam)(name); + return { + name, + paramName: param == null ? void 0 : param.paramName, + paramType: param == null ? void 0 : param.paramType, + filePath: undefined, + config: undefined, + generateStaticParams: undefined + }; + }); + // We know we have at least one, we verified this above. We should get the + // last segment which represents the root route module. + const segment = segments[segments.length - 1]; + segment.filePath = routeModule.definition.filename; + // Extract the segment config from the userland module. + attach(segment, routeModule.userland, routeModule.definition.pathname); + return segments; +} +function collectSegments(routeModule) { + if ((0, _checks.isAppRouteRouteModule)(routeModule)) { + return collectAppRouteSegments(routeModule); + } + if ((0, _checks.isAppPageRouteModule)(routeModule)) { + return collectAppPageSegments(routeModule); + } + throw Object.defineProperty(new _invarianterror.InvariantError('Expected a route module to be one of app route or page'), "__NEXT_ERROR_CODE", { + value: "E568", + enumerable: false, + configurable: true + }); +} + +//# sourceMappingURL=app-segments.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/build/segment-config/app/collect-root-param-keys.js b/build/node_modules/next/dist/build/segment-config/app/collect-root-param-keys.js new file mode 100644 index 0000000..f1eb6a5 --- /dev/null +++ b/build/node_modules/next/dist/build/segment-config/app/collect-root-param-keys.js @@ -0,0 +1,52 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "collectRootParamKeys", { + enumerable: true, + get: function() { + return collectRootParamKeys; + } +}); +const _getsegmentparam = require("../../../shared/lib/router/utils/get-segment-param"); +const _checks = require("../../../server/route-modules/checks"); +const _invarianterror = require("../../../shared/lib/invariant-error"); +function collectAppPageRootParamKeys(routeModule) { + let rootParams = []; + let current = routeModule.userland.loaderTree; + while(current){ + var _getSegmentParam; + const [name, parallelRoutes, modules] = current; + // If this is a dynamic segment, then we collect the param. + const paramName = (_getSegmentParam = (0, _getsegmentparam.getSegmentParam)(name)) == null ? void 0 : _getSegmentParam.paramName; + if (paramName) { + rootParams.push(paramName); + } + // If this has a layout module, then we've found the root layout because + // we return once we found the first layout. + if (typeof modules.layout !== 'undefined') { + return rootParams; + } + // This didn't include a root layout, so we need to continue. We don't need + // to collect from other parallel routes because we can't have a parallel + // route above a root layout. + current = parallelRoutes.children; + } + // If we didn't find a root layout, then we don't have any params. + return []; +} +function collectRootParamKeys(routeModule) { + if ((0, _checks.isAppRouteRouteModule)(routeModule)) { + return []; + } + if ((0, _checks.isAppPageRouteModule)(routeModule)) { + return collectAppPageRootParamKeys(routeModule); + } + throw Object.defineProperty(new _invarianterror.InvariantError('Expected a route module to be one of app route or page'), "__NEXT_ERROR_CODE", { + value: "E568", + enumerable: false, + configurable: true + }); +} + +//# sourceMappingURL=collect-root-param-keys.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/build/static-paths/app.js b/build/node_modules/next/dist/build/static-paths/app.js new file mode 100644 index 0000000..9214962 --- /dev/null +++ b/build/node_modules/next/dist/build/static-paths/app.js @@ -0,0 +1,736 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + assignStaticShellMetadata: null, + buildAppStaticPaths: null, + calculateFallbackMode: null, + filterUniqueParams: null, + generateAllParamCombinations: null, + generateRouteStaticParams: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + assignStaticShellMetadata: function() { + return assignStaticShellMetadata; + }, + buildAppStaticPaths: function() { + return buildAppStaticPaths; + }, + calculateFallbackMode: function() { + return calculateFallbackMode; + }, + filterUniqueParams: function() { + return filterUniqueParams; + }, + generateAllParamCombinations: function() { + return generateAllParamCombinations; + }, + generateRouteStaticParams: function() { + return generateRouteStaticParams; + } +}); +const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path")); +const _runwithafter = require("../../server/after/run-with-after"); +const _workstore = require("../../server/async-storage/work-store"); +const _fallback = require("../../lib/fallback"); +const _utils = require("./utils"); +const _escapepathdelimiters = /*#__PURE__*/ _interop_require_default(require("../../shared/lib/router/utils/escape-path-delimiters")); +const _createincrementalcache = require("../../export/helpers/create-incremental-cache"); +const _getsegmentparam = require("../../shared/lib/router/utils/get-segment-param"); +const _emptygeneratestaticparamserror = require("../../shared/lib/errors/empty-generate-static-params-error"); +const _interceptionprefixfromparamtype = require("../../shared/lib/router/utils/interception-prefix-from-param-type"); +const _implicittags = require("../../server/lib/implicit-tags"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function filterUniqueParams(childrenRouteParams, routeParams) { + // A Map is used to store unique parameter combinations. The key of the Map + // is a string representation of the parameter combination, and the value + // is the actual `Params` object. + const unique = new Map(); + // Iterate over each parameter object in the input array. + for (const params of routeParams){ + let key = '' // Initialize an empty string to build the unique key for the current `params` object. + ; + // Iterate through the `routeParamKeys` (which are assumed to be sorted). + // This consistent order is crucial for generating a stable and unique key + // for each parameter combination. + for (const { paramName: paramKey } of childrenRouteParams){ + const value = params[paramKey]; + // Construct a part of the key using the parameter key and its value. + // A type prefix (`A:` for Array, `S:` for String, `U:` for undefined) is added to the value + // to prevent collisions. For example, `['a', 'b']` and `'a,b'` would + // otherwise generate the same string representation, leading to incorrect + // deduplication. This ensures that different types with the same string + // representation are treated as distinct. + let valuePart; + if (Array.isArray(value)) { + valuePart = `A:${value.join(',')}`; + } else if (value === undefined) { + valuePart = `U:undefined`; + } else { + valuePart = `S:${value}`; + } + key += `${paramKey}:${valuePart}|`; + } + // If the generated key is not already in the `unique` Map, it means this + // parameter combination is unique so far. Add it to the Map. + if (!unique.has(key)) { + unique.set(key, params); + } + } + // Convert the Map's values (the unique `Params` objects) back into an array + // and return it. + return Array.from(unique.values()); +} +function generateAllParamCombinations(childrenRouteParams, routeParams, rootParamKeys) { + // A Map is used to store unique combinations of Route Parameters. + // The key of the Map is a string representation of the Route Parameter + // combination, and the value is the `Params` object containing only + // the Route Parameters. + const combinations = new Map(); + // Determine the minimum index where all Root Parameters are included. + // This optimization ensures we only generate combinations that include + // a complete set of Root Parameters, preventing invalid Static Shells. + // + // For example, if rootParamKeys = ['lang', 'region'] and routeParamKeys = ['lang', 'region', 'slug']: + // - 'lang' is at index 0, 'region' is at index 1 + // - minIndexForCompleteRootParams = max(0, 1) = 1 + // - We'll only generate combinations starting from index 1 (which includes both lang and region) + let minIndexForCompleteRootParams = -1; + if (rootParamKeys.length > 0) { + // Find the index of the last Root Parameter in routeParamKeys. + // This tells us the minimum combination length needed to include all Root Parameters. + for (const rootParamKey of rootParamKeys){ + const index = childrenRouteParams.findIndex((param)=>param.paramName === rootParamKey); + if (index === -1) { + // Root Parameter not found in Route Parameters - this shouldn't happen in normal cases + // but we handle it gracefully by treating it as if there are no Root Parameters. + // This allows the function to fall back to generating all sub-combinations. + minIndexForCompleteRootParams = -1; + break; + } + // Track the highest index among all Root Parameters. + // This ensures all Root Parameters are included in any generated combination. + minIndexForCompleteRootParams = Math.max(minIndexForCompleteRootParams, index); + } + } + // Iterate over each Static Parameter object in the input array. + // Each params object represents one potential route combination (e.g., { lang: 'en', region: 'US', slug: 'home' }) + for (const params of routeParams){ + // Generate all possible prefix combinations for this Static Parameter set. + // For routeParamKeys = ['lang', 'region', 'slug'], we'll generate combinations at: + // - i=0: { lang: 'en' } + // - i=1: { lang: 'en', region: 'US' } + // - i=2: { lang: 'en', region: 'US', slug: 'home' } + // + // The iteration order is crucial for generating stable and unique keys + // for each Route Parameter combination. + for(let i = 0; i < childrenRouteParams.length; i++){ + // Skip generating combinations that don't include all Root Parameters. + // This prevents creating invalid Static Shells that are missing required Root Parameters. + // + // For example, if Root Parameters are ['lang', 'region'] and minIndexForCompleteRootParams = 1: + // - Skip i=0 (would only include 'lang', missing 'region') + // - Process i=1 and higher (includes both 'lang' and 'region') + if (minIndexForCompleteRootParams >= 0 && i < minIndexForCompleteRootParams) { + continue; + } + // Initialize data structures for building this specific combination + const combination = {}; + const keyParts = []; + let hasAllRootParams = true; + // Build the sub-combination with parameters from index 0 to i (inclusive). + // This creates a prefix of the full parameter set, building up combinations incrementally. + // + // For example, if routeParamKeys = ['lang', 'region', 'slug'] and i = 1: + // - j=0: Add 'lang' parameter + // - j=1: Add 'region' parameter + // Result: { lang: 'en', region: 'US' } + for(let j = 0; j <= i; j++){ + const { paramName: routeKey } = childrenRouteParams[j]; + // Check if the parameter exists in the original params object and has a defined value. + // This handles cases where generateStaticParams doesn't provide all possible parameters, + // or where some parameters are optional/undefined. + if (!params.hasOwnProperty(routeKey) || params[routeKey] === undefined) { + // If this missing parameter is a Root Parameter, mark the combination as invalid. + // Root Parameters are required for Static Shells, so we can't generate partial combinations without them. + if (rootParamKeys.includes(routeKey)) { + hasAllRootParams = false; + } + break; + } + const value = params[routeKey]; + combination[routeKey] = value; + // Construct a unique key part for this parameter to enable deduplication. + // We use type prefixes to prevent collisions between different value types + // that might have the same string representation. + // + // Examples: + // - Array ['foo', 'bar'] becomes "A:foo,bar" + // - String "foo,bar" becomes "S:foo,bar" + // - This prevents collisions between ['foo', 'bar'] and "foo,bar" + let valuePart; + if (Array.isArray(value)) { + valuePart = `A:${value.join(',')}`; + } else { + valuePart = `S:${value}`; + } + keyParts.push(`${routeKey}:${valuePart}`); + } + // Build the final unique key by joining all parameter parts. + // This key is used for deduplication in the combinations Map. + // Format: "lang:S:en|region:S:US|slug:A:home,about" + const currentKey = keyParts.join('|'); + // Only add the combination if it meets our criteria: + // 1. hasAllRootParams: Contains all required Root Parameters + // 2. !combinations.has(currentKey): Is not a duplicate of an existing combination + // + // This ensures we only generate valid, unique parameter combinations for Static Shells. + if (hasAllRootParams && !combinations.has(currentKey)) { + combinations.set(currentKey, combination); + } + } + } + // Convert the Map's values back into an array and return the final result. + // The Map ensures all combinations are unique, and we return only the + // parameter objects themselves, discarding the internal deduplication keys. + return Array.from(combinations.values()); +} +function calculateFallbackMode(dynamicParams, fallbackRootParams, baseFallbackMode) { + return dynamicParams ? // perform a blocking static render. + fallbackRootParams.length > 0 ? _fallback.FallbackMode.BLOCKING_STATIC_RENDER : baseFallbackMode ?? _fallback.FallbackMode.NOT_FOUND : _fallback.FallbackMode.NOT_FOUND; +} +/** + * Validates the parameters to ensure they're accessible and have the correct + * types. + * + * @param page - The page to validate. + * @param regex - The route regex. + * @param isRoutePPREnabled - Whether the route has partial prerendering enabled. + * @param pathnameSegments - The keys of the parameters. + * @param rootParamKeys - The keys of the root params. + * @param routeParams - The list of parameters to validate. + * @returns The list of validated parameters. + */ function validateParams(page, isRoutePPREnabled, pathnameSegments, rootParamKeys, routeParams) { + const valid = []; + // Validate that if there are any root params, that the user has provided at + // least one value for them only if we're using partial prerendering. + if (isRoutePPREnabled && rootParamKeys.length > 0) { + if (routeParams.length === 0 || rootParamKeys.some((key)=>routeParams.some((params)=>!(key in params)))) { + if (rootParamKeys.length === 1) { + throw Object.defineProperty(new Error(`A required root parameter (${rootParamKeys[0]}) was not provided in generateStaticParams for ${page}, please provide at least one value.`), "__NEXT_ERROR_CODE", { + value: "E622", + enumerable: false, + configurable: true + }); + } + throw Object.defineProperty(new Error(`Required root params (${rootParamKeys.join(', ')}) were not provided in generateStaticParams for ${page}, please provide at least one value for each.`), "__NEXT_ERROR_CODE", { + value: "E621", + enumerable: false, + configurable: true + }); + } + } + for (const params of routeParams){ + const item = {}; + for (const { paramName: key, paramType } of pathnameSegments){ + const { repeat, optional } = (0, _getsegmentparam.getParamProperties)(paramType); + let paramValue = params[key]; + if (optional && params.hasOwnProperty(key) && (paramValue === null || paramValue === undefined || paramValue === false)) { + paramValue = []; + } + // A parameter is missing, so the rest of the params are not accessible. + // We only support this when the route has partial prerendering enabled. + // This will make it so that the remaining params are marked as missing so + // we can generate a fallback route for them. + if (!paramValue && isRoutePPREnabled) { + break; + } + // Perform validation for the parameter based on whether it's a repeat + // parameter or not. + if (repeat) { + if (!Array.isArray(paramValue)) { + throw Object.defineProperty(new Error(`A required parameter (${key}) was not provided as an array received ${typeof paramValue} in generateStaticParams for ${page}`), "__NEXT_ERROR_CODE", { + value: "E618", + enumerable: false, + configurable: true + }); + } + } else { + if (typeof paramValue !== 'string') { + throw Object.defineProperty(new Error(`A required parameter (${key}) was not provided as a string received ${typeof paramValue} in generateStaticParams for ${page}`), "__NEXT_ERROR_CODE", { + value: "E617", + enumerable: false, + configurable: true + }); + } + } + item[key] = paramValue; + } + valid.push(item); + } + return valid; +} +function assignStaticShellMetadata(prerenderedRoutes, pathnameSegments, computeRemainingPrerenderableParams) { + // If there are no routes to process, exit early. + if (prerenderedRoutes.length === 0) { + return; + } + // Initialize the root of the Trie. This node represents the starting point + // before any parameters have been considered. + const root = { + children: new Map(), + routes: [] + }; + // Phase 1: Build the Trie. + // Iterate over each prerendered route and insert it into the Trie. + // Each route's concrete parameter values form a path in the Trie. + for (const route of prerenderedRoutes){ + let currentNode = root // Start building the path from the root for each route. + ; + // Iterate through the sorted parameter keys. The order of keys is crucial + // for ensuring that routes with the same concrete parameters follow the + // same path in the Trie, regardless of the original order of properties + // in the `params` object. + for (const { paramName: key } of pathnameSegments){ + // Check if the current route actually has a concrete value for this parameter. + // If a dynamic segment is not filled (i.e., it's a fallback), it won't have + // this property, and we stop building the path for this route at this point. + if (route.params.hasOwnProperty(key)) { + const value = route.params[key]; + // Generate a unique key for the parameter's value. This is critical + // to prevent collisions between different data types that might have + // the same string representation (e.g., `['a', 'b']` vs `'a,b'`). + // A type prefix (`A:` for Array, `S:` for String, `U:` for undefined) + // is added to the value to prevent collisions. This ensures that + // different types with the same string representation are treated as + // distinct. + let valueKey; + if (Array.isArray(value)) { + valueKey = `A:${value.join(',')}`; + } else if (value === undefined) { + valueKey = `U:undefined`; + } else { + valueKey = `S:${value}`; + } + // Look for a child node corresponding to this `valueKey` from the `currentNode`. + let childNode = currentNode.children.get(valueKey); + if (!childNode) { + // If the child node doesn't exist, create a new one and add it to + // the current node's children. + childNode = { + children: new Map(), + routes: [] + }; + currentNode.children.set(valueKey, childNode); + } + // Move deeper into the Trie to the `childNode` for the next parameter. + currentNode = childNode; + } + } + // After processing all concrete parameters for the route, add the full + // `PrerenderedRoute` object to the `routes` array of the `currentNode`. + // This node represents the unique concrete parameter combination for this route. + currentNode.routes.push(route); + } + // Phase 2: Traverse the Trie to assign the `throwOnEmptyStaticShell` property. + // This is done using an iterative Depth-First Search (DFS) approach with an + // explicit stack to avoid JavaScript's recursion depth limits (stack overflow) + // for very deep routing structures. + const stack = [ + root + ] // Initialize the stack with the root node. + ; + while(stack.length > 0){ + const node = stack.pop()// Pop the next node to process from the stack. + ; + // `hasChildren` indicates if this node has any more specific concrete + // parameter combinations branching off from it. If true, it means this + // node represents a prefix for other, more specific routes. + const hasChildren = node.children.size > 0; + // If the current node has routes associated with it (meaning, routes whose + // concrete parameters lead to this node's path in the Trie). + if (node.routes.length > 0) { + // Determine the minimum number of fallback parameters among all routes + // that are associated with this current Trie node. This is used to + // identify if a route should not throw on empty static shell relative to another route *at the same level* + // of concrete parameters, but with fewer fallback parameters. + let minFallbacks = Infinity; + for (const r of node.routes){ + // `fallbackRouteParams?.length ?? 0` handles cases where `fallbackRouteParams` + // might be `undefined` or `null`, treating them as 0 length. + minFallbacks = Math.min(minFallbacks, r.fallbackRouteParams ? r.fallbackRouteParams.length : 0); + } + // Now, for each `PrerenderedRoute` associated with this node: + for (const route of node.routes){ + // A route is ok not to throw on an empty static shell (and thus + // `throwOnEmptyStaticShell` should be `false`) if either of the + // following conditions is met: + // 1. `hasChildren` is true: This node has further concrete parameter children. + // This means the current route is a parent to more specific routes (e.g., + // `/blog/[slug]` should not throw when concrete routes like `/blog/first-post` exist). + // OR + // 2. `route.fallbackRouteParams.length > minFallbacks`: This route has + // more fallback parameters than another route at the same Trie node. + // This implies the current route is a more general version that should not throw + // compared to a more specific route that has fewer fallback parameters + // (e.g., `/1234/[...slug]` should not throw relative to `/[id]/[...slug]`). + if (hasChildren || route.fallbackRouteParams && route.fallbackRouteParams.length > minFallbacks) { + route.throwOnEmptyStaticShell = false // Should not throw on empty static shell. + ; + } else { + route.throwOnEmptyStaticShell = true // Should throw on empty static shell. + ; + } + if (computeRemainingPrerenderableParams && route.fallbackRouteParams && route.fallbackRouteParams.length > 0) { + const fallbackRouteParamsByName = new Map(route.fallbackRouteParams.map((param)=>[ + param.paramName, + param + ])); + const remainingPrerenderableParams = []; + // Only unresolved pathname params that can still be filled by + // generateStaticParams belong here. Once we hit an unresolved param + // that is purely dynamic, the rest of the shell also stays dynamic + // and cannot be completed into a more specific prerendered shell. + for (const segment of pathnameSegments){ + if (route.params.hasOwnProperty(segment.paramName)) { + continue; + } + if (!segment.hasGenerateStaticParams) { + break; + } + const fallbackRouteParam = fallbackRouteParamsByName.get(segment.paramName); + if (!fallbackRouteParam) { + break; + } + remainingPrerenderableParams.push(fallbackRouteParam); + } + route.remainingPrerenderableParams = remainingPrerenderableParams.length > 0 ? remainingPrerenderableParams : undefined; + } + } + } + // Add all children of the current node to the stack. This ensures that + // the traversal continues to explore deeper paths in the Trie. + for (const child of node.children.values()){ + stack.push(child); + } + } +} +/** + * Calls a single generateStaticParams function within a WorkUnitStore context, + * making root param getters available during static param generation. + */ async function callGenerateStaticParams(generateStaticParams, workUnitAsyncStorage, parentParams, rootParamKeys, implicitTags) { + const rootParams = {}; + for (const key of rootParamKeys){ + if (key in parentParams) { + rootParams[key] = parentParams[key]; + } + } + const workUnitStore = { + type: 'generate-static-params', + phase: 'render', + implicitTags, + rootParams + }; + return workUnitAsyncStorage.run(workUnitStore, generateStaticParams, { + params: parentParams + }); +} +async function generateRouteStaticParams(segments, store, workUnitAsyncStorage, isRoutePPREnabled, rootParamKeys) { + // Early return if no segments to process + if (segments.length === 0) return []; + const implicitTags = await (0, _implicittags.getImplicitTags)(store.page, store.page, null); + const queue = [ + { + segmentIndex: 0, + params: [] + } + ]; + let currentParams = []; + while(queue.length > 0){ + var _current_config; + const { segmentIndex, params } = queue.shift(); + // If we've processed all segments, this is our final result + if (segmentIndex >= segments.length) { + currentParams = params; + break; + } + const current = segments[segmentIndex]; + // Skip segments without generateStaticParams and continue to next + if (typeof current.generateStaticParams !== 'function') { + queue.push({ + segmentIndex: segmentIndex + 1, + params + }); + continue; + } + // Configure fetchCache if specified + if (((_current_config = current.config) == null ? void 0 : _current_config.fetchCache) !== undefined) { + store.fetchCache = current.config.fetchCache; + } + const nextParams = []; + // If there are parent params, we need to process them. + if (params.length > 0) { + // Process each parent parameter combination + for (const parentParams of params){ + const result = await callGenerateStaticParams(current.generateStaticParams, workUnitAsyncStorage, parentParams, rootParamKeys, implicitTags); + if (result.length > 0) { + // Merge parent params with each result item + for (const item of result){ + nextParams.push({ + ...parentParams, + ...item + }); + } + } else if (isRoutePPREnabled) { + (0, _emptygeneratestaticparamserror.throwEmptyGenerateStaticParamsError)(); + } else { + // No results, just pass through parent params + nextParams.push(parentParams); + } + } + } else { + // No parent params, call generateStaticParams with empty object + const result = await callGenerateStaticParams(current.generateStaticParams, workUnitAsyncStorage, {}, rootParamKeys, implicitTags); + if (result.length === 0 && isRoutePPREnabled) { + (0, _emptygeneratestaticparamserror.throwEmptyGenerateStaticParamsError)(); + } + nextParams.push(...result); + } + // Add next segment to work queue + queue.push({ + segmentIndex: segmentIndex + 1, + params: nextParams + }); + } + return currentParams; +} +function createReplacements(segment, paramValue) { + // Determine the prefix to use for the interception marker. + let prefix; + if (segment.paramType) { + prefix = (0, _interceptionprefixfromparamtype.interceptionPrefixFromParamType)(segment.paramType) ?? ''; + } else { + prefix = ''; + } + return { + pathname: prefix + (0, _utils.encodeParam)(paramValue, (value)=>// Only escape path delimiters if the value is a string, the following + // version will URL encode the value. + (0, _escapepathdelimiters.default)(value, true)), + encodedPathname: prefix + (0, _utils.encodeParam)(paramValue, // URL encode the value. + encodeURIComponent) + }; +} +async function buildAppStaticPaths({ dir, page, route, distDir, cacheComponents, authInterrupts, segments, isrFlushToDisk, cacheHandler, cacheLifeProfiles, requestHeaders, cacheHandlers, cacheMaxMemorySize, fetchCacheKeyPrefix, nextConfigOutput, ComponentMod, isRoutePPREnabled = false, partialFallbacksEnabled = false, buildId, deploymentId, rootParamKeys }) { + if (segments.some((generate)=>{ + var _generate_config; + return ((_generate_config = generate.config) == null ? void 0 : _generate_config.dynamicParams) === true; + }) && nextConfigOutput === 'export') { + throw Object.defineProperty(new Error('"dynamicParams: true" cannot be used with "output: export". See more info here: https://nextjs.org/docs/app/building-your-application/deploying/static-exports'), "__NEXT_ERROR_CODE", { + value: "E393", + enumerable: false, + configurable: true + }); + } + ComponentMod.patchFetch(); + const incrementalCache = await (0, _createincrementalcache.createIncrementalCache)({ + dir, + distDir, + cacheHandler, + cacheHandlers, + requestHeaders, + fetchCacheKeyPrefix, + flushToDisk: isrFlushToDisk, + cacheMaxMemorySize + }); + // Extract segments that contribute to the pathname. + // For AppPageRouteModule: Traverses the loader tree to find all segments (including + // interception routes in parallel slots) that match the pathname + // For AppRouteRouteModule: Filters the segments array to get non-parallel route params + const pathnameRouteParamSegments = (0, _utils.extractPathnameRouteParamSegments)(ComponentMod.routeModule, segments, route); + const afterRunner = new _runwithafter.AfterRunner(); + const store = (0, _workstore.createWorkStore)({ + page, + renderOpts: { + incrementalCache, + cacheLifeProfiles, + supportsDynamicResponse: true, + cacheComponents, + experimental: { + authInterrupts + }, + waitUntil: afterRunner.context.waitUntil, + onClose: afterRunner.context.onClose, + onAfterTaskError: afterRunner.context.onTaskError + }, + buildId, + deploymentId, + previouslyRevalidatedTags: [] + }); + const routeParams = await ComponentMod.workAsyncStorage.run(store, generateRouteStaticParams, segments, store, ComponentMod.workUnitAsyncStorage, isRoutePPREnabled, rootParamKeys); + const generatedParamNames = new Set(); + for (const params of routeParams){ + for (const paramName of Object.keys(params)){ + generatedParamNames.add(paramName); + } + } + const prerenderablePathSegments = pathnameRouteParamSegments.map((segment)=>({ + paramName: segment.paramName, + hasGenerateStaticParams: generatedParamNames.has(segment.paramName) + })); + await afterRunner.executeAfter(); + let lastDynamicSegmentHadGenerateStaticParams = false; + for (const segment of segments){ + var _segment_config; + // Check to see if there are any missing params for segments that have + // dynamicParams set to false. + if (segment.paramName && segment.paramType && ((_segment_config = segment.config) == null ? void 0 : _segment_config.dynamicParams) === false) { + for (const params of routeParams){ + if (segment.paramName in params) continue; + const relative = segment.filePath ? _nodepath.default.relative(dir, segment.filePath) : undefined; + throw Object.defineProperty(new Error(`Segment "${relative}" exports "dynamicParams: false" but the param "${segment.paramName}" is missing from the generated route params.`), "__NEXT_ERROR_CODE", { + value: "E280", + enumerable: false, + configurable: true + }); + } + } + if (segment.paramName && segment.paramType && typeof segment.generateStaticParams !== 'function') { + lastDynamicSegmentHadGenerateStaticParams = false; + } else if (typeof segment.generateStaticParams === 'function') { + lastDynamicSegmentHadGenerateStaticParams = true; + } + } + // Determine if all the segments have had their parameters provided. + const hadAllParamsGenerated = pathnameRouteParamSegments.length === 0 || routeParams.length > 0 && routeParams.every((params)=>{ + for (const { paramName } of pathnameRouteParamSegments){ + if (paramName in params) continue; + return false; + } + return true; + }); + // TODO: dynamic params should be allowed to be granular per segment but + // we need additional information stored/leveraged in the prerender + // manifest to allow this behavior. + const dynamicParams = segments.every((segment)=>{ + var _segment_config; + return ((_segment_config = segment.config) == null ? void 0 : _segment_config.dynamicParams) !== false; + }); + const supportsRoutePreGeneration = hadAllParamsGenerated || !process.env.__NEXT_DEV_SERVER; + const fallbackMode = dynamicParams ? supportsRoutePreGeneration ? isRoutePPREnabled ? _fallback.FallbackMode.PRERENDER : _fallback.FallbackMode.BLOCKING_STATIC_RENDER : undefined : _fallback.FallbackMode.NOT_FOUND; + const prerenderedRoutesByPathname = new Map(); + // Convert rootParamKeys to Set for O(1) lookup. + const rootParamSet = new Set(rootParamKeys); + if (hadAllParamsGenerated || isRoutePPREnabled) { + let paramsToProcess = routeParams; + if (isRoutePPREnabled) { + // Discover all unique combinations of the routeParams so we can generate + // routes that won't throw on empty static shell for each of them if + // they're available. + paramsToProcess = generateAllParamCombinations(pathnameRouteParamSegments, routeParams, rootParamKeys); + // Collect all the fallback route params for the segments. + const fallbackRouteParams = []; + for (const segment of segments){ + if (!segment.paramName || !segment.paramType) continue; + fallbackRouteParams.push({ + paramName: segment.paramName, + paramType: segment.paramType + }); + } + // Add the base route, this is the route with all the placeholders as it's + // derived from the `page` string. + prerenderedRoutesByPathname.set(page, { + params: {}, + pathname: page, + encodedPathname: page, + fallbackRouteParams, + fallbackMode: calculateFallbackMode(dynamicParams, rootParamKeys, fallbackMode), + fallbackRootParams: rootParamKeys, + throwOnEmptyStaticShell: true + }); + } + filterUniqueParams(pathnameRouteParamSegments, validateParams(page, isRoutePPREnabled, pathnameRouteParamSegments, rootParamKeys, paramsToProcess)).forEach((params)=>{ + let pathname = page; + let encodedPathname = page; + const fallbackRouteParams = []; + for (const { name, paramName, paramType } of pathnameRouteParamSegments){ + const paramValue = params[paramName]; + if (!paramValue) { + if (isRoutePPREnabled) { + // Mark remaining params as fallback params. + fallbackRouteParams.push({ + paramName, + paramType + }); + for(let i = pathnameRouteParamSegments.findIndex((param)=>param.paramName === paramName) + 1; i < pathnameRouteParamSegments.length; i++){ + fallbackRouteParams.push({ + paramName: pathnameRouteParamSegments[i].paramName, + paramType: pathnameRouteParamSegments[i].paramType + }); + } + break; + } else { + // This route is not complete, and we aren't performing a partial + // prerender, so we should return, skipping this route. + return; + } + } + const replacements = createReplacements({ + paramType + }, paramValue); + pathname = pathname.replace(name, // We're replacing the segment name with the replacement pathname + // which will include the interception marker prefix if it exists. + replacements.pathname); + encodedPathname = encodedPathname.replace(name, // We're replacing the segment name with the replacement encoded + // pathname which will include the encoded param value. + replacements.encodedPathname); + } + // Resolve all route params from the loader tree if this is from an + // app page. This processes both regular route params and parallel route params. + if ('loaderTree' in ComponentMod.routeModule.userland && Array.isArray(ComponentMod.routeModule.userland.loaderTree)) { + (0, _utils.resolveRouteParamsFromTree)(ComponentMod.routeModule.userland.loaderTree, params, route, fallbackRouteParams); + } + const fallbackRootParams = []; + for (const { paramName } of fallbackRouteParams){ + // If the param is a root param then we can add it to the fallback + // root params. + if (rootParamSet.has(paramName)) { + fallbackRootParams.push(paramName); + } + } + pathname = (0, _utils.normalizePathname)(pathname); + prerenderedRoutesByPathname.set(pathname, { + params, + pathname, + encodedPathname: (0, _utils.normalizePathname)(encodedPathname), + fallbackRouteParams, + fallbackMode: calculateFallbackMode(dynamicParams, fallbackRootParams, fallbackMode), + fallbackRootParams, + throwOnEmptyStaticShell: true + }); + }); + } + const prerenderedRoutes = prerenderedRoutesByPathname.size > 0 || lastDynamicSegmentHadGenerateStaticParams ? [ + ...prerenderedRoutesByPathname.values() + ] : undefined; + // Now we have to set the throwOnEmptyStaticShell for each of the routes. + if (prerenderedRoutes && cacheComponents) { + assignStaticShellMetadata(prerenderedRoutes, prerenderablePathSegments, partialFallbacksEnabled); + } + return { + fallbackMode, + prerenderedRoutes + }; +} + +//# sourceMappingURL=app.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/build/static-paths/app/extract-pathname-route-param-segments-from-loader-tree.js b/build/node_modules/next/dist/build/static-paths/app/extract-pathname-route-param-segments-from-loader-tree.js new file mode 100644 index 0000000..a50a841 --- /dev/null +++ b/build/node_modules/next/dist/build/static-paths/app/extract-pathname-route-param-segments-from-loader-tree.js @@ -0,0 +1,137 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "extractPathnameRouteParamSegmentsFromLoaderTree", { + enumerable: true, + get: function() { + return extractPathnameRouteParamSegmentsFromLoaderTree; + } +}); +const _app = require("../../../shared/lib/router/routes/app"); +const _parseloadertree = require("../../../shared/lib/router/utils/parse-loader-tree"); +const _resolveparamvalue = require("../../../shared/lib/router/utils/resolve-param-value"); +/** + * Validates that the static segments in currentPath match the corresponding + * segments in targetSegments. This ensures we only extract dynamic parameters + * that are part of the target pathname structure. + * + * Segments are compared literally - interception markers like "(.)photo" are + * part of the pathname and must match exactly. + * + * @example + * // Matching paths + * currentPath: ['blog', '(.)photo'] + * targetSegments: ['blog', '(.)photo', '[id]'] + * → Returns true (both static segments match exactly) + * + * @example + * // Non-matching paths + * currentPath: ['blog', '(.)photo'] + * targetSegments: ['blog', 'photo', '[id]'] + * → Returns false (segments don't match - marker is part of pathname) + * + * @param currentPath - The accumulated path segments from the loader tree + * @param targetSegments - The target pathname split into segments + * @returns true if all static segments match, false otherwise + */ function validatePrefixMatch(currentPath, route) { + for(let i = 0; i < currentPath.length; i++){ + const pathSegment = currentPath[i]; + const targetPathSegment = route.segments[i]; + // Type mismatch - one is static, one is dynamic + if (pathSegment.type !== targetPathSegment.type) { + return false; + } + // One has an interception marker, the other doesn't. + if (pathSegment.interceptionMarker !== targetPathSegment.interceptionMarker) { + return false; + } + // Both are static but names don't match + if (pathSegment.type === 'static' && targetPathSegment.type === 'static' && pathSegment.name !== targetPathSegment.name) { + return false; + } else if (pathSegment.type === 'dynamic' && targetPathSegment.type === 'dynamic' && pathSegment.param.paramType !== targetPathSegment.param.paramType && pathSegment.param.paramName !== targetPathSegment.param.paramName) { + return false; + } + } + return true; +} +function extractPathnameRouteParamSegmentsFromLoaderTree(loaderTree, route) { + const pathnameRouteParamSegments = []; + const params = {}; + // BFS traversal with depth and path tracking + const queue = [ + { + tree: loaderTree, + depth: 0, + currentPath: [] + } + ]; + while(queue.length > 0){ + const { tree, depth, currentPath } = queue.shift(); + const { segment, parallelRoutes } = (0, _parseloadertree.parseLoaderTree)(tree); + // Build the path for the current node + let updatedPath = currentPath; + let nextDepth = depth; + const appSegment = (0, _app.parseAppRouteSegment)(segment); + // Only add to path if it's a real segment that appears in the URL + // Route groups and parallel markers don't contribute to URL pathname + if (appSegment && appSegment.type !== 'route-group' && appSegment.type !== 'parallel-route') { + updatedPath = [ + ...currentPath, + appSegment + ]; + nextDepth = depth + 1; + } + // Check if this segment has a param and matches the target pathname at this depth + if ((appSegment == null ? void 0 : appSegment.type) === 'dynamic') { + const { paramName, paramType } = appSegment.param; + // Check if this segment is at the correct depth in the target pathname + // A segment matches if: + // 1. There's a dynamic segment at this depth in the pathname + // 2. The parameter names match (e.g., [id] matches [id], not [category]) + // 3. The static segments leading up to this point match (prefix check) + if (depth < route.segments.length) { + const targetSegment = route.segments[depth]; + // Match if the target pathname has a dynamic segment at this depth + if (targetSegment.type === 'dynamic') { + // Check that parameter names match exactly + // This prevents [category] from matching against /[id] + if (paramName !== targetSegment.param.paramName) { + continue; // Different param names, skip this segment + } + // Validate that the path leading up to this dynamic segment matches + // the target pathname. This prevents false matches like extracting + // [slug] from "/news/[slug]" when the tree has "/blog/[slug]" + if (validatePrefixMatch(currentPath, route)) { + pathnameRouteParamSegments.push({ + name: segment, + paramName, + paramType + }); + } + } + } + // Resolve parameter value if it's not already known. + if (!params.hasOwnProperty(paramName)) { + const paramValue = (0, _resolveparamvalue.resolveParamValue)(paramName, paramType, depth, route, params); + if (paramValue !== undefined) { + params[paramName] = paramValue; + } + } + } + // Continue traversing all parallel routes to find matching segments + for (const parallelRoute of Object.values(parallelRoutes)){ + queue.push({ + tree: parallelRoute, + depth: nextDepth, + currentPath: updatedPath + }); + } + } + return { + pathnameRouteParamSegments, + params + }; +} + +//# sourceMappingURL=extract-pathname-route-param-segments-from-loader-tree.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/build/static-paths/pages.js b/build/node_modules/next/dist/build/static-paths/pages.js new file mode 100644 index 0000000..7ae1a43 --- /dev/null +++ b/build/node_modules/next/dist/build/static-paths/pages.js @@ -0,0 +1,169 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "buildPagesStaticPaths", { + enumerable: true, + get: function() { + return buildPagesStaticPaths; + } +}); +const _normalizelocalepath = require("../../shared/lib/i18n/normalize-locale-path"); +const _fallback = require("../../lib/fallback"); +const _escapepathdelimiters = /*#__PURE__*/ _interop_require_default(require("../../shared/lib/router/utils/escape-path-delimiters")); +const _removetrailingslash = require("../../shared/lib/router/utils/remove-trailing-slash"); +const _routematcher = require("../../shared/lib/router/utils/route-matcher"); +const _routeregex = require("../../shared/lib/router/utils/route-regex"); +const _utils = require("./utils"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +async function buildPagesStaticPaths({ page, getStaticPaths, configFileName, locales, defaultLocale }) { + const prerenderedRoutesByPathname = new Map(); + const _routeRegex = (0, _routeregex.getRouteRegex)(page); + const _routeMatcher = (0, _routematcher.getRouteMatcher)(_routeRegex); + // Get the default list of allowed params. + const routeParameterKeys = Object.keys(_routeMatcher(page)); + const staticPathsResult = await getStaticPaths({ + // We create a copy here to avoid having the types of `getStaticPaths` + // change. This ensures that users can't mutate this array and have it + // poison the reference. + locales: [ + ...locales ?? [] + ], + defaultLocale + }); + const expectedReturnVal = `Expected: { paths: [], fallback: boolean }\n` + `See here for more info: https://nextjs.org/docs/messages/invalid-getstaticpaths-value`; + if (!staticPathsResult || typeof staticPathsResult !== 'object' || Array.isArray(staticPathsResult)) { + throw Object.defineProperty(new Error(`Invalid value returned from getStaticPaths in ${page}. Received ${typeof staticPathsResult} ${expectedReturnVal}`), "__NEXT_ERROR_CODE", { + value: "E1004", + enumerable: false, + configurable: true + }); + } + const invalidStaticPathKeys = Object.keys(staticPathsResult).filter((key)=>!(key === 'paths' || key === 'fallback')); + if (invalidStaticPathKeys.length > 0) { + throw Object.defineProperty(new Error(`Extra keys returned from getStaticPaths in ${page} (${invalidStaticPathKeys.join(', ')}) ${expectedReturnVal}`), "__NEXT_ERROR_CODE", { + value: "E1047", + enumerable: false, + configurable: true + }); + } + if (!(typeof staticPathsResult.fallback === 'boolean' || staticPathsResult.fallback === 'blocking')) { + throw Object.defineProperty(new Error(`The \`fallback\` key must be returned from getStaticPaths in ${page}.\n` + expectedReturnVal), "__NEXT_ERROR_CODE", { + value: "E1034", + enumerable: false, + configurable: true + }); + } + const toPrerender = staticPathsResult.paths; + if (!Array.isArray(toPrerender)) { + throw Object.defineProperty(new Error(`Invalid \`paths\` value returned from getStaticPaths in ${page}.\n` + `\`paths\` must be an array of strings or objects of shape { params: [key: string]: string }`), "__NEXT_ERROR_CODE", { + value: "E83", + enumerable: false, + configurable: true + }); + } + toPrerender.forEach((entry)=>{ + // For a string-provided path, we must make sure it matches the dynamic + // route. + if (typeof entry === 'string') { + entry = (0, _removetrailingslash.removeTrailingSlash)(entry); + const localePathResult = (0, _normalizelocalepath.normalizeLocalePath)(entry, locales); + let cleanedEntry = entry; + if (localePathResult.detectedLocale) { + cleanedEntry = entry.slice(localePathResult.detectedLocale.length + 1); + } else if (defaultLocale) { + entry = `/${defaultLocale}${entry}`; + } + const params = _routeMatcher(cleanedEntry); + if (!params) { + throw Object.defineProperty(new Error(`The provided path \`${cleanedEntry}\` does not match the page: \`${page}\`.`), "__NEXT_ERROR_CODE", { + value: "E481", + enumerable: false, + configurable: true + }); + } + // If leveraging the string paths variant the entry should already be + // encoded so we decode the segments ensuring we only escape path + // delimiters + const pathname = entry.split('/').map((segment)=>(0, _escapepathdelimiters.default)(decodeURIComponent(segment), true)).join('/'); + if (!prerenderedRoutesByPathname.has(pathname)) { + prerenderedRoutesByPathname.set(pathname, { + params, + pathname, + encodedPathname: entry, + fallbackRouteParams: undefined, + fallbackMode: (0, _fallback.parseStaticPathsResult)(staticPathsResult.fallback), + fallbackRootParams: undefined, + throwOnEmptyStaticShell: undefined + }); + } + } else { + const invalidKeys = Object.keys(entry).filter((key)=>key !== 'params' && key !== 'locale'); + if (invalidKeys.length) { + throw Object.defineProperty(new Error(`Additional keys were returned from \`getStaticPaths\` in page "${page}". ` + `URL Parameters intended for this dynamic route must be nested under the \`params\` key, i.e.:` + `\n\n\treturn { params: { ${routeParameterKeys.map((k)=>`${k}: ...`).join(', ')} } }` + `\n\nKeys that need to be moved: ${invalidKeys.join(', ')}.\n`), "__NEXT_ERROR_CODE", { + value: "E322", + enumerable: false, + configurable: true + }); + } + const { params = {} } = entry; + let builtPage = page; + let encodedBuiltPage = page; + routeParameterKeys.forEach((validParamKey)=>{ + const { repeat, optional } = _routeRegex.groups[validParamKey]; + let paramValue = params[validParamKey]; + if (optional && params.hasOwnProperty(validParamKey) && (paramValue === null || paramValue === undefined || paramValue === false)) { + paramValue = []; + } + if (repeat && !Array.isArray(paramValue) || !repeat && typeof paramValue !== 'string' || typeof paramValue === 'undefined') { + throw Object.defineProperty(new Error(`A required parameter (${validParamKey}) was not provided as ${repeat ? 'an array' : 'a string'} received ${typeof paramValue} in getStaticPaths for ${page}`), "__NEXT_ERROR_CODE", { + value: "E620", + enumerable: false, + configurable: true + }); + } + let replaced = `[${repeat ? '...' : ''}${validParamKey}]`; + if (optional) { + replaced = `[${replaced}]`; + } + builtPage = builtPage.replace(replaced, (0, _utils.encodeParam)(paramValue, (value)=>(0, _escapepathdelimiters.default)(value, true))); + encodedBuiltPage = encodedBuiltPage.replace(replaced, (0, _utils.encodeParam)(paramValue, encodeURIComponent)); + }); + if (!builtPage && !encodedBuiltPage) { + return; + } + if (entry.locale && !(locales == null ? void 0 : locales.includes(entry.locale))) { + throw Object.defineProperty(new Error(`Invalid locale returned from getStaticPaths for ${page}, the locale ${entry.locale} is not specified in ${configFileName}`), "__NEXT_ERROR_CODE", { + value: "E358", + enumerable: false, + configurable: true + }); + } + const curLocale = entry.locale || defaultLocale || ''; + const pathname = (0, _utils.normalizePathname)(`${curLocale ? `/${curLocale}` : ''}${curLocale && builtPage === '/' ? '' : builtPage}`); + if (!prerenderedRoutesByPathname.has(pathname)) { + prerenderedRoutesByPathname.set(pathname, { + params, + pathname, + encodedPathname: (0, _utils.normalizePathname)(`${curLocale ? `/${curLocale}` : ''}${curLocale && encodedBuiltPage === '/' ? '' : encodedBuiltPage}`), + fallbackRouteParams: undefined, + fallbackMode: (0, _fallback.parseStaticPathsResult)(staticPathsResult.fallback), + fallbackRootParams: undefined, + throwOnEmptyStaticShell: undefined + }); + } + } + }); + return { + fallbackMode: (0, _fallback.parseStaticPathsResult)(staticPathsResult.fallback), + prerenderedRoutes: [ + ...prerenderedRoutesByPathname.values() + ] + }; +} + +//# sourceMappingURL=pages.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/build/static-paths/utils.js b/build/node_modules/next/dist/build/static-paths/utils.js new file mode 100644 index 0000000..77971b9 --- /dev/null +++ b/build/node_modules/next/dist/build/static-paths/utils.js @@ -0,0 +1,119 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + encodeParam: null, + extractPathnameRouteParamSegments: null, + extractPathnameRouteParamSegmentsFromSegments: null, + normalizePathname: null, + resolveRouteParamsFromTree: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + encodeParam: function() { + return encodeParam; + }, + extractPathnameRouteParamSegments: function() { + return extractPathnameRouteParamSegments; + }, + extractPathnameRouteParamSegmentsFromSegments: function() { + return extractPathnameRouteParamSegmentsFromSegments; + }, + normalizePathname: function() { + return normalizePathname; + }, + resolveRouteParamsFromTree: function() { + return resolveRouteParamsFromTree; + } +}); +const _checks = require("../../server/route-modules/checks"); +const _app = require("../../shared/lib/router/routes/app"); +const _parseloadertree = require("../../shared/lib/router/utils/parse-loader-tree"); +const _extractpathnamerouteparamsegmentsfromloadertree = require("./app/extract-pathname-route-param-segments-from-loader-tree"); +const _resolveparamvalue = require("../../shared/lib/router/utils/resolve-param-value"); +function encodeParam(value, encoder) { + let replaceValue; + if (Array.isArray(value)) { + replaceValue = value.map(encoder).join('/'); + } else { + replaceValue = encoder(value); + } + return replaceValue; +} +function normalizePathname(pathname) { + return pathname.replace(/\\/g, '/').replace(/(?!^)\/$/, ''); +} +function extractPathnameRouteParamSegments(routeModule, segments, route) { + // For AppPageRouteModule, use the loaderTree traversal approach + if ((0, _checks.isAppPageRouteModule)(routeModule)) { + const { pathnameRouteParamSegments } = (0, _extractpathnamerouteparamsegmentsfromloadertree.extractPathnameRouteParamSegmentsFromLoaderTree)(routeModule.userland.loaderTree, route); + return pathnameRouteParamSegments; + } + return extractPathnameRouteParamSegmentsFromSegments(segments); +} +function extractPathnameRouteParamSegmentsFromSegments(segments) { + // TODO: should we consider what values are already present in the page? + // For AppRouteRouteModule, filter the segments array to get the route params + // that contribute to the pathname. + const result = []; + for (const segment of segments){ + // Skip segments without param info. + if (!segment.paramName || !segment.paramType) continue; + // Collect all the route param keys that contribute to the pathname. + result.push({ + name: segment.name, + paramName: segment.paramName, + paramType: segment.paramType + }); + } + return result; +} +function resolveRouteParamsFromTree(loaderTree, params, route, fallbackRouteParams) { + // Stack-based traversal with depth tracking + const stack = [ + { + tree: loaderTree, + depth: 0 + } + ]; + while(stack.length > 0){ + const { tree, depth } = stack.pop(); + const { segment, parallelRoutes } = (0, _parseloadertree.parseLoaderTree)(tree); + const appSegment = (0, _app.parseAppRouteSegment)(segment); + // If this segment is a route parameter, then we should process it if it's + // not already known and is not already marked as a fallback route param. + if ((appSegment == null ? void 0 : appSegment.type) === 'dynamic' && !params.hasOwnProperty(appSegment.param.paramName) && !fallbackRouteParams.some((param)=>param.paramName === appSegment.param.paramName)) { + const { paramName, paramType } = appSegment.param; + const paramValue = (0, _resolveparamvalue.resolveParamValue)(paramName, paramType, depth, route, params); + if (paramValue !== undefined) { + params[paramName] = paramValue; + } else if (paramType !== 'optional-catchall') { + // If we couldn't resolve the param, mark it as a fallback + fallbackRouteParams.push({ + paramName, + paramType + }); + } + } + // Calculate next depth - increment if this is not a route group and not empty + let nextDepth = depth; + if (appSegment && appSegment.type !== 'route-group' && appSegment.type !== 'parallel-route') { + nextDepth++; + } + // Add all parallel routes to the stack for processing. + for (const parallelRoute of Object.values(parallelRoutes)){ + stack.push({ + tree: parallelRoute, + depth: nextDepth + }); + } + } +} + +//# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/build/swc/helpers.js b/build/node_modules/next/dist/build/swc/helpers.js new file mode 100644 index 0000000..db56e62 --- /dev/null +++ b/build/node_modules/next/dist/build/swc/helpers.js @@ -0,0 +1,15 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "__nextjs_pure", { + enumerable: true, + get: function() { + return __nextjs_pure; + } +}); +function __nextjs_pure(expr) { + return expr; +} + +//# sourceMappingURL=helpers.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/build/swc/index.js b/build/node_modules/next/dist/build/swc/index.js new file mode 100644 index 0000000..b5568a2 --- /dev/null +++ b/build/node_modules/next/dist/build/swc/index.js @@ -0,0 +1,1348 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + HmrTarget: null, + createDefineEnv: null, + getBinaryMetadata: null, + getBindingsSync: null, + getModuleNamedExports: null, + getSupportedArchTriples: null, + initCustomTraceSubscriber: null, + isReactCompilerRequired: null, + loadBindings: null, + lockfilePatchPromise: null, + minify: null, + parse: null, + teardownTraceSubscriber: null, + transform: null, + transformSync: null, + warnForEdgeRuntime: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + HmrTarget: function() { + return HmrTarget; + }, + createDefineEnv: function() { + return createDefineEnv; + }, + getBinaryMetadata: function() { + return getBinaryMetadata; + }, + getBindingsSync: function() { + return getBindingsSync; + }, + getModuleNamedExports: function() { + return getModuleNamedExports; + }, + getSupportedArchTriples: function() { + return getSupportedArchTriples; + }, + initCustomTraceSubscriber: function() { + return initCustomTraceSubscriber; + }, + isReactCompilerRequired: function() { + return isReactCompilerRequired; + }, + loadBindings: function() { + return loadBindings; + }, + lockfilePatchPromise: function() { + return lockfilePatchPromise; + }, + minify: function() { + return minify; + }, + parse: function() { + return parse; + }, + teardownTraceSubscriber: function() { + return teardownTraceSubscriber; + }, + transform: function() { + return transform; + }, + transformSync: function() { + return transformSync; + }, + warnForEdgeRuntime: function() { + return warnForEdgeRuntime; + } +}); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _url = require("url"); +const _os = require("os"); +const _triples = require("next/dist/compiled/@napi-rs/triples"); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("../output/log")); +const _defineenv = require("../define-env"); +const _loaderWorkerPool = require("./loaderWorkerPool"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +var HmrTarget = /*#__PURE__*/ function(HmrTarget) { + HmrTarget["Client"] = "client"; + HmrTarget["Server"] = "server"; + return HmrTarget; +}({}); +const nextVersion = "16.2.6"; +const ArchName = (0, _os.arch)(); +const PlatformName = (0, _os.platform)(); +function infoLog(...args) { + if (process.env.NEXT_PRIVATE_BUILD_WORKER) { + return; + } + if (process.env.DEBUG) { + _log.info(...args); + } +} +function getSupportedArchTriples() { + const { darwin, win32, linux, freebsd, android } = _triples.platformArchTriples; + return { + darwin, + win32: { + arm64: win32.arm64, + ia32: win32.ia32.filter((triple)=>triple.abi === 'msvc'), + x64: win32.x64.filter((triple)=>triple.abi === 'msvc') + }, + linux: { + // linux[x64] includes `gnux32` abi, with x64 arch. + x64: linux.x64.filter((triple)=>triple.abi !== 'gnux32'), + arm64: linux.arm64, + // This target is being deprecated, however we keep it in `knownDefaultWasmFallbackTriples` for now + arm: linux.arm + }, + // Below targets are being deprecated, however we keep it in `knownDefaultWasmFallbackTriples` for now + freebsd: { + x64: freebsd.x64 + }, + android: { + arm64: android.arm64, + arm: android.arm + } + }; +} +const triples = (()=>{ + var _supportedArchTriples_PlatformName, _platformArchTriples_PlatformName; + const supportedArchTriples = getSupportedArchTriples(); + const targetTriple = (_supportedArchTriples_PlatformName = supportedArchTriples[PlatformName]) == null ? void 0 : _supportedArchTriples_PlatformName[ArchName]; + // If we have supported triple, return it right away + if (targetTriple) { + return targetTriple; + } + // If there isn't corresponding target triple in `supportedArchTriples`, check if it's excluded from original raw triples + // Otherwise, it is completely unsupported platforms. + let rawTargetTriple = (_platformArchTriples_PlatformName = _triples.platformArchTriples[PlatformName]) == null ? void 0 : _platformArchTriples_PlatformName[ArchName]; + if (rawTargetTriple) { + _log.warn(`next-swc does not have native bindings support for target triple ${rawTargetTriple}. Native features like Turbopack will not be available.`); + } else { + _log.warn(`next-swc does not have native bindings for platform ${PlatformName}/${ArchName}. Native features like Turbopack will not be available.`); + } + return []; +})(); +// Allow to specify an absolute path to the custom turbopack binary to load. +// If one of env variables is set, `loadNative` will try to use specified +// binary instead. This is thin, naive interface +// - `loadBindings` will not validate neither path nor the binary. +// +// Note these are internal flag: there's no stability, feature guarantee. +const __INTERNAL_CUSTOM_TURBOPACK_BINDINGS = process.env.__INTERNAL_CUSTOM_TURBOPACK_BINDINGS; +function checkVersionMismatch(pkgData) { + const version = pkgData.version; + if (version && version !== nextVersion) { + _log.warn(`Mismatching @next/swc version, detected: ${version} while Next.js is on ${nextVersion}. Please ensure these match`); + } +} +// These are the platforms we'll try to load wasm bindings first, +// only try to load native bindings if loading wasm binding somehow fails. +// Fallback to native binding is for migration period only, +// once we can verify loading-wasm-first won't cause visible regressions, +// we'll not include native bindings for these platform at all. +const knownDefaultWasmFallbackTriples = [ + 'x86_64-unknown-freebsd', + 'aarch64-linux-android', + 'arm-linux-androideabi', + 'armv7-unknown-linux-gnueabihf', + 'i686-pc-windows-msvc' +]; +// The last attempt's error code returned when cjs require to native bindings fails. +// If node.js throws an error without error code, this should be `unknown` instead of undefined. +// For the wasm-first targets (`knownDefaultWasmFallbackTriples`) this will be `unsupported_target`. +let lastNativeBindingsLoadErrorCode = undefined; +// Used to cache racing calls to `loadBindings` +let pendingBindings; +// The cached loaded bindings +let loadedBindings = undefined; +let downloadWasmPromise; +let swcTraceFlushGuard; +let downloadNativeBindingsPromise = undefined; +const lockfilePatchPromise = {}; +function getBindingsSync() { + if (!loadedBindings) { + if (pendingBindings) { + throw Object.defineProperty(new Error('Bindings not loaded yet, but they are being loaded, did you forget to await?'), "__NEXT_ERROR_CODE", { + value: "E906", + enumerable: false, + configurable: true + }); + } + throw Object.defineProperty(new Error('bindings not loaded yet. Either call `loadBindings` to wait for them to be available or ensure that `installBindings` has already been called.'), "__NEXT_ERROR_CODE", { + value: "E907", + enumerable: false, + configurable: true + }); + } + return loadedBindings; +} +async function loadBindings(useWasmBinary = false) { + if (loadedBindings) { + return loadedBindings; + } + if (pendingBindings) { + return pendingBindings; + } + // Increase Rust stack size as some npm packages being compiled need more than the default. + if (!process.env.RUST_MIN_STACK) { + process.env.RUST_MIN_STACK = '8388608'; + } + if (process.env.NEXT_TEST_WASM) { + useWasmBinary = true; + } + // rust needs stdout to be blocking, otherwise it will throw an error (on macOS at least) when writing a lot of data (logs) to it + // see https://github.com/napi-rs/napi-rs/issues/1630 + // and https://github.com/nodejs/node/blob/main/doc/api/process.md#a-note-on-process-io + if (process.stdout._handle != null) { + // @ts-ignore + process.stdout._handle.setBlocking == null ? void 0 : process.stdout._handle.setBlocking.call(process.stdout._handle, true); + } + if (process.stderr._handle != null) { + // @ts-ignore + process.stderr._handle.setBlocking == null ? void 0 : process.stderr._handle.setBlocking.call(process.stderr._handle, true); + } + pendingBindings = new Promise(async (resolve, reject)=>{ + if (!lockfilePatchPromise.cur) { + // always run lockfile check once so that it gets patched + // even if it doesn't fail to load locally + lockfilePatchPromise.cur = require('../../lib/patch-incorrect-lockfile').patchIncorrectLockfile(process.cwd()).catch(console.error); + } + let attempts = []; + const disableWasmFallback = process.env.NEXT_DISABLE_SWC_WASM; + const unsupportedPlatform = triples.some((triple)=>!!(triple == null ? void 0 : triple.raw) && knownDefaultWasmFallbackTriples.includes(triple.raw)); + const isWebContainer = process.versions.webcontainer; + // Normal execution relies on the param `useWasmBinary` flag to load, but + // in certain cases where there isn't a native binary we always load wasm fallback first. + const shouldLoadWasmFallbackFirst = !disableWasmFallback && useWasmBinary || unsupportedPlatform || isWebContainer; + if (!unsupportedPlatform && useWasmBinary) { + _log.warn(`experimental.useWasmBinary is not an option for supported platform ${PlatformName}/${ArchName} and will be ignored.`); + } + if (shouldLoadWasmFallbackFirst) { + lastNativeBindingsLoadErrorCode = 'unsupported_target'; + const fallbackBindings = await tryLoadWasmWithFallback(attempts); + if (fallbackBindings) { + return resolve(fallbackBindings); + } + } + // Trickle down loading `fallback` bindings: + // + // - First, try to load native bindings installed in node_modules. + // - If that fails with `ERR_MODULE_NOT_FOUND`, treat it as case of https://github.com/npm/cli/issues/4828 + // that host system where generated package lock is not matching to the guest system running on, try to manually + // download corresponding target triple and load it. This won't be triggered if native bindings are failed to load + // with other reasons than `ERR_MODULE_NOT_FOUND`. + // - Lastly, falls back to wasm binding where possible. + try { + return resolve(loadNative()); + } catch (a) { + if (Array.isArray(a) && a.every((m)=>m.includes('it was not installed'))) { + let fallbackBindings = await tryLoadNativeWithFallback(attempts); + if (fallbackBindings) { + return resolve(fallbackBindings); + } + } + attempts = attempts.concat(a); + } + // For these platforms we already tried to load wasm and failed, skip reattempt + if (!shouldLoadWasmFallbackFirst && !disableWasmFallback) { + const fallbackBindings = await tryLoadWasmWithFallback(attempts); + if (fallbackBindings) { + return resolve(fallbackBindings); + } + } + await logLoadFailure(attempts, true); + // Reject the promise to propagate the error (process.exit was removed to allow telemetry flush) + reject(Object.defineProperty(new Error(`Failed to load SWC binary for ${PlatformName}/${ArchName}, see more info here: https://nextjs.org/docs/messages/failed-loading-swc`), "__NEXT_ERROR_CODE", { + value: "E909", + enumerable: false, + configurable: true + })); + }); + loadedBindings = await pendingBindings; + pendingBindings = undefined; + return loadedBindings; +} +async function tryLoadNativeWithFallback(attempts) { + const nativeBindingsDirectory = _path.default.join(_path.default.dirname(require.resolve('next/package.json')), 'next-swc-fallback'); + if (!downloadNativeBindingsPromise) { + downloadNativeBindingsPromise = require('../../lib/download-swc').downloadNativeNextSwc(nextVersion, nativeBindingsDirectory, triples.map((triple)=>triple.platformArchABI)); + } + await downloadNativeBindingsPromise; + try { + return loadNative(nativeBindingsDirectory); + } catch (a) { + attempts.push(...[].concat(a)); + } + return undefined; +} +// helper for loadBindings +async function tryLoadWasmWithFallback(attempts) { + try { + let bindings = await loadWasm(''); + require('../../telemetry/events/swc-load-failure').eventSwcLoadFailure({ + wasm: 'enabled', + nativeBindingsErrorCode: lastNativeBindingsLoadErrorCode + }); + return bindings; + } catch (a) { + attempts.push(...[].concat(a)); + } + try { + // if not installed already download wasm package on-demand + // we download to a custom directory instead of to node_modules + // as node_module import attempts are cached and can't be re-attempted + // x-ref: https://github.com/nodejs/modules/issues/307 + const wasmDirectory = _path.default.join(_path.default.dirname(require.resolve('next/package.json')), 'wasm'); + if (!downloadWasmPromise) { + downloadWasmPromise = require('../../lib/download-swc').downloadWasmSwc(nextVersion, wasmDirectory); + } + await downloadWasmPromise; + let bindings = await loadWasm(wasmDirectory); + require('../../telemetry/events/swc-load-failure').eventSwcLoadFailure({ + wasm: 'fallback', + nativeBindingsErrorCode: lastNativeBindingsLoadErrorCode + }); + // still log native load attempts so user is + // aware it failed and should be fixed + for (const attempt of attempts){ + _log.warn(attempt); + } + return bindings; + } catch (a) { + attempts.push(...[].concat(a)); + } +} +function loadBindingsSync() { + let attempts = []; + try { + return loadNative(); + } catch (a) { + attempts = attempts.concat(a); + } + // Fire-and-forget telemetry logging (loadBindingsSync must remain synchronous) + // Worker error handler will await telemetry.flush() before exit + logLoadFailure(attempts); + throw Object.defineProperty(new Error('Failed to load bindings', { + cause: attempts + }), "__NEXT_ERROR_CODE", { + value: "E424", + enumerable: false, + configurable: true + }); +} +let loggingLoadFailure = false; +/** + * Logs SWC load failure telemetry and error messages. + * + * Note: Does NOT call process.exit() - errors must propagate to caller's error handler + * which will await telemetry.flush() before exit (critical for worker threads with async telemetry). + */ async function logLoadFailure(attempts, triedWasm = false) { + // make sure we only emit the event and log the failure once + if (loggingLoadFailure) return; + loggingLoadFailure = true; + for (let attempt of attempts){ + _log.warn(attempt); + } + await require('../../telemetry/events/swc-load-failure').eventSwcLoadFailure({ + wasm: triedWasm ? 'failed' : undefined, + nativeBindingsErrorCode: lastNativeBindingsLoadErrorCode + }); + await (lockfilePatchPromise.cur || Promise.resolve()); + _log.error(`Failed to load SWC binary for ${PlatformName}/${ArchName}, see more info here: https://nextjs.org/docs/messages/failed-loading-swc`); +} +function createDefineEnv({ isTurbopack, clientRouterFilters, config, dev, distDir, projectPath, fetchCacheKeyPrefix, hasRewrites, middlewareMatchers, rewrites }) { + let defineEnv = { + client: [], + edge: [], + nodejs: [] + }; + for (const variant of Object.keys(defineEnv)){ + defineEnv[variant] = rustifyOptionEnv((0, _defineenv.getDefineEnv)({ + isTurbopack, + clientRouterFilters, + config, + dev, + distDir, + projectPath, + fetchCacheKeyPrefix, + hasRewrites, + isClient: variant === 'client', + isEdgeServer: variant === 'edge', + isNodeServer: variant === 'nodejs', + middlewareMatchers, + rewrites + })); + } + return defineEnv; +} +function rustifyEnv(env) { + return Object.entries(env).filter(([_, value])=>value != null).map(([name, value])=>({ + name, + value + })); +} +function rustifyOptionEnv(env) { + return Object.entries(env).map(([name, value])=>({ + name, + value + })); +} +const normalizePathOnWindows = (p)=>_path.default.sep === '\\' ? p.replace(/\\/g, '/') : p; +// TODO(sokra) Support wasm option. +function bindingToApi(binding, bindingPath, _wasm) { + const cancel = new class Cancel extends Error { + }(); + /** + * Utility function to ensure all variants of an enum are handled. + */ function invariant(never, computeMessage) { + throw Object.defineProperty(new Error(`Invariant: ${computeMessage(never)}`), "__NEXT_ERROR_CODE", { + value: "E193", + enumerable: false, + configurable: true + }); + } + /** + * Calls a native function and streams the result. + * If useBuffer is true, all values will be preserved, potentially buffered + * if consumed slower than produced. Else, only the latest value will be + * preserved. + */ function subscribe(useBuffer, nativeFunction) { + // A buffer of produced items. This will only contain values if the + // consumer is slower than the producer. + let buffer = []; + // A deferred value waiting for the next produced item. This will only + // exist if the consumer is faster than the producer. + let waiting; + let canceled = false; + // The native function will call this every time it emits a new result. We + // either need to notify a waiting consumer, or buffer the new result until + // the consumer catches up. + function emitResult(err, value) { + if (waiting) { + let { resolve, reject } = waiting; + waiting = undefined; + if (err) reject(err); + else resolve(value); + } else { + const item = { + err, + value + }; + if (useBuffer) buffer.push(item); + else buffer[0] = item; + } + } + async function* createIterator() { + const task = await nativeFunction(emitResult); + try { + while(!canceled){ + if (buffer.length > 0) { + const item = buffer.shift(); + if (item.err) throw item.err; + yield item.value; + } else { + // eslint-disable-next-line no-loop-func + yield new Promise((resolve, reject)=>{ + waiting = { + resolve, + reject + }; + }); + } + } + } catch (e) { + if (e === cancel) return; + throw e; + } finally{ + if (task) { + binding.rootTaskDispose(task); + } + } + } + const iterator = createIterator(); + iterator.return = async ()=>{ + canceled = true; + if (waiting) waiting.reject(cancel); + return { + value: undefined, + done: true + }; + }; + return iterator; + } + async function rustifyProjectOptions(options) { + return { + ...options, + nextConfig: await serializeNextConfig(options.nextConfig, _path.default.join(options.rootPath, options.projectPath)), + env: rustifyEnv(options.env) + }; + } + async function rustifyPartialProjectOptions(options) { + return { + ...options, + nextConfig: options.nextConfig && await serializeNextConfig(options.nextConfig, _path.default.join(options.rootPath, options.projectPath)), + env: options.env && rustifyEnv(options.env) + }; + } + class ProjectImpl { + constructor(nativeProject){ + this._nativeProject = nativeProject; + if (typeof binding.registerWorkerScheduler === 'function') { + (0, _loaderWorkerPool.runLoaderWorkerPool)(binding, bindingPath); + } + } + async update(options) { + await binding.projectUpdate(this._nativeProject, await rustifyPartialProjectOptions(options)); + } + async writeAnalyzeData(appDirOnly) { + const napiResult = await binding.projectWriteAnalyzeData(this._nativeProject, appDirOnly); + return napiResult; + } + async writeAllEntrypointsToDisk(appDirOnly) { + const napiEndpoints = await binding.projectWriteAllEntrypointsToDisk(this._nativeProject, appDirOnly); + if ('routes' in napiEndpoints) { + return napiEntrypointsToRawEntrypoints(napiEndpoints); + } else { + return { + issues: napiEndpoints.issues, + diagnostics: napiEndpoints.diagnostics + }; + } + } + entrypointsSubscribe() { + const subscription = subscribe(false, async (callback)=>binding.projectEntrypointsSubscribe(this._nativeProject, callback)); + return async function*() { + for await (const entrypoints of subscription){ + if ('routes' in entrypoints) { + yield napiEntrypointsToRawEntrypoints(entrypoints); + } else { + yield { + issues: entrypoints.issues, + diagnostics: entrypoints.diagnostics + }; + } + } + }(); + } + hmrEvents(chunkName, target) { + return subscribe(true, async (callback)=>binding.projectHmrEvents(this._nativeProject, chunkName, target, callback)); + } + /** + * Subscribe to the list of output chunk paths that can receive HMR updates. + * Chunk paths are output file paths like "server/chunks/ssr/..._.js" for server + * or "_next/static/chunks/app/page.js" for client. + */ hmrChunkNamesSubscribe(target) { + return subscribe(false, async (callback)=>binding.projectHmrChunkNamesSubscribe(this._nativeProject, target, callback)); + } + traceSource(stackFrame, currentDirectoryFileUrl) { + return binding.projectTraceSource(this._nativeProject, stackFrame, currentDirectoryFileUrl); + } + getSourceForAsset(filePath) { + return binding.projectGetSourceForAsset(this._nativeProject, filePath); + } + getSourceMap(filePath) { + return binding.projectGetSourceMap(this._nativeProject, filePath); + } + getSourceMapSync(filePath) { + return binding.projectGetSourceMapSync(this._nativeProject, filePath); + } + updateInfoSubscribe(aggregationMs) { + return subscribe(true, async (callback)=>binding.projectUpdateInfoSubscribe(this._nativeProject, aggregationMs, callback)); + } + compilationEventsSubscribe(eventTypes) { + return subscribe(true, async (callback)=>{ + binding.projectCompilationEventsSubscribe(this._nativeProject, callback, eventTypes); + }); + } + invalidateFileSystemCache() { + return binding.projectInvalidateFileSystemCache(this._nativeProject); + } + shutdown() { + return binding.projectShutdown(this._nativeProject); + } + onExit() { + return binding.projectOnExit(this._nativeProject); + } + } + class EndpointImpl { + constructor(nativeEndpoint){ + this._nativeEndpoint = nativeEndpoint; + } + async writeToDisk() { + return await binding.endpointWriteToDisk(this._nativeEndpoint); + } + async clientChanged() { + const clientSubscription = subscribe(false, async (callback)=>binding.endpointClientChangedSubscribe(this._nativeEndpoint, callback)); + await clientSubscription.next(); + return clientSubscription; + } + async serverChanged(includeIssues) { + const serverSubscription = subscribe(false, async (callback)=>binding.endpointServerChangedSubscribe(this._nativeEndpoint, includeIssues, callback)); + await serverSubscription.next(); + return serverSubscription; + } + } + async function serializeNextConfig(nextConfig, projectPath) { + // Avoid mutating the existing `nextConfig` object. NOTE: This is only a shallow clone. + let nextConfigSerializable = { + ...nextConfig + }; + // These values are never read by Turbopack and are potentially non-serializable. + nextConfigSerializable.exportPathMap = {}; + nextConfigSerializable.generateBuildId = nextConfigSerializable.generateBuildId && {}; + nextConfigSerializable.webpack = nextConfigSerializable.webpack && {}; + if (nextConfigSerializable.modularizeImports) { + nextConfigSerializable.modularizeImports = Object.fromEntries(Object.entries(nextConfigSerializable.modularizeImports).map(([mod, config])=>[ + mod, + { + ...config, + transform: typeof config.transform === 'string' ? config.transform : Object.entries(config.transform) + } + ])); + } + // These are relative paths, but might be backslash-separated on Windows + nextConfigSerializable.distDir = normalizePathOnWindows(nextConfigSerializable.distDir); + nextConfigSerializable.distDirRoot = normalizePathOnWindows(nextConfigSerializable.distDirRoot); + // loaderFile is an absolute path, we need it to be relative for turbopack. + if (nextConfigSerializable.images.loaderFile) { + nextConfigSerializable.images = { + ...nextConfigSerializable.images, + loaderFile: './' + normalizePathOnWindows(_path.default.relative(projectPath, nextConfigSerializable.images.loaderFile)) + }; + } + // cacheHandler can be an absolute path, we need it to be relative for turbopack. + if (nextConfigSerializable.cacheHandler) { + nextConfigSerializable.cacheHandler = './' + normalizePathOnWindows(_path.default.isAbsolute(nextConfigSerializable.cacheHandler) ? _path.default.relative(projectPath, nextConfigSerializable.cacheHandler) : nextConfigSerializable.cacheHandler); + } + if (nextConfigSerializable.cacheHandlers) { + nextConfigSerializable.cacheHandlers = Object.fromEntries(Object.entries(nextConfigSerializable.cacheHandlers).filter(([_, value])=>value != null).map(([key, value])=>[ + key, + './' + normalizePathOnWindows(_path.default.isAbsolute(value) ? _path.default.relative(projectPath, value) : value) + ])); + } + if (nextConfigSerializable.turbopack != null) { + // clone to allow in-place mutations + const turbopack = { + ...nextConfigSerializable.turbopack + }; + if (turbopack.rules) { + turbopack.rules = serializeTurbopackRules(turbopack.rules); + } + // Serialize ignoreIssue rules: convert RegExp to {source, flags} + if (turbopack.ignoreIssue) { + function serializePatternField(value, stringType) { + if (value instanceof RegExp) { + return { + type: 'regex', + source: value.source, + flags: value.flags + }; + } + return { + type: stringType, + value + }; + } + turbopack.ignoreIssue = turbopack.ignoreIssue.map((rule)=>({ + path: serializePatternField(rule.path, 'glob'), + title: rule.title != null ? serializePatternField(rule.title, 'string') : undefined, + description: rule.description != null ? serializePatternField(rule.description, 'string') : undefined + })); + } + nextConfigSerializable.turbopack = turbopack; + } + return JSON.stringify(nextConfigSerializable, null, 2); + } + // converts regexes to a `RegexComponents` object so that it can be JSON-serialized when passed to + // Turbopack + function serializeRuleCondition(cond) { + function regexComponents(regex) { + return { + source: regex.source, + flags: regex.flags + }; + } + if (typeof cond === 'string') { + return cond; + } else if ('all' in cond) { + return { + ...cond, + all: cond.all.map(serializeRuleCondition) + }; + } else if ('any' in cond) { + return { + ...cond, + any: cond.any.map(serializeRuleCondition) + }; + } else if ('not' in cond) { + return { + ...cond, + not: serializeRuleCondition(cond.not) + }; + } else { + return { + ...cond, + path: cond.path == null ? undefined : cond.path instanceof RegExp ? { + type: 'regex', + value: regexComponents(cond.path) + } : { + type: 'glob', + value: cond.path + }, + content: cond.content && regexComponents(cond.content), + query: cond.query == null ? undefined : cond.query instanceof RegExp ? { + type: 'regex', + value: regexComponents(cond.query) + } : { + type: 'constant', + value: cond.query + }, + contentType: cond.contentType == null ? undefined : cond.contentType instanceof RegExp ? { + type: 'regex', + value: regexComponents(cond.contentType) + } : { + type: 'glob', + value: cond.contentType + } + }; + } + } + // Note: Returns an updated `turbopackRules` with serialized conditions. Does not mutate in-place. + function serializeTurbopackRules(turbopackRules) { + const serializedRules = {}; + for (const [glob, rule] of Object.entries(turbopackRules)){ + if (Array.isArray(rule)) { + serializedRules[glob] = rule.map((item)=>{ + if (typeof item !== 'string' && ('loaders' in item || 'type' in item || 'condition' in item)) { + return serializeConfigItem(item, glob); + } else { + checkLoaderItem(item, glob); + return item; + } + }); + } else { + serializedRules[glob] = serializeConfigItem(rule, glob); + } + } + return serializedRules; + function serializeConfigItem(rule, glob) { + if (!rule) return rule; + if (rule.loaders) { + for (const item of rule.loaders){ + checkLoaderItem(item, glob); + } + } + let serializedRule = rule; + if (rule.condition != null) { + serializedRule = { + ...rule, + condition: serializeRuleCondition(rule.condition) + }; + } + return serializedRule; + } + function checkLoaderItem(loaderItem, glob) { + if (typeof loaderItem !== 'string' && !require('util').isDeepStrictEqual(loaderItem, JSON.parse(JSON.stringify(loaderItem)))) { + throw Object.defineProperty(new Error(`loader ${loaderItem.loader} for match "${glob}" does not have serializable options. ` + 'Ensure that options passed are plain JavaScript objects and values.'), "__NEXT_ERROR_CODE", { + value: "E491", + enumerable: false, + configurable: true + }); + } + } + } + function napiEntrypointsToRawEntrypoints(entrypoints) { + const routes = new Map(); + for (const { pathname, ...nativeRoute } of entrypoints.routes){ + let route; + const routeType = nativeRoute.type; + switch(routeType){ + case 'page': + route = { + type: 'page', + htmlEndpoint: new EndpointImpl(nativeRoute.htmlEndpoint), + dataEndpoint: new EndpointImpl(nativeRoute.dataEndpoint) + }; + break; + case 'page-api': + route = { + type: 'page-api', + endpoint: new EndpointImpl(nativeRoute.endpoint) + }; + break; + case 'app-page': + route = { + type: 'app-page', + pages: nativeRoute.pages.map((page)=>({ + originalName: page.originalName, + htmlEndpoint: new EndpointImpl(page.htmlEndpoint), + rscEndpoint: new EndpointImpl(page.rscEndpoint) + })) + }; + break; + case 'app-route': + route = { + type: 'app-route', + originalName: nativeRoute.originalName, + endpoint: new EndpointImpl(nativeRoute.endpoint) + }; + break; + case 'conflict': + route = { + type: 'conflict' + }; + break; + default: + { + const _exhaustiveCheck = routeType; + invariant(nativeRoute, ()=>`Unknown route type: ${_exhaustiveCheck}`); + } + } + routes.set(pathname, route); + } + const napiMiddlewareToMiddleware = (middleware)=>({ + endpoint: new EndpointImpl(middleware.endpoint), + isProxy: middleware.isProxy + }); + const middleware = entrypoints.middleware ? napiMiddlewareToMiddleware(entrypoints.middleware) : undefined; + const napiInstrumentationToInstrumentation = (instrumentation)=>({ + nodeJs: new EndpointImpl(instrumentation.nodeJs), + edge: new EndpointImpl(instrumentation.edge) + }); + const instrumentation = entrypoints.instrumentation ? napiInstrumentationToInstrumentation(entrypoints.instrumentation) : undefined; + return { + routes, + middleware, + instrumentation, + pagesDocumentEndpoint: new EndpointImpl(entrypoints.pagesDocumentEndpoint), + pagesAppEndpoint: new EndpointImpl(entrypoints.pagesAppEndpoint), + pagesErrorEndpoint: new EndpointImpl(entrypoints.pagesErrorEndpoint), + issues: entrypoints.issues, + diagnostics: entrypoints.diagnostics + }; + } + return async function createProject(options, turboEngineOptions, callbacks) { + return new ProjectImpl(await binding.projectNew(await rustifyProjectOptions(options), turboEngineOptions || {}, { + throwTurbopackInternalError: require('../../shared/lib/turbopack/internal-error').throwTurbopackInternalError, + onBeforeDeferredEntries: callbacks == null ? void 0 : callbacks.onBeforeDeferredEntries + })); + }; +} +// helper for loadWasm +async function loadWasmRawBindings(importPath = '') { + let attempts = []; + // Used by `run-tests` to force use of a locally-built wasm binary. This environment variable is + // unstable and subject to change. + const testWasmDir = process.env.NEXT_TEST_WASM_DIR; + if (testWasmDir) { + // assume these are node.js bindings and don't need a call to `.default()` + const rawBindings = await import((0, _url.pathToFileURL)(_path.default.join(testWasmDir, 'wasm.js')).toString()); + infoLog(`next-swc build: wasm build ${testWasmDir}`); + return rawBindings; + } else { + for (let pkg of [ + '@next/swc-wasm-nodejs', + '@next/swc-wasm-web' + ]){ + try { + let pkgPath = pkg; + if (importPath) { + // the import path must be exact when not in node_modules + pkgPath = _path.default.join(importPath, pkg, 'wasm.js'); + } + const importedRawBindings = await import((0, _url.pathToFileURL)(pkgPath).toString()); + let rawBindings; + if (pkg === '@next/swc-wasm-web') { + // https://rustwasm.github.io/docs/wasm-bindgen/examples/without-a-bundler.html + // `default` must be called to initialize the module + rawBindings = await importedRawBindings.default(); + } else { + rawBindings = importedRawBindings; + } + infoLog(`next-swc build: wasm build ${pkg}`); + return rawBindings; + } catch (e) { + // Only log attempts for loading wasm when loading as fallback + if (importPath) { + if ((e == null ? void 0 : e.code) === 'ERR_MODULE_NOT_FOUND') { + attempts.push(`Attempted to load ${pkg}, but it was not installed`); + } else { + attempts.push(`Attempted to load ${pkg}, but an error occurred: ${e.message ?? e}`); + } + } + } + } + } + throw attempts; +} +// helper for tryLoadWasmWithFallback / loadBindings. +async function loadWasm(importPath = '') { + const rawBindings = await loadWasmRawBindings(importPath); + function removeUndefined(obj) { + // serde-wasm-bindgen expect that `undefined` values map to `()` in rust, but we want to treat + // those fields as non-existent, so remove them before passing them to rust. + // + // The native (non-wasm) bindings use `JSON.stringify`, which strips undefined values. + if (typeof obj !== 'object' || obj === null) { + return obj; + } + if (Array.isArray(obj)) { + return obj.map(removeUndefined); + } + const newObj = {}; + for (const [k, v] of Object.entries(obj)){ + if (typeof v !== 'undefined') { + newObj[k] = removeUndefined(v); + } + } + return newObj; + } + // Note wasm binary does not support async intefaces yet, all async + // interface coereces to sync interfaces. + let wasmBindings = { + css: { + lightning: { + transform: function(_options) { + throw Object.defineProperty(new Error('`css.lightning.transform` is not supported by the wasm bindings.'), "__NEXT_ERROR_CODE", { + value: "E330", + enumerable: false, + configurable: true + }); + }, + transformStyleAttr: function(_options) { + throw Object.defineProperty(new Error('`css.lightning.transformStyleAttr` is not supported by the wasm bindings.'), "__NEXT_ERROR_CODE", { + value: "E324", + enumerable: false, + configurable: true + }); + }, + featureNamesToMask: function(_names) { + throw Object.defineProperty(new Error('`css.lightning.featureNamesToMask` is not supported by the wasm bindings.'), "__NEXT_ERROR_CODE", { + value: "E1090", + enumerable: false, + configurable: true + }); + } + } + }, + isWasm: true, + transform (src, options) { + return rawBindings.transform(src.toString(), removeUndefined(options)); + }, + transformSync (src, options) { + return rawBindings.transformSync(src.toString(), removeUndefined(options)); + }, + minify (src, options) { + return rawBindings.minify(src.toString(), removeUndefined(options)); + }, + minifySync (src, options) { + return rawBindings.minifySync(src.toString(), removeUndefined(options)); + }, + parse (src, options) { + return rawBindings.parse(src.toString(), removeUndefined(options)); + }, + getTargetTriple () { + return undefined; + }, + turbo: { + createProject (_options, _turboEngineOptions, _callbacks) { + throw Object.defineProperty(new Error(`Turbopack is not supported on this platform (${PlatformName}/${ArchName}) because native bindings are not available. ` + `Only WebAssembly (WASM) bindings were loaded, and Turbopack requires native bindings. ` + `Use the --webpack flag instead.`), "__NEXT_ERROR_CODE", { + value: "E1052", + enumerable: false, + configurable: true + }); + }, + startTurbopackTraceServer (_traceFilePath, _port) { + throw Object.defineProperty(new Error(`Turbopack trace server is not supported on this platform (${PlatformName}/${ArchName}) because native bindings are not available. ` + `Only WebAssembly (WASM) bindings were loaded, and Turbopack requires native bindings.`), "__NEXT_ERROR_CODE", { + value: "E1051", + enumerable: false, + configurable: true + }); + } + }, + mdx: { + compile (src, options) { + return rawBindings.mdxCompile(src, removeUndefined(getMdxOptions(options))); + }, + compileSync (src, options) { + return rawBindings.mdxCompileSync(src, removeUndefined(getMdxOptions(options))); + } + }, + reactCompiler: { + isReactCompilerRequired (_filename) { + return Promise.resolve(true); + } + }, + rspack: { + getModuleNamedExports (_resourcePath) { + throw Object.defineProperty(new Error('`rspack.getModuleNamedExports` is not supported by the wasm bindings.'), "__NEXT_ERROR_CODE", { + value: "E709", + enumerable: false, + configurable: true + }); + }, + warnForEdgeRuntime (_source, _isProduction) { + throw Object.defineProperty(new Error('`rspack.warnForEdgeRuntime` is not supported by the wasm bindings.'), "__NEXT_ERROR_CODE", { + value: "E712", + enumerable: false, + configurable: true + }); + } + }, + expandNextJsTemplate (content, templatePath, nextPackageDirPath, replacements, injections, imports) { + return rawBindings.expandNextJsTemplate(content, templatePath, nextPackageDirPath, replacements, injections, imports); + }, + codeFrameColumns (source, location, options) { + return rawBindings.codeFrameColumns(Buffer.from(source), location, options); + }, + lockfileTryAcquire (_filePath, _content) { + throw Object.defineProperty(new Error('`lockfileTryAcquire` is not supported by the wasm bindings.'), "__NEXT_ERROR_CODE", { + value: "E855", + enumerable: false, + configurable: true + }); + }, + lockfileTryAcquireSync (_filePath, _content) { + throw Object.defineProperty(new Error('`lockfileTryAcquireSync` is not supported by the wasm bindings.'), "__NEXT_ERROR_CODE", { + value: "E856", + enumerable: false, + configurable: true + }); + }, + lockfileUnlock (_lockfile) { + throw Object.defineProperty(new Error('`lockfileUnlock` is not supported by the wasm bindings.'), "__NEXT_ERROR_CODE", { + value: "E857", + enumerable: false, + configurable: true + }); + }, + lockfileUnlockSync (_lockfile) { + throw Object.defineProperty(new Error('`lockfileUnlockSync` is not supported by the wasm bindings.'), "__NEXT_ERROR_CODE", { + value: "E858", + enumerable: false, + configurable: true + }); + } + }; + return wasmBindings; +} +/** + * Loads the native (non-wasm) bindings. Prefer `loadBindings` over this API, as that includes a + * wasm fallback. + */ function loadNative(importPath) { + if (loadedBindings) { + return loadedBindings; + } + if (process.env.NEXT_TEST_WASM) { + throw Object.defineProperty(new Error('cannot run loadNative when `NEXT_TEST_WASM` is set'), "__NEXT_ERROR_CODE", { + value: "E714", + enumerable: false, + configurable: true + }); + } + const customBindingsPath = !!__INTERNAL_CUSTOM_TURBOPACK_BINDINGS ? require.resolve(__INTERNAL_CUSTOM_TURBOPACK_BINDINGS) : null; + const customBindings = customBindingsPath != null ? require(customBindingsPath) : null; + let bindings = customBindings; + let bindingsPath = customBindingsPath; + // callers expect that if loadNative throws, it's an array of strings. + let attempts = []; + const NEXT_TEST_NATIVE_DIR = process.env.NEXT_TEST_NATIVE_DIR; + for (const triple of triples){ + if (NEXT_TEST_NATIVE_DIR) { + try { + const bindingForTest = `${NEXT_TEST_NATIVE_DIR}/next-swc.${triple.platformArchABI}.node`; + // Use the binary directly to skip `pnpm pack` for testing as it's slow because of the large native binary. + bindingsPath = require.resolve(bindingForTest); + bindings = require(bindingsPath); + infoLog('next-swc build: local built @next/swc from NEXT_TEST_NATIVE_DIR'); + break; + } catch (e) { + attempts.push(`Failed to load triple ${triple.platformArchABI}: ${e.message ?? e}`); + } + } else if (process.env.NEXT_TEST_NATIVE_IGNORE_LOCAL_INSTALL !== 'true') { + try { + const normalBinding = `@next/swc/native/next-swc.${triple.platformArchABI}.node`; + bindings = require(normalBinding); + bindingsPath = require.resolve(normalBinding); + infoLog('next-swc build: local built @next/swc'); + break; + } catch (e) {} + } + } + if (!bindings) { + if (NEXT_TEST_NATIVE_DIR) { + throw attempts; + } + for (const triple of triples){ + let pkg = importPath ? _path.default.join(importPath, `@next/swc-${triple.platformArchABI}`, `next-swc.${triple.platformArchABI}.node`) : `@next/swc-${triple.platformArchABI}`; + try { + bindings = require(pkg); + bindingsPath = require.resolve(pkg); + if (!importPath) { + checkVersionMismatch(require(`${pkg}/package.json`)); + } + break; + } catch (e) { + if ((e == null ? void 0 : e.code) === 'MODULE_NOT_FOUND') { + attempts.push(`Attempted to load ${pkg}, but it was not installed`); + } else { + attempts.push(`Attempted to load ${pkg}, but an error occurred: ${e.message ?? e}`); + } + lastNativeBindingsLoadErrorCode = (e == null ? void 0 : e.code) ?? 'unknown'; + } + } + } + if (bindings) { + loadedBindings = { + isWasm: false, + transform (src, options) { + var _options_jsc; + const isModule = typeof src !== 'undefined' && typeof src !== 'string' && !Buffer.isBuffer(src); + options = options || {}; + if (options == null ? void 0 : (_options_jsc = options.jsc) == null ? void 0 : _options_jsc.parser) { + options.jsc.parser.syntax = options.jsc.parser.syntax ?? 'ecmascript'; + } + return bindings.transform(isModule ? JSON.stringify(src) : src, isModule, toBuffer(options)); + }, + transformSync (src, options) { + var _options_jsc; + if (typeof src === 'undefined') { + throw Object.defineProperty(new Error("transformSync doesn't implement reading the file from filesystem"), "__NEXT_ERROR_CODE", { + value: "E292", + enumerable: false, + configurable: true + }); + } else if (Buffer.isBuffer(src)) { + throw Object.defineProperty(new Error("transformSync doesn't implement taking the source code as Buffer"), "__NEXT_ERROR_CODE", { + value: "E387", + enumerable: false, + configurable: true + }); + } + const isModule = typeof src !== 'string'; + options = options || {}; + if (options == null ? void 0 : (_options_jsc = options.jsc) == null ? void 0 : _options_jsc.parser) { + options.jsc.parser.syntax = options.jsc.parser.syntax ?? 'ecmascript'; + } + return bindings.transformSync(isModule ? JSON.stringify(src) : src, isModule, toBuffer(options)); + }, + minify (src, options) { + return bindings.minify(Buffer.from(src), toBuffer(options ?? {})); + }, + minifySync (src, options) { + return bindings.minifySync(Buffer.from(src), toBuffer(options ?? {})); + }, + parse (src, options) { + return bindings.parse(src, toBuffer(options ?? {})); + }, + getTargetTriple: bindings.getTargetTriple, + initCustomTraceSubscriber: bindings.initCustomTraceSubscriber, + teardownTraceSubscriber: bindings.teardownTraceSubscriber, + turbo: { + createProject: bindingToApi(customBindings ?? bindings, customBindingsPath ?? bindingsPath, false), + startTurbopackTraceServer (traceFilePath, port) { + _log.warn(`Turbopack trace server started. View trace at https://trace.nextjs.org${port != null ? `?port=${port}` : ''}`); + (customBindings ?? bindings).startTurbopackTraceServer(traceFilePath, port); + } + }, + mdx: { + compile (src, options) { + return bindings.mdxCompile(src, toBuffer(getMdxOptions(options))); + }, + compileSync (src, options) { + bindings.mdxCompileSync(src, toBuffer(getMdxOptions(options))); + } + }, + css: { + lightning: { + transform (transformOptions) { + return bindings.lightningCssTransform(transformOptions); + }, + transformStyleAttr (transformAttrOptions) { + return bindings.lightningCssTransformStyleAttribute(transformAttrOptions); + }, + featureNamesToMask (names) { + return bindings.lightningcssFeatureNamesToMaskNapi(names); + } + } + }, + reactCompiler: { + isReactCompilerRequired: (filename)=>{ + return bindings.isReactCompilerRequired(filename); + } + }, + rspack: { + getModuleNamedExports: function(resourcePath) { + return bindings.getModuleNamedExports(resourcePath); + }, + warnForEdgeRuntime: function(source, isProduction) { + return bindings.warnForEdgeRuntime(source, isProduction); + } + }, + expandNextJsTemplate (content, templatePath, nextPackageDirPath, replacements, injections, imports) { + return bindings.expandNextJsTemplate(content, templatePath, nextPackageDirPath, replacements, injections, imports); + }, + lockfileTryAcquire (filePath, content) { + return bindings.lockfileTryAcquire(filePath, content); + }, + lockfileTryAcquireSync (filePath, content) { + return bindings.lockfileTryAcquireSync(filePath, content); + }, + lockfileUnlock (lockfile) { + return bindings.lockfileUnlock(lockfile); + }, + lockfileUnlockSync (lockfile) { + return bindings.lockfileUnlockSync(lockfile); + }, + codeFrameColumns (source, location, options) { + // napi-rs translates Option::None as null but wasm-bindgen translates it to `null` + // convert here for consistency + return bindings.codeFrameColumns(source, location, options) ?? undefined; + } + }; + return loadedBindings; + } + throw attempts; +} +/// Build a mdx options object contains default values that +/// can be parsed with serde_wasm_bindgen. +function getMdxOptions(options = {}) { + return { + ...options, + development: options.development ?? false, + jsx: options.jsx ?? false, + mdxType: options.mdxType ?? 'commonMark' + }; +} +function toBuffer(t) { + return Buffer.from(JSON.stringify(t)); +} +async function transform(src, options) { + let bindings = getBindingsSync(); + return bindings.transform(src, options); +} +function transformSync(src, options) { + const bindings = loadBindingsSync(); + return bindings.transformSync(src, options); +} +function minify(src, options) { + const bindings = getBindingsSync(); + return bindings.minify(src, options); +} +function isReactCompilerRequired(filename) { + const bindings = getBindingsSync(); + return bindings.reactCompiler.isReactCompilerRequired(filename); +} +async function parse(src, options) { + const bindings = getBindingsSync(); + const parserOptions = require('./options').getParserOptions(options); + const parsed = await bindings.parse(src, parserOptions); + return JSON.parse(parsed); +} +function getBinaryMetadata() { + var _loadedBindings_getTargetTriple; + return { + target: loadedBindings == null ? void 0 : (_loadedBindings_getTargetTriple = loadedBindings.getTargetTriple) == null ? void 0 : _loadedBindings_getTargetTriple.call(loadedBindings) + }; +} +function initCustomTraceSubscriber(traceFileName) { + if (!swcTraceFlushGuard) { + var _getBindingsSync_initCustomTraceSubscriber, _getBindingsSync; + // Wasm binary doesn't support trace emission + swcTraceFlushGuard = (_getBindingsSync_initCustomTraceSubscriber = (_getBindingsSync = getBindingsSync()).initCustomTraceSubscriber) == null ? void 0 : _getBindingsSync_initCustomTraceSubscriber.call(_getBindingsSync, traceFileName); + } +} +function once(fn) { + let executed = false; + return function() { + if (!executed) { + executed = true; + fn(); + } + }; +} +const teardownTraceSubscriber = once(()=>{ + try { + if (swcTraceFlushGuard) { + var _getBindingsSync_teardownTraceSubscriber, _getBindingsSync; + (_getBindingsSync_teardownTraceSubscriber = (_getBindingsSync = getBindingsSync()).teardownTraceSubscriber) == null ? void 0 : _getBindingsSync_teardownTraceSubscriber.call(_getBindingsSync, swcTraceFlushGuard); + } + } catch (e) { + // Suppress exceptions, this fn allows to fail to load native bindings + } +}); +async function getModuleNamedExports(resourcePath) { + return getBindingsSync().rspack.getModuleNamedExports(resourcePath); +} +async function warnForEdgeRuntime(source, isProduction) { + return getBindingsSync().rspack.warnForEdgeRuntime(source, isProduction); +} + +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/build/swc/install-bindings.js b/build/node_modules/next/dist/build/swc/install-bindings.js new file mode 100644 index 0000000..f987877 --- /dev/null +++ b/build/node_modules/next/dist/build/swc/install-bindings.js @@ -0,0 +1,30 @@ +/** + * This module provides a way to install SWC bindings without eagerly loading the entire swc/index module. + * + * The swc/index module can transitively load other modules (like webpack-config) that import React, + * and React's entry point checks process.env.NODE_ENV at require time to decide whether to load + * the development or production bundle. By deferring the require of swc/index until this function + * is called, we ensure NODE_ENV is set before React is loaded. + */ /** + * Loads and caches the native bindings. This is idempotent and should be called early so bindings + * can be accessed synchronously later. + * + * @param useWasmBinary - Whether to use WASM bindings instead of native bindings + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "installBindings", { + enumerable: true, + get: function() { + return installBindings; + } +}); +async function installBindings(useWasmBinary = false) { + // Lazy require to avoid loading swc/index (and transitively webpack-config/React) + // before NODE_ENV is set + const { loadBindings } = require('./index'); + await loadBindings(useWasmBinary); +} + +//# sourceMappingURL=install-bindings.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/build/swc/jest-transformer.js b/build/node_modules/next/dist/build/swc/jest-transformer.js new file mode 100644 index 0000000..b98ce33 --- /dev/null +++ b/build/node_modules/next/dist/build/swc/jest-transformer.js @@ -0,0 +1,76 @@ +/* +Copyright (c) 2021 The swc Project Developers + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +*/ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +const _vm = /*#__PURE__*/ _interop_require_default(require("vm")); +const _index = require("./index"); +const _options = require("./options"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +// Jest use the `vm` [Module API](https://nodejs.org/api/vm.html#vm_class_vm_module) for ESM. +// see https://github.com/facebook/jest/issues/9430 +const isSupportEsm = 'Module' in _vm.default; +function getJestConfig(jestConfig) { + return 'config' in jestConfig ? jestConfig.config : jestConfig; +} +function isEsm(isEsmProject, filename, jestConfig) { + var _jestConfig_extensionsToTreatAsEsm; + return /\.jsx?$/.test(filename) && isEsmProject || ((_jestConfig_extensionsToTreatAsEsm = jestConfig.extensionsToTreatAsEsm) == null ? void 0 : _jestConfig_extensionsToTreatAsEsm.some((ext)=>filename.endsWith(ext))); +} +const createTransformer = (inputOptions)=>({ + process (src, filename, jestOptions) { + const jestConfig = getJestConfig(jestOptions); + const swcTransformOpts = (0, _options.getJestSWCOptions)({ + isServer: jestConfig.testEnvironment === 'node' || jestConfig.testEnvironment.includes('jest-environment-node'), + filename, + jsConfig: inputOptions == null ? void 0 : inputOptions.jsConfig, + resolvedBaseUrl: inputOptions == null ? void 0 : inputOptions.resolvedBaseUrl, + pagesDir: inputOptions == null ? void 0 : inputOptions.pagesDir, + serverComponents: inputOptions == null ? void 0 : inputOptions.serverComponents, + modularizeImports: inputOptions == null ? void 0 : inputOptions.modularizeImports, + swcPlugins: inputOptions == null ? void 0 : inputOptions.swcPlugins, + compilerOptions: inputOptions == null ? void 0 : inputOptions.compilerOptions, + imageConfig: inputOptions == null ? void 0 : inputOptions.imageConfig, + serverReferenceHashSalt: '', + esm: isSupportEsm && isEsm(Boolean(inputOptions == null ? void 0 : inputOptions.isEsmProject), filename, jestConfig) + }); + return (0, _index.transformSync)(src, { + ...swcTransformOpts, + filename + }); + } + }); +module.exports = { + createTransformer +}; + +//# sourceMappingURL=jest-transformer.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/build/swc/loaderWorkerPool.js b/build/node_modules/next/dist/build/swc/loaderWorkerPool.js new file mode 100644 index 0000000..4ce0984 --- /dev/null +++ b/build/node_modules/next/dist/build/swc/loaderWorkerPool.js @@ -0,0 +1,40 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "runLoaderWorkerPool", { + enumerable: true, + get: function() { + return runLoaderWorkerPool; + } +}); +const _worker_threads = require("worker_threads"); +const loaderWorkers = {}; +function getPoolId(cwd, filename) { + return `${cwd}:${filename}`; +} +async function runLoaderWorkerPool(bindings, bindingPath) { + bindings.registerWorkerScheduler((creation)=>{ + const { options: { filename, cwd } } = creation; + const poolId = getPoolId(cwd, filename); + const worker = new _worker_threads.Worker(/* turbopackIgnore: true*/ filename, { + workerData: { + bindingPath, + cwd + } + }); + // This will cause handing when run in jest worker, but not as a first level thread of nodejs thread + // worker.unref() + const workers = loaderWorkers[poolId] || (loaderWorkers[poolId] = new Map()); + workers.set(worker.threadId, worker); + }, (termination)=>{ + var _workers_get; + const { options: { filename, cwd }, workerId } = termination; + const poolId = getPoolId(cwd, filename); + const workers = loaderWorkers[poolId]; + (_workers_get = workers.get(workerId)) == null ? void 0 : _workers_get.terminate(); + workers.delete(workerId); + }); +} + +//# sourceMappingURL=loaderWorkerPool.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/build/swc/options.js b/build/node_modules/next/dist/build/swc/options.js new file mode 100644 index 0000000..8da2935 --- /dev/null +++ b/build/node_modules/next/dist/build/swc/options.js @@ -0,0 +1,403 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getJestSWCOptions: null, + getLoaderSWCOptions: null, + getParserOptions: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getJestSWCOptions: function() { + return getJestSWCOptions; + }, + getLoaderSWCOptions: function() { + return getLoaderSWCOptions; + }, + getParserOptions: function() { + return getParserOptions; + } +}); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _constants = require("../../lib/constants"); +const _utils = require("../utils"); +const _escaperegexp = require("../../shared/lib/escape-regexp"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const nextDirname = _path.default.dirname(require.resolve('next/package.json')); +const nextDistPath = new RegExp(`${(0, _escaperegexp.escapeStringRegexp)(nextDirname)}[\\/]dist[\\/](shared[\\/]lib|client|pages)`); +const nodeModulesPath = /[\\/]node_modules[\\/]/; +const regeneratorRuntimePath = require.resolve('next/dist/compiled/regenerator-runtime'); +function isTypeScriptFile(filename) { + return filename.endsWith('.ts') || filename.endsWith('.tsx'); +} +function isCommonJSFile(filename) { + return filename.endsWith('.cjs'); +} +// Ensure Next.js internals and .cjs files are output as CJS modules, +// By default all modules are output as ESM or will treated as CJS if next-swc/auto-cjs plugin detects file is CJS. +function shouldOutputCommonJs(filename) { + return isCommonJSFile(filename) || nextDistPath.test(filename); +} +function getParserOptions({ filename, jsConfig, ...rest }) { + var _jsConfig_compilerOptions; + const isTSFile = filename.endsWith('.ts'); + const hasTsSyntax = isTypeScriptFile(filename); + const enableDecorators = Boolean(jsConfig == null ? void 0 : (_jsConfig_compilerOptions = jsConfig.compilerOptions) == null ? void 0 : _jsConfig_compilerOptions.experimentalDecorators); + return { + ...rest, + syntax: hasTsSyntax ? 'typescript' : 'ecmascript', + dynamicImport: true, + decorators: enableDecorators, + // Exclude regular TypeScript files from React transformation to prevent e.g. generic parameters and angle-bracket type assertion from being interpreted as JSX tags. + [hasTsSyntax ? 'tsx' : 'jsx']: !isTSFile, + importAssertions: true + }; +} +function getBaseSWCOptions({ filename, jest, development, hasReactRefresh, globalWindow, esm, modularizeImports, swcPlugins, compilerOptions, resolvedBaseUrl, jsConfig, supportedBrowsers, swcCacheDir, serverComponents, serverReferenceHashSalt, bundleLayer, isCacheComponents, cacheHandlers, useCacheEnabled, taintEnabled, trackDynamicImports, pageExtensions }) { + var _jsConfig_compilerOptions, _jsConfig_compilerOptions1, _jsConfig_compilerOptions2, _jsConfig_compilerOptions3, _jsConfig_compilerOptions4, _jsConfig_experimental; + const isReactServerLayer = (0, _utils.shouldUseReactServerCondition)(bundleLayer); + const isAppRouterPagesLayer = (0, _utils.isWebpackAppPagesLayer)(bundleLayer); + const parserConfig = getParserOptions({ + filename, + jsConfig + }); + const paths = jsConfig == null ? void 0 : (_jsConfig_compilerOptions = jsConfig.compilerOptions) == null ? void 0 : _jsConfig_compilerOptions.paths; + const enableDecorators = Boolean(jsConfig == null ? void 0 : (_jsConfig_compilerOptions1 = jsConfig.compilerOptions) == null ? void 0 : _jsConfig_compilerOptions1.experimentalDecorators); + const emitDecoratorMetadata = Boolean(jsConfig == null ? void 0 : (_jsConfig_compilerOptions2 = jsConfig.compilerOptions) == null ? void 0 : _jsConfig_compilerOptions2.emitDecoratorMetadata); + const useDefineForClassFields = Boolean(jsConfig == null ? void 0 : (_jsConfig_compilerOptions3 = jsConfig.compilerOptions) == null ? void 0 : _jsConfig_compilerOptions3.useDefineForClassFields); + const plugins = (swcPlugins ?? []).filter(Array.isArray).map(([name, options])=>[ + require.resolve(name), + options + ]); + return { + jsc: { + ...resolvedBaseUrl && paths ? { + baseUrl: resolvedBaseUrl.baseUrl, + paths + } : {}, + externalHelpers: !process.versions.pnp && !jest, + parser: parserConfig, + experimental: { + keepImportAttributes: true, + emitAssertForImportAttributes: true, + plugins, + cacheRoot: swcCacheDir + }, + transform: { + // Enables https://github.com/swc-project/swc/blob/0359deb4841be743d73db4536d4a22ac797d7f65/crates/swc_ecma_ext_transforms/src/jest.rs + ...jest ? { + hidden: { + jest: true + } + } : {}, + legacyDecorator: enableDecorators, + decoratorMetadata: emitDecoratorMetadata, + useDefineForClassFields: useDefineForClassFields, + react: { + importSource: (jsConfig == null ? void 0 : (_jsConfig_compilerOptions4 = jsConfig.compilerOptions) == null ? void 0 : _jsConfig_compilerOptions4.jsxImportSource) ?? ((compilerOptions == null ? void 0 : compilerOptions.emotion) && !isReactServerLayer ? '@emotion/react' : 'react'), + runtime: 'automatic', + pragmaFrag: 'React.Fragment', + throwIfNamespace: true, + development: !!development, + useBuiltins: true, + refresh: !!hasReactRefresh + }, + optimizer: { + simplify: false, + globals: jest ? undefined : { + typeofs: { + window: globalWindow ? 'object' : 'undefined' + }, + envs: { + NODE_ENV: development ? '"development"' : '"production"' + } + } + }, + regenerator: { + importPath: regeneratorRuntimePath + } + } + }, + sourceMaps: jest ? 'inline' : undefined, + removeConsole: compilerOptions == null ? void 0 : compilerOptions.removeConsole, + // disable "reactRemoveProperties" when "jest" is true + // otherwise the setting from next.config.js will be used + reactRemoveProperties: jest ? false : compilerOptions == null ? void 0 : compilerOptions.reactRemoveProperties, + // Map the k-v map to an array of pairs. + modularizeImports: modularizeImports ? Object.fromEntries(Object.entries(modularizeImports).map(([mod, config])=>[ + mod, + { + ...config, + transform: typeof config.transform === 'string' ? config.transform : Object.entries(config.transform).map(([key, value])=>[ + key, + value + ]) + } + ])) : undefined, + relay: compilerOptions == null ? void 0 : compilerOptions.relay, + // Always transform styled-jsx and error when `client-only` condition is triggered + styledJsx: (compilerOptions == null ? void 0 : compilerOptions.styledJsx) ?? { + useLightningcss: (jsConfig == null ? void 0 : (_jsConfig_experimental = jsConfig.experimental) == null ? void 0 : _jsConfig_experimental.useLightningcss) ?? false + }, + // Disable css-in-js libs (without client-only integration) transform on server layer for server components + ...!isReactServerLayer && { + emotion: getEmotionOptions(compilerOptions == null ? void 0 : compilerOptions.emotion, development), + styledComponents: getStyledComponentsOptions(compilerOptions == null ? void 0 : compilerOptions.styledComponents, development) + }, + serverComponents: serverComponents && !jest ? { + isReactServerLayer, + cacheComponentsEnabled: isCacheComponents, + useCacheEnabled, + taintEnabled, + pageExtensions: pageExtensions || [] + } : undefined, + serverActions: isAppRouterPagesLayer && !jest ? { + isReactServerLayer, + isDevelopment: development, + useCacheEnabled, + hashSalt: serverReferenceHashSalt, + cacheKinds: [ + 'default', + 'remote', + 'private' + ].concat(cacheHandlers ? Object.keys(cacheHandlers) : []) + } : undefined, + // For app router we prefer to bundle ESM, + // On server side of pages router we prefer CJS. + preferEsm: esm, + lintCodemodComments: true, + trackDynamicImports: trackDynamicImports, + debugFunctionName: development, + ...supportedBrowsers && supportedBrowsers.length > 0 ? { + cssEnv: { + targets: supportedBrowsers + } + } : {} + }; +} +function getStyledComponentsOptions(styledComponentsConfig, development) { + if (!styledComponentsConfig) { + return null; + } else if (typeof styledComponentsConfig === 'object') { + return { + ...styledComponentsConfig, + displayName: styledComponentsConfig.displayName ?? Boolean(development) + }; + } else { + return { + displayName: Boolean(development) + }; + } +} +function getEmotionOptions(emotionConfig, development) { + if (!emotionConfig) { + return null; + } + let autoLabel = !!development; + if (typeof emotionConfig === 'object' && emotionConfig.autoLabel) { + switch(emotionConfig.autoLabel){ + case 'never': + autoLabel = false; + break; + case 'always': + autoLabel = true; + break; + case 'dev-only': + break; + default: + emotionConfig.autoLabel; + } + } + return { + enabled: true, + autoLabel, + sourcemap: development, + ...typeof emotionConfig === 'object' && { + importMap: emotionConfig.importMap, + labelFormat: emotionConfig.labelFormat, + sourcemap: development && emotionConfig.sourceMap + } + }; +} +function getJestSWCOptions({ isServer, filename, esm, modularizeImports, swcPlugins, compilerOptions, jsConfig, resolvedBaseUrl, pagesDir, imageConfig, serverReferenceHashSalt }) { + let baseOptions = getBaseSWCOptions({ + filename, + jest: true, + development: false, + hasReactRefresh: false, + globalWindow: !isServer, + modularizeImports, + swcPlugins, + compilerOptions, + jsConfig, + resolvedBaseUrl, + supportedBrowsers: undefined, + esm, + // Don't apply server layer transformations for Jest + // Disable server / client graph assertions for Jest + bundleLayer: undefined, + serverComponents: false, + serverReferenceHashSalt + }); + // In production, webpack DefinePlugin replaces process.env.__NEXT_IMAGE_OPTS + // with an object literal at compile time. Emulate that here by enabling + // SWC's optimizer globals.envs so the same compile-time replacement happens + // during Jest transforms. + if (imageConfig) { + var _baseOptions_jsc_transform_optimizer_globals; + baseOptions.jsc.transform.optimizer.globals = { + envs: { + ...(_baseOptions_jsc_transform_optimizer_globals = baseOptions.jsc.transform.optimizer.globals) == null ? void 0 : _baseOptions_jsc_transform_optimizer_globals.envs, + __NEXT_IMAGE_OPTS: JSON.stringify(imageConfig) + } + }; + } + const useCjsModules = shouldOutputCommonJs(filename); + return { + ...baseOptions, + env: { + targets: { + // Targets the current version of Node.js + node: process.versions.node + } + }, + module: { + type: esm && !useCjsModules ? 'es6' : 'commonjs' + }, + disableNextSsg: true, + pagesDir + }; +} +function getLoaderSWCOptions({ // This is not passed yet as "paths" resolving is handled by webpack currently. +// resolvedBaseUrl, +filename, development, isServer, pagesDir, appDir, isPageFile, isCacheComponents, hasReactRefresh, modularizeImports, optimizeServerReact, optimizePackageImports, swcPlugins, compilerOptions, jsConfig, supportedBrowsers, swcCacheDir, relativeFilePathFromRoot, serverComponents, serverReferenceHashSalt, bundleLayer, esm, cacheHandlers, useCacheEnabled, taintEnabled, trackDynamicImports, pageExtensions }) { + let baseOptions = getBaseSWCOptions({ + filename, + development, + globalWindow: !isServer, + hasReactRefresh, + modularizeImports, + swcPlugins, + compilerOptions, + jsConfig, + // resolvedBaseUrl, + supportedBrowsers, + swcCacheDir, + bundleLayer, + serverComponents, + serverReferenceHashSalt, + esm: !!esm, + isCacheComponents, + cacheHandlers, + useCacheEnabled, + taintEnabled, + trackDynamicImports, + pageExtensions + }); + baseOptions.fontLoaders = { + fontLoaders: [ + 'next/font/local', + 'next/font/google' + ], + relativeFilePathFromRoot + }; + baseOptions.cjsRequireOptimizer = { + packages: { + 'next/server': { + transforms: { + NextRequest: 'next/dist/server/web/spec-extension/request', + NextResponse: 'next/dist/server/web/spec-extension/response', + ImageResponse: 'next/dist/server/web/spec-extension/image-response', + userAgentFromString: 'next/dist/server/web/spec-extension/user-agent', + userAgent: 'next/dist/server/web/spec-extension/user-agent' + } + } + } + }; + if (optimizeServerReact && isServer && !development) { + baseOptions.optimizeServerReact = { + optimize_use_state: false + }; + } + // Modularize import optimization for barrel files + if (optimizePackageImports) { + baseOptions.autoModularizeImports = { + packages: optimizePackageImports + }; + } + const isNodeModules = nodeModulesPath.test(filename); + const isAppBrowserLayer = bundleLayer === _constants.WEBPACK_LAYERS.appPagesBrowser; + const moduleResolutionConfig = shouldOutputCommonJs(filename) ? { + module: { + type: 'commonjs' + } + } : {}; + let options; + if (isServer) { + options = { + ...baseOptions, + ...moduleResolutionConfig, + // Disables getStaticProps/getServerSideProps tree shaking on the server compilation for pages + disableNextSsg: true, + isDevelopment: development, + isServerCompiler: isServer, + pagesDir, + appDir, + preferEsm: !!esm, + isPageFile, + env: { + targets: { + // Targets the current version of Node.js + node: process.versions.node + } + } + }; + } else { + options = { + ...baseOptions, + ...moduleResolutionConfig, + disableNextSsg: !isPageFile, + isDevelopment: development, + isServerCompiler: isServer, + pagesDir, + appDir, + isPageFile, + ...supportedBrowsers && supportedBrowsers.length > 0 ? { + env: { + targets: supportedBrowsers + } + } : {} + }; + if (!options.env) { + // Matches default @babel/preset-env behavior + options.jsc.target = 'es5'; + } + } + // For node_modules in app browser layer, we don't need to do any server side transformation. + // Only keep server actions transform to discover server actions from client components. + if (isAppBrowserLayer && isNodeModules) { + var _options_jsc_transform_optimizer_globals; + options.disableNextSsg = true; + options.isPageFile = false; + options.optimizeServerReact = undefined; + options.cjsRequireOptimizer = undefined; + // Disable optimizer for node_modules in app browser layer, to avoid unnecessary replacement. + // e.g. typeof window could result differently in js worker or browser. + if (((_options_jsc_transform_optimizer_globals = options.jsc.transform.optimizer.globals) == null ? void 0 : _options_jsc_transform_optimizer_globals.typeofs) && !filename.includes(nextDirname)) { + delete options.jsc.transform.optimizer.globals.typeofs.window; + } + } + return options; +} + +//# sourceMappingURL=options.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/build/swc/types.js b/build/node_modules/next/dist/build/swc/types.js new file mode 100644 index 0000000..f89b9cc --- /dev/null +++ b/build/node_modules/next/dist/build/swc/types.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/build/utils.js b/build/node_modules/next/dist/build/utils.js new file mode 100644 index 0000000..82b6eb4 --- /dev/null +++ b/build/node_modules/next/dist/build/utils.js @@ -0,0 +1,1216 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + NestedMiddlewareError: null, + RSPACK_DEFAULT_LAYERS_REGEX: null, + collectMeta: null, + collectRoutesUsingEdgeRuntime: null, + copyTracedFiles: null, + detectConflictingPaths: null, + difference: null, + filterAndSortList: null, + getDefinedNamedExports: null, + getPossibleInstrumentationHookFilenames: null, + getPossibleMiddlewareFilenames: null, + getSupportedBrowsers: null, + hasCustomGetInitialProps: null, + isAppBuiltinPage: null, + isCustomErrorPage: null, + isInstrumentationHookFile: null, + isInstrumentationHookFilename: null, + isMiddlewareFile: null, + isMiddlewareFilename: null, + isPageStatic: null, + isProxyFile: null, + isReservedPage: null, + isWebpackAppPagesLayer: null, + isWebpackBundledLayer: null, + isWebpackClientOnlyLayer: null, + isWebpackDefaultLayer: null, + pageToRoute: null, + printCustomRoutes: null, + printTreeView: null, + reduceAppConfig: null, + shouldUseReactServerCondition: null, + unique: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + NestedMiddlewareError: function() { + return NestedMiddlewareError; + }, + RSPACK_DEFAULT_LAYERS_REGEX: function() { + return RSPACK_DEFAULT_LAYERS_REGEX; + }, + collectMeta: function() { + return collectMeta; + }, + collectRoutesUsingEdgeRuntime: function() { + return collectRoutesUsingEdgeRuntime; + }, + copyTracedFiles: function() { + return copyTracedFiles; + }, + detectConflictingPaths: function() { + return detectConflictingPaths; + }, + difference: function() { + return difference; + }, + filterAndSortList: function() { + return filterAndSortList; + }, + getDefinedNamedExports: function() { + return getDefinedNamedExports; + }, + getPossibleInstrumentationHookFilenames: function() { + return getPossibleInstrumentationHookFilenames; + }, + getPossibleMiddlewareFilenames: function() { + return getPossibleMiddlewareFilenames; + }, + getSupportedBrowsers: function() { + return _getsupportedbrowsers.getSupportedBrowsers; + }, + hasCustomGetInitialProps: function() { + return hasCustomGetInitialProps; + }, + isAppBuiltinPage: function() { + return isAppBuiltinPage; + }, + isCustomErrorPage: function() { + return isCustomErrorPage; + }, + isInstrumentationHookFile: function() { + return isInstrumentationHookFile; + }, + isInstrumentationHookFilename: function() { + return isInstrumentationHookFilename; + }, + isMiddlewareFile: function() { + return isMiddlewareFile; + }, + isMiddlewareFilename: function() { + return isMiddlewareFilename; + }, + isPageStatic: function() { + return isPageStatic; + }, + isProxyFile: function() { + return isProxyFile; + }, + isReservedPage: function() { + return isReservedPage; + }, + isWebpackAppPagesLayer: function() { + return isWebpackAppPagesLayer; + }, + isWebpackBundledLayer: function() { + return isWebpackBundledLayer; + }, + isWebpackClientOnlyLayer: function() { + return isWebpackClientOnlyLayer; + }, + isWebpackDefaultLayer: function() { + return isWebpackDefaultLayer; + }, + pageToRoute: function() { + return pageToRoute; + }, + printCustomRoutes: function() { + return printCustomRoutes; + }, + printTreeView: function() { + return printTreeView; + }, + reduceAppConfig: function() { + return reduceAppConfig; + }, + shouldUseReactServerCondition: function() { + return shouldUseReactServerCondition; + }, + unique: function() { + return unique; + } +}); +const _ppr = require("../server/lib/experimental/ppr"); +const _loadcustomroutes = require("../lib/load-custom-routes"); +const _constants = require("../lib/constants"); +require("../server/require-hook"); +require("../server/node-polyfill-crypto"); +require("../server/node-environment"); +const _picocolors = require("../lib/picocolors"); +const _texttable = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/text-table")); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _fs = require("fs"); +const _reactis = require("next/dist/compiled/react-is"); +const _stripansi = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/strip-ansi")); +const _constants1 = require("../shared/lib/constants"); +const _isdynamic = require("../shared/lib/router/utils/is-dynamic"); +const _findpagefile = require("../server/lib/find-page-file"); +const _isedgeruntime = require("../lib/is-edge-runtime"); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("./output/log")); +const _loadcomponents = require("../server/load-components"); +const _trace = require("../trace"); +const _setuphttpagentenv = require("../server/setup-http-agent-env"); +const _asyncsema = require("next/dist/compiled/async-sema"); +const _normalizepagepath = require("../shared/lib/page-path/normalize-page-path"); +const _sandbox = require("../server/web/sandbox"); +const _routekind = require("../server/route-kind"); +const _appsegments = require("./segment-config/app/app-segments"); +const _createincrementalcache = require("../export/helpers/create-incremental-cache"); +const _collectrootparamkeys = require("./segment-config/app/collect-root-param-keys"); +const _app = require("./static-paths/app"); +const _pages = require("./static-paths/pages"); +const _format = require("./output/format"); +const _routeregex = require("../shared/lib/router/utils/route-regex"); +const _app1 = require("../shared/lib/router/routes/app"); +const _getmetadataroute = require("../lib/metadata/get-metadata-route"); +const _ismetadataroute = require("../lib/metadata/is-metadata-route"); +const _getsupportedbrowsers = require("./get-supported-browsers"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +// Build a set of static metadata image filenames for quick lookup +const staticMetadataImageFilenames = new Set(Object.values(_ismetadataroute.STATIC_METADATA_IMAGES).map((meta)=>meta.filename)); +/** + * Get the display path for build output. For static metadata files under + * dynamic routes, this normalizes the path to use "-" placeholder. + * e.g., /dynamic/[id]/icon.png -> /dynamic/-/icon.png + */ function getTreeViewDisplayPath(pagePath) { + // Check if the path contains dynamic segments + if (!(0, _isdynamic.isDynamicRoute)(pagePath)) { + return pagePath; + } + // Check if the filename is a static metadata image + const lastSlash = pagePath.lastIndexOf('/'); + const filename = pagePath.slice(lastSlash + 1); + const dotIndex = filename.lastIndexOf('.'); + const baseName = dotIndex > 0 ? filename.slice(0, dotIndex) : filename; + // Check against known static metadata image filenames (e.g., icon, apple-icon, opengraph-image) + if (!staticMetadataImageFilenames.has(baseName)) { + return pagePath; + } + // Transform using fillMetadataSegment with isStatic=true + const segment = pagePath.slice(0, lastSlash); + const lastSegment = filename; + return (0, _getmetadataroute.fillMetadataSegment)(segment, {}, lastSegment, true); +} +// Use `print()` for expected console output +const print = console.log; +const RESERVED_PAGE = /^\/(_app|_error|_document|api(\/|$))/; +function unique(main, sub) { + return [ + ...new Set([ + ...main, + ...sub + ]) + ]; +} +function difference(main, sub) { + const a = new Set(main); + const b = new Set(sub); + return [ + ...a + ].filter((x)=>!b.has(x)); +} +function isMiddlewareFilename(file) { + return file === _constants.MIDDLEWARE_FILENAME || file === `src/${_constants.MIDDLEWARE_FILENAME}` || file === _constants.PROXY_FILENAME || file === `src/${_constants.PROXY_FILENAME}`; +} +function isInstrumentationHookFilename(file) { + return file === _constants.INSTRUMENTATION_HOOK_FILENAME || file === `src/${_constants.INSTRUMENTATION_HOOK_FILENAME}`; +} +const filterAndSortList = (list, routeType, hasCustomApp)=>{ + let pages; + if (routeType === 'app') { + // filter out static app route of /favicon.ico and /_global-error + pages = list.filter((e)=>{ + if (e === '/favicon.ico') return false; + // Hide static /_global-error from build output + if (e === '/_global-error') return false; + return true; + }); + } else { + // filter built-in pages + pages = list.slice().filter((e)=>!(e === '/_document' || e === '/_error' || !hasCustomApp && e === '/_app')); + } + return pages.sort((a, b)=>a.localeCompare(b)); +}; +function collectRoutesUsingEdgeRuntime(input) { + const routesUsingEdgeRuntime = {}; + for (const [route, info] of input.entries()){ + if ((0, _isedgeruntime.isEdgeRuntime)(info.runtime)) { + routesUsingEdgeRuntime[route] = 0; + } + } + return routesUsingEdgeRuntime; +} +async function printTreeView(lists, pageInfos, { pagesDir, pageExtensions, middlewareManifest, functionsConfigManifest, useStaticPages404, hasGSPAndRevalidateZero }) { + var _lists_app, _middlewareManifest_middleware_, _middlewareManifest_middleware, // 'nodejs' runtime middleware or proxy is set to + // functions-config-manifest instead of middleware-manifest. + _functionsConfigManifest_functions; + // Can be overridden for test purposes to omit the build duration output. + const MIN_DURATION = process.env.__NEXT_PRIVATE_DETERMINISTIC_BUILD_OUTPUT ? Infinity // Don't ever log build durations. + : 300; + const getPrettyDuration = (_duration)=>{ + const duration = `${_duration} ms`; + // green for 300-1000ms + if (_duration < 1000) return (0, _picocolors.green)(duration); + // yellow for 1000-2000ms + if (_duration < 2000) return (0, _picocolors.yellow)(duration); + // red for >= 2000ms + return (0, _picocolors.red)((0, _picocolors.bold)(duration)); + }; + // Check if we have a custom app. + const hasCustomApp = !!(pagesDir && await (0, _findpagefile.findPageFile)(pagesDir, '/_app', pageExtensions, false)); + // Collect all the symbols we use so we can print the icons out. + const usedSymbols = new Set(); + const messages = []; + const printFileTree = async ({ list, routerType })=>{ + const filteredPages = filterAndSortList(list, routerType, hasCustomApp); + if (filteredPages.length === 0) { + return; + } + let showRevalidate = false; + let showExpire = false; + for (const page of filteredPages){ + var _pageInfos_get; + const cacheControl = (_pageInfos_get = pageInfos.get(page)) == null ? void 0 : _pageInfos_get.initialCacheControl; + if (cacheControl == null ? void 0 : cacheControl.revalidate) { + showRevalidate = true; + } + if (cacheControl == null ? void 0 : cacheControl.expire) { + showExpire = true; + } + if (showRevalidate && showExpire) { + break; + } + } + messages.push([ + routerType === 'app' ? 'Route (app)' : 'Route (pages)', + showRevalidate ? 'Revalidate' : '', + showExpire ? 'Expire' : '' + ].filter((entry)=>entry !== '').map((entry)=>(0, _picocolors.underline)(entry))); + filteredPages.forEach((item, i, arr)=>{ + var _pageInfo_ssgPageDurations, _pageInfo_ssgPageRoutes; + const border = i === 0 ? arr.length === 1 ? '─' : '┌' : i === arr.length - 1 ? '└' : '├'; + const pageInfo = pageInfos.get(item); + const totalDuration = ((pageInfo == null ? void 0 : pageInfo.pageDuration) || 0) + ((pageInfo == null ? void 0 : (_pageInfo_ssgPageDurations = pageInfo.ssgPageDurations) == null ? void 0 : _pageInfo_ssgPageDurations.reduce((a, b)=>a + (b || 0), 0)) || 0); + let symbol; + if (item === '/_app' || item === '/_app.server') { + symbol = ' '; + } else if ((0, _isedgeruntime.isEdgeRuntime)(pageInfo == null ? void 0 : pageInfo.runtime)) { + symbol = 'ƒ'; + } else if (pageInfo == null ? void 0 : pageInfo.isRoutePPREnabled) { + if (// If the page has an empty static shell, then it's equivalent to a + // dynamic page + (pageInfo == null ? void 0 : pageInfo.hasEmptyStaticShell) || // ensure we don't mark dynamic paths that postponed as being dynamic + // since in this case we're able to partially prerender it + pageInfo.isDynamicAppRoute && !pageInfo.hasPostponed) { + symbol = 'ƒ'; + } else if (!(pageInfo == null ? void 0 : pageInfo.hasPostponed)) { + symbol = '○'; + } else { + symbol = '◐'; + } + } else if (pageInfo == null ? void 0 : pageInfo.isStatic) { + symbol = '○'; + } else if (pageInfo == null ? void 0 : pageInfo.isSSG) { + symbol = '●'; + } else { + symbol = 'ƒ'; + } + const displayPath = getTreeViewDisplayPath(item); + if (hasGSPAndRevalidateZero.has(item)) { + usedSymbols.add('ƒ'); + messages.push([ + `${border} ƒ ${displayPath}${totalDuration > MIN_DURATION ? ` (${getPrettyDuration(totalDuration)})` : ''}`, + showRevalidate && (pageInfo == null ? void 0 : pageInfo.initialCacheControl) ? (0, _format.formatRevalidate)(pageInfo.initialCacheControl) : '', + showExpire && (pageInfo == null ? void 0 : pageInfo.initialCacheControl) ? (0, _format.formatExpire)(pageInfo.initialCacheControl) : '' + ]); + } + usedSymbols.add(symbol); + messages.push([ + `${border} ${symbol} ${displayPath}${totalDuration > MIN_DURATION ? ` (${getPrettyDuration(totalDuration)})` : ''}`, + showRevalidate && (pageInfo == null ? void 0 : pageInfo.initialCacheControl) ? (0, _format.formatRevalidate)(pageInfo.initialCacheControl) : '', + showExpire && (pageInfo == null ? void 0 : pageInfo.initialCacheControl) ? (0, _format.formatExpire)(pageInfo.initialCacheControl) : '' + ]); + if (pageInfo == null ? void 0 : (_pageInfo_ssgPageRoutes = pageInfo.ssgPageRoutes) == null ? void 0 : _pageInfo_ssgPageRoutes.length) { + var _pageInfo_ssgPageDurations1; + const totalRoutes = pageInfo.ssgPageRoutes.length; + const contSymbol = i === arr.length - 1 ? ' ' : '│'; + // HERE + let routes; + if ((_pageInfo_ssgPageDurations1 = pageInfo.ssgPageDurations) == null ? void 0 : _pageInfo_ssgPageDurations1.some((d)=>d > MIN_DURATION)) { + const previewPages = totalRoutes === 8 ? 8 : Math.min(totalRoutes, 7); + const routesWithDuration = pageInfo.ssgPageRoutes.map((route, idx)=>({ + route, + duration: pageInfo.ssgPageDurations[idx] || 0 + })).sort(({ duration: a }, { duration: b })=>// Sort by duration + // keep too small durations in original order at the end + a <= MIN_DURATION && b <= MIN_DURATION ? 0 : b - a); + routes = routesWithDuration.slice(0, previewPages); + const remainingRoutes = routesWithDuration.slice(previewPages); + if (remainingRoutes.length) { + const remaining = remainingRoutes.length; + const avgDuration = Math.round(remainingRoutes.reduce((total, { duration })=>total + duration, 0) / remainingRoutes.length); + routes.push({ + route: `[+${remaining} more paths]`, + duration: 0, + avgDuration + }); + } + } else { + const previewPages = totalRoutes === 4 ? 4 : Math.min(totalRoutes, 3); + routes = pageInfo.ssgPageRoutes.slice(0, previewPages).map((route)=>({ + route, + duration: 0 + })); + if (totalRoutes > previewPages) { + const remaining = totalRoutes - previewPages; + routes.push({ + route: `[+${remaining} more paths]`, + duration: 0 + }); + } + } + routes.forEach(({ route, duration, avgDuration }, index, { length })=>{ + var _pageInfos_get; + const innerSymbol = index === length - 1 ? '└' : '├'; + const initialCacheControl = (_pageInfos_get = pageInfos.get(route)) == null ? void 0 : _pageInfos_get.initialCacheControl; + messages.push([ + `${contSymbol} ${innerSymbol} ${route}${duration > MIN_DURATION ? ` (${getPrettyDuration(duration)})` : ''}${avgDuration && avgDuration > MIN_DURATION ? ` (avg ${getPrettyDuration(avgDuration)})` : ''}`, + showRevalidate && initialCacheControl ? (0, _format.formatRevalidate)(initialCacheControl) : '', + showExpire && initialCacheControl ? (0, _format.formatExpire)(initialCacheControl) : '' + ]); + }); + } + }); + }; + // If enabled, then print the tree for the app directory. + if (lists.app) { + await printFileTree({ + routerType: 'app', + list: lists.app + }); + messages.push([ + '', + '', + '', + '' + ]); + } + pageInfos.set('/404', { + ...pageInfos.get('/404') || pageInfos.get('/_error'), + isStatic: useStaticPages404 + }); + // If there's no app /_notFound page present, then the 404 is still using the pages/404 + if (!lists.pages.includes('/404') && !((_lists_app = lists.app) == null ? void 0 : _lists_app.includes(_constants1.UNDERSCORE_NOT_FOUND_ROUTE))) { + lists.pages = [ + ...lists.pages, + '/404' + ]; + } + // Print the tree view for the pages directory. + await printFileTree({ + routerType: 'pages', + list: lists.pages + }); + if (((_middlewareManifest_middleware = middlewareManifest.middleware) == null ? void 0 : (_middlewareManifest_middleware_ = _middlewareManifest_middleware['/']) == null ? void 0 : _middlewareManifest_middleware_.files.length) > 0 || ((_functionsConfigManifest_functions = functionsConfigManifest.functions) == null ? void 0 : _functionsConfigManifest_functions['/_middleware'])) { + messages.push([]); + messages.push([ + 'ƒ Proxy (Middleware)' + ]); + } + print((0, _texttable.default)(messages, { + align: [ + 'l', + 'r', + 'r', + 'r' + ], + stringLength: (str)=>(0, _stripansi.default)(str).length + })); + const staticFunctionInfo = lists.app ? 'generateStaticParams' : 'getStaticProps'; + print(); + print((0, _texttable.default)([ + usedSymbols.has('○') && [ + '○', + '(Static)', + 'prerendered as static content' + ], + usedSymbols.has('●') && [ + '●', + '(SSG)', + `prerendered as static HTML (uses ${(0, _picocolors.cyan)(staticFunctionInfo)})` + ], + usedSymbols.has('◐') && [ + '◐', + '(Partial Prerender)', + 'prerendered as static HTML with dynamic server-streamed content' + ], + usedSymbols.has('ƒ') && [ + 'ƒ', + '(Dynamic)', + `server-rendered on demand` + ] + ].filter((x)=>x), { + align: [ + 'l', + 'l', + 'l' + ], + stringLength: (str)=>(0, _stripansi.default)(str).length + })); + print(); +} +function printCustomRoutes({ redirects, rewrites, headers, onMatchHeaders }) { + const printRoutes = (routes, type)=>{ + const isRedirects = type === 'Redirects'; + const isHeaders = type === 'Headers' || type === 'On Match Headers'; + print((0, _picocolors.underline)(type)); + /* + ┌ source + ├ permanent/statusCode + └ destination + */ const routesStr = routes.map((route)=>{ + let routeStr = `┌ source: ${route.source}\n`; + if (!isHeaders) { + const r = route; + routeStr += `${isRedirects ? '├' : '└'} destination: ${r.destination}\n`; + } + if (isRedirects) { + const r = route; + routeStr += `└ ${r.statusCode ? `status: ${r.statusCode}` : `permanent: ${r.permanent}`}\n`; + } + if (isHeaders) { + const r = route; + routeStr += `└ headers:\n`; + for(let i = 0; i < r.headers.length; i++){ + const header = r.headers[i]; + const last = i === headers.length - 1; + routeStr += ` ${last ? '└' : '├'} ${header.key}: ${header.value}\n`; + } + } + return routeStr; + }).join('\n'); + print(`${routesStr}\n`); + }; + print(); + if (redirects.length) { + printRoutes(redirects, 'Redirects'); + } + if (headers.length) { + printRoutes(headers, 'Headers'); + } + if (onMatchHeaders.length) { + printRoutes(onMatchHeaders, 'On Match Headers'); + } + const combinedRewrites = [ + ...rewrites.beforeFiles, + ...rewrites.afterFiles, + ...rewrites.fallback + ]; + if (combinedRewrites.length) { + printRoutes(combinedRewrites, 'Rewrites'); + } +} +async function isPageStatic({ dir, page, distDir, configFileName, httpAgentOptions, locales, defaultLocale, parentId, pageRuntime, edgeInfo, pageType, cacheComponents, authInterrupts, originalAppPath, isrFlushToDisk, cacheMaxMemorySize, nextConfigOutput, cacheHandler, cacheHandlers, cacheLifeProfiles, pprConfig, partialFallbacksEnabled, buildId, deploymentId, clientAssetToken, sriEnabled }) { + // Skip page data collection for synthetic _global-error routes + if (page === _constants1.UNDERSCORE_GLOBAL_ERROR_ROUTE) { + return { + isStatic: true, + isRoutePPREnabled: false, + prerenderFallbackMode: undefined, + prerenderedRoutes: undefined, + rootParamKeys: undefined, + hasStaticProps: false, + hasServerProps: false, + isNextImageImported: false, + appConfig: {} + }; + } + await (0, _createincrementalcache.createIncrementalCache)({ + cacheHandler, + cacheHandlers, + distDir, + dir, + flushToDisk: isrFlushToDisk, + cacheMaxMemorySize + }); + const isPageStaticSpan = (0, _trace.trace)('is-page-static-utils', parentId); + return isPageStaticSpan.traceAsyncFn(async ()=>{ + (0, _setuphttpagentenv.setHttpClientAndAgentOptions)({ + httpAgentOptions + }); + let componentsResult; + let prerenderedRoutes; + let prerenderFallbackMode; + let appConfig = {}; + let rootParamKeys; + const pathIsEdgeRuntime = (0, _isedgeruntime.isEdgeRuntime)(pageRuntime); + if (pathIsEdgeRuntime) { + const runtime = await (0, _sandbox.getRuntimeContext)({ + paths: edgeInfo.files.map((file)=>_path.default.join(distDir, file)), + edgeFunctionEntry: { + ...edgeInfo, + wasm: (edgeInfo.wasm ?? []).map((binding)=>({ + ...binding, + filePath: _path.default.join(distDir, binding.filePath) + })) + }, + name: edgeInfo.name, + useCache: true, + distDir, + clientAssetToken + }); + const mod = (await runtime.context._ENTRIES[`middleware_${edgeInfo.name}`]).ComponentMod; + // This is not needed during require. + const buildManifest = {}; + componentsResult = { + Component: mod.default, + Document: mod.Document, + App: mod.App, + routeModule: mod.routeModule, + page, + ComponentMod: mod, + pageConfig: mod.config || {}, + buildManifest, + reactLoadableManifest: {}, + getServerSideProps: mod.getServerSideProps, + getStaticPaths: mod.getStaticPaths, + getStaticProps: mod.getStaticProps + }; + } else { + componentsResult = await (0, _loadcomponents.loadComponents)({ + distDir, + page: originalAppPath || page, + isAppPath: pageType === 'app', + isDev: false, + sriEnabled, + needsManifestsForLegacyReasons: true + }); + } + const { Component, routeModule } = componentsResult; + const Comp = Component; + let isRoutePPREnabled = false; + if (pageType === 'app') { + // @ts-expect-error pageType is app, so we can assume AppPageModule | AppRouteModule + const ComponentMod = componentsResult.ComponentMod; + let segments; + try { + segments = await (0, _appsegments.collectSegments)(// We know this is an app page or app route module because we + // checked above that the page type is 'app'. + routeModule); + } catch (err) { + throw Object.defineProperty(new Error(`Failed to collect configuration for ${page}`, { + cause: err + }), "__NEXT_ERROR_CODE", { + value: "E434", + enumerable: false, + configurable: true + }); + } + appConfig = originalAppPath === _constants1.UNDERSCORE_GLOBAL_ERROR_ROUTE_ENTRY ? {} : reduceAppConfig(segments); + if (appConfig.dynamic === 'force-static' && pathIsEdgeRuntime) { + _log.warn(`Page "${page}" is using runtime = 'edge' which is currently incompatible with dynamic = 'force-static'. Please remove either "runtime" or "force-static" for correct behavior`); + } + rootParamKeys = (0, _collectrootparamkeys.collectRootParamKeys)(routeModule); + // A page supports partial prerendering if it is an app page and either + // the whole app has PPR enabled or this page has PPR enabled when we're + // in incremental mode. + isRoutePPREnabled = routeModule.definition.kind === _routekind.RouteKind.APP_PAGE && (0, _ppr.checkIsRoutePPREnabled)(pprConfig); + // If force dynamic was set and we don't have PPR enabled, then set the + // revalidate to 0. + // TODO: (PPR) remove this once PPR is enabled by default + if (appConfig.dynamic === 'force-dynamic' && !isRoutePPREnabled) { + appConfig.revalidate = 0; + } + const route = (0, _app1.parseAppRoute)(page, true); + // If the page is dynamic and we're not in edge runtime, then we need to + // build the static paths. The edge runtime doesn't support static + // paths. + if (route.dynamicSegments.length > 0 && !pathIsEdgeRuntime) { + ; + ({ prerenderedRoutes, fallbackMode: prerenderFallbackMode } = await (0, _app.buildAppStaticPaths)({ + dir, + page, + route, + cacheComponents, + authInterrupts, + segments, + distDir, + requestHeaders: {}, + isrFlushToDisk, + cacheMaxMemorySize, + cacheHandler, + cacheLifeProfiles, + ComponentMod, + nextConfigOutput, + isRoutePPREnabled, + partialFallbacksEnabled, + buildId, + deploymentId, + rootParamKeys + })); + } + } else { + if (!Comp || !(0, _reactis.isValidElementType)(Comp) || typeof Comp === 'string') { + throw Object.defineProperty(new Error('INVALID_DEFAULT_EXPORT'), "__NEXT_ERROR_CODE", { + value: "E457", + enumerable: false, + configurable: true + }); + } + } + const hasGetInitialProps = !!(Comp == null ? void 0 : Comp.getInitialProps); + const hasStaticProps = !!componentsResult.getStaticProps; + const hasStaticPaths = !!componentsResult.getStaticPaths; + const hasServerProps = !!componentsResult.getServerSideProps; + // A page cannot be prerendered _and_ define a data requirement. That's + // contradictory! + if (hasGetInitialProps && hasStaticProps) { + throw Object.defineProperty(new Error(_constants.SSG_GET_INITIAL_PROPS_CONFLICT), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + if (hasGetInitialProps && hasServerProps) { + throw Object.defineProperty(new Error(_constants.SERVER_PROPS_GET_INIT_PROPS_CONFLICT), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + if (hasStaticProps && hasServerProps) { + throw Object.defineProperty(new Error(_constants.SERVER_PROPS_SSG_CONFLICT), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + const pageIsDynamic = (0, _isdynamic.isDynamicRoute)(page); + // A page cannot have static parameters if it is not a dynamic page. + if (hasStaticProps && hasStaticPaths && !pageIsDynamic) { + throw Object.defineProperty(new Error(`getStaticPaths can only be used with dynamic pages, not '${page}'.` + `\nLearn more: https://nextjs.org/docs/routing/dynamic-routes`), "__NEXT_ERROR_CODE", { + value: "E356", + enumerable: false, + configurable: true + }); + } + if (hasStaticProps && pageIsDynamic && !hasStaticPaths) { + throw Object.defineProperty(new Error(`getStaticPaths is required for dynamic SSG pages and is missing for '${page}'.` + `\nRead more: https://nextjs.org/docs/messages/invalid-getstaticpaths-value`), "__NEXT_ERROR_CODE", { + value: "E255", + enumerable: false, + configurable: true + }); + } + if (hasStaticProps && hasStaticPaths) { + ; + ({ prerenderedRoutes, fallbackMode: prerenderFallbackMode } = await (0, _pages.buildPagesStaticPaths)({ + page, + locales, + defaultLocale, + configFileName, + getStaticPaths: componentsResult.getStaticPaths + })); + } + const isNextImageImported = globalThis.__NEXT_IMAGE_IMPORTED; + let isStatic = false; + if (!hasStaticProps && !hasGetInitialProps && !hasServerProps) { + isStatic = true; + } + // When PPR is enabled, any route may be completely static, so + // mark this route as static. + if (isRoutePPREnabled) { + isStatic = true; + } + return { + isStatic, + isRoutePPREnabled, + prerenderFallbackMode, + prerenderedRoutes, + rootParamKeys, + hasStaticProps, + hasServerProps, + isNextImageImported, + appConfig + }; + }).catch((err)=>{ + if (err.message === 'INVALID_DEFAULT_EXPORT') { + throw err; + } + console.error(err); + throw Object.defineProperty(new Error(`Failed to collect page data for ${page}`), "__NEXT_ERROR_CODE", { + value: "E414", + enumerable: false, + configurable: true + }); + }); +} +function reduceAppConfig(segments) { + const config = {}; + for (const segment of segments){ + const { dynamic, fetchCache, preferredRegion, revalidate, runtime, maxDuration } = segment.config || {}; + // TODO: should conflicting configs here throw an error + // e.g. if layout defines one region but page defines another + if (typeof preferredRegion !== 'undefined') { + config.preferredRegion = preferredRegion; + } + if (typeof dynamic !== 'undefined') { + config.dynamic = dynamic; + } + if (typeof fetchCache !== 'undefined') { + config.fetchCache = fetchCache; + } + if (typeof revalidate !== 'undefined') { + config.revalidate = revalidate; + } + // Any revalidate number overrides false, and shorter revalidate overrides + // longer (initially). + if (typeof revalidate === 'number' && (typeof config.revalidate !== 'number' || revalidate < config.revalidate)) { + config.revalidate = revalidate; + } + if (typeof runtime !== 'undefined') { + config.runtime = runtime; + } + if (typeof maxDuration !== 'undefined') { + config.maxDuration = maxDuration; + } + } + return config; +} +async function hasCustomGetInitialProps({ page, distDir, checkingApp, sriEnabled }) { + const { ComponentMod } = await (0, _loadcomponents.loadComponents)({ + distDir, + page: page, + isAppPath: false, + isDev: false, + sriEnabled, + needsManifestsForLegacyReasons: true + }); + let mod = ComponentMod; + if (checkingApp) { + // @ts-expect-error very dynamic code + mod = await mod._app || mod.default || mod; + } else { + // @ts-expect-error very dynamic code + mod = mod.default || mod; + } + mod = await mod; + // @ts-expect-error very dynamic code + return mod.getInitialProps !== mod.origGetInitialProps; +} +async function getDefinedNamedExports({ page, distDir, sriEnabled }) { + const { ComponentMod } = await (0, _loadcomponents.loadComponents)({ + distDir, + page: page, + isAppPath: false, + isDev: false, + sriEnabled, + needsManifestsForLegacyReasons: true + }); + return Object.keys(ComponentMod).filter((key)=>{ + return typeof ComponentMod[key] !== 'undefined'; + }); +} +function detectConflictingPaths(combinedPages, ssgPages, additionalGeneratedSSGPaths) { + const conflictingPaths = new Map(); + const dynamicSsgPages = [ + ...ssgPages + ].filter((page)=>(0, _isdynamic.isDynamicRoute)(page)); + const additionalSsgPathsByPath = {}; + additionalGeneratedSSGPaths.forEach((paths, pathsPage)=>{ + additionalSsgPathsByPath[pathsPage] ||= {}; + paths.forEach((curPath)=>{ + const currentPath = curPath.toLowerCase(); + additionalSsgPathsByPath[pathsPage][currentPath] = curPath; + }); + }); + additionalGeneratedSSGPaths.forEach((paths, pathsPage)=>{ + paths.forEach((curPath)=>{ + const lowerPath = curPath.toLowerCase(); + let conflictingPage = combinedPages.find((page)=>page.toLowerCase() === lowerPath); + if (conflictingPage) { + conflictingPaths.set(lowerPath, [ + { + path: curPath, + page: pathsPage + }, + { + path: conflictingPage, + page: conflictingPage + } + ]); + } else { + let conflictingPath; + conflictingPage = dynamicSsgPages.find((page)=>{ + if (page === pathsPage) return false; + conflictingPath = additionalGeneratedSSGPaths.get(page) == null ? undefined : additionalSsgPathsByPath[page][lowerPath]; + return conflictingPath; + }); + if (conflictingPage && conflictingPath) { + conflictingPaths.set(lowerPath, [ + { + path: curPath, + page: pathsPage + }, + { + path: conflictingPath, + page: conflictingPage + } + ]); + } + } + }); + }); + if (conflictingPaths.size > 0) { + let conflictingPathsOutput = ''; + conflictingPaths.forEach((pathItems)=>{ + pathItems.forEach((pathItem, idx)=>{ + const isDynamic = pathItem.page !== pathItem.path; + if (idx > 0) { + conflictingPathsOutput += 'conflicts with '; + } + conflictingPathsOutput += `path: "${pathItem.path}"${isDynamic ? ` from page: "${pathItem.page}" ` : ' '}`; + }); + conflictingPathsOutput += '\n'; + }); + _log.error('Conflicting paths returned from getStaticPaths, paths must be unique per page.\n' + 'See more info here: https://nextjs.org/docs/messages/conflicting-ssg-paths\n\n' + conflictingPathsOutput); + process.exit(1); + } +} +async function copyTracedFiles(dir, distDir, pageKeys, appPageKeys, tracingRoot, serverConfig, middlewareManifest, hasNodeMiddleware, hasInstrumentationHook, staticPages) { + const outputPath = _path.default.join(distDir, 'standalone'); + // Clean up standalone directory first. + await _fs.promises.rm(outputPath, { + recursive: true, + force: true + }); + let moduleType = false; + const nextConfig = { + ...serverConfig, + distDir: `./${_path.default.relative(dir, distDir)}` + }; + try { + const packageJsonPath = _path.default.join(distDir, '../package.json'); + const packageJsonContent = await _fs.promises.readFile(/* turbopackIgnore: true */ packageJsonPath, 'utf8'); + const packageJson = JSON.parse(packageJsonContent); + moduleType = packageJson.type === 'module'; + // we always copy the package.json to the standalone + // folder to ensure any resolving logic is maintained + const packageJsonOutputPath = _path.default.join(outputPath, _path.default.relative(tracingRoot, dir), 'package.json'); + await _fs.promises.mkdir(_path.default.dirname(packageJsonOutputPath), { + recursive: true + }); + await _fs.promises.writeFile(packageJsonOutputPath, packageJsonContent); + } catch {} + const copiedFiles = new Set(); + async function handleTraceFiles(traceFilePath) { + const traceData = JSON.parse(await _fs.promises.readFile(/* turbopackIgnore: true */ traceFilePath, 'utf8')); + const copySema = new _asyncsema.Sema(10, { + capacity: traceData.files.length + }); + const traceFileDir = _path.default.dirname(traceFilePath); + await Promise.all(traceData.files.map(async (relativeFile)=>{ + await copySema.acquire(); + const tracedFilePath = _path.default.join(traceFileDir, relativeFile); + const fileOutputPath = _path.default.join(outputPath, _path.default.relative(tracingRoot, tracedFilePath)); + if (!copiedFiles.has(fileOutputPath)) { + copiedFiles.add(fileOutputPath); + await _fs.promises.mkdir(_path.default.dirname(fileOutputPath), { + recursive: true + }); + const symlink = await _fs.promises.readlink(tracedFilePath).catch(()=>null); + if (symlink) { + try { + await _fs.promises.symlink(symlink, fileOutputPath); + } catch (err) { + // Windows doesn't support creating symlinks without elevated privileges, unless + // "Developer Mode" is turned on. If we failed to create a symlink due to EPERM, try + // creating a junction point instead. + // + // Ideally we'd just preserve the input file type (junction point or symlink), but + // there's no API in node.js to differentiate between a junction point and a symlink, + // so we just try making a symlink first. Symlinks are preferred because they support + // relative paths and non-directory (file) targets. + if (process.platform === 'win32' && err.code === 'EPERM' && _path.default.isAbsolute(symlink)) { + try { + await _fs.promises.symlink(symlink, fileOutputPath, 'junction'); + } catch (junctionErr) { + if (junctionErr.code !== 'EEXIST') { + throw junctionErr; + } + } + } else if (err.code !== 'EEXIST') { + throw err; + } + } + } else { + await _fs.promises.copyFile(tracedFilePath, fileOutputPath); + } + } + await copySema.release(); + })); + } + async function handleEdgeFunction(page) { + var _page_wasm, _page_assets; + async function handleFile(file) { + const originalPath = _path.default.join(distDir, file); + const fileOutputPath = _path.default.join(outputPath, _path.default.relative(tracingRoot, distDir), file); + await _fs.promises.mkdir(_path.default.dirname(fileOutputPath), { + recursive: true + }); + await _fs.promises.copyFile(originalPath, fileOutputPath); + } + await Promise.all([ + page.files.map(handleFile), + (_page_wasm = page.wasm) == null ? void 0 : _page_wasm.map((file)=>handleFile(file.filePath)), + (_page_assets = page.assets) == null ? void 0 : _page_assets.map((file)=>handleFile(file.filePath)) + ]); + } + const edgeFunctionHandlers = []; + for (const middleware of Object.values(middlewareManifest.middleware)){ + if (isMiddlewareFilename(middleware.name)) { + edgeFunctionHandlers.push(handleEdgeFunction(middleware)); + } + } + for (const page of Object.values(middlewareManifest.functions)){ + edgeFunctionHandlers.push(handleEdgeFunction(page)); + } + await Promise.all(edgeFunctionHandlers); + for (const page of pageKeys){ + if (middlewareManifest.functions.hasOwnProperty(page)) { + continue; + } + const route = (0, _normalizepagepath.normalizePagePath)(page); + if (staticPages.has(route)) { + continue; + } + const pageFile = _path.default.join(distDir, 'server', 'pages', `${(0, _normalizepagepath.normalizePagePath)(page)}.js`); + const pageTraceFile = `${pageFile}.nft.json`; + await handleTraceFiles(pageTraceFile).catch((err)=>{ + if (err.code !== 'ENOENT' || page !== '/404' && page !== '/500') { + _log.warn(`Failed to copy traced files for ${pageFile}`, err); + } + }); + } + if (hasNodeMiddleware) { + const middlewareFile = _path.default.join(distDir, 'server', 'middleware.js'); + const middlewareTrace = `${middlewareFile}.nft.json`; + await handleTraceFiles(middlewareTrace); + } + if (appPageKeys) { + for (const page of appPageKeys){ + if (middlewareManifest.functions.hasOwnProperty(page)) { + continue; + } + const pageFile = _path.default.join(distDir, 'server', 'app', `${page}.js`); + const pageTraceFile = `${pageFile}.nft.json`; + await handleTraceFiles(pageTraceFile).catch((err)=>{ + _log.warn(`Failed to copy traced files for ${pageFile}`, err); + }); + } + } + if (hasInstrumentationHook) { + await handleTraceFiles(_path.default.join(distDir, 'server', 'instrumentation.js.nft.json')); + } + await handleTraceFiles(_path.default.join(distDir, 'next-server.js.nft.json')); + const serverOutputPath = _path.default.join(outputPath, _path.default.relative(tracingRoot, dir), 'server.js'); + await _fs.promises.mkdir(_path.default.dirname(serverOutputPath), { + recursive: true + }); + await _fs.promises.writeFile(serverOutputPath, `${moduleType ? `performance.mark('next-start'); +import path from 'node:path' +import { fileURLToPath } from 'node:url' +import module from 'node:module' +const require = module.createRequire(import.meta.url) +const __dirname = fileURLToPath(new URL('.', import.meta.url)) +` : `const path = require('path')`} + +const dir = path.join(__dirname) + +process.env.NODE_ENV = 'production' +process.chdir(__dirname) + +const currentPort = parseInt(process.env.PORT, 10) || 3000 +const hostname = process.env.HOSTNAME || '0.0.0.0' + +let keepAliveTimeout = parseInt(process.env.KEEP_ALIVE_TIMEOUT, 10) +const nextConfig = ${JSON.stringify(nextConfig)} + +process.env.__NEXT_PRIVATE_STANDALONE_CONFIG = JSON.stringify(nextConfig) + +require('next') +const { startServer } = require('next/dist/server/lib/start-server') + +if ( + Number.isNaN(keepAliveTimeout) || + !Number.isFinite(keepAliveTimeout) || + keepAliveTimeout < 0 +) { + keepAliveTimeout = undefined +} + +startServer({ + dir, + isDev: false, + config: nextConfig, + hostname, + port: currentPort, + allowRetry: false, + keepAliveTimeout, +}).catch((err) => { + console.error(err); + process.exit(1); +});`); +} +function isReservedPage(page) { + return RESERVED_PAGE.test(page); +} +function isAppBuiltinPage(page) { + return /next[\\/]dist[\\/](esm[\\/])?client[\\/]components[\\/]builtin[\\/]/.test(page); +} +function isCustomErrorPage(page) { + return page === '/404' || page === '/500'; +} +function isMiddlewareFile(file) { + return file === `/${_constants.MIDDLEWARE_FILENAME}` || file === `/src/${_constants.MIDDLEWARE_FILENAME}` || file === `/${_constants.PROXY_FILENAME}` || file === `/src/${_constants.PROXY_FILENAME}`; +} +function isProxyFile(file) { + return file === `/${_constants.PROXY_FILENAME}` || file === `/src/${_constants.PROXY_FILENAME}`; +} +function isInstrumentationHookFile(file) { + return file === `/${_constants.INSTRUMENTATION_HOOK_FILENAME}` || file === `/src/${_constants.INSTRUMENTATION_HOOK_FILENAME}`; +} +function getPossibleInstrumentationHookFilenames(folder, extensions) { + const files = []; + for (const extension of extensions){ + files.push(_path.default.join(folder, `${_constants.INSTRUMENTATION_HOOK_FILENAME}.${extension}`), _path.default.join(folder, `src`, `${_constants.INSTRUMENTATION_HOOK_FILENAME}.${extension}`)); + } + return files; +} +function getPossibleMiddlewareFilenames(folder, extensions) { + return extensions.flatMap((extension)=>[ + _path.default.join(folder, `${_constants.MIDDLEWARE_FILENAME}.${extension}`), + _path.default.join(folder, `${_constants.PROXY_FILENAME}.${extension}`) + ]); +} +class NestedMiddlewareError extends Error { + constructor(nestedFileNames, mainDir, pagesOrAppDir){ + super(`Nested Middleware is not allowed, found:\n` + `${nestedFileNames.map((file)=>`pages${file}`).join('\n')}\n` + `Please move your code to a single file at ${_path.default.join(_path.default.posix.sep, _path.default.relative(mainDir, _path.default.resolve(pagesOrAppDir, '..')), 'middleware')} instead.\n` + `Read More - https://nextjs.org/docs/messages/nested-middleware`); + } +} +function shouldUseReactServerCondition(layer) { + return Boolean(layer && _constants.WEBPACK_LAYERS.GROUP.serverOnly.includes(layer)); +} +function isWebpackClientOnlyLayer(layer) { + return Boolean(layer && _constants.WEBPACK_LAYERS.GROUP.clientOnly.includes(layer)); +} +function isWebpackDefaultLayer(layer) { + return layer === null || layer === undefined || layer === _constants.WEBPACK_LAYERS.pagesDirBrowser || layer === _constants.WEBPACK_LAYERS.pagesDirEdge || layer === _constants.WEBPACK_LAYERS.pagesDirNode; +} +function isWebpackBundledLayer(layer) { + return Boolean(layer && _constants.WEBPACK_LAYERS.GROUP.bundled.includes(layer)); +} +function isWebpackAppPagesLayer(layer) { + return Boolean(layer && _constants.WEBPACK_LAYERS.GROUP.appPages.includes(layer)); +} +function collectMeta({ status, headers }) { + const meta = {}; + if (status !== 200) { + meta.status = status; + } + if (headers && Object.keys(headers).length) { + meta.headers = {}; + // normalize header values as initialHeaders + // must be Record + for(const key in headers){ + // set-cookie is already handled - the middleware cookie setting case + // isn't needed for the prerender manifest since it can't read cookies + if (key === 'x-middleware-set-cookie') continue; + let value = headers[key]; + if (Array.isArray(value)) { + if (key === 'set-cookie') { + value = value.join(','); + } else { + value = value[value.length - 1]; + } + } + if (typeof value === 'string') { + meta.headers[key] = value; + } + } + } + return meta; +} +const RSPACK_DEFAULT_LAYERS_REGEX = new RegExp(`^(|${[ + _constants.WEBPACK_LAYERS.pagesDirBrowser, + _constants.WEBPACK_LAYERS.pagesDirEdge, + _constants.WEBPACK_LAYERS.pagesDirNode +].join('|')})$`); +function pageToRoute(page, sourcePage) { + const routeRegex = (0, _routeregex.getNamedRouteRegex)(page, { + prefixRouteKeys: true + }); + return { + sourcePage, + page, + regex: (0, _loadcustomroutes.normalizeRouteRegex)(routeRegex.re.source), + routeKeys: routeRegex.routeKeys, + namedRegex: routeRegex.namedRegex + }; +} + +//# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/cli/next-test.js b/build/node_modules/next/dist/cli/next-test.js new file mode 100644 index 0000000..d4739ba --- /dev/null +++ b/build/node_modules/next/dist/cli/next-test.js @@ -0,0 +1,170 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + SUPPORTED_TEST_RUNNERS_LIST: null, + nextTest: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + SUPPORTED_TEST_RUNNERS_LIST: function() { + return SUPPORTED_TEST_RUNNERS_LIST; + }, + nextTest: function() { + return nextTest; + } +}); +const _fs = require("fs"); +const _getprojectdir = require("../lib/get-project-dir"); +const _utils = require("../server/lib/utils"); +const _config = /*#__PURE__*/ _interop_require_default(require("../server/config")); +const _constants = require("../shared/lib/constants"); +const _hasnecessarydependencies = require("../lib/has-necessary-dependencies"); +const _installdependencies = require("../lib/install-dependencies"); +const _findup = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/find-up")); +const _findpagesdir = require("../lib/find-pages-dir"); +const _verifytypescriptsetup = require("../lib/verify-typescript-setup"); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _crossspawn = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/cross-spawn")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const SUPPORTED_TEST_RUNNERS_LIST = [ + 'playwright' +]; +const requiredPackagesByTestRunner = { + playwright: [ + { + file: 'playwright', + pkg: '@playwright/test', + exportsRestrict: false + } + ] +}; +async function nextTest(directory, testRunnerArgs = [], options = {}) { + // The following mess is in order to support an existing Next.js CLI pattern of optionally, passing a project `directory` as the first argument to execute the command on. + // This is problematic for `next test` because as a wrapper around a test runner's `test` command, it needs to pass through any additional arguments and options. + // Thus, `directory` could either be a valid Next.js project directory (that the user intends to run `next test` on), or it is the first argument for the test runner. + // Unfortunately, since many test runners support passing a path (to a test file or directory containing test files), we must check if `directory` is both a valid path and a valid Next.js project. + let baseDir, nextConfig; + try { + // if directory is `undefined` or a valid path this will succeed. + baseDir = (0, _getprojectdir.getProjectDir)(directory, false); + } catch (err) { + // if that failed, then `directory` is not a valid path, so it must have meant to be the first item for `testRunnerArgs` + // @ts-expect-error directory is a string here since `getProjectDir` will succeed if its undefined + testRunnerArgs.unshift(directory); + // intentionally set baseDir to the resolved '.' path + baseDir = (0, _getprojectdir.getProjectDir)(); + } + try { + // but, `baseDir` might not be a Next.js project directory, it could be a path-like argument for the test runner (i.e. `playwright test test/foo.spec.js`) + // if this succeeds, it means that `baseDir` is a Next.js project directory + nextConfig = await (0, _config.default)(_constants.PHASE_PRODUCTION_BUILD, baseDir); + } catch (err) { + // if it doesn't, then most likely `baseDir` is not a Next.js project directory + // @ts-expect-error directory is a string here since `getProjectDir` will succeed if its undefined + testRunnerArgs.unshift(directory); + // intentionally set baseDir to the resolved '.' path + baseDir = (0, _getprojectdir.getProjectDir)(); + nextConfig = await (0, _config.default)(_constants.PHASE_PRODUCTION_BUILD, baseDir) // let this error bubble up if the `basePath` is still not a valid Next.js project + ; + } + // set the test runner. priority is CLI option > next config > default 'playwright' + const configuredTestRunner = (options == null ? void 0 : options.testRunner) ?? // --test-runner='foo' + nextConfig.experimental.defaultTestRunner ?? // { experimental: { defaultTestRunner: 'foo' }} + 'playwright'; + if (!nextConfig.experimental.testProxy) { + return (0, _utils.printAndExit)(`\`next experimental-test\` requires the \`experimental.testProxy: true\` configuration option.`); + } + // execute test runner specific function + switch(configuredTestRunner){ + case 'playwright': + return runPlaywright(baseDir, nextConfig, testRunnerArgs); + default: + return (0, _utils.printAndExit)(`Test runner ${configuredTestRunner} is not supported.`); + } +} +async function checkRequiredDeps(baseDir, testRunner) { + const deps = (0, _hasnecessarydependencies.hasNecessaryDependencies)(baseDir, requiredPackagesByTestRunner[testRunner]); + if (deps.missing.length > 0) { + await (0, _installdependencies.installDependencies)(baseDir, deps.missing, true); + const playwright = (0, _crossspawn.default)(_path.default.join(baseDir, 'node_modules', '.bin', 'playwright'), [ + 'install' + ], { + cwd: baseDir, + shell: false, + stdio: 'inherit', + env: { + ...process.env + } + }); + return new Promise((resolve, reject)=>{ + playwright.on('close', (c)=>resolve(c)); + playwright.on('error', (err)=>reject(err)); + }); + } +} +async function runPlaywright(baseDir, nextConfig, testRunnerArgs) { + await checkRequiredDeps(baseDir, 'playwright'); + const playwrightConfigFile = await (0, _findup.default)([ + 'playwright.config.js', + 'playwright.config.ts' + ], { + cwd: baseDir + }); + if (!playwrightConfigFile) { + const { pagesDir, appDir } = (0, _findpagesdir.findPagesDir)(baseDir); + const { version: typeScriptVersion } = await (0, _verifytypescriptsetup.verifyAndRunTypeScript)({ + dir: baseDir, + distDir: nextConfig.distDir, + strictRouteTypes: Boolean(nextConfig.experimental.strictRouteTypes), + shouldRunTypeCheck: false, + tsconfigPath: nextConfig.typescript.tsconfigPath, + typedRoutes: Boolean(nextConfig.typedRoutes), + disableStaticImages: nextConfig.images.disableStaticImages, + hasAppDir: !!appDir, + hasPagesDir: !!pagesDir, + appDir: appDir || undefined, + pagesDir: pagesDir || undefined + }); + const isUsingTypeScript = !!typeScriptVersion; + const playwrightConfigFilename = isUsingTypeScript ? 'playwright.config.ts' : 'playwright.config.js'; + (0, _fs.writeFileSync)(_path.default.join(baseDir, playwrightConfigFilename), defaultPlaywrightConfig(isUsingTypeScript)); + return (0, _utils.printAndExit)(`Successfully generated ${playwrightConfigFilename}. Create your first test and then run \`next experimental-test\`.`, 0); + } else { + const playwright = (0, _crossspawn.default)(_path.default.join(baseDir, 'node_modules', '.bin', 'playwright'), [ + 'test', + ...testRunnerArgs + ], { + cwd: baseDir, + shell: false, + stdio: 'inherit', + env: { + ...process.env + } + }); + return new Promise((resolve, reject)=>{ + playwright.on('close', (c)=>resolve(c)); + playwright.on('error', (err)=>reject(err)); + }); + } +} +function defaultPlaywrightConfig(typescript) { + const comment = `/* + * Specify any additional Playwright config options here. + * They will be merged with Next.js' default Playwright config. + * You can access the default config by importing \`defaultPlaywrightConfig\` from \`'next/experimental/testmode/playwright'\`. + */`; + return typescript ? `import { defineConfig } from 'next/experimental/testmode/playwright';\n\n${comment}\nexport default defineConfig({});` : `const { defineConfig } = require('next/experimental/testmode/playwright');\n\n${comment}\nmodule.exports = defineConfig({});`; +} + +//# sourceMappingURL=next-test.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/add-base-path.js b/build/node_modules/next/dist/client/add-base-path.js new file mode 100644 index 0000000..159ef93 --- /dev/null +++ b/build/node_modules/next/dist/client/add-base-path.js @@ -0,0 +1,24 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "addBasePath", { + enumerable: true, + get: function() { + return addBasePath; + } +}); +const _addpathprefix = require("../shared/lib/router/utils/add-path-prefix"); +const _normalizetrailingslash = require("./normalize-trailing-slash"); +const basePath = process.env.__NEXT_ROUTER_BASEPATH || ''; +function addBasePath(path, required) { + return (0, _normalizetrailingslash.normalizePathTrailingSlash)(process.env.__NEXT_MANUAL_CLIENT_BASE_PATH && !required ? path : (0, _addpathprefix.addPathPrefix)(path, basePath)); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=add-base-path.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/app-call-server.js b/build/node_modules/next/dist/client/app-call-server.js new file mode 100644 index 0000000..7b4d4d7 --- /dev/null +++ b/build/node_modules/next/dist/client/app-call-server.js @@ -0,0 +1,34 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "callServer", { + enumerable: true, + get: function() { + return callServer; + } +}); +const _react = require("react"); +const _routerreducertypes = require("./components/router-reducer/router-reducer-types"); +const _useactionqueue = require("./components/use-action-queue"); +async function callServer(actionId, actionArgs) { + return new Promise((resolve, reject)=>{ + (0, _react.startTransition)(()=>{ + (0, _useactionqueue.dispatchAppRouterAction)({ + type: _routerreducertypes.ACTION_SERVER_ACTION, + actionId, + actionArgs, + resolve, + reject + }); + }); + }); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=app-call-server.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/app-find-source-map-url.js b/build/node_modules/next/dist/client/app-find-source-map-url.js new file mode 100644 index 0000000..d2cf9d4 --- /dev/null +++ b/build/node_modules/next/dist/client/app-find-source-map-url.js @@ -0,0 +1,39 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "findSourceMapURL", { + enumerable: true, + get: function() { + return findSourceMapURL; + } +}); +const basePath = process.env.__NEXT_ROUTER_BASEPATH || ''; +const pathname = `${basePath}/__nextjs_source-map`; +const findSourceMapURL = // Source maps are only served by the dev server. +process.env.__NEXT_DEV_SERVER ? function findSourceMapURL(filename) { + if (filename === '') { + return null; + } + if (filename.startsWith(document.location.origin) && filename.includes('/_next/static')) { + // This is a request for a client chunk. This can only happen when + // using Turbopack. In this case, since we control how those source + // maps are generated, we can safely assume that the sourceMappingURL + // is relative to the filename, with an added `.map` extension. The + // browser can just request this file, and it gets served through the + // normal dev server, without the need to route this through + // the `/__nextjs_source-map` dev middleware. + return `${filename}.map`; + } + const url = new URL(pathname, document.location.origin); + url.searchParams.set('filename', filename); + return url.href; +} : undefined; + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=app-find-source-map-url.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/assign-location.js b/build/node_modules/next/dist/client/assign-location.js new file mode 100644 index 0000000..b009ec4 --- /dev/null +++ b/build/node_modules/next/dist/client/assign-location.js @@ -0,0 +1,29 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "assignLocation", { + enumerable: true, + get: function() { + return assignLocation; + } +}); +const _addbasepath = require("./add-base-path"); +function assignLocation(location, url) { + if (location.startsWith('.')) { + const urlBase = url.origin + url.pathname; + return new URL(// In order for a relative path to be added to the current url correctly, the current url must end with a slash + // new URL('./relative', 'https://example.com/subdir').href -> 'https://example.com/relative' + // new URL('./relative', 'https://example.com/subdir/').href -> 'https://example.com/subdir/relative' + (urlBase.endsWith('/') ? urlBase : urlBase + '/') + location); + } + return new URL((0, _addbasepath.addBasePath)(location), url.href); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=assign-location.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/app-router-announcer.js b/build/node_modules/next/dist/client/components/app-router-announcer.js new file mode 100644 index 0000000..f394bfb --- /dev/null +++ b/build/node_modules/next/dist/client/components/app-router-announcer.js @@ -0,0 +1,78 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "AppRouterAnnouncer", { + enumerable: true, + get: function() { + return AppRouterAnnouncer; + } +}); +const _react = require("react"); +const _reactdom = require("react-dom"); +const ANNOUNCER_TYPE = 'next-route-announcer'; +const ANNOUNCER_ID = '__next-route-announcer__'; +function getAnnouncerNode() { + const existingAnnouncer = document.getElementsByName(ANNOUNCER_TYPE)[0]; + if (existingAnnouncer?.shadowRoot?.childNodes[0]) { + return existingAnnouncer.shadowRoot.childNodes[0]; + } else { + const container = document.createElement(ANNOUNCER_TYPE); + container.style.cssText = 'position:absolute'; + const announcer = document.createElement('div'); + announcer.ariaLive = 'assertive'; + announcer.id = ANNOUNCER_ID; + announcer.role = 'alert'; + announcer.style.cssText = 'position:absolute;border:0;height:1px;margin:-1px;padding:0;width:1px;clip:rect(0 0 0 0);overflow:hidden;white-space:nowrap;word-wrap:normal'; + // Use shadow DOM here to avoid any potential CSS bleed + const shadow = container.attachShadow({ + mode: 'open' + }); + shadow.appendChild(announcer); + document.body.appendChild(container); + return announcer; + } +} +function AppRouterAnnouncer({ tree }) { + const [portalNode, setPortalNode] = (0, _react.useState)(null); + (0, _react.useEffect)(()=>{ + const announcer = getAnnouncerNode(); + setPortalNode(announcer); + return ()=>{ + const container = document.getElementsByTagName(ANNOUNCER_TYPE)[0]; + if (container?.isConnected) { + document.body.removeChild(container); + } + }; + }, []); + const [routeAnnouncement, setRouteAnnouncement] = (0, _react.useState)(''); + const previousTitle = (0, _react.useRef)(undefined); + (0, _react.useEffect)(()=>{ + let currentTitle = ''; + if (document.title) { + currentTitle = document.title; + } else { + const pageHeader = document.querySelector('h1'); + if (pageHeader) { + currentTitle = pageHeader.innerText || pageHeader.textContent || ''; + } + } + // Only announce the title change, but not for the first load because screen + // readers do that automatically. + if (previousTitle.current !== undefined && previousTitle.current !== currentTitle) { + setRouteAnnouncement(currentTitle); + } + previousTitle.current = currentTitle; + }, [ + tree + ]); + return portalNode ? /*#__PURE__*/ (0, _reactdom.createPortal)(routeAnnouncement, portalNode) : null; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=app-router-announcer.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/app-router-headers.js b/build/node_modules/next/dist/client/components/app-router-headers.js new file mode 100644 index 0000000..da91c8e --- /dev/null +++ b/build/node_modules/next/dist/client/components/app-router-headers.js @@ -0,0 +1,138 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + ACTION_HEADER: null, + FLIGHT_HEADERS: null, + NEXT_ACTION_NOT_FOUND_HEADER: null, + NEXT_ACTION_REVALIDATED_HEADER: null, + NEXT_DID_POSTPONE_HEADER: null, + NEXT_HMR_REFRESH_HASH_COOKIE: null, + NEXT_HMR_REFRESH_HEADER: null, + NEXT_HTML_REQUEST_ID_HEADER: null, + NEXT_INSTANT_PREFETCH_HEADER: null, + NEXT_INSTANT_TEST_COOKIE: null, + NEXT_IS_PRERENDER_HEADER: null, + NEXT_REQUEST_ID_HEADER: null, + NEXT_REWRITTEN_PATH_HEADER: null, + NEXT_REWRITTEN_QUERY_HEADER: null, + NEXT_ROUTER_PREFETCH_HEADER: null, + NEXT_ROUTER_SEGMENT_PREFETCH_HEADER: null, + NEXT_ROUTER_STALE_TIME_HEADER: null, + NEXT_ROUTER_STATE_TREE_HEADER: null, + NEXT_RSC_UNION_QUERY: null, + NEXT_URL: null, + RSC_CONTENT_TYPE_HEADER: null, + RSC_HEADER: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + ACTION_HEADER: function() { + return ACTION_HEADER; + }, + FLIGHT_HEADERS: function() { + return FLIGHT_HEADERS; + }, + NEXT_ACTION_NOT_FOUND_HEADER: function() { + return NEXT_ACTION_NOT_FOUND_HEADER; + }, + NEXT_ACTION_REVALIDATED_HEADER: function() { + return NEXT_ACTION_REVALIDATED_HEADER; + }, + NEXT_DID_POSTPONE_HEADER: function() { + return NEXT_DID_POSTPONE_HEADER; + }, + NEXT_HMR_REFRESH_HASH_COOKIE: function() { + return NEXT_HMR_REFRESH_HASH_COOKIE; + }, + NEXT_HMR_REFRESH_HEADER: function() { + return NEXT_HMR_REFRESH_HEADER; + }, + NEXT_HTML_REQUEST_ID_HEADER: function() { + return NEXT_HTML_REQUEST_ID_HEADER; + }, + NEXT_INSTANT_PREFETCH_HEADER: function() { + return NEXT_INSTANT_PREFETCH_HEADER; + }, + NEXT_INSTANT_TEST_COOKIE: function() { + return NEXT_INSTANT_TEST_COOKIE; + }, + NEXT_IS_PRERENDER_HEADER: function() { + return NEXT_IS_PRERENDER_HEADER; + }, + NEXT_REQUEST_ID_HEADER: function() { + return NEXT_REQUEST_ID_HEADER; + }, + NEXT_REWRITTEN_PATH_HEADER: function() { + return NEXT_REWRITTEN_PATH_HEADER; + }, + NEXT_REWRITTEN_QUERY_HEADER: function() { + return NEXT_REWRITTEN_QUERY_HEADER; + }, + NEXT_ROUTER_PREFETCH_HEADER: function() { + return NEXT_ROUTER_PREFETCH_HEADER; + }, + NEXT_ROUTER_SEGMENT_PREFETCH_HEADER: function() { + return NEXT_ROUTER_SEGMENT_PREFETCH_HEADER; + }, + NEXT_ROUTER_STALE_TIME_HEADER: function() { + return NEXT_ROUTER_STALE_TIME_HEADER; + }, + NEXT_ROUTER_STATE_TREE_HEADER: function() { + return NEXT_ROUTER_STATE_TREE_HEADER; + }, + NEXT_RSC_UNION_QUERY: function() { + return NEXT_RSC_UNION_QUERY; + }, + NEXT_URL: function() { + return NEXT_URL; + }, + RSC_CONTENT_TYPE_HEADER: function() { + return RSC_CONTENT_TYPE_HEADER; + }, + RSC_HEADER: function() { + return RSC_HEADER; + } +}); +const RSC_HEADER = 'rsc'; +const ACTION_HEADER = 'next-action'; +const NEXT_ROUTER_STATE_TREE_HEADER = 'next-router-state-tree'; +const NEXT_ROUTER_PREFETCH_HEADER = 'next-router-prefetch'; +const NEXT_ROUTER_SEGMENT_PREFETCH_HEADER = 'next-router-segment-prefetch'; +const NEXT_HMR_REFRESH_HEADER = 'next-hmr-refresh'; +const NEXT_HMR_REFRESH_HASH_COOKIE = '__next_hmr_refresh_hash__'; +const NEXT_URL = 'next-url'; +const RSC_CONTENT_TYPE_HEADER = 'text/x-component'; +const NEXT_INSTANT_PREFETCH_HEADER = 'next-instant-navigation-testing-prefetch'; +const NEXT_INSTANT_TEST_COOKIE = 'next-instant-navigation-testing'; +const FLIGHT_HEADERS = [ + RSC_HEADER, + NEXT_ROUTER_STATE_TREE_HEADER, + NEXT_ROUTER_PREFETCH_HEADER, + NEXT_HMR_REFRESH_HEADER, + NEXT_ROUTER_SEGMENT_PREFETCH_HEADER +]; +const NEXT_RSC_UNION_QUERY = '_rsc'; +const NEXT_ROUTER_STALE_TIME_HEADER = 'x-nextjs-stale-time'; +const NEXT_DID_POSTPONE_HEADER = 'x-nextjs-postponed'; +const NEXT_REWRITTEN_PATH_HEADER = 'x-nextjs-rewritten-path'; +const NEXT_REWRITTEN_QUERY_HEADER = 'x-nextjs-rewritten-query'; +const NEXT_IS_PRERENDER_HEADER = 'x-nextjs-prerender'; +const NEXT_ACTION_NOT_FOUND_HEADER = 'x-nextjs-action-not-found'; +const NEXT_REQUEST_ID_HEADER = 'x-nextjs-request-id'; +const NEXT_HTML_REQUEST_ID_HEADER = 'x-nextjs-html-request-id'; +const NEXT_ACTION_REVALIDATED_HEADER = 'x-action-revalidated'; + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=app-router-headers.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/app-router-instance.js b/build/node_modules/next/dist/client/components/app-router-instance.js new file mode 100644 index 0000000..07b932e --- /dev/null +++ b/build/node_modules/next/dist/client/components/app-router-instance.js @@ -0,0 +1,397 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createMutableActionQueue: null, + dispatchNavigateAction: null, + dispatchTraverseAction: null, + getCurrentAppRouterState: null, + publicAppRouterInstance: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createMutableActionQueue: function() { + return createMutableActionQueue; + }, + dispatchNavigateAction: function() { + return dispatchNavigateAction; + }, + dispatchTraverseAction: function() { + return dispatchTraverseAction; + }, + getCurrentAppRouterState: function() { + return getCurrentAppRouterState; + }, + publicAppRouterInstance: function() { + return publicAppRouterInstance; + } +}); +const _routerreducertypes = require("./router-reducer/router-reducer-types"); +const _routerreducer = require("./router-reducer/router-reducer"); +const _react = require("react"); +const _isthenable = require("../../shared/lib/is-thenable"); +const _types = require("./segment-cache/types"); +const _prefetch = require("./segment-cache/prefetch"); +const _navigation = require("./segment-cache/navigation"); +const _useactionqueue = require("./use-action-queue"); +const _optimisticroutes = require("./segment-cache/optimistic-routes"); +const _pprnavigations = require("./router-reducer/ppr-navigations"); +const _addbasepath = require("../add-base-path"); +const _approuterutils = require("./app-router-utils"); +const _links = require("./links"); +const _javascripturl = require("../lib/javascript-url"); +function runRemainingActions(actionQueue, setState) { + if (actionQueue.pending !== null) { + actionQueue.pending = actionQueue.pending.next; + if (actionQueue.pending !== null) { + runAction({ + actionQueue, + action: actionQueue.pending, + setState + }); + } + } else { + // Check for refresh when pending is already null + // This handles the case where a discarded server action completes + // after the navigation has already finished and the queue is empty + if (actionQueue.needsRefresh) { + actionQueue.needsRefresh = false; + actionQueue.dispatch({ + type: _routerreducertypes.ACTION_REFRESH + }, setState); + } + } +} +async function runAction({ actionQueue, action, setState }) { + const prevState = actionQueue.state; + actionQueue.pending = action; + const payload = action.payload; + const actionResult = actionQueue.action(prevState, payload); + function handleResult(nextState) { + // if we discarded this action, the state should also be discarded + if (action.discarded) { + // Check if the discarded server action revalidated data + if (action.payload.type === _routerreducertypes.ACTION_SERVER_ACTION && action.payload.didRevalidate) { + // The server action was discarded but it revalidated data, + // mark that we need to refresh after all actions complete + actionQueue.needsRefresh = true; + } + // Still need to run remaining actions even for discarded actions + // to potentially trigger the refresh + runRemainingActions(actionQueue, setState); + return; + } + actionQueue.state = nextState; + runRemainingActions(actionQueue, setState); + action.resolve(nextState); + } + // if the action is a promise, set up a callback to resolve it + if ((0, _isthenable.isThenable)(actionResult)) { + actionResult.then(handleResult, (err)=>{ + runRemainingActions(actionQueue, setState); + action.reject(err); + }); + } else { + handleResult(actionResult); + } +} +function dispatchAction(actionQueue, payload, setState) { + let resolvers = { + resolve: setState, + reject: ()=>{} + }; + // most of the action types are async with the exception of restore + // it's important that restore is handled quickly since it's fired on the popstate event + // and we don't want to add any delay on a back/forward nav + // this only creates a promise for the async actions + if (payload.type !== _routerreducertypes.ACTION_RESTORE) { + // Create the promise and assign the resolvers to the object. + const deferredPromise = new Promise((resolve, reject)=>{ + resolvers = { + resolve, + reject + }; + }); + (0, _react.startTransition)(()=>{ + // we immediately notify React of the pending promise -- the resolver is attached to the action node + // and will be called when the associated action promise resolves + setState(deferredPromise); + }); + } + const newAction = { + payload, + next: null, + resolve: resolvers.resolve, + reject: resolvers.reject + }; + // Check if the queue is empty + if (actionQueue.pending === null) { + // The queue is empty, so add the action and start it immediately + // Mark this action as the last in the queue + actionQueue.last = newAction; + runAction({ + actionQueue, + action: newAction, + setState + }); + } else if (payload.type === _routerreducertypes.ACTION_NAVIGATE || payload.type === _routerreducertypes.ACTION_RESTORE) { + // Navigations (including back/forward) take priority over any pending actions. + // Mark the pending action as discarded (so the state is never applied) and start the navigation action immediately. + actionQueue.pending.discarded = true; + // The rest of the current queue should still execute after this navigation. + // (Note that it can't contain any earlier navigations, because we always put those into `actionQueue.pending` by calling `runAction`) + newAction.next = actionQueue.pending.next; + runAction({ + actionQueue, + action: newAction, + setState + }); + } else { + // The queue is not empty, so add the action to the end of the queue + // It will be started by runRemainingActions after the previous action finishes + if (actionQueue.last !== null) { + actionQueue.last.next = newAction; + } + actionQueue.last = newAction; + } +} +let globalActionQueue = null; +function createMutableActionQueue(initialState, instrumentationHooks) { + const actionQueue = { + state: initialState, + dispatch: (payload, setState)=>dispatchAction(actionQueue, payload, setState), + action: async (state, action)=>{ + const result = (0, _routerreducer.reducer)(state, action); + return result; + }, + pending: null, + last: null, + onRouterTransitionStart: instrumentationHooks !== null && typeof instrumentationHooks.onRouterTransitionStart === 'function' ? instrumentationHooks.onRouterTransitionStart : null + }; + if (typeof window !== 'undefined') { + // The action queue is lazily created on hydration, but after that point + // it doesn't change. So we can store it in a global rather than pass + // it around everywhere via props/context. + if (globalActionQueue !== null) { + throw Object.defineProperty(new Error('Internal Next.js Error: createMutableActionQueue was called more ' + 'than once'), "__NEXT_ERROR_CODE", { + value: "E624", + enumerable: false, + configurable: true + }); + } + globalActionQueue = actionQueue; + } + return actionQueue; +} +function getCurrentAppRouterState() { + return globalActionQueue !== null ? globalActionQueue.state : null; +} +function getAppRouterActionQueue() { + if (globalActionQueue === null) { + throw Object.defineProperty(new Error('Internal Next.js error: Router action dispatched before initialization.'), "__NEXT_ERROR_CODE", { + value: "E668", + enumerable: false, + configurable: true + }); + } + return globalActionQueue; +} +function getProfilingHookForOnNavigationStart() { + if (globalActionQueue !== null) { + return globalActionQueue.onRouterTransitionStart; + } + return null; +} +function dispatchNavigateAction(href, navigateType, scrollBehavior, linkInstanceRef, transitionTypes) { + // TODO: This stuff could just go into the reducer. Leaving as-is for now + // since we're about to rewrite all the router reducer stuff anyway. + if (transitionTypes) { + for (const type of transitionTypes){ + (0, _react.addTransitionType)(type); + } + } + const url = new URL((0, _addbasepath.addBasePath)(href), location.href); + if (process.env.__NEXT_APP_NAV_FAIL_HANDLING) { + window.next.__pendingUrl = url; + } + (0, _links.setLinkForCurrentNavigation)(linkInstanceRef); + const onRouterTransitionStart = getProfilingHookForOnNavigationStart(); + if (onRouterTransitionStart !== null) { + onRouterTransitionStart(href, navigateType); + } + (0, _useactionqueue.dispatchAppRouterAction)({ + type: _routerreducertypes.ACTION_NAVIGATE, + url, + isExternalUrl: (0, _approuterutils.isExternalURL)(url), + locationSearch: location.search, + scrollBehavior, + navigateType + }); +} +function dispatchTraverseAction(href, historyState) { + const onRouterTransitionStart = getProfilingHookForOnNavigationStart(); + if (onRouterTransitionStart !== null) { + onRouterTransitionStart(href, 'traverse'); + } + (0, _useactionqueue.dispatchAppRouterAction)({ + type: _routerreducertypes.ACTION_RESTORE, + url: new URL(href), + historyState + }); +} +/** + * (Experimental) Perform a gesture navigation. This dispatches through React's + * useOptimistic instead of the main action queue, allowing the state to be + * shown during a gesture transition and discarded when the canonical navigation + * completes. + * + * Only available when experimental.gestureTransition is enabled. + */ function gesturePush(href, options) { + if (process.env.__NEXT_GESTURE_TRANSITION) { + // TODO: Trigger a prefetch so the cache starts populating if there isn't + // already a prefetch for this route. + if ((0, _javascripturl.isJavaScriptURLString)(href)) { + throw Object.defineProperty(new Error('Next.js has blocked a javascript: URL as a security precaution.'), "__NEXT_ERROR_CODE", { + value: "E978", + enumerable: false, + configurable: true + }); + } + const state = getCurrentAppRouterState(); + if (state === null) { + return; + } + const url = new URL((0, _addbasepath.addBasePath)(href), location.href); + if ((0, _approuterutils.isExternalURL)(url)) { + return; + } + // Fork the router state for the duration of the gesture transition. + const currentUrl = new URL(state.canonicalUrl, location.href); + const scrollBehavior = options?.scroll === false ? _routerreducertypes.ScrollBehavior.NoScroll : _routerreducertypes.ScrollBehavior.Default; + // This is a special freshness policy that prevents dynamic requests from + // being spawned. During the gesture, we should only show the cached + // prefetched UI, not dynamic data. + // TODO: In the case of navigations to an unknown route, this will still + // end up performing a dynamic request. The plan is to do prefetch instead. + // There's a separate TODO for this. + const freshnessPolicy = _pprnavigations.FreshnessPolicy.Gesture; + const forkedGestureState = (0, _navigation.navigate)(state, url, currentUrl, state.renderedSearch, state.cache, state.tree, state.nextUrl, freshnessPolicy, scrollBehavior, 'push'); + (0, _useactionqueue.dispatchGestureState)(forkedGestureState); + } +} +const publicAppRouterInstance = { + back: ()=>window.history.back(), + forward: ()=>window.history.forward(), + prefetch: // Unlike the old implementation, the Segment Cache doesn't store its + // data in the router reducer state; it writes into a global mutable + // cache. So we don't need to dispatch an action. + (href, options)=>{ + if ((0, _javascripturl.isJavaScriptURLString)(href)) { + throw Object.defineProperty(new Error('Next.js has blocked a javascript: URL as a security precaution.'), "__NEXT_ERROR_CODE", { + value: "E978", + enumerable: false, + configurable: true + }); + } + const actionQueue = getAppRouterActionQueue(); + const prefetchKind = options?.kind ?? _routerreducertypes.PrefetchKind.AUTO; + // We don't currently offer a way to issue a runtime prefetch via `router.prefetch()`. + // This will be possible when we update its API to not take a PrefetchKind. + let fetchStrategy; + switch(prefetchKind){ + case _routerreducertypes.PrefetchKind.AUTO: + { + // We default to PPR. We'll discover whether or not the route supports it with the initial prefetch. + fetchStrategy = _types.FetchStrategy.PPR; + break; + } + case _routerreducertypes.PrefetchKind.FULL: + { + fetchStrategy = _types.FetchStrategy.Full; + break; + } + default: + { + prefetchKind; + // Despite typescript thinking that this can't happen, + // we might get an unexpected value from user code. + // We don't know what they want, but we know they want a prefetch, + // so use the default. + fetchStrategy = _types.FetchStrategy.PPR; + } + } + (0, _prefetch.prefetch)(href, actionQueue.state.nextUrl, actionQueue.state.tree, fetchStrategy, options?.onInvalidate ?? null); + }, + replace: (href, options)=>{ + if ((0, _javascripturl.isJavaScriptURLString)(href)) { + throw Object.defineProperty(new Error('Next.js has blocked a javascript: URL as a security precaution.'), "__NEXT_ERROR_CODE", { + value: "E978", + enumerable: false, + configurable: true + }); + } + (0, _react.startTransition)(()=>{ + dispatchNavigateAction(href, 'replace', options?.scroll === false ? _routerreducertypes.ScrollBehavior.NoScroll : _routerreducertypes.ScrollBehavior.Default, null, options?.transitionTypes); + }); + }, + push: (href, options)=>{ + if ((0, _javascripturl.isJavaScriptURLString)(href)) { + throw Object.defineProperty(new Error('Next.js has blocked a javascript: URL as a security precaution.'), "__NEXT_ERROR_CODE", { + value: "E978", + enumerable: false, + configurable: true + }); + } + (0, _react.startTransition)(()=>{ + dispatchNavigateAction(href, 'push', options?.scroll === false ? _routerreducertypes.ScrollBehavior.NoScroll : _routerreducertypes.ScrollBehavior.Default, null, options?.transitionTypes); + }); + }, + refresh: ()=>{ + (0, _react.startTransition)(()=>{ + (0, _useactionqueue.dispatchAppRouterAction)({ + type: _routerreducertypes.ACTION_REFRESH + }); + }); + }, + hmrRefresh: ()=>{ + if (process.env.NODE_ENV !== 'development') { + throw Object.defineProperty(new Error('hmrRefresh can only be used in development mode. Please use refresh instead.'), "__NEXT_ERROR_CODE", { + value: "E485", + enumerable: false, + configurable: true + }); + } else { + // Reset the known routes table so that route predictions are cleared + // when routes change during development. + (0, _optimisticroutes.resetKnownRoutes)(); + (0, _react.startTransition)(()=>{ + (0, _useactionqueue.dispatchAppRouterAction)({ + type: _routerreducertypes.ACTION_HMR_REFRESH + }); + }); + } + } +}; +// Conditionally add experimental_gesturePush when gestureTransition is enabled +if (process.env.__NEXT_GESTURE_TRANSITION) { + ; + publicAppRouterInstance.experimental_gesturePush = gesturePush; +} +// Exists for debugging purposes. Don't use in application code. +if (typeof window !== 'undefined' && window.next) { + window.next.router = publicAppRouterInstance; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=app-router-instance.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/app-router-utils.js b/build/node_modules/next/dist/client/components/app-router-utils.js new file mode 100644 index 0000000..d372d26 --- /dev/null +++ b/build/node_modules/next/dist/client/components/app-router-utils.js @@ -0,0 +1,62 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createPrefetchURL: null, + isExternalURL: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createPrefetchURL: function() { + return createPrefetchURL; + }, + isExternalURL: function() { + return isExternalURL; + } +}); +const _isbot = require("../../shared/lib/router/utils/is-bot"); +const _addbasepath = require("../add-base-path"); +function isExternalURL(url) { + return url.origin !== window.location.origin; +} +function createPrefetchURL(href) { + // Don't prefetch for bots as they don't navigate. + if ((0, _isbot.isBot)(window.navigator.userAgent)) { + return null; + } + let url; + try { + url = new URL((0, _addbasepath.addBasePath)(href), window.location.href); + } catch (_) { + // TODO: Does this need to throw or can we just console.error instead? Does + // anyone rely on this throwing? (Seems unlikely.) + throw Object.defineProperty(new Error(`Cannot prefetch '${href}' because it cannot be converted to a URL.`), "__NEXT_ERROR_CODE", { + value: "E234", + enumerable: false, + configurable: true + }); + } + // Don't prefetch during development (improves compilation performance) + if (process.env.NODE_ENV === 'development') { + return null; + } + // External urls can't be prefetched in the same way. + if (isExternalURL(url)) { + return null; + } + return url; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=app-router-utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/app-router.js b/build/node_modules/next/dist/client/components/app-router.js new file mode 100644 index 0000000..560525f --- /dev/null +++ b/build/node_modules/next/dist/client/components/app-router.js @@ -0,0 +1,514 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "default", { + enumerable: true, + get: function() { + return AppRouter; + } +}); +const _interop_require_default = require("@swc/helpers/_/_interop_require_default"); +const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard"); +const _jsxruntime = require("react/jsx-runtime"); +const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react")); +const _approutercontextsharedruntime = require("../../shared/lib/app-router-context.shared-runtime"); +const _routerreducertypes = require("./router-reducer/router-reducer-types"); +const _createhreffromurl = require("./router-reducer/create-href-from-url"); +const _hooksclientcontextsharedruntime = require("../../shared/lib/hooks-client-context.shared-runtime"); +const _useactionqueue = require("./use-action-queue"); +const _committedstate = require("./router-reducer/reducers/committed-state"); +const _approuterannouncer = require("./app-router-announcer"); +const _redirectboundary = require("./redirect-boundary"); +const _findheadincache = require("./router-reducer/reducers/find-head-in-cache"); +const _unresolvedthenable = require("./unresolved-thenable"); +const _removebasepath = require("../remove-base-path"); +const _hasbasepath = require("../has-base-path"); +const _computechangedpath = require("./router-reducer/compute-changed-path"); +const _navfailurehandler = require("./nav-failure-handler"); +const _approuterinstance = require("./app-router-instance"); +const _redirect = require("./redirect"); +const _redirecterror = require("./redirect-error"); +const _links = require("./links"); +const _rooterrorboundary = /*#__PURE__*/ _interop_require_default._(require("./errors/root-error-boundary")); +const _globalerror = /*#__PURE__*/ _interop_require_default._(require("./builtin/global-error")); +const _boundarycomponents = require("../../lib/framework/boundary-components"); +const _deploymentid = require("../../shared/lib/deployment-id"); +const globalMutable = {}; +function HistoryUpdater({ appRouterState }) { + (0, _react.useInsertionEffect)(()=>{ + if (process.env.__NEXT_APP_NAV_FAIL_HANDLING) { + // clear pending URL as navigation is no longer + // in flight + window.next.__pendingUrl = undefined; + } + const { tree, pushRef, canonicalUrl, renderedSearch } = appRouterState; + const appHistoryState = { + tree, + renderedSearch + }; + // TODO: Use Navigation API if available + const historyState = { + ...pushRef.preserveCustomHistoryState ? window.history.state : {}, + // Identifier is shortened intentionally. + // __NA is used to identify if the history entry can be handled by the app-router. + // __N is used to identify if the history entry can be handled by the old router. + __NA: true, + __PRIVATE_NEXTJS_INTERNALS_TREE: appHistoryState + }; + if (pushRef.pendingPush && // Skip pushing an additional history entry if the canonicalUrl is the same as the current url. + // This mirrors the browser behavior for normal navigation. + (0, _createhreffromurl.createHrefFromUrl)(new URL(window.location.href)) !== canonicalUrl) { + // This intentionally mutates React state, pushRef is overwritten to ensure additional push/replace calls do not trigger an additional history entry. + pushRef.pendingPush = false; + window.history.pushState(historyState, '', canonicalUrl); + } else { + window.history.replaceState(historyState, '', canonicalUrl); + } + (0, _committedstate.setLastCommittedTree)(tree); + }, [ + appRouterState + ]); + (0, _react.useEffect)(()=>{ + // The Next-Url and the base tree may affect the result of a prefetch + // task. Re-prefetch all visible links with the updated values. In most + // cases, this will not result in any new network requests, only if + // the prefetch result actually varies on one of these inputs. + (0, _links.pingVisibleLinks)(appRouterState.nextUrl, appRouterState.tree); + }, [ + appRouterState.nextUrl, + appRouterState.tree + ]); + return null; +} +function copyNextJsInternalHistoryState(data) { + if (data == null) data = {}; + const currentState = window.history.state; + const __NA = currentState?.__NA; + if (__NA) { + data.__NA = __NA; + } + const __PRIVATE_NEXTJS_INTERNALS_TREE = currentState?.__PRIVATE_NEXTJS_INTERNALS_TREE; + if (__PRIVATE_NEXTJS_INTERNALS_TREE) { + data.__PRIVATE_NEXTJS_INTERNALS_TREE = __PRIVATE_NEXTJS_INTERNALS_TREE; + } + return data; +} +function Head({ headCacheNode }) { + // If this segment has a `prefetchHead`, it's the statically prefetched data. + // We should use that on initial render instead of `head`. Then we'll switch + // to `head` when the dynamic response streams in. + const head = headCacheNode !== null ? headCacheNode.head : null; + const prefetchHead = headCacheNode !== null ? headCacheNode.prefetchHead : null; + // If no prefetch data is available, then we go straight to rendering `head`. + const resolvedPrefetchRsc = prefetchHead !== null ? prefetchHead : head; + // We use `useDeferredValue` to handle switching between the prefetched and + // final values. The second argument is returned on initial render, then it + // re-renders with the first argument. + return (0, _react.useDeferredValue)(head, resolvedPrefetchRsc); +} +/** + * The global router that wraps the application components. + */ function Router({ actionQueue, globalError, webSocket, staticIndicatorState }) { + const state = (0, _useactionqueue.useActionQueue)(actionQueue); + const { canonicalUrl } = state; + // Add memoized pathname/query for useSearchParams and usePathname. + const { searchParams, pathname } = (0, _react.useMemo)(()=>{ + const url = new URL(canonicalUrl, typeof window === 'undefined' ? 'http://n' : window.location.href); + return { + // This is turned into a readonly class in `useSearchParams` + searchParams: url.searchParams, + pathname: (0, _hasbasepath.hasBasePath)(url.pathname) ? (0, _removebasepath.removeBasePath)(url.pathname) : url.pathname + }; + }, [ + canonicalUrl + ]); + if (process.env.NODE_ENV !== 'production') { + const { cache, tree } = state; + // This hook is in a conditional but that is ok because `process.env.NODE_ENV` never changes + // eslint-disable-next-line react-hooks/rules-of-hooks + (0, _react.useEffect)(()=>{ + // Add `window.nd` for debugging purposes. + // This is not meant for use in applications as concurrent rendering will affect the cache/tree/router. + // @ts-ignore this is for debugging + window.nd = { + router: _approuterinstance.publicAppRouterInstance, + cache, + tree + }; + }, [ + cache, + tree + ]); + } + (0, _react.useEffect)(()=>{ + const sourcePage = (0, _computechangedpath.extractSourcePageFromFlightRouterState)(state.tree); + if (sourcePage !== undefined) { + window.next.__internal_src_page = sourcePage; + } else { + delete window.next.__internal_src_page; + } + }, [ + state.tree + ]); + (0, _react.useEffect)(()=>{ + // If the app is restored from bfcache, it's possible that + // pushRef.mpaNavigation is true, which would mean that any re-render of this component + // would trigger the mpa navigation logic again from the lines below. + // This will restore the router to the initial state in the event that the app is restored from bfcache. + function handlePageShow(event) { + if (!event.persisted || !window.history.state?.__PRIVATE_NEXTJS_INTERNALS_TREE) { + return; + } + // Clear the pendingMpaPath value so that a subsequent MPA navigation to the same URL can be triggered. + // This is necessary because if the browser restored from bfcache, the pendingMpaPath would still be set to the value + // of the last MPA navigation. + globalMutable.pendingMpaPath = undefined; + (0, _useactionqueue.dispatchAppRouterAction)({ + type: _routerreducertypes.ACTION_RESTORE, + url: new URL(window.location.href), + historyState: window.history.state.__PRIVATE_NEXTJS_INTERNALS_TREE + }); + } + window.addEventListener('pageshow', handlePageShow); + return ()=>{ + window.removeEventListener('pageshow', handlePageShow); + }; + }, []); + (0, _react.useEffect)(()=>{ + // Ensure that any redirect errors that bubble up outside of the RedirectBoundary + // are caught and handled by the router. + function handleUnhandledRedirect(event) { + const error = 'reason' in event ? event.reason : event.error; + if ((0, _redirecterror.isRedirectError)(error)) { + event.preventDefault(); + const url = (0, _redirect.getURLFromRedirectError)(error); + const redirectType = (0, _redirect.getRedirectTypeFromError)(error); + // TODO: This should access the router methods directly, rather than + // go through the public interface. + if (redirectType === 'push') { + _approuterinstance.publicAppRouterInstance.push(url, {}); + } else { + _approuterinstance.publicAppRouterInstance.replace(url, {}); + } + } + } + window.addEventListener('error', handleUnhandledRedirect); + window.addEventListener('unhandledrejection', handleUnhandledRedirect); + return ()=>{ + window.removeEventListener('error', handleUnhandledRedirect); + window.removeEventListener('unhandledrejection', handleUnhandledRedirect); + }; + }, []); + // When mpaNavigation flag is set do a hard navigation to the new url. + // Infinitely suspend because we don't actually want to rerender any child + // components with the new URL and any entangled state updates shouldn't + // commit either (eg: useTransition isPending should stay true until the page + // unloads). + // + // This is a side effect in render. Don't try this at home, kids. It's + // probably safe because we know this is a singleton component and it's never + // in . At least I hope so. (It will run twice in dev strict mode, + // but that's... fine?) + const { pushRef } = state; + if (pushRef.mpaNavigation) { + // if there's a re-render, we don't want to trigger another redirect if one is already in flight to the same URL + if (globalMutable.pendingMpaPath !== canonicalUrl) { + const location = window.location; + if (pushRef.pendingPush) { + location.assign(canonicalUrl); + } else { + location.replace(canonicalUrl); + } + globalMutable.pendingMpaPath = canonicalUrl; + } + // TODO-APP: Should we listen to navigateerror here to catch failed + // navigations somehow? And should we call window.stop() if a SPA navigation + // should interrupt an MPA one? + // NOTE: This is intentionally using `throw` instead of `use` because we're + // inside an externally mutable condition (pushRef.mpaNavigation), which + // violates the rules of hooks. + throw _unresolvedthenable.unresolvedThenable; + } + (0, _react.useEffect)(()=>{ + const originalPushState = window.history.pushState.bind(window.history); + const originalReplaceState = window.history.replaceState.bind(window.history); + // Ensure the canonical URL in the Next.js Router is updated when the URL is changed so that `usePathname` and `useSearchParams` hold the pushed values. + const applyUrlFromHistoryPushReplace = (url)=>{ + const href = window.location.href; + const appHistoryState = window.history.state?.__PRIVATE_NEXTJS_INTERNALS_TREE; + (0, _react.startTransition)(()=>{ + (0, _useactionqueue.dispatchAppRouterAction)({ + type: _routerreducertypes.ACTION_RESTORE, + url: new URL(url ?? href, href), + historyState: appHistoryState + }); + }); + }; + /** + * Patch pushState to ensure external changes to the history are reflected in the Next.js Router. + * Ensures Next.js internal history state is copied to the new history entry. + * Ensures usePathname and useSearchParams hold the newly provided url. + */ window.history.pushState = function pushState(data, _unused, url) { + // TODO: Warn when Navigation API is available (navigation.navigate() should be used) + // Avoid a loop when Next.js internals trigger pushState/replaceState + if (data?.__NA || data?._N) { + return originalPushState(data, _unused, url); + } + data = copyNextJsInternalHistoryState(data); + if (url) { + applyUrlFromHistoryPushReplace(url); + } + return originalPushState(data, _unused, url); + }; + /** + * Patch replaceState to ensure external changes to the history are reflected in the Next.js Router. + * Ensures Next.js internal history state is copied to the new history entry. + * Ensures usePathname and useSearchParams hold the newly provided url. + */ window.history.replaceState = function replaceState(data, _unused, url) { + // TODO: Warn when Navigation API is available (navigation.navigate() should be used) + // Avoid a loop when Next.js internals trigger pushState/replaceState + if (data?.__NA || data?._N) { + return originalReplaceState(data, _unused, url); + } + data = copyNextJsInternalHistoryState(data); + if (url) { + applyUrlFromHistoryPushReplace(url); + } + return originalReplaceState(data, _unused, url); + }; + /** + * Handle popstate event, this is used to handle back/forward in the browser. + * By default dispatches ACTION_RESTORE, however if the history entry was not pushed/replaced by app-router it will reload the page. + * That case can happen when the old router injected the history entry. + */ const onPopState = (event)=>{ + if (!event.state) { + // TODO-APP: this case only happens when pushState/replaceState was called outside of Next.js. It should probably reload the page in this case. + return; + } + // This case happens when the history entry was pushed by the `pages` router. + if (!event.state.__NA) { + window.location.reload(); + return; + } + // TODO-APP: Ideally the back button should not use startTransition as it should apply the updates synchronously + // Without startTransition works if the cache is there for this path + (0, _react.startTransition)(()=>{ + (0, _approuterinstance.dispatchTraverseAction)(window.location.href, event.state.__PRIVATE_NEXTJS_INTERNALS_TREE); + }); + }; + // Register popstate event to call onPopstate. + window.addEventListener('popstate', onPopState); + return ()=>{ + window.history.pushState = originalPushState; + window.history.replaceState = originalReplaceState; + window.removeEventListener('popstate', onPopState); + }; + }, []); + const { cache, tree, nextUrl, focusAndScrollRef, previousNextUrl } = state; + const matchingHead = (0, _react.useMemo)(()=>{ + return (0, _findheadincache.findHeadInCache)(cache, tree[1]); + }, [ + cache, + tree + ]); + // Add memoized pathParams for useParams. + const pathParams = (0, _react.useMemo)(()=>{ + return (0, _computechangedpath.getSelectedParams)(tree); + }, [ + tree + ]); + // Create instrumented promises for navigation hooks (dev-only) + // These are specially instrumented promises to show in the Suspense DevTools + // Promises are cached outside of render to survive suspense retries. + let instrumentedNavigationPromises = null; + if (process.env.NODE_ENV !== 'production') { + const { createRootNavigationPromises } = require('./navigation-devtools'); + instrumentedNavigationPromises = createRootNavigationPromises(tree, pathname, searchParams, pathParams); + } + const layoutRouterContext = (0, _react.useMemo)(()=>{ + return { + parentTree: tree, + parentCacheNode: cache, + parentSegmentPath: null, + parentParams: {}, + parentLoadingData: null, + // This is the "name" that shows up in the Suspense DevTools. + // It represents the root of the app. + debugNameContext: '/', + // Root node always has `url` + // Provided in AppTreeContext to ensure it can be overwritten in layout-router + url: canonicalUrl, + // Root segment is always active + isActive: true + }; + }, [ + tree, + cache, + canonicalUrl + ]); + const globalLayoutRouterContext = (0, _react.useMemo)(()=>{ + return { + tree, + focusAndScrollRef, + nextUrl, + previousNextUrl + }; + }, [ + tree, + focusAndScrollRef, + nextUrl, + previousNextUrl + ]); + let head; + if (matchingHead !== null) { + // The head is wrapped in an extra component so we can use + // `useDeferredValue` to swap between the prefetched and final versions of + // the head. (This is what LayoutRouter does for segment data, too.) + // + // The `key` is used to remount the component whenever the head moves to + // a different segment. + const [headCacheNode, headKey, headKeyWithoutSearchParams] = matchingHead; + head = /*#__PURE__*/ (0, _jsxruntime.jsx)(Head, { + headCacheNode: headCacheNode + }, // Necessary for PPR: omit search params from the key to match prerendered keys + typeof window === 'undefined' ? headKeyWithoutSearchParams : headKey); + } else { + head = null; + } + let content = /*#__PURE__*/ (0, _jsxruntime.jsxs)(_redirectboundary.RedirectBoundary, { + children: [ + head, + /*#__PURE__*/ (0, _jsxruntime.jsx)(_boundarycomponents.RootLayoutBoundary, { + children: cache.rsc + }), + /*#__PURE__*/ (0, _jsxruntime.jsx)(_approuterannouncer.AppRouterAnnouncer, { + tree: tree + }) + ] + }); + if (process.env.__NEXT_DEV_SERVER) { + // In development, we apply few error boundaries and hot-reloader: + // - DevRootHTTPAccessFallbackBoundary: avoid using navigation API like notFound() in root layout + // - HotReloader: + // - hot-reload the app when the code changes + // - render dev overlay + // - catch runtime errors and display global-error when necessary + if (typeof window !== 'undefined') { + const { DevRootHTTPAccessFallbackBoundary } = require('./dev-root-http-access-fallback-boundary'); + content = /*#__PURE__*/ (0, _jsxruntime.jsx)(DevRootHTTPAccessFallbackBoundary, { + children: content + }); + } + const HotReloader = require('../dev/hot-reloader/app/hot-reloader-app').default; + content = /*#__PURE__*/ (0, _jsxruntime.jsx)(HotReloader, { + globalError: globalError, + webSocket: webSocket, + staticIndicatorState: staticIndicatorState, + children: content + }); + } else { + content = /*#__PURE__*/ (0, _jsxruntime.jsx)(_rooterrorboundary.default, { + errorComponent: globalError[0], + errorStyles: globalError[1], + children: content + }); + } + return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, { + children: [ + /*#__PURE__*/ (0, _jsxruntime.jsx)(HistoryUpdater, { + appRouterState: state + }), + process.env.TURBOPACK ? null : /*#__PURE__*/ (0, _jsxruntime.jsx)(RuntimeStylesForWebpack, {}), + /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.NavigationPromisesContext.Provider, { + value: instrumentedNavigationPromises, + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.PathParamsContext.Provider, { + value: pathParams, + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.PathnameContext.Provider, { + value: pathname, + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.SearchParamsContext.Provider, { + value: searchParams, + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.GlobalLayoutRouterContext.Provider, { + value: globalLayoutRouterContext, + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.AppRouterContext.Provider, { + value: _approuterinstance.publicAppRouterInstance, + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.LayoutRouterContext.Provider, { + value: layoutRouterContext, + children: content + }) + }) + }) + }) + }) + }) + }) + ] + }); +} +function AppRouter({ actionQueue, globalErrorState, webSocket, staticIndicatorState }) { + (0, _navfailurehandler.useNavFailureHandler)(); + const router = /*#__PURE__*/ (0, _jsxruntime.jsx)(Router, { + actionQueue: actionQueue, + globalError: globalErrorState, + webSocket: webSocket, + staticIndicatorState: staticIndicatorState + }); + // At the very top level, use the default GlobalError component as the final fallback. + // When the app router itself fails, which means the framework itself fails, we show the default error. + return /*#__PURE__*/ (0, _jsxruntime.jsx)(_rooterrorboundary.default, { + errorComponent: _globalerror.default, + children: router + }); +} +let runtimeStyles; +let runtimeStyleChanged; +if (!process.env.TURBOPACK && typeof window !== 'undefined') { + runtimeStyles = new Set(); + runtimeStyleChanged = new Set(); + globalThis._N_E_STYLE_LOAD = function(href) { + if (!runtimeStyles || !runtimeStyleChanged) return Promise.resolve(); + let len = runtimeStyles.size; + runtimeStyles.add(href); + if (runtimeStyles.size !== len) { + runtimeStyleChanged.forEach((cb)=>cb()); + } + // TODO figure out how to get a promise here + // But maybe it's not necessary as react would block rendering until it's loaded + return Promise.resolve(); + }; +} +function RuntimeStylesForWebpack() { + const [, forceUpdate] = _react.default.useState(0); + const renderedStylesSize = runtimeStyles?.size ?? 0; + (0, _react.useEffect)(()=>{ + if (!runtimeStyles || !runtimeStyleChanged) return; + const changed = ()=>forceUpdate((c)=>c + 1); + runtimeStyleChanged.add(changed); + if (renderedStylesSize !== runtimeStyles.size) { + changed(); + } + return ()=>{ + runtimeStyleChanged.delete(changed); + }; + }, [ + renderedStylesSize, + forceUpdate + ]); + const query = (0, _deploymentid.getAssetTokenQuery)(); + return [ + ...runtimeStyles || [] + ].map((href, i)=>/*#__PURE__*/ (0, _jsxruntime.jsx)("link", { + rel: "stylesheet", + href: `${href}${query}`, + // @ts-ignore + precedence: "next" + }, i)); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=app-router.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/builtin/default.js b/build/node_modules/next/dist/client/components/builtin/default.js new file mode 100644 index 0000000..014f580 --- /dev/null +++ b/build/node_modules/next/dist/client/components/builtin/default.js @@ -0,0 +1,35 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + PARALLEL_ROUTE_DEFAULT_PATH: null, + default: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + PARALLEL_ROUTE_DEFAULT_PATH: function() { + return PARALLEL_ROUTE_DEFAULT_PATH; + }, + default: function() { + return ParallelRouteDefault; + } +}); +const _notfound = require("../not-found"); +const PARALLEL_ROUTE_DEFAULT_PATH = 'next/dist/client/components/builtin/default.js'; +function ParallelRouteDefault() { + (0, _notfound.notFound)(); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=default.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/builtin/error-styles.js b/build/node_modules/next/dist/client/components/builtin/error-styles.js new file mode 100644 index 0000000..877a9d2 --- /dev/null +++ b/build/node_modules/next/dist/client/components/builtin/error-styles.js @@ -0,0 +1,165 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + WarningIcon: null, + errorStyles: null, + errorThemeCss: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + WarningIcon: function() { + return WarningIcon; + }, + errorStyles: function() { + return errorStyles; + }, + errorThemeCss: function() { + return errorThemeCss; + } +}); +const _interop_require_default = require("@swc/helpers/_/_interop_require_default"); +const _jsxruntime = require("react/jsx-runtime"); +const _react = /*#__PURE__*/ _interop_require_default._(require("react")); +const errorStyles = { + container: { + fontFamily: 'system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"', + height: '100vh', + display: 'flex', + alignItems: 'center', + justifyContent: 'center' + }, + card: { + marginTop: '-32px', + maxWidth: '325px', + padding: '32px 28px', + textAlign: 'left' + }, + icon: { + marginBottom: '24px' + }, + title: { + fontSize: '24px', + fontWeight: 500, + letterSpacing: '-0.02em', + lineHeight: '32px', + margin: '0 0 12px 0', + color: 'var(--next-error-title)' + }, + message: { + fontSize: '14px', + fontWeight: 400, + lineHeight: '21px', + margin: '0 0 20px 0', + color: 'var(--next-error-message)' + }, + form: { + margin: 0 + }, + buttonGroup: { + display: 'flex', + gap: '8px', + alignItems: 'center' + }, + button: { + display: 'inline-flex', + alignItems: 'center', + justifyContent: 'center', + height: '32px', + padding: '0 12px', + fontSize: '14px', + fontWeight: 500, + lineHeight: '20px', + borderRadius: '6px', + cursor: 'pointer', + color: 'var(--next-error-btn-text)', + background: 'var(--next-error-btn-bg)', + border: 'var(--next-error-btn-border)' + }, + buttonSecondary: { + display: 'inline-flex', + alignItems: 'center', + justifyContent: 'center', + height: '32px', + padding: '0 12px', + fontSize: '14px', + fontWeight: 500, + lineHeight: '20px', + borderRadius: '6px', + cursor: 'pointer', + color: 'var(--next-error-btn-secondary-text)', + background: 'var(--next-error-btn-secondary-bg)', + border: 'var(--next-error-btn-secondary-border)' + }, + digestFooter: { + position: 'fixed', + bottom: '32px', + left: '0', + right: '0', + textAlign: 'center', + fontFamily: 'ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace', + fontSize: '12px', + lineHeight: '18px', + fontWeight: 400, + margin: '0', + color: 'var(--next-error-digest)' + } +}; +const errorThemeCss = ` +:root { + --next-error-bg: #fff; + --next-error-text: #171717; + --next-error-title: #171717; + --next-error-message: #171717; + --next-error-digest: #666666; + --next-error-btn-text: #fff; + --next-error-btn-bg: #171717; + --next-error-btn-border: none; + --next-error-btn-secondary-text: #171717; + --next-error-btn-secondary-bg: transparent; + --next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08); +} +@media (prefers-color-scheme: dark) { + :root { + --next-error-bg: #0a0a0a; + --next-error-text: #ededed; + --next-error-title: #ededed; + --next-error-message: #ededed; + --next-error-digest: #a0a0a0; + --next-error-btn-text: #0a0a0a; + --next-error-btn-bg: #ededed; + --next-error-btn-border: none; + --next-error-btn-secondary-text: #ededed; + --next-error-btn-secondary-bg: transparent; + --next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14); + } +} +body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); } +`.replace(/\n\s*/g, ''); +function WarningIcon() { + return /*#__PURE__*/ (0, _jsxruntime.jsx)("svg", { + width: "32", + height: "32", + viewBox: "-0.2 -1.5 32 32", + fill: "none", + style: errorStyles.icon, + children: /*#__PURE__*/ (0, _jsxruntime.jsx)("path", { + d: "M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z", + fill: "var(--next-error-title)" + }) + }); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=error-styles.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/builtin/global-error.js b/build/node_modules/next/dist/client/components/builtin/global-error.js new file mode 100644 index 0000000..7e39682 --- /dev/null +++ b/build/node_modules/next/dist/client/components/builtin/global-error.js @@ -0,0 +1,100 @@ +'use client'; +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, // Exported so that the import signature in the loaders can be identical to user +// supplied custom global error signatures. +"default", { + enumerable: true, + get: function() { + return _default; + } +}); +const _interop_require_default = require("@swc/helpers/_/_interop_require_default"); +const _jsxruntime = require("react/jsx-runtime"); +const _react = /*#__PURE__*/ _interop_require_default._(require("react")); +const _handleisrerror = require("../handle-isr-error"); +const _errorstyles = require("./error-styles"); +function DefaultGlobalError({ error }) { + const digest = error?.digest; + const isServerError = !!digest; + const message = isServerError ? 'A server error occurred. Reload to try again.' : 'Reload to try again, or go back.'; + (0, _handleisrerror.handleISRError)({ + error + }); + return /*#__PURE__*/ (0, _jsxruntime.jsxs)("html", { + id: "__next_error__", + children: [ + /*#__PURE__*/ (0, _jsxruntime.jsx)("head", { + children: /*#__PURE__*/ (0, _jsxruntime.jsx)("style", { + dangerouslySetInnerHTML: { + __html: _errorstyles.errorThemeCss + } + }) + }), + /*#__PURE__*/ (0, _jsxruntime.jsxs)("body", { + children: [ + /*#__PURE__*/ (0, _jsxruntime.jsx)("div", { + style: _errorstyles.errorStyles.container, + children: /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", { + style: _errorstyles.errorStyles.card, + children: [ + /*#__PURE__*/ (0, _jsxruntime.jsx)(_errorstyles.WarningIcon, {}), + /*#__PURE__*/ (0, _jsxruntime.jsx)("h1", { + style: _errorstyles.errorStyles.title, + children: "This page couldn’t load" + }), + /*#__PURE__*/ (0, _jsxruntime.jsx)("p", { + style: _errorstyles.errorStyles.message, + children: message + }), + /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", { + style: _errorstyles.errorStyles.buttonGroup, + children: [ + /*#__PURE__*/ (0, _jsxruntime.jsx)("form", { + style: _errorstyles.errorStyles.form, + children: /*#__PURE__*/ (0, _jsxruntime.jsx)("button", { + type: "submit", + style: _errorstyles.errorStyles.button, + children: "Reload" + }) + }), + !isServerError && /*#__PURE__*/ (0, _jsxruntime.jsx)("button", { + type: "button", + style: _errorstyles.errorStyles.buttonSecondary, + onClick: ()=>{ + if (window.history.length > 1) { + window.history.back(); + } else { + window.location.href = '/'; + } + }, + children: "Back" + }) + ] + }) + ] + }) + }), + digest && /*#__PURE__*/ (0, _jsxruntime.jsxs)("p", { + style: _errorstyles.errorStyles.digestFooter, + children: [ + "ERROR ", + digest + ] + }) + ] + }) + ] + }); +} +const _default = DefaultGlobalError; + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=global-error.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/dev-root-http-access-fallback-boundary.js b/build/node_modules/next/dist/client/components/dev-root-http-access-fallback-boundary.js new file mode 100644 index 0000000..3467cbd --- /dev/null +++ b/build/node_modules/next/dist/client/components/dev-root-http-access-fallback-boundary.js @@ -0,0 +1,52 @@ +'use client'; +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + DevRootHTTPAccessFallbackBoundary: null, + bailOnRootNotFound: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + DevRootHTTPAccessFallbackBoundary: function() { + return DevRootHTTPAccessFallbackBoundary; + }, + bailOnRootNotFound: function() { + return bailOnRootNotFound; + } +}); +const _interop_require_default = require("@swc/helpers/_/_interop_require_default"); +const _jsxruntime = require("react/jsx-runtime"); +const _react = /*#__PURE__*/ _interop_require_default._(require("react")); +const _errorboundary = require("./http-access-fallback/error-boundary"); +function bailOnRootNotFound() { + throw Object.defineProperty(new Error('notFound() is not allowed to use in root layout'), "__NEXT_ERROR_CODE", { + value: "E192", + enumerable: false, + configurable: true + }); +} +function NotAllowedRootHTTPFallbackError() { + bailOnRootNotFound(); + return null; +} +function DevRootHTTPAccessFallbackBoundary({ children }) { + return /*#__PURE__*/ (0, _jsxruntime.jsx)(_errorboundary.HTTPAccessFallbackBoundary, { + notFound: /*#__PURE__*/ (0, _jsxruntime.jsx)(NotAllowedRootHTTPFallbackError, {}), + children: children + }); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=dev-root-http-access-fallback-boundary.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/error-boundary.js b/build/node_modules/next/dist/client/components/error-boundary.js new file mode 100644 index 0000000..a3953db --- /dev/null +++ b/build/node_modules/next/dist/client/components/error-boundary.js @@ -0,0 +1,144 @@ +'use client'; +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + ErrorBoundary: null, + ErrorBoundaryHandler: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + ErrorBoundary: function() { + return ErrorBoundary; + }, + ErrorBoundaryHandler: function() { + return ErrorBoundaryHandler; + } +}); +const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard"); +const _jsxruntime = require("react/jsx-runtime"); +const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react")); +const _navigationuntracked = require("./navigation-untracked"); +const _isnextroutererror = require("./is-next-router-error"); +const _navfailurehandler = require("./nav-failure-handler"); +const _handleisrerror = require("./handle-isr-error"); +const _isbot = require("../../shared/lib/router/utils/is-bot"); +const _approutercontextsharedruntime = require("../../shared/lib/app-router-context.shared-runtime"); +const isBotUserAgent = typeof window !== 'undefined' && (0, _isbot.isBot)(window.navigator.userAgent); +class ErrorBoundaryHandler extends _react.default.Component { + static{ + this.contextType = _approutercontextsharedruntime.AppRouterContext; + } + constructor(props){ + super(props), this.reset = ()=>{ + this.setState({ + error: null + }); + }, this.unstable_retry = ()=>{ + (0, _react.startTransition)(()=>{ + this.context?.refresh(); + this.reset(); + }); + }; + this.state = { + error: null, + previousPathname: this.props.pathname + }; + } + static getDerivedStateFromError(error) { + if ((0, _isnextroutererror.isNextRouterError)(error)) { + // Re-throw if an expected internal Next.js router error occurs + // this means it should be handled by a different boundary (such as a NotFound boundary in a parent segment) + throw error; + } + return { + error + }; + } + static getDerivedStateFromProps(props, state) { + const { error } = state; + // if we encounter an error while + // a navigation is pending we shouldn't render + // the error boundary and instead should fallback + // to a hard navigation to attempt recovering + if (process.env.__NEXT_APP_NAV_FAIL_HANDLING) { + if (error && (0, _navfailurehandler.handleHardNavError)(error)) { + // clear error so we don't render anything + return { + error: null, + previousPathname: props.pathname + }; + } + } + /** + * Handles reset of the error boundary when a navigation happens. + * Ensures the error boundary does not stay enabled when navigating to a new page. + * Approach of setState in render is safe as it checks the previous pathname and then overrides + * it as outlined in https://react.dev/reference/react/useState#storing-information-from-previous-renders + */ if (props.pathname !== state.previousPathname && state.error) { + return { + error: null, + previousPathname: props.pathname + }; + } + return { + error: state.error, + previousPathname: props.pathname + }; + } + // Explicit type is needed to avoid the generated `.d.ts` having a wide return type that could be specific to the `@types/react` version. + render() { + //When it's bot request, segment level error boundary will keep rendering the children, + // the final error will be caught by the root error boundary and determine wether need to apply graceful degrade. + if (this.state.error && !isBotUserAgent) { + (0, _handleisrerror.handleISRError)({ + error: this.state.error + }); + return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, { + children: [ + this.props.errorStyles, + this.props.errorScripts, + /*#__PURE__*/ (0, _jsxruntime.jsx)(this.props.errorComponent, { + error: this.state.error, + reset: this.reset, + unstable_retry: this.unstable_retry + }) + ] + }); + } + return this.props.children; + } +} +function ErrorBoundary({ errorComponent, errorStyles, errorScripts, children }) { + // When we're rendering the missing params shell, this will return null. This + // is because we won't be rendering any not found boundaries or error + // boundaries for the missing params shell. When this runs on the client + // (where these errors can occur), we will get the correct pathname. + const pathname = (0, _navigationuntracked.useUntrackedPathname)(); + if (errorComponent) { + return /*#__PURE__*/ (0, _jsxruntime.jsx)(ErrorBoundaryHandler, { + pathname: pathname, + errorComponent: errorComponent, + errorStyles: errorStyles, + errorScripts: errorScripts, + children: children + }); + } + return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, { + children: children + }); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=error-boundary.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/errors/graceful-degrade-boundary.js b/build/node_modules/next/dist/client/components/errors/graceful-degrade-boundary.js new file mode 100644 index 0000000..ca45d50 --- /dev/null +++ b/build/node_modules/next/dist/client/components/errors/graceful-degrade-boundary.js @@ -0,0 +1,86 @@ +'use client'; +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + GracefulDegradeBoundary: null, + default: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + GracefulDegradeBoundary: function() { + return GracefulDegradeBoundary; + }, + default: function() { + return _default; + } +}); +const _jsxruntime = require("react/jsx-runtime"); +const _react = require("react"); +function getDomNodeAttributes(node) { + const result = {}; + for(let i = 0; i < node.attributes.length; i++){ + const attr = node.attributes[i]; + result[attr.name] = attr.value; + } + return result; +} +class GracefulDegradeBoundary extends _react.Component { + constructor(props){ + super(props); + this.state = { + hasError: false + }; + this.rootHtml = ''; + this.htmlAttributes = {}; + this.htmlRef = /*#__PURE__*/ (0, _react.createRef)(); + } + static getDerivedStateFromError(_) { + return { + hasError: true + }; + } + componentDidMount() { + const htmlNode = this.htmlRef.current; + if (this.state.hasError && htmlNode) { + // Reapply the cached HTML attributes to the root element + Object.entries(this.htmlAttributes).forEach(([key, value])=>{ + htmlNode.setAttribute(key, value); + }); + } + } + render() { + const { hasError } = this.state; + // Cache the root HTML content on the first render + if (typeof window !== 'undefined' && !this.rootHtml) { + this.rootHtml = document.documentElement.innerHTML; + this.htmlAttributes = getDomNodeAttributes(document.documentElement); + } + if (hasError) { + // Render the current HTML content without hydration + return /*#__PURE__*/ (0, _jsxruntime.jsx)("html", { + ref: this.htmlRef, + suppressHydrationWarning: true, + dangerouslySetInnerHTML: { + __html: this.rootHtml + } + }); + } + return this.props.children; + } +} +const _default = GracefulDegradeBoundary; + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=graceful-degrade-boundary.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/errors/root-error-boundary.js b/build/node_modules/next/dist/client/components/errors/root-error-boundary.js new file mode 100644 index 0000000..e5aa621 --- /dev/null +++ b/build/node_modules/next/dist/client/components/errors/root-error-boundary.js @@ -0,0 +1,41 @@ +'use client'; +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "default", { + enumerable: true, + get: function() { + return RootErrorBoundary; + } +}); +const _interop_require_default = require("@swc/helpers/_/_interop_require_default"); +const _jsxruntime = require("react/jsx-runtime"); +const _react = /*#__PURE__*/ _interop_require_default._(require("react")); +const _gracefuldegradeboundary = /*#__PURE__*/ _interop_require_default._(require("./graceful-degrade-boundary")); +const _errorboundary = require("../error-boundary"); +const _isbot = require("../../../shared/lib/router/utils/is-bot"); +const isBotUserAgent = typeof window !== 'undefined' && (0, _isbot.isBot)(window.navigator.userAgent); +function RootErrorBoundary({ children, errorComponent, errorStyles, errorScripts }) { + if (isBotUserAgent) { + // Preserve existing DOM/HTML for bots to avoid replacing content with an error UI + // and to keep the original SSR output intact. + return /*#__PURE__*/ (0, _jsxruntime.jsx)(_gracefuldegradeboundary.default, { + children: children + }); + } + return /*#__PURE__*/ (0, _jsxruntime.jsx)(_errorboundary.ErrorBoundary, { + errorComponent: errorComponent, + errorStyles: errorStyles, + errorScripts: errorScripts, + children: children + }); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=root-error-boundary.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/forbidden.js b/build/node_modules/next/dist/client/components/forbidden.js new file mode 100644 index 0000000..ad96ac5 --- /dev/null +++ b/build/node_modules/next/dist/client/components/forbidden.js @@ -0,0 +1,48 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "forbidden", { + enumerable: true, + get: function() { + return forbidden; + } +}); +const _httpaccessfallback = require("./http-access-fallback/http-access-fallback"); +// TODO: Add `forbidden` docs +/** + * @experimental + * This function allows you to render the [forbidden.js file](https://nextjs.org/docs/app/api-reference/file-conventions/forbidden) + * within a route segment as well as inject a tag. + * + * `forbidden()` can be used in + * [Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components), + * [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers), and + * [Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations). + * + * Read more: [Next.js Docs: `forbidden`](https://nextjs.org/docs/app/api-reference/functions/forbidden) + */ const DIGEST = `${_httpaccessfallback.HTTP_ERROR_FALLBACK_ERROR_CODE};403`; +function forbidden() { + if (!process.env.__NEXT_EXPERIMENTAL_AUTH_INTERRUPTS) { + throw Object.defineProperty(new Error(`\`forbidden()\` is experimental and only allowed to be enabled when \`experimental.authInterrupts\` is enabled.`), "__NEXT_ERROR_CODE", { + value: "E488", + enumerable: false, + configurable: true + }); + } + const error = Object.defineProperty(new Error(DIGEST), "__NEXT_ERROR_CODE", { + value: "E1019", + enumerable: false, + configurable: true + }); + error.digest = DIGEST; + throw error; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=forbidden.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/handle-isr-error.js b/build/node_modules/next/dist/client/components/handle-isr-error.js new file mode 100644 index 0000000..60402e5 --- /dev/null +++ b/build/node_modules/next/dist/client/components/handle-isr-error.js @@ -0,0 +1,30 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "handleISRError", { + enumerable: true, + get: function() { + return handleISRError; + } +}); +const workAsyncStorage = typeof window === 'undefined' ? require('../../server/app-render/work-async-storage.external').workAsyncStorage : undefined; +function handleISRError({ error }) { + if (workAsyncStorage) { + const store = workAsyncStorage.getStore(); + if (store?.isStaticGeneration) { + if (error) { + console.error(error); + } + throw error; + } + } +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=handle-isr-error.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/hooks-server-context.js b/build/node_modules/next/dist/client/components/hooks-server-context.js new file mode 100644 index 0000000..b825ead --- /dev/null +++ b/build/node_modules/next/dist/client/components/hooks-server-context.js @@ -0,0 +1,42 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + DynamicServerError: null, + isDynamicServerError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + DynamicServerError: function() { + return DynamicServerError; + }, + isDynamicServerError: function() { + return isDynamicServerError; + } +}); +const DYNAMIC_ERROR_CODE = 'DYNAMIC_SERVER_USAGE'; +class DynamicServerError extends Error { + constructor(description){ + super(`Dynamic server usage: ${description}`), this.description = description, this.digest = DYNAMIC_ERROR_CODE; + } +} +function isDynamicServerError(err) { + if (typeof err !== 'object' || err === null || !('digest' in err) || typeof err.digest !== 'string') { + return false; + } + return err.digest === DYNAMIC_ERROR_CODE; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=hooks-server-context.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js b/build/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js new file mode 100644 index 0000000..f0714f1 --- /dev/null +++ b/build/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js @@ -0,0 +1,125 @@ +'use client'; +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "HTTPAccessFallbackBoundary", { + enumerable: true, + get: function() { + return HTTPAccessFallbackBoundary; + } +}); +const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard"); +const _jsxruntime = require("react/jsx-runtime"); +const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react")); +const _navigationuntracked = require("../navigation-untracked"); +const _httpaccessfallback = require("./http-access-fallback"); +const _warnonce = require("../../../shared/lib/utils/warn-once"); +const _approutercontextsharedruntime = require("../../../shared/lib/app-router-context.shared-runtime"); +class HTTPAccessFallbackErrorBoundary extends _react.default.Component { + constructor(props){ + super(props); + this.state = { + triggeredStatus: undefined, + previousPathname: props.pathname + }; + } + componentDidCatch() { + if (process.env.NODE_ENV === 'development' && this.props.missingSlots && this.props.missingSlots.size > 0 && // A missing children slot is the typical not-found case, so no need to warn + !this.props.missingSlots.has('children')) { + let warningMessage = 'No default component was found for a parallel route rendered on this page. Falling back to nearest NotFound boundary.\n' + 'Learn more: https://nextjs.org/docs/app/building-your-application/routing/parallel-routes#defaultjs\n\n'; + const formattedSlots = Array.from(this.props.missingSlots).sort((a, b)=>a.localeCompare(b)).map((slot)=>`@${slot}`).join(', '); + warningMessage += 'Missing slots: ' + formattedSlots; + (0, _warnonce.warnOnce)(warningMessage); + } + } + static getDerivedStateFromError(error) { + if ((0, _httpaccessfallback.isHTTPAccessFallbackError)(error)) { + const httpStatus = (0, _httpaccessfallback.getAccessFallbackHTTPStatus)(error); + return { + triggeredStatus: httpStatus + }; + } + // Re-throw if error is not for 404 + throw error; + } + static getDerivedStateFromProps(props, state) { + /** + * Handles reset of the error boundary when a navigation happens. + * Ensures the error boundary does not stay enabled when navigating to a new page. + * Approach of setState in render is safe as it checks the previous pathname and then overrides + * it as outlined in https://react.dev/reference/react/useState#storing-information-from-previous-renders + */ if (props.pathname !== state.previousPathname && state.triggeredStatus) { + return { + triggeredStatus: undefined, + previousPathname: props.pathname + }; + } + return { + triggeredStatus: state.triggeredStatus, + previousPathname: props.pathname + }; + } + render() { + const { notFound, forbidden, unauthorized, children } = this.props; + const { triggeredStatus } = this.state; + const errorComponents = { + [_httpaccessfallback.HTTPAccessErrorStatus.NOT_FOUND]: notFound, + [_httpaccessfallback.HTTPAccessErrorStatus.FORBIDDEN]: forbidden, + [_httpaccessfallback.HTTPAccessErrorStatus.UNAUTHORIZED]: unauthorized + }; + if (triggeredStatus) { + const isNotFound = triggeredStatus === _httpaccessfallback.HTTPAccessErrorStatus.NOT_FOUND && notFound; + const isForbidden = triggeredStatus === _httpaccessfallback.HTTPAccessErrorStatus.FORBIDDEN && forbidden; + const isUnauthorized = triggeredStatus === _httpaccessfallback.HTTPAccessErrorStatus.UNAUTHORIZED && unauthorized; + // If there's no matched boundary in this layer, keep throwing the error by rendering the children + if (!(isNotFound || isForbidden || isUnauthorized)) { + return children; + } + return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, { + children: [ + /*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "robots", + content: "noindex" + }), + process.env.NODE_ENV === 'development' && /*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "boundary-next-error", + content: (0, _httpaccessfallback.getAccessFallbackErrorTypeByStatus)(triggeredStatus) + }), + errorComponents[triggeredStatus] + ] + }); + } + return children; + } +} +function HTTPAccessFallbackBoundary({ notFound, forbidden, unauthorized, children }) { + // When we're rendering the missing params shell, this will return null. This + // is because we won't be rendering any not found boundaries or error + // boundaries for the missing params shell. When this runs on the client + // (where these error can occur), we will get the correct pathname. + const pathname = (0, _navigationuntracked.useUntrackedPathname)(); + const missingSlots = (0, _react.useContext)(_approutercontextsharedruntime.MissingSlotContext); + const hasErrorFallback = !!(notFound || forbidden || unauthorized); + if (hasErrorFallback) { + return /*#__PURE__*/ (0, _jsxruntime.jsx)(HTTPAccessFallbackErrorBoundary, { + pathname: pathname, + notFound: notFound, + forbidden: forbidden, + unauthorized: unauthorized, + missingSlots: missingSlots, + children: children + }); + } + return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, { + children: children + }); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=error-boundary.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js b/build/node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js new file mode 100644 index 0000000..b1b3645 --- /dev/null +++ b/build/node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js @@ -0,0 +1,72 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + HTTPAccessErrorStatus: null, + HTTP_ERROR_FALLBACK_ERROR_CODE: null, + getAccessFallbackErrorTypeByStatus: null, + getAccessFallbackHTTPStatus: null, + isHTTPAccessFallbackError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + HTTPAccessErrorStatus: function() { + return HTTPAccessErrorStatus; + }, + HTTP_ERROR_FALLBACK_ERROR_CODE: function() { + return HTTP_ERROR_FALLBACK_ERROR_CODE; + }, + getAccessFallbackErrorTypeByStatus: function() { + return getAccessFallbackErrorTypeByStatus; + }, + getAccessFallbackHTTPStatus: function() { + return getAccessFallbackHTTPStatus; + }, + isHTTPAccessFallbackError: function() { + return isHTTPAccessFallbackError; + } +}); +const HTTPAccessErrorStatus = { + NOT_FOUND: 404, + FORBIDDEN: 403, + UNAUTHORIZED: 401 +}; +const ALLOWED_CODES = new Set(Object.values(HTTPAccessErrorStatus)); +const HTTP_ERROR_FALLBACK_ERROR_CODE = 'NEXT_HTTP_ERROR_FALLBACK'; +function isHTTPAccessFallbackError(error) { + if (typeof error !== 'object' || error === null || !('digest' in error) || typeof error.digest !== 'string') { + return false; + } + const [prefix, httpStatus] = error.digest.split(';'); + return prefix === HTTP_ERROR_FALLBACK_ERROR_CODE && ALLOWED_CODES.has(Number(httpStatus)); +} +function getAccessFallbackHTTPStatus(error) { + const httpStatus = error.digest.split(';')[1]; + return Number(httpStatus); +} +function getAccessFallbackErrorTypeByStatus(status) { + switch(status){ + case 401: + return 'unauthorized'; + case 403: + return 'forbidden'; + case 404: + return 'not-found'; + default: + return; + } +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=http-access-fallback.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/is-next-router-error.js b/build/node_modules/next/dist/client/components/is-next-router-error.js new file mode 100644 index 0000000..d2ee1f4 --- /dev/null +++ b/build/node_modules/next/dist/client/components/is-next-router-error.js @@ -0,0 +1,23 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "isNextRouterError", { + enumerable: true, + get: function() { + return isNextRouterError; + } +}); +const _httpaccessfallback = require("./http-access-fallback/http-access-fallback"); +const _redirecterror = require("./redirect-error"); +function isNextRouterError(error) { + return (0, _redirecterror.isRedirectError)(error) || (0, _httpaccessfallback.isHTTPAccessFallbackError)(error); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=is-next-router-error.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/links.js b/build/node_modules/next/dist/client/components/links.js new file mode 100644 index 0000000..4d908a3 --- /dev/null +++ b/build/node_modules/next/dist/client/components/links.js @@ -0,0 +1,299 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + IDLE_LINK_STATUS: null, + PENDING_LINK_STATUS: null, + getLinkForCurrentNavigation: null, + mountFormInstance: null, + mountLinkInstance: null, + onLinkVisibilityChanged: null, + onNavigationIntent: null, + pingVisibleLinks: null, + setLinkForCurrentNavigation: null, + unmountLinkForCurrentNavigation: null, + unmountPrefetchableInstance: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + IDLE_LINK_STATUS: function() { + return IDLE_LINK_STATUS; + }, + PENDING_LINK_STATUS: function() { + return PENDING_LINK_STATUS; + }, + getLinkForCurrentNavigation: function() { + return getLinkForCurrentNavigation; + }, + mountFormInstance: function() { + return mountFormInstance; + }, + mountLinkInstance: function() { + return mountLinkInstance; + }, + onLinkVisibilityChanged: function() { + return onLinkVisibilityChanged; + }, + onNavigationIntent: function() { + return onNavigationIntent; + }, + pingVisibleLinks: function() { + return pingVisibleLinks; + }, + setLinkForCurrentNavigation: function() { + return setLinkForCurrentNavigation; + }, + unmountLinkForCurrentNavigation: function() { + return unmountLinkForCurrentNavigation; + }, + unmountPrefetchableInstance: function() { + return unmountPrefetchableInstance; + } +}); +const _types = require("./segment-cache/types"); +const _cachekey = require("./segment-cache/cache-key"); +const _scheduler = require("./segment-cache/scheduler"); +const _react = require("react"); +// Tracks the most recently navigated link instance. When null, indicates +// the current navigation was not initiated by a link click. +let linkForMostRecentNavigation = null; +const PENDING_LINK_STATUS = { + pending: true +}; +const IDLE_LINK_STATUS = { + pending: false +}; +function setLinkForCurrentNavigation(link) { + (0, _react.startTransition)(()=>{ + linkForMostRecentNavigation?.setOptimisticLinkStatus(IDLE_LINK_STATUS); + link?.setOptimisticLinkStatus(PENDING_LINK_STATUS); + linkForMostRecentNavigation = link; + }); +} +function unmountLinkForCurrentNavigation(link) { + if (linkForMostRecentNavigation === link) { + linkForMostRecentNavigation = null; + } +} +function getLinkForCurrentNavigation() { + return linkForMostRecentNavigation; +} +// Use a WeakMap to associate a Link instance with its DOM element. This is +// used by the IntersectionObserver to track the link's visibility. +const prefetchable = typeof WeakMap === 'function' ? new WeakMap() : new Map(); +// A Set of the currently visible links. We re-prefetch visible links after a +// cache invalidation, or when the current URL changes. It's a separate data +// structure from the WeakMap above because only the visible links need to +// be enumerated. +const prefetchableAndVisible = new Set(); +// A single IntersectionObserver instance shared by all components. +const observer = typeof IntersectionObserver === 'function' ? new IntersectionObserver(handleIntersect, { + rootMargin: '200px' +}) : null; +function observeVisibility(element, instance) { + const existingInstance = prefetchable.get(element); + if (existingInstance !== undefined) { + // This shouldn't happen because each component should have its own + // anchor tag instance, but it's defensive coding to avoid a memory leak in + // case there's a logical error somewhere else. + unmountPrefetchableInstance(element); + } + // Only track prefetchable links that have a valid prefetch URL + prefetchable.set(element, instance); + if (observer !== null) { + observer.observe(element); + } +} +function coercePrefetchableUrl(href) { + if (typeof window !== 'undefined') { + const { createPrefetchURL } = require('./app-router-utils'); + try { + return createPrefetchURL(href); + } catch { + // createPrefetchURL sometimes throws an error if an invalid URL is + // provided, though I'm not sure if it's actually necessary. + // TODO: Consider removing the throw from the inner function, or change it + // to reportError. Or maybe the error isn't even necessary for automatic + // prefetches, just navigations. + const reportErrorFn = typeof reportError === 'function' ? reportError : console.error; + reportErrorFn(`Cannot prefetch '${href}' because it cannot be converted to a URL.`); + return null; + } + } else { + return null; + } +} +function mountLinkInstance(element, href, router, fetchStrategy, prefetchEnabled, setOptimisticLinkStatus) { + if (prefetchEnabled) { + const prefetchURL = coercePrefetchableUrl(href); + if (prefetchURL !== null) { + const instance = { + router, + fetchStrategy, + isVisible: false, + prefetchTask: null, + prefetchHref: prefetchURL.href, + setOptimisticLinkStatus + }; + // We only observe the link's visibility if it's prefetchable. For + // example, this excludes links to external URLs. + observeVisibility(element, instance); + return instance; + } + } + // If the link is not prefetchable, we still create an instance so we can + // track its optimistic state (i.e. useLinkStatus). + const instance = { + router, + fetchStrategy, + isVisible: false, + prefetchTask: null, + prefetchHref: null, + setOptimisticLinkStatus + }; + return instance; +} +function mountFormInstance(element, href, router, fetchStrategy) { + const prefetchURL = coercePrefetchableUrl(href); + if (prefetchURL === null) { + // This href is not prefetchable, so we don't track it. + // TODO: We currently observe/unobserve a form every time its href changes. + // For Links, this isn't a big deal because the href doesn't usually change, + // but for forms it's extremely common. We should optimize this. + return; + } + const instance = { + router, + fetchStrategy, + isVisible: false, + prefetchTask: null, + prefetchHref: prefetchURL.href, + setOptimisticLinkStatus: null + }; + observeVisibility(element, instance); +} +function unmountPrefetchableInstance(element) { + const instance = prefetchable.get(element); + if (instance !== undefined) { + prefetchable.delete(element); + prefetchableAndVisible.delete(instance); + const prefetchTask = instance.prefetchTask; + if (prefetchTask !== null) { + (0, _scheduler.cancelPrefetchTask)(prefetchTask); + } + } + if (observer !== null) { + observer.unobserve(element); + } +} +function handleIntersect(entries) { + for (const entry of entries){ + // Some extremely old browsers or polyfills don't reliably support + // isIntersecting so we check intersectionRatio instead. (Do we care? Not + // really. But whatever this is fine.) + const isVisible = entry.intersectionRatio > 0; + onLinkVisibilityChanged(entry.target, isVisible); + } +} +function onLinkVisibilityChanged(element, isVisible) { + if (process.env.NODE_ENV !== 'production') { + // Prefetching on viewport is disabled in development for performance + // reasons, because it requires compiling the target page. + // TODO: Investigate re-enabling this. + return; + } + const instance = prefetchable.get(element); + if (instance === undefined) { + return; + } + instance.isVisible = isVisible; + if (isVisible) { + prefetchableAndVisible.add(instance); + } else { + prefetchableAndVisible.delete(instance); + } + rescheduleLinkPrefetch(instance, _types.PrefetchPriority.Default); +} +function onNavigationIntent(element, unstable_upgradeToDynamicPrefetch) { + const instance = prefetchable.get(element); + if (instance === undefined) { + return; + } + // Prefetch the link on hover/touchstart. + if (instance !== undefined) { + if (process.env.__NEXT_DYNAMIC_ON_HOVER && unstable_upgradeToDynamicPrefetch) { + // Switch to a full prefetch + instance.fetchStrategy = _types.FetchStrategy.Full; + } + rescheduleLinkPrefetch(instance, _types.PrefetchPriority.Intent); + } +} +function rescheduleLinkPrefetch(instance, priority) { + // Ensures that app-router-instance is not compiled in the server bundle + if (typeof window !== 'undefined') { + const existingPrefetchTask = instance.prefetchTask; + if (!instance.isVisible) { + // Cancel any in-progress prefetch task. (If it already finished then this + // is a no-op.) + if (existingPrefetchTask !== null) { + (0, _scheduler.cancelPrefetchTask)(existingPrefetchTask); + } + // We don't need to reset the prefetchTask to null upon cancellation; an + // old task object can be rescheduled with reschedulePrefetchTask. This is a + // micro-optimization but also makes the code simpler (don't need to + // worry about whether an old task object is stale). + return; + } + const { getCurrentAppRouterState } = require('./app-router-instance'); + const appRouterState = getCurrentAppRouterState(); + if (appRouterState !== null) { + const treeAtTimeOfPrefetch = appRouterState.tree; + if (existingPrefetchTask === null) { + // Initiate a prefetch task. + const nextUrl = appRouterState.nextUrl; + const cacheKey = (0, _cachekey.createCacheKey)(instance.prefetchHref, nextUrl); + instance.prefetchTask = (0, _scheduler.schedulePrefetchTask)(cacheKey, treeAtTimeOfPrefetch, instance.fetchStrategy, priority, null); + } else { + // We already have an old task object that we can reschedule. This is + // effectively the same as canceling the old task and creating a new one. + (0, _scheduler.reschedulePrefetchTask)(existingPrefetchTask, treeAtTimeOfPrefetch, instance.fetchStrategy, priority); + } + } + } +} +function pingVisibleLinks(nextUrl, tree) { + // For each currently visible link, cancel the existing prefetch task (if it + // exists) and schedule a new one. This is effectively the same as if all the + // visible links left and then re-entered the viewport. + // + // This is called when the Next-Url or the base tree changes, since those + // may affect the result of a prefetch task. It's also called after a + // cache invalidation. + for (const instance of prefetchableAndVisible){ + const task = instance.prefetchTask; + if (task !== null && !(0, _scheduler.isPrefetchTaskDirty)(task, nextUrl, tree)) { + continue; + } + // Something changed. Cancel the existing prefetch task and schedule a + // new one. + if (task !== null) { + (0, _scheduler.cancelPrefetchTask)(task); + } + const cacheKey = (0, _cachekey.createCacheKey)(instance.prefetchHref, nextUrl); + instance.prefetchTask = (0, _scheduler.schedulePrefetchTask)(cacheKey, tree, instance.fetchStrategy, _types.PrefetchPriority.Default, null); + } +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=links.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/match-segments.js b/build/node_modules/next/dist/client/components/match-segments.js new file mode 100644 index 0000000..9f69eb4 --- /dev/null +++ b/build/node_modules/next/dist/client/components/match-segments.js @@ -0,0 +1,32 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "matchSegment", { + enumerable: true, + get: function() { + return matchSegment; + } +}); +const matchSegment = (existingSegment, segment)=>{ + // segment is either Array or string + if (typeof existingSegment === 'string') { + if (typeof segment === 'string') { + // Common case: segment is just a string + return existingSegment === segment; + } + return false; + } + if (typeof segment === 'string') { + return false; + } + return existingSegment[0] === segment[0] && existingSegment[1] === segment[1]; +}; + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=match-segments.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/nav-failure-handler.js b/build/node_modules/next/dist/client/components/nav-failure-handler.js new file mode 100644 index 0000000..bd40695 --- /dev/null +++ b/build/node_modules/next/dist/client/components/nav-failure-handler.js @@ -0,0 +1,61 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + handleHardNavError: null, + useNavFailureHandler: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + handleHardNavError: function() { + return handleHardNavError; + }, + useNavFailureHandler: function() { + return useNavFailureHandler; + } +}); +const _react = require("react"); +const _createhreffromurl = require("./router-reducer/create-href-from-url"); +function handleHardNavError(error) { + if (error && typeof window !== 'undefined' && window.next.__pendingUrl && (0, _createhreffromurl.createHrefFromUrl)(new URL(window.location.href)) !== (0, _createhreffromurl.createHrefFromUrl)(window.next.__pendingUrl)) { + console.error(`Error occurred during navigation, falling back to hard navigation`, error); + window.location.href = window.next.__pendingUrl.toString(); + return true; + } + return false; +} +function useNavFailureHandler() { + if (process.env.__NEXT_APP_NAV_FAIL_HANDLING) { + // this if is only for DCE of the feature flag not conditional + // eslint-disable-next-line react-hooks/rules-of-hooks + (0, _react.useEffect)(()=>{ + const uncaughtExceptionHandler = (evt)=>{ + const error = 'reason' in evt ? evt.reason : evt.error; + // if we have an unhandled exception/rejection during + // a navigation we fall back to a hard navigation to + // attempt recovering to a good state + handleHardNavError(error); + }; + window.addEventListener('unhandledrejection', uncaughtExceptionHandler); + window.addEventListener('error', uncaughtExceptionHandler); + return ()=>{ + window.removeEventListener('error', uncaughtExceptionHandler); + window.removeEventListener('unhandledrejection', uncaughtExceptionHandler); + }; + }, []); + } +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=nav-failure-handler.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/navigation-devtools.js b/build/node_modules/next/dist/client/components/navigation-devtools.js new file mode 100644 index 0000000..00733db --- /dev/null +++ b/build/node_modules/next/dist/client/components/navigation-devtools.js @@ -0,0 +1,126 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createNestedLayoutNavigationPromises: null, + createRootNavigationPromises: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createNestedLayoutNavigationPromises: function() { + return createNestedLayoutNavigationPromises; + }, + createRootNavigationPromises: function() { + return createRootNavigationPromises; + } +}); +const _hooksclientcontextsharedruntime = require("../../shared/lib/hooks-client-context.shared-runtime"); +const _segment = require("../../shared/lib/segment"); +const layoutSegmentPromisesCache = new WeakMap(); +/** + * Creates instrumented promises for layout segment hooks at a given tree level. + * This is dev-only code for React Suspense DevTools instrumentation. + */ function createLayoutSegmentPromises(tree) { + if (process.env.NODE_ENV === 'production') { + return null; + } + // Check if we already have cached promises for this tree + const cached = layoutSegmentPromisesCache.get(tree); + if (cached) { + return cached; + } + // Create new promises and cache them + const segmentPromises = new Map(); + const segmentsPromises = new Map(); + const parallelRoutes = tree[1]; + for (const parallelRouteKey of Object.keys(parallelRoutes)){ + const segments = (0, _segment.getSelectedLayoutSegmentPath)(tree, parallelRouteKey); + // Use the shared logic to compute the segment value + const segment = (0, _segment.computeSelectedLayoutSegment)(segments, parallelRouteKey); + segmentPromises.set(parallelRouteKey, (0, _hooksclientcontextsharedruntime.createDevToolsInstrumentedPromise)('useSelectedLayoutSegment', segment)); + segmentsPromises.set(parallelRouteKey, (0, _hooksclientcontextsharedruntime.createDevToolsInstrumentedPromise)('useSelectedLayoutSegments', segments)); + } + const result = { + selectedLayoutSegmentPromises: segmentPromises, + selectedLayoutSegmentsPromises: segmentsPromises + }; + // Cache the result for future renders + layoutSegmentPromisesCache.set(tree, result); + return result; +} +const rootNavigationPromisesCache = new WeakMap(); +function createRootNavigationPromises(tree, pathname, searchParams, pathParams) { + if (process.env.NODE_ENV === 'production') { + return null; + } + // Create stable cache keys from the values + const searchParamsString = searchParams.toString(); + const pathParamsString = JSON.stringify(pathParams); + const cacheKey = `${pathname}:${searchParamsString}:${pathParamsString}`; + // Get or create the cache for this tree + let treeCache = rootNavigationPromisesCache.get(tree); + if (!treeCache) { + treeCache = new Map(); + rootNavigationPromisesCache.set(tree, treeCache); + } + // Check if we have cached promises for this combination + const cached = treeCache.get(cacheKey); + if (cached) { + return cached; + } + const readonlySearchParams = new _hooksclientcontextsharedruntime.ReadonlyURLSearchParams(searchParams); + const layoutSegmentPromises = createLayoutSegmentPromises(tree); + const promises = { + pathname: (0, _hooksclientcontextsharedruntime.createDevToolsInstrumentedPromise)('usePathname', pathname), + searchParams: (0, _hooksclientcontextsharedruntime.createDevToolsInstrumentedPromise)('useSearchParams', readonlySearchParams), + params: (0, _hooksclientcontextsharedruntime.createDevToolsInstrumentedPromise)('useParams', pathParams), + ...layoutSegmentPromises + }; + treeCache.set(cacheKey, promises); + return promises; +} +const nestedLayoutPromisesCache = new WeakMap(); +function createNestedLayoutNavigationPromises(tree, parentNavPromises) { + if (process.env.NODE_ENV === 'production') { + return null; + } + const parallelRoutes = tree[1]; + const parallelRouteKeys = Object.keys(parallelRoutes); + // Only create promises if there are parallel routes at this level + if (parallelRouteKeys.length === 0) { + return null; + } + // Get or create the cache for this tree + let treeCache = nestedLayoutPromisesCache.get(tree); + if (!treeCache) { + treeCache = new Map(); + nestedLayoutPromisesCache.set(tree, treeCache); + } + // Check if we have cached promises for this parent combination + const cached = treeCache.get(parentNavPromises); + if (cached) { + return cached; + } + // Create merged promises + const layoutSegmentPromises = createLayoutSegmentPromises(tree); + const promises = { + ...parentNavPromises, + ...layoutSegmentPromises + }; + treeCache.set(parentNavPromises, promises); + return promises; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=navigation-devtools.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/navigation-untracked.js b/build/node_modules/next/dist/client/components/navigation-untracked.js new file mode 100644 index 0000000..677264a --- /dev/null +++ b/build/node_modules/next/dist/client/components/navigation-untracked.js @@ -0,0 +1,67 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "useUntrackedPathname", { + enumerable: true, + get: function() { + return useUntrackedPathname; + } +}); +const _react = require("react"); +const _hooksclientcontextsharedruntime = require("../../shared/lib/hooks-client-context.shared-runtime"); +/** + * This checks to see if the current render has any unknown route parameters that + * would cause the pathname to be dynamic. It's used to trigger a different + * render path in the error boundary. + * + * @returns true if there are any unknown route parameters, false otherwise + */ function hasFallbackRouteParams() { + if (typeof window === 'undefined') { + // AsyncLocalStorage should not be included in the client bundle. + const { workUnitAsyncStorage } = require('../../server/app-render/work-unit-async-storage.external'); + const workUnitStore = workUnitAsyncStorage.getStore(); + if (!workUnitStore) return false; + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'prerender-ppr': + case 'validation-client': + const fallbackParams = workUnitStore.fallbackRouteParams; + return fallbackParams ? fallbackParams.size > 0 : false; + case 'prerender-legacy': + case 'request': + case 'prerender-runtime': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } + return false; + } + return false; +} +function useUntrackedPathname() { + // If there are any unknown route parameters we would typically throw + // an error, but this internal method allows us to return a null value instead + // for components that do not propagate the pathname to the static shell (like + // the error boundary). + if (hasFallbackRouteParams()) { + return null; + } + // This shouldn't cause any issues related to conditional rendering because + // the environment will be consistent for the render. + // eslint-disable-next-line react-hooks/rules-of-hooks + return (0, _react.useContext)(_hooksclientcontextsharedruntime.PathnameContext); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=navigation-untracked.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/navigation.js b/build/node_modules/next/dist/client/components/navigation.js new file mode 100644 index 0000000..7346430 --- /dev/null +++ b/build/node_modules/next/dist/client/components/navigation.js @@ -0,0 +1,225 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + ReadonlyURLSearchParams: null, + RedirectType: null, + ServerInsertedHTMLContext: null, + forbidden: null, + notFound: null, + permanentRedirect: null, + redirect: null, + unauthorized: null, + unstable_isUnrecognizedActionError: null, + unstable_rethrow: null, + useParams: null, + usePathname: null, + useRouter: null, + useSearchParams: null, + useSelectedLayoutSegment: null, + useSelectedLayoutSegments: null, + useServerInsertedHTML: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + // We need the same class that was used to instantiate the context value + // Otherwise instanceof checks will fail in usercode + ReadonlyURLSearchParams: function() { + return _hooksclientcontextsharedruntime.ReadonlyURLSearchParams; + }, + RedirectType: function() { + return _navigationreactserver.RedirectType; + }, + ServerInsertedHTMLContext: function() { + return _serverinsertedhtmlsharedruntime.ServerInsertedHTMLContext; + }, + forbidden: function() { + return _navigationreactserver.forbidden; + }, + notFound: function() { + return _navigationreactserver.notFound; + }, + permanentRedirect: function() { + return _navigationreactserver.permanentRedirect; + }, + redirect: function() { + return _navigationreactserver.redirect; + }, + unauthorized: function() { + return _navigationreactserver.unauthorized; + }, + unstable_isUnrecognizedActionError: function() { + return _unrecognizedactionerror.unstable_isUnrecognizedActionError; + }, + unstable_rethrow: function() { + return _navigationreactserver.unstable_rethrow; + }, + useParams: function() { + return useParams; + }, + usePathname: function() { + return usePathname; + }, + useRouter: function() { + return useRouter; + }, + useSearchParams: function() { + return useSearchParams; + }, + useSelectedLayoutSegment: function() { + return useSelectedLayoutSegment; + }, + useSelectedLayoutSegments: function() { + return useSelectedLayoutSegments; + }, + useServerInsertedHTML: function() { + return _serverinsertedhtmlsharedruntime.useServerInsertedHTML; + } +}); +const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard"); +const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react")); +const _approutercontextsharedruntime = require("../../shared/lib/app-router-context.shared-runtime"); +const _hooksclientcontextsharedruntime = require("../../shared/lib/hooks-client-context.shared-runtime"); +const _segment = require("../../shared/lib/segment"); +const _serverinsertedhtmlsharedruntime = require("../../shared/lib/server-inserted-html.shared-runtime"); +const _unrecognizedactionerror = require("./unrecognized-action-error"); +const _navigationreactserver = require("./navigation.react-server"); +const useDynamicRouteParams = typeof window === 'undefined' ? require('../../server/app-render/dynamic-rendering').useDynamicRouteParams : undefined; +const useDynamicSearchParams = typeof window === 'undefined' ? require('../../server/app-render/dynamic-rendering').useDynamicSearchParams : undefined; +const { instrumentParamsForClientValidation, instrumentSearchParamsForClientValidation, expectCompleteParamsInClientValidation } = typeof window === 'undefined' && process.env.__NEXT_CACHE_COMPONENTS ? require('../../server/app-render/instant-validation/instant-samples-client') : {}; +function useSearchParams() { + useDynamicSearchParams?.('useSearchParams()'); + const searchParams = (0, _react.useContext)(_hooksclientcontextsharedruntime.SearchParamsContext); + // In the case where this is `null`, the compat types added in + // `next-env.d.ts` will add a new overload that changes the return type to + // include `null`. + const readonlySearchParams = (0, _react.useMemo)(()=>{ + if (!searchParams) { + // When the router is not ready in pages, we won't have the search params + // available. + return null; + } + return new _hooksclientcontextsharedruntime.ReadonlyURLSearchParams(searchParams); + }, [ + searchParams + ]); + // During build-time instant validation, wrap with an proxy + // so that accessing undeclared search params throws an error. + if (typeof window === 'undefined' && process.env.__NEXT_CACHE_COMPONENTS && readonlySearchParams) { + return instrumentSearchParamsForClientValidation(readonlySearchParams); + } + // Instrument with Suspense DevTools (dev-only) + if (process.env.NODE_ENV !== 'production' && 'use' in _react.default) { + const navigationPromises = (0, _react.use)(_hooksclientcontextsharedruntime.NavigationPromisesContext); + if (navigationPromises) { + return (0, _react.use)(navigationPromises.searchParams); + } + } + return readonlySearchParams; +} +function usePathname() { + useDynamicRouteParams?.('usePathname()'); + // In the case where this is `null`, the compat types added in `next-env.d.ts` + // will add a new overload that changes the return type to include `null`. + const pathname = (0, _react.useContext)(_hooksclientcontextsharedruntime.PathnameContext); + // During build-time instant validation, error if fallback params exist + // because usePathname() can't return a sensible value without all params. + if (typeof window === 'undefined' && process.env.__NEXT_CACHE_COMPONENTS && pathname) { + expectCompleteParamsInClientValidation('usePathname()'); + return pathname; + } + // Instrument with Suspense DevTools (dev-only) + if (process.env.NODE_ENV !== 'production' && 'use' in _react.default) { + const navigationPromises = (0, _react.use)(_hooksclientcontextsharedruntime.NavigationPromisesContext); + if (navigationPromises) { + return (0, _react.use)(navigationPromises.pathname); + } + } + return pathname; +} +function useRouter() { + const router = (0, _react.useContext)(_approutercontextsharedruntime.AppRouterContext); + if (router === null) { + throw Object.defineProperty(new Error('invariant expected app router to be mounted'), "__NEXT_ERROR_CODE", { + value: "E238", + enumerable: false, + configurable: true + }); + } + return router; +} +function useParams() { + useDynamicRouteParams?.('useParams()'); + const params = (0, _react.useContext)(_hooksclientcontextsharedruntime.PathParamsContext); + // During build-time instant validation, wrap with a proxy + // so that accessing undeclared params throws an error. + if (typeof window === 'undefined' && process.env.__NEXT_CACHE_COMPONENTS && params) { + return instrumentParamsForClientValidation(params); + } + // Instrument with Suspense DevTools (dev-only) + if (process.env.NODE_ENV !== 'production' && 'use' in _react.default) { + const navigationPromises = (0, _react.use)(_hooksclientcontextsharedruntime.NavigationPromisesContext); + if (navigationPromises) { + return (0, _react.use)(navigationPromises.params); + } + } + return params; +} +function useSelectedLayoutSegments(parallelRouteKey = 'children') { + useDynamicRouteParams?.('useSelectedLayoutSegments()'); + const context = (0, _react.useContext)(_approutercontextsharedruntime.LayoutRouterContext); + // @ts-expect-error This only happens in `pages`. Type is overwritten in navigation.d.ts + if (!context) return null; + // During build-time instant validation, error if fallback params exist + // because useSelectedLayoutSegments() can't return a sensible value without all params. + if (typeof window === 'undefined' && process.env.__NEXT_CACHE_COMPONENTS && context) { + expectCompleteParamsInClientValidation('useSelectedLayoutSegments()'); + } + // Instrument with Suspense DevTools (dev-only) + if (process.env.NODE_ENV !== 'production' && 'use' in _react.default) { + const navigationPromises = (0, _react.use)(_hooksclientcontextsharedruntime.NavigationPromisesContext); + if (navigationPromises) { + const promise = navigationPromises.selectedLayoutSegmentsPromises?.get(parallelRouteKey); + if (promise) { + // We should always have a promise here, but if we don't, it's not worth erroring over. + // We just won't be able to instrument it, but can still provide the value. + return (0, _react.use)(promise); + } + } + } + return (0, _segment.getSelectedLayoutSegmentPath)(context.parentTree, parallelRouteKey); +} +function useSelectedLayoutSegment(parallelRouteKey = 'children') { + useDynamicRouteParams?.('useSelectedLayoutSegment()'); + const navigationPromises = (0, _react.useContext)(_hooksclientcontextsharedruntime.NavigationPromisesContext); + const selectedLayoutSegments = useSelectedLayoutSegments(parallelRouteKey); + // During build-time instant validation, error if fallback params exist + // because useSelectedLayoutSegment() can't return a sensible value without all params. + if (typeof window === 'undefined' && process.env.__NEXT_CACHE_COMPONENTS) { + expectCompleteParamsInClientValidation('useSelectedLayoutSegment()'); + } + // Instrument with Suspense DevTools (dev-only) + if (process.env.NODE_ENV !== 'production' && navigationPromises && 'use' in _react.default) { + const promise = navigationPromises.selectedLayoutSegmentPromises?.get(parallelRouteKey); + if (promise) { + // We should always have a promise here, but if we don't, it's not worth erroring over. + // We just won't be able to instrument it, but can still provide the value. + return (0, _react.use)(promise); + } + } + return (0, _segment.computeSelectedLayoutSegment)(selectedLayoutSegments, parallelRouteKey); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=navigation.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/navigation.react-server.js b/build/node_modules/next/dist/client/components/navigation.react-server.js new file mode 100644 index 0000000..65d3673 --- /dev/null +++ b/build/node_modules/next/dist/client/components/navigation.react-server.js @@ -0,0 +1,75 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + ReadonlyURLSearchParams: null, + RedirectType: null, + forbidden: null, + notFound: null, + permanentRedirect: null, + redirect: null, + unauthorized: null, + unstable_isUnrecognizedActionError: null, + unstable_rethrow: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + ReadonlyURLSearchParams: function() { + return _readonlyurlsearchparams.ReadonlyURLSearchParams; + }, + RedirectType: function() { + return RedirectType; + }, + forbidden: function() { + return _forbidden.forbidden; + }, + notFound: function() { + return _notfound.notFound; + }, + permanentRedirect: function() { + return _redirect.permanentRedirect; + }, + redirect: function() { + return _redirect.redirect; + }, + unauthorized: function() { + return _unauthorized.unauthorized; + }, + unstable_isUnrecognizedActionError: function() { + return unstable_isUnrecognizedActionError; + }, + unstable_rethrow: function() { + return _unstablerethrow.unstable_rethrow; + } +}); +const _readonlyurlsearchparams = require("./readonly-url-search-params"); +const _redirect = require("./redirect"); +const _notfound = require("./not-found"); +const _forbidden = require("./forbidden"); +const _unauthorized = require("./unauthorized"); +const _unstablerethrow = require("./unstable-rethrow"); +function unstable_isUnrecognizedActionError() { + throw Object.defineProperty(new Error('`unstable_isUnrecognizedActionError` can only be used on the client.'), "__NEXT_ERROR_CODE", { + value: "E776", + enumerable: false, + configurable: true + }); +} +const RedirectType = { + push: 'push', + replace: 'replace' +}; + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=navigation.react-server.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/not-found.js b/build/node_modules/next/dist/client/components/not-found.js new file mode 100644 index 0000000..99315e8 --- /dev/null +++ b/build/node_modules/next/dist/client/components/not-found.js @@ -0,0 +1,42 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "notFound", { + enumerable: true, + get: function() { + return notFound; + } +}); +const _httpaccessfallback = require("./http-access-fallback/http-access-fallback"); +/** + * This function allows you to render the [not-found.js file](https://nextjs.org/docs/app/api-reference/file-conventions/not-found) + * within a route segment as well as inject a tag. + * + * `notFound()` can be used in + * [Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components), + * [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers), and + * [Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations). + * + * - In a Server Component, this will insert a `` meta tag and set the status code to 404. + * - In a Route Handler or Server Action, it will serve a 404 to the caller. + * + * Read more: [Next.js Docs: `notFound`](https://nextjs.org/docs/app/api-reference/functions/not-found) + */ const DIGEST = `${_httpaccessfallback.HTTP_ERROR_FALLBACK_ERROR_CODE};404`; +function notFound() { + const error = Object.defineProperty(new Error(DIGEST), "__NEXT_ERROR_CODE", { + value: "E1041", + enumerable: false, + configurable: true + }); + error.digest = DIGEST; + throw error; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=not-found.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/readonly-url-search-params.js b/build/node_modules/next/dist/client/components/readonly-url-search-params.js new file mode 100644 index 0000000..67d724e --- /dev/null +++ b/build/node_modules/next/dist/client/components/readonly-url-search-params.js @@ -0,0 +1,41 @@ +/** + * ReadonlyURLSearchParams implementation shared between client and server. + * This file is intentionally not marked as 'use client' or 'use server' + * so it can be imported by both environments. + */ /** @internal */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "ReadonlyURLSearchParams", { + enumerable: true, + get: function() { + return ReadonlyURLSearchParams; + } +}); +class ReadonlyURLSearchParamsError extends Error { + constructor(){ + super('Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams'); + } +} +class ReadonlyURLSearchParams extends URLSearchParams { + /** @deprecated Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams */ append() { + throw new ReadonlyURLSearchParamsError(); + } + /** @deprecated Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams */ delete() { + throw new ReadonlyURLSearchParamsError(); + } + /** @deprecated Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams */ set() { + throw new ReadonlyURLSearchParamsError(); + } + /** @deprecated Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams */ sort() { + throw new ReadonlyURLSearchParamsError(); + } +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=readonly-url-search-params.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/redirect-boundary.js b/build/node_modules/next/dist/client/components/redirect-boundary.js new file mode 100644 index 0000000..a6a3cde --- /dev/null +++ b/build/node_modules/next/dist/client/components/redirect-boundary.js @@ -0,0 +1,107 @@ +'use client'; +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + RedirectBoundary: null, + RedirectErrorBoundary: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + RedirectBoundary: function() { + return RedirectBoundary; + }, + RedirectErrorBoundary: function() { + return RedirectErrorBoundary; + } +}); +const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard"); +const _jsxruntime = require("react/jsx-runtime"); +const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react")); +const _navigation = require("./navigation"); +const _redirect = require("./redirect"); +const _redirecterror = require("./redirect-error"); +function HandleRedirect({ redirect, reset, redirectType }) { + const router = (0, _navigation.useRouter)(); + (0, _react.useEffect)(()=>{ + _react.default.startTransition(()=>{ + if (redirectType === 'push') { + router.push(redirect, {}); + } else { + router.replace(redirect, {}); + } + reset(); + }); + }, [ + redirect, + redirectType, + reset, + router + ]); + return null; +} +class RedirectErrorBoundary extends _react.default.Component { + constructor(props){ + super(props); + this.state = { + redirect: null, + redirectType: null + }; + } + static getDerivedStateFromError(error) { + if ((0, _redirecterror.isRedirectError)(error)) { + const url = (0, _redirect.getURLFromRedirectError)(error); + const redirectType = (0, _redirect.getRedirectTypeFromError)(error); + if ('handled' in error) { + // The redirect was already handled. We'll still catch the redirect error + // so that we can remount the subtree, but we don't actually need to trigger the + // router.push. + return { + redirect: null, + redirectType: null + }; + } + return { + redirect: url, + redirectType + }; + } + // Re-throw if error is not for redirect + throw error; + } + // Explicit type is needed to avoid the generated `.d.ts` having a wide return type that could be specific to the `@types/react` version. + render() { + const { redirect, redirectType } = this.state; + if (redirect !== null && redirectType !== null) { + return /*#__PURE__*/ (0, _jsxruntime.jsx)(HandleRedirect, { + redirect: redirect, + redirectType: redirectType, + reset: ()=>this.setState({ + redirect: null + }) + }); + } + return this.props.children; + } +} +function RedirectBoundary({ children }) { + const router = (0, _navigation.useRouter)(); + return /*#__PURE__*/ (0, _jsxruntime.jsx)(RedirectErrorBoundary, { + router: router, + children: children + }); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=redirect-boundary.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/redirect-error.js b/build/node_modules/next/dist/client/components/redirect-error.js new file mode 100644 index 0000000..06ad1a4 --- /dev/null +++ b/build/node_modules/next/dist/client/components/redirect-error.js @@ -0,0 +1,43 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + REDIRECT_ERROR_CODE: null, + isRedirectError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + REDIRECT_ERROR_CODE: function() { + return REDIRECT_ERROR_CODE; + }, + isRedirectError: function() { + return isRedirectError; + } +}); +const _redirectstatuscode = require("./redirect-status-code"); +const REDIRECT_ERROR_CODE = 'NEXT_REDIRECT'; +function isRedirectError(error) { + if (typeof error !== 'object' || error === null || !('digest' in error) || typeof error.digest !== 'string') { + return false; + } + const digest = error.digest.split(';'); + const [errorCode, type] = digest; + const destination = digest.slice(2, -2).join(';'); + const status = digest.at(-2); + const statusCode = Number(status); + return errorCode === REDIRECT_ERROR_CODE && (type === 'replace' || type === 'push') && typeof destination === 'string' && !isNaN(statusCode) && statusCode in _redirectstatuscode.RedirectStatusCode; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=redirect-error.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/redirect-status-code.js b/build/node_modules/next/dist/client/components/redirect-status-code.js new file mode 100644 index 0000000..51edb28 --- /dev/null +++ b/build/node_modules/next/dist/client/components/redirect-status-code.js @@ -0,0 +1,24 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "RedirectStatusCode", { + enumerable: true, + get: function() { + return RedirectStatusCode; + } +}); +var RedirectStatusCode = /*#__PURE__*/ function(RedirectStatusCode) { + RedirectStatusCode[RedirectStatusCode["SeeOther"] = 303] = "SeeOther"; + RedirectStatusCode[RedirectStatusCode["TemporaryRedirect"] = 307] = "TemporaryRedirect"; + RedirectStatusCode[RedirectStatusCode["PermanentRedirect"] = 308] = "PermanentRedirect"; + return RedirectStatusCode; +}({}); + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=redirect-status-code.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/redirect.js b/build/node_modules/next/dist/client/components/redirect.js new file mode 100644 index 0000000..0d3fec7 --- /dev/null +++ b/build/node_modules/next/dist/client/components/redirect.js @@ -0,0 +1,91 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getRedirectError: null, + getRedirectStatusCodeFromError: null, + getRedirectTypeFromError: null, + getURLFromRedirectError: null, + permanentRedirect: null, + redirect: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getRedirectError: function() { + return getRedirectError; + }, + getRedirectStatusCodeFromError: function() { + return getRedirectStatusCodeFromError; + }, + getRedirectTypeFromError: function() { + return getRedirectTypeFromError; + }, + getURLFromRedirectError: function() { + return getURLFromRedirectError; + }, + permanentRedirect: function() { + return permanentRedirect; + }, + redirect: function() { + return redirect; + } +}); +const _redirectstatuscode = require("./redirect-status-code"); +const _redirecterror = require("./redirect-error"); +const actionAsyncStorage = typeof window === 'undefined' ? require('../../server/app-render/action-async-storage.external').actionAsyncStorage : undefined; +function getRedirectError(url, type, statusCode = _redirectstatuscode.RedirectStatusCode.TemporaryRedirect) { + const error = Object.defineProperty(new Error(_redirecterror.REDIRECT_ERROR_CODE), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + error.digest = `${_redirecterror.REDIRECT_ERROR_CODE};${type};${url};${statusCode};`; + return error; +} +function redirect(/** The URL to redirect to */ url, type) { + type ??= actionAsyncStorage?.getStore()?.isAction ? 'push' : 'replace'; + throw getRedirectError(url, type, _redirectstatuscode.RedirectStatusCode.TemporaryRedirect); +} +function permanentRedirect(/** The URL to redirect to */ url, type = 'replace') { + throw getRedirectError(url, type, _redirectstatuscode.RedirectStatusCode.PermanentRedirect); +} +function getURLFromRedirectError(error) { + if (!(0, _redirecterror.isRedirectError)(error)) return null; + // Slices off the beginning of the digest that contains the code and the + // separating ';'. + return error.digest.split(';').slice(2, -2).join(';'); +} +function getRedirectTypeFromError(error) { + if (!(0, _redirecterror.isRedirectError)(error)) { + throw Object.defineProperty(new Error('Not a redirect error'), "__NEXT_ERROR_CODE", { + value: "E260", + enumerable: false, + configurable: true + }); + } + return error.digest.split(';', 2)[1]; +} +function getRedirectStatusCodeFromError(error) { + if (!(0, _redirecterror.isRedirectError)(error)) { + throw Object.defineProperty(new Error('Not a redirect error'), "__NEXT_ERROR_CODE", { + value: "E260", + enumerable: false, + configurable: true + }); + } + return Number(error.digest.split(';').at(-2)); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=redirect.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/router-reducer/compute-changed-path.js b/build/node_modules/next/dist/client/components/router-reducer/compute-changed-path.js new file mode 100644 index 0000000..7b61d13 --- /dev/null +++ b/build/node_modules/next/dist/client/components/router-reducer/compute-changed-path.js @@ -0,0 +1,201 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + computeChangedPath: null, + extractPathFromFlightRouterState: null, + extractSourcePageFromFlightRouterState: null, + getSelectedParams: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + computeChangedPath: function() { + return computeChangedPath; + }, + extractPathFromFlightRouterState: function() { + return extractPathFromFlightRouterState; + }, + extractSourcePageFromFlightRouterState: function() { + return extractSourcePageFromFlightRouterState; + }, + getSelectedParams: function() { + return getSelectedParams; + } +}); +const _interceptionroutes = require("../../../shared/lib/router/utils/interception-routes"); +const _segment = require("../../../shared/lib/segment"); +const _matchsegments = require("../match-segments"); +const removeLeadingSlash = (segment)=>{ + return segment[0] === '/' ? segment.slice(1) : segment; +}; +const segmentToPathname = (segment)=>{ + if (typeof segment === 'string') { + // 'children' is not a valid path -- it's technically a parallel route that corresponds with the current segment's page + // if we don't skip it, then the computed pathname might be something like `/children` which doesn't make sense. + if (segment === 'children') return ''; + return segment; + } + return segment[1]; +}; +const segmentToSourcePagePathname = (segment)=>{ + if (typeof segment === 'string') { + if (segment === 'children') return ''; + if (segment.startsWith(_segment.PAGE_SEGMENT_KEY)) return 'page'; + return segment; + } + const [paramName, , dynamicParamType] = segment; + switch(dynamicParamType){ + case 'c': + return `[...${paramName}]`; + case 'ci(..)(..)': + return `(..)(..)[...${paramName}]`; + case 'ci(.)': + return `(.)[...${paramName}]`; + case 'ci(..)': + return `(..)[...${paramName}]`; + case 'ci(...)': + return `(...)[...${paramName}]`; + case 'oc': + return `[[...${paramName}]]`; + case 'd': + return `[${paramName}]`; + case 'di(..)(..)': + return `(..)(..)[${paramName}]`; + case 'di(.)': + return `(.)[${paramName}]`; + case 'di(..)': + return `(..)[${paramName}]`; + case 'di(...)': + return `(...)[${paramName}]`; + default: + dynamicParamType; + return `[${paramName}]`; + } +}; +function normalizeSegments(segments) { + return segments.reduce((acc, segment)=>{ + segment = removeLeadingSlash(segment); + if (segment === '' || (0, _segment.isGroupSegment)(segment)) { + return acc; + } + return `${acc}/${segment}`; + }, '') || '/'; +} +function extractPathFromFlightRouterState(flightRouterState) { + const segment = Array.isArray(flightRouterState[0]) ? flightRouterState[0][1] : flightRouterState[0]; + if (segment === _segment.DEFAULT_SEGMENT_KEY || _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.some((m)=>segment.startsWith(m))) return undefined; + if (segment.startsWith(_segment.PAGE_SEGMENT_KEY)) return ''; + const segments = [ + segmentToPathname(segment) + ]; + const parallelRoutes = flightRouterState[1] ?? {}; + const childrenPath = parallelRoutes.children ? extractPathFromFlightRouterState(parallelRoutes.children) : undefined; + if (childrenPath !== undefined) { + segments.push(childrenPath); + } else { + for (const [key, value] of Object.entries(parallelRoutes)){ + if (key === 'children') continue; + const childPath = extractPathFromFlightRouterState(value); + if (childPath !== undefined) { + segments.push(childPath); + } + } + } + return normalizeSegments(segments); +} +function extractSourcePageSegmentsFromFlightRouterState(flightRouterState) { + const segment = segmentToSourcePagePathname(flightRouterState[0]); + if (segment === _segment.DEFAULT_SEGMENT_KEY) { + return undefined; + } + if (segment === 'page') { + return [ + segment + ]; + } + const parallelRoutes = flightRouterState[1] ?? {}; + const childrenPath = parallelRoutes.children ? extractSourcePageSegmentsFromFlightRouterState(parallelRoutes.children) : undefined; + if (childrenPath !== undefined) { + return segment === '' ? childrenPath : [ + removeLeadingSlash(segment), + ...childrenPath + ]; + } + for (const [key, value] of Object.entries(parallelRoutes)){ + if (key === 'children') continue; + const childPath = extractSourcePageSegmentsFromFlightRouterState(value); + if (childPath !== undefined) { + return segment === '' ? childPath : [ + removeLeadingSlash(segment), + ...childPath + ]; + } + } + return undefined; +} +function extractSourcePageFromFlightRouterState(flightRouterState) { + const sourcePageSegments = extractSourcePageSegmentsFromFlightRouterState(flightRouterState); + return sourcePageSegments ? `/${sourcePageSegments.join('/')}` : undefined; +} +function computeChangedPathImpl(treeA, treeB) { + const [segmentA, parallelRoutesA] = treeA; + const [segmentB, parallelRoutesB] = treeB; + const normalizedSegmentA = segmentToPathname(segmentA); + const normalizedSegmentB = segmentToPathname(segmentB); + if (_interceptionroutes.INTERCEPTION_ROUTE_MARKERS.some((m)=>normalizedSegmentA.startsWith(m) || normalizedSegmentB.startsWith(m))) { + return ''; + } + if (!(0, _matchsegments.matchSegment)(segmentA, segmentB)) { + // once we find where the tree changed, we compute the rest of the path by traversing the tree + return extractPathFromFlightRouterState(treeB) ?? ''; + } + for(const parallelRouterKey in parallelRoutesA){ + if (parallelRoutesB[parallelRouterKey]) { + const changedPath = computeChangedPathImpl(parallelRoutesA[parallelRouterKey], parallelRoutesB[parallelRouterKey]); + if (changedPath !== null) { + return `${segmentToPathname(segmentB)}/${changedPath}`; + } + } + } + return null; +} +function computeChangedPath(treeA, treeB) { + const changedPath = computeChangedPathImpl(treeA, treeB); + if (changedPath == null || changedPath === '/') { + return changedPath; + } + // lightweight normalization to remove route groups + return normalizeSegments(changedPath.split('/')); +} +function getSelectedParams(currentTree, params = {}) { + const parallelRoutes = currentTree[1]; + for (const parallelRoute of Object.values(parallelRoutes)){ + const segment = parallelRoute[0]; + const isDynamicParameter = Array.isArray(segment); + const segmentValue = isDynamicParameter ? segment[1] : segment; + if (!segmentValue || segmentValue.startsWith(_segment.PAGE_SEGMENT_KEY)) continue; + // Ensure catchAll and optional catchall are turned into an array + const isCatchAll = isDynamicParameter && (segment[2] === 'c' || segment[2] === 'oc'); + if (isCatchAll) { + params[segment[0]] = segment[1].split('/'); + } else if (isDynamicParameter) { + params[segment[0]] = segment[1]; + } + params = getSelectedParams(parallelRoute, params); + } + return params; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=compute-changed-path.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/router-reducer/create-href-from-url.js b/build/node_modules/next/dist/client/components/router-reducer/create-href-from-url.js new file mode 100644 index 0000000..1d6401f --- /dev/null +++ b/build/node_modules/next/dist/client/components/router-reducer/create-href-from-url.js @@ -0,0 +1,21 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "createHrefFromUrl", { + enumerable: true, + get: function() { + return createHrefFromUrl; + } +}); +function createHrefFromUrl(url, includeHash = true) { + return url.pathname + url.search + (includeHash ? url.hash : ''); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=create-href-from-url.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/router-reducer/create-initial-router-state.js b/build/node_modules/next/dist/client/components/router-reducer/create-initial-router-state.js new file mode 100644 index 0000000..4437566 --- /dev/null +++ b/build/node_modules/next/dist/client/components/router-reducer/create-initial-router-state.js @@ -0,0 +1,153 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "createInitialRouterState", { + enumerable: true, + get: function() { + return createInitialRouterState; + } +}); +const _createhreffromurl = require("./create-href-from-url"); +const _computechangedpath = require("./compute-changed-path"); +const _flightdatahelpers = require("../../flight-data-helpers"); +const _pprnavigations = require("./ppr-navigations"); +const _cache = require("../segment-cache/cache"); +const _types = require("../segment-cache/types"); +const _bfcache = require("../segment-cache/bfcache"); +const _fetchserverresponse = require("./fetch-server-response"); +const _optimisticroutes = require("../segment-cache/optimistic-routes"); +function createInitialRouterState({ navigatedAt, initialRSCPayload, initialFlightStreamForCache, location }) { + const { c: initialCanonicalUrlParts, f: initialFlightData, q: initialRenderedSearch, i: initialCouldBeIntercepted, S: initialSupportsPerSegmentPrefetching, s: initialStaleTime, l: initialStaticStageByteLength, h: initialHeadVaryParams, p: initialRuntimePrefetchStream, d: initialDynamicStaleTimeSeconds } = initialRSCPayload; + // When initialized on the server, the canonical URL is provided as an array of parts. + // This is to ensure that when the RSC payload streamed to the client, crawlers don't interpret it + // as a URL that should be crawled. + const initialCanonicalUrl = initialCanonicalUrlParts.join('/'); + const normalizedFlightData = (0, _flightdatahelpers.getFlightDataPartsFromPath)(initialFlightData[0]); + const { tree: initialTree, seedData: initialSeedData, head: initialHead } = normalizedFlightData; + // For the SSR render, seed data should always be available (we only send back a `null` response + // in the case of a `loading` segment, pre-PPR.) + const canonicalUrl = // location.href is read as the initial value for canonicalUrl in the browser + // This is safe to do as canonicalUrl can't be rendered, it's only used to control the history updates in the useEffect further down in this file. + location ? (0, _createhreffromurl.createHrefFromUrl)(location) : initialCanonicalUrl; + // Convert the initial FlightRouterState into the RouteTree type. + // NOTE: The metadataVaryPath isn't used for anything currently because the + // head is embedded into the CacheNode tree, but eventually we'll lift it out + // and store it on the top-level state object. + // + // TODO: For statically-generated-at-build-time HTML pages, the + // FlightRouterState baked into the initial RSC payload won't have the + // correct segment inlining hints (ParentInlinedIntoSelf, InlinedIntoChild) + // because those are computed after the pre-render. The client will need to + // fetch the correct hints from the route tree prefetch (/_tree) response + // before acting on inlining decisions. + const acc = { + metadataVaryPath: null + }; + const initialRouteTree = (0, _cache.convertRootFlightRouterStateToRouteTree)(initialTree, initialRenderedSearch, acc); + const metadataVaryPath = acc.metadataVaryPath; + const initialTask = (0, _pprnavigations.createInitialCacheNodeForHydration)(navigatedAt, initialRouteTree, initialSeedData, initialHead, (0, _bfcache.computeDynamicStaleAt)(navigatedAt, initialDynamicStaleTimeSeconds ?? _bfcache.UnknownDynamicStaleTime)); + // The following only applies in the browser (location !== null) since neither + // route learning nor segment cache state persists from SSR to client. + if (location !== null && metadataVaryPath !== null) { + // Learn the route pattern so we can predict it for future navigations. + (0, _optimisticroutes.discoverKnownRoute)(Date.now(), location.pathname, null, null, initialRouteTree, metadataVaryPath, initialCouldBeIntercepted, canonicalUrl, initialSupportsPerSegmentPrefetching, false // hasDynamicRewrite + ); + // Write the initial seed data into the segment cache so subsequent + // navigations to the initial page can serve cached segments instantly. + if (initialSeedData !== null && initialStaleTime !== undefined) { + if (initialStaticStageByteLength !== undefined && initialFlightStreamForCache != null) { + // Partially static page — truncate the cloned Flight stream at the + // static stage byte boundary, decode, and cache the static subset. + (0, _fetchserverresponse.decodeStaticStage)(initialFlightStreamForCache, initialStaticStageByteLength, undefined).then(async (staticStageResponse)=>{ + const now = Date.now(); + const staleAt = await (0, _cache.getStaleAt)(now, staticStageResponse.s); + (0, _cache.writeStaticStageResponseIntoCache)(now, staticStageResponse.f, undefined, staticStageResponse.h, staleAt, initialTree, initialRenderedSearch, true // isResponsePartial + ); + }).catch(()=>{ + // The static stage processing failed. Not fatal — the page + // rendered normally, we just won't write into the cache. + }); + } else { + // Fully static page — cache the entire decoded seed data as-is. We're + // not using the initial response here (which would allow us to combine + // the two branches) to avoid unnecessary decoding of the Flight data, + // since we can just take the seed data that we already decoded during + // hydration and write it into the cache directly. + const now = Date.now(); + (0, _cache.getStaleAt)(now, initialStaleTime).then((staleAt)=>{ + (0, _cache.writeStaticStageResponseIntoCache)(now, initialFlightData, undefined, initialHeadVaryParams, staleAt, initialTree, initialRenderedSearch, false // isResponsePartial + ); + }).catch(()=>{ + // The static stage processing failed. Not fatal — the page + // rendered normally, we just won't write into the cache. + }); + // Cancel the stream clone — fully static path doesn't need it. + initialFlightStreamForCache?.cancel(); + } + } else { + // No caching — cancel the unused stream clone. + initialFlightStreamForCache?.cancel(); + } + // If the initial RSC payload includes an embedded runtime prefetch stream, + // decode it and write the runtime data into the segment cache. This allows + // subsequent navigations to serve runtime-prefetchable content from cache + // without a separate prefetch request. + if (initialRuntimePrefetchStream != null) { + (0, _cache.processRuntimePrefetchStream)(Date.now(), initialRuntimePrefetchStream, initialTree, initialRenderedSearch).then((processed)=>{ + if (processed !== null) { + (0, _cache.writeDynamicRenderResponseIntoCache)(Date.now(), _types.FetchStrategy.PPRRuntime, processed.flightDatas, processed.buildId, processed.isResponsePartial, processed.headVaryParams, processed.staleAt, processed.navigationSeed, null); + } + }).catch(()=>{ + // Runtime prefetch cache write failed. Not fatal — the page rendered + // normally, we just won't cache runtime data. + }); + } + } + // NOTE: We intentionally don't check if any data needs to be fetched from the + // server. We assume the initial hydration payload is sufficient to render + // the page. + // + // The completeness of the initial data is an important property that we rely + // on as a last-ditch mechanism for recovering the app; we must always be able + // to reload a fresh HTML document to get to a consistent state. + // + // In the future, there may be cases where the server intentionally sends + // partial data and expects the client to fill in the rest, in which case this + // logic may change. (There already is a similar case where the server sends + // _no_ hydration data in the HTML document at all, and the client fetches it + // separately, but that's different because we still end up hydrating with a + // complete tree.) + const initialState = { + tree: initialTask.route, + cache: initialTask.node, + pushRef: { + pendingPush: false, + mpaNavigation: false, + // First render needs to preserve the previous window.history.state + // to avoid it being overwritten on navigation back/forward with MPA Navigation. + preserveCustomHistoryState: true + }, + focusAndScrollRef: { + scrollRef: null, + forceScroll: false, + onlyHashChange: false, + hashFragment: null + }, + canonicalUrl, + renderedSearch: initialRenderedSearch, + // the || operator is intentional, the pathname can be an empty string + nextUrl: ((0, _computechangedpath.extractPathFromFlightRouterState)(initialTree) || location?.pathname) ?? null, + previousNextUrl: null, + debugInfo: null + }; + return initialState; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=create-initial-router-state.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js b/build/node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js new file mode 100644 index 0000000..e6c8689 --- /dev/null +++ b/build/node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js @@ -0,0 +1,32 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "createRouterCacheKey", { + enumerable: true, + get: function() { + return createRouterCacheKey; + } +}); +const _segment = require("../../../shared/lib/segment"); +function createRouterCacheKey(segment, withoutSearchParameters = false) { + // if the segment is an array, it means it's a dynamic segment + // for example, ['lang', 'en', 'd']. We need to convert it to a string to store it as a cache node key. + if (Array.isArray(segment)) { + return `${segment[0]}|${segment[1]}|${segment[2]}`; + } + // Page segments might have search parameters, ie __PAGE__?foo=bar + // When `withoutSearchParameters` is true, we only want to return the page segment + if (withoutSearchParameters && segment.startsWith(_segment.PAGE_SEGMENT_KEY)) { + return _segment.PAGE_SEGMENT_KEY; + } + return segment; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=create-router-cache-key.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/router-reducer/fetch-server-response.js b/build/node_modules/next/dist/client/components/router-reducer/fetch-server-response.js new file mode 100644 index 0000000..5d7151c --- /dev/null +++ b/build/node_modules/next/dist/client/components/router-reducer/fetch-server-response.js @@ -0,0 +1,457 @@ +'use client'; +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createFetch: null, + createFromNextReadableStream: null, + decodeStaticStage: null, + fetchServerResponse: null, + processFetch: null, + resolveStaticStageData: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createFetch: function() { + return createFetch; + }, + createFromNextReadableStream: function() { + return createFromNextReadableStream; + }, + decodeStaticStage: function() { + return decodeStaticStage; + }, + fetchServerResponse: function() { + return fetchServerResponse; + }, + processFetch: function() { + return processFetch; + }, + resolveStaticStageData: function() { + return resolveStaticStageData; + } +}); +const _client = require("react-server-dom-webpack/client"); +const _invarianterror = require("../../../shared/lib/invariant-error"); +const _approuterheaders = require("../app-router-headers"); +const _appcallserver = require("../../app-call-server"); +const _appfindsourcemapurl = require("../../app-find-source-map-url"); +const _flightdatahelpers = require("../../flight-data-helpers"); +const _setcachebustingsearchparam = require("./set-cache-busting-search-param"); +const _routeparams = require("../../route-params"); +const _deploymentid = require("../../../shared/lib/deployment-id"); +const _navigationbuildid = require("../../navigation-build-id"); +const _constants = require("../../../lib/constants"); +const _cache = require("../segment-cache/cache"); +const _bfcache = require("../segment-cache/bfcache"); +const createFromReadableStream = _client.createFromReadableStream; +const createFromFetch = _client.createFromFetch; +let createDebugChannel; +if (process.env.__NEXT_DEV_SERVER && process.env.__NEXT_REACT_DEBUG_CHANNEL) { + createDebugChannel = require('../../dev/debug-channel').createDebugChannel; +} +function doMpaNavigation(url) { + return (0, _routeparams.urlToUrlWithoutFlightMarker)(new URL(url, location.origin)).toString(); +} +let isPageUnloading = false; +if (typeof window !== 'undefined') { + // Track when the page is unloading, e.g. due to reloading the page or + // performing hard navigations. This allows us to suppress error logging when + // the browser cancels in-flight requests during page unload. + window.addEventListener('pagehide', ()=>{ + isPageUnloading = true; + }); + // Reset the flag on pageshow, e.g. when navigating back and the JavaScript + // execution context is restored by the browser. + window.addEventListener('pageshow', ()=>{ + isPageUnloading = false; + }); +} +async function fetchServerResponse(url, options) { + const { flightRouterState, nextUrl } = options; + const headers = { + // Enable flight response + [_approuterheaders.RSC_HEADER]: '1', + // Provide the current router state + [_approuterheaders.NEXT_ROUTER_STATE_TREE_HEADER]: (0, _flightdatahelpers.prepareFlightRouterStateForRequest)(flightRouterState, options.isHmrRefresh) + }; + if (process.env.NODE_ENV === 'development' && options.isHmrRefresh) { + headers[_approuterheaders.NEXT_HMR_REFRESH_HEADER] = '1'; + } + if (nextUrl) { + headers[_approuterheaders.NEXT_URL] = nextUrl; + } + // In static export mode, we need to modify the URL to request the .txt file, + // but we should preserve the original URL for the canonical URL and error handling. + const originalUrl = url; + try { + if (process.env.NODE_ENV === 'production') { + if (process.env.__NEXT_CONFIG_OUTPUT === 'export') { + // In "output: export" mode, we can't rely on headers to distinguish + // between HTML and RSC requests. Instead, we append an extra prefix + // to the request. + url = new URL(url); + if (url.pathname.endsWith('/')) { + url.pathname += 'index.txt'; + } else { + url.pathname += '.txt'; + } + } + } + // Typically, during a navigation, we decode the response using Flight's + // `createFromFetch` API, which accepts a `fetch` promise. + // TODO: Remove this check once the old PPR flag is removed + const isLegacyPPR = process.env.__NEXT_PPR && !process.env.__NEXT_CACHE_COMPONENTS; + const shouldImmediatelyDecode = !isLegacyPPR; + const res = await createFetch(url, headers, 'auto', shouldImmediatelyDecode); + const responseUrl = (0, _routeparams.urlToUrlWithoutFlightMarker)(new URL(res.url)); + const canonicalUrl = res.redirected ? responseUrl : originalUrl; + const contentType = res.headers.get('content-type') || ''; + const interception = !!res.headers.get('vary')?.includes(_approuterheaders.NEXT_URL); + const postponed = !!res.headers.get(_approuterheaders.NEXT_DID_POSTPONE_HEADER); + let isFlightResponse = contentType.startsWith(_approuterheaders.RSC_CONTENT_TYPE_HEADER); + if (process.env.NODE_ENV === 'production') { + if (process.env.__NEXT_CONFIG_OUTPUT === 'export') { + if (!isFlightResponse) { + isFlightResponse = contentType.startsWith('text/plain'); + } + } + } + // If fetch returns something different than flight response handle it like a mpa navigation + // If the fetch was not 200, we also handle it like a mpa navigation + if (!isFlightResponse || !res.ok || !res.body) { + // in case the original URL came with a hash, preserve it before redirecting to the new URL + if (url.hash) { + responseUrl.hash = url.hash; + } + return doMpaNavigation(responseUrl.toString()); + } + // We may navigate to a page that requires a different Webpack runtime. + // In prod, every page will have the same Webpack runtime. + // In dev, the Webpack runtime is minimal for each page. + // We need to ensure the Webpack runtime is updated before executing client-side JS of the new page. + // TODO: This needs to happen in the Flight Client. + // Or Webpack needs to include the runtime update in the Flight response as + // a blocking script. + if (process.env.NODE_ENV !== 'production' && !process.env.TURBOPACK) { + await require('../../dev/hot-reloader/app/hot-reloader-app').waitForWebpackRuntimeHotUpdate(); + } + let flightResponsePromise = res.flightResponsePromise; + if (flightResponsePromise === null) { + // Typically, `createFetch` would have already started decoding the + // Flight response. If it hasn't, though, we need to decode it now. + // TODO: This should only be reachable if legacy PPR is enabled (i.e. PPR + // without Cache Components). Remove this branch once legacy PPR + // is deleted. + flightResponsePromise = createFromNextReadableStream(res.body, headers, { + allowPartialStream: postponed + }); + } + const [flightResponse, cacheData] = await Promise.all([ + flightResponsePromise, + res.cacheData + ]); + if ((res.headers.get(_constants.NEXT_NAV_DEPLOYMENT_ID_HEADER) ?? flightResponse.b) !== (0, _navigationbuildid.getNavigationBuildId)()) { + // The server build does not match the client build. + return doMpaNavigation(res.url); + } + const normalizedFlightData = (0, _flightdatahelpers.normalizeFlightData)(flightResponse.f); + if (typeof normalizedFlightData === 'string') { + return doMpaNavigation(normalizedFlightData); + } + const staticStageData = cacheData !== null ? await resolveStaticStageData(cacheData, flightResponse, headers) : null; + return { + flightData: normalizedFlightData, + canonicalUrl: canonicalUrl, + // TODO: We should be able to read this from the rewrite header, not the + // Flight response. Theoretically they should always agree, but there are + // currently some cases where it's incorrect for interception routes. We + // can always trust the value in the response body. However, per-segment + // prefetch responses don't embed the value in the body; they rely on the + // header alone. So we need to investigate why the header is sometimes + // wrong for interception routes. + renderedSearch: flightResponse.q, + couldBeIntercepted: interception, + supportsPerSegmentPrefetching: flightResponse.S, + postponed, + // The dynamicStaleTime is only present in the response body when + // a page exports unstable_dynamicStaleTime and this is a dynamic render. + // When absent (UnknownDynamicStaleTime), the client falls back to the + // global DYNAMIC_STALETIME_MS. The value is in seconds. + dynamicStaleTime: flightResponse.d ?? _bfcache.UnknownDynamicStaleTime, + staticStageData, + runtimePrefetchStream: flightResponse.p ?? null, + responseHeaders: res.headers, + debugInfo: flightResponsePromise._debugInfo ?? null + }; + } catch (err) { + if (!isPageUnloading) { + console.error(`Failed to fetch RSC payload for ${originalUrl}. Falling back to browser navigation.`, err); + } + // If fetch fails handle it like a mpa navigation + // TODO-APP: Add a test for the case where a CORS request fails, e.g. external url redirect coming from the response. + // See https://github.com/vercel/next.js/issues/43605#issuecomment-1451617521 for a reproduction. + return originalUrl.toString(); + } +} +async function processFetch(response) { + if (process.env.__NEXT_CACHE_COMPONENTS) { + if (!response.body) { + throw Object.defineProperty(new _invarianterror.InvariantError('Expected RSC navigation response to have a body'), "__NEXT_ERROR_CODE", { + value: "E1088", + enumerable: false, + configurable: true + }); + } + const { stream, isPartial } = await (0, _cache.stripIsPartialByte)(response.body); + let responseStream; + let cacheData; + if (process.env.__NEXT_EXPERIMENTAL_CACHED_NAVIGATIONS) { + const [stream1, stream2] = stream.tee(); + responseStream = stream1; + cacheData = { + isResponsePartial: isPartial, + responseBodyClone: stream2 + }; + } else { + responseStream = stream; + cacheData = { + isResponsePartial: isPartial + }; + } + const strippedResponse = new Response(responseStream, { + headers: response.headers, + status: response.status, + statusText: response.statusText + }); + // The Response constructor doesn't preserve `url` or `redirected` from + // the original. We need both: `url` for React DevTools and `redirected` + // for the redirect replay logic below. + Object.defineProperty(strippedResponse, 'url', { + value: response.url + }); + Object.defineProperty(strippedResponse, 'redirected', { + value: response.redirected + }); + return { + response: strippedResponse, + cacheData + }; + } + return { + response, + cacheData: null + }; +} +async function resolveStaticStageData(cacheData, flightResponse, headers) { + const { isResponsePartial, responseBodyClone } = cacheData; + if (responseBodyClone) { + if (!isResponsePartial) { + // Fully static — cache the entire decoded response as-is. + responseBodyClone.cancel(); + return { + response: flightResponse, + isResponsePartial: false + }; + } + if (flightResponse.l !== undefined) { + // Partially static — truncate the body clone at the byte boundary and + // decode it. + const response = await decodeStaticStage(responseBodyClone, flightResponse.l, headers); + return { + response, + isResponsePartial: true + }; + } + // No caching — cancel the unused clone. + responseBodyClone.cancel(); + } + return null; +} +async function decodeStaticStage(responseBodyClone, staticStageByteLengthPromise, headers) { + const staticStageByteLength = await staticStageByteLengthPromise; + const truncatedStream = truncateStream(responseBodyClone, staticStageByteLength); + return createFromNextReadableStream(truncatedStream, headers, { + allowPartialStream: true + }); +} +async function createFetch(url, headers, fetchPriority, shouldImmediatelyDecode, signal) { + // TODO: In output: "export" mode, the headers do nothing. Omit them (and the + // cache busting search param) from the request so they're + // maximally cacheable. + if (process.env.__NEXT_TEST_MODE && fetchPriority !== null) { + headers['Next-Test-Fetch-Priority'] = fetchPriority; + } + const deploymentId = (0, _deploymentid.getDeploymentId)(); + if (deploymentId) { + headers['x-deployment-id'] = deploymentId; + } + if (process.env.__NEXT_DEV_SERVER) { + if (self.__next_r) { + headers[_approuterheaders.NEXT_HTML_REQUEST_ID_HEADER] = self.__next_r; + } + // Create a new request ID for the server action request. The server uses + // this to tag debug information sent via WebSocket to the client, which + // then routes those chunks to the debug channel associated with this ID. + headers[_approuterheaders.NEXT_REQUEST_ID_HEADER] = crypto.getRandomValues(new Uint32Array(1))[0].toString(16); + } + const fetchOptions = { + // Backwards compat for older browsers. `same-origin` is the default in modern browsers. + credentials: 'same-origin', + headers, + priority: fetchPriority || undefined, + signal + }; + // `fetchUrl` is slightly different from `url` because we add a cache-busting + // search param to it. This should not leak outside of this function, so we + // track them separately. + let fetchUrl = new URL(url); + await (0, _setcachebustingsearchparam.setCacheBustingSearchParam)(fetchUrl, headers); + let processed = fetch(fetchUrl, fetchOptions).then(processFetch); + let fetchPromise = processed.then(({ response })=>response); + // Immediately pass the fetch promise to the Flight client so that the debug + // info includes the latency from the client to the server. The internal timer + // in React starts as soon as `createFromFetch` is called. + // + // The only case where we don't do this is during a prefetch, because a + // top-level prefetch response never blocks a navigation; if it hasn't already + // been written into the cache by the time the navigation happens, the router + // will go straight to a dynamic request. + let flightResponsePromise = shouldImmediatelyDecode ? createFromNextFetch(fetchPromise, headers) : null; + let browserResponse = await fetchPromise; + // If the server responds with a redirect (e.g. 307), and the redirected + // location does not contain the cache busting search param set in the + // original request, the response is likely invalid — when following the + // redirect, the browser forwards the request headers, but since the cache + // busting search param is missing, the server will reject the request due to + // a mismatch. + // + // Ideally, we would be able to intercept the redirect response and perform it + // manually, instead of letting the browser automatically follow it, but this + // is not allowed by the fetch API. + // + // So instead, we must "replay" the redirect by fetching the new location + // again, but this time we'll append the cache busting search param to prevent + // a mismatch. + // + // TODO: We can optimize Next.js's built-in middleware APIs by returning a + // custom status code, to prevent the browser from automatically following it. + // + // This does not affect Server Action-based redirects; those are encoded + // differently, as part of the Flight body. It only affects redirects that + // occur in a middleware or a third-party proxy. + let redirected = browserResponse.redirected; + if (process.env.__NEXT_CLIENT_VALIDATE_RSC_REQUEST_HEADERS) { + // This is to prevent a redirect loop. Same limit used by Chrome. + const MAX_REDIRECTS = 20; + for(let n = 0; n < MAX_REDIRECTS; n++){ + if (!browserResponse.redirected) { + break; + } + const responseUrl = new URL(browserResponse.url, fetchUrl); + if (responseUrl.origin !== fetchUrl.origin) { + break; + } + if (responseUrl.searchParams.get(_approuterheaders.NEXT_RSC_UNION_QUERY) === fetchUrl.searchParams.get(_approuterheaders.NEXT_RSC_UNION_QUERY)) { + break; + } + // The RSC request was redirected. Assume the response is invalid. + // + // Append the cache busting search param to the redirected URL and + // fetch again. + // TODO: We should abort the previous request. + fetchUrl = new URL(responseUrl); + await (0, _setcachebustingsearchparam.setCacheBustingSearchParam)(fetchUrl, headers); + processed = fetch(fetchUrl, fetchOptions).then(processFetch); + fetchPromise = processed.then(({ response })=>response); + flightResponsePromise = shouldImmediatelyDecode ? createFromNextFetch(fetchPromise, headers) : null; + browserResponse = await fetchPromise; + // We just performed a manual redirect, so this is now true. + redirected = true; + } + } + // Remove the cache busting search param from the response URL, to prevent it + // from leaking outside of this function. + const responseUrl = new URL(browserResponse.url, fetchUrl); + responseUrl.searchParams.delete(_approuterheaders.NEXT_RSC_UNION_QUERY); + const rscResponse = { + url: responseUrl.href, + // This is true if any redirects occurred, either automatically by the + // browser, or manually by us. So it's different from + // `browserResponse.redirected`, which only tells us whether the browser + // followed a redirect, and only for the last response in the chain. + redirected, + // These can be copied from the last browser response we received. We + // intentionally only expose the subset of fields that are actually used + // elsewhere in the codebase. + ok: browserResponse.ok, + headers: browserResponse.headers, + body: browserResponse.body, + status: browserResponse.status, + // This is the exact promise returned by `createFromFetch`. It contains + // debug information that we need to transfer to any derived promises that + // are later rendered by React. + flightResponsePromise: flightResponsePromise, + cacheData: processed.then(({ cacheData })=>cacheData) + }; + return rscResponse; +} +function createFromNextReadableStream(flightStream, requestHeaders, options) { + return createFromReadableStream(flightStream, { + callServer: _appcallserver.callServer, + findSourceMapURL: _appfindsourcemapurl.findSourceMapURL, + debugChannel: createDebugChannel && createDebugChannel(requestHeaders), + unstable_allowPartialStream: options?.allowPartialStream + }); +} +function createFromNextFetch(promiseForResponse, requestHeaders) { + return createFromFetch(promiseForResponse, { + callServer: _appcallserver.callServer, + findSourceMapURL: _appfindsourcemapurl.findSourceMapURL, + debugChannel: createDebugChannel && createDebugChannel(requestHeaders) + }); +} +function truncateStream(stream, byteLength) { + const reader = stream.getReader(); + let remaining = byteLength; + return new ReadableStream({ + async pull (controller) { + if (remaining <= 0) { + reader.cancel(); + controller.close(); + return; + } + const { done, value } = await reader.read(); + if (done) { + controller.close(); + return; + } + if (value.byteLength <= remaining) { + controller.enqueue(value); + remaining -= value.byteLength; + } else { + controller.enqueue(value.subarray(0, remaining)); + remaining = 0; + reader.cancel(); + controller.close(); + } + }, + cancel () { + reader.cancel(); + } + }); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=fetch-server-response.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js b/build/node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js new file mode 100644 index 0000000..13a1ae3 --- /dev/null +++ b/build/node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js @@ -0,0 +1,59 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "isNavigatingToNewRootLayout", { + enumerable: true, + get: function() { + return isNavigatingToNewRootLayout; + } +}); +const _approutertypes = require("../../../shared/lib/app-router-types"); +function isNavigatingToNewRootLayout(currentTree, nextTree) { + // Compare segments + const currentTreeSegment = currentTree[0]; + const nextTreeSegment = nextTree.segment; + // If any segment is different before we find the root layout, the root layout has changed. + // E.g. /same/(group1)/layout.js -> /same/(group2)/layout.js + // First segment is 'same' for both, keep looking. (group1) changed to (group2) before the root layout was found, it must have changed. + if (Array.isArray(currentTreeSegment) && Array.isArray(nextTreeSegment)) { + // Compare dynamic param name and type but ignore the value, different values would not affect the current root layout + // /[name] - /slug1 and /slug2, both values (slug1 & slug2) still has the same layout /[name]/layout.js + if (currentTreeSegment[0] !== nextTreeSegment[0] || currentTreeSegment[2] !== nextTreeSegment[2]) { + return true; + } + } else if (currentTreeSegment !== nextTreeSegment) { + return true; + } + // Current tree root layout found + const currentIsRootLayout = ((currentTree[4] ?? 0) & _approutertypes.PrefetchHint.IsRootLayout) !== 0; + const nextIsRootLayout = (nextTree.prefetchHints & _approutertypes.PrefetchHint.IsRootLayout) !== 0; + if (currentIsRootLayout) { + // If the next tree doesn't have the root layout flag, it must have changed. + return !nextIsRootLayout; + } + // Current tree didn't have its root layout here, must have changed. + if (nextIsRootLayout) { + return true; + } + const slots = nextTree.slots; + const currentTreeChildren = currentTree[1]; + if (slots !== null) { + for(const slot in slots){ + const nextTreeChild = slots[slot]; + const currentTreeChild = currentTreeChildren[slot]; + if (currentTreeChild === undefined || isNavigatingToNewRootLayout(currentTreeChild, nextTreeChild)) { + return true; + } + } + } + return false; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=is-navigating-to-new-root-layout.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/router-reducer/ppr-navigations.js b/build/node_modules/next/dist/client/components/router-reducer/ppr-navigations.js new file mode 100644 index 0000000..a9c5ed8 --- /dev/null +++ b/build/node_modules/next/dist/client/components/router-reducer/ppr-navigations.js @@ -0,0 +1,1341 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + FreshnessPolicy: null, + createInitialCacheNodeForHydration: null, + isDeferredRsc: null, + spawnDynamicRequests: null, + startPPRNavigation: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + FreshnessPolicy: function() { + return FreshnessPolicy; + }, + createInitialCacheNodeForHydration: function() { + return createInitialCacheNodeForHydration; + }, + isDeferredRsc: function() { + return isDeferredRsc; + }, + spawnDynamicRequests: function() { + return spawnDynamicRequests; + }, + startPPRNavigation: function() { + return startPPRNavigation; + } +}); +const _approutertypes = require("../../../shared/lib/app-router-types"); +const _segment = require("../../../shared/lib/segment"); +const _matchsegments = require("../match-segments"); +const _createhreffromurl = require("./create-href-from-url"); +const _fetchserverresponse = require("./fetch-server-response"); +const _useactionqueue = require("../use-action-queue"); +const _routerreducertypes = require("./router-reducer-types"); +const _isnavigatingtonewrootlayout = require("./is-navigating-to-new-root-layout"); +const _committedstate = require("./reducers/committed-state"); +const _navigation = require("../segment-cache/navigation"); +const _cache = require("../segment-cache/cache"); +const _types = require("../segment-cache/types"); +const _optimisticroutes = require("../segment-cache/optimistic-routes"); +const _constants = require("../../../lib/constants"); +const _varypath = require("../segment-cache/vary-path"); +const _bfcache = require("../segment-cache/bfcache"); +var FreshnessPolicy = /*#__PURE__*/ function(FreshnessPolicy) { + FreshnessPolicy[FreshnessPolicy["Default"] = 0] = "Default"; + FreshnessPolicy[FreshnessPolicy["Hydration"] = 1] = "Hydration"; + FreshnessPolicy[FreshnessPolicy["HistoryTraversal"] = 2] = "HistoryTraversal"; + FreshnessPolicy[FreshnessPolicy["RefreshAll"] = 3] = "RefreshAll"; + FreshnessPolicy[FreshnessPolicy["HMRRefresh"] = 4] = "HMRRefresh"; + FreshnessPolicy[FreshnessPolicy["Gesture"] = 5] = "Gesture"; + return FreshnessPolicy; +}({}); +const noop = ()=>{}; +function createInitialCacheNodeForHydration(navigatedAt, initialTree, seedData, seedHead, seedDynamicStaleAt) { + // Create the initial cache node tree, using the data embedded into the + // HTML document. + const accumulation = { + separateRefreshUrls: null, + scrollRef: null + }; + const task = createCacheNodeOnNavigation(navigatedAt, initialTree, null, 1, seedData, seedHead, seedDynamicStaleAt, false, accumulation); + return task; +} +function startPPRNavigation(navigatedAt, oldUrl, oldRenderedSearch, oldCacheNode, oldRouterState, newRouteTree, newMetadataVaryPath, freshness, seedData, seedHead, seedDynamicStaleAt, isSamePageNavigation, accumulation) { + const didFindRootLayout = false; + const parentNeedsDynamicRequest = false; + const parentRefreshState = null; + const oldRootRefreshState = { + canonicalUrl: (0, _createhreffromurl.createHrefFromUrl)(oldUrl), + renderedSearch: oldRenderedSearch + }; + return updateCacheNodeOnNavigation(navigatedAt, oldUrl, oldCacheNode !== null ? oldCacheNode : undefined, oldRouterState, newRouteTree, newMetadataVaryPath, freshness, didFindRootLayout, seedData, seedHead, seedDynamicStaleAt, isSamePageNavigation, parentNeedsDynamicRequest, oldRootRefreshState, parentRefreshState, accumulation); +} +function updateCacheNodeOnNavigation(navigatedAt, oldUrl, oldCacheNode, oldRouterState, newRouteTree, newMetadataVaryPath, freshness, didFindRootLayout, seedData, seedHead, seedDynamicStaleAt, isSamePageNavigation, parentNeedsDynamicRequest, oldRootRefreshState, parentRefreshState, accumulation) { + // Check if this segment matches the one in the previous route. + const oldSegment = oldRouterState[0]; + const newSegment = createSegmentFromRouteTree(newRouteTree); + if (!(0, _matchsegments.matchSegment)(newSegment, oldSegment)) { + // This segment does not match the previous route. We're now entering the + // new part of the target route. Switch to the "create" path. + if (// Check if the route tree changed before we reached a layout. (The + // highest-level layout in a route tree is referred to as the "root" + // layout.) This could mean that we're navigating between two different + // root layouts. When this happens, we perform a full-page (MPA-style) + // navigation. + // + // However, the algorithm for deciding where to start rendering a route + // (i.e. the one performed in order to reach this function) is stricter + // than the one used to detect a change in the root layout. So just + // because we're re-rendering a segment outside of the root layout does + // not mean we should trigger a full-page navigation. + // + // Specifically, we handle dynamic parameters differently: two segments + // are considered the same even if their parameter values are different. + // + // Refer to isNavigatingToNewRootLayout for details. + // + // Note that we only have to perform this extra traversal if we didn't + // already discover a root layout in the part of the tree that is + // unchanged. We also only need to compare the subtree that is not + // shared. In the common case, this branch is skipped completely. + !didFindRootLayout && (0, _isnavigatingtonewrootlayout.isNavigatingToNewRootLayout)(oldRouterState, newRouteTree) || // The global Not Found route (app/global-not-found.tsx) is a special + // case, because it acts like a root layout, but in the router tree, it + // is rendered in the same position as app/layout.tsx. + // + // Any navigation to the global Not Found route should trigger a + // full-page navigation. + // + // TODO: We should probably model this by changing the key of the root + // segment when this happens. Then the root layout check would work + // as expected, without a special case. + newSegment === _segment.NOT_FOUND_SEGMENT_KEY) { + return null; + } + return createCacheNodeOnNavigation(navigatedAt, newRouteTree, newMetadataVaryPath, freshness, seedData, seedHead, seedDynamicStaleAt, parentNeedsDynamicRequest, accumulation); + } + const newSlots = newRouteTree.slots; + const oldRouterStateChildren = oldRouterState[1]; + const seedDataChildren = seedData !== null ? seedData[1] : null; + // We're currently traversing the part of the tree that was also part of + // the previous route. If we discover a root layout, then we don't need to + // trigger an MPA navigation. + const childDidFindRootLayout = didFindRootLayout || (newRouteTree.prefetchHints & _approutertypes.PrefetchHint.IsRootLayout) !== 0; + let shouldRefreshDynamicData = false; + switch(freshness){ + case 0: + case 2: + case 1: + case 5: + shouldRefreshDynamicData = false; + break; + case 3: + case 4: + shouldRefreshDynamicData = true; + break; + default: + freshness; + break; + } + // TODO: We're not consistent about how we do this check. Some places + // check if the segment starts with PAGE_SEGMENT_KEY, but most seem to + // check if there any any children, which is why I'm doing it here. We + // should probably encode an empty children set as `null` though. Either + // way, we should update all the checks to be consistent. + const isLeafSegment = newSlots === null; + // Get the data for this segment. Since it was part of the previous route, + // usually we just clone the data from the old CacheNode. However, during a + // refresh or a revalidation, there won't be any existing CacheNode. So we + // may need to consult the prefetch cache, like we would for a new segment. + let newCacheNode; + let needsDynamicRequest; + if (oldCacheNode !== undefined && !shouldRefreshDynamicData && // During a same-page navigation, we always refetch the page segments + !(isLeafSegment && isSamePageNavigation)) { + // Reuse the existing CacheNode + const dropPrefetchRsc = false; + newCacheNode = reuseSharedCacheNode(dropPrefetchRsc, oldCacheNode); + needsDynamicRequest = false; + } else { + // If this is part of a refresh, ignore the existing CacheNode and create a + // new one. + const seedRsc = seedData !== null ? seedData[0] : null; + const result = createCacheNodeForSegment(navigatedAt, newRouteTree, seedRsc, newMetadataVaryPath, seedHead, freshness, seedDynamicStaleAt); + newCacheNode = result.cacheNode; + needsDynamicRequest = result.needsDynamicRequest; + // Carry forward the old node's scrollRef. This preserves scroll + // intent when a prior navigation's cache node is replaced by a + // refresh before the scroll handler has had a chance to fire — + // e.g. when router.push() and router.refresh() are called in the + // same startTransition batch. + if (oldCacheNode !== undefined) { + newCacheNode.scrollRef = oldCacheNode.scrollRef; + } + } + // During a refresh navigation, there's a special case that happens when + // entering a "default" slot. The default slot may not be part of the + // current route; it may have been reused from an older route. If so, + // we need to fetch its data from the old route's URL rather than current + // route's URL. Keep track of this as we traverse the tree. + const maybeRefreshState = newRouteTree.refreshState; + const refreshState = maybeRefreshState !== undefined && maybeRefreshState !== null ? // refresh URL as we continue traversing the tree. + maybeRefreshState : parentRefreshState; + // If this segment itself needs to fetch new data from the server, then by + // definition it is being refreshed. Track its refresh URL so we know which + // URL to request the data from. + if (needsDynamicRequest && refreshState !== null) { + accumulateRefreshUrl(accumulation, refreshState); + } + // As we diff the trees, we may sometimes modify (copy-on-write, not mutate) + // the Route Tree that was returned by the server — for example, in the case + // of default parallel routes, we preserve the currently active segment. To + // avoid mutating the original tree, we clone the router state children along + // the return path. + let patchedRouterStateChildren = {}; + let taskChildren = null; + // Most navigations require a request to fetch additional data from the + // server, either because the data was not already prefetched, or because the + // target route contains dynamic data that cannot be prefetched. + // + // However, if the target route is fully static, and it's already completely + // loaded into the segment cache, then we can skip the server request. + // + // This starts off as `false`, and is set to `true` if any of the child + // routes requires a dynamic request. + let childNeedsDynamicRequest = false; + // As we traverse the children, we'll construct a FlightRouterState that can + // be sent to the server to request the dynamic data. If it turns out that + // nothing in the subtree is dynamic (i.e. childNeedsDynamicRequest is false + // at the end), then this will be discarded. + // TODO: We can probably optimize the format of this data structure to only + // include paths that are dynamic. Instead of reusing the + // FlightRouterState type. + let dynamicRequestTreeChildren = {}; + let newCacheNodeSlots = null; + if (newSlots !== null) { + const oldCacheNodeSlots = oldCacheNode !== undefined ? oldCacheNode.slots : null; + newCacheNode.slots = newCacheNodeSlots = {}; + taskChildren = new Map(); + for(let parallelRouteKey in newSlots){ + let newRouteTreeChild = newSlots[parallelRouteKey]; + const oldRouterStateChild = oldRouterStateChildren[parallelRouteKey]; + if (oldRouterStateChild === undefined) { + // This should never happen, but if it does, it suggests a malformed + // server response. Trigger a full-page navigation. + return null; + } + let seedDataChild = seedDataChildren !== null ? seedDataChildren[parallelRouteKey] : null; + const oldSegmentChild = oldRouterStateChild[0]; + let newSegmentChild = createSegmentFromRouteTree(newRouteTreeChild); + let seedHeadChild = seedHead; + if (// Skip this branch during a history traversal. We restore the tree that + // was stashed in the history entry as-is. + freshness !== 2 && newSegmentChild === _segment.DEFAULT_SEGMENT_KEY && oldSegmentChild !== _segment.DEFAULT_SEGMENT_KEY) { + // This is a "default" segment. These are never sent by the server during + // a soft navigation; instead, the client reuses whatever segment was + // already active in that slot on the previous route. + newRouteTreeChild = reuseActiveSegmentInDefaultSlot(newRouteTree, parallelRouteKey, oldRootRefreshState, oldRouterStateChild); + newSegmentChild = createSegmentFromRouteTree(newRouteTreeChild); + // Since we're switching to a different route tree, these are no + // longer valid, because they correspond to the outer tree. + seedDataChild = null; + seedHeadChild = null; + } + const oldCacheNodeChild = oldCacheNodeSlots !== null ? oldCacheNodeSlots[parallelRouteKey] : undefined; + const taskChild = updateCacheNodeOnNavigation(navigatedAt, oldUrl, oldCacheNodeChild, oldRouterStateChild, newRouteTreeChild, newMetadataVaryPath, freshness, childDidFindRootLayout, seedDataChild ?? null, seedHeadChild, seedDynamicStaleAt, isSamePageNavigation, parentNeedsDynamicRequest || needsDynamicRequest, oldRootRefreshState, refreshState, accumulation); + if (taskChild === null) { + // One of the child tasks discovered a change to the root layout. + // Immediately unwind from this recursive traversal. This will trigger a + // full-page navigation. + return null; + } + // Recursively propagate up the child tasks. + taskChildren.set(parallelRouteKey, taskChild); + newCacheNodeSlots[parallelRouteKey] = taskChild.node; + // The child tree's route state may be different from the prefetched + // route sent by the server. We need to clone it as we traverse back up + // the tree. + const taskChildRoute = taskChild.route; + patchedRouterStateChildren[parallelRouteKey] = taskChildRoute; + const dynamicRequestTreeChild = taskChild.dynamicRequestTree; + if (dynamicRequestTreeChild !== null) { + // Something in the child tree is dynamic. + childNeedsDynamicRequest = true; + dynamicRequestTreeChildren[parallelRouteKey] = dynamicRequestTreeChild; + } else { + dynamicRequestTreeChildren[parallelRouteKey] = taskChildRoute; + } + } + } + const newFlightRouterState = [ + createSegmentFromRouteTree(newRouteTree), + patchedRouterStateChildren, + refreshState !== null ? [ + refreshState.canonicalUrl, + refreshState.renderedSearch + ] : null, + null, + newRouteTree.prefetchHints + ]; + return { + status: needsDynamicRequest ? 0 : 1, + route: newFlightRouterState, + node: newCacheNode, + dynamicRequestTree: createDynamicRequestTree(newFlightRouterState, dynamicRequestTreeChildren, needsDynamicRequest, childNeedsDynamicRequest, parentNeedsDynamicRequest), + refreshState, + children: taskChildren + }; +} +/** + * Assigns a ScrollRef to a new leaf CacheNode so the scroll handler + * knows to scroll to it after navigation. All leaves in the same + * navigation share the same ScrollRef — the first segment to scroll + * consumes it, preventing others from also scrolling. + * + * This is only called inside `createCacheNodeOnNavigation`, which only + * runs when segments diverge from the previous route. So for a refresh + * where the route structure stays the same, segments match, the update + * path is taken, and this function is never called — no scroll ref is + * assigned. A scroll ref is only assigned when the route actually + * changed (e.g. a redirect, or a dynamic condition on the server that + * produces a different route). + * + * Skipped during hydration (initial render should not scroll) and + * history traversal (scroll restoration is handled separately). + */ function accumulateScrollRef(freshness, cacheNode, accumulation) { + switch(freshness){ + case 0: + case 5: + case 3: + case 4: + if (accumulation.scrollRef === null) { + accumulation.scrollRef = { + current: true + }; + } + cacheNode.scrollRef = accumulation.scrollRef; + break; + case 1: + break; + case 2: + break; + default: + freshness; + break; + } +} +function createCacheNodeOnNavigation(navigatedAt, newRouteTree, newMetadataVaryPath, freshness, seedData, seedHead, seedDynamicStaleAt, parentNeedsDynamicRequest, accumulation) { + // Same traversal as updateCacheNodeNavigation, but simpler. We switch to this + // path once we reach the part of the tree that was not in the previous route. + // We don't need to diff against the old tree, we just need to create a new + // one. We also don't need to worry about any refresh-related logic. + // + // For the most part, this is a subset of updateCacheNodeOnNavigation, so any + // change that happens in this function likely needs to be applied to that + // one, too. However there are some places where the behavior intentionally + // diverges, which is why we keep them separate. + const newSegment = createSegmentFromRouteTree(newRouteTree); + const newSlots = newRouteTree.slots; + const seedDataChildren = seedData !== null ? seedData[1] : null; + const seedRsc = seedData !== null ? seedData[0] : null; + const result = createCacheNodeForSegment(navigatedAt, newRouteTree, seedRsc, newMetadataVaryPath, seedHead, freshness, seedDynamicStaleAt); + const newCacheNode = result.cacheNode; + const needsDynamicRequest = result.needsDynamicRequest; + const isLeafSegment = newSlots === null; + if (isLeafSegment) { + accumulateScrollRef(freshness, newCacheNode, accumulation); + } + let patchedRouterStateChildren = {}; + let taskChildren = null; + let childNeedsDynamicRequest = false; + let dynamicRequestTreeChildren = {}; + let newCacheNodeSlots = null; + if (newSlots !== null) { + newCacheNode.slots = newCacheNodeSlots = {}; + taskChildren = new Map(); + for(let parallelRouteKey in newSlots){ + const newRouteTreeChild = newSlots[parallelRouteKey]; + const seedDataChild = seedDataChildren !== null ? seedDataChildren[parallelRouteKey] : null; + const taskChild = createCacheNodeOnNavigation(navigatedAt, newRouteTreeChild, newMetadataVaryPath, freshness, seedDataChild ?? null, seedHead, seedDynamicStaleAt, parentNeedsDynamicRequest || needsDynamicRequest, accumulation); + taskChildren.set(parallelRouteKey, taskChild); + newCacheNodeSlots[parallelRouteKey] = taskChild.node; + const taskChildRoute = taskChild.route; + patchedRouterStateChildren[parallelRouteKey] = taskChildRoute; + const dynamicRequestTreeChild = taskChild.dynamicRequestTree; + if (dynamicRequestTreeChild !== null) { + childNeedsDynamicRequest = true; + dynamicRequestTreeChildren[parallelRouteKey] = dynamicRequestTreeChild; + } else { + dynamicRequestTreeChildren[parallelRouteKey] = taskChildRoute; + } + } + } + const newFlightRouterState = [ + newSegment, + patchedRouterStateChildren, + null, + null, + newRouteTree.prefetchHints + ]; + return { + status: needsDynamicRequest ? 0 : 1, + route: newFlightRouterState, + node: newCacheNode, + dynamicRequestTree: createDynamicRequestTree(newFlightRouterState, dynamicRequestTreeChildren, needsDynamicRequest, childNeedsDynamicRequest, parentNeedsDynamicRequest), + // This route is not part of the current tree, so there's no reason to + // track the refresh URL. + refreshState: null, + children: taskChildren + }; +} +function createSegmentFromRouteTree(newRouteTree) { + if (newRouteTree.isPage) { + // In a dynamic server response, the server embeds the search params into + // the segment key, but in a static one it's omitted. The client handles + // this inconsistency by adding the search params back right at the end. + // + // TODO: The only thing this is used for is to create a cache key for + // ChildSegmentMap. But we already track the `renderedSearch` everywhere as + // part of the varyPath. The plan is get rid of ChildSegmentMap and + // store the page data in a CacheMap using the varyPath, like we do + // for prefetches. Then we can remove it from the segment key. + // + // As an incremental step, we can grab the search params from the varyPath. + const renderedSearch = (0, _varypath.getRenderedSearchFromVaryPath)(newRouteTree.varyPath); + if (renderedSearch === null) { + return _segment.PAGE_SEGMENT_KEY; + } + // This is based on equivalent logic in addSearchParamsIfPageSegment, used + // on the server. + const stringifiedQuery = JSON.stringify(Object.fromEntries(new URLSearchParams(renderedSearch))); + return stringifiedQuery !== '{}' ? _segment.PAGE_SEGMENT_KEY + '?' + stringifiedQuery : _segment.PAGE_SEGMENT_KEY; + } + return newRouteTree.segment; +} +function patchRouterStateWithNewChildren(baseRouterState, newChildren) { + const clone = [ + baseRouterState[0], + newChildren + ]; + // Based on equivalent logic in apply-router-state-patch-to-tree, but should + // confirm whether we need to copy all of these fields. Not sure the server + // ever sends, e.g. the refetch marker. + if (2 in baseRouterState) { + clone[2] = baseRouterState[2]; + } + if (3 in baseRouterState) { + clone[3] = baseRouterState[3]; + } + if (4 in baseRouterState) { + clone[4] = baseRouterState[4]; + } + return clone; +} +function createDynamicRequestTree(newRouterState, dynamicRequestTreeChildren, needsDynamicRequest, childNeedsDynamicRequest, parentNeedsDynamicRequest) { + // Create a FlightRouterState that instructs the server how to render the + // requested segment. + // + // Or, if neither this segment nor any of the children require a new data, + // then we return `null` to skip the request. + let dynamicRequestTree = null; + if (needsDynamicRequest) { + dynamicRequestTree = patchRouterStateWithNewChildren(newRouterState, dynamicRequestTreeChildren); + // The "refetch" marker is set on the top-most segment that requires new + // data. We can omit it if a parent was already marked. + if (!parentNeedsDynamicRequest) { + dynamicRequestTree[3] = 'refetch'; + } + } else if (childNeedsDynamicRequest) { + // This segment does not request new data, but at least one of its + // children does. + dynamicRequestTree = patchRouterStateWithNewChildren(newRouterState, dynamicRequestTreeChildren); + } else { + dynamicRequestTree = null; + } + return dynamicRequestTree; +} +function accumulateRefreshUrl(accumulation, refreshState) { + // This is a refresh navigation, and we're inside a "default" slot that's + // not part of the current route; it was reused from an older route. In + // order to get fresh data for this reused route, we need to issue a + // separate request using the old route's URL. + // + // Track these extra URLs in the accumulated result. Later, we'll construct + // an appropriate request for each unique URL in the final set. The reason + // we don't do it immediately here is so we can deduplicate multiple + // instances of the same URL into a single request. See + // listenForDynamicRequest for more details. + const refreshUrl = refreshState.canonicalUrl; + const separateRefreshUrls = accumulation.separateRefreshUrls; + if (separateRefreshUrls === null) { + accumulation.separateRefreshUrls = new Set([ + refreshUrl + ]); + } else { + separateRefreshUrls.add(refreshUrl); + } +} +function reuseActiveSegmentInDefaultSlot(parentRouteTree, parallelRouteKey, oldRootRefreshState, oldRouterState) { + // This is a "default" segment. These are never sent by the server during a + // soft navigation; instead, the client reuses whatever segment was already + // active in that slot on the previous route. This means if we later need to + // refresh the segment, it will have to be refetched from the previous route's + // URL. We store it in the Flight Router State. + let reusedUrl; + let reusedRenderedSearch; + const oldRefreshState = oldRouterState[2]; + if (oldRefreshState !== undefined && oldRefreshState !== null) { + // This segment was already reused from an even older route. Keep its + // existing URL and refresh state. + reusedUrl = oldRefreshState[0]; + reusedRenderedSearch = oldRefreshState[1]; + } else { + // Since this route didn't already have a refresh state, it must have been + // reachable from the root of the old route. So we use the refresh state + // that represents the old route. + reusedUrl = oldRootRefreshState.canonicalUrl; + reusedRenderedSearch = oldRootRefreshState.renderedSearch; + } + const acc = { + metadataVaryPath: null + }; + const reusedRouteTree = (0, _cache.convertReusedFlightRouterStateToRouteTree)(parentRouteTree, parallelRouteKey, oldRouterState, reusedRenderedSearch, acc); + reusedRouteTree.refreshState = { + canonicalUrl: reusedUrl, + renderedSearch: reusedRenderedSearch + }; + return reusedRouteTree; +} +function reuseSharedCacheNode(dropPrefetchRsc, existingCacheNode) { + // Clone the CacheNode that was already present in the previous tree. + // Carry forward the scrollRef so scroll intent from a prior navigation + // survives tree rebuilds (e.g. push + refresh in the same batch). + return createCacheNode(existingCacheNode.rsc, dropPrefetchRsc ? null : existingCacheNode.prefetchRsc, existingCacheNode.head, dropPrefetchRsc ? null : existingCacheNode.prefetchHead, existingCacheNode.scrollRef); +} +function createCacheNodeForSegment(now, tree, seedRsc, metadataVaryPath, seedHead, freshness, dynamicStaleAt) { + // Construct a new CacheNode using data from the BFCache, the client's + // Segment Cache, or seeded from a server response. + // + // If there's a cache miss, or if we only have a partial hit, we'll render + // the partial state immediately, and spawn a request to the server to fill + // in the missing data. + // + // If the segment is fully cached on the client already, we can omit this + // segment from the server request. + // + // If we already have a dynamic data response associated with this navigation, + // as in the case of a Server Action-initiated redirect or refresh, we may + // also be able to use that data without spawning a new request. (This is + // referred to as the "seed" data.) + const isPage = tree.isPage; + // During certain kinds of navigations, we may be able to render from + // the BFCache. + switch(freshness){ + case 0: + { + // Check BFCache during regular navigations. The entry's staleAt + // determines whether it's still fresh. This is used when + // staleTimes.dynamic is configured globally or when a page exports + // unstable_dynamicStaleTime for per-page control. + const bfcacheEntry = (0, _bfcache.readFromBFCacheDuringRegularNavigation)(now, tree.varyPath); + if (bfcacheEntry !== null) { + return { + cacheNode: createCacheNode(bfcacheEntry.rsc, bfcacheEntry.prefetchRsc, bfcacheEntry.head, bfcacheEntry.prefetchHead), + needsDynamicRequest: false + }; + } + break; + } + case 1: + { + // This is not related to the BFCache but it is a special case. + // + // We should never spawn network requests during hydration. We must treat + // the initial payload as authoritative, because the initial page load is + // used as a last-ditch mechanism for recovering the app. + // + // This is also an important safety check because if this leaks into the + // server rendering path (which theoretically it never should because the + // server payload should be consistent), the server would hang because these + // promises would never resolve. + // + // TODO: There is an existing case where the global "not found" boundary + // triggers this path. But it does render correctly despite that. That's an + // unusual render path so it's not surprising, but we should look into + // modeling it in a more consistent way. See also the /_notFound special + // case in updateCacheNodeOnNavigation. + const rsc = seedRsc; + const prefetchRsc = null; + const head = isPage ? seedHead : null; + const prefetchHead = null; + (0, _bfcache.writeToBFCache)(now, tree.varyPath, rsc, prefetchRsc, head, prefetchHead, dynamicStaleAt); + if (isPage && metadataVaryPath !== null) { + (0, _bfcache.writeHeadToBFCache)(now, metadataVaryPath, head, prefetchHead, dynamicStaleAt); + } + return { + cacheNode: createCacheNode(rsc, prefetchRsc, head, prefetchHead), + needsDynamicRequest: false + }; + } + case 2: + const bfcacheEntry = (0, _bfcache.readFromBFCache)(tree.varyPath); + if (bfcacheEntry !== null) { + // Only show prefetched data if the dynamic data is still pending. This + // avoids a flash back to the prefetch state in a case where it's highly + // likely to have already streamed in. + // + // Tehnically, what we're actually checking is whether the dynamic + // network response was received. But since it's a streaming response, + // this does not mean that all the dynamic data has fully streamed in. + // It just means that _some_ of the dynamic data was received. But as a + // heuristic, we assume that the rest dynamic data will stream in + // quickly, so it's still better to skip the prefetch state. + const oldRsc = bfcacheEntry.rsc; + const oldRscDidResolve = !isDeferredRsc(oldRsc) || oldRsc.status !== 'pending'; + const dropPrefetchRsc = oldRscDidResolve; + return { + cacheNode: createCacheNode(bfcacheEntry.rsc, dropPrefetchRsc ? null : bfcacheEntry.prefetchRsc, bfcacheEntry.head, dropPrefetchRsc ? null : bfcacheEntry.prefetchHead), + needsDynamicRequest: false + }; + } + break; + case 3: + case 4: + case 5: + break; + default: + freshness; + break; + } + let cachedRsc = null; + let isCachedRscPartial = true; + const segmentEntry = (0, _cache.readSegmentCacheEntry)(now, tree.varyPath); + if (segmentEntry !== null) { + switch(segmentEntry.status){ + case _cache.EntryStatus.Fulfilled: + { + // Happy path: a cache hit + cachedRsc = segmentEntry.rsc; + isCachedRscPartial = segmentEntry.isPartial; + break; + } + case _cache.EntryStatus.Pending: + { + // We haven't received data for this segment yet, but there's already + // an in-progress request. Since it's extremely likely to arrive + // before the dynamic data response, we might as well use it. + const promiseForFulfilledEntry = (0, _cache.waitForSegmentCacheEntry)(segmentEntry); + cachedRsc = promiseForFulfilledEntry.then((entry)=>entry !== null ? entry.rsc : null); + // Because the request is still pending, we typically don't know yet + // whether the response will be partial. We shouldn't skip this segment + // during the dynamic navigation request. Otherwise, we might need to + // do yet another request to fill in the remaining data, creating + // a waterfall. + // + // The one exception is if this segment is being fetched with via + // prefetch={true} (i.e. the "force stale" or "full" strategy). If so, + // we can assume the response will be full. This field is set to `false` + // for such segments. + isCachedRscPartial = segmentEntry.isPartial; + break; + } + case _cache.EntryStatus.Empty: + case _cache.EntryStatus.Rejected: + { + break; + } + default: + { + segmentEntry; + break; + } + } + } + // Now combine the cached data with the seed data to determine what we can + // render immediately, versus what needs to stream in later. + // A partial state to show immediately while we wait for the final data to + // arrive. If `rsc` is already a complete value (not partial), or if we + // don't have any useful partial state, this will be `null`. + let prefetchRsc; + // The final, resolved segment data. If the data is missing, this will be a + // promise that resolves to the eventual data. A resolved value of `null` + // means the data failed to load; the LayoutRouter will suspend indefinitely + // until the router updates again (refer to finishNavigationTask). + let rsc; + let doesSegmentNeedDynamicRequest; + if (seedRsc !== null) { + // We already have a dynamic server response for this segment. + if (isCachedRscPartial) { + // The seed data may still be streaming in, so it's worth showing the + // partial cached state in the meantime. + prefetchRsc = cachedRsc; + rsc = seedRsc; + } else { + // We already have a completely cached segment. Ignore the seed data, + // which may still be streaming in. This shouldn't happen in the normal + // case because the client will inform the server which segments are + // already fully cached, and the server will skip rendering them. + prefetchRsc = null; + rsc = cachedRsc; + } + doesSegmentNeedDynamicRequest = false; + } else { + if (isCachedRscPartial) { + // The cached data contains dynamic holes, or it's missing entirely. We'll + // show the partial state immediately (if available), and stream in the + // final data. + // + // Create a pending promise that we can later write to when the + // data arrives from the server. + prefetchRsc = cachedRsc; + rsc = createDeferredRsc(); + } else { + // The data is fully cached. + prefetchRsc = null; + rsc = cachedRsc; + } + doesSegmentNeedDynamicRequest = isCachedRscPartial; + } + // If this is a page segment, we need to do the same for the head. This + // follows analogous logic to the segment data above. + // TODO: We don't need to store the head on the page segment's CacheNode; we + // can lift it to the main state object. Then we can also delete + // findHeadCache. + let prefetchHead = null; + let head = null; + let doesHeadNeedDynamicRequest = isPage; + if (isPage) { + let cachedHead = null; + let isCachedHeadPartial = true; + if (metadataVaryPath !== null) { + const metadataEntry = (0, _cache.readSegmentCacheEntry)(now, metadataVaryPath); + if (metadataEntry !== null) { + switch(metadataEntry.status){ + case _cache.EntryStatus.Fulfilled: + { + cachedHead = metadataEntry.rsc; + isCachedHeadPartial = metadataEntry.isPartial; + break; + } + case _cache.EntryStatus.Pending: + { + cachedHead = (0, _cache.waitForSegmentCacheEntry)(metadataEntry).then((entry)=>entry !== null ? entry.rsc : null); + isCachedHeadPartial = metadataEntry.isPartial; + break; + } + case _cache.EntryStatus.Empty: + case _cache.EntryStatus.Rejected: + { + break; + } + default: + { + metadataEntry; + break; + } + } + } + } + if (process.env.__NEXT_OPTIMISTIC_ROUTING && isCachedHeadPartial) { + // TODO: When optimistic routing is enabled, don't block on waiting for + // the viewport to resolve. This is a temporary workaround until Vary + // Params are tracked when rendering the metadata. We'll fix it before + // this feature is stable. However, it's not a critical issue because 1) + // it will stream in eventually anyway 2) metadata is wrapped in an + // internal Suspense boundary, so is always non-blocking; this only + // affects the viewport node, which is meant to blocking, however... 3) + // before Segment Cache landed this wasn't always the case, anyway, so + // it's unlikely that many people are relying on this behavior. Still, + // will be fixed before stable. It's the very next step in the sequence of + // work on this project. + // + // This line of code works because the App Router treats `null` as + // "no renderable head available", rather than an empty head. React treats + // an empty string as empty. + cachedHead = ''; + } + if (seedHead !== null) { + if (isCachedHeadPartial) { + prefetchHead = cachedHead; + head = seedHead; + } else { + prefetchHead = null; + head = cachedHead; + } + doesHeadNeedDynamicRequest = false; + } else { + if (isCachedHeadPartial) { + prefetchHead = cachedHead; + head = createDeferredRsc(); + } else { + prefetchHead = null; + head = cachedHead; + } + doesHeadNeedDynamicRequest = isCachedHeadPartial; + } + } + // Now that we're creating a new segment, write its data to the BFCache. A + // subsequent back/forward navigation will reuse this same data, until or + // unless it's cleared by a refresh/revalidation. + // + // Skip BFCache writes for optimistic navigations since they are transient + // and will be replaced by the canonical navigation. + if (freshness !== 5) { + (0, _bfcache.writeToBFCache)(now, tree.varyPath, rsc, prefetchRsc, head, prefetchHead, dynamicStaleAt); + if (isPage && metadataVaryPath !== null) { + (0, _bfcache.writeHeadToBFCache)(now, metadataVaryPath, head, prefetchHead, dynamicStaleAt); + } + } + return { + cacheNode: createCacheNode(rsc, prefetchRsc, head, prefetchHead), + // TODO: We should store this field on the CacheNode itself. I think we can + // probably unify NavigationTask, CacheNode, and DeferredRsc into a + // single type. Or at least CacheNode and DeferredRsc. + needsDynamicRequest: doesSegmentNeedDynamicRequest || doesHeadNeedDynamicRequest + }; +} +function createCacheNode(rsc, prefetchRsc, head, prefetchHead, scrollRef = null) { + return { + rsc, + prefetchRsc, + head, + prefetchHead, + slots: null, + scrollRef + }; +} +// Represents whether the previuos navigation resulted in a route tree mismatch. +// A mismatch results in a refresh of the page. If there are two successive +// mismatches, we will fall back to an MPA navigation, to prevent a retry loop. +let previousNavigationDidMismatch = false; +function spawnDynamicRequests(task, primaryUrl, nextUrl, freshnessPolicy, accumulation, // The route cache entry used for this navigation, if it came from route +// prediction. Passed through so it can be marked as having a dynamic rewrite +// if the server returns a different pathname than expected (indicating +// dynamic rewrite behavior that varies by param value). +routeCacheEntry, // The original navigation's push/replace intent. Threaded through to the +// server-patch retry logic so it can inherit the intent if the original +// transition hasn't committed yet. +navigateType) { + const dynamicRequestTree = task.dynamicRequestTree; + if (dynamicRequestTree === null) { + // This navigation was fully cached. There are no dynamic requests to spawn. + previousNavigationDidMismatch = false; + return; + } + // This is intentionally not an async function to discourage the caller from + // awaiting the result. Any subsequent async operations spawned by this + // function should result in a separate navigation task, rather than + // block the original one. + // + // In this function we spawn (but do not await) all the network requests that + // block the navigation, and collect the promises. The next function, + // `finishNavigationTask`, can await the promises in any order without + // accidentally introducing a network waterfall. + const primaryRequestPromise = fetchMissingDynamicData(task, dynamicRequestTree, primaryUrl, nextUrl, freshnessPolicy, routeCacheEntry); + const separateRefreshUrls = accumulation.separateRefreshUrls; + let refreshRequestPromises = null; + if (separateRefreshUrls !== null) { + // There are multiple URLs that we need to request the data from. This + // happens when a "default" parallel route slot is present in the tree, and + // its data cannot be fetched from the current route. We need to split the + // combined dynamic request tree into separate requests per URL. + // TODO: Create a scoped dynamic request tree that omits anything that + // is not relevant to the given URL. Without doing this, the server may + // sometimes render more data than necessary; this is not a regression + // compared to the pre-Segment Cache implementation, though, just an + // optimization we can make in the future. + // Construct a request tree for each additional refresh URL. This will + // prune away everything except the parts of the tree that match the + // given refresh URL. + refreshRequestPromises = []; + const canonicalUrl = (0, _createhreffromurl.createHrefFromUrl)(primaryUrl); + for (const refreshUrl of separateRefreshUrls){ + if (refreshUrl === canonicalUrl) { + continue; + } + // TODO: Create a scoped dynamic request tree that omits anything that + // is not relevant to the given URL. Without doing this, the server may + // sometimes render more data than necessary; this is not a regression + // compared to the pre-Segment Cache implementation, though, just an + // optimization we can make in the future. + // const scopedDynamicRequestTree = splitTaskByURL(task, refreshUrl) + const scopedDynamicRequestTree = dynamicRequestTree; + if (scopedDynamicRequestTree !== null) { + refreshRequestPromises.push(fetchMissingDynamicData(task, scopedDynamicRequestTree, new URL(refreshUrl, location.origin), // TODO: Just noticed that this should actually the Next-Url at the + // time the refresh URL was set, not the current Next-Url. Need to + // start tracking this alongside the refresh URL. In the meantime, + // if a refresh fails due to a mismatch, it will trigger a + // hard refresh. + nextUrl, freshnessPolicy, routeCacheEntry)); + } + } + } + // Further async operations are moved into this separate function to + // discourage sequential network requests. + const voidPromise = finishNavigationTask(task, nextUrl, primaryRequestPromise, refreshRequestPromises, routeCacheEntry, navigateType); + // `finishNavigationTask` is responsible for error handling, so we can attach + // noop callbacks to this promise. + voidPromise.then(noop, noop); +} +async function finishNavigationTask(task, nextUrl, primaryRequestPromise, refreshRequestPromises, routeCacheEntry, navigateType) { + // Wait for all the requests to finish, or for the first one to fail. + let exitStatus = await waitForRequestsToFinish(primaryRequestPromise, refreshRequestPromises); + // Once the all the requests have finished, check the tree for any remaining + // pending tasks. If anything is still pending, it means the server response + // does not match the client, and we must refresh to get back to a consistent + // state. We can skip this step if we already detected a mismatch during the + // first phase; it doesn't matter in that case because we're going to refresh + // the whole tree regardless. + if (exitStatus === 0) { + exitStatus = abortRemainingPendingTasks(task, null, null); + } + switch(exitStatus){ + case 0: + { + // The task has completely finished. There's no missing data. Exit. + previousNavigationDidMismatch = false; + return; + } + case 1: + { + // Some data failed to finish loading. Trigger a soft retry. + // TODO: As an extra precaution against soft retry loops, consider + // tracking whether a navigation was itself triggered by a retry. If two + // happen in a row, fall back to a hard retry. + const isHardRetry = false; + const primaryRequestResult = await primaryRequestPromise; + dispatchRetryDueToTreeMismatch(isHardRetry, primaryRequestResult.url, nextUrl, primaryRequestResult.seed, task.route, routeCacheEntry, navigateType); + return; + } + case 2: + { + // Some data failed to finish loading in a non-recoverable way, such as a + // network error. Trigger an MPA navigation. + // + // Hard navigating/refreshing is how we prevent an infinite retry loop + // caused by a network error — when the network fails, we fall back to the + // browser behavior for offline navigations. In the future, Next.js may + // introduce its own custom handling of offline navigations, but that + // doesn't exist yet. + const isHardRetry = true; + const primaryRequestResult = await primaryRequestPromise; + dispatchRetryDueToTreeMismatch(isHardRetry, primaryRequestResult.url, nextUrl, primaryRequestResult.seed, task.route, routeCacheEntry, navigateType); + return; + } + default: + { + return exitStatus; + } + } +} +function waitForRequestsToFinish(primaryRequestPromise, refreshRequestPromises) { + // Custom async combinator logic. This could be replaced by Promise.any but + // we don't assume that's available. + // + // Each promise resolves once the server responsds and the data is written + // into the CacheNode tree. Resolve the combined promise once all the + // requests finish. + // + // Or, resolve as soon as one of the requests fails, without waiting for the + // others to finish. + return new Promise((resolve)=>{ + const onFulfill = (result)=>{ + if (result.exitStatus === 0) { + remainingCount--; + if (remainingCount === 0) { + // All the requests finished successfully. + resolve(0); + } + } else { + // One of the requests failed. Exit with a failing status. + // NOTE: It's possible for one of the requests to fail with SoftRetry + // and a later one to fail with HardRetry. In this case, we choose to + // retry immediately, rather than delay the retry until all the requests + // finish. If it fails again, we will hard retry on the next + // attempt, anyway. + resolve(result.exitStatus); + } + }; + // onReject shouldn't ever be called because fetchMissingDynamicData's + // entire body is wrapped in a try/catch. This is just defensive. + const onReject = ()=>resolve(2); + // Attach the listeners to the promises. + let remainingCount = 1; + primaryRequestPromise.then(onFulfill, onReject); + if (refreshRequestPromises !== null) { + remainingCount += refreshRequestPromises.length; + refreshRequestPromises.forEach((refreshRequestPromise)=>refreshRequestPromise.then(onFulfill, onReject)); + } + }); +} +function dispatchRetryDueToTreeMismatch(isHardRetry, retryUrl, retryNextUrl, seed, baseTree, // The route cache entry used for this navigation, if it came from route +// prediction. If the navigation results in a mismatch, we mark it as having +// a dynamic rewrite so future predictions bail out. +routeCacheEntry, // The original navigation's push/replace intent. +originalNavigateType) { + // If the navigation used a route prediction, mark it as having a dynamic + // rewrite since it resulted in a mismatch. + if (routeCacheEntry !== null) { + (0, _cache.markRouteEntryAsDynamicRewrite)(routeCacheEntry); + } else if (seed !== null) { + // Even without a direct reference to the route cache entry, we can still + // mark the route as having a dynamic rewrite by traversing the known route + // tree. This handles cases where the navigation didn't originate from a + // route prediction, but still needs to mark the pattern. + const metadataVaryPath = seed.metadataVaryPath; + if (metadataVaryPath !== null) { + const now = Date.now(); + (0, _optimisticroutes.discoverKnownRoute)(now, retryUrl.pathname, retryNextUrl, null, seed.routeTree, metadataVaryPath, false, (0, _createhreffromurl.createHrefFromUrl)(retryUrl), false, true // hasDynamicRewrite + ); + } + } + // Invalidate all route cache entries. Other entries may have been derived + // from the template before we knew it had a dynamic rewrite. This also + // triggers re-prefetching of visible links. + (0, _cache.invalidateRouteCacheEntries)(retryNextUrl, baseTree); + // If this is the second time in a row that a navigation resulted in a + // mismatch, fall back to a hard (MPA) refresh. + isHardRetry = isHardRetry || previousNavigationDidMismatch; + previousNavigationDidMismatch = true; + // If the original navigation hasn't committed to the browser history yet + // (the transition suspended before React committed), inherit its push/replace + // intent. Otherwise, the pushState already ran, so use 'replace' to avoid + // creating a duplicate history entry. + // + // This works because React entangles the retry's state update with the + // original pending transition — they commit together as a single batch, + // so the navigate type from the retry is what HistoryUpdater ultimately sees. + // + // TODO: Ideally this check would happen right before we schedule the React + // update (i.e., closer to where the action is dispatched into the queue), + // not here where the action is constructed. But the current action queue + // doesn't provide a natural place for that. Revisit when we refactor the + // action queue into a more reactive navigation model. + const lastCommitted = (0, _committedstate.getLastCommittedTree)(); + const retryNavigateType = lastCommitted !== null && baseTree !== lastCommitted ? originalNavigateType : 'replace'; + const retryAction = { + type: _routerreducertypes.ACTION_SERVER_PATCH, + previousTree: baseTree, + url: retryUrl, + nextUrl: retryNextUrl, + seed, + mpa: isHardRetry, + navigateType: retryNavigateType + }; + (0, _useactionqueue.dispatchAppRouterAction)(retryAction); +} +async function fetchMissingDynamicData(task, dynamicRequestTree, url, nextUrl, freshnessPolicy, routeCacheEntry) { + try { + const result = await (0, _fetchserverresponse.fetchServerResponse)(url, { + flightRouterState: dynamicRequestTree, + nextUrl, + isHmrRefresh: freshnessPolicy === 4 + }); + if (typeof result === 'string') { + // fetchServerResponse will return an href to indicate that the SPA + // navigation failed. For example, if the server triggered a hard + // redirect, or the fetch request errored. Initiate an MPA navigation + // to the given href. + return { + exitStatus: 2, + url: new URL(result, location.origin), + seed: null + }; + } + const now = Date.now(); + const seed = (0, _navigation.convertServerPatchToFullTree)(now, task.route, result.flightData, result.renderedSearch, result.dynamicStaleTime); + // If the navigation lock is active, wait for it to be released before + // writing the dynamic data. This allows tests to assert on the prefetched + // UI state. + if (process.env.__NEXT_EXPOSE_TESTING_API) { + await waitForNavigationLock(); + } + if (routeCacheEntry !== null && result.staticStageData !== null) { + const { response: staticStageResponse, isResponsePartial } = result.staticStageData; + (0, _cache.getStaleAt)(now, staticStageResponse.s).then((staleAt)=>{ + const buildId = result.responseHeaders.get(_constants.NEXT_NAV_DEPLOYMENT_ID_HEADER) ?? staticStageResponse.b; + (0, _cache.writeStaticStageResponseIntoCache)(now, staticStageResponse.f, buildId, staticStageResponse.h, staleAt, dynamicRequestTree, result.renderedSearch, isResponsePartial); + }).catch(()=>{ + // The static stage processing failed. Not fatal — the navigation + // completed normally, we just won't write into the cache. + }); + } + if (routeCacheEntry !== null && result.runtimePrefetchStream !== null) { + (0, _cache.processRuntimePrefetchStream)(now, result.runtimePrefetchStream, dynamicRequestTree, result.renderedSearch).then((processed)=>{ + if (processed !== null) { + (0, _cache.writeDynamicRenderResponseIntoCache)(now, _types.FetchStrategy.PPRRuntime, processed.flightDatas, processed.buildId, processed.isResponsePartial, processed.headVaryParams, processed.staleAt, processed.navigationSeed, null); + } + }).catch(()=>{ + // The runtime prefetch cache write failed. Not fatal — the + // navigation completed normally, we just won't cache runtime data. + }); + } + // result.dynamicStaleTime is in seconds (from the server's `d` field). + // Convert to an absolute timestamp using the centralized helper. + const dynamicStaleAt = (0, _bfcache.computeDynamicStaleAt)(now, result.dynamicStaleTime); + const didReceiveUnknownParallelRoute = writeDynamicDataIntoNavigationTask(task, seed.routeTree, seed.data, seed.head, dynamicStaleAt, result.debugInfo); + return { + exitStatus: didReceiveUnknownParallelRoute ? 1 : 0, + url: new URL(result.canonicalUrl, location.origin), + seed + }; + } catch { + // This shouldn't happen because fetchServerResponse's entire body is + // wrapped in a try/catch. If it does, though, it implies the server failed + // to respond with any tree at all. So we must fall back to a hard retry. + return { + exitStatus: 2, + url: url, + seed: null + }; + } +} +function writeDynamicDataIntoNavigationTask(task, serverRouteTree, dynamicData, dynamicHead, dynamicStaleAt, debugInfo) { + if (task.status === 0 && dynamicData !== null) { + task.status = 1; + finishPendingCacheNode(task.node, dynamicData, dynamicHead, debugInfo); + // Update the BFCache entry's staleAt for this segment with the value + // from the dynamic response. This applies the per-page + // unstable_dynamicStaleTime if set, or the default DYNAMIC_STALETIME_MS. + // We only update segments that received dynamic data — static segments + // are unaffected. + (0, _bfcache.updateBFCacheEntryStaleAt)(serverRouteTree.varyPath, dynamicStaleAt); + } + const taskChildren = task.children; + const serverChildren = serverRouteTree.slots; + const dynamicDataChildren = dynamicData !== null ? dynamicData[1] : null; + // Detect whether the server sends a parallel route slot that the client + // doesn't know about. + let didReceiveUnknownParallelRoute = false; + if (taskChildren !== null) { + if (serverChildren !== null) { + for(const parallelRouteKey in serverChildren){ + const serverRouteTreeChild = serverChildren[parallelRouteKey]; + const dynamicDataChild = dynamicDataChildren !== null ? dynamicDataChildren[parallelRouteKey] : null; + const taskChild = taskChildren.get(parallelRouteKey); + if (taskChild === undefined) { + // The server sent a child segment that the client doesn't know about. + // + // When we receive an unknown parallel route, we must consider it a + // mismatch. This is unlike the case where the segment itself + // mismatches, because multiple routes can be active simultaneously. + // But a given layout should never have a mismatching set of + // child slots. + // + // Theoretically, this should only happen in development during an HMR + // refresh, because the set of parallel routes for a layout does not + // change over the lifetime of a build/deployment. In production, we + // should have already mismatched on either the build id or the segment + // path. But as an extra precaution, we validate in prod, too. + didReceiveUnknownParallelRoute = true; + } else { + const taskSegment = taskChild.route[0]; + const serverSegment = createSegmentFromRouteTree(serverRouteTreeChild); + if ((0, _matchsegments.matchSegment)(serverSegment, taskSegment) && dynamicDataChild !== null && dynamicDataChild !== undefined) { + // Found a match for this task. Keep traversing down the task tree. + const childDidReceiveUnknownParallelRoute = writeDynamicDataIntoNavigationTask(taskChild, serverRouteTreeChild, dynamicDataChild, dynamicHead, dynamicStaleAt, debugInfo); + if (childDidReceiveUnknownParallelRoute) { + didReceiveUnknownParallelRoute = true; + } + } + } + } + } else { + if (serverChildren !== null) { + // The server sent a child segment that the client doesn't know about. + didReceiveUnknownParallelRoute = true; + } + } + } + return didReceiveUnknownParallelRoute; +} +function finishPendingCacheNode(cacheNode, dynamicData, dynamicHead, debugInfo) { + // Writes a dynamic response into an existing Cache Node tree. This does _not_ + // create a new tree, it updates the existing tree in-place. So it must follow + // the Suspense rules of cache safety — it can resolve pending promises, but + // it cannot overwrite existing data. It can add segments to the tree (because + // a missing segment will cause the layout router to suspend). + // but it cannot delete them. + // + // We must resolve every promise in the tree, or else it will suspend + // indefinitely. If we did not receive data for a segment, we will resolve its + // data promise to `null` to trigger a lazy fetch during render. + // Use the dynamic data from the server to fulfill the deferred RSC promise + // on the Cache Node. + const rsc = cacheNode.rsc; + const dynamicSegmentData = dynamicData[0]; + if (dynamicSegmentData === null) { + // This is an empty CacheNode; this particular server request did not + // render this segment. There may be a separate pending request that will, + // though, so we won't abort the task until all pending requests finish. + return; + } + if (rsc === null) { + // This is a lazy cache node. We can overwrite it. This is only safe + // because we know that the LayoutRouter suspends if `rsc` is `null`. + cacheNode.rsc = dynamicSegmentData; + } else if (isDeferredRsc(rsc)) { + // This is a deferred RSC promise. We can fulfill it with the data we just + // received from the server. If it was already resolved by a different + // navigation, then this does nothing because we can't overwrite data. + rsc.resolve(dynamicSegmentData, debugInfo); + } else { + // This is not a deferred RSC promise, nor is it empty, so it must have + // been populated by a different navigation. We must not overwrite it. + } + // Check if this is a leaf segment. If so, it will have a `head` property with + // a pending promise that needs to be resolved with the dynamic head from + // the server. + const head = cacheNode.head; + if (isDeferredRsc(head)) { + head.resolve(dynamicHead, debugInfo); + } +} +function abortRemainingPendingTasks(task, error, debugInfo) { + let exitStatus; + if (task.status === 0) { + // The data for this segment is still missing. + task.status = 2; + abortPendingCacheNode(task.node, error, debugInfo); + // If the server failed to fulfill the data for this segment, it implies + // that the route tree received from the server mismatched the tree that + // was previously prefetched. + // + // In an app with fully static routes and no proxy-driven redirects or + // rewrites, this should never happen, because the route for a URL would + // always be the same across multiple requests. So, this implies that some + // runtime routing condition changed, likely in a proxy, without being + // pushed to the client. + // + // When this happens, we treat this the same as a refresh(). The entire + // tree will be re-rendered from the root. + if (task.refreshState === null) { + // Trigger a "soft" refresh. Essentially the same as calling `refresh()` + // in a Server Action. + exitStatus = 1; + } else { + // The mismatch was discovered inside an inactive parallel route. This + // implies the inactive parallel route is no longer reachable at the URL + // that originally rendered it. Fall back to an MPA refresh. + // TODO: An alternative could be to trigger a soft refresh but to _not_ + // re-use the inactive parallel routes this time. Similar to what would + // happen if were to do a hard refrehs, but without the HTML page. + exitStatus = 2; + } + } else { + // This segment finished. (An error here is treated as Done because they are + // surfaced to the application during render.) + exitStatus = 0; + } + const taskChildren = task.children; + if (taskChildren !== null) { + for (const [, taskChild] of taskChildren){ + const childExitStatus = abortRemainingPendingTasks(taskChild, error, debugInfo); + // Propagate the exit status up the tree. The statuses are ordered by + // their precedence. + if (childExitStatus > exitStatus) { + exitStatus = childExitStatus; + } + } + } + return exitStatus; +} +function abortPendingCacheNode(cacheNode, error, debugInfo) { + const rsc = cacheNode.rsc; + if (isDeferredRsc(rsc)) { + if (error === null) { + // This will trigger a lazy fetch during render. + rsc.resolve(null, debugInfo); + } else { + // This will trigger an error during rendering. + rsc.reject(error, debugInfo); + } + } + // Check if this is a leaf segment. If so, it will have a `head` property with + // a pending promise that needs to be resolved. If an error was provided, we + // will not resolve it with an error, since this is rendered at the root of + // the app. We want the segment to error, not the entire app. + const head = cacheNode.head; + if (isDeferredRsc(head)) { + head.resolve(null, debugInfo); + } +} +const DEFERRED = Symbol(); +function isDeferredRsc(value) { + return value && typeof value === 'object' && value.tag === DEFERRED; +} +function createDeferredRsc() { + // Create an unresolved promise that represents data derived from a Flight + // response. The promise will be resolved later as soon as we start receiving + // data from the server, i.e. as soon as the Flight client decodes and returns + // the top-level response object. + // The `_debugInfo` field contains profiling information. Promises that are + // created by Flight already have this info added by React; for any derived + // promise created by the router, we need to transfer the Flight debug info + // onto the derived promise. + // + // The debug info represents the latency between the start of the navigation + // and the start of rendering. (It does not represent the time it takes for + // whole stream to finish.) + const debugInfo = []; + let resolve; + let reject; + const pendingRsc = new Promise((res, rej)=>{ + resolve = res; + reject = rej; + }); + pendingRsc.status = 'pending'; + pendingRsc.resolve = (value, responseDebugInfo)=>{ + if (pendingRsc.status === 'pending') { + const fulfilledRsc = pendingRsc; + fulfilledRsc.status = 'fulfilled'; + fulfilledRsc.value = value; + if (responseDebugInfo !== null) { + // Transfer the debug info to the derived promise. + debugInfo.push.apply(debugInfo, responseDebugInfo); + } + resolve(value); + } + }; + pendingRsc.reject = (error, responseDebugInfo)=>{ + if (pendingRsc.status === 'pending') { + const rejectedRsc = pendingRsc; + rejectedRsc.status = 'rejected'; + rejectedRsc.reason = error; + if (responseDebugInfo !== null) { + // Transfer the debug info to the derived promise. + debugInfo.push.apply(debugInfo, responseDebugInfo); + } + reject(error); + } + }; + pendingRsc.tag = DEFERRED; + pendingRsc._debugInfo = debugInfo; + return pendingRsc; +} +/** + * Helper for the Instant Navigation Testing API. Waits for the navigation lock + * to be released before returning. The network request has already completed by + * the time this is called, so this only delays writing the dynamic data. + * + * Not exposed in production builds by default. + */ async function waitForNavigationLock() { + if (process.env.__NEXT_EXPOSE_TESTING_API) { + const { waitForNavigationLockIfActive } = require('../segment-cache/navigation-testing-lock'); + await waitForNavigationLockIfActive(); + } +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=ppr-navigations.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/router-reducer/reducers/committed-state.js b/build/node_modules/next/dist/client/components/router-reducer/reducers/committed-state.js new file mode 100644 index 0000000..5dd2484 --- /dev/null +++ b/build/node_modules/next/dist/client/components/router-reducer/reducers/committed-state.js @@ -0,0 +1,49 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getLastCommittedTree: null, + setLastCommittedTree: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getLastCommittedTree: function() { + return getLastCommittedTree; + }, + setLastCommittedTree: function() { + return setLastCommittedTree; + } +}); +// The tree from the last state that was committed to the browser history +// (i.e., the last state for which HistoryUpdater's useInsertionEffect ran). +// This lets the server-patch reducer distinguish between retrying a +// navigation that already pushed a history entry vs one whose transition +// suspended and never committed. +// +// Currently only used by the server-patch retry logic, but this module is a +// stepping stone toward a broader refactor of the navigation queue. The +// existing AppRouter action queue will eventually be replaced by a more +// reactive model that explicitly tracks pending vs committed navigation +// state. This file will likely evolve into (or be subsumed by) that new +// implementation. +let lastCommittedTree = null; +function getLastCommittedTree() { + return lastCommittedTree; +} +function setLastCommittedTree(tree) { + lastCommittedTree = tree; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=committed-state.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/router-reducer/reducers/find-head-in-cache.js b/build/node_modules/next/dist/client/components/router-reducer/reducers/find-head-in-cache.js new file mode 100644 index 0000000..83ca932 --- /dev/null +++ b/build/node_modules/next/dist/client/components/router-reducer/reducers/find-head-in-cache.js @@ -0,0 +1,63 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "findHeadInCache", { + enumerable: true, + get: function() { + return findHeadInCache; + } +}); +const _segment = require("../../../../shared/lib/segment"); +const _createroutercachekey = require("../create-router-cache-key"); +function findHeadInCache(cache, parallelRoutes) { + return findHeadInCacheImpl(cache, parallelRoutes, '', ''); +} +function findHeadInCacheImpl(cache, parallelRoutes, keyPrefix, keyPrefixWithoutSearchParams) { + const isLastItem = Object.keys(parallelRoutes).length === 0; + if (isLastItem) { + // Returns the entire Cache Node of the segment whose head we will render. + return [ + cache, + keyPrefix, + keyPrefixWithoutSearchParams + ]; + } + // First try the 'children' parallel route if it exists + // when starting from the "root", this corresponds with the main page component + const parallelRoutesKeys = Object.keys(parallelRoutes).filter((key)=>key !== 'children'); + // if we are at the root, we need to check the children slot first + if ('children' in parallelRoutes) { + parallelRoutesKeys.unshift('children'); + } + const slots = cache.slots; + if (slots !== null) { + for (const key of parallelRoutesKeys){ + const [segment, childParallelRoutes] = parallelRoutes[key]; + // If the parallel is not matched and using the default segment, + // skip searching the head from it. + if (segment === _segment.DEFAULT_SEGMENT_KEY) { + continue; + } + const childCacheNode = slots[key]; + if (!childCacheNode) { + continue; + } + const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segment); + const cacheKeyWithoutSearchParams = (0, _createroutercachekey.createRouterCacheKey)(segment, true); + const item = findHeadInCacheImpl(childCacheNode, childParallelRoutes, keyPrefix + '/' + cacheKey, keyPrefix + '/' + cacheKeyWithoutSearchParams); + if (item) { + return item; + } + } + } + return null; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=find-head-in-cache.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/router-reducer/reducers/has-interception-route-in-current-tree.js b/build/node_modules/next/dist/client/components/router-reducer/reducers/has-interception-route-in-current-tree.js new file mode 100644 index 0000000..5c1a7a0 --- /dev/null +++ b/build/node_modules/next/dist/client/components/router-reducer/reducers/has-interception-route-in-current-tree.js @@ -0,0 +1,38 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "hasInterceptionRouteInCurrentTree", { + enumerable: true, + get: function() { + return hasInterceptionRouteInCurrentTree; + } +}); +const _interceptionroutes = require("../../../../shared/lib/router/utils/interception-routes"); +function hasInterceptionRouteInCurrentTree([segment, parallelRoutes]) { + // If we have a dynamic segment, it's marked as an interception route by the presence of the `i` suffix. + if (Array.isArray(segment) && (segment[2] === 'di(..)(..)' || segment[2] === 'ci(..)(..)' || segment[2] === 'di(.)' || segment[2] === 'ci(.)' || segment[2] === 'di(..)' || segment[2] === 'ci(..)' || segment[2] === 'di(...)' || segment[2] === 'ci(...)')) { + return true; + } + // If segment is not an array, apply the existing string-based check + if (typeof segment === 'string' && (0, _interceptionroutes.isInterceptionRouteAppPath)(segment)) { + return true; + } + // Iterate through parallelRoutes if they exist + if (parallelRoutes) { + for(const key in parallelRoutes){ + if (hasInterceptionRouteInCurrentTree(parallelRoutes[key])) { + return true; + } + } + } + return false; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=has-interception-route-in-current-tree.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/router-reducer/reducers/hmr-refresh-reducer.js b/build/node_modules/next/dist/client/components/router-reducer/reducers/hmr-refresh-reducer.js new file mode 100644 index 0000000..09a3f02 --- /dev/null +++ b/build/node_modules/next/dist/client/components/router-reducer/reducers/hmr-refresh-reducer.js @@ -0,0 +1,23 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "hmrRefreshReducer", { + enumerable: true, + get: function() { + return hmrRefreshReducer; + } +}); +const _refreshreducer = require("./refresh-reducer"); +const _pprnavigations = require("../ppr-navigations"); +function hmrRefreshReducer(state) { + return (0, _refreshreducer.refreshDynamicData)(state, _pprnavigations.FreshnessPolicy.HMRRefresh); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=hmr-refresh-reducer.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js b/build/node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js new file mode 100644 index 0000000..c3cba07 --- /dev/null +++ b/build/node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js @@ -0,0 +1,56 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + DYNAMIC_STALETIME_MS: null, + STATIC_STALETIME_MS: null, + navigateReducer: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + DYNAMIC_STALETIME_MS: function() { + return DYNAMIC_STALETIME_MS; + }, + STATIC_STALETIME_MS: function() { + return STATIC_STALETIME_MS; + }, + navigateReducer: function() { + return navigateReducer; + } +}); +const _navigation = require("../../segment-cache/navigation"); +const _cache = require("../../segment-cache/cache"); +const _pprnavigations = require("../ppr-navigations"); +const DYNAMIC_STALETIME_MS = Number(process.env.__NEXT_CLIENT_ROUTER_DYNAMIC_STALETIME) * 1000; +const STATIC_STALETIME_MS = (0, _cache.getStaleTimeMs)(Number(process.env.__NEXT_CLIENT_ROUTER_STATIC_STALETIME)); +function navigateReducer(state, action) { + const { url, isExternalUrl, navigateType, scrollBehavior } = action; + if (isExternalUrl) { + return (0, _navigation.completeHardNavigation)(state, url, navigateType); + } + // Handles case where `` tag is present, + // which will trigger an MPA navigation. + if (document.getElementById('__next-page-redirect')) { + return (0, _navigation.completeHardNavigation)(state, url, navigateType); + } + // Temporary glue code between the router reducer and the new navigation + // implementation. Eventually we'll rewrite the router reducer to a + // state machine. + const currentUrl = new URL(state.canonicalUrl, location.origin); + const currentRenderedSearch = state.renderedSearch; + return (0, _navigation.navigate)(state, url, currentUrl, currentRenderedSearch, state.cache, state.tree, state.nextUrl, _pprnavigations.FreshnessPolicy.Default, scrollBehavior, navigateType); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=navigate-reducer.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/router-reducer/reducers/refresh-reducer.js b/build/node_modules/next/dist/client/components/router-reducer/reducers/refresh-reducer.js new file mode 100644 index 0000000..30cba4d --- /dev/null +++ b/build/node_modules/next/dist/client/components/router-reducer/reducers/refresh-reducer.js @@ -0,0 +1,83 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + refreshDynamicData: null, + refreshReducer: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + refreshDynamicData: function() { + return refreshDynamicData; + }, + refreshReducer: function() { + return refreshReducer; + } +}); +const _routerreducertypes = require("../router-reducer-types"); +const _navigation = require("../../segment-cache/navigation"); +const _cache = require("../../segment-cache/cache"); +const _hasinterceptionrouteincurrenttree = require("./has-interception-route-in-current-tree"); +const _pprnavigations = require("../ppr-navigations"); +const _bfcache = require("../../segment-cache/bfcache"); +function refreshReducer(state, action) { + // During a refresh, we invalidate the segment cache but not the route cache. + // The route cache contains the tree structure (which segments exist at a + // given URL) which doesn't change during a refresh. The segment cache + // contains the actual RSC data which needs to be re-fetched. + // + // The Instant Navigation Testing API can bypass cache invalidation to + // preserve prefetched data when refreshing after an MPA navigation. This is + // only used for testing and is not exposed in production builds by default. + const bypassCacheInvalidation = process.env.__NEXT_EXPOSE_TESTING_API && action.bypassCacheInvalidation; + if (!bypassCacheInvalidation) { + const currentNextUrl = state.nextUrl; + const currentRouterState = state.tree; + (0, _cache.invalidateSegmentCacheEntries)(currentNextUrl, currentRouterState); + } + return refreshDynamicData(state, _pprnavigations.FreshnessPolicy.RefreshAll); +} +function refreshDynamicData(state, freshnessPolicy) { + // During a refresh, invalidate the BFCache, which may contain dynamic data. + (0, _bfcache.invalidateBfCache)(); + const currentNextUrl = state.nextUrl; + // We always send the last next-url, not the current when performing a dynamic + // request. This is because we update the next-url after a navigation, but we + // want the same interception route to be matched that used the last next-url. + const nextUrlForRefresh = (0, _hasinterceptionrouteincurrenttree.hasInterceptionRouteInCurrentTree)(state.tree) ? state.previousNextUrl || currentNextUrl : null; + // A refresh is modeled as a navigation to the current URL, but where any + // existing dynamic data (including in shared layouts) is re-fetched. + const currentCanonicalUrl = state.canonicalUrl; + const currentUrl = new URL(currentCanonicalUrl, location.origin); + const currentRenderedSearch = state.renderedSearch; + const currentFlightRouterState = state.tree; + const scrollBehavior = _routerreducertypes.ScrollBehavior.NoScroll; + // Create a NavigationSeed from the current FlightRouterState. + // TODO: Eventually we will store this type directly on the state object + // instead of reconstructing it on demand. Part of a larger series of + // refactors to unify the various tree types that the client deals with. + const now = Date.now(); + // TODO: Store the dynamic stale time on the top-level state so it's known + // during restores and refreshes. + const refreshSeed = (0, _navigation.convertServerPatchToFullTree)(now, currentFlightRouterState, null, currentRenderedSearch, _bfcache.UnknownDynamicStaleTime); + const navigateType = 'replace'; + return (0, _navigation.navigateToKnownRoute)(now, state, currentUrl, currentCanonicalUrl, refreshSeed, currentUrl, currentRenderedSearch, state.cache, currentFlightRouterState, freshnessPolicy, nextUrlForRefresh, scrollBehavior, navigateType, null, // Refresh navigations don't use route prediction, so there's no route + // cache entry to mark as having a dynamic rewrite on mismatch. If a + // mismatch occurs, the retry handler will traverse the known route tree + // to find and mark the entry. + null); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=refresh-reducer.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/router-reducer/reducers/restore-reducer.js b/build/node_modules/next/dist/client/components/router-reducer/reducers/restore-reducer.js new file mode 100644 index 0000000..e13d3c6 --- /dev/null +++ b/build/node_modules/next/dist/client/components/router-reducer/reducers/restore-reducer.js @@ -0,0 +1,62 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "restoreReducer", { + enumerable: true, + get: function() { + return restoreReducer; + } +}); +const _computechangedpath = require("../compute-changed-path"); +const _pprnavigations = require("../ppr-navigations"); +const _navigation = require("../../segment-cache/navigation"); +const _bfcache = require("../../segment-cache/bfcache"); +function restoreReducer(state, action) { + // This action is used to restore the router state from the history state. + // However, it's possible that the history state no longer contains the `FlightRouterState`. + // We will copy over the internal state on pushState/replaceState events, but if a history entry + // occurred before hydration, or if the user navigated to a hash using a regular anchor link, + // the history state will not contain the `FlightRouterState`. + // In this case, we'll continue to use the existing tree so the router doesn't get into an invalid state. + let treeToRestore; + let renderedSearch; + const historyState = action.historyState; + if (historyState) { + treeToRestore = historyState.tree; + renderedSearch = historyState.renderedSearch; + } else { + treeToRestore = state.tree; + renderedSearch = state.renderedSearch; + } + const currentUrl = new URL(state.canonicalUrl, location.origin); + const restoredUrl = action.url; + const restoredNextUrl = (0, _computechangedpath.extractPathFromFlightRouterState)(treeToRestore) ?? restoredUrl.pathname; + const now = Date.now(); + // TODO: Store the dynamic stale time on the top-level state so it's known + // during restores and refreshes. + const accumulation = { + separateRefreshUrls: null, + scrollRef: null + }; + const restoreSeed = (0, _navigation.convertServerPatchToFullTree)(now, treeToRestore, null, renderedSearch, _bfcache.UnknownDynamicStaleTime); + const task = (0, _pprnavigations.startPPRNavigation)(now, currentUrl, state.renderedSearch, state.cache, state.tree, restoreSeed.routeTree, restoreSeed.metadataVaryPath, _pprnavigations.FreshnessPolicy.HistoryTraversal, null, null, restoreSeed.dynamicStaleAt, false, accumulation); + if (task === null) { + return (0, _navigation.completeHardNavigation)(state, restoredUrl, 'replace'); + } + (0, _pprnavigations.spawnDynamicRequests)(task, restoredUrl, restoredNextUrl, _pprnavigations.FreshnessPolicy.HistoryTraversal, accumulation, // History traversal doesn't use route prediction, so there's no route + // cache entry to mark as having a dynamic rewrite on mismatch. If a + // mismatch occurs, the retry handler will traverse the known route tree + // to find and mark the entry. + null, // History traversal always uses 'replace'. + 'replace'); + return (0, _navigation.completeTraverseNavigation)(state, restoredUrl, renderedSearch, task.node, task.route, restoredNextUrl); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=restore-reducer.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/router-reducer/reducers/server-action-reducer.js b/build/node_modules/next/dist/client/components/router-reducer/reducers/server-action-reducer.js new file mode 100644 index 0000000..a56ccc8 --- /dev/null +++ b/build/node_modules/next/dist/client/components/router-reducer/reducers/server-action-reducer.js @@ -0,0 +1,320 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "serverActionReducer", { + enumerable: true, + get: function() { + return serverActionReducer; + } +}); +const _appcallserver = require("../../../app-call-server"); +const _appfindsourcemapurl = require("../../../app-find-source-map-url"); +const _approuterheaders = require("../../app-router-headers"); +const _unrecognizedactionerror = require("../../unrecognized-action-error"); +const _client = require("react-server-dom-webpack/client"); +const _routerreducertypes = require("../router-reducer-types"); +const _assignlocation = require("../../../assign-location"); +const _createhreffromurl = require("../create-href-from-url"); +const _hasinterceptionrouteincurrenttree = require("./has-interception-route-in-current-tree"); +const _flightdatahelpers = require("../../../flight-data-helpers"); +const _redirect = require("../../redirect"); +const _removebasepath = require("../../../remove-base-path"); +const _hasbasepath = require("../../../has-base-path"); +const _serverreferenceinfo = require("../../../../shared/lib/server-reference-info"); +const _cache = require("../../segment-cache/cache"); +const _scheduler = require("../../segment-cache/scheduler"); +const _deploymentid = require("../../../../shared/lib/deployment-id"); +const _navigationbuildid = require("../../../navigation-build-id"); +const _constants = require("../../../../lib/constants"); +const _navigation = require("../../segment-cache/navigation"); +const _optimisticroutes = require("../../segment-cache/optimistic-routes"); +const _actionrevalidationkind = require("../../../../shared/lib/action-revalidation-kind"); +const _approuterutils = require("../../app-router-utils"); +const _pprnavigations = require("../ppr-navigations"); +const _fetchserverresponse = require("../fetch-server-response"); +const _bfcache = require("../../segment-cache/bfcache"); +const createFromFetch = _client.createFromFetch; +let createDebugChannel; +if (process.env.__NEXT_DEV_SERVER && process.env.__NEXT_REACT_DEBUG_CHANNEL) { + createDebugChannel = require('../../../dev/debug-channel').createDebugChannel; +} +async function fetchServerAction(state, nextUrl, { actionId, actionArgs }) { + const temporaryReferences = (0, _client.createTemporaryReferenceSet)(); + const info = (0, _serverreferenceinfo.extractInfoFromServerReferenceId)(actionId); + const usedArgs = (0, _serverreferenceinfo.omitUnusedArgs)(actionArgs, info); + const body = await (0, _client.encodeReply)(usedArgs, { + temporaryReferences + }); + const headers = { + Accept: _approuterheaders.RSC_CONTENT_TYPE_HEADER, + [_approuterheaders.ACTION_HEADER]: actionId, + [_approuterheaders.NEXT_ROUTER_STATE_TREE_HEADER]: (0, _flightdatahelpers.prepareFlightRouterStateForRequest)(state.tree) + }; + const deploymentId = (0, _deploymentid.getDeploymentId)(); + if (deploymentId) { + headers['x-deployment-id'] = deploymentId; + } + if (nextUrl) { + headers[_approuterheaders.NEXT_URL] = nextUrl; + } + if (process.env.__NEXT_DEV_SERVER) { + if (self.__next_r) { + headers[_approuterheaders.NEXT_HTML_REQUEST_ID_HEADER] = self.__next_r; + } + // Create a new request ID for the server action request. The server uses + // this to tag debug information sent via WebSocket to the client, which + // then routes those chunks to the debug channel associated with this ID. + headers[_approuterheaders.NEXT_REQUEST_ID_HEADER] = crypto.getRandomValues(new Uint32Array(1))[0].toString(16); + } + const res = await fetch(state.canonicalUrl, { + method: 'POST', + headers, + body + }); + // Handle server actions that the server didn't recognize. + const unrecognizedActionHeader = res.headers.get(_approuterheaders.NEXT_ACTION_NOT_FOUND_HEADER); + if (unrecognizedActionHeader === '1') { + throw Object.defineProperty(new _unrecognizedactionerror.UnrecognizedActionError(`Server Action "${actionId}" was not found on the server. \nRead more: https://nextjs.org/docs/messages/failed-to-find-server-action`), "__NEXT_ERROR_CODE", { + value: "E715", + enumerable: false, + configurable: true + }); + } + const redirectHeader = res.headers.get('x-action-redirect'); + const [location1, _redirectType] = redirectHeader?.split(';') || []; + let redirectType; + switch(_redirectType){ + case 'push': + redirectType = 'push'; + break; + case 'replace': + redirectType = 'replace'; + break; + default: + redirectType = undefined; + } + const isPrerender = !!res.headers.get(_approuterheaders.NEXT_IS_PRERENDER_HEADER); + let revalidationKind = _actionrevalidationkind.ActionDidNotRevalidate; + try { + const revalidationHeader = res.headers.get('x-action-revalidated'); + if (revalidationHeader) { + const parsedKind = JSON.parse(revalidationHeader); + if (parsedKind === _actionrevalidationkind.ActionDidRevalidateStaticAndDynamic || parsedKind === _actionrevalidationkind.ActionDidRevalidateDynamicOnly) { + revalidationKind = parsedKind; + } + } + } catch {} + const redirectLocation = location1 ? (0, _assignlocation.assignLocation)(location1, new URL(state.canonicalUrl, window.location.href)) : undefined; + const contentType = res.headers.get('content-type'); + const isRscResponse = !!(contentType && contentType.startsWith(_approuterheaders.RSC_CONTENT_TYPE_HEADER)); + // Handle invalid server action responses. + // A valid response must have `content-type: text/x-component`, unless it's an external redirect. + // (external redirects have an 'x-action-redirect' header, but the body is an empty 'text/plain') + if (!isRscResponse && !redirectLocation) { + // The server can respond with a text/plain error message, but we'll fallback to something generic + // if there isn't one. + const message = res.status >= 400 && contentType === 'text/plain' ? await res.text() : 'An unexpected response was received from the server.'; + throw Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + let actionResult; + let actionFlightData; + let actionFlightDataRenderedSearch; + let couldBeIntercepted = false; + if (isRscResponse) { + // Server action redirect responses carry the Flight data of the redirect + // target, which may be prerendered with a completeness marker byte + // prepended. Strip it before passing to Flight. + const responsePromise = redirectLocation ? (0, _fetchserverresponse.processFetch)(res).then(({ response: r })=>r) : Promise.resolve(res); + const response = await createFromFetch(responsePromise, { + callServer: _appcallserver.callServer, + findSourceMapURL: _appfindsourcemapurl.findSourceMapURL, + temporaryReferences, + debugChannel: createDebugChannel && createDebugChannel(headers) + }); + // An internal redirect can send an RSC response, but does not have a useful `actionResult`. + actionResult = redirectLocation ? undefined : response.a; + couldBeIntercepted = response.i; + // Check if the response build ID matches the client build ID. + // In a multi-zone setup, when a server action triggers a redirect, + // the server pre-fetches the redirect target as RSC. If the redirect + // target is served by a different Next.js zone (different build), the + // pre-fetched RSC data will have a foreign build ID. We must discard + // the flight data in that case so the redirect triggers an MPA + // navigation (full page load) instead of trying to apply the foreign + // RSC payload — which would result in a blank page. + const responseBuildId = res.headers.get(_constants.NEXT_NAV_DEPLOYMENT_ID_HEADER) ?? response.b; + if (responseBuildId !== undefined && responseBuildId !== (0, _navigationbuildid.getNavigationBuildId)()) { + // Build ID mismatch — discard the flight data. The redirect will + // still be processed, and the absence of flight data will cause an + // MPA navigation via completeHardNavigation(). + } else { + const maybeFlightData = (0, _flightdatahelpers.normalizeFlightData)(response.f); + if (maybeFlightData !== '') { + actionFlightData = maybeFlightData; + actionFlightDataRenderedSearch = response.q; + } + } + } else { + // An external redirect doesn't contain RSC data. + actionResult = undefined; + actionFlightData = undefined; + actionFlightDataRenderedSearch = undefined; + } + return { + actionResult, + actionFlightData, + actionFlightDataRenderedSearch, + redirectLocation, + redirectType, + revalidationKind, + isPrerender, + couldBeIntercepted + }; +} +function serverActionReducer(state, action) { + const { resolve, reject } = action; + // only pass along the `nextUrl` param (used for interception routes) if the current route was intercepted. + // If the route has been intercepted, the action should be as well. + // Otherwise the server action might be intercepted with the wrong action id + // (ie, one that corresponds with the intercepted route) + const nextUrl = // We always send the last next-url, not the current when + // performing a dynamic request. This is because we update + // the next-url after a navigation, but we want the same + // interception route to be matched that used the last + // next-url. + (state.previousNextUrl || state.nextUrl) && (0, _hasinterceptionrouteincurrenttree.hasInterceptionRouteInCurrentTree)(state.tree) ? state.previousNextUrl || state.nextUrl : null; + return fetchServerAction(state, nextUrl, action).then(async ({ revalidationKind, actionResult, actionFlightData: flightData, actionFlightDataRenderedSearch: flightDataRenderedSearch, redirectLocation, redirectType, isPrerender, couldBeIntercepted })=>{ + if (revalidationKind !== _actionrevalidationkind.ActionDidNotRevalidate) { + // There was either a revalidation or a refresh, or maybe both. + // Evict the BFCache, which may contain dynamic data. + (0, _bfcache.invalidateBfCache)(); + // Store whether this action triggered any revalidation + // The action queue will use this information to potentially + // trigger a refresh action if the action was discarded + // (ie, due to a navigation, before the action completed) + action.didRevalidate = true; + // If there was a revalidation, evict the prefetch cache. + // TODO: Evict only segments with matching tags and/or paths. + // TODO: We should only invalidate the route cache if cookies were + // mutated, since route trees may vary based on cookies. For now we + // invalidate both caches until we have a way to detect cookie + // mutations on the client. + if (revalidationKind === _actionrevalidationkind.ActionDidRevalidateStaticAndDynamic) { + (0, _cache.invalidateEntirePrefetchCache)(nextUrl, state.tree); + } + // Start a cooldown before re-prefetching to allow CDN cache + // propagation. + (0, _scheduler.startRevalidationCooldown)(); + } + const navigateType = redirectType || 'push'; + if (redirectLocation !== undefined) { + // If the action triggered a redirect, the action promise will be rejected with + // a redirect so that it's handled by RedirectBoundary as we won't have a valid + // action result to resolve the promise with. This will effectively reset the state of + // the component that called the action as the error boundary will remount the tree. + // The status code doesn't matter here as the action handler will have already sent + // a response with the correct status code. + if ((0, _approuterutils.isExternalURL)(redirectLocation)) { + // External redirect. Triggers an MPA navigation. + const redirectHref = redirectLocation.href; + const redirectError = createRedirectErrorForAction(redirectHref, navigateType); + reject(redirectError); + return (0, _navigation.completeHardNavigation)(state, redirectLocation, navigateType); + } else { + // Internal redirect. Triggers an SPA navigation. + const redirectWithBasepath = (0, _createhreffromurl.createHrefFromUrl)(redirectLocation, false); + const redirectHref = (0, _hasbasepath.hasBasePath)(redirectWithBasepath) ? (0, _removebasepath.removeBasePath)(redirectWithBasepath) : redirectWithBasepath; + const redirectError = createRedirectErrorForAction(redirectHref, navigateType); + reject(redirectError); + } + } else { + // If there's no redirect, resolve the action with the result. + resolve(actionResult); + } + // Check if we can bail out without updating any state. + if (// Did the action trigger a redirect? + redirectLocation === undefined && // Did the action revalidate any data? + revalidationKind === _actionrevalidationkind.ActionDidNotRevalidate && // Did the server render new data? + flightData === undefined) { + // The action did not trigger any revalidations or redirects. No + // navigation is required. + return state; + } + if (flightData === undefined && redirectLocation !== undefined) { + // The server redirected, but did not send any Flight data. This implies + // an external redirect. + // TODO: We should refactor the action response type to be more explicit + // about the various response types. + return (0, _navigation.completeHardNavigation)(state, redirectLocation, navigateType); + } + if (typeof flightData === 'string') { + // If the flight data is just a string, something earlier in the + // response handling triggered an external redirect. + return (0, _navigation.completeHardNavigation)(state, new URL(flightData, location.origin), navigateType); + } + // The action triggered a navigation — either a redirect, a revalidation, + // or both. + // If there was no redirect, then the target URL is the same as the + // current URL. + const currentUrl = new URL(state.canonicalUrl, location.origin); + const currentRenderedSearch = state.renderedSearch; + const redirectUrl = redirectLocation !== undefined ? redirectLocation : currentUrl; + const currentFlightRouterState = state.tree; + const scrollBehavior = _routerreducertypes.ScrollBehavior.Default; + // If the action triggered a revalidation of the cache, we should also + // refresh all the dynamic data. + const freshnessPolicy = revalidationKind === _actionrevalidationkind.ActionDidNotRevalidate ? _pprnavigations.FreshnessPolicy.Default : _pprnavigations.FreshnessPolicy.RefreshAll; + // The server may have sent back new data. If so, we will perform a + // "seeded" navigation that uses the data from the response. + // TODO: Currently the server always renders from the root in + // response to a Server Action. In the case of a normal redirect + // with no revalidation, it should skip over the shared layouts. + if (flightData !== undefined && flightDataRenderedSearch !== undefined) { + // The server sent back new route data as part of the response. We + // will use this to render the new page. If this happens to be only a + // subset of the data needed to render the new page, we'll initiate a + // new fetch, like we would for a normal navigation. + const redirectCanonicalUrl = (0, _createhreffromurl.createHrefFromUrl)(redirectUrl); + const now = Date.now(); + // TODO: Store the dynamic stale time on the top-level state so it's + // known during restores and refreshes. + const redirectSeed = (0, _navigation.convertServerPatchToFullTree)(now, currentFlightRouterState, flightData, flightDataRenderedSearch, _bfcache.UnknownDynamicStaleTime); + // Learn the route pattern so we can predict it for future navigations. + const metadataVaryPath = redirectSeed.metadataVaryPath; + if (metadataVaryPath !== null) { + (0, _optimisticroutes.discoverKnownRoute)(now, redirectUrl.pathname, nextUrl, null, redirectSeed.routeTree, metadataVaryPath, couldBeIntercepted, redirectCanonicalUrl, isPrerender, false // hasDynamicRewrite + ); + } + return (0, _navigation.navigateToKnownRoute)(now, state, redirectUrl, redirectCanonicalUrl, redirectSeed, currentUrl, currentRenderedSearch, state.cache, currentFlightRouterState, freshnessPolicy, nextUrl, scrollBehavior, navigateType, null, // Server action redirects don't use route prediction - we already + // have the route tree from the server response. If a mismatch occurs + // during dynamic data fetch, the retry handler will traverse the + // known route tree to mark the entry as having a dynamic rewrite. + null); + } + // The server did not send back new data. We'll perform a regular, non- + // seeded navigation — effectively the same as or router.push(). + return (0, _navigation.navigate)(state, redirectUrl, currentUrl, currentRenderedSearch, state.cache, currentFlightRouterState, nextUrl, freshnessPolicy, scrollBehavior, navigateType); + }, (e)=>{ + // When the server action is rejected we don't update the state and instead call the reject handler of the promise. + reject(e); + return state; + }); +} +function createRedirectErrorForAction(redirectHref, resolvedRedirectType) { + const redirectError = (0, _redirect.getRedirectError)(redirectHref, resolvedRedirectType); + redirectError.handled = true; + return redirectError; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=server-action-reducer.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/router-reducer/reducers/server-patch-reducer.js b/build/node_modules/next/dist/client/components/router-reducer/reducers/server-patch-reducer.js new file mode 100644 index 0000000..edb3422 --- /dev/null +++ b/build/node_modules/next/dist/client/components/router-reducer/reducers/server-patch-reducer.js @@ -0,0 +1,58 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "serverPatchReducer", { + enumerable: true, + get: function() { + return serverPatchReducer; + } +}); +const _createhreffromurl = require("../create-href-from-url"); +const _routerreducertypes = require("../router-reducer-types"); +const _navigation = require("../../segment-cache/navigation"); +const _refreshreducer = require("./refresh-reducer"); +const _pprnavigations = require("../ppr-navigations"); +function serverPatchReducer(state, action) { + // A "retry" is a navigation that happens due to a route mismatch. It's + // similar to a refresh, because we will omit any existing dynamic data on + // the page. But we seed the retry navigation with the exact tree that the + // server just responded with. + const retryMpa = action.mpa; + const retryUrl = new URL(action.url, location.origin); + const retrySeed = action.seed; + const navigateType = action.navigateType; + if (retryMpa || retrySeed === null) { + // If the server did not send back data during the mismatch, fall back to + // an MPA navigation. + return (0, _navigation.completeHardNavigation)(state, retryUrl, navigateType); + } + const currentUrl = new URL(state.canonicalUrl, location.origin); + const currentRenderedSearch = state.renderedSearch; + if (action.previousTree !== state.tree) { + // There was another, more recent navigation since the once that + // mismatched. We can abort the retry, but we still need to refresh the + // page to evict any stale dynamic data. + return (0, _refreshreducer.refreshReducer)(state, { + type: _routerreducertypes.ACTION_REFRESH + }); + } + // There have been no new navigations since the mismatched one. Refresh, + // using the tree we just received from the server. + const retryCanonicalUrl = (0, _createhreffromurl.createHrefFromUrl)(retryUrl); + const retryNextUrl = action.nextUrl; + const scrollBehavior = _routerreducertypes.ScrollBehavior.Default; + const now = Date.now(); + return (0, _navigation.navigateToKnownRoute)(now, state, retryUrl, retryCanonicalUrl, retrySeed, currentUrl, currentRenderedSearch, state.cache, state.tree, _pprnavigations.FreshnessPolicy.RefreshAll, retryNextUrl, scrollBehavior, navigateType, null, // Server patch (retry) navigations don't use route prediction. This is + // typically a retry after a previous mismatch, so the route was already + // marked as having a dynamic rewrite when the mismatch was detected. + null); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=server-patch-reducer.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/router-reducer/router-reducer-types.js b/build/node_modules/next/dist/client/components/router-reducer/router-reducer-types.js new file mode 100644 index 0000000..e58ce90 --- /dev/null +++ b/build/node_modules/next/dist/client/components/router-reducer/router-reducer-types.js @@ -0,0 +1,70 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + ACTION_HMR_REFRESH: null, + ACTION_NAVIGATE: null, + ACTION_REFRESH: null, + ACTION_RESTORE: null, + ACTION_SERVER_ACTION: null, + ACTION_SERVER_PATCH: null, + PrefetchKind: null, + ScrollBehavior: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + ACTION_HMR_REFRESH: function() { + return ACTION_HMR_REFRESH; + }, + ACTION_NAVIGATE: function() { + return ACTION_NAVIGATE; + }, + ACTION_REFRESH: function() { + return ACTION_REFRESH; + }, + ACTION_RESTORE: function() { + return ACTION_RESTORE; + }, + ACTION_SERVER_ACTION: function() { + return ACTION_SERVER_ACTION; + }, + ACTION_SERVER_PATCH: function() { + return ACTION_SERVER_PATCH; + }, + PrefetchKind: function() { + return PrefetchKind; + }, + ScrollBehavior: function() { + return ScrollBehavior; + } +}); +const ACTION_REFRESH = 'refresh'; +const ACTION_NAVIGATE = 'navigate'; +const ACTION_RESTORE = 'restore'; +const ACTION_SERVER_PATCH = 'server-patch'; +const ACTION_HMR_REFRESH = 'hmr-refresh'; +const ACTION_SERVER_ACTION = 'server-action'; +var PrefetchKind = /*#__PURE__*/ function(PrefetchKind) { + PrefetchKind["AUTO"] = "auto"; + PrefetchKind["FULL"] = "full"; + return PrefetchKind; +}({}); +var ScrollBehavior = /*#__PURE__*/ function(ScrollBehavior) { + /** Use per-node ScrollRef to decide whether to scroll. */ ScrollBehavior[ScrollBehavior["Default"] = 0] = "Default"; + /** Suppress scroll entirely (e.g. scroll={false} on Link or router.push). */ ScrollBehavior[ScrollBehavior["NoScroll"] = 1] = "NoScroll"; + return ScrollBehavior; +}({}); + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=router-reducer-types.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/router-reducer/router-reducer.js b/build/node_modules/next/dist/client/components/router-reducer/router-reducer.js new file mode 100644 index 0000000..d2d7f8f --- /dev/null +++ b/build/node_modules/next/dist/client/components/router-reducer/router-reducer.js @@ -0,0 +1,66 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "reducer", { + enumerable: true, + get: function() { + return reducer; + } +}); +const _routerreducertypes = require("./router-reducer-types"); +const _navigatereducer = require("./reducers/navigate-reducer"); +const _serverpatchreducer = require("./reducers/server-patch-reducer"); +const _restorereducer = require("./reducers/restore-reducer"); +const _refreshreducer = require("./reducers/refresh-reducer"); +const _hmrrefreshreducer = require("./reducers/hmr-refresh-reducer"); +const _serveractionreducer = require("./reducers/server-action-reducer"); +/** + * Reducer that handles the app-router state updates. + */ function clientReducer(state, action) { + switch(action.type){ + case _routerreducertypes.ACTION_NAVIGATE: + { + return (0, _navigatereducer.navigateReducer)(state, action); + } + case _routerreducertypes.ACTION_SERVER_PATCH: + { + return (0, _serverpatchreducer.serverPatchReducer)(state, action); + } + case _routerreducertypes.ACTION_RESTORE: + { + return (0, _restorereducer.restoreReducer)(state, action); + } + case _routerreducertypes.ACTION_REFRESH: + { + return (0, _refreshreducer.refreshReducer)(state, action); + } + case _routerreducertypes.ACTION_HMR_REFRESH: + { + return (0, _hmrrefreshreducer.hmrRefreshReducer)(state); + } + case _routerreducertypes.ACTION_SERVER_ACTION: + { + return (0, _serveractionreducer.serverActionReducer)(state, action); + } + // This case should never be hit as dispatch is strongly typed. + default: + throw Object.defineProperty(new Error('Unknown action'), "__NEXT_ERROR_CODE", { + value: "E295", + enumerable: false, + configurable: true + }); + } +} +function serverReducer(state, _action) { + return state; +} +const reducer = typeof window === 'undefined' ? serverReducer : clientReducer; + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=router-reducer.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/router-reducer/set-cache-busting-search-param.js b/build/node_modules/next/dist/client/components/router-reducer/set-cache-busting-search-param.js new file mode 100644 index 0000000..216ecda --- /dev/null +++ b/build/node_modules/next/dist/client/components/router-reducer/set-cache-busting-search-param.js @@ -0,0 +1,66 @@ +'use client'; +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + setCacheBustingSearchParam: null, + setCacheBustingSearchParamWithHash: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + setCacheBustingSearchParam: function() { + return setCacheBustingSearchParam; + }, + setCacheBustingSearchParamWithHash: function() { + return setCacheBustingSearchParamWithHash; + } +}); +const _cachebustingsearchparam = require("../../../shared/lib/router/utils/cache-busting-search-param"); +const _approuterheaders = require("../app-router-headers"); +async function computeClientCacheBustingSearchParam(headers) { + if (typeof globalThis.crypto?.subtle?.digest === 'function') { + return (0, _cachebustingsearchparam.computeCacheBustingSearchParam)(headers[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER], headers[_approuterheaders.NEXT_ROUTER_SEGMENT_PREFETCH_HEADER], headers[_approuterheaders.NEXT_ROUTER_STATE_TREE_HEADER], headers[_approuterheaders.NEXT_URL]); + } + return (0, _cachebustingsearchparam.computeLegacyCacheBustingSearchParam)(headers[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER], headers[_approuterheaders.NEXT_ROUTER_SEGMENT_PREFETCH_HEADER], headers[_approuterheaders.NEXT_ROUTER_STATE_TREE_HEADER], headers[_approuterheaders.NEXT_URL]); +} +const setCacheBustingSearchParam = async (url, headers)=>{ + const uniqueCacheKey = await computeClientCacheBustingSearchParam(headers); + setCacheBustingSearchParamWithHash(url, uniqueCacheKey); +}; +const setCacheBustingSearchParamWithHash = (url, hash)=>{ + /** + * Note that we intentionally do not use `url.searchParams.set` here: + * + * const url = new URL('https://example.com/search?q=custom%20spacing'); + * url.searchParams.set('_rsc', 'abc123'); + * console.log(url.toString()); // Outputs: https://example.com/search?q=custom+spacing&_rsc=abc123 + * ^ <--- this is causing confusion + * This is in fact intended based on https://url.spec.whatwg.org/#interface-urlsearchparams, but + * we want to preserve the %20 as %20 if that's what the user passed in, hence the custom + * logic below. + */ const existingSearch = url.search; + const rawQuery = existingSearch.startsWith('?') ? existingSearch.slice(1) : existingSearch; + // Always remove any existing cache busting param and add a fresh one to ensure + // we have the correct value based on current request headers + const pairs = rawQuery.split('&').filter((pair)=>pair && !pair.startsWith(`${_approuterheaders.NEXT_RSC_UNION_QUERY}=`)); + if (hash.length > 0) { + pairs.push(`${_approuterheaders.NEXT_RSC_UNION_QUERY}=${hash}`); + } else { + pairs.push(`${_approuterheaders.NEXT_RSC_UNION_QUERY}`); + } + url.search = pairs.length ? `?${pairs.join('&')}` : ''; +}; + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=set-cache-busting-search-param.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/segment-cache/bfcache.js b/build/node_modules/next/dist/client/components/segment-cache/bfcache.js new file mode 100644 index 0000000..6f76f8c --- /dev/null +++ b/build/node_modules/next/dist/client/components/segment-cache/bfcache.js @@ -0,0 +1,128 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + UnknownDynamicStaleTime: null, + computeDynamicStaleAt: null, + invalidateBfCache: null, + readFromBFCache: null, + readFromBFCacheDuringRegularNavigation: null, + updateBFCacheEntryStaleAt: null, + writeHeadToBFCache: null, + writeToBFCache: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + UnknownDynamicStaleTime: function() { + return UnknownDynamicStaleTime; + }, + computeDynamicStaleAt: function() { + return computeDynamicStaleAt; + }, + invalidateBfCache: function() { + return invalidateBfCache; + }, + readFromBFCache: function() { + return readFromBFCache; + }, + readFromBFCacheDuringRegularNavigation: function() { + return readFromBFCacheDuringRegularNavigation; + }, + updateBFCacheEntryStaleAt: function() { + return updateBFCacheEntryStaleAt; + }, + writeHeadToBFCache: function() { + return writeHeadToBFCache; + }, + writeToBFCache: function() { + return writeToBFCache; + } +}); +const _navigatereducer = require("../router-reducer/reducers/navigate-reducer"); +const _cachemap = require("./cache-map"); +const UnknownDynamicStaleTime = -1; +function computeDynamicStaleAt(now, dynamicStaleTimeSeconds) { + return dynamicStaleTimeSeconds !== UnknownDynamicStaleTime ? now + dynamicStaleTimeSeconds * 1000 : now + _navigatereducer.DYNAMIC_STALETIME_MS; +} +const bfcacheMap = (0, _cachemap.createCacheMap)(); +let currentBfCacheVersion = 0; +function invalidateBfCache() { + if (typeof window === 'undefined') { + return; + } + currentBfCacheVersion++; +} +function writeToBFCache(now, varyPath, rsc, prefetchRsc, head, prefetchHead, dynamicStaleAt) { + if (typeof window === 'undefined') { + return; + } + const entry = { + rsc, + prefetchRsc, + // TODO: These fields will be removed from both BFCacheEntry and + // SegmentCacheEntry. The head has its own separate cache entry. + head, + prefetchHead, + ref: null, + // TODO: This is just a heuristic. Getting the actual size of the segment + // isn't feasible because it's part of a larger streaming response. The + // LRU will still evict it, we just won't have a fully accurate total + // LRU size. However, we'll probably remove the size tracking from the LRU + // entirely and use memory pressure events instead. + size: 100, + navigatedAt: now, + // A back/forward navigation will disregard the stale time. This field is + // only relevant when staleTimes.dynamic is enabled or unstable_dynamicStaleTime + // is exported by a page. + staleAt: dynamicStaleAt, + version: currentBfCacheVersion + }; + const isRevalidation = false; + (0, _cachemap.setInCacheMap)(bfcacheMap, varyPath, entry, isRevalidation); +} +function writeHeadToBFCache(now, varyPath, head, prefetchHead, dynamicStaleAt) { + // Read the special "segment" that represents the head data. + writeToBFCache(now, varyPath, head, prefetchHead, null, null, dynamicStaleAt); +} +function updateBFCacheEntryStaleAt(varyPath, newStaleAt) { + if (typeof window === 'undefined') { + return; + } + const isRevalidation = false; + // Read with staleness bypass (-1) so we can update even stale entries + const entry = (0, _cachemap.getFromCacheMap)(-1, currentBfCacheVersion, bfcacheMap, varyPath, isRevalidation); + if (entry !== null) { + entry.staleAt = newStaleAt; + } +} +function readFromBFCache(varyPath) { + if (typeof window === 'undefined') { + return null; + } + const isRevalidation = false; + return (0, _cachemap.getFromCacheMap)(// During a back/forward navigation, it doesn't matter how stale the data + // might be. Pass -1 instead of the actual current time to bypass + // staleness checks. + -1, currentBfCacheVersion, bfcacheMap, varyPath, isRevalidation); +} +function readFromBFCacheDuringRegularNavigation(now, varyPath) { + if (typeof window === 'undefined') { + return null; + } + const isRevalidation = false; + return (0, _cachemap.getFromCacheMap)(now, currentBfCacheVersion, bfcacheMap, varyPath, isRevalidation); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=bfcache.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/segment-cache/cache-key.js b/build/node_modules/next/dist/client/components/segment-cache/cache-key.js new file mode 100644 index 0000000..3d47327 --- /dev/null +++ b/build/node_modules/next/dist/client/components/segment-cache/cache-key.js @@ -0,0 +1,28 @@ +// TypeScript trick to simulate opaque types, like in Flow. +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "createCacheKey", { + enumerable: true, + get: function() { + return createCacheKey; + } +}); +function createCacheKey(originalHref, nextUrl) { + const originalUrl = new URL(originalHref); + const cacheKey = { + pathname: originalUrl.pathname, + search: originalUrl.search, + nextUrl: nextUrl + }; + return cacheKey; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=cache-key.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/segment-cache/cache-map.js b/build/node_modules/next/dist/client/components/segment-cache/cache-map.js new file mode 100644 index 0000000..2ec5b5c --- /dev/null +++ b/build/node_modules/next/dist/client/components/segment-cache/cache-map.js @@ -0,0 +1,305 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + Fallback: null, + createCacheMap: null, + deleteFromCacheMap: null, + deleteMapEntry: null, + getFromCacheMap: null, + isValueExpired: null, + setInCacheMap: null, + setSizeInCacheMap: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + Fallback: function() { + return Fallback; + }, + createCacheMap: function() { + return createCacheMap; + }, + deleteFromCacheMap: function() { + return deleteFromCacheMap; + }, + deleteMapEntry: function() { + return deleteMapEntry; + }, + getFromCacheMap: function() { + return getFromCacheMap; + }, + isValueExpired: function() { + return isValueExpired; + }, + setInCacheMap: function() { + return setInCacheMap; + }, + setSizeInCacheMap: function() { + return setSizeInCacheMap; + } +}); +const _lru = require("./lru"); +const Fallback = {}; +// This is a special internal key that is used for "revalidation" entries. It's +// an implementation detail that shouldn't leak outside of this module. +const Revalidation = {}; +function createCacheMap() { + const cacheMap = { + parent: null, + key: null, + value: null, + map: null, + // LRU-related fields + prev: null, + next: null, + size: 0 + }; + return cacheMap; +} +function getOrInitialize(cacheMap, keys, isRevalidation) { + // Go through each level of keys until we find the entry that matches, or + // create a new entry if one doesn't exist. + // + // This function will only return entries that match the keypath _exactly_. + // Unlike getWithFallback, it will not access fallback entries unless it's + // explicitly part of the keypath. + let entry = cacheMap; + let remainingKeys = keys; + let key = null; + while(true){ + const previousKey = key; + if (remainingKeys !== null) { + key = remainingKeys.value; + remainingKeys = remainingKeys.parent; + } else if (isRevalidation && previousKey !== Revalidation) { + // During a revalidation, we append an internal "Revalidation" key to + // the end of the keypath. The "normal" entry is its parent. + // However, if the parent entry is currently empty, we don't need to store + // this as a revalidation entry. Just insert the revalidation into the + // normal slot. + if (entry.value === null) { + return entry; + } + // Otheriwse, create a child entry. + key = Revalidation; + } else { + break; + } + let map = entry.map; + if (map !== null) { + const existingEntry = map.get(key); + if (existingEntry !== undefined) { + // Found a match. Keep going. + entry = existingEntry; + continue; + } + } else { + map = new Map(); + entry.map = map; + } + // No entry exists yet at this level. Create a new one. + const newEntry = { + parent: entry, + key, + value: null, + map: null, + // LRU-related fields + prev: null, + next: null, + size: 0 + }; + map.set(key, newEntry); + entry = newEntry; + } + return entry; +} +function getFromCacheMap(now, currentCacheVersion, rootEntry, keys, isRevalidation) { + const entry = getEntryWithFallbackImpl(now, currentCacheVersion, rootEntry, keys, isRevalidation, 0); + if (entry === null || entry.value === null) { + return null; + } + // This is an LRU access. Move the entry to the front of the list. + (0, _lru.lruPut)(entry); + return entry.value; +} +function isValueExpired(now, currentCacheVersion, value) { + return value.staleAt <= now || value.version < currentCacheVersion; +} +function lazilyEvictIfNeeded(now, currentCacheVersion, entry) { + // We have a matching entry, but before we can return it, we need to check if + // it's still fresh. Otherwise it should be treated the same as a cache miss. + if (entry.value === null) { + // This entry has no value, so there's nothing to evict. + return entry; + } + const value = entry.value; + if (isValueExpired(now, currentCacheVersion, value)) { + // The value expired. Lazily evict it from the cache, and return null. This + // is conceptually the same as a cache miss. + deleteMapEntry(entry); + return null; + } + // The matched entry has not expired. Return it. + return entry; +} +function getEntryWithFallbackImpl(now, currentCacheVersion, entry, keys, isRevalidation, previousKey) { + // This is similar to getExactEntry, but if an exact match is not found for + // a key, it will return the fallback entry instead. This is recursive at + // every level, e.g. an entry with keypath [a, Fallback, c, Fallback] is + // valid match for [a, b, c, d]. + // + // It will return the most specific match available. + let key; + let remainingKeys; + if (keys !== null) { + key = keys.value; + remainingKeys = keys.parent; + } else if (isRevalidation && previousKey !== Revalidation) { + // During a revalidation, we append an internal "Revalidation" key to + // the end of the keypath. + key = Revalidation; + remainingKeys = null; + } else { + // There are no more keys. This is the terminal entry. + // TODO: When performing a lookup during a navigation, as opposed to a + // prefetch, we may want to skip entries that are Pending if there's also + // a Fulfilled fallback entry. Tricky to say, though, since if it's + // already pending, it's likely to stream in soon. Maybe we could do this + // just on slow connections and offline mode. + return lazilyEvictIfNeeded(now, currentCacheVersion, entry); + } + const map = entry.map; + if (map !== null) { + const existingEntry = map.get(key); + if (existingEntry !== undefined) { + // Found an exact match for this key. Keep searching. + const result = getEntryWithFallbackImpl(now, currentCacheVersion, existingEntry, remainingKeys, isRevalidation, key); + if (result !== null) { + return result; + } + } + // No match found for this key. Check if there's a fallback. + const fallbackEntry = map.get(Fallback); + if (fallbackEntry !== undefined) { + // Found a fallback for this key. Keep searching. + return getEntryWithFallbackImpl(now, currentCacheVersion, fallbackEntry, remainingKeys, isRevalidation, key); + } + } + return null; +} +function setInCacheMap(cacheMap, keys, value, isRevalidation) { + // Add a value to the map at the given keypath. If the value is already + // part of the map, it's removed from its previous keypath. (NOTE: This is + // unlike a regular JS map, but the behavior is intentional.) + const entry = getOrInitialize(cacheMap, keys, isRevalidation); + setMapEntryValue(entry, value); + // This is an LRU access. Move the entry to the front of the list. + (0, _lru.lruPut)(entry); + (0, _lru.updateLruSize)(entry, value.size); +} +function setMapEntryValue(entry, value) { + if (entry.value !== null) { + // There's already a value at the given keypath. Disconnect the old value + // from the map. We're not calling `deleteMapEntry` here because the + // entry itself is still in the map. We just want to overwrite its value. + dropRef(entry.value); + entry.value = null; + } + // This value may already be in the map at a different keypath. + // Grab a reference before we overwrite it. + const oldEntry = value.ref; + entry.value = value; + value.ref = entry; + (0, _lru.updateLruSize)(entry, value.size); + if (oldEntry !== null && oldEntry !== entry && oldEntry.value === value) { + // This value is already in the map at a different keypath in the map. + // Values only exist at a single keypath at a time. Remove it from the + // previous keypath. + // + // Note that only the internal map entry is garbage collected; we don't + // call `dropRef` here because it's still in the map, just + // at a new keypath (the one we just set, above). + deleteMapEntry(oldEntry); + } +} +function deleteFromCacheMap(value) { + const entry = value.ref; + if (entry === null) { + // This value is not a member of any map. + return; + } + dropRef(value); + deleteMapEntry(entry); +} +function dropRef(value) { + // Drop the value from the map by setting its `ref` backpointer to + // null. This is a separate operation from `deleteMapEntry` because when + // re-keying a value we need to be able to delete the old, internal map + // entry without garbage collecting the value itself. + value.ref = null; +} +function deleteMapEntry(entry) { + // Delete the entry from the cache. + entry.value = null; + (0, _lru.deleteFromLru)(entry); + // Check if we can garbage collect the entry. + const map = entry.map; + if (map === null) { + // Since this entry has no value, and also no child entries, we can + // garbage collect it. Remove it from its parent, and keep garbage + // collecting the parents until we reach a non-empty entry. + let parent = entry.parent; + let key = entry.key; + while(parent !== null){ + const parentMap = parent.map; + if (parentMap !== null) { + parentMap.delete(key); + if (parentMap.size === 0) { + // We just removed the last entry in the parent map. + parent.map = null; + if (parent.value === null) { + // The parent node has no child entries, nor does it have a value + // on itself. It can be garbage collected. Keep going. + key = parent.key; + parent = parent.parent; + continue; + } + } + } + break; + } + } else { + // Check if there's a revalidating entry. If so, promote it to a + // "normal" entry, since the normal one was just deleted. + const revalidatingEntry = map.get(Revalidation); + if (revalidatingEntry !== undefined && revalidatingEntry.value !== null) { + setMapEntryValue(entry, revalidatingEntry.value); + } + } +} +function setSizeInCacheMap(value, size) { + const entry = value.ref; + if (entry === null) { + // This value is not a member of any map. + return; + } + // Except during initialization (when the size is set to 0), this is the only + // place the `size` field should be updated, to ensure it's in sync with the + // the LRU. + value.size = size; + (0, _lru.updateLruSize)(entry, size); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=cache-map.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/segment-cache/cache.js b/build/node_modules/next/dist/client/components/segment-cache/cache.js new file mode 100644 index 0000000..3882529 --- /dev/null +++ b/build/node_modules/next/dist/client/components/segment-cache/cache.js @@ -0,0 +1,1933 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + EntryStatus: null, + attemptToFulfillDynamicSegmentFromBFCache: null, + attemptToUpgradeSegmentFromBFCache: null, + canNewFetchStrategyProvideMoreContent: null, + convertReusedFlightRouterStateToRouteTree: null, + convertRootFlightRouterStateToRouteTree: null, + convertRouteTreeToFlightRouterState: null, + createDetachedSegmentCacheEntry: null, + createMetadataRouteTree: null, + deprecated_requestOptimisticRouteCacheEntry: null, + fetchInlinedSegmentsOnCacheMiss: null, + fetchRouteOnCacheMiss: null, + fetchSegmentOnCacheMiss: null, + fetchSegmentPrefetchesUsingDynamicRequest: null, + fulfillRouteCacheEntry: null, + getCurrentRouteCacheVersion: null, + getCurrentSegmentCacheVersion: null, + getStaleAt: null, + getStaleTimeMs: null, + invalidateEntirePrefetchCache: null, + invalidateRouteCacheEntries: null, + invalidateSegmentCacheEntries: null, + markRouteEntryAsDynamicRewrite: null, + overwriteRevalidatingSegmentCacheEntry: null, + pingInvalidationListeners: null, + processRuntimePrefetchStream: null, + readOrCreateRevalidatingSegmentEntry: null, + readOrCreateRouteCacheEntry: null, + readOrCreateSegmentCacheEntry: null, + readRouteCacheEntry: null, + readSegmentCacheEntry: null, + stripIsPartialByte: null, + upgradeToPendingSegment: null, + upsertSegmentEntry: null, + waitForSegmentCacheEntry: null, + writeDynamicRenderResponseIntoCache: null, + writeRouteIntoCache: null, + writeStaticStageResponseIntoCache: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + EntryStatus: function() { + return EntryStatus; + }, + attemptToFulfillDynamicSegmentFromBFCache: function() { + return attemptToFulfillDynamicSegmentFromBFCache; + }, + attemptToUpgradeSegmentFromBFCache: function() { + return attemptToUpgradeSegmentFromBFCache; + }, + canNewFetchStrategyProvideMoreContent: function() { + return canNewFetchStrategyProvideMoreContent; + }, + convertReusedFlightRouterStateToRouteTree: function() { + return convertReusedFlightRouterStateToRouteTree; + }, + convertRootFlightRouterStateToRouteTree: function() { + return convertRootFlightRouterStateToRouteTree; + }, + convertRouteTreeToFlightRouterState: function() { + return convertRouteTreeToFlightRouterState; + }, + createDetachedSegmentCacheEntry: function() { + return createDetachedSegmentCacheEntry; + }, + createMetadataRouteTree: function() { + return createMetadataRouteTree; + }, + deprecated_requestOptimisticRouteCacheEntry: function() { + return deprecated_requestOptimisticRouteCacheEntry; + }, + fetchInlinedSegmentsOnCacheMiss: function() { + return fetchInlinedSegmentsOnCacheMiss; + }, + fetchRouteOnCacheMiss: function() { + return fetchRouteOnCacheMiss; + }, + fetchSegmentOnCacheMiss: function() { + return fetchSegmentOnCacheMiss; + }, + fetchSegmentPrefetchesUsingDynamicRequest: function() { + return fetchSegmentPrefetchesUsingDynamicRequest; + }, + fulfillRouteCacheEntry: function() { + return fulfillRouteCacheEntry; + }, + getCurrentRouteCacheVersion: function() { + return getCurrentRouteCacheVersion; + }, + getCurrentSegmentCacheVersion: function() { + return getCurrentSegmentCacheVersion; + }, + getStaleAt: function() { + return getStaleAt; + }, + getStaleTimeMs: function() { + return getStaleTimeMs; + }, + invalidateEntirePrefetchCache: function() { + return invalidateEntirePrefetchCache; + }, + invalidateRouteCacheEntries: function() { + return invalidateRouteCacheEntries; + }, + invalidateSegmentCacheEntries: function() { + return invalidateSegmentCacheEntries; + }, + markRouteEntryAsDynamicRewrite: function() { + return markRouteEntryAsDynamicRewrite; + }, + overwriteRevalidatingSegmentCacheEntry: function() { + return overwriteRevalidatingSegmentCacheEntry; + }, + pingInvalidationListeners: function() { + return pingInvalidationListeners; + }, + processRuntimePrefetchStream: function() { + return processRuntimePrefetchStream; + }, + readOrCreateRevalidatingSegmentEntry: function() { + return readOrCreateRevalidatingSegmentEntry; + }, + readOrCreateRouteCacheEntry: function() { + return readOrCreateRouteCacheEntry; + }, + readOrCreateSegmentCacheEntry: function() { + return readOrCreateSegmentCacheEntry; + }, + readRouteCacheEntry: function() { + return readRouteCacheEntry; + }, + readSegmentCacheEntry: function() { + return readSegmentCacheEntry; + }, + stripIsPartialByte: function() { + return stripIsPartialByte; + }, + upgradeToPendingSegment: function() { + return upgradeToPendingSegment; + }, + upsertSegmentEntry: function() { + return upsertSegmentEntry; + }, + waitForSegmentCacheEntry: function() { + return waitForSegmentCacheEntry; + }, + writeDynamicRenderResponseIntoCache: function() { + return writeDynamicRenderResponseIntoCache; + }, + writeRouteIntoCache: function() { + return writeRouteIntoCache; + }, + writeStaticStageResponseIntoCache: function() { + return writeStaticStageResponseIntoCache; + } +}); +const _varyparamsdecoding = require("../../../shared/lib/segment-cache/vary-params-decoding"); +const _approuterheaders = require("../app-router-headers"); +const _fetchserverresponse = require("../router-reducer/fetch-server-response"); +const _scheduler = require("./scheduler"); +const _varypath = require("./vary-path"); +const _createhreffromurl = require("../router-reducer/create-href-from-url"); +const _cachekey = require("./cache-key"); +const _routeparams = require("../../route-params"); +const _cachemap = require("./cache-map"); +const _segmentvalueencoding = require("../../../shared/lib/segment-cache/segment-value-encoding"); +const _flightdatahelpers = require("../../flight-data-helpers"); +const _navigatereducer = require("../router-reducer/reducers/navigate-reducer"); +const _links = require("../links"); +const _segment = require("../../../shared/lib/segment"); +const _types = require("./types"); +const _promisewithresolvers = require("../../../shared/lib/promise-with-resolvers"); +const _bfcache = require("./bfcache"); +const _optimisticroutes = require("./optimistic-routes"); +const _navigation = require("./navigation"); +const _navigationbuildid = require("../../navigation-build-id"); +const _constants = require("../../../lib/constants"); +function getStaleTimeMs(staleTimeSeconds) { + return Math.max(staleTimeSeconds, 30) * 1000; +} +var EntryStatus = /*#__PURE__*/ function(EntryStatus) { + EntryStatus[EntryStatus["Empty"] = 0] = "Empty"; + EntryStatus[EntryStatus["Pending"] = 1] = "Pending"; + EntryStatus[EntryStatus["Fulfilled"] = 2] = "Fulfilled"; + EntryStatus[EntryStatus["Rejected"] = 3] = "Rejected"; + return EntryStatus; +}({}); +const isOutputExportMode = process.env.NODE_ENV === 'production' && process.env.__NEXT_CONFIG_OUTPUT === 'export'; +const MetadataOnlyRequestTree = [ + '', + {}, + null, + 'metadata-only' +]; +let routeCacheMap = (0, _cachemap.createCacheMap)(); +let segmentCacheMap = (0, _cachemap.createCacheMap)(); +// All invalidation listeners for the whole cache are tracked in single set. +// Since we don't yet support tag or path-based invalidation, there's no point +// tracking them any more granularly than this. Once we add granular +// invalidation, that may change, though generally the model is to just notify +// the listeners and allow the caller to poll the prefetch cache with a new +// prefetch task if desired. +let invalidationListeners = null; +// Incrementing counters used to track cache invalidations. Route and segment +// caches have separate versions so they can be invalidated independently. +// Invalidation does not eagerly evict anything from the cache; entries are +// lazily evicted when read. +let currentRouteCacheVersion = 0; +let currentSegmentCacheVersion = 0; +function getCurrentRouteCacheVersion() { + return currentRouteCacheVersion; +} +function getCurrentSegmentCacheVersion() { + return currentSegmentCacheVersion; +} +function invalidateEntirePrefetchCache(nextUrl, tree) { + currentRouteCacheVersion++; + currentSegmentCacheVersion++; + (0, _links.pingVisibleLinks)(nextUrl, tree); + pingInvalidationListeners(nextUrl, tree); +} +function invalidateRouteCacheEntries(nextUrl, tree) { + currentRouteCacheVersion++; + (0, _links.pingVisibleLinks)(nextUrl, tree); + pingInvalidationListeners(nextUrl, tree); +} +function invalidateSegmentCacheEntries(nextUrl, tree) { + currentSegmentCacheVersion++; + (0, _links.pingVisibleLinks)(nextUrl, tree); + pingInvalidationListeners(nextUrl, tree); +} +function attachInvalidationListener(task) { + // This function is called whenever a prefetch task reads a cache entry. If + // the task has an onInvalidate function associated with it — i.e. the one + // optionally passed to router.prefetch(onInvalidate) — then we attach that + // listener to the every cache entry that the task reads. Then, if an entry + // is invalidated, we call the function. + if (task.onInvalidate !== null) { + if (invalidationListeners === null) { + invalidationListeners = new Set([ + task + ]); + } else { + invalidationListeners.add(task); + } + } +} +function notifyInvalidationListener(task) { + const onInvalidate = task.onInvalidate; + if (onInvalidate !== null) { + // Clear the callback from the task object to guarantee it's not called more + // than once. + task.onInvalidate = null; + // This is a user-space function, so we must wrap in try/catch. + try { + onInvalidate(); + } catch (error) { + if (typeof reportError === 'function') { + reportError(error); + } else { + console.error(error); + } + } + } +} +function pingInvalidationListeners(nextUrl, tree) { + // The rough equivalent of pingVisibleLinks, but for onInvalidate callbacks. + // This is called when the Next-Url or the base tree changes, since those + // may affect the result of a prefetch task. It's also called after a + // cache invalidation. + if (invalidationListeners !== null) { + const tasks = invalidationListeners; + invalidationListeners = null; + for (const task of tasks){ + if ((0, _scheduler.isPrefetchTaskDirty)(task, nextUrl, tree)) { + notifyInvalidationListener(task); + } + } + } +} +function readRouteCacheEntry(now, key) { + const varyPath = (0, _varypath.getRouteVaryPath)(key.pathname, key.search, key.nextUrl); + const isRevalidation = false; + const existingEntry = (0, _cachemap.getFromCacheMap)(now, getCurrentRouteCacheVersion(), routeCacheMap, varyPath, isRevalidation); + if (existingEntry !== null) { + return existingEntry; + } + // No cache hit. Attempt to construct from template using the new + // optimistic routing mechanism (pattern-based matching). + if (process.env.__NEXT_OPTIMISTIC_ROUTING) { + return (0, _optimisticroutes.matchKnownRoute)(key.pathname, key.search); + } + return null; +} +function readSegmentCacheEntry(now, varyPath) { + const isRevalidation = false; + return (0, _cachemap.getFromCacheMap)(now, getCurrentSegmentCacheVersion(), segmentCacheMap, varyPath, isRevalidation); +} +function readRevalidatingSegmentCacheEntry(now, varyPath) { + const isRevalidation = true; + return (0, _cachemap.getFromCacheMap)(now, getCurrentSegmentCacheVersion(), segmentCacheMap, varyPath, isRevalidation); +} +function waitForSegmentCacheEntry(pendingEntry) { + // Because the entry is pending, there's already a in-progress request. + // Attach a promise to the entry that will resolve when the server responds. + let promiseWithResolvers = pendingEntry.promise; + if (promiseWithResolvers === null) { + promiseWithResolvers = pendingEntry.promise = (0, _promisewithresolvers.createPromiseWithResolvers)(); + } else { + // There's already a promise we can use + } + return promiseWithResolvers.promise; +} +function createDetachedRouteCacheEntry() { + return { + canonicalUrl: null, + status: 0, + blockedTasks: null, + tree: null, + metadata: null, + // This is initialized to true because we don't know yet whether the route + // could be intercepted. It's only set to false once we receive a response + // from the server. + couldBeIntercepted: true, + // Similarly, we don't yet know if the route supports PPR. + supportsPerSegmentPrefetching: false, + renderedSearch: null, + // Map-related fields + ref: null, + size: 0, + // Since this is an empty entry, there's no reason to ever evict it. It will + // be updated when the data is populated. + staleAt: Infinity, + version: getCurrentRouteCacheVersion() + }; +} +function readOrCreateRouteCacheEntry(now, task, key) { + attachInvalidationListener(task); + const existingEntry = readRouteCacheEntry(now, key); + if (existingEntry !== null) { + return existingEntry; + } + // Create a pending entry and add it to the cache. + const pendingEntry = createDetachedRouteCacheEntry(); + const varyPath = (0, _varypath.getRouteVaryPath)(key.pathname, key.search, key.nextUrl); + const isRevalidation = false; + (0, _cachemap.setInCacheMap)(routeCacheMap, varyPath, pendingEntry, isRevalidation); + return pendingEntry; +} +function deprecated_requestOptimisticRouteCacheEntry(now, requestedUrl, nextUrl) { + // This function is called during a navigation when there was no matching + // route tree in the prefetch cache. Before de-opting to a blocking, + // unprefetched navigation, we will first attempt to construct an "optimistic" + // route tree by checking the cache for similar routes. + // + // Check if there's a route with the same pathname, but with different + // search params. We can then base our optimistic route tree on this entry. + // + // Conceptually, we are simulating what would happen if we did perform a + // prefetch the requested URL, under the assumption that the server will + // not redirect or rewrite the request in a different manner than the + // base route tree. This assumption might not hold, in which case we'll have + // to recover when we perform the dynamic navigation request. However, this + // is what would happen if a route were dynamically rewritten/redirected + // in between the prefetch and the navigation. So the logic needs to exist + // to handle this case regardless. + // Look for a route with the same pathname, but with an empty search string. + // TODO: There's nothing inherently special about the empty search string; + // it's chosen somewhat arbitrarily, with the rationale that it's the most + // likely one to exist. But we should update this to match _any_ search + // string. The plan is to generalize this logic alongside other improvements + // related to "fallback" cache entries. + const requestedSearch = requestedUrl.search; + if (requestedSearch === '') { + // The caller would have already checked if a route with an empty search + // string is in the cache. So we can bail out here. + return null; + } + const urlWithoutSearchParams = new URL(requestedUrl); + urlWithoutSearchParams.search = ''; + const routeWithNoSearchParams = readRouteCacheEntry(now, (0, _cachekey.createCacheKey)(urlWithoutSearchParams.href, nextUrl)); + if (routeWithNoSearchParams === null || routeWithNoSearchParams.status !== 2) { + // Bail out of constructing an optimistic route tree. This will result in + // a blocking, unprefetched navigation. + return null; + } + // Now we have a base route tree we can "patch" with our optimistic values. + // Optimistically assume that redirects for the requested pathname do + // not vary on the search string. Therefore, if the base route was + // redirected to a different search string, then the optimistic route + // should be redirected to the same search string. Otherwise, we use + // the requested search string. + const canonicalUrlForRouteWithNoSearchParams = new URL(routeWithNoSearchParams.canonicalUrl, requestedUrl.origin); + const optimisticCanonicalSearch = canonicalUrlForRouteWithNoSearchParams.search !== '' ? canonicalUrlForRouteWithNoSearchParams.search : requestedSearch; + // Similarly, optimistically assume that rewrites for the requested + // pathname do not vary on the search string. Therefore, if the base + // route was rewritten to a different search string, then the optimistic + // route should be rewritten to the same search string. Otherwise, we use + // the requested search string. + const optimisticRenderedSearch = routeWithNoSearchParams.renderedSearch !== '' ? routeWithNoSearchParams.renderedSearch : requestedSearch; + const optimisticUrl = new URL(routeWithNoSearchParams.canonicalUrl, location.origin); + optimisticUrl.search = optimisticCanonicalSearch; + const optimisticCanonicalUrl = (0, _createhreffromurl.createHrefFromUrl)(optimisticUrl); + const optimisticRouteTree = deprecated_createOptimisticRouteTree(routeWithNoSearchParams.tree, optimisticRenderedSearch); + const optimisticMetadataTree = deprecated_createOptimisticRouteTree(routeWithNoSearchParams.metadata, optimisticRenderedSearch); + // Clone the base route tree, and override the relevant fields with our + // optimistic values. + const optimisticEntry = { + canonicalUrl: optimisticCanonicalUrl, + status: 2, + // This isn't cloned because it's instance-specific + blockedTasks: null, + tree: optimisticRouteTree, + metadata: optimisticMetadataTree, + couldBeIntercepted: routeWithNoSearchParams.couldBeIntercepted, + supportsPerSegmentPrefetching: routeWithNoSearchParams.supportsPerSegmentPrefetching, + hasDynamicRewrite: routeWithNoSearchParams.hasDynamicRewrite, + // Override the rendered search with the optimistic value. + renderedSearch: optimisticRenderedSearch, + // Map-related fields + ref: null, + size: 0, + staleAt: routeWithNoSearchParams.staleAt, + version: routeWithNoSearchParams.version + }; + // Do not insert this entry into the cache. It only exists so we can + // perform the current navigation. Just return it to the caller. + return optimisticEntry; +} +function deprecated_createOptimisticRouteTree(tree, newRenderedSearch) { + // Create a new route tree that identical to the original one except for + // the rendered search string, which is contained in the vary path. + let clonedSlots = null; + const originalSlots = tree.slots; + if (originalSlots !== null) { + clonedSlots = {}; + for(const parallelRouteKey in originalSlots){ + const childTree = originalSlots[parallelRouteKey]; + clonedSlots[parallelRouteKey] = deprecated_createOptimisticRouteTree(childTree, newRenderedSearch); + } + } + // We only need to clone the vary path if the route is a page. + if (tree.isPage) { + return { + requestKey: tree.requestKey, + segment: tree.segment, + refreshState: tree.refreshState, + varyPath: (0, _varypath.clonePageVaryPathWithNewSearchParams)(tree.varyPath, newRenderedSearch), + isPage: true, + slots: clonedSlots, + prefetchHints: tree.prefetchHints + }; + } + return { + requestKey: tree.requestKey, + segment: tree.segment, + refreshState: tree.refreshState, + varyPath: tree.varyPath, + isPage: false, + slots: clonedSlots, + prefetchHints: tree.prefetchHints + }; +} +function readOrCreateSegmentCacheEntry(now, fetchStrategy, tree) { + const existingEntry = readSegmentCacheEntry(now, tree.varyPath); + if (existingEntry !== null) { + return existingEntry; + } + // Create a pending entry and add it to the cache. The stale time is set to a + // default value; the actual stale time will be set when the entry is + // fulfilled with data from the server response. + const varyPathForRequest = (0, _varypath.getSegmentVaryPathForRequest)(fetchStrategy, tree); + const pendingEntry = createDetachedSegmentCacheEntry(now); + const isRevalidation = false; + (0, _cachemap.setInCacheMap)(segmentCacheMap, varyPathForRequest, pendingEntry, isRevalidation); + return pendingEntry; +} +function readOrCreateRevalidatingSegmentEntry(now, fetchStrategy, tree) { + // This function is called when we've already confirmed that a particular + // segment is cached, but we want to perform another request anyway in case it + // returns more complete and/or fresher data than we already have. The logic + // for deciding whether to replace the existing entry is handled elsewhere; + // this function just handles retrieving a cache entry that we can use to + // track the revalidation. + // + // The reason revalidations are stored in the cache is because we need to be + // able to dedupe multiple revalidation requests. The reason they have to be + // handled specially is because we shouldn't overwrite a "normal" entry if + // one exists at the same keypath. So, for each internal cache location, there + // is a special "revalidation" slot that is used solely for this purpose. + // + // You can think of it as if all the revalidation entries were stored in a + // separate cache map from the canonical entries, and then transfered to the + // canonical cache map once the request is complete — this isn't how it's + // actually implemented, since it's more efficient to store them in the same + // data structure as the normal entries, but that's how it's modeled + // conceptually. + // TODO: Once we implement Fallback behavior for params, where an entry is + // re-keyed based on response information, we'll need to account for the + // possibility that the keypath of the previous entry is more generic than + // the keypath of the revalidating entry. In other words, the server could + // return a less generic entry upon revalidation. For now, though, this isn't + // a concern because the keypath is based solely on the prefetch strategy, + // not on data contained in the response. + const existingEntry = readRevalidatingSegmentCacheEntry(now, tree.varyPath); + if (existingEntry !== null) { + return existingEntry; + } + // Create a pending entry and add it to the cache. The stale time is set to a + // default value; the actual stale time will be set when the entry is + // fulfilled with data from the server response. + const varyPathForRequest = (0, _varypath.getSegmentVaryPathForRequest)(fetchStrategy, tree); + const pendingEntry = createDetachedSegmentCacheEntry(now); + const isRevalidation = true; + (0, _cachemap.setInCacheMap)(segmentCacheMap, varyPathForRequest, pendingEntry, isRevalidation); + return pendingEntry; +} +function overwriteRevalidatingSegmentCacheEntry(now, fetchStrategy, tree) { + // This function is called when we've already decided to replace an existing + // revalidation entry. Create a new entry and write it into the cache, + // overwriting the previous value. The stale time is set to a default value; + // the actual stale time will be set when the entry is fulfilled with data + // from the server response. + const varyPathForRequest = (0, _varypath.getSegmentVaryPathForRequest)(fetchStrategy, tree); + const pendingEntry = createDetachedSegmentCacheEntry(now); + const isRevalidation = true; + (0, _cachemap.setInCacheMap)(segmentCacheMap, varyPathForRequest, pendingEntry, isRevalidation); + return pendingEntry; +} +function upsertSegmentEntry(now, varyPath, candidateEntry) { + // We have a new entry that has not yet been inserted into the cache. Before + // we do so, we need to confirm whether it takes precedence over the existing + // entry (if one exists). + // TODO: We should not upsert an entry if its key was invalidated in the time + // since the request was made. We can do that by passing the "owner" entry to + // this function and confirming it's the same as `existingEntry`. + if ((0, _cachemap.isValueExpired)(now, getCurrentSegmentCacheVersion(), candidateEntry)) { + // The entry is expired. We cannot upsert it. + return null; + } + const existingEntry = readSegmentCacheEntry(now, varyPath); + if (existingEntry !== null) { + // Don't replace a more specific segment with a less-specific one. A case where this + // might happen is if the existing segment was fetched via + // ``. + if (// We fetched the new segment using a different, less specific fetch strategy + // than the segment we already have in the cache, so it can't have more content. + candidateEntry.fetchStrategy !== existingEntry.fetchStrategy && !canNewFetchStrategyProvideMoreContent(existingEntry.fetchStrategy, candidateEntry.fetchStrategy) || // The existing entry isn't partial, but the new one is. + // (TODO: can this be true if `candidateEntry.fetchStrategy >= existingEntry.fetchStrategy`?) + !existingEntry.isPartial && candidateEntry.isPartial) { + // We're going to leave revalidating entry in the cache so that it doesn't + // get revalidated again unnecessarily. Downgrade the Fulfilled entry to + // Rejected and null out the data so it can be garbage collected. We leave + // `staleAt` intact to prevent subsequent revalidation attempts only until + // the entry expires. + const rejectedEntry = candidateEntry; + rejectedEntry.status = 3; + rejectedEntry.rsc = null; + return null; + } + // Evict the existing entry from the cache. + (0, _cachemap.deleteFromCacheMap)(existingEntry); + } + const isRevalidation = false; + (0, _cachemap.setInCacheMap)(segmentCacheMap, varyPath, candidateEntry, isRevalidation); + return candidateEntry; +} +function createDetachedSegmentCacheEntry(now) { + // Default stale time for pending segment cache entries. The actual stale time + // is set when the entry is fulfilled with data from the server response. + const staleAt = now + 30 * 1000; + const emptyEntry = { + status: 0, + // Default to assuming the fetch strategy will be PPR. This will be updated + // when a fetch is actually initiated. + fetchStrategy: _types.FetchStrategy.PPR, + rsc: null, + isPartial: true, + promise: null, + // Map-related fields + ref: null, + size: 0, + staleAt, + version: 0 + }; + return emptyEntry; +} +function upgradeToPendingSegment(emptyEntry, fetchStrategy) { + const pendingEntry = emptyEntry; + pendingEntry.status = 1; + pendingEntry.fetchStrategy = fetchStrategy; + if (fetchStrategy === _types.FetchStrategy.Full) { + // We can assume the response will contain the full segment data. Set this + // to false so we know it's OK to omit this segment from any navigation + // requests that may happen while the data is still pending. + pendingEntry.isPartial = false; + } + // Set the version here, since this is right before the request is initiated. + // The next time the segment cache version is incremented, the entry will + // effectively be evicted. This happens before initiating the request, rather + // than when receiving the response, because it's guaranteed to happen + // before the data is read on the server. + pendingEntry.version = getCurrentSegmentCacheVersion(); + return pendingEntry; +} +function attemptToFulfillDynamicSegmentFromBFCache(now, segment, tree) { + // Attempts to fulfill an empty segment cache entry using data from the + // bfcache. This is only valid during a Full prefetch (i.e. one that includes + // dynamic data), because the bfcache stores data from navigations which + // always include dynamic data. + // We always use the canonical vary path when checking the bfcache. This is + // the same operation we'd use to access the cache during a + // regular navigation. + const varyPath = tree.varyPath; + // Read from the BFCache without expiring it (pass -1). We check freshness + // ourselves using navigatedAt, because the BFCache's staleAt may have been + // overridden by a per-page unstable_dynamicStaleTime and can't be used to + // derive the original request time. + const bfcacheEntry = (0, _bfcache.readFromBFCache)(varyPath); + if (bfcacheEntry !== null) { + // The stale time for dynamic prefetches (default: 5 mins) is different + // from the stale time for regular navigations (default: 0 secs). Use + // navigatedAt to compute the correct expiry for prefetch purposes. + const dynamicPrefetchStaleAt = bfcacheEntry.navigatedAt + _navigatereducer.STATIC_STALETIME_MS; + if (now > dynamicPrefetchStaleAt) { + return null; + } + const pendingSegment = upgradeToPendingSegment(segment, _types.FetchStrategy.Full); + const isPartial = false; + return fulfillSegmentCacheEntry(pendingSegment, bfcacheEntry.rsc, dynamicPrefetchStaleAt, isPartial); + } + return null; +} +function attemptToUpgradeSegmentFromBFCache(now, tree) { + const varyPath = tree.varyPath; + const bfcacheEntry = (0, _bfcache.readFromBFCache)(varyPath); + if (bfcacheEntry !== null) { + const dynamicPrefetchStaleAt = bfcacheEntry.navigatedAt + _navigatereducer.STATIC_STALETIME_MS; + if (now > dynamicPrefetchStaleAt) { + return null; + } + const pendingSegment = upgradeToPendingSegment(createDetachedSegmentCacheEntry(now), _types.FetchStrategy.Full); + const isPartial = false; + const newEntry = fulfillSegmentCacheEntry(pendingSegment, bfcacheEntry.rsc, dynamicPrefetchStaleAt, isPartial); + const segmentVaryPath = (0, _varypath.getSegmentVaryPathForRequest)(_types.FetchStrategy.Full, tree); + const upserted = upsertSegmentEntry(now, segmentVaryPath, newEntry); + if (upserted !== null && upserted.status === 2) { + return upserted; + } + } + return null; +} +function pingBlockedTasks(entry) { + const blockedTasks = entry.blockedTasks; + if (blockedTasks !== null) { + for (const task of blockedTasks){ + (0, _scheduler.pingPrefetchTask)(task); + } + entry.blockedTasks = null; + } +} +function createMetadataRouteTree(metadataVaryPath) { + // The Head is not actually part of the route tree, but other than that, it's + // fetched and cached like a segment. Some functions expect a RouteTree + // object, so rather than fork the logic in all those places, we use this + // "fake" one. + const metadata = { + requestKey: _segmentvalueencoding.HEAD_REQUEST_KEY, + segment: _segmentvalueencoding.HEAD_REQUEST_KEY, + refreshState: null, + varyPath: metadataVaryPath, + // The metadata isn't really a "page" (though it isn't really a "segment" + // either) but for the purposes of how this field is used, it behaves like + // one. If this logic ever gets more complex we can change this to an enum. + isPage: true, + slots: null, + prefetchHints: 0 + }; + return metadata; +} +function fulfillRouteCacheEntry(now, entry, tree, metadataVaryPath, couldBeIntercepted, canonicalUrl, supportsPerSegmentPrefetching) { + // Get the rendered search from the vary path + const renderedSearch = (0, _varypath.getRenderedSearchFromVaryPath)(metadataVaryPath) ?? ''; + const fulfilledEntry = entry; + fulfilledEntry.status = 2; + fulfilledEntry.tree = tree; + fulfilledEntry.metadata = createMetadataRouteTree(metadataVaryPath); + // Route structure is essentially static — it only changes on deploy. + // Always use the static stale time. + // NOTE: An exception is rewrites/redirects in middleware or proxy, which can + // change routes dynamically. We have other strategies for handling those. + fulfilledEntry.staleAt = now + _navigatereducer.STATIC_STALETIME_MS; + fulfilledEntry.couldBeIntercepted = couldBeIntercepted; + fulfilledEntry.canonicalUrl = canonicalUrl; + fulfilledEntry.renderedSearch = renderedSearch; + fulfilledEntry.supportsPerSegmentPrefetching = supportsPerSegmentPrefetching; + fulfilledEntry.hasDynamicRewrite = false; + pingBlockedTasks(entry); + return fulfilledEntry; +} +function writeRouteIntoCache(now, pathname, nextUrl, tree, metadataVaryPath, couldBeIntercepted, canonicalUrl, supportsPerSegmentPrefetching) { + const pendingEntry = createDetachedRouteCacheEntry(); + const fulfilledEntry = fulfillRouteCacheEntry(now, pendingEntry, tree, metadataVaryPath, couldBeIntercepted, canonicalUrl, supportsPerSegmentPrefetching); + const renderedSearch = fulfilledEntry.renderedSearch; + const varyPath = (0, _varypath.getFulfilledRouteVaryPath)(pathname, renderedSearch, nextUrl, couldBeIntercepted); + const isRevalidation = false; + (0, _cachemap.setInCacheMap)(routeCacheMap, varyPath, fulfilledEntry, isRevalidation); + return fulfilledEntry; +} +function markRouteEntryAsDynamicRewrite(entry) { + entry.hasDynamicRewrite = true; +// Note: The caller is responsible for also calling invalidateRouteCacheEntries +// to invalidate other entries that may have been derived from this template +// before we knew it had a dynamic rewrite. +} +function fulfillSegmentCacheEntry(segmentCacheEntry, rsc, staleAt, isPartial) { + const fulfilledEntry = segmentCacheEntry; + fulfilledEntry.status = 2; + fulfilledEntry.rsc = rsc; + fulfilledEntry.staleAt = staleAt; + fulfilledEntry.isPartial = isPartial; + // Resolve any listeners that were waiting for this data. + if (segmentCacheEntry.promise !== null) { + segmentCacheEntry.promise.resolve(fulfilledEntry); + // Free the promise for garbage collection. + fulfilledEntry.promise = null; + } + return fulfilledEntry; +} +function rejectRouteCacheEntry(entry, staleAt) { + const rejectedEntry = entry; + rejectedEntry.status = 3; + rejectedEntry.staleAt = staleAt; + pingBlockedTasks(entry); +} +function rejectSegmentCacheEntry(entry, staleAt) { + const rejectedEntry = entry; + rejectedEntry.status = 3; + rejectedEntry.staleAt = staleAt; + if (entry.promise !== null) { + // NOTE: We don't currently propagate the reason the prefetch was canceled + // but we could by accepting a `reason` argument. + entry.promise.resolve(null); + entry.promise = null; + } +} +function convertRootTreePrefetchToRouteTree(rootTree, renderedPathname, renderedSearch, acc) { + // Remove trailing and leading slashes + const pathnameParts = renderedPathname.split('/').filter((p)=>p !== ''); + const index = 0; + const rootSegment = _segmentvalueencoding.ROOT_SEGMENT_REQUEST_KEY; + return convertTreePrefetchToRouteTree(rootTree.tree, rootSegment, null, _segmentvalueencoding.ROOT_SEGMENT_REQUEST_KEY, pathnameParts, index, renderedSearch, acc); +} +function convertTreePrefetchToRouteTree(prefetch, segment, partialVaryPath, requestKey, pathnameParts, pathnamePartsIndex, renderedSearch, acc) { + // Converts the route tree sent by the server into the format used by the + // cache. The cached version of the tree includes additional fields, such as a + // cache key for each segment. Since this is frequently accessed, we compute + // it once instead of on every access. This same cache key is also used to + // request the segment from the server. + let slots = null; + let isPage; + let varyPath; + const prefetchSlots = prefetch.slots; + if (prefetchSlots !== null) { + isPage = false; + varyPath = (0, _varypath.finalizeLayoutVaryPath)(requestKey, partialVaryPath); + slots = {}; + for(let parallelRouteKey in prefetchSlots){ + const childPrefetch = prefetchSlots[parallelRouteKey]; + const childSegmentName = childPrefetch.name; + const childParam = childPrefetch.param; + let childDoesAppearInURL; + let childSegment; + let childPartialVaryPath; + if (childParam !== null) { + // This segment is parameterized. Get the param from the pathname. + const childParamValue = (0, _routeparams.parseDynamicParamFromURLPart)(childParam.type, pathnameParts, pathnamePartsIndex); + // Assign a cache key to the segment, based on the param value. In the + // pre-Segment Cache implementation, the server computes this and sends + // it in the body of the response. In the Segment Cache implementation, + // the server sends an empty string and we fill it in here. + // TODO: We're intentionally not adding the search param to page + // segments here; it's tracked separately and added back during a read. + // This would clearer if we waited to construct the segment until it's + // read from the cache, since that's effectively what we're + // doing anyway. + const childParamKey = // The server omits this field from the prefetch response when + // cacheComponents is enabled. + childParam.key !== null ? childParam.key : (0, _routeparams.getCacheKeyForDynamicParam)(childParamValue, ''); + childPartialVaryPath = (0, _varypath.appendLayoutVaryPath)(partialVaryPath, childParamKey, childSegmentName); + childSegment = [ + childSegmentName, + childParamKey, + childParam.type, + childParam.siblings + ]; + childDoesAppearInURL = true; + } else { + // This segment does not have a param. Inherit the partial vary path of + // the parent. + childPartialVaryPath = partialVaryPath; + childSegment = childSegmentName; + childDoesAppearInURL = (0, _routeparams.doesStaticSegmentAppearInURL)(childSegmentName); + } + // Only increment the index if the segment appears in the URL. If it's a + // "virtual" segment, like a route group, it remains the same. + const childPathnamePartsIndex = childDoesAppearInURL ? pathnamePartsIndex + 1 : pathnamePartsIndex; + const childRequestKeyPart = (0, _segmentvalueencoding.createSegmentRequestKeyPart)(childSegment); + const childRequestKey = (0, _segmentvalueencoding.appendSegmentRequestKeyPart)(requestKey, parallelRouteKey, childRequestKeyPart); + slots[parallelRouteKey] = convertTreePrefetchToRouteTree(childPrefetch, childSegment, childPartialVaryPath, childRequestKey, pathnameParts, childPathnamePartsIndex, renderedSearch, acc); + } + } else { + if (requestKey.endsWith(_segment.PAGE_SEGMENT_KEY)) { + // This is a page segment. + isPage = true; + varyPath = (0, _varypath.finalizePageVaryPath)(requestKey, renderedSearch, partialVaryPath); + // The metadata "segment" is not part the route tree, but it has the same + // conceptual params as a page segment. Write the vary path into the + // accumulator object. If there are multiple parallel pages, we use the + // first one. Which page we choose is arbitrary as long as it's + // consistently the same one every time every time. See + // finalizeMetadataVaryPath for more details. + if (acc.metadataVaryPath === null) { + acc.metadataVaryPath = (0, _varypath.finalizeMetadataVaryPath)(requestKey, renderedSearch, partialVaryPath); + } + } else { + // This is a layout segment. + isPage = false; + varyPath = (0, _varypath.finalizeLayoutVaryPath)(requestKey, partialVaryPath); + } + } + return { + requestKey, + segment, + refreshState: null, + // TODO: Cheating the type system here a bit because TypeScript can't tell + // that the type of isPage and varyPath are consistent. The fix would be to + // create separate constructors and call the appropriate one from each of + // the branches above. Just seems a bit overkill only for one field so I'll + // leave it as-is for now. If isPage were wrong it would break the behavior + // and we'd catch it quickly, anyway. + varyPath: varyPath, + isPage: isPage, + slots, + prefetchHints: prefetch.prefetchHints + }; +} +function convertRootFlightRouterStateToRouteTree(flightRouterState, renderedSearch, acc) { + return convertFlightRouterStateToRouteTree(flightRouterState, _segmentvalueencoding.ROOT_SEGMENT_REQUEST_KEY, null, renderedSearch, acc); +} +function convertReusedFlightRouterStateToRouteTree(parentRouteTree, parallelRouteKey, flightRouterState, renderedSearch, acc) { + // Create a RouteTree for a FlightRouterState that was reused from an older + // route. This happens during a navigation when a parallel route slot does not + // match the target route; we reuse whatever slot was already active. + // Unlike a FlightRouterState, the RouteTree type contains backreferences to + // the parent segments. Append the vary path to the parent's vary path. + const parentPartialVaryPath = parentRouteTree.isPage ? (0, _varypath.getPartialPageVaryPath)(parentRouteTree.varyPath) : (0, _varypath.getPartialLayoutVaryPath)(parentRouteTree.varyPath); + const segment = flightRouterState[0]; + // And the request key. + const parentRequestKey = parentRouteTree.requestKey; + const requestKeyPart = (0, _segmentvalueencoding.createSegmentRequestKeyPart)(segment); + const requestKey = (0, _segmentvalueencoding.appendSegmentRequestKeyPart)(parentRequestKey, parallelRouteKey, requestKeyPart); + return convertFlightRouterStateToRouteTree(flightRouterState, requestKey, parentPartialVaryPath, renderedSearch, acc); +} +function convertFlightRouterStateToRouteTree(flightRouterState, requestKey, parentPartialVaryPath, parentRenderedSearch, acc) { + const originalSegment = flightRouterState[0]; + // If the FlightRouterState has a refresh state, then this segment is part of + // an inactive parallel route. It has a different rendered search query than + // the outer parent route. In order to construct the inactive route correctly, + // we must restore the query that was originally used to render it. + const compressedRefreshState = flightRouterState[2] ?? null; + const refreshState = compressedRefreshState !== null ? { + canonicalUrl: compressedRefreshState[0], + renderedSearch: compressedRefreshState[1] + } : null; + const renderedSearch = refreshState !== null ? refreshState.renderedSearch : parentRenderedSearch; + let segment; + let partialVaryPath; + let isPage; + let varyPath; + if (Array.isArray(originalSegment)) { + isPage = false; + const paramCacheKey = originalSegment[1]; + const paramName = originalSegment[0]; + partialVaryPath = (0, _varypath.appendLayoutVaryPath)(parentPartialVaryPath, paramCacheKey, paramName); + varyPath = (0, _varypath.finalizeLayoutVaryPath)(requestKey, partialVaryPath); + segment = originalSegment; + } else { + // This segment does not have a param. Inherit the partial vary path of + // the parent. + partialVaryPath = parentPartialVaryPath; + if (requestKey.endsWith(_segment.PAGE_SEGMENT_KEY)) { + // This is a page segment. + isPage = true; + // The navigation implementation expects the search params to be included + // in the segment. However, in the case of a static response, the search + // params are omitted. So the client needs to add them back in when reading + // from the Segment Cache. + // + // For consistency, we'll do this for dynamic responses, too. + // + // TODO: We should move search params out of FlightRouterState and handle + // them entirely on the client, similar to our plan for dynamic params. + segment = _segment.PAGE_SEGMENT_KEY; + varyPath = (0, _varypath.finalizePageVaryPath)(requestKey, renderedSearch, partialVaryPath); + // The metadata "segment" is not part the route tree, but it has the same + // conceptual params as a page segment. Write the vary path into the + // accumulator object. If there are multiple parallel pages, we use the + // first one. Which page we choose is arbitrary as long as it's + // consistently the same one every time every time. See + // finalizeMetadataVaryPath for more details. + if (acc.metadataVaryPath === null) { + acc.metadataVaryPath = (0, _varypath.finalizeMetadataVaryPath)(requestKey, renderedSearch, partialVaryPath); + } + } else { + // This is a layout segment. + isPage = false; + segment = originalSegment; + varyPath = (0, _varypath.finalizeLayoutVaryPath)(requestKey, partialVaryPath); + } + } + let slots = null; + const parallelRoutes = flightRouterState[1]; + for(let parallelRouteKey in parallelRoutes){ + const childRouterState = parallelRoutes[parallelRouteKey]; + const childSegment = childRouterState[0]; + // TODO: Eventually, the param values will not be included in the response + // from the server. We'll instead fill them in on the client by parsing + // the URL. This is where we'll do that. + const childRequestKeyPart = (0, _segmentvalueencoding.createSegmentRequestKeyPart)(childSegment); + const childRequestKey = (0, _segmentvalueencoding.appendSegmentRequestKeyPart)(requestKey, parallelRouteKey, childRequestKeyPart); + const childTree = convertFlightRouterStateToRouteTree(childRouterState, childRequestKey, partialVaryPath, renderedSearch, acc); + if (slots === null) { + slots = { + [parallelRouteKey]: childTree + }; + } else { + slots[parallelRouteKey] = childTree; + } + } + return { + requestKey, + segment, + refreshState, + // TODO: Cheating the type system here a bit because TypeScript can't tell + // that the type of isPage and varyPath are consistent. The fix would be to + // create separate constructors and call the appropriate one from each of + // the branches above. Just seems a bit overkill only for one field so I'll + // leave it as-is for now. If isPage were wrong it would break the behavior + // and we'd catch it quickly, anyway. + varyPath: varyPath, + isPage: isPage, + slots, + prefetchHints: flightRouterState[4] ?? 0 + }; +} +function convertRouteTreeToFlightRouterState(routeTree) { + const parallelRoutes = {}; + if (routeTree.slots !== null) { + for(const parallelRouteKey in routeTree.slots){ + parallelRoutes[parallelRouteKey] = convertRouteTreeToFlightRouterState(routeTree.slots[parallelRouteKey]); + } + } + const flightRouterState = [ + routeTree.segment, + parallelRoutes, + null, + null + ]; + return flightRouterState; +} +async function fetchRouteOnCacheMiss(entry, key) { + // This function is allowed to use async/await because it contains the actual + // fetch that gets issued on a cache miss. Notice it writes the result to the + // cache entry directly, rather than return data that is then written by + // the caller. + const pathname = key.pathname; + const search = key.search; + const nextUrl = key.nextUrl; + const segmentPath = '/_tree'; + const headers = { + [_approuterheaders.RSC_HEADER]: '1', + [_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER]: '1', + [_approuterheaders.NEXT_ROUTER_SEGMENT_PREFETCH_HEADER]: segmentPath + }; + if (nextUrl !== null) { + headers[_approuterheaders.NEXT_URL] = nextUrl; + } + // Tell the server to perform a static pre-render for the Instant Navigation + // Testing API. Static pre-renders don't normally happen during development. + addInstantPrefetchHeaderIfLocked(headers); + try { + const url = new URL(pathname + search, location.origin); + let response; + let urlAfterRedirects; + if (isOutputExportMode) { + // In output: "export" mode, we can't use headers to request a particular + // segment. Instead, we encode the extra request information into the URL. + // This is not part of the "public" interface of the app; it's an internal + // Next.js implementation detail that the app developer should not need to + // concern themselves with. + // + // For example, to request a segment: + // + // Path passed to : /path/to/page + // Path passed to fetch: /path/to/page/__next-segments/_tree + // + // (This is not the exact protocol, just an illustration.) + // + // Before we do that, though, we need to account for redirects. Even in + // output: "export" mode, a proxy might redirect the page to a different + // location, but we shouldn't assume or expect that they also redirect all + // the segment files, too. + // + // To check whether the page is redirected, previously we perform a range + // request of 64 bytes of the HTML document to check if the target page + // is part of this app (by checking if build id matches). Only if the target + // page is part of this app do we determine the final canonical URL. + // + // However, as mentioned in https://github.com/vercel/next.js/pull/85903, + // some popular static hosting providers (like Cloudflare Pages or Render.com) + // do not support range requests, in the worst case, the entire HTML instead + // of 64 bytes could be returned, which is wasteful. + // + // So instead, we drops the check for build id here, and simply perform + // a HEAD request to rejects 1xx/4xx/5xx responses, and then determine the + // final URL after redirects. + // + // NOTE: We could embed the route tree into the HTML document, to avoid + // a second request. We're not doing that currently because it would make + // the HTML document larger and affect normal page loads. + const headResponse = await fetch(url, { + method: 'HEAD' + }); + if (headResponse.status < 200 || headResponse.status >= 400) { + // The target page responded w/o a successful status code + // Could be a WAF serving a 403, or a 5xx from a backend + // + // Note that we can't use headResponse.ok here, because + // Response#ok returns `false` with 3xx responses. + rejectRouteCacheEntry(entry, Date.now() + 10 * 1000); + return null; + } + urlAfterRedirects = headResponse.redirected ? new URL(headResponse.url) : url; + response = await fetchPrefetchResponse(addSegmentPathToUrlInOutputExportMode(urlAfterRedirects, segmentPath), headers); + } else { + // "Server" mode. We can use request headers instead of the pathname. + // TODO: The eventual plan is to get rid of our custom request headers and + // encode everything into the URL, using a similar strategy to the + // "output: export" block above. + response = await fetchPrefetchResponse(url, headers); + urlAfterRedirects = response !== null && response.redirected ? new URL(response.url) : url; + } + if (!response || !response.ok || // 204 is a Cache miss. Though theoretically this shouldn't happen when + // PPR is enabled, because we always respond to route tree requests, even + // if it needs to be blockingly generated on demand. + response.status === 204 || !response.body) { + // Server responded with an error, or with a miss. We should still cache + // the response, but we can try again after 10 seconds. + rejectRouteCacheEntry(entry, Date.now() + 10 * 1000); + return null; + } + // TODO: The canonical URL is the href without the origin. I think + // historically the reason for this is because the initial canonical URL + // gets passed as a prop to the top-level React component, which means it + // needs to be computed during SSR. If it were to include the origin, it + // would need to always be same as location.origin on the client, to prevent + // a hydration mismatch. To sidestep this complexity, we omit the origin. + // + // However, since this is neither a native URL object nor a fully qualified + // URL string, we need to be careful about how we use it. To prevent subtle + // mistakes, we should create a special type for it, instead of just string. + // Or, we should just use a (readonly) URL object instead. The type of the + // prop that we pass to seed the initial state does not need to be the same + // type as the state itself. + const canonicalUrl = (0, _createhreffromurl.createHrefFromUrl)(urlAfterRedirects); + // Check whether the response varies based on the Next-Url header. + const varyHeader = response.headers.get('vary'); + const couldBeIntercepted = varyHeader !== null && varyHeader.includes(_approuterheaders.NEXT_URL); + // TODO: The `closed` promise was originally used to track when a streaming + // network connection closes, so the scheduler could limit concurrent + // connections. Now that prefetch responses are buffered, `closed` is + // resolved immediately after buffering — before the outer function even + // returns. This mechanism is only still meaningful for dynamic (Full) + // prefetches, which use incremental streaming. Consider removing the + // `closed` plumbing for buffered prefetch paths. + const closed = (0, _promisewithresolvers.createPromiseWithResolvers)(); + // This checks whether the response was served from the per-segment cache, + // rather than the old prefetching flow. If it fails, it implies that PPR + // is disabled on this route. + const routeIsPPREnabled = response.headers.get(_approuterheaders.NEXT_DID_POSTPONE_HEADER) === '2' || // In output: "export" mode, we can't rely on response headers. But if we + // receive a well-formed response, we can assume it's a static response, + // because all data is static in this mode. + isOutputExportMode; + if (routeIsPPREnabled) { + const { stream: prefetchStream, size: responseSize } = await createNonTaskyPrefetchResponseStream(response.body); + closed.resolve(); + (0, _cachemap.setSizeInCacheMap)(entry, responseSize); + const serverData = await (0, _fetchserverresponse.createFromNextReadableStream)(prefetchStream, headers, { + allowPartialStream: true + }); + if ((response.headers.get(_constants.NEXT_NAV_DEPLOYMENT_ID_HEADER) ?? serverData.buildId) !== (0, _navigationbuildid.getNavigationBuildId)()) { + // The server build does not match the client. Treat as a 404. During + // an actual navigation, the router will trigger an MPA navigation. + // TODO: We should cache the fact that this is an MPA navigation. + rejectRouteCacheEntry(entry, Date.now() + 10 * 1000); + return null; + } + // Get the params that were used to render the target page. These may + // be different from the params in the request URL, if the page + // was rewritten. + const renderedPathname = (0, _routeparams.getRenderedPathname)(response); + const renderedSearch = (0, _routeparams.getRenderedSearch)(response); + // Convert the server-sent data into the RouteTree format used by the + // client cache. + // + // During this traversal, we accumulate additional data into this + // "accumulator" object. + const acc = { + metadataVaryPath: null + }; + const routeTree = convertRootTreePrefetchToRouteTree(serverData, renderedPathname, renderedSearch, acc); + const metadataVaryPath = acc.metadataVaryPath; + if (metadataVaryPath === null) { + rejectRouteCacheEntry(entry, Date.now() + 10 * 1000); + return null; + } + (0, _optimisticroutes.discoverKnownRoute)(Date.now(), pathname, nextUrl, entry, routeTree, metadataVaryPath, couldBeIntercepted, canonicalUrl, routeIsPPREnabled, false // hasDynamicRewrite + ); + } else { + // PPR is not enabled for this route. The server responds with a + // different format (FlightRouterState) that we need to convert. + // TODO: We will unify the responses eventually. I'm keeping the types + // separate for now because FlightRouterState has so many + // overloaded concerns. + const { stream: prefetchStream, size: responseSize } = await createNonTaskyPrefetchResponseStream(response.body); + closed.resolve(); + (0, _cachemap.setSizeInCacheMap)(entry, responseSize); + const serverData = await (0, _fetchserverresponse.createFromNextReadableStream)(prefetchStream, headers, { + allowPartialStream: true + }); + if ((response.headers.get(_constants.NEXT_NAV_DEPLOYMENT_ID_HEADER) ?? serverData.b) !== (0, _navigationbuildid.getNavigationBuildId)()) { + // The server build does not match the client. Treat as a 404. During + // an actual navigation, the router will trigger an MPA navigation. + // TODO: We should cache the fact that this is an MPA navigation. + rejectRouteCacheEntry(entry, Date.now() + 10 * 1000); + return null; + } + // Read head vary params synchronously. Individual segments carry their + // own thenables in CacheNodeSeedData. + const headVaryParamsThenable = serverData.h; + const headVaryParams = headVaryParamsThenable !== null ? (0, _varyparamsdecoding.readVaryParams)(headVaryParamsThenable) : null; + writeDynamicTreeResponseIntoCache(Date.now(), // The non-PPR response format is what we'd get if we prefetched these segments + // using the LoadingBoundary fetch strategy, so mark their cache entries accordingly. + _types.FetchStrategy.LoadingBoundary, response, serverData, entry, couldBeIntercepted, canonicalUrl, routeIsPPREnabled, headVaryParams, pathname, nextUrl); + } + if (!couldBeIntercepted) { + // This route will never be intercepted. So we can use this entry for all + // requests to this route, regardless of the Next-Url header. This works + // because when reading the cache we always check for a valid + // non-intercepted entry first. + // Re-key the entry. The `set` implementation handles removing it from + // its previous position in the cache. We don't need to do anything to + // update the LRU, because the entry is already in it. + // TODO: Treat this as an upsert — should check if an entry already + // exists at the new keypath, and if so, whether we should keep that + // one instead. + const fulfilledVaryPath = (0, _varypath.getFulfilledRouteVaryPath)(pathname, search, nextUrl, couldBeIntercepted); + const isRevalidation = false; + (0, _cachemap.setInCacheMap)(routeCacheMap, fulfilledVaryPath, entry, isRevalidation); + } + // Return a promise that resolves when the network connection closes, so + // the scheduler can track the number of concurrent network connections. + return { + value: null, + closed: closed.promise + }; + } catch (error) { + // Either the connection itself failed, or something bad happened while + // decoding the response. + rejectRouteCacheEntry(entry, Date.now() + 10 * 1000); + return null; + } +} +async function fetchSegmentOnCacheMiss(route, segmentCacheEntry, routeKey, tree) { + // This function is allowed to use async/await because it contains the actual + // fetch that gets issued on a cache miss. Notice it writes the result to the + // cache entry directly, rather than return data that is then written by + // the caller. + // + // Segment fetches are non-blocking so we don't need to ping the scheduler + // on completion. + // Use the canonical URL to request the segment, not the original URL. These + // are usually the same, but the canonical URL will be different if the route + // tree response was redirected. To avoid an extra waterfall on every segment + // request, we pass the redirected URL instead of the original one. + const url = new URL(route.canonicalUrl, location.origin); + const nextUrl = routeKey.nextUrl; + const requestKey = tree.requestKey; + const normalizedRequestKey = requestKey === _segmentvalueencoding.ROOT_SEGMENT_REQUEST_KEY ? // handling of these requests, we encode the root segment path as + // `_index` instead of as an empty string. This should be treated as + // an implementation detail and not as a stable part of the protocol. + // It just needs to match the equivalent logic that happens when + // prerendering the responses. It should not leak outside of Next.js. + '/_index' : requestKey; + const headers = { + [_approuterheaders.RSC_HEADER]: '1', + [_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER]: '1', + [_approuterheaders.NEXT_ROUTER_SEGMENT_PREFETCH_HEADER]: normalizedRequestKey + }; + if (nextUrl !== null) { + headers[_approuterheaders.NEXT_URL] = nextUrl; + } + // Tell the server to perform a static pre-render for the Instant Navigation + // Testing API. Static pre-renders don't normally happen during development. + addInstantPrefetchHeaderIfLocked(headers); + const requestUrl = isOutputExportMode ? addSegmentPathToUrlInOutputExportMode(url, normalizedRequestKey) : url; + try { + const response = await fetchPrefetchResponse(requestUrl, headers); + if (!response || !response.ok || response.status === 204 || // Cache miss + // This checks whether the response was served from the per-segment cache, + // rather than the old prefetching flow. If it fails, it implies that PPR + // is disabled on this route. Theoretically this should never happen + // because we only issue requests for segments once we've verified that + // the route supports PPR. + response.headers.get(_approuterheaders.NEXT_DID_POSTPONE_HEADER) !== '2' && // In output: "export" mode, we can't rely on response headers. But if + // we receive a well-formed response, we can assume it's a static + // response, because all data is static in this mode. + !isOutputExportMode || !response.body) { + // Server responded with an error, or with a miss. We should still cache + // the response, but we can try again after 10 seconds. + rejectSegmentCacheEntry(segmentCacheEntry, Date.now() + 10 * 1000); + return null; + } + // See TODO in fetchRouteOnCacheMiss about removing `closed` for + // buffered prefetch paths. + const closed = (0, _promisewithresolvers.createPromiseWithResolvers)(); + const { stream: prefetchStream, size: responseSize } = await createNonTaskyPrefetchResponseStream(response.body); + closed.resolve(); + (0, _cachemap.setSizeInCacheMap)(segmentCacheEntry, responseSize); + const serverData = await (0, _fetchserverresponse.createFromNextReadableStream)(prefetchStream, headers, { + allowPartialStream: true + }); + if ((response.headers.get(_constants.NEXT_NAV_DEPLOYMENT_ID_HEADER) ?? serverData.buildId) !== (0, _navigationbuildid.getNavigationBuildId)()) { + // The server build does not match the client. Treat as a 404. During + // an actual navigation, the router will trigger an MPA navigation. + rejectSegmentCacheEntry(segmentCacheEntry, Date.now() + 10 * 1000); + return null; + } + const now = Date.now(); + const staleAt = now + getStaleTimeMs(serverData.staleTime); + const fulfilledEntry = fulfillSegmentCacheEntry(segmentCacheEntry, serverData.rsc, staleAt, serverData.isPartial); + // If the server tells us which params the segment varies by, we can re-key + // the entry to a more generic vary path. This allows the entry to be reused + // across different param values for params that the segment doesn't + // actually depend on. + const varyParams = serverData.varyParams; + const fulfilledVaryPath = process.env.__NEXT_VARY_PARAMS && varyParams !== null ? (0, _varypath.getFulfilledSegmentVaryPath)(tree.varyPath, varyParams) : (0, _varypath.getSegmentVaryPathForRequest)(segmentCacheEntry.fetchStrategy, tree); + // Re-key and upsert the entry at the fulfilled vary path. This ensures + // the entry is stored at the most generic path possible based on which + // params the segment actually depends on. + upsertSegmentEntry(now, fulfilledVaryPath, fulfilledEntry); + return { + value: fulfilledEntry, + // Return a promise that resolves when the network connection closes, so + // the scheduler can track the number of concurrent network connections. + closed: closed.promise + }; + } catch (error) { + // Either the connection itself failed, or something bad happened while + // decoding the response. + rejectSegmentCacheEntry(segmentCacheEntry, Date.now() + 10 * 1000); + return null; + } +} +async function fetchInlinedSegmentsOnCacheMiss(route, routeKey, tree, spawnedEntries) { + // When prefetch inlining is enabled, all segment data for a route is bundled + // into a single /_inlined response instead of individual per-segment + // requests. This function fetches that response and walks the tree to fill + // all segment cache entries at once. + const url = new URL(route.canonicalUrl, location.origin); + const nextUrl = routeKey.nextUrl; + const headers = { + [_approuterheaders.RSC_HEADER]: '1', + [_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER]: '1', + [_approuterheaders.NEXT_ROUTER_SEGMENT_PREFETCH_HEADER]: '/' + _segment.PAGE_SEGMENT_KEY + }; + if (nextUrl !== null) { + headers[_approuterheaders.NEXT_URL] = nextUrl; + } + addInstantPrefetchHeaderIfLocked(headers); + try { + const response = await fetchPrefetchResponse(url, headers); + if (!response || !response.ok || response.status === 204 || response.headers.get(_approuterheaders.NEXT_DID_POSTPONE_HEADER) !== '2' && !isOutputExportMode || !response.body) { + rejectSegmentEntriesIfStillPending(spawnedEntries, Date.now() + 10 * 1000); + return null; + } + // See TODO in fetchRouteOnCacheMiss about removing `closed` for + // buffered prefetch paths. + const closed = (0, _promisewithresolvers.createPromiseWithResolvers)(); + const { stream: prefetchStream } = await createNonTaskyPrefetchResponseStream(response.body); + closed.resolve(); + const serverData = await (0, _fetchserverresponse.createFromNextReadableStream)(prefetchStream, headers, { + allowPartialStream: true + }); + if ((response.headers.get(_constants.NEXT_NAV_DEPLOYMENT_ID_HEADER) ?? serverData.tree.segment.buildId) !== (0, _navigationbuildid.getNavigationBuildId)()) { + rejectSegmentEntriesIfStillPending(spawnedEntries, Date.now() + 10 * 1000); + return null; + } + const now = Date.now(); + // Walk the inlined tree in parallel with the RouteTree and fill + // segment cache entries. + fillInlinedSegmentEntries(now, route, tree, serverData.tree, spawnedEntries); + // Fill the head entry. + const headStaleAt = now + getStaleTimeMs(serverData.head.staleTime); + const headKey = route.metadata.requestKey; + const ownedHeadEntry = spawnedEntries.get(headKey); + if (ownedHeadEntry !== undefined) { + fulfillSegmentCacheEntry(ownedHeadEntry, serverData.head.rsc, headStaleAt, serverData.head.isPartial); + } else { + // The head was already cached. Try to upsert if the entry is empty. + const existingEntry = readOrCreateSegmentCacheEntry(now, _types.FetchStrategy.PPR, route.metadata); + if (existingEntry.status === 0) { + fulfillSegmentCacheEntry(upgradeToPendingSegment(existingEntry, _types.FetchStrategy.PPR), serverData.head.rsc, headStaleAt, serverData.head.isPartial); + } + } + // Reject any remaining entries that were not fulfilled by the response. + rejectSegmentEntriesIfStillPending(spawnedEntries, Date.now() + 10 * 1000); + return { + value: null, + closed: closed.promise + }; + } catch (error) { + rejectSegmentEntriesIfStillPending(spawnedEntries, Date.now() + 10 * 1000); + return null; + } +} +function fillInlinedSegmentEntries(now, route, tree, inlinedNode, spawnedEntries) { + // Check if the spawned entries map has an entry for this segment's key. + const segment = inlinedNode.segment; + const staleAt = now + getStaleTimeMs(segment.staleTime); + const ownedEntry = spawnedEntries.get(tree.requestKey); + if (ownedEntry !== undefined) { + // We own this entry. Fulfill it directly. + fulfillSegmentCacheEntry(ownedEntry, segment.rsc, staleAt, segment.isPartial); + } else { + // Not owned by us — this is extra data from the inlined response for a + // segment that was already cached. Try to upsert if the entry is empty. + const existingEntry = readOrCreateSegmentCacheEntry(now, _types.FetchStrategy.PPR, tree); + if (existingEntry.status === 0) { + fulfillSegmentCacheEntry(upgradeToPendingSegment(existingEntry, _types.FetchStrategy.PPR), segment.rsc, staleAt, segment.isPartial); + } + } + // Recurse into children. + if (tree.slots !== null && inlinedNode.slots !== null) { + for(const parallelRouteKey in tree.slots){ + const childTree = tree.slots[parallelRouteKey]; + const childInlinedNode = inlinedNode.slots[parallelRouteKey]; + if (childInlinedNode !== undefined) { + fillInlinedSegmentEntries(now, route, childTree, childInlinedNode, spawnedEntries); + } + } + } +} +async function fetchSegmentPrefetchesUsingDynamicRequest(task, route, fetchStrategy, dynamicRequestTree, spawnedEntries) { + const key = task.key; + const url = new URL(route.canonicalUrl, location.origin); + const nextUrl = key.nextUrl; + if (spawnedEntries.size === 1 && spawnedEntries.has(route.metadata.requestKey)) { + // The only thing pending is the head. Instruct the server to + // skip over everything else. + dynamicRequestTree = MetadataOnlyRequestTree; + } + const headers = { + [_approuterheaders.RSC_HEADER]: '1', + [_approuterheaders.NEXT_ROUTER_STATE_TREE_HEADER]: (0, _flightdatahelpers.prepareFlightRouterStateForRequest)(dynamicRequestTree) + }; + if (nextUrl !== null) { + headers[_approuterheaders.NEXT_URL] = nextUrl; + } + switch(fetchStrategy){ + case _types.FetchStrategy.Full: + { + break; + } + case _types.FetchStrategy.PPRRuntime: + { + headers[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER] = '2'; + break; + } + case _types.FetchStrategy.LoadingBoundary: + { + headers[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER] = '1'; + break; + } + default: + { + fetchStrategy; + } + } + try { + const response = await fetchPrefetchResponse(url, headers); + if (!response || !response.ok || !response.body) { + // Server responded with an error, or with a miss. We should still cache + // the response, but we can try again after 10 seconds. + rejectSegmentEntriesIfStillPending(spawnedEntries, Date.now() + 10 * 1000); + return null; + } + const renderedSearch = (0, _routeparams.getRenderedSearch)(response); + if (renderedSearch !== route.renderedSearch) { + // The search params that were used to render the target page are + // different from the search params in the request URL. This only happens + // when there's a dynamic rewrite in between the tree prefetch and the + // data prefetch. + // TODO: For now, since this is an edge case, we reject the prefetch, but + // the proper way to handle this is to evict the stale route tree entry + // then fill the cache with the new response. + rejectSegmentEntriesIfStillPending(spawnedEntries, Date.now() + 10 * 1000); + return null; + } + // Track when the network connection closes. Only meaningful for Full + // (dynamic) prefetches which use incremental streaming. For buffered + // paths, this is resolved immediately — see TODO in fetchRouteOnCacheMiss. + const closed = (0, _promisewithresolvers.createPromiseWithResolvers)(); + let fulfilledEntries = null; + let prefetchStream; + let bufferedResponseSize = null; + if (fetchStrategy === _types.FetchStrategy.Full) { + // Full prefetches are dynamic responses stored in the prefetch cache. + // They don't carry vary params or other cache metadata, so there's no + // need to buffer them. Use the incremental version to allow data to be + // processed as it arrives. + prefetchStream = createIncrementalPrefetchResponseStream(response.body, closed.resolve, function onResponseSizeUpdate(totalBytesReceivedSoFar) { + // When processing a dynamic response, we don't know how large each + // individual segment is, so approximate by assigning each segment + // the average of the total response size. + if (fulfilledEntries === null) { + // Haven't received enough data yet to know which segments + // were included. + return; + } + const averageSize = totalBytesReceivedSoFar / fulfilledEntries.length; + for (const entry of fulfilledEntries){ + (0, _cachemap.setSizeInCacheMap)(entry, averageSize); + } + }); + } else { + const { stream, size } = await createNonTaskyPrefetchResponseStream(response.body); + closed.resolve(); + prefetchStream = stream; + bufferedResponseSize = size; + } + const [serverData, cacheData] = await Promise.all([ + (0, _fetchserverresponse.createFromNextReadableStream)(prefetchStream, headers, { + allowPartialStream: true + }), + response.cacheData + ]); + // Read head vary params synchronously. Individual segments carry their + // own thenables in CacheNodeSeedData. + const headVaryParamsThenable = serverData.h; + const headVaryParams = headVaryParamsThenable !== null ? (0, _varyparamsdecoding.readVaryParams)(headVaryParamsThenable) : null; + const now = Date.now(); + const staleAt = await getStaleAt(now, serverData.s, response); + // PPRRuntime prefetches are partial when the server marks the response + // as '~' (Partial). Full/LoadingBoundary prefetches are always complete. + const isResponsePartial = fetchStrategy === _types.FetchStrategy.PPRRuntime && (cacheData?.isResponsePartial ?? false); + // Aside from writing the data into the cache, this function also returns + // the entries that were fulfilled, so we can streamingly update their sizes + // in the LRU as more data comes in. + const buildId = response.headers.get(_constants.NEXT_NAV_DEPLOYMENT_ID_HEADER) ?? serverData.b; + const flightDatas = (0, _flightdatahelpers.normalizeFlightData)(serverData.f); + if (typeof flightDatas === 'string') { + rejectSegmentEntriesIfStillPending(spawnedEntries, Date.now() + 10 * 1000); + return null; + } + const navigationSeed = (0, _navigation.convertServerPatchToFullTree)(now, dynamicRequestTree, flightDatas, renderedSearch, // Not needed for prefetch responses; pass unknown to use the default. + _bfcache.UnknownDynamicStaleTime); + fulfilledEntries = writeDynamicRenderResponseIntoCache(now, fetchStrategy, flightDatas, buildId, isResponsePartial, headVaryParams, staleAt, navigationSeed, spawnedEntries); + // For buffered responses, update LRU sizes now that we know which + // entries were fulfilled. + if (bufferedResponseSize !== null && fulfilledEntries !== null && fulfilledEntries.length > 0) { + const averageSize = bufferedResponseSize / fulfilledEntries.length; + for (const entry of fulfilledEntries){ + (0, _cachemap.setSizeInCacheMap)(entry, averageSize); + } + } + // Return a promise that resolves when the network connection closes, so + // the scheduler can track the number of concurrent network connections. + return { + value: null, + closed: closed.promise + }; + } catch (error) { + rejectSegmentEntriesIfStillPending(spawnedEntries, Date.now() + 10 * 1000); + return null; + } +} +function writeDynamicTreeResponseIntoCache(now, fetchStrategy, response, serverData, entry, couldBeIntercepted, canonicalUrl, routeIsPPREnabled, headVaryParams, originalPathname, nextUrl) { + const renderedSearch = (0, _routeparams.getRenderedSearch)(response); + const normalizedFlightDataResult = (0, _flightdatahelpers.normalizeFlightData)(serverData.f); + if (// A string result means navigating to this route will result in an + // MPA navigation. + typeof normalizedFlightDataResult === 'string' || normalizedFlightDataResult.length !== 1) { + rejectRouteCacheEntry(entry, now + 10 * 1000); + return; + } + const flightData = normalizedFlightDataResult[0]; + if (!flightData.isRootRender) { + // Unexpected response format. + rejectRouteCacheEntry(entry, now + 10 * 1000); + return; + } + const flightRouterState = flightData.tree; + // If the response was postponed, segments may contain dynamic holes. + // The head has its own partiality flag (flightDataEntry.isHeadPartial) + // which is handled separately in writeDynamicRenderResponseIntoCache. + const isResponsePartial = response.headers.get(_approuterheaders.NEXT_DID_POSTPONE_HEADER) === '1'; + // Convert the server-sent data into the RouteTree format used by the + // client cache. + // + // During this traversal, we accumulate additional data into this + // "accumulator" object. + const acc = { + metadataVaryPath: null + }; + const routeTree = convertRootFlightRouterStateToRouteTree(flightRouterState, renderedSearch, acc); + const metadataVaryPath = acc.metadataVaryPath; + if (metadataVaryPath === null) { + rejectRouteCacheEntry(entry, now + 10 * 1000); + return; + } + (0, _optimisticroutes.discoverKnownRoute)(now, originalPathname, nextUrl, entry, routeTree, metadataVaryPath, couldBeIntercepted, canonicalUrl, routeIsPPREnabled, false // hasDynamicRewrite + ); + // If the server sent segment data as part of the response, we should write + // it into the cache to prevent a second, redundant prefetch request. + // TODO: This is a leftover branch from before Client Segment Cache was + // enabled everywhere. Tree prefetches should never include segment data. We + // can delete it. Leaving for a subsequent PR. + const navigationSeed = (0, _navigation.convertServerPatchToFullTree)(now, flightRouterState, normalizedFlightDataResult, renderedSearch, _bfcache.UnknownDynamicStaleTime); + const buildId = response.headers.get(_constants.NEXT_NAV_DEPLOYMENT_ID_HEADER) ?? serverData.b; + writeDynamicRenderResponseIntoCache(now, fetchStrategy, normalizedFlightDataResult, buildId, isResponsePartial, headVaryParams, getStaleAtFromHeader(now, response), navigationSeed, null); +} +function rejectSegmentEntriesIfStillPending(entries, staleAt) { + const fulfilledEntries = []; + for (const entry of entries.values()){ + if (entry.status === 1) { + rejectSegmentCacheEntry(entry, staleAt); + } else if (entry.status === 2) { + fulfilledEntries.push(entry); + } + } + return fulfilledEntries; +} +function writeDynamicRenderResponseIntoCache(now, fetchStrategy, flightDatas, buildId, isResponsePartial, headVaryParams, staleAt, navigationSeed, spawnedEntries) { + if (buildId && buildId !== (0, _navigationbuildid.getNavigationBuildId)()) { + // The server build does not match the client. Treat as a 404. During + // an actual navigation, the router will trigger an MPA navigation. + if (spawnedEntries !== null) { + rejectSegmentEntriesIfStillPending(spawnedEntries, now + 10 * 1000); + } + return null; + } + const routeTree = navigationSeed.routeTree; + const metadataTree = navigationSeed.metadataVaryPath !== null ? createMetadataRouteTree(navigationSeed.metadataVaryPath) : null; + for (const flightDataEntry of flightDatas){ + const seedData = flightDataEntry.seedData; + if (seedData !== null) { + // The data sent by the server represents only a subtree of the app. We + // need to find the part of the task tree that matches the response. + // + // segmentPath represents the parent path of subtree. It's a repeating + // pattern of parallel route key and segment: + // + // [string, Segment, string, Segment, string, Segment, ...] + const segmentPath = flightDataEntry.segmentPath; + let tree = routeTree; + for(let i = 0; i < segmentPath.length; i += 2){ + const parallelRouteKey = segmentPath[i]; + if (tree?.slots?.[parallelRouteKey] !== undefined) { + tree = tree.slots[parallelRouteKey]; + } else { + if (spawnedEntries !== null) { + rejectSegmentEntriesIfStillPending(spawnedEntries, now + 10 * 1000); + } + return null; + } + } + writeSeedDataIntoCache(now, fetchStrategy, tree, staleAt, seedData, isResponsePartial, spawnedEntries); + } + const head = flightDataEntry.head; + if (head !== null && metadataTree !== null) { + // When Cache Components is enabled, the server conservatively marks + // the head as partial during static generation (isPossiblyPartialHead + // in app-render.tsx), even for fully static pages where the head is + // actually complete. When the response is non-partial, we override + // this since the server confirmed no dynamic content exists. + // + // Without Cache Components, the server always sends the correct + // isHeadPartial value, so no override is needed. + const isHeadPartial = !isResponsePartial && process.env.__NEXT_CACHE_COMPONENTS ? false : flightDataEntry.isHeadPartial; + fulfillEntrySpawnedByRuntimePrefetch(now, fetchStrategy, head, isHeadPartial, staleAt, // For head entries, use the head-specific vary params passed as + // parameter. + headVaryParams, metadataTree, spawnedEntries); + } + } + // Any entry that's still pending was intentionally not rendered by the + // server, because it was inside the loading boundary. Mark them as rejected + // so we know not to fetch them again. + // TODO: If PPR is enabled on some routes but not others, then it's possible + // that a different page is able to do a per-segment prefetch of one of the + // segments we're marking as rejected here. We should mark on the segment + // somehow that the reason for the rejection is because of a non-PPR prefetch. + // That way a per-segment prefetch knows to disregard the rejection. + if (spawnedEntries !== null) { + const fulfilledEntries = rejectSegmentEntriesIfStillPending(spawnedEntries, now + 10 * 1000); + return fulfilledEntries; + } + return null; +} +function writeSeedDataIntoCache(now, fetchStrategy, tree, staleAt, seedData, isResponsePartial, entriesOwnedByCurrentTask) { + // This function is used to write the result of a runtime server request + // (CacheNodeSeedData) into the prefetch cache. + const rsc = seedData[0]; + const isPartial = rsc === null || isResponsePartial; + const varyParamsThenable = seedData[4]; + // Each segment carries its own vary params thenable in the seed data. The + // thenable resolves to the set of params the segment accessed during render. + // A null thenable means tracking was not enabled (not a prerender). + const varyParams = varyParamsThenable !== null ? (0, _varyparamsdecoding.readVaryParams)(varyParamsThenable) : null; + fulfillEntrySpawnedByRuntimePrefetch(now, fetchStrategy, rsc, isPartial, staleAt, varyParams, tree, entriesOwnedByCurrentTask); + // Recursively write the child data into the cache. + const slots = tree.slots; + if (slots !== null) { + const seedDataChildren = seedData[1]; + for(const parallelRouteKey in slots){ + const childTree = slots[parallelRouteKey]; + const childSeedData = seedDataChildren[parallelRouteKey]; + if (childSeedData !== null && childSeedData !== undefined) { + writeSeedDataIntoCache(now, fetchStrategy, childTree, staleAt, childSeedData, isResponsePartial, entriesOwnedByCurrentTask); + } + } + } +} +function fulfillEntrySpawnedByRuntimePrefetch(now, fetchStrategy, rsc, isPartial, staleAt, segmentVaryParams, tree, entriesOwnedByCurrentTask) { + // We should only write into cache entries that are owned by us. Or create + // a new one and write into that. We must never write over an entry that was + // created by a different task, because that causes data races. + const ownedEntry = entriesOwnedByCurrentTask !== null ? entriesOwnedByCurrentTask.get(tree.requestKey) : undefined; + if (ownedEntry !== undefined) { + const fulfilledEntry = fulfillSegmentCacheEntry(ownedEntry, rsc, staleAt, isPartial); + // Re-key the entry based on which params the segment actually depends on. + if (process.env.__NEXT_VARY_PARAMS && segmentVaryParams !== null) { + const fulfilledVaryPath = (0, _varypath.getFulfilledSegmentVaryPath)(tree.varyPath, segmentVaryParams); + const isRevalidation = false; + (0, _cachemap.setInCacheMap)(segmentCacheMap, fulfilledVaryPath, fulfilledEntry, isRevalidation); + } + } else { + // There's no matching entry. Attempt to create a new one. + const possiblyNewEntry = readOrCreateSegmentCacheEntry(now, fetchStrategy, tree); + if (possiblyNewEntry.status === 0) { + // Confirmed this is a new entry. We can fulfill it. + const newEntry = possiblyNewEntry; + const fulfilledEntry = fulfillSegmentCacheEntry(upgradeToPendingSegment(newEntry, fetchStrategy), rsc, staleAt, isPartial); + // Re-key the entry based on which params the segment actually depends on. + if (process.env.__NEXT_VARY_PARAMS && segmentVaryParams !== null) { + const fulfilledVaryPath = (0, _varypath.getFulfilledSegmentVaryPath)(tree.varyPath, segmentVaryParams); + const isRevalidation = false; + (0, _cachemap.setInCacheMap)(segmentCacheMap, fulfilledVaryPath, fulfilledEntry, isRevalidation); + } + } else { + // There was already an entry in the cache. But we may be able to + // replace it with the new one from the server. + const newEntry = fulfillSegmentCacheEntry(upgradeToPendingSegment(createDetachedSegmentCacheEntry(now), fetchStrategy), rsc, staleAt, isPartial); + // Use the fulfilled vary path if available, otherwise fall back to + // the request vary path. + const varyPath = process.env.__NEXT_VARY_PARAMS && segmentVaryParams !== null ? (0, _varypath.getFulfilledSegmentVaryPath)(tree.varyPath, segmentVaryParams) : (0, _varypath.getSegmentVaryPathForRequest)(fetchStrategy, tree); + upsertSegmentEntry(now, varyPath, newEntry); + } + } +} +async function fetchPrefetchResponse(url, headers) { + const fetchPriority = 'low'; + // When issuing a prefetch request, don't immediately decode the response; we + // use the lower level `createFromResponse` API instead because we need to do + // some extra processing of the response stream. See + // `createNonTaskyPrefetchResponseStream` for more details. + const shouldImmediatelyDecode = false; + const response = await (0, _fetchserverresponse.createFetch)(url, headers, fetchPriority, shouldImmediatelyDecode); + if (!response.ok) { + return null; + } + // Check the content type + if (isOutputExportMode) { + // In output: "export" mode, we relaxed about the content type, since it's + // not Next.js that's serving the response. If the status is OK, assume the + // response is valid. If it's not a valid response, the Flight client won't + // be able to decode it, and we'll treat it as a miss. + } else { + const contentType = response.headers.get('content-type'); + const isFlightResponse = contentType && contentType.startsWith(_approuterheaders.RSC_CONTENT_TYPE_HEADER); + if (!isFlightResponse) { + return null; + } + } + return response; +} +async function createNonTaskyPrefetchResponseStream(body) { + // Buffer the entire response before passing it to the Flight client. This + // ensures that when Flight processes the stream, all model data is available + // synchronously. This is important for readVaryParams, which synchronously + // checks the thenable status — if data arrived in multiple network chunks, + // the thenables might not yet be fulfilled. + // + // TODO: There are too many intermediate stream transformations in the + // prefetch response pipeline (e.g. stripIsPartialByte, this function). + // These could all be consolidated into a single transformation. Refactor + // once the cached navigations experiment lands. + // + // Read the entire response from the network. + const reader = body.getReader(); + const chunks = []; + let size = 0; + while(true){ + const { done, value } = await reader.read(); + if (done) break; + chunks.push(value); + size += value.byteLength; + } + // Concatenate into a single chunk so that Flight's processBinaryChunk + // processes all rows synchronously in one call. Multiple chunks would not + // be sufficient: even though reader.read() resolves as a microtask for + // already-enqueued data, the `await` continuation from + // createFromReadableStream can interleave between chunks. If the root + // model row isn't the first row (e.g. outlined values come first), the + // PromiseResolveThenableJob from `await` can cause the root to initialize + // eagerly, scheduling the continuation before remaining chunks (including + // promise value rows) are processed. A single chunk avoids this. + let buffer; + if (chunks.length === 1) { + buffer = chunks[0]; + } else if (chunks.length > 1) { + buffer = new Uint8Array(size); + let offset = 0; + for (const chunk of chunks){ + buffer.set(chunk, offset); + offset += chunk.byteLength; + } + } else { + buffer = new Uint8Array(0); + } + const stream = new ReadableStream({ + start (controller) { + controller.enqueue(buffer); + controller.close(); + } + }); + return { + stream, + size + }; +} +/** + * Creates a streaming (non-buffered) prefetch response stream for dynamic/Full + * prefetches. These are essentially dynamic responses that get stored in the + * prefetch cache — they don't carry vary params or other cache metadata that + * requires synchronous thenable resolution, so there's no need to buffer them. + * They should continue to stream so consumers can process data as it arrives. + */ function createIncrementalPrefetchResponseStream(originalFlightStream, onStreamClose, onResponseSizeUpdate) { + // While processing the original stream, we incrementally update the size + // of the cache entry in the LRU. + let totalByteLength = 0; + const reader = originalFlightStream.getReader(); + return new ReadableStream({ + async pull (controller) { + while(true){ + const { done, value } = await reader.read(); + if (!done) { + // Pass to the target stream and keep consuming the Flight response + // from the server. + controller.enqueue(value); + // Incrementally update the size of the cache entry in the LRU. + totalByteLength += value.byteLength; + onResponseSizeUpdate(totalByteLength); + continue; + } + controller.close(); + onStreamClose(); + return; + } + } + }); +} +function addSegmentPathToUrlInOutputExportMode(url, segmentPath) { + if (isOutputExportMode) { + // In output: "export" mode, we cannot use a header to encode the segment + // path. Instead, we append it to the end of the pathname. + const staticUrl = new URL(url); + const routeDir = staticUrl.pathname.endsWith('/') ? staticUrl.pathname.slice(0, -1) : staticUrl.pathname; + const staticExportFilename = (0, _segmentvalueencoding.convertSegmentPathToStaticExportFilename)(segmentPath); + staticUrl.pathname = `${routeDir}/${staticExportFilename}`; + return staticUrl; + } + return url; +} +function canNewFetchStrategyProvideMoreContent(currentStrategy, newStrategy) { + return currentStrategy < newStrategy; +} +/** + * Adds the instant prefetch header if the navigation lock is active. + * Uses a lazy require to ensure dead code elimination. + */ function addInstantPrefetchHeaderIfLocked(headers) { + if (process.env.__NEXT_EXPOSE_TESTING_API) { + const { isNavigationLocked } = require('./navigation-testing-lock'); + if (isNavigationLocked()) { + headers[_approuterheaders.NEXT_INSTANT_PREFETCH_HEADER] = '1'; + } + } +} +function getStaleAtFromHeader(now, response) { + const staleTimeSeconds = parseInt(response.headers.get(_approuterheaders.NEXT_ROUTER_STALE_TIME_HEADER) ?? '', 10); + const staleTimeMs = !isNaN(staleTimeSeconds) ? getStaleTimeMs(staleTimeSeconds) : _navigatereducer.STATIC_STALETIME_MS; + return now + staleTimeMs; +} +async function getStaleAt(now, staleTimeIterable, response) { + if (staleTimeIterable !== undefined) { + // Iterate the async iterable and take the last yielded value. The server + // yields updated staleTime values during the render; the last one is the + // final staleTime. + let staleTimeSeconds; + for await (const value of staleTimeIterable){ + staleTimeSeconds = value; + } + if (staleTimeSeconds !== undefined) { + const staleTimeMs = isNaN(staleTimeSeconds) ? _navigatereducer.STATIC_STALETIME_MS : getStaleTimeMs(staleTimeSeconds); + return now + staleTimeMs; + } + } + if (response !== undefined) { + return getStaleAtFromHeader(now, response); + } + return now + _navigatereducer.STATIC_STALETIME_MS; +} +function writeStaticStageResponseIntoCache(now, flightData, buildId, headVaryParamsThenable, staleAt, baseTree, renderedSearch, isResponsePartial) { + const fetchStrategy = isResponsePartial ? _types.FetchStrategy.PPR : _types.FetchStrategy.Full; + const headVaryParams = headVaryParamsThenable !== null ? (0, _varyparamsdecoding.readVaryParams)(headVaryParamsThenable) : null; + const flightDatas = (0, _flightdatahelpers.normalizeFlightData)(flightData); + if (typeof flightDatas === 'string') { + return; + } + const navigationSeed = (0, _navigation.convertServerPatchToFullTree)(now, baseTree, flightDatas, renderedSearch, _bfcache.UnknownDynamicStaleTime); + writeDynamicRenderResponseIntoCache(now, fetchStrategy, flightDatas, buildId, isResponsePartial, headVaryParams, staleAt, navigationSeed, null // spawnedEntries — no pre-created entries; will create or upsert + ); +} +async function processRuntimePrefetchStream(now, runtimePrefetchStream, baseTree, renderedSearch) { + const { stream, isPartial } = await stripIsPartialByte(runtimePrefetchStream); + const serverData = await (0, _fetchserverresponse.createFromNextReadableStream)(stream, undefined, { + allowPartialStream: true + }); + const headVaryParamsThenable = serverData.h; + const headVaryParams = headVaryParamsThenable !== null ? (0, _varyparamsdecoding.readVaryParams)(headVaryParamsThenable) : null; + const staleAt = await getStaleAt(now, serverData.s); + const flightDatas = (0, _flightdatahelpers.normalizeFlightData)(serverData.f); + if (typeof flightDatas === 'string') { + return null; + } + const navigationSeed = (0, _navigation.convertServerPatchToFullTree)(now, baseTree, flightDatas, renderedSearch, _bfcache.UnknownDynamicStaleTime); + return { + flightDatas, + navigationSeed, + buildId: serverData.b, + isResponsePartial: isPartial, + headVaryParams, + staleAt + }; +} +async function stripIsPartialByte(stream) { + // When there is no recognized marker byte, the fallback depends on whether + // Cached Navigations is enabled. When enabled, dynamic navigation responses + // don't have a marker but may contain dynamic holes, so they are treated as + // partial. When disabled, unmarked responses are treated as non-partial. + const defaultIsPartial = !!process.env.__NEXT_EXPERIMENTAL_CACHED_NAVIGATIONS; + const reader = stream.getReader(); + const { done, value } = await reader.read(); + if (done || !value || value.byteLength === 0) { + return { + stream: new ReadableStream({ + start: (c)=>c.close() + }), + isPartial: defaultIsPartial + }; + } + const firstByte = value[0]; + const hasMarker = firstByte === 0x23 || firstByte === 0x7e; + const isPartial = hasMarker ? firstByte === 0x7e : defaultIsPartial; + const remainder = hasMarker ? value.byteLength > 1 ? value.subarray(1) : null : value; + return { + isPartial, + stream: new ReadableStream({ + start (controller) { + if (remainder) { + controller.enqueue(remainder); + } + }, + async pull (controller) { + const result = await reader.read(); + if (result.done) { + controller.close(); + } else { + controller.enqueue(result.value); + } + } + }) + }; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=cache.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/segment-cache/lru.js b/build/node_modules/next/dist/client/components/segment-cache/lru.js new file mode 100644 index 0000000..ea78a57 --- /dev/null +++ b/build/node_modules/next/dist/client/components/segment-cache/lru.js @@ -0,0 +1,152 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + cleanup: null, + deleteFromLru: null, + lruPut: null, + updateLruSize: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + cleanup: function() { + return cleanup; + }, + deleteFromLru: function() { + return deleteFromLru; + }, + lruPut: function() { + return lruPut; + }, + updateLruSize: function() { + return updateLruSize; + } +}); +const _cachemap = require("./cache-map"); +const _scheduler = require("./scheduler"); +// We use an LRU for memory management. We must update this whenever we add or +// remove a new cache entry, or when an entry changes size. +let head = null; +let lruSize = 0; +// TODO: I chose the max size somewhat arbitrarily. Consider setting this based +// on navigator.deviceMemory, or some other heuristic. We should make this +// customizable via the Next.js config, too. +const maxLruSize = 50 * 1024 * 1024 // 50 MB +; +function lruPut(node) { + if (head === node) { + // Already at the head + return; + } + const prev = node.prev; + const next = node.next; + if (next === null || prev === null) { + // This is an insertion + lruSize += node.size; + // Whenever we add an entry, we need to check if we've exceeded the + // max size. We don't evict entries immediately; they're evicted later in + // an asynchronous task. + ensureCleanupIsScheduled(); + } else { + // This is a move. Remove from its current position. + prev.next = next; + next.prev = prev; + } + // Move to the front of the list + if (head === null) { + // This is the first entry + node.prev = node; + node.next = node; + } else { + // Add to the front of the list + const tail = head.prev; + node.prev = tail; + // In practice, this is never null, but that isn't encoded in the type + if (tail !== null) { + tail.next = node; + } + node.next = head; + head.prev = node; + } + head = node; +} +function updateLruSize(node, newNodeSize) { + // This is a separate function from `put` so that we can resize the entry + // regardless of whether it's currently being tracked by the LRU. + const prevNodeSize = node.size; + node.size = newNodeSize; + if (node.next === null) { + // This entry is not currently being tracked by the LRU. + return; + } + // Update the total LRU size + lruSize = lruSize - prevNodeSize + newNodeSize; + ensureCleanupIsScheduled(); +} +function deleteFromLru(deleted) { + const next = deleted.next; + const prev = deleted.prev; + if (next !== null && prev !== null) { + lruSize -= deleted.size; + deleted.next = null; + deleted.prev = null; + // Remove from the list + if (head === deleted) { + // Update the head + if (next === head) { + // This was the last entry + head = null; + } else { + head = next; + prev.next = next; + next.prev = prev; + } + } else { + prev.next = next; + next.prev = prev; + } + } else { + // Already deleted + } +} +function ensureCleanupIsScheduled() { + if (lruSize <= maxLruSize) { + return; + } + // To schedule cleanup, ping the prefetch scheduler. At the end of its work + // loop, once there are no queued tasks and no in-progress requests, it will + // call cleanup(). + (0, _scheduler.pingPrefetchScheduler)(); +} +function cleanup() { + if (lruSize <= maxLruSize) { + return; + } + // Evict entries until we're at 90% capacity. We can assume this won't + // infinite loop because even if `maxLruSize` were 0, eventually + // `deleteFromLru` sets `head` to `null` when we run out entries. + const ninetyPercentMax = maxLruSize * 0.9; + while(lruSize > ninetyPercentMax && head !== null){ + const tail = head.prev; + // In practice, this is never null, but that isn't encoded in the type + if (tail !== null) { + // Delete the entry from the map. In turn, this will remove it from + // the LRU. + (0, _cachemap.deleteMapEntry)(tail); + } + } +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=lru.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/segment-cache/navigation-testing-lock.js b/build/node_modules/next/dist/client/components/segment-cache/navigation-testing-lock.js new file mode 100644 index 0000000..faba672 --- /dev/null +++ b/build/node_modules/next/dist/client/components/segment-cache/navigation-testing-lock.js @@ -0,0 +1,194 @@ +/** + * Navigation lock for the Instant Navigation Testing API. + * + * Manages the in-memory lock (a promise) that gates dynamic data writes + * during instant navigation captures, and owns all cookie state + * transitions (pending → captured-MPA, pending → captured-SPA). + * + * External actors (Playwright, devtools) set [0] to start a lock scope + * and delete the cookie to end one. Next.js writes captured values. + * The CookieStore handler distinguishes them by value: pending = external, + * captured = self-write (ignored). + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + isNavigationLocked: null, + startListeningForInstantNavigationCookie: null, + transitionToCapturedSPA: null, + updateCapturedSPAToTree: null, + waitForNavigationLockIfActive: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + isNavigationLocked: function() { + return isNavigationLocked; + }, + startListeningForInstantNavigationCookie: function() { + return startListeningForInstantNavigationCookie; + }, + transitionToCapturedSPA: function() { + return transitionToCapturedSPA; + }, + updateCapturedSPAToTree: function() { + return updateCapturedSPAToTree; + }, + waitForNavigationLockIfActive: function() { + return waitForNavigationLockIfActive; + } +}); +const _approuterheaders = require("../app-router-headers"); +const _useactionqueue = require("../use-action-queue"); +function parseCookieValue(raw) { + try { + const parsed = JSON.parse(raw); + if (Array.isArray(parsed) && parsed.length >= 3) { + const rawState = parsed[2]; + return rawState === null ? 'mpa' : 'spa'; + } + } catch {} + return 'pending'; +} +function writeCookieValue(value) { + if (typeof cookieStore === 'undefined') { + return; + } + // Read the existing cookie to preserve its attributes (domain, path), + // then write back with the new value. This updates the same cookie + // entry that the external actor created, regardless of how it was + // scoped. + cookieStore.get(_approuterheaders.NEXT_INSTANT_TEST_COOKIE).then((existing)=>{ + if (existing) { + const options = { + name: _approuterheaders.NEXT_INSTANT_TEST_COOKIE, + value: JSON.stringify(value), + path: existing.path ?? '/' + }; + if (existing.domain) { + options.domain = existing.domain; + } + cookieStore.set(options); + } + }); +} +let lockState = null; +function acquireLock() { + if (lockState !== null) { + return; + } + let resolve; + const promise = new Promise((r)=>{ + resolve = r; + }); + lockState = { + promise, + resolve: resolve + }; +} +function releaseLock() { + if (lockState !== null) { + lockState.resolve(); + lockState = null; + } +} +function startListeningForInstantNavigationCookie() { + if (process.env.__NEXT_EXPOSE_TESTING_API) { + // If the server served a static shell, this is an MPA page load + // while the lock is held. Transition to captured-MPA and acquire. + if (self.__next_instant_test) { + if (typeof cookieStore !== 'undefined') { + // If the cookie was already cleared during the MPA page + // transition, reload to get the full dynamic page. + cookieStore.get(_approuterheaders.NEXT_INSTANT_TEST_COOKIE).then((cookie)=>{ + if (!cookie) { + window.location.reload(); + } + }); + } + writeCookieValue([ + 1, + `c${Math.random()}`, + null + ]); + acquireLock(); + } + if (typeof cookieStore === 'undefined') { + return; + } + cookieStore.addEventListener('change', (event)=>{ + for (const cookie of event.changed){ + if (cookie.name === _approuterheaders.NEXT_INSTANT_TEST_COOKIE) { + const state = parseCookieValue(cookie.value ?? ''); + if (state !== 'pending') { + // Captured value — our own transition. Ignore. + return; + } + // Pending value — external actor starting a new lock scope. + if (lockState !== null) { + releaseLock(); + } + acquireLock(); + return; + } + } + for (const cookie of event.deleted){ + if (cookie.name === _approuterheaders.NEXT_INSTANT_TEST_COOKIE) { + releaseLock(); + (0, _useactionqueue.refreshOnInstantNavigationUnlock)(); + return; + } + } + }); + } +} +function transitionToCapturedSPA(fromTree, toTree) { + if (process.env.__NEXT_EXPOSE_TESTING_API) { + writeCookieValue([ + 1, + `c${Math.random()}`, + { + from: fromTree, + to: toTree + } + ]); + } +} +function updateCapturedSPAToTree(fromTree, toTree) { + if (process.env.__NEXT_EXPOSE_TESTING_API) { + writeCookieValue([ + 1, + `c${Math.random()}`, + { + from: fromTree, + to: toTree + } + ]); + } +} +function isNavigationLocked() { + if (process.env.__NEXT_EXPOSE_TESTING_API) { + return lockState !== null; + } + return false; +} +async function waitForNavigationLockIfActive() { + if (process.env.__NEXT_EXPOSE_TESTING_API) { + if (lockState !== null) { + await lockState.promise; + } + } +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=navigation-testing-lock.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/segment-cache/navigation.js b/build/node_modules/next/dist/client/components/segment-cache/navigation.js new file mode 100644 index 0000000..dc7041d --- /dev/null +++ b/build/node_modules/next/dist/client/components/segment-cache/navigation.js @@ -0,0 +1,597 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + completeHardNavigation: null, + completeSoftNavigation: null, + completeTraverseNavigation: null, + convertServerPatchToFullTree: null, + navigate: null, + navigateToKnownRoute: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + completeHardNavigation: function() { + return completeHardNavigation; + }, + completeSoftNavigation: function() { + return completeSoftNavigation; + }, + completeTraverseNavigation: function() { + return completeTraverseNavigation; + }, + convertServerPatchToFullTree: function() { + return convertServerPatchToFullTree; + }, + navigate: function() { + return navigate; + }, + navigateToKnownRoute: function() { + return navigateToKnownRoute; + } +}); +const _fetchserverresponse = require("../router-reducer/fetch-server-response"); +const _pprnavigations = require("../router-reducer/ppr-navigations"); +const _createhreffromurl = require("../router-reducer/create-href-from-url"); +const _constants = require("../../../lib/constants"); +const _cache = require("./cache"); +const _optimisticroutes = require("./optimistic-routes"); +const _cachekey = require("./cache-key"); +const _scheduler = require("./scheduler"); +const _types = require("./types"); +const _links = require("../links"); +const _routerreducertypes = require("../router-reducer/router-reducer-types"); +const _computechangedpath = require("../router-reducer/compute-changed-path"); +const _javascripturl = require("../../lib/javascript-url"); +const _bfcache = require("./bfcache"); +function navigate(state, url, currentUrl, currentRenderedSearch, currentCacheNode, currentFlightRouterState, nextUrl, freshnessPolicy, scrollBehavior, navigateType) { + // Instant Navigation Testing API: when the lock is active, ensure a + // prefetch task has been initiated before proceeding with the navigation. + // This guarantees that segment data requests are at least pending, even + // for routes that already have a cached route tree. Without this, the + // static shell might be incomplete because some segments were never + // requested. + if (process.env.__NEXT_EXPOSE_TESTING_API) { + const { isNavigationLocked } = require('./navigation-testing-lock'); + if (isNavigationLocked()) { + return ensurePrefetchThenNavigate(state, url, currentUrl, currentRenderedSearch, currentCacheNode, currentFlightRouterState, nextUrl, freshnessPolicy, scrollBehavior, navigateType); + } + } + return navigateImpl(state, url, currentUrl, currentRenderedSearch, currentCacheNode, currentFlightRouterState, nextUrl, freshnessPolicy, scrollBehavior, navigateType); +} +function navigateImpl(state, url, currentUrl, currentRenderedSearch, currentCacheNode, currentFlightRouterState, nextUrl, freshnessPolicy, scrollBehavior, navigateType) { + const now = Date.now(); + const href = url.href; + const cacheKey = (0, _cachekey.createCacheKey)(href, nextUrl); + const route = (0, _cache.readRouteCacheEntry)(now, cacheKey); + if (route !== null && route.status === _cache.EntryStatus.Fulfilled) { + // We have a matching prefetch. + return navigateUsingPrefetchedRouteTree(now, state, url, currentUrl, currentRenderedSearch, nextUrl, currentCacheNode, currentFlightRouterState, freshnessPolicy, scrollBehavior, navigateType, route); + } + // There was no matching route tree in the cache. Let's see if we can + // construct an "optimistic" route tree using the deprecated search-params + // based matching. This is only used when the new optimisticRouting flag is + // disabled. + // + // Do not construct an optimistic route tree if there was a cache hit, but + // the entry has a rejected status, since it may have been rejected due to a + // rewrite or redirect based on the search params. + // + // TODO: There are multiple reasons a prefetch might be rejected; we should + // track them explicitly and choose what to do here based on that. + if (!process.env.__NEXT_OPTIMISTIC_ROUTING) { + if (route === null || route.status !== _cache.EntryStatus.Rejected) { + const optimisticRoute = (0, _cache.deprecated_requestOptimisticRouteCacheEntry)(now, url, nextUrl); + if (optimisticRoute !== null) { + // We have an optimistic route tree. Proceed with the normal flow. + return navigateUsingPrefetchedRouteTree(now, state, url, currentUrl, currentRenderedSearch, nextUrl, currentCacheNode, currentFlightRouterState, freshnessPolicy, scrollBehavior, navigateType, optimisticRoute); + } + } + } + // There's no matching prefetch for this route in the cache. We must lazily + // fetch it from the server before we can perform the navigation. + // + // TODO: If this is a gesture navigation, instead of performing a + // dynamic request, we should do a runtime prefetch. + return navigateToUnknownRoute(now, state, url, currentUrl, currentRenderedSearch, nextUrl, currentCacheNode, currentFlightRouterState, freshnessPolicy, scrollBehavior, navigateType).catch(()=>{ + // If the navigation fails, return the current state + return state; + }); +} +function navigateToKnownRoute(now, state, url, canonicalUrl, navigationSeed, currentUrl, currentRenderedSearch, currentCacheNode, currentFlightRouterState, freshnessPolicy, nextUrl, scrollBehavior, navigateType, debugInfo, // The route cache entry used for this navigation, if it came from route +// prediction. Passed through so it can be marked as having a dynamic rewrite +// if the server returns a different pathname (indicating dynamic rewrite +// behavior). +// +// When null, the navigation did not use route prediction - either because +// the route was already fully cached, or it's a navigation that doesn't +// involve prediction (refresh, history traversal, server action, etc.). +// In these cases, if a mismatch occurs, we still mark the route as having a +// dynamic rewrite by traversing the known route tree (see +// dispatchRetryDueToTreeMismatch). +routeCacheEntry) { + // A version of navigate() that accepts the target route tree as an argument + // rather than reading it from the prefetch cache. + const accumulation = { + separateRefreshUrls: null, + scrollRef: null + }; + // We special case navigations to the exact same URL as the current location. + // It's a common UI pattern for apps to refresh when you click a link to the + // current page. So when this happens, we refresh the dynamic data in the page + // segments. + // + // Note that this does not apply if the any part of the hash or search query + // has changed. This might feel a bit weird but it makes more sense when you + // consider that the way to trigger this behavior is to click the same link + // multiple times. + // + // TODO: We should probably refresh the *entire* route when this case occurs, + // not just the page segments. Essentially treating it the same as a refresh() + // triggered by an action, which is the more explicit way of modeling the UI + // pattern described above. + // + // Also note that this only refreshes the dynamic data, not static/ cached + // data. If the page segment is fully static and prefetched, the request is + // skipped. (This is also how refresh() works.) + const isSamePageNavigation = url.href === currentUrl.href; + const task = (0, _pprnavigations.startPPRNavigation)(now, currentUrl, currentRenderedSearch, currentCacheNode, currentFlightRouterState, navigationSeed.routeTree, navigationSeed.metadataVaryPath, freshnessPolicy, navigationSeed.data, navigationSeed.head, navigationSeed.dynamicStaleAt, isSamePageNavigation, accumulation); + if (task !== null) { + if (freshnessPolicy !== _pprnavigations.FreshnessPolicy.Gesture) { + (0, _pprnavigations.spawnDynamicRequests)(task, url, nextUrl, freshnessPolicy, accumulation, routeCacheEntry, navigateType); + } + return completeSoftNavigation(state, url, nextUrl, task.route, task.node, navigationSeed.renderedSearch, canonicalUrl, navigateType, scrollBehavior, accumulation.scrollRef, debugInfo); + } + // Could not perform a SPA navigation. Revert to a full-page (MPA) navigation. + return completeHardNavigation(state, url, navigateType); +} +function navigateUsingPrefetchedRouteTree(now, state, url, currentUrl, currentRenderedSearch, nextUrl, currentCacheNode, currentFlightRouterState, freshnessPolicy, scrollBehavior, navigateType, route) { + const routeTree = route.tree; + const canonicalUrl = route.canonicalUrl + url.hash; + const renderedSearch = route.renderedSearch; + const prefetchSeed = { + renderedSearch, + routeTree, + metadataVaryPath: route.metadata.varyPath, + data: null, + head: null, + dynamicStaleAt: (0, _bfcache.computeDynamicStaleAt)(now, _bfcache.UnknownDynamicStaleTime) + }; + return navigateToKnownRoute(now, state, url, canonicalUrl, prefetchSeed, currentUrl, currentRenderedSearch, currentCacheNode, currentFlightRouterState, freshnessPolicy, nextUrl, scrollBehavior, navigateType, null, route); +} +// Used to request all the dynamic data for a route, rather than just a subset, +// e.g. during a refresh or a revalidation. Typically this gets constructed +// during the normal flow when diffing the route tree, but for an unprefetched +// navigation, where we don't know the structure of the target route, we use +// this instead. +const DynamicRequestTreeForEntireRoute = [ + '', + {}, + null, + 'refetch' +]; +async function navigateToUnknownRoute(now, state, url, currentUrl, currentRenderedSearch, nextUrl, currentCacheNode, currentFlightRouterState, freshnessPolicy, scrollBehavior, navigateType) { + // Runs when a navigation happens but there's no cached prefetch we can use. + // Don't bother to wait for a prefetch response; go straight to a full + // navigation that contains both static and dynamic data in a single stream. + // (This is unlike the old navigation implementation, which instead blocks + // the dynamic request until a prefetch request is received.) + // + // To avoid duplication of logic, we're going to pretend that the tree + // returned by the dynamic request is, in fact, a prefetch tree. Then we can + // use the same server response to write the actual data into the CacheNode + // tree. So it's the same flow as the "happy path" (prefetch, then + // navigation), except we use a single server response for both stages. + let dynamicRequestTree; + switch(freshnessPolicy){ + case _pprnavigations.FreshnessPolicy.Default: + case _pprnavigations.FreshnessPolicy.HistoryTraversal: + case _pprnavigations.FreshnessPolicy.Gesture: + dynamicRequestTree = currentFlightRouterState; + break; + case _pprnavigations.FreshnessPolicy.Hydration: + case _pprnavigations.FreshnessPolicy.RefreshAll: + case _pprnavigations.FreshnessPolicy.HMRRefresh: + dynamicRequestTree = DynamicRequestTreeForEntireRoute; + break; + default: + freshnessPolicy; + dynamicRequestTree = currentFlightRouterState; + break; + } + const promiseForDynamicServerResponse = (0, _fetchserverresponse.fetchServerResponse)(url, { + flightRouterState: dynamicRequestTree, + nextUrl + }); + const result = await promiseForDynamicServerResponse; + if (typeof result === 'string') { + // This is an MPA navigation. + const redirectUrl = new URL(result, location.origin); + return completeHardNavigation(state, redirectUrl, navigateType); + } + const { flightData, canonicalUrl, renderedSearch, couldBeIntercepted, supportsPerSegmentPrefetching, dynamicStaleTime, staticStageData, runtimePrefetchStream, responseHeaders, debugInfo } = result; + // Since the response format of dynamic requests and prefetches is slightly + // different, we'll need to massage the data a bit. Create FlightRouterState + // tree that simulates what we'd receive as the result of a prefetch. + const navigationSeed = convertServerPatchToFullTree(now, currentFlightRouterState, flightData, renderedSearch, dynamicStaleTime); + // Learn the route pattern so we can predict it for future navigations. + // hasDynamicRewrite is false because this is a fresh navigation to an + // unknown route - any rewrite detection happens during the traversal inside + // discoverKnownRoute. The hasDynamicRewrite param is only set to true when + // retrying after a tree mismatch (see dispatchRetryDueToTreeMismatch). + const metadataVaryPath = navigationSeed.metadataVaryPath; + if (metadataVaryPath !== null) { + (0, _optimisticroutes.discoverKnownRoute)(now, url.pathname, nextUrl, null, navigationSeed.routeTree, metadataVaryPath, couldBeIntercepted, (0, _createhreffromurl.createHrefFromUrl)(canonicalUrl), supportsPerSegmentPrefetching, false // hasDynamicRewrite - not a retry, rewrite detection happens during traversal + ); + if (staticStageData !== null) { + const { response: staticStageResponse, isResponsePartial } = staticStageData; + // Write the static stage of the response into the segment cache so that + // subsequent navigations can serve cached static segments instantly. + (0, _cache.getStaleAt)(now, staticStageResponse.s).then((staleAt)=>{ + const buildId = responseHeaders.get(_constants.NEXT_NAV_DEPLOYMENT_ID_HEADER) ?? staticStageResponse.b; + (0, _cache.writeStaticStageResponseIntoCache)(now, staticStageResponse.f, buildId, staticStageResponse.h, staleAt, currentFlightRouterState, renderedSearch, isResponsePartial); + }).catch(()=>{ + // The static stage processing failed. Not fatal — the navigation + // completed normally, we just won't write into the cache. + }); + } + if (runtimePrefetchStream !== null) { + (0, _cache.processRuntimePrefetchStream)(now, runtimePrefetchStream, currentFlightRouterState, renderedSearch).then((processed)=>{ + if (processed !== null) { + (0, _cache.writeDynamicRenderResponseIntoCache)(now, _types.FetchStrategy.PPRRuntime, processed.flightDatas, processed.buildId, processed.isResponsePartial, processed.headVaryParams, processed.staleAt, processed.navigationSeed, null); + } + }).catch(()=>{ + // The runtime prefetch cache write failed. Not fatal — the + // navigation completed normally, we just won't cache runtime data. + }); + } + } + return navigateToKnownRoute(now, state, url, (0, _createhreffromurl.createHrefFromUrl)(canonicalUrl), navigationSeed, currentUrl, currentRenderedSearch, currentCacheNode, currentFlightRouterState, freshnessPolicy, nextUrl, scrollBehavior, navigateType, debugInfo, // Unknown route navigations don't use route prediction - the route tree + // came directly from the server. If a mismatch occurs during dynamic data + // fetch, the retry handler will traverse the known route tree to mark the + // entry as having a dynamic rewrite. + null); +} +function completeHardNavigation(state, url, navigateType) { + if ((0, _javascripturl.isJavaScriptURLString)(url.href)) { + console.error('Next.js has blocked a javascript: URL as a security precaution.'); + return state; + } + const newState = { + canonicalUrl: url.origin === location.origin ? (0, _createhreffromurl.createHrefFromUrl)(url) : url.href, + pushRef: { + pendingPush: navigateType === 'push', + mpaNavigation: true, + preserveCustomHistoryState: false + }, + // TODO: None of the rest of these values are consistent with the incoming + // navigation. We rely on the fact that AppRouter will suspend and trigger + // a hard navigation before it accesses any of these values. But instead + // we should trigger the hard navigation and blocking any subsequent + // router updates without updating React. + renderedSearch: state.renderedSearch, + focusAndScrollRef: state.focusAndScrollRef, + cache: state.cache, + tree: state.tree, + nextUrl: state.nextUrl, + previousNextUrl: state.previousNextUrl, + debugInfo: null + }; + return newState; +} +function completeSoftNavigation(oldState, url, referringNextUrl, tree, cache, renderedSearch, canonicalUrl, navigateType, scrollBehavior, scrollRef, collectedDebugInfo) { + // The "Next-Url" is a special representation of the URL that Next.js + // uses to implement interception routes. + // TODO: Get rid of this extra traversal by computing this during the + // same traversal that computes the tree itself. We should also figure out + // what is the minimum information needed for the server to correctly + // intercept the route. + const changedPath = (0, _computechangedpath.computeChangedPath)(oldState.tree, tree); + const nextUrlForNewRoute = changedPath ? changedPath : oldState.nextUrl; + // This value is stored on the state as `previousNextUrl`; the naming is + // confusing. What it represents is the "Next-Url" header that was used to + // fetch the incoming route. It's essentially the refererer URL, but in a + // Next.js specific format. During refreshes, this is sent back to the server + // instead of the current route's "Next-Url" so that the same interception + // logic is applied as during the original navigation. + const previousNextUrl = referringNextUrl; + // Check if the only thing that changed was the hash fragment. + const oldUrl = new URL(oldState.canonicalUrl, url); + const onlyHashChange = // We don't need to compare the origins, because client-driven + // navigations are always same-origin. + url.pathname === oldUrl.pathname && url.search === oldUrl.search && url.hash !== oldUrl.hash; + // Determine whether and how the page should scroll after this + // navigation. + // + // By default, we scroll to the segments that were navigated to — i.e. + // segments in the new part of the route, as opposed to shared segments + // that were already part of the previous route. All newly navigated + // segments share a single ScrollRef. When they mount, the first one + // to mount initiates the scroll. They share a ref so that only one + // scroll happens per navigation. + // + // If a subsequent navigation produces new segments, those supersede + // any pending scroll from the previous navigation by invalidating its + // ScrollRef. If a navigation doesn't produce any new segments (e.g. + // a refresh where the route structure didn't change), any pending + // scrolls from previous navigations are unaffected. + // + // The branches below handle special cases layered on top of this + // default model. + let activeScrollRef; + let forceScroll; + if (scrollBehavior === _routerreducertypes.ScrollBehavior.NoScroll) { + // The user explicitly opted out of scrolling (e.g. scroll={false} + // on a Link or router.push). + // + // If this navigation created new scroll targets (scrollRef !== null), + // neutralize them. If it didn't, any prior scroll targets carried + // forward on the cache nodes via reuseSharedCacheNode remain active. + if (scrollRef !== null) { + scrollRef.current = false; + } + activeScrollRef = oldState.focusAndScrollRef.scrollRef; + forceScroll = false; + } else if (onlyHashChange) { + // Hash-only navigations should scroll regardless of per-node state. + // Create a fresh ref so the first segment to scroll consumes it. + // + // Invalidate any scroll ref from a prior navigation that hasn't + // been consumed yet. + const oldScrollRef = oldState.focusAndScrollRef.scrollRef; + if (oldScrollRef !== null) { + oldScrollRef.current = false; + } + // Also invalidate any per-node refs that were accumulated during + // this navigation's tree construction — the hash-only ref + // supersedes them. + if (scrollRef !== null) { + scrollRef.current = false; + } + activeScrollRef = { + current: true + }; + forceScroll = true; + } else { + // Default case. Use the accumulated scrollRef (may be null if no + // new segments were created). The handler checks per-node refs, so + // unchanged parallel route slots won't scroll. + activeScrollRef = scrollRef; + // If this navigation created new scroll targets, invalidate any + // pending scroll from a previous navigation. + if (scrollRef !== null) { + const oldScrollRef = oldState.focusAndScrollRef.scrollRef; + if (oldScrollRef !== null) { + oldScrollRef.current = false; + } + } + forceScroll = false; + } + const newState = { + canonicalUrl, + renderedSearch, + pushRef: { + pendingPush: navigateType === 'push', + mpaNavigation: false, + preserveCustomHistoryState: false + }, + focusAndScrollRef: { + scrollRef: activeScrollRef, + forceScroll, + onlyHashChange, + hashFragment: // Remove leading # and decode hash to make non-latin hashes work. + // + // Empty hash should trigger default behavior of scrolling layout into + // view. #top is handled in layout-router. + // + // Refer to `ScrollAndFocusHandler` for details on how this is used. + scrollBehavior !== _routerreducertypes.ScrollBehavior.NoScroll && url.hash !== '' ? decodeURIComponent(url.hash.slice(1)) : oldState.focusAndScrollRef.hashFragment + }, + cache, + tree, + nextUrl: nextUrlForNewRoute, + previousNextUrl, + debugInfo: collectedDebugInfo + }; + return newState; +} +function completeTraverseNavigation(state, url, renderedSearch, cache, tree, nextUrl) { + return { + // Set canonical url + canonicalUrl: (0, _createhreffromurl.createHrefFromUrl)(url), + renderedSearch, + pushRef: { + pendingPush: false, + mpaNavigation: false, + // Ensures that the custom history state that was set is preserved when applying this update. + preserveCustomHistoryState: true + }, + focusAndScrollRef: state.focusAndScrollRef, + cache, + // Restore provided tree + tree, + nextUrl, + // TODO: We need to restore previousNextUrl, too, which represents the + // Next-Url that was used to fetch the data. Anywhere we fetch using the + // canonical URL, there should be a corresponding Next-Url. + previousNextUrl: null, + debugInfo: null + }; +} +function convertServerPatchToFullTree(now, currentTree, flightData, renderedSearch, dynamicStaleTimeSeconds) { + // During a client navigation or prefetch, the server sends back only a patch + // for the parts of the tree that have changed. + // + // This applies the patch to the base tree to create a full representation of + // the resulting tree. + // + // The return type includes a full FlightRouterState tree and a full + // CacheNodeSeedData tree. (Conceptually these are the same tree, and should + // eventually be unified, but there's still lots of existing code that + // operates on FlightRouterState trees alone without the CacheNodeSeedData.) + // + // TODO: This similar to what apply-router-state-patch-to-tree does. It + // will eventually fully replace it. We should get rid of all the remaining + // places where we iterate over the server patch format. This should also + // eventually replace normalizeFlightData. + let baseTree = currentTree; + let baseData = null; + let head = null; + if (flightData !== null) { + for (const { segmentPath, tree: treePatch, seedData: dataPatch, head: headPatch } of flightData){ + const result = convertServerPatchToFullTreeImpl(baseTree, baseData, treePatch, dataPatch, segmentPath, renderedSearch, 0); + baseTree = result.tree; + baseData = result.data; + // This is the same for all patches per response, so just pick an + // arbitrary one + head = headPatch; + } + } + const finalFlightRouterState = baseTree; + // Convert the final FlightRouterState into a RouteTree type. + // + // TODO: Eventually, FlightRouterState will evolve to being a transport format + // only. The RouteTree type will become the main type used for dealing with + // routes on the client, and we'll store it in the state directly. + const acc = { + metadataVaryPath: null + }; + const routeTree = (0, _cache.convertRootFlightRouterStateToRouteTree)(finalFlightRouterState, renderedSearch, acc); + return { + routeTree, + metadataVaryPath: acc.metadataVaryPath, + data: baseData, + renderedSearch, + head, + dynamicStaleAt: (0, _bfcache.computeDynamicStaleAt)(now, dynamicStaleTimeSeconds) + }; +} +function convertServerPatchToFullTreeImpl(baseRouterState, baseData, treePatch, dataPatch, segmentPath, renderedSearch, index) { + if (index === segmentPath.length) { + // We reached the part of the tree that we need to patch. + return { + tree: treePatch, + data: dataPatch + }; + } + // segmentPath represents the parent path of subtree. It's a repeating + // pattern of parallel route key and segment: + // + // [string, Segment, string, Segment, string, Segment, ...] + // + // This path tells us which part of the base tree to apply the tree patch. + // + // NOTE: We receive the FlightRouterState patch in the same request as the + // seed data patch. Therefore we don't need to worry about diffing the segment + // values; we can assume the server sent us a correct result. + const updatedParallelRouteKey = segmentPath[index]; + // const segment: Segment = segmentPath[index + 1] <-- Not used, see note above + const baseTreeChildren = baseRouterState[1]; + const baseSeedDataChildren = baseData !== null ? baseData[1] : null; + const newTreeChildren = {}; + const newSeedDataChildren = {}; + for(const parallelRouteKey in baseTreeChildren){ + const childBaseRouterState = baseTreeChildren[parallelRouteKey]; + const childBaseSeedData = baseSeedDataChildren !== null ? baseSeedDataChildren[parallelRouteKey] ?? null : null; + if (parallelRouteKey === updatedParallelRouteKey) { + const result = convertServerPatchToFullTreeImpl(childBaseRouterState, childBaseSeedData, treePatch, dataPatch, segmentPath, renderedSearch, // Advance the index by two and keep cloning until we reach + // the end of the segment path. + index + 2); + newTreeChildren[parallelRouteKey] = result.tree; + newSeedDataChildren[parallelRouteKey] = result.data; + } else { + // This child is not being patched. Copy it over as-is. + newTreeChildren[parallelRouteKey] = childBaseRouterState; + newSeedDataChildren[parallelRouteKey] = childBaseSeedData; + } + } + let clonedTree; + let clonedSeedData; + // Clone all the fields except the children. + // Clone the FlightRouterState tree. Based on equivalent logic in + // apply-router-state-patch-to-tree, but should confirm whether we need to + // copy all of these fields. Not sure the server ever sends, e.g. the + // refetch marker. + clonedTree = [ + baseRouterState[0], + newTreeChildren + ]; + if (2 in baseRouterState) { + const compressedRefreshState = baseRouterState[2]; + if (compressedRefreshState !== undefined && compressedRefreshState !== null) { + // Since this part of the tree was patched with new data, any parent + // refresh states should be updated to reflect the new rendered search + // value. (The refresh state acts like a "context provider".) All pages + // within the same server response share the same renderedSearch value, + // but the same RouteTree could be composed from multiple different + // routes, and multiple responses. + clonedTree[2] = [ + compressedRefreshState[0], + renderedSearch + ]; + } + } + if (3 in baseRouterState) { + clonedTree[3] = baseRouterState[3]; + } + if (4 in baseRouterState) { + clonedTree[4] = baseRouterState[4]; + } + // Clone the CacheNodeSeedData tree. + const isEmptySeedDataPartial = true; + clonedSeedData = [ + null, + newSeedDataChildren, + null, + isEmptySeedDataPartial, + null + ]; + return { + tree: clonedTree, + data: clonedSeedData + }; +} +/** + * Instant Navigation Testing API: ensures a prefetch task has been initiated + * and completed before proceeding with the navigation. This guarantees that + * segment data requests are at least pending, even for routes whose route + * tree is already cached. + * + * After the prefetch completes, delegates to the normal navigation flow. + */ async function ensurePrefetchThenNavigate(state, url, currentUrl, currentRenderedSearch, currentCacheNode, currentFlightRouterState, nextUrl, freshnessPolicy, scrollBehavior, navigateType) { + const link = (0, _links.getLinkForCurrentNavigation)(); + const fetchStrategy = link !== null ? link.fetchStrategy : _types.FetchStrategy.PPR; + // Transition the cookie to captured-SPA immediately, before waiting + // for the prefetch. This ensures the devtools panel can update its UI + // right away, even if the prefetch takes time (e.g. dev compilation). + // The "to" tree starts as null and is filled in after the prefetch + // resolves and the navigation produces a new router state. + const { transitionToCapturedSPA, updateCapturedSPAToTree } = require('./navigation-testing-lock'); + transitionToCapturedSPA(currentFlightRouterState, null); + const cacheKey = (0, _cachekey.createCacheKey)(url.href, nextUrl); + await new Promise((resolve)=>{ + (0, _scheduler.schedulePrefetchTask)(cacheKey, currentFlightRouterState, fetchStrategy, _types.PrefetchPriority.Default, null, resolve // _onComplete callback + ); + }); + // Prefetch is complete. Proceed with the normal navigation flow, which + // will now find the route in the cache. + const result = await navigateImpl(state, url, currentUrl, currentRenderedSearch, currentCacheNode, currentFlightRouterState, nextUrl, freshnessPolicy, scrollBehavior, navigateType); + // Update the cookie with the resolved "to" tree so the devtools + // panel can display both routes immediately. + updateCapturedSPAToTree(currentFlightRouterState, result.tree); + return result; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=navigation.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/segment-cache/optimistic-routes.js b/build/node_modules/next/dist/client/components/segment-cache/optimistic-routes.js new file mode 100644 index 0000000..88b8f09 --- /dev/null +++ b/build/node_modules/next/dist/client/components/segment-cache/optimistic-routes.js @@ -0,0 +1,543 @@ +/** + * Optimistic Routing (Known Routes) + * + * This module enables the client to predict route structure for URLs that + * haven't been prefetched yet, based on previously learned route patterns. + * When successful, this allows skipping the route tree prefetch request + * entirely. + * + * The core idea is that many URLs map to the same route structure. For example, + * /blog/post-1 and /blog/post-2 both resolve to /blog/[slug]. Once we've + * prefetched one, we can predict the structure of the other. + * + * However, we can't always make this prediction. Static siblings (like + * /blog/featured alongside /blog/[slug]) have different route structures. + * When we learn a dynamic route, we also learn its static siblings so we + * know when NOT to apply the prediction. + * + * Main entry points: + * + * 1. discoverKnownRoute: Called after receiving a route tree from the server. + * Traverses the route tree, compares URL parts to segments, and populates + * the known route tree if they match. Routes are always inserted into the + * cache. + * + * 2. matchKnownRoute: Called when looking up a route with no cache entry. + * Matches the candidate URL against learned patterns. Returns a synthetic + * cache entry if successful, or null to fall back to server resolution. + * + * Rewrite detection happens during traversal: if a URL path part doesn't match + * the corresponding route segment, we stop populating the known route tree + * (since the mapping is incorrect) but still insert the route into the cache. + * + * The known route tree is append-only with no eviction. Route patterns are + * derived from the filesystem, so they don't become stale within a session. + * Cache invalidation on deploy clears everything anyway. + * + * Current limitations (deopt to server resolution): + * - Rewrites: Detected during traversal (tree not populated, but route cached) + * - Intercepted routes: The route tree varies by referrer (Next-Url header), + * so we can't predict the correct structure from the URL alone. Patterns are + * still stored during discovery (so the trie stays populated for non- + * intercepted siblings), but matching bails out when the pattern is marked + * as interceptable. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + discoverKnownRoute: null, + matchKnownRoute: null, + resetKnownRoutes: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + discoverKnownRoute: function() { + return discoverKnownRoute; + }, + matchKnownRoute: function() { + return matchKnownRoute; + }, + resetKnownRoutes: function() { + return resetKnownRoutes; + } +}); +const _cache = require("./cache"); +const _routeparams = require("../../route-params"); +const _varypath = require("./vary-path"); +function createEmptyPart() { + return { + staticChildren: null, + dynamicChild: null, + dynamicChildParamName: null, + dynamicChildParamType: null, + pattern: null + }; +} +// The root of the known route tree. +let knownRouteTreeRoot = createEmptyPart(); +function discoverKnownRoute(now, pathname, nextUrl, pendingEntry, routeTree, metadataVaryPath, couldBeIntercepted, canonicalUrl, supportsPerSegmentPrefetching, hasDynamicRewrite) { + const tree = routeTree; + const pathnameParts = pathname.split('/').filter((p)=>p !== ''); + const firstPart = pathnameParts.length > 0 ? pathnameParts[0] : null; + const remainingParts = pathnameParts.length > 0 ? pathnameParts.slice(1) : []; + if (pendingEntry !== null) { + // Fulfill the pending entry first + const fulfilledEntry = (0, _cache.fulfillRouteCacheEntry)(now, pendingEntry, tree, metadataVaryPath, couldBeIntercepted, canonicalUrl, supportsPerSegmentPrefetching); + if (hasDynamicRewrite) { + fulfilledEntry.hasDynamicRewrite = true; + } + // Populate the known route tree (handles rewrite detection internally). + // The entry is already in the cache; this just stores it as a pattern + // if the URL matches the route structure. + discoverKnownRoutePart(knownRouteTreeRoot, tree, firstPart, remainingParts, fulfilledEntry, now, pathname, nextUrl, tree, metadataVaryPath, couldBeIntercepted, canonicalUrl, supportsPerSegmentPrefetching, hasDynamicRewrite); + return fulfilledEntry; + } + // No pending entry - discoverKnownRoutePart will create one and insert it + // into the cache, or return an existing pattern if one exists. + return discoverKnownRoutePart(knownRouteTreeRoot, tree, firstPart, remainingParts, null, now, pathname, nextUrl, tree, metadataVaryPath, couldBeIntercepted, canonicalUrl, supportsPerSegmentPrefetching, hasDynamicRewrite); +} +/** + * Gets or creates the dynamic child node for a KnownRoutePart. + * A node can have at most one dynamic child (you can't have both [slug] and + * [id] at the same route level), so we either return existing or create new. + */ function discoverDynamicChild(part, paramName, paramType) { + if (part.dynamicChild !== null) { + return part.dynamicChild; + } + const newChild = createEmptyPart(); + // Type assertion needed because we're converting from "without" to "with" + // dynamic child variant. + const mutablePart = part; + mutablePart.dynamicChild = newChild; + mutablePart.dynamicChildParamName = paramName; + mutablePart.dynamicChildParamType = paramType; + return newChild; +} +/** + * Recursive workhorse for discoverKnownRoute. + * + * Walks the route tree and URL parts in parallel, building out the known + * route tree as it goes. At each step: + * 1. Determines if the current segment appears in the URL (dynamic/static) + * 2. Validates URL matches route structure (detects rewrites) + * 3. Creates/updates the corresponding KnownRoutePart node + * 4. Records static siblings for future matching + * 5. Recurses into child slots (parallel routes) + * + * If a URL/route mismatch is detected (rewrite), we stop building the known + * route tree but still cache the route entry for direct lookup. + */ function discoverKnownRoutePart(parentKnownRoutePart, routeTree, urlPart, remainingParts, existingEntry, // These are passed through unchanged for entry creation at the leaf +now, pathname, nextUrl, fullTree, metadataVaryPath, couldBeIntercepted, canonicalUrl, supportsPerSegmentPrefetching, hasDynamicRewrite) { + const segment = routeTree.segment; + let segmentAppearsInURL; + let paramName = null; + let paramType = null; + let staticSiblings = null; + if (typeof segment === 'string') { + segmentAppearsInURL = (0, _routeparams.doesStaticSegmentAppearInURL)(segment); + } else { + // Dynamic segment tuple: [paramName, paramCacheKey, paramType, staticSiblings] + paramName = segment[0]; + paramType = segment[2]; + staticSiblings = segment[3]; + segmentAppearsInURL = true; + } + let knownRoutePart = parentKnownRoutePart; + let nextUrlPart = urlPart; + let nextRemainingParts = remainingParts; + if (segmentAppearsInURL) { + // Check for mismatch: if this is a static segment, the URL part must match + if (paramName === null && urlPart !== segment) { + // URL doesn't match route structure (likely a rewrite). + // Don't populate the known route tree, just write the route into the + // cache and return immediately. + if (existingEntry !== null) { + return existingEntry; + } + return (0, _cache.writeRouteIntoCache)(now, pathname, nextUrl, fullTree, metadataVaryPath, couldBeIntercepted, canonicalUrl, supportsPerSegmentPrefetching); + } + // URL matches route structure. Build the known route tree. + if (paramName !== null && paramType !== null) { + // Dynamic segment + knownRoutePart = discoverDynamicChild(parentKnownRoutePart, paramName, paramType); + // Record static siblings as placeholder parts. + // IMPORTANT: We use the null vs Map distinction to track whether + // siblings are known at this level: + // - staticChildren: null = siblings unknown (can't safely match dynamic) + // - staticChildren: Map = siblings known (even if empty) + // This matters in dev mode where webpack may not know all siblings yet. + if (staticSiblings !== null) { + // Siblings are known - ensure we have a Map (even if empty) + if (parentKnownRoutePart.staticChildren === null) { + parentKnownRoutePart.staticChildren = new Map(); + } + for (const sibling of staticSiblings){ + if (!parentKnownRoutePart.staticChildren.has(sibling)) { + parentKnownRoutePart.staticChildren.set(sibling, createEmptyPart()); + } + } + } + } else { + // Static segment + if (parentKnownRoutePart.staticChildren === null) { + parentKnownRoutePart.staticChildren = new Map(); + } + let existingChild = parentKnownRoutePart.staticChildren.get(urlPart); + if (existingChild === undefined) { + existingChild = createEmptyPart(); + parentKnownRoutePart.staticChildren.set(urlPart, existingChild); + } + knownRoutePart = existingChild; + } + // Advance to next URL part + nextUrlPart = remainingParts.length > 0 ? remainingParts[0] : null; + nextRemainingParts = remainingParts.length > 0 ? remainingParts.slice(1) : []; + } + // else: Transparent segment (route group, __PAGE__, etc.) + // Stay at the same known route part, don't advance URL parts + // Recurse into child routes. A route tree can have multiple parallel routes + // (e.g., @modal alongside children). Each parallel route is a separate + // branch, but they all share the same URL - we just need to traverse all + // branches to build out the known route tree. + const slots = routeTree.slots; + let resultFromChildren = null; + if (slots !== null) { + for(const parallelRouteKey in slots){ + const childRouteTree = slots[parallelRouteKey]; + // Skip branches with refreshState set - these were reused from a + // different route (e.g., a "default" parallel slot) and don't represent + // the actual route structure for this URL. + if (childRouteTree.refreshState !== null) { + continue; + } + const result = discoverKnownRoutePart(knownRoutePart, childRouteTree, nextUrlPart, nextRemainingParts, existingEntry, now, pathname, nextUrl, fullTree, metadataVaryPath, couldBeIntercepted, canonicalUrl, supportsPerSegmentPrefetching, hasDynamicRewrite); + // All parallel route branches share the same URL, so they should all + // reach compatible leaf nodes. We capture any result. + resultFromChildren = result; + } + if (resultFromChildren !== null) { + return resultFromChildren; + } + // Defensive fallback: no children returned a result. This shouldn't happen + // for valid route trees, but handle it gracefully. + if (existingEntry !== null) { + return existingEntry; + } + return (0, _cache.writeRouteIntoCache)(now, pathname, nextUrl, fullTree, metadataVaryPath, couldBeIntercepted, canonicalUrl, supportsPerSegmentPrefetching); + } + // Reached a page node. Create/get the route cache entry and store as a + // pattern. First, check if there's already a pattern for this route. + if (knownRoutePart.pattern !== null) { + // If this route has a dynamic rewrite, mark the existing pattern. + if (hasDynamicRewrite) { + knownRoutePart.pattern.hasDynamicRewrite = true; + } + return knownRoutePart.pattern; + } + // Get or create the entry + let entry; + if (existingEntry !== null) { + // Already have a fulfilled entry, use it directly. It's already in the + // route cache map. + entry = existingEntry; + } else { + // Create the entry and insert it into the route cache map. + entry = (0, _cache.writeRouteIntoCache)(now, pathname, nextUrl, fullTree, metadataVaryPath, couldBeIntercepted, canonicalUrl, supportsPerSegmentPrefetching); + } + if (hasDynamicRewrite) { + entry.hasDynamicRewrite = true; + } + // Store as pattern + knownRoutePart.pattern = entry; + return entry; +} +function matchKnownRoute(pathname, search) { + const pathnameParts = pathname.split('/').filter((p)=>p !== ''); + const resolvedParams = new Map(); + const match = matchKnownRoutePart(knownRouteTreeRoot, pathnameParts, 0, resolvedParams); + if (match === null) { + return null; + } + const matchedPart = match.part; + const pattern = match.pattern; + // If the pattern could be intercepted, we can't safely use it for prediction. + // Interception routes resolve to different route trees depending on the + // referrer (the Next-Url header), which means the same URL can map to + // different page components depending on where the navigation originated. + // Since the known route tree only stores a single pattern per URL shape, we + // can't distinguish between the intercepted and non-intercepted cases, so we + // bail out to server resolution. + // + // TODO: We could store interception behavior in the known route tree itself + // (e.g., which segments use interception markers and what they resolve to). + // With enough information embedded in the trie, we could match interception + // routes entirely on the client without a server round-trip. + if (pattern.couldBeIntercepted) { + return null; + } + // "Reify" the pattern: clone the template tree with concrete param values. + // This substitutes resolved params (e.g., slug: "hello") into dynamic + // segments and recomputes vary paths for correct segment cache keying. + const acc = { + metadataVaryPath: null + }; + const reifiedTree = reifyRouteTree(pattern.tree, resolvedParams, search, null, acc); + // The metadata tree is a flat page node without the intermediate layout + // structure. Clone it with the updated metadata vary path collected during + // the main tree traversal. + const metadataVaryPath = acc.metadataVaryPath; + if (metadataVaryPath === null) { + // This shouldn't be reachable for a valid route tree. + return null; + } + const reifiedMetadata = (0, _cache.createMetadataRouteTree)(metadataVaryPath); + // Create a synthetic (predicted) entry and store it as the new pattern. + // + // Why replace the pattern? We intentionally update the pattern with this + // synthetic entry so that if our prediction was wrong (server returns a + // different pathname due to dynamic rewrite), the entry gets marked with + // hasDynamicRewrite. Future predictions for this route will see the flag + // and bail out to server resolution instead of making the same mistake. + const syntheticEntry = { + canonicalUrl: pathname + search, + status: _cache.EntryStatus.Fulfilled, + blockedTasks: null, + tree: reifiedTree, + metadata: reifiedMetadata, + couldBeIntercepted: pattern.couldBeIntercepted, + supportsPerSegmentPrefetching: pattern.supportsPerSegmentPrefetching, + hasDynamicRewrite: false, + renderedSearch: search, + ref: null, + size: pattern.size, + staleAt: pattern.staleAt, + version: pattern.version + }; + matchedPart.pattern = syntheticEntry; + return syntheticEntry; +} +/** + * Recursively matches a URL against the known route tree. + * + * Matching priority (most specific first): + * 1. Static children - exact path segment match + * 2. Dynamic child - [param], [...param], [[...param]] + * 3. Direct pattern - when no more URL parts remain + * + * Collects resolved param values in resolvedParams as it traverses. + * Returns null if no match found (caller should fall back to server). + */ function matchKnownRoutePart(part, pathnameParts, partIndex, resolvedParams) { + const urlPart = partIndex < pathnameParts.length ? pathnameParts[partIndex] : null; + // If staticChildren is null, we don't know what static routes exist at this + // level. This happens in webpack dev mode where routes are compiled + // on-demand. We can't safely match a dynamicChild because the URL part might + // be a static sibling we haven't discovered yet. Example: We know + // /blog/[slug] exists, but haven't compiled /blog/featured. A request for + // /blog/featured would incorrectly match /blog/[slug]. + if (part.staticChildren === null) { + // The only safe match is a direct pattern when no URL parts remain. + if (urlPart === null) { + const pattern = part.pattern; + if (pattern !== null && !pattern.hasDynamicRewrite) { + return { + part, + pattern + }; + } + } + return null; + } + // Static children take priority over dynamic. This ensures /blog/featured + // matches its own route rather than /blog/[slug]. + if (urlPart !== null) { + const staticChild = part.staticChildren.get(urlPart); + if (staticChild !== undefined) { + // Check if this is an "unknown" placeholder part. These are created when + // we learn about static siblings (from the route tree's staticSiblings + // field) but haven't prefetched them yet. We know the path exists but + // don't know its structure, so we can't predict it. + if (staticChild.pattern === null && staticChild.dynamicChild === null && staticChild.staticChildren === null) { + // Bail out - server must resolve this route. + return null; + } + const match = matchKnownRoutePart(staticChild, pathnameParts, partIndex + 1, resolvedParams); + if (match !== null) { + return match; + } + // Static child is a real node (not a placeholder) but its subtree + // didn't match the remaining URL parts. This means the route exists + // in the static subtree but hasn't been fully discovered yet. Do not + // fall through to try the dynamic child — the static match is + // authoritative. Bail out to server resolution. + return null; + } + } + // Try dynamic child + if (part.dynamicChild !== null) { + const dynamicPart = part.dynamicChild; + const paramName = part.dynamicChildParamName; + const paramType = part.dynamicChildParamType; + const dynamicPattern = dynamicPart.pattern; + switch(paramType){ + case 'c': + // Required catch-all [...param]: consumes 1+ URL parts + if (dynamicPattern !== null && !dynamicPattern.hasDynamicRewrite && urlPart !== null) { + resolvedParams.set(paramName, pathnameParts.slice(partIndex)); + return { + part: dynamicPart, + pattern: dynamicPattern + }; + } + break; + case 'oc': + // Optional catch-all [[...param]]: consumes 0+ URL parts + if (dynamicPattern !== null && !dynamicPattern.hasDynamicRewrite) { + if (urlPart !== null) { + resolvedParams.set(paramName, pathnameParts.slice(partIndex)); + return { + part: dynamicPart, + pattern: dynamicPattern + }; + } + // urlPart is null - can match with zero parts, but a direct pattern + // (e.g., page.tsx alongside [[...param]]) takes precedence. + if (part.pattern === null || part.pattern.hasDynamicRewrite) { + resolvedParams.set(paramName, []); + return { + part: dynamicPart, + pattern: dynamicPattern + }; + } + } + break; + case 'd': + // Regular dynamic [param]: consumes exactly 1 URL part. + // Unlike catch-all which terminates here, regular dynamic must + // continue recursing to find the leaf pattern. + if (urlPart !== null) { + resolvedParams.set(paramName, urlPart); + return matchKnownRoutePart(dynamicPart, pathnameParts, partIndex + 1, resolvedParams); + } + break; + // Intercepted routes use relative path markers like (.), (..), (...) + // Their behavior depends on navigation context (soft vs hard nav), + // so we can't predict them client-side. Defer to server. + case 'ci(..)(..)': + case 'ci(.)': + case 'ci(..)': + case 'ci(...)': + case 'di(..)(..)': + case 'di(.)': + case 'di(..)': + case 'di(...)': + return null; + default: + paramType; + } + } + // No children matched. If we've consumed all URL parts, check for a direct + // pattern at this node (the route terminates here). + if (urlPart === null) { + const pattern = part.pattern; + if (pattern !== null && !pattern.hasDynamicRewrite) { + return { + part, + pattern + }; + } + } + return null; +} +/** + * "Reify" means to make concrete - we take an abstract pattern (the template + * route tree) and produce a concrete instance with actual param values. + * + * This function clones a RouteTree, substituting dynamic segment values from + * resolvedParams and computing new vary paths. The vary path encodes param + * values so segment cache entries can be correctly keyed. + * + * Example: Pattern for /blog/[slug] with resolvedParams { slug: "hello" } + * produces a tree where segment [slug] has cacheKey "hello". + */ function reifyRouteTree(pattern, resolvedParams, search, parentPartialVaryPath, acc) { + const originalSegment = pattern.segment; + let newSegment = originalSegment; + let partialVaryPath; + if (typeof originalSegment !== 'string') { + // Dynamic segment: compute new cache key and append to partial vary path + const paramName = originalSegment[0]; + const paramType = originalSegment[2]; + const staticSiblings = originalSegment[3]; + const newValue = resolvedParams.get(paramName); + if (newValue !== undefined) { + const newCacheKey = Array.isArray(newValue) ? newValue.join('/') : newValue; + newSegment = [ + paramName, + newCacheKey, + paramType, + staticSiblings + ]; + partialVaryPath = (0, _varypath.appendLayoutVaryPath)(parentPartialVaryPath, newCacheKey, paramName); + } else { + // Param not found in resolvedParams - keep original and inherit partial + // TODO: This should never happen. Bail out with null. + partialVaryPath = parentPartialVaryPath; + } + } else { + // Static segment: inherit partial vary path from parent + partialVaryPath = parentPartialVaryPath; + } + // Recurse into children with the (possibly updated) partial vary path + let newSlots = null; + if (pattern.slots !== null) { + newSlots = {}; + for(const key in pattern.slots){ + newSlots[key] = reifyRouteTree(pattern.slots[key], resolvedParams, search, partialVaryPath, acc); + } + } + if (pattern.isPage) { + // Page segment: finalize with search params + const newVaryPath = (0, _varypath.finalizePageVaryPath)(pattern.requestKey, search, partialVaryPath); + // Collect metadata vary path (first page wins, same as original algorithm) + if (acc.metadataVaryPath === null) { + acc.metadataVaryPath = (0, _varypath.finalizeMetadataVaryPath)(pattern.requestKey, search, partialVaryPath); + } + return { + requestKey: pattern.requestKey, + segment: newSegment, + refreshState: pattern.refreshState, + slots: newSlots, + prefetchHints: pattern.prefetchHints, + isPage: true, + varyPath: newVaryPath + }; + } else { + // Layout segment: finalize without search params + const newVaryPath = (0, _varypath.finalizeLayoutVaryPath)(pattern.requestKey, partialVaryPath); + return { + requestKey: pattern.requestKey, + segment: newSegment, + refreshState: pattern.refreshState, + slots: newSlots, + prefetchHints: pattern.prefetchHints, + isPage: false, + varyPath: newVaryPath + }; + } +} +function resetKnownRoutes() { + knownRouteTreeRoot = createEmptyPart(); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=optimistic-routes.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/segment-cache/prefetch.js b/build/node_modules/next/dist/client/components/segment-cache/prefetch.js new file mode 100644 index 0000000..ce80c4e --- /dev/null +++ b/build/node_modules/next/dist/client/components/segment-cache/prefetch.js @@ -0,0 +1,31 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "prefetch", { + enumerable: true, + get: function() { + return prefetch; + } +}); +const _approuterutils = require("../app-router-utils"); +const _cachekey = require("./cache-key"); +const _scheduler = require("./scheduler"); +const _types = require("./types"); +function prefetch(href, nextUrl, treeAtTimeOfPrefetch, fetchStrategy, onInvalidate) { + const url = (0, _approuterutils.createPrefetchURL)(href); + if (url === null) { + // This href should not be prefetched. + return; + } + const cacheKey = (0, _cachekey.createCacheKey)(url.href, nextUrl); + (0, _scheduler.schedulePrefetchTask)(cacheKey, treeAtTimeOfPrefetch, fetchStrategy, _types.PrefetchPriority.Default, onInvalidate); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=prefetch.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/segment-cache/scheduler.js b/build/node_modules/next/dist/client/components/segment-cache/scheduler.js new file mode 100644 index 0000000..500e237 --- /dev/null +++ b/build/node_modules/next/dist/client/components/segment-cache/scheduler.js @@ -0,0 +1,1249 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + cancelPrefetchTask: null, + isPrefetchTaskDirty: null, + pingPrefetchScheduler: null, + pingPrefetchTask: null, + reschedulePrefetchTask: null, + schedulePrefetchTask: null, + startRevalidationCooldown: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + cancelPrefetchTask: function() { + return cancelPrefetchTask; + }, + isPrefetchTaskDirty: function() { + return isPrefetchTaskDirty; + }, + pingPrefetchScheduler: function() { + return pingPrefetchScheduler; + }, + pingPrefetchTask: function() { + return pingPrefetchTask; + }, + reschedulePrefetchTask: function() { + return reschedulePrefetchTask; + }, + schedulePrefetchTask: function() { + return schedulePrefetchTask; + }, + startRevalidationCooldown: function() { + return startRevalidationCooldown; + } +}); +const _approutertypes = require("../../../shared/lib/app-router-types"); +const _matchsegments = require("../match-segments"); +const _cache = require("./cache"); +const _cachekey = require("./cache-key"); +const _types = require("./types"); +const _segment = require("../../../shared/lib/segment"); +const _lru = require("./lru"); +const scheduleMicrotask = typeof queueMicrotask === 'function' ? queueMicrotask : (fn)=>Promise.resolve().then(fn).catch((error)=>setTimeout(()=>{ + throw error; + })); +const taskHeap = []; +let inProgressRequests = 0; +let sortIdCounter = 0; +let didScheduleMicrotask = false; +// The most recently hovered (or touched, etc) link, i.e. the most recent task +// scheduled at Intent priority. There's only ever a single task at Intent +// priority at a time. We reserve special network bandwidth for this task only. +let mostRecentlyHoveredLink = null; +// CDN cache propagation delay after revalidation (in milliseconds) +const REVALIDATION_COOLDOWN_MS = 300; +// Timeout handle for the revalidation cooldown. When non-null, prefetch +// requests are blocked to allow CDN cache propagation. +let revalidationCooldownTimeoutHandle = null; +function startRevalidationCooldown() { + // Clear any existing timeout in case multiple revalidations happen + // in quick succession. + if (revalidationCooldownTimeoutHandle !== null) { + clearTimeout(revalidationCooldownTimeoutHandle); + } + // Schedule the cooldown to expire after the delay. + revalidationCooldownTimeoutHandle = setTimeout(()=>{ + revalidationCooldownTimeoutHandle = null; + // Retry the prefetch queue now that the cooldown has expired. + pingPrefetchScheduler(); + }, REVALIDATION_COOLDOWN_MS); +} +function schedulePrefetchTask(key, treeAtTimeOfPrefetch, fetchStrategy, priority, onInvalidate, _onComplete) { + // Spawn a new prefetch task + const task = { + key, + treeAtTimeOfPrefetch, + routeCacheVersion: (0, _cache.getCurrentRouteCacheVersion)(), + segmentCacheVersion: (0, _cache.getCurrentSegmentCacheVersion)(), + priority, + phase: 1, + hasBackgroundWork: false, + spawnedRuntimePrefetches: null, + fetchStrategy, + sortId: sortIdCounter++, + isCanceled: false, + onInvalidate, + _heapIndex: -1 + }; + if (process.env.__NEXT_EXPOSE_TESTING_API) { + task._onComplete = _onComplete; + } + trackMostRecentlyHoveredLink(task); + heapPush(taskHeap, task); + // Schedule an async task to process the queue. + // + // The main reason we process the queue in an async task is for batching. + // It's common for a single JS task/event to trigger multiple prefetches. + // By deferring to a microtask, we only process the queue once per JS task. + // If they have different priorities, it also ensures they are processed in + // the optimal order. + pingPrefetchScheduler(); + return task; +} +function cancelPrefetchTask(task) { + // Remove the prefetch task from the queue. If the task already completed, + // then this is a no-op. + // + // We must also explicitly mark the task as canceled so that a blocked task + // does not get added back to the queue when it's pinged by the network. + task.isCanceled = true; + heapDelete(taskHeap, task); + if (process.env.__NEXT_EXPOSE_TESTING_API) { + // Call completion callback. In practice this shouldn't be reached for + // test-initiated prefetches since cancellation is only used by the Link + // component when elements scroll out of viewport. + const onComplete = task._onComplete; + task._onComplete = undefined; + onComplete?.(); + } +} +function reschedulePrefetchTask(task, treeAtTimeOfPrefetch, fetchStrategy, priority) { + // Bump the prefetch task to the top of the queue, as if it were a fresh + // task. This is essentially the same as canceling the task and scheduling + // a new one, except it reuses the original object. + // + // The primary use case is to increase the priority of a Link-initated + // prefetch on hover. + // + // Note: _onComplete is not reset here because it's preserved on the same + // task object. When the rescheduled task completes, the original callback + // will still be invoked. + // Un-cancel the task, in case it was previously canceled. + task.isCanceled = false; + task.phase = 1; + // Assign a new sort ID to move it ahead of all other tasks at the same + // priority level. (Higher sort IDs are processed first.) + task.sortId = sortIdCounter++; + task.priority = // If this task is the most recently hovered link, maintain its + // Intent priority, even if the rescheduled priority is lower. + task === mostRecentlyHoveredLink ? _types.PrefetchPriority.Intent : priority; + task.treeAtTimeOfPrefetch = treeAtTimeOfPrefetch; + task.fetchStrategy = fetchStrategy; + trackMostRecentlyHoveredLink(task); + if (task._heapIndex !== -1) { + // The task is already in the queue. + heapResift(taskHeap, task); + } else { + heapPush(taskHeap, task); + } + pingPrefetchScheduler(); +} +function isPrefetchTaskDirty(task, nextUrl, tree) { + // This is used to quickly bail out of a prefetch task if the result is + // guaranteed to not have changed since the task was initiated. This is + // strictly an optimization — theoretically, if it always returned true, no + // behavior should change because a full prefetch task will effectively + // perform the same checks. + return task.routeCacheVersion !== (0, _cache.getCurrentRouteCacheVersion)() || task.segmentCacheVersion !== (0, _cache.getCurrentSegmentCacheVersion)() || task.treeAtTimeOfPrefetch !== tree || task.key.nextUrl !== nextUrl; +} +function trackMostRecentlyHoveredLink(task) { + // Track the mostly recently hovered link, i.e. the most recently scheduled + // task at Intent priority. There must only be one such task at a time. + if (task.priority === _types.PrefetchPriority.Intent && task !== mostRecentlyHoveredLink) { + if (mostRecentlyHoveredLink !== null) { + // Bump the previously hovered link's priority down to Default. + if (mostRecentlyHoveredLink.priority !== _types.PrefetchPriority.Background) { + mostRecentlyHoveredLink.priority = _types.PrefetchPriority.Default; + heapResift(taskHeap, mostRecentlyHoveredLink); + } + } + mostRecentlyHoveredLink = task; + } +} +function pingPrefetchScheduler() { + if (didScheduleMicrotask) { + // Already scheduled a task to process the queue + return; + } + didScheduleMicrotask = true; + scheduleMicrotask(processQueueInMicrotask); +} +/** + * Checks if we've exceeded the maximum number of concurrent prefetch requests, + * to avoid saturating the browser's internal network queue. This is a + * cooperative limit — prefetch tasks should check this before issuing + * new requests. + * + * Also checks if we're within the revalidation cooldown window, during which + * prefetch requests are delayed to allow CDN cache propagation. + */ function hasNetworkBandwidth(task) { + // Check if we're within the revalidation cooldown window + if (revalidationCooldownTimeoutHandle !== null) { + // We're within the cooldown window. Return false to prevent prefetching. + // When the cooldown expires, the timeout will call ensureWorkIsScheduled() + // to retry the queue. + return false; + } + // TODO: Also check if there's an in-progress navigation. We should never + // add prefetch requests to the network queue if an actual navigation is + // taking place, to ensure there's sufficient bandwidth for render-blocking + // data and resources. + // TODO: Consider reserving some amount of bandwidth for static prefetches. + if (task.priority === _types.PrefetchPriority.Intent) { + // The most recently hovered link is allowed to exceed the default limit. + // + // The goal is to always have enough bandwidth to start a new prefetch + // request when hovering over a link. + // + // However, because we don't abort in-progress requests, it's still possible + // we'll run out of bandwidth. When links are hovered in quick succession, + // there could be multiple hover requests running simultaneously. + return inProgressRequests < 12; + } + // The default limit is lower than the limit for a hovered link. + return inProgressRequests < 4; +} +function spawnPrefetchSubtask(prefetchSubtask) { + // When the scheduler spawns an async task, we don't await its result. + // Instead, the async task writes its result directly into the cache, then + // pings the scheduler to continue. + // + // We process server responses streamingly, so the prefetch subtask will + // likely resolve before we're finished receiving all the data. The subtask + // result includes a promise that resolves once the network connection is + // closed. The scheduler uses this to control network bandwidth by tracking + // and limiting the number of concurrent requests. + inProgressRequests++; + return prefetchSubtask.then((result)=>{ + if (result === null) { + // The prefetch task errored before it could start processing the + // network stream. Assume the connection is closed. + onPrefetchConnectionClosed(); + return null; + } + // Wait for the connection to close before freeing up more bandwidth. + result.closed.then(onPrefetchConnectionClosed); + return result.value; + }); +} +function onPrefetchConnectionClosed() { + inProgressRequests--; + // Notify the scheduler that we have more bandwidth, and can continue + // processing tasks. + pingPrefetchScheduler(); +} +function pingPrefetchTask(task) { + // "Ping" a prefetch that's already in progress to notify it of new data. + if (// Check if prefetch was canceled. + task.isCanceled || // Check if prefetch is already queued. + task._heapIndex !== -1) { + return; + } + // Add the task back to the queue. + heapPush(taskHeap, task); + pingPrefetchScheduler(); +} +function processQueueInMicrotask() { + didScheduleMicrotask = false; + // We aim to minimize how often we read the current time. Since nearly all + // functions in the prefetch scheduler are synchronous, we can read the time + // once and pass it as an argument wherever it's needed. + const now = Date.now(); + // Process the task queue until we run out of network bandwidth. + let task = heapPeek(taskHeap); + while(task !== null && hasNetworkBandwidth(task)){ + task.routeCacheVersion = (0, _cache.getCurrentRouteCacheVersion)(); + task.segmentCacheVersion = (0, _cache.getCurrentSegmentCacheVersion)(); + const exitStatus = pingRoute(now, task); + // These fields are only valid for a single attempt. Reset them after each + // iteration of the task queue. + const hasBackgroundWork = task.hasBackgroundWork; + task.hasBackgroundWork = false; + task.spawnedRuntimePrefetches = null; + switch(exitStatus){ + case 0: + // The task yielded because there are too many requests in progress. + // Stop processing tasks until we have more bandwidth. + return; + case 1: + // The task is blocked. It needs more data before it can proceed. + // Keep the task out of the queue until the server responds. + heapPop(taskHeap); + // Continue to the next task + task = heapPeek(taskHeap); + continue; + case 2: + if (task.phase === 1) { + // Finished prefetching the route tree. Proceed to prefetching + // the segments. + task.phase = 0; + heapResift(taskHeap, task); + } else if (hasBackgroundWork) { + // The task spawned additional background work. Reschedule the task + // at background priority. + task.priority = _types.PrefetchPriority.Background; + heapResift(taskHeap, task); + } else { + // The prefetch is complete. Continue to the next task. + if (process.env.__NEXT_EXPOSE_TESTING_API) { + // Notify the Instant Navigation Testing API that the prefetch has + // completed, so it can proceed with navigation. + const onComplete = task._onComplete; + task._onComplete = undefined; + onComplete?.(); + } + heapPop(taskHeap); + } + task = heapPeek(taskHeap); + continue; + default: + exitStatus; + } + } + // Run LRU cleanup only when the scheduler is fully idle: no queued tasks and + // no in-progress requests. At that point, all active prefetch tasks have + // finished reading from the cache (moving recently used entries to the front + // of the list), so only genuinely stale data gets evicted. + if (task === null && inProgressRequests === 0) { + (0, _lru.cleanup)(); + } +} +/** + * Check this during a prefetch task to determine if background work can be + * performed. If so, it evaluates to `true`. Otherwise, it returns `false`, + * while also scheduling a background task to run later. Usage: + * + * @example + * if (background(task)) { + * // Perform background-pri work + * } + */ function background(task) { + if (task.priority === _types.PrefetchPriority.Background) { + return true; + } + task.hasBackgroundWork = true; + return false; +} +function pingRoute(now, task) { + const key = task.key; + const route = (0, _cache.readOrCreateRouteCacheEntry)(now, task, key); + const exitStatus = pingRootRouteTree(now, task, route); + if (exitStatus !== 0 && key.search !== '') { + // If the URL has a non-empty search string, also prefetch the pathname + // without the search string. We use the searchless route tree as a base for + // optimistic routing; see requestOptimisticRouteCacheEntry for details. + // + // Note that we don't need to prefetch any of the segment data. Just the + // route tree. + // + // TODO: This is a temporary solution; the plan is to replace this by adding + // a wildcard lookup method to the TupleMap implementation. This is + // non-trivial to implement because it needs to account for things like + // fallback route entries, hence this temporary workaround. + const url = new URL(key.pathname, location.origin); + const keyWithoutSearch = (0, _cachekey.createCacheKey)(url.href, key.nextUrl); + const routeWithoutSearch = (0, _cache.readOrCreateRouteCacheEntry)(now, task, keyWithoutSearch); + switch(routeWithoutSearch.status){ + case _cache.EntryStatus.Empty: + { + if (background(task)) { + routeWithoutSearch.status = _cache.EntryStatus.Pending; + spawnPrefetchSubtask((0, _cache.fetchRouteOnCacheMiss)(routeWithoutSearch, keyWithoutSearch)); + } + break; + } + case _cache.EntryStatus.Pending: + case _cache.EntryStatus.Fulfilled: + case _cache.EntryStatus.Rejected: + { + break; + } + default: + routeWithoutSearch; + } + } + return exitStatus; +} +function pingRootRouteTree(now, task, route) { + switch(route.status){ + case _cache.EntryStatus.Empty: + { + // Route is not yet cached, and there's no request already in progress. + // Spawn a task to request the route, load it into the cache, and ping + // the task to continue. + // TODO: There are multiple strategies in the API for prefetching + // a route. Currently we've only implemented the main one: per-segment, + // static-data only. + // + // There's also `` + // which prefetch both static *and* dynamic data. + // Similarly, we need to fallback to the old, per-page + // behavior if PPR is disabled for a route (via the incremental opt-in). + // + // Those cases will be handled here. + spawnPrefetchSubtask((0, _cache.fetchRouteOnCacheMiss)(route, task.key)); + // If the request takes longer than a minute, a subsequent request should + // retry instead of waiting for this one. When the response is received, + // this value will be replaced by a new value based on the stale time sent + // from the server. + // TODO: We should probably also manually abort the fetch task, to reclaim + // server bandwidth. + route.staleAt = now + 60 * 1000; + // Upgrade to Pending so we know there's already a request in progress + route.status = _cache.EntryStatus.Pending; + // Intentional fallthrough to the Pending branch + } + case _cache.EntryStatus.Pending: + { + // Still pending. We can't start prefetching the segments until the route + // tree has loaded. Add the task to the set of blocked tasks so that it + // is notified when the route tree is ready. + const blockedTasks = route.blockedTasks; + if (blockedTasks === null) { + route.blockedTasks = new Set([ + task + ]); + } else { + blockedTasks.add(task); + } + return 1; + } + case _cache.EntryStatus.Rejected: + { + // Route tree failed to load. Treat as a 404. + return 2; + } + case _cache.EntryStatus.Fulfilled: + { + if (task.phase !== 0) { + // Do not prefetch segment data until we've entered the segment phase. + return 2; + } + // Recursively fill in the segment tree. + if (!hasNetworkBandwidth(task)) { + // Stop prefetching segments until there's more bandwidth. + return 0; + } + const tree = route.tree; + // A task's fetch strategy gets set to `PPR` for any "auto" prefetch. + // If it turned out that the route isn't PPR-enabled, we need to use `LoadingBoundary` instead. + // We don't need to do this for runtime prefetches, because those are only available in + // `cacheComponents`, where every route is PPR. + let fetchStrategy; + if (tree.prefetchHints & _approutertypes.PrefetchHint.SubtreeHasInstant) { + // If `instant` is defined anywhere on the target route, ignore the + // fetch strategy and switch to unified strategy used by Cache + // Components (called `PPR` for now, will likely be renamed). + // + // In practice, this just means that a "full" prefetch () has no effect. You're meant to use Runtime + // Prefetching instead — that's the new pattern that replaces + // prefetch={true}. + // + // The reason we check for `instant` rather than the `cacheComponents` + // flag is to support incremental adoption. `prefetch={true}` will + // continue to work until you opt into `instant`. + fetchStrategy = _types.FetchStrategy.PPR; + } else if (task.fetchStrategy === _types.FetchStrategy.PPR) { + fetchStrategy = route.supportsPerSegmentPrefetching ? _types.FetchStrategy.PPR : _types.FetchStrategy.LoadingBoundary; + } else { + fetchStrategy = task.fetchStrategy; + } + switch(fetchStrategy){ + case _types.FetchStrategy.PPR: + { + // For Cache Components pages, each segment may be prefetched + // statically or using a runtime request, based on various + // configurations and heuristics. We'll do this in two passes: first + // traverse the tree and perform all the static prefetches. + // + // Then, if there are any segments that need a runtime request, + // do another pass to perform a runtime prefetch. + pingStaticHead(now, task, route); + const exitStatus = pingSharedPartOfCacheComponentsTree(now, task, route, task.treeAtTimeOfPrefetch, tree); + if (exitStatus === 0) { + // Child yielded without finishing. + return 0; + } + const spawnedRuntimePrefetches = task.spawnedRuntimePrefetches; + if (spawnedRuntimePrefetches !== null) { + // During the first pass, we discovered segments that require a + // runtime prefetch. Do a second pass to construct a request tree. + const spawnedEntries = new Map(); + pingRuntimeHead(now, task, route, spawnedEntries, _types.FetchStrategy.PPRRuntime); + const requestTree = pingRuntimePrefetches(now, task, route, tree, spawnedRuntimePrefetches, spawnedEntries); + let needsDynamicRequest = spawnedEntries.size > 0; + if (needsDynamicRequest) { + // Perform a dynamic prefetch request and populate the cache with + // the result. + spawnPrefetchSubtask((0, _cache.fetchSegmentPrefetchesUsingDynamicRequest)(task, route, _types.FetchStrategy.PPRRuntime, requestTree, spawnedEntries)); + } + } + return 2; + } + case _types.FetchStrategy.Full: + case _types.FetchStrategy.PPRRuntime: + case _types.FetchStrategy.LoadingBoundary: + { + // Prefetch multiple segments using a single dynamic request. + // TODO: We can consolidate this branch with previous one by modeling + // it as if the first segment in the new tree has runtime prefetching + // enabled. Will do this as a follow-up refactor. Might want to remove + // the special metatdata case below first. In the meantime, it's not + // really that much duplication, just would be nice to remove one of + // these codepaths. + const spawnedEntries = new Map(); + pingRuntimeHead(now, task, route, spawnedEntries, fetchStrategy); + const dynamicRequestTree = diffRouteTreeAgainstCurrent(now, task, route, task.treeAtTimeOfPrefetch, tree, spawnedEntries, fetchStrategy); + let needsDynamicRequest = spawnedEntries.size > 0; + if (needsDynamicRequest) { + spawnPrefetchSubtask((0, _cache.fetchSegmentPrefetchesUsingDynamicRequest)(task, route, fetchStrategy, dynamicRequestTree, spawnedEntries)); + } + return 2; + } + default: + fetchStrategy; + } + break; + } + default: + { + route; + } + } + return 2; +} +function pingStaticHead(now, task, route) { + // The Head data for a page (metadata, viewport) is not really a route + // segment, in the sense that it doesn't appear in the route tree. But we + // store it in the cache as if it were, using a special key. + pingStaticSegmentData(now, task, route, (0, _cache.readOrCreateSegmentCacheEntry)(now, _types.FetchStrategy.PPR, route.metadata), task.key, route.metadata); +} +function pingRuntimeHead(now, task, route, spawnedEntries, fetchStrategy) { + pingRouteTreeAndIncludeDynamicData(now, task, route, route.metadata, false, spawnedEntries, // When prefetching the head, there's no difference between Full + // and LoadingBoundary + fetchStrategy === _types.FetchStrategy.LoadingBoundary ? _types.FetchStrategy.Full : fetchStrategy); +} +// TODO: Rename dynamic -> runtime throughout this module +function pingSharedPartOfCacheComponentsTree(now, task, route, oldTree, newTree) { + // When Cache Components is enabled (or PPR, or a fully static route when PPR + // is disabled; those cases are treated equivalently to Cache Components), we + // start by prefetching each segment individually. Once we reach the "new" + // part of the tree — the part that doesn't exist on the current page — we + // may choose to switch to a runtime prefetch instead, based on the + // information sent by the server in the route tree. + // + // The traversal starts in the "shared" part of the tree. Once we reach the + // "new" part of the tree, we switch to a different traversal, + // pingNewPartOfCacheComponentsTree. + // Prefetch this segment's static data. + const segment = (0, _cache.readOrCreateSegmentCacheEntry)(now, task.fetchStrategy, newTree); + pingStaticSegmentData(now, task, route, segment, task.key, newTree); + // Recursively ping the children. + const oldTreeChildren = oldTree[1]; + const newTreeChildren = newTree.slots; + if (newTreeChildren !== null) { + for(const parallelRouteKey in newTreeChildren){ + if (!hasNetworkBandwidth(task)) { + // Stop prefetching segments until there's more bandwidth. + return 0; + } + const newTreeChild = newTreeChildren[parallelRouteKey]; + const newTreeChildSegment = newTreeChild.segment; + const oldTreeChild = oldTreeChildren[parallelRouteKey]; + const oldTreeChildSegment = oldTreeChild?.[0]; + let childExitStatus; + if (oldTreeChildSegment !== undefined && doesCurrentSegmentMatchCachedSegment(route, newTreeChildSegment, oldTreeChildSegment)) { + // We're still in the "shared" part of the tree. + childExitStatus = pingSharedPartOfCacheComponentsTree(now, task, route, oldTreeChild, newTreeChild); + } else { + // We've entered the "new" part of the tree. Switch + // traversal functions. + childExitStatus = pingNewPartOfCacheComponentsTree(now, task, route, newTreeChild); + } + if (childExitStatus === 0) { + // Child yielded without finishing. + return 0; + } + } + } + return 2; +} +function pingNewPartOfCacheComponentsTree(now, task, route, tree) { + // We're now prefetching in the "new" part of the tree, the part that doesn't + // exist on the current page. (In other words, we're deeper than the + // shared layouts.) Segments in here default to being prefetched statically. + // However, if the server instructs us to, we may switch to a runtime + // prefetch instead. Traverse the tree and check at each segment. + if (tree.prefetchHints & _approutertypes.PrefetchHint.HasRuntimePrefetch) { + // This route has a runtime prefetch response. Since we're below the shared + // layout, everything from this point should be prefetched using a single, + // combined runtime request, rather than using per-segment static requests. + // This is true even if some of the child segments are known to be fully + // static — once we've decided to perform a runtime prefetch, we might as + // well respond with the static segments in the same roundtrip. (That's how + // regular navigations work, too.) We'll still skip over segments that are + // already cached, though. + // + // It's the server's responsibility to set a reasonable value of + // `hasRuntimePrefetch`. Currently it's user-defined, but eventually, the + // server may send a value of `false` even if the user opts in, if it + // determines during build that the route is always fully static. There are + // more optimizations we can do once we implement fallback param + // tracking, too. + // + // Use the task object to collect the segments that need a runtime prefetch. + // This will signal to the outer task queue that a second traversal is + // required to construct a request tree. + if (task.spawnedRuntimePrefetches === null) { + task.spawnedRuntimePrefetches = new Set([ + tree.requestKey + ]); + } else { + task.spawnedRuntimePrefetches.add(tree.requestKey); + } + // Then exit the traversal without prefetching anything further. + return 2; + } + // This segment should not be runtime prefetched. Prefetch its static data. + const segment = (0, _cache.readOrCreateSegmentCacheEntry)(now, task.fetchStrategy, tree); + pingStaticSegmentData(now, task, route, segment, task.key, tree); + if (tree.slots !== null) { + if (!hasNetworkBandwidth(task)) { + // Stop prefetching segments until there's more bandwidth. + return 0; + } + // Recursively ping the children. + for(const parallelRouteKey in tree.slots){ + const childTree = tree.slots[parallelRouteKey]; + const childExitStatus = pingNewPartOfCacheComponentsTree(now, task, route, childTree); + if (childExitStatus === 0) { + // Child yielded without finishing. + return 0; + } + } + } + // This segment and all its children have finished prefetching. + return 2; +} +function diffRouteTreeAgainstCurrent(now, task, route, oldTree, newTree, spawnedEntries, fetchStrategy) { + // This is a single recursive traversal that does multiple things: + // - Finds the parts of the target route (newTree) that are not part of + // of the current page (oldTree) by diffing them, using the same algorithm + // as a real navigation. + // - Constructs a request tree (FlightRouterState) that describes which + // segments need to be prefetched and which ones are already cached. + // - Creates a set of pending cache entries for the segments that need to + // be prefetched, so that a subsequent prefetch task does not request the + // same segments again. + const oldTreeChildren = oldTree[1]; + const newTreeChildren = newTree.slots; + let requestTreeChildren = {}; + if (newTreeChildren !== null) { + for(const parallelRouteKey in newTreeChildren){ + const newTreeChild = newTreeChildren[parallelRouteKey]; + const newTreeChildSegment = newTreeChild.segment; + const oldTreeChild = oldTreeChildren[parallelRouteKey]; + const oldTreeChildSegment = oldTreeChild?.[0]; + if (oldTreeChildSegment !== undefined && doesCurrentSegmentMatchCachedSegment(route, newTreeChildSegment, oldTreeChildSegment)) { + // This segment is already part of the current route. Keep traversing. + const requestTreeChild = diffRouteTreeAgainstCurrent(now, task, route, oldTreeChild, newTreeChild, spawnedEntries, fetchStrategy); + requestTreeChildren[parallelRouteKey] = requestTreeChild; + } else { + // This segment is not part of the current route. We're entering a + // part of the tree that we need to prefetch (unless everything is + // already cached). + switch(fetchStrategy){ + case _types.FetchStrategy.LoadingBoundary: + { + // When PPR is disabled, we can't prefetch per segment. We must + // fallback to the old prefetch behavior and send a dynamic request. + // Only routes that include a loading boundary can be prefetched in + // this way. + // + // This is simlar to a "full" prefetch, but we're much more + // conservative about which segments to include in the request. + // + // The server will only render up to the first loading boundary + // inside new part of the tree. If there's no loading boundary + // anywhere in the tree, the server will never return any data, so + // we can skip the request. + const subtreeHasLoadingBoundary = (newTreeChild.prefetchHints & (_approutertypes.PrefetchHint.SegmentHasLoadingBoundary | _approutertypes.PrefetchHint.SubtreeHasLoadingBoundary)) !== 0; + const requestTreeChild = subtreeHasLoadingBoundary ? pingPPRDisabledRouteTreeUpToLoadingBoundary(now, task, route, newTreeChild, null, spawnedEntries) : (0, _cache.convertRouteTreeToFlightRouterState)(newTreeChild); + requestTreeChildren[parallelRouteKey] = requestTreeChild; + break; + } + case _types.FetchStrategy.PPRRuntime: + { + // This is a runtime prefetch. Fetch all cacheable data in the tree, + // not just the static PPR shell. + const requestTreeChild = pingRouteTreeAndIncludeDynamicData(now, task, route, newTreeChild, false, spawnedEntries, fetchStrategy); + requestTreeChildren[parallelRouteKey] = requestTreeChild; + break; + } + case _types.FetchStrategy.Full: + { + // This is a "full" prefetch. Fetch all the data in the tree, both + // static and dynamic. We issue roughly the same request that we + // would during a real navigation. The goal is that once the + // navigation occurs, the router should not have to fetch any + // additional data. + // + // Although the response will include dynamic data, opting into a + // Full prefetch — via — implicitly + // instructs the cache to treat the response as "static", or non- + // dynamic, since the whole point is to cache it for + // future navigations. + // + // Construct a tree (currently a FlightRouterState) that represents + // which segments need to be prefetched and which ones are already + // cached. If the tree is empty, then we can exit. Otherwise, we'll + // send the request tree to the server and use the response to + // populate the segment cache. + const requestTreeChild = pingRouteTreeAndIncludeDynamicData(now, task, route, newTreeChild, false, spawnedEntries, fetchStrategy); + requestTreeChildren[parallelRouteKey] = requestTreeChild; + break; + } + default: + fetchStrategy; + } + } + } + } + const requestTree = [ + newTree.segment, + requestTreeChildren, + null, + null + ]; + return requestTree; +} +function pingPPRDisabledRouteTreeUpToLoadingBoundary(now, task, route, tree, refetchMarkerContext, spawnedEntries) { + // This function is similar to pingRouteTreeAndIncludeDynamicData, except the + // server is only going to return a minimal loading state — it will stop + // rendering at the first loading boundary. Whereas a Full prefetch is + // intentionally aggressive and tries to pretfetch all the data that will be + // needed for a navigation, a LoadingBoundary prefetch is much more + // conservative. For example, it will omit from the request tree any segment + // that is already cached, regardles of whether it's partial or full. By + // contrast, a Full prefetch will refetch partial segments. + // "inside-shared-layout" tells the server where to start looking for a + // loading boundary. + let refetchMarker = refetchMarkerContext === null ? 'inside-shared-layout' : null; + const segment = (0, _cache.readOrCreateSegmentCacheEntry)(now, task.fetchStrategy, tree); + switch(segment.status){ + case _cache.EntryStatus.Empty: + { + // This segment is not cached. Add a refetch marker so the server knows + // to start rendering here. + // TODO: Instead of a "refetch" marker, we could just omit this subtree's + // FlightRouterState from the request tree. I think this would probably + // already work even without any updates to the server. For consistency, + // though, I'll send the full tree and we'll look into this later as part + // of a larger redesign of the request protocol. + // Add the pending cache entry to the result map. + spawnedEntries.set(tree.requestKey, (0, _cache.upgradeToPendingSegment)(segment, // Set the fetch strategy to LoadingBoundary to indicate that the server + // might not include it in the pending response. If another route is able + // to issue a per-segment request, we'll do that in the background. + _types.FetchStrategy.LoadingBoundary)); + if (refetchMarkerContext !== 'refetch') { + refetchMarker = refetchMarkerContext = 'refetch'; + } else { + // There's already a parent with a refetch marker, so we don't need + // to add another one. + } + break; + } + case _cache.EntryStatus.Fulfilled: + { + // The segment is already cached. + const segmentHasLoadingBoundary = (tree.prefetchHints & _approutertypes.PrefetchHint.SegmentHasLoadingBoundary) !== 0; + if (segmentHasLoadingBoundary) { + // This segment has a loading boundary, which means the server won't + // render its children. So there's nothing left to prefetch along this + // path. We can bail out. + return (0, _cache.convertRouteTreeToFlightRouterState)(tree); + } + break; + } + case _cache.EntryStatus.Pending: + { + break; + } + case _cache.EntryStatus.Rejected: + { + break; + } + default: + segment; + } + const requestTreeChildren = {}; + if (tree.slots !== null) { + for(const parallelRouteKey in tree.slots){ + const childTree = tree.slots[parallelRouteKey]; + requestTreeChildren[parallelRouteKey] = pingPPRDisabledRouteTreeUpToLoadingBoundary(now, task, route, childTree, refetchMarkerContext, spawnedEntries); + } + } + const requestTree = [ + tree.segment, + requestTreeChildren, + null, + refetchMarker + ]; + return requestTree; +} +function pingRouteTreeAndIncludeDynamicData(now, task, route, tree, isInsideRefetchingParent, spawnedEntries, fetchStrategy) { + // The tree we're constructing is the same shape as the tree we're navigating + // to. But even though this is a "new" tree, some of the individual segments + // may be cached as a result of other route prefetches. + // + // So we need to find the first uncached segment along each path add an + // explicit "refetch" marker so the server knows where to start rendering. + // Once the server starts rendering along a path, it keeps rendering the + // entire subtree. + const segment = (0, _cache.readOrCreateSegmentCacheEntry)(now, // Note that `fetchStrategy` might be different from `task.fetchStrategy`, + // and we have to use the former here. + // We can have a task with `FetchStrategy.PPR` where some of its segments are configured to + // always use runtime prefetching (via `export const prefetch`), and those should check for + // entries that include search params. + fetchStrategy, tree); + let spawnedSegment = null; + switch(segment.status){ + case _cache.EntryStatus.Empty: + { + // This segment is not cached. + if (fetchStrategy === _types.FetchStrategy.Full) { + // Check if there's a matching entry in the bfcache. If so, fulfill the + // segment using the bfcache entry instead of issuing a new request. + const fulfilled = (0, _cache.attemptToFulfillDynamicSegmentFromBFCache)(now, segment, tree); + if (fulfilled !== null) { + break; + } + } + // Include it in the request. + spawnedSegment = (0, _cache.upgradeToPendingSegment)(segment, fetchStrategy); + break; + } + case _cache.EntryStatus.Fulfilled: + { + // The segment is already cached. + if (segment.isPartial && (0, _cache.canNewFetchStrategyProvideMoreContent)(segment.fetchStrategy, fetchStrategy)) { + // The cached segment contains dynamic holes, and was prefetched using a + // less specific strategy than the current one. This means we're in one + // of these cases: + // - we have a static prefetch, and we're doing a runtime prefetch + // - we have a static or runtime prefetch, and we're doing a Full + // prefetch (or a navigation). + // In either case, we need to include it in the request to get a more + // specific (or full) version. However, if there's a non-stale bfcache + // entry from a previous navigation, prefer that over making a new + // request. + if (fetchStrategy === _types.FetchStrategy.Full) { + const fulfilled = (0, _cache.attemptToUpgradeSegmentFromBFCache)(now, tree); + if (fulfilled !== null) { + break; + } + } + spawnedSegment = pingFullSegmentRevalidation(now, tree, fetchStrategy); + } + break; + } + case _cache.EntryStatus.Pending: + case _cache.EntryStatus.Rejected: + { + // There's either another prefetch currently in progress, or the previous + // attempt failed. If the new strategy can provide more content, fetch it again. + if ((0, _cache.canNewFetchStrategyProvideMoreContent)(segment.fetchStrategy, fetchStrategy)) { + spawnedSegment = pingFullSegmentRevalidation(now, tree, fetchStrategy); + } + break; + } + default: + segment; + } + const requestTreeChildren = {}; + if (tree.slots !== null) { + for(const parallelRouteKey in tree.slots){ + const childTree = tree.slots[parallelRouteKey]; + requestTreeChildren[parallelRouteKey] = pingRouteTreeAndIncludeDynamicData(now, task, route, childTree, isInsideRefetchingParent || spawnedSegment !== null, spawnedEntries, fetchStrategy); + } + } + if (spawnedSegment !== null) { + // Add the pending entry to the result map. + spawnedEntries.set(tree.requestKey, spawnedSegment); + } + // Don't bother to add a refetch marker if one is already present in a parent. + const refetchMarker = !isInsideRefetchingParent && spawnedSegment !== null ? 'refetch' : null; + const requestTree = [ + tree.segment, + requestTreeChildren, + null, + refetchMarker + ]; + return requestTree; +} +function pingRuntimePrefetches(now, task, route, tree, spawnedRuntimePrefetches, spawnedEntries) { + // Construct a request tree (FlightRouterState) for a runtime prefetch. If + // a segment is part of the runtime prefetch, the tree is constructed by + // diffing against what's already in the prefetch cache. Otherwise, we send + // a regular FlightRouterState with no special markers. + // + // See pingRouteTreeAndIncludeDynamicData for details. + if (spawnedRuntimePrefetches.has(tree.requestKey)) { + // This segment needs a runtime prefetch. + return pingRouteTreeAndIncludeDynamicData(now, task, route, tree, false, spawnedEntries, _types.FetchStrategy.PPRRuntime); + } + let requestTreeChildren = {}; + const slots = tree.slots; + if (slots !== null) { + for(const parallelRouteKey in slots){ + const childTree = slots[parallelRouteKey]; + requestTreeChildren[parallelRouteKey] = pingRuntimePrefetches(now, task, route, childTree, spawnedRuntimePrefetches, spawnedEntries); + } + } + // This segment is not part of the runtime prefetch. Clone the base tree. + const requestTree = [ + tree.segment, + requestTreeChildren, + null, + null + ]; + return requestTree; +} +function pingStaticSegmentData(now, task, route, segment, routeKey, tree) { + switch(segment.status){ + case _cache.EntryStatus.Empty: + if (process.env.__NEXT_PREFETCH_INLINING) { + // All segment data for this route is bundled into a single + // /_inlined response. Walk the full route tree to collect all + // Empty segments, upgrade them to Pending, and spawn one + // bundled request. Subsequent calls for other segments in the + // same tree will see them as Pending and skip. + const inlinedEntries = collectInlinedEntries(now, route); + if (inlinedEntries.size > 0) { + spawnPrefetchSubtask((0, _cache.fetchInlinedSegmentsOnCacheMiss)(route, routeKey, route.tree, inlinedEntries)); + } + break; + } + // Upgrade to Pending so we know there's already a request in progress + spawnPrefetchSubtask((0, _cache.fetchSegmentOnCacheMiss)(route, (0, _cache.upgradeToPendingSegment)(segment, _types.FetchStrategy.PPR), routeKey, tree)); + break; + case _cache.EntryStatus.Pending: + { + // There's already a request in progress. Depending on what kind of + // request it is, we may want to revalidate it. + switch(segment.fetchStrategy){ + case _types.FetchStrategy.PPR: + case _types.FetchStrategy.PPRRuntime: + case _types.FetchStrategy.Full: + break; + case _types.FetchStrategy.LoadingBoundary: + // There's a pending request, but because it's using the old + // prefetching strategy, we can't be sure if it will be fulfilled by + // the response — it might be inside the loading boundary. Perform + // a revalidation, but because it's speculative, wait to do it at + // background priority. + if (background(task)) { + // TODO: Instead of speculatively revalidating, consider including + // `hasLoading` in the route tree prefetch response. + pingPPRSegmentRevalidation(now, route, routeKey, tree); + } + break; + default: + segment.fetchStrategy; + } + break; + } + case _cache.EntryStatus.Rejected: + { + // The existing entry in the cache was rejected. Depending on how it + // was originally fetched, we may or may not want to revalidate it. + switch(segment.fetchStrategy){ + case _types.FetchStrategy.PPR: + case _types.FetchStrategy.PPRRuntime: + case _types.FetchStrategy.Full: + break; + case _types.FetchStrategy.LoadingBoundary: + // There's a rejected entry, but it was fetched using the loading + // boundary strategy. So the reason it wasn't returned by the server + // might just be because it was inside a loading boundary. Or because + // there was a dynamic rewrite. Revalidate it using the per- + // segment strategy. + // + // Because a rejected segment will definitely prevent the segment (and + // all of its children) from rendering, we perform this revalidation + // immediately instead of deferring it to a background task. + pingPPRSegmentRevalidation(now, route, routeKey, tree); + break; + default: + segment.fetchStrategy; + } + break; + } + case _cache.EntryStatus.Fulfilled: + break; + default: + segment; + } +// Segments do not have dependent tasks, so once the prefetch is initiated, +// there's nothing else for us to do (except write the server data into the +// entry, which is handled by `fetchSegmentOnCacheMiss`). +} +/** + * Walks the RouteTree (including the head metadata) and collects any segments + * that are still Empty into a Map, upgrading them to Pending. These entries + * will be fulfilled by the inlined prefetch response. + */ function collectInlinedEntries(now, route) { + const entries = new Map(); + collectInlinedEntriesImpl(now, route.tree, entries); + // Also collect the head/metadata entry. + const headEntry = (0, _cache.readOrCreateSegmentCacheEntry)(now, _types.FetchStrategy.PPR, route.metadata); + if (headEntry.status === _cache.EntryStatus.Empty) { + entries.set(route.metadata.requestKey, (0, _cache.upgradeToPendingSegment)(headEntry, _types.FetchStrategy.PPR)); + } + return entries; +} +function collectInlinedEntriesImpl(now, tree, entries) { + const entry = (0, _cache.readOrCreateSegmentCacheEntry)(now, _types.FetchStrategy.PPR, tree); + if (entry.status === _cache.EntryStatus.Empty) { + entries.set(tree.requestKey, (0, _cache.upgradeToPendingSegment)(entry, _types.FetchStrategy.PPR)); + } + if (tree.slots !== null) { + for(const parallelRouteKey in tree.slots){ + collectInlinedEntriesImpl(now, tree.slots[parallelRouteKey], entries); + } + } +} +function pingPPRSegmentRevalidation(now, route, routeKey, tree) { + const revalidatingSegment = (0, _cache.readOrCreateRevalidatingSegmentEntry)(now, _types.FetchStrategy.PPR, tree); + switch(revalidatingSegment.status){ + case _cache.EntryStatus.Empty: + // Spawn a prefetch request. The fetch function handles upserting + // the entry at the correct fulfilled vary path upon completion. + spawnPrefetchSubtask((0, _cache.fetchSegmentOnCacheMiss)(route, (0, _cache.upgradeToPendingSegment)(revalidatingSegment, _types.FetchStrategy.PPR), routeKey, tree)); + break; + case _cache.EntryStatus.Pending: + break; + case _cache.EntryStatus.Fulfilled: + case _cache.EntryStatus.Rejected: + break; + default: + revalidatingSegment; + } +} +function pingFullSegmentRevalidation(now, tree, fetchStrategy) { + const revalidatingSegment = (0, _cache.readOrCreateRevalidatingSegmentEntry)(now, fetchStrategy, tree); + if (revalidatingSegment.status === _cache.EntryStatus.Empty) { + // During a Full/PPRRuntime prefetch, a single dynamic request is made for all the + // segments that we need. So we don't initiate a request here directly. By + // returning a pending entry from this function, it signals to the caller + // that this segment should be included in the request that's sent to + // the server. + const pendingSegment = (0, _cache.upgradeToPendingSegment)(revalidatingSegment, fetchStrategy); + // The upsert is handled by fulfillEntrySpawnedByRuntimePrefetch + // when the dynamic prefetch response is written into the cache. + return pendingSegment; + } else { + // There's already a revalidation in progress. + const nonEmptyRevalidatingSegment = revalidatingSegment; + if ((0, _cache.canNewFetchStrategyProvideMoreContent)(nonEmptyRevalidatingSegment.fetchStrategy, fetchStrategy)) { + // The existing revalidation was fetched using a less specific strategy. + // Reset it and start a new revalidation. + const emptySegment = (0, _cache.overwriteRevalidatingSegmentCacheEntry)(now, fetchStrategy, tree); + const pendingSegment = (0, _cache.upgradeToPendingSegment)(emptySegment, fetchStrategy); + // The upsert is handled by fulfillEntrySpawnedByRuntimePrefetch + // when the dynamic prefetch response is written into the cache. + return pendingSegment; + } + switch(nonEmptyRevalidatingSegment.status){ + case _cache.EntryStatus.Pending: + // There's already an in-progress prefetch that includes this segment. + return null; + case _cache.EntryStatus.Fulfilled: + case _cache.EntryStatus.Rejected: + // A previous revalidation attempt finished, but we chose not to replace + // the existing entry in the cache. Don't try again until or unless the + // revalidation entry expires. + return null; + default: + nonEmptyRevalidatingSegment; + return null; + } + } +} +function doesCurrentSegmentMatchCachedSegment(route, currentSegment, cachedSegment) { + if (cachedSegment === _segment.PAGE_SEGMENT_KEY) { + // In the FlightRouterState stored by the router, the page segment has the + // rendered search params appended to the name of the segment. In the + // prefetch cache, however, this is stored separately. So, when comparing + // the router's current FlightRouterState to the cached FlightRouterState, + // we need to make sure we compare both parts of the segment. + // TODO: This is not modeled clearly. We use the same type, + // FlightRouterState, for both the CacheNode tree _and_ the prefetch cache + // _and_ the server response format, when conceptually those are three + // different things and treated in different ways. We should encode more of + // this information into the type design so mistakes are less likely. + return currentSegment === (0, _segment.addSearchParamsIfPageSegment)(_segment.PAGE_SEGMENT_KEY, Object.fromEntries(new URLSearchParams(route.renderedSearch))); + } + // Non-page segments are compared using the same function as the server + return (0, _matchsegments.matchSegment)(cachedSegment, currentSegment); +} +// ----------------------------------------------------------------------------- +// The remainder of the module is a MinHeap implementation. Try not to put any +// logic below here unless it's related to the heap algorithm. We can extract +// this to a separate module if/when we need multiple kinds of heaps. +// ----------------------------------------------------------------------------- +function compareQueuePriority(a, b) { + // Since the queue is a MinHeap, this should return a positive number if b is + // higher priority than a, and a negative number if a is higher priority + // than b. + // `priority` is an integer, where higher numbers are higher priority. + const priorityDiff = b.priority - a.priority; + if (priorityDiff !== 0) { + return priorityDiff; + } + // If the priority is the same, check which phase the prefetch is in — is it + // prefetching the route tree, or the segments? Route trees are prioritized. + const phaseDiff = b.phase - a.phase; + if (phaseDiff !== 0) { + return phaseDiff; + } + // Finally, check the insertion order. `sortId` is an incrementing counter + // assigned to prefetches. We want to process the newest prefetches first. + return b.sortId - a.sortId; +} +function heapPush(heap, node) { + const index = heap.length; + heap.push(node); + node._heapIndex = index; + heapSiftUp(heap, node, index); +} +function heapPeek(heap) { + return heap.length === 0 ? null : heap[0]; +} +function heapPop(heap) { + if (heap.length === 0) { + return null; + } + const first = heap[0]; + first._heapIndex = -1; + const last = heap.pop(); + if (last !== first) { + heap[0] = last; + last._heapIndex = 0; + heapSiftDown(heap, last, 0); + } + return first; +} +function heapDelete(heap, node) { + const index = node._heapIndex; + if (index !== -1) { + node._heapIndex = -1; + if (heap.length !== 0) { + const last = heap.pop(); + if (last !== node) { + heap[index] = last; + last._heapIndex = index; + heapSiftDown(heap, last, index); + } + } + } +} +function heapResift(heap, node) { + const index = node._heapIndex; + if (index !== -1) { + if (index === 0) { + heapSiftDown(heap, node, 0); + } else { + const parentIndex = index - 1 >>> 1; + const parent = heap[parentIndex]; + if (compareQueuePriority(parent, node) > 0) { + // The parent is larger. Sift up. + heapSiftUp(heap, node, index); + } else { + // The parent is smaller (or equal). Sift down. + heapSiftDown(heap, node, index); + } + } + } +} +function heapSiftUp(heap, node, i) { + let index = i; + while(index > 0){ + const parentIndex = index - 1 >>> 1; + const parent = heap[parentIndex]; + if (compareQueuePriority(parent, node) > 0) { + // The parent is larger. Swap positions. + heap[parentIndex] = node; + node._heapIndex = parentIndex; + heap[index] = parent; + parent._heapIndex = index; + index = parentIndex; + } else { + // The parent is smaller. Exit. + return; + } + } +} +function heapSiftDown(heap, node, i) { + let index = i; + const length = heap.length; + const halfLength = length >>> 1; + while(index < halfLength){ + const leftIndex = (index + 1) * 2 - 1; + const left = heap[leftIndex]; + const rightIndex = leftIndex + 1; + const right = heap[rightIndex]; + // If the left or right node is smaller, swap with the smaller of those. + if (compareQueuePriority(left, node) < 0) { + if (rightIndex < length && compareQueuePriority(right, left) < 0) { + heap[index] = right; + right._heapIndex = index; + heap[rightIndex] = node; + node._heapIndex = rightIndex; + index = rightIndex; + } else { + heap[index] = left; + left._heapIndex = index; + heap[leftIndex] = node; + node._heapIndex = leftIndex; + index = leftIndex; + } + } else if (rightIndex < length && compareQueuePriority(right, node) < 0) { + heap[index] = right; + right._heapIndex = index; + heap[rightIndex] = node; + node._heapIndex = rightIndex; + index = rightIndex; + } else { + // Neither child is smaller. Exit. + return; + } + } +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=scheduler.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/segment-cache/types.js b/build/node_modules/next/dist/client/components/segment-cache/types.js new file mode 100644 index 0000000..bbe2083 --- /dev/null +++ b/build/node_modules/next/dist/client/components/segment-cache/types.js @@ -0,0 +1,69 @@ +/** + * Shared types and constants for the Segment Cache. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + FetchStrategy: null, + NavigationResultTag: null, + PrefetchPriority: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + FetchStrategy: function() { + return FetchStrategy; + }, + NavigationResultTag: function() { + return NavigationResultTag; + }, + PrefetchPriority: function() { + return PrefetchPriority; + } +}); +var NavigationResultTag = /*#__PURE__*/ function(NavigationResultTag) { + NavigationResultTag[NavigationResultTag["MPA"] = 0] = "MPA"; + NavigationResultTag[NavigationResultTag["Success"] = 1] = "Success"; + NavigationResultTag[NavigationResultTag["NoOp"] = 2] = "NoOp"; + NavigationResultTag[NavigationResultTag["Async"] = 3] = "Async"; + return NavigationResultTag; +}({}); +var PrefetchPriority = /*#__PURE__*/ function(PrefetchPriority) { + /** + * Assigned to the most recently hovered/touched link. Special network + * bandwidth is reserved for this task only. There's only ever one Intent- + * priority task at a time; when a new Intent task is scheduled, the previous + * one is bumped down to Default. + */ PrefetchPriority[PrefetchPriority["Intent"] = 2] = "Intent"; + /** + * The default priority for prefetch tasks. + */ PrefetchPriority[PrefetchPriority["Default"] = 1] = "Default"; + /** + * Assigned to tasks when they spawn non-blocking background work, like + * revalidating a partially cached entry to see if more data is available. + */ PrefetchPriority[PrefetchPriority["Background"] = 0] = "Background"; + return PrefetchPriority; +}({}); +var FetchStrategy = /*#__PURE__*/ function(FetchStrategy) { + // Deliberately ordered so we can easily compare two segments + // and determine if one segment is "more specific" than another + // (i.e. if it's likely that it contains more data) + FetchStrategy[FetchStrategy["LoadingBoundary"] = 0] = "LoadingBoundary"; + FetchStrategy[FetchStrategy["PPR"] = 1] = "PPR"; + FetchStrategy[FetchStrategy["PPRRuntime"] = 2] = "PPRRuntime"; + FetchStrategy[FetchStrategy["Full"] = 3] = "Full"; + return FetchStrategy; +}({}); + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/segment-cache/vary-path.js b/build/node_modules/next/dist/client/components/segment-cache/vary-path.js new file mode 100644 index 0000000..1ef7264 --- /dev/null +++ b/build/node_modules/next/dist/client/components/segment-cache/vary-path.js @@ -0,0 +1,278 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + appendLayoutVaryPath: null, + clonePageVaryPathWithNewSearchParams: null, + finalizeLayoutVaryPath: null, + finalizeMetadataVaryPath: null, + finalizePageVaryPath: null, + getFulfilledRouteVaryPath: null, + getFulfilledSegmentVaryPath: null, + getPartialLayoutVaryPath: null, + getPartialPageVaryPath: null, + getRenderedSearchFromVaryPath: null, + getRouteVaryPath: null, + getSegmentVaryPathForRequest: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + appendLayoutVaryPath: function() { + return appendLayoutVaryPath; + }, + clonePageVaryPathWithNewSearchParams: function() { + return clonePageVaryPathWithNewSearchParams; + }, + finalizeLayoutVaryPath: function() { + return finalizeLayoutVaryPath; + }, + finalizeMetadataVaryPath: function() { + return finalizeMetadataVaryPath; + }, + finalizePageVaryPath: function() { + return finalizePageVaryPath; + }, + getFulfilledRouteVaryPath: function() { + return getFulfilledRouteVaryPath; + }, + getFulfilledSegmentVaryPath: function() { + return getFulfilledSegmentVaryPath; + }, + getPartialLayoutVaryPath: function() { + return getPartialLayoutVaryPath; + }, + getPartialPageVaryPath: function() { + return getPartialPageVaryPath; + }, + getRenderedSearchFromVaryPath: function() { + return getRenderedSearchFromVaryPath; + }, + getRouteVaryPath: function() { + return getRouteVaryPath; + }, + getSegmentVaryPathForRequest: function() { + return getSegmentVaryPathForRequest; + } +}); +const _types = require("./types"); +const _cachemap = require("./cache-map"); +const _segmentvalueencoding = require("../../../shared/lib/segment-cache/segment-value-encoding"); +function getRouteVaryPath(pathname, search, nextUrl) { + // requestKey -> searchParams -> nextUrl + const varyPath = { + id: null, + value: pathname, + parent: { + id: '?', + value: search, + parent: { + id: null, + value: nextUrl, + parent: null + } + } + }; + return varyPath; +} +function getFulfilledRouteVaryPath(pathname, search, nextUrl, couldBeIntercepted) { + // This is called when a route's data is fulfilled. The cache entry will be + // re-keyed based on which inputs the response varies by. + // requestKey -> searchParams -> nextUrl + const varyPath = { + id: null, + value: pathname, + parent: { + id: '?', + value: search, + parent: { + id: null, + value: couldBeIntercepted ? nextUrl : _cachemap.Fallback, + parent: null + } + } + }; + return varyPath; +} +function appendLayoutVaryPath(parentPath, cacheKey, paramName) { + const varyPathPart = { + id: paramName, + value: cacheKey, + parent: parentPath + }; + return varyPathPart; +} +function finalizeLayoutVaryPath(requestKey, varyPath) { + const layoutVaryPath = { + id: null, + value: requestKey, + parent: varyPath + }; + return layoutVaryPath; +} +function getPartialLayoutVaryPath(finalizedVaryPath) { + // This is the inverse of finalizeLayoutVaryPath. + return finalizedVaryPath.parent; +} +function finalizePageVaryPath(requestKey, renderedSearch, varyPath) { + // Unlike layouts, a page segment's vary path also includes the search string. + // requestKey -> searchParams -> pathParams + const pageVaryPath = { + id: null, + value: requestKey, + parent: { + id: '?', + value: renderedSearch, + parent: varyPath + } + }; + return pageVaryPath; +} +function getPartialPageVaryPath(finalizedVaryPath) { + // This is the inverse of finalizePageVaryPath. + return finalizedVaryPath.parent.parent; +} +function finalizeMetadataVaryPath(pageRequestKey, renderedSearch, varyPath) { + // The metadata "segment" is not a real segment because it doesn't exist in + // the normal structure of the route tree, but in terms of caching, it + // behaves like a page segment because it varies by all the same params as + // a page. + // + // To keep the protocol for querying the server simple, the request key for + // the metadata does not include any path information. It's unnecessary from + // the server's perspective, because unlike page segments, there's only one + // metadata response per URL, i.e. there's no need to distinguish multiple + // parallel pages. + // + // However, this means the metadata request key is insufficient for + // caching the the metadata in the client cache, because on the client we + // use the request key to distinguish the metadata entry from all other + // page's metadata entries. + // + // So instead we create a simulated request key based on the page segment. + // Conceptually this is equivalent to the request key the server would have + // assigned the metadata segment if it treated it as part of the actual + // route structure. + // If there are multiple parallel pages, we use whichever is the first one. + // This is fine because the only difference between request keys for + // different parallel pages are things like route groups and parallel + // route slots. As long as it's always the same one, it doesn't matter. + const pageVaryPath = { + id: null, + // Append the actual metadata request key to the page request key. Note + // that we're not using a separate vary path part; it's unnecessary because + // these are not conceptually separate inputs. + value: pageRequestKey + _segmentvalueencoding.HEAD_REQUEST_KEY, + parent: { + id: '?', + value: renderedSearch, + parent: varyPath + } + }; + return pageVaryPath; +} +function getSegmentVaryPathForRequest(fetchStrategy, tree) { + // This is used for storing pending requests in the cache. We want to choose + // the most generic vary path based on the strategy used to fetch it, i.e. + // static/PPR versus runtime prefetching, so that it can be reused as much + // as possible. + // + // We may be able to re-key the response to something even more generic once + // we receive it — for example, if the server tells us that the response + // doesn't vary on a particular param — but even before we send the request, + // we know some params are reusable based on the fetch strategy alone. For + // example, a static prefetch will never vary on search params. + // + // The original vary path with all the params filled in is stored on the + // route tree object. We will clone this one to create a new vary path + // where certain params are replaced with Fallback. + // + // This result of this function is not stored anywhere. It's only used to + // access the cache a single time. + // + // TODO: Rather than create a new list object just to access the cache, the + // plan is to add the concept of a "vary mask". This will represent all the + // params that can be treated as Fallback. (Or perhaps the inverse.) + const originalVaryPath = tree.varyPath; + // Only page segments (and the special "metadata" segment, which is treated + // like a page segment for the purposes of caching) may contain search + // params. There's no reason to include them in the vary path otherwise. + if (tree.isPage) { + // Only a runtime prefetch will include search params in the vary path. + // Static prefetches never include search params, so they can be reused + // across all possible search param values. + const doesVaryOnSearchParams = fetchStrategy === _types.FetchStrategy.Full || fetchStrategy === _types.FetchStrategy.PPRRuntime; + if (!doesVaryOnSearchParams) { + // The response from the the server will not vary on search params. Clone + // the end of the original vary path to replace the search params + // with Fallback. + // + // requestKey -> searchParams -> pathParams + // ^ This part gets replaced with Fallback + const searchParamsVaryPath = originalVaryPath.parent; + const pathParamsVaryPath = searchParamsVaryPath.parent; + const patchedVaryPath = { + id: null, + value: originalVaryPath.value, + parent: { + id: '?', + value: _cachemap.Fallback, + parent: pathParamsVaryPath + } + }; + return patchedVaryPath; + } + } + // The request does vary on search params. We don't need to modify anything. + return originalVaryPath; +} +function clonePageVaryPathWithNewSearchParams(originalVaryPath, newSearch) { + // requestKey -> searchParams -> pathParams + // ^ This part gets replaced with newSearch + const searchParamsVaryPath = originalVaryPath.parent; + const clonedVaryPath = { + id: null, + value: originalVaryPath.value, + parent: { + id: '?', + value: newSearch, + parent: searchParamsVaryPath.parent + } + }; + return clonedVaryPath; +} +function getRenderedSearchFromVaryPath(varyPath) { + const searchParams = varyPath.parent.value; + return typeof searchParams === 'string' ? searchParams : null; +} +function getFulfilledSegmentVaryPath(original, varyParams) { + // Re-keys a segment's vary path based on which params the segment actually + // depends on. Params that are NOT in the varyParams set are replaced with + // Fallback, allowing the cache entry to be reused across different values of + // those params. + // This is called when a segment is fulfilled with data from the server. The + // varyParams set comes from the server and indicates which params were + // accessed during rendering. + const clone = { + id: original.id, + // If the id is null, this node is not a param (e.g., it's a request key). + // If the id is in the varyParams set, keep the original value. + // Otherwise, replace with Fallback to make it reusable. + value: original.id === null || varyParams.has(original.id) ? original.value : _cachemap.Fallback, + parent: original.parent === null ? null : getFulfilledSegmentVaryPath(original.parent, varyParams) + }; + return clone; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=vary-path.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/static-generation-bailout.js b/build/node_modules/next/dist/client/components/static-generation-bailout.js new file mode 100644 index 0000000..2ad03ea --- /dev/null +++ b/build/node_modules/next/dist/client/components/static-generation-bailout.js @@ -0,0 +1,42 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + StaticGenBailoutError: null, + isStaticGenBailoutError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + StaticGenBailoutError: function() { + return StaticGenBailoutError; + }, + isStaticGenBailoutError: function() { + return isStaticGenBailoutError; + } +}); +const NEXT_STATIC_GEN_BAILOUT = 'NEXT_STATIC_GEN_BAILOUT'; +class StaticGenBailoutError extends Error { + constructor(...args){ + super(...args), this.code = NEXT_STATIC_GEN_BAILOUT; + } +} +function isStaticGenBailoutError(error) { + if (typeof error !== 'object' || error === null || !('code' in error)) { + return false; + } + return error.code === NEXT_STATIC_GEN_BAILOUT; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=static-generation-bailout.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/unauthorized.js b/build/node_modules/next/dist/client/components/unauthorized.js new file mode 100644 index 0000000..689dab7 --- /dev/null +++ b/build/node_modules/next/dist/client/components/unauthorized.js @@ -0,0 +1,49 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "unauthorized", { + enumerable: true, + get: function() { + return unauthorized; + } +}); +const _httpaccessfallback = require("./http-access-fallback/http-access-fallback"); +// TODO: Add `unauthorized` docs +/** + * @experimental + * This function allows you to render the [unauthorized.js file](https://nextjs.org/docs/app/api-reference/file-conventions/unauthorized) + * within a route segment as well as inject a tag. + * + * `unauthorized()` can be used in + * [Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components), + * [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers), and + * [Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations). + * + * + * Read more: [Next.js Docs: `unauthorized`](https://nextjs.org/docs/app/api-reference/functions/unauthorized) + */ const DIGEST = `${_httpaccessfallback.HTTP_ERROR_FALLBACK_ERROR_CODE};401`; +function unauthorized() { + if (!process.env.__NEXT_EXPERIMENTAL_AUTH_INTERRUPTS) { + throw Object.defineProperty(new Error(`\`unauthorized()\` is experimental and only allowed to be used when \`experimental.authInterrupts\` is enabled.`), "__NEXT_ERROR_CODE", { + value: "E411", + enumerable: false, + configurable: true + }); + } + const error = Object.defineProperty(new Error(DIGEST), "__NEXT_ERROR_CODE", { + value: "E1002", + enumerable: false, + configurable: true + }); + error.digest = DIGEST; + throw error; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=unauthorized.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/unrecognized-action-error.js b/build/node_modules/next/dist/client/components/unrecognized-action-error.js new file mode 100644 index 0000000..1a21486 --- /dev/null +++ b/build/node_modules/next/dist/client/components/unrecognized-action-error.js @@ -0,0 +1,39 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + UnrecognizedActionError: null, + unstable_isUnrecognizedActionError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + UnrecognizedActionError: function() { + return UnrecognizedActionError; + }, + unstable_isUnrecognizedActionError: function() { + return unstable_isUnrecognizedActionError; + } +}); +class UnrecognizedActionError extends Error { + constructor(...args){ + super(...args); + this.name = 'UnrecognizedActionError'; + } +} +function unstable_isUnrecognizedActionError(error) { + return !!(error && typeof error === 'object' && error instanceof UnrecognizedActionError); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=unrecognized-action-error.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/unresolved-thenable.js b/build/node_modules/next/dist/client/components/unresolved-thenable.js new file mode 100644 index 0000000..edeecf2 --- /dev/null +++ b/build/node_modules/next/dist/client/components/unresolved-thenable.js @@ -0,0 +1,23 @@ +/** + * Create a "Thenable" that does not resolve. This is used to suspend indefinitely when data is not available yet. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "unresolvedThenable", { + enumerable: true, + get: function() { + return unresolvedThenable; + } +}); +const unresolvedThenable = { + then: ()=>{} +}; + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=unresolved-thenable.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/unstable-rethrow.browser.js b/build/node_modules/next/dist/client/components/unstable-rethrow.browser.js new file mode 100644 index 0000000..eb1a760 --- /dev/null +++ b/build/node_modules/next/dist/client/components/unstable-rethrow.browser.js @@ -0,0 +1,28 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "unstable_rethrow", { + enumerable: true, + get: function() { + return unstable_rethrow; + } +}); +const _bailouttocsr = require("../../shared/lib/lazy-dynamic/bailout-to-csr"); +const _isnextroutererror = require("./is-next-router-error"); +function unstable_rethrow(error) { + if ((0, _isnextroutererror.isNextRouterError)(error) || (0, _bailouttocsr.isBailoutToCSRError)(error)) { + throw error; + } + if (error instanceof Error && 'cause' in error) { + unstable_rethrow(error.cause); + } +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=unstable-rethrow.browser.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/unstable-rethrow.js b/build/node_modules/next/dist/client/components/unstable-rethrow.js new file mode 100644 index 0000000..acb9eed --- /dev/null +++ b/build/node_modules/next/dist/client/components/unstable-rethrow.js @@ -0,0 +1,25 @@ +/** + * This function should be used to rethrow internal Next.js errors so that they can be handled by the framework. + * When wrapping an API that uses errors to interrupt control flow, you should use this function before you do any error handling. + * This function will rethrow the error if it is a Next.js error so it can be handled, otherwise it will do nothing. + * + * Read more: [Next.js Docs: `unstable_rethrow`](https://nextjs.org/docs/app/api-reference/functions/unstable_rethrow) + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "unstable_rethrow", { + enumerable: true, + get: function() { + return unstable_rethrow; + } +}); +const unstable_rethrow = typeof window === 'undefined' ? require('./unstable-rethrow.server').unstable_rethrow : require('./unstable-rethrow.browser').unstable_rethrow; + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=unstable-rethrow.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/unstable-rethrow.server.js b/build/node_modules/next/dist/client/components/unstable-rethrow.server.js new file mode 100644 index 0000000..5bb7e85 --- /dev/null +++ b/build/node_modules/next/dist/client/components/unstable-rethrow.server.js @@ -0,0 +1,32 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "unstable_rethrow", { + enumerable: true, + get: function() { + return unstable_rethrow; + } +}); +const _dynamicrenderingutils = require("../../server/dynamic-rendering-utils"); +const _ispostpone = require("../../server/lib/router-utils/is-postpone"); +const _bailouttocsr = require("../../shared/lib/lazy-dynamic/bailout-to-csr"); +const _isnextroutererror = require("./is-next-router-error"); +const _dynamicrendering = require("../../server/app-render/dynamic-rendering"); +const _hooksservercontext = require("./hooks-server-context"); +function unstable_rethrow(error) { + if ((0, _isnextroutererror.isNextRouterError)(error) || (0, _bailouttocsr.isBailoutToCSRError)(error) || (0, _hooksservercontext.isDynamicServerError)(error) || (0, _dynamicrendering.isDynamicPostpone)(error) || (0, _ispostpone.isPostpone)(error) || (0, _dynamicrenderingutils.isHangingPromiseRejectionError)(error) || (0, _dynamicrendering.isPrerenderInterruptedError)(error)) { + throw error; + } + if (error instanceof Error && 'cause' in error) { + unstable_rethrow(error.cause); + } +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=unstable-rethrow.server.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/components/use-action-queue.js b/build/node_modules/next/dist/client/components/use-action-queue.js new file mode 100644 index 0000000..6950553 --- /dev/null +++ b/build/node_modules/next/dist/client/components/use-action-queue.js @@ -0,0 +1,148 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + dispatchAppRouterAction: null, + dispatchGestureState: null, + refreshOnInstantNavigationUnlock: null, + useActionQueue: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + dispatchAppRouterAction: function() { + return dispatchAppRouterAction; + }, + dispatchGestureState: function() { + return dispatchGestureState; + }, + refreshOnInstantNavigationUnlock: function() { + return refreshOnInstantNavigationUnlock; + }, + useActionQueue: function() { + return useActionQueue; + } +}); +const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard"); +const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react")); +const _isthenable = require("../../shared/lib/is-thenable"); +const _routerreducertypes = require("./router-reducer/router-reducer-types"); +// The app router state lives outside of React, so we can import the dispatch +// method directly wherever we need it, rather than passing it around via props +// or context. +let dispatch = null; +function refreshOnInstantNavigationUnlock() { + if (process.env.__NEXT_EXPOSE_TESTING_API) { + if (dispatch !== null) { + dispatch({ + type: _routerreducertypes.ACTION_REFRESH, + bypassCacheInvalidation: true + }); + } else { + window.location.reload(); + } + } +} +function dispatchAppRouterAction(action) { + if (dispatch === null) { + throw Object.defineProperty(new Error('Internal Next.js error: Router action dispatched before initialization.'), "__NEXT_ERROR_CODE", { + value: "E668", + enumerable: false, + configurable: true + }); + } + dispatch(action); +} +// Optimistic state setter for experimental_gesturePush. Only should be used +// during a gesture transition. +let setGestureRouterState = null; +function dispatchGestureState(state) { + if (setGestureRouterState === null) { + throw Object.defineProperty(new Error('Internal Next.js error: Router action dispatched before initialization.'), "__NEXT_ERROR_CODE", { + value: "E668", + enumerable: false, + configurable: true + }); + } + setGestureRouterState(state); +} +const __DEV__ = process.env.NODE_ENV !== 'production'; +const promisesWithDebugInfo = __DEV__ ? new WeakMap() : null; +function useActionQueue(actionQueue) { + const [canonicalState, setState] = _react.default.useState(actionQueue.state); + // Wrap the canonical state in useOptimistic to support + // experimental_gesturePush. During a gesture transition, this returns a fork + // of the router state that represents the eventual target if/when the gesture + // completes. Otherwise it returns the canonical state. + const [state, setGesture] = (0, _react.useOptimistic)(canonicalState); + if (typeof window !== 'undefined') { + setGestureRouterState = setGesture; + } + // Because of a known issue that requires to decode Flight streams inside the + // render phase, we have to be a bit clever and assign the dispatch method to + // a module-level variable upon initialization. The useState hook in this + // module only exists to synchronize state that lives outside of React. + // Ideally, what we'd do instead is pass the state as a prop to root.render; + // this is conceptually how we're modeling the app router state, despite the + // weird implementation details. + let nextDispatch; + if (process.env.NODE_ENV !== 'production') { + const { useAppDevRenderingIndicator } = require('../../next-devtools/userspace/use-app-dev-rendering-indicator'); + // eslint-disable-next-line react-hooks/rules-of-hooks + const appDevRenderingIndicator = useAppDevRenderingIndicator(); + nextDispatch = (action)=>{ + appDevRenderingIndicator(()=>{ + actionQueue.dispatch(action, setState); + }); + }; + } else { + nextDispatch = (action)=>actionQueue.dispatch(action, setState); + } + if (typeof window !== 'undefined') { + dispatch = nextDispatch; + } + // When navigating to a non-prefetched route, then App Router state will be + // blocked until the server responds. We need to transfer the `_debugInfo` + // from the underlying Flight response onto the top-level promise that is + // passed to React (via `use`) so that the latency is accurately represented + // in the React DevTools. + const stateWithDebugInfo = (0, _react.useMemo)(()=>{ + if (!__DEV__) { + return state; + } + if ((0, _isthenable.isThenable)(state)) { + // useMemo can't be used to cache a Promise since the memoized value is thrown + // away when we suspend. So we use a WeakMap to cache the Promise with debug info. + let promiseWithDebugInfo = promisesWithDebugInfo.get(state); + if (promiseWithDebugInfo === undefined) { + const debugInfo = []; + promiseWithDebugInfo = Promise.resolve(state).then((asyncState)=>{ + if (asyncState.debugInfo !== null) { + debugInfo.push(...asyncState.debugInfo); + } + return asyncState; + }); + promiseWithDebugInfo._debugInfo = debugInfo; + promisesWithDebugInfo.set(state, promiseWithDebugInfo); + } + return promiseWithDebugInfo; + } + return state; + }, [ + state + ]); + return (0, _isthenable.isThenable)(stateWithDebugInfo) ? (0, _react.use)(stateWithDebugInfo) : stateWithDebugInfo; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=use-action-queue.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/dev/debug-channel.js b/build/node_modules/next/dist/client/dev/debug-channel.js new file mode 100644 index 0000000..ca5993f --- /dev/null +++ b/build/node_modules/next/dist/client/dev/debug-channel.js @@ -0,0 +1,72 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createDebugChannel: null, + getOrCreateDebugChannelReadableWriterPair: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createDebugChannel: function() { + return createDebugChannel; + }, + getOrCreateDebugChannelReadableWriterPair: function() { + return getOrCreateDebugChannelReadableWriterPair; + } +}); +const _approuterheaders = require("../components/app-router-headers"); +const _invarianterror = require("../../shared/lib/invariant-error"); +const pairs = new Map(); +function getOrCreateDebugChannelReadableWriterPair(requestId) { + let pair = pairs.get(requestId); + if (!pair) { + const { readable, writable } = new TransformStream(); + pair = { + readable, + writer: writable.getWriter() + }; + pairs.set(requestId, pair); + pair.writer.closed.finally(()=>pairs.delete(requestId)); + } + return pair; +} +function createDebugChannel(requestHeaders) { + let requestId; + if (requestHeaders) { + requestId = requestHeaders[_approuterheaders.NEXT_REQUEST_ID_HEADER] ?? undefined; + if (!requestId) { + throw Object.defineProperty(new _invarianterror.InvariantError(`Expected a ${JSON.stringify(_approuterheaders.NEXT_REQUEST_ID_HEADER)} request header.`), "__NEXT_ERROR_CODE", { + value: "E854", + enumerable: false, + configurable: true + }); + } + } else { + requestId = self.__next_r; + if (!requestId) { + throw Object.defineProperty(new _invarianterror.InvariantError(`Expected a request ID to be defined for the document via self.__next_r.`), "__NEXT_ERROR_CODE", { + value: "E806", + enumerable: false, + configurable: true + }); + } + } + const { readable } = getOrCreateDebugChannelReadableWriterPair(requestId); + return { + readable + }; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=debug-channel.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/flight-data-helpers.js b/build/node_modules/next/dist/client/flight-data-helpers.js new file mode 100644 index 0000000..1a5738b --- /dev/null +++ b/build/node_modules/next/dist/client/flight-data-helpers.js @@ -0,0 +1,232 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createInitialRSCPayloadFromFallbackPrerender: null, + getFlightDataPartsFromPath: null, + getNextFlightSegmentPath: null, + normalizeFlightData: null, + prepareFlightRouterStateForRequest: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createInitialRSCPayloadFromFallbackPrerender: function() { + return createInitialRSCPayloadFromFallbackPrerender; + }, + getFlightDataPartsFromPath: function() { + return getFlightDataPartsFromPath; + }, + getNextFlightSegmentPath: function() { + return getNextFlightSegmentPath; + }, + normalizeFlightData: function() { + return normalizeFlightData; + }, + prepareFlightRouterStateForRequest: function() { + return prepareFlightRouterStateForRequest; + } +}); +const _segment = require("../shared/lib/segment"); +const _routeparams = require("./route-params"); +const _createhreffromurl = require("./components/router-reducer/create-href-from-url"); +function getFlightDataPartsFromPath(flightDataPath) { + // Pick the last 4 items from the `FlightDataPath` to get the [tree, seedData, viewport, isHeadPartial]. + const flightDataPathLength = 4; + // tree, seedData, and head are *always* the last three items in the `FlightDataPath`. + const [tree, seedData, head, isHeadPartial] = flightDataPath.slice(-flightDataPathLength); + // The `FlightSegmentPath` is everything except the last three items. For a root render, it won't be present. + const segmentPath = flightDataPath.slice(0, -flightDataPathLength); + return { + // TODO: Unify these two segment path helpers. We are inconsistently pushing an empty segment ("") + // to the start of the segment path in some places which makes it hard to use solely the segment path. + // Look for "// TODO-APP: remove ''" in the codebase. + pathToSegment: segmentPath.slice(0, -1), + segmentPath, + // if the `FlightDataPath` corresponds with the root, there'll be no segment path, + // in which case we default to ''. + segment: segmentPath[segmentPath.length - 1] ?? '', + tree, + seedData, + head, + isHeadPartial, + isRootRender: flightDataPath.length === flightDataPathLength + }; +} +function createInitialRSCPayloadFromFallbackPrerender(response, fallbackInitialRSCPayload) { + // This is a static fallback page. In order to hydrate the page, we need to + // parse the client params from the URL, but to account for the possibility + // that the page was rewritten, we need to check the response headers + // for x-nextjs-rewritten-path or x-nextjs-rewritten-query headers. Since + // we can't access the headers of the initial document response, the client + // performs a fetch request to the current location. Since it's possible that + // the fetch request will be dynamically rewritten to a different path than + // the initial document, this fetch request delivers _all_ the hydration data + // for the page; it was not inlined into the document, like it normally + // would be. + // + // TODO: Consider treating the case where fetch is rewritten to a different + // path from the document as a special deopt case. We should optimistically + // assume this won't happen, inline the data into the document, and perform + // a minimal request (like a HEAD or range request) to verify that the + // response matches. Tricky to get right because we need to account for + // all the different deployment environments we support, like output: + // "export" mode, where we currently don't assume that custom response + // headers are present. + // Patch the Flight data sent by the server with the correct params parsed + // from the URL + response object. + const renderedPathname = (0, _routeparams.getRenderedPathname)(response); + const renderedSearch = (0, _routeparams.getRenderedSearch)(response); + const canonicalUrl = (0, _createhreffromurl.createHrefFromUrl)(new URL(location.href)); + const originalFlightDataPath = fallbackInitialRSCPayload.f[0]; + const originalFlightRouterState = originalFlightDataPath[0]; + const payload = { + c: canonicalUrl.split('/'), + q: renderedSearch, + i: fallbackInitialRSCPayload.i, + f: [ + [ + fillInFallbackFlightRouterState(originalFlightRouterState, renderedPathname, renderedSearch), + originalFlightDataPath[1], + originalFlightDataPath[2], + originalFlightDataPath[2] + ] + ], + m: fallbackInitialRSCPayload.m, + G: fallbackInitialRSCPayload.G, + S: fallbackInitialRSCPayload.S, + h: fallbackInitialRSCPayload.h + }; + if (fallbackInitialRSCPayload.b) { + payload.b = fallbackInitialRSCPayload.b; + } + return payload; +} +function fillInFallbackFlightRouterState(flightRouterState, renderedPathname, renderedSearch) { + const pathnameParts = renderedPathname.split('/').filter((p)=>p !== ''); + const index = 0; + return fillInFallbackFlightRouterStateImpl(flightRouterState, renderedSearch, pathnameParts, index); +} +function fillInFallbackFlightRouterStateImpl(flightRouterState, renderedSearch, pathnameParts, pathnamePartsIndex) { + const originalSegment = flightRouterState[0]; + let newSegment; + let doesAppearInURL; + if (typeof originalSegment === 'string') { + newSegment = originalSegment; + doesAppearInURL = (0, _routeparams.doesStaticSegmentAppearInURL)(originalSegment); + } else { + const paramName = originalSegment[0]; + const paramType = originalSegment[2]; + const staticSiblings = originalSegment[3]; + const paramValue = (0, _routeparams.parseDynamicParamFromURLPart)(paramType, pathnameParts, pathnamePartsIndex); + const cacheKey = (0, _routeparams.getCacheKeyForDynamicParam)(paramValue, renderedSearch); + newSegment = [ + paramName, + cacheKey, + paramType, + staticSiblings + ]; + doesAppearInURL = true; + } + // Only increment the index if the segment appears in the URL. If it's a + // "virtual" segment, like a route group, it remains the same. + const childPathnamePartsIndex = doesAppearInURL ? pathnamePartsIndex + 1 : pathnamePartsIndex; + const children = flightRouterState[1]; + const newChildren = {}; + for(let key in children){ + const childFlightRouterState = children[key]; + newChildren[key] = fillInFallbackFlightRouterStateImpl(childFlightRouterState, renderedSearch, pathnameParts, childPathnamePartsIndex); + } + const newState = [ + newSegment, + newChildren, + null, + flightRouterState[3], + flightRouterState[4] + ]; + return newState; +} +function getNextFlightSegmentPath(flightSegmentPath) { + // Since `FlightSegmentPath` is a repeated tuple of `Segment` and `ParallelRouteKey`, we slice off two items + // to get the next segment path. + return flightSegmentPath.slice(2); +} +function normalizeFlightData(flightData) { + // FlightData can be a string when the server didn't respond with a proper flight response, + // or when a redirect happens, to signal to the client that it needs to perform an MPA navigation. + if (typeof flightData === 'string') { + return flightData; + } + return flightData.map((flightDataPath)=>getFlightDataPartsFromPath(flightDataPath)); +} +function prepareFlightRouterStateForRequest(flightRouterState, isHmrRefresh) { + // HMR requests need the complete, unmodified state for proper functionality + if (isHmrRefresh) { + return encodeURIComponent(JSON.stringify(flightRouterState)); + } + return encodeURIComponent(JSON.stringify(stripClientOnlyDataFromFlightRouterState(flightRouterState))); +} +/** + * Recursively strips client-only data from FlightRouterState while preserving + * server-needed information for proper rendering decisions. + */ function stripClientOnlyDataFromFlightRouterState(flightRouterState) { + const [segment, parallelRoutes, _refreshState, refreshMarker, prefetchHints] = flightRouterState; + // Strip client-only data from the segment + const cleanedSegment = stripClientOnlyDataFromSegment(segment); + // Recursively process parallel routes + const cleanedParallelRoutes = {}; + for (const [key, childState] of Object.entries(parallelRoutes)){ + cleanedParallelRoutes[key] = stripClientOnlyDataFromFlightRouterState(childState); + } + const result = [ + cleanedSegment, + cleanedParallelRoutes + ]; + if (refreshMarker) { + result[2] = null // null slightly more compact than undefined + ; + result[3] = refreshMarker; + } + // Append optional fields if present + if (prefetchHints !== undefined) { + result[4] = prefetchHints; + } + // Everything else is used only by the client and is not needed for requests. + return result; +} +/** + * Strips client-only data from segments: + * - Search parameters from __PAGE__ segments + * - staticSiblings from dynamic segment tuples (only needed for client-side + * prefetch reuse decisions) + */ function stripClientOnlyDataFromSegment(segment) { + if (typeof segment === 'string') { + // Strip search params from __PAGE__ segments + if (segment.startsWith(_segment.PAGE_SEGMENT_KEY + '?')) { + return _segment.PAGE_SEGMENT_KEY; + } + return segment; + } + // Dynamic segment tuple: [paramName, paramCacheKey, paramType, staticSiblings] + // Strip staticSiblings (4th element) since server doesn't need it + const [paramName, paramCacheKey, paramType] = segment; + return [ + paramName, + paramCacheKey, + paramType, + null + ]; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=flight-data-helpers.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/has-base-path.js b/build/node_modules/next/dist/client/has-base-path.js new file mode 100644 index 0000000..06961e8 --- /dev/null +++ b/build/node_modules/next/dist/client/has-base-path.js @@ -0,0 +1,23 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "hasBasePath", { + enumerable: true, + get: function() { + return hasBasePath; + } +}); +const _pathhasprefix = require("../shared/lib/router/utils/path-has-prefix"); +const basePath = process.env.__NEXT_ROUTER_BASEPATH || ''; +function hasBasePath(path) { + return (0, _pathhasprefix.pathHasPrefix)(path, basePath); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=has-base-path.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/lib/console.js b/build/node_modules/next/dist/client/lib/console.js new file mode 100644 index 0000000..57f82bc --- /dev/null +++ b/build/node_modules/next/dist/client/lib/console.js @@ -0,0 +1,177 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + formatConsoleArgs: null, + parseConsoleArgs: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + formatConsoleArgs: function() { + return formatConsoleArgs; + }, + parseConsoleArgs: function() { + return parseConsoleArgs; + } +}); +const _interop_require_default = require("@swc/helpers/_/_interop_require_default"); +const _iserror = /*#__PURE__*/ _interop_require_default._(require("../../lib/is-error")); +function formatObject(arg, depth) { + switch(typeof arg){ + case 'object': + if (arg === null) { + return 'null'; + } else if (Array.isArray(arg)) { + let result = '['; + if (depth < 1) { + for(let i = 0; i < arg.length; i++){ + if (result !== '[') { + result += ','; + } + if (Object.prototype.hasOwnProperty.call(arg, i)) { + result += formatObject(arg[i], depth + 1); + } + } + } else { + result += arg.length > 0 ? '...' : ''; + } + result += ']'; + return result; + } else if (arg instanceof Error) { + return arg + ''; + } else { + const keys = Object.keys(arg); + let result = '{'; + if (depth < 1) { + for(let i = 0; i < keys.length; i++){ + const key = keys[i]; + const desc = Object.getOwnPropertyDescriptor(arg, 'key'); + if (desc && !desc.get && !desc.set) { + const jsonKey = JSON.stringify(key); + if (jsonKey !== '"' + key + '"') { + result += jsonKey + ': '; + } else { + result += key + ': '; + } + result += formatObject(desc.value, depth + 1); + } + } + } else { + result += keys.length > 0 ? '...' : ''; + } + result += '}'; + return result; + } + case 'string': + return JSON.stringify(arg); + case 'number': + case 'bigint': + case 'boolean': + case 'symbol': + case 'undefined': + case 'function': + default: + return String(arg); + } +} +function formatConsoleArgs(args) { + let message; + let idx; + if (typeof args[0] === 'string') { + message = args[0]; + idx = 1; + } else { + message = ''; + idx = 0; + } + let result = ''; + let startQuote = false; + for(let i = 0; i < message.length; ++i){ + const char = message[i]; + if (char !== '%' || i === message.length - 1 || idx >= args.length) { + result += char; + continue; + } + const code = message[++i]; + switch(code){ + case 'c': + { + // TODO: We should colorize with HTML instead of turning into a string. + // Ignore for now. + result = startQuote ? `${result}]` : `[${result}`; + startQuote = !startQuote; + idx++; + break; + } + case 'O': + case 'o': + { + result += formatObject(args[idx++], 0); + break; + } + case 'd': + case 'i': + { + result += parseInt(args[idx++], 10); + break; + } + case 'f': + { + result += parseFloat(args[idx++]); + break; + } + case 's': + { + result += String(args[idx++]); + break; + } + default: + result += '%' + code; + } + } + for(; idx < args.length; idx++){ + result += (idx > 0 ? ' ' : '') + formatObject(args[idx], 0); + } + return result; +} +function parseConsoleArgs(args) { + // See + // https://github.com/facebook/react/blob/65a56d0e99261481c721334a3ec4561d173594cd/packages/react-devtools-shared/src/backend/flight/renderer.js#L88-L93 + // + // Logs replayed from the server look like this: + // [ + // "%c%s%c%o\n\n%s\n\n%s\n", + // "background: #e6e6e6; ...", + // " Server ", // can also be e.g. " Prerender " + // "", + // Error, + // "The above error occurred in the component.", + // ... + // ] + if (args.length > 3 && typeof args[0] === 'string' && args[0].startsWith('%c%s%c') && typeof args[1] === 'string' && typeof args[2] === 'string' && typeof args[3] === 'string') { + const environmentName = args[2]; + const maybeError = args[4]; + return { + environmentName: environmentName.trim(), + error: (0, _iserror.default)(maybeError) ? maybeError : null + }; + } + return { + environmentName: null, + error: null + }; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=console.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/lib/javascript-url.js b/build/node_modules/next/dist/client/lib/javascript-url.js new file mode 100644 index 0000000..5db4635 --- /dev/null +++ b/build/node_modules/next/dist/client/lib/javascript-url.js @@ -0,0 +1,32 @@ +// Adapted from React's sanitizeURL function found here: https://github.com/facebook/react/blob/b565373afd0cc1988497e1107106e851e8cfb261/packages/react-dom-bindings/src/shared/sanitizeURL.js +// A javascript: URL can contain leading C0 control or \u0020 SPACE, +// and any newline or tab are filtered out as if they're not part of the URL. +// https://url.spec.whatwg.org/#url-parsing +// Tab or newline are defined as \r\n\t: +// https://infra.spec.whatwg.org/#ascii-tab-or-newline +// A C0 control is a code point in the range \u0000 NULL to \u001F +// INFORMATION SEPARATOR ONE, inclusive: +// https://infra.spec.whatwg.org/#c0-control-or-space +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "isJavaScriptURLString", { + enumerable: true, + get: function() { + return isJavaScriptURLString; + } +}); +const isJavaScriptProtocol = // eslint-disable-next-line no-control-regex +/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i; +function isJavaScriptURLString(url) { + return isJavaScriptProtocol.test('' + url); +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=javascript-url.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/navigation-build-id.js b/build/node_modules/next/dist/client/navigation-build-id.js new file mode 100644 index 0000000..99b7f32 --- /dev/null +++ b/build/node_modules/next/dist/client/navigation-build-id.js @@ -0,0 +1,53 @@ +// This gets assigned as a side-effect during app initialization. Because it +// represents the build used to create the JS bundle, it should never change +// after being set, so we store it in a global variable. +// +// When performing RSC requests, if the incoming data has a different build ID, +// we perform an MPA navigation/refresh to load the updated build and ensure +// that the client and server in sync. +// +// Starts as an empty string. In practice, because setNavigationBuildId is called during initialization +// before hydration starts, this will always get reassigned to the actual ID before it's ever needed +// by a navigation. If for some reasons it didn't, due to a bug or race condition, then on +// navigation the build comparision would fail and trigger an MPA navigation. +// +// Note that this can also be initialized with the deployment id instead (if available). So it's not +// the same as "the build id", but we are running out of alternative names for "build id or +// deployment id". +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getNavigationBuildId: null, + setNavigationBuildId: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getNavigationBuildId: function() { + return getNavigationBuildId; + }, + setNavigationBuildId: function() { + return setNavigationBuildId; + } +}); +let globalBuildId = ''; +function setNavigationBuildId(buildId) { + globalBuildId = buildId; +} +function getNavigationBuildId() { + return globalBuildId; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=navigation-build-id.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/normalize-trailing-slash.js b/build/node_modules/next/dist/client/normalize-trailing-slash.js new file mode 100644 index 0000000..c16b9bf --- /dev/null +++ b/build/node_modules/next/dist/client/normalize-trailing-slash.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "normalizePathTrailingSlash", { + enumerable: true, + get: function() { + return normalizePathTrailingSlash; + } +}); +const _removetrailingslash = require("../shared/lib/router/utils/remove-trailing-slash"); +const _parsepath = require("../shared/lib/router/utils/parse-path"); +const normalizePathTrailingSlash = (path)=>{ + if (!path.startsWith('/') || process.env.__NEXT_MANUAL_TRAILING_SLASH) { + return path; + } + const { pathname, query, hash } = (0, _parsepath.parsePath)(path); + if (process.env.__NEXT_TRAILING_SLASH) { + if (/\.[^/]+\/?$/.test(pathname)) { + return `${(0, _removetrailingslash.removeTrailingSlash)(pathname)}${query}${hash}`; + } else if (pathname.endsWith('/')) { + return `${pathname}${query}${hash}`; + } else { + return `${pathname}/${query}${hash}`; + } + } + return `${(0, _removetrailingslash.removeTrailingSlash)(pathname)}${query}${hash}`; +}; + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=normalize-trailing-slash.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/remove-base-path.js b/build/node_modules/next/dist/client/remove-base-path.js new file mode 100644 index 0000000..fda8459 --- /dev/null +++ b/build/node_modules/next/dist/client/remove-base-path.js @@ -0,0 +1,32 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "removeBasePath", { + enumerable: true, + get: function() { + return removeBasePath; + } +}); +const _hasbasepath = require("./has-base-path"); +const basePath = process.env.__NEXT_ROUTER_BASEPATH || ''; +function removeBasePath(path) { + if (process.env.__NEXT_MANUAL_CLIENT_BASE_PATH) { + if (!(0, _hasbasepath.hasBasePath)(path)) { + return path; + } + } + // Can't trim the basePath if it has zero length! + if (basePath.length === 0) return path; + path = path.slice(basePath.length); + if (!path.startsWith('/')) path = `/${path}`; + return path; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=remove-base-path.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/client/route-params.js b/build/node_modules/next/dist/client/route-params.js new file mode 100644 index 0000000..fc6e109 --- /dev/null +++ b/build/node_modules/next/dist/client/route-params.js @@ -0,0 +1,247 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + doesStaticSegmentAppearInURL: null, + getCacheKeyForDynamicParam: null, + getParamValueFromCacheKey: null, + getRenderedPathname: null, + getRenderedSearch: null, + parseDynamicParamFromURLPart: null, + urlSearchParamsToParsedUrlQuery: null, + urlToUrlWithoutFlightMarker: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + doesStaticSegmentAppearInURL: function() { + return doesStaticSegmentAppearInURL; + }, + getCacheKeyForDynamicParam: function() { + return getCacheKeyForDynamicParam; + }, + getParamValueFromCacheKey: function() { + return getParamValueFromCacheKey; + }, + getRenderedPathname: function() { + return getRenderedPathname; + }, + getRenderedSearch: function() { + return getRenderedSearch; + }, + parseDynamicParamFromURLPart: function() { + return parseDynamicParamFromURLPart; + }, + urlSearchParamsToParsedUrlQuery: function() { + return urlSearchParamsToParsedUrlQuery; + }, + urlToUrlWithoutFlightMarker: function() { + return urlToUrlWithoutFlightMarker; + } +}); +const _segment = require("../shared/lib/segment"); +const _segmentvalueencoding = require("../shared/lib/segment-cache/segment-value-encoding"); +const _approuterheaders = require("./components/app-router-headers"); +function getRenderedSearch(response) { + // If the server performed a rewrite, the search params used to render the + // page will be different from the params in the request URL. In this case, + // the response will include a header that gives the rewritten search query. + const rewrittenQuery = response.headers.get(_approuterheaders.NEXT_REWRITTEN_QUERY_HEADER); + if (rewrittenQuery !== null) { + return rewrittenQuery === '' ? '' : '?' + rewrittenQuery; + } + // If the header is not present, there was no rewrite, so we use the search + // query of the response URL. + return urlToUrlWithoutFlightMarker(new URL(response.url)).search; +} +function getRenderedPathname(response) { + // If the server performed a rewrite, the pathname used to render the + // page will be different from the pathname in the request URL. In this case, + // the response will include a header that gives the rewritten pathname. + const rewrittenPath = response.headers.get(_approuterheaders.NEXT_REWRITTEN_PATH_HEADER); + return rewrittenPath ?? urlToUrlWithoutFlightMarker(new URL(response.url)).pathname; +} +// Pathname parts come from `URL.pathname.split('/')`, so they are already +// in the encoded form the URL parser produces. The server-side equivalent +// (`get-dynamic-param.ts`) starts from a decoded param value and applies +// `encodeURIComponent` once. The two encodings are not the same — for +// example, the URL parser leaves `,` and `:` untouched while +// `encodeURIComponent` percent-encodes them. To produce the same canonical +// form on the client (and avoid double-encoding `%xx` sequences such as +// `%2F` → `%252F`), we decode the URL part first and re-encode it. +function canonicalizeURLPart(part) { + try { + return encodeURIComponent(decodeURIComponent(part)); + } catch { + // `decodeURIComponent` throws on malformed sequences. Fall back to the + // already-encoded form rather than failing the navigation. + return part; + } +} +function parseDynamicParamFromURLPart(paramType, pathnameParts, partIndex) { + // This needs to match the behavior in get-dynamic-param.ts. + switch(paramType){ + // Catchalls + case 'c': + { + // Catchalls receive all the remaining URL parts. If there are no + // remaining pathname parts, return an empty array. + return partIndex < pathnameParts.length ? pathnameParts.slice(partIndex).map((s)=>canonicalizeURLPart(s)) : []; + } + // Catchall intercepted + case 'ci(..)(..)': + case 'ci(.)': + case 'ci(..)': + case 'ci(...)': + { + const prefix = paramType.length - 2; + return partIndex < pathnameParts.length ? pathnameParts.slice(partIndex).map((s, i)=>{ + if (i === 0) { + return canonicalizeURLPart(s.slice(prefix)); + } + return canonicalizeURLPart(s); + }) : []; + } + // Optional catchalls + case 'oc': + { + // Optional catchalls receive all the remaining URL parts, unless this is + // the end of the pathname, in which case they return null. + return partIndex < pathnameParts.length ? pathnameParts.slice(partIndex).map((s)=>canonicalizeURLPart(s)) : null; + } + // Dynamic + case 'd': + { + if (partIndex >= pathnameParts.length) { + // The route tree expected there to be more parts in the URL than there + // actually are. This could happen if the x-nextjs-rewritten-path header + // is incorrectly set, or potentially due to bug in Next.js. TODO: + // Should this be a hard error? During a prefetch, we can just abort. + // During a client navigation, we could trigger a hard refresh. But if + // it happens during initial render, we don't really have any + // recovery options. + return ''; + } + return canonicalizeURLPart(pathnameParts[partIndex]); + } + // Dynamic intercepted + case 'di(..)(..)': + case 'di(.)': + case 'di(..)': + case 'di(...)': + { + const prefix = paramType.length - 2; + if (partIndex >= pathnameParts.length) { + // The route tree expected there to be more parts in the URL than there + // actually are. This could happen if the x-nextjs-rewritten-path header + // is incorrectly set, or potentially due to bug in Next.js. TODO: + // Should this be a hard error? During a prefetch, we can just abort. + // During a client navigation, we could trigger a hard refresh. But if + // it happens during initial render, we don't really have any + // recovery options. + return ''; + } + return canonicalizeURLPart(pathnameParts[partIndex].slice(prefix)); + } + default: + paramType; + return ''; + } +} +function doesStaticSegmentAppearInURL(segment) { + // This is not a parameterized segment; however, we need to determine + // whether or not this segment appears in the URL. For example, this route + // groups do not appear in the URL, so they should be skipped. Any other + // special cases must be handled here. + // TODO: Consider encoding this directly into the router tree instead of + // inferring it on the client based on the segment type. Something like + // a `doesAppearInURL` flag in FlightRouterState. + if (segment === _segmentvalueencoding.ROOT_SEGMENT_REQUEST_KEY || // For some reason, the loader tree sometimes includes extra __PAGE__ + // "layouts" when part of a parallel route. But it's not a leaf node. + // Otherwise, we wouldn't need this special case because pages are + // always leaf nodes. + // TODO: Investigate why the loader produces these fake page segments. + segment.startsWith(_segment.PAGE_SEGMENT_KEY) || // Route groups. + segment[0] === '(' && segment.endsWith(')') || segment === _segment.DEFAULT_SEGMENT_KEY || segment === '/_not-found') { + return false; + } else { + // All other segment types appear in the URL + return true; + } +} +function getCacheKeyForDynamicParam(paramValue, renderedSearch) { + // This needs to match the logic in get-dynamic-param.ts, until we're able to + // unify the various implementations so that these are always computed on + // the client. + if (typeof paramValue === 'string') { + // TODO: Refactor or remove this helper function to accept a string rather + // than the whole segment type. Also we can probably just append the + // search string instead of turning it into JSON. + const pageSegmentWithSearchParams = (0, _segment.addSearchParamsIfPageSegment)(paramValue, Object.fromEntries(new URLSearchParams(renderedSearch))); + return pageSegmentWithSearchParams; + } else if (paramValue === null) { + return ''; + } else { + return paramValue.join('/'); + } +} +function urlToUrlWithoutFlightMarker(url) { + const urlWithoutFlightParameters = new URL(url); + urlWithoutFlightParameters.searchParams.delete(_approuterheaders.NEXT_RSC_UNION_QUERY); + if (process.env.NODE_ENV === 'production') { + if (process.env.__NEXT_CONFIG_OUTPUT === 'export' && urlWithoutFlightParameters.pathname.endsWith('.txt')) { + const { pathname } = urlWithoutFlightParameters; + const length = pathname.endsWith('/index.txt') ? 10 : 4; + // Slice off `/index.txt` or `.txt` from the end of the pathname + urlWithoutFlightParameters.pathname = pathname.slice(0, -length); + } + } + return urlWithoutFlightParameters; +} +function getParamValueFromCacheKey(paramCacheKey, paramType) { + // Turn the cache key string sent by the server (as part of FlightRouterState) + // into a value that can be passed to `useParams` and client components. + const isCatchAll = paramType === 'c' || paramType === 'oc'; + if (isCatchAll) { + // Catch-all param keys are a concatenation of the path segments. + // See equivalent logic in `getSelectedParams`. + // TODO: We should just pass the array directly, rather than concatenate + // it to a string and then split it back to an array. It needs to be an + // array in some places, like when passing a key React, but we can convert + // it at runtime in those places. + return paramCacheKey.split('/'); + } + return paramCacheKey; +} +function urlSearchParamsToParsedUrlQuery(searchParams) { + // Converts a URLSearchParams object to the same type used by the server when + // creating search params props, i.e. the type returned by Node's + // "querystring" module. + const result = {}; + for (const [key, value] of searchParams.entries()){ + if (result[key] === undefined) { + result[key] = value; + } else if (Array.isArray(result[key])) { + result[key].push(value); + } else { + result[key] = [ + result[key], + value + ]; + } + } + return result; +} + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=route-params.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js b/build/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js new file mode 100644 index 0000000..e82cb32 --- /dev/null +++ b/build/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js @@ -0,0 +1,339 @@ +"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/index.ts +var src_exports = {}; +__export(src_exports, { + RequestCookies: () => RequestCookies, + ResponseCookies: () => ResponseCookies, + parseCookie: () => parseCookie, + parseSetCookie: () => parseSetCookie, + stringifyCookie: () => stringifyCookie +}); +module.exports = __toCommonJS(src_exports); + +// src/serialize.ts +function stringifyCookie(c) { + var _a; + const attrs = [ + "path" in c && c.path && `Path=${c.path}`, + "expires" in c && (c.expires || c.expires === 0) && `Expires=${(typeof c.expires === "number" ? new Date(c.expires) : c.expires).toUTCString()}`, + "maxAge" in c && typeof c.maxAge === "number" && `Max-Age=${c.maxAge}`, + "domain" in c && c.domain && `Domain=${c.domain}`, + "secure" in c && c.secure && "Secure", + "httpOnly" in c && c.httpOnly && "HttpOnly", + "sameSite" in c && c.sameSite && `SameSite=${c.sameSite}`, + "partitioned" in c && c.partitioned && "Partitioned", + "priority" in c && c.priority && `Priority=${c.priority}` + ].filter(Boolean); + const stringified = `${c.name}=${encodeURIComponent((_a = c.value) != null ? _a : "")}`; + return attrs.length === 0 ? stringified : `${stringified}; ${attrs.join("; ")}`; +} +function parseCookie(cookie) { + const map = /* @__PURE__ */ new Map(); + for (const pair of cookie.split(/; */)) { + if (!pair) + continue; + const splitAt = pair.indexOf("="); + if (splitAt === -1) { + map.set(pair, "true"); + continue; + } + const [key, value] = [pair.slice(0, splitAt), pair.slice(splitAt + 1)]; + try { + map.set(key, decodeURIComponent(value != null ? value : "true")); + } catch { + } + } + return map; +} +function parseSetCookie(setCookie) { + if (!setCookie) { + return void 0; + } + const [[name, value], ...attributes] = parseCookie(setCookie); + const { + domain, + expires, + httponly, + maxage, + path, + samesite, + secure, + partitioned, + priority + } = Object.fromEntries( + attributes.map(([key, value2]) => [ + key.toLowerCase().replace(/-/g, ""), + value2 + ]) + ); + const cookie = { + name, + value: decodeURIComponent(value), + domain, + ...expires && { expires: new Date(expires) }, + ...httponly && { httpOnly: true }, + ...typeof maxage === "string" && { maxAge: Number(maxage) }, + path, + ...samesite && { sameSite: parseSameSite(samesite) }, + ...secure && { secure: true }, + ...priority && { priority: parsePriority(priority) }, + ...partitioned && { partitioned: true } + }; + return compact(cookie); +} +function compact(t) { + const newT = {}; + for (const key in t) { + if (t[key]) { + newT[key] = t[key]; + } + } + return newT; +} +var SAME_SITE = ["strict", "lax", "none"]; +function parseSameSite(string) { + string = string.toLowerCase(); + return SAME_SITE.includes(string) ? string : void 0; +} +var PRIORITY = ["low", "medium", "high"]; +function parsePriority(string) { + string = string.toLowerCase(); + return PRIORITY.includes(string) ? string : void 0; +} +function splitCookiesString(cookiesString) { + if (!cookiesString) + return []; + var cookiesStrings = []; + var pos = 0; + var start; + var ch; + var lastComma; + var nextStart; + var cookiesSeparatorFound; + function skipWhitespace() { + while (pos < cookiesString.length && /\s/.test(cookiesString.charAt(pos))) { + pos += 1; + } + return pos < cookiesString.length; + } + function notSpecialChar() { + ch = cookiesString.charAt(pos); + return ch !== "=" && ch !== ";" && ch !== ","; + } + while (pos < cookiesString.length) { + start = pos; + cookiesSeparatorFound = false; + while (skipWhitespace()) { + ch = cookiesString.charAt(pos); + if (ch === ",") { + lastComma = pos; + pos += 1; + skipWhitespace(); + nextStart = pos; + while (pos < cookiesString.length && notSpecialChar()) { + pos += 1; + } + if (pos < cookiesString.length && cookiesString.charAt(pos) === "=") { + cookiesSeparatorFound = true; + pos = nextStart; + cookiesStrings.push(cookiesString.substring(start, lastComma)); + start = pos; + } else { + pos = lastComma + 1; + } + } else { + pos += 1; + } + } + if (!cookiesSeparatorFound || pos >= cookiesString.length) { + cookiesStrings.push(cookiesString.substring(start, cookiesString.length)); + } + } + return cookiesStrings; +} + +// src/request-cookies.ts +var RequestCookies = class { + constructor(requestHeaders) { + /** @internal */ + this._parsed = /* @__PURE__ */ new Map(); + this._headers = requestHeaders; + const header = requestHeaders.get("cookie"); + if (header) { + const parsed = parseCookie(header); + for (const [name, value] of parsed) { + this._parsed.set(name, { name, value }); + } + } + } + [Symbol.iterator]() { + return this._parsed[Symbol.iterator](); + } + /** + * The amount of cookies received from the client + */ + get size() { + return this._parsed.size; + } + get(...args) { + const name = typeof args[0] === "string" ? args[0] : args[0].name; + return this._parsed.get(name); + } + getAll(...args) { + var _a; + const all = Array.from(this._parsed); + if (!args.length) { + return all.map(([_, value]) => value); + } + const name = typeof args[0] === "string" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name; + return all.filter(([n]) => n === name).map(([_, value]) => value); + } + has(name) { + return this._parsed.has(name); + } + set(...args) { + const [name, value] = args.length === 1 ? [args[0].name, args[0].value] : args; + const map = this._parsed; + map.set(name, { name, value }); + this._headers.set( + "cookie", + Array.from(map).map(([_, value2]) => stringifyCookie(value2)).join("; ") + ); + return this; + } + /** + * Delete the cookies matching the passed name or names in the request. + */ + delete(names) { + const map = this._parsed; + const result = !Array.isArray(names) ? map.delete(names) : names.map((name) => map.delete(name)); + this._headers.set( + "cookie", + Array.from(map).map(([_, value]) => stringifyCookie(value)).join("; ") + ); + return result; + } + /** + * Delete all the cookies in the cookies in the request. + */ + clear() { + this.delete(Array.from(this._parsed.keys())); + return this; + } + /** + * Format the cookies in the request as a string for logging + */ + [Symbol.for("edge-runtime.inspect.custom")]() { + return `RequestCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`; + } + toString() { + return [...this._parsed.values()].map((v) => `${v.name}=${encodeURIComponent(v.value)}`).join("; "); + } +}; + +// src/response-cookies.ts +var ResponseCookies = class { + constructor(responseHeaders) { + /** @internal */ + this._parsed = /* @__PURE__ */ new Map(); + var _a, _b, _c; + this._headers = responseHeaders; + const setCookie = (_c = (_b = (_a = responseHeaders.getSetCookie) == null ? void 0 : _a.call(responseHeaders)) != null ? _b : responseHeaders.get("set-cookie")) != null ? _c : []; + const cookieStrings = Array.isArray(setCookie) ? setCookie : splitCookiesString(setCookie); + for (const cookieString of cookieStrings) { + const parsed = parseSetCookie(cookieString); + if (parsed) + this._parsed.set(parsed.name, parsed); + } + } + /** + * {@link https://wicg.github.io/cookie-store/#CookieStore-get CookieStore#get} without the Promise. + */ + get(...args) { + const key = typeof args[0] === "string" ? args[0] : args[0].name; + return this._parsed.get(key); + } + /** + * {@link https://wicg.github.io/cookie-store/#CookieStore-getAll CookieStore#getAll} without the Promise. + */ + getAll(...args) { + var _a; + const all = Array.from(this._parsed.values()); + if (!args.length) { + return all; + } + const key = typeof args[0] === "string" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name; + return all.filter((c) => c.name === key); + } + has(name) { + return this._parsed.has(name); + } + /** + * {@link https://wicg.github.io/cookie-store/#CookieStore-set CookieStore#set} without the Promise. + */ + set(...args) { + const [name, value, cookie] = args.length === 1 ? [args[0].name, args[0].value, args[0]] : args; + const map = this._parsed; + map.set(name, normalizeCookie({ name, value, ...cookie })); + replace(map, this._headers); + return this; + } + /** + * {@link https://wicg.github.io/cookie-store/#CookieStore-delete CookieStore#delete} without the Promise. + */ + delete(...args) { + const [name, options] = typeof args[0] === "string" ? [args[0]] : [args[0].name, args[0]]; + return this.set({ ...options, name, value: "", expires: /* @__PURE__ */ new Date(0) }); + } + [Symbol.for("edge-runtime.inspect.custom")]() { + return `ResponseCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`; + } + toString() { + return [...this._parsed.values()].map(stringifyCookie).join("; "); + } +}; +function replace(bag, headers) { + headers.delete("set-cookie"); + for (const [, value] of bag) { + const serialized = stringifyCookie(value); + headers.append("set-cookie", serialized); + } +} +function normalizeCookie(cookie = { name: "", value: "" }) { + if (typeof cookie.expires === "number") { + cookie.expires = new Date(cookie.expires); + } + if (cookie.maxAge) { + cookie.expires = new Date(Date.now() + cookie.maxAge * 1e3); + } + if (cookie.path === null || cookie.path === void 0) { + cookie.path = "/"; + } + return cookie; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + RequestCookies, + ResponseCookies, + parseCookie, + parseSetCookie, + stringifyCookie +}); diff --git a/build/node_modules/next/dist/compiled/@edge-runtime/cookies/package.json b/build/node_modules/next/dist/compiled/@edge-runtime/cookies/package.json new file mode 100644 index 0000000..949cc25 --- /dev/null +++ b/build/node_modules/next/dist/compiled/@edge-runtime/cookies/package.json @@ -0,0 +1 @@ +{"name":"@edge-runtime/cookies","version":"6.0.0","main":"./index.js","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/@edge-runtime/ponyfill/index.js b/build/node_modules/next/dist/compiled/@edge-runtime/ponyfill/index.js new file mode 100644 index 0000000..330f10b --- /dev/null +++ b/build/node_modules/next/dist/compiled/@edge-runtime/ponyfill/index.js @@ -0,0 +1,46 @@ +module.exports = + typeof EdgeRuntime === 'string' ? edge() : require("next/dist/compiled/@edge-runtime/primitives") + +function edge() { + return { + AbortController, + AbortSignal, + atob, + Blob, + btoa, + console, + crypto, + Crypto, + CryptoKey, + DOMException, + Event, + EventTarget, + fetch, + FetchEvent, + File, + FormData, + Headers, + performance, + PromiseRejectionEvent, + ReadableStream, + ReadableStreamBYOBReader, + ReadableStreamDefaultReader, + Request, + Response, + setInterval, + setTimeout, + structuredClone, + SubtleCrypto, + TextDecoder, + TextDecoderStream, + TextEncoder, + TextEncoderStream, + TransformStream, + URL, + URLPattern, + URLSearchParams, + WebSocket, + WritableStream, + WritableStreamDefaultWriter, + } +} diff --git a/build/node_modules/next/dist/compiled/@edge-runtime/ponyfill/package.json b/build/node_modules/next/dist/compiled/@edge-runtime/ponyfill/package.json new file mode 100644 index 0000000..a57601f --- /dev/null +++ b/build/node_modules/next/dist/compiled/@edge-runtime/ponyfill/package.json @@ -0,0 +1 @@ +{"name":"@edge-runtime/ponyfill","version":"4.0.0","main":"./index.js","types":"./index.d.ts","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/@edge-runtime/primitives/abort-controller.js.text.js b/build/node_modules/next/dist/compiled/@edge-runtime/primitives/abort-controller.js.text.js new file mode 100644 index 0000000..68d7c4c --- /dev/null +++ b/build/node_modules/next/dist/compiled/@edge-runtime/primitives/abort-controller.js.text.js @@ -0,0 +1 @@ +module.exports = "\"use strict\";var c=Object.defineProperty,f=Object.getOwnPropertyDescriptor,y=Object.getOwnPropertyNames,S=Object.prototype.hasOwnProperty,a=(r,t)=>c(r,\"name\",{value:t,configurable:!0}),m=(r,t)=>{for(var e in t)c(r,e,{get:t[e],enumerable:!0})},w=(r,t,e,p)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let n of y(t))!S.call(r,n)&&n!==e&&c(r,n,{get:()=>t[n],enumerable:!(p=f(t,n))||p.enumerable});return r},E=r=>w(c({},\"__esModule\",{value:!0}),r),_={};m(_,{AbortController:()=>x,AbortSignal:()=>O,DOMException:()=>u});module.exports=E(_);var v=Symbol(\"kSignal\"),i=Symbol(\"kAborted\"),s=Symbol(\"kReason\"),g=Symbol(\"kName\"),o=Symbol(\"kOnabort\"),h=class extends Error{constructor(t,e){super(t),this[g]=e}get name(){return this[g]}};a(h,\"DOMException\");var u=h;function b(){let r=new EventTarget;return Object.setPrototypeOf(r,O.prototype),r[i]=!1,r[s]=void 0,r[o]=void 0,r}a(b,\"createAbortSignal\");function l(r,t){typeof t>\"u\"&&(t=new u(\"This operation was aborted\",\"AbortError\")),!r.aborted&&(r[s]=t,r[i]=!0,r.dispatchEvent(new Event(\"abort\")))}a(l,\"abortSignalAbort\");var d=class{constructor(){this[v]=b()}get signal(){return this[v]}abort(t){l(this.signal,t)}};a(d,\"AbortController\");var x=d,A=class extends EventTarget{constructor(){throw new TypeError(\"Illegal constructor\")}get aborted(){return this[i]}get reason(){return this[s]}get onabort(){return this[o]}set onabort(t){this[o]&&this.removeEventListener(\"abort\",this[o]),t&&(this[o]=t,this.addEventListener(\"abort\",this[o]))}throwIfAborted(){if(this[i])throw this[s]}static abort(t){let e=b();return l(e,t),e}static timeout(t){let e=b();return setTimeout(()=>{l(e,new u(\"The operation was aborted due to timeout\",\"TimeoutError\"))},t),e}};a(A,\"AbortSignal\");var O=A;\n" \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/@edge-runtime/primitives/console.js.text.js b/build/node_modules/next/dist/compiled/@edge-runtime/primitives/console.js.text.js new file mode 100644 index 0000000..1cb95d1 --- /dev/null +++ b/build/node_modules/next/dist/compiled/@edge-runtime/primitives/console.js.text.js @@ -0,0 +1 @@ +module.exports = "\"use strict\";var Gr=Object.create,E=Object.defineProperty,Rr=Object.getOwnPropertyDescriptor,T=Object.getOwnPropertyNames,kr=Object.getPrototypeOf,Mr=Object.prototype.hasOwnProperty,a=(f,y)=>E(f,\"name\",{value:y,configurable:!0}),xr=(f,y)=>function(){return f&&(y=(0,f[T(f)[0]])(f=0)),y},Cr=(f,y)=>function(){return y||(0,f[T(f)[0]])((y={exports:{}}).exports,y),y.exports},Lr=(f,y)=>{for(var d in y)E(f,d,{get:y[d],enumerable:!0})},ir=(f,y,d,I)=>{if(y&&typeof y==\"object\"||typeof y==\"function\")for(let j of T(y))!Mr.call(f,j)&&j!==d&&E(f,j,{get:()=>y[j],enumerable:!(I=Rr(y,j))||I.enumerable});return f},vr=(f,y,d)=>(d=f!=null?Gr(kr(f)):{},ir(y||!f||!f.__esModule?E(d,\"default\",{value:f,enumerable:!0}):d,f)),Tr=f=>ir(E({},\"__esModule\",{value:!0}),f),cr=xr({\"\"(){}}),Br=Cr({\"../format/dist/index.js\"(f,y){\"use strict\";cr();var d=Object.defineProperty,I=Object.getOwnPropertyDescriptor,j=Object.getOwnPropertyNames,ar=Object.prototype.hasOwnProperty,fr=a((r,s)=>{for(var i in s)d(r,i,{get:s[i],enumerable:!0})},\"__export\"),pr=a((r,s,i,l)=>{if(s&&typeof s==\"object\"||typeof s==\"function\")for(let u of j(s))!ar.call(r,u)&&u!==i&&d(r,u,{get:()=>s[u],enumerable:!(l=I(s,u))||l.enumerable});return r},\"__copyProps\"),lr=a(r=>pr(d({},\"__esModule\",{value:!0}),r),\"__toCommonJS\"),B={};fr(B,{createFormat:()=>J}),y.exports=lr(B);var yr=Reflect.getOwnPropertyDescriptor;function N(r,s){let i=yr(r,s);return i?i.get:void 0}a(N,\"GetOwnGetter\");var gr=Reflect.getPrototypeOf,ur=gr(Uint8Array),br=Array.prototype.filter,D=Array.prototype.push,mr=Date.prototype.getTime,dr=Date.prototype.toISOString,Sr=Object.getOwnPropertyDescriptors,F=Object.getOwnPropertyNames,Or=Object.getOwnPropertySymbols,_r=Object.keys,hr=Object.prototype.propertyIsEnumerable,jr=Object.prototype.toString,Pr=N(Map.prototype,\"size\"),wr=N(Set.prototype,\"size\"),Ar=String.prototype.includes,$r=Symbol.iterator,Er=Symbol.prototype.toString,Ir=N(ur.prototype,\"length\"),Nr=new Set([\"[object BigInt64Array]\",\"[object BigUint64Array]\",\"[object Float32Array]\",\"[object Float64Array]\",\"[object Int8Array]\",\"[object Int16Array]\",\"[object Int32Array]\",\"[object Uint8Array]\",\"[object Uint8ClampedArray]\",\"[object Uint16Array]\",\"[object Uint32Array]\"]);function R(r,s){let i=Array.isArray(r)||z(r)?new Set([...r.keys()].map(l=>l.toString())):void 0;return Object.entries(Sr(r)).filter(([l,u])=>!(i&&i.has(l)||s===1&&!u.enumerable)).map(([l])=>l)}a(R,\"getOwnNonIndexProperties\");var z=a(r=>g(r,\"object\")&&Nr.has(jr.call(r)),\"isTypedArray\");function g(r,s){return typeof r===s}a(g,\"kind\");var Dr=a(r=>{var s;return(s=r.constructor)==null?void 0:s.name},\"getConstructorName\"),P=a((r=\"\",s=\"\")=>`${r}${s} `,\"getPrefix\");function J(r={}){r.customInspectSymbol===void 0&&(r.customInspectSymbol=Symbol.for(\"edge-runtime.inspect.custom\")),r.formatError===void 0&&(r.formatError=n=>{var t;let p=(t=n.stack)!=null?t:Error.prototype.toString.call(n);return String(p)});let{formatError:s,customInspectSymbol:i}=r;function l(...n){let[t]=n;if(!g(t,\"string\"))return w(t,i)?l(t[i]({format:l})):n.map(o=>A(o,{customInspectSymbol:i})).join(\" \");let p=1,c=String(t).replace(/%[sjdOoif%]/g,o=>{if(o===\"%%\")return\"%\";if(p>=n.length)return o;switch(o){case\"%s\":{let e=n[p++];return w(e,i)?l(e[i]({format:l})):M(e)||x(e)||g(e,\"bigint\")?l(e):String(e)}case\"%j\":return Y(n[p++]);case\"%d\":{let e=n[p++];return g(e,\"bigint\")?l(e):String(Number(e))}case\"%O\":return A(n[p++],{customInspectSymbol:i});case\"%o\":return A(n[p++],{customInspectSymbol:i,showHidden:!0,depth:4});case\"%i\":{let e=n[p++];return g(e,\"bigint\")?l(e):String(parseInt(e,10))}case\"%f\":return String(parseFloat(n[p++]));default:return o}});for(let o=n[p];p[],\"formatter\"),m=[\"\",\"\"],O=!0,tr=n.showHidden?0:1;if($r in t)if(O=!1,Array.isArray(t)){let b=o!==\"Array\"?P(o,`(${t.length})`):\"\";if(c=R(t,tr),m=[`${b}[`,\"]\"],t.length===0&&c.length===0)return`${m[0]}]`;S=Q}else if(q(t)){let b=wr.call(t),_=P(o,`(${b})`);if(c=G(t,n.showHidden),S=Z,b===0&&c.length===0)return`${_}{}`;m=[`${_}{`,\"}\"]}else if(K(t)){let b=Pr.call(t),_=P(o,`(${b})`);if(c=G(t,n.showHidden),S=rr,b===0&&c.length===0)return`${_}{}`;m=[`${_}{`,\"}\"]}else if(z(t)){c=R(t,tr);let b=Ir.call(t);if(m=[`${P(o,`(${b})`)}[`,\"]\"],t.length===0&&c.length===0)return`${m[0]}]`;S=X.bind(null,b)}else O=!0;if(O)if(c=G(t,n.showHidden),m=[\"{\",\"}\"],o===void 0){if(c.length===0)return\"[Object: null prototype] {}\"}else if(o===\"Object\"){if(c.length===0)return\"{}\"}else if(g(t,\"function\")){if(e=`[Function${t.name?\": \"+t.name:\"\"}]`,c.length===0)return e}else if(k(t)){if(e=RegExp.prototype.toString.call(t),c.length===0)return e;e=\" \"+e}else if(M(t)){if(e=Number.isNaN(mr.call(t))?Date.prototype.toString.call(t):dr.call(t),c.length===0)return e;e=\" \"+e}else if(x(t))e=s(t),c=c.filter(b=>b!==\"name\");else if(w(t,n.customInspectSymbol)){if(e=l(t[n.customInspectSymbol]({format:l})),c.length===0)return e;e=\" \"+e}else m[0]=`${P(o)}{`;if(p&&p<0)return k(t)?RegExp.prototype.toString.call(t):\"[Object]\";n.seen.push(t);let er=new Set(c),nr=S(n,t,p,er,c);for(let b=0;b`;e=e===\"\"?_:`${_} ${e}`}}return n.seen.pop(),W(nr,e,m)}a(h,\"formatRaw\");function A(n,t){return t=Object.assign({seen:[],depth:2},t),u(t,n,t.depth)}a(A,\"inspect\");function L(n,t,p,c,o,e){let S,m,O=Object.getOwnPropertyDescriptor(t,o)||{value:t[o]};return O.value!==void 0?m=u(n,O.value,p):O.get?m=O.set?\"[Getter/Setter]\":\"[Getter]\":O.set?m=\"[Setter]\":m=\"undefined\",e?m:(g(o,\"symbol\")?S=`[${Er.call(o)}]`:c.has(o)?S=o:S=\"[\"+o+\"]\",`${S}: ${m}`)}a(L,\"formatProperty\");function Q(n,t,p,c){let o=[];for(let e=0;e0&&g(p[0],\"number\")?String(p[e]):H(p[e]);if(t.showHidden)for(let e of[\"BYTES_PER_ELEMENT\",\"length\",\"byteLength\",\"byteOffset\",\"buffer\"]){let S=u(t,p[e],c);D.call(o,`[${String(e)}]: ${S}`)}return o}a(X,\"formatTypedArray\");function Z(n,t,p){let c=[];for(let o of t)D.call(c,u(n,o,p));return c}a(Z,\"formatSet\");function rr(n,t,p){let c=[];for(let{0:o,1:e}of t)c.push(`${u(n,o,p)} => ${u(n,e,p)}`);return c}return a(rr,\"formatMap\"),l}a(J,\"createFormat\");var H=a(r=>`${r}n`,\"formatBigInt\");function U(r){if(r===null)return\"null\";if(r===void 0)return\"undefined\";if(g(r,\"string\"))return`'${JSON.stringify(r).replace(/^\"|\"$/g,\"\").replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"')}'`;if(g(r,\"boolean\")||g(r,\"number\"))return\"\"+r;if(g(r,\"bigint\"))return H(r);if(g(r,\"symbol\"))return r.toString()}a(U,\"formatPrimitive\");function w(r,s){return r!==null&&g(r,\"object\")&&s in r&&g(r[s],\"function\")}a(w,\"hasCustomSymbol\");function k(r){return g(r,\"object\")&&Object.prototype.toString.call(r)===\"[object RegExp]\"}a(k,\"isRegExp\");function M(r){return g(r,\"object\")&&Object.prototype.toString.call(r)===\"[object Date]\"}a(M,\"isDate\");function x(r){return g(r,\"object\")&&(Object.prototype.toString.call(r)===\"[object Error]\"||r instanceof Error)}a(x,\"isError\");function K(r){return g(r,\"object\")&&Object.prototype.toString.call(r)===\"[object Map]\"}a(K,\"isMap\");function q(r){return g(r,\"object\")&&Object.prototype.toString.call(r)===\"[object Set]\"}a(q,\"isSet\");function V(r,s,i){let u=r.length+s;if(u+r.length>80)return!1;for(let h=0;h80)return!1;return i===\"\"||!Ar.call(i,`\n`)}a(V,\"isBelowBreakLength\");function W(r,s,i){let l=r.length+i[0].length+s.length+10;return V(r,l,s)?((s?s+\" \":\"\")+i[0]+\" \"+r.join(\", \")+\" \"+i[1]).trim():(s?s+\" \":\"\")+i[0]+`\n `+r.join(`,\n `)+`\n`+i[1]}a(W,\"reduceToSingleString\");function Y(r){return Array.isArray(r)&&(r=r.map(s=>JSON.parse(JSON.stringify(s,C())))),JSON.stringify(r,C())}a(Y,\"safeStringify\");function C(){let r=new WeakSet;return(s,i)=>{if(i!==null&&g(i,\"object\")){if(r.has(i))return\"[Circular]\";r.add(i)}return i}}a(C,\"makeCircularReplacer\");function G(r,s=!1){let i,l=Or(r);if(s)i=F(r),l.length!==0&&D.apply(i,l);else{try{i=_r(r)}catch{i=F(r)}if(l.length!==0){let u=a(h=>hr.call(r,h),\"filter\");D.apply(i,br.call(l,u))}}return i}a(G,\"getKeys\")}}),sr={};Lr(sr,{console:()=>Wr});module.exports=Tr(sr);cr();var Fr=vr(Br()),$=(0,Fr.createFormat)(),zr=console.error.bind(console),Jr=console.log.bind(console),Hr=console.assert.bind(console),Ur=console.time.bind(console),Kr=console.timeEnd.bind(console),qr=console.timeLog.bind(console),Vr=console.trace.bind(console),or=a((...f)=>zr($(...f)),\"error\"),v=a((...f)=>Jr($(...f)),\"log\"),Wr={assert:(f,...y)=>Hr(f,$(...y)),count:console.count.bind(console),debug:v,dir:console.dir.bind(console),error:or,info:v,log:v,time:(...f)=>Ur($(...f)),timeEnd:(...f)=>Kr($(...f)),timeLog:qr,trace:Vr,warn:or};\n" \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/@edge-runtime/primitives/events.js.text.js b/build/node_modules/next/dist/compiled/@edge-runtime/primitives/events.js.text.js new file mode 100644 index 0000000..ee758cd --- /dev/null +++ b/build/node_modules/next/dist/compiled/@edge-runtime/primitives/events.js.text.js @@ -0,0 +1 @@ +module.exports = "\"use strict\";var s=Object.defineProperty,p=Object.getOwnPropertyDescriptor,_=Object.getOwnPropertyNames,u=Object.prototype.hasOwnProperty,a=(t,e)=>s(t,\"name\",{value:e,configurable:!0}),h=(t,e)=>{for(var r in e)s(t,r,{get:e[r],enumerable:!0})},l=(t,e,r,o)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of _(e))!u.call(t,n)&&n!==r&&s(t,n,{get:()=>e[n],enumerable:!(o=p(e,n))||o.enumerable});return t},P=t=>l(s({},\"__esModule\",{value:!0}),t),i={};h(i,{FetchEvent:()=>E,PromiseRejectionEvent:()=>j});module.exports=P(i);var c=class extends Event{constructor(e){super(\"fetch\"),this.request=e,this.response=null,this.awaiting=new Set}respondWith=e=>{this.response=e};waitUntil=e=>{this.awaiting.add(e),e.finally(()=>this.awaiting.delete(e))}};a(c,\"FetchEvent\");var E=c,v=class extends Event{constructor(e,r){super(e,{cancelable:!0}),this.promise=r.promise,this.reason=r.reason}};a(v,\"PromiseRejectionEvent\");var j=v;\n" \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/@edge-runtime/primitives/index.js b/build/node_modules/next/dist/compiled/@edge-runtime/primitives/index.js new file mode 100644 index 0000000..0b4c28f --- /dev/null +++ b/build/node_modules/next/dist/compiled/@edge-runtime/primitives/index.js @@ -0,0 +1,5 @@ +"use strict"; + +// src/primitives/index.js +var import_load = require("./load"); +module.exports = (0, import_load.load)({ WeakRef: global.WeakRef }); diff --git a/build/node_modules/next/dist/compiled/@edge-runtime/primitives/load.js b/build/node_modules/next/dist/compiled/@edge-runtime/primitives/load.js new file mode 100644 index 0000000..d482b62 --- /dev/null +++ b/build/node_modules/next/dist/compiled/@edge-runtime/primitives/load.js @@ -0,0 +1,18713 @@ +"use strict"; +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); +var __esm = (fn, res) => function __init() { + return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; +}; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var __accessCheck = (obj, member, msg) => { + if (!member.has(obj)) + throw TypeError("Cannot " + msg); +}; +var __privateIn = (member, obj) => { + if (Object(obj) !== obj) + throw TypeError('Cannot use the "in" operator on this value'); + return member.has(obj); +}; +var __privateGet = (obj, member, getter) => { + __accessCheck(obj, member, "read from private field"); + return getter ? getter.call(obj) : member.get(obj); +}; +var __privateAdd = (obj, member, value) => { + if (member.has(obj)) + throw TypeError("Cannot add the same private member more than once"); + member instanceof WeakSet ? member.add(obj) : member.set(obj, value); +}; +var __privateSet = (obj, member, value, setter) => { + __accessCheck(obj, member, "write to private field"); + setter ? setter.call(obj, value) : member.set(obj, value); + return value; +}; +var __privateMethod = (obj, member, method) => { + __accessCheck(obj, member, "access private method"); + return method; +}; + +// +var define_process_default; +var init_define_process = __esm({ + ""() { + define_process_default = { version: "v18.20.5", env: {}, versions: { node: " 18.20.5" } }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/core/symbols.js +var require_symbols = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/core/symbols.js"(exports2, module2) { + "use strict"; + init_define_process(); + module2.exports = { + kClose: Symbol("close"), + kDestroy: Symbol("destroy"), + kDispatch: Symbol("dispatch"), + kUrl: Symbol("url"), + kWriting: Symbol("writing"), + kResuming: Symbol("resuming"), + kQueue: Symbol("queue"), + kConnect: Symbol("connect"), + kConnecting: Symbol("connecting"), + kKeepAliveDefaultTimeout: Symbol("default keep alive timeout"), + kKeepAliveMaxTimeout: Symbol("max keep alive timeout"), + kKeepAliveTimeoutThreshold: Symbol("keep alive timeout threshold"), + kKeepAliveTimeoutValue: Symbol("keep alive timeout"), + kKeepAlive: Symbol("keep alive"), + kHeadersTimeout: Symbol("headers timeout"), + kBodyTimeout: Symbol("body timeout"), + kServerName: Symbol("server name"), + kLocalAddress: Symbol("local address"), + kHost: Symbol("host"), + kNoRef: Symbol("no ref"), + kBodyUsed: Symbol("used"), + kBody: Symbol("abstracted request body"), + kRunning: Symbol("running"), + kBlocking: Symbol("blocking"), + kPending: Symbol("pending"), + kSize: Symbol("size"), + kBusy: Symbol("busy"), + kQueued: Symbol("queued"), + kFree: Symbol("free"), + kConnected: Symbol("connected"), + kClosed: Symbol("closed"), + kNeedDrain: Symbol("need drain"), + kReset: Symbol("reset"), + kDestroyed: Symbol.for("nodejs.stream.destroyed"), + kResume: Symbol("resume"), + kOnError: Symbol("on error"), + kMaxHeadersSize: Symbol("max headers size"), + kRunningIdx: Symbol("running index"), + kPendingIdx: Symbol("pending index"), + kError: Symbol("error"), + kClients: Symbol("clients"), + kClient: Symbol("client"), + kParser: Symbol("parser"), + kOnDestroyed: Symbol("destroy callbacks"), + kPipelining: Symbol("pipelining"), + kSocket: Symbol("socket"), + kHostHeader: Symbol("host header"), + kConnector: Symbol("connector"), + kStrictContentLength: Symbol("strict content length"), + kMaxRedirections: Symbol("maxRedirections"), + kMaxRequests: Symbol("maxRequestsPerClient"), + kProxy: Symbol("proxy agent options"), + kCounter: Symbol("socket request counter"), + kInterceptors: Symbol("dispatch interceptors"), + kMaxResponseSize: Symbol("max response size"), + kHTTP2Session: Symbol("http2Session"), + kHTTP2SessionState: Symbol("http2Session state"), + kRetryHandlerDefaultRetry: Symbol("retry agent default retry"), + kConstruct: Symbol("constructable"), + kListeners: Symbol("listeners"), + kHTTPContext: Symbol("http context"), + kMaxConcurrentStreams: Symbol("max concurrent streams"), + kNoProxyAgent: Symbol("no proxy agent"), + kHttpProxyAgent: Symbol("http proxy agent"), + kHttpsProxyAgent: Symbol("https proxy agent") + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/core/errors.js +var require_errors = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/core/errors.js"(exports2, module2) { + "use strict"; + init_define_process(); + var _UndiciError = class _UndiciError extends Error { + constructor(message) { + super(message); + this.name = "UndiciError"; + this.code = "UND_ERR"; + } + }; + __name(_UndiciError, "UndiciError"); + var UndiciError = _UndiciError; + var _ConnectTimeoutError = class _ConnectTimeoutError extends UndiciError { + constructor(message) { + super(message); + this.name = "ConnectTimeoutError"; + this.message = message || "Connect Timeout Error"; + this.code = "UND_ERR_CONNECT_TIMEOUT"; + } + }; + __name(_ConnectTimeoutError, "ConnectTimeoutError"); + var ConnectTimeoutError = _ConnectTimeoutError; + var _HeadersTimeoutError = class _HeadersTimeoutError extends UndiciError { + constructor(message) { + super(message); + this.name = "HeadersTimeoutError"; + this.message = message || "Headers Timeout Error"; + this.code = "UND_ERR_HEADERS_TIMEOUT"; + } + }; + __name(_HeadersTimeoutError, "HeadersTimeoutError"); + var HeadersTimeoutError = _HeadersTimeoutError; + var _HeadersOverflowError = class _HeadersOverflowError extends UndiciError { + constructor(message) { + super(message); + this.name = "HeadersOverflowError"; + this.message = message || "Headers Overflow Error"; + this.code = "UND_ERR_HEADERS_OVERFLOW"; + } + }; + __name(_HeadersOverflowError, "HeadersOverflowError"); + var HeadersOverflowError = _HeadersOverflowError; + var _BodyTimeoutError = class _BodyTimeoutError extends UndiciError { + constructor(message) { + super(message); + this.name = "BodyTimeoutError"; + this.message = message || "Body Timeout Error"; + this.code = "UND_ERR_BODY_TIMEOUT"; + } + }; + __name(_BodyTimeoutError, "BodyTimeoutError"); + var BodyTimeoutError = _BodyTimeoutError; + var _ResponseStatusCodeError = class _ResponseStatusCodeError extends UndiciError { + constructor(message, statusCode, headers, body) { + super(message); + this.name = "ResponseStatusCodeError"; + this.message = message || "Response Status Code Error"; + this.code = "UND_ERR_RESPONSE_STATUS_CODE"; + this.body = body; + this.status = statusCode; + this.statusCode = statusCode; + this.headers = headers; + } + }; + __name(_ResponseStatusCodeError, "ResponseStatusCodeError"); + var ResponseStatusCodeError = _ResponseStatusCodeError; + var _InvalidArgumentError = class _InvalidArgumentError extends UndiciError { + constructor(message) { + super(message); + this.name = "InvalidArgumentError"; + this.message = message || "Invalid Argument Error"; + this.code = "UND_ERR_INVALID_ARG"; + } + }; + __name(_InvalidArgumentError, "InvalidArgumentError"); + var InvalidArgumentError = _InvalidArgumentError; + var _InvalidReturnValueError = class _InvalidReturnValueError extends UndiciError { + constructor(message) { + super(message); + this.name = "InvalidReturnValueError"; + this.message = message || "Invalid Return Value Error"; + this.code = "UND_ERR_INVALID_RETURN_VALUE"; + } + }; + __name(_InvalidReturnValueError, "InvalidReturnValueError"); + var InvalidReturnValueError = _InvalidReturnValueError; + var _AbortError = class _AbortError extends UndiciError { + constructor(message) { + super(message); + this.name = "AbortError"; + this.message = message || "The operation was aborted"; + } + }; + __name(_AbortError, "AbortError"); + var AbortError = _AbortError; + var _RequestAbortedError = class _RequestAbortedError extends AbortError { + constructor(message) { + super(message); + this.name = "AbortError"; + this.message = message || "Request aborted"; + this.code = "UND_ERR_ABORTED"; + } + }; + __name(_RequestAbortedError, "RequestAbortedError"); + var RequestAbortedError = _RequestAbortedError; + var _InformationalError = class _InformationalError extends UndiciError { + constructor(message) { + super(message); + this.name = "InformationalError"; + this.message = message || "Request information"; + this.code = "UND_ERR_INFO"; + } + }; + __name(_InformationalError, "InformationalError"); + var InformationalError = _InformationalError; + var _RequestContentLengthMismatchError = class _RequestContentLengthMismatchError extends UndiciError { + constructor(message) { + super(message); + this.name = "RequestContentLengthMismatchError"; + this.message = message || "Request body length does not match content-length header"; + this.code = "UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"; + } + }; + __name(_RequestContentLengthMismatchError, "RequestContentLengthMismatchError"); + var RequestContentLengthMismatchError = _RequestContentLengthMismatchError; + var _ResponseContentLengthMismatchError = class _ResponseContentLengthMismatchError extends UndiciError { + constructor(message) { + super(message); + this.name = "ResponseContentLengthMismatchError"; + this.message = message || "Response body length does not match content-length header"; + this.code = "UND_ERR_RES_CONTENT_LENGTH_MISMATCH"; + } + }; + __name(_ResponseContentLengthMismatchError, "ResponseContentLengthMismatchError"); + var ResponseContentLengthMismatchError = _ResponseContentLengthMismatchError; + var _ClientDestroyedError = class _ClientDestroyedError extends UndiciError { + constructor(message) { + super(message); + this.name = "ClientDestroyedError"; + this.message = message || "The client is destroyed"; + this.code = "UND_ERR_DESTROYED"; + } + }; + __name(_ClientDestroyedError, "ClientDestroyedError"); + var ClientDestroyedError = _ClientDestroyedError; + var _ClientClosedError = class _ClientClosedError extends UndiciError { + constructor(message) { + super(message); + this.name = "ClientClosedError"; + this.message = message || "The client is closed"; + this.code = "UND_ERR_CLOSED"; + } + }; + __name(_ClientClosedError, "ClientClosedError"); + var ClientClosedError = _ClientClosedError; + var _SocketError = class _SocketError extends UndiciError { + constructor(message, socket) { + super(message); + this.name = "SocketError"; + this.message = message || "Socket error"; + this.code = "UND_ERR_SOCKET"; + this.socket = socket; + } + }; + __name(_SocketError, "SocketError"); + var SocketError = _SocketError; + var _NotSupportedError = class _NotSupportedError extends UndiciError { + constructor(message) { + super(message); + this.name = "NotSupportedError"; + this.message = message || "Not supported error"; + this.code = "UND_ERR_NOT_SUPPORTED"; + } + }; + __name(_NotSupportedError, "NotSupportedError"); + var NotSupportedError = _NotSupportedError; + var _BalancedPoolMissingUpstreamError = class _BalancedPoolMissingUpstreamError extends UndiciError { + constructor(message) { + super(message); + this.name = "MissingUpstreamError"; + this.message = message || "No upstream has been added to the BalancedPool"; + this.code = "UND_ERR_BPL_MISSING_UPSTREAM"; + } + }; + __name(_BalancedPoolMissingUpstreamError, "BalancedPoolMissingUpstreamError"); + var BalancedPoolMissingUpstreamError = _BalancedPoolMissingUpstreamError; + var _HTTPParserError = class _HTTPParserError extends Error { + constructor(message, code, data) { + super(message); + this.name = "HTTPParserError"; + this.code = code ? `HPE_${code}` : void 0; + this.data = data ? data.toString() : void 0; + } + }; + __name(_HTTPParserError, "HTTPParserError"); + var HTTPParserError = _HTTPParserError; + var _ResponseExceededMaxSizeError = class _ResponseExceededMaxSizeError extends UndiciError { + constructor(message) { + super(message); + this.name = "ResponseExceededMaxSizeError"; + this.message = message || "Response content exceeded max size"; + this.code = "UND_ERR_RES_EXCEEDED_MAX_SIZE"; + } + }; + __name(_ResponseExceededMaxSizeError, "ResponseExceededMaxSizeError"); + var ResponseExceededMaxSizeError = _ResponseExceededMaxSizeError; + var _RequestRetryError = class _RequestRetryError extends UndiciError { + constructor(message, code, { headers, data }) { + super(message); + this.name = "RequestRetryError"; + this.message = message || "Request retry error"; + this.code = "UND_ERR_REQ_RETRY"; + this.statusCode = code; + this.data = data; + this.headers = headers; + } + }; + __name(_RequestRetryError, "RequestRetryError"); + var RequestRetryError = _RequestRetryError; + var _ResponseError = class _ResponseError extends UndiciError { + constructor(message, code, { headers, data }) { + super(message); + this.name = "ResponseError"; + this.message = message || "Response error"; + this.code = "UND_ERR_RESPONSE"; + this.statusCode = code; + this.data = data; + this.headers = headers; + } + }; + __name(_ResponseError, "ResponseError"); + var ResponseError = _ResponseError; + var _SecureProxyConnectionError = class _SecureProxyConnectionError extends UndiciError { + constructor(cause, message, options) { + super(message, { cause, ...options ?? {} }); + this.name = "SecureProxyConnectionError"; + this.message = message || "Secure Proxy Connection failed"; + this.code = "UND_ERR_PRX_TLS"; + this.cause = cause; + } + }; + __name(_SecureProxyConnectionError, "SecureProxyConnectionError"); + var SecureProxyConnectionError = _SecureProxyConnectionError; + module2.exports = { + AbortError, + HTTPParserError, + UndiciError, + HeadersTimeoutError, + HeadersOverflowError, + BodyTimeoutError, + RequestContentLengthMismatchError, + ConnectTimeoutError, + ResponseStatusCodeError, + InvalidArgumentError, + InvalidReturnValueError, + RequestAbortedError, + ClientDestroyedError, + ClientClosedError, + InformationalError, + SocketError, + NotSupportedError, + ResponseContentLengthMismatchError, + BalancedPoolMissingUpstreamError, + ResponseExceededMaxSizeError, + RequestRetryError, + ResponseError, + SecureProxyConnectionError + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/core/constants.js +var require_constants = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/core/constants.js"(exports2, module2) { + "use strict"; + init_define_process(); + var headerNameLowerCasedRecord = {}; + var wellknownHeaderNames = [ + "Accept", + "Accept-Encoding", + "Accept-Language", + "Accept-Ranges", + "Access-Control-Allow-Credentials", + "Access-Control-Allow-Headers", + "Access-Control-Allow-Methods", + "Access-Control-Allow-Origin", + "Access-Control-Expose-Headers", + "Access-Control-Max-Age", + "Access-Control-Request-Headers", + "Access-Control-Request-Method", + "Age", + "Allow", + "Alt-Svc", + "Alt-Used", + "Authorization", + "Cache-Control", + "Clear-Site-Data", + "Connection", + "Content-Disposition", + "Content-Encoding", + "Content-Language", + "Content-Length", + "Content-Location", + "Content-Range", + "Content-Security-Policy", + "Content-Security-Policy-Report-Only", + "Content-Type", + "Cookie", + "Cross-Origin-Embedder-Policy", + "Cross-Origin-Opener-Policy", + "Cross-Origin-Resource-Policy", + "Date", + "Device-Memory", + "Downlink", + "ECT", + "ETag", + "Expect", + "Expect-CT", + "Expires", + "Forwarded", + "From", + "Host", + "If-Match", + "If-Modified-Since", + "If-None-Match", + "If-Range", + "If-Unmodified-Since", + "Keep-Alive", + "Last-Modified", + "Link", + "Location", + "Max-Forwards", + "Origin", + "Permissions-Policy", + "Pragma", + "Proxy-Authenticate", + "Proxy-Authorization", + "RTT", + "Range", + "Referer", + "Referrer-Policy", + "Refresh", + "Retry-After", + "Sec-WebSocket-Accept", + "Sec-WebSocket-Extensions", + "Sec-WebSocket-Key", + "Sec-WebSocket-Protocol", + "Sec-WebSocket-Version", + "Server", + "Server-Timing", + "Service-Worker-Allowed", + "Service-Worker-Navigation-Preload", + "Set-Cookie", + "SourceMap", + "Strict-Transport-Security", + "Supports-Loading-Mode", + "TE", + "Timing-Allow-Origin", + "Trailer", + "Transfer-Encoding", + "Upgrade", + "Upgrade-Insecure-Requests", + "User-Agent", + "Vary", + "Via", + "WWW-Authenticate", + "X-Content-Type-Options", + "X-DNS-Prefetch-Control", + "X-Frame-Options", + "X-Permitted-Cross-Domain-Policies", + "X-Powered-By", + "X-Requested-With", + "X-XSS-Protection" + ]; + for (let i = 0; i < wellknownHeaderNames.length; ++i) { + const key = wellknownHeaderNames[i]; + const lowerCasedKey = key.toLowerCase(); + headerNameLowerCasedRecord[key] = headerNameLowerCasedRecord[lowerCasedKey] = lowerCasedKey; + } + Object.setPrototypeOf(headerNameLowerCasedRecord, null); + module2.exports = { + wellknownHeaderNames, + headerNameLowerCasedRecord + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/core/tree.js +var require_tree = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/core/tree.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { + wellknownHeaderNames, + headerNameLowerCasedRecord + } = require_constants(); + var _TstNode = class _TstNode { + /** @type {any} */ + value = null; + /** @type {null | TstNode} */ + left = null; + /** @type {null | TstNode} */ + middle = null; + /** @type {null | TstNode} */ + right = null; + /** @type {number} */ + code; + /** + * @param {string} key + * @param {any} value + * @param {number} index + */ + constructor(key, value, index) { + if (index === void 0 || index >= key.length) { + throw new TypeError("Unreachable"); + } + const code = this.code = key.charCodeAt(index); + if (code > 127) { + throw new TypeError("key must be ascii string"); + } + if (key.length !== ++index) { + this.middle = new _TstNode(key, value, index); + } else { + this.value = value; + } + } + /** + * @param {string} key + * @param {any} value + */ + add(key, value) { + const length = key.length; + if (length === 0) { + throw new TypeError("Unreachable"); + } + let index = 0; + let node = this; + while (true) { + const code = key.charCodeAt(index); + if (code > 127) { + throw new TypeError("key must be ascii string"); + } + if (node.code === code) { + if (length === ++index) { + node.value = value; + break; + } else if (node.middle !== null) { + node = node.middle; + } else { + node.middle = new _TstNode(key, value, index); + break; + } + } else if (node.code < code) { + if (node.left !== null) { + node = node.left; + } else { + node.left = new _TstNode(key, value, index); + break; + } + } else if (node.right !== null) { + node = node.right; + } else { + node.right = new _TstNode(key, value, index); + break; + } + } + } + /** + * @param {Uint8Array} key + * @return {TstNode | null} + */ + search(key) { + const keylength = key.length; + let index = 0; + let node = this; + while (node !== null && index < keylength) { + let code = key[index]; + if (code <= 90 && code >= 65) { + code |= 32; + } + while (node !== null) { + if (code === node.code) { + if (keylength === ++index) { + return node; + } + node = node.middle; + break; + } + node = node.code < code ? node.left : node.right; + } + } + return null; + } + }; + __name(_TstNode, "TstNode"); + var TstNode = _TstNode; + var _TernarySearchTree = class _TernarySearchTree { + /** @type {TstNode | null} */ + node = null; + /** + * @param {string} key + * @param {any} value + * */ + insert(key, value) { + if (this.node === null) { + this.node = new TstNode(key, value, 0); + } else { + this.node.add(key, value); + } + } + /** + * @param {Uint8Array} key + * @return {any} + */ + lookup(key) { + return this.node?.search(key)?.value ?? null; + } + }; + __name(_TernarySearchTree, "TernarySearchTree"); + var TernarySearchTree = _TernarySearchTree; + var tree = new TernarySearchTree(); + for (let i = 0; i < wellknownHeaderNames.length; ++i) { + const key = headerNameLowerCasedRecord[wellknownHeaderNames[i]]; + tree.insert(key, key); + } + module2.exports = { + TernarySearchTree, + tree + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/core/util.js +var require_util = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/core/util.js"(exports2, module2) { + "use strict"; + init_define_process(); + var assert = require("assert"); + var { kDestroyed, kBodyUsed, kListeners, kBody } = require_symbols(); + var { IncomingMessage } = require("http"); + var stream = require("stream"); + var net = require("net"); + var { Blob: Blob3 } = require("buffer"); + var nodeUtil = require("util"); + var { stringify } = require("querystring"); + var { EventEmitter: EE } = require("events"); + var { InvalidArgumentError } = require_errors(); + var { headerNameLowerCasedRecord } = require_constants(); + var { tree } = require_tree(); + var [nodeMajor, nodeMinor] = define_process_default.versions.node.split(".").map((v) => Number(v)); + var _BodyAsyncIterable = class _BodyAsyncIterable { + constructor(body) { + this[kBody] = body; + this[kBodyUsed] = false; + } + async *[Symbol.asyncIterator]() { + assert(!this[kBodyUsed], "disturbed"); + this[kBodyUsed] = true; + yield* this[kBody]; + } + }; + __name(_BodyAsyncIterable, "BodyAsyncIterable"); + var BodyAsyncIterable = _BodyAsyncIterable; + function wrapRequestBody(body) { + if (isStream(body)) { + if (bodyLength(body) === 0) { + body.on("data", function() { + assert(false); + }); + } + if (typeof body.readableDidRead !== "boolean") { + body[kBodyUsed] = false; + EE.prototype.on.call(body, "data", function() { + this[kBodyUsed] = true; + }); + } + return body; + } else if (body && typeof body.pipeTo === "function") { + return new BodyAsyncIterable(body); + } else if (body && typeof body !== "string" && !ArrayBuffer.isView(body) && isIterable(body)) { + return new BodyAsyncIterable(body); + } else { + return body; + } + } + __name(wrapRequestBody, "wrapRequestBody"); + function nop() { + } + __name(nop, "nop"); + function isStream(obj) { + return obj && typeof obj === "object" && typeof obj.pipe === "function" && typeof obj.on === "function"; + } + __name(isStream, "isStream"); + function isBlobLike(object) { + if (object === null) { + return false; + } else if (object instanceof Blob3) { + return true; + } else if (typeof object !== "object") { + return false; + } else { + const sTag = object[Symbol.toStringTag]; + return (sTag === "Blob" || sTag === "File") && ("stream" in object && typeof object.stream === "function" || "arrayBuffer" in object && typeof object.arrayBuffer === "function"); + } + } + __name(isBlobLike, "isBlobLike"); + function buildURL(url, queryParams) { + if (url.includes("?") || url.includes("#")) { + throw new Error('Query params cannot be passed when url already contains "?" or "#".'); + } + const stringified = stringify(queryParams); + if (stringified) { + url += "?" + stringified; + } + return url; + } + __name(buildURL, "buildURL"); + function isValidPort(port) { + const value = parseInt(port, 10); + return value === Number(port) && value >= 0 && value <= 65535; + } + __name(isValidPort, "isValidPort"); + function isHttpOrHttpsPrefixed(value) { + return value != null && value[0] === "h" && value[1] === "t" && value[2] === "t" && value[3] === "p" && (value[4] === ":" || value[4] === "s" && value[5] === ":"); + } + __name(isHttpOrHttpsPrefixed, "isHttpOrHttpsPrefixed"); + function parseURL(url) { + if (typeof url === "string") { + url = new URL(url); + if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) { + throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`."); + } + return url; + } + if (!url || typeof url !== "object") { + throw new InvalidArgumentError("Invalid URL: The URL argument must be a non-null object."); + } + if (!(url instanceof URL)) { + if (url.port != null && url.port !== "" && isValidPort(url.port) === false) { + throw new InvalidArgumentError("Invalid URL: port must be a valid integer or a string representation of an integer."); + } + if (url.path != null && typeof url.path !== "string") { + throw new InvalidArgumentError("Invalid URL path: the path must be a string or null/undefined."); + } + if (url.pathname != null && typeof url.pathname !== "string") { + throw new InvalidArgumentError("Invalid URL pathname: the pathname must be a string or null/undefined."); + } + if (url.hostname != null && typeof url.hostname !== "string") { + throw new InvalidArgumentError("Invalid URL hostname: the hostname must be a string or null/undefined."); + } + if (url.origin != null && typeof url.origin !== "string") { + throw new InvalidArgumentError("Invalid URL origin: the origin must be a string or null/undefined."); + } + if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) { + throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`."); + } + const port = url.port != null ? url.port : url.protocol === "https:" ? 443 : 80; + let origin = url.origin != null ? url.origin : `${url.protocol || ""}//${url.hostname || ""}:${port}`; + let path = url.path != null ? url.path : `${url.pathname || ""}${url.search || ""}`; + if (origin[origin.length - 1] === "/") { + origin = origin.slice(0, origin.length - 1); + } + if (path && path[0] !== "/") { + path = `/${path}`; + } + return new URL(`${origin}${path}`); + } + if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) { + throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`."); + } + return url; + } + __name(parseURL, "parseURL"); + function parseOrigin(url) { + url = parseURL(url); + if (url.pathname !== "/" || url.search || url.hash) { + throw new InvalidArgumentError("invalid url"); + } + return url; + } + __name(parseOrigin, "parseOrigin"); + function getHostname(host) { + if (host[0] === "[") { + const idx2 = host.indexOf("]"); + assert(idx2 !== -1); + return host.substring(1, idx2); + } + const idx = host.indexOf(":"); + if (idx === -1) + return host; + return host.substring(0, idx); + } + __name(getHostname, "getHostname"); + function getServerName(host) { + if (!host) { + return null; + } + assert(typeof host === "string"); + const servername = getHostname(host); + if (net.isIP(servername)) { + return ""; + } + return servername; + } + __name(getServerName, "getServerName"); + function deepClone(obj) { + return JSON.parse(JSON.stringify(obj)); + } + __name(deepClone, "deepClone"); + function isAsyncIterable(obj) { + return !!(obj != null && typeof obj[Symbol.asyncIterator] === "function"); + } + __name(isAsyncIterable, "isAsyncIterable"); + function isIterable(obj) { + return !!(obj != null && (typeof obj[Symbol.iterator] === "function" || typeof obj[Symbol.asyncIterator] === "function")); + } + __name(isIterable, "isIterable"); + function bodyLength(body) { + if (body == null) { + return 0; + } else if (isStream(body)) { + const state = body._readableState; + return state && state.objectMode === false && state.ended === true && Number.isFinite(state.length) ? state.length : null; + } else if (isBlobLike(body)) { + return body.size != null ? body.size : null; + } else if (isBuffer(body)) { + return body.byteLength; + } + return null; + } + __name(bodyLength, "bodyLength"); + function isDestroyed(body) { + return body && !!(body.destroyed || body[kDestroyed] || stream.isDestroyed?.(body)); + } + __name(isDestroyed, "isDestroyed"); + function destroy(stream2, err) { + if (stream2 == null || !isStream(stream2) || isDestroyed(stream2)) { + return; + } + if (typeof stream2.destroy === "function") { + if (Object.getPrototypeOf(stream2).constructor === IncomingMessage) { + stream2.socket = null; + } + stream2.destroy(err); + } else if (err) { + queueMicrotask(() => { + stream2.emit("error", err); + }); + } + if (stream2.destroyed !== true) { + stream2[kDestroyed] = true; + } + } + __name(destroy, "destroy"); + var KEEPALIVE_TIMEOUT_EXPR = /timeout=(\d+)/; + function parseKeepAliveTimeout(val) { + const m = val.toString().match(KEEPALIVE_TIMEOUT_EXPR); + return m ? parseInt(m[1], 10) * 1e3 : null; + } + __name(parseKeepAliveTimeout, "parseKeepAliveTimeout"); + function headerNameToString(value) { + return typeof value === "string" ? headerNameLowerCasedRecord[value] ?? value.toLowerCase() : tree.lookup(value) ?? value.toString("latin1").toLowerCase(); + } + __name(headerNameToString, "headerNameToString"); + function bufferToLowerCasedHeaderName(value) { + return tree.lookup(value) ?? value.toString("latin1").toLowerCase(); + } + __name(bufferToLowerCasedHeaderName, "bufferToLowerCasedHeaderName"); + function parseHeaders(headers, obj) { + if (obj === void 0) + obj = {}; + for (let i = 0; i < headers.length; i += 2) { + const key = headerNameToString(headers[i]); + let val = obj[key]; + if (val) { + if (typeof val === "string") { + val = [val]; + obj[key] = val; + } + val.push(headers[i + 1].toString("utf8")); + } else { + const headersValue = headers[i + 1]; + if (typeof headersValue === "string") { + obj[key] = headersValue; + } else { + obj[key] = Array.isArray(headersValue) ? headersValue.map((x) => x.toString("utf8")) : headersValue.toString("utf8"); + } + } + } + if ("content-length" in obj && "content-disposition" in obj) { + obj["content-disposition"] = Buffer.from(obj["content-disposition"]).toString("latin1"); + } + return obj; + } + __name(parseHeaders, "parseHeaders"); + function parseRawHeaders(headers) { + const len = headers.length; + const ret = new Array(len); + let hasContentLength = false; + let contentDispositionIdx = -1; + let key; + let val; + let kLen = 0; + for (let n = 0; n < headers.length; n += 2) { + key = headers[n]; + val = headers[n + 1]; + typeof key !== "string" && (key = key.toString()); + typeof val !== "string" && (val = val.toString("utf8")); + kLen = key.length; + if (kLen === 14 && key[7] === "-" && (key === "content-length" || key.toLowerCase() === "content-length")) { + hasContentLength = true; + } else if (kLen === 19 && key[7] === "-" && (key === "content-disposition" || key.toLowerCase() === "content-disposition")) { + contentDispositionIdx = n + 1; + } + ret[n] = key; + ret[n + 1] = val; + } + if (hasContentLength && contentDispositionIdx !== -1) { + ret[contentDispositionIdx] = Buffer.from(ret[contentDispositionIdx]).toString("latin1"); + } + return ret; + } + __name(parseRawHeaders, "parseRawHeaders"); + function isBuffer(buffer) { + return buffer instanceof Uint8Array || Buffer.isBuffer(buffer); + } + __name(isBuffer, "isBuffer"); + function validateHandler(handler, method, upgrade) { + if (!handler || typeof handler !== "object") { + throw new InvalidArgumentError("handler must be an object"); + } + if (typeof handler.onConnect !== "function") { + throw new InvalidArgumentError("invalid onConnect method"); + } + if (typeof handler.onError !== "function") { + throw new InvalidArgumentError("invalid onError method"); + } + if (typeof handler.onBodySent !== "function" && handler.onBodySent !== void 0) { + throw new InvalidArgumentError("invalid onBodySent method"); + } + if (upgrade || method === "CONNECT") { + if (typeof handler.onUpgrade !== "function") { + throw new InvalidArgumentError("invalid onUpgrade method"); + } + } else { + if (typeof handler.onHeaders !== "function") { + throw new InvalidArgumentError("invalid onHeaders method"); + } + if (typeof handler.onData !== "function") { + throw new InvalidArgumentError("invalid onData method"); + } + if (typeof handler.onComplete !== "function") { + throw new InvalidArgumentError("invalid onComplete method"); + } + } + } + __name(validateHandler, "validateHandler"); + function isDisturbed(body) { + return !!(body && (stream.isDisturbed(body) || body[kBodyUsed])); + } + __name(isDisturbed, "isDisturbed"); + function isErrored(body) { + return !!(body && stream.isErrored(body)); + } + __name(isErrored, "isErrored"); + function isReadable(body) { + return !!(body && stream.isReadable(body)); + } + __name(isReadable, "isReadable"); + function getSocketInfo(socket) { + return { + localAddress: socket.localAddress, + localPort: socket.localPort, + remoteAddress: socket.remoteAddress, + remotePort: socket.remotePort, + remoteFamily: socket.remoteFamily, + timeout: socket.timeout, + bytesWritten: socket.bytesWritten, + bytesRead: socket.bytesRead + }; + } + __name(getSocketInfo, "getSocketInfo"); + function ReadableStreamFrom(iterable) { + let iterator; + return new ReadableStream( + { + async start() { + iterator = iterable[Symbol.asyncIterator](); + }, + async pull(controller) { + const { done, value } = await iterator.next(); + if (done) { + queueMicrotask(() => { + controller.close(); + controller.byobRequest?.respond(0); + }); + } else { + const buf = Buffer.isBuffer(value) ? value : Buffer.from(value); + if (buf.byteLength) { + controller.enqueue(new Uint8Array(buf)); + } + } + return controller.desiredSize > 0; + }, + async cancel(reason) { + await iterator.return(); + }, + type: "bytes" + } + ); + } + __name(ReadableStreamFrom, "ReadableStreamFrom"); + function isFormDataLike(object) { + return object && typeof object === "object" && typeof object.append === "function" && typeof object.delete === "function" && typeof object.get === "function" && typeof object.getAll === "function" && typeof object.has === "function" && typeof object.set === "function" && object[Symbol.toStringTag] === "FormData"; + } + __name(isFormDataLike, "isFormDataLike"); + function addAbortListener(signal, listener) { + if ("addEventListener" in signal) { + signal.addEventListener("abort", listener, { once: true }); + return () => signal.removeEventListener("abort", listener); + } + signal.addListener("abort", listener); + return () => signal.removeListener("abort", listener); + } + __name(addAbortListener, "addAbortListener"); + var hasToWellFormed = typeof String.prototype.toWellFormed === "function"; + var hasIsWellFormed = typeof String.prototype.isWellFormed === "function"; + function toUSVString(val) { + return hasToWellFormed ? `${val}`.toWellFormed() : nodeUtil.toUSVString(val); + } + __name(toUSVString, "toUSVString"); + function isUSVString(val) { + return hasIsWellFormed ? `${val}`.isWellFormed() : toUSVString(val) === `${val}`; + } + __name(isUSVString, "isUSVString"); + function isTokenCharCode(c) { + switch (c) { + case 34: + case 40: + case 41: + case 44: + case 47: + case 58: + case 59: + case 60: + case 61: + case 62: + case 63: + case 64: + case 91: + case 92: + case 93: + case 123: + case 125: + return false; + default: + return c >= 33 && c <= 126; + } + } + __name(isTokenCharCode, "isTokenCharCode"); + function isValidHTTPToken(characters) { + if (characters.length === 0) { + return false; + } + for (let i = 0; i < characters.length; ++i) { + if (!isTokenCharCode(characters.charCodeAt(i))) { + return false; + } + } + return true; + } + __name(isValidHTTPToken, "isValidHTTPToken"); + var headerCharRegex = /[^\t\x20-\x7e\x80-\xff]/; + function isValidHeaderValue(characters) { + return !headerCharRegex.test(characters); + } + __name(isValidHeaderValue, "isValidHeaderValue"); + function parseRangeHeader(range) { + if (range == null || range === "") + return { start: 0, end: null, size: null }; + const m = range ? range.match(/^bytes (\d+)-(\d+)\/(\d+)?$/) : null; + return m ? { + start: parseInt(m[1]), + end: m[2] ? parseInt(m[2]) : null, + size: m[3] ? parseInt(m[3]) : null + } : null; + } + __name(parseRangeHeader, "parseRangeHeader"); + function addListener(obj, name, listener) { + const listeners = obj[kListeners] ??= []; + listeners.push([name, listener]); + obj.on(name, listener); + return obj; + } + __name(addListener, "addListener"); + function removeAllListeners(obj) { + for (const [name, listener] of obj[kListeners] ?? []) { + obj.removeListener(name, listener); + } + obj[kListeners] = null; + } + __name(removeAllListeners, "removeAllListeners"); + function errorRequest(client, request, err) { + try { + request.onError(err); + assert(request.aborted); + } catch (err2) { + client.emit("error", err2); + } + } + __name(errorRequest, "errorRequest"); + var kEnumerableProperty = /* @__PURE__ */ Object.create(null); + kEnumerableProperty.enumerable = true; + var normalizedMethodRecordsBase = { + delete: "DELETE", + DELETE: "DELETE", + get: "GET", + GET: "GET", + head: "HEAD", + HEAD: "HEAD", + options: "OPTIONS", + OPTIONS: "OPTIONS", + post: "POST", + POST: "POST", + put: "PUT", + PUT: "PUT" + }; + var normalizedMethodRecords = { + ...normalizedMethodRecordsBase, + patch: "patch", + PATCH: "PATCH" + }; + Object.setPrototypeOf(normalizedMethodRecordsBase, null); + Object.setPrototypeOf(normalizedMethodRecords, null); + module2.exports = { + kEnumerableProperty, + nop, + isDisturbed, + isErrored, + isReadable, + toUSVString, + isUSVString, + isBlobLike, + parseOrigin, + parseURL, + getServerName, + isStream, + isIterable, + isAsyncIterable, + isDestroyed, + headerNameToString, + bufferToLowerCasedHeaderName, + addListener, + removeAllListeners, + errorRequest, + parseRawHeaders, + parseHeaders, + parseKeepAliveTimeout, + destroy, + bodyLength, + deepClone, + ReadableStreamFrom, + isBuffer, + validateHandler, + getSocketInfo, + isFormDataLike, + buildURL, + addAbortListener, + isValidHTTPToken, + isValidHeaderValue, + isTokenCharCode, + parseRangeHeader, + normalizedMethodRecordsBase, + normalizedMethodRecords, + isValidPort, + isHttpOrHttpsPrefixed, + nodeMajor, + nodeMinor, + safeHTTPMethods: ["GET", "HEAD", "OPTIONS", "TRACE"], + wrapRequestBody + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/core/diagnostics.js +var require_diagnostics = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/core/diagnostics.js"(exports2, module2) { + "use strict"; + init_define_process(); + var diagnosticsChannel = require("diagnostics_channel"); + var util = require("util"); + var undiciDebugLog = util.debuglog("undici"); + var fetchDebuglog = util.debuglog("fetch"); + var websocketDebuglog = util.debuglog("websocket"); + var isClientSet = false; + var channels = { + // Client + beforeConnect: diagnosticsChannel.channel("undici:client:beforeConnect"), + connected: diagnosticsChannel.channel("undici:client:connected"), + connectError: diagnosticsChannel.channel("undici:client:connectError"), + sendHeaders: diagnosticsChannel.channel("undici:client:sendHeaders"), + // Request + create: diagnosticsChannel.channel("undici:request:create"), + bodySent: diagnosticsChannel.channel("undici:request:bodySent"), + headers: diagnosticsChannel.channel("undici:request:headers"), + trailers: diagnosticsChannel.channel("undici:request:trailers"), + error: diagnosticsChannel.channel("undici:request:error"), + // WebSocket + open: diagnosticsChannel.channel("undici:websocket:open"), + close: diagnosticsChannel.channel("undici:websocket:close"), + socketError: diagnosticsChannel.channel("undici:websocket:socket_error"), + ping: diagnosticsChannel.channel("undici:websocket:ping"), + pong: diagnosticsChannel.channel("undici:websocket:pong") + }; + if (undiciDebugLog.enabled || fetchDebuglog.enabled) { + const debuglog = fetchDebuglog.enabled ? fetchDebuglog : undiciDebugLog; + diagnosticsChannel.channel("undici:client:beforeConnect").subscribe((evt) => { + const { + connectParams: { version, protocol, port, host } + } = evt; + debuglog( + "connecting to %s using %s%s", + `${host}${port ? `:${port}` : ""}`, + protocol, + version + ); + }); + diagnosticsChannel.channel("undici:client:connected").subscribe((evt) => { + const { + connectParams: { version, protocol, port, host } + } = evt; + debuglog( + "connected to %s using %s%s", + `${host}${port ? `:${port}` : ""}`, + protocol, + version + ); + }); + diagnosticsChannel.channel("undici:client:connectError").subscribe((evt) => { + const { + connectParams: { version, protocol, port, host }, + error + } = evt; + debuglog( + "connection to %s using %s%s errored - %s", + `${host}${port ? `:${port}` : ""}`, + protocol, + version, + error.message + ); + }); + diagnosticsChannel.channel("undici:client:sendHeaders").subscribe((evt) => { + const { + request: { method, path, origin } + } = evt; + debuglog("sending request to %s %s/%s", method, origin, path); + }); + diagnosticsChannel.channel("undici:request:headers").subscribe((evt) => { + const { + request: { method, path, origin }, + response: { statusCode } + } = evt; + debuglog( + "received response to %s %s/%s - HTTP %d", + method, + origin, + path, + statusCode + ); + }); + diagnosticsChannel.channel("undici:request:trailers").subscribe((evt) => { + const { + request: { method, path, origin } + } = evt; + debuglog("trailers received from %s %s/%s", method, origin, path); + }); + diagnosticsChannel.channel("undici:request:error").subscribe((evt) => { + const { + request: { method, path, origin }, + error + } = evt; + debuglog( + "request to %s %s/%s errored - %s", + method, + origin, + path, + error.message + ); + }); + isClientSet = true; + } + if (websocketDebuglog.enabled) { + if (!isClientSet) { + const debuglog = undiciDebugLog.enabled ? undiciDebugLog : websocketDebuglog; + diagnosticsChannel.channel("undici:client:beforeConnect").subscribe((evt) => { + const { + connectParams: { version, protocol, port, host } + } = evt; + debuglog( + "connecting to %s%s using %s%s", + host, + port ? `:${port}` : "", + protocol, + version + ); + }); + diagnosticsChannel.channel("undici:client:connected").subscribe((evt) => { + const { + connectParams: { version, protocol, port, host } + } = evt; + debuglog( + "connected to %s%s using %s%s", + host, + port ? `:${port}` : "", + protocol, + version + ); + }); + diagnosticsChannel.channel("undici:client:connectError").subscribe((evt) => { + const { + connectParams: { version, protocol, port, host }, + error + } = evt; + debuglog( + "connection to %s%s using %s%s errored - %s", + host, + port ? `:${port}` : "", + protocol, + version, + error.message + ); + }); + diagnosticsChannel.channel("undici:client:sendHeaders").subscribe((evt) => { + const { + request: { method, path, origin } + } = evt; + debuglog("sending request to %s %s/%s", method, origin, path); + }); + } + diagnosticsChannel.channel("undici:websocket:open").subscribe((evt) => { + const { + address: { address, port } + } = evt; + websocketDebuglog("connection opened %s%s", address, port ? `:${port}` : ""); + }); + diagnosticsChannel.channel("undici:websocket:close").subscribe((evt) => { + const { websocket, code, reason } = evt; + websocketDebuglog( + "closed connection to %s - %s %s", + websocket.url, + code, + reason + ); + }); + diagnosticsChannel.channel("undici:websocket:socket_error").subscribe((err) => { + websocketDebuglog("connection errored - %s", err.message); + }); + diagnosticsChannel.channel("undici:websocket:ping").subscribe((evt) => { + websocketDebuglog("ping received"); + }); + diagnosticsChannel.channel("undici:websocket:pong").subscribe((evt) => { + websocketDebuglog("pong received"); + }); + } + module2.exports = { + channels + }; + } +}); + +// src/patches/undici-core-request.js +var require_undici_core_request = __commonJS({ + "src/patches/undici-core-request.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { + InvalidArgumentError, + NotSupportedError + } = require_errors(); + var assert = require("assert"); + var { + isValidHTTPToken, + isValidHeaderValue, + isStream, + destroy, + isBuffer, + isFormDataLike, + isIterable, + isBlobLike, + buildURL, + validateHandler, + getServerName, + normalizedMethodRecords + } = require_util(); + var { channels } = require_diagnostics(); + var { headerNameLowerCasedRecord } = require_constants(); + var invalidPathRegex = /[^\u0021-\u00ff]/; + var kHandler = Symbol("handler"); + var _Request2 = class _Request2 { + constructor(origin, { + path, + method, + body, + headers, + query, + idempotent, + blocking, + upgrade, + headersTimeout, + bodyTimeout, + reset, + throwOnError, + expectContinue, + servername + }, handler) { + if (typeof path !== "string") { + throw new InvalidArgumentError("path must be a string"); + } else if (path[0] !== "/" && !(path.startsWith("http://") || path.startsWith("https://")) && method !== "CONNECT") { + throw new InvalidArgumentError( + "path must be an absolute URL or start with a slash" + ); + } else if (invalidPathRegex.test(path)) { + throw new InvalidArgumentError("invalid request path"); + } + if (typeof method !== "string") { + throw new InvalidArgumentError("method must be a string"); + } else if (normalizedMethodRecords[method] === void 0 && !isValidHTTPToken(method)) { + throw new InvalidArgumentError("invalid request method"); + } + if (upgrade && typeof upgrade !== "string") { + throw new InvalidArgumentError("upgrade must be a string"); + } + if (headersTimeout != null && (!Number.isFinite(headersTimeout) || headersTimeout < 0)) { + throw new InvalidArgumentError("invalid headersTimeout"); + } + if (bodyTimeout != null && (!Number.isFinite(bodyTimeout) || bodyTimeout < 0)) { + throw new InvalidArgumentError("invalid bodyTimeout"); + } + if (reset != null && typeof reset !== "boolean") { + throw new InvalidArgumentError("invalid reset"); + } + if (expectContinue != null && typeof expectContinue !== "boolean") { + throw new InvalidArgumentError("invalid expectContinue"); + } + this.headersTimeout = headersTimeout; + this.bodyTimeout = bodyTimeout; + this.throwOnError = throwOnError === true; + this.method = method; + this.abort = null; + if (body == null) { + this.body = null; + } else if (isStream(body)) { + this.body = body; + const rState = this.body._readableState; + if (!rState || !rState.autoDestroy) { + this.endHandler = /* @__PURE__ */ __name(function autoDestroy() { + destroy(this); + }, "autoDestroy"); + this.body.on("end", this.endHandler); + } + this.errorHandler = (err) => { + if (this.abort) { + this.abort(err); + } else { + this.error = err; + } + }; + this.body.on("error", this.errorHandler); + } else if (isBuffer(body)) { + this.body = body.byteLength ? body : null; + } else if (ArrayBuffer.isView(body)) { + this.body = body.buffer.byteLength ? Buffer.from(body.buffer, body.byteOffset, body.byteLength) : null; + } else if (body instanceof ArrayBuffer) { + this.body = body.byteLength ? Buffer.from(body) : null; + } else if (typeof body === "string") { + this.body = body.length ? Buffer.from(body) : null; + } else if (isFormDataLike(body) || isIterable(body) || isBlobLike(body)) { + this.body = body; + } else { + throw new InvalidArgumentError( + "body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable" + ); + } + this.completed = false; + this.aborted = false; + this.upgrade = upgrade || null; + this.path = query ? buildURL(path, query) : path; + this.origin = origin; + this.idempotent = idempotent == null ? method === "HEAD" || method === "GET" : idempotent; + this.blocking = blocking == null ? false : blocking; + this.reset = reset == null ? null : reset; + this.host = null; + this.contentLength = null; + this.contentType = null; + this.headers = []; + this.expectContinue = expectContinue != null ? expectContinue : false; + if (Array.isArray(headers)) { + if (headers.length % 2 !== 0) { + throw new InvalidArgumentError("headers array must be even"); + } + for (let i = 0; i < headers.length; i += 2) { + processHeader(this, headers[i], headers[i + 1]); + } + } else if (headers && typeof headers === "object") { + if (headers[Symbol.iterator]) { + for (const header of headers) { + if (!Array.isArray(header) || header.length !== 2) { + throw new InvalidArgumentError( + "headers must be in key-value pair format" + ); + } + processHeader(this, header[0], header[1]); + } + } else { + const keys = Object.keys(headers); + for (let i = 0; i < keys.length; ++i) { + processHeader(this, keys[i], headers[keys[i]]); + } + } + } else if (headers != null) { + throw new InvalidArgumentError("headers must be an object or an array"); + } + validateHandler(handler, method, upgrade); + this.servername = servername || getServerName(this.host); + this[kHandler] = handler; + if (channels.create.hasSubscribers) { + channels.create.publish({ request: this }); + } + } + onBodySent(chunk) { + if (this[kHandler].onBodySent) { + try { + return this[kHandler].onBodySent(chunk); + } catch (err) { + this.abort(err); + } + } + } + onRequestSent() { + if (channels.bodySent.hasSubscribers) { + channels.bodySent.publish({ request: this }); + } + if (this[kHandler].onRequestSent) { + try { + return this[kHandler].onRequestSent(); + } catch (err) { + this.abort(err); + } + } + } + onConnect(abort) { + assert(!this.aborted); + assert(!this.completed); + if (this.error) { + abort(this.error); + } else { + this.abort = abort; + return this[kHandler].onConnect(abort); + } + } + onResponseStarted() { + return this[kHandler].onResponseStarted?.(); + } + onHeaders(statusCode, headers, resume, statusText) { + assert(!this.aborted); + assert(!this.completed); + if (channels.headers.hasSubscribers) { + channels.headers.publish({ + request: this, + response: { statusCode, headers, statusText } + }); + } + try { + return this[kHandler].onHeaders(statusCode, headers, resume, statusText); + } catch (err) { + this.abort(err); + } + } + onData(chunk) { + assert(!this.aborted); + assert(!this.completed); + try { + return this[kHandler].onData(chunk); + } catch (err) { + this.abort(err); + return false; + } + } + onUpgrade(statusCode, headers, socket) { + assert(!this.aborted); + assert(!this.completed); + return this[kHandler].onUpgrade(statusCode, headers, socket); + } + onComplete(trailers) { + this.onFinally(); + assert(!this.aborted); + this.completed = true; + if (channels.trailers.hasSubscribers) { + channels.trailers.publish({ request: this, trailers }); + } + try { + return this[kHandler].onComplete(trailers); + } catch (err) { + this.onError(err); + } + } + onError(error) { + this.onFinally(); + if (channels.error.hasSubscribers) { + channels.error.publish({ request: this, error }); + } + if (this.aborted) { + return; + } + this.aborted = true; + return this[kHandler].onError(error); + } + onFinally() { + if (this.errorHandler) { + this.body.off("error", this.errorHandler); + this.errorHandler = null; + } + if (this.endHandler) { + this.body.off("end", this.endHandler); + this.endHandler = null; + } + } + addHeader(key, value) { + processHeader(this, key, value); + return this; + } + }; + __name(_Request2, "Request"); + var Request2 = _Request2; + function processHeader(request, key, val) { + if (val && typeof val === "object" && !Array.isArray(val)) { + throw new InvalidArgumentError(`invalid ${key} header`); + } else if (val === void 0) { + return; + } + let headerName = headerNameLowerCasedRecord[key]; + if (headerName === void 0) { + headerName = key.toLowerCase(); + if (headerNameLowerCasedRecord[headerName] === void 0 && !isValidHTTPToken(headerName)) { + throw new InvalidArgumentError("invalid header key"); + } + } + if (Array.isArray(val)) { + const arr = []; + for (let i = 0; i < val.length; i++) { + if (typeof val[i] === "string") { + if (!isValidHeaderValue(val[i])) { + throw new InvalidArgumentError(`invalid ${key} header`); + } + arr.push(val[i]); + } else if (val[i] === null) { + arr.push(""); + } else if (typeof val[i] === "object") { + throw new InvalidArgumentError(`invalid ${key} header`); + } else { + arr.push(`${val[i]}`); + } + } + val = arr; + } else if (typeof val === "string") { + if (!isValidHeaderValue(val)) { + throw new InvalidArgumentError(`invalid ${key} header`); + } + } else if (val === null) { + val = ""; + } else { + val = `${val}`; + } + if (request.host === null && headerName === "host") { + if (typeof val !== "string") { + throw new InvalidArgumentError("invalid host header"); + } + request.host = val; + } else if (request.contentLength === null && headerName === "content-length") { + request.contentLength = parseInt(val, 10); + if (!Number.isFinite(request.contentLength)) { + throw new InvalidArgumentError("invalid content-length header"); + } + } else if (request.contentType === null && headerName === "content-type") { + request.contentType = val; + request.headers.push(key, val); + } else if (headerName === "connection") { + const value = typeof val === "string" ? val.toLowerCase() : null; + if (value !== "close" && value !== "keep-alive") { + throw new InvalidArgumentError("invalid connection header"); + } + if (value === "close") { + request.reset = true; + } + } else if (headerName === "expect") { + throw new NotSupportedError("expect header not supported"); + } else { + request.headers.push(key, val); + } + } + __name(processHeader, "processHeader"); + module2.exports = Request2; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/dispatcher.js +var require_dispatcher = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/dispatcher.js"(exports2, module2) { + "use strict"; + init_define_process(); + var EventEmitter = require("events"); + var _Dispatcher = class _Dispatcher extends EventEmitter { + dispatch() { + throw new Error("not implemented"); + } + close() { + throw new Error("not implemented"); + } + destroy() { + throw new Error("not implemented"); + } + compose(...args) { + const interceptors = Array.isArray(args[0]) ? args[0] : args; + let dispatch = this.dispatch.bind(this); + for (const interceptor of interceptors) { + if (interceptor == null) { + continue; + } + if (typeof interceptor !== "function") { + throw new TypeError(`invalid interceptor, expected function received ${typeof interceptor}`); + } + dispatch = interceptor(dispatch); + if (dispatch == null || typeof dispatch !== "function" || dispatch.length !== 2) { + throw new TypeError("invalid interceptor"); + } + } + return new ComposedDispatcher(this, dispatch); + } + }; + __name(_Dispatcher, "Dispatcher"); + var Dispatcher = _Dispatcher; + var _dispatcher, _dispatch; + var _ComposedDispatcher = class _ComposedDispatcher extends Dispatcher { + constructor(dispatcher, dispatch) { + super(); + __privateAdd(this, _dispatcher, null); + __privateAdd(this, _dispatch, null); + __privateSet(this, _dispatcher, dispatcher); + __privateSet(this, _dispatch, dispatch); + } + dispatch(...args) { + __privateGet(this, _dispatch).call(this, ...args); + } + close(...args) { + return __privateGet(this, _dispatcher).close(...args); + } + destroy(...args) { + return __privateGet(this, _dispatcher).destroy(...args); + } + }; + _dispatcher = new WeakMap(); + _dispatch = new WeakMap(); + __name(_ComposedDispatcher, "ComposedDispatcher"); + var ComposedDispatcher = _ComposedDispatcher; + module2.exports = Dispatcher; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/dispatcher-base.js +var require_dispatcher_base = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/dispatcher-base.js"(exports2, module2) { + "use strict"; + init_define_process(); + var Dispatcher = require_dispatcher(); + var { + ClientDestroyedError, + ClientClosedError, + InvalidArgumentError + } = require_errors(); + var { kDestroy, kClose, kClosed, kDestroyed, kDispatch, kInterceptors } = require_symbols(); + var kOnDestroyed = Symbol("onDestroyed"); + var kOnClosed = Symbol("onClosed"); + var kInterceptedDispatch = Symbol("Intercepted Dispatch"); + var _DispatcherBase = class _DispatcherBase extends Dispatcher { + constructor() { + super(); + this[kDestroyed] = false; + this[kOnDestroyed] = null; + this[kClosed] = false; + this[kOnClosed] = []; + } + get destroyed() { + return this[kDestroyed]; + } + get closed() { + return this[kClosed]; + } + get interceptors() { + return this[kInterceptors]; + } + set interceptors(newInterceptors) { + if (newInterceptors) { + for (let i = newInterceptors.length - 1; i >= 0; i--) { + const interceptor = this[kInterceptors][i]; + if (typeof interceptor !== "function") { + throw new InvalidArgumentError("interceptor must be an function"); + } + } + } + this[kInterceptors] = newInterceptors; + } + close(callback) { + if (callback === void 0) { + return new Promise((resolve, reject) => { + this.close((err, data) => { + return err ? reject(err) : resolve(data); + }); + }); + } + if (typeof callback !== "function") { + throw new InvalidArgumentError("invalid callback"); + } + if (this[kDestroyed]) { + queueMicrotask(() => callback(new ClientDestroyedError(), null)); + return; + } + if (this[kClosed]) { + if (this[kOnClosed]) { + this[kOnClosed].push(callback); + } else { + queueMicrotask(() => callback(null, null)); + } + return; + } + this[kClosed] = true; + this[kOnClosed].push(callback); + const onClosed = /* @__PURE__ */ __name(() => { + const callbacks = this[kOnClosed]; + this[kOnClosed] = null; + for (let i = 0; i < callbacks.length; i++) { + callbacks[i](null, null); + } + }, "onClosed"); + this[kClose]().then(() => this.destroy()).then(() => { + queueMicrotask(onClosed); + }); + } + destroy(err, callback) { + if (typeof err === "function") { + callback = err; + err = null; + } + if (callback === void 0) { + return new Promise((resolve, reject) => { + this.destroy(err, (err2, data) => { + return err2 ? ( + /* istanbul ignore next: should never error */ + reject(err2) + ) : resolve(data); + }); + }); + } + if (typeof callback !== "function") { + throw new InvalidArgumentError("invalid callback"); + } + if (this[kDestroyed]) { + if (this[kOnDestroyed]) { + this[kOnDestroyed].push(callback); + } else { + queueMicrotask(() => callback(null, null)); + } + return; + } + if (!err) { + err = new ClientDestroyedError(); + } + this[kDestroyed] = true; + this[kOnDestroyed] = this[kOnDestroyed] || []; + this[kOnDestroyed].push(callback); + const onDestroyed = /* @__PURE__ */ __name(() => { + const callbacks = this[kOnDestroyed]; + this[kOnDestroyed] = null; + for (let i = 0; i < callbacks.length; i++) { + callbacks[i](null, null); + } + }, "onDestroyed"); + this[kDestroy](err).then(() => { + queueMicrotask(onDestroyed); + }); + } + [kInterceptedDispatch](opts, handler) { + if (!this[kInterceptors] || this[kInterceptors].length === 0) { + this[kInterceptedDispatch] = this[kDispatch]; + return this[kDispatch](opts, handler); + } + let dispatch = this[kDispatch].bind(this); + for (let i = this[kInterceptors].length - 1; i >= 0; i--) { + dispatch = this[kInterceptors][i](dispatch); + } + this[kInterceptedDispatch] = dispatch; + return dispatch(opts, handler); + } + dispatch(opts, handler) { + if (!handler || typeof handler !== "object") { + throw new InvalidArgumentError("handler must be an object"); + } + try { + if (!opts || typeof opts !== "object") { + throw new InvalidArgumentError("opts must be an object."); + } + if (this[kDestroyed] || this[kOnDestroyed]) { + throw new ClientDestroyedError(); + } + if (this[kClosed]) { + throw new ClientClosedError(); + } + return this[kInterceptedDispatch](opts, handler); + } catch (err) { + if (typeof handler.onError !== "function") { + throw new InvalidArgumentError("invalid onError method"); + } + handler.onError(err); + return false; + } + } + }; + __name(_DispatcherBase, "DispatcherBase"); + var DispatcherBase = _DispatcherBase; + module2.exports = DispatcherBase; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/util/timers.js +var require_timers = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/util/timers.js"(exports2, module2) { + "use strict"; + init_define_process(); + var fastNow = 0; + var RESOLUTION_MS = 1e3; + var TICK_MS = (RESOLUTION_MS >> 1) - 1; + var fastNowTimeout; + var kFastTimer = Symbol("kFastTimer"); + var fastTimers = []; + var NOT_IN_LIST = -2; + var TO_BE_CLEARED = -1; + var PENDING = 0; + var ACTIVE = 1; + function onTick() { + fastNow += TICK_MS; + let idx = 0; + let len = fastTimers.length; + while (idx < len) { + const timer = fastTimers[idx]; + if (timer._state === PENDING) { + timer._idleStart = fastNow - TICK_MS; + timer._state = ACTIVE; + } else if (timer._state === ACTIVE && fastNow >= timer._idleStart + timer._idleTimeout) { + timer._state = TO_BE_CLEARED; + timer._idleStart = -1; + timer._onTimeout(timer._timerArg); + } + if (timer._state === TO_BE_CLEARED) { + timer._state = NOT_IN_LIST; + if (--len !== 0) { + fastTimers[idx] = fastTimers[len]; + } + } else { + ++idx; + } + } + fastTimers.length = len; + if (fastTimers.length !== 0) { + refreshTimeout(); + } + } + __name(onTick, "onTick"); + function refreshTimeout() { + if (fastNowTimeout) { + fastNowTimeout.refresh(); + } else { + clearTimeout(fastNowTimeout); + fastNowTimeout = setTimeout(onTick, TICK_MS); + if (fastNowTimeout.unref) { + fastNowTimeout.unref(); + } + } + } + __name(refreshTimeout, "refreshTimeout"); + var _FastTimer = class _FastTimer { + [kFastTimer] = true; + /** + * The state of the timer, which can be one of the following: + * - NOT_IN_LIST (-2) + * - TO_BE_CLEARED (-1) + * - PENDING (0) + * - ACTIVE (1) + * + * @type {-2|-1|0|1} + * @private + */ + _state = NOT_IN_LIST; + /** + * The number of milliseconds to wait before calling the callback. + * + * @type {number} + * @private + */ + _idleTimeout = -1; + /** + * The time in milliseconds when the timer was started. This value is used to + * calculate when the timer should expire. + * + * @type {number} + * @default -1 + * @private + */ + _idleStart = -1; + /** + * The function to be executed when the timer expires. + * @type {Function} + * @private + */ + _onTimeout; + /** + * The argument to be passed to the callback when the timer expires. + * + * @type {*} + * @private + */ + _timerArg; + /** + * @constructor + * @param {Function} callback A function to be executed after the timer + * expires. + * @param {number} delay The time, in milliseconds that the timer should wait + * before the specified function or code is executed. + * @param {*} arg + */ + constructor(callback, delay, arg) { + this._onTimeout = callback; + this._idleTimeout = delay; + this._timerArg = arg; + this.refresh(); + } + /** + * Sets the timer's start time to the current time, and reschedules the timer + * to call its callback at the previously specified duration adjusted to the + * current time. + * Using this on a timer that has already called its callback will reactivate + * the timer. + * + * @returns {void} + */ + refresh() { + if (this._state === NOT_IN_LIST) { + fastTimers.push(this); + } + if (!fastNowTimeout || fastTimers.length === 1) { + refreshTimeout(); + } + this._state = PENDING; + } + /** + * The `clear` method cancels the timer, preventing it from executing. + * + * @returns {void} + * @private + */ + clear() { + this._state = TO_BE_CLEARED; + this._idleStart = -1; + } + }; + __name(_FastTimer, "FastTimer"); + var FastTimer = _FastTimer; + module2.exports = { + /** + * The setTimeout() method sets a timer which executes a function once the + * timer expires. + * @param {Function} callback A function to be executed after the timer + * expires. + * @param {number} delay The time, in milliseconds that the timer should + * wait before the specified function or code is executed. + * @param {*} [arg] An optional argument to be passed to the callback function + * when the timer expires. + * @returns {NodeJS.Timeout|FastTimer} + */ + setTimeout(callback, delay, arg) { + return delay <= RESOLUTION_MS ? setTimeout(callback, delay, arg) : new FastTimer(callback, delay, arg); + }, + /** + * The clearTimeout method cancels an instantiated Timer previously created + * by calling setTimeout. + * + * @param {NodeJS.Timeout|FastTimer} timeout + */ + clearTimeout(timeout) { + if (timeout[kFastTimer]) { + timeout.clear(); + } else { + clearTimeout(timeout); + } + }, + /** + * The setFastTimeout() method sets a fastTimer which executes a function once + * the timer expires. + * @param {Function} callback A function to be executed after the timer + * expires. + * @param {number} delay The time, in milliseconds that the timer should + * wait before the specified function or code is executed. + * @param {*} [arg] An optional argument to be passed to the callback function + * when the timer expires. + * @returns {FastTimer} + */ + setFastTimeout(callback, delay, arg) { + return new FastTimer(callback, delay, arg); + }, + /** + * The clearTimeout method cancels an instantiated FastTimer previously + * created by calling setFastTimeout. + * + * @param {FastTimer} timeout + */ + clearFastTimeout(timeout) { + timeout.clear(); + }, + /** + * The now method returns the value of the internal fast timer clock. + * + * @returns {number} + */ + now() { + return fastNow; + }, + /** + * Trigger the onTick function to process the fastTimers array. + * Exported for testing purposes only. + * Marking as deprecated to discourage any use outside of testing. + * @deprecated + * @param {number} [delay=0] The delay in milliseconds to add to the now value. + */ + tick(delay = 0) { + fastNow += delay - RESOLUTION_MS + 1; + onTick(); + onTick(); + }, + /** + * Reset FastTimers. + * Exported for testing purposes only. + * Marking as deprecated to discourage any use outside of testing. + * @deprecated + */ + reset() { + fastNow = 0; + fastTimers.length = 0; + clearTimeout(fastNowTimeout); + fastNowTimeout = null; + }, + /** + * Exporting for testing purposes only. + * Marking as deprecated to discourage any use outside of testing. + * @deprecated + */ + kFastTimer + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/core/connect.js +var require_connect = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/core/connect.js"(exports2, module2) { + "use strict"; + init_define_process(); + var net = require("net"); + var assert = require("assert"); + var util = require_util(); + var { InvalidArgumentError, ConnectTimeoutError } = require_errors(); + var timers = require_timers(); + function noop() { + } + __name(noop, "noop"); + var tls; + var SessionCache; + var _a, _b; + if (global.FinalizationRegistry && !(define_process_default.env.NODE_V8_COVERAGE || define_process_default.env.UNDICI_NO_FG)) { + SessionCache = (_a = class { + constructor(maxCachedSessions) { + this._maxCachedSessions = maxCachedSessions; + this._sessionCache = /* @__PURE__ */ new Map(); + this._sessionRegistry = new global.FinalizationRegistry((key) => { + if (this._sessionCache.size < this._maxCachedSessions) { + return; + } + const ref = this._sessionCache.get(key); + if (ref !== void 0 && ref.deref() === void 0) { + this._sessionCache.delete(key); + } + }); + } + get(sessionKey) { + const ref = this._sessionCache.get(sessionKey); + return ref ? ref.deref() : null; + } + set(sessionKey, session) { + if (this._maxCachedSessions === 0) { + return; + } + this._sessionCache.set(sessionKey, new WeakRef(session)); + this._sessionRegistry.register(session, sessionKey); + } + }, __name(_a, "WeakSessionCache"), _a); + } else { + SessionCache = (_b = class { + constructor(maxCachedSessions) { + this._maxCachedSessions = maxCachedSessions; + this._sessionCache = /* @__PURE__ */ new Map(); + } + get(sessionKey) { + return this._sessionCache.get(sessionKey); + } + set(sessionKey, session) { + if (this._maxCachedSessions === 0) { + return; + } + if (this._sessionCache.size >= this._maxCachedSessions) { + const { value: oldestKey } = this._sessionCache.keys().next(); + this._sessionCache.delete(oldestKey); + } + this._sessionCache.set(sessionKey, session); + } + }, __name(_b, "SimpleSessionCache"), _b); + } + function buildConnector({ allowH2, maxCachedSessions, socketPath, timeout, session: customSession, ...opts }) { + if (maxCachedSessions != null && (!Number.isInteger(maxCachedSessions) || maxCachedSessions < 0)) { + throw new InvalidArgumentError("maxCachedSessions must be a positive integer or zero"); + } + const options = { path: socketPath, ...opts }; + const sessionCache = new SessionCache(maxCachedSessions == null ? 100 : maxCachedSessions); + timeout = timeout == null ? 1e4 : timeout; + allowH2 = allowH2 != null ? allowH2 : false; + return /* @__PURE__ */ __name(function connect({ hostname, host, protocol, port, servername, localAddress, httpSocket }, callback) { + let socket; + if (protocol === "https:") { + if (!tls) { + tls = require("tls"); + } + servername = servername || options.servername || util.getServerName(host) || null; + const sessionKey = servername || hostname; + assert(sessionKey); + const session = customSession || sessionCache.get(sessionKey) || null; + port = port || 443; + socket = tls.connect({ + highWaterMark: 16384, + // TLS in node can't have bigger HWM anyway... + ...options, + servername, + session, + localAddress, + // TODO(HTTP/2): Add support for h2c + ALPNProtocols: allowH2 ? ["http/1.1", "h2"] : ["http/1.1"], + socket: httpSocket, + // upgrade socket connection + port, + host: hostname + }); + socket.on("session", function(session2) { + sessionCache.set(sessionKey, session2); + }); + } else { + assert(!httpSocket, "httpSocket can only be sent on TLS update"); + port = port || 80; + socket = net.connect({ + highWaterMark: 64 * 1024, + // Same as nodejs fs streams. + ...options, + localAddress, + port, + host: hostname + }); + } + if (options.keepAlive == null || options.keepAlive) { + const keepAliveInitialDelay = options.keepAliveInitialDelay === void 0 ? 6e4 : options.keepAliveInitialDelay; + socket.setKeepAlive(true, keepAliveInitialDelay); + } + const clearConnectTimeout = setupConnectTimeout(new WeakRef(socket), { timeout, hostname, port }); + socket.setNoDelay(true).once(protocol === "https:" ? "secureConnect" : "connect", function() { + queueMicrotask(clearConnectTimeout); + if (callback) { + const cb = callback; + callback = null; + cb(null, this); + } + }).on("error", function(err) { + queueMicrotask(clearConnectTimeout); + if (callback) { + const cb = callback; + callback = null; + cb(err); + } + }); + return socket; + }, "connect"); + } + __name(buildConnector, "buildConnector"); + var setupConnectTimeout = define_process_default.platform === "win32" ? (socketWeakRef, opts) => { + if (!opts.timeout) { + return noop; + } + let s1 = null; + let s2 = null; + const fastTimer = timers.setFastTimeout(() => { + s1 = setImmediate(() => { + s2 = setImmediate(() => onConnectTimeout(socketWeakRef.deref(), opts)); + }); + }, opts.timeout); + return () => { + timers.clearFastTimeout(fastTimer); + clearImmediate(s1); + clearImmediate(s2); + }; + } : (socketWeakRef, opts) => { + if (!opts.timeout) { + return noop; + } + let s1 = null; + const fastTimer = timers.setFastTimeout(() => { + s1 = setImmediate(() => { + onConnectTimeout(socketWeakRef.deref(), opts); + }); + }, opts.timeout); + return () => { + timers.clearFastTimeout(fastTimer); + clearImmediate(s1); + }; + }; + function onConnectTimeout(socket, opts) { + if (socket == null) { + return; + } + let message = "Connect Timeout Error"; + if (Array.isArray(socket.autoSelectFamilyAttemptedAddresses)) { + message += ` (attempted addresses: ${socket.autoSelectFamilyAttemptedAddresses.join(", ")},`; + } else { + message += ` (attempted address: ${opts.hostname}:${opts.port},`; + } + message += ` timeout: ${opts.timeout}ms)`; + util.destroy(socket, new ConnectTimeoutError(message)); + } + __name(onConnectTimeout, "onConnectTimeout"); + module2.exports = buildConnector; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/llhttp/utils.js +var require_utils = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/llhttp/utils.js"(exports2) { + "use strict"; + init_define_process(); + Object.defineProperty(exports2, "__esModule", { value: true }); + exports2.enumToMap = void 0; + function enumToMap(obj) { + const res = {}; + Object.keys(obj).forEach((key) => { + const value = obj[key]; + if (typeof value === "number") { + res[key] = value; + } + }); + return res; + } + __name(enumToMap, "enumToMap"); + exports2.enumToMap = enumToMap; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/llhttp/constants.js +var require_constants2 = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/llhttp/constants.js"(exports2) { + "use strict"; + init_define_process(); + Object.defineProperty(exports2, "__esModule", { value: true }); + exports2.SPECIAL_HEADERS = exports2.HEADER_STATE = exports2.MINOR = exports2.MAJOR = exports2.CONNECTION_TOKEN_CHARS = exports2.HEADER_CHARS = exports2.TOKEN = exports2.STRICT_TOKEN = exports2.HEX = exports2.URL_CHAR = exports2.STRICT_URL_CHAR = exports2.USERINFO_CHARS = exports2.MARK = exports2.ALPHANUM = exports2.NUM = exports2.HEX_MAP = exports2.NUM_MAP = exports2.ALPHA = exports2.FINISH = exports2.H_METHOD_MAP = exports2.METHOD_MAP = exports2.METHODS_RTSP = exports2.METHODS_ICE = exports2.METHODS_HTTP = exports2.METHODS = exports2.LENIENT_FLAGS = exports2.FLAGS = exports2.TYPE = exports2.ERROR = void 0; + var utils_1 = require_utils(); + var ERROR; + (function(ERROR2) { + ERROR2[ERROR2["OK"] = 0] = "OK"; + ERROR2[ERROR2["INTERNAL"] = 1] = "INTERNAL"; + ERROR2[ERROR2["STRICT"] = 2] = "STRICT"; + ERROR2[ERROR2["LF_EXPECTED"] = 3] = "LF_EXPECTED"; + ERROR2[ERROR2["UNEXPECTED_CONTENT_LENGTH"] = 4] = "UNEXPECTED_CONTENT_LENGTH"; + ERROR2[ERROR2["CLOSED_CONNECTION"] = 5] = "CLOSED_CONNECTION"; + ERROR2[ERROR2["INVALID_METHOD"] = 6] = "INVALID_METHOD"; + ERROR2[ERROR2["INVALID_URL"] = 7] = "INVALID_URL"; + ERROR2[ERROR2["INVALID_CONSTANT"] = 8] = "INVALID_CONSTANT"; + ERROR2[ERROR2["INVALID_VERSION"] = 9] = "INVALID_VERSION"; + ERROR2[ERROR2["INVALID_HEADER_TOKEN"] = 10] = "INVALID_HEADER_TOKEN"; + ERROR2[ERROR2["INVALID_CONTENT_LENGTH"] = 11] = "INVALID_CONTENT_LENGTH"; + ERROR2[ERROR2["INVALID_CHUNK_SIZE"] = 12] = "INVALID_CHUNK_SIZE"; + ERROR2[ERROR2["INVALID_STATUS"] = 13] = "INVALID_STATUS"; + ERROR2[ERROR2["INVALID_EOF_STATE"] = 14] = "INVALID_EOF_STATE"; + ERROR2[ERROR2["INVALID_TRANSFER_ENCODING"] = 15] = "INVALID_TRANSFER_ENCODING"; + ERROR2[ERROR2["CB_MESSAGE_BEGIN"] = 16] = "CB_MESSAGE_BEGIN"; + ERROR2[ERROR2["CB_HEADERS_COMPLETE"] = 17] = "CB_HEADERS_COMPLETE"; + ERROR2[ERROR2["CB_MESSAGE_COMPLETE"] = 18] = "CB_MESSAGE_COMPLETE"; + ERROR2[ERROR2["CB_CHUNK_HEADER"] = 19] = "CB_CHUNK_HEADER"; + ERROR2[ERROR2["CB_CHUNK_COMPLETE"] = 20] = "CB_CHUNK_COMPLETE"; + ERROR2[ERROR2["PAUSED"] = 21] = "PAUSED"; + ERROR2[ERROR2["PAUSED_UPGRADE"] = 22] = "PAUSED_UPGRADE"; + ERROR2[ERROR2["PAUSED_H2_UPGRADE"] = 23] = "PAUSED_H2_UPGRADE"; + ERROR2[ERROR2["USER"] = 24] = "USER"; + })(ERROR = exports2.ERROR || (exports2.ERROR = {})); + var TYPE; + (function(TYPE2) { + TYPE2[TYPE2["BOTH"] = 0] = "BOTH"; + TYPE2[TYPE2["REQUEST"] = 1] = "REQUEST"; + TYPE2[TYPE2["RESPONSE"] = 2] = "RESPONSE"; + })(TYPE = exports2.TYPE || (exports2.TYPE = {})); + var FLAGS; + (function(FLAGS2) { + FLAGS2[FLAGS2["CONNECTION_KEEP_ALIVE"] = 1] = "CONNECTION_KEEP_ALIVE"; + FLAGS2[FLAGS2["CONNECTION_CLOSE"] = 2] = "CONNECTION_CLOSE"; + FLAGS2[FLAGS2["CONNECTION_UPGRADE"] = 4] = "CONNECTION_UPGRADE"; + FLAGS2[FLAGS2["CHUNKED"] = 8] = "CHUNKED"; + FLAGS2[FLAGS2["UPGRADE"] = 16] = "UPGRADE"; + FLAGS2[FLAGS2["CONTENT_LENGTH"] = 32] = "CONTENT_LENGTH"; + FLAGS2[FLAGS2["SKIPBODY"] = 64] = "SKIPBODY"; + FLAGS2[FLAGS2["TRAILING"] = 128] = "TRAILING"; + FLAGS2[FLAGS2["TRANSFER_ENCODING"] = 512] = "TRANSFER_ENCODING"; + })(FLAGS = exports2.FLAGS || (exports2.FLAGS = {})); + var LENIENT_FLAGS; + (function(LENIENT_FLAGS2) { + LENIENT_FLAGS2[LENIENT_FLAGS2["HEADERS"] = 1] = "HEADERS"; + LENIENT_FLAGS2[LENIENT_FLAGS2["CHUNKED_LENGTH"] = 2] = "CHUNKED_LENGTH"; + LENIENT_FLAGS2[LENIENT_FLAGS2["KEEP_ALIVE"] = 4] = "KEEP_ALIVE"; + })(LENIENT_FLAGS = exports2.LENIENT_FLAGS || (exports2.LENIENT_FLAGS = {})); + var METHODS; + (function(METHODS2) { + METHODS2[METHODS2["DELETE"] = 0] = "DELETE"; + METHODS2[METHODS2["GET"] = 1] = "GET"; + METHODS2[METHODS2["HEAD"] = 2] = "HEAD"; + METHODS2[METHODS2["POST"] = 3] = "POST"; + METHODS2[METHODS2["PUT"] = 4] = "PUT"; + METHODS2[METHODS2["CONNECT"] = 5] = "CONNECT"; + METHODS2[METHODS2["OPTIONS"] = 6] = "OPTIONS"; + METHODS2[METHODS2["TRACE"] = 7] = "TRACE"; + METHODS2[METHODS2["COPY"] = 8] = "COPY"; + METHODS2[METHODS2["LOCK"] = 9] = "LOCK"; + METHODS2[METHODS2["MKCOL"] = 10] = "MKCOL"; + METHODS2[METHODS2["MOVE"] = 11] = "MOVE"; + METHODS2[METHODS2["PROPFIND"] = 12] = "PROPFIND"; + METHODS2[METHODS2["PROPPATCH"] = 13] = "PROPPATCH"; + METHODS2[METHODS2["SEARCH"] = 14] = "SEARCH"; + METHODS2[METHODS2["UNLOCK"] = 15] = "UNLOCK"; + METHODS2[METHODS2["BIND"] = 16] = "BIND"; + METHODS2[METHODS2["REBIND"] = 17] = "REBIND"; + METHODS2[METHODS2["UNBIND"] = 18] = "UNBIND"; + METHODS2[METHODS2["ACL"] = 19] = "ACL"; + METHODS2[METHODS2["REPORT"] = 20] = "REPORT"; + METHODS2[METHODS2["MKACTIVITY"] = 21] = "MKACTIVITY"; + METHODS2[METHODS2["CHECKOUT"] = 22] = "CHECKOUT"; + METHODS2[METHODS2["MERGE"] = 23] = "MERGE"; + METHODS2[METHODS2["M-SEARCH"] = 24] = "M-SEARCH"; + METHODS2[METHODS2["NOTIFY"] = 25] = "NOTIFY"; + METHODS2[METHODS2["SUBSCRIBE"] = 26] = "SUBSCRIBE"; + METHODS2[METHODS2["UNSUBSCRIBE"] = 27] = "UNSUBSCRIBE"; + METHODS2[METHODS2["PATCH"] = 28] = "PATCH"; + METHODS2[METHODS2["PURGE"] = 29] = "PURGE"; + METHODS2[METHODS2["MKCALENDAR"] = 30] = "MKCALENDAR"; + METHODS2[METHODS2["LINK"] = 31] = "LINK"; + METHODS2[METHODS2["UNLINK"] = 32] = "UNLINK"; + METHODS2[METHODS2["SOURCE"] = 33] = "SOURCE"; + METHODS2[METHODS2["PRI"] = 34] = "PRI"; + METHODS2[METHODS2["DESCRIBE"] = 35] = "DESCRIBE"; + METHODS2[METHODS2["ANNOUNCE"] = 36] = "ANNOUNCE"; + METHODS2[METHODS2["SETUP"] = 37] = "SETUP"; + METHODS2[METHODS2["PLAY"] = 38] = "PLAY"; + METHODS2[METHODS2["PAUSE"] = 39] = "PAUSE"; + METHODS2[METHODS2["TEARDOWN"] = 40] = "TEARDOWN"; + METHODS2[METHODS2["GET_PARAMETER"] = 41] = "GET_PARAMETER"; + METHODS2[METHODS2["SET_PARAMETER"] = 42] = "SET_PARAMETER"; + METHODS2[METHODS2["REDIRECT"] = 43] = "REDIRECT"; + METHODS2[METHODS2["RECORD"] = 44] = "RECORD"; + METHODS2[METHODS2["FLUSH"] = 45] = "FLUSH"; + })(METHODS = exports2.METHODS || (exports2.METHODS = {})); + exports2.METHODS_HTTP = [ + METHODS.DELETE, + METHODS.GET, + METHODS.HEAD, + METHODS.POST, + METHODS.PUT, + METHODS.CONNECT, + METHODS.OPTIONS, + METHODS.TRACE, + METHODS.COPY, + METHODS.LOCK, + METHODS.MKCOL, + METHODS.MOVE, + METHODS.PROPFIND, + METHODS.PROPPATCH, + METHODS.SEARCH, + METHODS.UNLOCK, + METHODS.BIND, + METHODS.REBIND, + METHODS.UNBIND, + METHODS.ACL, + METHODS.REPORT, + METHODS.MKACTIVITY, + METHODS.CHECKOUT, + METHODS.MERGE, + METHODS["M-SEARCH"], + METHODS.NOTIFY, + METHODS.SUBSCRIBE, + METHODS.UNSUBSCRIBE, + METHODS.PATCH, + METHODS.PURGE, + METHODS.MKCALENDAR, + METHODS.LINK, + METHODS.UNLINK, + METHODS.PRI, + // TODO(indutny): should we allow it with HTTP? + METHODS.SOURCE + ]; + exports2.METHODS_ICE = [ + METHODS.SOURCE + ]; + exports2.METHODS_RTSP = [ + METHODS.OPTIONS, + METHODS.DESCRIBE, + METHODS.ANNOUNCE, + METHODS.SETUP, + METHODS.PLAY, + METHODS.PAUSE, + METHODS.TEARDOWN, + METHODS.GET_PARAMETER, + METHODS.SET_PARAMETER, + METHODS.REDIRECT, + METHODS.RECORD, + METHODS.FLUSH, + // For AirPlay + METHODS.GET, + METHODS.POST + ]; + exports2.METHOD_MAP = utils_1.enumToMap(METHODS); + exports2.H_METHOD_MAP = {}; + Object.keys(exports2.METHOD_MAP).forEach((key) => { + if (/^H/.test(key)) { + exports2.H_METHOD_MAP[key] = exports2.METHOD_MAP[key]; + } + }); + var FINISH; + (function(FINISH2) { + FINISH2[FINISH2["SAFE"] = 0] = "SAFE"; + FINISH2[FINISH2["SAFE_WITH_CB"] = 1] = "SAFE_WITH_CB"; + FINISH2[FINISH2["UNSAFE"] = 2] = "UNSAFE"; + })(FINISH = exports2.FINISH || (exports2.FINISH = {})); + exports2.ALPHA = []; + for (let i = "A".charCodeAt(0); i <= "Z".charCodeAt(0); i++) { + exports2.ALPHA.push(String.fromCharCode(i)); + exports2.ALPHA.push(String.fromCharCode(i + 32)); + } + exports2.NUM_MAP = { + 0: 0, + 1: 1, + 2: 2, + 3: 3, + 4: 4, + 5: 5, + 6: 6, + 7: 7, + 8: 8, + 9: 9 + }; + exports2.HEX_MAP = { + 0: 0, + 1: 1, + 2: 2, + 3: 3, + 4: 4, + 5: 5, + 6: 6, + 7: 7, + 8: 8, + 9: 9, + A: 10, + B: 11, + C: 12, + D: 13, + E: 14, + F: 15, + a: 10, + b: 11, + c: 12, + d: 13, + e: 14, + f: 15 + }; + exports2.NUM = [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" + ]; + exports2.ALPHANUM = exports2.ALPHA.concat(exports2.NUM); + exports2.MARK = ["-", "_", ".", "!", "~", "*", "'", "(", ")"]; + exports2.USERINFO_CHARS = exports2.ALPHANUM.concat(exports2.MARK).concat(["%", ";", ":", "&", "=", "+", "$", ","]); + exports2.STRICT_URL_CHAR = [ + "!", + '"', + "$", + "%", + "&", + "'", + "(", + ")", + "*", + "+", + ",", + "-", + ".", + "/", + ":", + ";", + "<", + "=", + ">", + "@", + "[", + "\\", + "]", + "^", + "_", + "`", + "{", + "|", + "}", + "~" + ].concat(exports2.ALPHANUM); + exports2.URL_CHAR = exports2.STRICT_URL_CHAR.concat([" ", "\f"]); + for (let i = 128; i <= 255; i++) { + exports2.URL_CHAR.push(i); + } + exports2.HEX = exports2.NUM.concat(["a", "b", "c", "d", "e", "f", "A", "B", "C", "D", "E", "F"]); + exports2.STRICT_TOKEN = [ + "!", + "#", + "$", + "%", + "&", + "'", + "*", + "+", + "-", + ".", + "^", + "_", + "`", + "|", + "~" + ].concat(exports2.ALPHANUM); + exports2.TOKEN = exports2.STRICT_TOKEN.concat([" "]); + exports2.HEADER_CHARS = [" "]; + for (let i = 32; i <= 255; i++) { + if (i !== 127) { + exports2.HEADER_CHARS.push(i); + } + } + exports2.CONNECTION_TOKEN_CHARS = exports2.HEADER_CHARS.filter((c) => c !== 44); + exports2.MAJOR = exports2.NUM_MAP; + exports2.MINOR = exports2.MAJOR; + var HEADER_STATE; + (function(HEADER_STATE2) { + HEADER_STATE2[HEADER_STATE2["GENERAL"] = 0] = "GENERAL"; + HEADER_STATE2[HEADER_STATE2["CONNECTION"] = 1] = "CONNECTION"; + HEADER_STATE2[HEADER_STATE2["CONTENT_LENGTH"] = 2] = "CONTENT_LENGTH"; + HEADER_STATE2[HEADER_STATE2["TRANSFER_ENCODING"] = 3] = "TRANSFER_ENCODING"; + HEADER_STATE2[HEADER_STATE2["UPGRADE"] = 4] = "UPGRADE"; + HEADER_STATE2[HEADER_STATE2["CONNECTION_KEEP_ALIVE"] = 5] = "CONNECTION_KEEP_ALIVE"; + HEADER_STATE2[HEADER_STATE2["CONNECTION_CLOSE"] = 6] = "CONNECTION_CLOSE"; + HEADER_STATE2[HEADER_STATE2["CONNECTION_UPGRADE"] = 7] = "CONNECTION_UPGRADE"; + HEADER_STATE2[HEADER_STATE2["TRANSFER_ENCODING_CHUNKED"] = 8] = "TRANSFER_ENCODING_CHUNKED"; + })(HEADER_STATE = exports2.HEADER_STATE || (exports2.HEADER_STATE = {})); + exports2.SPECIAL_HEADERS = { + "connection": HEADER_STATE.CONNECTION, + "content-length": HEADER_STATE.CONTENT_LENGTH, + "proxy-connection": HEADER_STATE.CONNECTION, + "transfer-encoding": HEADER_STATE.TRANSFER_ENCODING, + "upgrade": HEADER_STATE.UPGRADE + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/llhttp/llhttp-wasm.js +var require_llhttp_wasm = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/llhttp/llhttp-wasm.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { Buffer: Buffer2 } = require("buffer"); + module2.exports = Buffer2.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVuaWVudF9oZWFkZXJzACEhbGxodHRwX3NldF9sZW5pZW50X2NodW5rZWRfbGVuZ3RoACIdbGxodHRwX3NldF9sZW5pZW50X2tlZXBfYWxpdmUAIyRsbGh0dHBfc2V0X2xlbmllbnRfdHJhbnNmZXJfZW5jb2RpbmcAJBhsbGh0dHBfbWVzc2FnZV9uZWVkc19lb2YALgkXAQBBAQsRAQIDBAUKBgcrLSwqKSglJyYK07MCLBYAQYjQACgCAARAAAtBiNAAQQE2AgALFAAgABAwIAAgAjYCOCAAIAE6ACgLFAAgACAALwEyIAAtAC4gABAvEAALHgEBf0HAABAyIgEQMCABQYAINgI4IAEgADoAKCABC48MAQd/AkAgAEUNACAAQQhrIgEgAEEEaygCACIAQXhxIgRqIQUCQCAAQQFxDQAgAEEDcUUNASABIAEoAgAiAGsiAUGc0AAoAgBJDQEgACAEaiEEAkACQEGg0AAoAgAgAUcEQCAAQf8BTQRAIABBA3YhAyABKAIIIgAgASgCDCICRgRAQYzQAEGM0AAoAgBBfiADd3E2AgAMBQsgAiAANgIIIAAgAjYCDAwECyABKAIYIQYgASABKAIMIgBHBEAgACABKAIIIgI2AgggAiAANgIMDAMLIAFBFGoiAygCACICRQRAIAEoAhAiAkUNAiABQRBqIQMLA0AgAyEHIAIiAEEUaiIDKAIAIgINACAAQRBqIQMgACgCECICDQALIAdBADYCAAwCCyAFKAIEIgBBA3FBA0cNAiAFIABBfnE2AgRBlNAAIAQ2AgAgBSAENgIAIAEgBEEBcjYCBAwDC0EAIQALIAZFDQACQCABKAIcIgJBAnRBvNIAaiIDKAIAIAFGBEAgAyAANgIAIAANAUGQ0ABBkNAAKAIAQX4gAndxNgIADAILIAZBEEEUIAYoAhAgAUYbaiAANgIAIABFDQELIAAgBjYCGCABKAIQIgIEQCAAIAI2AhAgAiAANgIYCyABQRRqKAIAIgJFDQAgAEEUaiACNgIAIAIgADYCGAsgASAFTw0AIAUoAgQiAEEBcUUNAAJAAkACQAJAIABBAnFFBEBBpNAAKAIAIAVGBEBBpNAAIAE2AgBBmNAAQZjQACgCACAEaiIANgIAIAEgAEEBcjYCBCABQaDQACgCAEcNBkGU0ABBADYCAEGg0ABBADYCAAwGC0Gg0AAoAgAgBUYEQEGg0AAgATYCAEGU0ABBlNAAKAIAIARqIgA2AgAgASAAQQFyNgIEIAAgAWogADYCAAwGCyAAQXhxIARqIQQgAEH/AU0EQCAAQQN2IQMgBSgCCCIAIAUoAgwiAkYEQEGM0ABBjNAAKAIAQX4gA3dxNgIADAULIAIgADYCCCAAIAI2AgwMBAsgBSgCGCEGIAUgBSgCDCIARwRAQZzQACgCABogACAFKAIIIgI2AgggAiAANgIMDAMLIAVBFGoiAygCACICRQRAIAUoAhAiAkUNAiAFQRBqIQMLA0AgAyEHIAIiAEEUaiIDKAIAIgINACAAQRBqIQMgACgCECICDQALIAdBADYCAAwCCyAFIABBfnE2AgQgASAEaiAENgIAIAEgBEEBcjYCBAwDC0EAIQALIAZFDQACQCAFKAIcIgJBAnRBvNIAaiIDKAIAIAVGBEAgAyAANgIAIAANAUGQ0ABBkNAAKAIAQX4gAndxNgIADAILIAZBEEEUIAYoAhAgBUYbaiAANgIAIABFDQELIAAgBjYCGCAFKAIQIgIEQCAAIAI2AhAgAiAANgIYCyAFQRRqKAIAIgJFDQAgAEEUaiACNgIAIAIgADYCGAsgASAEaiAENgIAIAEgBEEBcjYCBCABQaDQACgCAEcNAEGU0AAgBDYCAAwBCyAEQf8BTQRAIARBeHFBtNAAaiEAAn9BjNAAKAIAIgJBASAEQQN2dCIDcUUEQEGM0AAgAiADcjYCACAADAELIAAoAggLIgIgATYCDCAAIAE2AgggASAANgIMIAEgAjYCCAwBC0EfIQIgBEH///8HTQRAIARBJiAEQQh2ZyIAa3ZBAXEgAEEBdGtBPmohAgsgASACNgIcIAFCADcCECACQQJ0QbzSAGohAAJAQZDQACgCACIDQQEgAnQiB3FFBEAgACABNgIAQZDQACADIAdyNgIAIAEgADYCGCABIAE2AgggASABNgIMDAELIARBGSACQQF2a0EAIAJBH0cbdCECIAAoAgAhAAJAA0AgACIDKAIEQXhxIARGDQEgAkEddiEAIAJBAXQhAiADIABBBHFqQRBqIgcoAgAiAA0ACyAHIAE2AgAgASADNgIYIAEgATYCDCABIAE2AggMAQsgAygCCCIAIAE2AgwgAyABNgIIIAFBADYCGCABIAM2AgwgASAANgIIC0Gs0ABBrNAAKAIAQQFrIgBBfyAAGzYCAAsLBwAgAC0AKAsHACAALQAqCwcAIAAtACsLBwAgAC0AKQsHACAALwEyCwcAIAAtAC4LQAEEfyAAKAIYIQEgAC0ALSECIAAtACghAyAAKAI4IQQgABAwIAAgBDYCOCAAIAM6ACggACACOgAtIAAgATYCGAu74gECB38DfiABIAJqIQQCQCAAIgIoAgwiAA0AIAIoAgQEQCACIAE2AgQLIwBBEGsiCCQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAIoAhwiA0EBaw7dAdoBAdkBAgMEBQYHCAkKCwwNDtgBDxDXARES1gETFBUWFxgZGhvgAd8BHB0e1QEfICEiIyQl1AEmJygpKiss0wHSAS0u0QHQAS8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRtsBR0hJSs8BzgFLzQFMzAFNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBywHKAbgByQG5AcgBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgEA3AELQQAMxgELQQ4MxQELQQ0MxAELQQ8MwwELQRAMwgELQRMMwQELQRQMwAELQRUMvwELQRYMvgELQRgMvQELQRkMvAELQRoMuwELQRsMugELQRwMuQELQR0MuAELQQgMtwELQR4MtgELQSAMtQELQR8MtAELQQcMswELQSEMsgELQSIMsQELQSMMsAELQSQMrwELQRIMrgELQREMrQELQSUMrAELQSYMqwELQScMqgELQSgMqQELQcMBDKgBC0EqDKcBC0ErDKYBC0EsDKUBC0EtDKQBC0EuDKMBC0EvDKIBC0HEAQyhAQtBMAygAQtBNAyfAQtBDAyeAQtBMQydAQtBMgycAQtBMwybAQtBOQyaAQtBNQyZAQtBxQEMmAELQQsMlwELQToMlgELQTYMlQELQQoMlAELQTcMkwELQTgMkgELQTwMkQELQTsMkAELQT0MjwELQQkMjgELQSkMjQELQT4MjAELQT8MiwELQcAADIoBC0HBAAyJAQtBwgAMiAELQcMADIcBC0HEAAyGAQtBxQAMhQELQcYADIQBC0EXDIMBC0HHAAyCAQtByAAMgQELQckADIABC0HKAAx/C0HLAAx+C0HNAAx9C0HMAAx8C0HOAAx7C0HPAAx6C0HQAAx5C0HRAAx4C0HSAAx3C0HTAAx2C0HUAAx1C0HWAAx0C0HVAAxzC0EGDHILQdcADHELQQUMcAtB2AAMbwtBBAxuC0HZAAxtC0HaAAxsC0HbAAxrC0HcAAxqC0EDDGkLQd0ADGgLQd4ADGcLQd8ADGYLQeEADGULQeAADGQLQeIADGMLQeMADGILQQIMYQtB5AAMYAtB5QAMXwtB5gAMXgtB5wAMXQtB6AAMXAtB6QAMWwtB6gAMWgtB6wAMWQtB7AAMWAtB7QAMVwtB7gAMVgtB7wAMVQtB8AAMVAtB8QAMUwtB8gAMUgtB8wAMUQtB9AAMUAtB9QAMTwtB9gAMTgtB9wAMTQtB+AAMTAtB+QAMSwtB+gAMSgtB+wAMSQtB/AAMSAtB/QAMRwtB/gAMRgtB/wAMRQtBgAEMRAtBgQEMQwtBggEMQgtBgwEMQQtBhAEMQAtBhQEMPwtBhgEMPgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADDsYBAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHyAhIyUmKCorLC8wMTIzNDU2Nzk6Ozw9lANAQkRFRklLTk9QUVJTVFVWWFpbXF1eX2BhYmNkZWZnaGpsb3Bxc3V2eHl6e3x/gAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAccByAHJAcsBzAHNAc4BzwGKA4kDiAOHA4QDgwOAA/sC+gL5AvgC9wL0AvMC8gLLAsECsALZAQsgASAERw3wAkHdASEDDLMDCyABIARHDcgBQcMBIQMMsgMLIAEgBEcNe0H3ACEDDLEDCyABIARHDXBB7wAhAwywAwsgASAERw1pQeoAIQMMrwMLIAEgBEcNZUHoACEDDK4DCyABIARHDWJB5gAhAwytAwsgASAERw0aQRghAwysAwsgASAERw0VQRIhAwyrAwsgASAERw1CQcUAIQMMqgMLIAEgBEcNNEE/IQMMqQMLIAEgBEcNMkE8IQMMqAMLIAEgBEcNK0ExIQMMpwMLIAItAC5BAUYNnwMMwQILQQAhAAJAAkACQCACLQAqRQ0AIAItACtFDQAgAi8BMCIDQQJxRQ0BDAILIAIvATAiA0EBcUUNAQtBASEAIAItAChBAUYNACACLwEyIgVB5ABrQeQASQ0AIAVBzAFGDQAgBUGwAkYNACADQcAAcQ0AQQAhACADQYgEcUGABEYNACADQShxQQBHIQALIAJBADsBMCACQQA6AC8gAEUN3wIgAkIANwMgDOACC0EAIQACQCACKAI4IgNFDQAgAygCLCIDRQ0AIAIgAxEAACEACyAARQ3MASAAQRVHDd0CIAJBBDYCHCACIAE2AhQgAkGwGDYCECACQRU2AgxBACEDDKQDCyABIARGBEBBBiEDDKQDCyABQQFqIQFBACEAAkAgAigCOCIDRQ0AIAMoAlQiA0UNACACIAMRAAAhAAsgAA3ZAgwcCyACQgA3AyBBEiEDDIkDCyABIARHDRZBHSEDDKEDCyABIARHBEAgAUEBaiEBQRAhAwyIAwtBByEDDKADCyACIAIpAyAiCiAEIAFrrSILfSIMQgAgCiAMWhs3AyAgCiALWA3UAkEIIQMMnwMLIAEgBEcEQCACQQk2AgggAiABNgIEQRQhAwyGAwtBCSEDDJ4DCyACKQMgQgBSDccBIAIgAi8BMEGAAXI7ATAMQgsgASAERw0/QdAAIQMMnAMLIAEgBEYEQEELIQMMnAMLIAFBAWohAUEAIQACQCACKAI4IgNFDQAgAygCUCIDRQ0AIAIgAxEAACEACyAADc8CDMYBC0EAIQACQCACKAI4IgNFDQAgAygCSCIDRQ0AIAIgAxEAACEACyAARQ3GASAAQRVHDc0CIAJBCzYCHCACIAE2AhQgAkGCGTYCECACQRU2AgxBACEDDJoDC0EAIQACQCACKAI4IgNFDQAgAygCSCIDRQ0AIAIgAxEAACEACyAARQ0MIABBFUcNygIgAkEaNgIcIAIgATYCFCACQYIZNgIQIAJBFTYCDEEAIQMMmQMLQQAhAAJAIAIoAjgiA0UNACADKAJMIgNFDQAgAiADEQAAIQALIABFDcQBIABBFUcNxwIgAkELNgIcIAIgATYCFCACQZEXNgIQIAJBFTYCDEEAIQMMmAMLIAEgBEYEQEEPIQMMmAMLIAEtAAAiAEE7Rg0HIABBDUcNxAIgAUEBaiEBDMMBC0EAIQACQCACKAI4IgNFDQAgAygCTCIDRQ0AIAIgAxEAACEACyAARQ3DASAAQRVHDcICIAJBDzYCHCACIAE2AhQgAkGRFzYCECACQRU2AgxBACEDDJYDCwNAIAEtAABB8DVqLQAAIgBBAUcEQCAAQQJHDcECIAIoAgQhAEEAIQMgAkEANgIEIAIgACABQQFqIgEQLSIADcICDMUBCyAEIAFBAWoiAUcNAAtBEiEDDJUDC0EAIQACQCACKAI4IgNFDQAgAygCTCIDRQ0AIAIgAxEAACEACyAARQ3FASAAQRVHDb0CIAJBGzYCHCACIAE2AhQgAkGRFzYCECACQRU2AgxBACEDDJQDCyABIARGBEBBFiEDDJQDCyACQQo2AgggAiABNgIEQQAhAAJAIAIoAjgiA0UNACADKAJIIgNFDQAgAiADEQAAIQALIABFDcIBIABBFUcNuQIgAkEVNgIcIAIgATYCFCACQYIZNgIQIAJBFTYCDEEAIQMMkwMLIAEgBEcEQANAIAEtAABB8DdqLQAAIgBBAkcEQAJAIABBAWsOBMQCvQIAvgK9AgsgAUEBaiEBQQghAwz8AgsgBCABQQFqIgFHDQALQRUhAwyTAwtBFSEDDJIDCwNAIAEtAABB8DlqLQAAIgBBAkcEQCAAQQFrDgTFArcCwwK4ArcCCyAEIAFBAWoiAUcNAAtBGCEDDJEDCyABIARHBEAgAkELNgIIIAIgATYCBEEHIQMM+AILQRkhAwyQAwsgAUEBaiEBDAILIAEgBEYEQEEaIQMMjwMLAkAgAS0AAEENaw4UtQG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwEAvwELQQAhAyACQQA2AhwgAkGvCzYCECACQQI2AgwgAiABQQFqNgIUDI4DCyABIARGBEBBGyEDDI4DCyABLQAAIgBBO0cEQCAAQQ1HDbECIAFBAWohAQy6AQsgAUEBaiEBC0EiIQMM8wILIAEgBEYEQEEcIQMMjAMLQgAhCgJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAS0AAEEwaw43wQLAAgABAgMEBQYH0AHQAdAB0AHQAdAB0AEICQoLDA3QAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdABDg8QERIT0AELQgIhCgzAAgtCAyEKDL8CC0IEIQoMvgILQgUhCgy9AgtCBiEKDLwCC0IHIQoMuwILQgghCgy6AgtCCSEKDLkCC0IKIQoMuAILQgshCgy3AgtCDCEKDLYCC0INIQoMtQILQg4hCgy0AgtCDyEKDLMCC0IKIQoMsgILQgshCgyxAgtCDCEKDLACC0INIQoMrwILQg4hCgyuAgtCDyEKDK0CC0IAIQoCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEtAABBMGsON8ACvwIAAQIDBAUGB74CvgK+Ar4CvgK+Ar4CCAkKCwwNvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ag4PEBESE74CC0ICIQoMvwILQgMhCgy+AgtCBCEKDL0CC0IFIQoMvAILQgYhCgy7AgtCByEKDLoCC0IIIQoMuQILQgkhCgy4AgtCCiEKDLcCC0ILIQoMtgILQgwhCgy1AgtCDSEKDLQCC0IOIQoMswILQg8hCgyyAgtCCiEKDLECC0ILIQoMsAILQgwhCgyvAgtCDSEKDK4CC0IOIQoMrQILQg8hCgysAgsgAiACKQMgIgogBCABa60iC30iDEIAIAogDFobNwMgIAogC1gNpwJBHyEDDIkDCyABIARHBEAgAkEJNgIIIAIgATYCBEElIQMM8AILQSAhAwyIAwtBASEFIAIvATAiA0EIcUUEQCACKQMgQgBSIQULAkAgAi0ALgRAQQEhACACLQApQQVGDQEgA0HAAHFFIAVxRQ0BC0EAIQAgA0HAAHENAEECIQAgA0EIcQ0AIANBgARxBEACQCACLQAoQQFHDQAgAi0ALUEKcQ0AQQUhAAwCC0EEIQAMAQsgA0EgcUUEQAJAIAItAChBAUYNACACLwEyIgBB5ABrQeQASQ0AIABBzAFGDQAgAEGwAkYNAEEEIQAgA0EocUUNAiADQYgEcUGABEYNAgtBACEADAELQQBBAyACKQMgUBshAAsgAEEBaw4FvgIAsAEBpAKhAgtBESEDDO0CCyACQQE6AC8MhAMLIAEgBEcNnQJBJCEDDIQDCyABIARHDRxBxgAhAwyDAwtBACEAAkAgAigCOCIDRQ0AIAMoAkQiA0UNACACIAMRAAAhAAsgAEUNJyAAQRVHDZgCIAJB0AA2AhwgAiABNgIUIAJBkRg2AhAgAkEVNgIMQQAhAwyCAwsgASAERgRAQSghAwyCAwtBACEDIAJBADYCBCACQQw2AgggAiABIAEQKiIARQ2UAiACQSc2AhwgAiABNgIUIAIgADYCDAyBAwsgASAERgRAQSkhAwyBAwsgAS0AACIAQSBGDRMgAEEJRw2VAiABQQFqIQEMFAsgASAERwRAIAFBAWohAQwWC0EqIQMM/wILIAEgBEYEQEErIQMM/wILIAEtAAAiAEEJRyAAQSBHcQ2QAiACLQAsQQhHDd0CIAJBADoALAzdAgsgASAERgRAQSwhAwz+AgsgAS0AAEEKRw2OAiABQQFqIQEMsAELIAEgBEcNigJBLyEDDPwCCwNAIAEtAAAiAEEgRwRAIABBCmsOBIQCiAKIAoQChgILIAQgAUEBaiIBRw0AC0ExIQMM+wILQTIhAyABIARGDfoCIAIoAgAiACAEIAFraiEHIAEgAGtBA2ohBgJAA0AgAEHwO2otAAAgAS0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDQEgAEEDRgRAQQYhAQziAgsgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAc2AgAM+wILIAJBADYCAAyGAgtBMyEDIAQgASIARg35AiAEIAFrIAIoAgAiAWohByAAIAFrQQhqIQYCQANAIAFB9DtqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBCEYEQEEFIQEM4QILIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADPoCCyACQQA2AgAgACEBDIUCC0E0IQMgBCABIgBGDfgCIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgJAA0AgAUHQwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBBUYEQEEHIQEM4AILIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADPkCCyACQQA2AgAgACEBDIQCCyABIARHBEADQCABLQAAQYA+ai0AACIAQQFHBEAgAEECRg0JDIECCyAEIAFBAWoiAUcNAAtBMCEDDPgCC0EwIQMM9wILIAEgBEcEQANAIAEtAAAiAEEgRwRAIABBCmsOBP8B/gH+Af8B/gELIAQgAUEBaiIBRw0AC0E4IQMM9wILQTghAwz2AgsDQCABLQAAIgBBIEcgAEEJR3EN9gEgBCABQQFqIgFHDQALQTwhAwz1AgsDQCABLQAAIgBBIEcEQAJAIABBCmsOBPkBBAT5AQALIABBLEYN9QEMAwsgBCABQQFqIgFHDQALQT8hAwz0AgtBwAAhAyABIARGDfMCIAIoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAEGAQGstAAAgAS0AAEEgckcNASAAQQZGDdsCIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPQCCyACQQA2AgALQTYhAwzZAgsgASAERgRAQcEAIQMM8gILIAJBDDYCCCACIAE2AgQgAi0ALEEBaw4E+wHuAewB6wHUAgsgAUEBaiEBDPoBCyABIARHBEADQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxIgBBCUYNACAAQSBGDQACQAJAAkACQCAAQeMAaw4TAAMDAwMDAwMBAwMDAwMDAwMDAgMLIAFBAWohAUExIQMM3AILIAFBAWohAUEyIQMM2wILIAFBAWohAUEzIQMM2gILDP4BCyAEIAFBAWoiAUcNAAtBNSEDDPACC0E1IQMM7wILIAEgBEcEQANAIAEtAABBgDxqLQAAQQFHDfcBIAQgAUEBaiIBRw0AC0E9IQMM7wILQT0hAwzuAgtBACEAAkAgAigCOCIDRQ0AIAMoAkAiA0UNACACIAMRAAAhAAsgAEUNASAAQRVHDeYBIAJBwgA2AhwgAiABNgIUIAJB4xg2AhAgAkEVNgIMQQAhAwztAgsgAUEBaiEBC0E8IQMM0gILIAEgBEYEQEHCACEDDOsCCwJAA0ACQCABLQAAQQlrDhgAAswCzALRAswCzALMAswCzALMAswCzALMAswCzALMAswCzALMAswCzALMAgDMAgsgBCABQQFqIgFHDQALQcIAIQMM6wILIAFBAWohASACLQAtQQFxRQ3+AQtBLCEDDNACCyABIARHDd4BQcQAIQMM6AILA0AgAS0AAEGQwABqLQAAQQFHDZwBIAQgAUEBaiIBRw0AC0HFACEDDOcCCyABLQAAIgBBIEYN/gEgAEE6Rw3AAiACKAIEIQBBACEDIAJBADYCBCACIAAgARApIgAN3gEM3QELQccAIQMgBCABIgBGDeUCIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgNAIAFBkMIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNvwIgAUEFRg3CAiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBzYCAAzlAgtByAAhAyAEIAEiAEYN5AIgBCABayACKAIAIgFqIQcgACABa0EJaiEGA0AgAUGWwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw2+AkECIAFBCUYNwgIaIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADOQCCyABIARGBEBByQAhAwzkAgsCQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxQe4Aaw4HAL8CvwK/Ar8CvwIBvwILIAFBAWohAUE+IQMMywILIAFBAWohAUE/IQMMygILQcoAIQMgBCABIgBGDeICIAQgAWsgAigCACIBaiEGIAAgAWtBAWohBwNAIAFBoMIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNvAIgAUEBRg2+AiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBjYCAAziAgtBywAhAyAEIAEiAEYN4QIgBCABayACKAIAIgFqIQcgACABa0EOaiEGA0AgAUGiwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw27AiABQQ5GDb4CIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADOECC0HMACEDIAQgASIARg3gAiAEIAFrIAIoAgAiAWohByAAIAFrQQ9qIQYDQCABQcDCAGotAAAgAC0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDboCQQMgAUEPRg2+AhogAUEBaiEBIAQgAEEBaiIARw0ACyACIAc2AgAM4AILQc0AIQMgBCABIgBGDd8CIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgNAIAFB0MIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNuQJBBCABQQVGDb0CGiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBzYCAAzfAgsgASAERgRAQc4AIQMM3wILAkACQAJAAkAgAS0AACIAQSByIAAgAEHBAGtB/wFxQRpJG0H/AXFB4wBrDhMAvAK8ArwCvAK8ArwCvAK8ArwCvAK8ArwCAbwCvAK8AgIDvAILIAFBAWohAUHBACEDDMgCCyABQQFqIQFBwgAhAwzHAgsgAUEBaiEBQcMAIQMMxgILIAFBAWohAUHEACEDDMUCCyABIARHBEAgAkENNgIIIAIgATYCBEHFACEDDMUCC0HPACEDDN0CCwJAAkAgAS0AAEEKaw4EAZABkAEAkAELIAFBAWohAQtBKCEDDMMCCyABIARGBEBB0QAhAwzcAgsgAS0AAEEgRw0AIAFBAWohASACLQAtQQFxRQ3QAQtBFyEDDMECCyABIARHDcsBQdIAIQMM2QILQdMAIQMgASAERg3YAiACKAIAIgAgBCABa2ohBiABIABrQQFqIQUDQCABLQAAIABB1sIAai0AAEcNxwEgAEEBRg3KASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBjYCAAzYAgsgASAERgRAQdUAIQMM2AILIAEtAABBCkcNwgEgAUEBaiEBDMoBCyABIARGBEBB1gAhAwzXAgsCQAJAIAEtAABBCmsOBADDAcMBAcMBCyABQQFqIQEMygELIAFBAWohAUHKACEDDL0CC0EAIQACQCACKAI4IgNFDQAgAygCPCIDRQ0AIAIgAxEAACEACyAADb8BQc0AIQMMvAILIAItAClBIkYNzwIMiQELIAQgASIFRgRAQdsAIQMM1AILQQAhAEEBIQFBASEGQQAhAwJAAn8CQAJAAkACQAJAAkACQCAFLQAAQTBrDgrFAcQBAAECAwQFBgjDAQtBAgwGC0EDDAULQQQMBAtBBQwDC0EGDAILQQcMAQtBCAshA0EAIQFBACEGDL0BC0EJIQNBASEAQQAhAUEAIQYMvAELIAEgBEYEQEHdACEDDNMCCyABLQAAQS5HDbgBIAFBAWohAQyIAQsgASAERw22AUHfACEDDNECCyABIARHBEAgAkEONgIIIAIgATYCBEHQACEDDLgCC0HgACEDDNACC0HhACEDIAEgBEYNzwIgAigCACIAIAQgAWtqIQUgASAAa0EDaiEGA0AgAS0AACAAQeLCAGotAABHDbEBIABBA0YNswEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMzwILQeIAIQMgASAERg3OAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYDQCABLQAAIABB5sIAai0AAEcNsAEgAEECRg2vASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAzOAgtB4wAhAyABIARGDc0CIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgNAIAEtAAAgAEHpwgBqLQAARw2vASAAQQNGDa0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADM0CCyABIARGBEBB5QAhAwzNAgsgAUEBaiEBQQAhAAJAIAIoAjgiA0UNACADKAIwIgNFDQAgAiADEQAAIQALIAANqgFB1gAhAwyzAgsgASAERwRAA0AgAS0AACIAQSBHBEACQAJAAkAgAEHIAGsOCwABswGzAbMBswGzAbMBswGzAQKzAQsgAUEBaiEBQdIAIQMMtwILIAFBAWohAUHTACEDDLYCCyABQQFqIQFB1AAhAwy1AgsgBCABQQFqIgFHDQALQeQAIQMMzAILQeQAIQMMywILA0AgAS0AAEHwwgBqLQAAIgBBAUcEQCAAQQJrDgOnAaYBpQGkAQsgBCABQQFqIgFHDQALQeYAIQMMygILIAFBAWogASAERw0CGkHnACEDDMkCCwNAIAEtAABB8MQAai0AACIAQQFHBEACQCAAQQJrDgSiAaEBoAEAnwELQdcAIQMMsQILIAQgAUEBaiIBRw0AC0HoACEDDMgCCyABIARGBEBB6QAhAwzIAgsCQCABLQAAIgBBCmsOGrcBmwGbAbQBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBpAGbAZsBAJkBCyABQQFqCyEBQQYhAwytAgsDQCABLQAAQfDGAGotAABBAUcNfSAEIAFBAWoiAUcNAAtB6gAhAwzFAgsgAUEBaiABIARHDQIaQesAIQMMxAILIAEgBEYEQEHsACEDDMQCCyABQQFqDAELIAEgBEYEQEHtACEDDMMCCyABQQFqCyEBQQQhAwyoAgsgASAERgRAQe4AIQMMwQILAkACQAJAIAEtAABB8MgAai0AAEEBaw4HkAGPAY4BAHwBAo0BCyABQQFqIQEMCwsgAUEBagyTAQtBACEDIAJBADYCHCACQZsSNgIQIAJBBzYCDCACIAFBAWo2AhQMwAILAkADQCABLQAAQfDIAGotAAAiAEEERwRAAkACQCAAQQFrDgeUAZMBkgGNAQAEAY0BC0HaACEDDKoCCyABQQFqIQFB3AAhAwypAgsgBCABQQFqIgFHDQALQe8AIQMMwAILIAFBAWoMkQELIAQgASIARgRAQfAAIQMMvwILIAAtAABBL0cNASAAQQFqIQEMBwsgBCABIgBGBEBB8QAhAwy+AgsgAC0AACIBQS9GBEAgAEEBaiEBQd0AIQMMpQILIAFBCmsiA0EWSw0AIAAhAUEBIAN0QYmAgAJxDfkBC0EAIQMgAkEANgIcIAIgADYCFCACQYwcNgIQIAJBBzYCDAy8AgsgASAERwRAIAFBAWohAUHeACEDDKMCC0HyACEDDLsCCyABIARGBEBB9AAhAwy7AgsCQCABLQAAQfDMAGotAABBAWsOA/cBcwCCAQtB4QAhAwyhAgsgASAERwRAA0AgAS0AAEHwygBqLQAAIgBBA0cEQAJAIABBAWsOAvkBAIUBC0HfACEDDKMCCyAEIAFBAWoiAUcNAAtB8wAhAwy6AgtB8wAhAwy5AgsgASAERwRAIAJBDzYCCCACIAE2AgRB4AAhAwygAgtB9QAhAwy4AgsgASAERgRAQfYAIQMMuAILIAJBDzYCCCACIAE2AgQLQQMhAwydAgsDQCABLQAAQSBHDY4CIAQgAUEBaiIBRw0AC0H3ACEDDLUCCyABIARGBEBB+AAhAwy1AgsgAS0AAEEgRw16IAFBAWohAQxbC0EAIQACQCACKAI4IgNFDQAgAygCOCIDRQ0AIAIgAxEAACEACyAADXgMgAILIAEgBEYEQEH6ACEDDLMCCyABLQAAQcwARw10IAFBAWohAUETDHYLQfsAIQMgASAERg2xAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYDQCABLQAAIABB8M4Aai0AAEcNcyAAQQVGDXUgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMsQILIAEgBEYEQEH8ACEDDLECCwJAAkAgAS0AAEHDAGsODAB0dHR0dHR0dHR0AXQLIAFBAWohAUHmACEDDJgCCyABQQFqIQFB5wAhAwyXAgtB/QAhAyABIARGDa8CIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQe3PAGotAABHDXIgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADLACCyACQQA2AgAgBkEBaiEBQRAMcwtB/gAhAyABIARGDa4CIAIoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQfbOAGotAABHDXEgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADK8CCyACQQA2AgAgBkEBaiEBQRYMcgtB/wAhAyABIARGDa0CIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQfzOAGotAABHDXAgAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADK4CCyACQQA2AgAgBkEBaiEBQQUMcQsgASAERgRAQYABIQMMrQILIAEtAABB2QBHDW4gAUEBaiEBQQgMcAsgASAERgRAQYEBIQMMrAILAkACQCABLQAAQc4Aaw4DAG8BbwsgAUEBaiEBQesAIQMMkwILIAFBAWohAUHsACEDDJICCyABIARGBEBBggEhAwyrAgsCQAJAIAEtAABByABrDggAbm5ubm5uAW4LIAFBAWohAUHqACEDDJICCyABQQFqIQFB7QAhAwyRAgtBgwEhAyABIARGDakCIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQYDPAGotAABHDWwgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADKoCCyACQQA2AgAgBkEBaiEBQQAMbQtBhAEhAyABIARGDagCIAIoAgAiACAEIAFraiEFIAEgAGtBBGohBgJAA0AgAS0AACAAQYPPAGotAABHDWsgAEEERg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADKkCCyACQQA2AgAgBkEBaiEBQSMMbAsgASAERgRAQYUBIQMMqAILAkACQCABLQAAQcwAaw4IAGtra2trawFrCyABQQFqIQFB7wAhAwyPAgsgAUEBaiEBQfAAIQMMjgILIAEgBEYEQEGGASEDDKcCCyABLQAAQcUARw1oIAFBAWohAQxgC0GHASEDIAEgBEYNpQIgAigCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBiM8Aai0AAEcNaCAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMpgILIAJBADYCACAGQQFqIQFBLQxpC0GIASEDIAEgBEYNpAIgAigCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABB0M8Aai0AAEcNZyAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMpQILIAJBADYCACAGQQFqIQFBKQxoCyABIARGBEBBiQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEVDF8LQZIBIQMgASAERg2aAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGhzwBqLQAARw1dIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAybAgsgAkEANgIAIAZBAWohAUEeDF4LIAEgBEYEQEGTASEDDJoCCyABLQAAQcwARw1bIAFBAWohAUEKDF0LIAEgBEYEQEGUASEDDJkCCwJAAkAgAS0AAEHBAGsODwBcXFxcXFxcXFxcXFxcAVwLIAFBAWohAUH+ACEDDIACCyABQQFqIQFB/wAhAwz/AQsgASAERgRAQZUBIQMMmAILAkACQCABLQAAQcEAaw4DAFsBWwsgAUEBaiEBQf0AIQMM/wELIAFBAWohAUGAASEDDP4BC0GWASEDIAEgBEYNlgIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBp88Aai0AAEcNWSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlwILIAJBADYCACAGQQFqIQFBCwxaCyABIARGBEBBlwEhAwyWAgsCQAJAAkACQCABLQAAQS1rDiMAW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1sBW1tbW1sCW1tbA1sLIAFBAWohAUH7ACEDDP8BCyABQQFqIQFB/AAhAwz+AQsgAUEBaiEBQYEBIQMM/QELIAFBAWohAUGCASEDDPwBC0GYASEDIAEgBEYNlAIgAigCACIAIAQgAWtqIQUgASAAa0EEaiEGAkADQCABLQAAIABBqc8Aai0AAEcNVyAAQQRGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlQILIAJBADYCACAGQQFqIQFBGQxYC0GZASEDIAEgBEYNkwIgAigCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBrs8Aai0AAEcNViAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlAILIAJBADYCACAGQQFqIQFBBgxXC0GaASEDIAEgBEYNkgIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBtM8Aai0AAEcNVSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMkwILIAJBADYCACAGQQFqIQFBHAxWC0GbASEDIAEgBEYNkQIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBts8Aai0AAEcNVCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMkgILIAJBADYCACAGQQFqIQFBJwxVCyABIARGBEBBnAEhAwyRAgsCQAJAIAEtAABB1ABrDgIAAVQLIAFBAWohAUGGASEDDPgBCyABQQFqIQFBhwEhAwz3AQtBnQEhAyABIARGDY8CIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbjPAGotAABHDVIgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADJACCyACQQA2AgAgBkEBaiEBQSYMUwtBngEhAyABIARGDY4CIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbrPAGotAABHDVEgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI8CCyACQQA2AgAgBkEBaiEBQQMMUgtBnwEhAyABIARGDY0CIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQe3PAGotAABHDVAgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI4CCyACQQA2AgAgBkEBaiEBQQwMUQtBoAEhAyABIARGDYwCIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQbzPAGotAABHDU8gAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI0CCyACQQA2AgAgBkEBaiEBQQ0MUAsgASAERgRAQaEBIQMMjAILAkACQCABLQAAQcYAaw4LAE9PT09PT09PTwFPCyABQQFqIQFBiwEhAwzzAQsgAUEBaiEBQYwBIQMM8gELIAEgBEYEQEGiASEDDIsCCyABLQAAQdAARw1MIAFBAWohAQxGCyABIARGBEBBowEhAwyKAgsCQAJAIAEtAABByQBrDgcBTU1NTU0ATQsgAUEBaiEBQY4BIQMM8QELIAFBAWohAUEiDE0LQaQBIQMgASAERg2IAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHAzwBqLQAARw1LIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyJAgsgAkEANgIAIAZBAWohAUEdDEwLIAEgBEYEQEGlASEDDIgCCwJAAkAgAS0AAEHSAGsOAwBLAUsLIAFBAWohAUGQASEDDO8BCyABQQFqIQFBBAxLCyABIARGBEBBpgEhAwyHAgsCQAJAAkACQAJAIAEtAABBwQBrDhUATU1NTU1NTU1NTQFNTQJNTQNNTQRNCyABQQFqIQFBiAEhAwzxAQsgAUEBaiEBQYkBIQMM8AELIAFBAWohAUGKASEDDO8BCyABQQFqIQFBjwEhAwzuAQsgAUEBaiEBQZEBIQMM7QELQacBIQMgASAERg2FAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHtzwBqLQAARw1IIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyGAgsgAkEANgIAIAZBAWohAUERDEkLQagBIQMgASAERg2EAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHCzwBqLQAARw1HIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyFAgsgAkEANgIAIAZBAWohAUEsDEgLQakBIQMgASAERg2DAiACKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEHFzwBqLQAARw1GIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyEAgsgAkEANgIAIAZBAWohAUErDEcLQaoBIQMgASAERg2CAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHKzwBqLQAARw1FIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyDAgsgAkEANgIAIAZBAWohAUEUDEYLIAEgBEYEQEGrASEDDIICCwJAAkACQAJAIAEtAABBwgBrDg8AAQJHR0dHR0dHR0dHRwNHCyABQQFqIQFBkwEhAwzrAQsgAUEBaiEBQZQBIQMM6gELIAFBAWohAUGVASEDDOkBCyABQQFqIQFBlgEhAwzoAQsgASAERgRAQawBIQMMgQILIAEtAABBxQBHDUIgAUEBaiEBDD0LQa0BIQMgASAERg3/ASACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHNzwBqLQAARw1CIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyAAgsgAkEANgIAIAZBAWohAUEODEMLIAEgBEYEQEGuASEDDP8BCyABLQAAQdAARw1AIAFBAWohAUElDEILQa8BIQMgASAERg39ASACKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEHQzwBqLQAARw1AIABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz+AQsgAkEANgIAIAZBAWohAUEqDEELIAEgBEYEQEGwASEDDP0BCwJAAkAgAS0AAEHVAGsOCwBAQEBAQEBAQEABQAsgAUEBaiEBQZoBIQMM5AELIAFBAWohAUGbASEDDOMBCyABIARGBEBBsQEhAwz8AQsCQAJAIAEtAABBwQBrDhQAPz8/Pz8/Pz8/Pz8/Pz8/Pz8/AT8LIAFBAWohAUGZASEDDOMBCyABQQFqIQFBnAEhAwziAQtBsgEhAyABIARGDfoBIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQdnPAGotAABHDT0gAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPsBCyACQQA2AgAgBkEBaiEBQSEMPgtBswEhAyABIARGDfkBIAIoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAS0AACAAQd3PAGotAABHDTwgAEEGRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPoBCyACQQA2AgAgBkEBaiEBQRoMPQsgASAERgRAQbQBIQMM+QELAkACQAJAIAEtAABBxQBrDhEAPT09PT09PT09AT09PT09Aj0LIAFBAWohAUGdASEDDOEBCyABQQFqIQFBngEhAwzgAQsgAUEBaiEBQZ8BIQMM3wELQbUBIQMgASAERg33ASACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHkzwBqLQAARw06IABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz4AQsgAkEANgIAIAZBAWohAUEoDDsLQbYBIQMgASAERg32ASACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHqzwBqLQAARw05IABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz3AQsgAkEANgIAIAZBAWohAUEHDDoLIAEgBEYEQEG3ASEDDPYBCwJAAkAgAS0AAEHFAGsODgA5OTk5OTk5OTk5OTkBOQsgAUEBaiEBQaEBIQMM3QELIAFBAWohAUGiASEDDNwBC0G4ASEDIAEgBEYN9AEgAigCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABB7c8Aai0AAEcNNyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM9QELIAJBADYCACAGQQFqIQFBEgw4C0G5ASEDIAEgBEYN8wEgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8M8Aai0AAEcNNiAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM9AELIAJBADYCACAGQQFqIQFBIAw3C0G6ASEDIAEgBEYN8gEgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8s8Aai0AAEcNNSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM8wELIAJBADYCACAGQQFqIQFBDww2CyABIARGBEBBuwEhAwzyAQsCQAJAIAEtAABByQBrDgcANTU1NTUBNQsgAUEBaiEBQaUBIQMM2QELIAFBAWohAUGmASEDDNgBC0G8ASEDIAEgBEYN8AEgAigCACIAIAQgAWtqIQUgASAAa0EHaiEGAkADQCABLQAAIABB9M8Aai0AAEcNMyAAQQdGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM8QELIAJBADYCACAGQQFqIQFBGww0CyABIARGBEBBvQEhAwzwAQsCQAJAAkAgAS0AAEHCAGsOEgA0NDQ0NDQ0NDQBNDQ0NDQ0AjQLIAFBAWohAUGkASEDDNgBCyABQQFqIQFBpwEhAwzXAQsgAUEBaiEBQagBIQMM1gELIAEgBEYEQEG+ASEDDO8BCyABLQAAQc4ARw0wIAFBAWohAQwsCyABIARGBEBBvwEhAwzuAQsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABLQAAQcEAaw4VAAECAz8EBQY/Pz8HCAkKCz8MDQ4PPwsgAUEBaiEBQegAIQMM4wELIAFBAWohAUHpACEDDOIBCyABQQFqIQFB7gAhAwzhAQsgAUEBaiEBQfIAIQMM4AELIAFBAWohAUHzACEDDN8BCyABQQFqIQFB9gAhAwzeAQsgAUEBaiEBQfcAIQMM3QELIAFBAWohAUH6ACEDDNwBCyABQQFqIQFBgwEhAwzbAQsgAUEBaiEBQYQBIQMM2gELIAFBAWohAUGFASEDDNkBCyABQQFqIQFBkgEhAwzYAQsgAUEBaiEBQZgBIQMM1wELIAFBAWohAUGgASEDDNYBCyABQQFqIQFBowEhAwzVAQsgAUEBaiEBQaoBIQMM1AELIAEgBEcEQCACQRA2AgggAiABNgIEQasBIQMM1AELQcABIQMM7AELQQAhAAJAIAIoAjgiA0UNACADKAI0IgNFDQAgAiADEQAAIQALIABFDV4gAEEVRw0HIAJB0QA2AhwgAiABNgIUIAJBsBc2AhAgAkEVNgIMQQAhAwzrAQsgAUEBaiABIARHDQgaQcIBIQMM6gELA0ACQCABLQAAQQprDgQIAAALAAsgBCABQQFqIgFHDQALQcMBIQMM6QELIAEgBEcEQCACQRE2AgggAiABNgIEQQEhAwzQAQtBxAEhAwzoAQsgASAERgRAQcUBIQMM6AELAkACQCABLQAAQQprDgQBKCgAKAsgAUEBagwJCyABQQFqDAULIAEgBEYEQEHGASEDDOcBCwJAAkAgAS0AAEEKaw4XAQsLAQsLCwsLCwsLCwsLCwsLCwsLCwALCyABQQFqIQELQbABIQMMzQELIAEgBEYEQEHIASEDDOYBCyABLQAAQSBHDQkgAkEAOwEyIAFBAWohAUGzASEDDMwBCwNAIAEhAAJAIAEgBEcEQCABLQAAQTBrQf8BcSIDQQpJDQEMJwtBxwEhAwzmAQsCQCACLwEyIgFBmTNLDQAgAiABQQpsIgU7ATIgBUH+/wNxIANB//8Dc0sNACAAQQFqIQEgAiADIAVqIgM7ATIgA0H//wNxQegHSQ0BCwtBACEDIAJBADYCHCACQcEJNgIQIAJBDTYCDCACIABBAWo2AhQM5AELIAJBADYCHCACIAE2AhQgAkHwDDYCECACQRs2AgxBACEDDOMBCyACKAIEIQAgAkEANgIEIAIgACABECYiAA0BIAFBAWoLIQFBrQEhAwzIAQsgAkHBATYCHCACIAA2AgwgAiABQQFqNgIUQQAhAwzgAQsgAigCBCEAIAJBADYCBCACIAAgARAmIgANASABQQFqCyEBQa4BIQMMxQELIAJBwgE2AhwgAiAANgIMIAIgAUEBajYCFEEAIQMM3QELIAJBADYCHCACIAE2AhQgAkGXCzYCECACQQ02AgxBACEDDNwBCyACQQA2AhwgAiABNgIUIAJB4xA2AhAgAkEJNgIMQQAhAwzbAQsgAkECOgAoDKwBC0EAIQMgAkEANgIcIAJBrws2AhAgAkECNgIMIAIgAUEBajYCFAzZAQtBAiEDDL8BC0ENIQMMvgELQSYhAwy9AQtBFSEDDLwBC0EWIQMMuwELQRghAwy6AQtBHCEDDLkBC0EdIQMMuAELQSAhAwy3AQtBISEDDLYBC0EjIQMMtQELQcYAIQMMtAELQS4hAwyzAQtBPSEDDLIBC0HLACEDDLEBC0HOACEDDLABC0HYACEDDK8BC0HZACEDDK4BC0HbACEDDK0BC0HxACEDDKwBC0H0ACEDDKsBC0GNASEDDKoBC0GXASEDDKkBC0GpASEDDKgBC0GvASEDDKcBC0GxASEDDKYBCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJB8Rs2AhAgAkEGNgIMDL0BCyACQQA2AgAgBkEBaiEBQSQLOgApIAIoAgQhACACQQA2AgQgAiAAIAEQJyIARQRAQeUAIQMMowELIAJB+QA2AhwgAiABNgIUIAIgADYCDEEAIQMMuwELIABBFUcEQCACQQA2AhwgAiABNgIUIAJBzA42AhAgAkEgNgIMQQAhAwy7AQsgAkH4ADYCHCACIAE2AhQgAkHKGDYCECACQRU2AgxBACEDDLoBCyACQQA2AhwgAiABNgIUIAJBjhs2AhAgAkEGNgIMQQAhAwy5AQsgAkEANgIcIAIgATYCFCACQf4RNgIQIAJBBzYCDEEAIQMMuAELIAJBADYCHCACIAE2AhQgAkGMHDYCECACQQc2AgxBACEDDLcBCyACQQA2AhwgAiABNgIUIAJBww82AhAgAkEHNgIMQQAhAwy2AQsgAkEANgIcIAIgATYCFCACQcMPNgIQIAJBBzYCDEEAIQMMtQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxBACEDDKIBCyACQeQANgIcIAIgATYCFCACQeMXNgIQIAJBFTYCDEEAIQMMoQELIAJBADYCACAGQQFqIQEgAi0AKSIAQSNrQQtJDQQCQCAAQQZLDQBBASAAdEHKAHFFDQAMBQtBACEDIAJBADYCHCACIAE2AhQgAkH3CTYCECACQQg2AgwMoAELIAJBADYCACAGQQFqIQEgAi0AKUEhRg0DIAJBADYCHCACIAE2AhQgAkGbCjYCECACQQg2AgxBACEDDJ8BCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJBkDM2AhAgAkEINgIMDJ0BCyACQQA2AgAgBkEBaiEBIAItAClBI0kNACACQQA2AhwgAiABNgIUIAJB0wk2AhAgAkEINgIMQQAhAwycAQtB0QAhAwyCAQsgAS0AAEEwayIAQf8BcUEKSQRAIAIgADoAKiABQQFqIQFBzwAhAwyCAQsgAigCBCEAIAJBADYCBCACIAAgARAoIgBFDYYBIAJB3gA2AhwgAiABNgIUIAIgADYCDEEAIQMMmgELIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ2GASACQdwANgIcIAIgATYCFCACIAA2AgxBACEDDJkBCyACKAIEIQAgAkEANgIEIAIgACAFECgiAEUEQCAFIQEMhwELIAJB2gA2AhwgAiAFNgIUIAIgADYCDAyYAQtBACEBQQEhAwsgAiADOgArIAVBAWohAwJAAkACQCACLQAtQRBxDQACQAJAAkAgAi0AKg4DAQACBAsgBkUNAwwCCyAADQEMAgsgAUUNAQsgAigCBCEAIAJBADYCBCACIAAgAxAoIgBFBEAgAyEBDAILIAJB2AA2AhwgAiADNgIUIAIgADYCDEEAIQMMmAELIAIoAgQhACACQQA2AgQgAiAAIAMQKCIARQRAIAMhAQyHAQsgAkHZADYCHCACIAM2AhQgAiAANgIMQQAhAwyXAQtBzAAhAwx9CyAAQRVHBEAgAkEANgIcIAIgATYCFCACQZQNNgIQIAJBITYCDEEAIQMMlgELIAJB1wA2AhwgAiABNgIUIAJByRc2AhAgAkEVNgIMQQAhAwyVAQtBACEDIAJBADYCHCACIAE2AhQgAkGAETYCECACQQk2AgwMlAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0AIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMkwELQckAIQMMeQsgAkEANgIcIAIgATYCFCACQcEoNgIQIAJBBzYCDCACQQA2AgBBACEDDJEBCyACKAIEIQBBACEDIAJBADYCBCACIAAgARAlIgBFDQAgAkHSADYCHCACIAE2AhQgAiAANgIMDJABC0HIACEDDHYLIAJBADYCACAFIQELIAJBgBI7ASogAUEBaiEBQQAhAAJAIAIoAjgiA0UNACADKAIwIgNFDQAgAiADEQAAIQALIAANAQtBxwAhAwxzCyAAQRVGBEAgAkHRADYCHCACIAE2AhQgAkHjFzYCECACQRU2AgxBACEDDIwBC0EAIQMgAkEANgIcIAIgATYCFCACQbkNNgIQIAJBGjYCDAyLAQtBACEDIAJBADYCHCACIAE2AhQgAkGgGTYCECACQR42AgwMigELIAEtAABBOkYEQCACKAIEIQBBACEDIAJBADYCBCACIAAgARApIgBFDQEgAkHDADYCHCACIAA2AgwgAiABQQFqNgIUDIoBC0EAIQMgAkEANgIcIAIgATYCFCACQbERNgIQIAJBCjYCDAyJAQsgAUEBaiEBQTshAwxvCyACQcMANgIcIAIgADYCDCACIAFBAWo2AhQMhwELQQAhAyACQQA2AhwgAiABNgIUIAJB8A42AhAgAkEcNgIMDIYBCyACIAIvATBBEHI7ATAMZgsCQCACLwEwIgBBCHFFDQAgAi0AKEEBRw0AIAItAC1BCHFFDQMLIAIgAEH3+wNxQYAEcjsBMAwECyABIARHBEACQANAIAEtAABBMGsiAEH/AXFBCk8EQEE1IQMMbgsgAikDICIKQpmz5syZs+bMGVYNASACIApCCn4iCjcDICAKIACtQv8BgyILQn+FVg0BIAIgCiALfDcDICAEIAFBAWoiAUcNAAtBOSEDDIUBCyACKAIEIQBBACEDIAJBADYCBCACIAAgAUEBaiIBECoiAA0MDHcLQTkhAwyDAQsgAi0AMEEgcQ0GQcUBIQMMaQtBACEDIAJBADYCBCACIAEgARAqIgBFDQQgAkE6NgIcIAIgADYCDCACIAFBAWo2AhQMgQELIAItAChBAUcNACACLQAtQQhxRQ0BC0E3IQMMZgsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIABEAgAkE7NgIcIAIgADYCDCACIAFBAWo2AhQMfwsgAUEBaiEBDG4LIAJBCDoALAwECyABQQFqIQEMbQtBACEDIAJBADYCHCACIAE2AhQgAkHkEjYCECACQQQ2AgwMewsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIARQ1sIAJBNzYCHCACIAE2AhQgAiAANgIMDHoLIAIgAi8BMEEgcjsBMAtBMCEDDF8LIAJBNjYCHCACIAE2AhQgAiAANgIMDHcLIABBLEcNASABQQFqIQBBASEBAkACQAJAAkACQCACLQAsQQVrDgQDAQIEAAsgACEBDAQLQQIhAQwBC0EEIQELIAJBAToALCACIAIvATAgAXI7ATAgACEBDAELIAIgAi8BMEEIcjsBMCAAIQELQTkhAwxcCyACQQA6ACwLQTQhAwxaCyABIARGBEBBLSEDDHMLAkACQANAAkAgAS0AAEEKaw4EAgAAAwALIAQgAUEBaiIBRw0AC0EtIQMMdAsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIARQ0CIAJBLDYCHCACIAE2AhQgAiAANgIMDHMLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABECoiAEUEQCABQQFqIQEMAgsgAkEsNgIcIAIgADYCDCACIAFBAWo2AhQMcgsgAS0AAEENRgRAIAIoAgQhAEEAIQMgAkEANgIEIAIgACABECoiAEUEQCABQQFqIQEMAgsgAkEsNgIcIAIgADYCDCACIAFBAWo2AhQMcgsgAi0ALUEBcQRAQcQBIQMMWQsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIADQEMZQtBLyEDDFcLIAJBLjYCHCACIAE2AhQgAiAANgIMDG8LQQAhAyACQQA2AhwgAiABNgIUIAJB8BQ2AhAgAkEDNgIMDG4LQQEhAwJAAkACQAJAIAItACxBBWsOBAMBAgAECyACIAIvATBBCHI7ATAMAwtBAiEDDAELQQQhAwsgAkEBOgAsIAIgAi8BMCADcjsBMAtBKiEDDFMLQQAhAyACQQA2AhwgAiABNgIUIAJB4Q82AhAgAkEKNgIMDGsLQQEhAwJAAkACQAJAAkACQCACLQAsQQJrDgcFBAQDAQIABAsgAiACLwEwQQhyOwEwDAMLQQIhAwwBC0EEIQMLIAJBAToALCACIAIvATAgA3I7ATALQSshAwxSC0EAIQMgAkEANgIcIAIgATYCFCACQasSNgIQIAJBCzYCDAxqC0EAIQMgAkEANgIcIAIgATYCFCACQf0NNgIQIAJBHTYCDAxpCyABIARHBEADQCABLQAAQSBHDUggBCABQQFqIgFHDQALQSUhAwxpC0ElIQMMaAsgAi0ALUEBcQRAQcMBIQMMTwsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKSIABEAgAkEmNgIcIAIgADYCDCACIAFBAWo2AhQMaAsgAUEBaiEBDFwLIAFBAWohASACLwEwIgBBgAFxBEBBACEAAkAgAigCOCIDRQ0AIAMoAlQiA0UNACACIAMRAAAhAAsgAEUNBiAAQRVHDR8gAkEFNgIcIAIgATYCFCACQfkXNgIQIAJBFTYCDEEAIQMMZwsCQCAAQaAEcUGgBEcNACACLQAtQQJxDQBBACEDIAJBADYCHCACIAE2AhQgAkGWEzYCECACQQQ2AgwMZwsgAgJ/IAIvATBBFHFBFEYEQEEBIAItAChBAUYNARogAi8BMkHlAEYMAQsgAi0AKUEFRgs6AC5BACEAAkAgAigCOCIDRQ0AIAMoAiQiA0UNACACIAMRAAAhAAsCQAJAAkACQAJAIAAOFgIBAAQEBAQEBAQEBAQEBAQEBAQEBAMECyACQQE6AC4LIAIgAi8BMEHAAHI7ATALQSchAwxPCyACQSM2AhwgAiABNgIUIAJBpRY2AhAgAkEVNgIMQQAhAwxnC0EAIQMgAkEANgIcIAIgATYCFCACQdULNgIQIAJBETYCDAxmC0EAIQACQCACKAI4IgNFDQAgAygCLCIDRQ0AIAIgAxEAACEACyAADQELQQ4hAwxLCyAAQRVGBEAgAkECNgIcIAIgATYCFCACQbAYNgIQIAJBFTYCDEEAIQMMZAtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMYwtBACEDIAJBADYCHCACIAE2AhQgAkGqHDYCECACQQ82AgwMYgsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEgCqdqIgEQKyIARQ0AIAJBBTYCHCACIAE2AhQgAiAANgIMDGELQQ8hAwxHC0EAIQMgAkEANgIcIAIgATYCFCACQc0TNgIQIAJBDDYCDAxfC0IBIQoLIAFBAWohAQJAIAIpAyAiC0L//////////w9YBEAgAiALQgSGIAqENwMgDAELQQAhAyACQQA2AhwgAiABNgIUIAJBrQk2AhAgAkEMNgIMDF4LQSQhAwxEC0EAIQMgAkEANgIcIAIgATYCFCACQc0TNgIQIAJBDDYCDAxcCyACKAIEIQBBACEDIAJBADYCBCACIAAgARAsIgBFBEAgAUEBaiEBDFILIAJBFzYCHCACIAA2AgwgAiABQQFqNgIUDFsLIAIoAgQhAEEAIQMgAkEANgIEAkAgAiAAIAEQLCIARQRAIAFBAWohAQwBCyACQRY2AhwgAiAANgIMIAIgAUEBajYCFAxbC0EfIQMMQQtBACEDIAJBADYCHCACIAE2AhQgAkGaDzYCECACQSI2AgwMWQsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQLSIARQRAIAFBAWohAQxQCyACQRQ2AhwgAiAANgIMIAIgAUEBajYCFAxYCyACKAIEIQBBACEDIAJBADYCBAJAIAIgACABEC0iAEUEQCABQQFqIQEMAQsgAkETNgIcIAIgADYCDCACIAFBAWo2AhQMWAtBHiEDDD4LQQAhAyACQQA2AhwgAiABNgIUIAJBxgw2AhAgAkEjNgIMDFYLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABEC0iAEUEQCABQQFqIQEMTgsgAkERNgIcIAIgADYCDCACIAFBAWo2AhQMVQsgAkEQNgIcIAIgATYCFCACIAA2AgwMVAtBACEDIAJBADYCHCACIAE2AhQgAkHGDDYCECACQSM2AgwMUwtBACEDIAJBADYCHCACIAE2AhQgAkHAFTYCECACQQI2AgwMUgsgAigCBCEAQQAhAyACQQA2AgQCQCACIAAgARAtIgBFBEAgAUEBaiEBDAELIAJBDjYCHCACIAA2AgwgAiABQQFqNgIUDFILQRshAww4C0EAIQMgAkEANgIcIAIgATYCFCACQcYMNgIQIAJBIzYCDAxQCyACKAIEIQBBACEDIAJBADYCBAJAIAIgACABECwiAEUEQCABQQFqIQEMAQsgAkENNgIcIAIgADYCDCACIAFBAWo2AhQMUAtBGiEDDDYLQQAhAyACQQA2AhwgAiABNgIUIAJBmg82AhAgAkEiNgIMDE4LIAIoAgQhAEEAIQMgAkEANgIEAkAgAiAAIAEQLCIARQRAIAFBAWohAQwBCyACQQw2AhwgAiAANgIMIAIgAUEBajYCFAxOC0EZIQMMNAtBACEDIAJBADYCHCACIAE2AhQgAkGaDzYCECACQSI2AgwMTAsgAEEVRwRAQQAhAyACQQA2AhwgAiABNgIUIAJBgww2AhAgAkETNgIMDEwLIAJBCjYCHCACIAE2AhQgAkHkFjYCECACQRU2AgxBACEDDEsLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABIAqnaiIBECsiAARAIAJBBzYCHCACIAE2AhQgAiAANgIMDEsLQRMhAwwxCyAAQRVHBEBBACEDIAJBADYCHCACIAE2AhQgAkHaDTYCECACQRQ2AgwMSgsgAkEeNgIcIAIgATYCFCACQfkXNgIQIAJBFTYCDEEAIQMMSQtBACEAAkAgAigCOCIDRQ0AIAMoAiwiA0UNACACIAMRAAAhAAsgAEUNQSAAQRVGBEAgAkEDNgIcIAIgATYCFCACQbAYNgIQIAJBFTYCDEEAIQMMSQtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMSAtBACEDIAJBADYCHCACIAE2AhQgAkHaDTYCECACQRQ2AgwMRwtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMRgsgAkEAOgAvIAItAC1BBHFFDT8LIAJBADoALyACQQE6ADRBACEDDCsLQQAhAyACQQA2AhwgAkHkETYCECACQQc2AgwgAiABQQFqNgIUDEMLAkADQAJAIAEtAABBCmsOBAACAgACCyAEIAFBAWoiAUcNAAtB3QEhAwxDCwJAAkAgAi0ANEEBRw0AQQAhAAJAIAIoAjgiA0UNACADKAJYIgNFDQAgAiADEQAAIQALIABFDQAgAEEVRw0BIAJB3AE2AhwgAiABNgIUIAJB1RY2AhAgAkEVNgIMQQAhAwxEC0HBASEDDCoLIAJBADYCHCACIAE2AhQgAkHpCzYCECACQR82AgxBACEDDEILAkACQCACLQAoQQFrDgIEAQALQcABIQMMKQtBuQEhAwwoCyACQQI6AC9BACEAAkAgAigCOCIDRQ0AIAMoAgAiA0UNACACIAMRAAAhAAsgAEUEQEHCASEDDCgLIABBFUcEQCACQQA2AhwgAiABNgIUIAJBpAw2AhAgAkEQNgIMQQAhAwxBCyACQdsBNgIcIAIgATYCFCACQfoWNgIQIAJBFTYCDEEAIQMMQAsgASAERgRAQdoBIQMMQAsgAS0AAEHIAEYNASACQQE6ACgLQawBIQMMJQtBvwEhAwwkCyABIARHBEAgAkEQNgIIIAIgATYCBEG+ASEDDCQLQdkBIQMMPAsgASAERgRAQdgBIQMMPAsgAS0AAEHIAEcNBCABQQFqIQFBvQEhAwwiCyABIARGBEBB1wEhAww7CwJAAkAgAS0AAEHFAGsOEAAFBQUFBQUFBQUFBQUFBQEFCyABQQFqIQFBuwEhAwwiCyABQQFqIQFBvAEhAwwhC0HWASEDIAEgBEYNOSACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGD0ABqLQAARw0DIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAw6CyACKAIEIQAgAkIANwMAIAIgACAGQQFqIgEQJyIARQRAQcYBIQMMIQsgAkHVATYCHCACIAE2AhQgAiAANgIMQQAhAww5C0HUASEDIAEgBEYNOCACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGB0ABqLQAARw0CIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAw5CyACQYEEOwEoIAIoAgQhACACQgA3AwAgAiAAIAZBAWoiARAnIgANAwwCCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJB2Bs2AhAgAkEINgIMDDYLQboBIQMMHAsgAkHTATYCHCACIAE2AhQgAiAANgIMQQAhAww0C0EAIQACQCACKAI4IgNFDQAgAygCOCIDRQ0AIAIgAxEAACEACyAARQ0AIABBFUYNASACQQA2AhwgAiABNgIUIAJBzA42AhAgAkEgNgIMQQAhAwwzC0HkACEDDBkLIAJB+AA2AhwgAiABNgIUIAJByhg2AhAgAkEVNgIMQQAhAwwxC0HSASEDIAQgASIARg0wIAQgAWsgAigCACIBaiEFIAAgAWtBBGohBgJAA0AgAC0AACABQfzPAGotAABHDQEgAUEERg0DIAFBAWohASAEIABBAWoiAEcNAAsgAiAFNgIADDELIAJBADYCHCACIAA2AhQgAkGQMzYCECACQQg2AgwgAkEANgIAQQAhAwwwCyABIARHBEAgAkEONgIIIAIgATYCBEG3ASEDDBcLQdEBIQMMLwsgAkEANgIAIAZBAWohAQtBuAEhAwwUCyABIARGBEBB0AEhAwwtCyABLQAAQTBrIgBB/wFxQQpJBEAgAiAAOgAqIAFBAWohAUG2ASEDDBQLIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ0UIAJBzwE2AhwgAiABNgIUIAIgADYCDEEAIQMMLAsgASAERgRAQc4BIQMMLAsCQCABLQAAQS5GBEAgAUEBaiEBDAELIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ0VIAJBzQE2AhwgAiABNgIUIAIgADYCDEEAIQMMLAtBtQEhAwwSCyAEIAEiBUYEQEHMASEDDCsLQQAhAEEBIQFBASEGQQAhAwJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAUtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyEDQQAhAUEAIQYMAgtBCSEDQQEhAEEAIQFBACEGDAELQQAhAUEBIQMLIAIgAzoAKyAFQQFqIQMCQAJAIAItAC1BEHENAAJAAkACQCACLQAqDgMBAAIECyAGRQ0DDAILIAANAQwCCyABRQ0BCyACKAIEIQAgAkEANgIEIAIgACADECgiAEUEQCADIQEMAwsgAkHJATYCHCACIAM2AhQgAiAANgIMQQAhAwwtCyACKAIEIQAgAkEANgIEIAIgACADECgiAEUEQCADIQEMGAsgAkHKATYCHCACIAM2AhQgAiAANgIMQQAhAwwsCyACKAIEIQAgAkEANgIEIAIgACAFECgiAEUEQCAFIQEMFgsgAkHLATYCHCACIAU2AhQgAiAANgIMDCsLQbQBIQMMEQtBACEAAkAgAigCOCIDRQ0AIAMoAjwiA0UNACACIAMRAAAhAAsCQCAABEAgAEEVRg0BIAJBADYCHCACIAE2AhQgAkGUDTYCECACQSE2AgxBACEDDCsLQbIBIQMMEQsgAkHIATYCHCACIAE2AhQgAkHJFzYCECACQRU2AgxBACEDDCkLIAJBADYCACAGQQFqIQFB9QAhAwwPCyACLQApQQVGBEBB4wAhAwwPC0HiACEDDA4LIAAhASACQQA2AgALIAJBADoALEEJIQMMDAsgAkEANgIAIAdBAWohAUHAACEDDAsLQQELOgAsIAJBADYCACAGQQFqIQELQSkhAwwIC0E4IQMMBwsCQCABIARHBEADQCABLQAAQYA+ai0AACIAQQFHBEAgAEECRw0DIAFBAWohAQwFCyAEIAFBAWoiAUcNAAtBPiEDDCELQT4hAwwgCwsgAkEAOgAsDAELQQshAwwEC0E6IQMMAwsgAUEBaiEBQS0hAwwCCyACIAE6ACwgAkEANgIAIAZBAWohAUEMIQMMAQsgAkEANgIAIAZBAWohAUEKIQMMAAsAC0EAIQMgAkEANgIcIAIgATYCFCACQc0QNgIQIAJBCTYCDAwXC0EAIQMgAkEANgIcIAIgATYCFCACQekKNgIQIAJBCTYCDAwWC0EAIQMgAkEANgIcIAIgATYCFCACQbcQNgIQIAJBCTYCDAwVC0EAIQMgAkEANgIcIAIgATYCFCACQZwRNgIQIAJBCTYCDAwUC0EAIQMgAkEANgIcIAIgATYCFCACQc0QNgIQIAJBCTYCDAwTC0EAIQMgAkEANgIcIAIgATYCFCACQekKNgIQIAJBCTYCDAwSC0EAIQMgAkEANgIcIAIgATYCFCACQbcQNgIQIAJBCTYCDAwRC0EAIQMgAkEANgIcIAIgATYCFCACQZwRNgIQIAJBCTYCDAwQC0EAIQMgAkEANgIcIAIgATYCFCACQZcVNgIQIAJBDzYCDAwPC0EAIQMgAkEANgIcIAIgATYCFCACQZcVNgIQIAJBDzYCDAwOC0EAIQMgAkEANgIcIAIgATYCFCACQcASNgIQIAJBCzYCDAwNC0EAIQMgAkEANgIcIAIgATYCFCACQZUJNgIQIAJBCzYCDAwMC0EAIQMgAkEANgIcIAIgATYCFCACQeEPNgIQIAJBCjYCDAwLC0EAIQMgAkEANgIcIAIgATYCFCACQfsPNgIQIAJBCjYCDAwKC0EAIQMgAkEANgIcIAIgATYCFCACQfEZNgIQIAJBAjYCDAwJC0EAIQMgAkEANgIcIAIgATYCFCACQcQUNgIQIAJBAjYCDAwIC0EAIQMgAkEANgIcIAIgATYCFCACQfIVNgIQIAJBAjYCDAwHCyACQQI2AhwgAiABNgIUIAJBnBo2AhAgAkEWNgIMQQAhAwwGC0EBIQMMBQtB1AAhAyABIARGDQQgCEEIaiEJIAIoAgAhBQJAAkAgASAERwRAIAVB2MIAaiEHIAQgBWogAWshACAFQX9zQQpqIgUgAWohBgNAIAEtAAAgBy0AAEcEQEECIQcMAwsgBUUEQEEAIQcgBiEBDAMLIAVBAWshBSAHQQFqIQcgBCABQQFqIgFHDQALIAAhBSAEIQELIAlBATYCACACIAU2AgAMAQsgAkEANgIAIAkgBzYCAAsgCSABNgIEIAgoAgwhACAIKAIIDgMBBAIACwALIAJBADYCHCACQbUaNgIQIAJBFzYCDCACIABBAWo2AhRBACEDDAILIAJBADYCHCACIAA2AhQgAkHKGjYCECACQQk2AgxBACEDDAELIAEgBEYEQEEiIQMMAQsgAkEJNgIIIAIgATYCBEEhIQMLIAhBEGokACADRQRAIAIoAgwhAAwBCyACIAM2AhxBACEAIAIoAgQiAUUNACACIAEgBCACKAIIEQEAIgFFDQAgAiAENgIUIAIgATYCDCABIQALIAALvgIBAn8gAEEAOgAAIABB3ABqIgFBAWtBADoAACAAQQA6AAIgAEEAOgABIAFBA2tBADoAACABQQJrQQA6AAAgAEEAOgADIAFBBGtBADoAAEEAIABrQQNxIgEgAGoiAEEANgIAQdwAIAFrQXxxIgIgAGoiAUEEa0EANgIAAkAgAkEJSQ0AIABBADYCCCAAQQA2AgQgAUEIa0EANgIAIAFBDGtBADYCACACQRlJDQAgAEEANgIYIABBADYCFCAAQQA2AhAgAEEANgIMIAFBEGtBADYCACABQRRrQQA2AgAgAUEYa0EANgIAIAFBHGtBADYCACACIABBBHFBGHIiAmsiAUEgSQ0AIAAgAmohAANAIABCADcDGCAAQgA3AxAgAEIANwMIIABCADcDACAAQSBqIQAgAUEgayIBQR9LDQALCwtWAQF/AkAgACgCDA0AAkACQAJAAkAgAC0ALw4DAQADAgsgACgCOCIBRQ0AIAEoAiwiAUUNACAAIAERAAAiAQ0DC0EADwsACyAAQcMWNgIQQQ4hAQsgAQsaACAAKAIMRQRAIABB0Rs2AhAgAEEVNgIMCwsUACAAKAIMQRVGBEAgAEEANgIMCwsUACAAKAIMQRZGBEAgAEEANgIMCwsHACAAKAIMCwcAIAAoAhALCQAgACABNgIQCwcAIAAoAhQLFwAgAEEkTwRAAAsgAEECdEGgM2ooAgALFwAgAEEuTwRAAAsgAEECdEGwNGooAgALvwkBAX9B6yghAQJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB9ysPC0GQMQ8LQdcxDwtBoi0PC0HUJw8LQeArDwtBnywPC0HrMQ8LQdUfDwtByjEPC0HeJQ8LQdQeDwtB9BwPC0GnMg8LQbEdDwtBoB0PC0G5MQ8LQbwwDwtBkiEPC0GzJg8LQeksDwtBrB4PC0HUKw8LQfcmDwtBgCYPC0GwIQ8LQf4eDwtBjSMPC0GJLQ8LQfciDwtBoDEPC0GuHw8LQcYlDwtB6B4PC0GTIg8LQcIvDwtBwx0PC0GLLA8LQeEdDwtBjS8PC0HqIQ8LQbQtDwtB0i8PC0HfMg8LQdIyDwtB8DAPC0GpIg8LQfkjDwtBmR4PC0G1LA8LQZswDwtBkjIPC0G2Kw8LQcIiDwtB+DIPC0GeJQ8LQdAiDwtBuh4PC0GBHg8LAAtB1iEhAQsgAQsWACAAIAAtAC1B/gFxIAFBAEdyOgAtCxkAIAAgAC0ALUH9AXEgAUEAR0EBdHI6AC0LGQAgACAALQAtQfsBcSABQQBHQQJ0cjoALQsZACAAIAAtAC1B9wFxIAFBAEdBA3RyOgAtCz4BAn8CQCAAKAI4IgNFDQAgAygCBCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBxhE2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCCCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB9go2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCDCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB7Ro2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCECIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBlRA2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCFCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBqhs2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCGCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB7RM2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCKCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB9gg2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCHCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBwhk2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCICIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBlBQ2AhBBGCEECyAEC1kBAn8CQCAALQAoQQFGDQAgAC8BMiIBQeQAa0HkAEkNACABQcwBRg0AIAFBsAJGDQAgAC8BMCIAQcAAcQ0AQQEhAiAAQYgEcUGABEYNACAAQShxRSECCyACC4wBAQJ/AkACQAJAIAAtACpFDQAgAC0AK0UNACAALwEwIgFBAnFFDQEMAgsgAC8BMCIBQQFxRQ0BC0EBIQIgAC0AKEEBRg0AIAAvATIiAEHkAGtB5ABJDQAgAEHMAUYNACAAQbACRg0AIAFBwABxDQBBACECIAFBiARxQYAERg0AIAFBKHFBAEchAgsgAgtXACAAQRhqQgA3AwAgAEIANwMAIABBOGpCADcDACAAQTBqQgA3AwAgAEEoakIANwMAIABBIGpCADcDACAAQRBqQgA3AwAgAEEIakIANwMAIABB3QE2AhwLBgAgABAyC5otAQt/IwBBEGsiCiQAQaTQACgCACIJRQRAQeTTACgCACIFRQRAQfDTAEJ/NwIAQejTAEKAgISAgIDAADcCAEHk0wAgCkEIakFwcUHYqtWqBXMiBTYCAEH40wBBADYCAEHI0wBBADYCAAtBzNMAQYDUBDYCAEGc0ABBgNQENgIAQbDQACAFNgIAQazQAEF/NgIAQdDTAEGArAM2AgADQCABQcjQAGogAUG80ABqIgI2AgAgAiABQbTQAGoiAzYCACABQcDQAGogAzYCACABQdDQAGogAUHE0ABqIgM2AgAgAyACNgIAIAFB2NAAaiABQczQAGoiAjYCACACIAM2AgAgAUHU0ABqIAI2AgAgAUEgaiIBQYACRw0AC0GM1ARBwasDNgIAQajQAEH00wAoAgA2AgBBmNAAQcCrAzYCAEGk0ABBiNQENgIAQcz/B0E4NgIAQYjUBCEJCwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB7AFNBEBBjNAAKAIAIgZBECAAQRNqQXBxIABBC0kbIgRBA3YiAHYiAUEDcQRAAkAgAUEBcSAAckEBcyICQQN0IgBBtNAAaiIBIABBvNAAaigCACIAKAIIIgNGBEBBjNAAIAZBfiACd3E2AgAMAQsgASADNgIIIAMgATYCDAsgAEEIaiEBIAAgAkEDdCICQQNyNgIEIAAgAmoiACAAKAIEQQFyNgIEDBELQZTQACgCACIIIARPDQEgAQRAAkBBAiAAdCICQQAgAmtyIAEgAHRxaCIAQQN0IgJBtNAAaiIBIAJBvNAAaigCACICKAIIIgNGBEBBjNAAIAZBfiAAd3EiBjYCAAwBCyABIAM2AgggAyABNgIMCyACIARBA3I2AgQgAEEDdCIAIARrIQUgACACaiAFNgIAIAIgBGoiBCAFQQFyNgIEIAgEQCAIQXhxQbTQAGohAEGg0AAoAgAhAwJ/QQEgCEEDdnQiASAGcUUEQEGM0AAgASAGcjYCACAADAELIAAoAggLIgEgAzYCDCAAIAM2AgggAyAANgIMIAMgATYCCAsgAkEIaiEBQaDQACAENgIAQZTQACAFNgIADBELQZDQACgCACILRQ0BIAtoQQJ0QbzSAGooAgAiACgCBEF4cSAEayEFIAAhAgNAAkAgAigCECIBRQRAIAJBFGooAgAiAUUNAQsgASgCBEF4cSAEayIDIAVJIQIgAyAFIAIbIQUgASAAIAIbIQAgASECDAELCyAAKAIYIQkgACgCDCIDIABHBEBBnNAAKAIAGiADIAAoAggiATYCCCABIAM2AgwMEAsgAEEUaiICKAIAIgFFBEAgACgCECIBRQ0DIABBEGohAgsDQCACIQcgASIDQRRqIgIoAgAiAQ0AIANBEGohAiADKAIQIgENAAsgB0EANgIADA8LQX8hBCAAQb9/Sw0AIABBE2oiAUFwcSEEQZDQACgCACIIRQ0AQQAgBGshBQJAAkACQAJ/QQAgBEGAAkkNABpBHyAEQf///wdLDQAaIARBJiABQQh2ZyIAa3ZBAXEgAEEBdGtBPmoLIgZBAnRBvNIAaigCACICRQRAQQAhAUEAIQMMAQtBACEBIARBGSAGQQF2a0EAIAZBH0cbdCEAQQAhAwNAAkAgAigCBEF4cSAEayIHIAVPDQAgAiEDIAciBQ0AQQAhBSACIQEMAwsgASACQRRqKAIAIgcgByACIABBHXZBBHFqQRBqKAIAIgJGGyABIAcbIQEgAEEBdCEAIAINAAsLIAEgA3JFBEBBACEDQQIgBnQiAEEAIABrciAIcSIARQ0DIABoQQJ0QbzSAGooAgAhAQsgAUUNAQsDQCABKAIEQXhxIARrIgIgBUkhACACIAUgABshBSABIAMgABshAyABKAIQIgAEfyAABSABQRRqKAIACyIBDQALCyADRQ0AIAVBlNAAKAIAIARrTw0AIAMoAhghByADIAMoAgwiAEcEQEGc0AAoAgAaIAAgAygCCCIBNgIIIAEgADYCDAwOCyADQRRqIgIoAgAiAUUEQCADKAIQIgFFDQMgA0EQaiECCwNAIAIhBiABIgBBFGoiAigCACIBDQAgAEEQaiECIAAoAhAiAQ0ACyAGQQA2AgAMDQtBlNAAKAIAIgMgBE8EQEGg0AAoAgAhAQJAIAMgBGsiAkEQTwRAIAEgBGoiACACQQFyNgIEIAEgA2ogAjYCACABIARBA3I2AgQMAQsgASADQQNyNgIEIAEgA2oiACAAKAIEQQFyNgIEQQAhAEEAIQILQZTQACACNgIAQaDQACAANgIAIAFBCGohAQwPC0GY0AAoAgAiAyAESwRAIAQgCWoiACADIARrIgFBAXI2AgRBpNAAIAA2AgBBmNAAIAE2AgAgCSAEQQNyNgIEIAlBCGohAQwPC0EAIQEgBAJ/QeTTACgCAARAQezTACgCAAwBC0Hw0wBCfzcCAEHo0wBCgICEgICAwAA3AgBB5NMAIApBDGpBcHFB2KrVqgVzNgIAQfjTAEEANgIAQcjTAEEANgIAQYCABAsiACAEQccAaiIFaiIGQQAgAGsiB3EiAk8EQEH80wBBMDYCAAwPCwJAQcTTACgCACIBRQ0AQbzTACgCACIIIAJqIQAgACABTSAAIAhLcQ0AQQAhAUH80wBBMDYCAAwPC0HI0wAtAABBBHENBAJAAkAgCQRAQczTACEBA0AgASgCACIAIAlNBEAgACABKAIEaiAJSw0DCyABKAIIIgENAAsLQQAQMyIAQX9GDQUgAiEGQejTACgCACIBQQFrIgMgAHEEQCACIABrIAAgA2pBACABa3FqIQYLIAQgBk8NBSAGQf7///8HSw0FQcTTACgCACIDBEBBvNMAKAIAIgcgBmohASABIAdNDQYgASADSw0GCyAGEDMiASAARw0BDAcLIAYgA2sgB3EiBkH+////B0sNBCAGEDMhACAAIAEoAgAgASgCBGpGDQMgACEBCwJAIAYgBEHIAGpPDQAgAUF/Rg0AQezTACgCACIAIAUgBmtqQQAgAGtxIgBB/v///wdLBEAgASEADAcLIAAQM0F/RwRAIAAgBmohBiABIQAMBwtBACAGaxAzGgwECyABIgBBf0cNBQwDC0EAIQMMDAtBACEADAoLIABBf0cNAgtByNMAQcjTACgCAEEEcjYCAAsgAkH+////B0sNASACEDMhAEEAEDMhASAAQX9GDQEgAUF/Rg0BIAAgAU8NASABIABrIgYgBEE4ak0NAQtBvNMAQbzTACgCACAGaiIBNgIAQcDTACgCACABSQRAQcDTACABNgIACwJAAkACQEGk0AAoAgAiAgRAQczTACEBA0AgACABKAIAIgMgASgCBCIFakYNAiABKAIIIgENAAsMAgtBnNAAKAIAIgFBAEcgACABT3FFBEBBnNAAIAA2AgALQQAhAUHQ0wAgBjYCAEHM0wAgADYCAEGs0ABBfzYCAEGw0ABB5NMAKAIANgIAQdjTAEEANgIAA0AgAUHI0ABqIAFBvNAAaiICNgIAIAIgAUG00ABqIgM2AgAgAUHA0ABqIAM2AgAgAUHQ0ABqIAFBxNAAaiIDNgIAIAMgAjYCACABQdjQAGogAUHM0ABqIgI2AgAgAiADNgIAIAFB1NAAaiACNgIAIAFBIGoiAUGAAkcNAAtBeCAAa0EPcSIBIABqIgIgBkE4ayIDIAFrIgFBAXI2AgRBqNAAQfTTACgCADYCAEGY0AAgATYCAEGk0AAgAjYCACAAIANqQTg2AgQMAgsgACACTQ0AIAIgA0kNACABKAIMQQhxDQBBeCACa0EPcSIAIAJqIgNBmNAAKAIAIAZqIgcgAGsiAEEBcjYCBCABIAUgBmo2AgRBqNAAQfTTACgCADYCAEGY0AAgADYCAEGk0AAgAzYCACACIAdqQTg2AgQMAQsgAEGc0AAoAgBJBEBBnNAAIAA2AgALIAAgBmohA0HM0wAhAQJAAkACQANAIAMgASgCAEcEQCABKAIIIgENAQwCCwsgAS0ADEEIcUUNAQtBzNMAIQEDQCABKAIAIgMgAk0EQCADIAEoAgRqIgUgAksNAwsgASgCCCEBDAALAAsgASAANgIAIAEgASgCBCAGajYCBCAAQXggAGtBD3FqIgkgBEEDcjYCBCADQXggA2tBD3FqIgYgBCAJaiIEayEBIAIgBkYEQEGk0AAgBDYCAEGY0ABBmNAAKAIAIAFqIgA2AgAgBCAAQQFyNgIEDAgLQaDQACgCACAGRgRAQaDQACAENgIAQZTQAEGU0AAoAgAgAWoiADYCACAEIABBAXI2AgQgACAEaiAANgIADAgLIAYoAgQiBUEDcUEBRw0GIAVBeHEhCCAFQf8BTQRAIAVBA3YhAyAGKAIIIgAgBigCDCICRgRAQYzQAEGM0AAoAgBBfiADd3E2AgAMBwsgAiAANgIIIAAgAjYCDAwGCyAGKAIYIQcgBiAGKAIMIgBHBEAgACAGKAIIIgI2AgggAiAANgIMDAULIAZBFGoiAigCACIFRQRAIAYoAhAiBUUNBCAGQRBqIQILA0AgAiEDIAUiAEEUaiICKAIAIgUNACAAQRBqIQIgACgCECIFDQALIANBADYCAAwEC0F4IABrQQ9xIgEgAGoiByAGQThrIgMgAWsiAUEBcjYCBCAAIANqQTg2AgQgAiAFQTcgBWtBD3FqQT9rIgMgAyACQRBqSRsiA0EjNgIEQajQAEH00wAoAgA2AgBBmNAAIAE2AgBBpNAAIAc2AgAgA0EQakHU0wApAgA3AgAgA0HM0wApAgA3AghB1NMAIANBCGo2AgBB0NMAIAY2AgBBzNMAIAA2AgBB2NMAQQA2AgAgA0EkaiEBA0AgAUEHNgIAIAUgAUEEaiIBSw0ACyACIANGDQAgAyADKAIEQX5xNgIEIAMgAyACayIFNgIAIAIgBUEBcjYCBCAFQf8BTQRAIAVBeHFBtNAAaiEAAn9BjNAAKAIAIgFBASAFQQN2dCIDcUUEQEGM0AAgASADcjYCACAADAELIAAoAggLIgEgAjYCDCAAIAI2AgggAiAANgIMIAIgATYCCAwBC0EfIQEgBUH///8HTQRAIAVBJiAFQQh2ZyIAa3ZBAXEgAEEBdGtBPmohAQsgAiABNgIcIAJCADcCECABQQJ0QbzSAGohAEGQ0AAoAgAiA0EBIAF0IgZxRQRAIAAgAjYCAEGQ0AAgAyAGcjYCACACIAA2AhggAiACNgIIIAIgAjYCDAwBCyAFQRkgAUEBdmtBACABQR9HG3QhASAAKAIAIQMCQANAIAMiACgCBEF4cSAFRg0BIAFBHXYhAyABQQF0IQEgACADQQRxakEQaiIGKAIAIgMNAAsgBiACNgIAIAIgADYCGCACIAI2AgwgAiACNgIIDAELIAAoAggiASACNgIMIAAgAjYCCCACQQA2AhggAiAANgIMIAIgATYCCAtBmNAAKAIAIgEgBE0NAEGk0AAoAgAiACAEaiICIAEgBGsiAUEBcjYCBEGY0AAgATYCAEGk0AAgAjYCACAAIARBA3I2AgQgAEEIaiEBDAgLQQAhAUH80wBBMDYCAAwHC0EAIQALIAdFDQACQCAGKAIcIgJBAnRBvNIAaiIDKAIAIAZGBEAgAyAANgIAIAANAUGQ0ABBkNAAKAIAQX4gAndxNgIADAILIAdBEEEUIAcoAhAgBkYbaiAANgIAIABFDQELIAAgBzYCGCAGKAIQIgIEQCAAIAI2AhAgAiAANgIYCyAGQRRqKAIAIgJFDQAgAEEUaiACNgIAIAIgADYCGAsgASAIaiEBIAYgCGoiBigCBCEFCyAGIAVBfnE2AgQgASAEaiABNgIAIAQgAUEBcjYCBCABQf8BTQRAIAFBeHFBtNAAaiEAAn9BjNAAKAIAIgJBASABQQN2dCIBcUUEQEGM0AAgASACcjYCACAADAELIAAoAggLIgEgBDYCDCAAIAQ2AgggBCAANgIMIAQgATYCCAwBC0EfIQUgAUH///8HTQRAIAFBJiABQQh2ZyIAa3ZBAXEgAEEBdGtBPmohBQsgBCAFNgIcIARCADcCECAFQQJ0QbzSAGohAEGQ0AAoAgAiAkEBIAV0IgNxRQRAIAAgBDYCAEGQ0AAgAiADcjYCACAEIAA2AhggBCAENgIIIAQgBDYCDAwBCyABQRkgBUEBdmtBACAFQR9HG3QhBSAAKAIAIQACQANAIAAiAigCBEF4cSABRg0BIAVBHXYhACAFQQF0IQUgAiAAQQRxakEQaiIDKAIAIgANAAsgAyAENgIAIAQgAjYCGCAEIAQ2AgwgBCAENgIIDAELIAIoAggiACAENgIMIAIgBDYCCCAEQQA2AhggBCACNgIMIAQgADYCCAsgCUEIaiEBDAILAkAgB0UNAAJAIAMoAhwiAUECdEG80gBqIgIoAgAgA0YEQCACIAA2AgAgAA0BQZDQACAIQX4gAXdxIgg2AgAMAgsgB0EQQRQgBygCECADRhtqIAA2AgAgAEUNAQsgACAHNgIYIAMoAhAiAQRAIAAgATYCECABIAA2AhgLIANBFGooAgAiAUUNACAAQRRqIAE2AgAgASAANgIYCwJAIAVBD00EQCADIAQgBWoiAEEDcjYCBCAAIANqIgAgACgCBEEBcjYCBAwBCyADIARqIgIgBUEBcjYCBCADIARBA3I2AgQgAiAFaiAFNgIAIAVB/wFNBEAgBUF4cUG00ABqIQACf0GM0AAoAgAiAUEBIAVBA3Z0IgVxRQRAQYzQACABIAVyNgIAIAAMAQsgACgCCAsiASACNgIMIAAgAjYCCCACIAA2AgwgAiABNgIIDAELQR8hASAFQf///wdNBEAgBUEmIAVBCHZnIgBrdkEBcSAAQQF0a0E+aiEBCyACIAE2AhwgAkIANwIQIAFBAnRBvNIAaiEAQQEgAXQiBCAIcUUEQCAAIAI2AgBBkNAAIAQgCHI2AgAgAiAANgIYIAIgAjYCCCACIAI2AgwMAQsgBUEZIAFBAXZrQQAgAUEfRxt0IQEgACgCACEEAkADQCAEIgAoAgRBeHEgBUYNASABQR12IQQgAUEBdCEBIAAgBEEEcWpBEGoiBigCACIEDQALIAYgAjYCACACIAA2AhggAiACNgIMIAIgAjYCCAwBCyAAKAIIIgEgAjYCDCAAIAI2AgggAkEANgIYIAIgADYCDCACIAE2AggLIANBCGohAQwBCwJAIAlFDQACQCAAKAIcIgFBAnRBvNIAaiICKAIAIABGBEAgAiADNgIAIAMNAUGQ0AAgC0F+IAF3cTYCAAwCCyAJQRBBFCAJKAIQIABGG2ogAzYCACADRQ0BCyADIAk2AhggACgCECIBBEAgAyABNgIQIAEgAzYCGAsgAEEUaigCACIBRQ0AIANBFGogATYCACABIAM2AhgLAkAgBUEPTQRAIAAgBCAFaiIBQQNyNgIEIAAgAWoiASABKAIEQQFyNgIEDAELIAAgBGoiByAFQQFyNgIEIAAgBEEDcjYCBCAFIAdqIAU2AgAgCARAIAhBeHFBtNAAaiEBQaDQACgCACEDAn9BASAIQQN2dCICIAZxRQRAQYzQACACIAZyNgIAIAEMAQsgASgCCAsiAiADNgIMIAEgAzYCCCADIAE2AgwgAyACNgIIC0Gg0AAgBzYCAEGU0AAgBTYCAAsgAEEIaiEBCyAKQRBqJAAgAQtDACAARQRAPwBBEHQPCwJAIABB//8DcQ0AIABBAEgNACAAQRB2QAAiAEF/RgRAQfzTAEEwNgIAQX8PCyAAQRB0DwsACwvcPyIAQYAICwkBAAAAAgAAAAMAQZQICwUEAAAABQBBpAgLCQYAAAAHAAAACABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv", "base64"); + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js +var require_llhttp_simd_wasm = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { Buffer: Buffer2 } = require("buffer"); + module2.exports = Buffer2.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVuaWVudF9oZWFkZXJzACEhbGxodHRwX3NldF9sZW5pZW50X2NodW5rZWRfbGVuZ3RoACIdbGxodHRwX3NldF9sZW5pZW50X2tlZXBfYWxpdmUAIyRsbGh0dHBfc2V0X2xlbmllbnRfdHJhbnNmZXJfZW5jb2RpbmcAJBhsbGh0dHBfbWVzc2FnZV9uZWVkc19lb2YALgkXAQBBAQsRAQIDBAUKBgcrLSwqKSglJyYK77MCLBYAQYjQACgCAARAAAtBiNAAQQE2AgALFAAgABAwIAAgAjYCOCAAIAE6ACgLFAAgACAALwEyIAAtAC4gABAvEAALHgEBf0HAABAyIgEQMCABQYAINgI4IAEgADoAKCABC48MAQd/AkAgAEUNACAAQQhrIgEgAEEEaygCACIAQXhxIgRqIQUCQCAAQQFxDQAgAEEDcUUNASABIAEoAgAiAGsiAUGc0AAoAgBJDQEgACAEaiEEAkACQEGg0AAoAgAgAUcEQCAAQf8BTQRAIABBA3YhAyABKAIIIgAgASgCDCICRgRAQYzQAEGM0AAoAgBBfiADd3E2AgAMBQsgAiAANgIIIAAgAjYCDAwECyABKAIYIQYgASABKAIMIgBHBEAgACABKAIIIgI2AgggAiAANgIMDAMLIAFBFGoiAygCACICRQRAIAEoAhAiAkUNAiABQRBqIQMLA0AgAyEHIAIiAEEUaiIDKAIAIgINACAAQRBqIQMgACgCECICDQALIAdBADYCAAwCCyAFKAIEIgBBA3FBA0cNAiAFIABBfnE2AgRBlNAAIAQ2AgAgBSAENgIAIAEgBEEBcjYCBAwDC0EAIQALIAZFDQACQCABKAIcIgJBAnRBvNIAaiIDKAIAIAFGBEAgAyAANgIAIAANAUGQ0ABBkNAAKAIAQX4gAndxNgIADAILIAZBEEEUIAYoAhAgAUYbaiAANgIAIABFDQELIAAgBjYCGCABKAIQIgIEQCAAIAI2AhAgAiAANgIYCyABQRRqKAIAIgJFDQAgAEEUaiACNgIAIAIgADYCGAsgASAFTw0AIAUoAgQiAEEBcUUNAAJAAkACQAJAIABBAnFFBEBBpNAAKAIAIAVGBEBBpNAAIAE2AgBBmNAAQZjQACgCACAEaiIANgIAIAEgAEEBcjYCBCABQaDQACgCAEcNBkGU0ABBADYCAEGg0ABBADYCAAwGC0Gg0AAoAgAgBUYEQEGg0AAgATYCAEGU0ABBlNAAKAIAIARqIgA2AgAgASAAQQFyNgIEIAAgAWogADYCAAwGCyAAQXhxIARqIQQgAEH/AU0EQCAAQQN2IQMgBSgCCCIAIAUoAgwiAkYEQEGM0ABBjNAAKAIAQX4gA3dxNgIADAULIAIgADYCCCAAIAI2AgwMBAsgBSgCGCEGIAUgBSgCDCIARwRAQZzQACgCABogACAFKAIIIgI2AgggAiAANgIMDAMLIAVBFGoiAygCACICRQRAIAUoAhAiAkUNAiAFQRBqIQMLA0AgAyEHIAIiAEEUaiIDKAIAIgINACAAQRBqIQMgACgCECICDQALIAdBADYCAAwCCyAFIABBfnE2AgQgASAEaiAENgIAIAEgBEEBcjYCBAwDC0EAIQALIAZFDQACQCAFKAIcIgJBAnRBvNIAaiIDKAIAIAVGBEAgAyAANgIAIAANAUGQ0ABBkNAAKAIAQX4gAndxNgIADAILIAZBEEEUIAYoAhAgBUYbaiAANgIAIABFDQELIAAgBjYCGCAFKAIQIgIEQCAAIAI2AhAgAiAANgIYCyAFQRRqKAIAIgJFDQAgAEEUaiACNgIAIAIgADYCGAsgASAEaiAENgIAIAEgBEEBcjYCBCABQaDQACgCAEcNAEGU0AAgBDYCAAwBCyAEQf8BTQRAIARBeHFBtNAAaiEAAn9BjNAAKAIAIgJBASAEQQN2dCIDcUUEQEGM0AAgAiADcjYCACAADAELIAAoAggLIgIgATYCDCAAIAE2AgggASAANgIMIAEgAjYCCAwBC0EfIQIgBEH///8HTQRAIARBJiAEQQh2ZyIAa3ZBAXEgAEEBdGtBPmohAgsgASACNgIcIAFCADcCECACQQJ0QbzSAGohAAJAQZDQACgCACIDQQEgAnQiB3FFBEAgACABNgIAQZDQACADIAdyNgIAIAEgADYCGCABIAE2AgggASABNgIMDAELIARBGSACQQF2a0EAIAJBH0cbdCECIAAoAgAhAAJAA0AgACIDKAIEQXhxIARGDQEgAkEddiEAIAJBAXQhAiADIABBBHFqQRBqIgcoAgAiAA0ACyAHIAE2AgAgASADNgIYIAEgATYCDCABIAE2AggMAQsgAygCCCIAIAE2AgwgAyABNgIIIAFBADYCGCABIAM2AgwgASAANgIIC0Gs0ABBrNAAKAIAQQFrIgBBfyAAGzYCAAsLBwAgAC0AKAsHACAALQAqCwcAIAAtACsLBwAgAC0AKQsHACAALwEyCwcAIAAtAC4LQAEEfyAAKAIYIQEgAC0ALSECIAAtACghAyAAKAI4IQQgABAwIAAgBDYCOCAAIAM6ACggACACOgAtIAAgATYCGAu74gECB38DfiABIAJqIQQCQCAAIgIoAgwiAA0AIAIoAgQEQCACIAE2AgQLIwBBEGsiCCQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAIoAhwiA0EBaw7dAdoBAdkBAgMEBQYHCAkKCwwNDtgBDxDXARES1gETFBUWFxgZGhvgAd8BHB0e1QEfICEiIyQl1AEmJygpKiss0wHSAS0u0QHQAS8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRtsBR0hJSs8BzgFLzQFMzAFNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBywHKAbgByQG5AcgBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgEA3AELQQAMxgELQQ4MxQELQQ0MxAELQQ8MwwELQRAMwgELQRMMwQELQRQMwAELQRUMvwELQRYMvgELQRgMvQELQRkMvAELQRoMuwELQRsMugELQRwMuQELQR0MuAELQQgMtwELQR4MtgELQSAMtQELQR8MtAELQQcMswELQSEMsgELQSIMsQELQSMMsAELQSQMrwELQRIMrgELQREMrQELQSUMrAELQSYMqwELQScMqgELQSgMqQELQcMBDKgBC0EqDKcBC0ErDKYBC0EsDKUBC0EtDKQBC0EuDKMBC0EvDKIBC0HEAQyhAQtBMAygAQtBNAyfAQtBDAyeAQtBMQydAQtBMgycAQtBMwybAQtBOQyaAQtBNQyZAQtBxQEMmAELQQsMlwELQToMlgELQTYMlQELQQoMlAELQTcMkwELQTgMkgELQTwMkQELQTsMkAELQT0MjwELQQkMjgELQSkMjQELQT4MjAELQT8MiwELQcAADIoBC0HBAAyJAQtBwgAMiAELQcMADIcBC0HEAAyGAQtBxQAMhQELQcYADIQBC0EXDIMBC0HHAAyCAQtByAAMgQELQckADIABC0HKAAx/C0HLAAx+C0HNAAx9C0HMAAx8C0HOAAx7C0HPAAx6C0HQAAx5C0HRAAx4C0HSAAx3C0HTAAx2C0HUAAx1C0HWAAx0C0HVAAxzC0EGDHILQdcADHELQQUMcAtB2AAMbwtBBAxuC0HZAAxtC0HaAAxsC0HbAAxrC0HcAAxqC0EDDGkLQd0ADGgLQd4ADGcLQd8ADGYLQeEADGULQeAADGQLQeIADGMLQeMADGILQQIMYQtB5AAMYAtB5QAMXwtB5gAMXgtB5wAMXQtB6AAMXAtB6QAMWwtB6gAMWgtB6wAMWQtB7AAMWAtB7QAMVwtB7gAMVgtB7wAMVQtB8AAMVAtB8QAMUwtB8gAMUgtB8wAMUQtB9AAMUAtB9QAMTwtB9gAMTgtB9wAMTQtB+AAMTAtB+QAMSwtB+gAMSgtB+wAMSQtB/AAMSAtB/QAMRwtB/gAMRgtB/wAMRQtBgAEMRAtBgQEMQwtBggEMQgtBgwEMQQtBhAEMQAtBhQEMPwtBhgEMPgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADDsYBAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHyAhIyUmKCorLC8wMTIzNDU2Nzk6Ozw9lANAQkRFRklLTk9QUVJTVFVWWFpbXF1eX2BhYmNkZWZnaGpsb3Bxc3V2eHl6e3x/gAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAccByAHJAcsBzAHNAc4BzwGKA4kDiAOHA4QDgwOAA/sC+gL5AvgC9wL0AvMC8gLLAsECsALZAQsgASAERw3wAkHdASEDDLMDCyABIARHDcgBQcMBIQMMsgMLIAEgBEcNe0H3ACEDDLEDCyABIARHDXBB7wAhAwywAwsgASAERw1pQeoAIQMMrwMLIAEgBEcNZUHoACEDDK4DCyABIARHDWJB5gAhAwytAwsgASAERw0aQRghAwysAwsgASAERw0VQRIhAwyrAwsgASAERw1CQcUAIQMMqgMLIAEgBEcNNEE/IQMMqQMLIAEgBEcNMkE8IQMMqAMLIAEgBEcNK0ExIQMMpwMLIAItAC5BAUYNnwMMwQILQQAhAAJAAkACQCACLQAqRQ0AIAItACtFDQAgAi8BMCIDQQJxRQ0BDAILIAIvATAiA0EBcUUNAQtBASEAIAItAChBAUYNACACLwEyIgVB5ABrQeQASQ0AIAVBzAFGDQAgBUGwAkYNACADQcAAcQ0AQQAhACADQYgEcUGABEYNACADQShxQQBHIQALIAJBADsBMCACQQA6AC8gAEUN3wIgAkIANwMgDOACC0EAIQACQCACKAI4IgNFDQAgAygCLCIDRQ0AIAIgAxEAACEACyAARQ3MASAAQRVHDd0CIAJBBDYCHCACIAE2AhQgAkGwGDYCECACQRU2AgxBACEDDKQDCyABIARGBEBBBiEDDKQDCyABQQFqIQFBACEAAkAgAigCOCIDRQ0AIAMoAlQiA0UNACACIAMRAAAhAAsgAA3ZAgwcCyACQgA3AyBBEiEDDIkDCyABIARHDRZBHSEDDKEDCyABIARHBEAgAUEBaiEBQRAhAwyIAwtBByEDDKADCyACIAIpAyAiCiAEIAFrrSILfSIMQgAgCiAMWhs3AyAgCiALWA3UAkEIIQMMnwMLIAEgBEcEQCACQQk2AgggAiABNgIEQRQhAwyGAwtBCSEDDJ4DCyACKQMgQgBSDccBIAIgAi8BMEGAAXI7ATAMQgsgASAERw0/QdAAIQMMnAMLIAEgBEYEQEELIQMMnAMLIAFBAWohAUEAIQACQCACKAI4IgNFDQAgAygCUCIDRQ0AIAIgAxEAACEACyAADc8CDMYBC0EAIQACQCACKAI4IgNFDQAgAygCSCIDRQ0AIAIgAxEAACEACyAARQ3GASAAQRVHDc0CIAJBCzYCHCACIAE2AhQgAkGCGTYCECACQRU2AgxBACEDDJoDC0EAIQACQCACKAI4IgNFDQAgAygCSCIDRQ0AIAIgAxEAACEACyAARQ0MIABBFUcNygIgAkEaNgIcIAIgATYCFCACQYIZNgIQIAJBFTYCDEEAIQMMmQMLQQAhAAJAIAIoAjgiA0UNACADKAJMIgNFDQAgAiADEQAAIQALIABFDcQBIABBFUcNxwIgAkELNgIcIAIgATYCFCACQZEXNgIQIAJBFTYCDEEAIQMMmAMLIAEgBEYEQEEPIQMMmAMLIAEtAAAiAEE7Rg0HIABBDUcNxAIgAUEBaiEBDMMBC0EAIQACQCACKAI4IgNFDQAgAygCTCIDRQ0AIAIgAxEAACEACyAARQ3DASAAQRVHDcICIAJBDzYCHCACIAE2AhQgAkGRFzYCECACQRU2AgxBACEDDJYDCwNAIAEtAABB8DVqLQAAIgBBAUcEQCAAQQJHDcECIAIoAgQhAEEAIQMgAkEANgIEIAIgACABQQFqIgEQLSIADcICDMUBCyAEIAFBAWoiAUcNAAtBEiEDDJUDC0EAIQACQCACKAI4IgNFDQAgAygCTCIDRQ0AIAIgAxEAACEACyAARQ3FASAAQRVHDb0CIAJBGzYCHCACIAE2AhQgAkGRFzYCECACQRU2AgxBACEDDJQDCyABIARGBEBBFiEDDJQDCyACQQo2AgggAiABNgIEQQAhAAJAIAIoAjgiA0UNACADKAJIIgNFDQAgAiADEQAAIQALIABFDcIBIABBFUcNuQIgAkEVNgIcIAIgATYCFCACQYIZNgIQIAJBFTYCDEEAIQMMkwMLIAEgBEcEQANAIAEtAABB8DdqLQAAIgBBAkcEQAJAIABBAWsOBMQCvQIAvgK9AgsgAUEBaiEBQQghAwz8AgsgBCABQQFqIgFHDQALQRUhAwyTAwtBFSEDDJIDCwNAIAEtAABB8DlqLQAAIgBBAkcEQCAAQQFrDgTFArcCwwK4ArcCCyAEIAFBAWoiAUcNAAtBGCEDDJEDCyABIARHBEAgAkELNgIIIAIgATYCBEEHIQMM+AILQRkhAwyQAwsgAUEBaiEBDAILIAEgBEYEQEEaIQMMjwMLAkAgAS0AAEENaw4UtQG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwEAvwELQQAhAyACQQA2AhwgAkGvCzYCECACQQI2AgwgAiABQQFqNgIUDI4DCyABIARGBEBBGyEDDI4DCyABLQAAIgBBO0cEQCAAQQ1HDbECIAFBAWohAQy6AQsgAUEBaiEBC0EiIQMM8wILIAEgBEYEQEEcIQMMjAMLQgAhCgJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAS0AAEEwaw43wQLAAgABAgMEBQYH0AHQAdAB0AHQAdAB0AEICQoLDA3QAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdABDg8QERIT0AELQgIhCgzAAgtCAyEKDL8CC0IEIQoMvgILQgUhCgy9AgtCBiEKDLwCC0IHIQoMuwILQgghCgy6AgtCCSEKDLkCC0IKIQoMuAILQgshCgy3AgtCDCEKDLYCC0INIQoMtQILQg4hCgy0AgtCDyEKDLMCC0IKIQoMsgILQgshCgyxAgtCDCEKDLACC0INIQoMrwILQg4hCgyuAgtCDyEKDK0CC0IAIQoCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEtAABBMGsON8ACvwIAAQIDBAUGB74CvgK+Ar4CvgK+Ar4CCAkKCwwNvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ag4PEBESE74CC0ICIQoMvwILQgMhCgy+AgtCBCEKDL0CC0IFIQoMvAILQgYhCgy7AgtCByEKDLoCC0IIIQoMuQILQgkhCgy4AgtCCiEKDLcCC0ILIQoMtgILQgwhCgy1AgtCDSEKDLQCC0IOIQoMswILQg8hCgyyAgtCCiEKDLECC0ILIQoMsAILQgwhCgyvAgtCDSEKDK4CC0IOIQoMrQILQg8hCgysAgsgAiACKQMgIgogBCABa60iC30iDEIAIAogDFobNwMgIAogC1gNpwJBHyEDDIkDCyABIARHBEAgAkEJNgIIIAIgATYCBEElIQMM8AILQSAhAwyIAwtBASEFIAIvATAiA0EIcUUEQCACKQMgQgBSIQULAkAgAi0ALgRAQQEhACACLQApQQVGDQEgA0HAAHFFIAVxRQ0BC0EAIQAgA0HAAHENAEECIQAgA0EIcQ0AIANBgARxBEACQCACLQAoQQFHDQAgAi0ALUEKcQ0AQQUhAAwCC0EEIQAMAQsgA0EgcUUEQAJAIAItAChBAUYNACACLwEyIgBB5ABrQeQASQ0AIABBzAFGDQAgAEGwAkYNAEEEIQAgA0EocUUNAiADQYgEcUGABEYNAgtBACEADAELQQBBAyACKQMgUBshAAsgAEEBaw4FvgIAsAEBpAKhAgtBESEDDO0CCyACQQE6AC8MhAMLIAEgBEcNnQJBJCEDDIQDCyABIARHDRxBxgAhAwyDAwtBACEAAkAgAigCOCIDRQ0AIAMoAkQiA0UNACACIAMRAAAhAAsgAEUNJyAAQRVHDZgCIAJB0AA2AhwgAiABNgIUIAJBkRg2AhAgAkEVNgIMQQAhAwyCAwsgASAERgRAQSghAwyCAwtBACEDIAJBADYCBCACQQw2AgggAiABIAEQKiIARQ2UAiACQSc2AhwgAiABNgIUIAIgADYCDAyBAwsgASAERgRAQSkhAwyBAwsgAS0AACIAQSBGDRMgAEEJRw2VAiABQQFqIQEMFAsgASAERwRAIAFBAWohAQwWC0EqIQMM/wILIAEgBEYEQEErIQMM/wILIAEtAAAiAEEJRyAAQSBHcQ2QAiACLQAsQQhHDd0CIAJBADoALAzdAgsgASAERgRAQSwhAwz+AgsgAS0AAEEKRw2OAiABQQFqIQEMsAELIAEgBEcNigJBLyEDDPwCCwNAIAEtAAAiAEEgRwRAIABBCmsOBIQCiAKIAoQChgILIAQgAUEBaiIBRw0AC0ExIQMM+wILQTIhAyABIARGDfoCIAIoAgAiACAEIAFraiEHIAEgAGtBA2ohBgJAA0AgAEHwO2otAAAgAS0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDQEgAEEDRgRAQQYhAQziAgsgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAc2AgAM+wILIAJBADYCAAyGAgtBMyEDIAQgASIARg35AiAEIAFrIAIoAgAiAWohByAAIAFrQQhqIQYCQANAIAFB9DtqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBCEYEQEEFIQEM4QILIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADPoCCyACQQA2AgAgACEBDIUCC0E0IQMgBCABIgBGDfgCIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgJAA0AgAUHQwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBBUYEQEEHIQEM4AILIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADPkCCyACQQA2AgAgACEBDIQCCyABIARHBEADQCABLQAAQYA+ai0AACIAQQFHBEAgAEECRg0JDIECCyAEIAFBAWoiAUcNAAtBMCEDDPgCC0EwIQMM9wILIAEgBEcEQANAIAEtAAAiAEEgRwRAIABBCmsOBP8B/gH+Af8B/gELIAQgAUEBaiIBRw0AC0E4IQMM9wILQTghAwz2AgsDQCABLQAAIgBBIEcgAEEJR3EN9gEgBCABQQFqIgFHDQALQTwhAwz1AgsDQCABLQAAIgBBIEcEQAJAIABBCmsOBPkBBAT5AQALIABBLEYN9QEMAwsgBCABQQFqIgFHDQALQT8hAwz0AgtBwAAhAyABIARGDfMCIAIoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAEGAQGstAAAgAS0AAEEgckcNASAAQQZGDdsCIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPQCCyACQQA2AgALQTYhAwzZAgsgASAERgRAQcEAIQMM8gILIAJBDDYCCCACIAE2AgQgAi0ALEEBaw4E+wHuAewB6wHUAgsgAUEBaiEBDPoBCyABIARHBEADQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxIgBBCUYNACAAQSBGDQACQAJAAkACQCAAQeMAaw4TAAMDAwMDAwMBAwMDAwMDAwMDAgMLIAFBAWohAUExIQMM3AILIAFBAWohAUEyIQMM2wILIAFBAWohAUEzIQMM2gILDP4BCyAEIAFBAWoiAUcNAAtBNSEDDPACC0E1IQMM7wILIAEgBEcEQANAIAEtAABBgDxqLQAAQQFHDfcBIAQgAUEBaiIBRw0AC0E9IQMM7wILQT0hAwzuAgtBACEAAkAgAigCOCIDRQ0AIAMoAkAiA0UNACACIAMRAAAhAAsgAEUNASAAQRVHDeYBIAJBwgA2AhwgAiABNgIUIAJB4xg2AhAgAkEVNgIMQQAhAwztAgsgAUEBaiEBC0E8IQMM0gILIAEgBEYEQEHCACEDDOsCCwJAA0ACQCABLQAAQQlrDhgAAswCzALRAswCzALMAswCzALMAswCzALMAswCzALMAswCzALMAswCzALMAgDMAgsgBCABQQFqIgFHDQALQcIAIQMM6wILIAFBAWohASACLQAtQQFxRQ3+AQtBLCEDDNACCyABIARHDd4BQcQAIQMM6AILA0AgAS0AAEGQwABqLQAAQQFHDZwBIAQgAUEBaiIBRw0AC0HFACEDDOcCCyABLQAAIgBBIEYN/gEgAEE6Rw3AAiACKAIEIQBBACEDIAJBADYCBCACIAAgARApIgAN3gEM3QELQccAIQMgBCABIgBGDeUCIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgNAIAFBkMIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNvwIgAUEFRg3CAiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBzYCAAzlAgtByAAhAyAEIAEiAEYN5AIgBCABayACKAIAIgFqIQcgACABa0EJaiEGA0AgAUGWwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw2+AkECIAFBCUYNwgIaIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADOQCCyABIARGBEBByQAhAwzkAgsCQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxQe4Aaw4HAL8CvwK/Ar8CvwIBvwILIAFBAWohAUE+IQMMywILIAFBAWohAUE/IQMMygILQcoAIQMgBCABIgBGDeICIAQgAWsgAigCACIBaiEGIAAgAWtBAWohBwNAIAFBoMIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNvAIgAUEBRg2+AiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBjYCAAziAgtBywAhAyAEIAEiAEYN4QIgBCABayACKAIAIgFqIQcgACABa0EOaiEGA0AgAUGiwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw27AiABQQ5GDb4CIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADOECC0HMACEDIAQgASIARg3gAiAEIAFrIAIoAgAiAWohByAAIAFrQQ9qIQYDQCABQcDCAGotAAAgAC0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDboCQQMgAUEPRg2+AhogAUEBaiEBIAQgAEEBaiIARw0ACyACIAc2AgAM4AILQc0AIQMgBCABIgBGDd8CIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgNAIAFB0MIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNuQJBBCABQQVGDb0CGiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBzYCAAzfAgsgASAERgRAQc4AIQMM3wILAkACQAJAAkAgAS0AACIAQSByIAAgAEHBAGtB/wFxQRpJG0H/AXFB4wBrDhMAvAK8ArwCvAK8ArwCvAK8ArwCvAK8ArwCAbwCvAK8AgIDvAILIAFBAWohAUHBACEDDMgCCyABQQFqIQFBwgAhAwzHAgsgAUEBaiEBQcMAIQMMxgILIAFBAWohAUHEACEDDMUCCyABIARHBEAgAkENNgIIIAIgATYCBEHFACEDDMUCC0HPACEDDN0CCwJAAkAgAS0AAEEKaw4EAZABkAEAkAELIAFBAWohAQtBKCEDDMMCCyABIARGBEBB0QAhAwzcAgsgAS0AAEEgRw0AIAFBAWohASACLQAtQQFxRQ3QAQtBFyEDDMECCyABIARHDcsBQdIAIQMM2QILQdMAIQMgASAERg3YAiACKAIAIgAgBCABa2ohBiABIABrQQFqIQUDQCABLQAAIABB1sIAai0AAEcNxwEgAEEBRg3KASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBjYCAAzYAgsgASAERgRAQdUAIQMM2AILIAEtAABBCkcNwgEgAUEBaiEBDMoBCyABIARGBEBB1gAhAwzXAgsCQAJAIAEtAABBCmsOBADDAcMBAcMBCyABQQFqIQEMygELIAFBAWohAUHKACEDDL0CC0EAIQACQCACKAI4IgNFDQAgAygCPCIDRQ0AIAIgAxEAACEACyAADb8BQc0AIQMMvAILIAItAClBIkYNzwIMiQELIAQgASIFRgRAQdsAIQMM1AILQQAhAEEBIQFBASEGQQAhAwJAAn8CQAJAAkACQAJAAkACQCAFLQAAQTBrDgrFAcQBAAECAwQFBgjDAQtBAgwGC0EDDAULQQQMBAtBBQwDC0EGDAILQQcMAQtBCAshA0EAIQFBACEGDL0BC0EJIQNBASEAQQAhAUEAIQYMvAELIAEgBEYEQEHdACEDDNMCCyABLQAAQS5HDbgBIAFBAWohAQyIAQsgASAERw22AUHfACEDDNECCyABIARHBEAgAkEONgIIIAIgATYCBEHQACEDDLgCC0HgACEDDNACC0HhACEDIAEgBEYNzwIgAigCACIAIAQgAWtqIQUgASAAa0EDaiEGA0AgAS0AACAAQeLCAGotAABHDbEBIABBA0YNswEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMzwILQeIAIQMgASAERg3OAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYDQCABLQAAIABB5sIAai0AAEcNsAEgAEECRg2vASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAzOAgtB4wAhAyABIARGDc0CIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgNAIAEtAAAgAEHpwgBqLQAARw2vASAAQQNGDa0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADM0CCyABIARGBEBB5QAhAwzNAgsgAUEBaiEBQQAhAAJAIAIoAjgiA0UNACADKAIwIgNFDQAgAiADEQAAIQALIAANqgFB1gAhAwyzAgsgASAERwRAA0AgAS0AACIAQSBHBEACQAJAAkAgAEHIAGsOCwABswGzAbMBswGzAbMBswGzAQKzAQsgAUEBaiEBQdIAIQMMtwILIAFBAWohAUHTACEDDLYCCyABQQFqIQFB1AAhAwy1AgsgBCABQQFqIgFHDQALQeQAIQMMzAILQeQAIQMMywILA0AgAS0AAEHwwgBqLQAAIgBBAUcEQCAAQQJrDgOnAaYBpQGkAQsgBCABQQFqIgFHDQALQeYAIQMMygILIAFBAWogASAERw0CGkHnACEDDMkCCwNAIAEtAABB8MQAai0AACIAQQFHBEACQCAAQQJrDgSiAaEBoAEAnwELQdcAIQMMsQILIAQgAUEBaiIBRw0AC0HoACEDDMgCCyABIARGBEBB6QAhAwzIAgsCQCABLQAAIgBBCmsOGrcBmwGbAbQBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBpAGbAZsBAJkBCyABQQFqCyEBQQYhAwytAgsDQCABLQAAQfDGAGotAABBAUcNfSAEIAFBAWoiAUcNAAtB6gAhAwzFAgsgAUEBaiABIARHDQIaQesAIQMMxAILIAEgBEYEQEHsACEDDMQCCyABQQFqDAELIAEgBEYEQEHtACEDDMMCCyABQQFqCyEBQQQhAwyoAgsgASAERgRAQe4AIQMMwQILAkACQAJAIAEtAABB8MgAai0AAEEBaw4HkAGPAY4BAHwBAo0BCyABQQFqIQEMCwsgAUEBagyTAQtBACEDIAJBADYCHCACQZsSNgIQIAJBBzYCDCACIAFBAWo2AhQMwAILAkADQCABLQAAQfDIAGotAAAiAEEERwRAAkACQCAAQQFrDgeUAZMBkgGNAQAEAY0BC0HaACEDDKoCCyABQQFqIQFB3AAhAwypAgsgBCABQQFqIgFHDQALQe8AIQMMwAILIAFBAWoMkQELIAQgASIARgRAQfAAIQMMvwILIAAtAABBL0cNASAAQQFqIQEMBwsgBCABIgBGBEBB8QAhAwy+AgsgAC0AACIBQS9GBEAgAEEBaiEBQd0AIQMMpQILIAFBCmsiA0EWSw0AIAAhAUEBIAN0QYmAgAJxDfkBC0EAIQMgAkEANgIcIAIgADYCFCACQYwcNgIQIAJBBzYCDAy8AgsgASAERwRAIAFBAWohAUHeACEDDKMCC0HyACEDDLsCCyABIARGBEBB9AAhAwy7AgsCQCABLQAAQfDMAGotAABBAWsOA/cBcwCCAQtB4QAhAwyhAgsgASAERwRAA0AgAS0AAEHwygBqLQAAIgBBA0cEQAJAIABBAWsOAvkBAIUBC0HfACEDDKMCCyAEIAFBAWoiAUcNAAtB8wAhAwy6AgtB8wAhAwy5AgsgASAERwRAIAJBDzYCCCACIAE2AgRB4AAhAwygAgtB9QAhAwy4AgsgASAERgRAQfYAIQMMuAILIAJBDzYCCCACIAE2AgQLQQMhAwydAgsDQCABLQAAQSBHDY4CIAQgAUEBaiIBRw0AC0H3ACEDDLUCCyABIARGBEBB+AAhAwy1AgsgAS0AAEEgRw16IAFBAWohAQxbC0EAIQACQCACKAI4IgNFDQAgAygCOCIDRQ0AIAIgAxEAACEACyAADXgMgAILIAEgBEYEQEH6ACEDDLMCCyABLQAAQcwARw10IAFBAWohAUETDHYLQfsAIQMgASAERg2xAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYDQCABLQAAIABB8M4Aai0AAEcNcyAAQQVGDXUgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMsQILIAEgBEYEQEH8ACEDDLECCwJAAkAgAS0AAEHDAGsODAB0dHR0dHR0dHR0AXQLIAFBAWohAUHmACEDDJgCCyABQQFqIQFB5wAhAwyXAgtB/QAhAyABIARGDa8CIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQe3PAGotAABHDXIgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADLACCyACQQA2AgAgBkEBaiEBQRAMcwtB/gAhAyABIARGDa4CIAIoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQfbOAGotAABHDXEgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADK8CCyACQQA2AgAgBkEBaiEBQRYMcgtB/wAhAyABIARGDa0CIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQfzOAGotAABHDXAgAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADK4CCyACQQA2AgAgBkEBaiEBQQUMcQsgASAERgRAQYABIQMMrQILIAEtAABB2QBHDW4gAUEBaiEBQQgMcAsgASAERgRAQYEBIQMMrAILAkACQCABLQAAQc4Aaw4DAG8BbwsgAUEBaiEBQesAIQMMkwILIAFBAWohAUHsACEDDJICCyABIARGBEBBggEhAwyrAgsCQAJAIAEtAABByABrDggAbm5ubm5uAW4LIAFBAWohAUHqACEDDJICCyABQQFqIQFB7QAhAwyRAgtBgwEhAyABIARGDakCIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQYDPAGotAABHDWwgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADKoCCyACQQA2AgAgBkEBaiEBQQAMbQtBhAEhAyABIARGDagCIAIoAgAiACAEIAFraiEFIAEgAGtBBGohBgJAA0AgAS0AACAAQYPPAGotAABHDWsgAEEERg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADKkCCyACQQA2AgAgBkEBaiEBQSMMbAsgASAERgRAQYUBIQMMqAILAkACQCABLQAAQcwAaw4IAGtra2trawFrCyABQQFqIQFB7wAhAwyPAgsgAUEBaiEBQfAAIQMMjgILIAEgBEYEQEGGASEDDKcCCyABLQAAQcUARw1oIAFBAWohAQxgC0GHASEDIAEgBEYNpQIgAigCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBiM8Aai0AAEcNaCAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMpgILIAJBADYCACAGQQFqIQFBLQxpC0GIASEDIAEgBEYNpAIgAigCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABB0M8Aai0AAEcNZyAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMpQILIAJBADYCACAGQQFqIQFBKQxoCyABIARGBEBBiQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEVDF8LQZIBIQMgASAERg2aAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGhzwBqLQAARw1dIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAybAgsgAkEANgIAIAZBAWohAUEeDF4LIAEgBEYEQEGTASEDDJoCCyABLQAAQcwARw1bIAFBAWohAUEKDF0LIAEgBEYEQEGUASEDDJkCCwJAAkAgAS0AAEHBAGsODwBcXFxcXFxcXFxcXFxcAVwLIAFBAWohAUH+ACEDDIACCyABQQFqIQFB/wAhAwz/AQsgASAERgRAQZUBIQMMmAILAkACQCABLQAAQcEAaw4DAFsBWwsgAUEBaiEBQf0AIQMM/wELIAFBAWohAUGAASEDDP4BC0GWASEDIAEgBEYNlgIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBp88Aai0AAEcNWSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlwILIAJBADYCACAGQQFqIQFBCwxaCyABIARGBEBBlwEhAwyWAgsCQAJAAkACQCABLQAAQS1rDiMAW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1sBW1tbW1sCW1tbA1sLIAFBAWohAUH7ACEDDP8BCyABQQFqIQFB/AAhAwz+AQsgAUEBaiEBQYEBIQMM/QELIAFBAWohAUGCASEDDPwBC0GYASEDIAEgBEYNlAIgAigCACIAIAQgAWtqIQUgASAAa0EEaiEGAkADQCABLQAAIABBqc8Aai0AAEcNVyAAQQRGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlQILIAJBADYCACAGQQFqIQFBGQxYC0GZASEDIAEgBEYNkwIgAigCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBrs8Aai0AAEcNViAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlAILIAJBADYCACAGQQFqIQFBBgxXC0GaASEDIAEgBEYNkgIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBtM8Aai0AAEcNVSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMkwILIAJBADYCACAGQQFqIQFBHAxWC0GbASEDIAEgBEYNkQIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBts8Aai0AAEcNVCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMkgILIAJBADYCACAGQQFqIQFBJwxVCyABIARGBEBBnAEhAwyRAgsCQAJAIAEtAABB1ABrDgIAAVQLIAFBAWohAUGGASEDDPgBCyABQQFqIQFBhwEhAwz3AQtBnQEhAyABIARGDY8CIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbjPAGotAABHDVIgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADJACCyACQQA2AgAgBkEBaiEBQSYMUwtBngEhAyABIARGDY4CIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbrPAGotAABHDVEgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI8CCyACQQA2AgAgBkEBaiEBQQMMUgtBnwEhAyABIARGDY0CIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQe3PAGotAABHDVAgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI4CCyACQQA2AgAgBkEBaiEBQQwMUQtBoAEhAyABIARGDYwCIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQbzPAGotAABHDU8gAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI0CCyACQQA2AgAgBkEBaiEBQQ0MUAsgASAERgRAQaEBIQMMjAILAkACQCABLQAAQcYAaw4LAE9PT09PT09PTwFPCyABQQFqIQFBiwEhAwzzAQsgAUEBaiEBQYwBIQMM8gELIAEgBEYEQEGiASEDDIsCCyABLQAAQdAARw1MIAFBAWohAQxGCyABIARGBEBBowEhAwyKAgsCQAJAIAEtAABByQBrDgcBTU1NTU0ATQsgAUEBaiEBQY4BIQMM8QELIAFBAWohAUEiDE0LQaQBIQMgASAERg2IAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHAzwBqLQAARw1LIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyJAgsgAkEANgIAIAZBAWohAUEdDEwLIAEgBEYEQEGlASEDDIgCCwJAAkAgAS0AAEHSAGsOAwBLAUsLIAFBAWohAUGQASEDDO8BCyABQQFqIQFBBAxLCyABIARGBEBBpgEhAwyHAgsCQAJAAkACQAJAIAEtAABBwQBrDhUATU1NTU1NTU1NTQFNTQJNTQNNTQRNCyABQQFqIQFBiAEhAwzxAQsgAUEBaiEBQYkBIQMM8AELIAFBAWohAUGKASEDDO8BCyABQQFqIQFBjwEhAwzuAQsgAUEBaiEBQZEBIQMM7QELQacBIQMgASAERg2FAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHtzwBqLQAARw1IIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyGAgsgAkEANgIAIAZBAWohAUERDEkLQagBIQMgASAERg2EAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHCzwBqLQAARw1HIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyFAgsgAkEANgIAIAZBAWohAUEsDEgLQakBIQMgASAERg2DAiACKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEHFzwBqLQAARw1GIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyEAgsgAkEANgIAIAZBAWohAUErDEcLQaoBIQMgASAERg2CAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHKzwBqLQAARw1FIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyDAgsgAkEANgIAIAZBAWohAUEUDEYLIAEgBEYEQEGrASEDDIICCwJAAkACQAJAIAEtAABBwgBrDg8AAQJHR0dHR0dHR0dHRwNHCyABQQFqIQFBkwEhAwzrAQsgAUEBaiEBQZQBIQMM6gELIAFBAWohAUGVASEDDOkBCyABQQFqIQFBlgEhAwzoAQsgASAERgRAQawBIQMMgQILIAEtAABBxQBHDUIgAUEBaiEBDD0LQa0BIQMgASAERg3/ASACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHNzwBqLQAARw1CIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyAAgsgAkEANgIAIAZBAWohAUEODEMLIAEgBEYEQEGuASEDDP8BCyABLQAAQdAARw1AIAFBAWohAUElDEILQa8BIQMgASAERg39ASACKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEHQzwBqLQAARw1AIABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz+AQsgAkEANgIAIAZBAWohAUEqDEELIAEgBEYEQEGwASEDDP0BCwJAAkAgAS0AAEHVAGsOCwBAQEBAQEBAQEABQAsgAUEBaiEBQZoBIQMM5AELIAFBAWohAUGbASEDDOMBCyABIARGBEBBsQEhAwz8AQsCQAJAIAEtAABBwQBrDhQAPz8/Pz8/Pz8/Pz8/Pz8/Pz8/AT8LIAFBAWohAUGZASEDDOMBCyABQQFqIQFBnAEhAwziAQtBsgEhAyABIARGDfoBIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQdnPAGotAABHDT0gAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPsBCyACQQA2AgAgBkEBaiEBQSEMPgtBswEhAyABIARGDfkBIAIoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAS0AACAAQd3PAGotAABHDTwgAEEGRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPoBCyACQQA2AgAgBkEBaiEBQRoMPQsgASAERgRAQbQBIQMM+QELAkACQAJAIAEtAABBxQBrDhEAPT09PT09PT09AT09PT09Aj0LIAFBAWohAUGdASEDDOEBCyABQQFqIQFBngEhAwzgAQsgAUEBaiEBQZ8BIQMM3wELQbUBIQMgASAERg33ASACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHkzwBqLQAARw06IABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz4AQsgAkEANgIAIAZBAWohAUEoDDsLQbYBIQMgASAERg32ASACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHqzwBqLQAARw05IABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz3AQsgAkEANgIAIAZBAWohAUEHDDoLIAEgBEYEQEG3ASEDDPYBCwJAAkAgAS0AAEHFAGsODgA5OTk5OTk5OTk5OTkBOQsgAUEBaiEBQaEBIQMM3QELIAFBAWohAUGiASEDDNwBC0G4ASEDIAEgBEYN9AEgAigCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABB7c8Aai0AAEcNNyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM9QELIAJBADYCACAGQQFqIQFBEgw4C0G5ASEDIAEgBEYN8wEgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8M8Aai0AAEcNNiAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM9AELIAJBADYCACAGQQFqIQFBIAw3C0G6ASEDIAEgBEYN8gEgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8s8Aai0AAEcNNSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM8wELIAJBADYCACAGQQFqIQFBDww2CyABIARGBEBBuwEhAwzyAQsCQAJAIAEtAABByQBrDgcANTU1NTUBNQsgAUEBaiEBQaUBIQMM2QELIAFBAWohAUGmASEDDNgBC0G8ASEDIAEgBEYN8AEgAigCACIAIAQgAWtqIQUgASAAa0EHaiEGAkADQCABLQAAIABB9M8Aai0AAEcNMyAAQQdGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM8QELIAJBADYCACAGQQFqIQFBGww0CyABIARGBEBBvQEhAwzwAQsCQAJAAkAgAS0AAEHCAGsOEgA0NDQ0NDQ0NDQBNDQ0NDQ0AjQLIAFBAWohAUGkASEDDNgBCyABQQFqIQFBpwEhAwzXAQsgAUEBaiEBQagBIQMM1gELIAEgBEYEQEG+ASEDDO8BCyABLQAAQc4ARw0wIAFBAWohAQwsCyABIARGBEBBvwEhAwzuAQsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABLQAAQcEAaw4VAAECAz8EBQY/Pz8HCAkKCz8MDQ4PPwsgAUEBaiEBQegAIQMM4wELIAFBAWohAUHpACEDDOIBCyABQQFqIQFB7gAhAwzhAQsgAUEBaiEBQfIAIQMM4AELIAFBAWohAUHzACEDDN8BCyABQQFqIQFB9gAhAwzeAQsgAUEBaiEBQfcAIQMM3QELIAFBAWohAUH6ACEDDNwBCyABQQFqIQFBgwEhAwzbAQsgAUEBaiEBQYQBIQMM2gELIAFBAWohAUGFASEDDNkBCyABQQFqIQFBkgEhAwzYAQsgAUEBaiEBQZgBIQMM1wELIAFBAWohAUGgASEDDNYBCyABQQFqIQFBowEhAwzVAQsgAUEBaiEBQaoBIQMM1AELIAEgBEcEQCACQRA2AgggAiABNgIEQasBIQMM1AELQcABIQMM7AELQQAhAAJAIAIoAjgiA0UNACADKAI0IgNFDQAgAiADEQAAIQALIABFDV4gAEEVRw0HIAJB0QA2AhwgAiABNgIUIAJBsBc2AhAgAkEVNgIMQQAhAwzrAQsgAUEBaiABIARHDQgaQcIBIQMM6gELA0ACQCABLQAAQQprDgQIAAALAAsgBCABQQFqIgFHDQALQcMBIQMM6QELIAEgBEcEQCACQRE2AgggAiABNgIEQQEhAwzQAQtBxAEhAwzoAQsgASAERgRAQcUBIQMM6AELAkACQCABLQAAQQprDgQBKCgAKAsgAUEBagwJCyABQQFqDAULIAEgBEYEQEHGASEDDOcBCwJAAkAgAS0AAEEKaw4XAQsLAQsLCwsLCwsLCwsLCwsLCwsLCwALCyABQQFqIQELQbABIQMMzQELIAEgBEYEQEHIASEDDOYBCyABLQAAQSBHDQkgAkEAOwEyIAFBAWohAUGzASEDDMwBCwNAIAEhAAJAIAEgBEcEQCABLQAAQTBrQf8BcSIDQQpJDQEMJwtBxwEhAwzmAQsCQCACLwEyIgFBmTNLDQAgAiABQQpsIgU7ATIgBUH+/wNxIANB//8Dc0sNACAAQQFqIQEgAiADIAVqIgM7ATIgA0H//wNxQegHSQ0BCwtBACEDIAJBADYCHCACQcEJNgIQIAJBDTYCDCACIABBAWo2AhQM5AELIAJBADYCHCACIAE2AhQgAkHwDDYCECACQRs2AgxBACEDDOMBCyACKAIEIQAgAkEANgIEIAIgACABECYiAA0BIAFBAWoLIQFBrQEhAwzIAQsgAkHBATYCHCACIAA2AgwgAiABQQFqNgIUQQAhAwzgAQsgAigCBCEAIAJBADYCBCACIAAgARAmIgANASABQQFqCyEBQa4BIQMMxQELIAJBwgE2AhwgAiAANgIMIAIgAUEBajYCFEEAIQMM3QELIAJBADYCHCACIAE2AhQgAkGXCzYCECACQQ02AgxBACEDDNwBCyACQQA2AhwgAiABNgIUIAJB4xA2AhAgAkEJNgIMQQAhAwzbAQsgAkECOgAoDKwBC0EAIQMgAkEANgIcIAJBrws2AhAgAkECNgIMIAIgAUEBajYCFAzZAQtBAiEDDL8BC0ENIQMMvgELQSYhAwy9AQtBFSEDDLwBC0EWIQMMuwELQRghAwy6AQtBHCEDDLkBC0EdIQMMuAELQSAhAwy3AQtBISEDDLYBC0EjIQMMtQELQcYAIQMMtAELQS4hAwyzAQtBPSEDDLIBC0HLACEDDLEBC0HOACEDDLABC0HYACEDDK8BC0HZACEDDK4BC0HbACEDDK0BC0HxACEDDKwBC0H0ACEDDKsBC0GNASEDDKoBC0GXASEDDKkBC0GpASEDDKgBC0GvASEDDKcBC0GxASEDDKYBCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJB8Rs2AhAgAkEGNgIMDL0BCyACQQA2AgAgBkEBaiEBQSQLOgApIAIoAgQhACACQQA2AgQgAiAAIAEQJyIARQRAQeUAIQMMowELIAJB+QA2AhwgAiABNgIUIAIgADYCDEEAIQMMuwELIABBFUcEQCACQQA2AhwgAiABNgIUIAJBzA42AhAgAkEgNgIMQQAhAwy7AQsgAkH4ADYCHCACIAE2AhQgAkHKGDYCECACQRU2AgxBACEDDLoBCyACQQA2AhwgAiABNgIUIAJBjhs2AhAgAkEGNgIMQQAhAwy5AQsgAkEANgIcIAIgATYCFCACQf4RNgIQIAJBBzYCDEEAIQMMuAELIAJBADYCHCACIAE2AhQgAkGMHDYCECACQQc2AgxBACEDDLcBCyACQQA2AhwgAiABNgIUIAJBww82AhAgAkEHNgIMQQAhAwy2AQsgAkEANgIcIAIgATYCFCACQcMPNgIQIAJBBzYCDEEAIQMMtQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxBACEDDKIBCyACQeQANgIcIAIgATYCFCACQeMXNgIQIAJBFTYCDEEAIQMMoQELIAJBADYCACAGQQFqIQEgAi0AKSIAQSNrQQtJDQQCQCAAQQZLDQBBASAAdEHKAHFFDQAMBQtBACEDIAJBADYCHCACIAE2AhQgAkH3CTYCECACQQg2AgwMoAELIAJBADYCACAGQQFqIQEgAi0AKUEhRg0DIAJBADYCHCACIAE2AhQgAkGbCjYCECACQQg2AgxBACEDDJ8BCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJBkDM2AhAgAkEINgIMDJ0BCyACQQA2AgAgBkEBaiEBIAItAClBI0kNACACQQA2AhwgAiABNgIUIAJB0wk2AhAgAkEINgIMQQAhAwycAQtB0QAhAwyCAQsgAS0AAEEwayIAQf8BcUEKSQRAIAIgADoAKiABQQFqIQFBzwAhAwyCAQsgAigCBCEAIAJBADYCBCACIAAgARAoIgBFDYYBIAJB3gA2AhwgAiABNgIUIAIgADYCDEEAIQMMmgELIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ2GASACQdwANgIcIAIgATYCFCACIAA2AgxBACEDDJkBCyACKAIEIQAgAkEANgIEIAIgACAFECgiAEUEQCAFIQEMhwELIAJB2gA2AhwgAiAFNgIUIAIgADYCDAyYAQtBACEBQQEhAwsgAiADOgArIAVBAWohAwJAAkACQCACLQAtQRBxDQACQAJAAkAgAi0AKg4DAQACBAsgBkUNAwwCCyAADQEMAgsgAUUNAQsgAigCBCEAIAJBADYCBCACIAAgAxAoIgBFBEAgAyEBDAILIAJB2AA2AhwgAiADNgIUIAIgADYCDEEAIQMMmAELIAIoAgQhACACQQA2AgQgAiAAIAMQKCIARQRAIAMhAQyHAQsgAkHZADYCHCACIAM2AhQgAiAANgIMQQAhAwyXAQtBzAAhAwx9CyAAQRVHBEAgAkEANgIcIAIgATYCFCACQZQNNgIQIAJBITYCDEEAIQMMlgELIAJB1wA2AhwgAiABNgIUIAJByRc2AhAgAkEVNgIMQQAhAwyVAQtBACEDIAJBADYCHCACIAE2AhQgAkGAETYCECACQQk2AgwMlAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0AIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMkwELQckAIQMMeQsgAkEANgIcIAIgATYCFCACQcEoNgIQIAJBBzYCDCACQQA2AgBBACEDDJEBCyACKAIEIQBBACEDIAJBADYCBCACIAAgARAlIgBFDQAgAkHSADYCHCACIAE2AhQgAiAANgIMDJABC0HIACEDDHYLIAJBADYCACAFIQELIAJBgBI7ASogAUEBaiEBQQAhAAJAIAIoAjgiA0UNACADKAIwIgNFDQAgAiADEQAAIQALIAANAQtBxwAhAwxzCyAAQRVGBEAgAkHRADYCHCACIAE2AhQgAkHjFzYCECACQRU2AgxBACEDDIwBC0EAIQMgAkEANgIcIAIgATYCFCACQbkNNgIQIAJBGjYCDAyLAQtBACEDIAJBADYCHCACIAE2AhQgAkGgGTYCECACQR42AgwMigELIAEtAABBOkYEQCACKAIEIQBBACEDIAJBADYCBCACIAAgARApIgBFDQEgAkHDADYCHCACIAA2AgwgAiABQQFqNgIUDIoBC0EAIQMgAkEANgIcIAIgATYCFCACQbERNgIQIAJBCjYCDAyJAQsgAUEBaiEBQTshAwxvCyACQcMANgIcIAIgADYCDCACIAFBAWo2AhQMhwELQQAhAyACQQA2AhwgAiABNgIUIAJB8A42AhAgAkEcNgIMDIYBCyACIAIvATBBEHI7ATAMZgsCQCACLwEwIgBBCHFFDQAgAi0AKEEBRw0AIAItAC1BCHFFDQMLIAIgAEH3+wNxQYAEcjsBMAwECyABIARHBEACQANAIAEtAABBMGsiAEH/AXFBCk8EQEE1IQMMbgsgAikDICIKQpmz5syZs+bMGVYNASACIApCCn4iCjcDICAKIACtQv8BgyILQn+FVg0BIAIgCiALfDcDICAEIAFBAWoiAUcNAAtBOSEDDIUBCyACKAIEIQBBACEDIAJBADYCBCACIAAgAUEBaiIBECoiAA0MDHcLQTkhAwyDAQsgAi0AMEEgcQ0GQcUBIQMMaQtBACEDIAJBADYCBCACIAEgARAqIgBFDQQgAkE6NgIcIAIgADYCDCACIAFBAWo2AhQMgQELIAItAChBAUcNACACLQAtQQhxRQ0BC0E3IQMMZgsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIABEAgAkE7NgIcIAIgADYCDCACIAFBAWo2AhQMfwsgAUEBaiEBDG4LIAJBCDoALAwECyABQQFqIQEMbQtBACEDIAJBADYCHCACIAE2AhQgAkHkEjYCECACQQQ2AgwMewsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIARQ1sIAJBNzYCHCACIAE2AhQgAiAANgIMDHoLIAIgAi8BMEEgcjsBMAtBMCEDDF8LIAJBNjYCHCACIAE2AhQgAiAANgIMDHcLIABBLEcNASABQQFqIQBBASEBAkACQAJAAkACQCACLQAsQQVrDgQDAQIEAAsgACEBDAQLQQIhAQwBC0EEIQELIAJBAToALCACIAIvATAgAXI7ATAgACEBDAELIAIgAi8BMEEIcjsBMCAAIQELQTkhAwxcCyACQQA6ACwLQTQhAwxaCyABIARGBEBBLSEDDHMLAkACQANAAkAgAS0AAEEKaw4EAgAAAwALIAQgAUEBaiIBRw0AC0EtIQMMdAsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIARQ0CIAJBLDYCHCACIAE2AhQgAiAANgIMDHMLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABECoiAEUEQCABQQFqIQEMAgsgAkEsNgIcIAIgADYCDCACIAFBAWo2AhQMcgsgAS0AAEENRgRAIAIoAgQhAEEAIQMgAkEANgIEIAIgACABECoiAEUEQCABQQFqIQEMAgsgAkEsNgIcIAIgADYCDCACIAFBAWo2AhQMcgsgAi0ALUEBcQRAQcQBIQMMWQsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIADQEMZQtBLyEDDFcLIAJBLjYCHCACIAE2AhQgAiAANgIMDG8LQQAhAyACQQA2AhwgAiABNgIUIAJB8BQ2AhAgAkEDNgIMDG4LQQEhAwJAAkACQAJAIAItACxBBWsOBAMBAgAECyACIAIvATBBCHI7ATAMAwtBAiEDDAELQQQhAwsgAkEBOgAsIAIgAi8BMCADcjsBMAtBKiEDDFMLQQAhAyACQQA2AhwgAiABNgIUIAJB4Q82AhAgAkEKNgIMDGsLQQEhAwJAAkACQAJAAkACQCACLQAsQQJrDgcFBAQDAQIABAsgAiACLwEwQQhyOwEwDAMLQQIhAwwBC0EEIQMLIAJBAToALCACIAIvATAgA3I7ATALQSshAwxSC0EAIQMgAkEANgIcIAIgATYCFCACQasSNgIQIAJBCzYCDAxqC0EAIQMgAkEANgIcIAIgATYCFCACQf0NNgIQIAJBHTYCDAxpCyABIARHBEADQCABLQAAQSBHDUggBCABQQFqIgFHDQALQSUhAwxpC0ElIQMMaAsgAi0ALUEBcQRAQcMBIQMMTwsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKSIABEAgAkEmNgIcIAIgADYCDCACIAFBAWo2AhQMaAsgAUEBaiEBDFwLIAFBAWohASACLwEwIgBBgAFxBEBBACEAAkAgAigCOCIDRQ0AIAMoAlQiA0UNACACIAMRAAAhAAsgAEUNBiAAQRVHDR8gAkEFNgIcIAIgATYCFCACQfkXNgIQIAJBFTYCDEEAIQMMZwsCQCAAQaAEcUGgBEcNACACLQAtQQJxDQBBACEDIAJBADYCHCACIAE2AhQgAkGWEzYCECACQQQ2AgwMZwsgAgJ/IAIvATBBFHFBFEYEQEEBIAItAChBAUYNARogAi8BMkHlAEYMAQsgAi0AKUEFRgs6AC5BACEAAkAgAigCOCIDRQ0AIAMoAiQiA0UNACACIAMRAAAhAAsCQAJAAkACQAJAIAAOFgIBAAQEBAQEBAQEBAQEBAQEBAQEBAMECyACQQE6AC4LIAIgAi8BMEHAAHI7ATALQSchAwxPCyACQSM2AhwgAiABNgIUIAJBpRY2AhAgAkEVNgIMQQAhAwxnC0EAIQMgAkEANgIcIAIgATYCFCACQdULNgIQIAJBETYCDAxmC0EAIQACQCACKAI4IgNFDQAgAygCLCIDRQ0AIAIgAxEAACEACyAADQELQQ4hAwxLCyAAQRVGBEAgAkECNgIcIAIgATYCFCACQbAYNgIQIAJBFTYCDEEAIQMMZAtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMYwtBACEDIAJBADYCHCACIAE2AhQgAkGqHDYCECACQQ82AgwMYgsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEgCqdqIgEQKyIARQ0AIAJBBTYCHCACIAE2AhQgAiAANgIMDGELQQ8hAwxHC0EAIQMgAkEANgIcIAIgATYCFCACQc0TNgIQIAJBDDYCDAxfC0IBIQoLIAFBAWohAQJAIAIpAyAiC0L//////////w9YBEAgAiALQgSGIAqENwMgDAELQQAhAyACQQA2AhwgAiABNgIUIAJBrQk2AhAgAkEMNgIMDF4LQSQhAwxEC0EAIQMgAkEANgIcIAIgATYCFCACQc0TNgIQIAJBDDYCDAxcCyACKAIEIQBBACEDIAJBADYCBCACIAAgARAsIgBFBEAgAUEBaiEBDFILIAJBFzYCHCACIAA2AgwgAiABQQFqNgIUDFsLIAIoAgQhAEEAIQMgAkEANgIEAkAgAiAAIAEQLCIARQRAIAFBAWohAQwBCyACQRY2AhwgAiAANgIMIAIgAUEBajYCFAxbC0EfIQMMQQtBACEDIAJBADYCHCACIAE2AhQgAkGaDzYCECACQSI2AgwMWQsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQLSIARQRAIAFBAWohAQxQCyACQRQ2AhwgAiAANgIMIAIgAUEBajYCFAxYCyACKAIEIQBBACEDIAJBADYCBAJAIAIgACABEC0iAEUEQCABQQFqIQEMAQsgAkETNgIcIAIgADYCDCACIAFBAWo2AhQMWAtBHiEDDD4LQQAhAyACQQA2AhwgAiABNgIUIAJBxgw2AhAgAkEjNgIMDFYLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABEC0iAEUEQCABQQFqIQEMTgsgAkERNgIcIAIgADYCDCACIAFBAWo2AhQMVQsgAkEQNgIcIAIgATYCFCACIAA2AgwMVAtBACEDIAJBADYCHCACIAE2AhQgAkHGDDYCECACQSM2AgwMUwtBACEDIAJBADYCHCACIAE2AhQgAkHAFTYCECACQQI2AgwMUgsgAigCBCEAQQAhAyACQQA2AgQCQCACIAAgARAtIgBFBEAgAUEBaiEBDAELIAJBDjYCHCACIAA2AgwgAiABQQFqNgIUDFILQRshAww4C0EAIQMgAkEANgIcIAIgATYCFCACQcYMNgIQIAJBIzYCDAxQCyACKAIEIQBBACEDIAJBADYCBAJAIAIgACABECwiAEUEQCABQQFqIQEMAQsgAkENNgIcIAIgADYCDCACIAFBAWo2AhQMUAtBGiEDDDYLQQAhAyACQQA2AhwgAiABNgIUIAJBmg82AhAgAkEiNgIMDE4LIAIoAgQhAEEAIQMgAkEANgIEAkAgAiAAIAEQLCIARQRAIAFBAWohAQwBCyACQQw2AhwgAiAANgIMIAIgAUEBajYCFAxOC0EZIQMMNAtBACEDIAJBADYCHCACIAE2AhQgAkGaDzYCECACQSI2AgwMTAsgAEEVRwRAQQAhAyACQQA2AhwgAiABNgIUIAJBgww2AhAgAkETNgIMDEwLIAJBCjYCHCACIAE2AhQgAkHkFjYCECACQRU2AgxBACEDDEsLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABIAqnaiIBECsiAARAIAJBBzYCHCACIAE2AhQgAiAANgIMDEsLQRMhAwwxCyAAQRVHBEBBACEDIAJBADYCHCACIAE2AhQgAkHaDTYCECACQRQ2AgwMSgsgAkEeNgIcIAIgATYCFCACQfkXNgIQIAJBFTYCDEEAIQMMSQtBACEAAkAgAigCOCIDRQ0AIAMoAiwiA0UNACACIAMRAAAhAAsgAEUNQSAAQRVGBEAgAkEDNgIcIAIgATYCFCACQbAYNgIQIAJBFTYCDEEAIQMMSQtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMSAtBACEDIAJBADYCHCACIAE2AhQgAkHaDTYCECACQRQ2AgwMRwtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMRgsgAkEAOgAvIAItAC1BBHFFDT8LIAJBADoALyACQQE6ADRBACEDDCsLQQAhAyACQQA2AhwgAkHkETYCECACQQc2AgwgAiABQQFqNgIUDEMLAkADQAJAIAEtAABBCmsOBAACAgACCyAEIAFBAWoiAUcNAAtB3QEhAwxDCwJAAkAgAi0ANEEBRw0AQQAhAAJAIAIoAjgiA0UNACADKAJYIgNFDQAgAiADEQAAIQALIABFDQAgAEEVRw0BIAJB3AE2AhwgAiABNgIUIAJB1RY2AhAgAkEVNgIMQQAhAwxEC0HBASEDDCoLIAJBADYCHCACIAE2AhQgAkHpCzYCECACQR82AgxBACEDDEILAkACQCACLQAoQQFrDgIEAQALQcABIQMMKQtBuQEhAwwoCyACQQI6AC9BACEAAkAgAigCOCIDRQ0AIAMoAgAiA0UNACACIAMRAAAhAAsgAEUEQEHCASEDDCgLIABBFUcEQCACQQA2AhwgAiABNgIUIAJBpAw2AhAgAkEQNgIMQQAhAwxBCyACQdsBNgIcIAIgATYCFCACQfoWNgIQIAJBFTYCDEEAIQMMQAsgASAERgRAQdoBIQMMQAsgAS0AAEHIAEYNASACQQE6ACgLQawBIQMMJQtBvwEhAwwkCyABIARHBEAgAkEQNgIIIAIgATYCBEG+ASEDDCQLQdkBIQMMPAsgASAERgRAQdgBIQMMPAsgAS0AAEHIAEcNBCABQQFqIQFBvQEhAwwiCyABIARGBEBB1wEhAww7CwJAAkAgAS0AAEHFAGsOEAAFBQUFBQUFBQUFBQUFBQEFCyABQQFqIQFBuwEhAwwiCyABQQFqIQFBvAEhAwwhC0HWASEDIAEgBEYNOSACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGD0ABqLQAARw0DIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAw6CyACKAIEIQAgAkIANwMAIAIgACAGQQFqIgEQJyIARQRAQcYBIQMMIQsgAkHVATYCHCACIAE2AhQgAiAANgIMQQAhAww5C0HUASEDIAEgBEYNOCACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGB0ABqLQAARw0CIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAw5CyACQYEEOwEoIAIoAgQhACACQgA3AwAgAiAAIAZBAWoiARAnIgANAwwCCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJB2Bs2AhAgAkEINgIMDDYLQboBIQMMHAsgAkHTATYCHCACIAE2AhQgAiAANgIMQQAhAww0C0EAIQACQCACKAI4IgNFDQAgAygCOCIDRQ0AIAIgAxEAACEACyAARQ0AIABBFUYNASACQQA2AhwgAiABNgIUIAJBzA42AhAgAkEgNgIMQQAhAwwzC0HkACEDDBkLIAJB+AA2AhwgAiABNgIUIAJByhg2AhAgAkEVNgIMQQAhAwwxC0HSASEDIAQgASIARg0wIAQgAWsgAigCACIBaiEFIAAgAWtBBGohBgJAA0AgAC0AACABQfzPAGotAABHDQEgAUEERg0DIAFBAWohASAEIABBAWoiAEcNAAsgAiAFNgIADDELIAJBADYCHCACIAA2AhQgAkGQMzYCECACQQg2AgwgAkEANgIAQQAhAwwwCyABIARHBEAgAkEONgIIIAIgATYCBEG3ASEDDBcLQdEBIQMMLwsgAkEANgIAIAZBAWohAQtBuAEhAwwUCyABIARGBEBB0AEhAwwtCyABLQAAQTBrIgBB/wFxQQpJBEAgAiAAOgAqIAFBAWohAUG2ASEDDBQLIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ0UIAJBzwE2AhwgAiABNgIUIAIgADYCDEEAIQMMLAsgASAERgRAQc4BIQMMLAsCQCABLQAAQS5GBEAgAUEBaiEBDAELIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ0VIAJBzQE2AhwgAiABNgIUIAIgADYCDEEAIQMMLAtBtQEhAwwSCyAEIAEiBUYEQEHMASEDDCsLQQAhAEEBIQFBASEGQQAhAwJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAUtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyEDQQAhAUEAIQYMAgtBCSEDQQEhAEEAIQFBACEGDAELQQAhAUEBIQMLIAIgAzoAKyAFQQFqIQMCQAJAIAItAC1BEHENAAJAAkACQCACLQAqDgMBAAIECyAGRQ0DDAILIAANAQwCCyABRQ0BCyACKAIEIQAgAkEANgIEIAIgACADECgiAEUEQCADIQEMAwsgAkHJATYCHCACIAM2AhQgAiAANgIMQQAhAwwtCyACKAIEIQAgAkEANgIEIAIgACADECgiAEUEQCADIQEMGAsgAkHKATYCHCACIAM2AhQgAiAANgIMQQAhAwwsCyACKAIEIQAgAkEANgIEIAIgACAFECgiAEUEQCAFIQEMFgsgAkHLATYCHCACIAU2AhQgAiAANgIMDCsLQbQBIQMMEQtBACEAAkAgAigCOCIDRQ0AIAMoAjwiA0UNACACIAMRAAAhAAsCQCAABEAgAEEVRg0BIAJBADYCHCACIAE2AhQgAkGUDTYCECACQSE2AgxBACEDDCsLQbIBIQMMEQsgAkHIATYCHCACIAE2AhQgAkHJFzYCECACQRU2AgxBACEDDCkLIAJBADYCACAGQQFqIQFB9QAhAwwPCyACLQApQQVGBEBB4wAhAwwPC0HiACEDDA4LIAAhASACQQA2AgALIAJBADoALEEJIQMMDAsgAkEANgIAIAdBAWohAUHAACEDDAsLQQELOgAsIAJBADYCACAGQQFqIQELQSkhAwwIC0E4IQMMBwsCQCABIARHBEADQCABLQAAQYA+ai0AACIAQQFHBEAgAEECRw0DIAFBAWohAQwFCyAEIAFBAWoiAUcNAAtBPiEDDCELQT4hAwwgCwsgAkEAOgAsDAELQQshAwwEC0E6IQMMAwsgAUEBaiEBQS0hAwwCCyACIAE6ACwgAkEANgIAIAZBAWohAUEMIQMMAQsgAkEANgIAIAZBAWohAUEKIQMMAAsAC0EAIQMgAkEANgIcIAIgATYCFCACQc0QNgIQIAJBCTYCDAwXC0EAIQMgAkEANgIcIAIgATYCFCACQekKNgIQIAJBCTYCDAwWC0EAIQMgAkEANgIcIAIgATYCFCACQbcQNgIQIAJBCTYCDAwVC0EAIQMgAkEANgIcIAIgATYCFCACQZwRNgIQIAJBCTYCDAwUC0EAIQMgAkEANgIcIAIgATYCFCACQc0QNgIQIAJBCTYCDAwTC0EAIQMgAkEANgIcIAIgATYCFCACQekKNgIQIAJBCTYCDAwSC0EAIQMgAkEANgIcIAIgATYCFCACQbcQNgIQIAJBCTYCDAwRC0EAIQMgAkEANgIcIAIgATYCFCACQZwRNgIQIAJBCTYCDAwQC0EAIQMgAkEANgIcIAIgATYCFCACQZcVNgIQIAJBDzYCDAwPC0EAIQMgAkEANgIcIAIgATYCFCACQZcVNgIQIAJBDzYCDAwOC0EAIQMgAkEANgIcIAIgATYCFCACQcASNgIQIAJBCzYCDAwNC0EAIQMgAkEANgIcIAIgATYCFCACQZUJNgIQIAJBCzYCDAwMC0EAIQMgAkEANgIcIAIgATYCFCACQeEPNgIQIAJBCjYCDAwLC0EAIQMgAkEANgIcIAIgATYCFCACQfsPNgIQIAJBCjYCDAwKC0EAIQMgAkEANgIcIAIgATYCFCACQfEZNgIQIAJBAjYCDAwJC0EAIQMgAkEANgIcIAIgATYCFCACQcQUNgIQIAJBAjYCDAwIC0EAIQMgAkEANgIcIAIgATYCFCACQfIVNgIQIAJBAjYCDAwHCyACQQI2AhwgAiABNgIUIAJBnBo2AhAgAkEWNgIMQQAhAwwGC0EBIQMMBQtB1AAhAyABIARGDQQgCEEIaiEJIAIoAgAhBQJAAkAgASAERwRAIAVB2MIAaiEHIAQgBWogAWshACAFQX9zQQpqIgUgAWohBgNAIAEtAAAgBy0AAEcEQEECIQcMAwsgBUUEQEEAIQcgBiEBDAMLIAVBAWshBSAHQQFqIQcgBCABQQFqIgFHDQALIAAhBSAEIQELIAlBATYCACACIAU2AgAMAQsgAkEANgIAIAkgBzYCAAsgCSABNgIEIAgoAgwhACAIKAIIDgMBBAIACwALIAJBADYCHCACQbUaNgIQIAJBFzYCDCACIABBAWo2AhRBACEDDAILIAJBADYCHCACIAA2AhQgAkHKGjYCECACQQk2AgxBACEDDAELIAEgBEYEQEEiIQMMAQsgAkEJNgIIIAIgATYCBEEhIQMLIAhBEGokACADRQRAIAIoAgwhAAwBCyACIAM2AhxBACEAIAIoAgQiAUUNACACIAEgBCACKAIIEQEAIgFFDQAgAiAENgIUIAIgATYCDCABIQALIAALvgIBAn8gAEEAOgAAIABB3ABqIgFBAWtBADoAACAAQQA6AAIgAEEAOgABIAFBA2tBADoAACABQQJrQQA6AAAgAEEAOgADIAFBBGtBADoAAEEAIABrQQNxIgEgAGoiAEEANgIAQdwAIAFrQXxxIgIgAGoiAUEEa0EANgIAAkAgAkEJSQ0AIABBADYCCCAAQQA2AgQgAUEIa0EANgIAIAFBDGtBADYCACACQRlJDQAgAEEANgIYIABBADYCFCAAQQA2AhAgAEEANgIMIAFBEGtBADYCACABQRRrQQA2AgAgAUEYa0EANgIAIAFBHGtBADYCACACIABBBHFBGHIiAmsiAUEgSQ0AIAAgAmohAANAIABCADcDGCAAQgA3AxAgAEIANwMIIABCADcDACAAQSBqIQAgAUEgayIBQR9LDQALCwtWAQF/AkAgACgCDA0AAkACQAJAAkAgAC0ALw4DAQADAgsgACgCOCIBRQ0AIAEoAiwiAUUNACAAIAERAAAiAQ0DC0EADwsACyAAQcMWNgIQQQ4hAQsgAQsaACAAKAIMRQRAIABB0Rs2AhAgAEEVNgIMCwsUACAAKAIMQRVGBEAgAEEANgIMCwsUACAAKAIMQRZGBEAgAEEANgIMCwsHACAAKAIMCwcAIAAoAhALCQAgACABNgIQCwcAIAAoAhQLFwAgAEEkTwRAAAsgAEECdEGgM2ooAgALFwAgAEEuTwRAAAsgAEECdEGwNGooAgALvwkBAX9B6yghAQJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB9ysPC0GQMQ8LQdcxDwtBoi0PC0HUJw8LQeArDwtBnywPC0HrMQ8LQdUfDwtByjEPC0HeJQ8LQdQeDwtB9BwPC0GnMg8LQbEdDwtBoB0PC0G5MQ8LQbwwDwtBkiEPC0GzJg8LQeksDwtBrB4PC0HUKw8LQfcmDwtBgCYPC0GwIQ8LQf4eDwtBjSMPC0GJLQ8LQfciDwtBoDEPC0GuHw8LQcYlDwtB6B4PC0GTIg8LQcIvDwtBwx0PC0GLLA8LQeEdDwtBjS8PC0HqIQ8LQbQtDwtB0i8PC0HfMg8LQdIyDwtB8DAPC0GpIg8LQfkjDwtBmR4PC0G1LA8LQZswDwtBkjIPC0G2Kw8LQcIiDwtB+DIPC0GeJQ8LQdAiDwtBuh4PC0GBHg8LAAtB1iEhAQsgAQsWACAAIAAtAC1B/gFxIAFBAEdyOgAtCxkAIAAgAC0ALUH9AXEgAUEAR0EBdHI6AC0LGQAgACAALQAtQfsBcSABQQBHQQJ0cjoALQsZACAAIAAtAC1B9wFxIAFBAEdBA3RyOgAtCz4BAn8CQCAAKAI4IgNFDQAgAygCBCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBxhE2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCCCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB9go2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCDCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB7Ro2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCECIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBlRA2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCFCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBqhs2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCGCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB7RM2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCKCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB9gg2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCHCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBwhk2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCICIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBlBQ2AhBBGCEECyAEC1kBAn8CQCAALQAoQQFGDQAgAC8BMiIBQeQAa0HkAEkNACABQcwBRg0AIAFBsAJGDQAgAC8BMCIAQcAAcQ0AQQEhAiAAQYgEcUGABEYNACAAQShxRSECCyACC4wBAQJ/AkACQAJAIAAtACpFDQAgAC0AK0UNACAALwEwIgFBAnFFDQEMAgsgAC8BMCIBQQFxRQ0BC0EBIQIgAC0AKEEBRg0AIAAvATIiAEHkAGtB5ABJDQAgAEHMAUYNACAAQbACRg0AIAFBwABxDQBBACECIAFBiARxQYAERg0AIAFBKHFBAEchAgsgAgtzACAAQRBq/QwAAAAAAAAAAAAAAAAAAAAA/QsDACAA/QwAAAAAAAAAAAAAAAAAAAAA/QsDACAAQTBq/QwAAAAAAAAAAAAAAAAAAAAA/QsDACAAQSBq/QwAAAAAAAAAAAAAAAAAAAAA/QsDACAAQd0BNgIcCwYAIAAQMguaLQELfyMAQRBrIgokAEGk0AAoAgAiCUUEQEHk0wAoAgAiBUUEQEHw0wBCfzcCAEHo0wBCgICEgICAwAA3AgBB5NMAIApBCGpBcHFB2KrVqgVzIgU2AgBB+NMAQQA2AgBByNMAQQA2AgALQczTAEGA1AQ2AgBBnNAAQYDUBDYCAEGw0AAgBTYCAEGs0ABBfzYCAEHQ0wBBgKwDNgIAA0AgAUHI0ABqIAFBvNAAaiICNgIAIAIgAUG00ABqIgM2AgAgAUHA0ABqIAM2AgAgAUHQ0ABqIAFBxNAAaiIDNgIAIAMgAjYCACABQdjQAGogAUHM0ABqIgI2AgAgAiADNgIAIAFB1NAAaiACNgIAIAFBIGoiAUGAAkcNAAtBjNQEQcGrAzYCAEGo0ABB9NMAKAIANgIAQZjQAEHAqwM2AgBBpNAAQYjUBDYCAEHM/wdBODYCAEGI1AQhCQsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAQewBTQRAQYzQACgCACIGQRAgAEETakFwcSAAQQtJGyIEQQN2IgB2IgFBA3EEQAJAIAFBAXEgAHJBAXMiAkEDdCIAQbTQAGoiASAAQbzQAGooAgAiACgCCCIDRgRAQYzQACAGQX4gAndxNgIADAELIAEgAzYCCCADIAE2AgwLIABBCGohASAAIAJBA3QiAkEDcjYCBCAAIAJqIgAgACgCBEEBcjYCBAwRC0GU0AAoAgAiCCAETw0BIAEEQAJAQQIgAHQiAkEAIAJrciABIAB0cWgiAEEDdCICQbTQAGoiASACQbzQAGooAgAiAigCCCIDRgRAQYzQACAGQX4gAHdxIgY2AgAMAQsgASADNgIIIAMgATYCDAsgAiAEQQNyNgIEIABBA3QiACAEayEFIAAgAmogBTYCACACIARqIgQgBUEBcjYCBCAIBEAgCEF4cUG00ABqIQBBoNAAKAIAIQMCf0EBIAhBA3Z0IgEgBnFFBEBBjNAAIAEgBnI2AgAgAAwBCyAAKAIICyIBIAM2AgwgACADNgIIIAMgADYCDCADIAE2AggLIAJBCGohAUGg0AAgBDYCAEGU0AAgBTYCAAwRC0GQ0AAoAgAiC0UNASALaEECdEG80gBqKAIAIgAoAgRBeHEgBGshBSAAIQIDQAJAIAIoAhAiAUUEQCACQRRqKAIAIgFFDQELIAEoAgRBeHEgBGsiAyAFSSECIAMgBSACGyEFIAEgACACGyEAIAEhAgwBCwsgACgCGCEJIAAoAgwiAyAARwRAQZzQACgCABogAyAAKAIIIgE2AgggASADNgIMDBALIABBFGoiAigCACIBRQRAIAAoAhAiAUUNAyAAQRBqIQILA0AgAiEHIAEiA0EUaiICKAIAIgENACADQRBqIQIgAygCECIBDQALIAdBADYCAAwPC0F/IQQgAEG/f0sNACAAQRNqIgFBcHEhBEGQ0AAoAgAiCEUNAEEAIARrIQUCQAJAAkACf0EAIARBgAJJDQAaQR8gBEH///8HSw0AGiAEQSYgAUEIdmciAGt2QQFxIABBAXRrQT5qCyIGQQJ0QbzSAGooAgAiAkUEQEEAIQFBACEDDAELQQAhASAEQRkgBkEBdmtBACAGQR9HG3QhAEEAIQMDQAJAIAIoAgRBeHEgBGsiByAFTw0AIAIhAyAHIgUNAEEAIQUgAiEBDAMLIAEgAkEUaigCACIHIAcgAiAAQR12QQRxakEQaigCACICRhsgASAHGyEBIABBAXQhACACDQALCyABIANyRQRAQQAhA0ECIAZ0IgBBACAAa3IgCHEiAEUNAyAAaEECdEG80gBqKAIAIQELIAFFDQELA0AgASgCBEF4cSAEayICIAVJIQAgAiAFIAAbIQUgASADIAAbIQMgASgCECIABH8gAAUgAUEUaigCAAsiAQ0ACwsgA0UNACAFQZTQACgCACAEa08NACADKAIYIQcgAyADKAIMIgBHBEBBnNAAKAIAGiAAIAMoAggiATYCCCABIAA2AgwMDgsgA0EUaiICKAIAIgFFBEAgAygCECIBRQ0DIANBEGohAgsDQCACIQYgASIAQRRqIgIoAgAiAQ0AIABBEGohAiAAKAIQIgENAAsgBkEANgIADA0LQZTQACgCACIDIARPBEBBoNAAKAIAIQECQCADIARrIgJBEE8EQCABIARqIgAgAkEBcjYCBCABIANqIAI2AgAgASAEQQNyNgIEDAELIAEgA0EDcjYCBCABIANqIgAgACgCBEEBcjYCBEEAIQBBACECC0GU0AAgAjYCAEGg0AAgADYCACABQQhqIQEMDwtBmNAAKAIAIgMgBEsEQCAEIAlqIgAgAyAEayIBQQFyNgIEQaTQACAANgIAQZjQACABNgIAIAkgBEEDcjYCBCAJQQhqIQEMDwtBACEBIAQCf0Hk0wAoAgAEQEHs0wAoAgAMAQtB8NMAQn83AgBB6NMAQoCAhICAgMAANwIAQeTTACAKQQxqQXBxQdiq1aoFczYCAEH40wBBADYCAEHI0wBBADYCAEGAgAQLIgAgBEHHAGoiBWoiBkEAIABrIgdxIgJPBEBB/NMAQTA2AgAMDwsCQEHE0wAoAgAiAUUNAEG80wAoAgAiCCACaiEAIAAgAU0gACAIS3ENAEEAIQFB/NMAQTA2AgAMDwtByNMALQAAQQRxDQQCQAJAIAkEQEHM0wAhAQNAIAEoAgAiACAJTQRAIAAgASgCBGogCUsNAwsgASgCCCIBDQALC0EAEDMiAEF/Rg0FIAIhBkHo0wAoAgAiAUEBayIDIABxBEAgAiAAayAAIANqQQAgAWtxaiEGCyAEIAZPDQUgBkH+////B0sNBUHE0wAoAgAiAwRAQbzTACgCACIHIAZqIQEgASAHTQ0GIAEgA0sNBgsgBhAzIgEgAEcNAQwHCyAGIANrIAdxIgZB/v///wdLDQQgBhAzIQAgACABKAIAIAEoAgRqRg0DIAAhAQsCQCAGIARByABqTw0AIAFBf0YNAEHs0wAoAgAiACAFIAZrakEAIABrcSIAQf7///8HSwRAIAEhAAwHCyAAEDNBf0cEQCAAIAZqIQYgASEADAcLQQAgBmsQMxoMBAsgASIAQX9HDQUMAwtBACEDDAwLQQAhAAwKCyAAQX9HDQILQcjTAEHI0wAoAgBBBHI2AgALIAJB/v///wdLDQEgAhAzIQBBABAzIQEgAEF/Rg0BIAFBf0YNASAAIAFPDQEgASAAayIGIARBOGpNDQELQbzTAEG80wAoAgAgBmoiATYCAEHA0wAoAgAgAUkEQEHA0wAgATYCAAsCQAJAAkBBpNAAKAIAIgIEQEHM0wAhAQNAIAAgASgCACIDIAEoAgQiBWpGDQIgASgCCCIBDQALDAILQZzQACgCACIBQQBHIAAgAU9xRQRAQZzQACAANgIAC0EAIQFB0NMAIAY2AgBBzNMAIAA2AgBBrNAAQX82AgBBsNAAQeTTACgCADYCAEHY0wBBADYCAANAIAFByNAAaiABQbzQAGoiAjYCACACIAFBtNAAaiIDNgIAIAFBwNAAaiADNgIAIAFB0NAAaiABQcTQAGoiAzYCACADIAI2AgAgAUHY0ABqIAFBzNAAaiICNgIAIAIgAzYCACABQdTQAGogAjYCACABQSBqIgFBgAJHDQALQXggAGtBD3EiASAAaiICIAZBOGsiAyABayIBQQFyNgIEQajQAEH00wAoAgA2AgBBmNAAIAE2AgBBpNAAIAI2AgAgACADakE4NgIEDAILIAAgAk0NACACIANJDQAgASgCDEEIcQ0AQXggAmtBD3EiACACaiIDQZjQACgCACAGaiIHIABrIgBBAXI2AgQgASAFIAZqNgIEQajQAEH00wAoAgA2AgBBmNAAIAA2AgBBpNAAIAM2AgAgAiAHakE4NgIEDAELIABBnNAAKAIASQRAQZzQACAANgIACyAAIAZqIQNBzNMAIQECQAJAAkADQCADIAEoAgBHBEAgASgCCCIBDQEMAgsLIAEtAAxBCHFFDQELQczTACEBA0AgASgCACIDIAJNBEAgAyABKAIEaiIFIAJLDQMLIAEoAgghAQwACwALIAEgADYCACABIAEoAgQgBmo2AgQgAEF4IABrQQ9xaiIJIARBA3I2AgQgA0F4IANrQQ9xaiIGIAQgCWoiBGshASACIAZGBEBBpNAAIAQ2AgBBmNAAQZjQACgCACABaiIANgIAIAQgAEEBcjYCBAwIC0Gg0AAoAgAgBkYEQEGg0AAgBDYCAEGU0ABBlNAAKAIAIAFqIgA2AgAgBCAAQQFyNgIEIAAgBGogADYCAAwICyAGKAIEIgVBA3FBAUcNBiAFQXhxIQggBUH/AU0EQCAFQQN2IQMgBigCCCIAIAYoAgwiAkYEQEGM0ABBjNAAKAIAQX4gA3dxNgIADAcLIAIgADYCCCAAIAI2AgwMBgsgBigCGCEHIAYgBigCDCIARwRAIAAgBigCCCICNgIIIAIgADYCDAwFCyAGQRRqIgIoAgAiBUUEQCAGKAIQIgVFDQQgBkEQaiECCwNAIAIhAyAFIgBBFGoiAigCACIFDQAgAEEQaiECIAAoAhAiBQ0ACyADQQA2AgAMBAtBeCAAa0EPcSIBIABqIgcgBkE4ayIDIAFrIgFBAXI2AgQgACADakE4NgIEIAIgBUE3IAVrQQ9xakE/ayIDIAMgAkEQakkbIgNBIzYCBEGo0ABB9NMAKAIANgIAQZjQACABNgIAQaTQACAHNgIAIANBEGpB1NMAKQIANwIAIANBzNMAKQIANwIIQdTTACADQQhqNgIAQdDTACAGNgIAQczTACAANgIAQdjTAEEANgIAIANBJGohAQNAIAFBBzYCACAFIAFBBGoiAUsNAAsgAiADRg0AIAMgAygCBEF+cTYCBCADIAMgAmsiBTYCACACIAVBAXI2AgQgBUH/AU0EQCAFQXhxQbTQAGohAAJ/QYzQACgCACIBQQEgBUEDdnQiA3FFBEBBjNAAIAEgA3I2AgAgAAwBCyAAKAIICyIBIAI2AgwgACACNgIIIAIgADYCDCACIAE2AggMAQtBHyEBIAVB////B00EQCAFQSYgBUEIdmciAGt2QQFxIABBAXRrQT5qIQELIAIgATYCHCACQgA3AhAgAUECdEG80gBqIQBBkNAAKAIAIgNBASABdCIGcUUEQCAAIAI2AgBBkNAAIAMgBnI2AgAgAiAANgIYIAIgAjYCCCACIAI2AgwMAQsgBUEZIAFBAXZrQQAgAUEfRxt0IQEgACgCACEDAkADQCADIgAoAgRBeHEgBUYNASABQR12IQMgAUEBdCEBIAAgA0EEcWpBEGoiBigCACIDDQALIAYgAjYCACACIAA2AhggAiACNgIMIAIgAjYCCAwBCyAAKAIIIgEgAjYCDCAAIAI2AgggAkEANgIYIAIgADYCDCACIAE2AggLQZjQACgCACIBIARNDQBBpNAAKAIAIgAgBGoiAiABIARrIgFBAXI2AgRBmNAAIAE2AgBBpNAAIAI2AgAgACAEQQNyNgIEIABBCGohAQwIC0EAIQFB/NMAQTA2AgAMBwtBACEACyAHRQ0AAkAgBigCHCICQQJ0QbzSAGoiAygCACAGRgRAIAMgADYCACAADQFBkNAAQZDQACgCAEF+IAJ3cTYCAAwCCyAHQRBBFCAHKAIQIAZGG2ogADYCACAARQ0BCyAAIAc2AhggBigCECICBEAgACACNgIQIAIgADYCGAsgBkEUaigCACICRQ0AIABBFGogAjYCACACIAA2AhgLIAEgCGohASAGIAhqIgYoAgQhBQsgBiAFQX5xNgIEIAEgBGogATYCACAEIAFBAXI2AgQgAUH/AU0EQCABQXhxQbTQAGohAAJ/QYzQACgCACICQQEgAUEDdnQiAXFFBEBBjNAAIAEgAnI2AgAgAAwBCyAAKAIICyIBIAQ2AgwgACAENgIIIAQgADYCDCAEIAE2AggMAQtBHyEFIAFB////B00EQCABQSYgAUEIdmciAGt2QQFxIABBAXRrQT5qIQULIAQgBTYCHCAEQgA3AhAgBUECdEG80gBqIQBBkNAAKAIAIgJBASAFdCIDcUUEQCAAIAQ2AgBBkNAAIAIgA3I2AgAgBCAANgIYIAQgBDYCCCAEIAQ2AgwMAQsgAUEZIAVBAXZrQQAgBUEfRxt0IQUgACgCACEAAkADQCAAIgIoAgRBeHEgAUYNASAFQR12IQAgBUEBdCEFIAIgAEEEcWpBEGoiAygCACIADQALIAMgBDYCACAEIAI2AhggBCAENgIMIAQgBDYCCAwBCyACKAIIIgAgBDYCDCACIAQ2AgggBEEANgIYIAQgAjYCDCAEIAA2AggLIAlBCGohAQwCCwJAIAdFDQACQCADKAIcIgFBAnRBvNIAaiICKAIAIANGBEAgAiAANgIAIAANAUGQ0AAgCEF+IAF3cSIINgIADAILIAdBEEEUIAcoAhAgA0YbaiAANgIAIABFDQELIAAgBzYCGCADKAIQIgEEQCAAIAE2AhAgASAANgIYCyADQRRqKAIAIgFFDQAgAEEUaiABNgIAIAEgADYCGAsCQCAFQQ9NBEAgAyAEIAVqIgBBA3I2AgQgACADaiIAIAAoAgRBAXI2AgQMAQsgAyAEaiICIAVBAXI2AgQgAyAEQQNyNgIEIAIgBWogBTYCACAFQf8BTQRAIAVBeHFBtNAAaiEAAn9BjNAAKAIAIgFBASAFQQN2dCIFcUUEQEGM0AAgASAFcjYCACAADAELIAAoAggLIgEgAjYCDCAAIAI2AgggAiAANgIMIAIgATYCCAwBC0EfIQEgBUH///8HTQRAIAVBJiAFQQh2ZyIAa3ZBAXEgAEEBdGtBPmohAQsgAiABNgIcIAJCADcCECABQQJ0QbzSAGohAEEBIAF0IgQgCHFFBEAgACACNgIAQZDQACAEIAhyNgIAIAIgADYCGCACIAI2AgggAiACNgIMDAELIAVBGSABQQF2a0EAIAFBH0cbdCEBIAAoAgAhBAJAA0AgBCIAKAIEQXhxIAVGDQEgAUEddiEEIAFBAXQhASAAIARBBHFqQRBqIgYoAgAiBA0ACyAGIAI2AgAgAiAANgIYIAIgAjYCDCACIAI2AggMAQsgACgCCCIBIAI2AgwgACACNgIIIAJBADYCGCACIAA2AgwgAiABNgIICyADQQhqIQEMAQsCQCAJRQ0AAkAgACgCHCIBQQJ0QbzSAGoiAigCACAARgRAIAIgAzYCACADDQFBkNAAIAtBfiABd3E2AgAMAgsgCUEQQRQgCSgCECAARhtqIAM2AgAgA0UNAQsgAyAJNgIYIAAoAhAiAQRAIAMgATYCECABIAM2AhgLIABBFGooAgAiAUUNACADQRRqIAE2AgAgASADNgIYCwJAIAVBD00EQCAAIAQgBWoiAUEDcjYCBCAAIAFqIgEgASgCBEEBcjYCBAwBCyAAIARqIgcgBUEBcjYCBCAAIARBA3I2AgQgBSAHaiAFNgIAIAgEQCAIQXhxQbTQAGohAUGg0AAoAgAhAwJ/QQEgCEEDdnQiAiAGcUUEQEGM0AAgAiAGcjYCACABDAELIAEoAggLIgIgAzYCDCABIAM2AgggAyABNgIMIAMgAjYCCAtBoNAAIAc2AgBBlNAAIAU2AgALIABBCGohAQsgCkEQaiQAIAELQwAgAEUEQD8AQRB0DwsCQCAAQf//A3ENACAAQQBIDQAgAEEQdkAAIgBBf0YEQEH80wBBMDYCAEF/DwsgAEEQdA8LAAsL3D8iAEGACAsJAQAAAAIAAAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==", "base64"); + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/constants.js +var require_constants3 = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/constants.js"(exports2, module2) { + "use strict"; + init_define_process(); + var corsSafeListedMethods = ( + /** @type {const} */ + ["GET", "HEAD", "POST"] + ); + var corsSafeListedMethodsSet = new Set(corsSafeListedMethods); + var nullBodyStatus = ( + /** @type {const} */ + [101, 204, 205, 304] + ); + var redirectStatus = ( + /** @type {const} */ + [301, 302, 303, 307, 308] + ); + var redirectStatusSet = new Set(redirectStatus); + var badPorts = ( + /** @type {const} */ + [ + "1", + "7", + "9", + "11", + "13", + "15", + "17", + "19", + "20", + "21", + "22", + "23", + "25", + "37", + "42", + "43", + "53", + "69", + "77", + "79", + "87", + "95", + "101", + "102", + "103", + "104", + "109", + "110", + "111", + "113", + "115", + "117", + "119", + "123", + "135", + "137", + "139", + "143", + "161", + "179", + "389", + "427", + "465", + "512", + "513", + "514", + "515", + "526", + "530", + "531", + "532", + "540", + "548", + "554", + "556", + "563", + "587", + "601", + "636", + "989", + "990", + "993", + "995", + "1719", + "1720", + "1723", + "2049", + "3659", + "4045", + "4190", + "5060", + "5061", + "6000", + "6566", + "6665", + "6666", + "6667", + "6668", + "6669", + "6679", + "6697", + "10080" + ] + ); + var badPortsSet = new Set(badPorts); + var referrerPolicy = ( + /** @type {const} */ + [ + "", + "no-referrer", + "no-referrer-when-downgrade", + "same-origin", + "origin", + "strict-origin", + "origin-when-cross-origin", + "strict-origin-when-cross-origin", + "unsafe-url" + ] + ); + var referrerPolicySet = new Set(referrerPolicy); + var requestRedirect = ( + /** @type {const} */ + ["follow", "manual", "error"] + ); + var safeMethods = ( + /** @type {const} */ + ["GET", "HEAD", "OPTIONS", "TRACE"] + ); + var safeMethodsSet = new Set(safeMethods); + var requestMode = ( + /** @type {const} */ + ["navigate", "same-origin", "no-cors", "cors"] + ); + var requestCredentials = ( + /** @type {const} */ + ["omit", "same-origin", "include"] + ); + var requestCache = ( + /** @type {const} */ + [ + "default", + "no-store", + "reload", + "no-cache", + "force-cache", + "only-if-cached" + ] + ); + var requestBodyHeader = ( + /** @type {const} */ + [ + "content-encoding", + "content-language", + "content-location", + "content-type", + // See https://github.com/nodejs/undici/issues/2021 + // 'Content-Length' is a forbidden header name, which is typically + // removed in the Headers implementation. However, undici doesn't + // filter out headers, so we add it here. + "content-length" + ] + ); + var requestDuplex = ( + /** @type {const} */ + [ + "half" + ] + ); + var forbiddenMethods = ( + /** @type {const} */ + ["CONNECT", "TRACE", "TRACK"] + ); + var forbiddenMethodsSet = new Set(forbiddenMethods); + var subresource = ( + /** @type {const} */ + [ + "audio", + "audioworklet", + "font", + "image", + "manifest", + "paintworklet", + "script", + "style", + "track", + "video", + "xslt", + "" + ] + ); + var subresourceSet = new Set(subresource); + module2.exports = { + subresource, + forbiddenMethods, + requestBodyHeader, + referrerPolicy, + requestRedirect, + requestMode, + requestCredentials, + requestCache, + redirectStatus, + corsSafeListedMethods, + nullBodyStatus, + safeMethods, + badPorts, + requestDuplex, + subresourceSet, + badPortsSet, + redirectStatusSet, + corsSafeListedMethodsSet, + safeMethodsSet, + forbiddenMethodsSet, + referrerPolicySet + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/global.js +var require_global = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/global.js"(exports2, module2) { + "use strict"; + init_define_process(); + var globalOrigin = Symbol.for("undici.globalOrigin.1"); + function getGlobalOrigin() { + return globalThis[globalOrigin]; + } + __name(getGlobalOrigin, "getGlobalOrigin"); + function setGlobalOrigin(newOrigin) { + if (newOrigin === void 0) { + Object.defineProperty(globalThis, globalOrigin, { + value: void 0, + writable: true, + enumerable: false, + configurable: false + }); + return; + } + const parsedURL = new URL(newOrigin); + if (parsedURL.protocol !== "http:" && parsedURL.protocol !== "https:") { + throw new TypeError(`Only http & https urls are allowed, received ${parsedURL.protocol}`); + } + Object.defineProperty(globalThis, globalOrigin, { + value: parsedURL, + writable: true, + enumerable: false, + configurable: false + }); + } + __name(setGlobalOrigin, "setGlobalOrigin"); + module2.exports = { + getGlobalOrigin, + setGlobalOrigin + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/data-url.js +var require_data_url = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/data-url.js"(exports2, module2) { + "use strict"; + init_define_process(); + var assert = require("assert"); + var encoder = new TextEncoder(); + var HTTP_TOKEN_CODEPOINTS = /^[!#$%&'*+\-.^_|~A-Za-z0-9]+$/; + var HTTP_WHITESPACE_REGEX = /[\u000A\u000D\u0009\u0020]/; + var ASCII_WHITESPACE_REPLACE_REGEX = /[\u0009\u000A\u000C\u000D\u0020]/g; + var HTTP_QUOTED_STRING_TOKENS = /^[\u0009\u0020-\u007E\u0080-\u00FF]+$/; + function dataURLProcessor(dataURL) { + assert(dataURL.protocol === "data:"); + let input = URLSerializer(dataURL, true); + input = input.slice(5); + const position = { position: 0 }; + let mimeType = collectASequenceOfCodePointsFast( + ",", + input, + position + ); + const mimeTypeLength = mimeType.length; + mimeType = removeASCIIWhitespace(mimeType, true, true); + if (position.position >= input.length) { + return "failure"; + } + position.position++; + const encodedBody = input.slice(mimeTypeLength + 1); + let body = stringPercentDecode(encodedBody); + if (/;(\u0020){0,}base64$/i.test(mimeType)) { + const stringBody = isomorphicDecode(body); + body = forgivingBase64(stringBody); + if (body === "failure") { + return "failure"; + } + mimeType = mimeType.slice(0, -6); + mimeType = mimeType.replace(/(\u0020)+$/, ""); + mimeType = mimeType.slice(0, -1); + } + if (mimeType.startsWith(";")) { + mimeType = "text/plain" + mimeType; + } + let mimeTypeRecord = parseMIMEType(mimeType); + if (mimeTypeRecord === "failure") { + mimeTypeRecord = parseMIMEType("text/plain;charset=US-ASCII"); + } + return { mimeType: mimeTypeRecord, body }; + } + __name(dataURLProcessor, "dataURLProcessor"); + function URLSerializer(url, excludeFragment = false) { + if (!excludeFragment) { + return url.href; + } + const href = url.href; + const hashLength = url.hash.length; + const serialized = hashLength === 0 ? href : href.substring(0, href.length - hashLength); + if (!hashLength && href.endsWith("#")) { + return serialized.slice(0, -1); + } + return serialized; + } + __name(URLSerializer, "URLSerializer"); + function collectASequenceOfCodePoints(condition, input, position) { + let result = ""; + while (position.position < input.length && condition(input[position.position])) { + result += input[position.position]; + position.position++; + } + return result; + } + __name(collectASequenceOfCodePoints, "collectASequenceOfCodePoints"); + function collectASequenceOfCodePointsFast(char, input, position) { + const idx = input.indexOf(char, position.position); + const start = position.position; + if (idx === -1) { + position.position = input.length; + return input.slice(start); + } + position.position = idx; + return input.slice(start, position.position); + } + __name(collectASequenceOfCodePointsFast, "collectASequenceOfCodePointsFast"); + function stringPercentDecode(input) { + const bytes = encoder.encode(input); + return percentDecode(bytes); + } + __name(stringPercentDecode, "stringPercentDecode"); + function isHexCharByte(byte) { + return byte >= 48 && byte <= 57 || byte >= 65 && byte <= 70 || byte >= 97 && byte <= 102; + } + __name(isHexCharByte, "isHexCharByte"); + function hexByteToNumber(byte) { + return ( + // 0-9 + byte >= 48 && byte <= 57 ? byte - 48 : (byte & 223) - 55 + ); + } + __name(hexByteToNumber, "hexByteToNumber"); + function percentDecode(input) { + const length = input.length; + const output = new Uint8Array(length); + let j = 0; + for (let i = 0; i < length; ++i) { + const byte = input[i]; + if (byte !== 37) { + output[j++] = byte; + } else if (byte === 37 && !(isHexCharByte(input[i + 1]) && isHexCharByte(input[i + 2]))) { + output[j++] = 37; + } else { + output[j++] = hexByteToNumber(input[i + 1]) << 4 | hexByteToNumber(input[i + 2]); + i += 2; + } + } + return length === j ? output : output.subarray(0, j); + } + __name(percentDecode, "percentDecode"); + function parseMIMEType(input) { + input = removeHTTPWhitespace(input, true, true); + const position = { position: 0 }; + const type = collectASequenceOfCodePointsFast( + "/", + input, + position + ); + if (type.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(type)) { + return "failure"; + } + if (position.position > input.length) { + return "failure"; + } + position.position++; + let subtype = collectASequenceOfCodePointsFast( + ";", + input, + position + ); + subtype = removeHTTPWhitespace(subtype, false, true); + if (subtype.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(subtype)) { + return "failure"; + } + const typeLowercase = type.toLowerCase(); + const subtypeLowercase = subtype.toLowerCase(); + const mimeType = { + type: typeLowercase, + subtype: subtypeLowercase, + /** @type {Map} */ + parameters: /* @__PURE__ */ new Map(), + // https://mimesniff.spec.whatwg.org/#mime-type-essence + essence: `${typeLowercase}/${subtypeLowercase}` + }; + while (position.position < input.length) { + position.position++; + collectASequenceOfCodePoints( + // https://fetch.spec.whatwg.org/#http-whitespace + (char) => HTTP_WHITESPACE_REGEX.test(char), + input, + position + ); + let parameterName = collectASequenceOfCodePoints( + (char) => char !== ";" && char !== "=", + input, + position + ); + parameterName = parameterName.toLowerCase(); + if (position.position < input.length) { + if (input[position.position] === ";") { + continue; + } + position.position++; + } + if (position.position > input.length) { + break; + } + let parameterValue = null; + if (input[position.position] === '"') { + parameterValue = collectAnHTTPQuotedString(input, position, true); + collectASequenceOfCodePointsFast( + ";", + input, + position + ); + } else { + parameterValue = collectASequenceOfCodePointsFast( + ";", + input, + position + ); + parameterValue = removeHTTPWhitespace(parameterValue, false, true); + if (parameterValue.length === 0) { + continue; + } + } + if (parameterName.length !== 0 && HTTP_TOKEN_CODEPOINTS.test(parameterName) && (parameterValue.length === 0 || HTTP_QUOTED_STRING_TOKENS.test(parameterValue)) && !mimeType.parameters.has(parameterName)) { + mimeType.parameters.set(parameterName, parameterValue); + } + } + return mimeType; + } + __name(parseMIMEType, "parseMIMEType"); + function forgivingBase64(data) { + data = data.replace(ASCII_WHITESPACE_REPLACE_REGEX, ""); + let dataLength = data.length; + if (dataLength % 4 === 0) { + if (data.charCodeAt(dataLength - 1) === 61) { + --dataLength; + if (data.charCodeAt(dataLength - 1) === 61) { + --dataLength; + } + } + } + if (dataLength % 4 === 1) { + return "failure"; + } + if (/[^+/0-9A-Za-z]/.test(data.length === dataLength ? data : data.substring(0, dataLength))) { + return "failure"; + } + const buffer = Buffer.from(data, "base64"); + return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength); + } + __name(forgivingBase64, "forgivingBase64"); + function collectAnHTTPQuotedString(input, position, extractValue) { + const positionStart = position.position; + let value = ""; + assert(input[position.position] === '"'); + position.position++; + while (true) { + value += collectASequenceOfCodePoints( + (char) => char !== '"' && char !== "\\", + input, + position + ); + if (position.position >= input.length) { + break; + } + const quoteOrBackslash = input[position.position]; + position.position++; + if (quoteOrBackslash === "\\") { + if (position.position >= input.length) { + value += "\\"; + break; + } + value += input[position.position]; + position.position++; + } else { + assert(quoteOrBackslash === '"'); + break; + } + } + if (extractValue) { + return value; + } + return input.slice(positionStart, position.position); + } + __name(collectAnHTTPQuotedString, "collectAnHTTPQuotedString"); + function serializeAMimeType(mimeType) { + assert(mimeType !== "failure"); + const { parameters, essence } = mimeType; + let serialization = essence; + for (let [name, value] of parameters.entries()) { + serialization += ";"; + serialization += name; + serialization += "="; + if (!HTTP_TOKEN_CODEPOINTS.test(value)) { + value = value.replace(/(\\|")/g, "\\$1"); + value = '"' + value; + value += '"'; + } + serialization += value; + } + return serialization; + } + __name(serializeAMimeType, "serializeAMimeType"); + function isHTTPWhiteSpace(char) { + return char === 13 || char === 10 || char === 9 || char === 32; + } + __name(isHTTPWhiteSpace, "isHTTPWhiteSpace"); + function removeHTTPWhitespace(str, leading = true, trailing = true) { + return removeChars(str, leading, trailing, isHTTPWhiteSpace); + } + __name(removeHTTPWhitespace, "removeHTTPWhitespace"); + function isASCIIWhitespace(char) { + return char === 13 || char === 10 || char === 9 || char === 12 || char === 32; + } + __name(isASCIIWhitespace, "isASCIIWhitespace"); + function removeASCIIWhitespace(str, leading = true, trailing = true) { + return removeChars(str, leading, trailing, isASCIIWhitespace); + } + __name(removeASCIIWhitespace, "removeASCIIWhitespace"); + function removeChars(str, leading, trailing, predicate) { + let lead = 0; + let trail = str.length - 1; + if (leading) { + while (lead < str.length && predicate(str.charCodeAt(lead))) + lead++; + } + if (trailing) { + while (trail > 0 && predicate(str.charCodeAt(trail))) + trail--; + } + return lead === 0 && trail === str.length - 1 ? str : str.slice(lead, trail + 1); + } + __name(removeChars, "removeChars"); + function isomorphicDecode(input) { + const length = input.length; + if ((2 << 15) - 1 > length) { + return String.fromCharCode.apply(null, input); + } + let result = ""; + let i = 0; + let addition = (2 << 15) - 1; + while (i < length) { + if (i + addition > length) { + addition = length - i; + } + result += String.fromCharCode.apply(null, input.subarray(i, i += addition)); + } + return result; + } + __name(isomorphicDecode, "isomorphicDecode"); + function minimizeSupportedMimeType(mimeType) { + switch (mimeType.essence) { + case "application/ecmascript": + case "application/javascript": + case "application/x-ecmascript": + case "application/x-javascript": + case "text/ecmascript": + case "text/javascript": + case "text/javascript1.0": + case "text/javascript1.1": + case "text/javascript1.2": + case "text/javascript1.3": + case "text/javascript1.4": + case "text/javascript1.5": + case "text/jscript": + case "text/livescript": + case "text/x-ecmascript": + case "text/x-javascript": + return "text/javascript"; + case "application/json": + case "text/json": + return "application/json"; + case "image/svg+xml": + return "image/svg+xml"; + case "text/xml": + case "application/xml": + return "application/xml"; + } + if (mimeType.subtype.endsWith("+json")) { + return "application/json"; + } + if (mimeType.subtype.endsWith("+xml")) { + return "application/xml"; + } + return ""; + } + __name(minimizeSupportedMimeType, "minimizeSupportedMimeType"); + module2.exports = { + dataURLProcessor, + URLSerializer, + collectASequenceOfCodePoints, + collectASequenceOfCodePointsFast, + stringPercentDecode, + parseMIMEType, + collectAnHTTPQuotedString, + serializeAMimeType, + removeChars, + removeHTTPWhitespace, + minimizeSupportedMimeType, + HTTP_TOKEN_CODEPOINTS, + isomorphicDecode + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/webidl.js +var require_webidl = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/webidl.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { types, inspect } = require("util"); + var { markAsUncloneable } = require("worker_threads"); + var { toUSVString } = require_util(); + var webidl = {}; + webidl.converters = {}; + webidl.util = {}; + webidl.errors = {}; + webidl.errors.exception = function(message) { + return new TypeError(`${message.header}: ${message.message}`); + }; + webidl.errors.conversionFailed = function(context) { + const plural = context.types.length === 1 ? "" : " one of"; + const message = `${context.argument} could not be converted to${plural}: ${context.types.join(", ")}.`; + return webidl.errors.exception({ + header: context.prefix, + message + }); + }; + webidl.errors.invalidArgument = function(context) { + return webidl.errors.exception({ + header: context.prefix, + message: `"${context.value}" is an invalid ${context.type}.` + }); + }; + webidl.brandCheck = function(V, I, opts) { + if (opts?.strict !== false) { + if (!(V instanceof I)) { + const err = new TypeError("Illegal invocation"); + err.code = "ERR_INVALID_THIS"; + throw err; + } + } else { + if (V?.[Symbol.toStringTag] !== I.prototype[Symbol.toStringTag]) { + const err = new TypeError("Illegal invocation"); + err.code = "ERR_INVALID_THIS"; + throw err; + } + } + }; + webidl.argumentLengthCheck = function({ length }, min, ctx) { + if (length < min) { + throw webidl.errors.exception({ + message: `${min} argument${min !== 1 ? "s" : ""} required, but${length ? " only" : ""} ${length} found.`, + header: ctx + }); + } + }; + webidl.illegalConstructor = function() { + throw webidl.errors.exception({ + header: "TypeError", + message: "Illegal constructor" + }); + }; + webidl.util.Type = function(V) { + switch (typeof V) { + case "undefined": + return "Undefined"; + case "boolean": + return "Boolean"; + case "string": + return "String"; + case "symbol": + return "Symbol"; + case "number": + return "Number"; + case "bigint": + return "BigInt"; + case "function": + case "object": { + if (V === null) { + return "Null"; + } + return "Object"; + } + } + }; + webidl.util.markAsUncloneable = markAsUncloneable || (() => { + }); + webidl.util.ConvertToInt = function(V, bitLength, signedness, opts) { + let upperBound; + let lowerBound; + if (bitLength === 64) { + upperBound = Math.pow(2, 53) - 1; + if (signedness === "unsigned") { + lowerBound = 0; + } else { + lowerBound = Math.pow(-2, 53) + 1; + } + } else if (signedness === "unsigned") { + lowerBound = 0; + upperBound = Math.pow(2, bitLength) - 1; + } else { + lowerBound = Math.pow(-2, bitLength) - 1; + upperBound = Math.pow(2, bitLength - 1) - 1; + } + let x = Number(V); + if (x === 0) { + x = 0; + } + if (opts?.enforceRange === true) { + if (Number.isNaN(x) || x === Number.POSITIVE_INFINITY || x === Number.NEGATIVE_INFINITY) { + throw webidl.errors.exception({ + header: "Integer conversion", + message: `Could not convert ${webidl.util.Stringify(V)} to an integer.` + }); + } + x = webidl.util.IntegerPart(x); + if (x < lowerBound || x > upperBound) { + throw webidl.errors.exception({ + header: "Integer conversion", + message: `Value must be between ${lowerBound}-${upperBound}, got ${x}.` + }); + } + return x; + } + if (!Number.isNaN(x) && opts?.clamp === true) { + x = Math.min(Math.max(x, lowerBound), upperBound); + if (Math.floor(x) % 2 === 0) { + x = Math.floor(x); + } else { + x = Math.ceil(x); + } + return x; + } + if (Number.isNaN(x) || x === 0 && Object.is(0, x) || x === Number.POSITIVE_INFINITY || x === Number.NEGATIVE_INFINITY) { + return 0; + } + x = webidl.util.IntegerPart(x); + x = x % Math.pow(2, bitLength); + if (signedness === "signed" && x >= Math.pow(2, bitLength) - 1) { + return x - Math.pow(2, bitLength); + } + return x; + }; + webidl.util.IntegerPart = function(n) { + const r = Math.floor(Math.abs(n)); + if (n < 0) { + return -1 * r; + } + return r; + }; + webidl.util.Stringify = function(V) { + const type = webidl.util.Type(V); + switch (type) { + case "Symbol": + return `Symbol(${V.description})`; + case "Object": + return inspect(V); + case "String": + return `"${V}"`; + default: + return `${V}`; + } + }; + webidl.sequenceConverter = function(converter) { + return (V, prefix, argument, Iterable) => { + if (webidl.util.Type(V) !== "Object") { + throw webidl.errors.exception({ + header: prefix, + message: `${argument} (${webidl.util.Stringify(V)}) is not iterable.` + }); + } + const method = typeof Iterable === "function" ? Iterable() : V?.[Symbol.iterator]?.(); + const seq = []; + let index = 0; + if (method === void 0 || typeof method.next !== "function") { + throw webidl.errors.exception({ + header: prefix, + message: `${argument} is not iterable.` + }); + } + while (true) { + const { done, value } = method.next(); + if (done) { + break; + } + seq.push(converter(value, prefix, `${argument}[${index++}]`)); + } + return seq; + }; + }; + webidl.recordConverter = function(keyConverter, valueConverter) { + return (O, prefix, argument) => { + if (webidl.util.Type(O) !== "Object") { + throw webidl.errors.exception({ + header: prefix, + message: `${argument} ("${webidl.util.Type(O)}") is not an Object.` + }); + } + const result = {}; + if (!types.isProxy(O)) { + const keys2 = [...Object.getOwnPropertyNames(O), ...Object.getOwnPropertySymbols(O)]; + for (const key of keys2) { + const typedKey = keyConverter(key, prefix, argument); + const typedValue = valueConverter(O[key], prefix, argument); + result[typedKey] = typedValue; + } + return result; + } + const keys = Reflect.ownKeys(O); + for (const key of keys) { + const desc = Reflect.getOwnPropertyDescriptor(O, key); + if (desc?.enumerable) { + const typedKey = keyConverter(key, prefix, argument); + const typedValue = valueConverter(O[key], prefix, argument); + result[typedKey] = typedValue; + } + } + return result; + }; + }; + webidl.interfaceConverter = function(i) { + return (V, prefix, argument, opts) => { + if (opts?.strict !== false && !(V instanceof i)) { + throw webidl.errors.exception({ + header: prefix, + message: `Expected ${argument} ("${webidl.util.Stringify(V)}") to be an instance of ${i.name}.` + }); + } + return V; + }; + }; + webidl.dictionaryConverter = function(converters) { + return (dictionary, prefix, argument) => { + const type = webidl.util.Type(dictionary); + const dict = {}; + if (type === "Null" || type === "Undefined") { + return dict; + } else if (type !== "Object") { + throw webidl.errors.exception({ + header: prefix, + message: `Expected ${dictionary} to be one of: Null, Undefined, Object.` + }); + } + for (const options of converters) { + const { key, defaultValue, required, converter } = options; + if (required === true) { + if (!Object.hasOwn(dictionary, key)) { + throw webidl.errors.exception({ + header: prefix, + message: `Missing required key "${key}".` + }); + } + } + let value = dictionary[key]; + const hasDefault = Object.hasOwn(options, "defaultValue"); + if (hasDefault && value !== null) { + value ??= defaultValue(); + } + if (required || hasDefault || value !== void 0) { + value = converter(value, prefix, `${argument}.${key}`); + if (options.allowedValues && !options.allowedValues.includes(value)) { + throw webidl.errors.exception({ + header: prefix, + message: `${value} is not an accepted type. Expected one of ${options.allowedValues.join(", ")}.` + }); + } + dict[key] = value; + } + } + return dict; + }; + }; + webidl.nullableConverter = function(converter) { + return (V, prefix, argument) => { + if (V === null) { + return V; + } + return converter(V, prefix, argument); + }; + }; + webidl.converters.DOMString = function(V, prefix, argument, opts) { + if (V === null && opts?.legacyNullToEmptyString) { + return ""; + } + if (typeof V === "symbol") { + throw webidl.errors.exception({ + header: prefix, + message: `${argument} is a symbol, which cannot be converted to a DOMString.` + }); + } + return String(V); + }; + webidl.converters.ByteString = function(V, prefix, argument) { + const x = webidl.converters.DOMString(V, prefix, argument); + for (let index = 0; index < x.length; index++) { + if (x.charCodeAt(index) > 255) { + throw new TypeError( + `Cannot convert argument to a ByteString because the character at index ${index} has a value of ${x.charCodeAt(index)} which is greater than 255.` + ); + } + } + return x; + }; + webidl.converters.USVString = toUSVString; + webidl.converters.boolean = function(V) { + const x = Boolean(V); + return x; + }; + webidl.converters.any = function(V) { + return V; + }; + webidl.converters["long long"] = function(V, prefix, argument) { + const x = webidl.util.ConvertToInt(V, 64, "signed", void 0, prefix, argument); + return x; + }; + webidl.converters["unsigned long long"] = function(V, prefix, argument) { + const x = webidl.util.ConvertToInt(V, 64, "unsigned", void 0, prefix, argument); + return x; + }; + webidl.converters["unsigned long"] = function(V, prefix, argument) { + const x = webidl.util.ConvertToInt(V, 32, "unsigned", void 0, prefix, argument); + return x; + }; + webidl.converters["unsigned short"] = function(V, prefix, argument, opts) { + const x = webidl.util.ConvertToInt(V, 16, "unsigned", opts, prefix, argument); + return x; + }; + webidl.converters.ArrayBuffer = function(V, prefix, argument, opts) { + if (webidl.util.Type(V) !== "Object" || !types.isAnyArrayBuffer(V)) { + throw webidl.errors.conversionFailed({ + prefix, + argument: `${argument} ("${webidl.util.Stringify(V)}")`, + types: ["ArrayBuffer"] + }); + } + if (opts?.allowShared === false && types.isSharedArrayBuffer(V)) { + throw webidl.errors.exception({ + header: "ArrayBuffer", + message: "SharedArrayBuffer is not allowed." + }); + } + if (V.resizable || V.growable) { + throw webidl.errors.exception({ + header: "ArrayBuffer", + message: "Received a resizable ArrayBuffer." + }); + } + return V; + }; + webidl.converters.TypedArray = function(V, T, prefix, name, opts) { + if (webidl.util.Type(V) !== "Object" || !types.isTypedArray(V) || V.constructor.name !== T.name) { + throw webidl.errors.conversionFailed({ + prefix, + argument: `${name} ("${webidl.util.Stringify(V)}")`, + types: [T.name] + }); + } + if (opts?.allowShared === false && types.isSharedArrayBuffer(V.buffer)) { + throw webidl.errors.exception({ + header: "ArrayBuffer", + message: "SharedArrayBuffer is not allowed." + }); + } + if (V.buffer.resizable || V.buffer.growable) { + throw webidl.errors.exception({ + header: "ArrayBuffer", + message: "Received a resizable ArrayBuffer." + }); + } + return V; + }; + webidl.converters.DataView = function(V, prefix, name, opts) { + if (webidl.util.Type(V) !== "Object" || !types.isDataView(V)) { + throw webidl.errors.exception({ + header: prefix, + message: `${name} is not a DataView.` + }); + } + if (opts?.allowShared === false && types.isSharedArrayBuffer(V.buffer)) { + throw webidl.errors.exception({ + header: "ArrayBuffer", + message: "SharedArrayBuffer is not allowed." + }); + } + if (V.buffer.resizable || V.buffer.growable) { + throw webidl.errors.exception({ + header: "ArrayBuffer", + message: "Received a resizable ArrayBuffer." + }); + } + return V; + }; + webidl.converters.BufferSource = function(V, prefix, name, opts) { + if (types.isAnyArrayBuffer(V)) { + return webidl.converters.ArrayBuffer(V, prefix, name, { ...opts, allowShared: false }); + } + if (types.isTypedArray(V)) { + return webidl.converters.TypedArray(V, V.constructor, prefix, name, { ...opts, allowShared: false }); + } + if (types.isDataView(V)) { + return webidl.converters.DataView(V, prefix, name, { ...opts, allowShared: false }); + } + throw webidl.errors.conversionFailed({ + prefix, + argument: `${name} ("${webidl.util.Stringify(V)}")`, + types: ["BufferSource"] + }); + }; + webidl.converters["sequence"] = webidl.sequenceConverter( + webidl.converters.ByteString + ); + webidl.converters["sequence>"] = webidl.sequenceConverter( + webidl.converters["sequence"] + ); + webidl.converters["record"] = webidl.recordConverter( + webidl.converters.ByteString, + webidl.converters.ByteString + ); + module2.exports = { + webidl + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/util.js +var require_util2 = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/util.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { Transform } = require("stream"); + var zlib = require("zlib"); + var { redirectStatusSet, referrerPolicySet: referrerPolicyTokens, badPortsSet } = require_constants3(); + var { getGlobalOrigin } = require_global(); + var { collectASequenceOfCodePoints, collectAnHTTPQuotedString, removeChars, parseMIMEType } = require_data_url(); + var { performance: performance2 } = require("perf_hooks"); + var { isBlobLike, ReadableStreamFrom, isValidHTTPToken, normalizedMethodRecordsBase } = require_util(); + var assert = require("assert"); + var { isUint8Array } = require("util/types"); + var { webidl } = require_webidl(); + var supportedHashes = []; + var crypto; + try { + crypto = require("crypto"); + const possibleRelevantHashes = ["sha256", "sha384", "sha512"]; + supportedHashes = crypto.getHashes().filter((hash) => possibleRelevantHashes.includes(hash)); + } catch { + } + function responseURL(response) { + const urlList = response.urlList; + const length = urlList.length; + return length === 0 ? null : urlList[length - 1].toString(); + } + __name(responseURL, "responseURL"); + function responseLocationURL(response, requestFragment) { + if (!redirectStatusSet.has(response.status)) { + return null; + } + let location = response.headersList.get("location", true); + if (location !== null && isValidHeaderValue(location)) { + if (!isValidEncodedURL(location)) { + location = normalizeBinaryStringToUtf8(location); + } + location = new URL(location, responseURL(response)); + } + if (location && !location.hash) { + location.hash = requestFragment; + } + return location; + } + __name(responseLocationURL, "responseLocationURL"); + function isValidEncodedURL(url) { + for (let i = 0; i < url.length; ++i) { + const code = url.charCodeAt(i); + if (code > 126 || // Non-US-ASCII + DEL + code < 32) { + return false; + } + } + return true; + } + __name(isValidEncodedURL, "isValidEncodedURL"); + function normalizeBinaryStringToUtf8(value) { + return Buffer.from(value, "binary").toString("utf8"); + } + __name(normalizeBinaryStringToUtf8, "normalizeBinaryStringToUtf8"); + function requestCurrentURL(request) { + return request.urlList[request.urlList.length - 1]; + } + __name(requestCurrentURL, "requestCurrentURL"); + function requestBadPort(request) { + const url = requestCurrentURL(request); + if (urlIsHttpHttpsScheme(url) && badPortsSet.has(url.port)) { + return "blocked"; + } + return "allowed"; + } + __name(requestBadPort, "requestBadPort"); + function isErrorLike(object) { + return object instanceof Error || (object?.constructor?.name === "Error" || object?.constructor?.name === "DOMException"); + } + __name(isErrorLike, "isErrorLike"); + function isValidReasonPhrase(statusText) { + for (let i = 0; i < statusText.length; ++i) { + const c = statusText.charCodeAt(i); + if (!(c === 9 || // HTAB + c >= 32 && c <= 126 || // SP / VCHAR + c >= 128 && c <= 255)) { + return false; + } + } + return true; + } + __name(isValidReasonPhrase, "isValidReasonPhrase"); + var isValidHeaderName = isValidHTTPToken; + function isValidHeaderValue(potentialValue) { + return (potentialValue[0] === " " || potentialValue[0] === " " || potentialValue[potentialValue.length - 1] === " " || potentialValue[potentialValue.length - 1] === " " || potentialValue.includes("\n") || potentialValue.includes("\r") || potentialValue.includes("\0")) === false; + } + __name(isValidHeaderValue, "isValidHeaderValue"); + function setRequestReferrerPolicyOnRedirect(request, actualResponse) { + const { headersList } = actualResponse; + const policyHeader = (headersList.get("referrer-policy", true) ?? "").split(","); + let policy = ""; + if (policyHeader.length > 0) { + for (let i = policyHeader.length; i !== 0; i--) { + const token = policyHeader[i - 1].trim(); + if (referrerPolicyTokens.has(token)) { + policy = token; + break; + } + } + } + if (policy !== "") { + request.referrerPolicy = policy; + } + } + __name(setRequestReferrerPolicyOnRedirect, "setRequestReferrerPolicyOnRedirect"); + function crossOriginResourcePolicyCheck() { + return "allowed"; + } + __name(crossOriginResourcePolicyCheck, "crossOriginResourcePolicyCheck"); + function corsCheck() { + return "success"; + } + __name(corsCheck, "corsCheck"); + function TAOCheck() { + return "success"; + } + __name(TAOCheck, "TAOCheck"); + function appendFetchMetadata(httpRequest) { + let header = null; + header = httpRequest.mode; + httpRequest.headersList.set("sec-fetch-mode", header, true); + } + __name(appendFetchMetadata, "appendFetchMetadata"); + function appendRequestOriginHeader(request) { + let serializedOrigin = request.origin; + if (serializedOrigin === "client" || serializedOrigin === void 0) { + return; + } + if (request.responseTainting === "cors" || request.mode === "websocket") { + request.headersList.append("origin", serializedOrigin, true); + } else if (request.method !== "GET" && request.method !== "HEAD") { + switch (request.referrerPolicy) { + case "no-referrer": + serializedOrigin = null; + break; + case "no-referrer-when-downgrade": + case "strict-origin": + case "strict-origin-when-cross-origin": + if (request.origin && urlHasHttpsScheme(request.origin) && !urlHasHttpsScheme(requestCurrentURL(request))) { + serializedOrigin = null; + } + break; + case "same-origin": + if (!sameOrigin(request, requestCurrentURL(request))) { + serializedOrigin = null; + } + break; + default: + } + request.headersList.append("origin", serializedOrigin, true); + } + } + __name(appendRequestOriginHeader, "appendRequestOriginHeader"); + function coarsenTime(timestamp, crossOriginIsolatedCapability) { + return timestamp; + } + __name(coarsenTime, "coarsenTime"); + function clampAndCoarsenConnectionTimingInfo(connectionTimingInfo, defaultStartTime, crossOriginIsolatedCapability) { + if (!connectionTimingInfo?.startTime || connectionTimingInfo.startTime < defaultStartTime) { + return { + domainLookupStartTime: defaultStartTime, + domainLookupEndTime: defaultStartTime, + connectionStartTime: defaultStartTime, + connectionEndTime: defaultStartTime, + secureConnectionStartTime: defaultStartTime, + ALPNNegotiatedProtocol: connectionTimingInfo?.ALPNNegotiatedProtocol + }; + } + return { + domainLookupStartTime: coarsenTime(connectionTimingInfo.domainLookupStartTime, crossOriginIsolatedCapability), + domainLookupEndTime: coarsenTime(connectionTimingInfo.domainLookupEndTime, crossOriginIsolatedCapability), + connectionStartTime: coarsenTime(connectionTimingInfo.connectionStartTime, crossOriginIsolatedCapability), + connectionEndTime: coarsenTime(connectionTimingInfo.connectionEndTime, crossOriginIsolatedCapability), + secureConnectionStartTime: coarsenTime(connectionTimingInfo.secureConnectionStartTime, crossOriginIsolatedCapability), + ALPNNegotiatedProtocol: connectionTimingInfo.ALPNNegotiatedProtocol + }; + } + __name(clampAndCoarsenConnectionTimingInfo, "clampAndCoarsenConnectionTimingInfo"); + function coarsenedSharedCurrentTime(crossOriginIsolatedCapability) { + return coarsenTime(performance2.now(), crossOriginIsolatedCapability); + } + __name(coarsenedSharedCurrentTime, "coarsenedSharedCurrentTime"); + function createOpaqueTimingInfo(timingInfo) { + return { + startTime: timingInfo.startTime ?? 0, + redirectStartTime: 0, + redirectEndTime: 0, + postRedirectStartTime: timingInfo.startTime ?? 0, + finalServiceWorkerStartTime: 0, + finalNetworkResponseStartTime: 0, + finalNetworkRequestStartTime: 0, + endTime: 0, + encodedBodySize: 0, + decodedBodySize: 0, + finalConnectionTimingInfo: null + }; + } + __name(createOpaqueTimingInfo, "createOpaqueTimingInfo"); + function makePolicyContainer() { + return { + referrerPolicy: "strict-origin-when-cross-origin" + }; + } + __name(makePolicyContainer, "makePolicyContainer"); + function clonePolicyContainer(policyContainer) { + return { + referrerPolicy: policyContainer.referrerPolicy + }; + } + __name(clonePolicyContainer, "clonePolicyContainer"); + function determineRequestsReferrer(request) { + const policy = request.referrerPolicy; + assert(policy); + let referrerSource = null; + if (request.referrer === "client") { + const globalOrigin = getGlobalOrigin(); + if (!globalOrigin || globalOrigin.origin === "null") { + return "no-referrer"; + } + referrerSource = new URL(globalOrigin); + } else if (request.referrer instanceof URL) { + referrerSource = request.referrer; + } + let referrerURL = stripURLForReferrer(referrerSource); + const referrerOrigin = stripURLForReferrer(referrerSource, true); + if (referrerURL.toString().length > 4096) { + referrerURL = referrerOrigin; + } + const areSameOrigin = sameOrigin(request, referrerURL); + const isNonPotentiallyTrustWorthy = isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(request.url); + switch (policy) { + case "origin": + return referrerOrigin != null ? referrerOrigin : stripURLForReferrer(referrerSource, true); + case "unsafe-url": + return referrerURL; + case "same-origin": + return areSameOrigin ? referrerOrigin : "no-referrer"; + case "origin-when-cross-origin": + return areSameOrigin ? referrerURL : referrerOrigin; + case "strict-origin-when-cross-origin": { + const currentURL = requestCurrentURL(request); + if (sameOrigin(referrerURL, currentURL)) { + return referrerURL; + } + if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) { + return "no-referrer"; + } + return referrerOrigin; + } + case "strict-origin": + case "no-referrer-when-downgrade": + default: + return isNonPotentiallyTrustWorthy ? "no-referrer" : referrerOrigin; + } + } + __name(determineRequestsReferrer, "determineRequestsReferrer"); + function stripURLForReferrer(url, originOnly) { + assert(url instanceof URL); + url = new URL(url); + if (url.protocol === "file:" || url.protocol === "about:" || url.protocol === "blank:") { + return "no-referrer"; + } + url.username = ""; + url.password = ""; + url.hash = ""; + if (originOnly) { + url.pathname = ""; + url.search = ""; + } + return url; + } + __name(stripURLForReferrer, "stripURLForReferrer"); + function isURLPotentiallyTrustworthy(url) { + if (!(url instanceof URL)) { + return false; + } + if (url.href === "about:blank" || url.href === "about:srcdoc") { + return true; + } + if (url.protocol === "data:") + return true; + if (url.protocol === "file:") + return true; + return isOriginPotentiallyTrustworthy(url.origin); + function isOriginPotentiallyTrustworthy(origin) { + if (origin == null || origin === "null") + return false; + const originAsURL = new URL(origin); + if (originAsURL.protocol === "https:" || originAsURL.protocol === "wss:") { + return true; + } + if (/^127(?:\.[0-9]+){0,2}\.[0-9]+$|^\[(?:0*:)*?:?0*1\]$/.test(originAsURL.hostname) || (originAsURL.hostname === "localhost" || originAsURL.hostname.includes("localhost.")) || originAsURL.hostname.endsWith(".localhost")) { + return true; + } + return false; + } + __name(isOriginPotentiallyTrustworthy, "isOriginPotentiallyTrustworthy"); + } + __name(isURLPotentiallyTrustworthy, "isURLPotentiallyTrustworthy"); + function bytesMatch(bytes, metadataList) { + if (crypto === void 0) { + return true; + } + const parsedMetadata = parseMetadata(metadataList); + if (parsedMetadata === "no metadata") { + return true; + } + if (parsedMetadata.length === 0) { + return true; + } + const strongest = getStrongestMetadata(parsedMetadata); + const metadata = filterMetadataListByAlgorithm(parsedMetadata, strongest); + for (const item of metadata) { + const algorithm = item.algo; + const expectedValue = item.hash; + let actualValue = crypto.createHash(algorithm).update(bytes).digest("base64"); + if (actualValue[actualValue.length - 1] === "=") { + if (actualValue[actualValue.length - 2] === "=") { + actualValue = actualValue.slice(0, -2); + } else { + actualValue = actualValue.slice(0, -1); + } + } + if (compareBase64Mixed(actualValue, expectedValue)) { + return true; + } + } + return false; + } + __name(bytesMatch, "bytesMatch"); + var parseHashWithOptions = /(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i; + function parseMetadata(metadata) { + const result = []; + let empty = true; + for (const token of metadata.split(" ")) { + empty = false; + const parsedToken = parseHashWithOptions.exec(token); + if (parsedToken === null || parsedToken.groups === void 0 || parsedToken.groups.algo === void 0) { + continue; + } + const algorithm = parsedToken.groups.algo.toLowerCase(); + if (supportedHashes.includes(algorithm)) { + result.push(parsedToken.groups); + } + } + if (empty === true) { + return "no metadata"; + } + return result; + } + __name(parseMetadata, "parseMetadata"); + function getStrongestMetadata(metadataList) { + let algorithm = metadataList[0].algo; + if (algorithm[3] === "5") { + return algorithm; + } + for (let i = 1; i < metadataList.length; ++i) { + const metadata = metadataList[i]; + if (metadata.algo[3] === "5") { + algorithm = "sha512"; + break; + } else if (algorithm[3] === "3") { + continue; + } else if (metadata.algo[3] === "3") { + algorithm = "sha384"; + } + } + return algorithm; + } + __name(getStrongestMetadata, "getStrongestMetadata"); + function filterMetadataListByAlgorithm(metadataList, algorithm) { + if (metadataList.length === 1) { + return metadataList; + } + let pos = 0; + for (let i = 0; i < metadataList.length; ++i) { + if (metadataList[i].algo === algorithm) { + metadataList[pos++] = metadataList[i]; + } + } + metadataList.length = pos; + return metadataList; + } + __name(filterMetadataListByAlgorithm, "filterMetadataListByAlgorithm"); + function compareBase64Mixed(actualValue, expectedValue) { + if (actualValue.length !== expectedValue.length) { + return false; + } + for (let i = 0; i < actualValue.length; ++i) { + if (actualValue[i] !== expectedValue[i]) { + if (actualValue[i] === "+" && expectedValue[i] === "-" || actualValue[i] === "/" && expectedValue[i] === "_") { + continue; + } + return false; + } + } + return true; + } + __name(compareBase64Mixed, "compareBase64Mixed"); + function tryUpgradeRequestToAPotentiallyTrustworthyURL(request) { + } + __name(tryUpgradeRequestToAPotentiallyTrustworthyURL, "tryUpgradeRequestToAPotentiallyTrustworthyURL"); + function sameOrigin(A, B) { + if (A.origin === B.origin && A.origin === "null") { + return true; + } + if (A.protocol === B.protocol && A.hostname === B.hostname && A.port === B.port) { + return true; + } + return false; + } + __name(sameOrigin, "sameOrigin"); + function createDeferredPromise() { + let res; + let rej; + const promise = new Promise((resolve, reject) => { + res = resolve; + rej = reject; + }); + return { promise, resolve: res, reject: rej }; + } + __name(createDeferredPromise, "createDeferredPromise"); + function isAborted(fetchParams) { + return fetchParams.controller.state === "aborted"; + } + __name(isAborted, "isAborted"); + function isCancelled(fetchParams) { + return fetchParams.controller.state === "aborted" || fetchParams.controller.state === "terminated"; + } + __name(isCancelled, "isCancelled"); + function normalizeMethod(method) { + return normalizedMethodRecordsBase[method.toLowerCase()] ?? method; + } + __name(normalizeMethod, "normalizeMethod"); + function serializeJavascriptValueToJSONString(value) { + const result = JSON.stringify(value); + if (result === void 0) { + throw new TypeError("Value is not JSON serializable"); + } + assert(typeof result === "string"); + return result; + } + __name(serializeJavascriptValueToJSONString, "serializeJavascriptValueToJSONString"); + var esIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())); + function createIterator(name, kInternalIterator, keyIndex = 0, valueIndex = 1) { + var _target, _kind, _index; + const _FastIterableIterator = class _FastIterableIterator { + /** + * @see https://webidl.spec.whatwg.org/#dfn-default-iterator-object + * @param {unknown} target + * @param {'key' | 'value' | 'key+value'} kind + */ + constructor(target, kind) { + /** @type {any} */ + __privateAdd(this, _target, void 0); + /** @type {'key' | 'value' | 'key+value'} */ + __privateAdd(this, _kind, void 0); + /** @type {number} */ + __privateAdd(this, _index, void 0); + __privateSet(this, _target, target); + __privateSet(this, _kind, kind); + __privateSet(this, _index, 0); + } + next() { + if (typeof this !== "object" || this === null || !__privateIn(_target, this)) { + throw new TypeError( + `'next' called on an object that does not implement interface ${name} Iterator.` + ); + } + const index = __privateGet(this, _index); + const values = __privateGet(this, _target)[kInternalIterator]; + const len = values.length; + if (index >= len) { + return { + value: void 0, + done: true + }; + } + const { [keyIndex]: key, [valueIndex]: value } = values[index]; + __privateSet(this, _index, index + 1); + let result; + switch (__privateGet(this, _kind)) { + case "key": + result = key; + break; + case "value": + result = value; + break; + case "key+value": + result = [key, value]; + break; + } + return { + value: result, + done: false + }; + } + }; + _target = new WeakMap(); + _kind = new WeakMap(); + _index = new WeakMap(); + __name(_FastIterableIterator, "FastIterableIterator"); + let FastIterableIterator = _FastIterableIterator; + delete FastIterableIterator.prototype.constructor; + Object.setPrototypeOf(FastIterableIterator.prototype, esIteratorPrototype); + Object.defineProperties(FastIterableIterator.prototype, { + [Symbol.toStringTag]: { + writable: false, + enumerable: false, + configurable: true, + value: `${name} Iterator` + }, + next: { writable: true, enumerable: true, configurable: true } + }); + return function(target, kind) { + return new FastIterableIterator(target, kind); + }; + } + __name(createIterator, "createIterator"); + function iteratorMixin(name, object, kInternalIterator, keyIndex = 0, valueIndex = 1) { + const makeIterator = createIterator(name, kInternalIterator, keyIndex, valueIndex); + const properties = { + keys: { + writable: true, + enumerable: true, + configurable: true, + value: /* @__PURE__ */ __name(function keys() { + webidl.brandCheck(this, object); + return makeIterator(this, "key"); + }, "keys") + }, + values: { + writable: true, + enumerable: true, + configurable: true, + value: /* @__PURE__ */ __name(function values() { + webidl.brandCheck(this, object); + return makeIterator(this, "value"); + }, "values") + }, + entries: { + writable: true, + enumerable: true, + configurable: true, + value: /* @__PURE__ */ __name(function entries() { + webidl.brandCheck(this, object); + return makeIterator(this, "key+value"); + }, "entries") + }, + forEach: { + writable: true, + enumerable: true, + configurable: true, + value: /* @__PURE__ */ __name(function forEach(callbackfn, thisArg = globalThis) { + webidl.brandCheck(this, object); + webidl.argumentLengthCheck(arguments, 1, `${name}.forEach`); + if (typeof callbackfn !== "function") { + throw new TypeError( + `Failed to execute 'forEach' on '${name}': parameter 1 is not of type 'Function'.` + ); + } + for (const { 0: key, 1: value } of makeIterator(this, "key+value")) { + callbackfn.call(thisArg, value, key, this); + } + }, "forEach") + } + }; + return Object.defineProperties(object.prototype, { + ...properties, + [Symbol.iterator]: { + writable: true, + enumerable: false, + configurable: true, + value: properties.entries.value + } + }); + } + __name(iteratorMixin, "iteratorMixin"); + async function fullyReadBody(body, processBody, processBodyError) { + const successSteps = processBody; + const errorSteps = processBodyError; + let reader; + try { + reader = body.stream.getReader(); + } catch (e) { + errorSteps(e); + return; + } + try { + successSteps(await readAllBytes(reader)); + } catch (e) { + errorSteps(e); + } + } + __name(fullyReadBody, "fullyReadBody"); + function isReadableStreamLike(stream) { + return stream instanceof ReadableStream || stream[Symbol.toStringTag] === "ReadableStream" && typeof stream.tee === "function"; + } + __name(isReadableStreamLike, "isReadableStreamLike"); + function readableStreamClose(controller) { + try { + controller.close(); + controller.byobRequest?.respond(0); + } catch (err) { + if (!err.message.includes("Controller is already closed") && !err.message.includes("ReadableStream is already closed")) { + throw err; + } + } + } + __name(readableStreamClose, "readableStreamClose"); + var invalidIsomorphicEncodeValueRegex = /[^\x00-\xFF]/; + function isomorphicEncode(input) { + assert(!invalidIsomorphicEncodeValueRegex.test(input)); + return input; + } + __name(isomorphicEncode, "isomorphicEncode"); + async function readAllBytes(reader) { + const bytes = []; + let byteLength = 0; + while (true) { + const { done, value: chunk } = await reader.read(); + if (done) { + return Buffer.concat(bytes, byteLength); + } + if (!isUint8Array(chunk)) { + throw new TypeError("Received non-Uint8Array chunk"); + } + bytes.push(chunk); + byteLength += chunk.length; + } + } + __name(readAllBytes, "readAllBytes"); + function urlIsLocal(url) { + assert("protocol" in url); + const protocol = url.protocol; + return protocol === "about:" || protocol === "blob:" || protocol === "data:"; + } + __name(urlIsLocal, "urlIsLocal"); + function urlHasHttpsScheme(url) { + return typeof url === "string" && url[5] === ":" && url[0] === "h" && url[1] === "t" && url[2] === "t" && url[3] === "p" && url[4] === "s" || url.protocol === "https:"; + } + __name(urlHasHttpsScheme, "urlHasHttpsScheme"); + function urlIsHttpHttpsScheme(url) { + assert("protocol" in url); + const protocol = url.protocol; + return protocol === "http:" || protocol === "https:"; + } + __name(urlIsHttpHttpsScheme, "urlIsHttpHttpsScheme"); + function simpleRangeHeaderValue(value, allowWhitespace) { + const data = value; + if (!data.startsWith("bytes")) { + return "failure"; + } + const position = { position: 5 }; + if (allowWhitespace) { + collectASequenceOfCodePoints( + (char) => char === " " || char === " ", + data, + position + ); + } + if (data.charCodeAt(position.position) !== 61) { + return "failure"; + } + position.position++; + if (allowWhitespace) { + collectASequenceOfCodePoints( + (char) => char === " " || char === " ", + data, + position + ); + } + const rangeStart = collectASequenceOfCodePoints( + (char) => { + const code = char.charCodeAt(0); + return code >= 48 && code <= 57; + }, + data, + position + ); + const rangeStartValue = rangeStart.length ? Number(rangeStart) : null; + if (allowWhitespace) { + collectASequenceOfCodePoints( + (char) => char === " " || char === " ", + data, + position + ); + } + if (data.charCodeAt(position.position) !== 45) { + return "failure"; + } + position.position++; + if (allowWhitespace) { + collectASequenceOfCodePoints( + (char) => char === " " || char === " ", + data, + position + ); + } + const rangeEnd = collectASequenceOfCodePoints( + (char) => { + const code = char.charCodeAt(0); + return code >= 48 && code <= 57; + }, + data, + position + ); + const rangeEndValue = rangeEnd.length ? Number(rangeEnd) : null; + if (position.position < data.length) { + return "failure"; + } + if (rangeEndValue === null && rangeStartValue === null) { + return "failure"; + } + if (rangeStartValue > rangeEndValue) { + return "failure"; + } + return { rangeStartValue, rangeEndValue }; + } + __name(simpleRangeHeaderValue, "simpleRangeHeaderValue"); + function buildContentRange(rangeStart, rangeEnd, fullLength) { + let contentRange = "bytes "; + contentRange += isomorphicEncode(`${rangeStart}`); + contentRange += "-"; + contentRange += isomorphicEncode(`${rangeEnd}`); + contentRange += "/"; + contentRange += isomorphicEncode(`${fullLength}`); + return contentRange; + } + __name(buildContentRange, "buildContentRange"); + var _zlibOptions; + var _InflateStream = class _InflateStream extends Transform { + /** @param {zlib.ZlibOptions} [zlibOptions] */ + constructor(zlibOptions) { + super(); + __privateAdd(this, _zlibOptions, void 0); + __privateSet(this, _zlibOptions, zlibOptions); + } + _transform(chunk, encoding, callback) { + if (!this._inflateStream) { + if (chunk.length === 0) { + callback(); + return; + } + this._inflateStream = (chunk[0] & 15) === 8 ? zlib.createInflate(__privateGet(this, _zlibOptions)) : zlib.createInflateRaw(__privateGet(this, _zlibOptions)); + this._inflateStream.on("data", this.push.bind(this)); + this._inflateStream.on("end", () => this.push(null)); + this._inflateStream.on("error", (err) => this.destroy(err)); + } + this._inflateStream.write(chunk, encoding, callback); + } + _final(callback) { + if (this._inflateStream) { + this._inflateStream.end(); + this._inflateStream = null; + } + callback(); + } + }; + _zlibOptions = new WeakMap(); + __name(_InflateStream, "InflateStream"); + var InflateStream = _InflateStream; + function createInflate(zlibOptions) { + return new InflateStream(zlibOptions); + } + __name(createInflate, "createInflate"); + function extractMimeType(headers) { + let charset = null; + let essence = null; + let mimeType = null; + const values = getDecodeSplit("content-type", headers); + if (values === null) { + return "failure"; + } + for (const value of values) { + const temporaryMimeType = parseMIMEType(value); + if (temporaryMimeType === "failure" || temporaryMimeType.essence === "*/*") { + continue; + } + mimeType = temporaryMimeType; + if (mimeType.essence !== essence) { + charset = null; + if (mimeType.parameters.has("charset")) { + charset = mimeType.parameters.get("charset"); + } + essence = mimeType.essence; + } else if (!mimeType.parameters.has("charset") && charset !== null) { + mimeType.parameters.set("charset", charset); + } + } + if (mimeType == null) { + return "failure"; + } + return mimeType; + } + __name(extractMimeType, "extractMimeType"); + function gettingDecodingSplitting(value) { + const input = value; + const position = { position: 0 }; + const values = []; + let temporaryValue = ""; + while (position.position < input.length) { + temporaryValue += collectASequenceOfCodePoints( + (char) => char !== '"' && char !== ",", + input, + position + ); + if (position.position < input.length) { + if (input.charCodeAt(position.position) === 34) { + temporaryValue += collectAnHTTPQuotedString( + input, + position + ); + if (position.position < input.length) { + continue; + } + } else { + assert(input.charCodeAt(position.position) === 44); + position.position++; + } + } + temporaryValue = removeChars(temporaryValue, true, true, (char) => char === 9 || char === 32); + values.push(temporaryValue); + temporaryValue = ""; + } + return values; + } + __name(gettingDecodingSplitting, "gettingDecodingSplitting"); + function getDecodeSplit(name, list) { + const value = list.get(name, true); + if (value === null) { + return null; + } + return gettingDecodingSplitting(value); + } + __name(getDecodeSplit, "getDecodeSplit"); + var textDecoder = new TextDecoder(); + function utf8DecodeBytes(buffer) { + if (buffer.length === 0) { + return ""; + } + if (buffer[0] === 239 && buffer[1] === 187 && buffer[2] === 191) { + buffer = buffer.subarray(3); + } + const output = textDecoder.decode(buffer); + return output; + } + __name(utf8DecodeBytes, "utf8DecodeBytes"); + var _EnvironmentSettingsObjectBase = class _EnvironmentSettingsObjectBase { + get baseUrl() { + return getGlobalOrigin(); + } + get origin() { + return this.baseUrl?.origin; + } + policyContainer = makePolicyContainer(); + }; + __name(_EnvironmentSettingsObjectBase, "EnvironmentSettingsObjectBase"); + var EnvironmentSettingsObjectBase = _EnvironmentSettingsObjectBase; + var _EnvironmentSettingsObject = class _EnvironmentSettingsObject { + settingsObject = new EnvironmentSettingsObjectBase(); + }; + __name(_EnvironmentSettingsObject, "EnvironmentSettingsObject"); + var EnvironmentSettingsObject = _EnvironmentSettingsObject; + var environmentSettingsObject = new EnvironmentSettingsObject(); + module2.exports = { + isAborted, + isCancelled, + isValidEncodedURL, + createDeferredPromise, + ReadableStreamFrom, + tryUpgradeRequestToAPotentiallyTrustworthyURL, + clampAndCoarsenConnectionTimingInfo, + coarsenedSharedCurrentTime, + determineRequestsReferrer, + makePolicyContainer, + clonePolicyContainer, + appendFetchMetadata, + appendRequestOriginHeader, + TAOCheck, + corsCheck, + crossOriginResourcePolicyCheck, + createOpaqueTimingInfo, + setRequestReferrerPolicyOnRedirect, + isValidHTTPToken, + requestBadPort, + requestCurrentURL, + responseURL, + responseLocationURL, + isBlobLike, + isURLPotentiallyTrustworthy, + isValidReasonPhrase, + sameOrigin, + normalizeMethod, + serializeJavascriptValueToJSONString, + iteratorMixin, + createIterator, + isValidHeaderName, + isValidHeaderValue, + isErrorLike, + fullyReadBody, + bytesMatch, + isReadableStreamLike, + readableStreamClose, + isomorphicEncode, + urlIsLocal, + urlHasHttpsScheme, + urlIsHttpHttpsScheme, + readAllBytes, + simpleRangeHeaderValue, + buildContentRange, + parseMetadata, + createInflate, + extractMimeType, + getDecodeSplit, + utf8DecodeBytes, + environmentSettingsObject + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/symbols.js +var require_symbols2 = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/symbols.js"(exports2, module2) { + "use strict"; + init_define_process(); + module2.exports = { + kUrl: Symbol("url"), + kHeaders: Symbol("headers"), + kSignal: Symbol("signal"), + kState: Symbol("state"), + kDispatcher: Symbol("dispatcher") + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/file.js +var require_file = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/file.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { Blob: Blob3, File: File2 } = require("buffer"); + var { kState } = require_symbols2(); + var { webidl } = require_webidl(); + var _FileLike = class _FileLike { + constructor(blobLike, fileName, options = {}) { + const n = fileName; + const t = options.type; + const d = options.lastModified ?? Date.now(); + this[kState] = { + blobLike, + name: n, + type: t, + lastModified: d + }; + } + stream(...args) { + webidl.brandCheck(this, _FileLike); + return this[kState].blobLike.stream(...args); + } + arrayBuffer(...args) { + webidl.brandCheck(this, _FileLike); + return this[kState].blobLike.arrayBuffer(...args); + } + slice(...args) { + webidl.brandCheck(this, _FileLike); + return this[kState].blobLike.slice(...args); + } + text(...args) { + webidl.brandCheck(this, _FileLike); + return this[kState].blobLike.text(...args); + } + get size() { + webidl.brandCheck(this, _FileLike); + return this[kState].blobLike.size; + } + get type() { + webidl.brandCheck(this, _FileLike); + return this[kState].blobLike.type; + } + get name() { + webidl.brandCheck(this, _FileLike); + return this[kState].name; + } + get lastModified() { + webidl.brandCheck(this, _FileLike); + return this[kState].lastModified; + } + get [Symbol.toStringTag]() { + return "File"; + } + }; + __name(_FileLike, "FileLike"); + var FileLike = _FileLike; + webidl.converters.Blob = webidl.interfaceConverter(Blob3); + function isFileLike(object) { + return object instanceof File2 || object && (typeof object.stream === "function" || typeof object.arrayBuffer === "function") && object[Symbol.toStringTag] === "File"; + } + __name(isFileLike, "isFileLike"); + module2.exports = { FileLike, isFileLike }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/formdata.js +var require_formdata = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/formdata.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { isBlobLike, iteratorMixin } = require_util2(); + var { kState } = require_symbols2(); + var { kEnumerableProperty } = require_util(); + var { FileLike, isFileLike } = require_file(); + var { webidl } = require_webidl(); + var { File: NativeFile } = require("buffer"); + var nodeUtil = require("util"); + var File2 = globalThis.File ?? NativeFile; + var _FormData = class _FormData { + constructor(form) { + webidl.util.markAsUncloneable(this); + if (form !== void 0) { + throw webidl.errors.conversionFailed({ + prefix: "FormData constructor", + argument: "Argument 1", + types: ["undefined"] + }); + } + this[kState] = []; + } + append(name, value, filename = void 0) { + webidl.brandCheck(this, _FormData); + const prefix = "FormData.append"; + webidl.argumentLengthCheck(arguments, 2, prefix); + if (arguments.length === 3 && !isBlobLike(value)) { + throw new TypeError( + "Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'" + ); + } + name = webidl.converters.USVString(name, prefix, "name"); + value = isBlobLike(value) ? webidl.converters.Blob(value, prefix, "value", { strict: false }) : webidl.converters.USVString(value, prefix, "value"); + filename = arguments.length === 3 ? webidl.converters.USVString(filename, prefix, "filename") : void 0; + const entry = makeEntry(name, value, filename); + this[kState].push(entry); + } + delete(name) { + webidl.brandCheck(this, _FormData); + const prefix = "FormData.delete"; + webidl.argumentLengthCheck(arguments, 1, prefix); + name = webidl.converters.USVString(name, prefix, "name"); + this[kState] = this[kState].filter((entry) => entry.name !== name); + } + get(name) { + webidl.brandCheck(this, _FormData); + const prefix = "FormData.get"; + webidl.argumentLengthCheck(arguments, 1, prefix); + name = webidl.converters.USVString(name, prefix, "name"); + const idx = this[kState].findIndex((entry) => entry.name === name); + if (idx === -1) { + return null; + } + return this[kState][idx].value; + } + getAll(name) { + webidl.brandCheck(this, _FormData); + const prefix = "FormData.getAll"; + webidl.argumentLengthCheck(arguments, 1, prefix); + name = webidl.converters.USVString(name, prefix, "name"); + return this[kState].filter((entry) => entry.name === name).map((entry) => entry.value); + } + has(name) { + webidl.brandCheck(this, _FormData); + const prefix = "FormData.has"; + webidl.argumentLengthCheck(arguments, 1, prefix); + name = webidl.converters.USVString(name, prefix, "name"); + return this[kState].findIndex((entry) => entry.name === name) !== -1; + } + set(name, value, filename = void 0) { + webidl.brandCheck(this, _FormData); + const prefix = "FormData.set"; + webidl.argumentLengthCheck(arguments, 2, prefix); + if (arguments.length === 3 && !isBlobLike(value)) { + throw new TypeError( + "Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'" + ); + } + name = webidl.converters.USVString(name, prefix, "name"); + value = isBlobLike(value) ? webidl.converters.Blob(value, prefix, "name", { strict: false }) : webidl.converters.USVString(value, prefix, "name"); + filename = arguments.length === 3 ? webidl.converters.USVString(filename, prefix, "name") : void 0; + const entry = makeEntry(name, value, filename); + const idx = this[kState].findIndex((entry2) => entry2.name === name); + if (idx !== -1) { + this[kState] = [ + ...this[kState].slice(0, idx), + entry, + ...this[kState].slice(idx + 1).filter((entry2) => entry2.name !== name) + ]; + } else { + this[kState].push(entry); + } + } + [nodeUtil.inspect.custom](depth, options) { + const state = this[kState].reduce((a, b) => { + if (a[b.name]) { + if (Array.isArray(a[b.name])) { + a[b.name].push(b.value); + } else { + a[b.name] = [a[b.name], b.value]; + } + } else { + a[b.name] = b.value; + } + return a; + }, { __proto__: null }); + options.depth ??= depth; + options.colors ??= true; + const output = nodeUtil.formatWithOptions(options, state); + return `FormData ${output.slice(output.indexOf("]") + 2)}`; + } + }; + __name(_FormData, "FormData"); + var FormData2 = _FormData; + iteratorMixin("FormData", FormData2, kState, "name", "value"); + Object.defineProperties(FormData2.prototype, { + append: kEnumerableProperty, + delete: kEnumerableProperty, + get: kEnumerableProperty, + getAll: kEnumerableProperty, + has: kEnumerableProperty, + set: kEnumerableProperty, + [Symbol.toStringTag]: { + value: "FormData", + configurable: true + } + }); + function makeEntry(name, value, filename) { + if (typeof value === "string") { + } else { + if (!isFileLike(value)) { + value = value instanceof Blob ? new File2([value], "blob", { type: value.type }) : new FileLike(value, "blob", { type: value.type }); + } + if (filename !== void 0) { + const options = { + type: value.type, + lastModified: value.lastModified + }; + value = value instanceof NativeFile ? new File2([value], filename, options) : new FileLike(value, filename, options); + } + } + return { name, value }; + } + __name(makeEntry, "makeEntry"); + module2.exports = { FormData: FormData2, makeEntry }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/formdata-parser.js +var require_formdata_parser = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/formdata-parser.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { isUSVString, bufferToLowerCasedHeaderName } = require_util(); + var { utf8DecodeBytes } = require_util2(); + var { HTTP_TOKEN_CODEPOINTS, isomorphicDecode } = require_data_url(); + var { isFileLike } = require_file(); + var { makeEntry } = require_formdata(); + var assert = require("assert"); + var { File: NodeFile } = require("buffer"); + var File2 = globalThis.File ?? NodeFile; + var formDataNameBuffer = Buffer.from('form-data; name="'); + var filenameBuffer = Buffer.from("; filename"); + var dd = Buffer.from("--"); + var ddcrlf = Buffer.from("--\r\n"); + function isAsciiString(chars) { + for (let i = 0; i < chars.length; ++i) { + if ((chars.charCodeAt(i) & ~127) !== 0) { + return false; + } + } + return true; + } + __name(isAsciiString, "isAsciiString"); + function validateBoundary(boundary) { + const length = boundary.length; + if (length < 27 || length > 70) { + return false; + } + for (let i = 0; i < length; ++i) { + const cp = boundary.charCodeAt(i); + if (!(cp >= 48 && cp <= 57 || cp >= 65 && cp <= 90 || cp >= 97 && cp <= 122 || cp === 39 || cp === 45 || cp === 95)) { + return false; + } + } + return true; + } + __name(validateBoundary, "validateBoundary"); + function multipartFormDataParser(input, mimeType) { + assert(mimeType !== "failure" && mimeType.essence === "multipart/form-data"); + const boundaryString = mimeType.parameters.get("boundary"); + if (boundaryString === void 0) { + return "failure"; + } + const boundary = Buffer.from(`--${boundaryString}`, "utf8"); + const entryList = []; + const position = { position: 0 }; + while (input[position.position] === 13 && input[position.position + 1] === 10) { + position.position += 2; + } + let trailing = input.length; + while (input[trailing - 1] === 10 && input[trailing - 2] === 13) { + trailing -= 2; + } + if (trailing !== input.length) { + input = input.subarray(0, trailing); + } + while (true) { + if (input.subarray(position.position, position.position + boundary.length).equals(boundary)) { + position.position += boundary.length; + } else { + return "failure"; + } + if (position.position === input.length - 2 && bufferStartsWith(input, dd, position) || position.position === input.length - 4 && bufferStartsWith(input, ddcrlf, position)) { + return entryList; + } + if (input[position.position] !== 13 || input[position.position + 1] !== 10) { + return "failure"; + } + position.position += 2; + const result = parseMultipartFormDataHeaders(input, position); + if (result === "failure") { + return "failure"; + } + let { name, filename, contentType, encoding } = result; + position.position += 2; + let body; + { + const boundaryIndex = input.indexOf(boundary.subarray(2), position.position); + if (boundaryIndex === -1) { + return "failure"; + } + body = input.subarray(position.position, boundaryIndex - 4); + position.position += body.length; + if (encoding === "base64") { + body = Buffer.from(body.toString(), "base64"); + } + } + if (input[position.position] !== 13 || input[position.position + 1] !== 10) { + return "failure"; + } else { + position.position += 2; + } + let value; + if (filename !== null) { + contentType ??= "text/plain"; + if (!isAsciiString(contentType)) { + contentType = ""; + } + value = new File2([body], filename, { type: contentType }); + } else { + value = utf8DecodeBytes(Buffer.from(body)); + } + assert(isUSVString(name)); + assert(typeof value === "string" && isUSVString(value) || isFileLike(value)); + entryList.push(makeEntry(name, value, filename)); + } + } + __name(multipartFormDataParser, "multipartFormDataParser"); + function parseMultipartFormDataHeaders(input, position) { + let name = null; + let filename = null; + let contentType = null; + let encoding = null; + while (true) { + if (input[position.position] === 13 && input[position.position + 1] === 10) { + if (name === null) { + return "failure"; + } + return { name, filename, contentType, encoding }; + } + let headerName = collectASequenceOfBytes( + (char) => char !== 10 && char !== 13 && char !== 58, + input, + position + ); + headerName = removeChars(headerName, true, true, (char) => char === 9 || char === 32); + if (!HTTP_TOKEN_CODEPOINTS.test(headerName.toString())) { + return "failure"; + } + if (input[position.position] !== 58) { + return "failure"; + } + position.position++; + collectASequenceOfBytes( + (char) => char === 32 || char === 9, + input, + position + ); + switch (bufferToLowerCasedHeaderName(headerName)) { + case "content-disposition": { + name = filename = null; + if (!bufferStartsWith(input, formDataNameBuffer, position)) { + return "failure"; + } + position.position += 17; + name = parseMultipartFormDataName(input, position); + if (name === null) { + return "failure"; + } + if (bufferStartsWith(input, filenameBuffer, position)) { + let check = position.position + filenameBuffer.length; + if (input[check] === 42) { + position.position += 1; + check += 1; + } + if (input[check] !== 61 || input[check + 1] !== 34) { + return "failure"; + } + position.position += 12; + filename = parseMultipartFormDataName(input, position); + if (filename === null) { + return "failure"; + } + } + break; + } + case "content-type": { + let headerValue = collectASequenceOfBytes( + (char) => char !== 10 && char !== 13, + input, + position + ); + headerValue = removeChars(headerValue, false, true, (char) => char === 9 || char === 32); + contentType = isomorphicDecode(headerValue); + break; + } + case "content-transfer-encoding": { + let headerValue = collectASequenceOfBytes( + (char) => char !== 10 && char !== 13, + input, + position + ); + headerValue = removeChars(headerValue, false, true, (char) => char === 9 || char === 32); + encoding = isomorphicDecode(headerValue); + break; + } + default: { + collectASequenceOfBytes( + (char) => char !== 10 && char !== 13, + input, + position + ); + } + } + if (input[position.position] !== 13 && input[position.position + 1] !== 10) { + return "failure"; + } else { + position.position += 2; + } + } + } + __name(parseMultipartFormDataHeaders, "parseMultipartFormDataHeaders"); + function parseMultipartFormDataName(input, position) { + assert(input[position.position - 1] === 34); + let name = collectASequenceOfBytes( + (char) => char !== 10 && char !== 13 && char !== 34, + input, + position + ); + if (input[position.position] !== 34) { + return null; + } else { + position.position++; + } + name = new TextDecoder().decode(name).replace(/%0A/ig, "\n").replace(/%0D/ig, "\r").replace(/%22/g, '"'); + return name; + } + __name(parseMultipartFormDataName, "parseMultipartFormDataName"); + function collectASequenceOfBytes(condition, input, position) { + let start = position.position; + while (start < input.length && condition(input[start])) { + ++start; + } + return input.subarray(position.position, position.position = start); + } + __name(collectASequenceOfBytes, "collectASequenceOfBytes"); + function removeChars(buf, leading, trailing, predicate) { + let lead = 0; + let trail = buf.length - 1; + if (leading) { + while (lead < buf.length && predicate(buf[lead])) + lead++; + } + if (trailing) { + while (trail > 0 && predicate(buf[trail])) + trail--; + } + return lead === 0 && trail === buf.length - 1 ? buf : buf.subarray(lead, trail + 1); + } + __name(removeChars, "removeChars"); + function bufferStartsWith(buffer, start, position) { + if (buffer.length < start.length) { + return false; + } + for (let i = 0; i < start.length; i++) { + if (start[i] !== buffer[position.position + i]) { + return false; + } + } + return true; + } + __name(bufferStartsWith, "bufferStartsWith"); + module2.exports = { + multipartFormDataParser, + validateBoundary + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/body.js +var require_body = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/body.js"(exports2, module2) { + "use strict"; + init_define_process(); + var util = require_util(); + var { + ReadableStreamFrom, + isBlobLike, + isReadableStreamLike, + readableStreamClose, + createDeferredPromise, + fullyReadBody, + extractMimeType, + utf8DecodeBytes + } = require_util2(); + var { FormData: FormData2 } = require_formdata(); + var { kState } = require_symbols2(); + var { webidl } = require_webidl(); + var { Blob: Blob3 } = require("buffer"); + var assert = require("assert"); + var { isErrored, isDisturbed } = require("stream"); + var { isArrayBuffer } = require("util/types"); + var { serializeAMimeType } = require_data_url(); + var { multipartFormDataParser } = require_formdata_parser(); + var textEncoder = new TextEncoder(); + function noop() { + } + __name(noop, "noop"); + var hasFinalizationRegistry = globalThis.FinalizationRegistry && define_process_default.version.indexOf("v18") !== 0; + var streamRegistry; + if (hasFinalizationRegistry) { + streamRegistry = new FinalizationRegistry((weakRef) => { + const stream = weakRef.deref(); + if (stream && !stream.locked && !isDisturbed(stream) && !isErrored(stream)) { + stream.cancel("Response object has been garbage collected").catch(noop); + } + }); + } + function extractBody(object, keepalive = false) { + let stream = null; + if (object instanceof ReadableStream) { + stream = object; + } else if (isBlobLike(object)) { + stream = object.stream(); + } else { + stream = new ReadableStream({ + async pull(controller) { + const buffer = typeof source === "string" ? textEncoder.encode(source) : source; + if (buffer.byteLength) { + controller.enqueue(buffer); + } + queueMicrotask(() => readableStreamClose(controller)); + }, + start() { + }, + type: "bytes" + }); + } + assert(isReadableStreamLike(stream)); + let action = null; + let source = null; + let length = null; + let type = null; + if (typeof object === "string") { + source = object; + type = "text/plain;charset=UTF-8"; + } else if (object instanceof URLSearchParams) { + source = object.toString(); + type = "application/x-www-form-urlencoded;charset=UTF-8"; + } else if (isArrayBuffer(object)) { + source = new Uint8Array(object.slice()); + } else if (ArrayBuffer.isView(object)) { + source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength)); + } else if (util.isFormDataLike(object)) { + const boundary = `----formdata-undici-0${`${Math.floor(Math.random() * 1e11)}`.padStart(11, "0")}`; + const prefix = `--${boundary}\r +Content-Disposition: form-data`; + const escape = /* @__PURE__ */ __name((str) => str.replace(/\n/g, "%0A").replace(/\r/g, "%0D").replace(/"/g, "%22"), "escape"); + const normalizeLinefeeds = /* @__PURE__ */ __name((value) => value.replace(/\r?\n|\r/g, "\r\n"), "normalizeLinefeeds"); + const blobParts = []; + const rn = new Uint8Array([13, 10]); + length = 0; + let hasUnknownSizeValue = false; + for (const [name, value] of object) { + if (typeof value === "string") { + const chunk2 = textEncoder.encode(prefix + `; name="${escape(normalizeLinefeeds(name))}"\r +\r +${normalizeLinefeeds(value)}\r +`); + blobParts.push(chunk2); + length += chunk2.byteLength; + } else { + const chunk2 = textEncoder.encode(`${prefix}; name="${escape(normalizeLinefeeds(name))}"` + (value.name ? `; filename="${escape(value.name)}"` : "") + `\r +Content-Type: ${value.type || "application/octet-stream"}\r +\r +`); + blobParts.push(chunk2, value, rn); + if (typeof value.size === "number") { + length += chunk2.byteLength + value.size + rn.byteLength; + } else { + hasUnknownSizeValue = true; + } + } + } + const chunk = textEncoder.encode(`--${boundary}--`); + blobParts.push(chunk); + length += chunk.byteLength; + if (hasUnknownSizeValue) { + length = null; + } + source = object; + action = /* @__PURE__ */ __name(async function* () { + for (const part of blobParts) { + if (part.stream) { + yield* part.stream(); + } else { + yield part; + } + } + }, "action"); + type = `multipart/form-data; boundary=${boundary}`; + } else if (isBlobLike(object)) { + source = object; + length = object.size; + if (object.type) { + type = object.type; + } + } else if (typeof object[Symbol.asyncIterator] === "function") { + if (keepalive) { + throw new TypeError("keepalive"); + } + if (util.isDisturbed(object) || object.locked) { + throw new TypeError( + "Response body object should not be disturbed or locked" + ); + } + stream = object instanceof ReadableStream ? object : ReadableStreamFrom(object); + } + if (typeof source === "string" || util.isBuffer(source)) { + length = Buffer.byteLength(source); + } + if (action != null) { + let iterator; + stream = new ReadableStream({ + async start() { + iterator = action(object)[Symbol.asyncIterator](); + }, + async pull(controller) { + const { value, done } = await iterator.next(); + if (done) { + queueMicrotask(() => { + controller.close(); + controller.byobRequest?.respond(0); + }); + } else { + if (!isErrored(stream)) { + const buffer = new Uint8Array(value); + if (buffer.byteLength) { + controller.enqueue(buffer); + } + } + } + return controller.desiredSize > 0; + }, + async cancel(reason) { + await iterator.return(); + }, + type: "bytes" + }); + } + const body = { stream, source, length }; + return [body, type]; + } + __name(extractBody, "extractBody"); + function safelyExtractBody(object, keepalive = false) { + if (object instanceof ReadableStream) { + assert(!util.isDisturbed(object), "The body has already been consumed."); + assert(!object.locked, "The stream is locked."); + } + return extractBody(object, keepalive); + } + __name(safelyExtractBody, "safelyExtractBody"); + function cloneBody(instance, body) { + const [out1, out2] = body.stream.tee(); + if (hasFinalizationRegistry) { + streamRegistry.register(instance, new WeakRef(out1)); + } + body.stream = out1; + return { + stream: out2, + length: body.length, + source: body.source + }; + } + __name(cloneBody, "cloneBody"); + function throwIfAborted(state) { + if (state.aborted) { + throw new DOMException("The operation was aborted.", "AbortError"); + } + } + __name(throwIfAborted, "throwIfAborted"); + function bodyMixinMethods(instance) { + const methods = { + blob() { + return consumeBody(this, (bytes) => { + let mimeType = bodyMimeType(this); + if (mimeType === null) { + mimeType = ""; + } else if (mimeType) { + mimeType = serializeAMimeType(mimeType); + } + return new Blob3([bytes], { type: mimeType }); + }, instance); + }, + arrayBuffer() { + return consumeBody(this, (bytes) => { + return new Uint8Array(bytes).buffer; + }, instance); + }, + text() { + return consumeBody(this, utf8DecodeBytes, instance); + }, + json() { + return consumeBody(this, parseJSONFromBytes, instance); + }, + formData() { + return consumeBody(this, (value) => { + const mimeType = bodyMimeType(this); + if (mimeType !== null) { + switch (mimeType.essence) { + case "multipart/form-data": { + const parsed = multipartFormDataParser(value, mimeType); + if (parsed === "failure") { + throw new TypeError("Failed to parse body as FormData."); + } + const fd = new FormData2(); + fd[kState] = parsed; + return fd; + } + case "application/x-www-form-urlencoded": { + const entries = new URLSearchParams(value.toString()); + const fd = new FormData2(); + for (const [name, value2] of entries) { + fd.append(name, value2); + } + return fd; + } + } + } + throw new TypeError( + 'Content-Type was not one of "multipart/form-data" or "application/x-www-form-urlencoded".' + ); + }, instance); + }, + bytes() { + return consumeBody(this, (bytes) => { + return new Uint8Array(bytes); + }, instance); + } + }; + return methods; + } + __name(bodyMixinMethods, "bodyMixinMethods"); + function mixinBody(prototype) { + Object.assign(prototype.prototype, bodyMixinMethods(prototype)); + } + __name(mixinBody, "mixinBody"); + async function consumeBody(object, convertBytesToJSValue, instance) { + webidl.brandCheck(object, instance); + if (bodyUnusable(object)) { + throw new TypeError("Body is unusable: Body has already been read"); + } + throwIfAborted(object[kState]); + const promise = createDeferredPromise(); + const errorSteps = /* @__PURE__ */ __name((error) => promise.reject(error), "errorSteps"); + const successSteps = /* @__PURE__ */ __name((data) => { + try { + promise.resolve(convertBytesToJSValue(data)); + } catch (e) { + errorSteps(e); + } + }, "successSteps"); + if (object[kState].body == null) { + successSteps(Buffer.allocUnsafe(0)); + return promise.promise; + } + await fullyReadBody(object[kState].body, successSteps, errorSteps); + return promise.promise; + } + __name(consumeBody, "consumeBody"); + function bodyUnusable(object) { + const body = object[kState].body; + return body != null && (body.stream.locked || util.isDisturbed(body.stream)); + } + __name(bodyUnusable, "bodyUnusable"); + function parseJSONFromBytes(bytes) { + return JSON.parse(utf8DecodeBytes(bytes)); + } + __name(parseJSONFromBytes, "parseJSONFromBytes"); + function bodyMimeType(requestOrResponse) { + const headers = requestOrResponse[kState].headersList; + const mimeType = extractMimeType(headers); + if (mimeType === "failure") { + return null; + } + return mimeType; + } + __name(bodyMimeType, "bodyMimeType"); + module2.exports = { + extractBody, + safelyExtractBody, + cloneBody, + mixinBody, + streamRegistry, + hasFinalizationRegistry, + bodyUnusable + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/client-h1.js +var require_client_h1 = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/client-h1.js"(exports2, module2) { + "use strict"; + init_define_process(); + var assert = require("assert"); + var util = require_util(); + var { channels } = require_diagnostics(); + var timers = require_timers(); + var { + RequestContentLengthMismatchError, + ResponseContentLengthMismatchError, + RequestAbortedError, + HeadersTimeoutError, + HeadersOverflowError, + SocketError, + InformationalError, + BodyTimeoutError, + HTTPParserError, + ResponseExceededMaxSizeError + } = require_errors(); + var { + kUrl, + kReset, + kClient, + kParser, + kBlocking, + kRunning, + kPending, + kSize, + kWriting, + kQueue, + kNoRef, + kKeepAliveDefaultTimeout, + kHostHeader, + kPendingIdx, + kRunningIdx, + kError, + kPipelining, + kSocket, + kKeepAliveTimeoutValue, + kMaxHeadersSize, + kKeepAliveMaxTimeout, + kKeepAliveTimeoutThreshold, + kHeadersTimeout, + kBodyTimeout, + kStrictContentLength, + kMaxRequests, + kCounter, + kMaxResponseSize, + kOnError, + kResume, + kHTTPContext + } = require_symbols(); + var constants = require_constants2(); + var EMPTY_BUF = Buffer.alloc(0); + var FastBuffer = Buffer[Symbol.species]; + var addListener = util.addListener; + var removeAllListeners = util.removeAllListeners; + var extractBody; + async function lazyllhttp() { + const llhttpWasmData = define_process_default.env.JEST_WORKER_ID ? require_llhttp_wasm() : void 0; + let mod; + try { + mod = await WebAssembly.compile(require_llhttp_simd_wasm()); + } catch (e) { + mod = await WebAssembly.compile(llhttpWasmData || require_llhttp_wasm()); + } + return await WebAssembly.instantiate(mod, { + env: { + /* eslint-disable camelcase */ + wasm_on_url: (p, at, len) => { + return 0; + }, + wasm_on_status: (p, at, len) => { + assert(currentParser.ptr === p); + const start = at - currentBufferPtr + currentBufferRef.byteOffset; + return currentParser.onStatus(new FastBuffer(currentBufferRef.buffer, start, len)) || 0; + }, + wasm_on_message_begin: (p) => { + assert(currentParser.ptr === p); + return currentParser.onMessageBegin() || 0; + }, + wasm_on_header_field: (p, at, len) => { + assert(currentParser.ptr === p); + const start = at - currentBufferPtr + currentBufferRef.byteOffset; + return currentParser.onHeaderField(new FastBuffer(currentBufferRef.buffer, start, len)) || 0; + }, + wasm_on_header_value: (p, at, len) => { + assert(currentParser.ptr === p); + const start = at - currentBufferPtr + currentBufferRef.byteOffset; + return currentParser.onHeaderValue(new FastBuffer(currentBufferRef.buffer, start, len)) || 0; + }, + wasm_on_headers_complete: (p, statusCode, upgrade, shouldKeepAlive) => { + assert(currentParser.ptr === p); + return currentParser.onHeadersComplete(statusCode, Boolean(upgrade), Boolean(shouldKeepAlive)) || 0; + }, + wasm_on_body: (p, at, len) => { + assert(currentParser.ptr === p); + const start = at - currentBufferPtr + currentBufferRef.byteOffset; + return currentParser.onBody(new FastBuffer(currentBufferRef.buffer, start, len)) || 0; + }, + wasm_on_message_complete: (p) => { + assert(currentParser.ptr === p); + return currentParser.onMessageComplete() || 0; + } + /* eslint-enable camelcase */ + } + }); + } + __name(lazyllhttp, "lazyllhttp"); + var llhttpInstance = null; + var llhttpPromise = lazyllhttp(); + llhttpPromise.catch(); + var currentParser = null; + var currentBufferRef = null; + var currentBufferSize = 0; + var currentBufferPtr = null; + var USE_NATIVE_TIMER = 0; + var USE_FAST_TIMER = 1; + var TIMEOUT_HEADERS = 2 | USE_FAST_TIMER; + var TIMEOUT_BODY = 4 | USE_FAST_TIMER; + var TIMEOUT_KEEP_ALIVE = 8 | USE_NATIVE_TIMER; + var _Parser = class _Parser { + constructor(client, socket, { exports: exports3 }) { + assert(Number.isFinite(client[kMaxHeadersSize]) && client[kMaxHeadersSize] > 0); + this.llhttp = exports3; + this.ptr = this.llhttp.llhttp_alloc(constants.TYPE.RESPONSE); + this.client = client; + this.socket = socket; + this.timeout = null; + this.timeoutValue = null; + this.timeoutType = null; + this.statusCode = null; + this.statusText = ""; + this.upgrade = false; + this.headers = []; + this.headersSize = 0; + this.headersMaxSize = client[kMaxHeadersSize]; + this.shouldKeepAlive = false; + this.paused = false; + this.resume = this.resume.bind(this); + this.bytesRead = 0; + this.keepAlive = ""; + this.contentLength = ""; + this.connection = ""; + this.maxResponseSize = client[kMaxResponseSize]; + } + setTimeout(delay, type) { + if (delay !== this.timeoutValue || type & USE_FAST_TIMER ^ this.timeoutType & USE_FAST_TIMER) { + if (this.timeout) { + timers.clearTimeout(this.timeout); + this.timeout = null; + } + if (delay) { + if (type & USE_FAST_TIMER) { + this.timeout = timers.setFastTimeout(onParserTimeout, delay, new WeakRef(this)); + } else { + this.timeout = setTimeout(onParserTimeout, delay, new WeakRef(this)); + this.timeout.unref(); + } + } + this.timeoutValue = delay; + } else if (this.timeout) { + if (this.timeout.refresh) { + this.timeout.refresh(); + } + } + this.timeoutType = type; + } + resume() { + if (this.socket.destroyed || !this.paused) { + return; + } + assert(this.ptr != null); + assert(currentParser == null); + this.llhttp.llhttp_resume(this.ptr); + assert(this.timeoutType === TIMEOUT_BODY); + if (this.timeout) { + if (this.timeout.refresh) { + this.timeout.refresh(); + } + } + this.paused = false; + this.execute(this.socket.read() || EMPTY_BUF); + this.readMore(); + } + readMore() { + while (!this.paused && this.ptr) { + const chunk = this.socket.read(); + if (chunk === null) { + break; + } + this.execute(chunk); + } + } + execute(data) { + assert(this.ptr != null); + assert(currentParser == null); + assert(!this.paused); + const { socket, llhttp } = this; + if (data.length > currentBufferSize) { + if (currentBufferPtr) { + llhttp.free(currentBufferPtr); + } + currentBufferSize = Math.ceil(data.length / 4096) * 4096; + currentBufferPtr = llhttp.malloc(currentBufferSize); + } + new Uint8Array(llhttp.memory.buffer, currentBufferPtr, currentBufferSize).set(data); + try { + let ret; + try { + currentBufferRef = data; + currentParser = this; + ret = llhttp.llhttp_execute(this.ptr, currentBufferPtr, data.length); + } catch (err) { + throw err; + } finally { + currentParser = null; + currentBufferRef = null; + } + const offset = llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr; + if (ret === constants.ERROR.PAUSED_UPGRADE) { + this.onUpgrade(data.slice(offset)); + } else if (ret === constants.ERROR.PAUSED) { + this.paused = true; + socket.unshift(data.slice(offset)); + } else if (ret !== constants.ERROR.OK) { + const ptr = llhttp.llhttp_get_error_reason(this.ptr); + let message = ""; + if (ptr) { + const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0); + message = "Response does not match the HTTP/1.1 protocol (" + Buffer.from(llhttp.memory.buffer, ptr, len).toString() + ")"; + } + throw new HTTPParserError(message, constants.ERROR[ret], data.slice(offset)); + } + } catch (err) { + util.destroy(socket, err); + } + } + destroy() { + assert(this.ptr != null); + assert(currentParser == null); + this.llhttp.llhttp_free(this.ptr); + this.ptr = null; + this.timeout && timers.clearTimeout(this.timeout); + this.timeout = null; + this.timeoutValue = null; + this.timeoutType = null; + this.paused = false; + } + onStatus(buf) { + this.statusText = buf.toString(); + } + onMessageBegin() { + const { socket, client } = this; + if (socket.destroyed) { + return -1; + } + const request = client[kQueue][client[kRunningIdx]]; + if (!request) { + return -1; + } + request.onResponseStarted(); + } + onHeaderField(buf) { + const len = this.headers.length; + if ((len & 1) === 0) { + this.headers.push(buf); + } else { + this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf]); + } + this.trackHeader(buf.length); + } + onHeaderValue(buf) { + let len = this.headers.length; + if ((len & 1) === 1) { + this.headers.push(buf); + len += 1; + } else { + this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf]); + } + const key = this.headers[len - 2]; + if (key.length === 10) { + const headerName = util.bufferToLowerCasedHeaderName(key); + if (headerName === "keep-alive") { + this.keepAlive += buf.toString(); + } else if (headerName === "connection") { + this.connection += buf.toString(); + } + } else if (key.length === 14 && util.bufferToLowerCasedHeaderName(key) === "content-length") { + this.contentLength += buf.toString(); + } + this.trackHeader(buf.length); + } + trackHeader(len) { + this.headersSize += len; + if (this.headersSize >= this.headersMaxSize) { + util.destroy(this.socket, new HeadersOverflowError()); + } + } + onUpgrade(head) { + const { upgrade, client, socket, headers, statusCode } = this; + assert(upgrade); + assert(client[kSocket] === socket); + assert(!socket.destroyed); + assert(!this.paused); + assert((headers.length & 1) === 0); + const request = client[kQueue][client[kRunningIdx]]; + assert(request); + assert(request.upgrade || request.method === "CONNECT"); + this.statusCode = null; + this.statusText = ""; + this.shouldKeepAlive = null; + this.headers = []; + this.headersSize = 0; + socket.unshift(head); + socket[kParser].destroy(); + socket[kParser] = null; + socket[kClient] = null; + socket[kError] = null; + removeAllListeners(socket); + client[kSocket] = null; + client[kHTTPContext] = null; + client[kQueue][client[kRunningIdx]++] = null; + client.emit("disconnect", client[kUrl], [client], new InformationalError("upgrade")); + try { + request.onUpgrade(statusCode, headers, socket); + } catch (err) { + util.destroy(socket, err); + } + client[kResume](); + } + onHeadersComplete(statusCode, upgrade, shouldKeepAlive) { + const { client, socket, headers, statusText } = this; + if (socket.destroyed) { + return -1; + } + const request = client[kQueue][client[kRunningIdx]]; + if (!request) { + return -1; + } + assert(!this.upgrade); + assert(this.statusCode < 200); + if (statusCode === 100) { + util.destroy(socket, new SocketError("bad response", util.getSocketInfo(socket))); + return -1; + } + if (upgrade && !request.upgrade) { + util.destroy(socket, new SocketError("bad upgrade", util.getSocketInfo(socket))); + return -1; + } + assert(this.timeoutType === TIMEOUT_HEADERS); + this.statusCode = statusCode; + this.shouldKeepAlive = shouldKeepAlive || // Override llhttp value which does not allow keepAlive for HEAD. + request.method === "HEAD" && !socket[kReset] && this.connection.toLowerCase() === "keep-alive"; + if (this.statusCode >= 200) { + const bodyTimeout = request.bodyTimeout != null ? request.bodyTimeout : client[kBodyTimeout]; + this.setTimeout(bodyTimeout, TIMEOUT_BODY); + } else if (this.timeout) { + if (this.timeout.refresh) { + this.timeout.refresh(); + } + } + if (request.method === "CONNECT") { + assert(client[kRunning] === 1); + this.upgrade = true; + return 2; + } + if (upgrade) { + assert(client[kRunning] === 1); + this.upgrade = true; + return 2; + } + assert((this.headers.length & 1) === 0); + this.headers = []; + this.headersSize = 0; + if (this.shouldKeepAlive && client[kPipelining]) { + const keepAliveTimeout = this.keepAlive ? util.parseKeepAliveTimeout(this.keepAlive) : null; + if (keepAliveTimeout != null) { + const timeout = Math.min( + keepAliveTimeout - client[kKeepAliveTimeoutThreshold], + client[kKeepAliveMaxTimeout] + ); + if (timeout <= 0) { + socket[kReset] = true; + } else { + client[kKeepAliveTimeoutValue] = timeout; + } + } else { + client[kKeepAliveTimeoutValue] = client[kKeepAliveDefaultTimeout]; + } + } else { + socket[kReset] = true; + } + const pause = request.onHeaders(statusCode, headers, this.resume, statusText) === false; + if (request.aborted) { + return -1; + } + if (request.method === "HEAD") { + return 1; + } + if (statusCode < 200) { + return 1; + } + if (socket[kBlocking]) { + socket[kBlocking] = false; + client[kResume](); + } + return pause ? constants.ERROR.PAUSED : 0; + } + onBody(buf) { + const { client, socket, statusCode, maxResponseSize } = this; + if (socket.destroyed) { + return -1; + } + const request = client[kQueue][client[kRunningIdx]]; + assert(request); + assert(this.timeoutType === TIMEOUT_BODY); + if (this.timeout) { + if (this.timeout.refresh) { + this.timeout.refresh(); + } + } + assert(statusCode >= 200); + if (maxResponseSize > -1 && this.bytesRead + buf.length > maxResponseSize) { + util.destroy(socket, new ResponseExceededMaxSizeError()); + return -1; + } + this.bytesRead += buf.length; + if (request.onData(buf) === false) { + return constants.ERROR.PAUSED; + } + } + onMessageComplete() { + const { client, socket, statusCode, upgrade, headers, contentLength, bytesRead, shouldKeepAlive } = this; + if (socket.destroyed && (!statusCode || shouldKeepAlive)) { + return -1; + } + if (upgrade) { + return; + } + assert(statusCode >= 100); + assert((this.headers.length & 1) === 0); + const request = client[kQueue][client[kRunningIdx]]; + assert(request); + this.statusCode = null; + this.statusText = ""; + this.bytesRead = 0; + this.contentLength = ""; + this.keepAlive = ""; + this.connection = ""; + this.headers = []; + this.headersSize = 0; + if (statusCode < 200) { + return; + } + if (request.method !== "HEAD" && contentLength && bytesRead !== parseInt(contentLength, 10)) { + util.destroy(socket, new ResponseContentLengthMismatchError()); + return -1; + } + request.onComplete(headers); + client[kQueue][client[kRunningIdx]++] = null; + if (socket[kWriting]) { + assert(client[kRunning] === 0); + util.destroy(socket, new InformationalError("reset")); + return constants.ERROR.PAUSED; + } else if (!shouldKeepAlive) { + util.destroy(socket, new InformationalError("reset")); + return constants.ERROR.PAUSED; + } else if (socket[kReset] && client[kRunning] === 0) { + util.destroy(socket, new InformationalError("reset")); + return constants.ERROR.PAUSED; + } else if (client[kPipelining] == null || client[kPipelining] === 1) { + setImmediate(() => client[kResume]()); + } else { + client[kResume](); + } + } + }; + __name(_Parser, "Parser"); + var Parser = _Parser; + function onParserTimeout(parser) { + const { socket, timeoutType, client, paused } = parser.deref(); + if (timeoutType === TIMEOUT_HEADERS) { + if (!socket[kWriting] || socket.writableNeedDrain || client[kRunning] > 1) { + assert(!paused, "cannot be paused while waiting for headers"); + util.destroy(socket, new HeadersTimeoutError()); + } + } else if (timeoutType === TIMEOUT_BODY) { + if (!paused) { + util.destroy(socket, new BodyTimeoutError()); + } + } else if (timeoutType === TIMEOUT_KEEP_ALIVE) { + assert(client[kRunning] === 0 && client[kKeepAliveTimeoutValue]); + util.destroy(socket, new InformationalError("socket idle timeout")); + } + } + __name(onParserTimeout, "onParserTimeout"); + async function connectH1(client, socket) { + client[kSocket] = socket; + if (!llhttpInstance) { + llhttpInstance = await llhttpPromise; + llhttpPromise = null; + } + socket[kNoRef] = false; + socket[kWriting] = false; + socket[kReset] = false; + socket[kBlocking] = false; + socket[kParser] = new Parser(client, socket, llhttpInstance); + addListener(socket, "error", function(err) { + assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID"); + const parser = this[kParser]; + if (err.code === "ECONNRESET" && parser.statusCode && !parser.shouldKeepAlive) { + parser.onMessageComplete(); + return; + } + this[kError] = err; + this[kClient][kOnError](err); + }); + addListener(socket, "readable", function() { + const parser = this[kParser]; + if (parser) { + parser.readMore(); + } + }); + addListener(socket, "end", function() { + const parser = this[kParser]; + if (parser.statusCode && !parser.shouldKeepAlive) { + parser.onMessageComplete(); + return; + } + util.destroy(this, new SocketError("other side closed", util.getSocketInfo(this))); + }); + addListener(socket, "close", function() { + const client2 = this[kClient]; + const parser = this[kParser]; + if (parser) { + if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) { + parser.onMessageComplete(); + } + this[kParser].destroy(); + this[kParser] = null; + } + const err = this[kError] || new SocketError("closed", util.getSocketInfo(this)); + client2[kSocket] = null; + client2[kHTTPContext] = null; + if (client2.destroyed) { + assert(client2[kPending] === 0); + const requests = client2[kQueue].splice(client2[kRunningIdx]); + for (let i = 0; i < requests.length; i++) { + const request = requests[i]; + util.errorRequest(client2, request, err); + } + } else if (client2[kRunning] > 0 && err.code !== "UND_ERR_INFO") { + const request = client2[kQueue][client2[kRunningIdx]]; + client2[kQueue][client2[kRunningIdx]++] = null; + util.errorRequest(client2, request, err); + } + client2[kPendingIdx] = client2[kRunningIdx]; + assert(client2[kRunning] === 0); + client2.emit("disconnect", client2[kUrl], [client2], err); + client2[kResume](); + }); + let closed = false; + socket.on("close", () => { + closed = true; + }); + return { + version: "h1", + defaultPipelining: 1, + write(...args) { + return writeH1(client, ...args); + }, + resume() { + resumeH1(client); + }, + destroy(err, callback) { + if (closed) { + queueMicrotask(callback); + } else { + socket.destroy(err).on("close", callback); + } + }, + get destroyed() { + return socket.destroyed; + }, + busy(request) { + if (socket[kWriting] || socket[kReset] || socket[kBlocking]) { + return true; + } + if (request) { + if (client[kRunning] > 0 && !request.idempotent) { + return true; + } + if (client[kRunning] > 0 && (request.upgrade || request.method === "CONNECT")) { + return true; + } + if (client[kRunning] > 0 && util.bodyLength(request.body) !== 0 && (util.isStream(request.body) || util.isAsyncIterable(request.body) || util.isFormDataLike(request.body))) { + return true; + } + } + return false; + } + }; + } + __name(connectH1, "connectH1"); + function resumeH1(client) { + const socket = client[kSocket]; + if (socket && !socket.destroyed) { + if (client[kSize] === 0) { + if (!socket[kNoRef] && socket.unref) { + socket.unref(); + socket[kNoRef] = true; + } + } else if (socket[kNoRef] && socket.ref) { + socket.ref(); + socket[kNoRef] = false; + } + if (client[kSize] === 0) { + if (socket[kParser].timeoutType !== TIMEOUT_KEEP_ALIVE) { + socket[kParser].setTimeout(client[kKeepAliveTimeoutValue], TIMEOUT_KEEP_ALIVE); + } + } else if (client[kRunning] > 0 && socket[kParser].statusCode < 200) { + if (socket[kParser].timeoutType !== TIMEOUT_HEADERS) { + const request = client[kQueue][client[kRunningIdx]]; + const headersTimeout = request.headersTimeout != null ? request.headersTimeout : client[kHeadersTimeout]; + socket[kParser].setTimeout(headersTimeout, TIMEOUT_HEADERS); + } + } + } + } + __name(resumeH1, "resumeH1"); + function shouldSendContentLength(method) { + return method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE" && method !== "CONNECT"; + } + __name(shouldSendContentLength, "shouldSendContentLength"); + function writeH1(client, request) { + const { method, path, host, upgrade, blocking, reset } = request; + let { body, headers, contentLength } = request; + const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH" || method === "QUERY" || method === "PROPFIND" || method === "PROPPATCH"; + if (util.isFormDataLike(body)) { + if (!extractBody) { + extractBody = require_body().extractBody; + } + const [bodyStream, contentType] = extractBody(body); + if (request.contentType == null) { + headers.push("content-type", contentType); + } + body = bodyStream.stream; + contentLength = bodyStream.length; + } else if (util.isBlobLike(body) && request.contentType == null && body.type) { + headers.push("content-type", body.type); + } + if (body && typeof body.read === "function") { + body.read(0); + } + const bodyLength = util.bodyLength(body); + contentLength = bodyLength ?? contentLength; + if (contentLength === null) { + contentLength = request.contentLength; + } + if (contentLength === 0 && !expectsPayload) { + contentLength = null; + } + if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength !== null && request.contentLength !== contentLength) { + if (client[kStrictContentLength]) { + util.errorRequest(client, request, new RequestContentLengthMismatchError()); + return false; + } + define_process_default.emitWarning(new RequestContentLengthMismatchError()); + } + const socket = client[kSocket]; + const abort = /* @__PURE__ */ __name((err) => { + if (request.aborted || request.completed) { + return; + } + util.errorRequest(client, request, err || new RequestAbortedError()); + util.destroy(body); + util.destroy(socket, new InformationalError("aborted")); + }, "abort"); + try { + request.onConnect(abort); + } catch (err) { + util.errorRequest(client, request, err); + } + if (request.aborted) { + return false; + } + if (method === "HEAD") { + socket[kReset] = true; + } + if (upgrade || method === "CONNECT") { + socket[kReset] = true; + } + if (reset != null) { + socket[kReset] = reset; + } + if (client[kMaxRequests] && socket[kCounter]++ >= client[kMaxRequests]) { + socket[kReset] = true; + } + if (blocking) { + socket[kBlocking] = true; + } + let header = `${method} ${path} HTTP/1.1\r +`; + if (typeof host === "string") { + header += `host: ${host}\r +`; + } else { + header += client[kHostHeader]; + } + if (upgrade) { + header += `connection: upgrade\r +upgrade: ${upgrade}\r +`; + } else if (client[kPipelining] && !socket[kReset]) { + header += "connection: keep-alive\r\n"; + } else { + header += "connection: close\r\n"; + } + if (Array.isArray(headers)) { + for (let n = 0; n < headers.length; n += 2) { + const key = headers[n + 0]; + const val = headers[n + 1]; + if (Array.isArray(val)) { + for (let i = 0; i < val.length; i++) { + header += `${key}: ${val[i]}\r +`; + } + } else { + header += `${key}: ${val}\r +`; + } + } + } + if (channels.sendHeaders.hasSubscribers) { + channels.sendHeaders.publish({ request, headers: header, socket }); + } + if (!body || bodyLength === 0) { + writeBuffer(abort, null, client, request, socket, contentLength, header, expectsPayload); + } else if (util.isBuffer(body)) { + writeBuffer(abort, body, client, request, socket, contentLength, header, expectsPayload); + } else if (util.isBlobLike(body)) { + if (typeof body.stream === "function") { + writeIterable(abort, body.stream(), client, request, socket, contentLength, header, expectsPayload); + } else { + writeBlob(abort, body, client, request, socket, contentLength, header, expectsPayload); + } + } else if (util.isStream(body)) { + writeStream(abort, body, client, request, socket, contentLength, header, expectsPayload); + } else if (util.isIterable(body)) { + writeIterable(abort, body, client, request, socket, contentLength, header, expectsPayload); + } else { + assert(false); + } + return true; + } + __name(writeH1, "writeH1"); + function writeStream(abort, body, client, request, socket, contentLength, header, expectsPayload) { + assert(contentLength !== 0 || client[kRunning] === 0, "stream body cannot be pipelined"); + let finished = false; + const writer = new AsyncWriter({ abort, socket, request, contentLength, client, expectsPayload, header }); + const onData = /* @__PURE__ */ __name(function(chunk) { + if (finished) { + return; + } + try { + if (!writer.write(chunk) && this.pause) { + this.pause(); + } + } catch (err) { + util.destroy(this, err); + } + }, "onData"); + const onDrain = /* @__PURE__ */ __name(function() { + if (finished) { + return; + } + if (body.resume) { + body.resume(); + } + }, "onDrain"); + const onClose = /* @__PURE__ */ __name(function() { + queueMicrotask(() => { + body.removeListener("error", onFinished); + }); + if (!finished) { + const err = new RequestAbortedError(); + queueMicrotask(() => onFinished(err)); + } + }, "onClose"); + const onFinished = /* @__PURE__ */ __name(function(err) { + if (finished) { + return; + } + finished = true; + assert(socket.destroyed || socket[kWriting] && client[kRunning] <= 1); + socket.off("drain", onDrain).off("error", onFinished); + body.removeListener("data", onData).removeListener("end", onFinished).removeListener("close", onClose); + if (!err) { + try { + writer.end(); + } catch (er) { + err = er; + } + } + writer.destroy(err); + if (err && (err.code !== "UND_ERR_INFO" || err.message !== "reset")) { + util.destroy(body, err); + } else { + util.destroy(body); + } + }, "onFinished"); + body.on("data", onData).on("end", onFinished).on("error", onFinished).on("close", onClose); + if (body.resume) { + body.resume(); + } + socket.on("drain", onDrain).on("error", onFinished); + if (body.errorEmitted ?? body.errored) { + setImmediate(() => onFinished(body.errored)); + } else if (body.endEmitted ?? body.readableEnded) { + setImmediate(() => onFinished(null)); + } + if (body.closeEmitted ?? body.closed) { + setImmediate(onClose); + } + } + __name(writeStream, "writeStream"); + function writeBuffer(abort, body, client, request, socket, contentLength, header, expectsPayload) { + try { + if (!body) { + if (contentLength === 0) { + socket.write(`${header}content-length: 0\r +\r +`, "latin1"); + } else { + assert(contentLength === null, "no body must not have content length"); + socket.write(`${header}\r +`, "latin1"); + } + } else if (util.isBuffer(body)) { + assert(contentLength === body.byteLength, "buffer body must have content length"); + socket.cork(); + socket.write(`${header}content-length: ${contentLength}\r +\r +`, "latin1"); + socket.write(body); + socket.uncork(); + request.onBodySent(body); + if (!expectsPayload && request.reset !== false) { + socket[kReset] = true; + } + } + request.onRequestSent(); + client[kResume](); + } catch (err) { + abort(err); + } + } + __name(writeBuffer, "writeBuffer"); + async function writeBlob(abort, body, client, request, socket, contentLength, header, expectsPayload) { + assert(contentLength === body.size, "blob body must have content length"); + try { + if (contentLength != null && contentLength !== body.size) { + throw new RequestContentLengthMismatchError(); + } + const buffer = Buffer.from(await body.arrayBuffer()); + socket.cork(); + socket.write(`${header}content-length: ${contentLength}\r +\r +`, "latin1"); + socket.write(buffer); + socket.uncork(); + request.onBodySent(buffer); + request.onRequestSent(); + if (!expectsPayload && request.reset !== false) { + socket[kReset] = true; + } + client[kResume](); + } catch (err) { + abort(err); + } + } + __name(writeBlob, "writeBlob"); + async function writeIterable(abort, body, client, request, socket, contentLength, header, expectsPayload) { + assert(contentLength !== 0 || client[kRunning] === 0, "iterator body cannot be pipelined"); + let callback = null; + function onDrain() { + if (callback) { + const cb = callback; + callback = null; + cb(); + } + } + __name(onDrain, "onDrain"); + const waitForDrain = /* @__PURE__ */ __name(() => new Promise((resolve, reject) => { + assert(callback === null); + if (socket[kError]) { + reject(socket[kError]); + } else { + callback = resolve; + } + }), "waitForDrain"); + socket.on("close", onDrain).on("drain", onDrain); + const writer = new AsyncWriter({ abort, socket, request, contentLength, client, expectsPayload, header }); + try { + for await (const chunk of body) { + if (socket[kError]) { + throw socket[kError]; + } + if (!writer.write(chunk)) { + await waitForDrain(); + } + } + writer.end(); + } catch (err) { + writer.destroy(err); + } finally { + socket.off("close", onDrain).off("drain", onDrain); + } + } + __name(writeIterable, "writeIterable"); + var _AsyncWriter = class _AsyncWriter { + constructor({ abort, socket, request, contentLength, client, expectsPayload, header }) { + this.socket = socket; + this.request = request; + this.contentLength = contentLength; + this.client = client; + this.bytesWritten = 0; + this.expectsPayload = expectsPayload; + this.header = header; + this.abort = abort; + socket[kWriting] = true; + } + write(chunk) { + const { socket, request, contentLength, client, bytesWritten, expectsPayload, header } = this; + if (socket[kError]) { + throw socket[kError]; + } + if (socket.destroyed) { + return false; + } + const len = Buffer.byteLength(chunk); + if (!len) { + return true; + } + if (contentLength !== null && bytesWritten + len > contentLength) { + if (client[kStrictContentLength]) { + throw new RequestContentLengthMismatchError(); + } + define_process_default.emitWarning(new RequestContentLengthMismatchError()); + } + socket.cork(); + if (bytesWritten === 0) { + if (!expectsPayload && request.reset !== false) { + socket[kReset] = true; + } + if (contentLength === null) { + socket.write(`${header}transfer-encoding: chunked\r +`, "latin1"); + } else { + socket.write(`${header}content-length: ${contentLength}\r +\r +`, "latin1"); + } + } + if (contentLength === null) { + socket.write(`\r +${len.toString(16)}\r +`, "latin1"); + } + this.bytesWritten += len; + const ret = socket.write(chunk); + socket.uncork(); + request.onBodySent(chunk); + if (!ret) { + if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) { + if (socket[kParser].timeout.refresh) { + socket[kParser].timeout.refresh(); + } + } + } + return ret; + } + end() { + const { socket, contentLength, client, bytesWritten, expectsPayload, header, request } = this; + request.onRequestSent(); + socket[kWriting] = false; + if (socket[kError]) { + throw socket[kError]; + } + if (socket.destroyed) { + return; + } + if (bytesWritten === 0) { + if (expectsPayload) { + socket.write(`${header}content-length: 0\r +\r +`, "latin1"); + } else { + socket.write(`${header}\r +`, "latin1"); + } + } else if (contentLength === null) { + socket.write("\r\n0\r\n\r\n", "latin1"); + } + if (contentLength !== null && bytesWritten !== contentLength) { + if (client[kStrictContentLength]) { + throw new RequestContentLengthMismatchError(); + } else { + define_process_default.emitWarning(new RequestContentLengthMismatchError()); + } + } + if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) { + if (socket[kParser].timeout.refresh) { + socket[kParser].timeout.refresh(); + } + } + client[kResume](); + } + destroy(err) { + const { socket, client, abort } = this; + socket[kWriting] = false; + if (err) { + assert(client[kRunning] <= 1, "pipeline should only contain this request"); + abort(err); + } + } + }; + __name(_AsyncWriter, "AsyncWriter"); + var AsyncWriter = _AsyncWriter; + module2.exports = connectH1; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/client-h2.js +var require_client_h2 = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/client-h2.js"(exports2, module2) { + "use strict"; + init_define_process(); + var assert = require("assert"); + var { pipeline } = require("stream"); + var util = require_util(); + var { + RequestContentLengthMismatchError, + RequestAbortedError, + SocketError, + InformationalError + } = require_errors(); + var { + kUrl, + kReset, + kClient, + kRunning, + kPending, + kQueue, + kPendingIdx, + kRunningIdx, + kError, + kSocket, + kStrictContentLength, + kOnError, + kMaxConcurrentStreams, + kHTTP2Session, + kResume, + kSize, + kHTTPContext + } = require_symbols(); + var kOpenStreams = Symbol("open streams"); + var h2ExperimentalWarned = false; + var http2; + try { + http2 = require("http2"); + } catch { + http2 = { constants: {} }; + } + var { + constants: { + HTTP2_HEADER_AUTHORITY, + HTTP2_HEADER_METHOD, + HTTP2_HEADER_PATH, + HTTP2_HEADER_SCHEME, + HTTP2_HEADER_CONTENT_LENGTH, + HTTP2_HEADER_EXPECT, + HTTP2_HEADER_STATUS + } + } = http2; + function parseH2Headers(headers) { + const result = []; + for (const [name, value] of Object.entries(headers)) { + if (Array.isArray(value)) { + for (const subvalue of value) { + result.push(Buffer.from(name), Buffer.from(subvalue)); + } + } else { + result.push(Buffer.from(name), Buffer.from(value)); + } + } + return result; + } + __name(parseH2Headers, "parseH2Headers"); + async function connectH2(client, socket) { + client[kSocket] = socket; + if (!h2ExperimentalWarned) { + h2ExperimentalWarned = true; + define_process_default.emitWarning("H2 support is experimental, expect them to change at any time.", { + code: "UNDICI-H2" + }); + } + const session = http2.connect(client[kUrl], { + createConnection: () => socket, + peerMaxConcurrentStreams: client[kMaxConcurrentStreams] + }); + session[kOpenStreams] = 0; + session[kClient] = client; + session[kSocket] = socket; + util.addListener(session, "error", onHttp2SessionError); + util.addListener(session, "frameError", onHttp2FrameError); + util.addListener(session, "end", onHttp2SessionEnd); + util.addListener(session, "goaway", onHTTP2GoAway); + util.addListener(session, "close", function() { + const { [kClient]: client2 } = this; + const { [kSocket]: socket2 } = client2; + const err = this[kSocket][kError] || this[kError] || new SocketError("closed", util.getSocketInfo(socket2)); + client2[kHTTP2Session] = null; + if (client2.destroyed) { + assert(client2[kPending] === 0); + const requests = client2[kQueue].splice(client2[kRunningIdx]); + for (let i = 0; i < requests.length; i++) { + const request = requests[i]; + util.errorRequest(client2, request, err); + } + } + }); + session.unref(); + client[kHTTP2Session] = session; + socket[kHTTP2Session] = session; + util.addListener(socket, "error", function(err) { + assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID"); + this[kError] = err; + this[kClient][kOnError](err); + }); + util.addListener(socket, "end", function() { + util.destroy(this, new SocketError("other side closed", util.getSocketInfo(this))); + }); + util.addListener(socket, "close", function() { + const err = this[kError] || new SocketError("closed", util.getSocketInfo(this)); + client[kSocket] = null; + if (this[kHTTP2Session] != null) { + this[kHTTP2Session].destroy(err); + } + client[kPendingIdx] = client[kRunningIdx]; + assert(client[kRunning] === 0); + client.emit("disconnect", client[kUrl], [client], err); + client[kResume](); + }); + let closed = false; + socket.on("close", () => { + closed = true; + }); + return { + version: "h2", + defaultPipelining: Infinity, + write(...args) { + return writeH2(client, ...args); + }, + resume() { + resumeH2(client); + }, + destroy(err, callback) { + if (closed) { + queueMicrotask(callback); + } else { + socket.destroy(err).on("close", callback); + } + }, + get destroyed() { + return socket.destroyed; + }, + busy() { + return false; + } + }; + } + __name(connectH2, "connectH2"); + function resumeH2(client) { + const socket = client[kSocket]; + if (socket?.destroyed === false) { + if (client[kSize] === 0 && client[kMaxConcurrentStreams] === 0) { + socket.unref(); + client[kHTTP2Session].unref(); + } else { + socket.ref(); + client[kHTTP2Session].ref(); + } + } + } + __name(resumeH2, "resumeH2"); + function onHttp2SessionError(err) { + assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID"); + this[kSocket][kError] = err; + this[kClient][kOnError](err); + } + __name(onHttp2SessionError, "onHttp2SessionError"); + function onHttp2FrameError(type, code, id) { + if (id === 0) { + const err = new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`); + this[kSocket][kError] = err; + this[kClient][kOnError](err); + } + } + __name(onHttp2FrameError, "onHttp2FrameError"); + function onHttp2SessionEnd() { + const err = new SocketError("other side closed", util.getSocketInfo(this[kSocket])); + this.destroy(err); + util.destroy(this[kSocket], err); + } + __name(onHttp2SessionEnd, "onHttp2SessionEnd"); + function onHTTP2GoAway(code) { + const err = this[kError] || new SocketError(`HTTP/2: "GOAWAY" frame received with code ${code}`, util.getSocketInfo(this)); + const client = this[kClient]; + client[kSocket] = null; + client[kHTTPContext] = null; + if (this[kHTTP2Session] != null) { + this[kHTTP2Session].destroy(err); + this[kHTTP2Session] = null; + } + util.destroy(this[kSocket], err); + const request = client[kQueue][client[kRunningIdx]]; + client[kQueue][client[kRunningIdx]++] = null; + util.errorRequest(client, request, err); + client[kPendingIdx] = client[kRunningIdx]; + assert(client[kRunning] === 0); + client.emit("disconnect", client[kUrl], [client], err); + client[kResume](); + } + __name(onHTTP2GoAway, "onHTTP2GoAway"); + function shouldSendContentLength(method) { + return method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE" && method !== "CONNECT"; + } + __name(shouldSendContentLength, "shouldSendContentLength"); + function writeH2(client, request) { + const session = client[kHTTP2Session]; + const { body, method, path, host, upgrade, expectContinue, signal, headers: reqHeaders } = request; + if (upgrade) { + util.errorRequest(client, request, new Error("Upgrade not supported for H2")); + return false; + } + const headers = {}; + for (let n = 0; n < reqHeaders.length; n += 2) { + const key = reqHeaders[n + 0]; + const val = reqHeaders[n + 1]; + if (Array.isArray(val)) { + for (let i = 0; i < val.length; i++) { + if (headers[key]) { + headers[key] += `,${val[i]}`; + } else { + headers[key] = val[i]; + } + } + } else { + headers[key] = val; + } + } + let stream; + const { hostname, port } = client[kUrl]; + headers[HTTP2_HEADER_AUTHORITY] = host || `${hostname}${port ? `:${port}` : ""}`; + headers[HTTP2_HEADER_METHOD] = method; + const abort = /* @__PURE__ */ __name((err) => { + if (request.aborted || request.completed) { + return; + } + err = err || new RequestAbortedError(); + util.errorRequest(client, request, err); + if (stream != null) { + util.destroy(stream, err); + } + util.destroy(body, err); + client[kQueue][client[kRunningIdx]++] = null; + client[kResume](); + }, "abort"); + try { + request.onConnect(abort); + } catch (err) { + util.errorRequest(client, request, err); + } + if (request.aborted) { + return false; + } + if (method === "CONNECT") { + session.ref(); + stream = session.request(headers, { endStream: false, signal }); + if (stream.id && !stream.pending) { + request.onUpgrade(null, null, stream); + ++session[kOpenStreams]; + client[kQueue][client[kRunningIdx]++] = null; + } else { + stream.once("ready", () => { + request.onUpgrade(null, null, stream); + ++session[kOpenStreams]; + client[kQueue][client[kRunningIdx]++] = null; + }); + } + stream.once("close", () => { + session[kOpenStreams] -= 1; + if (session[kOpenStreams] === 0) + session.unref(); + }); + return true; + } + headers[HTTP2_HEADER_PATH] = path; + headers[HTTP2_HEADER_SCHEME] = "https"; + const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH"; + if (body && typeof body.read === "function") { + body.read(0); + } + let contentLength = util.bodyLength(body); + if (contentLength == null) { + contentLength = request.contentLength; + } + if (contentLength === 0 || !expectsPayload) { + contentLength = null; + } + if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength != null && request.contentLength !== contentLength) { + if (client[kStrictContentLength]) { + util.errorRequest(client, request, new RequestContentLengthMismatchError()); + return false; + } + define_process_default.emitWarning(new RequestContentLengthMismatchError()); + } + if (contentLength != null) { + assert(body, "no body must not have content length"); + headers[HTTP2_HEADER_CONTENT_LENGTH] = `${contentLength}`; + } + session.ref(); + const shouldEndStream = method === "GET" || method === "HEAD" || body === null; + if (expectContinue) { + headers[HTTP2_HEADER_EXPECT] = "100-continue"; + stream = session.request(headers, { endStream: shouldEndStream, signal }); + stream.once("continue", writeBodyH2); + } else { + stream = session.request(headers, { + endStream: shouldEndStream, + signal + }); + writeBodyH2(); + } + ++session[kOpenStreams]; + stream.once("response", (headers2) => { + const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers2; + request.onResponseStarted(); + if (request.aborted) { + const err = new RequestAbortedError(); + util.errorRequest(client, request, err); + util.destroy(stream, err); + return; + } + if (request.onHeaders(Number(statusCode), parseH2Headers(realHeaders), stream.resume.bind(stream), "") === false) { + stream.pause(); + } + stream.on("data", (chunk) => { + if (request.onData(chunk) === false) { + stream.pause(); + } + }); + }); + stream.once("end", () => { + if (stream.state?.state == null || stream.state.state < 6) { + request.onComplete([]); + } + if (session[kOpenStreams] === 0) { + session.unref(); + } + abort(new InformationalError("HTTP/2: stream half-closed (remote)")); + client[kQueue][client[kRunningIdx]++] = null; + client[kPendingIdx] = client[kRunningIdx]; + client[kResume](); + }); + stream.once("close", () => { + session[kOpenStreams] -= 1; + if (session[kOpenStreams] === 0) { + session.unref(); + } + }); + stream.once("error", function(err) { + abort(err); + }); + stream.once("frameError", (type, code) => { + abort(new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`)); + }); + return true; + function writeBodyH2() { + if (!body || contentLength === 0) { + writeBuffer( + abort, + stream, + null, + client, + request, + client[kSocket], + contentLength, + expectsPayload + ); + } else if (util.isBuffer(body)) { + writeBuffer( + abort, + stream, + body, + client, + request, + client[kSocket], + contentLength, + expectsPayload + ); + } else if (util.isBlobLike(body)) { + if (typeof body.stream === "function") { + writeIterable( + abort, + stream, + body.stream(), + client, + request, + client[kSocket], + contentLength, + expectsPayload + ); + } else { + writeBlob( + abort, + stream, + body, + client, + request, + client[kSocket], + contentLength, + expectsPayload + ); + } + } else if (util.isStream(body)) { + writeStream( + abort, + client[kSocket], + expectsPayload, + stream, + body, + client, + request, + contentLength + ); + } else if (util.isIterable(body)) { + writeIterable( + abort, + stream, + body, + client, + request, + client[kSocket], + contentLength, + expectsPayload + ); + } else { + assert(false); + } + } + __name(writeBodyH2, "writeBodyH2"); + } + __name(writeH2, "writeH2"); + function writeBuffer(abort, h2stream, body, client, request, socket, contentLength, expectsPayload) { + try { + if (body != null && util.isBuffer(body)) { + assert(contentLength === body.byteLength, "buffer body must have content length"); + h2stream.cork(); + h2stream.write(body); + h2stream.uncork(); + h2stream.end(); + request.onBodySent(body); + } + if (!expectsPayload) { + socket[kReset] = true; + } + request.onRequestSent(); + client[kResume](); + } catch (error) { + abort(error); + } + } + __name(writeBuffer, "writeBuffer"); + function writeStream(abort, socket, expectsPayload, h2stream, body, client, request, contentLength) { + assert(contentLength !== 0 || client[kRunning] === 0, "stream body cannot be pipelined"); + const pipe = pipeline( + body, + h2stream, + (err) => { + if (err) { + util.destroy(pipe, err); + abort(err); + } else { + util.removeAllListeners(pipe); + request.onRequestSent(); + if (!expectsPayload) { + socket[kReset] = true; + } + client[kResume](); + } + } + ); + util.addListener(pipe, "data", onPipeData); + function onPipeData(chunk) { + request.onBodySent(chunk); + } + __name(onPipeData, "onPipeData"); + } + __name(writeStream, "writeStream"); + async function writeBlob(abort, h2stream, body, client, request, socket, contentLength, expectsPayload) { + assert(contentLength === body.size, "blob body must have content length"); + try { + if (contentLength != null && contentLength !== body.size) { + throw new RequestContentLengthMismatchError(); + } + const buffer = Buffer.from(await body.arrayBuffer()); + h2stream.cork(); + h2stream.write(buffer); + h2stream.uncork(); + h2stream.end(); + request.onBodySent(buffer); + request.onRequestSent(); + if (!expectsPayload) { + socket[kReset] = true; + } + client[kResume](); + } catch (err) { + abort(err); + } + } + __name(writeBlob, "writeBlob"); + async function writeIterable(abort, h2stream, body, client, request, socket, contentLength, expectsPayload) { + assert(contentLength !== 0 || client[kRunning] === 0, "iterator body cannot be pipelined"); + let callback = null; + function onDrain() { + if (callback) { + const cb = callback; + callback = null; + cb(); + } + } + __name(onDrain, "onDrain"); + const waitForDrain = /* @__PURE__ */ __name(() => new Promise((resolve, reject) => { + assert(callback === null); + if (socket[kError]) { + reject(socket[kError]); + } else { + callback = resolve; + } + }), "waitForDrain"); + h2stream.on("close", onDrain).on("drain", onDrain); + try { + for await (const chunk of body) { + if (socket[kError]) { + throw socket[kError]; + } + const res = h2stream.write(chunk); + request.onBodySent(chunk); + if (!res) { + await waitForDrain(); + } + } + h2stream.end(); + request.onRequestSent(); + if (!expectsPayload) { + socket[kReset] = true; + } + client[kResume](); + } catch (err) { + abort(err); + } finally { + h2stream.off("close", onDrain).off("drain", onDrain); + } + } + __name(writeIterable, "writeIterable"); + module2.exports = connectH2; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/handler/redirect-handler.js +var require_redirect_handler = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/handler/redirect-handler.js"(exports2, module2) { + "use strict"; + init_define_process(); + var util = require_util(); + var { kBodyUsed } = require_symbols(); + var assert = require("assert"); + var { InvalidArgumentError } = require_errors(); + var EE = require("events"); + var redirectableStatusCodes = [300, 301, 302, 303, 307, 308]; + var kBody = Symbol("body"); + var _BodyAsyncIterable = class _BodyAsyncIterable { + constructor(body) { + this[kBody] = body; + this[kBodyUsed] = false; + } + async *[Symbol.asyncIterator]() { + assert(!this[kBodyUsed], "disturbed"); + this[kBodyUsed] = true; + yield* this[kBody]; + } + }; + __name(_BodyAsyncIterable, "BodyAsyncIterable"); + var BodyAsyncIterable = _BodyAsyncIterable; + var _RedirectHandler = class _RedirectHandler { + constructor(dispatch, maxRedirections, opts, handler) { + if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) { + throw new InvalidArgumentError("maxRedirections must be a positive number"); + } + util.validateHandler(handler, opts.method, opts.upgrade); + this.dispatch = dispatch; + this.location = null; + this.abort = null; + this.opts = { ...opts, maxRedirections: 0 }; + this.maxRedirections = maxRedirections; + this.handler = handler; + this.history = []; + this.redirectionLimitReached = false; + if (util.isStream(this.opts.body)) { + if (util.bodyLength(this.opts.body) === 0) { + this.opts.body.on("data", function() { + assert(false); + }); + } + if (typeof this.opts.body.readableDidRead !== "boolean") { + this.opts.body[kBodyUsed] = false; + EE.prototype.on.call(this.opts.body, "data", function() { + this[kBodyUsed] = true; + }); + } + } else if (this.opts.body && typeof this.opts.body.pipeTo === "function") { + this.opts.body = new BodyAsyncIterable(this.opts.body); + } else if (this.opts.body && typeof this.opts.body !== "string" && !ArrayBuffer.isView(this.opts.body) && util.isIterable(this.opts.body)) { + this.opts.body = new BodyAsyncIterable(this.opts.body); + } + } + onConnect(abort) { + this.abort = abort; + this.handler.onConnect(abort, { history: this.history }); + } + onUpgrade(statusCode, headers, socket) { + this.handler.onUpgrade(statusCode, headers, socket); + } + onError(error) { + this.handler.onError(error); + } + onHeaders(statusCode, headers, resume, statusText) { + this.location = this.history.length >= this.maxRedirections || util.isDisturbed(this.opts.body) ? null : parseLocation(statusCode, headers); + if (this.opts.throwOnMaxRedirect && this.history.length >= this.maxRedirections) { + if (this.request) { + this.request.abort(new Error("max redirects")); + } + this.redirectionLimitReached = true; + this.abort(new Error("max redirects")); + return; + } + if (this.opts.origin) { + this.history.push(new URL(this.opts.path, this.opts.origin)); + } + if (!this.location) { + return this.handler.onHeaders(statusCode, headers, resume, statusText); + } + const { origin, pathname, search } = util.parseURL(new URL(this.location, this.opts.origin && new URL(this.opts.path, this.opts.origin))); + const path = search ? `${pathname}${search}` : pathname; + this.opts.headers = cleanRequestHeaders(this.opts.headers, statusCode === 303, this.opts.origin !== origin); + this.opts.path = path; + this.opts.origin = origin; + this.opts.maxRedirections = 0; + this.opts.query = null; + if (statusCode === 303 && this.opts.method !== "HEAD") { + this.opts.method = "GET"; + this.opts.body = null; + } + } + onData(chunk) { + if (this.location) { + } else { + return this.handler.onData(chunk); + } + } + onComplete(trailers) { + if (this.location) { + this.location = null; + this.abort = null; + this.dispatch(this.opts, this); + } else { + this.handler.onComplete(trailers); + } + } + onBodySent(chunk) { + if (this.handler.onBodySent) { + this.handler.onBodySent(chunk); + } + } + }; + __name(_RedirectHandler, "RedirectHandler"); + var RedirectHandler = _RedirectHandler; + function parseLocation(statusCode, headers) { + if (redirectableStatusCodes.indexOf(statusCode) === -1) { + return null; + } + for (let i = 0; i < headers.length; i += 2) { + if (headers[i].length === 8 && util.headerNameToString(headers[i]) === "location") { + return headers[i + 1]; + } + } + } + __name(parseLocation, "parseLocation"); + function shouldRemoveHeader(header, removeContent, unknownOrigin) { + if (header.length === 4) { + return util.headerNameToString(header) === "host"; + } + if (removeContent && util.headerNameToString(header).startsWith("content-")) { + return true; + } + if (unknownOrigin && (header.length === 13 || header.length === 6 || header.length === 19)) { + const name = util.headerNameToString(header); + return name === "authorization" || name === "cookie" || name === "proxy-authorization"; + } + return false; + } + __name(shouldRemoveHeader, "shouldRemoveHeader"); + function cleanRequestHeaders(headers, removeContent, unknownOrigin) { + const ret = []; + if (Array.isArray(headers)) { + for (let i = 0; i < headers.length; i += 2) { + if (!shouldRemoveHeader(headers[i], removeContent, unknownOrigin)) { + ret.push(headers[i], headers[i + 1]); + } + } + } else if (headers && typeof headers === "object") { + for (const key of Object.keys(headers)) { + if (!shouldRemoveHeader(key, removeContent, unknownOrigin)) { + ret.push(key, headers[key]); + } + } + } else { + assert(headers == null, "headers must be an object or an array"); + } + return ret; + } + __name(cleanRequestHeaders, "cleanRequestHeaders"); + module2.exports = RedirectHandler; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/interceptor/redirect-interceptor.js +var require_redirect_interceptor = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/interceptor/redirect-interceptor.js"(exports2, module2) { + "use strict"; + init_define_process(); + var RedirectHandler = require_redirect_handler(); + function createRedirectInterceptor({ maxRedirections: defaultMaxRedirections }) { + return (dispatch) => { + return /* @__PURE__ */ __name(function Intercept(opts, handler) { + const { maxRedirections = defaultMaxRedirections } = opts; + if (!maxRedirections) { + return dispatch(opts, handler); + } + const redirectHandler = new RedirectHandler(dispatch, maxRedirections, opts, handler); + opts = { ...opts, maxRedirections: 0 }; + return dispatch(opts, redirectHandler); + }, "Intercept"); + }; + } + __name(createRedirectInterceptor, "createRedirectInterceptor"); + module2.exports = createRedirectInterceptor; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/client.js +var require_client = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/client.js"(exports2, module2) { + "use strict"; + init_define_process(); + var assert = require("assert"); + var net = require("net"); + var http = require("http"); + var util = require_util(); + var { channels } = require_diagnostics(); + var Request2 = require_undici_core_request(); + var DispatcherBase = require_dispatcher_base(); + var { + InvalidArgumentError, + InformationalError, + ClientDestroyedError + } = require_errors(); + var buildConnector = require_connect(); + var { + kUrl, + kServerName, + kClient, + kBusy, + kConnect, + kResuming, + kRunning, + kPending, + kSize, + kQueue, + kConnected, + kConnecting, + kNeedDrain, + kKeepAliveDefaultTimeout, + kHostHeader, + kPendingIdx, + kRunningIdx, + kError, + kPipelining, + kKeepAliveTimeoutValue, + kMaxHeadersSize, + kKeepAliveMaxTimeout, + kKeepAliveTimeoutThreshold, + kHeadersTimeout, + kBodyTimeout, + kStrictContentLength, + kConnector, + kMaxRedirections, + kMaxRequests, + kCounter, + kClose, + kDestroy, + kDispatch, + kInterceptors, + kLocalAddress, + kMaxResponseSize, + kOnError, + kHTTPContext, + kMaxConcurrentStreams, + kResume + } = require_symbols(); + var connectH1 = require_client_h1(); + var connectH2 = require_client_h2(); + var deprecatedInterceptorWarned = false; + var kClosedResolve = Symbol("kClosedResolve"); + var noop = /* @__PURE__ */ __name(() => { + }, "noop"); + function getPipelining(client) { + return client[kPipelining] ?? client[kHTTPContext]?.defaultPipelining ?? 1; + } + __name(getPipelining, "getPipelining"); + var _Client = class _Client extends DispatcherBase { + /** + * + * @param {string|URL} url + * @param {import('../../types/client.js').Client.Options} options + */ + constructor(url, { + interceptors, + maxHeaderSize, + headersTimeout, + socketTimeout, + requestTimeout, + connectTimeout, + bodyTimeout, + idleTimeout, + keepAlive, + keepAliveTimeout, + maxKeepAliveTimeout, + keepAliveMaxTimeout, + keepAliveTimeoutThreshold, + socketPath, + pipelining, + tls, + strictContentLength, + maxCachedSessions, + maxRedirections, + connect: connect2, + maxRequestsPerClient, + localAddress, + maxResponseSize, + autoSelectFamily, + autoSelectFamilyAttemptTimeout, + // h2 + maxConcurrentStreams, + allowH2 + } = {}) { + super(); + if (keepAlive !== void 0) { + throw new InvalidArgumentError("unsupported keepAlive, use pipelining=0 instead"); + } + if (socketTimeout !== void 0) { + throw new InvalidArgumentError("unsupported socketTimeout, use headersTimeout & bodyTimeout instead"); + } + if (requestTimeout !== void 0) { + throw new InvalidArgumentError("unsupported requestTimeout, use headersTimeout & bodyTimeout instead"); + } + if (idleTimeout !== void 0) { + throw new InvalidArgumentError("unsupported idleTimeout, use keepAliveTimeout instead"); + } + if (maxKeepAliveTimeout !== void 0) { + throw new InvalidArgumentError("unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead"); + } + if (maxHeaderSize != null && !Number.isFinite(maxHeaderSize)) { + throw new InvalidArgumentError("invalid maxHeaderSize"); + } + if (socketPath != null && typeof socketPath !== "string") { + throw new InvalidArgumentError("invalid socketPath"); + } + if (connectTimeout != null && (!Number.isFinite(connectTimeout) || connectTimeout < 0)) { + throw new InvalidArgumentError("invalid connectTimeout"); + } + if (keepAliveTimeout != null && (!Number.isFinite(keepAliveTimeout) || keepAliveTimeout <= 0)) { + throw new InvalidArgumentError("invalid keepAliveTimeout"); + } + if (keepAliveMaxTimeout != null && (!Number.isFinite(keepAliveMaxTimeout) || keepAliveMaxTimeout <= 0)) { + throw new InvalidArgumentError("invalid keepAliveMaxTimeout"); + } + if (keepAliveTimeoutThreshold != null && !Number.isFinite(keepAliveTimeoutThreshold)) { + throw new InvalidArgumentError("invalid keepAliveTimeoutThreshold"); + } + if (headersTimeout != null && (!Number.isInteger(headersTimeout) || headersTimeout < 0)) { + throw new InvalidArgumentError("headersTimeout must be a positive integer or zero"); + } + if (bodyTimeout != null && (!Number.isInteger(bodyTimeout) || bodyTimeout < 0)) { + throw new InvalidArgumentError("bodyTimeout must be a positive integer or zero"); + } + if (connect2 != null && typeof connect2 !== "function" && typeof connect2 !== "object") { + throw new InvalidArgumentError("connect must be a function or an object"); + } + if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) { + throw new InvalidArgumentError("maxRedirections must be a positive number"); + } + if (maxRequestsPerClient != null && (!Number.isInteger(maxRequestsPerClient) || maxRequestsPerClient < 0)) { + throw new InvalidArgumentError("maxRequestsPerClient must be a positive number"); + } + if (localAddress != null && (typeof localAddress !== "string" || net.isIP(localAddress) === 0)) { + throw new InvalidArgumentError("localAddress must be valid string IP address"); + } + if (maxResponseSize != null && (!Number.isInteger(maxResponseSize) || maxResponseSize < -1)) { + throw new InvalidArgumentError("maxResponseSize must be a positive number"); + } + if (autoSelectFamilyAttemptTimeout != null && (!Number.isInteger(autoSelectFamilyAttemptTimeout) || autoSelectFamilyAttemptTimeout < -1)) { + throw new InvalidArgumentError("autoSelectFamilyAttemptTimeout must be a positive number"); + } + if (allowH2 != null && typeof allowH2 !== "boolean") { + throw new InvalidArgumentError("allowH2 must be a valid boolean value"); + } + if (maxConcurrentStreams != null && (typeof maxConcurrentStreams !== "number" || maxConcurrentStreams < 1)) { + throw new InvalidArgumentError("maxConcurrentStreams must be a positive integer, greater than 0"); + } + if (typeof connect2 !== "function") { + connect2 = buildConnector({ + ...tls, + maxCachedSessions, + allowH2, + socketPath, + timeout: connectTimeout, + ...autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : void 0, + ...connect2 + }); + } + if (interceptors?.Client && Array.isArray(interceptors.Client)) { + this[kInterceptors] = interceptors.Client; + if (!deprecatedInterceptorWarned) { + deprecatedInterceptorWarned = true; + define_process_default.emitWarning("Client.Options#interceptor is deprecated. Use Dispatcher#compose instead.", { + code: "UNDICI-CLIENT-INTERCEPTOR-DEPRECATED" + }); + } + } else { + this[kInterceptors] = [createRedirectInterceptor({ maxRedirections })]; + } + this[kUrl] = util.parseOrigin(url); + this[kConnector] = connect2; + this[kPipelining] = pipelining != null ? pipelining : 1; + this[kMaxHeadersSize] = maxHeaderSize || http.maxHeaderSize; + this[kKeepAliveDefaultTimeout] = keepAliveTimeout == null ? 4e3 : keepAliveTimeout; + this[kKeepAliveMaxTimeout] = keepAliveMaxTimeout == null ? 6e5 : keepAliveMaxTimeout; + this[kKeepAliveTimeoutThreshold] = keepAliveTimeoutThreshold == null ? 2e3 : keepAliveTimeoutThreshold; + this[kKeepAliveTimeoutValue] = this[kKeepAliveDefaultTimeout]; + this[kServerName] = null; + this[kLocalAddress] = localAddress != null ? localAddress : null; + this[kResuming] = 0; + this[kNeedDrain] = 0; + this[kHostHeader] = `host: ${this[kUrl].hostname}${this[kUrl].port ? `:${this[kUrl].port}` : ""}\r +`; + this[kBodyTimeout] = bodyTimeout != null ? bodyTimeout : 3e5; + this[kHeadersTimeout] = headersTimeout != null ? headersTimeout : 3e5; + this[kStrictContentLength] = strictContentLength == null ? true : strictContentLength; + this[kMaxRedirections] = maxRedirections; + this[kMaxRequests] = maxRequestsPerClient; + this[kClosedResolve] = null; + this[kMaxResponseSize] = maxResponseSize > -1 ? maxResponseSize : -1; + this[kMaxConcurrentStreams] = maxConcurrentStreams != null ? maxConcurrentStreams : 100; + this[kHTTPContext] = null; + this[kQueue] = []; + this[kRunningIdx] = 0; + this[kPendingIdx] = 0; + this[kResume] = (sync) => resume(this, sync); + this[kOnError] = (err) => onError(this, err); + } + get pipelining() { + return this[kPipelining]; + } + set pipelining(value) { + this[kPipelining] = value; + this[kResume](true); + } + get [kPending]() { + return this[kQueue].length - this[kPendingIdx]; + } + get [kRunning]() { + return this[kPendingIdx] - this[kRunningIdx]; + } + get [kSize]() { + return this[kQueue].length - this[kRunningIdx]; + } + get [kConnected]() { + return !!this[kHTTPContext] && !this[kConnecting] && !this[kHTTPContext].destroyed; + } + get [kBusy]() { + return Boolean( + this[kHTTPContext]?.busy(null) || this[kSize] >= (getPipelining(this) || 1) || this[kPending] > 0 + ); + } + /* istanbul ignore: only used for test */ + [kConnect](cb) { + connect(this); + this.once("connect", cb); + } + [kDispatch](opts, handler) { + const origin = opts.origin || this[kUrl].origin; + const request = new Request2(origin, opts, handler); + this[kQueue].push(request); + if (this[kResuming]) { + } else if (util.bodyLength(request.body) == null && util.isIterable(request.body)) { + this[kResuming] = 1; + queueMicrotask(() => resume(this)); + } else { + this[kResume](true); + } + if (this[kResuming] && this[kNeedDrain] !== 2 && this[kBusy]) { + this[kNeedDrain] = 2; + } + return this[kNeedDrain] < 2; + } + async [kClose]() { + return new Promise((resolve) => { + if (this[kSize]) { + this[kClosedResolve] = resolve; + } else { + resolve(null); + } + }); + } + async [kDestroy](err) { + return new Promise((resolve) => { + const requests = this[kQueue].splice(this[kPendingIdx]); + for (let i = 0; i < requests.length; i++) { + const request = requests[i]; + util.errorRequest(this, request, err); + } + const callback = /* @__PURE__ */ __name(() => { + if (this[kClosedResolve]) { + this[kClosedResolve](); + this[kClosedResolve] = null; + } + resolve(null); + }, "callback"); + if (this[kHTTPContext]) { + this[kHTTPContext].destroy(err, callback); + this[kHTTPContext] = null; + } else { + queueMicrotask(callback); + } + this[kResume](); + }); + } + }; + __name(_Client, "Client"); + var Client = _Client; + var createRedirectInterceptor = require_redirect_interceptor(); + function onError(client, err) { + if (client[kRunning] === 0 && err.code !== "UND_ERR_INFO" && err.code !== "UND_ERR_SOCKET") { + assert(client[kPendingIdx] === client[kRunningIdx]); + const requests = client[kQueue].splice(client[kRunningIdx]); + for (let i = 0; i < requests.length; i++) { + const request = requests[i]; + util.errorRequest(client, request, err); + } + assert(client[kSize] === 0); + } + } + __name(onError, "onError"); + async function connect(client) { + assert(!client[kConnecting]); + assert(!client[kHTTPContext]); + let { host, hostname, protocol, port } = client[kUrl]; + if (hostname[0] === "[") { + const idx = hostname.indexOf("]"); + assert(idx !== -1); + const ip = hostname.substring(1, idx); + assert(net.isIP(ip)); + hostname = ip; + } + client[kConnecting] = true; + if (channels.beforeConnect.hasSubscribers) { + channels.beforeConnect.publish({ + connectParams: { + host, + hostname, + protocol, + port, + version: client[kHTTPContext]?.version, + servername: client[kServerName], + localAddress: client[kLocalAddress] + }, + connector: client[kConnector] + }); + } + try { + const socket = await new Promise((resolve, reject) => { + client[kConnector]({ + host, + hostname, + protocol, + port, + servername: client[kServerName], + localAddress: client[kLocalAddress] + }, (err, socket2) => { + if (err) { + reject(err); + } else { + resolve(socket2); + } + }); + }); + if (client.destroyed) { + util.destroy(socket.on("error", noop), new ClientDestroyedError()); + return; + } + assert(socket); + try { + client[kHTTPContext] = socket.alpnProtocol === "h2" ? await connectH2(client, socket) : await connectH1(client, socket); + } catch (err) { + socket.destroy().on("error", noop); + throw err; + } + client[kConnecting] = false; + socket[kCounter] = 0; + socket[kMaxRequests] = client[kMaxRequests]; + socket[kClient] = client; + socket[kError] = null; + if (channels.connected.hasSubscribers) { + channels.connected.publish({ + connectParams: { + host, + hostname, + protocol, + port, + version: client[kHTTPContext]?.version, + servername: client[kServerName], + localAddress: client[kLocalAddress] + }, + connector: client[kConnector], + socket + }); + } + client.emit("connect", client[kUrl], [client]); + } catch (err) { + if (client.destroyed) { + return; + } + client[kConnecting] = false; + if (channels.connectError.hasSubscribers) { + channels.connectError.publish({ + connectParams: { + host, + hostname, + protocol, + port, + version: client[kHTTPContext]?.version, + servername: client[kServerName], + localAddress: client[kLocalAddress] + }, + connector: client[kConnector], + error: err + }); + } + if (err.code === "ERR_TLS_CERT_ALTNAME_INVALID") { + assert(client[kRunning] === 0); + while (client[kPending] > 0 && client[kQueue][client[kPendingIdx]].servername === client[kServerName]) { + const request = client[kQueue][client[kPendingIdx]++]; + util.errorRequest(client, request, err); + } + } else { + onError(client, err); + } + client.emit("connectionError", client[kUrl], [client], err); + } + client[kResume](); + } + __name(connect, "connect"); + function emitDrain(client) { + client[kNeedDrain] = 0; + client.emit("drain", client[kUrl], [client]); + } + __name(emitDrain, "emitDrain"); + function resume(client, sync) { + if (client[kResuming] === 2) { + return; + } + client[kResuming] = 2; + _resume(client, sync); + client[kResuming] = 0; + if (client[kRunningIdx] > 256) { + client[kQueue].splice(0, client[kRunningIdx]); + client[kPendingIdx] -= client[kRunningIdx]; + client[kRunningIdx] = 0; + } + } + __name(resume, "resume"); + function _resume(client, sync) { + while (true) { + if (client.destroyed) { + assert(client[kPending] === 0); + return; + } + if (client[kClosedResolve] && !client[kSize]) { + client[kClosedResolve](); + client[kClosedResolve] = null; + return; + } + if (client[kHTTPContext]) { + client[kHTTPContext].resume(); + } + if (client[kBusy]) { + client[kNeedDrain] = 2; + } else if (client[kNeedDrain] === 2) { + if (sync) { + client[kNeedDrain] = 1; + queueMicrotask(() => emitDrain(client)); + } else { + emitDrain(client); + } + continue; + } + if (client[kPending] === 0) { + return; + } + if (client[kRunning] >= (getPipelining(client) || 1)) { + return; + } + const request = client[kQueue][client[kPendingIdx]]; + if (client[kUrl].protocol === "https:" && client[kServerName] !== request.servername) { + if (client[kRunning] > 0) { + return; + } + client[kServerName] = request.servername; + client[kHTTPContext]?.destroy(new InformationalError("servername changed"), () => { + client[kHTTPContext] = null; + resume(client); + }); + } + if (client[kConnecting]) { + return; + } + if (!client[kHTTPContext]) { + connect(client); + return; + } + if (client[kHTTPContext].destroyed) { + return; + } + if (client[kHTTPContext].busy(request)) { + return; + } + if (!request.aborted && client[kHTTPContext].write(request)) { + client[kPendingIdx]++; + } else { + client[kQueue].splice(client[kPendingIdx], 1); + } + } + } + __name(_resume, "_resume"); + module2.exports = Client; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/fixed-queue.js +var require_fixed_queue = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/fixed-queue.js"(exports2, module2) { + "use strict"; + init_define_process(); + var kSize = 2048; + var kMask = kSize - 1; + var _FixedCircularBuffer = class _FixedCircularBuffer { + constructor() { + this.bottom = 0; + this.top = 0; + this.list = new Array(kSize); + this.next = null; + } + isEmpty() { + return this.top === this.bottom; + } + isFull() { + return (this.top + 1 & kMask) === this.bottom; + } + push(data) { + this.list[this.top] = data; + this.top = this.top + 1 & kMask; + } + shift() { + const nextItem = this.list[this.bottom]; + if (nextItem === void 0) + return null; + this.list[this.bottom] = void 0; + this.bottom = this.bottom + 1 & kMask; + return nextItem; + } + }; + __name(_FixedCircularBuffer, "FixedCircularBuffer"); + var FixedCircularBuffer = _FixedCircularBuffer; + var _a; + module2.exports = (_a = class { + constructor() { + this.head = this.tail = new FixedCircularBuffer(); + } + isEmpty() { + return this.head.isEmpty(); + } + push(data) { + if (this.head.isFull()) { + this.head = this.head.next = new FixedCircularBuffer(); + } + this.head.push(data); + } + shift() { + const tail = this.tail; + const next = tail.shift(); + if (tail.isEmpty() && tail.next !== null) { + this.tail = tail.next; + } + return next; + } + }, __name(_a, "FixedQueue"), _a); + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/pool-stats.js +var require_pool_stats = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/pool-stats.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { kFree, kConnected, kPending, kQueued, kRunning, kSize } = require_symbols(); + var kPool = Symbol("pool"); + var _PoolStats = class _PoolStats { + constructor(pool) { + this[kPool] = pool; + } + get connected() { + return this[kPool][kConnected]; + } + get free() { + return this[kPool][kFree]; + } + get pending() { + return this[kPool][kPending]; + } + get queued() { + return this[kPool][kQueued]; + } + get running() { + return this[kPool][kRunning]; + } + get size() { + return this[kPool][kSize]; + } + }; + __name(_PoolStats, "PoolStats"); + var PoolStats = _PoolStats; + module2.exports = PoolStats; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/pool-base.js +var require_pool_base = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/pool-base.js"(exports2, module2) { + "use strict"; + init_define_process(); + var DispatcherBase = require_dispatcher_base(); + var FixedQueue = require_fixed_queue(); + var { kConnected, kSize, kRunning, kPending, kQueued, kBusy, kFree, kUrl, kClose, kDestroy, kDispatch } = require_symbols(); + var PoolStats = require_pool_stats(); + var kClients = Symbol("clients"); + var kNeedDrain = Symbol("needDrain"); + var kQueue = Symbol("queue"); + var kClosedResolve = Symbol("closed resolve"); + var kOnDrain = Symbol("onDrain"); + var kOnConnect = Symbol("onConnect"); + var kOnDisconnect = Symbol("onDisconnect"); + var kOnConnectionError = Symbol("onConnectionError"); + var kGetDispatcher = Symbol("get dispatcher"); + var kAddClient = Symbol("add client"); + var kRemoveClient = Symbol("remove client"); + var kStats = Symbol("stats"); + var _PoolBase = class _PoolBase extends DispatcherBase { + constructor() { + super(); + this[kQueue] = new FixedQueue(); + this[kClients] = []; + this[kQueued] = 0; + const pool = this; + this[kOnDrain] = /* @__PURE__ */ __name(function onDrain(origin, targets) { + const queue = pool[kQueue]; + let needDrain = false; + while (!needDrain) { + const item = queue.shift(); + if (!item) { + break; + } + pool[kQueued]--; + needDrain = !this.dispatch(item.opts, item.handler); + } + this[kNeedDrain] = needDrain; + if (!this[kNeedDrain] && pool[kNeedDrain]) { + pool[kNeedDrain] = false; + pool.emit("drain", origin, [pool, ...targets]); + } + if (pool[kClosedResolve] && queue.isEmpty()) { + Promise.all(pool[kClients].map((c) => c.close())).then(pool[kClosedResolve]); + } + }, "onDrain"); + this[kOnConnect] = (origin, targets) => { + pool.emit("connect", origin, [pool, ...targets]); + }; + this[kOnDisconnect] = (origin, targets, err) => { + pool.emit("disconnect", origin, [pool, ...targets], err); + }; + this[kOnConnectionError] = (origin, targets, err) => { + pool.emit("connectionError", origin, [pool, ...targets], err); + }; + this[kStats] = new PoolStats(this); + } + get [kBusy]() { + return this[kNeedDrain]; + } + get [kConnected]() { + return this[kClients].filter((client) => client[kConnected]).length; + } + get [kFree]() { + return this[kClients].filter((client) => client[kConnected] && !client[kNeedDrain]).length; + } + get [kPending]() { + let ret = this[kQueued]; + for (const { [kPending]: pending } of this[kClients]) { + ret += pending; + } + return ret; + } + get [kRunning]() { + let ret = 0; + for (const { [kRunning]: running } of this[kClients]) { + ret += running; + } + return ret; + } + get [kSize]() { + let ret = this[kQueued]; + for (const { [kSize]: size } of this[kClients]) { + ret += size; + } + return ret; + } + get stats() { + return this[kStats]; + } + async [kClose]() { + if (this[kQueue].isEmpty()) { + await Promise.all(this[kClients].map((c) => c.close())); + } else { + await new Promise((resolve) => { + this[kClosedResolve] = resolve; + }); + } + } + async [kDestroy](err) { + while (true) { + const item = this[kQueue].shift(); + if (!item) { + break; + } + item.handler.onError(err); + } + await Promise.all(this[kClients].map((c) => c.destroy(err))); + } + [kDispatch](opts, handler) { + const dispatcher = this[kGetDispatcher](); + if (!dispatcher) { + this[kNeedDrain] = true; + this[kQueue].push({ opts, handler }); + this[kQueued]++; + } else if (!dispatcher.dispatch(opts, handler)) { + dispatcher[kNeedDrain] = true; + this[kNeedDrain] = !this[kGetDispatcher](); + } + return !this[kNeedDrain]; + } + [kAddClient](client) { + client.on("drain", this[kOnDrain]).on("connect", this[kOnConnect]).on("disconnect", this[kOnDisconnect]).on("connectionError", this[kOnConnectionError]); + this[kClients].push(client); + if (this[kNeedDrain]) { + queueMicrotask(() => { + if (this[kNeedDrain]) { + this[kOnDrain](client[kUrl], [this, client]); + } + }); + } + return this; + } + [kRemoveClient](client) { + client.close(() => { + const idx = this[kClients].indexOf(client); + if (idx !== -1) { + this[kClients].splice(idx, 1); + } + }); + this[kNeedDrain] = this[kClients].some((dispatcher) => !dispatcher[kNeedDrain] && dispatcher.closed !== true && dispatcher.destroyed !== true); + } + }; + __name(_PoolBase, "PoolBase"); + var PoolBase = _PoolBase; + module2.exports = { + PoolBase, + kClients, + kNeedDrain, + kAddClient, + kRemoveClient, + kGetDispatcher + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/pool.js +var require_pool = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/pool.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { + PoolBase, + kClients, + kNeedDrain, + kAddClient, + kGetDispatcher + } = require_pool_base(); + var Client = require_client(); + var { + InvalidArgumentError + } = require_errors(); + var util = require_util(); + var { kUrl, kInterceptors } = require_symbols(); + var buildConnector = require_connect(); + var kOptions = Symbol("options"); + var kConnections = Symbol("connections"); + var kFactory = Symbol("factory"); + function defaultFactory(origin, opts) { + return new Client(origin, opts); + } + __name(defaultFactory, "defaultFactory"); + var _Pool = class _Pool extends PoolBase { + constructor(origin, { + connections, + factory = defaultFactory, + connect, + connectTimeout, + tls, + maxCachedSessions, + socketPath, + autoSelectFamily, + autoSelectFamilyAttemptTimeout, + allowH2, + ...options + } = {}) { + super(); + if (connections != null && (!Number.isFinite(connections) || connections < 0)) { + throw new InvalidArgumentError("invalid connections"); + } + if (typeof factory !== "function") { + throw new InvalidArgumentError("factory must be a function."); + } + if (connect != null && typeof connect !== "function" && typeof connect !== "object") { + throw new InvalidArgumentError("connect must be a function or an object"); + } + if (typeof connect !== "function") { + connect = buildConnector({ + ...tls, + maxCachedSessions, + allowH2, + socketPath, + timeout: connectTimeout, + ...autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : void 0, + ...connect + }); + } + this[kInterceptors] = options.interceptors?.Pool && Array.isArray(options.interceptors.Pool) ? options.interceptors.Pool : []; + this[kConnections] = connections || null; + this[kUrl] = util.parseOrigin(origin); + this[kOptions] = { ...util.deepClone(options), connect, allowH2 }; + this[kOptions].interceptors = options.interceptors ? { ...options.interceptors } : void 0; + this[kFactory] = factory; + } + [kGetDispatcher]() { + for (const client of this[kClients]) { + if (!client[kNeedDrain]) { + return client; + } + } + if (!this[kConnections] || this[kClients].length < this[kConnections]) { + const dispatcher = this[kFactory](this[kUrl], this[kOptions]); + this[kAddClient](dispatcher); + return dispatcher; + } + } + }; + __name(_Pool, "Pool"); + var Pool = _Pool; + module2.exports = Pool; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/balanced-pool.js +var require_balanced_pool = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/balanced-pool.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { + BalancedPoolMissingUpstreamError, + InvalidArgumentError + } = require_errors(); + var { + PoolBase, + kClients, + kNeedDrain, + kAddClient, + kRemoveClient, + kGetDispatcher + } = require_pool_base(); + var Pool = require_pool(); + var { kUrl, kInterceptors } = require_symbols(); + var { parseOrigin } = require_util(); + var kFactory = Symbol("factory"); + var kOptions = Symbol("options"); + var kGreatestCommonDivisor = Symbol("kGreatestCommonDivisor"); + var kCurrentWeight = Symbol("kCurrentWeight"); + var kIndex = Symbol("kIndex"); + var kWeight = Symbol("kWeight"); + var kMaxWeightPerServer = Symbol("kMaxWeightPerServer"); + var kErrorPenalty = Symbol("kErrorPenalty"); + function getGreatestCommonDivisor(a, b) { + if (a === 0) + return b; + while (b !== 0) { + const t = b; + b = a % b; + a = t; + } + return a; + } + __name(getGreatestCommonDivisor, "getGreatestCommonDivisor"); + function defaultFactory(origin, opts) { + return new Pool(origin, opts); + } + __name(defaultFactory, "defaultFactory"); + var _BalancedPool = class _BalancedPool extends PoolBase { + constructor(upstreams = [], { factory = defaultFactory, ...opts } = {}) { + super(); + this[kOptions] = opts; + this[kIndex] = -1; + this[kCurrentWeight] = 0; + this[kMaxWeightPerServer] = this[kOptions].maxWeightPerServer || 100; + this[kErrorPenalty] = this[kOptions].errorPenalty || 15; + if (!Array.isArray(upstreams)) { + upstreams = [upstreams]; + } + if (typeof factory !== "function") { + throw new InvalidArgumentError("factory must be a function."); + } + this[kInterceptors] = opts.interceptors?.BalancedPool && Array.isArray(opts.interceptors.BalancedPool) ? opts.interceptors.BalancedPool : []; + this[kFactory] = factory; + for (const upstream of upstreams) { + this.addUpstream(upstream); + } + this._updateBalancedPoolStats(); + } + addUpstream(upstream) { + const upstreamOrigin = parseOrigin(upstream).origin; + if (this[kClients].find((pool2) => pool2[kUrl].origin === upstreamOrigin && pool2.closed !== true && pool2.destroyed !== true)) { + return this; + } + const pool = this[kFactory](upstreamOrigin, Object.assign({}, this[kOptions])); + this[kAddClient](pool); + pool.on("connect", () => { + pool[kWeight] = Math.min(this[kMaxWeightPerServer], pool[kWeight] + this[kErrorPenalty]); + }); + pool.on("connectionError", () => { + pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty]); + this._updateBalancedPoolStats(); + }); + pool.on("disconnect", (...args) => { + const err = args[2]; + if (err && err.code === "UND_ERR_SOCKET") { + pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty]); + this._updateBalancedPoolStats(); + } + }); + for (const client of this[kClients]) { + client[kWeight] = this[kMaxWeightPerServer]; + } + this._updateBalancedPoolStats(); + return this; + } + _updateBalancedPoolStats() { + let result = 0; + for (let i = 0; i < this[kClients].length; i++) { + result = getGreatestCommonDivisor(this[kClients][i][kWeight], result); + } + this[kGreatestCommonDivisor] = result; + } + removeUpstream(upstream) { + const upstreamOrigin = parseOrigin(upstream).origin; + const pool = this[kClients].find((pool2) => pool2[kUrl].origin === upstreamOrigin && pool2.closed !== true && pool2.destroyed !== true); + if (pool) { + this[kRemoveClient](pool); + } + return this; + } + get upstreams() { + return this[kClients].filter((dispatcher) => dispatcher.closed !== true && dispatcher.destroyed !== true).map((p) => p[kUrl].origin); + } + [kGetDispatcher]() { + if (this[kClients].length === 0) { + throw new BalancedPoolMissingUpstreamError(); + } + const dispatcher = this[kClients].find((dispatcher2) => !dispatcher2[kNeedDrain] && dispatcher2.closed !== true && dispatcher2.destroyed !== true); + if (!dispatcher) { + return; + } + const allClientsBusy = this[kClients].map((pool) => pool[kNeedDrain]).reduce((a, b) => a && b, true); + if (allClientsBusy) { + return; + } + let counter = 0; + let maxWeightIndex = this[kClients].findIndex((pool) => !pool[kNeedDrain]); + while (counter++ < this[kClients].length) { + this[kIndex] = (this[kIndex] + 1) % this[kClients].length; + const pool = this[kClients][this[kIndex]]; + if (pool[kWeight] > this[kClients][maxWeightIndex][kWeight] && !pool[kNeedDrain]) { + maxWeightIndex = this[kIndex]; + } + if (this[kIndex] === 0) { + this[kCurrentWeight] = this[kCurrentWeight] - this[kGreatestCommonDivisor]; + if (this[kCurrentWeight] <= 0) { + this[kCurrentWeight] = this[kMaxWeightPerServer]; + } + } + if (pool[kWeight] >= this[kCurrentWeight] && !pool[kNeedDrain]) { + return pool; + } + } + this[kCurrentWeight] = this[kClients][maxWeightIndex][kWeight]; + this[kIndex] = maxWeightIndex; + return this[kClients][maxWeightIndex]; + } + }; + __name(_BalancedPool, "BalancedPool"); + var BalancedPool = _BalancedPool; + module2.exports = BalancedPool; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/agent.js +var require_agent = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/agent.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { InvalidArgumentError } = require_errors(); + var { kClients, kRunning, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols(); + var DispatcherBase = require_dispatcher_base(); + var Pool = require_pool(); + var Client = require_client(); + var util = require_util(); + var createRedirectInterceptor = require_redirect_interceptor(); + var kOnConnect = Symbol("onConnect"); + var kOnDisconnect = Symbol("onDisconnect"); + var kOnConnectionError = Symbol("onConnectionError"); + var kMaxRedirections = Symbol("maxRedirections"); + var kOnDrain = Symbol("onDrain"); + var kFactory = Symbol("factory"); + var kOptions = Symbol("options"); + function defaultFactory(origin, opts) { + return opts && opts.connections === 1 ? new Client(origin, opts) : new Pool(origin, opts); + } + __name(defaultFactory, "defaultFactory"); + var _Agent = class _Agent extends DispatcherBase { + constructor({ factory = defaultFactory, maxRedirections = 0, connect, ...options } = {}) { + super(); + if (typeof factory !== "function") { + throw new InvalidArgumentError("factory must be a function."); + } + if (connect != null && typeof connect !== "function" && typeof connect !== "object") { + throw new InvalidArgumentError("connect must be a function or an object"); + } + if (!Number.isInteger(maxRedirections) || maxRedirections < 0) { + throw new InvalidArgumentError("maxRedirections must be a positive number"); + } + if (connect && typeof connect !== "function") { + connect = { ...connect }; + } + this[kInterceptors] = options.interceptors?.Agent && Array.isArray(options.interceptors.Agent) ? options.interceptors.Agent : [createRedirectInterceptor({ maxRedirections })]; + this[kOptions] = { ...util.deepClone(options), connect }; + this[kOptions].interceptors = options.interceptors ? { ...options.interceptors } : void 0; + this[kMaxRedirections] = maxRedirections; + this[kFactory] = factory; + this[kClients] = /* @__PURE__ */ new Map(); + this[kOnDrain] = (origin, targets) => { + this.emit("drain", origin, [this, ...targets]); + }; + this[kOnConnect] = (origin, targets) => { + this.emit("connect", origin, [this, ...targets]); + }; + this[kOnDisconnect] = (origin, targets, err) => { + this.emit("disconnect", origin, [this, ...targets], err); + }; + this[kOnConnectionError] = (origin, targets, err) => { + this.emit("connectionError", origin, [this, ...targets], err); + }; + } + get [kRunning]() { + let ret = 0; + for (const client of this[kClients].values()) { + ret += client[kRunning]; + } + return ret; + } + [kDispatch](opts, handler) { + let key; + if (opts.origin && (typeof opts.origin === "string" || opts.origin instanceof URL)) { + key = String(opts.origin); + } else { + throw new InvalidArgumentError("opts.origin must be a non-empty string or URL."); + } + let dispatcher = this[kClients].get(key); + if (!dispatcher) { + dispatcher = this[kFactory](opts.origin, this[kOptions]).on("drain", this[kOnDrain]).on("connect", this[kOnConnect]).on("disconnect", this[kOnDisconnect]).on("connectionError", this[kOnConnectionError]); + this[kClients].set(key, dispatcher); + } + return dispatcher.dispatch(opts, handler); + } + async [kClose]() { + const closePromises = []; + for (const client of this[kClients].values()) { + closePromises.push(client.close()); + } + this[kClients].clear(); + await Promise.all(closePromises); + } + async [kDestroy](err) { + const destroyPromises = []; + for (const client of this[kClients].values()) { + destroyPromises.push(client.destroy(err)); + } + this[kClients].clear(); + await Promise.all(destroyPromises); + } + }; + __name(_Agent, "Agent"); + var Agent = _Agent; + module2.exports = Agent; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/proxy-agent.js +var require_proxy_agent = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/proxy-agent.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { kProxy, kClose, kDestroy, kInterceptors } = require_symbols(); + var { URL: URL2 } = require("url"); + var Agent = require_agent(); + var Pool = require_pool(); + var DispatcherBase = require_dispatcher_base(); + var { InvalidArgumentError, RequestAbortedError, SecureProxyConnectionError } = require_errors(); + var buildConnector = require_connect(); + var kAgent = Symbol("proxy agent"); + var kClient = Symbol("proxy client"); + var kProxyHeaders = Symbol("proxy headers"); + var kRequestTls = Symbol("request tls settings"); + var kProxyTls = Symbol("proxy tls settings"); + var kConnectEndpoint = Symbol("connect endpoint function"); + function defaultProtocolPort(protocol) { + return protocol === "https:" ? 443 : 80; + } + __name(defaultProtocolPort, "defaultProtocolPort"); + function defaultFactory(origin, opts) { + return new Pool(origin, opts); + } + __name(defaultFactory, "defaultFactory"); + var noop = /* @__PURE__ */ __name(() => { + }, "noop"); + var _getUrl, getUrl_fn; + var _ProxyAgent = class _ProxyAgent extends DispatcherBase { + constructor(opts) { + super(); + /** + * @param {import('../types/proxy-agent').ProxyAgent.Options | string | URL} opts + * @returns {URL} + */ + __privateAdd(this, _getUrl); + if (!opts || typeof opts === "object" && !(opts instanceof URL2) && !opts.uri) { + throw new InvalidArgumentError("Proxy uri is mandatory"); + } + const { clientFactory = defaultFactory } = opts; + if (typeof clientFactory !== "function") { + throw new InvalidArgumentError("Proxy opts.clientFactory must be a function."); + } + const url = __privateMethod(this, _getUrl, getUrl_fn).call(this, opts); + const { href, origin, port, protocol, username, password, hostname: proxyHostname } = url; + this[kProxy] = { uri: href, protocol }; + this[kInterceptors] = opts.interceptors?.ProxyAgent && Array.isArray(opts.interceptors.ProxyAgent) ? opts.interceptors.ProxyAgent : []; + this[kRequestTls] = opts.requestTls; + this[kProxyTls] = opts.proxyTls; + this[kProxyHeaders] = opts.headers || {}; + if (opts.auth && opts.token) { + throw new InvalidArgumentError("opts.auth cannot be used in combination with opts.token"); + } else if (opts.auth) { + this[kProxyHeaders]["proxy-authorization"] = `Basic ${opts.auth}`; + } else if (opts.token) { + this[kProxyHeaders]["proxy-authorization"] = opts.token; + } else if (username && password) { + this[kProxyHeaders]["proxy-authorization"] = `Basic ${Buffer.from(`${decodeURIComponent(username)}:${decodeURIComponent(password)}`).toString("base64")}`; + } + const connect = buildConnector({ ...opts.proxyTls }); + this[kConnectEndpoint] = buildConnector({ ...opts.requestTls }); + this[kClient] = clientFactory(url, { connect }); + this[kAgent] = new Agent({ + ...opts, + connect: async (opts2, callback) => { + let requestedPath = opts2.host; + if (!opts2.port) { + requestedPath += `:${defaultProtocolPort(opts2.protocol)}`; + } + try { + const { socket, statusCode } = await this[kClient].connect({ + origin, + port, + path: requestedPath, + signal: opts2.signal, + headers: { + ...this[kProxyHeaders], + host: opts2.host + }, + servername: this[kProxyTls]?.servername || proxyHostname + }); + if (statusCode !== 200) { + socket.on("error", noop).destroy(); + callback(new RequestAbortedError(`Proxy response (${statusCode}) !== 200 when HTTP Tunneling`)); + } + if (opts2.protocol !== "https:") { + callback(null, socket); + return; + } + let servername; + if (this[kRequestTls]) { + servername = this[kRequestTls].servername; + } else { + servername = opts2.servername; + } + this[kConnectEndpoint]({ ...opts2, servername, httpSocket: socket }, callback); + } catch (err) { + if (err.code === "ERR_TLS_CERT_ALTNAME_INVALID") { + callback(new SecureProxyConnectionError(err)); + } else { + callback(err); + } + } + } + }); + } + dispatch(opts, handler) { + const headers = buildHeaders(opts.headers); + throwIfProxyAuthIsSent(headers); + if (headers && !("host" in headers) && !("Host" in headers)) { + const { host } = new URL2(opts.origin); + headers.host = host; + } + return this[kAgent].dispatch( + { + ...opts, + headers + }, + handler + ); + } + async [kClose]() { + await this[kAgent].close(); + await this[kClient].close(); + } + async [kDestroy]() { + await this[kAgent].destroy(); + await this[kClient].destroy(); + } + }; + _getUrl = new WeakSet(); + getUrl_fn = /* @__PURE__ */ __name(function(opts) { + if (typeof opts === "string") { + return new URL2(opts); + } else if (opts instanceof URL2) { + return opts; + } else { + return new URL2(opts.uri); + } + }, "#getUrl"); + __name(_ProxyAgent, "ProxyAgent"); + var ProxyAgent = _ProxyAgent; + function buildHeaders(headers) { + if (Array.isArray(headers)) { + const headersPair = {}; + for (let i = 0; i < headers.length; i += 2) { + headersPair[headers[i]] = headers[i + 1]; + } + return headersPair; + } + return headers; + } + __name(buildHeaders, "buildHeaders"); + function throwIfProxyAuthIsSent(headers) { + const existProxyAuth = headers && Object.keys(headers).find((key) => key.toLowerCase() === "proxy-authorization"); + if (existProxyAuth) { + throw new InvalidArgumentError("Proxy-Authorization should be sent in ProxyAgent constructor"); + } + } + __name(throwIfProxyAuthIsSent, "throwIfProxyAuthIsSent"); + module2.exports = ProxyAgent; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +var require_env_http_proxy_agent = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js"(exports2, module2) { + "use strict"; + init_define_process(); + var DispatcherBase = require_dispatcher_base(); + var { kClose, kDestroy, kClosed, kDestroyed, kDispatch, kNoProxyAgent, kHttpProxyAgent, kHttpsProxyAgent } = require_symbols(); + var ProxyAgent = require_proxy_agent(); + var Agent = require_agent(); + var DEFAULT_PORTS = { + "http:": 80, + "https:": 443 + }; + var experimentalWarned = false; + var _noProxyValue, _noProxyEntries, _opts, _getProxyAgentForUrl, getProxyAgentForUrl_fn, _shouldProxy, shouldProxy_fn, _parseNoProxy, parseNoProxy_fn, _noProxyChanged, noProxyChanged_get, _noProxyEnv, noProxyEnv_get; + var _EnvHttpProxyAgent = class _EnvHttpProxyAgent extends DispatcherBase { + constructor(opts = {}) { + super(); + __privateAdd(this, _getProxyAgentForUrl); + __privateAdd(this, _shouldProxy); + __privateAdd(this, _parseNoProxy); + __privateAdd(this, _noProxyChanged); + __privateAdd(this, _noProxyEnv); + __privateAdd(this, _noProxyValue, null); + __privateAdd(this, _noProxyEntries, null); + __privateAdd(this, _opts, null); + __privateSet(this, _opts, opts); + if (!experimentalWarned) { + experimentalWarned = true; + define_process_default.emitWarning("EnvHttpProxyAgent is experimental, expect them to change at any time.", { + code: "UNDICI-EHPA" + }); + } + const { httpProxy, httpsProxy, noProxy, ...agentOpts } = opts; + this[kNoProxyAgent] = new Agent(agentOpts); + const HTTP_PROXY = httpProxy ?? define_process_default.env.http_proxy ?? define_process_default.env.HTTP_PROXY; + if (HTTP_PROXY) { + this[kHttpProxyAgent] = new ProxyAgent({ ...agentOpts, uri: HTTP_PROXY }); + } else { + this[kHttpProxyAgent] = this[kNoProxyAgent]; + } + const HTTPS_PROXY = httpsProxy ?? define_process_default.env.https_proxy ?? define_process_default.env.HTTPS_PROXY; + if (HTTPS_PROXY) { + this[kHttpsProxyAgent] = new ProxyAgent({ ...agentOpts, uri: HTTPS_PROXY }); + } else { + this[kHttpsProxyAgent] = this[kHttpProxyAgent]; + } + __privateMethod(this, _parseNoProxy, parseNoProxy_fn).call(this); + } + [kDispatch](opts, handler) { + const url = new URL(opts.origin); + const agent = __privateMethod(this, _getProxyAgentForUrl, getProxyAgentForUrl_fn).call(this, url); + return agent.dispatch(opts, handler); + } + async [kClose]() { + await this[kNoProxyAgent].close(); + if (!this[kHttpProxyAgent][kClosed]) { + await this[kHttpProxyAgent].close(); + } + if (!this[kHttpsProxyAgent][kClosed]) { + await this[kHttpsProxyAgent].close(); + } + } + async [kDestroy](err) { + await this[kNoProxyAgent].destroy(err); + if (!this[kHttpProxyAgent][kDestroyed]) { + await this[kHttpProxyAgent].destroy(err); + } + if (!this[kHttpsProxyAgent][kDestroyed]) { + await this[kHttpsProxyAgent].destroy(err); + } + } + }; + _noProxyValue = new WeakMap(); + _noProxyEntries = new WeakMap(); + _opts = new WeakMap(); + _getProxyAgentForUrl = new WeakSet(); + getProxyAgentForUrl_fn = /* @__PURE__ */ __name(function(url) { + let { protocol, host: hostname, port } = url; + hostname = hostname.replace(/:\d*$/, "").toLowerCase(); + port = Number.parseInt(port, 10) || DEFAULT_PORTS[protocol] || 0; + if (!__privateMethod(this, _shouldProxy, shouldProxy_fn).call(this, hostname, port)) { + return this[kNoProxyAgent]; + } + if (protocol === "https:") { + return this[kHttpsProxyAgent]; + } + return this[kHttpProxyAgent]; + }, "#getProxyAgentForUrl"); + _shouldProxy = new WeakSet(); + shouldProxy_fn = /* @__PURE__ */ __name(function(hostname, port) { + if (__privateGet(this, _noProxyChanged, noProxyChanged_get)) { + __privateMethod(this, _parseNoProxy, parseNoProxy_fn).call(this); + } + if (__privateGet(this, _noProxyEntries).length === 0) { + return true; + } + if (__privateGet(this, _noProxyValue) === "*") { + return false; + } + for (let i = 0; i < __privateGet(this, _noProxyEntries).length; i++) { + const entry = __privateGet(this, _noProxyEntries)[i]; + if (entry.port && entry.port !== port) { + continue; + } + if (!/^[.*]/.test(entry.hostname)) { + if (hostname === entry.hostname) { + return false; + } + } else { + if (hostname.endsWith(entry.hostname.replace(/^\*/, ""))) { + return false; + } + } + } + return true; + }, "#shouldProxy"); + _parseNoProxy = new WeakSet(); + parseNoProxy_fn = /* @__PURE__ */ __name(function() { + const noProxyValue = __privateGet(this, _opts).noProxy ?? __privateGet(this, _noProxyEnv, noProxyEnv_get); + const noProxySplit = noProxyValue.split(/[,\s]/); + const noProxyEntries = []; + for (let i = 0; i < noProxySplit.length; i++) { + const entry = noProxySplit[i]; + if (!entry) { + continue; + } + const parsed = entry.match(/^(.+):(\d+)$/); + noProxyEntries.push({ + hostname: (parsed ? parsed[1] : entry).toLowerCase(), + port: parsed ? Number.parseInt(parsed[2], 10) : 0 + }); + } + __privateSet(this, _noProxyValue, noProxyValue); + __privateSet(this, _noProxyEntries, noProxyEntries); + }, "#parseNoProxy"); + _noProxyChanged = new WeakSet(); + noProxyChanged_get = /* @__PURE__ */ __name(function() { + if (__privateGet(this, _opts).noProxy !== void 0) { + return false; + } + return __privateGet(this, _noProxyValue) !== __privateGet(this, _noProxyEnv, noProxyEnv_get); + }, "#noProxyChanged"); + _noProxyEnv = new WeakSet(); + noProxyEnv_get = /* @__PURE__ */ __name(function() { + return define_process_default.env.no_proxy ?? define_process_default.env.NO_PROXY ?? ""; + }, "#noProxyEnv"); + __name(_EnvHttpProxyAgent, "EnvHttpProxyAgent"); + var EnvHttpProxyAgent = _EnvHttpProxyAgent; + module2.exports = EnvHttpProxyAgent; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/handler/retry-handler.js +var require_retry_handler = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/handler/retry-handler.js"(exports2, module2) { + "use strict"; + init_define_process(); + var assert = require("assert"); + var { kRetryHandlerDefaultRetry } = require_symbols(); + var { RequestRetryError } = require_errors(); + var { + isDisturbed, + parseHeaders, + parseRangeHeader, + wrapRequestBody + } = require_util(); + function calculateRetryAfterHeader(retryAfter) { + const current = Date.now(); + return new Date(retryAfter).getTime() - current; + } + __name(calculateRetryAfterHeader, "calculateRetryAfterHeader"); + var _RetryHandler = class _RetryHandler { + constructor(opts, handlers) { + const { retryOptions, ...dispatchOpts } = opts; + const { + // Retry scoped + retry: retryFn, + maxRetries, + maxTimeout, + minTimeout, + timeoutFactor, + // Response scoped + methods, + errorCodes, + retryAfter, + statusCodes + } = retryOptions ?? {}; + this.dispatch = handlers.dispatch; + this.handler = handlers.handler; + this.opts = { ...dispatchOpts, body: wrapRequestBody(opts.body) }; + this.abort = null; + this.aborted = false; + this.retryOpts = { + retry: retryFn ?? _RetryHandler[kRetryHandlerDefaultRetry], + retryAfter: retryAfter ?? true, + maxTimeout: maxTimeout ?? 30 * 1e3, + // 30s, + minTimeout: minTimeout ?? 500, + // .5s + timeoutFactor: timeoutFactor ?? 2, + maxRetries: maxRetries ?? 5, + // What errors we should retry + methods: methods ?? ["GET", "HEAD", "OPTIONS", "PUT", "DELETE", "TRACE"], + // Indicates which errors to retry + statusCodes: statusCodes ?? [500, 502, 503, 504, 429], + // List of errors to retry + errorCodes: errorCodes ?? [ + "ECONNRESET", + "ECONNREFUSED", + "ENOTFOUND", + "ENETDOWN", + "ENETUNREACH", + "EHOSTDOWN", + "EHOSTUNREACH", + "EPIPE", + "UND_ERR_SOCKET" + ] + }; + this.retryCount = 0; + this.retryCountCheckpoint = 0; + this.start = 0; + this.end = null; + this.etag = null; + this.resume = null; + this.handler.onConnect((reason) => { + this.aborted = true; + if (this.abort) { + this.abort(reason); + } else { + this.reason = reason; + } + }); + } + onRequestSent() { + if (this.handler.onRequestSent) { + this.handler.onRequestSent(); + } + } + onUpgrade(statusCode, headers, socket) { + if (this.handler.onUpgrade) { + this.handler.onUpgrade(statusCode, headers, socket); + } + } + onConnect(abort) { + if (this.aborted) { + abort(this.reason); + } else { + this.abort = abort; + } + } + onBodySent(chunk) { + if (this.handler.onBodySent) + return this.handler.onBodySent(chunk); + } + static [kRetryHandlerDefaultRetry](err, { state, opts }, cb) { + const { statusCode, code, headers } = err; + const { method, retryOptions } = opts; + const { + maxRetries, + minTimeout, + maxTimeout, + timeoutFactor, + statusCodes, + errorCodes, + methods + } = retryOptions; + const { counter } = state; + if (code && code !== "UND_ERR_REQ_RETRY" && !errorCodes.includes(code)) { + cb(err); + return; + } + if (Array.isArray(methods) && !methods.includes(method)) { + cb(err); + return; + } + if (statusCode != null && Array.isArray(statusCodes) && !statusCodes.includes(statusCode)) { + cb(err); + return; + } + if (counter > maxRetries) { + cb(err); + return; + } + let retryAfterHeader = headers?.["retry-after"]; + if (retryAfterHeader) { + retryAfterHeader = Number(retryAfterHeader); + retryAfterHeader = Number.isNaN(retryAfterHeader) ? calculateRetryAfterHeader(retryAfterHeader) : retryAfterHeader * 1e3; + } + const retryTimeout = retryAfterHeader > 0 ? Math.min(retryAfterHeader, maxTimeout) : Math.min(minTimeout * timeoutFactor ** (counter - 1), maxTimeout); + setTimeout(() => cb(null), retryTimeout); + } + onHeaders(statusCode, rawHeaders, resume, statusMessage) { + const headers = parseHeaders(rawHeaders); + this.retryCount += 1; + if (statusCode >= 300) { + if (this.retryOpts.statusCodes.includes(statusCode) === false) { + return this.handler.onHeaders( + statusCode, + rawHeaders, + resume, + statusMessage + ); + } else { + this.abort( + new RequestRetryError("Request failed", statusCode, { + headers, + data: { + count: this.retryCount + } + }) + ); + return false; + } + } + if (this.resume != null) { + this.resume = null; + if (statusCode !== 206 && (this.start > 0 || statusCode !== 200)) { + this.abort( + new RequestRetryError("server does not support the range header and the payload was partially consumed", statusCode, { + headers, + data: { count: this.retryCount } + }) + ); + return false; + } + const contentRange = parseRangeHeader(headers["content-range"]); + if (!contentRange) { + this.abort( + new RequestRetryError("Content-Range mismatch", statusCode, { + headers, + data: { count: this.retryCount } + }) + ); + return false; + } + if (this.etag != null && this.etag !== headers.etag) { + this.abort( + new RequestRetryError("ETag mismatch", statusCode, { + headers, + data: { count: this.retryCount } + }) + ); + return false; + } + const { start, size, end = size - 1 } = contentRange; + assert(this.start === start, "content-range mismatch"); + assert(this.end == null || this.end === end, "content-range mismatch"); + this.resume = resume; + return true; + } + if (this.end == null) { + if (statusCode === 206) { + const range = parseRangeHeader(headers["content-range"]); + if (range == null) { + return this.handler.onHeaders( + statusCode, + rawHeaders, + resume, + statusMessage + ); + } + const { start, size, end = size - 1 } = range; + assert( + start != null && Number.isFinite(start), + "content-range mismatch" + ); + assert(end != null && Number.isFinite(end), "invalid content-length"); + this.start = start; + this.end = end; + } + if (this.end == null) { + const contentLength = headers["content-length"]; + this.end = contentLength != null ? Number(contentLength) - 1 : null; + } + assert(Number.isFinite(this.start)); + assert( + this.end == null || Number.isFinite(this.end), + "invalid content-length" + ); + this.resume = resume; + this.etag = headers.etag != null ? headers.etag : null; + if (this.etag != null && this.etag.startsWith("W/")) { + this.etag = null; + } + return this.handler.onHeaders( + statusCode, + rawHeaders, + resume, + statusMessage + ); + } + const err = new RequestRetryError("Request failed", statusCode, { + headers, + data: { count: this.retryCount } + }); + this.abort(err); + return false; + } + onData(chunk) { + this.start += chunk.length; + return this.handler.onData(chunk); + } + onComplete(rawTrailers) { + this.retryCount = 0; + return this.handler.onComplete(rawTrailers); + } + onError(err) { + if (this.aborted || isDisturbed(this.opts.body)) { + return this.handler.onError(err); + } + if (this.retryCount - this.retryCountCheckpoint > 0) { + this.retryCount = this.retryCountCheckpoint + (this.retryCount - this.retryCountCheckpoint); + } else { + this.retryCount += 1; + } + this.retryOpts.retry( + err, + { + state: { counter: this.retryCount }, + opts: { retryOptions: this.retryOpts, ...this.opts } + }, + onRetry.bind(this) + ); + function onRetry(err2) { + if (err2 != null || this.aborted || isDisturbed(this.opts.body)) { + return this.handler.onError(err2); + } + if (this.start !== 0) { + const headers = { range: `bytes=${this.start}-${this.end ?? ""}` }; + if (this.etag != null) { + headers["if-match"] = this.etag; + } + this.opts = { + ...this.opts, + headers: { + ...this.opts.headers, + ...headers + } + }; + } + try { + this.retryCountCheckpoint = this.retryCount; + this.dispatch(this.opts, this); + } catch (err3) { + this.handler.onError(err3); + } + } + __name(onRetry, "onRetry"); + } + }; + __name(_RetryHandler, "RetryHandler"); + var RetryHandler = _RetryHandler; + module2.exports = RetryHandler; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/retry-agent.js +var require_retry_agent = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/retry-agent.js"(exports2, module2) { + "use strict"; + init_define_process(); + var Dispatcher = require_dispatcher(); + var RetryHandler = require_retry_handler(); + var _agent, _options; + var _RetryAgent = class _RetryAgent extends Dispatcher { + constructor(agent, options = {}) { + super(options); + __privateAdd(this, _agent, null); + __privateAdd(this, _options, null); + __privateSet(this, _agent, agent); + __privateSet(this, _options, options); + } + dispatch(opts, handler) { + const retry = new RetryHandler({ + ...opts, + retryOptions: __privateGet(this, _options) + }, { + dispatch: __privateGet(this, _agent).dispatch.bind(__privateGet(this, _agent)), + handler + }); + return __privateGet(this, _agent).dispatch(opts, retry); + } + close() { + return __privateGet(this, _agent).close(); + } + destroy() { + return __privateGet(this, _agent).destroy(); + } + }; + _agent = new WeakMap(); + _options = new WeakMap(); + __name(_RetryAgent, "RetryAgent"); + var RetryAgent = _RetryAgent; + module2.exports = RetryAgent; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/api/readable.js +var require_readable = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/api/readable.js"(exports2, module2) { + "use strict"; + init_define_process(); + var assert = require("assert"); + var { Readable } = require("stream"); + var { RequestAbortedError, NotSupportedError, InvalidArgumentError, AbortError } = require_errors(); + var util = require_util(); + var { ReadableStreamFrom } = require_util(); + var kConsume = Symbol("kConsume"); + var kReading = Symbol("kReading"); + var kBody = Symbol("kBody"); + var kAbort = Symbol("kAbort"); + var kContentType = Symbol("kContentType"); + var kContentLength = Symbol("kContentLength"); + var noop = /* @__PURE__ */ __name(() => { + }, "noop"); + var _BodyReadable = class _BodyReadable extends Readable { + constructor({ + resume, + abort, + contentType = "", + contentLength, + highWaterMark = 64 * 1024 + // Same as nodejs fs streams. + }) { + super({ + autoDestroy: true, + read: resume, + highWaterMark + }); + this._readableState.dataEmitted = false; + this[kAbort] = abort; + this[kConsume] = null; + this[kBody] = null; + this[kContentType] = contentType; + this[kContentLength] = contentLength; + this[kReading] = false; + } + destroy(err) { + if (!err && !this._readableState.endEmitted) { + err = new RequestAbortedError(); + } + if (err) { + this[kAbort](); + } + return super.destroy(err); + } + _destroy(err, callback) { + if (!this[kReading]) { + setImmediate(() => { + callback(err); + }); + } else { + callback(err); + } + } + on(ev, ...args) { + if (ev === "data" || ev === "readable") { + this[kReading] = true; + } + return super.on(ev, ...args); + } + addListener(ev, ...args) { + return this.on(ev, ...args); + } + off(ev, ...args) { + const ret = super.off(ev, ...args); + if (ev === "data" || ev === "readable") { + this[kReading] = this.listenerCount("data") > 0 || this.listenerCount("readable") > 0; + } + return ret; + } + removeListener(ev, ...args) { + return this.off(ev, ...args); + } + push(chunk) { + if (this[kConsume] && chunk !== null) { + consumePush(this[kConsume], chunk); + return this[kReading] ? super.push(chunk) : true; + } + return super.push(chunk); + } + // https://fetch.spec.whatwg.org/#dom-body-text + async text() { + return consume(this, "text"); + } + // https://fetch.spec.whatwg.org/#dom-body-json + async json() { + return consume(this, "json"); + } + // https://fetch.spec.whatwg.org/#dom-body-blob + async blob() { + return consume(this, "blob"); + } + // https://fetch.spec.whatwg.org/#dom-body-bytes + async bytes() { + return consume(this, "bytes"); + } + // https://fetch.spec.whatwg.org/#dom-body-arraybuffer + async arrayBuffer() { + return consume(this, "arrayBuffer"); + } + // https://fetch.spec.whatwg.org/#dom-body-formdata + async formData() { + throw new NotSupportedError(); + } + // https://fetch.spec.whatwg.org/#dom-body-bodyused + get bodyUsed() { + return util.isDisturbed(this); + } + // https://fetch.spec.whatwg.org/#dom-body-body + get body() { + if (!this[kBody]) { + this[kBody] = ReadableStreamFrom(this); + if (this[kConsume]) { + this[kBody].getReader(); + assert(this[kBody].locked); + } + } + return this[kBody]; + } + async dump(opts) { + let limit = Number.isFinite(opts?.limit) ? opts.limit : 128 * 1024; + const signal = opts?.signal; + if (signal != null && (typeof signal !== "object" || !("aborted" in signal))) { + throw new InvalidArgumentError("signal must be an AbortSignal"); + } + signal?.throwIfAborted(); + if (this._readableState.closeEmitted) { + return null; + } + return await new Promise((resolve, reject) => { + if (this[kContentLength] > limit) { + this.destroy(new AbortError()); + } + const onAbort = /* @__PURE__ */ __name(() => { + this.destroy(signal.reason ?? new AbortError()); + }, "onAbort"); + signal?.addEventListener("abort", onAbort); + this.on("close", function() { + signal?.removeEventListener("abort", onAbort); + if (signal?.aborted) { + reject(signal.reason ?? new AbortError()); + } else { + resolve(null); + } + }).on("error", noop).on("data", function(chunk) { + limit -= chunk.length; + if (limit <= 0) { + this.destroy(); + } + }).resume(); + }); + } + }; + __name(_BodyReadable, "BodyReadable"); + var BodyReadable = _BodyReadable; + function isLocked(self) { + return self[kBody] && self[kBody].locked === true || self[kConsume]; + } + __name(isLocked, "isLocked"); + function isUnusable(self) { + return util.isDisturbed(self) || isLocked(self); + } + __name(isUnusable, "isUnusable"); + async function consume(stream, type) { + assert(!stream[kConsume]); + return new Promise((resolve, reject) => { + if (isUnusable(stream)) { + const rState = stream._readableState; + if (rState.destroyed && rState.closeEmitted === false) { + stream.on("error", (err) => { + reject(err); + }).on("close", () => { + reject(new TypeError("unusable")); + }); + } else { + reject(rState.errored ?? new TypeError("unusable")); + } + } else { + queueMicrotask(() => { + stream[kConsume] = { + type, + stream, + resolve, + reject, + length: 0, + body: [] + }; + stream.on("error", function(err) { + consumeFinish(this[kConsume], err); + }).on("close", function() { + if (this[kConsume].body !== null) { + consumeFinish(this[kConsume], new RequestAbortedError()); + } + }); + consumeStart(stream[kConsume]); + }); + } + }); + } + __name(consume, "consume"); + function consumeStart(consume2) { + if (consume2.body === null) { + return; + } + const { _readableState: state } = consume2.stream; + if (state.bufferIndex) { + const start = state.bufferIndex; + const end = state.buffer.length; + for (let n = start; n < end; n++) { + consumePush(consume2, state.buffer[n]); + } + } else { + for (const chunk of state.buffer) { + consumePush(consume2, chunk); + } + } + if (state.endEmitted) { + consumeEnd(this[kConsume]); + } else { + consume2.stream.on("end", function() { + consumeEnd(this[kConsume]); + }); + } + consume2.stream.resume(); + while (consume2.stream.read() != null) { + } + } + __name(consumeStart, "consumeStart"); + function chunksDecode(chunks, length) { + if (chunks.length === 0 || length === 0) { + return ""; + } + const buffer = chunks.length === 1 ? chunks[0] : Buffer.concat(chunks, length); + const bufferLength = buffer.length; + const start = bufferLength > 2 && buffer[0] === 239 && buffer[1] === 187 && buffer[2] === 191 ? 3 : 0; + return buffer.utf8Slice(start, bufferLength); + } + __name(chunksDecode, "chunksDecode"); + function chunksConcat(chunks, length) { + if (chunks.length === 0 || length === 0) { + return new Uint8Array(0); + } + if (chunks.length === 1) { + return new Uint8Array(chunks[0]); + } + const buffer = new Uint8Array(Buffer.allocUnsafeSlow(length).buffer); + let offset = 0; + for (let i = 0; i < chunks.length; ++i) { + const chunk = chunks[i]; + buffer.set(chunk, offset); + offset += chunk.length; + } + return buffer; + } + __name(chunksConcat, "chunksConcat"); + function consumeEnd(consume2) { + const { type, body, resolve, stream, length } = consume2; + try { + if (type === "text") { + resolve(chunksDecode(body, length)); + } else if (type === "json") { + resolve(JSON.parse(chunksDecode(body, length))); + } else if (type === "arrayBuffer") { + resolve(chunksConcat(body, length).buffer); + } else if (type === "blob") { + resolve(new Blob(body, { type: stream[kContentType] })); + } else if (type === "bytes") { + resolve(chunksConcat(body, length)); + } + consumeFinish(consume2); + } catch (err) { + stream.destroy(err); + } + } + __name(consumeEnd, "consumeEnd"); + function consumePush(consume2, chunk) { + consume2.length += chunk.length; + consume2.body.push(chunk); + } + __name(consumePush, "consumePush"); + function consumeFinish(consume2, err) { + if (consume2.body === null) { + return; + } + if (err) { + consume2.reject(err); + } else { + consume2.resolve(); + } + consume2.type = null; + consume2.stream = null; + consume2.resolve = null; + consume2.reject = null; + consume2.length = 0; + consume2.body = null; + } + __name(consumeFinish, "consumeFinish"); + module2.exports = { Readable: BodyReadable, chunksDecode }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/api/util.js +var require_util3 = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/api/util.js"(exports2, module2) { + "use strict"; + init_define_process(); + var assert = require("assert"); + var { + ResponseStatusCodeError + } = require_errors(); + var { chunksDecode } = require_readable(); + var CHUNK_LIMIT = 128 * 1024; + async function getResolveErrorBodyCallback({ callback, body, contentType, statusCode, statusMessage, headers }) { + assert(body); + let chunks = []; + let length = 0; + try { + for await (const chunk of body) { + chunks.push(chunk); + length += chunk.length; + if (length > CHUNK_LIMIT) { + chunks = []; + length = 0; + break; + } + } + } catch { + chunks = []; + length = 0; + } + const message = `Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ""}`; + if (statusCode === 204 || !contentType || !length) { + queueMicrotask(() => callback(new ResponseStatusCodeError(message, statusCode, headers))); + return; + } + const stackTraceLimit = Error.stackTraceLimit; + Error.stackTraceLimit = 0; + let payload; + try { + if (isContentTypeApplicationJson(contentType)) { + payload = JSON.parse(chunksDecode(chunks, length)); + } else if (isContentTypeText(contentType)) { + payload = chunksDecode(chunks, length); + } + } catch { + } finally { + Error.stackTraceLimit = stackTraceLimit; + } + queueMicrotask(() => callback(new ResponseStatusCodeError(message, statusCode, headers, payload))); + } + __name(getResolveErrorBodyCallback, "getResolveErrorBodyCallback"); + var isContentTypeApplicationJson = /* @__PURE__ */ __name((contentType) => { + return contentType.length > 15 && contentType[11] === "/" && contentType[0] === "a" && contentType[1] === "p" && contentType[2] === "p" && contentType[3] === "l" && contentType[4] === "i" && contentType[5] === "c" && contentType[6] === "a" && contentType[7] === "t" && contentType[8] === "i" && contentType[9] === "o" && contentType[10] === "n" && contentType[12] === "j" && contentType[13] === "s" && contentType[14] === "o" && contentType[15] === "n"; + }, "isContentTypeApplicationJson"); + var isContentTypeText = /* @__PURE__ */ __name((contentType) => { + return contentType.length > 4 && contentType[4] === "/" && contentType[0] === "t" && contentType[1] === "e" && contentType[2] === "x" && contentType[3] === "t"; + }, "isContentTypeText"); + module2.exports = { + getResolveErrorBodyCallback, + isContentTypeApplicationJson, + isContentTypeText + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/api/api-request.js +var require_api_request = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/api/api-request.js"(exports2, module2) { + "use strict"; + init_define_process(); + var assert = require("assert"); + var { Readable } = require_readable(); + var { InvalidArgumentError, RequestAbortedError } = require_errors(); + var util = require_util(); + var { getResolveErrorBodyCallback } = require_util3(); + var { AsyncResource } = require("async_hooks"); + var _RequestHandler = class _RequestHandler extends AsyncResource { + constructor(opts, callback) { + if (!opts || typeof opts !== "object") { + throw new InvalidArgumentError("invalid opts"); + } + const { signal, method, opaque, body, onInfo, responseHeaders, throwOnError, highWaterMark } = opts; + try { + if (typeof callback !== "function") { + throw new InvalidArgumentError("invalid callback"); + } + if (highWaterMark && (typeof highWaterMark !== "number" || highWaterMark < 0)) { + throw new InvalidArgumentError("invalid highWaterMark"); + } + if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") { + throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget"); + } + if (method === "CONNECT") { + throw new InvalidArgumentError("invalid method"); + } + if (onInfo && typeof onInfo !== "function") { + throw new InvalidArgumentError("invalid onInfo callback"); + } + super("UNDICI_REQUEST"); + } catch (err) { + if (util.isStream(body)) { + util.destroy(body.on("error", util.nop), err); + } + throw err; + } + this.method = method; + this.responseHeaders = responseHeaders || null; + this.opaque = opaque || null; + this.callback = callback; + this.res = null; + this.abort = null; + this.body = body; + this.trailers = {}; + this.context = null; + this.onInfo = onInfo || null; + this.throwOnError = throwOnError; + this.highWaterMark = highWaterMark; + this.signal = signal; + this.reason = null; + this.removeAbortListener = null; + if (util.isStream(body)) { + body.on("error", (err) => { + this.onError(err); + }); + } + if (this.signal) { + if (this.signal.aborted) { + this.reason = this.signal.reason ?? new RequestAbortedError(); + } else { + this.removeAbortListener = util.addAbortListener(this.signal, () => { + this.reason = this.signal.reason ?? new RequestAbortedError(); + if (this.res) { + util.destroy(this.res, this.reason); + } else if (this.abort) { + this.abort(this.reason); + } + if (this.removeAbortListener) { + this.res?.off("close", this.removeAbortListener); + this.removeAbortListener(); + this.removeAbortListener = null; + } + }); + } + } + } + onConnect(abort, context) { + if (this.reason) { + abort(this.reason); + return; + } + assert(this.callback); + this.abort = abort; + this.context = context; + } + onHeaders(statusCode, rawHeaders, resume, statusMessage) { + const { callback, opaque, abort, context, responseHeaders, highWaterMark } = this; + const headers = responseHeaders === "raw" ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders); + if (statusCode < 200) { + if (this.onInfo) { + this.onInfo({ statusCode, headers }); + } + return; + } + const parsedHeaders = responseHeaders === "raw" ? util.parseHeaders(rawHeaders) : headers; + const contentType = parsedHeaders["content-type"]; + const contentLength = parsedHeaders["content-length"]; + const res = new Readable({ + resume, + abort, + contentType, + contentLength: this.method !== "HEAD" && contentLength ? Number(contentLength) : null, + highWaterMark + }); + if (this.removeAbortListener) { + res.on("close", this.removeAbortListener); + } + this.callback = null; + this.res = res; + if (callback !== null) { + if (this.throwOnError && statusCode >= 400) { + this.runInAsyncScope( + getResolveErrorBodyCallback, + null, + { callback, body: res, contentType, statusCode, statusMessage, headers } + ); + } else { + this.runInAsyncScope(callback, null, null, { + statusCode, + headers, + trailers: this.trailers, + opaque, + body: res, + context + }); + } + } + } + onData(chunk) { + return this.res.push(chunk); + } + onComplete(trailers) { + util.parseHeaders(trailers, this.trailers); + this.res.push(null); + } + onError(err) { + const { res, callback, body, opaque } = this; + if (callback) { + this.callback = null; + queueMicrotask(() => { + this.runInAsyncScope(callback, null, err, { opaque }); + }); + } + if (res) { + this.res = null; + queueMicrotask(() => { + util.destroy(res, err); + }); + } + if (body) { + this.body = null; + util.destroy(body, err); + } + if (this.removeAbortListener) { + res?.off("close", this.removeAbortListener); + this.removeAbortListener(); + this.removeAbortListener = null; + } + } + }; + __name(_RequestHandler, "RequestHandler"); + var RequestHandler = _RequestHandler; + function request(opts, callback) { + if (callback === void 0) { + return new Promise((resolve, reject) => { + request.call(this, opts, (err, data) => { + return err ? reject(err) : resolve(data); + }); + }); + } + try { + this.dispatch(opts, new RequestHandler(opts, callback)); + } catch (err) { + if (typeof callback !== "function") { + throw err; + } + const opaque = opts?.opaque; + queueMicrotask(() => callback(err, { opaque })); + } + } + __name(request, "request"); + module2.exports = request; + module2.exports.RequestHandler = RequestHandler; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/api/abort-signal.js +var require_abort_signal = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/api/abort-signal.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { addAbortListener } = require_util(); + var { RequestAbortedError } = require_errors(); + var kListener = Symbol("kListener"); + var kSignal = Symbol("kSignal"); + function abort(self) { + if (self.abort) { + self.abort(self[kSignal]?.reason); + } else { + self.reason = self[kSignal]?.reason ?? new RequestAbortedError(); + } + removeSignal(self); + } + __name(abort, "abort"); + function addSignal(self, signal) { + self.reason = null; + self[kSignal] = null; + self[kListener] = null; + if (!signal) { + return; + } + if (signal.aborted) { + abort(self); + return; + } + self[kSignal] = signal; + self[kListener] = () => { + abort(self); + }; + addAbortListener(self[kSignal], self[kListener]); + } + __name(addSignal, "addSignal"); + function removeSignal(self) { + if (!self[kSignal]) { + return; + } + if ("removeEventListener" in self[kSignal]) { + self[kSignal].removeEventListener("abort", self[kListener]); + } else { + self[kSignal].removeListener("abort", self[kListener]); + } + self[kSignal] = null; + self[kListener] = null; + } + __name(removeSignal, "removeSignal"); + module2.exports = { + addSignal, + removeSignal + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/api/api-stream.js +var require_api_stream = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/api/api-stream.js"(exports2, module2) { + "use strict"; + init_define_process(); + var assert = require("assert"); + var { finished, PassThrough } = require("stream"); + var { InvalidArgumentError, InvalidReturnValueError } = require_errors(); + var util = require_util(); + var { getResolveErrorBodyCallback } = require_util3(); + var { AsyncResource } = require("async_hooks"); + var { addSignal, removeSignal } = require_abort_signal(); + var _StreamHandler = class _StreamHandler extends AsyncResource { + constructor(opts, factory, callback) { + if (!opts || typeof opts !== "object") { + throw new InvalidArgumentError("invalid opts"); + } + const { signal, method, opaque, body, onInfo, responseHeaders, throwOnError } = opts; + try { + if (typeof callback !== "function") { + throw new InvalidArgumentError("invalid callback"); + } + if (typeof factory !== "function") { + throw new InvalidArgumentError("invalid factory"); + } + if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") { + throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget"); + } + if (method === "CONNECT") { + throw new InvalidArgumentError("invalid method"); + } + if (onInfo && typeof onInfo !== "function") { + throw new InvalidArgumentError("invalid onInfo callback"); + } + super("UNDICI_STREAM"); + } catch (err) { + if (util.isStream(body)) { + util.destroy(body.on("error", util.nop), err); + } + throw err; + } + this.responseHeaders = responseHeaders || null; + this.opaque = opaque || null; + this.factory = factory; + this.callback = callback; + this.res = null; + this.abort = null; + this.context = null; + this.trailers = null; + this.body = body; + this.onInfo = onInfo || null; + this.throwOnError = throwOnError || false; + if (util.isStream(body)) { + body.on("error", (err) => { + this.onError(err); + }); + } + addSignal(this, signal); + } + onConnect(abort, context) { + if (this.reason) { + abort(this.reason); + return; + } + assert(this.callback); + this.abort = abort; + this.context = context; + } + onHeaders(statusCode, rawHeaders, resume, statusMessage) { + const { factory, opaque, context, callback, responseHeaders } = this; + const headers = responseHeaders === "raw" ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders); + if (statusCode < 200) { + if (this.onInfo) { + this.onInfo({ statusCode, headers }); + } + return; + } + this.factory = null; + let res; + if (this.throwOnError && statusCode >= 400) { + const parsedHeaders = responseHeaders === "raw" ? util.parseHeaders(rawHeaders) : headers; + const contentType = parsedHeaders["content-type"]; + res = new PassThrough(); + this.callback = null; + this.runInAsyncScope( + getResolveErrorBodyCallback, + null, + { callback, body: res, contentType, statusCode, statusMessage, headers } + ); + } else { + if (factory === null) { + return; + } + res = this.runInAsyncScope(factory, null, { + statusCode, + headers, + opaque, + context + }); + if (!res || typeof res.write !== "function" || typeof res.end !== "function" || typeof res.on !== "function") { + throw new InvalidReturnValueError("expected Writable"); + } + finished(res, { readable: false }, (err) => { + const { callback: callback2, res: res2, opaque: opaque2, trailers, abort } = this; + this.res = null; + if (err || !res2.readable) { + util.destroy(res2, err); + } + this.callback = null; + this.runInAsyncScope(callback2, null, err || null, { opaque: opaque2, trailers }); + if (err) { + abort(); + } + }); + } + res.on("drain", resume); + this.res = res; + const needDrain = res.writableNeedDrain !== void 0 ? res.writableNeedDrain : res._writableState?.needDrain; + return needDrain !== true; + } + onData(chunk) { + const { res } = this; + return res ? res.write(chunk) : true; + } + onComplete(trailers) { + const { res } = this; + removeSignal(this); + if (!res) { + return; + } + this.trailers = util.parseHeaders(trailers); + res.end(); + } + onError(err) { + const { res, callback, opaque, body } = this; + removeSignal(this); + this.factory = null; + if (res) { + this.res = null; + util.destroy(res, err); + } else if (callback) { + this.callback = null; + queueMicrotask(() => { + this.runInAsyncScope(callback, null, err, { opaque }); + }); + } + if (body) { + this.body = null; + util.destroy(body, err); + } + } + }; + __name(_StreamHandler, "StreamHandler"); + var StreamHandler = _StreamHandler; + function stream(opts, factory, callback) { + if (callback === void 0) { + return new Promise((resolve, reject) => { + stream.call(this, opts, factory, (err, data) => { + return err ? reject(err) : resolve(data); + }); + }); + } + try { + this.dispatch(opts, new StreamHandler(opts, factory, callback)); + } catch (err) { + if (typeof callback !== "function") { + throw err; + } + const opaque = opts?.opaque; + queueMicrotask(() => callback(err, { opaque })); + } + } + __name(stream, "stream"); + module2.exports = stream; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/api/api-pipeline.js +var require_api_pipeline = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/api/api-pipeline.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { + Readable, + Duplex, + PassThrough + } = require("stream"); + var { + InvalidArgumentError, + InvalidReturnValueError, + RequestAbortedError + } = require_errors(); + var util = require_util(); + var { AsyncResource } = require("async_hooks"); + var { addSignal, removeSignal } = require_abort_signal(); + var assert = require("assert"); + var kResume = Symbol("resume"); + var _PipelineRequest = class _PipelineRequest extends Readable { + constructor() { + super({ autoDestroy: true }); + this[kResume] = null; + } + _read() { + const { [kResume]: resume } = this; + if (resume) { + this[kResume] = null; + resume(); + } + } + _destroy(err, callback) { + this._read(); + callback(err); + } + }; + __name(_PipelineRequest, "PipelineRequest"); + var PipelineRequest = _PipelineRequest; + var _PipelineResponse = class _PipelineResponse extends Readable { + constructor(resume) { + super({ autoDestroy: true }); + this[kResume] = resume; + } + _read() { + this[kResume](); + } + _destroy(err, callback) { + if (!err && !this._readableState.endEmitted) { + err = new RequestAbortedError(); + } + callback(err); + } + }; + __name(_PipelineResponse, "PipelineResponse"); + var PipelineResponse = _PipelineResponse; + var _PipelineHandler = class _PipelineHandler extends AsyncResource { + constructor(opts, handler) { + if (!opts || typeof opts !== "object") { + throw new InvalidArgumentError("invalid opts"); + } + if (typeof handler !== "function") { + throw new InvalidArgumentError("invalid handler"); + } + const { signal, method, opaque, onInfo, responseHeaders } = opts; + if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") { + throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget"); + } + if (method === "CONNECT") { + throw new InvalidArgumentError("invalid method"); + } + if (onInfo && typeof onInfo !== "function") { + throw new InvalidArgumentError("invalid onInfo callback"); + } + super("UNDICI_PIPELINE"); + this.opaque = opaque || null; + this.responseHeaders = responseHeaders || null; + this.handler = handler; + this.abort = null; + this.context = null; + this.onInfo = onInfo || null; + this.req = new PipelineRequest().on("error", util.nop); + this.ret = new Duplex({ + readableObjectMode: opts.objectMode, + autoDestroy: true, + read: () => { + const { body } = this; + if (body?.resume) { + body.resume(); + } + }, + write: (chunk, encoding, callback) => { + const { req } = this; + if (req.push(chunk, encoding) || req._readableState.destroyed) { + callback(); + } else { + req[kResume] = callback; + } + }, + destroy: (err, callback) => { + const { body, req, res, ret, abort } = this; + if (!err && !ret._readableState.endEmitted) { + err = new RequestAbortedError(); + } + if (abort && err) { + abort(); + } + util.destroy(body, err); + util.destroy(req, err); + util.destroy(res, err); + removeSignal(this); + callback(err); + } + }).on("prefinish", () => { + const { req } = this; + req.push(null); + }); + this.res = null; + addSignal(this, signal); + } + onConnect(abort, context) { + const { ret, res } = this; + if (this.reason) { + abort(this.reason); + return; + } + assert(!res, "pipeline cannot be retried"); + assert(!ret.destroyed); + this.abort = abort; + this.context = context; + } + onHeaders(statusCode, rawHeaders, resume) { + const { opaque, handler, context } = this; + if (statusCode < 200) { + if (this.onInfo) { + const headers = this.responseHeaders === "raw" ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders); + this.onInfo({ statusCode, headers }); + } + return; + } + this.res = new PipelineResponse(resume); + let body; + try { + this.handler = null; + const headers = this.responseHeaders === "raw" ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders); + body = this.runInAsyncScope(handler, null, { + statusCode, + headers, + opaque, + body: this.res, + context + }); + } catch (err) { + this.res.on("error", util.nop); + throw err; + } + if (!body || typeof body.on !== "function") { + throw new InvalidReturnValueError("expected Readable"); + } + body.on("data", (chunk) => { + const { ret, body: body2 } = this; + if (!ret.push(chunk) && body2.pause) { + body2.pause(); + } + }).on("error", (err) => { + const { ret } = this; + util.destroy(ret, err); + }).on("end", () => { + const { ret } = this; + ret.push(null); + }).on("close", () => { + const { ret } = this; + if (!ret._readableState.ended) { + util.destroy(ret, new RequestAbortedError()); + } + }); + this.body = body; + } + onData(chunk) { + const { res } = this; + return res.push(chunk); + } + onComplete(trailers) { + const { res } = this; + res.push(null); + } + onError(err) { + const { ret } = this; + this.handler = null; + util.destroy(ret, err); + } + }; + __name(_PipelineHandler, "PipelineHandler"); + var PipelineHandler = _PipelineHandler; + function pipeline(opts, handler) { + try { + const pipelineHandler = new PipelineHandler(opts, handler); + this.dispatch({ ...opts, body: pipelineHandler.req }, pipelineHandler); + return pipelineHandler.ret; + } catch (err) { + return new PassThrough().destroy(err); + } + } + __name(pipeline, "pipeline"); + module2.exports = pipeline; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/api/api-upgrade.js +var require_api_upgrade = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/api/api-upgrade.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { InvalidArgumentError, SocketError } = require_errors(); + var { AsyncResource } = require("async_hooks"); + var util = require_util(); + var { addSignal, removeSignal } = require_abort_signal(); + var assert = require("assert"); + var _UpgradeHandler = class _UpgradeHandler extends AsyncResource { + constructor(opts, callback) { + if (!opts || typeof opts !== "object") { + throw new InvalidArgumentError("invalid opts"); + } + if (typeof callback !== "function") { + throw new InvalidArgumentError("invalid callback"); + } + const { signal, opaque, responseHeaders } = opts; + if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") { + throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget"); + } + super("UNDICI_UPGRADE"); + this.responseHeaders = responseHeaders || null; + this.opaque = opaque || null; + this.callback = callback; + this.abort = null; + this.context = null; + addSignal(this, signal); + } + onConnect(abort, context) { + if (this.reason) { + abort(this.reason); + return; + } + assert(this.callback); + this.abort = abort; + this.context = null; + } + onHeaders() { + throw new SocketError("bad upgrade", null); + } + onUpgrade(statusCode, rawHeaders, socket) { + assert(statusCode === 101); + const { callback, opaque, context } = this; + removeSignal(this); + this.callback = null; + const headers = this.responseHeaders === "raw" ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders); + this.runInAsyncScope(callback, null, null, { + headers, + socket, + opaque, + context + }); + } + onError(err) { + const { callback, opaque } = this; + removeSignal(this); + if (callback) { + this.callback = null; + queueMicrotask(() => { + this.runInAsyncScope(callback, null, err, { opaque }); + }); + } + } + }; + __name(_UpgradeHandler, "UpgradeHandler"); + var UpgradeHandler = _UpgradeHandler; + function upgrade(opts, callback) { + if (callback === void 0) { + return new Promise((resolve, reject) => { + upgrade.call(this, opts, (err, data) => { + return err ? reject(err) : resolve(data); + }); + }); + } + try { + const upgradeHandler = new UpgradeHandler(opts, callback); + this.dispatch({ + ...opts, + method: opts.method || "GET", + upgrade: opts.protocol || "Websocket" + }, upgradeHandler); + } catch (err) { + if (typeof callback !== "function") { + throw err; + } + const opaque = opts?.opaque; + queueMicrotask(() => callback(err, { opaque })); + } + } + __name(upgrade, "upgrade"); + module2.exports = upgrade; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/api/api-connect.js +var require_api_connect = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/api/api-connect.js"(exports2, module2) { + "use strict"; + init_define_process(); + var assert = require("assert"); + var { AsyncResource } = require("async_hooks"); + var { InvalidArgumentError, SocketError } = require_errors(); + var util = require_util(); + var { addSignal, removeSignal } = require_abort_signal(); + var _ConnectHandler = class _ConnectHandler extends AsyncResource { + constructor(opts, callback) { + if (!opts || typeof opts !== "object") { + throw new InvalidArgumentError("invalid opts"); + } + if (typeof callback !== "function") { + throw new InvalidArgumentError("invalid callback"); + } + const { signal, opaque, responseHeaders } = opts; + if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") { + throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget"); + } + super("UNDICI_CONNECT"); + this.opaque = opaque || null; + this.responseHeaders = responseHeaders || null; + this.callback = callback; + this.abort = null; + addSignal(this, signal); + } + onConnect(abort, context) { + if (this.reason) { + abort(this.reason); + return; + } + assert(this.callback); + this.abort = abort; + this.context = context; + } + onHeaders() { + throw new SocketError("bad connect", null); + } + onUpgrade(statusCode, rawHeaders, socket) { + const { callback, opaque, context } = this; + removeSignal(this); + this.callback = null; + let headers = rawHeaders; + if (headers != null) { + headers = this.responseHeaders === "raw" ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders); + } + this.runInAsyncScope(callback, null, null, { + statusCode, + headers, + socket, + opaque, + context + }); + } + onError(err) { + const { callback, opaque } = this; + removeSignal(this); + if (callback) { + this.callback = null; + queueMicrotask(() => { + this.runInAsyncScope(callback, null, err, { opaque }); + }); + } + } + }; + __name(_ConnectHandler, "ConnectHandler"); + var ConnectHandler = _ConnectHandler; + function connect(opts, callback) { + if (callback === void 0) { + return new Promise((resolve, reject) => { + connect.call(this, opts, (err, data) => { + return err ? reject(err) : resolve(data); + }); + }); + } + try { + const connectHandler = new ConnectHandler(opts, callback); + this.dispatch({ ...opts, method: "CONNECT" }, connectHandler); + } catch (err) { + if (typeof callback !== "function") { + throw err; + } + const opaque = opts?.opaque; + queueMicrotask(() => callback(err, { opaque })); + } + } + __name(connect, "connect"); + module2.exports = connect; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/api/index.js +var require_api = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/api/index.js"(exports2, module2) { + "use strict"; + init_define_process(); + module2.exports.request = require_api_request(); + module2.exports.stream = require_api_stream(); + module2.exports.pipeline = require_api_pipeline(); + module2.exports.upgrade = require_api_upgrade(); + module2.exports.connect = require_api_connect(); + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/mock/mock-errors.js +var require_mock_errors = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/mock/mock-errors.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { UndiciError } = require_errors(); + var _MockNotMatchedError = class _MockNotMatchedError extends UndiciError { + constructor(message) { + super(message); + Error.captureStackTrace(this, _MockNotMatchedError); + this.name = "MockNotMatchedError"; + this.message = message || "The request does not match any registered mock dispatches"; + this.code = "UND_MOCK_ERR_MOCK_NOT_MATCHED"; + } + }; + __name(_MockNotMatchedError, "MockNotMatchedError"); + var MockNotMatchedError = _MockNotMatchedError; + module2.exports = { + MockNotMatchedError + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/mock/mock-symbols.js +var require_mock_symbols = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/mock/mock-symbols.js"(exports2, module2) { + "use strict"; + init_define_process(); + module2.exports = { + kAgent: Symbol("agent"), + kOptions: Symbol("options"), + kFactory: Symbol("factory"), + kDispatches: Symbol("dispatches"), + kDispatchKey: Symbol("dispatch key"), + kDefaultHeaders: Symbol("default headers"), + kDefaultTrailers: Symbol("default trailers"), + kContentLength: Symbol("content length"), + kMockAgent: Symbol("mock agent"), + kMockAgentSet: Symbol("mock agent set"), + kMockAgentGet: Symbol("mock agent get"), + kMockDispatch: Symbol("mock dispatch"), + kClose: Symbol("close"), + kOriginalClose: Symbol("original agent close"), + kOrigin: Symbol("origin"), + kIsMockActive: Symbol("is mock active"), + kNetConnect: Symbol("net connect"), + kGetNetConnect: Symbol("get net connect"), + kConnected: Symbol("connected") + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/mock/mock-utils.js +var require_mock_utils = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/mock/mock-utils.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { MockNotMatchedError } = require_mock_errors(); + var { + kDispatches, + kMockAgent, + kOriginalDispatch, + kOrigin, + kGetNetConnect + } = require_mock_symbols(); + var { buildURL } = require_util(); + var { STATUS_CODES } = require("http"); + var { + types: { + isPromise + } + } = require("util"); + function matchValue(match, value) { + if (typeof match === "string") { + return match === value; + } + if (match instanceof RegExp) { + return match.test(value); + } + if (typeof match === "function") { + return match(value) === true; + } + return false; + } + __name(matchValue, "matchValue"); + function lowerCaseEntries(headers) { + return Object.fromEntries( + Object.entries(headers).map(([headerName, headerValue]) => { + return [headerName.toLocaleLowerCase(), headerValue]; + }) + ); + } + __name(lowerCaseEntries, "lowerCaseEntries"); + function getHeaderByName(headers, key) { + if (Array.isArray(headers)) { + for (let i = 0; i < headers.length; i += 2) { + if (headers[i].toLocaleLowerCase() === key.toLocaleLowerCase()) { + return headers[i + 1]; + } + } + return void 0; + } else if (typeof headers.get === "function") { + return headers.get(key); + } else { + return lowerCaseEntries(headers)[key.toLocaleLowerCase()]; + } + } + __name(getHeaderByName, "getHeaderByName"); + function buildHeadersFromArray(headers) { + const clone = headers.slice(); + const entries = []; + for (let index = 0; index < clone.length; index += 2) { + entries.push([clone[index], clone[index + 1]]); + } + return Object.fromEntries(entries); + } + __name(buildHeadersFromArray, "buildHeadersFromArray"); + function matchHeaders(mockDispatch2, headers) { + if (typeof mockDispatch2.headers === "function") { + if (Array.isArray(headers)) { + headers = buildHeadersFromArray(headers); + } + return mockDispatch2.headers(headers ? lowerCaseEntries(headers) : {}); + } + if (typeof mockDispatch2.headers === "undefined") { + return true; + } + if (typeof headers !== "object" || typeof mockDispatch2.headers !== "object") { + return false; + } + for (const [matchHeaderName, matchHeaderValue] of Object.entries(mockDispatch2.headers)) { + const headerValue = getHeaderByName(headers, matchHeaderName); + if (!matchValue(matchHeaderValue, headerValue)) { + return false; + } + } + return true; + } + __name(matchHeaders, "matchHeaders"); + function safeUrl(path) { + if (typeof path !== "string") { + return path; + } + const pathSegments = path.split("?"); + if (pathSegments.length !== 2) { + return path; + } + const qp = new URLSearchParams(pathSegments.pop()); + qp.sort(); + return [...pathSegments, qp.toString()].join("?"); + } + __name(safeUrl, "safeUrl"); + function matchKey(mockDispatch2, { path, method, body, headers }) { + const pathMatch = matchValue(mockDispatch2.path, path); + const methodMatch = matchValue(mockDispatch2.method, method); + const bodyMatch = typeof mockDispatch2.body !== "undefined" ? matchValue(mockDispatch2.body, body) : true; + const headersMatch = matchHeaders(mockDispatch2, headers); + return pathMatch && methodMatch && bodyMatch && headersMatch; + } + __name(matchKey, "matchKey"); + function getResponseData(data) { + if (Buffer.isBuffer(data)) { + return data; + } else if (data instanceof Uint8Array) { + return data; + } else if (data instanceof ArrayBuffer) { + return data; + } else if (typeof data === "object") { + return JSON.stringify(data); + } else { + return data.toString(); + } + } + __name(getResponseData, "getResponseData"); + function getMockDispatch(mockDispatches, key) { + const basePath = key.query ? buildURL(key.path, key.query) : key.path; + const resolvedPath = typeof basePath === "string" ? safeUrl(basePath) : basePath; + let matchedMockDispatches = mockDispatches.filter(({ consumed }) => !consumed).filter(({ path }) => matchValue(safeUrl(path), resolvedPath)); + if (matchedMockDispatches.length === 0) { + throw new MockNotMatchedError(`Mock dispatch not matched for path '${resolvedPath}'`); + } + matchedMockDispatches = matchedMockDispatches.filter(({ method }) => matchValue(method, key.method)); + if (matchedMockDispatches.length === 0) { + throw new MockNotMatchedError(`Mock dispatch not matched for method '${key.method}' on path '${resolvedPath}'`); + } + matchedMockDispatches = matchedMockDispatches.filter(({ body }) => typeof body !== "undefined" ? matchValue(body, key.body) : true); + if (matchedMockDispatches.length === 0) { + throw new MockNotMatchedError(`Mock dispatch not matched for body '${key.body}' on path '${resolvedPath}'`); + } + matchedMockDispatches = matchedMockDispatches.filter((mockDispatch2) => matchHeaders(mockDispatch2, key.headers)); + if (matchedMockDispatches.length === 0) { + const headers = typeof key.headers === "object" ? JSON.stringify(key.headers) : key.headers; + throw new MockNotMatchedError(`Mock dispatch not matched for headers '${headers}' on path '${resolvedPath}'`); + } + return matchedMockDispatches[0]; + } + __name(getMockDispatch, "getMockDispatch"); + function addMockDispatch(mockDispatches, key, data) { + const baseData = { timesInvoked: 0, times: 1, persist: false, consumed: false }; + const replyData = typeof data === "function" ? { callback: data } : { ...data }; + const newMockDispatch = { ...baseData, ...key, pending: true, data: { error: null, ...replyData } }; + mockDispatches.push(newMockDispatch); + return newMockDispatch; + } + __name(addMockDispatch, "addMockDispatch"); + function deleteMockDispatch(mockDispatches, key) { + const index = mockDispatches.findIndex((dispatch) => { + if (!dispatch.consumed) { + return false; + } + return matchKey(dispatch, key); + }); + if (index !== -1) { + mockDispatches.splice(index, 1); + } + } + __name(deleteMockDispatch, "deleteMockDispatch"); + function buildKey(opts) { + const { path, method, body, headers, query } = opts; + return { + path, + method, + body, + headers, + query + }; + } + __name(buildKey, "buildKey"); + function generateKeyValues(data) { + const keys = Object.keys(data); + const result = []; + for (let i = 0; i < keys.length; ++i) { + const key = keys[i]; + const value = data[key]; + const name = Buffer.from(`${key}`); + if (Array.isArray(value)) { + for (let j = 0; j < value.length; ++j) { + result.push(name, Buffer.from(`${value[j]}`)); + } + } else { + result.push(name, Buffer.from(`${value}`)); + } + } + return result; + } + __name(generateKeyValues, "generateKeyValues"); + function getStatusText(statusCode) { + return STATUS_CODES[statusCode] || "unknown"; + } + __name(getStatusText, "getStatusText"); + async function getResponse(body) { + const buffers = []; + for await (const data of body) { + buffers.push(data); + } + return Buffer.concat(buffers).toString("utf8"); + } + __name(getResponse, "getResponse"); + function mockDispatch(opts, handler) { + const key = buildKey(opts); + const mockDispatch2 = getMockDispatch(this[kDispatches], key); + mockDispatch2.timesInvoked++; + if (mockDispatch2.data.callback) { + mockDispatch2.data = { ...mockDispatch2.data, ...mockDispatch2.data.callback(opts) }; + } + const { data: { statusCode, data, headers, trailers, error }, delay, persist } = mockDispatch2; + const { timesInvoked, times } = mockDispatch2; + mockDispatch2.consumed = !persist && timesInvoked >= times; + mockDispatch2.pending = timesInvoked < times; + if (error !== null) { + deleteMockDispatch(this[kDispatches], key); + handler.onError(error); + return true; + } + if (typeof delay === "number" && delay > 0) { + setTimeout(() => { + handleReply(this[kDispatches]); + }, delay); + } else { + handleReply(this[kDispatches]); + } + function handleReply(mockDispatches, _data = data) { + const optsHeaders = Array.isArray(opts.headers) ? buildHeadersFromArray(opts.headers) : opts.headers; + const body = typeof _data === "function" ? _data({ ...opts, headers: optsHeaders }) : _data; + if (isPromise(body)) { + body.then((newData) => handleReply(mockDispatches, newData)); + return; + } + const responseData = getResponseData(body); + const responseHeaders = generateKeyValues(headers); + const responseTrailers = generateKeyValues(trailers); + handler.onConnect?.((err) => handler.onError(err), null); + handler.onHeaders?.(statusCode, responseHeaders, resume, getStatusText(statusCode)); + handler.onData?.(Buffer.from(responseData)); + handler.onComplete?.(responseTrailers); + deleteMockDispatch(mockDispatches, key); + } + __name(handleReply, "handleReply"); + function resume() { + } + __name(resume, "resume"); + return true; + } + __name(mockDispatch, "mockDispatch"); + function buildMockDispatch() { + const agent = this[kMockAgent]; + const origin = this[kOrigin]; + const originalDispatch = this[kOriginalDispatch]; + return /* @__PURE__ */ __name(function dispatch(opts, handler) { + if (agent.isMockActive) { + try { + mockDispatch.call(this, opts, handler); + } catch (error) { + if (error instanceof MockNotMatchedError) { + const netConnect = agent[kGetNetConnect](); + if (netConnect === false) { + throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect disabled)`); + } + if (checkNetConnect(netConnect, origin)) { + originalDispatch.call(this, opts, handler); + } else { + throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect is not enabled for this origin)`); + } + } else { + throw error; + } + } + } else { + originalDispatch.call(this, opts, handler); + } + }, "dispatch"); + } + __name(buildMockDispatch, "buildMockDispatch"); + function checkNetConnect(netConnect, origin) { + const url = new URL(origin); + if (netConnect === true) { + return true; + } else if (Array.isArray(netConnect) && netConnect.some((matcher) => matchValue(matcher, url.host))) { + return true; + } + return false; + } + __name(checkNetConnect, "checkNetConnect"); + function buildMockOptions(opts) { + if (opts) { + const { agent, ...mockOptions } = opts; + return mockOptions; + } + } + __name(buildMockOptions, "buildMockOptions"); + module2.exports = { + getResponseData, + getMockDispatch, + addMockDispatch, + deleteMockDispatch, + buildKey, + generateKeyValues, + matchValue, + getResponse, + getStatusText, + mockDispatch, + buildMockDispatch, + checkNetConnect, + buildMockOptions, + getHeaderByName, + buildHeadersFromArray + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/mock/mock-interceptor.js +var require_mock_interceptor = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/mock/mock-interceptor.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { getResponseData, buildKey, addMockDispatch } = require_mock_utils(); + var { + kDispatches, + kDispatchKey, + kDefaultHeaders, + kDefaultTrailers, + kContentLength, + kMockDispatch + } = require_mock_symbols(); + var { InvalidArgumentError } = require_errors(); + var { buildURL } = require_util(); + var _MockScope = class _MockScope { + constructor(mockDispatch) { + this[kMockDispatch] = mockDispatch; + } + /** + * Delay a reply by a set amount in ms. + */ + delay(waitInMs) { + if (typeof waitInMs !== "number" || !Number.isInteger(waitInMs) || waitInMs <= 0) { + throw new InvalidArgumentError("waitInMs must be a valid integer > 0"); + } + this[kMockDispatch].delay = waitInMs; + return this; + } + /** + * For a defined reply, never mark as consumed. + */ + persist() { + this[kMockDispatch].persist = true; + return this; + } + /** + * Allow one to define a reply for a set amount of matching requests. + */ + times(repeatTimes) { + if (typeof repeatTimes !== "number" || !Number.isInteger(repeatTimes) || repeatTimes <= 0) { + throw new InvalidArgumentError("repeatTimes must be a valid integer > 0"); + } + this[kMockDispatch].times = repeatTimes; + return this; + } + }; + __name(_MockScope, "MockScope"); + var MockScope = _MockScope; + var _MockInterceptor = class _MockInterceptor { + constructor(opts, mockDispatches) { + if (typeof opts !== "object") { + throw new InvalidArgumentError("opts must be an object"); + } + if (typeof opts.path === "undefined") { + throw new InvalidArgumentError("opts.path must be defined"); + } + if (typeof opts.method === "undefined") { + opts.method = "GET"; + } + if (typeof opts.path === "string") { + if (opts.query) { + opts.path = buildURL(opts.path, opts.query); + } else { + const parsedURL = new URL(opts.path, "data://"); + opts.path = parsedURL.pathname + parsedURL.search; + } + } + if (typeof opts.method === "string") { + opts.method = opts.method.toUpperCase(); + } + this[kDispatchKey] = buildKey(opts); + this[kDispatches] = mockDispatches; + this[kDefaultHeaders] = {}; + this[kDefaultTrailers] = {}; + this[kContentLength] = false; + } + createMockScopeDispatchData({ statusCode, data, responseOptions }) { + const responseData = getResponseData(data); + const contentLength = this[kContentLength] ? { "content-length": responseData.length } : {}; + const headers = { ...this[kDefaultHeaders], ...contentLength, ...responseOptions.headers }; + const trailers = { ...this[kDefaultTrailers], ...responseOptions.trailers }; + return { statusCode, data, headers, trailers }; + } + validateReplyParameters(replyParameters) { + if (typeof replyParameters.statusCode === "undefined") { + throw new InvalidArgumentError("statusCode must be defined"); + } + if (typeof replyParameters.responseOptions !== "object" || replyParameters.responseOptions === null) { + throw new InvalidArgumentError("responseOptions must be an object"); + } + } + /** + * Mock an undici request with a defined reply. + */ + reply(replyOptionsCallbackOrStatusCode) { + if (typeof replyOptionsCallbackOrStatusCode === "function") { + const wrappedDefaultsCallback = /* @__PURE__ */ __name((opts) => { + const resolvedData = replyOptionsCallbackOrStatusCode(opts); + if (typeof resolvedData !== "object" || resolvedData === null) { + throw new InvalidArgumentError("reply options callback must return an object"); + } + const replyParameters2 = { data: "", responseOptions: {}, ...resolvedData }; + this.validateReplyParameters(replyParameters2); + return { + ...this.createMockScopeDispatchData(replyParameters2) + }; + }, "wrappedDefaultsCallback"); + const newMockDispatch2 = addMockDispatch(this[kDispatches], this[kDispatchKey], wrappedDefaultsCallback); + return new MockScope(newMockDispatch2); + } + const replyParameters = { + statusCode: replyOptionsCallbackOrStatusCode, + data: arguments[1] === void 0 ? "" : arguments[1], + responseOptions: arguments[2] === void 0 ? {} : arguments[2] + }; + this.validateReplyParameters(replyParameters); + const dispatchData = this.createMockScopeDispatchData(replyParameters); + const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], dispatchData); + return new MockScope(newMockDispatch); + } + /** + * Mock an undici request with a defined error. + */ + replyWithError(error) { + if (typeof error === "undefined") { + throw new InvalidArgumentError("error must be defined"); + } + const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], { error }); + return new MockScope(newMockDispatch); + } + /** + * Set default reply headers on the interceptor for subsequent replies + */ + defaultReplyHeaders(headers) { + if (typeof headers === "undefined") { + throw new InvalidArgumentError("headers must be defined"); + } + this[kDefaultHeaders] = headers; + return this; + } + /** + * Set default reply trailers on the interceptor for subsequent replies + */ + defaultReplyTrailers(trailers) { + if (typeof trailers === "undefined") { + throw new InvalidArgumentError("trailers must be defined"); + } + this[kDefaultTrailers] = trailers; + return this; + } + /** + * Set reply content length header for replies on the interceptor + */ + replyContentLength() { + this[kContentLength] = true; + return this; + } + }; + __name(_MockInterceptor, "MockInterceptor"); + var MockInterceptor = _MockInterceptor; + module2.exports.MockInterceptor = MockInterceptor; + module2.exports.MockScope = MockScope; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/mock/mock-client.js +var require_mock_client = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/mock/mock-client.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { promisify } = require("util"); + var Client = require_client(); + var { buildMockDispatch } = require_mock_utils(); + var { + kDispatches, + kMockAgent, + kClose, + kOriginalClose, + kOrigin, + kOriginalDispatch, + kConnected + } = require_mock_symbols(); + var { MockInterceptor } = require_mock_interceptor(); + var Symbols = require_symbols(); + var { InvalidArgumentError } = require_errors(); + var _MockClient = class _MockClient extends Client { + constructor(origin, opts) { + super(origin, opts); + if (!opts || !opts.agent || typeof opts.agent.dispatch !== "function") { + throw new InvalidArgumentError("Argument opts.agent must implement Agent"); + } + this[kMockAgent] = opts.agent; + this[kOrigin] = origin; + this[kDispatches] = []; + this[kConnected] = 1; + this[kOriginalDispatch] = this.dispatch; + this[kOriginalClose] = this.close.bind(this); + this.dispatch = buildMockDispatch.call(this); + this.close = this[kClose]; + } + get [Symbols.kConnected]() { + return this[kConnected]; + } + /** + * Sets up the base interceptor for mocking replies from undici. + */ + intercept(opts) { + return new MockInterceptor(opts, this[kDispatches]); + } + async [kClose]() { + await promisify(this[kOriginalClose])(); + this[kConnected] = 0; + this[kMockAgent][Symbols.kClients].delete(this[kOrigin]); + } + }; + __name(_MockClient, "MockClient"); + var MockClient = _MockClient; + module2.exports = MockClient; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/mock/mock-pool.js +var require_mock_pool = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/mock/mock-pool.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { promisify } = require("util"); + var Pool = require_pool(); + var { buildMockDispatch } = require_mock_utils(); + var { + kDispatches, + kMockAgent, + kClose, + kOriginalClose, + kOrigin, + kOriginalDispatch, + kConnected + } = require_mock_symbols(); + var { MockInterceptor } = require_mock_interceptor(); + var Symbols = require_symbols(); + var { InvalidArgumentError } = require_errors(); + var _MockPool = class _MockPool extends Pool { + constructor(origin, opts) { + super(origin, opts); + if (!opts || !opts.agent || typeof opts.agent.dispatch !== "function") { + throw new InvalidArgumentError("Argument opts.agent must implement Agent"); + } + this[kMockAgent] = opts.agent; + this[kOrigin] = origin; + this[kDispatches] = []; + this[kConnected] = 1; + this[kOriginalDispatch] = this.dispatch; + this[kOriginalClose] = this.close.bind(this); + this.dispatch = buildMockDispatch.call(this); + this.close = this[kClose]; + } + get [Symbols.kConnected]() { + return this[kConnected]; + } + /** + * Sets up the base interceptor for mocking replies from undici. + */ + intercept(opts) { + return new MockInterceptor(opts, this[kDispatches]); + } + async [kClose]() { + await promisify(this[kOriginalClose])(); + this[kConnected] = 0; + this[kMockAgent][Symbols.kClients].delete(this[kOrigin]); + } + }; + __name(_MockPool, "MockPool"); + var MockPool = _MockPool; + module2.exports = MockPool; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/mock/pluralizer.js +var require_pluralizer = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/mock/pluralizer.js"(exports2, module2) { + "use strict"; + init_define_process(); + var singulars = { + pronoun: "it", + is: "is", + was: "was", + this: "this" + }; + var plurals = { + pronoun: "they", + is: "are", + was: "were", + this: "these" + }; + var _a; + module2.exports = (_a = class { + constructor(singular, plural) { + this.singular = singular; + this.plural = plural; + } + pluralize(count) { + const one = count === 1; + const keys = one ? singulars : plurals; + const noun = one ? this.singular : this.plural; + return { ...keys, count, noun }; + } + }, __name(_a, "Pluralizer"), _a); + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/mock/pending-interceptors-formatter.js +var require_pending_interceptors_formatter = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/mock/pending-interceptors-formatter.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { Transform } = require("stream"); + var { Console } = require("console"); + var PERSISTENT = define_process_default.versions.icu ? "\u2705" : "Y "; + var NOT_PERSISTENT = define_process_default.versions.icu ? "\u274C" : "N "; + var _a; + module2.exports = (_a = class { + constructor({ disableColors } = {}) { + this.transform = new Transform({ + transform(chunk, _enc, cb) { + cb(null, chunk); + } + }); + this.logger = new Console({ + stdout: this.transform, + inspectOptions: { + colors: !disableColors && !define_process_default.env.CI + } + }); + } + format(pendingInterceptors) { + const withPrettyHeaders = pendingInterceptors.map( + ({ method, path, data: { statusCode }, persist, times, timesInvoked, origin }) => ({ + Method: method, + Origin: origin, + Path: path, + "Status code": statusCode, + Persistent: persist ? PERSISTENT : NOT_PERSISTENT, + Invocations: timesInvoked, + Remaining: persist ? Infinity : times - timesInvoked + }) + ); + this.logger.table(withPrettyHeaders); + return this.transform.read().toString(); + } + }, __name(_a, "PendingInterceptorsFormatter"), _a); + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/mock/mock-agent.js +var require_mock_agent = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/mock/mock-agent.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { kClients } = require_symbols(); + var Agent = require_agent(); + var { + kAgent, + kMockAgentSet, + kMockAgentGet, + kDispatches, + kIsMockActive, + kNetConnect, + kGetNetConnect, + kOptions, + kFactory + } = require_mock_symbols(); + var MockClient = require_mock_client(); + var MockPool = require_mock_pool(); + var { matchValue, buildMockOptions } = require_mock_utils(); + var { InvalidArgumentError, UndiciError } = require_errors(); + var Dispatcher = require_dispatcher(); + var Pluralizer = require_pluralizer(); + var PendingInterceptorsFormatter = require_pending_interceptors_formatter(); + var _MockAgent = class _MockAgent extends Dispatcher { + constructor(opts) { + super(opts); + this[kNetConnect] = true; + this[kIsMockActive] = true; + if (opts?.agent && typeof opts.agent.dispatch !== "function") { + throw new InvalidArgumentError("Argument opts.agent must implement Agent"); + } + const agent = opts?.agent ? opts.agent : new Agent(opts); + this[kAgent] = agent; + this[kClients] = agent[kClients]; + this[kOptions] = buildMockOptions(opts); + } + get(origin) { + let dispatcher = this[kMockAgentGet](origin); + if (!dispatcher) { + dispatcher = this[kFactory](origin); + this[kMockAgentSet](origin, dispatcher); + } + return dispatcher; + } + dispatch(opts, handler) { + this.get(opts.origin); + return this[kAgent].dispatch(opts, handler); + } + async close() { + await this[kAgent].close(); + this[kClients].clear(); + } + deactivate() { + this[kIsMockActive] = false; + } + activate() { + this[kIsMockActive] = true; + } + enableNetConnect(matcher) { + if (typeof matcher === "string" || typeof matcher === "function" || matcher instanceof RegExp) { + if (Array.isArray(this[kNetConnect])) { + this[kNetConnect].push(matcher); + } else { + this[kNetConnect] = [matcher]; + } + } else if (typeof matcher === "undefined") { + this[kNetConnect] = true; + } else { + throw new InvalidArgumentError("Unsupported matcher. Must be one of String|Function|RegExp."); + } + } + disableNetConnect() { + this[kNetConnect] = false; + } + // This is required to bypass issues caused by using global symbols - see: + // https://github.com/nodejs/undici/issues/1447 + get isMockActive() { + return this[kIsMockActive]; + } + [kMockAgentSet](origin, dispatcher) { + this[kClients].set(origin, dispatcher); + } + [kFactory](origin) { + const mockOptions = Object.assign({ agent: this }, this[kOptions]); + return this[kOptions] && this[kOptions].connections === 1 ? new MockClient(origin, mockOptions) : new MockPool(origin, mockOptions); + } + [kMockAgentGet](origin) { + const client = this[kClients].get(origin); + if (client) { + return client; + } + if (typeof origin !== "string") { + const dispatcher = this[kFactory]("http://localhost:9999"); + this[kMockAgentSet](origin, dispatcher); + return dispatcher; + } + for (const [keyMatcher, nonExplicitDispatcher] of Array.from(this[kClients])) { + if (nonExplicitDispatcher && typeof keyMatcher !== "string" && matchValue(keyMatcher, origin)) { + const dispatcher = this[kFactory](origin); + this[kMockAgentSet](origin, dispatcher); + dispatcher[kDispatches] = nonExplicitDispatcher[kDispatches]; + return dispatcher; + } + } + } + [kGetNetConnect]() { + return this[kNetConnect]; + } + pendingInterceptors() { + const mockAgentClients = this[kClients]; + return Array.from(mockAgentClients.entries()).flatMap(([origin, scope]) => scope[kDispatches].map((dispatch) => ({ ...dispatch, origin }))).filter(({ pending }) => pending); + } + assertNoPendingInterceptors({ pendingInterceptorsFormatter = new PendingInterceptorsFormatter() } = {}) { + const pending = this.pendingInterceptors(); + if (pending.length === 0) { + return; + } + const pluralizer = new Pluralizer("interceptor", "interceptors").pluralize(pending.length); + throw new UndiciError(` +${pluralizer.count} ${pluralizer.noun} ${pluralizer.is} pending: + +${pendingInterceptorsFormatter.format(pending)} +`.trim()); + } + }; + __name(_MockAgent, "MockAgent"); + var MockAgent = _MockAgent; + module2.exports = MockAgent; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/global.js +var require_global2 = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/global.js"(exports2, module2) { + "use strict"; + init_define_process(); + var globalDispatcher = Symbol.for("undici.globalDispatcher.1"); + var { InvalidArgumentError } = require_errors(); + var Agent = require_agent(); + if (getGlobalDispatcher() === void 0) { + setGlobalDispatcher(new Agent()); + } + function setGlobalDispatcher(agent) { + if (!agent || typeof agent.dispatch !== "function") { + throw new InvalidArgumentError("Argument agent must implement Agent"); + } + Object.defineProperty(globalThis, globalDispatcher, { + value: agent, + writable: true, + enumerable: false, + configurable: false + }); + } + __name(setGlobalDispatcher, "setGlobalDispatcher"); + function getGlobalDispatcher() { + return globalThis[globalDispatcher]; + } + __name(getGlobalDispatcher, "getGlobalDispatcher"); + module2.exports = { + setGlobalDispatcher, + getGlobalDispatcher + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/handler/decorator-handler.js +var require_decorator_handler = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/handler/decorator-handler.js"(exports2, module2) { + "use strict"; + init_define_process(); + var _handler, _a; + module2.exports = (_a = class { + constructor(handler) { + __privateAdd(this, _handler, void 0); + if (typeof handler !== "object" || handler === null) { + throw new TypeError("handler must be an object"); + } + __privateSet(this, _handler, handler); + } + onConnect(...args) { + return __privateGet(this, _handler).onConnect?.(...args); + } + onError(...args) { + return __privateGet(this, _handler).onError?.(...args); + } + onUpgrade(...args) { + return __privateGet(this, _handler).onUpgrade?.(...args); + } + onResponseStarted(...args) { + return __privateGet(this, _handler).onResponseStarted?.(...args); + } + onHeaders(...args) { + return __privateGet(this, _handler).onHeaders?.(...args); + } + onData(...args) { + return __privateGet(this, _handler).onData?.(...args); + } + onComplete(...args) { + return __privateGet(this, _handler).onComplete?.(...args); + } + onBodySent(...args) { + return __privateGet(this, _handler).onBodySent?.(...args); + } + }, _handler = new WeakMap(), __name(_a, "DecoratorHandler"), _a); + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/interceptor/redirect.js +var require_redirect = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/interceptor/redirect.js"(exports2, module2) { + "use strict"; + init_define_process(); + var RedirectHandler = require_redirect_handler(); + module2.exports = (opts) => { + const globalMaxRedirections = opts?.maxRedirections; + return (dispatch) => { + return /* @__PURE__ */ __name(function redirectInterceptor(opts2, handler) { + const { maxRedirections = globalMaxRedirections, ...baseOpts } = opts2; + if (!maxRedirections) { + return dispatch(opts2, handler); + } + const redirectHandler = new RedirectHandler( + dispatch, + maxRedirections, + opts2, + handler + ); + return dispatch(baseOpts, redirectHandler); + }, "redirectInterceptor"); + }; + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/interceptor/retry.js +var require_retry = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/interceptor/retry.js"(exports2, module2) { + "use strict"; + init_define_process(); + var RetryHandler = require_retry_handler(); + module2.exports = (globalOpts) => { + return (dispatch) => { + return /* @__PURE__ */ __name(function retryInterceptor(opts, handler) { + return dispatch( + opts, + new RetryHandler( + { ...opts, retryOptions: { ...globalOpts, ...opts.retryOptions } }, + { + handler, + dispatch + } + ) + ); + }, "retryInterceptor"); + }; + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/interceptor/dump.js +var require_dump = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/interceptor/dump.js"(exports2, module2) { + "use strict"; + init_define_process(); + var util = require_util(); + var { InvalidArgumentError, RequestAbortedError } = require_errors(); + var DecoratorHandler = require_decorator_handler(); + var _maxSize, _abort, _dumped, _aborted, _size, _reason, _handler, _customAbort, customAbort_fn; + var _DumpHandler = class _DumpHandler extends DecoratorHandler { + constructor({ maxSize }, handler) { + super(handler); + __privateAdd(this, _customAbort); + __privateAdd(this, _maxSize, 1024 * 1024); + __privateAdd(this, _abort, null); + __privateAdd(this, _dumped, false); + __privateAdd(this, _aborted, false); + __privateAdd(this, _size, 0); + __privateAdd(this, _reason, null); + __privateAdd(this, _handler, null); + if (maxSize != null && (!Number.isFinite(maxSize) || maxSize < 1)) { + throw new InvalidArgumentError("maxSize must be a number greater than 0"); + } + __privateSet(this, _maxSize, maxSize ?? __privateGet(this, _maxSize)); + __privateSet(this, _handler, handler); + } + onConnect(abort) { + __privateSet(this, _abort, abort); + __privateGet(this, _handler).onConnect(__privateMethod(this, _customAbort, customAbort_fn).bind(this)); + } + // TODO: will require adjustment after new hooks are out + onHeaders(statusCode, rawHeaders, resume, statusMessage) { + const headers = util.parseHeaders(rawHeaders); + const contentLength = headers["content-length"]; + if (contentLength != null && contentLength > __privateGet(this, _maxSize)) { + throw new RequestAbortedError( + `Response size (${contentLength}) larger than maxSize (${__privateGet(this, _maxSize)})` + ); + } + if (__privateGet(this, _aborted)) { + return true; + } + return __privateGet(this, _handler).onHeaders( + statusCode, + rawHeaders, + resume, + statusMessage + ); + } + onError(err) { + if (__privateGet(this, _dumped)) { + return; + } + err = __privateGet(this, _reason) ?? err; + __privateGet(this, _handler).onError(err); + } + onData(chunk) { + __privateSet(this, _size, __privateGet(this, _size) + chunk.length); + if (__privateGet(this, _size) >= __privateGet(this, _maxSize)) { + __privateSet(this, _dumped, true); + if (__privateGet(this, _aborted)) { + __privateGet(this, _handler).onError(__privateGet(this, _reason)); + } else { + __privateGet(this, _handler).onComplete([]); + } + } + return true; + } + onComplete(trailers) { + if (__privateGet(this, _dumped)) { + return; + } + if (__privateGet(this, _aborted)) { + __privateGet(this, _handler).onError(this.reason); + return; + } + __privateGet(this, _handler).onComplete(trailers); + } + }; + _maxSize = new WeakMap(); + _abort = new WeakMap(); + _dumped = new WeakMap(); + _aborted = new WeakMap(); + _size = new WeakMap(); + _reason = new WeakMap(); + _handler = new WeakMap(); + _customAbort = new WeakSet(); + customAbort_fn = /* @__PURE__ */ __name(function(reason) { + __privateSet(this, _aborted, true); + __privateSet(this, _reason, reason); + }, "#customAbort"); + __name(_DumpHandler, "DumpHandler"); + var DumpHandler = _DumpHandler; + function createDumpInterceptor({ maxSize: defaultMaxSize } = { + maxSize: 1024 * 1024 + }) { + return (dispatch) => { + return /* @__PURE__ */ __name(function Intercept(opts, handler) { + const { dumpMaxSize = defaultMaxSize } = opts; + const dumpHandler = new DumpHandler( + { maxSize: dumpMaxSize }, + handler + ); + return dispatch(opts, dumpHandler); + }, "Intercept"); + }; + } + __name(createDumpInterceptor, "createDumpInterceptor"); + module2.exports = createDumpInterceptor; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/headers.js +var require_headers = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/headers.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { kConstruct } = require_symbols(); + var { kEnumerableProperty } = require_util(); + var { + iteratorMixin, + isValidHeaderName, + isValidHeaderValue + } = require_util2(); + var { webidl } = require_webidl(); + var assert = require("assert"); + var util = require("util"); + var kHeadersMap = Symbol("headers map"); + var kHeadersSortedMap = Symbol("headers map sorted"); + function isHTTPWhiteSpaceCharCode(code) { + return code === 10 || code === 13 || code === 9 || code === 32; + } + __name(isHTTPWhiteSpaceCharCode, "isHTTPWhiteSpaceCharCode"); + function headerValueNormalize(potentialValue) { + let i = 0; + let j = potentialValue.length; + while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(j - 1))) + --j; + while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(i))) + ++i; + return i === 0 && j === potentialValue.length ? potentialValue : potentialValue.substring(i, j); + } + __name(headerValueNormalize, "headerValueNormalize"); + function fill(headers, object) { + if (Array.isArray(object)) { + for (let i = 0; i < object.length; ++i) { + const header = object[i]; + if (header.length !== 2) { + throw webidl.errors.exception({ + header: "Headers constructor", + message: `expected name/value pair to be length 2, found ${header.length}.` + }); + } + appendHeader(headers, header[0], header[1]); + } + } else if (typeof object === "object" && object !== null) { + const keys = Object.keys(object); + for (let i = 0; i < keys.length; ++i) { + appendHeader(headers, keys[i], object[keys[i]]); + } + } else { + throw webidl.errors.conversionFailed({ + prefix: "Headers constructor", + argument: "Argument 1", + types: ["sequence>", "record"] + }); + } + } + __name(fill, "fill"); + function appendHeader(headers, name, value) { + value = headerValueNormalize(value); + if (!isValidHeaderName(name)) { + throw webidl.errors.invalidArgument({ + prefix: "Headers.append", + value: name, + type: "header name" + }); + } else if (!isValidHeaderValue(value)) { + throw webidl.errors.invalidArgument({ + prefix: "Headers.append", + value, + type: "header value" + }); + } + if (getHeadersGuard(headers) === "immutable") { + throw new TypeError("immutable"); + } + return getHeadersList(headers).append(name, value, false); + } + __name(appendHeader, "appendHeader"); + function compareHeaderName(a, b) { + return a[0] < b[0] ? -1 : 1; + } + __name(compareHeaderName, "compareHeaderName"); + var _HeadersList = class _HeadersList { + /** @type {[string, string][]|null} */ + cookies = null; + constructor(init) { + if (init instanceof _HeadersList) { + this[kHeadersMap] = new Map(init[kHeadersMap]); + this[kHeadersSortedMap] = init[kHeadersSortedMap]; + this.cookies = init.cookies === null ? null : [...init.cookies]; + } else { + this[kHeadersMap] = new Map(init); + this[kHeadersSortedMap] = null; + } + } + /** + * @see https://fetch.spec.whatwg.org/#header-list-contains + * @param {string} name + * @param {boolean} isLowerCase + */ + contains(name, isLowerCase) { + return this[kHeadersMap].has(isLowerCase ? name : name.toLowerCase()); + } + clear() { + this[kHeadersMap].clear(); + this[kHeadersSortedMap] = null; + this.cookies = null; + } + /** + * @see https://fetch.spec.whatwg.org/#concept-header-list-append + * @param {string} name + * @param {string} value + * @param {boolean} isLowerCase + */ + append(name, value, isLowerCase) { + this[kHeadersSortedMap] = null; + const lowercaseName = isLowerCase ? name : name.toLowerCase(); + const exists = this[kHeadersMap].get(lowercaseName); + if (exists) { + const delimiter = lowercaseName === "cookie" ? "; " : ", "; + this[kHeadersMap].set(lowercaseName, { + name: exists.name, + value: `${exists.value}${delimiter}${value}` + }); + } else { + this[kHeadersMap].set(lowercaseName, { name, value }); + } + if (lowercaseName === "set-cookie") { + (this.cookies ??= []).push(value); + } + } + /** + * @see https://fetch.spec.whatwg.org/#concept-header-list-set + * @param {string} name + * @param {string} value + * @param {boolean} isLowerCase + */ + set(name, value, isLowerCase) { + this[kHeadersSortedMap] = null; + const lowercaseName = isLowerCase ? name : name.toLowerCase(); + if (lowercaseName === "set-cookie") { + this.cookies = [value]; + } + this[kHeadersMap].set(lowercaseName, { name, value }); + } + /** + * @see https://fetch.spec.whatwg.org/#concept-header-list-delete + * @param {string} name + * @param {boolean} isLowerCase + */ + delete(name, isLowerCase) { + this[kHeadersSortedMap] = null; + if (!isLowerCase) + name = name.toLowerCase(); + if (name === "set-cookie") { + this.cookies = null; + } + this[kHeadersMap].delete(name); + } + /** + * @see https://fetch.spec.whatwg.org/#concept-header-list-get + * @param {string} name + * @param {boolean} isLowerCase + * @returns {string | null} + */ + get(name, isLowerCase) { + return this[kHeadersMap].get(isLowerCase ? name : name.toLowerCase())?.value ?? null; + } + *[Symbol.iterator]() { + for (const { 0: name, 1: { value } } of this[kHeadersMap]) { + yield [name, value]; + } + } + get entries() { + const headers = {}; + if (this[kHeadersMap].size !== 0) { + for (const { name, value } of this[kHeadersMap].values()) { + headers[name] = value; + } + } + return headers; + } + rawValues() { + return this[kHeadersMap].values(); + } + get entriesList() { + const headers = []; + if (this[kHeadersMap].size !== 0) { + for (const { 0: lowerName, 1: { name, value } } of this[kHeadersMap]) { + if (lowerName === "set-cookie") { + for (const cookie of this.cookies) { + headers.push([name, cookie]); + } + } else { + headers.push([name, value]); + } + } + } + return headers; + } + // https://fetch.spec.whatwg.org/#convert-header-names-to-a-sorted-lowercase-set + toSortedArray() { + const size = this[kHeadersMap].size; + const array = new Array(size); + if (size <= 32) { + if (size === 0) { + return array; + } + const iterator = this[kHeadersMap][Symbol.iterator](); + const firstValue = iterator.next().value; + array[0] = [firstValue[0], firstValue[1].value]; + assert(firstValue[1].value !== null); + for (let i = 1, j = 0, right = 0, left = 0, pivot = 0, x, value; i < size; ++i) { + value = iterator.next().value; + x = array[i] = [value[0], value[1].value]; + assert(x[1] !== null); + left = 0; + right = i; + while (left < right) { + pivot = left + (right - left >> 1); + if (array[pivot][0] <= x[0]) { + left = pivot + 1; + } else { + right = pivot; + } + } + if (i !== pivot) { + j = i; + while (j > left) { + array[j] = array[--j]; + } + array[left] = x; + } + } + if (!iterator.next().done) { + throw new TypeError("Unreachable"); + } + return array; + } else { + let i = 0; + for (const { 0: name, 1: { value } } of this[kHeadersMap]) { + array[i++] = [name, value]; + assert(value !== null); + } + return array.sort(compareHeaderName); + } + } + }; + __name(_HeadersList, "HeadersList"); + var HeadersList = _HeadersList; + var _guard, _headersList; + var _Headers = class _Headers { + constructor(init = void 0) { + __privateAdd(this, _guard, void 0); + __privateAdd(this, _headersList, void 0); + webidl.util.markAsUncloneable(this); + if (init === kConstruct) { + return; + } + __privateSet(this, _headersList, new HeadersList()); + __privateSet(this, _guard, "none"); + if (init !== void 0) { + init = webidl.converters.HeadersInit(init, "Headers contructor", "init"); + fill(this, init); + } + } + // https://fetch.spec.whatwg.org/#dom-headers-append + append(name, value) { + webidl.brandCheck(this, _Headers); + webidl.argumentLengthCheck(arguments, 2, "Headers.append"); + const prefix = "Headers.append"; + name = webidl.converters.ByteString(name, prefix, "name"); + value = webidl.converters.ByteString(value, prefix, "value"); + return appendHeader(this, name, value); + } + // https://fetch.spec.whatwg.org/#dom-headers-delete + delete(name) { + webidl.brandCheck(this, _Headers); + webidl.argumentLengthCheck(arguments, 1, "Headers.delete"); + const prefix = "Headers.delete"; + name = webidl.converters.ByteString(name, prefix, "name"); + if (!isValidHeaderName(name)) { + throw webidl.errors.invalidArgument({ + prefix: "Headers.delete", + value: name, + type: "header name" + }); + } + if (__privateGet(this, _guard) === "immutable") { + throw new TypeError("immutable"); + } + if (!__privateGet(this, _headersList).contains(name, false)) { + return; + } + __privateGet(this, _headersList).delete(name, false); + } + // https://fetch.spec.whatwg.org/#dom-headers-get + get(name) { + webidl.brandCheck(this, _Headers); + webidl.argumentLengthCheck(arguments, 1, "Headers.get"); + const prefix = "Headers.get"; + name = webidl.converters.ByteString(name, prefix, "name"); + if (!isValidHeaderName(name)) { + throw webidl.errors.invalidArgument({ + prefix, + value: name, + type: "header name" + }); + } + return __privateGet(this, _headersList).get(name, false); + } + // https://fetch.spec.whatwg.org/#dom-headers-has + has(name) { + webidl.brandCheck(this, _Headers); + webidl.argumentLengthCheck(arguments, 1, "Headers.has"); + const prefix = "Headers.has"; + name = webidl.converters.ByteString(name, prefix, "name"); + if (!isValidHeaderName(name)) { + throw webidl.errors.invalidArgument({ + prefix, + value: name, + type: "header name" + }); + } + return __privateGet(this, _headersList).contains(name, false); + } + // https://fetch.spec.whatwg.org/#dom-headers-set + set(name, value) { + webidl.brandCheck(this, _Headers); + webidl.argumentLengthCheck(arguments, 2, "Headers.set"); + const prefix = "Headers.set"; + name = webidl.converters.ByteString(name, prefix, "name"); + value = webidl.converters.ByteString(value, prefix, "value"); + value = headerValueNormalize(value); + if (!isValidHeaderName(name)) { + throw webidl.errors.invalidArgument({ + prefix, + value: name, + type: "header name" + }); + } else if (!isValidHeaderValue(value)) { + throw webidl.errors.invalidArgument({ + prefix, + value, + type: "header value" + }); + } + if (__privateGet(this, _guard) === "immutable") { + throw new TypeError("immutable"); + } + __privateGet(this, _headersList).set(name, value, false); + } + // https://fetch.spec.whatwg.org/#dom-headers-getsetcookie + getSetCookie() { + webidl.brandCheck(this, _Headers); + const list = __privateGet(this, _headersList).cookies; + if (list) { + return [...list]; + } + return []; + } + // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine + get [kHeadersSortedMap]() { + if (__privateGet(this, _headersList)[kHeadersSortedMap]) { + return __privateGet(this, _headersList)[kHeadersSortedMap]; + } + const headers = []; + const names = __privateGet(this, _headersList).toSortedArray(); + const cookies = __privateGet(this, _headersList).cookies; + if (cookies === null || cookies.length === 1) { + return __privateGet(this, _headersList)[kHeadersSortedMap] = names; + } + for (let i = 0; i < names.length; ++i) { + const { 0: name, 1: value } = names[i]; + if (name === "set-cookie") { + for (let j = 0; j < cookies.length; ++j) { + headers.push([name, cookies[j]]); + } + } else { + headers.push([name, value]); + } + } + return __privateGet(this, _headersList)[kHeadersSortedMap] = headers; + } + [util.inspect.custom](depth, options) { + options.depth ??= depth; + return `Headers ${util.formatWithOptions(options, __privateGet(this, _headersList).entries)}`; + } + static getHeadersGuard(o) { + return __privateGet(o, _guard); + } + static setHeadersGuard(o, guard) { + __privateSet(o, _guard, guard); + } + static getHeadersList(o) { + return __privateGet(o, _headersList); + } + static setHeadersList(o, list) { + __privateSet(o, _headersList, list); + } + }; + _guard = new WeakMap(); + _headersList = new WeakMap(); + __name(_Headers, "Headers"); + var Headers2 = _Headers; + var { getHeadersGuard, setHeadersGuard, getHeadersList, setHeadersList } = Headers2; + Reflect.deleteProperty(Headers2, "getHeadersGuard"); + Reflect.deleteProperty(Headers2, "setHeadersGuard"); + Reflect.deleteProperty(Headers2, "getHeadersList"); + Reflect.deleteProperty(Headers2, "setHeadersList"); + iteratorMixin("Headers", Headers2, kHeadersSortedMap, 0, 1); + Object.defineProperties(Headers2.prototype, { + append: kEnumerableProperty, + delete: kEnumerableProperty, + get: kEnumerableProperty, + has: kEnumerableProperty, + set: kEnumerableProperty, + getSetCookie: kEnumerableProperty, + [Symbol.toStringTag]: { + value: "Headers", + configurable: true + }, + [util.inspect.custom]: { + enumerable: false + } + }); + webidl.converters.HeadersInit = function(V, prefix, argument) { + if (webidl.util.Type(V) === "Object") { + const iterator = Reflect.get(V, Symbol.iterator); + if (!util.types.isProxy(V) && iterator === Headers2.prototype.entries) { + try { + return getHeadersList(V).entriesList; + } catch { + } + } + if (typeof iterator === "function") { + return webidl.converters["sequence>"](V, prefix, argument, iterator.bind(V)); + } + return webidl.converters["record"](V, prefix, argument); + } + throw webidl.errors.conversionFailed({ + prefix: "Headers constructor", + argument: "Argument 1", + types: ["sequence>", "record"] + }); + }; + module2.exports = { + fill, + // for test. + compareHeaderName, + Headers: Headers2, + HeadersList, + getHeadersGuard, + setHeadersGuard, + setHeadersList, + getHeadersList + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/response.js +var require_response = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/response.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { Headers: Headers2, HeadersList, fill, getHeadersGuard, setHeadersGuard, setHeadersList } = require_headers(); + var { extractBody, cloneBody, mixinBody, hasFinalizationRegistry, streamRegistry, bodyUnusable } = require_body(); + var util = require_util(); + var nodeUtil = require("util"); + var { kEnumerableProperty } = util; + var { + isValidReasonPhrase, + isCancelled, + isAborted, + isBlobLike, + serializeJavascriptValueToJSONString, + isErrorLike, + isomorphicEncode, + environmentSettingsObject: relevantRealm + } = require_util2(); + var { + redirectStatusSet, + nullBodyStatus + } = require_constants3(); + var { kState, kHeaders } = require_symbols2(); + var { webidl } = require_webidl(); + var { FormData: FormData2 } = require_formdata(); + var { URLSerializer } = require_data_url(); + var { kConstruct } = require_symbols(); + var assert = require("assert"); + var { types } = require("util"); + var textEncoder = new TextEncoder("utf-8"); + var _Response = class _Response { + // Creates network error Response. + static error() { + const responseObject = fromInnerResponse2(makeNetworkError2(), "immutable"); + return responseObject; + } + // https://fetch.spec.whatwg.org/#dom-response-json + static json(data, init = {}) { + webidl.argumentLengthCheck(arguments, 1, "Response.json"); + if (init !== null) { + init = webidl.converters.ResponseInit(init); + } + const bytes = textEncoder.encode( + serializeJavascriptValueToJSONString(data) + ); + const body = extractBody(bytes); + const responseObject = fromInnerResponse2(makeResponse({}), "response"); + initializeResponse(responseObject, init, { body: body[0], type: "application/json" }); + return responseObject; + } + // Creates a redirect Response that redirects to url with status status. + static redirect(url, status = 302) { + webidl.argumentLengthCheck(arguments, 1, "Response.redirect"); + url = webidl.converters.USVString(url); + status = webidl.converters["unsigned short"](status); + let parsedURL; + try { + parsedURL = new URL(url, relevantRealm.settingsObject.baseUrl); + } catch (err) { + throw new TypeError(`Failed to parse URL from ${url}`, { cause: err }); + } + if (!redirectStatusSet.has(status)) { + throw new RangeError(`Invalid status code ${status}`); + } + const responseObject = fromInnerResponse2(makeResponse({}), "immutable"); + responseObject[kState].status = status; + const value = isomorphicEncode(URLSerializer(parsedURL)); + responseObject[kState].headersList.append("location", value, true); + return responseObject; + } + // https://fetch.spec.whatwg.org/#dom-response + constructor(body = null, init = {}) { + webidl.util.markAsUncloneable(this); + if (body === kConstruct) { + return; + } + if (body !== null) { + body = webidl.converters.BodyInit(body); + } + init = webidl.converters.ResponseInit(init); + this[kState] = makeResponse({}); + this[kHeaders] = new Headers2(kConstruct); + setHeadersGuard(this[kHeaders], "response"); + setHeadersList(this[kHeaders], this[kState].headersList); + let bodyWithType = null; + if (body != null) { + const [extractedBody, type] = extractBody(body); + bodyWithType = { body: extractedBody, type }; + } + initializeResponse(this, init, bodyWithType); + } + // Returns response’s type, e.g., "cors". + get type() { + webidl.brandCheck(this, _Response); + return this[kState].type; + } + // Returns response’s URL, if it has one; otherwise the empty string. + get url() { + webidl.brandCheck(this, _Response); + const urlList = this[kState].urlList; + const url = urlList[urlList.length - 1] ?? null; + if (url === null) { + return ""; + } + return URLSerializer(url, true); + } + // Returns whether response was obtained through a redirect. + get redirected() { + webidl.brandCheck(this, _Response); + return this[kState].urlList.length > 1; + } + // Returns response’s status. + get status() { + webidl.brandCheck(this, _Response); + return this[kState].status; + } + // Returns whether response’s status is an ok status. + get ok() { + webidl.brandCheck(this, _Response); + return this[kState].status >= 200 && this[kState].status <= 299; + } + // Returns response’s status message. + get statusText() { + webidl.brandCheck(this, _Response); + return this[kState].statusText; + } + // Returns response’s headers as Headers. + get headers() { + webidl.brandCheck(this, _Response); + return this[kHeaders]; + } + get body() { + webidl.brandCheck(this, _Response); + return this[kState].body ? this[kState].body.stream : null; + } + get bodyUsed() { + webidl.brandCheck(this, _Response); + return !!this[kState].body && util.isDisturbed(this[kState].body.stream); + } + // Returns a clone of response. + clone() { + webidl.brandCheck(this, _Response); + if (bodyUnusable(this)) { + throw webidl.errors.exception({ + header: "Response.clone", + message: "Body has already been consumed." + }); + } + const clonedResponse = cloneResponse(this[kState]); + return fromInnerResponse2(clonedResponse, getHeadersGuard(this[kHeaders])); + } + [nodeUtil.inspect.custom](depth, options) { + if (options.depth === null) { + options.depth = 2; + } + options.colors ??= true; + const properties = { + status: this.status, + statusText: this.statusText, + headers: this.headers, + body: this.body, + bodyUsed: this.bodyUsed, + ok: this.ok, + redirected: this.redirected, + type: this.type, + url: this.url + }; + return `Response ${nodeUtil.formatWithOptions(options, properties)}`; + } + }; + __name(_Response, "Response"); + var Response2 = _Response; + mixinBody(Response2); + Object.defineProperties(Response2.prototype, { + type: kEnumerableProperty, + url: kEnumerableProperty, + status: kEnumerableProperty, + ok: kEnumerableProperty, + redirected: kEnumerableProperty, + statusText: kEnumerableProperty, + headers: kEnumerableProperty, + clone: kEnumerableProperty, + body: kEnumerableProperty, + bodyUsed: kEnumerableProperty, + [Symbol.toStringTag]: { + value: "Response", + configurable: true + } + }); + Object.defineProperties(Response2, { + json: kEnumerableProperty, + redirect: kEnumerableProperty, + error: kEnumerableProperty + }); + function cloneResponse(response) { + if (response.internalResponse) { + return filterResponse( + cloneResponse(response.internalResponse), + response.type + ); + } + const newResponse = makeResponse({ ...response, body: null }); + if (response.body != null) { + newResponse.body = cloneBody(newResponse, response.body); + } + return newResponse; + } + __name(cloneResponse, "cloneResponse"); + function makeResponse(init) { + return { + aborted: false, + rangeRequested: false, + timingAllowPassed: false, + requestIncludesCredentials: false, + type: "default", + status: 200, + timingInfo: null, + cacheState: "", + statusText: "", + ...init, + headersList: init?.headersList ? new HeadersList(init?.headersList) : new HeadersList(), + urlList: init?.urlList ? [...init.urlList] : [] + }; + } + __name(makeResponse, "makeResponse"); + function makeNetworkError2(reason) { + const isError = isErrorLike(reason); + return makeResponse({ + type: "error", + status: 0, + error: isError ? reason : new Error(reason ? String(reason) : reason), + aborted: reason && reason.name === "AbortError" + }); + } + __name(makeNetworkError2, "makeNetworkError"); + function isNetworkError(response) { + return ( + // A network error is a response whose type is "error", + response.type === "error" && // status is 0 + response.status === 0 + ); + } + __name(isNetworkError, "isNetworkError"); + function makeFilteredResponse(response, state) { + state = { + internalResponse: response, + ...state + }; + return new Proxy(response, { + get(target, p) { + return p in state ? state[p] : target[p]; + }, + set(target, p, value) { + assert(!(p in state)); + target[p] = value; + return true; + } + }); + } + __name(makeFilteredResponse, "makeFilteredResponse"); + function filterResponse(response, type) { + if (type === "basic") { + return makeFilteredResponse(response, { + type: "basic", + headersList: response.headersList + }); + } else if (type === "cors") { + return makeFilteredResponse(response, { + type: "cors", + headersList: response.headersList + }); + } else if (type === "opaque") { + return makeFilteredResponse(response, { + type: "opaque", + urlList: Object.freeze([]), + status: 0, + statusText: "", + body: null + }); + } else if (type === "opaqueredirect") { + return makeFilteredResponse(response, { + type: "opaqueredirect", + status: 0, + statusText: "", + headersList: [], + body: null + }); + } else { + assert(false); + } + } + __name(filterResponse, "filterResponse"); + function makeAppropriateNetworkError(fetchParams, err = null) { + assert(isCancelled(fetchParams)); + return isAborted(fetchParams) ? makeNetworkError2(Object.assign(new DOMException("The operation was aborted.", "AbortError"), { cause: err })) : makeNetworkError2(Object.assign(new DOMException("Request was cancelled."), { cause: err })); + } + __name(makeAppropriateNetworkError, "makeAppropriateNetworkError"); + function initializeResponse(response, init, body) { + if (init.status !== null && (init.status < 200 || init.status > 599)) { + throw new RangeError('init["status"] must be in the range of 200 to 599, inclusive.'); + } + if ("statusText" in init && init.statusText != null) { + if (!isValidReasonPhrase(String(init.statusText))) { + throw new TypeError("Invalid statusText"); + } + } + if ("status" in init && init.status != null) { + response[kState].status = init.status; + } + if ("statusText" in init && init.statusText != null) { + response[kState].statusText = init.statusText; + } + if ("headers" in init && init.headers != null) { + fill(response[kHeaders], init.headers); + } + if (body) { + if (nullBodyStatus.includes(response.status)) { + throw webidl.errors.exception({ + header: "Response constructor", + message: `Invalid response status code ${response.status}` + }); + } + response[kState].body = body.body; + if (body.type != null && !response[kState].headersList.contains("content-type", true)) { + response[kState].headersList.append("content-type", body.type, true); + } + } + } + __name(initializeResponse, "initializeResponse"); + function fromInnerResponse2(innerResponse, guard) { + const response = new Response2(kConstruct); + response[kState] = innerResponse; + response[kHeaders] = new Headers2(kConstruct); + setHeadersList(response[kHeaders], innerResponse.headersList); + setHeadersGuard(response[kHeaders], guard); + if (hasFinalizationRegistry && innerResponse.body?.stream) { + streamRegistry.register(response, new WeakRef(innerResponse.body.stream)); + } + return response; + } + __name(fromInnerResponse2, "fromInnerResponse"); + webidl.converters.ReadableStream = webidl.interfaceConverter( + ReadableStream + ); + webidl.converters.FormData = webidl.interfaceConverter( + FormData2 + ); + webidl.converters.URLSearchParams = webidl.interfaceConverter( + URLSearchParams + ); + webidl.converters.XMLHttpRequestBodyInit = function(V, prefix, name) { + if (typeof V === "string") { + return webidl.converters.USVString(V, prefix, name); + } + if (isBlobLike(V)) { + return webidl.converters.Blob(V, prefix, name, { strict: false }); + } + if (ArrayBuffer.isView(V) || types.isArrayBuffer(V)) { + return webidl.converters.BufferSource(V, prefix, name); + } + if (util.isFormDataLike(V)) { + return webidl.converters.FormData(V, prefix, name, { strict: false }); + } + if (V instanceof URLSearchParams) { + return webidl.converters.URLSearchParams(V, prefix, name); + } + return webidl.converters.DOMString(V, prefix, name); + }; + webidl.converters.BodyInit = function(V, prefix, argument) { + if (V instanceof ReadableStream) { + return webidl.converters.ReadableStream(V, prefix, argument); + } + if (V?.[Symbol.asyncIterator]) { + return V; + } + return webidl.converters.XMLHttpRequestBodyInit(V, prefix, argument); + }; + webidl.converters.ResponseInit = webidl.dictionaryConverter([ + { + key: "status", + converter: webidl.converters["unsigned short"], + defaultValue: () => 200 + }, + { + key: "statusText", + converter: webidl.converters.ByteString, + defaultValue: () => "" + }, + { + key: "headers", + converter: webidl.converters.HeadersInit + } + ]); + module2.exports = { + isNetworkError, + makeNetworkError: makeNetworkError2, + makeResponse, + makeAppropriateNetworkError, + filterResponse, + Response: Response2, + cloneResponse, + fromInnerResponse: fromInnerResponse2 + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/dispatcher-weakref.js +var require_dispatcher_weakref = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/dispatcher-weakref.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { kConnected, kSize } = require_symbols(); + var _CompatWeakRef = class _CompatWeakRef { + constructor(value) { + this.value = value; + } + deref() { + return this.value[kConnected] === 0 && this.value[kSize] === 0 ? void 0 : this.value; + } + }; + __name(_CompatWeakRef, "CompatWeakRef"); + var CompatWeakRef = _CompatWeakRef; + var _CompatFinalizer = class _CompatFinalizer { + constructor(finalizer) { + this.finalizer = finalizer; + } + register(dispatcher, key) { + if (dispatcher.on) { + dispatcher.on("disconnect", () => { + if (dispatcher[kConnected] === 0 && dispatcher[kSize] === 0) { + this.finalizer(key); + } + }); + } + } + unregister(key) { + } + }; + __name(_CompatFinalizer, "CompatFinalizer"); + var CompatFinalizer = _CompatFinalizer; + module2.exports = function() { + if (define_process_default.env.NODE_V8_COVERAGE && define_process_default.version.startsWith("v18")) { + define_process_default._rawDebug("Using compatibility WeakRef and FinalizationRegistry"); + return { + WeakRef: CompatWeakRef, + FinalizationRegistry: CompatFinalizer + }; + } + return { WeakRef, FinalizationRegistry }; + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/request.js +var require_request = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/request.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { extractBody, mixinBody, cloneBody, bodyUnusable } = require_body(); + var { Headers: Headers2, fill: fillHeaders, HeadersList, setHeadersGuard, getHeadersGuard, setHeadersList, getHeadersList } = require_headers(); + var { FinalizationRegistry: FinalizationRegistry2 } = require_dispatcher_weakref()(); + var util = require_util(); + var nodeUtil = require("util"); + var { + isValidHTTPToken, + sameOrigin, + environmentSettingsObject + } = require_util2(); + var { + forbiddenMethodsSet, + corsSafeListedMethodsSet, + referrerPolicy, + requestRedirect, + requestMode, + requestCredentials, + requestCache, + requestDuplex + } = require_constants3(); + var { kEnumerableProperty, normalizedMethodRecordsBase, normalizedMethodRecords } = util; + var { kHeaders, kSignal, kState, kDispatcher } = require_symbols2(); + var { webidl } = require_webidl(); + var { URLSerializer } = require_data_url(); + var { kConstruct } = require_symbols(); + var assert = require("assert"); + var { getMaxListeners, setMaxListeners, getEventListeners, defaultMaxListeners } = require("events"); + var kAbortController = Symbol("abortController"); + var requestFinalizer = new FinalizationRegistry2(({ signal, abort }) => { + signal.removeEventListener("abort", abort); + }); + var dependentControllerMap = /* @__PURE__ */ new WeakMap(); + function buildAbort(acRef) { + return abort; + function abort() { + const ac = acRef.deref(); + if (ac !== void 0) { + requestFinalizer.unregister(abort); + this.removeEventListener("abort", abort); + ac.abort(this.reason); + const controllerList = dependentControllerMap.get(ac.signal); + if (controllerList !== void 0) { + if (controllerList.size !== 0) { + for (const ref of controllerList) { + const ctrl = ref.deref(); + if (ctrl !== void 0) { + ctrl.abort(this.reason); + } + } + controllerList.clear(); + } + dependentControllerMap.delete(ac.signal); + } + } + } + __name(abort, "abort"); + } + __name(buildAbort, "buildAbort"); + var patchMethodWarning = false; + var _Request2 = class _Request2 { + // https://fetch.spec.whatwg.org/#dom-request + constructor(input, init = {}) { + webidl.util.markAsUncloneable(this); + if (input === kConstruct) { + return; + } + const prefix = "Request constructor"; + webidl.argumentLengthCheck(arguments, 1, prefix); + input = webidl.converters.RequestInfo(input, prefix, "input"); + init = webidl.converters.RequestInit(init, prefix, "init"); + let request = null; + let fallbackMode = null; + const baseUrl = environmentSettingsObject.settingsObject.baseUrl; + let signal = null; + if (typeof input === "string") { + this[kDispatcher] = init.dispatcher; + let parsedURL; + try { + parsedURL = new URL(input, baseUrl); + } catch (err) { + throw new TypeError("Failed to parse URL from " + input, { cause: err }); + } + if (parsedURL.username || parsedURL.password) { + throw new TypeError( + "Request cannot be constructed from a URL that includes credentials: " + input + ); + } + request = makeRequest({ urlList: [parsedURL] }); + fallbackMode = "cors"; + } else { + this[kDispatcher] = init.dispatcher || input[kDispatcher]; + assert(input instanceof _Request2); + request = input[kState]; + signal = input[kSignal]; + } + const origin = environmentSettingsObject.settingsObject.origin; + let window = "client"; + if (request.window?.constructor?.name === "EnvironmentSettingsObject" && sameOrigin(request.window, origin)) { + window = request.window; + } + if (init.window != null) { + throw new TypeError(`'window' option '${window}' must be null`); + } + if ("window" in init) { + window = "no-window"; + } + request = makeRequest({ + // URL request’s URL. + // undici implementation note: this is set as the first item in request's urlList in makeRequest + // method request’s method. + method: request.method, + // header list A copy of request’s header list. + // undici implementation note: headersList is cloned in makeRequest + headersList: request.headersList, + // unsafe-request flag Set. + unsafeRequest: request.unsafeRequest, + // client This’s relevant settings object. + client: environmentSettingsObject.settingsObject, + // window window. + window, + // priority request’s priority. + priority: request.priority, + // origin request’s origin. The propagation of the origin is only significant for navigation requests + // being handled by a service worker. In this scenario a request can have an origin that is different + // from the current client. + origin: request.origin, + // referrer request’s referrer. + referrer: request.referrer, + // referrer policy request’s referrer policy. + referrerPolicy: request.referrerPolicy, + // mode request’s mode. + mode: request.mode, + // credentials mode request’s credentials mode. + credentials: request.credentials, + // cache mode request’s cache mode. + cache: request.cache, + // redirect mode request’s redirect mode. + redirect: request.redirect, + // integrity metadata request’s integrity metadata. + integrity: request.integrity, + // keepalive request’s keepalive. + keepalive: request.keepalive, + // reload-navigation flag request’s reload-navigation flag. + reloadNavigation: request.reloadNavigation, + // history-navigation flag request’s history-navigation flag. + historyNavigation: request.historyNavigation, + // URL list A clone of request’s URL list. + urlList: [...request.urlList] + }); + const initHasKey = Object.keys(init).length !== 0; + if (initHasKey) { + if (request.mode === "navigate") { + request.mode = "same-origin"; + } + request.reloadNavigation = false; + request.historyNavigation = false; + request.origin = "client"; + request.referrer = "client"; + request.referrerPolicy = ""; + request.url = request.urlList[request.urlList.length - 1]; + request.urlList = [request.url]; + } + if (init.referrer !== void 0) { + const referrer = init.referrer; + if (referrer === "") { + request.referrer = "no-referrer"; + } else { + let parsedReferrer; + try { + parsedReferrer = new URL(referrer, baseUrl); + } catch (err) { + throw new TypeError(`Referrer "${referrer}" is not a valid URL.`, { cause: err }); + } + if (parsedReferrer.protocol === "about:" && parsedReferrer.hostname === "client" || origin && !sameOrigin(parsedReferrer, environmentSettingsObject.settingsObject.baseUrl)) { + request.referrer = "client"; + } else { + request.referrer = parsedReferrer; + } + } + } + if (init.referrerPolicy !== void 0) { + request.referrerPolicy = init.referrerPolicy; + } + let mode; + if (init.mode !== void 0) { + mode = init.mode; + } else { + mode = fallbackMode; + } + if (mode === "navigate") { + throw webidl.errors.exception({ + header: "Request constructor", + message: "invalid request mode navigate." + }); + } + if (mode != null) { + request.mode = mode; + } + if (init.credentials !== void 0) { + request.credentials = init.credentials; + } + if (init.cache !== void 0) { + request.cache = init.cache; + } + if (request.cache === "only-if-cached" && request.mode !== "same-origin") { + throw new TypeError( + "'only-if-cached' can be set only with 'same-origin' mode" + ); + } + if (init.redirect !== void 0) { + request.redirect = init.redirect; + } + if (init.integrity != null) { + request.integrity = String(init.integrity); + } + if (init.keepalive !== void 0) { + request.keepalive = Boolean(init.keepalive); + } + if (init.method !== void 0) { + let method = init.method; + const mayBeNormalized = normalizedMethodRecords[method]; + if (mayBeNormalized !== void 0) { + request.method = mayBeNormalized; + } else { + if (!isValidHTTPToken(method)) { + throw new TypeError(`'${method}' is not a valid HTTP method.`); + } + const upperCase = method.toUpperCase(); + if (forbiddenMethodsSet.has(upperCase)) { + throw new TypeError(`'${method}' HTTP method is unsupported.`); + } + method = normalizedMethodRecordsBase[upperCase] ?? method; + request.method = method; + } + if (!patchMethodWarning && request.method === "patch") { + define_process_default.emitWarning("Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.", { + code: "UNDICI-FETCH-patch" + }); + patchMethodWarning = true; + } + } + if (init.signal !== void 0) { + signal = init.signal; + } + this[kState] = request; + const ac = new AbortController(); + this[kSignal] = ac.signal; + if (signal != null) { + if (!signal || typeof signal.aborted !== "boolean" || typeof signal.addEventListener !== "function") { + throw new TypeError( + "Failed to construct 'Request': member signal is not of type AbortSignal." + ); + } + if (signal.aborted) { + ac.abort(signal.reason); + } else { + this[kAbortController] = ac; + const acRef = new WeakRef(ac); + const abort = buildAbort(acRef); + try { + if (typeof getMaxListeners === "function" && getMaxListeners(signal) === defaultMaxListeners) { + setMaxListeners(1500, signal); + } else if (getEventListeners(signal, "abort").length >= defaultMaxListeners) { + setMaxListeners(1500, signal); + } + } catch { + } + util.addAbortListener(signal, abort); + requestFinalizer.register(ac, { signal, abort }, abort); + } + } + this[kHeaders] = new Headers2(kConstruct); + setHeadersList(this[kHeaders], request.headersList); + setHeadersGuard(this[kHeaders], "request"); + if (mode === "no-cors") { + if (!corsSafeListedMethodsSet.has(request.method)) { + throw new TypeError( + `'${request.method} is unsupported in no-cors mode.` + ); + } + setHeadersGuard(this[kHeaders], "request-no-cors"); + } + if (initHasKey) { + const headersList = getHeadersList(this[kHeaders]); + const headers = init.headers !== void 0 ? init.headers : new HeadersList(headersList); + headersList.clear(); + if (headers instanceof HeadersList) { + for (const { name, value } of headers.rawValues()) { + headersList.append(name, value, false); + } + headersList.cookies = headers.cookies; + } else { + fillHeaders(this[kHeaders], headers); + } + } + const inputBody = input instanceof _Request2 ? input[kState].body : null; + if ((init.body != null || inputBody != null) && (request.method === "GET" || request.method === "HEAD")) { + throw new TypeError("Request with GET/HEAD method cannot have body."); + } + let initBody = null; + if (init.body != null) { + const [extractedBody, contentType] = extractBody( + init.body, + request.keepalive + ); + initBody = extractedBody; + if (contentType && !getHeadersList(this[kHeaders]).contains("content-type", true)) { + this[kHeaders].append("content-type", contentType); + } + } + const inputOrInitBody = initBody ?? inputBody; + if (inputOrInitBody != null && inputOrInitBody.source == null) { + if (initBody != null && init.duplex == null) { + throw new TypeError("RequestInit: duplex option is required when sending a body."); + } + if (request.mode !== "same-origin" && request.mode !== "cors") { + throw new TypeError( + 'If request is made from ReadableStream, mode should be "same-origin" or "cors"' + ); + } + request.useCORSPreflightFlag = true; + } + let finalBody = inputOrInitBody; + if (initBody == null && inputBody != null) { + if (bodyUnusable(input)) { + throw new TypeError( + "Cannot construct a Request with a Request object that has already been used." + ); + } + const identityTransform = new TransformStream(); + inputBody.stream.pipeThrough(identityTransform); + finalBody = { + source: inputBody.source, + length: inputBody.length, + stream: identityTransform.readable + }; + } + this[kState].body = finalBody; + } + // Returns request’s HTTP method, which is "GET" by default. + get method() { + webidl.brandCheck(this, _Request2); + return this[kState].method; + } + // Returns the URL of request as a string. + get url() { + webidl.brandCheck(this, _Request2); + return URLSerializer(this[kState].url); + } + // Returns a Headers object consisting of the headers associated with request. + // Note that headers added in the network layer by the user agent will not + // be accounted for in this object, e.g., the "Host" header. + get headers() { + webidl.brandCheck(this, _Request2); + return this[kHeaders]; + } + // Returns the kind of resource requested by request, e.g., "document" + // or "script". + get destination() { + webidl.brandCheck(this, _Request2); + return this[kState].destination; + } + // Returns the referrer of request. Its value can be a same-origin URL if + // explicitly set in init, the empty string to indicate no referrer, and + // "about:client" when defaulting to the global’s default. This is used + // during fetching to determine the value of the `Referer` header of the + // request being made. + get referrer() { + webidl.brandCheck(this, _Request2); + if (this[kState].referrer === "no-referrer") { + return ""; + } + if (this[kState].referrer === "client") { + return "about:client"; + } + return this[kState].referrer.toString(); + } + // Returns the referrer policy associated with request. + // This is used during fetching to compute the value of the request’s + // referrer. + get referrerPolicy() { + webidl.brandCheck(this, _Request2); + return this[kState].referrerPolicy; + } + // Returns the mode associated with request, which is a string indicating + // whether the request will use CORS, or will be restricted to same-origin + // URLs. + get mode() { + webidl.brandCheck(this, _Request2); + return this[kState].mode; + } + // Returns the credentials mode associated with request, + // which is a string indicating whether credentials will be sent with the + // request always, never, or only when sent to a same-origin URL. + get credentials() { + return this[kState].credentials; + } + // Returns the cache mode associated with request, + // which is a string indicating how the request will + // interact with the browser’s cache when fetching. + get cache() { + webidl.brandCheck(this, _Request2); + return this[kState].cache; + } + // Returns the redirect mode associated with request, + // which is a string indicating how redirects for the + // request will be handled during fetching. A request + // will follow redirects by default. + get redirect() { + webidl.brandCheck(this, _Request2); + return this[kState].redirect; + } + // Returns request’s subresource integrity metadata, which is a + // cryptographic hash of the resource being fetched. Its value + // consists of multiple hashes separated by whitespace. [SRI] + get integrity() { + webidl.brandCheck(this, _Request2); + return this[kState].integrity; + } + // Returns a boolean indicating whether or not request can outlive the + // global in which it was created. + get keepalive() { + webidl.brandCheck(this, _Request2); + return this[kState].keepalive; + } + // Returns a boolean indicating whether or not request is for a reload + // navigation. + get isReloadNavigation() { + webidl.brandCheck(this, _Request2); + return this[kState].reloadNavigation; + } + // Returns a boolean indicating whether or not request is for a history + // navigation (a.k.a. back-forward navigation). + get isHistoryNavigation() { + webidl.brandCheck(this, _Request2); + return this[kState].historyNavigation; + } + // Returns the signal associated with request, which is an AbortSignal + // object indicating whether or not request has been aborted, and its + // abort event handler. + get signal() { + webidl.brandCheck(this, _Request2); + return this[kSignal]; + } + get body() { + webidl.brandCheck(this, _Request2); + return this[kState].body ? this[kState].body.stream : null; + } + get bodyUsed() { + webidl.brandCheck(this, _Request2); + return !!this[kState].body && util.isDisturbed(this[kState].body.stream); + } + get duplex() { + webidl.brandCheck(this, _Request2); + return "half"; + } + // Returns a clone of request. + clone() { + webidl.brandCheck(this, _Request2); + if (bodyUnusable(this)) { + throw new TypeError("unusable"); + } + const clonedRequest = cloneRequest(this[kState]); + const ac = new AbortController(); + if (this.signal.aborted) { + ac.abort(this.signal.reason); + } else { + let list = dependentControllerMap.get(this.signal); + if (list === void 0) { + list = /* @__PURE__ */ new Set(); + dependentControllerMap.set(this.signal, list); + } + const acRef = new WeakRef(ac); + list.add(acRef); + util.addAbortListener( + ac.signal, + buildAbort(acRef) + ); + } + return fromInnerRequest(clonedRequest, ac.signal, getHeadersGuard(this[kHeaders])); + } + [nodeUtil.inspect.custom](depth, options) { + if (options.depth === null) { + options.depth = 2; + } + options.colors ??= true; + const properties = { + method: this.method, + url: this.url, + headers: this.headers, + destination: this.destination, + referrer: this.referrer, + referrerPolicy: this.referrerPolicy, + mode: this.mode, + credentials: this.credentials, + cache: this.cache, + redirect: this.redirect, + integrity: this.integrity, + keepalive: this.keepalive, + isReloadNavigation: this.isReloadNavigation, + isHistoryNavigation: this.isHistoryNavigation, + signal: this.signal + }; + return `Request ${nodeUtil.formatWithOptions(options, properties)}`; + } + }; + __name(_Request2, "Request"); + var Request2 = _Request2; + mixinBody(Request2); + function makeRequest(init) { + return { + method: init.method ?? "GET", + localURLsOnly: init.localURLsOnly ?? false, + unsafeRequest: init.unsafeRequest ?? false, + body: init.body ?? null, + client: init.client ?? null, + reservedClient: init.reservedClient ?? null, + replacesClientId: init.replacesClientId ?? "", + window: init.window ?? "client", + keepalive: init.keepalive ?? false, + serviceWorkers: init.serviceWorkers ?? "all", + initiator: init.initiator ?? "", + destination: init.destination ?? "", + priority: init.priority ?? null, + origin: init.origin ?? "client", + policyContainer: init.policyContainer ?? "client", + referrer: init.referrer ?? "client", + referrerPolicy: init.referrerPolicy ?? "", + mode: init.mode ?? "no-cors", + useCORSPreflightFlag: init.useCORSPreflightFlag ?? false, + credentials: init.credentials ?? "same-origin", + useCredentials: init.useCredentials ?? false, + cache: init.cache ?? "default", + redirect: init.redirect ?? "follow", + integrity: init.integrity ?? "", + cryptoGraphicsNonceMetadata: init.cryptoGraphicsNonceMetadata ?? "", + parserMetadata: init.parserMetadata ?? "", + reloadNavigation: init.reloadNavigation ?? false, + historyNavigation: init.historyNavigation ?? false, + userActivation: init.userActivation ?? false, + taintedOrigin: init.taintedOrigin ?? false, + redirectCount: init.redirectCount ?? 0, + responseTainting: init.responseTainting ?? "basic", + preventNoCacheCacheControlHeaderModification: init.preventNoCacheCacheControlHeaderModification ?? false, + done: init.done ?? false, + timingAllowFailed: init.timingAllowFailed ?? false, + urlList: init.urlList, + url: init.urlList[0], + headersList: init.headersList ? new HeadersList(init.headersList) : new HeadersList() + }; + } + __name(makeRequest, "makeRequest"); + function cloneRequest(request) { + const newRequest = makeRequest({ ...request, body: null }); + if (request.body != null) { + newRequest.body = cloneBody(newRequest, request.body); + } + return newRequest; + } + __name(cloneRequest, "cloneRequest"); + function fromInnerRequest(innerRequest, signal, guard) { + const request = new Request2(kConstruct); + request[kState] = innerRequest; + request[kSignal] = signal; + request[kHeaders] = new Headers2(kConstruct); + setHeadersList(request[kHeaders], innerRequest.headersList); + setHeadersGuard(request[kHeaders], guard); + return request; + } + __name(fromInnerRequest, "fromInnerRequest"); + Object.defineProperties(Request2.prototype, { + method: kEnumerableProperty, + url: kEnumerableProperty, + headers: kEnumerableProperty, + redirect: kEnumerableProperty, + clone: kEnumerableProperty, + signal: kEnumerableProperty, + duplex: kEnumerableProperty, + destination: kEnumerableProperty, + body: kEnumerableProperty, + bodyUsed: kEnumerableProperty, + isHistoryNavigation: kEnumerableProperty, + isReloadNavigation: kEnumerableProperty, + keepalive: kEnumerableProperty, + integrity: kEnumerableProperty, + cache: kEnumerableProperty, + credentials: kEnumerableProperty, + attribute: kEnumerableProperty, + referrerPolicy: kEnumerableProperty, + referrer: kEnumerableProperty, + mode: kEnumerableProperty, + [Symbol.toStringTag]: { + value: "Request", + configurable: true + } + }); + webidl.converters.Request = webidl.interfaceConverter( + Request2 + ); + webidl.converters.RequestInfo = function(V, prefix, argument) { + if (typeof V === "string") { + return webidl.converters.USVString(V, prefix, argument); + } + if (V instanceof Request2) { + return webidl.converters.Request(V, prefix, argument); + } + return webidl.converters.USVString(V, prefix, argument); + }; + webidl.converters.AbortSignal = webidl.interfaceConverter( + AbortSignal + ); + webidl.converters.RequestInit = webidl.dictionaryConverter([ + { + key: "method", + converter: webidl.converters.ByteString + }, + { + key: "headers", + converter: webidl.converters.HeadersInit + }, + { + key: "body", + converter: webidl.nullableConverter( + webidl.converters.BodyInit + ) + }, + { + key: "referrer", + converter: webidl.converters.USVString + }, + { + key: "referrerPolicy", + converter: webidl.converters.DOMString, + // https://w3c.github.io/webappsec-referrer-policy/#referrer-policy + allowedValues: referrerPolicy + }, + { + key: "mode", + converter: webidl.converters.DOMString, + // https://fetch.spec.whatwg.org/#concept-request-mode + allowedValues: requestMode + }, + { + key: "credentials", + converter: webidl.converters.DOMString, + // https://fetch.spec.whatwg.org/#requestcredentials + allowedValues: requestCredentials + }, + { + key: "cache", + converter: webidl.converters.DOMString, + // https://fetch.spec.whatwg.org/#requestcache + allowedValues: requestCache + }, + { + key: "redirect", + converter: webidl.converters.DOMString, + // https://fetch.spec.whatwg.org/#requestredirect + allowedValues: requestRedirect + }, + { + key: "integrity", + converter: webidl.converters.DOMString + }, + { + key: "keepalive", + converter: webidl.converters.boolean + }, + { + key: "signal", + converter: webidl.nullableConverter( + (signal) => webidl.converters.AbortSignal( + signal, + "RequestInit", + "signal", + { strict: false } + ) + ) + }, + { + key: "window", + converter: webidl.converters.any + }, + { + key: "duplex", + converter: webidl.converters.DOMString, + allowedValues: requestDuplex + }, + { + key: "dispatcher", + // undici specific option + converter: webidl.converters.any + } + ]); + module2.exports = { Request: Request2, makeRequest, fromInnerRequest, cloneRequest }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/index.js +var require_fetch = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/index.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { + makeNetworkError: makeNetworkError2, + makeAppropriateNetworkError, + filterResponse, + makeResponse, + fromInnerResponse: fromInnerResponse2 + } = require_response(); + var { HeadersList } = require_headers(); + var { Request: Request2, cloneRequest } = require_request(); + var zlib = require("zlib"); + var { + bytesMatch, + makePolicyContainer, + clonePolicyContainer, + requestBadPort, + TAOCheck, + appendRequestOriginHeader, + responseLocationURL, + requestCurrentURL, + setRequestReferrerPolicyOnRedirect, + tryUpgradeRequestToAPotentiallyTrustworthyURL, + createOpaqueTimingInfo, + appendFetchMetadata, + corsCheck, + crossOriginResourcePolicyCheck, + determineRequestsReferrer, + coarsenedSharedCurrentTime, + createDeferredPromise, + isBlobLike, + sameOrigin, + isCancelled, + isAborted, + isErrorLike, + fullyReadBody, + readableStreamClose, + isomorphicEncode, + urlIsLocal, + urlIsHttpHttpsScheme, + urlHasHttpsScheme, + clampAndCoarsenConnectionTimingInfo, + simpleRangeHeaderValue, + buildContentRange, + createInflate, + extractMimeType + } = require_util2(); + var { kState, kDispatcher } = require_symbols2(); + var assert = require("assert"); + var { safelyExtractBody, extractBody } = require_body(); + var { + redirectStatusSet, + nullBodyStatus, + safeMethodsSet, + requestBodyHeader, + subresourceSet + } = require_constants3(); + var EE = require("events"); + var { Readable, pipeline, finished } = require("stream"); + var { addAbortListener, isErrored, isReadable, bufferToLowerCasedHeaderName } = require_util(); + var { dataURLProcessor, serializeAMimeType, minimizeSupportedMimeType } = require_data_url(); + var { getGlobalDispatcher } = require_global2(); + var { webidl } = require_webidl(); + var { STATUS_CODES } = require("http"); + var GET_OR_HEAD = ["GET", "HEAD"]; + var defaultUserAgent = typeof __UNDICI_IS_NODE__ !== "undefined" || typeof esbuildDetection !== "undefined" ? "node" : "undici"; + var resolveObjectURL; + var _Fetch = class _Fetch extends EE { + constructor(dispatcher) { + super(); + this.dispatcher = dispatcher; + this.connection = null; + this.dump = false; + this.state = "ongoing"; + } + terminate(reason) { + if (this.state !== "ongoing") { + return; + } + this.state = "terminated"; + this.connection?.destroy(reason); + this.emit("terminated", reason); + } + // https://fetch.spec.whatwg.org/#fetch-controller-abort + abort(error) { + if (this.state !== "ongoing") { + return; + } + this.state = "aborted"; + if (!error) { + error = new DOMException("The operation was aborted.", "AbortError"); + } + this.serializedAbortReason = error; + this.connection?.destroy(error); + this.emit("terminated", error); + } + }; + __name(_Fetch, "Fetch"); + var Fetch = _Fetch; + function handleFetchDone(response) { + finalizeAndReportTiming(response, "fetch"); + } + __name(handleFetchDone, "handleFetchDone"); + function fetch2(input, init = void 0) { + webidl.argumentLengthCheck(arguments, 1, "globalThis.fetch"); + let p = createDeferredPromise(); + let requestObject; + try { + requestObject = new Request2(input, init); + } catch (e) { + p.reject(e); + return p.promise; + } + const request = requestObject[kState]; + if (requestObject.signal.aborted) { + abortFetch(p, request, null, requestObject.signal.reason); + return p.promise; + } + const globalObject = request.client.globalObject; + if (globalObject?.constructor?.name === "ServiceWorkerGlobalScope") { + request.serviceWorkers = "none"; + } + let responseObject = null; + let locallyAborted = false; + let controller = null; + addAbortListener( + requestObject.signal, + () => { + locallyAborted = true; + assert(controller != null); + controller.abort(requestObject.signal.reason); + const realResponse = responseObject?.deref(); + abortFetch(p, request, realResponse, requestObject.signal.reason); + } + ); + const processResponse = /* @__PURE__ */ __name((response) => { + if (locallyAborted) { + return; + } + if (response.aborted) { + abortFetch(p, request, responseObject, controller.serializedAbortReason); + return; + } + if (response.type === "error") { + p.reject(new TypeError("fetch failed", { cause: response.error })); + return; + } + responseObject = new WeakRef(fromInnerResponse2(response, "immutable")); + p.resolve(responseObject.deref()); + p = null; + }, "processResponse"); + controller = fetching({ + request, + processResponseEndOfBody: handleFetchDone, + processResponse, + dispatcher: requestObject[kDispatcher] + // undici + }); + return p.promise; + } + __name(fetch2, "fetch"); + function finalizeAndReportTiming(response, initiatorType = "other") { + if (response.type === "error" && response.aborted) { + return; + } + if (!response.urlList?.length) { + return; + } + const originalURL = response.urlList[0]; + let timingInfo = response.timingInfo; + let cacheState = response.cacheState; + if (!urlIsHttpHttpsScheme(originalURL)) { + return; + } + if (timingInfo === null) { + return; + } + if (!response.timingAllowPassed) { + timingInfo = createOpaqueTimingInfo({ + startTime: timingInfo.startTime + }); + cacheState = ""; + } + timingInfo.endTime = coarsenedSharedCurrentTime(); + response.timingInfo = timingInfo; + markResourceTiming( + timingInfo, + originalURL.href, + initiatorType, + globalThis, + cacheState + ); + } + __name(finalizeAndReportTiming, "finalizeAndReportTiming"); + var markResourceTiming = performance.markResourceTiming; + function abortFetch(p, request, responseObject, error) { + if (p) { + p.reject(error); + } + if (request.body != null && isReadable(request.body?.stream)) { + request.body.stream.cancel(error).catch((err) => { + if (err.code === "ERR_INVALID_STATE") { + return; + } + throw err; + }); + } + if (responseObject == null) { + return; + } + const response = responseObject[kState]; + if (response.body != null && isReadable(response.body?.stream)) { + response.body.stream.cancel(error).catch((err) => { + if (err.code === "ERR_INVALID_STATE") { + return; + } + throw err; + }); + } + } + __name(abortFetch, "abortFetch"); + function fetching({ + request, + processRequestBodyChunkLength, + processRequestEndOfBody, + processResponse, + processResponseEndOfBody, + processResponseConsumeBody, + useParallelQueue = false, + dispatcher = getGlobalDispatcher() + // undici + }) { + assert(dispatcher); + let taskDestination = null; + let crossOriginIsolatedCapability = false; + if (request.client != null) { + taskDestination = request.client.globalObject; + crossOriginIsolatedCapability = request.client.crossOriginIsolatedCapability; + } + const currentTime = coarsenedSharedCurrentTime(crossOriginIsolatedCapability); + const timingInfo = createOpaqueTimingInfo({ + startTime: currentTime + }); + const fetchParams = { + controller: new Fetch(dispatcher), + request, + timingInfo, + processRequestBodyChunkLength, + processRequestEndOfBody, + processResponse, + processResponseConsumeBody, + processResponseEndOfBody, + taskDestination, + crossOriginIsolatedCapability + }; + assert(!request.body || request.body.stream); + if (request.window === "client") { + request.window = request.client?.globalObject?.constructor?.name === "Window" ? request.client : "no-window"; + } + if (request.origin === "client") { + request.origin = request.client.origin; + } + if (request.policyContainer === "client") { + if (request.client != null) { + request.policyContainer = clonePolicyContainer( + request.client.policyContainer + ); + } else { + request.policyContainer = makePolicyContainer(); + } + } + if (!request.headersList.contains("accept", true)) { + const value = "*/*"; + request.headersList.append("accept", value, true); + } + if (!request.headersList.contains("accept-language", true)) { + request.headersList.append("accept-language", "*", true); + } + if (request.priority === null) { + } + if (subresourceSet.has(request.destination)) { + } + mainFetch(fetchParams).catch((err) => { + fetchParams.controller.terminate(err); + }); + return fetchParams.controller; + } + __name(fetching, "fetching"); + async function mainFetch(fetchParams, recursive = false) { + const request = fetchParams.request; + let response = null; + if (request.localURLsOnly && !urlIsLocal(requestCurrentURL(request))) { + response = makeNetworkError2("local URLs only"); + } + tryUpgradeRequestToAPotentiallyTrustworthyURL(request); + if (requestBadPort(request) === "blocked") { + response = makeNetworkError2("bad port"); + } + if (request.referrerPolicy === "") { + request.referrerPolicy = request.policyContainer.referrerPolicy; + } + if (request.referrer !== "no-referrer") { + request.referrer = determineRequestsReferrer(request); + } + if (response === null) { + response = await (async () => { + const currentURL = requestCurrentURL(request); + if ( + // - request’s current URL’s origin is same origin with request’s origin, + // and request’s response tainting is "basic" + sameOrigin(currentURL, request.url) && request.responseTainting === "basic" || // request’s current URL’s scheme is "data" + currentURL.protocol === "data:" || // - request’s mode is "navigate" or "websocket" + (request.mode === "navigate" || request.mode === "websocket") + ) { + request.responseTainting = "basic"; + return await schemeFetch(fetchParams); + } + if (request.mode === "same-origin") { + return makeNetworkError2('request mode cannot be "same-origin"'); + } + if (request.mode === "no-cors") { + if (request.redirect !== "follow") { + return makeNetworkError2( + 'redirect mode cannot be "follow" for "no-cors" request' + ); + } + request.responseTainting = "opaque"; + return await schemeFetch(fetchParams); + } + if (!urlIsHttpHttpsScheme(requestCurrentURL(request))) { + return makeNetworkError2("URL scheme must be a HTTP(S) scheme"); + } + request.responseTainting = "cors"; + return await httpFetch(fetchParams); + })(); + } + if (recursive) { + return response; + } + if (response.status !== 0 && !response.internalResponse) { + if (request.responseTainting === "cors") { + } + if (request.responseTainting === "basic") { + response = filterResponse(response, "basic"); + } else if (request.responseTainting === "cors") { + response = filterResponse(response, "cors"); + } else if (request.responseTainting === "opaque") { + response = filterResponse(response, "opaque"); + } else { + assert(false); + } + } + let internalResponse = response.status === 0 ? response : response.internalResponse; + if (internalResponse.urlList.length === 0) { + internalResponse.urlList.push(...request.urlList); + } + if (!request.timingAllowFailed) { + response.timingAllowPassed = true; + } + if (response.type === "opaque" && internalResponse.status === 206 && internalResponse.rangeRequested && !request.headers.contains("range", true)) { + response = internalResponse = makeNetworkError2(); + } + if (response.status !== 0 && (request.method === "HEAD" || request.method === "CONNECT" || nullBodyStatus.includes(internalResponse.status))) { + internalResponse.body = null; + fetchParams.controller.dump = true; + } + if (request.integrity) { + const processBodyError = /* @__PURE__ */ __name((reason) => fetchFinale(fetchParams, makeNetworkError2(reason)), "processBodyError"); + if (request.responseTainting === "opaque" || response.body == null) { + processBodyError(response.error); + return; + } + const processBody = /* @__PURE__ */ __name((bytes) => { + if (!bytesMatch(bytes, request.integrity)) { + processBodyError("integrity mismatch"); + return; + } + response.body = safelyExtractBody(bytes)[0]; + fetchFinale(fetchParams, response); + }, "processBody"); + await fullyReadBody(response.body, processBody, processBodyError); + } else { + fetchFinale(fetchParams, response); + } + } + __name(mainFetch, "mainFetch"); + function schemeFetch(fetchParams) { + if (isCancelled(fetchParams) && fetchParams.request.redirectCount === 0) { + return Promise.resolve(makeAppropriateNetworkError(fetchParams)); + } + const { request } = fetchParams; + const { protocol: scheme } = requestCurrentURL(request); + switch (scheme) { + case "about:": { + return Promise.resolve(makeNetworkError2("about scheme is not supported")); + } + case "blob:": { + if (!resolveObjectURL) { + resolveObjectURL = require("buffer").resolveObjectURL; + } + const blobURLEntry = requestCurrentURL(request); + if (blobURLEntry.search.length !== 0) { + return Promise.resolve(makeNetworkError2("NetworkError when attempting to fetch resource.")); + } + const blob = resolveObjectURL(blobURLEntry.toString()); + if (request.method !== "GET" || !isBlobLike(blob)) { + return Promise.resolve(makeNetworkError2("invalid method")); + } + const response = makeResponse(); + const fullLength = blob.size; + const serializedFullLength = isomorphicEncode(`${fullLength}`); + const type = blob.type; + if (!request.headersList.contains("range", true)) { + const bodyWithType = extractBody(blob); + response.statusText = "OK"; + response.body = bodyWithType[0]; + response.headersList.set("content-length", serializedFullLength, true); + response.headersList.set("content-type", type, true); + } else { + response.rangeRequested = true; + const rangeHeader = request.headersList.get("range", true); + const rangeValue = simpleRangeHeaderValue(rangeHeader, true); + if (rangeValue === "failure") { + return Promise.resolve(makeNetworkError2("failed to fetch the data URL")); + } + let { rangeStartValue: rangeStart, rangeEndValue: rangeEnd } = rangeValue; + if (rangeStart === null) { + rangeStart = fullLength - rangeEnd; + rangeEnd = rangeStart + rangeEnd - 1; + } else { + if (rangeStart >= fullLength) { + return Promise.resolve(makeNetworkError2("Range start is greater than the blob's size.")); + } + if (rangeEnd === null || rangeEnd >= fullLength) { + rangeEnd = fullLength - 1; + } + } + const slicedBlob = blob.slice(rangeStart, rangeEnd, type); + const slicedBodyWithType = extractBody(slicedBlob); + response.body = slicedBodyWithType[0]; + const serializedSlicedLength = isomorphicEncode(`${slicedBlob.size}`); + const contentRange = buildContentRange(rangeStart, rangeEnd, fullLength); + response.status = 206; + response.statusText = "Partial Content"; + response.headersList.set("content-length", serializedSlicedLength, true); + response.headersList.set("content-type", type, true); + response.headersList.set("content-range", contentRange, true); + } + return Promise.resolve(response); + } + case "data:": { + const currentURL = requestCurrentURL(request); + const dataURLStruct = dataURLProcessor(currentURL); + if (dataURLStruct === "failure") { + return Promise.resolve(makeNetworkError2("failed to fetch the data URL")); + } + const mimeType = serializeAMimeType(dataURLStruct.mimeType); + return Promise.resolve(makeResponse({ + statusText: "OK", + headersList: [ + ["content-type", { name: "Content-Type", value: mimeType }] + ], + body: safelyExtractBody(dataURLStruct.body)[0] + })); + } + case "file:": { + return Promise.resolve(makeNetworkError2("not implemented... yet...")); + } + case "http:": + case "https:": { + return httpFetch(fetchParams).catch((err) => makeNetworkError2(err)); + } + default: { + return Promise.resolve(makeNetworkError2("unknown scheme")); + } + } + } + __name(schemeFetch, "schemeFetch"); + function finalizeResponse(fetchParams, response) { + fetchParams.request.done = true; + if (fetchParams.processResponseDone != null) { + queueMicrotask(() => fetchParams.processResponseDone(response)); + } + } + __name(finalizeResponse, "finalizeResponse"); + function fetchFinale(fetchParams, response) { + let timingInfo = fetchParams.timingInfo; + const processResponseEndOfBody = /* @__PURE__ */ __name(() => { + const unsafeEndTime = Date.now(); + if (fetchParams.request.destination === "document") { + fetchParams.controller.fullTimingInfo = timingInfo; + } + fetchParams.controller.reportTimingSteps = () => { + if (fetchParams.request.url.protocol !== "https:") { + return; + } + timingInfo.endTime = unsafeEndTime; + let cacheState = response.cacheState; + const bodyInfo = response.bodyInfo; + if (!response.timingAllowPassed) { + timingInfo = createOpaqueTimingInfo(timingInfo); + cacheState = ""; + } + let responseStatus = 0; + if (fetchParams.request.mode !== "navigator" || !response.hasCrossOriginRedirects) { + responseStatus = response.status; + const mimeType = extractMimeType(response.headersList); + if (mimeType !== "failure") { + bodyInfo.contentType = minimizeSupportedMimeType(mimeType); + } + } + if (fetchParams.request.initiatorType != null) { + markResourceTiming(timingInfo, fetchParams.request.url.href, fetchParams.request.initiatorType, globalThis, cacheState, bodyInfo, responseStatus); + } + }; + const processResponseEndOfBodyTask = /* @__PURE__ */ __name(() => { + fetchParams.request.done = true; + if (fetchParams.processResponseEndOfBody != null) { + queueMicrotask(() => fetchParams.processResponseEndOfBody(response)); + } + if (fetchParams.request.initiatorType != null) { + fetchParams.controller.reportTimingSteps(); + } + }, "processResponseEndOfBodyTask"); + queueMicrotask(() => processResponseEndOfBodyTask()); + }, "processResponseEndOfBody"); + if (fetchParams.processResponse != null) { + queueMicrotask(() => { + fetchParams.processResponse(response); + fetchParams.processResponse = null; + }); + } + const internalResponse = response.type === "error" ? response : response.internalResponse ?? response; + if (internalResponse.body == null) { + processResponseEndOfBody(); + } else { + finished(internalResponse.body.stream, () => { + processResponseEndOfBody(); + }); + } + } + __name(fetchFinale, "fetchFinale"); + async function httpFetch(fetchParams) { + const request = fetchParams.request; + let response = null; + let actualResponse = null; + const timingInfo = fetchParams.timingInfo; + if (request.serviceWorkers === "all") { + } + if (response === null) { + if (request.redirect === "follow") { + request.serviceWorkers = "none"; + } + actualResponse = response = await httpNetworkOrCacheFetch(fetchParams); + if (request.responseTainting === "cors" && corsCheck(request, response) === "failure") { + return makeNetworkError2("cors failure"); + } + if (TAOCheck(request, response) === "failure") { + request.timingAllowFailed = true; + } + } + if ((request.responseTainting === "opaque" || response.type === "opaque") && crossOriginResourcePolicyCheck( + request.origin, + request.client, + request.destination, + actualResponse + ) === "blocked") { + return makeNetworkError2("blocked"); + } + if (redirectStatusSet.has(actualResponse.status)) { + if (request.redirect !== "manual") { + fetchParams.controller.connection.destroy(void 0, false); + } + if (request.redirect === "error") { + response = makeNetworkError2("unexpected redirect"); + } else if (request.redirect === "manual") { + response = actualResponse; + } else if (request.redirect === "follow") { + response = await httpRedirectFetch(fetchParams, response); + } else { + assert(false); + } + } + response.timingInfo = timingInfo; + return response; + } + __name(httpFetch, "httpFetch"); + function httpRedirectFetch(fetchParams, response) { + const request = fetchParams.request; + const actualResponse = response.internalResponse ? response.internalResponse : response; + let locationURL; + try { + locationURL = responseLocationURL( + actualResponse, + requestCurrentURL(request).hash + ); + if (locationURL == null) { + return response; + } + } catch (err) { + return Promise.resolve(makeNetworkError2(err)); + } + if (!urlIsHttpHttpsScheme(locationURL)) { + return Promise.resolve(makeNetworkError2("URL scheme must be a HTTP(S) scheme")); + } + if (request.redirectCount === 20) { + return Promise.resolve(makeNetworkError2("redirect count exceeded")); + } + request.redirectCount += 1; + if (request.mode === "cors" && (locationURL.username || locationURL.password) && !sameOrigin(request, locationURL)) { + return Promise.resolve(makeNetworkError2('cross origin not allowed for request mode "cors"')); + } + if (request.responseTainting === "cors" && (locationURL.username || locationURL.password)) { + return Promise.resolve(makeNetworkError2( + 'URL cannot contain credentials for request mode "cors"' + )); + } + if (actualResponse.status !== 303 && request.body != null && request.body.source == null) { + return Promise.resolve(makeNetworkError2()); + } + if ([301, 302].includes(actualResponse.status) && request.method === "POST" || actualResponse.status === 303 && !GET_OR_HEAD.includes(request.method)) { + request.method = "GET"; + request.body = null; + for (const headerName of requestBodyHeader) { + request.headersList.delete(headerName); + } + } + if (!sameOrigin(requestCurrentURL(request), locationURL)) { + request.headersList.delete("authorization", true); + request.headersList.delete("proxy-authorization", true); + request.headersList.delete("cookie", true); + request.headersList.delete("host", true); + } + if (request.body != null) { + assert(request.body.source != null); + request.body = safelyExtractBody(request.body.source)[0]; + } + const timingInfo = fetchParams.timingInfo; + timingInfo.redirectEndTime = timingInfo.postRedirectStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability); + if (timingInfo.redirectStartTime === 0) { + timingInfo.redirectStartTime = timingInfo.startTime; + } + request.urlList.push(locationURL); + setRequestReferrerPolicyOnRedirect(request, actualResponse); + return mainFetch(fetchParams, true); + } + __name(httpRedirectFetch, "httpRedirectFetch"); + async function httpNetworkOrCacheFetch(fetchParams, isAuthenticationFetch = false, isNewConnectionFetch = false) { + const request = fetchParams.request; + let httpFetchParams = null; + let httpRequest = null; + let response = null; + const httpCache = null; + const revalidatingFlag = false; + if (request.window === "no-window" && request.redirect === "error") { + httpFetchParams = fetchParams; + httpRequest = request; + } else { + httpRequest = cloneRequest(request); + httpFetchParams = { ...fetchParams }; + httpFetchParams.request = httpRequest; + } + const includeCredentials = request.credentials === "include" || request.credentials === "same-origin" && request.responseTainting === "basic"; + const contentLength = httpRequest.body ? httpRequest.body.length : null; + let contentLengthHeaderValue = null; + if (httpRequest.body == null && ["POST", "PUT"].includes(httpRequest.method)) { + contentLengthHeaderValue = "0"; + } + if (contentLength != null) { + contentLengthHeaderValue = isomorphicEncode(`${contentLength}`); + } + if (contentLengthHeaderValue != null) { + httpRequest.headersList.append("content-length", contentLengthHeaderValue, true); + } + if (contentLength != null && httpRequest.keepalive) { + } + if (httpRequest.referrer instanceof URL) { + httpRequest.headersList.append("referer", isomorphicEncode(httpRequest.referrer.href), true); + } + appendRequestOriginHeader(httpRequest); + appendFetchMetadata(httpRequest); + if (!httpRequest.headersList.contains("user-agent", true)) { + httpRequest.headersList.append("user-agent", defaultUserAgent); + } + if (httpRequest.cache === "default" && (httpRequest.headersList.contains("if-modified-since", true) || httpRequest.headersList.contains("if-none-match", true) || httpRequest.headersList.contains("if-unmodified-since", true) || httpRequest.headersList.contains("if-match", true) || httpRequest.headersList.contains("if-range", true))) { + httpRequest.cache = "no-store"; + } + if (httpRequest.cache === "no-cache" && !httpRequest.preventNoCacheCacheControlHeaderModification && !httpRequest.headersList.contains("cache-control", true)) { + httpRequest.headersList.append("cache-control", "max-age=0", true); + } + if (httpRequest.cache === "no-store" || httpRequest.cache === "reload") { + if (!httpRequest.headersList.contains("pragma", true)) { + httpRequest.headersList.append("pragma", "no-cache", true); + } + if (!httpRequest.headersList.contains("cache-control", true)) { + httpRequest.headersList.append("cache-control", "no-cache", true); + } + } + if (httpRequest.headersList.contains("range", true)) { + httpRequest.headersList.append("accept-encoding", "identity", true); + } + if (!httpRequest.headersList.contains("accept-encoding", true)) { + if (urlHasHttpsScheme(requestCurrentURL(httpRequest))) { + httpRequest.headersList.append("accept-encoding", "br, gzip, deflate", true); + } else { + httpRequest.headersList.append("accept-encoding", "gzip, deflate", true); + } + } + if (includeCredentials) { + } + if (httpCache == null) { + httpRequest.cache = "no-store"; + } + if (httpRequest.cache !== "no-store" && httpRequest.cache !== "reload") { + } + if (response == null) { + if (httpRequest.cache === "only-if-cached") { + return makeNetworkError2("only if cached"); + } + const forwardResponse = await httpNetworkFetch( + httpFetchParams, + includeCredentials, + isNewConnectionFetch + ); + if (!safeMethodsSet.has(httpRequest.method) && forwardResponse.status >= 200 && forwardResponse.status <= 399) { + } + if (revalidatingFlag && forwardResponse.status === 304) { + } + if (response == null) { + response = forwardResponse; + } + } + response.urlList = [...httpRequest.urlList]; + if (httpRequest.headersList.contains("range", true)) { + response.rangeRequested = true; + } + response.requestIncludesCredentials = includeCredentials; + if (response.status === 407) { + if (request.window === "no-window") { + return makeNetworkError2(); + } + if (isCancelled(fetchParams)) { + return makeAppropriateNetworkError(fetchParams); + } + return makeNetworkError2("proxy authentication required"); + } + if ( + // response’s status is 421 + response.status === 421 && // isNewConnectionFetch is false + !isNewConnectionFetch && // request’s body is null, or request’s body is non-null and request’s body’s source is non-null + (request.body == null || request.body.source != null) + ) { + if (isCancelled(fetchParams)) { + return makeAppropriateNetworkError(fetchParams); + } + fetchParams.controller.connection.destroy(); + response = await httpNetworkOrCacheFetch( + fetchParams, + isAuthenticationFetch, + true + ); + } + if (isAuthenticationFetch) { + } + return response; + } + __name(httpNetworkOrCacheFetch, "httpNetworkOrCacheFetch"); + async function httpNetworkFetch(fetchParams, includeCredentials = false, forceNewConnection = false) { + assert(!fetchParams.controller.connection || fetchParams.controller.connection.destroyed); + fetchParams.controller.connection = { + abort: null, + destroyed: false, + destroy(err, abort = true) { + if (!this.destroyed) { + this.destroyed = true; + if (abort) { + this.abort?.(err ?? new DOMException("The operation was aborted.", "AbortError")); + } + } + } + }; + const request = fetchParams.request; + let response = null; + const timingInfo = fetchParams.timingInfo; + const httpCache = null; + if (httpCache == null) { + request.cache = "no-store"; + } + const newConnection = forceNewConnection ? "yes" : "no"; + if (request.mode === "websocket") { + } else { + } + let requestBody = null; + if (request.body == null && fetchParams.processRequestEndOfBody) { + queueMicrotask(() => fetchParams.processRequestEndOfBody()); + } else if (request.body != null) { + const processBodyChunk = /* @__PURE__ */ __name(async function* (bytes) { + if (isCancelled(fetchParams)) { + return; + } + yield bytes; + fetchParams.processRequestBodyChunkLength?.(bytes.byteLength); + }, "processBodyChunk"); + const processEndOfBody = /* @__PURE__ */ __name(() => { + if (isCancelled(fetchParams)) { + return; + } + if (fetchParams.processRequestEndOfBody) { + fetchParams.processRequestEndOfBody(); + } + }, "processEndOfBody"); + const processBodyError = /* @__PURE__ */ __name((e) => { + if (isCancelled(fetchParams)) { + return; + } + if (e.name === "AbortError") { + fetchParams.controller.abort(); + } else { + fetchParams.controller.terminate(e); + } + }, "processBodyError"); + requestBody = async function* () { + try { + for await (const bytes of request.body.stream) { + yield* processBodyChunk(bytes); + } + processEndOfBody(); + } catch (err) { + processBodyError(err); + } + }(); + } + try { + const { body, status, statusText, headersList, socket } = await dispatch({ body: requestBody }); + if (socket) { + response = makeResponse({ status, statusText, headersList, socket }); + } else { + const iterator = body[Symbol.asyncIterator](); + fetchParams.controller.next = () => iterator.next(); + response = makeResponse({ status, statusText, headersList }); + } + } catch (err) { + if (err.name === "AbortError") { + fetchParams.controller.connection.destroy(); + return makeAppropriateNetworkError(fetchParams, err); + } + return makeNetworkError2(err); + } + const pullAlgorithm = /* @__PURE__ */ __name(async () => { + await fetchParams.controller.resume(); + }, "pullAlgorithm"); + const cancelAlgorithm = /* @__PURE__ */ __name((reason) => { + if (!isCancelled(fetchParams)) { + fetchParams.controller.abort(reason); + } + }, "cancelAlgorithm"); + const stream = new ReadableStream( + { + async start(controller) { + fetchParams.controller.controller = controller; + }, + async pull(controller) { + await pullAlgorithm(controller); + }, + async cancel(reason) { + await cancelAlgorithm(reason); + }, + type: "bytes" + } + ); + response.body = { stream, source: null, length: null }; + fetchParams.controller.onAborted = onAborted; + fetchParams.controller.on("terminated", onAborted); + fetchParams.controller.resume = async () => { + while (true) { + let bytes; + let isFailure; + try { + const { done, value } = await fetchParams.controller.next(); + if (isAborted(fetchParams)) { + break; + } + bytes = done ? void 0 : value; + } catch (err) { + if (fetchParams.controller.ended && !timingInfo.encodedBodySize) { + bytes = void 0; + } else { + bytes = err; + isFailure = true; + } + } + if (bytes === void 0) { + readableStreamClose(fetchParams.controller.controller); + finalizeResponse(fetchParams, response); + return; + } + timingInfo.decodedBodySize += bytes?.byteLength ?? 0; + if (isFailure) { + fetchParams.controller.terminate(bytes); + return; + } + const buffer = new Uint8Array(bytes); + if (buffer.byteLength) { + fetchParams.controller.controller.enqueue(buffer); + } + if (isErrored(stream)) { + fetchParams.controller.terminate(); + return; + } + if (fetchParams.controller.controller.desiredSize <= 0) { + return; + } + } + }; + function onAborted(reason) { + if (isAborted(fetchParams)) { + response.aborted = true; + if (isReadable(stream)) { + fetchParams.controller.controller.error( + fetchParams.controller.serializedAbortReason + ); + } + } else { + if (isReadable(stream)) { + fetchParams.controller.controller.error(new TypeError("terminated", { + cause: isErrorLike(reason) ? reason : void 0 + })); + } + } + fetchParams.controller.connection.destroy(); + } + __name(onAborted, "onAborted"); + return response; + function dispatch({ body }) { + const url = requestCurrentURL(request); + const agent = fetchParams.controller.dispatcher; + return new Promise((resolve, reject) => agent.dispatch( + { + path: url.pathname + url.search, + origin: url.origin, + method: request.method, + body: agent.isMockActive ? request.body && (request.body.source || request.body.stream) : body, + headers: request.headersList.entries, + maxRedirections: 0, + upgrade: request.mode === "websocket" ? "websocket" : void 0 + }, + { + body: null, + abort: null, + onConnect(abort) { + const { connection } = fetchParams.controller; + timingInfo.finalConnectionTimingInfo = clampAndCoarsenConnectionTimingInfo(void 0, timingInfo.postRedirectStartTime, fetchParams.crossOriginIsolatedCapability); + if (connection.destroyed) { + abort(new DOMException("The operation was aborted.", "AbortError")); + } else { + fetchParams.controller.on("terminated", abort); + this.abort = connection.abort = abort; + } + timingInfo.finalNetworkRequestStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability); + }, + onResponseStarted() { + timingInfo.finalNetworkResponseStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability); + }, + onHeaders(status, rawHeaders, resume, statusText) { + if (status < 200) { + return; + } + let codings = []; + let location = ""; + const headersList = new HeadersList(); + for (let i = 0; i < rawHeaders.length; i += 2) { + headersList.append(bufferToLowerCasedHeaderName(rawHeaders[i]), rawHeaders[i + 1].toString("latin1"), true); + } + const contentEncoding = headersList.get("content-encoding", true); + if (contentEncoding) { + codings = contentEncoding.toLowerCase().split(",").map((x) => x.trim()); + } + location = headersList.get("location", true); + this.body = new Readable({ read: resume }); + const decoders = []; + const willFollow = location && request.redirect === "follow" && redirectStatusSet.has(status); + if (codings.length !== 0 && request.method !== "HEAD" && request.method !== "CONNECT" && !nullBodyStatus.includes(status) && !willFollow) { + for (let i = codings.length - 1; i >= 0; --i) { + const coding = codings[i]; + if (coding === "x-gzip" || coding === "gzip") { + decoders.push(zlib.createGunzip({ + // Be less strict when decoding compressed responses, since sometimes + // servers send slightly invalid responses that are still accepted + // by common browsers. + // Always using Z_SYNC_FLUSH is what cURL does. + flush: zlib.constants.Z_SYNC_FLUSH, + finishFlush: zlib.constants.Z_SYNC_FLUSH + })); + } else if (coding === "deflate") { + decoders.push(createInflate({ + flush: zlib.constants.Z_SYNC_FLUSH, + finishFlush: zlib.constants.Z_SYNC_FLUSH + })); + } else if (coding === "br") { + decoders.push(zlib.createBrotliDecompress({ + flush: zlib.constants.BROTLI_OPERATION_FLUSH, + finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH + })); + } else { + decoders.length = 0; + break; + } + } + } + const onError = this.onError.bind(this); + resolve({ + status, + statusText, + headersList, + body: decoders.length ? pipeline(this.body, ...decoders, (err) => { + if (err) { + this.onError(err); + } + }).on("error", onError) : this.body.on("error", onError) + }); + return true; + }, + onData(chunk) { + if (fetchParams.controller.dump) { + return; + } + const bytes = chunk; + timingInfo.encodedBodySize += bytes.byteLength; + return this.body.push(bytes); + }, + onComplete() { + if (this.abort) { + fetchParams.controller.off("terminated", this.abort); + } + if (fetchParams.controller.onAborted) { + fetchParams.controller.off("terminated", fetchParams.controller.onAborted); + } + fetchParams.controller.ended = true; + this.body.push(null); + }, + onError(error) { + if (this.abort) { + fetchParams.controller.off("terminated", this.abort); + } + this.body?.destroy(error); + fetchParams.controller.terminate(error); + reject(error); + }, + onUpgrade(status, rawHeaders, socket) { + if (status !== 101) { + return; + } + const headersList = new HeadersList(); + for (let i = 0; i < rawHeaders.length; i += 2) { + headersList.append(bufferToLowerCasedHeaderName(rawHeaders[i]), rawHeaders[i + 1].toString("latin1"), true); + } + resolve({ + status, + statusText: STATUS_CODES[status], + headersList, + socket + }); + return true; + } + } + )); + } + __name(dispatch, "dispatch"); + } + __name(httpNetworkFetch, "httpNetworkFetch"); + module2.exports = { + fetch: fetch2, + Fetch, + fetching, + finalizeAndReportTiming + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fileapi/symbols.js +var require_symbols3 = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fileapi/symbols.js"(exports2, module2) { + "use strict"; + init_define_process(); + module2.exports = { + kState: Symbol("FileReader state"), + kResult: Symbol("FileReader result"), + kError: Symbol("FileReader error"), + kLastProgressEventFired: Symbol("FileReader last progress event fired timestamp"), + kEvents: Symbol("FileReader events"), + kAborted: Symbol("FileReader aborted") + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fileapi/progressevent.js +var require_progressevent = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fileapi/progressevent.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { webidl } = require_webidl(); + var kState = Symbol("ProgressEvent state"); + var _ProgressEvent = class _ProgressEvent extends Event { + constructor(type, eventInitDict = {}) { + type = webidl.converters.DOMString(type, "ProgressEvent constructor", "type"); + eventInitDict = webidl.converters.ProgressEventInit(eventInitDict ?? {}); + super(type, eventInitDict); + this[kState] = { + lengthComputable: eventInitDict.lengthComputable, + loaded: eventInitDict.loaded, + total: eventInitDict.total + }; + } + get lengthComputable() { + webidl.brandCheck(this, _ProgressEvent); + return this[kState].lengthComputable; + } + get loaded() { + webidl.brandCheck(this, _ProgressEvent); + return this[kState].loaded; + } + get total() { + webidl.brandCheck(this, _ProgressEvent); + return this[kState].total; + } + }; + __name(_ProgressEvent, "ProgressEvent"); + var ProgressEvent = _ProgressEvent; + webidl.converters.ProgressEventInit = webidl.dictionaryConverter([ + { + key: "lengthComputable", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "loaded", + converter: webidl.converters["unsigned long long"], + defaultValue: () => 0 + }, + { + key: "total", + converter: webidl.converters["unsigned long long"], + defaultValue: () => 0 + }, + { + key: "bubbles", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "cancelable", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "composed", + converter: webidl.converters.boolean, + defaultValue: () => false + } + ]); + module2.exports = { + ProgressEvent + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fileapi/encoding.js +var require_encoding = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fileapi/encoding.js"(exports2, module2) { + "use strict"; + init_define_process(); + function getEncoding(label) { + if (!label) { + return "failure"; + } + switch (label.trim().toLowerCase()) { + case "unicode-1-1-utf-8": + case "unicode11utf8": + case "unicode20utf8": + case "utf-8": + case "utf8": + case "x-unicode20utf8": + return "UTF-8"; + case "866": + case "cp866": + case "csibm866": + case "ibm866": + return "IBM866"; + case "csisolatin2": + case "iso-8859-2": + case "iso-ir-101": + case "iso8859-2": + case "iso88592": + case "iso_8859-2": + case "iso_8859-2:1987": + case "l2": + case "latin2": + return "ISO-8859-2"; + case "csisolatin3": + case "iso-8859-3": + case "iso-ir-109": + case "iso8859-3": + case "iso88593": + case "iso_8859-3": + case "iso_8859-3:1988": + case "l3": + case "latin3": + return "ISO-8859-3"; + case "csisolatin4": + case "iso-8859-4": + case "iso-ir-110": + case "iso8859-4": + case "iso88594": + case "iso_8859-4": + case "iso_8859-4:1988": + case "l4": + case "latin4": + return "ISO-8859-4"; + case "csisolatincyrillic": + case "cyrillic": + case "iso-8859-5": + case "iso-ir-144": + case "iso8859-5": + case "iso88595": + case "iso_8859-5": + case "iso_8859-5:1988": + return "ISO-8859-5"; + case "arabic": + case "asmo-708": + case "csiso88596e": + case "csiso88596i": + case "csisolatinarabic": + case "ecma-114": + case "iso-8859-6": + case "iso-8859-6-e": + case "iso-8859-6-i": + case "iso-ir-127": + case "iso8859-6": + case "iso88596": + case "iso_8859-6": + case "iso_8859-6:1987": + return "ISO-8859-6"; + case "csisolatingreek": + case "ecma-118": + case "elot_928": + case "greek": + case "greek8": + case "iso-8859-7": + case "iso-ir-126": + case "iso8859-7": + case "iso88597": + case "iso_8859-7": + case "iso_8859-7:1987": + case "sun_eu_greek": + return "ISO-8859-7"; + case "csiso88598e": + case "csisolatinhebrew": + case "hebrew": + case "iso-8859-8": + case "iso-8859-8-e": + case "iso-ir-138": + case "iso8859-8": + case "iso88598": + case "iso_8859-8": + case "iso_8859-8:1988": + case "visual": + return "ISO-8859-8"; + case "csiso88598i": + case "iso-8859-8-i": + case "logical": + return "ISO-8859-8-I"; + case "csisolatin6": + case "iso-8859-10": + case "iso-ir-157": + case "iso8859-10": + case "iso885910": + case "l6": + case "latin6": + return "ISO-8859-10"; + case "iso-8859-13": + case "iso8859-13": + case "iso885913": + return "ISO-8859-13"; + case "iso-8859-14": + case "iso8859-14": + case "iso885914": + return "ISO-8859-14"; + case "csisolatin9": + case "iso-8859-15": + case "iso8859-15": + case "iso885915": + case "iso_8859-15": + case "l9": + return "ISO-8859-15"; + case "iso-8859-16": + return "ISO-8859-16"; + case "cskoi8r": + case "koi": + case "koi8": + case "koi8-r": + case "koi8_r": + return "KOI8-R"; + case "koi8-ru": + case "koi8-u": + return "KOI8-U"; + case "csmacintosh": + case "mac": + case "macintosh": + case "x-mac-roman": + return "macintosh"; + case "iso-8859-11": + case "iso8859-11": + case "iso885911": + case "tis-620": + case "windows-874": + return "windows-874"; + case "cp1250": + case "windows-1250": + case "x-cp1250": + return "windows-1250"; + case "cp1251": + case "windows-1251": + case "x-cp1251": + return "windows-1251"; + case "ansi_x3.4-1968": + case "ascii": + case "cp1252": + case "cp819": + case "csisolatin1": + case "ibm819": + case "iso-8859-1": + case "iso-ir-100": + case "iso8859-1": + case "iso88591": + case "iso_8859-1": + case "iso_8859-1:1987": + case "l1": + case "latin1": + case "us-ascii": + case "windows-1252": + case "x-cp1252": + return "windows-1252"; + case "cp1253": + case "windows-1253": + case "x-cp1253": + return "windows-1253"; + case "cp1254": + case "csisolatin5": + case "iso-8859-9": + case "iso-ir-148": + case "iso8859-9": + case "iso88599": + case "iso_8859-9": + case "iso_8859-9:1989": + case "l5": + case "latin5": + case "windows-1254": + case "x-cp1254": + return "windows-1254"; + case "cp1255": + case "windows-1255": + case "x-cp1255": + return "windows-1255"; + case "cp1256": + case "windows-1256": + case "x-cp1256": + return "windows-1256"; + case "cp1257": + case "windows-1257": + case "x-cp1257": + return "windows-1257"; + case "cp1258": + case "windows-1258": + case "x-cp1258": + return "windows-1258"; + case "x-mac-cyrillic": + case "x-mac-ukrainian": + return "x-mac-cyrillic"; + case "chinese": + case "csgb2312": + case "csiso58gb231280": + case "gb2312": + case "gb_2312": + case "gb_2312-80": + case "gbk": + case "iso-ir-58": + case "x-gbk": + return "GBK"; + case "gb18030": + return "gb18030"; + case "big5": + case "big5-hkscs": + case "cn-big5": + case "csbig5": + case "x-x-big5": + return "Big5"; + case "cseucpkdfmtjapanese": + case "euc-jp": + case "x-euc-jp": + return "EUC-JP"; + case "csiso2022jp": + case "iso-2022-jp": + return "ISO-2022-JP"; + case "csshiftjis": + case "ms932": + case "ms_kanji": + case "shift-jis": + case "shift_jis": + case "sjis": + case "windows-31j": + case "x-sjis": + return "Shift_JIS"; + case "cseuckr": + case "csksc56011987": + case "euc-kr": + case "iso-ir-149": + case "korean": + case "ks_c_5601-1987": + case "ks_c_5601-1989": + case "ksc5601": + case "ksc_5601": + case "windows-949": + return "EUC-KR"; + case "csiso2022kr": + case "hz-gb-2312": + case "iso-2022-cn": + case "iso-2022-cn-ext": + case "iso-2022-kr": + case "replacement": + return "replacement"; + case "unicodefffe": + case "utf-16be": + return "UTF-16BE"; + case "csunicode": + case "iso-10646-ucs-2": + case "ucs-2": + case "unicode": + case "unicodefeff": + case "utf-16": + case "utf-16le": + return "UTF-16LE"; + case "x-user-defined": + return "x-user-defined"; + default: + return "failure"; + } + } + __name(getEncoding, "getEncoding"); + module2.exports = { + getEncoding + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fileapi/util.js +var require_util4 = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fileapi/util.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { + kState, + kError, + kResult, + kAborted, + kLastProgressEventFired + } = require_symbols3(); + var { ProgressEvent } = require_progressevent(); + var { getEncoding } = require_encoding(); + var { serializeAMimeType, parseMIMEType } = require_data_url(); + var { types } = require("util"); + var { StringDecoder } = require("string_decoder"); + var { btoa: btoa2 } = require("buffer"); + var staticPropertyDescriptors = { + enumerable: true, + writable: false, + configurable: false + }; + function readOperation(fr, blob, type, encodingName) { + if (fr[kState] === "loading") { + throw new DOMException("Invalid state", "InvalidStateError"); + } + fr[kState] = "loading"; + fr[kResult] = null; + fr[kError] = null; + const stream = blob.stream(); + const reader = stream.getReader(); + const bytes = []; + let chunkPromise = reader.read(); + let isFirstChunk = true; + (async () => { + while (!fr[kAborted]) { + try { + const { done, value } = await chunkPromise; + if (isFirstChunk && !fr[kAborted]) { + queueMicrotask(() => { + fireAProgressEvent("loadstart", fr); + }); + } + isFirstChunk = false; + if (!done && types.isUint8Array(value)) { + bytes.push(value); + if ((fr[kLastProgressEventFired] === void 0 || Date.now() - fr[kLastProgressEventFired] >= 50) && !fr[kAborted]) { + fr[kLastProgressEventFired] = Date.now(); + queueMicrotask(() => { + fireAProgressEvent("progress", fr); + }); + } + chunkPromise = reader.read(); + } else if (done) { + queueMicrotask(() => { + fr[kState] = "done"; + try { + const result = packageData(bytes, type, blob.type, encodingName); + if (fr[kAborted]) { + return; + } + fr[kResult] = result; + fireAProgressEvent("load", fr); + } catch (error) { + fr[kError] = error; + fireAProgressEvent("error", fr); + } + if (fr[kState] !== "loading") { + fireAProgressEvent("loadend", fr); + } + }); + break; + } + } catch (error) { + if (fr[kAborted]) { + return; + } + queueMicrotask(() => { + fr[kState] = "done"; + fr[kError] = error; + fireAProgressEvent("error", fr); + if (fr[kState] !== "loading") { + fireAProgressEvent("loadend", fr); + } + }); + break; + } + } + })(); + } + __name(readOperation, "readOperation"); + function fireAProgressEvent(e, reader) { + const event = new ProgressEvent(e, { + bubbles: false, + cancelable: false + }); + reader.dispatchEvent(event); + } + __name(fireAProgressEvent, "fireAProgressEvent"); + function packageData(bytes, type, mimeType, encodingName) { + switch (type) { + case "DataURL": { + let dataURL = "data:"; + const parsed = parseMIMEType(mimeType || "application/octet-stream"); + if (parsed !== "failure") { + dataURL += serializeAMimeType(parsed); + } + dataURL += ";base64,"; + const decoder = new StringDecoder("latin1"); + for (const chunk of bytes) { + dataURL += btoa2(decoder.write(chunk)); + } + dataURL += btoa2(decoder.end()); + return dataURL; + } + case "Text": { + let encoding = "failure"; + if (encodingName) { + encoding = getEncoding(encodingName); + } + if (encoding === "failure" && mimeType) { + const type2 = parseMIMEType(mimeType); + if (type2 !== "failure") { + encoding = getEncoding(type2.parameters.get("charset")); + } + } + if (encoding === "failure") { + encoding = "UTF-8"; + } + return decode(bytes, encoding); + } + case "ArrayBuffer": { + const sequence = combineByteSequences(bytes); + return sequence.buffer; + } + case "BinaryString": { + let binaryString = ""; + const decoder = new StringDecoder("latin1"); + for (const chunk of bytes) { + binaryString += decoder.write(chunk); + } + binaryString += decoder.end(); + return binaryString; + } + } + } + __name(packageData, "packageData"); + function decode(ioQueue, encoding) { + const bytes = combineByteSequences(ioQueue); + const BOMEncoding = BOMSniffing(bytes); + let slice = 0; + if (BOMEncoding !== null) { + encoding = BOMEncoding; + slice = BOMEncoding === "UTF-8" ? 3 : 2; + } + const sliced = bytes.slice(slice); + return new TextDecoder(encoding).decode(sliced); + } + __name(decode, "decode"); + function BOMSniffing(ioQueue) { + const [a, b, c] = ioQueue; + if (a === 239 && b === 187 && c === 191) { + return "UTF-8"; + } else if (a === 254 && b === 255) { + return "UTF-16BE"; + } else if (a === 255 && b === 254) { + return "UTF-16LE"; + } + return null; + } + __name(BOMSniffing, "BOMSniffing"); + function combineByteSequences(sequences) { + const size = sequences.reduce((a, b) => { + return a + b.byteLength; + }, 0); + let offset = 0; + return sequences.reduce((a, b) => { + a.set(b, offset); + offset += b.byteLength; + return a; + }, new Uint8Array(size)); + } + __name(combineByteSequences, "combineByteSequences"); + module2.exports = { + staticPropertyDescriptors, + readOperation, + fireAProgressEvent + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fileapi/filereader.js +var require_filereader = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fileapi/filereader.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { + staticPropertyDescriptors, + readOperation, + fireAProgressEvent + } = require_util4(); + var { + kState, + kError, + kResult, + kEvents, + kAborted + } = require_symbols3(); + var { webidl } = require_webidl(); + var { kEnumerableProperty } = require_util(); + var _FileReader = class _FileReader extends EventTarget { + constructor() { + super(); + this[kState] = "empty"; + this[kResult] = null; + this[kError] = null; + this[kEvents] = { + loadend: null, + error: null, + abort: null, + load: null, + progress: null, + loadstart: null + }; + } + /** + * @see https://w3c.github.io/FileAPI/#dfn-readAsArrayBuffer + * @param {import('buffer').Blob} blob + */ + readAsArrayBuffer(blob) { + webidl.brandCheck(this, _FileReader); + webidl.argumentLengthCheck(arguments, 1, "FileReader.readAsArrayBuffer"); + blob = webidl.converters.Blob(blob, { strict: false }); + readOperation(this, blob, "ArrayBuffer"); + } + /** + * @see https://w3c.github.io/FileAPI/#readAsBinaryString + * @param {import('buffer').Blob} blob + */ + readAsBinaryString(blob) { + webidl.brandCheck(this, _FileReader); + webidl.argumentLengthCheck(arguments, 1, "FileReader.readAsBinaryString"); + blob = webidl.converters.Blob(blob, { strict: false }); + readOperation(this, blob, "BinaryString"); + } + /** + * @see https://w3c.github.io/FileAPI/#readAsDataText + * @param {import('buffer').Blob} blob + * @param {string?} encoding + */ + readAsText(blob, encoding = void 0) { + webidl.brandCheck(this, _FileReader); + webidl.argumentLengthCheck(arguments, 1, "FileReader.readAsText"); + blob = webidl.converters.Blob(blob, { strict: false }); + if (encoding !== void 0) { + encoding = webidl.converters.DOMString(encoding, "FileReader.readAsText", "encoding"); + } + readOperation(this, blob, "Text", encoding); + } + /** + * @see https://w3c.github.io/FileAPI/#dfn-readAsDataURL + * @param {import('buffer').Blob} blob + */ + readAsDataURL(blob) { + webidl.brandCheck(this, _FileReader); + webidl.argumentLengthCheck(arguments, 1, "FileReader.readAsDataURL"); + blob = webidl.converters.Blob(blob, { strict: false }); + readOperation(this, blob, "DataURL"); + } + /** + * @see https://w3c.github.io/FileAPI/#dfn-abort + */ + abort() { + if (this[kState] === "empty" || this[kState] === "done") { + this[kResult] = null; + return; + } + if (this[kState] === "loading") { + this[kState] = "done"; + this[kResult] = null; + } + this[kAborted] = true; + fireAProgressEvent("abort", this); + if (this[kState] !== "loading") { + fireAProgressEvent("loadend", this); + } + } + /** + * @see https://w3c.github.io/FileAPI/#dom-filereader-readystate + */ + get readyState() { + webidl.brandCheck(this, _FileReader); + switch (this[kState]) { + case "empty": + return this.EMPTY; + case "loading": + return this.LOADING; + case "done": + return this.DONE; + } + } + /** + * @see https://w3c.github.io/FileAPI/#dom-filereader-result + */ + get result() { + webidl.brandCheck(this, _FileReader); + return this[kResult]; + } + /** + * @see https://w3c.github.io/FileAPI/#dom-filereader-error + */ + get error() { + webidl.brandCheck(this, _FileReader); + return this[kError]; + } + get onloadend() { + webidl.brandCheck(this, _FileReader); + return this[kEvents].loadend; + } + set onloadend(fn) { + webidl.brandCheck(this, _FileReader); + if (this[kEvents].loadend) { + this.removeEventListener("loadend", this[kEvents].loadend); + } + if (typeof fn === "function") { + this[kEvents].loadend = fn; + this.addEventListener("loadend", fn); + } else { + this[kEvents].loadend = null; + } + } + get onerror() { + webidl.brandCheck(this, _FileReader); + return this[kEvents].error; + } + set onerror(fn) { + webidl.brandCheck(this, _FileReader); + if (this[kEvents].error) { + this.removeEventListener("error", this[kEvents].error); + } + if (typeof fn === "function") { + this[kEvents].error = fn; + this.addEventListener("error", fn); + } else { + this[kEvents].error = null; + } + } + get onloadstart() { + webidl.brandCheck(this, _FileReader); + return this[kEvents].loadstart; + } + set onloadstart(fn) { + webidl.brandCheck(this, _FileReader); + if (this[kEvents].loadstart) { + this.removeEventListener("loadstart", this[kEvents].loadstart); + } + if (typeof fn === "function") { + this[kEvents].loadstart = fn; + this.addEventListener("loadstart", fn); + } else { + this[kEvents].loadstart = null; + } + } + get onprogress() { + webidl.brandCheck(this, _FileReader); + return this[kEvents].progress; + } + set onprogress(fn) { + webidl.brandCheck(this, _FileReader); + if (this[kEvents].progress) { + this.removeEventListener("progress", this[kEvents].progress); + } + if (typeof fn === "function") { + this[kEvents].progress = fn; + this.addEventListener("progress", fn); + } else { + this[kEvents].progress = null; + } + } + get onload() { + webidl.brandCheck(this, _FileReader); + return this[kEvents].load; + } + set onload(fn) { + webidl.brandCheck(this, _FileReader); + if (this[kEvents].load) { + this.removeEventListener("load", this[kEvents].load); + } + if (typeof fn === "function") { + this[kEvents].load = fn; + this.addEventListener("load", fn); + } else { + this[kEvents].load = null; + } + } + get onabort() { + webidl.brandCheck(this, _FileReader); + return this[kEvents].abort; + } + set onabort(fn) { + webidl.brandCheck(this, _FileReader); + if (this[kEvents].abort) { + this.removeEventListener("abort", this[kEvents].abort); + } + if (typeof fn === "function") { + this[kEvents].abort = fn; + this.addEventListener("abort", fn); + } else { + this[kEvents].abort = null; + } + } + }; + __name(_FileReader, "FileReader"); + var FileReader = _FileReader; + FileReader.EMPTY = FileReader.prototype.EMPTY = 0; + FileReader.LOADING = FileReader.prototype.LOADING = 1; + FileReader.DONE = FileReader.prototype.DONE = 2; + Object.defineProperties(FileReader.prototype, { + EMPTY: staticPropertyDescriptors, + LOADING: staticPropertyDescriptors, + DONE: staticPropertyDescriptors, + readAsArrayBuffer: kEnumerableProperty, + readAsBinaryString: kEnumerableProperty, + readAsText: kEnumerableProperty, + readAsDataURL: kEnumerableProperty, + abort: kEnumerableProperty, + readyState: kEnumerableProperty, + result: kEnumerableProperty, + error: kEnumerableProperty, + onloadstart: kEnumerableProperty, + onprogress: kEnumerableProperty, + onload: kEnumerableProperty, + onabort: kEnumerableProperty, + onerror: kEnumerableProperty, + onloadend: kEnumerableProperty, + [Symbol.toStringTag]: { + value: "FileReader", + writable: false, + enumerable: false, + configurable: true + } + }); + Object.defineProperties(FileReader, { + EMPTY: staticPropertyDescriptors, + LOADING: staticPropertyDescriptors, + DONE: staticPropertyDescriptors + }); + module2.exports = { + FileReader + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/cache/symbols.js +var require_symbols4 = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/cache/symbols.js"(exports2, module2) { + "use strict"; + init_define_process(); + module2.exports = { + kConstruct: require_symbols().kConstruct + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/cache/util.js +var require_util5 = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/cache/util.js"(exports2, module2) { + "use strict"; + init_define_process(); + var assert = require("assert"); + var { URLSerializer } = require_data_url(); + var { isValidHeaderName } = require_util2(); + function urlEquals(A, B, excludeFragment = false) { + const serializedA = URLSerializer(A, excludeFragment); + const serializedB = URLSerializer(B, excludeFragment); + return serializedA === serializedB; + } + __name(urlEquals, "urlEquals"); + function getFieldValues(header) { + assert(header !== null); + const values = []; + for (let value of header.split(",")) { + value = value.trim(); + if (isValidHeaderName(value)) { + values.push(value); + } + } + return values; + } + __name(getFieldValues, "getFieldValues"); + module2.exports = { + urlEquals, + getFieldValues + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/cache/cache.js +var require_cache = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/cache/cache.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { kConstruct } = require_symbols4(); + var { urlEquals, getFieldValues } = require_util5(); + var { kEnumerableProperty, isDisturbed } = require_util(); + var { webidl } = require_webidl(); + var { Response: Response2, cloneResponse, fromInnerResponse: fromInnerResponse2 } = require_response(); + var { Request: Request2, fromInnerRequest } = require_request(); + var { kState } = require_symbols2(); + var { fetching } = require_fetch(); + var { urlIsHttpHttpsScheme, createDeferredPromise, readAllBytes } = require_util2(); + var assert = require("assert"); + var _relevantRequestResponseList, _batchCacheOperations, batchCacheOperations_fn, _queryCache, queryCache_fn, _requestMatchesCachedItem, requestMatchesCachedItem_fn, _internalMatchAll, internalMatchAll_fn; + var _Cache = class _Cache { + constructor() { + /** + * @see https://w3c.github.io/ServiceWorker/#batch-cache-operations-algorithm + * @param {CacheBatchOperation[]} operations + * @returns {requestResponseList} + */ + __privateAdd(this, _batchCacheOperations); + /** + * @see https://w3c.github.io/ServiceWorker/#query-cache + * @param {any} requestQuery + * @param {import('../../types/cache').CacheQueryOptions} options + * @param {requestResponseList} targetStorage + * @returns {requestResponseList} + */ + __privateAdd(this, _queryCache); + /** + * @see https://w3c.github.io/ServiceWorker/#request-matches-cached-item-algorithm + * @param {any} requestQuery + * @param {any} request + * @param {any | null} response + * @param {import('../../types/cache').CacheQueryOptions | undefined} options + * @returns {boolean} + */ + __privateAdd(this, _requestMatchesCachedItem); + __privateAdd(this, _internalMatchAll); + /** + * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-request-response-list + * @type {requestResponseList} + */ + __privateAdd(this, _relevantRequestResponseList, void 0); + if (arguments[0] !== kConstruct) { + webidl.illegalConstructor(); + } + webidl.util.markAsUncloneable(this); + __privateSet(this, _relevantRequestResponseList, arguments[1]); + } + async match(request, options = {}) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.match"; + webidl.argumentLengthCheck(arguments, 1, prefix); + request = webidl.converters.RequestInfo(request, prefix, "request"); + options = webidl.converters.CacheQueryOptions(options, prefix, "options"); + const p = __privateMethod(this, _internalMatchAll, internalMatchAll_fn).call(this, request, options, 1); + if (p.length === 0) { + return; + } + return p[0]; + } + async matchAll(request = void 0, options = {}) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.matchAll"; + if (request !== void 0) + request = webidl.converters.RequestInfo(request, prefix, "request"); + options = webidl.converters.CacheQueryOptions(options, prefix, "options"); + return __privateMethod(this, _internalMatchAll, internalMatchAll_fn).call(this, request, options); + } + async add(request) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.add"; + webidl.argumentLengthCheck(arguments, 1, prefix); + request = webidl.converters.RequestInfo(request, prefix, "request"); + const requests = [request]; + const responseArrayPromise = this.addAll(requests); + return await responseArrayPromise; + } + async addAll(requests) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.addAll"; + webidl.argumentLengthCheck(arguments, 1, prefix); + const responsePromises = []; + const requestList = []; + for (let request of requests) { + if (request === void 0) { + throw webidl.errors.conversionFailed({ + prefix, + argument: "Argument 1", + types: ["undefined is not allowed"] + }); + } + request = webidl.converters.RequestInfo(request); + if (typeof request === "string") { + continue; + } + const r = request[kState]; + if (!urlIsHttpHttpsScheme(r.url) || r.method !== "GET") { + throw webidl.errors.exception({ + header: prefix, + message: "Expected http/s scheme when method is not GET." + }); + } + } + const fetchControllers = []; + for (const request of requests) { + const r = new Request2(request)[kState]; + if (!urlIsHttpHttpsScheme(r.url)) { + throw webidl.errors.exception({ + header: prefix, + message: "Expected http/s scheme." + }); + } + r.initiator = "fetch"; + r.destination = "subresource"; + requestList.push(r); + const responsePromise = createDeferredPromise(); + fetchControllers.push(fetching({ + request: r, + processResponse(response) { + if (response.type === "error" || response.status === 206 || response.status < 200 || response.status > 299) { + responsePromise.reject(webidl.errors.exception({ + header: "Cache.addAll", + message: "Received an invalid status code or the request failed." + })); + } else if (response.headersList.contains("vary")) { + const fieldValues = getFieldValues(response.headersList.get("vary")); + for (const fieldValue of fieldValues) { + if (fieldValue === "*") { + responsePromise.reject(webidl.errors.exception({ + header: "Cache.addAll", + message: "invalid vary field value" + })); + for (const controller of fetchControllers) { + controller.abort(); + } + return; + } + } + } + }, + processResponseEndOfBody(response) { + if (response.aborted) { + responsePromise.reject(new DOMException("aborted", "AbortError")); + return; + } + responsePromise.resolve(response); + } + })); + responsePromises.push(responsePromise.promise); + } + const p = Promise.all(responsePromises); + const responses = await p; + const operations = []; + let index = 0; + for (const response of responses) { + const operation = { + type: "put", + // 7.3.2 + request: requestList[index], + // 7.3.3 + response + // 7.3.4 + }; + operations.push(operation); + index++; + } + const cacheJobPromise = createDeferredPromise(); + let errorData = null; + try { + __privateMethod(this, _batchCacheOperations, batchCacheOperations_fn).call(this, operations); + } catch (e) { + errorData = e; + } + queueMicrotask(() => { + if (errorData === null) { + cacheJobPromise.resolve(void 0); + } else { + cacheJobPromise.reject(errorData); + } + }); + return cacheJobPromise.promise; + } + async put(request, response) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.put"; + webidl.argumentLengthCheck(arguments, 2, prefix); + request = webidl.converters.RequestInfo(request, prefix, "request"); + response = webidl.converters.Response(response, prefix, "response"); + let innerRequest = null; + if (request instanceof Request2) { + innerRequest = request[kState]; + } else { + innerRequest = new Request2(request)[kState]; + } + if (!urlIsHttpHttpsScheme(innerRequest.url) || innerRequest.method !== "GET") { + throw webidl.errors.exception({ + header: prefix, + message: "Expected an http/s scheme when method is not GET" + }); + } + const innerResponse = response[kState]; + if (innerResponse.status === 206) { + throw webidl.errors.exception({ + header: prefix, + message: "Got 206 status" + }); + } + if (innerResponse.headersList.contains("vary")) { + const fieldValues = getFieldValues(innerResponse.headersList.get("vary")); + for (const fieldValue of fieldValues) { + if (fieldValue === "*") { + throw webidl.errors.exception({ + header: prefix, + message: "Got * vary field value" + }); + } + } + } + if (innerResponse.body && (isDisturbed(innerResponse.body.stream) || innerResponse.body.stream.locked)) { + throw webidl.errors.exception({ + header: prefix, + message: "Response body is locked or disturbed" + }); + } + const clonedResponse = cloneResponse(innerResponse); + const bodyReadPromise = createDeferredPromise(); + if (innerResponse.body != null) { + const stream = innerResponse.body.stream; + const reader = stream.getReader(); + readAllBytes(reader).then(bodyReadPromise.resolve, bodyReadPromise.reject); + } else { + bodyReadPromise.resolve(void 0); + } + const operations = []; + const operation = { + type: "put", + // 14. + request: innerRequest, + // 15. + response: clonedResponse + // 16. + }; + operations.push(operation); + const bytes = await bodyReadPromise.promise; + if (clonedResponse.body != null) { + clonedResponse.body.source = bytes; + } + const cacheJobPromise = createDeferredPromise(); + let errorData = null; + try { + __privateMethod(this, _batchCacheOperations, batchCacheOperations_fn).call(this, operations); + } catch (e) { + errorData = e; + } + queueMicrotask(() => { + if (errorData === null) { + cacheJobPromise.resolve(); + } else { + cacheJobPromise.reject(errorData); + } + }); + return cacheJobPromise.promise; + } + async delete(request, options = {}) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.delete"; + webidl.argumentLengthCheck(arguments, 1, prefix); + request = webidl.converters.RequestInfo(request, prefix, "request"); + options = webidl.converters.CacheQueryOptions(options, prefix, "options"); + let r = null; + if (request instanceof Request2) { + r = request[kState]; + if (r.method !== "GET" && !options.ignoreMethod) { + return false; + } + } else { + assert(typeof request === "string"); + r = new Request2(request)[kState]; + } + const operations = []; + const operation = { + type: "delete", + request: r, + options + }; + operations.push(operation); + const cacheJobPromise = createDeferredPromise(); + let errorData = null; + let requestResponses; + try { + requestResponses = __privateMethod(this, _batchCacheOperations, batchCacheOperations_fn).call(this, operations); + } catch (e) { + errorData = e; + } + queueMicrotask(() => { + if (errorData === null) { + cacheJobPromise.resolve(!!requestResponses?.length); + } else { + cacheJobPromise.reject(errorData); + } + }); + return cacheJobPromise.promise; + } + /** + * @see https://w3c.github.io/ServiceWorker/#dom-cache-keys + * @param {any} request + * @param {import('../../types/cache').CacheQueryOptions} options + * @returns {Promise} + */ + async keys(request = void 0, options = {}) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.keys"; + if (request !== void 0) + request = webidl.converters.RequestInfo(request, prefix, "request"); + options = webidl.converters.CacheQueryOptions(options, prefix, "options"); + let r = null; + if (request !== void 0) { + if (request instanceof Request2) { + r = request[kState]; + if (r.method !== "GET" && !options.ignoreMethod) { + return []; + } + } else if (typeof request === "string") { + r = new Request2(request)[kState]; + } + } + const promise = createDeferredPromise(); + const requests = []; + if (request === void 0) { + for (const requestResponse of __privateGet(this, _relevantRequestResponseList)) { + requests.push(requestResponse[0]); + } + } else { + const requestResponses = __privateMethod(this, _queryCache, queryCache_fn).call(this, r, options); + for (const requestResponse of requestResponses) { + requests.push(requestResponse[0]); + } + } + queueMicrotask(() => { + const requestList = []; + for (const request2 of requests) { + const requestObject = fromInnerRequest( + request2, + new AbortController().signal, + "immutable" + ); + requestList.push(requestObject); + } + promise.resolve(Object.freeze(requestList)); + }); + return promise.promise; + } + }; + _relevantRequestResponseList = new WeakMap(); + _batchCacheOperations = new WeakSet(); + batchCacheOperations_fn = /* @__PURE__ */ __name(function(operations) { + const cache = __privateGet(this, _relevantRequestResponseList); + const backupCache = [...cache]; + const addedItems = []; + const resultList = []; + try { + for (const operation of operations) { + if (operation.type !== "delete" && operation.type !== "put") { + throw webidl.errors.exception({ + header: "Cache.#batchCacheOperations", + message: 'operation type does not match "delete" or "put"' + }); + } + if (operation.type === "delete" && operation.response != null) { + throw webidl.errors.exception({ + header: "Cache.#batchCacheOperations", + message: "delete operation should not have an associated response" + }); + } + if (__privateMethod(this, _queryCache, queryCache_fn).call(this, operation.request, operation.options, addedItems).length) { + throw new DOMException("???", "InvalidStateError"); + } + let requestResponses; + if (operation.type === "delete") { + requestResponses = __privateMethod(this, _queryCache, queryCache_fn).call(this, operation.request, operation.options); + if (requestResponses.length === 0) { + return []; + } + for (const requestResponse of requestResponses) { + const idx = cache.indexOf(requestResponse); + assert(idx !== -1); + cache.splice(idx, 1); + } + } else if (operation.type === "put") { + if (operation.response == null) { + throw webidl.errors.exception({ + header: "Cache.#batchCacheOperations", + message: "put operation should have an associated response" + }); + } + const r = operation.request; + if (!urlIsHttpHttpsScheme(r.url)) { + throw webidl.errors.exception({ + header: "Cache.#batchCacheOperations", + message: "expected http or https scheme" + }); + } + if (r.method !== "GET") { + throw webidl.errors.exception({ + header: "Cache.#batchCacheOperations", + message: "not get method" + }); + } + if (operation.options != null) { + throw webidl.errors.exception({ + header: "Cache.#batchCacheOperations", + message: "options must not be defined" + }); + } + requestResponses = __privateMethod(this, _queryCache, queryCache_fn).call(this, operation.request); + for (const requestResponse of requestResponses) { + const idx = cache.indexOf(requestResponse); + assert(idx !== -1); + cache.splice(idx, 1); + } + cache.push([operation.request, operation.response]); + addedItems.push([operation.request, operation.response]); + } + resultList.push([operation.request, operation.response]); + } + return resultList; + } catch (e) { + __privateGet(this, _relevantRequestResponseList).length = 0; + __privateSet(this, _relevantRequestResponseList, backupCache); + throw e; + } + }, "#batchCacheOperations"); + _queryCache = new WeakSet(); + queryCache_fn = /* @__PURE__ */ __name(function(requestQuery, options, targetStorage) { + const resultList = []; + const storage = targetStorage ?? __privateGet(this, _relevantRequestResponseList); + for (const requestResponse of storage) { + const [cachedRequest, cachedResponse] = requestResponse; + if (__privateMethod(this, _requestMatchesCachedItem, requestMatchesCachedItem_fn).call(this, requestQuery, cachedRequest, cachedResponse, options)) { + resultList.push(requestResponse); + } + } + return resultList; + }, "#queryCache"); + _requestMatchesCachedItem = new WeakSet(); + requestMatchesCachedItem_fn = /* @__PURE__ */ __name(function(requestQuery, request, response = null, options) { + const queryURL = new URL(requestQuery.url); + const cachedURL = new URL(request.url); + if (options?.ignoreSearch) { + cachedURL.search = ""; + queryURL.search = ""; + } + if (!urlEquals(queryURL, cachedURL, true)) { + return false; + } + if (response == null || options?.ignoreVary || !response.headersList.contains("vary")) { + return true; + } + const fieldValues = getFieldValues(response.headersList.get("vary")); + for (const fieldValue of fieldValues) { + if (fieldValue === "*") { + return false; + } + const requestValue = request.headersList.get(fieldValue); + const queryValue = requestQuery.headersList.get(fieldValue); + if (requestValue !== queryValue) { + return false; + } + } + return true; + }, "#requestMatchesCachedItem"); + _internalMatchAll = new WeakSet(); + internalMatchAll_fn = /* @__PURE__ */ __name(function(request, options, maxResponses = Infinity) { + let r = null; + if (request !== void 0) { + if (request instanceof Request2) { + r = request[kState]; + if (r.method !== "GET" && !options.ignoreMethod) { + return []; + } + } else if (typeof request === "string") { + r = new Request2(request)[kState]; + } + } + const responses = []; + if (request === void 0) { + for (const requestResponse of __privateGet(this, _relevantRequestResponseList)) { + responses.push(requestResponse[1]); + } + } else { + const requestResponses = __privateMethod(this, _queryCache, queryCache_fn).call(this, r, options); + for (const requestResponse of requestResponses) { + responses.push(requestResponse[1]); + } + } + const responseList = []; + for (const response of responses) { + const responseObject = fromInnerResponse2(response, "immutable"); + responseList.push(responseObject.clone()); + if (responseList.length >= maxResponses) { + break; + } + } + return Object.freeze(responseList); + }, "#internalMatchAll"); + __name(_Cache, "Cache"); + var Cache = _Cache; + Object.defineProperties(Cache.prototype, { + [Symbol.toStringTag]: { + value: "Cache", + configurable: true + }, + match: kEnumerableProperty, + matchAll: kEnumerableProperty, + add: kEnumerableProperty, + addAll: kEnumerableProperty, + put: kEnumerableProperty, + delete: kEnumerableProperty, + keys: kEnumerableProperty + }); + var cacheQueryOptionConverters = [ + { + key: "ignoreSearch", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "ignoreMethod", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "ignoreVary", + converter: webidl.converters.boolean, + defaultValue: () => false + } + ]; + webidl.converters.CacheQueryOptions = webidl.dictionaryConverter(cacheQueryOptionConverters); + webidl.converters.MultiCacheQueryOptions = webidl.dictionaryConverter([ + ...cacheQueryOptionConverters, + { + key: "cacheName", + converter: webidl.converters.DOMString + } + ]); + webidl.converters.Response = webidl.interfaceConverter(Response2); + webidl.converters["sequence"] = webidl.sequenceConverter( + webidl.converters.RequestInfo + ); + module2.exports = { + Cache + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/cache/cachestorage.js +var require_cachestorage = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/cache/cachestorage.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { kConstruct } = require_symbols4(); + var { Cache } = require_cache(); + var { webidl } = require_webidl(); + var { kEnumerableProperty } = require_util(); + var _caches; + var _CacheStorage = class _CacheStorage { + constructor() { + /** + * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-name-to-cache-map + * @type {Map} + */ + async has(cacheName) { + webidl.brandCheck(this, _CacheStorage); + const prefix = "CacheStorage.has"; + webidl.argumentLengthCheck(arguments, 1, prefix); + cacheName = webidl.converters.DOMString(cacheName, prefix, "cacheName"); + return __privateGet(this, _caches).has(cacheName); + } + /** + * @see https://w3c.github.io/ServiceWorker/#dom-cachestorage-open + * @param {string} cacheName + * @returns {Promise} + */ + async open(cacheName) { + webidl.brandCheck(this, _CacheStorage); + const prefix = "CacheStorage.open"; + webidl.argumentLengthCheck(arguments, 1, prefix); + cacheName = webidl.converters.DOMString(cacheName, prefix, "cacheName"); + if (__privateGet(this, _caches).has(cacheName)) { + const cache2 = __privateGet(this, _caches).get(cacheName); + return new Cache(kConstruct, cache2); + } + const cache = []; + __privateGet(this, _caches).set(cacheName, cache); + return new Cache(kConstruct, cache); + } + /** + * @see https://w3c.github.io/ServiceWorker/#cache-storage-delete + * @param {string} cacheName + * @returns {Promise} + */ + async delete(cacheName) { + webidl.brandCheck(this, _CacheStorage); + const prefix = "CacheStorage.delete"; + webidl.argumentLengthCheck(arguments, 1, prefix); + cacheName = webidl.converters.DOMString(cacheName, prefix, "cacheName"); + return __privateGet(this, _caches).delete(cacheName); + } + /** + * @see https://w3c.github.io/ServiceWorker/#cache-storage-keys + * @returns {Promise} + */ + async keys() { + webidl.brandCheck(this, _CacheStorage); + const keys = __privateGet(this, _caches).keys(); + return [...keys]; + } + }; + _caches = new WeakMap(); + __name(_CacheStorage, "CacheStorage"); + var CacheStorage = _CacheStorage; + Object.defineProperties(CacheStorage.prototype, { + [Symbol.toStringTag]: { + value: "CacheStorage", + configurable: true + }, + match: kEnumerableProperty, + has: kEnumerableProperty, + open: kEnumerableProperty, + delete: kEnumerableProperty, + keys: kEnumerableProperty + }); + module2.exports = { + CacheStorage + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/cookies/constants.js +var require_constants4 = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/cookies/constants.js"(exports2, module2) { + "use strict"; + init_define_process(); + var maxAttributeValueSize = 1024; + var maxNameValuePairSize = 4096; + module2.exports = { + maxAttributeValueSize, + maxNameValuePairSize + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/cookies/util.js +var require_util6 = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/cookies/util.js"(exports2, module2) { + "use strict"; + init_define_process(); + function isCTLExcludingHtab(value) { + for (let i = 0; i < value.length; ++i) { + const code = value.charCodeAt(i); + if (code >= 0 && code <= 8 || code >= 10 && code <= 31 || code === 127) { + return true; + } + } + return false; + } + __name(isCTLExcludingHtab, "isCTLExcludingHtab"); + function validateCookieName(name) { + for (let i = 0; i < name.length; ++i) { + const code = name.charCodeAt(i); + if (code < 33 || // exclude CTLs (0-31), SP and HT + code > 126 || // exclude non-ascii and DEL + code === 34 || // " + code === 40 || // ( + code === 41 || // ) + code === 60 || // < + code === 62 || // > + code === 64 || // @ + code === 44 || // , + code === 59 || // ; + code === 58 || // : + code === 92 || // \ + code === 47 || // / + code === 91 || // [ + code === 93 || // ] + code === 63 || // ? + code === 61 || // = + code === 123 || // { + code === 125) { + throw new Error("Invalid cookie name"); + } + } + } + __name(validateCookieName, "validateCookieName"); + function validateCookieValue(value) { + let len = value.length; + let i = 0; + if (value[0] === '"') { + if (len === 1 || value[len - 1] !== '"') { + throw new Error("Invalid cookie value"); + } + --len; + ++i; + } + while (i < len) { + const code = value.charCodeAt(i++); + if (code < 33 || // exclude CTLs (0-31) + code > 126 || // non-ascii and DEL (127) + code === 34 || // " + code === 44 || // , + code === 59 || // ; + code === 92) { + throw new Error("Invalid cookie value"); + } + } + } + __name(validateCookieValue, "validateCookieValue"); + function validateCookiePath(path) { + for (let i = 0; i < path.length; ++i) { + const code = path.charCodeAt(i); + if (code < 32 || // exclude CTLs (0-31) + code === 127 || // DEL + code === 59) { + throw new Error("Invalid cookie path"); + } + } + } + __name(validateCookiePath, "validateCookiePath"); + function validateCookieDomain(domain) { + if (domain.startsWith("-") || domain.endsWith(".") || domain.endsWith("-")) { + throw new Error("Invalid cookie domain"); + } + } + __name(validateCookieDomain, "validateCookieDomain"); + var IMFDays = [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ]; + var IMFMonths = [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ]; + var IMFPaddedNumbers = Array(61).fill(0).map((_, i) => i.toString().padStart(2, "0")); + function toIMFDate(date) { + if (typeof date === "number") { + date = new Date(date); + } + return `${IMFDays[date.getUTCDay()]}, ${IMFPaddedNumbers[date.getUTCDate()]} ${IMFMonths[date.getUTCMonth()]} ${date.getUTCFullYear()} ${IMFPaddedNumbers[date.getUTCHours()]}:${IMFPaddedNumbers[date.getUTCMinutes()]}:${IMFPaddedNumbers[date.getUTCSeconds()]} GMT`; + } + __name(toIMFDate, "toIMFDate"); + function validateCookieMaxAge(maxAge) { + if (maxAge < 0) { + throw new Error("Invalid cookie max-age"); + } + } + __name(validateCookieMaxAge, "validateCookieMaxAge"); + function stringify(cookie) { + if (cookie.name.length === 0) { + return null; + } + validateCookieName(cookie.name); + validateCookieValue(cookie.value); + const out = [`${cookie.name}=${cookie.value}`]; + if (cookie.name.startsWith("__Secure-")) { + cookie.secure = true; + } + if (cookie.name.startsWith("__Host-")) { + cookie.secure = true; + cookie.domain = null; + cookie.path = "/"; + } + if (cookie.secure) { + out.push("Secure"); + } + if (cookie.httpOnly) { + out.push("HttpOnly"); + } + if (typeof cookie.maxAge === "number") { + validateCookieMaxAge(cookie.maxAge); + out.push(`Max-Age=${cookie.maxAge}`); + } + if (cookie.domain) { + validateCookieDomain(cookie.domain); + out.push(`Domain=${cookie.domain}`); + } + if (cookie.path) { + validateCookiePath(cookie.path); + out.push(`Path=${cookie.path}`); + } + if (cookie.expires && cookie.expires.toString() !== "Invalid Date") { + out.push(`Expires=${toIMFDate(cookie.expires)}`); + } + if (cookie.sameSite) { + out.push(`SameSite=${cookie.sameSite}`); + } + for (const part of cookie.unparsed) { + if (!part.includes("=")) { + throw new Error("Invalid unparsed"); + } + const [key, ...value] = part.split("="); + out.push(`${key.trim()}=${value.join("=")}`); + } + return out.join("; "); + } + __name(stringify, "stringify"); + module2.exports = { + isCTLExcludingHtab, + validateCookieName, + validateCookiePath, + validateCookieValue, + toIMFDate, + stringify + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/cookies/parse.js +var require_parse = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/cookies/parse.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { maxNameValuePairSize, maxAttributeValueSize } = require_constants4(); + var { isCTLExcludingHtab } = require_util6(); + var { collectASequenceOfCodePointsFast } = require_data_url(); + var assert = require("assert"); + function parseSetCookie(header) { + if (isCTLExcludingHtab(header)) { + return null; + } + let nameValuePair = ""; + let unparsedAttributes = ""; + let name = ""; + let value = ""; + if (header.includes(";")) { + const position = { position: 0 }; + nameValuePair = collectASequenceOfCodePointsFast(";", header, position); + unparsedAttributes = header.slice(position.position); + } else { + nameValuePair = header; + } + if (!nameValuePair.includes("=")) { + value = nameValuePair; + } else { + const position = { position: 0 }; + name = collectASequenceOfCodePointsFast( + "=", + nameValuePair, + position + ); + value = nameValuePair.slice(position.position + 1); + } + name = name.trim(); + value = value.trim(); + if (name.length + value.length > maxNameValuePairSize) { + return null; + } + return { + name, + value, + ...parseUnparsedAttributes(unparsedAttributes) + }; + } + __name(parseSetCookie, "parseSetCookie"); + function parseUnparsedAttributes(unparsedAttributes, cookieAttributeList = {}) { + if (unparsedAttributes.length === 0) { + return cookieAttributeList; + } + assert(unparsedAttributes[0] === ";"); + unparsedAttributes = unparsedAttributes.slice(1); + let cookieAv = ""; + if (unparsedAttributes.includes(";")) { + cookieAv = collectASequenceOfCodePointsFast( + ";", + unparsedAttributes, + { position: 0 } + ); + unparsedAttributes = unparsedAttributes.slice(cookieAv.length); + } else { + cookieAv = unparsedAttributes; + unparsedAttributes = ""; + } + let attributeName = ""; + let attributeValue = ""; + if (cookieAv.includes("=")) { + const position = { position: 0 }; + attributeName = collectASequenceOfCodePointsFast( + "=", + cookieAv, + position + ); + attributeValue = cookieAv.slice(position.position + 1); + } else { + attributeName = cookieAv; + } + attributeName = attributeName.trim(); + attributeValue = attributeValue.trim(); + if (attributeValue.length > maxAttributeValueSize) { + return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList); + } + const attributeNameLowercase = attributeName.toLowerCase(); + if (attributeNameLowercase === "expires") { + const expiryTime = new Date(attributeValue); + cookieAttributeList.expires = expiryTime; + } else if (attributeNameLowercase === "max-age") { + const charCode = attributeValue.charCodeAt(0); + if ((charCode < 48 || charCode > 57) && attributeValue[0] !== "-") { + return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList); + } + if (!/^\d+$/.test(attributeValue)) { + return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList); + } + const deltaSeconds = Number(attributeValue); + cookieAttributeList.maxAge = deltaSeconds; + } else if (attributeNameLowercase === "domain") { + let cookieDomain = attributeValue; + if (cookieDomain[0] === ".") { + cookieDomain = cookieDomain.slice(1); + } + cookieDomain = cookieDomain.toLowerCase(); + cookieAttributeList.domain = cookieDomain; + } else if (attributeNameLowercase === "path") { + let cookiePath = ""; + if (attributeValue.length === 0 || attributeValue[0] !== "/") { + cookiePath = "/"; + } else { + cookiePath = attributeValue; + } + cookieAttributeList.path = cookiePath; + } else if (attributeNameLowercase === "secure") { + cookieAttributeList.secure = true; + } else if (attributeNameLowercase === "httponly") { + cookieAttributeList.httpOnly = true; + } else if (attributeNameLowercase === "samesite") { + let enforcement = "Default"; + const attributeValueLowercase = attributeValue.toLowerCase(); + if (attributeValueLowercase.includes("none")) { + enforcement = "None"; + } + if (attributeValueLowercase.includes("strict")) { + enforcement = "Strict"; + } + if (attributeValueLowercase.includes("lax")) { + enforcement = "Lax"; + } + cookieAttributeList.sameSite = enforcement; + } else { + cookieAttributeList.unparsed ??= []; + cookieAttributeList.unparsed.push(`${attributeName}=${attributeValue}`); + } + return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList); + } + __name(parseUnparsedAttributes, "parseUnparsedAttributes"); + module2.exports = { + parseSetCookie, + parseUnparsedAttributes + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/cookies/index.js +var require_cookies = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/cookies/index.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { parseSetCookie } = require_parse(); + var { stringify } = require_util6(); + var { webidl } = require_webidl(); + var { Headers: Headers2 } = require_headers(); + function getCookies(headers) { + webidl.argumentLengthCheck(arguments, 1, "getCookies"); + webidl.brandCheck(headers, Headers2, { strict: false }); + const cookie = headers.get("cookie"); + const out = {}; + if (!cookie) { + return out; + } + for (const piece of cookie.split(";")) { + const [name, ...value] = piece.split("="); + out[name.trim()] = value.join("="); + } + return out; + } + __name(getCookies, "getCookies"); + function deleteCookie(headers, name, attributes) { + webidl.brandCheck(headers, Headers2, { strict: false }); + const prefix = "deleteCookie"; + webidl.argumentLengthCheck(arguments, 2, prefix); + name = webidl.converters.DOMString(name, prefix, "name"); + attributes = webidl.converters.DeleteCookieAttributes(attributes); + setCookie(headers, { + name, + value: "", + expires: /* @__PURE__ */ new Date(0), + ...attributes + }); + } + __name(deleteCookie, "deleteCookie"); + function getSetCookies(headers) { + webidl.argumentLengthCheck(arguments, 1, "getSetCookies"); + webidl.brandCheck(headers, Headers2, { strict: false }); + const cookies = headers.getSetCookie(); + if (!cookies) { + return []; + } + return cookies.map((pair) => parseSetCookie(pair)); + } + __name(getSetCookies, "getSetCookies"); + function setCookie(headers, cookie) { + webidl.argumentLengthCheck(arguments, 2, "setCookie"); + webidl.brandCheck(headers, Headers2, { strict: false }); + cookie = webidl.converters.Cookie(cookie); + const str = stringify(cookie); + if (str) { + headers.append("Set-Cookie", str); + } + } + __name(setCookie, "setCookie"); + webidl.converters.DeleteCookieAttributes = webidl.dictionaryConverter([ + { + converter: webidl.nullableConverter(webidl.converters.DOMString), + key: "path", + defaultValue: () => null + }, + { + converter: webidl.nullableConverter(webidl.converters.DOMString), + key: "domain", + defaultValue: () => null + } + ]); + webidl.converters.Cookie = webidl.dictionaryConverter([ + { + converter: webidl.converters.DOMString, + key: "name" + }, + { + converter: webidl.converters.DOMString, + key: "value" + }, + { + converter: webidl.nullableConverter((value) => { + if (typeof value === "number") { + return webidl.converters["unsigned long long"](value); + } + return new Date(value); + }), + key: "expires", + defaultValue: () => null + }, + { + converter: webidl.nullableConverter(webidl.converters["long long"]), + key: "maxAge", + defaultValue: () => null + }, + { + converter: webidl.nullableConverter(webidl.converters.DOMString), + key: "domain", + defaultValue: () => null + }, + { + converter: webidl.nullableConverter(webidl.converters.DOMString), + key: "path", + defaultValue: () => null + }, + { + converter: webidl.nullableConverter(webidl.converters.boolean), + key: "secure", + defaultValue: () => null + }, + { + converter: webidl.nullableConverter(webidl.converters.boolean), + key: "httpOnly", + defaultValue: () => null + }, + { + converter: webidl.converters.USVString, + key: "sameSite", + allowedValues: ["Strict", "Lax", "None"] + }, + { + converter: webidl.sequenceConverter(webidl.converters.DOMString), + key: "unparsed", + defaultValue: () => new Array(0) + } + ]); + module2.exports = { + getCookies, + deleteCookie, + getSetCookies, + setCookie + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/events.js +var require_events = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/events.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { webidl } = require_webidl(); + var { kEnumerableProperty } = require_util(); + var { kConstruct } = require_symbols(); + var { MessagePort } = require("worker_threads"); + var _eventInit; + var _MessageEvent = class _MessageEvent extends Event { + constructor(type, eventInitDict = {}) { + var __super = (...args) => { + super(...args); + __privateAdd(this, _eventInit, void 0); + return this; + }; + if (type === kConstruct) { + __super(arguments[1], arguments[2]); + webidl.util.markAsUncloneable(this); + return; + } + const prefix = "MessageEvent constructor"; + webidl.argumentLengthCheck(arguments, 1, prefix); + type = webidl.converters.DOMString(type, prefix, "type"); + eventInitDict = webidl.converters.MessageEventInit(eventInitDict, prefix, "eventInitDict"); + __super(type, eventInitDict); + __privateSet(this, _eventInit, eventInitDict); + webidl.util.markAsUncloneable(this); + } + get data() { + webidl.brandCheck(this, _MessageEvent); + return __privateGet(this, _eventInit).data; + } + get origin() { + webidl.brandCheck(this, _MessageEvent); + return __privateGet(this, _eventInit).origin; + } + get lastEventId() { + webidl.brandCheck(this, _MessageEvent); + return __privateGet(this, _eventInit).lastEventId; + } + get source() { + webidl.brandCheck(this, _MessageEvent); + return __privateGet(this, _eventInit).source; + } + get ports() { + webidl.brandCheck(this, _MessageEvent); + if (!Object.isFrozen(__privateGet(this, _eventInit).ports)) { + Object.freeze(__privateGet(this, _eventInit).ports); + } + return __privateGet(this, _eventInit).ports; + } + initMessageEvent(type, bubbles = false, cancelable = false, data = null, origin = "", lastEventId = "", source = null, ports = []) { + webidl.brandCheck(this, _MessageEvent); + webidl.argumentLengthCheck(arguments, 1, "MessageEvent.initMessageEvent"); + return new _MessageEvent(type, { + bubbles, + cancelable, + data, + origin, + lastEventId, + source, + ports + }); + } + static createFastMessageEvent(type, init) { + const messageEvent = new _MessageEvent(kConstruct, type, init); + __privateSet(messageEvent, _eventInit, init); + __privateGet(messageEvent, _eventInit).data ??= null; + __privateGet(messageEvent, _eventInit).origin ??= ""; + __privateGet(messageEvent, _eventInit).lastEventId ??= ""; + __privateGet(messageEvent, _eventInit).source ??= null; + __privateGet(messageEvent, _eventInit).ports ??= []; + return messageEvent; + } + }; + _eventInit = new WeakMap(); + __name(_MessageEvent, "MessageEvent"); + var MessageEvent = _MessageEvent; + var { createFastMessageEvent } = MessageEvent; + delete MessageEvent.createFastMessageEvent; + var _eventInit2; + var _CloseEvent = class _CloseEvent extends Event { + constructor(type, eventInitDict = {}) { + const prefix = "CloseEvent constructor"; + webidl.argumentLengthCheck(arguments, 1, prefix); + type = webidl.converters.DOMString(type, prefix, "type"); + eventInitDict = webidl.converters.CloseEventInit(eventInitDict); + super(type, eventInitDict); + __privateAdd(this, _eventInit2, void 0); + __privateSet(this, _eventInit2, eventInitDict); + webidl.util.markAsUncloneable(this); + } + get wasClean() { + webidl.brandCheck(this, _CloseEvent); + return __privateGet(this, _eventInit2).wasClean; + } + get code() { + webidl.brandCheck(this, _CloseEvent); + return __privateGet(this, _eventInit2).code; + } + get reason() { + webidl.brandCheck(this, _CloseEvent); + return __privateGet(this, _eventInit2).reason; + } + }; + _eventInit2 = new WeakMap(); + __name(_CloseEvent, "CloseEvent"); + var CloseEvent = _CloseEvent; + var _eventInit3; + var _ErrorEvent = class _ErrorEvent extends Event { + constructor(type, eventInitDict) { + const prefix = "ErrorEvent constructor"; + webidl.argumentLengthCheck(arguments, 1, prefix); + super(type, eventInitDict); + __privateAdd(this, _eventInit3, void 0); + webidl.util.markAsUncloneable(this); + type = webidl.converters.DOMString(type, prefix, "type"); + eventInitDict = webidl.converters.ErrorEventInit(eventInitDict ?? {}); + __privateSet(this, _eventInit3, eventInitDict); + } + get message() { + webidl.brandCheck(this, _ErrorEvent); + return __privateGet(this, _eventInit3).message; + } + get filename() { + webidl.brandCheck(this, _ErrorEvent); + return __privateGet(this, _eventInit3).filename; + } + get lineno() { + webidl.brandCheck(this, _ErrorEvent); + return __privateGet(this, _eventInit3).lineno; + } + get colno() { + webidl.brandCheck(this, _ErrorEvent); + return __privateGet(this, _eventInit3).colno; + } + get error() { + webidl.brandCheck(this, _ErrorEvent); + return __privateGet(this, _eventInit3).error; + } + }; + _eventInit3 = new WeakMap(); + __name(_ErrorEvent, "ErrorEvent"); + var ErrorEvent = _ErrorEvent; + Object.defineProperties(MessageEvent.prototype, { + [Symbol.toStringTag]: { + value: "MessageEvent", + configurable: true + }, + data: kEnumerableProperty, + origin: kEnumerableProperty, + lastEventId: kEnumerableProperty, + source: kEnumerableProperty, + ports: kEnumerableProperty, + initMessageEvent: kEnumerableProperty + }); + Object.defineProperties(CloseEvent.prototype, { + [Symbol.toStringTag]: { + value: "CloseEvent", + configurable: true + }, + reason: kEnumerableProperty, + code: kEnumerableProperty, + wasClean: kEnumerableProperty + }); + Object.defineProperties(ErrorEvent.prototype, { + [Symbol.toStringTag]: { + value: "ErrorEvent", + configurable: true + }, + message: kEnumerableProperty, + filename: kEnumerableProperty, + lineno: kEnumerableProperty, + colno: kEnumerableProperty, + error: kEnumerableProperty + }); + webidl.converters.MessagePort = webidl.interfaceConverter(MessagePort); + webidl.converters["sequence"] = webidl.sequenceConverter( + webidl.converters.MessagePort + ); + var eventInit = [ + { + key: "bubbles", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "cancelable", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "composed", + converter: webidl.converters.boolean, + defaultValue: () => false + } + ]; + webidl.converters.MessageEventInit = webidl.dictionaryConverter([ + ...eventInit, + { + key: "data", + converter: webidl.converters.any, + defaultValue: () => null + }, + { + key: "origin", + converter: webidl.converters.USVString, + defaultValue: () => "" + }, + { + key: "lastEventId", + converter: webidl.converters.DOMString, + defaultValue: () => "" + }, + { + key: "source", + // Node doesn't implement WindowProxy or ServiceWorker, so the only + // valid value for source is a MessagePort. + converter: webidl.nullableConverter(webidl.converters.MessagePort), + defaultValue: () => null + }, + { + key: "ports", + converter: webidl.converters["sequence"], + defaultValue: () => new Array(0) + } + ]); + webidl.converters.CloseEventInit = webidl.dictionaryConverter([ + ...eventInit, + { + key: "wasClean", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "code", + converter: webidl.converters["unsigned short"], + defaultValue: () => 0 + }, + { + key: "reason", + converter: webidl.converters.USVString, + defaultValue: () => "" + } + ]); + webidl.converters.ErrorEventInit = webidl.dictionaryConverter([ + ...eventInit, + { + key: "message", + converter: webidl.converters.DOMString, + defaultValue: () => "" + }, + { + key: "filename", + converter: webidl.converters.USVString, + defaultValue: () => "" + }, + { + key: "lineno", + converter: webidl.converters["unsigned long"], + defaultValue: () => 0 + }, + { + key: "colno", + converter: webidl.converters["unsigned long"], + defaultValue: () => 0 + }, + { + key: "error", + converter: webidl.converters.any + } + ]); + module2.exports = { + MessageEvent, + CloseEvent, + ErrorEvent, + createFastMessageEvent + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/constants.js +var require_constants5 = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/constants.js"(exports2, module2) { + "use strict"; + init_define_process(); + var uid = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; + var staticPropertyDescriptors = { + enumerable: true, + writable: false, + configurable: false + }; + var states = { + CONNECTING: 0, + OPEN: 1, + CLOSING: 2, + CLOSED: 3 + }; + var sentCloseFrameState = { + NOT_SENT: 0, + PROCESSING: 1, + SENT: 2 + }; + var opcodes = { + CONTINUATION: 0, + TEXT: 1, + BINARY: 2, + CLOSE: 8, + PING: 9, + PONG: 10 + }; + var maxUnsigned16Bit = 2 ** 16 - 1; + var parserStates = { + INFO: 0, + PAYLOADLENGTH_16: 2, + PAYLOADLENGTH_64: 3, + READ_DATA: 4 + }; + var emptyBuffer = Buffer.allocUnsafe(0); + var sendHints = { + string: 1, + typedArray: 2, + arrayBuffer: 3, + blob: 4 + }; + module2.exports = { + uid, + sentCloseFrameState, + staticPropertyDescriptors, + states, + opcodes, + maxUnsigned16Bit, + parserStates, + emptyBuffer, + sendHints + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/symbols.js +var require_symbols5 = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/symbols.js"(exports2, module2) { + "use strict"; + init_define_process(); + module2.exports = { + kWebSocketURL: Symbol("url"), + kReadyState: Symbol("ready state"), + kController: Symbol("controller"), + kResponse: Symbol("response"), + kBinaryType: Symbol("binary type"), + kSentClose: Symbol("sent close"), + kReceivedClose: Symbol("received close"), + kByteParser: Symbol("byte parser") + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/util.js +var require_util7 = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/util.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { kReadyState, kController, kResponse, kBinaryType, kWebSocketURL } = require_symbols5(); + var { states, opcodes } = require_constants5(); + var { ErrorEvent, createFastMessageEvent } = require_events(); + var { isUtf8 } = require("buffer"); + var { collectASequenceOfCodePointsFast, removeHTTPWhitespace } = require_data_url(); + function isConnecting(ws) { + return ws[kReadyState] === states.CONNECTING; + } + __name(isConnecting, "isConnecting"); + function isEstablished(ws) { + return ws[kReadyState] === states.OPEN; + } + __name(isEstablished, "isEstablished"); + function isClosing(ws) { + return ws[kReadyState] === states.CLOSING; + } + __name(isClosing, "isClosing"); + function isClosed(ws) { + return ws[kReadyState] === states.CLOSED; + } + __name(isClosed, "isClosed"); + function fireEvent(e, target, eventFactory = (type, init) => new Event(type, init), eventInitDict = {}) { + const event = eventFactory(e, eventInitDict); + target.dispatchEvent(event); + } + __name(fireEvent, "fireEvent"); + function websocketMessageReceived(ws, type, data) { + if (ws[kReadyState] !== states.OPEN) { + return; + } + let dataForEvent; + if (type === opcodes.TEXT) { + try { + dataForEvent = utf8Decode(data); + } catch { + failWebsocketConnection(ws, "Received invalid UTF-8 in text frame."); + return; + } + } else if (type === opcodes.BINARY) { + if (ws[kBinaryType] === "blob") { + dataForEvent = new Blob([data]); + } else { + dataForEvent = toArrayBuffer(data); + } + } + fireEvent("message", ws, createFastMessageEvent, { + origin: ws[kWebSocketURL].origin, + data: dataForEvent + }); + } + __name(websocketMessageReceived, "websocketMessageReceived"); + function toArrayBuffer(buffer) { + if (buffer.byteLength === buffer.buffer.byteLength) { + return buffer.buffer; + } + return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength); + } + __name(toArrayBuffer, "toArrayBuffer"); + function isValidSubprotocol(protocol) { + if (protocol.length === 0) { + return false; + } + for (let i = 0; i < protocol.length; ++i) { + const code = protocol.charCodeAt(i); + if (code < 33 || // CTL, contains SP (0x20) and HT (0x09) + code > 126 || code === 34 || // " + code === 40 || // ( + code === 41 || // ) + code === 44 || // , + code === 47 || // / + code === 58 || // : + code === 59 || // ; + code === 60 || // < + code === 61 || // = + code === 62 || // > + code === 63 || // ? + code === 64 || // @ + code === 91 || // [ + code === 92 || // \ + code === 93 || // ] + code === 123 || // { + code === 125) { + return false; + } + } + return true; + } + __name(isValidSubprotocol, "isValidSubprotocol"); + function isValidStatusCode(code) { + if (code >= 1e3 && code < 1015) { + return code !== 1004 && // reserved + code !== 1005 && // "MUST NOT be set as a status code" + code !== 1006; + } + return code >= 3e3 && code <= 4999; + } + __name(isValidStatusCode, "isValidStatusCode"); + function failWebsocketConnection(ws, reason) { + const { [kController]: controller, [kResponse]: response } = ws; + controller.abort(); + if (response?.socket && !response.socket.destroyed) { + response.socket.destroy(); + } + if (reason) { + fireEvent("error", ws, (type, init) => new ErrorEvent(type, init), { + error: new Error(reason), + message: reason + }); + } + } + __name(failWebsocketConnection, "failWebsocketConnection"); + function isControlFrame(opcode) { + return opcode === opcodes.CLOSE || opcode === opcodes.PING || opcode === opcodes.PONG; + } + __name(isControlFrame, "isControlFrame"); + function isContinuationFrame(opcode) { + return opcode === opcodes.CONTINUATION; + } + __name(isContinuationFrame, "isContinuationFrame"); + function isTextBinaryFrame(opcode) { + return opcode === opcodes.TEXT || opcode === opcodes.BINARY; + } + __name(isTextBinaryFrame, "isTextBinaryFrame"); + function isValidOpcode(opcode) { + return isTextBinaryFrame(opcode) || isContinuationFrame(opcode) || isControlFrame(opcode); + } + __name(isValidOpcode, "isValidOpcode"); + function parseExtensions(extensions) { + const position = { position: 0 }; + const extensionList = /* @__PURE__ */ new Map(); + while (position.position < extensions.length) { + const pair = collectASequenceOfCodePointsFast(";", extensions, position); + const [name, value = ""] = pair.split("="); + extensionList.set( + removeHTTPWhitespace(name, true, false), + removeHTTPWhitespace(value, false, true) + ); + position.position++; + } + return extensionList; + } + __name(parseExtensions, "parseExtensions"); + function isValidClientWindowBits(value) { + for (let i = 0; i < value.length; i++) { + const byte = value.charCodeAt(i); + if (byte < 48 || byte > 57) { + return false; + } + } + return true; + } + __name(isValidClientWindowBits, "isValidClientWindowBits"); + var hasIntl = typeof define_process_default.versions.icu === "string"; + var fatalDecoder = hasIntl ? new TextDecoder("utf-8", { fatal: true }) : void 0; + var utf8Decode = hasIntl ? fatalDecoder.decode.bind(fatalDecoder) : function(buffer) { + if (isUtf8(buffer)) { + return buffer.toString("utf-8"); + } + throw new TypeError("Invalid utf-8 received."); + }; + module2.exports = { + isConnecting, + isEstablished, + isClosing, + isClosed, + fireEvent, + isValidSubprotocol, + isValidStatusCode, + failWebsocketConnection, + websocketMessageReceived, + utf8Decode, + isControlFrame, + isContinuationFrame, + isTextBinaryFrame, + isValidOpcode, + parseExtensions, + isValidClientWindowBits + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/frame.js +var require_frame = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/frame.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { maxUnsigned16Bit } = require_constants5(); + var BUFFER_SIZE = 16386; + var crypto; + var buffer = null; + var bufIdx = BUFFER_SIZE; + try { + crypto = require("crypto"); + } catch { + crypto = { + // not full compatibility, but minimum. + randomFillSync: /* @__PURE__ */ __name(function randomFillSync(buffer2, _offset, _size) { + for (let i = 0; i < buffer2.length; ++i) { + buffer2[i] = Math.random() * 255 | 0; + } + return buffer2; + }, "randomFillSync") + }; + } + function generateMask() { + if (bufIdx === BUFFER_SIZE) { + bufIdx = 0; + crypto.randomFillSync(buffer ??= Buffer.allocUnsafe(BUFFER_SIZE), 0, BUFFER_SIZE); + } + return [buffer[bufIdx++], buffer[bufIdx++], buffer[bufIdx++], buffer[bufIdx++]]; + } + __name(generateMask, "generateMask"); + var _WebsocketFrameSend = class _WebsocketFrameSend { + /** + * @param {Buffer|undefined} data + */ + constructor(data) { + this.frameData = data; + } + createFrame(opcode) { + const frameData = this.frameData; + const maskKey = generateMask(); + const bodyLength = frameData?.byteLength ?? 0; + let payloadLength = bodyLength; + let offset = 6; + if (bodyLength > maxUnsigned16Bit) { + offset += 8; + payloadLength = 127; + } else if (bodyLength > 125) { + offset += 2; + payloadLength = 126; + } + const buffer2 = Buffer.allocUnsafe(bodyLength + offset); + buffer2[0] = buffer2[1] = 0; + buffer2[0] |= 128; + buffer2[0] = (buffer2[0] & 240) + opcode; + buffer2[offset - 4] = maskKey[0]; + buffer2[offset - 3] = maskKey[1]; + buffer2[offset - 2] = maskKey[2]; + buffer2[offset - 1] = maskKey[3]; + buffer2[1] = payloadLength; + if (payloadLength === 126) { + buffer2.writeUInt16BE(bodyLength, 2); + } else if (payloadLength === 127) { + buffer2[2] = buffer2[3] = 0; + buffer2.writeUIntBE(bodyLength, 4, 6); + } + buffer2[1] |= 128; + for (let i = 0; i < bodyLength; ++i) { + buffer2[offset + i] = frameData[i] ^ maskKey[i & 3]; + } + return buffer2; + } + }; + __name(_WebsocketFrameSend, "WebsocketFrameSend"); + var WebsocketFrameSend = _WebsocketFrameSend; + module2.exports = { + WebsocketFrameSend + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/connection.js +var require_connection = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/connection.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { uid, states, sentCloseFrameState, emptyBuffer, opcodes } = require_constants5(); + var { + kReadyState, + kSentClose, + kByteParser, + kReceivedClose, + kResponse + } = require_symbols5(); + var { fireEvent, failWebsocketConnection, isClosing, isClosed, isEstablished, parseExtensions } = require_util7(); + var { channels } = require_diagnostics(); + var { CloseEvent } = require_events(); + var { makeRequest } = require_request(); + var { fetching } = require_fetch(); + var { Headers: Headers2, getHeadersList } = require_headers(); + var { getDecodeSplit } = require_util2(); + var { WebsocketFrameSend } = require_frame(); + var crypto; + try { + crypto = require("crypto"); + } catch { + } + function establishWebSocketConnection(url, protocols, client, ws, onEstablish, options) { + const requestURL = url; + requestURL.protocol = url.protocol === "ws:" ? "http:" : "https:"; + const request = makeRequest({ + urlList: [requestURL], + client, + serviceWorkers: "none", + referrer: "no-referrer", + mode: "websocket", + credentials: "include", + cache: "no-store", + redirect: "error" + }); + if (options.headers) { + const headersList = getHeadersList(new Headers2(options.headers)); + request.headersList = headersList; + } + const keyValue = crypto.randomBytes(16).toString("base64"); + request.headersList.append("sec-websocket-key", keyValue); + request.headersList.append("sec-websocket-version", "13"); + for (const protocol of protocols) { + request.headersList.append("sec-websocket-protocol", protocol); + } + const permessageDeflate = "permessage-deflate; client_max_window_bits"; + request.headersList.append("sec-websocket-extensions", permessageDeflate); + const controller = fetching({ + request, + useParallelQueue: true, + dispatcher: options.dispatcher, + processResponse(response) { + if (response.type === "error" || response.status !== 101) { + failWebsocketConnection(ws, "Received network error or non-101 status code."); + return; + } + if (protocols.length !== 0 && !response.headersList.get("Sec-WebSocket-Protocol")) { + failWebsocketConnection(ws, "Server did not respond with sent protocols."); + return; + } + if (response.headersList.get("Upgrade")?.toLowerCase() !== "websocket") { + failWebsocketConnection(ws, 'Server did not set Upgrade header to "websocket".'); + return; + } + if (response.headersList.get("Connection")?.toLowerCase() !== "upgrade") { + failWebsocketConnection(ws, 'Server did not set Connection header to "upgrade".'); + return; + } + const secWSAccept = response.headersList.get("Sec-WebSocket-Accept"); + const digest = crypto.createHash("sha1").update(keyValue + uid).digest("base64"); + if (secWSAccept !== digest) { + failWebsocketConnection(ws, "Incorrect hash received in Sec-WebSocket-Accept header."); + return; + } + const secExtension = response.headersList.get("Sec-WebSocket-Extensions"); + let extensions; + if (secExtension !== null) { + extensions = parseExtensions(secExtension); + if (!extensions.has("permessage-deflate")) { + failWebsocketConnection(ws, "Sec-WebSocket-Extensions header does not match."); + return; + } + } + const secProtocol = response.headersList.get("Sec-WebSocket-Protocol"); + if (secProtocol !== null) { + const requestProtocols = getDecodeSplit("sec-websocket-protocol", request.headersList); + if (!requestProtocols.includes(secProtocol)) { + failWebsocketConnection(ws, "Protocol was not set in the opening handshake."); + return; + } + } + response.socket.on("data", onSocketData); + response.socket.on("close", onSocketClose); + response.socket.on("error", onSocketError); + if (channels.open.hasSubscribers) { + channels.open.publish({ + address: response.socket.address(), + protocol: secProtocol, + extensions: secExtension + }); + } + onEstablish(response, extensions); + } + }); + return controller; + } + __name(establishWebSocketConnection, "establishWebSocketConnection"); + function closeWebSocketConnection(ws, code, reason, reasonByteLength) { + if (isClosing(ws) || isClosed(ws)) { + } else if (!isEstablished(ws)) { + failWebsocketConnection(ws, "Connection was closed before it was established."); + ws[kReadyState] = states.CLOSING; + } else if (ws[kSentClose] === sentCloseFrameState.NOT_SENT) { + ws[kSentClose] = sentCloseFrameState.PROCESSING; + const frame = new WebsocketFrameSend(); + if (code !== void 0 && reason === void 0) { + frame.frameData = Buffer.allocUnsafe(2); + frame.frameData.writeUInt16BE(code, 0); + } else if (code !== void 0 && reason !== void 0) { + frame.frameData = Buffer.allocUnsafe(2 + reasonByteLength); + frame.frameData.writeUInt16BE(code, 0); + frame.frameData.write(reason, 2, "utf-8"); + } else { + frame.frameData = emptyBuffer; + } + const socket = ws[kResponse].socket; + socket.write(frame.createFrame(opcodes.CLOSE)); + ws[kSentClose] = sentCloseFrameState.SENT; + ws[kReadyState] = states.CLOSING; + } else { + ws[kReadyState] = states.CLOSING; + } + } + __name(closeWebSocketConnection, "closeWebSocketConnection"); + function onSocketData(chunk) { + if (!this.ws[kByteParser].write(chunk)) { + this.pause(); + } + } + __name(onSocketData, "onSocketData"); + function onSocketClose() { + const { ws } = this; + const { [kResponse]: response } = ws; + response.socket.off("data", onSocketData); + response.socket.off("close", onSocketClose); + response.socket.off("error", onSocketError); + const wasClean = ws[kSentClose] === sentCloseFrameState.SENT && ws[kReceivedClose]; + let code = 1005; + let reason = ""; + const result = ws[kByteParser].closingInfo; + if (result && !result.error) { + code = result.code ?? 1005; + reason = result.reason; + } else if (!ws[kReceivedClose]) { + code = 1006; + } + ws[kReadyState] = states.CLOSED; + fireEvent("close", ws, (type, init) => new CloseEvent(type, init), { + wasClean, + code, + reason + }); + if (channels.close.hasSubscribers) { + channels.close.publish({ + websocket: ws, + code, + reason + }); + } + } + __name(onSocketClose, "onSocketClose"); + function onSocketError(error) { + const { ws } = this; + ws[kReadyState] = states.CLOSING; + if (channels.socketError.hasSubscribers) { + channels.socketError.publish(error); + } + this.destroy(); + } + __name(onSocketError, "onSocketError"); + module2.exports = { + establishWebSocketConnection, + closeWebSocketConnection + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/permessage-deflate.js +var require_permessage_deflate = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/permessage-deflate.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { createInflateRaw, Z_DEFAULT_WINDOWBITS } = require("zlib"); + var { isValidClientWindowBits } = require_util7(); + var tail = Buffer.from([0, 0, 255, 255]); + var kBuffer = Symbol("kBuffer"); + var kLength = Symbol("kLength"); + var _inflate, _options; + var _PerMessageDeflate = class _PerMessageDeflate { + constructor(extensions) { + /** @type {import('node:zlib').InflateRaw} */ + __privateAdd(this, _inflate, void 0); + __privateAdd(this, _options, {}); + __privateGet(this, _options).serverNoContextTakeover = extensions.has("server_no_context_takeover"); + __privateGet(this, _options).serverMaxWindowBits = extensions.get("server_max_window_bits"); + } + decompress(chunk, fin, callback) { + if (!__privateGet(this, _inflate)) { + let windowBits = Z_DEFAULT_WINDOWBITS; + if (__privateGet(this, _options).serverMaxWindowBits) { + if (!isValidClientWindowBits(__privateGet(this, _options).serverMaxWindowBits)) { + callback(new Error("Invalid server_max_window_bits")); + return; + } + windowBits = Number.parseInt(__privateGet(this, _options).serverMaxWindowBits); + } + __privateSet(this, _inflate, createInflateRaw({ windowBits })); + __privateGet(this, _inflate)[kBuffer] = []; + __privateGet(this, _inflate)[kLength] = 0; + __privateGet(this, _inflate).on("data", (data) => { + __privateGet(this, _inflate)[kBuffer].push(data); + __privateGet(this, _inflate)[kLength] += data.length; + }); + __privateGet(this, _inflate).on("error", (err) => { + __privateSet(this, _inflate, null); + callback(err); + }); + } + __privateGet(this, _inflate).write(chunk); + if (fin) { + __privateGet(this, _inflate).write(tail); + } + __privateGet(this, _inflate).flush(() => { + const full = Buffer.concat(__privateGet(this, _inflate)[kBuffer], __privateGet(this, _inflate)[kLength]); + __privateGet(this, _inflate)[kBuffer].length = 0; + __privateGet(this, _inflate)[kLength] = 0; + callback(null, full); + }); + } + }; + _inflate = new WeakMap(); + _options = new WeakMap(); + __name(_PerMessageDeflate, "PerMessageDeflate"); + var PerMessageDeflate = _PerMessageDeflate; + module2.exports = { PerMessageDeflate }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/receiver.js +var require_receiver = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/receiver.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { Writable } = require("stream"); + var assert = require("assert"); + var { parserStates, opcodes, states, emptyBuffer, sentCloseFrameState } = require_constants5(); + var { kReadyState, kSentClose, kResponse, kReceivedClose } = require_symbols5(); + var { channels } = require_diagnostics(); + var { + isValidStatusCode, + isValidOpcode, + failWebsocketConnection, + websocketMessageReceived, + utf8Decode, + isControlFrame, + isTextBinaryFrame, + isContinuationFrame + } = require_util7(); + var { WebsocketFrameSend } = require_frame(); + var { closeWebSocketConnection } = require_connection(); + var { PerMessageDeflate } = require_permessage_deflate(); + var _buffers, _byteOffset, _loop, _state, _info, _fragments, _extensions; + var _ByteParser = class _ByteParser extends Writable { + constructor(ws, extensions) { + super(); + __privateAdd(this, _buffers, []); + __privateAdd(this, _byteOffset, 0); + __privateAdd(this, _loop, false); + __privateAdd(this, _state, parserStates.INFO); + __privateAdd(this, _info, {}); + __privateAdd(this, _fragments, []); + /** @type {Map} */ + __privateAdd(this, _extensions, void 0); + this.ws = ws; + __privateSet(this, _extensions, extensions == null ? /* @__PURE__ */ new Map() : extensions); + if (__privateGet(this, _extensions).has("permessage-deflate")) { + __privateGet(this, _extensions).set("permessage-deflate", new PerMessageDeflate(extensions)); + } + } + /** + * @param {Buffer} chunk + * @param {() => void} callback + */ + _write(chunk, _, callback) { + __privateGet(this, _buffers).push(chunk); + __privateSet(this, _byteOffset, __privateGet(this, _byteOffset) + chunk.length); + __privateSet(this, _loop, true); + this.run(callback); + } + /** + * Runs whenever a new chunk is received. + * Callback is called whenever there are no more chunks buffering, + * or not enough bytes are buffered to parse. + */ + run(callback) { + while (__privateGet(this, _loop)) { + if (__privateGet(this, _state) === parserStates.INFO) { + if (__privateGet(this, _byteOffset) < 2) { + return callback(); + } + const buffer = this.consume(2); + const fin = (buffer[0] & 128) !== 0; + const opcode = buffer[0] & 15; + const masked = (buffer[1] & 128) === 128; + const fragmented = !fin && opcode !== opcodes.CONTINUATION; + const payloadLength = buffer[1] & 127; + const rsv1 = buffer[0] & 64; + const rsv2 = buffer[0] & 32; + const rsv3 = buffer[0] & 16; + if (!isValidOpcode(opcode)) { + failWebsocketConnection(this.ws, "Invalid opcode received"); + return callback(); + } + if (masked) { + failWebsocketConnection(this.ws, "Frame cannot be masked"); + return callback(); + } + if (rsv1 !== 0 && !__privateGet(this, _extensions).has("permessage-deflate")) { + failWebsocketConnection(this.ws, "Expected RSV1 to be clear."); + return; + } + if (rsv2 !== 0 || rsv3 !== 0) { + failWebsocketConnection(this.ws, "RSV1, RSV2, RSV3 must be clear"); + return; + } + if (fragmented && !isTextBinaryFrame(opcode)) { + failWebsocketConnection(this.ws, "Invalid frame type was fragmented."); + return; + } + if (isTextBinaryFrame(opcode) && __privateGet(this, _fragments).length > 0) { + failWebsocketConnection(this.ws, "Expected continuation frame"); + return; + } + if (__privateGet(this, _info).fragmented && fragmented) { + failWebsocketConnection(this.ws, "Fragmented frame exceeded 125 bytes."); + return; + } + if ((payloadLength > 125 || fragmented) && isControlFrame(opcode)) { + failWebsocketConnection(this.ws, "Control frame either too large or fragmented"); + return; + } + if (isContinuationFrame(opcode) && __privateGet(this, _fragments).length === 0 && !__privateGet(this, _info).compressed) { + failWebsocketConnection(this.ws, "Unexpected continuation frame"); + return; + } + if (payloadLength <= 125) { + __privateGet(this, _info).payloadLength = payloadLength; + __privateSet(this, _state, parserStates.READ_DATA); + } else if (payloadLength === 126) { + __privateSet(this, _state, parserStates.PAYLOADLENGTH_16); + } else if (payloadLength === 127) { + __privateSet(this, _state, parserStates.PAYLOADLENGTH_64); + } + if (isTextBinaryFrame(opcode)) { + __privateGet(this, _info).binaryType = opcode; + __privateGet(this, _info).compressed = rsv1 !== 0; + } + __privateGet(this, _info).opcode = opcode; + __privateGet(this, _info).masked = masked; + __privateGet(this, _info).fin = fin; + __privateGet(this, _info).fragmented = fragmented; + } else if (__privateGet(this, _state) === parserStates.PAYLOADLENGTH_16) { + if (__privateGet(this, _byteOffset) < 2) { + return callback(); + } + const buffer = this.consume(2); + __privateGet(this, _info).payloadLength = buffer.readUInt16BE(0); + __privateSet(this, _state, parserStates.READ_DATA); + } else if (__privateGet(this, _state) === parserStates.PAYLOADLENGTH_64) { + if (__privateGet(this, _byteOffset) < 8) { + return callback(); + } + const buffer = this.consume(8); + const upper = buffer.readUInt32BE(0); + if (upper > 2 ** 31 - 1) { + failWebsocketConnection(this.ws, "Received payload length > 2^31 bytes."); + return; + } + const lower = buffer.readUInt32BE(4); + __privateGet(this, _info).payloadLength = (upper << 8) + lower; + __privateSet(this, _state, parserStates.READ_DATA); + } else if (__privateGet(this, _state) === parserStates.READ_DATA) { + if (__privateGet(this, _byteOffset) < __privateGet(this, _info).payloadLength) { + return callback(); + } + const body = this.consume(__privateGet(this, _info).payloadLength); + if (isControlFrame(__privateGet(this, _info).opcode)) { + __privateSet(this, _loop, this.parseControlFrame(body)); + __privateSet(this, _state, parserStates.INFO); + } else { + if (!__privateGet(this, _info).compressed) { + __privateGet(this, _fragments).push(body); + if (!__privateGet(this, _info).fragmented && __privateGet(this, _info).fin) { + const fullMessage = Buffer.concat(__privateGet(this, _fragments)); + websocketMessageReceived(this.ws, __privateGet(this, _info).binaryType, fullMessage); + __privateGet(this, _fragments).length = 0; + } + __privateSet(this, _state, parserStates.INFO); + } else { + __privateGet(this, _extensions).get("permessage-deflate").decompress(body, __privateGet(this, _info).fin, (error, data) => { + if (error) { + closeWebSocketConnection(this.ws, 1007, error.message, error.message.length); + return; + } + __privateGet(this, _fragments).push(data); + if (!__privateGet(this, _info).fin) { + __privateSet(this, _state, parserStates.INFO); + __privateSet(this, _loop, true); + this.run(callback); + return; + } + websocketMessageReceived(this.ws, __privateGet(this, _info).binaryType, Buffer.concat(__privateGet(this, _fragments))); + __privateSet(this, _loop, true); + __privateSet(this, _state, parserStates.INFO); + __privateGet(this, _fragments).length = 0; + this.run(callback); + }); + __privateSet(this, _loop, false); + break; + } + } + } + } + } + /** + * Take n bytes from the buffered Buffers + * @param {number} n + * @returns {Buffer} + */ + consume(n) { + if (n > __privateGet(this, _byteOffset)) { + throw new Error("Called consume() before buffers satiated."); + } else if (n === 0) { + return emptyBuffer; + } + if (__privateGet(this, _buffers)[0].length === n) { + __privateSet(this, _byteOffset, __privateGet(this, _byteOffset) - __privateGet(this, _buffers)[0].length); + return __privateGet(this, _buffers).shift(); + } + const buffer = Buffer.allocUnsafe(n); + let offset = 0; + while (offset !== n) { + const next = __privateGet(this, _buffers)[0]; + const { length } = next; + if (length + offset === n) { + buffer.set(__privateGet(this, _buffers).shift(), offset); + break; + } else if (length + offset > n) { + buffer.set(next.subarray(0, n - offset), offset); + __privateGet(this, _buffers)[0] = next.subarray(n - offset); + break; + } else { + buffer.set(__privateGet(this, _buffers).shift(), offset); + offset += next.length; + } + } + __privateSet(this, _byteOffset, __privateGet(this, _byteOffset) - n); + return buffer; + } + parseCloseBody(data) { + assert(data.length !== 1); + let code; + if (data.length >= 2) { + code = data.readUInt16BE(0); + } + if (code !== void 0 && !isValidStatusCode(code)) { + return { code: 1002, reason: "Invalid status code", error: true }; + } + let reason = data.subarray(2); + if (reason[0] === 239 && reason[1] === 187 && reason[2] === 191) { + reason = reason.subarray(3); + } + try { + reason = utf8Decode(reason); + } catch { + return { code: 1007, reason: "Invalid UTF-8", error: true }; + } + return { code, reason, error: false }; + } + /** + * Parses control frames. + * @param {Buffer} body + */ + parseControlFrame(body) { + const { opcode, payloadLength } = __privateGet(this, _info); + if (opcode === opcodes.CLOSE) { + if (payloadLength === 1) { + failWebsocketConnection(this.ws, "Received close frame with a 1-byte body."); + return false; + } + __privateGet(this, _info).closeInfo = this.parseCloseBody(body); + if (__privateGet(this, _info).closeInfo.error) { + const { code, reason } = __privateGet(this, _info).closeInfo; + closeWebSocketConnection(this.ws, code, reason, reason.length); + failWebsocketConnection(this.ws, reason); + return false; + } + if (this.ws[kSentClose] !== sentCloseFrameState.SENT) { + let body2 = emptyBuffer; + if (__privateGet(this, _info).closeInfo.code) { + body2 = Buffer.allocUnsafe(2); + body2.writeUInt16BE(__privateGet(this, _info).closeInfo.code, 0); + } + const closeFrame = new WebsocketFrameSend(body2); + this.ws[kResponse].socket.write( + closeFrame.createFrame(opcodes.CLOSE), + (err) => { + if (!err) { + this.ws[kSentClose] = sentCloseFrameState.SENT; + } + } + ); + } + this.ws[kReadyState] = states.CLOSING; + this.ws[kReceivedClose] = true; + return false; + } else if (opcode === opcodes.PING) { + if (!this.ws[kReceivedClose]) { + const frame = new WebsocketFrameSend(body); + this.ws[kResponse].socket.write(frame.createFrame(opcodes.PONG)); + if (channels.ping.hasSubscribers) { + channels.ping.publish({ + payload: body + }); + } + } + } else if (opcode === opcodes.PONG) { + if (channels.pong.hasSubscribers) { + channels.pong.publish({ + payload: body + }); + } + } + return true; + } + get closingInfo() { + return __privateGet(this, _info).closeInfo; + } + }; + _buffers = new WeakMap(); + _byteOffset = new WeakMap(); + _loop = new WeakMap(); + _state = new WeakMap(); + _info = new WeakMap(); + _fragments = new WeakMap(); + _extensions = new WeakMap(); + __name(_ByteParser, "ByteParser"); + var ByteParser = _ByteParser; + module2.exports = { + ByteParser + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/sender.js +var require_sender = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/sender.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { WebsocketFrameSend } = require_frame(); + var { opcodes, sendHints } = require_constants5(); + var FixedQueue = require_fixed_queue(); + var FastBuffer = Buffer[Symbol.species]; + var _queue, _running, _socket, _run, run_fn; + var _SendQueue = class _SendQueue { + constructor(socket) { + __privateAdd(this, _run); + /** + * @type {FixedQueue} + */ + __privateAdd(this, _queue, new FixedQueue()); + /** + * @type {boolean} + */ + __privateAdd(this, _running, false); + /** @type {import('node:net').Socket} */ + __privateAdd(this, _socket, void 0); + __privateSet(this, _socket, socket); + } + add(item, cb, hint) { + if (hint !== sendHints.blob) { + const frame = createFrame(item, hint); + if (!__privateGet(this, _running)) { + __privateGet(this, _socket).write(frame, cb); + } else { + const node2 = { + promise: null, + callback: cb, + frame + }; + __privateGet(this, _queue).push(node2); + } + return; + } + const node = { + promise: item.arrayBuffer().then((ab) => { + node.promise = null; + node.frame = createFrame(ab, hint); + }), + callback: cb, + frame: null + }; + __privateGet(this, _queue).push(node); + if (!__privateGet(this, _running)) { + __privateMethod(this, _run, run_fn).call(this); + } + } + }; + _queue = new WeakMap(); + _running = new WeakMap(); + _socket = new WeakMap(); + _run = new WeakSet(); + run_fn = /* @__PURE__ */ __name(async function() { + __privateSet(this, _running, true); + const queue = __privateGet(this, _queue); + while (!queue.isEmpty()) { + const node = queue.shift(); + if (node.promise !== null) { + await node.promise; + } + __privateGet(this, _socket).write(node.frame, node.callback); + node.callback = node.frame = null; + } + __privateSet(this, _running, false); + }, "#run"); + __name(_SendQueue, "SendQueue"); + var SendQueue = _SendQueue; + function createFrame(data, hint) { + return new WebsocketFrameSend(toBuffer(data, hint)).createFrame(hint === sendHints.string ? opcodes.TEXT : opcodes.BINARY); + } + __name(createFrame, "createFrame"); + function toBuffer(data, hint) { + switch (hint) { + case sendHints.string: + return Buffer.from(data); + case sendHints.arrayBuffer: + case sendHints.blob: + return new FastBuffer(data); + case sendHints.typedArray: + return new FastBuffer(data.buffer, data.byteOffset, data.byteLength); + } + } + __name(toBuffer, "toBuffer"); + module2.exports = { SendQueue }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/websocket.js +var require_websocket = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/websocket.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { webidl } = require_webidl(); + var { URLSerializer } = require_data_url(); + var { environmentSettingsObject } = require_util2(); + var { staticPropertyDescriptors, states, sentCloseFrameState, sendHints } = require_constants5(); + var { + kWebSocketURL, + kReadyState, + kController, + kBinaryType, + kResponse, + kSentClose, + kByteParser + } = require_symbols5(); + var { + isConnecting, + isEstablished, + isClosing, + isValidSubprotocol, + fireEvent + } = require_util7(); + var { establishWebSocketConnection, closeWebSocketConnection } = require_connection(); + var { ByteParser } = require_receiver(); + var { kEnumerableProperty, isBlobLike } = require_util(); + var { getGlobalDispatcher } = require_global2(); + var { types } = require("util"); + var { ErrorEvent, CloseEvent } = require_events(); + var { SendQueue } = require_sender(); + var _events, _bufferedAmount, _protocol, _extensions, _sendQueue, _onConnectionEstablished, onConnectionEstablished_fn; + var _WebSocket = class _WebSocket extends EventTarget { + /** + * @param {string} url + * @param {string|string[]} protocols + */ + constructor(url, protocols = []) { + super(); + /** + * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol + */ + __privateAdd(this, _onConnectionEstablished); + __privateAdd(this, _events, { + open: null, + error: null, + close: null, + message: null + }); + __privateAdd(this, _bufferedAmount, 0); + __privateAdd(this, _protocol, ""); + __privateAdd(this, _extensions, ""); + /** @type {SendQueue} */ + __privateAdd(this, _sendQueue, void 0); + webidl.util.markAsUncloneable(this); + const prefix = "WebSocket constructor"; + webidl.argumentLengthCheck(arguments, 1, prefix); + const options = webidl.converters["DOMString or sequence or WebSocketInit"](protocols, prefix, "options"); + url = webidl.converters.USVString(url, prefix, "url"); + protocols = options.protocols; + const baseURL = environmentSettingsObject.settingsObject.baseUrl; + let urlRecord; + try { + urlRecord = new URL(url, baseURL); + } catch (e) { + throw new DOMException(e, "SyntaxError"); + } + if (urlRecord.protocol === "http:") { + urlRecord.protocol = "ws:"; + } else if (urlRecord.protocol === "https:") { + urlRecord.protocol = "wss:"; + } + if (urlRecord.protocol !== "ws:" && urlRecord.protocol !== "wss:") { + throw new DOMException( + `Expected a ws: or wss: protocol, got ${urlRecord.protocol}`, + "SyntaxError" + ); + } + if (urlRecord.hash || urlRecord.href.endsWith("#")) { + throw new DOMException("Got fragment", "SyntaxError"); + } + if (typeof protocols === "string") { + protocols = [protocols]; + } + if (protocols.length !== new Set(protocols.map((p) => p.toLowerCase())).size) { + throw new DOMException("Invalid Sec-WebSocket-Protocol value", "SyntaxError"); + } + if (protocols.length > 0 && !protocols.every((p) => isValidSubprotocol(p))) { + throw new DOMException("Invalid Sec-WebSocket-Protocol value", "SyntaxError"); + } + this[kWebSocketURL] = new URL(urlRecord.href); + const client = environmentSettingsObject.settingsObject; + this[kController] = establishWebSocketConnection( + urlRecord, + protocols, + client, + this, + (response, extensions) => __privateMethod(this, _onConnectionEstablished, onConnectionEstablished_fn).call(this, response, extensions), + options + ); + this[kReadyState] = _WebSocket.CONNECTING; + this[kSentClose] = sentCloseFrameState.NOT_SENT; + this[kBinaryType] = "blob"; + } + /** + * @see https://websockets.spec.whatwg.org/#dom-websocket-close + * @param {number|undefined} code + * @param {string|undefined} reason + */ + close(code = void 0, reason = void 0) { + webidl.brandCheck(this, _WebSocket); + const prefix = "WebSocket.close"; + if (code !== void 0) { + code = webidl.converters["unsigned short"](code, prefix, "code", { clamp: true }); + } + if (reason !== void 0) { + reason = webidl.converters.USVString(reason, prefix, "reason"); + } + if (code !== void 0) { + if (code !== 1e3 && (code < 3e3 || code > 4999)) { + throw new DOMException("invalid code", "InvalidAccessError"); + } + } + let reasonByteLength = 0; + if (reason !== void 0) { + reasonByteLength = Buffer.byteLength(reason); + if (reasonByteLength > 123) { + throw new DOMException( + `Reason must be less than 123 bytes; received ${reasonByteLength}`, + "SyntaxError" + ); + } + } + closeWebSocketConnection(this, code, reason, reasonByteLength); + } + /** + * @see https://websockets.spec.whatwg.org/#dom-websocket-send + * @param {NodeJS.TypedArray|ArrayBuffer|Blob|string} data + */ + send(data) { + webidl.brandCheck(this, _WebSocket); + const prefix = "WebSocket.send"; + webidl.argumentLengthCheck(arguments, 1, prefix); + data = webidl.converters.WebSocketSendData(data, prefix, "data"); + if (isConnecting(this)) { + throw new DOMException("Sent before connected.", "InvalidStateError"); + } + if (!isEstablished(this) || isClosing(this)) { + return; + } + if (typeof data === "string") { + const length = Buffer.byteLength(data); + __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) + length); + __privateGet(this, _sendQueue).add(data, () => { + __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) - length); + }, sendHints.string); + } else if (types.isArrayBuffer(data)) { + __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) + data.byteLength); + __privateGet(this, _sendQueue).add(data, () => { + __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) - data.byteLength); + }, sendHints.arrayBuffer); + } else if (ArrayBuffer.isView(data)) { + __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) + data.byteLength); + __privateGet(this, _sendQueue).add(data, () => { + __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) - data.byteLength); + }, sendHints.typedArray); + } else if (isBlobLike(data)) { + __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) + data.size); + __privateGet(this, _sendQueue).add(data, () => { + __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) - data.size); + }, sendHints.blob); + } + } + get readyState() { + webidl.brandCheck(this, _WebSocket); + return this[kReadyState]; + } + get bufferedAmount() { + webidl.brandCheck(this, _WebSocket); + return __privateGet(this, _bufferedAmount); + } + get url() { + webidl.brandCheck(this, _WebSocket); + return URLSerializer(this[kWebSocketURL]); + } + get extensions() { + webidl.brandCheck(this, _WebSocket); + return __privateGet(this, _extensions); + } + get protocol() { + webidl.brandCheck(this, _WebSocket); + return __privateGet(this, _protocol); + } + get onopen() { + webidl.brandCheck(this, _WebSocket); + return __privateGet(this, _events).open; + } + set onopen(fn) { + webidl.brandCheck(this, _WebSocket); + if (__privateGet(this, _events).open) { + this.removeEventListener("open", __privateGet(this, _events).open); + } + if (typeof fn === "function") { + __privateGet(this, _events).open = fn; + this.addEventListener("open", fn); + } else { + __privateGet(this, _events).open = null; + } + } + get onerror() { + webidl.brandCheck(this, _WebSocket); + return __privateGet(this, _events).error; + } + set onerror(fn) { + webidl.brandCheck(this, _WebSocket); + if (__privateGet(this, _events).error) { + this.removeEventListener("error", __privateGet(this, _events).error); + } + if (typeof fn === "function") { + __privateGet(this, _events).error = fn; + this.addEventListener("error", fn); + } else { + __privateGet(this, _events).error = null; + } + } + get onclose() { + webidl.brandCheck(this, _WebSocket); + return __privateGet(this, _events).close; + } + set onclose(fn) { + webidl.brandCheck(this, _WebSocket); + if (__privateGet(this, _events).close) { + this.removeEventListener("close", __privateGet(this, _events).close); + } + if (typeof fn === "function") { + __privateGet(this, _events).close = fn; + this.addEventListener("close", fn); + } else { + __privateGet(this, _events).close = null; + } + } + get onmessage() { + webidl.brandCheck(this, _WebSocket); + return __privateGet(this, _events).message; + } + set onmessage(fn) { + webidl.brandCheck(this, _WebSocket); + if (__privateGet(this, _events).message) { + this.removeEventListener("message", __privateGet(this, _events).message); + } + if (typeof fn === "function") { + __privateGet(this, _events).message = fn; + this.addEventListener("message", fn); + } else { + __privateGet(this, _events).message = null; + } + } + get binaryType() { + webidl.brandCheck(this, _WebSocket); + return this[kBinaryType]; + } + set binaryType(type) { + webidl.brandCheck(this, _WebSocket); + if (type !== "blob" && type !== "arraybuffer") { + this[kBinaryType] = "blob"; + } else { + this[kBinaryType] = type; + } + } + }; + _events = new WeakMap(); + _bufferedAmount = new WeakMap(); + _protocol = new WeakMap(); + _extensions = new WeakMap(); + _sendQueue = new WeakMap(); + _onConnectionEstablished = new WeakSet(); + onConnectionEstablished_fn = /* @__PURE__ */ __name(function(response, parsedExtensions) { + this[kResponse] = response; + const parser = new ByteParser(this, parsedExtensions); + parser.on("drain", onParserDrain); + parser.on("error", onParserError.bind(this)); + response.socket.ws = this; + this[kByteParser] = parser; + __privateSet(this, _sendQueue, new SendQueue(response.socket)); + this[kReadyState] = states.OPEN; + const extensions = response.headersList.get("sec-websocket-extensions"); + if (extensions !== null) { + __privateSet(this, _extensions, extensions); + } + const protocol = response.headersList.get("sec-websocket-protocol"); + if (protocol !== null) { + __privateSet(this, _protocol, protocol); + } + fireEvent("open", this); + }, "#onConnectionEstablished"); + __name(_WebSocket, "WebSocket"); + var WebSocket2 = _WebSocket; + WebSocket2.CONNECTING = WebSocket2.prototype.CONNECTING = states.CONNECTING; + WebSocket2.OPEN = WebSocket2.prototype.OPEN = states.OPEN; + WebSocket2.CLOSING = WebSocket2.prototype.CLOSING = states.CLOSING; + WebSocket2.CLOSED = WebSocket2.prototype.CLOSED = states.CLOSED; + Object.defineProperties(WebSocket2.prototype, { + CONNECTING: staticPropertyDescriptors, + OPEN: staticPropertyDescriptors, + CLOSING: staticPropertyDescriptors, + CLOSED: staticPropertyDescriptors, + url: kEnumerableProperty, + readyState: kEnumerableProperty, + bufferedAmount: kEnumerableProperty, + onopen: kEnumerableProperty, + onerror: kEnumerableProperty, + onclose: kEnumerableProperty, + close: kEnumerableProperty, + onmessage: kEnumerableProperty, + binaryType: kEnumerableProperty, + send: kEnumerableProperty, + extensions: kEnumerableProperty, + protocol: kEnumerableProperty, + [Symbol.toStringTag]: { + value: "WebSocket", + writable: false, + enumerable: false, + configurable: true + } + }); + Object.defineProperties(WebSocket2, { + CONNECTING: staticPropertyDescriptors, + OPEN: staticPropertyDescriptors, + CLOSING: staticPropertyDescriptors, + CLOSED: staticPropertyDescriptors + }); + webidl.converters["sequence"] = webidl.sequenceConverter( + webidl.converters.DOMString + ); + webidl.converters["DOMString or sequence"] = function(V, prefix, argument) { + if (webidl.util.Type(V) === "Object" && Symbol.iterator in V) { + return webidl.converters["sequence"](V); + } + return webidl.converters.DOMString(V, prefix, argument); + }; + webidl.converters.WebSocketInit = webidl.dictionaryConverter([ + { + key: "protocols", + converter: webidl.converters["DOMString or sequence"], + defaultValue: () => new Array(0) + }, + { + key: "dispatcher", + converter: webidl.converters.any, + defaultValue: () => getGlobalDispatcher() + }, + { + key: "headers", + converter: webidl.nullableConverter(webidl.converters.HeadersInit) + } + ]); + webidl.converters["DOMString or sequence or WebSocketInit"] = function(V) { + if (webidl.util.Type(V) === "Object" && !(Symbol.iterator in V)) { + return webidl.converters.WebSocketInit(V); + } + return { protocols: webidl.converters["DOMString or sequence"](V) }; + }; + webidl.converters.WebSocketSendData = function(V) { + if (webidl.util.Type(V) === "Object") { + if (isBlobLike(V)) { + return webidl.converters.Blob(V, { strict: false }); + } + if (ArrayBuffer.isView(V) || types.isArrayBuffer(V)) { + return webidl.converters.BufferSource(V); + } + } + return webidl.converters.USVString(V); + }; + function onParserDrain() { + this.ws[kResponse].socket.resume(); + } + __name(onParserDrain, "onParserDrain"); + function onParserError(err) { + let message; + let code; + if (err instanceof CloseEvent) { + message = err.reason; + code = err.code; + } else { + message = err.message; + } + fireEvent("error", this, () => new ErrorEvent("error", { error: err, message })); + closeWebSocketConnection(this, code); + } + __name(onParserError, "onParserError"); + module2.exports = { + WebSocket: WebSocket2 + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/eventsource/util.js +var require_util8 = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/eventsource/util.js"(exports2, module2) { + "use strict"; + init_define_process(); + function isValidLastEventId(value) { + return value.indexOf("\0") === -1; + } + __name(isValidLastEventId, "isValidLastEventId"); + function isASCIINumber(value) { + if (value.length === 0) + return false; + for (let i = 0; i < value.length; i++) { + if (value.charCodeAt(i) < 48 || value.charCodeAt(i) > 57) + return false; + } + return true; + } + __name(isASCIINumber, "isASCIINumber"); + function delay(ms) { + return new Promise((resolve) => { + setTimeout(resolve, ms).unref(); + }); + } + __name(delay, "delay"); + module2.exports = { + isValidLastEventId, + isASCIINumber, + delay + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/eventsource/eventsource-stream.js +var require_eventsource_stream = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/eventsource/eventsource-stream.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { Transform } = require("stream"); + var { isASCIINumber, isValidLastEventId } = require_util8(); + var BOM = [239, 187, 191]; + var LF = 10; + var CR = 13; + var COLON = 58; + var SPACE = 32; + var _EventSourceStream = class _EventSourceStream extends Transform { + /** + * @type {eventSourceSettings} + */ + state = null; + /** + * Leading byte-order-mark check. + * @type {boolean} + */ + checkBOM = true; + /** + * @type {boolean} + */ + crlfCheck = false; + /** + * @type {boolean} + */ + eventEndCheck = false; + /** + * @type {Buffer} + */ + buffer = null; + pos = 0; + event = { + data: void 0, + event: void 0, + id: void 0, + retry: void 0 + }; + /** + * @param {object} options + * @param {eventSourceSettings} options.eventSourceSettings + * @param {Function} [options.push] + */ + constructor(options = {}) { + options.readableObjectMode = true; + super(options); + this.state = options.eventSourceSettings || {}; + if (options.push) { + this.push = options.push; + } + } + /** + * @param {Buffer} chunk + * @param {string} _encoding + * @param {Function} callback + * @returns {void} + */ + _transform(chunk, _encoding, callback) { + if (chunk.length === 0) { + callback(); + return; + } + if (this.buffer) { + this.buffer = Buffer.concat([this.buffer, chunk]); + } else { + this.buffer = chunk; + } + if (this.checkBOM) { + switch (this.buffer.length) { + case 1: + if (this.buffer[0] === BOM[0]) { + callback(); + return; + } + this.checkBOM = false; + callback(); + return; + case 2: + if (this.buffer[0] === BOM[0] && this.buffer[1] === BOM[1]) { + callback(); + return; + } + this.checkBOM = false; + break; + case 3: + if (this.buffer[0] === BOM[0] && this.buffer[1] === BOM[1] && this.buffer[2] === BOM[2]) { + this.buffer = Buffer.alloc(0); + this.checkBOM = false; + callback(); + return; + } + this.checkBOM = false; + break; + default: + if (this.buffer[0] === BOM[0] && this.buffer[1] === BOM[1] && this.buffer[2] === BOM[2]) { + this.buffer = this.buffer.subarray(3); + } + this.checkBOM = false; + break; + } + } + while (this.pos < this.buffer.length) { + if (this.eventEndCheck) { + if (this.crlfCheck) { + if (this.buffer[this.pos] === LF) { + this.buffer = this.buffer.subarray(this.pos + 1); + this.pos = 0; + this.crlfCheck = false; + continue; + } + this.crlfCheck = false; + } + if (this.buffer[this.pos] === LF || this.buffer[this.pos] === CR) { + if (this.buffer[this.pos] === CR) { + this.crlfCheck = true; + } + this.buffer = this.buffer.subarray(this.pos + 1); + this.pos = 0; + if (this.event.data !== void 0 || this.event.event || this.event.id || this.event.retry) { + this.processEvent(this.event); + } + this.clearEvent(); + continue; + } + this.eventEndCheck = false; + continue; + } + if (this.buffer[this.pos] === LF || this.buffer[this.pos] === CR) { + if (this.buffer[this.pos] === CR) { + this.crlfCheck = true; + } + this.parseLine(this.buffer.subarray(0, this.pos), this.event); + this.buffer = this.buffer.subarray(this.pos + 1); + this.pos = 0; + this.eventEndCheck = true; + continue; + } + this.pos++; + } + callback(); + } + /** + * @param {Buffer} line + * @param {EventStreamEvent} event + */ + parseLine(line, event) { + if (line.length === 0) { + return; + } + const colonPosition = line.indexOf(COLON); + if (colonPosition === 0) { + return; + } + let field = ""; + let value = ""; + if (colonPosition !== -1) { + field = line.subarray(0, colonPosition).toString("utf8"); + let valueStart = colonPosition + 1; + if (line[valueStart] === SPACE) { + ++valueStart; + } + value = line.subarray(valueStart).toString("utf8"); + } else { + field = line.toString("utf8"); + value = ""; + } + switch (field) { + case "data": + if (event[field] === void 0) { + event[field] = value; + } else { + event[field] += ` +${value}`; + } + break; + case "retry": + if (isASCIINumber(value)) { + event[field] = value; + } + break; + case "id": + if (isValidLastEventId(value)) { + event[field] = value; + } + break; + case "event": + if (value.length > 0) { + event[field] = value; + } + break; + } + } + /** + * @param {EventSourceStreamEvent} event + */ + processEvent(event) { + if (event.retry && isASCIINumber(event.retry)) { + this.state.reconnectionTime = parseInt(event.retry, 10); + } + if (event.id && isValidLastEventId(event.id)) { + this.state.lastEventId = event.id; + } + if (event.data !== void 0) { + this.push({ + type: event.event || "message", + options: { + data: event.data, + lastEventId: this.state.lastEventId, + origin: this.state.origin + } + }); + } + } + clearEvent() { + this.event = { + data: void 0, + event: void 0, + id: void 0, + retry: void 0 + }; + } + }; + __name(_EventSourceStream, "EventSourceStream"); + var EventSourceStream = _EventSourceStream; + module2.exports = { + EventSourceStream + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/eventsource/eventsource.js +var require_eventsource = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/eventsource/eventsource.js"(exports2, module2) { + "use strict"; + init_define_process(); + var { pipeline } = require("stream"); + var { fetching } = require_fetch(); + var { makeRequest } = require_request(); + var { webidl } = require_webidl(); + var { EventSourceStream } = require_eventsource_stream(); + var { parseMIMEType } = require_data_url(); + var { createFastMessageEvent } = require_events(); + var { isNetworkError } = require_response(); + var { delay } = require_util8(); + var { kEnumerableProperty } = require_util(); + var { environmentSettingsObject } = require_util2(); + var experimentalWarned = false; + var defaultReconnectionTime = 3e3; + var CONNECTING = 0; + var OPEN = 1; + var CLOSED = 2; + var ANONYMOUS = "anonymous"; + var USE_CREDENTIALS = "use-credentials"; + var _events, _url, _withCredentials, _readyState, _request, _controller, _dispatcher, _state, _connect, connect_fn, _reconnect, reconnect_fn; + var _EventSource = class _EventSource extends EventTarget { + /** + * Creates a new EventSource object. + * @param {string} url + * @param {EventSourceInit} [eventSourceInitDict] + * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#the-eventsource-interface + */ + constructor(url, eventSourceInitDict = {}) { + super(); + __privateAdd(this, _connect); + /** + * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#sse-processing-model + * @returns {Promise} + */ + __privateAdd(this, _reconnect); + __privateAdd(this, _events, { + open: null, + error: null, + message: null + }); + __privateAdd(this, _url, null); + __privateAdd(this, _withCredentials, false); + __privateAdd(this, _readyState, CONNECTING); + __privateAdd(this, _request, null); + __privateAdd(this, _controller, null); + __privateAdd(this, _dispatcher, void 0); + /** + * @type {import('./eventsource-stream').eventSourceSettings} + */ + __privateAdd(this, _state, void 0); + webidl.util.markAsUncloneable(this); + const prefix = "EventSource constructor"; + webidl.argumentLengthCheck(arguments, 1, prefix); + if (!experimentalWarned) { + experimentalWarned = true; + define_process_default.emitWarning("EventSource is experimental, expect them to change at any time.", { + code: "UNDICI-ES" + }); + } + url = webidl.converters.USVString(url, prefix, "url"); + eventSourceInitDict = webidl.converters.EventSourceInitDict(eventSourceInitDict, prefix, "eventSourceInitDict"); + __privateSet(this, _dispatcher, eventSourceInitDict.dispatcher); + __privateSet(this, _state, { + lastEventId: "", + reconnectionTime: defaultReconnectionTime + }); + const settings = environmentSettingsObject; + let urlRecord; + try { + urlRecord = new URL(url, settings.settingsObject.baseUrl); + __privateGet(this, _state).origin = urlRecord.origin; + } catch (e) { + throw new DOMException(e, "SyntaxError"); + } + __privateSet(this, _url, urlRecord.href); + let corsAttributeState = ANONYMOUS; + if (eventSourceInitDict.withCredentials) { + corsAttributeState = USE_CREDENTIALS; + __privateSet(this, _withCredentials, true); + } + const initRequest = { + redirect: "follow", + keepalive: true, + // @see https://html.spec.whatwg.org/multipage/urls-and-fetching.html#cors-settings-attributes + mode: "cors", + credentials: corsAttributeState === "anonymous" ? "same-origin" : "omit", + referrer: "no-referrer" + }; + initRequest.client = environmentSettingsObject.settingsObject; + initRequest.headersList = [["accept", { name: "accept", value: "text/event-stream" }]]; + initRequest.cache = "no-store"; + initRequest.initiator = "other"; + initRequest.urlList = [new URL(__privateGet(this, _url))]; + __privateSet(this, _request, makeRequest(initRequest)); + __privateMethod(this, _connect, connect_fn).call(this); + } + /** + * Returns the state of this EventSource object's connection. It can have the + * values described below. + * @returns {0|1|2} + * @readonly + */ + get readyState() { + return __privateGet(this, _readyState); + } + /** + * Returns the URL providing the event stream. + * @readonly + * @returns {string} + */ + get url() { + return __privateGet(this, _url); + } + /** + * Returns a boolean indicating whether the EventSource object was + * instantiated with CORS credentials set (true), or not (false, the default). + */ + get withCredentials() { + return __privateGet(this, _withCredentials); + } + /** + * Closes the connection, if any, and sets the readyState attribute to + * CLOSED. + */ + close() { + webidl.brandCheck(this, _EventSource); + if (__privateGet(this, _readyState) === CLOSED) + return; + __privateSet(this, _readyState, CLOSED); + __privateGet(this, _controller).abort(); + __privateSet(this, _request, null); + } + get onopen() { + return __privateGet(this, _events).open; + } + set onopen(fn) { + if (__privateGet(this, _events).open) { + this.removeEventListener("open", __privateGet(this, _events).open); + } + if (typeof fn === "function") { + __privateGet(this, _events).open = fn; + this.addEventListener("open", fn); + } else { + __privateGet(this, _events).open = null; + } + } + get onmessage() { + return __privateGet(this, _events).message; + } + set onmessage(fn) { + if (__privateGet(this, _events).message) { + this.removeEventListener("message", __privateGet(this, _events).message); + } + if (typeof fn === "function") { + __privateGet(this, _events).message = fn; + this.addEventListener("message", fn); + } else { + __privateGet(this, _events).message = null; + } + } + get onerror() { + return __privateGet(this, _events).error; + } + set onerror(fn) { + if (__privateGet(this, _events).error) { + this.removeEventListener("error", __privateGet(this, _events).error); + } + if (typeof fn === "function") { + __privateGet(this, _events).error = fn; + this.addEventListener("error", fn); + } else { + __privateGet(this, _events).error = null; + } + } + }; + _events = new WeakMap(); + _url = new WeakMap(); + _withCredentials = new WeakMap(); + _readyState = new WeakMap(); + _request = new WeakMap(); + _controller = new WeakMap(); + _dispatcher = new WeakMap(); + _state = new WeakMap(); + _connect = new WeakSet(); + connect_fn = /* @__PURE__ */ __name(function() { + if (__privateGet(this, _readyState) === CLOSED) + return; + __privateSet(this, _readyState, CONNECTING); + const fetchParams = { + request: __privateGet(this, _request), + dispatcher: __privateGet(this, _dispatcher) + }; + const processEventSourceEndOfBody = /* @__PURE__ */ __name((response) => { + if (isNetworkError(response)) { + this.dispatchEvent(new Event("error")); + this.close(); + } + __privateMethod(this, _reconnect, reconnect_fn).call(this); + }, "processEventSourceEndOfBody"); + fetchParams.processResponseEndOfBody = processEventSourceEndOfBody; + fetchParams.processResponse = (response) => { + if (isNetworkError(response)) { + if (response.aborted) { + this.close(); + this.dispatchEvent(new Event("error")); + return; + } else { + __privateMethod(this, _reconnect, reconnect_fn).call(this); + return; + } + } + const contentType = response.headersList.get("content-type", true); + const mimeType = contentType !== null ? parseMIMEType(contentType) : "failure"; + const contentTypeValid = mimeType !== "failure" && mimeType.essence === "text/event-stream"; + if (response.status !== 200 || contentTypeValid === false) { + this.close(); + this.dispatchEvent(new Event("error")); + return; + } + __privateSet(this, _readyState, OPEN); + this.dispatchEvent(new Event("open")); + __privateGet(this, _state).origin = response.urlList[response.urlList.length - 1].origin; + const eventSourceStream = new EventSourceStream({ + eventSourceSettings: __privateGet(this, _state), + push: (event) => { + this.dispatchEvent(createFastMessageEvent( + event.type, + event.options + )); + } + }); + pipeline( + response.body.stream, + eventSourceStream, + (error) => { + if (error?.aborted === false) { + this.close(); + this.dispatchEvent(new Event("error")); + } + } + ); + }; + __privateSet(this, _controller, fetching(fetchParams)); + }, "#connect"); + _reconnect = new WeakSet(); + reconnect_fn = /* @__PURE__ */ __name(async function() { + if (__privateGet(this, _readyState) === CLOSED) + return; + __privateSet(this, _readyState, CONNECTING); + this.dispatchEvent(new Event("error")); + await delay(__privateGet(this, _state).reconnectionTime); + if (__privateGet(this, _readyState) !== CONNECTING) + return; + if (__privateGet(this, _state).lastEventId.length) { + __privateGet(this, _request).headersList.set("last-event-id", __privateGet(this, _state).lastEventId, true); + } + __privateMethod(this, _connect, connect_fn).call(this); + }, "#reconnect"); + __name(_EventSource, "EventSource"); + var EventSource = _EventSource; + var constantsPropertyDescriptors = { + CONNECTING: { + __proto__: null, + configurable: false, + enumerable: true, + value: CONNECTING, + writable: false + }, + OPEN: { + __proto__: null, + configurable: false, + enumerable: true, + value: OPEN, + writable: false + }, + CLOSED: { + __proto__: null, + configurable: false, + enumerable: true, + value: CLOSED, + writable: false + } + }; + Object.defineProperties(EventSource, constantsPropertyDescriptors); + Object.defineProperties(EventSource.prototype, constantsPropertyDescriptors); + Object.defineProperties(EventSource.prototype, { + close: kEnumerableProperty, + onerror: kEnumerableProperty, + onmessage: kEnumerableProperty, + onopen: kEnumerableProperty, + readyState: kEnumerableProperty, + url: kEnumerableProperty, + withCredentials: kEnumerableProperty + }); + webidl.converters.EventSourceInitDict = webidl.dictionaryConverter([ + { + key: "withCredentials", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "dispatcher", + // undici only + converter: webidl.converters.any + } + ]); + module2.exports = { + EventSource, + defaultReconnectionTime + }; + } +}); + +// ../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/index.js +var require_undici = __commonJS({ + "../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/index.js"(exports2, module2) { + "use strict"; + init_define_process(); + var Client = require_client(); + var Dispatcher = require_dispatcher(); + var Pool = require_pool(); + var BalancedPool = require_balanced_pool(); + var Agent = require_agent(); + var ProxyAgent = require_proxy_agent(); + var EnvHttpProxyAgent = require_env_http_proxy_agent(); + var RetryAgent = require_retry_agent(); + var errors = require_errors(); + var util = require_util(); + var { InvalidArgumentError } = errors; + var api = require_api(); + var buildConnector = require_connect(); + var MockClient = require_mock_client(); + var MockAgent = require_mock_agent(); + var MockPool = require_mock_pool(); + var mockErrors = require_mock_errors(); + var RetryHandler = require_retry_handler(); + var { getGlobalDispatcher, setGlobalDispatcher } = require_global2(); + var DecoratorHandler = require_decorator_handler(); + var RedirectHandler = require_redirect_handler(); + var createRedirectInterceptor = require_redirect_interceptor(); + Object.assign(Dispatcher.prototype, api); + module2.exports.Dispatcher = Dispatcher; + module2.exports.Client = Client; + module2.exports.Pool = Pool; + module2.exports.BalancedPool = BalancedPool; + module2.exports.Agent = Agent; + module2.exports.ProxyAgent = ProxyAgent; + module2.exports.EnvHttpProxyAgent = EnvHttpProxyAgent; + module2.exports.RetryAgent = RetryAgent; + module2.exports.RetryHandler = RetryHandler; + module2.exports.DecoratorHandler = DecoratorHandler; + module2.exports.RedirectHandler = RedirectHandler; + module2.exports.createRedirectInterceptor = createRedirectInterceptor; + module2.exports.interceptors = { + redirect: require_redirect(), + retry: require_retry(), + dump: require_dump() + }; + module2.exports.buildConnector = buildConnector; + module2.exports.errors = errors; + module2.exports.util = { + parseHeaders: util.parseHeaders, + headerNameToString: util.headerNameToString + }; + function makeDispatcher(fn) { + return (url, opts, handler) => { + if (typeof opts === "function") { + handler = opts; + opts = null; + } + if (!url || typeof url !== "string" && typeof url !== "object" && !(url instanceof URL)) { + throw new InvalidArgumentError("invalid url"); + } + if (opts != null && typeof opts !== "object") { + throw new InvalidArgumentError("invalid opts"); + } + if (opts && opts.path != null) { + if (typeof opts.path !== "string") { + throw new InvalidArgumentError("invalid opts.path"); + } + let path = opts.path; + if (!opts.path.startsWith("/")) { + path = `/${path}`; + } + url = new URL(util.parseOrigin(url).origin + path); + } else { + if (!opts) { + opts = typeof url === "object" ? url : {}; + } + url = util.parseURL(url); + } + const { agent, dispatcher = getGlobalDispatcher() } = opts; + if (agent) { + throw new InvalidArgumentError("unsupported opts.agent. Did you mean opts.client?"); + } + return fn.call(dispatcher, { + ...opts, + origin: url.origin, + path: url.search ? `${url.pathname}${url.search}` : url.pathname, + method: opts.method || (opts.body ? "PUT" : "GET") + }, handler); + }; + } + __name(makeDispatcher, "makeDispatcher"); + module2.exports.setGlobalDispatcher = setGlobalDispatcher; + module2.exports.getGlobalDispatcher = getGlobalDispatcher; + var fetchImpl = require_fetch().fetch; + module2.exports.fetch = /* @__PURE__ */ __name(async function fetch2(init, options = void 0) { + try { + return await fetchImpl(init, options); + } catch (err) { + if (err && typeof err === "object") { + Error.captureStackTrace(err); + } + throw err; + } + }, "fetch"); + module2.exports.Headers = require_headers().Headers; + module2.exports.Response = require_response().Response; + module2.exports.Request = require_request().Request; + module2.exports.FormData = require_formdata().FormData; + module2.exports.File = globalThis.File ?? require("buffer").File; + module2.exports.FileReader = require_filereader().FileReader; + var { setGlobalOrigin, getGlobalOrigin } = require_global(); + module2.exports.setGlobalOrigin = setGlobalOrigin; + module2.exports.getGlobalOrigin = getGlobalOrigin; + var { CacheStorage } = require_cachestorage(); + var { kConstruct } = require_symbols4(); + module2.exports.caches = new CacheStorage(kConstruct); + var { deleteCookie, getCookies, getSetCookies, setCookie } = require_cookies(); + module2.exports.deleteCookie = deleteCookie; + module2.exports.getCookies = getCookies; + module2.exports.getSetCookies = getSetCookies; + module2.exports.setCookie = setCookie; + var { parseMIMEType, serializeAMimeType } = require_data_url(); + module2.exports.parseMIMEType = parseMIMEType; + module2.exports.serializeAMimeType = serializeAMimeType; + var { CloseEvent, ErrorEvent, MessageEvent } = require_events(); + module2.exports.WebSocket = require_websocket().WebSocket; + module2.exports.CloseEvent = CloseEvent; + module2.exports.ErrorEvent = ErrorEvent; + module2.exports.MessageEvent = MessageEvent; + module2.exports.request = makeDispatcher(api.request); + module2.exports.stream = makeDispatcher(api.stream); + module2.exports.pipeline = makeDispatcher(api.pipeline); + module2.exports.connect = makeDispatcher(api.connect); + module2.exports.upgrade = makeDispatcher(api.upgrade); + module2.exports.MockClient = MockClient; + module2.exports.MockPool = MockPool; + module2.exports.MockAgent = MockAgent; + module2.exports.mockErrors = mockErrors; + var { EventSource } = require_eventsource(); + module2.exports.EventSource = EventSource; + } +}); + +// src/primitives/fetch.js +var fetch_exports = {}; +__export(fetch_exports, { + Blob: () => Blob2, + File: () => import_node_buffer.File, + FormData: () => FormData, + Headers: () => Headers, + Request: () => Request, + Response: () => Response, + WebSocket: () => WebSocket, + fetch: () => fetch +}); +function addDuplexToInit(options) { + return typeof options === "undefined" || typeof options === "object" && options.duplex === void 0 ? { duplex: "half", ...options } : options; +} +async function fetch(resource, options) { + const res = await import_undici.default.fetch(resource, addDuplexToInit(options)); + const response = new Response(res.body, res); + Object.defineProperty(response, "url", { value: res.url }); + return response; +} +var import_node_buffer, import_undici, import_response, _Request, Request, Response, Headers, FormData, WebSocket, Blob2; +var init_fetch = __esm({ + "src/primitives/fetch.js"() { + "use strict"; + init_define_process(); + import_node_buffer = require("buffer"); + import_undici = __toESM(require_undici()); + import_response = __toESM(require_response()); + __name(addDuplexToInit, "addDuplexToInit"); + _Request = class _Request extends import_undici.default.Request { + constructor(input, options) { + super(input, addDuplexToInit(options)); + } + }; + __name(_Request, "Request"); + Request = _Request; + Response = import_undici.default.Response; + Response.error = function() { + return (0, import_response.fromInnerResponse)((0, import_response.makeNetworkError)(), ""); + }; + __name(fetch, "fetch"); + ({ Headers, FormData, WebSocket } = import_undici.default); + ({ Blob: Blob2 } = globalThis); + } +}); + +// src/primitives/load.js +var load_exports = {}; +__export(load_exports, { + load: () => load +}); +module.exports = __toCommonJS(load_exports); +init_define_process(); +var import_module = __toESM(require("module")); +function load(scopedContext = {}) { + const context = {}; + Object.assign(context, { + TextDecoder, + TextEncoder, + TextEncoderStream, + TextDecoderStream, + atob, + btoa, + performance + }); + const consoleImpl = requireWithFakeGlobalScope({ + context, + id: "console.js", + sourceCode: require("./console.js.text.js"), + scopedContext + }); + Object.assign(context, { console: consoleImpl.console }); + const timersImpl = requireWithFakeGlobalScope({ + context, + id: "timers.js", + sourceCode: require("./timers.js.text.js"), + scopedContext + }); + Object.assign(context, { + setTimeout: timersImpl.setTimeout, + setInterval: timersImpl.setInterval + }); + const eventsImpl = requireWithFakeGlobalScope({ + context, + id: "events.js", + sourceCode: require("./events.js.text.js"), + scopedContext + }); + Object.assign(context, { + Event, + EventTarget, + FetchEvent: eventsImpl.FetchEvent, + // @ts-expect-error we need to add this to the type definitions maybe + PromiseRejectionEvent: eventsImpl.PromiseRejectionEvent + }); + Object.assign(context, require("./stream")); + const abortControllerImpl = requireWithFakeGlobalScope({ + context, + id: "abort-controller.js", + sourceCode: require("./abort-controller.js.text.js"), + scopedContext: { ...scopedContext } + }); + Object.assign(context, { + AbortController: abortControllerImpl.AbortController, + AbortSignal: abortControllerImpl.AbortSignal, + DOMException: abortControllerImpl.DOMException + }); + const urlImpl = requireWithFakeGlobalScope({ + context, + id: "url.js", + sourceCode: require("./url.js.text.js"), + scopedContext: { ...scopedContext } + }); + Object.assign(context, { + URL, + URLSearchParams, + URLPattern: urlImpl.URLPattern + }); + Object.assign(context, { structuredClone }); + Object.assign(context, (init_fetch(), __toCommonJS(fetch_exports))); + Object.assign(context, getCrypto(scopedContext)); + return context; +} +__name(load, "load"); +function getCrypto(scopedContext) { + if (typeof SubtleCrypto !== "undefined" || scopedContext.SubtleCrypto) { + return { + crypto: scopedContext.crypto || globalThis.crypto, + Crypto: scopedContext.Crypto || globalThis.Crypto, + CryptoKey: scopedContext.CryptoKey || globalThis.CryptoKey, + SubtleCrypto: scopedContext.SubtleCrypto || globalThis.SubtleCrypto + }; + } else { + const webcrypto = require("crypto").webcrypto; + return { + crypto: webcrypto, + Crypto: webcrypto.constructor, + CryptoKey: webcrypto.CryptoKey, + SubtleCrypto: webcrypto.subtle.constructor + }; + } +} +__name(getCrypto, "getCrypto"); +function requireWithFakeGlobalScope(params) { + const getModuleCode = `(function(module,exports,require,globalThis,${Object.keys( + params.scopedContext + ).join(",")}) {${params.sourceCode} +})`; + const module = { + exports: {}, + loaded: false, + id: params.id + }; + const moduleRequire = (import_module.default.createRequire || import_module.default.createRequireFromPath)( + __filename + ); + function throwingRequire(pathToRequire) { + if (pathToRequire.startsWith("./")) { + const moduleName = pathToRequire.replace(/^\.\//, ""); + if (!params.cache || !params.cache.has(moduleName)) { + throw new Error(`Cannot find module '${moduleName}'`); + } + return params.cache.get(moduleName).exports; + } + return moduleRequire(pathToRequire); + } + __name(throwingRequire, "throwingRequire"); + throwingRequire.resolve = moduleRequire.resolve.bind(moduleRequire); + eval(getModuleCode)( + module, + module.exports, + throwingRequire, + params.context, + ...Object.values(params.scopedContext) + ); + return module.exports; +} +__name(requireWithFakeGlobalScope, "requireWithFakeGlobalScope"); +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + load +}); diff --git a/build/node_modules/next/dist/compiled/@edge-runtime/primitives/package.json b/build/node_modules/next/dist/compiled/@edge-runtime/primitives/package.json new file mode 100644 index 0000000..4195eea --- /dev/null +++ b/build/node_modules/next/dist/compiled/@edge-runtime/primitives/package.json @@ -0,0 +1 @@ +{"name":"@edge-runtime/primitives","version":"6.0.0","main":"./index.js","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/@edge-runtime/primitives/stream.js b/build/node_modules/next/dist/compiled/@edge-runtime/primitives/stream.js new file mode 100644 index 0000000..23b7f43 --- /dev/null +++ b/build/node_modules/next/dist/compiled/@edge-runtime/primitives/stream.js @@ -0,0 +1,44 @@ +"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/primitives/stream.js +var stream_exports = {}; +__export(stream_exports, { + ReadableStream: () => import_web.ReadableStream, + ReadableStreamBYOBReader: () => import_web.ReadableStreamBYOBReader, + ReadableStreamDefaultReader: () => import_web.ReadableStreamDefaultReader, + TextDecoderStream: () => import_web.TextDecoderStream, + TextEncoderStream: () => import_web.TextEncoderStream, + TransformStream: () => import_web.TransformStream, + WritableStream: () => import_web.WritableStream, + WritableStreamDefaultWriter: () => import_web.WritableStreamDefaultWriter +}); +module.exports = __toCommonJS(stream_exports); +var import_web = require("stream/web"); +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + ReadableStream, + ReadableStreamBYOBReader, + ReadableStreamDefaultReader, + TextDecoderStream, + TextEncoderStream, + TransformStream, + WritableStream, + WritableStreamDefaultWriter +}); diff --git a/build/node_modules/next/dist/compiled/@edge-runtime/primitives/timers.js.text.js b/build/node_modules/next/dist/compiled/@edge-runtime/primitives/timers.js.text.js new file mode 100644 index 0000000..bb08993 --- /dev/null +++ b/build/node_modules/next/dist/compiled/@edge-runtime/primitives/timers.js.text.js @@ -0,0 +1 @@ +module.exports = "\"use strict\";var a=Object.defineProperty,s=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,u=Object.prototype.hasOwnProperty,l=(t,e)=>{for(var r in e)a(t,r,{get:e[r],enumerable:!0})},y=(t,e,r,p)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let o of i(e))!u.call(t,o)&&o!==r&&a(t,o,{get:()=>e[o],enumerable:!(p=s(e,o))||p.enumerable});return t},v=t=>y(a({},\"__esModule\",{value:!0}),t),n={};l(n,{setInterval:()=>m,setTimeout:()=>_});module.exports=v(n);var _=new Proxy(setTimeout,{apply:(t,e,r)=>Reflect.apply(t,e,r)[Symbol.toPrimitive]()}),m=new Proxy(setInterval,{apply:(t,e,r)=>Reflect.apply(t,e,r)[Symbol.toPrimitive]()});\n" \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/@edge-runtime/primitives/url.js.text.js b/build/node_modules/next/dist/compiled/@edge-runtime/primitives/url.js.text.js new file mode 100644 index 0000000..0eafb3e --- /dev/null +++ b/build/node_modules/next/dist/compiled/@edge-runtime/primitives/url.js.text.js @@ -0,0 +1 @@ +module.exports = "\"use strict\";var yt=Object.defineProperty,Le=Object.getOwnPropertyDescriptor,Ae=Object.getOwnPropertyNames,Te=Object.prototype.hasOwnProperty,h=(t,e)=>yt(t,\"name\",{value:e,configurable:!0}),Ue=(t,e)=>{for(var s in e)yt(t,s,{get:e[s],enumerable:!0})},Me=(t,e,s,r)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let c of Ae(e))!Te.call(t,c)&&c!==s&&yt(t,c,{get:()=>e[c],enumerable:!(r=Le(e,c))||r.enumerable});return t},Ie=t=>Me(yt({},\"__esModule\",{value:!0}),t),Ht=(t,e,s)=>{if(!e.has(t))throw TypeError(\"Cannot \"+s)},i=(t,e,s)=>(Ht(t,e,\"read from private field\"),s?s.call(t):e.get(t)),p=(t,e,s)=>{if(e.has(t))throw TypeError(\"Cannot add the same private member more than once\");e instanceof WeakSet?e.add(t):e.set(t,s)},v=(t,e,s,r)=>(Ht(t,e,\"write to private field\"),r?r.call(t,s):e.set(t,s),s),a=(t,e,s)=>(Ht(t,e,\"access private method\"),s),oe={};Ue(oe,{URLPattern:()=>Oe});module.exports=Ie(oe);var xt,ut=(xt=class{type=3;name=\"\";prefix=\"\";value=\"\";suffix=\"\";modifier=3;constructor(t,e,s,r,c,f){this.type=t,this.name=e,this.prefix=s,this.value=r,this.suffix=c,this.modifier=f}hasCustomName(){return this.name!==\"\"&&typeof this.name!=\"number\"}},h(xt,\"R\"),xt),De=/[$_\\p{ID_Start}]/u,Ne=/[$_\\u200C\\u200D\\p{ID_Continue}]/u,Dt=\".*\";function le(t,e){return(e?/^[\\x00-\\xFF]*$/:/^[\\x00-\\x7F]*$/).test(t)}h(le,\"Re\");function Ft(t,e=!1){let s=[],r=0;for(;r{if(lo(\"OTHER_MODIFIER\")??o(\"ASTERISK\"),\"f\"),L=h(w=>{let b=o(w);if(b!==void 0)return b;let{type:$,index:J}=s[l];throw new TypeError(`Unexpected ${$} at ${J}, expected ${w}`)},\"d\"),z=h(()=>{let w=\"\",b;for(;b=o(\"CHAR\")??o(\"ESCAPED_CHAR\");)w+=b;return w},\"T\"),Pe=h(w=>w,\"Se\"),ft=e.encodePart||Pe,pt=\"\",bt=h(w=>{pt+=w},\"U\"),kt=h(()=>{pt.length&&(c.push(new ut(3,\"\",\"\",ft(pt),\"\",3)),pt=\"\")},\"$\"),Bt=h((w,b,$,J,I)=>{let O=3;switch(I){case\"?\":O=1;break;case\"*\":O=0;break;case\"+\":O=2;break}if(!b&&!$&&O===3){bt(w);return}if(kt(),!b&&!$){if(!w)return;c.push(new ut(3,\"\",\"\",ft(w),\"\",O));return}let S;$?$===\"*\"?S=Dt:S=$:S=r;let et=2;S===r?(et=1,S=\"\"):S===Dt&&(et=0,S=\"\");let D;if(b?D=b:$&&(D=f++),u.has(D))throw new TypeError(`Duplicate name '${D}'.`);u.add(D),c.push(new ut(et,D,ft(w),S,ft(J),O))},\"V\");for(;l-1)}return l||(r+=`(?=${f}|${c})`),new RegExp(r,Nt(s))}h(Kt,\"F\");var H={delimiter:\"\",prefixes:\"\",sensitive:!0,strict:!0},je={delimiter:\".\",prefixes:\"\",sensitive:!0,strict:!0},He={delimiter:\"/\",prefixes:\"/\",sensitive:!0,strict:!0};function ue(t,e){return t.length?t[0]===\"/\"?!0:!e||t.length<2?!1:(t[0]==\"\\\\\"||t[0]==\"{\")&&t[1]==\"/\":!1}h(ue,\"J\");function Xt(t,e){return t.startsWith(e)?t.substring(e.length,t.length):t}h(Xt,\"Q\");function fe(t,e){return t.endsWith(e)?t.substr(0,t.length-e.length):t}h(fe,\"Ee\");function Vt(t){return!t||t.length<2?!1:t[0]===\"[\"||(t[0]===\"\\\\\"||t[0]===\"{\")&&t[1]===\"[\"}h(Vt,\"W\");var pe=[\"ftp\",\"file\",\"http\",\"https\",\"ws\",\"wss\"];function zt(t){if(!t)return!0;for(let e of pe)if(t.test(e))return!0;return!1}h(zt,\"N\");function de(t,e){if(t=Xt(t,\"#\"),e||t===\"\")return t;let s=new URL(\"https://example.com\");return s.hash=t,s.hash?s.hash.substring(1,s.hash.length):\"\"}h(de,\"te\");function me(t,e){if(t=Xt(t,\"?\"),e||t===\"\")return t;let s=new URL(\"https://example.com\");return s.search=t,s.search?s.search.substring(1,s.search.length):\"\"}h(me,\"re\");function we(t,e){return e||t===\"\"?t:Vt(t)?Qt(t):Zt(t)}h(we,\"ne\");function ge(t,e){if(e||t===\"\")return t;let s=new URL(\"https://example.com\");return s.password=t,s.password}h(ge,\"se\");function ve(t,e){if(e||t===\"\")return t;let s=new URL(\"https://example.com\");return s.username=t,s.username}h(ve,\"ie\");function ye(t,e,s){if(s||t===\"\")return t;if(e&&!pe.includes(e))return new URL(`${e}:${t}`).pathname;let r=t[0]==\"/\";return t=new URL(r?t:\"/-\"+t,\"https://example.com\").pathname,r||(t=t.substring(2,t.length)),t}h(ye,\"ae\");function _e(t,e,s){return Jt(e)===t&&(t=\"\"),s||t===\"\"?t:qt(t)}h(_e,\"oe\");function be(t,e){return t=fe(t,\":\"),e||t===\"\"?t:_t(t)}h(be,\"ce\");function Jt(t){switch(t){case\"ws\":case\"http\":return\"80\";case\"wws\":case\"https\":return\"443\";case\"ftp\":return\"21\";default:return\"\"}}h(Jt,\"_\");function _t(t){if(t===\"\")return t;if(/^[-+.A-Za-z0-9]*$/.test(t))return t.toLowerCase();throw new TypeError(`Invalid protocol '${t}'.`)}h(_t,\"y\");function ke(t){if(t===\"\")return t;let e=new URL(\"https://example.com\");return e.username=t,e.username}h(ke,\"le\");function xe(t){if(t===\"\")return t;let e=new URL(\"https://example.com\");return e.password=t,e.password}h(xe,\"fe\");function Zt(t){if(t===\"\")return t;if(/[\\t\\n\\r #%/:<>?@[\\]^\\\\|]/g.test(t))throw new TypeError(`Invalid hostname '${t}'`);let e=new URL(\"https://example.com\");return e.hostname=t,e.hostname}h(Zt,\"z\");function Qt(t){if(t===\"\")return t;if(/[^0-9a-fA-F[\\]:]/g.test(t))throw new TypeError(`Invalid IPv6 hostname '${t}'`);return t.toLowerCase()}h(Qt,\"j\");function qt(t){if(t===\"\"||/^[0-9]*$/.test(t)&&parseInt(t)<=65535)return t;throw new TypeError(`Invalid port '${t}'.`)}h(qt,\"K\");function $e(t){if(t===\"\")return t;let e=new URL(\"https://example.com\");return e.pathname=t[0]!==\"/\"?\"/-\"+t:t,t[0]!==\"/\"?e.pathname.substring(2,e.pathname.length):e.pathname}h($e,\"he\");function Ee(t){return t===\"\"?t:new URL(`data:${t}`).pathname}h(Ee,\"ue\");function Re(t){if(t===\"\")return t;let e=new URL(\"https://example.com\");return e.search=t,e.search.substring(1,e.search.length)}h(Re,\"de\");function Se(t){if(t===\"\")return t;let e=new URL(\"https://example.com\");return e.hash=t,e.hash.substring(1,e.hash.length)}h(Se,\"pe\");var st,k,y,d,Z,it,W,F,G,nt,m,g,$t,Yt,dt,Et,Q,rt,at,mt,E,C,wt,Rt,St,te,ht,gt,Wt,ee,Ct,se,ot,vt,K,q,N,X,Ot,ie,Pt,ne,Lt,re,At,ae,P,A,Tt,he,Ut,Fe=(Ut=class{constructor(t){p(this,m),p(this,$t),p(this,dt),p(this,Q),p(this,at),p(this,E),p(this,wt),p(this,St),p(this,ht),p(this,Wt),p(this,Ct),p(this,ot),p(this,K),p(this,N),p(this,Ot),p(this,Pt),p(this,Lt),p(this,At),p(this,P),p(this,Tt),p(this,st,void 0),p(this,k,[]),p(this,y,{}),p(this,d,0),p(this,Z,1),p(this,it,0),p(this,W,0),p(this,F,0),p(this,G,0),p(this,nt,!1),v(this,st,t)}get result(){return i(this,y)}parse(){for(v(this,k,Ft(i(this,st),!0));i(this,d)0)if(a(this,Pt,ne).call(this))v(this,F,i(this,F)-1);else continue;if(a(this,Ot,ie).call(this)){v(this,F,i(this,F)+1);continue}switch(i(this,W)){case 0:a(this,wt,Rt).call(this)&&a(this,Q,rt).call(this,1);break;case 1:if(a(this,wt,Rt).call(this)){a(this,Tt,he).call(this);let t=7,e=1;a(this,St,te).call(this)?(t=2,e=3):i(this,nt)&&(t=2),a(this,m,g).call(this,t,e)}break;case 2:a(this,ht,gt).call(this)?a(this,Q,rt).call(this,3):(a(this,ot,vt).call(this)||a(this,K,q).call(this)||a(this,N,X).call(this))&&a(this,Q,rt).call(this,5);break;case 3:a(this,Wt,ee).call(this)?a(this,m,g).call(this,4,1):a(this,ht,gt).call(this)&&a(this,m,g).call(this,5,1);break;case 4:a(this,ht,gt).call(this)&&a(this,m,g).call(this,5,1);break;case 5:a(this,Lt,re).call(this)?v(this,G,i(this,G)+1):a(this,At,ae).call(this)&&v(this,G,i(this,G)-1),a(this,Ct,se).call(this)&&!i(this,G)?a(this,m,g).call(this,6,1):a(this,ot,vt).call(this)?a(this,m,g).call(this,7,0):a(this,K,q).call(this)?a(this,m,g).call(this,8,1):a(this,N,X).call(this)&&a(this,m,g).call(this,9,1);break;case 6:a(this,ot,vt).call(this)?a(this,m,g).call(this,7,0):a(this,K,q).call(this)?a(this,m,g).call(this,8,1):a(this,N,X).call(this)&&a(this,m,g).call(this,9,1);break;case 7:a(this,K,q).call(this)?a(this,m,g).call(this,8,1):a(this,N,X).call(this)&&a(this,m,g).call(this,9,1);break;case 8:a(this,N,X).call(this)&&a(this,m,g).call(this,9,1);break;case 9:break;case 10:break}}i(this,y).hostname!==void 0&&i(this,y).port===void 0&&(i(this,y).port=\"\")}},st=new WeakMap,k=new WeakMap,y=new WeakMap,d=new WeakMap,Z=new WeakMap,it=new WeakMap,W=new WeakMap,F=new WeakMap,G=new WeakMap,nt=new WeakMap,m=new WeakSet,g=h(function(t,e){switch(i(this,W)){case 0:break;case 1:i(this,y).protocol=a(this,P,A).call(this);break;case 2:break;case 3:i(this,y).username=a(this,P,A).call(this);break;case 4:i(this,y).password=a(this,P,A).call(this);break;case 5:i(this,y).hostname=a(this,P,A).call(this);break;case 6:i(this,y).port=a(this,P,A).call(this);break;case 7:i(this,y).pathname=a(this,P,A).call(this);break;case 8:i(this,y).search=a(this,P,A).call(this);break;case 9:i(this,y).hash=a(this,P,A).call(this);break;case 10:break}i(this,W)!==0&&t!==10&&([1,2,3,4].includes(i(this,W))&&[6,7,8,9].includes(t)&&(i(this,y).hostname??=\"\"),[1,2,3,4,5,6].includes(i(this,W))&&[8,9].includes(t)&&(i(this,y).pathname??=i(this,nt)?\"/\":\"\"),[1,2,3,4,5,6,7].includes(i(this,W))&&t===9&&(i(this,y).search??=\"\")),a(this,$t,Yt).call(this,t,e)},\"#r\"),$t=new WeakSet,Yt=h(function(t,e){v(this,W,t),v(this,it,i(this,d)+e),v(this,d,i(this,d)+e),v(this,Z,0)},\"#R\"),dt=new WeakSet,Et=h(function(){v(this,d,i(this,it)),v(this,Z,0)},\"#b\"),Q=new WeakSet,rt=h(function(t){a(this,dt,Et).call(this),v(this,W,t)},\"#u\"),at=new WeakSet,mt=h(function(t){return t<0&&(t=i(this,k).length-t),t=0&&(t.pathname=U(r.pathname.substring(0,c+1),s)+t.pathname)}t.pathname=ye(t.pathname,t.protocol,s)}return typeof e.search==\"string\"&&(t.search=me(e.search,s)),typeof e.hash==\"string\"&&(t.hash=de(e.hash,s)),t}h(Y,\"w\");function tt(t){return t.replace(/([+*?:{}()\\\\])/g,\"\\\\$1\")}h(tt,\"C\");function We(t){return t.replace(/([.+*?^${}()[\\]|/\\\\])/g,\"\\\\$1\")}h(We,\"Oe\");function Ce(t,e){e.delimiter??=\"/#?\",e.prefixes??=\"./\",e.sensitive??=!1,e.strict??=!1,e.end??=!0,e.start??=!0,e.endsWith=\"\";let s=\".*\",r=`[^${We(e.delimiter)}]+?`,c=/[$_\\u200C\\u200D\\p{ID_Continue}]/u,f=\"\";for(let l=0;l0?t[l-1]:null,L=l0?L.value[0]:\"\";o=c.test(z)}else o=!L.hasCustomName();if(!o&&!n.prefix.length&&x&&x.type===3){let z=x.value[x.value.length-1];o=e.prefixes.includes(z)}o&&(f+=\"{\"),f+=tt(n.prefix),u&&(f+=`:${n.name}`),n.type===2?f+=`(${n.value})`:n.type===1?u||(f+=`(${r})`):n.type===0&&(!u&&(!x||x.type===3||x.modifier!==3||o||n.prefix!==\"\")?f+=\"*\":f+=`(${s})`),n.type===1&&u&&n.suffix.length&&c.test(n.suffix[0])&&(f+=\"\\\\\"),f+=tt(n.suffix),o&&(f+=\"}\"),n.modifier!==3&&(f+=V(n.modifier))}return f}h(Ce,\"ke\");var M,B,lt,_,T,ct,It,Oe=(It=class{constructor(t={},e,s){p(this,M,void 0),p(this,B,{}),p(this,lt,{}),p(this,_,{}),p(this,T,{}),p(this,ct,!1);try{let r;if(typeof e==\"string\"?r=e:s=e,typeof t==\"string\"){let n=new Fe(t);if(n.parse(),t=n.result,r===void 0&&typeof t.protocol!=\"string\")throw new TypeError(\"A base URL must be provided for a relative constructor string.\");t.baseURL=r}else{if(!t||typeof t!=\"object\")throw new TypeError(\"parameter 1 is not of type 'string' and cannot convert to dictionary.\");if(r)throw new TypeError(\"parameter 1 is not of type 'string'.\")}typeof s>\"u\"&&(s={ignoreCase:!1});let c={ignoreCase:s.ignoreCase===!0};v(this,M,Y({pathname:j,protocol:j,username:j,password:j,hostname:j,port:j,search:j,hash:j},t,!0)),Jt(i(this,M).protocol)===i(this,M).port&&(i(this,M).port=\"\");let l;for(l of Mt){if(!(l in i(this,M)))continue;let n={},u=i(this,M)[l];switch(i(this,lt)[l]=[],l){case\"protocol\":Object.assign(n,H),n.encodePart=_t;break;case\"username\":Object.assign(n,H),n.encodePart=ke;break;case\"password\":Object.assign(n,H),n.encodePart=xe;break;case\"hostname\":Object.assign(n,je),Vt(u)?n.encodePart=Qt:n.encodePart=Zt;break;case\"port\":Object.assign(n,H),n.encodePart=qt;break;case\"pathname\":zt(i(this,B).protocol)?(Object.assign(n,He,c),n.encodePart=$e):(Object.assign(n,H,c),n.encodePart=Ee);break;case\"search\":Object.assign(n,H,c),n.encodePart=Re;break;case\"hash\":Object.assign(n,H,c),n.encodePart=Se;break}try{i(this,T)[l]=Gt(u,n),i(this,B)[l]=Kt(i(this,T)[l],i(this,lt)[l],n),i(this,_)[l]=Ce(i(this,T)[l],n),v(this,ct,i(this,ct)||i(this,T)[l].some(o=>o.type===2))}catch{throw new TypeError(`invalid ${l} pattern '${i(this,M)[l]}'.`)}}}catch(r){throw new TypeError(`Failed to construct 'URLPattern': ${r.message}`)}}test(t={},e){let s={pathname:\"\",protocol:\"\",username:\"\",password:\"\",hostname:\"\",port:\"\",search:\"\",hash:\"\"};if(typeof t!=\"string\"&&e)throw new TypeError(\"parameter 1 is not of type 'string'.\");if(typeof t>\"u\")return!1;try{typeof t==\"object\"?s=Y(s,t,!1):s=Y(s,jt(t,e),!1)}catch{return!1}let r;for(r of Mt)if(!i(this,B)[r].exec(s[r]))return!1;return!0}exec(t={},e){let s={pathname:\"\",protocol:\"\",username:\"\",password:\"\",hostname:\"\",port:\"\",search:\"\",hash:\"\"};if(typeof t!=\"string\"&&e)throw new TypeError(\"parameter 1 is not of type 'string'.\");if(typeof t>\"u\")return;try{typeof t==\"object\"?s=Y(s,t,!1):s=Y(s,jt(t,e),!1)}catch{return null}let r={};e?r.inputs=[t,e]:r.inputs=[t];let c;for(c of Mt){let f=i(this,B)[c].exec(s[c]);if(!f)return null;let l={};for(let[n,u]of i(this,lt)[c].entries())if(typeof u==\"string\"||typeof u==\"number\"){let o=f[n+1];l[u]=o}r[c]={input:s[c]??\"\",groups:l}}return r}static compareComponent(t,e,s){let r=h((n,u)=>{for(let o of[\"type\",\"modifier\",\"prefix\",\"value\",\"suffix\"]){if(n[o]{let o=0;for(;o{"use strict";var e={298:(e,t,r)=>{const n=r(135);const o=r(749);const s={};t.selection=function(e,r,n){const o=t.selections(e,r,n);return o.length?o[0]:""};t.selections=function(e,t,r){n.assert(!t||Array.isArray(t),"Preferences must be an array");return s.parse(e||"",t,r)};s.parse=function(e,t,r){const n=e.replace(/[ \t]/g,"");const a=new Map;if(t){let e=0;for(const n of t){const t=n.toLowerCase();a.set(t,{orig:n,pos:e++});if(r.prefixMatch){const r=t.split("-");while(r.pop(),r.length>0){const t=r.join("-");if(!a.has(t)){a.set(t,{orig:n,pos:e++})}}}}}const i=n.split(",");const u=[];const c=new Set;for(let e=0;e2){throw o.badRequest(`Invalid ${r.type} header`)}let f=s[0].toLowerCase();if(!f){throw o.badRequest(`Invalid ${r.type} header`)}if(r.equivalents&&r.equivalents.has(f)){f=r.equivalents.get(f)}const l={token:f,pos:e,q:1};if(t&&a.has(f)){l.pref=a.get(f).pos}c.add(l.token);if(s.length===2){const e=s[1];const[t,n]=e.split("=");if(!n||t!=="q"&&t!=="Q"){throw o.badRequest(`Invalid ${r.type} header`)}const a=parseFloat(n);if(a===0){continue}if(Number.isFinite(a)&&a<=1&&a>=.001){l.q=a}}u.push(l)}u.sort(s.sort);const f=u.map((e=>e.token));if(r.default&&!c.has(r.default)){f.push(r.default)}if(!t||!t.length){return f}const l=[];for(const e of f){if(e==="*"){for(const[e,t]of a){if(!c.has(e)){l.push(t.orig)}}}else{const t=e.toLowerCase();if(a.has(t)){l.push(a.get(t).orig)}}}return l};s.sort=function(e,t){const r=-1;const n=1;if(t.q!==e.q){return t.q-e.q}if(t.pref!==e.pref){if(e.pref===undefined){return n}if(t.pref===undefined){return r}return e.pref-t.pref}return e.pos-t.pos}},538:(e,t,r)=>{const n=r(298);const o=r(305);const s={options:{charset:{type:"accept-charset"},encoding:{type:"accept-encoding",default:"identity",equivalents:new Map([["x-compress","compress"],["x-gzip","gzip"]])},language:{type:"accept-language",prefixMatch:true}}};for(const e in s.options){t[e]=(t,r)=>n.selection(t,r,s.options[e]);t[`${e}s`]=(t,r)=>n.selections(t,r,s.options[e])}t.mediaType=(e,t)=>o.selection(e,t);t.mediaTypes=(e,t)=>o.selections(e,t);t.parseAll=function(e){return{charsets:t.charsets(e["accept-charset"]),encodings:t.encodings(e["accept-encoding"]),languages:t.languages(e["accept-language"]),mediaTypes:t.mediaTypes(e.accept)}}},305:(e,t,r)=>{const n=r(135);const o=r(749);const s={};t.selection=function(e,r){const n=t.selections(e,r);return n.length?n[0]:""};t.selections=function(e,t){n.assert(!t||Array.isArray(t),"Preferences must be an array");return s.parse(e,t)};s.validMediaRx=/^(?:\*\/\*)|(?:[\w\!#\$%&'\*\+\-\.\^`\|~]+\/\*)|(?:[\w\!#\$%&'\*\+\-\.\^`\|~]+\/[\w\!#\$%&'\*\+\-\.\^`\|~]+)$/;s.parse=function(e,t){const{header:r,quoted:n}=s.normalize(e);const a=r.split(",");const i=[];const u={};for(let e=0;e1||s<.001&&s!==0){s=1}f.q=s}else{if(s[0]==='"'){s=`"${n[s]}"`}f[l][t[0]]=s}}const p=Object.keys(f.params);f.original=[""].concat(p.map((e=>`${e}=${f.params[e]}`))).join(";");f.specificity=p.length;if(f.q===undefined){f.q=1}const d=f.token.split("/");f.type=d[0];f.subtype=d[1];u[f.token]=f;if(f.q){i.push(f)}}i.sort(s.sort);return s.preferences(u,i,t)};s.normalize=function(e){e=e||"*/*";const t={header:e,quoted:{}};if(e.includes('"')){let r=0;t.header=e.replace(/="([^"]*)"/g,((e,n)=>{const o='"'+ ++r;t.quoted[o]=n;return"="+o}))}t.header=t.header.replace(/[ \t]/g,"");return t};s.sort=function(e,t){if(t.q!==e.q){return t.q-e.q}if(e.type!==t.type){return s.innerSort(e,t,"type")}if(e.subtype!==t.subtype){return s.innerSort(e,t,"subtype")}if(e.specificity!==t.specificity){return t.specificity-e.specificity}return e.pos-t.pos};s.innerSort=function(e,t,r){const n=-1;const o=1;if(e[r]==="*"){return o}if(t[r]==="*"){return n}return e[r]e.token+e.original))}const o=Object.create(null);const s=Object.create(null);let a=false;for(const e of r){const t=e.toLowerCase();s[t]=e;const r=t.split("/");const i=r[0];const u=r[1];if(i==="*"){n.assert(u==="*","Invalid media type preference contains wildcard type with a subtype");a=true;continue}o[i]=o[i]||Object.create(null);o[i][u]=e}const i=[];for(const r of t){const t=r.token;const{type:n,subtype:u}=e[t];const c=o[n];if(n==="*"){for(const t of Object.keys(s)){if(!e[t]){i.push(s[t])}}if(a){i.push("*/*")}continue}if(a){i.push((s[t]||t)+r.original);continue}if(u!=="*"){const e=s[t];if(e||c&&c["*"]){i.push((e||t)+r.original)}continue}if(c){for(const t of Object.keys(c)){if(!e[`${n}/${t}`]){i.push(c[t])}}}}return i}},749:(e,t,r)=>{const n=r(135);const o={codes:new Map([[100,"Continue"],[101,"Switching Protocols"],[102,"Processing"],[200,"OK"],[201,"Created"],[202,"Accepted"],[203,"Non-Authoritative Information"],[204,"No Content"],[205,"Reset Content"],[206,"Partial Content"],[207,"Multi-Status"],[300,"Multiple Choices"],[301,"Moved Permanently"],[302,"Moved Temporarily"],[303,"See Other"],[304,"Not Modified"],[305,"Use Proxy"],[307,"Temporary Redirect"],[400,"Bad Request"],[401,"Unauthorized"],[402,"Payment Required"],[403,"Forbidden"],[404,"Not Found"],[405,"Method Not Allowed"],[406,"Not Acceptable"],[407,"Proxy Authentication Required"],[408,"Request Time-out"],[409,"Conflict"],[410,"Gone"],[411,"Length Required"],[412,"Precondition Failed"],[413,"Request Entity Too Large"],[414,"Request-URI Too Large"],[415,"Unsupported Media Type"],[416,"Requested Range Not Satisfiable"],[417,"Expectation Failed"],[418,"I'm a teapot"],[422,"Unprocessable Entity"],[423,"Locked"],[424,"Failed Dependency"],[425,"Too Early"],[426,"Upgrade Required"],[428,"Precondition Required"],[429,"Too Many Requests"],[431,"Request Header Fields Too Large"],[451,"Unavailable For Legal Reasons"],[500,"Internal Server Error"],[501,"Not Implemented"],[502,"Bad Gateway"],[503,"Service Unavailable"],[504,"Gateway Time-out"],[505,"HTTP Version Not Supported"],[506,"Variant Also Negotiates"],[507,"Insufficient Storage"],[509,"Bandwidth Limit Exceeded"],[510,"Not Extended"],[511,"Network Authentication Required"]])};t.Boom=class extends Error{constructor(e,r={}){if(e instanceof Error){return t.boomify(n.clone(e),r)}const{statusCode:s=500,data:a=null,ctor:i=t.Boom}=r;const u=new Error(e?e:undefined);Error.captureStackTrace(u,i);u.data=a;const c=o.initialize(u,s);Object.defineProperty(c,"typeof",{value:i});if(r.decorate){Object.assign(c,r.decorate)}return c}static[Symbol.hasInstance](e){return t.isBoom(e)}};t.isBoom=function(e,t){return e instanceof Error&&!!e.isBoom&&(!t||e.output.statusCode===t)};t.boomify=function(e,t){n.assert(e instanceof Error,"Cannot wrap non-Error object");t=t||{};if(t.data!==undefined){e.data=t.data}if(t.decorate){Object.assign(e,t.decorate)}if(!e.isBoom){return o.initialize(e,t.statusCode||500,t.message)}if(t.override===false||!t.statusCode&&!t.message){return e}return o.initialize(e,t.statusCode||e.output.statusCode,t.message)};t.badRequest=function(e,r){return new t.Boom(e,{statusCode:400,data:r,ctor:t.badRequest})};t.unauthorized=function(e,r,o){const s=new t.Boom(e,{statusCode:401,ctor:t.unauthorized});if(!r){return s}if(typeof r!=="string"){s.output.headers["WWW-Authenticate"]=r.join(", ");return s}let a=`${r}`;if(o||e){s.output.payload.attributes={}}if(o){if(typeof o==="string"){a+=" "+n.escapeHeaderAttribute(o);s.output.payload.attributes=o}else{a+=" "+Object.keys(o).map((e=>{let t=o[e];if(t===null||t===undefined){t=""}s.output.payload.attributes[e]=t;return`${e}="${n.escapeHeaderAttribute(t.toString())}"`})).join(", ")}}if(e){if(o){a+=","}a+=` error="${n.escapeHeaderAttribute(e)}"`;s.output.payload.attributes.error=e}else{s.isMissing=true}s.output.headers["WWW-Authenticate"]=a;return s};t.paymentRequired=function(e,r){return new t.Boom(e,{statusCode:402,data:r,ctor:t.paymentRequired})};t.forbidden=function(e,r){return new t.Boom(e,{statusCode:403,data:r,ctor:t.forbidden})};t.notFound=function(e,r){return new t.Boom(e,{statusCode:404,data:r,ctor:t.notFound})};t.methodNotAllowed=function(e,r,n){const o=new t.Boom(e,{statusCode:405,data:r,ctor:t.methodNotAllowed});if(typeof n==="string"){n=[n]}if(Array.isArray(n)){o.output.headers.Allow=n.join(", ")}return o};t.notAcceptable=function(e,r){return new t.Boom(e,{statusCode:406,data:r,ctor:t.notAcceptable})};t.proxyAuthRequired=function(e,r){return new t.Boom(e,{statusCode:407,data:r,ctor:t.proxyAuthRequired})};t.clientTimeout=function(e,r){return new t.Boom(e,{statusCode:408,data:r,ctor:t.clientTimeout})};t.conflict=function(e,r){return new t.Boom(e,{statusCode:409,data:r,ctor:t.conflict})};t.resourceGone=function(e,r){return new t.Boom(e,{statusCode:410,data:r,ctor:t.resourceGone})};t.lengthRequired=function(e,r){return new t.Boom(e,{statusCode:411,data:r,ctor:t.lengthRequired})};t.preconditionFailed=function(e,r){return new t.Boom(e,{statusCode:412,data:r,ctor:t.preconditionFailed})};t.entityTooLarge=function(e,r){return new t.Boom(e,{statusCode:413,data:r,ctor:t.entityTooLarge})};t.uriTooLong=function(e,r){return new t.Boom(e,{statusCode:414,data:r,ctor:t.uriTooLong})};t.unsupportedMediaType=function(e,r){return new t.Boom(e,{statusCode:415,data:r,ctor:t.unsupportedMediaType})};t.rangeNotSatisfiable=function(e,r){return new t.Boom(e,{statusCode:416,data:r,ctor:t.rangeNotSatisfiable})};t.expectationFailed=function(e,r){return new t.Boom(e,{statusCode:417,data:r,ctor:t.expectationFailed})};t.teapot=function(e,r){return new t.Boom(e,{statusCode:418,data:r,ctor:t.teapot})};t.badData=function(e,r){return new t.Boom(e,{statusCode:422,data:r,ctor:t.badData})};t.locked=function(e,r){return new t.Boom(e,{statusCode:423,data:r,ctor:t.locked})};t.failedDependency=function(e,r){return new t.Boom(e,{statusCode:424,data:r,ctor:t.failedDependency})};t.tooEarly=function(e,r){return new t.Boom(e,{statusCode:425,data:r,ctor:t.tooEarly})};t.preconditionRequired=function(e,r){return new t.Boom(e,{statusCode:428,data:r,ctor:t.preconditionRequired})};t.tooManyRequests=function(e,r){return new t.Boom(e,{statusCode:429,data:r,ctor:t.tooManyRequests})};t.illegal=function(e,r){return new t.Boom(e,{statusCode:451,data:r,ctor:t.illegal})};t.internal=function(e,r,n=500){return o.serverError(e,r,n,t.internal)};t.notImplemented=function(e,r){return o.serverError(e,r,501,t.notImplemented)};t.badGateway=function(e,r){return o.serverError(e,r,502,t.badGateway)};t.serverUnavailable=function(e,r){return o.serverError(e,r,503,t.serverUnavailable)};t.gatewayTimeout=function(e,r){return o.serverError(e,r,504,t.gatewayTimeout)};t.badImplementation=function(e,r){const n=o.serverError(e,r,500,t.badImplementation);n.isDeveloperError=true;return n};o.initialize=function(e,t,r){const s=parseInt(t,10);n.assert(!isNaN(s)&&s>=400,"First argument must be a number (400+):",t);e.isBoom=true;e.isServer=s>=500;if(!e.hasOwnProperty("data")){e.data=null}e.output={statusCode:s,payload:{},headers:{}};Object.defineProperty(e,"reformat",{value:o.reformat});if(!r&&!e.message){e.reformat();r=e.output.payload.error}if(r){const t=Object.getOwnPropertyDescriptor(e,"message")||Object.getOwnPropertyDescriptor(Object.getPrototypeOf(e),"message");n.assert(!t||t.configurable&&!t.get,"The error is not compatible with boom");e.message=r+(e.message?": "+e.message:"");e.output.payload.message=e.message}e.reformat();return e};o.reformat=function(e=false){this.output.payload.statusCode=this.output.statusCode;this.output.payload.error=o.codes.get(this.output.statusCode)||"Unknown";if(this.output.statusCode===500&&e!==true){this.output.payload.message="An internal server error occurred"}else if(this.message){this.output.payload.message=this.message}};o.serverError=function(e,r,n,o){if(r instanceof Error&&!r.isBoom){return t.boomify(r,{statusCode:n,message:e})}return new t.Boom(e,{statusCode:n,data:r,ctor:o})}},181:(e,t,r)=>{const n=r(498);const o=r(920);const s=r(89);const a=r(938);const i={};e.exports=function(e,t,r={}){n(e&&typeof e==="object","Invalid defaults value: must be an object");n(!t||t===true||typeof t==="object","Invalid source value: must be true, falsy or an object");n(typeof r==="object","Invalid options: must be an object");if(!t){return null}if(r.shallow){return i.applyToDefaultsWithShallow(e,t,r)}const a=o(e);if(t===true){return a}const u=r.nullOverride!==undefined?r.nullOverride:false;return s(a,t,{nullOverride:u,mergeArrays:false})};i.applyToDefaultsWithShallow=function(e,t,r){const u=r.shallow;n(Array.isArray(u),"Invalid keys");const c=new Map;const f=t===true?null:new Set;for(let r of u){r=Array.isArray(r)?r:r.split(".");const n=a(e,r);if(n&&typeof n==="object"){c.set(n,f&&a(t,r)||n)}else if(f){f.add(r)}}const l=o(e,{},c);if(!f){return l}for(const e of f){i.reachCopy(l,t,e)}return s(l,t,{mergeArrays:false,nullOverride:false})};i.reachCopy=function(e,t,r){for(const e of r){if(!(e in t)){return}t=t[e]}const n=t;let o=e;for(let e=0;e{const n=r(650);const o={};e.exports=function(e,...t){if(e){return}if(t.length===1&&t[0]instanceof Error){throw t[0]}throw new n(t)}},0:e=>{const t={};e.exports=t.Bench=class{constructor(){this.ts=0;this.reset()}reset(){this.ts=t.Bench.now()}elapsed(){return t.Bench.now()-this.ts}static now(){const e=process.hrtime();return e[0]*1e3+e[1]/1e6}}},761:(e,t,r)=>{const n=r(908);const o={};e.exports=function(){return new Promise(n)}},920:(e,t,r)=>{const n=r(938);const o=r(520);const s=r(932);const a={needsProtoHack:new Set([o.set,o.map,o.weakSet,o.weakMap])};e.exports=a.clone=function(e,t={},r=null){if(typeof e!=="object"||e===null){return e}let n=a.clone;let i=r;if(t.shallow){if(t.shallow!==true){return a.cloneWithShallow(e,t)}n=e=>e}else if(i){const t=i.get(e);if(t){return t}}else{i=new Map}const u=o.getInternalProto(e);if(u===o.buffer){return Buffer&&Buffer.from(e)}if(u===o.date){return new Date(e.getTime())}if(u===o.regex){return new RegExp(e)}const c=a.base(e,u,t);if(c===e){return e}if(i){i.set(e,c)}if(u===o.set){for(const r of e){c.add(n(r,t,i))}}else if(u===o.map){for(const[r,o]of e){c.set(r,n(o,t,i))}}const f=s.keys(e,t);for(const r of f){if(r==="__proto__"){continue}if(u===o.array&&r==="length"){c.length=e.length;continue}const s=Object.getOwnPropertyDescriptor(e,r);if(s){if(s.get||s.set){Object.defineProperty(c,r,s)}else if(s.enumerable){c[r]=n(e[r],t,i)}else{Object.defineProperty(c,r,{enumerable:false,writable:true,configurable:true,value:n(e[r],t,i)})}}else{Object.defineProperty(c,r,{enumerable:true,writable:true,configurable:true,value:n(e[r],t,i)})}}return c};a.cloneWithShallow=function(e,t){const r=t.shallow;t=Object.assign({},t);t.shallow=false;const o=new Map;for(const t of r){const r=n(e,t);if(typeof r==="object"||typeof r==="function"){o.set(r,r)}}return a.clone(e,t,o)};a.base=function(e,t,r){if(r.prototype===false){if(a.needsProtoHack.has(t)){return new t.constructor}return t===o.array?[]:{}}const n=Object.getPrototypeOf(e);if(n&&n.isImmutable){return e}if(t===o.array){const e=[];if(n!==t){Object.setPrototypeOf(e,n)}return e}if(a.needsProtoHack.has(t)){const e=new n.constructor;if(n!==t){Object.setPrototypeOf(e,n)}return e}return Object.create(n)}},101:(e,t,r)=>{const n=r(498);const o=r(17);const s=r(212);const a=r(932);const i={};e.exports=function(e,t,r={}){if(typeof t!=="object"){t=[t]}n(!Array.isArray(t)||t.length,"Values array cannot be empty");if(typeof e==="string"){return i.string(e,t,r)}if(Array.isArray(e)){return i.array(e,t,r)}n(typeof e==="object","Reference must be string or an object");return i.object(e,t,r)};i.array=function(e,t,r){if(!Array.isArray(t)){t=[t]}if(!e.length){return false}if(r.only&&r.once&&e.length!==t.length){return false}let n;const o=new Map;for(const e of t){if(!r.deep||!e||typeof e!=="object"){const t=o.get(e);if(t){++t.allowed}else{o.set(e,{allowed:1,hits:0})}}else{n=n||i.compare(r);let t=false;for(const[r,s]of o.entries()){if(n(r,e)){++s.allowed;t=true;break}}if(!t){o.set(e,{allowed:1,hits:0})}}}let s=0;for(const t of e){let e;if(!r.deep||!t||typeof t!=="object"){e=o.get(t)}else{n=n||i.compare(r);for(const[r,s]of o.entries()){if(n(r,t)){e=s;break}}}if(e){++e.hits;++s;if(r.once&&e.hits>e.allowed){return false}}}if(r.only&&s!==e.length){return false}for(const e of o.values()){if(e.hits===e.allowed){continue}if(e.hitst.propertyIsEnumerable(e)));const u=[...Object.keys(t),...s];const c=i.compare(r);const f=new Set(u);for(const n of o){if(!f.has(n)){if(r.only){return false}continue}if(!c(t[n],e[n])){return false}f.delete(n)}if(f.size){return r.part?f.sizee!==""))}const o=new Map;const a=[];for(const e of t){n(typeof e==="string","Cannot compare string reference to non-string value");if(e){const t=o.get(e);if(t){++t.allowed}else{o.set(e,{allowed:1,hits:0});a.push(s(e))}}else if(r.once||r.only){return false}}if(!a.length){return true}const i=new RegExp(`(${a.join("|")})`,"g");const u=e.replace(i,((e,t)=>{++o.get(t).hits;return""}));if(r.only&&u){return false}let c=false;for(const e of o.values()){if(e.hits){c=true}if(e.hits===e.allowed){continue}if(e.hitso(e,t,n)};i.shallow=function(e,t){return e===t}},17:(e,t,r)=>{const n=r(520);const o={mismatched:null};e.exports=function(e,t,r){r=Object.assign({prototype:true},r);return!!o.isDeepEqual(e,t,r,[])};o.isDeepEqual=function(e,t,r,s){if(e===t){return e!==0||1/e===1/t}const a=typeof e;if(a!==typeof t){return false}if(e===null||t===null){return false}if(a==="function"){if(!r.deepFunction||e.toString()!==t.toString()){return false}}else if(a!=="object"){return e!==e&&t!==t}const i=o.getSharedType(e,t,!!r.prototype);switch(i){case n.buffer:return Buffer&&Buffer.prototype.equals.call(e,t);case n.promise:return e===t;case n.regex:return e.toString()===t.toString();case o.mismatched:return false}for(let r=s.length-1;r>=0;--r){if(s[r].isSame(e,t)){return true}}s.push(new o.SeenEntry(e,t));try{return!!o.isDeepEqualObj(i,e,t,r,s)}finally{s.pop()}};o.getSharedType=function(e,t,r){if(r){if(Object.getPrototypeOf(e)!==Object.getPrototypeOf(t)){return o.mismatched}return n.getInternalProto(e)}const s=n.getInternalProto(e);if(s!==n.getInternalProto(t)){return o.mismatched}return s};o.valueOf=function(e){const t=e.valueOf;if(t===undefined){return e}try{return t.call(e)}catch(e){return e}};o.hasOwnEnumerableProperty=function(e,t){return Object.prototype.propertyIsEnumerable.call(e,t)};o.isSetSimpleEqual=function(e,t){for(const r of Set.prototype.values.call(e)){if(!Set.prototype.has.call(t,r)){return false}}return true};o.isDeepEqualObj=function(e,t,r,s,a){const{isDeepEqual:i,valueOf:u,hasOwnEnumerableProperty:c}=o;const{keys:f,getOwnPropertySymbols:l}=Object;if(e===n.array){if(s.part){for(const e of t){for(const t of r){if(i(e,t,s,a)){return true}}}}else{if(t.length!==r.length){return false}for(let e=0;e{const n=r(710);const o={};e.exports=class extends Error{constructor(e){const r=e.filter((e=>e!=="")).map((e=>typeof e==="string"?e:e instanceof Error?e.message:n(e)));super(r.join(" ")||"Unknown error");if(typeof Error.captureStackTrace==="function"){Error.captureStackTrace(this,t.assert)}}}},401:(e,t,r)=>{const n=r(498);const o={};e.exports=function(e){n(/^[ \w\!#\$%&'\(\)\*\+,\-\.\/\:;<\=>\?@\[\]\^`\{\|\}~\"\\]*$/.test(e),"Bad attribute value ("+e+")");return e.replace(/\\/g,"\\\\").replace(/\"/g,'\\"')}},682:e=>{const t={};e.exports=function(e){if(!e){return""}let r="";for(let n=0;n=256){return"&#"+e+";"}const n=e.toString(16).padStart(2,"0");return`&#x${n};`};t.isSafe=function(e){return typeof t.safeCharCodes[e]!=="undefined"};t.namedHtml={38:"&",60:"<",62:">",34:""",160:" ",162:"¢",163:"£",164:"¤",169:"©",174:"®"};t.safeCharCodes=function(){const e={};for(let t=32;t<123;++t){if(t>=97||t>=65&&t<=90||t>=48&&t<=57||t===32||t===46||t===44||t===45||t===58||t===95){e[t]=null}}return e}()},303:e=>{const t={};e.exports=function(e){if(!e){return""}const t=60;const r=62;const n=38;const o=8232;let s;return e.replace(/[<>&\u2028\u2029]/g,(e=>{s=e.charCodeAt(0);if(s===t){return"\\u003c"}if(s===r){return"\\u003e"}if(s===n){return"\\u0026"}if(s===o){return"\\u2028"}return"\\u2029"}))}},212:e=>{const t={};e.exports=function(e){return e.replace(/[\^\$\.\*\+\-\?\=\!\:\|\\\/\(\)\[\]\{\}\,]/g,"\\$&")}},385:e=>{const t={};e.exports=t.flatten=function(e,r){const n=r||[];for(let r=0;r{const t={};e.exports=function(){}},135:(e,t,r)=>{const n={};e.exports={applyToDefaults:r(181),assert:r(498),Bench:r(0),block:r(761),clone:r(920),contain:r(101),deepEqual:r(17),Error:r(650),escapeHeaderAttribute:r(401),escapeHtml:r(682),escapeJson:r(303),escapeRegex:r(212),flatten:r(385),ignore:r(908),intersect:r(332),isPromise:r(539),merge:r(89),once:r(246),reach:r(938),reachTemplate:r(768),stringify:r(710),wait:r(421)}},332:e=>{const t={};e.exports=function(e,r,n={}){if(!e||!r){return n.first?null:[]}const o=[];const s=Array.isArray(e)?new Set(e):e;const a=new Set;for(const e of r){if(t.has(s,e)&&!a.has(e)){if(n.first){return e}o.push(e);a.add(e)}}return n.first?null:o};t.has=function(e,t){if(typeof e.has==="function"){return e.has(t)}return e[t]!==undefined}},539:e=>{const t={};e.exports=function(e){return!!e&&typeof e.then==="function"}},89:(e,t,r)=>{const n=r(498);const o=r(920);const s=r(932);const a={};e.exports=a.merge=function(e,t,r){n(e&&typeof e==="object","Invalid target value: must be an object");n(t===null||t===undefined||typeof t==="object","Invalid source value: must be null, undefined, or an object");if(!t){return e}r=Object.assign({nullOverride:true,mergeArrays:true},r);if(Array.isArray(t)){n(Array.isArray(e),"Cannot merge array onto an object");if(!r.mergeArrays){e.length=0}for(let n=0;n{const t={};e.exports=function(e){if(e._hoekOnce){return e}let t=false;const wrapped=function(...r){if(!t){t=true;e(...r)}};wrapped._hoekOnce=true;return wrapped}},938:(e,t,r)=>{const n=r(498);const o={};e.exports=function(e,t,r){if(t===false||t===null||t===undefined){return e}r=r||{};if(typeof r==="string"){r={separator:r}}const s=Array.isArray(t);n(!s||!r.separator,"Separator option no valid for array-based chain");const a=s?t:t.split(r.separator||".");let i=e;for(let e=0;e{const n=r(938);const o={};e.exports=function(e,t,r){return t.replace(/{([^}]+)}/g,((t,o)=>{const s=n(e,o,r);return s===undefined||s===null?"":s}))}},710:e=>{const t={};e.exports=function(...e){try{return JSON.stringify.apply(null,e)}catch(e){return"[Cannot display object: "+e.message+"]"}}},520:(e,t)=>{const r={};t=e.exports={array:Array.prototype,buffer:Buffer&&Buffer.prototype,date:Date.prototype,error:Error.prototype,generic:Object.prototype,map:Map.prototype,promise:Promise.prototype,regex:RegExp.prototype,set:Set.prototype,weakMap:WeakMap.prototype,weakSet:WeakSet.prototype};r.typeMap=new Map([["[object Error]",t.error],["[object Map]",t.map],["[object Promise]",t.promise],["[object Set]",t.set],["[object WeakMap]",t.weakMap],["[object WeakSet]",t.weakSet]]);t.getInternalProto=function(e){if(Array.isArray(e)){return t.array}if(Buffer&&e instanceof Buffer){return t.buffer}if(e instanceof Date){return t.date}if(e instanceof RegExp){return t.regex}if(e instanceof Error){return t.error}const n=Object.prototype.toString.call(e);return r.typeMap.get(n)||t.generic}},932:(e,t)=>{const r={};t.keys=function(e,t={}){return t.symbols!==false?Reflect.ownKeys(e):Object.getOwnPropertyNames(e)}},421:e=>{const t={};e.exports=function(e,t){if(typeof e!=="number"&&e!==undefined){throw new TypeError("Timeout must be a number")}return new Promise((r=>setTimeout(r,e,t)))}}};var t={};function __nccwpck_require__(r){var n=t[r];if(n!==undefined){return n.exports}var o=t[r]={exports:{}};var s=true;try{e[r](o,o.exports,__nccwpck_require__);s=false}finally{if(s)delete t[r]}return o.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var r=__nccwpck_require__(538);module.exports=r})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/@hapi/accept/package.json b/build/node_modules/next/dist/compiled/@hapi/accept/package.json new file mode 100644 index 0000000..d9d462e --- /dev/null +++ b/build/node_modules/next/dist/compiled/@hapi/accept/package.json @@ -0,0 +1 @@ +{"name":"@hapi/accept","main":"index.js","license":"BSD-3-Clause"} diff --git a/build/node_modules/next/dist/compiled/@mswjs/interceptors/ClientRequest/index.js b/build/node_modules/next/dist/compiled/@mswjs/interceptors/ClientRequest/index.js new file mode 100644 index 0000000..c1e77f6 --- /dev/null +++ b/build/node_modules/next/dist/compiled/@mswjs/interceptors/ClientRequest/index.js @@ -0,0 +1 @@ +(function(){var e={501:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:true});function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}var n=r(858);var s=r(331);var i=r(685);var o=_interopRequireDefault(i);var a=r(687);var u=_interopRequireDefault(a);var c=r(362);var l=r(984);var f=new(0,l.Logger)("utils getUrlByRequestOptions");function normalizeClientRequestEndArgs(...e){f.info("arguments",e);const t=new Array(3).fill(null).map(((t,r)=>e[r]||t));t.sort(((e,r)=>{if(typeof e==="function"){return 1}if(typeof r==="function"){return-1}if(typeof e==="string"&&typeof r==="string"){return t.indexOf(e)-t.indexOf(r)}return 0}));f.info("normalized args",t);return t}var h=new(0,l.Logger)("http normalizeWriteArgs");function normalizeClientRequestWriteArgs(e){h.info("normalizing ClientRequest.write arguments...",e);const t=e[0];const r=typeof e[1]==="string"?e[1]:void 0;const n=typeof e[1]==="function"?e[1]:e[2];const s=[t,r,n];h.info("successfully normalized ClientRequest.write arguments:",s);return s}var p=r(781);var d=Symbol("isClone");function cloneIncomingMessage(e){const t=e.pipe(new(0,p.PassThrough));inheritProperties(e,t);const r=Object.create(i.IncomingMessage.prototype);getPrototypes(t).forEach((e=>{inheritProperties(e,r)}));Object.setPrototypeOf(t,r);Object.defineProperty(t,d,{enumerable:true,value:true});return t}function getPrototypes(e){const t=[];let r=e;while(r=Object.getPrototypeOf(r)){t.push(r)}return t}function inheritProperties(e,t){const r=[...Object.getOwnPropertyNames(e),...Object.getOwnPropertySymbols(e)];for(const n of r){if(t.hasOwnProperty(n)){continue}const r=Object.getOwnPropertyDescriptor(e,n);if(!r){continue}Object.defineProperty(t,n,r)}}var g=r(426);function createResponse(e){const t=new ReadableStream({start(t){e.on("data",(e=>t.enqueue(e)));e.on("end",(()=>t.close()))}});return new Response(t,{status:e.statusCode,statusText:e.statusMessage,headers:g.objectToHeaders.call(void 0,e.headers)})}function createRequest(e){const t=new(0,g.Headers);const r=e.getHeaders();for(const e in r){const n=r[e];if(!n){continue}const s=Array.prototype.concat([],n);for(const r of s){t.append(e,r.toString())}}const n=e.method||"GET";return new Request(e.url,{method:n,headers:t,credentials:"same-origin",body:n==="HEAD"||n==="GET"?null:e.requestBuffer})}var m=r(642);var v=class extends i.ClientRequest{constructor([e,t,r],n){super(t,r);this.chunks=[];this.responseSource="mock";this.logger=n.logger.extend(`request ${t.method} ${e.href}`);this.logger.info("constructing ClientRequest using options:",{url:e,requestOptions:t,callback:r});this.url=e;this.emitter=n.emitter;this.requestBuffer=null;this.response=new(0,i.IncomingMessage)(this.socket)}writeRequestBodyChunk(e,t){if(e==null){return}if(this.requestBuffer==null){this.requestBuffer=Buffer.from([])}const r=Buffer.isBuffer(e)?e:Buffer.from(e,t);this.requestBuffer=Buffer.concat([this.requestBuffer,r])}write(...e){var t;const[r,n,s]=normalizeClientRequestWriteArgs(e);this.logger.info("write:",{chunk:r,encoding:n,callback:s});this.chunks.push({chunk:r,encoding:n});this.writeRequestBodyChunk(r,n);this.logger.info("chunk successfully stored!",(t=this.requestBuffer)==null?void 0:t.byteLength);if(!r||r.length===0){this.logger.info("written chunk is empty, skipping callback...")}else{s==null?void 0:s()}return true}end(...e){this.logger.info("end",e);const t=n.uuidv4.call(void 0);const[r,s,i]=normalizeClientRequestEndArgs(...e);this.logger.info("normalized arguments:",{chunk:r,encoding:s,callback:i});this.writeRequestBodyChunk(r,s||void 0);const o=createRequest(this);const a=n.toInteractiveRequest.call(void 0,o);if(this.getHeader("X-Request-Id")!=null){this.removeHeader("X-Request-Id");return this.passthrough(r,s,i)}this.logger.info('emitting the "request" event for %d listener(s)...',this.emitter.listenerCount("request"));this.emitter.emit("request",{request:a,requestId:t});c.until.call(void 0,(async()=>{await this.emitter.untilIdle("request",(({args:[{requestId:e}]})=>e===t));const[e]=await a.respondWith.invoked();this.logger.info("event.respondWith called with:",e);return e})).then((e=>{this.logger.info("the listeners promise awaited!");if(!this.headersSent){for(const[e,t]of o.headers){this.setHeader(e,t)}}if(e.error){this.logger.info("encountered resolver exception, aborting request...",e.error);this.emit("error",e.error);this.terminate();return this}const n=e.data;if(n){const e=n.clone();this.logger.info("received mocked response:",n);this.responseSource="mock";this.respondWith(n);this.logger.info(n.status,n.statusText,"(MOCKED)");i==null?void 0:i();this.logger.info('emitting the custom "response" event...');this.emitter.emit("response",{response:e,isMockedResponse:true,request:o,requestId:t});this.logger.info("request (mock) is completed");return this}this.logger.info("no mocked response received!");this.once("response-internal",(e=>{this.logger.info(e.statusCode,e.statusMessage);this.logger.info("original response headers:",e.headers);this.logger.info('emitting the custom "response" event...');this.emitter.emit("response",{response:createResponse(e),isMockedResponse:false,request:o,requestId:t})}));return this.passthrough(r,s,i)}));return this}emit(e,...t){this.logger.info("emit: %s",e);if(e==="response"){this.logger.info('found "response" event, cloning the response...');try{const r=t[0];const n=cloneIncomingMessage(r);const s=cloneIncomingMessage(r);this.emit("response-internal",s);this.logger.info('response successfully cloned, emitting "response" event...');return super.emit(e,n,...t.slice(1))}catch(r){this.logger.info("error when cloning response:",r);return super.emit(e,...t)}}if(e==="error"){const e=t[0];const r=e.code||"";this.logger.info("error:\n",e);if(this.responseSource==="mock"&&v.suppressErrorCodes.includes(r)){if(!this.capturedError){this.capturedError=e;this.logger.info("captured the first error:",this.capturedError)}return false}}return super.emit(e,...t)}passthrough(e,t,r){this.responseSource="bypass";if(this.capturedError){this.emit("error",this.capturedError);return this}this.logger.info("writing request chunks...",this.chunks);for(const{chunk:e,encoding:t}of this.chunks){if(t){super.write(e,t)}else{super.write(e)}}this.once("error",(e=>{this.logger.info("original request error:",e)}));this.once("abort",(()=>{this.logger.info("original request aborted!")}));this.once("response-internal",(e=>{this.logger.info(e.statusCode,e.statusMessage);this.logger.info("original response headers:",e.headers)}));this.logger.info("performing original request...");return super.end(...[e,t,r].filter(Boolean))}respondWith(e){this.logger.info("responding with a mocked response...",e);Object.defineProperties(this,{writableFinished:{value:true},writableEnded:{value:true}});this.emit("finish");const{status:t,statusText:r,headers:n,body:s}=e;this.response.statusCode=t;this.response.statusMessage=r;if(n){this.response.headers={};n.forEach(((e,t)=>{this.response.rawHeaders.push(t,e);const r=t.toLowerCase();const n=this.response.headers[r];this.response.headers[r]=n?Array.prototype.concat([],n,e):e}))}this.logger.info("mocked response headers ready:",n);const i=new(0,m.DeferredPromise);const finishResponseStream=()=>{this.logger.info("finished response stream!");i.resolve()};if(s){const e=s.getReader();const readNextChunk=async()=>{const{done:t,value:r}=await e.read();if(t){finishResponseStream();return}this.response.emit("data",r);return readNextChunk()};readNextChunk()}else{finishResponseStream()}this.res=this.response;this.emit("response",this.response);i.then((()=>{this.logger.info("finalizing response...");this.response.push(null);this.response.complete=true;this.response.emit("end");this.terminate()}))}terminate(){var e;(e=this.agent)==null?void 0:e.destroy()}};var y=v;y.suppressErrorCodes=["ENOTFOUND","ECONNREFUSED","ECONNRESET","EAI_AGAIN"];function getRequestOptionsByUrl(e){const t={method:"GET",protocol:e.protocol,hostname:typeof e.hostname==="string"&&e.hostname.startsWith("[")?e.hostname.slice(1,-1):e.hostname,host:e.host,path:`${e.pathname}${e.search||""}`};if(!!e.port){t.port=Number(e.port)}if(e.username||e.password){t.auth=`${e.username}:${e.password}`}return t}var b=new(0,l.Logger)("utils getUrlByRequestOptions");var O="/";var w="http:";var q="localhost";var x=443;function getAgent(e){return e.agent instanceof i.Agent?e.agent:void 0}function getProtocolByRequestOptions(e){var t;if(e.protocol){return e.protocol}const r=getAgent(e);const n=r==null?void 0:r.protocol;if(n){return n}const s=getPortByRequestOptions(e);const i=e.cert||s===x;return i?"https:":((t=e.uri)==null?void 0:t.protocol)||w}function getPortByRequestOptions(e){if(e.port){return Number(e.port)}if(e.hostname!=null){const[,t]=e.hostname.match(/:(\d+)$/)||[];if(t!=null){return Number(t)}}const t=getAgent(e);if(t==null?void 0:t.options.port){return Number(t.options.port)}if(t==null?void 0:t.defaultPort){return Number(t.defaultPort)}return void 0}function getHostByRequestOptions(e){const{hostname:t,host:r}=e;if(t!=null){return t.replace(/:\d+$/,"")}return r||q}function getAuthByRequestOptions(e){if(e.auth){const[t,r]=e.auth.split(":");return{username:t,password:r}}}function isRawIPv6Address(e){return e.includes(":")&&!e.startsWith("[")&&!e.endsWith("]")}function getHostname(e,t){const r=typeof t!=="undefined"?`:${t}`:"";if(isRawIPv6Address(e)){return`[${e}]${r}`}if(typeof t==="undefined"){return e}return`${e}${r}`}function getUrlByRequestOptions(e){b.info("request options",e);if(e.uri){b.info('constructing url from explicitly provided "options.uri": %s',e.uri);return new URL(e.uri.href)}b.info("figuring out url from request options...");const t=getProtocolByRequestOptions(e);b.info("protocol",t);const r=getHostByRequestOptions(e);b.info("host",r);const n=getPortByRequestOptions(e);b.info("port",n);const s=getHostname(r,n);b.info("hostname",s);const i=e.path||O;b.info("path",i);const o=getAuthByRequestOptions(e);b.info("credentials",o);const a=o?`${o.username}:${o.password}@`:"";b.info("auth string:",a);const u=new URL(`${t}//${a}${s}${i}`);b.info("created url:",u);return u}var j=new(0,l.Logger)("cloneObject");function isPlainObject(e){var t;j.info("is plain object?",e);if(e==null||!((t=e.constructor)==null?void 0:t.name)){j.info("given object is undefined, not a plain object...");return false}j.info("checking the object constructor:",e.constructor.name);return e.constructor.name==="Object"}function cloneObject(e){j.info("cloning object:",e);const t=Object.entries(e).reduce(((e,[t,r])=>{j.info("analyzing key-value pair:",t,r);e[t]=isPlainObject(r)?cloneObject(r):r;return e}),{});return isPlainObject(e)?t:Object.assign(Object.getPrototypeOf(e),t)}function isObject(e){return Object.prototype.toString.call(e)==="[object Object]"}var P=new(0,l.Logger)("http normalizeClientRequestArgs");function resolveRequestOptions(e,t){if(typeof e[1]==="undefined"||typeof e[1]==="function"){P.info("request options not provided, deriving from the url",t);return getRequestOptionsByUrl(t)}if(e[1]){P.info("has custom RequestOptions!",e[1]);const r=getRequestOptionsByUrl(t);P.info("derived RequestOptions from the URL:",r);P.info("cloning RequestOptions...");const n=cloneObject(e[1]);P.info("successfully cloned RequestOptions!",n);return{...r,...n}}P.info("using an empty object as request options");return{}}function resolveCallback(e){return typeof e[1]==="function"?e[1]:e[2]}function normalizeClientRequestArgs(e,...t){let r;let n;let s;P.info("arguments",t);P.info("using default protocol:",e);if(typeof t[0]==="string"){P.info("first argument is a location string:",t[0]);r=new URL(t[0]);P.info("created a url:",r);const e=getRequestOptionsByUrl(r);P.info("request options from url:",e);n=resolveRequestOptions(t,r);P.info("resolved request options:",n);s=resolveCallback(t)}else if(t[0]instanceof URL){r=t[0];P.info("first argument is a URL:",r);n=resolveRequestOptions(t,r);P.info("derived request options:",n);s=resolveCallback(t)}else if("hash"in t[0]&&!("method"in t[0])){const[r]=t;P.info("first argument is a legacy URL:",r);if(r.hostname===null){P.info("given legacy URL is relative (no hostname)");return isObject(t[1])?normalizeClientRequestArgs(e,{path:r.path,...t[1]},t[2]):normalizeClientRequestArgs(e,{path:r.path},t[1])}P.info("given legacy url is absolute");const n=new URL(r.href);return t[1]===void 0?normalizeClientRequestArgs(e,n):typeof t[1]==="function"?normalizeClientRequestArgs(e,n,t[1]):normalizeClientRequestArgs(e,n,t[1],t[2])}else if(isObject(t[0])){n=t[0];P.info("first argument is RequestOptions:",n);n.protocol=n.protocol||e;P.info("normalized request options:",n);r=getUrlByRequestOptions(n);P.info("created a URL from RequestOptions:",r.href);s=resolveCallback(t)}else{throw new Error(`Failed to construct ClientRequest with these parameters: ${t}`)}n.protocol=n.protocol||r.protocol;n.method=n.method||"GET";if(typeof n.agent==="undefined"){const e=n.protocol==="https:"?new(0,a.Agent)({rejectUnauthorized:n.rejectUnauthorized}):new(0,i.Agent);n.agent=e;P.info("resolved fallback agent:",e)}if(!n._defaultAgent){P.info('has no default agent, setting the default agent for "%s"',n.protocol);n._defaultAgent=n.protocol==="https:"?a.globalAgent:i.globalAgent}P.info("successfully resolved url:",r.href);P.info("successfully resolved options:",n);P.info("successfully resolved callback:",s);return[r,n,s]}function get(e,t){return(...r)=>{const n=normalizeClientRequestArgs(`${e}:`,...r);const s=new y(n,t);s.end();return s}}var E=new(0,l.Logger)("http request");function request(e,t){return(...r)=>{E.info('request call (protocol "%s"):',e,r);const n=normalizeClientRequestArgs(`${e}:`,...r);return new y(n,t)}}var L=class extends s.Interceptor{constructor(){super(L.interceptorSymbol);this.modules=new Map;this.modules.set("http",o.default);this.modules.set("https",u.default)}setup(){const e=this.logger.extend("setup");for(const[t,r]of this.modules){const{request:n,get:s}=r;this.subscriptions.push((()=>{r.request=n;r.get=s;e.info('native "%s" module restored!',t)}));const i={emitter:this.emitter,logger:this.logger};r.request=request(t,i);r.get=get(t,i);e.info('native "%s" module patched!',t)}}};var _=L;_.interceptorSymbol=Symbol("http");t.ClientRequestInterceptor=_},331:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:true});var n=(e=>true?require:0)((function(e){if(true)return require.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')}));var s=r(984);var i=r(162);function nextTick(e){setTimeout(e,0)}var o=class extends i.Emitter{constructor(){super();this.logger=new(0,s.Logger)("async-event-emitter");this.queue=new Map;this.readyState="ACTIVE"}on(e,t){const r=this.logger.extend("on");r.info('adding "%s" listener...',e);if(this.readyState==="DEACTIVATED"){r.info("the emitter is destroyed, skipping!");return this}return super.on(e,(async(...n)=>{const s=this.openListenerQueue(e);r.info('awaiting the "%s" listener...',e);s.push({args:n,done:new Promise((async(s,i)=>{try{await t(...n);s();r.info('"%s" listener has resolved!',e)}catch(e){r.info('"%s" listener has rejected!',e);i(e)}}))})}))}emit(e,...t){const r=this.logger.extend("emit");r.info('emitting "%s" event...',e);if(this.readyState==="DEACTIVATED"){r.info("the emitter is destroyed, skipping!");return false}if(this.isInternalEventName(e)){return super.emit(e,...t)}this.openListenerQueue(e);r.info('appending a one-time cleanup "%s" listener...',e);this.once(e,(()=>{nextTick((()=>{this.queue.delete(e);r.info('cleaned up "%s" listeners queue!',e)}))}));return super.emit(e,...t)}async untilIdle(e,t=(()=>true)){const r=this.queue.get(e)||[];await Promise.all(r.filter(t).map((({done:e})=>e))).finally((()=>{this.queue.delete(e)}))}openListenerQueue(e){const t=this.logger.extend("openListenerQueue");t.info('opening "%s" listeners queue...',e);const r=this.queue.get(e);if(!r){t.info("no queue found, creating one...");this.queue.set(e,[]);return[]}t.info("returning an exising queue:",r);return r}removeAllListeners(e){const t=this.logger.extend("removeAllListeners");t.info("event:",e);if(e){this.queue.delete(e);t.info('cleared the "%s" listeners queue!',e,this.queue.get(e))}else{this.queue.clear();t.info("cleared the listeners queue!",this.queue)}return super.removeAllListeners(e)}activate(){const e=this.logger.extend("activate");this.readyState="ACTIVE";e.info("set state to:",this.readyState)}deactivate(){const e=this.logger.extend("deactivate");e.info("removing all listeners...");this.removeAllListeners();this.readyState="DEACTIVATED";e.info("set state to:",this.readyState)}isInternalEventName(e){return e==="newListener"||e==="removeListener"}};function getGlobalSymbol(e){return globalThis[e]||void 0}function setGlobalSymbol(e,t){globalThis[e]=t}function deleteGlobalSymbol(e){delete globalThis[e]}var a=(e=>{e["INACTIVE"]="INACTIVE";e["APPLYING"]="APPLYING";e["APPLIED"]="APPLIED";e["DISPOSING"]="DISPOSING";e["DISPOSED"]="DISPOSED";return e})(a||{});var u=class{constructor(e){this.symbol=e;this.readyState="INACTIVE";this.emitter=new o;this.subscriptions=[];this.logger=new(0,s.Logger)(e.description);this.emitter.setMaxListeners(0);this.logger.info("constructing the interceptor...")}checkEnvironment(){return true}apply(){const e=this.logger.extend("apply");e.info("applying the interceptor...");if(this.readyState==="APPLIED"){e.info("intercepted already applied!");return}const t=this.checkEnvironment();if(!t){e.info("the interceptor cannot be applied in this environment!");return}this.readyState="APPLYING";this.emitter.activate();e.info("activated the emiter!",this.emitter.readyState);const r=this.getInstance();if(r){e.info("found a running instance, reusing...");this.on=(t,n)=>{e.info('proxying the "%s" listener',t);r.emitter.addListener(t,n);this.subscriptions.push((()=>{r.emitter.removeListener(t,n);e.info('removed proxied "%s" listener!',t)}))};this.readyState="APPLIED";return}e.info("no running instance found, setting up a new instance...");this.setup();this.setInstance();this.readyState="APPLIED"}setup(){}on(e,t){const r=this.logger.extend("on");if(this.readyState==="DISPOSING"||this.readyState==="DISPOSED"){r.info("cannot listen to events, already disposed!");return}r.info('adding "%s" event listener:',e,t.name);this.emitter.on(e,t)}dispose(){const e=this.logger.extend("dispose");if(this.readyState==="DISPOSED"){e.info("cannot dispose, already disposed!");return}e.info("disposing the interceptor...");this.readyState="DISPOSING";if(!this.getInstance()){e.info("no interceptors running, skipping dispose...");return}this.clearInstance();e.info("global symbol deleted:",getGlobalSymbol(this.symbol));if(this.subscriptions.length>0){e.info("disposing of %d subscriptions...",this.subscriptions.length);for(const e of this.subscriptions){e()}this.subscriptions=[];e.info("disposed of all subscriptions!",this.subscriptions.length)}this.emitter.deactivate();e.info("destroyed the listener!");this.readyState="DISPOSED"}getInstance(){var e;const t=getGlobalSymbol(this.symbol);this.logger.info("retrieved global instance:",(e=t==null?void 0:t.constructor)==null?void 0:e.name);return t}setInstance(){setGlobalSymbol(this.symbol,this);this.logger.info("set global instance!",this.symbol.description)}clearInstance(){deleteGlobalSymbol(this.symbol);this.logger.info("cleared global instance!",this.symbol.description)}};t.__require=n;t.getGlobalSymbol=getGlobalSymbol;t.deleteGlobalSymbol=deleteGlobalSymbol;t.InterceptorReadyState=a;t.Interceptor=u},858:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:true});var n=r(270);function createLazyCallback(e={}){let t=0;let r;let n;const s=new Promise((e=>{n=e})).finally((()=>{clearTimeout(r)}));const fn=function(...r){var s;if(e.maxCalls&&t>=e.maxCalls){(s=e.maxCallsCallback)==null?void 0:s.call(e)}n(r);t++};fn.invoked=async()=>{r=setTimeout((()=>{n([])}),0);return s};return fn}function toInteractiveRequest(e){Object.defineProperty(e,"respondWith",{writable:false,enumerable:true,value:createLazyCallback({maxCalls:1,maxCallsCallback(){throw new Error(n.format.call(void 0,'Failed to respond to "%s %s" request: the "request" event has already been responded to.',e.method,e.url))}})});return e}function uuidv4(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){const t=Math.random()*16|0;const r=e=="x"?t:t&3|8;return r.toString(16)}))}t.toInteractiveRequest=toInteractiveRequest;t.uuidv4=uuidv4},596:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:true});t.DeferredPromise=void 0;const n=r(738);class DeferredPromise extends Promise{#e;resolve;reject;constructor(e=null){const t=(0,n.createDeferredExecutor)();super(((r,n)=>{t(r,n);e?.(t.resolve,t.reject)}));this.#e=t;this.resolve=this.#e.resolve;this.reject=this.#e.reject}get state(){return this.#e.state}get rejectionReason(){return this.#e.rejectionReason}then(e,t){return this.#t(super.then(e,t))}catch(e){return this.#t(super.catch(e))}finally(e){return this.#t(super.finally(e))}#t(e){return Object.defineProperties(e,{resolve:{configurable:true,value:this.resolve},reject:{configurable:true,value:this.reject}})}}t.DeferredPromise=DeferredPromise},738:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:true});t.createDeferredExecutor=void 0;function createDeferredExecutor(){const executor=(e,t)=>{executor.state="pending";executor.resolve=t=>{if(executor.state!=="pending"){return}executor.result=t;const onFulfilled=e=>{executor.state="fulfilled";return e};return e(t instanceof Promise?t:Promise.resolve(t).then(onFulfilled))};executor.reject=e=>{if(executor.state!=="pending"){return}queueMicrotask((()=>{executor.state="rejected"}));return t(executor.rejectionReason=e)}};return executor}t.createDeferredExecutor=createDeferredExecutor},642:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;var s=Object.getOwnPropertyDescriptor(t,r);if(!s||("get"in s?!t.__esModule:s.writable||s.configurable)){s={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,n,s)}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var s=this&&this.__exportStar||function(e,t){for(var r in e)if(r!=="default"&&!Object.prototype.hasOwnProperty.call(t,r))n(t,e,r)};Object.defineProperty(t,"__esModule",{value:true});s(r(738),t);s(r(596),t)},984:function(e,t,r){var n=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var o=Object.prototype.hasOwnProperty;var __export=(e,t)=>{for(var r in t)n(e,r,{get:t[r],enumerable:true})};var __copyProps=(e,t,r,a)=>{if(t&&typeof t==="object"||typeof t==="function"){for(let u of i(t))if(!o.call(e,u)&&u!==r)n(e,u,{get:()=>t[u],enumerable:!(a=s(t,u))||a.enumerable})}return e};var __toCommonJS=e=>__copyProps(n({},"__esModule",{value:true}),e);var a={};__export(a,{Logger:()=>h});e.exports=__toCommonJS(a);var u=r(576);var c=r(270);var l={};__export(l,{blue:()=>blue,gray:()=>gray,green:()=>green,red:()=>red,yellow:()=>yellow});function yellow(e){return`${e}`}function blue(e){return`${e}`}function gray(e){return`${e}`}function red(e){return`${e}`}function green(e){return`${e}`}var f=(0,u.isNodeProcess)();var h=class{constructor(e){this.name=e;this.prefix=`[${this.name}]`;const t=getVariable("DEBUG");const r=getVariable("LOG_LEVEL");const n=t==="1"||t==="true"||typeof t!=="undefined"&&this.name.startsWith(t);if(n){this.debug=isDefinedAndNotEquals(r,"debug")?noop:this.debug;this.info=isDefinedAndNotEquals(r,"info")?noop:this.info;this.success=isDefinedAndNotEquals(r,"success")?noop:this.success;this.warning=isDefinedAndNotEquals(r,"warning")?noop:this.warning;this.error=isDefinedAndNotEquals(r,"error")?noop:this.error}else{this.info=noop;this.success=noop;this.warning=noop;this.error=noop;this.only=noop}}prefix;extend(e){return new h(`${this.name}:${e}`)}debug(e,...t){this.logEntry({level:"debug",message:gray(e),positionals:t,prefix:this.prefix,colors:{prefix:"gray"}})}info(e,...t){this.logEntry({level:"info",message:e,positionals:t,prefix:this.prefix,colors:{prefix:"blue"}});const r=new p;return(e,...t)=>{r.measure();this.logEntry({level:"info",message:`${e} ${gray(`${r.deltaTime}ms`)}`,positionals:t,prefix:this.prefix,colors:{prefix:"blue"}})}}success(e,...t){this.logEntry({level:"info",message:e,positionals:t,prefix:`✔ ${this.prefix}`,colors:{timestamp:"green",prefix:"green"}})}warning(e,...t){this.logEntry({level:"warning",message:e,positionals:t,prefix:`⚠ ${this.prefix}`,colors:{timestamp:"yellow",prefix:"yellow"}})}error(e,...t){this.logEntry({level:"error",message:e,positionals:t,prefix:`✖ ${this.prefix}`,colors:{timestamp:"red",prefix:"red"}})}only(e){e()}createEntry(e,t){return{timestamp:new Date,level:e,message:t}}logEntry(e){const{level:t,message:r,prefix:n,colors:s,positionals:i=[]}=e;const o=this.createEntry(t,r);const a=s?.timestamp||"gray";const u=s?.prefix||"gray";const c={timestamp:l[a],prefix:l[u]};const f=this.getWriter(t);f([c.timestamp(this.formatTimestamp(o.timestamp))].concat(n!=null?c.prefix(n):[]).concat(serializeInput(r)).join(" "),...i.map(serializeInput))}formatTimestamp(e){return`${e.toLocaleTimeString("en-GB")}:${e.getMilliseconds()}`}getWriter(e){switch(e){case"debug":case"success":case"info":{return log}case"warning":{return warn}case"error":{return error}}}};var p=class{startTime;endTime;deltaTime;constructor(){this.startTime=performance.now()}measure(){this.endTime=performance.now();const e=this.endTime-this.startTime;this.deltaTime=e.toFixed(2)}};var noop=()=>void 0;function log(e,...t){if(f){process.stdout.write((0,c.format)(e,...t)+"\n");return}console.log(e,...t)}function warn(e,...t){if(f){process.stderr.write((0,c.format)(e,...t)+"\n");return}console.warn(e,...t)}function error(e,...t){if(f){process.stderr.write((0,c.format)(e,...t)+"\n");return}console.error(e,...t)}function getVariable(e){if(f){return process.env[e]}return globalThis[e]?.toString()}function isDefinedAndNotEquals(e,t){return e!==void 0&&e!==t}function serializeInput(e){if(typeof e==="undefined"){return"undefined"}if(e===null){return"null"}if(typeof e==="string"){return e}if(typeof e==="object"){return JSON.stringify(e)}return e.toString()}},362:function(e){var t=Object.defineProperty;var r=Object.getOwnPropertyDescriptor;var n=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var __export=(e,r)=>{for(var n in r)t(e,n,{get:r[n],enumerable:true})};var __copyProps=(e,i,o,a)=>{if(i&&typeof i==="object"||typeof i==="function"){for(let u of n(i))if(!s.call(e,u)&&u!==o)t(e,u,{get:()=>i[u],enumerable:!(a=r(i,u))||a.enumerable})}return e};var __toCommonJS=e=>__copyProps(t({},"__esModule",{value:true}),e);var i={};__export(i,{until:()=>until});e.exports=__toCommonJS(i);var until=async e=>{try{const t=await e().catch((e=>{throw e}));return{error:null,data:t}}catch(e){return{error:e,data:null}}};0&&0},426:function(e){var t=Object.defineProperty;var r=Object.getOwnPropertyDescriptor;var n=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var __export=(e,r)=>{for(var n in r)t(e,n,{get:r[n],enumerable:true})};var __copyProps=(e,i,o,a)=>{if(i&&typeof i==="object"||typeof i==="function"){for(let u of n(i))if(!s.call(e,u)&&u!==o)t(e,u,{get:()=>i[u],enumerable:!(a=r(i,u))||a.enumerable})}return e};var __toCommonJS=e=>__copyProps(t({},"__esModule",{value:true}),e);var i={};__export(i,{Headers:()=>f,flattenHeadersList:()=>flattenHeadersList,flattenHeadersObject:()=>flattenHeadersObject,headersToList:()=>headersToList,headersToObject:()=>headersToObject,headersToString:()=>headersToString,listToHeaders:()=>listToHeaders,objectToHeaders:()=>objectToHeaders,reduceHeadersObject:()=>reduceHeadersObject,stringToHeaders:()=>stringToHeaders});e.exports=__toCommonJS(i);var o=/[^a-z0-9\-#$%&'*+.^_`|~]/i;function normalizeHeaderName(e){if(typeof e!=="string"){e=String(e)}if(o.test(e)||e.trim()===""){throw new TypeError("Invalid character in header field name")}return e.toLowerCase()}function normalizeHeaderValue(e){if(typeof e!=="string"){e=String(e)}return e}var a=Symbol("normalizedHeaders");var u=Symbol("rawHeaderNames");var c,l;var f=class{constructor(e){this[c]={};this[l]=new Map;if(["Headers","HeadersPolyfill"].includes(e==null?void 0:e.constructor.name)||e instanceof f){const t=e;t.forEach(((e,t)=>{this.append(t,e)}),this)}else if(Array.isArray(e)){e.forEach((([e,t])=>{this.append(e,Array.isArray(t)?t.join(", "):t)}))}else if(e){Object.getOwnPropertyNames(e).forEach((t=>{const r=e[t];this.append(t,Array.isArray(r)?r.join(", "):r)}))}}[(c=a,l=u,Symbol.iterator)](){return this.entries()}*keys(){for(const e of Object.keys(this[a])){yield e}}*values(){for(const e of Object.values(this[a])){yield e}}*entries(){for(const e of Object.keys(this[a])){yield[e,this.get(e)]}}get(e){return this[a][normalizeHeaderName(e)]||null}set(e,t){const r=normalizeHeaderName(e);this[a][r]=normalizeHeaderValue(t);this[u].set(r,e)}append(e,t){const r=normalizeHeaderName(e);let n=this.has(r)?`${this.get(r)}, ${t}`:t;this.set(e,n)}delete(e){if(!this.has(e)){return}const t=normalizeHeaderName(e);delete this[a][t];this[u].delete(t)}all(){return this[a]}raw(){const e={};for(const[t,r]of this.entries()){e[this[u].get(t)]=r}return e}has(e){return this[a].hasOwnProperty(normalizeHeaderName(e))}forEach(e,t){for(const r in this[a]){if(this[a].hasOwnProperty(r)){e.call(t,this[a][r],r,this)}}}};function headersToList(e){const t=[];e.forEach(((e,r)=>{const n=e.includes(",")?e.split(",").map((e=>e.trim())):e;t.push([r,n])}));return t}function headersToString(e){const t=headersToList(e);const r=t.map((([e,t])=>{const r=[].concat(t);return`${e}: ${r.join(", ")}`}));return r.join("\r\n")}var h=["user-agent"];function headersToObject(e){const t={};e.forEach(((e,r)=>{const n=!h.includes(r.toLowerCase())&&e.includes(",");t[r]=n?e.split(",").map((e=>e.trim())):e}));return t}function stringToHeaders(e){const t=e.trim().split(/[\r\n]+/);return t.reduce(((e,t)=>{if(t.trim()===""){return e}const r=t.split(": ");const n=r.shift();const s=r.join(": ");e.append(n,s);return e}),new f)}function listToHeaders(e){const t=new f;e.forEach((([e,r])=>{const n=[].concat(r);n.forEach((r=>{t.append(e,r)}))}));return t}function reduceHeadersObject(e,t,r){return Object.keys(e).reduce(((r,n)=>t(r,n,e[n])),r)}function objectToHeaders(e){return reduceHeadersObject(e,((e,t,r)=>{const n=[].concat(r).filter(Boolean);n.forEach((r=>{e.append(t,r)}));return e}),new f)}function flattenHeadersList(e){return e.map((([e,t])=>[e,[].concat(t).join(", ")]))}function flattenHeadersObject(e){return reduceHeadersObject(e,((e,t,r)=>{e[t]=[].concat(r).join(", ");return e}),{})}0&&0},576:function(e){var t=Object.defineProperty;var r=Object.getOwnPropertyDescriptor;var n=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var __export=(e,r)=>{for(var n in r)t(e,n,{get:r[n],enumerable:true})};var __copyProps=(e,i,o,a)=>{if(i&&typeof i==="object"||typeof i==="function"){for(let u of n(i))if(!s.call(e,u)&&u!==o)t(e,u,{get:()=>i[u],enumerable:!(a=r(i,u))||a.enumerable})}return e};var __toCommonJS=e=>__copyProps(t({},"__esModule",{value:true}),e);var i={};__export(i,{isNodeProcess:()=>isNodeProcess});e.exports=__toCommonJS(i);function isNodeProcess(){if(typeof navigator!=="undefined"&&navigator.product==="ReactNative"){return true}if(typeof process!=="undefined"){const e=process.type;if(e==="renderer"||e==="worker"){return false}return!!(process.versions&&process.versions.node)}return false}0&&0},270:function(e){"use strict";var t=Object.defineProperty;var r=Object.getOwnPropertyDescriptor;var n=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var __export=(e,r)=>{for(var n in r)t(e,n,{get:r[n],enumerable:true})};var __copyProps=(e,i,o,a)=>{if(i&&typeof i==="object"||typeof i==="function"){for(let u of n(i))if(!s.call(e,u)&&u!==o)t(e,u,{get:()=>i[u],enumerable:!(a=r(i,u))||a.enumerable})}return e};var __toCommonJS=e=>__copyProps(t({},"__esModule",{value:true}),e);var i={};__export(i,{InvariantError:()=>u,format:()=>format,invariant:()=>invariant});e.exports=__toCommonJS(i);var o=/(%?)(%([sdjo]))/g;function serializePositional(e,t){switch(t){case"s":return e;case"d":case"i":return Number(e);case"j":return JSON.stringify(e);case"o":{if(typeof e==="string"){return e}const t=JSON.stringify(e);if(t==="{}"||t==="[]"||/^\[object .+?\]$/.test(t)){return e}return t}}}function format(e,...t){if(t.length===0){return e}let r=0;let n=e.replace(o,((e,n,s,i)=>{const o=t[r];const a=serializePositional(o,i);if(!n){r++;return a}return e}));if(r{if(!e){throw new u(t,...r)}};invariant.as=(e,t,r,...n)=>{if(!t){const t=e.prototype.name!=null;const s=t?new e(format(r,n)):e(format(r,n));throw s}};0&&0},162:function(e){var t=Object.defineProperty;var r=Object.getOwnPropertyDescriptor;var n=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var __export=(e,r)=>{for(var n in r)t(e,n,{get:r[n],enumerable:true})};var __copyProps=(e,i,o,a)=>{if(i&&typeof i==="object"||typeof i==="function"){for(let u of n(i))if(!s.call(e,u)&&u!==o)t(e,u,{get:()=>i[u],enumerable:!(a=r(i,u))||a.enumerable})}return e};var __toCommonJS=e=>__copyProps(t({},"__esModule",{value:true}),e);var i={};__export(i,{Emitter:()=>u,MemoryLeakError:()=>o});e.exports=__toCommonJS(i);var o=class extends Error{constructor(e,t,r){super(`Possible EventEmitter memory leak detected. ${r} ${t.toString()} listeners added. Use emitter.setMaxListeners() to increase limit`);this.emitter=e;this.type=t;this.count=r;this.name="MaxListenersExceededWarning"}};var a=class{static listenerCount(e,t){return e.listenerCount(t)}constructor(){this.events=new Map;this.maxListeners=a.defaultMaxListeners;this.hasWarnedAboutPotentialMemoryLeak=false}_emitInternalEvent(e,t,r){this.emit(e,...[t,r])}_getListeners(e){return this.events.get(e)||[]}_removeListener(e,t){const r=e.indexOf(t);if(r>-1){e.splice(r,1)}return[]}_wrapOnceListener(e,t){const onceListener=(...r)=>{this.removeListener(e,onceListener);t.apply(this,r)};return onceListener}setMaxListeners(e){this.maxListeners=e;return this}getMaxListeners(){return this.maxListeners}eventNames(){return Array.from(this.events.keys())}emit(e,...t){const r=this._getListeners(e);r.forEach((e=>{e.apply(this,t)}));return r.length>0}addListener(e,t){this._emitInternalEvent("newListener",e,t);const r=this._getListeners(e).concat(t);this.events.set(e,r);if(this.maxListeners>0&&this.listenerCount(e)>this.maxListeners&&!this.hasWarnedAboutPotentialMemoryLeak){this.hasWarnedAboutPotentialMemoryLeak=true;const t=new o(this,e,this.listenerCount(e));console.warn(t)}return this}on(e,t){return this.addListener(e,t)}once(e,t){return this.addListener(e,this._wrapOnceListener(e,t))}prependListener(e,t){const r=this._getListeners(e);if(r.length>0){const n=[t].concat(r);this.events.set(e,n)}else{this.events.set(e,r.concat(t))}return this}prependOnceListener(e,t){return this.prependListener(e,this._wrapOnceListener(e,t))}removeListener(e,t){const r=this._getListeners(e);if(r.length>0){this._removeListener(r,t);this.events.set(e,r);this._emitInternalEvent("removeListener",e,t)}return this}off(e,t){return this.removeListener(e,t)}removeAllListeners(e){if(e){this.events.delete(e)}else{this.events.clear()}return this}listeners(e){return Array.from(this._getListeners(e))}listenerCount(e){return this._getListeners(e).length}rawListeners(e){return this.listeners(e)}};var u=a;u.defaultMaxListeners=10;0&&0},685:function(e){"use strict";e.exports=require("http")},687:function(e){"use strict";e.exports=require("https")},781:function(e){"use strict";e.exports=require("stream")}};var t={};function __nccwpck_require__(r){var n=t[r];if(n!==undefined){return n.exports}var s=t[r]={exports:{}};var i=true;try{e[r].call(s.exports,s,s.exports,__nccwpck_require__);i=false}finally{if(i)delete t[r]}return s.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var r={};!function(){"use strict";var e=r;Object.defineProperty(e,"__esModule",{value:true});var t=__nccwpck_require__(501);__nccwpck_require__(858);__nccwpck_require__(331);e.ClientRequestInterceptor=t.ClientRequestInterceptor}();module.exports=r})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/@mswjs/interceptors/ClientRequest/package.json b/build/node_modules/next/dist/compiled/@mswjs/interceptors/ClientRequest/package.json new file mode 100644 index 0000000..5f158b5 --- /dev/null +++ b/build/node_modules/next/dist/compiled/@mswjs/interceptors/ClientRequest/package.json @@ -0,0 +1 @@ +{"name":"@mswjs/interceptors","main":"index.js","author":"Artem Zakharchenko","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/@napi-rs/triples/index.js b/build/node_modules/next/dist/compiled/@napi-rs/triples/index.js new file mode 100644 index 0000000..5638bda --- /dev/null +++ b/build/node_modules/next/dist/compiled/@napi-rs/triples/index.js @@ -0,0 +1 @@ +(()=>{var a={534:a=>{a.exports.platformArchTriples={darwin:{arm64:[{platform:"darwin",arch:"arm64",abi:null,platformArchABI:"darwin-arm64",raw:"aarch64-apple-darwin"}],x64:[{platform:"darwin",arch:"x64",abi:null,platformArchABI:"darwin-x64",raw:"x86_64-apple-darwin"}]},ios:{arm64:[{platform:"ios",arch:"arm64",abi:null,platformArchABI:"ios-arm64",raw:"aarch64-apple-ios"}],x64:[{platform:"ios",arch:"x64",abi:null,platformArchABI:"ios-x64",raw:"x86_64-apple-ios"}]},android:{arm64:[{platform:"android",arch:"arm64",abi:null,platformArchABI:"android-arm64",raw:"aarch64-linux-android"}],arm:[{platform:"android",arch:"arm",abi:"eabi",platformArchABI:"android-arm-eabi",raw:"armv7-linux-androideabi"}],ia32:[{platform:"android",arch:"ia32",abi:null,platformArchABI:"android-ia32",raw:"i686-linux-android"}],x64:[{platform:"android",arch:"x64",abi:null,platformArchABI:"android-x64",raw:"x86_64-linux-android"}]},win32:{arm64:[{platform:"win32",arch:"arm64",abi:"msvc",platformArchABI:"win32-arm64-msvc",raw:"aarch64-pc-windows-msvc"}],ia32:[{platform:"win32",arch:"ia32",abi:"gnu",platformArchABI:"win32-ia32-gnu",raw:"i686-pc-windows-gnu"},{platform:"win32",arch:"ia32",abi:"msvc",platformArchABI:"win32-ia32-msvc",raw:"i686-pc-windows-msvc"}],x64:[{platform:"win32",arch:"x64",abi:"gnu",platformArchABI:"win32-x64-gnu",raw:"x86_64-pc-windows-gnu"},{platform:"win32",arch:"x64",abi:"msvc",platformArchABI:"win32-x64-msvc",raw:"x86_64-pc-windows-msvc"}]},linux:{arm64:[{platform:"linux",arch:"arm64",abi:"gnu",platformArchABI:"linux-arm64-gnu",raw:"aarch64-unknown-linux-gnu"},{platform:"linux",arch:"arm64",abi:"musl",platformArchABI:"linux-arm64-musl",raw:"aarch64-unknown-linux-musl"}],arm:[{platform:"linux",arch:"arm",abi:"gnueabihf",platformArchABI:"linux-arm-gnueabihf",raw:"arm-unknown-linux-gnueabihf"},{platform:"linux",arch:"arm",abi:"musleabihf",platformArchABI:"linux-arm-musleabihf",raw:"arm-unknown-linux-musleabihf"},{platform:"linux",arch:"arm",abi:"gnueabihf",platformArchABI:"linux-arm-gnueabihf",raw:"armv7-unknown-linux-gnueabihf"},{platform:"linux",arch:"arm",abi:"musleabihf",platformArchABI:"linux-arm-musleabihf",raw:"armv7-unknown-linux-musleabihf"}],ia32:[{platform:"linux",arch:"ia32",abi:"gnu",platformArchABI:"linux-ia32-gnu",raw:"i686-unknown-linux-gnu"},{platform:"linux",arch:"ia32",abi:"musl",platformArchABI:"linux-ia32-musl",raw:"i686-unknown-linux-musl"}],mips:[{platform:"linux",arch:"mips",abi:"gnu",platformArchABI:"linux-mips-gnu",raw:"mips-unknown-linux-gnu"},{platform:"linux",arch:"mips",abi:"musl",platformArchABI:"linux-mips-musl",raw:"mips-unknown-linux-musl"}],mips64:[{platform:"linux",arch:"mips64",abi:"gnuabi64",platformArchABI:"linux-mips64-gnuabi64",raw:"mips64-unknown-linux-gnuabi64"},{platform:"linux",arch:"mips64",abi:"muslabi64",platformArchABI:"linux-mips64-muslabi64",raw:"mips64-unknown-linux-muslabi64"}],mips64el:[{platform:"linux",arch:"mips64el",abi:"gnuabi64",platformArchABI:"linux-mips64el-gnuabi64",raw:"mips64el-unknown-linux-gnuabi64"},{platform:"linux",arch:"mips64el",abi:"muslabi64",platformArchABI:"linux-mips64el-muslabi64",raw:"mips64el-unknown-linux-muslabi64"}],mipsel:[{platform:"linux",arch:"mipsel",abi:"gnu",platformArchABI:"linux-mipsel-gnu",raw:"mipsel-unknown-linux-gnu"},{platform:"linux",arch:"mipsel",abi:"musl",platformArchABI:"linux-mipsel-musl",raw:"mipsel-unknown-linux-musl"}],powerpc:[{platform:"linux",arch:"powerpc",abi:"gnu",platformArchABI:"linux-powerpc-gnu",raw:"powerpc-unknown-linux-gnu"}],powerpc64:[{platform:"linux",arch:"powerpc64",abi:"gnu",platformArchABI:"linux-powerpc64-gnu",raw:"powerpc64-unknown-linux-gnu"}],powerpc64le:[{platform:"linux",arch:"powerpc64le",abi:"gnu",platformArchABI:"linux-powerpc64le-gnu",raw:"powerpc64le-unknown-linux-gnu"}],riscv64:[{platform:"linux",arch:"riscv64",abi:"gnu",platformArchABI:"linux-riscv64-gnu",raw:"riscv64gc-unknown-linux-gnu"}],s390x:[{platform:"linux",arch:"s390x",abi:"gnu",platformArchABI:"linux-s390x-gnu",raw:"s390x-unknown-linux-gnu"}],sparc64:[{platform:"linux",arch:"sparc64",abi:"gnu",platformArchABI:"linux-sparc64-gnu",raw:"sparc64-unknown-linux-gnu"}],x64:[{platform:"linux",arch:"x64",abi:"gnu",platformArchABI:"linux-x64-gnu",raw:"x86_64-unknown-linux-gnu"},{platform:"linux",arch:"x64",abi:"gnux32",platformArchABI:"linux-x64-gnux32",raw:"x86_64-unknown-linux-gnux32"},{platform:"linux",arch:"x64",abi:"musl",platformArchABI:"linux-x64-musl",raw:"x86_64-unknown-linux-musl"}]},freebsd:{ia32:[{platform:"freebsd",arch:"ia32",abi:null,platformArchABI:"freebsd-ia32",raw:"i686-unknown-freebsd"}],x64:[{platform:"freebsd",arch:"x64",abi:null,platformArchABI:"freebsd-x64",raw:"x86_64-unknown-freebsd"}]}}}};var r={};function __nccwpck_require__(n){var i=r[n];if(i!==undefined){return i.exports}var l=r[n]={exports:{}};var u=true;try{a[n](l,l.exports,__nccwpck_require__);u=false}finally{if(u)delete r[n]}return l.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var n=__nccwpck_require__(534);module.exports=n})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/@napi-rs/triples/package.json b/build/node_modules/next/dist/compiled/@napi-rs/triples/package.json new file mode 100644 index 0000000..3cd0f24 --- /dev/null +++ b/build/node_modules/next/dist/compiled/@napi-rs/triples/package.json @@ -0,0 +1 @@ +{"name":"@napi-rs/triples","main":"index.js","author":"LongYinan ","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/@opentelemetry/api/index.js b/build/node_modules/next/dist/compiled/@opentelemetry/api/index.js new file mode 100644 index 0000000..110758a --- /dev/null +++ b/build/node_modules/next/dist/compiled/@opentelemetry/api/index.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={491:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.ContextAPI=void 0;const n=r(223);const a=r(172);const o=r(930);const i="context";const c=new n.NoopContextManager;class ContextAPI{constructor(){}static getInstance(){if(!this._instance){this._instance=new ContextAPI}return this._instance}setGlobalContextManager(e){return(0,a.registerGlobal)(i,e,o.DiagAPI.instance())}active(){return this._getContextManager().active()}with(e,t,r,...n){return this._getContextManager().with(e,t,r,...n)}bind(e,t){return this._getContextManager().bind(e,t)}_getContextManager(){return(0,a.getGlobal)(i)||c}disable(){this._getContextManager().disable();(0,a.unregisterGlobal)(i,o.DiagAPI.instance())}}t.ContextAPI=ContextAPI},930:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.DiagAPI=void 0;const n=r(56);const a=r(912);const o=r(957);const i=r(172);const c="diag";class DiagAPI{constructor(){function _logProxy(e){return function(...t){const r=(0,i.getGlobal)("diag");if(!r)return;return r[e](...t)}}const e=this;const setLogger=(t,r={logLevel:o.DiagLogLevel.INFO})=>{var n,c,s;if(t===e){const t=new Error("Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation");e.error((n=t.stack)!==null&&n!==void 0?n:t.message);return false}if(typeof r==="number"){r={logLevel:r}}const u=(0,i.getGlobal)("diag");const l=(0,a.createLogLevelDiagLogger)((c=r.logLevel)!==null&&c!==void 0?c:o.DiagLogLevel.INFO,t);if(u&&!r.suppressOverrideMessage){const e=(s=(new Error).stack)!==null&&s!==void 0?s:"";u.warn(`Current logger will be overwritten from ${e}`);l.warn(`Current logger will overwrite one already registered from ${e}`)}return(0,i.registerGlobal)("diag",l,e,true)};e.setLogger=setLogger;e.disable=()=>{(0,i.unregisterGlobal)(c,e)};e.createComponentLogger=e=>new n.DiagComponentLogger(e);e.verbose=_logProxy("verbose");e.debug=_logProxy("debug");e.info=_logProxy("info");e.warn=_logProxy("warn");e.error=_logProxy("error")}static instance(){if(!this._instance){this._instance=new DiagAPI}return this._instance}}t.DiagAPI=DiagAPI},653:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.MetricsAPI=void 0;const n=r(660);const a=r(172);const o=r(930);const i="metrics";class MetricsAPI{constructor(){}static getInstance(){if(!this._instance){this._instance=new MetricsAPI}return this._instance}setGlobalMeterProvider(e){return(0,a.registerGlobal)(i,e,o.DiagAPI.instance())}getMeterProvider(){return(0,a.getGlobal)(i)||n.NOOP_METER_PROVIDER}getMeter(e,t,r){return this.getMeterProvider().getMeter(e,t,r)}disable(){(0,a.unregisterGlobal)(i,o.DiagAPI.instance())}}t.MetricsAPI=MetricsAPI},181:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.PropagationAPI=void 0;const n=r(172);const a=r(874);const o=r(194);const i=r(277);const c=r(369);const s=r(930);const u="propagation";const l=new a.NoopTextMapPropagator;class PropagationAPI{constructor(){this.createBaggage=c.createBaggage;this.getBaggage=i.getBaggage;this.getActiveBaggage=i.getActiveBaggage;this.setBaggage=i.setBaggage;this.deleteBaggage=i.deleteBaggage}static getInstance(){if(!this._instance){this._instance=new PropagationAPI}return this._instance}setGlobalPropagator(e){return(0,n.registerGlobal)(u,e,s.DiagAPI.instance())}inject(e,t,r=o.defaultTextMapSetter){return this._getGlobalPropagator().inject(e,t,r)}extract(e,t,r=o.defaultTextMapGetter){return this._getGlobalPropagator().extract(e,t,r)}fields(){return this._getGlobalPropagator().fields()}disable(){(0,n.unregisterGlobal)(u,s.DiagAPI.instance())}_getGlobalPropagator(){return(0,n.getGlobal)(u)||l}}t.PropagationAPI=PropagationAPI},997:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.TraceAPI=void 0;const n=r(172);const a=r(846);const o=r(139);const i=r(607);const c=r(930);const s="trace";class TraceAPI{constructor(){this._proxyTracerProvider=new a.ProxyTracerProvider;this.wrapSpanContext=o.wrapSpanContext;this.isSpanContextValid=o.isSpanContextValid;this.deleteSpan=i.deleteSpan;this.getSpan=i.getSpan;this.getActiveSpan=i.getActiveSpan;this.getSpanContext=i.getSpanContext;this.setSpan=i.setSpan;this.setSpanContext=i.setSpanContext}static getInstance(){if(!this._instance){this._instance=new TraceAPI}return this._instance}setGlobalTracerProvider(e){const t=(0,n.registerGlobal)(s,this._proxyTracerProvider,c.DiagAPI.instance());if(t){this._proxyTracerProvider.setDelegate(e)}return t}getTracerProvider(){return(0,n.getGlobal)(s)||this._proxyTracerProvider}getTracer(e,t){return this.getTracerProvider().getTracer(e,t)}disable(){(0,n.unregisterGlobal)(s,c.DiagAPI.instance());this._proxyTracerProvider=new a.ProxyTracerProvider}}t.TraceAPI=TraceAPI},277:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.deleteBaggage=t.setBaggage=t.getActiveBaggage=t.getBaggage=void 0;const n=r(491);const a=r(780);const o=(0,a.createContextKey)("OpenTelemetry Baggage Key");function getBaggage(e){return e.getValue(o)||undefined}t.getBaggage=getBaggage;function getActiveBaggage(){return getBaggage(n.ContextAPI.getInstance().active())}t.getActiveBaggage=getActiveBaggage;function setBaggage(e,t){return e.setValue(o,t)}t.setBaggage=setBaggage;function deleteBaggage(e){return e.deleteValue(o)}t.deleteBaggage=deleteBaggage},993:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true});t.BaggageImpl=void 0;class BaggageImpl{constructor(e){this._entries=e?new Map(e):new Map}getEntry(e){const t=this._entries.get(e);if(!t){return undefined}return Object.assign({},t)}getAllEntries(){return Array.from(this._entries.entries()).map((([e,t])=>[e,t]))}setEntry(e,t){const r=new BaggageImpl(this._entries);r._entries.set(e,t);return r}removeEntry(e){const t=new BaggageImpl(this._entries);t._entries.delete(e);return t}removeEntries(...e){const t=new BaggageImpl(this._entries);for(const r of e){t._entries.delete(r)}return t}clear(){return new BaggageImpl}}t.BaggageImpl=BaggageImpl},830:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true});t.baggageEntryMetadataSymbol=void 0;t.baggageEntryMetadataSymbol=Symbol("BaggageEntryMetadata")},369:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.baggageEntryMetadataFromString=t.createBaggage=void 0;const n=r(930);const a=r(993);const o=r(830);const i=n.DiagAPI.instance();function createBaggage(e={}){return new a.BaggageImpl(new Map(Object.entries(e)))}t.createBaggage=createBaggage;function baggageEntryMetadataFromString(e){if(typeof e!=="string"){i.error(`Cannot create baggage metadata from unknown type: ${typeof e}`);e=""}return{__TYPE__:o.baggageEntryMetadataSymbol,toString(){return e}}}t.baggageEntryMetadataFromString=baggageEntryMetadataFromString},67:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.context=void 0;const n=r(491);t.context=n.ContextAPI.getInstance()},223:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.NoopContextManager=void 0;const n=r(780);class NoopContextManager{active(){return n.ROOT_CONTEXT}with(e,t,r,...n){return t.call(r,...n)}bind(e,t){return t}enable(){return this}disable(){return this}}t.NoopContextManager=NoopContextManager},780:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true});t.ROOT_CONTEXT=t.createContextKey=void 0;function createContextKey(e){return Symbol.for(e)}t.createContextKey=createContextKey;class BaseContext{constructor(e){const t=this;t._currentContext=e?new Map(e):new Map;t.getValue=e=>t._currentContext.get(e);t.setValue=(e,r)=>{const n=new BaseContext(t._currentContext);n._currentContext.set(e,r);return n};t.deleteValue=e=>{const r=new BaseContext(t._currentContext);r._currentContext.delete(e);return r}}}t.ROOT_CONTEXT=new BaseContext},506:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.diag=void 0;const n=r(930);t.diag=n.DiagAPI.instance()},56:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.DiagComponentLogger=void 0;const n=r(172);class DiagComponentLogger{constructor(e){this._namespace=e.namespace||"DiagComponentLogger"}debug(...e){return logProxy("debug",this._namespace,e)}error(...e){return logProxy("error",this._namespace,e)}info(...e){return logProxy("info",this._namespace,e)}warn(...e){return logProxy("warn",this._namespace,e)}verbose(...e){return logProxy("verbose",this._namespace,e)}}t.DiagComponentLogger=DiagComponentLogger;function logProxy(e,t,r){const a=(0,n.getGlobal)("diag");if(!a){return}r.unshift(t);return a[e](...r)}},972:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true});t.DiagConsoleLogger=void 0;const r=[{n:"error",c:"error"},{n:"warn",c:"warn"},{n:"info",c:"info"},{n:"debug",c:"debug"},{n:"verbose",c:"trace"}];class DiagConsoleLogger{constructor(){function _consoleFunc(e){return function(...t){if(console){let r=console[e];if(typeof r!=="function"){r=console.log}if(typeof r==="function"){return r.apply(console,t)}}}}for(let e=0;e{Object.defineProperty(t,"__esModule",{value:true});t.createLogLevelDiagLogger=void 0;const n=r(957);function createLogLevelDiagLogger(e,t){if(en.DiagLogLevel.ALL){e=n.DiagLogLevel.ALL}t=t||{};function _filterFunc(r,n){const a=t[r];if(typeof a==="function"&&e>=n){return a.bind(t)}return function(){}}return{error:_filterFunc("error",n.DiagLogLevel.ERROR),warn:_filterFunc("warn",n.DiagLogLevel.WARN),info:_filterFunc("info",n.DiagLogLevel.INFO),debug:_filterFunc("debug",n.DiagLogLevel.DEBUG),verbose:_filterFunc("verbose",n.DiagLogLevel.VERBOSE)}}t.createLogLevelDiagLogger=createLogLevelDiagLogger},957:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true});t.DiagLogLevel=void 0;var r;(function(e){e[e["NONE"]=0]="NONE";e[e["ERROR"]=30]="ERROR";e[e["WARN"]=50]="WARN";e[e["INFO"]=60]="INFO";e[e["DEBUG"]=70]="DEBUG";e[e["VERBOSE"]=80]="VERBOSE";e[e["ALL"]=9999]="ALL"})(r=t.DiagLogLevel||(t.DiagLogLevel={}))},172:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.unregisterGlobal=t.getGlobal=t.registerGlobal=void 0;const n=r(200);const a=r(521);const o=r(130);const i=a.VERSION.split(".")[0];const c=Symbol.for(`opentelemetry.js.api.${i}`);const s=n._globalThis;function registerGlobal(e,t,r,n=false){var o;const i=s[c]=(o=s[c])!==null&&o!==void 0?o:{version:a.VERSION};if(!n&&i[e]){const t=new Error(`@opentelemetry/api: Attempted duplicate registration of API: ${e}`);r.error(t.stack||t.message);return false}if(i.version!==a.VERSION){const t=new Error(`@opentelemetry/api: Registration of version v${i.version} for ${e} does not match previously registered API v${a.VERSION}`);r.error(t.stack||t.message);return false}i[e]=t;r.debug(`@opentelemetry/api: Registered a global for ${e} v${a.VERSION}.`);return true}t.registerGlobal=registerGlobal;function getGlobal(e){var t,r;const n=(t=s[c])===null||t===void 0?void 0:t.version;if(!n||!(0,o.isCompatible)(n)){return}return(r=s[c])===null||r===void 0?void 0:r[e]}t.getGlobal=getGlobal;function unregisterGlobal(e,t){t.debug(`@opentelemetry/api: Unregistering a global for ${e} v${a.VERSION}.`);const r=s[c];if(r){delete r[e]}}t.unregisterGlobal=unregisterGlobal},130:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.isCompatible=t._makeCompatibilityCheck=void 0;const n=r(521);const a=/^(\d+)\.(\d+)\.(\d+)(-(.+))?$/;function _makeCompatibilityCheck(e){const t=new Set([e]);const r=new Set;const n=e.match(a);if(!n){return()=>false}const o={major:+n[1],minor:+n[2],patch:+n[3],prerelease:n[4]};if(o.prerelease!=null){return function isExactmatch(t){return t===e}}function _reject(e){r.add(e);return false}function _accept(e){t.add(e);return true}return function isCompatible(e){if(t.has(e)){return true}if(r.has(e)){return false}const n=e.match(a);if(!n){return _reject(e)}const i={major:+n[1],minor:+n[2],patch:+n[3],prerelease:n[4]};if(i.prerelease!=null){return _reject(e)}if(o.major!==i.major){return _reject(e)}if(o.major===0){if(o.minor===i.minor&&o.patch<=i.patch){return _accept(e)}return _reject(e)}if(o.minor<=i.minor){return _accept(e)}return _reject(e)}}t._makeCompatibilityCheck=_makeCompatibilityCheck;t.isCompatible=_makeCompatibilityCheck(n.VERSION)},886:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.metrics=void 0;const n=r(653);t.metrics=n.MetricsAPI.getInstance()},901:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true});t.ValueType=void 0;var r;(function(e){e[e["INT"]=0]="INT";e[e["DOUBLE"]=1]="DOUBLE"})(r=t.ValueType||(t.ValueType={}))},102:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true});t.createNoopMeter=t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC=t.NOOP_OBSERVABLE_GAUGE_METRIC=t.NOOP_OBSERVABLE_COUNTER_METRIC=t.NOOP_UP_DOWN_COUNTER_METRIC=t.NOOP_HISTOGRAM_METRIC=t.NOOP_COUNTER_METRIC=t.NOOP_METER=t.NoopObservableUpDownCounterMetric=t.NoopObservableGaugeMetric=t.NoopObservableCounterMetric=t.NoopObservableMetric=t.NoopHistogramMetric=t.NoopUpDownCounterMetric=t.NoopCounterMetric=t.NoopMetric=t.NoopMeter=void 0;class NoopMeter{constructor(){}createHistogram(e,r){return t.NOOP_HISTOGRAM_METRIC}createCounter(e,r){return t.NOOP_COUNTER_METRIC}createUpDownCounter(e,r){return t.NOOP_UP_DOWN_COUNTER_METRIC}createObservableGauge(e,r){return t.NOOP_OBSERVABLE_GAUGE_METRIC}createObservableCounter(e,r){return t.NOOP_OBSERVABLE_COUNTER_METRIC}createObservableUpDownCounter(e,r){return t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC}addBatchObservableCallback(e,t){}removeBatchObservableCallback(e){}}t.NoopMeter=NoopMeter;class NoopMetric{}t.NoopMetric=NoopMetric;class NoopCounterMetric extends NoopMetric{add(e,t){}}t.NoopCounterMetric=NoopCounterMetric;class NoopUpDownCounterMetric extends NoopMetric{add(e,t){}}t.NoopUpDownCounterMetric=NoopUpDownCounterMetric;class NoopHistogramMetric extends NoopMetric{record(e,t){}}t.NoopHistogramMetric=NoopHistogramMetric;class NoopObservableMetric{addCallback(e){}removeCallback(e){}}t.NoopObservableMetric=NoopObservableMetric;class NoopObservableCounterMetric extends NoopObservableMetric{}t.NoopObservableCounterMetric=NoopObservableCounterMetric;class NoopObservableGaugeMetric extends NoopObservableMetric{}t.NoopObservableGaugeMetric=NoopObservableGaugeMetric;class NoopObservableUpDownCounterMetric extends NoopObservableMetric{}t.NoopObservableUpDownCounterMetric=NoopObservableUpDownCounterMetric;t.NOOP_METER=new NoopMeter;t.NOOP_COUNTER_METRIC=new NoopCounterMetric;t.NOOP_HISTOGRAM_METRIC=new NoopHistogramMetric;t.NOOP_UP_DOWN_COUNTER_METRIC=new NoopUpDownCounterMetric;t.NOOP_OBSERVABLE_COUNTER_METRIC=new NoopObservableCounterMetric;t.NOOP_OBSERVABLE_GAUGE_METRIC=new NoopObservableGaugeMetric;t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC=new NoopObservableUpDownCounterMetric;function createNoopMeter(){return t.NOOP_METER}t.createNoopMeter=createNoopMeter},660:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.NOOP_METER_PROVIDER=t.NoopMeterProvider=void 0;const n=r(102);class NoopMeterProvider{getMeter(e,t,r){return n.NOOP_METER}}t.NoopMeterProvider=NoopMeterProvider;t.NOOP_METER_PROVIDER=new NoopMeterProvider},200:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;Object.defineProperty(e,n,{enumerable:true,get:function(){return t[r]}})}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var a=this&&this.__exportStar||function(e,t){for(var r in e)if(r!=="default"&&!Object.prototype.hasOwnProperty.call(t,r))n(t,e,r)};Object.defineProperty(t,"__esModule",{value:true});a(r(46),t)},651:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true});t._globalThis=void 0;t._globalThis=typeof globalThis==="object"?globalThis:global},46:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;Object.defineProperty(e,n,{enumerable:true,get:function(){return t[r]}})}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var a=this&&this.__exportStar||function(e,t){for(var r in e)if(r!=="default"&&!Object.prototype.hasOwnProperty.call(t,r))n(t,e,r)};Object.defineProperty(t,"__esModule",{value:true});a(r(651),t)},939:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.propagation=void 0;const n=r(181);t.propagation=n.PropagationAPI.getInstance()},874:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true});t.NoopTextMapPropagator=void 0;class NoopTextMapPropagator{inject(e,t){}extract(e,t){return e}fields(){return[]}}t.NoopTextMapPropagator=NoopTextMapPropagator},194:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true});t.defaultTextMapSetter=t.defaultTextMapGetter=void 0;t.defaultTextMapGetter={get(e,t){if(e==null){return undefined}return e[t]},keys(e){if(e==null){return[]}return Object.keys(e)}};t.defaultTextMapSetter={set(e,t,r){if(e==null){return}e[t]=r}}},845:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.trace=void 0;const n=r(997);t.trace=n.TraceAPI.getInstance()},403:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.NonRecordingSpan=void 0;const n=r(476);class NonRecordingSpan{constructor(e=n.INVALID_SPAN_CONTEXT){this._spanContext=e}spanContext(){return this._spanContext}setAttribute(e,t){return this}setAttributes(e){return this}addEvent(e,t){return this}setStatus(e){return this}updateName(e){return this}end(e){}isRecording(){return false}recordException(e,t){}}t.NonRecordingSpan=NonRecordingSpan},614:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.NoopTracer=void 0;const n=r(491);const a=r(607);const o=r(403);const i=r(139);const c=n.ContextAPI.getInstance();class NoopTracer{startSpan(e,t,r=c.active()){const n=Boolean(t===null||t===void 0?void 0:t.root);if(n){return new o.NonRecordingSpan}const s=r&&(0,a.getSpanContext)(r);if(isSpanContext(s)&&(0,i.isSpanContextValid)(s)){return new o.NonRecordingSpan(s)}else{return new o.NonRecordingSpan}}startActiveSpan(e,t,r,n){let o;let i;let s;if(arguments.length<2){return}else if(arguments.length===2){s=t}else if(arguments.length===3){o=t;s=r}else{o=t;i=r;s=n}const u=i!==null&&i!==void 0?i:c.active();const l=this.startSpan(e,o,u);const g=(0,a.setSpan)(u,l);return c.with(g,s,undefined,l)}}t.NoopTracer=NoopTracer;function isSpanContext(e){return typeof e==="object"&&typeof e["spanId"]==="string"&&typeof e["traceId"]==="string"&&typeof e["traceFlags"]==="number"}},124:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.NoopTracerProvider=void 0;const n=r(614);class NoopTracerProvider{getTracer(e,t,r){return new n.NoopTracer}}t.NoopTracerProvider=NoopTracerProvider},125:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.ProxyTracer=void 0;const n=r(614);const a=new n.NoopTracer;class ProxyTracer{constructor(e,t,r,n){this._provider=e;this.name=t;this.version=r;this.options=n}startSpan(e,t,r){return this._getTracer().startSpan(e,t,r)}startActiveSpan(e,t,r,n){const a=this._getTracer();return Reflect.apply(a.startActiveSpan,a,arguments)}_getTracer(){if(this._delegate){return this._delegate}const e=this._provider.getDelegateTracer(this.name,this.version,this.options);if(!e){return a}this._delegate=e;return this._delegate}}t.ProxyTracer=ProxyTracer},846:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.ProxyTracerProvider=void 0;const n=r(125);const a=r(124);const o=new a.NoopTracerProvider;class ProxyTracerProvider{getTracer(e,t,r){var a;return(a=this.getDelegateTracer(e,t,r))!==null&&a!==void 0?a:new n.ProxyTracer(this,e,t,r)}getDelegate(){var e;return(e=this._delegate)!==null&&e!==void 0?e:o}setDelegate(e){this._delegate=e}getDelegateTracer(e,t,r){var n;return(n=this._delegate)===null||n===void 0?void 0:n.getTracer(e,t,r)}}t.ProxyTracerProvider=ProxyTracerProvider},996:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true});t.SamplingDecision=void 0;var r;(function(e){e[e["NOT_RECORD"]=0]="NOT_RECORD";e[e["RECORD"]=1]="RECORD";e[e["RECORD_AND_SAMPLED"]=2]="RECORD_AND_SAMPLED"})(r=t.SamplingDecision||(t.SamplingDecision={}))},607:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.getSpanContext=t.setSpanContext=t.deleteSpan=t.setSpan=t.getActiveSpan=t.getSpan=void 0;const n=r(780);const a=r(403);const o=r(491);const i=(0,n.createContextKey)("OpenTelemetry Context Key SPAN");function getSpan(e){return e.getValue(i)||undefined}t.getSpan=getSpan;function getActiveSpan(){return getSpan(o.ContextAPI.getInstance().active())}t.getActiveSpan=getActiveSpan;function setSpan(e,t){return e.setValue(i,t)}t.setSpan=setSpan;function deleteSpan(e){return e.deleteValue(i)}t.deleteSpan=deleteSpan;function setSpanContext(e,t){return setSpan(e,new a.NonRecordingSpan(t))}t.setSpanContext=setSpanContext;function getSpanContext(e){var t;return(t=getSpan(e))===null||t===void 0?void 0:t.spanContext()}t.getSpanContext=getSpanContext},325:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.TraceStateImpl=void 0;const n=r(564);const a=32;const o=512;const i=",";const c="=";class TraceStateImpl{constructor(e){this._internalState=new Map;if(e)this._parse(e)}set(e,t){const r=this._clone();if(r._internalState.has(e)){r._internalState.delete(e)}r._internalState.set(e,t);return r}unset(e){const t=this._clone();t._internalState.delete(e);return t}get(e){return this._internalState.get(e)}serialize(){return this._keys().reduce(((e,t)=>{e.push(t+c+this.get(t));return e}),[]).join(i)}_parse(e){if(e.length>o)return;this._internalState=e.split(i).reverse().reduce(((e,t)=>{const r=t.trim();const a=r.indexOf(c);if(a!==-1){const o=r.slice(0,a);const i=r.slice(a+1,t.length);if((0,n.validateKey)(o)&&(0,n.validateValue)(i)){e.set(o,i)}else{}}return e}),new Map);if(this._internalState.size>a){this._internalState=new Map(Array.from(this._internalState.entries()).reverse().slice(0,a))}}_keys(){return Array.from(this._internalState.keys()).reverse()}_clone(){const e=new TraceStateImpl;e._internalState=new Map(this._internalState);return e}}t.TraceStateImpl=TraceStateImpl},564:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true});t.validateValue=t.validateKey=void 0;const r="[_0-9a-z-*/]";const n=`[a-z]${r}{0,255}`;const a=`[a-z0-9]${r}{0,240}@[a-z]${r}{0,13}`;const o=new RegExp(`^(?:${n}|${a})$`);const i=/^[ -~]{0,255}[!-~]$/;const c=/,|=/;function validateKey(e){return o.test(e)}t.validateKey=validateKey;function validateValue(e){return i.test(e)&&!c.test(e)}t.validateValue=validateValue},98:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.createTraceState=void 0;const n=r(325);function createTraceState(e){return new n.TraceStateImpl(e)}t.createTraceState=createTraceState},476:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.INVALID_SPAN_CONTEXT=t.INVALID_TRACEID=t.INVALID_SPANID=void 0;const n=r(475);t.INVALID_SPANID="0000000000000000";t.INVALID_TRACEID="00000000000000000000000000000000";t.INVALID_SPAN_CONTEXT={traceId:t.INVALID_TRACEID,spanId:t.INVALID_SPANID,traceFlags:n.TraceFlags.NONE}},357:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true});t.SpanKind=void 0;var r;(function(e){e[e["INTERNAL"]=0]="INTERNAL";e[e["SERVER"]=1]="SERVER";e[e["CLIENT"]=2]="CLIENT";e[e["PRODUCER"]=3]="PRODUCER";e[e["CONSUMER"]=4]="CONSUMER"})(r=t.SpanKind||(t.SpanKind={}))},139:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.wrapSpanContext=t.isSpanContextValid=t.isValidSpanId=t.isValidTraceId=void 0;const n=r(476);const a=r(403);const o=/^([0-9a-f]{32})$/i;const i=/^[0-9a-f]{16}$/i;function isValidTraceId(e){return o.test(e)&&e!==n.INVALID_TRACEID}t.isValidTraceId=isValidTraceId;function isValidSpanId(e){return i.test(e)&&e!==n.INVALID_SPANID}t.isValidSpanId=isValidSpanId;function isSpanContextValid(e){return isValidTraceId(e.traceId)&&isValidSpanId(e.spanId)}t.isSpanContextValid=isSpanContextValid;function wrapSpanContext(e){return new a.NonRecordingSpan(e)}t.wrapSpanContext=wrapSpanContext},847:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true});t.SpanStatusCode=void 0;var r;(function(e){e[e["UNSET"]=0]="UNSET";e[e["OK"]=1]="OK";e[e["ERROR"]=2]="ERROR"})(r=t.SpanStatusCode||(t.SpanStatusCode={}))},475:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true});t.TraceFlags=void 0;var r;(function(e){e[e["NONE"]=0]="NONE";e[e["SAMPLED"]=1]="SAMPLED"})(r=t.TraceFlags||(t.TraceFlags={}))},521:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true});t.VERSION=void 0;t.VERSION="1.6.0"}};var t={};function __nccwpck_require__(r){var n=t[r];if(n!==undefined){return n.exports}var a=t[r]={exports:{}};var o=true;try{e[r].call(a.exports,a,a.exports,__nccwpck_require__);o=false}finally{if(o)delete t[r]}return a.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var r={};(()=>{var e=r;Object.defineProperty(e,"__esModule",{value:true});e.trace=e.propagation=e.metrics=e.diag=e.context=e.INVALID_SPAN_CONTEXT=e.INVALID_TRACEID=e.INVALID_SPANID=e.isValidSpanId=e.isValidTraceId=e.isSpanContextValid=e.createTraceState=e.TraceFlags=e.SpanStatusCode=e.SpanKind=e.SamplingDecision=e.ProxyTracerProvider=e.ProxyTracer=e.defaultTextMapSetter=e.defaultTextMapGetter=e.ValueType=e.createNoopMeter=e.DiagLogLevel=e.DiagConsoleLogger=e.ROOT_CONTEXT=e.createContextKey=e.baggageEntryMetadataFromString=void 0;var t=__nccwpck_require__(369);Object.defineProperty(e,"baggageEntryMetadataFromString",{enumerable:true,get:function(){return t.baggageEntryMetadataFromString}});var n=__nccwpck_require__(780);Object.defineProperty(e,"createContextKey",{enumerable:true,get:function(){return n.createContextKey}});Object.defineProperty(e,"ROOT_CONTEXT",{enumerable:true,get:function(){return n.ROOT_CONTEXT}});var a=__nccwpck_require__(972);Object.defineProperty(e,"DiagConsoleLogger",{enumerable:true,get:function(){return a.DiagConsoleLogger}});var o=__nccwpck_require__(957);Object.defineProperty(e,"DiagLogLevel",{enumerable:true,get:function(){return o.DiagLogLevel}});var i=__nccwpck_require__(102);Object.defineProperty(e,"createNoopMeter",{enumerable:true,get:function(){return i.createNoopMeter}});var c=__nccwpck_require__(901);Object.defineProperty(e,"ValueType",{enumerable:true,get:function(){return c.ValueType}});var s=__nccwpck_require__(194);Object.defineProperty(e,"defaultTextMapGetter",{enumerable:true,get:function(){return s.defaultTextMapGetter}});Object.defineProperty(e,"defaultTextMapSetter",{enumerable:true,get:function(){return s.defaultTextMapSetter}});var u=__nccwpck_require__(125);Object.defineProperty(e,"ProxyTracer",{enumerable:true,get:function(){return u.ProxyTracer}});var l=__nccwpck_require__(846);Object.defineProperty(e,"ProxyTracerProvider",{enumerable:true,get:function(){return l.ProxyTracerProvider}});var g=__nccwpck_require__(996);Object.defineProperty(e,"SamplingDecision",{enumerable:true,get:function(){return g.SamplingDecision}});var p=__nccwpck_require__(357);Object.defineProperty(e,"SpanKind",{enumerable:true,get:function(){return p.SpanKind}});var d=__nccwpck_require__(847);Object.defineProperty(e,"SpanStatusCode",{enumerable:true,get:function(){return d.SpanStatusCode}});var _=__nccwpck_require__(475);Object.defineProperty(e,"TraceFlags",{enumerable:true,get:function(){return _.TraceFlags}});var f=__nccwpck_require__(98);Object.defineProperty(e,"createTraceState",{enumerable:true,get:function(){return f.createTraceState}});var b=__nccwpck_require__(139);Object.defineProperty(e,"isSpanContextValid",{enumerable:true,get:function(){return b.isSpanContextValid}});Object.defineProperty(e,"isValidTraceId",{enumerable:true,get:function(){return b.isValidTraceId}});Object.defineProperty(e,"isValidSpanId",{enumerable:true,get:function(){return b.isValidSpanId}});var v=__nccwpck_require__(476);Object.defineProperty(e,"INVALID_SPANID",{enumerable:true,get:function(){return v.INVALID_SPANID}});Object.defineProperty(e,"INVALID_TRACEID",{enumerable:true,get:function(){return v.INVALID_TRACEID}});Object.defineProperty(e,"INVALID_SPAN_CONTEXT",{enumerable:true,get:function(){return v.INVALID_SPAN_CONTEXT}});const O=__nccwpck_require__(67);Object.defineProperty(e,"context",{enumerable:true,get:function(){return O.context}});const P=__nccwpck_require__(506);Object.defineProperty(e,"diag",{enumerable:true,get:function(){return P.diag}});const N=__nccwpck_require__(886);Object.defineProperty(e,"metrics",{enumerable:true,get:function(){return N.metrics}});const S=__nccwpck_require__(939);Object.defineProperty(e,"propagation",{enumerable:true,get:function(){return S.propagation}});const C=__nccwpck_require__(845);Object.defineProperty(e,"trace",{enumerable:true,get:function(){return C.trace}});e["default"]={context:O.context,diag:P.diag,metrics:N.metrics,propagation:S.propagation,trace:C.trace}})();module.exports=r})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/@opentelemetry/api/package.json b/build/node_modules/next/dist/compiled/@opentelemetry/api/package.json new file mode 100644 index 0000000..8d1e180 --- /dev/null +++ b/build/node_modules/next/dist/compiled/@opentelemetry/api/package.json @@ -0,0 +1 @@ +{"name":"@opentelemetry/api","main":"index.js","author":"OpenTelemetry Authors","license":"Apache-2.0"} diff --git a/build/node_modules/next/dist/compiled/async-retry/index.js b/build/node_modules/next/dist/compiled/async-retry/index.js new file mode 100644 index 0000000..3a6f794 --- /dev/null +++ b/build/node_modules/next/dist/compiled/async-retry/index.js @@ -0,0 +1 @@ +(()=>{var t={632:(t,r,e)=>{var i=e(862);function retry(t,r){function run(e,o){var n=r||{};var a=i.operation(n);function bail(t){o(t||new Error("Aborted"))}function onError(t,r){if(t.bail){bail(t);return}if(!a.retry(t)){o(a.mainError())}else if(n.onRetry){n.onRetry(t,r)}}function runAttempt(r){var i;try{i=t(bail,r)}catch(t){onError(t,r);return}Promise.resolve(i).then(e).catch((function catchIt(t){onError(t,r)}))}a.attempt(runAttempt)}return new Promise(run)}t.exports=retry},862:(t,r,e)=>{t.exports=e(97)},97:(t,r,e)=>{var i=e(848);r.operation=function(t){var e=r.timeouts(t);return new i(e,{forever:t&&t.forever,unref:t&&t.unref,maxRetryTime:t&&t.maxRetryTime})};r.timeouts=function(t){if(t instanceof Array){return[].concat(t)}var r={retries:10,factor:2,minTimeout:1*1e3,maxTimeout:Infinity,randomize:false};for(var e in t){r[e]=t[e]}if(r.minTimeout>r.maxTimeout){throw new Error("minTimeout is greater than maxTimeout")}var i=[];for(var o=0;o{function RetryOperation(t,r){if(typeof r==="boolean"){r={forever:r}}this._originalTimeouts=JSON.parse(JSON.stringify(t));this._timeouts=t;this._options=r||{};this._maxRetryTime=r&&r.maxRetryTime||Infinity;this._fn=null;this._errors=[];this._attempts=1;this._operationTimeout=null;this._operationTimeoutCb=null;this._timeout=null;this._operationStart=null;if(this._options.forever){this._cachedTimeouts=this._timeouts.slice(0)}}t.exports=RetryOperation;RetryOperation.prototype.reset=function(){this._attempts=1;this._timeouts=this._originalTimeouts};RetryOperation.prototype.stop=function(){if(this._timeout){clearTimeout(this._timeout)}this._timeouts=[];this._cachedTimeouts=null};RetryOperation.prototype.retry=function(t){if(this._timeout){clearTimeout(this._timeout)}if(!t){return false}var r=(new Date).getTime();if(t&&r-this._operationStart>=this._maxRetryTime){this._errors.unshift(new Error("RetryOperation timeout occurred"));return false}this._errors.push(t);var e=this._timeouts.shift();if(e===undefined){if(this._cachedTimeouts){this._errors.splice(this._errors.length-1,this._errors.length);this._timeouts=this._cachedTimeouts.slice(0);e=this._timeouts.shift()}else{return false}}var i=this;var o=setTimeout((function(){i._attempts++;if(i._operationTimeoutCb){i._timeout=setTimeout((function(){i._operationTimeoutCb(i._attempts)}),i._operationTimeout);if(i._options.unref){i._timeout.unref()}}i._fn(i._attempts)}),e);if(this._options.unref){o.unref()}return true};RetryOperation.prototype.attempt=function(t,r){this._fn=t;if(r){if(r.timeout){this._operationTimeout=r.timeout}if(r.cb){this._operationTimeoutCb=r.cb}}var e=this;if(this._operationTimeoutCb){this._timeout=setTimeout((function(){e._operationTimeoutCb()}),e._operationTimeout)}this._operationStart=(new Date).getTime();this._fn(this._attempts)};RetryOperation.prototype.try=function(t){console.log("Using RetryOperation.try() is deprecated");this.attempt(t)};RetryOperation.prototype.start=function(t){console.log("Using RetryOperation.start() is deprecated");this.attempt(t)};RetryOperation.prototype.start=RetryOperation.prototype.try;RetryOperation.prototype.errors=function(){return this._errors};RetryOperation.prototype.attempts=function(){return this._attempts};RetryOperation.prototype.mainError=function(){if(this._errors.length===0){return null}var t={};var r=null;var e=0;for(var i=0;i=e){r=o;e=a}}return r}}};var r={};function __nccwpck_require__(e){var i=r[e];if(i!==undefined){return i.exports}var o=r[e]={exports:{}};var n=true;try{t[e](o,o.exports,__nccwpck_require__);n=false}finally{if(n)delete r[e]}return o.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var e=__nccwpck_require__(632);module.exports=e})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/async-retry/package.json b/build/node_modules/next/dist/compiled/async-retry/package.json new file mode 100644 index 0000000..b106887 --- /dev/null +++ b/build/node_modules/next/dist/compiled/async-retry/package.json @@ -0,0 +1 @@ +{"name":"async-retry","main":"index.js","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/async-sema/index.js b/build/node_modules/next/dist/compiled/async-sema/index.js new file mode 100644 index 0000000..25b8ecf --- /dev/null +++ b/build/node_modules/next/dist/compiled/async-sema/index.js @@ -0,0 +1 @@ +(()=>{"use strict";var t={490:function(t,e,i){var s=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:true});const r=s(i(361));function arrayMove(t,e,i,s,r){for(let n=0;n>>0;t=t-1;t=t|t>>1;t=t|t>>2;t=t|t>>4;t=t|t>>8;t=t|t>>16;return t+1}function getCapacity(t){return pow2AtLeast(Math.min(Math.max(16,t),1073741824))}class Deque{constructor(t){this._capacity=getCapacity(t);this._length=0;this._front=0;this.arr=[]}push(t){const e=this._length;this.checkCapacity(e+1);const i=this._front+e&this._capacity-1;this.arr[i]=t;this._length=e+1;return e+1}pop(){const t=this._length;if(t===0){return void 0}const e=this._front+t-1&this._capacity-1;const i=this.arr[e];this.arr[e]=void 0;this._length=t-1;return i}shift(){const t=this._length;if(t===0){return void 0}const e=this._front;const i=this.arr[e];this.arr[e]=void 0;this._front=e+1&this._capacity-1;this._length=t-1;return i}get length(){return this._length}checkCapacity(t){if(this._capacitye){const t=i+s&e-1;arrayMove(this.arr,0,this.arr,e,t)}}}class ReleaseEmitter extends r.default{}function isFn(t){return typeof t==="function"}function defaultInit(){return"1"}class Sema{constructor(t,{initFn:e=defaultInit,pauseFn:i,resumeFn:s,capacity:r=10}={}){if(isFn(i)!==isFn(s)){throw new Error("pauseFn and resumeFn must be both set for pausing")}this.nrTokens=t;this.free=new Deque(t);this.waiting=new Deque(r);this.releaseEmitter=new ReleaseEmitter;this.noTokens=e===defaultInit;this.pauseFn=i;this.resumeFn=s;this.paused=false;this.releaseEmitter.on("release",(t=>{const e=this.waiting.shift();if(e){e.resolve(t)}else{if(this.resumeFn&&this.paused){this.paused=false;this.resumeFn()}this.free.push(t)}}));for(let i=0;i{if(this.pauseFn&&!this.paused){this.paused=true;this.pauseFn()}this.waiting.push({resolve:t,reject:e})}))}release(t){this.releaseEmitter.emit("release",this.noTokens?"1":t)}drain(){const t=new Array(this.nrTokens);for(let e=0;es.release()),r)}}e.RateLimit=RateLimit},361:t=>{t.exports=require("events")}};var e={};function __nccwpck_require__(i){var s=e[i];if(s!==undefined){return s.exports}var r=e[i]={exports:{}};var n=true;try{t[i].call(r.exports,r,r.exports,__nccwpck_require__);n=false}finally{if(n)delete e[i]}return r.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var i=__nccwpck_require__(490);module.exports=i})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/async-sema/package.json b/build/node_modules/next/dist/compiled/async-sema/package.json new file mode 100644 index 0000000..2c0f9eb --- /dev/null +++ b/build/node_modules/next/dist/compiled/async-sema/package.json @@ -0,0 +1 @@ +{"name":"async-sema","main":"index.js","author":"Olli Vanhoja","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/busboy/index.js b/build/node_modules/next/dist/compiled/busboy/index.js new file mode 100644 index 0000000..7a8cf01 --- /dev/null +++ b/build/node_modules/next/dist/compiled/busboy/index.js @@ -0,0 +1 @@ +(function(){"use strict";var e={900:function(e,t,i){const{parseContentType:s}=i(318);function getInstance(e){const t=e.headers;const i=s(t["content-type"]);if(!i)throw new Error("Malformed content type");for(const s of r){const r=s.detect(i);if(!r)continue;const n={limits:e.limits,headers:t,conType:i,highWaterMark:undefined,fileHwm:undefined,defCharset:undefined,defParamCharset:undefined,preservePath:false};if(e.highWaterMark)n.highWaterMark=e.highWaterMark;if(e.fileHwm)n.fileHwm=e.fileHwm;n.defCharset=e.defCharset;n.defParamCharset=e.defParamCharset;n.preservePath=e.preservePath;return new s(n)}throw new Error(`Unsupported content type: ${t["content-type"]}`)}const r=[i(104),i(506)].filter((function(e){return typeof e.detect==="function"}));e.exports=e=>{if(typeof e!=="object"||e===null)e={};if(typeof e.headers!=="object"||e.headers===null||typeof e.headers["content-type"]!=="string"){throw new Error("Missing Content-Type")}return getInstance(e)}},104:function(e,t,i){const{Readable:s,Writable:r}=i(781);const n=i(542);const{basename:a,convertToUTF8:o,getDecoder:f,parseContentType:l,parseDisposition:c}=i(318);const h=Buffer.from("\r\n");const u=Buffer.from("\r");const d=Buffer.from("-");function noop(){}const _=2e3;const b=16*1024;const p=0;const y=1;const m=2;class HeaderParser{constructor(e){this.header=Object.create(null);this.pairCount=0;this.byteCount=0;this.state=p;this.name="";this.value="";this.crlf=0;this.cb=e}reset(){this.header=Object.create(null);this.pairCount=0;this.byteCount=0;this.state=p;this.name="";this.value="";this.crlf=0}push(e,t,i){let s=t;while(t{this._read();if(--t._fileEndsLeft===0&&t._finalcb){const e=t._finalcb;t._finalcb=null;process.nextTick(e)}}))}_read(e){const t=this._readcb;if(t){this._readcb=null;t()}}}const k={push:(e,t)=>{},destroy:()=>{}};function callAndUnsetCb(e,t){const i=e._writecb;e._writecb=null;if(t)e.destroy(t);else if(i)i()}function nullDecoder(e,t){return e}class Multipart extends r{constructor(e){const t={autoDestroy:true,emitClose:true,highWaterMark:typeof e.highWaterMark==="number"?e.highWaterMark:undefined};super(t);if(!e.conType.params||typeof e.conType.params.boundary!=="string")throw new Error("Multipart: Boundary not found");const i=e.conType.params.boundary;const s=typeof e.defParamCharset==="string"&&e.defParamCharset?f(e.defParamCharset):nullDecoder;const r=e.defCharset||"utf8";const _=e.preservePath;const b={autoDestroy:true,emitClose:true,highWaterMark:typeof e.fileHwm==="number"?e.fileHwm:undefined};const p=e.limits;const y=p&&typeof p.fieldSize==="number"?p.fieldSize:1*1024*1024;const m=p&&typeof p.fileSize==="number"?p.fileSize:Infinity;const g=p&&typeof p.files==="number"?p.files:Infinity;const w=p&&typeof p.fields==="number"?p.fields:Infinity;const C=p&&typeof p.parts==="number"?p.parts:Infinity;let S=-1;let P=0;let T=0;let v=false;this._fileEndsLeft=0;this._fileStream=undefined;this._complete=false;let x=0;let z;let B=0;let E;let M;let L;let A;let K=false;let D=false;let U=false;this._hparser=null;const V=new HeaderParser((e=>{this._hparser=null;v=false;L="text/plain";E=r;M="7bit";A=undefined;K=false;let t;if(!e["content-disposition"]){v=true;return}const i=c(e["content-disposition"][0],s);if(!i||i.type!=="form-data"){v=true;return}if(i.params){if(i.params.name)A=i.params.name;if(i.params["filename*"])t=i.params["filename*"];else if(i.params.filename)t=i.params.filename;if(t!==undefined&&!_)t=a(t)}if(e["content-type"]){const t=l(e["content-type"][0]);if(t){L=`${t.type}/${t.subtype}`;if(t.params&&typeof t.params.charset==="string")E=t.params.charset.toLowerCase()}}if(e["content-transfer-encoding"])M=e["content-transfer-encoding"][0].toLowerCase();if(L==="application/octet-stream"||t!==undefined){if(T===g){if(!D){D=true;this.emit("filesLimit")}v=true;return}++T;if(this.listenerCount("file")===0){v=true;return}x=0;this._fileStream=new FileStream(b,this);++this._fileEndsLeft;this.emit("file",A,this._fileStream,{filename:t,encoding:M,mimeType:L})}else{if(P===w){if(!U){U=true;this.emit("fieldsLimit")}v=true;return}++P;if(this.listenerCount("field")===0){v=true;return}z=[];B=0}}));let W=0;const ssCb=(e,t,i,s,r)=>{e:while(t){if(this._hparser!==null){const e=this._hparser.push(t,i,s);if(e===-1){this._hparser=null;V.reset();this.emit("error",new Error("Malformed part header"));break}i=e}if(i===s)break;if(W!==0){if(W===1){switch(t[i]){case 45:W=2;++i;break;case 13:W=3;++i;break;default:W=0}if(i===s)return}if(W===2){W=0;if(t[i]===45){this._complete=true;this._bparser=k;return}const e=this._writecb;this._writecb=noop;ssCb(false,d,0,1,false);this._writecb=e}else if(W===3){W=0;if(t[i]===10){++i;if(S>=C)break;this._hparser=V;if(i===s)break;continue e}else{const e=this._writecb;this._writecb=noop;ssCb(false,u,0,1,false);this._writecb=e}}}if(!v){if(this._fileStream){let e;const n=Math.min(s-i,m-x);if(!r){e=Buffer.allocUnsafe(n);t.copy(e,0,i,i+n)}else{e=t.slice(i,i+n)}x+=e.length;if(x===m){if(e.length>0)this._fileStream.push(e);this._fileStream.emit("limit");this._fileStream.truncated=true;v=true}else if(!this._fileStream.push(e)){if(this._writecb)this._fileStream._readcb=this._writecb;this._writecb=null}}else if(z!==undefined){let e;const n=Math.min(s-i,y-B);if(!r){e=Buffer.allocUnsafe(n);t.copy(e,0,i,i+n)}else{e=t.slice(i,i+n)}B+=n;z.push(e);if(B===y){v=true;K=true}}}break}if(e){W=1;if(this._fileStream){this._fileStream.push(null);this._fileStream=null}else if(z!==undefined){let e;switch(z.length){case 0:e="";break;case 1:e=o(z[0],E,0);break;default:e=o(Buffer.concat(z,B),E,0)}z=undefined;B=0;this.emit("field",A,e,{nameTruncated:false,valueTruncated:K,encoding:M,mimeType:L})}if(++S===C)this.emit("partsLimit")}};this._bparser=new n(`\r\n--${i}`,ssCb);this._writecb=null;this._finalcb=null;this.write(h)}static detect(e){return e.type==="multipart"&&e.subtype==="form-data"}_write(e,t,i){this._writecb=i;this._bparser.push(e,0);if(this._writecb)callAndUnsetCb(this)}_destroy(e,t){this._hparser=null;this._bparser=k;if(!e)e=checkEndState(this);const i=this._fileStream;if(i){this._fileStream=null;i.destroy(e)}t(e)}_final(e){this._bparser.destroy();if(!this._complete)return e(new Error("Unexpected end of form"));if(this._fileEndsLeft)this._finalcb=finalcb.bind(null,this,e);else finalcb(this,e)}}function finalcb(e,t,i){if(i)return t(i);i=checkEndState(e);t(i)}function checkEndState(e){if(e._hparser)return new Error("Malformed part header");const t=e._fileStream;if(t){e._fileStream=null;t.destroy(new Error("Unexpected end of file"))}if(!e._complete)return new Error("Unexpected end of form")}const g=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];const w=[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1];e.exports=Multipart},506:function(e,t,i){const{Writable:s}=i(781);const{getDecoder:r}=i(318);class URLEncoded extends s{constructor(e){const t={autoDestroy:true,emitClose:true,highWaterMark:typeof e.highWaterMark==="number"?e.highWaterMark:undefined};super(t);let i=e.defCharset||"utf8";if(e.conType.params&&typeof e.conType.params.charset==="string")i=e.conType.params.charset;this.charset=i;const s=e.limits;this.fieldSizeLimit=s&&typeof s.fieldSize==="number"?s.fieldSize:1*1024*1024;this.fieldsLimit=s&&typeof s.fields==="number"?s.fields:Infinity;this.fieldNameSizeLimit=s&&typeof s.fieldNameSize==="number"?s.fieldNameSize:100;this._inKey=true;this._keyTrunc=false;this._valTrunc=false;this._bytesKey=0;this._bytesVal=0;this._fields=0;this._key="";this._val="";this._byte=-2;this._lastPos=0;this._encode=0;this._decoder=r(i)}static detect(e){return e.type==="application"&&e.subtype==="x-www-form-urlencoded"}_write(e,t,i){if(this._fields>=this.fieldsLimit)return i();let s=0;const r=e.length;this._lastPos=0;if(this._byte!==-2){s=readPctEnc(this,e,s,r);if(s===-1)return i(new Error("Malformed urlencoded form"));if(s>=r)return i();if(this._inKey)++this._bytesKey;else++this._bytesVal}e:while(s0){this.emit("field",this._key,"",{nameTruncated:this._keyTrunc,valueTruncated:false,encoding:this.charset,mimeType:"text/plain"})}this._key="";this._val="";this._keyTrunc=false;this._valTrunc=false;this._bytesKey=0;this._bytesVal=0;if(++this._fields>=this.fieldsLimit){this.emit("fieldsLimit");return i()}continue;case 43:if(this._lastPos=r)return i();++this._bytesKey;s=skipKeyBytes(this,e,s,r);continue}++s;++this._bytesKey;s=skipKeyBytes(this,e,s,r)}if(this._lastPos0||this._bytesVal>0){this.emit("field",this._key,this._val,{nameTruncated:this._keyTrunc,valueTruncated:this._valTrunc,encoding:this.charset,mimeType:"text/plain"})}this._key="";this._val="";this._keyTrunc=false;this._valTrunc=false;this._bytesKey=0;this._bytesVal=0;if(++this._fields>=this.fieldsLimit){this.emit("fieldsLimit");return i()}continue e;case 43:if(this._lastPos=r)return i();++this._bytesVal;s=skipValBytes(this,e,s,r);continue}++s;++this._bytesVal;s=skipValBytes(this,e,s,r)}if(this._lastPos0||this._bytesVal>0){if(this._inKey)this._key=this._decoder(this._key,this._encode);else this._val=this._decoder(this._val,this._encode);this.emit("field",this._key,this._val,{nameTruncated:this._keyTrunc,valueTruncated:this._valTrunc,encoding:this.charset,mimeType:"text/plain"})}e()}}function readPctEnc(e,t,i,s){if(i>=s)return s;if(e._byte===-1){const r=n[t[i++]];if(r===-1)return-1;if(r>=8)e._encode=2;if(ie.fieldNameSizeLimit){if(!e._keyTrunc){if(e._lastPose.fieldSizeLimit){if(!e._valTrunc){if(e._lastPos=128)s=2;else if(s===0)s=1;continue}return}break}}h+=e.slice(u,t);h=convertToUTF8(h,d,s);if(h===undefined)return}else{++t;if(t===e.length)return;if(e.charCodeAt(t)===34){u=++t;let i=false;for(;t{if(e.length===0)return"";if(typeof e==="string"){if(t<2)return e;e=Buffer.from(e,"latin1")}return e.utf8Slice(0,e.length)},latin1:(e,t)=>{if(e.length===0)return"";if(typeof e==="string")return e;return e.latin1Slice(0,e.length)},utf16le:(e,t)=>{if(e.length===0)return"";if(typeof e==="string")e=Buffer.from(e,"latin1");return e.ucs2Slice(0,e.length)},base64:(e,t)=>{if(e.length===0)return"";if(typeof e==="string")e=Buffer.from(e,"latin1");return e.base64Slice(0,e.length)},other:(e,t)=>{if(e.length===0)return"";if(typeof e==="string")e=Buffer.from(e,"latin1");try{const t=new TextDecoder(this);return t.decode(e)}catch{}}};function convertToUTF8(e,t,i){const s=getDecoder(t);if(s)return s(e,i)}function basename(e){if(typeof e!=="string")return"";for(let t=e.length-1;t>=0;--t){switch(e.charCodeAt(t)){case 47:case 92:e=e.slice(t+1);return e===".."||e==="."?"":e}}return e===".."||e==="."?"":e}const i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];const s=[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1];const r=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];const n=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];const a=[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,-1,-1,-1,-1,-1,-1,-1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1];e.exports={basename:basename,convertToUTF8:convertToUTF8,getDecoder:getDecoder,parseContentType:parseContentType,parseDisposition:parseDisposition}},542:function(e){function memcmp(e,t,i,s,r){for(let n=0;n1){for(let t=0;t-e._lookbehindSize)e._cb(true,c,0,e._lookbehindSize+n,false);else e._cb(true,undefined,0,0,true);return e._bufPos=n+r}n+=l[s]}while(n<0&&!matchNeedle(e,t,n,i-n))++n;if(n<0){const s=e._lookbehindSize+n;if(s>0){e._cb(false,c,0,s,false)}e._lookbehindSize-=s;c.copy(c,0,s,e._lookbehindSize);c.set(t,e._lookbehindSize);e._lookbehindSize+=i;e._bufPos=i;return i}e._cb(false,c,0,e._lookbehindSize,false);e._lookbehindSize=0}n+=e._bufPos;const h=s[0];while(n<=f){const i=t[n+a];if(i===o&&t[n]===h&&memcmp(s,0,t,n,a)){++e.matches;if(n>0)e._cb(true,t,e._bufPos,n,true);else e._cb(true,undefined,0,0,true);return e._bufPos=n+r}n+=l[i]}while(n0)e._cb(false,t,e._bufPos,n"} diff --git a/build/node_modules/next/dist/compiled/bytes/index.js b/build/node_modules/next/dist/compiled/bytes/index.js new file mode 100644 index 0000000..2b09a15 --- /dev/null +++ b/build/node_modules/next/dist/compiled/bytes/index.js @@ -0,0 +1,8 @@ +(()=>{"use strict";var e={56:e=>{ +/*! + * bytes + * Copyright(c) 2012-2014 TJ Holowaychuk + * Copyright(c) 2015 Jed Watson + * MIT Licensed + */ +e.exports=bytes;e.exports.format=format;e.exports.parse=parse;var r=/\B(?=(\d{3})+(?!\d))/g;var a=/(?:\.0*|(\.[^0]+)0+)$/;var t={b:1,kb:1<<10,mb:1<<20,gb:1<<30,tb:Math.pow(1024,4),pb:Math.pow(1024,5)};var i=/^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb|pb)$/i;function bytes(e,r){if(typeof e==="string"){return parse(e)}if(typeof e==="number"){return format(e,r)}return null}function format(e,i){if(!Number.isFinite(e)){return null}var n=Math.abs(e);var o=i&&i.thousandsSeparator||"";var s=i&&i.unitSeparator||"";var f=i&&i.decimalPlaces!==undefined?i.decimalPlaces:2;var u=Boolean(i&&i.fixedDecimals);var p=i&&i.unit||"";if(!p||!t[p.toLowerCase()]){if(n>=t.pb){p="PB"}else if(n>=t.tb){p="TB"}else if(n>=t.gb){p="GB"}else if(n>=t.mb){p="MB"}else if(n>=t.kb){p="KB"}else{p="B"}}var b=e/t[p.toLowerCase()];var l=b.toFixed(f);if(!u){l=l.replace(a,"$1")}if(o){l=l.split(".").map((function(e,a){return a===0?e.replace(r,o):e})).join(".")}return l+s+p}function parse(e){if(typeof e==="number"&&!isNaN(e)){return e}if(typeof e!=="string"){return null}var r=i.exec(e);var a;var n="b";if(!r){a=parseInt(e,10);n="b"}else{a=parseFloat(r[1]);n=r[4].toLowerCase()}return Math.floor(t[n]*a)}}};var r={};function __nccwpck_require__(a){var t=r[a];if(t!==undefined){return t.exports}var i=r[a]={exports:{}};var n=true;try{e[a](i,i.exports,__nccwpck_require__);n=false}finally{if(n)delete r[a]}return i.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var a=__nccwpck_require__(56);module.exports=a})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/bytes/package.json b/build/node_modules/next/dist/compiled/bytes/package.json new file mode 100644 index 0000000..8d5fb1a --- /dev/null +++ b/build/node_modules/next/dist/compiled/bytes/package.json @@ -0,0 +1 @@ +{"name":"bytes","main":"index.js","author":"TJ Holowaychuk (http://tjholowaychuk.com)","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/ci-info/index.js b/build/node_modules/next/dist/compiled/ci-info/index.js new file mode 100644 index 0000000..9650fd2 --- /dev/null +++ b/build/node_modules/next/dist/compiled/ci-info/index.js @@ -0,0 +1 @@ +(()=>{"use strict";var n={459:(n,e,a)=>{var t=a(59);var r=process.env;Object.defineProperty(e,"_vendors",{value:t.map((function(n){return n.constant}))});e.name=null;e.isPR=null;t.forEach((function(n){var a=Array.isArray(n.env)?n.env:[n.env];var t=a.every((function(n){return checkEnv(n)}));e[n.constant]=t;if(t){e.name=n.name;switch(typeof n.pr){case"string":e.isPR=!!r[n.pr];break;case"object":if("env"in n.pr){e.isPR=n.pr.env in r&&r[n.pr.env]!==n.pr.ne}else if("any"in n.pr){e.isPR=n.pr.any.some((function(n){return!!r[n]}))}else{e.isPR=checkEnv(n.pr)}break;default:e.isPR=null}}}));e.isCI=!!(r.CI||r.CONTINUOUS_INTEGRATION||r.BUILD_NUMBER||r.RUN_ID||e.name||false);function checkEnv(n){if(typeof n==="string")return!!r[n];return Object.keys(n).every((function(e){return r[e]===n[e]}))}},59:n=>{n.exports=JSON.parse('[{"name":"AppVeyor","constant":"APPVEYOR","env":"APPVEYOR","pr":"APPVEYOR_PULL_REQUEST_NUMBER"},{"name":"Azure Pipelines","constant":"AZURE_PIPELINES","env":"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI","pr":"SYSTEM_PULLREQUEST_PULLREQUESTID"},{"name":"Bamboo","constant":"BAMBOO","env":"bamboo_planKey"},{"name":"Bitbucket Pipelines","constant":"BITBUCKET","env":"BITBUCKET_COMMIT","pr":"BITBUCKET_PR_ID"},{"name":"Bitrise","constant":"BITRISE","env":"BITRISE_IO","pr":"BITRISE_PULL_REQUEST"},{"name":"Buddy","constant":"BUDDY","env":"BUDDY_WORKSPACE_ID","pr":"BUDDY_EXECUTION_PULL_REQUEST_ID"},{"name":"Buildkite","constant":"BUILDKITE","env":"BUILDKITE","pr":{"env":"BUILDKITE_PULL_REQUEST","ne":"false"}},{"name":"CircleCI","constant":"CIRCLE","env":"CIRCLECI","pr":"CIRCLE_PULL_REQUEST"},{"name":"Cirrus CI","constant":"CIRRUS","env":"CIRRUS_CI","pr":"CIRRUS_PR"},{"name":"AWS CodeBuild","constant":"CODEBUILD","env":"CODEBUILD_BUILD_ARN"},{"name":"Codeship","constant":"CODESHIP","env":{"CI_NAME":"codeship"}},{"name":"Drone","constant":"DRONE","env":"DRONE","pr":{"DRONE_BUILD_EVENT":"pull_request"}},{"name":"dsari","constant":"DSARI","env":"DSARI"},{"name":"GitHub Actions","constant":"GITHUB_ACTIONS","env":"GITHUB_ACTIONS","pr":{"GITHUB_EVENT_NAME":"pull_request"}},{"name":"GitLab CI","constant":"GITLAB","env":"GITLAB_CI"},{"name":"GoCD","constant":"GOCD","env":"GO_PIPELINE_LABEL"},{"name":"Hudson","constant":"HUDSON","env":"HUDSON_URL"},{"name":"Jenkins","constant":"JENKINS","env":["JENKINS_URL","BUILD_ID"],"pr":{"any":["ghprbPullId","CHANGE_ID"]}},{"name":"ZEIT Now","constant":"ZEIT_NOW","env":"NOW_BUILDER"},{"name":"Magnum CI","constant":"MAGNUM","env":"MAGNUM"},{"name":"Netlify CI","constant":"NETLIFY","env":"NETLIFY","pr":{"env":"PULL_REQUEST","ne":"false"}},{"name":"Nevercode","constant":"NEVERCODE","env":"NEVERCODE","pr":{"env":"NEVERCODE_PULL_REQUEST","ne":"false"}},{"name":"Render","constant":"RENDER","env":"RENDER","pr":{"IS_PULL_REQUEST":"true"}},{"name":"Sail CI","constant":"SAIL","env":"SAILCI","pr":"SAIL_PULL_REQUEST_NUMBER"},{"name":"Semaphore","constant":"SEMAPHORE","env":"SEMAPHORE","pr":"PULL_REQUEST_NUMBER"},{"name":"Shippable","constant":"SHIPPABLE","env":"SHIPPABLE","pr":{"IS_PULL_REQUEST":"true"}},{"name":"Solano CI","constant":"SOLANO","env":"TDDIUM","pr":"TDDIUM_PR_ID"},{"name":"Strider CD","constant":"STRIDER","env":"STRIDER"},{"name":"TaskCluster","constant":"TASKCLUSTER","env":["TASK_ID","RUN_ID"]},{"name":"TeamCity","constant":"TEAMCITY","env":"TEAMCITY_VERSION"},{"name":"Travis CI","constant":"TRAVIS","env":"TRAVIS","pr":{"env":"TRAVIS_PULL_REQUEST","ne":"false"}}]')}};var e={};function __nccwpck_require__(a){var t=e[a];if(t!==undefined){return t.exports}var r=e[a]={exports:{}};var E=true;try{n[a](r,r.exports,__nccwpck_require__);E=false}finally{if(E)delete e[a]}return r.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var a=__nccwpck_require__(459);module.exports=a})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/ci-info/package.json b/build/node_modules/next/dist/compiled/ci-info/package.json new file mode 100644 index 0000000..a1c2c1d --- /dev/null +++ b/build/node_modules/next/dist/compiled/ci-info/package.json @@ -0,0 +1 @@ +{"name":"ci-info","main":"index.js","author":"Thomas Watson Steen (https://twitter.com/wa7son)","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/commander/index.js b/build/node_modules/next/dist/compiled/commander/index.js new file mode 100644 index 0000000..83d2f55 --- /dev/null +++ b/build/node_modules/next/dist/compiled/commander/index.js @@ -0,0 +1 @@ +(()=>{var e={718:e=>{"use strict";e.exports=require("node:child_process")},673:e=>{"use strict";e.exports=require("node:events")},561:e=>{"use strict";e.exports=require("node:fs")},411:e=>{"use strict";e.exports=require("node:path")},742:e=>{"use strict";e.exports=require("node:process")},253:(e,t,i)=>{const{InvalidArgumentError:n}=i(299);class Argument{constructor(e,t){this.description=t||"";this.variadic=false;this.parseArg=undefined;this.defaultValue=undefined;this.defaultValueDescription=undefined;this.argChoices=undefined;switch(e[0]){case"<":this.required=true;this._name=e.slice(1,-1);break;case"[":this.required=false;this._name=e.slice(1,-1);break;default:this.required=true;this._name=e;break}if(this._name.length>3&&this._name.slice(-3)==="..."){this.variadic=true;this._name=this._name.slice(0,-3)}}name(){return this._name}_concatValue(e,t){if(t===this.defaultValue||!Array.isArray(t)){return[e]}return t.concat(e)}default(e,t){this.defaultValue=e;this.defaultValueDescription=t;return this}argParser(e){this.parseArg=e;return this}choices(e){this.argChoices=e.slice();this.parseArg=(e,t)=>{if(!this.argChoices.includes(e)){throw new n(`Allowed choices are ${this.argChoices.join(", ")}.`)}if(this.variadic){return this._concatValue(e,t)}return e};return this}argRequired(){this.required=true;return this}argOptional(){this.required=false;return this}}function humanReadableArgName(e){const t=e.name()+(e.variadic===true?"...":"");return e.required?"<"+t+">":"["+t+"]"}t.Argument=Argument;t.humanReadableArgName=humanReadableArgName},119:(e,t,i)=>{const n=i(673).EventEmitter;const s=i(718);const r=i(411);const o=i(561);const a=i(742);const{Argument:h,humanReadableArgName:l}=i(253);const{CommanderError:u}=i(299);const{Help:c}=i(638);const{Option:p,DualOptions:d}=i(77);const{suggestSimilar:m}=i(301);class Command extends n{constructor(e){super();this.commands=[];this.options=[];this.parent=null;this._allowUnknownOption=false;this._allowExcessArguments=true;this.registeredArguments=[];this._args=this.registeredArguments;this.args=[];this.rawArgs=[];this.processedArgs=[];this._scriptPath=null;this._name=e||"";this._optionValues={};this._optionValueSources={};this._storeOptionsAsProperties=false;this._actionHandler=null;this._executableHandler=false;this._executableFile=null;this._executableDir=null;this._defaultCommandName=null;this._exitCallback=null;this._aliases=[];this._combineFlagAndOptionalValue=true;this._description="";this._summary="";this._argsDescription=undefined;this._enablePositionalOptions=false;this._passThroughOptions=false;this._lifeCycleHooks={};this._showHelpAfterError=false;this._showSuggestionAfterError=true;this._outputConfiguration={writeOut:e=>a.stdout.write(e),writeErr:e=>a.stderr.write(e),getOutHelpWidth:()=>a.stdout.isTTY?a.stdout.columns:undefined,getErrHelpWidth:()=>a.stderr.isTTY?a.stderr.columns:undefined,outputError:(e,t)=>t(e)};this._hidden=false;this._helpOption=undefined;this._addImplicitHelpCommand=undefined;this._helpCommand=undefined;this._helpConfiguration={}}copyInheritedSettings(e){this._outputConfiguration=e._outputConfiguration;this._helpOption=e._helpOption;this._helpCommand=e._helpCommand;this._helpConfiguration=e._helpConfiguration;this._exitCallback=e._exitCallback;this._storeOptionsAsProperties=e._storeOptionsAsProperties;this._combineFlagAndOptionalValue=e._combineFlagAndOptionalValue;this._allowExcessArguments=e._allowExcessArguments;this._enablePositionalOptions=e._enablePositionalOptions;this._showHelpAfterError=e._showHelpAfterError;this._showSuggestionAfterError=e._showSuggestionAfterError;return this}_getCommandAndAncestors(){const e=[];for(let t=this;t;t=t.parent){e.push(t)}return e}command(e,t,i){let n=t;let s=i;if(typeof n==="object"&&n!==null){s=n;n=null}s=s||{};const[,r,o]=e.match(/([^ ]+) *(.*)/);const a=this.createCommand(r);if(n){a.description(n);a._executableHandler=true}if(s.isDefault)this._defaultCommandName=a._name;a._hidden=!!(s.noHelp||s.hidden);a._executableFile=s.executableFile||null;if(o)a.arguments(o);this._registerCommand(a);a.parent=this;a.copyInheritedSettings(this);if(n)return this;return a}createCommand(e){return new Command(e)}createHelp(){return Object.assign(new c,this.configureHelp())}configureHelp(e){if(e===undefined)return this._helpConfiguration;this._helpConfiguration=e;return this}configureOutput(e){if(e===undefined)return this._outputConfiguration;Object.assign(this._outputConfiguration,e);return this}showHelpAfterError(e=true){if(typeof e!=="string")e=!!e;this._showHelpAfterError=e;return this}showSuggestionAfterError(e=true){this._showSuggestionAfterError=!!e;return this}addCommand(e,t){if(!e._name){throw new Error(`Command passed to .addCommand() must have a name\n- specify the name in Command constructor or using .name()`)}t=t||{};if(t.isDefault)this._defaultCommandName=e._name;if(t.noHelp||t.hidden)e._hidden=true;this._registerCommand(e);e.parent=this;e._checkForBrokenPassThrough();return this}createArgument(e,t){return new h(e,t)}argument(e,t,i,n){const s=this.createArgument(e,t);if(typeof i==="function"){s.default(n).argParser(i)}else{s.default(i)}this.addArgument(s);return this}arguments(e){e.trim().split(/ +/).forEach((e=>{this.argument(e)}));return this}addArgument(e){const t=this.registeredArguments.slice(-1)[0];if(t&&t.variadic){throw new Error(`only the last argument can be variadic '${t.name()}'`)}if(e.required&&e.defaultValue!==undefined&&e.parseArg===undefined){throw new Error(`a default value for a required argument is never used: '${e.name()}'`)}this.registeredArguments.push(e);return this}helpCommand(e,t){if(typeof e==="boolean"){this._addImplicitHelpCommand=e;return this}e=e??"help [command]";const[,i,n]=e.match(/([^ ]+) *(.*)/);const s=t??"display help for command";const r=this.createCommand(i);r.helpOption(false);if(n)r.arguments(n);if(s)r.description(s);this._addImplicitHelpCommand=true;this._helpCommand=r;return this}addHelpCommand(e,t){if(typeof e!=="object"){this.helpCommand(e,t);return this}this._addImplicitHelpCommand=true;this._helpCommand=e;return this}_getHelpCommand(){const e=this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"));if(e){if(this._helpCommand===undefined){this.helpCommand(undefined,undefined)}return this._helpCommand}return null}hook(e,t){const i=["preSubcommand","preAction","postAction"];if(!i.includes(e)){throw new Error(`Unexpected value for event passed to hook : '${e}'.\nExpecting one of '${i.join("', '")}'`)}if(this._lifeCycleHooks[e]){this._lifeCycleHooks[e].push(t)}else{this._lifeCycleHooks[e]=[t]}return this}exitOverride(e){if(e){this._exitCallback=e}else{this._exitCallback=e=>{if(e.code!=="commander.executeSubCommandAsync"){throw e}else{}}}return this}_exit(e,t,i){if(this._exitCallback){this._exitCallback(new u(e,t,i))}a.exit(e)}action(e){const listener=t=>{const i=this.registeredArguments.length;const n=t.slice(0,i);if(this._storeOptionsAsProperties){n[i]=this}else{n[i]=this.opts()}n.push(this);return e.apply(this,n)};this._actionHandler=listener;return this}createOption(e,t){return new p(e,t)}_callParseArg(e,t,i,n){try{return e.parseArg(t,i)}catch(e){if(e.code==="commander.invalidArgument"){const t=`${n} ${e.message}`;this.error(t,{exitCode:e.exitCode,code:e.code})}throw e}}_registerOption(e){const t=e.short&&this._findOption(e.short)||e.long&&this._findOption(e.long);if(t){const i=e.long&&this._findOption(e.long)?e.long:e.short;throw new Error(`Cannot add option '${e.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${i}'\n- already used by option '${t.flags}'`)}this.options.push(e)}_registerCommand(e){const knownBy=e=>[e.name()].concat(e.aliases());const t=knownBy(e).find((e=>this._findCommand(e)));if(t){const i=knownBy(this._findCommand(t)).join("|");const n=knownBy(e).join("|");throw new Error(`cannot add command '${n}' as already have command '${i}'`)}this.commands.push(e)}addOption(e){this._registerOption(e);const t=e.name();const i=e.attributeName();if(e.negate){const t=e.long.replace(/^--no-/,"--");if(!this._findOption(t)){this.setOptionValueWithSource(i,e.defaultValue===undefined?true:e.defaultValue,"default")}}else if(e.defaultValue!==undefined){this.setOptionValueWithSource(i,e.defaultValue,"default")}const handleOptionValue=(t,n,s)=>{if(t==null&&e.presetArg!==undefined){t=e.presetArg}const r=this.getOptionValue(i);if(t!==null&&e.parseArg){t=this._callParseArg(e,t,r,n)}else if(t!==null&&e.variadic){t=e._concatValue(t,r)}if(t==null){if(e.negate){t=false}else if(e.isBoolean()||e.optional){t=true}else{t=""}}this.setOptionValueWithSource(i,t,s)};this.on("option:"+t,(t=>{const i=`error: option '${e.flags}' argument '${t}' is invalid.`;handleOptionValue(t,i,"cli")}));if(e.envVar){this.on("optionEnv:"+t,(t=>{const i=`error: option '${e.flags}' value '${t}' from env '${e.envVar}' is invalid.`;handleOptionValue(t,i,"env")}))}return this}_optionEx(e,t,i,n,s){if(typeof t==="object"&&t instanceof p){throw new Error("To add an Option object use addOption() instead of option() or requiredOption()")}const r=this.createOption(t,i);r.makeOptionMandatory(!!e.mandatory);if(typeof n==="function"){r.default(s).argParser(n)}else if(n instanceof RegExp){const e=n;n=(t,i)=>{const n=e.exec(t);return n?n[0]:i};r.default(s).argParser(n)}else{r.default(n)}return this.addOption(r)}option(e,t,i,n){return this._optionEx({},e,t,i,n)}requiredOption(e,t,i,n){return this._optionEx({mandatory:true},e,t,i,n)}combineFlagAndOptionalValue(e=true){this._combineFlagAndOptionalValue=!!e;return this}allowUnknownOption(e=true){this._allowUnknownOption=!!e;return this}allowExcessArguments(e=true){this._allowExcessArguments=!!e;return this}enablePositionalOptions(e=true){this._enablePositionalOptions=!!e;return this}passThroughOptions(e=true){this._passThroughOptions=!!e;this._checkForBrokenPassThrough();return this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions){throw new Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}}storeOptionsAsProperties(e=true){if(this.options.length){throw new Error("call .storeOptionsAsProperties() before adding options")}if(Object.keys(this._optionValues).length){throw new Error("call .storeOptionsAsProperties() before setting option values")}this._storeOptionsAsProperties=!!e;return this}getOptionValue(e){if(this._storeOptionsAsProperties){return this[e]}return this._optionValues[e]}setOptionValue(e,t){return this.setOptionValueWithSource(e,t,undefined)}setOptionValueWithSource(e,t,i){if(this._storeOptionsAsProperties){this[e]=t}else{this._optionValues[e]=t}this._optionValueSources[e]=i;return this}getOptionValueSource(e){return this._optionValueSources[e]}getOptionValueSourceWithGlobals(e){let t;this._getCommandAndAncestors().forEach((i=>{if(i.getOptionValueSource(e)!==undefined){t=i.getOptionValueSource(e)}}));return t}_prepareUserArgs(e,t){if(e!==undefined&&!Array.isArray(e)){throw new Error("first parameter to parse must be array or undefined")}t=t||{};if(e===undefined&&t.from===undefined){if(a.versions?.electron){t.from="electron"}const e=a.execArgv??[];if(e.includes("-e")||e.includes("--eval")||e.includes("-p")||e.includes("--print")){t.from="eval"}}if(e===undefined){e=a.argv}this.rawArgs=e.slice();let i;switch(t.from){case undefined:case"node":this._scriptPath=e[1];i=e.slice(2);break;case"electron":if(a.defaultApp){this._scriptPath=e[1];i=e.slice(2)}else{i=e.slice(1)}break;case"user":i=e.slice(0);break;case"eval":i=e.slice(1);break;default:throw new Error(`unexpected parse option { from: '${t.from}' }`)}if(!this._name&&this._scriptPath)this.nameFromFilename(this._scriptPath);this._name=this._name||"program";return i}parse(e,t){const i=this._prepareUserArgs(e,t);this._parseCommand([],i);return this}async parseAsync(e,t){const i=this._prepareUserArgs(e,t);await this._parseCommand([],i);return this}_executeSubCommand(e,t){t=t.slice();let i=false;const n=[".js",".ts",".tsx",".mjs",".cjs"];function findFile(e,t){const i=r.resolve(e,t);if(o.existsSync(i))return i;if(n.includes(r.extname(t)))return undefined;const s=n.find((e=>o.existsSync(`${i}${e}`)));if(s)return`${i}${s}`;return undefined}this._checkForMissingMandatoryOptions();this._checkForConflictingOptions();let h=e._executableFile||`${this._name}-${e._name}`;let l=this._executableDir||"";if(this._scriptPath){let e;try{e=o.realpathSync(this._scriptPath)}catch(t){e=this._scriptPath}l=r.resolve(r.dirname(e),l)}if(l){let t=findFile(l,h);if(!t&&!e._executableFile&&this._scriptPath){const i=r.basename(this._scriptPath,r.extname(this._scriptPath));if(i!==this._name){t=findFile(l,`${i}-${e._name}`)}}h=t||h}i=n.includes(r.extname(h));let c;if(a.platform!=="win32"){if(i){t.unshift(h);t=incrementNodeInspectorPort(a.execArgv).concat(t);c=s.spawn(a.argv[0],t,{stdio:"inherit"})}else{c=s.spawn(h,t,{stdio:"inherit"})}}else{t.unshift(h);t=incrementNodeInspectorPort(a.execArgv).concat(t);c=s.spawn(a.execPath,t,{stdio:"inherit"})}if(!c.killed){const e=["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"];e.forEach((e=>{a.on(e,(()=>{if(c.killed===false&&c.exitCode===null){c.kill(e)}}))}))}const p=this._exitCallback;c.on("close",(e=>{e=e??1;if(!p){a.exit(e)}else{p(new u(e,"commander.executeSubCommandAsync","(close)"))}}));c.on("error",(t=>{if(t.code==="ENOENT"){const t=l?`searched for local subcommand relative to directory '${l}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory";const i=`'${h}' does not exist\n - if '${e._name}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead\n - if the default executable name is not suitable, use the executableFile option to supply a custom name or path\n - ${t}`;throw new Error(i)}else if(t.code==="EACCES"){throw new Error(`'${h}' not executable`)}if(!p){a.exit(1)}else{const e=new u(1,"commander.executeSubCommandAsync","(error)");e.nestedError=t;p(e)}}));this.runningCommand=c}_dispatchSubcommand(e,t,i){const n=this._findCommand(e);if(!n)this.help({error:true});let s;s=this._chainOrCallSubCommandHook(s,n,"preSubcommand");s=this._chainOrCall(s,(()=>{if(n._executableHandler){this._executeSubCommand(n,t.concat(i))}else{return n._parseCommand(t,i)}}));return s}_dispatchHelpCommand(e){if(!e){this.help()}const t=this._findCommand(e);if(t&&!t._executableHandler){t.help()}return this._dispatchSubcommand(e,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach(((e,t)=>{if(e.required&&this.args[t]==null){this.missingArgument(e.name())}}));if(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic){return}if(this.args.length>this.registeredArguments.length){this._excessArguments(this.args)}}_processArguments(){const myParseArg=(e,t,i)=>{let n=t;if(t!==null&&e.parseArg){const s=`error: command-argument value '${t}' is invalid for argument '${e.name()}'.`;n=this._callParseArg(e,t,i,s)}return n};this._checkNumberOfArguments();const e=[];this.registeredArguments.forEach(((t,i)=>{let n=t.defaultValue;if(t.variadic){if(imyParseArg(t,i,e)),t.defaultValue)}}else if(n===undefined){n=[]}}else if(it()))}return t()}_chainOrCallHooks(e,t){let i=e;const n=[];this._getCommandAndAncestors().reverse().filter((e=>e._lifeCycleHooks[t]!==undefined)).forEach((e=>{e._lifeCycleHooks[t].forEach((t=>{n.push({hookedCommand:e,callback:t})}))}));if(t==="postAction"){n.reverse()}n.forEach((e=>{i=this._chainOrCall(i,(()=>e.callback(e.hookedCommand,this)))}));return i}_chainOrCallSubCommandHook(e,t,i){let n=e;if(this._lifeCycleHooks[i]!==undefined){this._lifeCycleHooks[i].forEach((e=>{n=this._chainOrCall(n,(()=>e(this,t)))}))}return n}_parseCommand(e,t){const i=this.parseOptions(t);this._parseOptionsEnv();this._parseOptionsImplied();e=e.concat(i.operands);t=i.unknown;this.args=e.concat(t);if(e&&this._findCommand(e[0])){return this._dispatchSubcommand(e[0],e.slice(1),t)}if(this._getHelpCommand()&&e[0]===this._getHelpCommand().name()){return this._dispatchHelpCommand(e[1])}if(this._defaultCommandName){this._outputHelpIfRequested(t);return this._dispatchSubcommand(this._defaultCommandName,e,t)}if(this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName){this.help({error:true})}this._outputHelpIfRequested(i.unknown);this._checkForMissingMandatoryOptions();this._checkForConflictingOptions();const checkForUnknownOptions=()=>{if(i.unknown.length>0){this.unknownOption(i.unknown[0])}};const n=`command:${this.name()}`;if(this._actionHandler){checkForUnknownOptions();this._processArguments();let i;i=this._chainOrCallHooks(i,"preAction");i=this._chainOrCall(i,(()=>this._actionHandler(this.processedArgs)));if(this.parent){i=this._chainOrCall(i,(()=>{this.parent.emit(n,e,t)}))}i=this._chainOrCallHooks(i,"postAction");return i}if(this.parent&&this.parent.listenerCount(n)){checkForUnknownOptions();this._processArguments();this.parent.emit(n,e,t)}else if(e.length){if(this._findCommand("*")){return this._dispatchSubcommand("*",e,t)}if(this.listenerCount("command:*")){this.emit("command:*",e,t)}else if(this.commands.length){this.unknownCommand()}else{checkForUnknownOptions();this._processArguments()}}else if(this.commands.length){checkForUnknownOptions();this.help({error:true})}else{checkForUnknownOptions();this._processArguments()}}_findCommand(e){if(!e)return undefined;return this.commands.find((t=>t._name===e||t._aliases.includes(e)))}_findOption(e){return this.options.find((t=>t.is(e)))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach((e=>{e.options.forEach((t=>{if(t.mandatory&&e.getOptionValue(t.attributeName())===undefined){e.missingMandatoryOptionValue(t)}}))}))}_checkForConflictingLocalOptions(){const e=this.options.filter((e=>{const t=e.attributeName();if(this.getOptionValue(t)===undefined){return false}return this.getOptionValueSource(t)!=="default"}));const t=e.filter((e=>e.conflictsWith.length>0));t.forEach((t=>{const i=e.find((e=>t.conflictsWith.includes(e.attributeName())));if(i){this._conflictingOption(t,i)}}))}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach((e=>{e._checkForConflictingLocalOptions()}))}parseOptions(e){const t=[];const i=[];let n=t;const s=e.slice();function maybeOption(e){return e.length>1&&e[0]==="-"}let r=null;while(s.length){const e=s.shift();if(e==="--"){if(n===i)n.push(e);n.push(...s);break}if(r&&!maybeOption(e)){this.emit(`option:${r.name()}`,e);continue}r=null;if(maybeOption(e)){const t=this._findOption(e);if(t){if(t.required){const e=s.shift();if(e===undefined)this.optionMissingArgument(t);this.emit(`option:${t.name()}`,e)}else if(t.optional){let e=null;if(s.length>0&&!maybeOption(s[0])){e=s.shift()}this.emit(`option:${t.name()}`,e)}else{this.emit(`option:${t.name()}`)}r=t.variadic?t:null;continue}}if(e.length>2&&e[0]==="-"&&e[1]!=="-"){const t=this._findOption(`-${e[1]}`);if(t){if(t.required||t.optional&&this._combineFlagAndOptionalValue){this.emit(`option:${t.name()}`,e.slice(2))}else{this.emit(`option:${t.name()}`);s.unshift(`-${e.slice(2)}`)}continue}}if(/^--[^=]+=/.test(e)){const t=e.indexOf("=");const i=this._findOption(e.slice(0,t));if(i&&(i.required||i.optional)){this.emit(`option:${i.name()}`,e.slice(t+1));continue}}if(maybeOption(e)){n=i}if((this._enablePositionalOptions||this._passThroughOptions)&&t.length===0&&i.length===0){if(this._findCommand(e)){t.push(e);if(s.length>0)i.push(...s);break}else if(this._getHelpCommand()&&e===this._getHelpCommand().name()){t.push(e);if(s.length>0)t.push(...s);break}else if(this._defaultCommandName){i.push(e);if(s.length>0)i.push(...s);break}}if(this._passThroughOptions){n.push(e);if(s.length>0)n.push(...s);break}n.push(e)}return{operands:t,unknown:i}}opts(){if(this._storeOptionsAsProperties){const e={};const t=this.options.length;for(let i=0;iObject.assign(e,t.opts())),{})}error(e,t){this._outputConfiguration.outputError(`${e}\n`,this._outputConfiguration.writeErr);if(typeof this._showHelpAfterError==="string"){this._outputConfiguration.writeErr(`${this._showHelpAfterError}\n`)}else if(this._showHelpAfterError){this._outputConfiguration.writeErr("\n");this.outputHelp({error:true})}const i=t||{};const n=i.exitCode||1;const s=i.code||"commander.error";this._exit(n,s,e)}_parseOptionsEnv(){this.options.forEach((e=>{if(e.envVar&&e.envVar in a.env){const t=e.attributeName();if(this.getOptionValue(t)===undefined||["default","config","env"].includes(this.getOptionValueSource(t))){if(e.required||e.optional){this.emit(`optionEnv:${e.name()}`,a.env[e.envVar])}else{this.emit(`optionEnv:${e.name()}`)}}}}))}_parseOptionsImplied(){const e=new d(this.options);const hasCustomOptionValue=e=>this.getOptionValue(e)!==undefined&&!["default","implied"].includes(this.getOptionValueSource(e));this.options.filter((t=>t.implied!==undefined&&hasCustomOptionValue(t.attributeName())&&e.valueFromOption(this.getOptionValue(t.attributeName()),t))).forEach((e=>{Object.keys(e.implied).filter((e=>!hasCustomOptionValue(e))).forEach((t=>{this.setOptionValueWithSource(t,e.implied[t],"implied")}))}))}missingArgument(e){const t=`error: missing required argument '${e}'`;this.error(t,{code:"commander.missingArgument"})}optionMissingArgument(e){const t=`error: option '${e.flags}' argument missing`;this.error(t,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(e){const t=`error: required option '${e.flags}' not specified`;this.error(t,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(e,t){const findBestOptionFromValue=e=>{const t=e.attributeName();const i=this.getOptionValue(t);const n=this.options.find((e=>e.negate&&t===e.attributeName()));const s=this.options.find((e=>!e.negate&&t===e.attributeName()));if(n&&(n.presetArg===undefined&&i===false||n.presetArg!==undefined&&i===n.presetArg)){return n}return s||e};const getErrorMessage=e=>{const t=findBestOptionFromValue(e);const i=t.attributeName();const n=this.getOptionValueSource(i);if(n==="env"){return`environment variable '${t.envVar}'`}return`option '${t.flags}'`};const i=`error: ${getErrorMessage(e)} cannot be used with ${getErrorMessage(t)}`;this.error(i,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let t="";if(e.startsWith("--")&&this._showSuggestionAfterError){let i=[];let n=this;do{const e=n.createHelp().visibleOptions(n).filter((e=>e.long)).map((e=>e.long));i=i.concat(e);n=n.parent}while(n&&!n._enablePositionalOptions);t=m(e,i)}const i=`error: unknown option '${e}'${t}`;this.error(i,{code:"commander.unknownOption"})}_excessArguments(e){if(this._allowExcessArguments)return;const t=this.registeredArguments.length;const i=t===1?"":"s";const n=this.parent?` for '${this.name()}'`:"";const s=`error: too many arguments${n}. Expected ${t} argument${i} but got ${e.length}.`;this.error(s,{code:"commander.excessArguments"})}unknownCommand(){const e=this.args[0];let t="";if(this._showSuggestionAfterError){const i=[];this.createHelp().visibleCommands(this).forEach((e=>{i.push(e.name());if(e.alias())i.push(e.alias())}));t=m(e,i)}const i=`error: unknown command '${e}'${t}`;this.error(i,{code:"commander.unknownCommand"})}version(e,t,i){if(e===undefined)return this._version;this._version=e;t=t||"-V, --version";i=i||"output the version number";const n=this.createOption(t,i);this._versionOptionName=n.attributeName();this._registerOption(n);this.on("option:"+n.name(),(()=>{this._outputConfiguration.writeOut(`${e}\n`);this._exit(0,"commander.version",e)}));return this}description(e,t){if(e===undefined&&t===undefined)return this._description;this._description=e;if(t){this._argsDescription=t}return this}summary(e){if(e===undefined)return this._summary;this._summary=e;return this}alias(e){if(e===undefined)return this._aliases[0];let t=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler){t=this.commands[this.commands.length-1]}if(e===t._name)throw new Error("Command alias can't be the same as its name");const i=this.parent?._findCommand(e);if(i){const t=[i.name()].concat(i.aliases()).join("|");throw new Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${t}'`)}t._aliases.push(e);return this}aliases(e){if(e===undefined)return this._aliases;e.forEach((e=>this.alias(e)));return this}usage(e){if(e===undefined){if(this._usage)return this._usage;const e=this.registeredArguments.map((e=>l(e)));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?e:[]).join(" ")}this._usage=e;return this}name(e){if(e===undefined)return this._name;this._name=e;return this}nameFromFilename(e){this._name=r.basename(e,r.extname(e));return this}executableDir(e){if(e===undefined)return this._executableDir;this._executableDir=e;return this}helpInformation(e){const t=this.createHelp();if(t.helpWidth===undefined){t.helpWidth=e&&e.error?this._outputConfiguration.getErrHelpWidth():this._outputConfiguration.getOutHelpWidth()}return t.formatHelp(this,t)}_getHelpContext(e){e=e||{};const t={error:!!e.error};let i;if(t.error){i=e=>this._outputConfiguration.writeErr(e)}else{i=e=>this._outputConfiguration.writeOut(e)}t.write=e.write||i;t.command=this;return t}outputHelp(e){let t;if(typeof e==="function"){t=e;e=undefined}const i=this._getHelpContext(e);this._getCommandAndAncestors().reverse().forEach((e=>e.emit("beforeAllHelp",i)));this.emit("beforeHelp",i);let n=this.helpInformation(i);if(t){n=t(n);if(typeof n!=="string"&&!Buffer.isBuffer(n)){throw new Error("outputHelp callback must return a string or a Buffer")}}i.write(n);if(this._getHelpOption()?.long){this.emit(this._getHelpOption().long)}this.emit("afterHelp",i);this._getCommandAndAncestors().forEach((e=>e.emit("afterAllHelp",i)))}helpOption(e,t){if(typeof e==="boolean"){if(e){this._helpOption=this._helpOption??undefined}else{this._helpOption=null}return this}e=e??"-h, --help";t=t??"display help for command";this._helpOption=this.createOption(e,t);return this}_getHelpOption(){if(this._helpOption===undefined){this.helpOption(undefined,undefined)}return this._helpOption}addHelpOption(e){this._helpOption=e;return this}help(e){this.outputHelp(e);let t=a.exitCode||0;if(t===0&&e&&typeof e!=="function"&&e.error){t=1}this._exit(t,"commander.help","(outputHelp)")}addHelpText(e,t){const i=["beforeAll","before","after","afterAll"];if(!i.includes(e)){throw new Error(`Unexpected value for position to addHelpText.\nExpecting one of '${i.join("', '")}'`)}const n=`${e}Help`;this.on(n,(e=>{let i;if(typeof t==="function"){i=t({error:e.error,command:e.command})}else{i=t}if(i){e.write(`${i}\n`)}}));return this}_outputHelpIfRequested(e){const t=this._getHelpOption();const i=t&&e.find((e=>t.is(e)));if(i){this.outputHelp();this._exit(0,"commander.helpDisplayed","(outputHelp)")}}}function incrementNodeInspectorPort(e){return e.map((e=>{if(!e.startsWith("--inspect")){return e}let t;let i="127.0.0.1";let n="9229";let s;if((s=e.match(/^(--inspect(-brk)?)$/))!==null){t=s[1]}else if((s=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null){t=s[1];if(/^\d+$/.test(s[3])){n=s[3]}else{i=s[3]}}else if((s=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null){t=s[1];i=s[3];n=s[4]}if(t&&n!=="0"){return`${t}=${i}:${parseInt(n)+1}`}return e}))}t.Command=Command},299:(e,t)=>{class CommanderError extends Error{constructor(e,t,i){super(i);Error.captureStackTrace(this,this.constructor);this.name=this.constructor.name;this.code=t;this.exitCode=e;this.nestedError=undefined}}class InvalidArgumentError extends CommanderError{constructor(e){super(1,"commander.invalidArgument",e);Error.captureStackTrace(this,this.constructor);this.name=this.constructor.name}}t.CommanderError=CommanderError;t.InvalidArgumentError=InvalidArgumentError},638:(e,t,i)=>{const{humanReadableArgName:n}=i(253);class Help{constructor(){this.helpWidth=undefined;this.sortSubcommands=false;this.sortOptions=false;this.showGlobalOptions=false}visibleCommands(e){const t=e.commands.filter((e=>!e._hidden));const i=e._getHelpCommand();if(i&&!i._hidden){t.push(i)}if(this.sortSubcommands){t.sort(((e,t)=>e.name().localeCompare(t.name())))}return t}compareOptions(e,t){const getSortKey=e=>e.short?e.short.replace(/^-/,""):e.long.replace(/^--/,"");return getSortKey(e).localeCompare(getSortKey(t))}visibleOptions(e){const t=e.options.filter((e=>!e.hidden));const i=e._getHelpOption();if(i&&!i.hidden){const n=i.short&&e._findOption(i.short);const s=i.long&&e._findOption(i.long);if(!n&&!s){t.push(i)}else if(i.long&&!s){t.push(e.createOption(i.long,i.description))}else if(i.short&&!n){t.push(e.createOption(i.short,i.description))}}if(this.sortOptions){t.sort(this.compareOptions)}return t}visibleGlobalOptions(e){if(!this.showGlobalOptions)return[];const t=[];for(let i=e.parent;i;i=i.parent){const e=i.options.filter((e=>!e.hidden));t.push(...e)}if(this.sortOptions){t.sort(this.compareOptions)}return t}visibleArguments(e){if(e._argsDescription){e.registeredArguments.forEach((t=>{t.description=t.description||e._argsDescription[t.name()]||""}))}if(e.registeredArguments.find((e=>e.description))){return e.registeredArguments}return[]}subcommandTerm(e){const t=e.registeredArguments.map((e=>n(e))).join(" ");return e._name+(e._aliases[0]?"|"+e._aliases[0]:"")+(e.options.length?" [options]":"")+(t?" "+t:"")}optionTerm(e){return e.flags}argumentTerm(e){return e.name()}longestSubcommandTermLength(e,t){return t.visibleCommands(e).reduce(((e,i)=>Math.max(e,t.subcommandTerm(i).length)),0)}longestOptionTermLength(e,t){return t.visibleOptions(e).reduce(((e,i)=>Math.max(e,t.optionTerm(i).length)),0)}longestGlobalOptionTermLength(e,t){return t.visibleGlobalOptions(e).reduce(((e,i)=>Math.max(e,t.optionTerm(i).length)),0)}longestArgumentTermLength(e,t){return t.visibleArguments(e).reduce(((e,i)=>Math.max(e,t.argumentTerm(i).length)),0)}commandUsage(e){let t=e._name;if(e._aliases[0]){t=t+"|"+e._aliases[0]}let i="";for(let t=e.parent;t;t=t.parent){i=t.name()+" "+i}return i+t+" "+e.usage()}commandDescription(e){return e.description()}subcommandDescription(e){return e.summary()||e.description()}optionDescription(e){const t=[];if(e.argChoices){t.push(`choices: ${e.argChoices.map((e=>JSON.stringify(e))).join(", ")}`)}if(e.defaultValue!==undefined){const i=e.required||e.optional||e.isBoolean()&&typeof e.defaultValue==="boolean";if(i){t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`)}}if(e.presetArg!==undefined&&e.optional){t.push(`preset: ${JSON.stringify(e.presetArg)}`)}if(e.envVar!==undefined){t.push(`env: ${e.envVar}`)}if(t.length>0){return`${e.description} (${t.join(", ")})`}return e.description}argumentDescription(e){const t=[];if(e.argChoices){t.push(`choices: ${e.argChoices.map((e=>JSON.stringify(e))).join(", ")}`)}if(e.defaultValue!==undefined){t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`)}if(t.length>0){const i=`(${t.join(", ")})`;if(e.description){return`${e.description} ${i}`}return i}return e.description}formatHelp(e,t){const i=t.padWidth(e,t);const n=t.helpWidth||80;const s=2;const r=2;function formatItem(e,o){if(o){const a=`${e.padEnd(i+r)}${o}`;return t.wrap(a,n-s,i+r)}return e}function formatList(e){return e.join("\n").replace(/^/gm," ".repeat(s))}let o=[`Usage: ${t.commandUsage(e)}`,""];const a=t.commandDescription(e);if(a.length>0){o=o.concat([t.wrap(a,n,0),""])}const h=t.visibleArguments(e).map((e=>formatItem(t.argumentTerm(e),t.argumentDescription(e))));if(h.length>0){o=o.concat(["Arguments:",formatList(h),""])}const l=t.visibleOptions(e).map((e=>formatItem(t.optionTerm(e),t.optionDescription(e))));if(l.length>0){o=o.concat(["Options:",formatList(l),""])}if(this.showGlobalOptions){const i=t.visibleGlobalOptions(e).map((e=>formatItem(t.optionTerm(e),t.optionDescription(e))));if(i.length>0){o=o.concat(["Global Options:",formatList(i),""])}}const u=t.visibleCommands(e).map((e=>formatItem(t.subcommandTerm(e),t.subcommandDescription(e))));if(u.length>0){o=o.concat(["Commands:",formatList(u),""])}return o.join("\n")}padWidth(e,t){return Math.max(t.longestOptionTermLength(e,t),t.longestGlobalOptionTermLength(e,t),t.longestSubcommandTermLength(e,t),t.longestArgumentTermLength(e,t))}wrap(e,t,i,n=40){const s=" \\f\\t\\v   -    \ufeff";const r=new RegExp(`[\\n][${s}]+`);if(e.match(r))return e;const o=t-i;if(o{if(e==="\n")return"";return(t>0?l:"")+e.trimEnd()})).join("\n")}}t.Help=Help},77:(e,t,i)=>{const{InvalidArgumentError:n}=i(299);class Option{constructor(e,t){this.flags=e;this.description=t||"";this.required=e.includes("<");this.optional=e.includes("[");this.variadic=/\w\.\.\.[>\]]$/.test(e);this.mandatory=false;const i=splitOptionFlags(e);this.short=i.shortFlag;this.long=i.longFlag;this.negate=false;if(this.long){this.negate=this.long.startsWith("--no-")}this.defaultValue=undefined;this.defaultValueDescription=undefined;this.presetArg=undefined;this.envVar=undefined;this.parseArg=undefined;this.hidden=false;this.argChoices=undefined;this.conflictsWith=[];this.implied=undefined}default(e,t){this.defaultValue=e;this.defaultValueDescription=t;return this}preset(e){this.presetArg=e;return this}conflicts(e){this.conflictsWith=this.conflictsWith.concat(e);return this}implies(e){let t=e;if(typeof e==="string"){t={[e]:true}}this.implied=Object.assign(this.implied||{},t);return this}env(e){this.envVar=e;return this}argParser(e){this.parseArg=e;return this}makeOptionMandatory(e=true){this.mandatory=!!e;return this}hideHelp(e=true){this.hidden=!!e;return this}_concatValue(e,t){if(t===this.defaultValue||!Array.isArray(t)){return[e]}return t.concat(e)}choices(e){this.argChoices=e.slice();this.parseArg=(e,t)=>{if(!this.argChoices.includes(e)){throw new n(`Allowed choices are ${this.argChoices.join(", ")}.`)}if(this.variadic){return this._concatValue(e,t)}return e};return this}name(){if(this.long){return this.long.replace(/^--/,"")}return this.short.replace(/^-/,"")}attributeName(){return camelcase(this.name().replace(/^no-/,""))}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}}class DualOptions{constructor(e){this.positiveOptions=new Map;this.negativeOptions=new Map;this.dualOptions=new Set;e.forEach((e=>{if(e.negate){this.negativeOptions.set(e.attributeName(),e)}else{this.positiveOptions.set(e.attributeName(),e)}}));this.negativeOptions.forEach(((e,t)=>{if(this.positiveOptions.has(t)){this.dualOptions.add(t)}}))}valueFromOption(e,t){const i=t.attributeName();if(!this.dualOptions.has(i))return true;const n=this.negativeOptions.get(i).presetArg;const s=n!==undefined?n:false;return t.negate===(s===e)}}function camelcase(e){return e.split("-").reduce(((e,t)=>e+t[0].toUpperCase()+t.slice(1)))}function splitOptionFlags(e){let t;let i;const n=e.split(/[ |,]+/);if(n.length>1&&!/^[[<]/.test(n[1]))t=n.shift();i=n.shift();if(!t&&/^-[^-]$/.test(i)){t=i;i=undefined}return{shortFlag:t,longFlag:i}}t.Option=Option;t.DualOptions=DualOptions},301:(e,t)=>{const i=3;function editDistance(e,t){if(Math.abs(e.length-t.length)>i)return Math.max(e.length,t.length);const n=[];for(let t=0;t<=e.length;t++){n[t]=[t]}for(let e=0;e<=t.length;e++){n[0][e]=e}for(let i=1;i<=t.length;i++){for(let s=1;s<=e.length;s++){let r=1;if(e[s-1]===t[i-1]){r=0}else{r=1}n[s][i]=Math.min(n[s-1][i]+1,n[s][i-1]+1,n[s-1][i-1]+r);if(s>1&&i>1&&e[s-1]===t[i-2]&&e[s-2]===t[i-1]){n[s][i]=Math.min(n[s][i],n[s-2][i-2]+1)}}}return n[e.length][t.length]}function suggestSimilar(e,t){if(!t||t.length===0)return"";t=Array.from(new Set(t));const n=e.startsWith("--");if(n){e=e.slice(2);t=t.map((e=>e.slice(2)))}let s=[];let r=i;const o=.4;t.forEach((t=>{if(t.length<=1)return;const i=editDistance(e,t);const n=Math.max(e.length,t.length);const a=(n-i)/n;if(a>o){if(ie.localeCompare(t)));if(n){s=s.map((e=>`--${e}`))}if(s.length>1){return`\n(Did you mean one of ${s.join(", ")}?)`}if(s.length===1){return`\n(Did you mean ${s[0]}?)`}return""}t.suggestSimilar=suggestSimilar}};var t={};function __nccwpck_require__(i){var n=t[i];if(n!==undefined){return n.exports}var s=t[i]={exports:{}};var r=true;try{e[i](s,s.exports,__nccwpck_require__);r=false}finally{if(r)delete t[i]}return s.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var i={};(()=>{var e=i;const{Argument:t}=__nccwpck_require__(253);const{Command:n}=__nccwpck_require__(119);const{CommanderError:s,InvalidArgumentError:r}=__nccwpck_require__(299);const{Help:o}=__nccwpck_require__(638);const{Option:a}=__nccwpck_require__(77);e.program=new n;e.createCommand=e=>new n(e);e.createOption=(e,t)=>new a(e,t);e.createArgument=(e,i)=>new t(e,i);e.Command=n;e.Option=a;e.Argument=t;e.Help=o;e.CommanderError=s;e.InvalidArgumentError=r;e.InvalidOptionArgumentError=r})();module.exports=i})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/commander/package.json b/build/node_modules/next/dist/compiled/commander/package.json new file mode 100644 index 0000000..f231ee9 --- /dev/null +++ b/build/node_modules/next/dist/compiled/commander/package.json @@ -0,0 +1 @@ +{"name":"commander","main":"index.js","author":"TJ Holowaychuk ","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/comment-json/index.js b/build/node_modules/next/dist/compiled/comment-json/index.js new file mode 100644 index 0000000..7b9e16d --- /dev/null +++ b/build/node_modules/next/dist/compiled/comment-json/index.js @@ -0,0 +1,7 @@ +(()=>{var e={281:(e,t,i)=>{const r=i(277);const{isObject:s,isArray:n}=i(504);const a="before";const o="after-prop";const u="after-colon";const h="after-value";const c="after-comma";const l=[a,o,u,h,c];const p=":";const f=undefined;const symbol=(e,t)=>Symbol.for(e+p+t);const assign_comments=(e,t,i,s,n,a)=>{const o=symbol(n,s);if(!r(t,o)){return}const u=i===s?o:symbol(n,i);e[u]=t[o];if(a){delete t[o]}};const assign=(e,t,i)=>{i.forEach((i=>{if(!r(t,i)){return}e[i]=t[i];l.forEach((r=>{assign_comments(e,t,i,i,r)}))}));return e};const swap_comments=(e,t,i)=>{if(t===i){return}l.forEach((s=>{const n=symbol(s,i);if(!r(e,n)){assign_comments(e,e,i,t,s);return}const a=e[n];assign_comments(e,e,i,t,s);e[symbol(s,t)]=a}))};const reverse_comments=e=>{const{length:t}=e;let i=0;const r=t/2;for(;i{l.forEach((n=>{assign_comments(e,t,i+r,i,n,s)}))};const move_comments=(e,t,i,r,s,n)=>{if(s>0){let a=r;while(a-- >0){move_comment(e,t,i+a,s,n&&a=o)}};class CommentArray extends Array{splice(...e){const{length:t}=this;const i=super.splice(...e);let[r,s,...n]=e;if(r<0){r+=t}if(arguments.length===1){s=t-r}else{s=Math.min(t-r,s)}const{length:a}=n;const o=a-s;const u=r+s;const h=t-u;move_comments(this,this,u,h,o,true);return i}slice(...e){const{length:t}=this;const i=super.slice(...e);if(!i.length){return new CommentArray}let[r,s]=e;if(s===f){s=t}else if(s<0){s+=t}if(r<0){r+=t}else if(r===f){r=0}move_comments(i,this,r,s-r,-r);return i}unshift(...e){const{length:t}=this;const i=super.unshift(...e);const{length:r}=e;if(r>0){move_comments(this,this,0,t,r,true)}return i}shift(){const e=super.shift();const{length:t}=this;move_comments(this,this,1,t,-1,true);return e}reverse(){super.reverse();reverse_comments(this);return this}pop(){const e=super.pop();const{length:t}=this;l.forEach((e=>{const i=symbol(e,t);delete this[i]}));return e}concat(...e){let{length:t}=this;const i=super.concat(...e);if(!e.length){return i}e.forEach((e=>{const r=t;t+=n(e)?e.length:1;if(!(e instanceof CommentArray)){return}move_comments(i,e,0,e.length,r)}));return i}}e.exports={CommentArray:CommentArray,assign(e,t,i){if(!s(e)){throw new TypeError("Cannot convert undefined or null to object")}if(!s(t)){return e}if(i===f){i=Object.keys(t)}else if(!n(i)){throw new TypeError("keys must be array or undefined")}return assign(e,t,i)},PREFIX_BEFORE:a,PREFIX_AFTER_PROP:o,PREFIX_AFTER_COLON:u,PREFIX_AFTER_VALUE:h,PREFIX_AFTER_COMMA:c,COLON:p,UNDEFINED:f}},256:(e,t,i)=>{const{parse:r,tokenize:s}=i(534);const n=i(470);const{CommentArray:a,assign:o}=i(281);e.exports={parse:r,stringify:n,tokenize:s,CommentArray:a,assign:o}},534:(e,t,i)=>{const r=i(36);const{CommentArray:s,PREFIX_BEFORE:n,PREFIX_AFTER_PROP:a,PREFIX_AFTER_COLON:o,PREFIX_AFTER_VALUE:u,PREFIX_AFTER_COMMA:h,COLON:c,UNDEFINED:l}=i(281);const tokenize=e=>r.tokenize(e,{comment:true,loc:true});const p=[];let f=null;let d=null;const m=[];let x;let D=false;let E=false;let v=null;let y=null;let C=null;let S;let A=null;const clean=()=>{m.length=p.length=0;y=null;x=l};const free=()=>{clean();v.length=0;d=f=v=y=C=A=null};const F="before-all";const g="after";const k="after-all";const w="[";const b="]";const B="{";const T="}";const P=",";const N="";const I="-";const symbolFor=e=>Symbol.for(x!==l?`${e}:${x}`:e);const transform=(e,t)=>A?A(e,t):t;const unexpected=()=>{const e=new SyntaxError(`Unexpected token ${C.value.slice(0,1)}`);Object.assign(e,C.loc.start);throw e};const unexpected_end=()=>{const e=new SyntaxError("Unexpected end of JSON input");Object.assign(e,y?y.loc.end:{line:1,column:0});throw e};const next=()=>{const e=v[++S];E=C&&e&&C.loc.end.line===e.loc.start.line||false;y=C;C=e};const type=()=>{if(!C){unexpected_end()}return C.type==="Punctuator"?C.value:C.type};const is=e=>type()===e;const expect=e=>{if(!is(e)){unexpected()}};const set_comments_host=e=>{p.push(f);f=e};const restore_comments_host=()=>{f=p.pop()};const assign_after_comma_comments=()=>{if(!d){return}const e=[];for(const t of d){if(t.inline){e.push(t)}else{break}}const{length:t}=e;if(!t){return}if(t===d.length){d=null}else{d.splice(0,t)}f[symbolFor(h)]=e};const assign_comments=e=>{if(!d){return}f[symbolFor(e)]=d;d=null};const parse_comments=e=>{const t=[];while(C&&(is("LineComment")||is("BlockComment"))){const e={...C,inline:E};t.push(e);next()}if(D){return}if(!t.length){return}if(e){f[symbolFor(e)]=t;return}d=t};const set_prop=(e,t)=>{if(t){m.push(x)}x=e};const restore_prop=()=>{x=m.pop()};const parse_object=()=>{const e={};set_comments_host(e);set_prop(l,true);let t=false;let i;parse_comments();while(!is(T)){if(t){expect(P);next();parse_comments();assign_after_comma_comments();if(is(T)){break}}t=true;expect("String");i=JSON.parse(C.value);set_prop(i);assign_comments(n);next();parse_comments(a);expect(c);next();parse_comments(o);e[i]=transform(i,walk());parse_comments(u)}next();x=undefined;assign_comments(t?g:n);restore_comments_host();restore_prop();return e};const parse_array=()=>{const e=new s;set_comments_host(e);set_prop(l,true);let t=false;let i=0;parse_comments();while(!is(b)){if(t){expect(P);next();parse_comments();assign_after_comma_comments();if(is(b)){break}}t=true;set_prop(i);assign_comments(n);e[i]=transform(i,walk());parse_comments(u);i++}next();x=undefined;assign_comments(t?g:n);restore_comments_host();restore_prop();return e};function walk(){let e=type();if(e===B){next();return parse_object()}if(e===w){next();return parse_array()}let t=N;if(e===I){next();e=type();t=I}let i;switch(e){case"String":case"Boolean":case"Null":case"Numeric":i=C.value;next();return JSON.parse(t+i);default:}}const isObject=e=>Object(e)===e;const parse=(e,t,i)=>{clean();v=tokenize(e);A=t;D=i;if(!v.length){unexpected_end()}S=-1;next();set_comments_host({});parse_comments(F);let r=walk();parse_comments(k);if(C){unexpected()}if(!i&&r!==null){if(!isObject(r)){r=new Object(r)}Object.assign(r,f)}restore_comments_host();r=transform("",r);free();return r};e.exports={parse:parse,tokenize:tokenize,PREFIX_BEFORE:n,PREFIX_BEFORE_ALL:F,PREFIX_AFTER_PROP:a,PREFIX_AFTER_COLON:o,PREFIX_AFTER_VALUE:u,PREFIX_AFTER_COMMA:h,PREFIX_AFTER:g,PREFIX_AFTER_ALL:k,BRACKET_OPEN:w,BRACKET_CLOSE:b,CURLY_BRACKET_OPEN:B,CURLY_BRACKET_CLOSE:T,COLON:c,COMMA:P,EMPTY:N,UNDEFINED:l}},470:(e,t,i)=>{const{isArray:r,isObject:s,isFunction:n,isNumber:a,isString:o}=i(504);const u=i(710);const{PREFIX_BEFORE_ALL:h,PREFIX_BEFORE:c,PREFIX_AFTER_PROP:l,PREFIX_AFTER_COLON:p,PREFIX_AFTER_VALUE:f,PREFIX_AFTER_COMMA:d,PREFIX_AFTER:m,PREFIX_AFTER_ALL:x,BRACKET_OPEN:D,BRACKET_CLOSE:E,CURLY_BRACKET_OPEN:v,CURLY_BRACKET_CLOSE:y,COLON:C,COMMA:S,EMPTY:A,UNDEFINED:F}=i(534);const g=/[\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;const k=" ";const w="\n";const b="null";const BEFORE=e=>`${c}:${e}`;const AFTER_PROP=e=>`${l}:${e}`;const AFTER_COLON=e=>`${p}:${e}`;const AFTER_VALUE=e=>`${f}:${e}`;const AFTER_COMMA=e=>`${d}:${e}`;const B={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};const escape=e=>{g.lastIndex=0;if(!g.test(e)){return e}return e.replace(g,(e=>{const t=B[e];return typeof t==="string"?t:e}))};const quote=e=>`"${escape(e)}"`;const comment_stringify=(e,t)=>t?`//${e}`:`/*${e}*/`;const process_comments=(e,t,i,r)=>{const s=e[Symbol.for(t)];if(!s||!s.length){return A}let n=false;const a=s.reduce(((e,{inline:t,type:r,value:s})=>{const a=t?k:w+i;n=r==="LineComment";return e+a+comment_stringify(s,n)}),A);return r||n?a+w+i:a};let T=null;let P=A;const clean=()=>{T=null;P=A};const join=(e,t,i)=>e?t?e+t.trim()+w+i:e.trimRight()+w+i:t?t.trimRight()+w+i:A;const join_content=(e,t,i)=>{const r=process_comments(t,c,i+P,true);return join(r,e,i)};const array_stringify=(e,t)=>{const i=t+P;const{length:r}=e;let s=A;let n=A;for(let t=0;t{if(!e){return"null"}const i=t+P;let s=A;let n=A;let a=true;const o=r(T)?T:Object.keys(e);const iteratee=t=>{const r=stringify(t,e,i);if(r===F){return}if(!a){s+=S}a=false;const o=join(n,process_comments(e,BEFORE(t),i),i);s+=o||w+i;s+=quote(t)+process_comments(e,AFTER_PROP(t),i)+C+process_comments(e,AFTER_COLON(t),i)+k+r+process_comments(e,AFTER_VALUE(t),i);n=process_comments(e,AFTER_COMMA(t),i)};o.forEach(iteratee);s+=join(n,process_comments(e,m,i),i);return v+join_content(s,e,t)+y};function stringify(e,t,i){let a=t[e];if(s(a)&&n(a.toJSON)){a=a.toJSON(e)}if(n(T)){a=T.call(t,e,a)}switch(typeof a){case"string":return quote(a);case"number":return Number.isFinite(a)?String(a):b;case"boolean":case"null":return String(a);case"object":return r(a)?array_stringify(a,i):object_stringify(a,i);default:}}const get_indent=e=>o(e)?e:a(e)?u(k,e):A;const{toString:N}=Object.prototype;const I=["[object Number]","[object String]","[object Boolean]"];const is_primitive_object=e=>{if(typeof e!=="object"){return false}const t=N.call(e);return I.includes(t)};e.exports=(e,t,i)=>{const a=get_indent(i);if(!a){return JSON.stringify(e,t)}if(!n(t)&&!r(t)){t=null}T=t;P=a;const o=is_primitive_object(e)?JSON.stringify(e):stringify("",{"":e},A);clean();return s(e)?process_comments(e,h,A).trimLeft()+o+process_comments(e,x,A).trimRight():o}},504:(e,t)=>{function isArray(e){if(Array.isArray){return Array.isArray(e)}return objectToString(e)==="[object Array]"}t.isArray=isArray;function isBoolean(e){return typeof e==="boolean"}t.isBoolean=isBoolean;function isNull(e){return e===null}t.isNull=isNull;function isNullOrUndefined(e){return e==null}t.isNullOrUndefined=isNullOrUndefined;function isNumber(e){return typeof e==="number"}t.isNumber=isNumber;function isString(e){return typeof e==="string"}t.isString=isString;function isSymbol(e){return typeof e==="symbol"}t.isSymbol=isSymbol;function isUndefined(e){return e===void 0}t.isUndefined=isUndefined;function isRegExp(e){return objectToString(e)==="[object RegExp]"}t.isRegExp=isRegExp;function isObject(e){return typeof e==="object"&&e!==null}t.isObject=isObject;function isDate(e){return objectToString(e)==="[object Date]"}t.isDate=isDate;function isError(e){return objectToString(e)==="[object Error]"||e instanceof Error}t.isError=isError;function isFunction(e){return typeof e==="function"}t.isFunction=isFunction;function isPrimitive(e){return e===null||typeof e==="boolean"||typeof e==="number"||typeof e==="string"||typeof e==="symbol"||typeof e==="undefined"}t.isPrimitive=isPrimitive;t.isBuffer=Buffer.isBuffer;function objectToString(e){return Object.prototype.toString.call(e)}},36:function(e){(function webpackUniversalModuleDefinition(t,i){if(true)e.exports=i();else{}})(this,(function(){return function(e){var t={};function __nested_webpack_require_583__(i){if(t[i])return t[i].exports;var r=t[i]={exports:{},id:i,loaded:false};e[i].call(r.exports,r,r.exports,__nested_webpack_require_583__);r.loaded=true;return r.exports}__nested_webpack_require_583__.m=e;__nested_webpack_require_583__.c=t;__nested_webpack_require_583__.p="";return __nested_webpack_require_583__(0)}([function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:true});var r=i(1);var s=i(3);var n=i(8);var a=i(15);function parse(e,t,i){var a=null;var proxyDelegate=function(e,t){if(i){i(e,t)}if(a){a.visit(e,t)}};var o=typeof i==="function"?proxyDelegate:null;var u=false;if(t){u=typeof t.comment==="boolean"&&t.comment;var h=typeof t.attachComment==="boolean"&&t.attachComment;if(u||h){a=new r.CommentHandler;a.attach=h;t.comment=true;o=proxyDelegate}}var c=false;if(t&&typeof t.sourceType==="string"){c=t.sourceType==="module"}var l;if(t&&typeof t.jsx==="boolean"&&t.jsx){l=new s.JSXParser(e,t,o)}else{l=new n.Parser(e,t,o)}var p=c?l.parseModule():l.parseScript();var f=p;if(u&&a){f.comments=a.comments}if(l.config.tokens){f.tokens=l.tokens}if(l.config.tolerant){f.errors=l.errorHandler.errors}return f}t.parse=parse;function parseModule(e,t,i){var r=t||{};r.sourceType="module";return parse(e,r,i)}t.parseModule=parseModule;function parseScript(e,t,i){var r=t||{};r.sourceType="script";return parse(e,r,i)}t.parseScript=parseScript;function tokenize(e,t,i){var r=new a.Tokenizer(e,t);var s;s=[];try{while(true){var n=r.getNextToken();if(!n){break}if(i){n=i(n)}s.push(n)}}catch(e){r.errorHandler.tolerate(e)}if(r.errorHandler.tolerant){s.errors=r.errors()}return s}t.tokenize=tokenize;var o=i(2);t.Syntax=o.Syntax;t.version="4.0.1"},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:true});var r=i(2);var s=function(){function CommentHandler(){this.attach=false;this.comments=[];this.stack=[];this.leading=[];this.trailing=[]}CommentHandler.prototype.insertInnerComments=function(e,t){if(e.type===r.Syntax.BlockStatement&&e.body.length===0){var i=[];for(var s=this.leading.length-1;s>=0;--s){var n=this.leading[s];if(t.end.offset>=n.start){i.unshift(n.comment);this.leading.splice(s,1);this.trailing.splice(s,1)}}if(i.length){e.innerComments=i}}};CommentHandler.prototype.findTrailingComments=function(e){var t=[];if(this.trailing.length>0){for(var i=this.trailing.length-1;i>=0;--i){var r=this.trailing[i];if(r.start>=e.end.offset){t.unshift(r.comment)}}this.trailing.length=0;return t}var s=this.stack[this.stack.length-1];if(s&&s.node.trailingComments){var n=s.node.trailingComments[0];if(n&&n.range[0]>=e.end.offset){t=s.node.trailingComments;delete s.node.trailingComments}}return t};CommentHandler.prototype.findLeadingComments=function(e){var t=[];var i;while(this.stack.length>0){var r=this.stack[this.stack.length-1];if(r&&r.start>=e.start.offset){i=r.node;this.stack.pop()}else{break}}if(i){var s=i.leadingComments?i.leadingComments.length:0;for(var n=s-1;n>=0;--n){var a=i.leadingComments[n];if(a.range[1]<=e.start.offset){t.unshift(a);i.leadingComments.splice(n,1)}}if(i.leadingComments&&i.leadingComments.length===0){delete i.leadingComments}return t}for(var n=this.leading.length-1;n>=0;--n){var r=this.leading[n];if(r.start<=e.start.offset){t.unshift(r.comment);this.leading.splice(n,1)}}return t};CommentHandler.prototype.visitNode=function(e,t){if(e.type===r.Syntax.Program&&e.body.length>0){return}this.insertInnerComments(e,t);var i=this.findTrailingComments(t);var s=this.findLeadingComments(t);if(s.length>0){e.leadingComments=s}if(i.length>0){e.trailingComments=i}this.stack.push({node:e,start:t.start.offset})};CommentHandler.prototype.visitComment=function(e,t){var i=e.type[0]==="L"?"Line":"Block";var r={type:i,value:e.value};if(e.range){r.range=e.range}if(e.loc){r.loc=e.loc}this.comments.push(r);if(this.attach){var s={comment:{type:i,value:e.value,range:[t.start.offset,t.end.offset]},start:t.start.offset};if(e.loc){s.comment.loc=e.loc}e.type=i;this.leading.push(s);this.trailing.push(s)}};CommentHandler.prototype.visit=function(e,t){if(e.type==="LineComment"){this.visitComment(e,t)}else if(e.type==="BlockComment"){this.visitComment(e,t)}else if(this.attach){this.visitNode(e,t)}};return CommentHandler}();t.CommentHandler=s},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:true});t.Syntax={AssignmentExpression:"AssignmentExpression",AssignmentPattern:"AssignmentPattern",ArrayExpression:"ArrayExpression",ArrayPattern:"ArrayPattern",ArrowFunctionExpression:"ArrowFunctionExpression",AwaitExpression:"AwaitExpression",BlockStatement:"BlockStatement",BinaryExpression:"BinaryExpression",BreakStatement:"BreakStatement",CallExpression:"CallExpression",CatchClause:"CatchClause",ClassBody:"ClassBody",ClassDeclaration:"ClassDeclaration",ClassExpression:"ClassExpression",ConditionalExpression:"ConditionalExpression",ContinueStatement:"ContinueStatement",DoWhileStatement:"DoWhileStatement",DebuggerStatement:"DebuggerStatement",EmptyStatement:"EmptyStatement",ExportAllDeclaration:"ExportAllDeclaration",ExportDefaultDeclaration:"ExportDefaultDeclaration",ExportNamedDeclaration:"ExportNamedDeclaration",ExportSpecifier:"ExportSpecifier",ExpressionStatement:"ExpressionStatement",ForStatement:"ForStatement",ForOfStatement:"ForOfStatement",ForInStatement:"ForInStatement",FunctionDeclaration:"FunctionDeclaration",FunctionExpression:"FunctionExpression",Identifier:"Identifier",IfStatement:"IfStatement",ImportDeclaration:"ImportDeclaration",ImportDefaultSpecifier:"ImportDefaultSpecifier",ImportNamespaceSpecifier:"ImportNamespaceSpecifier",ImportSpecifier:"ImportSpecifier",Literal:"Literal",LabeledStatement:"LabeledStatement",LogicalExpression:"LogicalExpression",MemberExpression:"MemberExpression",MetaProperty:"MetaProperty",MethodDefinition:"MethodDefinition",NewExpression:"NewExpression",ObjectExpression:"ObjectExpression",ObjectPattern:"ObjectPattern",Program:"Program",Property:"Property",RestElement:"RestElement",ReturnStatement:"ReturnStatement",SequenceExpression:"SequenceExpression",SpreadElement:"SpreadElement",Super:"Super",SwitchCase:"SwitchCase",SwitchStatement:"SwitchStatement",TaggedTemplateExpression:"TaggedTemplateExpression",TemplateElement:"TemplateElement",TemplateLiteral:"TemplateLiteral",ThisExpression:"ThisExpression",ThrowStatement:"ThrowStatement",TryStatement:"TryStatement",UnaryExpression:"UnaryExpression",UpdateExpression:"UpdateExpression",VariableDeclaration:"VariableDeclaration",VariableDeclarator:"VariableDeclarator",WhileStatement:"WhileStatement",WithStatement:"WithStatement",YieldExpression:"YieldExpression"}},function(e,t,i){"use strict";var r=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)if(t.hasOwnProperty(i))e[i]=t[i]};return function(t,i){e(t,i);function __(){this.constructor=t}t.prototype=i===null?Object.create(i):(__.prototype=i.prototype,new __)}}();Object.defineProperty(t,"__esModule",{value:true});var s=i(4);var n=i(5);var a=i(6);var o=i(7);var u=i(8);var h=i(13);var c=i(14);h.TokenName[100]="JSXIdentifier";h.TokenName[101]="JSXText";function getQualifiedElementName(e){var t;switch(e.type){case a.JSXSyntax.JSXIdentifier:var i=e;t=i.name;break;case a.JSXSyntax.JSXNamespacedName:var r=e;t=getQualifiedElementName(r.namespace)+":"+getQualifiedElementName(r.name);break;case a.JSXSyntax.JSXMemberExpression:var s=e;t=getQualifiedElementName(s.object)+"."+getQualifiedElementName(s.property);break;default:break}return t}var l=function(e){r(JSXParser,e);function JSXParser(t,i,r){return e.call(this,t,i,r)||this}JSXParser.prototype.parsePrimaryExpression=function(){return this.match("<")?this.parseJSXRoot():e.prototype.parsePrimaryExpression.call(this)};JSXParser.prototype.startJSX=function(){this.scanner.index=this.startMarker.index;this.scanner.lineNumber=this.startMarker.line;this.scanner.lineStart=this.startMarker.index-this.startMarker.column};JSXParser.prototype.finishJSX=function(){this.nextToken()};JSXParser.prototype.reenterJSX=function(){this.startJSX();this.expectJSX("}");if(this.config.tokens){this.tokens.pop()}};JSXParser.prototype.createJSXNode=function(){this.collectComments();return{index:this.scanner.index,line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart}};JSXParser.prototype.createJSXChildNode=function(){return{index:this.scanner.index,line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart}};JSXParser.prototype.scanXHTMLEntity=function(e){var t="&";var i=true;var r=false;var n=false;var a=false;while(!this.scanner.eof()&&i&&!r){var o=this.scanner.source[this.scanner.index];if(o===e){break}r=o===";";t+=o;++this.scanner.index;if(!r){switch(t.length){case 2:n=o==="#";break;case 3:if(n){a=o==="x";i=a||s.Character.isDecimalDigit(o.charCodeAt(0));n=n&&!a}break;default:i=i&&!(n&&!s.Character.isDecimalDigit(o.charCodeAt(0)));i=i&&!(a&&!s.Character.isHexDigit(o.charCodeAt(0)));break}}}if(i&&r&&t.length>2){var u=t.substr(1,t.length-2);if(n&&u.length>1){t=String.fromCharCode(parseInt(u.substr(1),10))}else if(a&&u.length>2){t=String.fromCharCode(parseInt("0"+u.substr(1),16))}else if(!n&&!a&&c.XHTMLEntities[u]){t=c.XHTMLEntities[u]}}return t};JSXParser.prototype.lexJSX=function(){var e=this.scanner.source.charCodeAt(this.scanner.index);if(e===60||e===62||e===47||e===58||e===61||e===123||e===125){var t=this.scanner.source[this.scanner.index++];return{type:7,value:t,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:this.scanner.index-1,end:this.scanner.index}}if(e===34||e===39){var i=this.scanner.index;var r=this.scanner.source[this.scanner.index++];var n="";while(!this.scanner.eof()){var a=this.scanner.source[this.scanner.index++];if(a===r){break}else if(a==="&"){n+=this.scanXHTMLEntity(r)}else{n+=a}}return{type:8,value:n,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:i,end:this.scanner.index}}if(e===46){var o=this.scanner.source.charCodeAt(this.scanner.index+1);var u=this.scanner.source.charCodeAt(this.scanner.index+2);var t=o===46&&u===46?"...":".";var i=this.scanner.index;this.scanner.index+=t.length;return{type:7,value:t,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:i,end:this.scanner.index}}if(e===96){return{type:10,value:"",lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:this.scanner.index,end:this.scanner.index}}if(s.Character.isIdentifierStart(e)&&e!==92){var i=this.scanner.index;++this.scanner.index;while(!this.scanner.eof()){var a=this.scanner.source.charCodeAt(this.scanner.index);if(s.Character.isIdentifierPart(a)&&a!==92){++this.scanner.index}else if(a===45){++this.scanner.index}else{break}}var h=this.scanner.source.slice(i,this.scanner.index);return{type:100,value:h,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:i,end:this.scanner.index}}return this.scanner.lex()};JSXParser.prototype.nextJSXToken=function(){this.collectComments();this.startMarker.index=this.scanner.index;this.startMarker.line=this.scanner.lineNumber;this.startMarker.column=this.scanner.index-this.scanner.lineStart;var e=this.lexJSX();this.lastMarker.index=this.scanner.index;this.lastMarker.line=this.scanner.lineNumber;this.lastMarker.column=this.scanner.index-this.scanner.lineStart;if(this.config.tokens){this.tokens.push(this.convertToken(e))}return e};JSXParser.prototype.nextJSXText=function(){this.startMarker.index=this.scanner.index;this.startMarker.line=this.scanner.lineNumber;this.startMarker.column=this.scanner.index-this.scanner.lineStart;var e=this.scanner.index;var t="";while(!this.scanner.eof()){var i=this.scanner.source[this.scanner.index];if(i==="{"||i==="<"){break}++this.scanner.index;t+=i;if(s.Character.isLineTerminator(i.charCodeAt(0))){++this.scanner.lineNumber;if(i==="\r"&&this.scanner.source[this.scanner.index]==="\n"){++this.scanner.index}this.scanner.lineStart=this.scanner.index}}this.lastMarker.index=this.scanner.index;this.lastMarker.line=this.scanner.lineNumber;this.lastMarker.column=this.scanner.index-this.scanner.lineStart;var r={type:101,value:t,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:e,end:this.scanner.index};if(t.length>0&&this.config.tokens){this.tokens.push(this.convertToken(r))}return r};JSXParser.prototype.peekJSXToken=function(){var e=this.scanner.saveState();this.scanner.scanComments();var t=this.lexJSX();this.scanner.restoreState(e);return t};JSXParser.prototype.expectJSX=function(e){var t=this.nextJSXToken();if(t.type!==7||t.value!==e){this.throwUnexpectedToken(t)}};JSXParser.prototype.matchJSX=function(e){var t=this.peekJSXToken();return t.type===7&&t.value===e};JSXParser.prototype.parseJSXIdentifier=function(){var e=this.createJSXNode();var t=this.nextJSXToken();if(t.type!==100){this.throwUnexpectedToken(t)}return this.finalize(e,new n.JSXIdentifier(t.value))};JSXParser.prototype.parseJSXElementName=function(){var e=this.createJSXNode();var t=this.parseJSXIdentifier();if(this.matchJSX(":")){var i=t;this.expectJSX(":");var r=this.parseJSXIdentifier();t=this.finalize(e,new n.JSXNamespacedName(i,r))}else if(this.matchJSX(".")){while(this.matchJSX(".")){var s=t;this.expectJSX(".");var a=this.parseJSXIdentifier();t=this.finalize(e,new n.JSXMemberExpression(s,a))}}return t};JSXParser.prototype.parseJSXAttributeName=function(){var e=this.createJSXNode();var t;var i=this.parseJSXIdentifier();if(this.matchJSX(":")){var r=i;this.expectJSX(":");var s=this.parseJSXIdentifier();t=this.finalize(e,new n.JSXNamespacedName(r,s))}else{t=i}return t};JSXParser.prototype.parseJSXStringLiteralAttribute=function(){var e=this.createJSXNode();var t=this.nextJSXToken();if(t.type!==8){this.throwUnexpectedToken(t)}var i=this.getTokenRaw(t);return this.finalize(e,new o.Literal(t.value,i))};JSXParser.prototype.parseJSXExpressionAttribute=function(){var e=this.createJSXNode();this.expectJSX("{");this.finishJSX();if(this.match("}")){this.tolerateError("JSX attributes must only be assigned a non-empty expression")}var t=this.parseAssignmentExpression();this.reenterJSX();return this.finalize(e,new n.JSXExpressionContainer(t))};JSXParser.prototype.parseJSXAttributeValue=function(){return this.matchJSX("{")?this.parseJSXExpressionAttribute():this.matchJSX("<")?this.parseJSXElement():this.parseJSXStringLiteralAttribute()};JSXParser.prototype.parseJSXNameValueAttribute=function(){var e=this.createJSXNode();var t=this.parseJSXAttributeName();var i=null;if(this.matchJSX("=")){this.expectJSX("=");i=this.parseJSXAttributeValue()}return this.finalize(e,new n.JSXAttribute(t,i))};JSXParser.prototype.parseJSXSpreadAttribute=function(){var e=this.createJSXNode();this.expectJSX("{");this.expectJSX("...");this.finishJSX();var t=this.parseAssignmentExpression();this.reenterJSX();return this.finalize(e,new n.JSXSpreadAttribute(t))};JSXParser.prototype.parseJSXAttributes=function(){var e=[];while(!this.matchJSX("/")&&!this.matchJSX(">")){var t=this.matchJSX("{")?this.parseJSXSpreadAttribute():this.parseJSXNameValueAttribute();e.push(t)}return e};JSXParser.prototype.parseJSXOpeningElement=function(){var e=this.createJSXNode();this.expectJSX("<");var t=this.parseJSXElementName();var i=this.parseJSXAttributes();var r=this.matchJSX("/");if(r){this.expectJSX("/")}this.expectJSX(">");return this.finalize(e,new n.JSXOpeningElement(t,r,i))};JSXParser.prototype.parseJSXBoundaryElement=function(){var e=this.createJSXNode();this.expectJSX("<");if(this.matchJSX("/")){this.expectJSX("/");var t=this.parseJSXElementName();this.expectJSX(">");return this.finalize(e,new n.JSXClosingElement(t))}var i=this.parseJSXElementName();var r=this.parseJSXAttributes();var s=this.matchJSX("/");if(s){this.expectJSX("/")}this.expectJSX(">");return this.finalize(e,new n.JSXOpeningElement(i,s,r))};JSXParser.prototype.parseJSXEmptyExpression=function(){var e=this.createJSXChildNode();this.collectComments();this.lastMarker.index=this.scanner.index;this.lastMarker.line=this.scanner.lineNumber;this.lastMarker.column=this.scanner.index-this.scanner.lineStart;return this.finalize(e,new n.JSXEmptyExpression)};JSXParser.prototype.parseJSXExpressionContainer=function(){var e=this.createJSXNode();this.expectJSX("{");var t;if(this.matchJSX("}")){t=this.parseJSXEmptyExpression();this.expectJSX("}")}else{this.finishJSX();t=this.parseAssignmentExpression();this.reenterJSX()}return this.finalize(e,new n.JSXExpressionContainer(t))};JSXParser.prototype.parseJSXChildren=function(){var e=[];while(!this.scanner.eof()){var t=this.createJSXChildNode();var i=this.nextJSXText();if(i.start0){var o=this.finalize(e.node,new n.JSXElement(e.opening,e.children,e.closing));e=t[t.length-1];e.children.push(o);t.pop()}else{break}}}return e};JSXParser.prototype.parseJSXElement=function(){var e=this.createJSXNode();var t=this.parseJSXOpeningElement();var i=[];var r=null;if(!t.selfClosing){var s=this.parseComplexJSXElement({node:e,opening:t,closing:r,children:i});i=s.children;r=s.closing}return this.finalize(e,new n.JSXElement(t,i,r))};JSXParser.prototype.parseJSXRoot=function(){if(this.config.tokens){this.tokens.pop()}this.startJSX();var e=this.parseJSXElement();this.finishJSX();return e};JSXParser.prototype.isStartOfExpression=function(){return e.prototype.isStartOfExpression.call(this)||this.match("<")};return JSXParser}(u.Parser);t.JSXParser=l},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:true});var i={NonAsciiIdentifierStart:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/,NonAsciiIdentifierPart:/[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/};t.Character={fromCodePoint:function(e){return e<65536?String.fromCharCode(e):String.fromCharCode(55296+(e-65536>>10))+String.fromCharCode(56320+(e-65536&1023))},isWhiteSpace:function(e){return e===32||e===9||e===11||e===12||e===160||e>=5760&&[5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279].indexOf(e)>=0},isLineTerminator:function(e){return e===10||e===13||e===8232||e===8233},isIdentifierStart:function(e){return e===36||e===95||e>=65&&e<=90||e>=97&&e<=122||e===92||e>=128&&i.NonAsciiIdentifierStart.test(t.Character.fromCodePoint(e))},isIdentifierPart:function(e){return e===36||e===95||e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||e===92||e>=128&&i.NonAsciiIdentifierPart.test(t.Character.fromCodePoint(e))},isDecimalDigit:function(e){return e>=48&&e<=57},isHexDigit:function(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102},isOctalDigit:function(e){return e>=48&&e<=55}}},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:true});var r=i(6);var s=function(){function JSXClosingElement(e){this.type=r.JSXSyntax.JSXClosingElement;this.name=e}return JSXClosingElement}();t.JSXClosingElement=s;var n=function(){function JSXElement(e,t,i){this.type=r.JSXSyntax.JSXElement;this.openingElement=e;this.children=t;this.closingElement=i}return JSXElement}();t.JSXElement=n;var a=function(){function JSXEmptyExpression(){this.type=r.JSXSyntax.JSXEmptyExpression}return JSXEmptyExpression}();t.JSXEmptyExpression=a;var o=function(){function JSXExpressionContainer(e){this.type=r.JSXSyntax.JSXExpressionContainer;this.expression=e}return JSXExpressionContainer}();t.JSXExpressionContainer=o;var u=function(){function JSXIdentifier(e){this.type=r.JSXSyntax.JSXIdentifier;this.name=e}return JSXIdentifier}();t.JSXIdentifier=u;var h=function(){function JSXMemberExpression(e,t){this.type=r.JSXSyntax.JSXMemberExpression;this.object=e;this.property=t}return JSXMemberExpression}();t.JSXMemberExpression=h;var c=function(){function JSXAttribute(e,t){this.type=r.JSXSyntax.JSXAttribute;this.name=e;this.value=t}return JSXAttribute}();t.JSXAttribute=c;var l=function(){function JSXNamespacedName(e,t){this.type=r.JSXSyntax.JSXNamespacedName;this.namespace=e;this.name=t}return JSXNamespacedName}();t.JSXNamespacedName=l;var p=function(){function JSXOpeningElement(e,t,i){this.type=r.JSXSyntax.JSXOpeningElement;this.name=e;this.selfClosing=t;this.attributes=i}return JSXOpeningElement}();t.JSXOpeningElement=p;var f=function(){function JSXSpreadAttribute(e){this.type=r.JSXSyntax.JSXSpreadAttribute;this.argument=e}return JSXSpreadAttribute}();t.JSXSpreadAttribute=f;var d=function(){function JSXText(e,t){this.type=r.JSXSyntax.JSXText;this.value=e;this.raw=t}return JSXText}();t.JSXText=d},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:true});t.JSXSyntax={JSXAttribute:"JSXAttribute",JSXClosingElement:"JSXClosingElement",JSXElement:"JSXElement",JSXEmptyExpression:"JSXEmptyExpression",JSXExpressionContainer:"JSXExpressionContainer",JSXIdentifier:"JSXIdentifier",JSXMemberExpression:"JSXMemberExpression",JSXNamespacedName:"JSXNamespacedName",JSXOpeningElement:"JSXOpeningElement",JSXSpreadAttribute:"JSXSpreadAttribute",JSXText:"JSXText"}},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:true});var r=i(2);var s=function(){function ArrayExpression(e){this.type=r.Syntax.ArrayExpression;this.elements=e}return ArrayExpression}();t.ArrayExpression=s;var n=function(){function ArrayPattern(e){this.type=r.Syntax.ArrayPattern;this.elements=e}return ArrayPattern}();t.ArrayPattern=n;var a=function(){function ArrowFunctionExpression(e,t,i){this.type=r.Syntax.ArrowFunctionExpression;this.id=null;this.params=e;this.body=t;this.generator=false;this.expression=i;this.async=false}return ArrowFunctionExpression}();t.ArrowFunctionExpression=a;var o=function(){function AssignmentExpression(e,t,i){this.type=r.Syntax.AssignmentExpression;this.operator=e;this.left=t;this.right=i}return AssignmentExpression}();t.AssignmentExpression=o;var u=function(){function AssignmentPattern(e,t){this.type=r.Syntax.AssignmentPattern;this.left=e;this.right=t}return AssignmentPattern}();t.AssignmentPattern=u;var h=function(){function AsyncArrowFunctionExpression(e,t,i){this.type=r.Syntax.ArrowFunctionExpression;this.id=null;this.params=e;this.body=t;this.generator=false;this.expression=i;this.async=true}return AsyncArrowFunctionExpression}();t.AsyncArrowFunctionExpression=h;var c=function(){function AsyncFunctionDeclaration(e,t,i){this.type=r.Syntax.FunctionDeclaration;this.id=e;this.params=t;this.body=i;this.generator=false;this.expression=false;this.async=true}return AsyncFunctionDeclaration}();t.AsyncFunctionDeclaration=c;var l=function(){function AsyncFunctionExpression(e,t,i){this.type=r.Syntax.FunctionExpression;this.id=e;this.params=t;this.body=i;this.generator=false;this.expression=false;this.async=true}return AsyncFunctionExpression}();t.AsyncFunctionExpression=l;var p=function(){function AwaitExpression(e){this.type=r.Syntax.AwaitExpression;this.argument=e}return AwaitExpression}();t.AwaitExpression=p;var f=function(){function BinaryExpression(e,t,i){var s=e==="||"||e==="&&";this.type=s?r.Syntax.LogicalExpression:r.Syntax.BinaryExpression;this.operator=e;this.left=t;this.right=i}return BinaryExpression}();t.BinaryExpression=f;var d=function(){function BlockStatement(e){this.type=r.Syntax.BlockStatement;this.body=e}return BlockStatement}();t.BlockStatement=d;var m=function(){function BreakStatement(e){this.type=r.Syntax.BreakStatement;this.label=e}return BreakStatement}();t.BreakStatement=m;var x=function(){function CallExpression(e,t){this.type=r.Syntax.CallExpression;this.callee=e;this.arguments=t}return CallExpression}();t.CallExpression=x;var D=function(){function CatchClause(e,t){this.type=r.Syntax.CatchClause;this.param=e;this.body=t}return CatchClause}();t.CatchClause=D;var E=function(){function ClassBody(e){this.type=r.Syntax.ClassBody;this.body=e}return ClassBody}();t.ClassBody=E;var v=function(){function ClassDeclaration(e,t,i){this.type=r.Syntax.ClassDeclaration;this.id=e;this.superClass=t;this.body=i}return ClassDeclaration}();t.ClassDeclaration=v;var y=function(){function ClassExpression(e,t,i){this.type=r.Syntax.ClassExpression;this.id=e;this.superClass=t;this.body=i}return ClassExpression}();t.ClassExpression=y;var C=function(){function ComputedMemberExpression(e,t){this.type=r.Syntax.MemberExpression;this.computed=true;this.object=e;this.property=t}return ComputedMemberExpression}();t.ComputedMemberExpression=C;var S=function(){function ConditionalExpression(e,t,i){this.type=r.Syntax.ConditionalExpression;this.test=e;this.consequent=t;this.alternate=i}return ConditionalExpression}();t.ConditionalExpression=S;var A=function(){function ContinueStatement(e){this.type=r.Syntax.ContinueStatement;this.label=e}return ContinueStatement}();t.ContinueStatement=A;var F=function(){function DebuggerStatement(){this.type=r.Syntax.DebuggerStatement}return DebuggerStatement}();t.DebuggerStatement=F;var g=function(){function Directive(e,t){this.type=r.Syntax.ExpressionStatement;this.expression=e;this.directive=t}return Directive}();t.Directive=g;var k=function(){function DoWhileStatement(e,t){this.type=r.Syntax.DoWhileStatement;this.body=e;this.test=t}return DoWhileStatement}();t.DoWhileStatement=k;var w=function(){function EmptyStatement(){this.type=r.Syntax.EmptyStatement}return EmptyStatement}();t.EmptyStatement=w;var b=function(){function ExportAllDeclaration(e){this.type=r.Syntax.ExportAllDeclaration;this.source=e}return ExportAllDeclaration}();t.ExportAllDeclaration=b;var B=function(){function ExportDefaultDeclaration(e){this.type=r.Syntax.ExportDefaultDeclaration;this.declaration=e}return ExportDefaultDeclaration}();t.ExportDefaultDeclaration=B;var T=function(){function ExportNamedDeclaration(e,t,i){this.type=r.Syntax.ExportNamedDeclaration;this.declaration=e;this.specifiers=t;this.source=i}return ExportNamedDeclaration}();t.ExportNamedDeclaration=T;var P=function(){function ExportSpecifier(e,t){this.type=r.Syntax.ExportSpecifier;this.exported=t;this.local=e}return ExportSpecifier}();t.ExportSpecifier=P;var N=function(){function ExpressionStatement(e){this.type=r.Syntax.ExpressionStatement;this.expression=e}return ExpressionStatement}();t.ExpressionStatement=N;var I=function(){function ForInStatement(e,t,i){this.type=r.Syntax.ForInStatement;this.left=e;this.right=t;this.body=i;this.each=false}return ForInStatement}();t.ForInStatement=I;var M=function(){function ForOfStatement(e,t,i){this.type=r.Syntax.ForOfStatement;this.left=e;this.right=t;this.body=i}return ForOfStatement}();t.ForOfStatement=M;var X=function(){function ForStatement(e,t,i,s){this.type=r.Syntax.ForStatement;this.init=e;this.test=t;this.update=i;this.body=s}return ForStatement}();t.ForStatement=X;var J=function(){function FunctionDeclaration(e,t,i,s){this.type=r.Syntax.FunctionDeclaration;this.id=e;this.params=t;this.body=i;this.generator=s;this.expression=false;this.async=false}return FunctionDeclaration}();t.FunctionDeclaration=J;var L=function(){function FunctionExpression(e,t,i,s){this.type=r.Syntax.FunctionExpression;this.id=e;this.params=t;this.body=i;this.generator=s;this.expression=false;this.async=false}return FunctionExpression}();t.FunctionExpression=L;var R=function(){function Identifier(e){this.type=r.Syntax.Identifier;this.name=e}return Identifier}();t.Identifier=R;var O=function(){function IfStatement(e,t,i){this.type=r.Syntax.IfStatement;this.test=e;this.consequent=t;this.alternate=i}return IfStatement}();t.IfStatement=O;var U=function(){function ImportDeclaration(e,t){this.type=r.Syntax.ImportDeclaration;this.specifiers=e;this.source=t}return ImportDeclaration}();t.ImportDeclaration=U;var z=function(){function ImportDefaultSpecifier(e){this.type=r.Syntax.ImportDefaultSpecifier;this.local=e}return ImportDefaultSpecifier}();t.ImportDefaultSpecifier=z;var _=function(){function ImportNamespaceSpecifier(e){this.type=r.Syntax.ImportNamespaceSpecifier;this.local=e}return ImportNamespaceSpecifier}();t.ImportNamespaceSpecifier=_;var K=function(){function ImportSpecifier(e,t){this.type=r.Syntax.ImportSpecifier;this.local=e;this.imported=t}return ImportSpecifier}();t.ImportSpecifier=K;var j=function(){function LabeledStatement(e,t){this.type=r.Syntax.LabeledStatement;this.label=e;this.body=t}return LabeledStatement}();t.LabeledStatement=j;var H=function(){function Literal(e,t){this.type=r.Syntax.Literal;this.value=e;this.raw=t}return Literal}();t.Literal=H;var W=function(){function MetaProperty(e,t){this.type=r.Syntax.MetaProperty;this.meta=e;this.property=t}return MetaProperty}();t.MetaProperty=W;var V=function(){function MethodDefinition(e,t,i,s,n){this.type=r.Syntax.MethodDefinition;this.key=e;this.computed=t;this.value=i;this.kind=s;this.static=n}return MethodDefinition}();t.MethodDefinition=V;var G=function(){function Module(e){this.type=r.Syntax.Program;this.body=e;this.sourceType="module"}return Module}();t.Module=G;var Y=function(){function NewExpression(e,t){this.type=r.Syntax.NewExpression;this.callee=e;this.arguments=t}return NewExpression}();t.NewExpression=Y;var q=function(){function ObjectExpression(e){this.type=r.Syntax.ObjectExpression;this.properties=e}return ObjectExpression}();t.ObjectExpression=q;var $=function(){function ObjectPattern(e){this.type=r.Syntax.ObjectPattern;this.properties=e}return ObjectPattern}();t.ObjectPattern=$;var Q=function(){function Property(e,t,i,s,n,a){this.type=r.Syntax.Property;this.key=t;this.computed=i;this.value=s;this.kind=e;this.method=n;this.shorthand=a}return Property}();t.Property=Q;var Z=function(){function RegexLiteral(e,t,i,s){this.type=r.Syntax.Literal;this.value=e;this.raw=t;this.regex={pattern:i,flags:s}}return RegexLiteral}();t.RegexLiteral=Z;var ee=function(){function RestElement(e){this.type=r.Syntax.RestElement;this.argument=e}return RestElement}();t.RestElement=ee;var te=function(){function ReturnStatement(e){this.type=r.Syntax.ReturnStatement;this.argument=e}return ReturnStatement}();t.ReturnStatement=te;var ie=function(){function Script(e){this.type=r.Syntax.Program;this.body=e;this.sourceType="script"}return Script}();t.Script=ie;var re=function(){function SequenceExpression(e){this.type=r.Syntax.SequenceExpression;this.expressions=e}return SequenceExpression}();t.SequenceExpression=re;var se=function(){function SpreadElement(e){this.type=r.Syntax.SpreadElement;this.argument=e}return SpreadElement}();t.SpreadElement=se;var ne=function(){function StaticMemberExpression(e,t){this.type=r.Syntax.MemberExpression;this.computed=false;this.object=e;this.property=t}return StaticMemberExpression}();t.StaticMemberExpression=ne;var ae=function(){function Super(){this.type=r.Syntax.Super}return Super}();t.Super=ae;var oe=function(){function SwitchCase(e,t){this.type=r.Syntax.SwitchCase;this.test=e;this.consequent=t}return SwitchCase}();t.SwitchCase=oe;var ue=function(){function SwitchStatement(e,t){this.type=r.Syntax.SwitchStatement;this.discriminant=e;this.cases=t}return SwitchStatement}();t.SwitchStatement=ue;var he=function(){function TaggedTemplateExpression(e,t){this.type=r.Syntax.TaggedTemplateExpression;this.tag=e;this.quasi=t}return TaggedTemplateExpression}();t.TaggedTemplateExpression=he;var ce=function(){function TemplateElement(e,t){this.type=r.Syntax.TemplateElement;this.value=e;this.tail=t}return TemplateElement}();t.TemplateElement=ce;var le=function(){function TemplateLiteral(e,t){this.type=r.Syntax.TemplateLiteral;this.quasis=e;this.expressions=t}return TemplateLiteral}();t.TemplateLiteral=le;var pe=function(){function ThisExpression(){this.type=r.Syntax.ThisExpression}return ThisExpression}();t.ThisExpression=pe;var fe=function(){function ThrowStatement(e){this.type=r.Syntax.ThrowStatement;this.argument=e}return ThrowStatement}();t.ThrowStatement=fe;var de=function(){function TryStatement(e,t,i){this.type=r.Syntax.TryStatement;this.block=e;this.handler=t;this.finalizer=i}return TryStatement}();t.TryStatement=de;var me=function(){function UnaryExpression(e,t){this.type=r.Syntax.UnaryExpression;this.operator=e;this.argument=t;this.prefix=true}return UnaryExpression}();t.UnaryExpression=me;var xe=function(){function UpdateExpression(e,t,i){this.type=r.Syntax.UpdateExpression;this.operator=e;this.argument=t;this.prefix=i}return UpdateExpression}();t.UpdateExpression=xe;var De=function(){function VariableDeclaration(e,t){this.type=r.Syntax.VariableDeclaration;this.declarations=e;this.kind=t}return VariableDeclaration}();t.VariableDeclaration=De;var Ee=function(){function VariableDeclarator(e,t){this.type=r.Syntax.VariableDeclarator;this.id=e;this.init=t}return VariableDeclarator}();t.VariableDeclarator=Ee;var ve=function(){function WhileStatement(e,t){this.type=r.Syntax.WhileStatement;this.test=e;this.body=t}return WhileStatement}();t.WhileStatement=ve;var ye=function(){function WithStatement(e,t){this.type=r.Syntax.WithStatement;this.object=e;this.body=t}return WithStatement}();t.WithStatement=ye;var Ce=function(){function YieldExpression(e,t){this.type=r.Syntax.YieldExpression;this.argument=e;this.delegate=t}return YieldExpression}();t.YieldExpression=Ce},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:true});var r=i(9);var s=i(10);var n=i(11);var a=i(7);var o=i(12);var u=i(2);var h=i(13);var c="ArrowParameterPlaceHolder";var l=function(){function Parser(e,t,i){if(t===void 0){t={}}this.config={range:typeof t.range==="boolean"&&t.range,loc:typeof t.loc==="boolean"&&t.loc,source:null,tokens:typeof t.tokens==="boolean"&&t.tokens,comment:typeof t.comment==="boolean"&&t.comment,tolerant:typeof t.tolerant==="boolean"&&t.tolerant};if(this.config.loc&&t.source&&t.source!==null){this.config.source=String(t.source)}this.delegate=i;this.errorHandler=new s.ErrorHandler;this.errorHandler.tolerant=this.config.tolerant;this.scanner=new o.Scanner(e,this.errorHandler);this.scanner.trackComment=this.config.comment;this.operatorPrecedence={")":0,";":0,",":0,"=":0,"]":0,"||":1,"&&":2,"|":3,"^":4,"&":5,"==":6,"!=":6,"===":6,"!==":6,"<":7,">":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":11,"/":11,"%":11};this.lookahead={type:2,value:"",lineNumber:this.scanner.lineNumber,lineStart:0,start:0,end:0};this.hasLineTerminator=false;this.context={isModule:false,await:false,allowIn:true,allowStrictDirective:true,allowYield:true,firstCoverInitializedNameError:null,isAssignmentTarget:false,isBindingElement:false,inFunctionBody:false,inIteration:false,inSwitch:false,labelSet:{},strict:false};this.tokens=[];this.startMarker={index:0,line:this.scanner.lineNumber,column:0};this.lastMarker={index:0,line:this.scanner.lineNumber,column:0};this.nextToken();this.lastMarker={index:this.scanner.index,line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart}}Parser.prototype.throwError=function(e){var t=[];for(var i=1;i0&&this.delegate){for(var t=0;t>="||e===">>>="||e==="&="||e==="^="||e==="|="};Parser.prototype.isolateCoverGrammar=function(e){var t=this.context.isBindingElement;var i=this.context.isAssignmentTarget;var r=this.context.firstCoverInitializedNameError;this.context.isBindingElement=true;this.context.isAssignmentTarget=true;this.context.firstCoverInitializedNameError=null;var s=e.call(this);if(this.context.firstCoverInitializedNameError!==null){this.throwUnexpectedToken(this.context.firstCoverInitializedNameError)}this.context.isBindingElement=t;this.context.isAssignmentTarget=i;this.context.firstCoverInitializedNameError=r;return s};Parser.prototype.inheritCoverGrammar=function(e){var t=this.context.isBindingElement;var i=this.context.isAssignmentTarget;var r=this.context.firstCoverInitializedNameError;this.context.isBindingElement=true;this.context.isAssignmentTarget=true;this.context.firstCoverInitializedNameError=null;var s=e.call(this);this.context.isBindingElement=this.context.isBindingElement&&t;this.context.isAssignmentTarget=this.context.isAssignmentTarget&&i;this.context.firstCoverInitializedNameError=r||this.context.firstCoverInitializedNameError;return s};Parser.prototype.consumeSemicolon=function(){if(this.match(";")){this.nextToken()}else if(!this.hasLineTerminator){if(this.lookahead.type!==2&&!this.match("}")){this.throwUnexpectedToken(this.lookahead)}this.lastMarker.index=this.startMarker.index;this.lastMarker.line=this.startMarker.line;this.lastMarker.column=this.startMarker.column}};Parser.prototype.parsePrimaryExpression=function(){var e=this.createNode();var t;var i,r;switch(this.lookahead.type){case 3:if((this.context.isModule||this.context.await)&&this.lookahead.value==="await"){this.tolerateUnexpectedToken(this.lookahead)}t=this.matchAsyncFunction()?this.parseFunctionExpression():this.finalize(e,new a.Identifier(this.nextToken().value));break;case 6:case 8:if(this.context.strict&&this.lookahead.octal){this.tolerateUnexpectedToken(this.lookahead,n.Messages.StrictOctalLiteral)}this.context.isAssignmentTarget=false;this.context.isBindingElement=false;i=this.nextToken();r=this.getTokenRaw(i);t=this.finalize(e,new a.Literal(i.value,r));break;case 1:this.context.isAssignmentTarget=false;this.context.isBindingElement=false;i=this.nextToken();r=this.getTokenRaw(i);t=this.finalize(e,new a.Literal(i.value==="true",r));break;case 5:this.context.isAssignmentTarget=false;this.context.isBindingElement=false;i=this.nextToken();r=this.getTokenRaw(i);t=this.finalize(e,new a.Literal(null,r));break;case 10:t=this.parseTemplateLiteral();break;case 7:switch(this.lookahead.value){case"(":this.context.isBindingElement=false;t=this.inheritCoverGrammar(this.parseGroupExpression);break;case"[":t=this.inheritCoverGrammar(this.parseArrayInitializer);break;case"{":t=this.inheritCoverGrammar(this.parseObjectInitializer);break;case"/":case"/=":this.context.isAssignmentTarget=false;this.context.isBindingElement=false;this.scanner.index=this.startMarker.index;i=this.nextRegexToken();r=this.getTokenRaw(i);t=this.finalize(e,new a.RegexLiteral(i.regex,r,i.pattern,i.flags));break;default:t=this.throwUnexpectedToken(this.nextToken())}break;case 4:if(!this.context.strict&&this.context.allowYield&&this.matchKeyword("yield")){t=this.parseIdentifierName()}else if(!this.context.strict&&this.matchKeyword("let")){t=this.finalize(e,new a.Identifier(this.nextToken().value))}else{this.context.isAssignmentTarget=false;this.context.isBindingElement=false;if(this.matchKeyword("function")){t=this.parseFunctionExpression()}else if(this.matchKeyword("this")){this.nextToken();t=this.finalize(e,new a.ThisExpression)}else if(this.matchKeyword("class")){t=this.parseClassExpression()}else{t=this.throwUnexpectedToken(this.nextToken())}}break;default:t=this.throwUnexpectedToken(this.nextToken())}return t};Parser.prototype.parseSpreadElement=function(){var e=this.createNode();this.expect("...");var t=this.inheritCoverGrammar(this.parseAssignmentExpression);return this.finalize(e,new a.SpreadElement(t))};Parser.prototype.parseArrayInitializer=function(){var e=this.createNode();var t=[];this.expect("[");while(!this.match("]")){if(this.match(",")){this.nextToken();t.push(null)}else if(this.match("...")){var i=this.parseSpreadElement();if(!this.match("]")){this.context.isAssignmentTarget=false;this.context.isBindingElement=false;this.expect(",")}t.push(i)}else{t.push(this.inheritCoverGrammar(this.parseAssignmentExpression));if(!this.match("]")){this.expect(",")}}}this.expect("]");return this.finalize(e,new a.ArrayExpression(t))};Parser.prototype.parsePropertyMethod=function(e){this.context.isAssignmentTarget=false;this.context.isBindingElement=false;var t=this.context.strict;var i=this.context.allowStrictDirective;this.context.allowStrictDirective=e.simple;var r=this.isolateCoverGrammar(this.parseFunctionSourceElements);if(this.context.strict&&e.firstRestricted){this.tolerateUnexpectedToken(e.firstRestricted,e.message)}if(this.context.strict&&e.stricted){this.tolerateUnexpectedToken(e.stricted,e.message)}this.context.strict=t;this.context.allowStrictDirective=i;return r};Parser.prototype.parsePropertyMethodFunction=function(){var e=false;var t=this.createNode();var i=this.context.allowYield;this.context.allowYield=true;var r=this.parseFormalParameters();var s=this.parsePropertyMethod(r);this.context.allowYield=i;return this.finalize(t,new a.FunctionExpression(null,r.params,s,e))};Parser.prototype.parsePropertyMethodAsyncFunction=function(){var e=this.createNode();var t=this.context.allowYield;var i=this.context.await;this.context.allowYield=false;this.context.await=true;var r=this.parseFormalParameters();var s=this.parsePropertyMethod(r);this.context.allowYield=t;this.context.await=i;return this.finalize(e,new a.AsyncFunctionExpression(null,r.params,s))};Parser.prototype.parseObjectPropertyKey=function(){var e=this.createNode();var t=this.nextToken();var i;switch(t.type){case 8:case 6:if(this.context.strict&&t.octal){this.tolerateUnexpectedToken(t,n.Messages.StrictOctalLiteral)}var r=this.getTokenRaw(t);i=this.finalize(e,new a.Literal(t.value,r));break;case 3:case 1:case 5:case 4:i=this.finalize(e,new a.Identifier(t.value));break;case 7:if(t.value==="["){i=this.isolateCoverGrammar(this.parseAssignmentExpression);this.expect("]")}else{i=this.throwUnexpectedToken(t)}break;default:i=this.throwUnexpectedToken(t)}return i};Parser.prototype.isPropertyKey=function(e,t){return e.type===u.Syntax.Identifier&&e.name===t||e.type===u.Syntax.Literal&&e.value===t};Parser.prototype.parseObjectProperty=function(e){var t=this.createNode();var i=this.lookahead;var r;var s=null;var o=null;var u=false;var h=false;var c=false;var l=false;if(i.type===3){var p=i.value;this.nextToken();u=this.match("[");l=!this.hasLineTerminator&&p==="async"&&!this.match(":")&&!this.match("(")&&!this.match("*")&&!this.match(",");s=l?this.parseObjectPropertyKey():this.finalize(t,new a.Identifier(p))}else if(this.match("*")){this.nextToken()}else{u=this.match("[");s=this.parseObjectPropertyKey()}var f=this.qualifiedPropertyName(this.lookahead);if(i.type===3&&!l&&i.value==="get"&&f){r="get";u=this.match("[");s=this.parseObjectPropertyKey();this.context.allowYield=false;o=this.parseGetterMethod()}else if(i.type===3&&!l&&i.value==="set"&&f){r="set";u=this.match("[");s=this.parseObjectPropertyKey();o=this.parseSetterMethod()}else if(i.type===7&&i.value==="*"&&f){r="init";u=this.match("[");s=this.parseObjectPropertyKey();o=this.parseGeneratorMethod();h=true}else{if(!s){this.throwUnexpectedToken(this.lookahead)}r="init";if(this.match(":")&&!l){if(!u&&this.isPropertyKey(s,"__proto__")){if(e.value){this.tolerateError(n.Messages.DuplicateProtoProperty)}e.value=true}this.nextToken();o=this.inheritCoverGrammar(this.parseAssignmentExpression)}else if(this.match("(")){o=l?this.parsePropertyMethodAsyncFunction():this.parsePropertyMethodFunction();h=true}else if(i.type===3){var p=this.finalize(t,new a.Identifier(i.value));if(this.match("=")){this.context.firstCoverInitializedNameError=this.lookahead;this.nextToken();c=true;var d=this.isolateCoverGrammar(this.parseAssignmentExpression);o=this.finalize(t,new a.AssignmentPattern(p,d))}else{c=true;o=p}}else{this.throwUnexpectedToken(this.nextToken())}}return this.finalize(t,new a.Property(r,s,u,o,h,c))};Parser.prototype.parseObjectInitializer=function(){var e=this.createNode();this.expect("{");var t=[];var i={value:false};while(!this.match("}")){t.push(this.parseObjectProperty(i));if(!this.match("}")){this.expectCommaSeparator()}}this.expect("}");return this.finalize(e,new a.ObjectExpression(t))};Parser.prototype.parseTemplateHead=function(){r.assert(this.lookahead.head,"Template literal must start with a template head");var e=this.createNode();var t=this.nextToken();var i=t.value;var s=t.cooked;return this.finalize(e,new a.TemplateElement({raw:i,cooked:s},t.tail))};Parser.prototype.parseTemplateElement=function(){if(this.lookahead.type!==10){this.throwUnexpectedToken()}var e=this.createNode();var t=this.nextToken();var i=t.value;var r=t.cooked;return this.finalize(e,new a.TemplateElement({raw:i,cooked:r},t.tail))};Parser.prototype.parseTemplateLiteral=function(){var e=this.createNode();var t=[];var i=[];var r=this.parseTemplateHead();i.push(r);while(!r.tail){t.push(this.parseExpression());r=this.parseTemplateElement();i.push(r)}return this.finalize(e,new a.TemplateLiteral(i,t))};Parser.prototype.reinterpretExpressionAsPattern=function(e){switch(e.type){case u.Syntax.Identifier:case u.Syntax.MemberExpression:case u.Syntax.RestElement:case u.Syntax.AssignmentPattern:break;case u.Syntax.SpreadElement:e.type=u.Syntax.RestElement;this.reinterpretExpressionAsPattern(e.argument);break;case u.Syntax.ArrayExpression:e.type=u.Syntax.ArrayPattern;for(var t=0;t")){this.expect("=>")}e={type:c,params:[],async:false}}else{var t=this.lookahead;var i=[];if(this.match("...")){e=this.parseRestElement(i);this.expect(")");if(!this.match("=>")){this.expect("=>")}e={type:c,params:[e],async:false}}else{var r=false;this.context.isBindingElement=true;e=this.inheritCoverGrammar(this.parseAssignmentExpression);if(this.match(",")){var s=[];this.context.isAssignmentTarget=false;s.push(e);while(this.lookahead.type!==2){if(!this.match(",")){break}this.nextToken();if(this.match(")")){this.nextToken();for(var n=0;n")){this.expect("=>")}this.context.isBindingElement=false;for(var n=0;n")){if(e.type===u.Syntax.Identifier&&e.name==="yield"){r=true;e={type:c,params:[e],async:false}}if(!r){if(!this.context.isBindingElement){this.throwUnexpectedToken(this.lookahead)}if(e.type===u.Syntax.SequenceExpression){for(var n=0;n")){for(var u=0;u0){this.nextToken();this.context.isAssignmentTarget=false;this.context.isBindingElement=false;var s=[e,this.lookahead];var n=t;var o=this.isolateCoverGrammar(this.parseExponentiationExpression);var u=[n,i.value,o];var h=[r];while(true){r=this.binaryPrecedence(this.lookahead);if(r<=0){break}while(u.length>2&&r<=h[h.length-1]){o=u.pop();var c=u.pop();h.pop();n=u.pop();s.pop();var l=this.startNode(s[s.length-1]);u.push(this.finalize(l,new a.BinaryExpression(c,n,o)))}u.push(this.nextToken().value);h.push(r);s.push(this.lookahead);u.push(this.isolateCoverGrammar(this.parseExponentiationExpression))}var p=u.length-1;t=u[p];var f=s.pop();while(p>1){var d=s.pop();var m=f&&f.lineStart;var l=this.startNode(d,m);var c=u[p-1];t=this.finalize(l,new a.BinaryExpression(c,u[p-2],t));p-=2;f=d}}return t};Parser.prototype.parseConditionalExpression=function(){var e=this.lookahead;var t=this.inheritCoverGrammar(this.parseBinaryExpression);if(this.match("?")){this.nextToken();var i=this.context.allowIn;this.context.allowIn=true;var r=this.isolateCoverGrammar(this.parseAssignmentExpression);this.context.allowIn=i;this.expect(":");var s=this.isolateCoverGrammar(this.parseAssignmentExpression);t=this.finalize(this.startNode(e),new a.ConditionalExpression(t,r,s));this.context.isAssignmentTarget=false;this.context.isBindingElement=false}return t};Parser.prototype.checkPatternParam=function(e,t){switch(t.type){case u.Syntax.Identifier:this.validateParam(e,t,t.name);break;case u.Syntax.RestElement:this.checkPatternParam(e,t.argument);break;case u.Syntax.AssignmentPattern:this.checkPatternParam(e,t.left);break;case u.Syntax.ArrayPattern:for(var i=0;i")){this.context.isAssignmentTarget=false;this.context.isBindingElement=false;var s=e.async;var o=this.reinterpretAsCoverFormalsList(e);if(o){if(this.hasLineTerminator){this.tolerateUnexpectedToken(this.lookahead)}this.context.firstCoverInitializedNameError=null;var h=this.context.strict;var l=this.context.allowStrictDirective;this.context.allowStrictDirective=o.simple;var p=this.context.allowYield;var f=this.context.await;this.context.allowYield=true;this.context.await=s;var d=this.startNode(t);this.expect("=>");var m=void 0;if(this.match("{")){var x=this.context.allowIn;this.context.allowIn=true;m=this.parseFunctionSourceElements();this.context.allowIn=x}else{m=this.isolateCoverGrammar(this.parseAssignmentExpression)}var D=m.type!==u.Syntax.BlockStatement;if(this.context.strict&&o.firstRestricted){this.throwUnexpectedToken(o.firstRestricted,o.message)}if(this.context.strict&&o.stricted){this.tolerateUnexpectedToken(o.stricted,o.message)}e=s?this.finalize(d,new a.AsyncArrowFunctionExpression(o.params,m,D)):this.finalize(d,new a.ArrowFunctionExpression(o.params,m,D));this.context.strict=h;this.context.allowStrictDirective=l;this.context.allowYield=p;this.context.await=f}}else{if(this.matchAssign()){if(!this.context.isAssignmentTarget){this.tolerateError(n.Messages.InvalidLHSInAssignment)}if(this.context.strict&&e.type===u.Syntax.Identifier){var E=e;if(this.scanner.isRestrictedWord(E.name)){this.tolerateUnexpectedToken(i,n.Messages.StrictLHSAssignment)}if(this.scanner.isStrictModeReservedWord(E.name)){this.tolerateUnexpectedToken(i,n.Messages.StrictReservedWord)}}if(!this.match("=")){this.context.isAssignmentTarget=false;this.context.isBindingElement=false}else{this.reinterpretExpressionAsPattern(e)}i=this.nextToken();var v=i.value;var y=this.isolateCoverGrammar(this.parseAssignmentExpression);e=this.finalize(this.startNode(t),new a.AssignmentExpression(v,e,y));this.context.firstCoverInitializedNameError=null}}}return e};Parser.prototype.parseExpression=function(){var e=this.lookahead;var t=this.isolateCoverGrammar(this.parseAssignmentExpression);if(this.match(",")){var i=[];i.push(t);while(this.lookahead.type!==2){if(!this.match(",")){break}this.nextToken();i.push(this.isolateCoverGrammar(this.parseAssignmentExpression))}t=this.finalize(this.startNode(e),new a.SequenceExpression(i))}return t};Parser.prototype.parseStatementListItem=function(){var e;this.context.isAssignmentTarget=true;this.context.isBindingElement=true;if(this.lookahead.type===4){switch(this.lookahead.value){case"export":if(!this.context.isModule){this.tolerateUnexpectedToken(this.lookahead,n.Messages.IllegalExportDeclaration)}e=this.parseExportDeclaration();break;case"import":if(!this.context.isModule){this.tolerateUnexpectedToken(this.lookahead,n.Messages.IllegalImportDeclaration)}e=this.parseImportDeclaration();break;case"const":e=this.parseLexicalDeclaration({inFor:false});break;case"function":e=this.parseFunctionDeclaration();break;case"class":e=this.parseClassDeclaration();break;case"let":e=this.isLexicalDeclaration()?this.parseLexicalDeclaration({inFor:false}):this.parseStatement();break;default:e=this.parseStatement();break}}else{e=this.parseStatement()}return e};Parser.prototype.parseBlock=function(){var e=this.createNode();this.expect("{");var t=[];while(true){if(this.match("}")){break}t.push(this.parseStatementListItem())}this.expect("}");return this.finalize(e,new a.BlockStatement(t))};Parser.prototype.parseLexicalBinding=function(e,t){var i=this.createNode();var r=[];var s=this.parsePattern(r,e);if(this.context.strict&&s.type===u.Syntax.Identifier){if(this.scanner.isRestrictedWord(s.name)){this.tolerateError(n.Messages.StrictVarName)}}var o=null;if(e==="const"){if(!this.matchKeyword("in")&&!this.matchContextualKeyword("of")){if(this.match("=")){this.nextToken();o=this.isolateCoverGrammar(this.parseAssignmentExpression)}else{this.throwError(n.Messages.DeclarationMissingInitializer,"const")}}}else if(!t.inFor&&s.type!==u.Syntax.Identifier||this.match("=")){this.expect("=");o=this.isolateCoverGrammar(this.parseAssignmentExpression)}return this.finalize(i,new a.VariableDeclarator(s,o))};Parser.prototype.parseBindingList=function(e,t){var i=[this.parseLexicalBinding(e,t)];while(this.match(",")){this.nextToken();i.push(this.parseLexicalBinding(e,t))}return i};Parser.prototype.isLexicalDeclaration=function(){var e=this.scanner.saveState();this.scanner.scanComments();var t=this.scanner.lex();this.scanner.restoreState(e);return t.type===3||t.type===7&&t.value==="["||t.type===7&&t.value==="{"||t.type===4&&t.value==="let"||t.type===4&&t.value==="yield"};Parser.prototype.parseLexicalDeclaration=function(e){var t=this.createNode();var i=this.nextToken().value;r.assert(i==="let"||i==="const","Lexical declaration must be either let or const");var s=this.parseBindingList(i,e);this.consumeSemicolon();return this.finalize(t,new a.VariableDeclaration(s,i))};Parser.prototype.parseBindingRestElement=function(e,t){var i=this.createNode();this.expect("...");var r=this.parsePattern(e,t);return this.finalize(i,new a.RestElement(r))};Parser.prototype.parseArrayPattern=function(e,t){var i=this.createNode();this.expect("[");var r=[];while(!this.match("]")){if(this.match(",")){this.nextToken();r.push(null)}else{if(this.match("...")){r.push(this.parseBindingRestElement(e,t));break}else{r.push(this.parsePatternWithDefault(e,t))}if(!this.match("]")){this.expect(",")}}}this.expect("]");return this.finalize(i,new a.ArrayPattern(r))};Parser.prototype.parsePropertyPattern=function(e,t){var i=this.createNode();var r=false;var s=false;var n=false;var o;var u;if(this.lookahead.type===3){var h=this.lookahead;o=this.parseVariableIdentifier();var c=this.finalize(i,new a.Identifier(h.value));if(this.match("=")){e.push(h);s=true;this.nextToken();var l=this.parseAssignmentExpression();u=this.finalize(this.startNode(h),new a.AssignmentPattern(c,l))}else if(!this.match(":")){e.push(h);s=true;u=c}else{this.expect(":");u=this.parsePatternWithDefault(e,t)}}else{r=this.match("[");o=this.parseObjectPropertyKey();this.expect(":");u=this.parsePatternWithDefault(e,t)}return this.finalize(i,new a.Property("init",o,r,u,n,s))};Parser.prototype.parseObjectPattern=function(e,t){var i=this.createNode();var r=[];this.expect("{");while(!this.match("}")){r.push(this.parsePropertyPattern(e,t));if(!this.match("}")){this.expect(",")}}this.expect("}");return this.finalize(i,new a.ObjectPattern(r))};Parser.prototype.parsePattern=function(e,t){var i;if(this.match("[")){i=this.parseArrayPattern(e,t)}else if(this.match("{")){i=this.parseObjectPattern(e,t)}else{if(this.matchKeyword("let")&&(t==="const"||t==="let")){this.tolerateUnexpectedToken(this.lookahead,n.Messages.LetInLexicalBinding)}e.push(this.lookahead);i=this.parseVariableIdentifier(t)}return i};Parser.prototype.parsePatternWithDefault=function(e,t){var i=this.lookahead;var r=this.parsePattern(e,t);if(this.match("=")){this.nextToken();var s=this.context.allowYield;this.context.allowYield=true;var n=this.isolateCoverGrammar(this.parseAssignmentExpression);this.context.allowYield=s;r=this.finalize(this.startNode(i),new a.AssignmentPattern(r,n))}return r};Parser.prototype.parseVariableIdentifier=function(e){var t=this.createNode();var i=this.nextToken();if(i.type===4&&i.value==="yield"){if(this.context.strict){this.tolerateUnexpectedToken(i,n.Messages.StrictReservedWord)}else if(!this.context.allowYield){this.throwUnexpectedToken(i)}}else if(i.type!==3){if(this.context.strict&&i.type===4&&this.scanner.isStrictModeReservedWord(i.value)){this.tolerateUnexpectedToken(i,n.Messages.StrictReservedWord)}else{if(this.context.strict||i.value!=="let"||e!=="var"){this.throwUnexpectedToken(i)}}}else if((this.context.isModule||this.context.await)&&i.type===3&&i.value==="await"){this.tolerateUnexpectedToken(i)}return this.finalize(t,new a.Identifier(i.value))};Parser.prototype.parseVariableDeclaration=function(e){var t=this.createNode();var i=[];var r=this.parsePattern(i,"var");if(this.context.strict&&r.type===u.Syntax.Identifier){if(this.scanner.isRestrictedWord(r.name)){this.tolerateError(n.Messages.StrictVarName)}}var s=null;if(this.match("=")){this.nextToken();s=this.isolateCoverGrammar(this.parseAssignmentExpression)}else if(r.type!==u.Syntax.Identifier&&!e.inFor){this.expect("=")}return this.finalize(t,new a.VariableDeclarator(r,s))};Parser.prototype.parseVariableDeclarationList=function(e){var t={inFor:e.inFor};var i=[];i.push(this.parseVariableDeclaration(t));while(this.match(",")){this.nextToken();i.push(this.parseVariableDeclaration(t))}return i};Parser.prototype.parseVariableStatement=function(){var e=this.createNode();this.expectKeyword("var");var t=this.parseVariableDeclarationList({inFor:false});this.consumeSemicolon();return this.finalize(e,new a.VariableDeclaration(t,"var"))};Parser.prototype.parseEmptyStatement=function(){var e=this.createNode();this.expect(";");return this.finalize(e,new a.EmptyStatement)};Parser.prototype.parseExpressionStatement=function(){var e=this.createNode();var t=this.parseExpression();this.consumeSemicolon();return this.finalize(e,new a.ExpressionStatement(t))};Parser.prototype.parseIfClause=function(){if(this.context.strict&&this.matchKeyword("function")){this.tolerateError(n.Messages.StrictFunction)}return this.parseStatement()};Parser.prototype.parseIfStatement=function(){var e=this.createNode();var t;var i=null;this.expectKeyword("if");this.expect("(");var r=this.parseExpression();if(!this.match(")")&&this.config.tolerant){this.tolerateUnexpectedToken(this.nextToken());t=this.finalize(this.createNode(),new a.EmptyStatement)}else{this.expect(")");t=this.parseIfClause();if(this.matchKeyword("else")){this.nextToken();i=this.parseIfClause()}}return this.finalize(e,new a.IfStatement(r,t,i))};Parser.prototype.parseDoWhileStatement=function(){var e=this.createNode();this.expectKeyword("do");var t=this.context.inIteration;this.context.inIteration=true;var i=this.parseStatement();this.context.inIteration=t;this.expectKeyword("while");this.expect("(");var r=this.parseExpression();if(!this.match(")")&&this.config.tolerant){this.tolerateUnexpectedToken(this.nextToken())}else{this.expect(")");if(this.match(";")){this.nextToken()}}return this.finalize(e,new a.DoWhileStatement(i,r))};Parser.prototype.parseWhileStatement=function(){var e=this.createNode();var t;this.expectKeyword("while");this.expect("(");var i=this.parseExpression();if(!this.match(")")&&this.config.tolerant){this.tolerateUnexpectedToken(this.nextToken());t=this.finalize(this.createNode(),new a.EmptyStatement)}else{this.expect(")");var r=this.context.inIteration;this.context.inIteration=true;t=this.parseStatement();this.context.inIteration=r}return this.finalize(e,new a.WhileStatement(i,t))};Parser.prototype.parseForStatement=function(){var e=null;var t=null;var i=null;var r=true;var s,o;var h=this.createNode();this.expectKeyword("for");this.expect("(");if(this.match(";")){this.nextToken()}else{if(this.matchKeyword("var")){e=this.createNode();this.nextToken();var c=this.context.allowIn;this.context.allowIn=false;var l=this.parseVariableDeclarationList({inFor:true});this.context.allowIn=c;if(l.length===1&&this.matchKeyword("in")){var p=l[0];if(p.init&&(p.id.type===u.Syntax.ArrayPattern||p.id.type===u.Syntax.ObjectPattern||this.context.strict)){this.tolerateError(n.Messages.ForInOfLoopInitializer,"for-in")}e=this.finalize(e,new a.VariableDeclaration(l,"var"));this.nextToken();s=e;o=this.parseExpression();e=null}else if(l.length===1&&l[0].init===null&&this.matchContextualKeyword("of")){e=this.finalize(e,new a.VariableDeclaration(l,"var"));this.nextToken();s=e;o=this.parseAssignmentExpression();e=null;r=false}else{e=this.finalize(e,new a.VariableDeclaration(l,"var"));this.expect(";")}}else if(this.matchKeyword("const")||this.matchKeyword("let")){e=this.createNode();var f=this.nextToken().value;if(!this.context.strict&&this.lookahead.value==="in"){e=this.finalize(e,new a.Identifier(f));this.nextToken();s=e;o=this.parseExpression();e=null}else{var c=this.context.allowIn;this.context.allowIn=false;var l=this.parseBindingList(f,{inFor:true});this.context.allowIn=c;if(l.length===1&&l[0].init===null&&this.matchKeyword("in")){e=this.finalize(e,new a.VariableDeclaration(l,f));this.nextToken();s=e;o=this.parseExpression();e=null}else if(l.length===1&&l[0].init===null&&this.matchContextualKeyword("of")){e=this.finalize(e,new a.VariableDeclaration(l,f));this.nextToken();s=e;o=this.parseAssignmentExpression();e=null;r=false}else{this.consumeSemicolon();e=this.finalize(e,new a.VariableDeclaration(l,f))}}}else{var d=this.lookahead;var c=this.context.allowIn;this.context.allowIn=false;e=this.inheritCoverGrammar(this.parseAssignmentExpression);this.context.allowIn=c;if(this.matchKeyword("in")){if(!this.context.isAssignmentTarget||e.type===u.Syntax.AssignmentExpression){this.tolerateError(n.Messages.InvalidLHSInForIn)}this.nextToken();this.reinterpretExpressionAsPattern(e);s=e;o=this.parseExpression();e=null}else if(this.matchContextualKeyword("of")){if(!this.context.isAssignmentTarget||e.type===u.Syntax.AssignmentExpression){this.tolerateError(n.Messages.InvalidLHSInForLoop)}this.nextToken();this.reinterpretExpressionAsPattern(e);s=e;o=this.parseAssignmentExpression();e=null;r=false}else{if(this.match(",")){var m=[e];while(this.match(",")){this.nextToken();m.push(this.isolateCoverGrammar(this.parseAssignmentExpression))}e=this.finalize(this.startNode(d),new a.SequenceExpression(m))}this.expect(";")}}}if(typeof s==="undefined"){if(!this.match(";")){t=this.parseExpression()}this.expect(";");if(!this.match(")")){i=this.parseExpression()}}var x;if(!this.match(")")&&this.config.tolerant){this.tolerateUnexpectedToken(this.nextToken());x=this.finalize(this.createNode(),new a.EmptyStatement)}else{this.expect(")");var D=this.context.inIteration;this.context.inIteration=true;x=this.isolateCoverGrammar(this.parseStatement);this.context.inIteration=D}return typeof s==="undefined"?this.finalize(h,new a.ForStatement(e,t,i,x)):r?this.finalize(h,new a.ForInStatement(s,o,x)):this.finalize(h,new a.ForOfStatement(s,o,x))};Parser.prototype.parseContinueStatement=function(){var e=this.createNode();this.expectKeyword("continue");var t=null;if(this.lookahead.type===3&&!this.hasLineTerminator){var i=this.parseVariableIdentifier();t=i;var r="$"+i.name;if(!Object.prototype.hasOwnProperty.call(this.context.labelSet,r)){this.throwError(n.Messages.UnknownLabel,i.name)}}this.consumeSemicolon();if(t===null&&!this.context.inIteration){this.throwError(n.Messages.IllegalContinue)}return this.finalize(e,new a.ContinueStatement(t))};Parser.prototype.parseBreakStatement=function(){var e=this.createNode();this.expectKeyword("break");var t=null;if(this.lookahead.type===3&&!this.hasLineTerminator){var i=this.parseVariableIdentifier();var r="$"+i.name;if(!Object.prototype.hasOwnProperty.call(this.context.labelSet,r)){this.throwError(n.Messages.UnknownLabel,i.name)}t=i}this.consumeSemicolon();if(t===null&&!this.context.inIteration&&!this.context.inSwitch){this.throwError(n.Messages.IllegalBreak)}return this.finalize(e,new a.BreakStatement(t))};Parser.prototype.parseReturnStatement=function(){if(!this.context.inFunctionBody){this.tolerateError(n.Messages.IllegalReturn)}var e=this.createNode();this.expectKeyword("return");var t=!this.match(";")&&!this.match("}")&&!this.hasLineTerminator&&this.lookahead.type!==2||this.lookahead.type===8||this.lookahead.type===10;var i=t?this.parseExpression():null;this.consumeSemicolon();return this.finalize(e,new a.ReturnStatement(i))};Parser.prototype.parseWithStatement=function(){if(this.context.strict){this.tolerateError(n.Messages.StrictModeWith)}var e=this.createNode();var t;this.expectKeyword("with");this.expect("(");var i=this.parseExpression();if(!this.match(")")&&this.config.tolerant){this.tolerateUnexpectedToken(this.nextToken());t=this.finalize(this.createNode(),new a.EmptyStatement)}else{this.expect(")");t=this.parseStatement()}return this.finalize(e,new a.WithStatement(i,t))};Parser.prototype.parseSwitchCase=function(){var e=this.createNode();var t;if(this.matchKeyword("default")){this.nextToken();t=null}else{this.expectKeyword("case");t=this.parseExpression()}this.expect(":");var i=[];while(true){if(this.match("}")||this.matchKeyword("default")||this.matchKeyword("case")){break}i.push(this.parseStatementListItem())}return this.finalize(e,new a.SwitchCase(t,i))};Parser.prototype.parseSwitchStatement=function(){var e=this.createNode();this.expectKeyword("switch");this.expect("(");var t=this.parseExpression();this.expect(")");var i=this.context.inSwitch;this.context.inSwitch=true;var r=[];var s=false;this.expect("{");while(true){if(this.match("}")){break}var o=this.parseSwitchCase();if(o.test===null){if(s){this.throwError(n.Messages.MultipleDefaultsInSwitch)}s=true}r.push(o)}this.expect("}");this.context.inSwitch=i;return this.finalize(e,new a.SwitchStatement(t,r))};Parser.prototype.parseLabelledStatement=function(){var e=this.createNode();var t=this.parseExpression();var i;if(t.type===u.Syntax.Identifier&&this.match(":")){this.nextToken();var r=t;var s="$"+r.name;if(Object.prototype.hasOwnProperty.call(this.context.labelSet,s)){this.throwError(n.Messages.Redeclaration,"Label",r.name)}this.context.labelSet[s]=true;var o=void 0;if(this.matchKeyword("class")){this.tolerateUnexpectedToken(this.lookahead);o=this.parseClassDeclaration()}else if(this.matchKeyword("function")){var h=this.lookahead;var c=this.parseFunctionDeclaration();if(this.context.strict){this.tolerateUnexpectedToken(h,n.Messages.StrictFunction)}else if(c.generator){this.tolerateUnexpectedToken(h,n.Messages.GeneratorInLegacyContext)}o=c}else{o=this.parseStatement()}delete this.context.labelSet[s];i=new a.LabeledStatement(r,o)}else{this.consumeSemicolon();i=new a.ExpressionStatement(t)}return this.finalize(e,i)};Parser.prototype.parseThrowStatement=function(){var e=this.createNode();this.expectKeyword("throw");if(this.hasLineTerminator){this.throwError(n.Messages.NewlineAfterThrow)}var t=this.parseExpression();this.consumeSemicolon();return this.finalize(e,new a.ThrowStatement(t))};Parser.prototype.parseCatchClause=function(){var e=this.createNode();this.expectKeyword("catch");this.expect("(");if(this.match(")")){this.throwUnexpectedToken(this.lookahead)}var t=[];var i=this.parsePattern(t);var r={};for(var s=0;s0){this.tolerateError(n.Messages.BadGetterArity)}var s=this.parsePropertyMethod(r);this.context.allowYield=i;return this.finalize(e,new a.FunctionExpression(null,r.params,s,t))};Parser.prototype.parseSetterMethod=function(){var e=this.createNode();var t=false;var i=this.context.allowYield;this.context.allowYield=!t;var r=this.parseFormalParameters();if(r.params.length!==1){this.tolerateError(n.Messages.BadSetterArity)}else if(r.params[0]instanceof a.RestElement){this.tolerateError(n.Messages.BadSetterRestParameter)}var s=this.parsePropertyMethod(r);this.context.allowYield=i;return this.finalize(e,new a.FunctionExpression(null,r.params,s,t))};Parser.prototype.parseGeneratorMethod=function(){var e=this.createNode();var t=true;var i=this.context.allowYield;this.context.allowYield=true;var r=this.parseFormalParameters();this.context.allowYield=false;var s=this.parsePropertyMethod(r);this.context.allowYield=i;return this.finalize(e,new a.FunctionExpression(null,r.params,s,t))};Parser.prototype.isStartOfExpression=function(){var e=true;var t=this.lookahead.value;switch(this.lookahead.type){case 7:e=t==="["||t==="("||t==="{"||t==="+"||t==="-"||t==="!"||t==="~"||t==="++"||t==="--"||t==="/"||t==="/=";break;case 4:e=t==="class"||t==="delete"||t==="function"||t==="let"||t==="new"||t==="super"||t==="this"||t==="typeof"||t==="void"||t==="yield";break;default:break}return e};Parser.prototype.parseYieldExpression=function(){var e=this.createNode();this.expectKeyword("yield");var t=null;var i=false;if(!this.hasLineTerminator){var r=this.context.allowYield;this.context.allowYield=false;i=this.match("*");if(i){this.nextToken();t=this.parseAssignmentExpression()}else if(this.isStartOfExpression()){t=this.parseAssignmentExpression()}this.context.allowYield=r}return this.finalize(e,new a.YieldExpression(t,i))};Parser.prototype.parseClassElement=function(e){var t=this.lookahead;var i=this.createNode();var r="";var s=null;var o=null;var u=false;var h=false;var c=false;var l=false;if(this.match("*")){this.nextToken()}else{u=this.match("[");s=this.parseObjectPropertyKey();var p=s;if(p.name==="static"&&(this.qualifiedPropertyName(this.lookahead)||this.match("*"))){t=this.lookahead;c=true;u=this.match("[");if(this.match("*")){this.nextToken()}else{s=this.parseObjectPropertyKey()}}if(t.type===3&&!this.hasLineTerminator&&t.value==="async"){var f=this.lookahead.value;if(f!==":"&&f!=="("&&f!=="*"){l=true;t=this.lookahead;s=this.parseObjectPropertyKey();if(t.type===3&&t.value==="constructor"){this.tolerateUnexpectedToken(t,n.Messages.ConstructorIsAsync)}}}}var d=this.qualifiedPropertyName(this.lookahead);if(t.type===3){if(t.value==="get"&&d){r="get";u=this.match("[");s=this.parseObjectPropertyKey();this.context.allowYield=false;o=this.parseGetterMethod()}else if(t.value==="set"&&d){r="set";u=this.match("[");s=this.parseObjectPropertyKey();o=this.parseSetterMethod()}}else if(t.type===7&&t.value==="*"&&d){r="init";u=this.match("[");s=this.parseObjectPropertyKey();o=this.parseGeneratorMethod();h=true}if(!r&&s&&this.match("(")){r="init";o=l?this.parsePropertyMethodAsyncFunction():this.parsePropertyMethodFunction();h=true}if(!r){this.throwUnexpectedToken(this.lookahead)}if(r==="init"){r="method"}if(!u){if(c&&this.isPropertyKey(s,"prototype")){this.throwUnexpectedToken(t,n.Messages.StaticPrototype)}if(!c&&this.isPropertyKey(s,"constructor")){if(r!=="method"||!h||o&&o.generator){this.throwUnexpectedToken(t,n.Messages.ConstructorSpecialMethod)}if(e.value){this.throwUnexpectedToken(t,n.Messages.DuplicateConstructor)}else{e.value=true}r="constructor"}}return this.finalize(i,new a.MethodDefinition(s,u,o,r,c))};Parser.prototype.parseClassElementList=function(){var e=[];var t={value:false};this.expect("{");while(!this.match("}")){if(this.match(";")){this.nextToken()}else{e.push(this.parseClassElement(t))}}this.expect("}");return e};Parser.prototype.parseClassBody=function(){var e=this.createNode();var t=this.parseClassElementList();return this.finalize(e,new a.ClassBody(t))};Parser.prototype.parseClassDeclaration=function(e){var t=this.createNode();var i=this.context.strict;this.context.strict=true;this.expectKeyword("class");var r=e&&this.lookahead.type!==3?null:this.parseVariableIdentifier();var s=null;if(this.matchKeyword("extends")){this.nextToken();s=this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall)}var n=this.parseClassBody();this.context.strict=i;return this.finalize(t,new a.ClassDeclaration(r,s,n))};Parser.prototype.parseClassExpression=function(){var e=this.createNode();var t=this.context.strict;this.context.strict=true;this.expectKeyword("class");var i=this.lookahead.type===3?this.parseVariableIdentifier():null;var r=null;if(this.matchKeyword("extends")){this.nextToken();r=this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall)}var s=this.parseClassBody();this.context.strict=t;return this.finalize(e,new a.ClassExpression(i,r,s))};Parser.prototype.parseModule=function(){this.context.strict=true;this.context.isModule=true;this.scanner.isModule=true;var e=this.createNode();var t=this.parseDirectivePrologues();while(this.lookahead.type!==2){t.push(this.parseStatementListItem())}return this.finalize(e,new a.Module(t))};Parser.prototype.parseScript=function(){var e=this.createNode();var t=this.parseDirectivePrologues();while(this.lookahead.type!==2){t.push(this.parseStatementListItem())}return this.finalize(e,new a.Script(t))};Parser.prototype.parseModuleSpecifier=function(){var e=this.createNode();if(this.lookahead.type!==8){this.throwError(n.Messages.InvalidModuleSpecifier)}var t=this.nextToken();var i=this.getTokenRaw(t);return this.finalize(e,new a.Literal(t.value,i))};Parser.prototype.parseImportSpecifier=function(){var e=this.createNode();var t;var i;if(this.lookahead.type===3){t=this.parseVariableIdentifier();i=t;if(this.matchContextualKeyword("as")){this.nextToken();i=this.parseVariableIdentifier()}}else{t=this.parseIdentifierName();i=t;if(this.matchContextualKeyword("as")){this.nextToken();i=this.parseVariableIdentifier()}else{this.throwUnexpectedToken(this.nextToken())}}return this.finalize(e,new a.ImportSpecifier(i,t))};Parser.prototype.parseNamedImports=function(){this.expect("{");var e=[];while(!this.match("}")){e.push(this.parseImportSpecifier());if(!this.match("}")){this.expect(",")}}this.expect("}");return e};Parser.prototype.parseImportDefaultSpecifier=function(){var e=this.createNode();var t=this.parseIdentifierName();return this.finalize(e,new a.ImportDefaultSpecifier(t))};Parser.prototype.parseImportNamespaceSpecifier=function(){var e=this.createNode();this.expect("*");if(!this.matchContextualKeyword("as")){this.throwError(n.Messages.NoAsAfterImportNamespace)}this.nextToken();var t=this.parseIdentifierName();return this.finalize(e,new a.ImportNamespaceSpecifier(t))};Parser.prototype.parseImportDeclaration=function(){if(this.context.inFunctionBody){this.throwError(n.Messages.IllegalImportDeclaration)}var e=this.createNode();this.expectKeyword("import");var t;var i=[];if(this.lookahead.type===8){t=this.parseModuleSpecifier()}else{if(this.match("{")){i=i.concat(this.parseNamedImports())}else if(this.match("*")){i.push(this.parseImportNamespaceSpecifier())}else if(this.isIdentifierName(this.lookahead)&&!this.matchKeyword("default")){i.push(this.parseImportDefaultSpecifier());if(this.match(",")){this.nextToken();if(this.match("*")){i.push(this.parseImportNamespaceSpecifier())}else if(this.match("{")){i=i.concat(this.parseNamedImports())}else{this.throwUnexpectedToken(this.lookahead)}}}else{this.throwUnexpectedToken(this.nextToken())}if(!this.matchContextualKeyword("from")){var r=this.lookahead.value?n.Messages.UnexpectedToken:n.Messages.MissingFromClause;this.throwError(r,this.lookahead.value)}this.nextToken();t=this.parseModuleSpecifier()}this.consumeSemicolon();return this.finalize(e,new a.ImportDeclaration(i,t))};Parser.prototype.parseExportSpecifier=function(){var e=this.createNode();var t=this.parseIdentifierName();var i=t;if(this.matchContextualKeyword("as")){this.nextToken();i=this.parseIdentifierName()}return this.finalize(e,new a.ExportSpecifier(t,i))};Parser.prototype.parseExportDeclaration=function(){if(this.context.inFunctionBody){this.throwError(n.Messages.IllegalExportDeclaration)}var e=this.createNode();this.expectKeyword("export");var t;if(this.matchKeyword("default")){this.nextToken();if(this.matchKeyword("function")){var i=this.parseFunctionDeclaration(true);t=this.finalize(e,new a.ExportDefaultDeclaration(i))}else if(this.matchKeyword("class")){var i=this.parseClassDeclaration(true);t=this.finalize(e,new a.ExportDefaultDeclaration(i))}else if(this.matchContextualKeyword("async")){var i=this.matchAsyncFunction()?this.parseFunctionDeclaration(true):this.parseAssignmentExpression();t=this.finalize(e,new a.ExportDefaultDeclaration(i))}else{if(this.matchContextualKeyword("from")){this.throwError(n.Messages.UnexpectedToken,this.lookahead.value)}var i=this.match("{")?this.parseObjectInitializer():this.match("[")?this.parseArrayInitializer():this.parseAssignmentExpression();this.consumeSemicolon();t=this.finalize(e,new a.ExportDefaultDeclaration(i))}}else if(this.match("*")){this.nextToken();if(!this.matchContextualKeyword("from")){var r=this.lookahead.value?n.Messages.UnexpectedToken:n.Messages.MissingFromClause;this.throwError(r,this.lookahead.value)}this.nextToken();var s=this.parseModuleSpecifier();this.consumeSemicolon();t=this.finalize(e,new a.ExportAllDeclaration(s))}else if(this.lookahead.type===4){var i=void 0;switch(this.lookahead.value){case"let":case"const":i=this.parseLexicalDeclaration({inFor:false});break;case"var":case"class":case"function":i=this.parseStatementListItem();break;default:this.throwUnexpectedToken(this.lookahead)}t=this.finalize(e,new a.ExportNamedDeclaration(i,[],null))}else if(this.matchAsyncFunction()){var i=this.parseFunctionDeclaration();t=this.finalize(e,new a.ExportNamedDeclaration(i,[],null))}else{var o=[];var u=null;var h=false;this.expect("{");while(!this.match("}")){h=h||this.matchKeyword("default");o.push(this.parseExportSpecifier());if(!this.match("}")){this.expect(",")}}this.expect("}");if(this.matchContextualKeyword("from")){this.nextToken();u=this.parseModuleSpecifier();this.consumeSemicolon()}else if(h){var r=this.lookahead.value?n.Messages.UnexpectedToken:n.Messages.MissingFromClause;this.throwError(r,this.lookahead.value)}else{this.consumeSemicolon()}t=this.finalize(e,new a.ExportNamedDeclaration(null,o,u))}return t};return Parser}();t.Parser=l},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:true});function assert(e,t){if(!e){throw new Error("ASSERT: "+t)}}t.assert=assert},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:true});var i=function(){function ErrorHandler(){this.errors=[];this.tolerant=false}ErrorHandler.prototype.recordError=function(e){this.errors.push(e)};ErrorHandler.prototype.tolerate=function(e){if(this.tolerant){this.recordError(e)}else{throw e}};ErrorHandler.prototype.constructError=function(e,t){var i=new Error(e);try{throw i}catch(e){if(Object.create&&Object.defineProperty){i=Object.create(e);Object.defineProperty(i,"column",{value:t})}}return i};ErrorHandler.prototype.createError=function(e,t,i,r){var s="Line "+t+": "+r;var n=this.constructError(s,i);n.index=e;n.lineNumber=t;n.description=r;return n};ErrorHandler.prototype.throwError=function(e,t,i,r){throw this.createError(e,t,i,r)};ErrorHandler.prototype.tolerateError=function(e,t,i,r){var s=this.createError(e,t,i,r);if(this.tolerant){this.recordError(s)}else{throw s}};return ErrorHandler}();t.ErrorHandler=i},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:true});t.Messages={BadGetterArity:"Getter must not have any formal parameters",BadSetterArity:"Setter must have exactly one formal parameter",BadSetterRestParameter:"Setter function argument must not be a rest parameter",ConstructorIsAsync:"Class constructor may not be an async method",ConstructorSpecialMethod:"Class constructor may not be an accessor",DeclarationMissingInitializer:"Missing initializer in %0 declaration",DefaultRestParameter:"Unexpected token =",DuplicateBinding:"Duplicate binding %0",DuplicateConstructor:"A class may only have one constructor",DuplicateProtoProperty:"Duplicate __proto__ fields are not allowed in object literals",ForInOfLoopInitializer:"%0 loop variable declaration may not have an initializer",GeneratorInLegacyContext:"Generator declarations are not allowed in legacy contexts",IllegalBreak:"Illegal break statement",IllegalContinue:"Illegal continue statement",IllegalExportDeclaration:"Unexpected token",IllegalImportDeclaration:"Unexpected token",IllegalLanguageModeDirective:"Illegal 'use strict' directive in function with non-simple parameter list",IllegalReturn:"Illegal return statement",InvalidEscapedReservedWord:"Keyword must not contain escaped characters",InvalidHexEscapeSequence:"Invalid hexadecimal escape sequence",InvalidLHSInAssignment:"Invalid left-hand side in assignment",InvalidLHSInForIn:"Invalid left-hand side in for-in",InvalidLHSInForLoop:"Invalid left-hand side in for-loop",InvalidModuleSpecifier:"Unexpected token",InvalidRegExp:"Invalid regular expression",LetInLexicalBinding:"let is disallowed as a lexically bound name",MissingFromClause:"Unexpected token",MultipleDefaultsInSwitch:"More than one default clause in switch statement",NewlineAfterThrow:"Illegal newline after throw",NoAsAfterImportNamespace:"Unexpected token",NoCatchOrFinally:"Missing catch or finally after try",ParameterAfterRestParameter:"Rest parameter must be last formal parameter",Redeclaration:"%0 '%1' has already been declared",StaticPrototype:"Classes may not have static property named prototype",StrictCatchVariable:"Catch variable may not be eval or arguments in strict mode",StrictDelete:"Delete of an unqualified identifier in strict mode.",StrictFunction:"In strict mode code, functions can only be declared at top level or inside a block",StrictFunctionName:"Function name may not be eval or arguments in strict mode",StrictLHSAssignment:"Assignment to eval or arguments is not allowed in strict mode",StrictLHSPostfix:"Postfix increment/decrement may not have eval or arguments operand in strict mode",StrictLHSPrefix:"Prefix increment/decrement may not have eval or arguments operand in strict mode",StrictModeWith:"Strict mode code may not include a with statement",StrictOctalLiteral:"Octal literals are not allowed in strict mode.",StrictParamDupe:"Strict mode function may not have duplicate parameter names",StrictParamName:"Parameter name eval or arguments is not allowed in strict mode",StrictReservedWord:"Use of future reserved word in strict mode",StrictVarName:"Variable name may not be eval or arguments in strict mode",TemplateOctalLiteral:"Octal literals are not allowed in template strings.",UnexpectedEOS:"Unexpected end of input",UnexpectedIdentifier:"Unexpected identifier",UnexpectedNumber:"Unexpected number",UnexpectedReserved:"Unexpected reserved word",UnexpectedString:"Unexpected string",UnexpectedTemplate:"Unexpected quasi %0",UnexpectedToken:"Unexpected token %0",UnexpectedTokenIllegal:"Unexpected token ILLEGAL",UnknownLabel:"Undefined label '%0'",UnterminatedRegExp:"Invalid regular expression: missing /"}},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:true});var r=i(9);var s=i(4);var n=i(11);function hexValue(e){return"0123456789abcdef".indexOf(e.toLowerCase())}function octalValue(e){return"01234567".indexOf(e)}var a=function(){function Scanner(e,t){this.source=e;this.errorHandler=t;this.trackComment=false;this.isModule=false;this.length=e.length;this.index=0;this.lineNumber=e.length>0?1:0;this.lineStart=0;this.curlyStack=[]}Scanner.prototype.saveState=function(){return{index:this.index,lineNumber:this.lineNumber,lineStart:this.lineStart}};Scanner.prototype.restoreState=function(e){this.index=e.index;this.lineNumber=e.lineNumber;this.lineStart=e.lineStart};Scanner.prototype.eof=function(){return this.index>=this.length};Scanner.prototype.throwUnexpectedToken=function(e){if(e===void 0){e=n.Messages.UnexpectedTokenIllegal}return this.errorHandler.throwError(this.index,this.lineNumber,this.index-this.lineStart+1,e)};Scanner.prototype.tolerateUnexpectedToken=function(e){if(e===void 0){e=n.Messages.UnexpectedTokenIllegal}this.errorHandler.tolerateError(this.index,this.lineNumber,this.index-this.lineStart+1,e)};Scanner.prototype.skipSingleLineComment=function(e){var t=[];var i,r;if(this.trackComment){t=[];i=this.index-e;r={start:{line:this.lineNumber,column:this.index-this.lineStart-e},end:{}}}while(!this.eof()){var n=this.source.charCodeAt(this.index);++this.index;if(s.Character.isLineTerminator(n)){if(this.trackComment){r.end={line:this.lineNumber,column:this.index-this.lineStart-1};var a={multiLine:false,slice:[i+e,this.index-1],range:[i,this.index-1],loc:r};t.push(a)}if(n===13&&this.source.charCodeAt(this.index)===10){++this.index}++this.lineNumber;this.lineStart=this.index;return t}}if(this.trackComment){r.end={line:this.lineNumber,column:this.index-this.lineStart};var a={multiLine:false,slice:[i+e,this.index],range:[i,this.index],loc:r};t.push(a)}return t};Scanner.prototype.skipMultiLineComment=function(){var e=[];var t,i;if(this.trackComment){e=[];t=this.index-2;i={start:{line:this.lineNumber,column:this.index-this.lineStart-2},end:{}}}while(!this.eof()){var r=this.source.charCodeAt(this.index);if(s.Character.isLineTerminator(r)){if(r===13&&this.source.charCodeAt(this.index+1)===10){++this.index}++this.lineNumber;++this.index;this.lineStart=this.index}else if(r===42){if(this.source.charCodeAt(this.index+1)===47){this.index+=2;if(this.trackComment){i.end={line:this.lineNumber,column:this.index-this.lineStart};var n={multiLine:true,slice:[t+2,this.index-2],range:[t,this.index],loc:i};e.push(n)}return e}++this.index}else{++this.index}}if(this.trackComment){i.end={line:this.lineNumber,column:this.index-this.lineStart};var n={multiLine:true,slice:[t+2,this.index],range:[t,this.index],loc:i};e.push(n)}this.tolerateUnexpectedToken();return e};Scanner.prototype.scanComments=function(){var e;if(this.trackComment){e=[]}var t=this.index===0;while(!this.eof()){var i=this.source.charCodeAt(this.index);if(s.Character.isWhiteSpace(i)){++this.index}else if(s.Character.isLineTerminator(i)){++this.index;if(i===13&&this.source.charCodeAt(this.index)===10){++this.index}++this.lineNumber;this.lineStart=this.index;t=true}else if(i===47){i=this.source.charCodeAt(this.index+1);if(i===47){this.index+=2;var r=this.skipSingleLineComment(2);if(this.trackComment){e=e.concat(r)}t=true}else if(i===42){this.index+=2;var r=this.skipMultiLineComment();if(this.trackComment){e=e.concat(r)}}else{break}}else if(t&&i===45){if(this.source.charCodeAt(this.index+1)===45&&this.source.charCodeAt(this.index+2)===62){this.index+=3;var r=this.skipSingleLineComment(3);if(this.trackComment){e=e.concat(r)}}else{break}}else if(i===60&&!this.isModule){if(this.source.slice(this.index+1,this.index+4)==="!--"){this.index+=4;var r=this.skipSingleLineComment(4);if(this.trackComment){e=e.concat(r)}}else{break}}else{break}}return e};Scanner.prototype.isFutureReservedWord=function(e){switch(e){case"enum":case"export":case"import":case"super":return true;default:return false}};Scanner.prototype.isStrictModeReservedWord=function(e){switch(e){case"implements":case"interface":case"package":case"private":case"protected":case"public":case"static":case"yield":case"let":return true;default:return false}};Scanner.prototype.isRestrictedWord=function(e){return e==="eval"||e==="arguments"};Scanner.prototype.isKeyword=function(e){switch(e.length){case 2:return e==="if"||e==="in"||e==="do";case 3:return e==="var"||e==="for"||e==="new"||e==="try"||e==="let";case 4:return e==="this"||e==="else"||e==="case"||e==="void"||e==="with"||e==="enum";case 5:return e==="while"||e==="break"||e==="catch"||e==="throw"||e==="const"||e==="yield"||e==="class"||e==="super";case 6:return e==="return"||e==="typeof"||e==="delete"||e==="switch"||e==="export"||e==="import";case 7:return e==="default"||e==="finally"||e==="extends";case 8:return e==="function"||e==="continue"||e==="debugger";case 10:return e==="instanceof";default:return false}};Scanner.prototype.codePointAt=function(e){var t=this.source.charCodeAt(e);if(t>=55296&&t<=56319){var i=this.source.charCodeAt(e+1);if(i>=56320&&i<=57343){var r=t;t=(r-55296)*1024+i-56320+65536}}return t};Scanner.prototype.scanHexEscape=function(e){var t=e==="u"?4:2;var i=0;for(var r=0;r1114111||e!=="}"){this.throwUnexpectedToken()}return s.Character.fromCodePoint(t)};Scanner.prototype.getIdentifier=function(){var e=this.index++;while(!this.eof()){var t=this.source.charCodeAt(this.index);if(t===92){this.index=e;return this.getComplexIdentifier()}else if(t>=55296&&t<57343){this.index=e;return this.getComplexIdentifier()}if(s.Character.isIdentifierPart(t)){++this.index}else{break}}return this.source.slice(e,this.index)};Scanner.prototype.getComplexIdentifier=function(){var e=this.codePointAt(this.index);var t=s.Character.fromCodePoint(e);this.index+=t.length;var i;if(e===92){if(this.source.charCodeAt(this.index)!==117){this.throwUnexpectedToken()}++this.index;if(this.source[this.index]==="{"){++this.index;i=this.scanUnicodeCodePointEscape()}else{i=this.scanHexEscape("u");if(i===null||i==="\\"||!s.Character.isIdentifierStart(i.charCodeAt(0))){this.throwUnexpectedToken()}}t=i}while(!this.eof()){e=this.codePointAt(this.index);if(!s.Character.isIdentifierPart(e)){break}i=s.Character.fromCodePoint(e);t+=i;this.index+=i.length;if(e===92){t=t.substr(0,t.length-1);if(this.source.charCodeAt(this.index)!==117){this.throwUnexpectedToken()}++this.index;if(this.source[this.index]==="{"){++this.index;i=this.scanUnicodeCodePointEscape()}else{i=this.scanHexEscape("u");if(i===null||i==="\\"||!s.Character.isIdentifierPart(i.charCodeAt(0))){this.throwUnexpectedToken()}}t+=i}}return t};Scanner.prototype.octalToDecimal=function(e){var t=e!=="0";var i=octalValue(e);if(!this.eof()&&s.Character.isOctalDigit(this.source.charCodeAt(this.index))){t=true;i=i*8+octalValue(this.source[this.index++]);if("0123".indexOf(e)>=0&&!this.eof()&&s.Character.isOctalDigit(this.source.charCodeAt(this.index))){i=i*8+octalValue(this.source[this.index++])}}return{code:i,octal:t}};Scanner.prototype.scanIdentifier=function(){var e;var t=this.index;var i=this.source.charCodeAt(t)===92?this.getComplexIdentifier():this.getIdentifier();if(i.length===1){e=3}else if(this.isKeyword(i)){e=4}else if(i==="null"){e=5}else if(i==="true"||i==="false"){e=1}else{e=3}if(e!==3&&t+i.length!==this.index){var r=this.index;this.index=t;this.tolerateUnexpectedToken(n.Messages.InvalidEscapedReservedWord);this.index=r}return{type:e,value:i,lineNumber:this.lineNumber,lineStart:this.lineStart,start:t,end:this.index}};Scanner.prototype.scanPunctuator=function(){var e=this.index;var t=this.source[this.index];switch(t){case"(":case"{":if(t==="{"){this.curlyStack.push("{")}++this.index;break;case".":++this.index;if(this.source[this.index]==="."&&this.source[this.index+1]==="."){this.index+=2;t="..."}break;case"}":++this.index;this.curlyStack.pop();break;case")":case";":case",":case"[":case"]":case":":case"?":case"~":++this.index;break;default:t=this.source.substr(this.index,4);if(t===">>>="){this.index+=4}else{t=t.substr(0,3);if(t==="==="||t==="!=="||t===">>>"||t==="<<="||t===">>="||t==="**="){this.index+=3}else{t=t.substr(0,2);if(t==="&&"||t==="||"||t==="=="||t==="!="||t==="+="||t==="-="||t==="*="||t==="/="||t==="++"||t==="--"||t==="<<"||t===">>"||t==="&="||t==="|="||t==="^="||t==="%="||t==="<="||t===">="||t==="=>"||t==="**"){this.index+=2}else{t=this.source[this.index];if("<>=!+-*%&|^/".indexOf(t)>=0){++this.index}}}}}if(this.index===e){this.throwUnexpectedToken()}return{type:7,value:t,lineNumber:this.lineNumber,lineStart:this.lineStart,start:e,end:this.index}};Scanner.prototype.scanHexLiteral=function(e){var t="";while(!this.eof()){if(!s.Character.isHexDigit(this.source.charCodeAt(this.index))){break}t+=this.source[this.index++]}if(t.length===0){this.throwUnexpectedToken()}if(s.Character.isIdentifierStart(this.source.charCodeAt(this.index))){this.throwUnexpectedToken()}return{type:6,value:parseInt("0x"+t,16),lineNumber:this.lineNumber,lineStart:this.lineStart,start:e,end:this.index}};Scanner.prototype.scanBinaryLiteral=function(e){var t="";var i;while(!this.eof()){i=this.source[this.index];if(i!=="0"&&i!=="1"){break}t+=this.source[this.index++]}if(t.length===0){this.throwUnexpectedToken()}if(!this.eof()){i=this.source.charCodeAt(this.index);if(s.Character.isIdentifierStart(i)||s.Character.isDecimalDigit(i)){this.throwUnexpectedToken()}}return{type:6,value:parseInt(t,2),lineNumber:this.lineNumber,lineStart:this.lineStart,start:e,end:this.index}};Scanner.prototype.scanOctalLiteral=function(e,t){var i="";var r=false;if(s.Character.isOctalDigit(e.charCodeAt(0))){r=true;i="0"+this.source[this.index++]}else{++this.index}while(!this.eof()){if(!s.Character.isOctalDigit(this.source.charCodeAt(this.index))){break}i+=this.source[this.index++]}if(!r&&i.length===0){this.throwUnexpectedToken()}if(s.Character.isIdentifierStart(this.source.charCodeAt(this.index))||s.Character.isDecimalDigit(this.source.charCodeAt(this.index))){this.throwUnexpectedToken()}return{type:6,value:parseInt(i,8),octal:r,lineNumber:this.lineNumber,lineStart:this.lineStart,start:t,end:this.index}};Scanner.prototype.isImplicitOctalLiteral=function(){for(var e=this.index+1;e=0){r=r.replace(/\\u\{([0-9a-fA-F]+)\}|\\u([a-fA-F0-9]{4})/g,(function(e,t,r){var a=parseInt(t||r,16);if(a>1114111){s.throwUnexpectedToken(n.Messages.InvalidRegExp)}if(a<=65535){return String.fromCharCode(a)}return i})).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,i)}try{RegExp(r)}catch(e){this.throwUnexpectedToken(n.Messages.InvalidRegExp)}try{return new RegExp(e,t)}catch(e){return null}};Scanner.prototype.scanRegExpBody=function(){var e=this.source[this.index];r.assert(e==="/","Regular expression literal must start with a slash");var t=this.source[this.index++];var i=false;var a=false;while(!this.eof()){e=this.source[this.index++];t+=e;if(e==="\\"){e=this.source[this.index++];if(s.Character.isLineTerminator(e.charCodeAt(0))){this.throwUnexpectedToken(n.Messages.UnterminatedRegExp)}t+=e}else if(s.Character.isLineTerminator(e.charCodeAt(0))){this.throwUnexpectedToken(n.Messages.UnterminatedRegExp)}else if(i){if(e==="]"){i=false}}else{if(e==="/"){a=true;break}else if(e==="["){i=true}}}if(!a){this.throwUnexpectedToken(n.Messages.UnterminatedRegExp)}return t.substr(1,t.length-2)};Scanner.prototype.scanRegExpFlags=function(){var e="";var t="";while(!this.eof()){var i=this.source[this.index];if(!s.Character.isIdentifierPart(i.charCodeAt(0))){break}++this.index;if(i==="\\"&&!this.eof()){i=this.source[this.index];if(i==="u"){++this.index;var r=this.index;var n=this.scanHexEscape("u");if(n!==null){t+=n;for(e+="\\u";r=55296&&e<57343){if(s.Character.isIdentifierStart(this.codePointAt(this.index))){return this.scanIdentifier()}}return this.scanPunctuator()};return Scanner}();t.Scanner=a},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:true});t.TokenName={};t.TokenName[1]="Boolean";t.TokenName[2]="";t.TokenName[3]="Identifier";t.TokenName[4]="Keyword";t.TokenName[5]="Null";t.TokenName[6]="Numeric";t.TokenName[7]="Punctuator";t.TokenName[8]="String";t.TokenName[9]="RegularExpression";t.TokenName[10]="Template"},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:true});t.XHTMLEntities={quot:'"',amp:"&",apos:"'",gt:">",nbsp:" ",iexcl:"¡",cent:"¢",pound:"£",curren:"¤",yen:"¥",brvbar:"¦",sect:"§",uml:"¨",copy:"©",ordf:"ª",laquo:"«",not:"¬",shy:"­",reg:"®",macr:"¯",deg:"°",plusmn:"±",sup2:"²",sup3:"³",acute:"´",micro:"µ",para:"¶",middot:"·",cedil:"¸",sup1:"¹",ordm:"º",raquo:"»",frac14:"¼",frac12:"½",frac34:"¾",iquest:"¿",Agrave:"À",Aacute:"Á",Acirc:"Â",Atilde:"Ã",Auml:"Ä",Aring:"Å",AElig:"Æ",Ccedil:"Ç",Egrave:"È",Eacute:"É",Ecirc:"Ê",Euml:"Ë",Igrave:"Ì",Iacute:"Í",Icirc:"Î",Iuml:"Ï",ETH:"Ð",Ntilde:"Ñ",Ograve:"Ò",Oacute:"Ó",Ocirc:"Ô",Otilde:"Õ",Ouml:"Ö",times:"×",Oslash:"Ø",Ugrave:"Ù",Uacute:"Ú",Ucirc:"Û",Uuml:"Ü",Yacute:"Ý",THORN:"Þ",szlig:"ß",agrave:"à",aacute:"á",acirc:"â",atilde:"ã",auml:"ä",aring:"å",aelig:"æ",ccedil:"ç",egrave:"è",eacute:"é",ecirc:"ê",euml:"ë",igrave:"ì",iacute:"í",icirc:"î",iuml:"ï",eth:"ð",ntilde:"ñ",ograve:"ò",oacute:"ó",ocirc:"ô",otilde:"õ",ouml:"ö",divide:"÷",oslash:"ø",ugrave:"ù",uacute:"ú",ucirc:"û",uuml:"ü",yacute:"ý",thorn:"þ",yuml:"ÿ",OElig:"Œ",oelig:"œ",Scaron:"Š",scaron:"š",Yuml:"Ÿ",fnof:"ƒ",circ:"ˆ",tilde:"˜",Alpha:"Α",Beta:"Β",Gamma:"Γ",Delta:"Δ",Epsilon:"Ε",Zeta:"Ζ",Eta:"Η",Theta:"Θ",Iota:"Ι",Kappa:"Κ",Lambda:"Λ",Mu:"Μ",Nu:"Ν",Xi:"Ξ",Omicron:"Ο",Pi:"Π",Rho:"Ρ",Sigma:"Σ",Tau:"Τ",Upsilon:"Υ",Phi:"Φ",Chi:"Χ",Psi:"Ψ",Omega:"Ω",alpha:"α",beta:"β",gamma:"γ",delta:"δ",epsilon:"ε",zeta:"ζ",eta:"η",theta:"θ",iota:"ι",kappa:"κ",lambda:"λ",mu:"μ",nu:"ν",xi:"ξ",omicron:"ο",pi:"π",rho:"ρ",sigmaf:"ς",sigma:"σ",tau:"τ",upsilon:"υ",phi:"φ",chi:"χ",psi:"ψ",omega:"ω",thetasym:"ϑ",upsih:"ϒ",piv:"ϖ",ensp:" ",emsp:" ",thinsp:" ",zwnj:"‌",zwj:"‍",lrm:"‎",rlm:"‏",ndash:"–",mdash:"—",lsquo:"‘",rsquo:"’",sbquo:"‚",ldquo:"“",rdquo:"”",bdquo:"„",dagger:"†",Dagger:"‡",bull:"•",hellip:"…",permil:"‰",prime:"′",Prime:"″",lsaquo:"‹",rsaquo:"›",oline:"‾",frasl:"⁄",euro:"€",image:"ℑ",weierp:"℘",real:"ℜ",trade:"™",alefsym:"ℵ",larr:"←",uarr:"↑",rarr:"→",darr:"↓",harr:"↔",crarr:"↵",lArr:"⇐",uArr:"⇑",rArr:"⇒",dArr:"⇓",hArr:"⇔",forall:"∀",part:"∂",exist:"∃",empty:"∅",nabla:"∇",isin:"∈",notin:"∉",ni:"∋",prod:"∏",sum:"∑",minus:"−",lowast:"∗",radic:"√",prop:"∝",infin:"∞",ang:"∠",and:"∧",or:"∨",cap:"∩",cup:"∪",int:"∫",there4:"∴",sim:"∼",cong:"≅",asymp:"≈",ne:"≠",equiv:"≡",le:"≤",ge:"≥",sub:"⊂",sup:"⊃",nsub:"⊄",sube:"⊆",supe:"⊇",oplus:"⊕",otimes:"⊗",perp:"⊥",sdot:"⋅",lceil:"⌈",rceil:"⌉",lfloor:"⌊",rfloor:"⌋",loz:"◊",spades:"♠",clubs:"♣",hearts:"♥",diams:"♦",lang:"⟨",rang:"⟩"}},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:true});var r=i(10);var s=i(12);var n=i(13);var a=function(){function Reader(){this.values=[];this.curly=this.paren=-1}Reader.prototype.beforeFunctionExpression=function(e){return["(","{","[","in","typeof","instanceof","new","return","case","delete","throw","void","=","+=","-=","*=","**=","/=","%=","<<=",">>=",">>>=","&=","|=","^=",",","+","-","*","**","/","%","++","--","<<",">>",">>>","&","|","^","!","~","&&","||","?",":","===","==",">=","<=","<",">","!=","!=="].indexOf(e)>=0};Reader.prototype.isRegexStart=function(){var e=this.values[this.values.length-1];var t=e!==null;switch(e){case"this":case"]":t=false;break;case")":var i=this.values[this.paren-1];t=i==="if"||i==="while"||i==="for"||i==="with";break;case"}":t=false;if(this.values[this.curly-3]==="function"){var r=this.values[this.curly-4];t=r?!this.beforeFunctionExpression(r):false}else if(this.values[this.curly-4]==="function"){var r=this.values[this.curly-5];t=r?!this.beforeFunctionExpression(r):true}break;default:break}return t};Reader.prototype.push=function(e){if(e.type===7||e.type===4){if(e.value==="{"){this.curly=this.values.length}else if(e.value==="("){this.paren=this.values.length}this.values.push(e.value)}else{this.values.push(null)}};return Reader}();var o=function(){function Tokenizer(e,t){this.errorHandler=new r.ErrorHandler;this.errorHandler.tolerant=t?typeof t.tolerant==="boolean"&&t.tolerant:false;this.scanner=new s.Scanner(e,this.errorHandler);this.scanner.trackComment=t?typeof t.comment==="boolean"&&t.comment:false;this.trackRange=t?typeof t.range==="boolean"&&t.range:false;this.trackLoc=t?typeof t.loc==="boolean"&&t.loc:false;this.buffer=[];this.reader=new a}Tokenizer.prototype.errors=function(){return this.errorHandler.errors};Tokenizer.prototype.getNextToken=function(){if(this.buffer.length===0){var e=this.scanner.scanComments();if(this.scanner.trackComment){for(var t=0;t{"use strict";const t=Object.prototype.hasOwnProperty;e.exports=(e,i)=>t.call(e,i)},710:e=>{"use strict"; +/*! + * repeat-string + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */var t="";var i;e.exports=repeat;function repeat(e,r){if(typeof e!=="string"){throw new TypeError("expected a string")}if(r===1)return e;if(r===2)return e+e;var s=e.length*r;if(i!==e||typeof i==="undefined"){i=e;t=""}else if(t.length>=s){return t.substr(0,s)}while(s>t.length&&r>1){if(r&1){t+=e}r>>=1;e+=e}t+=e;t=t.substr(0,s);return t}}};var t={};function __nccwpck_require__(i){var r=t[i];if(r!==undefined){return r.exports}var s=t[i]={exports:{}};var n=true;try{e[i].call(s.exports,s,s.exports,__nccwpck_require__);n=false}finally{if(n)delete t[i]}return s.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var i=__nccwpck_require__(256);module.exports=i})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/comment-json/package.json b/build/node_modules/next/dist/compiled/comment-json/package.json new file mode 100644 index 0000000..8c86313 --- /dev/null +++ b/build/node_modules/next/dist/compiled/comment-json/package.json @@ -0,0 +1 @@ +{"name":"comment-json","main":"index.js","author":"kaelzhang","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/compression/index.js b/build/node_modules/next/dist/compiled/compression/index.js new file mode 100644 index 0000000..3c8f2b5 --- /dev/null +++ b/build/node_modules/next/dist/compiled/compression/index.js @@ -0,0 +1,58 @@ +(()=>{var a={909:(a,e,i)=>{"use strict"; +/*! + * accepts + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */var n=i(995);var s=i(759);a.exports=Accepts;function Accepts(a){if(!(this instanceof Accepts)){return new Accepts(a)}this.headers=a.headers;this.negotiator=new n(a)}Accepts.prototype.type=Accepts.prototype.types=function(a){var e=a;if(e&&!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;i{"use strict"; +/*! + * compressible + * Copyright(c) 2013 Jonathan Ong + * Copyright(c) 2014 Jeremiah Senkpiel + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */var n=i(183);var s=/^text\/|\+(?:json|text|xml)$/i;var o=/^\s*([^;\s]*)(?:;|\s|$)/;a.exports=compressible;function compressible(a){if(!a||typeof a!=="string"){return false}var e=o.exec(a);var i=e&&e[1].toLowerCase();var c=n[i];if(c&&c.compressible!==undefined){return c.compressible}return s.test(i)||undefined}},756:(a,e,i)=>{"use strict"; +/*! + * compression + * Copyright(c) 2010 Sencha Inc. + * Copyright(c) 2011 TJ Holowaychuk + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */var n=i(909);var s=i(291).Buffer;var o=i(666);var c=i(876);var p=i(937)("compression");var t=i(849);var r=i(850);var l=i(796);a.exports=compression;a.exports.filter=shouldCompress;var u=/(?:^|,)\s*?no-transform\s*?(?:,|$)/;function compression(a){var e=a||{};var i=e.filter||shouldCompress;var s=o.parse(e.threshold);if(s==null){s=1024}return function compression(a,o,c){var u=false;var m;var d=[];var x;var v=o.end;var f=o.on;var b=o.write;o.flush=function flush(){if(x){x.flush()}};o.write=function write(a,e){if(u){return false}if(!this._header){this._implicitHeader()}return x?x.write(toBuffer(a,e)):b.call(this,a,e)};o.end=function end(a,e){if(u){return false}if(!this._header){if(!this.getHeader("Content-Length")){m=chunkLength(a,e)}this._implicitHeader()}if(!x){return v.call(this,a,e)}u=true;return a?x.end(toBuffer(a,e)):x.end()};o.on=function on(a,e){if(!d||a!=="drain"){return f.call(this,a,e)}if(x){return x.on(a,e)}d.push([a,e]);return this};function nocompress(a){p("no compression: %s",a);addListeners(o,f,d);d=null}t(o,(function onResponseHeaders(){if(!i(a,o)){nocompress("filtered");return}if(!shouldTransform(a,o)){nocompress("no transform");return}r(o,"Accept-Encoding");if(Number(o.getHeader("Content-Length")){ +/*! + * mime-db + * Copyright(c) 2014 Jonathan Ong + * MIT Licensed + */ +a.exports=i(282)},734:(a,e,i)=>{ +/*! + * mime-db + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015-2022 Douglas Christopher Wilson + * MIT Licensed + */ +a.exports=i(450)},759:(a,e,i)=>{"use strict"; +/*! + * mime-types + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */var n=i(734);var s=i(17).extname;var o=/^\s*([^;\s]*)(?:;|\s|$)/;var c=/^text\//i;e.charset=charset;e.charsets={lookup:charset};e.contentType=contentType;e.extension=extension;e.extensions=Object.create(null);e.lookup=lookup;e.types=Object.create(null);populateMaps(e.extensions,e.types);function charset(a){if(!a||typeof a!=="string"){return false}var e=o.exec(a);var i=e&&n[e[1].toLowerCase()];if(i&&i.charset){return i.charset}if(e&&c.test(e[1])){return"UTF-8"}return false}function contentType(a){if(!a||typeof a!=="string"){return false}var i=a.indexOf("/")===-1?e.lookup(a):a;if(!i){return false}if(i.indexOf("charset")===-1){var n=e.charset(i);if(n)i+="; charset="+n.toLowerCase()}return i}function extension(a){if(!a||typeof a!=="string"){return false}var i=o.exec(a);var n=i&&e.extensions[i[1].toLowerCase()];if(!n||!n.length){return false}return n[0]}function lookup(a){if(!a||typeof a!=="string"){return false}var i=s("x."+a).toLowerCase().substr(1);if(!i){return false}return e.types[i]||false}function populateMaps(a,e){var i=["nginx","apache",undefined,"iana"];Object.keys(n).forEach((function forEachMimeType(s){var o=n[s];var c=o.extensions;if(!c||!c.length){return}a[s]=c;for(var p=0;pl||r===l&&e[t].substr(0,12)==="application/")){continue}}e[t]=s}}))}},995:(a,e,i)=>{"use strict"; +/*! + * negotiator + * Copyright(c) 2012 Federico Romero + * Copyright(c) 2012-2014 Isaac Z. Schlueter + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */var n=Object.create(null);a.exports=Negotiator;a.exports.Negotiator=Negotiator;function Negotiator(a){if(!(this instanceof Negotiator)){return new Negotiator(a)}this.request=a}Negotiator.prototype.charset=function charset(a){var e=this.charsets(a);return e&&e[0]};Negotiator.prototype.charsets=function charsets(a){var e=loadModule("charset").preferredCharsets;return e(this.request.headers["accept-charset"],a)};Negotiator.prototype.encoding=function encoding(a){var e=this.encodings(a);return e&&e[0]};Negotiator.prototype.encodings=function encodings(a){var e=loadModule("encoding").preferredEncodings;return e(this.request.headers["accept-encoding"],a)};Negotiator.prototype.language=function language(a){var e=this.languages(a);return e&&e[0]};Negotiator.prototype.languages=function languages(a){var e=loadModule("language").preferredLanguages;return e(this.request.headers["accept-language"],a)};Negotiator.prototype.mediaType=function mediaType(a){var e=this.mediaTypes(a);return e&&e[0]};Negotiator.prototype.mediaTypes=function mediaTypes(a){var e=loadModule("mediaType").preferredMediaTypes;return e(this.request.headers.accept,a)};Negotiator.prototype.preferredCharset=Negotiator.prototype.charset;Negotiator.prototype.preferredCharsets=Negotiator.prototype.charsets;Negotiator.prototype.preferredEncoding=Negotiator.prototype.encoding;Negotiator.prototype.preferredEncodings=Negotiator.prototype.encodings;Negotiator.prototype.preferredLanguage=Negotiator.prototype.language;Negotiator.prototype.preferredLanguages=Negotiator.prototype.languages;Negotiator.prototype.preferredMediaType=Negotiator.prototype.mediaType;Negotiator.prototype.preferredMediaTypes=Negotiator.prototype.mediaTypes;function loadModule(a){var e=n[a];if(e!==undefined){return e}switch(a){case"charset":e=i(324);break;case"encoding":e=i(27);break;case"language":e=i(532);break;case"mediaType":e=i(980);break;default:throw new Error("Cannot find module '"+a+"'")}n[a]=e;return e}},324:a=>{"use strict";a.exports=preferredCharsets;a.exports.preferredCharsets=preferredCharsets;var e=/^\s*([^\s;]+)\s*(?:;(.*))?$/;function parseAcceptCharset(a){var e=a.split(",");for(var i=0,n=0;i0}},27:a=>{"use strict";a.exports=preferredEncodings;a.exports.preferredEncodings=preferredEncodings;var e=/^\s*([^\s;]+)\s*(?:;(.*))?$/;function parseAcceptEncoding(a){var e=a.split(",");var i=false;var n=1;for(var s=0,o=0;s0}},532:a=>{"use strict";a.exports=preferredLanguages;a.exports.preferredLanguages=preferredLanguages;var e=/^\s*([^\s\-;]+)(?:-([^\s;]+))?\s*(?:;(.*))?$/;function parseAcceptLanguage(a){var e=a.split(",");for(var i=0,n=0;i0}},980:a=>{"use strict";a.exports=preferredMediaTypes;a.exports.preferredMediaTypes=preferredMediaTypes;var e=/^\s*([^\s\/;]+)\/([^;\s]+)\s*(?:;(.*))?$/;function parseAccept(a){var e=splitMediaTypes(a);for(var i=0,n=0;i0){if(o.every((function(a){return e.params[a]=="*"||(e.params[a]||"").toLowerCase()==(n.params[a]||"").toLowerCase()}))){s|=1}else{return null}}return{i:i,o:e.i,q:e.q,s:s}}function preferredMediaTypes(a,e){var i=parseAccept(a===undefined?"*/*":a||"");if(!e){return i.filter(isQuality).sort(compareSpecs).map(getFullType)}var n=e.map((function getPriority(a,e){return getMediaTypePriority(a,i,e)}));return n.filter(isQuality).sort(compareSpecs).map((function getType(a){return e[n.indexOf(a)]}))}function compareSpecs(a,e){return e.q-a.q||e.s-a.s||a.o-e.o||a.i-e.i||0}function getFullType(a){return a.type+"/"+a.subtype}function isQuality(a){return a.q>0}function quoteCount(a){var e=0;var i=0;while((i=a.indexOf('"',i))!==-1){e++;i++}return e}function splitKeyValuePair(a){var e=a.indexOf("=");var i;var n;if(e===-1){i=a}else{i=a.substr(0,e);n=a.substr(e+1)}return[i,n]}function splitMediaTypes(a){var e=a.split(",");for(var i=1,n=0;i{"use strict"; +/*! + * on-headers + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */a.exports=onHeaders;function createWriteHead(a,e){var i=false;return function writeHead(n){var s=setWriteHeadHeaders.apply(this,arguments);if(!i){i=true;e.call(this);if(typeof s[0]==="number"&&this.statusCode!==s[0]){s[0]=this.statusCode;s.length=1}}return a.apply(this,s)}}function onHeaders(a,e){if(!a){throw new TypeError("argument res is required")}if(typeof e!=="function"){throw new TypeError("argument listener must be a function")}a.writeHead=createWriteHead(a.writeHead,e)}function setHeadersFromArray(a,e){for(var i=0;i1&&typeof arguments[1]==="string"?2:1;var n=e>=i+1?arguments[i]:undefined;this.statusCode=a;if(Array.isArray(n)){setHeadersFromArray(this,n)}else if(n){setHeadersFromObject(this,n)}var s=new Array(Math.min(e,i));for(var o=0;o{var n=i(300);var s=n.Buffer;function copyProps(a,e){for(var i in a){e[i]=a[i]}}if(s.from&&s.alloc&&s.allocUnsafe&&s.allocUnsafeSlow){a.exports=n}else{copyProps(n,e);e.Buffer=SafeBuffer}function SafeBuffer(a,e,i){return s(a,e,i)}copyProps(s,SafeBuffer);SafeBuffer.from=function(a,e,i){if(typeof a==="number"){throw new TypeError("Argument must not be a number")}return s(a,e,i)};SafeBuffer.alloc=function(a,e,i){if(typeof a!=="number"){throw new TypeError("Argument must be a number")}var n=s(a);if(e!==undefined){if(typeof i==="string"){n.fill(e,i)}else{n.fill(e)}}else{n.fill(0)}return n};SafeBuffer.allocUnsafe=function(a){if(typeof a!=="number"){throw new TypeError("Argument must be a number")}return s(a)};SafeBuffer.allocUnsafeSlow=function(a){if(typeof a!=="number"){throw new TypeError("Argument must be a number")}return n.SlowBuffer(a)}},850:a=>{"use strict"; +/*! + * vary + * Copyright(c) 2014-2017 Douglas Christopher Wilson + * MIT Licensed + */a.exports=vary;a.exports.append=append;var e=/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/;function append(a,i){if(typeof a!=="string"){throw new TypeError("header argument is required")}if(!i){throw new TypeError("field argument is required")}var n=!Array.isArray(i)?parse(String(i)):i;for(var s=0;s{"use strict";a.exports=require("buffer")},666:a=>{"use strict";a.exports=require("next/dist/compiled/bytes")},937:a=>{"use strict";a.exports=require("next/dist/compiled/debug")},17:a=>{"use strict";a.exports=require("path")},796:a=>{"use strict";a.exports=require("zlib")},282:a=>{"use strict";a.exports=JSON.parse('{"application/1d-interleaved-parityfec":{"source":"iana"},"application/3gpdash-qoe-report+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/3gpp-ims+xml":{"source":"iana","compressible":true},"application/a2l":{"source":"iana"},"application/activemessage":{"source":"iana"},"application/activity+json":{"source":"iana","compressible":true},"application/alto-costmap+json":{"source":"iana","compressible":true},"application/alto-costmapfilter+json":{"source":"iana","compressible":true},"application/alto-directory+json":{"source":"iana","compressible":true},"application/alto-endpointcost+json":{"source":"iana","compressible":true},"application/alto-endpointcostparams+json":{"source":"iana","compressible":true},"application/alto-endpointprop+json":{"source":"iana","compressible":true},"application/alto-endpointpropparams+json":{"source":"iana","compressible":true},"application/alto-error+json":{"source":"iana","compressible":true},"application/alto-networkmap+json":{"source":"iana","compressible":true},"application/alto-networkmapfilter+json":{"source":"iana","compressible":true},"application/alto-updatestreamcontrol+json":{"source":"iana","compressible":true},"application/alto-updatestreamparams+json":{"source":"iana","compressible":true},"application/aml":{"source":"iana"},"application/andrew-inset":{"source":"iana","extensions":["ez"]},"application/applefile":{"source":"iana"},"application/applixware":{"source":"apache","extensions":["aw"]},"application/atf":{"source":"iana"},"application/atfx":{"source":"iana"},"application/atom+xml":{"source":"iana","compressible":true,"extensions":["atom"]},"application/atomcat+xml":{"source":"iana","compressible":true,"extensions":["atomcat"]},"application/atomdeleted+xml":{"source":"iana","compressible":true,"extensions":["atomdeleted"]},"application/atomicmail":{"source":"iana"},"application/atomsvc+xml":{"source":"iana","compressible":true,"extensions":["atomsvc"]},"application/atsc-dwd+xml":{"source":"iana","compressible":true,"extensions":["dwd"]},"application/atsc-dynamic-event-message":{"source":"iana"},"application/atsc-held+xml":{"source":"iana","compressible":true,"extensions":["held"]},"application/atsc-rdt+json":{"source":"iana","compressible":true},"application/atsc-rsat+xml":{"source":"iana","compressible":true,"extensions":["rsat"]},"application/atxml":{"source":"iana"},"application/auth-policy+xml":{"source":"iana","compressible":true},"application/bacnet-xdd+zip":{"source":"iana","compressible":false},"application/batch-smtp":{"source":"iana"},"application/bdoc":{"compressible":false,"extensions":["bdoc"]},"application/beep+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/calendar+json":{"source":"iana","compressible":true},"application/calendar+xml":{"source":"iana","compressible":true,"extensions":["xcs"]},"application/call-completion":{"source":"iana"},"application/cals-1840":{"source":"iana"},"application/captive+json":{"source":"iana","compressible":true},"application/cbor":{"source":"iana"},"application/cbor-seq":{"source":"iana"},"application/cccex":{"source":"iana"},"application/ccmp+xml":{"source":"iana","compressible":true},"application/ccxml+xml":{"source":"iana","compressible":true,"extensions":["ccxml"]},"application/cdfx+xml":{"source":"iana","compressible":true,"extensions":["cdfx"]},"application/cdmi-capability":{"source":"iana","extensions":["cdmia"]},"application/cdmi-container":{"source":"iana","extensions":["cdmic"]},"application/cdmi-domain":{"source":"iana","extensions":["cdmid"]},"application/cdmi-object":{"source":"iana","extensions":["cdmio"]},"application/cdmi-queue":{"source":"iana","extensions":["cdmiq"]},"application/cdni":{"source":"iana"},"application/cea":{"source":"iana"},"application/cea-2018+xml":{"source":"iana","compressible":true},"application/cellml+xml":{"source":"iana","compressible":true},"application/cfw":{"source":"iana"},"application/clr":{"source":"iana"},"application/clue+xml":{"source":"iana","compressible":true},"application/clue_info+xml":{"source":"iana","compressible":true},"application/cms":{"source":"iana"},"application/cnrp+xml":{"source":"iana","compressible":true},"application/coap-group+json":{"source":"iana","compressible":true},"application/coap-payload":{"source":"iana"},"application/commonground":{"source":"iana"},"application/conference-info+xml":{"source":"iana","compressible":true},"application/cose":{"source":"iana"},"application/cose-key":{"source":"iana"},"application/cose-key-set":{"source":"iana"},"application/cpl+xml":{"source":"iana","compressible":true},"application/csrattrs":{"source":"iana"},"application/csta+xml":{"source":"iana","compressible":true},"application/cstadata+xml":{"source":"iana","compressible":true},"application/csvm+json":{"source":"iana","compressible":true},"application/cu-seeme":{"source":"apache","extensions":["cu"]},"application/cwt":{"source":"iana"},"application/cybercash":{"source":"iana"},"application/dart":{"compressible":true},"application/dash+xml":{"source":"iana","compressible":true,"extensions":["mpd"]},"application/dashdelta":{"source":"iana"},"application/davmount+xml":{"source":"iana","compressible":true,"extensions":["davmount"]},"application/dca-rft":{"source":"iana"},"application/dcd":{"source":"iana"},"application/dec-dx":{"source":"iana"},"application/dialog-info+xml":{"source":"iana","compressible":true},"application/dicom":{"source":"iana"},"application/dicom+json":{"source":"iana","compressible":true},"application/dicom+xml":{"source":"iana","compressible":true},"application/dii":{"source":"iana"},"application/dit":{"source":"iana"},"application/dns":{"source":"iana"},"application/dns+json":{"source":"iana","compressible":true},"application/dns-message":{"source":"iana"},"application/docbook+xml":{"source":"apache","compressible":true,"extensions":["dbk"]},"application/dots+cbor":{"source":"iana"},"application/dskpp+xml":{"source":"iana","compressible":true},"application/dssc+der":{"source":"iana","extensions":["dssc"]},"application/dssc+xml":{"source":"iana","compressible":true,"extensions":["xdssc"]},"application/dvcs":{"source":"iana"},"application/ecmascript":{"source":"iana","compressible":true,"extensions":["es","ecma"]},"application/edi-consent":{"source":"iana"},"application/edi-x12":{"source":"iana","compressible":false},"application/edifact":{"source":"iana","compressible":false},"application/efi":{"source":"iana"},"application/elm+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/elm+xml":{"source":"iana","compressible":true},"application/emergencycalldata.cap+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/emergencycalldata.comment+xml":{"source":"iana","compressible":true},"application/emergencycalldata.control+xml":{"source":"iana","compressible":true},"application/emergencycalldata.deviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.ecall.msd":{"source":"iana"},"application/emergencycalldata.providerinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.serviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.subscriberinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.veds+xml":{"source":"iana","compressible":true},"application/emma+xml":{"source":"iana","compressible":true,"extensions":["emma"]},"application/emotionml+xml":{"source":"iana","compressible":true,"extensions":["emotionml"]},"application/encaprtp":{"source":"iana"},"application/epp+xml":{"source":"iana","compressible":true},"application/epub+zip":{"source":"iana","compressible":false,"extensions":["epub"]},"application/eshop":{"source":"iana"},"application/exi":{"source":"iana","extensions":["exi"]},"application/expect-ct-report+json":{"source":"iana","compressible":true},"application/fastinfoset":{"source":"iana"},"application/fastsoap":{"source":"iana"},"application/fdt+xml":{"source":"iana","compressible":true,"extensions":["fdt"]},"application/fhir+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/fhir+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/fido.trusted-apps+json":{"compressible":true},"application/fits":{"source":"iana"},"application/flexfec":{"source":"iana"},"application/font-sfnt":{"source":"iana"},"application/font-tdpfr":{"source":"iana","extensions":["pfr"]},"application/font-woff":{"source":"iana","compressible":false},"application/framework-attributes+xml":{"source":"iana","compressible":true},"application/geo+json":{"source":"iana","compressible":true,"extensions":["geojson"]},"application/geo+json-seq":{"source":"iana"},"application/geopackage+sqlite3":{"source":"iana"},"application/geoxacml+xml":{"source":"iana","compressible":true},"application/gltf-buffer":{"source":"iana"},"application/gml+xml":{"source":"iana","compressible":true,"extensions":["gml"]},"application/gpx+xml":{"source":"apache","compressible":true,"extensions":["gpx"]},"application/gxf":{"source":"apache","extensions":["gxf"]},"application/gzip":{"source":"iana","compressible":false,"extensions":["gz"]},"application/h224":{"source":"iana"},"application/held+xml":{"source":"iana","compressible":true},"application/hjson":{"extensions":["hjson"]},"application/http":{"source":"iana"},"application/hyperstudio":{"source":"iana","extensions":["stk"]},"application/ibe-key-request+xml":{"source":"iana","compressible":true},"application/ibe-pkg-reply+xml":{"source":"iana","compressible":true},"application/ibe-pp-data":{"source":"iana"},"application/iges":{"source":"iana"},"application/im-iscomposing+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/index":{"source":"iana"},"application/index.cmd":{"source":"iana"},"application/index.obj":{"source":"iana"},"application/index.response":{"source":"iana"},"application/index.vnd":{"source":"iana"},"application/inkml+xml":{"source":"iana","compressible":true,"extensions":["ink","inkml"]},"application/iotp":{"source":"iana"},"application/ipfix":{"source":"iana","extensions":["ipfix"]},"application/ipp":{"source":"iana"},"application/isup":{"source":"iana"},"application/its+xml":{"source":"iana","compressible":true,"extensions":["its"]},"application/java-archive":{"source":"apache","compressible":false,"extensions":["jar","war","ear"]},"application/java-serialized-object":{"source":"apache","compressible":false,"extensions":["ser"]},"application/java-vm":{"source":"apache","compressible":false,"extensions":["class"]},"application/javascript":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["js","mjs"]},"application/jf2feed+json":{"source":"iana","compressible":true},"application/jose":{"source":"iana"},"application/jose+json":{"source":"iana","compressible":true},"application/jrd+json":{"source":"iana","compressible":true},"application/jscalendar+json":{"source":"iana","compressible":true},"application/json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["json","map"]},"application/json-patch+json":{"source":"iana","compressible":true},"application/json-seq":{"source":"iana"},"application/json5":{"extensions":["json5"]},"application/jsonml+json":{"source":"apache","compressible":true,"extensions":["jsonml"]},"application/jwk+json":{"source":"iana","compressible":true},"application/jwk-set+json":{"source":"iana","compressible":true},"application/jwt":{"source":"iana"},"application/kpml-request+xml":{"source":"iana","compressible":true},"application/kpml-response+xml":{"source":"iana","compressible":true},"application/ld+json":{"source":"iana","compressible":true,"extensions":["jsonld"]},"application/lgr+xml":{"source":"iana","compressible":true,"extensions":["lgr"]},"application/link-format":{"source":"iana"},"application/load-control+xml":{"source":"iana","compressible":true},"application/lost+xml":{"source":"iana","compressible":true,"extensions":["lostxml"]},"application/lostsync+xml":{"source":"iana","compressible":true},"application/lpf+zip":{"source":"iana","compressible":false},"application/lxf":{"source":"iana"},"application/mac-binhex40":{"source":"iana","extensions":["hqx"]},"application/mac-compactpro":{"source":"apache","extensions":["cpt"]},"application/macwriteii":{"source":"iana"},"application/mads+xml":{"source":"iana","compressible":true,"extensions":["mads"]},"application/manifest+json":{"charset":"UTF-8","compressible":true,"extensions":["webmanifest"]},"application/marc":{"source":"iana","extensions":["mrc"]},"application/marcxml+xml":{"source":"iana","compressible":true,"extensions":["mrcx"]},"application/mathematica":{"source":"iana","extensions":["ma","nb","mb"]},"application/mathml+xml":{"source":"iana","compressible":true,"extensions":["mathml"]},"application/mathml-content+xml":{"source":"iana","compressible":true},"application/mathml-presentation+xml":{"source":"iana","compressible":true},"application/mbms-associated-procedure-description+xml":{"source":"iana","compressible":true},"application/mbms-deregister+xml":{"source":"iana","compressible":true},"application/mbms-envelope+xml":{"source":"iana","compressible":true},"application/mbms-msk+xml":{"source":"iana","compressible":true},"application/mbms-msk-response+xml":{"source":"iana","compressible":true},"application/mbms-protection-description+xml":{"source":"iana","compressible":true},"application/mbms-reception-report+xml":{"source":"iana","compressible":true},"application/mbms-register+xml":{"source":"iana","compressible":true},"application/mbms-register-response+xml":{"source":"iana","compressible":true},"application/mbms-schedule+xml":{"source":"iana","compressible":true},"application/mbms-user-service-description+xml":{"source":"iana","compressible":true},"application/mbox":{"source":"iana","extensions":["mbox"]},"application/media-policy-dataset+xml":{"source":"iana","compressible":true},"application/media_control+xml":{"source":"iana","compressible":true},"application/mediaservercontrol+xml":{"source":"iana","compressible":true,"extensions":["mscml"]},"application/merge-patch+json":{"source":"iana","compressible":true},"application/metalink+xml":{"source":"apache","compressible":true,"extensions":["metalink"]},"application/metalink4+xml":{"source":"iana","compressible":true,"extensions":["meta4"]},"application/mets+xml":{"source":"iana","compressible":true,"extensions":["mets"]},"application/mf4":{"source":"iana"},"application/mikey":{"source":"iana"},"application/mipc":{"source":"iana"},"application/mmt-aei+xml":{"source":"iana","compressible":true,"extensions":["maei"]},"application/mmt-usd+xml":{"source":"iana","compressible":true,"extensions":["musd"]},"application/mods+xml":{"source":"iana","compressible":true,"extensions":["mods"]},"application/moss-keys":{"source":"iana"},"application/moss-signature":{"source":"iana"},"application/mosskey-data":{"source":"iana"},"application/mosskey-request":{"source":"iana"},"application/mp21":{"source":"iana","extensions":["m21","mp21"]},"application/mp4":{"source":"iana","extensions":["mp4s","m4p"]},"application/mpeg4-generic":{"source":"iana"},"application/mpeg4-iod":{"source":"iana"},"application/mpeg4-iod-xmt":{"source":"iana"},"application/mrb-consumer+xml":{"source":"iana","compressible":true},"application/mrb-publish+xml":{"source":"iana","compressible":true},"application/msc-ivr+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msc-mixer+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msword":{"source":"iana","compressible":false,"extensions":["doc","dot"]},"application/mud+json":{"source":"iana","compressible":true},"application/multipart-core":{"source":"iana"},"application/mxf":{"source":"iana","extensions":["mxf"]},"application/n-quads":{"source":"iana","extensions":["nq"]},"application/n-triples":{"source":"iana","extensions":["nt"]},"application/nasdata":{"source":"iana"},"application/news-checkgroups":{"source":"iana","charset":"US-ASCII"},"application/news-groupinfo":{"source":"iana","charset":"US-ASCII"},"application/news-transmission":{"source":"iana"},"application/nlsml+xml":{"source":"iana","compressible":true},"application/node":{"source":"iana","extensions":["cjs"]},"application/nss":{"source":"iana"},"application/ocsp-request":{"source":"iana"},"application/ocsp-response":{"source":"iana"},"application/octet-stream":{"source":"iana","compressible":false,"extensions":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{"source":"iana","extensions":["oda"]},"application/odm+xml":{"source":"iana","compressible":true},"application/odx":{"source":"iana"},"application/oebps-package+xml":{"source":"iana","compressible":true,"extensions":["opf"]},"application/ogg":{"source":"iana","compressible":false,"extensions":["ogx"]},"application/omdoc+xml":{"source":"apache","compressible":true,"extensions":["omdoc"]},"application/onenote":{"source":"apache","extensions":["onetoc","onetoc2","onetmp","onepkg"]},"application/opc-nodeset+xml":{"source":"iana","compressible":true},"application/oscore":{"source":"iana"},"application/oxps":{"source":"iana","extensions":["oxps"]},"application/p2p-overlay+xml":{"source":"iana","compressible":true,"extensions":["relo"]},"application/parityfec":{"source":"iana"},"application/passport":{"source":"iana"},"application/patch-ops-error+xml":{"source":"iana","compressible":true,"extensions":["xer"]},"application/pdf":{"source":"iana","compressible":false,"extensions":["pdf"]},"application/pdx":{"source":"iana"},"application/pem-certificate-chain":{"source":"iana"},"application/pgp-encrypted":{"source":"iana","compressible":false,"extensions":["pgp"]},"application/pgp-keys":{"source":"iana"},"application/pgp-signature":{"source":"iana","extensions":["asc","sig"]},"application/pics-rules":{"source":"apache","extensions":["prf"]},"application/pidf+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pidf-diff+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pkcs10":{"source":"iana","extensions":["p10"]},"application/pkcs12":{"source":"iana"},"application/pkcs7-mime":{"source":"iana","extensions":["p7m","p7c"]},"application/pkcs7-signature":{"source":"iana","extensions":["p7s"]},"application/pkcs8":{"source":"iana","extensions":["p8"]},"application/pkcs8-encrypted":{"source":"iana"},"application/pkix-attr-cert":{"source":"iana","extensions":["ac"]},"application/pkix-cert":{"source":"iana","extensions":["cer"]},"application/pkix-crl":{"source":"iana","extensions":["crl"]},"application/pkix-pkipath":{"source":"iana","extensions":["pkipath"]},"application/pkixcmp":{"source":"iana","extensions":["pki"]},"application/pls+xml":{"source":"iana","compressible":true,"extensions":["pls"]},"application/poc-settings+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/postscript":{"source":"iana","compressible":true,"extensions":["ai","eps","ps"]},"application/ppsp-tracker+json":{"source":"iana","compressible":true},"application/problem+json":{"source":"iana","compressible":true},"application/problem+xml":{"source":"iana","compressible":true},"application/provenance+xml":{"source":"iana","compressible":true,"extensions":["provx"]},"application/prs.alvestrand.titrax-sheet":{"source":"iana"},"application/prs.cww":{"source":"iana","extensions":["cww"]},"application/prs.cyn":{"source":"iana","charset":"7-BIT"},"application/prs.hpub+zip":{"source":"iana","compressible":false},"application/prs.nprend":{"source":"iana"},"application/prs.plucker":{"source":"iana"},"application/prs.rdf-xml-crypt":{"source":"iana"},"application/prs.xsf+xml":{"source":"iana","compressible":true},"application/pskc+xml":{"source":"iana","compressible":true,"extensions":["pskcxml"]},"application/pvd+json":{"source":"iana","compressible":true},"application/qsig":{"source":"iana"},"application/raml+yaml":{"compressible":true,"extensions":["raml"]},"application/raptorfec":{"source":"iana"},"application/rdap+json":{"source":"iana","compressible":true},"application/rdf+xml":{"source":"iana","compressible":true,"extensions":["rdf","owl"]},"application/reginfo+xml":{"source":"iana","compressible":true,"extensions":["rif"]},"application/relax-ng-compact-syntax":{"source":"iana","extensions":["rnc"]},"application/remote-printing":{"source":"iana"},"application/reputon+json":{"source":"iana","compressible":true},"application/resource-lists+xml":{"source":"iana","compressible":true,"extensions":["rl"]},"application/resource-lists-diff+xml":{"source":"iana","compressible":true,"extensions":["rld"]},"application/rfc+xml":{"source":"iana","compressible":true},"application/riscos":{"source":"iana"},"application/rlmi+xml":{"source":"iana","compressible":true},"application/rls-services+xml":{"source":"iana","compressible":true,"extensions":["rs"]},"application/route-apd+xml":{"source":"iana","compressible":true,"extensions":["rapd"]},"application/route-s-tsid+xml":{"source":"iana","compressible":true,"extensions":["sls"]},"application/route-usd+xml":{"source":"iana","compressible":true,"extensions":["rusd"]},"application/rpki-ghostbusters":{"source":"iana","extensions":["gbr"]},"application/rpki-manifest":{"source":"iana","extensions":["mft"]},"application/rpki-publication":{"source":"iana"},"application/rpki-roa":{"source":"iana","extensions":["roa"]},"application/rpki-updown":{"source":"iana"},"application/rsd+xml":{"source":"apache","compressible":true,"extensions":["rsd"]},"application/rss+xml":{"source":"apache","compressible":true,"extensions":["rss"]},"application/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"application/rtploopback":{"source":"iana"},"application/rtx":{"source":"iana"},"application/samlassertion+xml":{"source":"iana","compressible":true},"application/samlmetadata+xml":{"source":"iana","compressible":true},"application/sarif+json":{"source":"iana","compressible":true},"application/sbe":{"source":"iana"},"application/sbml+xml":{"source":"iana","compressible":true,"extensions":["sbml"]},"application/scaip+xml":{"source":"iana","compressible":true},"application/scim+json":{"source":"iana","compressible":true},"application/scvp-cv-request":{"source":"iana","extensions":["scq"]},"application/scvp-cv-response":{"source":"iana","extensions":["scs"]},"application/scvp-vp-request":{"source":"iana","extensions":["spq"]},"application/scvp-vp-response":{"source":"iana","extensions":["spp"]},"application/sdp":{"source":"iana","extensions":["sdp"]},"application/secevent+jwt":{"source":"iana"},"application/senml+cbor":{"source":"iana"},"application/senml+json":{"source":"iana","compressible":true},"application/senml+xml":{"source":"iana","compressible":true,"extensions":["senmlx"]},"application/senml-etch+cbor":{"source":"iana"},"application/senml-etch+json":{"source":"iana","compressible":true},"application/senml-exi":{"source":"iana"},"application/sensml+cbor":{"source":"iana"},"application/sensml+json":{"source":"iana","compressible":true},"application/sensml+xml":{"source":"iana","compressible":true,"extensions":["sensmlx"]},"application/sensml-exi":{"source":"iana"},"application/sep+xml":{"source":"iana","compressible":true},"application/sep-exi":{"source":"iana"},"application/session-info":{"source":"iana"},"application/set-payment":{"source":"iana"},"application/set-payment-initiation":{"source":"iana","extensions":["setpay"]},"application/set-registration":{"source":"iana"},"application/set-registration-initiation":{"source":"iana","extensions":["setreg"]},"application/sgml":{"source":"iana"},"application/sgml-open-catalog":{"source":"iana"},"application/shf+xml":{"source":"iana","compressible":true,"extensions":["shf"]},"application/sieve":{"source":"iana","extensions":["siv","sieve"]},"application/simple-filter+xml":{"source":"iana","compressible":true},"application/simple-message-summary":{"source":"iana"},"application/simplesymbolcontainer":{"source":"iana"},"application/sipc":{"source":"iana"},"application/slate":{"source":"iana"},"application/smil":{"source":"iana"},"application/smil+xml":{"source":"iana","compressible":true,"extensions":["smi","smil"]},"application/smpte336m":{"source":"iana"},"application/soap+fastinfoset":{"source":"iana"},"application/soap+xml":{"source":"iana","compressible":true},"application/sparql-query":{"source":"iana","extensions":["rq"]},"application/sparql-results+xml":{"source":"iana","compressible":true,"extensions":["srx"]},"application/spirits-event+xml":{"source":"iana","compressible":true},"application/sql":{"source":"iana"},"application/srgs":{"source":"iana","extensions":["gram"]},"application/srgs+xml":{"source":"iana","compressible":true,"extensions":["grxml"]},"application/sru+xml":{"source":"iana","compressible":true,"extensions":["sru"]},"application/ssdl+xml":{"source":"apache","compressible":true,"extensions":["ssdl"]},"application/ssml+xml":{"source":"iana","compressible":true,"extensions":["ssml"]},"application/stix+json":{"source":"iana","compressible":true},"application/swid+xml":{"source":"iana","compressible":true,"extensions":["swidtag"]},"application/tamp-apex-update":{"source":"iana"},"application/tamp-apex-update-confirm":{"source":"iana"},"application/tamp-community-update":{"source":"iana"},"application/tamp-community-update-confirm":{"source":"iana"},"application/tamp-error":{"source":"iana"},"application/tamp-sequence-adjust":{"source":"iana"},"application/tamp-sequence-adjust-confirm":{"source":"iana"},"application/tamp-status-query":{"source":"iana"},"application/tamp-status-response":{"source":"iana"},"application/tamp-update":{"source":"iana"},"application/tamp-update-confirm":{"source":"iana"},"application/tar":{"compressible":true},"application/taxii+json":{"source":"iana","compressible":true},"application/td+json":{"source":"iana","compressible":true},"application/tei+xml":{"source":"iana","compressible":true,"extensions":["tei","teicorpus"]},"application/tetra_isi":{"source":"iana"},"application/thraud+xml":{"source":"iana","compressible":true,"extensions":["tfi"]},"application/timestamp-query":{"source":"iana"},"application/timestamp-reply":{"source":"iana"},"application/timestamped-data":{"source":"iana","extensions":["tsd"]},"application/tlsrpt+gzip":{"source":"iana"},"application/tlsrpt+json":{"source":"iana","compressible":true},"application/tnauthlist":{"source":"iana"},"application/toml":{"compressible":true,"extensions":["toml"]},"application/trickle-ice-sdpfrag":{"source":"iana"},"application/trig":{"source":"iana"},"application/ttml+xml":{"source":"iana","compressible":true,"extensions":["ttml"]},"application/tve-trigger":{"source":"iana"},"application/tzif":{"source":"iana"},"application/tzif-leap":{"source":"iana"},"application/ubjson":{"compressible":false,"extensions":["ubj"]},"application/ulpfec":{"source":"iana"},"application/urc-grpsheet+xml":{"source":"iana","compressible":true},"application/urc-ressheet+xml":{"source":"iana","compressible":true,"extensions":["rsheet"]},"application/urc-targetdesc+xml":{"source":"iana","compressible":true,"extensions":["td"]},"application/urc-uisocketdesc+xml":{"source":"iana","compressible":true},"application/vcard+json":{"source":"iana","compressible":true},"application/vcard+xml":{"source":"iana","compressible":true},"application/vemmi":{"source":"iana"},"application/vividence.scriptfile":{"source":"apache"},"application/vnd.1000minds.decision-model+xml":{"source":"iana","compressible":true,"extensions":["1km"]},"application/vnd.3gpp-prose+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-prose-pc3ch+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-v2x-local-service-information":{"source":"iana"},"application/vnd.3gpp.access-transfer-events+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.bsf+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gmop+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.interworking-data":{"source":"iana"},"application/vnd.3gpp.mc-signalling-ear":{"source":"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-payload":{"source":"iana"},"application/vnd.3gpp.mcdata-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-signalling":{"source":"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-floor-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-signed+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-init-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-transmission-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mid-call+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.pic-bw-large":{"source":"iana","extensions":["plb"]},"application/vnd.3gpp.pic-bw-small":{"source":"iana","extensions":["psb"]},"application/vnd.3gpp.pic-bw-var":{"source":"iana","extensions":["pvb"]},"application/vnd.3gpp.sms":{"source":"iana"},"application/vnd.3gpp.sms+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-ext+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.state-and-event-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ussd+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.bcmcsinfo+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.sms":{"source":"iana"},"application/vnd.3gpp2.tcap":{"source":"iana","extensions":["tcap"]},"application/vnd.3lightssoftware.imagescal":{"source":"iana"},"application/vnd.3m.post-it-notes":{"source":"iana","extensions":["pwn"]},"application/vnd.accpac.simply.aso":{"source":"iana","extensions":["aso"]},"application/vnd.accpac.simply.imp":{"source":"iana","extensions":["imp"]},"application/vnd.acucobol":{"source":"iana","extensions":["acu"]},"application/vnd.acucorp":{"source":"iana","extensions":["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{"source":"apache","compressible":false,"extensions":["air"]},"application/vnd.adobe.flash.movie":{"source":"iana"},"application/vnd.adobe.formscentral.fcdt":{"source":"iana","extensions":["fcdt"]},"application/vnd.adobe.fxp":{"source":"iana","extensions":["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{"source":"iana"},"application/vnd.adobe.xdp+xml":{"source":"iana","compressible":true,"extensions":["xdp"]},"application/vnd.adobe.xfdf":{"source":"iana","extensions":["xfdf"]},"application/vnd.aether.imp":{"source":"iana"},"application/vnd.afpc.afplinedata":{"source":"iana"},"application/vnd.afpc.afplinedata-pagedef":{"source":"iana"},"application/vnd.afpc.cmoca-cmresource":{"source":"iana"},"application/vnd.afpc.foca-charset":{"source":"iana"},"application/vnd.afpc.foca-codedfont":{"source":"iana"},"application/vnd.afpc.foca-codepage":{"source":"iana"},"application/vnd.afpc.modca":{"source":"iana"},"application/vnd.afpc.modca-cmtable":{"source":"iana"},"application/vnd.afpc.modca-formdef":{"source":"iana"},"application/vnd.afpc.modca-mediummap":{"source":"iana"},"application/vnd.afpc.modca-objectcontainer":{"source":"iana"},"application/vnd.afpc.modca-overlay":{"source":"iana"},"application/vnd.afpc.modca-pagesegment":{"source":"iana"},"application/vnd.ah-barcode":{"source":"iana"},"application/vnd.ahead.space":{"source":"iana","extensions":["ahead"]},"application/vnd.airzip.filesecure.azf":{"source":"iana","extensions":["azf"]},"application/vnd.airzip.filesecure.azs":{"source":"iana","extensions":["azs"]},"application/vnd.amadeus+json":{"source":"iana","compressible":true},"application/vnd.amazon.ebook":{"source":"apache","extensions":["azw"]},"application/vnd.amazon.mobi8-ebook":{"source":"iana"},"application/vnd.americandynamics.acc":{"source":"iana","extensions":["acc"]},"application/vnd.amiga.ami":{"source":"iana","extensions":["ami"]},"application/vnd.amundsen.maze+xml":{"source":"iana","compressible":true},"application/vnd.android.ota":{"source":"iana"},"application/vnd.android.package-archive":{"source":"apache","compressible":false,"extensions":["apk"]},"application/vnd.anki":{"source":"iana"},"application/vnd.anser-web-certificate-issue-initiation":{"source":"iana","extensions":["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{"source":"apache","extensions":["fti"]},"application/vnd.antix.game-component":{"source":"iana","extensions":["atx"]},"application/vnd.apache.thrift.binary":{"source":"iana"},"application/vnd.apache.thrift.compact":{"source":"iana"},"application/vnd.apache.thrift.json":{"source":"iana"},"application/vnd.api+json":{"source":"iana","compressible":true},"application/vnd.aplextor.warrp+json":{"source":"iana","compressible":true},"application/vnd.apothekende.reservation+json":{"source":"iana","compressible":true},"application/vnd.apple.installer+xml":{"source":"iana","compressible":true,"extensions":["mpkg"]},"application/vnd.apple.keynote":{"source":"iana","extensions":["key"]},"application/vnd.apple.mpegurl":{"source":"iana","extensions":["m3u8"]},"application/vnd.apple.numbers":{"source":"iana","extensions":["numbers"]},"application/vnd.apple.pages":{"source":"iana","extensions":["pages"]},"application/vnd.apple.pkpass":{"compressible":false,"extensions":["pkpass"]},"application/vnd.arastra.swi":{"source":"iana"},"application/vnd.aristanetworks.swi":{"source":"iana","extensions":["swi"]},"application/vnd.artisan+json":{"source":"iana","compressible":true},"application/vnd.artsquare":{"source":"iana"},"application/vnd.astraea-software.iota":{"source":"iana","extensions":["iota"]},"application/vnd.audiograph":{"source":"iana","extensions":["aep"]},"application/vnd.autopackage":{"source":"iana"},"application/vnd.avalon+json":{"source":"iana","compressible":true},"application/vnd.avistar+xml":{"source":"iana","compressible":true},"application/vnd.balsamiq.bmml+xml":{"source":"iana","compressible":true,"extensions":["bmml"]},"application/vnd.balsamiq.bmpr":{"source":"iana"},"application/vnd.banana-accounting":{"source":"iana"},"application/vnd.bbf.usp.error":{"source":"iana"},"application/vnd.bbf.usp.msg":{"source":"iana"},"application/vnd.bbf.usp.msg+json":{"source":"iana","compressible":true},"application/vnd.bekitzur-stech+json":{"source":"iana","compressible":true},"application/vnd.bint.med-content":{"source":"iana"},"application/vnd.biopax.rdf+xml":{"source":"iana","compressible":true},"application/vnd.blink-idb-value-wrapper":{"source":"iana"},"application/vnd.blueice.multipass":{"source":"iana","extensions":["mpm"]},"application/vnd.bluetooth.ep.oob":{"source":"iana"},"application/vnd.bluetooth.le.oob":{"source":"iana"},"application/vnd.bmi":{"source":"iana","extensions":["bmi"]},"application/vnd.bpf":{"source":"iana"},"application/vnd.bpf3":{"source":"iana"},"application/vnd.businessobjects":{"source":"iana","extensions":["rep"]},"application/vnd.byu.uapi+json":{"source":"iana","compressible":true},"application/vnd.cab-jscript":{"source":"iana"},"application/vnd.canon-cpdl":{"source":"iana"},"application/vnd.canon-lips":{"source":"iana"},"application/vnd.capasystems-pg+json":{"source":"iana","compressible":true},"application/vnd.cendio.thinlinc.clientconf":{"source":"iana"},"application/vnd.century-systems.tcp_stream":{"source":"iana"},"application/vnd.chemdraw+xml":{"source":"iana","compressible":true,"extensions":["cdxml"]},"application/vnd.chess-pgn":{"source":"iana"},"application/vnd.chipnuts.karaoke-mmd":{"source":"iana","extensions":["mmd"]},"application/vnd.ciedi":{"source":"iana"},"application/vnd.cinderella":{"source":"iana","extensions":["cdy"]},"application/vnd.cirpack.isdn-ext":{"source":"iana"},"application/vnd.citationstyles.style+xml":{"source":"iana","compressible":true,"extensions":["csl"]},"application/vnd.claymore":{"source":"iana","extensions":["cla"]},"application/vnd.cloanto.rp9":{"source":"iana","extensions":["rp9"]},"application/vnd.clonk.c4group":{"source":"iana","extensions":["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{"source":"iana","extensions":["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{"source":"iana","extensions":["c11amz"]},"application/vnd.coffeescript":{"source":"iana"},"application/vnd.collabio.xodocuments.document":{"source":"iana"},"application/vnd.collabio.xodocuments.document-template":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation-template":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{"source":"iana"},"application/vnd.collection+json":{"source":"iana","compressible":true},"application/vnd.collection.doc+json":{"source":"iana","compressible":true},"application/vnd.collection.next+json":{"source":"iana","compressible":true},"application/vnd.comicbook+zip":{"source":"iana","compressible":false},"application/vnd.comicbook-rar":{"source":"iana"},"application/vnd.commerce-battelle":{"source":"iana"},"application/vnd.commonspace":{"source":"iana","extensions":["csp"]},"application/vnd.contact.cmsg":{"source":"iana","extensions":["cdbcmsg"]},"application/vnd.coreos.ignition+json":{"source":"iana","compressible":true},"application/vnd.cosmocaller":{"source":"iana","extensions":["cmc"]},"application/vnd.crick.clicker":{"source":"iana","extensions":["clkx"]},"application/vnd.crick.clicker.keyboard":{"source":"iana","extensions":["clkk"]},"application/vnd.crick.clicker.palette":{"source":"iana","extensions":["clkp"]},"application/vnd.crick.clicker.template":{"source":"iana","extensions":["clkt"]},"application/vnd.crick.clicker.wordbank":{"source":"iana","extensions":["clkw"]},"application/vnd.criticaltools.wbs+xml":{"source":"iana","compressible":true,"extensions":["wbs"]},"application/vnd.cryptii.pipe+json":{"source":"iana","compressible":true},"application/vnd.crypto-shade-file":{"source":"iana"},"application/vnd.cryptomator.encrypted":{"source":"iana"},"application/vnd.ctc-posml":{"source":"iana","extensions":["pml"]},"application/vnd.ctct.ws+xml":{"source":"iana","compressible":true},"application/vnd.cups-pdf":{"source":"iana"},"application/vnd.cups-postscript":{"source":"iana"},"application/vnd.cups-ppd":{"source":"iana","extensions":["ppd"]},"application/vnd.cups-raster":{"source":"iana"},"application/vnd.cups-raw":{"source":"iana"},"application/vnd.curl":{"source":"iana"},"application/vnd.curl.car":{"source":"apache","extensions":["car"]},"application/vnd.curl.pcurl":{"source":"apache","extensions":["pcurl"]},"application/vnd.cyan.dean.root+xml":{"source":"iana","compressible":true},"application/vnd.cybank":{"source":"iana"},"application/vnd.cyclonedx+json":{"source":"iana","compressible":true},"application/vnd.cyclonedx+xml":{"source":"iana","compressible":true},"application/vnd.d2l.coursepackage1p0+zip":{"source":"iana","compressible":false},"application/vnd.d3m-dataset":{"source":"iana"},"application/vnd.d3m-problem":{"source":"iana"},"application/vnd.dart":{"source":"iana","compressible":true,"extensions":["dart"]},"application/vnd.data-vision.rdz":{"source":"iana","extensions":["rdz"]},"application/vnd.datapackage+json":{"source":"iana","compressible":true},"application/vnd.dataresource+json":{"source":"iana","compressible":true},"application/vnd.dbf":{"source":"iana","extensions":["dbf"]},"application/vnd.debian.binary-package":{"source":"iana"},"application/vnd.dece.data":{"source":"iana","extensions":["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{"source":"iana","compressible":true,"extensions":["uvt","uvvt"]},"application/vnd.dece.unspecified":{"source":"iana","extensions":["uvx","uvvx"]},"application/vnd.dece.zip":{"source":"iana","extensions":["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{"source":"iana","extensions":["fe_launch"]},"application/vnd.desmume.movie":{"source":"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{"source":"iana"},"application/vnd.dm.delegation+xml":{"source":"iana","compressible":true},"application/vnd.dna":{"source":"iana","extensions":["dna"]},"application/vnd.document+json":{"source":"iana","compressible":true},"application/vnd.dolby.mlp":{"source":"apache","extensions":["mlp"]},"application/vnd.dolby.mobile.1":{"source":"iana"},"application/vnd.dolby.mobile.2":{"source":"iana"},"application/vnd.doremir.scorecloud-binary-document":{"source":"iana"},"application/vnd.dpgraph":{"source":"iana","extensions":["dpg"]},"application/vnd.dreamfactory":{"source":"iana","extensions":["dfac"]},"application/vnd.drive+json":{"source":"iana","compressible":true},"application/vnd.ds-keypoint":{"source":"apache","extensions":["kpxx"]},"application/vnd.dtg.local":{"source":"iana"},"application/vnd.dtg.local.flash":{"source":"iana"},"application/vnd.dtg.local.html":{"source":"iana"},"application/vnd.dvb.ait":{"source":"iana","extensions":["ait"]},"application/vnd.dvb.dvbisl+xml":{"source":"iana","compressible":true},"application/vnd.dvb.dvbj":{"source":"iana"},"application/vnd.dvb.esgcontainer":{"source":"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess2":{"source":"iana"},"application/vnd.dvb.ipdcesgpdd":{"source":"iana"},"application/vnd.dvb.ipdcroaming":{"source":"iana"},"application/vnd.dvb.iptv.alfec-base":{"source":"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{"source":"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-container+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-generic+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-msglist+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-request+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-response+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-init+xml":{"source":"iana","compressible":true},"application/vnd.dvb.pfr":{"source":"iana"},"application/vnd.dvb.service":{"source":"iana","extensions":["svc"]},"application/vnd.dxr":{"source":"iana"},"application/vnd.dynageo":{"source":"iana","extensions":["geo"]},"application/vnd.dzr":{"source":"iana"},"application/vnd.easykaraoke.cdgdownload":{"source":"iana"},"application/vnd.ecdis-update":{"source":"iana"},"application/vnd.ecip.rlp":{"source":"iana"},"application/vnd.ecowin.chart":{"source":"iana","extensions":["mag"]},"application/vnd.ecowin.filerequest":{"source":"iana"},"application/vnd.ecowin.fileupdate":{"source":"iana"},"application/vnd.ecowin.series":{"source":"iana"},"application/vnd.ecowin.seriesrequest":{"source":"iana"},"application/vnd.ecowin.seriesupdate":{"source":"iana"},"application/vnd.efi.img":{"source":"iana"},"application/vnd.efi.iso":{"source":"iana"},"application/vnd.emclient.accessrequest+xml":{"source":"iana","compressible":true},"application/vnd.enliven":{"source":"iana","extensions":["nml"]},"application/vnd.enphase.envoy":{"source":"iana"},"application/vnd.eprints.data+xml":{"source":"iana","compressible":true},"application/vnd.epson.esf":{"source":"iana","extensions":["esf"]},"application/vnd.epson.msf":{"source":"iana","extensions":["msf"]},"application/vnd.epson.quickanime":{"source":"iana","extensions":["qam"]},"application/vnd.epson.salt":{"source":"iana","extensions":["slt"]},"application/vnd.epson.ssf":{"source":"iana","extensions":["ssf"]},"application/vnd.ericsson.quickcall":{"source":"iana"},"application/vnd.espass-espass+zip":{"source":"iana","compressible":false},"application/vnd.eszigno3+xml":{"source":"iana","compressible":true,"extensions":["es3","et3"]},"application/vnd.etsi.aoc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.asic-e+zip":{"source":"iana","compressible":false},"application/vnd.etsi.asic-s+zip":{"source":"iana","compressible":false},"application/vnd.etsi.cug+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvcommand+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-bc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-cod+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-npvr+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvservice+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsync+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvueprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mcid+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mheg5":{"source":"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{"source":"iana","compressible":true},"application/vnd.etsi.pstn+xml":{"source":"iana","compressible":true},"application/vnd.etsi.sci+xml":{"source":"iana","compressible":true},"application/vnd.etsi.simservs+xml":{"source":"iana","compressible":true},"application/vnd.etsi.timestamp-token":{"source":"iana"},"application/vnd.etsi.tsl+xml":{"source":"iana","compressible":true},"application/vnd.etsi.tsl.der":{"source":"iana"},"application/vnd.eudora.data":{"source":"iana"},"application/vnd.evolv.ecig.profile":{"source":"iana"},"application/vnd.evolv.ecig.settings":{"source":"iana"},"application/vnd.evolv.ecig.theme":{"source":"iana"},"application/vnd.exstream-empower+zip":{"source":"iana","compressible":false},"application/vnd.exstream-package":{"source":"iana"},"application/vnd.ezpix-album":{"source":"iana","extensions":["ez2"]},"application/vnd.ezpix-package":{"source":"iana","extensions":["ez3"]},"application/vnd.f-secure.mobile":{"source":"iana"},"application/vnd.fastcopy-disk-image":{"source":"iana"},"application/vnd.fdf":{"source":"iana","extensions":["fdf"]},"application/vnd.fdsn.mseed":{"source":"iana","extensions":["mseed"]},"application/vnd.fdsn.seed":{"source":"iana","extensions":["seed","dataless"]},"application/vnd.ffsns":{"source":"iana"},"application/vnd.ficlab.flb+zip":{"source":"iana","compressible":false},"application/vnd.filmit.zfc":{"source":"iana"},"application/vnd.fints":{"source":"iana"},"application/vnd.firemonkeys.cloudcell":{"source":"iana"},"application/vnd.flographit":{"source":"iana","extensions":["gph"]},"application/vnd.fluxtime.clip":{"source":"iana","extensions":["ftc"]},"application/vnd.font-fontforge-sfd":{"source":"iana"},"application/vnd.framemaker":{"source":"iana","extensions":["fm","frame","maker","book"]},"application/vnd.frogans.fnc":{"source":"iana","extensions":["fnc"]},"application/vnd.frogans.ltf":{"source":"iana","extensions":["ltf"]},"application/vnd.fsc.weblaunch":{"source":"iana","extensions":["fsc"]},"application/vnd.fujitsu.oasys":{"source":"iana","extensions":["oas"]},"application/vnd.fujitsu.oasys2":{"source":"iana","extensions":["oa2"]},"application/vnd.fujitsu.oasys3":{"source":"iana","extensions":["oa3"]},"application/vnd.fujitsu.oasysgp":{"source":"iana","extensions":["fg5"]},"application/vnd.fujitsu.oasysprs":{"source":"iana","extensions":["bh2"]},"application/vnd.fujixerox.art-ex":{"source":"iana"},"application/vnd.fujixerox.art4":{"source":"iana"},"application/vnd.fujixerox.ddd":{"source":"iana","extensions":["ddd"]},"application/vnd.fujixerox.docuworks":{"source":"iana","extensions":["xdw"]},"application/vnd.fujixerox.docuworks.binder":{"source":"iana","extensions":["xbd"]},"application/vnd.fujixerox.docuworks.container":{"source":"iana"},"application/vnd.fujixerox.hbpl":{"source":"iana"},"application/vnd.fut-misnet":{"source":"iana"},"application/vnd.futoin+cbor":{"source":"iana"},"application/vnd.futoin+json":{"source":"iana","compressible":true},"application/vnd.fuzzysheet":{"source":"iana","extensions":["fzs"]},"application/vnd.genomatix.tuxedo":{"source":"iana","extensions":["txd"]},"application/vnd.gentics.grd+json":{"source":"iana","compressible":true},"application/vnd.geo+json":{"source":"iana","compressible":true},"application/vnd.geocube+xml":{"source":"iana","compressible":true},"application/vnd.geogebra.file":{"source":"iana","extensions":["ggb"]},"application/vnd.geogebra.slides":{"source":"iana"},"application/vnd.geogebra.tool":{"source":"iana","extensions":["ggt"]},"application/vnd.geometry-explorer":{"source":"iana","extensions":["gex","gre"]},"application/vnd.geonext":{"source":"iana","extensions":["gxt"]},"application/vnd.geoplan":{"source":"iana","extensions":["g2w"]},"application/vnd.geospace":{"source":"iana","extensions":["g3w"]},"application/vnd.gerber":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt-response":{"source":"iana"},"application/vnd.gmx":{"source":"iana","extensions":["gmx"]},"application/vnd.google-apps.document":{"compressible":false,"extensions":["gdoc"]},"application/vnd.google-apps.presentation":{"compressible":false,"extensions":["gslides"]},"application/vnd.google-apps.spreadsheet":{"compressible":false,"extensions":["gsheet"]},"application/vnd.google-earth.kml+xml":{"source":"iana","compressible":true,"extensions":["kml"]},"application/vnd.google-earth.kmz":{"source":"iana","compressible":false,"extensions":["kmz"]},"application/vnd.gov.sk.e-form+xml":{"source":"iana","compressible":true},"application/vnd.gov.sk.e-form+zip":{"source":"iana","compressible":false},"application/vnd.gov.sk.xmldatacontainer+xml":{"source":"iana","compressible":true},"application/vnd.grafeq":{"source":"iana","extensions":["gqf","gqs"]},"application/vnd.gridmp":{"source":"iana"},"application/vnd.groove-account":{"source":"iana","extensions":["gac"]},"application/vnd.groove-help":{"source":"iana","extensions":["ghf"]},"application/vnd.groove-identity-message":{"source":"iana","extensions":["gim"]},"application/vnd.groove-injector":{"source":"iana","extensions":["grv"]},"application/vnd.groove-tool-message":{"source":"iana","extensions":["gtm"]},"application/vnd.groove-tool-template":{"source":"iana","extensions":["tpl"]},"application/vnd.groove-vcard":{"source":"iana","extensions":["vcg"]},"application/vnd.hal+json":{"source":"iana","compressible":true},"application/vnd.hal+xml":{"source":"iana","compressible":true,"extensions":["hal"]},"application/vnd.handheld-entertainment+xml":{"source":"iana","compressible":true,"extensions":["zmm"]},"application/vnd.hbci":{"source":"iana","extensions":["hbci"]},"application/vnd.hc+json":{"source":"iana","compressible":true},"application/vnd.hcl-bireports":{"source":"iana"},"application/vnd.hdt":{"source":"iana"},"application/vnd.heroku+json":{"source":"iana","compressible":true},"application/vnd.hhe.lesson-player":{"source":"iana","extensions":["les"]},"application/vnd.hp-hpgl":{"source":"iana","extensions":["hpgl"]},"application/vnd.hp-hpid":{"source":"iana","extensions":["hpid"]},"application/vnd.hp-hps":{"source":"iana","extensions":["hps"]},"application/vnd.hp-jlyt":{"source":"iana","extensions":["jlt"]},"application/vnd.hp-pcl":{"source":"iana","extensions":["pcl"]},"application/vnd.hp-pclxl":{"source":"iana","extensions":["pclxl"]},"application/vnd.httphone":{"source":"iana"},"application/vnd.hydrostatix.sof-data":{"source":"iana","extensions":["sfd-hdstx"]},"application/vnd.hyper+json":{"source":"iana","compressible":true},"application/vnd.hyper-item+json":{"source":"iana","compressible":true},"application/vnd.hyperdrive+json":{"source":"iana","compressible":true},"application/vnd.hzn-3d-crossword":{"source":"iana"},"application/vnd.ibm.afplinedata":{"source":"iana"},"application/vnd.ibm.electronic-media":{"source":"iana"},"application/vnd.ibm.minipay":{"source":"iana","extensions":["mpy"]},"application/vnd.ibm.modcap":{"source":"iana","extensions":["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{"source":"iana","extensions":["irm"]},"application/vnd.ibm.secure-container":{"source":"iana","extensions":["sc"]},"application/vnd.iccprofile":{"source":"iana","extensions":["icc","icm"]},"application/vnd.ieee.1905":{"source":"iana"},"application/vnd.igloader":{"source":"iana","extensions":["igl"]},"application/vnd.imagemeter.folder+zip":{"source":"iana","compressible":false},"application/vnd.imagemeter.image+zip":{"source":"iana","compressible":false},"application/vnd.immervision-ivp":{"source":"iana","extensions":["ivp"]},"application/vnd.immervision-ivu":{"source":"iana","extensions":["ivu"]},"application/vnd.ims.imsccv1p1":{"source":"iana"},"application/vnd.ims.imsccv1p2":{"source":"iana"},"application/vnd.ims.imsccv1p3":{"source":"iana"},"application/vnd.ims.lis.v2.result+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy.id+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings.simple+json":{"source":"iana","compressible":true},"application/vnd.informedcontrol.rms+xml":{"source":"iana","compressible":true},"application/vnd.informix-visionary":{"source":"iana"},"application/vnd.infotech.project":{"source":"iana"},"application/vnd.infotech.project+xml":{"source":"iana","compressible":true},"application/vnd.innopath.wamp.notification":{"source":"iana"},"application/vnd.insors.igm":{"source":"iana","extensions":["igm"]},"application/vnd.intercon.formnet":{"source":"iana","extensions":["xpw","xpx"]},"application/vnd.intergeo":{"source":"iana","extensions":["i2g"]},"application/vnd.intertrust.digibox":{"source":"iana"},"application/vnd.intertrust.nncp":{"source":"iana"},"application/vnd.intu.qbo":{"source":"iana","extensions":["qbo"]},"application/vnd.intu.qfx":{"source":"iana","extensions":["qfx"]},"application/vnd.iptc.g2.catalogitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.conceptitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.knowledgeitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsmessage+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.packageitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.planningitem+xml":{"source":"iana","compressible":true},"application/vnd.ipunplugged.rcprofile":{"source":"iana","extensions":["rcprofile"]},"application/vnd.irepository.package+xml":{"source":"iana","compressible":true,"extensions":["irp"]},"application/vnd.is-xpr":{"source":"iana","extensions":["xpr"]},"application/vnd.isac.fcs":{"source":"iana","extensions":["fcs"]},"application/vnd.iso11783-10+zip":{"source":"iana","compressible":false},"application/vnd.jam":{"source":"iana","extensions":["jam"]},"application/vnd.japannet-directory-service":{"source":"iana"},"application/vnd.japannet-jpnstore-wakeup":{"source":"iana"},"application/vnd.japannet-payment-wakeup":{"source":"iana"},"application/vnd.japannet-registration":{"source":"iana"},"application/vnd.japannet-registration-wakeup":{"source":"iana"},"application/vnd.japannet-setstore-wakeup":{"source":"iana"},"application/vnd.japannet-verification":{"source":"iana"},"application/vnd.japannet-verification-wakeup":{"source":"iana"},"application/vnd.jcp.javame.midlet-rms":{"source":"iana","extensions":["rms"]},"application/vnd.jisp":{"source":"iana","extensions":["jisp"]},"application/vnd.joost.joda-archive":{"source":"iana","extensions":["joda"]},"application/vnd.jsk.isdn-ngn":{"source":"iana"},"application/vnd.kahootz":{"source":"iana","extensions":["ktz","ktr"]},"application/vnd.kde.karbon":{"source":"iana","extensions":["karbon"]},"application/vnd.kde.kchart":{"source":"iana","extensions":["chrt"]},"application/vnd.kde.kformula":{"source":"iana","extensions":["kfo"]},"application/vnd.kde.kivio":{"source":"iana","extensions":["flw"]},"application/vnd.kde.kontour":{"source":"iana","extensions":["kon"]},"application/vnd.kde.kpresenter":{"source":"iana","extensions":["kpr","kpt"]},"application/vnd.kde.kspread":{"source":"iana","extensions":["ksp"]},"application/vnd.kde.kword":{"source":"iana","extensions":["kwd","kwt"]},"application/vnd.kenameaapp":{"source":"iana","extensions":["htke"]},"application/vnd.kidspiration":{"source":"iana","extensions":["kia"]},"application/vnd.kinar":{"source":"iana","extensions":["kne","knp"]},"application/vnd.koan":{"source":"iana","extensions":["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{"source":"iana","extensions":["sse"]},"application/vnd.las":{"source":"iana"},"application/vnd.las.las+json":{"source":"iana","compressible":true},"application/vnd.las.las+xml":{"source":"iana","compressible":true,"extensions":["lasxml"]},"application/vnd.laszip":{"source":"iana"},"application/vnd.leap+json":{"source":"iana","compressible":true},"application/vnd.liberty-request+xml":{"source":"iana","compressible":true},"application/vnd.llamagraphics.life-balance.desktop":{"source":"iana","extensions":["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{"source":"iana","compressible":true,"extensions":["lbe"]},"application/vnd.logipipe.circuit+zip":{"source":"iana","compressible":false},"application/vnd.loom":{"source":"iana"},"application/vnd.lotus-1-2-3":{"source":"iana","extensions":["123"]},"application/vnd.lotus-approach":{"source":"iana","extensions":["apr"]},"application/vnd.lotus-freelance":{"source":"iana","extensions":["pre"]},"application/vnd.lotus-notes":{"source":"iana","extensions":["nsf"]},"application/vnd.lotus-organizer":{"source":"iana","extensions":["org"]},"application/vnd.lotus-screencam":{"source":"iana","extensions":["scm"]},"application/vnd.lotus-wordpro":{"source":"iana","extensions":["lwp"]},"application/vnd.macports.portpkg":{"source":"iana","extensions":["portpkg"]},"application/vnd.mapbox-vector-tile":{"source":"iana"},"application/vnd.marlin.drm.actiontoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.conftoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.license+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.mdcf":{"source":"iana"},"application/vnd.mason+json":{"source":"iana","compressible":true},"application/vnd.maxmind.maxmind-db":{"source":"iana"},"application/vnd.mcd":{"source":"iana","extensions":["mcd"]},"application/vnd.medcalcdata":{"source":"iana","extensions":["mc1"]},"application/vnd.mediastation.cdkey":{"source":"iana","extensions":["cdkey"]},"application/vnd.meridian-slingshot":{"source":"iana"},"application/vnd.mfer":{"source":"iana","extensions":["mwf"]},"application/vnd.mfmp":{"source":"iana","extensions":["mfm"]},"application/vnd.micro+json":{"source":"iana","compressible":true},"application/vnd.micrografx.flo":{"source":"iana","extensions":["flo"]},"application/vnd.micrografx.igx":{"source":"iana","extensions":["igx"]},"application/vnd.microsoft.portable-executable":{"source":"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{"source":"iana"},"application/vnd.miele+json":{"source":"iana","compressible":true},"application/vnd.mif":{"source":"iana","extensions":["mif"]},"application/vnd.minisoft-hp3000-save":{"source":"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{"source":"iana"},"application/vnd.mobius.daf":{"source":"iana","extensions":["daf"]},"application/vnd.mobius.dis":{"source":"iana","extensions":["dis"]},"application/vnd.mobius.mbk":{"source":"iana","extensions":["mbk"]},"application/vnd.mobius.mqy":{"source":"iana","extensions":["mqy"]},"application/vnd.mobius.msl":{"source":"iana","extensions":["msl"]},"application/vnd.mobius.plc":{"source":"iana","extensions":["plc"]},"application/vnd.mobius.txf":{"source":"iana","extensions":["txf"]},"application/vnd.mophun.application":{"source":"iana","extensions":["mpn"]},"application/vnd.mophun.certificate":{"source":"iana","extensions":["mpc"]},"application/vnd.motorola.flexsuite":{"source":"iana"},"application/vnd.motorola.flexsuite.adsi":{"source":"iana"},"application/vnd.motorola.flexsuite.fis":{"source":"iana"},"application/vnd.motorola.flexsuite.gotap":{"source":"iana"},"application/vnd.motorola.flexsuite.kmr":{"source":"iana"},"application/vnd.motorola.flexsuite.ttc":{"source":"iana"},"application/vnd.motorola.flexsuite.wem":{"source":"iana"},"application/vnd.motorola.iprm":{"source":"iana"},"application/vnd.mozilla.xul+xml":{"source":"iana","compressible":true,"extensions":["xul"]},"application/vnd.ms-3mfdocument":{"source":"iana"},"application/vnd.ms-artgalry":{"source":"iana","extensions":["cil"]},"application/vnd.ms-asf":{"source":"iana"},"application/vnd.ms-cab-compressed":{"source":"iana","extensions":["cab"]},"application/vnd.ms-color.iccprofile":{"source":"apache"},"application/vnd.ms-excel":{"source":"iana","compressible":false,"extensions":["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{"source":"iana","extensions":["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{"source":"iana","extensions":["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{"source":"iana","extensions":["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{"source":"iana","extensions":["xltm"]},"application/vnd.ms-fontobject":{"source":"iana","compressible":true,"extensions":["eot"]},"application/vnd.ms-htmlhelp":{"source":"iana","extensions":["chm"]},"application/vnd.ms-ims":{"source":"iana","extensions":["ims"]},"application/vnd.ms-lrm":{"source":"iana","extensions":["lrm"]},"application/vnd.ms-office.activex+xml":{"source":"iana","compressible":true},"application/vnd.ms-officetheme":{"source":"iana","extensions":["thmx"]},"application/vnd.ms-opentype":{"source":"apache","compressible":true},"application/vnd.ms-outlook":{"compressible":false,"extensions":["msg"]},"application/vnd.ms-package.obfuscated-opentype":{"source":"apache"},"application/vnd.ms-pki.seccat":{"source":"apache","extensions":["cat"]},"application/vnd.ms-pki.stl":{"source":"apache","extensions":["stl"]},"application/vnd.ms-playready.initiator+xml":{"source":"iana","compressible":true},"application/vnd.ms-powerpoint":{"source":"iana","compressible":false,"extensions":["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{"source":"iana","extensions":["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{"source":"iana","extensions":["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{"source":"iana","extensions":["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{"source":"iana","extensions":["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{"source":"iana","extensions":["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{"source":"iana","compressible":true},"application/vnd.ms-printing.printticket+xml":{"source":"apache","compressible":true},"application/vnd.ms-printschematicket+xml":{"source":"iana","compressible":true},"application/vnd.ms-project":{"source":"iana","extensions":["mpp","mpt"]},"application/vnd.ms-tnef":{"source":"iana"},"application/vnd.ms-windows.devicepairing":{"source":"iana"},"application/vnd.ms-windows.nwprinting.oob":{"source":"iana"},"application/vnd.ms-windows.printerpairing":{"source":"iana"},"application/vnd.ms-windows.wsd.oob":{"source":"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.lic-resp":{"source":"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.meter-resp":{"source":"iana"},"application/vnd.ms-word.document.macroenabled.12":{"source":"iana","extensions":["docm"]},"application/vnd.ms-word.template.macroenabled.12":{"source":"iana","extensions":["dotm"]},"application/vnd.ms-works":{"source":"iana","extensions":["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{"source":"iana","extensions":["wpl"]},"application/vnd.ms-xpsdocument":{"source":"iana","compressible":false,"extensions":["xps"]},"application/vnd.msa-disk-image":{"source":"iana"},"application/vnd.mseq":{"source":"iana","extensions":["mseq"]},"application/vnd.msign":{"source":"iana"},"application/vnd.multiad.creator":{"source":"iana"},"application/vnd.multiad.creator.cif":{"source":"iana"},"application/vnd.music-niff":{"source":"iana"},"application/vnd.musician":{"source":"iana","extensions":["mus"]},"application/vnd.muvee.style":{"source":"iana","extensions":["msty"]},"application/vnd.mynfc":{"source":"iana","extensions":["taglet"]},"application/vnd.ncd.control":{"source":"iana"},"application/vnd.ncd.reference":{"source":"iana"},"application/vnd.nearst.inv+json":{"source":"iana","compressible":true},"application/vnd.nebumind.line":{"source":"iana"},"application/vnd.nervana":{"source":"iana"},"application/vnd.netfpx":{"source":"iana"},"application/vnd.neurolanguage.nlu":{"source":"iana","extensions":["nlu"]},"application/vnd.nimn":{"source":"iana"},"application/vnd.nintendo.nitro.rom":{"source":"iana"},"application/vnd.nintendo.snes.rom":{"source":"iana"},"application/vnd.nitf":{"source":"iana","extensions":["ntf","nitf"]},"application/vnd.noblenet-directory":{"source":"iana","extensions":["nnd"]},"application/vnd.noblenet-sealer":{"source":"iana","extensions":["nns"]},"application/vnd.noblenet-web":{"source":"iana","extensions":["nnw"]},"application/vnd.nokia.catalogs":{"source":"iana"},"application/vnd.nokia.conml+wbxml":{"source":"iana"},"application/vnd.nokia.conml+xml":{"source":"iana","compressible":true},"application/vnd.nokia.iptv.config+xml":{"source":"iana","compressible":true},"application/vnd.nokia.isds-radio-presets":{"source":"iana"},"application/vnd.nokia.landmark+wbxml":{"source":"iana"},"application/vnd.nokia.landmark+xml":{"source":"iana","compressible":true},"application/vnd.nokia.landmarkcollection+xml":{"source":"iana","compressible":true},"application/vnd.nokia.n-gage.ac+xml":{"source":"iana","compressible":true,"extensions":["ac"]},"application/vnd.nokia.n-gage.data":{"source":"iana","extensions":["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{"source":"iana","extensions":["n-gage"]},"application/vnd.nokia.ncd":{"source":"iana"},"application/vnd.nokia.pcd+wbxml":{"source":"iana"},"application/vnd.nokia.pcd+xml":{"source":"iana","compressible":true},"application/vnd.nokia.radio-preset":{"source":"iana","extensions":["rpst"]},"application/vnd.nokia.radio-presets":{"source":"iana","extensions":["rpss"]},"application/vnd.novadigm.edm":{"source":"iana","extensions":["edm"]},"application/vnd.novadigm.edx":{"source":"iana","extensions":["edx"]},"application/vnd.novadigm.ext":{"source":"iana","extensions":["ext"]},"application/vnd.ntt-local.content-share":{"source":"iana"},"application/vnd.ntt-local.file-transfer":{"source":"iana"},"application/vnd.ntt-local.ogw_remote-access":{"source":"iana"},"application/vnd.ntt-local.sip-ta_remote":{"source":"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{"source":"iana"},"application/vnd.oasis.opendocument.chart":{"source":"iana","extensions":["odc"]},"application/vnd.oasis.opendocument.chart-template":{"source":"iana","extensions":["otc"]},"application/vnd.oasis.opendocument.database":{"source":"iana","extensions":["odb"]},"application/vnd.oasis.opendocument.formula":{"source":"iana","extensions":["odf"]},"application/vnd.oasis.opendocument.formula-template":{"source":"iana","extensions":["odft"]},"application/vnd.oasis.opendocument.graphics":{"source":"iana","compressible":false,"extensions":["odg"]},"application/vnd.oasis.opendocument.graphics-template":{"source":"iana","extensions":["otg"]},"application/vnd.oasis.opendocument.image":{"source":"iana","extensions":["odi"]},"application/vnd.oasis.opendocument.image-template":{"source":"iana","extensions":["oti"]},"application/vnd.oasis.opendocument.presentation":{"source":"iana","compressible":false,"extensions":["odp"]},"application/vnd.oasis.opendocument.presentation-template":{"source":"iana","extensions":["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{"source":"iana","compressible":false,"extensions":["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{"source":"iana","extensions":["ots"]},"application/vnd.oasis.opendocument.text":{"source":"iana","compressible":false,"extensions":["odt"]},"application/vnd.oasis.opendocument.text-master":{"source":"iana","extensions":["odm"]},"application/vnd.oasis.opendocument.text-template":{"source":"iana","extensions":["ott"]},"application/vnd.oasis.opendocument.text-web":{"source":"iana","extensions":["oth"]},"application/vnd.obn":{"source":"iana"},"application/vnd.ocf+cbor":{"source":"iana"},"application/vnd.oci.image.manifest.v1+json":{"source":"iana","compressible":true},"application/vnd.oftn.l10n+json":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessdownload+xml":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessstreaming+xml":{"source":"iana","compressible":true},"application/vnd.oipf.cspg-hexbinary":{"source":"iana"},"application/vnd.oipf.dae.svg+xml":{"source":"iana","compressible":true},"application/vnd.oipf.dae.xhtml+xml":{"source":"iana","compressible":true},"application/vnd.oipf.mippvcontrolmessage+xml":{"source":"iana","compressible":true},"application/vnd.oipf.pae.gem":{"source":"iana"},"application/vnd.oipf.spdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.oipf.spdlist+xml":{"source":"iana","compressible":true},"application/vnd.oipf.ueprofile+xml":{"source":"iana","compressible":true},"application/vnd.oipf.userprofile+xml":{"source":"iana","compressible":true},"application/vnd.olpc-sugar":{"source":"iana","extensions":["xo"]},"application/vnd.oma-scws-config":{"source":"iana"},"application/vnd.oma-scws-http-request":{"source":"iana"},"application/vnd.oma-scws-http-response":{"source":"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.drm-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.imd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.ltkm":{"source":"iana"},"application/vnd.oma.bcast.notification+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.provisioningtrigger":{"source":"iana"},"application/vnd.oma.bcast.sgboot":{"source":"iana"},"application/vnd.oma.bcast.sgdd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sgdu":{"source":"iana"},"application/vnd.oma.bcast.simple-symbol-container":{"source":"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sprov+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.stkm":{"source":"iana"},"application/vnd.oma.cab-address-book+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-feature-handler+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-pcc+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-subs-invite+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-user-prefs+xml":{"source":"iana","compressible":true},"application/vnd.oma.dcd":{"source":"iana"},"application/vnd.oma.dcdc":{"source":"iana"},"application/vnd.oma.dd2+xml":{"source":"iana","compressible":true,"extensions":["dd2"]},"application/vnd.oma.drm.risd+xml":{"source":"iana","compressible":true},"application/vnd.oma.group-usage-list+xml":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+cbor":{"source":"iana"},"application/vnd.oma.lwm2m+json":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+tlv":{"source":"iana"},"application/vnd.oma.pal+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.detailed-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.final-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.groups+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.invocation-descriptor+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.optimized-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.push":{"source":"iana"},"application/vnd.oma.scidm.messages+xml":{"source":"iana","compressible":true},"application/vnd.oma.xcap-directory+xml":{"source":"iana","compressible":true},"application/vnd.omads-email+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-file+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-folder+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omaloc-supl-init":{"source":"iana"},"application/vnd.onepager":{"source":"iana"},"application/vnd.onepagertamp":{"source":"iana"},"application/vnd.onepagertamx":{"source":"iana"},"application/vnd.onepagertat":{"source":"iana"},"application/vnd.onepagertatp":{"source":"iana"},"application/vnd.onepagertatx":{"source":"iana"},"application/vnd.openblox.game+xml":{"source":"iana","compressible":true,"extensions":["obgx"]},"application/vnd.openblox.game-binary":{"source":"iana"},"application/vnd.openeye.oeb":{"source":"iana"},"application/vnd.openofficeorg.extension":{"source":"apache","extensions":["oxt"]},"application/vnd.openstreetmap.data+xml":{"source":"iana","compressible":true,"extensions":["osm"]},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawing+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{"source":"iana","compressible":false,"extensions":["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slide":{"source":"iana","extensions":["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{"source":"iana","extensions":["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.template":{"source":"iana","extensions":["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"source":"iana","compressible":false,"extensions":["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{"source":"iana","extensions":["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.theme+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.vmldrawing":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{"source":"iana","compressible":false,"extensions":["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{"source":"iana","extensions":["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.core-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.relationships+xml":{"source":"iana","compressible":true},"application/vnd.oracle.resource+json":{"source":"iana","compressible":true},"application/vnd.orange.indata":{"source":"iana"},"application/vnd.osa.netdeploy":{"source":"iana"},"application/vnd.osgeo.mapguide.package":{"source":"iana","extensions":["mgp"]},"application/vnd.osgi.bundle":{"source":"iana"},"application/vnd.osgi.dp":{"source":"iana","extensions":["dp"]},"application/vnd.osgi.subsystem":{"source":"iana","extensions":["esa"]},"application/vnd.otps.ct-kip+xml":{"source":"iana","compressible":true},"application/vnd.oxli.countgraph":{"source":"iana"},"application/vnd.pagerduty+json":{"source":"iana","compressible":true},"application/vnd.palm":{"source":"iana","extensions":["pdb","pqa","oprc"]},"application/vnd.panoply":{"source":"iana"},"application/vnd.paos.xml":{"source":"iana"},"application/vnd.patentdive":{"source":"iana"},"application/vnd.patientecommsdoc":{"source":"iana"},"application/vnd.pawaafile":{"source":"iana","extensions":["paw"]},"application/vnd.pcos":{"source":"iana"},"application/vnd.pg.format":{"source":"iana","extensions":["str"]},"application/vnd.pg.osasli":{"source":"iana","extensions":["ei6"]},"application/vnd.piaccess.application-licence":{"source":"iana"},"application/vnd.picsel":{"source":"iana","extensions":["efif"]},"application/vnd.pmi.widget":{"source":"iana","extensions":["wg"]},"application/vnd.poc.group-advertisement+xml":{"source":"iana","compressible":true},"application/vnd.pocketlearn":{"source":"iana","extensions":["plf"]},"application/vnd.powerbuilder6":{"source":"iana","extensions":["pbd"]},"application/vnd.powerbuilder6-s":{"source":"iana"},"application/vnd.powerbuilder7":{"source":"iana"},"application/vnd.powerbuilder7-s":{"source":"iana"},"application/vnd.powerbuilder75":{"source":"iana"},"application/vnd.powerbuilder75-s":{"source":"iana"},"application/vnd.preminet":{"source":"iana"},"application/vnd.previewsystems.box":{"source":"iana","extensions":["box"]},"application/vnd.proteus.magazine":{"source":"iana","extensions":["mgz"]},"application/vnd.psfs":{"source":"iana"},"application/vnd.publishare-delta-tree":{"source":"iana","extensions":["qps"]},"application/vnd.pvi.ptid1":{"source":"iana","extensions":["ptid"]},"application/vnd.pwg-multiplexed":{"source":"iana"},"application/vnd.pwg-xhtml-print+xml":{"source":"iana","compressible":true},"application/vnd.qualcomm.brew-app-res":{"source":"iana"},"application/vnd.quarantainenet":{"source":"iana"},"application/vnd.quark.quarkxpress":{"source":"iana","extensions":["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{"source":"iana"},"application/vnd.radisys.moml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conn+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-stream+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-base+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-detect+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-group+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-speech+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-transform+xml":{"source":"iana","compressible":true},"application/vnd.rainstor.data":{"source":"iana"},"application/vnd.rapid":{"source":"iana"},"application/vnd.rar":{"source":"iana","extensions":["rar"]},"application/vnd.realvnc.bed":{"source":"iana","extensions":["bed"]},"application/vnd.recordare.musicxml":{"source":"iana","extensions":["mxl"]},"application/vnd.recordare.musicxml+xml":{"source":"iana","compressible":true,"extensions":["musicxml"]},"application/vnd.renlearn.rlprint":{"source":"iana"},"application/vnd.restful+json":{"source":"iana","compressible":true},"application/vnd.rig.cryptonote":{"source":"iana","extensions":["cryptonote"]},"application/vnd.rim.cod":{"source":"apache","extensions":["cod"]},"application/vnd.rn-realmedia":{"source":"apache","extensions":["rm"]},"application/vnd.rn-realmedia-vbr":{"source":"apache","extensions":["rmvb"]},"application/vnd.route66.link66+xml":{"source":"iana","compressible":true,"extensions":["link66"]},"application/vnd.rs-274x":{"source":"iana"},"application/vnd.ruckus.download":{"source":"iana"},"application/vnd.s3sms":{"source":"iana"},"application/vnd.sailingtracker.track":{"source":"iana","extensions":["st"]},"application/vnd.sar":{"source":"iana"},"application/vnd.sbm.cid":{"source":"iana"},"application/vnd.sbm.mid2":{"source":"iana"},"application/vnd.scribus":{"source":"iana"},"application/vnd.sealed.3df":{"source":"iana"},"application/vnd.sealed.csf":{"source":"iana"},"application/vnd.sealed.doc":{"source":"iana"},"application/vnd.sealed.eml":{"source":"iana"},"application/vnd.sealed.mht":{"source":"iana"},"application/vnd.sealed.net":{"source":"iana"},"application/vnd.sealed.ppt":{"source":"iana"},"application/vnd.sealed.tiff":{"source":"iana"},"application/vnd.sealed.xls":{"source":"iana"},"application/vnd.sealedmedia.softseal.html":{"source":"iana"},"application/vnd.sealedmedia.softseal.pdf":{"source":"iana"},"application/vnd.seemail":{"source":"iana","extensions":["see"]},"application/vnd.seis+json":{"source":"iana","compressible":true},"application/vnd.sema":{"source":"iana","extensions":["sema"]},"application/vnd.semd":{"source":"iana","extensions":["semd"]},"application/vnd.semf":{"source":"iana","extensions":["semf"]},"application/vnd.shade-save-file":{"source":"iana"},"application/vnd.shana.informed.formdata":{"source":"iana","extensions":["ifm"]},"application/vnd.shana.informed.formtemplate":{"source":"iana","extensions":["itp"]},"application/vnd.shana.informed.interchange":{"source":"iana","extensions":["iif"]},"application/vnd.shana.informed.package":{"source":"iana","extensions":["ipk"]},"application/vnd.shootproof+json":{"source":"iana","compressible":true},"application/vnd.shopkick+json":{"source":"iana","compressible":true},"application/vnd.shp":{"source":"iana"},"application/vnd.shx":{"source":"iana"},"application/vnd.sigrok.session":{"source":"iana"},"application/vnd.simtech-mindmapper":{"source":"iana","extensions":["twd","twds"]},"application/vnd.siren+json":{"source":"iana","compressible":true},"application/vnd.smaf":{"source":"iana","extensions":["mmf"]},"application/vnd.smart.notebook":{"source":"iana"},"application/vnd.smart.teacher":{"source":"iana","extensions":["teacher"]},"application/vnd.snesdev-page-table":{"source":"iana"},"application/vnd.software602.filler.form+xml":{"source":"iana","compressible":true,"extensions":["fo"]},"application/vnd.software602.filler.form-xml-zip":{"source":"iana"},"application/vnd.solent.sdkm+xml":{"source":"iana","compressible":true,"extensions":["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{"source":"iana","extensions":["dxp"]},"application/vnd.spotfire.sfs":{"source":"iana","extensions":["sfs"]},"application/vnd.sqlite3":{"source":"iana"},"application/vnd.sss-cod":{"source":"iana"},"application/vnd.sss-dtf":{"source":"iana"},"application/vnd.sss-ntf":{"source":"iana"},"application/vnd.stardivision.calc":{"source":"apache","extensions":["sdc"]},"application/vnd.stardivision.draw":{"source":"apache","extensions":["sda"]},"application/vnd.stardivision.impress":{"source":"apache","extensions":["sdd"]},"application/vnd.stardivision.math":{"source":"apache","extensions":["smf"]},"application/vnd.stardivision.writer":{"source":"apache","extensions":["sdw","vor"]},"application/vnd.stardivision.writer-global":{"source":"apache","extensions":["sgl"]},"application/vnd.stepmania.package":{"source":"iana","extensions":["smzip"]},"application/vnd.stepmania.stepchart":{"source":"iana","extensions":["sm"]},"application/vnd.street-stream":{"source":"iana"},"application/vnd.sun.wadl+xml":{"source":"iana","compressible":true,"extensions":["wadl"]},"application/vnd.sun.xml.calc":{"source":"apache","extensions":["sxc"]},"application/vnd.sun.xml.calc.template":{"source":"apache","extensions":["stc"]},"application/vnd.sun.xml.draw":{"source":"apache","extensions":["sxd"]},"application/vnd.sun.xml.draw.template":{"source":"apache","extensions":["std"]},"application/vnd.sun.xml.impress":{"source":"apache","extensions":["sxi"]},"application/vnd.sun.xml.impress.template":{"source":"apache","extensions":["sti"]},"application/vnd.sun.xml.math":{"source":"apache","extensions":["sxm"]},"application/vnd.sun.xml.writer":{"source":"apache","extensions":["sxw"]},"application/vnd.sun.xml.writer.global":{"source":"apache","extensions":["sxg"]},"application/vnd.sun.xml.writer.template":{"source":"apache","extensions":["stw"]},"application/vnd.sus-calendar":{"source":"iana","extensions":["sus","susp"]},"application/vnd.svd":{"source":"iana","extensions":["svd"]},"application/vnd.swiftview-ics":{"source":"iana"},"application/vnd.sycle+xml":{"source":"iana","compressible":true},"application/vnd.symbian.install":{"source":"apache","extensions":["sis","sisx"]},"application/vnd.syncml+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xsm"]},"application/vnd.syncml.dm+wbxml":{"source":"iana","charset":"UTF-8","extensions":["bdm"]},"application/vnd.syncml.dm+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xdm"]},"application/vnd.syncml.dm.notification":{"source":"iana"},"application/vnd.syncml.dmddf+wbxml":{"source":"iana"},"application/vnd.syncml.dmddf+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{"source":"iana"},"application/vnd.syncml.dmtnds+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.syncml.ds.notification":{"source":"iana"},"application/vnd.tableschema+json":{"source":"iana","compressible":true},"application/vnd.tao.intent-module-archive":{"source":"iana","extensions":["tao"]},"application/vnd.tcpdump.pcap":{"source":"iana","extensions":["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{"source":"iana","compressible":true},"application/vnd.tmd.mediaflex.api+xml":{"source":"iana","compressible":true},"application/vnd.tml":{"source":"iana"},"application/vnd.tmobile-livetv":{"source":"iana","extensions":["tmo"]},"application/vnd.tri.onesource":{"source":"iana"},"application/vnd.trid.tpt":{"source":"iana","extensions":["tpt"]},"application/vnd.triscape.mxs":{"source":"iana","extensions":["mxs"]},"application/vnd.trueapp":{"source":"iana","extensions":["tra"]},"application/vnd.truedoc":{"source":"iana"},"application/vnd.ubisoft.webplayer":{"source":"iana"},"application/vnd.ufdl":{"source":"iana","extensions":["ufd","ufdl"]},"application/vnd.uiq.theme":{"source":"iana","extensions":["utz"]},"application/vnd.umajin":{"source":"iana","extensions":["umj"]},"application/vnd.unity":{"source":"iana","extensions":["unityweb"]},"application/vnd.uoml+xml":{"source":"iana","compressible":true,"extensions":["uoml"]},"application/vnd.uplanet.alert":{"source":"iana"},"application/vnd.uplanet.alert-wbxml":{"source":"iana"},"application/vnd.uplanet.bearer-choice":{"source":"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{"source":"iana"},"application/vnd.uplanet.cacheop":{"source":"iana"},"application/vnd.uplanet.cacheop-wbxml":{"source":"iana"},"application/vnd.uplanet.channel":{"source":"iana"},"application/vnd.uplanet.channel-wbxml":{"source":"iana"},"application/vnd.uplanet.list":{"source":"iana"},"application/vnd.uplanet.list-wbxml":{"source":"iana"},"application/vnd.uplanet.listcmd":{"source":"iana"},"application/vnd.uplanet.listcmd-wbxml":{"source":"iana"},"application/vnd.uplanet.signal":{"source":"iana"},"application/vnd.uri-map":{"source":"iana"},"application/vnd.valve.source.material":{"source":"iana"},"application/vnd.vcx":{"source":"iana","extensions":["vcx"]},"application/vnd.vd-study":{"source":"iana"},"application/vnd.vectorworks":{"source":"iana"},"application/vnd.vel+json":{"source":"iana","compressible":true},"application/vnd.verimatrix.vcas":{"source":"iana"},"application/vnd.veryant.thin":{"source":"iana"},"application/vnd.ves.encrypted":{"source":"iana"},"application/vnd.vidsoft.vidconference":{"source":"iana"},"application/vnd.visio":{"source":"iana","extensions":["vsd","vst","vss","vsw"]},"application/vnd.visionary":{"source":"iana","extensions":["vis"]},"application/vnd.vividence.scriptfile":{"source":"iana"},"application/vnd.vsf":{"source":"iana","extensions":["vsf"]},"application/vnd.wap.sic":{"source":"iana"},"application/vnd.wap.slc":{"source":"iana"},"application/vnd.wap.wbxml":{"source":"iana","charset":"UTF-8","extensions":["wbxml"]},"application/vnd.wap.wmlc":{"source":"iana","extensions":["wmlc"]},"application/vnd.wap.wmlscriptc":{"source":"iana","extensions":["wmlsc"]},"application/vnd.webturbo":{"source":"iana","extensions":["wtb"]},"application/vnd.wfa.dpp":{"source":"iana"},"application/vnd.wfa.p2p":{"source":"iana"},"application/vnd.wfa.wsc":{"source":"iana"},"application/vnd.windows.devicepairing":{"source":"iana"},"application/vnd.wmc":{"source":"iana"},"application/vnd.wmf.bootstrap":{"source":"iana"},"application/vnd.wolfram.mathematica":{"source":"iana"},"application/vnd.wolfram.mathematica.package":{"source":"iana"},"application/vnd.wolfram.player":{"source":"iana","extensions":["nbp"]},"application/vnd.wordperfect":{"source":"iana","extensions":["wpd"]},"application/vnd.wqd":{"source":"iana","extensions":["wqd"]},"application/vnd.wrq-hp3000-labelled":{"source":"iana"},"application/vnd.wt.stf":{"source":"iana","extensions":["stf"]},"application/vnd.wv.csp+wbxml":{"source":"iana"},"application/vnd.wv.csp+xml":{"source":"iana","compressible":true},"application/vnd.wv.ssp+xml":{"source":"iana","compressible":true},"application/vnd.xacml+json":{"source":"iana","compressible":true},"application/vnd.xara":{"source":"iana","extensions":["xar"]},"application/vnd.xfdl":{"source":"iana","extensions":["xfdl"]},"application/vnd.xfdl.webform":{"source":"iana"},"application/vnd.xmi+xml":{"source":"iana","compressible":true},"application/vnd.xmpie.cpkg":{"source":"iana"},"application/vnd.xmpie.dpkg":{"source":"iana"},"application/vnd.xmpie.plan":{"source":"iana"},"application/vnd.xmpie.ppkg":{"source":"iana"},"application/vnd.xmpie.xlim":{"source":"iana"},"application/vnd.yamaha.hv-dic":{"source":"iana","extensions":["hvd"]},"application/vnd.yamaha.hv-script":{"source":"iana","extensions":["hvs"]},"application/vnd.yamaha.hv-voice":{"source":"iana","extensions":["hvp"]},"application/vnd.yamaha.openscoreformat":{"source":"iana","extensions":["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{"source":"iana","compressible":true,"extensions":["osfpvg"]},"application/vnd.yamaha.remote-setup":{"source":"iana"},"application/vnd.yamaha.smaf-audio":{"source":"iana","extensions":["saf"]},"application/vnd.yamaha.smaf-phrase":{"source":"iana","extensions":["spf"]},"application/vnd.yamaha.through-ngn":{"source":"iana"},"application/vnd.yamaha.tunnel-udpencap":{"source":"iana"},"application/vnd.yaoweme":{"source":"iana"},"application/vnd.yellowriver-custom-menu":{"source":"iana","extensions":["cmp"]},"application/vnd.youtube.yt":{"source":"iana"},"application/vnd.zul":{"source":"iana","extensions":["zir","zirz"]},"application/vnd.zzazz.deck+xml":{"source":"iana","compressible":true,"extensions":["zaz"]},"application/voicexml+xml":{"source":"iana","compressible":true,"extensions":["vxml"]},"application/voucher-cms+json":{"source":"iana","compressible":true},"application/vq-rtcpxr":{"source":"iana"},"application/wasm":{"compressible":true,"extensions":["wasm"]},"application/watcherinfo+xml":{"source":"iana","compressible":true},"application/webpush-options+json":{"source":"iana","compressible":true},"application/whoispp-query":{"source":"iana"},"application/whoispp-response":{"source":"iana"},"application/widget":{"source":"iana","extensions":["wgt"]},"application/winhlp":{"source":"apache","extensions":["hlp"]},"application/wita":{"source":"iana"},"application/wordperfect5.1":{"source":"iana"},"application/wsdl+xml":{"source":"iana","compressible":true,"extensions":["wsdl"]},"application/wspolicy+xml":{"source":"iana","compressible":true,"extensions":["wspolicy"]},"application/x-7z-compressed":{"source":"apache","compressible":false,"extensions":["7z"]},"application/x-abiword":{"source":"apache","extensions":["abw"]},"application/x-ace-compressed":{"source":"apache","extensions":["ace"]},"application/x-amf":{"source":"apache"},"application/x-apple-diskimage":{"source":"apache","extensions":["dmg"]},"application/x-arj":{"compressible":false,"extensions":["arj"]},"application/x-authorware-bin":{"source":"apache","extensions":["aab","x32","u32","vox"]},"application/x-authorware-map":{"source":"apache","extensions":["aam"]},"application/x-authorware-seg":{"source":"apache","extensions":["aas"]},"application/x-bcpio":{"source":"apache","extensions":["bcpio"]},"application/x-bdoc":{"compressible":false,"extensions":["bdoc"]},"application/x-bittorrent":{"source":"apache","extensions":["torrent"]},"application/x-blorb":{"source":"apache","extensions":["blb","blorb"]},"application/x-bzip":{"source":"apache","compressible":false,"extensions":["bz"]},"application/x-bzip2":{"source":"apache","compressible":false,"extensions":["bz2","boz"]},"application/x-cbr":{"source":"apache","extensions":["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{"source":"apache","extensions":["vcd"]},"application/x-cfs-compressed":{"source":"apache","extensions":["cfs"]},"application/x-chat":{"source":"apache","extensions":["chat"]},"application/x-chess-pgn":{"source":"apache","extensions":["pgn"]},"application/x-chrome-extension":{"extensions":["crx"]},"application/x-cocoa":{"source":"nginx","extensions":["cco"]},"application/x-compress":{"source":"apache"},"application/x-conference":{"source":"apache","extensions":["nsc"]},"application/x-cpio":{"source":"apache","extensions":["cpio"]},"application/x-csh":{"source":"apache","extensions":["csh"]},"application/x-deb":{"compressible":false},"application/x-debian-package":{"source":"apache","extensions":["deb","udeb"]},"application/x-dgc-compressed":{"source":"apache","extensions":["dgc"]},"application/x-director":{"source":"apache","extensions":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{"source":"apache","extensions":["wad"]},"application/x-dtbncx+xml":{"source":"apache","compressible":true,"extensions":["ncx"]},"application/x-dtbook+xml":{"source":"apache","compressible":true,"extensions":["dtb"]},"application/x-dtbresource+xml":{"source":"apache","compressible":true,"extensions":["res"]},"application/x-dvi":{"source":"apache","compressible":false,"extensions":["dvi"]},"application/x-envoy":{"source":"apache","extensions":["evy"]},"application/x-eva":{"source":"apache","extensions":["eva"]},"application/x-font-bdf":{"source":"apache","extensions":["bdf"]},"application/x-font-dos":{"source":"apache"},"application/x-font-framemaker":{"source":"apache"},"application/x-font-ghostscript":{"source":"apache","extensions":["gsf"]},"application/x-font-libgrx":{"source":"apache"},"application/x-font-linux-psf":{"source":"apache","extensions":["psf"]},"application/x-font-pcf":{"source":"apache","extensions":["pcf"]},"application/x-font-snf":{"source":"apache","extensions":["snf"]},"application/x-font-speedo":{"source":"apache"},"application/x-font-sunos-news":{"source":"apache"},"application/x-font-type1":{"source":"apache","extensions":["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{"source":"apache"},"application/x-freearc":{"source":"apache","extensions":["arc"]},"application/x-futuresplash":{"source":"apache","extensions":["spl"]},"application/x-gca-compressed":{"source":"apache","extensions":["gca"]},"application/x-glulx":{"source":"apache","extensions":["ulx"]},"application/x-gnumeric":{"source":"apache","extensions":["gnumeric"]},"application/x-gramps-xml":{"source":"apache","extensions":["gramps"]},"application/x-gtar":{"source":"apache","extensions":["gtar"]},"application/x-gzip":{"source":"apache"},"application/x-hdf":{"source":"apache","extensions":["hdf"]},"application/x-httpd-php":{"compressible":true,"extensions":["php"]},"application/x-install-instructions":{"source":"apache","extensions":["install"]},"application/x-iso9660-image":{"source":"apache","extensions":["iso"]},"application/x-java-archive-diff":{"source":"nginx","extensions":["jardiff"]},"application/x-java-jnlp-file":{"source":"apache","compressible":false,"extensions":["jnlp"]},"application/x-javascript":{"compressible":true},"application/x-keepass2":{"extensions":["kdbx"]},"application/x-latex":{"source":"apache","compressible":false,"extensions":["latex"]},"application/x-lua-bytecode":{"extensions":["luac"]},"application/x-lzh-compressed":{"source":"apache","extensions":["lzh","lha"]},"application/x-makeself":{"source":"nginx","extensions":["run"]},"application/x-mie":{"source":"apache","extensions":["mie"]},"application/x-mobipocket-ebook":{"source":"apache","extensions":["prc","mobi"]},"application/x-mpegurl":{"compressible":false},"application/x-ms-application":{"source":"apache","extensions":["application"]},"application/x-ms-shortcut":{"source":"apache","extensions":["lnk"]},"application/x-ms-wmd":{"source":"apache","extensions":["wmd"]},"application/x-ms-wmz":{"source":"apache","extensions":["wmz"]},"application/x-ms-xbap":{"source":"apache","extensions":["xbap"]},"application/x-msaccess":{"source":"apache","extensions":["mdb"]},"application/x-msbinder":{"source":"apache","extensions":["obd"]},"application/x-mscardfile":{"source":"apache","extensions":["crd"]},"application/x-msclip":{"source":"apache","extensions":["clp"]},"application/x-msdos-program":{"extensions":["exe"]},"application/x-msdownload":{"source":"apache","extensions":["exe","dll","com","bat","msi"]},"application/x-msmediaview":{"source":"apache","extensions":["mvb","m13","m14"]},"application/x-msmetafile":{"source":"apache","extensions":["wmf","wmz","emf","emz"]},"application/x-msmoney":{"source":"apache","extensions":["mny"]},"application/x-mspublisher":{"source":"apache","extensions":["pub"]},"application/x-msschedule":{"source":"apache","extensions":["scd"]},"application/x-msterminal":{"source":"apache","extensions":["trm"]},"application/x-mswrite":{"source":"apache","extensions":["wri"]},"application/x-netcdf":{"source":"apache","extensions":["nc","cdf"]},"application/x-ns-proxy-autoconfig":{"compressible":true,"extensions":["pac"]},"application/x-nzb":{"source":"apache","extensions":["nzb"]},"application/x-perl":{"source":"nginx","extensions":["pl","pm"]},"application/x-pilot":{"source":"nginx","extensions":["prc","pdb"]},"application/x-pkcs12":{"source":"apache","compressible":false,"extensions":["p12","pfx"]},"application/x-pkcs7-certificates":{"source":"apache","extensions":["p7b","spc"]},"application/x-pkcs7-certreqresp":{"source":"apache","extensions":["p7r"]},"application/x-pki-message":{"source":"iana"},"application/x-rar-compressed":{"source":"apache","compressible":false,"extensions":["rar"]},"application/x-redhat-package-manager":{"source":"nginx","extensions":["rpm"]},"application/x-research-info-systems":{"source":"apache","extensions":["ris"]},"application/x-sea":{"source":"nginx","extensions":["sea"]},"application/x-sh":{"source":"apache","compressible":true,"extensions":["sh"]},"application/x-shar":{"source":"apache","extensions":["shar"]},"application/x-shockwave-flash":{"source":"apache","compressible":false,"extensions":["swf"]},"application/x-silverlight-app":{"source":"apache","extensions":["xap"]},"application/x-sql":{"source":"apache","extensions":["sql"]},"application/x-stuffit":{"source":"apache","compressible":false,"extensions":["sit"]},"application/x-stuffitx":{"source":"apache","extensions":["sitx"]},"application/x-subrip":{"source":"apache","extensions":["srt"]},"application/x-sv4cpio":{"source":"apache","extensions":["sv4cpio"]},"application/x-sv4crc":{"source":"apache","extensions":["sv4crc"]},"application/x-t3vm-image":{"source":"apache","extensions":["t3"]},"application/x-tads":{"source":"apache","extensions":["gam"]},"application/x-tar":{"source":"apache","compressible":true,"extensions":["tar"]},"application/x-tcl":{"source":"apache","extensions":["tcl","tk"]},"application/x-tex":{"source":"apache","extensions":["tex"]},"application/x-tex-tfm":{"source":"apache","extensions":["tfm"]},"application/x-texinfo":{"source":"apache","extensions":["texinfo","texi"]},"application/x-tgif":{"source":"apache","extensions":["obj"]},"application/x-ustar":{"source":"apache","extensions":["ustar"]},"application/x-virtualbox-hdd":{"compressible":true,"extensions":["hdd"]},"application/x-virtualbox-ova":{"compressible":true,"extensions":["ova"]},"application/x-virtualbox-ovf":{"compressible":true,"extensions":["ovf"]},"application/x-virtualbox-vbox":{"compressible":true,"extensions":["vbox"]},"application/x-virtualbox-vbox-extpack":{"compressible":false,"extensions":["vbox-extpack"]},"application/x-virtualbox-vdi":{"compressible":true,"extensions":["vdi"]},"application/x-virtualbox-vhd":{"compressible":true,"extensions":["vhd"]},"application/x-virtualbox-vmdk":{"compressible":true,"extensions":["vmdk"]},"application/x-wais-source":{"source":"apache","extensions":["src"]},"application/x-web-app-manifest+json":{"compressible":true,"extensions":["webapp"]},"application/x-www-form-urlencoded":{"source":"iana","compressible":true},"application/x-x509-ca-cert":{"source":"iana","extensions":["der","crt","pem"]},"application/x-x509-ca-ra-cert":{"source":"iana"},"application/x-x509-next-ca-cert":{"source":"iana"},"application/x-xfig":{"source":"apache","extensions":["fig"]},"application/x-xliff+xml":{"source":"apache","compressible":true,"extensions":["xlf"]},"application/x-xpinstall":{"source":"apache","compressible":false,"extensions":["xpi"]},"application/x-xz":{"source":"apache","extensions":["xz"]},"application/x-zmachine":{"source":"apache","extensions":["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{"source":"iana"},"application/xacml+xml":{"source":"iana","compressible":true},"application/xaml+xml":{"source":"apache","compressible":true,"extensions":["xaml"]},"application/xcap-att+xml":{"source":"iana","compressible":true,"extensions":["xav"]},"application/xcap-caps+xml":{"source":"iana","compressible":true,"extensions":["xca"]},"application/xcap-diff+xml":{"source":"iana","compressible":true,"extensions":["xdf"]},"application/xcap-el+xml":{"source":"iana","compressible":true,"extensions":["xel"]},"application/xcap-error+xml":{"source":"iana","compressible":true},"application/xcap-ns+xml":{"source":"iana","compressible":true,"extensions":["xns"]},"application/xcon-conference-info+xml":{"source":"iana","compressible":true},"application/xcon-conference-info-diff+xml":{"source":"iana","compressible":true},"application/xenc+xml":{"source":"iana","compressible":true,"extensions":["xenc"]},"application/xhtml+xml":{"source":"iana","compressible":true,"extensions":["xhtml","xht"]},"application/xhtml-voice+xml":{"source":"apache","compressible":true},"application/xliff+xml":{"source":"iana","compressible":true,"extensions":["xlf"]},"application/xml":{"source":"iana","compressible":true,"extensions":["xml","xsl","xsd","rng"]},"application/xml-dtd":{"source":"iana","compressible":true,"extensions":["dtd"]},"application/xml-external-parsed-entity":{"source":"iana"},"application/xml-patch+xml":{"source":"iana","compressible":true},"application/xmpp+xml":{"source":"iana","compressible":true},"application/xop+xml":{"source":"iana","compressible":true,"extensions":["xop"]},"application/xproc+xml":{"source":"apache","compressible":true,"extensions":["xpl"]},"application/xslt+xml":{"source":"iana","compressible":true,"extensions":["xsl","xslt"]},"application/xspf+xml":{"source":"apache","compressible":true,"extensions":["xspf"]},"application/xv+xml":{"source":"iana","compressible":true,"extensions":["mxml","xhvml","xvml","xvm"]},"application/yang":{"source":"iana","extensions":["yang"]},"application/yang-data+json":{"source":"iana","compressible":true},"application/yang-data+xml":{"source":"iana","compressible":true},"application/yang-patch+json":{"source":"iana","compressible":true},"application/yang-patch+xml":{"source":"iana","compressible":true},"application/yin+xml":{"source":"iana","compressible":true,"extensions":["yin"]},"application/zip":{"source":"iana","compressible":false,"extensions":["zip"]},"application/zlib":{"source":"iana"},"application/zstd":{"source":"iana"},"audio/1d-interleaved-parityfec":{"source":"iana"},"audio/32kadpcm":{"source":"iana"},"audio/3gpp":{"source":"iana","compressible":false,"extensions":["3gpp"]},"audio/3gpp2":{"source":"iana"},"audio/aac":{"source":"iana"},"audio/ac3":{"source":"iana"},"audio/adpcm":{"source":"apache","extensions":["adp"]},"audio/amr":{"source":"iana","extensions":["amr"]},"audio/amr-wb":{"source":"iana"},"audio/amr-wb+":{"source":"iana"},"audio/aptx":{"source":"iana"},"audio/asc":{"source":"iana"},"audio/atrac-advanced-lossless":{"source":"iana"},"audio/atrac-x":{"source":"iana"},"audio/atrac3":{"source":"iana"},"audio/basic":{"source":"iana","compressible":false,"extensions":["au","snd"]},"audio/bv16":{"source":"iana"},"audio/bv32":{"source":"iana"},"audio/clearmode":{"source":"iana"},"audio/cn":{"source":"iana"},"audio/dat12":{"source":"iana"},"audio/dls":{"source":"iana"},"audio/dsr-es201108":{"source":"iana"},"audio/dsr-es202050":{"source":"iana"},"audio/dsr-es202211":{"source":"iana"},"audio/dsr-es202212":{"source":"iana"},"audio/dv":{"source":"iana"},"audio/dvi4":{"source":"iana"},"audio/eac3":{"source":"iana"},"audio/encaprtp":{"source":"iana"},"audio/evrc":{"source":"iana"},"audio/evrc-qcp":{"source":"iana"},"audio/evrc0":{"source":"iana"},"audio/evrc1":{"source":"iana"},"audio/evrcb":{"source":"iana"},"audio/evrcb0":{"source":"iana"},"audio/evrcb1":{"source":"iana"},"audio/evrcnw":{"source":"iana"},"audio/evrcnw0":{"source":"iana"},"audio/evrcnw1":{"source":"iana"},"audio/evrcwb":{"source":"iana"},"audio/evrcwb0":{"source":"iana"},"audio/evrcwb1":{"source":"iana"},"audio/evs":{"source":"iana"},"audio/flexfec":{"source":"iana"},"audio/fwdred":{"source":"iana"},"audio/g711-0":{"source":"iana"},"audio/g719":{"source":"iana"},"audio/g722":{"source":"iana"},"audio/g7221":{"source":"iana"},"audio/g723":{"source":"iana"},"audio/g726-16":{"source":"iana"},"audio/g726-24":{"source":"iana"},"audio/g726-32":{"source":"iana"},"audio/g726-40":{"source":"iana"},"audio/g728":{"source":"iana"},"audio/g729":{"source":"iana"},"audio/g7291":{"source":"iana"},"audio/g729d":{"source":"iana"},"audio/g729e":{"source":"iana"},"audio/gsm":{"source":"iana"},"audio/gsm-efr":{"source":"iana"},"audio/gsm-hr-08":{"source":"iana"},"audio/ilbc":{"source":"iana"},"audio/ip-mr_v2.5":{"source":"iana"},"audio/isac":{"source":"apache"},"audio/l16":{"source":"iana"},"audio/l20":{"source":"iana"},"audio/l24":{"source":"iana","compressible":false},"audio/l8":{"source":"iana"},"audio/lpc":{"source":"iana"},"audio/melp":{"source":"iana"},"audio/melp1200":{"source":"iana"},"audio/melp2400":{"source":"iana"},"audio/melp600":{"source":"iana"},"audio/mhas":{"source":"iana"},"audio/midi":{"source":"apache","extensions":["mid","midi","kar","rmi"]},"audio/mobile-xmf":{"source":"iana","extensions":["mxmf"]},"audio/mp3":{"compressible":false,"extensions":["mp3"]},"audio/mp4":{"source":"iana","compressible":false,"extensions":["m4a","mp4a"]},"audio/mp4a-latm":{"source":"iana"},"audio/mpa":{"source":"iana"},"audio/mpa-robust":{"source":"iana"},"audio/mpeg":{"source":"iana","compressible":false,"extensions":["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{"source":"iana"},"audio/musepack":{"source":"apache"},"audio/ogg":{"source":"iana","compressible":false,"extensions":["oga","ogg","spx","opus"]},"audio/opus":{"source":"iana"},"audio/parityfec":{"source":"iana"},"audio/pcma":{"source":"iana"},"audio/pcma-wb":{"source":"iana"},"audio/pcmu":{"source":"iana"},"audio/pcmu-wb":{"source":"iana"},"audio/prs.sid":{"source":"iana"},"audio/qcelp":{"source":"iana"},"audio/raptorfec":{"source":"iana"},"audio/red":{"source":"iana"},"audio/rtp-enc-aescm128":{"source":"iana"},"audio/rtp-midi":{"source":"iana"},"audio/rtploopback":{"source":"iana"},"audio/rtx":{"source":"iana"},"audio/s3m":{"source":"apache","extensions":["s3m"]},"audio/scip":{"source":"iana"},"audio/silk":{"source":"apache","extensions":["sil"]},"audio/smv":{"source":"iana"},"audio/smv-qcp":{"source":"iana"},"audio/smv0":{"source":"iana"},"audio/sofa":{"source":"iana"},"audio/sp-midi":{"source":"iana"},"audio/speex":{"source":"iana"},"audio/t140c":{"source":"iana"},"audio/t38":{"source":"iana"},"audio/telephone-event":{"source":"iana"},"audio/tetra_acelp":{"source":"iana"},"audio/tetra_acelp_bb":{"source":"iana"},"audio/tone":{"source":"iana"},"audio/tsvcis":{"source":"iana"},"audio/uemclip":{"source":"iana"},"audio/ulpfec":{"source":"iana"},"audio/usac":{"source":"iana"},"audio/vdvi":{"source":"iana"},"audio/vmr-wb":{"source":"iana"},"audio/vnd.3gpp.iufp":{"source":"iana"},"audio/vnd.4sb":{"source":"iana"},"audio/vnd.audiokoz":{"source":"iana"},"audio/vnd.celp":{"source":"iana"},"audio/vnd.cisco.nse":{"source":"iana"},"audio/vnd.cmles.radio-events":{"source":"iana"},"audio/vnd.cns.anp1":{"source":"iana"},"audio/vnd.cns.inf1":{"source":"iana"},"audio/vnd.dece.audio":{"source":"iana","extensions":["uva","uvva"]},"audio/vnd.digital-winds":{"source":"iana","extensions":["eol"]},"audio/vnd.dlna.adts":{"source":"iana"},"audio/vnd.dolby.heaac.1":{"source":"iana"},"audio/vnd.dolby.heaac.2":{"source":"iana"},"audio/vnd.dolby.mlp":{"source":"iana"},"audio/vnd.dolby.mps":{"source":"iana"},"audio/vnd.dolby.pl2":{"source":"iana"},"audio/vnd.dolby.pl2x":{"source":"iana"},"audio/vnd.dolby.pl2z":{"source":"iana"},"audio/vnd.dolby.pulse.1":{"source":"iana"},"audio/vnd.dra":{"source":"iana","extensions":["dra"]},"audio/vnd.dts":{"source":"iana","extensions":["dts"]},"audio/vnd.dts.hd":{"source":"iana","extensions":["dtshd"]},"audio/vnd.dts.uhd":{"source":"iana"},"audio/vnd.dvb.file":{"source":"iana"},"audio/vnd.everad.plj":{"source":"iana"},"audio/vnd.hns.audio":{"source":"iana"},"audio/vnd.lucent.voice":{"source":"iana","extensions":["lvp"]},"audio/vnd.ms-playready.media.pya":{"source":"iana","extensions":["pya"]},"audio/vnd.nokia.mobile-xmf":{"source":"iana"},"audio/vnd.nortel.vbk":{"source":"iana"},"audio/vnd.nuera.ecelp4800":{"source":"iana","extensions":["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{"source":"iana","extensions":["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{"source":"iana","extensions":["ecelp9600"]},"audio/vnd.octel.sbc":{"source":"iana"},"audio/vnd.presonus.multitrack":{"source":"iana"},"audio/vnd.qcelp":{"source":"iana"},"audio/vnd.rhetorex.32kadpcm":{"source":"iana"},"audio/vnd.rip":{"source":"iana","extensions":["rip"]},"audio/vnd.rn-realaudio":{"compressible":false},"audio/vnd.sealedmedia.softseal.mpeg":{"source":"iana"},"audio/vnd.vmx.cvsd":{"source":"iana"},"audio/vnd.wave":{"compressible":false},"audio/vorbis":{"source":"iana","compressible":false},"audio/vorbis-config":{"source":"iana"},"audio/wav":{"compressible":false,"extensions":["wav"]},"audio/wave":{"compressible":false,"extensions":["wav"]},"audio/webm":{"source":"apache","compressible":false,"extensions":["weba"]},"audio/x-aac":{"source":"apache","compressible":false,"extensions":["aac"]},"audio/x-aiff":{"source":"apache","extensions":["aif","aiff","aifc"]},"audio/x-caf":{"source":"apache","compressible":false,"extensions":["caf"]},"audio/x-flac":{"source":"apache","extensions":["flac"]},"audio/x-m4a":{"source":"nginx","extensions":["m4a"]},"audio/x-matroska":{"source":"apache","extensions":["mka"]},"audio/x-mpegurl":{"source":"apache","extensions":["m3u"]},"audio/x-ms-wax":{"source":"apache","extensions":["wax"]},"audio/x-ms-wma":{"source":"apache","extensions":["wma"]},"audio/x-pn-realaudio":{"source":"apache","extensions":["ram","ra"]},"audio/x-pn-realaudio-plugin":{"source":"apache","extensions":["rmp"]},"audio/x-realaudio":{"source":"nginx","extensions":["ra"]},"audio/x-tta":{"source":"apache"},"audio/x-wav":{"source":"apache","extensions":["wav"]},"audio/xm":{"source":"apache","extensions":["xm"]},"chemical/x-cdx":{"source":"apache","extensions":["cdx"]},"chemical/x-cif":{"source":"apache","extensions":["cif"]},"chemical/x-cmdf":{"source":"apache","extensions":["cmdf"]},"chemical/x-cml":{"source":"apache","extensions":["cml"]},"chemical/x-csml":{"source":"apache","extensions":["csml"]},"chemical/x-pdb":{"source":"apache"},"chemical/x-xyz":{"source":"apache","extensions":["xyz"]},"font/collection":{"source":"iana","extensions":["ttc"]},"font/otf":{"source":"iana","compressible":true,"extensions":["otf"]},"font/sfnt":{"source":"iana"},"font/ttf":{"source":"iana","compressible":true,"extensions":["ttf"]},"font/woff":{"source":"iana","extensions":["woff"]},"font/woff2":{"source":"iana","extensions":["woff2"]},"image/aces":{"source":"iana","extensions":["exr"]},"image/apng":{"compressible":false,"extensions":["apng"]},"image/avci":{"source":"iana"},"image/avcs":{"source":"iana"},"image/avif":{"source":"iana","compressible":false,"extensions":["avif"]},"image/bmp":{"source":"iana","compressible":true,"extensions":["bmp"]},"image/cgm":{"source":"iana","extensions":["cgm"]},"image/dicom-rle":{"source":"iana","extensions":["drle"]},"image/emf":{"source":"iana","extensions":["emf"]},"image/fits":{"source":"iana","extensions":["fits"]},"image/g3fax":{"source":"iana","extensions":["g3"]},"image/gif":{"source":"iana","compressible":false,"extensions":["gif"]},"image/heic":{"source":"iana","extensions":["heic"]},"image/heic-sequence":{"source":"iana","extensions":["heics"]},"image/heif":{"source":"iana","extensions":["heif"]},"image/heif-sequence":{"source":"iana","extensions":["heifs"]},"image/hej2k":{"source":"iana","extensions":["hej2"]},"image/hsj2":{"source":"iana","extensions":["hsj2"]},"image/ief":{"source":"iana","extensions":["ief"]},"image/jls":{"source":"iana","extensions":["jls"]},"image/jp2":{"source":"iana","compressible":false,"extensions":["jp2","jpg2"]},"image/jpeg":{"source":"iana","compressible":false,"extensions":["jpeg","jpg","jpe"]},"image/jph":{"source":"iana","extensions":["jph"]},"image/jphc":{"source":"iana","extensions":["jhc"]},"image/jpm":{"source":"iana","compressible":false,"extensions":["jpm"]},"image/jpx":{"source":"iana","compressible":false,"extensions":["jpx","jpf"]},"image/jxr":{"source":"iana","extensions":["jxr"]},"image/jxra":{"source":"iana","extensions":["jxra"]},"image/jxrs":{"source":"iana","extensions":["jxrs"]},"image/jxs":{"source":"iana","extensions":["jxs"]},"image/jxsc":{"source":"iana","extensions":["jxsc"]},"image/jxsi":{"source":"iana","extensions":["jxsi"]},"image/jxss":{"source":"iana","extensions":["jxss"]},"image/ktx":{"source":"iana","extensions":["ktx"]},"image/ktx2":{"source":"iana","extensions":["ktx2"]},"image/naplps":{"source":"iana"},"image/pjpeg":{"compressible":false},"image/png":{"source":"iana","compressible":false,"extensions":["png"]},"image/prs.btif":{"source":"iana","extensions":["btif"]},"image/prs.pti":{"source":"iana","extensions":["pti"]},"image/pwg-raster":{"source":"iana"},"image/sgi":{"source":"apache","extensions":["sgi"]},"image/svg+xml":{"source":"iana","compressible":true,"extensions":["svg","svgz"]},"image/t38":{"source":"iana","extensions":["t38"]},"image/tiff":{"source":"iana","compressible":false,"extensions":["tif","tiff"]},"image/tiff-fx":{"source":"iana","extensions":["tfx"]},"image/vnd.adobe.photoshop":{"source":"iana","compressible":true,"extensions":["psd"]},"image/vnd.airzip.accelerator.azv":{"source":"iana","extensions":["azv"]},"image/vnd.cns.inf2":{"source":"iana"},"image/vnd.dece.graphic":{"source":"iana","extensions":["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{"source":"iana","extensions":["djvu","djv"]},"image/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"image/vnd.dwg":{"source":"iana","extensions":["dwg"]},"image/vnd.dxf":{"source":"iana","extensions":["dxf"]},"image/vnd.fastbidsheet":{"source":"iana","extensions":["fbs"]},"image/vnd.fpx":{"source":"iana","extensions":["fpx"]},"image/vnd.fst":{"source":"iana","extensions":["fst"]},"image/vnd.fujixerox.edmics-mmr":{"source":"iana","extensions":["mmr"]},"image/vnd.fujixerox.edmics-rlc":{"source":"iana","extensions":["rlc"]},"image/vnd.globalgraphics.pgb":{"source":"iana"},"image/vnd.microsoft.icon":{"source":"iana","extensions":["ico"]},"image/vnd.mix":{"source":"iana"},"image/vnd.mozilla.apng":{"source":"iana"},"image/vnd.ms-dds":{"extensions":["dds"]},"image/vnd.ms-modi":{"source":"iana","extensions":["mdi"]},"image/vnd.ms-photo":{"source":"apache","extensions":["wdp"]},"image/vnd.net-fpx":{"source":"iana","extensions":["npx"]},"image/vnd.pco.b16":{"source":"iana","extensions":["b16"]},"image/vnd.radiance":{"source":"iana"},"image/vnd.sealed.png":{"source":"iana"},"image/vnd.sealedmedia.softseal.gif":{"source":"iana"},"image/vnd.sealedmedia.softseal.jpg":{"source":"iana"},"image/vnd.svf":{"source":"iana"},"image/vnd.tencent.tap":{"source":"iana","extensions":["tap"]},"image/vnd.valve.source.texture":{"source":"iana","extensions":["vtf"]},"image/vnd.wap.wbmp":{"source":"iana","extensions":["wbmp"]},"image/vnd.xiff":{"source":"iana","extensions":["xif"]},"image/vnd.zbrush.pcx":{"source":"iana","extensions":["pcx"]},"image/webp":{"source":"apache","extensions":["webp"]},"image/wmf":{"source":"iana","extensions":["wmf"]},"image/x-3ds":{"source":"apache","extensions":["3ds"]},"image/x-cmu-raster":{"source":"apache","extensions":["ras"]},"image/x-cmx":{"source":"apache","extensions":["cmx"]},"image/x-freehand":{"source":"apache","extensions":["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{"source":"apache","compressible":true,"extensions":["ico"]},"image/x-jng":{"source":"nginx","extensions":["jng"]},"image/x-mrsid-image":{"source":"apache","extensions":["sid"]},"image/x-ms-bmp":{"source":"nginx","compressible":true,"extensions":["bmp"]},"image/x-pcx":{"source":"apache","extensions":["pcx"]},"image/x-pict":{"source":"apache","extensions":["pic","pct"]},"image/x-portable-anymap":{"source":"apache","extensions":["pnm"]},"image/x-portable-bitmap":{"source":"apache","extensions":["pbm"]},"image/x-portable-graymap":{"source":"apache","extensions":["pgm"]},"image/x-portable-pixmap":{"source":"apache","extensions":["ppm"]},"image/x-rgb":{"source":"apache","extensions":["rgb"]},"image/x-tga":{"source":"apache","extensions":["tga"]},"image/x-xbitmap":{"source":"apache","extensions":["xbm"]},"image/x-xcf":{"compressible":false},"image/x-xpixmap":{"source":"apache","extensions":["xpm"]},"image/x-xwindowdump":{"source":"apache","extensions":["xwd"]},"message/cpim":{"source":"iana"},"message/delivery-status":{"source":"iana"},"message/disposition-notification":{"source":"iana","extensions":["disposition-notification"]},"message/external-body":{"source":"iana"},"message/feedback-report":{"source":"iana"},"message/global":{"source":"iana","extensions":["u8msg"]},"message/global-delivery-status":{"source":"iana","extensions":["u8dsn"]},"message/global-disposition-notification":{"source":"iana","extensions":["u8mdn"]},"message/global-headers":{"source":"iana","extensions":["u8hdr"]},"message/http":{"source":"iana","compressible":false},"message/imdn+xml":{"source":"iana","compressible":true},"message/news":{"source":"iana"},"message/partial":{"source":"iana","compressible":false},"message/rfc822":{"source":"iana","compressible":true,"extensions":["eml","mime"]},"message/s-http":{"source":"iana"},"message/sip":{"source":"iana"},"message/sipfrag":{"source":"iana"},"message/tracking-status":{"source":"iana"},"message/vnd.si.simp":{"source":"iana"},"message/vnd.wfa.wsc":{"source":"iana","extensions":["wsc"]},"model/3mf":{"source":"iana","extensions":["3mf"]},"model/e57":{"source":"iana"},"model/gltf+json":{"source":"iana","compressible":true,"extensions":["gltf"]},"model/gltf-binary":{"source":"iana","compressible":true,"extensions":["glb"]},"model/iges":{"source":"iana","compressible":false,"extensions":["igs","iges"]},"model/mesh":{"source":"iana","compressible":false,"extensions":["msh","mesh","silo"]},"model/mtl":{"source":"iana","extensions":["mtl"]},"model/obj":{"source":"iana","extensions":["obj"]},"model/stl":{"source":"iana","extensions":["stl"]},"model/vnd.collada+xml":{"source":"iana","compressible":true,"extensions":["dae"]},"model/vnd.dwf":{"source":"iana","extensions":["dwf"]},"model/vnd.flatland.3dml":{"source":"iana"},"model/vnd.gdl":{"source":"iana","extensions":["gdl"]},"model/vnd.gs-gdl":{"source":"apache"},"model/vnd.gs.gdl":{"source":"iana"},"model/vnd.gtw":{"source":"iana","extensions":["gtw"]},"model/vnd.moml+xml":{"source":"iana","compressible":true},"model/vnd.mts":{"source":"iana","extensions":["mts"]},"model/vnd.opengex":{"source":"iana","extensions":["ogex"]},"model/vnd.parasolid.transmit.binary":{"source":"iana","extensions":["x_b"]},"model/vnd.parasolid.transmit.text":{"source":"iana","extensions":["x_t"]},"model/vnd.rosette.annotated-data-model":{"source":"iana"},"model/vnd.sap.vds":{"source":"iana","extensions":["vds"]},"model/vnd.usdz+zip":{"source":"iana","compressible":false,"extensions":["usdz"]},"model/vnd.valve.source.compiled-map":{"source":"iana","extensions":["bsp"]},"model/vnd.vtu":{"source":"iana","extensions":["vtu"]},"model/vrml":{"source":"iana","compressible":false,"extensions":["wrl","vrml"]},"model/x3d+binary":{"source":"apache","compressible":false,"extensions":["x3db","x3dbz"]},"model/x3d+fastinfoset":{"source":"iana","extensions":["x3db"]},"model/x3d+vrml":{"source":"apache","compressible":false,"extensions":["x3dv","x3dvz"]},"model/x3d+xml":{"source":"iana","compressible":true,"extensions":["x3d","x3dz"]},"model/x3d-vrml":{"source":"iana","extensions":["x3dv"]},"multipart/alternative":{"source":"iana","compressible":false},"multipart/appledouble":{"source":"iana"},"multipart/byteranges":{"source":"iana"},"multipart/digest":{"source":"iana"},"multipart/encrypted":{"source":"iana","compressible":false},"multipart/form-data":{"source":"iana","compressible":false},"multipart/header-set":{"source":"iana"},"multipart/mixed":{"source":"iana"},"multipart/multilingual":{"source":"iana"},"multipart/parallel":{"source":"iana"},"multipart/related":{"source":"iana","compressible":false},"multipart/report":{"source":"iana"},"multipart/signed":{"source":"iana","compressible":false},"multipart/vnd.bint.med-plus":{"source":"iana"},"multipart/voice-message":{"source":"iana"},"multipart/x-mixed-replace":{"source":"iana"},"text/1d-interleaved-parityfec":{"source":"iana"},"text/cache-manifest":{"source":"iana","compressible":true,"extensions":["appcache","manifest"]},"text/calendar":{"source":"iana","extensions":["ics","ifb"]},"text/calender":{"compressible":true},"text/cmd":{"compressible":true},"text/coffeescript":{"extensions":["coffee","litcoffee"]},"text/cql":{"source":"iana"},"text/cql-expression":{"source":"iana"},"text/cql-identifier":{"source":"iana"},"text/css":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["css"]},"text/csv":{"source":"iana","compressible":true,"extensions":["csv"]},"text/csv-schema":{"source":"iana"},"text/directory":{"source":"iana"},"text/dns":{"source":"iana"},"text/ecmascript":{"source":"iana"},"text/encaprtp":{"source":"iana"},"text/enriched":{"source":"iana"},"text/fhirpath":{"source":"iana"},"text/flexfec":{"source":"iana"},"text/fwdred":{"source":"iana"},"text/gff3":{"source":"iana"},"text/grammar-ref-list":{"source":"iana"},"text/html":{"source":"iana","compressible":true,"extensions":["html","htm","shtml"]},"text/jade":{"extensions":["jade"]},"text/javascript":{"source":"iana","compressible":true},"text/jcr-cnd":{"source":"iana"},"text/jsx":{"compressible":true,"extensions":["jsx"]},"text/less":{"compressible":true,"extensions":["less"]},"text/markdown":{"source":"iana","compressible":true,"extensions":["markdown","md"]},"text/mathml":{"source":"nginx","extensions":["mml"]},"text/mdx":{"compressible":true,"extensions":["mdx"]},"text/mizar":{"source":"iana"},"text/n3":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["n3"]},"text/parameters":{"source":"iana","charset":"UTF-8"},"text/parityfec":{"source":"iana"},"text/plain":{"source":"iana","compressible":true,"extensions":["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{"source":"iana","charset":"UTF-8"},"text/prs.fallenstein.rst":{"source":"iana"},"text/prs.lines.tag":{"source":"iana","extensions":["dsc"]},"text/prs.prop.logic":{"source":"iana"},"text/raptorfec":{"source":"iana"},"text/red":{"source":"iana"},"text/rfc822-headers":{"source":"iana"},"text/richtext":{"source":"iana","compressible":true,"extensions":["rtx"]},"text/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"text/rtp-enc-aescm128":{"source":"iana"},"text/rtploopback":{"source":"iana"},"text/rtx":{"source":"iana"},"text/sgml":{"source":"iana","extensions":["sgml","sgm"]},"text/shaclc":{"source":"iana"},"text/shex":{"extensions":["shex"]},"text/slim":{"extensions":["slim","slm"]},"text/spdx":{"source":"iana","extensions":["spdx"]},"text/strings":{"source":"iana"},"text/stylus":{"extensions":["stylus","styl"]},"text/t140":{"source":"iana"},"text/tab-separated-values":{"source":"iana","compressible":true,"extensions":["tsv"]},"text/troff":{"source":"iana","extensions":["t","tr","roff","man","me","ms"]},"text/turtle":{"source":"iana","charset":"UTF-8","extensions":["ttl"]},"text/ulpfec":{"source":"iana"},"text/uri-list":{"source":"iana","compressible":true,"extensions":["uri","uris","urls"]},"text/vcard":{"source":"iana","compressible":true,"extensions":["vcard"]},"text/vnd.a":{"source":"iana"},"text/vnd.abc":{"source":"iana"},"text/vnd.ascii-art":{"source":"iana"},"text/vnd.curl":{"source":"iana","extensions":["curl"]},"text/vnd.curl.dcurl":{"source":"apache","extensions":["dcurl"]},"text/vnd.curl.mcurl":{"source":"apache","extensions":["mcurl"]},"text/vnd.curl.scurl":{"source":"apache","extensions":["scurl"]},"text/vnd.debian.copyright":{"source":"iana","charset":"UTF-8"},"text/vnd.dmclientscript":{"source":"iana"},"text/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"text/vnd.esmertec.theme-descriptor":{"source":"iana","charset":"UTF-8"},"text/vnd.ficlab.flt":{"source":"iana"},"text/vnd.fly":{"source":"iana","extensions":["fly"]},"text/vnd.fmi.flexstor":{"source":"iana","extensions":["flx"]},"text/vnd.gml":{"source":"iana"},"text/vnd.graphviz":{"source":"iana","extensions":["gv"]},"text/vnd.hans":{"source":"iana"},"text/vnd.hgl":{"source":"iana"},"text/vnd.in3d.3dml":{"source":"iana","extensions":["3dml"]},"text/vnd.in3d.spot":{"source":"iana","extensions":["spot"]},"text/vnd.iptc.newsml":{"source":"iana"},"text/vnd.iptc.nitf":{"source":"iana"},"text/vnd.latex-z":{"source":"iana"},"text/vnd.motorola.reflex":{"source":"iana"},"text/vnd.ms-mediapackage":{"source":"iana"},"text/vnd.net2phone.commcenter.command":{"source":"iana"},"text/vnd.radisys.msml-basic-layout":{"source":"iana"},"text/vnd.senx.warpscript":{"source":"iana"},"text/vnd.si.uricatalogue":{"source":"iana"},"text/vnd.sosi":{"source":"iana"},"text/vnd.sun.j2me.app-descriptor":{"source":"iana","charset":"UTF-8","extensions":["jad"]},"text/vnd.trolltech.linguist":{"source":"iana","charset":"UTF-8"},"text/vnd.wap.si":{"source":"iana"},"text/vnd.wap.sl":{"source":"iana"},"text/vnd.wap.wml":{"source":"iana","extensions":["wml"]},"text/vnd.wap.wmlscript":{"source":"iana","extensions":["wmls"]},"text/vtt":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["vtt"]},"text/x-asm":{"source":"apache","extensions":["s","asm"]},"text/x-c":{"source":"apache","extensions":["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{"source":"nginx","extensions":["htc"]},"text/x-fortran":{"source":"apache","extensions":["f","for","f77","f90"]},"text/x-gwt-rpc":{"compressible":true},"text/x-handlebars-template":{"extensions":["hbs"]},"text/x-java-source":{"source":"apache","extensions":["java"]},"text/x-jquery-tmpl":{"compressible":true},"text/x-lua":{"extensions":["lua"]},"text/x-markdown":{"compressible":true,"extensions":["mkd"]},"text/x-nfo":{"source":"apache","extensions":["nfo"]},"text/x-opml":{"source":"apache","extensions":["opml"]},"text/x-org":{"compressible":true,"extensions":["org"]},"text/x-pascal":{"source":"apache","extensions":["p","pas"]},"text/x-processing":{"compressible":true,"extensions":["pde"]},"text/x-sass":{"extensions":["sass"]},"text/x-scss":{"extensions":["scss"]},"text/x-setext":{"source":"apache","extensions":["etx"]},"text/x-sfv":{"source":"apache","extensions":["sfv"]},"text/x-suse-ymp":{"compressible":true,"extensions":["ymp"]},"text/x-uuencode":{"source":"apache","extensions":["uu"]},"text/x-vcalendar":{"source":"apache","extensions":["vcs"]},"text/x-vcard":{"source":"apache","extensions":["vcf"]},"text/xml":{"source":"iana","compressible":true,"extensions":["xml"]},"text/xml-external-parsed-entity":{"source":"iana"},"text/yaml":{"extensions":["yaml","yml"]},"video/1d-interleaved-parityfec":{"source":"iana"},"video/3gpp":{"source":"iana","extensions":["3gp","3gpp"]},"video/3gpp-tt":{"source":"iana"},"video/3gpp2":{"source":"iana","extensions":["3g2"]},"video/av1":{"source":"iana"},"video/bmpeg":{"source":"iana"},"video/bt656":{"source":"iana"},"video/celb":{"source":"iana"},"video/dv":{"source":"iana"},"video/encaprtp":{"source":"iana"},"video/ffv1":{"source":"iana"},"video/flexfec":{"source":"iana"},"video/h261":{"source":"iana","extensions":["h261"]},"video/h263":{"source":"iana","extensions":["h263"]},"video/h263-1998":{"source":"iana"},"video/h263-2000":{"source":"iana"},"video/h264":{"source":"iana","extensions":["h264"]},"video/h264-rcdo":{"source":"iana"},"video/h264-svc":{"source":"iana"},"video/h265":{"source":"iana"},"video/iso.segment":{"source":"iana","extensions":["m4s"]},"video/jpeg":{"source":"iana","extensions":["jpgv"]},"video/jpeg2000":{"source":"iana"},"video/jpm":{"source":"apache","extensions":["jpm","jpgm"]},"video/mj2":{"source":"iana","extensions":["mj2","mjp2"]},"video/mp1s":{"source":"iana"},"video/mp2p":{"source":"iana"},"video/mp2t":{"source":"iana","extensions":["ts"]},"video/mp4":{"source":"iana","compressible":false,"extensions":["mp4","mp4v","mpg4"]},"video/mp4v-es":{"source":"iana"},"video/mpeg":{"source":"iana","compressible":false,"extensions":["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{"source":"iana"},"video/mpv":{"source":"iana"},"video/nv":{"source":"iana"},"video/ogg":{"source":"iana","compressible":false,"extensions":["ogv"]},"video/parityfec":{"source":"iana"},"video/pointer":{"source":"iana"},"video/quicktime":{"source":"iana","compressible":false,"extensions":["qt","mov"]},"video/raptorfec":{"source":"iana"},"video/raw":{"source":"iana"},"video/rtp-enc-aescm128":{"source":"iana"},"video/rtploopback":{"source":"iana"},"video/rtx":{"source":"iana"},"video/scip":{"source":"iana"},"video/smpte291":{"source":"iana"},"video/smpte292m":{"source":"iana"},"video/ulpfec":{"source":"iana"},"video/vc1":{"source":"iana"},"video/vc2":{"source":"iana"},"video/vnd.cctv":{"source":"iana"},"video/vnd.dece.hd":{"source":"iana","extensions":["uvh","uvvh"]},"video/vnd.dece.mobile":{"source":"iana","extensions":["uvm","uvvm"]},"video/vnd.dece.mp4":{"source":"iana"},"video/vnd.dece.pd":{"source":"iana","extensions":["uvp","uvvp"]},"video/vnd.dece.sd":{"source":"iana","extensions":["uvs","uvvs"]},"video/vnd.dece.video":{"source":"iana","extensions":["uvv","uvvv"]},"video/vnd.directv.mpeg":{"source":"iana"},"video/vnd.directv.mpeg-tts":{"source":"iana"},"video/vnd.dlna.mpeg-tts":{"source":"iana"},"video/vnd.dvb.file":{"source":"iana","extensions":["dvb"]},"video/vnd.fvt":{"source":"iana","extensions":["fvt"]},"video/vnd.hns.video":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.ttsavc":{"source":"iana"},"video/vnd.iptvforum.ttsmpeg2":{"source":"iana"},"video/vnd.motorola.video":{"source":"iana"},"video/vnd.motorola.videop":{"source":"iana"},"video/vnd.mpegurl":{"source":"iana","extensions":["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{"source":"iana","extensions":["pyv"]},"video/vnd.nokia.interleaved-multimedia":{"source":"iana"},"video/vnd.nokia.mp4vr":{"source":"iana"},"video/vnd.nokia.videovoip":{"source":"iana"},"video/vnd.objectvideo":{"source":"iana"},"video/vnd.radgamettools.bink":{"source":"iana"},"video/vnd.radgamettools.smacker":{"source":"iana"},"video/vnd.sealed.mpeg1":{"source":"iana"},"video/vnd.sealed.mpeg4":{"source":"iana"},"video/vnd.sealed.swf":{"source":"iana"},"video/vnd.sealedmedia.softseal.mov":{"source":"iana"},"video/vnd.uvvu.mp4":{"source":"iana","extensions":["uvu","uvvu"]},"video/vnd.vivo":{"source":"iana","extensions":["viv"]},"video/vnd.youtube.yt":{"source":"iana"},"video/vp8":{"source":"iana"},"video/webm":{"source":"apache","compressible":false,"extensions":["webm"]},"video/x-f4v":{"source":"apache","extensions":["f4v"]},"video/x-fli":{"source":"apache","extensions":["fli"]},"video/x-flv":{"source":"apache","compressible":false,"extensions":["flv"]},"video/x-m4v":{"source":"apache","extensions":["m4v"]},"video/x-matroska":{"source":"apache","compressible":false,"extensions":["mkv","mk3d","mks"]},"video/x-mng":{"source":"apache","extensions":["mng"]},"video/x-ms-asf":{"source":"apache","extensions":["asf","asx"]},"video/x-ms-vob":{"source":"apache","extensions":["vob"]},"video/x-ms-wm":{"source":"apache","extensions":["wm"]},"video/x-ms-wmv":{"source":"apache","compressible":false,"extensions":["wmv"]},"video/x-ms-wmx":{"source":"apache","extensions":["wmx"]},"video/x-ms-wvx":{"source":"apache","extensions":["wvx"]},"video/x-msvideo":{"source":"apache","extensions":["avi"]},"video/x-sgi-movie":{"source":"apache","extensions":["movie"]},"video/x-smv":{"source":"apache","extensions":["smv"]},"x-conference/x-cooltalk":{"source":"apache","extensions":["ice"]},"x-shader/x-fragment":{"compressible":true},"x-shader/x-vertex":{"compressible":true}}')},450:a=>{"use strict";a.exports=JSON.parse('{"application/1d-interleaved-parityfec":{"source":"iana"},"application/3gpdash-qoe-report+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/3gpp-ims+xml":{"source":"iana","compressible":true},"application/3gpphal+json":{"source":"iana","compressible":true},"application/3gpphalforms+json":{"source":"iana","compressible":true},"application/a2l":{"source":"iana"},"application/ace+cbor":{"source":"iana"},"application/activemessage":{"source":"iana"},"application/activity+json":{"source":"iana","compressible":true},"application/alto-costmap+json":{"source":"iana","compressible":true},"application/alto-costmapfilter+json":{"source":"iana","compressible":true},"application/alto-directory+json":{"source":"iana","compressible":true},"application/alto-endpointcost+json":{"source":"iana","compressible":true},"application/alto-endpointcostparams+json":{"source":"iana","compressible":true},"application/alto-endpointprop+json":{"source":"iana","compressible":true},"application/alto-endpointpropparams+json":{"source":"iana","compressible":true},"application/alto-error+json":{"source":"iana","compressible":true},"application/alto-networkmap+json":{"source":"iana","compressible":true},"application/alto-networkmapfilter+json":{"source":"iana","compressible":true},"application/alto-updatestreamcontrol+json":{"source":"iana","compressible":true},"application/alto-updatestreamparams+json":{"source":"iana","compressible":true},"application/aml":{"source":"iana"},"application/andrew-inset":{"source":"iana","extensions":["ez"]},"application/applefile":{"source":"iana"},"application/applixware":{"source":"apache","extensions":["aw"]},"application/at+jwt":{"source":"iana"},"application/atf":{"source":"iana"},"application/atfx":{"source":"iana"},"application/atom+xml":{"source":"iana","compressible":true,"extensions":["atom"]},"application/atomcat+xml":{"source":"iana","compressible":true,"extensions":["atomcat"]},"application/atomdeleted+xml":{"source":"iana","compressible":true,"extensions":["atomdeleted"]},"application/atomicmail":{"source":"iana"},"application/atomsvc+xml":{"source":"iana","compressible":true,"extensions":["atomsvc"]},"application/atsc-dwd+xml":{"source":"iana","compressible":true,"extensions":["dwd"]},"application/atsc-dynamic-event-message":{"source":"iana"},"application/atsc-held+xml":{"source":"iana","compressible":true,"extensions":["held"]},"application/atsc-rdt+json":{"source":"iana","compressible":true},"application/atsc-rsat+xml":{"source":"iana","compressible":true,"extensions":["rsat"]},"application/atxml":{"source":"iana"},"application/auth-policy+xml":{"source":"iana","compressible":true},"application/bacnet-xdd+zip":{"source":"iana","compressible":false},"application/batch-smtp":{"source":"iana"},"application/bdoc":{"compressible":false,"extensions":["bdoc"]},"application/beep+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/calendar+json":{"source":"iana","compressible":true},"application/calendar+xml":{"source":"iana","compressible":true,"extensions":["xcs"]},"application/call-completion":{"source":"iana"},"application/cals-1840":{"source":"iana"},"application/captive+json":{"source":"iana","compressible":true},"application/cbor":{"source":"iana"},"application/cbor-seq":{"source":"iana"},"application/cccex":{"source":"iana"},"application/ccmp+xml":{"source":"iana","compressible":true},"application/ccxml+xml":{"source":"iana","compressible":true,"extensions":["ccxml"]},"application/cdfx+xml":{"source":"iana","compressible":true,"extensions":["cdfx"]},"application/cdmi-capability":{"source":"iana","extensions":["cdmia"]},"application/cdmi-container":{"source":"iana","extensions":["cdmic"]},"application/cdmi-domain":{"source":"iana","extensions":["cdmid"]},"application/cdmi-object":{"source":"iana","extensions":["cdmio"]},"application/cdmi-queue":{"source":"iana","extensions":["cdmiq"]},"application/cdni":{"source":"iana"},"application/cea":{"source":"iana"},"application/cea-2018+xml":{"source":"iana","compressible":true},"application/cellml+xml":{"source":"iana","compressible":true},"application/cfw":{"source":"iana"},"application/city+json":{"source":"iana","compressible":true},"application/clr":{"source":"iana"},"application/clue+xml":{"source":"iana","compressible":true},"application/clue_info+xml":{"source":"iana","compressible":true},"application/cms":{"source":"iana"},"application/cnrp+xml":{"source":"iana","compressible":true},"application/coap-group+json":{"source":"iana","compressible":true},"application/coap-payload":{"source":"iana"},"application/commonground":{"source":"iana"},"application/conference-info+xml":{"source":"iana","compressible":true},"application/cose":{"source":"iana"},"application/cose-key":{"source":"iana"},"application/cose-key-set":{"source":"iana"},"application/cpl+xml":{"source":"iana","compressible":true,"extensions":["cpl"]},"application/csrattrs":{"source":"iana"},"application/csta+xml":{"source":"iana","compressible":true},"application/cstadata+xml":{"source":"iana","compressible":true},"application/csvm+json":{"source":"iana","compressible":true},"application/cu-seeme":{"source":"apache","extensions":["cu"]},"application/cwt":{"source":"iana"},"application/cybercash":{"source":"iana"},"application/dart":{"compressible":true},"application/dash+xml":{"source":"iana","compressible":true,"extensions":["mpd"]},"application/dash-patch+xml":{"source":"iana","compressible":true,"extensions":["mpp"]},"application/dashdelta":{"source":"iana"},"application/davmount+xml":{"source":"iana","compressible":true,"extensions":["davmount"]},"application/dca-rft":{"source":"iana"},"application/dcd":{"source":"iana"},"application/dec-dx":{"source":"iana"},"application/dialog-info+xml":{"source":"iana","compressible":true},"application/dicom":{"source":"iana"},"application/dicom+json":{"source":"iana","compressible":true},"application/dicom+xml":{"source":"iana","compressible":true},"application/dii":{"source":"iana"},"application/dit":{"source":"iana"},"application/dns":{"source":"iana"},"application/dns+json":{"source":"iana","compressible":true},"application/dns-message":{"source":"iana"},"application/docbook+xml":{"source":"apache","compressible":true,"extensions":["dbk"]},"application/dots+cbor":{"source":"iana"},"application/dskpp+xml":{"source":"iana","compressible":true},"application/dssc+der":{"source":"iana","extensions":["dssc"]},"application/dssc+xml":{"source":"iana","compressible":true,"extensions":["xdssc"]},"application/dvcs":{"source":"iana"},"application/ecmascript":{"source":"iana","compressible":true,"extensions":["es","ecma"]},"application/edi-consent":{"source":"iana"},"application/edi-x12":{"source":"iana","compressible":false},"application/edifact":{"source":"iana","compressible":false},"application/efi":{"source":"iana"},"application/elm+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/elm+xml":{"source":"iana","compressible":true},"application/emergencycalldata.cap+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/emergencycalldata.comment+xml":{"source":"iana","compressible":true},"application/emergencycalldata.control+xml":{"source":"iana","compressible":true},"application/emergencycalldata.deviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.ecall.msd":{"source":"iana"},"application/emergencycalldata.providerinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.serviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.subscriberinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.veds+xml":{"source":"iana","compressible":true},"application/emma+xml":{"source":"iana","compressible":true,"extensions":["emma"]},"application/emotionml+xml":{"source":"iana","compressible":true,"extensions":["emotionml"]},"application/encaprtp":{"source":"iana"},"application/epp+xml":{"source":"iana","compressible":true},"application/epub+zip":{"source":"iana","compressible":false,"extensions":["epub"]},"application/eshop":{"source":"iana"},"application/exi":{"source":"iana","extensions":["exi"]},"application/expect-ct-report+json":{"source":"iana","compressible":true},"application/express":{"source":"iana","extensions":["exp"]},"application/fastinfoset":{"source":"iana"},"application/fastsoap":{"source":"iana"},"application/fdt+xml":{"source":"iana","compressible":true,"extensions":["fdt"]},"application/fhir+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/fhir+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/fido.trusted-apps+json":{"compressible":true},"application/fits":{"source":"iana"},"application/flexfec":{"source":"iana"},"application/font-sfnt":{"source":"iana"},"application/font-tdpfr":{"source":"iana","extensions":["pfr"]},"application/font-woff":{"source":"iana","compressible":false},"application/framework-attributes+xml":{"source":"iana","compressible":true},"application/geo+json":{"source":"iana","compressible":true,"extensions":["geojson"]},"application/geo+json-seq":{"source":"iana"},"application/geopackage+sqlite3":{"source":"iana"},"application/geoxacml+xml":{"source":"iana","compressible":true},"application/gltf-buffer":{"source":"iana"},"application/gml+xml":{"source":"iana","compressible":true,"extensions":["gml"]},"application/gpx+xml":{"source":"apache","compressible":true,"extensions":["gpx"]},"application/gxf":{"source":"apache","extensions":["gxf"]},"application/gzip":{"source":"iana","compressible":false,"extensions":["gz"]},"application/h224":{"source":"iana"},"application/held+xml":{"source":"iana","compressible":true},"application/hjson":{"extensions":["hjson"]},"application/http":{"source":"iana"},"application/hyperstudio":{"source":"iana","extensions":["stk"]},"application/ibe-key-request+xml":{"source":"iana","compressible":true},"application/ibe-pkg-reply+xml":{"source":"iana","compressible":true},"application/ibe-pp-data":{"source":"iana"},"application/iges":{"source":"iana"},"application/im-iscomposing+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/index":{"source":"iana"},"application/index.cmd":{"source":"iana"},"application/index.obj":{"source":"iana"},"application/index.response":{"source":"iana"},"application/index.vnd":{"source":"iana"},"application/inkml+xml":{"source":"iana","compressible":true,"extensions":["ink","inkml"]},"application/iotp":{"source":"iana"},"application/ipfix":{"source":"iana","extensions":["ipfix"]},"application/ipp":{"source":"iana"},"application/isup":{"source":"iana"},"application/its+xml":{"source":"iana","compressible":true,"extensions":["its"]},"application/java-archive":{"source":"apache","compressible":false,"extensions":["jar","war","ear"]},"application/java-serialized-object":{"source":"apache","compressible":false,"extensions":["ser"]},"application/java-vm":{"source":"apache","compressible":false,"extensions":["class"]},"application/javascript":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["js","mjs"]},"application/jf2feed+json":{"source":"iana","compressible":true},"application/jose":{"source":"iana"},"application/jose+json":{"source":"iana","compressible":true},"application/jrd+json":{"source":"iana","compressible":true},"application/jscalendar+json":{"source":"iana","compressible":true},"application/json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["json","map"]},"application/json-patch+json":{"source":"iana","compressible":true},"application/json-seq":{"source":"iana"},"application/json5":{"extensions":["json5"]},"application/jsonml+json":{"source":"apache","compressible":true,"extensions":["jsonml"]},"application/jwk+json":{"source":"iana","compressible":true},"application/jwk-set+json":{"source":"iana","compressible":true},"application/jwt":{"source":"iana"},"application/kpml-request+xml":{"source":"iana","compressible":true},"application/kpml-response+xml":{"source":"iana","compressible":true},"application/ld+json":{"source":"iana","compressible":true,"extensions":["jsonld"]},"application/lgr+xml":{"source":"iana","compressible":true,"extensions":["lgr"]},"application/link-format":{"source":"iana"},"application/load-control+xml":{"source":"iana","compressible":true},"application/lost+xml":{"source":"iana","compressible":true,"extensions":["lostxml"]},"application/lostsync+xml":{"source":"iana","compressible":true},"application/lpf+zip":{"source":"iana","compressible":false},"application/lxf":{"source":"iana"},"application/mac-binhex40":{"source":"iana","extensions":["hqx"]},"application/mac-compactpro":{"source":"apache","extensions":["cpt"]},"application/macwriteii":{"source":"iana"},"application/mads+xml":{"source":"iana","compressible":true,"extensions":["mads"]},"application/manifest+json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["webmanifest"]},"application/marc":{"source":"iana","extensions":["mrc"]},"application/marcxml+xml":{"source":"iana","compressible":true,"extensions":["mrcx"]},"application/mathematica":{"source":"iana","extensions":["ma","nb","mb"]},"application/mathml+xml":{"source":"iana","compressible":true,"extensions":["mathml"]},"application/mathml-content+xml":{"source":"iana","compressible":true},"application/mathml-presentation+xml":{"source":"iana","compressible":true},"application/mbms-associated-procedure-description+xml":{"source":"iana","compressible":true},"application/mbms-deregister+xml":{"source":"iana","compressible":true},"application/mbms-envelope+xml":{"source":"iana","compressible":true},"application/mbms-msk+xml":{"source":"iana","compressible":true},"application/mbms-msk-response+xml":{"source":"iana","compressible":true},"application/mbms-protection-description+xml":{"source":"iana","compressible":true},"application/mbms-reception-report+xml":{"source":"iana","compressible":true},"application/mbms-register+xml":{"source":"iana","compressible":true},"application/mbms-register-response+xml":{"source":"iana","compressible":true},"application/mbms-schedule+xml":{"source":"iana","compressible":true},"application/mbms-user-service-description+xml":{"source":"iana","compressible":true},"application/mbox":{"source":"iana","extensions":["mbox"]},"application/media-policy-dataset+xml":{"source":"iana","compressible":true,"extensions":["mpf"]},"application/media_control+xml":{"source":"iana","compressible":true},"application/mediaservercontrol+xml":{"source":"iana","compressible":true,"extensions":["mscml"]},"application/merge-patch+json":{"source":"iana","compressible":true},"application/metalink+xml":{"source":"apache","compressible":true,"extensions":["metalink"]},"application/metalink4+xml":{"source":"iana","compressible":true,"extensions":["meta4"]},"application/mets+xml":{"source":"iana","compressible":true,"extensions":["mets"]},"application/mf4":{"source":"iana"},"application/mikey":{"source":"iana"},"application/mipc":{"source":"iana"},"application/missing-blocks+cbor-seq":{"source":"iana"},"application/mmt-aei+xml":{"source":"iana","compressible":true,"extensions":["maei"]},"application/mmt-usd+xml":{"source":"iana","compressible":true,"extensions":["musd"]},"application/mods+xml":{"source":"iana","compressible":true,"extensions":["mods"]},"application/moss-keys":{"source":"iana"},"application/moss-signature":{"source":"iana"},"application/mosskey-data":{"source":"iana"},"application/mosskey-request":{"source":"iana"},"application/mp21":{"source":"iana","extensions":["m21","mp21"]},"application/mp4":{"source":"iana","extensions":["mp4s","m4p"]},"application/mpeg4-generic":{"source":"iana"},"application/mpeg4-iod":{"source":"iana"},"application/mpeg4-iod-xmt":{"source":"iana"},"application/mrb-consumer+xml":{"source":"iana","compressible":true},"application/mrb-publish+xml":{"source":"iana","compressible":true},"application/msc-ivr+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msc-mixer+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msword":{"source":"iana","compressible":false,"extensions":["doc","dot"]},"application/mud+json":{"source":"iana","compressible":true},"application/multipart-core":{"source":"iana"},"application/mxf":{"source":"iana","extensions":["mxf"]},"application/n-quads":{"source":"iana","extensions":["nq"]},"application/n-triples":{"source":"iana","extensions":["nt"]},"application/nasdata":{"source":"iana"},"application/news-checkgroups":{"source":"iana","charset":"US-ASCII"},"application/news-groupinfo":{"source":"iana","charset":"US-ASCII"},"application/news-transmission":{"source":"iana"},"application/nlsml+xml":{"source":"iana","compressible":true},"application/node":{"source":"iana","extensions":["cjs"]},"application/nss":{"source":"iana"},"application/oauth-authz-req+jwt":{"source":"iana"},"application/oblivious-dns-message":{"source":"iana"},"application/ocsp-request":{"source":"iana"},"application/ocsp-response":{"source":"iana"},"application/octet-stream":{"source":"iana","compressible":false,"extensions":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{"source":"iana","extensions":["oda"]},"application/odm+xml":{"source":"iana","compressible":true},"application/odx":{"source":"iana"},"application/oebps-package+xml":{"source":"iana","compressible":true,"extensions":["opf"]},"application/ogg":{"source":"iana","compressible":false,"extensions":["ogx"]},"application/omdoc+xml":{"source":"apache","compressible":true,"extensions":["omdoc"]},"application/onenote":{"source":"apache","extensions":["onetoc","onetoc2","onetmp","onepkg"]},"application/opc-nodeset+xml":{"source":"iana","compressible":true},"application/oscore":{"source":"iana"},"application/oxps":{"source":"iana","extensions":["oxps"]},"application/p21":{"source":"iana"},"application/p21+zip":{"source":"iana","compressible":false},"application/p2p-overlay+xml":{"source":"iana","compressible":true,"extensions":["relo"]},"application/parityfec":{"source":"iana"},"application/passport":{"source":"iana"},"application/patch-ops-error+xml":{"source":"iana","compressible":true,"extensions":["xer"]},"application/pdf":{"source":"iana","compressible":false,"extensions":["pdf"]},"application/pdx":{"source":"iana"},"application/pem-certificate-chain":{"source":"iana"},"application/pgp-encrypted":{"source":"iana","compressible":false,"extensions":["pgp"]},"application/pgp-keys":{"source":"iana","extensions":["asc"]},"application/pgp-signature":{"source":"iana","extensions":["asc","sig"]},"application/pics-rules":{"source":"apache","extensions":["prf"]},"application/pidf+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pidf-diff+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pkcs10":{"source":"iana","extensions":["p10"]},"application/pkcs12":{"source":"iana"},"application/pkcs7-mime":{"source":"iana","extensions":["p7m","p7c"]},"application/pkcs7-signature":{"source":"iana","extensions":["p7s"]},"application/pkcs8":{"source":"iana","extensions":["p8"]},"application/pkcs8-encrypted":{"source":"iana"},"application/pkix-attr-cert":{"source":"iana","extensions":["ac"]},"application/pkix-cert":{"source":"iana","extensions":["cer"]},"application/pkix-crl":{"source":"iana","extensions":["crl"]},"application/pkix-pkipath":{"source":"iana","extensions":["pkipath"]},"application/pkixcmp":{"source":"iana","extensions":["pki"]},"application/pls+xml":{"source":"iana","compressible":true,"extensions":["pls"]},"application/poc-settings+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/postscript":{"source":"iana","compressible":true,"extensions":["ai","eps","ps"]},"application/ppsp-tracker+json":{"source":"iana","compressible":true},"application/problem+json":{"source":"iana","compressible":true},"application/problem+xml":{"source":"iana","compressible":true},"application/provenance+xml":{"source":"iana","compressible":true,"extensions":["provx"]},"application/prs.alvestrand.titrax-sheet":{"source":"iana"},"application/prs.cww":{"source":"iana","extensions":["cww"]},"application/prs.cyn":{"source":"iana","charset":"7-BIT"},"application/prs.hpub+zip":{"source":"iana","compressible":false},"application/prs.nprend":{"source":"iana"},"application/prs.plucker":{"source":"iana"},"application/prs.rdf-xml-crypt":{"source":"iana"},"application/prs.xsf+xml":{"source":"iana","compressible":true},"application/pskc+xml":{"source":"iana","compressible":true,"extensions":["pskcxml"]},"application/pvd+json":{"source":"iana","compressible":true},"application/qsig":{"source":"iana"},"application/raml+yaml":{"compressible":true,"extensions":["raml"]},"application/raptorfec":{"source":"iana"},"application/rdap+json":{"source":"iana","compressible":true},"application/rdf+xml":{"source":"iana","compressible":true,"extensions":["rdf","owl"]},"application/reginfo+xml":{"source":"iana","compressible":true,"extensions":["rif"]},"application/relax-ng-compact-syntax":{"source":"iana","extensions":["rnc"]},"application/remote-printing":{"source":"iana"},"application/reputon+json":{"source":"iana","compressible":true},"application/resource-lists+xml":{"source":"iana","compressible":true,"extensions":["rl"]},"application/resource-lists-diff+xml":{"source":"iana","compressible":true,"extensions":["rld"]},"application/rfc+xml":{"source":"iana","compressible":true},"application/riscos":{"source":"iana"},"application/rlmi+xml":{"source":"iana","compressible":true},"application/rls-services+xml":{"source":"iana","compressible":true,"extensions":["rs"]},"application/route-apd+xml":{"source":"iana","compressible":true,"extensions":["rapd"]},"application/route-s-tsid+xml":{"source":"iana","compressible":true,"extensions":["sls"]},"application/route-usd+xml":{"source":"iana","compressible":true,"extensions":["rusd"]},"application/rpki-ghostbusters":{"source":"iana","extensions":["gbr"]},"application/rpki-manifest":{"source":"iana","extensions":["mft"]},"application/rpki-publication":{"source":"iana"},"application/rpki-roa":{"source":"iana","extensions":["roa"]},"application/rpki-updown":{"source":"iana"},"application/rsd+xml":{"source":"apache","compressible":true,"extensions":["rsd"]},"application/rss+xml":{"source":"apache","compressible":true,"extensions":["rss"]},"application/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"application/rtploopback":{"source":"iana"},"application/rtx":{"source":"iana"},"application/samlassertion+xml":{"source":"iana","compressible":true},"application/samlmetadata+xml":{"source":"iana","compressible":true},"application/sarif+json":{"source":"iana","compressible":true},"application/sarif-external-properties+json":{"source":"iana","compressible":true},"application/sbe":{"source":"iana"},"application/sbml+xml":{"source":"iana","compressible":true,"extensions":["sbml"]},"application/scaip+xml":{"source":"iana","compressible":true},"application/scim+json":{"source":"iana","compressible":true},"application/scvp-cv-request":{"source":"iana","extensions":["scq"]},"application/scvp-cv-response":{"source":"iana","extensions":["scs"]},"application/scvp-vp-request":{"source":"iana","extensions":["spq"]},"application/scvp-vp-response":{"source":"iana","extensions":["spp"]},"application/sdp":{"source":"iana","extensions":["sdp"]},"application/secevent+jwt":{"source":"iana"},"application/senml+cbor":{"source":"iana"},"application/senml+json":{"source":"iana","compressible":true},"application/senml+xml":{"source":"iana","compressible":true,"extensions":["senmlx"]},"application/senml-etch+cbor":{"source":"iana"},"application/senml-etch+json":{"source":"iana","compressible":true},"application/senml-exi":{"source":"iana"},"application/sensml+cbor":{"source":"iana"},"application/sensml+json":{"source":"iana","compressible":true},"application/sensml+xml":{"source":"iana","compressible":true,"extensions":["sensmlx"]},"application/sensml-exi":{"source":"iana"},"application/sep+xml":{"source":"iana","compressible":true},"application/sep-exi":{"source":"iana"},"application/session-info":{"source":"iana"},"application/set-payment":{"source":"iana"},"application/set-payment-initiation":{"source":"iana","extensions":["setpay"]},"application/set-registration":{"source":"iana"},"application/set-registration-initiation":{"source":"iana","extensions":["setreg"]},"application/sgml":{"source":"iana"},"application/sgml-open-catalog":{"source":"iana"},"application/shf+xml":{"source":"iana","compressible":true,"extensions":["shf"]},"application/sieve":{"source":"iana","extensions":["siv","sieve"]},"application/simple-filter+xml":{"source":"iana","compressible":true},"application/simple-message-summary":{"source":"iana"},"application/simplesymbolcontainer":{"source":"iana"},"application/sipc":{"source":"iana"},"application/slate":{"source":"iana"},"application/smil":{"source":"iana"},"application/smil+xml":{"source":"iana","compressible":true,"extensions":["smi","smil"]},"application/smpte336m":{"source":"iana"},"application/soap+fastinfoset":{"source":"iana"},"application/soap+xml":{"source":"iana","compressible":true},"application/sparql-query":{"source":"iana","extensions":["rq"]},"application/sparql-results+xml":{"source":"iana","compressible":true,"extensions":["srx"]},"application/spdx+json":{"source":"iana","compressible":true},"application/spirits-event+xml":{"source":"iana","compressible":true},"application/sql":{"source":"iana"},"application/srgs":{"source":"iana","extensions":["gram"]},"application/srgs+xml":{"source":"iana","compressible":true,"extensions":["grxml"]},"application/sru+xml":{"source":"iana","compressible":true,"extensions":["sru"]},"application/ssdl+xml":{"source":"apache","compressible":true,"extensions":["ssdl"]},"application/ssml+xml":{"source":"iana","compressible":true,"extensions":["ssml"]},"application/stix+json":{"source":"iana","compressible":true},"application/swid+xml":{"source":"iana","compressible":true,"extensions":["swidtag"]},"application/tamp-apex-update":{"source":"iana"},"application/tamp-apex-update-confirm":{"source":"iana"},"application/tamp-community-update":{"source":"iana"},"application/tamp-community-update-confirm":{"source":"iana"},"application/tamp-error":{"source":"iana"},"application/tamp-sequence-adjust":{"source":"iana"},"application/tamp-sequence-adjust-confirm":{"source":"iana"},"application/tamp-status-query":{"source":"iana"},"application/tamp-status-response":{"source":"iana"},"application/tamp-update":{"source":"iana"},"application/tamp-update-confirm":{"source":"iana"},"application/tar":{"compressible":true},"application/taxii+json":{"source":"iana","compressible":true},"application/td+json":{"source":"iana","compressible":true},"application/tei+xml":{"source":"iana","compressible":true,"extensions":["tei","teicorpus"]},"application/tetra_isi":{"source":"iana"},"application/thraud+xml":{"source":"iana","compressible":true,"extensions":["tfi"]},"application/timestamp-query":{"source":"iana"},"application/timestamp-reply":{"source":"iana"},"application/timestamped-data":{"source":"iana","extensions":["tsd"]},"application/tlsrpt+gzip":{"source":"iana"},"application/tlsrpt+json":{"source":"iana","compressible":true},"application/tnauthlist":{"source":"iana"},"application/token-introspection+jwt":{"source":"iana"},"application/toml":{"compressible":true,"extensions":["toml"]},"application/trickle-ice-sdpfrag":{"source":"iana"},"application/trig":{"source":"iana","extensions":["trig"]},"application/ttml+xml":{"source":"iana","compressible":true,"extensions":["ttml"]},"application/tve-trigger":{"source":"iana"},"application/tzif":{"source":"iana"},"application/tzif-leap":{"source":"iana"},"application/ubjson":{"compressible":false,"extensions":["ubj"]},"application/ulpfec":{"source":"iana"},"application/urc-grpsheet+xml":{"source":"iana","compressible":true},"application/urc-ressheet+xml":{"source":"iana","compressible":true,"extensions":["rsheet"]},"application/urc-targetdesc+xml":{"source":"iana","compressible":true,"extensions":["td"]},"application/urc-uisocketdesc+xml":{"source":"iana","compressible":true},"application/vcard+json":{"source":"iana","compressible":true},"application/vcard+xml":{"source":"iana","compressible":true},"application/vemmi":{"source":"iana"},"application/vividence.scriptfile":{"source":"apache"},"application/vnd.1000minds.decision-model+xml":{"source":"iana","compressible":true,"extensions":["1km"]},"application/vnd.3gpp-prose+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-prose-pc3ch+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-v2x-local-service-information":{"source":"iana"},"application/vnd.3gpp.5gnas":{"source":"iana"},"application/vnd.3gpp.access-transfer-events+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.bsf+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gmop+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gtpc":{"source":"iana"},"application/vnd.3gpp.interworking-data":{"source":"iana"},"application/vnd.3gpp.lpp":{"source":"iana"},"application/vnd.3gpp.mc-signalling-ear":{"source":"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-payload":{"source":"iana"},"application/vnd.3gpp.mcdata-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-signalling":{"source":"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-floor-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-signed+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-init-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-transmission-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mid-call+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ngap":{"source":"iana"},"application/vnd.3gpp.pfcp":{"source":"iana"},"application/vnd.3gpp.pic-bw-large":{"source":"iana","extensions":["plb"]},"application/vnd.3gpp.pic-bw-small":{"source":"iana","extensions":["psb"]},"application/vnd.3gpp.pic-bw-var":{"source":"iana","extensions":["pvb"]},"application/vnd.3gpp.s1ap":{"source":"iana"},"application/vnd.3gpp.sms":{"source":"iana"},"application/vnd.3gpp.sms+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-ext+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.state-and-event-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ussd+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.bcmcsinfo+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.sms":{"source":"iana"},"application/vnd.3gpp2.tcap":{"source":"iana","extensions":["tcap"]},"application/vnd.3lightssoftware.imagescal":{"source":"iana"},"application/vnd.3m.post-it-notes":{"source":"iana","extensions":["pwn"]},"application/vnd.accpac.simply.aso":{"source":"iana","extensions":["aso"]},"application/vnd.accpac.simply.imp":{"source":"iana","extensions":["imp"]},"application/vnd.acucobol":{"source":"iana","extensions":["acu"]},"application/vnd.acucorp":{"source":"iana","extensions":["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{"source":"apache","compressible":false,"extensions":["air"]},"application/vnd.adobe.flash.movie":{"source":"iana"},"application/vnd.adobe.formscentral.fcdt":{"source":"iana","extensions":["fcdt"]},"application/vnd.adobe.fxp":{"source":"iana","extensions":["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{"source":"iana"},"application/vnd.adobe.xdp+xml":{"source":"iana","compressible":true,"extensions":["xdp"]},"application/vnd.adobe.xfdf":{"source":"iana","extensions":["xfdf"]},"application/vnd.aether.imp":{"source":"iana"},"application/vnd.afpc.afplinedata":{"source":"iana"},"application/vnd.afpc.afplinedata-pagedef":{"source":"iana"},"application/vnd.afpc.cmoca-cmresource":{"source":"iana"},"application/vnd.afpc.foca-charset":{"source":"iana"},"application/vnd.afpc.foca-codedfont":{"source":"iana"},"application/vnd.afpc.foca-codepage":{"source":"iana"},"application/vnd.afpc.modca":{"source":"iana"},"application/vnd.afpc.modca-cmtable":{"source":"iana"},"application/vnd.afpc.modca-formdef":{"source":"iana"},"application/vnd.afpc.modca-mediummap":{"source":"iana"},"application/vnd.afpc.modca-objectcontainer":{"source":"iana"},"application/vnd.afpc.modca-overlay":{"source":"iana"},"application/vnd.afpc.modca-pagesegment":{"source":"iana"},"application/vnd.age":{"source":"iana","extensions":["age"]},"application/vnd.ah-barcode":{"source":"iana"},"application/vnd.ahead.space":{"source":"iana","extensions":["ahead"]},"application/vnd.airzip.filesecure.azf":{"source":"iana","extensions":["azf"]},"application/vnd.airzip.filesecure.azs":{"source":"iana","extensions":["azs"]},"application/vnd.amadeus+json":{"source":"iana","compressible":true},"application/vnd.amazon.ebook":{"source":"apache","extensions":["azw"]},"application/vnd.amazon.mobi8-ebook":{"source":"iana"},"application/vnd.americandynamics.acc":{"source":"iana","extensions":["acc"]},"application/vnd.amiga.ami":{"source":"iana","extensions":["ami"]},"application/vnd.amundsen.maze+xml":{"source":"iana","compressible":true},"application/vnd.android.ota":{"source":"iana"},"application/vnd.android.package-archive":{"source":"apache","compressible":false,"extensions":["apk"]},"application/vnd.anki":{"source":"iana"},"application/vnd.anser-web-certificate-issue-initiation":{"source":"iana","extensions":["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{"source":"apache","extensions":["fti"]},"application/vnd.antix.game-component":{"source":"iana","extensions":["atx"]},"application/vnd.apache.arrow.file":{"source":"iana"},"application/vnd.apache.arrow.stream":{"source":"iana"},"application/vnd.apache.thrift.binary":{"source":"iana"},"application/vnd.apache.thrift.compact":{"source":"iana"},"application/vnd.apache.thrift.json":{"source":"iana"},"application/vnd.api+json":{"source":"iana","compressible":true},"application/vnd.aplextor.warrp+json":{"source":"iana","compressible":true},"application/vnd.apothekende.reservation+json":{"source":"iana","compressible":true},"application/vnd.apple.installer+xml":{"source":"iana","compressible":true,"extensions":["mpkg"]},"application/vnd.apple.keynote":{"source":"iana","extensions":["key"]},"application/vnd.apple.mpegurl":{"source":"iana","extensions":["m3u8"]},"application/vnd.apple.numbers":{"source":"iana","extensions":["numbers"]},"application/vnd.apple.pages":{"source":"iana","extensions":["pages"]},"application/vnd.apple.pkpass":{"compressible":false,"extensions":["pkpass"]},"application/vnd.arastra.swi":{"source":"iana"},"application/vnd.aristanetworks.swi":{"source":"iana","extensions":["swi"]},"application/vnd.artisan+json":{"source":"iana","compressible":true},"application/vnd.artsquare":{"source":"iana"},"application/vnd.astraea-software.iota":{"source":"iana","extensions":["iota"]},"application/vnd.audiograph":{"source":"iana","extensions":["aep"]},"application/vnd.autopackage":{"source":"iana"},"application/vnd.avalon+json":{"source":"iana","compressible":true},"application/vnd.avistar+xml":{"source":"iana","compressible":true},"application/vnd.balsamiq.bmml+xml":{"source":"iana","compressible":true,"extensions":["bmml"]},"application/vnd.balsamiq.bmpr":{"source":"iana"},"application/vnd.banana-accounting":{"source":"iana"},"application/vnd.bbf.usp.error":{"source":"iana"},"application/vnd.bbf.usp.msg":{"source":"iana"},"application/vnd.bbf.usp.msg+json":{"source":"iana","compressible":true},"application/vnd.bekitzur-stech+json":{"source":"iana","compressible":true},"application/vnd.bint.med-content":{"source":"iana"},"application/vnd.biopax.rdf+xml":{"source":"iana","compressible":true},"application/vnd.blink-idb-value-wrapper":{"source":"iana"},"application/vnd.blueice.multipass":{"source":"iana","extensions":["mpm"]},"application/vnd.bluetooth.ep.oob":{"source":"iana"},"application/vnd.bluetooth.le.oob":{"source":"iana"},"application/vnd.bmi":{"source":"iana","extensions":["bmi"]},"application/vnd.bpf":{"source":"iana"},"application/vnd.bpf3":{"source":"iana"},"application/vnd.businessobjects":{"source":"iana","extensions":["rep"]},"application/vnd.byu.uapi+json":{"source":"iana","compressible":true},"application/vnd.cab-jscript":{"source":"iana"},"application/vnd.canon-cpdl":{"source":"iana"},"application/vnd.canon-lips":{"source":"iana"},"application/vnd.capasystems-pg+json":{"source":"iana","compressible":true},"application/vnd.cendio.thinlinc.clientconf":{"source":"iana"},"application/vnd.century-systems.tcp_stream":{"source":"iana"},"application/vnd.chemdraw+xml":{"source":"iana","compressible":true,"extensions":["cdxml"]},"application/vnd.chess-pgn":{"source":"iana"},"application/vnd.chipnuts.karaoke-mmd":{"source":"iana","extensions":["mmd"]},"application/vnd.ciedi":{"source":"iana"},"application/vnd.cinderella":{"source":"iana","extensions":["cdy"]},"application/vnd.cirpack.isdn-ext":{"source":"iana"},"application/vnd.citationstyles.style+xml":{"source":"iana","compressible":true,"extensions":["csl"]},"application/vnd.claymore":{"source":"iana","extensions":["cla"]},"application/vnd.cloanto.rp9":{"source":"iana","extensions":["rp9"]},"application/vnd.clonk.c4group":{"source":"iana","extensions":["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{"source":"iana","extensions":["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{"source":"iana","extensions":["c11amz"]},"application/vnd.coffeescript":{"source":"iana"},"application/vnd.collabio.xodocuments.document":{"source":"iana"},"application/vnd.collabio.xodocuments.document-template":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation-template":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{"source":"iana"},"application/vnd.collection+json":{"source":"iana","compressible":true},"application/vnd.collection.doc+json":{"source":"iana","compressible":true},"application/vnd.collection.next+json":{"source":"iana","compressible":true},"application/vnd.comicbook+zip":{"source":"iana","compressible":false},"application/vnd.comicbook-rar":{"source":"iana"},"application/vnd.commerce-battelle":{"source":"iana"},"application/vnd.commonspace":{"source":"iana","extensions":["csp"]},"application/vnd.contact.cmsg":{"source":"iana","extensions":["cdbcmsg"]},"application/vnd.coreos.ignition+json":{"source":"iana","compressible":true},"application/vnd.cosmocaller":{"source":"iana","extensions":["cmc"]},"application/vnd.crick.clicker":{"source":"iana","extensions":["clkx"]},"application/vnd.crick.clicker.keyboard":{"source":"iana","extensions":["clkk"]},"application/vnd.crick.clicker.palette":{"source":"iana","extensions":["clkp"]},"application/vnd.crick.clicker.template":{"source":"iana","extensions":["clkt"]},"application/vnd.crick.clicker.wordbank":{"source":"iana","extensions":["clkw"]},"application/vnd.criticaltools.wbs+xml":{"source":"iana","compressible":true,"extensions":["wbs"]},"application/vnd.cryptii.pipe+json":{"source":"iana","compressible":true},"application/vnd.crypto-shade-file":{"source":"iana"},"application/vnd.cryptomator.encrypted":{"source":"iana"},"application/vnd.cryptomator.vault":{"source":"iana"},"application/vnd.ctc-posml":{"source":"iana","extensions":["pml"]},"application/vnd.ctct.ws+xml":{"source":"iana","compressible":true},"application/vnd.cups-pdf":{"source":"iana"},"application/vnd.cups-postscript":{"source":"iana"},"application/vnd.cups-ppd":{"source":"iana","extensions":["ppd"]},"application/vnd.cups-raster":{"source":"iana"},"application/vnd.cups-raw":{"source":"iana"},"application/vnd.curl":{"source":"iana"},"application/vnd.curl.car":{"source":"apache","extensions":["car"]},"application/vnd.curl.pcurl":{"source":"apache","extensions":["pcurl"]},"application/vnd.cyan.dean.root+xml":{"source":"iana","compressible":true},"application/vnd.cybank":{"source":"iana"},"application/vnd.cyclonedx+json":{"source":"iana","compressible":true},"application/vnd.cyclonedx+xml":{"source":"iana","compressible":true},"application/vnd.d2l.coursepackage1p0+zip":{"source":"iana","compressible":false},"application/vnd.d3m-dataset":{"source":"iana"},"application/vnd.d3m-problem":{"source":"iana"},"application/vnd.dart":{"source":"iana","compressible":true,"extensions":["dart"]},"application/vnd.data-vision.rdz":{"source":"iana","extensions":["rdz"]},"application/vnd.datapackage+json":{"source":"iana","compressible":true},"application/vnd.dataresource+json":{"source":"iana","compressible":true},"application/vnd.dbf":{"source":"iana","extensions":["dbf"]},"application/vnd.debian.binary-package":{"source":"iana"},"application/vnd.dece.data":{"source":"iana","extensions":["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{"source":"iana","compressible":true,"extensions":["uvt","uvvt"]},"application/vnd.dece.unspecified":{"source":"iana","extensions":["uvx","uvvx"]},"application/vnd.dece.zip":{"source":"iana","extensions":["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{"source":"iana","extensions":["fe_launch"]},"application/vnd.desmume.movie":{"source":"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{"source":"iana"},"application/vnd.dm.delegation+xml":{"source":"iana","compressible":true},"application/vnd.dna":{"source":"iana","extensions":["dna"]},"application/vnd.document+json":{"source":"iana","compressible":true},"application/vnd.dolby.mlp":{"source":"apache","extensions":["mlp"]},"application/vnd.dolby.mobile.1":{"source":"iana"},"application/vnd.dolby.mobile.2":{"source":"iana"},"application/vnd.doremir.scorecloud-binary-document":{"source":"iana"},"application/vnd.dpgraph":{"source":"iana","extensions":["dpg"]},"application/vnd.dreamfactory":{"source":"iana","extensions":["dfac"]},"application/vnd.drive+json":{"source":"iana","compressible":true},"application/vnd.ds-keypoint":{"source":"apache","extensions":["kpxx"]},"application/vnd.dtg.local":{"source":"iana"},"application/vnd.dtg.local.flash":{"source":"iana"},"application/vnd.dtg.local.html":{"source":"iana"},"application/vnd.dvb.ait":{"source":"iana","extensions":["ait"]},"application/vnd.dvb.dvbisl+xml":{"source":"iana","compressible":true},"application/vnd.dvb.dvbj":{"source":"iana"},"application/vnd.dvb.esgcontainer":{"source":"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess2":{"source":"iana"},"application/vnd.dvb.ipdcesgpdd":{"source":"iana"},"application/vnd.dvb.ipdcroaming":{"source":"iana"},"application/vnd.dvb.iptv.alfec-base":{"source":"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{"source":"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-container+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-generic+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-msglist+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-request+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-response+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-init+xml":{"source":"iana","compressible":true},"application/vnd.dvb.pfr":{"source":"iana"},"application/vnd.dvb.service":{"source":"iana","extensions":["svc"]},"application/vnd.dxr":{"source":"iana"},"application/vnd.dynageo":{"source":"iana","extensions":["geo"]},"application/vnd.dzr":{"source":"iana"},"application/vnd.easykaraoke.cdgdownload":{"source":"iana"},"application/vnd.ecdis-update":{"source":"iana"},"application/vnd.ecip.rlp":{"source":"iana"},"application/vnd.eclipse.ditto+json":{"source":"iana","compressible":true},"application/vnd.ecowin.chart":{"source":"iana","extensions":["mag"]},"application/vnd.ecowin.filerequest":{"source":"iana"},"application/vnd.ecowin.fileupdate":{"source":"iana"},"application/vnd.ecowin.series":{"source":"iana"},"application/vnd.ecowin.seriesrequest":{"source":"iana"},"application/vnd.ecowin.seriesupdate":{"source":"iana"},"application/vnd.efi.img":{"source":"iana"},"application/vnd.efi.iso":{"source":"iana"},"application/vnd.emclient.accessrequest+xml":{"source":"iana","compressible":true},"application/vnd.enliven":{"source":"iana","extensions":["nml"]},"application/vnd.enphase.envoy":{"source":"iana"},"application/vnd.eprints.data+xml":{"source":"iana","compressible":true},"application/vnd.epson.esf":{"source":"iana","extensions":["esf"]},"application/vnd.epson.msf":{"source":"iana","extensions":["msf"]},"application/vnd.epson.quickanime":{"source":"iana","extensions":["qam"]},"application/vnd.epson.salt":{"source":"iana","extensions":["slt"]},"application/vnd.epson.ssf":{"source":"iana","extensions":["ssf"]},"application/vnd.ericsson.quickcall":{"source":"iana"},"application/vnd.espass-espass+zip":{"source":"iana","compressible":false},"application/vnd.eszigno3+xml":{"source":"iana","compressible":true,"extensions":["es3","et3"]},"application/vnd.etsi.aoc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.asic-e+zip":{"source":"iana","compressible":false},"application/vnd.etsi.asic-s+zip":{"source":"iana","compressible":false},"application/vnd.etsi.cug+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvcommand+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-bc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-cod+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-npvr+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvservice+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsync+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvueprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mcid+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mheg5":{"source":"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{"source":"iana","compressible":true},"application/vnd.etsi.pstn+xml":{"source":"iana","compressible":true},"application/vnd.etsi.sci+xml":{"source":"iana","compressible":true},"application/vnd.etsi.simservs+xml":{"source":"iana","compressible":true},"application/vnd.etsi.timestamp-token":{"source":"iana"},"application/vnd.etsi.tsl+xml":{"source":"iana","compressible":true},"application/vnd.etsi.tsl.der":{"source":"iana"},"application/vnd.eu.kasparian.car+json":{"source":"iana","compressible":true},"application/vnd.eudora.data":{"source":"iana"},"application/vnd.evolv.ecig.profile":{"source":"iana"},"application/vnd.evolv.ecig.settings":{"source":"iana"},"application/vnd.evolv.ecig.theme":{"source":"iana"},"application/vnd.exstream-empower+zip":{"source":"iana","compressible":false},"application/vnd.exstream-package":{"source":"iana"},"application/vnd.ezpix-album":{"source":"iana","extensions":["ez2"]},"application/vnd.ezpix-package":{"source":"iana","extensions":["ez3"]},"application/vnd.f-secure.mobile":{"source":"iana"},"application/vnd.familysearch.gedcom+zip":{"source":"iana","compressible":false},"application/vnd.fastcopy-disk-image":{"source":"iana"},"application/vnd.fdf":{"source":"iana","extensions":["fdf"]},"application/vnd.fdsn.mseed":{"source":"iana","extensions":["mseed"]},"application/vnd.fdsn.seed":{"source":"iana","extensions":["seed","dataless"]},"application/vnd.ffsns":{"source":"iana"},"application/vnd.ficlab.flb+zip":{"source":"iana","compressible":false},"application/vnd.filmit.zfc":{"source":"iana"},"application/vnd.fints":{"source":"iana"},"application/vnd.firemonkeys.cloudcell":{"source":"iana"},"application/vnd.flographit":{"source":"iana","extensions":["gph"]},"application/vnd.fluxtime.clip":{"source":"iana","extensions":["ftc"]},"application/vnd.font-fontforge-sfd":{"source":"iana"},"application/vnd.framemaker":{"source":"iana","extensions":["fm","frame","maker","book"]},"application/vnd.frogans.fnc":{"source":"iana","extensions":["fnc"]},"application/vnd.frogans.ltf":{"source":"iana","extensions":["ltf"]},"application/vnd.fsc.weblaunch":{"source":"iana","extensions":["fsc"]},"application/vnd.fujifilm.fb.docuworks":{"source":"iana"},"application/vnd.fujifilm.fb.docuworks.binder":{"source":"iana"},"application/vnd.fujifilm.fb.docuworks.container":{"source":"iana"},"application/vnd.fujifilm.fb.jfi+xml":{"source":"iana","compressible":true},"application/vnd.fujitsu.oasys":{"source":"iana","extensions":["oas"]},"application/vnd.fujitsu.oasys2":{"source":"iana","extensions":["oa2"]},"application/vnd.fujitsu.oasys3":{"source":"iana","extensions":["oa3"]},"application/vnd.fujitsu.oasysgp":{"source":"iana","extensions":["fg5"]},"application/vnd.fujitsu.oasysprs":{"source":"iana","extensions":["bh2"]},"application/vnd.fujixerox.art-ex":{"source":"iana"},"application/vnd.fujixerox.art4":{"source":"iana"},"application/vnd.fujixerox.ddd":{"source":"iana","extensions":["ddd"]},"application/vnd.fujixerox.docuworks":{"source":"iana","extensions":["xdw"]},"application/vnd.fujixerox.docuworks.binder":{"source":"iana","extensions":["xbd"]},"application/vnd.fujixerox.docuworks.container":{"source":"iana"},"application/vnd.fujixerox.hbpl":{"source":"iana"},"application/vnd.fut-misnet":{"source":"iana"},"application/vnd.futoin+cbor":{"source":"iana"},"application/vnd.futoin+json":{"source":"iana","compressible":true},"application/vnd.fuzzysheet":{"source":"iana","extensions":["fzs"]},"application/vnd.genomatix.tuxedo":{"source":"iana","extensions":["txd"]},"application/vnd.gentics.grd+json":{"source":"iana","compressible":true},"application/vnd.geo+json":{"source":"iana","compressible":true},"application/vnd.geocube+xml":{"source":"iana","compressible":true},"application/vnd.geogebra.file":{"source":"iana","extensions":["ggb"]},"application/vnd.geogebra.slides":{"source":"iana"},"application/vnd.geogebra.tool":{"source":"iana","extensions":["ggt"]},"application/vnd.geometry-explorer":{"source":"iana","extensions":["gex","gre"]},"application/vnd.geonext":{"source":"iana","extensions":["gxt"]},"application/vnd.geoplan":{"source":"iana","extensions":["g2w"]},"application/vnd.geospace":{"source":"iana","extensions":["g3w"]},"application/vnd.gerber":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt-response":{"source":"iana"},"application/vnd.gmx":{"source":"iana","extensions":["gmx"]},"application/vnd.google-apps.document":{"compressible":false,"extensions":["gdoc"]},"application/vnd.google-apps.presentation":{"compressible":false,"extensions":["gslides"]},"application/vnd.google-apps.spreadsheet":{"compressible":false,"extensions":["gsheet"]},"application/vnd.google-earth.kml+xml":{"source":"iana","compressible":true,"extensions":["kml"]},"application/vnd.google-earth.kmz":{"source":"iana","compressible":false,"extensions":["kmz"]},"application/vnd.gov.sk.e-form+xml":{"source":"iana","compressible":true},"application/vnd.gov.sk.e-form+zip":{"source":"iana","compressible":false},"application/vnd.gov.sk.xmldatacontainer+xml":{"source":"iana","compressible":true},"application/vnd.grafeq":{"source":"iana","extensions":["gqf","gqs"]},"application/vnd.gridmp":{"source":"iana"},"application/vnd.groove-account":{"source":"iana","extensions":["gac"]},"application/vnd.groove-help":{"source":"iana","extensions":["ghf"]},"application/vnd.groove-identity-message":{"source":"iana","extensions":["gim"]},"application/vnd.groove-injector":{"source":"iana","extensions":["grv"]},"application/vnd.groove-tool-message":{"source":"iana","extensions":["gtm"]},"application/vnd.groove-tool-template":{"source":"iana","extensions":["tpl"]},"application/vnd.groove-vcard":{"source":"iana","extensions":["vcg"]},"application/vnd.hal+json":{"source":"iana","compressible":true},"application/vnd.hal+xml":{"source":"iana","compressible":true,"extensions":["hal"]},"application/vnd.handheld-entertainment+xml":{"source":"iana","compressible":true,"extensions":["zmm"]},"application/vnd.hbci":{"source":"iana","extensions":["hbci"]},"application/vnd.hc+json":{"source":"iana","compressible":true},"application/vnd.hcl-bireports":{"source":"iana"},"application/vnd.hdt":{"source":"iana"},"application/vnd.heroku+json":{"source":"iana","compressible":true},"application/vnd.hhe.lesson-player":{"source":"iana","extensions":["les"]},"application/vnd.hl7cda+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.hl7v2+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.hp-hpgl":{"source":"iana","extensions":["hpgl"]},"application/vnd.hp-hpid":{"source":"iana","extensions":["hpid"]},"application/vnd.hp-hps":{"source":"iana","extensions":["hps"]},"application/vnd.hp-jlyt":{"source":"iana","extensions":["jlt"]},"application/vnd.hp-pcl":{"source":"iana","extensions":["pcl"]},"application/vnd.hp-pclxl":{"source":"iana","extensions":["pclxl"]},"application/vnd.httphone":{"source":"iana"},"application/vnd.hydrostatix.sof-data":{"source":"iana","extensions":["sfd-hdstx"]},"application/vnd.hyper+json":{"source":"iana","compressible":true},"application/vnd.hyper-item+json":{"source":"iana","compressible":true},"application/vnd.hyperdrive+json":{"source":"iana","compressible":true},"application/vnd.hzn-3d-crossword":{"source":"iana"},"application/vnd.ibm.afplinedata":{"source":"iana"},"application/vnd.ibm.electronic-media":{"source":"iana"},"application/vnd.ibm.minipay":{"source":"iana","extensions":["mpy"]},"application/vnd.ibm.modcap":{"source":"iana","extensions":["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{"source":"iana","extensions":["irm"]},"application/vnd.ibm.secure-container":{"source":"iana","extensions":["sc"]},"application/vnd.iccprofile":{"source":"iana","extensions":["icc","icm"]},"application/vnd.ieee.1905":{"source":"iana"},"application/vnd.igloader":{"source":"iana","extensions":["igl"]},"application/vnd.imagemeter.folder+zip":{"source":"iana","compressible":false},"application/vnd.imagemeter.image+zip":{"source":"iana","compressible":false},"application/vnd.immervision-ivp":{"source":"iana","extensions":["ivp"]},"application/vnd.immervision-ivu":{"source":"iana","extensions":["ivu"]},"application/vnd.ims.imsccv1p1":{"source":"iana"},"application/vnd.ims.imsccv1p2":{"source":"iana"},"application/vnd.ims.imsccv1p3":{"source":"iana"},"application/vnd.ims.lis.v2.result+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy.id+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings.simple+json":{"source":"iana","compressible":true},"application/vnd.informedcontrol.rms+xml":{"source":"iana","compressible":true},"application/vnd.informix-visionary":{"source":"iana"},"application/vnd.infotech.project":{"source":"iana"},"application/vnd.infotech.project+xml":{"source":"iana","compressible":true},"application/vnd.innopath.wamp.notification":{"source":"iana"},"application/vnd.insors.igm":{"source":"iana","extensions":["igm"]},"application/vnd.intercon.formnet":{"source":"iana","extensions":["xpw","xpx"]},"application/vnd.intergeo":{"source":"iana","extensions":["i2g"]},"application/vnd.intertrust.digibox":{"source":"iana"},"application/vnd.intertrust.nncp":{"source":"iana"},"application/vnd.intu.qbo":{"source":"iana","extensions":["qbo"]},"application/vnd.intu.qfx":{"source":"iana","extensions":["qfx"]},"application/vnd.iptc.g2.catalogitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.conceptitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.knowledgeitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsmessage+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.packageitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.planningitem+xml":{"source":"iana","compressible":true},"application/vnd.ipunplugged.rcprofile":{"source":"iana","extensions":["rcprofile"]},"application/vnd.irepository.package+xml":{"source":"iana","compressible":true,"extensions":["irp"]},"application/vnd.is-xpr":{"source":"iana","extensions":["xpr"]},"application/vnd.isac.fcs":{"source":"iana","extensions":["fcs"]},"application/vnd.iso11783-10+zip":{"source":"iana","compressible":false},"application/vnd.jam":{"source":"iana","extensions":["jam"]},"application/vnd.japannet-directory-service":{"source":"iana"},"application/vnd.japannet-jpnstore-wakeup":{"source":"iana"},"application/vnd.japannet-payment-wakeup":{"source":"iana"},"application/vnd.japannet-registration":{"source":"iana"},"application/vnd.japannet-registration-wakeup":{"source":"iana"},"application/vnd.japannet-setstore-wakeup":{"source":"iana"},"application/vnd.japannet-verification":{"source":"iana"},"application/vnd.japannet-verification-wakeup":{"source":"iana"},"application/vnd.jcp.javame.midlet-rms":{"source":"iana","extensions":["rms"]},"application/vnd.jisp":{"source":"iana","extensions":["jisp"]},"application/vnd.joost.joda-archive":{"source":"iana","extensions":["joda"]},"application/vnd.jsk.isdn-ngn":{"source":"iana"},"application/vnd.kahootz":{"source":"iana","extensions":["ktz","ktr"]},"application/vnd.kde.karbon":{"source":"iana","extensions":["karbon"]},"application/vnd.kde.kchart":{"source":"iana","extensions":["chrt"]},"application/vnd.kde.kformula":{"source":"iana","extensions":["kfo"]},"application/vnd.kde.kivio":{"source":"iana","extensions":["flw"]},"application/vnd.kde.kontour":{"source":"iana","extensions":["kon"]},"application/vnd.kde.kpresenter":{"source":"iana","extensions":["kpr","kpt"]},"application/vnd.kde.kspread":{"source":"iana","extensions":["ksp"]},"application/vnd.kde.kword":{"source":"iana","extensions":["kwd","kwt"]},"application/vnd.kenameaapp":{"source":"iana","extensions":["htke"]},"application/vnd.kidspiration":{"source":"iana","extensions":["kia"]},"application/vnd.kinar":{"source":"iana","extensions":["kne","knp"]},"application/vnd.koan":{"source":"iana","extensions":["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{"source":"iana","extensions":["sse"]},"application/vnd.las":{"source":"iana"},"application/vnd.las.las+json":{"source":"iana","compressible":true},"application/vnd.las.las+xml":{"source":"iana","compressible":true,"extensions":["lasxml"]},"application/vnd.laszip":{"source":"iana"},"application/vnd.leap+json":{"source":"iana","compressible":true},"application/vnd.liberty-request+xml":{"source":"iana","compressible":true},"application/vnd.llamagraphics.life-balance.desktop":{"source":"iana","extensions":["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{"source":"iana","compressible":true,"extensions":["lbe"]},"application/vnd.logipipe.circuit+zip":{"source":"iana","compressible":false},"application/vnd.loom":{"source":"iana"},"application/vnd.lotus-1-2-3":{"source":"iana","extensions":["123"]},"application/vnd.lotus-approach":{"source":"iana","extensions":["apr"]},"application/vnd.lotus-freelance":{"source":"iana","extensions":["pre"]},"application/vnd.lotus-notes":{"source":"iana","extensions":["nsf"]},"application/vnd.lotus-organizer":{"source":"iana","extensions":["org"]},"application/vnd.lotus-screencam":{"source":"iana","extensions":["scm"]},"application/vnd.lotus-wordpro":{"source":"iana","extensions":["lwp"]},"application/vnd.macports.portpkg":{"source":"iana","extensions":["portpkg"]},"application/vnd.mapbox-vector-tile":{"source":"iana","extensions":["mvt"]},"application/vnd.marlin.drm.actiontoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.conftoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.license+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.mdcf":{"source":"iana"},"application/vnd.mason+json":{"source":"iana","compressible":true},"application/vnd.maxar.archive.3tz+zip":{"source":"iana","compressible":false},"application/vnd.maxmind.maxmind-db":{"source":"iana"},"application/vnd.mcd":{"source":"iana","extensions":["mcd"]},"application/vnd.medcalcdata":{"source":"iana","extensions":["mc1"]},"application/vnd.mediastation.cdkey":{"source":"iana","extensions":["cdkey"]},"application/vnd.meridian-slingshot":{"source":"iana"},"application/vnd.mfer":{"source":"iana","extensions":["mwf"]},"application/vnd.mfmp":{"source":"iana","extensions":["mfm"]},"application/vnd.micro+json":{"source":"iana","compressible":true},"application/vnd.micrografx.flo":{"source":"iana","extensions":["flo"]},"application/vnd.micrografx.igx":{"source":"iana","extensions":["igx"]},"application/vnd.microsoft.portable-executable":{"source":"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{"source":"iana"},"application/vnd.miele+json":{"source":"iana","compressible":true},"application/vnd.mif":{"source":"iana","extensions":["mif"]},"application/vnd.minisoft-hp3000-save":{"source":"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{"source":"iana"},"application/vnd.mobius.daf":{"source":"iana","extensions":["daf"]},"application/vnd.mobius.dis":{"source":"iana","extensions":["dis"]},"application/vnd.mobius.mbk":{"source":"iana","extensions":["mbk"]},"application/vnd.mobius.mqy":{"source":"iana","extensions":["mqy"]},"application/vnd.mobius.msl":{"source":"iana","extensions":["msl"]},"application/vnd.mobius.plc":{"source":"iana","extensions":["plc"]},"application/vnd.mobius.txf":{"source":"iana","extensions":["txf"]},"application/vnd.mophun.application":{"source":"iana","extensions":["mpn"]},"application/vnd.mophun.certificate":{"source":"iana","extensions":["mpc"]},"application/vnd.motorola.flexsuite":{"source":"iana"},"application/vnd.motorola.flexsuite.adsi":{"source":"iana"},"application/vnd.motorola.flexsuite.fis":{"source":"iana"},"application/vnd.motorola.flexsuite.gotap":{"source":"iana"},"application/vnd.motorola.flexsuite.kmr":{"source":"iana"},"application/vnd.motorola.flexsuite.ttc":{"source":"iana"},"application/vnd.motorola.flexsuite.wem":{"source":"iana"},"application/vnd.motorola.iprm":{"source":"iana"},"application/vnd.mozilla.xul+xml":{"source":"iana","compressible":true,"extensions":["xul"]},"application/vnd.ms-3mfdocument":{"source":"iana"},"application/vnd.ms-artgalry":{"source":"iana","extensions":["cil"]},"application/vnd.ms-asf":{"source":"iana"},"application/vnd.ms-cab-compressed":{"source":"iana","extensions":["cab"]},"application/vnd.ms-color.iccprofile":{"source":"apache"},"application/vnd.ms-excel":{"source":"iana","compressible":false,"extensions":["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{"source":"iana","extensions":["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{"source":"iana","extensions":["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{"source":"iana","extensions":["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{"source":"iana","extensions":["xltm"]},"application/vnd.ms-fontobject":{"source":"iana","compressible":true,"extensions":["eot"]},"application/vnd.ms-htmlhelp":{"source":"iana","extensions":["chm"]},"application/vnd.ms-ims":{"source":"iana","extensions":["ims"]},"application/vnd.ms-lrm":{"source":"iana","extensions":["lrm"]},"application/vnd.ms-office.activex+xml":{"source":"iana","compressible":true},"application/vnd.ms-officetheme":{"source":"iana","extensions":["thmx"]},"application/vnd.ms-opentype":{"source":"apache","compressible":true},"application/vnd.ms-outlook":{"compressible":false,"extensions":["msg"]},"application/vnd.ms-package.obfuscated-opentype":{"source":"apache"},"application/vnd.ms-pki.seccat":{"source":"apache","extensions":["cat"]},"application/vnd.ms-pki.stl":{"source":"apache","extensions":["stl"]},"application/vnd.ms-playready.initiator+xml":{"source":"iana","compressible":true},"application/vnd.ms-powerpoint":{"source":"iana","compressible":false,"extensions":["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{"source":"iana","extensions":["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{"source":"iana","extensions":["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{"source":"iana","extensions":["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{"source":"iana","extensions":["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{"source":"iana","extensions":["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{"source":"iana","compressible":true},"application/vnd.ms-printing.printticket+xml":{"source":"apache","compressible":true},"application/vnd.ms-printschematicket+xml":{"source":"iana","compressible":true},"application/vnd.ms-project":{"source":"iana","extensions":["mpp","mpt"]},"application/vnd.ms-tnef":{"source":"iana"},"application/vnd.ms-windows.devicepairing":{"source":"iana"},"application/vnd.ms-windows.nwprinting.oob":{"source":"iana"},"application/vnd.ms-windows.printerpairing":{"source":"iana"},"application/vnd.ms-windows.wsd.oob":{"source":"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.lic-resp":{"source":"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.meter-resp":{"source":"iana"},"application/vnd.ms-word.document.macroenabled.12":{"source":"iana","extensions":["docm"]},"application/vnd.ms-word.template.macroenabled.12":{"source":"iana","extensions":["dotm"]},"application/vnd.ms-works":{"source":"iana","extensions":["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{"source":"iana","extensions":["wpl"]},"application/vnd.ms-xpsdocument":{"source":"iana","compressible":false,"extensions":["xps"]},"application/vnd.msa-disk-image":{"source":"iana"},"application/vnd.mseq":{"source":"iana","extensions":["mseq"]},"application/vnd.msign":{"source":"iana"},"application/vnd.multiad.creator":{"source":"iana"},"application/vnd.multiad.creator.cif":{"source":"iana"},"application/vnd.music-niff":{"source":"iana"},"application/vnd.musician":{"source":"iana","extensions":["mus"]},"application/vnd.muvee.style":{"source":"iana","extensions":["msty"]},"application/vnd.mynfc":{"source":"iana","extensions":["taglet"]},"application/vnd.nacamar.ybrid+json":{"source":"iana","compressible":true},"application/vnd.ncd.control":{"source":"iana"},"application/vnd.ncd.reference":{"source":"iana"},"application/vnd.nearst.inv+json":{"source":"iana","compressible":true},"application/vnd.nebumind.line":{"source":"iana"},"application/vnd.nervana":{"source":"iana"},"application/vnd.netfpx":{"source":"iana"},"application/vnd.neurolanguage.nlu":{"source":"iana","extensions":["nlu"]},"application/vnd.nimn":{"source":"iana"},"application/vnd.nintendo.nitro.rom":{"source":"iana"},"application/vnd.nintendo.snes.rom":{"source":"iana"},"application/vnd.nitf":{"source":"iana","extensions":["ntf","nitf"]},"application/vnd.noblenet-directory":{"source":"iana","extensions":["nnd"]},"application/vnd.noblenet-sealer":{"source":"iana","extensions":["nns"]},"application/vnd.noblenet-web":{"source":"iana","extensions":["nnw"]},"application/vnd.nokia.catalogs":{"source":"iana"},"application/vnd.nokia.conml+wbxml":{"source":"iana"},"application/vnd.nokia.conml+xml":{"source":"iana","compressible":true},"application/vnd.nokia.iptv.config+xml":{"source":"iana","compressible":true},"application/vnd.nokia.isds-radio-presets":{"source":"iana"},"application/vnd.nokia.landmark+wbxml":{"source":"iana"},"application/vnd.nokia.landmark+xml":{"source":"iana","compressible":true},"application/vnd.nokia.landmarkcollection+xml":{"source":"iana","compressible":true},"application/vnd.nokia.n-gage.ac+xml":{"source":"iana","compressible":true,"extensions":["ac"]},"application/vnd.nokia.n-gage.data":{"source":"iana","extensions":["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{"source":"iana","extensions":["n-gage"]},"application/vnd.nokia.ncd":{"source":"iana"},"application/vnd.nokia.pcd+wbxml":{"source":"iana"},"application/vnd.nokia.pcd+xml":{"source":"iana","compressible":true},"application/vnd.nokia.radio-preset":{"source":"iana","extensions":["rpst"]},"application/vnd.nokia.radio-presets":{"source":"iana","extensions":["rpss"]},"application/vnd.novadigm.edm":{"source":"iana","extensions":["edm"]},"application/vnd.novadigm.edx":{"source":"iana","extensions":["edx"]},"application/vnd.novadigm.ext":{"source":"iana","extensions":["ext"]},"application/vnd.ntt-local.content-share":{"source":"iana"},"application/vnd.ntt-local.file-transfer":{"source":"iana"},"application/vnd.ntt-local.ogw_remote-access":{"source":"iana"},"application/vnd.ntt-local.sip-ta_remote":{"source":"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{"source":"iana"},"application/vnd.oasis.opendocument.chart":{"source":"iana","extensions":["odc"]},"application/vnd.oasis.opendocument.chart-template":{"source":"iana","extensions":["otc"]},"application/vnd.oasis.opendocument.database":{"source":"iana","extensions":["odb"]},"application/vnd.oasis.opendocument.formula":{"source":"iana","extensions":["odf"]},"application/vnd.oasis.opendocument.formula-template":{"source":"iana","extensions":["odft"]},"application/vnd.oasis.opendocument.graphics":{"source":"iana","compressible":false,"extensions":["odg"]},"application/vnd.oasis.opendocument.graphics-template":{"source":"iana","extensions":["otg"]},"application/vnd.oasis.opendocument.image":{"source":"iana","extensions":["odi"]},"application/vnd.oasis.opendocument.image-template":{"source":"iana","extensions":["oti"]},"application/vnd.oasis.opendocument.presentation":{"source":"iana","compressible":false,"extensions":["odp"]},"application/vnd.oasis.opendocument.presentation-template":{"source":"iana","extensions":["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{"source":"iana","compressible":false,"extensions":["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{"source":"iana","extensions":["ots"]},"application/vnd.oasis.opendocument.text":{"source":"iana","compressible":false,"extensions":["odt"]},"application/vnd.oasis.opendocument.text-master":{"source":"iana","extensions":["odm"]},"application/vnd.oasis.opendocument.text-template":{"source":"iana","extensions":["ott"]},"application/vnd.oasis.opendocument.text-web":{"source":"iana","extensions":["oth"]},"application/vnd.obn":{"source":"iana"},"application/vnd.ocf+cbor":{"source":"iana"},"application/vnd.oci.image.manifest.v1+json":{"source":"iana","compressible":true},"application/vnd.oftn.l10n+json":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessdownload+xml":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessstreaming+xml":{"source":"iana","compressible":true},"application/vnd.oipf.cspg-hexbinary":{"source":"iana"},"application/vnd.oipf.dae.svg+xml":{"source":"iana","compressible":true},"application/vnd.oipf.dae.xhtml+xml":{"source":"iana","compressible":true},"application/vnd.oipf.mippvcontrolmessage+xml":{"source":"iana","compressible":true},"application/vnd.oipf.pae.gem":{"source":"iana"},"application/vnd.oipf.spdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.oipf.spdlist+xml":{"source":"iana","compressible":true},"application/vnd.oipf.ueprofile+xml":{"source":"iana","compressible":true},"application/vnd.oipf.userprofile+xml":{"source":"iana","compressible":true},"application/vnd.olpc-sugar":{"source":"iana","extensions":["xo"]},"application/vnd.oma-scws-config":{"source":"iana"},"application/vnd.oma-scws-http-request":{"source":"iana"},"application/vnd.oma-scws-http-response":{"source":"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.drm-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.imd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.ltkm":{"source":"iana"},"application/vnd.oma.bcast.notification+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.provisioningtrigger":{"source":"iana"},"application/vnd.oma.bcast.sgboot":{"source":"iana"},"application/vnd.oma.bcast.sgdd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sgdu":{"source":"iana"},"application/vnd.oma.bcast.simple-symbol-container":{"source":"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sprov+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.stkm":{"source":"iana"},"application/vnd.oma.cab-address-book+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-feature-handler+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-pcc+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-subs-invite+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-user-prefs+xml":{"source":"iana","compressible":true},"application/vnd.oma.dcd":{"source":"iana"},"application/vnd.oma.dcdc":{"source":"iana"},"application/vnd.oma.dd2+xml":{"source":"iana","compressible":true,"extensions":["dd2"]},"application/vnd.oma.drm.risd+xml":{"source":"iana","compressible":true},"application/vnd.oma.group-usage-list+xml":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+cbor":{"source":"iana"},"application/vnd.oma.lwm2m+json":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+tlv":{"source":"iana"},"application/vnd.oma.pal+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.detailed-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.final-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.groups+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.invocation-descriptor+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.optimized-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.push":{"source":"iana"},"application/vnd.oma.scidm.messages+xml":{"source":"iana","compressible":true},"application/vnd.oma.xcap-directory+xml":{"source":"iana","compressible":true},"application/vnd.omads-email+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-file+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-folder+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omaloc-supl-init":{"source":"iana"},"application/vnd.onepager":{"source":"iana"},"application/vnd.onepagertamp":{"source":"iana"},"application/vnd.onepagertamx":{"source":"iana"},"application/vnd.onepagertat":{"source":"iana"},"application/vnd.onepagertatp":{"source":"iana"},"application/vnd.onepagertatx":{"source":"iana"},"application/vnd.openblox.game+xml":{"source":"iana","compressible":true,"extensions":["obgx"]},"application/vnd.openblox.game-binary":{"source":"iana"},"application/vnd.openeye.oeb":{"source":"iana"},"application/vnd.openofficeorg.extension":{"source":"apache","extensions":["oxt"]},"application/vnd.openstreetmap.data+xml":{"source":"iana","compressible":true,"extensions":["osm"]},"application/vnd.opentimestamps.ots":{"source":"iana"},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawing+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{"source":"iana","compressible":false,"extensions":["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slide":{"source":"iana","extensions":["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{"source":"iana","extensions":["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.template":{"source":"iana","extensions":["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"source":"iana","compressible":false,"extensions":["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{"source":"iana","extensions":["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.theme+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.vmldrawing":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{"source":"iana","compressible":false,"extensions":["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{"source":"iana","extensions":["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.core-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.relationships+xml":{"source":"iana","compressible":true},"application/vnd.oracle.resource+json":{"source":"iana","compressible":true},"application/vnd.orange.indata":{"source":"iana"},"application/vnd.osa.netdeploy":{"source":"iana"},"application/vnd.osgeo.mapguide.package":{"source":"iana","extensions":["mgp"]},"application/vnd.osgi.bundle":{"source":"iana"},"application/vnd.osgi.dp":{"source":"iana","extensions":["dp"]},"application/vnd.osgi.subsystem":{"source":"iana","extensions":["esa"]},"application/vnd.otps.ct-kip+xml":{"source":"iana","compressible":true},"application/vnd.oxli.countgraph":{"source":"iana"},"application/vnd.pagerduty+json":{"source":"iana","compressible":true},"application/vnd.palm":{"source":"iana","extensions":["pdb","pqa","oprc"]},"application/vnd.panoply":{"source":"iana"},"application/vnd.paos.xml":{"source":"iana"},"application/vnd.patentdive":{"source":"iana"},"application/vnd.patientecommsdoc":{"source":"iana"},"application/vnd.pawaafile":{"source":"iana","extensions":["paw"]},"application/vnd.pcos":{"source":"iana"},"application/vnd.pg.format":{"source":"iana","extensions":["str"]},"application/vnd.pg.osasli":{"source":"iana","extensions":["ei6"]},"application/vnd.piaccess.application-licence":{"source":"iana"},"application/vnd.picsel":{"source":"iana","extensions":["efif"]},"application/vnd.pmi.widget":{"source":"iana","extensions":["wg"]},"application/vnd.poc.group-advertisement+xml":{"source":"iana","compressible":true},"application/vnd.pocketlearn":{"source":"iana","extensions":["plf"]},"application/vnd.powerbuilder6":{"source":"iana","extensions":["pbd"]},"application/vnd.powerbuilder6-s":{"source":"iana"},"application/vnd.powerbuilder7":{"source":"iana"},"application/vnd.powerbuilder7-s":{"source":"iana"},"application/vnd.powerbuilder75":{"source":"iana"},"application/vnd.powerbuilder75-s":{"source":"iana"},"application/vnd.preminet":{"source":"iana"},"application/vnd.previewsystems.box":{"source":"iana","extensions":["box"]},"application/vnd.proteus.magazine":{"source":"iana","extensions":["mgz"]},"application/vnd.psfs":{"source":"iana"},"application/vnd.publishare-delta-tree":{"source":"iana","extensions":["qps"]},"application/vnd.pvi.ptid1":{"source":"iana","extensions":["ptid"]},"application/vnd.pwg-multiplexed":{"source":"iana"},"application/vnd.pwg-xhtml-print+xml":{"source":"iana","compressible":true},"application/vnd.qualcomm.brew-app-res":{"source":"iana"},"application/vnd.quarantainenet":{"source":"iana"},"application/vnd.quark.quarkxpress":{"source":"iana","extensions":["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{"source":"iana"},"application/vnd.radisys.moml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conn+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-stream+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-base+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-detect+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-group+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-speech+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-transform+xml":{"source":"iana","compressible":true},"application/vnd.rainstor.data":{"source":"iana"},"application/vnd.rapid":{"source":"iana"},"application/vnd.rar":{"source":"iana","extensions":["rar"]},"application/vnd.realvnc.bed":{"source":"iana","extensions":["bed"]},"application/vnd.recordare.musicxml":{"source":"iana","extensions":["mxl"]},"application/vnd.recordare.musicxml+xml":{"source":"iana","compressible":true,"extensions":["musicxml"]},"application/vnd.renlearn.rlprint":{"source":"iana"},"application/vnd.resilient.logic":{"source":"iana"},"application/vnd.restful+json":{"source":"iana","compressible":true},"application/vnd.rig.cryptonote":{"source":"iana","extensions":["cryptonote"]},"application/vnd.rim.cod":{"source":"apache","extensions":["cod"]},"application/vnd.rn-realmedia":{"source":"apache","extensions":["rm"]},"application/vnd.rn-realmedia-vbr":{"source":"apache","extensions":["rmvb"]},"application/vnd.route66.link66+xml":{"source":"iana","compressible":true,"extensions":["link66"]},"application/vnd.rs-274x":{"source":"iana"},"application/vnd.ruckus.download":{"source":"iana"},"application/vnd.s3sms":{"source":"iana"},"application/vnd.sailingtracker.track":{"source":"iana","extensions":["st"]},"application/vnd.sar":{"source":"iana"},"application/vnd.sbm.cid":{"source":"iana"},"application/vnd.sbm.mid2":{"source":"iana"},"application/vnd.scribus":{"source":"iana"},"application/vnd.sealed.3df":{"source":"iana"},"application/vnd.sealed.csf":{"source":"iana"},"application/vnd.sealed.doc":{"source":"iana"},"application/vnd.sealed.eml":{"source":"iana"},"application/vnd.sealed.mht":{"source":"iana"},"application/vnd.sealed.net":{"source":"iana"},"application/vnd.sealed.ppt":{"source":"iana"},"application/vnd.sealed.tiff":{"source":"iana"},"application/vnd.sealed.xls":{"source":"iana"},"application/vnd.sealedmedia.softseal.html":{"source":"iana"},"application/vnd.sealedmedia.softseal.pdf":{"source":"iana"},"application/vnd.seemail":{"source":"iana","extensions":["see"]},"application/vnd.seis+json":{"source":"iana","compressible":true},"application/vnd.sema":{"source":"iana","extensions":["sema"]},"application/vnd.semd":{"source":"iana","extensions":["semd"]},"application/vnd.semf":{"source":"iana","extensions":["semf"]},"application/vnd.shade-save-file":{"source":"iana"},"application/vnd.shana.informed.formdata":{"source":"iana","extensions":["ifm"]},"application/vnd.shana.informed.formtemplate":{"source":"iana","extensions":["itp"]},"application/vnd.shana.informed.interchange":{"source":"iana","extensions":["iif"]},"application/vnd.shana.informed.package":{"source":"iana","extensions":["ipk"]},"application/vnd.shootproof+json":{"source":"iana","compressible":true},"application/vnd.shopkick+json":{"source":"iana","compressible":true},"application/vnd.shp":{"source":"iana"},"application/vnd.shx":{"source":"iana"},"application/vnd.sigrok.session":{"source":"iana"},"application/vnd.simtech-mindmapper":{"source":"iana","extensions":["twd","twds"]},"application/vnd.siren+json":{"source":"iana","compressible":true},"application/vnd.smaf":{"source":"iana","extensions":["mmf"]},"application/vnd.smart.notebook":{"source":"iana"},"application/vnd.smart.teacher":{"source":"iana","extensions":["teacher"]},"application/vnd.snesdev-page-table":{"source":"iana"},"application/vnd.software602.filler.form+xml":{"source":"iana","compressible":true,"extensions":["fo"]},"application/vnd.software602.filler.form-xml-zip":{"source":"iana"},"application/vnd.solent.sdkm+xml":{"source":"iana","compressible":true,"extensions":["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{"source":"iana","extensions":["dxp"]},"application/vnd.spotfire.sfs":{"source":"iana","extensions":["sfs"]},"application/vnd.sqlite3":{"source":"iana"},"application/vnd.sss-cod":{"source":"iana"},"application/vnd.sss-dtf":{"source":"iana"},"application/vnd.sss-ntf":{"source":"iana"},"application/vnd.stardivision.calc":{"source":"apache","extensions":["sdc"]},"application/vnd.stardivision.draw":{"source":"apache","extensions":["sda"]},"application/vnd.stardivision.impress":{"source":"apache","extensions":["sdd"]},"application/vnd.stardivision.math":{"source":"apache","extensions":["smf"]},"application/vnd.stardivision.writer":{"source":"apache","extensions":["sdw","vor"]},"application/vnd.stardivision.writer-global":{"source":"apache","extensions":["sgl"]},"application/vnd.stepmania.package":{"source":"iana","extensions":["smzip"]},"application/vnd.stepmania.stepchart":{"source":"iana","extensions":["sm"]},"application/vnd.street-stream":{"source":"iana"},"application/vnd.sun.wadl+xml":{"source":"iana","compressible":true,"extensions":["wadl"]},"application/vnd.sun.xml.calc":{"source":"apache","extensions":["sxc"]},"application/vnd.sun.xml.calc.template":{"source":"apache","extensions":["stc"]},"application/vnd.sun.xml.draw":{"source":"apache","extensions":["sxd"]},"application/vnd.sun.xml.draw.template":{"source":"apache","extensions":["std"]},"application/vnd.sun.xml.impress":{"source":"apache","extensions":["sxi"]},"application/vnd.sun.xml.impress.template":{"source":"apache","extensions":["sti"]},"application/vnd.sun.xml.math":{"source":"apache","extensions":["sxm"]},"application/vnd.sun.xml.writer":{"source":"apache","extensions":["sxw"]},"application/vnd.sun.xml.writer.global":{"source":"apache","extensions":["sxg"]},"application/vnd.sun.xml.writer.template":{"source":"apache","extensions":["stw"]},"application/vnd.sus-calendar":{"source":"iana","extensions":["sus","susp"]},"application/vnd.svd":{"source":"iana","extensions":["svd"]},"application/vnd.swiftview-ics":{"source":"iana"},"application/vnd.sycle+xml":{"source":"iana","compressible":true},"application/vnd.syft+json":{"source":"iana","compressible":true},"application/vnd.symbian.install":{"source":"apache","extensions":["sis","sisx"]},"application/vnd.syncml+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xsm"]},"application/vnd.syncml.dm+wbxml":{"source":"iana","charset":"UTF-8","extensions":["bdm"]},"application/vnd.syncml.dm+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xdm"]},"application/vnd.syncml.dm.notification":{"source":"iana"},"application/vnd.syncml.dmddf+wbxml":{"source":"iana"},"application/vnd.syncml.dmddf+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{"source":"iana"},"application/vnd.syncml.dmtnds+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.syncml.ds.notification":{"source":"iana"},"application/vnd.tableschema+json":{"source":"iana","compressible":true},"application/vnd.tao.intent-module-archive":{"source":"iana","extensions":["tao"]},"application/vnd.tcpdump.pcap":{"source":"iana","extensions":["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{"source":"iana","compressible":true},"application/vnd.tmd.mediaflex.api+xml":{"source":"iana","compressible":true},"application/vnd.tml":{"source":"iana"},"application/vnd.tmobile-livetv":{"source":"iana","extensions":["tmo"]},"application/vnd.tri.onesource":{"source":"iana"},"application/vnd.trid.tpt":{"source":"iana","extensions":["tpt"]},"application/vnd.triscape.mxs":{"source":"iana","extensions":["mxs"]},"application/vnd.trueapp":{"source":"iana","extensions":["tra"]},"application/vnd.truedoc":{"source":"iana"},"application/vnd.ubisoft.webplayer":{"source":"iana"},"application/vnd.ufdl":{"source":"iana","extensions":["ufd","ufdl"]},"application/vnd.uiq.theme":{"source":"iana","extensions":["utz"]},"application/vnd.umajin":{"source":"iana","extensions":["umj"]},"application/vnd.unity":{"source":"iana","extensions":["unityweb"]},"application/vnd.uoml+xml":{"source":"iana","compressible":true,"extensions":["uoml"]},"application/vnd.uplanet.alert":{"source":"iana"},"application/vnd.uplanet.alert-wbxml":{"source":"iana"},"application/vnd.uplanet.bearer-choice":{"source":"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{"source":"iana"},"application/vnd.uplanet.cacheop":{"source":"iana"},"application/vnd.uplanet.cacheop-wbxml":{"source":"iana"},"application/vnd.uplanet.channel":{"source":"iana"},"application/vnd.uplanet.channel-wbxml":{"source":"iana"},"application/vnd.uplanet.list":{"source":"iana"},"application/vnd.uplanet.list-wbxml":{"source":"iana"},"application/vnd.uplanet.listcmd":{"source":"iana"},"application/vnd.uplanet.listcmd-wbxml":{"source":"iana"},"application/vnd.uplanet.signal":{"source":"iana"},"application/vnd.uri-map":{"source":"iana"},"application/vnd.valve.source.material":{"source":"iana"},"application/vnd.vcx":{"source":"iana","extensions":["vcx"]},"application/vnd.vd-study":{"source":"iana"},"application/vnd.vectorworks":{"source":"iana"},"application/vnd.vel+json":{"source":"iana","compressible":true},"application/vnd.verimatrix.vcas":{"source":"iana"},"application/vnd.veritone.aion+json":{"source":"iana","compressible":true},"application/vnd.veryant.thin":{"source":"iana"},"application/vnd.ves.encrypted":{"source":"iana"},"application/vnd.vidsoft.vidconference":{"source":"iana"},"application/vnd.visio":{"source":"iana","extensions":["vsd","vst","vss","vsw"]},"application/vnd.visionary":{"source":"iana","extensions":["vis"]},"application/vnd.vividence.scriptfile":{"source":"iana"},"application/vnd.vsf":{"source":"iana","extensions":["vsf"]},"application/vnd.wap.sic":{"source":"iana"},"application/vnd.wap.slc":{"source":"iana"},"application/vnd.wap.wbxml":{"source":"iana","charset":"UTF-8","extensions":["wbxml"]},"application/vnd.wap.wmlc":{"source":"iana","extensions":["wmlc"]},"application/vnd.wap.wmlscriptc":{"source":"iana","extensions":["wmlsc"]},"application/vnd.webturbo":{"source":"iana","extensions":["wtb"]},"application/vnd.wfa.dpp":{"source":"iana"},"application/vnd.wfa.p2p":{"source":"iana"},"application/vnd.wfa.wsc":{"source":"iana"},"application/vnd.windows.devicepairing":{"source":"iana"},"application/vnd.wmc":{"source":"iana"},"application/vnd.wmf.bootstrap":{"source":"iana"},"application/vnd.wolfram.mathematica":{"source":"iana"},"application/vnd.wolfram.mathematica.package":{"source":"iana"},"application/vnd.wolfram.player":{"source":"iana","extensions":["nbp"]},"application/vnd.wordperfect":{"source":"iana","extensions":["wpd"]},"application/vnd.wqd":{"source":"iana","extensions":["wqd"]},"application/vnd.wrq-hp3000-labelled":{"source":"iana"},"application/vnd.wt.stf":{"source":"iana","extensions":["stf"]},"application/vnd.wv.csp+wbxml":{"source":"iana"},"application/vnd.wv.csp+xml":{"source":"iana","compressible":true},"application/vnd.wv.ssp+xml":{"source":"iana","compressible":true},"application/vnd.xacml+json":{"source":"iana","compressible":true},"application/vnd.xara":{"source":"iana","extensions":["xar"]},"application/vnd.xfdl":{"source":"iana","extensions":["xfdl"]},"application/vnd.xfdl.webform":{"source":"iana"},"application/vnd.xmi+xml":{"source":"iana","compressible":true},"application/vnd.xmpie.cpkg":{"source":"iana"},"application/vnd.xmpie.dpkg":{"source":"iana"},"application/vnd.xmpie.plan":{"source":"iana"},"application/vnd.xmpie.ppkg":{"source":"iana"},"application/vnd.xmpie.xlim":{"source":"iana"},"application/vnd.yamaha.hv-dic":{"source":"iana","extensions":["hvd"]},"application/vnd.yamaha.hv-script":{"source":"iana","extensions":["hvs"]},"application/vnd.yamaha.hv-voice":{"source":"iana","extensions":["hvp"]},"application/vnd.yamaha.openscoreformat":{"source":"iana","extensions":["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{"source":"iana","compressible":true,"extensions":["osfpvg"]},"application/vnd.yamaha.remote-setup":{"source":"iana"},"application/vnd.yamaha.smaf-audio":{"source":"iana","extensions":["saf"]},"application/vnd.yamaha.smaf-phrase":{"source":"iana","extensions":["spf"]},"application/vnd.yamaha.through-ngn":{"source":"iana"},"application/vnd.yamaha.tunnel-udpencap":{"source":"iana"},"application/vnd.yaoweme":{"source":"iana"},"application/vnd.yellowriver-custom-menu":{"source":"iana","extensions":["cmp"]},"application/vnd.youtube.yt":{"source":"iana"},"application/vnd.zul":{"source":"iana","extensions":["zir","zirz"]},"application/vnd.zzazz.deck+xml":{"source":"iana","compressible":true,"extensions":["zaz"]},"application/voicexml+xml":{"source":"iana","compressible":true,"extensions":["vxml"]},"application/voucher-cms+json":{"source":"iana","compressible":true},"application/vq-rtcpxr":{"source":"iana"},"application/wasm":{"source":"iana","compressible":true,"extensions":["wasm"]},"application/watcherinfo+xml":{"source":"iana","compressible":true,"extensions":["wif"]},"application/webpush-options+json":{"source":"iana","compressible":true},"application/whoispp-query":{"source":"iana"},"application/whoispp-response":{"source":"iana"},"application/widget":{"source":"iana","extensions":["wgt"]},"application/winhlp":{"source":"apache","extensions":["hlp"]},"application/wita":{"source":"iana"},"application/wordperfect5.1":{"source":"iana"},"application/wsdl+xml":{"source":"iana","compressible":true,"extensions":["wsdl"]},"application/wspolicy+xml":{"source":"iana","compressible":true,"extensions":["wspolicy"]},"application/x-7z-compressed":{"source":"apache","compressible":false,"extensions":["7z"]},"application/x-abiword":{"source":"apache","extensions":["abw"]},"application/x-ace-compressed":{"source":"apache","extensions":["ace"]},"application/x-amf":{"source":"apache"},"application/x-apple-diskimage":{"source":"apache","extensions":["dmg"]},"application/x-arj":{"compressible":false,"extensions":["arj"]},"application/x-authorware-bin":{"source":"apache","extensions":["aab","x32","u32","vox"]},"application/x-authorware-map":{"source":"apache","extensions":["aam"]},"application/x-authorware-seg":{"source":"apache","extensions":["aas"]},"application/x-bcpio":{"source":"apache","extensions":["bcpio"]},"application/x-bdoc":{"compressible":false,"extensions":["bdoc"]},"application/x-bittorrent":{"source":"apache","extensions":["torrent"]},"application/x-blorb":{"source":"apache","extensions":["blb","blorb"]},"application/x-bzip":{"source":"apache","compressible":false,"extensions":["bz"]},"application/x-bzip2":{"source":"apache","compressible":false,"extensions":["bz2","boz"]},"application/x-cbr":{"source":"apache","extensions":["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{"source":"apache","extensions":["vcd"]},"application/x-cfs-compressed":{"source":"apache","extensions":["cfs"]},"application/x-chat":{"source":"apache","extensions":["chat"]},"application/x-chess-pgn":{"source":"apache","extensions":["pgn"]},"application/x-chrome-extension":{"extensions":["crx"]},"application/x-cocoa":{"source":"nginx","extensions":["cco"]},"application/x-compress":{"source":"apache"},"application/x-conference":{"source":"apache","extensions":["nsc"]},"application/x-cpio":{"source":"apache","extensions":["cpio"]},"application/x-csh":{"source":"apache","extensions":["csh"]},"application/x-deb":{"compressible":false},"application/x-debian-package":{"source":"apache","extensions":["deb","udeb"]},"application/x-dgc-compressed":{"source":"apache","extensions":["dgc"]},"application/x-director":{"source":"apache","extensions":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{"source":"apache","extensions":["wad"]},"application/x-dtbncx+xml":{"source":"apache","compressible":true,"extensions":["ncx"]},"application/x-dtbook+xml":{"source":"apache","compressible":true,"extensions":["dtb"]},"application/x-dtbresource+xml":{"source":"apache","compressible":true,"extensions":["res"]},"application/x-dvi":{"source":"apache","compressible":false,"extensions":["dvi"]},"application/x-envoy":{"source":"apache","extensions":["evy"]},"application/x-eva":{"source":"apache","extensions":["eva"]},"application/x-font-bdf":{"source":"apache","extensions":["bdf"]},"application/x-font-dos":{"source":"apache"},"application/x-font-framemaker":{"source":"apache"},"application/x-font-ghostscript":{"source":"apache","extensions":["gsf"]},"application/x-font-libgrx":{"source":"apache"},"application/x-font-linux-psf":{"source":"apache","extensions":["psf"]},"application/x-font-pcf":{"source":"apache","extensions":["pcf"]},"application/x-font-snf":{"source":"apache","extensions":["snf"]},"application/x-font-speedo":{"source":"apache"},"application/x-font-sunos-news":{"source":"apache"},"application/x-font-type1":{"source":"apache","extensions":["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{"source":"apache"},"application/x-freearc":{"source":"apache","extensions":["arc"]},"application/x-futuresplash":{"source":"apache","extensions":["spl"]},"application/x-gca-compressed":{"source":"apache","extensions":["gca"]},"application/x-glulx":{"source":"apache","extensions":["ulx"]},"application/x-gnumeric":{"source":"apache","extensions":["gnumeric"]},"application/x-gramps-xml":{"source":"apache","extensions":["gramps"]},"application/x-gtar":{"source":"apache","extensions":["gtar"]},"application/x-gzip":{"source":"apache"},"application/x-hdf":{"source":"apache","extensions":["hdf"]},"application/x-httpd-php":{"compressible":true,"extensions":["php"]},"application/x-install-instructions":{"source":"apache","extensions":["install"]},"application/x-iso9660-image":{"source":"apache","extensions":["iso"]},"application/x-iwork-keynote-sffkey":{"extensions":["key"]},"application/x-iwork-numbers-sffnumbers":{"extensions":["numbers"]},"application/x-iwork-pages-sffpages":{"extensions":["pages"]},"application/x-java-archive-diff":{"source":"nginx","extensions":["jardiff"]},"application/x-java-jnlp-file":{"source":"apache","compressible":false,"extensions":["jnlp"]},"application/x-javascript":{"compressible":true},"application/x-keepass2":{"extensions":["kdbx"]},"application/x-latex":{"source":"apache","compressible":false,"extensions":["latex"]},"application/x-lua-bytecode":{"extensions":["luac"]},"application/x-lzh-compressed":{"source":"apache","extensions":["lzh","lha"]},"application/x-makeself":{"source":"nginx","extensions":["run"]},"application/x-mie":{"source":"apache","extensions":["mie"]},"application/x-mobipocket-ebook":{"source":"apache","extensions":["prc","mobi"]},"application/x-mpegurl":{"compressible":false},"application/x-ms-application":{"source":"apache","extensions":["application"]},"application/x-ms-shortcut":{"source":"apache","extensions":["lnk"]},"application/x-ms-wmd":{"source":"apache","extensions":["wmd"]},"application/x-ms-wmz":{"source":"apache","extensions":["wmz"]},"application/x-ms-xbap":{"source":"apache","extensions":["xbap"]},"application/x-msaccess":{"source":"apache","extensions":["mdb"]},"application/x-msbinder":{"source":"apache","extensions":["obd"]},"application/x-mscardfile":{"source":"apache","extensions":["crd"]},"application/x-msclip":{"source":"apache","extensions":["clp"]},"application/x-msdos-program":{"extensions":["exe"]},"application/x-msdownload":{"source":"apache","extensions":["exe","dll","com","bat","msi"]},"application/x-msmediaview":{"source":"apache","extensions":["mvb","m13","m14"]},"application/x-msmetafile":{"source":"apache","extensions":["wmf","wmz","emf","emz"]},"application/x-msmoney":{"source":"apache","extensions":["mny"]},"application/x-mspublisher":{"source":"apache","extensions":["pub"]},"application/x-msschedule":{"source":"apache","extensions":["scd"]},"application/x-msterminal":{"source":"apache","extensions":["trm"]},"application/x-mswrite":{"source":"apache","extensions":["wri"]},"application/x-netcdf":{"source":"apache","extensions":["nc","cdf"]},"application/x-ns-proxy-autoconfig":{"compressible":true,"extensions":["pac"]},"application/x-nzb":{"source":"apache","extensions":["nzb"]},"application/x-perl":{"source":"nginx","extensions":["pl","pm"]},"application/x-pilot":{"source":"nginx","extensions":["prc","pdb"]},"application/x-pkcs12":{"source":"apache","compressible":false,"extensions":["p12","pfx"]},"application/x-pkcs7-certificates":{"source":"apache","extensions":["p7b","spc"]},"application/x-pkcs7-certreqresp":{"source":"apache","extensions":["p7r"]},"application/x-pki-message":{"source":"iana"},"application/x-rar-compressed":{"source":"apache","compressible":false,"extensions":["rar"]},"application/x-redhat-package-manager":{"source":"nginx","extensions":["rpm"]},"application/x-research-info-systems":{"source":"apache","extensions":["ris"]},"application/x-sea":{"source":"nginx","extensions":["sea"]},"application/x-sh":{"source":"apache","compressible":true,"extensions":["sh"]},"application/x-shar":{"source":"apache","extensions":["shar"]},"application/x-shockwave-flash":{"source":"apache","compressible":false,"extensions":["swf"]},"application/x-silverlight-app":{"source":"apache","extensions":["xap"]},"application/x-sql":{"source":"apache","extensions":["sql"]},"application/x-stuffit":{"source":"apache","compressible":false,"extensions":["sit"]},"application/x-stuffitx":{"source":"apache","extensions":["sitx"]},"application/x-subrip":{"source":"apache","extensions":["srt"]},"application/x-sv4cpio":{"source":"apache","extensions":["sv4cpio"]},"application/x-sv4crc":{"source":"apache","extensions":["sv4crc"]},"application/x-t3vm-image":{"source":"apache","extensions":["t3"]},"application/x-tads":{"source":"apache","extensions":["gam"]},"application/x-tar":{"source":"apache","compressible":true,"extensions":["tar"]},"application/x-tcl":{"source":"apache","extensions":["tcl","tk"]},"application/x-tex":{"source":"apache","extensions":["tex"]},"application/x-tex-tfm":{"source":"apache","extensions":["tfm"]},"application/x-texinfo":{"source":"apache","extensions":["texinfo","texi"]},"application/x-tgif":{"source":"apache","extensions":["obj"]},"application/x-ustar":{"source":"apache","extensions":["ustar"]},"application/x-virtualbox-hdd":{"compressible":true,"extensions":["hdd"]},"application/x-virtualbox-ova":{"compressible":true,"extensions":["ova"]},"application/x-virtualbox-ovf":{"compressible":true,"extensions":["ovf"]},"application/x-virtualbox-vbox":{"compressible":true,"extensions":["vbox"]},"application/x-virtualbox-vbox-extpack":{"compressible":false,"extensions":["vbox-extpack"]},"application/x-virtualbox-vdi":{"compressible":true,"extensions":["vdi"]},"application/x-virtualbox-vhd":{"compressible":true,"extensions":["vhd"]},"application/x-virtualbox-vmdk":{"compressible":true,"extensions":["vmdk"]},"application/x-wais-source":{"source":"apache","extensions":["src"]},"application/x-web-app-manifest+json":{"compressible":true,"extensions":["webapp"]},"application/x-www-form-urlencoded":{"source":"iana","compressible":true},"application/x-x509-ca-cert":{"source":"iana","extensions":["der","crt","pem"]},"application/x-x509-ca-ra-cert":{"source":"iana"},"application/x-x509-next-ca-cert":{"source":"iana"},"application/x-xfig":{"source":"apache","extensions":["fig"]},"application/x-xliff+xml":{"source":"apache","compressible":true,"extensions":["xlf"]},"application/x-xpinstall":{"source":"apache","compressible":false,"extensions":["xpi"]},"application/x-xz":{"source":"apache","extensions":["xz"]},"application/x-zmachine":{"source":"apache","extensions":["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{"source":"iana"},"application/xacml+xml":{"source":"iana","compressible":true},"application/xaml+xml":{"source":"apache","compressible":true,"extensions":["xaml"]},"application/xcap-att+xml":{"source":"iana","compressible":true,"extensions":["xav"]},"application/xcap-caps+xml":{"source":"iana","compressible":true,"extensions":["xca"]},"application/xcap-diff+xml":{"source":"iana","compressible":true,"extensions":["xdf"]},"application/xcap-el+xml":{"source":"iana","compressible":true,"extensions":["xel"]},"application/xcap-error+xml":{"source":"iana","compressible":true},"application/xcap-ns+xml":{"source":"iana","compressible":true,"extensions":["xns"]},"application/xcon-conference-info+xml":{"source":"iana","compressible":true},"application/xcon-conference-info-diff+xml":{"source":"iana","compressible":true},"application/xenc+xml":{"source":"iana","compressible":true,"extensions":["xenc"]},"application/xhtml+xml":{"source":"iana","compressible":true,"extensions":["xhtml","xht"]},"application/xhtml-voice+xml":{"source":"apache","compressible":true},"application/xliff+xml":{"source":"iana","compressible":true,"extensions":["xlf"]},"application/xml":{"source":"iana","compressible":true,"extensions":["xml","xsl","xsd","rng"]},"application/xml-dtd":{"source":"iana","compressible":true,"extensions":["dtd"]},"application/xml-external-parsed-entity":{"source":"iana"},"application/xml-patch+xml":{"source":"iana","compressible":true},"application/xmpp+xml":{"source":"iana","compressible":true},"application/xop+xml":{"source":"iana","compressible":true,"extensions":["xop"]},"application/xproc+xml":{"source":"apache","compressible":true,"extensions":["xpl"]},"application/xslt+xml":{"source":"iana","compressible":true,"extensions":["xsl","xslt"]},"application/xspf+xml":{"source":"apache","compressible":true,"extensions":["xspf"]},"application/xv+xml":{"source":"iana","compressible":true,"extensions":["mxml","xhvml","xvml","xvm"]},"application/yang":{"source":"iana","extensions":["yang"]},"application/yang-data+json":{"source":"iana","compressible":true},"application/yang-data+xml":{"source":"iana","compressible":true},"application/yang-patch+json":{"source":"iana","compressible":true},"application/yang-patch+xml":{"source":"iana","compressible":true},"application/yin+xml":{"source":"iana","compressible":true,"extensions":["yin"]},"application/zip":{"source":"iana","compressible":false,"extensions":["zip"]},"application/zlib":{"source":"iana"},"application/zstd":{"source":"iana"},"audio/1d-interleaved-parityfec":{"source":"iana"},"audio/32kadpcm":{"source":"iana"},"audio/3gpp":{"source":"iana","compressible":false,"extensions":["3gpp"]},"audio/3gpp2":{"source":"iana"},"audio/aac":{"source":"iana"},"audio/ac3":{"source":"iana"},"audio/adpcm":{"source":"apache","extensions":["adp"]},"audio/amr":{"source":"iana","extensions":["amr"]},"audio/amr-wb":{"source":"iana"},"audio/amr-wb+":{"source":"iana"},"audio/aptx":{"source":"iana"},"audio/asc":{"source":"iana"},"audio/atrac-advanced-lossless":{"source":"iana"},"audio/atrac-x":{"source":"iana"},"audio/atrac3":{"source":"iana"},"audio/basic":{"source":"iana","compressible":false,"extensions":["au","snd"]},"audio/bv16":{"source":"iana"},"audio/bv32":{"source":"iana"},"audio/clearmode":{"source":"iana"},"audio/cn":{"source":"iana"},"audio/dat12":{"source":"iana"},"audio/dls":{"source":"iana"},"audio/dsr-es201108":{"source":"iana"},"audio/dsr-es202050":{"source":"iana"},"audio/dsr-es202211":{"source":"iana"},"audio/dsr-es202212":{"source":"iana"},"audio/dv":{"source":"iana"},"audio/dvi4":{"source":"iana"},"audio/eac3":{"source":"iana"},"audio/encaprtp":{"source":"iana"},"audio/evrc":{"source":"iana"},"audio/evrc-qcp":{"source":"iana"},"audio/evrc0":{"source":"iana"},"audio/evrc1":{"source":"iana"},"audio/evrcb":{"source":"iana"},"audio/evrcb0":{"source":"iana"},"audio/evrcb1":{"source":"iana"},"audio/evrcnw":{"source":"iana"},"audio/evrcnw0":{"source":"iana"},"audio/evrcnw1":{"source":"iana"},"audio/evrcwb":{"source":"iana"},"audio/evrcwb0":{"source":"iana"},"audio/evrcwb1":{"source":"iana"},"audio/evs":{"source":"iana"},"audio/flexfec":{"source":"iana"},"audio/fwdred":{"source":"iana"},"audio/g711-0":{"source":"iana"},"audio/g719":{"source":"iana"},"audio/g722":{"source":"iana"},"audio/g7221":{"source":"iana"},"audio/g723":{"source":"iana"},"audio/g726-16":{"source":"iana"},"audio/g726-24":{"source":"iana"},"audio/g726-32":{"source":"iana"},"audio/g726-40":{"source":"iana"},"audio/g728":{"source":"iana"},"audio/g729":{"source":"iana"},"audio/g7291":{"source":"iana"},"audio/g729d":{"source":"iana"},"audio/g729e":{"source":"iana"},"audio/gsm":{"source":"iana"},"audio/gsm-efr":{"source":"iana"},"audio/gsm-hr-08":{"source":"iana"},"audio/ilbc":{"source":"iana"},"audio/ip-mr_v2.5":{"source":"iana"},"audio/isac":{"source":"apache"},"audio/l16":{"source":"iana"},"audio/l20":{"source":"iana"},"audio/l24":{"source":"iana","compressible":false},"audio/l8":{"source":"iana"},"audio/lpc":{"source":"iana"},"audio/melp":{"source":"iana"},"audio/melp1200":{"source":"iana"},"audio/melp2400":{"source":"iana"},"audio/melp600":{"source":"iana"},"audio/mhas":{"source":"iana"},"audio/midi":{"source":"apache","extensions":["mid","midi","kar","rmi"]},"audio/mobile-xmf":{"source":"iana","extensions":["mxmf"]},"audio/mp3":{"compressible":false,"extensions":["mp3"]},"audio/mp4":{"source":"iana","compressible":false,"extensions":["m4a","mp4a"]},"audio/mp4a-latm":{"source":"iana"},"audio/mpa":{"source":"iana"},"audio/mpa-robust":{"source":"iana"},"audio/mpeg":{"source":"iana","compressible":false,"extensions":["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{"source":"iana"},"audio/musepack":{"source":"apache"},"audio/ogg":{"source":"iana","compressible":false,"extensions":["oga","ogg","spx","opus"]},"audio/opus":{"source":"iana"},"audio/parityfec":{"source":"iana"},"audio/pcma":{"source":"iana"},"audio/pcma-wb":{"source":"iana"},"audio/pcmu":{"source":"iana"},"audio/pcmu-wb":{"source":"iana"},"audio/prs.sid":{"source":"iana"},"audio/qcelp":{"source":"iana"},"audio/raptorfec":{"source":"iana"},"audio/red":{"source":"iana"},"audio/rtp-enc-aescm128":{"source":"iana"},"audio/rtp-midi":{"source":"iana"},"audio/rtploopback":{"source":"iana"},"audio/rtx":{"source":"iana"},"audio/s3m":{"source":"apache","extensions":["s3m"]},"audio/scip":{"source":"iana"},"audio/silk":{"source":"apache","extensions":["sil"]},"audio/smv":{"source":"iana"},"audio/smv-qcp":{"source":"iana"},"audio/smv0":{"source":"iana"},"audio/sofa":{"source":"iana"},"audio/sp-midi":{"source":"iana"},"audio/speex":{"source":"iana"},"audio/t140c":{"source":"iana"},"audio/t38":{"source":"iana"},"audio/telephone-event":{"source":"iana"},"audio/tetra_acelp":{"source":"iana"},"audio/tetra_acelp_bb":{"source":"iana"},"audio/tone":{"source":"iana"},"audio/tsvcis":{"source":"iana"},"audio/uemclip":{"source":"iana"},"audio/ulpfec":{"source":"iana"},"audio/usac":{"source":"iana"},"audio/vdvi":{"source":"iana"},"audio/vmr-wb":{"source":"iana"},"audio/vnd.3gpp.iufp":{"source":"iana"},"audio/vnd.4sb":{"source":"iana"},"audio/vnd.audiokoz":{"source":"iana"},"audio/vnd.celp":{"source":"iana"},"audio/vnd.cisco.nse":{"source":"iana"},"audio/vnd.cmles.radio-events":{"source":"iana"},"audio/vnd.cns.anp1":{"source":"iana"},"audio/vnd.cns.inf1":{"source":"iana"},"audio/vnd.dece.audio":{"source":"iana","extensions":["uva","uvva"]},"audio/vnd.digital-winds":{"source":"iana","extensions":["eol"]},"audio/vnd.dlna.adts":{"source":"iana"},"audio/vnd.dolby.heaac.1":{"source":"iana"},"audio/vnd.dolby.heaac.2":{"source":"iana"},"audio/vnd.dolby.mlp":{"source":"iana"},"audio/vnd.dolby.mps":{"source":"iana"},"audio/vnd.dolby.pl2":{"source":"iana"},"audio/vnd.dolby.pl2x":{"source":"iana"},"audio/vnd.dolby.pl2z":{"source":"iana"},"audio/vnd.dolby.pulse.1":{"source":"iana"},"audio/vnd.dra":{"source":"iana","extensions":["dra"]},"audio/vnd.dts":{"source":"iana","extensions":["dts"]},"audio/vnd.dts.hd":{"source":"iana","extensions":["dtshd"]},"audio/vnd.dts.uhd":{"source":"iana"},"audio/vnd.dvb.file":{"source":"iana"},"audio/vnd.everad.plj":{"source":"iana"},"audio/vnd.hns.audio":{"source":"iana"},"audio/vnd.lucent.voice":{"source":"iana","extensions":["lvp"]},"audio/vnd.ms-playready.media.pya":{"source":"iana","extensions":["pya"]},"audio/vnd.nokia.mobile-xmf":{"source":"iana"},"audio/vnd.nortel.vbk":{"source":"iana"},"audio/vnd.nuera.ecelp4800":{"source":"iana","extensions":["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{"source":"iana","extensions":["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{"source":"iana","extensions":["ecelp9600"]},"audio/vnd.octel.sbc":{"source":"iana"},"audio/vnd.presonus.multitrack":{"source":"iana"},"audio/vnd.qcelp":{"source":"iana"},"audio/vnd.rhetorex.32kadpcm":{"source":"iana"},"audio/vnd.rip":{"source":"iana","extensions":["rip"]},"audio/vnd.rn-realaudio":{"compressible":false},"audio/vnd.sealedmedia.softseal.mpeg":{"source":"iana"},"audio/vnd.vmx.cvsd":{"source":"iana"},"audio/vnd.wave":{"compressible":false},"audio/vorbis":{"source":"iana","compressible":false},"audio/vorbis-config":{"source":"iana"},"audio/wav":{"compressible":false,"extensions":["wav"]},"audio/wave":{"compressible":false,"extensions":["wav"]},"audio/webm":{"source":"apache","compressible":false,"extensions":["weba"]},"audio/x-aac":{"source":"apache","compressible":false,"extensions":["aac"]},"audio/x-aiff":{"source":"apache","extensions":["aif","aiff","aifc"]},"audio/x-caf":{"source":"apache","compressible":false,"extensions":["caf"]},"audio/x-flac":{"source":"apache","extensions":["flac"]},"audio/x-m4a":{"source":"nginx","extensions":["m4a"]},"audio/x-matroska":{"source":"apache","extensions":["mka"]},"audio/x-mpegurl":{"source":"apache","extensions":["m3u"]},"audio/x-ms-wax":{"source":"apache","extensions":["wax"]},"audio/x-ms-wma":{"source":"apache","extensions":["wma"]},"audio/x-pn-realaudio":{"source":"apache","extensions":["ram","ra"]},"audio/x-pn-realaudio-plugin":{"source":"apache","extensions":["rmp"]},"audio/x-realaudio":{"source":"nginx","extensions":["ra"]},"audio/x-tta":{"source":"apache"},"audio/x-wav":{"source":"apache","extensions":["wav"]},"audio/xm":{"source":"apache","extensions":["xm"]},"chemical/x-cdx":{"source":"apache","extensions":["cdx"]},"chemical/x-cif":{"source":"apache","extensions":["cif"]},"chemical/x-cmdf":{"source":"apache","extensions":["cmdf"]},"chemical/x-cml":{"source":"apache","extensions":["cml"]},"chemical/x-csml":{"source":"apache","extensions":["csml"]},"chemical/x-pdb":{"source":"apache"},"chemical/x-xyz":{"source":"apache","extensions":["xyz"]},"font/collection":{"source":"iana","extensions":["ttc"]},"font/otf":{"source":"iana","compressible":true,"extensions":["otf"]},"font/sfnt":{"source":"iana"},"font/ttf":{"source":"iana","compressible":true,"extensions":["ttf"]},"font/woff":{"source":"iana","extensions":["woff"]},"font/woff2":{"source":"iana","extensions":["woff2"]},"image/aces":{"source":"iana","extensions":["exr"]},"image/apng":{"compressible":false,"extensions":["apng"]},"image/avci":{"source":"iana","extensions":["avci"]},"image/avcs":{"source":"iana","extensions":["avcs"]},"image/avif":{"source":"iana","compressible":false,"extensions":["avif"]},"image/bmp":{"source":"iana","compressible":true,"extensions":["bmp"]},"image/cgm":{"source":"iana","extensions":["cgm"]},"image/dicom-rle":{"source":"iana","extensions":["drle"]},"image/emf":{"source":"iana","extensions":["emf"]},"image/fits":{"source":"iana","extensions":["fits"]},"image/g3fax":{"source":"iana","extensions":["g3"]},"image/gif":{"source":"iana","compressible":false,"extensions":["gif"]},"image/heic":{"source":"iana","extensions":["heic"]},"image/heic-sequence":{"source":"iana","extensions":["heics"]},"image/heif":{"source":"iana","extensions":["heif"]},"image/heif-sequence":{"source":"iana","extensions":["heifs"]},"image/hej2k":{"source":"iana","extensions":["hej2"]},"image/hsj2":{"source":"iana","extensions":["hsj2"]},"image/ief":{"source":"iana","extensions":["ief"]},"image/jls":{"source":"iana","extensions":["jls"]},"image/jp2":{"source":"iana","compressible":false,"extensions":["jp2","jpg2"]},"image/jpeg":{"source":"iana","compressible":false,"extensions":["jpeg","jpg","jpe"]},"image/jph":{"source":"iana","extensions":["jph"]},"image/jphc":{"source":"iana","extensions":["jhc"]},"image/jpm":{"source":"iana","compressible":false,"extensions":["jpm"]},"image/jpx":{"source":"iana","compressible":false,"extensions":["jpx","jpf"]},"image/jxr":{"source":"iana","extensions":["jxr"]},"image/jxra":{"source":"iana","extensions":["jxra"]},"image/jxrs":{"source":"iana","extensions":["jxrs"]},"image/jxs":{"source":"iana","extensions":["jxs"]},"image/jxsc":{"source":"iana","extensions":["jxsc"]},"image/jxsi":{"source":"iana","extensions":["jxsi"]},"image/jxss":{"source":"iana","extensions":["jxss"]},"image/ktx":{"source":"iana","extensions":["ktx"]},"image/ktx2":{"source":"iana","extensions":["ktx2"]},"image/naplps":{"source":"iana"},"image/pjpeg":{"compressible":false},"image/png":{"source":"iana","compressible":false,"extensions":["png"]},"image/prs.btif":{"source":"iana","extensions":["btif"]},"image/prs.pti":{"source":"iana","extensions":["pti"]},"image/pwg-raster":{"source":"iana"},"image/sgi":{"source":"apache","extensions":["sgi"]},"image/svg+xml":{"source":"iana","compressible":true,"extensions":["svg","svgz"]},"image/t38":{"source":"iana","extensions":["t38"]},"image/tiff":{"source":"iana","compressible":false,"extensions":["tif","tiff"]},"image/tiff-fx":{"source":"iana","extensions":["tfx"]},"image/vnd.adobe.photoshop":{"source":"iana","compressible":true,"extensions":["psd"]},"image/vnd.airzip.accelerator.azv":{"source":"iana","extensions":["azv"]},"image/vnd.cns.inf2":{"source":"iana"},"image/vnd.dece.graphic":{"source":"iana","extensions":["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{"source":"iana","extensions":["djvu","djv"]},"image/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"image/vnd.dwg":{"source":"iana","extensions":["dwg"]},"image/vnd.dxf":{"source":"iana","extensions":["dxf"]},"image/vnd.fastbidsheet":{"source":"iana","extensions":["fbs"]},"image/vnd.fpx":{"source":"iana","extensions":["fpx"]},"image/vnd.fst":{"source":"iana","extensions":["fst"]},"image/vnd.fujixerox.edmics-mmr":{"source":"iana","extensions":["mmr"]},"image/vnd.fujixerox.edmics-rlc":{"source":"iana","extensions":["rlc"]},"image/vnd.globalgraphics.pgb":{"source":"iana"},"image/vnd.microsoft.icon":{"source":"iana","compressible":true,"extensions":["ico"]},"image/vnd.mix":{"source":"iana"},"image/vnd.mozilla.apng":{"source":"iana"},"image/vnd.ms-dds":{"compressible":true,"extensions":["dds"]},"image/vnd.ms-modi":{"source":"iana","extensions":["mdi"]},"image/vnd.ms-photo":{"source":"apache","extensions":["wdp"]},"image/vnd.net-fpx":{"source":"iana","extensions":["npx"]},"image/vnd.pco.b16":{"source":"iana","extensions":["b16"]},"image/vnd.radiance":{"source":"iana"},"image/vnd.sealed.png":{"source":"iana"},"image/vnd.sealedmedia.softseal.gif":{"source":"iana"},"image/vnd.sealedmedia.softseal.jpg":{"source":"iana"},"image/vnd.svf":{"source":"iana"},"image/vnd.tencent.tap":{"source":"iana","extensions":["tap"]},"image/vnd.valve.source.texture":{"source":"iana","extensions":["vtf"]},"image/vnd.wap.wbmp":{"source":"iana","extensions":["wbmp"]},"image/vnd.xiff":{"source":"iana","extensions":["xif"]},"image/vnd.zbrush.pcx":{"source":"iana","extensions":["pcx"]},"image/webp":{"source":"apache","extensions":["webp"]},"image/wmf":{"source":"iana","extensions":["wmf"]},"image/x-3ds":{"source":"apache","extensions":["3ds"]},"image/x-cmu-raster":{"source":"apache","extensions":["ras"]},"image/x-cmx":{"source":"apache","extensions":["cmx"]},"image/x-freehand":{"source":"apache","extensions":["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{"source":"apache","compressible":true,"extensions":["ico"]},"image/x-jng":{"source":"nginx","extensions":["jng"]},"image/x-mrsid-image":{"source":"apache","extensions":["sid"]},"image/x-ms-bmp":{"source":"nginx","compressible":true,"extensions":["bmp"]},"image/x-pcx":{"source":"apache","extensions":["pcx"]},"image/x-pict":{"source":"apache","extensions":["pic","pct"]},"image/x-portable-anymap":{"source":"apache","extensions":["pnm"]},"image/x-portable-bitmap":{"source":"apache","extensions":["pbm"]},"image/x-portable-graymap":{"source":"apache","extensions":["pgm"]},"image/x-portable-pixmap":{"source":"apache","extensions":["ppm"]},"image/x-rgb":{"source":"apache","extensions":["rgb"]},"image/x-tga":{"source":"apache","extensions":["tga"]},"image/x-xbitmap":{"source":"apache","extensions":["xbm"]},"image/x-xcf":{"compressible":false},"image/x-xpixmap":{"source":"apache","extensions":["xpm"]},"image/x-xwindowdump":{"source":"apache","extensions":["xwd"]},"message/cpim":{"source":"iana"},"message/delivery-status":{"source":"iana"},"message/disposition-notification":{"source":"iana","extensions":["disposition-notification"]},"message/external-body":{"source":"iana"},"message/feedback-report":{"source":"iana"},"message/global":{"source":"iana","extensions":["u8msg"]},"message/global-delivery-status":{"source":"iana","extensions":["u8dsn"]},"message/global-disposition-notification":{"source":"iana","extensions":["u8mdn"]},"message/global-headers":{"source":"iana","extensions":["u8hdr"]},"message/http":{"source":"iana","compressible":false},"message/imdn+xml":{"source":"iana","compressible":true},"message/news":{"source":"iana"},"message/partial":{"source":"iana","compressible":false},"message/rfc822":{"source":"iana","compressible":true,"extensions":["eml","mime"]},"message/s-http":{"source":"iana"},"message/sip":{"source":"iana"},"message/sipfrag":{"source":"iana"},"message/tracking-status":{"source":"iana"},"message/vnd.si.simp":{"source":"iana"},"message/vnd.wfa.wsc":{"source":"iana","extensions":["wsc"]},"model/3mf":{"source":"iana","extensions":["3mf"]},"model/e57":{"source":"iana"},"model/gltf+json":{"source":"iana","compressible":true,"extensions":["gltf"]},"model/gltf-binary":{"source":"iana","compressible":true,"extensions":["glb"]},"model/iges":{"source":"iana","compressible":false,"extensions":["igs","iges"]},"model/mesh":{"source":"iana","compressible":false,"extensions":["msh","mesh","silo"]},"model/mtl":{"source":"iana","extensions":["mtl"]},"model/obj":{"source":"iana","extensions":["obj"]},"model/step":{"source":"iana"},"model/step+xml":{"source":"iana","compressible":true,"extensions":["stpx"]},"model/step+zip":{"source":"iana","compressible":false,"extensions":["stpz"]},"model/step-xml+zip":{"source":"iana","compressible":false,"extensions":["stpxz"]},"model/stl":{"source":"iana","extensions":["stl"]},"model/vnd.collada+xml":{"source":"iana","compressible":true,"extensions":["dae"]},"model/vnd.dwf":{"source":"iana","extensions":["dwf"]},"model/vnd.flatland.3dml":{"source":"iana"},"model/vnd.gdl":{"source":"iana","extensions":["gdl"]},"model/vnd.gs-gdl":{"source":"apache"},"model/vnd.gs.gdl":{"source":"iana"},"model/vnd.gtw":{"source":"iana","extensions":["gtw"]},"model/vnd.moml+xml":{"source":"iana","compressible":true},"model/vnd.mts":{"source":"iana","extensions":["mts"]},"model/vnd.opengex":{"source":"iana","extensions":["ogex"]},"model/vnd.parasolid.transmit.binary":{"source":"iana","extensions":["x_b"]},"model/vnd.parasolid.transmit.text":{"source":"iana","extensions":["x_t"]},"model/vnd.pytha.pyox":{"source":"iana"},"model/vnd.rosette.annotated-data-model":{"source":"iana"},"model/vnd.sap.vds":{"source":"iana","extensions":["vds"]},"model/vnd.usdz+zip":{"source":"iana","compressible":false,"extensions":["usdz"]},"model/vnd.valve.source.compiled-map":{"source":"iana","extensions":["bsp"]},"model/vnd.vtu":{"source":"iana","extensions":["vtu"]},"model/vrml":{"source":"iana","compressible":false,"extensions":["wrl","vrml"]},"model/x3d+binary":{"source":"apache","compressible":false,"extensions":["x3db","x3dbz"]},"model/x3d+fastinfoset":{"source":"iana","extensions":["x3db"]},"model/x3d+vrml":{"source":"apache","compressible":false,"extensions":["x3dv","x3dvz"]},"model/x3d+xml":{"source":"iana","compressible":true,"extensions":["x3d","x3dz"]},"model/x3d-vrml":{"source":"iana","extensions":["x3dv"]},"multipart/alternative":{"source":"iana","compressible":false},"multipart/appledouble":{"source":"iana"},"multipart/byteranges":{"source":"iana"},"multipart/digest":{"source":"iana"},"multipart/encrypted":{"source":"iana","compressible":false},"multipart/form-data":{"source":"iana","compressible":false},"multipart/header-set":{"source":"iana"},"multipart/mixed":{"source":"iana"},"multipart/multilingual":{"source":"iana"},"multipart/parallel":{"source":"iana"},"multipart/related":{"source":"iana","compressible":false},"multipart/report":{"source":"iana"},"multipart/signed":{"source":"iana","compressible":false},"multipart/vnd.bint.med-plus":{"source":"iana"},"multipart/voice-message":{"source":"iana"},"multipart/x-mixed-replace":{"source":"iana"},"text/1d-interleaved-parityfec":{"source":"iana"},"text/cache-manifest":{"source":"iana","compressible":true,"extensions":["appcache","manifest"]},"text/calendar":{"source":"iana","extensions":["ics","ifb"]},"text/calender":{"compressible":true},"text/cmd":{"compressible":true},"text/coffeescript":{"extensions":["coffee","litcoffee"]},"text/cql":{"source":"iana"},"text/cql-expression":{"source":"iana"},"text/cql-identifier":{"source":"iana"},"text/css":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["css"]},"text/csv":{"source":"iana","compressible":true,"extensions":["csv"]},"text/csv-schema":{"source":"iana"},"text/directory":{"source":"iana"},"text/dns":{"source":"iana"},"text/ecmascript":{"source":"iana"},"text/encaprtp":{"source":"iana"},"text/enriched":{"source":"iana"},"text/fhirpath":{"source":"iana"},"text/flexfec":{"source":"iana"},"text/fwdred":{"source":"iana"},"text/gff3":{"source":"iana"},"text/grammar-ref-list":{"source":"iana"},"text/html":{"source":"iana","compressible":true,"extensions":["html","htm","shtml"]},"text/jade":{"extensions":["jade"]},"text/javascript":{"source":"iana","compressible":true},"text/jcr-cnd":{"source":"iana"},"text/jsx":{"compressible":true,"extensions":["jsx"]},"text/less":{"compressible":true,"extensions":["less"]},"text/markdown":{"source":"iana","compressible":true,"extensions":["markdown","md"]},"text/mathml":{"source":"nginx","extensions":["mml"]},"text/mdx":{"compressible":true,"extensions":["mdx"]},"text/mizar":{"source":"iana"},"text/n3":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["n3"]},"text/parameters":{"source":"iana","charset":"UTF-8"},"text/parityfec":{"source":"iana"},"text/plain":{"source":"iana","compressible":true,"extensions":["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{"source":"iana","charset":"UTF-8"},"text/prs.fallenstein.rst":{"source":"iana"},"text/prs.lines.tag":{"source":"iana","extensions":["dsc"]},"text/prs.prop.logic":{"source":"iana"},"text/raptorfec":{"source":"iana"},"text/red":{"source":"iana"},"text/rfc822-headers":{"source":"iana"},"text/richtext":{"source":"iana","compressible":true,"extensions":["rtx"]},"text/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"text/rtp-enc-aescm128":{"source":"iana"},"text/rtploopback":{"source":"iana"},"text/rtx":{"source":"iana"},"text/sgml":{"source":"iana","extensions":["sgml","sgm"]},"text/shaclc":{"source":"iana"},"text/shex":{"source":"iana","extensions":["shex"]},"text/slim":{"extensions":["slim","slm"]},"text/spdx":{"source":"iana","extensions":["spdx"]},"text/strings":{"source":"iana"},"text/stylus":{"extensions":["stylus","styl"]},"text/t140":{"source":"iana"},"text/tab-separated-values":{"source":"iana","compressible":true,"extensions":["tsv"]},"text/troff":{"source":"iana","extensions":["t","tr","roff","man","me","ms"]},"text/turtle":{"source":"iana","charset":"UTF-8","extensions":["ttl"]},"text/ulpfec":{"source":"iana"},"text/uri-list":{"source":"iana","compressible":true,"extensions":["uri","uris","urls"]},"text/vcard":{"source":"iana","compressible":true,"extensions":["vcard"]},"text/vnd.a":{"source":"iana"},"text/vnd.abc":{"source":"iana"},"text/vnd.ascii-art":{"source":"iana"},"text/vnd.curl":{"source":"iana","extensions":["curl"]},"text/vnd.curl.dcurl":{"source":"apache","extensions":["dcurl"]},"text/vnd.curl.mcurl":{"source":"apache","extensions":["mcurl"]},"text/vnd.curl.scurl":{"source":"apache","extensions":["scurl"]},"text/vnd.debian.copyright":{"source":"iana","charset":"UTF-8"},"text/vnd.dmclientscript":{"source":"iana"},"text/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"text/vnd.esmertec.theme-descriptor":{"source":"iana","charset":"UTF-8"},"text/vnd.familysearch.gedcom":{"source":"iana","extensions":["ged"]},"text/vnd.ficlab.flt":{"source":"iana"},"text/vnd.fly":{"source":"iana","extensions":["fly"]},"text/vnd.fmi.flexstor":{"source":"iana","extensions":["flx"]},"text/vnd.gml":{"source":"iana"},"text/vnd.graphviz":{"source":"iana","extensions":["gv"]},"text/vnd.hans":{"source":"iana"},"text/vnd.hgl":{"source":"iana"},"text/vnd.in3d.3dml":{"source":"iana","extensions":["3dml"]},"text/vnd.in3d.spot":{"source":"iana","extensions":["spot"]},"text/vnd.iptc.newsml":{"source":"iana"},"text/vnd.iptc.nitf":{"source":"iana"},"text/vnd.latex-z":{"source":"iana"},"text/vnd.motorola.reflex":{"source":"iana"},"text/vnd.ms-mediapackage":{"source":"iana"},"text/vnd.net2phone.commcenter.command":{"source":"iana"},"text/vnd.radisys.msml-basic-layout":{"source":"iana"},"text/vnd.senx.warpscript":{"source":"iana"},"text/vnd.si.uricatalogue":{"source":"iana"},"text/vnd.sosi":{"source":"iana"},"text/vnd.sun.j2me.app-descriptor":{"source":"iana","charset":"UTF-8","extensions":["jad"]},"text/vnd.trolltech.linguist":{"source":"iana","charset":"UTF-8"},"text/vnd.wap.si":{"source":"iana"},"text/vnd.wap.sl":{"source":"iana"},"text/vnd.wap.wml":{"source":"iana","extensions":["wml"]},"text/vnd.wap.wmlscript":{"source":"iana","extensions":["wmls"]},"text/vtt":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["vtt"]},"text/x-asm":{"source":"apache","extensions":["s","asm"]},"text/x-c":{"source":"apache","extensions":["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{"source":"nginx","extensions":["htc"]},"text/x-fortran":{"source":"apache","extensions":["f","for","f77","f90"]},"text/x-gwt-rpc":{"compressible":true},"text/x-handlebars-template":{"extensions":["hbs"]},"text/x-java-source":{"source":"apache","extensions":["java"]},"text/x-jquery-tmpl":{"compressible":true},"text/x-lua":{"extensions":["lua"]},"text/x-markdown":{"compressible":true,"extensions":["mkd"]},"text/x-nfo":{"source":"apache","extensions":["nfo"]},"text/x-opml":{"source":"apache","extensions":["opml"]},"text/x-org":{"compressible":true,"extensions":["org"]},"text/x-pascal":{"source":"apache","extensions":["p","pas"]},"text/x-processing":{"compressible":true,"extensions":["pde"]},"text/x-sass":{"extensions":["sass"]},"text/x-scss":{"extensions":["scss"]},"text/x-setext":{"source":"apache","extensions":["etx"]},"text/x-sfv":{"source":"apache","extensions":["sfv"]},"text/x-suse-ymp":{"compressible":true,"extensions":["ymp"]},"text/x-uuencode":{"source":"apache","extensions":["uu"]},"text/x-vcalendar":{"source":"apache","extensions":["vcs"]},"text/x-vcard":{"source":"apache","extensions":["vcf"]},"text/xml":{"source":"iana","compressible":true,"extensions":["xml"]},"text/xml-external-parsed-entity":{"source":"iana"},"text/yaml":{"compressible":true,"extensions":["yaml","yml"]},"video/1d-interleaved-parityfec":{"source":"iana"},"video/3gpp":{"source":"iana","extensions":["3gp","3gpp"]},"video/3gpp-tt":{"source":"iana"},"video/3gpp2":{"source":"iana","extensions":["3g2"]},"video/av1":{"source":"iana"},"video/bmpeg":{"source":"iana"},"video/bt656":{"source":"iana"},"video/celb":{"source":"iana"},"video/dv":{"source":"iana"},"video/encaprtp":{"source":"iana"},"video/ffv1":{"source":"iana"},"video/flexfec":{"source":"iana"},"video/h261":{"source":"iana","extensions":["h261"]},"video/h263":{"source":"iana","extensions":["h263"]},"video/h263-1998":{"source":"iana"},"video/h263-2000":{"source":"iana"},"video/h264":{"source":"iana","extensions":["h264"]},"video/h264-rcdo":{"source":"iana"},"video/h264-svc":{"source":"iana"},"video/h265":{"source":"iana"},"video/iso.segment":{"source":"iana","extensions":["m4s"]},"video/jpeg":{"source":"iana","extensions":["jpgv"]},"video/jpeg2000":{"source":"iana"},"video/jpm":{"source":"apache","extensions":["jpm","jpgm"]},"video/jxsv":{"source":"iana"},"video/mj2":{"source":"iana","extensions":["mj2","mjp2"]},"video/mp1s":{"source":"iana"},"video/mp2p":{"source":"iana"},"video/mp2t":{"source":"iana","extensions":["ts"]},"video/mp4":{"source":"iana","compressible":false,"extensions":["mp4","mp4v","mpg4"]},"video/mp4v-es":{"source":"iana"},"video/mpeg":{"source":"iana","compressible":false,"extensions":["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{"source":"iana"},"video/mpv":{"source":"iana"},"video/nv":{"source":"iana"},"video/ogg":{"source":"iana","compressible":false,"extensions":["ogv"]},"video/parityfec":{"source":"iana"},"video/pointer":{"source":"iana"},"video/quicktime":{"source":"iana","compressible":false,"extensions":["qt","mov"]},"video/raptorfec":{"source":"iana"},"video/raw":{"source":"iana"},"video/rtp-enc-aescm128":{"source":"iana"},"video/rtploopback":{"source":"iana"},"video/rtx":{"source":"iana"},"video/scip":{"source":"iana"},"video/smpte291":{"source":"iana"},"video/smpte292m":{"source":"iana"},"video/ulpfec":{"source":"iana"},"video/vc1":{"source":"iana"},"video/vc2":{"source":"iana"},"video/vnd.cctv":{"source":"iana"},"video/vnd.dece.hd":{"source":"iana","extensions":["uvh","uvvh"]},"video/vnd.dece.mobile":{"source":"iana","extensions":["uvm","uvvm"]},"video/vnd.dece.mp4":{"source":"iana"},"video/vnd.dece.pd":{"source":"iana","extensions":["uvp","uvvp"]},"video/vnd.dece.sd":{"source":"iana","extensions":["uvs","uvvs"]},"video/vnd.dece.video":{"source":"iana","extensions":["uvv","uvvv"]},"video/vnd.directv.mpeg":{"source":"iana"},"video/vnd.directv.mpeg-tts":{"source":"iana"},"video/vnd.dlna.mpeg-tts":{"source":"iana"},"video/vnd.dvb.file":{"source":"iana","extensions":["dvb"]},"video/vnd.fvt":{"source":"iana","extensions":["fvt"]},"video/vnd.hns.video":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.ttsavc":{"source":"iana"},"video/vnd.iptvforum.ttsmpeg2":{"source":"iana"},"video/vnd.motorola.video":{"source":"iana"},"video/vnd.motorola.videop":{"source":"iana"},"video/vnd.mpegurl":{"source":"iana","extensions":["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{"source":"iana","extensions":["pyv"]},"video/vnd.nokia.interleaved-multimedia":{"source":"iana"},"video/vnd.nokia.mp4vr":{"source":"iana"},"video/vnd.nokia.videovoip":{"source":"iana"},"video/vnd.objectvideo":{"source":"iana"},"video/vnd.radgamettools.bink":{"source":"iana"},"video/vnd.radgamettools.smacker":{"source":"iana"},"video/vnd.sealed.mpeg1":{"source":"iana"},"video/vnd.sealed.mpeg4":{"source":"iana"},"video/vnd.sealed.swf":{"source":"iana"},"video/vnd.sealedmedia.softseal.mov":{"source":"iana"},"video/vnd.uvvu.mp4":{"source":"iana","extensions":["uvu","uvvu"]},"video/vnd.vivo":{"source":"iana","extensions":["viv"]},"video/vnd.youtube.yt":{"source":"iana"},"video/vp8":{"source":"iana"},"video/vp9":{"source":"iana"},"video/webm":{"source":"apache","compressible":false,"extensions":["webm"]},"video/x-f4v":{"source":"apache","extensions":["f4v"]},"video/x-fli":{"source":"apache","extensions":["fli"]},"video/x-flv":{"source":"apache","compressible":false,"extensions":["flv"]},"video/x-m4v":{"source":"apache","extensions":["m4v"]},"video/x-matroska":{"source":"apache","compressible":false,"extensions":["mkv","mk3d","mks"]},"video/x-mng":{"source":"apache","extensions":["mng"]},"video/x-ms-asf":{"source":"apache","extensions":["asf","asx"]},"video/x-ms-vob":{"source":"apache","extensions":["vob"]},"video/x-ms-wm":{"source":"apache","extensions":["wm"]},"video/x-ms-wmv":{"source":"apache","compressible":false,"extensions":["wmv"]},"video/x-ms-wmx":{"source":"apache","extensions":["wmx"]},"video/x-ms-wvx":{"source":"apache","extensions":["wvx"]},"video/x-msvideo":{"source":"apache","extensions":["avi"]},"video/x-sgi-movie":{"source":"apache","extensions":["movie"]},"video/x-smv":{"source":"apache","extensions":["smv"]},"x-conference/x-cooltalk":{"source":"apache","extensions":["ice"]},"x-shader/x-fragment":{"compressible":true},"x-shader/x-vertex":{"compressible":true}}')}};var e={};function __nccwpck_require__(i){var n=e[i];if(n!==undefined){return n.exports}var s=e[i]={exports:{}};var o=true;try{a[i](s,s.exports,__nccwpck_require__);o=false}finally{if(o)delete e[i]}return s.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var i=__nccwpck_require__(756);module.exports=i})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/compression/package.json b/build/node_modules/next/dist/compiled/compression/package.json new file mode 100644 index 0000000..742cc12 --- /dev/null +++ b/build/node_modules/next/dist/compiled/compression/package.json @@ -0,0 +1 @@ +{"name":"compression","main":"index.js","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/conf/index.js b/build/node_modules/next/dist/compiled/conf/index.js new file mode 100644 index 0000000..0227215 --- /dev/null +++ b/build/node_modules/next/dist/compiled/conf/index.js @@ -0,0 +1,15 @@ +(()=>{var e={6474:(e,r,t)=>{"use strict";var a=t(9258),s=t(2603),i=t(7731),o=t(2961),n=t(6424),l=t(2015),f=t(9233),c=t(1966),u=t(8716);e.exports=Ajv;Ajv.prototype.validate=validate;Ajv.prototype.compile=compile;Ajv.prototype.addSchema=addSchema;Ajv.prototype.addMetaSchema=addMetaSchema;Ajv.prototype.validateSchema=validateSchema;Ajv.prototype.getSchema=getSchema;Ajv.prototype.removeSchema=removeSchema;Ajv.prototype.addFormat=addFormat;Ajv.prototype.errorsText=errorsText;Ajv.prototype._addSchema=_addSchema;Ajv.prototype._compile=_compile;Ajv.prototype.compileAsync=t(2694);var h=t(6765);Ajv.prototype.addKeyword=h.add;Ajv.prototype.getKeyword=h.get;Ajv.prototype.removeKeyword=h.remove;Ajv.prototype.validateKeyword=h.validate;var d=t(6343);Ajv.ValidationError=d.Validation;Ajv.MissingRefError=d.MissingRef;Ajv.$dataMetaSchema=c;var p="http://json-schema.org/draft-07/schema";var v=["removeAdditional","useDefaults","coerceTypes","strictDefaults"];var m=["/properties"];function Ajv(e){if(!(this instanceof Ajv))return new Ajv(e);e=this._opts=u.copy(e)||{};setLogger(this);this._schemas={};this._refs={};this._fragments={};this._formats=l(e.format);this._cache=e.cache||new i;this._loadingSchemas={};this._compilations=[];this.RULES=f();this._getId=chooseGetId(e);e.loopRequired=e.loopRequired||Infinity;if(e.errorDataPath=="property")e._errorDataPathProperty=true;if(e.serialize===undefined)e.serialize=n;this._metaOpts=getMetaSchemaOptions(this);if(e.formats)addInitialFormats(this);if(e.keywords)addInitialKeywords(this);addDefaultMetaSchema(this);if(typeof e.meta=="object")this.addMetaSchema(e.meta);if(e.nullable)this.addKeyword("nullable",{metaSchema:{type:"boolean"}});addInitialSchemas(this)}function validate(e,r){var t;if(typeof e=="string"){t=this.getSchema(e);if(!t)throw new Error('no schema with key or ref "'+e+'"')}else{var a=this._addSchema(e);t=a.validate||this._compile(a)}var s=t(r);if(t.$async!==true)this.errors=t.errors;return s}function compile(e,r){var t=this._addSchema(e,undefined,r);return t.validate||this._compile(t)}function addSchema(e,r,t,a){if(Array.isArray(e)){for(var i=0;i{"use strict";var r=e.exports=function Cache(){this._cache={}};r.prototype.put=function Cache_put(e,r){this._cache[e]=r};r.prototype.get=function Cache_get(e){return this._cache[e]};r.prototype.del=function Cache_del(e){delete this._cache[e]};r.prototype.clear=function Cache_clear(){this._cache={}}},2694:(e,r,t)=>{"use strict";var a=t(6343).MissingRef;e.exports=compileAsync;function compileAsync(e,r,t){var s=this;if(typeof this._opts.loadSchema!="function")throw new Error("options.loadSchema should be a function");if(typeof r=="function"){t=r;r=undefined}var i=loadMetaSchemaOf(e).then((function(){var t=s._addSchema(e,undefined,r);return t.validate||_compileAsync(t)}));if(t){i.then((function(e){t(null,e)}),t)}return i;function loadMetaSchemaOf(e){var r=e.$schema;return r&&!s.getSchema(r)?compileAsync.call(s,{$ref:r},true):Promise.resolve()}function _compileAsync(e){try{return s._compile(e)}catch(e){if(e instanceof a)return loadMissingSchema(e);throw e}function loadMissingSchema(t){var a=t.missingSchema;if(added(a))throw new Error("Schema "+a+" is loaded but "+t.missingRef+" cannot be resolved");var i=s._loadingSchemas[a];if(!i){i=s._loadingSchemas[a]=s._opts.loadSchema(a);i.then(removePromise,removePromise)}return i.then((function(e){if(!added(a)){return loadMetaSchemaOf(e).then((function(){if(!added(a))s.addSchema(e,a,undefined,r)}))}})).then((function(){return _compileAsync(e)}));function removePromise(){delete s._loadingSchemas[a]}function added(e){return s._refs[e]||s._schemas[e]}}}}},6343:(e,r,t)=>{"use strict";var a=t(2603);e.exports={Validation:errorSubclass(ValidationError),MissingRef:errorSubclass(MissingRefError)};function ValidationError(e){this.message="validation failed";this.errors=e;this.ajv=this.validation=true}MissingRefError.message=function(e,r){return"can't resolve reference "+r+" from id "+e};function MissingRefError(e,r,t){this.message=t||MissingRefError.message(e,r);this.missingRef=a.url(e,r);this.missingSchema=a.normalizeId(a.fullPath(this.missingRef))}function errorSubclass(e){e.prototype=Object.create(Error.prototype);e.prototype.constructor=e;return e}},2015:(e,r,t)=>{"use strict";var a=t(8716);var s=/^(\d\d\d\d)-(\d\d)-(\d\d)$/;var i=[0,31,28,31,30,31,30,31,31,30,31,30,31];var o=/^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d(?::?\d\d)?)?$/i;var n=/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i;var l=/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;var f=/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;var c=/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i;var u=/^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-)*(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-)*(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i;var h=/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;var d=/^(?:\/(?:[^~/]|~0|~1)*)*$/;var p=/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i;var v=/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/;e.exports=formats;function formats(e){e=e=="full"?"full":"fast";return a.copy(formats[e])}formats.fast={date:/^\d\d\d\d-[0-1]\d-[0-3]\d$/,time:/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,"date-time":/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,"uri-template":c,url:u,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,hostname:n,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:regex,uuid:h,"json-pointer":d,"json-pointer-uri-fragment":p,"relative-json-pointer":v};formats.full={date:date,time:time,"date-time":date_time,uri:uri,"uri-reference":f,"uri-template":c,url:u,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:n,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:regex,uuid:h,"json-pointer":d,"json-pointer-uri-fragment":p,"relative-json-pointer":v};function isLeapYear(e){return e%4===0&&(e%100!==0||e%400===0)}function date(e){var r=e.match(s);if(!r)return false;var t=+r[1];var a=+r[2];var o=+r[3];return a>=1&&a<=12&&o>=1&&o<=(a==2&&isLeapYear(t)?29:i[a])}function time(e,r){var t=e.match(o);if(!t)return false;var a=t[1];var s=t[2];var i=t[3];var n=t[5];return(a<=23&&s<=59&&i<=59||a==23&&s==59&&i==60)&&(!r||n)}var m=/t|\s/i;function date_time(e){var r=e.split(m);return r.length==2&&date(r[0])&&time(r[1],true)}var y=/\/|:/;function uri(e){return y.test(e)&&l.test(e)}var g=/[^\\]\\Z/;function regex(e){if(g.test(e))return false;try{new RegExp(e);return true}catch(e){return false}}},9258:(e,r,t)=>{"use strict";var a=t(2603),s=t(8716),i=t(6343),o=t(6424);var n=t(7003);var l=s.ucs2length;var f=t(1230);var c=i.Validation;e.exports=compile;function compile(e,r,t,u){var h=this,d=this._opts,p=[undefined],v={},m=[],y={},g=[],P={},E=[];r=r||{schema:e,refVal:p,refs:v};var b=checkCompiling.call(this,e,r,u);var w=this._compilations[b.index];if(b.compiling)return w.callValidate=callValidate;var S=this._formats;var x=this.RULES;try{var _=localCompile(e,r,t,u);w.validate=_;var j=w.callValidate;if(j){j.schema=_.schema;j.errors=null;j.refs=_.refs;j.refVal=_.refVal;j.root=_.root;j.$async=_.$async;if(d.sourceCode)j.source=_.source}return _}finally{endCompiling.call(this,e,r,u)}function callValidate(){var e=w.validate;var r=e.apply(this,arguments);callValidate.errors=e.errors;return r}function localCompile(e,t,o,u){var y=!t||t&&t.schema==e;if(t.schema!=r.schema)return compile.call(h,e,t,o,u);var P=e.$async===true;var b=n({isTop:true,schema:e,isRoot:y,baseId:u,root:t,schemaPath:"",errSchemaPath:"#",errorPath:'""',MissingRefError:i.MissingRef,RULES:x,validate:n,util:s,resolve:a,resolveRef:resolveRef,usePattern:usePattern,useDefault:useDefault,useCustomRule:useCustomRule,opts:d,formats:S,logger:h.logger,self:h});b=vars(p,refValCode)+vars(m,patternCode)+vars(g,defaultCode)+vars(E,customRuleCode)+b;if(d.processCode)b=d.processCode(b,e);var w;try{var _=new Function("self","RULES","formats","root","refVal","defaults","customRules","equal","ucs2length","ValidationError",b);w=_(h,x,S,r,p,g,E,f,l,c);p[0]=w}catch(e){h.logger.error("Error compiling schema, function code:",b);throw e}w.schema=e;w.errors=null;w.refs=v;w.refVal=p;w.root=y?w:t;if(P)w.$async=true;if(d.sourceCode===true){w.source={code:b,patterns:m,defaults:g}}return w}function resolveRef(e,s,i){s=a.url(e,s);var o=v[s];var n,l;if(o!==undefined){n=p[o];l="refVal["+o+"]";return resolvedRef(n,l)}if(!i&&r.refs){var f=r.refs[s];if(f!==undefined){n=r.refVal[f];l=addLocalRef(s,n);return resolvedRef(n,l)}}l=addLocalRef(s);var c=a.call(h,localCompile,r,s);if(c===undefined){var u=t&&t[s];if(u){c=a.inlineRef(u,d.inlineRefs)?u:compile.call(h,u,r,t,e)}}if(c===undefined){removeLocalRef(s)}else{replaceLocalRef(s,c);return resolvedRef(c,l)}}function addLocalRef(e,r){var t=p.length;p[t]=r;v[e]=t;return"refVal"+t}function removeLocalRef(e){delete v[e]}function replaceLocalRef(e,r){var t=v[e];p[t]=r}function resolvedRef(e,r){return typeof e=="object"||typeof e=="boolean"?{code:r,schema:e,inline:true}:{code:r,$async:e&&!!e.$async}}function usePattern(e){var r=y[e];if(r===undefined){r=y[e]=m.length;m[r]=e}return"pattern"+r}function useDefault(e){switch(typeof e){case"boolean":case"number":return""+e;case"string":return s.toQuotedString(e);case"object":if(e===null)return"null";var r=o(e);var t=P[r];if(t===undefined){t=P[r]=g.length;g[t]=e}return"default"+t}}function useCustomRule(e,r,t,a){if(h._opts.validateSchema!==false){var s=e.definition.dependencies;if(s&&!s.every((function(e){return Object.prototype.hasOwnProperty.call(t,e)})))throw new Error("parent schema must have all required keywords: "+s.join(","));var i=e.definition.validateSchema;if(i){var o=i(r);if(!o){var n="keyword schema is invalid: "+h.errorsText(i.errors);if(h._opts.validateSchema=="log")h.logger.error(n);else throw new Error(n)}}}var l=e.definition.compile,f=e.definition.inline,c=e.definition.macro;var u;if(l){u=l.call(h,r,t,a)}else if(c){u=c.call(h,r,t,a);if(d.validateSchema!==false)h.validateSchema(u,true)}else if(f){u=f.call(h,a,e.keyword,r,t)}else{u=e.definition.validate;if(!u)return}if(u===undefined)throw new Error('custom keyword "'+e.keyword+'"failed to compile');var p=E.length;E[p]=u;return{code:"customRule"+p,validate:u}}}function checkCompiling(e,r,t){var a=compIndex.call(this,e,r,t);if(a>=0)return{index:a,compiling:true};a=this._compilations.length;this._compilations[a]={schema:e,root:r,baseId:t};return{index:a,compiling:false}}function endCompiling(e,r,t){var a=compIndex.call(this,e,r,t);if(a>=0)this._compilations.splice(a,1)}function compIndex(e,r,t){for(var a=0;a{"use strict";var a=t(4856),s=t(1230),i=t(8716),o=t(2961),n=t(6042);e.exports=resolve;resolve.normalizeId=normalizeId;resolve.fullPath=getFullPath;resolve.url=resolveUrl;resolve.ids=resolveIds;resolve.inlineRef=inlineRef;resolve.schema=resolveSchema;function resolve(e,r,t){var a=this._refs[t];if(typeof a=="string"){if(this._refs[a])a=this._refs[a];else return resolve.call(this,e,r,a)}a=a||this._schemas[t];if(a instanceof o){return inlineRef(a.schema,this._opts.inlineRefs)?a.schema:a.validate||this._compile(a)}var s=resolveSchema.call(this,r,t);var i,n,l;if(s){i=s.schema;r=s.root;l=s.baseId}if(i instanceof o){n=i.validate||e.call(this,i.schema,r,undefined,l)}else if(i!==undefined){n=inlineRef(i,this._opts.inlineRefs)?i:e.call(this,i,r,undefined,l)}return n}function resolveSchema(e,r){var t=a.parse(r),s=_getFullPath(t),i=getFullPath(this._getId(e.schema));if(Object.keys(e.schema).length===0||s!==i){var n=normalizeId(s);var l=this._refs[n];if(typeof l=="string"){return resolveRecursive.call(this,e,l,t)}else if(l instanceof o){if(!l.validate)this._compile(l);e=l}else{l=this._schemas[n];if(l instanceof o){if(!l.validate)this._compile(l);if(n==normalizeId(r))return{schema:l,root:e,baseId:i};e=l}else{return}}if(!e.schema)return;i=getFullPath(this._getId(e.schema))}return getJsonPointer.call(this,t,i,e.schema,e)}function resolveRecursive(e,r,t){var a=resolveSchema.call(this,e,r);if(a){var s=a.schema;var i=a.baseId;e=a.root;var o=this._getId(s);if(o)i=resolveUrl(i,o);return getJsonPointer.call(this,t,i,s,e)}}var l=i.toHash(["properties","patternProperties","enum","dependencies","definitions"]);function getJsonPointer(e,r,t,a){e.fragment=e.fragment||"";if(e.fragment.slice(0,1)!="/")return;var s=e.fragment.split("/");for(var o=1;o{"use strict";var a=t(6964),s=t(8716).toHash;e.exports=function rules(){var e=[{type:"number",rules:[{maximum:["exclusiveMaximum"]},{minimum:["exclusiveMinimum"]},"multipleOf","format"]},{type:"string",rules:["maxLength","minLength","pattern","format"]},{type:"array",rules:["maxItems","minItems","items","contains","uniqueItems"]},{type:"object",rules:["maxProperties","minProperties","required","dependencies","propertyNames",{properties:["additionalProperties","patternProperties"]}]},{rules:["$ref","const","enum","not","anyOf","oneOf","allOf","if"]}];var r=["type","$comment"];var t=["$schema","$id","id","$data","$async","title","description","default","definitions","examples","readOnly","writeOnly","contentMediaType","contentEncoding","additionalItems","then","else"];var i=["number","integer","string","array","object","boolean","null"];e.all=s(r);e.types=s(i);e.forEach((function(t){t.rules=t.rules.map((function(t){var s;if(typeof t=="object"){var i=Object.keys(t)[0];s=t[i];t=i;s.forEach((function(t){r.push(t);e.all[t]=true}))}r.push(t);var o=e.all[t]={keyword:t,code:a[t],implements:s};return o}));e.all.$comment={keyword:"$comment",code:a.$comment};if(t.type)e.types[t.type]=t}));e.keywords=s(r.concat(t));e.custom={};return e}},2961:(e,r,t)=>{"use strict";var a=t(8716);e.exports=SchemaObject;function SchemaObject(e){a.copy(e,this)}},2:e=>{"use strict";e.exports=function ucs2length(e){var r=0,t=e.length,a=0,s;while(a=55296&&s<=56319&&a{"use strict";e.exports={copy:copy,checkDataType:checkDataType,checkDataTypes:checkDataTypes,coerceToTypes:coerceToTypes,toHash:toHash,getProperty:getProperty,escapeQuotes:escapeQuotes,equal:t(1230),ucs2length:t(2),varOccurences:varOccurences,varReplace:varReplace,schemaHasRules:schemaHasRules,schemaHasRulesExcept:schemaHasRulesExcept,schemaUnknownRules:schemaUnknownRules,toQuotedString:toQuotedString,getPathExpr:getPathExpr,getPath:getPath,getData:getData,unescapeFragment:unescapeFragment,unescapeJsonPointer:unescapeJsonPointer,escapeFragment:escapeFragment,escapeJsonPointer:escapeJsonPointer};function copy(e,r){r=r||{};for(var t in e)r[t]=e[t];return r}function checkDataType(e,r,t,a){var s=a?" !== ":" === ",i=a?" || ":" && ",o=a?"!":"",n=a?"":"!";switch(e){case"null":return r+s+"null";case"array":return o+"Array.isArray("+r+")";case"object":return"("+o+r+i+"typeof "+r+s+'"object"'+i+n+"Array.isArray("+r+"))";case"integer":return"(typeof "+r+s+'"number"'+i+n+"("+r+" % 1)"+i+r+s+r+(t?i+o+"isFinite("+r+")":"")+")";case"number":return"(typeof "+r+s+'"'+e+'"'+(t?i+o+"isFinite("+r+")":"")+")";default:return"typeof "+r+s+'"'+e+'"'}}function checkDataTypes(e,r,t){switch(e.length){case 1:return checkDataType(e[0],r,t,true);default:var a="";var s=toHash(e);if(s.array&&s.object){a=s.null?"(":"(!"+r+" || ";a+="typeof "+r+' !== "object")';delete s.null;delete s.array;delete s.object}if(s.number)delete s.integer;for(var i in s)a+=(a?" && ":"")+checkDataType(i,r,t,true);return a}}var a=toHash(["string","number","integer","boolean","null"]);function coerceToTypes(e,r){if(Array.isArray(r)){var t=[];for(var s=0;s=r)throw new Error("Cannot access property/index "+a+" levels up, current level is "+r);return t[r-a]}if(a>r)throw new Error("Cannot access data "+a+" levels up, current level is "+r);i="data"+(r-a||"");if(!s)return i}var f=i;var c=s.split("/");for(var u=0;u{"use strict";var r=["multipleOf","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","additionalItems","maxItems","minItems","uniqueItems","maxProperties","minProperties","required","additionalProperties","enum","format","const"];e.exports=function(e,t){for(var a=0;a{"use strict";var a=t(7136);e.exports={$id:"https://github.com/ajv-validator/ajv/blob/master/lib/definition_schema.js",definitions:{simpleTypes:a.definitions.simpleTypes},type:"object",dependencies:{schema:["validate"],$data:["validate"],statements:["inline"],valid:{not:{required:["macro"]}}},properties:{type:a.properties.type,schema:{type:"boolean"},statements:{type:"boolean"},dependencies:{type:"array",items:{type:"string"}},metaSchema:{type:"object"},modifying:{type:"boolean"},valid:{type:"boolean"},$data:{type:"boolean"},async:{type:"boolean"},errors:{anyOf:[{type:"boolean"},{const:"full"}]}}}},4130:e=>{"use strict";e.exports=function generate__limit(e,r,t){var a=" ";var s=e.level;var i=e.dataLevel;var o=e.schema[r];var n=e.schemaPath+e.util.getProperty(r);var l=e.errSchemaPath+"/"+r;var f=!e.opts.allErrors;var c;var u="data"+(i||"");var h=e.opts.$data&&o&&o.$data,d;if(h){a+=" var schema"+s+" = "+e.util.getData(o.$data,i,e.dataPathArr)+"; ";d="schema"+s}else{d=o}var p=r=="maximum",v=p?"exclusiveMaximum":"exclusiveMinimum",m=e.schema[v],y=e.opts.$data&&m&&m.$data,g=p?"<":">",P=p?">":"<",c=undefined;if(!(h||typeof o=="number"||o===undefined)){throw new Error(r+" must be number")}if(!(y||m===undefined||typeof m=="number"||typeof m=="boolean")){throw new Error(v+" must be number or boolean")}if(y){var E=e.util.getData(m.$data,i,e.dataPathArr),b="exclusive"+s,w="exclType"+s,S="exclIsNumber"+s,x="op"+s,_="' + "+x+" + '";a+=" var schemaExcl"+s+" = "+E+"; ";E="schemaExcl"+s;a+=" var "+b+"; var "+w+" = typeof "+E+"; if ("+w+" != 'boolean' && "+w+" != 'undefined' && "+w+" != 'number') { ";var c=v;var j=j||[];j.push(a);a="";if(e.createErrors!==false){a+=" { keyword: '"+(c||"_exclusiveLimit")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: {} ";if(e.opts.messages!==false){a+=" , message: '"+v+" should be boolean' "}if(e.opts.verbose){a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "}a+=" } "}else{a+=" {} "}var R=a;a=j.pop();if(!e.compositeRule&&f){if(e.async){a+=" throw new ValidationError(["+R+"]); "}else{a+=" validate.errors = ["+R+"]; return false; "}}else{a+=" var err = "+R+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}a+=" } else if ( ";if(h){a+=" ("+d+" !== undefined && typeof "+d+" != 'number') || "}a+=" "+w+" == 'number' ? ( ("+b+" = "+d+" === undefined || "+E+" "+g+"= "+d+") ? "+u+" "+P+"= "+E+" : "+u+" "+P+" "+d+" ) : ( ("+b+" = "+E+" === true) ? "+u+" "+P+"= "+d+" : "+u+" "+P+" "+d+" ) || "+u+" !== "+u+") { var op"+s+" = "+b+" ? '"+g+"' : '"+g+"='; ";if(o===undefined){c=v;l=e.errSchemaPath+"/"+v;d=E;h=y}}else{var S=typeof m=="number",_=g;if(S&&h){var x="'"+_+"'";a+=" if ( ";if(h){a+=" ("+d+" !== undefined && typeof "+d+" != 'number') || "}a+=" ( "+d+" === undefined || "+m+" "+g+"= "+d+" ? "+u+" "+P+"= "+m+" : "+u+" "+P+" "+d+" ) || "+u+" !== "+u+") { "}else{if(S&&o===undefined){b=true;c=v;l=e.errSchemaPath+"/"+v;d=m;P+="="}else{if(S)d=Math[p?"min":"max"](m,o);if(m===(S?d:true)){b=true;c=v;l=e.errSchemaPath+"/"+v;P+="="}else{b=false;_+="="}}var x="'"+_+"'";a+=" if ( ";if(h){a+=" ("+d+" !== undefined && typeof "+d+" != 'number') || "}a+=" "+u+" "+P+" "+d+" || "+u+" !== "+u+") { "}}c=c||r;var j=j||[];j.push(a);a="";if(e.createErrors!==false){a+=" { keyword: '"+(c||"_limit")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { comparison: "+x+", limit: "+d+", exclusive: "+b+" } ";if(e.opts.messages!==false){a+=" , message: 'should be "+_+" ";if(h){a+="' + "+d}else{a+=""+d+"'"}}if(e.opts.verbose){a+=" , schema: ";if(h){a+="validate.schema"+n}else{a+=""+o}a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "}a+=" } "}else{a+=" {} "}var R=a;a=j.pop();if(!e.compositeRule&&f){if(e.async){a+=" throw new ValidationError(["+R+"]); "}else{a+=" validate.errors = ["+R+"]; return false; "}}else{a+=" var err = "+R+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}a+=" } ";if(f){a+=" else { "}return a}},3472:e=>{"use strict";e.exports=function generate__limitItems(e,r,t){var a=" ";var s=e.level;var i=e.dataLevel;var o=e.schema[r];var n=e.schemaPath+e.util.getProperty(r);var l=e.errSchemaPath+"/"+r;var f=!e.opts.allErrors;var c;var u="data"+(i||"");var h=e.opts.$data&&o&&o.$data,d;if(h){a+=" var schema"+s+" = "+e.util.getData(o.$data,i,e.dataPathArr)+"; ";d="schema"+s}else{d=o}if(!(h||typeof o=="number")){throw new Error(r+" must be number")}var p=r=="maxItems"?">":"<";a+="if ( ";if(h){a+=" ("+d+" !== undefined && typeof "+d+" != 'number') || "}a+=" "+u+".length "+p+" "+d+") { ";var c=r;var v=v||[];v.push(a);a="";if(e.createErrors!==false){a+=" { keyword: '"+(c||"_limitItems")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { limit: "+d+" } ";if(e.opts.messages!==false){a+=" , message: 'should NOT have ";if(r=="maxItems"){a+="more"}else{a+="fewer"}a+=" than ";if(h){a+="' + "+d+" + '"}else{a+=""+o}a+=" items' "}if(e.opts.verbose){a+=" , schema: ";if(h){a+="validate.schema"+n}else{a+=""+o}a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "}a+=" } "}else{a+=" {} "}var m=a;a=v.pop();if(!e.compositeRule&&f){if(e.async){a+=" throw new ValidationError(["+m+"]); "}else{a+=" validate.errors = ["+m+"]; return false; "}}else{a+=" var err = "+m+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}a+="} ";if(f){a+=" else { "}return a}},9018:e=>{"use strict";e.exports=function generate__limitLength(e,r,t){var a=" ";var s=e.level;var i=e.dataLevel;var o=e.schema[r];var n=e.schemaPath+e.util.getProperty(r);var l=e.errSchemaPath+"/"+r;var f=!e.opts.allErrors;var c;var u="data"+(i||"");var h=e.opts.$data&&o&&o.$data,d;if(h){a+=" var schema"+s+" = "+e.util.getData(o.$data,i,e.dataPathArr)+"; ";d="schema"+s}else{d=o}if(!(h||typeof o=="number")){throw new Error(r+" must be number")}var p=r=="maxLength"?">":"<";a+="if ( ";if(h){a+=" ("+d+" !== undefined && typeof "+d+" != 'number') || "}if(e.opts.unicode===false){a+=" "+u+".length "}else{a+=" ucs2length("+u+") "}a+=" "+p+" "+d+") { ";var c=r;var v=v||[];v.push(a);a="";if(e.createErrors!==false){a+=" { keyword: '"+(c||"_limitLength")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { limit: "+d+" } ";if(e.opts.messages!==false){a+=" , message: 'should NOT be ";if(r=="maxLength"){a+="longer"}else{a+="shorter"}a+=" than ";if(h){a+="' + "+d+" + '"}else{a+=""+o}a+=" characters' "}if(e.opts.verbose){a+=" , schema: ";if(h){a+="validate.schema"+n}else{a+=""+o}a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "}a+=" } "}else{a+=" {} "}var m=a;a=v.pop();if(!e.compositeRule&&f){if(e.async){a+=" throw new ValidationError(["+m+"]); "}else{a+=" validate.errors = ["+m+"]; return false; "}}else{a+=" var err = "+m+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}a+="} ";if(f){a+=" else { "}return a}},8740:e=>{"use strict";e.exports=function generate__limitProperties(e,r,t){var a=" ";var s=e.level;var i=e.dataLevel;var o=e.schema[r];var n=e.schemaPath+e.util.getProperty(r);var l=e.errSchemaPath+"/"+r;var f=!e.opts.allErrors;var c;var u="data"+(i||"");var h=e.opts.$data&&o&&o.$data,d;if(h){a+=" var schema"+s+" = "+e.util.getData(o.$data,i,e.dataPathArr)+"; ";d="schema"+s}else{d=o}if(!(h||typeof o=="number")){throw new Error(r+" must be number")}var p=r=="maxProperties"?">":"<";a+="if ( ";if(h){a+=" ("+d+" !== undefined && typeof "+d+" != 'number') || "}a+=" Object.keys("+u+").length "+p+" "+d+") { ";var c=r;var v=v||[];v.push(a);a="";if(e.createErrors!==false){a+=" { keyword: '"+(c||"_limitProperties")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { limit: "+d+" } ";if(e.opts.messages!==false){a+=" , message: 'should NOT have ";if(r=="maxProperties"){a+="more"}else{a+="fewer"}a+=" than ";if(h){a+="' + "+d+" + '"}else{a+=""+o}a+=" properties' "}if(e.opts.verbose){a+=" , schema: ";if(h){a+="validate.schema"+n}else{a+=""+o}a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "}a+=" } "}else{a+=" {} "}var m=a;a=v.pop();if(!e.compositeRule&&f){if(e.async){a+=" throw new ValidationError(["+m+"]); "}else{a+=" validate.errors = ["+m+"]; return false; "}}else{a+=" var err = "+m+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}a+="} ";if(f){a+=" else { "}return a}},4378:e=>{"use strict";e.exports=function generate_allOf(e,r,t){var a=" ";var s=e.schema[r];var i=e.schemaPath+e.util.getProperty(r);var o=e.errSchemaPath+"/"+r;var n=!e.opts.allErrors;var l=e.util.copy(e);var f="";l.level++;var c="valid"+l.level;var u=l.baseId,h=true;var d=s;if(d){var p,v=-1,m=d.length-1;while(v0||p===false:e.util.schemaHasRules(p,e.RULES.all)){h=false;l.schema=p;l.schemaPath=i+"["+v+"]";l.errSchemaPath=o+"/"+v;a+=" "+e.validate(l)+" ";l.baseId=u;if(n){a+=" if ("+c+") { ";f+="}"}}}}if(n){if(h){a+=" if (true) { "}else{a+=" "+f.slice(0,-1)+" "}}return a}},9278:e=>{"use strict";e.exports=function generate_anyOf(e,r,t){var a=" ";var s=e.level;var i=e.dataLevel;var o=e.schema[r];var n=e.schemaPath+e.util.getProperty(r);var l=e.errSchemaPath+"/"+r;var f=!e.opts.allErrors;var c="data"+(i||"");var u="valid"+s;var h="errs__"+s;var d=e.util.copy(e);var p="";d.level++;var v="valid"+d.level;var m=o.every((function(r){return e.opts.strictKeywords?typeof r=="object"&&Object.keys(r).length>0||r===false:e.util.schemaHasRules(r,e.RULES.all)}));if(m){var y=d.baseId;a+=" var "+h+" = errors; var "+u+" = false; ";var g=e.compositeRule;e.compositeRule=d.compositeRule=true;var P=o;if(P){var E,b=-1,w=P.length-1;while(b{"use strict";e.exports=function generate_comment(e,r,t){var a=" ";var s=e.schema[r];var i=e.errSchemaPath+"/"+r;var o=!e.opts.allErrors;var n=e.util.toQuotedString(s);if(e.opts.$comment===true){a+=" console.log("+n+");"}else if(typeof e.opts.$comment=="function"){a+=" self._opts.$comment("+n+", "+e.util.toQuotedString(i)+", validate.root.schema);"}return a}},5326:e=>{"use strict";e.exports=function generate_const(e,r,t){var a=" ";var s=e.level;var i=e.dataLevel;var o=e.schema[r];var n=e.schemaPath+e.util.getProperty(r);var l=e.errSchemaPath+"/"+r;var f=!e.opts.allErrors;var c="data"+(i||"");var u="valid"+s;var h=e.opts.$data&&o&&o.$data,d;if(h){a+=" var schema"+s+" = "+e.util.getData(o.$data,i,e.dataPathArr)+"; ";d="schema"+s}else{d=o}if(!h){a+=" var schema"+s+" = validate.schema"+n+";"}a+="var "+u+" = equal("+c+", schema"+s+"); if (!"+u+") { ";var p=p||[];p.push(a);a="";if(e.createErrors!==false){a+=" { keyword: '"+"const"+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { allowedValue: schema"+s+" } ";if(e.opts.messages!==false){a+=" , message: 'should be equal to constant' "}if(e.opts.verbose){a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "}a+=" } "}else{a+=" {} "}var v=a;a=p.pop();if(!e.compositeRule&&f){if(e.async){a+=" throw new ValidationError(["+v+"]); "}else{a+=" validate.errors = ["+v+"]; return false; "}}else{a+=" var err = "+v+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}a+=" }";if(f){a+=" else { "}return a}},7922:e=>{"use strict";e.exports=function generate_contains(e,r,t){var a=" ";var s=e.level;var i=e.dataLevel;var o=e.schema[r];var n=e.schemaPath+e.util.getProperty(r);var l=e.errSchemaPath+"/"+r;var f=!e.opts.allErrors;var c="data"+(i||"");var u="valid"+s;var h="errs__"+s;var d=e.util.copy(e);var p="";d.level++;var v="valid"+d.level;var m="i"+s,y=d.dataLevel=e.dataLevel+1,g="data"+y,P=e.baseId,E=e.opts.strictKeywords?typeof o=="object"&&Object.keys(o).length>0||o===false:e.util.schemaHasRules(o,e.RULES.all);a+="var "+h+" = errors;var "+u+";";if(E){var b=e.compositeRule;e.compositeRule=d.compositeRule=true;d.schema=o;d.schemaPath=n;d.errSchemaPath=l;a+=" var "+v+" = false; for (var "+m+" = 0; "+m+" < "+c+".length; "+m+"++) { ";d.errorPath=e.util.getPathExpr(e.errorPath,m,e.opts.jsonPointers,true);var w=c+"["+m+"]";d.dataPathArr[y]=m;var S=e.validate(d);d.baseId=P;if(e.util.varOccurences(S,g)<2){a+=" "+e.util.varReplace(S,g,w)+" "}else{a+=" var "+g+" = "+w+"; "+S+" "}a+=" if ("+v+") break; } ";e.compositeRule=d.compositeRule=b;a+=" "+p+" if (!"+v+") {"}else{a+=" if ("+c+".length == 0) {"}var x=x||[];x.push(a);a="";if(e.createErrors!==false){a+=" { keyword: '"+"contains"+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: {} ";if(e.opts.messages!==false){a+=" , message: 'should contain a valid item' "}if(e.opts.verbose){a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "}a+=" } "}else{a+=" {} "}var _=a;a=x.pop();if(!e.compositeRule&&f){if(e.async){a+=" throw new ValidationError(["+_+"]); "}else{a+=" validate.errors = ["+_+"]; return false; "}}else{a+=" var err = "+_+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}a+=" } else { ";if(E){a+=" errors = "+h+"; if (vErrors !== null) { if ("+h+") vErrors.length = "+h+"; else vErrors = null; } "}if(e.opts.allErrors){a+=" } "}return a}},8029:e=>{"use strict";e.exports=function generate_custom(e,r,t){var a=" ";var s=e.level;var i=e.dataLevel;var o=e.schema[r];var n=e.schemaPath+e.util.getProperty(r);var l=e.errSchemaPath+"/"+r;var f=!e.opts.allErrors;var c;var u="data"+(i||"");var h="valid"+s;var d="errs__"+s;var p=e.opts.$data&&o&&o.$data,v;if(p){a+=" var schema"+s+" = "+e.util.getData(o.$data,i,e.dataPathArr)+"; ";v="schema"+s}else{v=o}var m=this,y="definition"+s,g=m.definition,P="";var E,b,w,S,x;if(p&&g.$data){x="keywordValidate"+s;var _=g.validateSchema;a+=" var "+y+" = RULES.custom['"+r+"'].definition; var "+x+" = "+y+".validate;"}else{S=e.useCustomRule(m,o,e.schema,e);if(!S)return;v="validate.schema"+n;x=S.code;E=g.compile;b=g.inline;w=g.macro}var j=x+".errors",R="i"+s,F="ruleErr"+s,D=g.async;if(D&&!e.async)throw new Error("async keyword in sync schema");if(!(b||w)){a+=""+j+" = null;"}a+="var "+d+" = errors;var "+h+";";if(p&&g.$data){P+="}";a+=" if ("+v+" === undefined) { "+h+" = true; } else { ";if(_){P+="}";a+=" "+h+" = "+y+".validateSchema("+v+"); if ("+h+") { "}}if(b){if(g.statements){a+=" "+S.validate+" "}else{a+=" "+h+" = "+S.validate+"; "}}else if(w){var $=e.util.copy(e);var P="";$.level++;var A="valid"+$.level;$.schema=S.validate;$.schemaPath="";var I=e.compositeRule;e.compositeRule=$.compositeRule=true;var C=e.validate($).replace(/validate\.schema/g,x);e.compositeRule=$.compositeRule=I;a+=" "+C}else{var O=O||[];O.push(a);a="";a+=" "+x+".call( ";if(e.opts.passContext){a+="this"}else{a+="self"}if(E||g.schema===false){a+=" , "+u+" "}else{a+=" , "+v+" , "+u+" , validate.schema"+e.schemaPath+" "}a+=" , (dataPath || '')";if(e.errorPath!='""'){a+=" + "+e.errorPath}var k=i?"data"+(i-1||""):"parentData",T=i?e.dataPathArr[i]:"parentDataProperty";a+=" , "+k+" , "+T+" , rootData ) ";var z=a;a=O.pop();if(g.errors===false){a+=" "+h+" = ";if(D){a+="await "}a+=""+z+"; "}else{if(D){j="customErrors"+s;a+=" var "+j+" = null; try { "+h+" = await "+z+"; } catch (e) { "+h+" = false; if (e instanceof ValidationError) "+j+" = e.errors; else throw e; } "}else{a+=" "+j+" = null; "+h+" = "+z+"; "}}}if(g.modifying){a+=" if ("+k+") "+u+" = "+k+"["+T+"];"}a+=""+P;if(g.valid){if(f){a+=" if (true) { "}}else{a+=" if ( ";if(g.valid===undefined){a+=" !";if(w){a+=""+A}else{a+=""+h}}else{a+=" "+!g.valid+" "}a+=") { ";c=m.keyword;var O=O||[];O.push(a);a="";var O=O||[];O.push(a);a="";if(e.createErrors!==false){a+=" { keyword: '"+(c||"custom")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { keyword: '"+m.keyword+"' } ";if(e.opts.messages!==false){a+=" , message: 'should pass \""+m.keyword+"\" keyword validation' "}if(e.opts.verbose){a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "}a+=" } "}else{a+=" {} "}var L=a;a=O.pop();if(!e.compositeRule&&f){if(e.async){a+=" throw new ValidationError(["+L+"]); "}else{a+=" validate.errors = ["+L+"]; return false; "}}else{a+=" var err = "+L+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}var N=a;a=O.pop();if(b){if(g.errors){if(g.errors!="full"){a+=" for (var "+R+"="+d+"; "+R+"{"use strict";e.exports=function generate_dependencies(e,r,t){var a=" ";var s=e.level;var i=e.dataLevel;var o=e.schema[r];var n=e.schemaPath+e.util.getProperty(r);var l=e.errSchemaPath+"/"+r;var f=!e.opts.allErrors;var c="data"+(i||"");var u="errs__"+s;var h=e.util.copy(e);var d="";h.level++;var p="valid"+h.level;var v={},m={},y=e.opts.ownProperties;for(b in o){if(b=="__proto__")continue;var g=o[b];var P=Array.isArray(g)?m:v;P[b]=g}a+="var "+u+" = errors;";var E=e.errorPath;a+="var missing"+s+";";for(var b in m){P=m[b];if(P.length){a+=" if ( "+c+e.util.getProperty(b)+" !== undefined ";if(y){a+=" && Object.prototype.hasOwnProperty.call("+c+", '"+e.util.escapeQuotes(b)+"') "}if(f){a+=" && ( ";var w=P;if(w){var S,x=-1,_=w.length-1;while(x<_){S=w[x+=1];if(x){a+=" || "}var j=e.util.getProperty(S),R=c+j;a+=" ( ( "+R+" === undefined ";if(y){a+=" || ! Object.prototype.hasOwnProperty.call("+c+", '"+e.util.escapeQuotes(S)+"') "}a+=") && (missing"+s+" = "+e.util.toQuotedString(e.opts.jsonPointers?S:j)+") ) "}}a+=")) { ";var F="missing"+s,D="' + "+F+" + '";if(e.opts._errorDataPathProperty){e.errorPath=e.opts.jsonPointers?e.util.getPathExpr(E,F,true):E+" + "+F}var $=$||[];$.push(a);a="";if(e.createErrors!==false){a+=" { keyword: '"+"dependencies"+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { property: '"+e.util.escapeQuotes(b)+"', missingProperty: '"+D+"', depsCount: "+P.length+", deps: '"+e.util.escapeQuotes(P.length==1?P[0]:P.join(", "))+"' } ";if(e.opts.messages!==false){a+=" , message: 'should have ";if(P.length==1){a+="property "+e.util.escapeQuotes(P[0])}else{a+="properties "+e.util.escapeQuotes(P.join(", "))}a+=" when property "+e.util.escapeQuotes(b)+" is present' "}if(e.opts.verbose){a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "}a+=" } "}else{a+=" {} "}var A=a;a=$.pop();if(!e.compositeRule&&f){if(e.async){a+=" throw new ValidationError(["+A+"]); "}else{a+=" validate.errors = ["+A+"]; return false; "}}else{a+=" var err = "+A+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}}else{a+=" ) { ";var I=P;if(I){var S,C=-1,O=I.length-1;while(C0||g===false:e.util.schemaHasRules(g,e.RULES.all)){a+=" "+p+" = true; if ( "+c+e.util.getProperty(b)+" !== undefined ";if(y){a+=" && Object.prototype.hasOwnProperty.call("+c+", '"+e.util.escapeQuotes(b)+"') "}a+=") { ";h.schema=g;h.schemaPath=n+e.util.getProperty(b);h.errSchemaPath=l+"/"+e.util.escapeFragment(b);a+=" "+e.validate(h)+" ";h.baseId=k;a+=" } ";if(f){a+=" if ("+p+") { ";d+="}"}}}if(f){a+=" "+d+" if ("+u+" == errors) {"}return a}},2783:e=>{"use strict";e.exports=function generate_enum(e,r,t){var a=" ";var s=e.level;var i=e.dataLevel;var o=e.schema[r];var n=e.schemaPath+e.util.getProperty(r);var l=e.errSchemaPath+"/"+r;var f=!e.opts.allErrors;var c="data"+(i||"");var u="valid"+s;var h=e.opts.$data&&o&&o.$data,d;if(h){a+=" var schema"+s+" = "+e.util.getData(o.$data,i,e.dataPathArr)+"; ";d="schema"+s}else{d=o}var p="i"+s,v="schema"+s;if(!h){a+=" var "+v+" = validate.schema"+n+";"}a+="var "+u+";";if(h){a+=" if (schema"+s+" === undefined) "+u+" = true; else if (!Array.isArray(schema"+s+")) "+u+" = false; else {"}a+=""+u+" = false;for (var "+p+"=0; "+p+"<"+v+".length; "+p+"++) if (equal("+c+", "+v+"["+p+"])) { "+u+" = true; break; }";if(h){a+=" } "}a+=" if (!"+u+") { ";var m=m||[];m.push(a);a="";if(e.createErrors!==false){a+=" { keyword: '"+"enum"+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { allowedValues: schema"+s+" } ";if(e.opts.messages!==false){a+=" , message: 'should be equal to one of the allowed values' "}if(e.opts.verbose){a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "}a+=" } "}else{a+=" {} "}var y=a;a=m.pop();if(!e.compositeRule&&f){if(e.async){a+=" throw new ValidationError(["+y+"]); "}else{a+=" validate.errors = ["+y+"]; return false; "}}else{a+=" var err = "+y+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}a+=" }";if(f){a+=" else { "}return a}},9175:e=>{"use strict";e.exports=function generate_format(e,r,t){var a=" ";var s=e.level;var i=e.dataLevel;var o=e.schema[r];var n=e.schemaPath+e.util.getProperty(r);var l=e.errSchemaPath+"/"+r;var f=!e.opts.allErrors;var c="data"+(i||"");if(e.opts.format===false){if(f){a+=" if (true) { "}return a}var u=e.opts.$data&&o&&o.$data,h;if(u){a+=" var schema"+s+" = "+e.util.getData(o.$data,i,e.dataPathArr)+"; ";h="schema"+s}else{h=o}var d=e.opts.unknownFormats,p=Array.isArray(d);if(u){var v="format"+s,m="isObject"+s,y="formatType"+s;a+=" var "+v+" = formats["+h+"]; var "+m+" = typeof "+v+" == 'object' && !("+v+" instanceof RegExp) && "+v+".validate; var "+y+" = "+m+" && "+v+".type || 'string'; if ("+m+") { ";if(e.async){a+=" var async"+s+" = "+v+".async; "}a+=" "+v+" = "+v+".validate; } if ( ";if(u){a+=" ("+h+" !== undefined && typeof "+h+" != 'string') || "}a+=" (";if(d!="ignore"){a+=" ("+h+" && !"+v+" ";if(p){a+=" && self._opts.unknownFormats.indexOf("+h+") == -1 "}a+=") || "}a+=" ("+v+" && "+y+" == '"+t+"' && !(typeof "+v+" == 'function' ? ";if(e.async){a+=" (async"+s+" ? await "+v+"("+c+") : "+v+"("+c+")) "}else{a+=" "+v+"("+c+") "}a+=" : "+v+".test("+c+"))))) {"}else{var v=e.formats[o];if(!v){if(d=="ignore"){e.logger.warn('unknown format "'+o+'" ignored in schema at path "'+e.errSchemaPath+'"');if(f){a+=" if (true) { "}return a}else if(p&&d.indexOf(o)>=0){if(f){a+=" if (true) { "}return a}else{throw new Error('unknown format "'+o+'" is used in schema at path "'+e.errSchemaPath+'"')}}var m=typeof v=="object"&&!(v instanceof RegExp)&&v.validate;var y=m&&v.type||"string";if(m){var g=v.async===true;v=v.validate}if(y!=t){if(f){a+=" if (true) { "}return a}if(g){if(!e.async)throw new Error("async format in sync schema");var P="formats"+e.util.getProperty(o)+".validate";a+=" if (!(await "+P+"("+c+"))) { "}else{a+=" if (! ";var P="formats"+e.util.getProperty(o);if(m)P+=".validate";if(typeof v=="function"){a+=" "+P+"("+c+") "}else{a+=" "+P+".test("+c+") "}a+=") { "}}var E=E||[];E.push(a);a="";if(e.createErrors!==false){a+=" { keyword: '"+"format"+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { format: ";if(u){a+=""+h}else{a+=""+e.util.toQuotedString(o)}a+=" } ";if(e.opts.messages!==false){a+=" , message: 'should match format \"";if(u){a+="' + "+h+" + '"}else{a+=""+e.util.escapeQuotes(o)}a+="\"' "}if(e.opts.verbose){a+=" , schema: ";if(u){a+="validate.schema"+n}else{a+=""+e.util.toQuotedString(o)}a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "}a+=" } "}else{a+=" {} "}var b=a;a=E.pop();if(!e.compositeRule&&f){if(e.async){a+=" throw new ValidationError(["+b+"]); "}else{a+=" validate.errors = ["+b+"]; return false; "}}else{a+=" var err = "+b+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}a+=" } ";if(f){a+=" else { "}return a}},5859:e=>{"use strict";e.exports=function generate_if(e,r,t){var a=" ";var s=e.level;var i=e.dataLevel;var o=e.schema[r];var n=e.schemaPath+e.util.getProperty(r);var l=e.errSchemaPath+"/"+r;var f=!e.opts.allErrors;var c="data"+(i||"");var u="valid"+s;var h="errs__"+s;var d=e.util.copy(e);d.level++;var p="valid"+d.level;var v=e.schema["then"],m=e.schema["else"],y=v!==undefined&&(e.opts.strictKeywords?typeof v=="object"&&Object.keys(v).length>0||v===false:e.util.schemaHasRules(v,e.RULES.all)),g=m!==undefined&&(e.opts.strictKeywords?typeof m=="object"&&Object.keys(m).length>0||m===false:e.util.schemaHasRules(m,e.RULES.all)),P=d.baseId;if(y||g){var E;d.createErrors=false;d.schema=o;d.schemaPath=n;d.errSchemaPath=l;a+=" var "+h+" = errors; var "+u+" = true; ";var b=e.compositeRule;e.compositeRule=d.compositeRule=true;a+=" "+e.validate(d)+" ";d.baseId=P;d.createErrors=true;a+=" errors = "+h+"; if (vErrors !== null) { if ("+h+") vErrors.length = "+h+"; else vErrors = null; } ";e.compositeRule=d.compositeRule=b;if(y){a+=" if ("+p+") { ";d.schema=e.schema["then"];d.schemaPath=e.schemaPath+".then";d.errSchemaPath=e.errSchemaPath+"/then";a+=" "+e.validate(d)+" ";d.baseId=P;a+=" "+u+" = "+p+"; ";if(y&&g){E="ifClause"+s;a+=" var "+E+" = 'then'; "}else{E="'then'"}a+=" } ";if(g){a+=" else { "}}else{a+=" if (!"+p+") { "}if(g){d.schema=e.schema["else"];d.schemaPath=e.schemaPath+".else";d.errSchemaPath=e.errSchemaPath+"/else";a+=" "+e.validate(d)+" ";d.baseId=P;a+=" "+u+" = "+p+"; ";if(y&&g){E="ifClause"+s;a+=" var "+E+" = 'else'; "}else{E="'else'"}a+=" } "}a+=" if (!"+u+") { var err = ";if(e.createErrors!==false){a+=" { keyword: '"+"if"+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { failingKeyword: "+E+" } ";if(e.opts.messages!==false){a+=" , message: 'should match \"' + "+E+" + '\" schema' "}if(e.opts.verbose){a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "}a+=" } "}else{a+=" {} "}a+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";if(!e.compositeRule&&f){if(e.async){a+=" throw new ValidationError(vErrors); "}else{a+=" validate.errors = vErrors; return false; "}}a+=" } ";if(f){a+=" else { "}}else{if(f){a+=" if (true) { "}}return a}},6964:(e,r,t)=>{"use strict";e.exports={$ref:t(1473),allOf:t(4378),anyOf:t(9278),$comment:t(9263),const:t(5326),contains:t(7922),dependencies:t(2283),enum:t(2783),format:t(9175),if:t(5859),items:t(9187),maximum:t(4130),minimum:t(4130),maxItems:t(3472),minItems:t(3472),maxLength:t(9018),minLength:t(9018),maxProperties:t(8740),minProperties:t(8740),multipleOf:t(2644),not:t(4806),oneOf:t(1853),pattern:t(2944),properties:t(1615),propertyNames:t(6610),required:t(6172),uniqueItems:t(2370),validate:t(7003)}},9187:e=>{"use strict";e.exports=function generate_items(e,r,t){var a=" ";var s=e.level;var i=e.dataLevel;var o=e.schema[r];var n=e.schemaPath+e.util.getProperty(r);var l=e.errSchemaPath+"/"+r;var f=!e.opts.allErrors;var c="data"+(i||"");var u="valid"+s;var h="errs__"+s;var d=e.util.copy(e);var p="";d.level++;var v="valid"+d.level;var m="i"+s,y=d.dataLevel=e.dataLevel+1,g="data"+y,P=e.baseId;a+="var "+h+" = errors;var "+u+";";if(Array.isArray(o)){var E=e.schema.additionalItems;if(E===false){a+=" "+u+" = "+c+".length <= "+o.length+"; ";var b=l;l=e.errSchemaPath+"/additionalItems";a+=" if (!"+u+") { ";var w=w||[];w.push(a);a="";if(e.createErrors!==false){a+=" { keyword: '"+"additionalItems"+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { limit: "+o.length+" } ";if(e.opts.messages!==false){a+=" , message: 'should NOT have more than "+o.length+" items' "}if(e.opts.verbose){a+=" , schema: false , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "}a+=" } "}else{a+=" {} "}var S=a;a=w.pop();if(!e.compositeRule&&f){if(e.async){a+=" throw new ValidationError(["+S+"]); "}else{a+=" validate.errors = ["+S+"]; return false; "}}else{a+=" var err = "+S+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}a+=" } ";l=b;if(f){p+="}";a+=" else { "}}var x=o;if(x){var _,j=-1,R=x.length-1;while(j0||_===false:e.util.schemaHasRules(_,e.RULES.all)){a+=" "+v+" = true; if ("+c+".length > "+j+") { ";var F=c+"["+j+"]";d.schema=_;d.schemaPath=n+"["+j+"]";d.errSchemaPath=l+"/"+j;d.errorPath=e.util.getPathExpr(e.errorPath,j,e.opts.jsonPointers,true);d.dataPathArr[y]=j;var D=e.validate(d);d.baseId=P;if(e.util.varOccurences(D,g)<2){a+=" "+e.util.varReplace(D,g,F)+" "}else{a+=" var "+g+" = "+F+"; "+D+" "}a+=" } ";if(f){a+=" if ("+v+") { ";p+="}"}}}}if(typeof E=="object"&&(e.opts.strictKeywords?typeof E=="object"&&Object.keys(E).length>0||E===false:e.util.schemaHasRules(E,e.RULES.all))){d.schema=E;d.schemaPath=e.schemaPath+".additionalItems";d.errSchemaPath=e.errSchemaPath+"/additionalItems";a+=" "+v+" = true; if ("+c+".length > "+o.length+") { for (var "+m+" = "+o.length+"; "+m+" < "+c+".length; "+m+"++) { ";d.errorPath=e.util.getPathExpr(e.errorPath,m,e.opts.jsonPointers,true);var F=c+"["+m+"]";d.dataPathArr[y]=m;var D=e.validate(d);d.baseId=P;if(e.util.varOccurences(D,g)<2){a+=" "+e.util.varReplace(D,g,F)+" "}else{a+=" var "+g+" = "+F+"; "+D+" "}if(f){a+=" if (!"+v+") break; "}a+=" } } ";if(f){a+=" if ("+v+") { ";p+="}"}}}else if(e.opts.strictKeywords?typeof o=="object"&&Object.keys(o).length>0||o===false:e.util.schemaHasRules(o,e.RULES.all)){d.schema=o;d.schemaPath=n;d.errSchemaPath=l;a+=" for (var "+m+" = "+0+"; "+m+" < "+c+".length; "+m+"++) { ";d.errorPath=e.util.getPathExpr(e.errorPath,m,e.opts.jsonPointers,true);var F=c+"["+m+"]";d.dataPathArr[y]=m;var D=e.validate(d);d.baseId=P;if(e.util.varOccurences(D,g)<2){a+=" "+e.util.varReplace(D,g,F)+" "}else{a+=" var "+g+" = "+F+"; "+D+" "}if(f){a+=" if (!"+v+") break; "}a+=" }"}if(f){a+=" "+p+" if ("+h+" == errors) {"}return a}},2644:e=>{"use strict";e.exports=function generate_multipleOf(e,r,t){var a=" ";var s=e.level;var i=e.dataLevel;var o=e.schema[r];var n=e.schemaPath+e.util.getProperty(r);var l=e.errSchemaPath+"/"+r;var f=!e.opts.allErrors;var c="data"+(i||"");var u=e.opts.$data&&o&&o.$data,h;if(u){a+=" var schema"+s+" = "+e.util.getData(o.$data,i,e.dataPathArr)+"; ";h="schema"+s}else{h=o}if(!(u||typeof o=="number")){throw new Error(r+" must be number")}a+="var division"+s+";if (";if(u){a+=" "+h+" !== undefined && ( typeof "+h+" != 'number' || "}a+=" (division"+s+" = "+c+" / "+h+", ";if(e.opts.multipleOfPrecision){a+=" Math.abs(Math.round(division"+s+") - division"+s+") > 1e-"+e.opts.multipleOfPrecision+" "}else{a+=" division"+s+" !== parseInt(division"+s+") "}a+=" ) ";if(u){a+=" ) "}a+=" ) { ";var d=d||[];d.push(a);a="";if(e.createErrors!==false){a+=" { keyword: '"+"multipleOf"+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { multipleOf: "+h+" } ";if(e.opts.messages!==false){a+=" , message: 'should be multiple of ";if(u){a+="' + "+h}else{a+=""+h+"'"}}if(e.opts.verbose){a+=" , schema: ";if(u){a+="validate.schema"+n}else{a+=""+o}a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "}a+=" } "}else{a+=" {} "}var p=a;a=d.pop();if(!e.compositeRule&&f){if(e.async){a+=" throw new ValidationError(["+p+"]); "}else{a+=" validate.errors = ["+p+"]; return false; "}}else{a+=" var err = "+p+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}a+="} ";if(f){a+=" else { "}return a}},4806:e=>{"use strict";e.exports=function generate_not(e,r,t){var a=" ";var s=e.level;var i=e.dataLevel;var o=e.schema[r];var n=e.schemaPath+e.util.getProperty(r);var l=e.errSchemaPath+"/"+r;var f=!e.opts.allErrors;var c="data"+(i||"");var u="errs__"+s;var h=e.util.copy(e);h.level++;var d="valid"+h.level;if(e.opts.strictKeywords?typeof o=="object"&&Object.keys(o).length>0||o===false:e.util.schemaHasRules(o,e.RULES.all)){h.schema=o;h.schemaPath=n;h.errSchemaPath=l;a+=" var "+u+" = errors; ";var p=e.compositeRule;e.compositeRule=h.compositeRule=true;h.createErrors=false;var v;if(h.opts.allErrors){v=h.opts.allErrors;h.opts.allErrors=false}a+=" "+e.validate(h)+" ";h.createErrors=true;if(v)h.opts.allErrors=v;e.compositeRule=h.compositeRule=p;a+=" if ("+d+") { ";var m=m||[];m.push(a);a="";if(e.createErrors!==false){a+=" { keyword: '"+"not"+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: {} ";if(e.opts.messages!==false){a+=" , message: 'should NOT be valid' "}if(e.opts.verbose){a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "}a+=" } "}else{a+=" {} "}var y=a;a=m.pop();if(!e.compositeRule&&f){if(e.async){a+=" throw new ValidationError(["+y+"]); "}else{a+=" validate.errors = ["+y+"]; return false; "}}else{a+=" var err = "+y+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}a+=" } else { errors = "+u+"; if (vErrors !== null) { if ("+u+") vErrors.length = "+u+"; else vErrors = null; } ";if(e.opts.allErrors){a+=" } "}}else{a+=" var err = ";if(e.createErrors!==false){a+=" { keyword: '"+"not"+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: {} ";if(e.opts.messages!==false){a+=" , message: 'should NOT be valid' "}if(e.opts.verbose){a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "}a+=" } "}else{a+=" {} "}a+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";if(f){a+=" if (false) { "}}return a}},1853:e=>{"use strict";e.exports=function generate_oneOf(e,r,t){var a=" ";var s=e.level;var i=e.dataLevel;var o=e.schema[r];var n=e.schemaPath+e.util.getProperty(r);var l=e.errSchemaPath+"/"+r;var f=!e.opts.allErrors;var c="data"+(i||"");var u="valid"+s;var h="errs__"+s;var d=e.util.copy(e);var p="";d.level++;var v="valid"+d.level;var m=d.baseId,y="prevValid"+s,g="passingSchemas"+s;a+="var "+h+" = errors , "+y+" = false , "+u+" = false , "+g+" = null; ";var P=e.compositeRule;e.compositeRule=d.compositeRule=true;var E=o;if(E){var b,w=-1,S=E.length-1;while(w0||b===false:e.util.schemaHasRules(b,e.RULES.all)){d.schema=b;d.schemaPath=n+"["+w+"]";d.errSchemaPath=l+"/"+w;a+=" "+e.validate(d)+" ";d.baseId=m}else{a+=" var "+v+" = true; "}if(w){a+=" if ("+v+" && "+y+") { "+u+" = false; "+g+" = ["+g+", "+w+"]; } else { ";p+="}"}a+=" if ("+v+") { "+u+" = "+y+" = true; "+g+" = "+w+"; }"}}e.compositeRule=d.compositeRule=P;a+=""+p+"if (!"+u+") { var err = ";if(e.createErrors!==false){a+=" { keyword: '"+"oneOf"+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { passingSchemas: "+g+" } ";if(e.opts.messages!==false){a+=" , message: 'should match exactly one schema in oneOf' "}if(e.opts.verbose){a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "}a+=" } "}else{a+=" {} "}a+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";if(!e.compositeRule&&f){if(e.async){a+=" throw new ValidationError(vErrors); "}else{a+=" validate.errors = vErrors; return false; "}}a+="} else { errors = "+h+"; if (vErrors !== null) { if ("+h+") vErrors.length = "+h+"; else vErrors = null; }";if(e.opts.allErrors){a+=" } "}return a}},2944:e=>{"use strict";e.exports=function generate_pattern(e,r,t){var a=" ";var s=e.level;var i=e.dataLevel;var o=e.schema[r];var n=e.schemaPath+e.util.getProperty(r);var l=e.errSchemaPath+"/"+r;var f=!e.opts.allErrors;var c="data"+(i||"");var u=e.opts.$data&&o&&o.$data,h;if(u){a+=" var schema"+s+" = "+e.util.getData(o.$data,i,e.dataPathArr)+"; ";h="schema"+s}else{h=o}var d=u?"(new RegExp("+h+"))":e.usePattern(o);a+="if ( ";if(u){a+=" ("+h+" !== undefined && typeof "+h+" != 'string') || "}a+=" !"+d+".test("+c+") ) { ";var p=p||[];p.push(a);a="";if(e.createErrors!==false){a+=" { keyword: '"+"pattern"+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { pattern: ";if(u){a+=""+h}else{a+=""+e.util.toQuotedString(o)}a+=" } ";if(e.opts.messages!==false){a+=" , message: 'should match pattern \"";if(u){a+="' + "+h+" + '"}else{a+=""+e.util.escapeQuotes(o)}a+="\"' "}if(e.opts.verbose){a+=" , schema: ";if(u){a+="validate.schema"+n}else{a+=""+e.util.toQuotedString(o)}a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "}a+=" } "}else{a+=" {} "}var v=a;a=p.pop();if(!e.compositeRule&&f){if(e.async){a+=" throw new ValidationError(["+v+"]); "}else{a+=" validate.errors = ["+v+"]; return false; "}}else{a+=" var err = "+v+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}a+="} ";if(f){a+=" else { "}return a}},1615:e=>{"use strict";e.exports=function generate_properties(e,r,t){var a=" ";var s=e.level;var i=e.dataLevel;var o=e.schema[r];var n=e.schemaPath+e.util.getProperty(r);var l=e.errSchemaPath+"/"+r;var f=!e.opts.allErrors;var c="data"+(i||"");var u="errs__"+s;var h=e.util.copy(e);var d="";h.level++;var p="valid"+h.level;var v="key"+s,m="idx"+s,y=h.dataLevel=e.dataLevel+1,g="data"+y,P="dataProperties"+s;var E=Object.keys(o||{}).filter(notProto),b=e.schema.patternProperties||{},w=Object.keys(b).filter(notProto),S=e.schema.additionalProperties,x=E.length||w.length,_=S===false,j=typeof S=="object"&&Object.keys(S).length,R=e.opts.removeAdditional,F=_||j||R,D=e.opts.ownProperties,$=e.baseId;var A=e.schema.required;if(A&&!(e.opts.$data&&A.$data)&&A.length8){a+=" || validate.schema"+n+".hasOwnProperty("+v+") "}else{var C=E;if(C){var O,k=-1,T=C.length-1;while(k0||W===false:e.util.schemaHasRules(W,e.RULES.all)){var ee=e.util.getProperty(O),B=c+ee,re=G&&W.default!==undefined;h.schema=W;h.schemaPath=n+ee;h.errSchemaPath=l+"/"+e.util.escapeFragment(O);h.errorPath=e.util.getPath(e.errorPath,O,e.opts.jsonPointers);h.dataPathArr[y]=e.util.toQuotedString(O);var J=e.validate(h);h.baseId=$;if(e.util.varOccurences(J,g)<2){J=e.util.varReplace(J,g,B);var te=B}else{var te=g;a+=" var "+g+" = "+B+"; "}if(re){a+=" "+J+" "}else{if(I&&I[O]){a+=" if ( "+te+" === undefined ";if(D){a+=" || ! Object.prototype.hasOwnProperty.call("+c+", '"+e.util.escapeQuotes(O)+"') "}a+=") { "+p+" = false; ";var q=e.errorPath,Q=l,ae=e.util.escapeQuotes(O);if(e.opts._errorDataPathProperty){e.errorPath=e.util.getPath(q,O,e.opts.jsonPointers)}l=e.errSchemaPath+"/required";var M=M||[];M.push(a);a="";if(e.createErrors!==false){a+=" { keyword: '"+"required"+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { missingProperty: '"+ae+"' } ";if(e.opts.messages!==false){a+=" , message: '";if(e.opts._errorDataPathProperty){a+="is a required property"}else{a+="should have required property \\'"+ae+"\\'"}a+="' "}if(e.opts.verbose){a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "}a+=" } "}else{a+=" {} "}var H=a;a=M.pop();if(!e.compositeRule&&f){if(e.async){a+=" throw new ValidationError(["+H+"]); "}else{a+=" validate.errors = ["+H+"]; return false; "}}else{a+=" var err = "+H+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}l=Q;e.errorPath=q;a+=" } else { "}else{if(f){a+=" if ( "+te+" === undefined ";if(D){a+=" || ! Object.prototype.hasOwnProperty.call("+c+", '"+e.util.escapeQuotes(O)+"') "}a+=") { "+p+" = true; } else { "}else{a+=" if ("+te+" !== undefined ";if(D){a+=" && Object.prototype.hasOwnProperty.call("+c+", '"+e.util.escapeQuotes(O)+"') "}a+=" ) { "}}a+=" "+J+" } "}}if(f){a+=" if ("+p+") { ";d+="}"}}}}if(w.length){var se=w;if(se){var L,ie=-1,oe=se.length-1;while(ie0||W===false:e.util.schemaHasRules(W,e.RULES.all)){h.schema=W;h.schemaPath=e.schemaPath+".patternProperties"+e.util.getProperty(L);h.errSchemaPath=e.errSchemaPath+"/patternProperties/"+e.util.escapeFragment(L);if(D){a+=" "+P+" = "+P+" || Object.keys("+c+"); for (var "+m+"=0; "+m+"<"+P+".length; "+m+"++) { var "+v+" = "+P+"["+m+"]; "}else{a+=" for (var "+v+" in "+c+") { "}a+=" if ("+e.usePattern(L)+".test("+v+")) { ";h.errorPath=e.util.getPathExpr(e.errorPath,v,e.opts.jsonPointers);var B=c+"["+v+"]";h.dataPathArr[y]=v;var J=e.validate(h);h.baseId=$;if(e.util.varOccurences(J,g)<2){a+=" "+e.util.varReplace(J,g,B)+" "}else{a+=" var "+g+" = "+B+"; "+J+" "}if(f){a+=" if (!"+p+") break; "}a+=" } ";if(f){a+=" else "+p+" = true; "}a+=" } ";if(f){a+=" if ("+p+") { ";d+="}"}}}}}if(f){a+=" "+d+" if ("+u+" == errors) {"}return a}},6610:e=>{"use strict";e.exports=function generate_propertyNames(e,r,t){var a=" ";var s=e.level;var i=e.dataLevel;var o=e.schema[r];var n=e.schemaPath+e.util.getProperty(r);var l=e.errSchemaPath+"/"+r;var f=!e.opts.allErrors;var c="data"+(i||"");var u="errs__"+s;var h=e.util.copy(e);var d="";h.level++;var p="valid"+h.level;a+="var "+u+" = errors;";if(e.opts.strictKeywords?typeof o=="object"&&Object.keys(o).length>0||o===false:e.util.schemaHasRules(o,e.RULES.all)){h.schema=o;h.schemaPath=n;h.errSchemaPath=l;var v="key"+s,m="idx"+s,y="i"+s,g="' + "+v+" + '",P=h.dataLevel=e.dataLevel+1,E="data"+P,b="dataProperties"+s,w=e.opts.ownProperties,S=e.baseId;if(w){a+=" var "+b+" = undefined; "}if(w){a+=" "+b+" = "+b+" || Object.keys("+c+"); for (var "+m+"=0; "+m+"<"+b+".length; "+m+"++) { var "+v+" = "+b+"["+m+"]; "}else{a+=" for (var "+v+" in "+c+") { "}a+=" var startErrs"+s+" = errors; ";var x=v;var _=e.compositeRule;e.compositeRule=h.compositeRule=true;var j=e.validate(h);h.baseId=S;if(e.util.varOccurences(j,E)<2){a+=" "+e.util.varReplace(j,E,x)+" "}else{a+=" var "+E+" = "+x+"; "+j+" "}e.compositeRule=h.compositeRule=_;a+=" if (!"+p+") { for (var "+y+"=startErrs"+s+"; "+y+"{"use strict";e.exports=function generate_ref(e,r,t){var a=" ";var s=e.level;var i=e.dataLevel;var o=e.schema[r];var n=e.errSchemaPath+"/"+r;var l=!e.opts.allErrors;var f="data"+(i||"");var c="valid"+s;var u,h;if(o=="#"||o=="#/"){if(e.isRoot){u=e.async;h="validate"}else{u=e.root.schema.$async===true;h="root.refVal[0]"}}else{var d=e.resolveRef(e.baseId,o,e.isRoot);if(d===undefined){var p=e.MissingRefError.message(e.baseId,o);if(e.opts.missingRefs=="fail"){e.logger.error(p);var v=v||[];v.push(a);a="";if(e.createErrors!==false){a+=" { keyword: '"+"$ref"+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: { ref: '"+e.util.escapeQuotes(o)+"' } ";if(e.opts.messages!==false){a+=" , message: 'can\\'t resolve reference "+e.util.escapeQuotes(o)+"' "}if(e.opts.verbose){a+=" , schema: "+e.util.toQuotedString(o)+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+f+" "}a+=" } "}else{a+=" {} "}var m=a;a=v.pop();if(!e.compositeRule&&l){if(e.async){a+=" throw new ValidationError(["+m+"]); "}else{a+=" validate.errors = ["+m+"]; return false; "}}else{a+=" var err = "+m+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}if(l){a+=" if (false) { "}}else if(e.opts.missingRefs=="ignore"){e.logger.warn(p);if(l){a+=" if (true) { "}}else{throw new e.MissingRefError(e.baseId,o,p)}}else if(d.inline){var y=e.util.copy(e);y.level++;var g="valid"+y.level;y.schema=d.schema;y.schemaPath="";y.errSchemaPath=o;var P=e.validate(y).replace(/validate\.schema/g,d.code);a+=" "+P+" ";if(l){a+=" if ("+g+") { "}}else{u=d.$async===true||e.async&&d.$async!==false;h=d.code}}if(h){var v=v||[];v.push(a);a="";if(e.opts.passContext){a+=" "+h+".call(this, "}else{a+=" "+h+"( "}a+=" "+f+", (dataPath || '')";if(e.errorPath!='""'){a+=" + "+e.errorPath}var E=i?"data"+(i-1||""):"parentData",b=i?e.dataPathArr[i]:"parentDataProperty";a+=" , "+E+" , "+b+", rootData) ";var w=a;a=v.pop();if(u){if(!e.async)throw new Error("async schema referenced by sync schema");if(l){a+=" var "+c+"; "}a+=" try { await "+w+"; ";if(l){a+=" "+c+" = true; "}a+=" } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; ";if(l){a+=" "+c+" = false; "}a+=" } ";if(l){a+=" if ("+c+") { "}}else{a+=" if (!"+w+") { if (vErrors === null) vErrors = "+h+".errors; else vErrors = vErrors.concat("+h+".errors); errors = vErrors.length; } ";if(l){a+=" else { "}}}return a}},6172:e=>{"use strict";e.exports=function generate_required(e,r,t){var a=" ";var s=e.level;var i=e.dataLevel;var o=e.schema[r];var n=e.schemaPath+e.util.getProperty(r);var l=e.errSchemaPath+"/"+r;var f=!e.opts.allErrors;var c="data"+(i||"");var u="valid"+s;var h=e.opts.$data&&o&&o.$data,d;if(h){a+=" var schema"+s+" = "+e.util.getData(o.$data,i,e.dataPathArr)+"; ";d="schema"+s}else{d=o}var p="schema"+s;if(!h){if(o.length0||E===false:e.util.schemaHasRules(E,e.RULES.all)))){v[v.length]=y}}}}else{var v=o}}if(h||v.length){var b=e.errorPath,w=h||v.length>=e.opts.loopRequired,S=e.opts.ownProperties;if(f){a+=" var missing"+s+"; ";if(w){if(!h){a+=" var "+p+" = validate.schema"+n+"; "}var x="i"+s,_="schema"+s+"["+x+"]",j="' + "+_+" + '";if(e.opts._errorDataPathProperty){e.errorPath=e.util.getPathExpr(b,_,e.opts.jsonPointers)}a+=" var "+u+" = true; ";if(h){a+=" if (schema"+s+" === undefined) "+u+" = true; else if (!Array.isArray(schema"+s+")) "+u+" = false; else {"}a+=" for (var "+x+" = 0; "+x+" < "+p+".length; "+x+"++) { "+u+" = "+c+"["+p+"["+x+"]] !== undefined ";if(S){a+=" && Object.prototype.hasOwnProperty.call("+c+", "+p+"["+x+"]) "}a+="; if (!"+u+") break; } ";if(h){a+=" } "}a+=" if (!"+u+") { ";var R=R||[];R.push(a);a="";if(e.createErrors!==false){a+=" { keyword: '"+"required"+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { missingProperty: '"+j+"' } ";if(e.opts.messages!==false){a+=" , message: '";if(e.opts._errorDataPathProperty){a+="is a required property"}else{a+="should have required property \\'"+j+"\\'"}a+="' "}if(e.opts.verbose){a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "}a+=" } "}else{a+=" {} "}var F=a;a=R.pop();if(!e.compositeRule&&f){if(e.async){a+=" throw new ValidationError(["+F+"]); "}else{a+=" validate.errors = ["+F+"]; return false; "}}else{a+=" var err = "+F+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}a+=" } else { "}else{a+=" if ( ";var D=v;if(D){var $,x=-1,A=D.length-1;while(x{"use strict";e.exports=function generate_uniqueItems(e,r,t){var a=" ";var s=e.level;var i=e.dataLevel;var o=e.schema[r];var n=e.schemaPath+e.util.getProperty(r);var l=e.errSchemaPath+"/"+r;var f=!e.opts.allErrors;var c="data"+(i||"");var u="valid"+s;var h=e.opts.$data&&o&&o.$data,d;if(h){a+=" var schema"+s+" = "+e.util.getData(o.$data,i,e.dataPathArr)+"; ";d="schema"+s}else{d=o}if((o||h)&&e.opts.uniqueItems!==false){if(h){a+=" var "+u+"; if ("+d+" === false || "+d+" === undefined) "+u+" = true; else if (typeof "+d+" != 'boolean') "+u+" = false; else { "}a+=" var i = "+c+".length , "+u+" = true , j; if (i > 1) { ";var p=e.schema.items&&e.schema.items.type,v=Array.isArray(p);if(!p||p=="object"||p=="array"||v&&(p.indexOf("object")>=0||p.indexOf("array")>=0)){a+=" outer: for (;i--;) { for (j = i; j--;) { if (equal("+c+"[i], "+c+"[j])) { "+u+" = false; break outer; } } } "}else{a+=" var itemIndices = {}, item; for (;i--;) { var item = "+c+"[i]; ";var m="checkDataType"+(v?"s":"");a+=" if ("+e.util[m](p,"item",e.opts.strictNumbers,true)+") continue; ";if(v){a+=" if (typeof item == 'string') item = '\"' + item; "}a+=" if (typeof itemIndices[item] == 'number') { "+u+" = false; j = itemIndices[item]; break; } itemIndices[item] = i; } "}a+=" } ";if(h){a+=" } "}a+=" if (!"+u+") { ";var y=y||[];y.push(a);a="";if(e.createErrors!==false){a+=" { keyword: '"+"uniqueItems"+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { i: i, j: j } ";if(e.opts.messages!==false){a+=" , message: 'should NOT have duplicate items (items ## ' + j + ' and ' + i + ' are identical)' "}if(e.opts.verbose){a+=" , schema: ";if(h){a+="validate.schema"+n}else{a+=""+o}a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "}a+=" } "}else{a+=" {} "}var g=a;a=y.pop();if(!e.compositeRule&&f){if(e.async){a+=" throw new ValidationError(["+g+"]); "}else{a+=" validate.errors = ["+g+"]; return false; "}}else{a+=" var err = "+g+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}a+=" } ";if(f){a+=" else { "}}else{if(f){a+=" if (true) { "}}return a}},7003:e=>{"use strict";e.exports=function generate_validate(e,r,t){var a="";var s=e.schema.$async===true,i=e.util.schemaHasRulesExcept(e.schema,e.RULES.all,"$ref"),o=e.self._getId(e.schema);if(e.opts.strictKeywords){var n=e.util.schemaUnknownRules(e.schema,e.RULES.keywords);if(n){var l="unknown keyword: "+n;if(e.opts.strictKeywords==="log")e.logger.warn(l);else throw new Error(l)}}if(e.isTop){a+=" var validate = ";if(s){e.async=true;a+="async "}a+="function(data, dataPath, parentData, parentDataProperty, rootData) { 'use strict'; ";if(o&&(e.opts.sourceCode||e.opts.processCode)){a+=" "+("/*# sourceURL="+o+" */")+" "}}if(typeof e.schema=="boolean"||!(i||e.schema.$ref)){var r="false schema";var f=e.level;var c=e.dataLevel;var u=e.schema[r];var h=e.schemaPath+e.util.getProperty(r);var d=e.errSchemaPath+"/"+r;var p=!e.opts.allErrors;var v;var m="data"+(c||"");var y="valid"+f;if(e.schema===false){if(e.isTop){p=true}else{a+=" var "+y+" = false; "}var g=g||[];g.push(a);a="";if(e.createErrors!==false){a+=" { keyword: '"+(v||"false schema")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(d)+" , params: {} ";if(e.opts.messages!==false){a+=" , message: 'boolean schema is false' "}if(e.opts.verbose){a+=" , schema: false , parentSchema: validate.schema"+e.schemaPath+" , data: "+m+" "}a+=" } "}else{a+=" {} "}var P=a;a=g.pop();if(!e.compositeRule&&p){if(e.async){a+=" throw new ValidationError(["+P+"]); "}else{a+=" validate.errors = ["+P+"]; return false; "}}else{a+=" var err = "+P+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}}else{if(e.isTop){if(s){a+=" return data; "}else{a+=" validate.errors = null; return true; "}}else{a+=" var "+y+" = true; "}}if(e.isTop){a+=" }; return validate; "}return a}if(e.isTop){var E=e.isTop,f=e.level=0,c=e.dataLevel=0,m="data";e.rootId=e.resolve.fullPath(e.self._getId(e.root.schema));e.baseId=e.baseId||e.rootId;delete e.isTop;e.dataPathArr=[""];if(e.schema.default!==undefined&&e.opts.useDefaults&&e.opts.strictDefaults){var b="default is ignored in the schema root";if(e.opts.strictDefaults==="log")e.logger.warn(b);else throw new Error(b)}a+=" var vErrors = null; ";a+=" var errors = 0; ";a+=" if (rootData === undefined) rootData = data; "}else{var f=e.level,c=e.dataLevel,m="data"+(c||"");if(o)e.baseId=e.resolve.url(e.baseId,o);if(s&&!e.async)throw new Error("async schema in sync schema");a+=" var errs_"+f+" = errors;"}var y="valid"+f,p=!e.opts.allErrors,w="",S="";var v;var x=e.schema.type,_=Array.isArray(x);if(x&&e.opts.nullable&&e.schema.nullable===true){if(_){if(x.indexOf("null")==-1)x=x.concat("null")}else if(x!="null"){x=[x,"null"];_=true}}if(_&&x.length==1){x=x[0];_=false}if(e.schema.$ref&&i){if(e.opts.extendRefs=="fail"){throw new Error('$ref: validation keywords used in schema at path "'+e.errSchemaPath+'" (see option extendRefs)')}else if(e.opts.extendRefs!==true){i=false;e.logger.warn('$ref: keywords ignored in schema at path "'+e.errSchemaPath+'"')}}if(e.schema.$comment&&e.opts.$comment){a+=" "+e.RULES.all.$comment.code(e,"$comment")}if(x){if(e.opts.coerceTypes){var j=e.util.coerceToTypes(e.opts.coerceTypes,x)}var R=e.RULES.types[x];if(j||_||R===true||R&&!$shouldUseGroup(R)){var h=e.schemaPath+".type",d=e.errSchemaPath+"/type";var h=e.schemaPath+".type",d=e.errSchemaPath+"/type",F=_?"checkDataTypes":"checkDataType";a+=" if ("+e.util[F](x,m,e.opts.strictNumbers,true)+") { ";if(j){var D="dataType"+f,$="coerced"+f;a+=" var "+D+" = typeof "+m+"; var "+$+" = undefined; ";if(e.opts.coerceTypes=="array"){a+=" if ("+D+" == 'object' && Array.isArray("+m+") && "+m+".length == 1) { "+m+" = "+m+"[0]; "+D+" = typeof "+m+"; if ("+e.util.checkDataType(e.schema.type,m,e.opts.strictNumbers)+") "+$+" = "+m+"; } "}a+=" if ("+$+" !== undefined) ; ";var A=j;if(A){var I,C=-1,O=A.length-1;while(C{"use strict";var a=/^[a-z_$][a-z0-9_$-]*$/i;var s=t(8029);var i=t(6686);e.exports={add:addKeyword,get:getKeyword,remove:removeKeyword,validate:validateKeyword};function addKeyword(e,r){var t=this.RULES;if(t.keywords[e])throw new Error("Keyword "+e+" is already defined");if(!a.test(e))throw new Error("Keyword "+e+" is not a valid identifier");if(r){this.validateKeyword(r,true);var i=r.type;if(Array.isArray(i)){for(var o=0;o{"use strict";e=t.nmd(e);const a=t(7147);const s=t(1017);const i=t(6113);const o=t(9491);const n=t(2361);const l=t(4512);const f=t(5940);const c=t(990);const u=t(5634);const h=t(6363);const d=t(6474);const plainObject=()=>Object.create(null);const p="aes-256-cbc";delete require.cache[__filename];const v=s.dirname(e.parent&&e.parent.filename||".");const checkValueType=(e,r)=>{const t=["undefined","symbol","function"];const a=typeof r;if(t.includes(a)){throw new TypeError(`Setting a value of type \`${a}\` for key \`${e}\` is not allowed as it's not supported by JSON`)}};class Conf{constructor(e){e={configName:"config",fileExtension:"json",projectSuffix:"nodejs",clearInvalidConfig:true,serialize:e=>JSON.stringify(e,null,"\t"),deserialize:JSON.parse,accessPropertiesByDotNotation:true,...e};if(!e.cwd){if(!e.projectName){const r=c.sync(v);e.projectName=r&&JSON.parse(a.readFileSync(r,"utf8")).name}if(!e.projectName){throw new Error("Project name could not be inferred. Please specify the `projectName` option.")}e.cwd=u(e.projectName,{suffix:e.projectSuffix}).config}this._options=e;if(e.schema){if(typeof e.schema!=="object"){throw new TypeError("The `schema` option must be an object.")}const r=new d({allErrors:true,format:"full",useDefaults:true,errorDataPath:"property"});const t={type:"object",properties:e.schema};this._validator=r.compile(t)}this.events=new n;this.encryptionKey=e.encryptionKey;this.serialize=e.serialize;this.deserialize=e.deserialize;const r=e.fileExtension?`.${e.fileExtension}`:"";this.path=s.resolve(e.cwd,`${e.configName}${r}`);const t=this.store;const i=Object.assign(plainObject(),e.defaults,t);this._validate(i);try{o.deepEqual(t,i)}catch(e){this.store=i}}_validate(e){if(!this._validator){return}const r=this._validator(e);if(!r){const e=this._validator.errors.reduce(((e,{dataPath:r,message:t})=>e+` \`${r.slice(1)}\` ${t};`),"");throw new Error("Config schema violation:"+e.slice(0,-1))}}get(e,r){if(this._options.accessPropertiesByDotNotation){return l.get(this.store,e,r)}return e in this.store?this.store[e]:r}set(e,r){if(typeof e!=="string"&&typeof e!=="object"){throw new TypeError(`Expected \`key\` to be of type \`string\` or \`object\`, got ${typeof e}`)}if(typeof e!=="object"&&r===undefined){throw new TypeError("Use `delete()` to clear values")}const{store:t}=this;const set=(e,r)=>{checkValueType(e,r);if(this._options.accessPropertiesByDotNotation){l.set(t,e,r)}else{t[e]=r}};if(typeof e==="object"){const r=e;for(const[e,t]of Object.entries(r)){set(e,t)}}else{set(e,r)}this.store=t}has(e){if(this._options.accessPropertiesByDotNotation){return l.has(this.store,e)}return e in this.store}delete(e){const{store:r}=this;if(this._options.accessPropertiesByDotNotation){l.delete(r,e)}else{delete r[e]}this.store=r}clear(){this.store=plainObject()}onDidChange(e,r){if(typeof e!=="string"){throw new TypeError(`Expected \`key\` to be of type \`string\`, got ${typeof e}`)}if(typeof r!=="function"){throw new TypeError(`Expected \`callback\` to be of type \`function\`, got ${typeof r}`)}const getter=()=>this.get(e);return this.handleChange(getter,r)}onDidAnyChange(e){if(typeof e!=="function"){throw new TypeError(`Expected \`callback\` to be of type \`function\`, got ${typeof e}`)}const getter=()=>this.store;return this.handleChange(getter,e)}handleChange(e,r){let t=e();const onChange=()=>{const a=t;const s=e();try{o.deepEqual(s,a)}catch(e){t=s;r.call(this,s,a)}};this.events.on("change",onChange);return()=>this.events.removeListener("change",onChange)}get size(){return Object.keys(this.store).length}get store(){try{let e=a.readFileSync(this.path,this.encryptionKey?null:"utf8");if(this.encryptionKey){try{if(e.slice(16,17).toString()===":"){const r=e.slice(0,16);const t=i.pbkdf2Sync(this.encryptionKey,r.toString(),1e4,32,"sha512");const a=i.createDecipheriv(p,t,r);e=Buffer.concat([a.update(e.slice(17)),a.final()])}else{const r=i.createDecipher(p,this.encryptionKey);e=Buffer.concat([r.update(e),r.final()])}}catch(e){}}e=this.deserialize(e);this._validate(e);return Object.assign(plainObject(),e)}catch(e){if(e.code==="ENOENT"){f.sync(s.dirname(this.path));return plainObject()}if(this._options.clearInvalidConfig&&e.name==="SyntaxError"){return plainObject()}throw e}}set store(e){f.sync(s.dirname(this.path));this._validate(e);let r=this.serialize(e);if(this.encryptionKey){const e=i.randomBytes(16);const t=i.pbkdf2Sync(this.encryptionKey,e.toString(),1e4,32,"sha512");const a=i.createCipheriv(p,t,e);r=Buffer.concat([e,Buffer.from(":"),a.update(Buffer.from(r)),a.final()])}h.sync(this.path,r);this.events.emit("change")}*[Symbol.iterator](){for(const[e,r]of Object.entries(this.store)){yield[e,r]}}}e.exports=Conf},4512:(e,r,t)=>{"use strict";const a=t(8683);const s=["__proto__","prototype","constructor"];const isValidPath=e=>!e.some((e=>s.includes(e)));function getPathSegments(e){const r=e.split(".");const t=[];for(let e=0;e{"use strict";const a=t(1017);const s=t(2037);const i=s.homedir();const o=s.tmpdir();const{env:n}=process;const macos=e=>{const r=a.join(i,"Library");return{data:a.join(r,"Application Support",e),config:a.join(r,"Preferences",e),cache:a.join(r,"Caches",e),log:a.join(r,"Logs",e),temp:a.join(o,e)}};const windows=e=>{const r=n.APPDATA||a.join(i,"AppData","Roaming");const t=n.LOCALAPPDATA||a.join(i,"AppData","Local");return{data:a.join(t,e,"Data"),config:a.join(r,e,"Config"),cache:a.join(t,e,"Cache"),log:a.join(t,e,"Log"),temp:a.join(o,e)}};const linux=e=>{const r=a.basename(i);return{data:a.join(n.XDG_DATA_HOME||a.join(i,".local","share"),e),config:a.join(n.XDG_CONFIG_HOME||a.join(i,".config"),e),cache:a.join(n.XDG_CACHE_HOME||a.join(i,".cache"),e),log:a.join(n.XDG_STATE_HOME||a.join(i,".local","state"),e),temp:a.join(o,r,e)}};const envPaths=(e,r)=>{if(typeof e!=="string"){throw new TypeError(`Expected string, got ${typeof e}`)}r=Object.assign({suffix:"nodejs"},r);if(r.suffix){e+=`-${r.suffix}`}if(process.platform==="darwin"){return macos(e)}if(process.platform==="win32"){return windows(e)}return linux(e)};e.exports=envPaths;e.exports["default"]=envPaths},1230:e=>{"use strict";e.exports=function equal(e,r){if(e===r)return true;if(e&&r&&typeof e=="object"&&typeof r=="object"){if(e.constructor!==r.constructor)return false;var t,a,s;if(Array.isArray(e)){t=e.length;if(t!=r.length)return false;for(a=t;a--!==0;)if(!equal(e[a],r[a]))return false;return true}if(e.constructor===RegExp)return e.source===r.source&&e.flags===r.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===r.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===r.toString();s=Object.keys(e);t=s.length;if(t!==Object.keys(r).length)return false;for(a=t;a--!==0;)if(!Object.prototype.hasOwnProperty.call(r,s[a]))return false;for(a=t;a--!==0;){var i=s[a];if(!equal(e[i],r[i]))return false}return true}return e!==e&&r!==r}},6424:e=>{"use strict";e.exports=function(e,r){if(!r)r={};if(typeof r==="function")r={cmp:r};var t=typeof r.cycles==="boolean"?r.cycles:false;var a=r.cmp&&function(e){return function(r){return function(t,a){var s={key:t,value:r[t]};var i={key:a,value:r[a]};return e(s,i)}}}(r.cmp);var s=[];return function stringify(e){if(e&&e.toJSON&&typeof e.toJSON==="function"){e=e.toJSON()}if(e===undefined)return;if(typeof e=="number")return isFinite(e)?""+e:"null";if(typeof e!=="object")return JSON.stringify(e);var r,i;if(Array.isArray(e)){i="[";for(r=0;r{ +/** + * @preserve + * JS Implementation of incremental MurmurHash3 (r150) (as of May 10, 2013) + * + * @author Jens Taylor + * @see http://github.com/homebrewing/brauhaus-diff + * @author Gary Court + * @see http://github.com/garycourt/murmurhash-js + * @author Austin Appleby + * @see http://sites.google.com/site/murmurhash/ + */ +(function(){var r;function MurmurHash3(e,t){var a=this instanceof MurmurHash3?this:r;a.reset(t);if(typeof e==="string"&&e.length>0){a.hash(e)}if(a!==this){return a}}MurmurHash3.prototype.hash=function(e){var r,t,a,s,i;i=e.length;this.len+=i;t=this.k1;a=0;switch(this.rem){case 0:t^=i>a?e.charCodeAt(a++)&65535:0;case 1:t^=i>a?(e.charCodeAt(a++)&65535)<<8:0;case 2:t^=i>a?(e.charCodeAt(a++)&65535)<<16:0;case 3:t^=i>a?(e.charCodeAt(a)&255)<<24:0;t^=i>a?(e.charCodeAt(a++)&65280)>>8:0}this.rem=i+this.rem&3;i-=this.rem;if(i>0){r=this.h1;while(1){t=t*11601+(t&65535)*3432906752&4294967295;t=t<<15|t>>>17;t=t*13715+(t&65535)*461832192&4294967295;r^=t;r=r<<13|r>>>19;r=r*5+3864292196&4294967295;if(a>=i){break}t=e.charCodeAt(a++)&65535^(e.charCodeAt(a++)&65535)<<8^(e.charCodeAt(a++)&65535)<<16;s=e.charCodeAt(a++);t^=(s&255)<<24^(s&65280)>>8}t=0;switch(this.rem){case 3:t^=(e.charCodeAt(a+2)&65535)<<16;case 2:t^=(e.charCodeAt(a+1)&65535)<<8;case 1:t^=e.charCodeAt(a)&65535}this.h1=r}this.k1=t;return this};MurmurHash3.prototype.result=function(){var e,r;e=this.k1;r=this.h1;if(e>0){e=e*11601+(e&65535)*3432906752&4294967295;e=e<<15|e>>>17;e=e*13715+(e&65535)*461832192&4294967295;r^=e}r^=this.len;r^=r>>>16;r=r*51819+(r&65535)*2246770688&4294967295;r^=r>>>13;r=r*44597+(r&65535)*3266445312&4294967295;r^=r>>>16;return r>>>0};MurmurHash3.prototype.reset=function(e){this.h1=typeof e==="number"?e:0;this.rem=this.k1=this.len=0;return this};r=new MurmurHash3;if(true){e.exports=MurmurHash3}else{}})()},8683:e=>{"use strict";e.exports=e=>{const r=typeof e;return e!==null&&(r==="object"||r==="function")}},9232:e=>{e.exports=isTypedArray;isTypedArray.strict=isStrictTypedArray;isTypedArray.loose=isLooseTypedArray;var r=Object.prototype.toString;var t={"[object Int8Array]":true,"[object Int16Array]":true,"[object Int32Array]":true,"[object Uint8Array]":true,"[object Uint8ClampedArray]":true,"[object Uint16Array]":true,"[object Uint32Array]":true,"[object Float32Array]":true,"[object Float64Array]":true};function isTypedArray(e){return isStrictTypedArray(e)||isLooseTypedArray(e)}function isStrictTypedArray(e){return e instanceof Int8Array||e instanceof Int16Array||e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray||e instanceof Uint16Array||e instanceof Uint32Array||e instanceof Float32Array||e instanceof Float64Array}function isLooseTypedArray(e){return t[r.call(e)]}},6042:e=>{"use strict";var r=e.exports=function(e,r,t){if(typeof r=="function"){t=r;r={}}t=r.cb||t;var a=typeof t=="function"?t:t.pre||function(){};var s=t.post||function(){};_traverse(r,a,s,e,"",e)};r.keywords={additionalItems:true,items:true,contains:true,additionalProperties:true,propertyNames:true,not:true};r.arrayKeywords={items:true,allOf:true,anyOf:true,oneOf:true};r.propsKeywords={definitions:true,properties:true,patternProperties:true,dependencies:true};r.skipKeywords={default:true,enum:true,const:true,required:true,maximum:true,minimum:true,exclusiveMaximum:true,exclusiveMinimum:true,multipleOf:true,maxLength:true,minLength:true,pattern:true,format:true,maxItems:true,minItems:true,uniqueItems:true,maxProperties:true,minProperties:true};function _traverse(e,t,a,s,i,o,n,l,f,c){if(s&&typeof s=="object"&&!Array.isArray(s)){t(s,i,o,n,l,f,c);for(var u in s){var h=s[u];if(Array.isArray(h)){if(u in r.arrayKeywords){for(var d=0;d{"use strict";const a=t(7147);const s=t(1017);const{promisify:i}=t(3837);const o=t(7849);const n=o.satisfies(process.version,">=10.12.0");const checkPath=e=>{if(process.platform==="win32"){const r=/[<>:"|?*]/.test(e.replace(s.parse(e).root,""));if(r){const r=new Error(`Path contains invalid characters: ${e}`);r.code="EINVAL";throw r}}};const processOptions=e=>{const r={mode:511,fs:a};return{...r,...e}};const permissionError=e=>{const r=new Error(`operation not permitted, mkdir '${e}'`);r.code="EPERM";r.errno=-4048;r.path=e;r.syscall="mkdir";return r};const makeDir=async(e,r)=>{checkPath(e);r=processOptions(r);const t=i(r.fs.mkdir);const o=i(r.fs.stat);if(n&&r.fs.mkdir===a.mkdir){const a=s.resolve(e);await t(a,{mode:r.mode,recursive:true});return a}const make=async e=>{try{await t(e,r.mode);return e}catch(r){if(r.code==="EPERM"){throw r}if(r.code==="ENOENT"){if(s.dirname(e)===e){throw permissionError(e)}if(r.message.includes("null bytes")){throw r}await make(s.dirname(e));return make(e)}try{const r=await o(e);if(!r.isDirectory()){throw new Error("The path is not a directory")}}catch(e){throw r}return e}};return make(s.resolve(e))};e.exports=makeDir;e.exports.sync=(e,r)=>{checkPath(e);r=processOptions(r);if(n&&r.fs.mkdirSync===a.mkdirSync){const t=s.resolve(e);a.mkdirSync(t,{mode:r.mode,recursive:true});return t}const make=e=>{try{r.fs.mkdirSync(e,r.mode)}catch(t){if(t.code==="EPERM"){throw t}if(t.code==="ENOENT"){if(s.dirname(e)===e){throw permissionError(e)}if(t.message.includes("null bytes")){throw t}make(s.dirname(e));return make(e)}try{if(!r.fs.statSync(e).isDirectory()){throw new Error("The path is not a directory")}}catch(e){throw t}}return e};return make(s.resolve(e))}},990:(e,r,t)=>{"use strict";const a=t(5055);e.exports=async({cwd:e}={})=>a("package.json",{cwd:e});e.exports.sync=({cwd:e}={})=>a.sync("package.json",{cwd:e})},7234:(e,r,t)=>{var a=global.process;const processOk=function(e){return e&&typeof e==="object"&&typeof e.removeListener==="function"&&typeof e.emit==="function"&&typeof e.reallyExit==="function"&&typeof e.listeners==="function"&&typeof e.kill==="function"&&typeof e.pid==="number"&&typeof e.on==="function"};if(!processOk(a)){e.exports=function(){return function(){}}}else{var s=t(9491);var i=t(8986);var o=/^win/i.test(a.platform);var n=t(2361);if(typeof n!=="function"){n=n.EventEmitter}var l;if(a.__signal_exit_emitter__){l=a.__signal_exit_emitter__}else{l=a.__signal_exit_emitter__=new n;l.count=0;l.emitted={}}if(!l.infinite){l.setMaxListeners(Infinity);l.infinite=true}e.exports=function(e,r){if(!processOk(global.process)){return function(){}}s.equal(typeof e,"function","a callback must be provided for exit handler");if(h===false){d()}var t="exit";if(r&&r.alwaysLast){t="afterexit"}var remove=function(){l.removeListener(t,e);if(l.listeners("exit").length===0&&l.listeners("afterexit").length===0){f()}};l.on(t,e);return remove};var f=function unload(){if(!h||!processOk(global.process)){return}h=false;i.forEach((function(e){try{a.removeListener(e,u[e])}catch(e){}}));a.emit=m;a.reallyExit=p;l.count-=1};e.exports.unload=f;var c=function emit(e,r,t){if(l.emitted[e]){return}l.emitted[e]=true;l.emit(e,r,t)};var u={};i.forEach((function(e){u[e]=function listener(){if(!processOk(global.process)){return}var r=a.listeners(e);if(r.length===l.count){f();c("exit",null,e);c("afterexit",null,e);if(o&&e==="SIGHUP"){e="SIGINT"}a.kill(a.pid,e)}}}));e.exports.signals=function(){return i};var h=false;var d=function load(){if(h||!processOk(global.process)){return}h=true;l.count+=1;i=i.filter((function(e){try{a.on(e,u[e]);return true}catch(e){return false}}));a.emit=y;a.reallyExit=v};e.exports.load=d;var p=a.reallyExit;var v=function processReallyExit(e){if(!processOk(global.process)){return}a.exitCode=e||0;c("exit",a.exitCode,null);c("afterexit",a.exitCode,null);p.call(a,a.exitCode)};var m=a.emit;var y=function processEmit(e,r){if(e==="exit"&&processOk(global.process)){if(r!==undefined){a.exitCode=r}var t=m.apply(this,arguments);c("exit",a.exitCode,null);c("afterexit",a.exitCode,null);return t}else{return m.apply(this,arguments)}}}},8986:e=>{e.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];if(process.platform!=="win32"){e.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT")}if(process.platform==="linux"){e.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")}},1449:(e,r,t)=>{var a=t(9232).strict;e.exports=function typedarrayToBuffer(e){if(a(e)){var r=Buffer.from(e.buffer);if(e.byteLength!==e.buffer.byteLength){r=r.slice(e.byteOffset,e.byteOffset+e.byteLength)}return r}else{return Buffer.from(e)}}},4856:function(e,r){ +/** @license URI.js v4.4.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */ +(function(e,t){true?t(r):0})(this,(function(e){"use strict";function merge(){for(var e=arguments.length,r=Array(e),t=0;t1){r[0]=r[0].slice(0,-1);var a=r.length-1;for(var s=1;s= 0x80 (not a basic code point)","invalid-input":"Invalid input"};var y=i-o;var g=Math.floor;var P=String.fromCharCode;function error$1(e){throw new RangeError(m[e])}function map(e,r){var t=[];var a=e.length;while(a--){t[a]=r(e[a])}return t}function mapDomain(e,r){var t=e.split("@");var a="";if(t.length>1){a=t[0]+"@";e=t[1]}e=e.replace(v,".");var s=e.split(".");var i=map(s,r).join(".");return a+i}function ucs2decode(e){var r=[];var t=0;var a=e.length;while(t=55296&&s<=56319&&t>1;e+=g(e/r);for(;e>y*n>>1;a+=i){e=g(e/y)}return g(a+(y+1)*e/(e+l))};var x=function decode(e){var r=[];var t=e.length;var a=0;var l=u;var f=c;var d=e.lastIndexOf(h);if(d<0){d=0}for(var p=0;p=128){error$1("not-basic")}r.push(e.charCodeAt(p))}for(var v=d>0?d+1:0;v=t){error$1("invalid-input")}var E=b(e.charCodeAt(v++));if(E>=i||E>g((s-a)/y)){error$1("overflow")}a+=E*y;var w=P<=f?o:P>=f+n?n:P-f;if(Eg(s/x)){error$1("overflow")}y*=x}var _=r.length+1;f=S(a-m,_,m==0);if(g(a/_)>s-l){error$1("overflow")}l+=g(a/_);a%=_;r.splice(a++,0,l)}return String.fromCodePoint.apply(String,r)};var _=function encode(e){var r=[];e=ucs2decode(e);var t=e.length;var a=u;var l=0;var f=c;var d=true;var p=false;var v=undefined;try{for(var m=e[Symbol.iterator](),y;!(d=(y=m.next()).done);d=true){var E=y.value;if(E<128){r.push(P(E))}}}catch(e){p=true;v=e}finally{try{if(!d&&m.return){m.return()}}finally{if(p){throw v}}}var b=r.length;var x=b;if(b){r.push(h)}while(x=a&&A<_){_=A}}}catch(e){R=true;F=e}finally{try{if(!j&&D.return){D.return()}}finally{if(R){throw F}}}var I=x+1;if(_-a>g((s-l)/I)){error$1("overflow")}l+=(_-a)*I;a=_;var C=true;var O=false;var k=undefined;try{for(var T=e[Symbol.iterator](),z;!(C=(z=T.next()).done);C=true){var L=z.value;if(Ls){error$1("overflow")}if(L==a){var N=l;for(var U=i;;U+=i){var q=U<=f?o:U>=f+n?n:U-f;if(N>6|192).toString(16).toUpperCase()+"%"+(r&63|128).toString(16).toUpperCase();else t="%"+(r>>12|224).toString(16).toUpperCase()+"%"+(r>>6&63|128).toString(16).toUpperCase()+"%"+(r&63|128).toString(16).toUpperCase();return t}function pctDecChars(e){var r="";var t=0;var a=e.length;while(t=194&&s<224){if(a-t>=6){var i=parseInt(e.substr(t+4,2),16);r+=String.fromCharCode((s&31)<<6|i&63)}else{r+=e.substr(t,6)}t+=6}else if(s>=224){if(a-t>=9){var o=parseInt(e.substr(t+4,2),16);var n=parseInt(e.substr(t+7,2),16);r+=String.fromCharCode((s&15)<<12|(o&63)<<6|n&63)}else{r+=e.substr(t,9)}t+=9}else{r+=e.substr(t,3);t+=3}}return r}function _normalizeComponentEncoding(e,r){function decodeUnreserved(e){var t=pctDecChars(e);return!t.match(r.UNRESERVED)?e:t}if(e.scheme)e.scheme=String(e.scheme).replace(r.PCT_ENCODED,decodeUnreserved).toLowerCase().replace(r.NOT_SCHEME,"");if(e.userinfo!==undefined)e.userinfo=String(e.userinfo).replace(r.PCT_ENCODED,decodeUnreserved).replace(r.NOT_USERINFO,pctEncChar).replace(r.PCT_ENCODED,toUpperCase);if(e.host!==undefined)e.host=String(e.host).replace(r.PCT_ENCODED,decodeUnreserved).toLowerCase().replace(r.NOT_HOST,pctEncChar).replace(r.PCT_ENCODED,toUpperCase);if(e.path!==undefined)e.path=String(e.path).replace(r.PCT_ENCODED,decodeUnreserved).replace(e.scheme?r.NOT_PATH:r.NOT_PATH_NOSCHEME,pctEncChar).replace(r.PCT_ENCODED,toUpperCase);if(e.query!==undefined)e.query=String(e.query).replace(r.PCT_ENCODED,decodeUnreserved).replace(r.NOT_QUERY,pctEncChar).replace(r.PCT_ENCODED,toUpperCase);if(e.fragment!==undefined)e.fragment=String(e.fragment).replace(r.PCT_ENCODED,decodeUnreserved).replace(r.NOT_FRAGMENT,pctEncChar).replace(r.PCT_ENCODED,toUpperCase);return e}function _stripLeadingZeros(e){return e.replace(/^0*(.*)/,"$1")||"0"}function _normalizeIPv4(e,r){var t=e.match(r.IPV4ADDRESS)||[];var s=a(t,2),i=s[1];if(i){return i.split(".").map(_stripLeadingZeros).join(".")}else{return e}}function _normalizeIPv6(e,r){var t=e.match(r.IPV6ADDRESS)||[];var s=a(t,3),i=s[1],o=s[2];if(i){var n=i.toLowerCase().split("::").reverse(),l=a(n,2),f=l[0],c=l[1];var u=c?c.split(":").map(_stripLeadingZeros):[];var h=f.split(":").map(_stripLeadingZeros);var d=r.IPV4ADDRESS.test(h[h.length-1]);var p=d?7:8;var v=h.length-p;var m=Array(p);for(var y=0;y1){var b=m.slice(0,P.index);var w=m.slice(P.index+P.length);E=b.join(":")+"::"+w.join(":")}else{E=m.join(":")}if(o){E+="%"+o}return E}else{return e}}var $=/^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i;var A="".match(/(){0}/)[1]===undefined;function parse(e){var a=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var s={};var i=a.iri!==false?t:r;if(a.reference==="suffix")e=(a.scheme?a.scheme+":":"")+"//"+e;var o=e.match($);if(o){if(A){s.scheme=o[1];s.userinfo=o[3];s.host=o[4];s.port=parseInt(o[5],10);s.path=o[6]||"";s.query=o[7];s.fragment=o[8];if(isNaN(s.port)){s.port=o[5]}}else{s.scheme=o[1]||undefined;s.userinfo=e.indexOf("@")!==-1?o[3]:undefined;s.host=e.indexOf("//")!==-1?o[4]:undefined;s.port=parseInt(o[5],10);s.path=o[6]||"";s.query=e.indexOf("?")!==-1?o[7]:undefined;s.fragment=e.indexOf("#")!==-1?o[8]:undefined;if(isNaN(s.port)){s.port=e.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?o[4]:undefined}}if(s.host){s.host=_normalizeIPv6(_normalizeIPv4(s.host,i),i)}if(s.scheme===undefined&&s.userinfo===undefined&&s.host===undefined&&s.port===undefined&&!s.path&&s.query===undefined){s.reference="same-document"}else if(s.scheme===undefined){s.reference="relative"}else if(s.fragment===undefined){s.reference="absolute"}else{s.reference="uri"}if(a.reference&&a.reference!=="suffix"&&a.reference!==s.reference){s.error=s.error||"URI is not a "+a.reference+" reference."}var n=D[(a.scheme||s.scheme||"").toLowerCase()];if(!a.unicodeSupport&&(!n||!n.unicodeSupport)){if(s.host&&(a.domainHost||n&&n.domainHost)){try{s.host=F.toASCII(s.host.replace(i.PCT_ENCODED,pctDecChars).toLowerCase())}catch(e){s.error=s.error||"Host's domain name can not be converted to ASCII via punycode: "+e}}_normalizeComponentEncoding(s,r)}else{_normalizeComponentEncoding(s,i)}if(n&&n.parse){n.parse(s,a)}}else{s.error=s.error||"URI can not be parsed."}return s}function _recomposeAuthority(e,a){var s=a.iri!==false?t:r;var i=[];if(e.userinfo!==undefined){i.push(e.userinfo);i.push("@")}if(e.host!==undefined){i.push(_normalizeIPv6(_normalizeIPv4(String(e.host),s),s).replace(s.IPV6ADDRESS,(function(e,r,t){return"["+r+(t?"%25"+t:"")+"]"})))}if(typeof e.port==="number"||typeof e.port==="string"){i.push(":");i.push(String(e.port))}return i.length?i.join(""):undefined}var I=/^\.\.?\//;var C=/^\/\.(\/|$)/;var O=/^\/\.\.(\/|$)/;var k=/^\/?(?:.|\n)*?(?=\/|$)/;function removeDotSegments(e){var r=[];while(e.length){if(e.match(I)){e=e.replace(I,"")}else if(e.match(C)){e=e.replace(C,"/")}else if(e.match(O)){e=e.replace(O,"/");r.pop()}else if(e==="."||e===".."){e=""}else{var t=e.match(k);if(t){var a=t[0];e=e.slice(a.length);r.push(a)}else{throw new Error("Unexpected dot segment condition")}}}return r.join("")}function serialize(e){var a=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var s=a.iri?t:r;var i=[];var o=D[(a.scheme||e.scheme||"").toLowerCase()];if(o&&o.serialize)o.serialize(e,a);if(e.host){if(s.IPV6ADDRESS.test(e.host)){}else if(a.domainHost||o&&o.domainHost){try{e.host=!a.iri?F.toASCII(e.host.replace(s.PCT_ENCODED,pctDecChars).toLowerCase()):F.toUnicode(e.host)}catch(r){e.error=e.error||"Host's domain name can not be converted to "+(!a.iri?"ASCII":"Unicode")+" via punycode: "+r}}}_normalizeComponentEncoding(e,s);if(a.reference!=="suffix"&&e.scheme){i.push(e.scheme);i.push(":")}var n=_recomposeAuthority(e,a);if(n!==undefined){if(a.reference!=="suffix"){i.push("//")}i.push(n);if(e.path&&e.path.charAt(0)!=="/"){i.push("/")}}if(e.path!==undefined){var l=e.path;if(!a.absolutePath&&(!o||!o.absolutePath)){l=removeDotSegments(l)}if(n===undefined){l=l.replace(/^\/\//,"/%2F")}i.push(l)}if(e.query!==undefined){i.push("?");i.push(e.query)}if(e.fragment!==undefined){i.push("#");i.push(e.fragment)}return i.join("")}function resolveComponents(e,r){var t=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};var a=arguments[3];var s={};if(!a){e=parse(serialize(e,t),t);r=parse(serialize(r,t),t)}t=t||{};if(!t.tolerant&&r.scheme){s.scheme=r.scheme;s.userinfo=r.userinfo;s.host=r.host;s.port=r.port;s.path=removeDotSegments(r.path||"");s.query=r.query}else{if(r.userinfo!==undefined||r.host!==undefined||r.port!==undefined){s.userinfo=r.userinfo;s.host=r.host;s.port=r.port;s.path=removeDotSegments(r.path||"");s.query=r.query}else{if(!r.path){s.path=e.path;if(r.query!==undefined){s.query=r.query}else{s.query=e.query}}else{if(r.path.charAt(0)==="/"){s.path=removeDotSegments(r.path)}else{if((e.userinfo!==undefined||e.host!==undefined||e.port!==undefined)&&!e.path){s.path="/"+r.path}else if(!e.path){s.path=r.path}else{s.path=e.path.slice(0,e.path.lastIndexOf("/")+1)+r.path}s.path=removeDotSegments(s.path)}s.query=r.query}s.userinfo=e.userinfo;s.host=e.host;s.port=e.port}s.scheme=e.scheme}s.fragment=r.fragment;return s}function resolve(e,r,t){var a=assign({scheme:"null"},t);return serialize(resolveComponents(parse(e,a),parse(r,a),a,true),a)}function normalize(e,r){if(typeof e==="string"){e=serialize(parse(e,r),r)}else if(typeOf(e)==="object"){e=parse(serialize(e,r),r)}return e}function equal(e,r,t){if(typeof e==="string"){e=serialize(parse(e,t),t)}else if(typeOf(e)==="object"){e=serialize(e,t)}if(typeof r==="string"){r=serialize(parse(r,t),t)}else if(typeOf(r)==="object"){r=serialize(r,t)}return e===r}function escapeComponent(e,a){return e&&e.toString().replace(!a||!a.iri?r.ESCAPE:t.ESCAPE,pctEncChar)}function unescapeComponent(e,a){return e&&e.toString().replace(!a||!a.iri?r.PCT_ENCODED:t.PCT_ENCODED,pctDecChars)}var T={scheme:"http",domainHost:true,parse:function parse(e,r){if(!e.host){e.error=e.error||"HTTP URIs must have a host."}return e},serialize:function serialize(e,r){var t=String(e.scheme).toLowerCase()==="https";if(e.port===(t?443:80)||e.port===""){e.port=undefined}if(!e.path){e.path="/"}return e}};var z={scheme:"https",domainHost:T.domainHost,parse:T.parse,serialize:T.serialize};function isSecure(e){return typeof e.secure==="boolean"?e.secure:String(e.scheme).toLowerCase()==="wss"}var L={scheme:"ws",domainHost:true,parse:function parse(e,r){var t=e;t.secure=isSecure(t);t.resourceName=(t.path||"/")+(t.query?"?"+t.query:"");t.path=undefined;t.query=undefined;return t},serialize:function serialize(e,r){if(e.port===(isSecure(e)?443:80)||e.port===""){e.port=undefined}if(typeof e.secure==="boolean"){e.scheme=e.secure?"wss":"ws";e.secure=undefined}if(e.resourceName){var t=e.resourceName.split("?"),s=a(t,2),i=s[0],o=s[1];e.path=i&&i!=="/"?i:undefined;e.query=o;e.resourceName=undefined}e.fragment=undefined;return e}};var N={scheme:"wss",domainHost:L.domainHost,parse:L.parse,serialize:L.serialize};var U={};var q=true;var V="[A-Za-z0-9\\-\\.\\_\\~"+(q?"\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF":"")+"]";var Q="[0-9A-Fa-f]";var M=subexp(subexp("%[EFef]"+Q+"%"+Q+Q+"%"+Q+Q)+"|"+subexp("%[89A-Fa-f]"+Q+"%"+Q+Q)+"|"+subexp("%"+Q+Q));var H="[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]";var K="[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]";var B=merge(K,'[\\"\\\\]');var J="[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]";var G=new RegExp(V,"g");var Z=new RegExp(M,"g");var X=new RegExp(merge("[^]",H,"[\\.]",'[\\"]',B),"g");var Y=new RegExp(merge("[^]",V,J),"g");var W=Y;function decodeUnreserved(e){var r=pctDecChars(e);return!r.match(G)?e:r}var ee={scheme:"mailto",parse:function parse$$1(e,r){var t=e;var a=t.to=t.path?t.path.split(","):[];t.path=undefined;if(t.query){var s=false;var i={};var o=t.query.split("&");for(var n=0,l=o.length;n{"use strict";e.exports=writeFile;e.exports.sync=writeFileSync;e.exports._getTmpname=getTmpname;e.exports._cleanupOnExit=cleanupOnExit;const a=t(7147);const s=t(2141);const i=t(7234);const o=t(1017);const n=t(9232);const l=t(1449);const{promisify:f}=t(3837);const c={};const u=function getId(){try{const e=t(1267);return e.threadId}catch(e){return 0}}();let h=0;function getTmpname(e){return e+"."+s(__filename).hash(String(process.pid)).hash(String(u)).hash(String(++h)).result()}function cleanupOnExit(e){return()=>{try{a.unlinkSync(typeof e==="function"?e():e)}catch(e){}}}function serializeActiveFile(e){return new Promise((r=>{if(!c[e])c[e]=[];c[e].push(r);if(c[e].length===1)r()}))}function isChownErrOk(e){if(e.code==="ENOSYS"){return true}const r=!process.getuid||process.getuid()!==0;if(r){if(e.code==="EINVAL"||e.code==="EPERM"){return true}}return false}async function writeFileAsync(e,r,t={}){if(typeof t==="string"){t={encoding:t}}let s;let u;const h=i(cleanupOnExit((()=>u)));const d=o.resolve(e);try{await serializeActiveFile(d);const i=await f(a.realpath)(e).catch((()=>e));u=getTmpname(i);if(!t.mode||!t.chown){const e=await f(a.stat)(i).catch((()=>{}));if(e){if(t.mode==null){t.mode=e.mode}if(t.chown==null&&process.getuid){t.chown={uid:e.uid,gid:e.gid}}}}s=await f(a.open)(u,"w",t.mode);if(t.tmpfileCreated){await t.tmpfileCreated(u)}if(n(r)){r=l(r)}if(Buffer.isBuffer(r)){await f(a.write)(s,r,0,r.length,0)}else if(r!=null){await f(a.write)(s,String(r),0,String(t.encoding||"utf8"))}if(t.fsync!==false){await f(a.fsync)(s)}await f(a.close)(s);s=null;if(t.chown){await f(a.chown)(u,t.chown.uid,t.chown.gid).catch((e=>{if(!isChownErrOk(e)){throw e}}))}if(t.mode){await f(a.chmod)(u,t.mode).catch((e=>{if(!isChownErrOk(e)){throw e}}))}await f(a.rename)(u,i)}finally{if(s){await f(a.close)(s).catch((()=>{}))}h();await f(a.unlink)(u).catch((()=>{}));c[d].shift();if(c[d].length>0){c[d][0]()}else delete c[d]}}function writeFile(e,r,t,a){if(t instanceof Function){a=t;t={}}const s=writeFileAsync(e,r,t);if(a){s.then(a,a)}return s}function writeFileSync(e,r,t){if(typeof t==="string")t={encoding:t};else if(!t)t={};try{e=a.realpathSync(e)}catch(e){}const s=getTmpname(e);if(!t.mode||!t.chown){try{const r=a.statSync(e);t=Object.assign({},t);if(!t.mode){t.mode=r.mode}if(!t.chown&&process.getuid){t.chown={uid:r.uid,gid:r.gid}}}catch(e){}}let o;const f=cleanupOnExit(s);const c=i(f);let u=true;try{o=a.openSync(s,"w",t.mode||438);if(t.tmpfileCreated){t.tmpfileCreated(s)}if(n(r)){r=l(r)}if(Buffer.isBuffer(r)){a.writeSync(o,r,0,r.length,0)}else if(r!=null){a.writeSync(o,String(r),0,String(t.encoding||"utf8"))}if(t.fsync!==false){a.fsyncSync(o)}a.closeSync(o);o=null;if(t.chown){try{a.chownSync(s,t.chown.uid,t.chown.gid)}catch(e){if(!isChownErrOk(e)){throw e}}}if(t.mode){try{a.chmodSync(s,t.mode)}catch(e){if(!isChownErrOk(e)){throw e}}}a.renameSync(s,e);u=false}finally{if(o){try{a.closeSync(o)}catch(e){}}c();if(u){f()}}}},9491:e=>{"use strict";e.exports=require("assert")},6113:e=>{"use strict";e.exports=require("crypto")},2361:e=>{"use strict";e.exports=require("events")},7147:e=>{"use strict";e.exports=require("fs")},5055:e=>{"use strict";e.exports=require("next/dist/compiled/find-up")},7849:e=>{"use strict";e.exports=require("next/dist/compiled/semver")},2037:e=>{"use strict";e.exports=require("os")},1017:e=>{"use strict";e.exports=require("path")},3837:e=>{"use strict";e.exports=require("util")},1267:e=>{"use strict";e.exports=require("worker_threads")},7664:e=>{"use strict";e.exports=JSON.parse('{"$schema":"http://json-schema.org/draft-07/schema#","$id":"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#","description":"Meta-schema for $data reference (JSON Schema extension proposal)","type":"object","required":["$data"],"properties":{"$data":{"type":"string","anyOf":[{"format":"relative-json-pointer"},{"format":"json-pointer"}]}},"additionalProperties":false}')},7136:e=>{"use strict";e.exports=JSON.parse('{"$schema":"http://json-schema.org/draft-07/schema#","$id":"http://json-schema.org/draft-07/schema#","title":"Core schema meta-schema","definitions":{"schemaArray":{"type":"array","minItems":1,"items":{"$ref":"#"}},"nonNegativeInteger":{"type":"integer","minimum":0},"nonNegativeIntegerDefault0":{"allOf":[{"$ref":"#/definitions/nonNegativeInteger"},{"default":0}]},"simpleTypes":{"enum":["array","boolean","integer","null","number","object","string"]},"stringArray":{"type":"array","items":{"type":"string"},"uniqueItems":true,"default":[]}},"type":["object","boolean"],"properties":{"$id":{"type":"string","format":"uri-reference"},"$schema":{"type":"string","format":"uri"},"$ref":{"type":"string","format":"uri-reference"},"$comment":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"default":true,"readOnly":{"type":"boolean","default":false},"examples":{"type":"array","items":true},"multipleOf":{"type":"number","exclusiveMinimum":0},"maximum":{"type":"number"},"exclusiveMaximum":{"type":"number"},"minimum":{"type":"number"},"exclusiveMinimum":{"type":"number"},"maxLength":{"$ref":"#/definitions/nonNegativeInteger"},"minLength":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"pattern":{"type":"string","format":"regex"},"additionalItems":{"$ref":"#"},"items":{"anyOf":[{"$ref":"#"},{"$ref":"#/definitions/schemaArray"}],"default":true},"maxItems":{"$ref":"#/definitions/nonNegativeInteger"},"minItems":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"uniqueItems":{"type":"boolean","default":false},"contains":{"$ref":"#"},"maxProperties":{"$ref":"#/definitions/nonNegativeInteger"},"minProperties":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"required":{"$ref":"#/definitions/stringArray"},"additionalProperties":{"$ref":"#"},"definitions":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"properties":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"patternProperties":{"type":"object","additionalProperties":{"$ref":"#"},"propertyNames":{"format":"regex"},"default":{}},"dependencies":{"type":"object","additionalProperties":{"anyOf":[{"$ref":"#"},{"$ref":"#/definitions/stringArray"}]}},"propertyNames":{"$ref":"#"},"const":true,"enum":{"type":"array","items":true,"minItems":1,"uniqueItems":true},"type":{"anyOf":[{"$ref":"#/definitions/simpleTypes"},{"type":"array","items":{"$ref":"#/definitions/simpleTypes"},"minItems":1,"uniqueItems":true}]},"format":{"type":"string"},"contentMediaType":{"type":"string"},"contentEncoding":{"type":"string"},"if":{"$ref":"#"},"then":{"$ref":"#"},"else":{"$ref":"#"},"allOf":{"$ref":"#/definitions/schemaArray"},"anyOf":{"$ref":"#/definitions/schemaArray"},"oneOf":{"$ref":"#/definitions/schemaArray"},"not":{"$ref":"#"}},"default":true}')}};var r={};function __nccwpck_require__(t){var a=r[t];if(a!==undefined){return a.exports}var s=r[t]={id:t,loaded:false,exports:{}};var i=true;try{e[t].call(s.exports,s,s.exports,__nccwpck_require__);i=false}finally{if(i)delete r[t]}s.loaded=true;return s.exports}(()=>{__nccwpck_require__.nmd=e=>{e.paths=[];if(!e.children)e.children=[];return e}})();if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var t=__nccwpck_require__(9041);module.exports=t})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/conf/package.json b/build/node_modules/next/dist/compiled/conf/package.json new file mode 100644 index 0000000..90b0da3 --- /dev/null +++ b/build/node_modules/next/dist/compiled/conf/package.json @@ -0,0 +1 @@ +{"name":"conf","main":"index.js","author":{"name":"Sindre Sorhus","email":"sindresorhus@gmail.com","url":"sindresorhus.com"},"license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/content-disposition/index.js b/build/node_modules/next/dist/compiled/content-disposition/index.js new file mode 100644 index 0000000..d290250 --- /dev/null +++ b/build/node_modules/next/dist/compiled/content-disposition/index.js @@ -0,0 +1,6 @@ +(()=>{var e={934:(e,r,t)=>{"use strict"; +/*! + * content-disposition + * Copyright(c) 2014-2017 Douglas Christopher Wilson + * MIT Licensed + */e.exports=contentDisposition;e.exports.parse=parse;var n=t(17).basename;var a=t(291).Buffer;var o=/[\x00-\x20"'()*,/:;<=>?@[\\\]{}\x7f]/g;var i=/%[0-9A-Fa-f]{2}/;var f=/%([0-9A-Fa-f]{2})/g;var u=/[^\x20-\x7e\xa0-\xff]/g;var s=/\\([\u0000-\u007f])/g;var p=/([\\"])/g;var l=/;[\x09\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*=[\x09\x20]*("(?:[\x20!\x23-\x5b\x5d-\x7e\x80-\xff]|\\[\x20-\x7e])*"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*/g;var c=/^[\x20-\x7e\x80-\xff]+$/;var v=/^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/;var d=/^([A-Za-z0-9!#$%&+\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/;var x=/^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*(?:$|;)/;function contentDisposition(e,r){var t=r||{};var n=t.type||"attachment";var a=createparams(e,t.fallback);return format(new ContentDisposition(n,a))}function createparams(e,r){if(e===undefined){return}var t={};if(typeof e!=="string"){throw new TypeError("filename must be a string")}if(r===undefined){r=true}if(typeof r!=="string"&&typeof r!=="boolean"){throw new TypeError("fallback must be a string or boolean")}if(typeof r==="string"&&u.test(r)){throw new TypeError("fallback must be ISO-8859-1 string")}var a=n(e);var o=c.test(a);var f=typeof r!=="string"?r&&getlatin1(a):n(r);var s=typeof f==="string"&&f!==a;if(s||!o||i.test(a)){t["filename*"]=a}if(o||s){t.filename=s?f:a}return t}function format(e){var r=e.parameters;var t=e.type;if(!t||typeof t!=="string"||!v.test(t)){throw new TypeError("invalid type")}var n=String(t).toLowerCase();if(r&&typeof r==="object"){var a;var o=Object.keys(r).sort();for(var i=0;i{var n=t(300);var a=n.Buffer;function copyProps(e,r){for(var t in e){r[t]=e[t]}}if(a.from&&a.alloc&&a.allocUnsafe&&a.allocUnsafeSlow){e.exports=n}else{copyProps(n,r);r.Buffer=SafeBuffer}function SafeBuffer(e,r,t){return a(e,r,t)}copyProps(a,SafeBuffer);SafeBuffer.from=function(e,r,t){if(typeof e==="number"){throw new TypeError("Argument must not be a number")}return a(e,r,t)};SafeBuffer.alloc=function(e,r,t){if(typeof e!=="number"){throw new TypeError("Argument must be a number")}var n=a(e);if(r!==undefined){if(typeof t==="string"){n.fill(r,t)}else{n.fill(r)}}else{n.fill(0)}return n};SafeBuffer.allocUnsafe=function(e){if(typeof e!=="number"){throw new TypeError("Argument must be a number")}return a(e)};SafeBuffer.allocUnsafeSlow=function(e){if(typeof e!=="number"){throw new TypeError("Argument must be a number")}return n.SlowBuffer(e)}},300:e=>{"use strict";e.exports=require("buffer")},17:e=>{"use strict";e.exports=require("path")}};var r={};function __nccwpck_require__(t){var n=r[t];if(n!==undefined){return n.exports}var a=r[t]={exports:{}};var o=true;try{e[t](a,a.exports,__nccwpck_require__);o=false}finally{if(o)delete r[t]}return a.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var t=__nccwpck_require__(934);module.exports=t})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/content-disposition/package.json b/build/node_modules/next/dist/compiled/content-disposition/package.json new file mode 100644 index 0000000..f5c3c0e --- /dev/null +++ b/build/node_modules/next/dist/compiled/content-disposition/package.json @@ -0,0 +1 @@ +{"name":"content-disposition","main":"index.js","author":"Douglas Christopher Wilson ","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/cookie/index.js b/build/node_modules/next/dist/compiled/cookie/index.js new file mode 100644 index 0000000..5641967 --- /dev/null +++ b/build/node_modules/next/dist/compiled/cookie/index.js @@ -0,0 +1,7 @@ +(()=>{"use strict";if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var e={};(()=>{var r=e; +/*! + * cookie + * Copyright(c) 2012-2014 Roman Shtylman + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */r.parse=parse;r.serialize=serialize;var i=decodeURIComponent;var t=encodeURIComponent;var a=/; */;var n=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/;function parse(e,r){if(typeof e!=="string"){throw new TypeError("argument str must be a string")}var t={};var n=r||{};var o=e.split(a);var s=n.decode||i;for(var p=0;p","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/cross-spawn/index.js b/build/node_modules/next/dist/compiled/cross-spawn/index.js new file mode 100644 index 0000000..1b2826b --- /dev/null +++ b/build/node_modules/next/dist/compiled/cross-spawn/index.js @@ -0,0 +1 @@ +(()=>{var e={488:(e,t,n)=>{"use strict";const r=n(81);const s=n(423);const o=n(449);function spawn(e,t,n){const c=s(e,t,n);const i=r.spawn(c.command,c.args,c.options);o.hookChildProcess(i,c);return i}function spawnSync(e,t,n){const c=s(e,t,n);const i=r.spawnSync(c.command,c.args,c.options);i.error=i.error||o.verifyENOENTSync(i.status,c);return i}e.exports=spawn;e.exports.spawn=spawn;e.exports.sync=spawnSync;e.exports._parse=s;e.exports._enoent=o},449:e=>{"use strict";const t=process.platform==="win32";function notFoundError(e,t){return Object.assign(new Error(`${t} ${e.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${t} ${e.command}`,path:e.command,spawnargs:e.args})}function hookChildProcess(e,n){if(!t){return}const r=e.emit;e.emit=function(t,s){if(t==="exit"){const t=verifyENOENT(s,n,"spawn");if(t){return r.call(e,"error",t)}}return r.apply(e,arguments)}}function verifyENOENT(e,n){if(t&&e===1&&!n.file){return notFoundError(n.original,"spawn")}return null}function verifyENOENTSync(e,n){if(t&&e===1&&!n.file){return notFoundError(n.original,"spawnSync")}return null}e.exports={hookChildProcess:hookChildProcess,verifyENOENT:verifyENOENT,verifyENOENTSync:verifyENOENTSync,notFoundError:notFoundError}},423:(e,t,n)=>{"use strict";const r=n(17);const s=n(907);const o=n(268);const c=n(408);const i=process.platform==="win32";const a=/\.(?:com|exe)$/i;const u=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function detectShebang(e){e.file=s(e);const t=e.file&&c(e.file);if(t){e.args.unshift(e.file);e.command=t;return s(e)}return e.file}function parseNonShell(e){if(!i){return e}const t=detectShebang(e);const n=!a.test(t);if(e.options.forceShell||n){const n=u.test(t);e.command=r.normalize(e.command);e.command=o.command(e.command);e.args=e.args.map((e=>o.argument(e,n)));const s=[e.command].concat(e.args).join(" ");e.args=["/d","/s","/c",`"${s}"`];e.command=process.env.comspec||"cmd.exe";e.options.windowsVerbatimArguments=true}return e}function parse(e,t,n){if(t&&!Array.isArray(t)){n=t;t=null}t=t?t.slice(0):[];n=Object.assign({},n);const r={command:e,args:t,options:n,file:undefined,original:{command:e,args:t}};return n.shell?r:parseNonShell(r)}e.exports=parse},268:e=>{"use strict";const t=/([()\][%!^"`<>&|;, *?])/g;function escapeCommand(e){e=e.replace(t,"^$1");return e}function escapeArgument(e,n){e=`${e}`;e=e.replace(/(\\*)"/g,'$1$1\\"');e=e.replace(/(\\*)$/,"$1$1");e=`"${e}"`;e=e.replace(t,"^$1");if(n){e=e.replace(t,"^$1")}return e}e.exports.command=escapeCommand;e.exports.argument=escapeArgument},408:(e,t,n)=>{"use strict";const r=n(147);const s=n(530);function readShebang(e){const t=150;const n=Buffer.alloc(t);let o;try{o=r.openSync(e,"r");r.readSync(o,n,0,t,0);r.closeSync(o)}catch(e){}return s(n.toString())}e.exports=readShebang},907:(e,t,n)=>{"use strict";const r=n(17);const s=n(200);const o=n(799);function resolveCommandAttempt(e,t){const n=e.options.env||process.env;const c=process.cwd();const i=e.options.cwd!=null;const a=i&&process.chdir!==undefined&&!process.chdir.disabled;if(a){try{process.chdir(e.options.cwd)}catch(e){}}let u;try{u=s.sync(e.command,{path:n[o({env:n})],pathExt:t?r.delimiter:undefined})}catch(e){}finally{if(a){process.chdir(c)}}if(u){u=r.resolve(i?e.options.cwd:"",u)}return u}function resolveCommand(e){return resolveCommandAttempt(e)||resolveCommandAttempt(e,true)}e.exports=resolveCommand},745:(e,t,n)=>{var r=n(147);var s;if(process.platform==="win32"||global.TESTING_WINDOWS){s=n(554)}else{s=n(138)}e.exports=isexe;isexe.sync=sync;function isexe(e,t,n){if(typeof t==="function"){n=t;t={}}if(!n){if(typeof Promise!=="function"){throw new TypeError("callback not provided")}return new Promise((function(n,r){isexe(e,t||{},(function(e,t){if(e){r(e)}else{n(t)}}))}))}s(e,t||{},(function(e,r){if(e){if(e.code==="EACCES"||t&&t.ignoreErrors){e=null;r=false}}n(e,r)}))}function sync(e,t){try{return s.sync(e,t||{})}catch(e){if(t&&t.ignoreErrors||e.code==="EACCES"){return false}else{throw e}}}},138:(e,t,n)=>{e.exports=isexe;isexe.sync=sync;var r=n(147);function isexe(e,t,n){r.stat(e,(function(e,r){n(e,e?false:checkStat(r,t))}))}function sync(e,t){return checkStat(r.statSync(e),t)}function checkStat(e,t){return e.isFile()&&checkMode(e,t)}function checkMode(e,t){var n=e.mode;var r=e.uid;var s=e.gid;var o=t.uid!==undefined?t.uid:process.getuid&&process.getuid();var c=t.gid!==undefined?t.gid:process.getgid&&process.getgid();var i=parseInt("100",8);var a=parseInt("010",8);var u=parseInt("001",8);var p=i|a;var f=n&u||n&a&&s===c||n&i&&r===o||n&p&&o===0;return f}},554:(e,t,n)=>{e.exports=isexe;isexe.sync=sync;var r=n(147);function checkPathExt(e,t){var n=t.pathExt!==undefined?t.pathExt:process.env.PATHEXT;if(!n){return true}n=n.split(";");if(n.indexOf("")!==-1){return true}for(var r=0;r{"use strict";const pathKey=(e={})=>{const t=e.env||process.env;const n=e.platform||process.platform;if(n!=="win32"){return"PATH"}return Object.keys(t).reverse().find((e=>e.toUpperCase()==="PATH"))||"Path"};e.exports=pathKey;e.exports["default"]=pathKey},530:(e,t,n)=>{"use strict";const r=n(401);e.exports=(e="")=>{const t=e.match(r);if(!t){return null}const[n,s]=t[0].replace(/#! ?/,"").split(" ");const o=n.split("/").pop();if(o==="env"){return s}return s?`${o} ${s}`:o}},401:e=>{"use strict";e.exports=/^#!(.*)/},200:(e,t,n)=>{const r=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys";const s=n(17);const o=r?";":":";const c=n(745);const getNotFoundError=e=>Object.assign(new Error(`not found: ${e}`),{code:"ENOENT"});const getPathInfo=(e,t)=>{const n=t.colon||o;const s=e.match(/\//)||r&&e.match(/\\/)?[""]:[...r?[process.cwd()]:[],...(t.path||process.env.PATH||"").split(n)];const c=r?t.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"";const i=r?c.split(n):[""];if(r){if(e.indexOf(".")!==-1&&i[0]!=="")i.unshift("")}return{pathEnv:s,pathExt:i,pathExtExe:c}};const which=(e,t,n)=>{if(typeof t==="function"){n=t;t={}}if(!t)t={};const{pathEnv:r,pathExt:o,pathExtExe:i}=getPathInfo(e,t);const a=[];const step=n=>new Promise(((o,c)=>{if(n===r.length)return t.all&&a.length?o(a):c(getNotFoundError(e));const i=r[n];const u=/^".*"$/.test(i)?i.slice(1,-1):i;const p=s.join(u,e);const f=!u&&/^\.[\\\/]/.test(e)?e.slice(0,2)+p:p;o(subStep(f,n,0))}));const subStep=(e,n,r)=>new Promise(((s,u)=>{if(r===o.length)return s(step(n+1));const p=o[r];c(e+p,{pathExt:i},((o,c)=>{if(!o&&c){if(t.all)a.push(e+p);else return s(e+p)}return s(subStep(e,n,r+1))}))}));return n?step(0).then((e=>n(null,e)),n):step(0)};const whichSync=(e,t)=>{t=t||{};const{pathEnv:n,pathExt:r,pathExtExe:o}=getPathInfo(e,t);const i=[];for(let a=0;a{"use strict";e.exports=require("child_process")},147:e=>{"use strict";e.exports=require("fs")},17:e=>{"use strict";e.exports=require("path")}};var t={};function __nccwpck_require__(n){var r=t[n];if(r!==undefined){return r.exports}var s=t[n]={exports:{}};var o=true;try{e[n](s,s.exports,__nccwpck_require__);o=false}finally{if(o)delete t[n]}return s.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var n=__nccwpck_require__(488);module.exports=n})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/cross-spawn/package.json b/build/node_modules/next/dist/compiled/cross-spawn/package.json new file mode 100644 index 0000000..c461cdd --- /dev/null +++ b/build/node_modules/next/dist/compiled/cross-spawn/package.json @@ -0,0 +1 @@ +{"name":"cross-spawn","main":"index.js","author":"André Cruz ","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/debug/index.js b/build/node_modules/next/dist/compiled/debug/index.js new file mode 100644 index 0000000..819ef0a --- /dev/null +++ b/build/node_modules/next/dist/compiled/debug/index.js @@ -0,0 +1 @@ +(()=>{var e={237:(e,t,r)=>{t.log=log;t.formatArgs=formatArgs;t.save=save;t.load=load;t.useColors=useColors;t.storage=localstorage();t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function useColors(){if(typeof window!=="undefined"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)){return true}if(typeof navigator!=="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)){return false}return typeof document!=="undefined"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window!=="undefined"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator!=="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator!=="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function formatArgs(t){t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff);if(!this.useColors){return}const r="color: "+this.color;t.splice(1,0,r,"color: inherit");let s=0;let n=0;t[0].replace(/%[a-zA-Z%]/g,(e=>{if(e==="%%"){return}s++;if(e==="%c"){n=s}}));t.splice(n,0,r)}function log(...e){return typeof console==="object"&&console.log&&console.log(...e)}function save(e){try{if(e){t.storage.setItem("debug",e)}else{t.storage.removeItem("debug")}}catch(e){}}function load(){let e;try{e=t.storage.getItem("debug")}catch(e){}if(!e&&typeof process!=="undefined"&&"env"in process){e=process.env.DEBUG}return e}function localstorage(){try{return localStorage}catch(e){}}e.exports=r(573)(t);const{formatters:s}=e.exports;s.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}},573:(e,t,r)=>{function setup(e){createDebug.debug=createDebug;createDebug.default=createDebug;createDebug.coerce=coerce;createDebug.disable=disable;createDebug.enable=enable;createDebug.enabled=enabled;createDebug.humanize=r(958);Object.keys(e).forEach((t=>{createDebug[t]=e[t]}));createDebug.instances=[];createDebug.names=[];createDebug.skips=[];createDebug.formatters={};function selectColor(e){let t=0;for(let r=0;r{if(t==="%%"){return t}o++;const n=createDebug.formatters[s];if(typeof n==="function"){const s=e[o];t=n.call(r,s);e.splice(o,1);o--}return t}));createDebug.formatArgs.call(r,e);const c=r.log||createDebug.log;c.apply(r,e)}debug.namespace=e;debug.enabled=createDebug.enabled(e);debug.useColors=createDebug.useColors();debug.color=selectColor(e);debug.destroy=destroy;debug.extend=extend;if(typeof createDebug.init==="function"){createDebug.init(debug)}createDebug.instances.push(debug);return debug}function destroy(){const e=createDebug.instances.indexOf(this);if(e!==-1){createDebug.instances.splice(e,1);return true}return false}function extend(e,t){const r=createDebug(this.namespace+(typeof t==="undefined"?":":t)+e);r.log=this.log;return r}function enable(e){createDebug.save(e);createDebug.names=[];createDebug.skips=[];let t;const r=(typeof e==="string"?e:"").split(/[\s,]+/);const s=r.length;for(t=0;t"-"+e))].join(",");createDebug.enable("");return e}function enabled(e){if(e[e.length-1]==="*"){return true}let t;let r;for(t=0,r=createDebug.skips.length;t{if(typeof process==="undefined"||process.type==="renderer"||process.browser===true||process.__nwjs){e.exports=r(237)}else{e.exports=r(354)}},354:(e,t,r)=>{const s=r(224);const n=r(837);t.init=init;t.log=log;t.formatArgs=formatArgs;t.save=save;t.load=load;t.useColors=useColors;t.colors=[6,2,3,4,5,1];try{const e=r(178);if(e&&(e.stderr||e).level>=2){t.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221]}}catch(e){}t.inspectOpts=Object.keys(process.env).filter((e=>/^debug_/i.test(e))).reduce(((e,t)=>{const r=t.substring(6).toLowerCase().replace(/_([a-z])/g,((e,t)=>t.toUpperCase()));let s=process.env[t];if(/^(yes|on|true|enabled)$/i.test(s)){s=true}else if(/^(no|off|false|disabled)$/i.test(s)){s=false}else if(s==="null"){s=null}else{s=Number(s)}e[r]=s;return e}),{});function useColors(){return"colors"in t.inspectOpts?Boolean(t.inspectOpts.colors):s.isatty(process.stderr.fd)}function formatArgs(t){const{namespace:r,useColors:s}=this;if(s){const s=this.color;const n="[3"+(s<8?s:"8;5;"+s);const o=` ${n};1m${r} `;t[0]=o+t[0].split("\n").join("\n"+o);t.push(n+"m+"+e.exports.humanize(this.diff)+"")}else{t[0]=getDate()+r+" "+t[0]}}function getDate(){if(t.inspectOpts.hideDate){return""}return(new Date).toISOString()+" "}function log(...e){return process.stderr.write(n.format(...e)+"\n")}function save(e){if(e){process.env.DEBUG=e}else{delete process.env.DEBUG}}function load(){return process.env.DEBUG}function init(e){e.inspectOpts={};const r=Object.keys(t.inspectOpts);for(let s=0;s{"use strict";e.exports=(e,t=process.argv)=>{const r=e.startsWith("-")?"":e.length===1?"-":"--";const s=t.indexOf(r+e);const n=t.indexOf("--");return s!==-1&&(n===-1||s{var t=1e3;var r=t*60;var s=r*60;var n=s*24;var o=n*7;var c=n*365.25;e.exports=function(e,t){t=t||{};var r=typeof e;if(r==="string"&&e.length>0){return parse(e)}else if(r==="number"&&isFinite(e)){return t.long?fmtLong(e):fmtShort(e)}throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))};function parse(e){e=String(e);if(e.length>100){return}var a=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(!a){return}var u=parseFloat(a[1]);var i=(a[2]||"ms").toLowerCase();switch(i){case"years":case"year":case"yrs":case"yr":case"y":return u*c;case"weeks":case"week":case"w":return u*o;case"days":case"day":case"d":return u*n;case"hours":case"hour":case"hrs":case"hr":case"h":return u*s;case"minutes":case"minute":case"mins":case"min":case"m":return u*r;case"seconds":case"second":case"secs":case"sec":case"s":return u*t;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return u;default:return undefined}}function fmtShort(e){var o=Math.abs(e);if(o>=n){return Math.round(e/n)+"d"}if(o>=s){return Math.round(e/s)+"h"}if(o>=r){return Math.round(e/r)+"m"}if(o>=t){return Math.round(e/t)+"s"}return e+"ms"}function fmtLong(e){var o=Math.abs(e);if(o>=n){return plural(e,o,n,"day")}if(o>=s){return plural(e,o,s,"hour")}if(o>=r){return plural(e,o,r,"minute")}if(o>=t){return plural(e,o,t,"second")}return e+" ms"}function plural(e,t,r,s){var n=t>=r*1.5;return Math.round(e/r)+" "+s+(n?"s":"")}},178:(e,t,r)=>{"use strict";const s=r(37);const n=r(224);const o=r(914);const{env:c}=process;let a;if(o("no-color")||o("no-colors")||o("color=false")||o("color=never")){a=0}else if(o("color")||o("colors")||o("color=true")||o("color=always")){a=1}function envForceColor(){if("FORCE_COLOR"in c){if(c.FORCE_COLOR==="true"){return 1}if(c.FORCE_COLOR==="false"){return 0}return c.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(c.FORCE_COLOR,10),3)}}function translateLevel(e){if(e===0){return false}return{level:e,hasBasic:true,has256:e>=2,has16m:e>=3}}function supportsColor(e,{streamIsTTY:t,sniffFlags:r=true}={}){const n=envForceColor();if(n!==undefined){a=n}const u=r?a:n;if(u===0){return 0}if(r){if(o("color=16m")||o("color=full")||o("color=truecolor")){return 3}if(o("color=256")){return 2}}if(e&&!t&&u===undefined){return 0}const i=u||0;if(c.TERM==="dumb"){return i}if(process.platform==="win32"){const e=s.release().split(".");if(Number(e[0])>=10&&Number(e[2])>=10586){return Number(e[2])>=14931?3:2}return 1}if("CI"in c){if(["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE","DRONE"].some((e=>e in c))||c.CI_NAME==="codeship"){return 1}return i}if("TEAMCITY_VERSION"in c){return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(c.TEAMCITY_VERSION)?1:0}if(c.COLORTERM==="truecolor"){return 3}if("TERM_PROGRAM"in c){const e=Number.parseInt((c.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(c.TERM_PROGRAM){case"iTerm.app":return e>=3?3:2;case"Apple_Terminal":return 2}}if(/-256(color)?$/i.test(c.TERM)){return 2}if(/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(c.TERM)){return 1}if("COLORTERM"in c){return 1}return i}function getSupportLevel(e,t={}){const r=supportsColor(e,{streamIsTTY:e&&e.isTTY,...t});return translateLevel(r)}e.exports={supportsColor:getSupportLevel,stdout:getSupportLevel({isTTY:n.isatty(1)}),stderr:getSupportLevel({isTTY:n.isatty(2)})}},37:e=>{"use strict";e.exports=require("os")},224:e=>{"use strict";e.exports=require("tty")},837:e=>{"use strict";e.exports=require("util")}};var t={};function __nccwpck_require__(r){var s=t[r];if(s!==undefined){return s.exports}var n=t[r]={exports:{}};var o=true;try{e[r](n,n.exports,__nccwpck_require__);o=false}finally{if(o)delete t[r]}return n.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var r=__nccwpck_require__(792);module.exports=r})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/debug/package.json b/build/node_modules/next/dist/compiled/debug/package.json new file mode 100644 index 0000000..aee1f59 --- /dev/null +++ b/build/node_modules/next/dist/compiled/debug/package.json @@ -0,0 +1 @@ +{"name":"debug","main":"index.js","author":"TJ Holowaychuk ","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/edge-runtime/index.js b/build/node_modules/next/dist/compiled/edge-runtime/index.js new file mode 100644 index 0000000..1fc5064 --- /dev/null +++ b/build/node_modules/next/dist/compiled/edge-runtime/index.js @@ -0,0 +1 @@ +(()=>{var __webpack_modules__={462:e=>{e.exports='"use strict";var c=Object.defineProperty,f=Object.getOwnPropertyDescriptor,y=Object.getOwnPropertyNames,S=Object.prototype.hasOwnProperty,a=(r,t)=>c(r,"name",{value:t,configurable:!0}),m=(r,t)=>{for(var e in t)c(r,e,{get:t[e],enumerable:!0})},w=(r,t,e,p)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of y(t))!S.call(r,n)&&n!==e&&c(r,n,{get:()=>t[n],enumerable:!(p=f(t,n))||p.enumerable});return r},E=r=>w(c({},"__esModule",{value:!0}),r),_={};m(_,{AbortController:()=>x,AbortSignal:()=>O,DOMException:()=>u});module.exports=E(_);var v=Symbol("kSignal"),i=Symbol("kAborted"),s=Symbol("kReason"),g=Symbol("kName"),o=Symbol("kOnabort"),h=class extends Error{constructor(t,e){super(t),this[g]=e}get name(){return this[g]}};a(h,"DOMException");var u=h;function b(){let r=new EventTarget;return Object.setPrototypeOf(r,O.prototype),r[i]=!1,r[s]=void 0,r[o]=void 0,r}a(b,"createAbortSignal");function l(r,t){typeof t>"u"&&(t=new u("This operation was aborted","AbortError")),!r.aborted&&(r[s]=t,r[i]=!0,r.dispatchEvent(new Event("abort")))}a(l,"abortSignalAbort");var d=class{constructor(){this[v]=b()}get signal(){return this[v]}abort(t){l(this.signal,t)}};a(d,"AbortController");var x=d,A=class extends EventTarget{constructor(){throw new TypeError("Illegal constructor")}get aborted(){return this[i]}get reason(){return this[s]}get onabort(){return this[o]}set onabort(t){this[o]&&this.removeEventListener("abort",this[o]),t&&(this[o]=t,this.addEventListener("abort",this[o]))}throwIfAborted(){if(this[i])throw this[s]}static abort(t){let e=b();return l(e,t),e}static timeout(t){let e=b();return setTimeout(()=>{l(e,new u("The operation was aborted due to timeout","TimeoutError"))},t),e}};a(A,"AbortSignal");var O=A;\n'},435:e=>{e.exports='"use strict";var Gr=Object.create,E=Object.defineProperty,Rr=Object.getOwnPropertyDescriptor,T=Object.getOwnPropertyNames,kr=Object.getPrototypeOf,Mr=Object.prototype.hasOwnProperty,a=(f,y)=>E(f,"name",{value:y,configurable:!0}),xr=(f,y)=>function(){return f&&(y=(0,f[T(f)[0]])(f=0)),y},Cr=(f,y)=>function(){return y||(0,f[T(f)[0]])((y={exports:{}}).exports,y),y.exports},Lr=(f,y)=>{for(var d in y)E(f,d,{get:y[d],enumerable:!0})},ir=(f,y,d,I)=>{if(y&&typeof y=="object"||typeof y=="function")for(let j of T(y))!Mr.call(f,j)&&j!==d&&E(f,j,{get:()=>y[j],enumerable:!(I=Rr(y,j))||I.enumerable});return f},vr=(f,y,d)=>(d=f!=null?Gr(kr(f)):{},ir(y||!f||!f.__esModule?E(d,"default",{value:f,enumerable:!0}):d,f)),Tr=f=>ir(E({},"__esModule",{value:!0}),f),cr=xr({""(){}}),Br=Cr({"../format/dist/index.js"(f,y){"use strict";cr();var d=Object.defineProperty,I=Object.getOwnPropertyDescriptor,j=Object.getOwnPropertyNames,ar=Object.prototype.hasOwnProperty,fr=a((r,s)=>{for(var i in s)d(r,i,{get:s[i],enumerable:!0})},"__export"),pr=a((r,s,i,l)=>{if(s&&typeof s=="object"||typeof s=="function")for(let u of j(s))!ar.call(r,u)&&u!==i&&d(r,u,{get:()=>s[u],enumerable:!(l=I(s,u))||l.enumerable});return r},"__copyProps"),lr=a(r=>pr(d({},"__esModule",{value:!0}),r),"__toCommonJS"),B={};fr(B,{createFormat:()=>J}),y.exports=lr(B);var yr=Reflect.getOwnPropertyDescriptor;function N(r,s){let i=yr(r,s);return i?i.get:void 0}a(N,"GetOwnGetter");var gr=Reflect.getPrototypeOf,ur=gr(Uint8Array),br=Array.prototype.filter,D=Array.prototype.push,mr=Date.prototype.getTime,dr=Date.prototype.toISOString,Sr=Object.getOwnPropertyDescriptors,F=Object.getOwnPropertyNames,Or=Object.getOwnPropertySymbols,_r=Object.keys,hr=Object.prototype.propertyIsEnumerable,jr=Object.prototype.toString,Pr=N(Map.prototype,"size"),wr=N(Set.prototype,"size"),Ar=String.prototype.includes,$r=Symbol.iterator,Er=Symbol.prototype.toString,Ir=N(ur.prototype,"length"),Nr=new Set(["[object BigInt64Array]","[object BigUint64Array]","[object Float32Array]","[object Float64Array]","[object Int8Array]","[object Int16Array]","[object Int32Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Uint16Array]","[object Uint32Array]"]);function R(r,s){let i=Array.isArray(r)||z(r)?new Set([...r.keys()].map(l=>l.toString())):void 0;return Object.entries(Sr(r)).filter(([l,u])=>!(i&&i.has(l)||s===1&&!u.enumerable)).map(([l])=>l)}a(R,"getOwnNonIndexProperties");var z=a(r=>g(r,"object")&&Nr.has(jr.call(r)),"isTypedArray");function g(r,s){return typeof r===s}a(g,"kind");var Dr=a(r=>{var s;return(s=r.constructor)==null?void 0:s.name},"getConstructorName"),P=a((r="",s="")=>`${r}${s} `,"getPrefix");function J(r={}){r.customInspectSymbol===void 0&&(r.customInspectSymbol=Symbol.for("edge-runtime.inspect.custom")),r.formatError===void 0&&(r.formatError=n=>{var t;let p=(t=n.stack)!=null?t:Error.prototype.toString.call(n);return String(p)});let{formatError:s,customInspectSymbol:i}=r;function l(...n){let[t]=n;if(!g(t,"string"))return w(t,i)?l(t[i]({format:l})):n.map(o=>A(o,{customInspectSymbol:i})).join(" ");let p=1,c=String(t).replace(/%[sjdOoif%]/g,o=>{if(o==="%%")return"%";if(p>=n.length)return o;switch(o){case"%s":{let e=n[p++];return w(e,i)?l(e[i]({format:l})):M(e)||x(e)||g(e,"bigint")?l(e):String(e)}case"%j":return Y(n[p++]);case"%d":{let e=n[p++];return g(e,"bigint")?l(e):String(Number(e))}case"%O":return A(n[p++],{customInspectSymbol:i});case"%o":return A(n[p++],{customInspectSymbol:i,showHidden:!0,depth:4});case"%i":{let e=n[p++];return g(e,"bigint")?l(e):String(parseInt(e,10))}case"%f":return String(parseFloat(n[p++]));default:return o}});for(let o=n[p];p[],"formatter"),m=["",""],O=!0,tr=n.showHidden?0:1;if($r in t)if(O=!1,Array.isArray(t)){let b=o!=="Array"?P(o,`(${t.length})`):"";if(c=R(t,tr),m=[`${b}[`,"]"],t.length===0&&c.length===0)return`${m[0]}]`;S=Q}else if(q(t)){let b=wr.call(t),_=P(o,`(${b})`);if(c=G(t,n.showHidden),S=Z,b===0&&c.length===0)return`${_}{}`;m=[`${_}{`,"}"]}else if(K(t)){let b=Pr.call(t),_=P(o,`(${b})`);if(c=G(t,n.showHidden),S=rr,b===0&&c.length===0)return`${_}{}`;m=[`${_}{`,"}"]}else if(z(t)){c=R(t,tr);let b=Ir.call(t);if(m=[`${P(o,`(${b})`)}[`,"]"],t.length===0&&c.length===0)return`${m[0]}]`;S=X.bind(null,b)}else O=!0;if(O)if(c=G(t,n.showHidden),m=["{","}"],o===void 0){if(c.length===0)return"[Object: null prototype] {}"}else if(o==="Object"){if(c.length===0)return"{}"}else if(g(t,"function")){if(e=`[Function${t.name?": "+t.name:""}]`,c.length===0)return e}else if(k(t)){if(e=RegExp.prototype.toString.call(t),c.length===0)return e;e=" "+e}else if(M(t)){if(e=Number.isNaN(mr.call(t))?Date.prototype.toString.call(t):dr.call(t),c.length===0)return e;e=" "+e}else if(x(t))e=s(t),c=c.filter(b=>b!=="name");else if(w(t,n.customInspectSymbol)){if(e=l(t[n.customInspectSymbol]({format:l})),c.length===0)return e;e=" "+e}else m[0]=`${P(o)}{`;if(p&&p<0)return k(t)?RegExp.prototype.toString.call(t):"[Object]";n.seen.push(t);let er=new Set(c),nr=S(n,t,p,er,c);for(let b=0;b`;e=e===""?_:`${_} ${e}`}}return n.seen.pop(),W(nr,e,m)}a(h,"formatRaw");function A(n,t){return t=Object.assign({seen:[],depth:2},t),u(t,n,t.depth)}a(A,"inspect");function L(n,t,p,c,o,e){let S,m,O=Object.getOwnPropertyDescriptor(t,o)||{value:t[o]};return O.value!==void 0?m=u(n,O.value,p):O.get?m=O.set?"[Getter/Setter]":"[Getter]":O.set?m="[Setter]":m="undefined",e?m:(g(o,"symbol")?S=`[${Er.call(o)}]`:c.has(o)?S=o:S="["+o+"]",`${S}: ${m}`)}a(L,"formatProperty");function Q(n,t,p,c){let o=[];for(let e=0;e0&&g(p[0],"number")?String(p[e]):H(p[e]);if(t.showHidden)for(let e of["BYTES_PER_ELEMENT","length","byteLength","byteOffset","buffer"]){let S=u(t,p[e],c);D.call(o,`[${String(e)}]: ${S}`)}return o}a(X,"formatTypedArray");function Z(n,t,p){let c=[];for(let o of t)D.call(c,u(n,o,p));return c}a(Z,"formatSet");function rr(n,t,p){let c=[];for(let{0:o,1:e}of t)c.push(`${u(n,o,p)} => ${u(n,e,p)}`);return c}return a(rr,"formatMap"),l}a(J,"createFormat");var H=a(r=>`${r}n`,"formatBigInt");function U(r){if(r===null)return"null";if(r===void 0)return"undefined";if(g(r,"string"))return`\'${JSON.stringify(r).replace(/^"|"$/g,"").replace(/\'/g,"\\\\\'").replace(/\\\\"/g,\'"\')}\'`;if(g(r,"boolean")||g(r,"number"))return""+r;if(g(r,"bigint"))return H(r);if(g(r,"symbol"))return r.toString()}a(U,"formatPrimitive");function w(r,s){return r!==null&&g(r,"object")&&s in r&&g(r[s],"function")}a(w,"hasCustomSymbol");function k(r){return g(r,"object")&&Object.prototype.toString.call(r)==="[object RegExp]"}a(k,"isRegExp");function M(r){return g(r,"object")&&Object.prototype.toString.call(r)==="[object Date]"}a(M,"isDate");function x(r){return g(r,"object")&&(Object.prototype.toString.call(r)==="[object Error]"||r instanceof Error)}a(x,"isError");function K(r){return g(r,"object")&&Object.prototype.toString.call(r)==="[object Map]"}a(K,"isMap");function q(r){return g(r,"object")&&Object.prototype.toString.call(r)==="[object Set]"}a(q,"isSet");function V(r,s,i){let u=r.length+s;if(u+r.length>80)return!1;for(let h=0;h80)return!1;return i===""||!Ar.call(i,`\n`)}a(V,"isBelowBreakLength");function W(r,s,i){let l=r.length+i[0].length+s.length+10;return V(r,l,s)?((s?s+" ":"")+i[0]+" "+r.join(", ")+" "+i[1]).trim():(s?s+" ":"")+i[0]+`\n `+r.join(`,\n `)+`\n`+i[1]}a(W,"reduceToSingleString");function Y(r){return Array.isArray(r)&&(r=r.map(s=>JSON.parse(JSON.stringify(s,C())))),JSON.stringify(r,C())}a(Y,"safeStringify");function C(){let r=new WeakSet;return(s,i)=>{if(i!==null&&g(i,"object")){if(r.has(i))return"[Circular]";r.add(i)}return i}}a(C,"makeCircularReplacer");function G(r,s=!1){let i,l=Or(r);if(s)i=F(r),l.length!==0&&D.apply(i,l);else{try{i=_r(r)}catch{i=F(r)}if(l.length!==0){let u=a(h=>hr.call(r,h),"filter");D.apply(i,br.call(l,u))}}return i}a(G,"getKeys")}}),sr={};Lr(sr,{console:()=>Wr});module.exports=Tr(sr);cr();var Fr=vr(Br()),$=(0,Fr.createFormat)(),zr=console.error.bind(console),Jr=console.log.bind(console),Hr=console.assert.bind(console),Ur=console.time.bind(console),Kr=console.timeEnd.bind(console),qr=console.timeLog.bind(console),Vr=console.trace.bind(console),or=a((...f)=>zr($(...f)),"error"),v=a((...f)=>Jr($(...f)),"log"),Wr={assert:(f,...y)=>Hr(f,$(...y)),count:console.count.bind(console),debug:v,dir:console.dir.bind(console),error:or,info:v,log:v,time:(...f)=>Ur($(...f)),timeEnd:(...f)=>Kr($(...f)),timeLog:qr,trace:Vr,warn:or};\n'},402:e=>{e.exports='"use strict";var s=Object.defineProperty,p=Object.getOwnPropertyDescriptor,_=Object.getOwnPropertyNames,u=Object.prototype.hasOwnProperty,a=(t,e)=>s(t,"name",{value:e,configurable:!0}),h=(t,e)=>{for(var r in e)s(t,r,{get:e[r],enumerable:!0})},l=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of _(e))!u.call(t,n)&&n!==r&&s(t,n,{get:()=>e[n],enumerable:!(o=p(e,n))||o.enumerable});return t},P=t=>l(s({},"__esModule",{value:!0}),t),i={};h(i,{FetchEvent:()=>E,PromiseRejectionEvent:()=>j});module.exports=P(i);var c=class extends Event{constructor(e){super("fetch"),this.request=e,this.response=null,this.awaiting=new Set}respondWith=e=>{this.response=e};waitUntil=e=>{this.awaiting.add(e),e.finally(()=>this.awaiting.delete(e))}};a(c,"FetchEvent");var E=c,v=class extends Event{constructor(e,r){super(e,{cancelable:!0}),this.promise=r.promise,this.reason=r.reason}};a(v,"PromiseRejectionEvent");var j=v;\n'},963:(module,__unused_webpack_exports,__nccwpck_require__)=>{"use strict";var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf;var __hasOwnProp=Object.prototype.hasOwnProperty;var __name=(e,A)=>__defProp(e,"name",{value:A,configurable:true});var __esm=(e,A)=>function __init(){return e&&(A=(0,e[__getOwnPropNames(e)[0]])(e=0)),A};var __commonJS=(e,A)=>function __require(){return A||(0,e[__getOwnPropNames(e)[0]])((A={exports:{}}).exports,A),A.exports};var __export=(e,A)=>{for(var t in A)__defProp(e,t,{get:A[t],enumerable:true})};var __copyProps=(e,A,t,r)=>{if(A&&typeof A==="object"||typeof A==="function"){for(let i of __getOwnPropNames(A))if(!__hasOwnProp.call(e,i)&&i!==t)__defProp(e,i,{get:()=>A[i],enumerable:!(r=__getOwnPropDesc(A,i))||r.enumerable})}return e};var __toESM=(e,A,t)=>(t=e!=null?__create(__getProtoOf(e)):{},__copyProps(A||!e||!e.__esModule?__defProp(t,"default",{value:e,enumerable:true}):t,e));var __toCommonJS=e=>__copyProps(__defProp({},"__esModule",{value:true}),e);var __accessCheck=(e,A,t)=>{if(!A.has(e))throw TypeError("Cannot "+t)};var __privateIn=(e,A)=>{if(Object(A)!==A)throw TypeError('Cannot use the "in" operator on this value');return e.has(A)};var __privateGet=(e,A,t)=>{__accessCheck(e,A,"read from private field");return t?t.call(e):A.get(e)};var __privateAdd=(e,A,t)=>{if(A.has(e))throw TypeError("Cannot add the same private member more than once");A instanceof WeakSet?A.add(e):A.set(e,t)};var __privateSet=(e,A,t,r)=>{__accessCheck(e,A,"write to private field");r?r.call(e,t):A.set(e,t);return t};var __privateMethod=(e,A,t)=>{__accessCheck(e,A,"access private method");return t};var define_process_default;var init_define_process=__esm({""(){define_process_default={version:"v18.20.5",env:{},versions:{node:" 18.20.5"}}}});var require_symbols=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/core/symbols.js"(e,A){"use strict";init_define_process();A.exports={kClose:Symbol("close"),kDestroy:Symbol("destroy"),kDispatch:Symbol("dispatch"),kUrl:Symbol("url"),kWriting:Symbol("writing"),kResuming:Symbol("resuming"),kQueue:Symbol("queue"),kConnect:Symbol("connect"),kConnecting:Symbol("connecting"),kKeepAliveDefaultTimeout:Symbol("default keep alive timeout"),kKeepAliveMaxTimeout:Symbol("max keep alive timeout"),kKeepAliveTimeoutThreshold:Symbol("keep alive timeout threshold"),kKeepAliveTimeoutValue:Symbol("keep alive timeout"),kKeepAlive:Symbol("keep alive"),kHeadersTimeout:Symbol("headers timeout"),kBodyTimeout:Symbol("body timeout"),kServerName:Symbol("server name"),kLocalAddress:Symbol("local address"),kHost:Symbol("host"),kNoRef:Symbol("no ref"),kBodyUsed:Symbol("used"),kBody:Symbol("abstracted request body"),kRunning:Symbol("running"),kBlocking:Symbol("blocking"),kPending:Symbol("pending"),kSize:Symbol("size"),kBusy:Symbol("busy"),kQueued:Symbol("queued"),kFree:Symbol("free"),kConnected:Symbol("connected"),kClosed:Symbol("closed"),kNeedDrain:Symbol("need drain"),kReset:Symbol("reset"),kDestroyed:Symbol.for("nodejs.stream.destroyed"),kResume:Symbol("resume"),kOnError:Symbol("on error"),kMaxHeadersSize:Symbol("max headers size"),kRunningIdx:Symbol("running index"),kPendingIdx:Symbol("pending index"),kError:Symbol("error"),kClients:Symbol("clients"),kClient:Symbol("client"),kParser:Symbol("parser"),kOnDestroyed:Symbol("destroy callbacks"),kPipelining:Symbol("pipelining"),kSocket:Symbol("socket"),kHostHeader:Symbol("host header"),kConnector:Symbol("connector"),kStrictContentLength:Symbol("strict content length"),kMaxRedirections:Symbol("maxRedirections"),kMaxRequests:Symbol("maxRequestsPerClient"),kProxy:Symbol("proxy agent options"),kCounter:Symbol("socket request counter"),kInterceptors:Symbol("dispatch interceptors"),kMaxResponseSize:Symbol("max response size"),kHTTP2Session:Symbol("http2Session"),kHTTP2SessionState:Symbol("http2Session state"),kRetryHandlerDefaultRetry:Symbol("retry agent default retry"),kConstruct:Symbol("constructable"),kListeners:Symbol("listeners"),kHTTPContext:Symbol("http context"),kMaxConcurrentStreams:Symbol("max concurrent streams"),kNoProxyAgent:Symbol("no proxy agent"),kHttpProxyAgent:Symbol("http proxy agent"),kHttpsProxyAgent:Symbol("https proxy agent")}}});var require_errors=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/core/errors.js"(e,A){"use strict";init_define_process();var t=class _UndiciError extends Error{constructor(e){super(e);this.name="UndiciError";this.code="UND_ERR"}};__name(t,"UndiciError");var r=t;var i=class _ConnectTimeoutError extends r{constructor(e){super(e);this.name="ConnectTimeoutError";this.message=e||"Connect Timeout Error";this.code="UND_ERR_CONNECT_TIMEOUT"}};__name(i,"ConnectTimeoutError");var s=i;var n=class _HeadersTimeoutError extends r{constructor(e){super(e);this.name="HeadersTimeoutError";this.message=e||"Headers Timeout Error";this.code="UND_ERR_HEADERS_TIMEOUT"}};__name(n,"HeadersTimeoutError");var o=n;var a=class _HeadersOverflowError extends r{constructor(e){super(e);this.name="HeadersOverflowError";this.message=e||"Headers Overflow Error";this.code="UND_ERR_HEADERS_OVERFLOW"}};__name(a,"HeadersOverflowError");var c=a;var l=class _BodyTimeoutError extends r{constructor(e){super(e);this.name="BodyTimeoutError";this.message=e||"Body Timeout Error";this.code="UND_ERR_BODY_TIMEOUT"}};__name(l,"BodyTimeoutError");var g=l;var Q=class _ResponseStatusCodeError extends r{constructor(e,A,t,r){super(e);this.name="ResponseStatusCodeError";this.message=e||"Response Status Code Error";this.code="UND_ERR_RESPONSE_STATUS_CODE";this.body=r;this.status=A;this.statusCode=A;this.headers=t}};__name(Q,"ResponseStatusCodeError");var u=Q;var E=class _InvalidArgumentError extends r{constructor(e){super(e);this.name="InvalidArgumentError";this.message=e||"Invalid Argument Error";this.code="UND_ERR_INVALID_ARG"}};__name(E,"InvalidArgumentError");var B=E;var h=class _InvalidReturnValueError extends r{constructor(e){super(e);this.name="InvalidReturnValueError";this.message=e||"Invalid Return Value Error";this.code="UND_ERR_INVALID_RETURN_VALUE"}};__name(h,"InvalidReturnValueError");var C=h;var I=class _AbortError extends r{constructor(e){super(e);this.name="AbortError";this.message=e||"The operation was aborted"}};__name(I,"AbortError");var d=I;var f=class _RequestAbortedError extends d{constructor(e){super(e);this.name="AbortError";this.message=e||"Request aborted";this.code="UND_ERR_ABORTED"}};__name(f,"RequestAbortedError");var p=f;var m=class _InformationalError extends r{constructor(e){super(e);this.name="InformationalError";this.message=e||"Request information";this.code="UND_ERR_INFO"}};__name(m,"InformationalError");var _=m;var w=class _RequestContentLengthMismatchError extends r{constructor(e){super(e);this.name="RequestContentLengthMismatchError";this.message=e||"Request body length does not match content-length header";this.code="UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"}};__name(w,"RequestContentLengthMismatchError");var y=w;var b=class _ResponseContentLengthMismatchError extends r{constructor(e){super(e);this.name="ResponseContentLengthMismatchError";this.message=e||"Response body length does not match content-length header";this.code="UND_ERR_RES_CONTENT_LENGTH_MISMATCH"}};__name(b,"ResponseContentLengthMismatchError");var k=b;var D=class _ClientDestroyedError extends r{constructor(e){super(e);this.name="ClientDestroyedError";this.message=e||"The client is destroyed";this.code="UND_ERR_DESTROYED"}};__name(D,"ClientDestroyedError");var R=D;var v=class _ClientClosedError extends r{constructor(e){super(e);this.name="ClientClosedError";this.message=e||"The client is closed";this.code="UND_ERR_CLOSED"}};__name(v,"ClientClosedError");var S=v;var F=class _SocketError extends r{constructor(e,A){super(e);this.name="SocketError";this.message=e||"Socket error";this.code="UND_ERR_SOCKET";this.socket=A}};__name(F,"SocketError");var M=F;var N=class _NotSupportedError extends r{constructor(e){super(e);this.name="NotSupportedError";this.message=e||"Not supported error";this.code="UND_ERR_NOT_SUPPORTED"}};__name(N,"NotSupportedError");var U=N;var L=class _BalancedPoolMissingUpstreamError extends r{constructor(e){super(e);this.name="MissingUpstreamError";this.message=e||"No upstream has been added to the BalancedPool";this.code="UND_ERR_BPL_MISSING_UPSTREAM"}};__name(L,"BalancedPoolMissingUpstreamError");var T=L;var G=class _HTTPParserError extends Error{constructor(e,A,t){super(e);this.name="HTTPParserError";this.code=A?`HPE_${A}`:void 0;this.data=t?t.toString():void 0}};__name(G,"HTTPParserError");var H=G;var Y=class _ResponseExceededMaxSizeError extends r{constructor(e){super(e);this.name="ResponseExceededMaxSizeError";this.message=e||"Response content exceeded max size";this.code="UND_ERR_RES_EXCEEDED_MAX_SIZE"}};__name(Y,"ResponseExceededMaxSizeError");var J=Y;var q=class _RequestRetryError extends r{constructor(e,A,{headers:t,data:r}){super(e);this.name="RequestRetryError";this.message=e||"Request retry error";this.code="UND_ERR_REQ_RETRY";this.statusCode=A;this.data=r;this.headers=t}};__name(q,"RequestRetryError");var x=q;var V=class _ResponseError extends r{constructor(e,A,{headers:t,data:r}){super(e);this.name="ResponseError";this.message=e||"Response error";this.code="UND_ERR_RESPONSE";this.statusCode=A;this.data=r;this.headers=t}};__name(V,"ResponseError");var W=V;var O=class _SecureProxyConnectionError extends r{constructor(e,A,t){super(A,{cause:e,...t??{}});this.name="SecureProxyConnectionError";this.message=A||"Secure Proxy Connection failed";this.code="UND_ERR_PRX_TLS";this.cause=e}};__name(O,"SecureProxyConnectionError");var P=O;A.exports={AbortError:d,HTTPParserError:H,UndiciError:r,HeadersTimeoutError:o,HeadersOverflowError:c,BodyTimeoutError:g,RequestContentLengthMismatchError:y,ConnectTimeoutError:s,ResponseStatusCodeError:u,InvalidArgumentError:B,InvalidReturnValueError:C,RequestAbortedError:p,ClientDestroyedError:R,ClientClosedError:S,InformationalError:_,SocketError:M,NotSupportedError:U,ResponseContentLengthMismatchError:k,BalancedPoolMissingUpstreamError:T,ResponseExceededMaxSizeError:J,RequestRetryError:x,ResponseError:W,SecureProxyConnectionError:P}}});var require_constants=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/core/constants.js"(e,A){"use strict";init_define_process();var t={};var r=["Accept","Accept-Encoding","Accept-Language","Accept-Ranges","Access-Control-Allow-Credentials","Access-Control-Allow-Headers","Access-Control-Allow-Methods","Access-Control-Allow-Origin","Access-Control-Expose-Headers","Access-Control-Max-Age","Access-Control-Request-Headers","Access-Control-Request-Method","Age","Allow","Alt-Svc","Alt-Used","Authorization","Cache-Control","Clear-Site-Data","Connection","Content-Disposition","Content-Encoding","Content-Language","Content-Length","Content-Location","Content-Range","Content-Security-Policy","Content-Security-Policy-Report-Only","Content-Type","Cookie","Cross-Origin-Embedder-Policy","Cross-Origin-Opener-Policy","Cross-Origin-Resource-Policy","Date","Device-Memory","Downlink","ECT","ETag","Expect","Expect-CT","Expires","Forwarded","From","Host","If-Match","If-Modified-Since","If-None-Match","If-Range","If-Unmodified-Since","Keep-Alive","Last-Modified","Link","Location","Max-Forwards","Origin","Permissions-Policy","Pragma","Proxy-Authenticate","Proxy-Authorization","RTT","Range","Referer","Referrer-Policy","Refresh","Retry-After","Sec-WebSocket-Accept","Sec-WebSocket-Extensions","Sec-WebSocket-Key","Sec-WebSocket-Protocol","Sec-WebSocket-Version","Server","Server-Timing","Service-Worker-Allowed","Service-Worker-Navigation-Preload","Set-Cookie","SourceMap","Strict-Transport-Security","Supports-Loading-Mode","TE","Timing-Allow-Origin","Trailer","Transfer-Encoding","Upgrade","Upgrade-Insecure-Requests","User-Agent","Vary","Via","WWW-Authenticate","X-Content-Type-Options","X-DNS-Prefetch-Control","X-Frame-Options","X-Permitted-Cross-Domain-Policies","X-Powered-By","X-Requested-With","X-XSS-Protection"];for(let e=0;e=e.length){throw new TypeError("Unreachable")}const r=this.code=e.charCodeAt(t);if(r>127){throw new TypeError("key must be ascii string")}if(e.length!==++t){this.middle=new _TstNode(e,A,t)}else{this.value=A}}add(e,A){const t=e.length;if(t===0){throw new TypeError("Unreachable")}let r=0;let i=this;while(true){const s=e.charCodeAt(r);if(s>127){throw new TypeError("key must be ascii string")}if(i.code===s){if(t===++r){i.value=A;break}else if(i.middle!==null){i=i.middle}else{i.middle=new _TstNode(e,A,r);break}}else if(i.code=65){i|=32}while(r!==null){if(i===r.code){if(A===++t){return r}r=r.middle;break}r=r.codeNumber(e)));var d=class _BodyAsyncIterable{constructor(e){this[n]=e;this[i]=false}async*[Symbol.asyncIterator](){t(!this[i],"disturbed");this[i]=true;yield*this[n]}};__name(d,"BodyAsyncIterable");var f=d;function wrapRequestBody(e){if(isStream(e)){if(bodyLength(e)===0){e.on("data",(function(){t(false)}))}if(typeof e.readableDidRead!=="boolean"){e[i]=false;u.prototype.on.call(e,"data",(function(){this[i]=true}))}return e}else if(e&&typeof e.pipeTo==="function"){return new f(e)}else if(e&&typeof e!=="string"&&!ArrayBuffer.isView(e)&&isIterable(e)){return new f(e)}else{return e}}__name(wrapRequestBody,"wrapRequestBody");function nop(){}__name(nop,"nop");function isStream(e){return e&&typeof e==="object"&&typeof e.pipe==="function"&&typeof e.on==="function"}__name(isStream,"isStream");function isBlobLike(e){if(e===null){return false}else if(e instanceof l){return true}else if(typeof e!=="object"){return false}else{const A=e[Symbol.toStringTag];return(A==="Blob"||A==="File")&&("stream"in e&&typeof e.stream==="function"||"arrayBuffer"in e&&typeof e.arrayBuffer==="function")}}__name(isBlobLike,"isBlobLike");function buildURL(e,A){if(e.includes("?")||e.includes("#")){throw new Error('Query params cannot be passed when url already contains "?" or "#".')}const t=Q(A);if(t){e+="?"+t}return e}__name(buildURL,"buildURL");function isValidPort(e){const A=parseInt(e,10);return A===Number(e)&&A>=0&&A<=65535}__name(isValidPort,"isValidPort");function isHttpOrHttpsPrefixed(e){return e!=null&&e[0]==="h"&&e[1]==="t"&&e[2]==="t"&&e[3]==="p"&&(e[4]===":"||e[4]==="s"&&e[5]===":")}__name(isHttpOrHttpsPrefixed,"isHttpOrHttpsPrefixed");function parseURL(e){if(typeof e==="string"){e=new URL(e);if(!isHttpOrHttpsPrefixed(e.origin||e.protocol)){throw new E("Invalid URL protocol: the URL must start with `http:` or `https:`.")}return e}if(!e||typeof e!=="object"){throw new E("Invalid URL: The URL argument must be a non-null object.")}if(!(e instanceof URL)){if(e.port!=null&&e.port!==""&&isValidPort(e.port)===false){throw new E("Invalid URL: port must be a valid integer or a string representation of an integer.")}if(e.path!=null&&typeof e.path!=="string"){throw new E("Invalid URL path: the path must be a string or null/undefined.")}if(e.pathname!=null&&typeof e.pathname!=="string"){throw new E("Invalid URL pathname: the pathname must be a string or null/undefined.")}if(e.hostname!=null&&typeof e.hostname!=="string"){throw new E("Invalid URL hostname: the hostname must be a string or null/undefined.")}if(e.origin!=null&&typeof e.origin!=="string"){throw new E("Invalid URL origin: the origin must be a string or null/undefined.")}if(!isHttpOrHttpsPrefixed(e.origin||e.protocol)){throw new E("Invalid URL protocol: the URL must start with `http:` or `https:`.")}const A=e.port!=null?e.port:e.protocol==="https:"?443:80;let t=e.origin!=null?e.origin:`${e.protocol||""}//${e.hostname||""}:${A}`;let r=e.path!=null?e.path:`${e.pathname||""}${e.search||""}`;if(t[t.length-1]==="/"){t=t.slice(0,t.length-1)}if(r&&r[0]!=="/"){r=`/${r}`}return new URL(`${t}${r}`)}if(!isHttpOrHttpsPrefixed(e.origin||e.protocol)){throw new E("Invalid URL protocol: the URL must start with `http:` or `https:`.")}return e}__name(parseURL,"parseURL");function parseOrigin(e){e=parseURL(e);if(e.pathname!=="/"||e.search||e.hash){throw new E("invalid url")}return e}__name(parseOrigin,"parseOrigin");function getHostname(e){if(e[0]==="["){const A=e.indexOf("]");t(A!==-1);return e.substring(1,A)}const A=e.indexOf(":");if(A===-1)return e;return e.substring(0,A)}__name(getHostname,"getHostname");function getServerName(e){if(!e){return null}t(typeof e==="string");const A=getHostname(e);if(c.isIP(A)){return""}return A}__name(getServerName,"getServerName");function deepClone(e){return JSON.parse(JSON.stringify(e))}__name(deepClone,"deepClone");function isAsyncIterable(e){return!!(e!=null&&typeof e[Symbol.asyncIterator]==="function")}__name(isAsyncIterable,"isAsyncIterable");function isIterable(e){return!!(e!=null&&(typeof e[Symbol.iterator]==="function"||typeof e[Symbol.asyncIterator]==="function"))}__name(isIterable,"isIterable");function bodyLength(e){if(e==null){return 0}else if(isStream(e)){const A=e._readableState;return A&&A.objectMode===false&&A.ended===true&&Number.isFinite(A.length)?A.length:null}else if(isBlobLike(e)){return e.size!=null?e.size:null}else if(isBuffer(e)){return e.byteLength}return null}__name(bodyLength,"bodyLength");function isDestroyed(e){return e&&!!(e.destroyed||e[r]||a.isDestroyed?.(e))}__name(isDestroyed,"isDestroyed");function destroy(e,A){if(e==null||!isStream(e)||isDestroyed(e)){return}if(typeof e.destroy==="function"){if(Object.getPrototypeOf(e).constructor===o){e.socket=null}e.destroy(A)}else if(A){queueMicrotask((()=>{e.emit("error",A)}))}if(e.destroyed!==true){e[r]=true}}__name(destroy,"destroy");var p=/timeout=(\d+)/;function parseKeepAliveTimeout(e){const A=e.toString().match(p);return A?parseInt(A[1],10)*1e3:null}__name(parseKeepAliveTimeout,"parseKeepAliveTimeout");function headerNameToString(e){return typeof e==="string"?B[e]??e.toLowerCase():h.lookup(e)??e.toString("latin1").toLowerCase()}__name(headerNameToString,"headerNameToString");function bufferToLowerCasedHeaderName(e){return h.lookup(e)??e.toString("latin1").toLowerCase()}__name(bufferToLowerCasedHeaderName,"bufferToLowerCasedHeaderName");function parseHeaders(e,A){if(A===void 0)A={};for(let t=0;te.toString("utf8"))):i.toString("utf8")}}}if("content-length"in A&&"content-disposition"in A){A["content-disposition"]=Buffer.from(A["content-disposition"]).toString("latin1")}return A}__name(parseHeaders,"parseHeaders");function parseRawHeaders(e){const A=e.length;const t=new Array(A);let r=false;let i=-1;let s;let n;let o=0;for(let A=0;A{e.close();e.byobRequest?.respond(0)}))}else{const A=Buffer.isBuffer(r)?r:Buffer.from(r);if(A.byteLength){e.enqueue(new Uint8Array(A))}}return e.desiredSize>0},async cancel(e){await A.return()},type:"bytes"})}__name(ReadableStreamFrom,"ReadableStreamFrom");function isFormDataLike(e){return e&&typeof e==="object"&&typeof e.append==="function"&&typeof e.delete==="function"&&typeof e.get==="function"&&typeof e.getAll==="function"&&typeof e.has==="function"&&typeof e.set==="function"&&e[Symbol.toStringTag]==="FormData"}__name(isFormDataLike,"isFormDataLike");function addAbortListener(e,A){if("addEventListener"in e){e.addEventListener("abort",A,{once:true});return()=>e.removeEventListener("abort",A)}e.addListener("abort",A);return()=>e.removeListener("abort",A)}__name(addAbortListener,"addAbortListener");var m=typeof String.prototype.toWellFormed==="function";var _=typeof String.prototype.isWellFormed==="function";function toUSVString(e){return m?`${e}`.toWellFormed():g.toUSVString(e)}__name(toUSVString,"toUSVString");function isUSVString(e){return _?`${e}`.isWellFormed():toUSVString(e)===`${e}`}__name(isUSVString,"isUSVString");function isTokenCharCode(e){switch(e){case 34:case 40:case 41:case 44:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 123:case 125:return false;default:return e>=33&&e<=126}}__name(isTokenCharCode,"isTokenCharCode");function isValidHTTPToken(e){if(e.length===0){return false}for(let A=0;A{const{connectParams:{version:t,protocol:r,port:i,host:s}}=A;e("connecting to %s using %s%s",`${s}${i?`:${i}`:""}`,r,t)}));t.channel("undici:client:connected").subscribe((A=>{const{connectParams:{version:t,protocol:r,port:i,host:s}}=A;e("connected to %s using %s%s",`${s}${i?`:${i}`:""}`,r,t)}));t.channel("undici:client:connectError").subscribe((A=>{const{connectParams:{version:t,protocol:r,port:i,host:s},error:n}=A;e("connection to %s using %s%s errored - %s",`${s}${i?`:${i}`:""}`,r,t,n.message)}));t.channel("undici:client:sendHeaders").subscribe((A=>{const{request:{method:t,path:r,origin:i}}=A;e("sending request to %s %s/%s",t,i,r)}));t.channel("undici:request:headers").subscribe((A=>{const{request:{method:t,path:r,origin:i},response:{statusCode:s}}=A;e("received response to %s %s/%s - HTTP %d",t,i,r,s)}));t.channel("undici:request:trailers").subscribe((A=>{const{request:{method:t,path:r,origin:i}}=A;e("trailers received from %s %s/%s",t,i,r)}));t.channel("undici:request:error").subscribe((A=>{const{request:{method:t,path:r,origin:i},error:s}=A;e("request to %s %s/%s errored - %s",t,i,r,s.message)}));o=true}if(n.enabled){if(!o){const e=i.enabled?i:n;t.channel("undici:client:beforeConnect").subscribe((A=>{const{connectParams:{version:t,protocol:r,port:i,host:s}}=A;e("connecting to %s%s using %s%s",s,i?`:${i}`:"",r,t)}));t.channel("undici:client:connected").subscribe((A=>{const{connectParams:{version:t,protocol:r,port:i,host:s}}=A;e("connected to %s%s using %s%s",s,i?`:${i}`:"",r,t)}));t.channel("undici:client:connectError").subscribe((A=>{const{connectParams:{version:t,protocol:r,port:i,host:s},error:n}=A;e("connection to %s%s using %s%s errored - %s",s,i?`:${i}`:"",r,t,n.message)}));t.channel("undici:client:sendHeaders").subscribe((A=>{const{request:{method:t,path:r,origin:i}}=A;e("sending request to %s %s/%s",t,i,r)}))}t.channel("undici:websocket:open").subscribe((e=>{const{address:{address:A,port:t}}=e;n("connection opened %s%s",A,t?`:${t}`:"")}));t.channel("undici:websocket:close").subscribe((e=>{const{websocket:A,code:t,reason:r}=e;n("closed connection to %s - %s %s",A.url,t,r)}));t.channel("undici:websocket:socket_error").subscribe((e=>{n("connection errored - %s",e.message)}));t.channel("undici:websocket:ping").subscribe((e=>{n("ping received")}));t.channel("undici:websocket:pong").subscribe((e=>{n("pong received")}))}A.exports={channels:a}}});var require_undici_core_request=__commonJS({"src/patches/undici-core-request.js"(e,A){"use strict";init_define_process();var{InvalidArgumentError:t,NotSupportedError:r}=require_errors();var i=__nccwpck_require__(491);var{isValidHTTPToken:s,isValidHeaderValue:n,isStream:o,destroy:a,isBuffer:c,isFormDataLike:l,isIterable:g,isBlobLike:Q,buildURL:u,validateHandler:E,getServerName:B,normalizedMethodRecords:h}=require_util();var{channels:C}=require_diagnostics();var{headerNameLowerCasedRecord:I}=require_constants();var d=/[^\u0021-\u00ff]/;var f=Symbol("handler");var p=class _Request2{constructor(e,{path:A,method:r,body:i,headers:n,query:I,idempotent:p,blocking:m,upgrade:_,headersTimeout:w,bodyTimeout:y,reset:b,throwOnError:k,expectContinue:D,servername:R},v){if(typeof A!=="string"){throw new t("path must be a string")}else if(A[0]!=="/"&&!(A.startsWith("http://")||A.startsWith("https://"))&&r!=="CONNECT"){throw new t("path must be an absolute URL or start with a slash")}else if(d.test(A)){throw new t("invalid request path")}if(typeof r!=="string"){throw new t("method must be a string")}else if(h[r]===void 0&&!s(r)){throw new t("invalid request method")}if(_&&typeof _!=="string"){throw new t("upgrade must be a string")}if(w!=null&&(!Number.isFinite(w)||w<0)){throw new t("invalid headersTimeout")}if(y!=null&&(!Number.isFinite(y)||y<0)){throw new t("invalid bodyTimeout")}if(b!=null&&typeof b!=="boolean"){throw new t("invalid reset")}if(D!=null&&typeof D!=="boolean"){throw new t("invalid expectContinue")}this.headersTimeout=w;this.bodyTimeout=y;this.throwOnError=k===true;this.method=r;this.abort=null;if(i==null){this.body=null}else if(o(i)){this.body=i;const e=this.body._readableState;if(!e||!e.autoDestroy){this.endHandler=__name((function autoDestroy(){a(this)}),"autoDestroy");this.body.on("end",this.endHandler)}this.errorHandler=e=>{if(this.abort){this.abort(e)}else{this.error=e}};this.body.on("error",this.errorHandler)}else if(c(i)){this.body=i.byteLength?i:null}else if(ArrayBuffer.isView(i)){this.body=i.buffer.byteLength?Buffer.from(i.buffer,i.byteOffset,i.byteLength):null}else if(i instanceof ArrayBuffer){this.body=i.byteLength?Buffer.from(i):null}else if(typeof i==="string"){this.body=i.length?Buffer.from(i):null}else if(l(i)||g(i)||Q(i)){this.body=i}else{throw new t("body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable")}this.completed=false;this.aborted=false;this.upgrade=_||null;this.path=I?u(A,I):A;this.origin=e;this.idempotent=p==null?r==="HEAD"||r==="GET":p;this.blocking=m==null?false:m;this.reset=b==null?null:b;this.host=null;this.contentLength=null;this.contentType=null;this.headers=[];this.expectContinue=D!=null?D:false;if(Array.isArray(n)){if(n.length%2!==0){throw new t("headers array must be even")}for(let e=0;e=0;A--){const e=this[g][A];if(typeof e!=="function"){throw new s("interceptor must be an function")}}}this[g]=e}close(e){if(e===void 0){return new Promise(((e,A)=>{this.close(((t,r)=>t?A(t):e(r)))}))}if(typeof e!=="function"){throw new s("invalid callback")}if(this[c]){queueMicrotask((()=>e(new r,null)));return}if(this[a]){if(this[u]){this[u].push(e)}else{queueMicrotask((()=>e(null,null)))}return}this[a]=true;this[u].push(e);const A=__name((()=>{const e=this[u];this[u]=null;for(let A=0;Athis.destroy())).then((()=>{queueMicrotask(A)}))}destroy(e,A){if(typeof e==="function"){A=e;e=null}if(A===void 0){return new Promise(((A,t)=>{this.destroy(e,((e,r)=>e?t(e):A(r)))}))}if(typeof A!=="function"){throw new s("invalid callback")}if(this[c]){if(this[Q]){this[Q].push(A)}else{queueMicrotask((()=>A(null,null)))}return}if(!e){e=new r}this[c]=true;this[Q]=this[Q]||[];this[Q].push(A);const t=__name((()=>{const e=this[Q];this[Q]=null;for(let A=0;A{queueMicrotask(t)}))}[E](e,A){if(!this[g]||this[g].length===0){this[E]=this[l];return this[l](e,A)}let t=this[l].bind(this);for(let e=this[g].length-1;e>=0;e--){t=this[g][e](t)}this[E]=t;return t(e,A)}dispatch(e,A){if(!A||typeof A!=="object"){throw new s("handler must be an object")}try{if(!e||typeof e!=="object"){throw new s("opts must be an object.")}if(this[c]||this[Q]){throw new r}if(this[a]){throw new i}return this[E](e,A)}catch(e){if(typeof A.onError!=="function"){throw new s("invalid onError method")}A.onError(e);return false}}};__name(B,"DispatcherBase");var h=B;A.exports=h}});var require_timers=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/util/timers.js"(e,A){"use strict";init_define_process();var t=0;var r=1e3;var i=(r>>1)-1;var s;var n=Symbol("kFastTimer");var o=[];var a=-2;var c=-1;var l=0;var g=1;function onTick(){t+=i;let e=0;let A=o.length;while(e=r._idleStart+r._idleTimeout){r._state=c;r._idleStart=-1;r._onTimeout(r._timerArg)}if(r._state===c){r._state=a;if(--A!==0){o[e]=o[A]}}else{++e}}o.length=A;if(o.length!==0){refreshTimeout()}}__name(onTick,"onTick");function refreshTimeout(){if(s){s.refresh()}else{clearTimeout(s);s=setTimeout(onTick,i);if(s.unref){s.unref()}}}__name(refreshTimeout,"refreshTimeout");var Q=class _FastTimer{[n]=true;_state=a;_idleTimeout=-1;_idleStart=-1;_onTimeout;_timerArg;constructor(e,A,t){this._onTimeout=e;this._idleTimeout=A;this._timerArg=t;this.refresh()}refresh(){if(this._state===a){o.push(this)}if(!s||o.length===1){refreshTimeout()}this._state=l}clear(){this._state=c;this._idleStart=-1}};__name(Q,"FastTimer");var u=Q;A.exports={setTimeout(e,A,t){return A<=r?setTimeout(e,A,t):new u(e,A,t)},clearTimeout(e){if(e[n]){e.clear()}else{clearTimeout(e)}},setFastTimeout(e,A,t){return new u(e,A,t)},clearFastTimeout(e){e.clear()},now(){return t},tick(e=0){t+=e-r+1;onTick();onTick()},reset(){t=0;o.length=0;clearTimeout(s);s=null},kFastTimer:n}}});var require_connect=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/core/connect.js"(e,A){"use strict";init_define_process();var t=__nccwpck_require__(808);var r=__nccwpck_require__(491);var i=require_util();var{InvalidArgumentError:s,ConnectTimeoutError:n}=require_errors();var o=require_timers();function noop(){}__name(noop,"noop");var a;var c;var l,g;if(global.FinalizationRegistry&&!(define_process_default.env.NODE_V8_COVERAGE||define_process_default.env.UNDICI_NO_FG)){c=(l=class{constructor(e){this._maxCachedSessions=e;this._sessionCache=new Map;this._sessionRegistry=new global.FinalizationRegistry((e=>{if(this._sessionCache.size=this._maxCachedSessions){const{value:e}=this._sessionCache.keys().next();this._sessionCache.delete(e)}this._sessionCache.set(e,A)}},__name(g,"SimpleSessionCache"),g)}function buildConnector({allowH2:e,maxCachedSessions:A,socketPath:n,timeout:o,session:l,...g}){if(A!=null&&(!Number.isInteger(A)||A<0)){throw new s("maxCachedSessions must be a positive integer or zero")}const u={path:n,...g};const E=new c(A==null?100:A);o=o==null?1e4:o;e=e!=null?e:false;return __name((function connect({hostname:A,host:s,protocol:n,port:c,servername:g,localAddress:B,httpSocket:h},C){let I;if(n==="https:"){if(!a){a=__nccwpck_require__(404)}g=g||u.servername||i.getServerName(s)||null;const t=g||A;r(t);const n=l||E.get(t)||null;c=c||443;I=a.connect({highWaterMark:16384,...u,servername:g,session:n,localAddress:B,ALPNProtocols:e?["http/1.1","h2"]:["http/1.1"],socket:h,port:c,host:A});I.on("session",(function(e){E.set(t,e)}))}else{r(!h,"httpSocket can only be sent on TLS update");c=c||80;I=t.connect({highWaterMark:64*1024,...u,localAddress:B,port:c,host:A})}if(u.keepAlive==null||u.keepAlive){const e=u.keepAliveInitialDelay===void 0?6e4:u.keepAliveInitialDelay;I.setKeepAlive(true,e)}const d=Q(new WeakRef(I),{timeout:o,hostname:A,port:c});I.setNoDelay(true).once(n==="https:"?"secureConnect":"connect",(function(){queueMicrotask(d);if(C){const e=C;C=null;e(null,this)}})).on("error",(function(e){queueMicrotask(d);if(C){const A=C;C=null;A(e)}}));return I}),"connect")}__name(buildConnector,"buildConnector");var Q=define_process_default.platform==="win32"?(e,A)=>{if(!A.timeout){return noop}let t=null;let r=null;const i=o.setFastTimeout((()=>{t=setImmediate((()=>{r=setImmediate((()=>onConnectTimeout(e.deref(),A)))}))}),A.timeout);return()=>{o.clearFastTimeout(i);clearImmediate(t);clearImmediate(r)}}:(e,A)=>{if(!A.timeout){return noop}let t=null;const r=o.setFastTimeout((()=>{t=setImmediate((()=>{onConnectTimeout(e.deref(),A)}))}),A.timeout);return()=>{o.clearFastTimeout(r);clearImmediate(t)}};function onConnectTimeout(e,A){if(e==null){return}let t="Connect Timeout Error";if(Array.isArray(e.autoSelectFamilyAttemptedAddresses)){t+=` (attempted addresses: ${e.autoSelectFamilyAttemptedAddresses.join(", ")},`}else{t+=` (attempted address: ${A.hostname}:${A.port},`}t+=` timeout: ${A.timeout}ms)`;i.destroy(e,new n(t))}__name(onConnectTimeout,"onConnectTimeout");A.exports=buildConnector}});var require_utils=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/llhttp/utils.js"(e){"use strict";init_define_process();Object.defineProperty(e,"__esModule",{value:true});e.enumToMap=void 0;function enumToMap(e){const A={};Object.keys(e).forEach((t=>{const r=e[t];if(typeof r==="number"){A[t]=r}}));return A}__name(enumToMap,"enumToMap");e.enumToMap=enumToMap}});var require_constants2=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/llhttp/constants.js"(e){"use strict";init_define_process();Object.defineProperty(e,"__esModule",{value:true});e.SPECIAL_HEADERS=e.HEADER_STATE=e.MINOR=e.MAJOR=e.CONNECTION_TOKEN_CHARS=e.HEADER_CHARS=e.TOKEN=e.STRICT_TOKEN=e.HEX=e.URL_CHAR=e.STRICT_URL_CHAR=e.USERINFO_CHARS=e.MARK=e.ALPHANUM=e.NUM=e.HEX_MAP=e.NUM_MAP=e.ALPHA=e.FINISH=e.H_METHOD_MAP=e.METHOD_MAP=e.METHODS_RTSP=e.METHODS_ICE=e.METHODS_HTTP=e.METHODS=e.LENIENT_FLAGS=e.FLAGS=e.TYPE=e.ERROR=void 0;var A=require_utils();var t;(function(e){e[e["OK"]=0]="OK";e[e["INTERNAL"]=1]="INTERNAL";e[e["STRICT"]=2]="STRICT";e[e["LF_EXPECTED"]=3]="LF_EXPECTED";e[e["UNEXPECTED_CONTENT_LENGTH"]=4]="UNEXPECTED_CONTENT_LENGTH";e[e["CLOSED_CONNECTION"]=5]="CLOSED_CONNECTION";e[e["INVALID_METHOD"]=6]="INVALID_METHOD";e[e["INVALID_URL"]=7]="INVALID_URL";e[e["INVALID_CONSTANT"]=8]="INVALID_CONSTANT";e[e["INVALID_VERSION"]=9]="INVALID_VERSION";e[e["INVALID_HEADER_TOKEN"]=10]="INVALID_HEADER_TOKEN";e[e["INVALID_CONTENT_LENGTH"]=11]="INVALID_CONTENT_LENGTH";e[e["INVALID_CHUNK_SIZE"]=12]="INVALID_CHUNK_SIZE";e[e["INVALID_STATUS"]=13]="INVALID_STATUS";e[e["INVALID_EOF_STATE"]=14]="INVALID_EOF_STATE";e[e["INVALID_TRANSFER_ENCODING"]=15]="INVALID_TRANSFER_ENCODING";e[e["CB_MESSAGE_BEGIN"]=16]="CB_MESSAGE_BEGIN";e[e["CB_HEADERS_COMPLETE"]=17]="CB_HEADERS_COMPLETE";e[e["CB_MESSAGE_COMPLETE"]=18]="CB_MESSAGE_COMPLETE";e[e["CB_CHUNK_HEADER"]=19]="CB_CHUNK_HEADER";e[e["CB_CHUNK_COMPLETE"]=20]="CB_CHUNK_COMPLETE";e[e["PAUSED"]=21]="PAUSED";e[e["PAUSED_UPGRADE"]=22]="PAUSED_UPGRADE";e[e["PAUSED_H2_UPGRADE"]=23]="PAUSED_H2_UPGRADE";e[e["USER"]=24]="USER"})(t=e.ERROR||(e.ERROR={}));var r;(function(e){e[e["BOTH"]=0]="BOTH";e[e["REQUEST"]=1]="REQUEST";e[e["RESPONSE"]=2]="RESPONSE"})(r=e.TYPE||(e.TYPE={}));var i;(function(e){e[e["CONNECTION_KEEP_ALIVE"]=1]="CONNECTION_KEEP_ALIVE";e[e["CONNECTION_CLOSE"]=2]="CONNECTION_CLOSE";e[e["CONNECTION_UPGRADE"]=4]="CONNECTION_UPGRADE";e[e["CHUNKED"]=8]="CHUNKED";e[e["UPGRADE"]=16]="UPGRADE";e[e["CONTENT_LENGTH"]=32]="CONTENT_LENGTH";e[e["SKIPBODY"]=64]="SKIPBODY";e[e["TRAILING"]=128]="TRAILING";e[e["TRANSFER_ENCODING"]=512]="TRANSFER_ENCODING"})(i=e.FLAGS||(e.FLAGS={}));var s;(function(e){e[e["HEADERS"]=1]="HEADERS";e[e["CHUNKED_LENGTH"]=2]="CHUNKED_LENGTH";e[e["KEEP_ALIVE"]=4]="KEEP_ALIVE"})(s=e.LENIENT_FLAGS||(e.LENIENT_FLAGS={}));var n;(function(e){e[e["DELETE"]=0]="DELETE";e[e["GET"]=1]="GET";e[e["HEAD"]=2]="HEAD";e[e["POST"]=3]="POST";e[e["PUT"]=4]="PUT";e[e["CONNECT"]=5]="CONNECT";e[e["OPTIONS"]=6]="OPTIONS";e[e["TRACE"]=7]="TRACE";e[e["COPY"]=8]="COPY";e[e["LOCK"]=9]="LOCK";e[e["MKCOL"]=10]="MKCOL";e[e["MOVE"]=11]="MOVE";e[e["PROPFIND"]=12]="PROPFIND";e[e["PROPPATCH"]=13]="PROPPATCH";e[e["SEARCH"]=14]="SEARCH";e[e["UNLOCK"]=15]="UNLOCK";e[e["BIND"]=16]="BIND";e[e["REBIND"]=17]="REBIND";e[e["UNBIND"]=18]="UNBIND";e[e["ACL"]=19]="ACL";e[e["REPORT"]=20]="REPORT";e[e["MKACTIVITY"]=21]="MKACTIVITY";e[e["CHECKOUT"]=22]="CHECKOUT";e[e["MERGE"]=23]="MERGE";e[e["M-SEARCH"]=24]="M-SEARCH";e[e["NOTIFY"]=25]="NOTIFY";e[e["SUBSCRIBE"]=26]="SUBSCRIBE";e[e["UNSUBSCRIBE"]=27]="UNSUBSCRIBE";e[e["PATCH"]=28]="PATCH";e[e["PURGE"]=29]="PURGE";e[e["MKCALENDAR"]=30]="MKCALENDAR";e[e["LINK"]=31]="LINK";e[e["UNLINK"]=32]="UNLINK";e[e["SOURCE"]=33]="SOURCE";e[e["PRI"]=34]="PRI";e[e["DESCRIBE"]=35]="DESCRIBE";e[e["ANNOUNCE"]=36]="ANNOUNCE";e[e["SETUP"]=37]="SETUP";e[e["PLAY"]=38]="PLAY";e[e["PAUSE"]=39]="PAUSE";e[e["TEARDOWN"]=40]="TEARDOWN";e[e["GET_PARAMETER"]=41]="GET_PARAMETER";e[e["SET_PARAMETER"]=42]="SET_PARAMETER";e[e["REDIRECT"]=43]="REDIRECT";e[e["RECORD"]=44]="RECORD";e[e["FLUSH"]=45]="FLUSH"})(n=e.METHODS||(e.METHODS={}));e.METHODS_HTTP=[n.DELETE,n.GET,n.HEAD,n.POST,n.PUT,n.CONNECT,n.OPTIONS,n.TRACE,n.COPY,n.LOCK,n.MKCOL,n.MOVE,n.PROPFIND,n.PROPPATCH,n.SEARCH,n.UNLOCK,n.BIND,n.REBIND,n.UNBIND,n.ACL,n.REPORT,n.MKACTIVITY,n.CHECKOUT,n.MERGE,n["M-SEARCH"],n.NOTIFY,n.SUBSCRIBE,n.UNSUBSCRIBE,n.PATCH,n.PURGE,n.MKCALENDAR,n.LINK,n.UNLINK,n.PRI,n.SOURCE];e.METHODS_ICE=[n.SOURCE];e.METHODS_RTSP=[n.OPTIONS,n.DESCRIBE,n.ANNOUNCE,n.SETUP,n.PLAY,n.PAUSE,n.TEARDOWN,n.GET_PARAMETER,n.SET_PARAMETER,n.REDIRECT,n.RECORD,n.FLUSH,n.GET,n.POST];e.METHOD_MAP=A.enumToMap(n);e.H_METHOD_MAP={};Object.keys(e.METHOD_MAP).forEach((A=>{if(/^H/.test(A)){e.H_METHOD_MAP[A]=e.METHOD_MAP[A]}}));var o;(function(e){e[e["SAFE"]=0]="SAFE";e[e["SAFE_WITH_CB"]=1]="SAFE_WITH_CB";e[e["UNSAFE"]=2]="UNSAFE"})(o=e.FINISH||(e.FINISH={}));e.ALPHA=[];for(let A="A".charCodeAt(0);A<="Z".charCodeAt(0);A++){e.ALPHA.push(String.fromCharCode(A));e.ALPHA.push(String.fromCharCode(A+32))}e.NUM_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9};e.HEX_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15};e.NUM=["0","1","2","3","4","5","6","7","8","9"];e.ALPHANUM=e.ALPHA.concat(e.NUM);e.MARK=["-","_",".","!","~","*","'","(",")"];e.USERINFO_CHARS=e.ALPHANUM.concat(e.MARK).concat(["%",";",":","&","=","+","$",","]);e.STRICT_URL_CHAR=["!",'"',"$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","@","[","\\","]","^","_","`","{","|","}","~"].concat(e.ALPHANUM);e.URL_CHAR=e.STRICT_URL_CHAR.concat(["\t","\f"]);for(let A=128;A<=255;A++){e.URL_CHAR.push(A)}e.HEX=e.NUM.concat(["a","b","c","d","e","f","A","B","C","D","E","F"]);e.STRICT_TOKEN=["!","#","$","%","&","'","*","+","-",".","^","_","`","|","~"].concat(e.ALPHANUM);e.TOKEN=e.STRICT_TOKEN.concat([" "]);e.HEADER_CHARS=["\t"];for(let A=32;A<=255;A++){if(A!==127){e.HEADER_CHARS.push(A)}}e.CONNECTION_TOKEN_CHARS=e.HEADER_CHARS.filter((e=>e!==44));e.MAJOR=e.NUM_MAP;e.MINOR=e.MAJOR;var a;(function(e){e[e["GENERAL"]=0]="GENERAL";e[e["CONNECTION"]=1]="CONNECTION";e[e["CONTENT_LENGTH"]=2]="CONTENT_LENGTH";e[e["TRANSFER_ENCODING"]=3]="TRANSFER_ENCODING";e[e["UPGRADE"]=4]="UPGRADE";e[e["CONNECTION_KEEP_ALIVE"]=5]="CONNECTION_KEEP_ALIVE";e[e["CONNECTION_CLOSE"]=6]="CONNECTION_CLOSE";e[e["CONNECTION_UPGRADE"]=7]="CONNECTION_UPGRADE";e[e["TRANSFER_ENCODING_CHUNKED"]=8]="TRANSFER_ENCODING_CHUNKED"})(a=e.HEADER_STATE||(e.HEADER_STATE={}));e.SPECIAL_HEADERS={connection:a.CONNECTION,"content-length":a.CONTENT_LENGTH,"proxy-connection":a.CONNECTION,"transfer-encoding":a.TRANSFER_ENCODING,upgrade:a.UPGRADE}}});var require_llhttp_wasm=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/llhttp/llhttp-wasm.js"(e,A){"use strict";init_define_process();var{Buffer:t}=__nccwpck_require__(300);A.exports=t.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVuaWVudF9oZWFkZXJzACEhbGxodHRwX3NldF9sZW5pZW50X2NodW5rZWRfbGVuZ3RoACIdbGxodHRwX3NldF9sZW5pZW50X2tlZXBfYWxpdmUAIyRsbGh0dHBfc2V0X2xlbmllbnRfdHJhbnNmZXJfZW5jb2RpbmcAJBhsbGh0dHBfbWVzc2FnZV9uZWVkc19lb2YALgkXAQBBAQsRAQIDBAUKBgcrLSwqKSglJyYK07MCLBYAQYjQACgCAARAAAtBiNAAQQE2AgALFAAgABAwIAAgAjYCOCAAIAE6ACgLFAAgACAALwEyIAAtAC4gABAvEAALHgEBf0HAABAyIgEQMCABQYAINgI4IAEgADoAKCABC48MAQd/AkAgAEUNACAAQQhrIgEgAEEEaygCACIAQXhxIgRqIQUCQCAAQQFxDQAgAEEDcUUNASABIAEoAgAiAGsiAUGc0AAoAgBJDQEgACAEaiEEAkACQEGg0AAoAgAgAUcEQCAAQf8BTQRAIABBA3YhAyABKAIIIgAgASgCDCICRgRAQYzQAEGM0AAoAgBBfiADd3E2AgAMBQsgAiAANgIIIAAgAjYCDAwECyABKAIYIQYgASABKAIMIgBHBEAgACABKAIIIgI2AgggAiAANgIMDAMLIAFBFGoiAygCACICRQRAIAEoAhAiAkUNAiABQRBqIQMLA0AgAyEHIAIiAEEUaiIDKAIAIgINACAAQRBqIQMgACgCECICDQALIAdBADYCAAwCCyAFKAIEIgBBA3FBA0cNAiAFIABBfnE2AgRBlNAAIAQ2AgAgBSAENgIAIAEgBEEBcjYCBAwDC0EAIQALIAZFDQACQCABKAIcIgJBAnRBvNIAaiIDKAIAIAFGBEAgAyAANgIAIAANAUGQ0ABBkNAAKAIAQX4gAndxNgIADAILIAZBEEEUIAYoAhAgAUYbaiAANgIAIABFDQELIAAgBjYCGCABKAIQIgIEQCAAIAI2AhAgAiAANgIYCyABQRRqKAIAIgJFDQAgAEEUaiACNgIAIAIgADYCGAsgASAFTw0AIAUoAgQiAEEBcUUNAAJAAkACQAJAIABBAnFFBEBBpNAAKAIAIAVGBEBBpNAAIAE2AgBBmNAAQZjQACgCACAEaiIANgIAIAEgAEEBcjYCBCABQaDQACgCAEcNBkGU0ABBADYCAEGg0ABBADYCAAwGC0Gg0AAoAgAgBUYEQEGg0AAgATYCAEGU0ABBlNAAKAIAIARqIgA2AgAgASAAQQFyNgIEIAAgAWogADYCAAwGCyAAQXhxIARqIQQgAEH/AU0EQCAAQQN2IQMgBSgCCCIAIAUoAgwiAkYEQEGM0ABBjNAAKAIAQX4gA3dxNgIADAULIAIgADYCCCAAIAI2AgwMBAsgBSgCGCEGIAUgBSgCDCIARwRAQZzQACgCABogACAFKAIIIgI2AgggAiAANgIMDAMLIAVBFGoiAygCACICRQRAIAUoAhAiAkUNAiAFQRBqIQMLA0AgAyEHIAIiAEEUaiIDKAIAIgINACAAQRBqIQMgACgCECICDQALIAdBADYCAAwCCyAFIABBfnE2AgQgASAEaiAENgIAIAEgBEEBcjYCBAwDC0EAIQALIAZFDQACQCAFKAIcIgJBAnRBvNIAaiIDKAIAIAVGBEAgAyAANgIAIAANAUGQ0ABBkNAAKAIAQX4gAndxNgIADAILIAZBEEEUIAYoAhAgBUYbaiAANgIAIABFDQELIAAgBjYCGCAFKAIQIgIEQCAAIAI2AhAgAiAANgIYCyAFQRRqKAIAIgJFDQAgAEEUaiACNgIAIAIgADYCGAsgASAEaiAENgIAIAEgBEEBcjYCBCABQaDQACgCAEcNAEGU0AAgBDYCAAwBCyAEQf8BTQRAIARBeHFBtNAAaiEAAn9BjNAAKAIAIgJBASAEQQN2dCIDcUUEQEGM0AAgAiADcjYCACAADAELIAAoAggLIgIgATYCDCAAIAE2AgggASAANgIMIAEgAjYCCAwBC0EfIQIgBEH///8HTQRAIARBJiAEQQh2ZyIAa3ZBAXEgAEEBdGtBPmohAgsgASACNgIcIAFCADcCECACQQJ0QbzSAGohAAJAQZDQACgCACIDQQEgAnQiB3FFBEAgACABNgIAQZDQACADIAdyNgIAIAEgADYCGCABIAE2AgggASABNgIMDAELIARBGSACQQF2a0EAIAJBH0cbdCECIAAoAgAhAAJAA0AgACIDKAIEQXhxIARGDQEgAkEddiEAIAJBAXQhAiADIABBBHFqQRBqIgcoAgAiAA0ACyAHIAE2AgAgASADNgIYIAEgATYCDCABIAE2AggMAQsgAygCCCIAIAE2AgwgAyABNgIIIAFBADYCGCABIAM2AgwgASAANgIIC0Gs0ABBrNAAKAIAQQFrIgBBfyAAGzYCAAsLBwAgAC0AKAsHACAALQAqCwcAIAAtACsLBwAgAC0AKQsHACAALwEyCwcAIAAtAC4LQAEEfyAAKAIYIQEgAC0ALSECIAAtACghAyAAKAI4IQQgABAwIAAgBDYCOCAAIAM6ACggACACOgAtIAAgATYCGAu74gECB38DfiABIAJqIQQCQCAAIgIoAgwiAA0AIAIoAgQEQCACIAE2AgQLIwBBEGsiCCQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAIoAhwiA0EBaw7dAdoBAdkBAgMEBQYHCAkKCwwNDtgBDxDXARES1gETFBUWFxgZGhvgAd8BHB0e1QEfICEiIyQl1AEmJygpKiss0wHSAS0u0QHQAS8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRtsBR0hJSs8BzgFLzQFMzAFNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBywHKAbgByQG5AcgBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgEA3AELQQAMxgELQQ4MxQELQQ0MxAELQQ8MwwELQRAMwgELQRMMwQELQRQMwAELQRUMvwELQRYMvgELQRgMvQELQRkMvAELQRoMuwELQRsMugELQRwMuQELQR0MuAELQQgMtwELQR4MtgELQSAMtQELQR8MtAELQQcMswELQSEMsgELQSIMsQELQSMMsAELQSQMrwELQRIMrgELQREMrQELQSUMrAELQSYMqwELQScMqgELQSgMqQELQcMBDKgBC0EqDKcBC0ErDKYBC0EsDKUBC0EtDKQBC0EuDKMBC0EvDKIBC0HEAQyhAQtBMAygAQtBNAyfAQtBDAyeAQtBMQydAQtBMgycAQtBMwybAQtBOQyaAQtBNQyZAQtBxQEMmAELQQsMlwELQToMlgELQTYMlQELQQoMlAELQTcMkwELQTgMkgELQTwMkQELQTsMkAELQT0MjwELQQkMjgELQSkMjQELQT4MjAELQT8MiwELQcAADIoBC0HBAAyJAQtBwgAMiAELQcMADIcBC0HEAAyGAQtBxQAMhQELQcYADIQBC0EXDIMBC0HHAAyCAQtByAAMgQELQckADIABC0HKAAx/C0HLAAx+C0HNAAx9C0HMAAx8C0HOAAx7C0HPAAx6C0HQAAx5C0HRAAx4C0HSAAx3C0HTAAx2C0HUAAx1C0HWAAx0C0HVAAxzC0EGDHILQdcADHELQQUMcAtB2AAMbwtBBAxuC0HZAAxtC0HaAAxsC0HbAAxrC0HcAAxqC0EDDGkLQd0ADGgLQd4ADGcLQd8ADGYLQeEADGULQeAADGQLQeIADGMLQeMADGILQQIMYQtB5AAMYAtB5QAMXwtB5gAMXgtB5wAMXQtB6AAMXAtB6QAMWwtB6gAMWgtB6wAMWQtB7AAMWAtB7QAMVwtB7gAMVgtB7wAMVQtB8AAMVAtB8QAMUwtB8gAMUgtB8wAMUQtB9AAMUAtB9QAMTwtB9gAMTgtB9wAMTQtB+AAMTAtB+QAMSwtB+gAMSgtB+wAMSQtB/AAMSAtB/QAMRwtB/gAMRgtB/wAMRQtBgAEMRAtBgQEMQwtBggEMQgtBgwEMQQtBhAEMQAtBhQEMPwtBhgEMPgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADDsYBAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHyAhIyUmKCorLC8wMTIzNDU2Nzk6Ozw9lANAQkRFRklLTk9QUVJTVFVWWFpbXF1eX2BhYmNkZWZnaGpsb3Bxc3V2eHl6e3x/gAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAccByAHJAcsBzAHNAc4BzwGKA4kDiAOHA4QDgwOAA/sC+gL5AvgC9wL0AvMC8gLLAsECsALZAQsgASAERw3wAkHdASEDDLMDCyABIARHDcgBQcMBIQMMsgMLIAEgBEcNe0H3ACEDDLEDCyABIARHDXBB7wAhAwywAwsgASAERw1pQeoAIQMMrwMLIAEgBEcNZUHoACEDDK4DCyABIARHDWJB5gAhAwytAwsgASAERw0aQRghAwysAwsgASAERw0VQRIhAwyrAwsgASAERw1CQcUAIQMMqgMLIAEgBEcNNEE/IQMMqQMLIAEgBEcNMkE8IQMMqAMLIAEgBEcNK0ExIQMMpwMLIAItAC5BAUYNnwMMwQILQQAhAAJAAkACQCACLQAqRQ0AIAItACtFDQAgAi8BMCIDQQJxRQ0BDAILIAIvATAiA0EBcUUNAQtBASEAIAItAChBAUYNACACLwEyIgVB5ABrQeQASQ0AIAVBzAFGDQAgBUGwAkYNACADQcAAcQ0AQQAhACADQYgEcUGABEYNACADQShxQQBHIQALIAJBADsBMCACQQA6AC8gAEUN3wIgAkIANwMgDOACC0EAIQACQCACKAI4IgNFDQAgAygCLCIDRQ0AIAIgAxEAACEACyAARQ3MASAAQRVHDd0CIAJBBDYCHCACIAE2AhQgAkGwGDYCECACQRU2AgxBACEDDKQDCyABIARGBEBBBiEDDKQDCyABQQFqIQFBACEAAkAgAigCOCIDRQ0AIAMoAlQiA0UNACACIAMRAAAhAAsgAA3ZAgwcCyACQgA3AyBBEiEDDIkDCyABIARHDRZBHSEDDKEDCyABIARHBEAgAUEBaiEBQRAhAwyIAwtBByEDDKADCyACIAIpAyAiCiAEIAFrrSILfSIMQgAgCiAMWhs3AyAgCiALWA3UAkEIIQMMnwMLIAEgBEcEQCACQQk2AgggAiABNgIEQRQhAwyGAwtBCSEDDJ4DCyACKQMgQgBSDccBIAIgAi8BMEGAAXI7ATAMQgsgASAERw0/QdAAIQMMnAMLIAEgBEYEQEELIQMMnAMLIAFBAWohAUEAIQACQCACKAI4IgNFDQAgAygCUCIDRQ0AIAIgAxEAACEACyAADc8CDMYBC0EAIQACQCACKAI4IgNFDQAgAygCSCIDRQ0AIAIgAxEAACEACyAARQ3GASAAQRVHDc0CIAJBCzYCHCACIAE2AhQgAkGCGTYCECACQRU2AgxBACEDDJoDC0EAIQACQCACKAI4IgNFDQAgAygCSCIDRQ0AIAIgAxEAACEACyAARQ0MIABBFUcNygIgAkEaNgIcIAIgATYCFCACQYIZNgIQIAJBFTYCDEEAIQMMmQMLQQAhAAJAIAIoAjgiA0UNACADKAJMIgNFDQAgAiADEQAAIQALIABFDcQBIABBFUcNxwIgAkELNgIcIAIgATYCFCACQZEXNgIQIAJBFTYCDEEAIQMMmAMLIAEgBEYEQEEPIQMMmAMLIAEtAAAiAEE7Rg0HIABBDUcNxAIgAUEBaiEBDMMBC0EAIQACQCACKAI4IgNFDQAgAygCTCIDRQ0AIAIgAxEAACEACyAARQ3DASAAQRVHDcICIAJBDzYCHCACIAE2AhQgAkGRFzYCECACQRU2AgxBACEDDJYDCwNAIAEtAABB8DVqLQAAIgBBAUcEQCAAQQJHDcECIAIoAgQhAEEAIQMgAkEANgIEIAIgACABQQFqIgEQLSIADcICDMUBCyAEIAFBAWoiAUcNAAtBEiEDDJUDC0EAIQACQCACKAI4IgNFDQAgAygCTCIDRQ0AIAIgAxEAACEACyAARQ3FASAAQRVHDb0CIAJBGzYCHCACIAE2AhQgAkGRFzYCECACQRU2AgxBACEDDJQDCyABIARGBEBBFiEDDJQDCyACQQo2AgggAiABNgIEQQAhAAJAIAIoAjgiA0UNACADKAJIIgNFDQAgAiADEQAAIQALIABFDcIBIABBFUcNuQIgAkEVNgIcIAIgATYCFCACQYIZNgIQIAJBFTYCDEEAIQMMkwMLIAEgBEcEQANAIAEtAABB8DdqLQAAIgBBAkcEQAJAIABBAWsOBMQCvQIAvgK9AgsgAUEBaiEBQQghAwz8AgsgBCABQQFqIgFHDQALQRUhAwyTAwtBFSEDDJIDCwNAIAEtAABB8DlqLQAAIgBBAkcEQCAAQQFrDgTFArcCwwK4ArcCCyAEIAFBAWoiAUcNAAtBGCEDDJEDCyABIARHBEAgAkELNgIIIAIgATYCBEEHIQMM+AILQRkhAwyQAwsgAUEBaiEBDAILIAEgBEYEQEEaIQMMjwMLAkAgAS0AAEENaw4UtQG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwEAvwELQQAhAyACQQA2AhwgAkGvCzYCECACQQI2AgwgAiABQQFqNgIUDI4DCyABIARGBEBBGyEDDI4DCyABLQAAIgBBO0cEQCAAQQ1HDbECIAFBAWohAQy6AQsgAUEBaiEBC0EiIQMM8wILIAEgBEYEQEEcIQMMjAMLQgAhCgJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAS0AAEEwaw43wQLAAgABAgMEBQYH0AHQAdAB0AHQAdAB0AEICQoLDA3QAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdABDg8QERIT0AELQgIhCgzAAgtCAyEKDL8CC0IEIQoMvgILQgUhCgy9AgtCBiEKDLwCC0IHIQoMuwILQgghCgy6AgtCCSEKDLkCC0IKIQoMuAILQgshCgy3AgtCDCEKDLYCC0INIQoMtQILQg4hCgy0AgtCDyEKDLMCC0IKIQoMsgILQgshCgyxAgtCDCEKDLACC0INIQoMrwILQg4hCgyuAgtCDyEKDK0CC0IAIQoCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEtAABBMGsON8ACvwIAAQIDBAUGB74CvgK+Ar4CvgK+Ar4CCAkKCwwNvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ag4PEBESE74CC0ICIQoMvwILQgMhCgy+AgtCBCEKDL0CC0IFIQoMvAILQgYhCgy7AgtCByEKDLoCC0IIIQoMuQILQgkhCgy4AgtCCiEKDLcCC0ILIQoMtgILQgwhCgy1AgtCDSEKDLQCC0IOIQoMswILQg8hCgyyAgtCCiEKDLECC0ILIQoMsAILQgwhCgyvAgtCDSEKDK4CC0IOIQoMrQILQg8hCgysAgsgAiACKQMgIgogBCABa60iC30iDEIAIAogDFobNwMgIAogC1gNpwJBHyEDDIkDCyABIARHBEAgAkEJNgIIIAIgATYCBEElIQMM8AILQSAhAwyIAwtBASEFIAIvATAiA0EIcUUEQCACKQMgQgBSIQULAkAgAi0ALgRAQQEhACACLQApQQVGDQEgA0HAAHFFIAVxRQ0BC0EAIQAgA0HAAHENAEECIQAgA0EIcQ0AIANBgARxBEACQCACLQAoQQFHDQAgAi0ALUEKcQ0AQQUhAAwCC0EEIQAMAQsgA0EgcUUEQAJAIAItAChBAUYNACACLwEyIgBB5ABrQeQASQ0AIABBzAFGDQAgAEGwAkYNAEEEIQAgA0EocUUNAiADQYgEcUGABEYNAgtBACEADAELQQBBAyACKQMgUBshAAsgAEEBaw4FvgIAsAEBpAKhAgtBESEDDO0CCyACQQE6AC8MhAMLIAEgBEcNnQJBJCEDDIQDCyABIARHDRxBxgAhAwyDAwtBACEAAkAgAigCOCIDRQ0AIAMoAkQiA0UNACACIAMRAAAhAAsgAEUNJyAAQRVHDZgCIAJB0AA2AhwgAiABNgIUIAJBkRg2AhAgAkEVNgIMQQAhAwyCAwsgASAERgRAQSghAwyCAwtBACEDIAJBADYCBCACQQw2AgggAiABIAEQKiIARQ2UAiACQSc2AhwgAiABNgIUIAIgADYCDAyBAwsgASAERgRAQSkhAwyBAwsgAS0AACIAQSBGDRMgAEEJRw2VAiABQQFqIQEMFAsgASAERwRAIAFBAWohAQwWC0EqIQMM/wILIAEgBEYEQEErIQMM/wILIAEtAAAiAEEJRyAAQSBHcQ2QAiACLQAsQQhHDd0CIAJBADoALAzdAgsgASAERgRAQSwhAwz+AgsgAS0AAEEKRw2OAiABQQFqIQEMsAELIAEgBEcNigJBLyEDDPwCCwNAIAEtAAAiAEEgRwRAIABBCmsOBIQCiAKIAoQChgILIAQgAUEBaiIBRw0AC0ExIQMM+wILQTIhAyABIARGDfoCIAIoAgAiACAEIAFraiEHIAEgAGtBA2ohBgJAA0AgAEHwO2otAAAgAS0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDQEgAEEDRgRAQQYhAQziAgsgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAc2AgAM+wILIAJBADYCAAyGAgtBMyEDIAQgASIARg35AiAEIAFrIAIoAgAiAWohByAAIAFrQQhqIQYCQANAIAFB9DtqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBCEYEQEEFIQEM4QILIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADPoCCyACQQA2AgAgACEBDIUCC0E0IQMgBCABIgBGDfgCIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgJAA0AgAUHQwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBBUYEQEEHIQEM4AILIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADPkCCyACQQA2AgAgACEBDIQCCyABIARHBEADQCABLQAAQYA+ai0AACIAQQFHBEAgAEECRg0JDIECCyAEIAFBAWoiAUcNAAtBMCEDDPgCC0EwIQMM9wILIAEgBEcEQANAIAEtAAAiAEEgRwRAIABBCmsOBP8B/gH+Af8B/gELIAQgAUEBaiIBRw0AC0E4IQMM9wILQTghAwz2AgsDQCABLQAAIgBBIEcgAEEJR3EN9gEgBCABQQFqIgFHDQALQTwhAwz1AgsDQCABLQAAIgBBIEcEQAJAIABBCmsOBPkBBAT5AQALIABBLEYN9QEMAwsgBCABQQFqIgFHDQALQT8hAwz0AgtBwAAhAyABIARGDfMCIAIoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAEGAQGstAAAgAS0AAEEgckcNASAAQQZGDdsCIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPQCCyACQQA2AgALQTYhAwzZAgsgASAERgRAQcEAIQMM8gILIAJBDDYCCCACIAE2AgQgAi0ALEEBaw4E+wHuAewB6wHUAgsgAUEBaiEBDPoBCyABIARHBEADQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxIgBBCUYNACAAQSBGDQACQAJAAkACQCAAQeMAaw4TAAMDAwMDAwMBAwMDAwMDAwMDAgMLIAFBAWohAUExIQMM3AILIAFBAWohAUEyIQMM2wILIAFBAWohAUEzIQMM2gILDP4BCyAEIAFBAWoiAUcNAAtBNSEDDPACC0E1IQMM7wILIAEgBEcEQANAIAEtAABBgDxqLQAAQQFHDfcBIAQgAUEBaiIBRw0AC0E9IQMM7wILQT0hAwzuAgtBACEAAkAgAigCOCIDRQ0AIAMoAkAiA0UNACACIAMRAAAhAAsgAEUNASAAQRVHDeYBIAJBwgA2AhwgAiABNgIUIAJB4xg2AhAgAkEVNgIMQQAhAwztAgsgAUEBaiEBC0E8IQMM0gILIAEgBEYEQEHCACEDDOsCCwJAA0ACQCABLQAAQQlrDhgAAswCzALRAswCzALMAswCzALMAswCzALMAswCzALMAswCzALMAswCzALMAgDMAgsgBCABQQFqIgFHDQALQcIAIQMM6wILIAFBAWohASACLQAtQQFxRQ3+AQtBLCEDDNACCyABIARHDd4BQcQAIQMM6AILA0AgAS0AAEGQwABqLQAAQQFHDZwBIAQgAUEBaiIBRw0AC0HFACEDDOcCCyABLQAAIgBBIEYN/gEgAEE6Rw3AAiACKAIEIQBBACEDIAJBADYCBCACIAAgARApIgAN3gEM3QELQccAIQMgBCABIgBGDeUCIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgNAIAFBkMIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNvwIgAUEFRg3CAiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBzYCAAzlAgtByAAhAyAEIAEiAEYN5AIgBCABayACKAIAIgFqIQcgACABa0EJaiEGA0AgAUGWwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw2+AkECIAFBCUYNwgIaIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADOQCCyABIARGBEBByQAhAwzkAgsCQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxQe4Aaw4HAL8CvwK/Ar8CvwIBvwILIAFBAWohAUE+IQMMywILIAFBAWohAUE/IQMMygILQcoAIQMgBCABIgBGDeICIAQgAWsgAigCACIBaiEGIAAgAWtBAWohBwNAIAFBoMIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNvAIgAUEBRg2+AiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBjYCAAziAgtBywAhAyAEIAEiAEYN4QIgBCABayACKAIAIgFqIQcgACABa0EOaiEGA0AgAUGiwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw27AiABQQ5GDb4CIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADOECC0HMACEDIAQgASIARg3gAiAEIAFrIAIoAgAiAWohByAAIAFrQQ9qIQYDQCABQcDCAGotAAAgAC0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDboCQQMgAUEPRg2+AhogAUEBaiEBIAQgAEEBaiIARw0ACyACIAc2AgAM4AILQc0AIQMgBCABIgBGDd8CIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgNAIAFB0MIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNuQJBBCABQQVGDb0CGiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBzYCAAzfAgsgASAERgRAQc4AIQMM3wILAkACQAJAAkAgAS0AACIAQSByIAAgAEHBAGtB/wFxQRpJG0H/AXFB4wBrDhMAvAK8ArwCvAK8ArwCvAK8ArwCvAK8ArwCAbwCvAK8AgIDvAILIAFBAWohAUHBACEDDMgCCyABQQFqIQFBwgAhAwzHAgsgAUEBaiEBQcMAIQMMxgILIAFBAWohAUHEACEDDMUCCyABIARHBEAgAkENNgIIIAIgATYCBEHFACEDDMUCC0HPACEDDN0CCwJAAkAgAS0AAEEKaw4EAZABkAEAkAELIAFBAWohAQtBKCEDDMMCCyABIARGBEBB0QAhAwzcAgsgAS0AAEEgRw0AIAFBAWohASACLQAtQQFxRQ3QAQtBFyEDDMECCyABIARHDcsBQdIAIQMM2QILQdMAIQMgASAERg3YAiACKAIAIgAgBCABa2ohBiABIABrQQFqIQUDQCABLQAAIABB1sIAai0AAEcNxwEgAEEBRg3KASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBjYCAAzYAgsgASAERgRAQdUAIQMM2AILIAEtAABBCkcNwgEgAUEBaiEBDMoBCyABIARGBEBB1gAhAwzXAgsCQAJAIAEtAABBCmsOBADDAcMBAcMBCyABQQFqIQEMygELIAFBAWohAUHKACEDDL0CC0EAIQACQCACKAI4IgNFDQAgAygCPCIDRQ0AIAIgAxEAACEACyAADb8BQc0AIQMMvAILIAItAClBIkYNzwIMiQELIAQgASIFRgRAQdsAIQMM1AILQQAhAEEBIQFBASEGQQAhAwJAAn8CQAJAAkACQAJAAkACQCAFLQAAQTBrDgrFAcQBAAECAwQFBgjDAQtBAgwGC0EDDAULQQQMBAtBBQwDC0EGDAILQQcMAQtBCAshA0EAIQFBACEGDL0BC0EJIQNBASEAQQAhAUEAIQYMvAELIAEgBEYEQEHdACEDDNMCCyABLQAAQS5HDbgBIAFBAWohAQyIAQsgASAERw22AUHfACEDDNECCyABIARHBEAgAkEONgIIIAIgATYCBEHQACEDDLgCC0HgACEDDNACC0HhACEDIAEgBEYNzwIgAigCACIAIAQgAWtqIQUgASAAa0EDaiEGA0AgAS0AACAAQeLCAGotAABHDbEBIABBA0YNswEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMzwILQeIAIQMgASAERg3OAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYDQCABLQAAIABB5sIAai0AAEcNsAEgAEECRg2vASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAzOAgtB4wAhAyABIARGDc0CIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgNAIAEtAAAgAEHpwgBqLQAARw2vASAAQQNGDa0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADM0CCyABIARGBEBB5QAhAwzNAgsgAUEBaiEBQQAhAAJAIAIoAjgiA0UNACADKAIwIgNFDQAgAiADEQAAIQALIAANqgFB1gAhAwyzAgsgASAERwRAA0AgAS0AACIAQSBHBEACQAJAAkAgAEHIAGsOCwABswGzAbMBswGzAbMBswGzAQKzAQsgAUEBaiEBQdIAIQMMtwILIAFBAWohAUHTACEDDLYCCyABQQFqIQFB1AAhAwy1AgsgBCABQQFqIgFHDQALQeQAIQMMzAILQeQAIQMMywILA0AgAS0AAEHwwgBqLQAAIgBBAUcEQCAAQQJrDgOnAaYBpQGkAQsgBCABQQFqIgFHDQALQeYAIQMMygILIAFBAWogASAERw0CGkHnACEDDMkCCwNAIAEtAABB8MQAai0AACIAQQFHBEACQCAAQQJrDgSiAaEBoAEAnwELQdcAIQMMsQILIAQgAUEBaiIBRw0AC0HoACEDDMgCCyABIARGBEBB6QAhAwzIAgsCQCABLQAAIgBBCmsOGrcBmwGbAbQBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBpAGbAZsBAJkBCyABQQFqCyEBQQYhAwytAgsDQCABLQAAQfDGAGotAABBAUcNfSAEIAFBAWoiAUcNAAtB6gAhAwzFAgsgAUEBaiABIARHDQIaQesAIQMMxAILIAEgBEYEQEHsACEDDMQCCyABQQFqDAELIAEgBEYEQEHtACEDDMMCCyABQQFqCyEBQQQhAwyoAgsgASAERgRAQe4AIQMMwQILAkACQAJAIAEtAABB8MgAai0AAEEBaw4HkAGPAY4BAHwBAo0BCyABQQFqIQEMCwsgAUEBagyTAQtBACEDIAJBADYCHCACQZsSNgIQIAJBBzYCDCACIAFBAWo2AhQMwAILAkADQCABLQAAQfDIAGotAAAiAEEERwRAAkACQCAAQQFrDgeUAZMBkgGNAQAEAY0BC0HaACEDDKoCCyABQQFqIQFB3AAhAwypAgsgBCABQQFqIgFHDQALQe8AIQMMwAILIAFBAWoMkQELIAQgASIARgRAQfAAIQMMvwILIAAtAABBL0cNASAAQQFqIQEMBwsgBCABIgBGBEBB8QAhAwy+AgsgAC0AACIBQS9GBEAgAEEBaiEBQd0AIQMMpQILIAFBCmsiA0EWSw0AIAAhAUEBIAN0QYmAgAJxDfkBC0EAIQMgAkEANgIcIAIgADYCFCACQYwcNgIQIAJBBzYCDAy8AgsgASAERwRAIAFBAWohAUHeACEDDKMCC0HyACEDDLsCCyABIARGBEBB9AAhAwy7AgsCQCABLQAAQfDMAGotAABBAWsOA/cBcwCCAQtB4QAhAwyhAgsgASAERwRAA0AgAS0AAEHwygBqLQAAIgBBA0cEQAJAIABBAWsOAvkBAIUBC0HfACEDDKMCCyAEIAFBAWoiAUcNAAtB8wAhAwy6AgtB8wAhAwy5AgsgASAERwRAIAJBDzYCCCACIAE2AgRB4AAhAwygAgtB9QAhAwy4AgsgASAERgRAQfYAIQMMuAILIAJBDzYCCCACIAE2AgQLQQMhAwydAgsDQCABLQAAQSBHDY4CIAQgAUEBaiIBRw0AC0H3ACEDDLUCCyABIARGBEBB+AAhAwy1AgsgAS0AAEEgRw16IAFBAWohAQxbC0EAIQACQCACKAI4IgNFDQAgAygCOCIDRQ0AIAIgAxEAACEACyAADXgMgAILIAEgBEYEQEH6ACEDDLMCCyABLQAAQcwARw10IAFBAWohAUETDHYLQfsAIQMgASAERg2xAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYDQCABLQAAIABB8M4Aai0AAEcNcyAAQQVGDXUgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMsQILIAEgBEYEQEH8ACEDDLECCwJAAkAgAS0AAEHDAGsODAB0dHR0dHR0dHR0AXQLIAFBAWohAUHmACEDDJgCCyABQQFqIQFB5wAhAwyXAgtB/QAhAyABIARGDa8CIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQe3PAGotAABHDXIgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADLACCyACQQA2AgAgBkEBaiEBQRAMcwtB/gAhAyABIARGDa4CIAIoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQfbOAGotAABHDXEgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADK8CCyACQQA2AgAgBkEBaiEBQRYMcgtB/wAhAyABIARGDa0CIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQfzOAGotAABHDXAgAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADK4CCyACQQA2AgAgBkEBaiEBQQUMcQsgASAERgRAQYABIQMMrQILIAEtAABB2QBHDW4gAUEBaiEBQQgMcAsgASAERgRAQYEBIQMMrAILAkACQCABLQAAQc4Aaw4DAG8BbwsgAUEBaiEBQesAIQMMkwILIAFBAWohAUHsACEDDJICCyABIARGBEBBggEhAwyrAgsCQAJAIAEtAABByABrDggAbm5ubm5uAW4LIAFBAWohAUHqACEDDJICCyABQQFqIQFB7QAhAwyRAgtBgwEhAyABIARGDakCIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQYDPAGotAABHDWwgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADKoCCyACQQA2AgAgBkEBaiEBQQAMbQtBhAEhAyABIARGDagCIAIoAgAiACAEIAFraiEFIAEgAGtBBGohBgJAA0AgAS0AACAAQYPPAGotAABHDWsgAEEERg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADKkCCyACQQA2AgAgBkEBaiEBQSMMbAsgASAERgRAQYUBIQMMqAILAkACQCABLQAAQcwAaw4IAGtra2trawFrCyABQQFqIQFB7wAhAwyPAgsgAUEBaiEBQfAAIQMMjgILIAEgBEYEQEGGASEDDKcCCyABLQAAQcUARw1oIAFBAWohAQxgC0GHASEDIAEgBEYNpQIgAigCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBiM8Aai0AAEcNaCAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMpgILIAJBADYCACAGQQFqIQFBLQxpC0GIASEDIAEgBEYNpAIgAigCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABB0M8Aai0AAEcNZyAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMpQILIAJBADYCACAGQQFqIQFBKQxoCyABIARGBEBBiQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEVDF8LQZIBIQMgASAERg2aAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGhzwBqLQAARw1dIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAybAgsgAkEANgIAIAZBAWohAUEeDF4LIAEgBEYEQEGTASEDDJoCCyABLQAAQcwARw1bIAFBAWohAUEKDF0LIAEgBEYEQEGUASEDDJkCCwJAAkAgAS0AAEHBAGsODwBcXFxcXFxcXFxcXFxcAVwLIAFBAWohAUH+ACEDDIACCyABQQFqIQFB/wAhAwz/AQsgASAERgRAQZUBIQMMmAILAkACQCABLQAAQcEAaw4DAFsBWwsgAUEBaiEBQf0AIQMM/wELIAFBAWohAUGAASEDDP4BC0GWASEDIAEgBEYNlgIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBp88Aai0AAEcNWSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlwILIAJBADYCACAGQQFqIQFBCwxaCyABIARGBEBBlwEhAwyWAgsCQAJAAkACQCABLQAAQS1rDiMAW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1sBW1tbW1sCW1tbA1sLIAFBAWohAUH7ACEDDP8BCyABQQFqIQFB/AAhAwz+AQsgAUEBaiEBQYEBIQMM/QELIAFBAWohAUGCASEDDPwBC0GYASEDIAEgBEYNlAIgAigCACIAIAQgAWtqIQUgASAAa0EEaiEGAkADQCABLQAAIABBqc8Aai0AAEcNVyAAQQRGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlQILIAJBADYCACAGQQFqIQFBGQxYC0GZASEDIAEgBEYNkwIgAigCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBrs8Aai0AAEcNViAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlAILIAJBADYCACAGQQFqIQFBBgxXC0GaASEDIAEgBEYNkgIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBtM8Aai0AAEcNVSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMkwILIAJBADYCACAGQQFqIQFBHAxWC0GbASEDIAEgBEYNkQIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBts8Aai0AAEcNVCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMkgILIAJBADYCACAGQQFqIQFBJwxVCyABIARGBEBBnAEhAwyRAgsCQAJAIAEtAABB1ABrDgIAAVQLIAFBAWohAUGGASEDDPgBCyABQQFqIQFBhwEhAwz3AQtBnQEhAyABIARGDY8CIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbjPAGotAABHDVIgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADJACCyACQQA2AgAgBkEBaiEBQSYMUwtBngEhAyABIARGDY4CIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbrPAGotAABHDVEgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI8CCyACQQA2AgAgBkEBaiEBQQMMUgtBnwEhAyABIARGDY0CIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQe3PAGotAABHDVAgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI4CCyACQQA2AgAgBkEBaiEBQQwMUQtBoAEhAyABIARGDYwCIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQbzPAGotAABHDU8gAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI0CCyACQQA2AgAgBkEBaiEBQQ0MUAsgASAERgRAQaEBIQMMjAILAkACQCABLQAAQcYAaw4LAE9PT09PT09PTwFPCyABQQFqIQFBiwEhAwzzAQsgAUEBaiEBQYwBIQMM8gELIAEgBEYEQEGiASEDDIsCCyABLQAAQdAARw1MIAFBAWohAQxGCyABIARGBEBBowEhAwyKAgsCQAJAIAEtAABByQBrDgcBTU1NTU0ATQsgAUEBaiEBQY4BIQMM8QELIAFBAWohAUEiDE0LQaQBIQMgASAERg2IAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHAzwBqLQAARw1LIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyJAgsgAkEANgIAIAZBAWohAUEdDEwLIAEgBEYEQEGlASEDDIgCCwJAAkAgAS0AAEHSAGsOAwBLAUsLIAFBAWohAUGQASEDDO8BCyABQQFqIQFBBAxLCyABIARGBEBBpgEhAwyHAgsCQAJAAkACQAJAIAEtAABBwQBrDhUATU1NTU1NTU1NTQFNTQJNTQNNTQRNCyABQQFqIQFBiAEhAwzxAQsgAUEBaiEBQYkBIQMM8AELIAFBAWohAUGKASEDDO8BCyABQQFqIQFBjwEhAwzuAQsgAUEBaiEBQZEBIQMM7QELQacBIQMgASAERg2FAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHtzwBqLQAARw1IIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyGAgsgAkEANgIAIAZBAWohAUERDEkLQagBIQMgASAERg2EAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHCzwBqLQAARw1HIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyFAgsgAkEANgIAIAZBAWohAUEsDEgLQakBIQMgASAERg2DAiACKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEHFzwBqLQAARw1GIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyEAgsgAkEANgIAIAZBAWohAUErDEcLQaoBIQMgASAERg2CAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHKzwBqLQAARw1FIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyDAgsgAkEANgIAIAZBAWohAUEUDEYLIAEgBEYEQEGrASEDDIICCwJAAkACQAJAIAEtAABBwgBrDg8AAQJHR0dHR0dHR0dHRwNHCyABQQFqIQFBkwEhAwzrAQsgAUEBaiEBQZQBIQMM6gELIAFBAWohAUGVASEDDOkBCyABQQFqIQFBlgEhAwzoAQsgASAERgRAQawBIQMMgQILIAEtAABBxQBHDUIgAUEBaiEBDD0LQa0BIQMgASAERg3/ASACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHNzwBqLQAARw1CIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyAAgsgAkEANgIAIAZBAWohAUEODEMLIAEgBEYEQEGuASEDDP8BCyABLQAAQdAARw1AIAFBAWohAUElDEILQa8BIQMgASAERg39ASACKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEHQzwBqLQAARw1AIABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz+AQsgAkEANgIAIAZBAWohAUEqDEELIAEgBEYEQEGwASEDDP0BCwJAAkAgAS0AAEHVAGsOCwBAQEBAQEBAQEABQAsgAUEBaiEBQZoBIQMM5AELIAFBAWohAUGbASEDDOMBCyABIARGBEBBsQEhAwz8AQsCQAJAIAEtAABBwQBrDhQAPz8/Pz8/Pz8/Pz8/Pz8/Pz8/AT8LIAFBAWohAUGZASEDDOMBCyABQQFqIQFBnAEhAwziAQtBsgEhAyABIARGDfoBIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQdnPAGotAABHDT0gAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPsBCyACQQA2AgAgBkEBaiEBQSEMPgtBswEhAyABIARGDfkBIAIoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAS0AACAAQd3PAGotAABHDTwgAEEGRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPoBCyACQQA2AgAgBkEBaiEBQRoMPQsgASAERgRAQbQBIQMM+QELAkACQAJAIAEtAABBxQBrDhEAPT09PT09PT09AT09PT09Aj0LIAFBAWohAUGdASEDDOEBCyABQQFqIQFBngEhAwzgAQsgAUEBaiEBQZ8BIQMM3wELQbUBIQMgASAERg33ASACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHkzwBqLQAARw06IABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz4AQsgAkEANgIAIAZBAWohAUEoDDsLQbYBIQMgASAERg32ASACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHqzwBqLQAARw05IABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz3AQsgAkEANgIAIAZBAWohAUEHDDoLIAEgBEYEQEG3ASEDDPYBCwJAAkAgAS0AAEHFAGsODgA5OTk5OTk5OTk5OTkBOQsgAUEBaiEBQaEBIQMM3QELIAFBAWohAUGiASEDDNwBC0G4ASEDIAEgBEYN9AEgAigCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABB7c8Aai0AAEcNNyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM9QELIAJBADYCACAGQQFqIQFBEgw4C0G5ASEDIAEgBEYN8wEgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8M8Aai0AAEcNNiAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM9AELIAJBADYCACAGQQFqIQFBIAw3C0G6ASEDIAEgBEYN8gEgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8s8Aai0AAEcNNSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM8wELIAJBADYCACAGQQFqIQFBDww2CyABIARGBEBBuwEhAwzyAQsCQAJAIAEtAABByQBrDgcANTU1NTUBNQsgAUEBaiEBQaUBIQMM2QELIAFBAWohAUGmASEDDNgBC0G8ASEDIAEgBEYN8AEgAigCACIAIAQgAWtqIQUgASAAa0EHaiEGAkADQCABLQAAIABB9M8Aai0AAEcNMyAAQQdGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM8QELIAJBADYCACAGQQFqIQFBGww0CyABIARGBEBBvQEhAwzwAQsCQAJAAkAgAS0AAEHCAGsOEgA0NDQ0NDQ0NDQBNDQ0NDQ0AjQLIAFBAWohAUGkASEDDNgBCyABQQFqIQFBpwEhAwzXAQsgAUEBaiEBQagBIQMM1gELIAEgBEYEQEG+ASEDDO8BCyABLQAAQc4ARw0wIAFBAWohAQwsCyABIARGBEBBvwEhAwzuAQsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABLQAAQcEAaw4VAAECAz8EBQY/Pz8HCAkKCz8MDQ4PPwsgAUEBaiEBQegAIQMM4wELIAFBAWohAUHpACEDDOIBCyABQQFqIQFB7gAhAwzhAQsgAUEBaiEBQfIAIQMM4AELIAFBAWohAUHzACEDDN8BCyABQQFqIQFB9gAhAwzeAQsgAUEBaiEBQfcAIQMM3QELIAFBAWohAUH6ACEDDNwBCyABQQFqIQFBgwEhAwzbAQsgAUEBaiEBQYQBIQMM2gELIAFBAWohAUGFASEDDNkBCyABQQFqIQFBkgEhAwzYAQsgAUEBaiEBQZgBIQMM1wELIAFBAWohAUGgASEDDNYBCyABQQFqIQFBowEhAwzVAQsgAUEBaiEBQaoBIQMM1AELIAEgBEcEQCACQRA2AgggAiABNgIEQasBIQMM1AELQcABIQMM7AELQQAhAAJAIAIoAjgiA0UNACADKAI0IgNFDQAgAiADEQAAIQALIABFDV4gAEEVRw0HIAJB0QA2AhwgAiABNgIUIAJBsBc2AhAgAkEVNgIMQQAhAwzrAQsgAUEBaiABIARHDQgaQcIBIQMM6gELA0ACQCABLQAAQQprDgQIAAALAAsgBCABQQFqIgFHDQALQcMBIQMM6QELIAEgBEcEQCACQRE2AgggAiABNgIEQQEhAwzQAQtBxAEhAwzoAQsgASAERgRAQcUBIQMM6AELAkACQCABLQAAQQprDgQBKCgAKAsgAUEBagwJCyABQQFqDAULIAEgBEYEQEHGASEDDOcBCwJAAkAgAS0AAEEKaw4XAQsLAQsLCwsLCwsLCwsLCwsLCwsLCwALCyABQQFqIQELQbABIQMMzQELIAEgBEYEQEHIASEDDOYBCyABLQAAQSBHDQkgAkEAOwEyIAFBAWohAUGzASEDDMwBCwNAIAEhAAJAIAEgBEcEQCABLQAAQTBrQf8BcSIDQQpJDQEMJwtBxwEhAwzmAQsCQCACLwEyIgFBmTNLDQAgAiABQQpsIgU7ATIgBUH+/wNxIANB//8Dc0sNACAAQQFqIQEgAiADIAVqIgM7ATIgA0H//wNxQegHSQ0BCwtBACEDIAJBADYCHCACQcEJNgIQIAJBDTYCDCACIABBAWo2AhQM5AELIAJBADYCHCACIAE2AhQgAkHwDDYCECACQRs2AgxBACEDDOMBCyACKAIEIQAgAkEANgIEIAIgACABECYiAA0BIAFBAWoLIQFBrQEhAwzIAQsgAkHBATYCHCACIAA2AgwgAiABQQFqNgIUQQAhAwzgAQsgAigCBCEAIAJBADYCBCACIAAgARAmIgANASABQQFqCyEBQa4BIQMMxQELIAJBwgE2AhwgAiAANgIMIAIgAUEBajYCFEEAIQMM3QELIAJBADYCHCACIAE2AhQgAkGXCzYCECACQQ02AgxBACEDDNwBCyACQQA2AhwgAiABNgIUIAJB4xA2AhAgAkEJNgIMQQAhAwzbAQsgAkECOgAoDKwBC0EAIQMgAkEANgIcIAJBrws2AhAgAkECNgIMIAIgAUEBajYCFAzZAQtBAiEDDL8BC0ENIQMMvgELQSYhAwy9AQtBFSEDDLwBC0EWIQMMuwELQRghAwy6AQtBHCEDDLkBC0EdIQMMuAELQSAhAwy3AQtBISEDDLYBC0EjIQMMtQELQcYAIQMMtAELQS4hAwyzAQtBPSEDDLIBC0HLACEDDLEBC0HOACEDDLABC0HYACEDDK8BC0HZACEDDK4BC0HbACEDDK0BC0HxACEDDKwBC0H0ACEDDKsBC0GNASEDDKoBC0GXASEDDKkBC0GpASEDDKgBC0GvASEDDKcBC0GxASEDDKYBCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJB8Rs2AhAgAkEGNgIMDL0BCyACQQA2AgAgBkEBaiEBQSQLOgApIAIoAgQhACACQQA2AgQgAiAAIAEQJyIARQRAQeUAIQMMowELIAJB+QA2AhwgAiABNgIUIAIgADYCDEEAIQMMuwELIABBFUcEQCACQQA2AhwgAiABNgIUIAJBzA42AhAgAkEgNgIMQQAhAwy7AQsgAkH4ADYCHCACIAE2AhQgAkHKGDYCECACQRU2AgxBACEDDLoBCyACQQA2AhwgAiABNgIUIAJBjhs2AhAgAkEGNgIMQQAhAwy5AQsgAkEANgIcIAIgATYCFCACQf4RNgIQIAJBBzYCDEEAIQMMuAELIAJBADYCHCACIAE2AhQgAkGMHDYCECACQQc2AgxBACEDDLcBCyACQQA2AhwgAiABNgIUIAJBww82AhAgAkEHNgIMQQAhAwy2AQsgAkEANgIcIAIgATYCFCACQcMPNgIQIAJBBzYCDEEAIQMMtQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxBACEDDKIBCyACQeQANgIcIAIgATYCFCACQeMXNgIQIAJBFTYCDEEAIQMMoQELIAJBADYCACAGQQFqIQEgAi0AKSIAQSNrQQtJDQQCQCAAQQZLDQBBASAAdEHKAHFFDQAMBQtBACEDIAJBADYCHCACIAE2AhQgAkH3CTYCECACQQg2AgwMoAELIAJBADYCACAGQQFqIQEgAi0AKUEhRg0DIAJBADYCHCACIAE2AhQgAkGbCjYCECACQQg2AgxBACEDDJ8BCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJBkDM2AhAgAkEINgIMDJ0BCyACQQA2AgAgBkEBaiEBIAItAClBI0kNACACQQA2AhwgAiABNgIUIAJB0wk2AhAgAkEINgIMQQAhAwycAQtB0QAhAwyCAQsgAS0AAEEwayIAQf8BcUEKSQRAIAIgADoAKiABQQFqIQFBzwAhAwyCAQsgAigCBCEAIAJBADYCBCACIAAgARAoIgBFDYYBIAJB3gA2AhwgAiABNgIUIAIgADYCDEEAIQMMmgELIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ2GASACQdwANgIcIAIgATYCFCACIAA2AgxBACEDDJkBCyACKAIEIQAgAkEANgIEIAIgACAFECgiAEUEQCAFIQEMhwELIAJB2gA2AhwgAiAFNgIUIAIgADYCDAyYAQtBACEBQQEhAwsgAiADOgArIAVBAWohAwJAAkACQCACLQAtQRBxDQACQAJAAkAgAi0AKg4DAQACBAsgBkUNAwwCCyAADQEMAgsgAUUNAQsgAigCBCEAIAJBADYCBCACIAAgAxAoIgBFBEAgAyEBDAILIAJB2AA2AhwgAiADNgIUIAIgADYCDEEAIQMMmAELIAIoAgQhACACQQA2AgQgAiAAIAMQKCIARQRAIAMhAQyHAQsgAkHZADYCHCACIAM2AhQgAiAANgIMQQAhAwyXAQtBzAAhAwx9CyAAQRVHBEAgAkEANgIcIAIgATYCFCACQZQNNgIQIAJBITYCDEEAIQMMlgELIAJB1wA2AhwgAiABNgIUIAJByRc2AhAgAkEVNgIMQQAhAwyVAQtBACEDIAJBADYCHCACIAE2AhQgAkGAETYCECACQQk2AgwMlAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0AIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMkwELQckAIQMMeQsgAkEANgIcIAIgATYCFCACQcEoNgIQIAJBBzYCDCACQQA2AgBBACEDDJEBCyACKAIEIQBBACEDIAJBADYCBCACIAAgARAlIgBFDQAgAkHSADYCHCACIAE2AhQgAiAANgIMDJABC0HIACEDDHYLIAJBADYCACAFIQELIAJBgBI7ASogAUEBaiEBQQAhAAJAIAIoAjgiA0UNACADKAIwIgNFDQAgAiADEQAAIQALIAANAQtBxwAhAwxzCyAAQRVGBEAgAkHRADYCHCACIAE2AhQgAkHjFzYCECACQRU2AgxBACEDDIwBC0EAIQMgAkEANgIcIAIgATYCFCACQbkNNgIQIAJBGjYCDAyLAQtBACEDIAJBADYCHCACIAE2AhQgAkGgGTYCECACQR42AgwMigELIAEtAABBOkYEQCACKAIEIQBBACEDIAJBADYCBCACIAAgARApIgBFDQEgAkHDADYCHCACIAA2AgwgAiABQQFqNgIUDIoBC0EAIQMgAkEANgIcIAIgATYCFCACQbERNgIQIAJBCjYCDAyJAQsgAUEBaiEBQTshAwxvCyACQcMANgIcIAIgADYCDCACIAFBAWo2AhQMhwELQQAhAyACQQA2AhwgAiABNgIUIAJB8A42AhAgAkEcNgIMDIYBCyACIAIvATBBEHI7ATAMZgsCQCACLwEwIgBBCHFFDQAgAi0AKEEBRw0AIAItAC1BCHFFDQMLIAIgAEH3+wNxQYAEcjsBMAwECyABIARHBEACQANAIAEtAABBMGsiAEH/AXFBCk8EQEE1IQMMbgsgAikDICIKQpmz5syZs+bMGVYNASACIApCCn4iCjcDICAKIACtQv8BgyILQn+FVg0BIAIgCiALfDcDICAEIAFBAWoiAUcNAAtBOSEDDIUBCyACKAIEIQBBACEDIAJBADYCBCACIAAgAUEBaiIBECoiAA0MDHcLQTkhAwyDAQsgAi0AMEEgcQ0GQcUBIQMMaQtBACEDIAJBADYCBCACIAEgARAqIgBFDQQgAkE6NgIcIAIgADYCDCACIAFBAWo2AhQMgQELIAItAChBAUcNACACLQAtQQhxRQ0BC0E3IQMMZgsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIABEAgAkE7NgIcIAIgADYCDCACIAFBAWo2AhQMfwsgAUEBaiEBDG4LIAJBCDoALAwECyABQQFqIQEMbQtBACEDIAJBADYCHCACIAE2AhQgAkHkEjYCECACQQQ2AgwMewsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIARQ1sIAJBNzYCHCACIAE2AhQgAiAANgIMDHoLIAIgAi8BMEEgcjsBMAtBMCEDDF8LIAJBNjYCHCACIAE2AhQgAiAANgIMDHcLIABBLEcNASABQQFqIQBBASEBAkACQAJAAkACQCACLQAsQQVrDgQDAQIEAAsgACEBDAQLQQIhAQwBC0EEIQELIAJBAToALCACIAIvATAgAXI7ATAgACEBDAELIAIgAi8BMEEIcjsBMCAAIQELQTkhAwxcCyACQQA6ACwLQTQhAwxaCyABIARGBEBBLSEDDHMLAkACQANAAkAgAS0AAEEKaw4EAgAAAwALIAQgAUEBaiIBRw0AC0EtIQMMdAsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIARQ0CIAJBLDYCHCACIAE2AhQgAiAANgIMDHMLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABECoiAEUEQCABQQFqIQEMAgsgAkEsNgIcIAIgADYCDCACIAFBAWo2AhQMcgsgAS0AAEENRgRAIAIoAgQhAEEAIQMgAkEANgIEIAIgACABECoiAEUEQCABQQFqIQEMAgsgAkEsNgIcIAIgADYCDCACIAFBAWo2AhQMcgsgAi0ALUEBcQRAQcQBIQMMWQsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIADQEMZQtBLyEDDFcLIAJBLjYCHCACIAE2AhQgAiAANgIMDG8LQQAhAyACQQA2AhwgAiABNgIUIAJB8BQ2AhAgAkEDNgIMDG4LQQEhAwJAAkACQAJAIAItACxBBWsOBAMBAgAECyACIAIvATBBCHI7ATAMAwtBAiEDDAELQQQhAwsgAkEBOgAsIAIgAi8BMCADcjsBMAtBKiEDDFMLQQAhAyACQQA2AhwgAiABNgIUIAJB4Q82AhAgAkEKNgIMDGsLQQEhAwJAAkACQAJAAkACQCACLQAsQQJrDgcFBAQDAQIABAsgAiACLwEwQQhyOwEwDAMLQQIhAwwBC0EEIQMLIAJBAToALCACIAIvATAgA3I7ATALQSshAwxSC0EAIQMgAkEANgIcIAIgATYCFCACQasSNgIQIAJBCzYCDAxqC0EAIQMgAkEANgIcIAIgATYCFCACQf0NNgIQIAJBHTYCDAxpCyABIARHBEADQCABLQAAQSBHDUggBCABQQFqIgFHDQALQSUhAwxpC0ElIQMMaAsgAi0ALUEBcQRAQcMBIQMMTwsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKSIABEAgAkEmNgIcIAIgADYCDCACIAFBAWo2AhQMaAsgAUEBaiEBDFwLIAFBAWohASACLwEwIgBBgAFxBEBBACEAAkAgAigCOCIDRQ0AIAMoAlQiA0UNACACIAMRAAAhAAsgAEUNBiAAQRVHDR8gAkEFNgIcIAIgATYCFCACQfkXNgIQIAJBFTYCDEEAIQMMZwsCQCAAQaAEcUGgBEcNACACLQAtQQJxDQBBACEDIAJBADYCHCACIAE2AhQgAkGWEzYCECACQQQ2AgwMZwsgAgJ/IAIvATBBFHFBFEYEQEEBIAItAChBAUYNARogAi8BMkHlAEYMAQsgAi0AKUEFRgs6AC5BACEAAkAgAigCOCIDRQ0AIAMoAiQiA0UNACACIAMRAAAhAAsCQAJAAkACQAJAIAAOFgIBAAQEBAQEBAQEBAQEBAQEBAQEBAMECyACQQE6AC4LIAIgAi8BMEHAAHI7ATALQSchAwxPCyACQSM2AhwgAiABNgIUIAJBpRY2AhAgAkEVNgIMQQAhAwxnC0EAIQMgAkEANgIcIAIgATYCFCACQdULNgIQIAJBETYCDAxmC0EAIQACQCACKAI4IgNFDQAgAygCLCIDRQ0AIAIgAxEAACEACyAADQELQQ4hAwxLCyAAQRVGBEAgAkECNgIcIAIgATYCFCACQbAYNgIQIAJBFTYCDEEAIQMMZAtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMYwtBACEDIAJBADYCHCACIAE2AhQgAkGqHDYCECACQQ82AgwMYgsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEgCqdqIgEQKyIARQ0AIAJBBTYCHCACIAE2AhQgAiAANgIMDGELQQ8hAwxHC0EAIQMgAkEANgIcIAIgATYCFCACQc0TNgIQIAJBDDYCDAxfC0IBIQoLIAFBAWohAQJAIAIpAyAiC0L//////////w9YBEAgAiALQgSGIAqENwMgDAELQQAhAyACQQA2AhwgAiABNgIUIAJBrQk2AhAgAkEMNgIMDF4LQSQhAwxEC0EAIQMgAkEANgIcIAIgATYCFCACQc0TNgIQIAJBDDYCDAxcCyACKAIEIQBBACEDIAJBADYCBCACIAAgARAsIgBFBEAgAUEBaiEBDFILIAJBFzYCHCACIAA2AgwgAiABQQFqNgIUDFsLIAIoAgQhAEEAIQMgAkEANgIEAkAgAiAAIAEQLCIARQRAIAFBAWohAQwBCyACQRY2AhwgAiAANgIMIAIgAUEBajYCFAxbC0EfIQMMQQtBACEDIAJBADYCHCACIAE2AhQgAkGaDzYCECACQSI2AgwMWQsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQLSIARQRAIAFBAWohAQxQCyACQRQ2AhwgAiAANgIMIAIgAUEBajYCFAxYCyACKAIEIQBBACEDIAJBADYCBAJAIAIgACABEC0iAEUEQCABQQFqIQEMAQsgAkETNgIcIAIgADYCDCACIAFBAWo2AhQMWAtBHiEDDD4LQQAhAyACQQA2AhwgAiABNgIUIAJBxgw2AhAgAkEjNgIMDFYLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABEC0iAEUEQCABQQFqIQEMTgsgAkERNgIcIAIgADYCDCACIAFBAWo2AhQMVQsgAkEQNgIcIAIgATYCFCACIAA2AgwMVAtBACEDIAJBADYCHCACIAE2AhQgAkHGDDYCECACQSM2AgwMUwtBACEDIAJBADYCHCACIAE2AhQgAkHAFTYCECACQQI2AgwMUgsgAigCBCEAQQAhAyACQQA2AgQCQCACIAAgARAtIgBFBEAgAUEBaiEBDAELIAJBDjYCHCACIAA2AgwgAiABQQFqNgIUDFILQRshAww4C0EAIQMgAkEANgIcIAIgATYCFCACQcYMNgIQIAJBIzYCDAxQCyACKAIEIQBBACEDIAJBADYCBAJAIAIgACABECwiAEUEQCABQQFqIQEMAQsgAkENNgIcIAIgADYCDCACIAFBAWo2AhQMUAtBGiEDDDYLQQAhAyACQQA2AhwgAiABNgIUIAJBmg82AhAgAkEiNgIMDE4LIAIoAgQhAEEAIQMgAkEANgIEAkAgAiAAIAEQLCIARQRAIAFBAWohAQwBCyACQQw2AhwgAiAANgIMIAIgAUEBajYCFAxOC0EZIQMMNAtBACEDIAJBADYCHCACIAE2AhQgAkGaDzYCECACQSI2AgwMTAsgAEEVRwRAQQAhAyACQQA2AhwgAiABNgIUIAJBgww2AhAgAkETNgIMDEwLIAJBCjYCHCACIAE2AhQgAkHkFjYCECACQRU2AgxBACEDDEsLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABIAqnaiIBECsiAARAIAJBBzYCHCACIAE2AhQgAiAANgIMDEsLQRMhAwwxCyAAQRVHBEBBACEDIAJBADYCHCACIAE2AhQgAkHaDTYCECACQRQ2AgwMSgsgAkEeNgIcIAIgATYCFCACQfkXNgIQIAJBFTYCDEEAIQMMSQtBACEAAkAgAigCOCIDRQ0AIAMoAiwiA0UNACACIAMRAAAhAAsgAEUNQSAAQRVGBEAgAkEDNgIcIAIgATYCFCACQbAYNgIQIAJBFTYCDEEAIQMMSQtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMSAtBACEDIAJBADYCHCACIAE2AhQgAkHaDTYCECACQRQ2AgwMRwtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMRgsgAkEAOgAvIAItAC1BBHFFDT8LIAJBADoALyACQQE6ADRBACEDDCsLQQAhAyACQQA2AhwgAkHkETYCECACQQc2AgwgAiABQQFqNgIUDEMLAkADQAJAIAEtAABBCmsOBAACAgACCyAEIAFBAWoiAUcNAAtB3QEhAwxDCwJAAkAgAi0ANEEBRw0AQQAhAAJAIAIoAjgiA0UNACADKAJYIgNFDQAgAiADEQAAIQALIABFDQAgAEEVRw0BIAJB3AE2AhwgAiABNgIUIAJB1RY2AhAgAkEVNgIMQQAhAwxEC0HBASEDDCoLIAJBADYCHCACIAE2AhQgAkHpCzYCECACQR82AgxBACEDDEILAkACQCACLQAoQQFrDgIEAQALQcABIQMMKQtBuQEhAwwoCyACQQI6AC9BACEAAkAgAigCOCIDRQ0AIAMoAgAiA0UNACACIAMRAAAhAAsgAEUEQEHCASEDDCgLIABBFUcEQCACQQA2AhwgAiABNgIUIAJBpAw2AhAgAkEQNgIMQQAhAwxBCyACQdsBNgIcIAIgATYCFCACQfoWNgIQIAJBFTYCDEEAIQMMQAsgASAERgRAQdoBIQMMQAsgAS0AAEHIAEYNASACQQE6ACgLQawBIQMMJQtBvwEhAwwkCyABIARHBEAgAkEQNgIIIAIgATYCBEG+ASEDDCQLQdkBIQMMPAsgASAERgRAQdgBIQMMPAsgAS0AAEHIAEcNBCABQQFqIQFBvQEhAwwiCyABIARGBEBB1wEhAww7CwJAAkAgAS0AAEHFAGsOEAAFBQUFBQUFBQUFBQUFBQEFCyABQQFqIQFBuwEhAwwiCyABQQFqIQFBvAEhAwwhC0HWASEDIAEgBEYNOSACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGD0ABqLQAARw0DIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAw6CyACKAIEIQAgAkIANwMAIAIgACAGQQFqIgEQJyIARQRAQcYBIQMMIQsgAkHVATYCHCACIAE2AhQgAiAANgIMQQAhAww5C0HUASEDIAEgBEYNOCACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGB0ABqLQAARw0CIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAw5CyACQYEEOwEoIAIoAgQhACACQgA3AwAgAiAAIAZBAWoiARAnIgANAwwCCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJB2Bs2AhAgAkEINgIMDDYLQboBIQMMHAsgAkHTATYCHCACIAE2AhQgAiAANgIMQQAhAww0C0EAIQACQCACKAI4IgNFDQAgAygCOCIDRQ0AIAIgAxEAACEACyAARQ0AIABBFUYNASACQQA2AhwgAiABNgIUIAJBzA42AhAgAkEgNgIMQQAhAwwzC0HkACEDDBkLIAJB+AA2AhwgAiABNgIUIAJByhg2AhAgAkEVNgIMQQAhAwwxC0HSASEDIAQgASIARg0wIAQgAWsgAigCACIBaiEFIAAgAWtBBGohBgJAA0AgAC0AACABQfzPAGotAABHDQEgAUEERg0DIAFBAWohASAEIABBAWoiAEcNAAsgAiAFNgIADDELIAJBADYCHCACIAA2AhQgAkGQMzYCECACQQg2AgwgAkEANgIAQQAhAwwwCyABIARHBEAgAkEONgIIIAIgATYCBEG3ASEDDBcLQdEBIQMMLwsgAkEANgIAIAZBAWohAQtBuAEhAwwUCyABIARGBEBB0AEhAwwtCyABLQAAQTBrIgBB/wFxQQpJBEAgAiAAOgAqIAFBAWohAUG2ASEDDBQLIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ0UIAJBzwE2AhwgAiABNgIUIAIgADYCDEEAIQMMLAsgASAERgRAQc4BIQMMLAsCQCABLQAAQS5GBEAgAUEBaiEBDAELIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ0VIAJBzQE2AhwgAiABNgIUIAIgADYCDEEAIQMMLAtBtQEhAwwSCyAEIAEiBUYEQEHMASEDDCsLQQAhAEEBIQFBASEGQQAhAwJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAUtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyEDQQAhAUEAIQYMAgtBCSEDQQEhAEEAIQFBACEGDAELQQAhAUEBIQMLIAIgAzoAKyAFQQFqIQMCQAJAIAItAC1BEHENAAJAAkACQCACLQAqDgMBAAIECyAGRQ0DDAILIAANAQwCCyABRQ0BCyACKAIEIQAgAkEANgIEIAIgACADECgiAEUEQCADIQEMAwsgAkHJATYCHCACIAM2AhQgAiAANgIMQQAhAwwtCyACKAIEIQAgAkEANgIEIAIgACADECgiAEUEQCADIQEMGAsgAkHKATYCHCACIAM2AhQgAiAANgIMQQAhAwwsCyACKAIEIQAgAkEANgIEIAIgACAFECgiAEUEQCAFIQEMFgsgAkHLATYCHCACIAU2AhQgAiAANgIMDCsLQbQBIQMMEQtBACEAAkAgAigCOCIDRQ0AIAMoAjwiA0UNACACIAMRAAAhAAsCQCAABEAgAEEVRg0BIAJBADYCHCACIAE2AhQgAkGUDTYCECACQSE2AgxBACEDDCsLQbIBIQMMEQsgAkHIATYCHCACIAE2AhQgAkHJFzYCECACQRU2AgxBACEDDCkLIAJBADYCACAGQQFqIQFB9QAhAwwPCyACLQApQQVGBEBB4wAhAwwPC0HiACEDDA4LIAAhASACQQA2AgALIAJBADoALEEJIQMMDAsgAkEANgIAIAdBAWohAUHAACEDDAsLQQELOgAsIAJBADYCACAGQQFqIQELQSkhAwwIC0E4IQMMBwsCQCABIARHBEADQCABLQAAQYA+ai0AACIAQQFHBEAgAEECRw0DIAFBAWohAQwFCyAEIAFBAWoiAUcNAAtBPiEDDCELQT4hAwwgCwsgAkEAOgAsDAELQQshAwwEC0E6IQMMAwsgAUEBaiEBQS0hAwwCCyACIAE6ACwgAkEANgIAIAZBAWohAUEMIQMMAQsgAkEANgIAIAZBAWohAUEKIQMMAAsAC0EAIQMgAkEANgIcIAIgATYCFCACQc0QNgIQIAJBCTYCDAwXC0EAIQMgAkEANgIcIAIgATYCFCACQekKNgIQIAJBCTYCDAwWC0EAIQMgAkEANgIcIAIgATYCFCACQbcQNgIQIAJBCTYCDAwVC0EAIQMgAkEANgIcIAIgATYCFCACQZwRNgIQIAJBCTYCDAwUC0EAIQMgAkEANgIcIAIgATYCFCACQc0QNgIQIAJBCTYCDAwTC0EAIQMgAkEANgIcIAIgATYCFCACQekKNgIQIAJBCTYCDAwSC0EAIQMgAkEANgIcIAIgATYCFCACQbcQNgIQIAJBCTYCDAwRC0EAIQMgAkEANgIcIAIgATYCFCACQZwRNgIQIAJBCTYCDAwQC0EAIQMgAkEANgIcIAIgATYCFCACQZcVNgIQIAJBDzYCDAwPC0EAIQMgAkEANgIcIAIgATYCFCACQZcVNgIQIAJBDzYCDAwOC0EAIQMgAkEANgIcIAIgATYCFCACQcASNgIQIAJBCzYCDAwNC0EAIQMgAkEANgIcIAIgATYCFCACQZUJNgIQIAJBCzYCDAwMC0EAIQMgAkEANgIcIAIgATYCFCACQeEPNgIQIAJBCjYCDAwLC0EAIQMgAkEANgIcIAIgATYCFCACQfsPNgIQIAJBCjYCDAwKC0EAIQMgAkEANgIcIAIgATYCFCACQfEZNgIQIAJBAjYCDAwJC0EAIQMgAkEANgIcIAIgATYCFCACQcQUNgIQIAJBAjYCDAwIC0EAIQMgAkEANgIcIAIgATYCFCACQfIVNgIQIAJBAjYCDAwHCyACQQI2AhwgAiABNgIUIAJBnBo2AhAgAkEWNgIMQQAhAwwGC0EBIQMMBQtB1AAhAyABIARGDQQgCEEIaiEJIAIoAgAhBQJAAkAgASAERwRAIAVB2MIAaiEHIAQgBWogAWshACAFQX9zQQpqIgUgAWohBgNAIAEtAAAgBy0AAEcEQEECIQcMAwsgBUUEQEEAIQcgBiEBDAMLIAVBAWshBSAHQQFqIQcgBCABQQFqIgFHDQALIAAhBSAEIQELIAlBATYCACACIAU2AgAMAQsgAkEANgIAIAkgBzYCAAsgCSABNgIEIAgoAgwhACAIKAIIDgMBBAIACwALIAJBADYCHCACQbUaNgIQIAJBFzYCDCACIABBAWo2AhRBACEDDAILIAJBADYCHCACIAA2AhQgAkHKGjYCECACQQk2AgxBACEDDAELIAEgBEYEQEEiIQMMAQsgAkEJNgIIIAIgATYCBEEhIQMLIAhBEGokACADRQRAIAIoAgwhAAwBCyACIAM2AhxBACEAIAIoAgQiAUUNACACIAEgBCACKAIIEQEAIgFFDQAgAiAENgIUIAIgATYCDCABIQALIAALvgIBAn8gAEEAOgAAIABB3ABqIgFBAWtBADoAACAAQQA6AAIgAEEAOgABIAFBA2tBADoAACABQQJrQQA6AAAgAEEAOgADIAFBBGtBADoAAEEAIABrQQNxIgEgAGoiAEEANgIAQdwAIAFrQXxxIgIgAGoiAUEEa0EANgIAAkAgAkEJSQ0AIABBADYCCCAAQQA2AgQgAUEIa0EANgIAIAFBDGtBADYCACACQRlJDQAgAEEANgIYIABBADYCFCAAQQA2AhAgAEEANgIMIAFBEGtBADYCACABQRRrQQA2AgAgAUEYa0EANgIAIAFBHGtBADYCACACIABBBHFBGHIiAmsiAUEgSQ0AIAAgAmohAANAIABCADcDGCAAQgA3AxAgAEIANwMIIABCADcDACAAQSBqIQAgAUEgayIBQR9LDQALCwtWAQF/AkAgACgCDA0AAkACQAJAAkAgAC0ALw4DAQADAgsgACgCOCIBRQ0AIAEoAiwiAUUNACAAIAERAAAiAQ0DC0EADwsACyAAQcMWNgIQQQ4hAQsgAQsaACAAKAIMRQRAIABB0Rs2AhAgAEEVNgIMCwsUACAAKAIMQRVGBEAgAEEANgIMCwsUACAAKAIMQRZGBEAgAEEANgIMCwsHACAAKAIMCwcAIAAoAhALCQAgACABNgIQCwcAIAAoAhQLFwAgAEEkTwRAAAsgAEECdEGgM2ooAgALFwAgAEEuTwRAAAsgAEECdEGwNGooAgALvwkBAX9B6yghAQJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB9ysPC0GQMQ8LQdcxDwtBoi0PC0HUJw8LQeArDwtBnywPC0HrMQ8LQdUfDwtByjEPC0HeJQ8LQdQeDwtB9BwPC0GnMg8LQbEdDwtBoB0PC0G5MQ8LQbwwDwtBkiEPC0GzJg8LQeksDwtBrB4PC0HUKw8LQfcmDwtBgCYPC0GwIQ8LQf4eDwtBjSMPC0GJLQ8LQfciDwtBoDEPC0GuHw8LQcYlDwtB6B4PC0GTIg8LQcIvDwtBwx0PC0GLLA8LQeEdDwtBjS8PC0HqIQ8LQbQtDwtB0i8PC0HfMg8LQdIyDwtB8DAPC0GpIg8LQfkjDwtBmR4PC0G1LA8LQZswDwtBkjIPC0G2Kw8LQcIiDwtB+DIPC0GeJQ8LQdAiDwtBuh4PC0GBHg8LAAtB1iEhAQsgAQsWACAAIAAtAC1B/gFxIAFBAEdyOgAtCxkAIAAgAC0ALUH9AXEgAUEAR0EBdHI6AC0LGQAgACAALQAtQfsBcSABQQBHQQJ0cjoALQsZACAAIAAtAC1B9wFxIAFBAEdBA3RyOgAtCz4BAn8CQCAAKAI4IgNFDQAgAygCBCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBxhE2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCCCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB9go2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCDCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB7Ro2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCECIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBlRA2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCFCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBqhs2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCGCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB7RM2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCKCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB9gg2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCHCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBwhk2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCICIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBlBQ2AhBBGCEECyAEC1kBAn8CQCAALQAoQQFGDQAgAC8BMiIBQeQAa0HkAEkNACABQcwBRg0AIAFBsAJGDQAgAC8BMCIAQcAAcQ0AQQEhAiAAQYgEcUGABEYNACAAQShxRSECCyACC4wBAQJ/AkACQAJAIAAtACpFDQAgAC0AK0UNACAALwEwIgFBAnFFDQEMAgsgAC8BMCIBQQFxRQ0BC0EBIQIgAC0AKEEBRg0AIAAvATIiAEHkAGtB5ABJDQAgAEHMAUYNACAAQbACRg0AIAFBwABxDQBBACECIAFBiARxQYAERg0AIAFBKHFBAEchAgsgAgtXACAAQRhqQgA3AwAgAEIANwMAIABBOGpCADcDACAAQTBqQgA3AwAgAEEoakIANwMAIABBIGpCADcDACAAQRBqQgA3AwAgAEEIakIANwMAIABB3QE2AhwLBgAgABAyC5otAQt/IwBBEGsiCiQAQaTQACgCACIJRQRAQeTTACgCACIFRQRAQfDTAEJ/NwIAQejTAEKAgISAgIDAADcCAEHk0wAgCkEIakFwcUHYqtWqBXMiBTYCAEH40wBBADYCAEHI0wBBADYCAAtBzNMAQYDUBDYCAEGc0ABBgNQENgIAQbDQACAFNgIAQazQAEF/NgIAQdDTAEGArAM2AgADQCABQcjQAGogAUG80ABqIgI2AgAgAiABQbTQAGoiAzYCACABQcDQAGogAzYCACABQdDQAGogAUHE0ABqIgM2AgAgAyACNgIAIAFB2NAAaiABQczQAGoiAjYCACACIAM2AgAgAUHU0ABqIAI2AgAgAUEgaiIBQYACRw0AC0GM1ARBwasDNgIAQajQAEH00wAoAgA2AgBBmNAAQcCrAzYCAEGk0ABBiNQENgIAQcz/B0E4NgIAQYjUBCEJCwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB7AFNBEBBjNAAKAIAIgZBECAAQRNqQXBxIABBC0kbIgRBA3YiAHYiAUEDcQRAAkAgAUEBcSAAckEBcyICQQN0IgBBtNAAaiIBIABBvNAAaigCACIAKAIIIgNGBEBBjNAAIAZBfiACd3E2AgAMAQsgASADNgIIIAMgATYCDAsgAEEIaiEBIAAgAkEDdCICQQNyNgIEIAAgAmoiACAAKAIEQQFyNgIEDBELQZTQACgCACIIIARPDQEgAQRAAkBBAiAAdCICQQAgAmtyIAEgAHRxaCIAQQN0IgJBtNAAaiIBIAJBvNAAaigCACICKAIIIgNGBEBBjNAAIAZBfiAAd3EiBjYCAAwBCyABIAM2AgggAyABNgIMCyACIARBA3I2AgQgAEEDdCIAIARrIQUgACACaiAFNgIAIAIgBGoiBCAFQQFyNgIEIAgEQCAIQXhxQbTQAGohAEGg0AAoAgAhAwJ/QQEgCEEDdnQiASAGcUUEQEGM0AAgASAGcjYCACAADAELIAAoAggLIgEgAzYCDCAAIAM2AgggAyAANgIMIAMgATYCCAsgAkEIaiEBQaDQACAENgIAQZTQACAFNgIADBELQZDQACgCACILRQ0BIAtoQQJ0QbzSAGooAgAiACgCBEF4cSAEayEFIAAhAgNAAkAgAigCECIBRQRAIAJBFGooAgAiAUUNAQsgASgCBEF4cSAEayIDIAVJIQIgAyAFIAIbIQUgASAAIAIbIQAgASECDAELCyAAKAIYIQkgACgCDCIDIABHBEBBnNAAKAIAGiADIAAoAggiATYCCCABIAM2AgwMEAsgAEEUaiICKAIAIgFFBEAgACgCECIBRQ0DIABBEGohAgsDQCACIQcgASIDQRRqIgIoAgAiAQ0AIANBEGohAiADKAIQIgENAAsgB0EANgIADA8LQX8hBCAAQb9/Sw0AIABBE2oiAUFwcSEEQZDQACgCACIIRQ0AQQAgBGshBQJAAkACQAJ/QQAgBEGAAkkNABpBHyAEQf///wdLDQAaIARBJiABQQh2ZyIAa3ZBAXEgAEEBdGtBPmoLIgZBAnRBvNIAaigCACICRQRAQQAhAUEAIQMMAQtBACEBIARBGSAGQQF2a0EAIAZBH0cbdCEAQQAhAwNAAkAgAigCBEF4cSAEayIHIAVPDQAgAiEDIAciBQ0AQQAhBSACIQEMAwsgASACQRRqKAIAIgcgByACIABBHXZBBHFqQRBqKAIAIgJGGyABIAcbIQEgAEEBdCEAIAINAAsLIAEgA3JFBEBBACEDQQIgBnQiAEEAIABrciAIcSIARQ0DIABoQQJ0QbzSAGooAgAhAQsgAUUNAQsDQCABKAIEQXhxIARrIgIgBUkhACACIAUgABshBSABIAMgABshAyABKAIQIgAEfyAABSABQRRqKAIACyIBDQALCyADRQ0AIAVBlNAAKAIAIARrTw0AIAMoAhghByADIAMoAgwiAEcEQEGc0AAoAgAaIAAgAygCCCIBNgIIIAEgADYCDAwOCyADQRRqIgIoAgAiAUUEQCADKAIQIgFFDQMgA0EQaiECCwNAIAIhBiABIgBBFGoiAigCACIBDQAgAEEQaiECIAAoAhAiAQ0ACyAGQQA2AgAMDQtBlNAAKAIAIgMgBE8EQEGg0AAoAgAhAQJAIAMgBGsiAkEQTwRAIAEgBGoiACACQQFyNgIEIAEgA2ogAjYCACABIARBA3I2AgQMAQsgASADQQNyNgIEIAEgA2oiACAAKAIEQQFyNgIEQQAhAEEAIQILQZTQACACNgIAQaDQACAANgIAIAFBCGohAQwPC0GY0AAoAgAiAyAESwRAIAQgCWoiACADIARrIgFBAXI2AgRBpNAAIAA2AgBBmNAAIAE2AgAgCSAEQQNyNgIEIAlBCGohAQwPC0EAIQEgBAJ/QeTTACgCAARAQezTACgCAAwBC0Hw0wBCfzcCAEHo0wBCgICEgICAwAA3AgBB5NMAIApBDGpBcHFB2KrVqgVzNgIAQfjTAEEANgIAQcjTAEEANgIAQYCABAsiACAEQccAaiIFaiIGQQAgAGsiB3EiAk8EQEH80wBBMDYCAAwPCwJAQcTTACgCACIBRQ0AQbzTACgCACIIIAJqIQAgACABTSAAIAhLcQ0AQQAhAUH80wBBMDYCAAwPC0HI0wAtAABBBHENBAJAAkAgCQRAQczTACEBA0AgASgCACIAIAlNBEAgACABKAIEaiAJSw0DCyABKAIIIgENAAsLQQAQMyIAQX9GDQUgAiEGQejTACgCACIBQQFrIgMgAHEEQCACIABrIAAgA2pBACABa3FqIQYLIAQgBk8NBSAGQf7///8HSw0FQcTTACgCACIDBEBBvNMAKAIAIgcgBmohASABIAdNDQYgASADSw0GCyAGEDMiASAARw0BDAcLIAYgA2sgB3EiBkH+////B0sNBCAGEDMhACAAIAEoAgAgASgCBGpGDQMgACEBCwJAIAYgBEHIAGpPDQAgAUF/Rg0AQezTACgCACIAIAUgBmtqQQAgAGtxIgBB/v///wdLBEAgASEADAcLIAAQM0F/RwRAIAAgBmohBiABIQAMBwtBACAGaxAzGgwECyABIgBBf0cNBQwDC0EAIQMMDAtBACEADAoLIABBf0cNAgtByNMAQcjTACgCAEEEcjYCAAsgAkH+////B0sNASACEDMhAEEAEDMhASAAQX9GDQEgAUF/Rg0BIAAgAU8NASABIABrIgYgBEE4ak0NAQtBvNMAQbzTACgCACAGaiIBNgIAQcDTACgCACABSQRAQcDTACABNgIACwJAAkACQEGk0AAoAgAiAgRAQczTACEBA0AgACABKAIAIgMgASgCBCIFakYNAiABKAIIIgENAAsMAgtBnNAAKAIAIgFBAEcgACABT3FFBEBBnNAAIAA2AgALQQAhAUHQ0wAgBjYCAEHM0wAgADYCAEGs0ABBfzYCAEGw0ABB5NMAKAIANgIAQdjTAEEANgIAA0AgAUHI0ABqIAFBvNAAaiICNgIAIAIgAUG00ABqIgM2AgAgAUHA0ABqIAM2AgAgAUHQ0ABqIAFBxNAAaiIDNgIAIAMgAjYCACABQdjQAGogAUHM0ABqIgI2AgAgAiADNgIAIAFB1NAAaiACNgIAIAFBIGoiAUGAAkcNAAtBeCAAa0EPcSIBIABqIgIgBkE4ayIDIAFrIgFBAXI2AgRBqNAAQfTTACgCADYCAEGY0AAgATYCAEGk0AAgAjYCACAAIANqQTg2AgQMAgsgACACTQ0AIAIgA0kNACABKAIMQQhxDQBBeCACa0EPcSIAIAJqIgNBmNAAKAIAIAZqIgcgAGsiAEEBcjYCBCABIAUgBmo2AgRBqNAAQfTTACgCADYCAEGY0AAgADYCAEGk0AAgAzYCACACIAdqQTg2AgQMAQsgAEGc0AAoAgBJBEBBnNAAIAA2AgALIAAgBmohA0HM0wAhAQJAAkACQANAIAMgASgCAEcEQCABKAIIIgENAQwCCwsgAS0ADEEIcUUNAQtBzNMAIQEDQCABKAIAIgMgAk0EQCADIAEoAgRqIgUgAksNAwsgASgCCCEBDAALAAsgASAANgIAIAEgASgCBCAGajYCBCAAQXggAGtBD3FqIgkgBEEDcjYCBCADQXggA2tBD3FqIgYgBCAJaiIEayEBIAIgBkYEQEGk0AAgBDYCAEGY0ABBmNAAKAIAIAFqIgA2AgAgBCAAQQFyNgIEDAgLQaDQACgCACAGRgRAQaDQACAENgIAQZTQAEGU0AAoAgAgAWoiADYCACAEIABBAXI2AgQgACAEaiAANgIADAgLIAYoAgQiBUEDcUEBRw0GIAVBeHEhCCAFQf8BTQRAIAVBA3YhAyAGKAIIIgAgBigCDCICRgRAQYzQAEGM0AAoAgBBfiADd3E2AgAMBwsgAiAANgIIIAAgAjYCDAwGCyAGKAIYIQcgBiAGKAIMIgBHBEAgACAGKAIIIgI2AgggAiAANgIMDAULIAZBFGoiAigCACIFRQRAIAYoAhAiBUUNBCAGQRBqIQILA0AgAiEDIAUiAEEUaiICKAIAIgUNACAAQRBqIQIgACgCECIFDQALIANBADYCAAwEC0F4IABrQQ9xIgEgAGoiByAGQThrIgMgAWsiAUEBcjYCBCAAIANqQTg2AgQgAiAFQTcgBWtBD3FqQT9rIgMgAyACQRBqSRsiA0EjNgIEQajQAEH00wAoAgA2AgBBmNAAIAE2AgBBpNAAIAc2AgAgA0EQakHU0wApAgA3AgAgA0HM0wApAgA3AghB1NMAIANBCGo2AgBB0NMAIAY2AgBBzNMAIAA2AgBB2NMAQQA2AgAgA0EkaiEBA0AgAUEHNgIAIAUgAUEEaiIBSw0ACyACIANGDQAgAyADKAIEQX5xNgIEIAMgAyACayIFNgIAIAIgBUEBcjYCBCAFQf8BTQRAIAVBeHFBtNAAaiEAAn9BjNAAKAIAIgFBASAFQQN2dCIDcUUEQEGM0AAgASADcjYCACAADAELIAAoAggLIgEgAjYCDCAAIAI2AgggAiAANgIMIAIgATYCCAwBC0EfIQEgBUH///8HTQRAIAVBJiAFQQh2ZyIAa3ZBAXEgAEEBdGtBPmohAQsgAiABNgIcIAJCADcCECABQQJ0QbzSAGohAEGQ0AAoAgAiA0EBIAF0IgZxRQRAIAAgAjYCAEGQ0AAgAyAGcjYCACACIAA2AhggAiACNgIIIAIgAjYCDAwBCyAFQRkgAUEBdmtBACABQR9HG3QhASAAKAIAIQMCQANAIAMiACgCBEF4cSAFRg0BIAFBHXYhAyABQQF0IQEgACADQQRxakEQaiIGKAIAIgMNAAsgBiACNgIAIAIgADYCGCACIAI2AgwgAiACNgIIDAELIAAoAggiASACNgIMIAAgAjYCCCACQQA2AhggAiAANgIMIAIgATYCCAtBmNAAKAIAIgEgBE0NAEGk0AAoAgAiACAEaiICIAEgBGsiAUEBcjYCBEGY0AAgATYCAEGk0AAgAjYCACAAIARBA3I2AgQgAEEIaiEBDAgLQQAhAUH80wBBMDYCAAwHC0EAIQALIAdFDQACQCAGKAIcIgJBAnRBvNIAaiIDKAIAIAZGBEAgAyAANgIAIAANAUGQ0ABBkNAAKAIAQX4gAndxNgIADAILIAdBEEEUIAcoAhAgBkYbaiAANgIAIABFDQELIAAgBzYCGCAGKAIQIgIEQCAAIAI2AhAgAiAANgIYCyAGQRRqKAIAIgJFDQAgAEEUaiACNgIAIAIgADYCGAsgASAIaiEBIAYgCGoiBigCBCEFCyAGIAVBfnE2AgQgASAEaiABNgIAIAQgAUEBcjYCBCABQf8BTQRAIAFBeHFBtNAAaiEAAn9BjNAAKAIAIgJBASABQQN2dCIBcUUEQEGM0AAgASACcjYCACAADAELIAAoAggLIgEgBDYCDCAAIAQ2AgggBCAANgIMIAQgATYCCAwBC0EfIQUgAUH///8HTQRAIAFBJiABQQh2ZyIAa3ZBAXEgAEEBdGtBPmohBQsgBCAFNgIcIARCADcCECAFQQJ0QbzSAGohAEGQ0AAoAgAiAkEBIAV0IgNxRQRAIAAgBDYCAEGQ0AAgAiADcjYCACAEIAA2AhggBCAENgIIIAQgBDYCDAwBCyABQRkgBUEBdmtBACAFQR9HG3QhBSAAKAIAIQACQANAIAAiAigCBEF4cSABRg0BIAVBHXYhACAFQQF0IQUgAiAAQQRxakEQaiIDKAIAIgANAAsgAyAENgIAIAQgAjYCGCAEIAQ2AgwgBCAENgIIDAELIAIoAggiACAENgIMIAIgBDYCCCAEQQA2AhggBCACNgIMIAQgADYCCAsgCUEIaiEBDAILAkAgB0UNAAJAIAMoAhwiAUECdEG80gBqIgIoAgAgA0YEQCACIAA2AgAgAA0BQZDQACAIQX4gAXdxIgg2AgAMAgsgB0EQQRQgBygCECADRhtqIAA2AgAgAEUNAQsgACAHNgIYIAMoAhAiAQRAIAAgATYCECABIAA2AhgLIANBFGooAgAiAUUNACAAQRRqIAE2AgAgASAANgIYCwJAIAVBD00EQCADIAQgBWoiAEEDcjYCBCAAIANqIgAgACgCBEEBcjYCBAwBCyADIARqIgIgBUEBcjYCBCADIARBA3I2AgQgAiAFaiAFNgIAIAVB/wFNBEAgBUF4cUG00ABqIQACf0GM0AAoAgAiAUEBIAVBA3Z0IgVxRQRAQYzQACABIAVyNgIAIAAMAQsgACgCCAsiASACNgIMIAAgAjYCCCACIAA2AgwgAiABNgIIDAELQR8hASAFQf///wdNBEAgBUEmIAVBCHZnIgBrdkEBcSAAQQF0a0E+aiEBCyACIAE2AhwgAkIANwIQIAFBAnRBvNIAaiEAQQEgAXQiBCAIcUUEQCAAIAI2AgBBkNAAIAQgCHI2AgAgAiAANgIYIAIgAjYCCCACIAI2AgwMAQsgBUEZIAFBAXZrQQAgAUEfRxt0IQEgACgCACEEAkADQCAEIgAoAgRBeHEgBUYNASABQR12IQQgAUEBdCEBIAAgBEEEcWpBEGoiBigCACIEDQALIAYgAjYCACACIAA2AhggAiACNgIMIAIgAjYCCAwBCyAAKAIIIgEgAjYCDCAAIAI2AgggAkEANgIYIAIgADYCDCACIAE2AggLIANBCGohAQwBCwJAIAlFDQACQCAAKAIcIgFBAnRBvNIAaiICKAIAIABGBEAgAiADNgIAIAMNAUGQ0AAgC0F+IAF3cTYCAAwCCyAJQRBBFCAJKAIQIABGG2ogAzYCACADRQ0BCyADIAk2AhggACgCECIBBEAgAyABNgIQIAEgAzYCGAsgAEEUaigCACIBRQ0AIANBFGogATYCACABIAM2AhgLAkAgBUEPTQRAIAAgBCAFaiIBQQNyNgIEIAAgAWoiASABKAIEQQFyNgIEDAELIAAgBGoiByAFQQFyNgIEIAAgBEEDcjYCBCAFIAdqIAU2AgAgCARAIAhBeHFBtNAAaiEBQaDQACgCACEDAn9BASAIQQN2dCICIAZxRQRAQYzQACACIAZyNgIAIAEMAQsgASgCCAsiAiADNgIMIAEgAzYCCCADIAE2AgwgAyACNgIIC0Gg0AAgBzYCAEGU0AAgBTYCAAsgAEEIaiEBCyAKQRBqJAAgAQtDACAARQRAPwBBEHQPCwJAIABB//8DcQ0AIABBAEgNACAAQRB2QAAiAEF/RgRAQfzTAEEwNgIAQX8PCyAAQRB0DwsACwvcPyIAQYAICwkBAAAAAgAAAAMAQZQICwUEAAAABQBBpAgLCQYAAAAHAAAACABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv","base64")}});var require_llhttp_simd_wasm=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js"(e,A){"use strict";init_define_process();var{Buffer:t}=__nccwpck_require__(300);A.exports=t.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVuaWVudF9oZWFkZXJzACEhbGxodHRwX3NldF9sZW5pZW50X2NodW5rZWRfbGVuZ3RoACIdbGxodHRwX3NldF9sZW5pZW50X2tlZXBfYWxpdmUAIyRsbGh0dHBfc2V0X2xlbmllbnRfdHJhbnNmZXJfZW5jb2RpbmcAJBhsbGh0dHBfbWVzc2FnZV9uZWVkc19lb2YALgkXAQBBAQsRAQIDBAUKBgcrLSwqKSglJyYK77MCLBYAQYjQACgCAARAAAtBiNAAQQE2AgALFAAgABAwIAAgAjYCOCAAIAE6ACgLFAAgACAALwEyIAAtAC4gABAvEAALHgEBf0HAABAyIgEQMCABQYAINgI4IAEgADoAKCABC48MAQd/AkAgAEUNACAAQQhrIgEgAEEEaygCACIAQXhxIgRqIQUCQCAAQQFxDQAgAEEDcUUNASABIAEoAgAiAGsiAUGc0AAoAgBJDQEgACAEaiEEAkACQEGg0AAoAgAgAUcEQCAAQf8BTQRAIABBA3YhAyABKAIIIgAgASgCDCICRgRAQYzQAEGM0AAoAgBBfiADd3E2AgAMBQsgAiAANgIIIAAgAjYCDAwECyABKAIYIQYgASABKAIMIgBHBEAgACABKAIIIgI2AgggAiAANgIMDAMLIAFBFGoiAygCACICRQRAIAEoAhAiAkUNAiABQRBqIQMLA0AgAyEHIAIiAEEUaiIDKAIAIgINACAAQRBqIQMgACgCECICDQALIAdBADYCAAwCCyAFKAIEIgBBA3FBA0cNAiAFIABBfnE2AgRBlNAAIAQ2AgAgBSAENgIAIAEgBEEBcjYCBAwDC0EAIQALIAZFDQACQCABKAIcIgJBAnRBvNIAaiIDKAIAIAFGBEAgAyAANgIAIAANAUGQ0ABBkNAAKAIAQX4gAndxNgIADAILIAZBEEEUIAYoAhAgAUYbaiAANgIAIABFDQELIAAgBjYCGCABKAIQIgIEQCAAIAI2AhAgAiAANgIYCyABQRRqKAIAIgJFDQAgAEEUaiACNgIAIAIgADYCGAsgASAFTw0AIAUoAgQiAEEBcUUNAAJAAkACQAJAIABBAnFFBEBBpNAAKAIAIAVGBEBBpNAAIAE2AgBBmNAAQZjQACgCACAEaiIANgIAIAEgAEEBcjYCBCABQaDQACgCAEcNBkGU0ABBADYCAEGg0ABBADYCAAwGC0Gg0AAoAgAgBUYEQEGg0AAgATYCAEGU0ABBlNAAKAIAIARqIgA2AgAgASAAQQFyNgIEIAAgAWogADYCAAwGCyAAQXhxIARqIQQgAEH/AU0EQCAAQQN2IQMgBSgCCCIAIAUoAgwiAkYEQEGM0ABBjNAAKAIAQX4gA3dxNgIADAULIAIgADYCCCAAIAI2AgwMBAsgBSgCGCEGIAUgBSgCDCIARwRAQZzQACgCABogACAFKAIIIgI2AgggAiAANgIMDAMLIAVBFGoiAygCACICRQRAIAUoAhAiAkUNAiAFQRBqIQMLA0AgAyEHIAIiAEEUaiIDKAIAIgINACAAQRBqIQMgACgCECICDQALIAdBADYCAAwCCyAFIABBfnE2AgQgASAEaiAENgIAIAEgBEEBcjYCBAwDC0EAIQALIAZFDQACQCAFKAIcIgJBAnRBvNIAaiIDKAIAIAVGBEAgAyAANgIAIAANAUGQ0ABBkNAAKAIAQX4gAndxNgIADAILIAZBEEEUIAYoAhAgBUYbaiAANgIAIABFDQELIAAgBjYCGCAFKAIQIgIEQCAAIAI2AhAgAiAANgIYCyAFQRRqKAIAIgJFDQAgAEEUaiACNgIAIAIgADYCGAsgASAEaiAENgIAIAEgBEEBcjYCBCABQaDQACgCAEcNAEGU0AAgBDYCAAwBCyAEQf8BTQRAIARBeHFBtNAAaiEAAn9BjNAAKAIAIgJBASAEQQN2dCIDcUUEQEGM0AAgAiADcjYCACAADAELIAAoAggLIgIgATYCDCAAIAE2AgggASAANgIMIAEgAjYCCAwBC0EfIQIgBEH///8HTQRAIARBJiAEQQh2ZyIAa3ZBAXEgAEEBdGtBPmohAgsgASACNgIcIAFCADcCECACQQJ0QbzSAGohAAJAQZDQACgCACIDQQEgAnQiB3FFBEAgACABNgIAQZDQACADIAdyNgIAIAEgADYCGCABIAE2AgggASABNgIMDAELIARBGSACQQF2a0EAIAJBH0cbdCECIAAoAgAhAAJAA0AgACIDKAIEQXhxIARGDQEgAkEddiEAIAJBAXQhAiADIABBBHFqQRBqIgcoAgAiAA0ACyAHIAE2AgAgASADNgIYIAEgATYCDCABIAE2AggMAQsgAygCCCIAIAE2AgwgAyABNgIIIAFBADYCGCABIAM2AgwgASAANgIIC0Gs0ABBrNAAKAIAQQFrIgBBfyAAGzYCAAsLBwAgAC0AKAsHACAALQAqCwcAIAAtACsLBwAgAC0AKQsHACAALwEyCwcAIAAtAC4LQAEEfyAAKAIYIQEgAC0ALSECIAAtACghAyAAKAI4IQQgABAwIAAgBDYCOCAAIAM6ACggACACOgAtIAAgATYCGAu74gECB38DfiABIAJqIQQCQCAAIgIoAgwiAA0AIAIoAgQEQCACIAE2AgQLIwBBEGsiCCQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAIoAhwiA0EBaw7dAdoBAdkBAgMEBQYHCAkKCwwNDtgBDxDXARES1gETFBUWFxgZGhvgAd8BHB0e1QEfICEiIyQl1AEmJygpKiss0wHSAS0u0QHQAS8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRtsBR0hJSs8BzgFLzQFMzAFNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBywHKAbgByQG5AcgBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgEA3AELQQAMxgELQQ4MxQELQQ0MxAELQQ8MwwELQRAMwgELQRMMwQELQRQMwAELQRUMvwELQRYMvgELQRgMvQELQRkMvAELQRoMuwELQRsMugELQRwMuQELQR0MuAELQQgMtwELQR4MtgELQSAMtQELQR8MtAELQQcMswELQSEMsgELQSIMsQELQSMMsAELQSQMrwELQRIMrgELQREMrQELQSUMrAELQSYMqwELQScMqgELQSgMqQELQcMBDKgBC0EqDKcBC0ErDKYBC0EsDKUBC0EtDKQBC0EuDKMBC0EvDKIBC0HEAQyhAQtBMAygAQtBNAyfAQtBDAyeAQtBMQydAQtBMgycAQtBMwybAQtBOQyaAQtBNQyZAQtBxQEMmAELQQsMlwELQToMlgELQTYMlQELQQoMlAELQTcMkwELQTgMkgELQTwMkQELQTsMkAELQT0MjwELQQkMjgELQSkMjQELQT4MjAELQT8MiwELQcAADIoBC0HBAAyJAQtBwgAMiAELQcMADIcBC0HEAAyGAQtBxQAMhQELQcYADIQBC0EXDIMBC0HHAAyCAQtByAAMgQELQckADIABC0HKAAx/C0HLAAx+C0HNAAx9C0HMAAx8C0HOAAx7C0HPAAx6C0HQAAx5C0HRAAx4C0HSAAx3C0HTAAx2C0HUAAx1C0HWAAx0C0HVAAxzC0EGDHILQdcADHELQQUMcAtB2AAMbwtBBAxuC0HZAAxtC0HaAAxsC0HbAAxrC0HcAAxqC0EDDGkLQd0ADGgLQd4ADGcLQd8ADGYLQeEADGULQeAADGQLQeIADGMLQeMADGILQQIMYQtB5AAMYAtB5QAMXwtB5gAMXgtB5wAMXQtB6AAMXAtB6QAMWwtB6gAMWgtB6wAMWQtB7AAMWAtB7QAMVwtB7gAMVgtB7wAMVQtB8AAMVAtB8QAMUwtB8gAMUgtB8wAMUQtB9AAMUAtB9QAMTwtB9gAMTgtB9wAMTQtB+AAMTAtB+QAMSwtB+gAMSgtB+wAMSQtB/AAMSAtB/QAMRwtB/gAMRgtB/wAMRQtBgAEMRAtBgQEMQwtBggEMQgtBgwEMQQtBhAEMQAtBhQEMPwtBhgEMPgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADDsYBAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHyAhIyUmKCorLC8wMTIzNDU2Nzk6Ozw9lANAQkRFRklLTk9QUVJTVFVWWFpbXF1eX2BhYmNkZWZnaGpsb3Bxc3V2eHl6e3x/gAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAccByAHJAcsBzAHNAc4BzwGKA4kDiAOHA4QDgwOAA/sC+gL5AvgC9wL0AvMC8gLLAsECsALZAQsgASAERw3wAkHdASEDDLMDCyABIARHDcgBQcMBIQMMsgMLIAEgBEcNe0H3ACEDDLEDCyABIARHDXBB7wAhAwywAwsgASAERw1pQeoAIQMMrwMLIAEgBEcNZUHoACEDDK4DCyABIARHDWJB5gAhAwytAwsgASAERw0aQRghAwysAwsgASAERw0VQRIhAwyrAwsgASAERw1CQcUAIQMMqgMLIAEgBEcNNEE/IQMMqQMLIAEgBEcNMkE8IQMMqAMLIAEgBEcNK0ExIQMMpwMLIAItAC5BAUYNnwMMwQILQQAhAAJAAkACQCACLQAqRQ0AIAItACtFDQAgAi8BMCIDQQJxRQ0BDAILIAIvATAiA0EBcUUNAQtBASEAIAItAChBAUYNACACLwEyIgVB5ABrQeQASQ0AIAVBzAFGDQAgBUGwAkYNACADQcAAcQ0AQQAhACADQYgEcUGABEYNACADQShxQQBHIQALIAJBADsBMCACQQA6AC8gAEUN3wIgAkIANwMgDOACC0EAIQACQCACKAI4IgNFDQAgAygCLCIDRQ0AIAIgAxEAACEACyAARQ3MASAAQRVHDd0CIAJBBDYCHCACIAE2AhQgAkGwGDYCECACQRU2AgxBACEDDKQDCyABIARGBEBBBiEDDKQDCyABQQFqIQFBACEAAkAgAigCOCIDRQ0AIAMoAlQiA0UNACACIAMRAAAhAAsgAA3ZAgwcCyACQgA3AyBBEiEDDIkDCyABIARHDRZBHSEDDKEDCyABIARHBEAgAUEBaiEBQRAhAwyIAwtBByEDDKADCyACIAIpAyAiCiAEIAFrrSILfSIMQgAgCiAMWhs3AyAgCiALWA3UAkEIIQMMnwMLIAEgBEcEQCACQQk2AgggAiABNgIEQRQhAwyGAwtBCSEDDJ4DCyACKQMgQgBSDccBIAIgAi8BMEGAAXI7ATAMQgsgASAERw0/QdAAIQMMnAMLIAEgBEYEQEELIQMMnAMLIAFBAWohAUEAIQACQCACKAI4IgNFDQAgAygCUCIDRQ0AIAIgAxEAACEACyAADc8CDMYBC0EAIQACQCACKAI4IgNFDQAgAygCSCIDRQ0AIAIgAxEAACEACyAARQ3GASAAQRVHDc0CIAJBCzYCHCACIAE2AhQgAkGCGTYCECACQRU2AgxBACEDDJoDC0EAIQACQCACKAI4IgNFDQAgAygCSCIDRQ0AIAIgAxEAACEACyAARQ0MIABBFUcNygIgAkEaNgIcIAIgATYCFCACQYIZNgIQIAJBFTYCDEEAIQMMmQMLQQAhAAJAIAIoAjgiA0UNACADKAJMIgNFDQAgAiADEQAAIQALIABFDcQBIABBFUcNxwIgAkELNgIcIAIgATYCFCACQZEXNgIQIAJBFTYCDEEAIQMMmAMLIAEgBEYEQEEPIQMMmAMLIAEtAAAiAEE7Rg0HIABBDUcNxAIgAUEBaiEBDMMBC0EAIQACQCACKAI4IgNFDQAgAygCTCIDRQ0AIAIgAxEAACEACyAARQ3DASAAQRVHDcICIAJBDzYCHCACIAE2AhQgAkGRFzYCECACQRU2AgxBACEDDJYDCwNAIAEtAABB8DVqLQAAIgBBAUcEQCAAQQJHDcECIAIoAgQhAEEAIQMgAkEANgIEIAIgACABQQFqIgEQLSIADcICDMUBCyAEIAFBAWoiAUcNAAtBEiEDDJUDC0EAIQACQCACKAI4IgNFDQAgAygCTCIDRQ0AIAIgAxEAACEACyAARQ3FASAAQRVHDb0CIAJBGzYCHCACIAE2AhQgAkGRFzYCECACQRU2AgxBACEDDJQDCyABIARGBEBBFiEDDJQDCyACQQo2AgggAiABNgIEQQAhAAJAIAIoAjgiA0UNACADKAJIIgNFDQAgAiADEQAAIQALIABFDcIBIABBFUcNuQIgAkEVNgIcIAIgATYCFCACQYIZNgIQIAJBFTYCDEEAIQMMkwMLIAEgBEcEQANAIAEtAABB8DdqLQAAIgBBAkcEQAJAIABBAWsOBMQCvQIAvgK9AgsgAUEBaiEBQQghAwz8AgsgBCABQQFqIgFHDQALQRUhAwyTAwtBFSEDDJIDCwNAIAEtAABB8DlqLQAAIgBBAkcEQCAAQQFrDgTFArcCwwK4ArcCCyAEIAFBAWoiAUcNAAtBGCEDDJEDCyABIARHBEAgAkELNgIIIAIgATYCBEEHIQMM+AILQRkhAwyQAwsgAUEBaiEBDAILIAEgBEYEQEEaIQMMjwMLAkAgAS0AAEENaw4UtQG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwEAvwELQQAhAyACQQA2AhwgAkGvCzYCECACQQI2AgwgAiABQQFqNgIUDI4DCyABIARGBEBBGyEDDI4DCyABLQAAIgBBO0cEQCAAQQ1HDbECIAFBAWohAQy6AQsgAUEBaiEBC0EiIQMM8wILIAEgBEYEQEEcIQMMjAMLQgAhCgJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAS0AAEEwaw43wQLAAgABAgMEBQYH0AHQAdAB0AHQAdAB0AEICQoLDA3QAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdABDg8QERIT0AELQgIhCgzAAgtCAyEKDL8CC0IEIQoMvgILQgUhCgy9AgtCBiEKDLwCC0IHIQoMuwILQgghCgy6AgtCCSEKDLkCC0IKIQoMuAILQgshCgy3AgtCDCEKDLYCC0INIQoMtQILQg4hCgy0AgtCDyEKDLMCC0IKIQoMsgILQgshCgyxAgtCDCEKDLACC0INIQoMrwILQg4hCgyuAgtCDyEKDK0CC0IAIQoCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEtAABBMGsON8ACvwIAAQIDBAUGB74CvgK+Ar4CvgK+Ar4CCAkKCwwNvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ag4PEBESE74CC0ICIQoMvwILQgMhCgy+AgtCBCEKDL0CC0IFIQoMvAILQgYhCgy7AgtCByEKDLoCC0IIIQoMuQILQgkhCgy4AgtCCiEKDLcCC0ILIQoMtgILQgwhCgy1AgtCDSEKDLQCC0IOIQoMswILQg8hCgyyAgtCCiEKDLECC0ILIQoMsAILQgwhCgyvAgtCDSEKDK4CC0IOIQoMrQILQg8hCgysAgsgAiACKQMgIgogBCABa60iC30iDEIAIAogDFobNwMgIAogC1gNpwJBHyEDDIkDCyABIARHBEAgAkEJNgIIIAIgATYCBEElIQMM8AILQSAhAwyIAwtBASEFIAIvATAiA0EIcUUEQCACKQMgQgBSIQULAkAgAi0ALgRAQQEhACACLQApQQVGDQEgA0HAAHFFIAVxRQ0BC0EAIQAgA0HAAHENAEECIQAgA0EIcQ0AIANBgARxBEACQCACLQAoQQFHDQAgAi0ALUEKcQ0AQQUhAAwCC0EEIQAMAQsgA0EgcUUEQAJAIAItAChBAUYNACACLwEyIgBB5ABrQeQASQ0AIABBzAFGDQAgAEGwAkYNAEEEIQAgA0EocUUNAiADQYgEcUGABEYNAgtBACEADAELQQBBAyACKQMgUBshAAsgAEEBaw4FvgIAsAEBpAKhAgtBESEDDO0CCyACQQE6AC8MhAMLIAEgBEcNnQJBJCEDDIQDCyABIARHDRxBxgAhAwyDAwtBACEAAkAgAigCOCIDRQ0AIAMoAkQiA0UNACACIAMRAAAhAAsgAEUNJyAAQRVHDZgCIAJB0AA2AhwgAiABNgIUIAJBkRg2AhAgAkEVNgIMQQAhAwyCAwsgASAERgRAQSghAwyCAwtBACEDIAJBADYCBCACQQw2AgggAiABIAEQKiIARQ2UAiACQSc2AhwgAiABNgIUIAIgADYCDAyBAwsgASAERgRAQSkhAwyBAwsgAS0AACIAQSBGDRMgAEEJRw2VAiABQQFqIQEMFAsgASAERwRAIAFBAWohAQwWC0EqIQMM/wILIAEgBEYEQEErIQMM/wILIAEtAAAiAEEJRyAAQSBHcQ2QAiACLQAsQQhHDd0CIAJBADoALAzdAgsgASAERgRAQSwhAwz+AgsgAS0AAEEKRw2OAiABQQFqIQEMsAELIAEgBEcNigJBLyEDDPwCCwNAIAEtAAAiAEEgRwRAIABBCmsOBIQCiAKIAoQChgILIAQgAUEBaiIBRw0AC0ExIQMM+wILQTIhAyABIARGDfoCIAIoAgAiACAEIAFraiEHIAEgAGtBA2ohBgJAA0AgAEHwO2otAAAgAS0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDQEgAEEDRgRAQQYhAQziAgsgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAc2AgAM+wILIAJBADYCAAyGAgtBMyEDIAQgASIARg35AiAEIAFrIAIoAgAiAWohByAAIAFrQQhqIQYCQANAIAFB9DtqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBCEYEQEEFIQEM4QILIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADPoCCyACQQA2AgAgACEBDIUCC0E0IQMgBCABIgBGDfgCIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgJAA0AgAUHQwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBBUYEQEEHIQEM4AILIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADPkCCyACQQA2AgAgACEBDIQCCyABIARHBEADQCABLQAAQYA+ai0AACIAQQFHBEAgAEECRg0JDIECCyAEIAFBAWoiAUcNAAtBMCEDDPgCC0EwIQMM9wILIAEgBEcEQANAIAEtAAAiAEEgRwRAIABBCmsOBP8B/gH+Af8B/gELIAQgAUEBaiIBRw0AC0E4IQMM9wILQTghAwz2AgsDQCABLQAAIgBBIEcgAEEJR3EN9gEgBCABQQFqIgFHDQALQTwhAwz1AgsDQCABLQAAIgBBIEcEQAJAIABBCmsOBPkBBAT5AQALIABBLEYN9QEMAwsgBCABQQFqIgFHDQALQT8hAwz0AgtBwAAhAyABIARGDfMCIAIoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAEGAQGstAAAgAS0AAEEgckcNASAAQQZGDdsCIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPQCCyACQQA2AgALQTYhAwzZAgsgASAERgRAQcEAIQMM8gILIAJBDDYCCCACIAE2AgQgAi0ALEEBaw4E+wHuAewB6wHUAgsgAUEBaiEBDPoBCyABIARHBEADQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxIgBBCUYNACAAQSBGDQACQAJAAkACQCAAQeMAaw4TAAMDAwMDAwMBAwMDAwMDAwMDAgMLIAFBAWohAUExIQMM3AILIAFBAWohAUEyIQMM2wILIAFBAWohAUEzIQMM2gILDP4BCyAEIAFBAWoiAUcNAAtBNSEDDPACC0E1IQMM7wILIAEgBEcEQANAIAEtAABBgDxqLQAAQQFHDfcBIAQgAUEBaiIBRw0AC0E9IQMM7wILQT0hAwzuAgtBACEAAkAgAigCOCIDRQ0AIAMoAkAiA0UNACACIAMRAAAhAAsgAEUNASAAQRVHDeYBIAJBwgA2AhwgAiABNgIUIAJB4xg2AhAgAkEVNgIMQQAhAwztAgsgAUEBaiEBC0E8IQMM0gILIAEgBEYEQEHCACEDDOsCCwJAA0ACQCABLQAAQQlrDhgAAswCzALRAswCzALMAswCzALMAswCzALMAswCzALMAswCzALMAswCzALMAgDMAgsgBCABQQFqIgFHDQALQcIAIQMM6wILIAFBAWohASACLQAtQQFxRQ3+AQtBLCEDDNACCyABIARHDd4BQcQAIQMM6AILA0AgAS0AAEGQwABqLQAAQQFHDZwBIAQgAUEBaiIBRw0AC0HFACEDDOcCCyABLQAAIgBBIEYN/gEgAEE6Rw3AAiACKAIEIQBBACEDIAJBADYCBCACIAAgARApIgAN3gEM3QELQccAIQMgBCABIgBGDeUCIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgNAIAFBkMIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNvwIgAUEFRg3CAiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBzYCAAzlAgtByAAhAyAEIAEiAEYN5AIgBCABayACKAIAIgFqIQcgACABa0EJaiEGA0AgAUGWwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw2+AkECIAFBCUYNwgIaIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADOQCCyABIARGBEBByQAhAwzkAgsCQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxQe4Aaw4HAL8CvwK/Ar8CvwIBvwILIAFBAWohAUE+IQMMywILIAFBAWohAUE/IQMMygILQcoAIQMgBCABIgBGDeICIAQgAWsgAigCACIBaiEGIAAgAWtBAWohBwNAIAFBoMIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNvAIgAUEBRg2+AiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBjYCAAziAgtBywAhAyAEIAEiAEYN4QIgBCABayACKAIAIgFqIQcgACABa0EOaiEGA0AgAUGiwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw27AiABQQ5GDb4CIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADOECC0HMACEDIAQgASIARg3gAiAEIAFrIAIoAgAiAWohByAAIAFrQQ9qIQYDQCABQcDCAGotAAAgAC0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDboCQQMgAUEPRg2+AhogAUEBaiEBIAQgAEEBaiIARw0ACyACIAc2AgAM4AILQc0AIQMgBCABIgBGDd8CIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgNAIAFB0MIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNuQJBBCABQQVGDb0CGiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBzYCAAzfAgsgASAERgRAQc4AIQMM3wILAkACQAJAAkAgAS0AACIAQSByIAAgAEHBAGtB/wFxQRpJG0H/AXFB4wBrDhMAvAK8ArwCvAK8ArwCvAK8ArwCvAK8ArwCAbwCvAK8AgIDvAILIAFBAWohAUHBACEDDMgCCyABQQFqIQFBwgAhAwzHAgsgAUEBaiEBQcMAIQMMxgILIAFBAWohAUHEACEDDMUCCyABIARHBEAgAkENNgIIIAIgATYCBEHFACEDDMUCC0HPACEDDN0CCwJAAkAgAS0AAEEKaw4EAZABkAEAkAELIAFBAWohAQtBKCEDDMMCCyABIARGBEBB0QAhAwzcAgsgAS0AAEEgRw0AIAFBAWohASACLQAtQQFxRQ3QAQtBFyEDDMECCyABIARHDcsBQdIAIQMM2QILQdMAIQMgASAERg3YAiACKAIAIgAgBCABa2ohBiABIABrQQFqIQUDQCABLQAAIABB1sIAai0AAEcNxwEgAEEBRg3KASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBjYCAAzYAgsgASAERgRAQdUAIQMM2AILIAEtAABBCkcNwgEgAUEBaiEBDMoBCyABIARGBEBB1gAhAwzXAgsCQAJAIAEtAABBCmsOBADDAcMBAcMBCyABQQFqIQEMygELIAFBAWohAUHKACEDDL0CC0EAIQACQCACKAI4IgNFDQAgAygCPCIDRQ0AIAIgAxEAACEACyAADb8BQc0AIQMMvAILIAItAClBIkYNzwIMiQELIAQgASIFRgRAQdsAIQMM1AILQQAhAEEBIQFBASEGQQAhAwJAAn8CQAJAAkACQAJAAkACQCAFLQAAQTBrDgrFAcQBAAECAwQFBgjDAQtBAgwGC0EDDAULQQQMBAtBBQwDC0EGDAILQQcMAQtBCAshA0EAIQFBACEGDL0BC0EJIQNBASEAQQAhAUEAIQYMvAELIAEgBEYEQEHdACEDDNMCCyABLQAAQS5HDbgBIAFBAWohAQyIAQsgASAERw22AUHfACEDDNECCyABIARHBEAgAkEONgIIIAIgATYCBEHQACEDDLgCC0HgACEDDNACC0HhACEDIAEgBEYNzwIgAigCACIAIAQgAWtqIQUgASAAa0EDaiEGA0AgAS0AACAAQeLCAGotAABHDbEBIABBA0YNswEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMzwILQeIAIQMgASAERg3OAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYDQCABLQAAIABB5sIAai0AAEcNsAEgAEECRg2vASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAzOAgtB4wAhAyABIARGDc0CIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgNAIAEtAAAgAEHpwgBqLQAARw2vASAAQQNGDa0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADM0CCyABIARGBEBB5QAhAwzNAgsgAUEBaiEBQQAhAAJAIAIoAjgiA0UNACADKAIwIgNFDQAgAiADEQAAIQALIAANqgFB1gAhAwyzAgsgASAERwRAA0AgAS0AACIAQSBHBEACQAJAAkAgAEHIAGsOCwABswGzAbMBswGzAbMBswGzAQKzAQsgAUEBaiEBQdIAIQMMtwILIAFBAWohAUHTACEDDLYCCyABQQFqIQFB1AAhAwy1AgsgBCABQQFqIgFHDQALQeQAIQMMzAILQeQAIQMMywILA0AgAS0AAEHwwgBqLQAAIgBBAUcEQCAAQQJrDgOnAaYBpQGkAQsgBCABQQFqIgFHDQALQeYAIQMMygILIAFBAWogASAERw0CGkHnACEDDMkCCwNAIAEtAABB8MQAai0AACIAQQFHBEACQCAAQQJrDgSiAaEBoAEAnwELQdcAIQMMsQILIAQgAUEBaiIBRw0AC0HoACEDDMgCCyABIARGBEBB6QAhAwzIAgsCQCABLQAAIgBBCmsOGrcBmwGbAbQBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBpAGbAZsBAJkBCyABQQFqCyEBQQYhAwytAgsDQCABLQAAQfDGAGotAABBAUcNfSAEIAFBAWoiAUcNAAtB6gAhAwzFAgsgAUEBaiABIARHDQIaQesAIQMMxAILIAEgBEYEQEHsACEDDMQCCyABQQFqDAELIAEgBEYEQEHtACEDDMMCCyABQQFqCyEBQQQhAwyoAgsgASAERgRAQe4AIQMMwQILAkACQAJAIAEtAABB8MgAai0AAEEBaw4HkAGPAY4BAHwBAo0BCyABQQFqIQEMCwsgAUEBagyTAQtBACEDIAJBADYCHCACQZsSNgIQIAJBBzYCDCACIAFBAWo2AhQMwAILAkADQCABLQAAQfDIAGotAAAiAEEERwRAAkACQCAAQQFrDgeUAZMBkgGNAQAEAY0BC0HaACEDDKoCCyABQQFqIQFB3AAhAwypAgsgBCABQQFqIgFHDQALQe8AIQMMwAILIAFBAWoMkQELIAQgASIARgRAQfAAIQMMvwILIAAtAABBL0cNASAAQQFqIQEMBwsgBCABIgBGBEBB8QAhAwy+AgsgAC0AACIBQS9GBEAgAEEBaiEBQd0AIQMMpQILIAFBCmsiA0EWSw0AIAAhAUEBIAN0QYmAgAJxDfkBC0EAIQMgAkEANgIcIAIgADYCFCACQYwcNgIQIAJBBzYCDAy8AgsgASAERwRAIAFBAWohAUHeACEDDKMCC0HyACEDDLsCCyABIARGBEBB9AAhAwy7AgsCQCABLQAAQfDMAGotAABBAWsOA/cBcwCCAQtB4QAhAwyhAgsgASAERwRAA0AgAS0AAEHwygBqLQAAIgBBA0cEQAJAIABBAWsOAvkBAIUBC0HfACEDDKMCCyAEIAFBAWoiAUcNAAtB8wAhAwy6AgtB8wAhAwy5AgsgASAERwRAIAJBDzYCCCACIAE2AgRB4AAhAwygAgtB9QAhAwy4AgsgASAERgRAQfYAIQMMuAILIAJBDzYCCCACIAE2AgQLQQMhAwydAgsDQCABLQAAQSBHDY4CIAQgAUEBaiIBRw0AC0H3ACEDDLUCCyABIARGBEBB+AAhAwy1AgsgAS0AAEEgRw16IAFBAWohAQxbC0EAIQACQCACKAI4IgNFDQAgAygCOCIDRQ0AIAIgAxEAACEACyAADXgMgAILIAEgBEYEQEH6ACEDDLMCCyABLQAAQcwARw10IAFBAWohAUETDHYLQfsAIQMgASAERg2xAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYDQCABLQAAIABB8M4Aai0AAEcNcyAAQQVGDXUgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMsQILIAEgBEYEQEH8ACEDDLECCwJAAkAgAS0AAEHDAGsODAB0dHR0dHR0dHR0AXQLIAFBAWohAUHmACEDDJgCCyABQQFqIQFB5wAhAwyXAgtB/QAhAyABIARGDa8CIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQe3PAGotAABHDXIgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADLACCyACQQA2AgAgBkEBaiEBQRAMcwtB/gAhAyABIARGDa4CIAIoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQfbOAGotAABHDXEgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADK8CCyACQQA2AgAgBkEBaiEBQRYMcgtB/wAhAyABIARGDa0CIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQfzOAGotAABHDXAgAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADK4CCyACQQA2AgAgBkEBaiEBQQUMcQsgASAERgRAQYABIQMMrQILIAEtAABB2QBHDW4gAUEBaiEBQQgMcAsgASAERgRAQYEBIQMMrAILAkACQCABLQAAQc4Aaw4DAG8BbwsgAUEBaiEBQesAIQMMkwILIAFBAWohAUHsACEDDJICCyABIARGBEBBggEhAwyrAgsCQAJAIAEtAABByABrDggAbm5ubm5uAW4LIAFBAWohAUHqACEDDJICCyABQQFqIQFB7QAhAwyRAgtBgwEhAyABIARGDakCIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQYDPAGotAABHDWwgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADKoCCyACQQA2AgAgBkEBaiEBQQAMbQtBhAEhAyABIARGDagCIAIoAgAiACAEIAFraiEFIAEgAGtBBGohBgJAA0AgAS0AACAAQYPPAGotAABHDWsgAEEERg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADKkCCyACQQA2AgAgBkEBaiEBQSMMbAsgASAERgRAQYUBIQMMqAILAkACQCABLQAAQcwAaw4IAGtra2trawFrCyABQQFqIQFB7wAhAwyPAgsgAUEBaiEBQfAAIQMMjgILIAEgBEYEQEGGASEDDKcCCyABLQAAQcUARw1oIAFBAWohAQxgC0GHASEDIAEgBEYNpQIgAigCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBiM8Aai0AAEcNaCAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMpgILIAJBADYCACAGQQFqIQFBLQxpC0GIASEDIAEgBEYNpAIgAigCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABB0M8Aai0AAEcNZyAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMpQILIAJBADYCACAGQQFqIQFBKQxoCyABIARGBEBBiQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEVDF8LQZIBIQMgASAERg2aAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGhzwBqLQAARw1dIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAybAgsgAkEANgIAIAZBAWohAUEeDF4LIAEgBEYEQEGTASEDDJoCCyABLQAAQcwARw1bIAFBAWohAUEKDF0LIAEgBEYEQEGUASEDDJkCCwJAAkAgAS0AAEHBAGsODwBcXFxcXFxcXFxcXFxcAVwLIAFBAWohAUH+ACEDDIACCyABQQFqIQFB/wAhAwz/AQsgASAERgRAQZUBIQMMmAILAkACQCABLQAAQcEAaw4DAFsBWwsgAUEBaiEBQf0AIQMM/wELIAFBAWohAUGAASEDDP4BC0GWASEDIAEgBEYNlgIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBp88Aai0AAEcNWSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlwILIAJBADYCACAGQQFqIQFBCwxaCyABIARGBEBBlwEhAwyWAgsCQAJAAkACQCABLQAAQS1rDiMAW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1sBW1tbW1sCW1tbA1sLIAFBAWohAUH7ACEDDP8BCyABQQFqIQFB/AAhAwz+AQsgAUEBaiEBQYEBIQMM/QELIAFBAWohAUGCASEDDPwBC0GYASEDIAEgBEYNlAIgAigCACIAIAQgAWtqIQUgASAAa0EEaiEGAkADQCABLQAAIABBqc8Aai0AAEcNVyAAQQRGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlQILIAJBADYCACAGQQFqIQFBGQxYC0GZASEDIAEgBEYNkwIgAigCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBrs8Aai0AAEcNViAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlAILIAJBADYCACAGQQFqIQFBBgxXC0GaASEDIAEgBEYNkgIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBtM8Aai0AAEcNVSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMkwILIAJBADYCACAGQQFqIQFBHAxWC0GbASEDIAEgBEYNkQIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBts8Aai0AAEcNVCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMkgILIAJBADYCACAGQQFqIQFBJwxVCyABIARGBEBBnAEhAwyRAgsCQAJAIAEtAABB1ABrDgIAAVQLIAFBAWohAUGGASEDDPgBCyABQQFqIQFBhwEhAwz3AQtBnQEhAyABIARGDY8CIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbjPAGotAABHDVIgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADJACCyACQQA2AgAgBkEBaiEBQSYMUwtBngEhAyABIARGDY4CIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbrPAGotAABHDVEgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI8CCyACQQA2AgAgBkEBaiEBQQMMUgtBnwEhAyABIARGDY0CIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQe3PAGotAABHDVAgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI4CCyACQQA2AgAgBkEBaiEBQQwMUQtBoAEhAyABIARGDYwCIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQbzPAGotAABHDU8gAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI0CCyACQQA2AgAgBkEBaiEBQQ0MUAsgASAERgRAQaEBIQMMjAILAkACQCABLQAAQcYAaw4LAE9PT09PT09PTwFPCyABQQFqIQFBiwEhAwzzAQsgAUEBaiEBQYwBIQMM8gELIAEgBEYEQEGiASEDDIsCCyABLQAAQdAARw1MIAFBAWohAQxGCyABIARGBEBBowEhAwyKAgsCQAJAIAEtAABByQBrDgcBTU1NTU0ATQsgAUEBaiEBQY4BIQMM8QELIAFBAWohAUEiDE0LQaQBIQMgASAERg2IAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHAzwBqLQAARw1LIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyJAgsgAkEANgIAIAZBAWohAUEdDEwLIAEgBEYEQEGlASEDDIgCCwJAAkAgAS0AAEHSAGsOAwBLAUsLIAFBAWohAUGQASEDDO8BCyABQQFqIQFBBAxLCyABIARGBEBBpgEhAwyHAgsCQAJAAkACQAJAIAEtAABBwQBrDhUATU1NTU1NTU1NTQFNTQJNTQNNTQRNCyABQQFqIQFBiAEhAwzxAQsgAUEBaiEBQYkBIQMM8AELIAFBAWohAUGKASEDDO8BCyABQQFqIQFBjwEhAwzuAQsgAUEBaiEBQZEBIQMM7QELQacBIQMgASAERg2FAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHtzwBqLQAARw1IIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyGAgsgAkEANgIAIAZBAWohAUERDEkLQagBIQMgASAERg2EAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHCzwBqLQAARw1HIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyFAgsgAkEANgIAIAZBAWohAUEsDEgLQakBIQMgASAERg2DAiACKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEHFzwBqLQAARw1GIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyEAgsgAkEANgIAIAZBAWohAUErDEcLQaoBIQMgASAERg2CAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHKzwBqLQAARw1FIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyDAgsgAkEANgIAIAZBAWohAUEUDEYLIAEgBEYEQEGrASEDDIICCwJAAkACQAJAIAEtAABBwgBrDg8AAQJHR0dHR0dHR0dHRwNHCyABQQFqIQFBkwEhAwzrAQsgAUEBaiEBQZQBIQMM6gELIAFBAWohAUGVASEDDOkBCyABQQFqIQFBlgEhAwzoAQsgASAERgRAQawBIQMMgQILIAEtAABBxQBHDUIgAUEBaiEBDD0LQa0BIQMgASAERg3/ASACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHNzwBqLQAARw1CIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyAAgsgAkEANgIAIAZBAWohAUEODEMLIAEgBEYEQEGuASEDDP8BCyABLQAAQdAARw1AIAFBAWohAUElDEILQa8BIQMgASAERg39ASACKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEHQzwBqLQAARw1AIABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz+AQsgAkEANgIAIAZBAWohAUEqDEELIAEgBEYEQEGwASEDDP0BCwJAAkAgAS0AAEHVAGsOCwBAQEBAQEBAQEABQAsgAUEBaiEBQZoBIQMM5AELIAFBAWohAUGbASEDDOMBCyABIARGBEBBsQEhAwz8AQsCQAJAIAEtAABBwQBrDhQAPz8/Pz8/Pz8/Pz8/Pz8/Pz8/AT8LIAFBAWohAUGZASEDDOMBCyABQQFqIQFBnAEhAwziAQtBsgEhAyABIARGDfoBIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQdnPAGotAABHDT0gAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPsBCyACQQA2AgAgBkEBaiEBQSEMPgtBswEhAyABIARGDfkBIAIoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAS0AACAAQd3PAGotAABHDTwgAEEGRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPoBCyACQQA2AgAgBkEBaiEBQRoMPQsgASAERgRAQbQBIQMM+QELAkACQAJAIAEtAABBxQBrDhEAPT09PT09PT09AT09PT09Aj0LIAFBAWohAUGdASEDDOEBCyABQQFqIQFBngEhAwzgAQsgAUEBaiEBQZ8BIQMM3wELQbUBIQMgASAERg33ASACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHkzwBqLQAARw06IABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz4AQsgAkEANgIAIAZBAWohAUEoDDsLQbYBIQMgASAERg32ASACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHqzwBqLQAARw05IABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz3AQsgAkEANgIAIAZBAWohAUEHDDoLIAEgBEYEQEG3ASEDDPYBCwJAAkAgAS0AAEHFAGsODgA5OTk5OTk5OTk5OTkBOQsgAUEBaiEBQaEBIQMM3QELIAFBAWohAUGiASEDDNwBC0G4ASEDIAEgBEYN9AEgAigCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABB7c8Aai0AAEcNNyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM9QELIAJBADYCACAGQQFqIQFBEgw4C0G5ASEDIAEgBEYN8wEgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8M8Aai0AAEcNNiAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM9AELIAJBADYCACAGQQFqIQFBIAw3C0G6ASEDIAEgBEYN8gEgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8s8Aai0AAEcNNSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM8wELIAJBADYCACAGQQFqIQFBDww2CyABIARGBEBBuwEhAwzyAQsCQAJAIAEtAABByQBrDgcANTU1NTUBNQsgAUEBaiEBQaUBIQMM2QELIAFBAWohAUGmASEDDNgBC0G8ASEDIAEgBEYN8AEgAigCACIAIAQgAWtqIQUgASAAa0EHaiEGAkADQCABLQAAIABB9M8Aai0AAEcNMyAAQQdGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM8QELIAJBADYCACAGQQFqIQFBGww0CyABIARGBEBBvQEhAwzwAQsCQAJAAkAgAS0AAEHCAGsOEgA0NDQ0NDQ0NDQBNDQ0NDQ0AjQLIAFBAWohAUGkASEDDNgBCyABQQFqIQFBpwEhAwzXAQsgAUEBaiEBQagBIQMM1gELIAEgBEYEQEG+ASEDDO8BCyABLQAAQc4ARw0wIAFBAWohAQwsCyABIARGBEBBvwEhAwzuAQsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABLQAAQcEAaw4VAAECAz8EBQY/Pz8HCAkKCz8MDQ4PPwsgAUEBaiEBQegAIQMM4wELIAFBAWohAUHpACEDDOIBCyABQQFqIQFB7gAhAwzhAQsgAUEBaiEBQfIAIQMM4AELIAFBAWohAUHzACEDDN8BCyABQQFqIQFB9gAhAwzeAQsgAUEBaiEBQfcAIQMM3QELIAFBAWohAUH6ACEDDNwBCyABQQFqIQFBgwEhAwzbAQsgAUEBaiEBQYQBIQMM2gELIAFBAWohAUGFASEDDNkBCyABQQFqIQFBkgEhAwzYAQsgAUEBaiEBQZgBIQMM1wELIAFBAWohAUGgASEDDNYBCyABQQFqIQFBowEhAwzVAQsgAUEBaiEBQaoBIQMM1AELIAEgBEcEQCACQRA2AgggAiABNgIEQasBIQMM1AELQcABIQMM7AELQQAhAAJAIAIoAjgiA0UNACADKAI0IgNFDQAgAiADEQAAIQALIABFDV4gAEEVRw0HIAJB0QA2AhwgAiABNgIUIAJBsBc2AhAgAkEVNgIMQQAhAwzrAQsgAUEBaiABIARHDQgaQcIBIQMM6gELA0ACQCABLQAAQQprDgQIAAALAAsgBCABQQFqIgFHDQALQcMBIQMM6QELIAEgBEcEQCACQRE2AgggAiABNgIEQQEhAwzQAQtBxAEhAwzoAQsgASAERgRAQcUBIQMM6AELAkACQCABLQAAQQprDgQBKCgAKAsgAUEBagwJCyABQQFqDAULIAEgBEYEQEHGASEDDOcBCwJAAkAgAS0AAEEKaw4XAQsLAQsLCwsLCwsLCwsLCwsLCwsLCwALCyABQQFqIQELQbABIQMMzQELIAEgBEYEQEHIASEDDOYBCyABLQAAQSBHDQkgAkEAOwEyIAFBAWohAUGzASEDDMwBCwNAIAEhAAJAIAEgBEcEQCABLQAAQTBrQf8BcSIDQQpJDQEMJwtBxwEhAwzmAQsCQCACLwEyIgFBmTNLDQAgAiABQQpsIgU7ATIgBUH+/wNxIANB//8Dc0sNACAAQQFqIQEgAiADIAVqIgM7ATIgA0H//wNxQegHSQ0BCwtBACEDIAJBADYCHCACQcEJNgIQIAJBDTYCDCACIABBAWo2AhQM5AELIAJBADYCHCACIAE2AhQgAkHwDDYCECACQRs2AgxBACEDDOMBCyACKAIEIQAgAkEANgIEIAIgACABECYiAA0BIAFBAWoLIQFBrQEhAwzIAQsgAkHBATYCHCACIAA2AgwgAiABQQFqNgIUQQAhAwzgAQsgAigCBCEAIAJBADYCBCACIAAgARAmIgANASABQQFqCyEBQa4BIQMMxQELIAJBwgE2AhwgAiAANgIMIAIgAUEBajYCFEEAIQMM3QELIAJBADYCHCACIAE2AhQgAkGXCzYCECACQQ02AgxBACEDDNwBCyACQQA2AhwgAiABNgIUIAJB4xA2AhAgAkEJNgIMQQAhAwzbAQsgAkECOgAoDKwBC0EAIQMgAkEANgIcIAJBrws2AhAgAkECNgIMIAIgAUEBajYCFAzZAQtBAiEDDL8BC0ENIQMMvgELQSYhAwy9AQtBFSEDDLwBC0EWIQMMuwELQRghAwy6AQtBHCEDDLkBC0EdIQMMuAELQSAhAwy3AQtBISEDDLYBC0EjIQMMtQELQcYAIQMMtAELQS4hAwyzAQtBPSEDDLIBC0HLACEDDLEBC0HOACEDDLABC0HYACEDDK8BC0HZACEDDK4BC0HbACEDDK0BC0HxACEDDKwBC0H0ACEDDKsBC0GNASEDDKoBC0GXASEDDKkBC0GpASEDDKgBC0GvASEDDKcBC0GxASEDDKYBCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJB8Rs2AhAgAkEGNgIMDL0BCyACQQA2AgAgBkEBaiEBQSQLOgApIAIoAgQhACACQQA2AgQgAiAAIAEQJyIARQRAQeUAIQMMowELIAJB+QA2AhwgAiABNgIUIAIgADYCDEEAIQMMuwELIABBFUcEQCACQQA2AhwgAiABNgIUIAJBzA42AhAgAkEgNgIMQQAhAwy7AQsgAkH4ADYCHCACIAE2AhQgAkHKGDYCECACQRU2AgxBACEDDLoBCyACQQA2AhwgAiABNgIUIAJBjhs2AhAgAkEGNgIMQQAhAwy5AQsgAkEANgIcIAIgATYCFCACQf4RNgIQIAJBBzYCDEEAIQMMuAELIAJBADYCHCACIAE2AhQgAkGMHDYCECACQQc2AgxBACEDDLcBCyACQQA2AhwgAiABNgIUIAJBww82AhAgAkEHNgIMQQAhAwy2AQsgAkEANgIcIAIgATYCFCACQcMPNgIQIAJBBzYCDEEAIQMMtQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxBACEDDKIBCyACQeQANgIcIAIgATYCFCACQeMXNgIQIAJBFTYCDEEAIQMMoQELIAJBADYCACAGQQFqIQEgAi0AKSIAQSNrQQtJDQQCQCAAQQZLDQBBASAAdEHKAHFFDQAMBQtBACEDIAJBADYCHCACIAE2AhQgAkH3CTYCECACQQg2AgwMoAELIAJBADYCACAGQQFqIQEgAi0AKUEhRg0DIAJBADYCHCACIAE2AhQgAkGbCjYCECACQQg2AgxBACEDDJ8BCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJBkDM2AhAgAkEINgIMDJ0BCyACQQA2AgAgBkEBaiEBIAItAClBI0kNACACQQA2AhwgAiABNgIUIAJB0wk2AhAgAkEINgIMQQAhAwycAQtB0QAhAwyCAQsgAS0AAEEwayIAQf8BcUEKSQRAIAIgADoAKiABQQFqIQFBzwAhAwyCAQsgAigCBCEAIAJBADYCBCACIAAgARAoIgBFDYYBIAJB3gA2AhwgAiABNgIUIAIgADYCDEEAIQMMmgELIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ2GASACQdwANgIcIAIgATYCFCACIAA2AgxBACEDDJkBCyACKAIEIQAgAkEANgIEIAIgACAFECgiAEUEQCAFIQEMhwELIAJB2gA2AhwgAiAFNgIUIAIgADYCDAyYAQtBACEBQQEhAwsgAiADOgArIAVBAWohAwJAAkACQCACLQAtQRBxDQACQAJAAkAgAi0AKg4DAQACBAsgBkUNAwwCCyAADQEMAgsgAUUNAQsgAigCBCEAIAJBADYCBCACIAAgAxAoIgBFBEAgAyEBDAILIAJB2AA2AhwgAiADNgIUIAIgADYCDEEAIQMMmAELIAIoAgQhACACQQA2AgQgAiAAIAMQKCIARQRAIAMhAQyHAQsgAkHZADYCHCACIAM2AhQgAiAANgIMQQAhAwyXAQtBzAAhAwx9CyAAQRVHBEAgAkEANgIcIAIgATYCFCACQZQNNgIQIAJBITYCDEEAIQMMlgELIAJB1wA2AhwgAiABNgIUIAJByRc2AhAgAkEVNgIMQQAhAwyVAQtBACEDIAJBADYCHCACIAE2AhQgAkGAETYCECACQQk2AgwMlAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0AIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMkwELQckAIQMMeQsgAkEANgIcIAIgATYCFCACQcEoNgIQIAJBBzYCDCACQQA2AgBBACEDDJEBCyACKAIEIQBBACEDIAJBADYCBCACIAAgARAlIgBFDQAgAkHSADYCHCACIAE2AhQgAiAANgIMDJABC0HIACEDDHYLIAJBADYCACAFIQELIAJBgBI7ASogAUEBaiEBQQAhAAJAIAIoAjgiA0UNACADKAIwIgNFDQAgAiADEQAAIQALIAANAQtBxwAhAwxzCyAAQRVGBEAgAkHRADYCHCACIAE2AhQgAkHjFzYCECACQRU2AgxBACEDDIwBC0EAIQMgAkEANgIcIAIgATYCFCACQbkNNgIQIAJBGjYCDAyLAQtBACEDIAJBADYCHCACIAE2AhQgAkGgGTYCECACQR42AgwMigELIAEtAABBOkYEQCACKAIEIQBBACEDIAJBADYCBCACIAAgARApIgBFDQEgAkHDADYCHCACIAA2AgwgAiABQQFqNgIUDIoBC0EAIQMgAkEANgIcIAIgATYCFCACQbERNgIQIAJBCjYCDAyJAQsgAUEBaiEBQTshAwxvCyACQcMANgIcIAIgADYCDCACIAFBAWo2AhQMhwELQQAhAyACQQA2AhwgAiABNgIUIAJB8A42AhAgAkEcNgIMDIYBCyACIAIvATBBEHI7ATAMZgsCQCACLwEwIgBBCHFFDQAgAi0AKEEBRw0AIAItAC1BCHFFDQMLIAIgAEH3+wNxQYAEcjsBMAwECyABIARHBEACQANAIAEtAABBMGsiAEH/AXFBCk8EQEE1IQMMbgsgAikDICIKQpmz5syZs+bMGVYNASACIApCCn4iCjcDICAKIACtQv8BgyILQn+FVg0BIAIgCiALfDcDICAEIAFBAWoiAUcNAAtBOSEDDIUBCyACKAIEIQBBACEDIAJBADYCBCACIAAgAUEBaiIBECoiAA0MDHcLQTkhAwyDAQsgAi0AMEEgcQ0GQcUBIQMMaQtBACEDIAJBADYCBCACIAEgARAqIgBFDQQgAkE6NgIcIAIgADYCDCACIAFBAWo2AhQMgQELIAItAChBAUcNACACLQAtQQhxRQ0BC0E3IQMMZgsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIABEAgAkE7NgIcIAIgADYCDCACIAFBAWo2AhQMfwsgAUEBaiEBDG4LIAJBCDoALAwECyABQQFqIQEMbQtBACEDIAJBADYCHCACIAE2AhQgAkHkEjYCECACQQQ2AgwMewsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIARQ1sIAJBNzYCHCACIAE2AhQgAiAANgIMDHoLIAIgAi8BMEEgcjsBMAtBMCEDDF8LIAJBNjYCHCACIAE2AhQgAiAANgIMDHcLIABBLEcNASABQQFqIQBBASEBAkACQAJAAkACQCACLQAsQQVrDgQDAQIEAAsgACEBDAQLQQIhAQwBC0EEIQELIAJBAToALCACIAIvATAgAXI7ATAgACEBDAELIAIgAi8BMEEIcjsBMCAAIQELQTkhAwxcCyACQQA6ACwLQTQhAwxaCyABIARGBEBBLSEDDHMLAkACQANAAkAgAS0AAEEKaw4EAgAAAwALIAQgAUEBaiIBRw0AC0EtIQMMdAsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIARQ0CIAJBLDYCHCACIAE2AhQgAiAANgIMDHMLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABECoiAEUEQCABQQFqIQEMAgsgAkEsNgIcIAIgADYCDCACIAFBAWo2AhQMcgsgAS0AAEENRgRAIAIoAgQhAEEAIQMgAkEANgIEIAIgACABECoiAEUEQCABQQFqIQEMAgsgAkEsNgIcIAIgADYCDCACIAFBAWo2AhQMcgsgAi0ALUEBcQRAQcQBIQMMWQsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIADQEMZQtBLyEDDFcLIAJBLjYCHCACIAE2AhQgAiAANgIMDG8LQQAhAyACQQA2AhwgAiABNgIUIAJB8BQ2AhAgAkEDNgIMDG4LQQEhAwJAAkACQAJAIAItACxBBWsOBAMBAgAECyACIAIvATBBCHI7ATAMAwtBAiEDDAELQQQhAwsgAkEBOgAsIAIgAi8BMCADcjsBMAtBKiEDDFMLQQAhAyACQQA2AhwgAiABNgIUIAJB4Q82AhAgAkEKNgIMDGsLQQEhAwJAAkACQAJAAkACQCACLQAsQQJrDgcFBAQDAQIABAsgAiACLwEwQQhyOwEwDAMLQQIhAwwBC0EEIQMLIAJBAToALCACIAIvATAgA3I7ATALQSshAwxSC0EAIQMgAkEANgIcIAIgATYCFCACQasSNgIQIAJBCzYCDAxqC0EAIQMgAkEANgIcIAIgATYCFCACQf0NNgIQIAJBHTYCDAxpCyABIARHBEADQCABLQAAQSBHDUggBCABQQFqIgFHDQALQSUhAwxpC0ElIQMMaAsgAi0ALUEBcQRAQcMBIQMMTwsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKSIABEAgAkEmNgIcIAIgADYCDCACIAFBAWo2AhQMaAsgAUEBaiEBDFwLIAFBAWohASACLwEwIgBBgAFxBEBBACEAAkAgAigCOCIDRQ0AIAMoAlQiA0UNACACIAMRAAAhAAsgAEUNBiAAQRVHDR8gAkEFNgIcIAIgATYCFCACQfkXNgIQIAJBFTYCDEEAIQMMZwsCQCAAQaAEcUGgBEcNACACLQAtQQJxDQBBACEDIAJBADYCHCACIAE2AhQgAkGWEzYCECACQQQ2AgwMZwsgAgJ/IAIvATBBFHFBFEYEQEEBIAItAChBAUYNARogAi8BMkHlAEYMAQsgAi0AKUEFRgs6AC5BACEAAkAgAigCOCIDRQ0AIAMoAiQiA0UNACACIAMRAAAhAAsCQAJAAkACQAJAIAAOFgIBAAQEBAQEBAQEBAQEBAQEBAQEBAMECyACQQE6AC4LIAIgAi8BMEHAAHI7ATALQSchAwxPCyACQSM2AhwgAiABNgIUIAJBpRY2AhAgAkEVNgIMQQAhAwxnC0EAIQMgAkEANgIcIAIgATYCFCACQdULNgIQIAJBETYCDAxmC0EAIQACQCACKAI4IgNFDQAgAygCLCIDRQ0AIAIgAxEAACEACyAADQELQQ4hAwxLCyAAQRVGBEAgAkECNgIcIAIgATYCFCACQbAYNgIQIAJBFTYCDEEAIQMMZAtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMYwtBACEDIAJBADYCHCACIAE2AhQgAkGqHDYCECACQQ82AgwMYgsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEgCqdqIgEQKyIARQ0AIAJBBTYCHCACIAE2AhQgAiAANgIMDGELQQ8hAwxHC0EAIQMgAkEANgIcIAIgATYCFCACQc0TNgIQIAJBDDYCDAxfC0IBIQoLIAFBAWohAQJAIAIpAyAiC0L//////////w9YBEAgAiALQgSGIAqENwMgDAELQQAhAyACQQA2AhwgAiABNgIUIAJBrQk2AhAgAkEMNgIMDF4LQSQhAwxEC0EAIQMgAkEANgIcIAIgATYCFCACQc0TNgIQIAJBDDYCDAxcCyACKAIEIQBBACEDIAJBADYCBCACIAAgARAsIgBFBEAgAUEBaiEBDFILIAJBFzYCHCACIAA2AgwgAiABQQFqNgIUDFsLIAIoAgQhAEEAIQMgAkEANgIEAkAgAiAAIAEQLCIARQRAIAFBAWohAQwBCyACQRY2AhwgAiAANgIMIAIgAUEBajYCFAxbC0EfIQMMQQtBACEDIAJBADYCHCACIAE2AhQgAkGaDzYCECACQSI2AgwMWQsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQLSIARQRAIAFBAWohAQxQCyACQRQ2AhwgAiAANgIMIAIgAUEBajYCFAxYCyACKAIEIQBBACEDIAJBADYCBAJAIAIgACABEC0iAEUEQCABQQFqIQEMAQsgAkETNgIcIAIgADYCDCACIAFBAWo2AhQMWAtBHiEDDD4LQQAhAyACQQA2AhwgAiABNgIUIAJBxgw2AhAgAkEjNgIMDFYLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABEC0iAEUEQCABQQFqIQEMTgsgAkERNgIcIAIgADYCDCACIAFBAWo2AhQMVQsgAkEQNgIcIAIgATYCFCACIAA2AgwMVAtBACEDIAJBADYCHCACIAE2AhQgAkHGDDYCECACQSM2AgwMUwtBACEDIAJBADYCHCACIAE2AhQgAkHAFTYCECACQQI2AgwMUgsgAigCBCEAQQAhAyACQQA2AgQCQCACIAAgARAtIgBFBEAgAUEBaiEBDAELIAJBDjYCHCACIAA2AgwgAiABQQFqNgIUDFILQRshAww4C0EAIQMgAkEANgIcIAIgATYCFCACQcYMNgIQIAJBIzYCDAxQCyACKAIEIQBBACEDIAJBADYCBAJAIAIgACABECwiAEUEQCABQQFqIQEMAQsgAkENNgIcIAIgADYCDCACIAFBAWo2AhQMUAtBGiEDDDYLQQAhAyACQQA2AhwgAiABNgIUIAJBmg82AhAgAkEiNgIMDE4LIAIoAgQhAEEAIQMgAkEANgIEAkAgAiAAIAEQLCIARQRAIAFBAWohAQwBCyACQQw2AhwgAiAANgIMIAIgAUEBajYCFAxOC0EZIQMMNAtBACEDIAJBADYCHCACIAE2AhQgAkGaDzYCECACQSI2AgwMTAsgAEEVRwRAQQAhAyACQQA2AhwgAiABNgIUIAJBgww2AhAgAkETNgIMDEwLIAJBCjYCHCACIAE2AhQgAkHkFjYCECACQRU2AgxBACEDDEsLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABIAqnaiIBECsiAARAIAJBBzYCHCACIAE2AhQgAiAANgIMDEsLQRMhAwwxCyAAQRVHBEBBACEDIAJBADYCHCACIAE2AhQgAkHaDTYCECACQRQ2AgwMSgsgAkEeNgIcIAIgATYCFCACQfkXNgIQIAJBFTYCDEEAIQMMSQtBACEAAkAgAigCOCIDRQ0AIAMoAiwiA0UNACACIAMRAAAhAAsgAEUNQSAAQRVGBEAgAkEDNgIcIAIgATYCFCACQbAYNgIQIAJBFTYCDEEAIQMMSQtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMSAtBACEDIAJBADYCHCACIAE2AhQgAkHaDTYCECACQRQ2AgwMRwtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMRgsgAkEAOgAvIAItAC1BBHFFDT8LIAJBADoALyACQQE6ADRBACEDDCsLQQAhAyACQQA2AhwgAkHkETYCECACQQc2AgwgAiABQQFqNgIUDEMLAkADQAJAIAEtAABBCmsOBAACAgACCyAEIAFBAWoiAUcNAAtB3QEhAwxDCwJAAkAgAi0ANEEBRw0AQQAhAAJAIAIoAjgiA0UNACADKAJYIgNFDQAgAiADEQAAIQALIABFDQAgAEEVRw0BIAJB3AE2AhwgAiABNgIUIAJB1RY2AhAgAkEVNgIMQQAhAwxEC0HBASEDDCoLIAJBADYCHCACIAE2AhQgAkHpCzYCECACQR82AgxBACEDDEILAkACQCACLQAoQQFrDgIEAQALQcABIQMMKQtBuQEhAwwoCyACQQI6AC9BACEAAkAgAigCOCIDRQ0AIAMoAgAiA0UNACACIAMRAAAhAAsgAEUEQEHCASEDDCgLIABBFUcEQCACQQA2AhwgAiABNgIUIAJBpAw2AhAgAkEQNgIMQQAhAwxBCyACQdsBNgIcIAIgATYCFCACQfoWNgIQIAJBFTYCDEEAIQMMQAsgASAERgRAQdoBIQMMQAsgAS0AAEHIAEYNASACQQE6ACgLQawBIQMMJQtBvwEhAwwkCyABIARHBEAgAkEQNgIIIAIgATYCBEG+ASEDDCQLQdkBIQMMPAsgASAERgRAQdgBIQMMPAsgAS0AAEHIAEcNBCABQQFqIQFBvQEhAwwiCyABIARGBEBB1wEhAww7CwJAAkAgAS0AAEHFAGsOEAAFBQUFBQUFBQUFBQUFBQEFCyABQQFqIQFBuwEhAwwiCyABQQFqIQFBvAEhAwwhC0HWASEDIAEgBEYNOSACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGD0ABqLQAARw0DIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAw6CyACKAIEIQAgAkIANwMAIAIgACAGQQFqIgEQJyIARQRAQcYBIQMMIQsgAkHVATYCHCACIAE2AhQgAiAANgIMQQAhAww5C0HUASEDIAEgBEYNOCACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGB0ABqLQAARw0CIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAw5CyACQYEEOwEoIAIoAgQhACACQgA3AwAgAiAAIAZBAWoiARAnIgANAwwCCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJB2Bs2AhAgAkEINgIMDDYLQboBIQMMHAsgAkHTATYCHCACIAE2AhQgAiAANgIMQQAhAww0C0EAIQACQCACKAI4IgNFDQAgAygCOCIDRQ0AIAIgAxEAACEACyAARQ0AIABBFUYNASACQQA2AhwgAiABNgIUIAJBzA42AhAgAkEgNgIMQQAhAwwzC0HkACEDDBkLIAJB+AA2AhwgAiABNgIUIAJByhg2AhAgAkEVNgIMQQAhAwwxC0HSASEDIAQgASIARg0wIAQgAWsgAigCACIBaiEFIAAgAWtBBGohBgJAA0AgAC0AACABQfzPAGotAABHDQEgAUEERg0DIAFBAWohASAEIABBAWoiAEcNAAsgAiAFNgIADDELIAJBADYCHCACIAA2AhQgAkGQMzYCECACQQg2AgwgAkEANgIAQQAhAwwwCyABIARHBEAgAkEONgIIIAIgATYCBEG3ASEDDBcLQdEBIQMMLwsgAkEANgIAIAZBAWohAQtBuAEhAwwUCyABIARGBEBB0AEhAwwtCyABLQAAQTBrIgBB/wFxQQpJBEAgAiAAOgAqIAFBAWohAUG2ASEDDBQLIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ0UIAJBzwE2AhwgAiABNgIUIAIgADYCDEEAIQMMLAsgASAERgRAQc4BIQMMLAsCQCABLQAAQS5GBEAgAUEBaiEBDAELIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ0VIAJBzQE2AhwgAiABNgIUIAIgADYCDEEAIQMMLAtBtQEhAwwSCyAEIAEiBUYEQEHMASEDDCsLQQAhAEEBIQFBASEGQQAhAwJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAUtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyEDQQAhAUEAIQYMAgtBCSEDQQEhAEEAIQFBACEGDAELQQAhAUEBIQMLIAIgAzoAKyAFQQFqIQMCQAJAIAItAC1BEHENAAJAAkACQCACLQAqDgMBAAIECyAGRQ0DDAILIAANAQwCCyABRQ0BCyACKAIEIQAgAkEANgIEIAIgACADECgiAEUEQCADIQEMAwsgAkHJATYCHCACIAM2AhQgAiAANgIMQQAhAwwtCyACKAIEIQAgAkEANgIEIAIgACADECgiAEUEQCADIQEMGAsgAkHKATYCHCACIAM2AhQgAiAANgIMQQAhAwwsCyACKAIEIQAgAkEANgIEIAIgACAFECgiAEUEQCAFIQEMFgsgAkHLATYCHCACIAU2AhQgAiAANgIMDCsLQbQBIQMMEQtBACEAAkAgAigCOCIDRQ0AIAMoAjwiA0UNACACIAMRAAAhAAsCQCAABEAgAEEVRg0BIAJBADYCHCACIAE2AhQgAkGUDTYCECACQSE2AgxBACEDDCsLQbIBIQMMEQsgAkHIATYCHCACIAE2AhQgAkHJFzYCECACQRU2AgxBACEDDCkLIAJBADYCACAGQQFqIQFB9QAhAwwPCyACLQApQQVGBEBB4wAhAwwPC0HiACEDDA4LIAAhASACQQA2AgALIAJBADoALEEJIQMMDAsgAkEANgIAIAdBAWohAUHAACEDDAsLQQELOgAsIAJBADYCACAGQQFqIQELQSkhAwwIC0E4IQMMBwsCQCABIARHBEADQCABLQAAQYA+ai0AACIAQQFHBEAgAEECRw0DIAFBAWohAQwFCyAEIAFBAWoiAUcNAAtBPiEDDCELQT4hAwwgCwsgAkEAOgAsDAELQQshAwwEC0E6IQMMAwsgAUEBaiEBQS0hAwwCCyACIAE6ACwgAkEANgIAIAZBAWohAUEMIQMMAQsgAkEANgIAIAZBAWohAUEKIQMMAAsAC0EAIQMgAkEANgIcIAIgATYCFCACQc0QNgIQIAJBCTYCDAwXC0EAIQMgAkEANgIcIAIgATYCFCACQekKNgIQIAJBCTYCDAwWC0EAIQMgAkEANgIcIAIgATYCFCACQbcQNgIQIAJBCTYCDAwVC0EAIQMgAkEANgIcIAIgATYCFCACQZwRNgIQIAJBCTYCDAwUC0EAIQMgAkEANgIcIAIgATYCFCACQc0QNgIQIAJBCTYCDAwTC0EAIQMgAkEANgIcIAIgATYCFCACQekKNgIQIAJBCTYCDAwSC0EAIQMgAkEANgIcIAIgATYCFCACQbcQNgIQIAJBCTYCDAwRC0EAIQMgAkEANgIcIAIgATYCFCACQZwRNgIQIAJBCTYCDAwQC0EAIQMgAkEANgIcIAIgATYCFCACQZcVNgIQIAJBDzYCDAwPC0EAIQMgAkEANgIcIAIgATYCFCACQZcVNgIQIAJBDzYCDAwOC0EAIQMgAkEANgIcIAIgATYCFCACQcASNgIQIAJBCzYCDAwNC0EAIQMgAkEANgIcIAIgATYCFCACQZUJNgIQIAJBCzYCDAwMC0EAIQMgAkEANgIcIAIgATYCFCACQeEPNgIQIAJBCjYCDAwLC0EAIQMgAkEANgIcIAIgATYCFCACQfsPNgIQIAJBCjYCDAwKC0EAIQMgAkEANgIcIAIgATYCFCACQfEZNgIQIAJBAjYCDAwJC0EAIQMgAkEANgIcIAIgATYCFCACQcQUNgIQIAJBAjYCDAwIC0EAIQMgAkEANgIcIAIgATYCFCACQfIVNgIQIAJBAjYCDAwHCyACQQI2AhwgAiABNgIUIAJBnBo2AhAgAkEWNgIMQQAhAwwGC0EBIQMMBQtB1AAhAyABIARGDQQgCEEIaiEJIAIoAgAhBQJAAkAgASAERwRAIAVB2MIAaiEHIAQgBWogAWshACAFQX9zQQpqIgUgAWohBgNAIAEtAAAgBy0AAEcEQEECIQcMAwsgBUUEQEEAIQcgBiEBDAMLIAVBAWshBSAHQQFqIQcgBCABQQFqIgFHDQALIAAhBSAEIQELIAlBATYCACACIAU2AgAMAQsgAkEANgIAIAkgBzYCAAsgCSABNgIEIAgoAgwhACAIKAIIDgMBBAIACwALIAJBADYCHCACQbUaNgIQIAJBFzYCDCACIABBAWo2AhRBACEDDAILIAJBADYCHCACIAA2AhQgAkHKGjYCECACQQk2AgxBACEDDAELIAEgBEYEQEEiIQMMAQsgAkEJNgIIIAIgATYCBEEhIQMLIAhBEGokACADRQRAIAIoAgwhAAwBCyACIAM2AhxBACEAIAIoAgQiAUUNACACIAEgBCACKAIIEQEAIgFFDQAgAiAENgIUIAIgATYCDCABIQALIAALvgIBAn8gAEEAOgAAIABB3ABqIgFBAWtBADoAACAAQQA6AAIgAEEAOgABIAFBA2tBADoAACABQQJrQQA6AAAgAEEAOgADIAFBBGtBADoAAEEAIABrQQNxIgEgAGoiAEEANgIAQdwAIAFrQXxxIgIgAGoiAUEEa0EANgIAAkAgAkEJSQ0AIABBADYCCCAAQQA2AgQgAUEIa0EANgIAIAFBDGtBADYCACACQRlJDQAgAEEANgIYIABBADYCFCAAQQA2AhAgAEEANgIMIAFBEGtBADYCACABQRRrQQA2AgAgAUEYa0EANgIAIAFBHGtBADYCACACIABBBHFBGHIiAmsiAUEgSQ0AIAAgAmohAANAIABCADcDGCAAQgA3AxAgAEIANwMIIABCADcDACAAQSBqIQAgAUEgayIBQR9LDQALCwtWAQF/AkAgACgCDA0AAkACQAJAAkAgAC0ALw4DAQADAgsgACgCOCIBRQ0AIAEoAiwiAUUNACAAIAERAAAiAQ0DC0EADwsACyAAQcMWNgIQQQ4hAQsgAQsaACAAKAIMRQRAIABB0Rs2AhAgAEEVNgIMCwsUACAAKAIMQRVGBEAgAEEANgIMCwsUACAAKAIMQRZGBEAgAEEANgIMCwsHACAAKAIMCwcAIAAoAhALCQAgACABNgIQCwcAIAAoAhQLFwAgAEEkTwRAAAsgAEECdEGgM2ooAgALFwAgAEEuTwRAAAsgAEECdEGwNGooAgALvwkBAX9B6yghAQJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB9ysPC0GQMQ8LQdcxDwtBoi0PC0HUJw8LQeArDwtBnywPC0HrMQ8LQdUfDwtByjEPC0HeJQ8LQdQeDwtB9BwPC0GnMg8LQbEdDwtBoB0PC0G5MQ8LQbwwDwtBkiEPC0GzJg8LQeksDwtBrB4PC0HUKw8LQfcmDwtBgCYPC0GwIQ8LQf4eDwtBjSMPC0GJLQ8LQfciDwtBoDEPC0GuHw8LQcYlDwtB6B4PC0GTIg8LQcIvDwtBwx0PC0GLLA8LQeEdDwtBjS8PC0HqIQ8LQbQtDwtB0i8PC0HfMg8LQdIyDwtB8DAPC0GpIg8LQfkjDwtBmR4PC0G1LA8LQZswDwtBkjIPC0G2Kw8LQcIiDwtB+DIPC0GeJQ8LQdAiDwtBuh4PC0GBHg8LAAtB1iEhAQsgAQsWACAAIAAtAC1B/gFxIAFBAEdyOgAtCxkAIAAgAC0ALUH9AXEgAUEAR0EBdHI6AC0LGQAgACAALQAtQfsBcSABQQBHQQJ0cjoALQsZACAAIAAtAC1B9wFxIAFBAEdBA3RyOgAtCz4BAn8CQCAAKAI4IgNFDQAgAygCBCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBxhE2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCCCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB9go2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCDCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB7Ro2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCECIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBlRA2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCFCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBqhs2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCGCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB7RM2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCKCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB9gg2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCHCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBwhk2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCICIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBlBQ2AhBBGCEECyAEC1kBAn8CQCAALQAoQQFGDQAgAC8BMiIBQeQAa0HkAEkNACABQcwBRg0AIAFBsAJGDQAgAC8BMCIAQcAAcQ0AQQEhAiAAQYgEcUGABEYNACAAQShxRSECCyACC4wBAQJ/AkACQAJAIAAtACpFDQAgAC0AK0UNACAALwEwIgFBAnFFDQEMAgsgAC8BMCIBQQFxRQ0BC0EBIQIgAC0AKEEBRg0AIAAvATIiAEHkAGtB5ABJDQAgAEHMAUYNACAAQbACRg0AIAFBwABxDQBBACECIAFBiARxQYAERg0AIAFBKHFBAEchAgsgAgtzACAAQRBq/QwAAAAAAAAAAAAAAAAAAAAA/QsDACAA/QwAAAAAAAAAAAAAAAAAAAAA/QsDACAAQTBq/QwAAAAAAAAAAAAAAAAAAAAA/QsDACAAQSBq/QwAAAAAAAAAAAAAAAAAAAAA/QsDACAAQd0BNgIcCwYAIAAQMguaLQELfyMAQRBrIgokAEGk0AAoAgAiCUUEQEHk0wAoAgAiBUUEQEHw0wBCfzcCAEHo0wBCgICEgICAwAA3AgBB5NMAIApBCGpBcHFB2KrVqgVzIgU2AgBB+NMAQQA2AgBByNMAQQA2AgALQczTAEGA1AQ2AgBBnNAAQYDUBDYCAEGw0AAgBTYCAEGs0ABBfzYCAEHQ0wBBgKwDNgIAA0AgAUHI0ABqIAFBvNAAaiICNgIAIAIgAUG00ABqIgM2AgAgAUHA0ABqIAM2AgAgAUHQ0ABqIAFBxNAAaiIDNgIAIAMgAjYCACABQdjQAGogAUHM0ABqIgI2AgAgAiADNgIAIAFB1NAAaiACNgIAIAFBIGoiAUGAAkcNAAtBjNQEQcGrAzYCAEGo0ABB9NMAKAIANgIAQZjQAEHAqwM2AgBBpNAAQYjUBDYCAEHM/wdBODYCAEGI1AQhCQsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAQewBTQRAQYzQACgCACIGQRAgAEETakFwcSAAQQtJGyIEQQN2IgB2IgFBA3EEQAJAIAFBAXEgAHJBAXMiAkEDdCIAQbTQAGoiASAAQbzQAGooAgAiACgCCCIDRgRAQYzQACAGQX4gAndxNgIADAELIAEgAzYCCCADIAE2AgwLIABBCGohASAAIAJBA3QiAkEDcjYCBCAAIAJqIgAgACgCBEEBcjYCBAwRC0GU0AAoAgAiCCAETw0BIAEEQAJAQQIgAHQiAkEAIAJrciABIAB0cWgiAEEDdCICQbTQAGoiASACQbzQAGooAgAiAigCCCIDRgRAQYzQACAGQX4gAHdxIgY2AgAMAQsgASADNgIIIAMgATYCDAsgAiAEQQNyNgIEIABBA3QiACAEayEFIAAgAmogBTYCACACIARqIgQgBUEBcjYCBCAIBEAgCEF4cUG00ABqIQBBoNAAKAIAIQMCf0EBIAhBA3Z0IgEgBnFFBEBBjNAAIAEgBnI2AgAgAAwBCyAAKAIICyIBIAM2AgwgACADNgIIIAMgADYCDCADIAE2AggLIAJBCGohAUGg0AAgBDYCAEGU0AAgBTYCAAwRC0GQ0AAoAgAiC0UNASALaEECdEG80gBqKAIAIgAoAgRBeHEgBGshBSAAIQIDQAJAIAIoAhAiAUUEQCACQRRqKAIAIgFFDQELIAEoAgRBeHEgBGsiAyAFSSECIAMgBSACGyEFIAEgACACGyEAIAEhAgwBCwsgACgCGCEJIAAoAgwiAyAARwRAQZzQACgCABogAyAAKAIIIgE2AgggASADNgIMDBALIABBFGoiAigCACIBRQRAIAAoAhAiAUUNAyAAQRBqIQILA0AgAiEHIAEiA0EUaiICKAIAIgENACADQRBqIQIgAygCECIBDQALIAdBADYCAAwPC0F/IQQgAEG/f0sNACAAQRNqIgFBcHEhBEGQ0AAoAgAiCEUNAEEAIARrIQUCQAJAAkACf0EAIARBgAJJDQAaQR8gBEH///8HSw0AGiAEQSYgAUEIdmciAGt2QQFxIABBAXRrQT5qCyIGQQJ0QbzSAGooAgAiAkUEQEEAIQFBACEDDAELQQAhASAEQRkgBkEBdmtBACAGQR9HG3QhAEEAIQMDQAJAIAIoAgRBeHEgBGsiByAFTw0AIAIhAyAHIgUNAEEAIQUgAiEBDAMLIAEgAkEUaigCACIHIAcgAiAAQR12QQRxakEQaigCACICRhsgASAHGyEBIABBAXQhACACDQALCyABIANyRQRAQQAhA0ECIAZ0IgBBACAAa3IgCHEiAEUNAyAAaEECdEG80gBqKAIAIQELIAFFDQELA0AgASgCBEF4cSAEayICIAVJIQAgAiAFIAAbIQUgASADIAAbIQMgASgCECIABH8gAAUgAUEUaigCAAsiAQ0ACwsgA0UNACAFQZTQACgCACAEa08NACADKAIYIQcgAyADKAIMIgBHBEBBnNAAKAIAGiAAIAMoAggiATYCCCABIAA2AgwMDgsgA0EUaiICKAIAIgFFBEAgAygCECIBRQ0DIANBEGohAgsDQCACIQYgASIAQRRqIgIoAgAiAQ0AIABBEGohAiAAKAIQIgENAAsgBkEANgIADA0LQZTQACgCACIDIARPBEBBoNAAKAIAIQECQCADIARrIgJBEE8EQCABIARqIgAgAkEBcjYCBCABIANqIAI2AgAgASAEQQNyNgIEDAELIAEgA0EDcjYCBCABIANqIgAgACgCBEEBcjYCBEEAIQBBACECC0GU0AAgAjYCAEGg0AAgADYCACABQQhqIQEMDwtBmNAAKAIAIgMgBEsEQCAEIAlqIgAgAyAEayIBQQFyNgIEQaTQACAANgIAQZjQACABNgIAIAkgBEEDcjYCBCAJQQhqIQEMDwtBACEBIAQCf0Hk0wAoAgAEQEHs0wAoAgAMAQtB8NMAQn83AgBB6NMAQoCAhICAgMAANwIAQeTTACAKQQxqQXBxQdiq1aoFczYCAEH40wBBADYCAEHI0wBBADYCAEGAgAQLIgAgBEHHAGoiBWoiBkEAIABrIgdxIgJPBEBB/NMAQTA2AgAMDwsCQEHE0wAoAgAiAUUNAEG80wAoAgAiCCACaiEAIAAgAU0gACAIS3ENAEEAIQFB/NMAQTA2AgAMDwtByNMALQAAQQRxDQQCQAJAIAkEQEHM0wAhAQNAIAEoAgAiACAJTQRAIAAgASgCBGogCUsNAwsgASgCCCIBDQALC0EAEDMiAEF/Rg0FIAIhBkHo0wAoAgAiAUEBayIDIABxBEAgAiAAayAAIANqQQAgAWtxaiEGCyAEIAZPDQUgBkH+////B0sNBUHE0wAoAgAiAwRAQbzTACgCACIHIAZqIQEgASAHTQ0GIAEgA0sNBgsgBhAzIgEgAEcNAQwHCyAGIANrIAdxIgZB/v///wdLDQQgBhAzIQAgACABKAIAIAEoAgRqRg0DIAAhAQsCQCAGIARByABqTw0AIAFBf0YNAEHs0wAoAgAiACAFIAZrakEAIABrcSIAQf7///8HSwRAIAEhAAwHCyAAEDNBf0cEQCAAIAZqIQYgASEADAcLQQAgBmsQMxoMBAsgASIAQX9HDQUMAwtBACEDDAwLQQAhAAwKCyAAQX9HDQILQcjTAEHI0wAoAgBBBHI2AgALIAJB/v///wdLDQEgAhAzIQBBABAzIQEgAEF/Rg0BIAFBf0YNASAAIAFPDQEgASAAayIGIARBOGpNDQELQbzTAEG80wAoAgAgBmoiATYCAEHA0wAoAgAgAUkEQEHA0wAgATYCAAsCQAJAAkBBpNAAKAIAIgIEQEHM0wAhAQNAIAAgASgCACIDIAEoAgQiBWpGDQIgASgCCCIBDQALDAILQZzQACgCACIBQQBHIAAgAU9xRQRAQZzQACAANgIAC0EAIQFB0NMAIAY2AgBBzNMAIAA2AgBBrNAAQX82AgBBsNAAQeTTACgCADYCAEHY0wBBADYCAANAIAFByNAAaiABQbzQAGoiAjYCACACIAFBtNAAaiIDNgIAIAFBwNAAaiADNgIAIAFB0NAAaiABQcTQAGoiAzYCACADIAI2AgAgAUHY0ABqIAFBzNAAaiICNgIAIAIgAzYCACABQdTQAGogAjYCACABQSBqIgFBgAJHDQALQXggAGtBD3EiASAAaiICIAZBOGsiAyABayIBQQFyNgIEQajQAEH00wAoAgA2AgBBmNAAIAE2AgBBpNAAIAI2AgAgACADakE4NgIEDAILIAAgAk0NACACIANJDQAgASgCDEEIcQ0AQXggAmtBD3EiACACaiIDQZjQACgCACAGaiIHIABrIgBBAXI2AgQgASAFIAZqNgIEQajQAEH00wAoAgA2AgBBmNAAIAA2AgBBpNAAIAM2AgAgAiAHakE4NgIEDAELIABBnNAAKAIASQRAQZzQACAANgIACyAAIAZqIQNBzNMAIQECQAJAAkADQCADIAEoAgBHBEAgASgCCCIBDQEMAgsLIAEtAAxBCHFFDQELQczTACEBA0AgASgCACIDIAJNBEAgAyABKAIEaiIFIAJLDQMLIAEoAgghAQwACwALIAEgADYCACABIAEoAgQgBmo2AgQgAEF4IABrQQ9xaiIJIARBA3I2AgQgA0F4IANrQQ9xaiIGIAQgCWoiBGshASACIAZGBEBBpNAAIAQ2AgBBmNAAQZjQACgCACABaiIANgIAIAQgAEEBcjYCBAwIC0Gg0AAoAgAgBkYEQEGg0AAgBDYCAEGU0ABBlNAAKAIAIAFqIgA2AgAgBCAAQQFyNgIEIAAgBGogADYCAAwICyAGKAIEIgVBA3FBAUcNBiAFQXhxIQggBUH/AU0EQCAFQQN2IQMgBigCCCIAIAYoAgwiAkYEQEGM0ABBjNAAKAIAQX4gA3dxNgIADAcLIAIgADYCCCAAIAI2AgwMBgsgBigCGCEHIAYgBigCDCIARwRAIAAgBigCCCICNgIIIAIgADYCDAwFCyAGQRRqIgIoAgAiBUUEQCAGKAIQIgVFDQQgBkEQaiECCwNAIAIhAyAFIgBBFGoiAigCACIFDQAgAEEQaiECIAAoAhAiBQ0ACyADQQA2AgAMBAtBeCAAa0EPcSIBIABqIgcgBkE4ayIDIAFrIgFBAXI2AgQgACADakE4NgIEIAIgBUE3IAVrQQ9xakE/ayIDIAMgAkEQakkbIgNBIzYCBEGo0ABB9NMAKAIANgIAQZjQACABNgIAQaTQACAHNgIAIANBEGpB1NMAKQIANwIAIANBzNMAKQIANwIIQdTTACADQQhqNgIAQdDTACAGNgIAQczTACAANgIAQdjTAEEANgIAIANBJGohAQNAIAFBBzYCACAFIAFBBGoiAUsNAAsgAiADRg0AIAMgAygCBEF+cTYCBCADIAMgAmsiBTYCACACIAVBAXI2AgQgBUH/AU0EQCAFQXhxQbTQAGohAAJ/QYzQACgCACIBQQEgBUEDdnQiA3FFBEBBjNAAIAEgA3I2AgAgAAwBCyAAKAIICyIBIAI2AgwgACACNgIIIAIgADYCDCACIAE2AggMAQtBHyEBIAVB////B00EQCAFQSYgBUEIdmciAGt2QQFxIABBAXRrQT5qIQELIAIgATYCHCACQgA3AhAgAUECdEG80gBqIQBBkNAAKAIAIgNBASABdCIGcUUEQCAAIAI2AgBBkNAAIAMgBnI2AgAgAiAANgIYIAIgAjYCCCACIAI2AgwMAQsgBUEZIAFBAXZrQQAgAUEfRxt0IQEgACgCACEDAkADQCADIgAoAgRBeHEgBUYNASABQR12IQMgAUEBdCEBIAAgA0EEcWpBEGoiBigCACIDDQALIAYgAjYCACACIAA2AhggAiACNgIMIAIgAjYCCAwBCyAAKAIIIgEgAjYCDCAAIAI2AgggAkEANgIYIAIgADYCDCACIAE2AggLQZjQACgCACIBIARNDQBBpNAAKAIAIgAgBGoiAiABIARrIgFBAXI2AgRBmNAAIAE2AgBBpNAAIAI2AgAgACAEQQNyNgIEIABBCGohAQwIC0EAIQFB/NMAQTA2AgAMBwtBACEACyAHRQ0AAkAgBigCHCICQQJ0QbzSAGoiAygCACAGRgRAIAMgADYCACAADQFBkNAAQZDQACgCAEF+IAJ3cTYCAAwCCyAHQRBBFCAHKAIQIAZGG2ogADYCACAARQ0BCyAAIAc2AhggBigCECICBEAgACACNgIQIAIgADYCGAsgBkEUaigCACICRQ0AIABBFGogAjYCACACIAA2AhgLIAEgCGohASAGIAhqIgYoAgQhBQsgBiAFQX5xNgIEIAEgBGogATYCACAEIAFBAXI2AgQgAUH/AU0EQCABQXhxQbTQAGohAAJ/QYzQACgCACICQQEgAUEDdnQiAXFFBEBBjNAAIAEgAnI2AgAgAAwBCyAAKAIICyIBIAQ2AgwgACAENgIIIAQgADYCDCAEIAE2AggMAQtBHyEFIAFB////B00EQCABQSYgAUEIdmciAGt2QQFxIABBAXRrQT5qIQULIAQgBTYCHCAEQgA3AhAgBUECdEG80gBqIQBBkNAAKAIAIgJBASAFdCIDcUUEQCAAIAQ2AgBBkNAAIAIgA3I2AgAgBCAANgIYIAQgBDYCCCAEIAQ2AgwMAQsgAUEZIAVBAXZrQQAgBUEfRxt0IQUgACgCACEAAkADQCAAIgIoAgRBeHEgAUYNASAFQR12IQAgBUEBdCEFIAIgAEEEcWpBEGoiAygCACIADQALIAMgBDYCACAEIAI2AhggBCAENgIMIAQgBDYCCAwBCyACKAIIIgAgBDYCDCACIAQ2AgggBEEANgIYIAQgAjYCDCAEIAA2AggLIAlBCGohAQwCCwJAIAdFDQACQCADKAIcIgFBAnRBvNIAaiICKAIAIANGBEAgAiAANgIAIAANAUGQ0AAgCEF+IAF3cSIINgIADAILIAdBEEEUIAcoAhAgA0YbaiAANgIAIABFDQELIAAgBzYCGCADKAIQIgEEQCAAIAE2AhAgASAANgIYCyADQRRqKAIAIgFFDQAgAEEUaiABNgIAIAEgADYCGAsCQCAFQQ9NBEAgAyAEIAVqIgBBA3I2AgQgACADaiIAIAAoAgRBAXI2AgQMAQsgAyAEaiICIAVBAXI2AgQgAyAEQQNyNgIEIAIgBWogBTYCACAFQf8BTQRAIAVBeHFBtNAAaiEAAn9BjNAAKAIAIgFBASAFQQN2dCIFcUUEQEGM0AAgASAFcjYCACAADAELIAAoAggLIgEgAjYCDCAAIAI2AgggAiAANgIMIAIgATYCCAwBC0EfIQEgBUH///8HTQRAIAVBJiAFQQh2ZyIAa3ZBAXEgAEEBdGtBPmohAQsgAiABNgIcIAJCADcCECABQQJ0QbzSAGohAEEBIAF0IgQgCHFFBEAgACACNgIAQZDQACAEIAhyNgIAIAIgADYCGCACIAI2AgggAiACNgIMDAELIAVBGSABQQF2a0EAIAFBH0cbdCEBIAAoAgAhBAJAA0AgBCIAKAIEQXhxIAVGDQEgAUEddiEEIAFBAXQhASAAIARBBHFqQRBqIgYoAgAiBA0ACyAGIAI2AgAgAiAANgIYIAIgAjYCDCACIAI2AggMAQsgACgCCCIBIAI2AgwgACACNgIIIAJBADYCGCACIAA2AgwgAiABNgIICyADQQhqIQEMAQsCQCAJRQ0AAkAgACgCHCIBQQJ0QbzSAGoiAigCACAARgRAIAIgAzYCACADDQFBkNAAIAtBfiABd3E2AgAMAgsgCUEQQRQgCSgCECAARhtqIAM2AgAgA0UNAQsgAyAJNgIYIAAoAhAiAQRAIAMgATYCECABIAM2AhgLIABBFGooAgAiAUUNACADQRRqIAE2AgAgASADNgIYCwJAIAVBD00EQCAAIAQgBWoiAUEDcjYCBCAAIAFqIgEgASgCBEEBcjYCBAwBCyAAIARqIgcgBUEBcjYCBCAAIARBA3I2AgQgBSAHaiAFNgIAIAgEQCAIQXhxQbTQAGohAUGg0AAoAgAhAwJ/QQEgCEEDdnQiAiAGcUUEQEGM0AAgAiAGcjYCACABDAELIAEoAggLIgIgAzYCDCABIAM2AgggAyABNgIMIAMgAjYCCAtBoNAAIAc2AgBBlNAAIAU2AgALIABBCGohAQsgCkEQaiQAIAELQwAgAEUEQD8AQRB0DwsCQCAAQf//A3ENACAAQQBIDQAgAEEQdkAAIgBBf0YEQEH80wBBMDYCAEF/DwsgAEEQdA8LAAsL3D8iAEGACAsJAQAAAAIAAAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==","base64")}});var require_constants3=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/constants.js"(e,A){"use strict";init_define_process();var t=["GET","HEAD","POST"];var r=new Set(t);var i=[101,204,205,304];var s=[301,302,303,307,308];var n=new Set(s);var o=["1","7","9","11","13","15","17","19","20","21","22","23","25","37","42","43","53","69","77","79","87","95","101","102","103","104","109","110","111","113","115","117","119","123","135","137","139","143","161","179","389","427","465","512","513","514","515","526","530","531","532","540","548","554","556","563","587","601","636","989","990","993","995","1719","1720","1723","2049","3659","4045","4190","5060","5061","6000","6566","6665","6666","6667","6668","6669","6679","6697","10080"];var a=new Set(o);var c=["","no-referrer","no-referrer-when-downgrade","same-origin","origin","strict-origin","origin-when-cross-origin","strict-origin-when-cross-origin","unsafe-url"];var l=new Set(c);var g=["follow","manual","error"];var Q=["GET","HEAD","OPTIONS","TRACE"];var u=new Set(Q);var E=["navigate","same-origin","no-cors","cors"];var B=["omit","same-origin","include"];var h=["default","no-store","reload","no-cache","force-cache","only-if-cached"];var C=["content-encoding","content-language","content-location","content-type","content-length"];var I=["half"];var d=["CONNECT","TRACE","TRACK"];var f=new Set(d);var p=["audio","audioworklet","font","image","manifest","paintworklet","script","style","track","video","xslt",""];var m=new Set(p);A.exports={subresource:p,forbiddenMethods:d,requestBodyHeader:C,referrerPolicy:c,requestRedirect:g,requestMode:E,requestCredentials:B,requestCache:h,redirectStatus:s,corsSafeListedMethods:t,nullBodyStatus:i,safeMethods:Q,badPorts:o,requestDuplex:I,subresourceSet:m,badPortsSet:a,redirectStatusSet:n,corsSafeListedMethodsSet:r,safeMethodsSet:u,forbiddenMethodsSet:f,referrerPolicySet:l}}});var require_global=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/global.js"(e,A){"use strict";init_define_process();var t=Symbol.for("undici.globalOrigin.1");function getGlobalOrigin(){return globalThis[t]}__name(getGlobalOrigin,"getGlobalOrigin");function setGlobalOrigin(e){if(e===void 0){Object.defineProperty(globalThis,t,{value:void 0,writable:true,enumerable:false,configurable:false});return}const A=new URL(e);if(A.protocol!=="http:"&&A.protocol!=="https:"){throw new TypeError(`Only http & https urls are allowed, received ${A.protocol}`)}Object.defineProperty(globalThis,t,{value:A,writable:true,enumerable:false,configurable:false})}__name(setGlobalOrigin,"setGlobalOrigin");A.exports={getGlobalOrigin:getGlobalOrigin,setGlobalOrigin:setGlobalOrigin}}});var require_data_url=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/data-url.js"(e,A){"use strict";init_define_process();var t=__nccwpck_require__(491);var r=new TextEncoder;var i=/^[!#$%&'*+\-.^_|~A-Za-z0-9]+$/;var s=/[\u000A\u000D\u0009\u0020]/;var n=/[\u0009\u000A\u000C\u000D\u0020]/g;var o=/^[\u0009\u0020-\u007E\u0080-\u00FF]+$/;function dataURLProcessor(e){t(e.protocol==="data:");let A=URLSerializer(e,true);A=A.slice(5);const r={position:0};let i=collectASequenceOfCodePointsFast(",",A,r);const s=i.length;i=removeASCIIWhitespace(i,true,true);if(r.position>=A.length){return"failure"}r.position++;const n=A.slice(s+1);let o=stringPercentDecode(n);if(/;(\u0020){0,}base64$/i.test(i)){const e=isomorphicDecode(o);o=forgivingBase64(e);if(o==="failure"){return"failure"}i=i.slice(0,-6);i=i.replace(/(\u0020)+$/,"");i=i.slice(0,-1)}if(i.startsWith(";")){i="text/plain"+i}let a=parseMIMEType(i);if(a==="failure"){a=parseMIMEType("text/plain;charset=US-ASCII")}return{mimeType:a,body:o}}__name(dataURLProcessor,"dataURLProcessor");function URLSerializer(e,A=false){if(!A){return e.href}const t=e.href;const r=e.hash.length;const i=r===0?t:t.substring(0,t.length-r);if(!r&&t.endsWith("#")){return i.slice(0,-1)}return i}__name(URLSerializer,"URLSerializer");function collectASequenceOfCodePoints(e,A,t){let r="";while(t.position=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}__name(isHexCharByte,"isHexCharByte");function hexByteToNumber(e){return e>=48&&e<=57?e-48:(e&223)-55}__name(hexByteToNumber,"hexByteToNumber");function percentDecode(e){const A=e.length;const t=new Uint8Array(A);let r=0;for(let i=0;ie.length){return"failure"}A.position++;let r=collectASequenceOfCodePointsFast(";",e,A);r=removeHTTPWhitespace(r,false,true);if(r.length===0||!i.test(r)){return"failure"}const n=t.toLowerCase();const a=r.toLowerCase();const c={type:n,subtype:a,parameters:new Map,essence:`${n}/${a}`};while(A.positions.test(e)),e,A);let t=collectASequenceOfCodePoints((e=>e!==";"&&e!=="="),e,A);t=t.toLowerCase();if(A.positione.length){break}let r=null;if(e[A.position]==='"'){r=collectAnHTTPQuotedString(e,A,true);collectASequenceOfCodePointsFast(";",e,A)}else{r=collectASequenceOfCodePointsFast(";",e,A);r=removeHTTPWhitespace(r,false,true);if(r.length===0){continue}}if(t.length!==0&&i.test(t)&&(r.length===0||o.test(r))&&!c.parameters.has(t)){c.parameters.set(t,r)}}return c}__name(parseMIMEType,"parseMIMEType");function forgivingBase64(e){e=e.replace(n,"");let A=e.length;if(A%4===0){if(e.charCodeAt(A-1)===61){--A;if(e.charCodeAt(A-1)===61){--A}}}if(A%4===1){return"failure"}if(/[^+/0-9A-Za-z]/.test(e.length===A?e:e.substring(0,A))){return"failure"}const t=Buffer.from(e,"base64");return new Uint8Array(t.buffer,t.byteOffset,t.byteLength)}__name(forgivingBase64,"forgivingBase64");function collectAnHTTPQuotedString(e,A,r){const i=A.position;let s="";t(e[A.position]==='"');A.position++;while(true){s+=collectASequenceOfCodePoints((e=>e!=='"'&&e!=="\\"),e,A);if(A.position>=e.length){break}const r=e[A.position];A.position++;if(r==="\\"){if(A.position>=e.length){s+="\\";break}s+=e[A.position];A.position++}else{t(r==='"');break}}if(r){return s}return e.slice(i,A.position)}__name(collectAnHTTPQuotedString,"collectAnHTTPQuotedString");function serializeAMimeType(e){t(e!=="failure");const{parameters:A,essence:r}=e;let s=r;for(let[e,t]of A.entries()){s+=";";s+=e;s+="=";if(!i.test(t)){t=t.replace(/(\\|")/g,"\\$1");t='"'+t;t+='"'}s+=t}return s}__name(serializeAMimeType,"serializeAMimeType");function isHTTPWhiteSpace(e){return e===13||e===10||e===9||e===32}__name(isHTTPWhiteSpace,"isHTTPWhiteSpace");function removeHTTPWhitespace(e,A=true,t=true){return removeChars(e,A,t,isHTTPWhiteSpace)}__name(removeHTTPWhitespace,"removeHTTPWhitespace");function isASCIIWhitespace(e){return e===13||e===10||e===9||e===12||e===32}__name(isASCIIWhitespace,"isASCIIWhitespace");function removeASCIIWhitespace(e,A=true,t=true){return removeChars(e,A,t,isASCIIWhitespace)}__name(removeASCIIWhitespace,"removeASCIIWhitespace");function removeChars(e,A,t,r){let i=0;let s=e.length-1;if(A){while(i0&&r(e.charCodeAt(s)))s--}return i===0&&s===e.length-1?e:e.slice(i,s+1)}__name(removeChars,"removeChars");function isomorphicDecode(e){const A=e.length;if((2<<15)-1>A){return String.fromCharCode.apply(null,e)}let t="";let r=0;let i=(2<<15)-1;while(rA){i=A-r}t+=String.fromCharCode.apply(null,e.subarray(r,r+=i))}return t}__name(isomorphicDecode,"isomorphicDecode");function minimizeSupportedMimeType(e){switch(e.essence){case"application/ecmascript":case"application/javascript":case"application/x-ecmascript":case"application/x-javascript":case"text/ecmascript":case"text/javascript":case"text/javascript1.0":case"text/javascript1.1":case"text/javascript1.2":case"text/javascript1.3":case"text/javascript1.4":case"text/javascript1.5":case"text/jscript":case"text/livescript":case"text/x-ecmascript":case"text/x-javascript":return"text/javascript";case"application/json":case"text/json":return"application/json";case"image/svg+xml":return"image/svg+xml";case"text/xml":case"application/xml":return"application/xml"}if(e.subtype.endsWith("+json")){return"application/json"}if(e.subtype.endsWith("+xml")){return"application/xml"}return""}__name(minimizeSupportedMimeType,"minimizeSupportedMimeType");A.exports={dataURLProcessor:dataURLProcessor,URLSerializer:URLSerializer,collectASequenceOfCodePoints:collectASequenceOfCodePoints,collectASequenceOfCodePointsFast:collectASequenceOfCodePointsFast,stringPercentDecode:stringPercentDecode,parseMIMEType:parseMIMEType,collectAnHTTPQuotedString:collectAnHTTPQuotedString,serializeAMimeType:serializeAMimeType,removeChars:removeChars,removeHTTPWhitespace:removeHTTPWhitespace,minimizeSupportedMimeType:minimizeSupportedMimeType,HTTP_TOKEN_CODEPOINTS:i,isomorphicDecode:isomorphicDecode}}});var require_webidl=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/webidl.js"(e,A){"use strict";init_define_process();var{types:t,inspect:r}=__nccwpck_require__(837);var{markAsUncloneable:i}=__nccwpck_require__(267);var{toUSVString:s}=require_util();var n={};n.converters={};n.util={};n.errors={};n.errors.exception=function(e){return new TypeError(`${e.header}: ${e.message}`)};n.errors.conversionFailed=function(e){const A=e.types.length===1?"":" one of";const t=`${e.argument} could not be converted to${A}: ${e.types.join(", ")}.`;return n.errors.exception({header:e.prefix,message:t})};n.errors.invalidArgument=function(e){return n.errors.exception({header:e.prefix,message:`"${e.value}" is an invalid ${e.type}.`})};n.brandCheck=function(e,A,t){if(t?.strict!==false){if(!(e instanceof A)){const e=new TypeError("Illegal invocation");e.code="ERR_INVALID_THIS";throw e}}else{if(e?.[Symbol.toStringTag]!==A.prototype[Symbol.toStringTag]){const e=new TypeError("Illegal invocation");e.code="ERR_INVALID_THIS";throw e}}};n.argumentLengthCheck=function({length:e},A,t){if(e{});n.util.ConvertToInt=function(e,A,t,r){let i;let s;if(A===64){i=Math.pow(2,53)-1;if(t==="unsigned"){s=0}else{s=Math.pow(-2,53)+1}}else if(t==="unsigned"){s=0;i=Math.pow(2,A)-1}else{s=Math.pow(-2,A)-1;i=Math.pow(2,A-1)-1}let o=Number(e);if(o===0){o=0}if(r?.enforceRange===true){if(Number.isNaN(o)||o===Number.POSITIVE_INFINITY||o===Number.NEGATIVE_INFINITY){throw n.errors.exception({header:"Integer conversion",message:`Could not convert ${n.util.Stringify(e)} to an integer.`})}o=n.util.IntegerPart(o);if(oi){throw n.errors.exception({header:"Integer conversion",message:`Value must be between ${s}-${i}, got ${o}.`})}return o}if(!Number.isNaN(o)&&r?.clamp===true){o=Math.min(Math.max(o,s),i);if(Math.floor(o)%2===0){o=Math.floor(o)}else{o=Math.ceil(o)}return o}if(Number.isNaN(o)||o===0&&Object.is(0,o)||o===Number.POSITIVE_INFINITY||o===Number.NEGATIVE_INFINITY){return 0}o=n.util.IntegerPart(o);o=o%Math.pow(2,A);if(t==="signed"&&o>=Math.pow(2,A)-1){return o-Math.pow(2,A)}return o};n.util.IntegerPart=function(e){const A=Math.floor(Math.abs(e));if(e<0){return-1*A}return A};n.util.Stringify=function(e){const A=n.util.Type(e);switch(A){case"Symbol":return`Symbol(${e.description})`;case"Object":return r(e);case"String":return`"${e}"`;default:return`${e}`}};n.sequenceConverter=function(e){return(A,t,r,i)=>{if(n.util.Type(A)!=="Object"){throw n.errors.exception({header:t,message:`${r} (${n.util.Stringify(A)}) is not iterable.`})}const s=typeof i==="function"?i():A?.[Symbol.iterator]?.();const o=[];let a=0;if(s===void 0||typeof s.next!=="function"){throw n.errors.exception({header:t,message:`${r} is not iterable.`})}while(true){const{done:A,value:i}=s.next();if(A){break}o.push(e(i,t,`${r}[${a++}]`))}return o}};n.recordConverter=function(e,A){return(r,i,s)=>{if(n.util.Type(r)!=="Object"){throw n.errors.exception({header:i,message:`${s} ("${n.util.Type(r)}") is not an Object.`})}const o={};if(!t.isProxy(r)){const t=[...Object.getOwnPropertyNames(r),...Object.getOwnPropertySymbols(r)];for(const n of t){const t=e(n,i,s);const a=A(r[n],i,s);o[t]=a}return o}const a=Reflect.ownKeys(r);for(const t of a){const n=Reflect.getOwnPropertyDescriptor(r,t);if(n?.enumerable){const n=e(t,i,s);const a=A(r[t],i,s);o[n]=a}}return o}};n.interfaceConverter=function(e){return(A,t,r,i)=>{if(i?.strict!==false&&!(A instanceof e)){throw n.errors.exception({header:t,message:`Expected ${r} ("${n.util.Stringify(A)}") to be an instance of ${e.name}.`})}return A}};n.dictionaryConverter=function(e){return(A,t,r)=>{const i=n.util.Type(A);const s={};if(i==="Null"||i==="Undefined"){return s}else if(i!=="Object"){throw n.errors.exception({header:t,message:`Expected ${A} to be one of: Null, Undefined, Object.`})}for(const i of e){const{key:e,defaultValue:o,required:a,converter:c}=i;if(a===true){if(!Object.hasOwn(A,e)){throw n.errors.exception({header:t,message:`Missing required key "${e}".`})}}let l=A[e];const g=Object.hasOwn(i,"defaultValue");if(g&&l!==null){l??=o()}if(a||g||l!==void 0){l=c(l,t,`${r}.${e}`);if(i.allowedValues&&!i.allowedValues.includes(l)){throw n.errors.exception({header:t,message:`${l} is not an accepted type. Expected one of ${i.allowedValues.join(", ")}.`})}s[e]=l}}return s}};n.nullableConverter=function(e){return(A,t,r)=>{if(A===null){return A}return e(A,t,r)}};n.converters.DOMString=function(e,A,t,r){if(e===null&&r?.legacyNullToEmptyString){return""}if(typeof e==="symbol"){throw n.errors.exception({header:A,message:`${t} is a symbol, which cannot be converted to a DOMString.`})}return String(e)};n.converters.ByteString=function(e,A,t){const r=n.converters.DOMString(e,A,t);for(let e=0;e255){throw new TypeError(`Cannot convert argument to a ByteString because the character at index ${e} has a value of ${r.charCodeAt(e)} which is greater than 255.`)}}return r};n.converters.USVString=s;n.converters.boolean=function(e){const A=Boolean(e);return A};n.converters.any=function(e){return e};n.converters["long long"]=function(e,A,t){const r=n.util.ConvertToInt(e,64,"signed",void 0,A,t);return r};n.converters["unsigned long long"]=function(e,A,t){const r=n.util.ConvertToInt(e,64,"unsigned",void 0,A,t);return r};n.converters["unsigned long"]=function(e,A,t){const r=n.util.ConvertToInt(e,32,"unsigned",void 0,A,t);return r};n.converters["unsigned short"]=function(e,A,t,r){const i=n.util.ConvertToInt(e,16,"unsigned",r,A,t);return i};n.converters.ArrayBuffer=function(e,A,r,i){if(n.util.Type(e)!=="Object"||!t.isAnyArrayBuffer(e)){throw n.errors.conversionFailed({prefix:A,argument:`${r} ("${n.util.Stringify(e)}")`,types:["ArrayBuffer"]})}if(i?.allowShared===false&&t.isSharedArrayBuffer(e)){throw n.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."})}if(e.resizable||e.growable){throw n.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."})}return e};n.converters.TypedArray=function(e,A,r,i,s){if(n.util.Type(e)!=="Object"||!t.isTypedArray(e)||e.constructor.name!==A.name){throw n.errors.conversionFailed({prefix:r,argument:`${i} ("${n.util.Stringify(e)}")`,types:[A.name]})}if(s?.allowShared===false&&t.isSharedArrayBuffer(e.buffer)){throw n.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."})}if(e.buffer.resizable||e.buffer.growable){throw n.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."})}return e};n.converters.DataView=function(e,A,r,i){if(n.util.Type(e)!=="Object"||!t.isDataView(e)){throw n.errors.exception({header:A,message:`${r} is not a DataView.`})}if(i?.allowShared===false&&t.isSharedArrayBuffer(e.buffer)){throw n.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."})}if(e.buffer.resizable||e.buffer.growable){throw n.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."})}return e};n.converters.BufferSource=function(e,A,r,i){if(t.isAnyArrayBuffer(e)){return n.converters.ArrayBuffer(e,A,r,{...i,allowShared:false})}if(t.isTypedArray(e)){return n.converters.TypedArray(e,e.constructor,A,r,{...i,allowShared:false})}if(t.isDataView(e)){return n.converters.DataView(e,A,r,{...i,allowShared:false})}throw n.errors.conversionFailed({prefix:A,argument:`${r} ("${n.util.Stringify(e)}")`,types:["BufferSource"]})};n.converters["sequence"]=n.sequenceConverter(n.converters.ByteString);n.converters["sequence>"]=n.sequenceConverter(n.converters["sequence"]);n.converters["record"]=n.recordConverter(n.converters.ByteString,n.converters.ByteString);A.exports={webidl:n}}});var require_util2=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/util.js"(e,A){"use strict";init_define_process();var{Transform:t}=__nccwpck_require__(781);var r=__nccwpck_require__(796);var{redirectStatusSet:i,referrerPolicySet:s,badPortsSet:n}=require_constants3();var{getGlobalOrigin:o}=require_global();var{collectASequenceOfCodePoints:a,collectAnHTTPQuotedString:c,removeChars:l,parseMIMEType:g}=require_data_url();var{performance:Q}=__nccwpck_require__(74);var{isBlobLike:u,ReadableStreamFrom:E,isValidHTTPToken:B,normalizedMethodRecordsBase:h}=require_util();var C=__nccwpck_require__(491);var{isUint8Array:I}=__nccwpck_require__(223);var{webidl:d}=require_webidl();var f=[];var p;try{p=__nccwpck_require__(113);const e=["sha256","sha384","sha512"];f=p.getHashes().filter((A=>e.includes(A)))}catch{}function responseURL(e){const A=e.urlList;const t=A.length;return t===0?null:A[t-1].toString()}__name(responseURL,"responseURL");function responseLocationURL(e,A){if(!i.has(e.status)){return null}let t=e.headersList.get("location",true);if(t!==null&&isValidHeaderValue(t)){if(!isValidEncodedURL(t)){t=normalizeBinaryStringToUtf8(t)}t=new URL(t,responseURL(e))}if(t&&!t.hash){t.hash=A}return t}__name(responseLocationURL,"responseLocationURL");function isValidEncodedURL(e){for(let A=0;A126||t<32){return false}}return true}__name(isValidEncodedURL,"isValidEncodedURL");function normalizeBinaryStringToUtf8(e){return Buffer.from(e,"binary").toString("utf8")}__name(normalizeBinaryStringToUtf8,"normalizeBinaryStringToUtf8");function requestCurrentURL(e){return e.urlList[e.urlList.length-1]}__name(requestCurrentURL,"requestCurrentURL");function requestBadPort(e){const A=requestCurrentURL(e);if(urlIsHttpHttpsScheme(A)&&n.has(A.port)){return"blocked"}return"allowed"}__name(requestBadPort,"requestBadPort");function isErrorLike(e){return e instanceof Error||(e?.constructor?.name==="Error"||e?.constructor?.name==="DOMException")}__name(isErrorLike,"isErrorLike");function isValidReasonPhrase(e){for(let A=0;A=32&&t<=126||t>=128&&t<=255)){return false}}return true}__name(isValidReasonPhrase,"isValidReasonPhrase");var m=B;function isValidHeaderValue(e){return(e[0]==="\t"||e[0]===" "||e[e.length-1]==="\t"||e[e.length-1]===" "||e.includes("\n")||e.includes("\r")||e.includes("\0"))===false}__name(isValidHeaderValue,"isValidHeaderValue");function setRequestReferrerPolicyOnRedirect(e,A){const{headersList:t}=A;const r=(t.get("referrer-policy",true)??"").split(",");let i="";if(r.length>0){for(let e=r.length;e!==0;e--){const A=r[e-1].trim();if(s.has(A)){i=A;break}}}if(i!==""){e.referrerPolicy=i}}__name(setRequestReferrerPolicyOnRedirect,"setRequestReferrerPolicyOnRedirect");function crossOriginResourcePolicyCheck(){return"allowed"}__name(crossOriginResourcePolicyCheck,"crossOriginResourcePolicyCheck");function corsCheck(){return"success"}__name(corsCheck,"corsCheck");function TAOCheck(){return"success"}__name(TAOCheck,"TAOCheck");function appendFetchMetadata(e){let A=null;A=e.mode;e.headersList.set("sec-fetch-mode",A,true)}__name(appendFetchMetadata,"appendFetchMetadata");function appendRequestOriginHeader(e){let A=e.origin;if(A==="client"||A===void 0){return}if(e.responseTainting==="cors"||e.mode==="websocket"){e.headersList.append("origin",A,true)}else if(e.method!=="GET"&&e.method!=="HEAD"){switch(e.referrerPolicy){case"no-referrer":A=null;break;case"no-referrer-when-downgrade":case"strict-origin":case"strict-origin-when-cross-origin":if(e.origin&&urlHasHttpsScheme(e.origin)&&!urlHasHttpsScheme(requestCurrentURL(e))){A=null}break;case"same-origin":if(!sameOrigin(e,requestCurrentURL(e))){A=null}break;default:}e.headersList.append("origin",A,true)}}__name(appendRequestOriginHeader,"appendRequestOriginHeader");function coarsenTime(e,A){return e}__name(coarsenTime,"coarsenTime");function clampAndCoarsenConnectionTimingInfo(e,A,t){if(!e?.startTime||e.startTime4096){r=i}const s=sameOrigin(e,r);const n=isURLPotentiallyTrustworthy(r)&&!isURLPotentiallyTrustworthy(e.url);switch(A){case"origin":return i!=null?i:stripURLForReferrer(t,true);case"unsafe-url":return r;case"same-origin":return s?i:"no-referrer";case"origin-when-cross-origin":return s?r:i;case"strict-origin-when-cross-origin":{const A=requestCurrentURL(e);if(sameOrigin(r,A)){return r}if(isURLPotentiallyTrustworthy(r)&&!isURLPotentiallyTrustworthy(A)){return"no-referrer"}return i}case"strict-origin":case"no-referrer-when-downgrade":default:return n?"no-referrer":i}}__name(determineRequestsReferrer,"determineRequestsReferrer");function stripURLForReferrer(e,A){C(e instanceof URL);e=new URL(e);if(e.protocol==="file:"||e.protocol==="about:"||e.protocol==="blank:"){return"no-referrer"}e.username="";e.password="";e.hash="";if(A){e.pathname="";e.search=""}return e}__name(stripURLForReferrer,"stripURLForReferrer");function isURLPotentiallyTrustworthy(e){if(!(e instanceof URL)){return false}if(e.href==="about:blank"||e.href==="about:srcdoc"){return true}if(e.protocol==="data:")return true;if(e.protocol==="file:")return true;return isOriginPotentiallyTrustworthy(e.origin);function isOriginPotentiallyTrustworthy(e){if(e==null||e==="null")return false;const A=new URL(e);if(A.protocol==="https:"||A.protocol==="wss:"){return true}if(/^127(?:\.[0-9]+){0,2}\.[0-9]+$|^\[(?:0*:)*?:?0*1\]$/.test(A.hostname)||(A.hostname==="localhost"||A.hostname.includes("localhost."))||A.hostname.endsWith(".localhost")){return true}return false}__name(isOriginPotentiallyTrustworthy,"isOriginPotentiallyTrustworthy")}__name(isURLPotentiallyTrustworthy,"isURLPotentiallyTrustworthy");function bytesMatch(e,A){if(p===void 0){return true}const t=parseMetadata(A);if(t==="no metadata"){return true}if(t.length===0){return true}const r=getStrongestMetadata(t);const i=filterMetadataListByAlgorithm(t,r);for(const A of i){const t=A.algo;const r=A.hash;let i=p.createHash(t).update(e).digest("base64");if(i[i.length-1]==="="){if(i[i.length-2]==="="){i=i.slice(0,-2)}else{i=i.slice(0,-1)}}if(compareBase64Mixed(i,r)){return true}}return false}__name(bytesMatch,"bytesMatch");var _=/(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i;function parseMetadata(e){const A=[];let t=true;for(const r of e.split(" ")){t=false;const e=_.exec(r);if(e===null||e.groups===void 0||e.groups.algo===void 0){continue}const i=e.groups.algo.toLowerCase();if(f.includes(i)){A.push(e.groups)}}if(t===true){return"no metadata"}return A}__name(parseMetadata,"parseMetadata");function getStrongestMetadata(e){let A=e[0].algo;if(A[3]==="5"){return A}for(let t=1;t{e=t;A=r}));return{promise:t,resolve:e,reject:A}}__name(createDeferredPromise,"createDeferredPromise");function isAborted(e){return e.controller.state==="aborted"}__name(isAborted,"isAborted");function isCancelled(e){return e.controller.state==="aborted"||e.controller.state==="terminated"}__name(isCancelled,"isCancelled");function normalizeMethod(e){return h[e.toLowerCase()]??e}__name(normalizeMethod,"normalizeMethod");function serializeJavascriptValueToJSONString(e){const A=JSON.stringify(e);if(A===void 0){throw new TypeError("Value is not JSON serializable")}C(typeof A==="string");return A}__name(serializeJavascriptValueToJSONString,"serializeJavascriptValueToJSONString");var w=Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));function createIterator(e,A,t=0,r=1){var i,s,n;const o=class _FastIterableIterator{constructor(e,A){__privateAdd(this,i,void 0);__privateAdd(this,s,void 0);__privateAdd(this,n,void 0);__privateSet(this,i,e);__privateSet(this,s,A);__privateSet(this,n,0)}next(){if(typeof this!=="object"||this===null||!__privateIn(i,this)){throw new TypeError(`'next' called on an object that does not implement interface ${e} Iterator.`)}const o=__privateGet(this,n);const a=__privateGet(this,i)[A];const c=a.length;if(o>=c){return{value:void 0,done:true}}const{[t]:l,[r]:g}=a[o];__privateSet(this,n,o+1);let Q;switch(__privateGet(this,s)){case"key":Q=l;break;case"value":Q=g;break;case"key+value":Q=[l,g];break}return{value:Q,done:false}}};i=new WeakMap;s=new WeakMap;n=new WeakMap;__name(o,"FastIterableIterator");let a=o;delete a.prototype.constructor;Object.setPrototypeOf(a.prototype,w);Object.defineProperties(a.prototype,{[Symbol.toStringTag]:{writable:false,enumerable:false,configurable:true,value:`${e} Iterator`},next:{writable:true,enumerable:true,configurable:true}});return function(e,A){return new a(e,A)}}__name(createIterator,"createIterator");function iteratorMixin(e,A,t,r=0,i=1){const s=createIterator(e,t,r,i);const n={keys:{writable:true,enumerable:true,configurable:true,value:__name((function keys(){d.brandCheck(this,A);return s(this,"key")}),"keys")},values:{writable:true,enumerable:true,configurable:true,value:__name((function values(){d.brandCheck(this,A);return s(this,"value")}),"values")},entries:{writable:true,enumerable:true,configurable:true,value:__name((function entries(){d.brandCheck(this,A);return s(this,"key+value")}),"entries")},forEach:{writable:true,enumerable:true,configurable:true,value:__name((function forEach(t,r=globalThis){d.brandCheck(this,A);d.argumentLengthCheck(arguments,1,`${e}.forEach`);if(typeof t!=="function"){throw new TypeError(`Failed to execute 'forEach' on '${e}': parameter 1 is not of type 'Function'.`)}for(const{0:e,1:A}of s(this,"key+value")){t.call(r,A,e,this)}}),"forEach")}};return Object.defineProperties(A.prototype,{...n,[Symbol.iterator]:{writable:true,enumerable:false,configurable:true,value:n.entries.value}})}__name(iteratorMixin,"iteratorMixin");async function fullyReadBody(e,A,t){const r=A;const i=t;let s;try{s=e.stream.getReader()}catch(e){i(e);return}try{r(await readAllBytes(s))}catch(e){i(e)}}__name(fullyReadBody,"fullyReadBody");function isReadableStreamLike(e){return e instanceof ReadableStream||e[Symbol.toStringTag]==="ReadableStream"&&typeof e.tee==="function"}__name(isReadableStreamLike,"isReadableStreamLike");function readableStreamClose(e){try{e.close();e.byobRequest?.respond(0)}catch(e){if(!e.message.includes("Controller is already closed")&&!e.message.includes("ReadableStream is already closed")){throw e}}}__name(readableStreamClose,"readableStreamClose");var y=/[^\x00-\xFF]/;function isomorphicEncode(e){C(!y.test(e));return e}__name(isomorphicEncode,"isomorphicEncode");async function readAllBytes(e){const A=[];let t=0;while(true){const{done:r,value:i}=await e.read();if(r){return Buffer.concat(A,t)}if(!I(i)){throw new TypeError("Received non-Uint8Array chunk")}A.push(i);t+=i.length}}__name(readAllBytes,"readAllBytes");function urlIsLocal(e){C("protocol"in e);const A=e.protocol;return A==="about:"||A==="blob:"||A==="data:"}__name(urlIsLocal,"urlIsLocal");function urlHasHttpsScheme(e){return typeof e==="string"&&e[5]===":"&&e[0]==="h"&&e[1]==="t"&&e[2]==="t"&&e[3]==="p"&&e[4]==="s"||e.protocol==="https:"}__name(urlHasHttpsScheme,"urlHasHttpsScheme");function urlIsHttpHttpsScheme(e){C("protocol"in e);const A=e.protocol;return A==="http:"||A==="https:"}__name(urlIsHttpHttpsScheme,"urlIsHttpHttpsScheme");function simpleRangeHeaderValue(e,A){const t=e;if(!t.startsWith("bytes")){return"failure"}const r={position:5};if(A){a((e=>e==="\t"||e===" "),t,r)}if(t.charCodeAt(r.position)!==61){return"failure"}r.position++;if(A){a((e=>e==="\t"||e===" "),t,r)}const i=a((e=>{const A=e.charCodeAt(0);return A>=48&&A<=57}),t,r);const s=i.length?Number(i):null;if(A){a((e=>e==="\t"||e===" "),t,r)}if(t.charCodeAt(r.position)!==45){return"failure"}r.position++;if(A){a((e=>e==="\t"||e===" "),t,r)}const n=a((e=>{const A=e.charCodeAt(0);return A>=48&&A<=57}),t,r);const o=n.length?Number(n):null;if(r.positiono){return"failure"}return{rangeStartValue:s,rangeEndValue:o}}__name(simpleRangeHeaderValue,"simpleRangeHeaderValue");function buildContentRange(e,A,t){let r="bytes ";r+=isomorphicEncode(`${e}`);r+="-";r+=isomorphicEncode(`${A}`);r+="/";r+=isomorphicEncode(`${t}`);return r}__name(buildContentRange,"buildContentRange");var b;var k=class _InflateStream extends t{constructor(e){super();__privateAdd(this,b,void 0);__privateSet(this,b,e)}_transform(e,A,t){if(!this._inflateStream){if(e.length===0){t();return}this._inflateStream=(e[0]&15)===8?r.createInflate(__privateGet(this,b)):r.createInflateRaw(__privateGet(this,b));this._inflateStream.on("data",this.push.bind(this));this._inflateStream.on("end",(()=>this.push(null)));this._inflateStream.on("error",(e=>this.destroy(e)))}this._inflateStream.write(e,A,t)}_final(e){if(this._inflateStream){this._inflateStream.end();this._inflateStream=null}e()}};b=new WeakMap;__name(k,"InflateStream");var D=k;function createInflate(e){return new D(e)}__name(createInflate,"createInflate");function extractMimeType(e){let A=null;let t=null;let r=null;const i=getDecodeSplit("content-type",e);if(i===null){return"failure"}for(const e of i){const i=g(e);if(i==="failure"||i.essence==="*/*"){continue}r=i;if(r.essence!==t){A=null;if(r.parameters.has("charset")){A=r.parameters.get("charset")}t=r.essence}else if(!r.parameters.has("charset")&&A!==null){r.parameters.set("charset",A)}}if(r==null){return"failure"}return r}__name(extractMimeType,"extractMimeType");function gettingDecodingSplitting(e){const A=e;const t={position:0};const r=[];let i="";while(t.positione!=='"'&&e!==","),A,t);if(t.positione===9||e===32));r.push(i);i=""}return r}__name(gettingDecodingSplitting,"gettingDecodingSplitting");function getDecodeSplit(e,A){const t=A.get(e,true);if(t===null){return null}return gettingDecodingSplitting(t)}__name(getDecodeSplit,"getDecodeSplit");var R=new TextDecoder;function utf8DecodeBytes(e){if(e.length===0){return""}if(e[0]===239&&e[1]===187&&e[2]===191){e=e.subarray(3)}const A=R.decode(e);return A}__name(utf8DecodeBytes,"utf8DecodeBytes");var v=class _EnvironmentSettingsObjectBase{get baseUrl(){return o()}get origin(){return this.baseUrl?.origin}policyContainer=makePolicyContainer()};__name(v,"EnvironmentSettingsObjectBase");var S=v;var F=class _EnvironmentSettingsObject{settingsObject=new S};__name(F,"EnvironmentSettingsObject");var M=F;var N=new M;A.exports={isAborted:isAborted,isCancelled:isCancelled,isValidEncodedURL:isValidEncodedURL,createDeferredPromise:createDeferredPromise,ReadableStreamFrom:E,tryUpgradeRequestToAPotentiallyTrustworthyURL:tryUpgradeRequestToAPotentiallyTrustworthyURL,clampAndCoarsenConnectionTimingInfo:clampAndCoarsenConnectionTimingInfo,coarsenedSharedCurrentTime:coarsenedSharedCurrentTime,determineRequestsReferrer:determineRequestsReferrer,makePolicyContainer:makePolicyContainer,clonePolicyContainer:clonePolicyContainer,appendFetchMetadata:appendFetchMetadata,appendRequestOriginHeader:appendRequestOriginHeader,TAOCheck:TAOCheck,corsCheck:corsCheck,crossOriginResourcePolicyCheck:crossOriginResourcePolicyCheck,createOpaqueTimingInfo:createOpaqueTimingInfo,setRequestReferrerPolicyOnRedirect:setRequestReferrerPolicyOnRedirect,isValidHTTPToken:B,requestBadPort:requestBadPort,requestCurrentURL:requestCurrentURL,responseURL:responseURL,responseLocationURL:responseLocationURL,isBlobLike:u,isURLPotentiallyTrustworthy:isURLPotentiallyTrustworthy,isValidReasonPhrase:isValidReasonPhrase,sameOrigin:sameOrigin,normalizeMethod:normalizeMethod,serializeJavascriptValueToJSONString:serializeJavascriptValueToJSONString,iteratorMixin:iteratorMixin,createIterator:createIterator,isValidHeaderName:m,isValidHeaderValue:isValidHeaderValue,isErrorLike:isErrorLike,fullyReadBody:fullyReadBody,bytesMatch:bytesMatch,isReadableStreamLike:isReadableStreamLike,readableStreamClose:readableStreamClose,isomorphicEncode:isomorphicEncode,urlIsLocal:urlIsLocal,urlHasHttpsScheme:urlHasHttpsScheme,urlIsHttpHttpsScheme:urlIsHttpHttpsScheme,readAllBytes:readAllBytes,simpleRangeHeaderValue:simpleRangeHeaderValue,buildContentRange:buildContentRange,parseMetadata:parseMetadata,createInflate:createInflate,extractMimeType:extractMimeType,getDecodeSplit:getDecodeSplit,utf8DecodeBytes:utf8DecodeBytes,environmentSettingsObject:N}}});var require_symbols2=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/symbols.js"(e,A){"use strict";init_define_process();A.exports={kUrl:Symbol("url"),kHeaders:Symbol("headers"),kSignal:Symbol("signal"),kState:Symbol("state"),kDispatcher:Symbol("dispatcher")}}});var require_file=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/file.js"(e,A){"use strict";init_define_process();var{Blob:t,File:r}=__nccwpck_require__(300);var{kState:i}=require_symbols2();var{webidl:s}=require_webidl();var n=class _FileLike{constructor(e,A,t={}){const r=A;const s=t.type;const n=t.lastModified??Date.now();this[i]={blobLike:e,name:r,type:s,lastModified:n}}stream(...e){s.brandCheck(this,_FileLike);return this[i].blobLike.stream(...e)}arrayBuffer(...e){s.brandCheck(this,_FileLike);return this[i].blobLike.arrayBuffer(...e)}slice(...e){s.brandCheck(this,_FileLike);return this[i].blobLike.slice(...e)}text(...e){s.brandCheck(this,_FileLike);return this[i].blobLike.text(...e)}get size(){s.brandCheck(this,_FileLike);return this[i].blobLike.size}get type(){s.brandCheck(this,_FileLike);return this[i].blobLike.type}get name(){s.brandCheck(this,_FileLike);return this[i].name}get lastModified(){s.brandCheck(this,_FileLike);return this[i].lastModified}get[Symbol.toStringTag](){return"File"}};__name(n,"FileLike");var o=n;s.converters.Blob=s.interfaceConverter(t);function isFileLike(e){return e instanceof r||e&&(typeof e.stream==="function"||typeof e.arrayBuffer==="function")&&e[Symbol.toStringTag]==="File"}__name(isFileLike,"isFileLike");A.exports={FileLike:o,isFileLike:isFileLike}}});var require_formdata=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/formdata.js"(e,A){"use strict";init_define_process();var{isBlobLike:t,iteratorMixin:r}=require_util2();var{kState:i}=require_symbols2();var{kEnumerableProperty:s}=require_util();var{FileLike:n,isFileLike:o}=require_file();var{webidl:a}=require_webidl();var{File:c}=__nccwpck_require__(300);var l=__nccwpck_require__(837);var g=globalThis.File??c;var Q=class _FormData{constructor(e){a.util.markAsUncloneable(this);if(e!==void 0){throw a.errors.conversionFailed({prefix:"FormData constructor",argument:"Argument 1",types:["undefined"]})}this[i]=[]}append(e,A,r=void 0){a.brandCheck(this,_FormData);const s="FormData.append";a.argumentLengthCheck(arguments,2,s);if(arguments.length===3&&!t(A)){throw new TypeError("Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'")}e=a.converters.USVString(e,s,"name");A=t(A)?a.converters.Blob(A,s,"value",{strict:false}):a.converters.USVString(A,s,"value");r=arguments.length===3?a.converters.USVString(r,s,"filename"):void 0;const n=makeEntry(e,A,r);this[i].push(n)}delete(e){a.brandCheck(this,_FormData);const A="FormData.delete";a.argumentLengthCheck(arguments,1,A);e=a.converters.USVString(e,A,"name");this[i]=this[i].filter((A=>A.name!==e))}get(e){a.brandCheck(this,_FormData);const A="FormData.get";a.argumentLengthCheck(arguments,1,A);e=a.converters.USVString(e,A,"name");const t=this[i].findIndex((A=>A.name===e));if(t===-1){return null}return this[i][t].value}getAll(e){a.brandCheck(this,_FormData);const A="FormData.getAll";a.argumentLengthCheck(arguments,1,A);e=a.converters.USVString(e,A,"name");return this[i].filter((A=>A.name===e)).map((e=>e.value))}has(e){a.brandCheck(this,_FormData);const A="FormData.has";a.argumentLengthCheck(arguments,1,A);e=a.converters.USVString(e,A,"name");return this[i].findIndex((A=>A.name===e))!==-1}set(e,A,r=void 0){a.brandCheck(this,_FormData);const s="FormData.set";a.argumentLengthCheck(arguments,2,s);if(arguments.length===3&&!t(A)){throw new TypeError("Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'")}e=a.converters.USVString(e,s,"name");A=t(A)?a.converters.Blob(A,s,"name",{strict:false}):a.converters.USVString(A,s,"name");r=arguments.length===3?a.converters.USVString(r,s,"name"):void 0;const n=makeEntry(e,A,r);const o=this[i].findIndex((A=>A.name===e));if(o!==-1){this[i]=[...this[i].slice(0,o),n,...this[i].slice(o+1).filter((A=>A.name!==e))]}else{this[i].push(n)}}[l.inspect.custom](e,A){const t=this[i].reduce(((e,A)=>{if(e[A.name]){if(Array.isArray(e[A.name])){e[A.name].push(A.value)}else{e[A.name]=[e[A.name],A.value]}}else{e[A.name]=A.value}return e}),{__proto__:null});A.depth??=e;A.colors??=true;const r=l.formatWithOptions(A,t);return`FormData ${r.slice(r.indexOf("]")+2)}`}};__name(Q,"FormData");var u=Q;r("FormData",u,i,"name","value");Object.defineProperties(u.prototype,{append:s,delete:s,get:s,getAll:s,has:s,set:s,[Symbol.toStringTag]:{value:"FormData",configurable:true}});function makeEntry(e,A,t){if(typeof A==="string"){}else{if(!o(A)){A=A instanceof Blob?new g([A],"blob",{type:A.type}):new n(A,"blob",{type:A.type})}if(t!==void 0){const e={type:A.type,lastModified:A.lastModified};A=A instanceof c?new g([A],t,e):new n(A,t,e)}}return{name:e,value:A}}__name(makeEntry,"makeEntry");A.exports={FormData:u,makeEntry:makeEntry}}});var require_formdata_parser=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/formdata-parser.js"(e,A){"use strict";init_define_process();var{isUSVString:t,bufferToLowerCasedHeaderName:r}=require_util();var{utf8DecodeBytes:i}=require_util2();var{HTTP_TOKEN_CODEPOINTS:s,isomorphicDecode:n}=require_data_url();var{isFileLike:o}=require_file();var{makeEntry:a}=require_formdata();var c=__nccwpck_require__(491);var{File:l}=__nccwpck_require__(300);var g=globalThis.File??l;var Q=Buffer.from('form-data; name="');var u=Buffer.from("; filename");var E=Buffer.from("--");var B=Buffer.from("--\r\n");function isAsciiString(e){for(let A=0;A70){return false}for(let t=0;t=48&&A<=57||A>=65&&A<=90||A>=97&&A<=122||A===39||A===45||A===95)){return false}}return true}__name(validateBoundary,"validateBoundary");function multipartFormDataParser(e,A){c(A!=="failure"&&A.essence==="multipart/form-data");const r=A.parameters.get("boundary");if(r===void 0){return"failure"}const s=Buffer.from(`--${r}`,"utf8");const n=[];const l={position:0};while(e[l.position]===13&&e[l.position+1]===10){l.position+=2}let Q=e.length;while(e[Q-1]===10&&e[Q-2]===13){Q-=2}if(Q!==e.length){e=e.subarray(0,Q)}while(true){if(e.subarray(l.position,l.position+s.length).equals(s)){l.position+=s.length}else{return"failure"}if(l.position===e.length-2&&bufferStartsWith(e,E,l)||l.position===e.length-4&&bufferStartsWith(e,B,l)){return n}if(e[l.position]!==13||e[l.position+1]!==10){return"failure"}l.position+=2;const A=parseMultipartFormDataHeaders(e,l);if(A==="failure"){return"failure"}let{name:r,filename:Q,contentType:u,encoding:h}=A;l.position+=2;let C;{const A=e.indexOf(s.subarray(2),l.position);if(A===-1){return"failure"}C=e.subarray(l.position,A-4);l.position+=C.length;if(h==="base64"){C=Buffer.from(C.toString(),"base64")}}if(e[l.position]!==13||e[l.position+1]!==10){return"failure"}else{l.position+=2}let I;if(Q!==null){u??="text/plain";if(!isAsciiString(u)){u=""}I=new g([C],Q,{type:u})}else{I=i(Buffer.from(C))}c(t(r));c(typeof I==="string"&&t(I)||o(I));n.push(a(r,I,Q))}}__name(multipartFormDataParser,"multipartFormDataParser");function parseMultipartFormDataHeaders(e,A){let t=null;let i=null;let o=null;let a=null;while(true){if(e[A.position]===13&&e[A.position+1]===10){if(t===null){return"failure"}return{name:t,filename:i,contentType:o,encoding:a}}let c=collectASequenceOfBytes((e=>e!==10&&e!==13&&e!==58),e,A);c=removeChars(c,true,true,(e=>e===9||e===32));if(!s.test(c.toString())){return"failure"}if(e[A.position]!==58){return"failure"}A.position++;collectASequenceOfBytes((e=>e===32||e===9),e,A);switch(r(c)){case"content-disposition":{t=i=null;if(!bufferStartsWith(e,Q,A)){return"failure"}A.position+=17;t=parseMultipartFormDataName(e,A);if(t===null){return"failure"}if(bufferStartsWith(e,u,A)){let t=A.position+u.length;if(e[t]===42){A.position+=1;t+=1}if(e[t]!==61||e[t+1]!==34){return"failure"}A.position+=12;i=parseMultipartFormDataName(e,A);if(i===null){return"failure"}}break}case"content-type":{let t=collectASequenceOfBytes((e=>e!==10&&e!==13),e,A);t=removeChars(t,false,true,(e=>e===9||e===32));o=n(t);break}case"content-transfer-encoding":{let t=collectASequenceOfBytes((e=>e!==10&&e!==13),e,A);t=removeChars(t,false,true,(e=>e===9||e===32));a=n(t);break}default:{collectASequenceOfBytes((e=>e!==10&&e!==13),e,A)}}if(e[A.position]!==13&&e[A.position+1]!==10){return"failure"}else{A.position+=2}}}__name(parseMultipartFormDataHeaders,"parseMultipartFormDataHeaders");function parseMultipartFormDataName(e,A){c(e[A.position-1]===34);let t=collectASequenceOfBytes((e=>e!==10&&e!==13&&e!==34),e,A);if(e[A.position]!==34){return null}else{A.position++}t=(new TextDecoder).decode(t).replace(/%0A/gi,"\n").replace(/%0D/gi,"\r").replace(/%22/g,'"');return t}__name(parseMultipartFormDataName,"parseMultipartFormDataName");function collectASequenceOfBytes(e,A,t){let r=t.position;while(r0&&r(e[s]))s--}return i===0&&s===e.length-1?e:e.subarray(i,s+1)}__name(removeChars,"removeChars");function bufferStartsWith(e,A,t){if(e.length{const A=e.deref();if(A&&!A.locked&&!C(A)&&!h(A)){A.cancel("Response object has been garbage collected").catch(noop)}}))}function extractBody(e,A=false){let o=null;if(e instanceof ReadableStream){o=e}else if(i(e)){o=e.stream()}else{o=new ReadableStream({async pull(e){const A=typeof c==="string"?p.encode(c):c;if(A.byteLength){e.enqueue(A)}queueMicrotask((()=>n(e)))},start(){},type:"bytes"})}B(s(o));let a=null;let c=null;let l=null;let g=null;if(typeof e==="string"){c=e;g="text/plain;charset=UTF-8"}else if(e instanceof URLSearchParams){c=e.toString();g="application/x-www-form-urlencoded;charset=UTF-8"}else if(I(e)){c=new Uint8Array(e.slice())}else if(ArrayBuffer.isView(e)){c=new Uint8Array(e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength))}else if(t.isFormDataLike(e)){const A=`----formdata-undici-0${`${Math.floor(Math.random()*1e11)}`.padStart(11,"0")}`;const t=`--${A}\r\nContent-Disposition: form-data`;const r=__name((e=>e.replace(/\n/g,"%0A").replace(/\r/g,"%0D").replace(/"/g,"%22")),"escape");const i=__name((e=>e.replace(/\r?\n|\r/g,"\r\n")),"normalizeLinefeeds");const s=[];const n=new Uint8Array([13,10]);l=0;let o=false;for(const[A,a]of e){if(typeof a==="string"){const e=p.encode(t+`; name="${r(i(A))}"\r\n\r\n${i(a)}\r\n`);s.push(e);l+=e.byteLength}else{const e=p.encode(`${t}; name="${r(i(A))}"`+(a.name?`; filename="${r(a.name)}"`:"")+`\r\nContent-Type: ${a.type||"application/octet-stream"}\r\n\r\n`);s.push(e,a,n);if(typeof a.size==="number"){l+=e.byteLength+a.size+n.byteLength}else{o=true}}}const Q=p.encode(`--${A}--`);s.push(Q);l+=Q.byteLength;if(o){l=null}c=e;a=__name((async function*(){for(const e of s){if(e.stream){yield*e.stream()}else{yield e}}}),"action");g=`multipart/form-data; boundary=${A}`}else if(i(e)){c=e;l=e.size;if(e.type){g=e.type}}else if(typeof e[Symbol.asyncIterator]==="function"){if(A){throw new TypeError("keepalive")}if(t.isDisturbed(e)||e.locked){throw new TypeError("Response body object should not be disturbed or locked")}o=e instanceof ReadableStream?e:r(e)}if(typeof c==="string"||t.isBuffer(c)){l=Buffer.byteLength(c)}if(a!=null){let A;o=new ReadableStream({async start(){A=a(e)[Symbol.asyncIterator]()},async pull(e){const{value:t,done:r}=await A.next();if(r){queueMicrotask((()=>{e.close();e.byobRequest?.respond(0)}))}else{if(!h(o)){const A=new Uint8Array(t);if(A.byteLength){e.enqueue(A)}}}return e.desiredSize>0},async cancel(e){await A.return()},type:"bytes"})}const Q={stream:o,source:c,length:l};return[Q,g]}__name(extractBody,"extractBody");function safelyExtractBody(e,A=false){if(e instanceof ReadableStream){B(!t.isDisturbed(e),"The body has already been consumed.");B(!e.locked,"The stream is locked.")}return extractBody(e,A)}__name(safelyExtractBody,"safelyExtractBody");function cloneBody(e,A){const[t,r]=A.stream.tee();if(m){_.register(e,new WeakRef(t))}A.stream=t;return{stream:r,length:A.length,source:A.source}}__name(cloneBody,"cloneBody");function throwIfAborted(e){if(e.aborted){throw new DOMException("The operation was aborted.","AbortError")}}__name(throwIfAborted,"throwIfAborted");function bodyMixinMethods(e){const A={blob(){return consumeBody(this,(e=>{let A=bodyMimeType(this);if(A===null){A=""}else if(A){A=d(A)}return new E([e],{type:A})}),e)},arrayBuffer(){return consumeBody(this,(e=>new Uint8Array(e).buffer),e)},text(){return consumeBody(this,l,e)},json(){return consumeBody(this,parseJSONFromBytes,e)},formData(){return consumeBody(this,(e=>{const A=bodyMimeType(this);if(A!==null){switch(A.essence){case"multipart/form-data":{const t=f(e,A);if(t==="failure"){throw new TypeError("Failed to parse body as FormData.")}const r=new g;r[Q]=t;return r}case"application/x-www-form-urlencoded":{const A=new URLSearchParams(e.toString());const t=new g;for(const[e,r]of A){t.append(e,r)}return t}}}throw new TypeError('Content-Type was not one of "multipart/form-data" or "application/x-www-form-urlencoded".')}),e)},bytes(){return consumeBody(this,(e=>new Uint8Array(e)),e)}};return A}__name(bodyMixinMethods,"bodyMixinMethods");function mixinBody(e){Object.assign(e.prototype,bodyMixinMethods(e))}__name(mixinBody,"mixinBody");async function consumeBody(e,A,t){u.brandCheck(e,t);if(bodyUnusable(e)){throw new TypeError("Body is unusable: Body has already been read")}throwIfAborted(e[Q]);const r=o();const i=__name((e=>r.reject(e)),"errorSteps");const s=__name((e=>{try{r.resolve(A(e))}catch(e){i(e)}}),"successSteps");if(e[Q].body==null){s(Buffer.allocUnsafe(0));return r.promise}await a(e[Q].body,s,i);return r.promise}__name(consumeBody,"consumeBody");function bodyUnusable(e){const A=e[Q].body;return A!=null&&(A.stream.locked||t.isDisturbed(A.stream))}__name(bodyUnusable,"bodyUnusable");function parseJSONFromBytes(e){return JSON.parse(l(e))}__name(parseJSONFromBytes,"parseJSONFromBytes");function bodyMimeType(e){const A=e[Q].headersList;const t=c(A);if(t==="failure"){return null}return t}__name(bodyMimeType,"bodyMimeType");A.exports={extractBody:extractBody,safelyExtractBody:safelyExtractBody,cloneBody:cloneBody,mixinBody:mixinBody,streamRegistry:_,hasFinalizationRegistry:m,bodyUnusable:bodyUnusable}}});var require_client_h1=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/client-h1.js"(e,A){"use strict";init_define_process();var t=__nccwpck_require__(491);var r=require_util();var{channels:i}=require_diagnostics();var s=require_timers();var{RequestContentLengthMismatchError:n,ResponseContentLengthMismatchError:o,RequestAbortedError:a,HeadersTimeoutError:c,HeadersOverflowError:l,SocketError:g,InformationalError:Q,BodyTimeoutError:u,HTTPParserError:E,ResponseExceededMaxSizeError:B}=require_errors();var{kUrl:h,kReset:C,kClient:I,kParser:d,kBlocking:f,kRunning:p,kPending:m,kSize:_,kWriting:w,kQueue:y,kNoRef:b,kKeepAliveDefaultTimeout:k,kHostHeader:D,kPendingIdx:R,kRunningIdx:v,kError:S,kPipelining:F,kSocket:M,kKeepAliveTimeoutValue:N,kMaxHeadersSize:U,kKeepAliveMaxTimeout:L,kKeepAliveTimeoutThreshold:T,kHeadersTimeout:G,kBodyTimeout:H,kStrictContentLength:Y,kMaxRequests:J,kCounter:q,kMaxResponseSize:x,kOnError:V,kResume:W,kHTTPContext:O}=require_symbols();var P=require_constants2();var j=Buffer.alloc(0);var Z=Buffer[Symbol.species];var z=r.addListener;var K=r.removeAllListeners;var X;async function lazyllhttp(){const e=define_process_default.env.JEST_WORKER_ID?require_llhttp_wasm():void 0;let A;try{A=await WebAssembly.compile(require_llhttp_simd_wasm())}catch(t){A=await WebAssembly.compile(e||require_llhttp_wasm())}return await WebAssembly.instantiate(A,{env:{wasm_on_url:(e,A,t)=>0,wasm_on_status:(e,A,r)=>{t(Ae.ptr===e);const i=A-ie+te.byteOffset;return Ae.onStatus(new Z(te.buffer,i,r))||0},wasm_on_message_begin:e=>{t(Ae.ptr===e);return Ae.onMessageBegin()||0},wasm_on_header_field:(e,A,r)=>{t(Ae.ptr===e);const i=A-ie+te.byteOffset;return Ae.onHeaderField(new Z(te.buffer,i,r))||0},wasm_on_header_value:(e,A,r)=>{t(Ae.ptr===e);const i=A-ie+te.byteOffset;return Ae.onHeaderValue(new Z(te.buffer,i,r))||0},wasm_on_headers_complete:(e,A,r,i)=>{t(Ae.ptr===e);return Ae.onHeadersComplete(A,Boolean(r),Boolean(i))||0},wasm_on_body:(e,A,r)=>{t(Ae.ptr===e);const i=A-ie+te.byteOffset;return Ae.onBody(new Z(te.buffer,i,r))||0},wasm_on_message_complete:e=>{t(Ae.ptr===e);return Ae.onMessageComplete()||0}}})}__name(lazyllhttp,"lazyllhttp");var $=null;var ee=lazyllhttp();ee.catch();var Ae=null;var te=null;var re=0;var ie=null;var se=0;var ne=1;var oe=2|ne;var ae=4|ne;var ce=8|se;var le=class _Parser{constructor(e,A,{exports:r}){t(Number.isFinite(e[U])&&e[U]>0);this.llhttp=r;this.ptr=this.llhttp.llhttp_alloc(P.TYPE.RESPONSE);this.client=e;this.socket=A;this.timeout=null;this.timeoutValue=null;this.timeoutType=null;this.statusCode=null;this.statusText="";this.upgrade=false;this.headers=[];this.headersSize=0;this.headersMaxSize=e[U];this.shouldKeepAlive=false;this.paused=false;this.resume=this.resume.bind(this);this.bytesRead=0;this.keepAlive="";this.contentLength="";this.connection="";this.maxResponseSize=e[x]}setTimeout(e,A){if(e!==this.timeoutValue||A&ne^this.timeoutType&ne){if(this.timeout){s.clearTimeout(this.timeout);this.timeout=null}if(e){if(A&ne){this.timeout=s.setFastTimeout(onParserTimeout,e,new WeakRef(this))}else{this.timeout=setTimeout(onParserTimeout,e,new WeakRef(this));this.timeout.unref()}}this.timeoutValue=e}else if(this.timeout){if(this.timeout.refresh){this.timeout.refresh()}}this.timeoutType=A}resume(){if(this.socket.destroyed||!this.paused){return}t(this.ptr!=null);t(Ae==null);this.llhttp.llhttp_resume(this.ptr);t(this.timeoutType===ae);if(this.timeout){if(this.timeout.refresh){this.timeout.refresh()}}this.paused=false;this.execute(this.socket.read()||j);this.readMore()}readMore(){while(!this.paused&&this.ptr){const e=this.socket.read();if(e===null){break}this.execute(e)}}execute(e){t(this.ptr!=null);t(Ae==null);t(!this.paused);const{socket:A,llhttp:i}=this;if(e.length>re){if(ie){i.free(ie)}re=Math.ceil(e.length/4096)*4096;ie=i.malloc(re)}new Uint8Array(i.memory.buffer,ie,re).set(e);try{let t;try{te=e;Ae=this;t=i.llhttp_execute(this.ptr,ie,e.length)}catch(e){throw e}finally{Ae=null;te=null}const r=i.llhttp_get_error_pos(this.ptr)-ie;if(t===P.ERROR.PAUSED_UPGRADE){this.onUpgrade(e.slice(r))}else if(t===P.ERROR.PAUSED){this.paused=true;A.unshift(e.slice(r))}else if(t!==P.ERROR.OK){const A=i.llhttp_get_error_reason(this.ptr);let s="";if(A){const e=new Uint8Array(i.memory.buffer,A).indexOf(0);s="Response does not match the HTTP/1.1 protocol ("+Buffer.from(i.memory.buffer,A,e).toString()+")"}throw new E(s,P.ERROR[t],e.slice(r))}}catch(e){r.destroy(A,e)}}destroy(){t(this.ptr!=null);t(Ae==null);this.llhttp.llhttp_free(this.ptr);this.ptr=null;this.timeout&&s.clearTimeout(this.timeout);this.timeout=null;this.timeoutValue=null;this.timeoutType=null;this.paused=false}onStatus(e){this.statusText=e.toString()}onMessageBegin(){const{socket:e,client:A}=this;if(e.destroyed){return-1}const t=A[y][A[v]];if(!t){return-1}t.onResponseStarted()}onHeaderField(e){const A=this.headers.length;if((A&1)===0){this.headers.push(e)}else{this.headers[A-1]=Buffer.concat([this.headers[A-1],e])}this.trackHeader(e.length)}onHeaderValue(e){let A=this.headers.length;if((A&1)===1){this.headers.push(e);A+=1}else{this.headers[A-1]=Buffer.concat([this.headers[A-1],e])}const t=this.headers[A-2];if(t.length===10){const A=r.bufferToLowerCasedHeaderName(t);if(A==="keep-alive"){this.keepAlive+=e.toString()}else if(A==="connection"){this.connection+=e.toString()}}else if(t.length===14&&r.bufferToLowerCasedHeaderName(t)==="content-length"){this.contentLength+=e.toString()}this.trackHeader(e.length)}trackHeader(e){this.headersSize+=e;if(this.headersSize>=this.headersMaxSize){r.destroy(this.socket,new l)}}onUpgrade(e){const{upgrade:A,client:i,socket:s,headers:n,statusCode:o}=this;t(A);t(i[M]===s);t(!s.destroyed);t(!this.paused);t((n.length&1)===0);const a=i[y][i[v]];t(a);t(a.upgrade||a.method==="CONNECT");this.statusCode=null;this.statusText="";this.shouldKeepAlive=null;this.headers=[];this.headersSize=0;s.unshift(e);s[d].destroy();s[d]=null;s[I]=null;s[S]=null;K(s);i[M]=null;i[O]=null;i[y][i[v]++]=null;i.emit("disconnect",i[h],[i],new Q("upgrade"));try{a.onUpgrade(o,n,s)}catch(e){r.destroy(s,e)}i[W]()}onHeadersComplete(e,A,i){const{client:s,socket:n,headers:o,statusText:a}=this;if(n.destroyed){return-1}const c=s[y][s[v]];if(!c){return-1}t(!this.upgrade);t(this.statusCode<200);if(e===100){r.destroy(n,new g("bad response",r.getSocketInfo(n)));return-1}if(A&&!c.upgrade){r.destroy(n,new g("bad upgrade",r.getSocketInfo(n)));return-1}t(this.timeoutType===oe);this.statusCode=e;this.shouldKeepAlive=i||c.method==="HEAD"&&!n[C]&&this.connection.toLowerCase()==="keep-alive";if(this.statusCode>=200){const e=c.bodyTimeout!=null?c.bodyTimeout:s[H];this.setTimeout(e,ae)}else if(this.timeout){if(this.timeout.refresh){this.timeout.refresh()}}if(c.method==="CONNECT"){t(s[p]===1);this.upgrade=true;return 2}if(A){t(s[p]===1);this.upgrade=true;return 2}t((this.headers.length&1)===0);this.headers=[];this.headersSize=0;if(this.shouldKeepAlive&&s[F]){const e=this.keepAlive?r.parseKeepAliveTimeout(this.keepAlive):null;if(e!=null){const A=Math.min(e-s[T],s[L]);if(A<=0){n[C]=true}else{s[N]=A}}else{s[N]=s[k]}}else{n[C]=true}const l=c.onHeaders(e,o,this.resume,a)===false;if(c.aborted){return-1}if(c.method==="HEAD"){return 1}if(e<200){return 1}if(n[f]){n[f]=false;s[W]()}return l?P.ERROR.PAUSED:0}onBody(e){const{client:A,socket:i,statusCode:s,maxResponseSize:n}=this;if(i.destroyed){return-1}const o=A[y][A[v]];t(o);t(this.timeoutType===ae);if(this.timeout){if(this.timeout.refresh){this.timeout.refresh()}}t(s>=200);if(n>-1&&this.bytesRead+e.length>n){r.destroy(i,new B);return-1}this.bytesRead+=e.length;if(o.onData(e)===false){return P.ERROR.PAUSED}}onMessageComplete(){const{client:e,socket:A,statusCode:i,upgrade:s,headers:n,contentLength:a,bytesRead:c,shouldKeepAlive:l}=this;if(A.destroyed&&(!i||l)){return-1}if(s){return}t(i>=100);t((this.headers.length&1)===0);const g=e[y][e[v]];t(g);this.statusCode=null;this.statusText="";this.bytesRead=0;this.contentLength="";this.keepAlive="";this.connection="";this.headers=[];this.headersSize=0;if(i<200){return}if(g.method!=="HEAD"&&a&&c!==parseInt(a,10)){r.destroy(A,new o);return-1}g.onComplete(n);e[y][e[v]++]=null;if(A[w]){t(e[p]===0);r.destroy(A,new Q("reset"));return P.ERROR.PAUSED}else if(!l){r.destroy(A,new Q("reset"));return P.ERROR.PAUSED}else if(A[C]&&e[p]===0){r.destroy(A,new Q("reset"));return P.ERROR.PAUSED}else if(e[F]==null||e[F]===1){setImmediate((()=>e[W]()))}else{e[W]()}}};__name(le,"Parser");var ge=le;function onParserTimeout(e){const{socket:A,timeoutType:i,client:s,paused:n}=e.deref();if(i===oe){if(!A[w]||A.writableNeedDrain||s[p]>1){t(!n,"cannot be paused while waiting for headers");r.destroy(A,new c)}}else if(i===ae){if(!n){r.destroy(A,new u)}}else if(i===ce){t(s[p]===0&&s[N]);r.destroy(A,new Q("socket idle timeout"))}}__name(onParserTimeout,"onParserTimeout");async function connectH1(e,A){e[M]=A;if(!$){$=await ee;ee=null}A[b]=false;A[w]=false;A[C]=false;A[f]=false;A[d]=new ge(e,A,$);z(A,"error",(function(e){t(e.code!=="ERR_TLS_CERT_ALTNAME_INVALID");const A=this[d];if(e.code==="ECONNRESET"&&A.statusCode&&!A.shouldKeepAlive){A.onMessageComplete();return}this[S]=e;this[I][V](e)}));z(A,"readable",(function(){const e=this[d];if(e){e.readMore()}}));z(A,"end",(function(){const e=this[d];if(e.statusCode&&!e.shouldKeepAlive){e.onMessageComplete();return}r.destroy(this,new g("other side closed",r.getSocketInfo(this)))}));z(A,"close",(function(){const e=this[I];const A=this[d];if(A){if(!this[S]&&A.statusCode&&!A.shouldKeepAlive){A.onMessageComplete()}this[d].destroy();this[d]=null}const i=this[S]||new g("closed",r.getSocketInfo(this));e[M]=null;e[O]=null;if(e.destroyed){t(e[m]===0);const A=e[y].splice(e[v]);for(let t=0;t0&&i.code!=="UND_ERR_INFO"){const A=e[y][e[v]];e[y][e[v]++]=null;r.errorRequest(e,A,i)}e[R]=e[v];t(e[p]===0);e.emit("disconnect",e[h],[e],i);e[W]()}));let i=false;A.on("close",(()=>{i=true}));return{version:"h1",defaultPipelining:1,write(...A){return writeH1(e,...A)},resume(){resumeH1(e)},destroy(e,t){if(i){queueMicrotask(t)}else{A.destroy(e).on("close",t)}},get destroyed(){return A.destroyed},busy(t){if(A[w]||A[C]||A[f]){return true}if(t){if(e[p]>0&&!t.idempotent){return true}if(e[p]>0&&(t.upgrade||t.method==="CONNECT")){return true}if(e[p]>0&&r.bodyLength(t.body)!==0&&(r.isStream(t.body)||r.isAsyncIterable(t.body)||r.isFormDataLike(t.body))){return true}}return false}}}__name(connectH1,"connectH1");function resumeH1(e){const A=e[M];if(A&&!A.destroyed){if(e[_]===0){if(!A[b]&&A.unref){A.unref();A[b]=true}}else if(A[b]&&A.ref){A.ref();A[b]=false}if(e[_]===0){if(A[d].timeoutType!==ce){A[d].setTimeout(e[N],ce)}}else if(e[p]>0&&A[d].statusCode<200){if(A[d].timeoutType!==oe){const t=e[y][e[v]];const r=t.headersTimeout!=null?t.headersTimeout:e[G];A[d].setTimeout(r,oe)}}}}__name(resumeH1,"resumeH1");function shouldSendContentLength(e){return e!=="GET"&&e!=="HEAD"&&e!=="OPTIONS"&&e!=="TRACE"&&e!=="CONNECT"}__name(shouldSendContentLength,"shouldSendContentLength");function writeH1(e,A){const{method:s,path:o,host:c,upgrade:l,blocking:g,reset:u}=A;let{body:E,headers:B,contentLength:h}=A;const I=s==="PUT"||s==="POST"||s==="PATCH"||s==="QUERY"||s==="PROPFIND"||s==="PROPPATCH";if(r.isFormDataLike(E)){if(!X){X=require_body().extractBody}const[e,t]=X(E);if(A.contentType==null){B.push("content-type",t)}E=e.stream;h=e.length}else if(r.isBlobLike(E)&&A.contentType==null&&E.type){B.push("content-type",E.type)}if(E&&typeof E.read==="function"){E.read(0)}const d=r.bodyLength(E);h=d??h;if(h===null){h=A.contentLength}if(h===0&&!I){h=null}if(shouldSendContentLength(s)&&h>0&&A.contentLength!==null&&A.contentLength!==h){if(e[Y]){r.errorRequest(e,A,new n);return false}define_process_default.emitWarning(new n)}const p=e[M];const m=__name((t=>{if(A.aborted||A.completed){return}r.errorRequest(e,A,t||new a);r.destroy(E);r.destroy(p,new Q("aborted"))}),"abort");try{A.onConnect(m)}catch(t){r.errorRequest(e,A,t)}if(A.aborted){return false}if(s==="HEAD"){p[C]=true}if(l||s==="CONNECT"){p[C]=true}if(u!=null){p[C]=u}if(e[J]&&p[q]++>=e[J]){p[C]=true}if(g){p[f]=true}let _=`${s} ${o} HTTP/1.1\r\n`;if(typeof c==="string"){_+=`host: ${c}\r\n`}else{_+=e[D]}if(l){_+=`connection: upgrade\r\nupgrade: ${l}\r\n`}else if(e[F]&&!p[C]){_+="connection: keep-alive\r\n"}else{_+="connection: close\r\n"}if(Array.isArray(B)){for(let e=0;e{A.removeListener("error",h)}));if(!g){const e=new a;queueMicrotask((()=>h(e)))}}),"onClose");const h=__name((function(e){if(g){return}g=true;t(n.destroyed||n[w]&&i[p]<=1);n.off("drain",E).off("error",h);A.removeListener("data",u).removeListener("end",h).removeListener("close",B);if(!e){try{Q.end()}catch(A){e=A}}Q.destroy(e);if(e&&(e.code!=="UND_ERR_INFO"||e.message!=="reset")){r.destroy(A,e)}else{r.destroy(A)}}),"onFinished");A.on("data",u).on("end",h).on("error",h).on("close",B);if(A.resume){A.resume()}n.on("drain",E).on("error",h);if(A.errorEmitted??A.errored){setImmediate((()=>h(A.errored)))}else if(A.endEmitted??A.readableEnded){setImmediate((()=>h(null)))}if(A.closeEmitted??A.closed){setImmediate(B)}}__name(writeStream,"writeStream");function writeBuffer(e,A,i,s,n,o,a,c){try{if(!A){if(o===0){n.write(`${a}content-length: 0\r\n\r\n`,"latin1")}else{t(o===null,"no body must not have content length");n.write(`${a}\r\n`,"latin1")}}else if(r.isBuffer(A)){t(o===A.byteLength,"buffer body must have content length");n.cork();n.write(`${a}content-length: ${o}\r\n\r\n`,"latin1");n.write(A);n.uncork();s.onBodySent(A);if(!c&&s.reset!==false){n[C]=true}}s.onRequestSent();i[W]()}catch(A){e(A)}}__name(writeBuffer,"writeBuffer");async function writeBlob(e,A,r,i,s,o,a,c){t(o===A.size,"blob body must have content length");try{if(o!=null&&o!==A.size){throw new n}const e=Buffer.from(await A.arrayBuffer());s.cork();s.write(`${a}content-length: ${o}\r\n\r\n`,"latin1");s.write(e);s.uncork();i.onBodySent(e);i.onRequestSent();if(!c&&i.reset!==false){s[C]=true}r[W]()}catch(A){e(A)}}__name(writeBlob,"writeBlob");async function writeIterable(e,A,r,i,s,n,o,a){t(n!==0||r[p]===0,"iterator body cannot be pipelined");let c=null;function onDrain(){if(c){const e=c;c=null;e()}}__name(onDrain,"onDrain");const l=__name((()=>new Promise(((e,A)=>{t(c===null);if(s[S]){A(s[S])}else{c=e}}))),"waitForDrain");s.on("close",onDrain).on("drain",onDrain);const g=new ue({abort:e,socket:s,request:i,contentLength:n,client:r,expectsPayload:a,header:o});try{for await(const e of A){if(s[S]){throw s[S]}if(!g.write(e)){await l()}}g.end()}catch(e){g.destroy(e)}finally{s.off("close",onDrain).off("drain",onDrain)}}__name(writeIterable,"writeIterable");var Qe=class _AsyncWriter{constructor({abort:e,socket:A,request:t,contentLength:r,client:i,expectsPayload:s,header:n}){this.socket=A;this.request=t;this.contentLength=r;this.client=i;this.bytesWritten=0;this.expectsPayload=s;this.header=n;this.abort=e;A[w]=true}write(e){const{socket:A,request:t,contentLength:r,client:i,bytesWritten:s,expectsPayload:o,header:a}=this;if(A[S]){throw A[S]}if(A.destroyed){return false}const c=Buffer.byteLength(e);if(!c){return true}if(r!==null&&s+c>r){if(i[Y]){throw new n}define_process_default.emitWarning(new n)}A.cork();if(s===0){if(!o&&t.reset!==false){A[C]=true}if(r===null){A.write(`${a}transfer-encoding: chunked\r\n`,"latin1")}else{A.write(`${a}content-length: ${r}\r\n\r\n`,"latin1")}}if(r===null){A.write(`\r\n${c.toString(16)}\r\n`,"latin1")}this.bytesWritten+=c;const l=A.write(e);A.uncork();t.onBodySent(e);if(!l){if(A[d].timeout&&A[d].timeoutType===oe){if(A[d].timeout.refresh){A[d].timeout.refresh()}}}return l}end(){const{socket:e,contentLength:A,client:t,bytesWritten:r,expectsPayload:i,header:s,request:o}=this;o.onRequestSent();e[w]=false;if(e[S]){throw e[S]}if(e.destroyed){return}if(r===0){if(i){e.write(`${s}content-length: 0\r\n\r\n`,"latin1")}else{e.write(`${s}\r\n`,"latin1")}}else if(A===null){e.write("\r\n0\r\n\r\n","latin1")}if(A!==null&&r!==A){if(t[Y]){throw new n}else{define_process_default.emitWarning(new n)}}if(e[d].timeout&&e[d].timeoutType===oe){if(e[d].timeout.refresh){e[d].timeout.refresh()}}t[W]()}destroy(e){const{socket:A,client:r,abort:i}=this;A[w]=false;if(e){t(r[p]<=1,"pipeline should only contain this request");i(e)}}};__name(Qe,"AsyncWriter");var ue=Qe;A.exports=connectH1}});var require_client_h2=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/client-h2.js"(e,A){"use strict";init_define_process();var t=__nccwpck_require__(491);var{pipeline:r}=__nccwpck_require__(781);var i=require_util();var{RequestContentLengthMismatchError:s,RequestAbortedError:n,SocketError:o,InformationalError:a}=require_errors();var{kUrl:c,kReset:l,kClient:g,kRunning:Q,kPending:u,kQueue:E,kPendingIdx:B,kRunningIdx:h,kError:C,kSocket:I,kStrictContentLength:d,kOnError:f,kMaxConcurrentStreams:p,kHTTP2Session:m,kResume:_,kSize:w,kHTTPContext:y}=require_symbols();var b=Symbol("open streams");var k=false;var D;try{D=__nccwpck_require__(158)}catch{D={constants:{}}}var{constants:{HTTP2_HEADER_AUTHORITY:R,HTTP2_HEADER_METHOD:v,HTTP2_HEADER_PATH:S,HTTP2_HEADER_SCHEME:F,HTTP2_HEADER_CONTENT_LENGTH:M,HTTP2_HEADER_EXPECT:N,HTTP2_HEADER_STATUS:U}}=D;function parseH2Headers(e){const A=[];for(const[t,r]of Object.entries(e)){if(Array.isArray(r)){for(const e of r){A.push(Buffer.from(t),Buffer.from(e))}}else{A.push(Buffer.from(t),Buffer.from(r))}}return A}__name(parseH2Headers,"parseH2Headers");async function connectH2(e,A){e[I]=A;if(!k){k=true;define_process_default.emitWarning("H2 support is experimental, expect them to change at any time.",{code:"UNDICI-H2"})}const r=D.connect(e[c],{createConnection:()=>A,peerMaxConcurrentStreams:e[p]});r[b]=0;r[g]=e;r[I]=A;i.addListener(r,"error",onHttp2SessionError);i.addListener(r,"frameError",onHttp2FrameError);i.addListener(r,"end",onHttp2SessionEnd);i.addListener(r,"goaway",onHTTP2GoAway);i.addListener(r,"close",(function(){const{[g]:e}=this;const{[I]:A}=e;const r=this[I][C]||this[C]||new o("closed",i.getSocketInfo(A));e[m]=null;if(e.destroyed){t(e[u]===0);const A=e[E].splice(e[h]);for(let t=0;t{s=true}));return{version:"h2",defaultPipelining:Infinity,write(...A){return writeH2(e,...A)},resume(){resumeH2(e)},destroy(e,t){if(s){queueMicrotask(t)}else{A.destroy(e).on("close",t)}},get destroyed(){return A.destroyed},busy(){return false}}}__name(connectH2,"connectH2");function resumeH2(e){const A=e[I];if(A?.destroyed===false){if(e[w]===0&&e[p]===0){A.unref();e[m].unref()}else{A.ref();e[m].ref()}}}__name(resumeH2,"resumeH2");function onHttp2SessionError(e){t(e.code!=="ERR_TLS_CERT_ALTNAME_INVALID");this[I][C]=e;this[g][f](e)}__name(onHttp2SessionError,"onHttp2SessionError");function onHttp2FrameError(e,A,t){if(t===0){const t=new a(`HTTP/2: "frameError" received - type ${e}, code ${A}`);this[I][C]=t;this[g][f](t)}}__name(onHttp2FrameError,"onHttp2FrameError");function onHttp2SessionEnd(){const e=new o("other side closed",i.getSocketInfo(this[I]));this.destroy(e);i.destroy(this[I],e)}__name(onHttp2SessionEnd,"onHttp2SessionEnd");function onHTTP2GoAway(e){const A=this[C]||new o(`HTTP/2: "GOAWAY" frame received with code ${e}`,i.getSocketInfo(this));const r=this[g];r[I]=null;r[y]=null;if(this[m]!=null){this[m].destroy(A);this[m]=null}i.destroy(this[I],A);const s=r[E][r[h]];r[E][r[h]++]=null;i.errorRequest(r,s,A);r[B]=r[h];t(r[Q]===0);r.emit("disconnect",r[c],[r],A);r[_]()}__name(onHTTP2GoAway,"onHTTP2GoAway");function shouldSendContentLength(e){return e!=="GET"&&e!=="HEAD"&&e!=="OPTIONS"&&e!=="TRACE"&&e!=="CONNECT"}__name(shouldSendContentLength,"shouldSendContentLength");function writeH2(e,A){const r=e[m];const{body:o,method:l,path:g,host:Q,upgrade:u,expectContinue:C,signal:f,headers:p}=A;if(u){i.errorRequest(e,A,new Error("Upgrade not supported for H2"));return false}const w={};for(let e=0;e{if(A.aborted||A.completed){return}t=t||new n;i.errorRequest(e,A,t);if(y!=null){i.destroy(y,t)}i.destroy(o,t);e[E][e[h]++]=null;e[_]()}),"abort");try{A.onConnect(L)}catch(t){i.errorRequest(e,A,t)}if(A.aborted){return false}if(l==="CONNECT"){r.ref();y=r.request(w,{endStream:false,signal:f});if(y.id&&!y.pending){A.onUpgrade(null,null,y);++r[b];e[E][e[h]++]=null}else{y.once("ready",(()=>{A.onUpgrade(null,null,y);++r[b];e[E][e[h]++]=null}))}y.once("close",(()=>{r[b]-=1;if(r[b]===0)r.unref()}));return true}w[S]=g;w[F]="https";const T=l==="PUT"||l==="POST"||l==="PATCH";if(o&&typeof o.read==="function"){o.read(0)}let G=i.bodyLength(o);if(G==null){G=A.contentLength}if(G===0||!T){G=null}if(shouldSendContentLength(l)&&G>0&&A.contentLength!=null&&A.contentLength!==G){if(e[d]){i.errorRequest(e,A,new s);return false}define_process_default.emitWarning(new s)}if(G!=null){t(o,"no body must not have content length");w[M]=`${G}`}r.ref();const H=l==="GET"||l==="HEAD"||o===null;if(C){w[N]="100-continue";y=r.request(w,{endStream:H,signal:f});y.once("continue",writeBodyH2)}else{y=r.request(w,{endStream:H,signal:f});writeBodyH2()}++r[b];y.once("response",(t=>{const{[U]:r,...s}=t;A.onResponseStarted();if(A.aborted){const t=new n;i.errorRequest(e,A,t);i.destroy(y,t);return}if(A.onHeaders(Number(r),parseH2Headers(s),y.resume.bind(y),"")===false){y.pause()}y.on("data",(e=>{if(A.onData(e)===false){y.pause()}}))}));y.once("end",(()=>{if(y.state?.state==null||y.state.state<6){A.onComplete([])}if(r[b]===0){r.unref()}L(new a("HTTP/2: stream half-closed (remote)"));e[E][e[h]++]=null;e[B]=e[h];e[_]()}));y.once("close",(()=>{r[b]-=1;if(r[b]===0){r.unref()}}));y.once("error",(function(e){L(e)}));y.once("frameError",((e,A)=>{L(new a(`HTTP/2: "frameError" received - type ${e}, code ${A}`))}));return true;function writeBodyH2(){if(!o||G===0){writeBuffer(L,y,null,e,A,e[I],G,T)}else if(i.isBuffer(o)){writeBuffer(L,y,o,e,A,e[I],G,T)}else if(i.isBlobLike(o)){if(typeof o.stream==="function"){writeIterable(L,y,o.stream(),e,A,e[I],G,T)}else{writeBlob(L,y,o,e,A,e[I],G,T)}}else if(i.isStream(o)){writeStream(L,e[I],T,y,o,e,A,G)}else if(i.isIterable(o)){writeIterable(L,y,o,e,A,e[I],G,T)}else{t(false)}}__name(writeBodyH2,"writeBodyH2")}__name(writeH2,"writeH2");function writeBuffer(e,A,r,s,n,o,a,c){try{if(r!=null&&i.isBuffer(r)){t(a===r.byteLength,"buffer body must have content length");A.cork();A.write(r);A.uncork();A.end();n.onBodySent(r)}if(!c){o[l]=true}n.onRequestSent();s[_]()}catch(A){e(A)}}__name(writeBuffer,"writeBuffer");function writeStream(e,A,s,n,o,a,c,g){t(g!==0||a[Q]===0,"stream body cannot be pipelined");const u=r(o,n,(t=>{if(t){i.destroy(u,t);e(t)}else{i.removeAllListeners(u);c.onRequestSent();if(!s){A[l]=true}a[_]()}}));i.addListener(u,"data",onPipeData);function onPipeData(e){c.onBodySent(e)}__name(onPipeData,"onPipeData")}__name(writeStream,"writeStream");async function writeBlob(e,A,r,i,n,o,a,c){t(a===r.size,"blob body must have content length");try{if(a!=null&&a!==r.size){throw new s}const e=Buffer.from(await r.arrayBuffer());A.cork();A.write(e);A.uncork();A.end();n.onBodySent(e);n.onRequestSent();if(!c){o[l]=true}i[_]()}catch(A){e(A)}}__name(writeBlob,"writeBlob");async function writeIterable(e,A,r,i,s,n,o,a){t(o!==0||i[Q]===0,"iterator body cannot be pipelined");let c=null;function onDrain(){if(c){const e=c;c=null;e()}}__name(onDrain,"onDrain");const g=__name((()=>new Promise(((e,A)=>{t(c===null);if(n[C]){A(n[C])}else{c=e}}))),"waitForDrain");A.on("close",onDrain).on("drain",onDrain);try{for await(const e of r){if(n[C]){throw n[C]}const t=A.write(e);s.onBodySent(e);if(!t){await g()}}A.end();s.onRequestSent();if(!a){n[l]=true}i[_]()}catch(A){e(A)}finally{A.off("close",onDrain).off("drain",onDrain)}}__name(writeIterable,"writeIterable");A.exports=connectH2}});var require_redirect_handler=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/handler/redirect-handler.js"(e,A){"use strict";init_define_process();var t=require_util();var{kBodyUsed:r}=require_symbols();var i=__nccwpck_require__(491);var{InvalidArgumentError:s}=require_errors();var n=__nccwpck_require__(361);var o=[300,301,302,303,307,308];var a=Symbol("body");var c=class _BodyAsyncIterable{constructor(e){this[a]=e;this[r]=false}async*[Symbol.asyncIterator](){i(!this[r],"disturbed");this[r]=true;yield*this[a]}};__name(c,"BodyAsyncIterable");var l=c;var g=class _RedirectHandler{constructor(e,A,o,a){if(A!=null&&(!Number.isInteger(A)||A<0)){throw new s("maxRedirections must be a positive number")}t.validateHandler(a,o.method,o.upgrade);this.dispatch=e;this.location=null;this.abort=null;this.opts={...o,maxRedirections:0};this.maxRedirections=A;this.handler=a;this.history=[];this.redirectionLimitReached=false;if(t.isStream(this.opts.body)){if(t.bodyLength(this.opts.body)===0){this.opts.body.on("data",(function(){i(false)}))}if(typeof this.opts.body.readableDidRead!=="boolean"){this.opts.body[r]=false;n.prototype.on.call(this.opts.body,"data",(function(){this[r]=true}))}}else if(this.opts.body&&typeof this.opts.body.pipeTo==="function"){this.opts.body=new l(this.opts.body)}else if(this.opts.body&&typeof this.opts.body!=="string"&&!ArrayBuffer.isView(this.opts.body)&&t.isIterable(this.opts.body)){this.opts.body=new l(this.opts.body)}}onConnect(e){this.abort=e;this.handler.onConnect(e,{history:this.history})}onUpgrade(e,A,t){this.handler.onUpgrade(e,A,t)}onError(e){this.handler.onError(e)}onHeaders(e,A,r,i){this.location=this.history.length>=this.maxRedirections||t.isDisturbed(this.opts.body)?null:parseLocation(e,A);if(this.opts.throwOnMaxRedirect&&this.history.length>=this.maxRedirections){if(this.request){this.request.abort(new Error("max redirects"))}this.redirectionLimitReached=true;this.abort(new Error("max redirects"));return}if(this.opts.origin){this.history.push(new URL(this.opts.path,this.opts.origin))}if(!this.location){return this.handler.onHeaders(e,A,r,i)}const{origin:s,pathname:n,search:o}=t.parseURL(new URL(this.location,this.opts.origin&&new URL(this.opts.path,this.opts.origin)));const a=o?`${n}${o}`:n;this.opts.headers=cleanRequestHeaders(this.opts.headers,e===303,this.opts.origin!==s);this.opts.path=a;this.opts.origin=s;this.opts.maxRedirections=0;this.opts.query=null;if(e===303&&this.opts.method!=="HEAD"){this.opts.method="GET";this.opts.body=null}}onData(e){if(this.location){}else{return this.handler.onData(e)}}onComplete(e){if(this.location){this.location=null;this.abort=null;this.dispatch(this.opts,this)}else{this.handler.onComplete(e)}}onBodySent(e){if(this.handler.onBodySent){this.handler.onBodySent(e)}}};__name(g,"RedirectHandler");var Q=g;function parseLocation(e,A){if(o.indexOf(e)===-1){return null}for(let e=0;e__name((function Intercept(r,i){const{maxRedirections:s=e}=r;if(!s){return A(r,i)}const n=new t(A,s,r,i);r={...r,maxRedirections:0};return A(r,n)}),"Intercept")}__name(createRedirectInterceptor,"createRedirectInterceptor");A.exports=createRedirectInterceptor}});var require_client=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/client.js"(e,A){"use strict";init_define_process();var t=__nccwpck_require__(491);var r=__nccwpck_require__(808);var i=__nccwpck_require__(685);var s=require_util();var{channels:n}=require_diagnostics();var o=require_undici_core_request();var a=require_dispatcher_base();var{InvalidArgumentError:c,InformationalError:l,ClientDestroyedError:g}=require_errors();var Q=require_connect();var{kUrl:u,kServerName:E,kClient:B,kBusy:h,kConnect:C,kResuming:I,kRunning:d,kPending:f,kSize:p,kQueue:m,kConnected:_,kConnecting:w,kNeedDrain:y,kKeepAliveDefaultTimeout:b,kHostHeader:k,kPendingIdx:D,kRunningIdx:R,kError:v,kPipelining:S,kKeepAliveTimeoutValue:F,kMaxHeadersSize:M,kKeepAliveMaxTimeout:N,kKeepAliveTimeoutThreshold:U,kHeadersTimeout:L,kBodyTimeout:T,kStrictContentLength:G,kConnector:H,kMaxRedirections:Y,kMaxRequests:J,kCounter:q,kClose:x,kDestroy:V,kDispatch:W,kInterceptors:O,kLocalAddress:P,kMaxResponseSize:j,kOnError:Z,kHTTPContext:z,kMaxConcurrentStreams:K,kResume:X}=require_symbols();var $=require_client_h1();var ee=require_client_h2();var Ae=false;var te=Symbol("kClosedResolve");var re=__name((()=>{}),"noop");function getPipelining(e){return e[S]??e[z]?.defaultPipelining??1}__name(getPipelining,"getPipelining");var ie=class _Client extends a{constructor(e,{interceptors:A,maxHeaderSize:t,headersTimeout:n,socketTimeout:o,requestTimeout:a,connectTimeout:l,bodyTimeout:g,idleTimeout:B,keepAlive:h,keepAliveTimeout:C,maxKeepAliveTimeout:d,keepAliveMaxTimeout:f,keepAliveTimeoutThreshold:p,socketPath:_,pipelining:w,tls:v,strictContentLength:q,maxCachedSessions:x,maxRedirections:V,connect:W,maxRequestsPerClient:$,localAddress:ee,maxResponseSize:re,autoSelectFamily:ie,autoSelectFamilyAttemptTimeout:se,maxConcurrentStreams:oe,allowH2:ae}={}){super();if(h!==void 0){throw new c("unsupported keepAlive, use pipelining=0 instead")}if(o!==void 0){throw new c("unsupported socketTimeout, use headersTimeout & bodyTimeout instead")}if(a!==void 0){throw new c("unsupported requestTimeout, use headersTimeout & bodyTimeout instead")}if(B!==void 0){throw new c("unsupported idleTimeout, use keepAliveTimeout instead")}if(d!==void 0){throw new c("unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead")}if(t!=null&&!Number.isFinite(t)){throw new c("invalid maxHeaderSize")}if(_!=null&&typeof _!=="string"){throw new c("invalid socketPath")}if(l!=null&&(!Number.isFinite(l)||l<0)){throw new c("invalid connectTimeout")}if(C!=null&&(!Number.isFinite(C)||C<=0)){throw new c("invalid keepAliveTimeout")}if(f!=null&&(!Number.isFinite(f)||f<=0)){throw new c("invalid keepAliveMaxTimeout")}if(p!=null&&!Number.isFinite(p)){throw new c("invalid keepAliveTimeoutThreshold")}if(n!=null&&(!Number.isInteger(n)||n<0)){throw new c("headersTimeout must be a positive integer or zero")}if(g!=null&&(!Number.isInteger(g)||g<0)){throw new c("bodyTimeout must be a positive integer or zero")}if(W!=null&&typeof W!=="function"&&typeof W!=="object"){throw new c("connect must be a function or an object")}if(V!=null&&(!Number.isInteger(V)||V<0)){throw new c("maxRedirections must be a positive number")}if($!=null&&(!Number.isInteger($)||$<0)){throw new c("maxRequestsPerClient must be a positive number")}if(ee!=null&&(typeof ee!=="string"||r.isIP(ee)===0)){throw new c("localAddress must be valid string IP address")}if(re!=null&&(!Number.isInteger(re)||re<-1)){throw new c("maxResponseSize must be a positive number")}if(se!=null&&(!Number.isInteger(se)||se<-1)){throw new c("autoSelectFamilyAttemptTimeout must be a positive number")}if(ae!=null&&typeof ae!=="boolean"){throw new c("allowH2 must be a valid boolean value")}if(oe!=null&&(typeof oe!=="number"||oe<1)){throw new c("maxConcurrentStreams must be a positive integer, greater than 0")}if(typeof W!=="function"){W=Q({...v,maxCachedSessions:x,allowH2:ae,socketPath:_,timeout:l,...ie?{autoSelectFamily:ie,autoSelectFamilyAttemptTimeout:se}:void 0,...W})}if(A?.Client&&Array.isArray(A.Client)){this[O]=A.Client;if(!Ae){Ae=true;define_process_default.emitWarning("Client.Options#interceptor is deprecated. Use Dispatcher#compose instead.",{code:"UNDICI-CLIENT-INTERCEPTOR-DEPRECATED"})}}else{this[O]=[ne({maxRedirections:V})]}this[u]=s.parseOrigin(e);this[H]=W;this[S]=w!=null?w:1;this[M]=t||i.maxHeaderSize;this[b]=C==null?4e3:C;this[N]=f==null?6e5:f;this[U]=p==null?2e3:p;this[F]=this[b];this[E]=null;this[P]=ee!=null?ee:null;this[I]=0;this[y]=0;this[k]=`host: ${this[u].hostname}${this[u].port?`:${this[u].port}`:""}\r\n`;this[T]=g!=null?g:3e5;this[L]=n!=null?n:3e5;this[G]=q==null?true:q;this[Y]=V;this[J]=$;this[te]=null;this[j]=re>-1?re:-1;this[K]=oe!=null?oe:100;this[z]=null;this[m]=[];this[R]=0;this[D]=0;this[X]=e=>resume(this,e);this[Z]=e=>onError(this,e)}get pipelining(){return this[S]}set pipelining(e){this[S]=e;this[X](true)}get[f](){return this[m].length-this[D]}get[d](){return this[D]-this[R]}get[p](){return this[m].length-this[R]}get[_](){return!!this[z]&&!this[w]&&!this[z].destroyed}get[h](){return Boolean(this[z]?.busy(null)||this[p]>=(getPipelining(this)||1)||this[f]>0)}[C](e){connect(this);this.once("connect",e)}[W](e,A){const t=e.origin||this[u].origin;const r=new o(t,e,A);this[m].push(r);if(this[I]){}else if(s.bodyLength(r.body)==null&&s.isIterable(r.body)){this[I]=1;queueMicrotask((()=>resume(this)))}else{this[X](true)}if(this[I]&&this[y]!==2&&this[h]){this[y]=2}return this[y]<2}async[x](){return new Promise((e=>{if(this[p]){this[te]=e}else{e(null)}}))}async[V](e){return new Promise((A=>{const t=this[m].splice(this[D]);for(let A=0;A{if(this[te]){this[te]();this[te]=null}A(null)}),"callback");if(this[z]){this[z].destroy(e,r);this[z]=null}else{queueMicrotask(r)}this[X]()}))}};__name(ie,"Client");var se=ie;var ne=require_redirect_interceptor();function onError(e,A){if(e[d]===0&&A.code!=="UND_ERR_INFO"&&A.code!=="UND_ERR_SOCKET"){t(e[D]===e[R]);const r=e[m].splice(e[R]);for(let t=0;t{e[H]({host:A,hostname:i,protocol:o,port:a,servername:e[E],localAddress:e[P]},((e,A)=>{if(e){r(e)}else{t(A)}}))}));if(e.destroyed){s.destroy(r.on("error",re),new g);return}t(r);try{e[z]=r.alpnProtocol==="h2"?await ee(e,r):await $(e,r)}catch(e){r.destroy().on("error",re);throw e}e[w]=false;r[q]=0;r[J]=e[J];r[B]=e;r[v]=null;if(n.connected.hasSubscribers){n.connected.publish({connectParams:{host:A,hostname:i,protocol:o,port:a,version:e[z]?.version,servername:e[E],localAddress:e[P]},connector:e[H],socket:r})}e.emit("connect",e[u],[e])}catch(r){if(e.destroyed){return}e[w]=false;if(n.connectError.hasSubscribers){n.connectError.publish({connectParams:{host:A,hostname:i,protocol:o,port:a,version:e[z]?.version,servername:e[E],localAddress:e[P]},connector:e[H],error:r})}if(r.code==="ERR_TLS_CERT_ALTNAME_INVALID"){t(e[d]===0);while(e[f]>0&&e[m][e[D]].servername===e[E]){const A=e[m][e[D]++];s.errorRequest(e,A,r)}}else{onError(e,r)}e.emit("connectionError",e[u],[e],r)}e[X]()}__name(connect,"connect");function emitDrain(e){e[y]=0;e.emit("drain",e[u],[e])}__name(emitDrain,"emitDrain");function resume(e,A){if(e[I]===2){return}e[I]=2;_resume(e,A);e[I]=0;if(e[R]>256){e[m].splice(0,e[R]);e[D]-=e[R];e[R]=0}}__name(resume,"resume");function _resume(e,A){while(true){if(e.destroyed){t(e[f]===0);return}if(e[te]&&!e[p]){e[te]();e[te]=null;return}if(e[z]){e[z].resume()}if(e[h]){e[y]=2}else if(e[y]===2){if(A){e[y]=1;queueMicrotask((()=>emitDrain(e)))}else{emitDrain(e)}continue}if(e[f]===0){return}if(e[d]>=(getPipelining(e)||1)){return}const r=e[m][e[D]];if(e[u].protocol==="https:"&&e[E]!==r.servername){if(e[d]>0){return}e[E]=r.servername;e[z]?.destroy(new l("servername changed"),(()=>{e[z]=null;resume(e)}))}if(e[w]){return}if(!e[z]){connect(e);return}if(e[z].destroyed){return}if(e[z].busy(r)){return}if(!r.aborted&&e[z].write(r)){e[D]++}else{e[m].splice(e[D],1)}}}__name(_resume,"_resume");A.exports=se}});var require_fixed_queue=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/fixed-queue.js"(e,A){"use strict";init_define_process();var t=2048;var r=t-1;var i=class _FixedCircularBuffer{constructor(){this.bottom=0;this.top=0;this.list=new Array(t);this.next=null}isEmpty(){return this.top===this.bottom}isFull(){return(this.top+1&r)===this.bottom}push(e){this.list[this.top]=e;this.top=this.top+1&r}shift(){const e=this.list[this.bottom];if(e===void 0)return null;this.list[this.bottom]=void 0;this.bottom=this.bottom+1&r;return e}};__name(i,"FixedCircularBuffer");var s=i;var n;A.exports=(n=class{constructor(){this.head=this.tail=new s}isEmpty(){return this.head.isEmpty()}push(e){if(this.head.isFull()){this.head=this.head.next=new s}this.head.push(e)}shift(){const e=this.tail;const A=e.shift();if(e.isEmpty()&&e.next!==null){this.tail=e.next}return A}},__name(n,"FixedQueue"),n)}});var require_pool_stats=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/pool-stats.js"(e,A){"use strict";init_define_process();var{kFree:t,kConnected:r,kPending:i,kQueued:s,kRunning:n,kSize:o}=require_symbols();var a=Symbol("pool");var c=class _PoolStats{constructor(e){this[a]=e}get connected(){return this[a][r]}get free(){return this[a][t]}get pending(){return this[a][i]}get queued(){return this[a][s]}get running(){return this[a][n]}get size(){return this[a][o]}};__name(c,"PoolStats");var l=c;A.exports=l}});var require_pool_base=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/pool-base.js"(e,A){"use strict";init_define_process();var t=require_dispatcher_base();var r=require_fixed_queue();var{kConnected:i,kSize:s,kRunning:n,kPending:o,kQueued:a,kBusy:c,kFree:l,kUrl:g,kClose:Q,kDestroy:u,kDispatch:E}=require_symbols();var B=require_pool_stats();var h=Symbol("clients");var C=Symbol("needDrain");var I=Symbol("queue");var d=Symbol("closed resolve");var f=Symbol("onDrain");var p=Symbol("onConnect");var m=Symbol("onDisconnect");var _=Symbol("onConnectionError");var w=Symbol("get dispatcher");var y=Symbol("add client");var b=Symbol("remove client");var k=Symbol("stats");var D=class _PoolBase extends t{constructor(){super();this[I]=new r;this[h]=[];this[a]=0;const e=this;this[f]=__name((function onDrain(A,t){const r=e[I];let i=false;while(!i){const A=r.shift();if(!A){break}e[a]--;i=!this.dispatch(A.opts,A.handler)}this[C]=i;if(!this[C]&&e[C]){e[C]=false;e.emit("drain",A,[e,...t])}if(e[d]&&r.isEmpty()){Promise.all(e[h].map((e=>e.close()))).then(e[d])}}),"onDrain");this[p]=(A,t)=>{e.emit("connect",A,[e,...t])};this[m]=(A,t,r)=>{e.emit("disconnect",A,[e,...t],r)};this[_]=(A,t,r)=>{e.emit("connectionError",A,[e,...t],r)};this[k]=new B(this)}get[c](){return this[C]}get[i](){return this[h].filter((e=>e[i])).length}get[l](){return this[h].filter((e=>e[i]&&!e[C])).length}get[o](){let e=this[a];for(const{[o]:A}of this[h]){e+=A}return e}get[n](){let e=0;for(const{[n]:A}of this[h]){e+=A}return e}get[s](){let e=this[a];for(const{[s]:A}of this[h]){e+=A}return e}get stats(){return this[k]}async[Q](){if(this[I].isEmpty()){await Promise.all(this[h].map((e=>e.close())))}else{await new Promise((e=>{this[d]=e}))}}async[u](e){while(true){const A=this[I].shift();if(!A){break}A.handler.onError(e)}await Promise.all(this[h].map((A=>A.destroy(e))))}[E](e,A){const t=this[w]();if(!t){this[C]=true;this[I].push({opts:e,handler:A});this[a]++}else if(!t.dispatch(e,A)){t[C]=true;this[C]=!this[w]()}return!this[C]}[y](e){e.on("drain",this[f]).on("connect",this[p]).on("disconnect",this[m]).on("connectionError",this[_]);this[h].push(e);if(this[C]){queueMicrotask((()=>{if(this[C]){this[f](e[g],[this,e])}}))}return this}[b](e){e.close((()=>{const A=this[h].indexOf(e);if(A!==-1){this[h].splice(A,1)}}));this[C]=this[h].some((e=>!e[C]&&e.closed!==true&&e.destroyed!==true))}};__name(D,"PoolBase");var R=D;A.exports={PoolBase:R,kClients:h,kNeedDrain:C,kAddClient:y,kRemoveClient:b,kGetDispatcher:w}}});var require_pool=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/pool.js"(e,A){"use strict";init_define_process();var{PoolBase:t,kClients:r,kNeedDrain:i,kAddClient:s,kGetDispatcher:n}=require_pool_base();var o=require_client();var{InvalidArgumentError:a}=require_errors();var c=require_util();var{kUrl:l,kInterceptors:g}=require_symbols();var Q=require_connect();var u=Symbol("options");var E=Symbol("connections");var B=Symbol("factory");function defaultFactory(e,A){return new o(e,A)}__name(defaultFactory,"defaultFactory");var h=class _Pool extends t{constructor(e,{connections:A,factory:t=defaultFactory,connect:r,connectTimeout:i,tls:s,maxCachedSessions:n,socketPath:o,autoSelectFamily:h,autoSelectFamilyAttemptTimeout:C,allowH2:I,...d}={}){super();if(A!=null&&(!Number.isFinite(A)||A<0)){throw new a("invalid connections")}if(typeof t!=="function"){throw new a("factory must be a function.")}if(r!=null&&typeof r!=="function"&&typeof r!=="object"){throw new a("connect must be a function or an object")}if(typeof r!=="function"){r=Q({...s,maxCachedSessions:n,allowH2:I,socketPath:o,timeout:i,...h?{autoSelectFamily:h,autoSelectFamilyAttemptTimeout:C}:void 0,...r})}this[g]=d.interceptors?.Pool&&Array.isArray(d.interceptors.Pool)?d.interceptors.Pool:[];this[E]=A||null;this[l]=c.parseOrigin(e);this[u]={...c.deepClone(d),connect:r,allowH2:I};this[u].interceptors=d.interceptors?{...d.interceptors}:void 0;this[B]=t}[n](){for(const e of this[r]){if(!e[i]){return e}}if(!this[E]||this[r].lengthe[g].origin===A&&e.closed!==true&&e.destroyed!==true))){return this}const t=this[E](A,Object.assign({},this[B]));this[o](t);t.on("connect",(()=>{t[d]=Math.min(this[f],t[d]+this[p])}));t.on("connectionError",(()=>{t[d]=Math.max(1,t[d]-this[p]);this._updateBalancedPoolStats()}));t.on("disconnect",((...e)=>{const A=e[2];if(A&&A.code==="UND_ERR_SOCKET"){t[d]=Math.max(1,t[d]-this[p]);this._updateBalancedPoolStats()}}));for(const e of this[s]){e[d]=this[f]}this._updateBalancedPoolStats();return this}_updateBalancedPoolStats(){let e=0;for(let A=0;Ae[g].origin===A&&e.closed!==true&&e.destroyed!==true));if(t){this[a](t)}return this}get upstreams(){return this[s].filter((e=>e.closed!==true&&e.destroyed!==true)).map((e=>e[g].origin))}[c](){if(this[s].length===0){throw new t}const e=this[s].find((e=>!e[n]&&e.closed!==true&&e.destroyed!==true));if(!e){return}const A=this[s].map((e=>e[n])).reduce(((e,A)=>e&&A),true);if(A){return}let r=0;let i=this[s].findIndex((e=>!e[n]));while(r++this[s][i][d]&&!e[n]){i=this[I]}if(this[I]===0){this[C]=this[C]-this[h];if(this[C]<=0){this[C]=this[f]}}if(e[d]>=this[C]&&!e[n]){return e}}this[C]=this[s][i][d];this[I]=i;return this[s][i]}};__name(m,"BalancedPool");var _=m;A.exports=_}});var require_agent=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/agent.js"(e,A){"use strict";init_define_process();var{InvalidArgumentError:t}=require_errors();var{kClients:r,kRunning:i,kClose:s,kDestroy:n,kDispatch:o,kInterceptors:a}=require_symbols();var c=require_dispatcher_base();var l=require_pool();var g=require_client();var Q=require_util();var u=require_redirect_interceptor();var E=Symbol("onConnect");var B=Symbol("onDisconnect");var h=Symbol("onConnectionError");var C=Symbol("maxRedirections");var I=Symbol("onDrain");var d=Symbol("factory");var f=Symbol("options");function defaultFactory(e,A){return A&&A.connections===1?new g(e,A):new l(e,A)}__name(defaultFactory,"defaultFactory");var p=class _Agent extends c{constructor({factory:e=defaultFactory,maxRedirections:A=0,connect:i,...s}={}){super();if(typeof e!=="function"){throw new t("factory must be a function.")}if(i!=null&&typeof i!=="function"&&typeof i!=="object"){throw new t("connect must be a function or an object")}if(!Number.isInteger(A)||A<0){throw new t("maxRedirections must be a positive number")}if(i&&typeof i!=="function"){i={...i}}this[a]=s.interceptors?.Agent&&Array.isArray(s.interceptors.Agent)?s.interceptors.Agent:[u({maxRedirections:A})];this[f]={...Q.deepClone(s),connect:i};this[f].interceptors=s.interceptors?{...s.interceptors}:void 0;this[C]=A;this[d]=e;this[r]=new Map;this[I]=(e,A)=>{this.emit("drain",e,[this,...A])};this[E]=(e,A)=>{this.emit("connect",e,[this,...A])};this[B]=(e,A,t)=>{this.emit("disconnect",e,[this,...A],t)};this[h]=(e,A,t)=>{this.emit("connectionError",e,[this,...A],t)}}get[i](){let e=0;for(const A of this[r].values()){e+=A[i]}return e}[o](e,A){let i;if(e.origin&&(typeof e.origin==="string"||e.origin instanceof URL)){i=String(e.origin)}else{throw new t("opts.origin must be a non-empty string or URL.")}let s=this[r].get(i);if(!s){s=this[d](e.origin,this[f]).on("drain",this[I]).on("connect",this[E]).on("disconnect",this[B]).on("connectionError",this[h]);this[r].set(i,s)}return s.dispatch(e,A)}async[s](){const e=[];for(const A of this[r].values()){e.push(A.close())}this[r].clear();await Promise.all(e)}async[n](e){const A=[];for(const t of this[r].values()){A.push(t.destroy(e))}this[r].clear();await Promise.all(A)}};__name(p,"Agent");var m=p;A.exports=m}});var require_proxy_agent=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/proxy-agent.js"(e,A){"use strict";init_define_process();var{kProxy:t,kClose:r,kDestroy:i,kInterceptors:s}=require_symbols();var{URL:n}=__nccwpck_require__(310);var o=require_agent();var a=require_pool();var c=require_dispatcher_base();var{InvalidArgumentError:l,RequestAbortedError:g,SecureProxyConnectionError:Q}=require_errors();var u=require_connect();var E=Symbol("proxy agent");var B=Symbol("proxy client");var h=Symbol("proxy headers");var C=Symbol("request tls settings");var I=Symbol("proxy tls settings");var d=Symbol("connect endpoint function");function defaultProtocolPort(e){return e==="https:"?443:80}__name(defaultProtocolPort,"defaultProtocolPort");function defaultFactory(e,A){return new a(e,A)}__name(defaultFactory,"defaultFactory");var f=__name((()=>{}),"noop");var p,m;var _=class _ProxyAgent extends c{constructor(e){super();__privateAdd(this,p);if(!e||typeof e==="object"&&!(e instanceof n)&&!e.uri){throw new l("Proxy uri is mandatory")}const{clientFactory:A=defaultFactory}=e;if(typeof A!=="function"){throw new l("Proxy opts.clientFactory must be a function.")}const r=__privateMethod(this,p,m).call(this,e);const{href:i,origin:a,port:c,protocol:_,username:w,password:y,hostname:b}=r;this[t]={uri:i,protocol:_};this[s]=e.interceptors?.ProxyAgent&&Array.isArray(e.interceptors.ProxyAgent)?e.interceptors.ProxyAgent:[];this[C]=e.requestTls;this[I]=e.proxyTls;this[h]=e.headers||{};if(e.auth&&e.token){throw new l("opts.auth cannot be used in combination with opts.token")}else if(e.auth){this[h]["proxy-authorization"]=`Basic ${e.auth}`}else if(e.token){this[h]["proxy-authorization"]=e.token}else if(w&&y){this[h]["proxy-authorization"]=`Basic ${Buffer.from(`${decodeURIComponent(w)}:${decodeURIComponent(y)}`).toString("base64")}`}const k=u({...e.proxyTls});this[d]=u({...e.requestTls});this[B]=A(r,{connect:k});this[E]=new o({...e,connect:async(e,A)=>{let t=e.host;if(!e.port){t+=`:${defaultProtocolPort(e.protocol)}`}try{const{socket:r,statusCode:i}=await this[B].connect({origin:a,port:c,path:t,signal:e.signal,headers:{...this[h],host:e.host},servername:this[I]?.servername||b});if(i!==200){r.on("error",f).destroy();A(new g(`Proxy response (${i}) !== 200 when HTTP Tunneling`))}if(e.protocol!=="https:"){A(null,r);return}let s;if(this[C]){s=this[C].servername}else{s=e.servername}this[d]({...e,servername:s,httpSocket:r},A)}catch(e){if(e.code==="ERR_TLS_CERT_ALTNAME_INVALID"){A(new Q(e))}else{A(e)}}}})}dispatch(e,A){const t=buildHeaders(e.headers);throwIfProxyAuthIsSent(t);if(t&&!("host"in t)&&!("Host"in t)){const{host:A}=new n(e.origin);t.host=A}return this[E].dispatch({...e,headers:t},A)}async[r](){await this[E].close();await this[B].close()}async[i](){await this[E].destroy();await this[B].destroy()}};p=new WeakSet;m=__name((function(e){if(typeof e==="string"){return new n(e)}else if(e instanceof n){return e}else{return new n(e.uri)}}),"#getUrl");__name(_,"ProxyAgent");var w=_;function buildHeaders(e){if(Array.isArray(e)){const A={};for(let t=0;te.toLowerCase()==="proxy-authorization"));if(A){throw new l("Proxy-Authorization should be sent in ProxyAgent constructor")}}__name(throwIfProxyAuthIsSent,"throwIfProxyAuthIsSent");A.exports=w}});var require_env_http_proxy_agent=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js"(e,A){"use strict";init_define_process();var t=require_dispatcher_base();var{kClose:r,kDestroy:i,kClosed:s,kDestroyed:n,kDispatch:o,kNoProxyAgent:a,kHttpProxyAgent:c,kHttpsProxyAgent:l}=require_symbols();var g=require_proxy_agent();var Q=require_agent();var u={"http:":80,"https:":443};var E=false;var B,h,C,I,d,f,p,m,_,w,y,b,k;var D=class _EnvHttpProxyAgent extends t{constructor(e={}){super();__privateAdd(this,I);__privateAdd(this,f);__privateAdd(this,m);__privateAdd(this,w);__privateAdd(this,b);__privateAdd(this,B,null);__privateAdd(this,h,null);__privateAdd(this,C,null);__privateSet(this,C,e);if(!E){E=true;define_process_default.emitWarning("EnvHttpProxyAgent is experimental, expect them to change at any time.",{code:"UNDICI-EHPA"})}const{httpProxy:A,httpsProxy:t,noProxy:r,...i}=e;this[a]=new Q(i);const s=A??define_process_default.env.http_proxy??define_process_default.env.HTTP_PROXY;if(s){this[c]=new g({...i,uri:s})}else{this[c]=this[a]}const n=t??define_process_default.env.https_proxy??define_process_default.env.HTTPS_PROXY;if(n){this[l]=new g({...i,uri:n})}else{this[l]=this[c]}__privateMethod(this,m,_).call(this)}[o](e,A){const t=new URL(e.origin);const r=__privateMethod(this,I,d).call(this,t);return r.dispatch(e,A)}async[r](){await this[a].close();if(!this[c][s]){await this[c].close()}if(!this[l][s]){await this[l].close()}}async[i](e){await this[a].destroy(e);if(!this[c][n]){await this[c].destroy(e)}if(!this[l][n]){await this[l].destroy(e)}}};B=new WeakMap;h=new WeakMap;C=new WeakMap;I=new WeakSet;d=__name((function(e){let{protocol:A,host:t,port:r}=e;t=t.replace(/:\d*$/,"").toLowerCase();r=Number.parseInt(r,10)||u[A]||0;if(!__privateMethod(this,f,p).call(this,t,r)){return this[a]}if(A==="https:"){return this[l]}return this[c]}),"#getProxyAgentForUrl");f=new WeakSet;p=__name((function(e,A){if(__privateGet(this,w,y)){__privateMethod(this,m,_).call(this)}if(__privateGet(this,h).length===0){return true}if(__privateGet(this,B)==="*"){return false}for(let t=0;t<__privateGet(this,h).length;t++){const r=__privateGet(this,h)[t];if(r.port&&r.port!==A){continue}if(!/^[.*]/.test(r.hostname)){if(e===r.hostname){return false}}else{if(e.endsWith(r.hostname.replace(/^\*/,""))){return false}}}return true}),"#shouldProxy");m=new WeakSet;_=__name((function(){const e=__privateGet(this,C).noProxy??__privateGet(this,b,k);const A=e.split(/[,\s]/);const t=[];for(let e=0;e{this.aborted=true;if(this.abort){this.abort(e)}else{this.reason=e}}))}onRequestSent(){if(this.handler.onRequestSent){this.handler.onRequestSent()}}onUpgrade(e,A,t){if(this.handler.onUpgrade){this.handler.onUpgrade(e,A,t)}}onConnect(e){if(this.aborted){e(this.reason)}else{this.abort=e}}onBodySent(e){if(this.handler.onBodySent)return this.handler.onBodySent(e)}static[r](e,{state:A,opts:t},r){const{statusCode:i,code:s,headers:n}=e;const{method:o,retryOptions:a}=t;const{maxRetries:c,minTimeout:l,maxTimeout:g,timeoutFactor:Q,statusCodes:u,errorCodes:E,methods:B}=a;const{counter:h}=A;if(s&&s!=="UND_ERR_REQ_RETRY"&&!E.includes(s)){r(e);return}if(Array.isArray(B)&&!B.includes(o)){r(e);return}if(i!=null&&Array.isArray(u)&&!u.includes(i)){r(e);return}if(h>c){r(e);return}let C=n?.["retry-after"];if(C){C=Number(C);C=Number.isNaN(C)?calculateRetryAfterHeader(C):C*1e3}const I=C>0?Math.min(C,g):Math.min(l*Q**(h-1),g);setTimeout((()=>r(null)),I)}onHeaders(e,A,r,s){const a=n(A);this.retryCount+=1;if(e>=300){if(this.retryOpts.statusCodes.includes(e)===false){return this.handler.onHeaders(e,A,r,s)}else{this.abort(new i("Request failed",e,{headers:a,data:{count:this.retryCount}}));return false}}if(this.resume!=null){this.resume=null;if(e!==206&&(this.start>0||e!==200)){this.abort(new i("server does not support the range header and the payload was partially consumed",e,{headers:a,data:{count:this.retryCount}}));return false}const A=o(a["content-range"]);if(!A){this.abort(new i("Content-Range mismatch",e,{headers:a,data:{count:this.retryCount}}));return false}if(this.etag!=null&&this.etag!==a.etag){this.abort(new i("ETag mismatch",e,{headers:a,data:{count:this.retryCount}}));return false}const{start:s,size:n,end:c=n-1}=A;t(this.start===s,"content-range mismatch");t(this.end==null||this.end===c,"content-range mismatch");this.resume=r;return true}if(this.end==null){if(e===206){const i=o(a["content-range"]);if(i==null){return this.handler.onHeaders(e,A,r,s)}const{start:n,size:c,end:l=c-1}=i;t(n!=null&&Number.isFinite(n),"content-range mismatch");t(l!=null&&Number.isFinite(l),"invalid content-length");this.start=n;this.end=l}if(this.end==null){const e=a["content-length"];this.end=e!=null?Number(e)-1:null}t(Number.isFinite(this.start));t(this.end==null||Number.isFinite(this.end),"invalid content-length");this.resume=r;this.etag=a.etag!=null?a.etag:null;if(this.etag!=null&&this.etag.startsWith("W/")){this.etag=null}return this.handler.onHeaders(e,A,r,s)}const c=new i("Request failed",e,{headers:a,data:{count:this.retryCount}});this.abort(c);return false}onData(e){this.start+=e.length;return this.handler.onData(e)}onComplete(e){this.retryCount=0;return this.handler.onComplete(e)}onError(e){if(this.aborted||s(this.opts.body)){return this.handler.onError(e)}if(this.retryCount-this.retryCountCheckpoint>0){this.retryCount=this.retryCountCheckpoint+(this.retryCount-this.retryCountCheckpoint)}else{this.retryCount+=1}this.retryOpts.retry(e,{state:{counter:this.retryCount},opts:{retryOptions:this.retryOpts,...this.opts}},onRetry.bind(this));function onRetry(e){if(e!=null||this.aborted||s(this.opts.body)){return this.handler.onError(e)}if(this.start!==0){const e={range:`bytes=${this.start}-${this.end??""}`};if(this.etag!=null){e["if-match"]=this.etag}this.opts={...this.opts,headers:{...this.opts.headers,...e}}}try{this.retryCountCheckpoint=this.retryCount;this.dispatch(this.opts,this)}catch(e){this.handler.onError(e)}}__name(onRetry,"onRetry")}};__name(c,"RetryHandler");var l=c;A.exports=l}});var require_retry_agent=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/dispatcher/retry-agent.js"(e,A){"use strict";init_define_process();var t=require_dispatcher();var r=require_retry_handler();var i,s;var n=class _RetryAgent extends t{constructor(e,A={}){super(A);__privateAdd(this,i,null);__privateAdd(this,s,null);__privateSet(this,i,e);__privateSet(this,s,A)}dispatch(e,A){const t=new r({...e,retryOptions:__privateGet(this,s)},{dispatch:__privateGet(this,i).dispatch.bind(__privateGet(this,i)),handler:A});return __privateGet(this,i).dispatch(e,t)}close(){return __privateGet(this,i).close()}destroy(){return __privateGet(this,i).destroy()}};i=new WeakMap;s=new WeakMap;__name(n,"RetryAgent");var o=n;A.exports=o}});var require_readable=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/api/readable.js"(e,A){"use strict";init_define_process();var t=__nccwpck_require__(491);var{Readable:r}=__nccwpck_require__(781);var{RequestAbortedError:i,NotSupportedError:s,InvalidArgumentError:n,AbortError:o}=require_errors();var a=require_util();var{ReadableStreamFrom:c}=require_util();var l=Symbol("kConsume");var g=Symbol("kReading");var Q=Symbol("kBody");var u=Symbol("kAbort");var E=Symbol("kContentType");var B=Symbol("kContentLength");var h=__name((()=>{}),"noop");var C=class _BodyReadable extends r{constructor({resume:e,abort:A,contentType:t="",contentLength:r,highWaterMark:i=64*1024}){super({autoDestroy:true,read:e,highWaterMark:i});this._readableState.dataEmitted=false;this[u]=A;this[l]=null;this[Q]=null;this[E]=t;this[B]=r;this[g]=false}destroy(e){if(!e&&!this._readableState.endEmitted){e=new i}if(e){this[u]()}return super.destroy(e)}_destroy(e,A){if(!this[g]){setImmediate((()=>{A(e)}))}else{A(e)}}on(e,...A){if(e==="data"||e==="readable"){this[g]=true}return super.on(e,...A)}addListener(e,...A){return this.on(e,...A)}off(e,...A){const t=super.off(e,...A);if(e==="data"||e==="readable"){this[g]=this.listenerCount("data")>0||this.listenerCount("readable")>0}return t}removeListener(e,...A){return this.off(e,...A)}push(e){if(this[l]&&e!==null){consumePush(this[l],e);return this[g]?super.push(e):true}return super.push(e)}async text(){return consume(this,"text")}async json(){return consume(this,"json")}async blob(){return consume(this,"blob")}async bytes(){return consume(this,"bytes")}async arrayBuffer(){return consume(this,"arrayBuffer")}async formData(){throw new s}get bodyUsed(){return a.isDisturbed(this)}get body(){if(!this[Q]){this[Q]=c(this);if(this[l]){this[Q].getReader();t(this[Q].locked)}}return this[Q]}async dump(e){let A=Number.isFinite(e?.limit)?e.limit:128*1024;const t=e?.signal;if(t!=null&&(typeof t!=="object"||!("aborted"in t))){throw new n("signal must be an AbortSignal")}t?.throwIfAborted();if(this._readableState.closeEmitted){return null}return await new Promise(((e,r)=>{if(this[B]>A){this.destroy(new o)}const i=__name((()=>{this.destroy(t.reason??new o)}),"onAbort");t?.addEventListener("abort",i);this.on("close",(function(){t?.removeEventListener("abort",i);if(t?.aborted){r(t.reason??new o)}else{e(null)}})).on("error",h).on("data",(function(e){A-=e.length;if(A<=0){this.destroy()}})).resume()}))}};__name(C,"BodyReadable");var I=C;function isLocked(e){return e[Q]&&e[Q].locked===true||e[l]}__name(isLocked,"isLocked");function isUnusable(e){return a.isDisturbed(e)||isLocked(e)}__name(isUnusable,"isUnusable");async function consume(e,A){t(!e[l]);return new Promise(((t,r)=>{if(isUnusable(e)){const A=e._readableState;if(A.destroyed&&A.closeEmitted===false){e.on("error",(e=>{r(e)})).on("close",(()=>{r(new TypeError("unusable"))}))}else{r(A.errored??new TypeError("unusable"))}}else{queueMicrotask((()=>{e[l]={type:A,stream:e,resolve:t,reject:r,length:0,body:[]};e.on("error",(function(e){consumeFinish(this[l],e)})).on("close",(function(){if(this[l].body!==null){consumeFinish(this[l],new i)}}));consumeStart(e[l])}))}}))}__name(consume,"consume");function consumeStart(e){if(e.body===null){return}const{_readableState:A}=e.stream;if(A.bufferIndex){const t=A.bufferIndex;const r=A.buffer.length;for(let i=t;i2&&t[0]===239&&t[1]===187&&t[2]===191?3:0;return t.utf8Slice(i,r)}__name(chunksDecode,"chunksDecode");function chunksConcat(e,A){if(e.length===0||A===0){return new Uint8Array(0)}if(e.length===1){return new Uint8Array(e[0])}const t=new Uint8Array(Buffer.allocUnsafeSlow(A).buffer);let r=0;for(let A=0;As){Q=[];u=0;break}}}catch{Q=[];u=0}const E=`Response status code ${c}${l?`: ${l}`:""}`;if(c===204||!a||!u){queueMicrotask((()=>e(new r(E,c,g))));return}const B=Error.stackTraceLimit;Error.stackTraceLimit=0;let h;try{if(n(a)){h=JSON.parse(i(Q,u))}else if(o(a)){h=i(Q,u)}}catch{}finally{Error.stackTraceLimit=B}queueMicrotask((()=>e(new r(E,c,g,h))))}__name(getResolveErrorBodyCallback,"getResolveErrorBodyCallback");var n=__name((e=>e.length>15&&e[11]==="/"&&e[0]==="a"&&e[1]==="p"&&e[2]==="p"&&e[3]==="l"&&e[4]==="i"&&e[5]==="c"&&e[6]==="a"&&e[7]==="t"&&e[8]==="i"&&e[9]==="o"&&e[10]==="n"&&e[12]==="j"&&e[13]==="s"&&e[14]==="o"&&e[15]==="n"),"isContentTypeApplicationJson");var o=__name((e=>e.length>4&&e[4]==="/"&&e[0]==="t"&&e[1]==="e"&&e[2]==="x"&&e[3]==="t"),"isContentTypeText");A.exports={getResolveErrorBodyCallback:getResolveErrorBodyCallback,isContentTypeApplicationJson:n,isContentTypeText:o}}});var require_api_request=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/api/api-request.js"(e,A){"use strict";init_define_process();var t=__nccwpck_require__(491);var{Readable:r}=require_readable();var{InvalidArgumentError:i,RequestAbortedError:s}=require_errors();var n=require_util();var{getResolveErrorBodyCallback:o}=require_util3();var{AsyncResource:a}=__nccwpck_require__(852);var c=class _RequestHandler extends a{constructor(e,A){if(!e||typeof e!=="object"){throw new i("invalid opts")}const{signal:t,method:r,opaque:o,body:a,onInfo:c,responseHeaders:l,throwOnError:g,highWaterMark:Q}=e;try{if(typeof A!=="function"){throw new i("invalid callback")}if(Q&&(typeof Q!=="number"||Q<0)){throw new i("invalid highWaterMark")}if(t&&typeof t.on!=="function"&&typeof t.addEventListener!=="function"){throw new i("signal must be an EventEmitter or EventTarget")}if(r==="CONNECT"){throw new i("invalid method")}if(c&&typeof c!=="function"){throw new i("invalid onInfo callback")}super("UNDICI_REQUEST")}catch(e){if(n.isStream(a)){n.destroy(a.on("error",n.nop),e)}throw e}this.method=r;this.responseHeaders=l||null;this.opaque=o||null;this.callback=A;this.res=null;this.abort=null;this.body=a;this.trailers={};this.context=null;this.onInfo=c||null;this.throwOnError=g;this.highWaterMark=Q;this.signal=t;this.reason=null;this.removeAbortListener=null;if(n.isStream(a)){a.on("error",(e=>{this.onError(e)}))}if(this.signal){if(this.signal.aborted){this.reason=this.signal.reason??new s}else{this.removeAbortListener=n.addAbortListener(this.signal,(()=>{this.reason=this.signal.reason??new s;if(this.res){n.destroy(this.res,this.reason)}else if(this.abort){this.abort(this.reason)}if(this.removeAbortListener){this.res?.off("close",this.removeAbortListener);this.removeAbortListener();this.removeAbortListener=null}}))}}}onConnect(e,A){if(this.reason){e(this.reason);return}t(this.callback);this.abort=e;this.context=A}onHeaders(e,A,t,i){const{callback:s,opaque:a,abort:c,context:l,responseHeaders:g,highWaterMark:Q}=this;const u=g==="raw"?n.parseRawHeaders(A):n.parseHeaders(A);if(e<200){if(this.onInfo){this.onInfo({statusCode:e,headers:u})}return}const E=g==="raw"?n.parseHeaders(A):u;const B=E["content-type"];const h=E["content-length"];const C=new r({resume:t,abort:c,contentType:B,contentLength:this.method!=="HEAD"&&h?Number(h):null,highWaterMark:Q});if(this.removeAbortListener){C.on("close",this.removeAbortListener)}this.callback=null;this.res=C;if(s!==null){if(this.throwOnError&&e>=400){this.runInAsyncScope(o,null,{callback:s,body:C,contentType:B,statusCode:e,statusMessage:i,headers:u})}else{this.runInAsyncScope(s,null,null,{statusCode:e,headers:u,trailers:this.trailers,opaque:a,body:C,context:l})}}}onData(e){return this.res.push(e)}onComplete(e){n.parseHeaders(e,this.trailers);this.res.push(null)}onError(e){const{res:A,callback:t,body:r,opaque:i}=this;if(t){this.callback=null;queueMicrotask((()=>{this.runInAsyncScope(t,null,e,{opaque:i})}))}if(A){this.res=null;queueMicrotask((()=>{n.destroy(A,e)}))}if(r){this.body=null;n.destroy(r,e)}if(this.removeAbortListener){A?.off("close",this.removeAbortListener);this.removeAbortListener();this.removeAbortListener=null}}};__name(c,"RequestHandler");var l=c;function request(e,A){if(A===void 0){return new Promise(((A,t)=>{request.call(this,e,((e,r)=>e?t(e):A(r)))}))}try{this.dispatch(e,new l(e,A))}catch(t){if(typeof A!=="function"){throw t}const r=e?.opaque;queueMicrotask((()=>A(t,{opaque:r})))}}__name(request,"request");A.exports=request;A.exports.RequestHandler=l}});var require_abort_signal=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/api/abort-signal.js"(e,A){"use strict";init_define_process();var{addAbortListener:t}=require_util();var{RequestAbortedError:r}=require_errors();var i=Symbol("kListener");var s=Symbol("kSignal");function abort(e){if(e.abort){e.abort(e[s]?.reason)}else{e.reason=e[s]?.reason??new r}removeSignal(e)}__name(abort,"abort");function addSignal(e,A){e.reason=null;e[s]=null;e[i]=null;if(!A){return}if(A.aborted){abort(e);return}e[s]=A;e[i]=()=>{abort(e)};t(e[s],e[i])}__name(addSignal,"addSignal");function removeSignal(e){if(!e[s]){return}if("removeEventListener"in e[s]){e[s].removeEventListener("abort",e[i])}else{e[s].removeListener("abort",e[i])}e[s]=null;e[i]=null}__name(removeSignal,"removeSignal");A.exports={addSignal:addSignal,removeSignal:removeSignal}}});var require_api_stream=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/api/api-stream.js"(e,A){"use strict";init_define_process();var t=__nccwpck_require__(491);var{finished:r,PassThrough:i}=__nccwpck_require__(781);var{InvalidArgumentError:s,InvalidReturnValueError:n}=require_errors();var o=require_util();var{getResolveErrorBodyCallback:a}=require_util3();var{AsyncResource:c}=__nccwpck_require__(852);var{addSignal:l,removeSignal:g}=require_abort_signal();var Q=class _StreamHandler extends c{constructor(e,A,t){if(!e||typeof e!=="object"){throw new s("invalid opts")}const{signal:r,method:i,opaque:n,body:a,onInfo:c,responseHeaders:g,throwOnError:Q}=e;try{if(typeof t!=="function"){throw new s("invalid callback")}if(typeof A!=="function"){throw new s("invalid factory")}if(r&&typeof r.on!=="function"&&typeof r.addEventListener!=="function"){throw new s("signal must be an EventEmitter or EventTarget")}if(i==="CONNECT"){throw new s("invalid method")}if(c&&typeof c!=="function"){throw new s("invalid onInfo callback")}super("UNDICI_STREAM")}catch(e){if(o.isStream(a)){o.destroy(a.on("error",o.nop),e)}throw e}this.responseHeaders=g||null;this.opaque=n||null;this.factory=A;this.callback=t;this.res=null;this.abort=null;this.context=null;this.trailers=null;this.body=a;this.onInfo=c||null;this.throwOnError=Q||false;if(o.isStream(a)){a.on("error",(e=>{this.onError(e)}))}l(this,r)}onConnect(e,A){if(this.reason){e(this.reason);return}t(this.callback);this.abort=e;this.context=A}onHeaders(e,A,t,s){const{factory:c,opaque:l,context:g,callback:Q,responseHeaders:u}=this;const E=u==="raw"?o.parseRawHeaders(A):o.parseHeaders(A);if(e<200){if(this.onInfo){this.onInfo({statusCode:e,headers:E})}return}this.factory=null;let B;if(this.throwOnError&&e>=400){const t=u==="raw"?o.parseHeaders(A):E;const r=t["content-type"];B=new i;this.callback=null;this.runInAsyncScope(a,null,{callback:Q,body:B,contentType:r,statusCode:e,statusMessage:s,headers:E})}else{if(c===null){return}B=this.runInAsyncScope(c,null,{statusCode:e,headers:E,opaque:l,context:g});if(!B||typeof B.write!=="function"||typeof B.end!=="function"||typeof B.on!=="function"){throw new n("expected Writable")}r(B,{readable:false},(e=>{const{callback:A,res:t,opaque:r,trailers:i,abort:s}=this;this.res=null;if(e||!t.readable){o.destroy(t,e)}this.callback=null;this.runInAsyncScope(A,null,e||null,{opaque:r,trailers:i});if(e){s()}}))}B.on("drain",t);this.res=B;const h=B.writableNeedDrain!==void 0?B.writableNeedDrain:B._writableState?.needDrain;return h!==true}onData(e){const{res:A}=this;return A?A.write(e):true}onComplete(e){const{res:A}=this;g(this);if(!A){return}this.trailers=o.parseHeaders(e);A.end()}onError(e){const{res:A,callback:t,opaque:r,body:i}=this;g(this);this.factory=null;if(A){this.res=null;o.destroy(A,e)}else if(t){this.callback=null;queueMicrotask((()=>{this.runInAsyncScope(t,null,e,{opaque:r})}))}if(i){this.body=null;o.destroy(i,e)}}};__name(Q,"StreamHandler");var u=Q;function stream(e,A,t){if(t===void 0){return new Promise(((t,r)=>{stream.call(this,e,A,((e,A)=>e?r(e):t(A)))}))}try{this.dispatch(e,new u(e,A,t))}catch(A){if(typeof t!=="function"){throw A}const r=e?.opaque;queueMicrotask((()=>t(A,{opaque:r})))}}__name(stream,"stream");A.exports=stream}});var require_api_pipeline=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/api/api-pipeline.js"(e,A){"use strict";init_define_process();var{Readable:t,Duplex:r,PassThrough:i}=__nccwpck_require__(781);var{InvalidArgumentError:s,InvalidReturnValueError:n,RequestAbortedError:o}=require_errors();var a=require_util();var{AsyncResource:c}=__nccwpck_require__(852);var{addSignal:l,removeSignal:g}=require_abort_signal();var Q=__nccwpck_require__(491);var u=Symbol("resume");var E=class _PipelineRequest extends t{constructor(){super({autoDestroy:true});this[u]=null}_read(){const{[u]:e}=this;if(e){this[u]=null;e()}}_destroy(e,A){this._read();A(e)}};__name(E,"PipelineRequest");var B=E;var h=class _PipelineResponse extends t{constructor(e){super({autoDestroy:true});this[u]=e}_read(){this[u]()}_destroy(e,A){if(!e&&!this._readableState.endEmitted){e=new o}A(e)}};__name(h,"PipelineResponse");var C=h;var I=class _PipelineHandler extends c{constructor(e,A){if(!e||typeof e!=="object"){throw new s("invalid opts")}if(typeof A!=="function"){throw new s("invalid handler")}const{signal:t,method:i,opaque:n,onInfo:c,responseHeaders:Q}=e;if(t&&typeof t.on!=="function"&&typeof t.addEventListener!=="function"){throw new s("signal must be an EventEmitter or EventTarget")}if(i==="CONNECT"){throw new s("invalid method")}if(c&&typeof c!=="function"){throw new s("invalid onInfo callback")}super("UNDICI_PIPELINE");this.opaque=n||null;this.responseHeaders=Q||null;this.handler=A;this.abort=null;this.context=null;this.onInfo=c||null;this.req=(new B).on("error",a.nop);this.ret=new r({readableObjectMode:e.objectMode,autoDestroy:true,read:()=>{const{body:e}=this;if(e?.resume){e.resume()}},write:(e,A,t)=>{const{req:r}=this;if(r.push(e,A)||r._readableState.destroyed){t()}else{r[u]=t}},destroy:(e,A)=>{const{body:t,req:r,res:i,ret:s,abort:n}=this;if(!e&&!s._readableState.endEmitted){e=new o}if(n&&e){n()}a.destroy(t,e);a.destroy(r,e);a.destroy(i,e);g(this);A(e)}}).on("prefinish",(()=>{const{req:e}=this;e.push(null)}));this.res=null;l(this,t)}onConnect(e,A){const{ret:t,res:r}=this;if(this.reason){e(this.reason);return}Q(!r,"pipeline cannot be retried");Q(!t.destroyed);this.abort=e;this.context=A}onHeaders(e,A,t){const{opaque:r,handler:i,context:s}=this;if(e<200){if(this.onInfo){const t=this.responseHeaders==="raw"?a.parseRawHeaders(A):a.parseHeaders(A);this.onInfo({statusCode:e,headers:t})}return}this.res=new C(t);let c;try{this.handler=null;const t=this.responseHeaders==="raw"?a.parseRawHeaders(A):a.parseHeaders(A);c=this.runInAsyncScope(i,null,{statusCode:e,headers:t,opaque:r,body:this.res,context:s})}catch(e){this.res.on("error",a.nop);throw e}if(!c||typeof c.on!=="function"){throw new n("expected Readable")}c.on("data",(e=>{const{ret:A,body:t}=this;if(!A.push(e)&&t.pause){t.pause()}})).on("error",(e=>{const{ret:A}=this;a.destroy(A,e)})).on("end",(()=>{const{ret:e}=this;e.push(null)})).on("close",(()=>{const{ret:e}=this;if(!e._readableState.ended){a.destroy(e,new o)}}));this.body=c}onData(e){const{res:A}=this;return A.push(e)}onComplete(e){const{res:A}=this;A.push(null)}onError(e){const{ret:A}=this;this.handler=null;a.destroy(A,e)}};__name(I,"PipelineHandler");var d=I;function pipeline(e,A){try{const t=new d(e,A);this.dispatch({...e,body:t.req},t);return t.ret}catch(e){return(new i).destroy(e)}}__name(pipeline,"pipeline");A.exports=pipeline}});var require_api_upgrade=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/api/api-upgrade.js"(e,A){"use strict";init_define_process();var{InvalidArgumentError:t,SocketError:r}=require_errors();var{AsyncResource:i}=__nccwpck_require__(852);var s=require_util();var{addSignal:n,removeSignal:o}=require_abort_signal();var a=__nccwpck_require__(491);var c=class _UpgradeHandler extends i{constructor(e,A){if(!e||typeof e!=="object"){throw new t("invalid opts")}if(typeof A!=="function"){throw new t("invalid callback")}const{signal:r,opaque:i,responseHeaders:s}=e;if(r&&typeof r.on!=="function"&&typeof r.addEventListener!=="function"){throw new t("signal must be an EventEmitter or EventTarget")}super("UNDICI_UPGRADE");this.responseHeaders=s||null;this.opaque=i||null;this.callback=A;this.abort=null;this.context=null;n(this,r)}onConnect(e,A){if(this.reason){e(this.reason);return}a(this.callback);this.abort=e;this.context=null}onHeaders(){throw new r("bad upgrade",null)}onUpgrade(e,A,t){a(e===101);const{callback:r,opaque:i,context:n}=this;o(this);this.callback=null;const c=this.responseHeaders==="raw"?s.parseRawHeaders(A):s.parseHeaders(A);this.runInAsyncScope(r,null,null,{headers:c,socket:t,opaque:i,context:n})}onError(e){const{callback:A,opaque:t}=this;o(this);if(A){this.callback=null;queueMicrotask((()=>{this.runInAsyncScope(A,null,e,{opaque:t})}))}}};__name(c,"UpgradeHandler");var l=c;function upgrade(e,A){if(A===void 0){return new Promise(((A,t)=>{upgrade.call(this,e,((e,r)=>e?t(e):A(r)))}))}try{const t=new l(e,A);this.dispatch({...e,method:e.method||"GET",upgrade:e.protocol||"Websocket"},t)}catch(t){if(typeof A!=="function"){throw t}const r=e?.opaque;queueMicrotask((()=>A(t,{opaque:r})))}}__name(upgrade,"upgrade");A.exports=upgrade}});var require_api_connect=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/api/api-connect.js"(e,A){"use strict";init_define_process();var t=__nccwpck_require__(491);var{AsyncResource:r}=__nccwpck_require__(852);var{InvalidArgumentError:i,SocketError:s}=require_errors();var n=require_util();var{addSignal:o,removeSignal:a}=require_abort_signal();var c=class _ConnectHandler extends r{constructor(e,A){if(!e||typeof e!=="object"){throw new i("invalid opts")}if(typeof A!=="function"){throw new i("invalid callback")}const{signal:t,opaque:r,responseHeaders:s}=e;if(t&&typeof t.on!=="function"&&typeof t.addEventListener!=="function"){throw new i("signal must be an EventEmitter or EventTarget")}super("UNDICI_CONNECT");this.opaque=r||null;this.responseHeaders=s||null;this.callback=A;this.abort=null;o(this,t)}onConnect(e,A){if(this.reason){e(this.reason);return}t(this.callback);this.abort=e;this.context=A}onHeaders(){throw new s("bad connect",null)}onUpgrade(e,A,t){const{callback:r,opaque:i,context:s}=this;a(this);this.callback=null;let o=A;if(o!=null){o=this.responseHeaders==="raw"?n.parseRawHeaders(A):n.parseHeaders(A)}this.runInAsyncScope(r,null,null,{statusCode:e,headers:o,socket:t,opaque:i,context:s})}onError(e){const{callback:A,opaque:t}=this;a(this);if(A){this.callback=null;queueMicrotask((()=>{this.runInAsyncScope(A,null,e,{opaque:t})}))}}};__name(c,"ConnectHandler");var l=c;function connect(e,A){if(A===void 0){return new Promise(((A,t)=>{connect.call(this,e,((e,r)=>e?t(e):A(r)))}))}try{const t=new l(e,A);this.dispatch({...e,method:"CONNECT"},t)}catch(t){if(typeof A!=="function"){throw t}const r=e?.opaque;queueMicrotask((()=>A(t,{opaque:r})))}}__name(connect,"connect");A.exports=connect}});var require_api=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/api/index.js"(e,A){"use strict";init_define_process();A.exports.request=require_api_request();A.exports.stream=require_api_stream();A.exports.pipeline=require_api_pipeline();A.exports.upgrade=require_api_upgrade();A.exports.connect=require_api_connect()}});var require_mock_errors=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/mock/mock-errors.js"(e,A){"use strict";init_define_process();var{UndiciError:t}=require_errors();var r=class _MockNotMatchedError extends t{constructor(e){super(e);Error.captureStackTrace(this,_MockNotMatchedError);this.name="MockNotMatchedError";this.message=e||"The request does not match any registered mock dispatches";this.code="UND_MOCK_ERR_MOCK_NOT_MATCHED"}};__name(r,"MockNotMatchedError");var i=r;A.exports={MockNotMatchedError:i}}});var require_mock_symbols=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/mock/mock-symbols.js"(e,A){"use strict";init_define_process();A.exports={kAgent:Symbol("agent"),kOptions:Symbol("options"),kFactory:Symbol("factory"),kDispatches:Symbol("dispatches"),kDispatchKey:Symbol("dispatch key"),kDefaultHeaders:Symbol("default headers"),kDefaultTrailers:Symbol("default trailers"),kContentLength:Symbol("content length"),kMockAgent:Symbol("mock agent"),kMockAgentSet:Symbol("mock agent set"),kMockAgentGet:Symbol("mock agent get"),kMockDispatch:Symbol("mock dispatch"),kClose:Symbol("close"),kOriginalClose:Symbol("original agent close"),kOrigin:Symbol("origin"),kIsMockActive:Symbol("is mock active"),kNetConnect:Symbol("net connect"),kGetNetConnect:Symbol("get net connect"),kConnected:Symbol("connected")}}});var require_mock_utils=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/mock/mock-utils.js"(e,A){"use strict";init_define_process();var{MockNotMatchedError:t}=require_mock_errors();var{kDispatches:r,kMockAgent:i,kOriginalDispatch:s,kOrigin:n,kGetNetConnect:o}=require_mock_symbols();var{buildURL:a}=require_util();var{STATUS_CODES:c}=__nccwpck_require__(685);var{types:{isPromise:l}}=__nccwpck_require__(837);function matchValue(e,A){if(typeof e==="string"){return e===A}if(e instanceof RegExp){return e.test(A)}if(typeof e==="function"){return e(A)===true}return false}__name(matchValue,"matchValue");function lowerCaseEntries(e){return Object.fromEntries(Object.entries(e).map((([e,A])=>[e.toLocaleLowerCase(),A])))}__name(lowerCaseEntries,"lowerCaseEntries");function getHeaderByName(e,A){if(Array.isArray(e)){for(let t=0;t!e)).filter((({path:e})=>matchValue(safeUrl(e),i)));if(s.length===0){throw new t(`Mock dispatch not matched for path '${i}'`)}s=s.filter((({method:e})=>matchValue(e,A.method)));if(s.length===0){throw new t(`Mock dispatch not matched for method '${A.method}' on path '${i}'`)}s=s.filter((({body:e})=>typeof e!=="undefined"?matchValue(e,A.body):true));if(s.length===0){throw new t(`Mock dispatch not matched for body '${A.body}' on path '${i}'`)}s=s.filter((e=>matchHeaders(e,A.headers)));if(s.length===0){const e=typeof A.headers==="object"?JSON.stringify(A.headers):A.headers;throw new t(`Mock dispatch not matched for headers '${e}' on path '${i}'`)}return s[0]}__name(getMockDispatch,"getMockDispatch");function addMockDispatch(e,A,t){const r={timesInvoked:0,times:1,persist:false,consumed:false};const i=typeof t==="function"?{callback:t}:{...t};const s={...r,...A,pending:true,data:{error:null,...i}};e.push(s);return s}__name(addMockDispatch,"addMockDispatch");function deleteMockDispatch(e,A){const t=e.findIndex((e=>{if(!e.consumed){return false}return matchKey(e,A)}));if(t!==-1){e.splice(t,1)}}__name(deleteMockDispatch,"deleteMockDispatch");function buildKey(e){const{path:A,method:t,body:r,headers:i,query:s}=e;return{path:A,method:t,body:r,headers:i,query:s}}__name(buildKey,"buildKey");function generateKeyValues(e){const A=Object.keys(e);const t=[];for(let r=0;r=E;i.pending=u0){setTimeout((()=>{handleReply(this[r])}),g)}else{handleReply(this[r])}function handleReply(r,i=n){const c=Array.isArray(e.headers)?buildHeadersFromArray(e.headers):e.headers;const g=typeof i==="function"?i({...e,headers:c}):i;if(l(g)){g.then((e=>handleReply(r,e)));return}const Q=getResponseData(g);const u=generateKeyValues(o);const E=generateKeyValues(a);A.onConnect?.((e=>A.onError(e)),null);A.onHeaders?.(s,u,resume,getStatusText(s));A.onData?.(Buffer.from(Q));A.onComplete?.(E);deleteMockDispatch(r,t)}__name(handleReply,"handleReply");function resume(){}__name(resume,"resume");return true}__name(mockDispatch,"mockDispatch");function buildMockDispatch(){const e=this[i];const A=this[n];const r=this[s];return __name((function dispatch(i,s){if(e.isMockActive){try{mockDispatch.call(this,i,s)}catch(n){if(n instanceof t){const a=e[o]();if(a===false){throw new t(`${n.message}: subsequent request to origin ${A} was not allowed (net.connect disabled)`)}if(checkNetConnect(a,A)){r.call(this,i,s)}else{throw new t(`${n.message}: subsequent request to origin ${A} was not allowed (net.connect is not enabled for this origin)`)}}else{throw n}}}else{r.call(this,i,s)}}),"dispatch")}__name(buildMockDispatch,"buildMockDispatch");function checkNetConnect(e,A){const t=new URL(A);if(e===true){return true}else if(Array.isArray(e)&&e.some((e=>matchValue(e,t.host)))){return true}return false}__name(checkNetConnect,"checkNetConnect");function buildMockOptions(e){if(e){const{agent:A,...t}=e;return t}}__name(buildMockOptions,"buildMockOptions");A.exports={getResponseData:getResponseData,getMockDispatch:getMockDispatch,addMockDispatch:addMockDispatch,deleteMockDispatch:deleteMockDispatch,buildKey:buildKey,generateKeyValues:generateKeyValues,matchValue:matchValue,getResponse:getResponse,getStatusText:getStatusText,mockDispatch:mockDispatch,buildMockDispatch:buildMockDispatch,checkNetConnect:checkNetConnect,buildMockOptions:buildMockOptions,getHeaderByName:getHeaderByName,buildHeadersFromArray:buildHeadersFromArray}}});var require_mock_interceptor=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/mock/mock-interceptor.js"(e,A){"use strict";init_define_process();var{getResponseData:t,buildKey:r,addMockDispatch:i}=require_mock_utils();var{kDispatches:s,kDispatchKey:n,kDefaultHeaders:o,kDefaultTrailers:a,kContentLength:c,kMockDispatch:l}=require_mock_symbols();var{InvalidArgumentError:g}=require_errors();var{buildURL:Q}=require_util();var u=class _MockScope{constructor(e){this[l]=e}delay(e){if(typeof e!=="number"||!Number.isInteger(e)||e<=0){throw new g("waitInMs must be a valid integer > 0")}this[l].delay=e;return this}persist(){this[l].persist=true;return this}times(e){if(typeof e!=="number"||!Number.isInteger(e)||e<=0){throw new g("repeatTimes must be a valid integer > 0")}this[l].times=e;return this}};__name(u,"MockScope");var E=u;var B=class _MockInterceptor{constructor(e,A){if(typeof e!=="object"){throw new g("opts must be an object")}if(typeof e.path==="undefined"){throw new g("opts.path must be defined")}if(typeof e.method==="undefined"){e.method="GET"}if(typeof e.path==="string"){if(e.query){e.path=Q(e.path,e.query)}else{const A=new URL(e.path,"data://");e.path=A.pathname+A.search}}if(typeof e.method==="string"){e.method=e.method.toUpperCase()}this[n]=r(e);this[s]=A;this[o]={};this[a]={};this[c]=false}createMockScopeDispatchData({statusCode:e,data:A,responseOptions:r}){const i=t(A);const s=this[c]?{"content-length":i.length}:{};const n={...this[o],...s,...r.headers};const l={...this[a],...r.trailers};return{statusCode:e,data:A,headers:n,trailers:l}}validateReplyParameters(e){if(typeof e.statusCode==="undefined"){throw new g("statusCode must be defined")}if(typeof e.responseOptions!=="object"||e.responseOptions===null){throw new g("responseOptions must be an object")}}reply(e){if(typeof e==="function"){const A=__name((A=>{const t=e(A);if(typeof t!=="object"||t===null){throw new g("reply options callback must return an object")}const r={data:"",responseOptions:{},...t};this.validateReplyParameters(r);return{...this.createMockScopeDispatchData(r)}}),"wrappedDefaultsCallback");const t=i(this[s],this[n],A);return new E(t)}const A={statusCode:e,data:arguments[1]===void 0?"":arguments[1],responseOptions:arguments[2]===void 0?{}:arguments[2]};this.validateReplyParameters(A);const t=this.createMockScopeDispatchData(A);const r=i(this[s],this[n],t);return new E(r)}replyWithError(e){if(typeof e==="undefined"){throw new g("error must be defined")}const A=i(this[s],this[n],{error:e});return new E(A)}defaultReplyHeaders(e){if(typeof e==="undefined"){throw new g("headers must be defined")}this[o]=e;return this}defaultReplyTrailers(e){if(typeof e==="undefined"){throw new g("trailers must be defined")}this[a]=e;return this}replyContentLength(){this[c]=true;return this}};__name(B,"MockInterceptor");var h=B;A.exports.MockInterceptor=h;A.exports.MockScope=E}});var require_mock_client=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/mock/mock-client.js"(e,A){"use strict";init_define_process();var{promisify:t}=__nccwpck_require__(837);var r=require_client();var{buildMockDispatch:i}=require_mock_utils();var{kDispatches:s,kMockAgent:n,kClose:o,kOriginalClose:a,kOrigin:c,kOriginalDispatch:l,kConnected:g}=require_mock_symbols();var{MockInterceptor:Q}=require_mock_interceptor();var u=require_symbols();var{InvalidArgumentError:E}=require_errors();var B=class _MockClient extends r{constructor(e,A){super(e,A);if(!A||!A.agent||typeof A.agent.dispatch!=="function"){throw new E("Argument opts.agent must implement Agent")}this[n]=A.agent;this[c]=e;this[s]=[];this[g]=1;this[l]=this.dispatch;this[a]=this.close.bind(this);this.dispatch=i.call(this);this.close=this[o]}get[u.kConnected](){return this[g]}intercept(e){return new Q(e,this[s])}async[o](){await t(this[a])();this[g]=0;this[n][u.kClients].delete(this[c])}};__name(B,"MockClient");var h=B;A.exports=h}});var require_mock_pool=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/mock/mock-pool.js"(e,A){"use strict";init_define_process();var{promisify:t}=__nccwpck_require__(837);var r=require_pool();var{buildMockDispatch:i}=require_mock_utils();var{kDispatches:s,kMockAgent:n,kClose:o,kOriginalClose:a,kOrigin:c,kOriginalDispatch:l,kConnected:g}=require_mock_symbols();var{MockInterceptor:Q}=require_mock_interceptor();var u=require_symbols();var{InvalidArgumentError:E}=require_errors();var B=class _MockPool extends r{constructor(e,A){super(e,A);if(!A||!A.agent||typeof A.agent.dispatch!=="function"){throw new E("Argument opts.agent must implement Agent")}this[n]=A.agent;this[c]=e;this[s]=[];this[g]=1;this[l]=this.dispatch;this[a]=this.close.bind(this);this.dispatch=i.call(this);this.close=this[o]}get[u.kConnected](){return this[g]}intercept(e){return new Q(e,this[s])}async[o](){await t(this[a])();this[g]=0;this[n][u.kClients].delete(this[c])}};__name(B,"MockPool");var h=B;A.exports=h}});var require_pluralizer=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/mock/pluralizer.js"(e,A){"use strict";init_define_process();var t={pronoun:"it",is:"is",was:"was",this:"this"};var r={pronoun:"they",is:"are",was:"were",this:"these"};var i;A.exports=(i=class{constructor(e,A){this.singular=e;this.plural=A}pluralize(e){const A=e===1;const i=A?t:r;const s=A?this.singular:this.plural;return{...i,count:e,noun:s}}},__name(i,"Pluralizer"),i)}});var require_pending_interceptors_formatter=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/mock/pending-interceptors-formatter.js"(e,A){"use strict";init_define_process();var{Transform:t}=__nccwpck_require__(781);var{Console:r}=__nccwpck_require__(206);var i=define_process_default.versions.icu?"✅":"Y ";var s=define_process_default.versions.icu?"❌":"N ";var n;A.exports=(n=class{constructor({disableColors:e}={}){this.transform=new t({transform(e,A,t){t(null,e)}});this.logger=new r({stdout:this.transform,inspectOptions:{colors:!e&&!define_process_default.env.CI}})}format(e){const A=e.map((({method:e,path:A,data:{statusCode:t},persist:r,times:n,timesInvoked:o,origin:a})=>({Method:e,Origin:a,Path:A,"Status code":t,Persistent:r?i:s,Invocations:o,Remaining:r?Infinity:n-o})));this.logger.table(A);return this.transform.read().toString()}},__name(n,"PendingInterceptorsFormatter"),n)}});var require_mock_agent=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/mock/mock-agent.js"(e,A){"use strict";init_define_process();var{kClients:t}=require_symbols();var r=require_agent();var{kAgent:i,kMockAgentSet:s,kMockAgentGet:n,kDispatches:o,kIsMockActive:a,kNetConnect:c,kGetNetConnect:l,kOptions:g,kFactory:Q}=require_mock_symbols();var u=require_mock_client();var E=require_mock_pool();var{matchValue:B,buildMockOptions:h}=require_mock_utils();var{InvalidArgumentError:C,UndiciError:I}=require_errors();var d=require_dispatcher();var f=require_pluralizer();var p=require_pending_interceptors_formatter();var m=class _MockAgent extends d{constructor(e){super(e);this[c]=true;this[a]=true;if(e?.agent&&typeof e.agent.dispatch!=="function"){throw new C("Argument opts.agent must implement Agent")}const A=e?.agent?e.agent:new r(e);this[i]=A;this[t]=A[t];this[g]=h(e)}get(e){let A=this[n](e);if(!A){A=this[Q](e);this[s](e,A)}return A}dispatch(e,A){this.get(e.origin);return this[i].dispatch(e,A)}async close(){await this[i].close();this[t].clear()}deactivate(){this[a]=false}activate(){this[a]=true}enableNetConnect(e){if(typeof e==="string"||typeof e==="function"||e instanceof RegExp){if(Array.isArray(this[c])){this[c].push(e)}else{this[c]=[e]}}else if(typeof e==="undefined"){this[c]=true}else{throw new C("Unsupported matcher. Must be one of String|Function|RegExp.")}}disableNetConnect(){this[c]=false}get isMockActive(){return this[a]}[s](e,A){this[t].set(e,A)}[Q](e){const A=Object.assign({agent:this},this[g]);return this[g]&&this[g].connections===1?new u(e,A):new E(e,A)}[n](e){const A=this[t].get(e);if(A){return A}if(typeof e!=="string"){const A=this[Q]("http://localhost:9999");this[s](e,A);return A}for(const[A,r]of Array.from(this[t])){if(r&&typeof A!=="string"&&B(A,e)){const A=this[Q](e);this[s](e,A);A[o]=r[o];return A}}}[l](){return this[c]}pendingInterceptors(){const e=this[t];return Array.from(e.entries()).flatMap((([e,A])=>A[o].map((A=>({...A,origin:e}))))).filter((({pending:e})=>e))}assertNoPendingInterceptors({pendingInterceptorsFormatter:e=new p}={}){const A=this.pendingInterceptors();if(A.length===0){return}const t=new f("interceptor","interceptors").pluralize(A.length);throw new I(`\n${t.count} ${t.noun} ${t.is} pending:\n\n${e.format(A)}\n`.trim())}};__name(m,"MockAgent");var _=m;A.exports=_}});var require_global2=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/global.js"(e,A){"use strict";init_define_process();var t=Symbol.for("undici.globalDispatcher.1");var{InvalidArgumentError:r}=require_errors();var i=require_agent();if(getGlobalDispatcher()===void 0){setGlobalDispatcher(new i)}function setGlobalDispatcher(e){if(!e||typeof e.dispatch!=="function"){throw new r("Argument agent must implement Agent")}Object.defineProperty(globalThis,t,{value:e,writable:true,enumerable:false,configurable:false})}__name(setGlobalDispatcher,"setGlobalDispatcher");function getGlobalDispatcher(){return globalThis[t]}__name(getGlobalDispatcher,"getGlobalDispatcher");A.exports={setGlobalDispatcher:setGlobalDispatcher,getGlobalDispatcher:getGlobalDispatcher}}});var require_decorator_handler=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/handler/decorator-handler.js"(e,A){"use strict";init_define_process();var t,r;A.exports=(r=class{constructor(e){__privateAdd(this,t,void 0);if(typeof e!=="object"||e===null){throw new TypeError("handler must be an object")}__privateSet(this,t,e)}onConnect(...e){return __privateGet(this,t).onConnect?.(...e)}onError(...e){return __privateGet(this,t).onError?.(...e)}onUpgrade(...e){return __privateGet(this,t).onUpgrade?.(...e)}onResponseStarted(...e){return __privateGet(this,t).onResponseStarted?.(...e)}onHeaders(...e){return __privateGet(this,t).onHeaders?.(...e)}onData(...e){return __privateGet(this,t).onData?.(...e)}onComplete(...e){return __privateGet(this,t).onComplete?.(...e)}onBodySent(...e){return __privateGet(this,t).onBodySent?.(...e)}},t=new WeakMap,__name(r,"DecoratorHandler"),r)}});var require_redirect=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/interceptor/redirect.js"(e,A){"use strict";init_define_process();var t=require_redirect_handler();A.exports=e=>{const A=e?.maxRedirections;return e=>__name((function redirectInterceptor(r,i){const{maxRedirections:s=A,...n}=r;if(!s){return e(r,i)}const o=new t(e,s,r,i);return e(n,o)}),"redirectInterceptor")}}});var require_retry=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/interceptor/retry.js"(e,A){"use strict";init_define_process();var t=require_retry_handler();A.exports=e=>A=>__name((function retryInterceptor(r,i){return A(r,new t({...r,retryOptions:{...e,...r.retryOptions}},{handler:i,dispatch:A}))}),"retryInterceptor")}});var require_dump=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/interceptor/dump.js"(e,A){"use strict";init_define_process();var t=require_util();var{InvalidArgumentError:r,RequestAbortedError:i}=require_errors();var s=require_decorator_handler();var n,o,a,c,l,g,Q,u,E;var B=class _DumpHandler extends s{constructor({maxSize:e},A){super(A);__privateAdd(this,u);__privateAdd(this,n,1024*1024);__privateAdd(this,o,null);__privateAdd(this,a,false);__privateAdd(this,c,false);__privateAdd(this,l,0);__privateAdd(this,g,null);__privateAdd(this,Q,null);if(e!=null&&(!Number.isFinite(e)||e<1)){throw new r("maxSize must be a number greater than 0")}__privateSet(this,n,e??__privateGet(this,n));__privateSet(this,Q,A)}onConnect(e){__privateSet(this,o,e);__privateGet(this,Q).onConnect(__privateMethod(this,u,E).bind(this))}onHeaders(e,A,r,s){const o=t.parseHeaders(A);const a=o["content-length"];if(a!=null&&a>__privateGet(this,n)){throw new i(`Response size (${a}) larger than maxSize (${__privateGet(this,n)})`)}if(__privateGet(this,c)){return true}return __privateGet(this,Q).onHeaders(e,A,r,s)}onError(e){if(__privateGet(this,a)){return}e=__privateGet(this,g)??e;__privateGet(this,Q).onError(e)}onData(e){__privateSet(this,l,__privateGet(this,l)+e.length);if(__privateGet(this,l)>=__privateGet(this,n)){__privateSet(this,a,true);if(__privateGet(this,c)){__privateGet(this,Q).onError(__privateGet(this,g))}else{__privateGet(this,Q).onComplete([])}}return true}onComplete(e){if(__privateGet(this,a)){return}if(__privateGet(this,c)){__privateGet(this,Q).onError(this.reason);return}__privateGet(this,Q).onComplete(e)}};n=new WeakMap;o=new WeakMap;a=new WeakMap;c=new WeakMap;l=new WeakMap;g=new WeakMap;Q=new WeakMap;u=new WeakSet;E=__name((function(e){__privateSet(this,c,true);__privateSet(this,g,e)}),"#customAbort");__name(B,"DumpHandler");var h=B;function createDumpInterceptor({maxSize:e}={maxSize:1024*1024}){return A=>__name((function Intercept(t,r){const{dumpMaxSize:i=e}=t;const s=new h({maxSize:i},r);return A(t,s)}),"Intercept")}__name(createDumpInterceptor,"createDumpInterceptor");A.exports=createDumpInterceptor}});var require_headers=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/headers.js"(e,A){"use strict";init_define_process();var{kConstruct:t}=require_symbols();var{kEnumerableProperty:r}=require_util();var{iteratorMixin:i,isValidHeaderName:s,isValidHeaderValue:n}=require_util2();var{webidl:o}=require_webidl();var a=__nccwpck_require__(491);var c=__nccwpck_require__(837);var l=Symbol("headers map");var g=Symbol("headers map sorted");function isHTTPWhiteSpaceCharCode(e){return e===10||e===13||e===9||e===32}__name(isHTTPWhiteSpaceCharCode,"isHTTPWhiteSpaceCharCode");function headerValueNormalize(e){let A=0;let t=e.length;while(t>A&&isHTTPWhiteSpaceCharCode(e.charCodeAt(t-1)))--t;while(t>A&&isHTTPWhiteSpaceCharCode(e.charCodeAt(A)))++A;return A===0&&t===e.length?e:e.substring(A,t)}__name(headerValueNormalize,"headerValueNormalize");function fill(e,A){if(Array.isArray(A)){for(let t=0;t>","record"]})}}__name(fill,"fill");function appendHeader(e,A,t){t=headerValueNormalize(t);if(!s(A)){throw o.errors.invalidArgument({prefix:"Headers.append",value:A,type:"header name"})}else if(!n(t)){throw o.errors.invalidArgument({prefix:"Headers.append",value:t,type:"header value"})}if(I(e)==="immutable"){throw new TypeError("immutable")}return f(e).append(A,t,false)}__name(appendHeader,"appendHeader");function compareHeaderName(e,A){return e[0]>1);if(A[o][0]<=c[0]){n=o+1}else{s=o}}if(r!==o){i=r;while(i>n){A[i]=A[--i]}A[n]=c}}if(!t.next().done){throw new TypeError("Unreachable")}return A}else{let e=0;for(const{0:t,1:{value:r}}of this[l]){A[e++]=[t,r];a(r!==null)}return A.sort(compareHeaderName)}}};__name(Q,"HeadersList");var u=Q;var E,B;var h=class _Headers{constructor(e=void 0){__privateAdd(this,E,void 0);__privateAdd(this,B,void 0);o.util.markAsUncloneable(this);if(e===t){return}__privateSet(this,B,new u);__privateSet(this,E,"none");if(e!==void 0){e=o.converters.HeadersInit(e,"Headers contructor","init");fill(this,e)}}append(e,A){o.brandCheck(this,_Headers);o.argumentLengthCheck(arguments,2,"Headers.append");const t="Headers.append";e=o.converters.ByteString(e,t,"name");A=o.converters.ByteString(A,t,"value");return appendHeader(this,e,A)}delete(e){o.brandCheck(this,_Headers);o.argumentLengthCheck(arguments,1,"Headers.delete");const A="Headers.delete";e=o.converters.ByteString(e,A,"name");if(!s(e)){throw o.errors.invalidArgument({prefix:"Headers.delete",value:e,type:"header name"})}if(__privateGet(this,E)==="immutable"){throw new TypeError("immutable")}if(!__privateGet(this,B).contains(e,false)){return}__privateGet(this,B).delete(e,false)}get(e){o.brandCheck(this,_Headers);o.argumentLengthCheck(arguments,1,"Headers.get");const A="Headers.get";e=o.converters.ByteString(e,A,"name");if(!s(e)){throw o.errors.invalidArgument({prefix:A,value:e,type:"header name"})}return __privateGet(this,B).get(e,false)}has(e){o.brandCheck(this,_Headers);o.argumentLengthCheck(arguments,1,"Headers.has");const A="Headers.has";e=o.converters.ByteString(e,A,"name");if(!s(e)){throw o.errors.invalidArgument({prefix:A,value:e,type:"header name"})}return __privateGet(this,B).contains(e,false)}set(e,A){o.brandCheck(this,_Headers);o.argumentLengthCheck(arguments,2,"Headers.set");const t="Headers.set";e=o.converters.ByteString(e,t,"name");A=o.converters.ByteString(A,t,"value");A=headerValueNormalize(A);if(!s(e)){throw o.errors.invalidArgument({prefix:t,value:e,type:"header name"})}else if(!n(A)){throw o.errors.invalidArgument({prefix:t,value:A,type:"header value"})}if(__privateGet(this,E)==="immutable"){throw new TypeError("immutable")}__privateGet(this,B).set(e,A,false)}getSetCookie(){o.brandCheck(this,_Headers);const e=__privateGet(this,B).cookies;if(e){return[...e]}return[]}get[g](){if(__privateGet(this,B)[g]){return __privateGet(this,B)[g]}const e=[];const A=__privateGet(this,B).toSortedArray();const t=__privateGet(this,B).cookies;if(t===null||t.length===1){return __privateGet(this,B)[g]=A}for(let r=0;r>"](e,A,t,r.bind(e))}return o.converters["record"](e,A,t)}throw o.errors.conversionFailed({prefix:"Headers constructor",argument:"Argument 1",types:["sequence>","record"]})};A.exports={fill:fill,compareHeaderName:compareHeaderName,Headers:C,HeadersList:u,getHeadersGuard:I,setHeadersGuard:d,setHeadersList:p,getHeadersList:f}}});var require_response=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/response.js"(e,A){"use strict";init_define_process();var{Headers:t,HeadersList:r,fill:i,getHeadersGuard:s,setHeadersGuard:n,setHeadersList:o}=require_headers();var{extractBody:a,cloneBody:c,mixinBody:l,hasFinalizationRegistry:g,streamRegistry:Q,bodyUnusable:u}=require_body();var E=require_util();var B=__nccwpck_require__(837);var{kEnumerableProperty:h}=E;var{isValidReasonPhrase:C,isCancelled:I,isAborted:d,isBlobLike:f,serializeJavascriptValueToJSONString:p,isErrorLike:m,isomorphicEncode:_,environmentSettingsObject:w}=require_util2();var{redirectStatusSet:y,nullBodyStatus:b}=require_constants3();var{kState:k,kHeaders:D}=require_symbols2();var{webidl:R}=require_webidl();var{FormData:v}=require_formdata();var{URLSerializer:S}=require_data_url();var{kConstruct:F}=require_symbols();var M=__nccwpck_require__(491);var{types:N}=__nccwpck_require__(837);var U=new TextEncoder("utf-8");var L=class _Response{static error(){const e=fromInnerResponse2(makeNetworkError2(),"immutable");return e}static json(e,A={}){R.argumentLengthCheck(arguments,1,"Response.json");if(A!==null){A=R.converters.ResponseInit(A)}const t=U.encode(p(e));const r=a(t);const i=fromInnerResponse2(makeResponse({}),"response");initializeResponse(i,A,{body:r[0],type:"application/json"});return i}static redirect(e,A=302){R.argumentLengthCheck(arguments,1,"Response.redirect");e=R.converters.USVString(e);A=R.converters["unsigned short"](A);let t;try{t=new URL(e,w.settingsObject.baseUrl)}catch(A){throw new TypeError(`Failed to parse URL from ${e}`,{cause:A})}if(!y.has(A)){throw new RangeError(`Invalid status code ${A}`)}const r=fromInnerResponse2(makeResponse({}),"immutable");r[k].status=A;const i=_(S(t));r[k].headersList.append("location",i,true);return r}constructor(e=null,A={}){R.util.markAsUncloneable(this);if(e===F){return}if(e!==null){e=R.converters.BodyInit(e)}A=R.converters.ResponseInit(A);this[k]=makeResponse({});this[D]=new t(F);n(this[D],"response");o(this[D],this[k].headersList);let r=null;if(e!=null){const[A,t]=a(e);r={body:A,type:t}}initializeResponse(this,A,r)}get type(){R.brandCheck(this,_Response);return this[k].type}get url(){R.brandCheck(this,_Response);const e=this[k].urlList;const A=e[e.length-1]??null;if(A===null){return""}return S(A,true)}get redirected(){R.brandCheck(this,_Response);return this[k].urlList.length>1}get status(){R.brandCheck(this,_Response);return this[k].status}get ok(){R.brandCheck(this,_Response);return this[k].status>=200&&this[k].status<=299}get statusText(){R.brandCheck(this,_Response);return this[k].statusText}get headers(){R.brandCheck(this,_Response);return this[D]}get body(){R.brandCheck(this,_Response);return this[k].body?this[k].body.stream:null}get bodyUsed(){R.brandCheck(this,_Response);return!!this[k].body&&E.isDisturbed(this[k].body.stream)}clone(){R.brandCheck(this,_Response);if(u(this)){throw R.errors.exception({header:"Response.clone",message:"Body has already been consumed."})}const e=cloneResponse(this[k]);return fromInnerResponse2(e,s(this[D]))}[B.inspect.custom](e,A){if(A.depth===null){A.depth=2}A.colors??=true;const t={status:this.status,statusText:this.statusText,headers:this.headers,body:this.body,bodyUsed:this.bodyUsed,ok:this.ok,redirected:this.redirected,type:this.type,url:this.url};return`Response ${B.formatWithOptions(A,t)}`}};__name(L,"Response");var T=L;l(T);Object.defineProperties(T.prototype,{type:h,url:h,status:h,ok:h,redirected:h,statusText:h,headers:h,clone:h,body:h,bodyUsed:h,[Symbol.toStringTag]:{value:"Response",configurable:true}});Object.defineProperties(T,{json:h,redirect:h,error:h});function cloneResponse(e){if(e.internalResponse){return filterResponse(cloneResponse(e.internalResponse),e.type)}const A=makeResponse({...e,body:null});if(e.body!=null){A.body=c(A,e.body)}return A}__name(cloneResponse,"cloneResponse");function makeResponse(e){return{aborted:false,rangeRequested:false,timingAllowPassed:false,requestIncludesCredentials:false,type:"default",status:200,timingInfo:null,cacheState:"",statusText:"",...e,headersList:e?.headersList?new r(e?.headersList):new r,urlList:e?.urlList?[...e.urlList]:[]}}__name(makeResponse,"makeResponse");function makeNetworkError2(e){const A=m(e);return makeResponse({type:"error",status:0,error:A?e:new Error(e?String(e):e),aborted:e&&e.name==="AbortError"})}__name(makeNetworkError2,"makeNetworkError");function isNetworkError(e){return e.type==="error"&&e.status===0}__name(isNetworkError,"isNetworkError");function makeFilteredResponse(e,A){A={internalResponse:e,...A};return new Proxy(e,{get(e,t){return t in A?A[t]:e[t]},set(e,t,r){M(!(t in A));e[t]=r;return true}})}__name(makeFilteredResponse,"makeFilteredResponse");function filterResponse(e,A){if(A==="basic"){return makeFilteredResponse(e,{type:"basic",headersList:e.headersList})}else if(A==="cors"){return makeFilteredResponse(e,{type:"cors",headersList:e.headersList})}else if(A==="opaque"){return makeFilteredResponse(e,{type:"opaque",urlList:Object.freeze([]),status:0,statusText:"",body:null})}else if(A==="opaqueredirect"){return makeFilteredResponse(e,{type:"opaqueredirect",status:0,statusText:"",headersList:[],body:null})}else{M(false)}}__name(filterResponse,"filterResponse");function makeAppropriateNetworkError(e,A=null){M(I(e));return d(e)?makeNetworkError2(Object.assign(new DOMException("The operation was aborted.","AbortError"),{cause:A})):makeNetworkError2(Object.assign(new DOMException("Request was cancelled."),{cause:A}))}__name(makeAppropriateNetworkError,"makeAppropriateNetworkError");function initializeResponse(e,A,t){if(A.status!==null&&(A.status<200||A.status>599)){throw new RangeError('init["status"] must be in the range of 200 to 599, inclusive.')}if("statusText"in A&&A.statusText!=null){if(!C(String(A.statusText))){throw new TypeError("Invalid statusText")}}if("status"in A&&A.status!=null){e[k].status=A.status}if("statusText"in A&&A.statusText!=null){e[k].statusText=A.statusText}if("headers"in A&&A.headers!=null){i(e[D],A.headers)}if(t){if(b.includes(e.status)){throw R.errors.exception({header:"Response constructor",message:`Invalid response status code ${e.status}`})}e[k].body=t.body;if(t.type!=null&&!e[k].headersList.contains("content-type",true)){e[k].headersList.append("content-type",t.type,true)}}}__name(initializeResponse,"initializeResponse");function fromInnerResponse2(e,A){const r=new T(F);r[k]=e;r[D]=new t(F);o(r[D],e.headersList);n(r[D],A);if(g&&e.body?.stream){Q.register(r,new WeakRef(e.body.stream))}return r}__name(fromInnerResponse2,"fromInnerResponse");R.converters.ReadableStream=R.interfaceConverter(ReadableStream);R.converters.FormData=R.interfaceConverter(v);R.converters.URLSearchParams=R.interfaceConverter(URLSearchParams);R.converters.XMLHttpRequestBodyInit=function(e,A,t){if(typeof e==="string"){return R.converters.USVString(e,A,t)}if(f(e)){return R.converters.Blob(e,A,t,{strict:false})}if(ArrayBuffer.isView(e)||N.isArrayBuffer(e)){return R.converters.BufferSource(e,A,t)}if(E.isFormDataLike(e)){return R.converters.FormData(e,A,t,{strict:false})}if(e instanceof URLSearchParams){return R.converters.URLSearchParams(e,A,t)}return R.converters.DOMString(e,A,t)};R.converters.BodyInit=function(e,A,t){if(e instanceof ReadableStream){return R.converters.ReadableStream(e,A,t)}if(e?.[Symbol.asyncIterator]){return e}return R.converters.XMLHttpRequestBodyInit(e,A,t)};R.converters.ResponseInit=R.dictionaryConverter([{key:"status",converter:R.converters["unsigned short"],defaultValue:()=>200},{key:"statusText",converter:R.converters.ByteString,defaultValue:()=>""},{key:"headers",converter:R.converters.HeadersInit}]);A.exports={isNetworkError:isNetworkError,makeNetworkError:makeNetworkError2,makeResponse:makeResponse,makeAppropriateNetworkError:makeAppropriateNetworkError,filterResponse:filterResponse,Response:T,cloneResponse:cloneResponse,fromInnerResponse:fromInnerResponse2}}});var require_dispatcher_weakref=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/dispatcher-weakref.js"(e,A){"use strict";init_define_process();var{kConnected:t,kSize:r}=require_symbols();var i=class _CompatWeakRef{constructor(e){this.value=e}deref(){return this.value[t]===0&&this.value[r]===0?void 0:this.value}};__name(i,"CompatWeakRef");var s=i;var n=class _CompatFinalizer{constructor(e){this.finalizer=e}register(e,A){if(e.on){e.on("disconnect",(()=>{if(e[t]===0&&e[r]===0){this.finalizer(A)}}))}}unregister(e){}};__name(n,"CompatFinalizer");var o=n;A.exports=function(){if(define_process_default.env.NODE_V8_COVERAGE&&define_process_default.version.startsWith("v18")){define_process_default._rawDebug("Using compatibility WeakRef and FinalizationRegistry");return{WeakRef:s,FinalizationRegistry:o}}return{WeakRef:WeakRef,FinalizationRegistry:FinalizationRegistry}}}});var require_request=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/request.js"(e,A){"use strict";init_define_process();var{extractBody:t,mixinBody:r,cloneBody:i,bodyUnusable:s}=require_body();var{Headers:n,fill:o,HeadersList:a,setHeadersGuard:c,getHeadersGuard:l,setHeadersList:g,getHeadersList:Q}=require_headers();var{FinalizationRegistry:u}=require_dispatcher_weakref()();var E=require_util();var B=__nccwpck_require__(837);var{isValidHTTPToken:h,sameOrigin:C,environmentSettingsObject:I}=require_util2();var{forbiddenMethodsSet:d,corsSafeListedMethodsSet:f,referrerPolicy:p,requestRedirect:m,requestMode:_,requestCredentials:w,requestCache:y,requestDuplex:b}=require_constants3();var{kEnumerableProperty:k,normalizedMethodRecordsBase:D,normalizedMethodRecords:R}=E;var{kHeaders:v,kSignal:S,kState:F,kDispatcher:M}=require_symbols2();var{webidl:N}=require_webidl();var{URLSerializer:U}=require_data_url();var{kConstruct:L}=require_symbols();var T=__nccwpck_require__(491);var{getMaxListeners:G,setMaxListeners:H,getEventListeners:Y,defaultMaxListeners:J}=__nccwpck_require__(361);var q=Symbol("abortController");var x=new u((({signal:e,abort:A})=>{e.removeEventListener("abort",A)}));var V=new WeakMap;function buildAbort(e){return abort;function abort(){const A=e.deref();if(A!==void 0){x.unregister(abort);this.removeEventListener("abort",abort);A.abort(this.reason);const e=V.get(A.signal);if(e!==void 0){if(e.size!==0){for(const A of e){const e=A.deref();if(e!==void 0){e.abort(this.reason)}}e.clear()}V.delete(A.signal)}}}__name(abort,"abort")}__name(buildAbort,"buildAbort");var W=false;var O=class _Request2{constructor(e,A={}){N.util.markAsUncloneable(this);if(e===L){return}const r="Request constructor";N.argumentLengthCheck(arguments,1,r);e=N.converters.RequestInfo(e,r,"input");A=N.converters.RequestInit(A,r,"init");let i=null;let l=null;const u=I.settingsObject.baseUrl;let B=null;if(typeof e==="string"){this[M]=A.dispatcher;let t;try{t=new URL(e,u)}catch(A){throw new TypeError("Failed to parse URL from "+e,{cause:A})}if(t.username||t.password){throw new TypeError("Request cannot be constructed from a URL that includes credentials: "+e)}i=makeRequest({urlList:[t]});l="cors"}else{this[M]=A.dispatcher||e[M];T(e instanceof _Request2);i=e[F];B=e[S]}const p=I.settingsObject.origin;let m="client";if(i.window?.constructor?.name==="EnvironmentSettingsObject"&&C(i.window,p)){m=i.window}if(A.window!=null){throw new TypeError(`'window' option '${m}' must be null`)}if("window"in A){m="no-window"}i=makeRequest({method:i.method,headersList:i.headersList,unsafeRequest:i.unsafeRequest,client:I.settingsObject,window:m,priority:i.priority,origin:i.origin,referrer:i.referrer,referrerPolicy:i.referrerPolicy,mode:i.mode,credentials:i.credentials,cache:i.cache,redirect:i.redirect,integrity:i.integrity,keepalive:i.keepalive,reloadNavigation:i.reloadNavigation,historyNavigation:i.historyNavigation,urlList:[...i.urlList]});const _=Object.keys(A).length!==0;if(_){if(i.mode==="navigate"){i.mode="same-origin"}i.reloadNavigation=false;i.historyNavigation=false;i.origin="client";i.referrer="client";i.referrerPolicy="";i.url=i.urlList[i.urlList.length-1];i.urlList=[i.url]}if(A.referrer!==void 0){const e=A.referrer;if(e===""){i.referrer="no-referrer"}else{let A;try{A=new URL(e,u)}catch(A){throw new TypeError(`Referrer "${e}" is not a valid URL.`,{cause:A})}if(A.protocol==="about:"&&A.hostname==="client"||p&&!C(A,I.settingsObject.baseUrl)){i.referrer="client"}else{i.referrer=A}}}if(A.referrerPolicy!==void 0){i.referrerPolicy=A.referrerPolicy}let w;if(A.mode!==void 0){w=A.mode}else{w=l}if(w==="navigate"){throw N.errors.exception({header:"Request constructor",message:"invalid request mode navigate."})}if(w!=null){i.mode=w}if(A.credentials!==void 0){i.credentials=A.credentials}if(A.cache!==void 0){i.cache=A.cache}if(i.cache==="only-if-cached"&&i.mode!=="same-origin"){throw new TypeError("'only-if-cached' can be set only with 'same-origin' mode")}if(A.redirect!==void 0){i.redirect=A.redirect}if(A.integrity!=null){i.integrity=String(A.integrity)}if(A.keepalive!==void 0){i.keepalive=Boolean(A.keepalive)}if(A.method!==void 0){let e=A.method;const t=R[e];if(t!==void 0){i.method=t}else{if(!h(e)){throw new TypeError(`'${e}' is not a valid HTTP method.`)}const A=e.toUpperCase();if(d.has(A)){throw new TypeError(`'${e}' HTTP method is unsupported.`)}e=D[A]??e;i.method=e}if(!W&&i.method==="patch"){define_process_default.emitWarning("Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.",{code:"UNDICI-FETCH-patch"});W=true}}if(A.signal!==void 0){B=A.signal}this[F]=i;const y=new AbortController;this[S]=y.signal;if(B!=null){if(!B||typeof B.aborted!=="boolean"||typeof B.addEventListener!=="function"){throw new TypeError("Failed to construct 'Request': member signal is not of type AbortSignal.")}if(B.aborted){y.abort(B.reason)}else{this[q]=y;const e=new WeakRef(y);const A=buildAbort(e);try{if(typeof G==="function"&&G(B)===J){H(1500,B)}else if(Y(B,"abort").length>=J){H(1500,B)}}catch{}E.addAbortListener(B,A);x.register(y,{signal:B,abort:A},A)}}this[v]=new n(L);g(this[v],i.headersList);c(this[v],"request");if(w==="no-cors"){if(!f.has(i.method)){throw new TypeError(`'${i.method} is unsupported in no-cors mode.`)}c(this[v],"request-no-cors")}if(_){const e=Q(this[v]);const t=A.headers!==void 0?A.headers:new a(e);e.clear();if(t instanceof a){for(const{name:A,value:r}of t.rawValues()){e.append(A,r,false)}e.cookies=t.cookies}else{o(this[v],t)}}const b=e instanceof _Request2?e[F].body:null;if((A.body!=null||b!=null)&&(i.method==="GET"||i.method==="HEAD")){throw new TypeError("Request with GET/HEAD method cannot have body.")}let k=null;if(A.body!=null){const[e,r]=t(A.body,i.keepalive);k=e;if(r&&!Q(this[v]).contains("content-type",true)){this[v].append("content-type",r)}}const U=k??b;if(U!=null&&U.source==null){if(k!=null&&A.duplex==null){throw new TypeError("RequestInit: duplex option is required when sending a body.")}if(i.mode!=="same-origin"&&i.mode!=="cors"){throw new TypeError('If request is made from ReadableStream, mode should be "same-origin" or "cors"')}i.useCORSPreflightFlag=true}let V=U;if(k==null&&b!=null){if(s(e)){throw new TypeError("Cannot construct a Request with a Request object that has already been used.")}const A=new TransformStream;b.stream.pipeThrough(A);V={source:b.source,length:b.length,stream:A.readable}}this[F].body=V}get method(){N.brandCheck(this,_Request2);return this[F].method}get url(){N.brandCheck(this,_Request2);return U(this[F].url)}get headers(){N.brandCheck(this,_Request2);return this[v]}get destination(){N.brandCheck(this,_Request2);return this[F].destination}get referrer(){N.brandCheck(this,_Request2);if(this[F].referrer==="no-referrer"){return""}if(this[F].referrer==="client"){return"about:client"}return this[F].referrer.toString()}get referrerPolicy(){N.brandCheck(this,_Request2);return this[F].referrerPolicy}get mode(){N.brandCheck(this,_Request2);return this[F].mode}get credentials(){return this[F].credentials}get cache(){N.brandCheck(this,_Request2);return this[F].cache}get redirect(){N.brandCheck(this,_Request2);return this[F].redirect}get integrity(){N.brandCheck(this,_Request2);return this[F].integrity}get keepalive(){N.brandCheck(this,_Request2);return this[F].keepalive}get isReloadNavigation(){N.brandCheck(this,_Request2);return this[F].reloadNavigation}get isHistoryNavigation(){N.brandCheck(this,_Request2);return this[F].historyNavigation}get signal(){N.brandCheck(this,_Request2);return this[S]}get body(){N.brandCheck(this,_Request2);return this[F].body?this[F].body.stream:null}get bodyUsed(){N.brandCheck(this,_Request2);return!!this[F].body&&E.isDisturbed(this[F].body.stream)}get duplex(){N.brandCheck(this,_Request2);return"half"}clone(){N.brandCheck(this,_Request2);if(s(this)){throw new TypeError("unusable")}const e=cloneRequest(this[F]);const A=new AbortController;if(this.signal.aborted){A.abort(this.signal.reason)}else{let e=V.get(this.signal);if(e===void 0){e=new Set;V.set(this.signal,e)}const t=new WeakRef(A);e.add(t);E.addAbortListener(A.signal,buildAbort(t))}return fromInnerRequest(e,A.signal,l(this[v]))}[B.inspect.custom](e,A){if(A.depth===null){A.depth=2}A.colors??=true;const t={method:this.method,url:this.url,headers:this.headers,destination:this.destination,referrer:this.referrer,referrerPolicy:this.referrerPolicy,mode:this.mode,credentials:this.credentials,cache:this.cache,redirect:this.redirect,integrity:this.integrity,keepalive:this.keepalive,isReloadNavigation:this.isReloadNavigation,isHistoryNavigation:this.isHistoryNavigation,signal:this.signal};return`Request ${B.formatWithOptions(A,t)}`}};__name(O,"Request");var P=O;r(P);function makeRequest(e){return{method:e.method??"GET",localURLsOnly:e.localURLsOnly??false,unsafeRequest:e.unsafeRequest??false,body:e.body??null,client:e.client??null,reservedClient:e.reservedClient??null,replacesClientId:e.replacesClientId??"",window:e.window??"client",keepalive:e.keepalive??false,serviceWorkers:e.serviceWorkers??"all",initiator:e.initiator??"",destination:e.destination??"",priority:e.priority??null,origin:e.origin??"client",policyContainer:e.policyContainer??"client",referrer:e.referrer??"client",referrerPolicy:e.referrerPolicy??"",mode:e.mode??"no-cors",useCORSPreflightFlag:e.useCORSPreflightFlag??false,credentials:e.credentials??"same-origin",useCredentials:e.useCredentials??false,cache:e.cache??"default",redirect:e.redirect??"follow",integrity:e.integrity??"",cryptoGraphicsNonceMetadata:e.cryptoGraphicsNonceMetadata??"",parserMetadata:e.parserMetadata??"",reloadNavigation:e.reloadNavigation??false,historyNavigation:e.historyNavigation??false,userActivation:e.userActivation??false,taintedOrigin:e.taintedOrigin??false,redirectCount:e.redirectCount??0,responseTainting:e.responseTainting??"basic",preventNoCacheCacheControlHeaderModification:e.preventNoCacheCacheControlHeaderModification??false,done:e.done??false,timingAllowFailed:e.timingAllowFailed??false,urlList:e.urlList,url:e.urlList[0],headersList:e.headersList?new a(e.headersList):new a}}__name(makeRequest,"makeRequest");function cloneRequest(e){const A=makeRequest({...e,body:null});if(e.body!=null){A.body=i(A,e.body)}return A}__name(cloneRequest,"cloneRequest");function fromInnerRequest(e,A,t){const r=new P(L);r[F]=e;r[S]=A;r[v]=new n(L);g(r[v],e.headersList);c(r[v],t);return r}__name(fromInnerRequest,"fromInnerRequest");Object.defineProperties(P.prototype,{method:k,url:k,headers:k,redirect:k,clone:k,signal:k,duplex:k,destination:k,body:k,bodyUsed:k,isHistoryNavigation:k,isReloadNavigation:k,keepalive:k,integrity:k,cache:k,credentials:k,attribute:k,referrerPolicy:k,referrer:k,mode:k,[Symbol.toStringTag]:{value:"Request",configurable:true}});N.converters.Request=N.interfaceConverter(P);N.converters.RequestInfo=function(e,A,t){if(typeof e==="string"){return N.converters.USVString(e,A,t)}if(e instanceof P){return N.converters.Request(e,A,t)}return N.converters.USVString(e,A,t)};N.converters.AbortSignal=N.interfaceConverter(AbortSignal);N.converters.RequestInit=N.dictionaryConverter([{key:"method",converter:N.converters.ByteString},{key:"headers",converter:N.converters.HeadersInit},{key:"body",converter:N.nullableConverter(N.converters.BodyInit)},{key:"referrer",converter:N.converters.USVString},{key:"referrerPolicy",converter:N.converters.DOMString,allowedValues:p},{key:"mode",converter:N.converters.DOMString,allowedValues:_},{key:"credentials",converter:N.converters.DOMString,allowedValues:w},{key:"cache",converter:N.converters.DOMString,allowedValues:y},{key:"redirect",converter:N.converters.DOMString,allowedValues:m},{key:"integrity",converter:N.converters.DOMString},{key:"keepalive",converter:N.converters.boolean},{key:"signal",converter:N.nullableConverter((e=>N.converters.AbortSignal(e,"RequestInit","signal",{strict:false})))},{key:"window",converter:N.converters.any},{key:"duplex",converter:N.converters.DOMString,allowedValues:b},{key:"dispatcher",converter:N.converters.any}]);A.exports={Request:P,makeRequest:makeRequest,fromInnerRequest:fromInnerRequest,cloneRequest:cloneRequest}}});var require_fetch=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fetch/index.js"(e,A){"use strict";init_define_process();var{makeNetworkError:t,makeAppropriateNetworkError:r,filterResponse:i,makeResponse:s,fromInnerResponse:n}=require_response();var{HeadersList:o}=require_headers();var{Request:a,cloneRequest:c}=require_request();var l=__nccwpck_require__(796);var{bytesMatch:g,makePolicyContainer:Q,clonePolicyContainer:u,requestBadPort:E,TAOCheck:B,appendRequestOriginHeader:h,responseLocationURL:C,requestCurrentURL:I,setRequestReferrerPolicyOnRedirect:d,tryUpgradeRequestToAPotentiallyTrustworthyURL:f,createOpaqueTimingInfo:p,appendFetchMetadata:m,corsCheck:_,crossOriginResourcePolicyCheck:w,determineRequestsReferrer:y,coarsenedSharedCurrentTime:b,createDeferredPromise:k,isBlobLike:D,sameOrigin:R,isCancelled:v,isAborted:S,isErrorLike:F,fullyReadBody:M,readableStreamClose:N,isomorphicEncode:U,urlIsLocal:L,urlIsHttpHttpsScheme:T,urlHasHttpsScheme:G,clampAndCoarsenConnectionTimingInfo:H,simpleRangeHeaderValue:Y,buildContentRange:J,createInflate:q,extractMimeType:x}=require_util2();var{kState:V,kDispatcher:W}=require_symbols2();var O=__nccwpck_require__(491);var{safelyExtractBody:P,extractBody:j}=require_body();var{redirectStatusSet:Z,nullBodyStatus:z,safeMethodsSet:K,requestBodyHeader:X,subresourceSet:$}=require_constants3();var ee=__nccwpck_require__(361);var{Readable:Ae,pipeline:te,finished:re}=__nccwpck_require__(781);var{addAbortListener:ie,isErrored:se,isReadable:ne,bufferToLowerCasedHeaderName:oe}=require_util();var{dataURLProcessor:ae,serializeAMimeType:ce,minimizeSupportedMimeType:le}=require_data_url();var{getGlobalDispatcher:ge}=require_global2();var{webidl:Qe}=require_webidl();var{STATUS_CODES:ue}=__nccwpck_require__(685);var Ee=["GET","HEAD"];var Be=typeof __UNDICI_IS_NODE__!=="undefined"||typeof esbuildDetection!=="undefined"?"node":"undici";var he;var Ce=class _Fetch extends ee{constructor(e){super();this.dispatcher=e;this.connection=null;this.dump=false;this.state="ongoing"}terminate(e){if(this.state!=="ongoing"){return}this.state="terminated";this.connection?.destroy(e);this.emit("terminated",e)}abort(e){if(this.state!=="ongoing"){return}this.state="aborted";if(!e){e=new DOMException("The operation was aborted.","AbortError")}this.serializedAbortReason=e;this.connection?.destroy(e);this.emit("terminated",e)}};__name(Ce,"Fetch");var Ie=Ce;function handleFetchDone(e){finalizeAndReportTiming(e,"fetch")}__name(handleFetchDone,"handleFetchDone");function fetch2(e,A=void 0){Qe.argumentLengthCheck(arguments,1,"globalThis.fetch");let t=k();let r;try{r=new a(e,A)}catch(e){t.reject(e);return t.promise}const i=r[V];if(r.signal.aborted){abortFetch(t,i,null,r.signal.reason);return t.promise}const s=i.client.globalObject;if(s?.constructor?.name==="ServiceWorkerGlobalScope"){i.serviceWorkers="none"}let o=null;let c=false;let l=null;ie(r.signal,(()=>{c=true;O(l!=null);l.abort(r.signal.reason);const e=o?.deref();abortFetch(t,i,e,r.signal.reason)}));const g=__name((e=>{if(c){return}if(e.aborted){abortFetch(t,i,o,l.serializedAbortReason);return}if(e.type==="error"){t.reject(new TypeError("fetch failed",{cause:e.error}));return}o=new WeakRef(n(e,"immutable"));t.resolve(o.deref());t=null}),"processResponse");l=fetching({request:i,processResponseEndOfBody:handleFetchDone,processResponse:g,dispatcher:r[W]});return t.promise}__name(fetch2,"fetch");function finalizeAndReportTiming(e,A="other"){if(e.type==="error"&&e.aborted){return}if(!e.urlList?.length){return}const t=e.urlList[0];let r=e.timingInfo;let i=e.cacheState;if(!T(t)){return}if(r===null){return}if(!e.timingAllowPassed){r=p({startTime:r.startTime});i=""}r.endTime=b();e.timingInfo=r;de(r,t.href,A,globalThis,i)}__name(finalizeAndReportTiming,"finalizeAndReportTiming");var de=performance.markResourceTiming;function abortFetch(e,A,t,r){if(e){e.reject(r)}if(A.body!=null&&ne(A.body?.stream)){A.body.stream.cancel(r).catch((e=>{if(e.code==="ERR_INVALID_STATE"){return}throw e}))}if(t==null){return}const i=t[V];if(i.body!=null&&ne(i.body?.stream)){i.body.stream.cancel(r).catch((e=>{if(e.code==="ERR_INVALID_STATE"){return}throw e}))}}__name(abortFetch,"abortFetch");function fetching({request:e,processRequestBodyChunkLength:A,processRequestEndOfBody:t,processResponse:r,processResponseEndOfBody:i,processResponseConsumeBody:s,useParallelQueue:n=false,dispatcher:o=ge()}){O(o);let a=null;let c=false;if(e.client!=null){a=e.client.globalObject;c=e.client.crossOriginIsolatedCapability}const l=b(c);const g=p({startTime:l});const E={controller:new Ie(o),request:e,timingInfo:g,processRequestBodyChunkLength:A,processRequestEndOfBody:t,processResponse:r,processResponseConsumeBody:s,processResponseEndOfBody:i,taskDestination:a,crossOriginIsolatedCapability:c};O(!e.body||e.body.stream);if(e.window==="client"){e.window=e.client?.globalObject?.constructor?.name==="Window"?e.client:"no-window"}if(e.origin==="client"){e.origin=e.client.origin}if(e.policyContainer==="client"){if(e.client!=null){e.policyContainer=u(e.client.policyContainer)}else{e.policyContainer=Q()}}if(!e.headersList.contains("accept",true)){const A="*/*";e.headersList.append("accept",A,true)}if(!e.headersList.contains("accept-language",true)){e.headersList.append("accept-language","*",true)}if(e.priority===null){}if($.has(e.destination)){}mainFetch(E).catch((e=>{E.controller.terminate(e)}));return E.controller}__name(fetching,"fetching");async function mainFetch(e,A=false){const r=e.request;let s=null;if(r.localURLsOnly&&!L(I(r))){s=t("local URLs only")}f(r);if(E(r)==="blocked"){s=t("bad port")}if(r.referrerPolicy===""){r.referrerPolicy=r.policyContainer.referrerPolicy}if(r.referrer!=="no-referrer"){r.referrer=y(r)}if(s===null){s=await(async()=>{const A=I(r);if(R(A,r.url)&&r.responseTainting==="basic"||A.protocol==="data:"||(r.mode==="navigate"||r.mode==="websocket")){r.responseTainting="basic";return await schemeFetch(e)}if(r.mode==="same-origin"){return t('request mode cannot be "same-origin"')}if(r.mode==="no-cors"){if(r.redirect!=="follow"){return t('redirect mode cannot be "follow" for "no-cors" request')}r.responseTainting="opaque";return await schemeFetch(e)}if(!T(I(r))){return t("URL scheme must be a HTTP(S) scheme")}r.responseTainting="cors";return await httpFetch(e)})()}if(A){return s}if(s.status!==0&&!s.internalResponse){if(r.responseTainting==="cors"){}if(r.responseTainting==="basic"){s=i(s,"basic")}else if(r.responseTainting==="cors"){s=i(s,"cors")}else if(r.responseTainting==="opaque"){s=i(s,"opaque")}else{O(false)}}let n=s.status===0?s:s.internalResponse;if(n.urlList.length===0){n.urlList.push(...r.urlList)}if(!r.timingAllowFailed){s.timingAllowPassed=true}if(s.type==="opaque"&&n.status===206&&n.rangeRequested&&!r.headers.contains("range",true)){s=n=t()}if(s.status!==0&&(r.method==="HEAD"||r.method==="CONNECT"||z.includes(n.status))){n.body=null;e.controller.dump=true}if(r.integrity){const A=__name((A=>fetchFinale(e,t(A))),"processBodyError");if(r.responseTainting==="opaque"||s.body==null){A(s.error);return}const i=__name((t=>{if(!g(t,r.integrity)){A("integrity mismatch");return}s.body=P(t)[0];fetchFinale(e,s)}),"processBody");await M(s.body,i,A)}else{fetchFinale(e,s)}}__name(mainFetch,"mainFetch");function schemeFetch(e){if(v(e)&&e.request.redirectCount===0){return Promise.resolve(r(e))}const{request:A}=e;const{protocol:i}=I(A);switch(i){case"about:":{return Promise.resolve(t("about scheme is not supported"))}case"blob:":{if(!he){he=__nccwpck_require__(300).resolveObjectURL}const e=I(A);if(e.search.length!==0){return Promise.resolve(t("NetworkError when attempting to fetch resource."))}const r=he(e.toString());if(A.method!=="GET"||!D(r)){return Promise.resolve(t("invalid method"))}const i=s();const n=r.size;const o=U(`${n}`);const a=r.type;if(!A.headersList.contains("range",true)){const e=j(r);i.statusText="OK";i.body=e[0];i.headersList.set("content-length",o,true);i.headersList.set("content-type",a,true)}else{i.rangeRequested=true;const e=A.headersList.get("range",true);const s=Y(e,true);if(s==="failure"){return Promise.resolve(t("failed to fetch the data URL"))}let{rangeStartValue:o,rangeEndValue:c}=s;if(o===null){o=n-c;c=o+c-1}else{if(o>=n){return Promise.resolve(t("Range start is greater than the blob's size."))}if(c===null||c>=n){c=n-1}}const l=r.slice(o,c,a);const g=j(l);i.body=g[0];const Q=U(`${l.size}`);const u=J(o,c,n);i.status=206;i.statusText="Partial Content";i.headersList.set("content-length",Q,true);i.headersList.set("content-type",a,true);i.headersList.set("content-range",u,true)}return Promise.resolve(i)}case"data:":{const e=I(A);const r=ae(e);if(r==="failure"){return Promise.resolve(t("failed to fetch the data URL"))}const i=ce(r.mimeType);return Promise.resolve(s({statusText:"OK",headersList:[["content-type",{name:"Content-Type",value:i}]],body:P(r.body)[0]}))}case"file:":{return Promise.resolve(t("not implemented... yet..."))}case"http:":case"https:":{return httpFetch(e).catch((e=>t(e)))}default:{return Promise.resolve(t("unknown scheme"))}}}__name(schemeFetch,"schemeFetch");function finalizeResponse(e,A){e.request.done=true;if(e.processResponseDone!=null){queueMicrotask((()=>e.processResponseDone(A)))}}__name(finalizeResponse,"finalizeResponse");function fetchFinale(e,A){let t=e.timingInfo;const r=__name((()=>{const r=Date.now();if(e.request.destination==="document"){e.controller.fullTimingInfo=t}e.controller.reportTimingSteps=()=>{if(e.request.url.protocol!=="https:"){return}t.endTime=r;let i=A.cacheState;const s=A.bodyInfo;if(!A.timingAllowPassed){t=p(t);i=""}let n=0;if(e.request.mode!=="navigator"||!A.hasCrossOriginRedirects){n=A.status;const e=x(A.headersList);if(e!=="failure"){s.contentType=le(e)}}if(e.request.initiatorType!=null){de(t,e.request.url.href,e.request.initiatorType,globalThis,i,s,n)}};const i=__name((()=>{e.request.done=true;if(e.processResponseEndOfBody!=null){queueMicrotask((()=>e.processResponseEndOfBody(A)))}if(e.request.initiatorType!=null){e.controller.reportTimingSteps()}}),"processResponseEndOfBodyTask");queueMicrotask((()=>i()))}),"processResponseEndOfBody");if(e.processResponse!=null){queueMicrotask((()=>{e.processResponse(A);e.processResponse=null}))}const i=A.type==="error"?A:A.internalResponse??A;if(i.body==null){r()}else{re(i.body.stream,(()=>{r()}))}}__name(fetchFinale,"fetchFinale");async function httpFetch(e){const A=e.request;let r=null;let i=null;const s=e.timingInfo;if(A.serviceWorkers==="all"){}if(r===null){if(A.redirect==="follow"){A.serviceWorkers="none"}i=r=await httpNetworkOrCacheFetch(e);if(A.responseTainting==="cors"&&_(A,r)==="failure"){return t("cors failure")}if(B(A,r)==="failure"){A.timingAllowFailed=true}}if((A.responseTainting==="opaque"||r.type==="opaque")&&w(A.origin,A.client,A.destination,i)==="blocked"){return t("blocked")}if(Z.has(i.status)){if(A.redirect!=="manual"){e.controller.connection.destroy(void 0,false)}if(A.redirect==="error"){r=t("unexpected redirect")}else if(A.redirect==="manual"){r=i}else if(A.redirect==="follow"){r=await httpRedirectFetch(e,r)}else{O(false)}}r.timingInfo=s;return r}__name(httpFetch,"httpFetch");function httpRedirectFetch(e,A){const r=e.request;const i=A.internalResponse?A.internalResponse:A;let s;try{s=C(i,I(r).hash);if(s==null){return A}}catch(e){return Promise.resolve(t(e))}if(!T(s)){return Promise.resolve(t("URL scheme must be a HTTP(S) scheme"))}if(r.redirectCount===20){return Promise.resolve(t("redirect count exceeded"))}r.redirectCount+=1;if(r.mode==="cors"&&(s.username||s.password)&&!R(r,s)){return Promise.resolve(t('cross origin not allowed for request mode "cors"'))}if(r.responseTainting==="cors"&&(s.username||s.password)){return Promise.resolve(t('URL cannot contain credentials for request mode "cors"'))}if(i.status!==303&&r.body!=null&&r.body.source==null){return Promise.resolve(t())}if([301,302].includes(i.status)&&r.method==="POST"||i.status===303&&!Ee.includes(r.method)){r.method="GET";r.body=null;for(const e of X){r.headersList.delete(e)}}if(!R(I(r),s)){r.headersList.delete("authorization",true);r.headersList.delete("proxy-authorization",true);r.headersList.delete("cookie",true);r.headersList.delete("host",true)}if(r.body!=null){O(r.body.source!=null);r.body=P(r.body.source)[0]}const n=e.timingInfo;n.redirectEndTime=n.postRedirectStartTime=b(e.crossOriginIsolatedCapability);if(n.redirectStartTime===0){n.redirectStartTime=n.startTime}r.urlList.push(s);d(r,i);return mainFetch(e,true)}__name(httpRedirectFetch,"httpRedirectFetch");async function httpNetworkOrCacheFetch(e,A=false,i=false){const s=e.request;let n=null;let o=null;let a=null;const l=null;const g=false;if(s.window==="no-window"&&s.redirect==="error"){n=e;o=s}else{o=c(s);n={...e};n.request=o}const Q=s.credentials==="include"||s.credentials==="same-origin"&&s.responseTainting==="basic";const u=o.body?o.body.length:null;let E=null;if(o.body==null&&["POST","PUT"].includes(o.method)){E="0"}if(u!=null){E=U(`${u}`)}if(E!=null){o.headersList.append("content-length",E,true)}if(u!=null&&o.keepalive){}if(o.referrer instanceof URL){o.headersList.append("referer",U(o.referrer.href),true)}h(o);m(o);if(!o.headersList.contains("user-agent",true)){o.headersList.append("user-agent",Be)}if(o.cache==="default"&&(o.headersList.contains("if-modified-since",true)||o.headersList.contains("if-none-match",true)||o.headersList.contains("if-unmodified-since",true)||o.headersList.contains("if-match",true)||o.headersList.contains("if-range",true))){o.cache="no-store"}if(o.cache==="no-cache"&&!o.preventNoCacheCacheControlHeaderModification&&!o.headersList.contains("cache-control",true)){o.headersList.append("cache-control","max-age=0",true)}if(o.cache==="no-store"||o.cache==="reload"){if(!o.headersList.contains("pragma",true)){o.headersList.append("pragma","no-cache",true)}if(!o.headersList.contains("cache-control",true)){o.headersList.append("cache-control","no-cache",true)}}if(o.headersList.contains("range",true)){o.headersList.append("accept-encoding","identity",true)}if(!o.headersList.contains("accept-encoding",true)){if(G(I(o))){o.headersList.append("accept-encoding","br, gzip, deflate",true)}else{o.headersList.append("accept-encoding","gzip, deflate",true)}}if(Q){}if(l==null){o.cache="no-store"}if(o.cache!=="no-store"&&o.cache!=="reload"){}if(a==null){if(o.cache==="only-if-cached"){return t("only if cached")}const e=await httpNetworkFetch(n,Q,i);if(!K.has(o.method)&&e.status>=200&&e.status<=399){}if(g&&e.status===304){}if(a==null){a=e}}a.urlList=[...o.urlList];if(o.headersList.contains("range",true)){a.rangeRequested=true}a.requestIncludesCredentials=Q;if(a.status===407){if(s.window==="no-window"){return t()}if(v(e)){return r(e)}return t("proxy authentication required")}if(a.status===421&&!i&&(s.body==null||s.body.source!=null)){if(v(e)){return r(e)}e.controller.connection.destroy();a=await httpNetworkOrCacheFetch(e,A,true)}if(A){}return a}__name(httpNetworkOrCacheFetch,"httpNetworkOrCacheFetch");async function httpNetworkFetch(e,A=false,i=false){O(!e.controller.connection||e.controller.connection.destroyed);e.controller.connection={abort:null,destroyed:false,destroy(e,A=true){if(!this.destroyed){this.destroyed=true;if(A){this.abort?.(e??new DOMException("The operation was aborted.","AbortError"))}}}};const n=e.request;let a=null;const c=e.timingInfo;const g=null;if(g==null){n.cache="no-store"}const Q=i?"yes":"no";if(n.mode==="websocket"){}else{}let u=null;if(n.body==null&&e.processRequestEndOfBody){queueMicrotask((()=>e.processRequestEndOfBody()))}else if(n.body!=null){const A=__name((async function*(A){if(v(e)){return}yield A;e.processRequestBodyChunkLength?.(A.byteLength)}),"processBodyChunk");const t=__name((()=>{if(v(e)){return}if(e.processRequestEndOfBody){e.processRequestEndOfBody()}}),"processEndOfBody");const r=__name((A=>{if(v(e)){return}if(A.name==="AbortError"){e.controller.abort()}else{e.controller.terminate(A)}}),"processBodyError");u=async function*(){try{for await(const e of n.body.stream){yield*A(e)}t()}catch(e){r(e)}}()}try{const{body:A,status:t,statusText:r,headersList:i,socket:n}=await dispatch({body:u});if(n){a=s({status:t,statusText:r,headersList:i,socket:n})}else{const n=A[Symbol.asyncIterator]();e.controller.next=()=>n.next();a=s({status:t,statusText:r,headersList:i})}}catch(A){if(A.name==="AbortError"){e.controller.connection.destroy();return r(e,A)}return t(A)}const E=__name((async()=>{await e.controller.resume()}),"pullAlgorithm");const B=__name((A=>{if(!v(e)){e.controller.abort(A)}}),"cancelAlgorithm");const h=new ReadableStream({async start(A){e.controller.controller=A},async pull(e){await E(e)},async cancel(e){await B(e)},type:"bytes"});a.body={stream:h,source:null,length:null};e.controller.onAborted=onAborted;e.controller.on("terminated",onAborted);e.controller.resume=async()=>{while(true){let A;let t;try{const{done:t,value:r}=await e.controller.next();if(S(e)){break}A=t?void 0:r}catch(r){if(e.controller.ended&&!c.encodedBodySize){A=void 0}else{A=r;t=true}}if(A===void 0){N(e.controller.controller);finalizeResponse(e,a);return}c.decodedBodySize+=A?.byteLength??0;if(t){e.controller.terminate(A);return}const r=new Uint8Array(A);if(r.byteLength){e.controller.controller.enqueue(r)}if(se(h)){e.controller.terminate();return}if(e.controller.controller.desiredSize<=0){return}}};function onAborted(A){if(S(e)){a.aborted=true;if(ne(h)){e.controller.controller.error(e.controller.serializedAbortReason)}}else{if(ne(h)){e.controller.controller.error(new TypeError("terminated",{cause:F(A)?A:void 0}))}}e.controller.connection.destroy()}__name(onAborted,"onAborted");return a;function dispatch({body:A}){const t=I(n);const r=e.controller.dispatcher;return new Promise(((i,s)=>r.dispatch({path:t.pathname+t.search,origin:t.origin,method:n.method,body:r.isMockActive?n.body&&(n.body.source||n.body.stream):A,headers:n.headersList.entries,maxRedirections:0,upgrade:n.mode==="websocket"?"websocket":void 0},{body:null,abort:null,onConnect(A){const{connection:t}=e.controller;c.finalConnectionTimingInfo=H(void 0,c.postRedirectStartTime,e.crossOriginIsolatedCapability);if(t.destroyed){A(new DOMException("The operation was aborted.","AbortError"))}else{e.controller.on("terminated",A);this.abort=t.abort=A}c.finalNetworkRequestStartTime=b(e.crossOriginIsolatedCapability)},onResponseStarted(){c.finalNetworkResponseStartTime=b(e.crossOriginIsolatedCapability)},onHeaders(e,A,t,r){if(e<200){return}let s=[];let a="";const c=new o;for(let e=0;ee.trim()))}a=c.get("location",true);this.body=new Ae({read:t});const Q=[];const u=a&&n.redirect==="follow"&&Z.has(e);if(s.length!==0&&n.method!=="HEAD"&&n.method!=="CONNECT"&&!z.includes(e)&&!u){for(let e=s.length-1;e>=0;--e){const A=s[e];if(A==="x-gzip"||A==="gzip"){Q.push(l.createGunzip({flush:l.constants.Z_SYNC_FLUSH,finishFlush:l.constants.Z_SYNC_FLUSH}))}else if(A==="deflate"){Q.push(q({flush:l.constants.Z_SYNC_FLUSH,finishFlush:l.constants.Z_SYNC_FLUSH}))}else if(A==="br"){Q.push(l.createBrotliDecompress({flush:l.constants.BROTLI_OPERATION_FLUSH,finishFlush:l.constants.BROTLI_OPERATION_FLUSH}))}else{Q.length=0;break}}}const E=this.onError.bind(this);i({status:e,statusText:r,headersList:c,body:Q.length?te(this.body,...Q,(e=>{if(e){this.onError(e)}})).on("error",E):this.body.on("error",E)});return true},onData(A){if(e.controller.dump){return}const t=A;c.encodedBodySize+=t.byteLength;return this.body.push(t)},onComplete(){if(this.abort){e.controller.off("terminated",this.abort)}if(e.controller.onAborted){e.controller.off("terminated",e.controller.onAborted)}e.controller.ended=true;this.body.push(null)},onError(A){if(this.abort){e.controller.off("terminated",this.abort)}this.body?.destroy(A);e.controller.terminate(A);s(A)},onUpgrade(e,A,t){if(e!==101){return}const r=new o;for(let e=0;efalse},{key:"loaded",converter:t.converters["unsigned long long"],defaultValue:()=>0},{key:"total",converter:t.converters["unsigned long long"],defaultValue:()=>0},{key:"bubbles",converter:t.converters.boolean,defaultValue:()=>false},{key:"cancelable",converter:t.converters.boolean,defaultValue:()=>false},{key:"composed",converter:t.converters.boolean,defaultValue:()=>false}]);A.exports={ProgressEvent:s}}});var require_encoding=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fileapi/encoding.js"(e,A){"use strict";init_define_process();function getEncoding(e){if(!e){return"failure"}switch(e.trim().toLowerCase()){case"unicode-1-1-utf-8":case"unicode11utf8":case"unicode20utf8":case"utf-8":case"utf8":case"x-unicode20utf8":return"UTF-8";case"866":case"cp866":case"csibm866":case"ibm866":return"IBM866";case"csisolatin2":case"iso-8859-2":case"iso-ir-101":case"iso8859-2":case"iso88592":case"iso_8859-2":case"iso_8859-2:1987":case"l2":case"latin2":return"ISO-8859-2";case"csisolatin3":case"iso-8859-3":case"iso-ir-109":case"iso8859-3":case"iso88593":case"iso_8859-3":case"iso_8859-3:1988":case"l3":case"latin3":return"ISO-8859-3";case"csisolatin4":case"iso-8859-4":case"iso-ir-110":case"iso8859-4":case"iso88594":case"iso_8859-4":case"iso_8859-4:1988":case"l4":case"latin4":return"ISO-8859-4";case"csisolatincyrillic":case"cyrillic":case"iso-8859-5":case"iso-ir-144":case"iso8859-5":case"iso88595":case"iso_8859-5":case"iso_8859-5:1988":return"ISO-8859-5";case"arabic":case"asmo-708":case"csiso88596e":case"csiso88596i":case"csisolatinarabic":case"ecma-114":case"iso-8859-6":case"iso-8859-6-e":case"iso-8859-6-i":case"iso-ir-127":case"iso8859-6":case"iso88596":case"iso_8859-6":case"iso_8859-6:1987":return"ISO-8859-6";case"csisolatingreek":case"ecma-118":case"elot_928":case"greek":case"greek8":case"iso-8859-7":case"iso-ir-126":case"iso8859-7":case"iso88597":case"iso_8859-7":case"iso_8859-7:1987":case"sun_eu_greek":return"ISO-8859-7";case"csiso88598e":case"csisolatinhebrew":case"hebrew":case"iso-8859-8":case"iso-8859-8-e":case"iso-ir-138":case"iso8859-8":case"iso88598":case"iso_8859-8":case"iso_8859-8:1988":case"visual":return"ISO-8859-8";case"csiso88598i":case"iso-8859-8-i":case"logical":return"ISO-8859-8-I";case"csisolatin6":case"iso-8859-10":case"iso-ir-157":case"iso8859-10":case"iso885910":case"l6":case"latin6":return"ISO-8859-10";case"iso-8859-13":case"iso8859-13":case"iso885913":return"ISO-8859-13";case"iso-8859-14":case"iso8859-14":case"iso885914":return"ISO-8859-14";case"csisolatin9":case"iso-8859-15":case"iso8859-15":case"iso885915":case"iso_8859-15":case"l9":return"ISO-8859-15";case"iso-8859-16":return"ISO-8859-16";case"cskoi8r":case"koi":case"koi8":case"koi8-r":case"koi8_r":return"KOI8-R";case"koi8-ru":case"koi8-u":return"KOI8-U";case"csmacintosh":case"mac":case"macintosh":case"x-mac-roman":return"macintosh";case"iso-8859-11":case"iso8859-11":case"iso885911":case"tis-620":case"windows-874":return"windows-874";case"cp1250":case"windows-1250":case"x-cp1250":return"windows-1250";case"cp1251":case"windows-1251":case"x-cp1251":return"windows-1251";case"ansi_x3.4-1968":case"ascii":case"cp1252":case"cp819":case"csisolatin1":case"ibm819":case"iso-8859-1":case"iso-ir-100":case"iso8859-1":case"iso88591":case"iso_8859-1":case"iso_8859-1:1987":case"l1":case"latin1":case"us-ascii":case"windows-1252":case"x-cp1252":return"windows-1252";case"cp1253":case"windows-1253":case"x-cp1253":return"windows-1253";case"cp1254":case"csisolatin5":case"iso-8859-9":case"iso-ir-148":case"iso8859-9":case"iso88599":case"iso_8859-9":case"iso_8859-9:1989":case"l5":case"latin5":case"windows-1254":case"x-cp1254":return"windows-1254";case"cp1255":case"windows-1255":case"x-cp1255":return"windows-1255";case"cp1256":case"windows-1256":case"x-cp1256":return"windows-1256";case"cp1257":case"windows-1257":case"x-cp1257":return"windows-1257";case"cp1258":case"windows-1258":case"x-cp1258":return"windows-1258";case"x-mac-cyrillic":case"x-mac-ukrainian":return"x-mac-cyrillic";case"chinese":case"csgb2312":case"csiso58gb231280":case"gb2312":case"gb_2312":case"gb_2312-80":case"gbk":case"iso-ir-58":case"x-gbk":return"GBK";case"gb18030":return"gb18030";case"big5":case"big5-hkscs":case"cn-big5":case"csbig5":case"x-x-big5":return"Big5";case"cseucpkdfmtjapanese":case"euc-jp":case"x-euc-jp":return"EUC-JP";case"csiso2022jp":case"iso-2022-jp":return"ISO-2022-JP";case"csshiftjis":case"ms932":case"ms_kanji":case"shift-jis":case"shift_jis":case"sjis":case"windows-31j":case"x-sjis":return"Shift_JIS";case"cseuckr":case"csksc56011987":case"euc-kr":case"iso-ir-149":case"korean":case"ks_c_5601-1987":case"ks_c_5601-1989":case"ksc5601":case"ksc_5601":case"windows-949":return"EUC-KR";case"csiso2022kr":case"hz-gb-2312":case"iso-2022-cn":case"iso-2022-cn-ext":case"iso-2022-kr":case"replacement":return"replacement";case"unicodefffe":case"utf-16be":return"UTF-16BE";case"csunicode":case"iso-10646-ucs-2":case"ucs-2":case"unicode":case"unicodefeff":case"utf-16":case"utf-16le":return"UTF-16LE";case"x-user-defined":return"x-user-defined";default:return"failure"}}__name(getEncoding,"getEncoding");A.exports={getEncoding:getEncoding}}});var require_util4=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fileapi/util.js"(e,A){"use strict";init_define_process();var{kState:t,kError:r,kResult:i,kAborted:s,kLastProgressEventFired:n}=require_symbols3();var{ProgressEvent:o}=require_progressevent();var{getEncoding:a}=require_encoding();var{serializeAMimeType:c,parseMIMEType:l}=require_data_url();var{types:g}=__nccwpck_require__(837);var{StringDecoder:Q}=__nccwpck_require__(576);var{btoa:u}=__nccwpck_require__(300);var E={enumerable:true,writable:false,configurable:false};function readOperation(e,A,o,a){if(e[t]==="loading"){throw new DOMException("Invalid state","InvalidStateError")}e[t]="loading";e[i]=null;e[r]=null;const c=A.stream();const l=c.getReader();const Q=[];let u=l.read();let E=true;(async()=>{while(!e[s]){try{const{done:c,value:B}=await u;if(E&&!e[s]){queueMicrotask((()=>{fireAProgressEvent("loadstart",e)}))}E=false;if(!c&&g.isUint8Array(B)){Q.push(B);if((e[n]===void 0||Date.now()-e[n]>=50)&&!e[s]){e[n]=Date.now();queueMicrotask((()=>{fireAProgressEvent("progress",e)}))}u=l.read()}else if(c){queueMicrotask((()=>{e[t]="done";try{const t=packageData(Q,o,A.type,a);if(e[s]){return}e[i]=t;fireAProgressEvent("load",e)}catch(A){e[r]=A;fireAProgressEvent("error",e)}if(e[t]!=="loading"){fireAProgressEvent("loadend",e)}}));break}}catch(A){if(e[s]){return}queueMicrotask((()=>{e[t]="done";e[r]=A;fireAProgressEvent("error",e);if(e[t]!=="loading"){fireAProgressEvent("loadend",e)}}));break}}})()}__name(readOperation,"readOperation");function fireAProgressEvent(e,A){const t=new o(e,{bubbles:false,cancelable:false});A.dispatchEvent(t)}__name(fireAProgressEvent,"fireAProgressEvent");function packageData(e,A,t,r){switch(A){case"DataURL":{let A="data:";const r=l(t||"application/octet-stream");if(r!=="failure"){A+=c(r)}A+=";base64,";const i=new Q("latin1");for(const t of e){A+=u(i.write(t))}A+=u(i.end());return A}case"Text":{let A="failure";if(r){A=a(r)}if(A==="failure"&&t){const e=l(t);if(e!=="failure"){A=a(e.parameters.get("charset"))}}if(A==="failure"){A="UTF-8"}return decode(e,A)}case"ArrayBuffer":{const A=combineByteSequences(e);return A.buffer}case"BinaryString":{let A="";const t=new Q("latin1");for(const r of e){A+=t.write(r)}A+=t.end();return A}}}__name(packageData,"packageData");function decode(e,A){const t=combineByteSequences(e);const r=BOMSniffing(t);let i=0;if(r!==null){A=r;i=r==="UTF-8"?3:2}const s=t.slice(i);return new TextDecoder(A).decode(s)}__name(decode,"decode");function BOMSniffing(e){const[A,t,r]=e;if(A===239&&t===187&&r===191){return"UTF-8"}else if(A===254&&t===255){return"UTF-16BE"}else if(A===255&&t===254){return"UTF-16LE"}return null}__name(BOMSniffing,"BOMSniffing");function combineByteSequences(e){const A=e.reduce(((e,A)=>e+A.byteLength),0);let t=0;return e.reduce(((e,A)=>{e.set(A,t);t+=A.byteLength;return e}),new Uint8Array(A))}__name(combineByteSequences,"combineByteSequences");A.exports={staticPropertyDescriptors:E,readOperation:readOperation,fireAProgressEvent:fireAProgressEvent}}});var require_filereader=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/fileapi/filereader.js"(e,A){"use strict";init_define_process();var{staticPropertyDescriptors:t,readOperation:r,fireAProgressEvent:i}=require_util4();var{kState:s,kError:n,kResult:o,kEvents:a,kAborted:c}=require_symbols3();var{webidl:l}=require_webidl();var{kEnumerableProperty:g}=require_util();var Q=class _FileReader extends EventTarget{constructor(){super();this[s]="empty";this[o]=null;this[n]=null;this[a]={loadend:null,error:null,abort:null,load:null,progress:null,loadstart:null}}readAsArrayBuffer(e){l.brandCheck(this,_FileReader);l.argumentLengthCheck(arguments,1,"FileReader.readAsArrayBuffer");e=l.converters.Blob(e,{strict:false});r(this,e,"ArrayBuffer")}readAsBinaryString(e){l.brandCheck(this,_FileReader);l.argumentLengthCheck(arguments,1,"FileReader.readAsBinaryString");e=l.converters.Blob(e,{strict:false});r(this,e,"BinaryString")}readAsText(e,A=void 0){l.brandCheck(this,_FileReader);l.argumentLengthCheck(arguments,1,"FileReader.readAsText");e=l.converters.Blob(e,{strict:false});if(A!==void 0){A=l.converters.DOMString(A,"FileReader.readAsText","encoding")}r(this,e,"Text",A)}readAsDataURL(e){l.brandCheck(this,_FileReader);l.argumentLengthCheck(arguments,1,"FileReader.readAsDataURL");e=l.converters.Blob(e,{strict:false});r(this,e,"DataURL")}abort(){if(this[s]==="empty"||this[s]==="done"){this[o]=null;return}if(this[s]==="loading"){this[s]="done";this[o]=null}this[c]=true;i("abort",this);if(this[s]!=="loading"){i("loadend",this)}}get readyState(){l.brandCheck(this,_FileReader);switch(this[s]){case"empty":return this.EMPTY;case"loading":return this.LOADING;case"done":return this.DONE}}get result(){l.brandCheck(this,_FileReader);return this[o]}get error(){l.brandCheck(this,_FileReader);return this[n]}get onloadend(){l.brandCheck(this,_FileReader);return this[a].loadend}set onloadend(e){l.brandCheck(this,_FileReader);if(this[a].loadend){this.removeEventListener("loadend",this[a].loadend)}if(typeof e==="function"){this[a].loadend=e;this.addEventListener("loadend",e)}else{this[a].loadend=null}}get onerror(){l.brandCheck(this,_FileReader);return this[a].error}set onerror(e){l.brandCheck(this,_FileReader);if(this[a].error){this.removeEventListener("error",this[a].error)}if(typeof e==="function"){this[a].error=e;this.addEventListener("error",e)}else{this[a].error=null}}get onloadstart(){l.brandCheck(this,_FileReader);return this[a].loadstart}set onloadstart(e){l.brandCheck(this,_FileReader);if(this[a].loadstart){this.removeEventListener("loadstart",this[a].loadstart)}if(typeof e==="function"){this[a].loadstart=e;this.addEventListener("loadstart",e)}else{this[a].loadstart=null}}get onprogress(){l.brandCheck(this,_FileReader);return this[a].progress}set onprogress(e){l.brandCheck(this,_FileReader);if(this[a].progress){this.removeEventListener("progress",this[a].progress)}if(typeof e==="function"){this[a].progress=e;this.addEventListener("progress",e)}else{this[a].progress=null}}get onload(){l.brandCheck(this,_FileReader);return this[a].load}set onload(e){l.brandCheck(this,_FileReader);if(this[a].load){this.removeEventListener("load",this[a].load)}if(typeof e==="function"){this[a].load=e;this.addEventListener("load",e)}else{this[a].load=null}}get onabort(){l.brandCheck(this,_FileReader);return this[a].abort}set onabort(e){l.brandCheck(this,_FileReader);if(this[a].abort){this.removeEventListener("abort",this[a].abort)}if(typeof e==="function"){this[a].abort=e;this.addEventListener("abort",e)}else{this[a].abort=null}}};__name(Q,"FileReader");var u=Q;u.EMPTY=u.prototype.EMPTY=0;u.LOADING=u.prototype.LOADING=1;u.DONE=u.prototype.DONE=2;Object.defineProperties(u.prototype,{EMPTY:t,LOADING:t,DONE:t,readAsArrayBuffer:g,readAsBinaryString:g,readAsText:g,readAsDataURL:g,abort:g,readyState:g,result:g,error:g,onloadstart:g,onprogress:g,onload:g,onabort:g,onerror:g,onloadend:g,[Symbol.toStringTag]:{value:"FileReader",writable:false,enumerable:false,configurable:true}});Object.defineProperties(u,{EMPTY:t,LOADING:t,DONE:t});A.exports={FileReader:u}}});var require_symbols4=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/cache/symbols.js"(e,A){"use strict";init_define_process();A.exports={kConstruct:require_symbols().kConstruct}}});var require_util5=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/cache/util.js"(e,A){"use strict";init_define_process();var t=__nccwpck_require__(491);var{URLSerializer:r}=require_data_url();var{isValidHeaderName:i}=require_util2();function urlEquals(e,A,t=false){const i=r(e,t);const s=r(A,t);return i===s}__name(urlEquals,"urlEquals");function getFieldValues(e){t(e!==null);const A=[];for(let t of e.split(",")){t=t.trim();if(i(t)){A.push(t)}}return A}__name(getFieldValues,"getFieldValues");A.exports={urlEquals:urlEquals,getFieldValues:getFieldValues}}});var require_cache=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/cache/cache.js"(e,A){"use strict";init_define_process();var{kConstruct:t}=require_symbols4();var{urlEquals:r,getFieldValues:i}=require_util5();var{kEnumerableProperty:s,isDisturbed:n}=require_util();var{webidl:o}=require_webidl();var{Response:a,cloneResponse:c,fromInnerResponse:l}=require_response();var{Request:g,fromInnerRequest:Q}=require_request();var{kState:u}=require_symbols2();var{fetching:E}=require_fetch();var{urlIsHttpHttpsScheme:B,createDeferredPromise:h,readAllBytes:C}=require_util2();var I=__nccwpck_require__(491);var d,f,p,m,_,w,y,b,k;var D=class _Cache{constructor(){__privateAdd(this,f);__privateAdd(this,m);__privateAdd(this,w);__privateAdd(this,b);__privateAdd(this,d,void 0);if(arguments[0]!==t){o.illegalConstructor()}o.util.markAsUncloneable(this);__privateSet(this,d,arguments[1])}async match(e,A={}){o.brandCheck(this,_Cache);const t="Cache.match";o.argumentLengthCheck(arguments,1,t);e=o.converters.RequestInfo(e,t,"request");A=o.converters.CacheQueryOptions(A,t,"options");const r=__privateMethod(this,b,k).call(this,e,A,1);if(r.length===0){return}return r[0]}async matchAll(e=void 0,A={}){o.brandCheck(this,_Cache);const t="Cache.matchAll";if(e!==void 0)e=o.converters.RequestInfo(e,t,"request");A=o.converters.CacheQueryOptions(A,t,"options");return __privateMethod(this,b,k).call(this,e,A)}async add(e){o.brandCheck(this,_Cache);const A="Cache.add";o.argumentLengthCheck(arguments,1,A);e=o.converters.RequestInfo(e,A,"request");const t=[e];const r=this.addAll(t);return await r}async addAll(e){o.brandCheck(this,_Cache);const A="Cache.addAll";o.argumentLengthCheck(arguments,1,A);const t=[];const r=[];for(let t of e){if(t===void 0){throw o.errors.conversionFailed({prefix:A,argument:"Argument 1",types:["undefined is not allowed"]})}t=o.converters.RequestInfo(t);if(typeof t==="string"){continue}const e=t[u];if(!B(e.url)||e.method!=="GET"){throw o.errors.exception({header:A,message:"Expected http/s scheme when method is not GET."})}}const s=[];for(const n of e){const e=new g(n)[u];if(!B(e.url)){throw o.errors.exception({header:A,message:"Expected http/s scheme."})}e.initiator="fetch";e.destination="subresource";r.push(e);const a=h();s.push(E({request:e,processResponse(e){if(e.type==="error"||e.status===206||e.status<200||e.status>299){a.reject(o.errors.exception({header:"Cache.addAll",message:"Received an invalid status code or the request failed."}))}else if(e.headersList.contains("vary")){const A=i(e.headersList.get("vary"));for(const e of A){if(e==="*"){a.reject(o.errors.exception({header:"Cache.addAll",message:"invalid vary field value"}));for(const e of s){e.abort()}return}}}},processResponseEndOfBody(e){if(e.aborted){a.reject(new DOMException("aborted","AbortError"));return}a.resolve(e)}}));t.push(a.promise)}const n=Promise.all(t);const a=await n;const c=[];let l=0;for(const e of a){const A={type:"put",request:r[l],response:e};c.push(A);l++}const Q=h();let C=null;try{__privateMethod(this,f,p).call(this,c)}catch(e){C=e}queueMicrotask((()=>{if(C===null){Q.resolve(void 0)}else{Q.reject(C)}}));return Q.promise}async put(e,A){o.brandCheck(this,_Cache);const t="Cache.put";o.argumentLengthCheck(arguments,2,t);e=o.converters.RequestInfo(e,t,"request");A=o.converters.Response(A,t,"response");let r=null;if(e instanceof g){r=e[u]}else{r=new g(e)[u]}if(!B(r.url)||r.method!=="GET"){throw o.errors.exception({header:t,message:"Expected an http/s scheme when method is not GET"})}const s=A[u];if(s.status===206){throw o.errors.exception({header:t,message:"Got 206 status"})}if(s.headersList.contains("vary")){const e=i(s.headersList.get("vary"));for(const A of e){if(A==="*"){throw o.errors.exception({header:t,message:"Got * vary field value"})}}}if(s.body&&(n(s.body.stream)||s.body.stream.locked)){throw o.errors.exception({header:t,message:"Response body is locked or disturbed"})}const a=c(s);const l=h();if(s.body!=null){const e=s.body.stream;const A=e.getReader();C(A).then(l.resolve,l.reject)}else{l.resolve(void 0)}const Q=[];const E={type:"put",request:r,response:a};Q.push(E);const I=await l.promise;if(a.body!=null){a.body.source=I}const d=h();let m=null;try{__privateMethod(this,f,p).call(this,Q)}catch(e){m=e}queueMicrotask((()=>{if(m===null){d.resolve()}else{d.reject(m)}}));return d.promise}async delete(e,A={}){o.brandCheck(this,_Cache);const t="Cache.delete";o.argumentLengthCheck(arguments,1,t);e=o.converters.RequestInfo(e,t,"request");A=o.converters.CacheQueryOptions(A,t,"options");let r=null;if(e instanceof g){r=e[u];if(r.method!=="GET"&&!A.ignoreMethod){return false}}else{I(typeof e==="string");r=new g(e)[u]}const i=[];const s={type:"delete",request:r,options:A};i.push(s);const n=h();let a=null;let c;try{c=__privateMethod(this,f,p).call(this,i)}catch(e){a=e}queueMicrotask((()=>{if(a===null){n.resolve(!!c?.length)}else{n.reject(a)}}));return n.promise}async keys(e=void 0,A={}){o.brandCheck(this,_Cache);const t="Cache.keys";if(e!==void 0)e=o.converters.RequestInfo(e,t,"request");A=o.converters.CacheQueryOptions(A,t,"options");let r=null;if(e!==void 0){if(e instanceof g){r=e[u];if(r.method!=="GET"&&!A.ignoreMethod){return[]}}else if(typeof e==="string"){r=new g(e)[u]}}const i=h();const s=[];if(e===void 0){for(const e of __privateGet(this,d)){s.push(e[0])}}else{const e=__privateMethod(this,m,_).call(this,r,A);for(const A of e){s.push(A[0])}}queueMicrotask((()=>{const e=[];for(const A of s){const t=Q(A,(new AbortController).signal,"immutable");e.push(t)}i.resolve(Object.freeze(e))}));return i.promise}};d=new WeakMap;f=new WeakSet;p=__name((function(e){const A=__privateGet(this,d);const t=[...A];const r=[];const i=[];try{for(const t of e){if(t.type!=="delete"&&t.type!=="put"){throw o.errors.exception({header:"Cache.#batchCacheOperations",message:'operation type does not match "delete" or "put"'})}if(t.type==="delete"&&t.response!=null){throw o.errors.exception({header:"Cache.#batchCacheOperations",message:"delete operation should not have an associated response"})}if(__privateMethod(this,m,_).call(this,t.request,t.options,r).length){throw new DOMException("???","InvalidStateError")}let e;if(t.type==="delete"){e=__privateMethod(this,m,_).call(this,t.request,t.options);if(e.length===0){return[]}for(const t of e){const e=A.indexOf(t);I(e!==-1);A.splice(e,1)}}else if(t.type==="put"){if(t.response==null){throw o.errors.exception({header:"Cache.#batchCacheOperations",message:"put operation should have an associated response"})}const i=t.request;if(!B(i.url)){throw o.errors.exception({header:"Cache.#batchCacheOperations",message:"expected http or https scheme"})}if(i.method!=="GET"){throw o.errors.exception({header:"Cache.#batchCacheOperations",message:"not get method"})}if(t.options!=null){throw o.errors.exception({header:"Cache.#batchCacheOperations",message:"options must not be defined"})}e=__privateMethod(this,m,_).call(this,t.request);for(const t of e){const e=A.indexOf(t);I(e!==-1);A.splice(e,1)}A.push([t.request,t.response]);r.push([t.request,t.response])}i.push([t.request,t.response])}return i}catch(e){__privateGet(this,d).length=0;__privateSet(this,d,t);throw e}}),"#batchCacheOperations");m=new WeakSet;_=__name((function(e,A,t){const r=[];const i=t??__privateGet(this,d);for(const t of i){const[i,s]=t;if(__privateMethod(this,w,y).call(this,e,i,s,A)){r.push(t)}}return r}),"#queryCache");w=new WeakSet;y=__name((function(e,A,t=null,s){const n=new URL(e.url);const o=new URL(A.url);if(s?.ignoreSearch){o.search="";n.search=""}if(!r(n,o,true)){return false}if(t==null||s?.ignoreVary||!t.headersList.contains("vary")){return true}const a=i(t.headersList.get("vary"));for(const t of a){if(t==="*"){return false}const r=A.headersList.get(t);const i=e.headersList.get(t);if(r!==i){return false}}return true}),"#requestMatchesCachedItem");b=new WeakSet;k=__name((function(e,A,t=Infinity){let r=null;if(e!==void 0){if(e instanceof g){r=e[u];if(r.method!=="GET"&&!A.ignoreMethod){return[]}}else if(typeof e==="string"){r=new g(e)[u]}}const i=[];if(e===void 0){for(const e of __privateGet(this,d)){i.push(e[1])}}else{const e=__privateMethod(this,m,_).call(this,r,A);for(const A of e){i.push(A[1])}}const s=[];for(const e of i){const A=l(e,"immutable");s.push(A.clone());if(s.length>=t){break}}return Object.freeze(s)}),"#internalMatchAll");__name(D,"Cache");var R=D;Object.defineProperties(R.prototype,{[Symbol.toStringTag]:{value:"Cache",configurable:true},match:s,matchAll:s,add:s,addAll:s,put:s,delete:s,keys:s});var v=[{key:"ignoreSearch",converter:o.converters.boolean,defaultValue:()=>false},{key:"ignoreMethod",converter:o.converters.boolean,defaultValue:()=>false},{key:"ignoreVary",converter:o.converters.boolean,defaultValue:()=>false}];o.converters.CacheQueryOptions=o.dictionaryConverter(v);o.converters.MultiCacheQueryOptions=o.dictionaryConverter([...v,{key:"cacheName",converter:o.converters.DOMString}]);o.converters.Response=o.interfaceConverter(a);o.converters["sequence"]=o.sequenceConverter(o.converters.RequestInfo);A.exports={Cache:R}}});var require_cachestorage=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/cache/cachestorage.js"(e,A){"use strict";init_define_process();var{kConstruct:t}=require_symbols4();var{Cache:r}=require_cache();var{webidl:i}=require_webidl();var{kEnumerableProperty:s}=require_util();var n;var o=class _CacheStorage{constructor(){__privateAdd(this,n,new Map);if(arguments[0]!==t){i.illegalConstructor()}i.util.markAsUncloneable(this)}async match(e,A={}){i.brandCheck(this,_CacheStorage);i.argumentLengthCheck(arguments,1,"CacheStorage.match");e=i.converters.RequestInfo(e);A=i.converters.MultiCacheQueryOptions(A);if(A.cacheName!=null){if(__privateGet(this,n).has(A.cacheName)){const i=__privateGet(this,n).get(A.cacheName);const s=new r(t,i);return await s.match(e,A)}}else{for(const i of __privateGet(this,n).values()){const s=new r(t,i);const n=await s.match(e,A);if(n!==void 0){return n}}}}async has(e){i.brandCheck(this,_CacheStorage);const A="CacheStorage.has";i.argumentLengthCheck(arguments,1,A);e=i.converters.DOMString(e,A,"cacheName");return __privateGet(this,n).has(e)}async open(e){i.brandCheck(this,_CacheStorage);const A="CacheStorage.open";i.argumentLengthCheck(arguments,1,A);e=i.converters.DOMString(e,A,"cacheName");if(__privateGet(this,n).has(e)){const A=__privateGet(this,n).get(e);return new r(t,A)}const s=[];__privateGet(this,n).set(e,s);return new r(t,s)}async delete(e){i.brandCheck(this,_CacheStorage);const A="CacheStorage.delete";i.argumentLengthCheck(arguments,1,A);e=i.converters.DOMString(e,A,"cacheName");return __privateGet(this,n).delete(e)}async keys(){i.brandCheck(this,_CacheStorage);const e=__privateGet(this,n).keys();return[...e]}};n=new WeakMap;__name(o,"CacheStorage");var a=o;Object.defineProperties(a.prototype,{[Symbol.toStringTag]:{value:"CacheStorage",configurable:true},match:s,has:s,open:s,delete:s,keys:s});A.exports={CacheStorage:a}}});var require_constants4=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/cookies/constants.js"(e,A){"use strict";init_define_process();var t=1024;var r=4096;A.exports={maxAttributeValueSize:t,maxNameValuePairSize:r}}});var require_util6=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/cookies/util.js"(e,A){"use strict";init_define_process();function isCTLExcludingHtab(e){for(let A=0;A=0&&t<=8||t>=10&&t<=31||t===127){return true}}return false}__name(isCTLExcludingHtab,"isCTLExcludingHtab");function validateCookieName(e){for(let A=0;A126||t===34||t===40||t===41||t===60||t===62||t===64||t===44||t===59||t===58||t===92||t===47||t===91||t===93||t===63||t===61||t===123||t===125){throw new Error("Invalid cookie name")}}}__name(validateCookieName,"validateCookieName");function validateCookieValue(e){let A=e.length;let t=0;if(e[0]==='"'){if(A===1||e[A-1]!=='"'){throw new Error("Invalid cookie value")}--A;++t}while(t126||A===34||A===44||A===59||A===92){throw new Error("Invalid cookie value")}}}__name(validateCookieValue,"validateCookieValue");function validateCookiePath(e){for(let A=0;AA.toString().padStart(2,"0")));function toIMFDate(e){if(typeof e==="number"){e=new Date(e)}return`${t[e.getUTCDay()]}, ${i[e.getUTCDate()]} ${r[e.getUTCMonth()]} ${e.getUTCFullYear()} ${i[e.getUTCHours()]}:${i[e.getUTCMinutes()]}:${i[e.getUTCSeconds()]} GMT`}__name(toIMFDate,"toIMFDate");function validateCookieMaxAge(e){if(e<0){throw new Error("Invalid cookie max-age")}}__name(validateCookieMaxAge,"validateCookieMaxAge");function stringify(e){if(e.name.length===0){return null}validateCookieName(e.name);validateCookieValue(e.value);const A=[`${e.name}=${e.value}`];if(e.name.startsWith("__Secure-")){e.secure=true}if(e.name.startsWith("__Host-")){e.secure=true;e.domain=null;e.path="/"}if(e.secure){A.push("Secure")}if(e.httpOnly){A.push("HttpOnly")}if(typeof e.maxAge==="number"){validateCookieMaxAge(e.maxAge);A.push(`Max-Age=${e.maxAge}`)}if(e.domain){validateCookieDomain(e.domain);A.push(`Domain=${e.domain}`)}if(e.path){validateCookiePath(e.path);A.push(`Path=${e.path}`)}if(e.expires&&e.expires.toString()!=="Invalid Date"){A.push(`Expires=${toIMFDate(e.expires)}`)}if(e.sameSite){A.push(`SameSite=${e.sameSite}`)}for(const t of e.unparsed){if(!t.includes("=")){throw new Error("Invalid unparsed")}const[e,...r]=t.split("=");A.push(`${e.trim()}=${r.join("=")}`)}return A.join("; ")}__name(stringify,"stringify");A.exports={isCTLExcludingHtab:isCTLExcludingHtab,validateCookieName:validateCookieName,validateCookiePath:validateCookiePath,validateCookieValue:validateCookieValue,toIMFDate:toIMFDate,stringify:stringify}}});var require_parse=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/cookies/parse.js"(e,A){"use strict";init_define_process();var{maxNameValuePairSize:t,maxAttributeValueSize:r}=require_constants4();var{isCTLExcludingHtab:i}=require_util6();var{collectASequenceOfCodePointsFast:s}=require_data_url();var n=__nccwpck_require__(491);function parseSetCookie(e){if(i(e)){return null}let A="";let r="";let n="";let o="";if(e.includes(";")){const t={position:0};A=s(";",e,t);r=e.slice(t.position)}else{A=e}if(!A.includes("=")){o=A}else{const e={position:0};n=s("=",A,e);o=A.slice(e.position+1)}n=n.trim();o=o.trim();if(n.length+o.length>t){return null}return{name:n,value:o,...parseUnparsedAttributes(r)}}__name(parseSetCookie,"parseSetCookie");function parseUnparsedAttributes(e,A={}){if(e.length===0){return A}n(e[0]===";");e=e.slice(1);let t="";if(e.includes(";")){t=s(";",e,{position:0});e=e.slice(t.length)}else{t=e;e=""}let i="";let o="";if(t.includes("=")){const e={position:0};i=s("=",t,e);o=t.slice(e.position+1)}else{i=t}i=i.trim();o=o.trim();if(o.length>r){return parseUnparsedAttributes(e,A)}const a=i.toLowerCase();if(a==="expires"){const e=new Date(o);A.expires=e}else if(a==="max-age"){const t=o.charCodeAt(0);if((t<48||t>57)&&o[0]!=="-"){return parseUnparsedAttributes(e,A)}if(!/^\d+$/.test(o)){return parseUnparsedAttributes(e,A)}const r=Number(o);A.maxAge=r}else if(a==="domain"){let e=o;if(e[0]==="."){e=e.slice(1)}e=e.toLowerCase();A.domain=e}else if(a==="path"){let e="";if(o.length===0||o[0]!=="/"){e="/"}else{e=o}A.path=e}else if(a==="secure"){A.secure=true}else if(a==="httponly"){A.httpOnly=true}else if(a==="samesite"){let e="Default";const t=o.toLowerCase();if(t.includes("none")){e="None"}if(t.includes("strict")){e="Strict"}if(t.includes("lax")){e="Lax"}A.sameSite=e}else{A.unparsed??=[];A.unparsed.push(`${i}=${o}`)}return parseUnparsedAttributes(e,A)}__name(parseUnparsedAttributes,"parseUnparsedAttributes");A.exports={parseSetCookie:parseSetCookie,parseUnparsedAttributes:parseUnparsedAttributes}}});var require_cookies=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/cookies/index.js"(e,A){"use strict";init_define_process();var{parseSetCookie:t}=require_parse();var{stringify:r}=require_util6();var{webidl:i}=require_webidl();var{Headers:s}=require_headers();function getCookies(e){i.argumentLengthCheck(arguments,1,"getCookies");i.brandCheck(e,s,{strict:false});const A=e.get("cookie");const t={};if(!A){return t}for(const e of A.split(";")){const[A,...r]=e.split("=");t[A.trim()]=r.join("=")}return t}__name(getCookies,"getCookies");function deleteCookie(e,A,t){i.brandCheck(e,s,{strict:false});const r="deleteCookie";i.argumentLengthCheck(arguments,2,r);A=i.converters.DOMString(A,r,"name");t=i.converters.DeleteCookieAttributes(t);setCookie(e,{name:A,value:"",expires:new Date(0),...t})}__name(deleteCookie,"deleteCookie");function getSetCookies(e){i.argumentLengthCheck(arguments,1,"getSetCookies");i.brandCheck(e,s,{strict:false});const A=e.getSetCookie();if(!A){return[]}return A.map((e=>t(e)))}__name(getSetCookies,"getSetCookies");function setCookie(e,A){i.argumentLengthCheck(arguments,2,"setCookie");i.brandCheck(e,s,{strict:false});A=i.converters.Cookie(A);const t=r(A);if(t){e.append("Set-Cookie",t)}}__name(setCookie,"setCookie");i.converters.DeleteCookieAttributes=i.dictionaryConverter([{converter:i.nullableConverter(i.converters.DOMString),key:"path",defaultValue:()=>null},{converter:i.nullableConverter(i.converters.DOMString),key:"domain",defaultValue:()=>null}]);i.converters.Cookie=i.dictionaryConverter([{converter:i.converters.DOMString,key:"name"},{converter:i.converters.DOMString,key:"value"},{converter:i.nullableConverter((e=>{if(typeof e==="number"){return i.converters["unsigned long long"](e)}return new Date(e)})),key:"expires",defaultValue:()=>null},{converter:i.nullableConverter(i.converters["long long"]),key:"maxAge",defaultValue:()=>null},{converter:i.nullableConverter(i.converters.DOMString),key:"domain",defaultValue:()=>null},{converter:i.nullableConverter(i.converters.DOMString),key:"path",defaultValue:()=>null},{converter:i.nullableConverter(i.converters.boolean),key:"secure",defaultValue:()=>null},{converter:i.nullableConverter(i.converters.boolean),key:"httpOnly",defaultValue:()=>null},{converter:i.converters.USVString,key:"sameSite",allowedValues:["Strict","Lax","None"]},{converter:i.sequenceConverter(i.converters.DOMString),key:"unparsed",defaultValue:()=>new Array(0)}]);A.exports={getCookies:getCookies,deleteCookie:deleteCookie,getSetCookies:getSetCookies,setCookie:setCookie}}});var require_events=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/events.js"(e,A){"use strict";init_define_process();var{webidl:t}=require_webidl();var{kEnumerableProperty:r}=require_util();var{kConstruct:i}=require_symbols();var{MessagePort:s}=__nccwpck_require__(267);var n;var o=class _MessageEvent extends Event{constructor(e,A={}){var __super=(...e)=>{super(...e);__privateAdd(this,n,void 0);return this};if(e===i){__super(arguments[1],arguments[2]);t.util.markAsUncloneable(this);return}const r="MessageEvent constructor";t.argumentLengthCheck(arguments,1,r);e=t.converters.DOMString(e,r,"type");A=t.converters.MessageEventInit(A,r,"eventInitDict");__super(e,A);__privateSet(this,n,A);t.util.markAsUncloneable(this)}get data(){t.brandCheck(this,_MessageEvent);return __privateGet(this,n).data}get origin(){t.brandCheck(this,_MessageEvent);return __privateGet(this,n).origin}get lastEventId(){t.brandCheck(this,_MessageEvent);return __privateGet(this,n).lastEventId}get source(){t.brandCheck(this,_MessageEvent);return __privateGet(this,n).source}get ports(){t.brandCheck(this,_MessageEvent);if(!Object.isFrozen(__privateGet(this,n).ports)){Object.freeze(__privateGet(this,n).ports)}return __privateGet(this,n).ports}initMessageEvent(e,A=false,r=false,i=null,s="",n="",o=null,a=[]){t.brandCheck(this,_MessageEvent);t.argumentLengthCheck(arguments,1,"MessageEvent.initMessageEvent");return new _MessageEvent(e,{bubbles:A,cancelable:r,data:i,origin:s,lastEventId:n,source:o,ports:a})}static createFastMessageEvent(e,A){const t=new _MessageEvent(i,e,A);__privateSet(t,n,A);__privateGet(t,n).data??=null;__privateGet(t,n).origin??="";__privateGet(t,n).lastEventId??="";__privateGet(t,n).source??=null;__privateGet(t,n).ports??=[];return t}};n=new WeakMap;__name(o,"MessageEvent");var a=o;var{createFastMessageEvent:c}=a;delete a.createFastMessageEvent;var l;var g=class _CloseEvent extends Event{constructor(e,A={}){const r="CloseEvent constructor";t.argumentLengthCheck(arguments,1,r);e=t.converters.DOMString(e,r,"type");A=t.converters.CloseEventInit(A);super(e,A);__privateAdd(this,l,void 0);__privateSet(this,l,A);t.util.markAsUncloneable(this)}get wasClean(){t.brandCheck(this,_CloseEvent);return __privateGet(this,l).wasClean}get code(){t.brandCheck(this,_CloseEvent);return __privateGet(this,l).code}get reason(){t.brandCheck(this,_CloseEvent);return __privateGet(this,l).reason}};l=new WeakMap;__name(g,"CloseEvent");var Q=g;var u;var E=class _ErrorEvent extends Event{constructor(e,A){const r="ErrorEvent constructor";t.argumentLengthCheck(arguments,1,r);super(e,A);__privateAdd(this,u,void 0);t.util.markAsUncloneable(this);e=t.converters.DOMString(e,r,"type");A=t.converters.ErrorEventInit(A??{});__privateSet(this,u,A)}get message(){t.brandCheck(this,_ErrorEvent);return __privateGet(this,u).message}get filename(){t.brandCheck(this,_ErrorEvent);return __privateGet(this,u).filename}get lineno(){t.brandCheck(this,_ErrorEvent);return __privateGet(this,u).lineno}get colno(){t.brandCheck(this,_ErrorEvent);return __privateGet(this,u).colno}get error(){t.brandCheck(this,_ErrorEvent);return __privateGet(this,u).error}};u=new WeakMap;__name(E,"ErrorEvent");var B=E;Object.defineProperties(a.prototype,{[Symbol.toStringTag]:{value:"MessageEvent",configurable:true},data:r,origin:r,lastEventId:r,source:r,ports:r,initMessageEvent:r});Object.defineProperties(Q.prototype,{[Symbol.toStringTag]:{value:"CloseEvent",configurable:true},reason:r,code:r,wasClean:r});Object.defineProperties(B.prototype,{[Symbol.toStringTag]:{value:"ErrorEvent",configurable:true},message:r,filename:r,lineno:r,colno:r,error:r});t.converters.MessagePort=t.interfaceConverter(s);t.converters["sequence"]=t.sequenceConverter(t.converters.MessagePort);var h=[{key:"bubbles",converter:t.converters.boolean,defaultValue:()=>false},{key:"cancelable",converter:t.converters.boolean,defaultValue:()=>false},{key:"composed",converter:t.converters.boolean,defaultValue:()=>false}];t.converters.MessageEventInit=t.dictionaryConverter([...h,{key:"data",converter:t.converters.any,defaultValue:()=>null},{key:"origin",converter:t.converters.USVString,defaultValue:()=>""},{key:"lastEventId",converter:t.converters.DOMString,defaultValue:()=>""},{key:"source",converter:t.nullableConverter(t.converters.MessagePort),defaultValue:()=>null},{key:"ports",converter:t.converters["sequence"],defaultValue:()=>new Array(0)}]);t.converters.CloseEventInit=t.dictionaryConverter([...h,{key:"wasClean",converter:t.converters.boolean,defaultValue:()=>false},{key:"code",converter:t.converters["unsigned short"],defaultValue:()=>0},{key:"reason",converter:t.converters.USVString,defaultValue:()=>""}]);t.converters.ErrorEventInit=t.dictionaryConverter([...h,{key:"message",converter:t.converters.DOMString,defaultValue:()=>""},{key:"filename",converter:t.converters.USVString,defaultValue:()=>""},{key:"lineno",converter:t.converters["unsigned long"],defaultValue:()=>0},{key:"colno",converter:t.converters["unsigned long"],defaultValue:()=>0},{key:"error",converter:t.converters.any}]);A.exports={MessageEvent:a,CloseEvent:Q,ErrorEvent:B,createFastMessageEvent:c}}});var require_constants5=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/constants.js"(e,A){"use strict";init_define_process();var t="258EAFA5-E914-47DA-95CA-C5AB0DC85B11";var r={enumerable:true,writable:false,configurable:false};var i={CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3};var s={NOT_SENT:0,PROCESSING:1,SENT:2};var n={CONTINUATION:0,TEXT:1,BINARY:2,CLOSE:8,PING:9,PONG:10};var o=2**16-1;var a={INFO:0,PAYLOADLENGTH_16:2,PAYLOADLENGTH_64:3,READ_DATA:4};var c=Buffer.allocUnsafe(0);var l={string:1,typedArray:2,arrayBuffer:3,blob:4};A.exports={uid:t,sentCloseFrameState:s,staticPropertyDescriptors:r,states:i,opcodes:n,maxUnsigned16Bit:o,parserStates:a,emptyBuffer:c,sendHints:l}}});var require_symbols5=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/symbols.js"(e,A){"use strict";init_define_process();A.exports={kWebSocketURL:Symbol("url"),kReadyState:Symbol("ready state"),kController:Symbol("controller"),kResponse:Symbol("response"),kBinaryType:Symbol("binary type"),kSentClose:Symbol("sent close"),kReceivedClose:Symbol("received close"),kByteParser:Symbol("byte parser")}}});var require_util7=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/util.js"(e,A){"use strict";init_define_process();var{kReadyState:t,kController:r,kResponse:i,kBinaryType:s,kWebSocketURL:n}=require_symbols5();var{states:o,opcodes:a}=require_constants5();var{ErrorEvent:c,createFastMessageEvent:l}=require_events();var{isUtf8:g}=__nccwpck_require__(300);var{collectASequenceOfCodePointsFast:Q,removeHTTPWhitespace:u}=require_data_url();function isConnecting(e){return e[t]===o.CONNECTING}__name(isConnecting,"isConnecting");function isEstablished(e){return e[t]===o.OPEN}__name(isEstablished,"isEstablished");function isClosing(e){return e[t]===o.CLOSING}__name(isClosing,"isClosing");function isClosed(e){return e[t]===o.CLOSED}__name(isClosed,"isClosed");function fireEvent(e,A,t=((e,A)=>new Event(e,A)),r={}){const i=t(e,r);A.dispatchEvent(i)}__name(fireEvent,"fireEvent");function websocketMessageReceived(e,A,r){if(e[t]!==o.OPEN){return}let i;if(A===a.TEXT){try{i=h(r)}catch{failWebsocketConnection(e,"Received invalid UTF-8 in text frame.");return}}else if(A===a.BINARY){if(e[s]==="blob"){i=new Blob([r])}else{i=toArrayBuffer(r)}}fireEvent("message",e,l,{origin:e[n].origin,data:i})}__name(websocketMessageReceived,"websocketMessageReceived");function toArrayBuffer(e){if(e.byteLength===e.buffer.byteLength){return e.buffer}return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}__name(toArrayBuffer,"toArrayBuffer");function isValidSubprotocol(e){if(e.length===0){return false}for(let A=0;A126||t===34||t===40||t===41||t===44||t===47||t===58||t===59||t===60||t===61||t===62||t===63||t===64||t===91||t===92||t===93||t===123||t===125){return false}}return true}__name(isValidSubprotocol,"isValidSubprotocol");function isValidStatusCode(e){if(e>=1e3&&e<1015){return e!==1004&&e!==1005&&e!==1006}return e>=3e3&&e<=4999}__name(isValidStatusCode,"isValidStatusCode");function failWebsocketConnection(e,A){const{[r]:t,[i]:s}=e;t.abort();if(s?.socket&&!s.socket.destroyed){s.socket.destroy()}if(A){fireEvent("error",e,((e,A)=>new c(e,A)),{error:new Error(A),message:A})}}__name(failWebsocketConnection,"failWebsocketConnection");function isControlFrame(e){return e===a.CLOSE||e===a.PING||e===a.PONG}__name(isControlFrame,"isControlFrame");function isContinuationFrame(e){return e===a.CONTINUATION}__name(isContinuationFrame,"isContinuationFrame");function isTextBinaryFrame(e){return e===a.TEXT||e===a.BINARY}__name(isTextBinaryFrame,"isTextBinaryFrame");function isValidOpcode(e){return isTextBinaryFrame(e)||isContinuationFrame(e)||isControlFrame(e)}__name(isValidOpcode,"isValidOpcode");function parseExtensions(e){const A={position:0};const t=new Map;while(A.position57){return false}}return true}__name(isValidClientWindowBits,"isValidClientWindowBits");var E=typeof define_process_default.versions.icu==="string";var B=E?new TextDecoder("utf-8",{fatal:true}):void 0;var h=E?B.decode.bind(B):function(e){if(g(e)){return e.toString("utf-8")}throw new TypeError("Invalid utf-8 received.")};A.exports={isConnecting:isConnecting,isEstablished:isEstablished,isClosing:isClosing,isClosed:isClosed,fireEvent:fireEvent,isValidSubprotocol:isValidSubprotocol,isValidStatusCode:isValidStatusCode,failWebsocketConnection:failWebsocketConnection,websocketMessageReceived:websocketMessageReceived,utf8Decode:h,isControlFrame:isControlFrame,isContinuationFrame:isContinuationFrame,isTextBinaryFrame:isTextBinaryFrame,isValidOpcode:isValidOpcode,parseExtensions:parseExtensions,isValidClientWindowBits:isValidClientWindowBits}}});var require_frame=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/frame.js"(e,A){"use strict";init_define_process();var{maxUnsigned16Bit:t}=require_constants5();var r=16386;var i;var s=null;var n=r;try{i=__nccwpck_require__(113)}catch{i={randomFillSync:__name((function randomFillSync(e,A,t){for(let A=0;At){n+=8;s=127}else if(i>125){n+=2;s=126}const o=Buffer.allocUnsafe(i+n);o[0]=o[1]=0;o[0]|=128;o[0]=(o[0]&240)+e;o[n-4]=r[0];o[n-3]=r[1];o[n-2]=r[2];o[n-1]=r[3];o[1]=s;if(s===126){o.writeUInt16BE(i,2)}else if(s===127){o[2]=o[3]=0;o.writeUIntBE(i,4,6)}o[1]|=128;for(let e=0;enew d(e,A)),{wasClean:t,code:s,reason:n});if(I.close.hasSubscribers){I.close.publish({websocket:e,code:s,reason:n})}}__name(onSocketClose,"onSocketClose");function onSocketError(e){const{ws:A}=this;A[o]=r.CLOSING;if(I.socketError.hasSubscribers){I.socketError.publish(e)}this.destroy()}__name(onSocketError,"onSocketError");A.exports={establishWebSocketConnection:establishWebSocketConnection,closeWebSocketConnection:closeWebSocketConnection}}});var require_permessage_deflate=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/permessage-deflate.js"(e,A){"use strict";init_define_process();var{createInflateRaw:t,Z_DEFAULT_WINDOWBITS:r}=__nccwpck_require__(796);var{isValidClientWindowBits:i}=require_util7();var s=Buffer.from([0,0,255,255]);var n=Symbol("kBuffer");var o=Symbol("kLength");var a,c;var l=class _PerMessageDeflate{constructor(e){__privateAdd(this,a,void 0);__privateAdd(this,c,{});__privateGet(this,c).serverNoContextTakeover=e.has("server_no_context_takeover");__privateGet(this,c).serverMaxWindowBits=e.get("server_max_window_bits")}decompress(e,A,l){if(!__privateGet(this,a)){let e=r;if(__privateGet(this,c).serverMaxWindowBits){if(!i(__privateGet(this,c).serverMaxWindowBits)){l(new Error("Invalid server_max_window_bits"));return}e=Number.parseInt(__privateGet(this,c).serverMaxWindowBits)}__privateSet(this,a,t({windowBits:e}));__privateGet(this,a)[n]=[];__privateGet(this,a)[o]=0;__privateGet(this,a).on("data",(e=>{__privateGet(this,a)[n].push(e);__privateGet(this,a)[o]+=e.length}));__privateGet(this,a).on("error",(e=>{__privateSet(this,a,null);l(e)}))}__privateGet(this,a).write(e);if(A){__privateGet(this,a).write(s)}__privateGet(this,a).flush((()=>{const e=Buffer.concat(__privateGet(this,a)[n],__privateGet(this,a)[o]);__privateGet(this,a)[n].length=0;__privateGet(this,a)[o]=0;l(null,e)}))}};a=new WeakMap;c=new WeakMap;__name(l,"PerMessageDeflate");var g=l;A.exports={PerMessageDeflate:g}}});var require_receiver=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/receiver.js"(e,A){"use strict";init_define_process();var{Writable:t}=__nccwpck_require__(781);var r=__nccwpck_require__(491);var{parserStates:i,opcodes:s,states:n,emptyBuffer:o,sentCloseFrameState:a}=require_constants5();var{kReadyState:c,kSentClose:l,kResponse:g,kReceivedClose:Q}=require_symbols5();var{channels:u}=require_diagnostics();var{isValidStatusCode:E,isValidOpcode:B,failWebsocketConnection:h,websocketMessageReceived:C,utf8Decode:I,isControlFrame:d,isTextBinaryFrame:f,isContinuationFrame:p}=require_util7();var{WebsocketFrameSend:m}=require_frame();var{closeWebSocketConnection:_}=require_connection();var{PerMessageDeflate:w}=require_permessage_deflate();var y,b,k,D,R,v,S;var F=class _ByteParser extends t{constructor(e,A){super();__privateAdd(this,y,[]);__privateAdd(this,b,0);__privateAdd(this,k,false);__privateAdd(this,D,i.INFO);__privateAdd(this,R,{});__privateAdd(this,v,[]);__privateAdd(this,S,void 0);this.ws=e;__privateSet(this,S,A==null?new Map:A);if(__privateGet(this,S).has("permessage-deflate")){__privateGet(this,S).set("permessage-deflate",new w(A))}}_write(e,A,t){__privateGet(this,y).push(e);__privateSet(this,b,__privateGet(this,b)+e.length);__privateSet(this,k,true);this.run(t)}run(e){while(__privateGet(this,k)){if(__privateGet(this,D)===i.INFO){if(__privateGet(this,b)<2){return e()}const A=this.consume(2);const t=(A[0]&128)!==0;const r=A[0]&15;const n=(A[1]&128)===128;const o=!t&&r!==s.CONTINUATION;const a=A[1]&127;const c=A[0]&64;const l=A[0]&32;const g=A[0]&16;if(!B(r)){h(this.ws,"Invalid opcode received");return e()}if(n){h(this.ws,"Frame cannot be masked");return e()}if(c!==0&&!__privateGet(this,S).has("permessage-deflate")){h(this.ws,"Expected RSV1 to be clear.");return}if(l!==0||g!==0){h(this.ws,"RSV1, RSV2, RSV3 must be clear");return}if(o&&!f(r)){h(this.ws,"Invalid frame type was fragmented.");return}if(f(r)&&__privateGet(this,v).length>0){h(this.ws,"Expected continuation frame");return}if(__privateGet(this,R).fragmented&&o){h(this.ws,"Fragmented frame exceeded 125 bytes.");return}if((a>125||o)&&d(r)){h(this.ws,"Control frame either too large or fragmented");return}if(p(r)&&__privateGet(this,v).length===0&&!__privateGet(this,R).compressed){h(this.ws,"Unexpected continuation frame");return}if(a<=125){__privateGet(this,R).payloadLength=a;__privateSet(this,D,i.READ_DATA)}else if(a===126){__privateSet(this,D,i.PAYLOADLENGTH_16)}else if(a===127){__privateSet(this,D,i.PAYLOADLENGTH_64)}if(f(r)){__privateGet(this,R).binaryType=r;__privateGet(this,R).compressed=c!==0}__privateGet(this,R).opcode=r;__privateGet(this,R).masked=n;__privateGet(this,R).fin=t;__privateGet(this,R).fragmented=o}else if(__privateGet(this,D)===i.PAYLOADLENGTH_16){if(__privateGet(this,b)<2){return e()}const A=this.consume(2);__privateGet(this,R).payloadLength=A.readUInt16BE(0);__privateSet(this,D,i.READ_DATA)}else if(__privateGet(this,D)===i.PAYLOADLENGTH_64){if(__privateGet(this,b)<8){return e()}const A=this.consume(8);const t=A.readUInt32BE(0);if(t>2**31-1){h(this.ws,"Received payload length > 2^31 bytes.");return}const r=A.readUInt32BE(4);__privateGet(this,R).payloadLength=(t<<8)+r;__privateSet(this,D,i.READ_DATA)}else if(__privateGet(this,D)===i.READ_DATA){if(__privateGet(this,b)<__privateGet(this,R).payloadLength){return e()}const A=this.consume(__privateGet(this,R).payloadLength);if(d(__privateGet(this,R).opcode)){__privateSet(this,k,this.parseControlFrame(A));__privateSet(this,D,i.INFO)}else{if(!__privateGet(this,R).compressed){__privateGet(this,v).push(A);if(!__privateGet(this,R).fragmented&&__privateGet(this,R).fin){const e=Buffer.concat(__privateGet(this,v));C(this.ws,__privateGet(this,R).binaryType,e);__privateGet(this,v).length=0}__privateSet(this,D,i.INFO)}else{__privateGet(this,S).get("permessage-deflate").decompress(A,__privateGet(this,R).fin,((A,t)=>{if(A){_(this.ws,1007,A.message,A.message.length);return}__privateGet(this,v).push(t);if(!__privateGet(this,R).fin){__privateSet(this,D,i.INFO);__privateSet(this,k,true);this.run(e);return}C(this.ws,__privateGet(this,R).binaryType,Buffer.concat(__privateGet(this,v)));__privateSet(this,k,true);__privateSet(this,D,i.INFO);__privateGet(this,v).length=0;this.run(e)}));__privateSet(this,k,false);break}}}}}consume(e){if(e>__privateGet(this,b)){throw new Error("Called consume() before buffers satiated.")}else if(e===0){return o}if(__privateGet(this,y)[0].length===e){__privateSet(this,b,__privateGet(this,b)-__privateGet(this,y)[0].length);return __privateGet(this,y).shift()}const A=Buffer.allocUnsafe(e);let t=0;while(t!==e){const r=__privateGet(this,y)[0];const{length:i}=r;if(i+t===e){A.set(__privateGet(this,y).shift(),t);break}else if(i+t>e){A.set(r.subarray(0,e-t),t);__privateGet(this,y)[0]=r.subarray(e-t);break}else{A.set(__privateGet(this,y).shift(),t);t+=r.length}}__privateSet(this,b,__privateGet(this,b)-e);return A}parseCloseBody(e){r(e.length!==1);let A;if(e.length>=2){A=e.readUInt16BE(0)}if(A!==void 0&&!E(A)){return{code:1002,reason:"Invalid status code",error:true}}let t=e.subarray(2);if(t[0]===239&&t[1]===187&&t[2]===191){t=t.subarray(3)}try{t=I(t)}catch{return{code:1007,reason:"Invalid UTF-8",error:true}}return{code:A,reason:t,error:false}}parseControlFrame(e){const{opcode:A,payloadLength:t}=__privateGet(this,R);if(A===s.CLOSE){if(t===1){h(this.ws,"Received close frame with a 1-byte body.");return false}__privateGet(this,R).closeInfo=this.parseCloseBody(e);if(__privateGet(this,R).closeInfo.error){const{code:e,reason:A}=__privateGet(this,R).closeInfo;_(this.ws,e,A,A.length);h(this.ws,A);return false}if(this.ws[l]!==a.SENT){let e=o;if(__privateGet(this,R).closeInfo.code){e=Buffer.allocUnsafe(2);e.writeUInt16BE(__privateGet(this,R).closeInfo.code,0)}const A=new m(e);this.ws[g].socket.write(A.createFrame(s.CLOSE),(e=>{if(!e){this.ws[l]=a.SENT}}))}this.ws[c]=n.CLOSING;this.ws[Q]=true;return false}else if(A===s.PING){if(!this.ws[Q]){const A=new m(e);this.ws[g].socket.write(A.createFrame(s.PONG));if(u.ping.hasSubscribers){u.ping.publish({payload:e})}}}else if(A===s.PONG){if(u.pong.hasSubscribers){u.pong.publish({payload:e})}}return true}get closingInfo(){return __privateGet(this,R).closeInfo}};y=new WeakMap;b=new WeakMap;k=new WeakMap;D=new WeakMap;R=new WeakMap;v=new WeakMap;S=new WeakMap;__name(F,"ByteParser");var M=F;A.exports={ByteParser:M}}});var require_sender=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/sender.js"(e,A){"use strict";init_define_process();var{WebsocketFrameSend:t}=require_frame();var{opcodes:r,sendHints:i}=require_constants5();var s=require_fixed_queue();var n=Buffer[Symbol.species];var o,a,c,l,g;var Q=class _SendQueue{constructor(e){__privateAdd(this,l);__privateAdd(this,o,new s);__privateAdd(this,a,false);__privateAdd(this,c,void 0);__privateSet(this,c,e)}add(e,A,t){if(t!==i.blob){const r=createFrame(e,t);if(!__privateGet(this,a)){__privateGet(this,c).write(r,A)}else{const e={promise:null,callback:A,frame:r};__privateGet(this,o).push(e)}return}const r={promise:e.arrayBuffer().then((e=>{r.promise=null;r.frame=createFrame(e,t)})),callback:A,frame:null};__privateGet(this,o).push(r);if(!__privateGet(this,a)){__privateMethod(this,l,g).call(this)}}};o=new WeakMap;a=new WeakMap;c=new WeakMap;l=new WeakSet;g=__name((async function(){__privateSet(this,a,true);const e=__privateGet(this,o);while(!e.isEmpty()){const A=e.shift();if(A.promise!==null){await A.promise}__privateGet(this,c).write(A.frame,A.callback);A.callback=A.frame=null}__privateSet(this,a,false)}),"#run");__name(Q,"SendQueue");var u=Q;function createFrame(e,A){return new t(toBuffer(e,A)).createFrame(A===i.string?r.TEXT:r.BINARY)}__name(createFrame,"createFrame");function toBuffer(e,A){switch(A){case i.string:return Buffer.from(e);case i.arrayBuffer:case i.blob:return new n(e);case i.typedArray:return new n(e.buffer,e.byteOffset,e.byteLength)}}__name(toBuffer,"toBuffer");A.exports={SendQueue:u}}});var require_websocket=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/websocket/websocket.js"(e,A){"use strict";init_define_process();var{webidl:t}=require_webidl();var{URLSerializer:r}=require_data_url();var{environmentSettingsObject:i}=require_util2();var{staticPropertyDescriptors:s,states:n,sentCloseFrameState:o,sendHints:a}=require_constants5();var{kWebSocketURL:c,kReadyState:l,kController:g,kBinaryType:Q,kResponse:u,kSentClose:E,kByteParser:B}=require_symbols5();var{isConnecting:h,isEstablished:C,isClosing:I,isValidSubprotocol:d,fireEvent:f}=require_util7();var{establishWebSocketConnection:p,closeWebSocketConnection:m}=require_connection();var{ByteParser:_}=require_receiver();var{kEnumerableProperty:w,isBlobLike:y}=require_util();var{getGlobalDispatcher:b}=require_global2();var{types:k}=__nccwpck_require__(837);var{ErrorEvent:D,CloseEvent:R}=require_events();var{SendQueue:v}=require_sender();var S,F,M,N,U,L,T;var G=class _WebSocket extends EventTarget{constructor(e,A=[]){super();__privateAdd(this,L);__privateAdd(this,S,{open:null,error:null,close:null,message:null});__privateAdd(this,F,0);__privateAdd(this,M,"");__privateAdd(this,N,"");__privateAdd(this,U,void 0);t.util.markAsUncloneable(this);const r="WebSocket constructor";t.argumentLengthCheck(arguments,1,r);const s=t.converters["DOMString or sequence or WebSocketInit"](A,r,"options");e=t.converters.USVString(e,r,"url");A=s.protocols;const n=i.settingsObject.baseUrl;let a;try{a=new URL(e,n)}catch(e){throw new DOMException(e,"SyntaxError")}if(a.protocol==="http:"){a.protocol="ws:"}else if(a.protocol==="https:"){a.protocol="wss:"}if(a.protocol!=="ws:"&&a.protocol!=="wss:"){throw new DOMException(`Expected a ws: or wss: protocol, got ${a.protocol}`,"SyntaxError")}if(a.hash||a.href.endsWith("#")){throw new DOMException("Got fragment","SyntaxError")}if(typeof A==="string"){A=[A]}if(A.length!==new Set(A.map((e=>e.toLowerCase()))).size){throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError")}if(A.length>0&&!A.every((e=>d(e)))){throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError")}this[c]=new URL(a.href);const u=i.settingsObject;this[g]=p(a,A,u,this,((e,A)=>__privateMethod(this,L,T).call(this,e,A)),s);this[l]=_WebSocket.CONNECTING;this[E]=o.NOT_SENT;this[Q]="blob"}close(e=void 0,A=void 0){t.brandCheck(this,_WebSocket);const r="WebSocket.close";if(e!==void 0){e=t.converters["unsigned short"](e,r,"code",{clamp:true})}if(A!==void 0){A=t.converters.USVString(A,r,"reason")}if(e!==void 0){if(e!==1e3&&(e<3e3||e>4999)){throw new DOMException("invalid code","InvalidAccessError")}}let i=0;if(A!==void 0){i=Buffer.byteLength(A);if(i>123){throw new DOMException(`Reason must be less than 123 bytes; received ${i}`,"SyntaxError")}}m(this,e,A,i)}send(e){t.brandCheck(this,_WebSocket);const A="WebSocket.send";t.argumentLengthCheck(arguments,1,A);e=t.converters.WebSocketSendData(e,A,"data");if(h(this)){throw new DOMException("Sent before connected.","InvalidStateError")}if(!C(this)||I(this)){return}if(typeof e==="string"){const A=Buffer.byteLength(e);__privateSet(this,F,__privateGet(this,F)+A);__privateGet(this,U).add(e,(()=>{__privateSet(this,F,__privateGet(this,F)-A)}),a.string)}else if(k.isArrayBuffer(e)){__privateSet(this,F,__privateGet(this,F)+e.byteLength);__privateGet(this,U).add(e,(()=>{__privateSet(this,F,__privateGet(this,F)-e.byteLength)}),a.arrayBuffer)}else if(ArrayBuffer.isView(e)){__privateSet(this,F,__privateGet(this,F)+e.byteLength);__privateGet(this,U).add(e,(()=>{__privateSet(this,F,__privateGet(this,F)-e.byteLength)}),a.typedArray)}else if(y(e)){__privateSet(this,F,__privateGet(this,F)+e.size);__privateGet(this,U).add(e,(()=>{__privateSet(this,F,__privateGet(this,F)-e.size)}),a.blob)}}get readyState(){t.brandCheck(this,_WebSocket);return this[l]}get bufferedAmount(){t.brandCheck(this,_WebSocket);return __privateGet(this,F)}get url(){t.brandCheck(this,_WebSocket);return r(this[c])}get extensions(){t.brandCheck(this,_WebSocket);return __privateGet(this,N)}get protocol(){t.brandCheck(this,_WebSocket);return __privateGet(this,M)}get onopen(){t.brandCheck(this,_WebSocket);return __privateGet(this,S).open}set onopen(e){t.brandCheck(this,_WebSocket);if(__privateGet(this,S).open){this.removeEventListener("open",__privateGet(this,S).open)}if(typeof e==="function"){__privateGet(this,S).open=e;this.addEventListener("open",e)}else{__privateGet(this,S).open=null}}get onerror(){t.brandCheck(this,_WebSocket);return __privateGet(this,S).error}set onerror(e){t.brandCheck(this,_WebSocket);if(__privateGet(this,S).error){this.removeEventListener("error",__privateGet(this,S).error)}if(typeof e==="function"){__privateGet(this,S).error=e;this.addEventListener("error",e)}else{__privateGet(this,S).error=null}}get onclose(){t.brandCheck(this,_WebSocket);return __privateGet(this,S).close}set onclose(e){t.brandCheck(this,_WebSocket);if(__privateGet(this,S).close){this.removeEventListener("close",__privateGet(this,S).close)}if(typeof e==="function"){__privateGet(this,S).close=e;this.addEventListener("close",e)}else{__privateGet(this,S).close=null}}get onmessage(){t.brandCheck(this,_WebSocket);return __privateGet(this,S).message}set onmessage(e){t.brandCheck(this,_WebSocket);if(__privateGet(this,S).message){this.removeEventListener("message",__privateGet(this,S).message)}if(typeof e==="function"){__privateGet(this,S).message=e;this.addEventListener("message",e)}else{__privateGet(this,S).message=null}}get binaryType(){t.brandCheck(this,_WebSocket);return this[Q]}set binaryType(e){t.brandCheck(this,_WebSocket);if(e!=="blob"&&e!=="arraybuffer"){this[Q]="blob"}else{this[Q]=e}}};S=new WeakMap;F=new WeakMap;M=new WeakMap;N=new WeakMap;U=new WeakMap;L=new WeakSet;T=__name((function(e,A){this[u]=e;const t=new _(this,A);t.on("drain",onParserDrain);t.on("error",onParserError.bind(this));e.socket.ws=this;this[B]=t;__privateSet(this,U,new v(e.socket));this[l]=n.OPEN;const r=e.headersList.get("sec-websocket-extensions");if(r!==null){__privateSet(this,N,r)}const i=e.headersList.get("sec-websocket-protocol");if(i!==null){__privateSet(this,M,i)}f("open",this)}),"#onConnectionEstablished");__name(G,"WebSocket");var H=G;H.CONNECTING=H.prototype.CONNECTING=n.CONNECTING;H.OPEN=H.prototype.OPEN=n.OPEN;H.CLOSING=H.prototype.CLOSING=n.CLOSING;H.CLOSED=H.prototype.CLOSED=n.CLOSED;Object.defineProperties(H.prototype,{CONNECTING:s,OPEN:s,CLOSING:s,CLOSED:s,url:w,readyState:w,bufferedAmount:w,onopen:w,onerror:w,onclose:w,close:w,onmessage:w,binaryType:w,send:w,extensions:w,protocol:w,[Symbol.toStringTag]:{value:"WebSocket",writable:false,enumerable:false,configurable:true}});Object.defineProperties(H,{CONNECTING:s,OPEN:s,CLOSING:s,CLOSED:s});t.converters["sequence"]=t.sequenceConverter(t.converters.DOMString);t.converters["DOMString or sequence"]=function(e,A,r){if(t.util.Type(e)==="Object"&&Symbol.iterator in e){return t.converters["sequence"](e)}return t.converters.DOMString(e,A,r)};t.converters.WebSocketInit=t.dictionaryConverter([{key:"protocols",converter:t.converters["DOMString or sequence"],defaultValue:()=>new Array(0)},{key:"dispatcher",converter:t.converters.any,defaultValue:()=>b()},{key:"headers",converter:t.nullableConverter(t.converters.HeadersInit)}]);t.converters["DOMString or sequence or WebSocketInit"]=function(e){if(t.util.Type(e)==="Object"&&!(Symbol.iterator in e)){return t.converters.WebSocketInit(e)}return{protocols:t.converters["DOMString or sequence"](e)}};t.converters.WebSocketSendData=function(e){if(t.util.Type(e)==="Object"){if(y(e)){return t.converters.Blob(e,{strict:false})}if(ArrayBuffer.isView(e)||k.isArrayBuffer(e)){return t.converters.BufferSource(e)}}return t.converters.USVString(e)};function onParserDrain(){this.ws[u].socket.resume()}__name(onParserDrain,"onParserDrain");function onParserError(e){let A;let t;if(e instanceof R){A=e.reason;t=e.code}else{A=e.message}f("error",this,(()=>new D("error",{error:e,message:A})));m(this,t)}__name(onParserError,"onParserError");A.exports={WebSocket:H}}});var require_util8=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/eventsource/util.js"(e,A){"use strict";init_define_process();function isValidLastEventId(e){return e.indexOf("\0")===-1}__name(isValidLastEventId,"isValidLastEventId");function isASCIINumber(e){if(e.length===0)return false;for(let A=0;A57)return false}return true}__name(isASCIINumber,"isASCIINumber");function delay(e){return new Promise((A=>{setTimeout(A,e).unref()}))}__name(delay,"delay");A.exports={isValidLastEventId:isValidLastEventId,isASCIINumber:isASCIINumber,delay:delay}}});var require_eventsource_stream=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/eventsource/eventsource-stream.js"(e,A){"use strict";init_define_process();var{Transform:t}=__nccwpck_require__(781);var{isASCIINumber:r,isValidLastEventId:i}=require_util8();var s=[239,187,191];var n=10;var o=13;var a=58;var c=32;var l=class _EventSourceStream extends t{state=null;checkBOM=true;crlfCheck=false;eventEndCheck=false;buffer=null;pos=0;event={data:void 0,event:void 0,id:void 0,retry:void 0};constructor(e={}){e.readableObjectMode=true;super(e);this.state=e.eventSourceSettings||{};if(e.push){this.push=e.push}}_transform(e,A,t){if(e.length===0){t();return}if(this.buffer){this.buffer=Buffer.concat([this.buffer,e])}else{this.buffer=e}if(this.checkBOM){switch(this.buffer.length){case 1:if(this.buffer[0]===s[0]){t();return}this.checkBOM=false;t();return;case 2:if(this.buffer[0]===s[0]&&this.buffer[1]===s[1]){t();return}this.checkBOM=false;break;case 3:if(this.buffer[0]===s[0]&&this.buffer[1]===s[1]&&this.buffer[2]===s[2]){this.buffer=Buffer.alloc(0);this.checkBOM=false;t();return}this.checkBOM=false;break;default:if(this.buffer[0]===s[0]&&this.buffer[1]===s[1]&&this.buffer[2]===s[2]){this.buffer=this.buffer.subarray(3)}this.checkBOM=false;break}}while(this.pos0){A[s]=n}break}}processEvent(e){if(e.retry&&r(e.retry)){this.state.reconnectionTime=parseInt(e.retry,10)}if(e.id&&i(e.id)){this.state.lastEventId=e.id}if(e.data!==void 0){this.push({type:e.event||"message",options:{data:e.data,lastEventId:this.state.lastEventId,origin:this.state.origin}})}}clearEvent(){this.event={data:void 0,event:void 0,id:void 0,retry:void 0}}};__name(l,"EventSourceStream");var g=l;A.exports={EventSourceStream:g}}});var require_eventsource=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/lib/web/eventsource/eventsource.js"(e,A){"use strict";init_define_process();var{pipeline:t}=__nccwpck_require__(781);var{fetching:r}=require_fetch();var{makeRequest:i}=require_request();var{webidl:s}=require_webidl();var{EventSourceStream:n}=require_eventsource_stream();var{parseMIMEType:o}=require_data_url();var{createFastMessageEvent:a}=require_events();var{isNetworkError:c}=require_response();var{delay:l}=require_util8();var{kEnumerableProperty:g}=require_util();var{environmentSettingsObject:Q}=require_util2();var u=false;var E=3e3;var B=0;var h=1;var C=2;var I="anonymous";var d="use-credentials";var f,p,m,_,w,y,b,k,D,R,v,S;var F=class _EventSource extends EventTarget{constructor(e,A={}){super();__privateAdd(this,D);__privateAdd(this,v);__privateAdd(this,f,{open:null,error:null,message:null});__privateAdd(this,p,null);__privateAdd(this,m,false);__privateAdd(this,_,B);__privateAdd(this,w,null);__privateAdd(this,y,null);__privateAdd(this,b,void 0);__privateAdd(this,k,void 0);s.util.markAsUncloneable(this);const t="EventSource constructor";s.argumentLengthCheck(arguments,1,t);if(!u){u=true;define_process_default.emitWarning("EventSource is experimental, expect them to change at any time.",{code:"UNDICI-ES"})}e=s.converters.USVString(e,t,"url");A=s.converters.EventSourceInitDict(A,t,"eventSourceInitDict");__privateSet(this,b,A.dispatcher);__privateSet(this,k,{lastEventId:"",reconnectionTime:E});const r=Q;let n;try{n=new URL(e,r.settingsObject.baseUrl);__privateGet(this,k).origin=n.origin}catch(e){throw new DOMException(e,"SyntaxError")}__privateSet(this,p,n.href);let o=I;if(A.withCredentials){o=d;__privateSet(this,m,true)}const a={redirect:"follow",keepalive:true,mode:"cors",credentials:o==="anonymous"?"same-origin":"omit",referrer:"no-referrer"};a.client=Q.settingsObject;a.headersList=[["accept",{name:"accept",value:"text/event-stream"}]];a.cache="no-store";a.initiator="other";a.urlList=[new URL(__privateGet(this,p))];__privateSet(this,w,i(a));__privateMethod(this,D,R).call(this)}get readyState(){return __privateGet(this,_)}get url(){return __privateGet(this,p)}get withCredentials(){return __privateGet(this,m)}close(){s.brandCheck(this,_EventSource);if(__privateGet(this,_)===C)return;__privateSet(this,_,C);__privateGet(this,y).abort();__privateSet(this,w,null)}get onopen(){return __privateGet(this,f).open}set onopen(e){if(__privateGet(this,f).open){this.removeEventListener("open",__privateGet(this,f).open)}if(typeof e==="function"){__privateGet(this,f).open=e;this.addEventListener("open",e)}else{__privateGet(this,f).open=null}}get onmessage(){return __privateGet(this,f).message}set onmessage(e){if(__privateGet(this,f).message){this.removeEventListener("message",__privateGet(this,f).message)}if(typeof e==="function"){__privateGet(this,f).message=e;this.addEventListener("message",e)}else{__privateGet(this,f).message=null}}get onerror(){return __privateGet(this,f).error}set onerror(e){if(__privateGet(this,f).error){this.removeEventListener("error",__privateGet(this,f).error)}if(typeof e==="function"){__privateGet(this,f).error=e;this.addEventListener("error",e)}else{__privateGet(this,f).error=null}}};f=new WeakMap;p=new WeakMap;m=new WeakMap;_=new WeakMap;w=new WeakMap;y=new WeakMap;b=new WeakMap;k=new WeakMap;D=new WeakSet;R=__name((function(){if(__privateGet(this,_)===C)return;__privateSet(this,_,B);const e={request:__privateGet(this,w),dispatcher:__privateGet(this,b)};const A=__name((e=>{if(c(e)){this.dispatchEvent(new Event("error"));this.close()}__privateMethod(this,v,S).call(this)}),"processEventSourceEndOfBody");e.processResponseEndOfBody=A;e.processResponse=e=>{if(c(e)){if(e.aborted){this.close();this.dispatchEvent(new Event("error"));return}else{__privateMethod(this,v,S).call(this);return}}const A=e.headersList.get("content-type",true);const r=A!==null?o(A):"failure";const i=r!=="failure"&&r.essence==="text/event-stream";if(e.status!==200||i===false){this.close();this.dispatchEvent(new Event("error"));return}__privateSet(this,_,h);this.dispatchEvent(new Event("open"));__privateGet(this,k).origin=e.urlList[e.urlList.length-1].origin;const s=new n({eventSourceSettings:__privateGet(this,k),push:e=>{this.dispatchEvent(a(e.type,e.options))}});t(e.body.stream,s,(e=>{if(e?.aborted===false){this.close();this.dispatchEvent(new Event("error"))}}))};__privateSet(this,y,r(e))}),"#connect");v=new WeakSet;S=__name((async function(){if(__privateGet(this,_)===C)return;__privateSet(this,_,B);this.dispatchEvent(new Event("error"));await l(__privateGet(this,k).reconnectionTime);if(__privateGet(this,_)!==B)return;if(__privateGet(this,k).lastEventId.length){__privateGet(this,w).headersList.set("last-event-id",__privateGet(this,k).lastEventId,true)}__privateMethod(this,D,R).call(this)}),"#reconnect");__name(F,"EventSource");var M=F;var N={CONNECTING:{__proto__:null,configurable:false,enumerable:true,value:B,writable:false},OPEN:{__proto__:null,configurable:false,enumerable:true,value:h,writable:false},CLOSED:{__proto__:null,configurable:false,enumerable:true,value:C,writable:false}};Object.defineProperties(M,N);Object.defineProperties(M.prototype,N);Object.defineProperties(M.prototype,{close:g,onerror:g,onmessage:g,onopen:g,readyState:g,url:g,withCredentials:g});s.converters.EventSourceInitDict=s.dictionaryConverter([{key:"withCredentials",converter:s.converters.boolean,defaultValue:()=>false},{key:"dispatcher",converter:s.converters.any}]);A.exports={EventSource:M,defaultReconnectionTime:E}}});var require_undici=__commonJS({"../../node_modules/.pnpm/undici@6.21.0/node_modules/undici/index.js"(e,A){"use strict";init_define_process();var t=require_client();var r=require_dispatcher();var i=require_pool();var s=require_balanced_pool();var n=require_agent();var o=require_proxy_agent();var a=require_env_http_proxy_agent();var c=require_retry_agent();var l=require_errors();var g=require_util();var{InvalidArgumentError:Q}=l;var u=require_api();var E=require_connect();var B=require_mock_client();var h=require_mock_agent();var C=require_mock_pool();var I=require_mock_errors();var d=require_retry_handler();var{getGlobalDispatcher:f,setGlobalDispatcher:p}=require_global2();var m=require_decorator_handler();var _=require_redirect_handler();var w=require_redirect_interceptor();Object.assign(r.prototype,u);A.exports.Dispatcher=r;A.exports.Client=t;A.exports.Pool=i;A.exports.BalancedPool=s;A.exports.Agent=n;A.exports.ProxyAgent=o;A.exports.EnvHttpProxyAgent=a;A.exports.RetryAgent=c;A.exports.RetryHandler=d;A.exports.DecoratorHandler=m;A.exports.RedirectHandler=_;A.exports.createRedirectInterceptor=w;A.exports.interceptors={redirect:require_redirect(),retry:require_retry(),dump:require_dump()};A.exports.buildConnector=E;A.exports.errors=l;A.exports.util={parseHeaders:g.parseHeaders,headerNameToString:g.headerNameToString};function makeDispatcher(e){return(A,t,r)=>{if(typeof t==="function"){r=t;t=null}if(!A||typeof A!=="string"&&typeof A!=="object"&&!(A instanceof URL)){throw new Q("invalid url")}if(t!=null&&typeof t!=="object"){throw new Q("invalid opts")}if(t&&t.path!=null){if(typeof t.path!=="string"){throw new Q("invalid opts.path")}let e=t.path;if(!t.path.startsWith("/")){e=`/${e}`}A=new URL(g.parseOrigin(A).origin+e)}else{if(!t){t=typeof A==="object"?A:{}}A=g.parseURL(A)}const{agent:i,dispatcher:s=f()}=t;if(i){throw new Q("unsupported opts.agent. Did you mean opts.client?")}return e.call(s,{...t,origin:A.origin,path:A.search?`${A.pathname}${A.search}`:A.pathname,method:t.method||(t.body?"PUT":"GET")},r)}}__name(makeDispatcher,"makeDispatcher");A.exports.setGlobalDispatcher=p;A.exports.getGlobalDispatcher=f;var y=require_fetch().fetch;A.exports.fetch=__name((async function fetch2(e,A=void 0){try{return await y(e,A)}catch(e){if(e&&typeof e==="object"){Error.captureStackTrace(e)}throw e}}),"fetch");A.exports.Headers=require_headers().Headers;A.exports.Response=require_response().Response;A.exports.Request=require_request().Request;A.exports.FormData=require_formdata().FormData;A.exports.File=globalThis.File??__nccwpck_require__(300).File;A.exports.FileReader=require_filereader().FileReader;var{setGlobalOrigin:b,getGlobalOrigin:k}=require_global();A.exports.setGlobalOrigin=b;A.exports.getGlobalOrigin=k;var{CacheStorage:D}=require_cachestorage();var{kConstruct:R}=require_symbols4();A.exports.caches=new D(R);var{deleteCookie:v,getCookies:S,getSetCookies:F,setCookie:M}=require_cookies();A.exports.deleteCookie=v;A.exports.getCookies=S;A.exports.getSetCookies=F;A.exports.setCookie=M;var{parseMIMEType:N,serializeAMimeType:U}=require_data_url();A.exports.parseMIMEType=N;A.exports.serializeAMimeType=U;var{CloseEvent:L,ErrorEvent:T,MessageEvent:G}=require_events();A.exports.WebSocket=require_websocket().WebSocket;A.exports.CloseEvent=L;A.exports.ErrorEvent=T;A.exports.MessageEvent=G;A.exports.request=makeDispatcher(u.request);A.exports.stream=makeDispatcher(u.stream);A.exports.pipeline=makeDispatcher(u.pipeline);A.exports.connect=makeDispatcher(u.connect);A.exports.upgrade=makeDispatcher(u.upgrade);A.exports.MockClient=B;A.exports.MockPool=C;A.exports.MockAgent=h;A.exports.mockErrors=I;var{EventSource:H}=require_eventsource();A.exports.EventSource=H}});var fetch_exports={};__export(fetch_exports,{Blob:()=>Blob2,File:()=>import_node_buffer.File,FormData:()=>FormData,Headers:()=>Headers,Request:()=>Request,Response:()=>Response,WebSocket:()=>WebSocket,fetch:()=>fetch});function addDuplexToInit(e){return typeof e==="undefined"||typeof e==="object"&&e.duplex===void 0?{duplex:"half",...e}:e}async function fetch(e,A){const t=await import_undici.default.fetch(e,addDuplexToInit(A));const r=new Response(t.body,t);Object.defineProperty(r,"url",{value:t.url});return r}var import_node_buffer,import_undici,import_response,_Request,Request,Response,Headers,FormData,WebSocket,Blob2;var init_fetch=__esm({"src/primitives/fetch.js"(){"use strict";init_define_process();import_node_buffer=__nccwpck_require__(300);import_undici=__toESM(require_undici());import_response=__toESM(require_response());__name(addDuplexToInit,"addDuplexToInit");_Request=class _Request extends import_undici.default.Request{constructor(e,A){super(e,addDuplexToInit(A))}};__name(_Request,"Request");Request=_Request;Response=import_undici.default.Response;Response.error=function(){return(0,import_response.fromInnerResponse)((0,import_response.makeNetworkError)(),"")};__name(fetch,"fetch");({Headers:Headers,FormData:FormData,WebSocket:WebSocket}=import_undici.default);({Blob:Blob2}=globalThis)}});var load_exports={};__export(load_exports,{load:()=>load});module.exports=__toCommonJS(load_exports);init_define_process();var import_module=__toESM(__nccwpck_require__(188));function load(e={}){const A={};Object.assign(A,{TextDecoder:TextDecoder,TextEncoder:TextEncoder,TextEncoderStream:TextEncoderStream,TextDecoderStream:TextDecoderStream,atob:atob,btoa:btoa,performance:performance});const t=requireWithFakeGlobalScope({context:A,id:"console.js",sourceCode:__nccwpck_require__(435),scopedContext:e});Object.assign(A,{console:t.console});const r=requireWithFakeGlobalScope({context:A,id:"timers.js",sourceCode:__nccwpck_require__(509),scopedContext:e});Object.assign(A,{setTimeout:r.setTimeout,setInterval:r.setInterval});const i=requireWithFakeGlobalScope({context:A,id:"events.js",sourceCode:__nccwpck_require__(402),scopedContext:e});Object.assign(A,{Event:Event,EventTarget:EventTarget,FetchEvent:i.FetchEvent,PromiseRejectionEvent:i.PromiseRejectionEvent});Object.assign(A,__nccwpck_require__(511));const s=requireWithFakeGlobalScope({context:A,id:"abort-controller.js",sourceCode:__nccwpck_require__(462),scopedContext:{...e}});Object.assign(A,{AbortController:s.AbortController,AbortSignal:s.AbortSignal,DOMException:s.DOMException});const n=requireWithFakeGlobalScope({context:A,id:"url.js",sourceCode:__nccwpck_require__(959),scopedContext:{...e}});Object.assign(A,{URL:URL,URLSearchParams:URLSearchParams,URLPattern:n.URLPattern});Object.assign(A,{structuredClone:structuredClone});Object.assign(A,(init_fetch(),__toCommonJS(fetch_exports)));Object.assign(A,getCrypto(e));return A}__name(load,"load");function getCrypto(e){if(typeof SubtleCrypto!=="undefined"||e.SubtleCrypto){return{crypto:e.crypto||globalThis.crypto,Crypto:e.Crypto||globalThis.Crypto,CryptoKey:e.CryptoKey||globalThis.CryptoKey,SubtleCrypto:e.SubtleCrypto||globalThis.SubtleCrypto}}else{const e=__nccwpck_require__(113).webcrypto;return{crypto:e,Crypto:e.constructor,CryptoKey:e.CryptoKey,SubtleCrypto:e.subtle.constructor}}}__name(getCrypto,"getCrypto");function requireWithFakeGlobalScope(params){const getModuleCode=`(function(module,exports,require,globalThis,${Object.keys(params.scopedContext).join(",")}) {${params.sourceCode}\n})`;const module={exports:{},loaded:false,id:params.id};const moduleRequire=(import_module.default.createRequire||import_module.default.createRequireFromPath)(__filename);function throwingRequire(e){if(e.startsWith("./")){const A=e.replace(/^\.\//,"");if(!params.cache||!params.cache.has(A)){throw new Error(`Cannot find module '${A}'`)}return params.cache.get(A).exports}return moduleRequire(e)}__name(throwingRequire,"throwingRequire");throwingRequire.resolve=moduleRequire.resolve.bind(moduleRequire);eval(getModuleCode)(module,module.exports,throwingRequire,params.context,...Object.values(params.scopedContext));return module.exports}__name(requireWithFakeGlobalScope,"requireWithFakeGlobalScope");0&&0},511:(e,A,t)=>{"use strict";var r=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var n=Object.prototype.hasOwnProperty;var __export=(e,A)=>{for(var t in A)r(e,t,{get:A[t],enumerable:true})};var __copyProps=(e,A,t,o)=>{if(A&&typeof A==="object"||typeof A==="function"){for(let a of s(A))if(!n.call(e,a)&&a!==t)r(e,a,{get:()=>A[a],enumerable:!(o=i(A,a))||o.enumerable})}return e};var __toCommonJS=e=>__copyProps(r({},"__esModule",{value:true}),e);var o={};__export(o,{ReadableStream:()=>a.ReadableStream,ReadableStreamBYOBReader:()=>a.ReadableStreamBYOBReader,ReadableStreamDefaultReader:()=>a.ReadableStreamDefaultReader,TextDecoderStream:()=>a.TextDecoderStream,TextEncoderStream:()=>a.TextEncoderStream,TransformStream:()=>a.TransformStream,WritableStream:()=>a.WritableStream,WritableStreamDefaultWriter:()=>a.WritableStreamDefaultWriter});e.exports=__toCommonJS(o);var a=t(356);0&&0},509:e=>{e.exports='"use strict";var a=Object.defineProperty,s=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,u=Object.prototype.hasOwnProperty,l=(t,e)=>{for(var r in e)a(t,r,{get:e[r],enumerable:!0})},y=(t,e,r,p)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of i(e))!u.call(t,o)&&o!==r&&a(t,o,{get:()=>e[o],enumerable:!(p=s(e,o))||p.enumerable});return t},v=t=>y(a({},"__esModule",{value:!0}),t),n={};l(n,{setInterval:()=>m,setTimeout:()=>_});module.exports=v(n);var _=new Proxy(setTimeout,{apply:(t,e,r)=>Reflect.apply(t,e,r)[Symbol.toPrimitive]()}),m=new Proxy(setInterval,{apply:(t,e,r)=>Reflect.apply(t,e,r)[Symbol.toPrimitive]()});\n'},959:e=>{e.exports='"use strict";var yt=Object.defineProperty,Le=Object.getOwnPropertyDescriptor,Ae=Object.getOwnPropertyNames,Te=Object.prototype.hasOwnProperty,h=(t,e)=>yt(t,"name",{value:e,configurable:!0}),Ue=(t,e)=>{for(var s in e)yt(t,s,{get:e[s],enumerable:!0})},Me=(t,e,s,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let c of Ae(e))!Te.call(t,c)&&c!==s&&yt(t,c,{get:()=>e[c],enumerable:!(r=Le(e,c))||r.enumerable});return t},Ie=t=>Me(yt({},"__esModule",{value:!0}),t),Ht=(t,e,s)=>{if(!e.has(t))throw TypeError("Cannot "+s)},i=(t,e,s)=>(Ht(t,e,"read from private field"),s?s.call(t):e.get(t)),p=(t,e,s)=>{if(e.has(t))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(t):e.set(t,s)},v=(t,e,s,r)=>(Ht(t,e,"write to private field"),r?r.call(t,s):e.set(t,s),s),a=(t,e,s)=>(Ht(t,e,"access private method"),s),oe={};Ue(oe,{URLPattern:()=>Oe});module.exports=Ie(oe);var xt,ut=(xt=class{type=3;name="";prefix="";value="";suffix="";modifier=3;constructor(t,e,s,r,c,f){this.type=t,this.name=e,this.prefix=s,this.value=r,this.suffix=c,this.modifier=f}hasCustomName(){return this.name!==""&&typeof this.name!="number"}},h(xt,"R"),xt),De=/[$_\\p{ID_Start}]/u,Ne=/[$_\\u200C\\u200D\\p{ID_Continue}]/u,Dt=".*";function le(t,e){return(e?/^[\\x00-\\xFF]*$/:/^[\\x00-\\x7F]*$/).test(t)}h(le,"Re");function Ft(t,e=!1){let s=[],r=0;for(;r{if(lo("OTHER_MODIFIER")??o("ASTERISK"),"f"),L=h(w=>{let b=o(w);if(b!==void 0)return b;let{type:$,index:J}=s[l];throw new TypeError(`Unexpected ${$} at ${J}, expected ${w}`)},"d"),z=h(()=>{let w="",b;for(;b=o("CHAR")??o("ESCAPED_CHAR");)w+=b;return w},"T"),Pe=h(w=>w,"Se"),ft=e.encodePart||Pe,pt="",bt=h(w=>{pt+=w},"U"),kt=h(()=>{pt.length&&(c.push(new ut(3,"","",ft(pt),"",3)),pt="")},"$"),Bt=h((w,b,$,J,I)=>{let O=3;switch(I){case"?":O=1;break;case"*":O=0;break;case"+":O=2;break}if(!b&&!$&&O===3){bt(w);return}if(kt(),!b&&!$){if(!w)return;c.push(new ut(3,"","",ft(w),"",O));return}let S;$?$==="*"?S=Dt:S=$:S=r;let et=2;S===r?(et=1,S=""):S===Dt&&(et=0,S="");let D;if(b?D=b:$&&(D=f++),u.has(D))throw new TypeError(`Duplicate name \'${D}\'.`);u.add(D),c.push(new ut(et,D,ft(w),S,ft(J),O))},"V");for(;l-1)}return l||(r+=`(?=${f}|${c})`),new RegExp(r,Nt(s))}h(Kt,"F");var H={delimiter:"",prefixes:"",sensitive:!0,strict:!0},je={delimiter:".",prefixes:"",sensitive:!0,strict:!0},He={delimiter:"/",prefixes:"/",sensitive:!0,strict:!0};function ue(t,e){return t.length?t[0]==="/"?!0:!e||t.length<2?!1:(t[0]=="\\\\"||t[0]=="{")&&t[1]=="/":!1}h(ue,"J");function Xt(t,e){return t.startsWith(e)?t.substring(e.length,t.length):t}h(Xt,"Q");function fe(t,e){return t.endsWith(e)?t.substr(0,t.length-e.length):t}h(fe,"Ee");function Vt(t){return!t||t.length<2?!1:t[0]==="["||(t[0]==="\\\\"||t[0]==="{")&&t[1]==="["}h(Vt,"W");var pe=["ftp","file","http","https","ws","wss"];function zt(t){if(!t)return!0;for(let e of pe)if(t.test(e))return!0;return!1}h(zt,"N");function de(t,e){if(t=Xt(t,"#"),e||t==="")return t;let s=new URL("https://example.com");return s.hash=t,s.hash?s.hash.substring(1,s.hash.length):""}h(de,"te");function me(t,e){if(t=Xt(t,"?"),e||t==="")return t;let s=new URL("https://example.com");return s.search=t,s.search?s.search.substring(1,s.search.length):""}h(me,"re");function we(t,e){return e||t===""?t:Vt(t)?Qt(t):Zt(t)}h(we,"ne");function ge(t,e){if(e||t==="")return t;let s=new URL("https://example.com");return s.password=t,s.password}h(ge,"se");function ve(t,e){if(e||t==="")return t;let s=new URL("https://example.com");return s.username=t,s.username}h(ve,"ie");function ye(t,e,s){if(s||t==="")return t;if(e&&!pe.includes(e))return new URL(`${e}:${t}`).pathname;let r=t[0]=="/";return t=new URL(r?t:"/-"+t,"https://example.com").pathname,r||(t=t.substring(2,t.length)),t}h(ye,"ae");function _e(t,e,s){return Jt(e)===t&&(t=""),s||t===""?t:qt(t)}h(_e,"oe");function be(t,e){return t=fe(t,":"),e||t===""?t:_t(t)}h(be,"ce");function Jt(t){switch(t){case"ws":case"http":return"80";case"wws":case"https":return"443";case"ftp":return"21";default:return""}}h(Jt,"_");function _t(t){if(t==="")return t;if(/^[-+.A-Za-z0-9]*$/.test(t))return t.toLowerCase();throw new TypeError(`Invalid protocol \'${t}\'.`)}h(_t,"y");function ke(t){if(t==="")return t;let e=new URL("https://example.com");return e.username=t,e.username}h(ke,"le");function xe(t){if(t==="")return t;let e=new URL("https://example.com");return e.password=t,e.password}h(xe,"fe");function Zt(t){if(t==="")return t;if(/[\\t\\n\\r #%/:<>?@[\\]^\\\\|]/g.test(t))throw new TypeError(`Invalid hostname \'${t}\'`);let e=new URL("https://example.com");return e.hostname=t,e.hostname}h(Zt,"z");function Qt(t){if(t==="")return t;if(/[^0-9a-fA-F[\\]:]/g.test(t))throw new TypeError(`Invalid IPv6 hostname \'${t}\'`);return t.toLowerCase()}h(Qt,"j");function qt(t){if(t===""||/^[0-9]*$/.test(t)&&parseInt(t)<=65535)return t;throw new TypeError(`Invalid port \'${t}\'.`)}h(qt,"K");function $e(t){if(t==="")return t;let e=new URL("https://example.com");return e.pathname=t[0]!=="/"?"/-"+t:t,t[0]!=="/"?e.pathname.substring(2,e.pathname.length):e.pathname}h($e,"he");function Ee(t){return t===""?t:new URL(`data:${t}`).pathname}h(Ee,"ue");function Re(t){if(t==="")return t;let e=new URL("https://example.com");return e.search=t,e.search.substring(1,e.search.length)}h(Re,"de");function Se(t){if(t==="")return t;let e=new URL("https://example.com");return e.hash=t,e.hash.substring(1,e.hash.length)}h(Se,"pe");var st,k,y,d,Z,it,W,F,G,nt,m,g,$t,Yt,dt,Et,Q,rt,at,mt,E,C,wt,Rt,St,te,ht,gt,Wt,ee,Ct,se,ot,vt,K,q,N,X,Ot,ie,Pt,ne,Lt,re,At,ae,P,A,Tt,he,Ut,Fe=(Ut=class{constructor(t){p(this,m),p(this,$t),p(this,dt),p(this,Q),p(this,at),p(this,E),p(this,wt),p(this,St),p(this,ht),p(this,Wt),p(this,Ct),p(this,ot),p(this,K),p(this,N),p(this,Ot),p(this,Pt),p(this,Lt),p(this,At),p(this,P),p(this,Tt),p(this,st,void 0),p(this,k,[]),p(this,y,{}),p(this,d,0),p(this,Z,1),p(this,it,0),p(this,W,0),p(this,F,0),p(this,G,0),p(this,nt,!1),v(this,st,t)}get result(){return i(this,y)}parse(){for(v(this,k,Ft(i(this,st),!0));i(this,d)0)if(a(this,Pt,ne).call(this))v(this,F,i(this,F)-1);else continue;if(a(this,Ot,ie).call(this)){v(this,F,i(this,F)+1);continue}switch(i(this,W)){case 0:a(this,wt,Rt).call(this)&&a(this,Q,rt).call(this,1);break;case 1:if(a(this,wt,Rt).call(this)){a(this,Tt,he).call(this);let t=7,e=1;a(this,St,te).call(this)?(t=2,e=3):i(this,nt)&&(t=2),a(this,m,g).call(this,t,e)}break;case 2:a(this,ht,gt).call(this)?a(this,Q,rt).call(this,3):(a(this,ot,vt).call(this)||a(this,K,q).call(this)||a(this,N,X).call(this))&&a(this,Q,rt).call(this,5);break;case 3:a(this,Wt,ee).call(this)?a(this,m,g).call(this,4,1):a(this,ht,gt).call(this)&&a(this,m,g).call(this,5,1);break;case 4:a(this,ht,gt).call(this)&&a(this,m,g).call(this,5,1);break;case 5:a(this,Lt,re).call(this)?v(this,G,i(this,G)+1):a(this,At,ae).call(this)&&v(this,G,i(this,G)-1),a(this,Ct,se).call(this)&&!i(this,G)?a(this,m,g).call(this,6,1):a(this,ot,vt).call(this)?a(this,m,g).call(this,7,0):a(this,K,q).call(this)?a(this,m,g).call(this,8,1):a(this,N,X).call(this)&&a(this,m,g).call(this,9,1);break;case 6:a(this,ot,vt).call(this)?a(this,m,g).call(this,7,0):a(this,K,q).call(this)?a(this,m,g).call(this,8,1):a(this,N,X).call(this)&&a(this,m,g).call(this,9,1);break;case 7:a(this,K,q).call(this)?a(this,m,g).call(this,8,1):a(this,N,X).call(this)&&a(this,m,g).call(this,9,1);break;case 8:a(this,N,X).call(this)&&a(this,m,g).call(this,9,1);break;case 9:break;case 10:break}}i(this,y).hostname!==void 0&&i(this,y).port===void 0&&(i(this,y).port="")}},st=new WeakMap,k=new WeakMap,y=new WeakMap,d=new WeakMap,Z=new WeakMap,it=new WeakMap,W=new WeakMap,F=new WeakMap,G=new WeakMap,nt=new WeakMap,m=new WeakSet,g=h(function(t,e){switch(i(this,W)){case 0:break;case 1:i(this,y).protocol=a(this,P,A).call(this);break;case 2:break;case 3:i(this,y).username=a(this,P,A).call(this);break;case 4:i(this,y).password=a(this,P,A).call(this);break;case 5:i(this,y).hostname=a(this,P,A).call(this);break;case 6:i(this,y).port=a(this,P,A).call(this);break;case 7:i(this,y).pathname=a(this,P,A).call(this);break;case 8:i(this,y).search=a(this,P,A).call(this);break;case 9:i(this,y).hash=a(this,P,A).call(this);break;case 10:break}i(this,W)!==0&&t!==10&&([1,2,3,4].includes(i(this,W))&&[6,7,8,9].includes(t)&&(i(this,y).hostname??=""),[1,2,3,4,5,6].includes(i(this,W))&&[8,9].includes(t)&&(i(this,y).pathname??=i(this,nt)?"/":""),[1,2,3,4,5,6,7].includes(i(this,W))&&t===9&&(i(this,y).search??="")),a(this,$t,Yt).call(this,t,e)},"#r"),$t=new WeakSet,Yt=h(function(t,e){v(this,W,t),v(this,it,i(this,d)+e),v(this,d,i(this,d)+e),v(this,Z,0)},"#R"),dt=new WeakSet,Et=h(function(){v(this,d,i(this,it)),v(this,Z,0)},"#b"),Q=new WeakSet,rt=h(function(t){a(this,dt,Et).call(this),v(this,W,t)},"#u"),at=new WeakSet,mt=h(function(t){return t<0&&(t=i(this,k).length-t),t=0&&(t.pathname=U(r.pathname.substring(0,c+1),s)+t.pathname)}t.pathname=ye(t.pathname,t.protocol,s)}return typeof e.search=="string"&&(t.search=me(e.search,s)),typeof e.hash=="string"&&(t.hash=de(e.hash,s)),t}h(Y,"w");function tt(t){return t.replace(/([+*?:{}()\\\\])/g,"\\\\$1")}h(tt,"C");function We(t){return t.replace(/([.+*?^${}()[\\]|/\\\\])/g,"\\\\$1")}h(We,"Oe");function Ce(t,e){e.delimiter??="/#?",e.prefixes??="./",e.sensitive??=!1,e.strict??=!1,e.end??=!0,e.start??=!0,e.endsWith="";let s=".*",r=`[^${We(e.delimiter)}]+?`,c=/[$_\\u200C\\u200D\\p{ID_Continue}]/u,f="";for(let l=0;l0?t[l-1]:null,L=l0?L.value[0]:"";o=c.test(z)}else o=!L.hasCustomName();if(!o&&!n.prefix.length&&x&&x.type===3){let z=x.value[x.value.length-1];o=e.prefixes.includes(z)}o&&(f+="{"),f+=tt(n.prefix),u&&(f+=`:${n.name}`),n.type===2?f+=`(${n.value})`:n.type===1?u||(f+=`(${r})`):n.type===0&&(!u&&(!x||x.type===3||x.modifier!==3||o||n.prefix!=="")?f+="*":f+=`(${s})`),n.type===1&&u&&n.suffix.length&&c.test(n.suffix[0])&&(f+="\\\\"),f+=tt(n.suffix),o&&(f+="}"),n.modifier!==3&&(f+=V(n.modifier))}return f}h(Ce,"ke");var M,B,lt,_,T,ct,It,Oe=(It=class{constructor(t={},e,s){p(this,M,void 0),p(this,B,{}),p(this,lt,{}),p(this,_,{}),p(this,T,{}),p(this,ct,!1);try{let r;if(typeof e=="string"?r=e:s=e,typeof t=="string"){let n=new Fe(t);if(n.parse(),t=n.result,r===void 0&&typeof t.protocol!="string")throw new TypeError("A base URL must be provided for a relative constructor string.");t.baseURL=r}else{if(!t||typeof t!="object")throw new TypeError("parameter 1 is not of type \'string\' and cannot convert to dictionary.");if(r)throw new TypeError("parameter 1 is not of type \'string\'.")}typeof s>"u"&&(s={ignoreCase:!1});let c={ignoreCase:s.ignoreCase===!0};v(this,M,Y({pathname:j,protocol:j,username:j,password:j,hostname:j,port:j,search:j,hash:j},t,!0)),Jt(i(this,M).protocol)===i(this,M).port&&(i(this,M).port="");let l;for(l of Mt){if(!(l in i(this,M)))continue;let n={},u=i(this,M)[l];switch(i(this,lt)[l]=[],l){case"protocol":Object.assign(n,H),n.encodePart=_t;break;case"username":Object.assign(n,H),n.encodePart=ke;break;case"password":Object.assign(n,H),n.encodePart=xe;break;case"hostname":Object.assign(n,je),Vt(u)?n.encodePart=Qt:n.encodePart=Zt;break;case"port":Object.assign(n,H),n.encodePart=qt;break;case"pathname":zt(i(this,B).protocol)?(Object.assign(n,He,c),n.encodePart=$e):(Object.assign(n,H,c),n.encodePart=Ee);break;case"search":Object.assign(n,H,c),n.encodePart=Re;break;case"hash":Object.assign(n,H,c),n.encodePart=Se;break}try{i(this,T)[l]=Gt(u,n),i(this,B)[l]=Kt(i(this,T)[l],i(this,lt)[l],n),i(this,_)[l]=Ce(i(this,T)[l],n),v(this,ct,i(this,ct)||i(this,T)[l].some(o=>o.type===2))}catch{throw new TypeError(`invalid ${l} pattern \'${i(this,M)[l]}\'.`)}}}catch(r){throw new TypeError(`Failed to construct \'URLPattern\': ${r.message}`)}}test(t={},e){let s={pathname:"",protocol:"",username:"",password:"",hostname:"",port:"",search:"",hash:""};if(typeof t!="string"&&e)throw new TypeError("parameter 1 is not of type \'string\'.");if(typeof t>"u")return!1;try{typeof t=="object"?s=Y(s,t,!1):s=Y(s,jt(t,e),!1)}catch{return!1}let r;for(r of Mt)if(!i(this,B)[r].exec(s[r]))return!1;return!0}exec(t={},e){let s={pathname:"",protocol:"",username:"",password:"",hostname:"",port:"",search:"",hash:""};if(typeof t!="string"&&e)throw new TypeError("parameter 1 is not of type \'string\'.");if(typeof t>"u")return;try{typeof t=="object"?s=Y(s,t,!1):s=Y(s,jt(t,e),!1)}catch{return null}let r={};e?r.inputs=[t,e]:r.inputs=[t];let c;for(c of Mt){let f=i(this,B)[c].exec(s[c]);if(!f)return null;let l={};for(let[n,u]of i(this,lt)[c].entries())if(typeof u=="string"||typeof u=="number"){let o=f[n+1];l[u]=o}r[c]={input:s[c]??"",groups:l}}return r}static compareComponent(t,e,s){let r=h((n,u)=>{for(let o of["type","modifier","prefix","value","suffix"]){if(n[o]{let o=0;for(;o{"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.EdgeVM=void 0;const load_1=__nccwpck_require__(963);const vm_1=__nccwpck_require__(144);const vm_2=__nccwpck_require__(472);let unhandledRejectionHandlers;let uncaughtExceptionHandlers;class EdgeVM extends vm_2.VM{constructor(e){super({...e,extend:A=>(e===null||e===void 0?void 0:e.extend)?e.extend(addPrimitives(A)):addPrimitives(A)});Object.defineProperty(this.context,"__onUnhandledRejectionHandlers",{set:registerUnhandledRejectionHandlers,configurable:false,enumerable:false});Object.defineProperty(this,"__rejectionHandlers",{get:()=>unhandledRejectionHandlers,configurable:false,enumerable:false});Object.defineProperty(this.context,"__onErrorHandlers",{set:registerUncaughtExceptionHandlers,configurable:false,enumerable:false});Object.defineProperty(this,"__errorHandlers",{get:()=>uncaughtExceptionHandlers,configurable:false,enumerable:false});this.evaluate(getDefineEventListenersCode());this.dispatchFetch=this.evaluate(getDispatchFetchCode());for(const e of transferableConstructors){patchInstanceOf(e,this.context)}if(e===null||e===void 0?void 0:e.initialCode){this.evaluate(e.initialCode)}}}exports.EdgeVM=EdgeVM;const transferableConstructors=["Object","Array","RegExp","Uint8Array","ArrayBuffer","Error","SyntaxError","TypeError"];function patchInstanceOf(item,ctx){ctx[Symbol.for(`node:${item}`)]=eval(item);return(0,vm_1.runInContext)(`\n globalThis.${item} = new Proxy(${item}, {\n get(target, prop, receiver) {\n if (prop === Symbol.hasInstance && receiver === globalThis.${item}) {\n const nodeTarget = globalThis[Symbol.for('node:${item}')];\n if (nodeTarget) {\n return function(instance) {\n return instance instanceof target || instance instanceof nodeTarget;\n };\n } else {\n throw new Error('node target must exist')\n }\n }\n\n return Reflect.get(target, prop, receiver);\n }\n })\n `,ctx)}function registerUnhandledRejectionHandlers(e){if(!unhandledRejectionHandlers){process.on("unhandledRejection",(function invokeRejectionHandlers(e,A){unhandledRejectionHandlers.forEach((t=>t({reason:e,promise:A})))}))}unhandledRejectionHandlers=e}function registerUncaughtExceptionHandlers(e){if(!uncaughtExceptionHandlers){process.on("uncaughtException",(function invokeErrorHandlers(e){uncaughtExceptionHandlers.forEach((A=>A(e)))}))}uncaughtExceptionHandlers=e}function getDefineEventListenersCode(){return`\n Object.defineProperty(self, '__listeners', {\n configurable: false,\n enumerable: false,\n value: {},\n writable: true,\n })\n\n Object.defineProperty(self, '__conditionallyUpdatesHandlerList', {\n configurable: false,\n enumerable: false,\n value: function(eventType) {\n if (eventType === 'unhandledrejection') {\n self.__onUnhandledRejectionHandlers = self.__listeners[eventType];\n } else if (eventType === 'error') {\n self.__onErrorHandlers = self.__listeners[eventType];\n }\n },\n writable: false,\n })\n\n function addEventListener(type, handler) {\n const eventType = type.toLowerCase();\n if (eventType === 'fetch' && self.__listeners.fetch) {\n throw new TypeError('You can register just one "fetch" event listener');\n }\n\n self.__listeners[eventType] = self.__listeners[eventType] || [];\n self.__listeners[eventType].push(handler);\n self.__conditionallyUpdatesHandlerList(eventType);\n }\n\n function removeEventListener(type, handler) {\n const eventType = type.toLowerCase();\n if (self.__listeners[eventType]) {\n self.__listeners[eventType] = self.__listeners[eventType].filter(item => {\n return item !== handler;\n });\n\n if (self.__listeners[eventType].length === 0) {\n delete self.__listeners[eventType];\n }\n }\n self.__conditionallyUpdatesHandlerList(eventType);\n }\n `}function getDispatchFetchCode(){return`(async function dispatchFetch(input, init) {\n const request = new Request(input, init);\n const event = new FetchEvent(request);\n if (!self.__listeners.fetch) {\n throw new Error("No fetch event listeners found");\n }\n\n const getResponse = ({ response, error }) => {\n if (error || !response || !(response instanceof Response)) {\n console.error(error ? error.toString() : 'The event listener did not respond')\n response = new Response(null, {\n statusText: 'Internal Server Error',\n status: 500\n })\n }\n\n if (response.status < 300 || response.status >= 400 ) {\n const headers = new Headers(response.headers);\n headers.delete('content-encoding');\n headers.delete('transform-encoding');\n headers.delete('content-length');\n response = new Response(response.body, {\n status: response.status,\n statusText: response.statusText,\n headers\n });\n }\n response.waitUntil = () => Promise.all(event.awaiting);\n return response;\n }\n\n try {\n await self.__listeners.fetch[0].call(event, event)\n } catch (error) {\n return getResponse({ error })\n }\n\n return Promise.resolve(event.response)\n .then(response => getResponse({ response }))\n .catch(error => getResponse({ error }))\n })`}function addPrimitives(e){defineProperty(e,"self",{enumerable:true,value:e});defineProperty(e,"globalThis",{value:e});defineProperty(e,"Symbol",{value:Symbol});defineProperty(e,"clearInterval",{value:clearInterval});defineProperty(e,"clearTimeout",{value:clearTimeout});defineProperty(e,"queueMicrotask",{value:queueMicrotask});defineProperty(e,"EdgeRuntime",{value:"edge-runtime"});const A=getTransferablePrimitivesFromContext(e);defineProperties(e,{exports:(0,load_1.load)({...A,WeakRef:(0,vm_1.runInContext)(`WeakRef`,e)}),enumerable:["crypto"],nonenumerable:["Crypto","CryptoKey","SubtleCrypto","fetch","File","FormData","Headers","Request","Response","WebSocket","structuredClone","Blob","URL","URLSearchParams","URLPattern","AbortController","AbortSignal","DOMException","ReadableStream","ReadableStreamBYOBReader","ReadableStreamDefaultReader","TextDecoderStream","TextEncoderStream","TransformStream","WritableStream","WritableStreamDefaultWriter","atob","btoa","TextEncoder","TextDecoder","Event","EventTarget","FetchEvent","PromiseRejectionEvent","console","performance","setTimeout","setInterval"]});return e}function defineProperty(e,A,t){var r,i,s;Object.defineProperty(e,A,{configurable:(r=t.configurable)!==null&&r!==void 0?r:false,enumerable:(i=t.enumerable)!==null&&i!==void 0?i:false,value:t.value,writable:(s=t.writable)!==null&&s!==void 0?s:true})}function defineProperties(e,A){var t,r;for(const r of(t=A.enumerable)!==null&&t!==void 0?t:[]){if(!A.exports[r]){throw new Error(`Attempt to export a nullable value for "${r}"`)}defineProperty(e,r,{enumerable:true,value:A.exports[r]})}for(const t of(r=A.nonenumerable)!==null&&r!==void 0?r:[]){if(!A.exports[t]){throw new Error(`Attempt to export a nullable value for "${t}"`)}defineProperty(e,t,{value:A.exports[t]})}}function getTransferablePrimitivesFromContext(e){const A=transferableConstructors.join(",");const t=`({${A}})`;return(0,vm_1.runInContext)(t,e)}},885:(e,A,t)=>{"use strict";Object.defineProperty(A,"__esModule",{value:true});A.VM=A.EdgeVM=void 0;var r=t(239);Object.defineProperty(A,"EdgeVM",{enumerable:true,get:function(){return r.EdgeVM}});var i=t(472);Object.defineProperty(A,"VM",{enumerable:true,get:function(){return i.VM}})},472:(e,A,t)=>{"use strict";Object.defineProperty(A,"__esModule",{value:true});A.VM=void 0;const r=t(144);class VM{constructor(e={}){var A,t,i;const s=(0,r.createContext)({},{name:"Edge Runtime",codeGeneration:(A=e.codeGeneration)!==null&&A!==void 0?A:{strings:false,wasm:true}});this.context=(i=(t=e.extend)===null||t===void 0?void 0:t.call(e,s))!==null&&i!==void 0?i:s}evaluate(e){return(0,r.runInContext)(e,this.context)}}A.VM=VM},41:(e,A,t)=>{"use strict";Object.defineProperty(A,"__esModule",{value:true});A.listen=void 0;const r=t(685);const i=t(687);const s=t(17);const n=t(361);const getProtocol=e=>{if(typeof e.protocol==="string")return e.protocol;if(e instanceof r.Server)return"http";if(e instanceof i.Server)return"https"};async function listen(e,...A){e.listen(...A,(()=>{}));await(0,n.once)(e,"listening");const t=e.address();if(!t){throw new Error("Server not listening")}let r;let i=getProtocol(e);if(typeof t==="string"){r=encodeURIComponent((0,s.resolve)(t));if(i){i+="+unix"}else{i="unix"}}else{const{address:e,port:A,family:s}=t;r=s==="IPv6"?`[${e}]`:e;r+=`:${A}`;if(!i){i="tcp"}}return new URL(`${i}://${r}`)}A.listen=listen;A["default"]=listen},162:e=>{"use strict";e.exports=e=>{const A=e[0]*1e9+e[1];const t=A/1e6;const r=A/1e9;return{seconds:r,milliseconds:t,nanoseconds:A}}},105:(e,A,t)=>{"use strict";Object.defineProperty(A,"__esModule",{value:true});A.EdgeRuntime=void 0;var r=t(885);Object.defineProperty(A,"EdgeRuntime",{enumerable:true,get:function(){return r.EdgeVM}})},940:(e,A,t)=>{"use strict";Object.defineProperty(A,"__esModule",{value:true});A.getClonableBodyStream=getClonableBodyStream;A.consumeUint8ArrayReadableStream=consumeUint8ArrayReadableStream;A.pipeBodyStreamToResponse=pipeBodyStreamToResponse;const r=t(781);function getClonableBodyStream(e,A,t){let r=null;return{finalize(){if(r){replaceRequestBody(e,bodyStreamToNodeStream(r))}},cloneBodyStream(){const i=r!==null&&r!==void 0?r:requestToBodyStream(e,A,t);const[s,n]=i.tee();r=s;return n}}}function requestToBodyStream(e,A,t){const r=new t({start(t){e.on("data",(e=>t.enqueue(new A([...new Uint8Array(e)]))));e.on("end",(()=>t.terminate()));e.on("error",(e=>t.error(e)))}});return r.readable}function bodyStreamToNodeStream(e){const A=e.getReader();return r.Readable.from(async function*(){while(true){const{done:e,value:t}=await A.read();if(e){return}yield t}}())}function replaceRequestBody(e,A){for(const t in A){let r=A[t];if(typeof r==="function"){r=r.bind(A)}e[t]=r}return e}function isUint8ArrayChunk(e){var A;return((A=e===null||e===void 0?void 0:e.constructor)===null||A===void 0?void 0:A.name)=="Uint8Array"}async function*consumeUint8ArrayReadableStream(e){const A=e===null||e===void 0?void 0:e.getReader();if(A){let e;try{while(true){const{done:t,value:r}=await A.read();if(t){return}if(!isUint8ArrayChunk(r)){e=new TypeError("This ReadableStream did not return bytes.");break}yield r}}finally{if(e){A.cancel(e);throw e}else{A.cancel()}}}}async function pipeBodyStreamToResponse(e,A){if(!e)return;if(A.destroyed)return e.cancel();let t;A.on("drain",(()=>t===null||t===void 0?void 0:t()));let r=true;A.on("close",(()=>{r=false;t===null||t===void 0?void 0:t()}));const i=e.getReader();while(r){const{done:e,value:s}=await i.read();if(e)break;if(!isUint8ArrayChunk(s)){const e=new TypeError("This ReadableStream did not return bytes.");i.cancel(e);throw e}if(r){const e=A.write(s);if(!e){await new Promise((e=>{t=e}))}}if(!r){return i.cancel()}}}},668:function(e,A,t){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(A,"__esModule",{value:true});A.createHandler=createHandler;const i=t(940);const s=r(t(606));const n=r(t(943));const o=t(685);function createHandler(e){const A=new Set;return{handler:async(t,r)=>{var a,c;try{const l=(0,n.default)();const g=t.method!=="GET"&&t.method!=="HEAD"?(0,i.getClonableBodyStream)(t,e.runtime.evaluate("Uint8Array"),e.runtime.context.TransformStream):undefined;const Q=await e.runtime.dispatchFetch(String(getURL(t)),{headers:toRequestInitHeaders(t),method:t.method,body:g===null||g===void 0?void 0:g.cloneBodyStream()});const u=Q.waitUntil();A.add(u);u.finally((()=>A.delete(u)));r.statusCode=Q.status;r.statusMessage=Q.statusText;for(const[e,A]of Object.entries(toNodeHeaders(Q.headers))){if(A!==undefined){r.setHeader(e,A)}}await(0,i.pipeBodyStreamToResponse)(Q.body,r);const E=`${t.socket.remoteAddress} ${t.method} ${t.url}`;const B=`${(a=(0,s.default)(l()).match(/[a-zA-Z]+|[0-9]+/g))===null||a===void 0?void 0:a.join(" ")}`;const h=`${r.statusCode} ${o.STATUS_CODES[r.statusCode]}`;(c=e.logger)===null||c===void 0?void 0:c.debug(`${E} → ${h} in ${B}`);r.end()}finally{if(!r.writableEnded){r.end()}}},waitUntil:()=>Promise.all(A)}}function getURL(e){var A;const t=((A=e.socket)===null||A===void 0?void 0:A.encrypted)?"https":"http";return new URL(String(e.url),`${t}://${String(e.headers.host)}`)}function toRequestInitHeaders(e){return Object.keys(e.headers).map((A=>{const t=e.headers[A];return[A,Array.isArray(t)?t.join(", "):t!==null&&t!==void 0?t:""]}))}function toNodeHeaders(e){const A={};if(e){for(const[t,r]of e.entries()){A[t]=t==="set-cookie"?e.getSetCookie():r}}return A}},997:(e,A,t)=>{"use strict";Object.defineProperty(A,"__esModule",{value:true});A.runServer=A.createHandler=A.pipeBodyStreamToResponse=A.consumeUint8ArrayReadableStream=void 0;var r=t(940);Object.defineProperty(A,"consumeUint8ArrayReadableStream",{enumerable:true,get:function(){return r.consumeUint8ArrayReadableStream}});Object.defineProperty(A,"pipeBodyStreamToResponse",{enumerable:true,get:function(){return r.pipeBodyStreamToResponse}});var i=t(668);Object.defineProperty(A,"createHandler",{enumerable:true,get:function(){return i.createHandler}});var s=t(326);Object.defineProperty(A,"runServer",{enumerable:true,get:function(){return s.runServer}})},326:function(e,A,t){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(A,"__esModule",{value:true});A.runServer=runServer;const i=t(668);const s=r(t(41));const n=r(t(685));const o=t(837);async function runServer(e){if(e.port===undefined)e.port=0;const{handler:A,waitUntil:t}=(0,i.createHandler)(e);const r=n.default.createServer(A);const a=await(0,s.default)(r,e);const c=(0,o.promisify)(r.close.bind(r));return{url:String(a),close:()=>Promise.all([t(),c()]).then((()=>void 0)),waitUntil:t}}},523:e=>{"use strict";e.exports=e=>{if(typeof e!=="number"){throw new TypeError("Expected a number")}const A=e>0?Math.floor:Math.ceil;return{days:A(e/864e5),hours:A(e/36e5)%24,minutes:A(e/6e4)%60,seconds:A(e/1e3)%60,milliseconds:A(e)%1e3,microseconds:A(e*1e3)%1e3,nanoseconds:A(e*1e6)%1e3}}},606:(e,A,t)=>{"use strict";const r=t(523);const pluralize=(e,A)=>A===1?e:`${e}s`;const i=1e-7;e.exports=(e,A={})=>{if(!Number.isFinite(e)){throw new TypeError("Expected a finite number")}if(A.colonNotation){A.compact=false;A.formatSubMilliseconds=false;A.separateMilliseconds=false;A.verbose=false}if(A.compact){A.secondsDecimalDigits=0;A.millisecondsDecimalDigits=0}const t=[];const floorDecimals=(e,A)=>{const t=Math.floor(e*10**A+i);const r=Math.round(t)/10**A;return r.toFixed(A)};const add=(e,r,i,s)=>{if((t.length===0||!A.colonNotation)&&e===0&&!(A.colonNotation&&i==="m")){return}s=(s||e||"0").toString();let n;let o;if(A.colonNotation){n=t.length>0?":":"";o="";const e=s.includes(".")?s.split(".")[0].length:s.length;const A=t.length>0?2:1;s="0".repeat(Math.max(0,A-e))+s}else{n="";o=A.verbose?" "+pluralize(r,e):i}t.push(n+s+o)};const s=r(e);add(Math.trunc(s.days/365),"year","y");add(s.days%365,"day","d");add(s.hours,"hour","h");add(s.minutes,"minute","m");if(A.separateMilliseconds||A.formatSubMilliseconds||!A.colonNotation&&e<1e3){add(s.seconds,"second","s");if(A.formatSubMilliseconds){add(s.milliseconds,"millisecond","ms");add(s.microseconds,"microsecond","µs");add(s.nanoseconds,"nanosecond","ns")}else{const e=s.milliseconds+s.microseconds/1e3+s.nanoseconds/1e6;const t=typeof A.millisecondsDecimalDigits==="number"?A.millisecondsDecimalDigits:0;const r=e>=1?Math.round(e):Math.ceil(e);const i=t?e.toFixed(t):r;add(Number.parseFloat(i,10),"millisecond","ms",i)}}else{const t=e/1e3%60;const r=typeof A.secondsDecimalDigits==="number"?A.secondsDecimalDigits:1;const i=floorDecimals(t,r);const s=A.keepDecimalsOnWholeSeconds?i:i.replace(/\.0+$/,"");add(Number.parseFloat(s,10),"second","s",s)}if(t.length===0){return"0"+(A.verbose?" milliseconds":"ms")}if(A.compact){return t[0]}if(typeof A.unitCount==="number"){const e=A.colonNotation?"":" ";return t.slice(0,Math.max(A.unitCount,1)).join(e)}return A.colonNotation?t.join(""):t.join(" ")}},943:(e,A,t)=>{"use strict";const r=t(162);e.exports=()=>{const e=process.hrtime();const end=A=>r(process.hrtime(e))[A];const returnValue=()=>end("milliseconds");returnValue.rounded=()=>Math.round(end("milliseconds"));returnValue.seconds=()=>end("seconds");returnValue.nanoseconds=()=>end("nanoseconds");return returnValue}},223:module=>{module.exports=require("util/types")},491:e=>{"use strict";e.exports=require("assert")},852:e=>{"use strict";e.exports=require("async_hooks")},300:e=>{"use strict";e.exports=require("buffer")},206:e=>{"use strict";e.exports=require("console")},113:e=>{"use strict";e.exports=require("crypto")},643:e=>{"use strict";e.exports=require("diagnostics_channel")},361:e=>{"use strict";e.exports=require("events")},685:e=>{"use strict";e.exports=require("http")},158:e=>{"use strict";e.exports=require("http2")},687:e=>{"use strict";e.exports=require("https")},188:e=>{"use strict";e.exports=require("module")},808:e=>{"use strict";e.exports=require("net")},17:e=>{"use strict";e.exports=require("path")},74:e=>{"use strict";e.exports=require("perf_hooks")},477:e=>{"use strict";e.exports=require("querystring")},781:e=>{"use strict";e.exports=require("stream")},356:e=>{"use strict";e.exports=require("stream/web")},576:e=>{"use strict";e.exports=require("string_decoder")},404:e=>{"use strict";e.exports=require("tls")},310:e=>{"use strict";e.exports=require("url")},837:e=>{"use strict";e.exports=require("util")},144:e=>{"use strict";e.exports=require("vm")},267:e=>{"use strict";e.exports=require("worker_threads")},796:e=>{"use strict";e.exports=require("zlib")}};var __webpack_module_cache__={};function __nccwpck_require__(e){var A=__webpack_module_cache__[e];if(A!==undefined){return A.exports}var t=__webpack_module_cache__[e]={exports:{}};var r=true;try{__webpack_modules__[e].call(t.exports,t,t.exports,__nccwpck_require__);r=false}finally{if(r)delete __webpack_module_cache__[e]}return t.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var __webpack_exports__={};(()=>{"use strict";var e=__webpack_exports__;Object.defineProperty(e,"__esModule",{value:true});e.EdgeRuntime=e.runServer=e.createHandler=e.pipeBodyStreamToResponse=e.consumeUint8ArrayReadableStream=void 0;var A=__nccwpck_require__(997);Object.defineProperty(e,"consumeUint8ArrayReadableStream",{enumerable:true,get:function(){return A.consumeUint8ArrayReadableStream}});Object.defineProperty(e,"pipeBodyStreamToResponse",{enumerable:true,get:function(){return A.pipeBodyStreamToResponse}});Object.defineProperty(e,"createHandler",{enumerable:true,get:function(){return A.createHandler}});Object.defineProperty(e,"runServer",{enumerable:true,get:function(){return A.runServer}});var t=__nccwpck_require__(105);Object.defineProperty(e,"EdgeRuntime",{enumerable:true,get:function(){return t.EdgeRuntime}})})();module.exports=__webpack_exports__})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/edge-runtime/package.json b/build/node_modules/next/dist/compiled/edge-runtime/package.json new file mode 100644 index 0000000..335251d --- /dev/null +++ b/build/node_modules/next/dist/compiled/edge-runtime/package.json @@ -0,0 +1 @@ +{"name":"edge-runtime","main":"index.js","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/find-up/index.js b/build/node_modules/next/dist/compiled/find-up/index.js new file mode 100644 index 0000000..744f4e8 --- /dev/null +++ b/build/node_modules/next/dist/compiled/find-up/index.js @@ -0,0 +1 @@ +(()=>{"use strict";var r={578:(r,e,t)=>{const s=t(17);const n=t(910);const c=t(61);const o=Symbol("findUp.stop");r.exports=async(r,e={})=>{let t=s.resolve(e.cwd||"");const{root:c}=s.parse(t);const i=[].concat(r);const runMatcher=async e=>{if(typeof r!=="function"){return n(i,e)}const t=await r(e.cwd);if(typeof t==="string"){return n([t],e)}return t};while(true){const r=await runMatcher({...e,cwd:t});if(r===o){return}if(r){return s.resolve(t,r)}if(t===c){return}t=s.dirname(t)}};r.exports.sync=(r,e={})=>{let t=s.resolve(e.cwd||"");const{root:c}=s.parse(t);const i=[].concat(r);const runMatcher=e=>{if(typeof r!=="function"){return n.sync(i,e)}const t=r(e.cwd);if(typeof t==="string"){return n.sync([t],e)}return t};while(true){const r=runMatcher({...e,cwd:t});if(r===o){return}if(r){return s.resolve(t,r)}if(t===c){return}t=s.dirname(t)}};r.exports.exists=c;r.exports.sync.exists=c.sync;r.exports.stop=o},910:(r,e,t)=>{const s=t(17);const n=t(147);const{promisify:c}=t(837);const o=t(679);const i=c(n.stat);const a=c(n.lstat);const u={directory:"isDirectory",file:"isFile"};function checkType({type:r}){if(r in u){return}throw new Error(`Invalid type specified: ${r}`)}const matchType=(r,e)=>r===undefined||e[u[r]]();r.exports=async(r,e)=>{e={cwd:process.cwd(),type:"file",allowSymlinks:true,...e};checkType(e);const t=e.allowSymlinks?i:a;return o(r,(async r=>{try{const n=await t(s.resolve(e.cwd,r));return matchType(e.type,n)}catch(r){return false}}),e)};r.exports.sync=(r,e)=>{e={cwd:process.cwd(),allowSymlinks:true,type:"file",...e};checkType(e);const t=e.allowSymlinks?n.statSync:n.lstatSync;for(const n of r){try{const r=t(s.resolve(e.cwd,n));if(matchType(e.type,r)){return n}}catch(r){}}}},679:(r,e,t)=>{const s=t(698);class EndError extends Error{constructor(r){super();this.value=r}}const testElement=async(r,e)=>e(await r);const finder=async r=>{const e=await Promise.all(r);if(e[1]===true){throw new EndError(e[0])}return false};const pLocate=async(r,e,t)=>{t={concurrency:Infinity,preserveOrder:true,...t};const n=s(t.concurrency);const c=[...r].map((r=>[r,n(testElement,r,e)]));const o=s(t.preserveOrder?1:Infinity);try{await Promise.all(c.map((r=>o(finder,r))))}catch(r){if(r instanceof EndError){return r.value}throw r}};r.exports=pLocate;r.exports["default"]=pLocate},61:(r,e,t)=>{const s=t(147);const{promisify:n}=t(837);const c=n(s.access);r.exports=async r=>{try{await c(r);return true}catch(r){return false}};r.exports.sync=r=>{try{s.accessSync(r);return true}catch(r){return false}}},147:r=>{r.exports=require("fs")},698:r=>{r.exports=require("next/dist/compiled/p-limit")},17:r=>{r.exports=require("path")},837:r=>{r.exports=require("util")}};var e={};function __nccwpck_require__(t){var s=e[t];if(s!==undefined){return s.exports}var n=e[t]={exports:{}};var c=true;try{r[t](n,n.exports,__nccwpck_require__);c=false}finally{if(c)delete e[t]}return n.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var t=__nccwpck_require__(578);module.exports=t})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/find-up/package.json b/build/node_modules/next/dist/compiled/find-up/package.json new file mode 100644 index 0000000..2a3444a --- /dev/null +++ b/build/node_modules/next/dist/compiled/find-up/package.json @@ -0,0 +1 @@ +{"name":"find-up","main":"index.js","author":{"name":"Sindre Sorhus","email":"sindresorhus@gmail.com","url":"sindresorhus.com"},"license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/fresh/index.js b/build/node_modules/next/dist/compiled/fresh/index.js new file mode 100644 index 0000000..98a5f45 --- /dev/null +++ b/build/node_modules/next/dist/compiled/fresh/index.js @@ -0,0 +1,8 @@ +(()=>{"use strict";var e={695:e=>{ +/*! + * fresh + * Copyright(c) 2012 TJ Holowaychuk + * Copyright(c) 2016-2017 Douglas Christopher Wilson + * MIT Licensed + */ +var r=/(?:^|,)\s*?no-cache\s*?(?:,|$)/;e.exports=fresh;function fresh(e,a){var t=e["if-modified-since"];var s=e["if-none-match"];if(!t&&!s){return false}var i=e["cache-control"];if(i&&r.test(i)){return false}if(s&&s!=="*"){var f=a["etag"];if(!f){return false}var n=true;var u=parseTokenList(s);for(var _=0;_ (http://tjholowaychuk.com)","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/http-proxy/index.js b/build/node_modules/next/dist/compiled/http-proxy/index.js new file mode 100644 index 0000000..2e67249 --- /dev/null +++ b/build/node_modules/next/dist/compiled/http-proxy/index.js @@ -0,0 +1,34 @@ +(()=>{var e={993:e=>{"use strict";var t=Object.prototype.hasOwnProperty,r="~";function Events(){}if(Object.create){Events.prototype=Object.create(null);if(!(new Events).__proto__)r=false}function EE(e,t,r){this.fn=e;this.context=t;this.once=r||false}function addListener(e,t,o,n,s){if(typeof o!=="function"){throw new TypeError("The listener must be a function")}var i=new EE(o,n||e,s),a=r?r+t:t;if(!e._events[a])e._events[a]=i,e._eventsCount++;else if(!e._events[a].fn)e._events[a].push(i);else e._events[a]=[e._events[a],i];return e}function clearEvent(e,t){if(--e._eventsCount===0)e._events=new Events;else delete e._events[t]}function EventEmitter(){this._events=new Events;this._eventsCount=0}EventEmitter.prototype.eventNames=function eventNames(){var e=[],o,n;if(this._eventsCount===0)return e;for(n in o=this._events){if(t.call(o,n))e.push(r?n.slice(1):n)}if(Object.getOwnPropertySymbols){return e.concat(Object.getOwnPropertySymbols(o))}return e};EventEmitter.prototype.listeners=function listeners(e){var t=r?r+e:e,o=this._events[t];if(!o)return[];if(o.fn)return[o.fn];for(var n=0,s=o.length,i=new Array(s);n{var o=r(310);var n=o.URL;var s=r(685);var i=r(687);var a=r(491);var c=r(781).Writable;var u=r(937)("follow-redirects");var f={GET:true,HEAD:true,OPTIONS:true,TRACE:true};var h=Object.create(null);["abort","aborted","connect","error","socket","timeout"].forEach((function(e){h[e]=function(t,r,o){this._redirectable.emit(e,t,r,o)}}));function RedirectableRequest(e,t){c.call(this);this._sanitizeOptions(e);this._options=e;this._ended=false;this._ending=false;this._redirectCount=0;this._redirects=[];this._requestBodyLength=0;this._requestBodyBuffers=[];if(t){this.on("response",t)}var r=this;this._onNativeResponse=function(e){r._processResponse(e)};this._performRequest()}RedirectableRequest.prototype=Object.create(c.prototype);RedirectableRequest.prototype.write=function(e,t,r){if(this._ending){throw new Error("write after end")}if(!(typeof e==="string"||typeof e==="object"&&"length"in e)){throw new Error("data should be a string, Buffer or Uint8Array")}if(typeof t==="function"){r=t;t=null}if(e.length===0){if(r){r()}return}if(this._requestBodyLength+e.length<=this._options.maxBodyLength){this._requestBodyLength+=e.length;this._requestBodyBuffers.push({data:e,encoding:t});this._currentRequest.write(e,t,r)}else{this.emit("error",new Error("Request body larger than maxBodyLength limit"));this.abort()}};RedirectableRequest.prototype.end=function(e,t,r){if(typeof e==="function"){r=e;e=t=null}else if(typeof t==="function"){r=t;t=null}if(!e){this._ended=this._ending=true;this._currentRequest.end(null,null,r)}else{var o=this;var n=this._currentRequest;this.write(e,t,(function(){o._ended=true;n.end(null,null,r)}));this._ending=true}};RedirectableRequest.prototype.setHeader=function(e,t){this._options.headers[e]=t;this._currentRequest.setHeader(e,t)};RedirectableRequest.prototype.removeHeader=function(e){delete this._options.headers[e];this._currentRequest.removeHeader(e)};RedirectableRequest.prototype.setTimeout=function(e,t){if(t){this.once("timeout",t)}if(this.socket){startTimer(this,e)}else{var r=this;this._currentRequest.once("socket",(function(){startTimer(r,e)}))}this.once("response",clearTimer);this.once("error",clearTimer);return this};function startTimer(e,t){clearTimeout(e._timeout);e._timeout=setTimeout((function(){e.emit("timeout")}),t)}function clearTimer(){clearTimeout(this._timeout)}["abort","flushHeaders","getHeader","setNoDelay","setSocketKeepAlive"].forEach((function(e){RedirectableRequest.prototype[e]=function(t,r){return this._currentRequest[e](t,r)}}));["aborted","connection","socket"].forEach((function(e){Object.defineProperty(RedirectableRequest.prototype,e,{get:function(){return this._currentRequest[e]}})}));RedirectableRequest.prototype._sanitizeOptions=function(e){if(!e.headers){e.headers={}}if(e.host){if(!e.hostname){e.hostname=e.host}delete e.host}if(!e.pathname&&e.path){var t=e.path.indexOf("?");if(t<0){e.pathname=e.path}else{e.pathname=e.path.substring(0,t);e.search=e.path.substring(t)}}};RedirectableRequest.prototype._performRequest=function(){var e=this._options.protocol;var t=this._options.nativeProtocols[e];if(!t){this.emit("error",new Error("Unsupported protocol "+e));return}if(this._options.agents){var r=e.substr(0,e.length-1);this._options.agent=this._options.agents[r]}var n=this._currentRequest=t.request(this._options,this._onNativeResponse);this._currentUrl=o.format(this._options);n._redirectable=this;for(var s in h){if(s){n.on(s,h[s])}}if(this._isRedirect){var i=0;var a=this;var c=this._requestBodyBuffers;(function writeNext(e){if(n===a._currentRequest){if(e){a.emit("error",e)}else if(i=300&&t<400){this._currentRequest.removeAllListeners();this._currentRequest.on("error",noop);this._currentRequest.abort();e.destroy();if(++this._redirectCount>this._options.maxRedirects){this.emit("error",new Error("Max redirects exceeded."));return}var n;var s=this._options.headers;if(t!==307&&!(this._options.method in f)){this._options.method="GET";this._requestBodyBuffers=[];for(n in s){if(/^content-/i.test(n)){delete s[n]}}}if(!this._isRedirect){for(n in s){if(/^host$/i.test(n)){delete s[n]}}}var i=o.resolve(this._currentUrl,r);u("redirecting to",i);Object.assign(this._options,o.parse(i));if(typeof this._options.beforeRedirect==="function"){try{this._options.beforeRedirect.call(null,this._options)}catch(e){this.emit("error",e);return}this._sanitizeOptions(this._options)}this._isRedirect=true;this._performRequest()}else{e.responseUrl=this._currentUrl;e.redirects=this._redirects;this.emit("response",e);this._requestBodyBuffers=[]}};function wrap(e){var t={maxRedirects:21,maxBodyLength:10*1024*1024};var r={};Object.keys(e).forEach((function(s){var i=s+":";var c=r[i]=e[s];var f=t[s]=Object.create(c);f.request=function(e,s,c){if(typeof e==="string"){var f=e;try{e=urlToOptions(new n(f))}catch(t){e=o.parse(f)}}else if(n&&e instanceof n){e=urlToOptions(e)}else{c=s;s=e;e={protocol:i}}if(typeof s==="function"){c=s;s=null}s=Object.assign({maxRedirects:t.maxRedirects,maxBodyLength:t.maxBodyLength},e,s);s.nativeProtocols=r;a.equal(s.protocol,i,"protocol mismatch");u("options",s);return new RedirectableRequest(s,c)};f.get=function(e,t,r){var o=f.request(e,t,r);o.end();return o}}));return t}function noop(){}function urlToOptions(e){var t={protocol:e.protocol,hostname:e.hostname.startsWith("[")?e.hostname.slice(1,-1):e.hostname,hash:e.hash,search:e.search,pathname:e.pathname,path:e.pathname+e.search,href:e.href};if(e.port!==""){t.port=Number(e.port)}return t}e.exports=wrap({http:s,https:i});e.exports.wrap=wrap},204:(e,t,r)=>{ +/*! + * Caron dimonio, con occhi di bragia + * loro accennando, tutte le raccoglie; + * batte col remo qualunque s’adagia + * + * Charon the demon, with the eyes of glede, + * Beckoning to them, collects them all together, + * Beats with his oar whoever lags behind + * + * Dante - The Divine Comedy (Canto III) + */ +e.exports=r(763)},763:(e,t,r)=>{var o=r(458).Server;function createProxyServer(e){return new o(e)}o.createProxyServer=createProxyServer;o.createServer=createProxyServer;o.createProxy=createProxyServer;e.exports=o},341:(e,t,r)=>{var o=t,n=r(310),s=r(85);var i=/(^|,)\s*upgrade\s*($|,)/i,a=/(^|,)\s*transfer-encoding\s*($|,)/i,c=/^https|wss/;o.isSSL=c;o.setupOutgoing=function(e,t,r,u){e.port=t[u||"target"].port||(c.test(t[u||"target"].protocol)?443:80);["host","hostname","socketPath","pfx","key","passphrase","cert","ca","ciphers","secureProtocol"].forEach((function(r){e[r]=t[u||"target"][r]}));e.method=t.method||r.method;e.headers=Object.assign({},r.headers);if(t.headers){Object.assign(e.headers,t.headers)}if(t.auth){e.auth=t.auth}if(t.ca){e.ca=t.ca}if(c.test(t[u||"target"].protocol)){e.rejectUnauthorized=typeof t.secure==="undefined"?true:t.secure}e.agent=t.agent||false;e.localAddress=t.localAddress;e.headers=e.headers||{};var f=Object.keys(e.headers).some((function(t){return t.toLowerCase()==="transfer-encoding"&&typeof e.headers[t]!=="undefined"}));if(f||typeof e.headers.connection==="string"&&a.test(e.headers.connection)){e.headers.connection="close"}if(!e.agent){if(typeof e.headers.connection!=="string"||!i.test(e.headers.connection)){e.headers.connection="close"}}var h=t[u||"target"];var p=h&&t.prependPath!==false?h.path||"":"";var d=!t.toProxy?n.parse(r.url).path||"":r.url;d=!t.ignorePath?d:"";e.path=o.urlJoin(p,d);if(t.changeOrigin){e.headers.host=s(e.port,t[u||"target"].protocol)&&!hasPort(e.host)?e.host+":"+e.port:e.host}return e};o.setupSocket=function(e){e.setTimeout(0);e.setNoDelay(true);e.setKeepAlive(true,0);return e};o.getPort=function(e){var t=e.headers.host?e.headers.host.match(/:(\d+)/):"";return t?t[1]:o.hasEncryptedConnection(e)?"443":"80"};o.hasEncryptedConnection=function(e){return Boolean(e.connection.encrypted||e.connection.pair)};o.urlJoin=function(){var e=Array.prototype.slice.call(arguments),t=e.length-1,r=e[t],o=r.split("?"),n;e[t]=o.shift();n=[e.filter(Boolean).join("/").replace(/\/+/g,"/").replace("http:/","http://").replace("https:/","https://")];n.push.apply(n,o);return n.join("?")};o.rewriteCookieProperty=function rewriteCookieProperty(e,t,r){if(Array.isArray(e)){return e.map((function(e){return rewriteCookieProperty(e,t,r)}))}return e.replace(new RegExp("(;\\s*"+r+"=)([^;]+)","i"),(function(e,r,o){var n;if(o in t){n=t[o]}else if("*"in t){n=t["*"]}else{return e}if(n){return r+n}else{return""}}))};function hasPort(e){return!!~e.indexOf(":")}},458:(e,t,r)=>{var o=e.exports,n=r(310).parse,s=r(993),i=r(685),a=r(687),c=r(101),u=r(761);o.Server=ProxyServer;function createRightProxy(e){return function(t){return function(r,o){var s=e==="ws"?this.wsPasses:this.webPasses,i=[].slice.call(arguments),a=i.length-1,c,u;if(typeof i[a]==="function"){u=i[a];a--}var f=t;if(!(i[a]instanceof Buffer)&&i[a]!==o){f=Object.assign({},t);Object.assign(f,i[a]);a--}if(i[a]instanceof Buffer){c=i[a]}["target","forward"].forEach((function(e){if(typeof f[e]==="string")f[e]=n(f[e])}));if(!f.target&&!f.forward){return this.emit("error",new Error("Must provide a proper URL as target"))}for(var h=0;h{var o=r(685),n=r(687),s=r(445),i=r(341),a=r(900);s=Object.keys(s).map((function(e){return s[e]}));var c={http:o,https:n}; +/*! + * Array of passes. + * + * A `pass` is just a function that is executed on `req, res, options` + * so that you can easily add new checks while still keeping the base + * flexible. + */e.exports={deleteLength:function deleteLength(e,t,r){if((e.method==="DELETE"||e.method==="OPTIONS")&&typeof e.headers["content-length"]==="undefined"&&typeof e.headers["transfer-encoding"]==="undefined"){e.headers["content-length"]="0"}},timeout:function timeout(e,t,r){if(r.timeout){e.socket.setTimeout(r.timeout)}},XHeaders:function XHeaders(e,t,r){if(!r.xfwd)return;var o=e.isSpdy||i.hasEncryptedConnection(e);var n={for:e.connection.remoteAddress||e.socket.remoteAddress,port:i.getPort(e),proto:o?"https":"http"};["for","port","proto"].forEach((function(t){e.headers["x-forwarded-"+t]=(e.headers["x-forwarded-"+t]||"")+(e.headers["x-forwarded-"+t]?",":"")+n[t]}));e.headers["x-forwarded-host"]=e.headers["x-forwarded-host"]||e.headers["host"]||""},stream:function stream(e,t,r,o,n,u){n.emit("start",e,t,r.target||r.forward);var f=r.followRedirects?a:c;var h=f.http;var p=f.https;if(r.forward){var d=(r.forward.protocol==="https:"?p:h).request(i.setupOutgoing(r.ssl||{},r,e,"forward"));var l=createErrorHandler(d,r.forward);e.on("error",l);d.on("error",l);(r.buffer||e).pipe(d);if(!r.target){return t.end()}}var v=(r.target.protocol==="https:"?p:h).request(i.setupOutgoing(r.ssl||{},r,e));v.on("socket",(function(o){if(n&&!v.getHeader("expect")){n.emit("proxyReq",v,e,t,r)}}));if(r.proxyTimeout){v.setTimeout(r.proxyTimeout,(function(){v.abort()}))}e.on("aborted",(function(){v.abort()}));var m=createErrorHandler(v,r.target);e.on("error",m);v.on("error",m);function createErrorHandler(r,o){return function proxyError(s){if(e.socket.destroyed&&s.code==="ECONNRESET"){n.emit("econnreset",s,e,t,o);return r.abort()}if(u){u(s,e,t,o)}else{n.emit("error",s,e,t,o)}}}(r.buffer||e).pipe(v);v.on("response",(function(o){if(n){n.emit("proxyRes",o,e,t)}if(!t.headersSent&&!r.selfHandleResponse){for(var i=0;i{var o=r(310),n=r(341);var s=/^201|30(1|2|7|8)$/; +/*! + * Array of passes. + * + * A `pass` is just a function that is executed on `req, res, options` + * so that you can easily add new checks while still keeping the base + * flexible. + */e.exports={removeChunked:function removeChunked(e,t,r){if(e.httpVersion==="1.0"){delete r.headers["transfer-encoding"]}},setConnection:function setConnection(e,t,r){if(e.httpVersion==="1.0"){r.headers.connection=e.headers.connection||"close"}else if(e.httpVersion!=="2.0"&&!r.headers.connection){r.headers.connection=e.headers.connection||"keep-alive"}},setRedirectHostRewrite:function setRedirectHostRewrite(e,t,r,n){if((n.hostRewrite||n.autoRewrite||n.protocolRewrite)&&r.headers["location"]&&s.test(r.statusCode)){var i=o.parse(n.target);var a=o.parse(r.headers["location"]);if(i.host!=a.host){return}if(n.hostRewrite){a.host=n.hostRewrite}else if(n.autoRewrite){a.host=e.headers["host"]}if(n.protocolRewrite){a.protocol=n.protocolRewrite}r.headers["location"]=a.format()}},writeHeaders:function writeHeaders(e,t,r,o){var s=o.cookieDomainRewrite,i=o.cookiePathRewrite,a=o.preserveHeaderKeyCase,c,setHeader=function(e,r){if(r==undefined)return;if(s&&e.toLowerCase()==="set-cookie"){r=n.rewriteCookieProperty(r,s,"domain")}if(i&&e.toLowerCase()==="set-cookie"){r=n.rewriteCookieProperty(r,i,"path")}t.setHeader(String(e).trim(),r)};if(typeof s==="string"){s={"*":s}}if(typeof i==="string"){i={"*":i}}if(a&&r.rawHeaders!=undefined){c={};for(var u=0;u{var o=r(685),n=r(687),s=r(341); +/*! + * Array of passes. + * + * A `pass` is just a function that is executed on `req, socket, options` + * so that you can easily add new checks while still keeping the base + * flexible. + */e.exports={checkMethodAndHeader:function checkMethodAndHeader(e,t){if(e.method!=="GET"||!e.headers.upgrade){t.destroy();return true}if(e.headers.upgrade.toLowerCase()!=="websocket"){t.destroy();return true}},XHeaders:function XHeaders(e,t,r){if(!r.xfwd)return;var o={for:e.connection.remoteAddress||e.socket.remoteAddress,port:s.getPort(e),proto:s.hasEncryptedConnection(e)?"wss":"ws"};["for","port","proto"].forEach((function(t){e.headers["x-forwarded-"+t]=(e.headers["x-forwarded-"+t]||"")+(e.headers["x-forwarded-"+t]?",":"")+o[t]}))},stream:function stream(e,t,r,i,a,c){var createHttpHeader=function(e,t){return Object.keys(t).reduce((function(e,r){var o=t[r];if(!Array.isArray(o)){e.push(r+": "+o);return e}for(var n=0;n{"use strict";e.exports=function required(e,t){t=t.split(":")[0];e=+e;if(!e)return false;switch(t){case"http":case"ws":return e!==80;case"https":case"wss":return e!==443;case"ftp":return e!==21;case"gopher":return e!==70;case"file":return false}return e!==0}},491:e=>{"use strict";e.exports=require("assert")},685:e=>{"use strict";e.exports=require("http")},687:e=>{"use strict";e.exports=require("https")},937:e=>{"use strict";e.exports=require("next/dist/compiled/debug")},781:e=>{"use strict";e.exports=require("stream")},310:e=>{"use strict";e.exports=require("url")},837:e=>{"use strict";e.exports=require("util")}};var t={};function __nccwpck_require__(r){var o=t[r];if(o!==undefined){return o.exports}var n=t[r]={exports:{}};var s=true;try{e[r](n,n.exports,__nccwpck_require__);s=false}finally{if(s)delete t[r]}return n.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var r=__nccwpck_require__(204);module.exports=r})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/http-proxy/package.json b/build/node_modules/next/dist/compiled/http-proxy/package.json new file mode 100644 index 0000000..5641bf5 --- /dev/null +++ b/build/node_modules/next/dist/compiled/http-proxy/package.json @@ -0,0 +1 @@ +{"name":"http-proxy","main":"index.js","author":"Charlie Robbins ","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/image-detector/detector.js b/build/node_modules/next/dist/compiled/image-detector/detector.js new file mode 100644 index 0000000..19317a7 --- /dev/null +++ b/build/node_modules/next/dist/compiled/image-detector/detector.js @@ -0,0 +1 @@ +(()=>{"use strict";var t={436:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:true});e.BMP=void 0;const r=n(779);e.BMP={validate:t=>(0,r.toUTF8String)(t,0,2)==="BM",calculate:t=>({height:Math.abs((0,r.readInt32LE)(t,22)),width:(0,r.readUInt32LE)(t,18)})}},67:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:true});e.CUR=void 0;const r=n(845);const i=n(779);const o=2;e.CUR={validate(t){const e=(0,i.readUInt16LE)(t,0);const n=(0,i.readUInt16LE)(t,4);if(e!==0||n===0)return false;const r=(0,i.readUInt16LE)(t,2);return r===o},calculate:t=>r.ICO.calculate(t)}},400:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:true});e.DDS=void 0;const r=n(779);e.DDS={validate:t=>(0,r.readUInt32LE)(t,0)===542327876,calculate:t=>({height:(0,r.readUInt32LE)(t,12),width:(0,r.readUInt32LE)(t,16)})}},197:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:true});e.GIF=void 0;const r=n(779);const i=/^GIF8[79]a/;e.GIF={validate:t=>i.test((0,r.toUTF8String)(t,0,6)),calculate:t=>({height:(0,r.readUInt16LE)(t,8),width:(0,r.readUInt16LE)(t,6)})}},974:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:true});e.HEIF=void 0;const r=n(779);const i={avif:"avif",mif1:"heif",msf1:"heif",heic:"heic",heix:"heic",hevc:"heic",hevx:"heic"};e.HEIF={validate(t){const e=(0,r.toUTF8String)(t,4,8);if(e!=="ftyp")return false;const n=(0,r.findBox)(t,"ftyp",0);if(!n)return false;const o=(0,r.toUTF8String)(t,n.offset+8,n.offset+12);return o in i},calculate(t){const e=(0,r.findBox)(t,"meta",0);const n=e&&(0,r.findBox)(t,"iprp",e.offset+12);const i=n&&(0,r.findBox)(t,"ipco",n.offset+8);const o=i&&(0,r.findBox)(t,"ispe",i.offset+8);if(o){return{height:(0,r.readUInt32BE)(t,o.offset+16),width:(0,r.readUInt32BE)(t,o.offset+12),type:(0,r.toUTF8String)(t,8,12)}}throw new TypeError("Invalid HEIF, no size found")}}},512:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:true});e.ICNS=void 0;const r=n(779);const i=4+4;const o=4;const s=4;const c={ICON:32,"ICN#":32,"icm#":16,icm4:16,icm8:16,"ics#":16,ics4:16,ics8:16,is32:16,s8mk:16,icp4:16,icl4:32,icl8:32,il32:32,l8mk:32,icp5:32,ic11:32,ich4:48,ich8:48,ih32:48,h8mk:48,icp6:64,ic12:32,it32:128,t8mk:128,ic07:128,ic08:256,ic13:256,ic09:512,ic14:512,ic10:1024};function readImageHeader(t,e){const n=e+s;return[(0,r.toUTF8String)(t,e,n),(0,r.readUInt32BE)(t,n)]}function getImageSize(t){const e=c[t];return{width:e,height:e,type:t}}e.ICNS={validate:t=>(0,r.toUTF8String)(t,0,4)==="icns",calculate(t){const e=t.length;const n=(0,r.readUInt32BE)(t,o);let s=i;let c=readImageHeader(t,s);let a=getImageSize(c[0]);s+=c[1];if(s===n)return a;const d={height:a.height,images:[a],width:a.width};while(s{Object.defineProperty(e,"__esModule",{value:true});e.ICO=void 0;const r=n(779);const i=1;const o=2+2+2;const s=1+1+1+1+2+2+4+4;function getSizeFromOffset(t,e){const n=t[e];return n===0?256:n}function getImageSize(t,e){const n=o+e*s;return{height:getSizeFromOffset(t,n+1),width:getSizeFromOffset(t,n)}}e.ICO={validate(t){const e=(0,r.readUInt16LE)(t,0);const n=(0,r.readUInt16LE)(t,4);if(e!==0||n===0)return false;const o=(0,r.readUInt16LE)(t,2);return o===i},calculate(t){const e=(0,r.readUInt16LE)(t,4);const n=getImageSize(t,0);if(e===1)return n;const i=[n];for(let n=1;n{Object.defineProperty(e,"__esModule",{value:true});e.typeHandlers=void 0;const r=n(436);const i=n(67);const o=n(400);const s=n(197);const c=n(974);const a=n(512);const d=n(845);const f=n(885);const u=n(530);const l=n(934);const h=n(245);const g=n(33);const I=n(105);const p=n(210);const U=n(448);const w=n(136);const v=n(414);const E=n(753);const m=n(940);const B=n(226);e.typeHandlers={bmp:r.BMP,cur:i.CUR,dds:o.DDS,gif:s.GIF,heif:c.HEIF,icns:a.ICNS,ico:d.ICO,j2c:f.J2C,jp2:u.JP2,jpg:l.JPG,jxl:h.JXL,"jxl-stream":g.JXLStream,ktx:I.KTX,png:p.PNG,pnm:U.PNM,psd:w.PSD,svg:v.SVG,tga:E.TGA,tiff:m.TIFF,webp:B.WEBP}},885:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:true});e.J2C=void 0;const r=n(779);e.J2C={validate:t=>(0,r.readUInt32BE)(t,0)===4283432785,calculate:t=>({height:(0,r.readUInt32BE)(t,12),width:(0,r.readUInt32BE)(t,8)})}},530:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:true});e.JP2=void 0;const r=n(779);e.JP2={validate(t){const e=(0,r.toUTF8String)(t,4,8);if(e!=="jP ")return false;const n=(0,r.findBox)(t,"ftyp",0);if(!n)return false;const i=(0,r.toUTF8String)(t,n.offset+8,n.offset+12);return i==="jp2 "},calculate(t){const e=(0,r.findBox)(t,"jp2h",0);const n=e&&(0,r.findBox)(t,"ihdr",e.offset+8);if(n){return{height:(0,r.readUInt32BE)(t,n.offset+8),width:(0,r.readUInt32BE)(t,n.offset+12)}}throw new TypeError("Unsupported JPEG 2000 format")}}},934:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:true});e.JPG=void 0;const r=n(779);const i="45786966";const o=2;const s=6;const c=2;const a="4d4d";const d="4949";const f=12;const u=2;function isEXIF(t){return(0,r.toHexString)(t,2,6)===i}function extractSize(t,e){return{height:(0,r.readUInt16BE)(t,e),width:(0,r.readUInt16BE)(t,e+2)}}function extractOrientation(t,e){const n=8;const i=s+n;const o=(0,r.readUInt)(t,16,i,e);for(let n=0;nt.length){return}const c=t.slice(o,s);const a=(0,r.readUInt)(c,16,0,e);if(a===274){const t=(0,r.readUInt)(c,16,2,e);if(t!==3){return}const n=(0,r.readUInt)(c,32,4,e);if(n!==1){return}return(0,r.readUInt)(c,16,8,e)}}}function validateExifBlock(t,e){const n=t.slice(o,e);const i=(0,r.toHexString)(n,s,s+c);const f=i===a;const u=i===d;if(f||u){return extractOrientation(n,f)}}function validateInput(t,e){if(e>t.length){throw new TypeError("Corrupt JPG, exceeded buffer limits")}}e.JPG={validate:t=>(0,r.toHexString)(t,0,2)==="ffd8",calculate(t){t=t.slice(4);let e;let n;while(t.length){const i=(0,r.readUInt16BE)(t,0);if(t[i]!==255){t=t.slice(1);continue}if(isEXIF(t)){e=validateExifBlock(t,i)}validateInput(t,i);n=t[i+1];if(n===192||n===193||n===194){const n=extractSize(t,i+5);if(!e){return n}return{height:n.height,orientation:e,width:n.width}}t=t.slice(i+2)}throw new TypeError("Invalid JPG, no size found")}}},33:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:true});e.JXLStream=void 0;const r=n(779);const i=n(112);function calculateImageDimension(t,e){if(e){return 8*(1+t.getBits(5))}else{const e=t.getBits(2);const n=[9,13,18,30][e];return 1+t.getBits(n)}}function calculateImageWidth(t,e,n,r){if(e&&n===0){return 8*(1+t.getBits(5))}else if(n===0){return calculateImageDimension(t,false)}else{const t=[1,1.2,4/3,1.5,16/9,5/4,2];return Math.floor(r*t[n-1])}}e.JXLStream={validate:t=>(0,r.toHexString)(t,0,2)==="ff0a",calculate(t){const e=new i.BitReader(t,"little-endian");const n=e.getBits(1)===1;const r=calculateImageDimension(e,n);const o=e.getBits(3);const s=calculateImageWidth(e,n,o,r);return{width:s,height:r}}}},245:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:true});e.JXL=void 0;const r=n(779);const i=n(33);function extractCodestream(t){const e=(0,r.findBox)(t,"jxlc",0);if(e){return t.slice(e.offset+8,e.offset+e.size)}const n=extractPartialStreams(t);if(n.length>0){return concatenateCodestreams(n)}return undefined}function extractPartialStreams(t){const e=[];let n=0;while(nt+e.length),0);const n=new Uint8Array(e);let r=0;for(const e of t){n.set(e,r);r+=e.length}return n}e.JXL={validate:t=>{const e=(0,r.toUTF8String)(t,4,8);if(e!=="JXL ")return false;const n=(0,r.findBox)(t,"ftyp",0);if(!n)return false;const i=(0,r.toUTF8String)(t,n.offset+8,n.offset+12);return i==="jxl "},calculate(t){const e=extractCodestream(t);if(e)return i.JXLStream.calculate(e);throw new Error("No codestream found in JXL container")}}},105:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:true});e.KTX=void 0;const r=n(779);e.KTX={validate:t=>{const e=(0,r.toUTF8String)(t,1,7);return["KTX 11","KTX 20"].includes(e)},calculate:t=>{const e=t[5]===49?"ktx":"ktx2";const n=e==="ktx"?36:20;return{height:(0,r.readUInt32LE)(t,n+4),width:(0,r.readUInt32LE)(t,n),type:e}}}},210:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:true});e.PNG=void 0;const r=n(779);const i="PNG\r\n\n";const o="IHDR";const s="CgBI";e.PNG={validate(t){if(i===(0,r.toUTF8String)(t,1,8)){let e=(0,r.toUTF8String)(t,12,16);if(e===s){e=(0,r.toUTF8String)(t,28,32)}if(e!==o){throw new TypeError("Invalid PNG")}return true}return false},calculate(t){if((0,r.toUTF8String)(t,12,16)===s){return{height:(0,r.readUInt32BE)(t,36),width:(0,r.readUInt32BE)(t,32)}}return{height:(0,r.readUInt32BE)(t,20),width:(0,r.readUInt32BE)(t,16)}}}},448:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:true});e.PNM=void 0;const r=n(779);const i={P1:"pbm/ascii",P2:"pgm/ascii",P3:"ppm/ascii",P4:"pbm",P5:"pgm",P6:"ppm",P7:"pam",PF:"pfm"};const o={default:t=>{let e=[];while(t.length>0){const n=t.shift();if(n[0]==="#"){continue}e=n.split(" ");break}if(e.length===2){return{height:parseInt(e[1],10),width:parseInt(e[0],10)}}else{throw new TypeError("Invalid PNM")}},pam:t=>{const e={};while(t.length>0){const n=t.shift();if(n.length>16||n.charCodeAt(0)>128){continue}const[r,i]=n.split(" ");if(r&&i){e[r.toLowerCase()]=parseInt(i,10)}if(e.height&&e.width){break}}if(e.height&&e.width){return{height:e.height,width:e.width}}else{throw new TypeError("Invalid PAM")}}};e.PNM={validate:t=>(0,r.toUTF8String)(t,0,2)in i,calculate(t){const e=(0,r.toUTF8String)(t,0,2);const n=i[e];const s=(0,r.toUTF8String)(t,3).split(/[\r\n]+/);const c=o[n]||o.default;return c(s)}}},136:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:true});e.PSD=void 0;const r=n(779);e.PSD={validate:t=>(0,r.toUTF8String)(t,0,4)==="8BPS",calculate:t=>({height:(0,r.readUInt32BE)(t,14),width:(0,r.readUInt32BE)(t,18)})}},414:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:true});e.SVG=void 0;const r=n(779);const i=/"']|"[^"]*"|'[^']*')*>/;const o={height:/\sheight=(['"])([^%]+?)\1/,root:i,viewbox:/\sviewBox=(['"])(.+?)\1/i,width:/\swidth=(['"])([^%]+?)\1/};const s=2.54;const c={in:96,cm:96/s,em:16,ex:8,m:96/s*100,mm:96/s/10,pc:96/72/12,pt:96/72,px:1};const a=new RegExp(`^([0-9.]+(?:e\\d+)?)(${Object.keys(c).join("|")})?$`);function parseLength(t){const e=a.exec(t);if(!e){return undefined}return Math.round(Number(e[1])*(c[e[2]]||1))}function parseViewbox(t){const e=t.split(" ");return{height:parseLength(e[3]),width:parseLength(e[2])}}function parseAttributes(t){const e=t.match(o.width);const n=t.match(o.height);const r=t.match(o.viewbox);return{height:n&&parseLength(n[2]),viewbox:r&&parseViewbox(r[2]),width:e&&parseLength(e[2])}}function calculateByDimensions(t){return{height:t.height,width:t.width}}function calculateByViewbox(t,e){const n=e.width/e.height;if(t.width){return{height:Math.floor(t.width/n),width:t.width}}if(t.height){return{height:t.height,width:Math.floor(t.height*n)}}return{height:e.height,width:e.width}}e.SVG={validate:t=>i.test((0,r.toUTF8String)(t,0,1e3)),calculate(t){const e=(0,r.toUTF8String)(t).match(o.root);if(e){const t=parseAttributes(e[0]);if(t.width&&t.height){return calculateByDimensions(t)}if(t.viewbox){return calculateByViewbox(t,t.viewbox)}}throw new TypeError("Invalid SVG")}}},753:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:true});e.TGA=void 0;const r=n(779);e.TGA={validate(t){return(0,r.readUInt16LE)(t,0)===0&&(0,r.readUInt16LE)(t,4)===0},calculate(t){return{height:(0,r.readUInt16LE)(t,14),width:(0,r.readUInt16LE)(t,12)}}}},940:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:true});e.TIFF=void 0;const r=n(147);const i=n(779);function readIFD(t,e,n){const o=(0,i.readUInt)(t,32,4,n);let s=1024;const c=r.statSync(e).size;if(o+s>c){s=c-o-10}const a=new Uint8Array(s);const d=r.openSync(e,"r");r.readSync(d,a,0,s,o);r.closeSync(d);return a.slice(2)}function readValue(t,e){const n=(0,i.readUInt)(t,16,8,e);const r=(0,i.readUInt)(t,16,10,e);return(r<<16)+n}function nextTag(t){if(t.length>24){return t.slice(12)}}function extractTags(t,e){const n={};let r=t;while(r&&r.length){const t=(0,i.readUInt)(r,16,0,e);const o=(0,i.readUInt)(r,16,2,e);const s=(0,i.readUInt)(r,32,4,e);if(t===0){break}else{if(s===1&&(o===3||o===4)){n[t]=readValue(r,e)}r=nextTag(r)}}return n}function determineEndianness(t){const e=(0,i.toUTF8String)(t,0,2);if("II"===e){return"LE"}else if("MM"===e){return"BE"}}const o=["49492a00","4d4d002a"];e.TIFF={validate:t=>o.includes((0,i.toHexString)(t,0,4)),calculate(t,e){if(!e){throw new TypeError("Tiff doesn't support buffer")}const n=determineEndianness(t)==="BE";const r=readIFD(t,e,n);const i=extractTags(r,n);const o=i[256];const s=i[257];if(!o||!s){throw new TypeError("Invalid Tiff. Missing tags")}return{height:s,width:o}}}},779:(t,e)=>{Object.defineProperty(e,"__esModule",{value:true});e.findBox=e.readUInt=e.readUInt32LE=e.readUInt32BE=e.readInt32LE=e.readUInt24LE=e.readUInt16LE=e.readUInt16BE=e.readInt16LE=e.toHexString=e.toUTF8String=void 0;const n=new TextDecoder;const toUTF8String=(t,e=0,r=t.length)=>n.decode(t.slice(e,r));e.toUTF8String=toUTF8String;const toHexString=(t,e=0,n=t.length)=>t.slice(e,n).reduce(((t,e)=>t+("0"+e.toString(16)).slice(-2)),"");e.toHexString=toHexString;const readInt16LE=(t,e=0)=>{const n=t[e]+t[e+1]*2**8;return n|(n&2**15)*131070};e.readInt16LE=readInt16LE;const readUInt16BE=(t,e=0)=>t[e]*2**8+t[e+1];e.readUInt16BE=readUInt16BE;const readUInt16LE=(t,e=0)=>t[e]+t[e+1]*2**8;e.readUInt16LE=readUInt16LE;const readUInt24LE=(t,e=0)=>t[e]+t[e+1]*2**8+t[e+2]*2**16;e.readUInt24LE=readUInt24LE;const readInt32LE=(t,e=0)=>t[e]+t[e+1]*2**8+t[e+2]*2**16+(t[e+3]<<24);e.readInt32LE=readInt32LE;const readUInt32BE=(t,e=0)=>t[e]*2**24+t[e+1]*2**16+t[e+2]*2**8+t[e+3];e.readUInt32BE=readUInt32BE;const readUInt32LE=(t,e=0)=>t[e]+t[e+1]*2**8+t[e+2]*2**16+t[e+3]*2**24;e.readUInt32LE=readUInt32LE;const r={readUInt16BE:e.readUInt16BE,readUInt16LE:e.readUInt16LE,readUInt32BE:e.readUInt32BE,readUInt32LE:e.readUInt32LE};function readUInt(t,e,n,i){n=n||0;const o=i?"BE":"LE";const s="readUInt"+e+o;return r[s](t,n)}e.readUInt=readUInt;function readBox(t,n){if(t.length-n<4)return;const r=(0,e.readUInt32BE)(t,n);if(t.length-n0?r.size:8}}e.findBox=findBox},226:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:true});e.WEBP=void 0;const r=n(779);function calculateExtended(t){return{height:1+(0,r.readUInt24LE)(t,7),width:1+(0,r.readUInt24LE)(t,4)}}function calculateLossless(t){return{height:1+((t[4]&15)<<10|t[3]<<2|(t[2]&192)>>6),width:1+((t[2]&63)<<8|t[1])}}function calculateLossy(t){return{height:(0,r.readInt16LE)(t,8)&16383,width:(0,r.readInt16LE)(t,6)&16383}}e.WEBP={validate(t){const e="RIFF"===(0,r.toUTF8String)(t,0,4);const n="WEBP"===(0,r.toUTF8String)(t,8,12);const i="VP8"===(0,r.toUTF8String)(t,12,15);return e&&n&&i},calculate(t){const e=(0,r.toUTF8String)(t,12,16);t=t.slice(20,30);if(e==="VP8X"){const e=t[0];const n=(e&192)===0;const r=(e&1)===0;if(n&&r){return calculateExtended(t)}else{throw new TypeError("Invalid WebP")}}if(e==="VP8 "&&t[0]!==47){return calculateLossy(t)}const n=(0,r.toHexString)(t,3,6);if(e==="VP8L"&&n!=="9d012a"){return calculateLossless(t)}throw new TypeError("Invalid WebP")}}},112:(t,e)=>{Object.defineProperty(e,"__esModule",{value:true});e.BitReader=void 0;class BitReader{constructor(t,e){this.input=t;this.endianness=e;this.byteOffset=2;this.bitOffset=0}getBits(t=1){let e=0;let n=0;while(n=this.input.length){throw new Error("Reached end of input")}const r=this.input[this.byteOffset];const i=8-this.bitOffset;const o=Math.min(t-n,i);if(this.endianness==="little-endian"){const t=(1<>this.bitOffset&t;e|=i<>8-this.bitOffset-o;e=e<{t.exports=require("fs")}};var e={};function __nccwpck_require__(n){var r=e[n];if(r!==undefined){return r.exports}var i=e[n]={exports:{}};var o=true;try{t[n](i,i.exports,__nccwpck_require__);o=false}finally{if(o)delete e[n]}return i.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var n={};(()=>{var t=n;Object.defineProperty(t,"__esModule",{value:true});t.detector=void 0;const e=__nccwpck_require__(229);const r=Object.keys(e.typeHandlers);const i={56:"psd",66:"bmp",68:"dds",71:"gif",73:"tiff",77:"tiff",82:"webp",105:"icns",137:"png",255:"jpg"};function detector(t){const n=t[0];if(n in i){const r=i[n];if(r&&e.typeHandlers[r].validate(t)){return r}}const finder=n=>e.typeHandlers[n].validate(t);return r.find(finder)}t.detector=detector})();module.exports=n})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/image-size/index.js b/build/node_modules/next/dist/compiled/image-size/index.js new file mode 100644 index 0000000..33a9f07 --- /dev/null +++ b/build/node_modules/next/dist/compiled/image-size/index.js @@ -0,0 +1 @@ +(()=>{var t={457:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:true});e.detector=void 0;const r=n(229);const i=Object.keys(r.typeHandlers);const s={56:"psd",66:"bmp",68:"dds",71:"gif",73:"tiff",77:"tiff",82:"webp",105:"icns",137:"png",255:"jpg"};function detector(t){const e=t[0];if(e in s){const n=s[e];if(n&&r.typeHandlers[n].validate(t)){return n}}const finder=e=>r.typeHandlers[e].validate(t);return i.find(finder)}e.detector=detector},833:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:true});e.types=e.setConcurrency=e.disableTypes=e.disableFS=e.imageSize=void 0;const r=n(147);const i=n(17);const s=n(927);const o=n(229);const c=n(457);const a=512*1024;const u=new s.default({concurrency:100,autostart:true});const d={disabledFS:false,disabledTypes:[]};function lookup(t,e){const n=(0,c.detector)(t);if(typeof n!=="undefined"){if(d.disabledTypes.indexOf(n)>-1){throw new TypeError("disabled file type: "+n)}if(n in o.typeHandlers){const r=o.typeHandlers[n].calculate(t,e);if(r!==undefined){r.type=r.type??n;return r}}}throw new TypeError("unsupported file type: "+n+" (file: "+e+")")}async function readFileAsync(t){const e=await r.promises.open(t,"r");try{const{size:t}=await e.stat();if(t<=0){throw new Error("Empty file")}const n=Math.min(t,a);const r=new Uint8Array(n);await e.read(r,0,n,0);return r}finally{await e.close()}}function readFileSync(t){const e=r.openSync(t,"r");try{const{size:t}=r.fstatSync(e);if(t<=0){throw new Error("Empty file")}const n=Math.min(t,a);const i=new Uint8Array(n);r.readSync(e,i,0,n,0);return i}finally{r.closeSync(e)}}t.exports=e=imageSize;e["default"]=imageSize;function imageSize(t,e){if(t instanceof Uint8Array){return lookup(t)}if(typeof t!=="string"||d.disabledFS){throw new TypeError("invalid invocation. input should be a Uint8Array")}const n=i.resolve(t);if(typeof e==="function"){u.push((()=>readFileAsync(n).then((t=>process.nextTick(e,null,lookup(t,n)))).catch(e)))}else{const t=readFileSync(n);return lookup(t,n)}}e.imageSize=imageSize;const disableFS=t=>{d.disabledFS=t};e.disableFS=disableFS;const disableTypes=t=>{d.disabledTypes=t};e.disableTypes=disableTypes;const setConcurrency=t=>{u.concurrency=t};e.setConcurrency=setConcurrency;e.types=Object.keys(o.typeHandlers)},436:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:true});e.BMP=void 0;const r=n(779);e.BMP={validate:t=>(0,r.toUTF8String)(t,0,2)==="BM",calculate:t=>({height:Math.abs((0,r.readInt32LE)(t,22)),width:(0,r.readUInt32LE)(t,18)})}},67:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:true});e.CUR=void 0;const r=n(845);const i=n(779);const s=2;e.CUR={validate(t){const e=(0,i.readUInt16LE)(t,0);const n=(0,i.readUInt16LE)(t,4);if(e!==0||n===0)return false;const r=(0,i.readUInt16LE)(t,2);return r===s},calculate:t=>r.ICO.calculate(t)}},400:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:true});e.DDS=void 0;const r=n(779);e.DDS={validate:t=>(0,r.readUInt32LE)(t,0)===542327876,calculate:t=>({height:(0,r.readUInt32LE)(t,12),width:(0,r.readUInt32LE)(t,16)})}},197:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:true});e.GIF=void 0;const r=n(779);const i=/^GIF8[79]a/;e.GIF={validate:t=>i.test((0,r.toUTF8String)(t,0,6)),calculate:t=>({height:(0,r.readUInt16LE)(t,8),width:(0,r.readUInt16LE)(t,6)})}},974:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:true});e.HEIF=void 0;const r=n(779);const i={avif:"avif",mif1:"heif",msf1:"heif",heic:"heic",heix:"heic",hevc:"heic",hevx:"heic"};e.HEIF={validate(t){const e=(0,r.toUTF8String)(t,4,8);if(e!=="ftyp")return false;const n=(0,r.findBox)(t,"ftyp",0);if(!n)return false;const s=(0,r.toUTF8String)(t,n.offset+8,n.offset+12);return s in i},calculate(t){const e=(0,r.findBox)(t,"meta",0);const n=e&&(0,r.findBox)(t,"iprp",e.offset+12);const i=n&&(0,r.findBox)(t,"ipco",n.offset+8);const s=i&&(0,r.findBox)(t,"ispe",i.offset+8);if(s){return{height:(0,r.readUInt32BE)(t,s.offset+16),width:(0,r.readUInt32BE)(t,s.offset+12),type:(0,r.toUTF8String)(t,8,12)}}throw new TypeError("Invalid HEIF, no size found")}}},512:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:true});e.ICNS=void 0;const r=n(779);const i=4+4;const s=4;const o=4;const c={ICON:32,"ICN#":32,"icm#":16,icm4:16,icm8:16,"ics#":16,ics4:16,ics8:16,is32:16,s8mk:16,icp4:16,icl4:32,icl8:32,il32:32,l8mk:32,icp5:32,ic11:32,ich4:48,ich8:48,ih32:48,h8mk:48,icp6:64,ic12:32,it32:128,t8mk:128,ic07:128,ic08:256,ic13:256,ic09:512,ic14:512,ic10:1024};function readImageHeader(t,e){const n=e+o;return[(0,r.toUTF8String)(t,e,n),(0,r.readUInt32BE)(t,n)]}function getImageSize(t){const e=c[t];return{width:e,height:e,type:t}}e.ICNS={validate:t=>(0,r.toUTF8String)(t,0,4)==="icns",calculate(t){const e=t.length;const n=(0,r.readUInt32BE)(t,s);let o=i;let c=readImageHeader(t,o);let a=getImageSize(c[0]);o+=c[1];if(o===n)return a;const u={height:a.height,images:[a],width:a.width};while(o{"use strict";Object.defineProperty(e,"__esModule",{value:true});e.ICO=void 0;const r=n(779);const i=1;const s=2+2+2;const o=1+1+1+1+2+2+4+4;function getSizeFromOffset(t,e){const n=t[e];return n===0?256:n}function getImageSize(t,e){const n=s+e*o;return{height:getSizeFromOffset(t,n+1),width:getSizeFromOffset(t,n)}}e.ICO={validate(t){const e=(0,r.readUInt16LE)(t,0);const n=(0,r.readUInt16LE)(t,4);if(e!==0||n===0)return false;const s=(0,r.readUInt16LE)(t,2);return s===i},calculate(t){const e=(0,r.readUInt16LE)(t,4);const n=getImageSize(t,0);if(e===1)return n;const i=[n];for(let n=1;n{"use strict";Object.defineProperty(e,"__esModule",{value:true});e.typeHandlers=void 0;const r=n(436);const i=n(67);const s=n(400);const o=n(197);const c=n(974);const a=n(512);const u=n(845);const d=n(885);const l=n(530);const f=n(934);const h=n(245);const p=n(33);const g=n(105);const y=n(210);const I=n(448);const v=n(136);const w=n(414);const E=n(753);const m=n(940);const U=n(226);e.typeHandlers={bmp:r.BMP,cur:i.CUR,dds:s.DDS,gif:o.GIF,heif:c.HEIF,icns:a.ICNS,ico:u.ICO,j2c:d.J2C,jp2:l.JP2,jpg:f.JPG,jxl:h.JXL,"jxl-stream":p.JXLStream,ktx:g.KTX,png:y.PNG,pnm:I.PNM,psd:v.PSD,svg:w.SVG,tga:E.TGA,tiff:m.TIFF,webp:U.WEBP}},885:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:true});e.J2C=void 0;const r=n(779);e.J2C={validate:t=>(0,r.readUInt32BE)(t,0)===4283432785,calculate:t=>({height:(0,r.readUInt32BE)(t,12),width:(0,r.readUInt32BE)(t,8)})}},530:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:true});e.JP2=void 0;const r=n(779);e.JP2={validate(t){const e=(0,r.toUTF8String)(t,4,8);if(e!=="jP ")return false;const n=(0,r.findBox)(t,"ftyp",0);if(!n)return false;const i=(0,r.toUTF8String)(t,n.offset+8,n.offset+12);return i==="jp2 "},calculate(t){const e=(0,r.findBox)(t,"jp2h",0);const n=e&&(0,r.findBox)(t,"ihdr",e.offset+8);if(n){return{height:(0,r.readUInt32BE)(t,n.offset+8),width:(0,r.readUInt32BE)(t,n.offset+12)}}throw new TypeError("Unsupported JPEG 2000 format")}}},934:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:true});e.JPG=void 0;const r=n(779);const i="45786966";const s=2;const o=6;const c=2;const a="4d4d";const u="4949";const d=12;const l=2;function isEXIF(t){return(0,r.toHexString)(t,2,6)===i}function extractSize(t,e){return{height:(0,r.readUInt16BE)(t,e),width:(0,r.readUInt16BE)(t,e+2)}}function extractOrientation(t,e){const n=8;const i=o+n;const s=(0,r.readUInt)(t,16,i,e);for(let n=0;nt.length){return}const c=t.slice(s,o);const a=(0,r.readUInt)(c,16,0,e);if(a===274){const t=(0,r.readUInt)(c,16,2,e);if(t!==3){return}const n=(0,r.readUInt)(c,32,4,e);if(n!==1){return}return(0,r.readUInt)(c,16,8,e)}}}function validateExifBlock(t,e){const n=t.slice(s,e);const i=(0,r.toHexString)(n,o,o+c);const d=i===a;const l=i===u;if(d||l){return extractOrientation(n,d)}}function validateInput(t,e){if(e>t.length){throw new TypeError("Corrupt JPG, exceeded buffer limits")}}e.JPG={validate:t=>(0,r.toHexString)(t,0,2)==="ffd8",calculate(t){t=t.slice(4);let e;let n;while(t.length){const i=(0,r.readUInt16BE)(t,0);if(t[i]!==255){t=t.slice(1);continue}if(isEXIF(t)){e=validateExifBlock(t,i)}validateInput(t,i);n=t[i+1];if(n===192||n===193||n===194){const n=extractSize(t,i+5);if(!e){return n}return{height:n.height,orientation:e,width:n.width}}t=t.slice(i+2)}throw new TypeError("Invalid JPG, no size found")}}},33:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:true});e.JXLStream=void 0;const r=n(779);const i=n(112);function calculateImageDimension(t,e){if(e){return 8*(1+t.getBits(5))}else{const e=t.getBits(2);const n=[9,13,18,30][e];return 1+t.getBits(n)}}function calculateImageWidth(t,e,n,r){if(e&&n===0){return 8*(1+t.getBits(5))}else if(n===0){return calculateImageDimension(t,false)}else{const t=[1,1.2,4/3,1.5,16/9,5/4,2];return Math.floor(r*t[n-1])}}e.JXLStream={validate:t=>(0,r.toHexString)(t,0,2)==="ff0a",calculate(t){const e=new i.BitReader(t,"little-endian");const n=e.getBits(1)===1;const r=calculateImageDimension(e,n);const s=e.getBits(3);const o=calculateImageWidth(e,n,s,r);return{width:o,height:r}}}},245:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:true});e.JXL=void 0;const r=n(779);const i=n(33);function extractCodestream(t){const e=(0,r.findBox)(t,"jxlc",0);if(e){return t.slice(e.offset+8,e.offset+e.size)}const n=extractPartialStreams(t);if(n.length>0){return concatenateCodestreams(n)}return undefined}function extractPartialStreams(t){const e=[];let n=0;while(nt+e.length),0);const n=new Uint8Array(e);let r=0;for(const e of t){n.set(e,r);r+=e.length}return n}e.JXL={validate:t=>{const e=(0,r.toUTF8String)(t,4,8);if(e!=="JXL ")return false;const n=(0,r.findBox)(t,"ftyp",0);if(!n)return false;const i=(0,r.toUTF8String)(t,n.offset+8,n.offset+12);return i==="jxl "},calculate(t){const e=extractCodestream(t);if(e)return i.JXLStream.calculate(e);throw new Error("No codestream found in JXL container")}}},105:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:true});e.KTX=void 0;const r=n(779);e.KTX={validate:t=>{const e=(0,r.toUTF8String)(t,1,7);return["KTX 11","KTX 20"].includes(e)},calculate:t=>{const e=t[5]===49?"ktx":"ktx2";const n=e==="ktx"?36:20;return{height:(0,r.readUInt32LE)(t,n+4),width:(0,r.readUInt32LE)(t,n),type:e}}}},210:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:true});e.PNG=void 0;const r=n(779);const i="PNG\r\n\n";const s="IHDR";const o="CgBI";e.PNG={validate(t){if(i===(0,r.toUTF8String)(t,1,8)){let e=(0,r.toUTF8String)(t,12,16);if(e===o){e=(0,r.toUTF8String)(t,28,32)}if(e!==s){throw new TypeError("Invalid PNG")}return true}return false},calculate(t){if((0,r.toUTF8String)(t,12,16)===o){return{height:(0,r.readUInt32BE)(t,36),width:(0,r.readUInt32BE)(t,32)}}return{height:(0,r.readUInt32BE)(t,20),width:(0,r.readUInt32BE)(t,16)}}}},448:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:true});e.PNM=void 0;const r=n(779);const i={P1:"pbm/ascii",P2:"pgm/ascii",P3:"ppm/ascii",P4:"pbm",P5:"pgm",P6:"ppm",P7:"pam",PF:"pfm"};const s={default:t=>{let e=[];while(t.length>0){const n=t.shift();if(n[0]==="#"){continue}e=n.split(" ");break}if(e.length===2){return{height:parseInt(e[1],10),width:parseInt(e[0],10)}}else{throw new TypeError("Invalid PNM")}},pam:t=>{const e={};while(t.length>0){const n=t.shift();if(n.length>16||n.charCodeAt(0)>128){continue}const[r,i]=n.split(" ");if(r&&i){e[r.toLowerCase()]=parseInt(i,10)}if(e.height&&e.width){break}}if(e.height&&e.width){return{height:e.height,width:e.width}}else{throw new TypeError("Invalid PAM")}}};e.PNM={validate:t=>(0,r.toUTF8String)(t,0,2)in i,calculate(t){const e=(0,r.toUTF8String)(t,0,2);const n=i[e];const o=(0,r.toUTF8String)(t,3).split(/[\r\n]+/);const c=s[n]||s.default;return c(o)}}},136:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:true});e.PSD=void 0;const r=n(779);e.PSD={validate:t=>(0,r.toUTF8String)(t,0,4)==="8BPS",calculate:t=>({height:(0,r.readUInt32BE)(t,14),width:(0,r.readUInt32BE)(t,18)})}},414:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:true});e.SVG=void 0;const r=n(779);const i=/"']|"[^"]*"|'[^']*')*>/;const s={height:/\sheight=(['"])([^%]+?)\1/,root:i,viewbox:/\sviewBox=(['"])(.+?)\1/i,width:/\swidth=(['"])([^%]+?)\1/};const o=2.54;const c={in:96,cm:96/o,em:16,ex:8,m:96/o*100,mm:96/o/10,pc:96/72/12,pt:96/72,px:1};const a=new RegExp(`^([0-9.]+(?:e\\d+)?)(${Object.keys(c).join("|")})?$`);function parseLength(t){const e=a.exec(t);if(!e){return undefined}return Math.round(Number(e[1])*(c[e[2]]||1))}function parseViewbox(t){const e=t.split(" ");return{height:parseLength(e[3]),width:parseLength(e[2])}}function parseAttributes(t){const e=t.match(s.width);const n=t.match(s.height);const r=t.match(s.viewbox);return{height:n&&parseLength(n[2]),viewbox:r&&parseViewbox(r[2]),width:e&&parseLength(e[2])}}function calculateByDimensions(t){return{height:t.height,width:t.width}}function calculateByViewbox(t,e){const n=e.width/e.height;if(t.width){return{height:Math.floor(t.width/n),width:t.width}}if(t.height){return{height:t.height,width:Math.floor(t.height*n)}}return{height:e.height,width:e.width}}e.SVG={validate:t=>i.test((0,r.toUTF8String)(t,0,1e3)),calculate(t){const e=(0,r.toUTF8String)(t).match(s.root);if(e){const t=parseAttributes(e[0]);if(t.width&&t.height){return calculateByDimensions(t)}if(t.viewbox){return calculateByViewbox(t,t.viewbox)}}throw new TypeError("Invalid SVG")}}},753:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:true});e.TGA=void 0;const r=n(779);e.TGA={validate(t){return(0,r.readUInt16LE)(t,0)===0&&(0,r.readUInt16LE)(t,4)===0},calculate(t){return{height:(0,r.readUInt16LE)(t,14),width:(0,r.readUInt16LE)(t,12)}}}},940:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:true});e.TIFF=void 0;const r=n(147);const i=n(779);function readIFD(t,e,n){const s=(0,i.readUInt)(t,32,4,n);let o=1024;const c=r.statSync(e).size;if(s+o>c){o=c-s-10}const a=new Uint8Array(o);const u=r.openSync(e,"r");r.readSync(u,a,0,o,s);r.closeSync(u);return a.slice(2)}function readValue(t,e){const n=(0,i.readUInt)(t,16,8,e);const r=(0,i.readUInt)(t,16,10,e);return(r<<16)+n}function nextTag(t){if(t.length>24){return t.slice(12)}}function extractTags(t,e){const n={};let r=t;while(r&&r.length){const t=(0,i.readUInt)(r,16,0,e);const s=(0,i.readUInt)(r,16,2,e);const o=(0,i.readUInt)(r,32,4,e);if(t===0){break}else{if(o===1&&(s===3||s===4)){n[t]=readValue(r,e)}r=nextTag(r)}}return n}function determineEndianness(t){const e=(0,i.toUTF8String)(t,0,2);if("II"===e){return"LE"}else if("MM"===e){return"BE"}}const s=["49492a00","4d4d002a"];e.TIFF={validate:t=>s.includes((0,i.toHexString)(t,0,4)),calculate(t,e){if(!e){throw new TypeError("Tiff doesn't support buffer")}const n=determineEndianness(t)==="BE";const r=readIFD(t,e,n);const i=extractTags(r,n);const s=i[256];const o=i[257];if(!s||!o){throw new TypeError("Invalid Tiff. Missing tags")}return{height:o,width:s}}}},779:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:true});e.findBox=e.readUInt=e.readUInt32LE=e.readUInt32BE=e.readInt32LE=e.readUInt24LE=e.readUInt16LE=e.readUInt16BE=e.readInt16LE=e.toHexString=e.toUTF8String=void 0;const n=new TextDecoder;const toUTF8String=(t,e=0,r=t.length)=>n.decode(t.slice(e,r));e.toUTF8String=toUTF8String;const toHexString=(t,e=0,n=t.length)=>t.slice(e,n).reduce(((t,e)=>t+("0"+e.toString(16)).slice(-2)),"");e.toHexString=toHexString;const readInt16LE=(t,e=0)=>{const n=t[e]+t[e+1]*2**8;return n|(n&2**15)*131070};e.readInt16LE=readInt16LE;const readUInt16BE=(t,e=0)=>t[e]*2**8+t[e+1];e.readUInt16BE=readUInt16BE;const readUInt16LE=(t,e=0)=>t[e]+t[e+1]*2**8;e.readUInt16LE=readUInt16LE;const readUInt24LE=(t,e=0)=>t[e]+t[e+1]*2**8+t[e+2]*2**16;e.readUInt24LE=readUInt24LE;const readInt32LE=(t,e=0)=>t[e]+t[e+1]*2**8+t[e+2]*2**16+(t[e+3]<<24);e.readInt32LE=readInt32LE;const readUInt32BE=(t,e=0)=>t[e]*2**24+t[e+1]*2**16+t[e+2]*2**8+t[e+3];e.readUInt32BE=readUInt32BE;const readUInt32LE=(t,e=0)=>t[e]+t[e+1]*2**8+t[e+2]*2**16+t[e+3]*2**24;e.readUInt32LE=readUInt32LE;const r={readUInt16BE:e.readUInt16BE,readUInt16LE:e.readUInt16LE,readUInt32BE:e.readUInt32BE,readUInt32LE:e.readUInt32LE};function readUInt(t,e,n,i){n=n||0;const s=i?"BE":"LE";const o="readUInt"+e+s;return r[o](t,n)}e.readUInt=readUInt;function readBox(t,n){if(t.length-n<4)return;const r=(0,e.readUInt32BE)(t,n);if(t.length-n0?r.size:8}}e.findBox=findBox},226:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:true});e.WEBP=void 0;const r=n(779);function calculateExtended(t){return{height:1+(0,r.readUInt24LE)(t,7),width:1+(0,r.readUInt24LE)(t,4)}}function calculateLossless(t){return{height:1+((t[4]&15)<<10|t[3]<<2|(t[2]&192)>>6),width:1+((t[2]&63)<<8|t[1])}}function calculateLossy(t){return{height:(0,r.readInt16LE)(t,8)&16383,width:(0,r.readInt16LE)(t,6)&16383}}e.WEBP={validate(t){const e="RIFF"===(0,r.toUTF8String)(t,0,4);const n="WEBP"===(0,r.toUTF8String)(t,8,12);const i="VP8"===(0,r.toUTF8String)(t,12,15);return e&&n&&i},calculate(t){const e=(0,r.toUTF8String)(t,12,16);t=t.slice(20,30);if(e==="VP8X"){const e=t[0];const n=(e&192)===0;const r=(e&1)===0;if(n&&r){return calculateExtended(t)}else{throw new TypeError("Invalid WebP")}}if(e==="VP8 "&&t[0]!==47){return calculateLossy(t)}const n=(0,r.toHexString)(t,3,6);if(e==="VP8L"&&n!=="9d012a"){return calculateLossless(t)}throw new TypeError("Invalid WebP")}}},112:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:true});e.BitReader=void 0;class BitReader{constructor(t,e){this.input=t;this.endianness=e;this.byteOffset=2;this.bitOffset=0}getBits(t=1){let e=0;let n=0;while(n=this.input.length){throw new Error("Reached end of input")}const r=this.input[this.byteOffset];const i=8-this.bitOffset;const s=Math.min(t-n,i);if(this.endianness==="little-endian"){const t=(1<>this.bitOffset&t;e|=i<>8-this.bitOffset-s;e=e<{try{var r=n(837);if(typeof r.inherits!=="function")throw"";t.exports=r.inherits}catch(e){t.exports=n(782)}},782:t=>{if(typeof Object.create==="function"){t.exports=function inherits(t,e){if(e){t.super_=e;t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:false,writable:true,configurable:true}})}}}else{t.exports=function inherits(t,e){if(e){t.super_=e;var TempCtor=function(){};TempCtor.prototype=e.prototype;t.prototype=new TempCtor;t.prototype.constructor=t}}}},927:(t,e,n)=>{var r=n(842);var i=n(361).EventEmitter;t.exports=Queue;t.exports["default"]=Queue;function Queue(t){if(!(this instanceof Queue)){return new Queue(t)}i.call(this);t=t||{};this.concurrency=t.concurrency||Infinity;this.timeout=t.timeout||0;this.autostart=t.autostart||false;this.results=t.results||null;this.pending=0;this.session=0;this.running=false;this.jobs=[];this.timers={}}r(Queue,i);var s=["pop","shift","indexOf","lastIndexOf"];s.forEach((function(t){Queue.prototype[t]=function(){return Array.prototype[t].apply(this.jobs,arguments)}}));Queue.prototype.slice=function(t,e){this.jobs=this.jobs.slice(t,e);return this};Queue.prototype.reverse=function(){this.jobs.reverse();return this};var o=["push","unshift","splice"];o.forEach((function(t){Queue.prototype[t]=function(){var e=Array.prototype[t].apply(this.jobs,arguments);if(this.autostart){this.start()}return e}}));Object.defineProperty(Queue.prototype,"length",{get:function(){return this.pending+this.jobs.length}});Queue.prototype.start=function(t){if(t){callOnErrorOrEnd.call(this,t)}this.running=true;if(this.pending>=this.concurrency){return}if(this.jobs.length===0){if(this.pending===0){done.call(this)}return}var e=this;var n=this.jobs.shift();var r=true;var i=this.session;var s=null;var o=false;var c=null;var a=n.hasOwnProperty("timeout")?n.timeout:this.timeout;function next(t,a){if(r&&e.session===i){r=false;e.pending--;if(s!==null){delete e.timers[s];clearTimeout(s)}if(t){e.emit("error",t,n)}else if(o===false){if(c!==null){e.results[c]=Array.prototype.slice.call(arguments,1)}e.emit("success",a,n)}if(e.session===i){if(e.pending===0&&e.jobs.length===0){done.call(e)}else if(e.running){e.start()}}}}if(a){s=setTimeout((function(){o=true;if(e.listeners("timeout").length>0){e.emit("timeout",next,n)}else{next()}}),a);this.timers[s]=s}if(this.results){c=this.results.length;this.results[c]=null}this.pending++;e.emit("start",n);var u=n(next);if(u&&u.then&&typeof u.then==="function"){u.then((function(t){return next(null,t)})).catch((function(t){return next(t||true)}))}if(this.running&&this.jobs.length>0){this.start()}};Queue.prototype.stop=function(){this.running=false};Queue.prototype.end=function(t){clearTimers.call(this);this.jobs.length=0;this.pending=0;done.call(this,t)};function clearTimers(){for(var t in this.timers){var e=this.timers[t];delete this.timers[t];clearTimeout(e)}}function callOnErrorOrEnd(t){var e=this;this.on("error",onerror);this.on("end",onend);function onerror(t){e.end(t)}function onend(n){e.removeListener("error",onerror);e.removeListener("end",onend);t(n,this.results)}}function done(t){this.session++;this.running=false;this.emit("end",t)}},361:t=>{"use strict";t.exports=require("events")},147:t=>{"use strict";t.exports=require("fs")},17:t=>{"use strict";t.exports=require("path")},837:t=>{"use strict";t.exports=require("util")}};var e={};function __nccwpck_require__(n){var r=e[n];if(r!==undefined){return r.exports}var i=e[n]={exports:{}};var s=true;try{t[n](i,i.exports,__nccwpck_require__);s=false}finally{if(s)delete e[n]}return i.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var n=__nccwpck_require__(833);module.exports=n})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/image-size/package.json b/build/node_modules/next/dist/compiled/image-size/package.json new file mode 100644 index 0000000..3c504b2 --- /dev/null +++ b/build/node_modules/next/dist/compiled/image-size/package.json @@ -0,0 +1 @@ +{"name":"image-size","main":"index.js","author":"netroy (http://netroy.in/)","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/ipaddr.js/ipaddr.js b/build/node_modules/next/dist/compiled/ipaddr.js/ipaddr.js new file mode 100644 index 0000000..7cdd61b --- /dev/null +++ b/build/node_modules/next/dist/compiled/ipaddr.js/ipaddr.js @@ -0,0 +1 @@ +(()=>{var t={104:function(t){(function(e){"use strict";const r="(0?\\d+|0x[a-f0-9]+)";const n={fourOctet:new RegExp(`^${r}\\.${r}\\.${r}\\.${r}$`,"i"),threeOctet:new RegExp(`^${r}\\.${r}\\.${r}$`,"i"),twoOctet:new RegExp(`^${r}\\.${r}$`,"i"),longValue:new RegExp(`^${r}$`,"i")};const i=new RegExp(`^0[0-7]+$`,"i");const s=new RegExp(`^0x[a-f0-9]+$`,"i");const o="%[0-9a-z]{1,}";const a="(?:[0-9a-f]+::?)+";const p={zoneIndex:new RegExp(o,"i"),native:new RegExp(`^(::)?(${a})?([0-9a-f]+)?(::)?(${o})?$`,"i"),deprecatedTransitional:new RegExp(`^(?:::)(${r}\\.${r}\\.${r}\\.${r}(${o})?)$`,"i"),transitional:new RegExp(`^((?:${a})|(?:::)(?:${a})?)${r}\\.${r}\\.${r}\\.${r}(${o})?$`,"i")};function expandIPv6(t,e){if(t.indexOf("::")!==t.lastIndexOf("::")){return null}let r=0;let n=-1;let i=(t.match(p.zoneIndex)||[])[0];let s,o;if(i){i=i.substring(1);t=t.replace(/%.+$/,"")}while((n=t.indexOf(":",n+1))>=0){r++}if(t.substr(0,2)==="::"){r--}if(t.substr(-2,2)==="::"){r--}if(r>e){return null}o=e-r;s=":";while(o--){s+="0:"}t=t.replace("::",s);if(t[0]===":"){t=t.slice(1)}if(t[t.length-1]===":"){t=t.slice(0,-1)}e=function(){const e=t.split(":");const r=[];for(let t=0;t0){s=r-n;if(s<0){s=0}if(t[i]>>s!==e[i]>>s){return false}n-=r;i+=1}return true}function parseIntAuto(t){if(s.test(t)){return parseInt(t,16)}if(t[0]==="0"&&!isNaN(parseInt(t[1],10))){if(i.test(t)){return parseInt(t,8)}throw new Error(`ipaddr: cannot parse ${t} as octal`)}return parseInt(t,10)}function padPart(t,e){while(t.length=0;n-=1){i=this.octets[n];if(i in r){s=r[i];if(e&&s!==0){return null}if(s!==8){e=true}t+=s}else{return null}}return 32-t};IPv4.prototype.range=function(){return u.subnetMatch(this,this.SpecialRanges)};IPv4.prototype.toByteArray=function(){return this.octets.slice(0)};IPv4.prototype.toIPv4MappedAddress=function(){return u.IPv6.parse(`::ffff:${this.toString()}`)};IPv4.prototype.toNormalizedString=function(){return this.toString()};IPv4.prototype.toString=function(){return this.octets.join(".")};return IPv4}();u.IPv4.broadcastAddressFromCIDR=function(t){try{const e=this.parseCIDR(t);const r=e[0].toByteArray();const n=this.subnetMaskFromPrefixLength(e[1]).toByteArray();const i=[];let s=0;while(s<4){i.push(parseInt(r[s],10)|parseInt(n[s],10)^255);s++}return new this(i)}catch(t){throw new Error("ipaddr: the address does not have IPv4 CIDR format")}};u.IPv4.isIPv4=function(t){return this.parser(t)!==null};u.IPv4.isValid=function(t){try{new this(this.parser(t));return true}catch(t){return false}};u.IPv4.isValidCIDR=function(t){try{this.parseCIDR(t);return true}catch(t){return false}};u.IPv4.isValidFourPartDecimal=function(t){if(u.IPv4.isValid(t)&&t.match(/^(0|[1-9]\d*)(\.(0|[1-9]\d*)){3}$/)){return true}else{return false}};u.IPv4.networkAddressFromCIDR=function(t){let e,r,n,i,s;try{e=this.parseCIDR(t);n=e[0].toByteArray();s=this.subnetMaskFromPrefixLength(e[1]).toByteArray();i=[];r=0;while(r<4){i.push(parseInt(n[r],10)&parseInt(s[r],10));r++}return new this(i)}catch(t){throw new Error("ipaddr: the address does not have IPv4 CIDR format")}};u.IPv4.parse=function(t){const e=this.parser(t);if(e===null){throw new Error("ipaddr: string is not formatted like an IPv4 Address")}return new this(e)};u.IPv4.parseCIDR=function(t){let e;if(e=t.match(/^(.+)\/(\d+)$/)){const t=parseInt(e[2]);if(t>=0&&t<=32){const r=[this.parse(e[1]),t];Object.defineProperty(r,"toString",{value:function(){return this.join("/")}});return r}}throw new Error("ipaddr: string is not formatted like an IPv4 CIDR range")};u.IPv4.parser=function(t){let e,r,i;if(e=t.match(n.fourOctet)){return function(){const t=e.slice(1,6);const n=[];for(let e=0;e4294967295||i<0){throw new Error("ipaddr: address outside defined range")}return function(){const t=[];let e;for(e=0;e<=24;e+=8){t.push(i>>e&255)}return t}().reverse()}else if(e=t.match(n.twoOctet)){return function(){const t=e.slice(1,4);const r=[];i=parseIntAuto(t[1]);if(i>16777215||i<0){throw new Error("ipaddr: address outside defined range")}r.push(parseIntAuto(t[0]));r.push(i>>16&255);r.push(i>>8&255);r.push(i&255);return r}()}else if(e=t.match(n.threeOctet)){return function(){const t=e.slice(1,5);const r=[];i=parseIntAuto(t[2]);if(i>65535||i<0){throw new Error("ipaddr: address outside defined range")}r.push(parseIntAuto(t[0]));r.push(parseIntAuto(t[1]));r.push(i>>8&255);r.push(i&255);return r}()}else{return null}};u.IPv4.subnetMaskFromPrefixLength=function(t){t=parseInt(t);if(t<0||t>32){throw new Error("ipaddr: invalid IPv4 prefix length")}const e=[0,0,0,0];let r=0;const n=Math.floor(t/8);while(r=0;s-=1){n=this.parts[s];if(n in r){i=r[n];if(e&&i!==0){return null}if(i!==16){e=true}t+=i}else{return null}}return 128-t};IPv6.prototype.range=function(){return u.subnetMatch(this,this.SpecialRanges)};IPv6.prototype.toByteArray=function(){let t;const e=[];const r=this.parts;for(let n=0;n>8);e.push(t&255)}return e};IPv6.prototype.toFixedLengthString=function(){const t=function(){const t=[];for(let e=0;e>8,e&255,r>>8,r&255])};IPv6.prototype.toNormalizedString=function(){const t=function(){const t=[];for(let e=0;en){r=i.index;n=i[0].length}}if(n<0){return e}return`${e.substring(0,r)}::${e.substring(r+n)}`};IPv6.prototype.toString=function(){return this.toRFC5952String()};return IPv6}();u.IPv6.broadcastAddressFromCIDR=function(t){try{const e=this.parseCIDR(t);const r=e[0].toByteArray();const n=this.subnetMaskFromPrefixLength(e[1]).toByteArray();const i=[];let s=0;while(s<16){i.push(parseInt(r[s],10)|parseInt(n[s],10)^255);s++}return new this(i)}catch(t){throw new Error(`ipaddr: the address does not have IPv6 CIDR format (${t})`)}};u.IPv6.isIPv6=function(t){return this.parser(t)!==null};u.IPv6.isValid=function(t){if(typeof t==="string"&&t.indexOf(":")===-1){return false}try{const e=this.parser(t);new this(e.parts,e.zoneId);return true}catch(t){return false}};u.IPv6.isValidCIDR=function(t){if(typeof t==="string"&&t.indexOf(":")===-1){return false}try{this.parseCIDR(t);return true}catch(t){return false}};u.IPv6.networkAddressFromCIDR=function(t){let e,r,n,i,s;try{e=this.parseCIDR(t);n=e[0].toByteArray();s=this.subnetMaskFromPrefixLength(e[1]).toByteArray();i=[];r=0;while(r<16){i.push(parseInt(n[r],10)&parseInt(s[r],10));r++}return new this(i)}catch(t){throw new Error(`ipaddr: the address does not have IPv6 CIDR format (${t})`)}};u.IPv6.parse=function(t){const e=this.parser(t);if(e.parts===null){throw new Error("ipaddr: string is not formatted like an IPv6 Address")}return new this(e.parts,e.zoneId)};u.IPv6.parseCIDR=function(t){let e,r,n;if(r=t.match(/^(.+)\/(\d+)$/)){e=parseInt(r[2]);if(e>=0&&e<=128){n=[this.parse(r[1]),e];Object.defineProperty(n,"toString",{value:function(){return this.join("/")}});return n}}throw new Error("ipaddr: string is not formatted like an IPv6 CIDR range")};u.IPv6.parser=function(t){let e,r,n,i,s,o;if(n=t.match(p.deprecatedTransitional)){return this.parser(`::ffff:${n[1]}`)}if(p.native.test(t)){return expandIPv6(t,8)}if(n=t.match(p.transitional)){o=n[6]||"";e=n[1];if(!n[1].endsWith("::")){e=e.slice(0,-1)}e=expandIPv6(e+o,6);if(e.parts){s=[parseInt(n[2]),parseInt(n[3]),parseInt(n[4]),parseInt(n[5])];for(r=0;r128){throw new Error("ipaddr: invalid IPv6 prefix length")}const e=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];let r=0;const n=Math.floor(t/8);while(r","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/is-animated/index.js b/build/node_modules/next/dist/compiled/is-animated/index.js new file mode 100644 index 0000000..faaa0b1 --- /dev/null +++ b/build/node_modules/next/dist/compiled/is-animated/index.js @@ -0,0 +1 @@ +(()=>{var e={199:(e,r,t)=>{"use strict";var a=t(226);var i=t(643);var n=t(68);function isAnimated(e){if(a.isGIF(e)){return a.isAnimated(e)}if(i.isPNG(e)){return i.isAnimated(e)}if(n.isWebp(e)){return n.isAnimated(e)}return false}e.exports=isAnimated},226:(e,r)=>{"use strict";function getDataBlocksLength(e,r){var t=0;while(e[r+t]){t+=e[r+t]+1}return t+1}r.isGIF=function(e){var r=e.slice(0,3).toString("ascii");return r==="GIF"};r.isAnimated=function(e){var r,t,a;var i=0;var n=0;a=e.slice(0,3).toString("ascii");if(a!=="GIF"){return false}r=e[10]&128;t=e[10]&7;i+=6;i+=7;i+=r?3*Math.pow(2,t+1):0;while(n<2&&i1}},643:(e,r)=>{r.isPNG=function(e){var r=e.slice(0,8).toString("hex");return r==="89504e470d0a1a0a"};r.isAnimated=function(e){var r=false;var t=false;var a=false;var i=null;var n=8;while(n{r.isWebp=function(e){var r=[87,69,66,80];for(var t=0;t","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/is-docker/index.js b/build/node_modules/next/dist/compiled/is-docker/index.js new file mode 100644 index 0000000..debcfe4 --- /dev/null +++ b/build/node_modules/next/dist/compiled/is-docker/index.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={748:(e,r,t)=>{const n=t(147);let u;function hasDockerEnv(){try{n.statSync("/.dockerenv");return true}catch(e){return false}}function hasDockerCGroup(){try{return n.readFileSync("/proc/self/cgroup","utf8").includes("docker")}catch(e){return false}}e.exports=()=>{if(u===undefined){u=hasDockerEnv()||hasDockerCGroup()}return u}},147:e=>{e.exports=require("fs")}};var r={};function __nccwpck_require__(t){var n=r[t];if(n!==undefined){return n.exports}var u=r[t]={exports:{}};var _=true;try{e[t](u,u.exports,__nccwpck_require__);_=false}finally{if(_)delete r[t]}return u.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var t=__nccwpck_require__(748);module.exports=t})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/is-docker/package.json b/build/node_modules/next/dist/compiled/is-docker/package.json new file mode 100644 index 0000000..8b1e235 --- /dev/null +++ b/build/node_modules/next/dist/compiled/is-docker/package.json @@ -0,0 +1 @@ +{"name":"is-docker","main":"index.js","author":{"name":"Sindre Sorhus","email":"sindresorhus@gmail.com","url":"sindresorhus.com"},"license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/is-wsl/index.js b/build/node_modules/next/dist/compiled/is-wsl/index.js new file mode 100644 index 0000000..ae629c2 --- /dev/null +++ b/build/node_modules/next/dist/compiled/is-wsl/index.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={412:(e,r,t)=>{const s=t(37);const o=t(147);const _=t(409);const isWsl=()=>{if(process.platform!=="linux"){return false}if(s.release().toLowerCase().includes("microsoft")){if(_()){return false}return true}try{return o.readFileSync("/proc/version","utf8").toLowerCase().includes("microsoft")?!_():false}catch(e){return false}};if(process.env.__IS_WSL_TEST__){e.exports=isWsl}else{e.exports=isWsl()}},147:e=>{e.exports=require("fs")},409:e=>{e.exports=require("next/dist/compiled/is-docker")},37:e=>{e.exports=require("os")}};var r={};function __nccwpck_require__(t){var s=r[t];if(s!==undefined){return s.exports}var o=r[t]={exports:{}};var _=true;try{e[t](o,o.exports,__nccwpck_require__);_=false}finally{if(_)delete r[t]}return o.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var t=__nccwpck_require__(412);module.exports=t})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/is-wsl/package.json b/build/node_modules/next/dist/compiled/is-wsl/package.json new file mode 100644 index 0000000..8d4d4cf --- /dev/null +++ b/build/node_modules/next/dist/compiled/is-wsl/package.json @@ -0,0 +1 @@ +{"name":"is-wsl","main":"index.js","author":{"name":"Sindre Sorhus","email":"sindresorhus@gmail.com","url":"sindresorhus.com"},"license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/jsonwebtoken/index.js b/build/node_modules/next/dist/compiled/jsonwebtoken/index.js new file mode 100644 index 0000000..b0e8b08 --- /dev/null +++ b/build/node_modules/next/dist/compiled/jsonwebtoken/index.js @@ -0,0 +1,11 @@ +(()=>{var e={112:(e,r,t)=>{"use strict";var n=t(300).Buffer;var a=t(300).SlowBuffer;e.exports=bufferEq;function bufferEq(e,r){if(!n.isBuffer(e)||!n.isBuffer(r)){return false}if(e.length!==r.length){return false}var t=0;for(var a=0;a{"use strict";var n=t(911).Buffer;var a=t(8);var i=128,s=0,o=32,u=16,l=2,c=u|o|s<<6,f=l|s<<6;function base64Url(e){return e.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}function signatureAsBuffer(e){if(n.isBuffer(e)){return e}else if("string"===typeof e){return n.from(e,"base64")}throw new TypeError("ECDSA signature must be a Base64 string or a Buffer")}function derToJose(e,r){e=signatureAsBuffer(e);var t=a(r);var s=t+1;var o=e.length;var u=0;if(e[u++]!==c){throw new Error('Could not find expected "seq"')}var l=e[u++];if(l===(i|1)){l=e[u++]}if(o-u=i;if(a){--n}return n}function joseToDer(e,r){e=signatureAsBuffer(e);var t=a(r);var s=e.length;if(s!==t*2){throw new TypeError('"'+r+'" signatures must be "'+t*2+'" bytes, saw "'+s+'"')}var o=countPadding(e,0,t);var u=countPadding(e,t,e.length);var l=t-o;var h=t-u;var p=1+1+l+1+1+h;var d=p{"use strict";function getParamSize(e){var r=(e/8|0)+(e%8===0?0:1);return r}var r={ES256:getParamSize(256),ES384:getParamSize(384),ES512:getParamSize(521)};function getParamBytesForAlg(e){var t=r[e];if(t){return t}throw new Error('Unknown algorithm "'+e+'"')}e.exports=getParamBytesForAlg},443:(e,r,t)=>{var n=t(111);e.exports=function(e,r){r=r||{};var t=n.decode(e,r);if(!t){return null}var a=t.payload;if(typeof a==="string"){try{var i=JSON.parse(a);if(i!==null&&typeof i==="object"){a=i}}catch(e){}}if(r.complete===true){return{header:t.header,payload:a,signature:t.signature}}return a}},773:(e,r,t)=>{e.exports={verify:t(624),sign:t(743),JsonWebTokenError:t(131),NotBeforeError:t(422),TokenExpiredError:t(794)};Object.defineProperty(e.exports,"decode",{enumerable:false,value:t(443)})},131:e=>{var JsonWebTokenError=function(e,r){Error.call(this,e);if(Error.captureStackTrace){Error.captureStackTrace(this,this.constructor)}this.name="JsonWebTokenError";this.message=e;if(r)this.inner=r};JsonWebTokenError.prototype=Object.create(Error.prototype);JsonWebTokenError.prototype.constructor=JsonWebTokenError;e.exports=JsonWebTokenError},422:(e,r,t)=>{var n=t(131);var NotBeforeError=function(e,r){n.call(this,e);this.name="NotBeforeError";this.date=r};NotBeforeError.prototype=Object.create(n.prototype);NotBeforeError.prototype.constructor=NotBeforeError;e.exports=NotBeforeError},794:(e,r,t)=>{var n=t(131);var TokenExpiredError=function(e,r){n.call(this,e);this.name="TokenExpiredError";this.expiredAt=r};TokenExpiredError.prototype=Object.create(n.prototype);TokenExpiredError.prototype.constructor=TokenExpiredError;e.exports=TokenExpiredError},186:(e,r,t)=>{const n=t(521);e.exports=n.satisfies(process.version,">=15.7.0")},900:(e,r,t)=>{var n=t(521);e.exports=n.satisfies(process.version,"^6.12.0 || >=8.0.0")},444:(e,r,t)=>{const n=t(521);e.exports=n.satisfies(process.version,">=16.9.0")},126:(e,r,t)=>{var n=t(958);e.exports=function(e,r){var t=r||Math.floor(Date.now()/1e3);if(typeof e==="string"){var a=n(e);if(typeof a==="undefined"){return}return Math.floor(t+a/1e3)}else if(typeof e==="number"){return t+e}else{return}}},253:(e,r,t)=>{const n=t(186);const a=t(444);const i={ec:["ES256","ES384","ES512"],rsa:["RS256","PS256","RS384","PS384","RS512","PS512"],"rsa-pss":["PS256","PS384","PS512"]};const s={ES256:"prime256v1",ES384:"secp384r1",ES512:"secp521r1"};e.exports=function(e,r){if(!e||!r)return;const t=r.asymmetricKeyType;if(!t)return;const o=i[t];if(!o){throw new Error(`Unknown key type "${t}".`)}if(!o.includes(e)){throw new Error(`"alg" parameter for "${t}" key type must be one of: ${o.join(", ")}.`)}if(n){switch(t){case"ec":const t=r.asymmetricKeyDetails.namedCurve;const n=s[e];if(t!==n){throw new Error(`"alg" parameter "${e}" requires curve "${n}".`)}break;case"rsa-pss":if(a){const t=parseInt(e.slice(-3),10);const{hashAlgorithm:n,mgf1HashAlgorithm:a,saltLength:i}=r.asymmetricKeyDetails;if(n!==`sha${t}`||a!==n){throw new Error(`Invalid key for this operation, its RSA-PSS parameters do not meet the requirements of "alg" ${e}.`)}if(i!==undefined&&i>t>>3){throw new Error(`Invalid key for this operation, its RSA-PSS parameter saltLength does not meet the requirements of "alg" ${e}.`)}}break}}}},743:(e,r,t)=>{const n=t(126);const a=t(900);const i=t(253);const s=t(111);const{includes:o,isBoolean:u,isInteger:l,isNumber:c,isPlainObject:f,isString:h,once:p}=t(536);const{KeyObject:d,createSecretKey:y,createPrivateKey:g}=t(113);const v=["RS256","RS384","RS512","ES256","ES384","ES512","HS256","HS384","HS512","none"];if(a){v.splice(3,0,"PS256","PS384","PS512")}const b={expiresIn:{isValid:function(e){return l(e)||h(e)&&e},message:'"expiresIn" should be a number of seconds or string representing a timespan'},notBefore:{isValid:function(e){return l(e)||h(e)&&e},message:'"notBefore" should be a number of seconds or string representing a timespan'},audience:{isValid:function(e){return h(e)||Array.isArray(e)},message:'"audience" must be a string or array'},algorithm:{isValid:o.bind(null,v),message:'"algorithm" must be a valid string enum value'},header:{isValid:f,message:'"header" must be an object'},encoding:{isValid:h,message:'"encoding" must be a string'},issuer:{isValid:h,message:'"issuer" must be a string'},subject:{isValid:h,message:'"subject" must be a string'},jwtid:{isValid:h,message:'"jwtid" must be a string'},noTimestamp:{isValid:u,message:'"noTimestamp" must be a boolean'},keyid:{isValid:h,message:'"keyid" must be a string'},mutatePayload:{isValid:u,message:'"mutatePayload" must be a boolean'},allowInsecureKeySizes:{isValid:u,message:'"allowInsecureKeySizes" must be a boolean'},allowInvalidAsymmetricKeyTypes:{isValid:u,message:'"allowInvalidAsymmetricKeyTypes" must be a boolean'}};const m={iat:{isValid:c,message:'"iat" should be a number of seconds'},exp:{isValid:c,message:'"exp" should be a number of seconds'},nbf:{isValid:c,message:'"nbf" should be a number of seconds'}};function validate(e,r,t,n){if(!f(t)){throw new Error('Expected "'+n+'" to be a plain object.')}Object.keys(t).forEach((function(a){const i=e[a];if(!i){if(!r){throw new Error('"'+a+'" is not allowed in "'+n+'"')}return}if(!i.isValid(t[a])){throw new Error(i.message)}}))}function validateOptions(e){return validate(b,false,e,"options")}function validatePayload(e){return validate(m,true,e,"payload")}const _={audience:"aud",issuer:"iss",subject:"sub",jwtid:"jti"};const w=["expiresIn","notBefore","noTimestamp","audience","issuer","subject","jwtid"];e.exports=function(e,r,t,a){if(typeof t==="function"){a=t;t={}}else{t=t||{}}const o=typeof e==="object"&&!Buffer.isBuffer(e);const u=Object.assign({alg:t.algorithm||"HS256",typ:o?"JWT":undefined,kid:t.keyid},t.header);function failure(e){if(a){return a(e)}throw e}if(!r&&t.algorithm!=="none"){return failure(new Error("secretOrPrivateKey must have a value"))}if(r!=null&&!(r instanceof d)){try{r=g(r)}catch(e){try{r=y(typeof r==="string"?Buffer.from(r):r)}catch(e){return failure(new Error("secretOrPrivateKey is not valid key material"))}}}if(u.alg.startsWith("HS")&&r.type!=="secret"){return failure(new Error(`secretOrPrivateKey must be a symmetric key when using ${u.alg}`))}else if(/^(?:RS|PS|ES)/.test(u.alg)){if(r.type!=="private"){return failure(new Error(`secretOrPrivateKey must be an asymmetric key when using ${u.alg}`))}if(!t.allowInsecureKeySizes&&!u.alg.startsWith("ES")&&r.asymmetricKeyDetails!==undefined&&r.asymmetricKeyDetails.modulusLength<2048){return failure(new Error(`secretOrPrivateKey has a minimum key size of 2048 bits for ${u.alg}`))}}if(typeof e==="undefined"){return failure(new Error("payload is required"))}else if(o){try{validatePayload(e)}catch(e){return failure(e)}if(!t.mutatePayload){e=Object.assign({},e)}}else{const r=w.filter((function(e){return typeof t[e]!=="undefined"}));if(r.length>0){return failure(new Error("invalid "+r.join(",")+" option for "+typeof e+" payload"))}}if(typeof e.exp!=="undefined"&&typeof t.expiresIn!=="undefined"){return failure(new Error('Bad "options.expiresIn" option the payload already has an "exp" property.'))}if(typeof e.nbf!=="undefined"&&typeof t.notBefore!=="undefined"){return failure(new Error('Bad "options.notBefore" option the payload already has an "nbf" property.'))}try{validateOptions(t)}catch(e){return failure(e)}if(!t.allowInvalidAsymmetricKeyTypes){try{i(u.alg,r)}catch(e){return failure(e)}}const l=e.iat||Math.floor(Date.now()/1e3);if(t.noTimestamp){delete e.iat}else if(o){e.iat=l}if(typeof t.notBefore!=="undefined"){try{e.nbf=n(t.notBefore,l)}catch(e){return failure(e)}if(typeof e.nbf==="undefined"){return failure(new Error('"notBefore" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60'))}}if(typeof t.expiresIn!=="undefined"&&typeof e==="object"){try{e.exp=n(t.expiresIn,l)}catch(e){return failure(e)}if(typeof e.exp==="undefined"){return failure(new Error('"expiresIn" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60'))}}Object.keys(_).forEach((function(r){const n=_[r];if(typeof t[r]!=="undefined"){if(typeof e[n]!=="undefined"){return failure(new Error('Bad "options.'+r+'" option. The payload already has an "'+n+'" property.'))}e[n]=t[r]}}));const c=t.encoding||"utf8";if(typeof a==="function"){a=a&&p(a);s.createSign({header:u,privateKey:r,payload:e,encoding:c}).once("error",a).once("done",(function(e){if(!t.allowInsecureKeySizes&&/^(?:RS|PS)/.test(u.alg)&&e.length<256){return a(new Error(`secretOrPrivateKey has a minimum key size of 2048 bits for ${u.alg}`))}a(null,e)}))}else{let n=s.sign({header:u,payload:e,secret:r,encoding:c});if(!t.allowInsecureKeySizes&&/^(?:RS|PS)/.test(u.alg)&&n.length<256){throw new Error(`secretOrPrivateKey has a minimum key size of 2048 bits for ${u.alg}`)}return n}}},624:(e,r,t)=>{const n=t(131);const a=t(422);const i=t(794);const s=t(443);const o=t(126);const u=t(253);const l=t(900);const c=t(111);const{KeyObject:f,createSecretKey:h,createPublicKey:p}=t(113);const d=["RS256","RS384","RS512"];const y=["ES256","ES384","ES512"];const g=["RS256","RS384","RS512"];const v=["HS256","HS384","HS512"];if(l){d.splice(d.length,0,"PS256","PS384","PS512");g.splice(g.length,0,"PS256","PS384","PS512")}e.exports=function(e,r,t,l){if(typeof t==="function"&&!l){l=t;t={}}if(!t){t={}}t=Object.assign({},t);let b;if(l){b=l}else{b=function(e,r){if(e)throw e;return r}}if(t.clockTimestamp&&typeof t.clockTimestamp!=="number"){return b(new n("clockTimestamp must be a number"))}if(t.nonce!==undefined&&(typeof t.nonce!=="string"||t.nonce.trim()==="")){return b(new n("nonce must be a non-empty string"))}if(t.allowInvalidAsymmetricKeyTypes!==undefined&&typeof t.allowInvalidAsymmetricKeyTypes!=="boolean"){return b(new n("allowInvalidAsymmetricKeyTypes must be a boolean"))}const m=t.clockTimestamp||Math.floor(Date.now()/1e3);if(!e){return b(new n("jwt must be provided"))}if(typeof e!=="string"){return b(new n("jwt must be a string"))}const _=e.split(".");if(_.length!==3){return b(new n("jwt malformed"))}let w;try{w=s(e,{complete:true})}catch(e){return b(e)}if(!w){return b(new n("invalid token"))}const S=w.header;let I;if(typeof r==="function"){if(!l){return b(new n("verify must be called asynchronous if secret or public key is provided as a callback"))}I=r}else{I=function(e,t){return t(null,r)}}return I(S,(function(r,s){if(r){return b(new n("error in secret or public key callback: "+r.message))}const l=_[2].trim()!=="";if(!l&&s){return b(new n("jwt signature is required"))}if(l&&!s){return b(new n("secret or public key must be provided"))}if(!l&&!t.algorithms){return b(new n('please specify "none" in "algorithms" to verify unsigned tokens'))}if(s!=null&&!(s instanceof f)){try{s=p(s)}catch(e){try{s=h(typeof s==="string"?Buffer.from(s):s)}catch(e){return b(new n("secretOrPublicKey is not valid key material"))}}}if(!t.algorithms){if(s.type==="secret"){t.algorithms=v}else if(["rsa","rsa-pss"].includes(s.asymmetricKeyType)){t.algorithms=g}else if(s.asymmetricKeyType==="ec"){t.algorithms=y}else{t.algorithms=d}}if(t.algorithms.indexOf(w.header.alg)===-1){return b(new n("invalid algorithm"))}if(S.alg.startsWith("HS")&&s.type!=="secret"){return b(new n(`secretOrPublicKey must be a symmetric key when using ${S.alg}`))}else if(/^(?:RS|PS|ES)/.test(S.alg)&&s.type!=="public"){return b(new n(`secretOrPublicKey must be an asymmetric key when using ${S.alg}`))}if(!t.allowInvalidAsymmetricKeyTypes){try{u(S.alg,s)}catch(e){return b(e)}}let I;try{I=c.verify(e,w.header.alg,s)}catch(e){return b(e)}if(!I){return b(new n("invalid signature"))}const A=w.payload;if(typeof A.nbf!=="undefined"&&!t.ignoreNotBefore){if(typeof A.nbf!=="number"){return b(new n("invalid nbf value"))}if(A.nbf>m+(t.clockTolerance||0)){return b(new a("jwt not active",new Date(A.nbf*1e3)))}}if(typeof A.exp!=="undefined"&&!t.ignoreExpiration){if(typeof A.exp!=="number"){return b(new n("invalid exp value"))}if(m>=A.exp+(t.clockTolerance||0)){return b(new i("jwt expired",new Date(A.exp*1e3)))}}if(t.audience){const e=Array.isArray(t.audience)?t.audience:[t.audience];const r=Array.isArray(A.aud)?A.aud:[A.aud];const a=r.some((function(r){return e.some((function(e){return e instanceof RegExp?e.test(r):e===r}))}));if(!a){return b(new n("jwt audience invalid. expected: "+e.join(" or ")))}}if(t.issuer){const e=typeof t.issuer==="string"&&A.iss!==t.issuer||Array.isArray(t.issuer)&&t.issuer.indexOf(A.iss)===-1;if(e){return b(new n("jwt issuer invalid. expected: "+t.issuer))}}if(t.subject){if(A.sub!==t.subject){return b(new n("jwt subject invalid. expected: "+t.subject))}}if(t.jwtid){if(A.jti!==t.jwtid){return b(new n("jwt jwtid invalid. expected: "+t.jwtid))}}if(t.nonce){if(A.nonce!==t.nonce){return b(new n("jwt nonce invalid. expected: "+t.nonce))}}if(t.maxAge){if(typeof A.iat!=="number"){return b(new n("iat required when maxAge is specified"))}const e=o(t.maxAge,A.iat);if(typeof e==="undefined"){return b(new n('"maxAge" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60'))}if(m>=e+(t.clockTolerance||0)){return b(new i("maxAge exceeded",new Date(e*1e3)))}}if(t.complete===true){const e=w.signature;return b(null,{header:S,payload:A,signature:e})}return b(null,A)}))}},251:(e,r,t)=>{var n=t(112);var a=t(911).Buffer;var i=t(113);var s=t(160);var o=t(837);var u='"%s" is not a valid algorithm.\n Supported algorithms are:\n "HS256", "HS384", "HS512", "RS256", "RS384", "RS512", "PS256", "PS384", "PS512", "ES256", "ES384", "ES512" and "none".';var l="secret must be a string or buffer";var c="key must be a string or a buffer";var f="key must be a string, a buffer or an object";var h=typeof i.createPublicKey==="function";if(h){c+=" or a KeyObject";l+="or a KeyObject"}function checkIsPublicKey(e){if(a.isBuffer(e)){return}if(typeof e==="string"){return}if(!h){throw typeError(c)}if(typeof e!=="object"){throw typeError(c)}if(typeof e.type!=="string"){throw typeError(c)}if(typeof e.asymmetricKeyType!=="string"){throw typeError(c)}if(typeof e.export!=="function"){throw typeError(c)}}function checkIsPrivateKey(e){if(a.isBuffer(e)){return}if(typeof e==="string"){return}if(typeof e==="object"){return}throw typeError(f)}function checkIsSecretKey(e){if(a.isBuffer(e)){return}if(typeof e==="string"){return e}if(!h){throw typeError(l)}if(typeof e!=="object"){throw typeError(l)}if(e.type!=="secret"){throw typeError(l)}if(typeof e.export!=="function"){throw typeError(l)}}function fromBase64(e){return e.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}function toBase64(e){e=e.toString();var r=4-e.length%4;if(r!==4){for(var t=0;t{var n=t(409);var a=t(851);var i=["HS256","HS384","HS512","RS256","RS384","RS512","PS256","PS384","PS512","ES256","ES384","ES512"];r.ALGORITHMS=i;r.sign=n.sign;r.verify=a.verify;r.decode=a.decode;r.isValid=a.isValid;r.createSign=function createSign(e){return new n(e)};r.createVerify=function createVerify(e){return new a(e)}},626:(e,r,t)=>{var n=t(911).Buffer;var a=t(781);var i=t(837);function DataStream(e){this.buffer=null;this.writable=true;this.readable=true;if(!e){this.buffer=n.alloc(0);return this}if(typeof e.pipe==="function"){this.buffer=n.alloc(0);e.pipe(this);return this}if(e.length||typeof e==="object"){this.buffer=e;this.writable=false;process.nextTick(function(){this.emit("end",e);this.readable=false;this.emit("close")}.bind(this));return this}throw new TypeError("Unexpected data type ("+typeof e+")")}i.inherits(DataStream,a);DataStream.prototype.write=function write(e){this.buffer=n.concat([this.buffer,n.from(e)]);this.emit("data",e)};DataStream.prototype.end=function end(e){if(e)this.write(e);this.emit("end",e);this.emit("close");this.writable=false;this.readable=false};e.exports=DataStream},409:(e,r,t)=>{var n=t(911).Buffer;var a=t(626);var i=t(251);var s=t(781);var o=t(730);var u=t(837);function base64url(e,r){return n.from(e,r).toString("base64").replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}function jwsSecuredInput(e,r,t){t=t||"utf8";var n=base64url(o(e),"binary");var a=base64url(o(r),t);return u.format("%s.%s",n,a)}function jwsSign(e){var r=e.header;var t=e.payload;var n=e.secret||e.privateKey;var a=e.encoding;var s=i(r.alg);var o=jwsSecuredInput(r,t,a);var l=s.sign(o,n);return u.format("%s.%s",o,l)}function SignStream(e){var r=e.secret||e.privateKey||e.key;var t=new a(r);this.readable=true;this.header=e.header;this.encoding=e.encoding;this.secret=this.privateKey=this.key=t;this.payload=new a(e.payload);this.secret.once("close",function(){if(!this.payload.writable&&this.readable)this.sign()}.bind(this));this.payload.once("close",function(){if(!this.secret.writable&&this.readable)this.sign()}.bind(this))}u.inherits(SignStream,s);SignStream.prototype.sign=function sign(){try{var e=jwsSign({header:this.header,payload:this.payload.buffer,secret:this.secret.buffer,encoding:this.encoding});this.emit("done",e);this.emit("data",e);this.emit("end");this.readable=false;return e}catch(e){this.readable=false;this.emit("error",e);this.emit("close")}};SignStream.sign=jwsSign;e.exports=SignStream},730:(e,r,t)=>{var n=t(300).Buffer;e.exports=function toString(e){if(typeof e==="string")return e;if(typeof e==="number"||n.isBuffer(e))return e.toString();return JSON.stringify(e)}},851:(e,r,t)=>{var n=t(911).Buffer;var a=t(626);var i=t(251);var s=t(781);var o=t(730);var u=t(837);var l=/^[a-zA-Z0-9\-_]+?\.[a-zA-Z0-9\-_]+?\.([a-zA-Z0-9\-_]+)?$/;function isObject(e){return Object.prototype.toString.call(e)==="[object Object]"}function safeJsonParse(e){if(isObject(e))return e;try{return JSON.parse(e)}catch(e){return undefined}}function headerFromJWS(e){var r=e.split(".",1)[0];return safeJsonParse(n.from(r,"base64").toString("binary"))}function securedInputFromJWS(e){return e.split(".",2).join(".")}function signatureFromJWS(e){return e.split(".")[2]}function payloadFromJWS(e,r){r=r||"utf8";var t=e.split(".")[1];return n.from(t,"base64").toString(r)}function isValidJws(e){return l.test(e)&&!!headerFromJWS(e)}function jwsVerify(e,r,t){if(!r){var n=new Error("Missing algorithm parameter for jws.verify");n.code="MISSING_ALGORITHM";throw n}e=o(e);var a=signatureFromJWS(e);var s=securedInputFromJWS(e);var u=i(r);return u.verify(s,a,t)}function jwsDecode(e,r){r=r||{};e=o(e);if(!isValidJws(e))return null;var t=headerFromJWS(e);if(!t)return null;var n=payloadFromJWS(e);if(t.typ==="JWT"||r.json)n=JSON.parse(n,r.encoding);return{header:t,payload:n,signature:signatureFromJWS(e)}}function VerifyStream(e){e=e||{};var r=e.secret||e.publicKey||e.key;var t=new a(r);this.readable=true;this.algorithm=e.algorithm;this.encoding=e.encoding;this.secret=this.publicKey=this.key=t;this.signature=new a(e.signature);this.secret.once("close",function(){if(!this.signature.writable&&this.readable)this.verify()}.bind(this));this.signature.once("close",function(){if(!this.secret.writable&&this.readable)this.verify()}.bind(this))}u.inherits(VerifyStream,s);VerifyStream.prototype.verify=function verify(){try{var e=jwsVerify(this.signature.buffer,this.algorithm,this.key.buffer);var r=jwsDecode(this.signature.buffer,this.encoding);this.emit("done",e,r);this.emit("data",e);this.emit("end");this.readable=false;return e}catch(e){this.readable=false;this.emit("error",e);this.emit("close")}};VerifyStream.decode=jwsDecode;VerifyStream.isValid=isValidJws;VerifyStream.verify=jwsVerify;e.exports=VerifyStream},536:function(e,r,t){e=t.nmd(e); +/** + * @license + * Lodash + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */(function(){var t;var n="4.17.23";var a=200;var i="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",s="Expected a function",o="Invalid `variable` option passed into `_.template`";var u="__lodash_hash_undefined__";var l=500;var c="__lodash_placeholder__";var f=1,h=2,p=4;var d=1,y=2;var g=1,v=2,b=4,m=8,_=16,w=32,S=64,I=128,A=256,x=512;var k=30,j="...";var O=800,E=16;var R=1,L=2,C=3;var T=1/0,W=9007199254740991,P=17976931348623157e292,z=0/0;var B=4294967295,F=B-1,M=B>>>1;var D=[["ary",I],["bind",g],["bindKey",v],["curry",m],["curryRight",_],["flip",x],["partial",w],["partialRight",S],["rearg",A]];var K="[object Arguments]",q="[object Array]",V="[object AsyncFunction]",U="[object Boolean]",N="[object Date]",H="[object DOMException]",G="[object Error]",$="[object Function]",J="[object GeneratorFunction]",Z="[object Map]",X="[object Number]",Y="[object Null]",Q="[object Object]",ee="[object Promise]",re="[object Proxy]",te="[object RegExp]",ne="[object Set]",ae="[object String]",ie="[object Symbol]",se="[object Undefined]",oe="[object WeakMap]",ue="[object WeakSet]";var le="[object ArrayBuffer]",ce="[object DataView]",fe="[object Float32Array]",he="[object Float64Array]",pe="[object Int8Array]",de="[object Int16Array]",ye="[object Int32Array]",ge="[object Uint8Array]",ve="[object Uint8ClampedArray]",be="[object Uint16Array]",me="[object Uint32Array]";var _e=/\b__p \+= '';/g,we=/\b(__p \+=) '' \+/g,Se=/(__e\(.*?\)|\b__t\)) \+\n'';/g;var Ie=/&(?:amp|lt|gt|quot|#39);/g,Ae=/[&<>"']/g,xe=RegExp(Ie.source),ke=RegExp(Ae.source);var je=/<%-([\s\S]+?)%>/g,Oe=/<%([\s\S]+?)%>/g,Ee=/<%=([\s\S]+?)%>/g;var Re=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Le=/^\w*$/,Ce=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;var Te=/[\\^$.*+?()[\]{}|]/g,We=RegExp(Te.source);var Pe=/^\s+/;var ze=/\s/;var Be=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Fe=/\{\n\/\* \[wrapped with (.+)\] \*/,Me=/,? & /;var De=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;var Ke=/[()=,{}\[\]\/\s]/;var qe=/\\(\\)?/g;var Ve=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;var Ue=/\w*$/;var Ne=/^[-+]0x[0-9a-f]+$/i;var He=/^0b[01]+$/i;var Ge=/^\[object .+?Constructor\]$/;var $e=/^0o[0-7]+$/i;var Je=/^(?:0|[1-9]\d*)$/;var Ze=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;var Xe=/($^)/;var Ye=/['\n\r\u2028\u2029\\]/g;var Qe="\\ud800-\\udfff",er="\\u0300-\\u036f",rr="\\ufe20-\\ufe2f",tr="\\u20d0-\\u20ff",nr=er+rr+tr,ar="\\u2700-\\u27bf",ir="a-z\\xdf-\\xf6\\xf8-\\xff",sr="\\xac\\xb1\\xd7\\xf7",or="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",ur="\\u2000-\\u206f",lr=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",cr="A-Z\\xc0-\\xd6\\xd8-\\xde",fr="\\ufe0e\\ufe0f",hr=sr+or+ur+lr;var pr="['’]",dr="["+Qe+"]",yr="["+hr+"]",gr="["+nr+"]",vr="\\d+",br="["+ar+"]",mr="["+ir+"]",_r="[^"+Qe+hr+vr+ar+ir+cr+"]",wr="\\ud83c[\\udffb-\\udfff]",Sr="(?:"+gr+"|"+wr+")",Ir="[^"+Qe+"]",Ar="(?:\\ud83c[\\udde6-\\uddff]){2}",xr="[\\ud800-\\udbff][\\udc00-\\udfff]",kr="["+cr+"]",jr="\\u200d";var Or="(?:"+mr+"|"+_r+")",Er="(?:"+kr+"|"+_r+")",Rr="(?:"+pr+"(?:d|ll|m|re|s|t|ve))?",Lr="(?:"+pr+"(?:D|LL|M|RE|S|T|VE))?",Cr=Sr+"?",Tr="["+fr+"]?",Wr="(?:"+jr+"(?:"+[Ir,Ar,xr].join("|")+")"+Tr+Cr+")*",Pr="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",zr="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",Br=Tr+Cr+Wr,Fr="(?:"+[br,Ar,xr].join("|")+")"+Br,Mr="(?:"+[Ir+gr+"?",gr,Ar,xr,dr].join("|")+")";var Dr=RegExp(pr,"g");var Kr=RegExp(gr,"g");var qr=RegExp(wr+"(?="+wr+")|"+Mr+Br,"g");var Vr=RegExp([kr+"?"+mr+"+"+Rr+"(?="+[yr,kr,"$"].join("|")+")",Er+"+"+Lr+"(?="+[yr,kr+Or,"$"].join("|")+")",kr+"?"+Or+"+"+Rr,kr+"+"+Lr,zr,Pr,vr,Fr].join("|"),"g");var Ur=RegExp("["+jr+Qe+nr+fr+"]");var Nr=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;var Hr=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"];var Gr=-1;var $r={};$r[fe]=$r[he]=$r[pe]=$r[de]=$r[ye]=$r[ge]=$r[ve]=$r[be]=$r[me]=true;$r[K]=$r[q]=$r[le]=$r[U]=$r[ce]=$r[N]=$r[G]=$r[$]=$r[Z]=$r[X]=$r[Q]=$r[te]=$r[ne]=$r[ae]=$r[oe]=false;var Jr={};Jr[K]=Jr[q]=Jr[le]=Jr[ce]=Jr[U]=Jr[N]=Jr[fe]=Jr[he]=Jr[pe]=Jr[de]=Jr[ye]=Jr[Z]=Jr[X]=Jr[Q]=Jr[te]=Jr[ne]=Jr[ae]=Jr[ie]=Jr[ge]=Jr[ve]=Jr[be]=Jr[me]=true;Jr[G]=Jr[$]=Jr[oe]=false;var Zr={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"};var Xr={"&":"&","<":"<",">":">",'"':""","'":"'"};var Yr={"&":"&","<":"<",">":">",""":'"',"'":"'"};var Qr={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"};var et=parseFloat,rt=parseInt;var tt=typeof global=="object"&&global&&global.Object===Object&&global;var nt=typeof self=="object"&&self&&self.Object===Object&&self;var at=tt||nt||Function("return this")();var it=true&&r&&!r.nodeType&&r;var st=it&&"object"=="object"&&e&&!e.nodeType&&e;var ot=st&&st.exports===it;var ut=ot&&tt.process;var lt=function(){try{var e=st&&st.require&&st.require("util").types;if(e){return e}return ut&&ut.binding&&ut.binding("util")}catch(e){}}();var ct=lt&<.isArrayBuffer,ft=lt&<.isDate,ht=lt&<.isMap,pt=lt&<.isRegExp,dt=lt&<.isSet,yt=lt&<.isTypedArray;function apply(e,r,t){switch(t.length){case 0:return e.call(r);case 1:return e.call(r,t[0]);case 2:return e.call(r,t[0],t[1]);case 3:return e.call(r,t[0],t[1],t[2])}return e.apply(r,t)}function arrayAggregator(e,r,t,n){var a=-1,i=e==null?0:e.length;while(++a-1}function arrayIncludesWith(e,r,t){var n=-1,a=e==null?0:e.length;while(++n-1){}return t}function charsEndIndex(e,r){var t=e.length;while(t--&&baseIndexOf(r,e[t],0)>-1){}return t}function countHolders(e,r){var t=e.length,n=0;while(t--){if(e[t]===r){++n}}return n}var vt=basePropertyOf(Zr);var bt=basePropertyOf(Xr);function escapeStringChar(e){return"\\"+Qr[e]}function getValue(e,r){return e==null?t:e[r]}function hasUnicode(e){return Ur.test(e)}function hasUnicodeWord(e){return Nr.test(e)}function iteratorToArray(e){var r,t=[];while(!(r=e.next()).done){t.push(r.value)}return t}function mapToArray(e){var r=-1,t=Array(e.size);e.forEach((function(e,n){t[++r]=[n,e]}));return t}function overArg(e,r){return function(t){return e(r(t))}}function replaceHolders(e,r){var t=-1,n=e.length,a=0,i=[];while(++t-1}function listCacheSet(e,r){var t=this.__data__,n=assocIndexOf(t,e);if(n<0){++this.size;t.push([e,r])}else{t[n][1]=r}return this}ListCache.prototype.clear=listCacheClear;ListCache.prototype["delete"]=listCacheDelete;ListCache.prototype.get=listCacheGet;ListCache.prototype.has=listCacheHas;ListCache.prototype.set=listCacheSet;function MapCache(e){var r=-1,t=e==null?0:e.length;this.clear();while(++r=r?e:r}}return e}function baseClone(e,r,n,a,i,s){var o,u=r&f,l=r&h,c=r&p;if(n){o=i?n(e,a,i,s):n(e)}if(o!==t){return o}if(!isObject(e)){return e}var d=Ln(e);if(d){o=initCloneArray(e);if(!u){return copyArray(e,o)}}else{var y=Dt(e),g=y==$||y==J;if(Tn(e)){return cloneBuffer(e,u)}if(y==Q||y==K||g&&!i){o=l||g?{}:initCloneObject(e);if(!u){return l?copySymbolsIn(e,baseAssignIn(o,e)):copySymbols(e,baseAssign(o,e))}}else{if(!Jr[y]){return i?e:{}}o=initCloneByTag(e,y,u)}}s||(s=new Stack);var v=s.get(e);if(v){return v}s.set(e,o);if(Bn(e)){e.forEach((function(t){o.add(baseClone(t,r,n,t,e,s))}))}else if(Pn(e)){e.forEach((function(t,a){o.set(a,baseClone(t,r,n,a,e,s))}))}var b=c?l?getAllKeysIn:getAllKeys:l?keysIn:keys;var m=d?t:b(e);arrayEach(m||e,(function(t,a){if(m){a=t;t=e[a]}assignValue(o,a,baseClone(t,r,n,a,e,s))}));return o}function baseConforms(e){var r=keys(e);return function(t){return baseConformsTo(t,e,r)}}function baseConformsTo(e,r,n){var a=n.length;if(e==null){return!a}e=rr(e);while(a--){var i=n[a],s=r[i],o=e[i];if(o===t&&!(i in e)||!s(o)){return false}}return true}function baseDelay(e,r,n){if(typeof e!="function"){throw new ar(s)}return Vt((function(){e.apply(t,n)}),r)}function baseDifference(e,r,t,n){var i=-1,s=arrayIncludes,o=true,u=e.length,l=[],c=r.length;if(!u){return l}if(t){r=arrayMap(r,baseUnary(t))}if(n){s=arrayIncludesWith;o=false}else if(r.length>=a){s=cacheHas;o=false;r=new SetCache(r)}e:while(++ii?0:i+n}a=a===t||a>i?i:toInteger(a);if(a<0){a+=i}a=n>a?0:toLength(a);while(n0&&t(o)){if(r>1){baseFlatten(o,r-1,t,n,a)}else{arrayPush(a,o)}}else if(!n){a[a.length]=o}}return a}var Rt=createBaseFor();var Lt=createBaseFor(true);function baseForOwn(e,r){return e&&Rt(e,r,keys)}function baseForOwnRight(e,r){return e&&Lt(e,r,keys)}function baseFunctions(e,r){return arrayFilter(r,(function(r){return isFunction(e[r])}))}function baseGet(e,r){r=castPath(r,e);var n=0,a=r.length;while(e!=null&&nr}function baseHas(e,r){return e!=null&&cr.call(e,r)}function baseHasIn(e,r){return e!=null&&r in rr(e)}function baseInRange(e,r,t){return e>=qr(r,t)&&e=120&&h.length>=120)?new SetCache(u&&h):t}h=e[0];var p=-1,d=l[0];e:while(++p-1){if(o!==e){Ar.call(o,u,1)}Ar.call(e,u,1)}}return e}function basePullAt(e,r){var t=e?r.length:0,n=t-1;while(t--){var a=r[t];if(t==n||a!==i){var i=a;if(isIndex(a)){Ar.call(e,a,1)}else{baseUnset(e,a)}}}return e}function baseRandom(e,r){return e+Tr(Nr()*(r-e+1))}function baseRange(e,t,n,a){var i=-1,s=Mr(Cr((t-e)/(n||1)),0),o=r(s);while(s--){o[a?s:++i]=e;e+=n}return o}function baseRepeat(e,r){var t="";if(!e||r<1||r>W){return t}do{if(r%2){t+=e}r=Tr(r/2);if(r){e+=e}}while(r);return t}function baseRest(e,r){return Ut(overRest(e,r,identity),e+"")}function baseSample(e){return arraySample(values(e))}function baseSampleSize(e,r){var t=values(e);return shuffleSelf(t,baseClamp(r,0,t.length))}function baseSet(e,r,n,a){if(!isObject(e)){return e}r=castPath(r,e);var i=-1,s=r.length,o=s-1,u=e;while(u!=null&&++ii?0:i+t}n=n>i?i:n;if(n<0){n+=i}i=t>n?0:n-t>>>0;t>>>=0;var s=r(i);while(++a>>1,s=e[i];if(s!==null&&!isSymbol(s)&&(t?s<=r:s=a){var c=r?null:zt(e);if(c){return setToArray(c)}o=false;i=cacheHas;l=new SetCache}else{l=r?[]:u}e:while(++n=a?e:baseSlice(e,r,n)}var Pt=Er||function(e){return at.clearTimeout(e)};function cloneBuffer(e,r){if(r){return e.slice()}var t=e.length,n=_r?_r(t):new e.constructor(t);e.copy(n);return n}function cloneArrayBuffer(e){var r=new e.constructor(e.byteLength);new mr(r).set(new mr(e));return r}function cloneDataView(e,r){var t=r?cloneArrayBuffer(e.buffer):e.buffer;return new e.constructor(t,e.byteOffset,e.byteLength)}function cloneRegExp(e){var r=new e.constructor(e.source,Ue.exec(e));r.lastIndex=e.lastIndex;return r}function cloneSymbol(e){return xt?rr(xt.call(e)):{}}function cloneTypedArray(e,r){var t=r?cloneArrayBuffer(e.buffer):e.buffer;return new e.constructor(t,e.byteOffset,e.length)}function compareAscending(e,r){if(e!==r){var n=e!==t,a=e===null,i=e===e,s=isSymbol(e);var o=r!==t,u=r===null,l=r===r,c=isSymbol(r);if(!u&&!c&&!s&&e>r||s&&o&&l&&!u&&!c||a&&o&&l||!n&&l||!i){return 1}if(!a&&!s&&!c&&e=o){return u}var l=t[n];return u*(l=="desc"?-1:1)}}return e.index-r.index}function composeArgs(e,t,n,a){var i=-1,s=e.length,o=n.length,u=-1,l=t.length,c=Mr(s-o,0),f=r(l+c),h=!a;while(++u1?n[i-1]:t,o=i>2?n[2]:t;s=e.length>3&&typeof s=="function"?(i--,s):t;if(o&&isIterateeCall(n[0],n[1],o)){s=i<3?t:s;i=1}r=rr(r);while(++a-1?i[s?r[o]:o]:t}}function createFlow(e){return flatRest((function(r){var n=r.length,a=n,i=LodashWrapper.prototype.thru;if(e){r.reverse()}while(a--){var o=r[a];if(typeof o!="function"){throw new ar(s)}if(i&&!u&&getFuncName(o)=="wrapper"){var u=new LodashWrapper([],true)}}a=u?a:n;while(++a1){g.reverse()}if(h&&cu)){return false}var c=s.get(e);var f=s.get(r);if(c&&f){return c==r&&f==e}var h=-1,p=true,g=n&y?new SetCache:t;s.set(e,r);s.set(r,e);while(++h1?"& ":"")+r[n];r=r.join(t>2?", ":" ");return e.replace(Be,"{\n/* [wrapped with "+r+"] */\n")}function isFlattenable(e){return Ln(e)||Rn(e)||!!(xr&&e&&e[xr])}function isIndex(e,r){var t=typeof e;r=r==null?W:r;return!!r&&(t=="number"||t!="symbol"&&Je.test(e))&&(e>-1&&e%1==0&&e0){if(++r>=O){return arguments[0]}}else{r=0}return e.apply(t,arguments)}}function shuffleSelf(e,r){var n=-1,a=e.length,i=a-1;r=r===t?a:r;while(++n1?e[r-1]:t;n=typeof n=="function"?(e.pop(),n):t;return unzipWith(e,n)}));function chain(e){var r=lodash(e);r.__chain__=true;return r}function tap(e,r){r(e);return e}function thru(e,r){return r(e)}var cn=flatRest((function(e){var r=e.length,n=r?e[0]:0,a=this.__wrapped__,interceptor=function(r){return baseAt(r,e)};if(r>1||this.__actions__.length||!(a instanceof LazyWrapper)||!isIndex(n)){return this.thru(interceptor)}a=a.slice(n,+n+(r?1:0));a.__actions__.push({func:thru,args:[interceptor],thisArg:t});return new LodashWrapper(a,this.__chain__).thru((function(e){if(r&&!e.length){e.push(t)}return e}))}));function wrapperChain(){return chain(this)}function wrapperCommit(){return new LodashWrapper(this.value(),this.__chain__)}function wrapperNext(){if(this.__values__===t){this.__values__=toArray(this.value())}var e=this.__index__>=this.__values__.length,r=e?t:this.__values__[this.__index__++];return{done:e,value:r}}function wrapperToIterator(){return this}function wrapperPlant(e){var r,n=this;while(n instanceof baseLodash){var a=wrapperClone(n);a.__index__=0;a.__values__=t;if(r){i.__wrapped__=a}else{r=a}var i=a;n=n.__wrapped__}i.__wrapped__=e;return r}function wrapperReverse(){var e=this.__wrapped__;if(e instanceof LazyWrapper){var r=e;if(this.__actions__.length){r=new LazyWrapper(this)}r=r.reverse();r.__actions__.push({func:thru,args:[reverse],thisArg:t});return new LodashWrapper(r,this.__chain__)}return this.thru(reverse)}function wrapperValue(){return baseWrapperValue(this.__wrapped__,this.__actions__)}var fn=createAggregator((function(e,r,t){if(cr.call(e,t)){++e[t]}else{baseAssignValue(e,t,1)}}));function every(e,r,n){var a=Ln(e)?arrayEvery:baseEvery;if(n&&isIterateeCall(e,r,n)){r=t}return a(e,getIteratee(r,3))}function filter(e,r){var t=Ln(e)?arrayFilter:baseFilter;return t(e,getIteratee(r,3))}var hn=createFind(findIndex);var pn=createFind(findLastIndex);function flatMap(e,r){return baseFlatten(map(e,r),1)}function flatMapDeep(e,r){return baseFlatten(map(e,r),T)}function flatMapDepth(e,r,n){n=n===t?1:toInteger(n);return baseFlatten(map(e,r),n)}function forEach(e,r){var t=Ln(e)?arrayEach:Ot;return t(e,getIteratee(r,3))}function forEachRight(e,r){var t=Ln(e)?arrayEachRight:Et;return t(e,getIteratee(r,3))}var dn=createAggregator((function(e,r,t){if(cr.call(e,t)){e[t].push(r)}else{baseAssignValue(e,t,[r])}}));function includes(e,r,t,n){e=isArrayLike(e)?e:values(e);t=t&&!n?toInteger(t):0;var a=e.length;if(t<0){t=Mr(a+t,0)}return isString(e)?t<=a&&e.indexOf(r,t)>-1:!!a&&baseIndexOf(e,r,t)>-1}var yn=baseRest((function(e,t,n){var a=-1,i=typeof t=="function",s=isArrayLike(e)?r(e.length):[];Ot(e,(function(e){s[++a]=i?apply(t,e,n):baseInvoke(e,t,n)}));return s}));var gn=createAggregator((function(e,r,t){baseAssignValue(e,t,r)}));function map(e,r){var t=Ln(e)?arrayMap:baseMap;return t(e,getIteratee(r,3))}function orderBy(e,r,n,a){if(e==null){return[]}if(!Ln(r)){r=r==null?[]:[r]}n=a?t:n;if(!Ln(n)){n=n==null?[]:[n]}return baseOrderBy(e,r,n)}var vn=createAggregator((function(e,r,t){e[t?0:1].push(r)}),(function(){return[[],[]]}));function reduce(e,r,t){var n=Ln(e)?arrayReduce:baseReduce,a=arguments.length<3;return n(e,getIteratee(r,4),t,a,Ot)}function reduceRight(e,r,t){var n=Ln(e)?arrayReduceRight:baseReduce,a=arguments.length<3;return n(e,getIteratee(r,4),t,a,Et)}function reject(e,r){var t=Ln(e)?arrayFilter:baseFilter;return t(e,negate(getIteratee(r,3)))}function sample(e){var r=Ln(e)?arraySample:baseSample;return r(e)}function sampleSize(e,r,n){if(n?isIterateeCall(e,r,n):r===t){r=1}else{r=toInteger(r)}var a=Ln(e)?arraySampleSize:baseSampleSize;return a(e,r)}function shuffle(e){var r=Ln(e)?arrayShuffle:baseShuffle;return r(e)}function size(e){if(e==null){return 0}if(isArrayLike(e)){return isString(e)?stringSize(e):e.length}var r=Dt(e);if(r==Z||r==ne){return e.size}return baseKeys(e).length}function some(e,r,n){var a=Ln(e)?arraySome:baseSome;if(n&&isIterateeCall(e,r,n)){r=t}return a(e,getIteratee(r,3))}var bn=baseRest((function(e,r){if(e==null){return[]}var t=r.length;if(t>1&&isIterateeCall(e,r[0],r[1])){r=[]}else if(t>2&&isIterateeCall(r[0],r[1],r[2])){r=[r[0]]}return baseOrderBy(e,baseFlatten(r,1),[])}));var mn=Rr||function(){return at.Date.now()};function after(e,r){if(typeof r!="function"){throw new ar(s)}e=toInteger(e);return function(){if(--e<1){return r.apply(this,arguments)}}}function ary(e,r,n){r=n?t:r;r=e&&r==null?e.length:r;return createWrap(e,I,t,t,t,t,r)}function before(e,r){var n;if(typeof r!="function"){throw new ar(s)}e=toInteger(e);return function(){if(--e>0){n=r.apply(this,arguments)}if(e<=1){r=t}return n}}var _n=baseRest((function(e,r,t){var n=g;if(t.length){var a=replaceHolders(t,getHolder(_n));n|=w}return createWrap(e,n,r,t,a)}));var wn=baseRest((function(e,r,t){var n=g|v;if(t.length){var a=replaceHolders(t,getHolder(wn));n|=w}return createWrap(r,n,e,t,a)}));function curry(e,r,n){r=n?t:r;var a=createWrap(e,m,t,t,t,t,t,r);a.placeholder=curry.placeholder;return a}function curryRight(e,r,n){r=n?t:r;var a=createWrap(e,_,t,t,t,t,t,r);a.placeholder=curryRight.placeholder;return a}function debounce(e,r,n){var a,i,o,u,l,c,f=0,h=false,p=false,d=true;if(typeof e!="function"){throw new ar(s)}r=toNumber(r)||0;if(isObject(n)){h=!!n.leading;p="maxWait"in n;o=p?Mr(toNumber(n.maxWait)||0,r):o;d="trailing"in n?!!n.trailing:d}function invokeFunc(r){var n=a,s=i;a=i=t;f=r;u=e.apply(s,n);return u}function leadingEdge(e){f=e;l=Vt(timerExpired,r);return h?invokeFunc(e):u}function remainingWait(e){var t=e-c,n=e-f,a=r-t;return p?qr(a,o-n):a}function shouldInvoke(e){var n=e-c,a=e-f;return c===t||n>=r||n<0||p&&a>=o}function timerExpired(){var e=mn();if(shouldInvoke(e)){return trailingEdge(e)}l=Vt(timerExpired,remainingWait(e))}function trailingEdge(e){l=t;if(d&&a){return invokeFunc(e)}a=i=t;return u}function cancel(){if(l!==t){Pt(l)}f=0;a=c=i=l=t}function flush(){return l===t?u:trailingEdge(mn())}function debounced(){var e=mn(),n=shouldInvoke(e);a=arguments;i=this;c=e;if(n){if(l===t){return leadingEdge(c)}if(p){Pt(l);l=Vt(timerExpired,r);return invokeFunc(c)}}if(l===t){l=Vt(timerExpired,r)}return u}debounced.cancel=cancel;debounced.flush=flush;return debounced}var Sn=baseRest((function(e,r){return baseDelay(e,1,r)}));var In=baseRest((function(e,r,t){return baseDelay(e,toNumber(r)||0,t)}));function flip(e){return createWrap(e,x)}function memoize(e,r){if(typeof e!="function"||r!=null&&typeof r!="function"){throw new ar(s)}var memoized=function(){var t=arguments,n=r?r.apply(this,t):t[0],a=memoized.cache;if(a.has(n)){return a.get(n)}var i=e.apply(this,t);memoized.cache=a.set(n,i)||a;return i};memoized.cache=new(memoize.Cache||MapCache);return memoized}memoize.Cache=MapCache;function negate(e){if(typeof e!="function"){throw new ar(s)}return function(){var r=arguments;switch(r.length){case 0:return!e.call(this);case 1:return!e.call(this,r[0]);case 2:return!e.call(this,r[0],r[1]);case 3:return!e.call(this,r[0],r[1],r[2])}return!e.apply(this,r)}}function once(e){return before(2,e)}var An=Wt((function(e,r){r=r.length==1&&Ln(r[0])?arrayMap(r[0],baseUnary(getIteratee())):arrayMap(baseFlatten(r,1),baseUnary(getIteratee()));var t=r.length;return baseRest((function(n){var a=-1,i=qr(n.length,t);while(++a=r}));var Rn=baseIsArguments(function(){return arguments}())?baseIsArguments:function(e){return isObjectLike(e)&&cr.call(e,"callee")&&!Ir.call(e,"callee")};var Ln=r.isArray;var Cn=ct?baseUnary(ct):baseIsArrayBuffer;function isArrayLike(e){return e!=null&&isLength(e.length)&&!isFunction(e)}function isArrayLikeObject(e){return isObjectLike(e)&&isArrayLike(e)}function isBoolean(e){return e===true||e===false||isObjectLike(e)&&baseGetTag(e)==U}var Tn=Pr||stubFalse;var Wn=ft?baseUnary(ft):baseIsDate;function isElement(e){return isObjectLike(e)&&e.nodeType===1&&!isPlainObject(e)}function isEmpty(e){if(e==null){return true}if(isArrayLike(e)&&(Ln(e)||typeof e=="string"||typeof e.splice=="function"||Tn(e)||Fn(e)||Rn(e))){return!e.length}var r=Dt(e);if(r==Z||r==ne){return!e.size}if(isPrototype(e)){return!baseKeys(e).length}for(var t in e){if(cr.call(e,t)){return false}}return true}function isEqual(e,r){return baseIsEqual(e,r)}function isEqualWith(e,r,n){n=typeof n=="function"?n:t;var a=n?n(e,r):t;return a===t?baseIsEqual(e,r,t,n):!!a}function isError(e){if(!isObjectLike(e)){return false}var r=baseGetTag(e);return r==G||r==H||typeof e.message=="string"&&typeof e.name=="string"&&!isPlainObject(e)}function isFinite(e){return typeof e=="number"&&zr(e)}function isFunction(e){if(!isObject(e)){return false}var r=baseGetTag(e);return r==$||r==J||r==V||r==re}function isInteger(e){return typeof e=="number"&&e==toInteger(e)}function isLength(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=W}function isObject(e){var r=typeof e;return e!=null&&(r=="object"||r=="function")}function isObjectLike(e){return e!=null&&typeof e=="object"}var Pn=ht?baseUnary(ht):baseIsMap;function isMatch(e,r){return e===r||baseIsMatch(e,r,getMatchData(r))}function isMatchWith(e,r,n){n=typeof n=="function"?n:t;return baseIsMatch(e,r,getMatchData(r),n)}function isNaN(e){return isNumber(e)&&e!=+e}function isNative(e){if(Kt(e)){throw new De(i)}return baseIsNative(e)}function isNull(e){return e===null}function isNil(e){return e==null}function isNumber(e){return typeof e=="number"||isObjectLike(e)&&baseGetTag(e)==X}function isPlainObject(e){if(!isObjectLike(e)||baseGetTag(e)!=Q){return false}var r=wr(e);if(r===null){return true}var t=cr.call(r,"constructor")&&r.constructor;return typeof t=="function"&&t instanceof t&&lr.call(t)==dr}var zn=pt?baseUnary(pt):baseIsRegExp;function isSafeInteger(e){return isInteger(e)&&e>=-W&&e<=W}var Bn=dt?baseUnary(dt):baseIsSet;function isString(e){return typeof e=="string"||!Ln(e)&&isObjectLike(e)&&baseGetTag(e)==ae}function isSymbol(e){return typeof e=="symbol"||isObjectLike(e)&&baseGetTag(e)==ie}var Fn=yt?baseUnary(yt):baseIsTypedArray;function isUndefined(e){return e===t}function isWeakMap(e){return isObjectLike(e)&&Dt(e)==oe}function isWeakSet(e){return isObjectLike(e)&&baseGetTag(e)==ue}var Mn=createRelationalOperation(baseLt);var Dn=createRelationalOperation((function(e,r){return e<=r}));function toArray(e){if(!e){return[]}if(isArrayLike(e)){return isString(e)?stringToArray(e):copyArray(e)}if(kr&&e[kr]){return iteratorToArray(e[kr]())}var r=Dt(e),t=r==Z?mapToArray:r==ne?setToArray:values;return t(e)}function toFinite(e){if(!e){return e===0?e:0}e=toNumber(e);if(e===T||e===-T){var r=e<0?-1:1;return r*P}return e===e?e:0}function toInteger(e){var r=toFinite(e),t=r%1;return r===r?t?r-t:r:0}function toLength(e){return e?baseClamp(toInteger(e),0,B):0}function toNumber(e){if(typeof e=="number"){return e}if(isSymbol(e)){return z}if(isObject(e)){var r=typeof e.valueOf=="function"?e.valueOf():e;e=isObject(r)?r+"":r}if(typeof e!="string"){return e===0?e:+e}e=baseTrim(e);var t=He.test(e);return t||$e.test(e)?rt(e.slice(2),t?2:8):Ne.test(e)?z:+e}function toPlainObject(e){return copyObject(e,keysIn(e))}function toSafeInteger(e){return e?baseClamp(toInteger(e),-W,W):e===0?e:0}function toString(e){return e==null?"":baseToString(e)}var Kn=createAssigner((function(e,r){if(isPrototype(r)||isArrayLike(r)){copyObject(r,keys(r),e);return}for(var t in r){if(cr.call(r,t)){assignValue(e,t,r[t])}}}));var qn=createAssigner((function(e,r){copyObject(r,keysIn(r),e)}));var Vn=createAssigner((function(e,r,t,n){copyObject(r,keysIn(r),e,n)}));var Un=createAssigner((function(e,r,t,n){copyObject(r,keys(r),e,n)}));var Nn=flatRest(baseAt);function create(e,r){var t=jt(e);return r==null?t:baseAssign(t,r)}var Hn=baseRest((function(e,r){e=rr(e);var n=-1;var a=r.length;var i=a>2?r[2]:t;if(i&&isIterateeCall(r[0],r[1],i)){a=1}while(++n1);return r}));copyObject(e,getAllKeysIn(e),t);if(n){t=baseClone(t,f|h|p,customOmitClone)}var a=r.length;while(a--){baseUnset(t,r[a])}return t}));function omitBy(e,r){return pickBy(e,negate(getIteratee(r)))}var ea=flatRest((function(e,r){return e==null?{}:basePick(e,r)}));function pickBy(e,r){if(e==null){return{}}var t=arrayMap(getAllKeysIn(e),(function(e){return[e]}));r=getIteratee(r);return basePickBy(e,t,(function(e,t){return r(e,t[0])}))}function result(e,r,n){r=castPath(r,e);var a=-1,i=r.length;if(!i){i=1;e=t}while(++ar){var a=e;e=r;r=a}if(n||e%1||r%1){var i=Nr();return qr(e+i*(r-e+et("1e-"+((i+"").length-1))),r)}return baseRandom(e,r)}var na=createCompounder((function(e,r,t){r=r.toLowerCase();return e+(t?capitalize(r):r)}));function capitalize(e){return ca(toString(e).toLowerCase())}function deburr(e){e=toString(e);return e&&e.replace(Ze,vt).replace(Kr,"")}function endsWith(e,r,n){e=toString(e);r=baseToString(r);var a=e.length;n=n===t?a:baseClamp(toInteger(n),0,a);var i=n;n-=r.length;return n>=0&&e.slice(n,i)==r}function escape(e){e=toString(e);return e&&ke.test(e)?e.replace(Ae,bt):e}function escapeRegExp(e){e=toString(e);return e&&We.test(e)?e.replace(Te,"\\$&"):e}var aa=createCompounder((function(e,r,t){return e+(t?"-":"")+r.toLowerCase()}));var ia=createCompounder((function(e,r,t){return e+(t?" ":"")+r.toLowerCase()}));var sa=createCaseFirst("toLowerCase");function pad(e,r,t){e=toString(e);r=toInteger(r);var n=r?stringSize(e):0;if(!r||n>=r){return e}var a=(r-n)/2;return createPadding(Tr(a),t)+e+createPadding(Cr(a),t)}function padEnd(e,r,t){e=toString(e);r=toInteger(r);var n=r?stringSize(e):0;return r&&n>>0;if(!n){return[]}e=toString(e);if(e&&(typeof r=="string"||r!=null&&!zn(r))){r=baseToString(r);if(!r&&hasUnicode(e)){return castSlice(stringToArray(e),0,n)}}return e.split(r,n)}var ua=createCompounder((function(e,r,t){return e+(t?" ":"")+ca(r)}));function startsWith(e,r,t){e=toString(e);t=t==null?0:baseClamp(toInteger(t),0,e.length);r=baseToString(r);return e.slice(t,t+r.length)==r}function template(e,r,n){var a=lodash.templateSettings;if(n&&isIterateeCall(e,r,n)){r=t}e=toString(e);r=Vn({},r,a,customDefaultsAssignIn);var i=Vn({},r.imports,a.imports,customDefaultsAssignIn),s=keys(i),u=baseValues(i,s);var l,c,f=0,h=r.interpolate||Xe,p="__p += '";var d=tr((r.escape||Xe).source+"|"+h.source+"|"+(h===Ee?Ve:Xe).source+"|"+(r.evaluate||Xe).source+"|$","g");var y="//# sourceURL="+(cr.call(r,"sourceURL")?(r.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++Gr+"]")+"\n";e.replace(d,(function(r,t,n,a,i,s){n||(n=a);p+=e.slice(f,s).replace(Ye,escapeStringChar);if(t){l=true;p+="' +\n__e("+t+") +\n'"}if(i){c=true;p+="';\n"+i+";\n__p += '"}if(n){p+="' +\n((__t = ("+n+")) == null ? '' : __t) +\n'"}f=s+r.length;return r}));p+="';\n";var g=cr.call(r,"variable")&&r.variable;if(!g){p="with (obj) {\n"+p+"\n}\n"}else if(Ke.test(g)){throw new De(o)}p=(c?p.replace(_e,""):p).replace(we,"$1").replace(Se,"$1;");p="function("+(g||"obj")+") {\n"+(g?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(l?", __e = _.escape":"")+(c?", __j = Array.prototype.join;\n"+"function print() { __p += __j.call(arguments, '') }\n":";\n")+p+"return __p\n}";var v=fa((function(){return Qe(s,y+"return "+p).apply(t,u)}));v.source=p;if(isError(v)){throw v}return v}function toLower(e){return toString(e).toLowerCase()}function toUpper(e){return toString(e).toUpperCase()}function trim(e,r,n){e=toString(e);if(e&&(n||r===t)){return baseTrim(e)}if(!e||!(r=baseToString(r))){return e}var a=stringToArray(e),i=stringToArray(r),s=charsStartIndex(a,i),o=charsEndIndex(a,i)+1;return castSlice(a,s,o).join("")}function trimEnd(e,r,n){e=toString(e);if(e&&(n||r===t)){return e.slice(0,trimmedEndIndex(e)+1)}if(!e||!(r=baseToString(r))){return e}var a=stringToArray(e),i=charsEndIndex(a,stringToArray(r))+1;return castSlice(a,0,i).join("")}function trimStart(e,r,n){e=toString(e);if(e&&(n||r===t)){return e.replace(Pe,"")}if(!e||!(r=baseToString(r))){return e}var a=stringToArray(e),i=charsStartIndex(a,stringToArray(r));return castSlice(a,i).join("")}function truncate(e,r){var n=k,a=j;if(isObject(r)){var i="separator"in r?r.separator:i;n="length"in r?toInteger(r.length):n;a="omission"in r?baseToString(r.omission):a}e=toString(e);var s=e.length;if(hasUnicode(e)){var o=stringToArray(e);s=o.length}if(n>=s){return e}var u=n-stringSize(a);if(u<1){return a}var l=o?castSlice(o,0,u).join(""):e.slice(0,u);if(i===t){return l+a}if(o){u+=l.length-u}if(zn(i)){if(e.slice(u).search(i)){var c,f=l;if(!i.global){i=tr(i.source,toString(Ue.exec(i))+"g")}i.lastIndex=0;while(c=i.exec(f)){var h=c.index}l=l.slice(0,h===t?u:h)}}else if(e.indexOf(baseToString(i),u)!=u){var p=l.lastIndexOf(i);if(p>-1){l=l.slice(0,p)}}return l+a}function unescape(e){e=toString(e);return e&&xe.test(e)?e.replace(Ie,mt):e}var la=createCompounder((function(e,r,t){return e+(t?" ":"")+r.toUpperCase()}));var ca=createCaseFirst("toUpperCase");function words(e,r,n){e=toString(e);r=n?t:r;if(r===t){return hasUnicodeWord(e)?unicodeWords(e):asciiWords(e)}return e.match(r)||[]}var fa=baseRest((function(e,r){try{return apply(e,t,r)}catch(e){return isError(e)?e:new De(e)}}));var ha=flatRest((function(e,r){arrayEach(r,(function(r){r=toKey(r);baseAssignValue(e,r,_n(e[r],e))}));return e}));function cond(e){var r=e==null?0:e.length,t=getIteratee();e=!r?[]:arrayMap(e,(function(e){if(typeof e[1]!="function"){throw new ar(s)}return[t(e[0]),e[1]]}));return baseRest((function(t){var n=-1;while(++nW){return[]}var t=B,n=qr(e,B);r=getIteratee(r);e-=B;var a=baseTimes(n,r);while(++t0||r<0)){return new LazyWrapper(n)}if(e<0){n=n.takeRight(-e)}else if(e){n=n.drop(e)}if(r!==t){r=toInteger(r);n=r<0?n.dropRight(-r):n.take(r-e)}return n};LazyWrapper.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()};LazyWrapper.prototype.toArray=function(){return this.take(B)};baseForOwn(LazyWrapper.prototype,(function(e,r){var n=/^(?:filter|find|map|reject)|While$/.test(r),a=/^(?:head|last)$/.test(r),i=lodash[a?"take"+(r=="last"?"Right":""):r],s=a||/^find/.test(r);if(!i){return}lodash.prototype[r]=function(){var r=this.__wrapped__,o=a?[1]:arguments,u=r instanceof LazyWrapper,l=o[0],c=u||Ln(r);var interceptor=function(e){var r=i.apply(lodash,arrayPush([e],o));return a&&f?r[0]:r};if(c&&n&&typeof l=="function"&&l.length!=1){u=c=false}var f=this.__chain__,h=!!this.__actions__.length,p=s&&!f,d=u&&!h;if(!s&&c){r=d?r:new LazyWrapper(this);var y=e.apply(r,o);y.__actions__.push({func:thru,args:[interceptor],thisArg:t});return new LodashWrapper(y,f)}if(p&&d){return e.apply(this,o)}y=this.thru(interceptor);return p?a?y.value()[0]:y.value():y}}));arrayEach(["pop","push","shift","sort","splice","unshift"],(function(e){var r=ir[e],t=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",n=/^(?:pop|shift)$/.test(e);lodash.prototype[e]=function(){var e=arguments;if(n&&!this.__chain__){var a=this.value();return r.apply(Ln(a)?a:[],e)}return this[t]((function(t){return r.apply(Ln(t)?t:[],e)}))}}));baseForOwn(LazyWrapper.prototype,(function(e,r){var t=lodash[r];if(t){var n=t.name+"";if(!cr.call(ut,n)){ut[n]=[]}ut[n].push({name:r,func:t})}}));ut[createHybrid(t,v).name]=[{name:"wrapper",func:t}];LazyWrapper.prototype.clone=lazyClone;LazyWrapper.prototype.reverse=lazyReverse;LazyWrapper.prototype.value=lazyValue;lodash.prototype.at=cn;lodash.prototype.chain=wrapperChain;lodash.prototype.commit=wrapperCommit;lodash.prototype.next=wrapperNext;lodash.prototype.plant=wrapperPlant;lodash.prototype.reverse=wrapperReverse;lodash.prototype.toJSON=lodash.prototype.valueOf=lodash.prototype.value=wrapperValue;lodash.prototype.first=lodash.prototype.head;if(kr){lodash.prototype[kr]=wrapperToIterator}return lodash};var wt=_t();if(typeof define=="function"&&typeof define.amd=="object"&&define.amd){at._=wt;define((function(){return wt}))}else if(st){(st.exports=wt)._=wt;it._=wt}else{at._=wt}}).call(this)},958:e=>{var r=1e3;var t=r*60;var n=t*60;var a=n*24;var i=a*7;var s=a*365.25;e.exports=function(e,r){r=r||{};var t=typeof e;if(t==="string"&&e.length>0){return parse(e)}else if(t==="number"&&isFinite(e)){return r.long?fmtLong(e):fmtShort(e)}throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))};function parse(e){e=String(e);if(e.length>100){return}var o=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(!o){return}var u=parseFloat(o[1]);var l=(o[2]||"ms").toLowerCase();switch(l){case"years":case"year":case"yrs":case"yr":case"y":return u*s;case"weeks":case"week":case"w":return u*i;case"days":case"day":case"d":return u*a;case"hours":case"hour":case"hrs":case"hr":case"h":return u*n;case"minutes":case"minute":case"mins":case"min":case"m":return u*t;case"seconds":case"second":case"secs":case"sec":case"s":return u*r;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return u;default:return undefined}}function fmtShort(e){var i=Math.abs(e);if(i>=a){return Math.round(e/a)+"d"}if(i>=n){return Math.round(e/n)+"h"}if(i>=t){return Math.round(e/t)+"m"}if(i>=r){return Math.round(e/r)+"s"}return e+"ms"}function fmtLong(e){var i=Math.abs(e);if(i>=a){return plural(e,i,a,"day")}if(i>=n){return plural(e,i,n,"hour")}if(i>=t){return plural(e,i,t,"minute")}if(i>=r){return plural(e,i,r,"second")}return e+" ms"}function plural(e,r,t,n){var a=r>=t*1.5;return Math.round(e/t)+" "+n+(a?"s":"")}},911:(e,r,t)=>{ +/*! safe-buffer. MIT License. Feross Aboukhadijeh */ +var n=t(300);var a=n.Buffer;function copyProps(e,r){for(var t in e){r[t]=e[t]}}if(a.from&&a.alloc&&a.allocUnsafe&&a.allocUnsafeSlow){e.exports=n}else{copyProps(n,r);r.Buffer=SafeBuffer}function SafeBuffer(e,r,t){return a(e,r,t)}SafeBuffer.prototype=Object.create(a.prototype);copyProps(a,SafeBuffer);SafeBuffer.from=function(e,r,t){if(typeof e==="number"){throw new TypeError("Argument must not be a number")}return a(e,r,t)};SafeBuffer.alloc=function(e,r,t){if(typeof e!=="number"){throw new TypeError("Argument must be a number")}var n=a(e);if(r!==undefined){if(typeof t==="string"){n.fill(r,t)}else{n.fill(r)}}else{n.fill(0)}return n};SafeBuffer.allocUnsafe=function(e){if(typeof e!=="number"){throw new TypeError("Argument must be a number")}return a(e)};SafeBuffer.allocUnsafeSlow=function(e){if(typeof e!=="number"){throw new TypeError("Argument must be a number")}return n.SlowBuffer(e)}},300:e=>{"use strict";e.exports=require("buffer")},113:e=>{"use strict";e.exports=require("crypto")},521:e=>{"use strict";e.exports=require("next/dist/lib/semver-noop")},781:e=>{"use strict";e.exports=require("stream")},837:e=>{"use strict";e.exports=require("util")}};var r={};function __nccwpck_require__(t){var n=r[t];if(n!==undefined){return n.exports}var a=r[t]={id:t,loaded:false,exports:{}};var i=true;try{e[t].call(a.exports,a,a.exports,__nccwpck_require__);i=false}finally{if(i)delete r[t]}a.loaded=true;return a.exports}(()=>{__nccwpck_require__.nmd=e=>{e.paths=[];if(!e.children)e.children=[];return e}})();if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var t=__nccwpck_require__(773);module.exports=t})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/jsonwebtoken/package.json b/build/node_modules/next/dist/compiled/jsonwebtoken/package.json new file mode 100644 index 0000000..59ad1dd --- /dev/null +++ b/build/node_modules/next/dist/compiled/jsonwebtoken/package.json @@ -0,0 +1 @@ +{"name":"jsonwebtoken","main":"index.js","author":"auth0","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/nanoid/index.cjs b/build/node_modules/next/dist/compiled/nanoid/index.cjs new file mode 100644 index 0000000..a8cb07f --- /dev/null +++ b/build/node_modules/next/dist/compiled/nanoid/index.cjs @@ -0,0 +1 @@ +(()=>{var e={113:e=>{"use strict";e.exports=require("crypto")},660:(e,r,t)=>{let l=t(113);let{urlAlphabet:a}=t(591);const n=128;let _,u;let fillPool=e=>{if(!_||_.length_.length){l.randomFillSync(_);u=0}u+=e};let random=e=>{fillPool(e-=0);return _.subarray(u-e,u)};let customRandom=(e,r,t)=>{let l=(2<<31-Math.clz32(e.length-1|1))-1;let a=Math.ceil(1.6*l*r/e.length);return()=>{let n="";while(true){let _=t(a);let u=a;while(u--){n+=e[_[u]&l]||"";if(n.length===r)return n}}}};let customAlphabet=(e,r)=>customRandom(e,r,random);let nanoid=(e=21)=>{fillPool(e-=0);let r="";for(let t=u-e;t{let r="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";e.exports={urlAlphabet:r}}};var r={};function __nccwpck_require__(t){var l=r[t];if(l!==undefined){return l.exports}var a=r[t]={exports:{}};var n=true;try{e[t](a,a.exports,__nccwpck_require__);n=false}finally{if(n)delete r[t]}return a.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var t=__nccwpck_require__(660);module.exports=t})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/nanoid/package.json b/build/node_modules/next/dist/compiled/nanoid/package.json new file mode 100644 index 0000000..f13479a --- /dev/null +++ b/build/node_modules/next/dist/compiled/nanoid/package.json @@ -0,0 +1 @@ +{"name":"nanoid","main":"index.cjs","author":"Andrey Sitnik ","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js b/build/node_modules/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js new file mode 100644 index 0000000..469e18b --- /dev/null +++ b/build/node_modules/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js @@ -0,0 +1,54 @@ +(()=>{var e,t,r={"./dist/build/webpack/alias/react-dom-server-experimental.js"(e,t,r){"use strict";var n;function a(){throw Object.defineProperty(Error("Internal Error: do not use legacy react-dom/server APIs. If you encountered this error, please open an issue on the Next.js repo."),"__NEXT_ERROR_CODE",{value:"E1021",enumerable:!1,configurable:!0})}t.version=(n=r("./dist/compiled/react-dom-experimental/cjs/react-dom-server.node.production.js")).version,t.renderToReadableStream=n.renderToReadableStream,t.renderToString=a,t.renderToStaticMarkup=a,n.resume&&(t.resume=n.resume)},"./dist/compiled/@edge-runtime/cookies/index.js"(e){"use strict";var t=Object.defineProperty,r=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,a=Object.prototype.hasOwnProperty,i={},o={RequestCookies:()=>h,ResponseCookies:()=>p,parseCookie:()=>u,parseSetCookie:()=>c,stringifyCookie:()=>l};for(var s in o)t(i,s,{get:o[s],enumerable:!0});function l(e){var t;let r=["path"in e&&e.path&&`Path=${e.path}`,"expires"in e&&(e.expires||0===e.expires)&&`Expires=${("number"==typeof e.expires?new Date(e.expires):e.expires).toUTCString()}`,"maxAge"in e&&"number"==typeof e.maxAge&&`Max-Age=${e.maxAge}`,"domain"in e&&e.domain&&`Domain=${e.domain}`,"secure"in e&&e.secure&&"Secure","httpOnly"in e&&e.httpOnly&&"HttpOnly","sameSite"in e&&e.sameSite&&`SameSite=${e.sameSite}`,"partitioned"in e&&e.partitioned&&"Partitioned","priority"in e&&e.priority&&`Priority=${e.priority}`].filter(Boolean),n=`${e.name}=${encodeURIComponent(null!=(t=e.value)?t:"")}`;return 0===r.length?n:`${n}; ${r.join("; ")}`}function u(e){let t=new Map;for(let r of e.split(/; */)){if(!r)continue;let e=r.indexOf("=");if(-1===e){t.set(r,"true");continue}let[n,a]=[r.slice(0,e),r.slice(e+1)];try{t.set(n,decodeURIComponent(null!=a?a:"true"))}catch{}}return t}function c(e){if(!e)return;let[[t,r],...n]=u(e),{domain:a,expires:i,httponly:o,maxage:s,path:l,samesite:c,secure:h,partitioned:p,priority:m}=Object.fromEntries(n.map(([e,t])=>[e.toLowerCase().replace(/-/g,""),t]));{var g,y,v={name:t,value:decodeURIComponent(r),domain:a,...i&&{expires:new Date(i)},...o&&{httpOnly:!0},..."string"==typeof s&&{maxAge:Number(s)},path:l,...c&&{sameSite:d.includes(g=(g=c).toLowerCase())?g:void 0},...h&&{secure:!0},...m&&{priority:f.includes(y=(y=m).toLowerCase())?y:void 0},...p&&{partitioned:!0}};let e={};for(let t in v)v[t]&&(e[t]=v[t]);return e}}e.exports=((e,i,o,s)=>{if(i&&"object"==typeof i||"function"==typeof i)for(let l of n(i))a.call(e,l)||l===o||t(e,l,{get:()=>i[l],enumerable:!(s=r(i,l))||s.enumerable});return e})(t({},"__esModule",{value:!0}),i);var d=["strict","lax","none"],f=["low","medium","high"],h=class{constructor(e){this._parsed=new Map,this._headers=e;const t=e.get("cookie");if(t)for(const[e,r]of u(t))this._parsed.set(e,{name:e,value:r})}[Symbol.iterator](){return this._parsed[Symbol.iterator]()}get size(){return this._parsed.size}get(...e){let t="string"==typeof e[0]?e[0]:e[0].name;return this._parsed.get(t)}getAll(...e){var t;let r=Array.from(this._parsed);if(!e.length)return r.map(([e,t])=>t);let n="string"==typeof e[0]?e[0]:null==(t=e[0])?void 0:t.name;return r.filter(([e])=>e===n).map(([e,t])=>t)}has(e){return this._parsed.has(e)}set(...e){let[t,r]=1===e.length?[e[0].name,e[0].value]:e,n=this._parsed;return n.set(t,{name:t,value:r}),this._headers.set("cookie",Array.from(n).map(([e,t])=>l(t)).join("; ")),this}delete(e){let t=this._parsed,r=Array.isArray(e)?e.map(e=>t.delete(e)):t.delete(e);return this._headers.set("cookie",Array.from(t).map(([e,t])=>l(t)).join("; ")),r}clear(){return this.delete(Array.from(this._parsed.keys())),this}[Symbol.for("edge-runtime.inspect.custom")](){return`RequestCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`}toString(){return[...this._parsed.values()].map(e=>`${e.name}=${encodeURIComponent(e.value)}`).join("; ")}},p=class{constructor(e){var t,r,n;this._parsed=new Map,this._headers=e;const a=null!=(n=null!=(r=null==(t=e.getSetCookie)?void 0:t.call(e))?r:e.get("set-cookie"))?n:[];for(const e of Array.isArray(a)?a:function(e){if(!e)return[];var t,r,n,a,i,o=[],s=0;function l(){for(;s=e.length)&&o.push(e.substring(t,e.length))}return o}(a)){const t=c(e);t&&this._parsed.set(t.name,t)}}get(...e){let t="string"==typeof e[0]?e[0]:e[0].name;return this._parsed.get(t)}getAll(...e){var t;let r=Array.from(this._parsed.values());if(!e.length)return r;let n="string"==typeof e[0]?e[0]:null==(t=e[0])?void 0:t.name;return r.filter(e=>e.name===n)}has(e){return this._parsed.has(e)}set(...e){let[t,r,n]=1===e.length?[e[0].name,e[0].value,e[0]]:e,a=this._parsed;return a.set(t,function(e={name:"",value:""}){return"number"==typeof e.expires&&(e.expires=new Date(e.expires)),e.maxAge&&(e.expires=new Date(Date.now()+1e3*e.maxAge)),(null===e.path||void 0===e.path)&&(e.path="/"),e}({name:t,value:r,...n})),function(e,t){for(let[,r]of(t.delete("set-cookie"),e)){let e=l(r);t.append("set-cookie",e)}}(a,this._headers),this}delete(...e){let[t,r]="string"==typeof e[0]?[e[0]]:[e[0].name,e[0]];return this.set({...r,name:t,value:"",expires:new Date(0)})}[Symbol.for("edge-runtime.inspect.custom")](){return`ResponseCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`}toString(){return[...this._parsed.values()].map(l).join("; ")}}},"./dist/compiled/busboy/index.js"(e,t,r){!function(){"use strict";var t={900:function(e,t,r){let{parseContentType:n}=r(318),a=[r(104),r(506)].filter(function(e){return"function"==typeof e.detect});e.exports=e=>{if(("object"!=typeof e||null===e)&&(e={}),"object"!=typeof e.headers||null===e.headers||"string"!=typeof e.headers["content-type"])throw Error("Missing Content-Type");var t=e;let r=t.headers,i=n(r["content-type"]);if(!i)throw Error("Malformed content type");for(let e of a){if(!e.detect(i))continue;let n={limits:t.limits,headers:r,conType:i,highWaterMark:void 0,fileHwm:void 0,defCharset:void 0,defParamCharset:void 0,preservePath:!1};return t.highWaterMark&&(n.highWaterMark=t.highWaterMark),t.fileHwm&&(n.fileHwm=t.fileHwm),n.defCharset=t.defCharset,n.defParamCharset=t.defParamCharset,n.preservePath=t.preservePath,new e(n)}throw Error(`Unsupported content type: ${r["content-type"]}`)}},104:function(e,t,r){let{Readable:n,Writable:a}=r(781),i=r(542),{basename:o,convertToUTF8:s,getDecoder:l,parseContentType:u,parseDisposition:c}=r(318),d=Buffer.from("\r\n"),f=Buffer.from("\r"),h=Buffer.from("-");function p(){}class m{constructor(e){this.header=Object.create(null),this.pairCount=0,this.byteCount=0,this.state=0,this.name="",this.value="",this.crlf=0,this.cb=e}reset(){this.header=Object.create(null),this.pairCount=0,this.byteCount=0,this.state=0,this.name="",this.value="",this.crlf=0}push(e,t,r){let n=t;for(;t{if(this._read(),0==--t._fileEndsLeft&&t._finalcb){let e=t._finalcb;t._finalcb=null,process.nextTick(e)}})}_read(e){let t=this._readcb;t&&(this._readcb=null,t())}}let y={push:(e,t)=>{},destroy:()=>{}};function v(e,t){return e}function b(e,t,r){if(r)return t(r);t(r=w(e))}function w(e){if(e._hparser)return Error("Malformed part header");let t=e._fileStream;if(t&&(e._fileStream=null,t.destroy(Error("Unexpected end of file"))),!e._complete)return Error("Unexpected end of form")}let S=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],_=[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1];e.exports=class extends a{constructor(e){let t,r,n,a,b;if(super({autoDestroy:!0,emitClose:!0,highWaterMark:"number"==typeof e.highWaterMark?e.highWaterMark:void 0}),!e.conType.params||"string"!=typeof e.conType.params.boundary)throw Error("Multipart: Boundary not found");const w=e.conType.params.boundary,S="string"==typeof e.defParamCharset&&e.defParamCharset?l(e.defParamCharset):v,_=e.defCharset||"utf8",E=e.preservePath,R={autoDestroy:!0,emitClose:!0,highWaterMark:"number"==typeof e.fileHwm?e.fileHwm:void 0},k=e.limits,x=k&&"number"==typeof k.fieldSize?k.fieldSize:1048576,P=k&&"number"==typeof k.fileSize?k.fileSize:1/0,C=k&&"number"==typeof k.files?k.files:1/0,T=k&&"number"==typeof k.fields?k.fields:1/0,A=k&&"number"==typeof k.parts?k.parts:1/0;let O=-1,j=0,$=0,I=!1;this._fileEndsLeft=0,this._fileStream=void 0,this._complete=!1;let D=0,N=0,M=!1,L=!1,U=!1;this._hparser=null;const F=new m(e=>{let i;if(this._hparser=null,I=!1,a="text/plain",r=_,n="7bit",b=void 0,M=!1,!e["content-disposition"]){I=!0;return}let s=c(e["content-disposition"][0],S);if(!s||"form-data"!==s.type){I=!0;return}if(s.params&&(s.params.name&&(b=s.params.name),s.params["filename*"]?i=s.params["filename*"]:s.params.filename&&(i=s.params.filename),void 0===i||E||(i=o(i))),e["content-type"]){let t=u(e["content-type"][0]);t&&(a=`${t.type}/${t.subtype}`,t.params&&"string"==typeof t.params.charset&&(r=t.params.charset.toLowerCase()))}if(e["content-transfer-encoding"]&&(n=e["content-transfer-encoding"][0].toLowerCase()),"application/octet-stream"===a||void 0!==i){if($===C){L||(L=!0,this.emit("filesLimit")),I=!0;return}if(++$,0===this.listenerCount("file")){I=!0;return}D=0,this._fileStream=new g(R,this),++this._fileEndsLeft,this.emit("file",b,this._fileStream,{filename:i,encoding:n,mimeType:a})}else{if(j===T){U||(U=!0,this.emit("fieldsLimit")),I=!0;return}if(++j,0===this.listenerCount("field")){I=!0;return}t=[],N=0}});let H=0;const B=(e,i,o,l,u)=>{for(;i;){if(null!==this._hparser){let e=this._hparser.push(i,o,l);if(-1===e){this._hparser=null,F.reset(),this.emit("error",Error("Malformed part header"));break}o=e}if(o===l)break;if(0!==H){if(1===H){switch(i[o]){case 45:H=2,++o;break;case 13:H=3,++o;break;default:H=0}if(o===l)return}if(2===H){if(H=0,45===i[o]){this._complete=!0,this._bparser=y;return}let e=this._writecb;this._writecb=p,B(!1,h,0,1,!1),this._writecb=e}else if(3===H){if(H=0,10===i[o]){if(++o,O>=A||(this._hparser=F,o===l))break;continue}{let e=this._writecb;this._writecb=p,B(!1,f,0,1,!1),this._writecb=e}}}if(!I){if(this._fileStream){let e,t=Math.min(l-o,P-D);u?e=i.slice(o,o+t):(e=Buffer.allocUnsafe(t),i.copy(e,0,o,o+t)),(D+=e.length)===P?(e.length>0&&this._fileStream.push(e),this._fileStream.emit("limit"),this._fileStream.truncated=!0,I=!0):this._fileStream.push(e)||(this._writecb&&(this._fileStream._readcb=this._writecb),this._writecb=null)}else if(void 0!==t){let e,r=Math.min(l-o,x-N);u?e=i.slice(o,o+r):(e=Buffer.allocUnsafe(r),i.copy(e,0,o,o+r)),N+=r,t.push(e),N===x&&(I=!0,M=!0)}}break}if(e){if(H=1,this._fileStream)this._fileStream.push(null),this._fileStream=null;else if(void 0!==t){let e;switch(t.length){case 0:e="";break;case 1:e=s(t[0],r,0);break;default:e=s(Buffer.concat(t,N),r,0)}t=void 0,N=0,this.emit("field",b,e,{nameTruncated:!1,valueTruncated:M,encoding:n,mimeType:a})}++O===A&&this.emit("partsLimit")}};this._bparser=new i(`\r +--${w}`,B),this._writecb=null,this._finalcb=null,this.write(d)}static detect(e){return"multipart"===e.type&&"form-data"===e.subtype}_write(e,t,r){let n;this._writecb=r,this._bparser.push(e,0),this._writecb&&(n=this._writecb,this._writecb=null,n&&n())}_destroy(e,t){this._hparser=null,this._bparser=y,e||(e=w(this));let r=this._fileStream;r&&(this._fileStream=null,r.destroy(e)),t(e)}_final(e){if(this._bparser.destroy(),!this._complete)return e(Error("Unexpected end of form"));this._fileEndsLeft?this._finalcb=b.bind(null,this,e):b(this,e)}}},506:function(e,t,r){let{Writable:n}=r(781),{getDecoder:a}=r(318);function i(e,t,r,n){if(r>=n)return n;if(-1===e._byte){let a=l[t[r++]];if(-1===a)return -1;if(a>=8&&(e._encode=2),re.fieldNameSizeLimit){for(!e._keyTrunc&&e._lastPose.fieldSizeLimit){for(!e._valTrunc&&e._lastPos=this.fieldsLimit)return r();let n=0,a=e.length;if(this._lastPos=0,-2!==this._byte){if(-1===(n=i(this,e,n,a)))return r(Error("Malformed urlencoded form"));if(n>=a)return r();this._inKey?++this._bytesKey:++this._bytesVal}e:for(;n0&&this.emit("field",this._key,"",{nameTruncated:this._keyTrunc,valueTruncated:!1,encoding:this.charset,mimeType:"text/plain"}),this._key="",this._val="",this._keyTrunc=!1,this._valTrunc=!1,this._bytesKey=0,this._bytesVal=0,++this._fields>=this.fieldsLimit)return this.emit("fieldsLimit"),r();continue;case 43:this._lastPos=a)return r();++this._bytesKey,n=o(this,e,n,a);continue}++n,++this._bytesKey,n=o(this,e,n,a)}this._lastPos0||this._bytesVal>0)&&this.emit("field",this._key,this._val,{nameTruncated:this._keyTrunc,valueTruncated:this._valTrunc,encoding:this.charset,mimeType:"text/plain"}),this._key="",this._val="",this._keyTrunc=!1,this._valTrunc=!1,this._bytesKey=0,this._bytesVal=0,++this._fields>=this.fieldsLimit)return this.emit("fieldsLimit"),r();continue e;case 43:this._lastPos=a)return r();++this._bytesVal,n=s(this,e,n,a);continue}++n,++this._bytesVal,n=s(this,e,n,a)}this._lastPos0||this._bytesVal>0)&&(this._inKey?this._key=this._decoder(this._key,this._encode):this._val=this._decoder(this._val,this._encode),this.emit("field",this._key,this._val,{nameTruncated:this._keyTrunc,valueTruncated:this._valTrunc,encoding:this.charset,mimeType:"text/plain"})),e()}}},318:function(e){function t(e){let t;for(;;)switch(e){case"utf-8":case"utf8":return r.utf8;case"latin1":case"ascii":case"us-ascii":case"iso-8859-1":case"iso8859-1":case"iso88591":case"iso_8859-1":case"windows-1252":case"iso_8859-1:1987":case"cp1252":case"x-cp1252":return r.latin1;case"utf16le":case"utf-16le":case"ucs2":case"ucs-2":return r.utf16le;case"base64":return r.base64;default:if(void 0===t){t=!0,e=e.toLowerCase();continue}return r.other.bind(e)}}let r={utf8:(e,t)=>{if(0===e.length)return"";if("string"==typeof e){if(t<2)return e;e=Buffer.from(e,"latin1")}return e.utf8Slice(0,e.length)},latin1:(e,t)=>0===e.length?"":"string"==typeof e?e:e.latin1Slice(0,e.length),utf16le:(e,t)=>0===e.length?"":("string"==typeof e&&(e=Buffer.from(e,"latin1")),e.ucs2Slice(0,e.length)),base64:(e,t)=>0===e.length?"":("string"==typeof e&&(e=Buffer.from(e,"latin1")),e.base64Slice(0,e.length)),other:(e,t)=>{if(0===e.length)return"";"string"==typeof e&&(e=Buffer.from(e,"latin1"));try{return new TextDecoder(this).decode(e)}catch{}}};function n(e,r,n){let a=t(r);if(a)return a(e,n)}let a=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],i=[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],o=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],s=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],l=[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,-1,-1,-1,-1,-1,-1,-1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1];e.exports={basename:function(e){if("string"!=typeof e)return"";for(let t=e.length-1;t>=0;--t)switch(e.charCodeAt(t)){case 47:case 92:return".."===(e=e.slice(t+1))||"."===e?"":e}return".."===e||"."===e?"":e},convertToUTF8:n,getDecoder:t,parseContentType:function(e){if(0===e.length)return;let t=Object.create(null),r=0;for(;r=128?a=2:0===a&&(a=1);continue}return}break}}if(p+=e.slice(d,t),void 0===(p=n(p,f,a)))return}else{if(++t===e.length)return;if(34===e.charCodeAt(t)){d=++t;let r=!1;for(;t1)for(let t=0;t-e._lookbehindSize?e._cb(!0,f,0,e._lookbehindSize+s,!1):e._cb(!0,void 0,0,0,!0),e._bufPos=s+o;s+=d[a]}for(;s<0&&!r(e,n,s,a-s);)++s;if(s<0){let t=e._lookbehindSize+s;return t>0&&e._cb(!1,f,0,t,!1),e._lookbehindSize-=t,f.copy(f,0,t,e._lookbehindSize),f.set(n,e._lookbehindSize),e._lookbehindSize+=a,e._bufPos=a,a}e._cb(!1,f,0,e._lookbehindSize,!1),e._lookbehindSize=0}s+=e._bufPos;let h=i[0];for(;s<=c;){let r=n[s+l];if(r===u&&n[s]===h&&t(i,0,n,s,l))return++e.matches,s>0?e._cb(!0,n,e._bufPos,s,!0):e._cb(!0,void 0,0,0,!0),e._bufPos=s+o;s+=d[r]}for(;s0&&e._cb(!1,n,e._bufPos,s{"use strict";var t={56:e=>{e.exports=function(e,t){return"string"==typeof e?o(e):"number"==typeof e?i(e,t):null},e.exports.format=i,e.exports.parse=o;var t=/\B(?=(\d{3})+(?!\d))/g,r=/(?:\.0*|(\.[^0]+)0+)$/,n={b:1,kb:1024,mb:1048576,gb:0x40000000,tb:0x10000000000,pb:0x4000000000000},a=/^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb|pb)$/i;function i(e,a){if(!Number.isFinite(e))return null;var i=Math.abs(e),o=a&&a.thousandsSeparator||"",s=a&&a.unitSeparator||"",l=a&&void 0!==a.decimalPlaces?a.decimalPlaces:2,u=!!(a&&a.fixedDecimals),c=a&&a.unit||"";c&&n[c.toLowerCase()]||(c=i>=n.pb?"PB":i>=n.tb?"TB":i>=n.gb?"GB":i>=n.mb?"MB":i>=n.kb?"KB":"B");var d=(e/n[c.toLowerCase()]).toFixed(l);return u||(d=d.replace(r,"$1")),o&&(d=d.split(".").map(function(e,r){return 0===r?e.replace(t,o):e}).join(".")),d+s+c}function o(e){if("number"==typeof e&&!isNaN(e))return e;if("string"!=typeof e)return null;var t,r=a.exec(e),i="b";return r?(t=parseFloat(r[1]),i=r[4].toLowerCase()):(t=parseInt(e,10),i="b"),Math.floor(n[i]*t)}}},r={};function n(e){var a=r[e];if(void 0!==a)return a.exports;var i=r[e]={exports:{}},o=!0;try{t[e](i,i.exports,n),o=!1}finally{o&&delete r[e]}return i.exports}n.ab=__dirname+"/",e.exports=n(56)})()},"./dist/compiled/cookie/index.js"(e){(()=>{"use strict";"undefined"!=typeof __nccwpck_require__&&(__nccwpck_require__.ab=__dirname+"/");var t,r,n,a,i={};i.parse=function(e,r){if("string"!=typeof e)throw TypeError("argument str must be a string");for(var a={},i=e.split(n),o=(r||{}).decode||t,s=0;s{"use strict";let t,r,n,a,i;var o={993:e=>{var t=Object.prototype.hasOwnProperty,r="~";function n(){}function a(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function i(e,t,n,i,o){if("function"!=typeof n)throw TypeError("The listener must be a function");var s=new a(n,i||e,o),l=r?r+t:t;return e._events[l]?e._events[l].fn?e._events[l]=[e._events[l],s]:e._events[l].push(s):(e._events[l]=s,e._eventsCount++),e}function o(e,t){0==--e._eventsCount?e._events=new n:delete e._events[t]}function s(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(r=!1)),s.prototype.eventNames=function(){var e,n,a=[];if(0===this._eventsCount)return a;for(n in e=this._events)t.call(e,n)&&a.push(r?n.slice(1):n);return Object.getOwnPropertySymbols?a.concat(Object.getOwnPropertySymbols(e)):a},s.prototype.listeners=function(e){var t=r?r+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var a=0,i=n.length,o=Array(i);a{e.exports=(e,t)=>(t=t||(()=>{}),e.then(e=>new Promise(e=>{e(t())}).then(()=>e),e=>new Promise(e=>{e(t())}).then(()=>{throw e})))},574:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){let n=0,a=e.length;for(;a>0;){let i=a/2|0,o=n+i;0>=r(e[o],t)?(n=++o,a-=i+1):a=i}return n}},821:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});let n=r(574);t.default=class{constructor(){this._queue=[]}enqueue(e,t){let r={priority:(t=Object.assign({priority:0},t)).priority,run:e};if(this.size&&this._queue[this.size-1].priority>=t.priority)return void this._queue.push(r);let a=n.default(this._queue,r,(e,t)=>t.priority-e.priority);this._queue.splice(a,0,r)}dequeue(){let e=this._queue.shift();return null==e?void 0:e.run}filter(e){return this._queue.filter(t=>t.priority===e.priority).map(e=>e.run)}get size(){return this._queue.length}}},816:(e,t,r)=>{let n=r(213);class a extends Error{constructor(e){super(e),this.name="TimeoutError"}}let i=(e,t,r)=>new Promise((i,o)=>{if("number"!=typeof t||t<0)throw TypeError("Expected `milliseconds` to be a positive number");if(t===1/0)return void i(e);let s=setTimeout(()=>{if("function"==typeof r){try{i(r())}catch(e){o(e)}return}let n="string"==typeof r?r:`Promise timed out after ${t} milliseconds`,s=r instanceof Error?r:new a(n);"function"==typeof e.cancel&&e.cancel(),o(s)},t);n(e.then(i,o),()=>{clearTimeout(s)})});e.exports=i,e.exports.default=i,e.exports.TimeoutError=a}},s={};function l(e){var t=s[e];if(void 0!==t)return t.exports;var r=s[e]={exports:{}},n=!0;try{o[e](r,r.exports,l),n=!1}finally{n&&delete s[e]}return r.exports}l.ab=__dirname+"/";var u={};Object.defineProperty(u,"__esModule",{value:!0}),t=l(993),r=l(816),n=l(821),a=()=>{},i=new r.TimeoutError,u.default=class extends t{constructor(e){var t,r,i,o;if(super(),this._intervalCount=0,this._intervalEnd=0,this._pendingCount=0,this._resolveEmpty=a,this._resolveIdle=a,!("number"==typeof(e=Object.assign({carryoverConcurrencyCount:!1,intervalCap:1/0,interval:0,concurrency:1/0,autoStart:!0,queueClass:n.default},e)).intervalCap&&e.intervalCap>=1))throw TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${null!=(r=null==(t=e.intervalCap)?void 0:t.toString())?r:""}\` (${typeof e.intervalCap})`);if(void 0===e.interval||!(Number.isFinite(e.interval)&&e.interval>=0))throw TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${null!=(o=null==(i=e.interval)?void 0:i.toString())?o:""}\` (${typeof e.interval})`);this._carryoverConcurrencyCount=e.carryoverConcurrencyCount,this._isIntervalIgnored=e.intervalCap===1/0||0===e.interval,this._intervalCap=e.intervalCap,this._interval=e.interval,this._queue=new e.queueClass,this._queueClass=e.queueClass,this.concurrency=e.concurrency,this._timeout=e.timeout,this._throwOnTimeout=!0===e.throwOnTimeout,this._isPaused=!1===e.autoStart}get _doesIntervalAllowAnother(){return this._isIntervalIgnored||this._intervalCount{this._onResumeInterval()},t)),!0;this._intervalCount=this._carryoverConcurrencyCount?this._pendingCount:0}return!1}_tryToStartAnother(){if(0===this._queue.size)return this._intervalId&&clearInterval(this._intervalId),this._intervalId=void 0,this._resolvePromises(),!1;if(!this._isPaused){let e=!this._isIntervalPaused();if(this._doesIntervalAllowAnother&&this._doesConcurrentAllowAnother){let t=this._queue.dequeue();return!!t&&(this.emit("active"),t(),e&&this._initializeIntervalIfNeeded(),!0)}}return!1}_initializeIntervalIfNeeded(){this._isIntervalIgnored||void 0!==this._intervalId||(this._intervalId=setInterval(()=>{this._onInterval()},this._interval),this._intervalEnd=Date.now()+this._interval)}_onInterval(){0===this._intervalCount&&0===this._pendingCount&&this._intervalId&&(clearInterval(this._intervalId),this._intervalId=void 0),this._intervalCount=this._carryoverConcurrencyCount?this._pendingCount:0,this._processQueue()}_processQueue(){for(;this._tryToStartAnother(););}get concurrency(){return this._concurrency}set concurrency(e){if(!("number"==typeof e&&e>=1))throw TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${e}\` (${typeof e})`);this._concurrency=e,this._processQueue()}async add(e,t={}){return new Promise((n,a)=>{let o=async()=>{this._pendingCount++,this._intervalCount++;try{let o=void 0===this._timeout&&void 0===t.timeout?e():r.default(Promise.resolve(e()),void 0===t.timeout?this._timeout:t.timeout,()=>{(void 0===t.throwOnTimeout?this._throwOnTimeout:t.throwOnTimeout)&&a(i)});n(await o)}catch(e){a(e)}this._next()};this._queue.enqueue(o,t),this._tryToStartAnother(),this.emit("add")})}async addAll(e,t){return Promise.all(e.map(async e=>this.add(e,t)))}start(){return this._isPaused&&(this._isPaused=!1,this._processQueue()),this}pause(){this._isPaused=!0}clear(){this._queue=new this._queueClass}async onEmpty(){if(0!==this._queue.size)return new Promise(e=>{let t=this._resolveEmpty;this._resolveEmpty=()=>{t(),e()}})}async onIdle(){if(0!==this._pendingCount||0!==this._queue.size)return new Promise(e=>{let t=this._resolveIdle;this._resolveIdle=()=>{t(),e()}})}get size(){return this._queue.size}sizeBy(e){return this._queue.filter(e).length}get pending(){return this._pendingCount}get isPaused(){return this._isPaused}get timeout(){return this._timeout}set timeout(e){this._timeout=e}},e.exports=u})()},"./dist/compiled/path-to-regexp/index.js"(e){(()=>{"use strict";"undefined"!=typeof __nccwpck_require__&&(__nccwpck_require__.ab=__dirname+"/");var t={};(()=>{function e(e,t){void 0===t&&(t={});for(var r=function(e){for(var t=[],r=0;r=48&&o<=57||o>=65&&o<=90||o>=97&&o<=122||95===o){a+=e[i++];continue}break}if(!a)throw TypeError("Missing parameter name at ".concat(r));t.push({type:"NAME",index:r,value:a}),r=i;continue}if("("===n){var s=1,l="",i=r+1;if("?"===e[i])throw TypeError('Pattern cannot start with "?" at '.concat(i));for(;i-1)return!0}return!1},g=function(e){var t=l[l.length-1],r=e||(t&&"string"==typeof t?t:"");if(t&&!r)throw TypeError('Must have text between two parameters, missing text after "'.concat(t.name,'"'));return!r||m(r)?"[^".concat(a(s),"]+?"):"(?:(?!".concat(a(r),")[^").concat(a(s),"])+?")};c-1:void 0===S;o||(m+="(?:".concat(p,"(?=").concat(h,"))?")),_||(m+="(?=".concat(p,"|").concat(h,")"))}return new RegExp(m,i(r))}function s(t,r,n){if(t instanceof RegExp){var a;if(!r)return t;for(var l=/\((?:\?<(.*?)>)?(?!\?)/g,u=0,c=l.exec(t.source);c;)r.push({name:c[1]||u++,prefix:"",suffix:"",modifier:"",pattern:""}),c=l.exec(t.source);return t}return Array.isArray(t)?(a=t.map(function(e){return s(e,r,n).source}),new RegExp("(?:".concat(a.join("|"),")"),i(n))):o(e(t,n),r,n)}Object.defineProperty(t,"__esModule",{value:!0}),t.pathToRegexp=t.tokensToRegexp=t.regexpToFunction=t.match=t.tokensToFunction=t.compile=t.parse=void 0,t.parse=e,t.compile=function(t,n){return r(e(t,n),n)},t.tokensToFunction=r,t.match=function(e,t){var r=[];return n(s(e,r,t),r,t)},t.regexpToFunction=n,t.tokensToRegexp=o,t.pathToRegexp=s})(),e.exports=t})()},"./dist/compiled/react-dom-experimental/cjs/react-dom-server.node.production.js"(e,t,r){"use strict";var n,a,i=r("util"),o=r("crypto"),s=r("async_hooks"),l=r("./dist/compiled/react-experimental/index.js"),u=r("./dist/compiled/react-dom-experimental/index.js"),c=r("stream"),d=Symbol.for("react.transitional.element"),f=Symbol.for("react.portal"),h=Symbol.for("react.fragment"),p=Symbol.for("react.strict_mode"),m=Symbol.for("react.profiler"),g=Symbol.for("react.consumer"),y=Symbol.for("react.context"),v=Symbol.for("react.forward_ref"),b=Symbol.for("react.suspense"),w=Symbol.for("react.suspense_list"),S=Symbol.for("react.memo"),_=Symbol.for("react.lazy"),E=Symbol.for("react.scope"),R=Symbol.for("react.activity"),k=Symbol.for("react.legacy_hidden"),x=Symbol.for("react.memo_cache_sentinel"),P=Symbol.for("react.view_transition"),C=Symbol.iterator;function T(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=C&&e[C]||e["@@iterator"])?e:null}var A=Symbol.asyncIterator,O=Symbol.for("react.optimistic_key"),j=Array.isArray,$=queueMicrotask;function I(e){"function"==typeof e.flush&&e.flush()}var D=null,N=0,M=!0;function L(e,t){if("string"==typeof t){if(0!==t.length)if(4096<3*t.length)0]/;function ee(e){if("boolean"==typeof e||"number"==typeof e||"bigint"==typeof e)return""+e;e=""+e;var t=Z.exec(e);if(t){var r,n="",a=0;for(r=t.index;r; rel=dns-prefetch",n=0<=(a.remainingCapacity-=r.length+2)),n?(i.resets.dns[e]=null,a.preconnects&&(a.preconnects+=", "),a.preconnects+=r):(tt(r=[],{href:e,rel:"dns-prefetch"}),i.preconnects.add(r))),a0(t))}else el.D(e)},C:function(e,t){var r=ar();if(r){var n=r.resumableState,a=r.renderState;if("string"==typeof e&&e){var i,o,s="use-credentials"===t?"credentials":"string"==typeof t?"anonymous":"default";n.connectResources[s].hasOwnProperty(e)||(n.connectResources[s][e]=null,(o=(n=a.headers)&&0; rel=preconnect","string"==typeof t&&(o+='; crossorigin="'+(""+t).replace(r2,r4)+'"'),i=o,o=0<=(n.remainingCapacity-=i.length+2)),o?(a.resets.connect[s][e]=null,n.preconnects&&(n.preconnects+=", "),n.preconnects+=i):(tt(s=[],{rel:"preconnect",href:e,crossOrigin:t}),a.preconnects.add(s))),a0(r)}}else el.C(e,t)},L:function(e,t,r){var n=ar();if(n){var a=n.resumableState,i=n.renderState;if(t&&e){switch(t){case"image":if(r)var o,s=r.imageSrcSet,l=r.imageSizes,u=r.fetchPriority;var c=s?s+"\n"+(l||""):e;if(a.imageResources.hasOwnProperty(c))return;a.imageResources[c]=eu,(a=i.headers)&&0'),ef=z(""),ep=z('`,n=!1;return new TransformStream({transform(e,t){if(n)return void t.enqueue(e);let a=F(e,U.CLOSED.HEAD);if(-1===a)return void t.enqueue(e);let i=K.encode(r),o=new Uint8Array(e.length+i.length);o.set(e.slice(0,a)),o.set(i,a),o.set(e.slice(a),a+i.length),t.enqueue(o),n=!0}})}function es(e,t){let r=!1,n=null,a=!1;function i(e){return n||(n=o(e)),n}async function o(n){let i=e.getReader();t&&await M();try{for(;;){let{done:e,value:o}=await i.read();if(e){a=!0;return}t||r||await M(),n.enqueue(o)}}catch(e){n.error(e)}}return new TransformStream({start(e){t||i(e)},transform(e,r){r.enqueue(e),t&&i(r)},flush(e){if(r=!0,!a)return i(e)}})}let el="";function eu(){let e=!1;return new TransformStream({transform(t,r){if(e)return r.enqueue(t);let n=F(t,U.CLOSED.BODY_AND_HTML);if(n>-1){if(e=!0,t.length===U.CLOSED.BODY_AND_HTML.length)return;let a=t.slice(0,n);if(r.enqueue(a),t.length>U.CLOSED.BODY_AND_HTML.length+n){let e=t.slice(n+U.CLOSED.BODY_AND_HTML.length);r.enqueue(e)}}else r.enqueue(t)},flush(e){e.enqueue(U.CLOSED.BODY_AND_HTML)}})}function ec(e){let t=!1;return new TransformStream({transform(r,n){if(t)return void n.enqueue(r);let a=F(r,U.OPENING.HTML);if(-1===a)return void n.enqueue(r);let i=a+U.OPENING.HTML.length,o=` data-dpl-id="${e}"`,s=K.encode(o),l=new Uint8Array(r.length+s.length);l.set(r.subarray(0,i)),l.set(s,i),l.set(r.subarray(i),i+s.length),n.enqueue(l),t=!0}})}function ed(e,t){let r=e;for(let e of t)e&&(r=r.pipeThrough(e));return r}async function ef(e,{suffix:t,inlinedDataStream:r,isStaticGeneration:n,deploymentId:a,getServerInsertedHTML:i,getServerInsertedMetadata:o,validateRootLayout:s}){let l,u,c,d,f=t?t.split(el,1)[0]:null;return n?await e.allReady:await L(),ed(e,[en(),a?ec(a):null,ea(o),null!=f&&f.length>0?(u=!1,new TransformStream({transform(e,t){if(t.enqueue(e),!u){let e;u=!0,l=e=new I,N(()=>{try{t.enqueue(K.encode(f))}catch{}finally{l=void 0,e.resolve()}})}},flush(e){if(l)return l.promise;u||e.enqueue(K.encode(f))}})):null,r?es(r,!0):null,s?(c=!1,d=!1,new TransformStream({async transform(e,t){!c&&F(e,U.OPENING.HTML)>-1&&(c=!0),!d&&F(e,U.OPENING.BODY)>-1&&(d=!0),t.enqueue(e)},flush(e){let t=[];c||t.push("html"),d||t.push("body"),t.length&&e.enqueue(K.encode(` + + `))}})):null,eu(),ei(i)])}async function eh(e,{getServerInsertedHTML:t,getServerInsertedMetadata:r,deploymentId:n}){return ed(e,[en(),new TransformStream({transform(e,t){H(e,U.CLOSED.BODY_AND_HTML)||H(e,U.CLOSED.BODY)||H(e,U.CLOSED.HTML)||(e=B(e,U.CLOSED.BODY),e=B(e,U.CLOSED.HTML),t.enqueue(e))}}),n?ec(n):null,ei(t),ea(r)])}async function ep(e,{inlinedDataStream:t,getServerInsertedHTML:r,getServerInsertedMetadata:n,deploymentId:a}){return ed(e,[en(),a?ec(a):null,ei(r),ea(n),es(t,!0),eu()])}async function em(e,{inlinedDataStream:t,getServerInsertedHTML:r,getServerInsertedMetadata:n,deploymentId:a}){return ed(e,[en(),a?ec(a):null,ei(r),await eo(),ea(n),es(t,!0),eu()])}async function eg(e,{delayDataUntilFirstHtmlChunk:t,inlinedDataStream:r,getServerInsertedHTML:n,getServerInsertedMetadata:a,deploymentId:i}){return ed(e,[en(),i?ec(i):null,ei(n),ea(a),es(r,t),eu()])}var ey=a("./dist/esm/lib/constants.js");function ev(e){for(let t of[ey.AA,ey.h])if(e!==t&&e.startsWith(t))return e.substring(t.length);return null}function eb(e,t,r){if(e){for(let n of(r&&(r=r.toLowerCase()),e))if(t===n.domain?.split(":",1)[0].toLowerCase()||r===n.defaultLocale.toLowerCase()||n.locales?.some(e=>e.toLowerCase()===r))return n}}function ew(e){return e.replace(/\/$/,"")||"/"}function eS(e){let t=e.indexOf("#"),r=e.indexOf("?"),n=r>-1&&(t<0||r-1?{pathname:e.substring(0,n?r:t),query:n?e.substring(r,t>-1?t:void 0):"",hash:t>-1?e.slice(t):""}:{pathname:e,query:"",hash:""}}function e_(e,t){if(!e.startsWith("/")||!t)return e;let{pathname:r,query:n,hash:a}=eS(e);return`${t}${r}${n}${a}`}function eE(e,t){if(!e.startsWith("/")||!t)return e;let{pathname:r,query:n,hash:a}=eS(e);return`${r}${t}${n}${a}`}function eR(e,t){if("string"!=typeof e)return!1;let{pathname:r}=eS(e);return r===t||r.startsWith(t+"/")}function ek(e,t){let r;if(t?.host&&!Array.isArray(t.host))r=t.host.toString().split(":",1)[0];else{if(!e.hostname)return;r=e.hostname}return r.toLowerCase()}let ex=new WeakMap;function eP(e,t){let r;if(!t)return{pathname:e};let n=ex.get(t);n||(n=t.map(e=>e.toLowerCase()),ex.set(t,n));let a=e.split("/",2);if(!a[1])return{pathname:e};let i=a[1].toLowerCase(),o=n.indexOf(i);return o<0?{pathname:e}:(r=t[o],{pathname:e=e.slice(r.length+1)||"/",detectedLocale:r})}function eC(e,t){if(!eR(e,t))return e;let r=e.slice(t.length);return r.startsWith("/")?r:`/${r}`}let eT=/^(?:127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|\[::1\]|localhost)$/;function eA(e,t){let r=new URL(String(e),t&&String(t));return eT.test(r.hostname)&&(r.hostname="localhost"),r}let eO=Symbol("NextURLInternal");class ej{constructor(e,t,r){let n,a;"object"==typeof t&&"pathname"in t||"string"==typeof t?(n=t,a=r||{}):a=r||t||{},this[eO]={url:eA(e,n??a.base),options:a,basePath:""},this.analyze()}analyze(){var e,t,r,n,a;let i=function(e,t){let{basePath:r,i18n:n,trailingSlash:a}=t.nextConfig??{},i={pathname:e,trailingSlash:"/"!==e?e.endsWith("/"):a};r&&eR(i.pathname,r)&&(i.pathname=eC(i.pathname,r),i.basePath=r);let o=i.pathname;if(i.pathname.startsWith("/_next/data/")&&i.pathname.endsWith(".json")){let e=i.pathname.replace(/^\/_next\/data\//,"").replace(/\.json$/,"").split("/");i.buildId=e[0],o="index"!==e[1]?`/${e.slice(1).join("/")}`:"/",!0===t.parseData&&(i.pathname=o)}if(n){let e=t.i18nProvider?t.i18nProvider.analyze(i.pathname):eP(i.pathname,n.locales);i.locale=e.detectedLocale,i.pathname=e.pathname??i.pathname,!e.detectedLocale&&i.buildId&&(e=t.i18nProvider?t.i18nProvider.analyze(o):eP(o,n.locales)).detectedLocale&&(i.locale=e.detectedLocale)}return i}(this[eO].url.pathname,{nextConfig:this[eO].options.nextConfig,parseData:!process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE,i18nProvider:this[eO].options.i18nProvider}),o=ek(this[eO].url,this[eO].options.headers);this[eO].domainLocale=this[eO].options.i18nProvider?this[eO].options.i18nProvider.detectDomainLocale(o):eb(null==(t=this[eO].options.nextConfig)||null==(e=t.i18n)?void 0:e.domains,o);let s=(null==(r=this[eO].domainLocale)?void 0:r.defaultLocale)||(null==(a=this[eO].options.nextConfig)||null==(n=a.i18n)?void 0:n.defaultLocale);this[eO].url.pathname=i.pathname,this[eO].defaultLocale=s,this[eO].basePath=i.basePath??"",this[eO].buildId=i.buildId,this[eO].locale=i.locale??s,this[eO].trailingSlash=i.trailingSlash}formatPathname(){var e;let t;return t=function(e,t,r,n){if(!t||t===r)return e;let a=e.toLowerCase();return!n&&(eR(a,"/api")||eR(a,`/${t.toLowerCase()}`))?e:e_(e,`/${t}`)}((e={basePath:this[eO].basePath,buildId:this[eO].buildId,defaultLocale:this[eO].options.forceLocale?void 0:this[eO].defaultLocale,locale:this[eO].locale,pathname:this[eO].url.pathname,trailingSlash:this[eO].trailingSlash}).pathname,e.locale,e.buildId?void 0:e.defaultLocale,e.ignorePrefix),(e.buildId||!e.trailingSlash)&&(t=ew(t)),e.buildId&&(t=eE(e_(t,`/_next/data/${e.buildId}`),"/"===e.pathname?"index.json":".json")),t=e_(t,e.basePath),!e.buildId&&e.trailingSlash?t.endsWith("/")?t:eE(t,"/"):ew(t)}formatSearch(){return this[eO].url.search}get buildId(){return this[eO].buildId}set buildId(e){this[eO].buildId=e}get locale(){return this[eO].locale??""}set locale(e){var t,r;if(!this[eO].locale||!(null==(r=this[eO].options.nextConfig)||null==(t=r.i18n)?void 0:t.locales.includes(e)))throw Object.defineProperty(TypeError(`The NextURL configuration includes no locale "${e}"`),"__NEXT_ERROR_CODE",{value:"E597",enumerable:!1,configurable:!0});this[eO].locale=e}get defaultLocale(){return this[eO].defaultLocale}get domainLocale(){return this[eO].domainLocale}get searchParams(){return this[eO].url.searchParams}get host(){return this[eO].url.host}set host(e){this[eO].url.host=e}get hostname(){return this[eO].url.hostname}set hostname(e){this[eO].url.hostname=e}get port(){return this[eO].url.port}set port(e){this[eO].url.port=e}get protocol(){return this[eO].url.protocol}set protocol(e){this[eO].url.protocol=e}get href(){let e=this.formatPathname(),t=this.formatSearch();return`${this.protocol}//${this.host}${e}${t}${this.hash}`}set href(e){this[eO].url=eA(e),this.analyze()}get origin(){return this[eO].url.origin}get pathname(){return this[eO].url.pathname}set pathname(e){this[eO].url.pathname=e}get hash(){return this[eO].url.hash}set hash(e){this[eO].url.hash=e}get search(){return this[eO].url.search}set search(e){this[eO].url.search=e}get password(){return this[eO].url.password}set password(e){this[eO].url.password=e}get username(){return this[eO].url.username}set username(e){this[eO].url.username=e}get basePath(){return this[eO].basePath}set basePath(e){this[eO].basePath=e.startsWith("/")?e:`/${e}`}toString(){return this.href}toJSON(){return this.href}[Symbol.for("edge-runtime.inspect.custom")](){return{href:this.href,origin:this.origin,protocol:this.protocol,username:this.username,password:this.password,host:this.host,hostname:this.hostname,port:this.port,pathname:this.pathname,search:this.search,searchParams:this.searchParams,hash:this.hash}}clone(){return new ej(String(this),this[eO].options)}}var e$=a("./dist/esm/server/web/spec-extension/cookies.js");Symbol("internal request"),Request,Symbol.for("edge-runtime.inspect.custom");let eI="ResponseAborted";class eD extends Error{constructor(...e){super(...e),this.name=eI}}let eN=0,eM=0,eL=0;function eU(e={}){let t=0===eN?void 0:{clientComponentLoadStart:eN,clientComponentLoadTimes:eM,clientComponentLoadCount:eL};return e.reset&&(eN=0,eM=0,eL=0),t}function eF(e){return(null==e?void 0:e.name)==="AbortError"||(null==e?void 0:e.name)===eI}async function eH(e,t,r){try{let n,{errored:a,destroyed:i}=t;if(a||i)return;let o=(n=new AbortController,t.once("close",()=>{t.writableFinished||n.abort(new eD)}),n),s=function(e,t){let r=!1,n=new I;function a(){n.resolve()}e.on("drain",a),e.once("close",()=>{e.off("drain",a),n.resolve()});let i=new I;return e.once("finish",()=>{i.resolve()}),new WritableStream({write:async t=>{if(!r){if(r=!0,"performance"in globalThis&&process.env.NEXT_OTEL_PERFORMANCE_PREFIX){let e=eU();e&&performance.measure(`${process.env.NEXT_OTEL_PERFORMANCE_PREFIX}:next-client-component-loading`,{start:e.clientComponentLoadStart,end:e.clientComponentLoadStart+e.clientComponentLoadTimes})}e.flushHeaders(),(0,j.getTracer)().trace($.Fx.startResponse,{spanName:"start response"},()=>void 0)}try{let r=e.write(t);"flush"in e&&"function"==typeof e.flush&&e.flush(),r||(await n.promise,n=new I)}catch(t){throw e.end(),Object.defineProperty(Error("failed to write chunk to response",{cause:t}),"__NEXT_ERROR_CODE",{value:"E321",enumerable:!1,configurable:!0})}},abort:t=>{e.writableFinished||e.destroy(t)},close:async()=>{if(t&&await t,!e.writableFinished)return e.end(),i.promise}})}(t,r);await e.pipeTo(s,{signal:o.signal})}catch(e){if(eF(e))return;throw Object.defineProperty(Error("failed to pipe response",{cause:e}),"__NEXT_ERROR_CODE",{value:"E180",enumerable:!1,configurable:!0})}}var eB=a("./dist/esm/shared/lib/invariant-error.js");class ez{static #e=this.EMPTY=new ez(null,{metadata:{},contentType:null});static fromStatic(e,t){return new ez(e,{metadata:{},contentType:t})}constructor(e,{contentType:t,waitUntil:r,metadata:n}){this.response=e,this.contentType=t,this.metadata=n,this.waitUntil=r}assignMetadata(e){Object.assign(this.metadata,e)}get isNull(){return null===this.response}get isDynamic(){return"string"!=typeof this.response}toUnchunkedString(e=!1){if(null===this.response)return"";if("string"!=typeof this.response){if(!e)throw Object.defineProperty(new eB.z("dynamic responses cannot be unchunked. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E732",enumerable:!1,configurable:!0});return er(this.readable)}return this.response}get readable(){return null===this.response?new ReadableStream({start(e){e.close()}}):"string"==typeof this.response?Q(this.response):Buffer.isBuffer(this.response)?Z(this.response):Array.isArray(this.response)?Y(...this.response):this.response}coerce(){return null===this.response?[]:"string"==typeof this.response?[Q(this.response)]:Array.isArray(this.response)?this.response:Buffer.isBuffer(this.response)?[Z(this.response)]:[this.response]}pipeThrough(e){this.response=this.readable.pipeThrough(e)}unshift(e){this.response=this.coerce(),this.response.unshift(e)}push(e){this.response=this.coerce(),this.response.push(e)}async pipeTo(e){try{await this.readable.pipeTo(e,{preventClose:!0}),this.waitUntil&&await this.waitUntil,await e.close()}catch(t){if(eF(t))return void await e.abort(t);throw t}}async pipeToNodeResponse(e){await eH(this.readable,e,this.waitUntil)}}var eq=a("./dist/build/webpack/alias/react-dom-server-experimental.js"),eX=a("./dist/compiled/react-dom-experimental/static.node.js");let eV={"&":"\\u0026",">":"\\u003e","<":"\\u003c","\u2028":"\\u2028","\u2029":"\\u2029"},eW=/[&><\u2028\u2029]/g,eG={"&":"&",'"':""","'":"'","<":"<",">":">"},eJ=/[&"'<>]/g;function eK(e){return e.replace(eW,e=>eV[e])}function eY(e){return e.replace(eJ,e=>eG[e])}var eQ=a("../../app-render/work-unit-async-storage.external"),eZ=a("./dist/esm/shared/lib/router/utils/app-paths.js");let e0=Symbol.for("next.server.manifests"),e1=globalThis;function e2(){let e=e1[e0];if(!e)throw Object.defineProperty(new eB.z("The manifests singleton was not initialized."),"__NEXT_ERROR_CODE",{value:"E950",enumerable:!1,configurable:!0});return e}function e4(){return e2().proxiedClientReferenceManifest}function e3(){return e2().serverActionsManifest}function e6(){return e2().serverModuleMap}let e8=new WeakMap,e9=new TextEncoder,e5;function e7(e,t,r,n){let i,o=e8.get(e);if(o)return o;let{moduleLoading:s,edgeSSRModuleMapping:l,ssrModuleMapping:u}=e4();if(e instanceof ReadableStream){if(t&&!(t instanceof ReadableStream))throw Object.defineProperty(new eB.z("Expected debug stream to be a ReadableStream"),"__NEXT_ERROR_CODE",{value:"E939",enumerable:!1,configurable:!0});let{createFromReadableStream:o}=a("./dist/compiled/react-server-dom-turbopack-experimental/client.node.js");i=o(e,{findSourceMapURL:e5,serverConsumerManifest:{moduleLoading:s,moduleMap:u,serverModuleMap:null},nonce:n,debugChannel:t?{readable:t}:void 0,endTime:r})}else{let{Readable:o}=a("node:stream");if(t&&!(t instanceof o))throw Object.defineProperty(new eB.z("Expected debug stream to be a Readable"),"__NEXT_ERROR_CODE",{value:"E940",enumerable:!1,configurable:!0});let{createFromNodeStream:l}=a("./dist/compiled/react-server-dom-turbopack-experimental/client.node.js");i=l(e,{moduleLoading:s,moduleMap:u,serverModuleMap:null},{findSourceMapURL:e5,nonce:n,debugChannel:t,endTime:r})}{let t=eQ.workUnitAsyncStorage.getStore();if(!t)throw Object.defineProperty(new eB.z("Expected workUnitAsyncStorage to have a store."),"__NEXT_ERROR_CODE",{value:"E696",enumerable:!1,configurable:!0});switch(t.type){case"prerender-client":case"validation-client":let r=new Promise(e=>{process.nextTick(()=>{e(i)})});return e8.set(e,r),r}}return e8.set(e,i),i}function te(e,t,r){let n;n="string"==typeof r?eK(JSON.stringify([1,r])):eK(JSON.stringify([3,"undefined"!=typeof Buffer?Buffer.from(r.buffer,r.byteOffset,r.byteLength).toString("base64"):btoa(String.fromCodePoint(...r))])),e.enqueue(e9.encode(`${t}self.__next_f.push(${n})`))}class tt{constructor(e){this._stream=e}tee(){if(null===this._stream)throw Object.defineProperty(Error("Cannot tee a ReactServerResult that has already been consumed"),"__NEXT_ERROR_CODE",{value:"E106",enumerable:!1,configurable:!0});let e=this._stream.tee();return this._stream=e[0],e[1]}consume(){if(null===this._stream)throw Object.defineProperty(Error("Cannot consume a ReactServerResult that has already been consumed"),"__NEXT_ERROR_CODE",{value:"E470",enumerable:!1,configurable:!0});let e=this._stream;return this._stream=null,e}}async function tr(e){let t=[],{prelude:r}=await e,n=r.getReader();for(;;){let{done:e,value:r}=await n.read();if(e)return new ta(t);t.push(r)}}async function tn(e){let t=[],r=e.getReader();for(;;){let{done:e,value:n}=await r.read();if(e)break;t.push(n)}return new ta(t)}class ta{assertChunks(e){if(null===this._chunks)throw Object.defineProperty(new eB.z(`Cannot \`${e}\` on a ReactServerPrerenderResult that has already been consumed.`),"__NEXT_ERROR_CODE",{value:"E593",enumerable:!1,configurable:!0});return this._chunks}consumeChunks(e){let t=this.assertChunks(e);return this.consume(),t}consume(){this._chunks=null}constructor(e){this._chunks=e}asUnclosingStream(){return ti(this.assertChunks("asUnclosingStream()"))}consumeAsUnclosingStream(){return ti(this.consumeChunks("consumeAsUnclosingStream()"))}asStream(){return to(this.assertChunks("asStream()"))}consumeAsStream(){return to(this.consumeChunks("consumeAsStream()"))}}function ti(e){let t=0;return new ReadableStream({async pull(r){t`:"`))}catch(t){e.error(t)}},async pull(e){try{let{done:t,value:r}=await a.read();if(r)try{let a=i.decode(r,{stream:!t});te(e,n,a)}catch{te(e,n,r)}t&&e.close()}catch(t){e.error(t)}}})}function tu(){return new ReadableStream}function tc(e){return t=>{t.forEach((t,r)=>{e(r,t)})}}async function td(e,t,r){return(0,eq.resume)(e,t,r)}function tf(e,t,r,n){return e.renderToReadableStream(t,r,n)}async function th(e){return er(e)}async function tp(e,t){let r=await function({ReactDOMServer:e,element:t,streamOptions:r}){return(0,j.getTracer)().trace($.Wc.renderToReadableStream,async()=>e.renderToReadableStream(t,r))}({ReactDOMServer:{renderToReadableStream:eq.renderToReadableStream},element:e,streamOptions:t});return{stream:r,allReady:r.allReady,abort:void 0}}async function tm(e,t,r){let n=await (0,eq.resume)(e,t,r);return{stream:n,allReady:n.allReady,abort:void 0}}function tg(e){return e.prerender}let ty=eX.prerender,tv=[z._A];function tb(e){return{trailingSlash:e.trailingSlash,isStaticMetadataRouteFile:!1}}var tw=a("./dist/esm/server/web/spec-extension/adapters/headers.js"),tS=a("./dist/esm/server/web/spec-extension/adapters/request-cookies.js"),t_=a("./dist/esm/server/api-utils/index.js");class tE{constructor(e,t,r,n){var a;const i=e&&(0,t_.checkIsOnDemandRevalidate)(t,e).isOnDemandRevalidate,o=null==(a=r.get(t_.COOKIE_NAME_PRERENDER_BYPASS))?void 0:a.value;this._isEnabled=!!(!i&&o&&e&&o===e.previewModeId),this._previewModeId=null==e?void 0:e.previewModeId,this._mutableCookies=n}get isEnabled(){return this._isEnabled}enable(){if(!this._previewModeId)throw Object.defineProperty(Error("Invariant: previewProps missing previewModeId this should never happen"),"__NEXT_ERROR_CODE",{value:"E93",enumerable:!1,configurable:!0});this._mutableCookies.set({name:t_.COOKIE_NAME_PRERENDER_BYPASS,value:this._previewModeId,httpOnly:!0,sameSite:"none",secure:!0,path:"/"}),this._isEnabled=!0}disable(){this._mutableCookies.set({name:t_.COOKIE_NAME_PRERENDER_BYPASS,value:"",httpOnly:!0,sameSite:"none",secure:!0,path:"/",expires:new Date(0)}),this._isEnabled=!1}}function tR(e,t){if("x-middleware-set-cookie"in e.headers&&"string"==typeof e.headers["x-middleware-set-cookie"]){let r=e.headers["x-middleware-set-cookie"],n=new Headers;for(let e of function(e){var t,r,n,a,i,o=[],s=0;function l(){for(;s=e.length)&&o.push(e.substring(t,e.length))}return o}(r))n.append("set-cookie",e);for(let e of new e$.VO(n).getAll())t.set(e)}}function tk(e,t,r,n,a,i,o,s,l,u,c){var d=e,f=t,h=r,p=n,m=a,g=i,y=u,v=o,b=s,w=l,S=c;function _(e){f&&f.setHeader("Set-Cookie",e)}let E={};return{type:"request",phase:"render",implicitTags:m,url:{pathname:h.pathname,search:h.search??""},rootParams:p,get headers(){return E.headers||(E.headers=function(e){let t=tw.o.from(e);for(let e of z.KD)t.delete(e);return tw.o.seal(t)}(d.headers)),E.headers},get cookies(){if(!E.cookies){let e=new e$.tm(tw.o.from(d.headers));tR(d,e),E.cookies=tS.Ck.seal(e)}return E.cookies},set cookies(value){E.cookies=value},get mutableCookies(){if(!E.mutableCookies){var R,k;let e,t=(R=d.headers,k=g||(f?_:void 0),e=new e$.tm(tw.o.from(R)),tS.K8.wrap(e,k));tR(d,t),E.mutableCookies=t}return E.mutableCookies},get userspaceMutableCookies(){return E.userspaceMutableCookies||(E.userspaceMutableCookies=(0,tS.EJ)(this)),E.userspaceMutableCookies},get draftMode(){return E.draftMode||(E.draftMode=new tE(v,d,this.cookies,this.mutableCookies)),E.draftMode},renderResumeDataCache:y??null,isHmrRefresh:b,serverComponentsHmrCache:w||globalThis.__serverComponentsHmrCache,fallbackParams:S}}var tx=a("./dist/esm/server/after/after-context.js");function tP(e){let t,r={then:(n,a)=>(t||(t=Promise.resolve(e())),t.then(e=>{r.value=e}).catch(()=>{}),t.then(n,a))};return r}var tC=a("./dist/esm/server/use-cache/handlers.js"),tT=a("./dist/esm/server/app-render/async-local-storage.js"),tA=a("./dist/esm/client/components/http-access-fallback/http-access-fallback.js"),tO=a("./dist/esm/client/components/redirect-error.js");function tj(e){return(0,tO.n)(e)?e.digest.split(";").slice(2,-2).join(";"):null}function t$(e){if(!(0,tO.n)(e))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return e.digest.split(";",2)[1]}function tI(e){if(!(0,tO.n)(e))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return Number(e.digest.split(";").at(-2))}async function tD(e,t,r){let n=new Set;for(let t of(e=>{let t=["/layout"];if(e.startsWith("/")){let r=e.split("/");for(let e=1;ea.getExpiration(e)));return t}(a)}}a("../../app-render/action-async-storage.external").actionAsyncStorage;class tN extends ez{constructor(e,t={},r){super(e,{contentType:z.al,metadata:t,waitUntil:r})}}var tM=a("./dist/compiled/string-hash/index.js"),tL=a.n(tM);let tU=["useDeferredValue","useEffect","useEffectEvent","useImperativeHandle","useInsertionEffect","useLayoutEffect","useReducer","useRef","useState","useSyncExternalStore","useTransition","experimental_useOptimistic","useOptimistic"];function tF(e,t){if(e.message=t,e.stack){let r=e.stack.split("\n");r[0]=t,e.stack=r.join("\n")}}function tH(e){let t=e.stack;return t?t.replace(/^[^\n]*\n/,""):""}function tB(e){if("string"==typeof(null==e?void 0:e.message)){if(e.message.includes("Class extends value undefined is not a constructor or null")){let t="This might be caused by a React Class Component being rendered in a Server Component, React Class Components only works in Client Components. Read more: https://nextjs.org/docs/messages/class-component-in-server-component";if(e.message.includes(t))return;tF(e,`${e.message} + +${t}`);return}if(e.message.includes("createContext is not a function"))return void tF(e,'createContext only works in Client Components. Add the "use client" directive at the top of the file to use it. Read more: https://nextjs.org/docs/messages/context-in-server-component');for(let t of tU)if(RegExp(`\\b${t}\\b.*is not a function`).test(e.message))return void tF(e,`${t} only works in Client Components. Add the "use client" directive at the top of the file to use it. Read more: https://nextjs.org/docs/messages/react-client-hook-in-server-component`)}}var tz=a("./dist/esm/shared/lib/lazy-dynamic/bailout-to-csr.js"),tq=a("./dist/esm/client/components/hooks-server-context.js"),tX=a("./dist/esm/client/components/is-next-router-error.js"),tV=a("./dist/esm/server/app-render/dynamic-rendering.js");function tW(e){return"object"==typeof e&&null!==e&&"name"in e&&"message"in e}function tG(e){let t;return tW(e)?e:Object.defineProperty(Error(!function(e){if("[object Object]"!==Object.prototype.toString.call(e))return!1;let t=Object.getPrototypeOf(e);return null===t||t.hasOwnProperty("isPrototypeOf")}(e)?e+"":(t=new WeakSet,JSON.stringify(e,(e,r)=>{if("object"==typeof r&&null!==r){if(t.has(r))return"[Circular]";t.add(r)}return r}))),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0})}let tJ=(e,t)=>"object"==typeof e&&null!==e&&"__NEXT_ERROR_CODE"in e?`${t}@${e.__NEXT_ERROR_CODE}`:t;function tK(e){return"object"==typeof e&&null!==e&&"message"in e&&"string"==typeof e.message&&e.message.startsWith("This rendered a large document (>")}var tY=a("./dist/esm/server/app-render/instant-validation/instant-validation-error.js");function tQ(e){if((0,tz.C)(e)||(0,tX.p)(e)||(0,tq.isDynamicServerError)(e)||(0,tV.AA)(e)||(0,tY.R)(e))return e.digest}function tZ(e,t,r,n,a){return i=>{var o;if("string"==typeof i)return tL()(i).toString();if(eF(i))return;let s=tQ(i);if(s)return s;if(tK(i))return void console.error(i);let l=tG(i),u=!1;if(l.digest?r.has(l.digest)&&(l=r.get(l.digest),u=!0):l.digest=tJ(l,tL()(l.message+(l.stack||"")).toString()),r.has(l.digest)||r.set(l.digest,l),e&&tB(l),!(t&&(null==l||null==(o=l.message)?void 0:o.includes("The specific message is omitted in production builds to avoid leaking sensitive details.")))){let e=a??(0,j.getTracer)().getActiveScopeSpan();e&&(e.recordException(l),e.setAttribute("error.type",l.name),e.setStatus({code:j.SpanStatusCode.ERROR,message:l.message})),n(l,u)}return l.digest}}function t0(e,t,r,n,a,i){return(o,s)=>{var l;if(tK(o))return void console.error(o);let u=!0;if(n.push(o),eF(o))return;let c=tQ(o);if(c)return c;let d=tG(o);if(d.digest?r.has(d.digest)&&(o=r.get(d.digest),u=!1):d.digest=tJ(d,tL()(d.message+((null==s?void 0:s.componentStack)||d.stack||"")).toString()),e&&tB(d),!(t&&(null==d||null==(l=d.message)?void 0:l.includes("The specific message is omitted in production builds to avoid leaking sensitive details.")))&&u){let e=i??(0,j.getTracer)().getActiveScopeSpan();e&&(e.recordException(d),e.setAttribute("error.type",d.name),e.setStatus({code:j.SpanStatusCode.ERROR,message:d.message})),a(d,s)}return d.digest}}let t1={catchall:"c","catchall-intercepted-(..)(..)":"ci(..)(..)","catchall-intercepted-(.)":"ci(.)","catchall-intercepted-(..)":"ci(..)","catchall-intercepted-(...)":"ci(...)","optional-catchall":"oc",dynamic:"d","dynamic-intercepted-(..)(..)":"di(..)(..)","dynamic-intercepted-(.)":"di(.)","dynamic-intercepted-(..)":"di(..)","dynamic-intercepted-(...)":"di(...)"};var t2=a("./dist/esm/shared/lib/router/utils/get-segment-param.js");let t4=/^'nonce-([A-Za-z0-9+/_-]+={0,2})'$/;var t3=a("./dist/compiled/superstruct/index.cjs"),t6=a.n(t3);let t8=t6().enums(["c","ci(..)(..)","ci(.)","ci(..)","ci(...)","oc","d","di(..)(..)","di(.)","di(..)","di(...)"]),t9=t6().union([t6().string(),t6().tuple([t6().string(),t6().string(),t8,t6().nullable(t6().array(t6().string()))])]),t5=t6().tuple([t9,t6().record(t6().string(),t6().lazy(()=>t5)),t6().optional(t6().nullable(t6().tuple([t6().string(),t6().string()]))),t6().optional(t6().nullable(t6().union([t6().literal("refetch"),t6().literal("inside-shared-layout"),t6().literal("metadata-only")]))),t6().optional(t6().number())]);var t7=((l={})[l.HasRuntimePrefetch=1]="HasRuntimePrefetch",l[l.SubtreeHasInstant=2]="SubtreeHasInstant",l[l.SegmentHasLoadingBoundary=4]="SegmentHasLoadingBoundary",l[l.SubtreeHasLoadingBoundary=8]="SubtreeHasLoadingBoundary",l[l.IsRootLayout=16]="IsRootLayout",l[l.ParentInlinedIntoSelf=32]="ParentInlinedIntoSelf",l[l.InlinedIntoChild=64]="InlinedIntoChild",l[l.HeadInlinedIntoSelf=128]="HeadInlinedIntoSelf",l[l.HeadOutlined=256]="HeadOutlined",l),re=a("./dist/esm/shared/lib/segment.js");async function rt(e,t,r,n,a){let[i,o,{layout:s,loading:l,page:u}]=e,c=r(e),d=c?c.treeSegment:i,f=[(0,re.HG)(d,n),{}],h=s?await s[0]():u?await u[0]():void 0,p=h?h.unstable_instant:void 0,m=0;null!==t&&(m|=t.hints),a||void 0===s||(a=!0,m|=t7.IsRootLayout),p&&"object"==typeof p&&(m|=t7.SubtreeHasInstant,"runtime"===p.prefetch&&(m|=t7.HasRuntimePrefetch)),l&&(m|=t7.SegmentHasLoadingBoundary);let g={};for(let e in o){var y;let i=(null==t||null==(y=t.slots)?void 0:y[e])??null,s=await rt(o[e],i,r,n,a);void 0!==s[4]&&(m|=s[4]&(t7.SubtreeHasInstant|t7.SubtreeHasLoadingBoundary),s[4]&(t7.SegmentHasLoadingBoundary|t7.SubtreeHasLoadingBoundary)&&(m|=t7.SubtreeHasLoadingBoundary)),g[e]=s}return f[1]=g,0!==m&&(f[4]=m),f}async function rr(e,t,r,n){return rt(e,t,r,n,!1)}async function rn(e,t,r){return rt(e,t,r,{},!1)}let ra=["accept-encoding","keepalive","keep-alive","content-encoding","transfer-encoding","connection","expect","content-length","set-cookie"];function ri(e){let t,r;e.headers instanceof Headers?(t=e.headers.get(z.ts)??null,r=e.headers.get("content-type")):(t=e.headers[z.ts]??null,r=e.headers["content-type"]??null);let n="POST"===e.method&&"application/x-www-form-urlencoded"===r,a=!!("POST"===e.method&&(null==r?void 0:r.startsWith("multipart/form-data"))),i=void 0!==t&&"string"==typeof t&&"POST"===e.method;return{actionId:t,isURLEncodedAction:n,isMultipartAction:a,isFetchAction:i,isPossibleServerAction:!!(i||n||a)}}let{env:ro,stdout:rs}=(null==(b=globalThis)?void 0:b.process)??{},rl=ro&&!ro.NO_COLOR&&(ro.FORCE_COLOR||(null==rs?void 0:rs.isTTY)&&!ro.CI&&"dumb"!==ro.TERM),ru=(e,t,r,n)=>{let a=e.substring(0,n)+r,i=e.substring(n+t.length),o=i.indexOf(t);return~o?a+ru(i,t,r,o):a+i},rc=(e,t,r=e)=>rl?n=>{let a=""+n,i=a.indexOf(t,e.length);return~i?e+ru(a,t,r,i)+t:e+a+t}:String,rd=rc("\x1b[1m","\x1b[22m","\x1b[22m\x1b[1m");rc("\x1b[2m","\x1b[22m","\x1b[22m\x1b[2m"),rc("\x1b[3m","\x1b[23m"),rc("\x1b[4m","\x1b[24m"),rc("\x1b[7m","\x1b[27m"),rc("\x1b[8m","\x1b[28m"),rc("\x1b[9m","\x1b[29m"),rc("\x1b[30m","\x1b[39m");let rf=rc("\x1b[31m","\x1b[39m"),rh=rc("\x1b[32m","\x1b[39m"),rp=rc("\x1b[33m","\x1b[39m");rc("\x1b[34m","\x1b[39m");let rm=rc("\x1b[35m","\x1b[39m");rc("\x1b[38;2;173;127;168m","\x1b[39m"),rc("\x1b[36m","\x1b[39m");let rg=rc("\x1b[37m","\x1b[39m");rc("\x1b[90m","\x1b[39m"),rc("\x1b[40m","\x1b[49m"),rc("\x1b[41m","\x1b[49m"),rc("\x1b[42m","\x1b[49m"),rc("\x1b[43m","\x1b[49m"),rc("\x1b[44m","\x1b[49m"),rc("\x1b[45m","\x1b[49m"),rc("\x1b[46m","\x1b[49m"),rc("\x1b[47m","\x1b[49m");var ry=a("./dist/esm/server/lib/lru-cache.js");let rv={wait:rg(rd("○")),error:rf(rd("⨯")),warn:rp(rd("⚠")),ready:"▲",info:rg(rd(" ")),event:rh(rd("✓")),trace:rm(rd("\xbb"))},rb={log:"log",warn:"warn",error:"error"};function rw(e,...t){(""===t[0]||void 0===t[0])&&1===t.length&&t.shift();let r=e in rb?rb[e]:"log",n=rv[e];0===t.length?console[r](""):1===t.length&&"string"==typeof t[0]?console[r](n+" "+t[0]):console[r](n,...t)}function rS(...e){rw("error",...e)}function r_(...e){rw("warn",...e)}let rE=new ry.q(1e4,e=>e.length);function rR(e){let t=parseInt(e.slice(0,2),16),r=t>>1&63,n=Array(6);for(let e=0;e<6;e++){let t=r>>5-e&1;n[e]=1===t}return{type:1==(t>>7&1)?"use-cache":"server-action",usedArgs:n,hasRestArgs:1==(1&t)}}new ry.q(1e4,e=>e.length);var rk=a("./dist/esm/client/components/redirect-status-code.js"),rx=a("./dist/esm/server/revalidation-utils.js");async function rP(e){var t,r,n;let a;return"function"==typeof globalThis.crypto?.subtle?.digest?G(e[z._V],e[z.qm],e[z.B],e[z.kO]):(t=e[z._V],r=e[z.qm],n=e[z.B],null===(a=V(t,r,n,e[z.kO]))?"":(function(e){let t=5381;for(let r=0;r>>0})(a).toString(36).slice(0,5))}let rC=async(e,t)=>{rT(e,await rP(t))},rT=(e,t)=>{let r=e.search,n=(r.startsWith("?")?r.slice(1):r).split("&").filter(e=>e&&!e.startsWith(`${z._A}=`));t.length>0?n.push(`${z._A}=${t}`):n.push(`${z._A}`),e.search=n.length?`?${n.join("&")}`:""};var rA=a("./dist/esm/shared/lib/action-revalidation-kind.js");function rO(e){let t={};for(let[r,n]of Object.entries(e))void 0!==n&&(t[r]=Array.isArray(n)?n.join(", "):`${n}`);return t}function rj(e,t){let r=e.headers,n=new e$.tm(tw.o.from(r)),a=t.getHeaders(),i=new e$.VO(function(e){let t=new Headers;for(let[r,n]of Object.entries(e))for(let e of Array.isArray(n)?n:[n])void 0!==e&&("number"==typeof e&&(e=e.toString()),t.append(r,e));return t}(a)),o=((e,t)=>{for(let[r,n]of(e["content-length"]&&"0"===e["content-length"]&&delete e["content-length"],Object.entries(e)))(t.includes(r)||!(Array.isArray(n)||"string"==typeof n))&&delete e[r];return e})({...rO(r),...rO(a)},ra);return i.getAll().forEach(e=>{void 0===e.value?n.delete(e.name):n.set(e)}),o.cookie=n.toString(),delete o["transfer-encoding"],new Headers(o)}async function r$(e,t,r,n,a){var i,o,s;if(!r)throw Object.defineProperty(Error("Invariant: Missing `host` header from a forwarded Server Actions request."),"__NEXT_ERROR_CODE",{value:"E226",enumerable:!1,configurable:!0});let l=rj(e,t);l.set("x-action-forwarded","1");let u=(null==(i=P(e,"initProtocol"))?void 0:i.replace(/:+$/,""))||"https",c=process.env.__NEXT_PRIVATE_ORIGIN||`${u}://${r.value}`,d=new URL(`${c}${a}${n}`);try{let r;r=e.stream();let n=await fetch(d,{method:"POST",body:r,duplex:"half",headers:l,redirect:"manual",next:{internal:1}});if(null==(o=n.headers.get("content-type"))?void 0:o.startsWith(z.al)){for(let[e,r]of n.headers)ra.includes(e)||t.setHeader(e,r);return new tN(n.body)}null==(s=n.body)||s.cancel()}catch(e){console.error("failed to forward action response",e)}return ez.fromStatic("{}",ey.U2)}async function rI(e,t,r,n,a,i,o,s){t.setHeader("x-action-redirect",`${n};${a}`);let l=function(e,t,r,n){if(r.startsWith("/"))return new URL(`${e}${r}`,"http://n");if(r.startsWith(".")){let t=n||"/";t.endsWith("/")||(t+="/");let a=new URL(r,`http://n${t}`);return new URL(`${e}${a.pathname}${a.search}${a.hash}`,"http://n")}let a=new URL(r);return(null==t?void 0:t.value)!==a.host?null:a.pathname.startsWith(e)?a:null}(i,r,n,s);if(l){var u,c,d,f,h,p;if(!r)throw Object.defineProperty(Error("Invariant: Missing `host` header from a forwarded Server Actions request."),"__NEXT_ERROR_CODE",{value:"E226",enumerable:!1,configurable:!0});let n=rj(e,t);n.set(z.hY,"1");let a=(null==(u=P(e,"initProtocol"))?void 0:u.replace(/:+$/,""))||"https",i=process.env.__NEXT_PRIVATE_ORIGIN||`${a}://${r.value}`,s=new URL(`${i}${l.pathname}${l.search}`);o.pendingRevalidatedTags&&(n.set(ey.vS,o.pendingRevalidatedTags.map(e=>e.tag).join(",")),n.set(ey.c1,(null==(f=o.incrementalCache)||null==(d=f.prerenderManifest)||null==(c=d.preview)?void 0:c.previewModeId)||"")),n.delete(z.B),n.delete(z.ts);try{let e=await G(n.get(z._V)?"1":void 0,n.get(z.qm)??void 0,n.get(z.B)??void 0,n.get(z.kO)??void 0);rT(s,e);let r=await fetch(s,{method:"GET",headers:n,next:{internal:1}});if(null==(h=r.headers.get("content-type"))?void 0:h.startsWith(z.al)){for(let[e,n]of r.headers)ra.includes(e)||t.setHeader(e,n);return new tN(r.body)}null==(p=r.body)||p.cancel()}catch(e){console.error("failed to get redirect response",e)}}return ez.EMPTY}function rD(e){return e.length>100?e.slice(0,100)+"...":e}async function rN({req:e,res:t,ComponentMod:r,generateFlight:n,workStore:i,requestStore:o,serverActions:s,ctx:l,metadata:u}){var c,d,f;let h,p,m,g,y,v,b=e.headers["content-type"],{page:w}=l.renderOpts,S=e6(),{actionId:_,isMultipartAction:E,isFetchAction:R,isURLEncodedAction:k,isPossibleServerAction:x}=ri(e),C=e=>(console.warn(e),t.setHeader(z.Ic,"1"),t.setHeader("content-type","text/plain"),t.statusCode=404,{type:"done",result:ez.fromStatic("Server action not found.","text/plain")});if(!x)return null;if(k)if(R)return{type:"not-found"};else return null;if(!(Object.keys((p=e3()).node).length>0)&&!(Object.keys(p.edge).length>0))return C(rU(_));if(i.isStaticGeneration)throw Object.defineProperty(Error("Invariant: server actions can't be handled during static rendering"),"__NEXT_ERROR_CODE",{value:"E359",enumerable:!1,configurable:!0});i.fetchCache="default-no-store";let T=e.headers.origin,A="string"==typeof T?"null"===T?"null":new URL(T).host:void 0,O=(g=(m=(c=e.headers)["x-forwarded-host"])&&Array.isArray(m)?m[0]:null==m||null==(f=m.split(","))||null==(d=f[0])?void 0:d.trim(),y=c.host,g?{type:"x-forwarded-host",value:g}:y?{type:"host",value:y}:void 0);if(A){if(!O||A!==O.value)if(((e,t=[])=>{let r=e.replace(/[A-Z]/g,e=>e.toLowerCase());return t.some(t=>!!t&&(t.replace(/[A-Z]/g,e=>e.toLowerCase())===r||function(e,t){let r=e.replace(/[A-Z]/g,e=>e.toLowerCase()),n=t.replace(/[A-Z]/g,e=>e.toLowerCase()),a=r.split("."),i=n.split(".");if(i.length<1||a.length0)return!1;return void 0!==t;default:if(t!==e)return!1}}return 0===a.length}(e,t)))})(A,null==s?void 0:s.allowedOrigins));else{O?console.error(`\`${O.type}\` header with value \`${rD(O.value)}\` does not match \`origin\` header with value \`${rD(A)}\` from a forwarded Server Actions request. Aborting the action.`):console.error("`x-forwarded-host` or `host` headers are not provided. One of these is needed to compare the `origin` header from a forwarded Server Actions request. Aborting the action.");let r=Object.defineProperty(Error("Invalid Server Actions request."),"__NEXT_ERROR_CODE",{value:"E80",enumerable:!1,configurable:!0});if(R){t.statusCode=500,u.statusCode=500;let a=Promise.reject(r);try{await a}catch{}return{type:"done",result:await n(e,l,o,{actionResult:a,skipPageRendering:!0,temporaryReferences:h})}}throw r}}else v="Missing `origin` header from a forwarded Server Actions request.";t.setHeader("Cache-Control","no-cache, no-store, max-age=0, must-revalidate");let{actionAsyncStorage:j}=r,$=!!e.headers["x-action-forwarded"];if(_){let r=function(e,t){var r,n;let a=null==(r=e3().node[e])?void 0:r.workers;if(a&&!a[eR(t,"app")?t:"app"+t])return n=Object.keys(a)[0],(0,eZ.Yr)(eC(n,"app"))}(_,w);if(r)return{type:"done",result:await r$(e,t,O,r,l.renderOpts.basePath)}}try{return await j.run({isAction:!0},async()=>{let u,c=[];{let{createTemporaryReferenceSet:t,decodeReply:r,decodeReplyFromBusboy:n,decodeAction:l,decodeFormState:d}=a("(react-server)/./dist/esm/server/app-render/react-server.node.js");h=t();let{PassThrough:f,Readable:p,Transform:m}=a("node:stream"),{pipeline:g}=a("node:stream/promises"),y=P(e,"actionBody"),w=y?p.from(y):e.body,k="1 MB",x=(null==s?void 0:s.bodySizeLimit)??k,T=x!==k?a("./dist/compiled/bytes/index.js").parse(x):1048576,A=0,O=new m({transform(e,t,r){if((A+=Buffer.byteLength(e,t))>T){let{ApiError:e}=a("./dist/esm/server/api-utils/index.js");r(Object.defineProperty(new e(413,`Body exceeded ${x} limit. +To configure the body size limit for Server Actions, see: https://nextjs.org/docs/app/api-reference/next-config-js/serverActions#bodysizelimit`),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0}));return}r(null,e)}});if(E)if(R){try{u=rL(_,S)}catch(e){return C(e)}let t=a("./dist/compiled/busboy/index.js")({defParamCharset:"utf8",headers:e.headers,limits:{fieldSize:T}}),r=new AbortController;try{[,c]=await Promise.all([g(w,O,t,{signal:r.signal}),n(t,S,{temporaryReferences:h})])}catch(e){throw r.abort(),e}}else{let e,t=new f,r=new Request("http://localhost",{method:"POST",headers:{"Content-Type":b},body:p.toWeb(t),duplex:"half"}),n=new AbortController;try{[,e]=await Promise.all([g(w,O,t,{signal:n.signal}),r.formData()])}catch(e){throw n.abort(),e}if(!1===function(e,t){let r=!1;for(let i of e.keys())if(i.startsWith(rF)){if(i.startsWith(rB)){var n,a;if(n=i,a=t,n.length!==rB.length+42||null==a[n.slice(rB.length)])return!1;r=!0}else if(i.startsWith(rH)){let n=rF+i.slice(rH.length)+":0",a=e.getAll(n);if(1!==a.length)return!1;let o=a[0];if("string"!=typeof o||function(e,t){if(!1===e.startsWith(rz))return!0;let r=rz.length,n=r+42,a=e.slice(r,n);return 42!==a.length||'"'!==e[n]||null==t[a]}(o,t))return!1;r=!0}}return r}(e,S))throw Object.defineProperty(Error(`Failed to find Server Action. This request might be from an older or newer deployment. +Read more: https://nextjs.org/docs/messages/failed-to-find-server-action`),"__NEXT_ERROR_CODE",{value:"E975",enumerable:!1,configurable:!0});let a=await l(e,S);if("function"!=typeof a)return null;{v&&r_(v);let{actionResult:t}=await rM(a,[],i,o,$),r=await d(t,e,S);return{type:"done",result:void 0,formState:r}}}else{if(!R)return null;try{u=rL(_,S)}catch(e){return C(e)}let e=new f,t=[];await Promise.all([g(w,O,e),(async()=>{for await(let r of e)t.push(Buffer.from(r))})()]);let n=Buffer.concat(t).toString("utf-8");c=await r(n,S,{temporaryReferences:h})}}let d=(await r.__next_app__.require(u))[_],{type:f}=rR(_),{actionResult:p,skipPageRendering:m}=(performance.now(),await rM(d,c,i,o,$).finally(()=>{!function(e,{workStore:t,requestStore:r}){var n;let a=+(null!=(n=t.pendingRevalidatedTags)&&!!n.some(e=>void 0===e.profile)),i=+!!(0,tS.YX)(r.mutableCookies).length;a||i?e.setHeader(z.ZL,JSON.stringify(rA.Du)):void 0!==t.pathWasRevalidated&&t.pathWasRevalidated!==rA.e9&&e.setHeader(z.ZL,JSON.stringify(t.pathWasRevalidated))}(t,{workStore:i,requestStore:o})}));if(!R)return null;{let t=!!m&&(0,rx.C)(i);return{type:"done",result:await n(e,l,o,{actionResult:Promise.resolve(p),skipPageRendering:m,temporaryReferences:h,waitUntil:!1===t?void 0:t})}}})}catch(r){if((0,tO.n)(r)){let n=tj(r),a=t$(r);if(t.statusCode=rk.Q.SeeOther,u.statusCode=rk.Q.SeeOther,R)return{type:"done",result:await rI(e,t,O,n,a,l.renderOpts.basePath,i,o.url.pathname)};return t.setHeader("Location",n),{type:"done",result:ez.EMPTY}}if((0,tA.RM)(r)){if(t.statusCode=(0,tA.jT)(r),u.statusCode=t.statusCode,R){let t=Promise.reject(r);try{await t}catch{}return{type:"done",result:await n(e,l,o,{skipPageRendering:!1,actionResult:t,temporaryReferences:h})}}return{type:"not-found"}}if(R){t.statusCode=500,u.statusCode=500;let a=Promise.reject(r);try{await a}catch{}return{type:"done",result:await n(e,l,o,{actionResult:a,skipPageRendering:void 0===i.pathWasRevalidated||i.pathWasRevalidated===rA.e9||$,temporaryReferences:h})}}throw r}}async function rM(e,t,r,n,a){n.phase="action";let i=a;if(t.length>1e3)throw Object.defineProperty(Error(`Server Action arguments list is too long (${t.length}). Maximum allowed is 1000.`),"__NEXT_ERROR_CODE",{value:"E986",enumerable:!1,configurable:!0});try{let a=await eQ.workUnitAsyncStorage.run(n,()=>e.apply(null,t));return i||=void 0===r.pathWasRevalidated||r.pathWasRevalidated===rA.e9,{actionResult:a,skipPageRendering:i}}finally{!i&&(n.phase="render",n.cookies=tS.Ck.seal((0,tS.m0)(n.mutableCookies)),r.isDraftMode=n.draftMode.isEnabled,await (0,rx.C)(r))}}function rL(e,t){var r;if(!e)throw Object.defineProperty(new eB.z("Missing 'next-action' header."),"__NEXT_ERROR_CODE",{value:"E664",enumerable:!1,configurable:!0});let n=null==(r=t[e])?void 0:r.id;if(!n)throw rU(e);return n}function rU(e){return Object.defineProperty(Error(`Failed to find Server Action${e?` "${e}"`:""}. This request might be from an older or newer deployment. +Read more: https://nextjs.org/docs/messages/failed-to-find-server-action`),"__NEXT_ERROR_CODE",{value:"E974",enumerable:!1,configurable:!0})}let rF="$ACTION_",rH="$ACTION_REF_",rB="$ACTION_ID_",rz='{"id":"',rq=O.createContext(null);function rX(e){let t=(0,O.useContext)(rq);t&&t(e)}function rV(){let e=[],t=t=>{e.push(t)};return{ServerInsertedHTMLProvider:({children:e})=>(0,T.jsx)(rq.Provider,{value:t,children:e}),renderServerInsertedHTML:()=>e.map((e,t)=>(0,T.jsx)(O.Fragment,{children:e()},"__next_server_inserted__"+t))}}function rW(e){return e.split("/").map(e=>encodeURIComponent(e)).join("/")}var rG=a("./dist/compiled/react-dom-experimental/index.js");function rJ(e,t,r,n,a,i,o){var s;let l,u=[],c={src:"",crossOrigin:r},d=((null==(s=e.rootMainFilesTree)?void 0:s[o])||e.rootMainFiles).map(rW);if(0===d.length)throw Object.defineProperty(Error("Invariant: missing bootstrap script. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E459",enumerable:!1,configurable:!0});if(n){c.src=`${t}/_next/`+d[0]+a,c.integrity=n[d[0]];for(let e=1;e{for(let e=0;e{for(let e=0;e(0,T.jsx)("script",{...e},e.src)),s=(n||[]).map(({key:e,value:t},r)=>(0,T.jsx)("meta",{name:e,content:t},`next-trace-data-${r}`));return async function(){let e=[];for(;i"string"==typeof e?"string"==typeof t&&e===t:"string"!=typeof t&&e[0]===t[0]&&e[1]===t[1];function rQ(e,t,r,n){let a=e.replace(/\.[^.]+$/,""),i=new Set,o=new Set,{entryCSSFiles:s,entryJSFiles:l}=e4(),u=s[a],c=null==l?void 0:l[a];if(u)for(let e of u)t.has(e.path)||(n&&t.add(e.path),i.add(e));if(c)for(let e of c)r.has(e)||(n&&r.add(e),o.add(e));return{styles:[...i],scripts:[...o]}}function rZ(e,t,r){if(!e||!t)return null;let n=t.replace(/\.[^.]+$/,""),a=new Set,i=!1,o=e.app[n];if(o)for(let e of(i=!0,o))r.has(e)||(a.add(e),r.add(e));return a.size?[...a].sort():i&&0===r.size?[]:null}function r0(e){let[,t,{loading:r}]=e;return!!r||Object.values(t).some(e=>r0(e))}function r1(e){if(e.$$typeof!==Symbol.for("react.server.reference"))return!1;let{type:t}=rR(e.$$id);return"use-cache"===t}async function r2(e){let t,r,n,{layout:a,page:i,defaultPage:o}=e[2],s=void 0!==a,l=void 0!==i,u=void 0!==o&&e[0]===re.WO;return s?(t=await a[0](),r="layout",n=a[1]):l?(t=await i[0](),r="page",n=i[1]):u&&(t=await o[0](),r="page",n=o[1]),{mod:t,modType:r,filePath:n}}function r4(e){return e.default||e}function r3(e){let[t,r,n,a]=e,{layout:i,template:o}=n,{page:s}=n;s=t===re.WO?n.defaultPage:s;let l=i?.[1]||o?.[1]||s?.[1];return{page:s,segment:t,modules:n,conventionPath:l,parallelRoutes:r,staticSiblings:a}}function r6(e,t){let r="";return e.sharedContext.clientAssetToken&&(r+=`?dpl=${e.sharedContext.clientAssetToken}`),r}function r8(e,t,r){let{componentMod:{createElement:n}}=t;return e.map((e,a)=>{let i="next",o=`${t.assetPrefix}/_next/${rW(e.path)}${r6(t,!0)}`;return e.inlined&&!t.parsedRequestHeaders.isRSCRequest?n("style",{key:a,nonce:t.nonce,precedence:i,href:o},e.content):(null==r||r.push(()=>{t.componentMod.preloadStyle(o,t.renderOpts.crossOrigin,t.nonce)}),n("link",{key:a,rel:"stylesheet",href:o,precedence:i,crossOrigin:t.renderOpts.crossOrigin,nonce:t.nonce}))})}async function r9({filePath:e,getComponent:t,injectedCSS:r,injectedJS:n,ctx:a}){let{componentMod:{createElement:i}}=a,{styles:o,scripts:s}=rQ(e,r,n),l=r8(o,a),u=s?s.map((e,t)=>i("script",{src:`${a.assetPrefix}/_next/${rW(e)}${r6(a,!0)}`,async:!0,key:`script-${t}`})):null;return[r4(await t()),l,u]}a("./dist/esm/server/dynamic-rendering-utils.js");let r5=()=>{};globalThis.FinalizationRegistry&&new FinalizationRegistry(e=>{let t=e.deref();t&&!t.locked&&t.cancel("Response object has been garbage collected").then(r5)});class r7{constructor(e,t=e=>e()){this.cacheKeyFn=e,this.schedulerFn=t,this.pending=new Map}static create(e){return new r7(null==e?void 0:e.cacheKeyFn,null==e?void 0:e.schedulerFn)}async batch(e,t){let r=this.cacheKeyFn?await this.cacheKeyFn(e):e;if(null===r)return t({resolve:e=>Promise.resolve(e),key:e});let n=this.pending.get(r);if(n)return n;let{promise:a,resolve:i,reject:o}=new I;return this.pending.set(r,a),this.schedulerFn(async()=>{try{let r=await t({resolve:i,key:e});i(r)}catch(e){o(e)}finally{this.pending.delete(r)}}),a}}var ne=((u={}).APP_PAGE="APP_PAGE",u.APP_ROUTE="APP_ROUTE",u.PAGES="PAGES",u.FETCH="FETCH",u.REDIRECT="REDIRECT",u.IMAGE="IMAGE",u),nt=((c={}).APP_PAGE="APP_PAGE",c.APP_ROUTE="APP_ROUTE",c.PAGES="PAGES",c.FETCH="FETCH",c.IMAGE="IMAGE",c),nr=((d={}).PAGES="PAGES",d.PAGES_API="PAGES_API",d.APP_PAGE="APP_PAGE",d.APP_ROUTE="APP_ROUTE",d.IMAGE="IMAGE",d);async function nn(e){var t,r;return{...e,value:(null==(t=e.value)?void 0:t.kind)===ne.PAGES?{kind:ne.PAGES,html:await e.value.html.toUnchunkedString(!0),pageData:e.value.pageData,headers:e.value.headers,status:e.value.status}:(null==(r=e.value)?void 0:r.kind)===ne.APP_PAGE?{kind:ne.APP_PAGE,html:await e.value.html.toUnchunkedString(!0),postponed:e.value.postponed,rscData:e.value.rscData,headers:e.value.headers,status:e.value.status,segmentData:e.value.segmentData}:e.value}}async function na(e){var t,r;return e?{isMiss:e.isMiss,isStale:e.isStale,cacheControl:e.cacheControl,isFallback:e.isFallback,value:(null==(t=e.value)?void 0:t.kind)===ne.PAGES?{kind:ne.PAGES,html:ez.fromStatic(e.value.html,ey.j9),pageData:e.value.pageData,headers:e.value.headers,status:e.value.status}:(null==(r=e.value)?void 0:r.kind)===ne.APP_PAGE?{kind:ne.APP_PAGE,html:ez.fromStatic(e.value.html,ey.j9),rscData:e.value.rscData,headers:e.value.headers,status:e.value.status,postponed:e.value.postponed,segmentData:e.value.segmentData}:e.value}:null}function ni(e,t){if(!e)return t;let r=parseInt(e,10);return Number.isFinite(r)&&r>0?r:t}let no=ni(process.env.NEXT_PRIVATE_RESPONSE_CACHE_TTL,1e4),ns=ni(process.env.NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE,150),nl="__ttl_sentinel__";function nu(e,t){return`${e}\0${t??nl}`}class nc{constructor(e,t=ns,r=no){this.getBatcher=r7.create({cacheKeyFn:({key:e,isOnDemandRevalidate:t})=>`${e}-${t?"1":"0"}`,schedulerFn:D}),this.revalidateBatcher=r7.create({schedulerFn:D}),this.evictedInvocationIDs=new Set,this.minimal_mode=e,this.maxSize=t,this.ttl=r,this.cache=new ry.q(t,void 0,e=>{let t=function(e){let t=e.lastIndexOf("\0");if(-1===t)return;let r=e.slice(t+1);return r===nl?void 0:r}(e);if(t){if(this.evictedInvocationIDs.size>=100){let e=this.evictedInvocationIDs.values().next().value;e&&this.evictedInvocationIDs.delete(e)}this.evictedInvocationIDs.add(t)}})}async get(e,t,r){if(!e)return t({hasResolved:!1,previousCacheEntry:null});if(this.minimal_mode){let t=nu(e,r.invocationID),n=this.cache.get(t);if(n){if(void 0!==r.invocationID)return na(n.entry);let e=Date.now();if(n.expiresAt>e)return na(n.entry);this.cache.remove(t)}r.invocationID&&this.evictedInvocationIDs.has(r.invocationID)&&function(...e){let t=e.join(" ");rE.has(t)||(rE.set(t,t),r_(...e))}(`Response cache entry was evicted for invocation ${r.invocationID}. Consider increasing NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE (current: ${this.maxSize}).`)}let{incrementalCache:n,isOnDemandRevalidate:a=!1,isFallback:i=!1,isRoutePPREnabled:o=!1,isPrefetch:s=!1,waitUntil:l,routeKind:u,invocationID:c}=r,d=await this.getBatcher.batch({key:e,isOnDemandRevalidate:a},({resolve:r})=>{let d=this.handleGet(e,t,{incrementalCache:n,isOnDemandRevalidate:a,isFallback:i,isRoutePPREnabled:o,isPrefetch:s,routeKind:u,invocationID:c},r);return l&&l(d),d});return na(d)}async handleGet(e,t,r,n){let a=null,i=!1;try{if((a=this.minimal_mode?null:await r.incrementalCache.get(e,{kind:function(e){switch(e){case nr.PAGES:return nt.PAGES;case nr.APP_PAGE:return nt.APP_PAGE;case nr.IMAGE:return nt.IMAGE;case nr.APP_ROUTE:return nt.APP_ROUTE;case nr.PAGES_API:throw Object.defineProperty(Error(`Unexpected route kind ${e}`),"__NEXT_ERROR_CODE",{value:"E64",enumerable:!1,configurable:!0});default:return e}}(r.routeKind),isRoutePPREnabled:r.isRoutePPREnabled,isFallback:r.isFallback}))&&!r.isOnDemandRevalidate&&(n(a),i=!0,!a.isStale||r.isPrefetch))return a;let o=await this.revalidate(e,r.incrementalCache,r.isRoutePPREnabled,r.isFallback,t,a,null!==a&&!r.isOnDemandRevalidate,void 0,r.invocationID);if(!o){if(this.minimal_mode){let t=nu(e,r.invocationID);this.cache.remove(t)}return null}return r.isOnDemandRevalidate,o}catch(e){if(i)return console.error(e),null;throw e}}async revalidate(e,t,r,n,a,i,o,s,l){return this.revalidateBatcher.batch(e,()=>{let u=this.handleRevalidate(e,t,r,n,a,i,o,l);return s&&s(u),u})}async handleRevalidate(e,t,r,n,a,i,o,s){try{let l=await a({hasResolved:o,previousCacheEntry:i,isRevalidating:!0});if(!l)return null;let u=await nn({...l,isMiss:!i});if(u.cacheControl)if(this.minimal_mode){let t=nu(e,s);this.cache.set(t,{entry:u,expiresAt:Date.now()+this.ttl})}else await t.set(e,u.value,{cacheControl:u.cacheControl,isRoutePPREnabled:r,isFallback:n});return u}catch(a){if(null==i?void 0:i.cacheControl){let a=Math.min(Math.max(i.cacheControl.revalidate||3,3),30),o=void 0===i.cacheControl.expire?void 0:Math.max(a+3,i.cacheControl.expire);await t.set(e,i.value,{cacheControl:{revalidate:a,expire:o},isRoutePPREnabled:r,isFallback:n})}throw a}}}var nd=a("./dist/esm/server/app-render/staged-rendering.js");Symbol.for("next-patch"),tA.s8;var nf=a("./dist/esm/client/components/static-generation-bailout.js");function nh(){let e={varyParams:new Set,status:"pending",value:new Set,then(t){t&&("pending"===e.status?e.resolvers.push(t):t(e.value))},resolvers:[]};return e}let np=new Set,nm={varyParams:np,status:"fulfilled",value:np,then(e){e&&e(np)},resolvers:[]};function ng(){let e=nh();return{head:e,rootParams:nh(),segments:new Set}}function ny(){let e=function(){let e=eQ.workUnitAsyncStorage.getStore();if(e)switch(e.type){case"prerender":case"prerender-runtime":{let t=e.varyParamsAccumulator;if(null!==t)return t.head}}return null}();return null!==e?e:null}async function nv(e){let t=e.rootParams.varyParams;for(let r of(nb(e.head,t),e.segments))nb(r,t);await Promise.resolve(),await Promise.resolve(),await Promise.resolve()}function nb(e,t){if("pending"!==e.status)return;let r=new Set(e.varyParams);for(let e of t)r.add(e);for(let t of(e.value=r,e.status="fulfilled",e.resolvers))t(r);e.resolvers=[]}let nw=/^(.*[\\/])?next[\\/]dist[\\/]client[\\/]components[\\/]builtin[\\/]/;function nS(e,t,r){let n=e[2],a=n[r]?n[r][1]:void 0;if(a){let e;return e=(function(e,t){let r=process.cwd(),n=e.replace(r,"").replace(/^[\\/]/,""),a=(t||"").replace(/^\[project\][\\/]?/,"").replace(e,"").replace(r,"").replace(/\\/g,"/").replace(/^\//,"");if(n&&a.startsWith(n)&&(a=a.slice(n.length).replace(/^\//,"")),a.includes("/")){let t=e.split(/[\\/]/).pop()||"";if(t){let e=t+"/",r=a.indexOf(e);r>=0&&(a=a.slice(r+e.length))}}return a})(t,a).replace(/^(src\/)?app\//,""),nw.test(e)&&(e=e.replace(nw,""),e=`__next_builtin__${e}`),e}}function n_(e){return(0,j.getTracer)().trace($.Fx.createComponentTree,{spanName:"build component tree"},()=>nR(e,!0))}function nE(e,t){throw Object.defineProperty(Error(`The default export is not a React Component in "${"/"===e?"":e}/${t}"`),"__NEXT_ERROR_CODE",{value:"E45",enumerable:!1,configurable:!0})}async function nR({loaderTree:e,parentParams:t,parentOptionalCatchAllParamName:r,parentRuntimePrefetchable:n,rootLayoutIncluded:i,injectedCSS:o,injectedJS:s,injectedFontPreloadTags:l,ctx:u,missingSlots:c,preloadCallbacks:d,authInterrupts:f,MetadataOutlet:h,prerenderHTTPError:p},m){let g,{renderOpts:{nextConfigOutput:y,experimental:v,cacheComponents:b},workStore:w,componentMod:{createElement:S,Fragment:_,SegmentViewNode:E,HTTPAccessFallbackBoundary:R,LayoutRouter:k,RenderFromTemplateContext:x,ClientPageRoot:P,ClientSegmentRoot:C,createServerSearchParamsForServerPage:T,createPrerenderSearchParamsForClientPage:A,createServerParamsForServerSegment:O,createPrerenderParamsForClientSegment:I,serverHooks:{DynamicServerError:D},Postpone:N},pagePath:M,getDynamicParamFromSegment:L,isPrefetch:U,query:F}=u,{page:H,conventionPath:B,segment:z,modules:q,parallelRoutes:X}=r3(e),{layout:V,template:W,error:G,loading:J,"not-found":K,forbidden:Y,unauthorized:Q}=q,Z=new Set(o),ee=new Set(s),et=new Set(l),er=function({ctx:e,layoutOrPagePath:t,injectedCSS:r,injectedJS:n,injectedFontPreloadTags:a,preloadCallbacks:i}){let{componentMod:{createElement:o}}=e,{styles:s,scripts:l}=t?rQ(t,r,n,!0):{styles:[],scripts:[]},u=t?rZ(e.renderOpts.nextFontManifest,t,a):null;if(u)if(u.length)for(let t=0;t{e.componentMod.preloadFont(o,a,e.renderOpts.crossOrigin,e.nonce)})}else try{let t=new URL(e.assetPrefix);i.push(()=>{e.componentMod.preconnect(t.origin,"anonymous",e.nonce)})}catch(t){i.push(()=>{e.componentMod.preconnect("/","anonymous",e.nonce)})}let c=r8(s,e,i),d=l?l.map((t,r)=>o("script",{src:`${e.assetPrefix}/_next/${rW(t)}${r6(e,!0)}`,async:!0,key:`script-${r}`,nonce:e.nonce})):[];return c.length||d.length?[...c,...d]:null}({preloadCallbacks:d,ctx:u,layoutOrPagePath:B,injectedCSS:Z,injectedJS:ee,injectedFontPreloadTags:et}),[en,ea,ei]=W?await r9({ctx:u,filePath:W[1],getComponent:W[0],injectedCSS:Z,injectedJS:ee}):[_],[eo,es,el]=G?await r9({ctx:u,filePath:G[1],getComponent:G[0],injectedCSS:Z,injectedJS:ee}):[],[eu,ec,ed]=J?await r9({ctx:u,filePath:J[1],getComponent:J[0],injectedCSS:Z,injectedJS:ee}):[],ef=void 0!==V,eh=void 0!==H,{mod:ep,modType:em}=await (0,j.getTracer)().trace($.Fx.getLayoutOrPageModule,{hideSpan:!(ef||eh),spanName:"resolve segment modules",attributes:{"next.segment":z}},()=>r2(e)),eg=ef&&!i,ev=i||eg,[eb,ew]=K?await r9({ctx:u,filePath:K[1],getComponent:K[0],injectedCSS:Z,injectedJS:ee}):[],eS=ep?ep.unstable_instant:void 0,e_=!!eS&&"object"==typeof eS&&"runtime"===eS.prefetch||n,[eE,eR]=f&&Y?await r9({ctx:u,filePath:Y[1],getComponent:Y[0],injectedCSS:Z,injectedJS:ee}):[],[ek,ex]=f&&Q?await r9({ctx:u,filePath:Q[1],getComponent:Q[0],injectedCSS:Z,injectedJS:ee}):[],eP=null==ep?void 0:ep.dynamic;if("export"===y)if(eP&&"auto"!==eP){if("force-dynamic"===eP)throw Object.defineProperty(new nf.f('Page with `dynamic = "force-dynamic"` couldn\'t be exported. `output: "export"` requires all pages be renderable statically because there is no runtime server to dynamically render routes in this output format. Learn more: https://nextjs.org/docs/app/building-your-application/deploying/static-exports'),"__NEXT_ERROR_CODE",{value:"E527",enumerable:!1,configurable:!0})}else eP="error";if("string"==typeof eP)if("error"===eP)w.dynamicShouldError=!0;else if("force-dynamic"===eP){if(w.forceDynamic=!0,w.isStaticGeneration&&!v.isRoutePPREnabled){let e=Object.defineProperty(new D('Page with `dynamic = "force-dynamic"` won\'t be rendered statically.'),"__NEXT_ERROR_CODE",{value:"E585",enumerable:!1,configurable:!0});throw w.dynamicUsageDescription=e.message,w.dynamicUsageStack=e.stack,e}}else w.dynamicShouldError=!1,w.forceStatic="force-static"===eP;if("string"==typeof(null==ep?void 0:ep.fetchCache)&&(w.fetchCache=null==ep?void 0:ep.fetchCache),void 0!==(null==ep?void 0:ep.revalidate)&&function(e,t){try{if(!1===e)ey.AR;else if("number"==typeof e&&!isNaN(e)&&e>-1);else if(void 0!==e)throw Object.defineProperty(Error(`Invalid revalidate value "${e}" on "${t}", must be a non-negative number or false`),"__NEXT_ERROR_CODE",{value:"E179",enumerable:!1,configurable:!0})}catch(e){if(e instanceof Error&&e.message.includes("Invalid revalidate"))throw e;return}}(null==ep?void 0:ep.revalidate,w.route),"number"==typeof(null==ep?void 0:ep.revalidate)){let e=ep.revalidate,t=eQ.workUnitAsyncStorage.getStore();if(t)switch(t.type){case"prerender":case"prerender-runtime":case"prerender-legacy":case"prerender-ppr":t.revalidate>e&&(t.revalidate=e)}if(!w.forceStatic&&w.isStaticGeneration&&0===e&&!v.isRoutePPREnabled){let e=`revalidate: 0 configured ${z}`;throw w.dynamicUsageDescription=e,Object.defineProperty(new D(e),"__NEXT_ERROR_CODE",{value:"E1005",enumerable:!1,configurable:!0})}}if(eh&&"number"==typeof(null==ep?void 0:ep.unstable_dynamicStaleTime)){let e=ep.unstable_dynamicStaleTime,t=eQ.workUnitAsyncStorage.getStore();if(t)switch(t.type){case"prerender":case"prerender-runtime":case"prerender-legacy":case"prerender-ppr":t.stale>e&&(t.stale=e);break;case"request":(void 0===t.stale||t.stale>e)&&(t.stale=e)}}let eC=w.isStaticGeneration,eT=eC&&!0===v.isRoutePPREnabled,eA=ep?r4(ep):void 0;if(eC){let{isValidElementType:e}=a("./dist/compiled/react-is/index.js");void 0===eA||e(eA)||nE(M,em??"page"),void 0===eo||e(eo)||nE(M,"error"),void 0===eu||e(eu)||nE(M,"loading"),void 0===eb||e(eb)||nE(M,"not-found"),void 0===eE||e(eE)||nE(M,"forbidden"),void 0===ek||e(ek)||nE(M,"unauthorized")}let eO=L(e),ej=t;eO&&null!==eO.value&&(ej={...t,[eO.param]:eO.value});let e$=(null==eO?void 0:eO.type)==="oc"&&null===eO.value?eO.param:r,eI=u.renderOpts.dir||"",[eD,eN]=await nP({ctx:u,conventionName:"not-found",Component:eb,styles:ew,tree:e}),[eM]=await nP({ctx:u,conventionName:"forbidden",Component:eE,styles:eR,tree:e}),[eL]=await nP({ctx:u,conventionName:"unauthorized",Component:ek,styles:ex,tree:e}),eU=await Promise.all(Object.keys(X).map(async t=>{let r="children"===t,n=X[t],a=r?eD:void 0,i=r?eM:void 0,o=r?eL:void 0,s=null;if(U&&(eu||!r0(n))&&!v.isRoutePPREnabled);else{if((null==p?void 0:p.boundaryTree)===e&&r){let e;switch(p.triggeredStatus){case 404:e=eD;break;case 403:e=eM;break;case 401:e=eL}e&&(s=nC(u,e,{},null,eT,!1,nm))}null===s&&(s=await nR({loaderTree:n,parentParams:ej,parentOptionalCatchAllParamName:e$,parentRuntimePrefetchable:e_,rootLayoutIncluded:ev,injectedCSS:Z,injectedJS:ee,injectedFontPreloadTags:et,ctx:u,missingSlots:c,preloadCallbacks:d,authInterrupts:f,MetadataOutlet:r?h:null,prerenderHTTPError:p},!1))}let l=S(en,null,S(x,null));return nS(e,eI,"template"),nS(e,eI,"error"),nS(e,eI,"loading"),m&&nS(e,eI,"global-error"),[t,S(k,{parallelRouterKey:t,error:eo,errorStyles:es,errorScripts:el,template:l,templateStyles:ea,templateScripts:ei,notFound:a,forbidden:i,unauthorized:o,...!1}),s]})),eF={},eH={};for(let e of eU){let[t,r,n]=e;eF[t]=r,eH[t]=n}let eB=eu?S(eu,{key:"l"}):null,ez=(nS(e,eI,"loading"),eB?[eB,ec,ed]:null);if(!eA)return nC(u,S(_,{key:"c"},er,eF.children),eH,ez,eT,e_,nm);if(w.isStaticGeneration&&w.forceDynamic&&v.isRoutePPREnabled)return nC(u,S(_,{key:"c"},S(N,{reason:'dynamic = "force-dynamic" was used',route:w.route}),er),eH,ez,!0,e_,nm);let eq=(null==(g=(null==ep?void 0:ep.default)||ep)?void 0:g.$$typeof)===Symbol.for("react.client.reference"),eX=eq&&b?nm:function(){let e=eQ.workUnitAsyncStorage.getStore();if(e)switch(e.type){case"prerender":case"prerender-runtime":{let t=e.varyParamsAccumulator;if(null!==t){let e=nh();return t.segments.add(e),e}}}return null}();if(eh){let t;if(eq)if(b)t=S(P,{Component:eA,serverProvidedParams:null});else if(eC){let e=I(ej),r=A();t=S(P,{Component:eA,serverProvidedParams:{searchParams:F,params:ej,promises:[r,e]}})}else t=S(P,{Component:eA,serverProvidedParams:{searchParams:F,params:ej,promises:null}});else{let e=O(ej,e$,eX,e_),r=T(F,eX,e_);t=r1(eA)?S(eA,{params:e,searchParams:r,$$isPage:!0}):S(eA,{params:e,searchParams:r})}re.WO;return nC(u,S(_,{key:"c"},(nS(e,eI,"page")??nS(e,eI,"defaultPage"),t),er,h?S(h,null):null),eH,ez,eT,e_,eX)}{let t,r=eg&&"children"in X&&Object.keys(X).length>1;if(eq){let e;if(b)e=S(C,{Component:eA,slots:eF,serverProvidedParams:null});else if(eC){let t=I(ej);e=S(C,{Component:eA,slots:eF,serverProvidedParams:{params:ej,promises:[t]}})}else e=S(C,{Component:eA,slots:eF,serverProvidedParams:{params:ej,promises:null}});if(r){let r,n,a;r=nk({ctx:u,ErrorBoundaryComponent:eb,errorElement:eD,ClientSegmentRoot:C,layerAssets:er,SegmentComponent:eA,currentParams:ej}),n=nk({ctx:u,ErrorBoundaryComponent:eE,errorElement:eM,ClientSegmentRoot:C,layerAssets:er,SegmentComponent:eA,currentParams:ej}),a=nk({ctx:u,ErrorBoundaryComponent:ek,errorElement:eL,ClientSegmentRoot:C,layerAssets:er,SegmentComponent:eA,currentParams:ej}),t=r||n||a?S(R,{key:"c",notFound:r,forbidden:n,unauthorized:a},er,e):S(_,{key:"c"},er,e)}else t=S(_,{key:"c"},er,e)}else{let e,n=O(ej,e$,eX,e_);e=r1(eA)?S(eA,{...eF,params:n,$$isLayout:!0},eF.children):S(eA,{...eF,params:n},eF.children),t=r?S(R,{key:"c",notFound:eD?S(_,null,er,S(eA,{params:n},ew,eD)):void 0},er,e):S(_,{key:"c"},er,e)}return nS(e,eI,"layout"),nC(u,t,eH,ez,eT,e_,eX)}}function nk({ctx:e,ErrorBoundaryComponent:t,errorElement:r,ClientSegmentRoot:n,layerAssets:a,SegmentComponent:i,currentParams:o}){let{componentMod:{createElement:s,Fragment:l}}=e;return t?s(l,null,a,s(n,{Component:i,slots:{children:r},params:o})):null}function nx(e,t){return function e(t,r,n){let{modules:{layout:a},parallelRoutes:i}=r3(r),o=n(r),s=t;return(o&&null!==o.value&&(s={...t,[o.param]:o.value}),void 0!==a)?s:i.children?e(s,i.children,n):s}({},e,t)}async function nP({ctx:e,conventionName:t,Component:r,styles:n,tree:a}){let{componentMod:{createElement:i,Fragment:o}}=e,s=e.renderOpts.dir||"",{SegmentViewNode:l}=e.componentMod;return[r?i(o,null,i(r,null),n):void 0,nS(a,s,t)]}function nC(e,t,r,n,a,i,o){let s=e.componentMod.createElement;if(!i){let e=eQ.workUnitAsyncStorage.getStore();if(e){let r;switch(e.type){case"request":case"prerender-runtime":if(r=e.stagedRendering){let e=t;t=r.waitForStage(nd.D.Static).then(()=>e)}}}}return null!==n&&(t=s(e.componentMod.LoadingBoundaryProvider,{loading:n,children:t})),[t,r,null,a,o||null]}async function nT({loaderTreeToFilter:e,parentParams:t,flightRouterState:r,parentIsInsideSharedLayout:n,rscHead:a,injectedCSS:i,injectedJS:o,injectedFontPreloadTags:s,rootLayoutIncluded:l,ctx:u,preloadCallbacks:c,MetadataOutlet:d,hintTree:f}){let{renderOpts:{nextFontManifest:h,experimental:p},query:m,isPrefetch:g,getDynamicParamFromSegment:y,parsedRequestHeaders:v}=u,[b,w,S]=e,_=Object.keys(w),{layout:E}=S,R=void 0!==E&&!l,k=l||R,x=y(e),P=x&&null!==x.value?{...t,[x.param]:x.value}:t,C=(0,re.HG)(x?x.treeSegment:b,m),T=!r||!rY(C,r[0])||"refetch"===r[3],A=T||n||"inside-shared-layout"===r[3];if(A&&!p.isRoutePPREnabled&&(v.isRouteTreePrefetchRequest||g&&!S.loading&&!r0(e)))return[[r&&nA(C,r[0])?r[0]:C,v.isRouteTreePrefetchRequest?await rn(e,f,y):await rr(e,f,y,m),null,[null,null],!0]];if(r&&"metadata-only"===r[3])return[[r&&nA(C,r[0])?r[0]:C,v.isRouteTreePrefetchRequest?await rn(e,f,y):await rr(e,f,y,m),null,a,!1]];if(T){let t=r&&nA(C,r[0])?r[0]:C,n=await rr(e,f,y,m),h=await n_({ctx:u,loaderTree:e,parentParams:P,parentOptionalCatchAllParamName:null,parentRuntimePrefetchable:!1,injectedCSS:i,injectedJS:o,injectedFontPreloadTags:s,rootLayoutIncluded:l,preloadCallbacks:c,authInterrupts:p.authInterrupts,MetadataOutlet:d});return[[t,n,h,a,!1]]}let O=null==E?void 0:E[1],j=new Set(i),$=new Set(o),I=new Set(s);O&&(rQ(O,j,$,!0),rZ(h,O,I));let D=[];for(let e of _){var N;let t=w[e];for(let n of(await nT({ctx:u,loaderTreeToFilter:t,parentParams:P,flightRouterState:r&&r[1][e],parentIsInsideSharedLayout:A,rscHead:a,injectedCSS:j,injectedJS:$,injectedFontPreloadTags:I,rootLayoutIncluded:k,preloadCallbacks:c,MetadataOutlet:d,hintTree:(null==f||null==(N=f.slots)?void 0:N[e])??null})))D.push([C,e,...n])}return D}let nA=(e,t)=>{var r;return!Array.isArray(e)&&!!Array.isArray(t)&&(null==(r=(0,t2.Hp)(e))?void 0:r.paramName)===t[0]};var nO=a("./dist/esm/shared/lib/router/utils/interception-routes.js");function nj(e){if(""===e)return null;let t=nO.VB.find(t=>e.startsWith(t)),r=(0,t2.Hp)(e);return r?{type:"dynamic",name:e,param:r,interceptionMarker:t}:e.startsWith("(")&&e.endsWith(")")?{type:"route-group",name:e,interceptionMarker:t}:e.startsWith("@")?{type:"parallel-route",name:e,interceptionMarker:t}:{type:"static",name:e,interceptionMarker:t}}function n$(e,t){let r,n,a,i=e.split("/").filter(Boolean),o=[];for(let s of i){let i=nj(function(e){if(!/%5b|%5d/i.test(e))return e;try{let t=decodeURIComponent(e);return(0,t2.Hp)(t)?t:e}catch{return e}}(s));if(i){if(t&&("route-group"===i.type||"parallel-route"===i.type))throw Object.defineProperty(new eB.z(`${e} is being parsed as a normalized route, but it has a route group or parallel route segment.`),"__NEXT_ERROR_CODE",{value:"E923",enumerable:!1,configurable:!0});if(o.push(i),i.interceptionMarker){let o=e.split(i.interceptionMarker);if(2!==o.length)throw Object.defineProperty(Error(`Invalid interception route: ${e}`),"__NEXT_ERROR_CODE",{value:"E924",enumerable:!1,configurable:!0});n=t?n$(o[0],!0):n$(o[0],!1),a=t?n$(o[1],!0):n$(o[1],!1),r=i.interceptionMarker}}}let s=o.filter(e=>"dynamic"===e.type);return{normalized:t,pathname:e,segments:o,dynamicSegments:s,interceptionMarker:r,interceptingRoute:n,interceptedRoute:a}}function nI(e){switch(e){case"catchall-intercepted-(..)(..)":case"dynamic-intercepted-(..)(..)":return"(..)(..)";case"catchall-intercepted-(.)":case"dynamic-intercepted-(.)":return"(.)";case"catchall-intercepted-(..)":case"dynamic-intercepted-(..)":return"(..)";case"catchall-intercepted-(...)":case"dynamic-intercepted-(...)":return"(...)";default:return null}}function nD(e,t,r,n,a){switch(t){case"catchall":case"optional-catchall":case"catchall-intercepted-(..)(..)":case"catchall-intercepted-(.)":case"catchall-intercepted-(..)":case"catchall-intercepted-(...)":let i=[];for(let e=r;e0)return i;if("optional-catchall"===t)return;throw Object.defineProperty(new eB.z(`Unexpected empty path segments match for a route "${n.pathname}" with param "${e}" of type "${t}"`),"__NEXT_ERROR_CODE",{value:"E931",enumerable:!1,configurable:!0});case"dynamic":case"dynamic-intercepted-(..)(..)":case"dynamic-intercepted-(.)":case"dynamic-intercepted-(..)":case"dynamic-intercepted-(...)":if(r0;){let{tree:e,depth:t}=i.pop(),{segment:r,parallelRoutes:s}=r3(e),l=nj(r);if(l?.type==="dynamic"&&!a.hasOwnProperty(l.param.paramName)&&!n?.has(l.param.paramName)){let{paramName:e,paramType:r}=l.param,n=nD(e,r,t,o,a);if(void 0!==n)a[e]=n;else if("optional-catchall"!==r)throw Object.defineProperty(new eB.z(`Could not resolve param value for segment: ${e}`),"__NEXT_ERROR_CODE",{value:"E932",enumerable:!1,configurable:!0})}let u=t;for(let e of(l&&"route-group"!==l.type&&"parallel-route"!==l.type&&u++,Object.values(s)))i.push({tree:e,depth:u})}return a}function nM(e,t,r,n,a){let i=function(e,t,r){let n=e[t];if(r?.has(t)){let[e]=r.get(t);n=e}else Array.isArray(n)?n=n.map(e=>encodeURIComponent(e)):"string"==typeof n&&(n=encodeURIComponent(n));return n}(e,t,n);if(!i||0===i.length){if("oc"===r)return{param:t,value:null,type:r,treeSegment:[t,"",r,a]};throw Object.defineProperty(new eB.z(`Missing value for segment key: "${t}" with dynamic param type: ${r}`),"__NEXT_ERROR_CODE",{value:"E864",enumerable:!1,configurable:!0})}let o=Array.isArray(i)?i.join("/"):i;return{param:t,value:i,treeSegment:[t,o,r,a],type:r}}let nL=/^([^[]*)\[((?:\[[^\]]*\])|[^\]]+)\](.*)$/;function nU(e){let t=e.startsWith("[")&&e.endsWith("]");t&&(e=e.slice(1,-1));let r=e.startsWith("...");return r&&(e=e.slice(3)),{key:e,repeat:r,optional:t}}async function nF(e,t){return Promise.all(Array.from(e).map(([e,r])=>r.then(async({entry:r,hasExplicitRevalidate:n,hasExplicitExpire:a,readRootParamNames:i})=>{if(t&&(0===r.revalidate||r.expire<300))return null;let[o,s]=r.value.tee();r.value=s;let l="";for await(let e of o)l+=function(e){let t=new Uint8Array(e),r=t.byteLength;if(r<65535)return String.fromCharCode.apply(null,t);let n="";for(let e=0;enull)))}async function nH(e,t){{if(0===e.fetch.size&&0===e.cache.size)return"null";let r={store:{fetch:Object.fromEntries(Array.from(e.fetch.entries())),cache:Object.fromEntries((await nF(e.cache.entries(),t)).filter(e=>null!==e)),encryptedBoundArgs:Object.fromEntries(Array.from(e.encryptedBoundArgs.entries()))}},{deflateSync:n}=a("node:zlib");return n(JSON.stringify(r)).toString("base64")}}function nB(e){return e?{cache:new Map(e.cache),fetch:new Map(e.fetch),encryptedBoundArgs:new Map(e.encryptedBoundArgs),decryptedBoundArgs:new Map(e.decryptedBoundArgs)}:{cache:new Map,fetch:new Map,encryptedBoundArgs:new Map,decryptedBoundArgs:new Map}}function nz(e,t){{let r;if("string"!=typeof e)return e;if("null"===e)return{cache:new Map,fetch:new Map,encryptedBoundArgs:new Map,decryptedBoundArgs:new Map};let{inflateSync:n}=a("node:zlib"),i=t?5*t:524288e3;try{r=JSON.parse(n(Buffer.from(e,"base64"),{maxOutputLength:i}).toString("utf-8"))}catch(e){if(e instanceof RangeError&&"ERR_BUFFER_TOO_LARGE"===e.code)throw Object.defineProperty(Error(`Decompressed resume data cache exceeded ${i} byte limit`),"__NEXT_ERROR_CODE",{value:"E976",enumerable:!1,configurable:!0});throw e}return{cache:function(e){let t=new Map;for(let[r,{entry:n,hasExplicitRevalidate:a,hasExplicitExpire:i,readRootParamNames:o}]of e)t.set(r,Promise.resolve({entry:{value:new ReadableStream({start(e){e.enqueue(function(e){let t=e.length,r=new Uint8Array(t);for(let n=0;n(r(function(){let e=document.getElementsByName(at)[0];if(e?.shadowRoot?.childNodes[0])return e.shadowRoot.childNodes[0];{let e=document.createElement(at);e.style.cssText="position:absolute";let t=document.createElement("div");return t.ariaLive="assertive",t.id="__next-route-announcer__",t.role="alert",t.style.cssText="position:absolute;border:0;height:1px;margin:-1px;padding:0;width:1px;clip:rect(0 0 0 0);overflow:hidden;white-space:nowrap;word-wrap:normal",e.attachShadow({mode:"open"}).appendChild(t),document.body.appendChild(e),t}}()),()=>{let e=document.getElementsByTagName(at)[0];e?.isConnected&&document.body.removeChild(e)}),[]);let[n,a]=(0,O.useState)(""),i=(0,O.useRef)(void 0);return(0,O.useEffect)(()=>{let e="";if(document.title)e=document.title;else{let t=document.querySelector("h1");t&&(e=t.innerText||t.textContent||"")}void 0!==i.current&&i.current!==e&&a(e),i.current=e},[e]),t?(0,rG.createPortal)(n,t):null}tA.s8,tA.s8,a("./dist/esm/client/components/unstable-rethrow.server.js").X,a("./dist/esm/server/app-render/dynamic-rendering.js").Ip,a("./dist/esm/server/app-render/dynamic-rendering.js").FD;let{instrumentParamsForClientValidation:an,instrumentSearchParamsForClientValidation:aa,expectCompleteParamsInClientValidation:ai}=process.env.__NEXT_CACHE_COMPONENTS?a("./dist/esm/server/app-render/instant-validation/instant-samples-client.js"):{};function ao(){let e=(0,O.useContext)(nJ);if(null===e)throw Object.defineProperty(Error("invariant expected app router to be mounted"),"__NEXT_ERROR_CODE",{value:"E238",enumerable:!1,configurable:!0});return e}function as({redirect:e,reset:t,redirectType:r}){let n=ao();return(0,O.useEffect)(()=>{O.startTransition(()=>{"push"===r?n.push(e,{}):n.replace(e,{}),t()})},[e,r,t,n]),null}class al extends O.Component{constructor(e){super(e),this.state={redirect:null,redirectType:null}}static getDerivedStateFromError(e){if((0,tO.n)(e)){let t=tj(e),r=t$(e);return"handled"in e?{redirect:null,redirectType:null}:{redirect:t,redirectType:r}}throw e}render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&null!==t?(0,T.jsx)(as,{redirect:e,redirectType:t,reset:()=>this.setState({redirect:null})}):this.props.children}}function au({children:e}){let t=ao();return(0,T.jsx)(al,{router:t,children:e})}function ac(e,t=!1){return Array.isArray(e)?`${e[0]}|${e[1]}|${e[2]}`:t&&e.startsWith(re.OG)?re.OG:e}let ad={then:()=>{}},af=process.env.__NEXT_ROUTER_BASEPATH||"",ah=process.env.__NEXT_ROUTER_BASEPATH||"",ap=e=>"/"===e[0]?e.slice(1):e,am=e=>"string"==typeof e?"children"===e?"":e:e[1];function ag(e){return e.reduce((e,t)=>""===(t=ap(t))||(0,re.V)(t)?e:`${e}/${t}`,"")||"/"}function ay(e){let t=Array.isArray(e[0])?e[0][1]:e[0];if(t===re.WO||nO.VB.some(e=>t.startsWith(e)))return;if(t.startsWith(re.OG))return"";let r=[am(t)],n=e[1]??{},a=n.children?ay(n.children):void 0;if(void 0!==a)r.push(a);else for(let[e,t]of Object.entries(n)){if("children"===e)continue;let n=ay(t);void 0!==n&&r.push(n)}return ag(r)}var av=a("./dist/compiled/react-server-dom-turbopack-experimental/client.node.js");async function ab(e,t){return new Promise((r,n)=>{(0,O.startTransition)(()=>{(0,n7.Dd)({type:n0.s8,actionId:e,actionArgs:t,resolve:r,reject:n})})})}process.env.__NEXT_ROUTER_BASEPATH;function aw(e){let[t,r,n,a]=e.slice(-4),i=e.slice(0,-4);return{pathToSegment:i.slice(0,-1),segmentPath:i,segment:i[i.length-1]??"",tree:t,seedData:r,head:n,isHeadPartial:a,isRootRender:4===e.length}}function aS(e){return"string"==typeof e?e:e.map(e=>aw(e))}function a_(e,t){return t?encodeURIComponent(JSON.stringify(e)):encodeURIComponent(JSON.stringify(function e(t){let[r,n,a,i,o]=t,s=function(e){if("string"==typeof e)return e.startsWith(re.OG+"?")?re.OG:e;let[t,r,n]=e;return[t,r,n,null]}(r),l={};for(let[t,r]of Object.entries(n))l[t]=e(r);let u=[s,l];return i&&(u[2]=null,u[3]=i),void 0!==o&&(u[4]=o),u}(e)))}let aE="/_head";function aR(e){if("string"==typeof e)return e.startsWith(re.OG)?re.OG:"/_not-found"===e?"_not-found":aP(e);let t=e[0];return"$"+e[2]+"$"+aP(t)}function ak(e,t,r){return e+"/"+("children"===t?r:`@${aP(t)}/${r}`)}let ax=/^[a-zA-Z0-9\-_@]+$/;function aP(e){return ax.test(e)?e:"!"+btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function aC(e){let t=e.headers.get(z.Wc);return null!==t?""===t?"":"?"+t:aO(new URL(e.url)).search}function aT(e){try{return encodeURIComponent(decodeURIComponent(e))}catch{return e}}function aA(e){return!(""===e||e.startsWith(re.OG)||"("===e[0]&&e.endsWith(")"))&&e!==re.WO&&"/_not-found"!==e}function aO(e){let t=new URL(e);if(t.searchParams.delete(z._A),"export"===process.env.__NEXT_CONFIG_OUTPUT&&t.pathname.endsWith(".txt")){let{pathname:e}=t,r=e.endsWith("/index.txt")?10:4;t.pathname=e.slice(0,-r)}return t}e=process.env.NEXT_DEPLOYMENT_ID||void 0;function aj(e){return(e.then(a$),"fulfilled"!==e.status)?null:e.value}let a$=()=>{};function aI(e,t){let r=new URL(e);return{pathname:r.pathname,search:r.search,nextUrl:t}}var aD=((p={})[p.Intent=2]="Intent",p[p.Default=1]="Default",p[p.Background=0]="Background",p),aN=((m={})[m.LoadingBoundary=0]="LoadingBoundary",m[m.PPR=1]="PPR",m[m.PPRRuntime=2]="PPRRuntime",m[m.Full=3]="Full",m);let aM={},aL={};function aU(){return{parent:null,key:null,value:null,map:null,prev:null,next:null,size:0}}function aF(e,t,r,n,a){let i=function e(t,r,n,a,i,o){let s,l;if(null!==a)s=a.value,l=a.parent;else if(i&&o!==aL)s=aL,l=null;else return null===n.value?n:aH(t,r,n.value)?(aq(n),null):n;let u=n.map;if(null!==u){let n=u.get(s);if(void 0!==n){let a=e(t,r,n,l,i,s);if(null!==a)return a}let a=u.get(aM);if(void 0!==a)return e(t,r,a,l,i,s)}return null}(e,t,r,n,a,0);return null===i||null===i.value?null:(aG(i),i.value)}function aH(e,t,r){return r.staleAt<=e||r.versionPromise.resolve().then(e).catch(e=>setTimeout(()=>{throw e})),aQ=[],aZ=0,a0=0,a1=!1,a2=null;function a4(e,t,r,n,a,i){var o;let s={key:e,treeAtTimeOfPrefetch:t,routeCacheVersion:iV,segmentCacheVersion:0,priority:n,phase:1,hasBackgroundWork:!1,spawnedRuntimePrefetches:null,fetchStrategy:r,sortId:a0++,isCanceled:!1,onInvalidate:a,_heapIndex:-1};return process.env.__NEXT_EXPOSE_TESTING_API&&(s._onComplete=i),(o=s).priority===aD.Intent&&o!==a2&&(null!==a2&&a2.priority!==aD.Background&&(a2.priority=aD.Default,ih(aQ,a2)),a2=o),iu(aQ,s),a6(),s}function a3(e,t,r){return e.routeCacheVersion!==iV||0!==e.segmentCacheVersion||e.treeAtTimeOfPrefetch!==r||e.key.nextUrl!==t}function a6(){a1||(a1=!0,aY(a7))}function a8(e){return e.priority===aD.Intent?aZ<12:aZ<4}function a9(e){return aZ++,e.then(e=>null===e?(a5(),null):(e.closed.then(a5),e.value))}function a5(){aZ--,a6()}function a7(){a1=!1;let e=Date.now(),t=ic(aQ);for(;null!==t&&a8(t);){t.routeCacheVersion=iV,t.segmentCacheVersion=0;let r=function(e,t){let r=t.key,n=iY(e,t,r),a=function(e,t,r){switch(r.status){case iF.Empty:a9(oa(r,t.key)),r.staleAt=e+6e4,r.status=iF.Pending;case iF.Pending:{let e=r.blockedTasks;return null===e?r.blockedTasks=new Set([t]):e.add(t),1}case iF.Rejected:break;case iF.Fulfilled:{let o;if(0!==t.phase)return 2;if(!a8(t))return 0;let s=r.tree;switch(o=s.prefetchHints&t7.SubtreeHasInstant?aN.PPR:t.fetchStrategy===aN.PPR?r.supportsPerSegmentPrefetching?aN.PPR:aN.LoadingBoundary:t.fetchStrategy){case aN.PPR:{var n,a,i;if(ia(n=e,a=t,i=r,iZ(n,aN.PPR,i.metadata),a.key,i.metadata),0===function e(t,r,n,a,i){let o=iZ(t,r.fetchStrategy,i);ia(t,r,n,o,r.key,i);let s=a[1],l=i.slots;if(null!==l)for(let a in l){if(!a8(r))return 0;let i=l[a],o=i.segment,u=s[a],c=u?.[0];if(0===(void 0!==c&&is(n,o,c)?e(t,r,n,u,i):function e(t,r,n,a){if(a.prefetchHints&t7.HasRuntimePrefetch)return null===r.spawnedRuntimePrefetches?r.spawnedRuntimePrefetches=new Set([a.requestKey]):r.spawnedRuntimePrefetches.add(a.requestKey),2;let i=iZ(t,r.fetchStrategy,a);if(ia(t,r,n,i,r.key,a),null!==a.slots){if(!a8(r))return 0;for(let i in a.slots)if(0===e(t,r,n,a.slots[i]))return 0}return 2}(t,r,n,i)))return 0}return 2}(e,t,r,t.treeAtTimeOfPrefetch,s))return 0;let o=t.spawnedRuntimePrefetches;if(null!==o){let n=new Map;it(e,t,r,n,aN.PPRRuntime);let a=function e(t,r,n,a,i,o){if(i.has(a.requestKey))return ir(t,r,n,a,!1,o,aN.PPRRuntime);let s={},l=a.slots;if(null!==l)for(let a in l){let u=l[a];s[a]=e(t,r,n,u,i,o)}return[a.segment,s,null,null]}(e,t,r,s,o,n);n.size>0&&a9(os(t,r,aN.PPRRuntime,a,n))}return 2}case aN.Full:case aN.PPRRuntime:case aN.LoadingBoundary:{let n=new Map;it(e,t,r,n,o);let a=function e(t,r,n,a,i,o,s){let l=a[1],u=i.slots,c={};if(null!==u)for(let a in u){let i=u[a],d=i.segment,f=l[a],h=f?.[0];if(void 0!==h&&is(n,d,h)){let l=e(t,r,n,f,i,o,s);c[a]=l}else switch(s){case aN.LoadingBoundary:{let e=(i.prefetchHints&(t7.SegmentHasLoadingBoundary|t7.SubtreeHasLoadingBoundary))!=0?function e(t,r,n,a,i,o){let s=null===i?"inside-shared-layout":null,l=iZ(t,r.fetchStrategy,a);switch(l.status){case iF.Empty:o.set(a.requestKey,i4(l,aN.LoadingBoundary)),"refetch"!==i&&(s=i="refetch");break;case iF.Fulfilled:if((a.prefetchHints&t7.SegmentHasLoadingBoundary)!=0)return on(a);case iF.Pending:case iF.Rejected:}let u={};if(null!==a.slots)for(let s in a.slots){let l=a.slots[s];u[s]=e(t,r,n,l,i,o)}return[a.segment,u,null,s]}(t,r,n,i,null,o):on(i);c[a]=e;break}case aN.PPRRuntime:{let e=ir(t,r,n,i,!1,o,s);c[a]=e;break}case aN.Full:{let e=ir(t,r,n,i,!1,o,s);c[a]=e}}}return[i.segment,c,null,null]}(e,t,r,t.treeAtTimeOfPrefetch,s,n,o);return n.size>0&&a9(os(t,r,o,a,n)),2}}}}return 2}(e,t,n);if(0!==a&&""!==r.search){let n=aI(new URL(r.pathname,location.origin).href,r.nextUrl),a=iY(e,t,n);switch(a.status){case iF.Empty:ie(t)&&(a.status=iF.Pending,a9(oa(a,n)));case iF.Pending:case iF.Fulfilled:case iF.Rejected:}}return a}(e,t),n=t.hasBackgroundWork;switch(t.hasBackgroundWork=!1,t.spawnedRuntimePrefetches=null,r){case 0:return;case 1:id(aQ),t=ic(aQ);continue;case 2:if(1===t.phase)t.phase=0,ih(aQ,t);else if(n)t.priority=aD.Background,ih(aQ,t);else{if(process.env.__NEXT_EXPOSE_TESTING_API){let e=t._onComplete;t._onComplete=void 0,e?.()}id(aQ)}t=ic(aQ);continue}}null===t&&0===aZ&&function(){if(!(aW<=0x3200000))for(;aW>0x2d00000&&null!==aV;){let e=aV.prev;null!==e&&aq(e)}}()}function ie(e){return e.priority===aD.Background||(e.hasBackgroundWork=!0,!1)}function it(e,t,r,n,a){ir(e,t,r,r.metadata,!1,n,a===aN.LoadingBoundary?aN.Full:a)}function ir(e,t,r,n,a,i,o){var s,l;let u=iZ(e,o,n),c=null;switch(u.status){case iF.Empty:if(o===aN.Full&&null!==function(e,t,r){r.varyPath;let n=null;if(null!==n){let r=n.navigatedAt+o4;return e>r?null:i5(i4(t,aN.Full),n.rsc,r,!1)}return null}(e,u,n))break;c=i4(u,o);break;case iF.Fulfilled:if(u.isPartial&&(s=u.fetchStrategy,sn)return null;let a=i5(i4(i2(e),aN.Full),r.rsc,n,!1),i=i1(e,i_(aN.Full,t),a);if(null!==i&&2===i.status)return i}return null}(e,n))break;c=io(e,n,o)}break;case iF.Pending:case iF.Rejected:l=u.fetchStrategy,l0&&a9(oo(r,a,r.tree,i));break}a9(oi(r,i4(n,aN.PPR),a,i));break;case iF.Pending:switch(n.fetchStrategy){case aN.PPR:case aN.PPRRuntime:case aN.Full:break;case aN.LoadingBoundary:ie(t)&&ii(e,r,a,i);break;default:n.fetchStrategy}break;case iF.Rejected:switch(n.fetchStrategy){case aN.PPR:case aN.PPRRuntime:case aN.Full:break;case aN.LoadingBoundary:ii(e,r,a,i);break;default:n.fetchStrategy}case iF.Fulfilled:}}function ii(e,t,r,n){let a=i0(e,aN.PPR,n);switch(a.status){case iF.Empty:a9(oi(t,i4(a,aN.PPR),r,n));case iF.Pending:case iF.Fulfilled:case iF.Rejected:}}function io(e,t,r){var n,a;let i=i0(e,r,t);if(i.status===iF.Empty)return i4(i,r);if(n=i.fetchStrategy,n>>1],t)>0?ip(e,t,r):im(e,t,r))}function ip(e,t,r){let n=r;for(;n>0;){let r=n-1>>>1,a=e[r];if(!(il(a,t)>0))return;e[r]=t,t._heapIndex=r,e[n]=a,a._heapIndex=n,n=r}}function im(e,t,r){let n=r,a=e.length,i=a>>>1;for(;nil(i,t))oil(s,i)?(e[n]=s,s._heapIndex=n,e[o]=t,t._heapIndex=o,n=o):(e[n]=i,i._heapIndex=n,e[r]=t,t._heapIndex=r,n=r);else{if(!(oil(s,t)))return;e[n]=s,s._heapIndex=n,e[o]=t,t._heapIndex=o,n=o}}}function ig(e,t,r){return{id:null,value:e,parent:{id:"?",value:t,parent:{id:null,value:r,parent:null}}}}function iy(e,t,r,n){return{id:null,value:e,parent:{id:"?",value:t,parent:{id:null,value:n?r:aM,parent:null}}}}function iv(e,t,r){return{id:r,value:t,parent:e}}function ib(e,t){return{id:null,value:e,parent:t}}function iw(e,t,r){return{id:null,value:e,parent:{id:"?",value:t,parent:r}}}function iS(e,t,r){return{id:null,value:e+aE,parent:{id:"?",value:t,parent:r}}}function i_(e,t){let r=t.varyPath;if(t.isPage&&e!==aN.Full&&e!==aN.PPRRuntime){let e=r.parent.parent;return{id:null,value:r.value,parent:{id:"?",value:aM,parent:e}}}return r}function iE(e){let t=e.parent.value;return"string"==typeof t?t:null}function iR(e,t){return{id:e.id,value:null===e.id||t.has(e.id)?e.value:aM,parent:null===e.parent?null:iR(e.parent,t)}}let ik=null,ix={pending:!0},iP={pending:!1},iC="function"==typeof WeakMap?new WeakMap:new Map,iT=new Set;function iA(e,t){for(let r of iT){let n=r.prefetchTask;if(null!==n&&!a3(n,e,t))continue;null!==n&&function(e){if(e.isCanceled=!0,function(e,t){let r=t._heapIndex;if(-1!==r&&(t._heapIndex=-1,0!==e.length)){let n=e.pop();n!==t&&(e[r]=n,n._heapIndex=r,im(e,n,r))}}(aQ,e),process.env.__NEXT_EXPOSE_TESTING_API){let t=e._onComplete;e._onComplete=void 0,t?.()}}(n);let a=aI(r.prefetchHref,e);r.prefetchTask=a4(a,t,r.fetchStrategy,aD.Default,null)}}"function"==typeof IntersectionObserver&&new IntersectionObserver(function(e){for(let t of e){let e=t.intersectionRatio>0;!function(e,t){let r=iC.get(e);void 0!==r&&(r.isVisible=t,t?iT.add(r):iT.delete(r),aD.Default)}(t.target,e)}},{rootMargin:"200px"});var iO=a("./dist/esm/shared/lib/promise-with-resolvers.js");function ij(e,t){return -1!==t?e+1e3*t:e+o2}function i$(e,t,r,n,a,i,o){}function iI(e,t,r,n,a){}aU();function iD(){return{staticChildren:null,dynamicChild:null,dynamicChildParamName:null,dynamicChildParamType:null,pattern:null}}let iN=iD();function iM(e,t,r,n,a,i,o,s,l,u){let c=t.split("/").filter(e=>""!==e),d=c.length>0?c[0]:null,f=c.length>0?c.slice(1):[];if(null!==n){let c=i8(e,n,a,i,o,s,l);return u&&(c.hasDynamicRewrite=!0),iL(iN,a,d,f,c,e,t,r,a,i,o,s,l,u),c}return iL(iN,a,d,f,null,e,t,r,a,i,o,s,l,u)}function iL(e,t,r,n,a,i,o,s,l,u,c,d,f,h){let p,m,g=t.segment,y=null,v=null,b=null;"string"==typeof g?p=aA(g):(y=g[0],v=g[2],b=g[3],p=!0);let w=e,S=r,_=n;if(p){if(null===y&&r!==g)return null!==a?a:i9(i,o,s,l,u,c,d,f);if(null!==y&&null!==v){if(w=function(e,t,r){if(null!==e.dynamicChild)return e.dynamicChild;let n=iD();return e.dynamicChild=n,e.dynamicChildParamName=t,e.dynamicChildParamType=r,n}(e,y,v),null!==b)for(let t of(null===e.staticChildren&&(e.staticChildren=new Map),b))e.staticChildren.has(t)||e.staticChildren.set(t,iD())}else{null===e.staticChildren&&(e.staticChildren=new Map);let t=e.staticChildren.get(r);void 0===t&&(t=iD(),e.staticChildren.set(r,t)),w=t}S=n.length>0?n[0]:null,_=n.length>0?n.slice(1):[]}let E=t.slots,R=null;if(null!==E){for(let e in E){let t=E[e];null===t.refreshState&&(R=iL(w,t,S,_,a,i,o,s,l,u,c,d,f,h))}return null!==R?R:null!==a?a:i9(i,o,s,l,u,c,d,f)}return null!==w.pattern?(h&&(w.pattern.hasDynamicRewrite=!0),w.pattern):(m=null!==a?a:i9(i,o,s,l,u,c,d,f),h&&(m.hasDynamicRewrite=!0),w.pattern=m,m)}function iU(e){return 1e3*Math.max(e,30)}var iF=((g={})[g.Empty=0]="Empty",g[g.Pending=1]="Pending",g[g.Fulfilled=2]="Fulfilled",g[g.Rejected=3]="Rejected",g);let iH="export"===process.env.__NEXT_CONFIG_OUTPUT,iB=["",{},null,"metadata-only"],iz=aU(),iq=aU(),iX=null,iV=0;function iW(e,t){let r=ig(t.pathname,t.search,t.nextUrl),n=aF(e,iV,iz,r,!1);return null!==n?n:process.env.__NEXT_OPTIMISTIC_ROUTING?function(e,t){let r=e.split("/").filter(e=>""!==e),n=new Map,a=function e(t,r,n,a){let i=n=400)return i7(e,Date.now()+1e4),null;l=r.redirected?new URL(r.url):u,t=await od(oh(l,i),o)}else t=await od(u,o),l=null!==t&&t.redirected?new URL(t.url):u;if(!t||!t.ok||204===t.status||!t.body)return i7(e,Date.now()+1e4),null;let c=n1(l),d=t.headers.get("vary"),f=null!==d&&d.includes(z.kO),h=(0,iO.b)(),p="2"===t.headers.get(z.jc)||iH;if(p){var s;let n,{stream:i,size:l}=await of(t.body);h.resolve(),aX(e,l);let u=await oC(i,o,{allowPartialStream:!0});if((t.headers.get(ey.eQ)??u.buildId)!=="")return i7(e,Date.now()+1e4),null;let d=(s=t).headers.get(z.j9)??aO(new URL(s.url)).pathname,m=aC(t),g={metadataVaryPath:null},y=(n=d.split("/").filter(e=>""!==e),function e(t,r,n,a,i,o,s,l){let u,c,d=null,f=t.slots;if(null!==f)for(let t in u=!1,c=ib(a,n),d={},f){let r,u,c,h=f[t],p=h.name,m=h.param;if(null!==m){let e=function(e,t,r){switch(e){case"c":return raT(e)):[];case"ci(..)(..)":case"ci(.)":case"ci(..)":case"ci(...)":{let n=e.length-2;return r0===t?aT(e.slice(n)):aT(e)):[]}case"oc":return raT(e)):null;case"d":if(r>=t.length)return"";return aT(t[r]);case"di(..)(..)":case"di(.)":case"di(..)":case"di(...)":{let n=e.length-2;if(r>=t.length)return"";return aT(t[r].slice(n))}default:return""}}(m.type,i,o),t=null!==m.key?m.key:"string"==typeof e?(0,re.HG)(e,Object.fromEntries(new URLSearchParams(""))):null===e?"":e.join("/");c=iv(n,t,p),u=[p,t,m.type,m.siblings],r=!0}else c=n,u=p,r=aA(p);let g=r?o+1:o,y=ak(a,t,aR(u));d[t]=e(h,u,c,y,i,g,s,l)}else a.endsWith(re.OG)?(u=!0,c=iw(a,s,n),null===l.metadataVaryPath&&(l.metadataVaryPath=iS(a,s,n))):(u=!1,c=ib(a,n));return{requestKey:a,segment:r,refreshState:null,varyPath:c,isPage:u,slots:d,prefetchHints:t.prefetchHints}}(u.tree,"",null,"",n,0,m,g)),v=g.metadataVaryPath;if(null===v)return i7(e,Date.now()+1e4),null;iM(Date.now(),r,a,e,y,v,f,c,p,!1)}else{let{stream:n,size:i}=await of(t.body);h.resolve(),aX(e,i);let s=await oC(n,o,{allowPartialStream:!0});if((t.headers.get(ey.eQ)??s.b)!=="")return i7(e,Date.now()+1e4),null;let l=s.h,u=null!==l?aj(l):null;!function(e,t,r,n,a,i,o,s,l,u,c){let d=aC(r),f=aS(n.f);if("string"==typeof f||1!==f.length)return i7(a,e+1e4);let h=f[0];if(!h.isRootRender)return i7(a,e+1e4);let p=h.tree,m="1"===r.headers.get(z.jc),g={metadataVaryPath:null},y=ot(p,d,g),v=g.metadataVaryPath;if(null===v)return i7(a,e+1e4);iM(e,u,c,a,y,v,i,o,s,!1);let b=o0(e,p,f,d,-1);ou(e,t,f,r.headers.get(ey.eQ)??n.b,m,l,om(e,r),b,null)}(Date.now(),aN.LoadingBoundary,t,s,e,f,c,p,u,r,a)}if(!f){let t=iy(r,n,a,f);aB(iz,t,e,!1)}return{value:null,closed:h.promise}}catch(t){return i7(e,Date.now()+1e4),null}}async function oi(e,t,r,n){let a=new URL(e.canonicalUrl,location.origin),i=r.nextUrl,o=n.requestKey,s=""===o?"/_index":o,l={[z.hY]:"1",[z._V]:"1",[z.qm]:s};null!==i&&(l[z.kO]=i),op(l);let u=iH?oh(a,s):a;try{let e=await od(u,l);if(!e||!e.ok||204===e.status||"2"!==e.headers.get(z.jc)&&!iH||!e.body)return oe(t,Date.now()+1e4),null;let r=(0,iO.b)(),{stream:a,size:i}=await of(e.body);r.resolve(),aX(t,i);let o=await oC(a,l,{allowPartialStream:!0});if((e.headers.get(ey.eQ)??o.buildId)!=="")return oe(t,Date.now()+1e4),null;let s=Date.now(),c=s+iU(o.staleTime),d=i5(t,o.rsc,c,o.isPartial),f=o.varyParams,h=process.env.__NEXT_VARY_PARAMS&&null!==f?iR(n.varyPath,f):i_(t.fetchStrategy,n);return i1(s,h,d),{value:d,closed:r.promise}}catch(e){return oe(t,Date.now()+1e4),null}}async function oo(e,t,r,n){let a=new URL(e.canonicalUrl,location.origin),i=t.nextUrl,o={[z.hY]:"1",[z._V]:"1",[z.qm]:"/"+re.OG};null!==i&&(o[z.kO]=i),op(o);try{let t=await od(a,o);if(!t||!t.ok||204===t.status||"2"!==t.headers.get(z.jc)&&!iH||!t.body)return ol(n,Date.now()+1e4),null;let i=(0,iO.b)(),{stream:s}=await of(t.body);i.resolve();let l=await oC(s,o,{allowPartialStream:!0});if((t.headers.get(ey.eQ)??l.tree.segment.buildId)!=="")return ol(n,Date.now()+1e4),null;let u=Date.now();!function e(t,r,n,a,i){let o=a.segment,s=t+iU(o.staleTime),l=i.get(n.requestKey);if(void 0!==l)i5(l,o.rsc,s,o.isPartial);else{let e=iZ(t,aN.PPR,n);0===e.status&&i5(i4(e,aN.PPR),o.rsc,s,o.isPartial)}if(null!==n.slots&&null!==a.slots)for(let o in n.slots){let s=n.slots[o],l=a.slots[o];void 0!==l&&e(t,r,s,l,i)}}(u,e,r,l.tree,n);let c=u+iU(l.head.staleTime),d=e.metadata.requestKey,f=n.get(d);if(void 0!==f)i5(f,l.head.rsc,c,l.head.isPartial);else{let t=iZ(u,aN.PPR,e.metadata);0===t.status&&i5(i4(t,aN.PPR),l.head.rsc,c,l.head.isPartial)}return ol(n,Date.now()+1e4),{value:null,closed:i.promise}}catch(e){return ol(n,Date.now()+1e4),null}}async function os(e,t,r,n,a){let i=e.key,o=new URL(t.canonicalUrl,location.origin),s=i.nextUrl;1===a.size&&a.has(t.metadata.requestKey)&&(n=iB);let l={[z.hY]:"1",[z.B]:a_(n)};switch(null!==s&&(l[z.kO]=s),r){case aN.Full:break;case aN.PPRRuntime:l[z._V]="2";break;case aN.LoadingBoundary:l[z._V]="1"}try{let e,i=await od(o,l);if(!i||!i.ok||!i.body)return ol(a,Date.now()+1e4),null;let s=aC(i);if(s!==t.renderedSearch)return ol(a,Date.now()+1e4),null;let f=(0,iO.b)(),h=null,p=null;if(r===aN.Full){var u,c,d;let t,r;u=i.body,c=f.resolve,d=function(e){if(null===h)return;let t=e/h.length;for(let e of h)aX(e,t)},t=0,r=u.getReader(),e=new ReadableStream({async pull(e){for(;;){let{done:n,value:a}=await r.read();if(!n){e.enqueue(a),d(t+=a.byteLength);continue}e.close(),c();return}}})}else{let{stream:t,size:r}=await of(i.body);f.resolve(),e=t,p=r}let[m,g]=await Promise.all([oC(e,l,{allowPartialStream:!0}),i.cacheData]),y=m.h,v=null!==y?aj(y):null,b=Date.now(),w=await og(b,m.s,i),S=r===aN.PPRRuntime&&(g?.isResponsePartial??!1),_=i.headers.get(ey.eQ)??m.b,E=aS(m.f);if("string"==typeof E)return ol(a,Date.now()+1e4),null;let R=o0(b,n,E,s,-1);if(h=ou(b,r,E,_,S,v,w,R,a),null!==p&&null!==h&&h.length>0){let e=p/h.length;for(let t of h)aX(t,e)}return{value:null,closed:f.promise}}catch(e){return ol(a,Date.now()+1e4),null}}function ol(e,t){let r=[];for(let n of e.values())1===n.status?oe(n,t):2===n.status&&r.push(n);return r}function ou(e,t,r,n,a,i,o,s,l){if(n&&""!==n)return null!==l&&ol(l,e+1e4),null;let u=s.routeTree,c=null!==s.metadataVaryPath?i6(s.metadataVaryPath):null;for(let n of r){let r=n.seedData;if(null!==r){let i=n.segmentPath,s=u;for(let t=0;t1){t=new Uint8Array(a);let e=0;for(let r of n)t.set(r,e),e+=r.byteLength}else t=new Uint8Array(0);return{stream:new ReadableStream({start(e){e.enqueue(t),e.close()}}),size:a}}function oh(e,t){if(iH){let r=new URL(e),n=r.pathname.endsWith("/")?r.pathname.slice(0,-1):r.pathname,a=`__next${t.replace(/\//g,".")}.txt`;return r.pathname=`${n}/${a}`,r}return e}function op(e){if(process.env.__NEXT_EXPOSE_TESTING_API){let{isNavigationLocked:t}=a("./dist/esm/client/components/segment-cache/navigation-testing-lock.js");t()&&(e[z.Yf]="1")}}function om(e,t){let r=parseInt(t.headers.get(z.UK)??"",10);return e+(isNaN(r)?o4:iU(r))}async function og(e,t,r){if(void 0!==t){let r;for await(let e of t)r=e;if(void 0!==r)return e+(isNaN(r)?o4:iU(r))}return void 0!==r?om(e,r):e+o4}function oy(e,t,r,n,a,i,o,s){let l=s?aN.PPR:aN.Full,u=null!==n?aj(n):null,c=aS(t);if("string"==typeof c)return;let d=o0(e,i,c,o,-1);ou(e,l,c,r,s,u,a,d,null)}async function ov(e,t,r,n){let{stream:a,isPartial:i}=await ob(t),o=await oC(a,void 0,{allowPartialStream:!0}),s=o.h,l=null!==s?aj(s):null,u=await og(e,o.s),c=aS(o.f);if("string"==typeof c)return null;let d=o0(e,r,c,n,-1);return{flightDatas:c,navigationSeed:d,buildId:o.b,isResponsePartial:i,headVaryParams:l,staleAt:u}}async function ob(e){let t=!!process.env.__NEXT_EXPERIMENTAL_CACHED_NAVIGATIONS,r=e.getReader(),{done:n,value:a}=await r.read();if(n||!a||0===a.byteLength)return{stream:new ReadableStream({start:e=>e.close()}),isPartial:t};let i=a[0],o=35===i||126===i,s=o?a.byteLength>1?a.subarray(1):null:a;return{isPartial:o?126===i:t,stream:new ReadableStream({start(e){s&&e.enqueue(s)},async pull(e){let t=await r.read();t.done?e.close():e.enqueue(t.value)}})}}let ow=av.createFromReadableStream,oS=av.createFromFetch;function o_(e){return aO(new URL(e,location.origin)).toString()}async function oE(e,t){let{flightRouterState:r,nextUrl:n}=t,a={[z.hY]:"1",[z.B]:a_(r,t.isHmrRefresh)};n&&(a[z.kO]=n);let i=e;try{"export"===process.env.__NEXT_CONFIG_OUTPUT&&((e=new URL(e)).pathname.endsWith("/")?e.pathname+="index.txt":e.pathname+=".txt");let t=process.env.__NEXT_PPR&&!process.env.__NEXT_CACHE_COMPONENTS,r=await oP(e,a,"auto",!t),n=aO(new URL(r.url)),o=r.redirected?n:i,s=r.headers.get("content-type")||"",l=!!r.headers.get("vary")?.includes(z.kO),u=!!r.headers.get(z.jc),c=s.startsWith(z.al);if("export"!==process.env.__NEXT_CONFIG_OUTPUT||c||(c=s.startsWith("text/plain")),!c||!r.ok||!r.body)return e.hash&&(n.hash=e.hash),o_(n.toString());let d=r.flightResponsePromise;null===d&&(d=oC(r.body,a,{allowPartialStream:u}));let[f,h]=await Promise.all([d,r.cacheData]);if((r.headers.get(ey.eQ)??f.b)!=="")return o_(r.url);let p=aS(f.f);if("string"==typeof p)return o_(p);let m=null!==h?await ok(h,f,a):null;return{flightData:p,canonicalUrl:o,renderedSearch:f.q,couldBeIntercepted:l,supportsPerSegmentPrefetching:f.S,postponed:u,dynamicStaleTime:f.d??-1,staticStageData:m,runtimePrefetchStream:f.p??null,responseHeaders:r.headers,debugInfo:d._debugInfo??null}}catch(e){return console.error(`Failed to fetch RSC payload for ${i}. Falling back to browser navigation.`,e),i.toString()}}async function oR(e){if(process.env.__NEXT_CACHE_COMPONENTS){let t,r;if(!e.body)throw Object.defineProperty(new eB.z("Expected RSC navigation response to have a body"),"__NEXT_ERROR_CODE",{value:"E1088",enumerable:!1,configurable:!0});let{stream:n,isPartial:a}=await ob(e.body);if(process.env.__NEXT_EXPERIMENTAL_CACHED_NAVIGATIONS){let[e,i]=n.tee();t=e,r={isResponsePartial:a,responseBodyClone:i}}else t=n,r={isResponsePartial:a};let i=new Response(t,{headers:e.headers,status:e.status,statusText:e.statusText});return Object.defineProperty(i,"url",{value:e.url}),Object.defineProperty(i,"redirected",{value:e.redirected}),{response:i,cacheData:r}}return{response:e,cacheData:null}}async function ok(e,t,r){let{isResponsePartial:n,responseBodyClone:a}=e;if(a){if(!n)return a.cancel(),{response:t,isResponsePartial:!1};if(void 0!==t.l)return{response:await ox(a,t.l,r),isResponsePartial:!0};a.cancel()}return null}async function ox(e,t,r){var n,a;let i,o;return oC((n=e,a=await t,i=n.getReader(),o=a,new ReadableStream({async pull(e){if(o<=0){i.cancel(),e.close();return}let{done:t,value:r}=await i.read();t?e.close():r.byteLength<=o?(e.enqueue(r),o-=r.byteLength):(e.enqueue(r.subarray(0,o)),o=0,i.cancel(),e.close())},cancel(){i.cancel()}})),r,{allowPartialStream:!0})}async function oP(t,r,n,a,i){process.env.__NEXT_TEST_MODE&&null!==n&&(r["Next-Test-Fetch-Priority"]=n),e&&(r["x-deployment-id"]=e);let o={credentials:"same-origin",headers:r,priority:n||void 0,signal:i},s=new URL(t);await rC(s,r);let l=fetch(s,o).then(oR),u=l.then(({response:e})=>e),c=a?oT(u,r):null,d=await u,f=d.redirected;if(process.env.__NEXT_CLIENT_VALIDATE_RSC_REQUEST_HEADERS)for(let e=0;e<20&&d.redirected;e++){let e=new URL(d.url,s);if(e.origin!==s.origin||e.searchParams.get(z._A)===s.searchParams.get(z._A))break;s=new URL(e),await rC(s,r),u=(l=fetch(s,o).then(oR)).then(({response:e})=>e),c=a?oT(u,r):null,d=await u,f=!0}let h=new URL(d.url,s);return h.searchParams.delete(z._A),{url:h.href,redirected:f,ok:d.ok,headers:d.headers,body:d.body,status:d.status,flightResponsePromise:c,cacheData:l.then(({cacheData:e})=>e)}}function oC(e,r,n){return ow(e,{callServer:ab,findSourceMapURL:o,debugChannel:t&&t(r),unstable_allowPartialStream:n?.allowPartialStream})}function oT(e,r){return oS(e,{callServer:ab,findSourceMapURL:o,debugChannel:t&&t(r)})}var oA=((y={})[y.Default=0]="Default",y[y.Hydration=1]="Hydration",y[y.HistoryTraversal=2]="HistoryTraversal",y[y.RefreshAll=3]="RefreshAll",y[y.HMRRefresh=4]="HMRRefresh",y[y.Gesture=5]="Gesture",y);let oO=()=>{};function oj(e,t,r,n,a,i,o,s,l){let u=o$(t),c=t.slots,d=null!==a?a[1]:null,f=oN(e,t,null!==a?a[0]:null,r,i,n,o),h=f.cacheNode,p=f.needsDynamicRequest;null===c&&function(e,t,r){switch(e){case 0:case 5:case 3:case 4:null===r.scrollRef&&(r.scrollRef={current:!0}),t.scrollRef=r.scrollRef}}(n,h,l);let m={},g=null,y=!1,v={},b=null;if(null!==c)for(let t in h.slots=b={},g=new Map,c){let a=oj(e,c[t],r,n,(null!==d?d[t]:null)??null,i,o,s||p,l);g.set(t,a),b[t]=a.node;let u=a.route;m[t]=u;let f=a.dynamicRequestTree;null!==f?(y=!0,v[t]=f):v[t]=u}let w=[u,m,null,null,t.prefetchHints];return{status:+!p,route:w,node:h,dynamicRequestTree:oD(w,v,p,y,s),refreshState:null,children:g}}function o$(e){if(e.isPage){let t=iE(e.varyPath);if(null===t)return re.OG;let r=JSON.stringify(Object.fromEntries(new URLSearchParams(t)));return"{}"!==r?re.OG+"?"+r:re.OG}return e.segment}function oI(e,t){let r=[e[0],t];return 2 in e&&(r[2]=e[2]),3 in e&&(r[3]=e[3]),4 in e&&(r[4]=e[4]),r}function oD(e,t,r,n,a){let i=null;return r?(i=oI(e,t),a||(i[3]="refetch")):i=n?oI(e,t):null,i}function oN(e,t,r,n,a,i,o){let s,l,u,c=t.isPage;switch(i){case 0:{let e=(t.varyPath,null);if(null!==e)return{cacheNode:oM(e.rsc,e.prefetchRsc,e.head,e.prefetchHead),needsDynamicRequest:!1};break}case 1:{let i=c?a:null;return i$(e,t.varyPath,r,null,i,null,o),c&&null!==n&&iI(e,n,i,null,o),{cacheNode:oM(r,null,i,null),needsDynamicRequest:!1}}case 2:let d=(t.varyPath,null);if(null!==d){let e=d.rsc,t=!oz(e)||"pending"!==e.status;return{cacheNode:oM(d.rsc,t?null:d.prefetchRsc,d.head,t?null:d.prefetchHead),needsDynamicRequest:!1}}}let f=null,h=!0,p=iG(e,t.varyPath);if(null!==p)switch(p.status){case iF.Fulfilled:f=p.rsc,h=p.isPartial;break;case iF.Pending:f=iJ(p).then(e=>null!==e?e.rsc:null),h=p.isPartial;case iF.Empty:case iF.Rejected:}null!==r?(h?(s=f,l=r):(s=null,l=f),u=!1):(h?(s=f,l=oq()):(s=null,l=f),u=h);let m=null,g=null,y=c;if(c){let t=null,r=!0;if(null!==n){let a=iG(e,n);if(null!==a)switch(a.status){case iF.Fulfilled:t=a.rsc,r=a.isPartial;break;case iF.Pending:t=iJ(a).then(e=>null!==e?e.rsc:null),r=a.isPartial;case iF.Empty:case iF.Rejected:}}process.env.__NEXT_OPTIMISTIC_ROUTING&&r&&(t=""),null!==a?(r?(m=t,g=a):(m=null,g=t),y=!1):(r?(m=t,g=oq()):(m=null,g=t),y=r)}return 5!==i&&(i$(e,t.varyPath,l,s,g,m,o),c&&null!==n&&iI(e,n,g,m,o)),{cacheNode:oM(l,s,g,m),needsDynamicRequest:u||y}}function oM(e,t,r,n,a=null){return{rsc:e,prefetchRsc:t,head:r,prefetchHead:n,slots:null,scrollRef:a}}let oL=!1;async function oU(e,t,r,n,a,i){var o,s;let l=await (o=r,s=n,new Promise(e=>{let t=t=>{0===t.exitStatus?0==--n&&e(0):e(t.exitStatus)},r=()=>e(2),n=1;o.then(t,r),null!==s&&(n+=s.length,s.forEach(e=>e.then(t,r)))}));switch(0===l&&(l=function e(t,r,n){var a,i,o;let s,l,u;0===t.status?(t.status=2,a=t.node,i=r,o=n,oz(l=a.rsc)&&(null===i?l.resolve(null,o):l.reject(i,o)),oz(u=a.head)&&u.resolve(null,o),s=null===t.refreshState?1:2):s=0;let c=t.children;if(null!==c)for(let[,t]of c){let a=e(t,r,n);a>s&&(s=a)}return s}(e,null,null)),l){case 0:oL=!1;return;case 1:{let n=await r;oF(!1,n.url,t,n.seed,e.route,a,i);return}case 2:{let n=await r;oF(!0,n.url,t,n.seed,e.route,a,i);return}default:return l}}function oF(e,t,r,n,a,i,o){if(null!==i)i.hasDynamicRewrite=!0;else if(null!==n){let e=n.metadataVaryPath;null!==e&&iM(Date.now(),t.pathname,r,null,n.routeTree,e,!1,n1(t),!1,!0)}iV++,iA(r,a),function(e,t){if(null!==iX){let r=iX;for(let n of(iX=null,r))a3(n,e,t)&&function(e){let t=e.onInvalidate;if(null!==t){e.onInvalidate=null;try{t()}catch(e){"function"==typeof reportError?reportError(e):console.error(e)}}}(n)}}(r,a),e=e||oL,oL=!0;let s=ae,l=null!==s&&a!==s?o:"replace",u={type:n0.Aw,previousTree:a,url:t,nextUrl:r,seed:n,mpa:e,navigateType:l};(0,n7.Dd)(u)}async function oH(e,t,r,n,a,i){try{let o=await oE(r,{flightRouterState:t,nextUrl:n,isHmrRefresh:4===a});if("string"==typeof o)return{exitStatus:2,url:new URL(o,location.origin),seed:null};let s=Date.now(),l=o0(s,e.route,o.flightData,o.renderedSearch,o.dynamicStaleTime);if(process.env.__NEXT_EXPOSE_TESTING_API&&await oX(),null!==i&&null!==o.staticStageData){let{response:e,isResponsePartial:r}=o.staticStageData;og(s,e.s).then(n=>{let a=o.responseHeaders.get(ey.eQ)??e.b;oy(s,e.f,a,e.h,n,t,o.renderedSearch,r)}).catch(()=>{})}null!==i&&null!==o.runtimePrefetchStream&&ov(s,o.runtimePrefetchStream,t,o.renderedSearch).then(e=>{null!==e&&ou(s,aN.PPRRuntime,e.flightDatas,e.buildId,e.isResponsePartial,e.headVaryParams,e.staleAt,e.navigationSeed,null)}).catch(()=>{});let u=ij(s,o.dynamicStaleTime);return{exitStatus:+!!function e(t,r,n,a,i,o){0===t.status&&null!==n&&(t.status=1,function(e,t,r,n){let a=e.rsc,i=t[0];if(null===i)return;null===a?e.rsc=i:oz(a)&&a.resolve(i,n);let o=e.head;oz(o)&&o.resolve(r,n)}(t.node,n,a,o),r.varyPath);let s=t.children,l=r.slots,u=null!==n?n[1]:null,c=!1;if(null!==s)if(null!==l)for(let t in l){let r=l[t],n=null!==u?u[t]:null,d=s.get(t);if(void 0===d)c=!0;else{let t=d.route[0];rY(o$(r),t)&&null!=n&&e(d,r,n,a,i,o)&&(c=!0)}}else null!==l&&(c=!0);return c}(e,l.routeTree,l.data,l.head,u,o.debugInfo),url:new URL(o.canonicalUrl,location.origin),seed:l}}catch{return{exitStatus:2,url:r,seed:null}}}let oB=Symbol();function oz(e){return e&&"object"==typeof e&&e.tag===oB}function oq(){let e,t,r=[],n=new Promise((r,n)=>{e=r,t=n});return n.status="pending",n.resolve=(t,a)=>{"pending"===n.status&&(n.status="fulfilled",n.value=t,null!==a&&r.push.apply(r,a),e(t))},n.reject=(e,a)=>{"pending"===n.status&&(n.status="rejected",n.reason=e,null!==a&&r.push.apply(r,a),t(e))},n.tag=oB,n._debugInfo=r,n}async function oX(){if(process.env.__NEXT_EXPOSE_TESTING_API){let{waitForNavigationLockIfActive:e}=a("./dist/esm/client/components/segment-cache/navigation-testing-lock.js");await e()}}let oV=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;function oW(e){return oV.test(""+e)}function oG(e,t,r,n,a,i,o,s,l,u){let c=Date.now(),d=iW(c,aI(t.href,o));if(null!==d&&d.status===iF.Fulfilled)return oK(c,e,t,r,n,o,a,i,s,l,u,d);if(!process.env.__NEXT_OPTIMISTIC_ROUTING&&(null===d||d.status!==iF.Rejected)){let d=function(e,t,r){let n=t.search;if(""===n)return null;let a=new URL(t);a.search="";let i=iW(e,aI(a.href,r));if(null===i||2!==i.status)return null;let o=new URL(i.canonicalUrl,t.origin),s=""!==o.search?o.search:n,l=""!==i.renderedSearch?i.renderedSearch:n,u=new URL(i.canonicalUrl,location.origin);return u.search=s,{canonicalUrl:n1(u),status:2,blockedTasks:null,tree:iQ(i.tree,l),metadata:iQ(i.metadata,l),couldBeIntercepted:i.couldBeIntercepted,supportsPerSegmentPrefetching:i.supportsPerSegmentPrefetching,hasDynamicRewrite:i.hasDynamicRewrite,renderedSearch:l,ref:null,size:0,staleAt:i.staleAt,version:i.version}}(c,t,o);if(null!==d)return oK(c,e,t,r,n,o,a,i,s,l,u,d)}return oQ(c,e,t,r,n,o,a,i,s,l,u).catch(()=>e)}function oJ(e,t,r,n,a,i,o,s,l,u,c,d,f,h,p){var m,g,y,v,b;let w,S={separateRefreshUrls:null,scrollRef:null},_=r.href===i.href,E=(m=a.routeTree,g=a.metadataVaryPath,y=a.data,v=a.head,b=a.dynamicStaleAt,w={canonicalUrl:n1(i),renderedSearch:o},function e(t,r,n,a,i,o,s,l,u,c,d,f,h,p,m,g){var y,v,b;let w,S,_,E,R=a[0],k=o$(i);if(!rY(k,R))return!l&&function e(t,r){let n=t[0],a=r.segment;if(Array.isArray(n)&&Array.isArray(a)){if(n[0]!==a[0]||n[2]!==a[2])return!0}else if(n!==a)return!0;let i=((t[4]??0)&t7.IsRootLayout)!=0,o=(r.prefetchHints&t7.IsRootLayout)!=0;if(i)return!o;if(o)return!0;let s=r.slots,l=t[1];if(null!==s)for(let t in s){let r=s[t],n=l[t];if(void 0===n||e(n,r))return!0}return!1}(a,i)||k===re.Jn?null:oj(t,i,o,s,u,c,d,h,g);let x=i.slots,P=a[1],C=null!==u?u[1]:null,T=l||(i.prefetchHints&t7.IsRootLayout)!=0,A=!1;switch(s){case 0:case 2:case 1:case 5:A=!1;break;case 3:case 4:A=!0}let O=null===x;if(void 0===n||A||O&&f){let e=oN(t,i,null!==u?u[0]:null,o,c,s,d);_=e.cacheNode,E=e.needsDynamicRequest,void 0!==n&&(_.scrollRef=n.scrollRef)}else{y=!1,_=oM((v=n).rsc,y?null:v.prefetchRsc,v.head,y?null:v.prefetchHead,v.scrollRef),E=!1}let j=i.refreshState,$=null!=j?j:m;E&&null!==$&&(b=g,w=$.canonicalUrl,null===(S=b.separateRefreshUrls)?b.separateRefreshUrls=new Set([w]):S.add(w));let I={},D=null,N=!1,M={},L=null;if(null!==x){let a=void 0!==n?n.slots:null;for(let n in _.slots=L={},D=new Map,x){let l=x[n],u=P[n];if(void 0===u)return null;let m=null!==C?C[n]:null,y=u[0],v=o$(l),b=c;2!==s&&v===re.WO&&y!==re.WO&&(v=o$(l=function(e,t,r,n){let a,i,o=n[2];null!=o?(a=o[0],i=o[1]):(a=r.canonicalUrl,i=r.renderedSearch);let s=function(e,t,r,n,a){let i=e.isPage?e.varyPath.parent.parent:e.varyPath.parent,o=r[0];return or(r,ak(e.requestKey,t,aR(o)),i,n,a)}(e,t,n,i,{metadataVaryPath:null});return s.refreshState={canonicalUrl:a,renderedSearch:i},s}(i,n,p,u)),m=null,b=null);let w=e(t,r,null!==a?a[n]:void 0,u,l,o,s,T,m??null,b,d,f,h||E,p,$,g);if(null===w)return null;D.set(n,w),L[n]=w.node;let S=w.route;I[n]=S;let _=w.dynamicRequestTree;null!==_?(N=!0,M[n]=_):M[n]=S}}let U=[o$(i),I,null!==$?[$.canonicalUrl,$.renderedSearch]:null,null,i.prefetchHints];return{status:+!E,route:U,node:_,dynamicRequestTree:oD(U,M,E,N,h),refreshState:$,children:D}}(e,i,null!==s?s:void 0,l,m,g,u,!1,y,v,b,_,!1,w,null,S));return null!==E?(u!==oA.Gesture&&function(e,t,r,n,a,i,o){let s=e.dynamicRequestTree;if(null===s){oL=!1;return}let l=oH(e,s,t,r,n,i),u=a.separateRefreshUrls,c=null;if(null!==u){c=[];let a=n1(t);for(let t of u)t!==a&&null!==s&&c.push(oH(e,s,new URL(t,location.origin),r,n,i))}oU(e,r,l,c,i,o).then(oO,oO)}(E,r,c,u,S,p,f),function(e,t,r,n,a,i,o,s,l,u,c){let d,f,h,p=(null==(h=function e(t,r){let[n,a]=t,[i,o]=r,s=am(n),l=am(i);if(nO.VB.some(e=>s.startsWith(e)||l.startsWith(e)))return"";if(!rY(n,i))return ay(r)??"";for(let t in a)if(o[t]){let r=e(a[t],o[t]);if(null!==r)return`${am(i)}/${r}`}return null}(e.tree,n))||"/"===h?h:ag(h.split("/")))||e.nextUrl,m=new URL(e.canonicalUrl,t),g=t.pathname===m.pathname&&t.search===m.search&&t.hash!==m.hash;if(l===n0.Kj.NoScroll)null!==u&&(u.current=!1),d=e.focusAndScrollRef.scrollRef,f=!1;else if(g){let t=e.focusAndScrollRef.scrollRef;null!==t&&(t.current=!1),null!==u&&(u.current=!1),d={current:!0},f=!0}else{if(d=u,null!==u){let t=e.focusAndScrollRef.scrollRef;null!==t&&(t.current=!1)}f=!1}return{canonicalUrl:o,renderedSearch:i,pushRef:{pendingPush:"push"===s,mpaNavigation:!1,preserveCustomHistoryState:!1},focusAndScrollRef:{scrollRef:d,forceScroll:f,onlyHashChange:g,hashFragment:l!==n0.Kj.NoScroll&&""!==t.hash?decodeURIComponent(t.hash.slice(1)):e.focusAndScrollRef.hashFragment},cache:a,tree:n,nextUrl:p,previousNextUrl:r,debugInfo:c}}(t,r,c,E.route,E.node,a.renderedSearch,n,f,d,S.scrollRef,h)):oZ(t,r,f)}function oK(e,t,r,n,a,i,o,s,l,u,c,d){let f=d.tree,h=d.canonicalUrl+r.hash,p={renderedSearch:d.renderedSearch,routeTree:f,metadataVaryPath:d.metadata.varyPath,data:null,head:null,dynamicStaleAt:ij(e,-1)};return oJ(e,t,r,h,p,n,a,o,s,l,i,u,c,null,d)}let oY=["",{},null,"refetch"];async function oQ(e,t,r,n,a,i,o,s,l,u,c){let d;switch(l){case oA.Default:case oA.HistoryTraversal:case oA.Gesture:d=s;break;case oA.Hydration:case oA.RefreshAll:case oA.HMRRefresh:d=oY;break;default:d=s}let f=oE(r,{flightRouterState:d,nextUrl:i}),h=await f;if("string"==typeof h)return oZ(t,new URL(h,location.origin),c);let{flightData:p,canonicalUrl:m,renderedSearch:g,couldBeIntercepted:y,supportsPerSegmentPrefetching:v,dynamicStaleTime:b,staticStageData:w,runtimePrefetchStream:S,responseHeaders:_,debugInfo:E}=h,R=o0(e,s,p,g,b),k=R.metadataVaryPath;if(null!==k){if(iM(e,r.pathname,i,null,R.routeTree,k,y,n1(m),v,!1),null!==w){let{response:t,isResponsePartial:r}=w;og(e,t.s).then(n=>{let a=_.get(ey.eQ)??t.b;oy(e,t.f,a,t.h,n,s,g,r)}).catch(()=>{})}null!==S&&ov(e,S,s,g).then(t=>{null!==t&&ou(e,aN.PPRRuntime,t.flightDatas,t.buildId,t.isResponsePartial,t.headVaryParams,t.staleAt,t.navigationSeed,null)}).catch(()=>{})}return oJ(e,t,r,n1(m),R,n,a,o,s,l,i,u,c,E,null)}function oZ(e,t,r){return oW(t.href)?(console.error("Next.js has blocked a javascript: URL as a security precaution."),e):{canonicalUrl:t.origin===location.origin?n1(t):t.href,pushRef:{pendingPush:"push"===r,mpaNavigation:!0,preserveCustomHistoryState:!1},renderedSearch:e.renderedSearch,focusAndScrollRef:e.focusAndScrollRef,cache:e.cache,tree:e.tree,nextUrl:e.nextUrl,previousNextUrl:e.previousNextUrl,debugInfo:null}}function o0(e,t,r,n,a){let i=t,o=null,s=null;if(null!==r)for(let{segmentPath:e,tree:t,seedData:a,head:l}of r){let r=function e(t,r,n,a,i,o,s){let l;if(s===i.length)return{tree:n,data:a};let u=i[s],c=t[1],d=null!==r?r[1]:null,f={},h={};for(let t in c){let r=c[t],l=null!==d?d[t]??null:null;if(t===u){let u=e(r,l,n,a,i,o,s+2);f[t]=u.tree,h[t]=u.data}else f[t]=r,h[t]=l}if(l=[t[0],f],2 in t){let e=t[2];null!=e&&(l[2]=[e[0],o])}return 3 in t&&(l[3]=t[3]),4 in t&&(l[4]=t[4]),{tree:l,data:[null,h,null,!0,null]}}(i,o,t,a,e,n,0);i=r.tree,o=r.data,s=l}let l={metadataVaryPath:null};return{routeTree:ot(i,n,l),metadataVaryPath:l.metadataVaryPath,data:o,renderedSearch:n,head:s,dynamicStaleAt:ij(e,a)}}async function o1(e,t,r,n,i,o,s,l,u,c){let d=ik,f=null!==d?d.fetchStrategy:aN.PPR,{transitionToCapturedSPA:h,updateCapturedSPAToTree:p}=a("./dist/esm/client/components/segment-cache/navigation-testing-lock.js");h(o,null);let m=aI(t.href,s);await new Promise(e=>{a4(m,o,f,aD.Default,null,e)});let g=await oG(e,t,r,n,i,o,s,l,u,c);return p(o,g.tree),g}let o2=1e3*Number(process.env.__NEXT_CLIENT_ROUTER_DYNAMIC_STALETIME),o4=iU(Number(process.env.__NEXT_CLIENT_ROUTER_STATIC_STALETIME)),o3=process.env.__NEXT_ROUTER_BASEPATH||"";function o6(e,t){return(e=>{if(!e.startsWith("/")||process.env.__NEXT_MANUAL_TRAILING_SLASH)return e;let{pathname:t,query:r,hash:n}=eS(e);if(process.env.__NEXT_TRAILING_SLASH)if(/\.[^/]+\/?$/.test(t));else if(t.endsWith("/"))return`${t}${r}${n}`;else return`${t}/${r}${n}`;return`${ew(t)}${r}${n}`})(process.env.__NEXT_MANUAL_CLIENT_BASE_PATH&&!t?e:e_(e,o3))}let o8=/[\w-]+-Google|Google-[\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight/i,o9=/Googlebot(?!-)|Googlebot$/i;function o5(e){return e.origin!==window.location.origin}o8.source;var o7=a("./dist/esm/shared/lib/is-thenable.js");function se(e,t){null!==e.pending?(e.pending=e.pending.next,null!==e.pending&&st({actionQueue:e,action:e.pending,setState:t})):e.needsRefresh&&(e.needsRefresh=!1,e.dispatch({type:n0.z8},t))}async function st({actionQueue:e,action:t,setState:r}){let n=e.state;e.pending=t;let a=t.payload,i=e.action(n,a);function o(n){if(t.discarded){t.payload.type===n0.s8&&t.payload.didRevalidate&&(e.needsRefresh=!0),se(e,r);return}e.state=n,se(e,r),t.resolve(n)}(0,o7.Q)(i)?i.then(o,n=>{se(e,r),t.reject(n)}):o(i)}function sr(e,t){let r={state:e,dispatch:(e,t)=>(function(e,t,r){let n={resolve:r,reject:()=>{}};if(t.type!==n0.IU){let e=new Promise((e,t)=>{n={resolve:e,reject:t}});(0,O.startTransition)(()=>{r(e)})}let a={payload:t,next:null,resolve:n.resolve,reject:n.reject};null===e.pending?(e.last=a,st({actionQueue:e,action:a,setState:r})):t.type===n0.Zb||t.type===n0.IU?(e.pending.discarded=!0,a.next=e.pending.next,st({actionQueue:e,action:a,setState:r})):(null!==e.last&&(e.last.next=a),e.last=a)})(r,e,t),action:async(e,t)=>e,pending:null,last:null,onRouterTransitionStart:null!==t&&"function"==typeof t.onRouterTransitionStart?t.onRouterTransitionStart:null};return r}function sn(e,t,r,n,a){if(a)for(let e of a)(0,O.addTransitionType)(e);let i=new URL(o6(e),location.href);process.env.__NEXT_APP_NAV_FAIL_HANDLING&&(window.next.__pendingUrl=i),(0,O.startTransition)(()=>{ik?.setOptimisticLinkStatus(iP),n?.setOptimisticLinkStatus(ix),ik=n});(0,n7.Dd)({type:n0.Zb,url:i,isExternalUrl:o5(i),locationSearch:location.search,scrollBehavior:r,navigateType:t})}let sa={back:()=>window.history.back(),forward:()=>window.history.forward(),prefetch:(e,t)=>{var r,n,a,i;let o,s;if(oW(e))throw Object.defineProperty(Error("Next.js has blocked a javascript: URL as a security precaution."),"__NEXT_ERROR_CODE",{value:"E978",enumerable:!1,configurable:!0});let l=function(){throw Object.defineProperty(Error("Internal Next.js error: Router action dispatched before initialization."),"__NEXT_ERROR_CODE",{value:"E668",enumerable:!1,configurable:!0})}();switch(t?.kind??n0.ob.AUTO){case n0.ob.AUTO:o=aN.PPR;break;case n0.ob.FULL:o=aN.Full;break;default:o=aN.PPR}r=l.state.nextUrl,n=l.state.tree,a=o,i=t?.onInvalidate??null,null===(s=function(e){var t,r;let n;if(r=t=window.navigator.userAgent,o9.test(r)||o8.test(t))return null;try{n=new URL(o6(e),window.location.href)}catch(t){throw Object.defineProperty(Error(`Cannot prefetch '${e}' because it cannot be converted to a URL.`),"__NEXT_ERROR_CODE",{value:"E234",enumerable:!1,configurable:!0})}return o5(n)?null:n}(e))||a4(aI(s.href,r),n,a,aD.Default,i)},replace:(e,t)=>{if(oW(e))throw Object.defineProperty(Error("Next.js has blocked a javascript: URL as a security precaution."),"__NEXT_ERROR_CODE",{value:"E978",enumerable:!1,configurable:!0});(0,O.startTransition)(()=>{sn(e,"replace",t?.scroll===!1?n0.Kj.NoScroll:n0.Kj.Default,null,t?.transitionTypes)})},push:(e,t)=>{if(oW(e))throw Object.defineProperty(Error("Next.js has blocked a javascript: URL as a security precaution."),"__NEXT_ERROR_CODE",{value:"E978",enumerable:!1,configurable:!0});(0,O.startTransition)(()=>{sn(e,"push",t?.scroll===!1?n0.Kj.NoScroll:n0.Kj.Default,null,t?.transitionTypes)})},refresh:()=>{(0,O.startTransition)(()=>{(0,n7.Dd)({type:n0.z8})})},hmrRefresh:()=>{throw Object.defineProperty(Error("hmrRefresh can only be used in development mode. Please use refresh instead."),"__NEXT_ERROR_CODE",{value:"E485",enumerable:!1,configurable:!0})}};process.env.__NEXT_GESTURE_TRANSITION&&(sa.experimental_gesturePush=function(e,t){if(process.env.__NEXT_GESTURE_TRANSITION){if(oW(e))throw Object.defineProperty(Error("Next.js has blocked a javascript: URL as a security precaution."),"__NEXT_ERROR_CODE",{value:"E978",enumerable:!1,configurable:!0});!0;return}}),O.Component;let si=a("../../app-render/work-async-storage.external").workAsyncStorage;function so({error:e}){if(si){let t=si.getStore();if(t?.isStaticGeneration)throw e&&console.error(e),e}}class ss extends O.Component{static{this.contextType=nJ}constructor(e){super(e),this.reset=()=>{this.setState({error:null})},this.unstable_retry=()=>{(0,O.startTransition)(()=>{this.context?.refresh(),this.reset()})},this.state={error:null,previousPathname:this.props.pathname}}static getDerivedStateFromError(e){if((0,tX.p)(e))throw e;return{error:e}}static getDerivedStateFromProps(e,t){let{error:r}=t;return(process.env.__NEXT_APP_NAV_FAIL_HANDLING&&r,e.pathname!==t.previousPathname&&t.error)?{error:null,previousPathname:e.pathname}:{error:t.error,previousPathname:e.pathname}}render(){return this.state.error&&1?(so({error:this.state.error}),(0,T.jsxs)(T.Fragment,{children:[this.props.errorStyles,this.props.errorScripts,(0,T.jsx)(this.props.errorComponent,{error:this.state.error,reset:this.reset,unstable_retry:this.unstable_retry})]})):this.props.children}}function sl({errorComponent:e,errorStyles:t,errorScripts:r,children:n}){let i=!function(){{let{workUnitAsyncStorage:e}=a("../../app-render/work-unit-async-storage.external"),t=e.getStore();if(!t)return!1;switch(t.type){case"prerender":case"prerender-client":case"prerender-ppr":case"validation-client":let r=t.fallbackRouteParams;return!!r&&r.size>0}return!1}}()?(0,O.useContext)(n6):null;return e?(0,T.jsx)(ss,{pathname:i,errorComponent:e,errorStyles:t,errorScripts:r,children:n}):(0,T.jsx)(T.Fragment,{children:n})}function su({children:e,errorComponent:t,errorStyles:r,errorScripts:n}){return(0,T.jsx)(sl,{errorComponent:t,errorStyles:r,errorScripts:n,children:e})}let sc={fontFamily:'system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"',height:"100vh",display:"flex",alignItems:"center",justifyContent:"center"},sd={marginTop:"-32px",maxWidth:"325px",padding:"32px 28px",textAlign:"left"},sf={marginBottom:"24px"},sh={fontSize:"24px",fontWeight:500,letterSpacing:"-0.02em",lineHeight:"32px",margin:"0 0 12px 0",color:"var(--next-error-title)"},sp={fontSize:"14px",fontWeight:400,lineHeight:"21px",margin:"0 0 20px 0",color:"var(--next-error-message)"},sm={margin:0},sg={display:"flex",gap:"8px",alignItems:"center"},sy={display:"inline-flex",alignItems:"center",justifyContent:"center",height:"32px",padding:"0 12px",fontSize:"14px",fontWeight:500,lineHeight:"20px",borderRadius:"6px",cursor:"pointer",color:"var(--next-error-btn-text)",background:"var(--next-error-btn-bg)",border:"var(--next-error-btn-border)"},sv={display:"inline-flex",alignItems:"center",justifyContent:"center",height:"32px",padding:"0 12px",fontSize:"14px",fontWeight:500,lineHeight:"20px",borderRadius:"6px",cursor:"pointer",color:"var(--next-error-btn-secondary-text)",background:"var(--next-error-btn-secondary-bg)",border:"var(--next-error-btn-secondary-border)"},sb={position:"fixed",bottom:"32px",left:"0",right:"0",textAlign:"center",fontFamily:'ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace',fontSize:"12px",lineHeight:"18px",fontWeight:400,margin:"0",color:"var(--next-error-digest)"},sw=` +:root { + --next-error-bg: #fff; + --next-error-text: #171717; + --next-error-title: #171717; + --next-error-message: #171717; + --next-error-digest: #666666; + --next-error-btn-text: #fff; + --next-error-btn-bg: #171717; + --next-error-btn-border: none; + --next-error-btn-secondary-text: #171717; + --next-error-btn-secondary-bg: transparent; + --next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08); +} +@media (prefers-color-scheme: dark) { + :root { + --next-error-bg: #0a0a0a; + --next-error-text: #ededed; + --next-error-title: #ededed; + --next-error-message: #ededed; + --next-error-digest: #a0a0a0; + --next-error-btn-text: #0a0a0a; + --next-error-btn-bg: #ededed; + --next-error-btn-border: none; + --next-error-btn-secondary-text: #ededed; + --next-error-btn-secondary-bg: transparent; + --next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14); + } +} +body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); } +`.replace(/\n\s*/g,"");function sS(){return(0,T.jsx)("svg",{width:"32",height:"32",viewBox:"-0.2 -1.5 32 32",fill:"none",style:sf,children:(0,T.jsx)("path",{d:"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z",fill:"var(--next-error-title)"})})}let s_=function({error:e}){let t=e?.digest,r=!!t;return so({error:e}),(0,T.jsxs)("html",{id:"__next_error__",children:[(0,T.jsx)("head",{children:(0,T.jsx)("style",{dangerouslySetInnerHTML:{__html:sw}})}),(0,T.jsxs)("body",{children:[(0,T.jsx)("div",{style:sc,children:(0,T.jsxs)("div",{style:sd,children:[(0,T.jsx)(sS,{}),(0,T.jsx)("h1",{style:sh,children:"This page couldn’t load"}),(0,T.jsx)("p",{style:sp,children:r?"A server error occurred. Reload to try again.":"Reload to try again, or go back."}),(0,T.jsxs)("div",{style:sg,children:[(0,T.jsx)("form",{style:sm,children:(0,T.jsx)("button",{type:"submit",style:sy,children:"Reload"})}),!r&&(0,T.jsx)("button",{type:"button",style:sv,onClick:()=>{window.history.length>1?window.history.back():window.location.href="/"},children:"Back"})]})]})}),t&&(0,T.jsxs)("p",{style:sb,children:["ERROR ",t]})]})]})};var sE=a("./dist/esm/lib/framework/boundary-constants.js");let sR={[sE.NJ]:function({children:e}){return e},[sE.A$]:function({children:e}){return e},[sE.DQ]:function({children:e}){return e},[sE.ri]:function({children:e}){return e}};sR[sE.NJ.slice(0)],sR[sE.A$.slice(0)],sR[sE.DQ.slice(0)];let sk=sR[sE.ri.slice(0)],sx={};function sP({appRouterState:e}){return(0,O.useInsertionEffect)(()=>{process.env.__NEXT_APP_NAV_FAIL_HANDLING&&(window.next.__pendingUrl=void 0);let{tree:t,pushRef:r,canonicalUrl:n,renderedSearch:a}=e,i={...r.preserveCustomHistoryState?window.history.state:{},__NA:!0,__PRIVATE_NEXTJS_INTERNALS_TREE:{tree:t,renderedSearch:a}};r.pendingPush&&n1(new URL(window.location.href))!==n?(r.pendingPush=!1,window.history.pushState(i,"",n)):window.history.replaceState(i,"",n),ae=t},[e]),(0,O.useEffect)(()=>{iA(e.nextUrl,e.tree)},[e.nextUrl,e.tree]),null}function sC(e){null==e&&(e={});let t=window.history.state,r=t?.__NA;r&&(e.__NA=r);let n=t?.__PRIVATE_NEXTJS_INTERNALS_TREE;return n&&(e.__PRIVATE_NEXTJS_INTERNALS_TREE=n),e}function sT({headCacheNode:e}){let t=null!==e?e.head:null,r=null!==e?e.prefetchHead:null,n=null!==r?r:t;return(0,O.useDeferredValue)(t,n)}function sA({actionQueue:e,globalError:t,webSocket:r,staticIndicatorState:n}){let a,i=(0,n7.n5)(e),{canonicalUrl:o}=i,{searchParams:s,pathname:l}=(0,O.useMemo)(()=>{var e;let t=new URL(o,"http://n");return{searchParams:t.searchParams,pathname:eR(t.pathname,af)?(e=t.pathname,process.env.__NEXT_MANUAL_CLIENT_BASE_PATH&&!eR(e,af)||0===ah.length||(e=e.slice(ah.length)).startsWith("/")||(e=`/${e}`),e):t.pathname}},[o]);(0,O.useEffect)(()=>{let e,t=(e=function e(t){let r=(e=>{if("string"==typeof e)return"children"===e?"":e.startsWith(re.OG)?"page":e;let[t,,r]=e;switch(r){case"c":return`[...${t}]`;case"ci(..)(..)":return`(..)(..)[...${t}]`;case"ci(.)":return`(.)[...${t}]`;case"ci(..)":return`(..)[...${t}]`;case"ci(...)":return`(...)[...${t}]`;case"oc":return`[[...${t}]]`;case"d":default:return`[${t}]`;case"di(..)(..)":return`(..)(..)[${t}]`;case"di(.)":return`(.)[${t}]`;case"di(..)":return`(..)[${t}]`;case"di(...)":return`(...)[${t}]`}})(t[0]);if(r===re.WO)return;if("page"===r)return[r];let n=t[1]??{},a=n.children?e(n.children):void 0;if(void 0!==a)return""===r?a:[ap(r),...a];for(let[t,a]of Object.entries(n)){if("children"===t)continue;let n=e(a);if(void 0!==n)return""===r?n:[ap(r),...n]}}(i.tree))?`/${e.join("/")}`:void 0;void 0!==t?window.next.__internal_src_page=t:delete window.next.__internal_src_page},[i.tree]),(0,O.useEffect)(()=>{function e(e){e.persisted&&window.history.state?.__PRIVATE_NEXTJS_INTERNALS_TREE&&(sx.pendingMpaPath=void 0,(0,n7.Dd)({type:n0.IU,url:new URL(window.location.href),historyState:window.history.state.__PRIVATE_NEXTJS_INTERNALS_TREE}))}return window.addEventListener("pageshow",e),()=>{window.removeEventListener("pageshow",e)}},[]),(0,O.useEffect)(()=>{function e(e){let t="reason"in e?e.reason:e.error;if((0,tO.n)(t)){e.preventDefault();let r=tj(t);"push"===t$(t)?sa.push(r,{}):sa.replace(r,{})}}return window.addEventListener("error",e),window.addEventListener("unhandledrejection",e),()=>{window.removeEventListener("error",e),window.removeEventListener("unhandledrejection",e)}},[]);let{pushRef:u}=i;if(u.mpaNavigation){if(sx.pendingMpaPath!==o){let e=window.location;u.pendingPush?e.assign(o):e.replace(o),sx.pendingMpaPath=o}throw ad}(0,O.useEffect)(()=>{let e=window.history.pushState.bind(window.history),t=window.history.replaceState.bind(window.history),r=e=>{let t=window.location.href,r=window.history.state?.__PRIVATE_NEXTJS_INTERNALS_TREE;(0,O.startTransition)(()=>{(0,n7.Dd)({type:n0.IU,url:new URL(e??t,t),historyState:r})})};window.history.pushState=function(t,n,a){return t?.__NA||t?._N||(t=sC(t),a&&r(a)),e(t,n,a)},window.history.replaceState=function(e,n,a){return e?.__NA||e?._N||(e=sC(e),a&&r(a)),t(e,n,a)};let n=e=>{if(e.state){if(!e.state.__NA)return void window.location.reload();(0,O.startTransition)(()=>{var t,r;t=window.location.href,r=e.state.__PRIVATE_NEXTJS_INTERNALS_TREE,(0,n7.Dd)({type:n0.IU,url:new URL(t),historyState:r})})}};return window.addEventListener("popstate",n),()=>{window.history.pushState=e,window.history.replaceState=t,window.removeEventListener("popstate",n)}},[]);let{cache:c,tree:d,nextUrl:f,focusAndScrollRef:h,previousNextUrl:p}=i,m=(0,O.useMemo)(()=>(function e(t,r,n,a){if(0===Object.keys(r).length)return[t,n,a];let i=Object.keys(r).filter(e=>"children"!==e);"children"in r&&i.unshift("children");let o=t.slots;if(null!==o)for(let t of i){let[a,i]=r[t];if(a===re.WO)continue;let s=o[t];if(!s)continue;let l=e(s,i,n+"/"+ac(a),n+"/"+ac(a,!0));if(l)return l}return null})(c,d[1],"",""),[c,d]),g=(0,O.useMemo)(()=>(function e(t,r={}){for(let n of Object.values(t[1])){let t=n[0],a=Array.isArray(t),i=a?t[1]:t;!i||i.startsWith(re.OG)||(a&&("c"===t[2]||"oc"===t[2])?r[t[0]]=t[1].split("/"):a&&(r[t[0]]=t[1]),r=e(n,r))}return r})(d),[d]),y=(0,O.useMemo)(()=>({parentTree:d,parentCacheNode:c,parentSegmentPath:null,parentParams:{},parentLoadingData:null,debugNameContext:"/",url:o,isActive:!0}),[d,c,o]),v=(0,O.useMemo)(()=>({tree:d,focusAndScrollRef:h,nextUrl:f,previousNextUrl:p}),[d,h,f,p]);if(null!==m){let[e,t,r]=m;a=(0,T.jsx)(sT,{headCacheNode:e},r)}else a=null;let b=(0,T.jsxs)(au,{children:[a,(0,T.jsx)(sk,{children:c.rsc}),(0,T.jsx)(ar,{tree:d})]});return b=(0,T.jsx)(su,{errorComponent:t[0],errorStyles:t[1],children:b}),(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(sP,{appRouterState:i}),null,(0,T.jsx)(n9.Provider,{value:null,children:(0,T.jsx)(n8.Provider,{value:g,children:(0,T.jsx)(n6.Provider,{value:l,children:(0,T.jsx)(n3.Provider,{value:s,children:(0,T.jsx)(nY.Provider,{value:v,children:(0,T.jsx)(nJ.Provider,{value:sa,children:(0,T.jsx)(nK.Provider,{value:y,children:b})})})})})})})]})}function sO({actionQueue:e,globalErrorState:t,webSocket:r,staticIndicatorState:n}){process.env.__NEXT_APP_NAV_FAIL_HANDLING&&(0,O.useEffect)(()=>{let e=e=>{"reason"in e?e.reason:e.error};return window.addEventListener("unhandledrejection",e),window.addEventListener("error",e),()=>{window.removeEventListener("error",e),window.removeEventListener("unhandledrejection",e)}},[]);let a=(0,T.jsx)(sA,{actionQueue:e,globalError:t,webSocket:r,staticIndicatorState:n});return(0,T.jsx)(su,{errorComponent:s_,children:a})}function sj({navigatedAt:e,initialRSCPayload:t,initialFlightStreamForCache:r,location:n}){let{c:a,f:i,q:o,i:s,S:l,s:u,l:c,h:d,p:f,d:h}=t,p=a.join("/"),{tree:m,seedData:g,head:y}=aw(i[0]),v=n?n1(n):p,b={metadataVaryPath:null},w=ot(m,o,b),S=b.metadataVaryPath,_=oj(e,w,null,1,g,y,ij(e,h??-1),!1,{separateRefreshUrls:null,scrollRef:null});if(null!==n&&null!==S){if(iM(Date.now(),n.pathname,null,null,w,S,s,v,l,!1),null!==g&&void 0!==u)if(void 0!==c&&null!=r)ox(r,c,void 0).then(async e=>{let t=Date.now(),r=await og(t,e.s);oy(t,e.f,void 0,e.h,r,m,o,!0)}).catch(()=>{});else{let e=Date.now();og(e,u).then(t=>{oy(e,i,void 0,d,t,m,o,!1)}).catch(()=>{}),r?.cancel()}else r?.cancel();null!=f&&ov(Date.now(),f,m,o).then(e=>{null!==e&&ou(Date.now(),aN.PPRRuntime,e.flightDatas,e.buildId,e.isResponsePartial,e.headVaryParams,e.staleAt,e.navigationSeed,null)}).catch(()=>{})}return{tree:_.route,cache:_.node,pushRef:{pendingPush:!1,mpaNavigation:!1,preserveCustomHistoryState:!0},focusAndScrollRef:{scrollRef:null,forceScroll:!1,onlyHashChange:!1,hashFragment:null},canonicalUrl:v,renderedSearch:o,nextUrl:(ay(m)||n?.pathname)??null,previousNextUrl:null,debugInfo:null}}var s$=((v={}).ProspectiveRender="the prospective render",v.SegmentCollection="segment collection",v.InstantValidation="instant validation",v);function sI(e,t,r){let n;if(!tQ(e)){if(tK(e))return void console.error(e);if("object"==typeof e&&null!==e&&"string"==typeof e.message){if(n=e.message,"string"==typeof e.stack){let a=e.stack,i=a.indexOf("\n");if(i>-1){let e=Object.defineProperty(Error(`Route ${t} errored during ${r}. These errors are normally ignored and may not prevent the route from prerendering but are logged here because build debugging is enabled. + +Original Error: ${n}`),"__NEXT_ERROR_CODE",{value:"E949",enumerable:!1,configurable:!0});e.stack="Error: "+e.message+a.slice(i),console.error(e);return}}}else"string"==typeof e&&(n=e);if(n)return void console.error(`Route ${t} errored during ${r}. These errors are normally ignored and may not prevent the route from prerendering but are logged here because build debugging is enabled. No stack was provided. + +Original Message: ${n}`);console.error(`Route ${t} errored during ${r}. These errors are normally ignored and may not prevent the route from prerendering but are logged here because build debugging is enabled. The thrown value is logged just following this message`),console.error(e)}}let sD=require("next/dist/server/node-environment-extensions/fast-set-immediate.external.js"),sN=!0;function sM(){console.warn("Next.js cannot guarantee that Cache Components will run as expected due to the current runtime's implementation of `setTimeout()`.\nPlease report a github issue here: https://github.com/vercel/next.js/issues/new/")}function sL(){}function sU(e,...t){return new Promise((r,n)=>{let a,i=function(e=0){{let n=!0,a=null,i=!1,o=!1;function t(e){return i=!0,sN&&(0,sD.unpatchedSetImmediate)(()=>{o=!0}),e()}function r(e){return sN&&o&&(sN=!1,sM()),e()}return function(o){if(i)throw Object.defineProperty(new eB.z("Cannot schedule more timers into a group that already executed"),"__NEXT_ERROR_CODE",{value:"E935",enumerable:!1,configurable:!0});let s=setTimeout(n?t:r,e,o);if(n=!1,!sN)return s;try{"_idleStart"in s&&"number"==typeof s._idleStart?null===a?a=s._idleStart:s._idleStart=a:(sN=!1,sM())}catch(e){console.error(Object.defineProperty(new eB.z("An unexpected error occurred while adjusting `_idleStart` on an atomic timer",{cause:e}),"__NEXT_ERROR_CODE",{value:"E933",enumerable:!1,configurable:!0})),sN=!1,sM()}return s}}}(),o=[];o.push(i(()=>{try{(0,sD.DANGEROUSLY_runPendingImmediatesAfterCurrentTask)(),a=e(),(0,o7.Q)(a)&&a.then(sL,sL)}catch(e){for(let e=1;e{try{(0,sD.DANGEROUSLY_runPendingImmediatesAfterCurrentTask)(),r()}catch(e){for(;++a{try{(0,sD.expectNoPendingImmediates)(),r(a)}catch(e){n(e)}}))})}let sF=require("next/dist/server/app-render/console-async-storage.external.js");class sH{constructor(){this.count=0,this.earlyListeners=[],this.listeners=[],this.tickPending=!1,this.pendingTimeoutCleanup=null,this.subscribedSignals=null,this.invokeListenersIfNoPendingReads=()=>{if(this.pendingTimeoutCleanup=null,0===this.count){for(let e=0;eprocess.nextTick(()=>{if(this.tickPending=!1,0===this.count){for(let e=0;e{t=clearTimeout.bind(null,setTimeout(e,0))}),t=clearImmediate.bind(null,r),()=>t())}inputReady(){return new Promise(e=>{this.earlyListeners.push(e),0===this.count&&this.noMorePendingCaches()})}cacheReady(){return new Promise(e=>{this.listeners.push(e),0===this.count&&this.noMorePendingCaches()})}beginRead(){if(this.count++,this.pendingTimeoutCleanup&&(this.pendingTimeoutCleanup(),this.pendingTimeoutCleanup=null),null!==this.subscribedSignals)for(let e of this.subscribedSignals)e.beginRead()}endRead(){if(0===this.count)throw Object.defineProperty(new eB.z("CacheSignal got more endRead() calls than beginRead() calls"),"__NEXT_ERROR_CODE",{value:"E678",enumerable:!1,configurable:!0});if(this.count--,0===this.count&&this.noMorePendingCaches(),null!==this.subscribedSignals)for(let e of this.subscribedSignals)e.endRead()}hasPendingReads(){return this.count>0}trackRead(e){this.beginRead();let t=this.endRead.bind(this);return e.then(t,t),e}subscribeToReads(e){if(e===this)throw Object.defineProperty(new eB.z("A CacheSignal cannot subscribe to itself"),"__NEXT_ERROR_CODE",{value:"E679",enumerable:!1,configurable:!0});null===this.subscribedSignals&&(this.subscribedSignals=new Set),this.subscribedSignals.add(e);for(let t=0;tt.includes(e))}class sz{update(e){this._done||(this.currentValue=e,this._resolve?(this._resolve({value:e,done:!1}),this._resolve=null):this._buffer.push(e))}close(){!this._done&&(this._done=!0,this._resolve&&(this._resolve({value:void 0,done:!0}),this._resolve=null))}[Symbol.asyncIterator](){return{next:()=>this._buffer.length>0?Promise.resolve({value:this._buffer.shift(),done:!1}):this._done?Promise.resolve({value:void 0,done:!0}):new Promise(e=>{this._resolve=e})}}constructor(){this._resolve=null,this._done=!1,this._buffer=[],this.currentValue=0}}function sq(e){return t=>{var r;return t===ey.AR&&"number"==typeof(null==(r=e.staleTimes)?void 0:r.static)?e.staleTimes.static:t}}function sX(e,t,r){let n=e.stale;t.update(r(n)),Object.defineProperty(e,"stale",{get:()=>n,set:e=>{n=e,t.update(r(e))},configurable:!0,enumerable:!0})}async function sV(e){e.close(),await Promise.resolve(),await Promise.resolve(),await Promise.resolve()}function sW(e){let t=!1;return async function(){return t?"":(t=!0,`document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))`)}}var sG=a("./dist/compiled/path-to-regexp/index.js");let sJ=/[|\\{}()[\]^$+*?.-]/,sK=/[|\\{}()[\]^$+*?.-]/g;function sY(e){return sJ.test(e)?e.replace(sK,"\\$&"):e}function sQ(e,{includeSuffix:t=!1,includePrefix:r=!1,excludeOptionalTrailingSlash:n=!1}={}){let{parameterizedRoute:a,groups:i}=function(e,t,r){let n={},a=1,i=[];for(let o of ew(e).slice(1).split("/")){let e=nO.VB.find(e=>o.startsWith(e)),s=o.match(nL);if(e&&s&&s[2]){let{key:t,optional:r,repeat:o}=nU(s[2]);n[t]={pos:a++,repeat:o,optional:r},i.push(`/${sY(e)}([^/]+?)`)}else if(s&&s[2]){let{key:e,repeat:t,optional:o}=nU(s[2]);n[e]={pos:a++,repeat:t,optional:o},r&&s[1]&&i.push(`/${sY(s[1])}`);let l=t?o?"(?:/(.+?))?":"/(.+?)":"/([^/]+?)";r&&s[1]&&(l=l.substring(1)),i.push(l)}else i.push(`/${sY(o)}`);t&&s&&s[3]&&i.push(sY(s[3]))}return{parameterizedRoute:i.join(""),groups:n}}(e,t,r),o=a;return n||(o+="(?:/)?"),{re:RegExp(`^${o}$`),groups:i}}function sZ({interceptionMarker:e,getSafeRouteKey:t,segment:r,routeKeys:n,keyPrefix:a,backreferenceDuplicateKeys:i}){let o,{key:s,optional:l,repeat:u}=nU(r),c=s.replace(/\W/g,"");a&&(c=`${a}${c}`);let d=!1;(0===c.length||c.length>30)&&(d=!0),isNaN(parseInt(c.slice(0,1)))||(d=!0),d&&(c=t());let f=c in n;a?n[c]=`${a}${s}`:n[c]=s;let h=e?sY(e):"";return o=f&&i?`\\k<${c}>`:u?`(?<${c}>.+?)`:`(?<${c}>[^/]+?)`,{key:s,pattern:l?`(?:/${h}${o})?`:`/${h}${o}`,cleanedKey:c,optional:l,repeat:u}}var s0=a("./dist/esm/shared/lib/utils.js");let s1="_NEXTSEP_";function s2(e){return"string"==typeof e&&!!(/\/\(\.{1,3}\):[^/\s]+/.test(e)||/:[a-zA-Z_][a-zA-Z0-9_]*:[a-zA-Z_][a-zA-Z0-9_]*/.test(e))}function s4(e){let t=e;return(t=t.replace(/(\([^)]*\)):([^/\s]+)/g,`$1${s1}:$2`)).replace(/:([^:/\s)]+)(?=:)/g,`:$1${s1}`)}function s3(e){return e.replace(RegExp(`\\)${s1}`,"g"),")")}function s6(e,t,r){if("string"!=typeof e)return(0,sG.pathToRegexp)(e,t,r);let n=s2(e),a=n?s4(e):e;try{return(0,sG.pathToRegexp)(a,t,r)}catch(a){if(!n)try{let n=s4(e);return(0,sG.pathToRegexp)(n,t,r)}catch(e){}throw a}}function s8(e,t){let r=s2(e),n=r?s4(e):e;try{let e=(0,sG.compile)(n,t);if(r)return t=>s3(e(t));return e}catch(n){if(!r)try{let r=s4(e),n=(0,sG.compile)(r,t);return e=>s3(n(e))}catch(e){}throw n}}function s9({re:e,groups:t}){var r;return r=r=>{let n=e.exec(r);if(!n)return!1;let a=e=>{try{return decodeURIComponent(e)}catch{throw Object.defineProperty(new s0.Xc("failed to decode param"),"__NEXT_ERROR_CODE",{value:"E528",enumerable:!1,configurable:!0})}},i={};for(let[e,r]of Object.entries(t)){let t=n[r.pos];void 0!==t&&(r.repeat?i[e]=t.split("/").map(e=>a(e)):i[e]=a(t))}return i},e=>{let t=r(e);if(!t)return!1;let n={};for(let[e,r]of Object.entries(t))"string"==typeof r?n[e]=r.replace(RegExp(`^${s1}`),""):Array.isArray(r)?n[e]=r.map(e=>"string"==typeof e?e.replace(RegExp(`^${s1}`),""):e):n[e]=r;return n}}var s5=a("./dist/esm/shared/lib/router/utils/querystring.js");function s7(e){return e.replace(/__ESC_COLON_/gi,":")}function le(e,t){if(!e.includes(":"))return e;for(let r of Object.keys(t))e.includes(`:${r}`)&&(e=e.replace(RegExp(`:${r}\\*`,"g"),`:${r}--ESCAPED_PARAM_ASTERISKS`).replace(RegExp(`:${r}\\?`,"g"),`:${r}--ESCAPED_PARAM_QUESTION`).replace(RegExp(`:${r}\\+`,"g"),`:${r}--ESCAPED_PARAM_PLUS`).replace(RegExp(`:${r}(?!\\w)`,"g"),`--ESCAPED_PARAM_COLON${r}`));return e=e.replace(/(:|\*|\?|\+|\(|\)|\{|\})/g,"\\$1").replace(/--ESCAPED_PARAM_PLUS/g,"+").replace(/--ESCAPED_PARAM_COLON/g,":").replace(/--ESCAPED_PARAM_QUESTION/g,"?").replace(/--ESCAPED_PARAM_ASTERISKS/g,"*"),s8(`/${e}`,{validate:!1})(t).slice(1)}function lt(e){try{return decodeURIComponent(e)}catch{return e}}function lr(e){let t=function(e){let t;try{t=new URL(e,"http://n")}catch{}return t}(e);if(!t)return;let r={};for(let e of t.searchParams.keys()){let n=t.searchParams.getAll(e);r[e]=n.length>1?n:n[0]}return{query:r,hash:t.hash,search:t.search,path:t.pathname,pathname:t.pathname,href:`${t.pathname}${t.search}${t.hash}`,host:"",hostname:"",auth:"",protocol:"",slashes:null,port:""}}let ln=/https?|ftp|gopher|file/;function la(e){let{auth:t,hostname:r}=e,n=e.protocol||"",a=e.pathname||"",i=e.hash||"",o=e.query||"",s=!1;t=t?encodeURIComponent(t).replace(/%3A/i,":")+"@":"",e.host?s=t+e.host:r&&(s=t+(~r.indexOf(":")?`[${r}]`:r),e.port&&(s+=":"+e.port)),o&&"object"==typeof o&&(o=String(s5.Bw(o)));let l=e.search||o&&`?${o}`||"";return n&&!n.endsWith(":")&&(n+=":"),e.slashes||(!n||ln.test(n))&&!1!==s?(s="//"+(s||""),a&&"/"!==a[0]&&(a="/"+a)):s||(s=""),i&&"#"!==i[0]&&(i="#"+i),l&&"?"!==l[0]&&(l="?"+l),a=a.replace(/[?#]/g,encodeURIComponent),l=l.replace("#","%23"),`${n}${s}${a}${l}${i}`}function li(e,t){for(let r in delete e.nextInternalLocale,e){let n=r!==ey.AA&&r.startsWith(ey.AA),a=r!==ey.h&&r.startsWith(ey.h);(n||a||t.includes(r))&&delete e[r]}}function lo(e,t){return"string"==typeof e[ey.vS]&&e[ey.c1]===t?e[ey.vS].split(","):[]}let ls=require("next/dist/server/app-render/module-loading/track-module-loading.external.js"),ll={deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[32,48,64,96,128,256,384],path:"/_next/image",loader:"default",loaderFile:"",domains:[],disableStaticImages:!1,minimumCacheTTL:14400,formats:["image/webp"],maximumDiskCacheSize:void 0,maximumRedirects:3,maximumResponseBody:5e7,dangerouslyAllowLocalIP:!1,dangerouslyAllowSVG:!1,contentSecurityPolicy:"script-src 'none'; frame-src 'none'; sandbox;",contentDispositionType:"attachment",localPatterns:void 0,remotePatterns:[],qualities:[75],unoptimized:!1,customCacheHandler:!1},lu=O.createContext(ll);async function lc(e){let{mod:t}=await r2(e),r=t?t.unstable_instant:void 0;if(r&&"object"==typeof r&&"runtime"===r.prefetch)return!0;let{parallelRoutes:n}=r3(e);for(let e in n){let t=n[e];if(await lc(t))return!0}return!1}async function ld(e){let{mod:t}=await r2(e),r=t?t.unstable_instant:void 0;if(void 0!==r){if("object"==typeof r)return!1;else if(!1===r)return!0}let{parallelRoutes:n}=r3(e);for(let e in n){let t=n[e];if(await ld(t))return!0}return!1}async function lf(e,t){let r=await lp(e),n=!1;for(let{config:e}of r)if("object"==typeof e){if(!0===e.unstable_disableValidation||"dev"===t&&!0===e.unstable_disableDevValidation||"build"===t&&!0===e.unstable_disableBuildValidation)return!1;n=!0}return n}lg(async e=>lf(e,"dev"));let lh=lg(async e=>lf(e,"build")),lp=lg(async e=>{let t=[];async function r(e,n){let{mod:a}=await r2(e),i=a?a.unstable_instant:void 0;void 0!==i&&t.push({path:n,config:i});let{parallelRoutes:o}=r3(e);for(let e in o){let t=o[e];await r(t,[...n,e])}}return await r(e,[]),t}),lm=async e=>{let{mod:t}=await r2(e),r=t?t.unstable_instant:void 0,n=null;void 0!==r&&"object"==typeof r&&r.samples&&(n=r.samples);let{parallelRoutes:a}=r3(e);for(let e in a){if("children"!==e)continue;let t=a[e],r=await lm(t);null!==r&&(n=r)}return n};function lg(e){let t=new WeakMap;return r=>{let n=A.workAsyncStorage.getStore();if(!n)return e(r);let a=t.get(n);if(a&&a.has(r))return a.get(r);let i=e(r);return a||(a=new WeakMap,t.set(n,a)),a.set(r,i),i}}function ly(){}function lv(e,t){return e.sharedContext.deploymentId||(t.b=e.sharedContext.buildId),t}async function lb(e){let{page:t,parallelRoutes:r}=r3(e),n=null;if(void 0!==t){let e=await t[0]();if(e&&"number"==typeof e.unstable_dynamicStaleTime){let t=e.unstable_dynamicStaleTime;n=null!==n?Math.min(n,t):t}}let a=[];for(let e in r)a.push(lb(r[e]));for(let e of(await Promise.all(a)))null!==e&&(n=null!==n?Math.min(n,e):e);return n}function lw(e,t,r){return function(n){let[a,,,i]=n,o=(0,t2.Hp)(a);return o?nM(e,o.paramName,t1[o.paramType],t,r?i:null):null}}function lS({createElement:e,pagePath:t,statusCode:r,isPossibleServerAction:n}){return!n&&("/404"===t||"number"==typeof r&&r>400)?e("meta",{name:"robots",content:"noindex"}):null}async function l_(e,t){let r="",{componentMod:{routeModule:{userland:{loaderTree:n}},createElement:a,createMetadataComponents:i,Fragment:o},query:s,requestId:l,flightRouterState:u,workStore:c,url:d}=e,f=!!e.renderOpts.serveStreamingMetadata;if(!(null==t?void 0:t.skipPageRendering)){var h;let t=await lc(n),{Viewport:c,Metadata:p,MetadataOutlet:m}=i({tree:n,parsedQuery:s,pathname:d.pathname,metadataContext:tb(e.renderOpts),interpolatedParams:e.interpolatedParams,serveStreamingMetadata:f,isRuntimePrefetchable:t}),g=a(o,{key:"h"},a(lS,{createElement:a,pagePath:e.pagePath,statusCode:e.res.statusCode,isPossibleServerAction:e.isPossibleServerAction}),a(c,{key:l+"v"}),a(p,{key:l+"m"}));r=(await nT({ctx:e,loaderTreeToFilter:n,parentParams:{},flightRouterState:u,rscHead:g,injectedCSS:new Set,injectedJS:new Set,injectedFontPreloadTags:new Set,rootLayoutIncluded:!1,preloadCallbacks:[],MetadataOutlet:m,hintTree:(null==(h=e.renderOpts.prefetchHints)?void 0:h[e.pagePath])??null})).map(e=>e.slice(1))}let p=e.res.getHeader("vary"),m="string"==typeof p&&p.includes(z.kO);if(null==t?void 0:t.actionResult)return lv(e,{a:t.actionResult,f:r,q:lj(s),i:!!m});let g=lv(e,{f:r,q:lj(s),i:!!m,S:c.isStaticGeneration,h:ny()});if((null==t?void 0:t.staleTimeIterable)!==void 0&&(g.s=t.staleTimeIterable),(null==t?void 0:t.staticStageByteLengthPromise)!==void 0&&(g.l=t.staticStageByteLengthPromise),(null==t?void 0:t.runtimePrefetchStream)!==void 0&&(g.p=t.runtimePrefetchStream),!c.isStaticGeneration){let t=await lb(e.componentMod.routeModule.userland.loaderTree);null!==t&&(g.d=t)}return g}function lE(e,t){var r;return{routerKind:"App Router",routePath:e.pagePath,routeType:e.isPossibleServerAction?"action":"render",renderSource:t,revalidateReason:(r=e.workStore).isOnDemandRevalidate?"on-demand":r.isStaticGeneration?"stale":void 0}}async function lR(e,t,r,n){let{htmlRequestId:a,renderOpts:i,requestId:o,workStore:l}=t,{onInstrumentationRequestError:u,setReactDebugChannel:c,isBuildTimePrerendering:d=!1}=i,f=tZ(!1,d,l.reactServerErrorsByDigest,function(r,n){return null==u?void 0:u(r,e,lE(t,"react-server-components-payload"),n)}),h=c&&ly();h&&c(h.clientSide,a,o);let{clientModules:p}=e4(),m=await eQ.workUnitAsyncStorage.run(r,l_,t,n),g=eQ.workUnitAsyncStorage.run(r,tf,t.componentMod,m,p,{onError:f,temporaryReferences:null==n?void 0:n.temporaryReferences,filterStackFrame:s,debugChannel:null==h?void 0:h.serverSide});return new tN(g,{fetchMetrics:l.fetchMetrics},null==n?void 0:n.waitUntil)}async function lk(e,t,r){let n,a,{componentMod:i,workStore:o,renderOpts:l}=t,{renderToReadableStream:u,routeModule:c}=i,{loaderTree:d}=c.userland,{onInstrumentationRequestError:f,experimental:h}=l,p=tZ(!1,!1,o.reactServerErrorsByDigest,function(r,n){return null==f?void 0:f(r,e,lE(t,"react-server-components-payload"),n)}),m=sq(h),g=new sz,y=new nd.V(null,null,!1);r.stale=ey.AR,r.stagedRendering=y,r.asyncApiPromises=lq(y,r.cookies,r.mutableCookies,r.headers),sX(r,g,m);let v=new Promise(e=>{n=e});if(await lc(d)){let e=nB();r.prerenderResumeDataCache=e;let n=new sH;(0,ls.trackPendingModules)(n),r.cacheSignal=n;let i=new TransformStream;a=i.readable,n.cacheReady().then(()=>lx(i.writable,t,e,r,p))}let b=await eQ.workUnitAsyncStorage.run(r,l_,t,{staleTimeIterable:g,staticStageByteLengthPromise:v,runtimePrefetchStream:a}),{clientModules:w}=e4();return new tN(await sU(()=>{y.advanceStage(nd.D.Static);let[e,t]=eQ.workUnitAsyncStorage.run(r,u,b,w,{onError:p,filterStackFrame:s}).tee();return lz(t,y).then(n),e},()=>{sV(g)},()=>{y.advanceStage(nd.D.Dynamic)}),{fetchMetrics:o.fetchMetrics})}async function lx(e,t,r,n,a){try{let{componentMod:i,getDynamicParamFromSegment:o}=t,{loaderTree:s}=i.routeModule.userland,l=nx(s,o),u=new sz,{result:c}=await lA(t,l_.bind(null,t,{staleTimeIterable:u}),r,null,l,n.headers,n.cookies,n.draftMode,a,u);await c.prelude.pipeTo(e)}catch{try{await e.close()}catch{}}}async function lP(e,t,r){let{workStore:n,renderOpts:a}=t,{isBuildTimePrerendering:i=!1,onInstrumentationRequestError:o}=a,s=tZ(!1,i,n.reactServerErrorsByDigest,function(r,n){return null==o?void 0:o(r,e,lE(t,"react-server-components-payload"),n)}),l={},u=new sz,{componentMod:{routeModule:{userland:{loaderTree:c}}},getDynamicParamFromSegment:d}=t,f=nx(c,d),h=nB();await lC(t,l_.bind(null,t),h,null,f,r.headers,r.cookies,r.draftMode);let p=await lA(t,l_.bind(null,t,{staleTimeIterable:u}),h,null,f,r.headers,r.cookies,r.draftMode,s,u);return lF(p,l,n),l.fetchMetrics=t.workStore.fetchMetrics,new tN(p.result.prelude,l)}async function lC(e,t,r,n,a,i,o,l){let{implicitTags:u,renderOpts:c,workStore:d}=e,{ComponentMod:f}=c,h=new AbortController,p=new AbortController,m=new sH,g={type:"prerender-runtime",phase:"render",rootParams:a,implicitTags:u,renderSignal:p.signal,controller:h,cacheSignal:m,dynamicTracking:null,revalidate:1,expire:0,stale:ey.AR,tags:[...u.tags],renderResumeDataCache:n,prerenderResumeDataCache:r,hmrRefreshHash:void 0,varyParamsAccumulator:null,stagedRendering:null,headers:i,cookies:o,draftMode:l},{clientModules:y}=e4(),v=await eQ.workUnitAsyncStorage.run(g,t),b={filterStackFrame:s,onError:e=>{let t=tQ(e);return t||(h.signal.aborted?void 0:void((process.env.NEXT_DEBUG_BUILD||process.env.__NEXT_VERBOSE_LOGGING)&&sI(e,d.route,s$.ProspectiveRender)))},signal:p.signal},w=eQ.workUnitAsyncStorage.run(g,tg(f),v,y,b);if((0,ls.trackPendingModules)(m),await m.cacheReady(),p.abort(),h.abort(),d.invalidDynamicUsageError)throw d.invalidDynamicUsageError;try{return await tr(w)}catch(e){return p.signal.aborted||h.signal.aborted||(process.env.NEXT_DEBUG_BUILD||process.env.__NEXT_VERBOSE_LOGGING)&&sI(e,d.route,s$.ProspectiveRender),null}}function lT(e,t){let r=new Uint8Array([t?126:35]);return e.pipeThrough(new TransformStream({start(e){e.enqueue(r)}}))}async function lA(e,t,r,n,a,i,o,l,u,c){let{implicitTags:d,renderOpts:f}=e,{ComponentMod:h,experimental:p,isDebugDynamicAccesses:m}=f,g=sq(p),y=!1,v=new AbortController,b=(0,tV.uO)(m),w=new nd.V(v.signal,null,!0),S=ng(),_={type:"prerender-runtime",phase:"render",rootParams:a,implicitTags:d,renderSignal:v.signal,controller:v,cacheSignal:null,dynamicTracking:b,revalidate:1,expire:0,stale:ey.AR,tags:[...d.tags],prerenderResumeDataCache:r,renderResumeDataCache:n,hmrRefreshHash:void 0,varyParamsAccumulator:S,stagedRendering:w,headers:i,cookies:o,draftMode:l};sX(_,c,g);let{clientModules:E}=e4(),R=await eQ.workUnitAsyncStorage.run(_,t),k=!0,x=await sU(async()=>{w.advanceStage(nd.D.EarlyStatic);let e=await eQ.workUnitAsyncStorage.run(_,tg(h),R,E,{filterStackFrame:s,onError:u,signal:v.signal});return k=!1,e},()=>{w.advanceStage(nd.D.Static)},()=>{w.advanceStage(nd.D.EarlyRuntime)},()=>{w.advanceStage(nd.D.Runtime)},()=>{Promise.all([sV(c),nv(S)]).then(()=>{if(v.signal.aborted){y=!0;return}k&&(y=!0),v.abort()})});return x.prelude=lT(x.prelude,y),{result:x,dynamicAccess:b,isPartial:y,collectedRevalidate:_.revalidate,collectedExpire:_.expire,collectedStale:c.currentValue,collectedTags:_.tags}}function lO(e){return(e.pathname+e.search).split("/")}function lj(e){let t=[];for(let r in e){let n=e[r];if(null!=n)if(Array.isArray(n))for(let e of n)t.push(`${encodeURIComponent(r)}=${encodeURIComponent(String(e))}`);else t.push(`${encodeURIComponent(r)}=${encodeURIComponent(String(n))}`)}return 0===t.length?"":"?"+t.join("&")}async function l$(e,t,r){var n;let a,{is404:i,prerenderHTTPError:o,staleTimeIterable:s,staticStageByteLengthPromise:l,runtimePrefetchStream:u}=r,c=new Set,d=new Set,f=new Set,{getDynamicParamFromSegment:h,query:p,appUsingSizeAdjustment:m,componentMod:{createMetadataComponents:g,createElement:y,Fragment:v},url:b,workStore:w}=t,S=(null==(n=t.renderOpts.prefetchHints)?void 0:n[t.pagePath])??null,_=await rr(e,S,h,p),E=!!t.renderOpts.serveStreamingMetadata,R=!!e[2]["global-not-found"],k=await lc(e),{Viewport:x,Metadata:P,MetadataOutlet:C}=g({tree:e,errorType:i&&!R?"not-found":void 0,parsedQuery:p,pathname:b.pathname,metadataContext:tb(t.renderOpts),interpolatedParams:t.interpolatedParams,serveStreamingMetadata:E,isRuntimePrefetchable:k}),T=[],A=await n_({ctx:t,loaderTree:e,parentParams:{},parentOptionalCatchAllParamName:null,parentRuntimePrefetchable:!1,injectedCSS:c,injectedJS:d,injectedFontPreloadTags:f,rootLayoutIncluded:!1,missingSlots:a,preloadCallbacks:T,authInterrupts:t.renderOpts.experimental.authInterrupts,MetadataOutlet:C,prerenderHTTPError:o}),O=t.res.getHeader("vary"),j="string"==typeof O&&O.includes(z.kO),$=y(v,{key:"h"},y(lS,{createElement:y,pagePath:t.pagePath,statusCode:t.res.statusCode,isPossibleServerAction:t.isPossibleServerAction}),y(x,null),y(P,null),m?y("meta",{name:"next-size-adjust",content:""}):null),{GlobalError:I,styles:D}=await lZ(e,t),N=w.isStaticGeneration&&!0===t.renderOpts.experimental.isRoutePPREnabled;return lv(t,{P:y(lI,{preloadCallbacks:T}),c:lO(b),q:lj(p),i:!!j,f:[[_,A,$,N]],m:a,G:[I,D],S:w.isStaticGeneration||t.renderOpts.cacheComponents,h:ny(),s:s,l:l,p:u,d:w.isStaticGeneration?void 0:await lb(e)??void 0})}function lI({preloadCallbacks:e}){return e.forEach(e=>e()),null}async function lD(e,t,r,n){var a;let{getDynamicParamFromSegment:i,query:o,componentMod:{createMetadataComponents:s,createElement:l,Fragment:u},url:c,workStore:d}=t,f=!!t.renderOpts.serveStreamingMetadata,h=await lc(e),{Viewport:p,Metadata:m}=s({tree:e,parsedQuery:o,pathname:c.pathname,metadataContext:tb(t.renderOpts),errorType:n,interpolatedParams:t.interpolatedParams,serveStreamingMetadata:f,isRuntimePrefetchable:h}),g=l(u,{key:"h"},l(lS,{createElement:l,pagePath:t.pagePath,statusCode:t.res.statusCode,isPossibleServerAction:t.isPossibleServerAction}),l(p,null),"",l(m,null)),y=(null==(a=t.renderOpts.prefetchHints)?void 0:a[t.pagePath])??null,v=await rr(e,y,i,o);r&&(tW(r)||Object.defineProperty(Error(r+""),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0}));let b=[l("html",{id:"__next_error__"},l("head",null),l("body",null,null)),{},null,!1,null],{GlobalError:w,styles:S}=await lZ(e,t),_=d.isStaticGeneration&&!0===t.renderOpts.experimental.isRoutePPREnabled;return lv(t,{c:lO(c),q:lj(o),m:void 0,i:!1,f:[[v,b,g,_]],G:[w,S],S:d.isStaticGeneration||t.renderOpts.cacheComponents,h:ny()})}function lN({reactServerStream:e,reactDebugStream:t,debugEndTime:r,preinitScripts:n,ServerInsertedHTMLProvider:i,nonce:o,images:s}){n();let l=O.use(e7(e,t,r,o)),u=sr(sj({navigatedAt:-1,initialRSCPayload:l,location:null}),null),{HeadManagerContext:c}=a("./dist/esm/shared/lib/head-manager-context.shared-runtime.js");return(0,T.jsx)(c.Provider,{value:{appDir:!0,nonce:o},children:(0,T.jsx)(lu.Provider,{value:s??ll,children:(0,T.jsx)(i,{children:(0,T.jsx)(sO,{actionQueue:u,globalErrorState:l.G})})})})}function lM({reactServerStream:e,preinitScripts:t,ServerInsertedHTMLProvider:r,nonce:n,images:a}){t();let i=O.use(e7(e,void 0,void 0,n)),o=sr(sj({navigatedAt:-1,initialRSCPayload:i,location:null}),null);return(0,T.jsx)(lu.Provider,{value:a??ll,children:(0,T.jsx)(r,{children:(0,T.jsx)(sO,{actionQueue:o,globalErrorState:i.G})})})}async function lL(e,t,r,n,i,o,s,l,u,c,d,f,h){let p,m,g="/404"===n;g&&(t.statusCode=404);let y=Date.now(),{ComponentMod:v,nextFontManifest:b,serverActions:w,assetPrefix:S="",enableTainting:_,cacheComponents:E,setIsrStatus:R}=o,{cachedNavigations:k}=o.experimental;if(v.__next_app__){let e="performance"in globalThis?{require:(...e)=>{let t=performance.now();0===eN&&(eN=t);try{return eL+=1,v.__next_app__.require(...e)}finally{eM+=performance.now()-t}},loadChunk:(...e)=>{let t=performance.now(),r=v.__next_app__.loadChunk(...e);return r.finally(()=>{eM+=performance.now()-t}),r}}:v.__next_app__,t=()=>{if(!E)return!1;let e=eQ.workUnitAsyncStorage.getStore();if(!e)return!1;switch(e.type){case"prerender":case"prerender-client":case"validation-client":case"prerender-runtime":case"cache":case"private-cache":return!0;case"prerender-ppr":case"prerender-legacy":case"request":case"unstable-cache":case"generate-static-params":return!1}};globalThis.__next_require__=(...r)=>{let n=e.require(...r);return t()&&(0,ls.trackPendingImport)(n),n},globalThis.__next_chunk_load__=(...r)=>{let n=e.loadChunk(...r);return t()&&(0,ls.trackPendingChunkLoad)(n),n}}t.onClose(()=>{s.shouldTrackFetchMetrics=!1}),e.originalRequest.on("end",()=>{if("performance"in globalThis){let e=eU({reset:!0});e&&(0,j.getTracer)().startSpan($.Fx.clientComponentLoading,{startTime:e.clientComponentLoadStart,attributes:{"next.clientComponentLoadCount":e.clientComponentLoadCount,"next.span_type":$.Fx.clientComponentLoading}}).end(e.clientComponentLoadStart+e.clientComponentLoadTimes)}});let x={statusCode:g?404:void 0},C=!!(null==b?void 0:b.appUsingSizeAdjust);v.patchFetch();let{routeModule:{userland:{loaderTree:T}},taintObjectReference:A}=v;_&&A("Do not pass process.env to Client Components since it will leak sensitive data",process.env),s.fetchMetrics=[],x.fetchMetrics=s.fetchMetrics;var O=i={...i};for(let e of tv)delete O[e];let{isStaticGeneration:I}=s,{flightRouterState:D,isPrefetchRequest:N,isRuntimePrefetchRequest:M,isRSCRequest:L,isHmrRefresh:U,nonce:F}=l;l.requestId?p=l.requestId:I?p=Buffer.from(await crypto.subtle.digest("SHA-1",Buffer.from(e.url))).toString("hex"):p=a("./dist/compiled/nanoid/index.cjs").nanoid(),m=l.htmlRequestId||p;let H=lw(f,h,o.experimental.optimisticRouting),B=ri(e).isPossibleServerAction,z=P(e,"resolvedPathname");if(!z)throw Object.defineProperty(new eB.z("resolvedPathname must be set in request metadata"),"__NEXT_ERROR_CODE",{value:"E981",enumerable:!1,configurable:!0});let q=await tD(s.page,z,h),X={componentMod:v,url:r,renderOpts:o,workStore:s,parsedRequestHeaders:l,getDynamicParamFromSegment:H,interpolatedParams:f,query:i,isPrefetch:N,isPossibleServerAction:B,requestTimestamp:y,appUsingSizeAdjustment:C,flightRouterState:D,requestId:p,htmlRequestId:m,pagePath:n,assetPrefix:S,isNotFoundPath:g,nonce:F,res:t,sharedContext:d,implicitTags:q};if((0,j.getTracer)().setRootSpanAttribute("next.route",n),I){let a=(0,j.getTracer)().wrap($.Wc.getBodyResult,{spanName:`prerender route (app) ${n}`,attributes:{"next.route":n}},lQ),i=await a(e,t,X,x,T,h);if(i.dynamicAccess&&(0,tV.Lu)(i.dynamicAccess)&&o.isDebugDynamicAccesses)for(let e of(r_("The following dynamic usage was detected:"),(0,tV.JL)(i.dynamicAccess)))r_(e);if(s.invalidDynamicUsageError)throw(0,tV.gR)(s,s.invalidDynamicUsageError),new nf.f;if(i.digestErrorsMap.size){let e=i.digestErrorsMap.values().next().value;if(e)throw e}if(i.ssrErrors.length){let e=i.ssrErrors.find(e=>!eF(e)&&!(0,tz.C)(e)&&!(0,tX.p)(e));if(e)throw e}let l={metadata:x,contentType:ey.j9},u=(0,rx.C)(s);if(!1!==u){let e=u.finally(()=>{process.env.NEXT_PRIVATE_DEBUG_CACHE&&console.log("pending revalidates promise finished for:",r.href)});o.waitUntil?o.waitUntil(e):l.waitUntil=e}lF(i,x,s),i.renderResumeDataCache&&(x.renderResumeDataCache=i.renderResumeDataCache);let c=new ez(await th(i.stream),l);return s.cacheComponentsEnabled&&s.isBuildTimePrerendering&&o.runInstantValidation&&await lh(T)&&await lG(X,i.renderResumeDataCache??null),c}{let n=o.renderResumeDataCache??(null==u?void 0:u.renderResumeDataCache)??null,a=nx(T,X.getDynamicParamFromSegment),i=P(e,"fallbackParams")||null,l=tk.bind(null,e,t,r,a,q,o.onUpdateCookies,o.previewProps,U,c,n,i),d=l();if(L)if(M)return lP(e,X,d);else return E&&k?lk(e,X,d):lR(e,X,d);let f=!1,h=null;if(B){let r=await rN({req:e,res:t,ComponentMod:v,generateFlight:lR,workStore:s,requestStore:d,serverActions:w,ctx:X,metadata:x});if(r){if("not-found"===r.type){let r,n,a,o=(a=(n=!!(r=T[2])["global-not-found"])?{layout:r["global-not-found"],page:[()=>null,"next/dist/client/components/builtin/empty-stub"]}:{page:r["not-found"]},["",{children:[re.OG,{},a,null]},n?r:{"global-error":r["global-error"]},null]);return t.statusCode=404,x.statusCode=404,new ez(await lH(d,e,t,X,o,h,u,x,void 0,i),{metadata:x,contentType:ey.j9})}else if("done"===r.type)if(r.result)return r.result.assignMetadata(x),r.result;else r.formState&&(h=r.formState)}f=!0}let p={metadata:x,contentType:ey.j9},m=await lH(d,e,t,X,T,h,u,x,f?void 0:l,i);s.invalidDynamicUsageError;let g=(0,rx.C)(s);if(!1!==g){let e=g.finally(()=>{process.env.NEXT_PRIVATE_DEBUG_CACHE&&console.log("pending revalidates promise finished for:",r.href)});o.waitUntil?o.waitUntil(e):p.waitUntil=e}return new ez(m,p)}}let lU=(e,t,r,n,a,i,o,s)=>{var l,u,c;let d,f,h,p,m,g,y,v,b,w;if(!e.url)throw Object.defineProperty(Error("Invalid URL"),"__NEXT_ERROR_CODE",{value:"E182",enumerable:!1,configurable:!0});let S=(0,nG.r)(e.url,void 0,!1),_=(u=e.headers,c={isRoutePPREnabled:!0===i.experimental.isRoutePPREnabled,previewModeId:null==(l=i.previewProps)?void 0:l.previewModeId},p="1"===u[z._V],m="2"===u[z._V],g=void 0!==u[z.sX],v=(y="1"===u[z.hY])&&(!p||!c.isRoutePPREnabled)?function(e){if(void 0!==e){if(Array.isArray(e))throw Object.defineProperty(Error("Multiple router state headers were sent. This is not allowed."),"__NEXT_ERROR_CODE",{value:"E418",enumerable:!1,configurable:!0});if(e.length>4e4)throw Object.defineProperty(Error("The router state header was too large."),"__NEXT_ERROR_CODE",{value:"E142",enumerable:!1,configurable:!0});try{let t=JSON.parse(decodeURIComponent(e));return(0,t3.assert)(t,t5),t}catch{throw Object.defineProperty(Error("The router state header was sent but could not be parsed."),"__NEXT_ERROR_CODE",{value:"E10",enumerable:!1,configurable:!0})}}}(u[z.B]):void 0,b="/_tree"===u[z.qm],{flightRouterState:v,isPrefetchRequest:p,isRuntimePrefetchRequest:m,isRouteTreePrefetchRequest:b,isHmrRefresh:g,isRSCRequest:y,nonce:"string"==typeof(w=u["content-security-policy"]||u["content-security-policy-report-only"])?function(e){let t=e.split(";").map(e=>e.trim()),r=t.find(e=>e.startsWith("script-src"))||t.find(e=>e.startsWith("default-src"));if(r)for(let e of r.split(/\s+/).slice(1)){let t=e.trim().match(t4);if(t)return t[1]}}(w):void 0,previouslyRevalidatedTags:lo(u,c.previewModeId),requestId:f,htmlRequestId:h}),{isPrefetchRequest:E,previouslyRevalidatedTags:R,nonce:k}=_,x=null;if("string"==typeof i.postponed){if(a)throw Object.defineProperty(new eB.z("postponed state should not be provided when fallback params are provided"),"__NEXT_ERROR_CODE",{value:"E592",enumerable:!1,configurable:!0});d=nN(i.ComponentMod.routeModule.userland.loaderTree,i.params??{},r,a),x=function(e,t,r){try{var n,a;let i=null==(n=e.match(/^([0-9]*):/))?void 0:n[1];if(!i)throw Object.defineProperty(Error(`Invariant: invalid postponed state ${e}`),"__NEXT_ERROR_CODE",{value:"E314",enumerable:!1,configurable:!0});let o=parseInt(i),s=e.slice(i.length+1,i.length+o+1),l=nz(e.slice(i.length+o+1),r);try{if("null"===s)return{type:1,renderResumeDataCache:l};if(/^[0-9]/.test(s)){let e=null==(a=s.match(/^([0-9]*)/))?void 0:a[1];if(!e)throw Object.defineProperty(Error(`Invariant: invalid postponed state ${JSON.stringify(s)}`),"__NEXT_ERROR_CODE",{value:"E314",enumerable:!1,configurable:!0});let r=parseInt(e),n=JSON.parse(s.slice(e.length,e.length+r)),i=s.slice(e.length+r);for(let[e,[r,a]]of n){let{treeSegment:[,n]}=nM(t,e,a,null,null);i=i.replaceAll(r,n)}return{type:2,data:JSON.parse(i),renderResumeDataCache:l}}return{type:2,data:JSON.parse(s),renderResumeDataCache:l}}catch(e){return console.error("Failed to parse postponed state",e),{type:1,renderResumeDataCache:l}}}catch(e){return console.error("Failed to parse postponed state",e),{type:1,renderResumeDataCache:nB()}}}(i.postponed,d,i.experimental.maxPostponedStateSizeBytes)}else d=nN(i.ComponentMod.routeModule.userland.loaderTree,i.params??{},r,a);if((null==x?void 0:x.renderResumeDataCache)&&i.renderResumeDataCache)throw Object.defineProperty(new eB.z("postponed state and dev warmup immutable resume data cache should not be provided together"),"__NEXT_ERROR_CODE",{value:"E589",enumerable:!1,configurable:!0});let P=function({page:e,renderOpts:t,isPrefetchRequest:r,buildId:n,deploymentId:a,previouslyRevalidatedTags:i,nonce:o}){let s=!t.shouldWaitOnAllReady&&!t.supportsDynamicResponse&&!t.isDraftMode&&!t.isPossibleServerAction,l=s&&(!!process.env.NEXT_DEBUG_BUILD||"1"===process.env.NEXT_SSG_FETCH_METRICS),u={isStaticGeneration:s,page:e,route:(0,eZ.Yr)(e),incrementalCache:t.incrementalCache||globalThis.__incrementalCache,cacheLifeProfiles:t.cacheLifeProfiles,isBuildTimePrerendering:t.isBuildTimePrerendering,fetchCache:t.fetchCache,isOnDemandRevalidate:t.isOnDemandRevalidate,isDraftMode:t.isDraftMode,isPrefetchRequest:r,buildId:n,deploymentId:a,reactLoadableManifest:(null==t?void 0:t.reactLoadableManifest)||{},assetPrefix:(null==t?void 0:t.assetPrefix)||"",nonce:o,afterContext:function(e){let{waitUntil:t,onClose:r,onAfterTaskError:n}=e;return new tx.AfterContext({waitUntil:t,onClose:r,onTaskError:n})}(t),cacheComponentsEnabled:t.cacheComponents,previouslyRevalidatedTags:i,refreshTagsByCacheKind:function(){let e=new Map,t=(0,tC.fs)();if(t)for(let[r,n]of t)"refreshTags"in n&&e.set(r,tP(async()=>n.refreshTags()));return e}(),runInCleanSnapshot:(0,tT.$p)(),shouldTrackFetchMetrics:l,reactServerErrorsByDigest:new Map};return t.store=u,u}({page:i.routeModule.definition.page,renderOpts:i,isPrefetchRequest:E,buildId:s.buildId,deploymentId:s.deploymentId,previouslyRevalidatedTags:R,nonce:k});return A.workAsyncStorage.run(P,lL,e,t,S,r,n,i,P,_,x,o,s,d,a)};function lF(e,t,r){e.collectedTags&&(t.fetchTags=e.collectedTags.join(","));let n=String(e.collectedStale);t.headers??={},t.headers[z.UK]=n,!1===r.forceStatic||0===e.collectedRevalidate?t.cacheControl={revalidate:0,expire:void 0}:t.cacheControl={revalidate:!(e.collectedRevalidate>=ey.AR)&&e.collectedRevalidate,expire:e.collectedExpire>=ey.AR?void 0:e.collectedExpire},0===t.cacheControl.revalidate&&(t.staticBailoutInfo={description:r.dynamicUsageDescription,stack:r.dynamicUsageStack})}async function lH(e,t,r,n,a,i,o,l,u,c){let{assetPrefix:d,htmlRequestId:f,nonce:h,pagePath:p,renderOpts:m,requestId:g,workStore:y}=n,{basePath:v,buildManifest:b,ComponentMod:{createElement:w},crossOrigin:S,experimental:_,isBuildTimePrerendering:E=!1,onInstrumentationRequestError:R,page:k,reactMaxHeadersLength:x,setReactDebugChannel:P,shouldWaitOnAllReady:C,subresourceIntegrityManifest:A,supportsDynamicResponse:O,cacheComponents:I}=m,{cachedNavigations:D}=m.experimental,{ServerInsertedHTMLProvider:N,renderServerInsertedHTML:M}=rV(),U=sW(h),F=sB((0,j.getTracer)().getTracePropagationData(),_.clientTraceMetadata),H=b.polyfillFiles.filter(e=>e.endsWith(".js")&&!e.endsWith(".module.js")).map(e=>({src:`${d}/_next/${e}${r6(n,!1)}`,integrity:null==A?void 0:A[e],crossOrigin:S,noModule:!0,nonce:h})),[B,z]=rJ(b,d,S,A,r6(n,!0),h,k),q,X=(0,j.getTracer)().startSpan(`render route (app) ${p}`,{attributes:{"next.span_name":`render route (app) ${p}`,"next.span_type":$.Wc.getBodyResult,"next.route":p}}),V=e=>{X.isRecording()&&(e instanceof Error&&(X.recordException(e),X.setAttribute("error.type",e.name)),X.setStatus({code:j.SpanStatusCode.ERROR,message:e instanceof Error?e.message:void 0}),X.end())};return(0,j.getTracer)().withSpan(X,async()=>{var u,c;let w,{reactServerErrorsByDigest:k}=y,j=tZ(!1,E,k,function(e,r){return null==R?void 0:R(e,t,lE(n,"react-server-components"),r)},X),$=[],W=t0(!1,E,k,$,function(e){return null==R?void 0:R(e,t,lE(n,"server-rendering"),!1)},X),G=null,J=r.setHeader.bind(r),K=r.appendHeader.bind(r),{clientModules:Z}=e4();try{if(I&&D){let t,i,{renderToReadableStream:o}=n.componentMod,l=sq(_),u=new sz,c=new nd.V(null,null,!1);e.stale=ey.AR,e.stagedRendering=c,sX(e,u,l);let d=new Promise(e=>{t=e});if(await lc(a)){let t=nB();e.prerenderResumeDataCache=t;let r=new sH;(0,ls.trackPendingModules)(r),e.cacheSignal=r;let a=new TransformStream;i=a.readable,r.cacheReady().then(()=>lx(a.writable,n,t,e,j))}let f=await eQ.workUnitAsyncStorage.run(e,l$,a,n,{is404:404===r.statusCode,staleTimeIterable:u,staticStageByteLengthPromise:d,runtimePrefetchStream:i}),h=await sU(()=>{c.advanceStage(nd.D.Static);let[r,n]=eQ.workUnitAsyncStorage.run(e,o,f,Z,{onError:j,filterStackFrame:s}).tee();return lz(n,c).then(t),r},()=>{sV(u)},()=>{c.advanceStage(nd.D.Dynamic)});G=new tt(h)}else{let t=await eQ.workUnitAsyncStorage.run(e,l$,a,n,{is404:404===r.statusCode}),i=P&&ly();if(i){let[e,t]=i.clientSide.readable.tee();w=e,P({readable:t},f,g)}G=new tt(eQ.workUnitAsyncStorage.run(e,tf,n.componentMod,t,Z,{filterStackFrame:s,onError:j,debugChannel:null==i?void 0:i.serverSide}))}if(await L(),"string"==typeof m.postponed){if((null==o?void 0:o.type)===nq.DATA){let e=tl(G.tee(),h,i);return X.isRecording()&&X.end(),Y(e,Q(el))}else if(o){let{postponed:t,preludeState:r}=function(e){let[t,r]=e.data;return{preludeState:t,postponed:r}}(o),a=(0,T.jsx)(lN,{reactServerStream:G.tee(),reactDebugStream:w,debugEndTime:void 0,preinitScripts:B,ServerInsertedHTMLProvider:N,nonce:h,images:n.renderOpts.images}),s=rK({polyfills:H,renderServerInsertedHTML:M,serverCapturedErrors:$,basePath:v,tracingMetadata:F}),{stream:l,allReady:u}=await eQ.workUnitAsyncStorage.run(e,tm,a,t,{onError:W,nonce:h});return u.finally(()=>{X.isRecording()&&X.end()}),await eg(l,{delayDataUntilFirstHtmlChunk:r===nX.Empty,inlinedDataStream:tl(G.consume(),h,i),getServerInsertedHTML:s,getServerInsertedMetadata:U,deploymentId:n.sharedContext.deploymentId})}}let t=rK({polyfills:H,renderServerInsertedHTML:M,serverCapturedErrors:$,basePath:v,tracingMetadata:F}),l=(0,T.jsx)(lN,{reactServerStream:G.tee(),reactDebugStream:w,debugEndTime:void 0,preinitScripts:B,ServerInsertedHTMLProvider:N,nonce:h,images:n.renderOpts.images}),{stream:c,allReady:d}=await eQ.workUnitAsyncStorage.run(e,tp,l,{onError:W,nonce:h,onHeaders:e=>{e.forEach((e,t)=>{K(t,e)})},maxHeadersLength:x,bootstrapScriptContent:q,bootstrapScripts:[z],formState:i});return d.finally(()=>{X.isRecording()&&X.end()}),await (u={inlinedDataStream:tl(G.consume(),h,i),isStaticGeneration:!0!==O||!!C,allReady:d,deploymentId:n.sharedContext.deploymentId,getServerInsertedHTML:t,getServerInsertedMetadata:U,validateRootLayout:!1},ef(c,u))}catch(y){let t,o,u;if((0,nf.l)(y)||"object"==typeof y&&null!==y&&"message"in y&&"string"==typeof y.message&&y.message.includes("https://nextjs.org/docs/advanced-features/static-html-export"))throw V(y),y;let f=(0,tz.C)(y);if(f){let e=tH(y);throw rS(`${y.reason} should be wrapped in a suspense boundary at page "${p}". Read more: https://nextjs.org/docs/messages/missing-suspense-with-csr-bailout +${e}`),V(y),y}if((0,tA.RM)(y))r.statusCode=(0,tA.jT)(y),l.statusCode=r.statusCode,t=(0,tA.qe)(r.statusCode);else if((0,tO.n)(y)){t="redirect",r.statusCode=tI(y),l.statusCode=r.statusCode;let n=e_(tj(y),v),a=new Headers;(0,tS.IN)(a,e.mutableCookies)&&J("set-cookie",Array.from(a.values())),J("location",n)}else f||(r.statusCode=500,l.statusCode=r.statusCode);let[m,g]=rJ(b,d,S,A,r6(n,!1),h,"/_not-found/page");try{if(o=await eQ.workUnitAsyncStorage.run(e,lD,a,n,k.has(y.digest)?null:y,t),u=eQ.workUnitAsyncStorage.run(e,tf,n.componentMod,o,Z,{filterStackFrame:s,onError:j}),null===G)throw V(y),y}catch(e){throw V(e),e}try{let{stream:t,allReady:r}=await eQ.workUnitAsyncStorage.run(e,tp,(0,T.jsx)(lM,{reactServerStream:u,ServerInsertedHTMLProvider:N,preinitScripts:m,nonce:h,images:n.renderOpts.images}),{nonce:h,bootstrapScriptContent:q,bootstrapScripts:[g],formState:i});return r.finally(()=>{X.isRecording()&&X.end()}),await (c={inlinedDataStream:tl(G.consume(),h,i),isStaticGeneration:!0!==O||!!C,deploymentId:n.sharedContext.deploymentId,getServerInsertedHTML:rK({polyfills:H,renderServerInsertedHTML:M,serverCapturedErrors:[],basePath:v,tracingMetadata:F}),getServerInsertedMetadata:U,validateRootLayout:!1},ef(t,c))}catch(e){throw V(e),e}}})}async function lB(e,t,r){let n=[],a=[],i=[],o=e.getReader(),s=!1;function l(){s||(s=!0,o.cancel())}r&&r.addEventListener("abort",l,{once:!0});try{for(;!s;){let{done:e,value:r}=await o.read();if(e){l();break}switch(t.currentStage){case nd.D.Before:throw Object.defineProperty(new eB.z("Unexpected stream chunk while in Before stage"),"__NEXT_ERROR_CODE",{value:"E942",enumerable:!1,configurable:!0});case nd.D.EarlyStatic:case nd.D.Static:n.push(r);case nd.D.EarlyRuntime:case nd.D.Runtime:a.push(r);case nd.D.Dynamic:i.push(r);break;case nd.D.Abandoned:break;default:t.currentStage}}}catch(e){if(!s)throw e}return{staticChunks:n,runtimeChunks:a,dynamicChunks:i}}async function lz(e,t){let r=0,n=e.getReader();for(t.onStage(nd.D.EarlyRuntime,()=>{n.cancel()});;){let{done:e,value:a}=await n.read();if(e)break;if(t.currentStage<=nd.D.Static)r+=a.byteLength;else{n.cancel();break}}return r}function lq(e,t,r,n){return{cookies:e.delayUntilStage(nd.D.Runtime,"cookies",t),earlyCookies:e.delayUntilStage(nd.D.EarlyRuntime,"cookies",t),mutableCookies:e.delayUntilStage(nd.D.Runtime,"cookies",r),earlyMutableCookies:e.delayUntilStage(nd.D.EarlyRuntime,"cookies",r),headers:e.delayUntilStage(nd.D.Runtime,"headers",n),earlyHeaders:e.delayUntilStage(nd.D.EarlyRuntime,"headers",n),sharedParamsParent:e.delayUntilStage(nd.D.Runtime,void 0,""),earlySharedParamsParent:e.delayUntilStage(nd.D.EarlyRuntime,void 0,""),sharedSearchParamsParent:e.delayUntilStage(nd.D.Runtime,void 0,""),earlySharedSearchParamsParent:e.delayUntilStage(nd.D.EarlyRuntime,void 0,""),connection:e.delayUntilStage(nd.D.Dynamic,"connection",void 0)}}async function lX(e,t,r,n,i,o,s,l,u){let c,{implicitTags:d,nonce:f,workStore:h}=s,p=new AbortController,m=new AbortController,g=new AbortController,{ServerInsertedHTMLProvider:y}=rV();c="prerender-client"===e?{type:"prerender-client",phase:"render",rootParams:n,fallbackRouteParams:i,implicitTags:d,renderSignal:g.signal,controller:p,cacheSignal:null,dynamicTracking:null,allowEmptyStaticShell:o,revalidate:ey.AR,expire:ey.AR,stale:ey.AR,tags:[...d.tags],prerenderResumeDataCache:null,renderResumeDataCache:null,hmrRefreshHash:void 0,varyParamsAccumulator:null}:{type:"validation-client",phase:"render",rootParams:n,implicitTags:d,renderSignal:g.signal,controller:p,cacheSignal:null,dynamicTracking:null,revalidate:ey.AR,expire:ey.AR,stale:ey.AR,tags:[...d.tags],prerenderResumeDataCache:null,renderResumeDataCache:null,hmrRefreshHash:void 0,varyParamsAccumulator:null,boundaryState:null,validationSamples:l,validationSampleTracking:u,fallbackRouteParams:i};let v=function(e,t,r){{let{Readable:n}=a("node:stream"),i=0,o=new n({read(){for(;i{for(;i{o.push(null)})},{once:!0}),o}}(t,r,m.signal),b=eQ.workUnitAsyncStorage.run(c,ty,(0,T.jsx)(lN,{reactServerStream:v,reactDebugStream:void 0,debugEndTime:void 0,preinitScripts:()=>{},ServerInsertedHTMLProvider:y,nonce:f,images:s.renderOpts.images}),{signal:m.signal,onError:e=>{let t=tQ(e);return t||(tK(e)?void console.error(e):void(m.signal.aborted||(process.env.NEXT_DEBUG_BUILD||process.env.__NEXT_VERBOSE_LOGGING)&&sI(e,h.route,s$.ProspectiveRender)))}});m.signal.addEventListener("abort",()=>{g.abort()},{once:!0}),b.catch(e=>{m.signal.aborted||(0,tV.AA)(e)||(process.env.NEXT_DEBUG_BUILD||process.env.__NEXT_VERBOSE_LOGGING)&&sI(e,h.route,s$.ProspectiveRender)});let w=new sH;(0,ls.trackPendingModules)(w),await w.cacheReady(),m.abort()}async function lV(e,t,r,n,i,o,s,l){let u="1"===process.env.NEXT_PRIVATE_DEBUG_VALIDATION?console.log:void 0,{createCombinedPayloadAtDepth:c,createCombinedPayloadStream:d,collectStagedSegmentData:f,discoverValidationDepths:h}=o.componentMod.InstantValidation(),{createValidationSampleTracking:p}=a("./dist/esm/server/app-render/instant-validation/instant-samples.js");null==u||u("\nStarting depth-based instant validation...");let m=o.componentMod.routeModule.userland.loaderTree,g=e4(),{cache:y,payload:v,stageEndTimes:b}=await f({[nd.D.Static]:e.staticChunks,[nd.D.Runtime]:e.runtimeChunks,[nd.D.Dynamic]:e.dynamicChunks},t,r,!0,g),{implicitTags:w,nonce:S,workStore:_}=o,E=!!o.renderOpts.setReactDebugChannel;async function R(e,t){return k(e,t,null)}async function k(e,t,a){let u,f=new AbortController,h={expectedIds:new Set,renderedIds:new Set},R=!1;if(a)for(let e of(R=!0,a.expectedIds))h.expectedIds.add(e);let x=await c(v,y,m,o.getDynamicParamFromSegment,o.query,e,t,f.signal,h,g,b,R);if(null===x)return null;let P=new AbortController,C=new AbortController,A=()=>{},{ServerInsertedHTMLProvider:O}=rV(),{stream:j,debugStream:$}=await d(x.payload,f,P.signal,g,r,E),I=(0,tV.md)(x.createInstantStack),D=null!==l?p():null,N=(0,tV.uO)(!1),M={type:"validation-client",phase:"render",rootParams:n,implicitTags:w,renderSignal:C.signal,controller:P,cacheSignal:null,dynamicTracking:N,revalidate:ey.AR,expire:ey.AR,stale:ey.AR,tags:[...w.tags],prerenderResumeDataCache:null,renderResumeDataCache:null,hmrRefreshHash:s,varyParamsAccumulator:null,boundaryState:h,fallbackRouteParams:i,validationSamples:l,validationSampleTracking:D};try{let{prelude:e}=await sU(()=>{let e=eQ.workUnitAsyncStorage.run(M,ty,(0,T.jsx)(lN,{reactServerStream:j,reactDebugStream:$??void 0,debugEndTime:void 0,preinitScripts:A,ServerInsertedHTMLProvider:O,nonce:S,images:o.renderOpts.images}),{signal:P.signal,onError:(e,t)=>{if((0,tV.AA)(e)||P.signal.aborted){let e=t.componentStack;"string"==typeof e&&(0,tV.g)(_,e,I,N,x.hasAmbiguousErrors?tV.Q.Runtime:tV.Q.Dynamic,h);return}if(!P.signal.aborted){let r=t.componentStack;if("string"==typeof r){let t=e;if(e&&"object"==typeof e&&"digest"in e&&"string"==typeof e.digest){let r=_.reactServerErrorsByDigest.get(e.digest);void 0!==r&&(t=r)}(0,tV.n1)(_,I,t,r)}}return tK(e)?void console.error(e):tQ(e)}});return P.signal.addEventListener("abort",()=>{C.abort()},{once:!0}),e},()=>{P.abort()}),{preludeIsEmpty:t}=await ts(e);u=(0,tV.Jr)(_,t?tV.r0.Empty:tV.r0.Full,I,D,h)}catch(e){u=(0,tV.Jr)(_,tV.r0.Errored,I,D,h)}if(0===u.length)return[];if(null===a&&x.hasAmbiguousErrors){let r=await k(e,t,h);if(null!==r&&r.length>0)return r}return u}let x=h(m),P=x.length;for(let e=P-1;e>=0;e--){let t=x[e];for(let r=t;r>=0;r--){null==u||u(`Trying depth ${e}`+(r>0?` + groupDepth ${r}...`:"..."));let t=await R(e,r);if(null===t){null==u||u(` No config at depth ${e}+${r}, skipping.`);continue}if(t.length>0)return null==u||u(` Depth ${e}+${r}: ❌ Failed (${t.length} errors)`),t;null==u||u(` Depth ${e}+${r}: ✅ Passed`)}}return null==u||u(`✅ All depths passed`),[]}async function lW(e,t,r,n,a,i){let{componentMod:o}=e,{clientModules:l}=e4(),u=-1/0,c=t,d=new sH;(0,ls.trackPendingModules)(d);let f=i?nB(i):nB(),h=new AbortController,p=new AbortController,m=new AbortController,g=new nd.V(p.signal,m,!0);c.prerenderResumeDataCache=f,c.renderResumeDataCache=null,c.stagedRendering=g,c.cacheSignal=d,c.asyncApiPromises=lq(g,c.cookies,c.mutableCookies,c.headers),c.controller=void 0,c.renderSignal=void 0;let y=await n(c),v=e=>{!0===m.signal.aborted||(d.hasPendingReads()?m.abort():g.advanceStage(e))},b=await sU(()=>{g.advanceStage(nd.D.EarlyStatic),u=performance.now()+performance.timeOrigin;let e=eQ.workUnitAsyncStorage.run(c,tf,o,y,l,{onError:a(h.signal,!1),startTime:u,filterStackFrame:s,signal:h.signal});h.signal.addEventListener("abort",()=>{let{reason:e}=h.signal;p.abort(e)},{once:!0});let t=lB(e,g,p.signal);return t.catch(()=>{}),{accumulatedChunksPromise:t}},()=>{v(nd.D.Static)},()=>{v(nd.D.EarlyRuntime)},()=>{v(nd.D.Runtime)},()=>{v(nd.D.Dynamic)});if(g.currentStage!==nd.D.Abandoned)return{accumulatedChunksPromise:b.accumulatedChunksPromise,startTime:u,stageController:g,requestStore:c};await d.cacheReady(),h.abort(),c=r();let w=new AbortController,S=new AbortController,_=new nd.V(S.signal,null,!0);c.prerenderResumeDataCache=null,c.renderResumeDataCache=nz(f),c.stagedRendering=_,c.cacheSignal=null,c.asyncApiPromises=lq(_,c.cookies,c.mutableCookies,c.headers),c.controller=w,c.renderSignal=S.signal;let E=await n(c);return{accumulatedChunksPromise:(await sU(()=>{_.advanceStage(nd.D.EarlyStatic),u=performance.now()+performance.timeOrigin;let e=eQ.workUnitAsyncStorage.run(c,tf,o,E,l,{onError:a(w.signal,!0),startTime:u,filterStackFrame:s,signal:w.signal});w.signal.addEventListener("abort",()=>{S.abort(w.signal.reason)},{once:!0});let t=lB(e,_,null);return t.catch(()=>{}),{accumulatedChunksPromise:t}},()=>{_.advanceStage(nd.D.Static)},()=>{_.advanceStage(nd.D.EarlyRuntime)},()=>{_.advanceStage(nd.D.Runtime)},()=>{_.advanceStage(nd.D.Dynamic)})).accumulatedChunksPromise,startTime:u,stageController:_,requestStore:c}}async function lG(e,t){let r=async()=>{let r;try{r=await A.workAsyncStorage.exit(async()=>lJ(e,t))}catch(e){console.error(Object.defineProperty(new eB.z("An unexpected error occcured during instant validation",{cause:e}),"__NEXT_ERROR_CODE",{value:"E1097",enumerable:!1,configurable:!0})),r=!1}if(!r)throw console.error("Stopping prerender due to instant validation errors."),new nf.f};if(!process.env.__NEXT_TEST_MODE||!process.env.NEXT_TEST_LOG_VALIDATION)return await r();{let t=Date.now(),n=e.workStore.route;console.error(""+JSON.stringify({type:"validation_start",requestId:t,url:n})+"");try{return await r()}finally{console.error(""+JSON.stringify({type:"validation_end",requestId:t,url:n})+"")}}}async function lJ(e,t){let r="1"===process.env.NEXT_PRIVATE_DEBUG_VALIDATION?console.log:void 0,{workStore:n}=e,a=n.route,i=e.componentMod.routeModule.userland.loaderTree,o=await lm(i);o&&0!==o.length||(o=[{}]),null==r||r("Resolved samples:",o);let s=function(e,t){let r=n$(e,!0),{pathnameRouteParamSegments:n,params:a}=function(e,t){let r=[],n={},a=[{tree:e,depth:0,currentPath:[]}];for(;a.length>0;){let{tree:e,depth:i,currentPath:o}=a.shift(),{segment:s,parallelRoutes:l}=r3(e),u=o,c=i,d=nj(s);if(d&&"route-group"!==d.type&&"parallel-route"!==d.type&&(u=[...o,d],c=i+1),(null==d?void 0:d.type)==="dynamic"){let{paramName:e,paramType:a}=d.param;if(i({paramName:e,paramType:t}));!function(e,t,r,n){let a=[{tree:e,depth:0}];for(;a.length>0;){let{tree:e,depth:i}=a.pop(),{segment:o,parallelRoutes:s}=r3(e),l=nj(o);if((null==l?void 0:l.type)==="dynamic"&&!t.hasOwnProperty(l.param.paramName)&&!n.some(e=>e.paramName===l.param.paramName)){let{paramName:e,paramType:a}=l.param,o=nD(e,a,i,r,t);void 0!==o?t[e]=o:"optional-catchall"!==a&&n.push({paramName:e,paramType:a})}let u=i;for(let e of(l&&"route-group"!==l.type&&"parallel-route"!==l.type&&u++,Object.values(s)))a.push({tree:e,depth:u})}}(t.userland.loaderTree,a,r,i);if(0===i.length)return null;let o=Math.random().toString(16).slice(2),s=new Map;for(let{paramName:e,paramType:t}of i)s.set(e,[`%%drp:${e}:${o}%%`,t1[t]]);return s}(a,e.componentMod.routeModule);for(let n=0;nlK(e,l,s,t))}catch(e){if((0,tY.R)(e))i=[e];else throw e}if(i.length>0){null==r||r(`❌ Sample failed validation (${i.length} errors)`);let e=o.length>1?` (sample ${n+1} of ${o.length})`:"";for(let e of i)console.error(e);return console.error(`Build-time instant validation failed for route "${a}"${e}.`),!1}null==r||r("✅ Sample validated successfully")}return!0}async function lK(e,t,r,n){let i,o,{workStore:s}=e,l=e.componentMod.routeModule.userland.loaderTree,u=s.route,{createCookiesFromSample:c,createHeadersFromSample:d,createDraftModeForValidation:f,createRelativeURLFromSamples:h,createValidationSampleTracking:p}=a("./dist/esm/server/app-render/instant-validation/instant-samples.js"),m=h(u,t.params,t.searchParams),g=t.params??{},y=null;if(r){let e=new Map;for(let[t,n]of r)t in g||e.set(t,n);y=e}let v=lw(g,y,!1),b=nx(l,v);({query:o,...i}=m);let{AfterContext:w}=a("./dist/esm/server/after/after-context.js"),S={isStaticGeneration:!1,page:s.page,route:s.route,incrementalCache:s.incrementalCache,cacheLifeProfiles:s.cacheLifeProfiles,isBuildTimePrerendering:!1,fetchCache:s.fetchCache,isOnDemandRevalidate:!1,isDraftMode:!1,isPrefetchRequest:!1,buildId:s.buildId,deploymentId:s.deploymentId,reactLoadableManifest:s.reactLoadableManifest,assetPrefix:s.assetPrefix,nonce:s.nonce,afterContext:new w({waitUntil(e){e.catch(()=>{})},onClose(){},onTaskError(){}}),cacheComponentsEnabled:s.cacheComponentsEnabled,previouslyRevalidatedTags:[],refreshTagsByCacheKind:new Map,runInCleanSnapshot:s.runInCleanSnapshot,shouldTrackFetchMetrics:!1,reactServerErrorsByDigest:new Map};return A.workAsyncStorage.run(S,async()=>{let r={componentMod:e.componentMod,url:i,renderOpts:e.renderOpts,workStore:S,parsedRequestHeaders:e.parsedRequestHeaders,getDynamicParamFromSegment:v,interpolatedParams:g,query:o,isPrefetch:!1,isPossibleServerAction:!1,requestTimestamp:e.requestTimestamp,appUsingSizeAdjustment:e.appUsingSizeAdjustment,flightRouterState:void 0,requestId:e.requestId,htmlRequestId:e.htmlRequestId,pagePath:e.pagePath,assetPrefix:e.assetPrefix,isNotFoundPath:e.isNotFoundPath,nonce:e.nonce,res:e.res,sharedContext:e.sharedContext,implicitTags:e.implicitTags},a={params:t.params,searchParams:t.searchParams},s=()=>{let r=c(t.cookies,u),n=new e$.VO(new Headers),i=d(t.headers,t.cookies,u),o=f();return{type:"request",phase:"render",implicitTags:e.implicitTags,url:{pathname:m.pathname,search:m.search},headers:i,cookies:r,mutableCookies:n,userspaceMutableCookies:n,draftMode:o,rootParams:b,validationSamples:a,validationSampleTracking:p(),renderResumeDataCache:null,prerenderResumeDataCache:null,stagedRendering:null,asyncApiPromises:void 0}},h=tZ(!0,!0,S.reactServerErrorsByDigest,()=>{}),{accumulatedChunksPromise:w,startTime:_,stageController:E,requestStore:R}=await lW(r,s(),s,e=>eQ.workUnitAsyncStorage.run(e,l$,l,r,{is404:!1}),e=>function(t){let r=tQ(t);return r||(e.aborted?void 0:h(t))},n),k=await w,x=R.validationSampleTracking;if(x.missingSampleErrors.length>0)return x.missingSampleErrors;if(E.currentStage===nd.D.Abandoned&&E.syncInterruptReason)return[E.syncInterruptReason];let P=(r.renderOpts.allowEmptyStaticShell??!1)||await ld(l),C=p();return(await lX("validation-client",k.dynamicChunks,k.dynamicChunks,b,y,P,r,a,C),C.missingSampleErrors.length>0)?C.missingSampleErrors:await lV(k,null,_,b,y,r,void 0,a)})}function lY(e){let{isStaticGeneration:t}=e;return!!t}async function lQ(e,t,r,n,a,i){var o,l,u;let{assetPrefix:c,getDynamicParamFromSegment:d,implicitTags:f,nonce:h,pagePath:p,renderOpts:m,workStore:g}=r,{basePath:y,buildManifest:v,ComponentMod:b,crossOrigin:w,experimental:S,isDebugDynamicAccesses:_,isBuildTimePrerendering:E=!1,onInstrumentationRequestError:R,page:k,reactMaxHeadersLength:x,subresourceIntegrityManifest:P,cacheComponents:C}=m,{cachedNavigations:A}=m.experimental,O=(m.allowEmptyStaticShell??!1)||await ld(a),$=nx(a,d),{ServerInsertedHTMLProvider:I,renderServerInsertedHTML:D}=rV(),N=sW(h),M=sB((0,j.getTracer)().getTracePropagationData(),S.clientTraceMetadata),L=v.polyfillFiles.filter(e=>e.endsWith(".js")&&!e.endsWith(".module.js")).map(e=>({src:`${c}/_next/${e}${r6(r,!1)}`,integrity:null==P?void 0:P[e],crossOrigin:w,noModule:!0,nonce:h})),[U,F]=rJ(v,c,w,P,r6(r,!0),h,k),{reactServerErrorsByDigest:H}=g,B=!S.isRoutePPREnabled,z=tZ(!1,E,H,function(t,n){if(B)return null==R?void 0:R(t,e,lE(r,"react-server-components"),n)}),q=[],X=t0(!1,E,H,q,function(t){if(B)return null==R?void 0:R(t,e,lE(r,"server-rendering"),!1)}),V=null,W=e=>{n.headers??={},n.headers[e]=t.getHeader(e)},G=(e,r)=>{Array.isArray(r)?r.forEach(r=>{t.appendHeader(e,r)}):t.appendHeader(e,r),W(e)},J=sq(S),{clientModules:K}=e4(),Q=null;try{if(C){let e,o,l=new AbortController,u=new AbortController,c=new AbortController,d=new sH,p=nB(),v=m.renderResumeDataCache??null,w={type:"prerender",phase:"render",rootParams:$,fallbackRouteParams:i,implicitTags:f,renderSignal:c.signal,controller:new AbortController,cacheSignal:d,dynamicTracking:null,allowEmptyStaticShell:O,revalidate:ey.AR,expire:ey.AR,stale:ey.AR,tags:[...f.tags],prerenderResumeDataCache:p,renderResumeDataCache:v,hmrRefreshHash:void 0,varyParamsAccumulator:null},S=await eQ.workUnitAsyncStorage.run(w,l$,a,r,{is404:404===t.statusCode}),E=Q={type:"prerender",phase:"render",rootParams:$,fallbackRouteParams:i,implicitTags:f,renderSignal:c.signal,controller:l,cacheSignal:d,dynamicTracking:null,allowEmptyStaticShell:O,revalidate:ey.AR,expire:ey.AR,stale:ey.AR,tags:[...f.tags],prerenderResumeDataCache:p,renderResumeDataCache:v,hmrRefreshHash:void 0,varyParamsAccumulator:null},R={filterStackFrame:s,onError:e=>{let t=tQ(e);return t||(tK(e)?void console.error(e):l.signal.aborted?void 0:void((process.env.NEXT_DEBUG_BUILD||process.env.__NEXT_VERBOSE_LOGGING)&&sI(e,g.route,s$.ProspectiveRender)))},signal:u.signal},k=eQ.workUnitAsyncStorage.run(E,tg(b),S,K,R);if(u.signal.addEventListener("abort",()=>{c.abort(),l.abort()},{once:!0}),(0,ls.trackPendingModules)(d),await d.cacheReady(),u.abort(),g.invalidDynamicUsageError)throw(0,tV.gR)(g,g.invalidDynamicUsageError),new nf.f;try{e=await tr(k)}catch(e){u.signal.aborted||l.signal.aborted||(process.env.NEXT_DEBUG_BUILD||process.env.__NEXT_VERBOSE_LOGGING)&&sI(e,g.route,s$.ProspectiveRender)}if(e){let t=new AbortController,n=new AbortController,a=new AbortController,o={type:"prerender-client",phase:"render",rootParams:$,fallbackRouteParams:i,implicitTags:f,renderSignal:a.signal,controller:t,cacheSignal:null,dynamicTracking:null,allowEmptyStaticShell:O,revalidate:ey.AR,expire:ey.AR,stale:ey.AR,tags:[...f.tags],prerenderResumeDataCache:p,renderResumeDataCache:v,hmrRefreshHash:void 0,varyParamsAccumulator:null},s=eQ.workUnitAsyncStorage.run(o,ty,(0,T.jsx)(lN,{reactServerStream:e.asUnclosingStream(),reactDebugStream:void 0,debugEndTime:void 0,preinitScripts:U,ServerInsertedHTMLProvider:I,nonce:h,images:r.renderOpts.images}),{signal:n.signal,onError:e=>{let t=tQ(e);return t||(tK(e)?void console.error(e):void(n.signal.aborted||(process.env.NEXT_DEBUG_BUILD||process.env.__NEXT_VERBOSE_LOGGING)&&sI(e,g.route,s$.ProspectiveRender)))},bootstrapScripts:[F]});n.signal.addEventListener("abort",()=>{a.abort()},{once:!0}),s.catch(e=>{n.signal.aborted||(0,tV.AA)(e)||(process.env.NEXT_DEBUG_BUILD||process.env.__NEXT_VERBOSE_LOGGING)&&sI(e,g.route,s$.ProspectiveRender)}),(0,ls.trackPendingModules)(d),await d.cacheReady(),n.abort()}m.renderResumeDataCache&&(v=nz(p));let P=new AbortController,j=new AbortController,B=ng(),W={type:"prerender",phase:"render",rootParams:$,fallbackRouteParams:i,implicitTags:f,renderSignal:j.signal,controller:new AbortController,cacheSignal:null,dynamicTracking:null,allowEmptyStaticShell:O,revalidate:ey.AR,expire:ey.AR,stale:ey.AR,tags:[...f.tags],prerenderResumeDataCache:p,renderResumeDataCache:v,hmrRefreshHash:void 0,varyParamsAccumulator:B},Z=await eQ.workUnitAsyncStorage.run(W,l$,a,r,{is404:404===t.statusCode});A&&(Z.s=o=new sz);let ee=(0,tV.uO)(_),er=!1,en=Q={type:"prerender",phase:"render",rootParams:$,fallbackRouteParams:i,implicitTags:f,renderSignal:j.signal,controller:P,cacheSignal:null,dynamicTracking:ee,allowEmptyStaticShell:O,revalidate:ey.AR,expire:ey.AR,stale:ey.AR,tags:[...f.tags],prerenderResumeDataCache:p,renderResumeDataCache:v,hmrRefreshHash:void 0,varyParamsAccumulator:B};void 0!==o&&sX(en,o,J);let ea=!0,ei={filterStackFrame:s,onError:e=>z(e),signal:P.signal},eo=async()=>{let e=[nv(B)];if(void 0!==o&&e.push(sV(o)),await Promise.all(e),P.signal.aborted){er=!0;return}ea&&(er=!0),P.abort()},es=async()=>{let e=eQ.workUnitAsyncStorage.run(en,tg(b),Z,K,ei);P.signal.addEventListener("abort",()=>{j.abort()},{once:!0});let t=await e;return ea=!1,t},el=V=await tr(sU(es,eo)),eu=(0,tV.uO)(_),ec=new AbortController,ed=new AbortController,ef={type:"prerender-client",phase:"render",rootParams:$,fallbackRouteParams:i,implicitTags:f,renderSignal:ed.signal,controller:ec,cacheSignal:null,dynamicTracking:eu,allowEmptyStaticShell:O,revalidate:ey.AR,expire:ey.AR,stale:ey.AR,tags:[...f.tags],prerenderResumeDataCache:p,renderResumeDataCache:v,hmrRefreshHash:void 0,varyParamsAccumulator:null},eg=(0,tV.Wt)(),ev=tc(G),{prelude:eb,postponed:ew}=await sU(()=>{let e=eQ.workUnitAsyncStorage.run(ef,ty,(0,T.jsx)(lN,{reactServerStream:el.asUnclosingStream(),reactDebugStream:void 0,debugEndTime:void 0,preinitScripts:U,ServerInsertedHTMLProvider:I,nonce:h,images:r.renderOpts.images}),{signal:ec.signal,onError:(e,t)=>{if((0,tV.AA)(e)||ec.signal.aborted){let e=t.componentStack;"string"==typeof e&&(0,tV.Pe)(g,e,eg,eu);return}return X(e,t)},onHeaders:ev,maxHeadersLength:x,bootstrapScripts:[F]});return ec.signal.addEventListener("abort",()=>{ed.abort()},{once:!0}),e},()=>{ec.abort()}),{prelude:eS,preludeIsEmpty:e_}=await ts(eb);O||(0,tV.V2)(g,e_?tV.r0.Empty:tV.r0.Full,eg,ee);let eE=rK({polyfills:L,renderServerInsertedHTML:D,serverCapturedErrors:q,basePath:y,tracingMetadata:M});n.flightData=await et(A?lT(el.asStream(),er):el.asStream());let eR=A?n.flightData.subarray(1):n.flightData;if(await l0(eR,en,b,m,r.pagePath,n),er){null!=ew?n.postponed=await nV(ew,e_?nX.Empty:nX.Full,i,p,C):n.postponed=await nW(p,C),el.consume();let e={getServerInsertedHTML:eE,getServerInsertedMetadata:N,deploymentId:r.sharedContext.deploymentId};return{digestErrorsMap:H,ssrErrors:q,stream:await eh(eS,e),dynamicAccess:(0,tV.yI)(ee,eu),collectedRevalidate:en.revalidate,collectedExpire:en.expire,collectedStale:J(en.stale),collectedTags:en.tags,renderResumeDataCache:nz(p)}}{let e;if(g.forceDynamic)throw Object.defineProperty(new nf.f('Invariant: a Page with `dynamic = "force-dynamic"` did not trigger the dynamic pathway. This is a bug in Next.js'),"__NEXT_ERROR_CODE",{value:"E598",enumerable:!1,configurable:!0});let t=eS;if(null!=ew){let e=tu(),n=await td((0,T.jsx)(lN,{reactServerStream:e,reactDebugStream:void 0,debugEndTime:void 0,preinitScripts:()=>{},ServerInsertedHTMLProvider:I,nonce:h,images:r.renderOpts.images}),JSON.parse(JSON.stringify(ew)),{signal:(0,tV.kb)(),onError:X,nonce:h});t=Y(eS,n)}if(i&&i.size>0){let n=await tn(tf(b,[],K,{filterStackFrame:s,onError:z}));e=await em(t,{inlinedDataStream:tl(n.consumeAsStream(),h,null),getServerInsertedHTML:eE,getServerInsertedMetadata:N,deploymentId:r.sharedContext.deploymentId})}else e=await ep(t,{inlinedDataStream:tl(el.consumeAsStream(),h,null),getServerInsertedHTML:eE,getServerInsertedMetadata:N,deploymentId:r.sharedContext.deploymentId});return{digestErrorsMap:H,ssrErrors:q,stream:e,dynamicAccess:(0,tV.yI)(ee,eu),collectedRevalidate:en.revalidate,collectedExpire:en.expire,collectedStale:J(en.stale),collectedTags:en.tags,renderResumeDataCache:nz(p)}}}if(S.isRoutePPREnabled){let e,o=(0,tV.uO)(_),l=nB(),u=Q={type:"prerender-ppr",phase:"render",rootParams:$,fallbackRouteParams:i,implicitTags:f,dynamicTracking:o,revalidate:ey.AR,expire:ey.AR,stale:ey.AR,tags:[...f.tags],prerenderResumeDataCache:l},c=await eQ.workUnitAsyncStorage.run(u,l$,a,r,{is404:404===t.statusCode});e=V=await tn(eQ.workUnitAsyncStorage.run(u,tf,b,c,K,{filterStackFrame:s,onError:z}));let d={type:"prerender-ppr",phase:"render",rootParams:$,fallbackRouteParams:i,implicitTags:f,dynamicTracking:o,revalidate:ey.AR,expire:ey.AR,stale:ey.AR,tags:[...f.tags],prerenderResumeDataCache:l},p=tc(G),{prelude:v,postponed:w}=await eQ.workUnitAsyncStorage.run(d,ty,(0,T.jsx)(lN,{reactServerStream:e.asUnclosingStream(),reactDebugStream:void 0,debugEndTime:void 0,preinitScripts:U,ServerInsertedHTMLProvider:I,nonce:h,images:r.renderOpts.images}),{onError:X,onHeaders:p,maxHeadersLength:x,bootstrapScripts:[F]}),S=rK({polyfills:L,renderServerInsertedHTML:D,serverCapturedErrors:q,basePath:y,tracingMetadata:M}),E=await et(e.asStream());lY(g)&&(n.flightData=E,await l0(E,d,b,m,r.pagePath,n));let{prelude:R,preludeIsEmpty:k}=await ts(v);if((0,tV.Lu)(o.dynamicAccesses)){null!=w?n.postponed=await nV(w,k?nX.Empty:nX.Full,i,l,C):n.postponed=await nW(l,C),e.consume();let t={getServerInsertedHTML:S,getServerInsertedMetadata:N,deploymentId:r.sharedContext.deploymentId};return{digestErrorsMap:H,ssrErrors:q,stream:await eh(R,t),dynamicAccess:o.dynamicAccesses,collectedRevalidate:u.revalidate,collectedExpire:u.expire,collectedStale:J(u.stale),collectedTags:u.tags}}if(i&&i.size>0){n.postponed=await nW(l,C);let e={getServerInsertedHTML:S,getServerInsertedMetadata:N,deploymentId:r.sharedContext.deploymentId};return{digestErrorsMap:H,ssrErrors:q,stream:await eh(R,e),dynamicAccess:o.dynamicAccesses,collectedRevalidate:u.revalidate,collectedExpire:u.expire,collectedStale:J(u.stale),collectedTags:u.tags}}{if(g.forceDynamic)throw Object.defineProperty(new nf.f('Invariant: a Page with `dynamic = "force-dynamic"` did not trigger the dynamic pathway. This is a bug in Next.js'),"__NEXT_ERROR_CODE",{value:"E598",enumerable:!1,configurable:!0});let t=R;if(null!=w){let e=tu(),n=await td((0,T.jsx)(lN,{reactServerStream:e,reactDebugStream:void 0,debugEndTime:void 0,preinitScripts:()=>{},ServerInsertedHTMLProvider:I,nonce:h,images:r.renderOpts.images}),JSON.parse(JSON.stringify(w)),{signal:(0,tV.kb)(),onError:X,nonce:h});t=Y(R,n)}return{digestErrorsMap:H,ssrErrors:q,stream:await ep(t,{inlinedDataStream:tl(e.consumeAsStream(),h,null),getServerInsertedHTML:S,getServerInsertedMetadata:N,deploymentId:r.sharedContext.deploymentId}),dynamicAccess:o.dynamicAccesses,collectedRevalidate:u.revalidate,collectedExpire:u.expire,collectedStale:J(u.stale),collectedTags:u.tags}}}{let e,i=Q={type:"prerender-legacy",phase:"render",rootParams:$,implicitTags:f,revalidate:ey.AR,expire:ey.AR,stale:ey.AR,tags:[...f.tags]},l=await eQ.workUnitAsyncStorage.run(i,l$,a,r,{is404:404===t.statusCode});e=V=await tn(eQ.workUnitAsyncStorage.run(i,tf,b,l,K,{filterStackFrame:s,onError:z}));let{stream:u}=await eQ.workUnitAsyncStorage.run(i,tp,(0,T.jsx)(lN,{reactServerStream:e.asUnclosingStream(),reactDebugStream:void 0,debugEndTime:void 0,preinitScripts:U,ServerInsertedHTMLProvider:I,nonce:h,images:r.renderOpts.images}),{onError:X,nonce:h,bootstrapScripts:[F]});if(lY(g)){let t=await et(e.asStream());n.flightData=t,await l0(t,i,b,m,r.pagePath,n)}let c=rK({polyfills:L,renderServerInsertedHTML:D,serverCapturedErrors:q,basePath:y,tracingMetadata:M});return{digestErrorsMap:H,ssrErrors:q,stream:await (o={inlinedDataStream:tl(e.consumeAsStream(),h,null),isStaticGeneration:!0,getServerInsertedHTML:c,getServerInsertedMetadata:N,deploymentId:r.sharedContext.deploymentId},ef(u,o)),collectedRevalidate:i.revalidate,collectedExpire:i.expire,collectedStale:J(i.stale),collectedTags:i.tags}}}catch(A){let e,i;if((0,nf.l)(A)||"object"==typeof A&&null!==A&&"message"in A&&"string"==typeof A.message&&A.message.includes("https://nextjs.org/docs/advanced-features/static-html-export")||(0,tq.isDynamicServerError)(A))throw A;let o=(0,tz.C)(A);if(o){let e=tH(A);throw rS(`${A.reason} should be wrapped in a suspense boundary at page "${p}". Read more: https://nextjs.org/docs/messages/missing-suspense-with-csr-bailout +${e}`),A}if(null===V)throw A;(0,tA.RM)(A)?(t.statusCode=(0,tA.jT)(A),n.statusCode=t.statusCode,e=(0,tA.qe)(t.statusCode)):(0,tO.n)(A)?(e="redirect",t.statusCode=tI(A),n.statusCode=t.statusCode,l=e_(tj(A),y),t.setHeader("location",l),W("location")):o||(t.statusCode=500,n.statusCode=t.statusCode);let[d,S]=rJ(v,c,w,P,r6(r,!1),h,"/_not-found/page"),_=Q={type:"prerender-legacy",phase:"render",rootParams:$,implicitTags:f,revalidate:void 0!==(null==Q?void 0:Q.revalidate)?Q.revalidate:ey.AR,expire:void 0!==(null==Q?void 0:Q.expire)?Q.expire:ey.AR,stale:void 0!==(null==Q?void 0:Q.stale)?Q.stale:ey.AR,tags:[...(null==Q?void 0:Q.tags)||f.tags]};if(C&&(0,tA.RM)(A)){let e=(0,tA.jT)(A),t=function e(t,r,n){let a=!function(e,t,r){switch(t){case 404:return!!e[2]["not-found"];case 403:return r&&!!e[2].forbidden;case 401:return r&&!!e[2].unauthorized;default:return!1}}(t,r,n)?null:t,i=t[1].children;if(i){let t=e(i,r,n);t&&(a=t)}return a}(a,e,r.renderOpts.experimental.authInterrupts);t&&(i={boundaryTree:t,triggeredStatus:e})}let E=i?await eQ.workUnitAsyncStorage.run(_,l$,a,r,{is404:"not-found"===e,prerenderHTTPError:i}):await eQ.workUnitAsyncStorage.run(_,lD,a,r,H.has(A.digest)?void 0:A,e),R=eQ.workUnitAsyncStorage.run(_,tf,b,E,K,{filterStackFrame:s,onError:z}),k=R,x=i?(()=>{let[e,t]=R.tee();return k=e,tn(t)})():null;try{let{stream:e}=await eQ.workUnitAsyncStorage.run(_,tp,(0,T.jsx)(lM,{reactServerStream:k,ServerInsertedHTMLProvider:I,preinitScripts:d,nonce:h,images:r.renderOpts.images}),{nonce:h,bootstrapScripts:[S],formState:null}),t=x?await x:V;if(x&&V.consume(),lY(g)){let e=await et(t.asStream());n.flightData=e,await l0(e,_,b,m,r.pagePath,n)}let a=t.consumeAsStream();return{digestErrorsMap:H,ssrErrors:q,stream:await (u={inlinedDataStream:tl(a,h,null),isStaticGeneration:!0,getServerInsertedHTML:rK({polyfills:L,renderServerInsertedHTML:D,serverCapturedErrors:[],basePath:y,tracingMetadata:M}),getServerInsertedMetadata:N,validateRootLayout:!1,deploymentId:r.sharedContext.deploymentId},ef(e,u)),dynamicAccess:null,collectedRevalidate:null!==Q?Q.revalidate:ey.AR,collectedExpire:null!==Q?Q.expire:ey.AR,collectedStale:J(null!==Q?Q.stale:ey.AR),collectedTags:null!==Q?Q.tags:null}}catch(e){throw e}}}let lZ=async(e,t)=>{let r=r3(e).modules["global-error"];if(!r)throw Object.defineProperty(Error("Invariant: global-error module is required but not found in loader tree"),"__NEXT_ERROR_CODE",{value:"E983",enumerable:!1,configurable:!0});let{componentMod:{createElement:n}}=t,[a,i]=await r9({ctx:t,filePath:r[1],getComponent:r[0],injectedCSS:new Set,injectedJS:new Set});return{GlobalError:a,styles:i}};async function l0(e,t,r,n,a,i){let o,{clientModules:s,edgeRscModuleMapping:l,rscModuleMapping:u}=e4(),c={moduleLoading:null,moduleMap:u,serverModuleMap:e6()},d=sq(n.experimental)(t.stale),f=n.experimental.prefetchInlining;if(f)if(n.isBuildTimePrerendering)i.prefetchHints=o=await r.collectPrefetchHints(e,d,s,c,f.maxSize,f.maxBundleSize);else{var h;o=(null==(h=n.prefetchHints)?void 0:h[a])??null}else o=null;i.segmentData=await r.collectSegmentData(n.cacheComponents,e,d,s,c,!!n.experimental.prefetchInlining,o)}require("next/dist/build/adapter/setup-node-env.external.js"),a("./dist/esm/shared/lib/modern-browserslist-target.js");let l1="build-manifest.json";[...process?.features?.typescript?["next.config.mts"]:[]],Symbol("polyfills");let l2=/\/[^/]*\[[^/]+\][^/]*(?=\/|$)/,l4=/\/\[[^/]+\](?=\/|$)/;function l3(e,t=!0){return((0,nO.m1)(e)&&(e=(0,nO.$8)(e).interceptedRoute),t)?l4.test(e):l2.test(e)}function l6(e){return eR(e||"/","/_next/data")&&"/index"===(e=e.replace(/\/_next\/data\/[^/]{1,}/,"").replace(/\.json$/,""))?"/":e}let l8=Symbol("next.patchSetHeaderWithCookieSupport");var l9=a("./dist/esm/shared/lib/page-path/ensure-leading-slash.js");function l5(e){let t=/^\/index(\/|$)/.test(e)&&!l3(e)?`/index${e}`:"/"===e?"/index":(0,l9.A)(e);{let{posix:e}=a("path"),r=e.normalize(t);if(r!==t)throw new s0.MK(`Requested and resolved page mismatch: ${t} ${r}`)}return t}let l7=["ico","jpg","jpeg","png","svg"],ue=["jpg","jpeg","png"],ut=["jpg","jpeg","png","gif"],ur=["jpg","jpeg","png","gif"],un=(e,t)=>t&&0!==t.length?`(?:\\.(${e.join("|")})|(\\.(${t.join("|")})))`:`(\\.(?:${e.join("|")}))`,ua=/^[\\/]favicon\.ico$/,ui=/^[\\/]robots\.txt$/,uo=/^[\\/]manifest\.json$/,us=/^[\\/]manifest\.webmanifest$/,ul=/[\\/]sitemap\.xml$/,uu=new Map;var uc=a("./dist/esm/shared/lib/isomorphic/path.js"),ud=a.n(uc),uf=a("./tags-manifest.external");class uh{constructor(e){this.fs=e,this.tasks=[]}findOrCreateTask(e){for(let t of this.tasks)if(t[0]===e)return t;let t=this.fs.mkdir(e);t.catch(()=>{});let r=[e,t,[]];return this.tasks.push(r),r}append(e,t){let r=this.findOrCreateTask(ud().dirname(e)),n=r[1].then(()=>this.fs.writeFile(e,t));n.catch(()=>{}),r[2].push(n)}wait(){return Promise.all(this.tasks.flatMap(e=>e[2]))}}let up=require("next/dist/server/lib/incremental-cache/memory-cache.external.js");class um{static #e=this.debug=!!process.env.NEXT_PRIVATE_DEBUG_CACHE;constructor(e){this.fs=e.fs,this.flushToDisk=e.flushToDisk,this.serverDistDir=e.serverDistDir,this.revalidatedTags=e.revalidatedTags,e.maxMemoryCacheSize?um.memoryCache?um.debug&&console.log("FileSystemCache: memory store already initialized"):(um.debug&&console.log("FileSystemCache: using memory store for fetch cache"),um.memoryCache=(0,up.getMemoryCache)(e.maxMemoryCacheSize)):um.debug&&console.log("FileSystemCache: not using memory store for fetch cache")}resetRequestCache(){}async revalidateTag(e,t){if(e="string"==typeof e?[e]:e,um.debug&&console.log("FileSystemCache: revalidateTag",e,t),0===e.length)return;let r=Date.now();for(let n of e){let e=uf.tagsManifest.get(n)||{};if(t){let a={...e};a.stale=r,void 0!==t.expire&&(a.expired=r+1e3*t.expire),uf.tagsManifest.set(n,a)}else uf.tagsManifest.set(n,{...e,expired:r})}}async get(...e){var t,r,n,a,i,o,s,l,u;let[c,d]=e,{kind:f}=d,h=null==(t=um.memoryCache)?void 0:t.get(c);if(um.debug&&(f===nt.FETCH?console.log("FileSystemCache: get",c,d.tags,f,!!h):console.log("FileSystemCache: get",c,f,!!h)),!h)try{if(f===nt.APP_ROUTE){let e=this.getFilePath(`${c}.body`,nt.APP_ROUTE),t=await this.fs.readFile(e),{mtime:r}=await this.fs.stat(e),n=JSON.parse(await this.fs.readFile(e.replace(/\.body$/,ey.EP),"utf8"));h={lastModified:r.getTime(),value:{kind:ne.APP_ROUTE,body:t,headers:n.headers,status:n.status}}}else{let e=this.getFilePath(f===nt.FETCH?c:`${c}.html`,f),t=await this.fs.readFile(e,"utf8"),{mtime:r}=await this.fs.stat(e);if(f===nt.FETCH){let{tags:e,fetchIdx:n,fetchUrl:a}=d;if(!this.flushToDisk)return null;let i=r.getTime(),l=JSON.parse(t);if(h={lastModified:i,value:l},(null==(o=h.value)?void 0:o.kind)===ne.FETCH){let t=null==(s=h.value)?void 0:s.tags;(null==e?void 0:e.every(e=>null==t?void 0:t.includes(e)))||(um.debug&&console.log("FileSystemCache: tags vs storedTags mismatch",e,t),await this.set(c,h.value,{fetchCache:!0,tags:e,fetchIdx:n,fetchUrl:a}))}}else if(f===nt.APP_PAGE){let n,a,i;try{n=JSON.parse(await this.fs.readFile(e.replace(/\.html$/,ey.EP),"utf8"))}catch{}if(null==n?void 0:n.segmentPaths){let e=new Map;a=e;let t=c+ey.mH;await Promise.all(n.segmentPaths.map(async r=>{let n=this.getFilePath(t+r+ey.tz,nt.APP_PAGE);try{e.set(r,await this.fs.readFile(n))}catch{}}))}d.isFallback||d.isRoutePPREnabled&&(null==n?void 0:n.postponed)!=null||(i=await this.fs.readFile(this.getFilePath(`${c}${ey.RM}`,nt.APP_PAGE))),h={lastModified:r.getTime(),value:{kind:ne.APP_PAGE,html:t,rscData:i,postponed:null==n?void 0:n.postponed,headers:null==n?void 0:n.headers,status:null==n?void 0:n.status,segmentData:a}}}else if(f===nt.PAGES){let e,n={};d.isFallback||(n=JSON.parse(await this.fs.readFile(this.getFilePath(`${c}${ey.x3}`,nt.PAGES),"utf8"))),h={lastModified:r.getTime(),value:{kind:ne.PAGES,html:t,pageData:n,headers:null==e?void 0:e.headers,status:null==e?void 0:e.status}}}else throw Object.defineProperty(Error(`Invariant: Unexpected route kind ${f} in file system cache.`),"__NEXT_ERROR_CODE",{value:"E445",enumerable:!1,configurable:!0})}h&&(null==(l=um.memoryCache)||l.set(c,h))}catch{return null}if((null==h||null==(r=h.value)?void 0:r.kind)===ne.APP_PAGE||(null==h||null==(n=h.value)?void 0:n.kind)===ne.APP_ROUTE||(null==h||null==(a=h.value)?void 0:a.kind)===ne.PAGES){let e=null==(u=h.value.headers)?void 0:u[ey.VC];if("string"==typeof e){let t=e.split(",");if(t.length>0&&(0,uf.areTagsExpired)(t,h.lastModified))return um.debug&&console.log("FileSystemCache: expired tags",t),null}}else if((null==h||null==(i=h.value)?void 0:i.kind)===ne.FETCH){let e=d.kind===nt.FETCH?[...d.tags||[],...d.softTags||[]]:[];if(e.some(e=>this.revalidatedTags.includes(e)))return um.debug&&console.log("FileSystemCache: was revalidated",e),null;if((0,uf.areTagsExpired)(e,h.lastModified))return um.debug&&console.log("FileSystemCache: expired tags",e),null}return h??null}async set(e,t,r){var n;if(null==(n=um.memoryCache)||n.set(e,{value:t,lastModified:Date.now()}),um.debug&&console.log("FileSystemCache: set",e),!this.flushToDisk||!t)return;let a=new uh(this.fs);if(t.kind===ne.APP_ROUTE){let r=this.getFilePath(`${e}.body`,nt.APP_ROUTE);a.append(r,t.body);let n={headers:t.headers,status:t.status,postponed:void 0,segmentPaths:void 0,prefetchHints:void 0};a.append(r.replace(/\.body$/,ey.EP),JSON.stringify(n,null,2))}else if(t.kind===ne.PAGES||t.kind===ne.APP_PAGE){let n=t.kind===ne.APP_PAGE,i=this.getFilePath(`${e}.html`,n?nt.APP_PAGE:nt.PAGES);if(a.append(i,t.html),r.fetchCache||r.isFallback||r.isRoutePPREnabled||a.append(this.getFilePath(`${e}${n?ey.RM:ey.x3}`,n?nt.APP_PAGE:nt.PAGES),n?t.rscData:JSON.stringify(t.pageData)),(null==t?void 0:t.kind)===ne.APP_PAGE){let e;if(t.segmentData){e=[];let r=i.replace(/\.html$/,ey.mH);for(let[n,i]of t.segmentData){e.push(n);let t=r+n+ey.tz;a.append(t,i)}}let r={headers:t.headers,status:t.status,postponed:t.postponed,segmentPaths:e,prefetchHints:void 0};a.append(i.replace(/\.html$/,ey.EP),JSON.stringify(r))}}else if(t.kind===ne.FETCH){let n=this.getFilePath(e,nt.FETCH);a.append(n,JSON.stringify({...t,tags:r.fetchCache?r.tags:[]}))}await a.wait()}getFilePath(e,t){switch(t){case nt.FETCH:return ud().join(this.serverDistDir,"..","cache","fetch-cache",e);case nt.PAGES:return ud().join(this.serverDistDir,"pages",e);case nt.IMAGE:case nt.APP_PAGE:case nt.APP_ROUTE:return ud().join(this.serverDistDir,"app",e);default:throw Object.defineProperty(Error(`Unexpected file path kind: ${t}`),"__NEXT_ERROR_CODE",{value:"E479",enumerable:!1,configurable:!0})}}}function ug(e){return e.replace(/(?:\/index)?\/?$/,"")||"/"}let uy=require("next/dist/server/lib/incremental-cache/shared-cache-controls.external.js");class uv{static #e=this.debug=!!process.env.NEXT_PRIVATE_DEBUG_CACHE;constructor({fs:e,dev:t,flushToDisk:r,minimalMode:n,serverDistDir:a,requestHeaders:i,maxMemoryCacheSize:o,getPrerenderManifest:s,fetchCacheKeyPrefix:l,CurCacheHandler:u,allowedRevalidateHeaderKeys:c}){var d,f,h,p;this.locks=new Map,this.hasCustomCacheHandler=!!u;const m=Symbol.for("@next/cache-handlers"),g=globalThis;if(u)uv.debug&&console.log("IncrementalCache: using custom cache handler",u.name);else{const t=g[m];(null==t?void 0:t.FetchCache)?(u=t.FetchCache,uv.debug&&console.log("IncrementalCache: using global FetchCache cache handler")):e&&a&&(uv.debug&&console.log("IncrementalCache: using filesystem cache handler"),u=um)}process.env.__NEXT_TEST_MAX_ISR_CACHE&&(o=parseInt(process.env.__NEXT_TEST_MAX_ISR_CACHE,10)),this.dev=t,this.disableForTestmode="true"===process.env.NEXT_PRIVATE_TEST_PROXY,this.minimalMode=n,this.requestHeaders=i,this.allowedRevalidateHeaderKeys=c,this.prerenderManifest=s(),this.cacheControls=new uy.SharedCacheControls(this.prerenderManifest),this.fetchCacheKeyPrefix=l;let y=[];i[ey.kz]===(null==(f=this.prerenderManifest)||null==(d=f.preview)?void 0:d.previewModeId)&&(this.isOnDemandRevalidate=!0),n&&(y=this.revalidatedTags=lo(i,null==(p=this.prerenderManifest)||null==(h=p.preview)?void 0:h.previewModeId)),u&&(this.cacheHandler=new u({dev:t,fs:e,flushToDisk:r,serverDistDir:a,revalidatedTags:y,maxMemoryCacheSize:o,_requestHeaders:i,fetchCacheKeyPrefix:l}))}calculateRevalidate(e,t,r,n){if(r)return Math.floor(performance.timeOrigin+performance.now()-1e3);let a=this.cacheControls.get(ug(e)),i=a?a.revalidate:!n&&1;return"number"==typeof i?1e3*i+t:i}_getPathname(e,t){return t?e:l5(e)}resetRequestCache(){var e,t;null==(t=this.cacheHandler)||null==(e=t.resetRequestCache)||e.call(t)}async lock(e){for(;;){let t=this.locks.get(e);if(uv.debug&&console.log("IncrementalCache: lock get",e,!!t),!t)break;await t}let{resolve:t,promise:r}=new I;return uv.debug&&console.log("IncrementalCache: successfully locked",e),this.locks.set(e,r),()=>{t(),this.locks.delete(e)}}async revalidateTag(e,t){var r;return null==(r=this.cacheHandler)?void 0:r.revalidateTag(e,t)}async generateCacheKey(e,t={}){let r=[],n=new TextEncoder,i=new TextDecoder;if(t.body)if(t.body instanceof Uint8Array)r.push(i.decode(t.body)),t._ogBody=t.body;else if("function"==typeof t.body.getReader){let e=t.body,a=[];try{await e.pipeTo(new WritableStream({write(e){"string"==typeof e?(a.push(n.encode(e)),r.push(e)):(a.push(e),r.push(i.decode(e,{stream:!0})))}})),r.push(i.decode());let o=a.reduce((e,t)=>e+t.length,0),s=new Uint8Array(o),l=0;for(let e of a)s.set(e,l),l+=e.length;t._ogBody=s}catch(e){console.error("Problem reading body",e)}}else if("function"==typeof t.body.keys){let e=t.body;for(let n of(t._ogBody=t.body,new Set([...e.keys()]))){let t=e.getAll(n);r.push(`${n}=${(await Promise.all(t.map(async e=>"string"==typeof e?e:await e.text()))).join(",")}`)}}else if("function"==typeof t.body.arrayBuffer){let e=t.body,n=await e.arrayBuffer();r.push(await e.text()),t._ogBody=new Blob([n],{type:e.type})}else"string"==typeof t.body&&(r.push(t.body),t._ogBody=t.body);let o="function"==typeof(t.headers||{}).keys?Object.fromEntries(t.headers):Object.assign({},t.headers);"traceparent"in o&&delete o.traceparent,"tracestate"in o&&delete o.tracestate;let s=JSON.stringify(["v3",this.fetchCacheKeyPrefix||"",e,t.method,o,t.mode,t.redirect,t.credentials,t.referrer,t.referrerPolicy,t.integrity,t.cache,r]);return a("crypto").createHash("sha256").update(s).digest("hex")}async get(e,t){var r,n,a,i,o,s,l;let u,c;if(t.kind===nt.FETCH){let r=eQ.workUnitAsyncStorage.getStore(),n=r?(0,eQ.getRenderResumeDataCache)(r):null;if(n){let r=n.fetch.get(e);if((null==r?void 0:r.kind)===ne.FETCH){let n=A.workAsyncStorage.getStore();if(![...t.tags||[],...t.softTags||[]].some(e=>{var t,r;return(null==(t=this.revalidatedTags)?void 0:t.includes(e))||(null==n||null==(r=n.pendingRevalidatedTags)?void 0:r.some(t=>t.tag===e))}))return uv.debug&&console.log("IncrementalCache: rdc:hit",e),{isStale:!1,value:r};uv.debug&&console.log("IncrementalCache: rdc:revalidated-tag",e)}else uv.debug&&console.log("IncrementalCache: rdc:miss",e)}else uv.debug&&console.log("IncrementalCache: rdc:no-resume-data")}if(this.disableForTestmode||this.dev&&(t.kind!==nt.FETCH||"no-cache"===this.requestHeaders["cache-control"]))return null;e=this._getPathname(e,t.kind===nt.FETCH);let d=await (null==(r=this.cacheHandler)?void 0:r.get(e,t));if(t.kind===nt.FETCH){if(!d)return null;if((null==(a=d.value)?void 0:a.kind)!==ne.FETCH)throw Object.defineProperty(new eB.z(`Expected cached value for cache key ${JSON.stringify(e)} to be a "FETCH" kind, got ${JSON.stringify(null==(i=d.value)?void 0:i.kind)} instead.`),"__NEXT_ERROR_CODE",{value:"E653",enumerable:!1,configurable:!0});let r=A.workAsyncStorage.getStore(),n=[...t.tags||[],...t.softTags||[]];if(n.some(e=>{var t,n;return(null==(t=this.revalidatedTags)?void 0:t.includes(e))||(null==r||null==(n=r.pendingRevalidatedTags)?void 0:n.some(t=>t.tag===e))}))return uv.debug&&console.log("IncrementalCache: expired tag",e),null;let o=eQ.workUnitAsyncStorage.getStore();if(o){let t=(0,eQ.getPrerenderResumeDataCache)(o);t&&(uv.debug&&console.log("IncrementalCache: rdc:set",e),t.fetch.set(e,d.value))}let s=t.revalidate||d.value.revalidate,l=(performance.timeOrigin+performance.now()-(d.lastModified||0))/1e3>s,u=d.value.data;return(0,uf.areTagsExpired)(n,d.lastModified)?null:((0,uf.areTagsStale)(n,d.lastModified)&&(l=!0),{isStale:l,value:{kind:ne.FETCH,data:u,revalidate:s}})}if((null==d||null==(n=d.value)?void 0:n.kind)===ne.FETCH)throw Object.defineProperty(new eB.z(`Expected cached value for cache key ${JSON.stringify(e)} not to be a ${JSON.stringify(t.kind)} kind, got "FETCH" instead.`),"__NEXT_ERROR_CODE",{value:"E652",enumerable:!1,configurable:!0});let f=null,{isFallback:h}=t,p=this.cacheControls.get(ug(e));if((null==d?void 0:d.lastModified)===-1)u=-1,c=-1*ey.eM*1e3;else{let r=performance.timeOrigin+performance.now(),n=(null==d?void 0:d.lastModified)||r;if(void 0===(u=!1!==(c=this.calculateRevalidate(e,n,this.dev??!1,t.isFallback))&&c0&&((0,uf.areTagsExpired)(t,n)?u=-1:(0,uf.areTagsStale)(t,n)&&(u=!0))}}}return d&&(f={isStale:u,cacheControl:p,revalidateAfter:c,value:d.value,isFallback:h}),!d&&this.prerenderManifest.notFoundRoutes.includes(e)&&(f={isStale:u,value:null,cacheControl:p,revalidateAfter:c,isFallback:h},this.set(e,f.value,{...t,cacheControl:p})),f}async set(e,t,r){if((null==t?void 0:t.kind)===ne.FETCH){let r=eQ.workUnitAsyncStorage.getStore(),n=r?(0,eQ.getPrerenderResumeDataCache)(r):null;n&&(uv.debug&&console.log("IncrementalCache: rdc:set",e),n.fetch.set(e,t))}if(this.disableForTestmode||this.dev&&!r.fetchCache)return;e=this._getPathname(e,r.fetchCache);let n=JSON.stringify(t).length;if(r.fetchCache&&n>2097152&&!this.hasCustomCacheHandler&&!r.isImplicitBuildTimeCache){let t=`Failed to set Next.js data cache for ${r.fetchUrl||e}, items over 2MB can not be cached (${n} bytes)`;if(this.dev)throw Object.defineProperty(Error(t),"__NEXT_ERROR_CODE",{value:"E1003",enumerable:!1,configurable:!0});console.warn(t);return}try{var a;!r.fetchCache&&r.cacheControl&&this.cacheControls.set(ug(e),r.cacheControl),await (null==(a=this.cacheHandler)?void 0:a.set(e,t,r))}catch(t){console.warn("Failed to update prerender cache for",e,t)}}}let ub=Symbol.for("@next/router-server-methods"),uw=globalThis;function uS(e){var t,r;return(null==(r=e.has)||null==(t=r[0])?void 0:t.key)===z.kO}let u_=e=>import(e).then(e=>e.default||e);class uE{constructor({userland:e,definition:t,distDir:r,relativeProjectDir:n}){this.userland=e,this.definition=t,this.isDev=!1,this.distDir=r,this.relativeProjectDir=n}getRouterServerContext(e){var t;let r=P(e,"hostname"),n=P(e,"revalidate"),a=P(e,"render404"),i=P(e,"relativeProjectDir")||this.relativeProjectDir;return{...null==(t=uw[ub])?void 0:t[i],...void 0!==r?{hostname:r}:{},...void 0!==n?{revalidate:n}:{},...void 0!==a?{render404:a}:{}}}normalizeUrl(e,t){}async instrumentationOnRequestError(e,...t){{let{join:r}=a("node:path"),n=r(process.cwd(),P(e,"relativeProjectDir")||this.relativeProjectDir),{instrumentationOnRequestError:i}=await Promise.resolve().then(a.t.bind(a,"../lib/router-utils/instrumentation-globals.external.js",23));return i(n,this.distDir,...t)}}loadManifests(e,t){let r;{var n,i;let o;if(!t)throw Object.defineProperty(Error("Invariant: projectDir is required for node runtime"),"__NEXT_ERROR_CODE",{value:"E718",enumerable:!1,configurable:!0});let{loadManifestFromRelativePath:s}=a("../load-manifest.external"),l=l5(e),u=this.definition.kind===nr.PAGES||this.definition.kind===nr.PAGES_API?"pages":"app",[c,d,f,h,p,m,g,y,v,b,w,S]=[s({projectDir:t,distDir:this.distDir,manifest:"routes-manifest.json",shouldCache:!this.isDev}),s({projectDir:t,distDir:this.distDir,manifest:"prerender-manifest.json",shouldCache:!this.isDev}),s({projectDir:t,distDir:this.distDir,manifest:l1,shouldCache:!this.isDev}),"/_error"===e?s({projectDir:t,distDir:this.distDir,manifest:`fallback-${l1}`,shouldCache:!this.isDev,handleMissing:!0}):{},s({projectDir:t,distDir:this.distDir,manifest:`server/${"app"===u?"app":"pages"}${l}/react-loadable-manifest.json`,handleMissing:!0,shouldCache:!this.isDev}),s({projectDir:t,distDir:this.distDir,manifest:"server/next-font-manifest.json",shouldCache:!this.isDev}),"app"!==u||(o=(i=e).replace(/\/route$/,""),i.endsWith("/route")&&function(e,t,r){if(!e||e.length<2)return!1;let n=e.replace(/\\/g,"/"),a=!!(ua.test(n)||ui.test(n)||uo.test(n)||us.test(n)||ul.test(n))||(!!n.includes("robots")||!!n.includes("manifest")||!!n.includes("sitemap")||!!n.includes("icon")||!!n.includes("apple-icon")||!!n.includes("opengraph-image")||!!n.includes("twitter-image")||!!n.includes("favicon"))&&null;if(null!==a)return a;let i=function(e,t){let r=`${e.join(",")}|${t}`,n=uu.get(r);if(n)return n;let a=t?"$":"?$",i="\\d?"+(t?"":"(-\\w{6})?"),o=e.length>0?[...e,"txt"]:["txt"],s=e.length>0?[...e,"webmanifest","json"]:["webmanifest","json"],l=[RegExp(`^[\\\\/]robots${un(o,null)}${a}`),RegExp(`^[\\\\/]manifest${un(s,null)}${a}`),RegExp(`[\\\\/]sitemap${un(["xml"],e)}${a}`),RegExp(`[\\\\/]icon${i}${un(l7,e)}${a}`),RegExp(`[\\\\/]apple-icon${i}${un(ue,e)}${a}`),RegExp(`[\\\\/]opengraph-image${i}${un(ut,e)}${a}`),RegExp(`[\\\\/]twitter-image${i}${un(ur,e)}${a}`)];return uu.set(r,l),l}(t,r);for(let e=0;enew RegExp(e.regex))}}return r}async loadCustomCacheHandlers(e,t){{let{cacheMaxMemorySize:r,cacheHandlers:n}=t;if(!n||!(0,tC.q3)(r))return;for(let[t,r]of Object.entries(n)){if(!r)continue;let{formatDynamicImportPath:n}=a("./dist/esm/lib/format-dynamic-import-path.js"),{join:i}=a("node:path"),o=i(process.cwd(),P(e,"relativeProjectDir")||this.relativeProjectDir);(0,tC.XJ)(t,r4(await u_(n(`${o}/${this.distDir}`,r))))}}}async getIncrementalCache(e,t,r,n){{let i,{cacheHandler:o}=t;if(o){let{formatDynamicImportPath:e}=a("./dist/esm/lib/format-dynamic-import-path.js");i=r4(await u_(e(this.distDir,o)))}let{join:s}=a("node:path"),l=s(process.cwd(),P(e,"relativeProjectDir")||this.relativeProjectDir);await this.loadCustomCacheHandlers(e,t);let u=new uv({fs:a("./dist/esm/server/lib/node-fs-methods.js").e,dev:this.isDev,requestHeaders:e.headers,allowedRevalidateHeaderKeys:t.experimental.allowedRevalidateHeaderKeys,minimalMode:n,serverDistDir:`${l}/${this.distDir}/server`,fetchCacheKeyPrefix:t.experimental.fetchCacheKeyPrefix,maxMemoryCacheSize:t.cacheMaxMemorySize,flushToDisk:!n&&t.experimental.isrFlushToDisk,getPrerenderManifest:()=>r,CurCacheHandler:i});return globalThis.__incrementalCache=u,u}}async onRequestError(e,t,r,n,a){n||((null==a?void 0:a.logErrorWithOriginalStack)?a.logErrorWithOriginalStack(t,"app-dir"):console.error(t)),await this.instrumentationOnRequestError(e,t,{path:e.url||"/",headers:e.headers,method:e.method||"GET"},r)}getNextConfigEdge(e){throw Object.defineProperty(Error("Invariant: getNextConfigEdge must only be called in edge runtime"),"__NEXT_ERROR_CODE",{value:"E968",enumerable:!1,configurable:!0})}async prepare(e,t,{srcPage:r,multiZoneDraftMode:n}){var i,o;let s,l,u,c,d;{t&&function(e,t){if(t[l8])return;let r=t.setHeader.bind(t);Object.defineProperty(t,l8,{value:!0}),t.setHeader=(n,a)=>{if("headersSent"in t&&t.headersSent)return t;if("set-cookie"===n.toLowerCase()){let t=P(e,"middlewareCookie");t&&Array.isArray(a)&&a.every((e,r)=>e===t[r])||(a=[...new Set([...t||[],..."string"==typeof a?[a]:Array.isArray(a)?a:[]])])}return r(n,a)}}(e,t);let{join:r,relative:n}=a("node:path");s=r(process.cwd(),P(e,"relativeProjectDir")||this.relativeProjectDir);let i=P(e,"distDir");i&&(this.distDir=n(s,i));let{ensureInstrumentationRegistered:o}=await Promise.resolve().then(a.t.bind(a,"../lib/router-utils/instrumentation-globals.external.js",23));o(s,this.distDir)}let f=this.loadManifests(r,s),{routesManifest:h,prerenderManifest:p,serverFilesManifest:m}=f,{basePath:g,i18n:y,rewrites:v}=h,b=this.getRouterServerContext(e),w=(null==b?void 0:b.nextConfig)||(null==m?void 0:m.config),S=(null==(i=e.headers["x-forwarded-proto"])?void 0:i.includes("https"))?"https":"http";if(!P(e,"initURL")){let t=(null==m?void 0:m.config.experimental.trustHostHeader)?`${S}://${e.headers.host||"localhost"}${e.url}`:`${S}://${(null==b?void 0:b.hostname)||"localhost"}${e.url}`;C(e,"initURL",t),C(e,"initProtocol",S)}g&&(e.url=eC(e.url||"/",g));let _=lr(e.url||"/");if(C(e,"initQuery",{...null==_?void 0:_.query}),!_)return;let E=!1;eR(_.pathname||"/","/_next/data")&&(E=!0,_.pathname=l6(_.pathname||"/")),this.normalizeUrl(e,_);let R=_.pathname||"/",k={..._.query},x=l3(r);y&&(l=eP(_.pathname||"/",y.locales)).detectedLocale&&(e.url=`${l.pathname}${_.search}`,R=l.pathname,u||(u=l.detectedLocale));let T=(0,eZ.Yr)(r),A=function({page:e,i18n:t,basePath:r,rewrites:n,pageIsDynamic:i,trailingSlash:o,caseSensitive:s}){let l,u,c;if(i){var d;let t,r;r=(t=function(e,t,r,n,a,i={names:{},intercepted:{}}){let o,s=(o=0,()=>{let e="",t=++o;for(;t>0;)e+=String.fromCharCode(97+(t-1)%26),t=Math.floor((t-1)/26);return e}),l={},u=[],c=[];for(let o of(i=structuredClone(i),ew(e).slice(1).split("/"))){let e,d=nO.VB.some(e=>o.startsWith(e)),f=o.match(nL),h=d?f?.[1]:void 0;if(h&&f?.[2]?(e=t?ey.h:void 0,i.intercepted[f[2]]=h):e=f?.[2]&&i.intercepted[f[2]]?t?ey.h:void 0:t?ey.AA:void 0,h&&f&&f[2]){let{key:t,pattern:r,cleanedKey:n,repeat:o,optional:d}=sZ({getSafeRouteKey:s,interceptionMarker:h,segment:f[2],routeKeys:l,keyPrefix:e,backreferenceDuplicateKeys:a});u.push(r),c.push(`/${f[1]}:${i.names[t]??n}${o?d?"*":"+":""}`),i.names[t]??=n}else if(f&&f[2]){n&&f[1]&&(u.push(`/${sY(f[1])}`),c.push(`/${f[1]}`));let{key:t,pattern:r,cleanedKey:o,repeat:d,optional:h}=sZ({getSafeRouteKey:s,segment:f[2],routeKeys:l,keyPrefix:e,backreferenceDuplicateKeys:a}),p=r;n&&f[1]&&(p=p.substring(1)),u.push(p),c.push(`/:${i.names[t]??o}${d?h?"*":"+":""}`),i.names[t]??=o}else u.push(`/${sY(o)}`),c.push(`/${o}`);r&&f&&f[3]&&(u.push(sY(f[3])),c.push(f[3]))}return{namedParameterizedRoute:u.join(""),routeKeys:l,pathToRegexpPattern:c.join(""),reference:i}}(e,(d={prefixRouteKeys:!1}).prefixRouteKeys,d.includeSuffix??!1,d.includePrefix??!1,d.backreferenceDuplicateKeys??!1,d.reference)).namedParameterizedRoute,d.excludeOptionalTrailingSlash||(r+="(?:/)?"),c=(u=s9(l={...sQ(e,d),namedRegex:`^${r}$`,routeKeys:t.routeKeys,pathToRegexpPattern:t.pathToRegexpPattern,reference:t.reference}))(e)}return{handleRewrites:function(l,c){let d=structuredClone(c),f={},h=d.pathname,p=n=>{var c,p;let m,g,y,v=(c=n.source+(o?"(/)?":""),p={removeUnnamedParams:!0,strict:!0,sensitive:!!s},m=[],g=(0,sG.pathToRegexp)(c,m,{delimiter:"/",sensitive:"boolean"==typeof p?.sensitive&&p.sensitive,strict:p?.strict}),y=(0,sG.regexpToFunction)(p?.regexModifier?new RegExp(p.regexModifier(g.source),g.flags):g,m),(e,t)=>{if("string"!=typeof e)return!1;let r=y(e);if(!r)return!1;if(p?.removeUnnamedParams)for(let e of m)"number"==typeof e.name&&delete r.params[e.name];return{...t,...r.params}});if(!d.pathname)return!1;let b=v(d.pathname);if((n.has||n.missing)&&b){let e=function(e,t,r=[],n=[]){let i={},o=r=>{let n,o=r.key;switch(r.type){case"header":o=o.toLowerCase(),n=e.headers[o];break;case"cookie":if("cookies"in e)n=e.cookies[r.key];else{var s;n=(s=e.headers,function(){let{cookie:e}=s;if(!e)return{};let{parse:t}=a("./dist/compiled/cookie/index.js");return t(Array.isArray(e)?e.join("; "):e)})()[r.key]}break;case"query":n=t[o];break;case"host":{let{host:t}=e?.headers||{};n=t?.split(":",1)[0].toLowerCase()}}if(!r.value&&n)return i[function(e){let t="";for(let r=0;r64&&n<91||n>96&&n<123)&&(t+=e[r])}return t}(o)]=n,!0;if(n){let e=RegExp(`^${r.value}$`),t=Array.isArray(n)?n.slice(-1)[0].match(e):n.match(e);if(t)return Array.isArray(t)&&(t.groups?Object.keys(t.groups).forEach(e=>{i[e]=t.groups[e]}):"host"===r.type&&t[0]&&(i.host=t[0])),!0}return!1};return!(!r.every(e=>o(e))||n.some(e=>o(e)))&&i}(l,d.query,n.has,n.missing);e?Object.assign(b,e):b=!1}if(b){let{parsedDestination:a,destQuery:o}=function(e){let t,r,n=function(e){let t=e.destination;for(let r of Object.keys({...e.params,...e.query}))r&&(t=t.replace(RegExp(`:${sY(r)}`,"g"),`__ESC_COLON_${r}`));let r=function(e){if(e.startsWith("/"))return(0,nG.r)(e);let t=new URL(e),r=t.username,n=t.password,a=r?n?`${r}:${n}`:r:null,i=t.pathname,o=t.search;return{auth:a,hash:t.hash,hostname:t.hostname,href:t.href,pathname:i,port:t.port,protocol:t.protocol,query:(0,s5.v1)(t.searchParams),search:o,origin:t.origin,slashes:"//"===t.href.slice(t.protocol.length,t.protocol.length+2)}}(t),n=r.pathname;n&&(n=s7(n));let a=r.href;a&&(a=s7(a));let i=r.hostname;i&&(i=s7(i));let o=r.hash;o&&(o=s7(o));let s=r.search;s&&(s=s7(s));let l=r.origin;return l&&(l=s7(l)),{...r,pathname:n,hostname:i,href:a,hash:o,search:s,origin:l}}(e),{hostname:a,query:i,search:o}=n,s=n.pathname;n.hash&&(s=`${s}${n.hash}`);let l=[],u=[];for(let e of(s6(s,u),u))l.push(e.name);if(a){let e=[];for(let t of(s6(a,e),e))l.push(t.name)}let c=s8(s,{validate:!1});for(let[r,n]of(a&&(t=s8(a,{validate:!1})),Object.entries(i)))Array.isArray(n)?i[r]=n.map(t=>le(s7(t),e.params)):"string"==typeof n&&(i[r]=le(s7(n),e.params));let d=Object.keys(e.params).filter(e=>"nextInternalLocale"!==e);if(e.appendParamsToQuery&&!d.some(e=>l.includes(e)))for(let t of d)t in i||(i[t]=e.params[t]);if((0,nO.m1)(s))for(let t of s.split("/")){let r=nO.VB.find(e=>t.startsWith(e));if(r){"(..)(..)"===r?(e.params["0"]="(..)",e.params["1"]="(..)"):e.params["0"]=r;break}}try{let[a,i]=(r=c(e.params)).split("#",2);t&&(n.hostname=t(e.params)),n.pathname=a,n.hash=`${i?"#":""}${i||""}`,n.search=o?le(o,e.params):""}catch(e){if(e.message.match(/Expected .*? to not repeat, but got an array/))throw Object.defineProperty(Error("To use a multi-match in the destination you must add `*` at the end of the param name to signify it should repeat. https://nextjs.org/docs/messages/invalid-multi-match"),"__NEXT_ERROR_CODE",{value:"E329",enumerable:!1,configurable:!0});throw e}return n.query={...e.query,...n.query},{newUrl:r,destQuery:i,parsedDestination:n}}({appendParamsToQuery:!0,destination:n.destination,params:b,query:d.query});if(a.protocol)return!0;if(Object.assign(f,o,b),Object.assign(d.query,a.query),delete a.query,Object.assign(d,a),!(h=d.pathname))return!1;if(r&&(h=h.replace(RegExp(`^${r}`),"")||"/"),t){let e=eP(h,t.locales);h=e.pathname,d.query.nextInternalLocale=e.detectedLocale||b.nextInternalLocale}if(h===e)return!0;if(i&&u){let e=u(h);if(e)return d.query={...d.query,...e},!0}}return!1};for(let e of n.beforeFiles||[])p(e);if(h!==e){let t,r=!1;for(let e of n.afterFiles||[])if(r=p(e))break;if(!r&&!((t=ew(h||""))===ew(e)||(null==u?void 0:u(t)))){for(let e of n.fallback||[])if(r=p(e))break}}return{rewriteParams:f,rewrittenParsedUrl:d}},defaultRouteRegex:l,dynamicRouteMatcher:u,defaultRouteMatches:c,normalizeQueryParams:function(e,t){for(let[r,n]of(delete e.nextInternalLocale,Object.entries(e))){let a=ev(r);a&&(delete e[r],t.add(a),void 0!==n&&(e[a]=Array.isArray(n)?n.map(e=>lt(e)):lt(n)))}},getParamsFromRouteMatches:function(e){if(!l)return null;let{groups:t,routeKeys:r}=l,n=s9({re:{exec:e=>{let n=Object.fromEntries(new URLSearchParams(e));for(let[e,t]of Object.entries(n)){let r=ev(e);r&&(n[r]=t,delete n[e])}let a={};for(let e of Object.keys(r)){let i=r[e];if(!i)continue;let o=t[i],s=n[e];if(!o.optional&&!s)return null;a[o.pos]=s}return a}},groups:t})(e);return n||null},normalizeDynamicRouteParams:(e,t)=>l&&c?function(e,t,r,n){let a=(e,t)=>{if(!e)return!1;let r=(0,eZ.P7)(e);for(let e=0;e<3;e++){if(r===t)return!0;let e=lt(r);if(e===r)break;r=e}return!1},i={};for(let o of Object.keys(t.groups)){let s=e[o];"string"==typeof s?s=(0,eZ.P7)(s):Array.isArray(s)&&(s=s.map(eZ.P7));let l=r[o],u=t.groups[o].optional;if((Array.isArray(l)?l.some(e=>Array.isArray(s)?s.some(t=>a(t,e)):a(s,e)):Array.isArray(s)?s.some(e=>a(e,l)):a(s,l))||void 0===s&&!(u&&n))return{params:{},hasValidParams:!1};u&&(!s||Array.isArray(s)&&1===s.length&&("index"===s[0]||s[0]===`[[...${o}]]`)||"index"===s||s===`[[...${o}]]`)&&(s=void 0,delete e[o]),s&&"string"==typeof s&&t.groups[o].repeat&&(s=s.split("/")),s&&(i[o]=s)}return{params:i,hasValidParams:!0}}(e,l,c,t):{params:{},hasValidParams:!1},normalizeCdnUrl:(e,t)=>(function(e,t){let r=lr(e.url);if(!r)return e.url;delete r.search,li(r.query,t),e.url=la(r)})(e,t),interpolateDynamicPath:(e,t)=>(function(e,t,r){if(!r)return e;for(let n of Object.keys(r.groups)){let a,{optional:i,repeat:o}=r.groups[n],s=`[${o?"...":""}${n}]`;i&&(s=`[${s}]`);let l=t[n];((a=Array.isArray(l)?l.map(e=>e&&encodeURIComponent(e)).join("/"):l?encodeURIComponent(l):"")||i)&&(e=e.replaceAll(s,a))}return e})(e,t,l),filterInternalQuery:(e,t)=>li(e,t)}}({page:T,i18n:y,basePath:g,rewrites:v,pageIsDynamic:x,trailingSlash:process.env.__NEXT_TRAILING_SLASH,caseSensitive:!!h.caseSensitive}),O=eb(null==y?void 0:y.domains,ek(_,e.headers),u);O&&C(e,"isLocaleDomain",!!O);let j=P(e,"defaultLocale")||(null==O?void 0:O.defaultLocale)||(null==y?void 0:y.defaultLocale);j&&!u&&(_.pathname=`/${j}${"/"===_.pathname?"":_.pathname}`);let $=P(e,"locale")||u||j,{rewriteParams:I,rewrittenParsedUrl:D}=A.handleRewrites(e,_),N=Object.keys(I);Object.assign(_.query,D.query),y&&(_.pathname=eP(_.pathname||"/",y.locales).pathname,D.pathname=eP(D.pathname||"/",y.locales).pathname);let M=P(e,"params");if(!M&&A.dynamicRouteMatcher){let e=A.dynamicRouteMatcher(l6((null==D?void 0:D.pathname)||_.pathname||"/")),t=A.normalizeDynamicRouteParams(e||{},!0);t.hasValidParams&&(M=t.params)}let L=P(e,"query")||{..._.query},U=new Set,F=[];if(this.definition.kind===nr.PAGES||this.definition.kind===nr.PAGES_API)for(let e of[...N,...Object.keys(A.defaultRouteMatches||{})]){let t=Array.isArray(k[e])?k[e].join(""):k[e],r=Array.isArray(L[e])?L[e].join(""):L[e];e in k&&t!==r||F.push(e)}if(A.normalizeCdnUrl(e,F),(null==b?void 0:b.isWrappedByNextServer)?A.filterInternalQuery(L,[]):A.normalizeQueryParams(L,U),A.filterInternalQuery(k,F),x){let t,r=A.normalizeDynamicRouteParams(L,!0),n=A.normalizeDynamicRouteParams(M||{},!0);if(L&&M&&n.hasValidParams&&r.hasValidParams&&U.size>0&&Object.keys(n.params).length<=Object.keys(r.params).length?(t=r.params,M=Object.assign(r.params)):t=n.hasValidParams&&M?M:r.hasValidParams?L:{},e.url=A.interpolateDynamicPath(e.url||"/",t),_.pathname=A.interpolateDynamicPath(_.pathname||"/",t),R=A.interpolateDynamicPath(R,t),!M)if(r.hasValidParams)for(let e in M=Object.assign({},r.params),A.defaultRouteMatches)delete L[e];else{let e=null==A.dynamicRouteMatcher?void 0:A.dynamicRouteMatcher.call(A,l6((null==l?void 0:l.pathname)||_.pathname||"/"));e&&(M=Object.assign({},e))}}for(let e of U)e in k?k[e]&&L[e]&&k[e]!==L[e]&&(L[e]=k[e]):delete L[e];let{isOnDemandRevalidate:H,revalidateOnlyGenerated:B}=(0,t_.checkIsOnDemandRevalidate)(e,p.preview),z=!1;if(t){let{tryGetPreviewData:r}=a("./dist/esm/server/api-utils/node/try-get-preview-data.js");z=!1!==(c=r(e,t,p.preview,!!n))}if(!w)throw Object.defineProperty(Error("Invariant: nextConfig couldn't be loaded"),"__NEXT_ERROR_CODE",{value:"E969",enumerable:!1,configurable:!0});{let{installProcessErrorHandlers:e}=a("./dist/esm/server/node-environment-extensions/process-error-handlers.js");e(!!w.experimental.removeUncaughtErrorAndRejectionListeners)}let q=T;l3(q)&&M&&(q=A.interpolateDynamicPath(q,M)),"/index"===q&&(q="/"),t&&e.headers["x-nextjs-data"]&&(!t.statusCode||200===t.statusCode)&&t.setHeader("x-nextjs-matched-path",ew(`${$?`/${$}`:""}${T}`));let X=q;try{q=q.split("/").map(e=>{try{var t;t=decodeURIComponent(e),e=t.replace(RegExp("([/#?]|%(2f|23|3f|5c))","gi"),e=>encodeURIComponent(e))}catch(e){throw Object.defineProperty(new s0.Xc("Failed to decode path param(s)."),"__NEXT_ERROR_CODE",{value:"E539",enumerable:!1,configurable:!0})}return e}).join("/")}catch(e){}if(C(e,"resolvedPathname",q=ew(q)),null==(o=w.experimental)?void 0:o.runtimeServerDeploymentId){if(!process.env.NEXT_DEPLOYMENT_ID)throw Object.defineProperty(Error("process.env.NEXT_DEPLOYMENT_ID is missing but runtimeServerDeploymentId is enabled"),"__NEXT_ERROR_CODE",{value:"E970",enumerable:!1,configurable:!0});d=process.env.NEXT_DEPLOYMENT_ID}else d=w.deploymentId||"";return{query:L,originalQuery:k,originalPathname:R,params:M,parsedUrl:_,locale:$,isNextDataRequest:E,locales:null==y?void 0:y.locales,defaultLocale:j,isDraftMode:z,previewData:c,pageIsDynamic:x,resolvedPathname:q,encodedResolvedPathname:X,isOnDemandRevalidate:H,revalidateOnlyGenerated:B,...f,nextConfig:w,routerServerContext:b,deploymentId:d,clientAssetToken:w.experimental.immutableAssetToken||d}}getResponseCache(e){if(!this.responseCache){let t=P(e,"minimalMode")??!1;this.responseCache=new nc(t)}return this.responseCache}async handleResponse({req:e,nextConfig:t,cacheKey:r,routeKind:n,isFallback:a,prerenderManifest:i,isRoutePPREnabled:o,isOnDemandRevalidate:s,revalidateOnlyGenerated:l,responseGenerator:u,waitUntil:c,isMinimalMode:d}){let f=this.getResponseCache(e),h=await f.get(r,u,{routeKind:n,isFallback:a,isRoutePPREnabled:o,isOnDemandRevalidate:s,isPrefetch:"prefetch"===e.headers.purpose,invocationID:e.headers["x-invocation-id"],incrementalCache:await this.getIncrementalCache(e,t,i,d),waitUntil:c});if(!h&&r&&!(s&&l))throw Object.defineProperty(Error("invariant: cache entry required but not generated"),"__NEXT_ERROR_CODE",{value:"E62",enumerable:!1,configurable:!0});return h}}var uR=a("./dist/esm/shared/lib/head-manager-context.shared-runtime.js");let uk=O.createContext(null);class ux{constructor(e,t){this.matchers=Object.entries(t.dynamicRoutes).filter(([t,r])=>r.fallbackSourceRoute===e||t===e).map(([e,t])=>({source:e,route:t}))}match(e){for(let t of this.matchers)if(t.matcher||(t.matcher=s9(sQ(t.source))),t.matcher(e))return{source:t.source,route:t.route};return null}}class uP{constructor(e){this.suffix=e}match(e){return!!e.endsWith(this.suffix)}normalize(e,t){return t||this.match(e)?e.substring(0,e.length-this.suffix.length):e}}class uC extends uP{constructor(){super(ey.RM)}}let uT=RegExp(`^(/.*)${sY(ey.mH)}(/.*)${sY(ey.tz)}$`);class uA{match(e){return uT.test(e)}extract(e){let t=e.match(uT);return t?{originalPathname:t[1],segmentPath:t[2]}:null}normalize(e){let t=this.extract(e);return t?t.originalPathname:e}}{r=a("(react-server)/./dist/esm/server/route-modules/app-page/vendored/rsc/entrypoints.js"),n=a("./dist/esm/server/route-modules/app-page/vendored/ssr/entrypoints.js");let{registerServerReact:e,registerClientReact:t}=a("../../runtime-reacts.external");e(r.React),t(n.React)}class uO extends uE{match(e,t){let r=this.matchers.get(t);return r||(r=new ux(this.definition.pathname,t),this.matchers.set(t,r)),r.match(e)}normalizeUrl(e,t){if(this.normalizers.segmentPrefetchRSC.match(t.pathname||"/")){let r=this.normalizers.segmentPrefetchRSC.extract(t.pathname||"/");if(!r)return!1;let{originalPathname:n,segmentPath:a}=r;t.pathname=n,e.headers[z.hY]="1",e.headers[z._V]="1",e.headers[z.qm]=a,C(e,"isRSCRequest",!0),C(e,"isPrefetchRSCRequest",!0),C(e,"segmentPrefetchRSCRequest",a)}else this.normalizers.rsc.match(t.pathname||"/")?(t.pathname=this.normalizers.rsc.normalize(t.pathname||"/",!0),e.headers[z.hY]="1",C(e,"isRSCRequest",!0)):super.normalizeUrl(e,t);!function(e,t){if(!e.url)return;let r=lr(e.url);r&&(r.pathname=t,e.url=la(r))}(e,t.pathname||"/")}render(e,t,r){return lU(e,t,r.page,r.query,r.fallbackRouteParams,r.renderOpts,r.serverComponentsHmrCache,r.sharedContext)}pathCouldBeIntercepted(e,t){return(0,nO.m1)(e)||t.some(t=>t.test(e))}getVaryHeader(e,t){let r=`${z.hY}, ${z.B}, ${z._V}, ${z.qm}`;return this.pathCouldBeIntercepted(e,t)?`${r}, ${z.kO}`:r}constructor(...e){super(...e),this.matchers=new WeakMap,this.normalizers={rsc:new uC,segmentPrefetchRSC:new uA}}}let uj={"react-rsc":r,"react-ssr":n,contexts:k},u$=uO})(),module.exports=i})(); +//# sourceMappingURL=app-page-turbo-experimental.runtime.prod.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js b/build/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js new file mode 100644 index 0000000..57351c0 --- /dev/null +++ b/build/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js @@ -0,0 +1,54 @@ +(()=>{var e,t,r={"./dist/build/webpack/alias/react-dom-server.js"(e,t,r){"use strict";var n;function a(){throw Object.defineProperty(Error("Internal Error: do not use legacy react-dom/server APIs. If you encountered this error, please open an issue on the Next.js repo."),"__NEXT_ERROR_CODE",{value:"E1021",enumerable:!1,configurable:!0})}t.version=(n=r("./dist/compiled/react-dom/cjs/react-dom-server.node.production.js")).version,t.renderToReadableStream=n.renderToReadableStream,t.renderToString=a,t.renderToStaticMarkup=a,n.resume&&(t.resume=n.resume)},"./dist/compiled/@edge-runtime/cookies/index.js"(e){"use strict";var t=Object.defineProperty,r=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,a=Object.prototype.hasOwnProperty,i={},s={RequestCookies:()=>h,ResponseCookies:()=>p,parseCookie:()=>u,parseSetCookie:()=>c,stringifyCookie:()=>l};for(var o in s)t(i,o,{get:s[o],enumerable:!0});function l(e){var t;let r=["path"in e&&e.path&&`Path=${e.path}`,"expires"in e&&(e.expires||0===e.expires)&&`Expires=${("number"==typeof e.expires?new Date(e.expires):e.expires).toUTCString()}`,"maxAge"in e&&"number"==typeof e.maxAge&&`Max-Age=${e.maxAge}`,"domain"in e&&e.domain&&`Domain=${e.domain}`,"secure"in e&&e.secure&&"Secure","httpOnly"in e&&e.httpOnly&&"HttpOnly","sameSite"in e&&e.sameSite&&`SameSite=${e.sameSite}`,"partitioned"in e&&e.partitioned&&"Partitioned","priority"in e&&e.priority&&`Priority=${e.priority}`].filter(Boolean),n=`${e.name}=${encodeURIComponent(null!=(t=e.value)?t:"")}`;return 0===r.length?n:`${n}; ${r.join("; ")}`}function u(e){let t=new Map;for(let r of e.split(/; */)){if(!r)continue;let e=r.indexOf("=");if(-1===e){t.set(r,"true");continue}let[n,a]=[r.slice(0,e),r.slice(e+1)];try{t.set(n,decodeURIComponent(null!=a?a:"true"))}catch{}}return t}function c(e){if(!e)return;let[[t,r],...n]=u(e),{domain:a,expires:i,httponly:s,maxage:o,path:l,samesite:c,secure:h,partitioned:p,priority:m}=Object.fromEntries(n.map(([e,t])=>[e.toLowerCase().replace(/-/g,""),t]));{var g,y,v={name:t,value:decodeURIComponent(r),domain:a,...i&&{expires:new Date(i)},...s&&{httpOnly:!0},..."string"==typeof o&&{maxAge:Number(o)},path:l,...c&&{sameSite:d.includes(g=(g=c).toLowerCase())?g:void 0},...h&&{secure:!0},...m&&{priority:f.includes(y=(y=m).toLowerCase())?y:void 0},...p&&{partitioned:!0}};let e={};for(let t in v)v[t]&&(e[t]=v[t]);return e}}e.exports=((e,i,s,o)=>{if(i&&"object"==typeof i||"function"==typeof i)for(let l of n(i))a.call(e,l)||l===s||t(e,l,{get:()=>i[l],enumerable:!(o=r(i,l))||o.enumerable});return e})(t({},"__esModule",{value:!0}),i);var d=["strict","lax","none"],f=["low","medium","high"],h=class{constructor(e){this._parsed=new Map,this._headers=e;const t=e.get("cookie");if(t)for(const[e,r]of u(t))this._parsed.set(e,{name:e,value:r})}[Symbol.iterator](){return this._parsed[Symbol.iterator]()}get size(){return this._parsed.size}get(...e){let t="string"==typeof e[0]?e[0]:e[0].name;return this._parsed.get(t)}getAll(...e){var t;let r=Array.from(this._parsed);if(!e.length)return r.map(([e,t])=>t);let n="string"==typeof e[0]?e[0]:null==(t=e[0])?void 0:t.name;return r.filter(([e])=>e===n).map(([e,t])=>t)}has(e){return this._parsed.has(e)}set(...e){let[t,r]=1===e.length?[e[0].name,e[0].value]:e,n=this._parsed;return n.set(t,{name:t,value:r}),this._headers.set("cookie",Array.from(n).map(([e,t])=>l(t)).join("; ")),this}delete(e){let t=this._parsed,r=Array.isArray(e)?e.map(e=>t.delete(e)):t.delete(e);return this._headers.set("cookie",Array.from(t).map(([e,t])=>l(t)).join("; ")),r}clear(){return this.delete(Array.from(this._parsed.keys())),this}[Symbol.for("edge-runtime.inspect.custom")](){return`RequestCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`}toString(){return[...this._parsed.values()].map(e=>`${e.name}=${encodeURIComponent(e.value)}`).join("; ")}},p=class{constructor(e){var t,r,n;this._parsed=new Map,this._headers=e;const a=null!=(n=null!=(r=null==(t=e.getSetCookie)?void 0:t.call(e))?r:e.get("set-cookie"))?n:[];for(const e of Array.isArray(a)?a:function(e){if(!e)return[];var t,r,n,a,i,s=[],o=0;function l(){for(;o=e.length)&&s.push(e.substring(t,e.length))}return s}(a)){const t=c(e);t&&this._parsed.set(t.name,t)}}get(...e){let t="string"==typeof e[0]?e[0]:e[0].name;return this._parsed.get(t)}getAll(...e){var t;let r=Array.from(this._parsed.values());if(!e.length)return r;let n="string"==typeof e[0]?e[0]:null==(t=e[0])?void 0:t.name;return r.filter(e=>e.name===n)}has(e){return this._parsed.has(e)}set(...e){let[t,r,n]=1===e.length?[e[0].name,e[0].value,e[0]]:e,a=this._parsed;return a.set(t,function(e={name:"",value:""}){return"number"==typeof e.expires&&(e.expires=new Date(e.expires)),e.maxAge&&(e.expires=new Date(Date.now()+1e3*e.maxAge)),(null===e.path||void 0===e.path)&&(e.path="/"),e}({name:t,value:r,...n})),function(e,t){for(let[,r]of(t.delete("set-cookie"),e)){let e=l(r);t.append("set-cookie",e)}}(a,this._headers),this}delete(...e){let[t,r]="string"==typeof e[0]?[e[0]]:[e[0].name,e[0]];return this.set({...r,name:t,value:"",expires:new Date(0)})}[Symbol.for("edge-runtime.inspect.custom")](){return`ResponseCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`}toString(){return[...this._parsed.values()].map(l).join("; ")}}},"./dist/compiled/busboy/index.js"(e,t,r){!function(){"use strict";var t={900:function(e,t,r){let{parseContentType:n}=r(318),a=[r(104),r(506)].filter(function(e){return"function"==typeof e.detect});e.exports=e=>{if(("object"!=typeof e||null===e)&&(e={}),"object"!=typeof e.headers||null===e.headers||"string"!=typeof e.headers["content-type"])throw Error("Missing Content-Type");var t=e;let r=t.headers,i=n(r["content-type"]);if(!i)throw Error("Malformed content type");for(let e of a){if(!e.detect(i))continue;let n={limits:t.limits,headers:r,conType:i,highWaterMark:void 0,fileHwm:void 0,defCharset:void 0,defParamCharset:void 0,preservePath:!1};return t.highWaterMark&&(n.highWaterMark=t.highWaterMark),t.fileHwm&&(n.fileHwm=t.fileHwm),n.defCharset=t.defCharset,n.defParamCharset=t.defParamCharset,n.preservePath=t.preservePath,new e(n)}throw Error(`Unsupported content type: ${r["content-type"]}`)}},104:function(e,t,r){let{Readable:n,Writable:a}=r(781),i=r(542),{basename:s,convertToUTF8:o,getDecoder:l,parseContentType:u,parseDisposition:c}=r(318),d=Buffer.from("\r\n"),f=Buffer.from("\r"),h=Buffer.from("-");function p(){}class m{constructor(e){this.header=Object.create(null),this.pairCount=0,this.byteCount=0,this.state=0,this.name="",this.value="",this.crlf=0,this.cb=e}reset(){this.header=Object.create(null),this.pairCount=0,this.byteCount=0,this.state=0,this.name="",this.value="",this.crlf=0}push(e,t,r){let n=t;for(;t{if(this._read(),0==--t._fileEndsLeft&&t._finalcb){let e=t._finalcb;t._finalcb=null,process.nextTick(e)}})}_read(e){let t=this._readcb;t&&(this._readcb=null,t())}}let y={push:(e,t)=>{},destroy:()=>{}};function v(e,t){return e}function b(e,t,r){if(r)return t(r);t(r=w(e))}function w(e){if(e._hparser)return Error("Malformed part header");let t=e._fileStream;if(t&&(e._fileStream=null,t.destroy(Error("Unexpected end of file"))),!e._complete)return Error("Unexpected end of form")}let S=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],_=[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1];e.exports=class extends a{constructor(e){let t,r,n,a,b;if(super({autoDestroy:!0,emitClose:!0,highWaterMark:"number"==typeof e.highWaterMark?e.highWaterMark:void 0}),!e.conType.params||"string"!=typeof e.conType.params.boundary)throw Error("Multipart: Boundary not found");const w=e.conType.params.boundary,S="string"==typeof e.defParamCharset&&e.defParamCharset?l(e.defParamCharset):v,_=e.defCharset||"utf8",E=e.preservePath,R={autoDestroy:!0,emitClose:!0,highWaterMark:"number"==typeof e.fileHwm?e.fileHwm:void 0},k=e.limits,x=k&&"number"==typeof k.fieldSize?k.fieldSize:1048576,P=k&&"number"==typeof k.fileSize?k.fileSize:1/0,C=k&&"number"==typeof k.files?k.files:1/0,T=k&&"number"==typeof k.fields?k.fields:1/0,A=k&&"number"==typeof k.parts?k.parts:1/0;let O=-1,j=0,$=0,I=!1;this._fileEndsLeft=0,this._fileStream=void 0,this._complete=!1;let D=0,N=0,M=!1,L=!1,U=!1;this._hparser=null;const F=new m(e=>{let i;if(this._hparser=null,I=!1,a="text/plain",r=_,n="7bit",b=void 0,M=!1,!e["content-disposition"]){I=!0;return}let o=c(e["content-disposition"][0],S);if(!o||"form-data"!==o.type){I=!0;return}if(o.params&&(o.params.name&&(b=o.params.name),o.params["filename*"]?i=o.params["filename*"]:o.params.filename&&(i=o.params.filename),void 0===i||E||(i=s(i))),e["content-type"]){let t=u(e["content-type"][0]);t&&(a=`${t.type}/${t.subtype}`,t.params&&"string"==typeof t.params.charset&&(r=t.params.charset.toLowerCase()))}if(e["content-transfer-encoding"]&&(n=e["content-transfer-encoding"][0].toLowerCase()),"application/octet-stream"===a||void 0!==i){if($===C){L||(L=!0,this.emit("filesLimit")),I=!0;return}if(++$,0===this.listenerCount("file")){I=!0;return}D=0,this._fileStream=new g(R,this),++this._fileEndsLeft,this.emit("file",b,this._fileStream,{filename:i,encoding:n,mimeType:a})}else{if(j===T){U||(U=!0,this.emit("fieldsLimit")),I=!0;return}if(++j,0===this.listenerCount("field")){I=!0;return}t=[],N=0}});let H=0;const B=(e,i,s,l,u)=>{for(;i;){if(null!==this._hparser){let e=this._hparser.push(i,s,l);if(-1===e){this._hparser=null,F.reset(),this.emit("error",Error("Malformed part header"));break}s=e}if(s===l)break;if(0!==H){if(1===H){switch(i[s]){case 45:H=2,++s;break;case 13:H=3,++s;break;default:H=0}if(s===l)return}if(2===H){if(H=0,45===i[s]){this._complete=!0,this._bparser=y;return}let e=this._writecb;this._writecb=p,B(!1,h,0,1,!1),this._writecb=e}else if(3===H){if(H=0,10===i[s]){if(++s,O>=A||(this._hparser=F,s===l))break;continue}{let e=this._writecb;this._writecb=p,B(!1,f,0,1,!1),this._writecb=e}}}if(!I){if(this._fileStream){let e,t=Math.min(l-s,P-D);u?e=i.slice(s,s+t):(e=Buffer.allocUnsafe(t),i.copy(e,0,s,s+t)),(D+=e.length)===P?(e.length>0&&this._fileStream.push(e),this._fileStream.emit("limit"),this._fileStream.truncated=!0,I=!0):this._fileStream.push(e)||(this._writecb&&(this._fileStream._readcb=this._writecb),this._writecb=null)}else if(void 0!==t){let e,r=Math.min(l-s,x-N);u?e=i.slice(s,s+r):(e=Buffer.allocUnsafe(r),i.copy(e,0,s,s+r)),N+=r,t.push(e),N===x&&(I=!0,M=!0)}}break}if(e){if(H=1,this._fileStream)this._fileStream.push(null),this._fileStream=null;else if(void 0!==t){let e;switch(t.length){case 0:e="";break;case 1:e=o(t[0],r,0);break;default:e=o(Buffer.concat(t,N),r,0)}t=void 0,N=0,this.emit("field",b,e,{nameTruncated:!1,valueTruncated:M,encoding:n,mimeType:a})}++O===A&&this.emit("partsLimit")}};this._bparser=new i(`\r +--${w}`,B),this._writecb=null,this._finalcb=null,this.write(d)}static detect(e){return"multipart"===e.type&&"form-data"===e.subtype}_write(e,t,r){let n;this._writecb=r,this._bparser.push(e,0),this._writecb&&(n=this._writecb,this._writecb=null,n&&n())}_destroy(e,t){this._hparser=null,this._bparser=y,e||(e=w(this));let r=this._fileStream;r&&(this._fileStream=null,r.destroy(e)),t(e)}_final(e){if(this._bparser.destroy(),!this._complete)return e(Error("Unexpected end of form"));this._fileEndsLeft?this._finalcb=b.bind(null,this,e):b(this,e)}}},506:function(e,t,r){let{Writable:n}=r(781),{getDecoder:a}=r(318);function i(e,t,r,n){if(r>=n)return n;if(-1===e._byte){let a=l[t[r++]];if(-1===a)return -1;if(a>=8&&(e._encode=2),re.fieldNameSizeLimit){for(!e._keyTrunc&&e._lastPose.fieldSizeLimit){for(!e._valTrunc&&e._lastPos=this.fieldsLimit)return r();let n=0,a=e.length;if(this._lastPos=0,-2!==this._byte){if(-1===(n=i(this,e,n,a)))return r(Error("Malformed urlencoded form"));if(n>=a)return r();this._inKey?++this._bytesKey:++this._bytesVal}e:for(;n0&&this.emit("field",this._key,"",{nameTruncated:this._keyTrunc,valueTruncated:!1,encoding:this.charset,mimeType:"text/plain"}),this._key="",this._val="",this._keyTrunc=!1,this._valTrunc=!1,this._bytesKey=0,this._bytesVal=0,++this._fields>=this.fieldsLimit)return this.emit("fieldsLimit"),r();continue;case 43:this._lastPos=a)return r();++this._bytesKey,n=s(this,e,n,a);continue}++n,++this._bytesKey,n=s(this,e,n,a)}this._lastPos0||this._bytesVal>0)&&this.emit("field",this._key,this._val,{nameTruncated:this._keyTrunc,valueTruncated:this._valTrunc,encoding:this.charset,mimeType:"text/plain"}),this._key="",this._val="",this._keyTrunc=!1,this._valTrunc=!1,this._bytesKey=0,this._bytesVal=0,++this._fields>=this.fieldsLimit)return this.emit("fieldsLimit"),r();continue e;case 43:this._lastPos=a)return r();++this._bytesVal,n=o(this,e,n,a);continue}++n,++this._bytesVal,n=o(this,e,n,a)}this._lastPos0||this._bytesVal>0)&&(this._inKey?this._key=this._decoder(this._key,this._encode):this._val=this._decoder(this._val,this._encode),this.emit("field",this._key,this._val,{nameTruncated:this._keyTrunc,valueTruncated:this._valTrunc,encoding:this.charset,mimeType:"text/plain"})),e()}}},318:function(e){function t(e){let t;for(;;)switch(e){case"utf-8":case"utf8":return r.utf8;case"latin1":case"ascii":case"us-ascii":case"iso-8859-1":case"iso8859-1":case"iso88591":case"iso_8859-1":case"windows-1252":case"iso_8859-1:1987":case"cp1252":case"x-cp1252":return r.latin1;case"utf16le":case"utf-16le":case"ucs2":case"ucs-2":return r.utf16le;case"base64":return r.base64;default:if(void 0===t){t=!0,e=e.toLowerCase();continue}return r.other.bind(e)}}let r={utf8:(e,t)=>{if(0===e.length)return"";if("string"==typeof e){if(t<2)return e;e=Buffer.from(e,"latin1")}return e.utf8Slice(0,e.length)},latin1:(e,t)=>0===e.length?"":"string"==typeof e?e:e.latin1Slice(0,e.length),utf16le:(e,t)=>0===e.length?"":("string"==typeof e&&(e=Buffer.from(e,"latin1")),e.ucs2Slice(0,e.length)),base64:(e,t)=>0===e.length?"":("string"==typeof e&&(e=Buffer.from(e,"latin1")),e.base64Slice(0,e.length)),other:(e,t)=>{if(0===e.length)return"";"string"==typeof e&&(e=Buffer.from(e,"latin1"));try{return new TextDecoder(this).decode(e)}catch{}}};function n(e,r,n){let a=t(r);if(a)return a(e,n)}let a=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],i=[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],s=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],o=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],l=[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,-1,-1,-1,-1,-1,-1,-1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1];e.exports={basename:function(e){if("string"!=typeof e)return"";for(let t=e.length-1;t>=0;--t)switch(e.charCodeAt(t)){case 47:case 92:return".."===(e=e.slice(t+1))||"."===e?"":e}return".."===e||"."===e?"":e},convertToUTF8:n,getDecoder:t,parseContentType:function(e){if(0===e.length)return;let t=Object.create(null),r=0;for(;r=128?a=2:0===a&&(a=1);continue}return}break}}if(p+=e.slice(d,t),void 0===(p=n(p,f,a)))return}else{if(++t===e.length)return;if(34===e.charCodeAt(t)){d=++t;let r=!1;for(;t1)for(let t=0;t-e._lookbehindSize?e._cb(!0,f,0,e._lookbehindSize+o,!1):e._cb(!0,void 0,0,0,!0),e._bufPos=o+s;o+=d[a]}for(;o<0&&!r(e,n,o,a-o);)++o;if(o<0){let t=e._lookbehindSize+o;return t>0&&e._cb(!1,f,0,t,!1),e._lookbehindSize-=t,f.copy(f,0,t,e._lookbehindSize),f.set(n,e._lookbehindSize),e._lookbehindSize+=a,e._bufPos=a,a}e._cb(!1,f,0,e._lookbehindSize,!1),e._lookbehindSize=0}o+=e._bufPos;let h=i[0];for(;o<=c;){let r=n[o+l];if(r===u&&n[o]===h&&t(i,0,n,o,l))return++e.matches,o>0?e._cb(!0,n,e._bufPos,o,!0):e._cb(!0,void 0,0,0,!0),e._bufPos=o+s;o+=d[r]}for(;o0&&e._cb(!1,n,e._bufPos,o{"use strict";var t={56:e=>{e.exports=function(e,t){return"string"==typeof e?s(e):"number"==typeof e?i(e,t):null},e.exports.format=i,e.exports.parse=s;var t=/\B(?=(\d{3})+(?!\d))/g,r=/(?:\.0*|(\.[^0]+)0+)$/,n={b:1,kb:1024,mb:1048576,gb:0x40000000,tb:0x10000000000,pb:0x4000000000000},a=/^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb|pb)$/i;function i(e,a){if(!Number.isFinite(e))return null;var i=Math.abs(e),s=a&&a.thousandsSeparator||"",o=a&&a.unitSeparator||"",l=a&&void 0!==a.decimalPlaces?a.decimalPlaces:2,u=!!(a&&a.fixedDecimals),c=a&&a.unit||"";c&&n[c.toLowerCase()]||(c=i>=n.pb?"PB":i>=n.tb?"TB":i>=n.gb?"GB":i>=n.mb?"MB":i>=n.kb?"KB":"B");var d=(e/n[c.toLowerCase()]).toFixed(l);return u||(d=d.replace(r,"$1")),s&&(d=d.split(".").map(function(e,r){return 0===r?e.replace(t,s):e}).join(".")),d+o+c}function s(e){if("number"==typeof e&&!isNaN(e))return e;if("string"!=typeof e)return null;var t,r=a.exec(e),i="b";return r?(t=parseFloat(r[1]),i=r[4].toLowerCase()):(t=parseInt(e,10),i="b"),Math.floor(n[i]*t)}}},r={};function n(e){var a=r[e];if(void 0!==a)return a.exports;var i=r[e]={exports:{}},s=!0;try{t[e](i,i.exports,n),s=!1}finally{s&&delete r[e]}return i.exports}n.ab=__dirname+"/",e.exports=n(56)})()},"./dist/compiled/cookie/index.js"(e){(()=>{"use strict";"undefined"!=typeof __nccwpck_require__&&(__nccwpck_require__.ab=__dirname+"/");var t,r,n,a,i={};i.parse=function(e,r){if("string"!=typeof e)throw TypeError("argument str must be a string");for(var a={},i=e.split(n),s=(r||{}).decode||t,o=0;o{"use strict";let t,r,n,a,i;var s={993:e=>{var t=Object.prototype.hasOwnProperty,r="~";function n(){}function a(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function i(e,t,n,i,s){if("function"!=typeof n)throw TypeError("The listener must be a function");var o=new a(n,i||e,s),l=r?r+t:t;return e._events[l]?e._events[l].fn?e._events[l]=[e._events[l],o]:e._events[l].push(o):(e._events[l]=o,e._eventsCount++),e}function s(e,t){0==--e._eventsCount?e._events=new n:delete e._events[t]}function o(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(r=!1)),o.prototype.eventNames=function(){var e,n,a=[];if(0===this._eventsCount)return a;for(n in e=this._events)t.call(e,n)&&a.push(r?n.slice(1):n);return Object.getOwnPropertySymbols?a.concat(Object.getOwnPropertySymbols(e)):a},o.prototype.listeners=function(e){var t=r?r+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var a=0,i=n.length,s=Array(i);a{e.exports=(e,t)=>(t=t||(()=>{}),e.then(e=>new Promise(e=>{e(t())}).then(()=>e),e=>new Promise(e=>{e(t())}).then(()=>{throw e})))},574:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){let n=0,a=e.length;for(;a>0;){let i=a/2|0,s=n+i;0>=r(e[s],t)?(n=++s,a-=i+1):a=i}return n}},821:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});let n=r(574);t.default=class{constructor(){this._queue=[]}enqueue(e,t){let r={priority:(t=Object.assign({priority:0},t)).priority,run:e};if(this.size&&this._queue[this.size-1].priority>=t.priority)return void this._queue.push(r);let a=n.default(this._queue,r,(e,t)=>t.priority-e.priority);this._queue.splice(a,0,r)}dequeue(){let e=this._queue.shift();return null==e?void 0:e.run}filter(e){return this._queue.filter(t=>t.priority===e.priority).map(e=>e.run)}get size(){return this._queue.length}}},816:(e,t,r)=>{let n=r(213);class a extends Error{constructor(e){super(e),this.name="TimeoutError"}}let i=(e,t,r)=>new Promise((i,s)=>{if("number"!=typeof t||t<0)throw TypeError("Expected `milliseconds` to be a positive number");if(t===1/0)return void i(e);let o=setTimeout(()=>{if("function"==typeof r){try{i(r())}catch(e){s(e)}return}let n="string"==typeof r?r:`Promise timed out after ${t} milliseconds`,o=r instanceof Error?r:new a(n);"function"==typeof e.cancel&&e.cancel(),s(o)},t);n(e.then(i,s),()=>{clearTimeout(o)})});e.exports=i,e.exports.default=i,e.exports.TimeoutError=a}},o={};function l(e){var t=o[e];if(void 0!==t)return t.exports;var r=o[e]={exports:{}},n=!0;try{s[e](r,r.exports,l),n=!1}finally{n&&delete o[e]}return r.exports}l.ab=__dirname+"/";var u={};Object.defineProperty(u,"__esModule",{value:!0}),t=l(993),r=l(816),n=l(821),a=()=>{},i=new r.TimeoutError,u.default=class extends t{constructor(e){var t,r,i,s;if(super(),this._intervalCount=0,this._intervalEnd=0,this._pendingCount=0,this._resolveEmpty=a,this._resolveIdle=a,!("number"==typeof(e=Object.assign({carryoverConcurrencyCount:!1,intervalCap:1/0,interval:0,concurrency:1/0,autoStart:!0,queueClass:n.default},e)).intervalCap&&e.intervalCap>=1))throw TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${null!=(r=null==(t=e.intervalCap)?void 0:t.toString())?r:""}\` (${typeof e.intervalCap})`);if(void 0===e.interval||!(Number.isFinite(e.interval)&&e.interval>=0))throw TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${null!=(s=null==(i=e.interval)?void 0:i.toString())?s:""}\` (${typeof e.interval})`);this._carryoverConcurrencyCount=e.carryoverConcurrencyCount,this._isIntervalIgnored=e.intervalCap===1/0||0===e.interval,this._intervalCap=e.intervalCap,this._interval=e.interval,this._queue=new e.queueClass,this._queueClass=e.queueClass,this.concurrency=e.concurrency,this._timeout=e.timeout,this._throwOnTimeout=!0===e.throwOnTimeout,this._isPaused=!1===e.autoStart}get _doesIntervalAllowAnother(){return this._isIntervalIgnored||this._intervalCount{this._onResumeInterval()},t)),!0;this._intervalCount=this._carryoverConcurrencyCount?this._pendingCount:0}return!1}_tryToStartAnother(){if(0===this._queue.size)return this._intervalId&&clearInterval(this._intervalId),this._intervalId=void 0,this._resolvePromises(),!1;if(!this._isPaused){let e=!this._isIntervalPaused();if(this._doesIntervalAllowAnother&&this._doesConcurrentAllowAnother){let t=this._queue.dequeue();return!!t&&(this.emit("active"),t(),e&&this._initializeIntervalIfNeeded(),!0)}}return!1}_initializeIntervalIfNeeded(){this._isIntervalIgnored||void 0!==this._intervalId||(this._intervalId=setInterval(()=>{this._onInterval()},this._interval),this._intervalEnd=Date.now()+this._interval)}_onInterval(){0===this._intervalCount&&0===this._pendingCount&&this._intervalId&&(clearInterval(this._intervalId),this._intervalId=void 0),this._intervalCount=this._carryoverConcurrencyCount?this._pendingCount:0,this._processQueue()}_processQueue(){for(;this._tryToStartAnother(););}get concurrency(){return this._concurrency}set concurrency(e){if(!("number"==typeof e&&e>=1))throw TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${e}\` (${typeof e})`);this._concurrency=e,this._processQueue()}async add(e,t={}){return new Promise((n,a)=>{let s=async()=>{this._pendingCount++,this._intervalCount++;try{let s=void 0===this._timeout&&void 0===t.timeout?e():r.default(Promise.resolve(e()),void 0===t.timeout?this._timeout:t.timeout,()=>{(void 0===t.throwOnTimeout?this._throwOnTimeout:t.throwOnTimeout)&&a(i)});n(await s)}catch(e){a(e)}this._next()};this._queue.enqueue(s,t),this._tryToStartAnother(),this.emit("add")})}async addAll(e,t){return Promise.all(e.map(async e=>this.add(e,t)))}start(){return this._isPaused&&(this._isPaused=!1,this._processQueue()),this}pause(){this._isPaused=!0}clear(){this._queue=new this._queueClass}async onEmpty(){if(0!==this._queue.size)return new Promise(e=>{let t=this._resolveEmpty;this._resolveEmpty=()=>{t(),e()}})}async onIdle(){if(0!==this._pendingCount||0!==this._queue.size)return new Promise(e=>{let t=this._resolveIdle;this._resolveIdle=()=>{t(),e()}})}get size(){return this._queue.size}sizeBy(e){return this._queue.filter(e).length}get pending(){return this._pendingCount}get isPaused(){return this._isPaused}get timeout(){return this._timeout}set timeout(e){this._timeout=e}},e.exports=u})()},"./dist/compiled/path-to-regexp/index.js"(e){(()=>{"use strict";"undefined"!=typeof __nccwpck_require__&&(__nccwpck_require__.ab=__dirname+"/");var t={};(()=>{function e(e,t){void 0===t&&(t={});for(var r=function(e){for(var t=[],r=0;r=48&&s<=57||s>=65&&s<=90||s>=97&&s<=122||95===s){a+=e[i++];continue}break}if(!a)throw TypeError("Missing parameter name at ".concat(r));t.push({type:"NAME",index:r,value:a}),r=i;continue}if("("===n){var o=1,l="",i=r+1;if("?"===e[i])throw TypeError('Pattern cannot start with "?" at '.concat(i));for(;i-1)return!0}return!1},g=function(e){var t=l[l.length-1],r=e||(t&&"string"==typeof t?t:"");if(t&&!r)throw TypeError('Must have text between two parameters, missing text after "'.concat(t.name,'"'));return!r||m(r)?"[^".concat(a(o),"]+?"):"(?:(?!".concat(a(r),")[^").concat(a(o),"])+?")};c-1:void 0===S;s||(m+="(?:".concat(p,"(?=").concat(h,"))?")),_||(m+="(?=".concat(p,"|").concat(h,")"))}return new RegExp(m,i(r))}function o(t,r,n){if(t instanceof RegExp){var a;if(!r)return t;for(var l=/\((?:\?<(.*?)>)?(?!\?)/g,u=0,c=l.exec(t.source);c;)r.push({name:c[1]||u++,prefix:"",suffix:"",modifier:"",pattern:""}),c=l.exec(t.source);return t}return Array.isArray(t)?(a=t.map(function(e){return o(e,r,n).source}),new RegExp("(?:".concat(a.join("|"),")"),i(n))):s(e(t,n),r,n)}Object.defineProperty(t,"__esModule",{value:!0}),t.pathToRegexp=t.tokensToRegexp=t.regexpToFunction=t.match=t.tokensToFunction=t.compile=t.parse=void 0,t.parse=e,t.compile=function(t,n){return r(e(t,n),n)},t.tokensToFunction=r,t.match=function(e,t){var r=[];return n(o(e,r,t),r,t)},t.regexpToFunction=n,t.tokensToRegexp=s,t.pathToRegexp=o})(),e.exports=t})()},"./dist/compiled/react-dom/cjs/react-dom-server.node.production.js"(e,t,r){"use strict";var n,a,i=r("util"),s=r("crypto"),o=r("async_hooks"),l=r("./dist/compiled/react/index.js"),u=r("./dist/compiled/react-dom/index.js"),c=r("stream"),d=Symbol.for("react.transitional.element"),f=Symbol.for("react.portal"),h=Symbol.for("react.fragment"),p=Symbol.for("react.strict_mode"),m=Symbol.for("react.profiler"),g=Symbol.for("react.consumer"),y=Symbol.for("react.context"),v=Symbol.for("react.forward_ref"),b=Symbol.for("react.suspense"),w=Symbol.for("react.suspense_list"),S=Symbol.for("react.memo"),_=Symbol.for("react.lazy"),E=Symbol.for("react.scope"),R=Symbol.for("react.activity"),k=Symbol.for("react.legacy_hidden"),x=Symbol.for("react.memo_cache_sentinel"),P=Symbol.for("react.view_transition"),C=Symbol.iterator;function T(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=C&&e[C]||e["@@iterator"])?e:null}var A=Symbol.for("react.optimistic_key"),O=Array.isArray,j=queueMicrotask;function $(e){"function"==typeof e.flush&&e.flush()}var I=null,D=0,N=!0;function M(e,t){if("string"==typeof t){if(0!==t.length)if(4096<3*t.length)0]/;function Z(e){if("boolean"==typeof e||"number"==typeof e||"bigint"==typeof e)return""+e;e=""+e;var t=Q.exec(e);if(t){var r,n="",a=0;for(r=t.index;r; rel=dns-prefetch",n=0<=(a.remainingCapacity-=r.length+2)),n?(i.resets.dns[e]=null,a.preconnects&&(a.preconnects+=", "),a.preconnects+=r):(e5(r=[],{href:e,rel:"dns-prefetch"}),i.preconnects.add(r))),aU(t))}else eo.D(e)},C:function(e,t){var r=nY();if(r){var n=r.resumableState,a=r.renderState;if("string"==typeof e&&e){var i,s,o="use-credentials"===t?"credentials":"string"==typeof t?"anonymous":"default";n.connectResources[o].hasOwnProperty(e)||(n.connectResources[o][e]=null,(s=(n=a.headers)&&0; rel=preconnect","string"==typeof t&&(s+='; crossorigin="'+(""+t).replace(rB,rz)+'"'),i=s,s=0<=(n.remainingCapacity-=i.length+2)),s?(a.resets.connect[o][e]=null,n.preconnects&&(n.preconnects+=", "),n.preconnects+=i):(e5(o=[],{rel:"preconnect",href:e,crossOrigin:t}),a.preconnects.add(o))),aU(r)}}else eo.C(e,t)},L:function(e,t,r){var n=nY();if(n){var a=n.resumableState,i=n.renderState;if(t&&e){switch(t){case"image":if(r)var s,o=r.imageSrcSet,l=r.imageSizes,u=r.fetchPriority;var c=o?o+"\n"+(l||""):e;if(a.imageResources.hasOwnProperty(c))return;a.imageResources[c]=el,(a=i.headers)&&0');var ec=B(""),ef=B('`,n=!1;return new TransformStream({transform(e,t){if(n)return void t.enqueue(e);let a=F(e,U.CLOSED.HEAD);if(-1===a)return void t.enqueue(e);let i=K.encode(r),s=new Uint8Array(e.length+i.length);s.set(e.slice(0,a)),s.set(i,a),s.set(e.slice(a),a+i.length),t.enqueue(s),n=!0}})}function eo(e,t){let r=!1,n=null,a=!1;function i(e){return n||(n=s(e)),n}async function s(n){let i=e.getReader();t&&await M();try{for(;;){let{done:e,value:s}=await i.read();if(e){a=!0;return}t||r||await M(),n.enqueue(s)}}catch(e){n.error(e)}}return new TransformStream({start(e){t||i(e)},transform(e,r){r.enqueue(e),t&&i(r)},flush(e){if(r=!0,!a)return i(e)}})}let el="";function eu(){let e=!1;return new TransformStream({transform(t,r){if(e)return r.enqueue(t);let n=F(t,U.CLOSED.BODY_AND_HTML);if(n>-1){if(e=!0,t.length===U.CLOSED.BODY_AND_HTML.length)return;let a=t.slice(0,n);if(r.enqueue(a),t.length>U.CLOSED.BODY_AND_HTML.length+n){let e=t.slice(n+U.CLOSED.BODY_AND_HTML.length);r.enqueue(e)}}else r.enqueue(t)},flush(e){e.enqueue(U.CLOSED.BODY_AND_HTML)}})}function ec(e){let t=!1;return new TransformStream({transform(r,n){if(t)return void n.enqueue(r);let a=F(r,U.OPENING.HTML);if(-1===a)return void n.enqueue(r);let i=a+U.OPENING.HTML.length,s=` data-dpl-id="${e}"`,o=K.encode(s),l=new Uint8Array(r.length+o.length);l.set(r.subarray(0,i)),l.set(o,i),l.set(r.subarray(i),i+o.length),n.enqueue(l),t=!0}})}function ed(e,t){let r=e;for(let e of t)e&&(r=r.pipeThrough(e));return r}async function ef(e,{suffix:t,inlinedDataStream:r,isStaticGeneration:n,deploymentId:a,getServerInsertedHTML:i,getServerInsertedMetadata:s,validateRootLayout:o}){let l,u,c,d,f=t?t.split(el,1)[0]:null;return n?await e.allReady:await L(),ed(e,[en(),a?ec(a):null,ea(s),null!=f&&f.length>0?(u=!1,new TransformStream({transform(e,t){if(t.enqueue(e),!u){let e;u=!0,l=e=new I,N(()=>{try{t.enqueue(K.encode(f))}catch{}finally{l=void 0,e.resolve()}})}},flush(e){if(l)return l.promise;u||e.enqueue(K.encode(f))}})):null,r?eo(r,!0):null,o?(c=!1,d=!1,new TransformStream({async transform(e,t){!c&&F(e,U.OPENING.HTML)>-1&&(c=!0),!d&&F(e,U.OPENING.BODY)>-1&&(d=!0),t.enqueue(e)},flush(e){let t=[];c||t.push("html"),d||t.push("body"),t.length&&e.enqueue(K.encode(` + + `))}})):null,eu(),ei(i)])}async function eh(e,{getServerInsertedHTML:t,getServerInsertedMetadata:r,deploymentId:n}){return ed(e,[en(),new TransformStream({transform(e,t){H(e,U.CLOSED.BODY_AND_HTML)||H(e,U.CLOSED.BODY)||H(e,U.CLOSED.HTML)||(e=B(e,U.CLOSED.BODY),e=B(e,U.CLOSED.HTML),t.enqueue(e))}}),n?ec(n):null,ei(t),ea(r)])}async function ep(e,{inlinedDataStream:t,getServerInsertedHTML:r,getServerInsertedMetadata:n,deploymentId:a}){return ed(e,[en(),a?ec(a):null,ei(r),ea(n),eo(t,!0),eu()])}async function em(e,{inlinedDataStream:t,getServerInsertedHTML:r,getServerInsertedMetadata:n,deploymentId:a}){return ed(e,[en(),a?ec(a):null,ei(r),await es(),ea(n),eo(t,!0),eu()])}async function eg(e,{delayDataUntilFirstHtmlChunk:t,inlinedDataStream:r,getServerInsertedHTML:n,getServerInsertedMetadata:a,deploymentId:i}){return ed(e,[en(),i?ec(i):null,ei(n),ea(a),eo(r,t),eu()])}var ey=a("./dist/esm/lib/constants.js");function ev(e){for(let t of[ey.AA,ey.h])if(e!==t&&e.startsWith(t))return e.substring(t.length);return null}function eb(e,t,r){if(e){for(let n of(r&&(r=r.toLowerCase()),e))if(t===n.domain?.split(":",1)[0].toLowerCase()||r===n.defaultLocale.toLowerCase()||n.locales?.some(e=>e.toLowerCase()===r))return n}}function ew(e){return e.replace(/\/$/,"")||"/"}function eS(e){let t=e.indexOf("#"),r=e.indexOf("?"),n=r>-1&&(t<0||r-1?{pathname:e.substring(0,n?r:t),query:n?e.substring(r,t>-1?t:void 0):"",hash:t>-1?e.slice(t):""}:{pathname:e,query:"",hash:""}}function e_(e,t){if(!e.startsWith("/")||!t)return e;let{pathname:r,query:n,hash:a}=eS(e);return`${t}${r}${n}${a}`}function eE(e,t){if(!e.startsWith("/")||!t)return e;let{pathname:r,query:n,hash:a}=eS(e);return`${r}${t}${n}${a}`}function eR(e,t){if("string"!=typeof e)return!1;let{pathname:r}=eS(e);return r===t||r.startsWith(t+"/")}function ek(e,t){let r;if(t?.host&&!Array.isArray(t.host))r=t.host.toString().split(":",1)[0];else{if(!e.hostname)return;r=e.hostname}return r.toLowerCase()}let ex=new WeakMap;function eP(e,t){let r;if(!t)return{pathname:e};let n=ex.get(t);n||(n=t.map(e=>e.toLowerCase()),ex.set(t,n));let a=e.split("/",2);if(!a[1])return{pathname:e};let i=a[1].toLowerCase(),s=n.indexOf(i);return s<0?{pathname:e}:(r=t[s],{pathname:e=e.slice(r.length+1)||"/",detectedLocale:r})}function eC(e,t){if(!eR(e,t))return e;let r=e.slice(t.length);return r.startsWith("/")?r:`/${r}`}let eT=/^(?:127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|\[::1\]|localhost)$/;function eA(e,t){let r=new URL(String(e),t&&String(t));return eT.test(r.hostname)&&(r.hostname="localhost"),r}let eO=Symbol("NextURLInternal");class ej{constructor(e,t,r){let n,a;"object"==typeof t&&"pathname"in t||"string"==typeof t?(n=t,a=r||{}):a=r||t||{},this[eO]={url:eA(e,n??a.base),options:a,basePath:""},this.analyze()}analyze(){var e,t,r,n,a;let i=function(e,t){let{basePath:r,i18n:n,trailingSlash:a}=t.nextConfig??{},i={pathname:e,trailingSlash:"/"!==e?e.endsWith("/"):a};r&&eR(i.pathname,r)&&(i.pathname=eC(i.pathname,r),i.basePath=r);let s=i.pathname;if(i.pathname.startsWith("/_next/data/")&&i.pathname.endsWith(".json")){let e=i.pathname.replace(/^\/_next\/data\//,"").replace(/\.json$/,"").split("/");i.buildId=e[0],s="index"!==e[1]?`/${e.slice(1).join("/")}`:"/",!0===t.parseData&&(i.pathname=s)}if(n){let e=t.i18nProvider?t.i18nProvider.analyze(i.pathname):eP(i.pathname,n.locales);i.locale=e.detectedLocale,i.pathname=e.pathname??i.pathname,!e.detectedLocale&&i.buildId&&(e=t.i18nProvider?t.i18nProvider.analyze(s):eP(s,n.locales)).detectedLocale&&(i.locale=e.detectedLocale)}return i}(this[eO].url.pathname,{nextConfig:this[eO].options.nextConfig,parseData:!process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE,i18nProvider:this[eO].options.i18nProvider}),s=ek(this[eO].url,this[eO].options.headers);this[eO].domainLocale=this[eO].options.i18nProvider?this[eO].options.i18nProvider.detectDomainLocale(s):eb(null==(t=this[eO].options.nextConfig)||null==(e=t.i18n)?void 0:e.domains,s);let o=(null==(r=this[eO].domainLocale)?void 0:r.defaultLocale)||(null==(a=this[eO].options.nextConfig)||null==(n=a.i18n)?void 0:n.defaultLocale);this[eO].url.pathname=i.pathname,this[eO].defaultLocale=o,this[eO].basePath=i.basePath??"",this[eO].buildId=i.buildId,this[eO].locale=i.locale??o,this[eO].trailingSlash=i.trailingSlash}formatPathname(){var e;let t;return t=function(e,t,r,n){if(!t||t===r)return e;let a=e.toLowerCase();return!n&&(eR(a,"/api")||eR(a,`/${t.toLowerCase()}`))?e:e_(e,`/${t}`)}((e={basePath:this[eO].basePath,buildId:this[eO].buildId,defaultLocale:this[eO].options.forceLocale?void 0:this[eO].defaultLocale,locale:this[eO].locale,pathname:this[eO].url.pathname,trailingSlash:this[eO].trailingSlash}).pathname,e.locale,e.buildId?void 0:e.defaultLocale,e.ignorePrefix),(e.buildId||!e.trailingSlash)&&(t=ew(t)),e.buildId&&(t=eE(e_(t,`/_next/data/${e.buildId}`),"/"===e.pathname?"index.json":".json")),t=e_(t,e.basePath),!e.buildId&&e.trailingSlash?t.endsWith("/")?t:eE(t,"/"):ew(t)}formatSearch(){return this[eO].url.search}get buildId(){return this[eO].buildId}set buildId(e){this[eO].buildId=e}get locale(){return this[eO].locale??""}set locale(e){var t,r;if(!this[eO].locale||!(null==(r=this[eO].options.nextConfig)||null==(t=r.i18n)?void 0:t.locales.includes(e)))throw Object.defineProperty(TypeError(`The NextURL configuration includes no locale "${e}"`),"__NEXT_ERROR_CODE",{value:"E597",enumerable:!1,configurable:!0});this[eO].locale=e}get defaultLocale(){return this[eO].defaultLocale}get domainLocale(){return this[eO].domainLocale}get searchParams(){return this[eO].url.searchParams}get host(){return this[eO].url.host}set host(e){this[eO].url.host=e}get hostname(){return this[eO].url.hostname}set hostname(e){this[eO].url.hostname=e}get port(){return this[eO].url.port}set port(e){this[eO].url.port=e}get protocol(){return this[eO].url.protocol}set protocol(e){this[eO].url.protocol=e}get href(){let e=this.formatPathname(),t=this.formatSearch();return`${this.protocol}//${this.host}${e}${t}${this.hash}`}set href(e){this[eO].url=eA(e),this.analyze()}get origin(){return this[eO].url.origin}get pathname(){return this[eO].url.pathname}set pathname(e){this[eO].url.pathname=e}get hash(){return this[eO].url.hash}set hash(e){this[eO].url.hash=e}get search(){return this[eO].url.search}set search(e){this[eO].url.search=e}get password(){return this[eO].url.password}set password(e){this[eO].url.password=e}get username(){return this[eO].url.username}set username(e){this[eO].url.username=e}get basePath(){return this[eO].basePath}set basePath(e){this[eO].basePath=e.startsWith("/")?e:`/${e}`}toString(){return this.href}toJSON(){return this.href}[Symbol.for("edge-runtime.inspect.custom")](){return{href:this.href,origin:this.origin,protocol:this.protocol,username:this.username,password:this.password,host:this.host,hostname:this.hostname,port:this.port,pathname:this.pathname,search:this.search,searchParams:this.searchParams,hash:this.hash}}clone(){return new ej(String(this),this[eO].options)}}var e$=a("./dist/esm/server/web/spec-extension/cookies.js");Symbol("internal request"),Request,Symbol.for("edge-runtime.inspect.custom");let eI="ResponseAborted";class eD extends Error{constructor(...e){super(...e),this.name=eI}}let eN=0,eM=0,eL=0;function eU(e={}){let t=0===eN?void 0:{clientComponentLoadStart:eN,clientComponentLoadTimes:eM,clientComponentLoadCount:eL};return e.reset&&(eN=0,eM=0,eL=0),t}function eF(e){return(null==e?void 0:e.name)==="AbortError"||(null==e?void 0:e.name)===eI}async function eH(e,t,r){try{let n,{errored:a,destroyed:i}=t;if(a||i)return;let s=(n=new AbortController,t.once("close",()=>{t.writableFinished||n.abort(new eD)}),n),o=function(e,t){let r=!1,n=new I;function a(){n.resolve()}e.on("drain",a),e.once("close",()=>{e.off("drain",a),n.resolve()});let i=new I;return e.once("finish",()=>{i.resolve()}),new WritableStream({write:async t=>{if(!r){if(r=!0,"performance"in globalThis&&process.env.NEXT_OTEL_PERFORMANCE_PREFIX){let e=eU();e&&performance.measure(`${process.env.NEXT_OTEL_PERFORMANCE_PREFIX}:next-client-component-loading`,{start:e.clientComponentLoadStart,end:e.clientComponentLoadStart+e.clientComponentLoadTimes})}e.flushHeaders(),(0,j.getTracer)().trace($.Fx.startResponse,{spanName:"start response"},()=>void 0)}try{let r=e.write(t);"flush"in e&&"function"==typeof e.flush&&e.flush(),r||(await n.promise,n=new I)}catch(t){throw e.end(),Object.defineProperty(Error("failed to write chunk to response",{cause:t}),"__NEXT_ERROR_CODE",{value:"E321",enumerable:!1,configurable:!0})}},abort:t=>{e.writableFinished||e.destroy(t)},close:async()=>{if(t&&await t,!e.writableFinished)return e.end(),i.promise}})}(t,r);await e.pipeTo(o,{signal:s.signal})}catch(e){if(eF(e))return;throw Object.defineProperty(Error("failed to pipe response",{cause:e}),"__NEXT_ERROR_CODE",{value:"E180",enumerable:!1,configurable:!0})}}var eB=a("./dist/esm/shared/lib/invariant-error.js");class ez{static #e=this.EMPTY=new ez(null,{metadata:{},contentType:null});static fromStatic(e,t){return new ez(e,{metadata:{},contentType:t})}constructor(e,{contentType:t,waitUntil:r,metadata:n}){this.response=e,this.contentType=t,this.metadata=n,this.waitUntil=r}assignMetadata(e){Object.assign(this.metadata,e)}get isNull(){return null===this.response}get isDynamic(){return"string"!=typeof this.response}toUnchunkedString(e=!1){if(null===this.response)return"";if("string"!=typeof this.response){if(!e)throw Object.defineProperty(new eB.z("dynamic responses cannot be unchunked. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E732",enumerable:!1,configurable:!0});return er(this.readable)}return this.response}get readable(){return null===this.response?new ReadableStream({start(e){e.close()}}):"string"==typeof this.response?Q(this.response):Buffer.isBuffer(this.response)?Z(this.response):Array.isArray(this.response)?Y(...this.response):this.response}coerce(){return null===this.response?[]:"string"==typeof this.response?[Q(this.response)]:Array.isArray(this.response)?this.response:Buffer.isBuffer(this.response)?[Z(this.response)]:[this.response]}pipeThrough(e){this.response=this.readable.pipeThrough(e)}unshift(e){this.response=this.coerce(),this.response.unshift(e)}push(e){this.response=this.coerce(),this.response.push(e)}async pipeTo(e){try{await this.readable.pipeTo(e,{preventClose:!0}),this.waitUntil&&await this.waitUntil,await e.close()}catch(t){if(eF(t))return void await e.abort(t);throw t}}async pipeToNodeResponse(e){await eH(this.readable,e,this.waitUntil)}}var eq=a("./dist/build/webpack/alias/react-dom-server.js"),eX=a("./dist/compiled/react-dom/static.node.js");let eV={"&":"\\u0026",">":"\\u003e","<":"\\u003c","\u2028":"\\u2028","\u2029":"\\u2029"},eW=/[&><\u2028\u2029]/g,eG={"&":"&",'"':""","'":"'","<":"<",">":">"},eJ=/[&"'<>]/g;function eK(e){return e.replace(eW,e=>eV[e])}function eY(e){return e.replace(eJ,e=>eG[e])}var eQ=a("../../app-render/work-unit-async-storage.external"),eZ=a("./dist/esm/shared/lib/router/utils/app-paths.js");let e0=Symbol.for("next.server.manifests"),e1=globalThis;function e2(){let e=e1[e0];if(!e)throw Object.defineProperty(new eB.z("The manifests singleton was not initialized."),"__NEXT_ERROR_CODE",{value:"E950",enumerable:!1,configurable:!0});return e}function e4(){return e2().proxiedClientReferenceManifest}function e3(){return e2().serverActionsManifest}function e6(){return e2().serverModuleMap}let e8=new WeakMap,e9=new TextEncoder,e5;function e7(e,t,r,n){let i,s=e8.get(e);if(s)return s;let{moduleLoading:o,edgeSSRModuleMapping:l,ssrModuleMapping:u}=e4();if(e instanceof ReadableStream){if(t&&!(t instanceof ReadableStream))throw Object.defineProperty(new eB.z("Expected debug stream to be a ReadableStream"),"__NEXT_ERROR_CODE",{value:"E939",enumerable:!1,configurable:!0});let{createFromReadableStream:s}=a("./dist/compiled/react-server-dom-turbopack/client.node.js");i=s(e,{findSourceMapURL:e5,serverConsumerManifest:{moduleLoading:o,moduleMap:u,serverModuleMap:null},nonce:n,debugChannel:t?{readable:t}:void 0,endTime:r})}else{let{Readable:s}=a("node:stream");if(t&&!(t instanceof s))throw Object.defineProperty(new eB.z("Expected debug stream to be a Readable"),"__NEXT_ERROR_CODE",{value:"E940",enumerable:!1,configurable:!0});let{createFromNodeStream:l}=a("./dist/compiled/react-server-dom-turbopack/client.node.js");i=l(e,{moduleLoading:o,moduleMap:u,serverModuleMap:null},{findSourceMapURL:e5,nonce:n,debugChannel:t,endTime:r})}{let t=eQ.workUnitAsyncStorage.getStore();if(!t)throw Object.defineProperty(new eB.z("Expected workUnitAsyncStorage to have a store."),"__NEXT_ERROR_CODE",{value:"E696",enumerable:!1,configurable:!0});switch(t.type){case"prerender-client":case"validation-client":let r=new Promise(e=>{process.nextTick(()=>{e(i)})});return e8.set(e,r),r}}return e8.set(e,i),i}function te(e,t,r){let n;n="string"==typeof r?eK(JSON.stringify([1,r])):eK(JSON.stringify([3,"undefined"!=typeof Buffer?Buffer.from(r.buffer,r.byteOffset,r.byteLength).toString("base64"):btoa(String.fromCodePoint(...r))])),e.enqueue(e9.encode(`${t}self.__next_f.push(${n})`))}class tt{constructor(e){this._stream=e}tee(){if(null===this._stream)throw Object.defineProperty(Error("Cannot tee a ReactServerResult that has already been consumed"),"__NEXT_ERROR_CODE",{value:"E106",enumerable:!1,configurable:!0});let e=this._stream.tee();return this._stream=e[0],e[1]}consume(){if(null===this._stream)throw Object.defineProperty(Error("Cannot consume a ReactServerResult that has already been consumed"),"__NEXT_ERROR_CODE",{value:"E470",enumerable:!1,configurable:!0});let e=this._stream;return this._stream=null,e}}async function tr(e){let t=[],{prelude:r}=await e,n=r.getReader();for(;;){let{done:e,value:r}=await n.read();if(e)return new ta(t);t.push(r)}}async function tn(e){let t=[],r=e.getReader();for(;;){let{done:e,value:n}=await r.read();if(e)break;t.push(n)}return new ta(t)}class ta{assertChunks(e){if(null===this._chunks)throw Object.defineProperty(new eB.z(`Cannot \`${e}\` on a ReactServerPrerenderResult that has already been consumed.`),"__NEXT_ERROR_CODE",{value:"E593",enumerable:!1,configurable:!0});return this._chunks}consumeChunks(e){let t=this.assertChunks(e);return this.consume(),t}consume(){this._chunks=null}constructor(e){this._chunks=e}asUnclosingStream(){return ti(this.assertChunks("asUnclosingStream()"))}consumeAsUnclosingStream(){return ti(this.consumeChunks("consumeAsUnclosingStream()"))}asStream(){return ts(this.assertChunks("asStream()"))}consumeAsStream(){return ts(this.consumeChunks("consumeAsStream()"))}}function ti(e){let t=0;return new ReadableStream({async pull(r){t`:"`))}catch(t){e.error(t)}},async pull(e){try{let{done:t,value:r}=await a.read();if(r)try{let a=i.decode(r,{stream:!t});te(e,n,a)}catch{te(e,n,r)}t&&e.close()}catch(t){e.error(t)}}})}function tu(){return new ReadableStream}function tc(e){return t=>{t.forEach((t,r)=>{e(r,t)})}}async function td(e,t,r){return(0,eq.resume)(e,t,r)}function tf(e,t,r,n){return e.renderToReadableStream(t,r,n)}async function th(e){return er(e)}async function tp(e,t){let r=await function({ReactDOMServer:e,element:t,streamOptions:r}){return(0,j.getTracer)().trace($.Wc.renderToReadableStream,async()=>e.renderToReadableStream(t,r))}({ReactDOMServer:{renderToReadableStream:eq.renderToReadableStream},element:e,streamOptions:t});return{stream:r,allReady:r.allReady,abort:void 0}}async function tm(e,t,r){let n=await (0,eq.resume)(e,t,r);return{stream:n,allReady:n.allReady,abort:void 0}}function tg(e){return e.prerender}let ty=eX.prerender,tv=[z._A];function tb(e){return{trailingSlash:e.trailingSlash,isStaticMetadataRouteFile:!1}}var tw=a("./dist/esm/server/web/spec-extension/adapters/headers.js"),tS=a("./dist/esm/server/web/spec-extension/adapters/request-cookies.js"),t_=a("./dist/esm/server/api-utils/index.js");class tE{constructor(e,t,r,n){var a;const i=e&&(0,t_.checkIsOnDemandRevalidate)(t,e).isOnDemandRevalidate,s=null==(a=r.get(t_.COOKIE_NAME_PRERENDER_BYPASS))?void 0:a.value;this._isEnabled=!!(!i&&s&&e&&s===e.previewModeId),this._previewModeId=null==e?void 0:e.previewModeId,this._mutableCookies=n}get isEnabled(){return this._isEnabled}enable(){if(!this._previewModeId)throw Object.defineProperty(Error("Invariant: previewProps missing previewModeId this should never happen"),"__NEXT_ERROR_CODE",{value:"E93",enumerable:!1,configurable:!0});this._mutableCookies.set({name:t_.COOKIE_NAME_PRERENDER_BYPASS,value:this._previewModeId,httpOnly:!0,sameSite:"none",secure:!0,path:"/"}),this._isEnabled=!0}disable(){this._mutableCookies.set({name:t_.COOKIE_NAME_PRERENDER_BYPASS,value:"",httpOnly:!0,sameSite:"none",secure:!0,path:"/",expires:new Date(0)}),this._isEnabled=!1}}function tR(e,t){if("x-middleware-set-cookie"in e.headers&&"string"==typeof e.headers["x-middleware-set-cookie"]){let r=e.headers["x-middleware-set-cookie"],n=new Headers;for(let e of function(e){var t,r,n,a,i,s=[],o=0;function l(){for(;o=e.length)&&s.push(e.substring(t,e.length))}return s}(r))n.append("set-cookie",e);for(let e of new e$.VO(n).getAll())t.set(e)}}function tk(e,t,r,n,a,i,s,o,l,u,c){var d=e,f=t,h=r,p=n,m=a,g=i,y=u,v=s,b=o,w=l,S=c;function _(e){f&&f.setHeader("Set-Cookie",e)}let E={};return{type:"request",phase:"render",implicitTags:m,url:{pathname:h.pathname,search:h.search??""},rootParams:p,get headers(){return E.headers||(E.headers=function(e){let t=tw.o.from(e);for(let e of z.KD)t.delete(e);return tw.o.seal(t)}(d.headers)),E.headers},get cookies(){if(!E.cookies){let e=new e$.tm(tw.o.from(d.headers));tR(d,e),E.cookies=tS.Ck.seal(e)}return E.cookies},set cookies(value){E.cookies=value},get mutableCookies(){if(!E.mutableCookies){var R,k;let e,t=(R=d.headers,k=g||(f?_:void 0),e=new e$.tm(tw.o.from(R)),tS.K8.wrap(e,k));tR(d,t),E.mutableCookies=t}return E.mutableCookies},get userspaceMutableCookies(){return E.userspaceMutableCookies||(E.userspaceMutableCookies=(0,tS.EJ)(this)),E.userspaceMutableCookies},get draftMode(){return E.draftMode||(E.draftMode=new tE(v,d,this.cookies,this.mutableCookies)),E.draftMode},renderResumeDataCache:y??null,isHmrRefresh:b,serverComponentsHmrCache:w||globalThis.__serverComponentsHmrCache,fallbackParams:S}}var tx=a("./dist/esm/server/after/after-context.js");function tP(e){let t,r={then:(n,a)=>(t||(t=Promise.resolve(e())),t.then(e=>{r.value=e}).catch(()=>{}),t.then(n,a))};return r}var tC=a("./dist/esm/server/use-cache/handlers.js"),tT=a("./dist/esm/server/app-render/async-local-storage.js"),tA=a("./dist/esm/client/components/http-access-fallback/http-access-fallback.js"),tO=a("./dist/esm/client/components/redirect-error.js");function tj(e){return(0,tO.n)(e)?e.digest.split(";").slice(2,-2).join(";"):null}function t$(e){if(!(0,tO.n)(e))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return e.digest.split(";",2)[1]}function tI(e){if(!(0,tO.n)(e))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return Number(e.digest.split(";").at(-2))}async function tD(e,t,r){let n=new Set;for(let t of(e=>{let t=["/layout"];if(e.startsWith("/")){let r=e.split("/");for(let e=1;ea.getExpiration(e)));return t}(a)}}a("../../app-render/action-async-storage.external").actionAsyncStorage;class tN extends ez{constructor(e,t={},r){super(e,{contentType:z.al,metadata:t,waitUntil:r})}}var tM=a("./dist/compiled/string-hash/index.js"),tL=a.n(tM);let tU=["useDeferredValue","useEffect","useEffectEvent","useImperativeHandle","useInsertionEffect","useLayoutEffect","useReducer","useRef","useState","useSyncExternalStore","useTransition","experimental_useOptimistic","useOptimistic"];function tF(e,t){if(e.message=t,e.stack){let r=e.stack.split("\n");r[0]=t,e.stack=r.join("\n")}}function tH(e){let t=e.stack;return t?t.replace(/^[^\n]*\n/,""):""}function tB(e){if("string"==typeof(null==e?void 0:e.message)){if(e.message.includes("Class extends value undefined is not a constructor or null")){let t="This might be caused by a React Class Component being rendered in a Server Component, React Class Components only works in Client Components. Read more: https://nextjs.org/docs/messages/class-component-in-server-component";if(e.message.includes(t))return;tF(e,`${e.message} + +${t}`);return}if(e.message.includes("createContext is not a function"))return void tF(e,'createContext only works in Client Components. Add the "use client" directive at the top of the file to use it. Read more: https://nextjs.org/docs/messages/context-in-server-component');for(let t of tU)if(RegExp(`\\b${t}\\b.*is not a function`).test(e.message))return void tF(e,`${t} only works in Client Components. Add the "use client" directive at the top of the file to use it. Read more: https://nextjs.org/docs/messages/react-client-hook-in-server-component`)}}var tz=a("./dist/esm/shared/lib/lazy-dynamic/bailout-to-csr.js"),tq=a("./dist/esm/client/components/hooks-server-context.js"),tX=a("./dist/esm/client/components/is-next-router-error.js"),tV=a("./dist/esm/server/app-render/dynamic-rendering.js");function tW(e){return"object"==typeof e&&null!==e&&"name"in e&&"message"in e}function tG(e){let t;return tW(e)?e:Object.defineProperty(Error(!function(e){if("[object Object]"!==Object.prototype.toString.call(e))return!1;let t=Object.getPrototypeOf(e);return null===t||t.hasOwnProperty("isPrototypeOf")}(e)?e+"":(t=new WeakSet,JSON.stringify(e,(e,r)=>{if("object"==typeof r&&null!==r){if(t.has(r))return"[Circular]";t.add(r)}return r}))),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0})}let tJ=(e,t)=>"object"==typeof e&&null!==e&&"__NEXT_ERROR_CODE"in e?`${t}@${e.__NEXT_ERROR_CODE}`:t;function tK(e){return"object"==typeof e&&null!==e&&"message"in e&&"string"==typeof e.message&&e.message.startsWith("This rendered a large document (>")}var tY=a("./dist/esm/server/app-render/instant-validation/instant-validation-error.js");function tQ(e){if((0,tz.C)(e)||(0,tX.p)(e)||(0,tq.isDynamicServerError)(e)||(0,tV.AA)(e)||(0,tY.R)(e))return e.digest}function tZ(e,t,r,n,a){return i=>{var s;if("string"==typeof i)return tL()(i).toString();if(eF(i))return;let o=tQ(i);if(o)return o;if(tK(i))return void console.error(i);let l=tG(i),u=!1;if(l.digest?r.has(l.digest)&&(l=r.get(l.digest),u=!0):l.digest=tJ(l,tL()(l.message+(l.stack||"")).toString()),r.has(l.digest)||r.set(l.digest,l),e&&tB(l),!(t&&(null==l||null==(s=l.message)?void 0:s.includes("The specific message is omitted in production builds to avoid leaking sensitive details.")))){let e=a??(0,j.getTracer)().getActiveScopeSpan();e&&(e.recordException(l),e.setAttribute("error.type",l.name),e.setStatus({code:j.SpanStatusCode.ERROR,message:l.message})),n(l,u)}return l.digest}}function t0(e,t,r,n,a,i){return(s,o)=>{var l;if(tK(s))return void console.error(s);let u=!0;if(n.push(s),eF(s))return;let c=tQ(s);if(c)return c;let d=tG(s);if(d.digest?r.has(d.digest)&&(s=r.get(d.digest),u=!1):d.digest=tJ(d,tL()(d.message+((null==o?void 0:o.componentStack)||d.stack||"")).toString()),e&&tB(d),!(t&&(null==d||null==(l=d.message)?void 0:l.includes("The specific message is omitted in production builds to avoid leaking sensitive details.")))&&u){let e=i??(0,j.getTracer)().getActiveScopeSpan();e&&(e.recordException(d),e.setAttribute("error.type",d.name),e.setStatus({code:j.SpanStatusCode.ERROR,message:d.message})),a(d,o)}return d.digest}}let t1={catchall:"c","catchall-intercepted-(..)(..)":"ci(..)(..)","catchall-intercepted-(.)":"ci(.)","catchall-intercepted-(..)":"ci(..)","catchall-intercepted-(...)":"ci(...)","optional-catchall":"oc",dynamic:"d","dynamic-intercepted-(..)(..)":"di(..)(..)","dynamic-intercepted-(.)":"di(.)","dynamic-intercepted-(..)":"di(..)","dynamic-intercepted-(...)":"di(...)"};var t2=a("./dist/esm/shared/lib/router/utils/get-segment-param.js");let t4=/^'nonce-([A-Za-z0-9+/_-]+={0,2})'$/;var t3=a("./dist/compiled/superstruct/index.cjs"),t6=a.n(t3);let t8=t6().enums(["c","ci(..)(..)","ci(.)","ci(..)","ci(...)","oc","d","di(..)(..)","di(.)","di(..)","di(...)"]),t9=t6().union([t6().string(),t6().tuple([t6().string(),t6().string(),t8,t6().nullable(t6().array(t6().string()))])]),t5=t6().tuple([t9,t6().record(t6().string(),t6().lazy(()=>t5)),t6().optional(t6().nullable(t6().tuple([t6().string(),t6().string()]))),t6().optional(t6().nullable(t6().union([t6().literal("refetch"),t6().literal("inside-shared-layout"),t6().literal("metadata-only")]))),t6().optional(t6().number())]);var t7=((l={})[l.HasRuntimePrefetch=1]="HasRuntimePrefetch",l[l.SubtreeHasInstant=2]="SubtreeHasInstant",l[l.SegmentHasLoadingBoundary=4]="SegmentHasLoadingBoundary",l[l.SubtreeHasLoadingBoundary=8]="SubtreeHasLoadingBoundary",l[l.IsRootLayout=16]="IsRootLayout",l[l.ParentInlinedIntoSelf=32]="ParentInlinedIntoSelf",l[l.InlinedIntoChild=64]="InlinedIntoChild",l[l.HeadInlinedIntoSelf=128]="HeadInlinedIntoSelf",l[l.HeadOutlined=256]="HeadOutlined",l),re=a("./dist/esm/shared/lib/segment.js");async function rt(e,t,r,n,a){let[i,s,{layout:o,loading:l,page:u}]=e,c=r(e),d=c?c.treeSegment:i,f=[(0,re.HG)(d,n),{}],h=o?await o[0]():u?await u[0]():void 0,p=h?h.unstable_instant:void 0,m=0;null!==t&&(m|=t.hints),a||void 0===o||(a=!0,m|=t7.IsRootLayout),p&&"object"==typeof p&&(m|=t7.SubtreeHasInstant,"runtime"===p.prefetch&&(m|=t7.HasRuntimePrefetch)),l&&(m|=t7.SegmentHasLoadingBoundary);let g={};for(let e in s){var y;let i=(null==t||null==(y=t.slots)?void 0:y[e])??null,o=await rt(s[e],i,r,n,a);void 0!==o[4]&&(m|=o[4]&(t7.SubtreeHasInstant|t7.SubtreeHasLoadingBoundary),o[4]&(t7.SegmentHasLoadingBoundary|t7.SubtreeHasLoadingBoundary)&&(m|=t7.SubtreeHasLoadingBoundary)),g[e]=o}return f[1]=g,0!==m&&(f[4]=m),f}async function rr(e,t,r,n){return rt(e,t,r,n,!1)}async function rn(e,t,r){return rt(e,t,r,{},!1)}let ra=["accept-encoding","keepalive","keep-alive","content-encoding","transfer-encoding","connection","expect","content-length","set-cookie"];function ri(e){let t,r;e.headers instanceof Headers?(t=e.headers.get(z.ts)??null,r=e.headers.get("content-type")):(t=e.headers[z.ts]??null,r=e.headers["content-type"]??null);let n="POST"===e.method&&"application/x-www-form-urlencoded"===r,a=!!("POST"===e.method&&(null==r?void 0:r.startsWith("multipart/form-data"))),i=void 0!==t&&"string"==typeof t&&"POST"===e.method;return{actionId:t,isURLEncodedAction:n,isMultipartAction:a,isFetchAction:i,isPossibleServerAction:!!(i||n||a)}}let{env:rs,stdout:ro}=(null==(b=globalThis)?void 0:b.process)??{},rl=rs&&!rs.NO_COLOR&&(rs.FORCE_COLOR||(null==ro?void 0:ro.isTTY)&&!rs.CI&&"dumb"!==rs.TERM),ru=(e,t,r,n)=>{let a=e.substring(0,n)+r,i=e.substring(n+t.length),s=i.indexOf(t);return~s?a+ru(i,t,r,s):a+i},rc=(e,t,r=e)=>rl?n=>{let a=""+n,i=a.indexOf(t,e.length);return~i?e+ru(a,t,r,i)+t:e+a+t}:String,rd=rc("\x1b[1m","\x1b[22m","\x1b[22m\x1b[1m");rc("\x1b[2m","\x1b[22m","\x1b[22m\x1b[2m"),rc("\x1b[3m","\x1b[23m"),rc("\x1b[4m","\x1b[24m"),rc("\x1b[7m","\x1b[27m"),rc("\x1b[8m","\x1b[28m"),rc("\x1b[9m","\x1b[29m"),rc("\x1b[30m","\x1b[39m");let rf=rc("\x1b[31m","\x1b[39m"),rh=rc("\x1b[32m","\x1b[39m"),rp=rc("\x1b[33m","\x1b[39m");rc("\x1b[34m","\x1b[39m");let rm=rc("\x1b[35m","\x1b[39m");rc("\x1b[38;2;173;127;168m","\x1b[39m"),rc("\x1b[36m","\x1b[39m");let rg=rc("\x1b[37m","\x1b[39m");rc("\x1b[90m","\x1b[39m"),rc("\x1b[40m","\x1b[49m"),rc("\x1b[41m","\x1b[49m"),rc("\x1b[42m","\x1b[49m"),rc("\x1b[43m","\x1b[49m"),rc("\x1b[44m","\x1b[49m"),rc("\x1b[45m","\x1b[49m"),rc("\x1b[46m","\x1b[49m"),rc("\x1b[47m","\x1b[49m");var ry=a("./dist/esm/server/lib/lru-cache.js");let rv={wait:rg(rd("○")),error:rf(rd("⨯")),warn:rp(rd("⚠")),ready:"▲",info:rg(rd(" ")),event:rh(rd("✓")),trace:rm(rd("\xbb"))},rb={log:"log",warn:"warn",error:"error"};function rw(e,...t){(""===t[0]||void 0===t[0])&&1===t.length&&t.shift();let r=e in rb?rb[e]:"log",n=rv[e];0===t.length?console[r](""):1===t.length&&"string"==typeof t[0]?console[r](n+" "+t[0]):console[r](n,...t)}function rS(...e){rw("error",...e)}function r_(...e){rw("warn",...e)}let rE=new ry.q(1e4,e=>e.length);function rR(e){let t=parseInt(e.slice(0,2),16),r=t>>1&63,n=Array(6);for(let e=0;e<6;e++){let t=r>>5-e&1;n[e]=1===t}return{type:1==(t>>7&1)?"use-cache":"server-action",usedArgs:n,hasRestArgs:1==(1&t)}}new ry.q(1e4,e=>e.length);var rk=a("./dist/esm/client/components/redirect-status-code.js"),rx=a("./dist/esm/server/revalidation-utils.js");async function rP(e){var t,r,n;let a;return"function"==typeof globalThis.crypto?.subtle?.digest?G(e[z._V],e[z.qm],e[z.B],e[z.kO]):(t=e[z._V],r=e[z.qm],n=e[z.B],null===(a=V(t,r,n,e[z.kO]))?"":(function(e){let t=5381;for(let r=0;r>>0})(a).toString(36).slice(0,5))}let rC=async(e,t)=>{rT(e,await rP(t))},rT=(e,t)=>{let r=e.search,n=(r.startsWith("?")?r.slice(1):r).split("&").filter(e=>e&&!e.startsWith(`${z._A}=`));t.length>0?n.push(`${z._A}=${t}`):n.push(`${z._A}`),e.search=n.length?`?${n.join("&")}`:""};var rA=a("./dist/esm/shared/lib/action-revalidation-kind.js");function rO(e){let t={};for(let[r,n]of Object.entries(e))void 0!==n&&(t[r]=Array.isArray(n)?n.join(", "):`${n}`);return t}function rj(e,t){let r=e.headers,n=new e$.tm(tw.o.from(r)),a=t.getHeaders(),i=new e$.VO(function(e){let t=new Headers;for(let[r,n]of Object.entries(e))for(let e of Array.isArray(n)?n:[n])void 0!==e&&("number"==typeof e&&(e=e.toString()),t.append(r,e));return t}(a)),s=((e,t)=>{for(let[r,n]of(e["content-length"]&&"0"===e["content-length"]&&delete e["content-length"],Object.entries(e)))(t.includes(r)||!(Array.isArray(n)||"string"==typeof n))&&delete e[r];return e})({...rO(r),...rO(a)},ra);return i.getAll().forEach(e=>{void 0===e.value?n.delete(e.name):n.set(e)}),s.cookie=n.toString(),delete s["transfer-encoding"],new Headers(s)}async function r$(e,t,r,n,a){var i,s,o;if(!r)throw Object.defineProperty(Error("Invariant: Missing `host` header from a forwarded Server Actions request."),"__NEXT_ERROR_CODE",{value:"E226",enumerable:!1,configurable:!0});let l=rj(e,t);l.set("x-action-forwarded","1");let u=(null==(i=P(e,"initProtocol"))?void 0:i.replace(/:+$/,""))||"https",c=process.env.__NEXT_PRIVATE_ORIGIN||`${u}://${r.value}`,d=new URL(`${c}${a}${n}`);try{let r;r=e.stream();let n=await fetch(d,{method:"POST",body:r,duplex:"half",headers:l,redirect:"manual",next:{internal:1}});if(null==(s=n.headers.get("content-type"))?void 0:s.startsWith(z.al)){for(let[e,r]of n.headers)ra.includes(e)||t.setHeader(e,r);return new tN(n.body)}null==(o=n.body)||o.cancel()}catch(e){console.error("failed to forward action response",e)}return ez.fromStatic("{}",ey.U2)}async function rI(e,t,r,n,a,i,s,o){t.setHeader("x-action-redirect",`${n};${a}`);let l=function(e,t,r,n){if(r.startsWith("/"))return new URL(`${e}${r}`,"http://n");if(r.startsWith(".")){let t=n||"/";t.endsWith("/")||(t+="/");let a=new URL(r,`http://n${t}`);return new URL(`${e}${a.pathname}${a.search}${a.hash}`,"http://n")}let a=new URL(r);return(null==t?void 0:t.value)!==a.host?null:a.pathname.startsWith(e)?a:null}(i,r,n,o);if(l){var u,c,d,f,h,p;if(!r)throw Object.defineProperty(Error("Invariant: Missing `host` header from a forwarded Server Actions request."),"__NEXT_ERROR_CODE",{value:"E226",enumerable:!1,configurable:!0});let n=rj(e,t);n.set(z.hY,"1");let a=(null==(u=P(e,"initProtocol"))?void 0:u.replace(/:+$/,""))||"https",i=process.env.__NEXT_PRIVATE_ORIGIN||`${a}://${r.value}`,o=new URL(`${i}${l.pathname}${l.search}`);s.pendingRevalidatedTags&&(n.set(ey.vS,s.pendingRevalidatedTags.map(e=>e.tag).join(",")),n.set(ey.c1,(null==(f=s.incrementalCache)||null==(d=f.prerenderManifest)||null==(c=d.preview)?void 0:c.previewModeId)||"")),n.delete(z.B),n.delete(z.ts);try{let e=await G(n.get(z._V)?"1":void 0,n.get(z.qm)??void 0,n.get(z.B)??void 0,n.get(z.kO)??void 0);rT(o,e);let r=await fetch(o,{method:"GET",headers:n,next:{internal:1}});if(null==(h=r.headers.get("content-type"))?void 0:h.startsWith(z.al)){for(let[e,n]of r.headers)ra.includes(e)||t.setHeader(e,n);return new tN(r.body)}null==(p=r.body)||p.cancel()}catch(e){console.error("failed to get redirect response",e)}}return ez.EMPTY}function rD(e){return e.length>100?e.slice(0,100)+"...":e}async function rN({req:e,res:t,ComponentMod:r,generateFlight:n,workStore:i,requestStore:s,serverActions:o,ctx:l,metadata:u}){var c,d,f;let h,p,m,g,y,v,b=e.headers["content-type"],{page:w}=l.renderOpts,S=e6(),{actionId:_,isMultipartAction:E,isFetchAction:R,isURLEncodedAction:k,isPossibleServerAction:x}=ri(e),C=e=>(console.warn(e),t.setHeader(z.Ic,"1"),t.setHeader("content-type","text/plain"),t.statusCode=404,{type:"done",result:ez.fromStatic("Server action not found.","text/plain")});if(!x)return null;if(k)if(R)return{type:"not-found"};else return null;if(!(Object.keys((p=e3()).node).length>0)&&!(Object.keys(p.edge).length>0))return C(rU(_));if(i.isStaticGeneration)throw Object.defineProperty(Error("Invariant: server actions can't be handled during static rendering"),"__NEXT_ERROR_CODE",{value:"E359",enumerable:!1,configurable:!0});i.fetchCache="default-no-store";let T=e.headers.origin,A="string"==typeof T?"null"===T?"null":new URL(T).host:void 0,O=(g=(m=(c=e.headers)["x-forwarded-host"])&&Array.isArray(m)?m[0]:null==m||null==(f=m.split(","))||null==(d=f[0])?void 0:d.trim(),y=c.host,g?{type:"x-forwarded-host",value:g}:y?{type:"host",value:y}:void 0);if(A){if(!O||A!==O.value)if(((e,t=[])=>{let r=e.replace(/[A-Z]/g,e=>e.toLowerCase());return t.some(t=>!!t&&(t.replace(/[A-Z]/g,e=>e.toLowerCase())===r||function(e,t){let r=e.replace(/[A-Z]/g,e=>e.toLowerCase()),n=t.replace(/[A-Z]/g,e=>e.toLowerCase()),a=r.split("."),i=n.split(".");if(i.length<1||a.length0)return!1;return void 0!==t;default:if(t!==e)return!1}}return 0===a.length}(e,t)))})(A,null==o?void 0:o.allowedOrigins));else{O?console.error(`\`${O.type}\` header with value \`${rD(O.value)}\` does not match \`origin\` header with value \`${rD(A)}\` from a forwarded Server Actions request. Aborting the action.`):console.error("`x-forwarded-host` or `host` headers are not provided. One of these is needed to compare the `origin` header from a forwarded Server Actions request. Aborting the action.");let r=Object.defineProperty(Error("Invalid Server Actions request."),"__NEXT_ERROR_CODE",{value:"E80",enumerable:!1,configurable:!0});if(R){t.statusCode=500,u.statusCode=500;let a=Promise.reject(r);try{await a}catch{}return{type:"done",result:await n(e,l,s,{actionResult:a,skipPageRendering:!0,temporaryReferences:h})}}throw r}}else v="Missing `origin` header from a forwarded Server Actions request.";t.setHeader("Cache-Control","no-cache, no-store, max-age=0, must-revalidate");let{actionAsyncStorage:j}=r,$=!!e.headers["x-action-forwarded"];if(_){let r=function(e,t){var r,n;let a=null==(r=e3().node[e])?void 0:r.workers;if(a&&!a[eR(t,"app")?t:"app"+t])return n=Object.keys(a)[0],(0,eZ.Yr)(eC(n,"app"))}(_,w);if(r)return{type:"done",result:await r$(e,t,O,r,l.renderOpts.basePath)}}try{return await j.run({isAction:!0},async()=>{let u,c=[];{let{createTemporaryReferenceSet:t,decodeReply:r,decodeReplyFromBusboy:n,decodeAction:l,decodeFormState:d}=a("(react-server)/./dist/esm/server/app-render/react-server.node.js");h=t();let{PassThrough:f,Readable:p,Transform:m}=a("node:stream"),{pipeline:g}=a("node:stream/promises"),y=P(e,"actionBody"),w=y?p.from(y):e.body,k="1 MB",x=(null==o?void 0:o.bodySizeLimit)??k,T=x!==k?a("./dist/compiled/bytes/index.js").parse(x):1048576,A=0,O=new m({transform(e,t,r){if((A+=Buffer.byteLength(e,t))>T){let{ApiError:e}=a("./dist/esm/server/api-utils/index.js");r(Object.defineProperty(new e(413,`Body exceeded ${x} limit. +To configure the body size limit for Server Actions, see: https://nextjs.org/docs/app/api-reference/next-config-js/serverActions#bodysizelimit`),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0}));return}r(null,e)}});if(E)if(R){try{u=rL(_,S)}catch(e){return C(e)}let t=a("./dist/compiled/busboy/index.js")({defParamCharset:"utf8",headers:e.headers,limits:{fieldSize:T}}),r=new AbortController;try{[,c]=await Promise.all([g(w,O,t,{signal:r.signal}),n(t,S,{temporaryReferences:h})])}catch(e){throw r.abort(),e}}else{let e,t=new f,r=new Request("http://localhost",{method:"POST",headers:{"Content-Type":b},body:p.toWeb(t),duplex:"half"}),n=new AbortController;try{[,e]=await Promise.all([g(w,O,t,{signal:n.signal}),r.formData()])}catch(e){throw n.abort(),e}if(!1===function(e,t){let r=!1;for(let i of e.keys())if(i.startsWith(rF)){if(i.startsWith(rB)){var n,a;if(n=i,a=t,n.length!==rB.length+42||null==a[n.slice(rB.length)])return!1;r=!0}else if(i.startsWith(rH)){let n=rF+i.slice(rH.length)+":0",a=e.getAll(n);if(1!==a.length)return!1;let s=a[0];if("string"!=typeof s||function(e,t){if(!1===e.startsWith(rz))return!0;let r=rz.length,n=r+42,a=e.slice(r,n);return 42!==a.length||'"'!==e[n]||null==t[a]}(s,t))return!1;r=!0}}return r}(e,S))throw Object.defineProperty(Error(`Failed to find Server Action. This request might be from an older or newer deployment. +Read more: https://nextjs.org/docs/messages/failed-to-find-server-action`),"__NEXT_ERROR_CODE",{value:"E975",enumerable:!1,configurable:!0});let a=await l(e,S);if("function"!=typeof a)return null;{v&&r_(v);let{actionResult:t}=await rM(a,[],i,s,$),r=await d(t,e,S);return{type:"done",result:void 0,formState:r}}}else{if(!R)return null;try{u=rL(_,S)}catch(e){return C(e)}let e=new f,t=[];await Promise.all([g(w,O,e),(async()=>{for await(let r of e)t.push(Buffer.from(r))})()]);let n=Buffer.concat(t).toString("utf-8");c=await r(n,S,{temporaryReferences:h})}}let d=(await r.__next_app__.require(u))[_],{type:f}=rR(_),{actionResult:p,skipPageRendering:m}=(performance.now(),await rM(d,c,i,s,$).finally(()=>{!function(e,{workStore:t,requestStore:r}){var n;let a=+(null!=(n=t.pendingRevalidatedTags)&&!!n.some(e=>void 0===e.profile)),i=+!!(0,tS.YX)(r.mutableCookies).length;a||i?e.setHeader(z.ZL,JSON.stringify(rA.Du)):void 0!==t.pathWasRevalidated&&t.pathWasRevalidated!==rA.e9&&e.setHeader(z.ZL,JSON.stringify(t.pathWasRevalidated))}(t,{workStore:i,requestStore:s})}));if(!R)return null;{let t=!!m&&(0,rx.C)(i);return{type:"done",result:await n(e,l,s,{actionResult:Promise.resolve(p),skipPageRendering:m,temporaryReferences:h,waitUntil:!1===t?void 0:t})}}})}catch(r){if((0,tO.n)(r)){let n=tj(r),a=t$(r);if(t.statusCode=rk.Q.SeeOther,u.statusCode=rk.Q.SeeOther,R)return{type:"done",result:await rI(e,t,O,n,a,l.renderOpts.basePath,i,s.url.pathname)};return t.setHeader("Location",n),{type:"done",result:ez.EMPTY}}if((0,tA.RM)(r)){if(t.statusCode=(0,tA.jT)(r),u.statusCode=t.statusCode,R){let t=Promise.reject(r);try{await t}catch{}return{type:"done",result:await n(e,l,s,{skipPageRendering:!1,actionResult:t,temporaryReferences:h})}}return{type:"not-found"}}if(R){t.statusCode=500,u.statusCode=500;let a=Promise.reject(r);try{await a}catch{}return{type:"done",result:await n(e,l,s,{actionResult:a,skipPageRendering:void 0===i.pathWasRevalidated||i.pathWasRevalidated===rA.e9||$,temporaryReferences:h})}}throw r}}async function rM(e,t,r,n,a){n.phase="action";let i=a;if(t.length>1e3)throw Object.defineProperty(Error(`Server Action arguments list is too long (${t.length}). Maximum allowed is 1000.`),"__NEXT_ERROR_CODE",{value:"E986",enumerable:!1,configurable:!0});try{let a=await eQ.workUnitAsyncStorage.run(n,()=>e.apply(null,t));return i||=void 0===r.pathWasRevalidated||r.pathWasRevalidated===rA.e9,{actionResult:a,skipPageRendering:i}}finally{!i&&(n.phase="render",n.cookies=tS.Ck.seal((0,tS.m0)(n.mutableCookies)),r.isDraftMode=n.draftMode.isEnabled,await (0,rx.C)(r))}}function rL(e,t){var r;if(!e)throw Object.defineProperty(new eB.z("Missing 'next-action' header."),"__NEXT_ERROR_CODE",{value:"E664",enumerable:!1,configurable:!0});let n=null==(r=t[e])?void 0:r.id;if(!n)throw rU(e);return n}function rU(e){return Object.defineProperty(Error(`Failed to find Server Action${e?` "${e}"`:""}. This request might be from an older or newer deployment. +Read more: https://nextjs.org/docs/messages/failed-to-find-server-action`),"__NEXT_ERROR_CODE",{value:"E974",enumerable:!1,configurable:!0})}let rF="$ACTION_",rH="$ACTION_REF_",rB="$ACTION_ID_",rz='{"id":"',rq=O.createContext(null);function rX(e){let t=(0,O.useContext)(rq);t&&t(e)}function rV(){let e=[],t=t=>{e.push(t)};return{ServerInsertedHTMLProvider:({children:e})=>(0,T.jsx)(rq.Provider,{value:t,children:e}),renderServerInsertedHTML:()=>e.map((e,t)=>(0,T.jsx)(O.Fragment,{children:e()},"__next_server_inserted__"+t))}}function rW(e){return e.split("/").map(e=>encodeURIComponent(e)).join("/")}var rG=a("./dist/compiled/react-dom/index.js");function rJ(e,t,r,n,a,i,s){var o;let l,u=[],c={src:"",crossOrigin:r},d=((null==(o=e.rootMainFilesTree)?void 0:o[s])||e.rootMainFiles).map(rW);if(0===d.length)throw Object.defineProperty(Error("Invariant: missing bootstrap script. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E459",enumerable:!1,configurable:!0});if(n){c.src=`${t}/_next/`+d[0]+a,c.integrity=n[d[0]];for(let e=1;e{for(let e=0;e{for(let e=0;e(0,T.jsx)("script",{...e},e.src)),o=(n||[]).map(({key:e,value:t},r)=>(0,T.jsx)("meta",{name:e,content:t},`next-trace-data-${r}`));return async function(){let e=[];for(;i"string"==typeof e?"string"==typeof t&&e===t:"string"!=typeof t&&e[0]===t[0]&&e[1]===t[1];function rQ(e,t,r,n){let a=e.replace(/\.[^.]+$/,""),i=new Set,s=new Set,{entryCSSFiles:o,entryJSFiles:l}=e4(),u=o[a],c=null==l?void 0:l[a];if(u)for(let e of u)t.has(e.path)||(n&&t.add(e.path),i.add(e));if(c)for(let e of c)r.has(e)||(n&&r.add(e),s.add(e));return{styles:[...i],scripts:[...s]}}function rZ(e,t,r){if(!e||!t)return null;let n=t.replace(/\.[^.]+$/,""),a=new Set,i=!1,s=e.app[n];if(s)for(let e of(i=!0,s))r.has(e)||(a.add(e),r.add(e));return a.size?[...a].sort():i&&0===r.size?[]:null}function r0(e){let[,t,{loading:r}]=e;return!!r||Object.values(t).some(e=>r0(e))}function r1(e){if(e.$$typeof!==Symbol.for("react.server.reference"))return!1;let{type:t}=rR(e.$$id);return"use-cache"===t}async function r2(e){let t,r,n,{layout:a,page:i,defaultPage:s}=e[2],o=void 0!==a,l=void 0!==i,u=void 0!==s&&e[0]===re.WO;return o?(t=await a[0](),r="layout",n=a[1]):l?(t=await i[0](),r="page",n=i[1]):u&&(t=await s[0](),r="page",n=s[1]),{mod:t,modType:r,filePath:n}}function r4(e){return e.default||e}function r3(e){let[t,r,n,a]=e,{layout:i,template:s}=n,{page:o}=n;o=t===re.WO?n.defaultPage:o;let l=i?.[1]||s?.[1]||o?.[1];return{page:o,segment:t,modules:n,conventionPath:l,parallelRoutes:r,staticSiblings:a}}function r6(e,t){let r="";return e.sharedContext.clientAssetToken&&(r+=`?dpl=${e.sharedContext.clientAssetToken}`),r}function r8(e,t,r){let{componentMod:{createElement:n}}=t;return e.map((e,a)=>{let i="next",s=`${t.assetPrefix}/_next/${rW(e.path)}${r6(t,!0)}`;return e.inlined&&!t.parsedRequestHeaders.isRSCRequest?n("style",{key:a,nonce:t.nonce,precedence:i,href:s},e.content):(null==r||r.push(()=>{t.componentMod.preloadStyle(s,t.renderOpts.crossOrigin,t.nonce)}),n("link",{key:a,rel:"stylesheet",href:s,precedence:i,crossOrigin:t.renderOpts.crossOrigin,nonce:t.nonce}))})}async function r9({filePath:e,getComponent:t,injectedCSS:r,injectedJS:n,ctx:a}){let{componentMod:{createElement:i}}=a,{styles:s,scripts:o}=rQ(e,r,n),l=r8(s,a),u=o?o.map((e,t)=>i("script",{src:`${a.assetPrefix}/_next/${rW(e)}${r6(a,!0)}`,async:!0,key:`script-${t}`})):null;return[r4(await t()),l,u]}a("./dist/esm/server/dynamic-rendering-utils.js");let r5=()=>{};globalThis.FinalizationRegistry&&new FinalizationRegistry(e=>{let t=e.deref();t&&!t.locked&&t.cancel("Response object has been garbage collected").then(r5)});class r7{constructor(e,t=e=>e()){this.cacheKeyFn=e,this.schedulerFn=t,this.pending=new Map}static create(e){return new r7(null==e?void 0:e.cacheKeyFn,null==e?void 0:e.schedulerFn)}async batch(e,t){let r=this.cacheKeyFn?await this.cacheKeyFn(e):e;if(null===r)return t({resolve:e=>Promise.resolve(e),key:e});let n=this.pending.get(r);if(n)return n;let{promise:a,resolve:i,reject:s}=new I;return this.pending.set(r,a),this.schedulerFn(async()=>{try{let r=await t({resolve:i,key:e});i(r)}catch(e){s(e)}finally{this.pending.delete(r)}}),a}}var ne=((u={}).APP_PAGE="APP_PAGE",u.APP_ROUTE="APP_ROUTE",u.PAGES="PAGES",u.FETCH="FETCH",u.REDIRECT="REDIRECT",u.IMAGE="IMAGE",u),nt=((c={}).APP_PAGE="APP_PAGE",c.APP_ROUTE="APP_ROUTE",c.PAGES="PAGES",c.FETCH="FETCH",c.IMAGE="IMAGE",c),nr=((d={}).PAGES="PAGES",d.PAGES_API="PAGES_API",d.APP_PAGE="APP_PAGE",d.APP_ROUTE="APP_ROUTE",d.IMAGE="IMAGE",d);async function nn(e){var t,r;return{...e,value:(null==(t=e.value)?void 0:t.kind)===ne.PAGES?{kind:ne.PAGES,html:await e.value.html.toUnchunkedString(!0),pageData:e.value.pageData,headers:e.value.headers,status:e.value.status}:(null==(r=e.value)?void 0:r.kind)===ne.APP_PAGE?{kind:ne.APP_PAGE,html:await e.value.html.toUnchunkedString(!0),postponed:e.value.postponed,rscData:e.value.rscData,headers:e.value.headers,status:e.value.status,segmentData:e.value.segmentData}:e.value}}async function na(e){var t,r;return e?{isMiss:e.isMiss,isStale:e.isStale,cacheControl:e.cacheControl,isFallback:e.isFallback,value:(null==(t=e.value)?void 0:t.kind)===ne.PAGES?{kind:ne.PAGES,html:ez.fromStatic(e.value.html,ey.j9),pageData:e.value.pageData,headers:e.value.headers,status:e.value.status}:(null==(r=e.value)?void 0:r.kind)===ne.APP_PAGE?{kind:ne.APP_PAGE,html:ez.fromStatic(e.value.html,ey.j9),rscData:e.value.rscData,headers:e.value.headers,status:e.value.status,postponed:e.value.postponed,segmentData:e.value.segmentData}:e.value}:null}function ni(e,t){if(!e)return t;let r=parseInt(e,10);return Number.isFinite(r)&&r>0?r:t}let ns=ni(process.env.NEXT_PRIVATE_RESPONSE_CACHE_TTL,1e4),no=ni(process.env.NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE,150),nl="__ttl_sentinel__";function nu(e,t){return`${e}\0${t??nl}`}class nc{constructor(e,t=no,r=ns){this.getBatcher=r7.create({cacheKeyFn:({key:e,isOnDemandRevalidate:t})=>`${e}-${t?"1":"0"}`,schedulerFn:D}),this.revalidateBatcher=r7.create({schedulerFn:D}),this.evictedInvocationIDs=new Set,this.minimal_mode=e,this.maxSize=t,this.ttl=r,this.cache=new ry.q(t,void 0,e=>{let t=function(e){let t=e.lastIndexOf("\0");if(-1===t)return;let r=e.slice(t+1);return r===nl?void 0:r}(e);if(t){if(this.evictedInvocationIDs.size>=100){let e=this.evictedInvocationIDs.values().next().value;e&&this.evictedInvocationIDs.delete(e)}this.evictedInvocationIDs.add(t)}})}async get(e,t,r){if(!e)return t({hasResolved:!1,previousCacheEntry:null});if(this.minimal_mode){let t=nu(e,r.invocationID),n=this.cache.get(t);if(n){if(void 0!==r.invocationID)return na(n.entry);let e=Date.now();if(n.expiresAt>e)return na(n.entry);this.cache.remove(t)}r.invocationID&&this.evictedInvocationIDs.has(r.invocationID)&&function(...e){let t=e.join(" ");rE.has(t)||(rE.set(t,t),r_(...e))}(`Response cache entry was evicted for invocation ${r.invocationID}. Consider increasing NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE (current: ${this.maxSize}).`)}let{incrementalCache:n,isOnDemandRevalidate:a=!1,isFallback:i=!1,isRoutePPREnabled:s=!1,isPrefetch:o=!1,waitUntil:l,routeKind:u,invocationID:c}=r,d=await this.getBatcher.batch({key:e,isOnDemandRevalidate:a},({resolve:r})=>{let d=this.handleGet(e,t,{incrementalCache:n,isOnDemandRevalidate:a,isFallback:i,isRoutePPREnabled:s,isPrefetch:o,routeKind:u,invocationID:c},r);return l&&l(d),d});return na(d)}async handleGet(e,t,r,n){let a=null,i=!1;try{if((a=this.minimal_mode?null:await r.incrementalCache.get(e,{kind:function(e){switch(e){case nr.PAGES:return nt.PAGES;case nr.APP_PAGE:return nt.APP_PAGE;case nr.IMAGE:return nt.IMAGE;case nr.APP_ROUTE:return nt.APP_ROUTE;case nr.PAGES_API:throw Object.defineProperty(Error(`Unexpected route kind ${e}`),"__NEXT_ERROR_CODE",{value:"E64",enumerable:!1,configurable:!0});default:return e}}(r.routeKind),isRoutePPREnabled:r.isRoutePPREnabled,isFallback:r.isFallback}))&&!r.isOnDemandRevalidate&&(n(a),i=!0,!a.isStale||r.isPrefetch))return a;let s=await this.revalidate(e,r.incrementalCache,r.isRoutePPREnabled,r.isFallback,t,a,null!==a&&!r.isOnDemandRevalidate,void 0,r.invocationID);if(!s){if(this.minimal_mode){let t=nu(e,r.invocationID);this.cache.remove(t)}return null}return r.isOnDemandRevalidate,s}catch(e){if(i)return console.error(e),null;throw e}}async revalidate(e,t,r,n,a,i,s,o,l){return this.revalidateBatcher.batch(e,()=>{let u=this.handleRevalidate(e,t,r,n,a,i,s,l);return o&&o(u),u})}async handleRevalidate(e,t,r,n,a,i,s,o){try{let l=await a({hasResolved:s,previousCacheEntry:i,isRevalidating:!0});if(!l)return null;let u=await nn({...l,isMiss:!i});if(u.cacheControl)if(this.minimal_mode){let t=nu(e,o);this.cache.set(t,{entry:u,expiresAt:Date.now()+this.ttl})}else await t.set(e,u.value,{cacheControl:u.cacheControl,isRoutePPREnabled:r,isFallback:n});return u}catch(a){if(null==i?void 0:i.cacheControl){let a=Math.min(Math.max(i.cacheControl.revalidate||3,3),30),s=void 0===i.cacheControl.expire?void 0:Math.max(a+3,i.cacheControl.expire);await t.set(e,i.value,{cacheControl:{revalidate:a,expire:s},isRoutePPREnabled:r,isFallback:n})}throw a}}}var nd=a("./dist/esm/server/app-render/staged-rendering.js");Symbol.for("next-patch"),tA.s8;var nf=a("./dist/esm/client/components/static-generation-bailout.js");function nh(){let e={varyParams:new Set,status:"pending",value:new Set,then(t){t&&("pending"===e.status?e.resolvers.push(t):t(e.value))},resolvers:[]};return e}let np=new Set,nm={varyParams:np,status:"fulfilled",value:np,then(e){e&&e(np)},resolvers:[]};function ng(){let e=nh();return{head:e,rootParams:nh(),segments:new Set}}function ny(){let e=function(){let e=eQ.workUnitAsyncStorage.getStore();if(e)switch(e.type){case"prerender":case"prerender-runtime":{let t=e.varyParamsAccumulator;if(null!==t)return t.head}}return null}();return null!==e?e:null}async function nv(e){let t=e.rootParams.varyParams;for(let r of(nb(e.head,t),e.segments))nb(r,t);await Promise.resolve(),await Promise.resolve(),await Promise.resolve()}function nb(e,t){if("pending"!==e.status)return;let r=new Set(e.varyParams);for(let e of t)r.add(e);for(let t of(e.value=r,e.status="fulfilled",e.resolvers))t(r);e.resolvers=[]}let nw=/^(.*[\\/])?next[\\/]dist[\\/]client[\\/]components[\\/]builtin[\\/]/;function nS(e,t,r){let n=e[2],a=n[r]?n[r][1]:void 0;if(a){let e;return e=(function(e,t){let r=process.cwd(),n=e.replace(r,"").replace(/^[\\/]/,""),a=(t||"").replace(/^\[project\][\\/]?/,"").replace(e,"").replace(r,"").replace(/\\/g,"/").replace(/^\//,"");if(n&&a.startsWith(n)&&(a=a.slice(n.length).replace(/^\//,"")),a.includes("/")){let t=e.split(/[\\/]/).pop()||"";if(t){let e=t+"/",r=a.indexOf(e);r>=0&&(a=a.slice(r+e.length))}}return a})(t,a).replace(/^(src\/)?app\//,""),nw.test(e)&&(e=e.replace(nw,""),e=`__next_builtin__${e}`),e}}function n_(e){return(0,j.getTracer)().trace($.Fx.createComponentTree,{spanName:"build component tree"},()=>nR(e,!0))}function nE(e,t){throw Object.defineProperty(Error(`The default export is not a React Component in "${"/"===e?"":e}/${t}"`),"__NEXT_ERROR_CODE",{value:"E45",enumerable:!1,configurable:!0})}async function nR({loaderTree:e,parentParams:t,parentOptionalCatchAllParamName:r,parentRuntimePrefetchable:n,rootLayoutIncluded:i,injectedCSS:s,injectedJS:o,injectedFontPreloadTags:l,ctx:u,missingSlots:c,preloadCallbacks:d,authInterrupts:f,MetadataOutlet:h,prerenderHTTPError:p},m){let g,{renderOpts:{nextConfigOutput:y,experimental:v,cacheComponents:b},workStore:w,componentMod:{createElement:S,Fragment:_,SegmentViewNode:E,HTTPAccessFallbackBoundary:R,LayoutRouter:k,RenderFromTemplateContext:x,ClientPageRoot:P,ClientSegmentRoot:C,createServerSearchParamsForServerPage:T,createPrerenderSearchParamsForClientPage:A,createServerParamsForServerSegment:O,createPrerenderParamsForClientSegment:I,serverHooks:{DynamicServerError:D},Postpone:N},pagePath:M,getDynamicParamFromSegment:L,isPrefetch:U,query:F}=u,{page:H,conventionPath:B,segment:z,modules:q,parallelRoutes:X}=r3(e),{layout:V,template:W,error:G,loading:J,"not-found":K,forbidden:Y,unauthorized:Q}=q,Z=new Set(s),ee=new Set(o),et=new Set(l),er=function({ctx:e,layoutOrPagePath:t,injectedCSS:r,injectedJS:n,injectedFontPreloadTags:a,preloadCallbacks:i}){let{componentMod:{createElement:s}}=e,{styles:o,scripts:l}=t?rQ(t,r,n,!0):{styles:[],scripts:[]},u=t?rZ(e.renderOpts.nextFontManifest,t,a):null;if(u)if(u.length)for(let t=0;t{e.componentMod.preloadFont(s,a,e.renderOpts.crossOrigin,e.nonce)})}else try{let t=new URL(e.assetPrefix);i.push(()=>{e.componentMod.preconnect(t.origin,"anonymous",e.nonce)})}catch(t){i.push(()=>{e.componentMod.preconnect("/","anonymous",e.nonce)})}let c=r8(o,e,i),d=l?l.map((t,r)=>s("script",{src:`${e.assetPrefix}/_next/${rW(t)}${r6(e,!0)}`,async:!0,key:`script-${r}`,nonce:e.nonce})):[];return c.length||d.length?[...c,...d]:null}({preloadCallbacks:d,ctx:u,layoutOrPagePath:B,injectedCSS:Z,injectedJS:ee,injectedFontPreloadTags:et}),[en,ea,ei]=W?await r9({ctx:u,filePath:W[1],getComponent:W[0],injectedCSS:Z,injectedJS:ee}):[_],[es,eo,el]=G?await r9({ctx:u,filePath:G[1],getComponent:G[0],injectedCSS:Z,injectedJS:ee}):[],[eu,ec,ed]=J?await r9({ctx:u,filePath:J[1],getComponent:J[0],injectedCSS:Z,injectedJS:ee}):[],ef=void 0!==V,eh=void 0!==H,{mod:ep,modType:em}=await (0,j.getTracer)().trace($.Fx.getLayoutOrPageModule,{hideSpan:!(ef||eh),spanName:"resolve segment modules",attributes:{"next.segment":z}},()=>r2(e)),eg=ef&&!i,ev=i||eg,[eb,ew]=K?await r9({ctx:u,filePath:K[1],getComponent:K[0],injectedCSS:Z,injectedJS:ee}):[],eS=ep?ep.unstable_instant:void 0,e_=!!eS&&"object"==typeof eS&&"runtime"===eS.prefetch||n,[eE,eR]=f&&Y?await r9({ctx:u,filePath:Y[1],getComponent:Y[0],injectedCSS:Z,injectedJS:ee}):[],[ek,ex]=f&&Q?await r9({ctx:u,filePath:Q[1],getComponent:Q[0],injectedCSS:Z,injectedJS:ee}):[],eP=null==ep?void 0:ep.dynamic;if("export"===y)if(eP&&"auto"!==eP){if("force-dynamic"===eP)throw Object.defineProperty(new nf.f('Page with `dynamic = "force-dynamic"` couldn\'t be exported. `output: "export"` requires all pages be renderable statically because there is no runtime server to dynamically render routes in this output format. Learn more: https://nextjs.org/docs/app/building-your-application/deploying/static-exports'),"__NEXT_ERROR_CODE",{value:"E527",enumerable:!1,configurable:!0})}else eP="error";if("string"==typeof eP)if("error"===eP)w.dynamicShouldError=!0;else if("force-dynamic"===eP){if(w.forceDynamic=!0,w.isStaticGeneration&&!v.isRoutePPREnabled){let e=Object.defineProperty(new D('Page with `dynamic = "force-dynamic"` won\'t be rendered statically.'),"__NEXT_ERROR_CODE",{value:"E585",enumerable:!1,configurable:!0});throw w.dynamicUsageDescription=e.message,w.dynamicUsageStack=e.stack,e}}else w.dynamicShouldError=!1,w.forceStatic="force-static"===eP;if("string"==typeof(null==ep?void 0:ep.fetchCache)&&(w.fetchCache=null==ep?void 0:ep.fetchCache),void 0!==(null==ep?void 0:ep.revalidate)&&function(e,t){try{if(!1===e)ey.AR;else if("number"==typeof e&&!isNaN(e)&&e>-1);else if(void 0!==e)throw Object.defineProperty(Error(`Invalid revalidate value "${e}" on "${t}", must be a non-negative number or false`),"__NEXT_ERROR_CODE",{value:"E179",enumerable:!1,configurable:!0})}catch(e){if(e instanceof Error&&e.message.includes("Invalid revalidate"))throw e;return}}(null==ep?void 0:ep.revalidate,w.route),"number"==typeof(null==ep?void 0:ep.revalidate)){let e=ep.revalidate,t=eQ.workUnitAsyncStorage.getStore();if(t)switch(t.type){case"prerender":case"prerender-runtime":case"prerender-legacy":case"prerender-ppr":t.revalidate>e&&(t.revalidate=e)}if(!w.forceStatic&&w.isStaticGeneration&&0===e&&!v.isRoutePPREnabled){let e=`revalidate: 0 configured ${z}`;throw w.dynamicUsageDescription=e,Object.defineProperty(new D(e),"__NEXT_ERROR_CODE",{value:"E1005",enumerable:!1,configurable:!0})}}if(eh&&"number"==typeof(null==ep?void 0:ep.unstable_dynamicStaleTime)){let e=ep.unstable_dynamicStaleTime,t=eQ.workUnitAsyncStorage.getStore();if(t)switch(t.type){case"prerender":case"prerender-runtime":case"prerender-legacy":case"prerender-ppr":t.stale>e&&(t.stale=e);break;case"request":(void 0===t.stale||t.stale>e)&&(t.stale=e)}}let eC=w.isStaticGeneration,eT=eC&&!0===v.isRoutePPREnabled,eA=ep?r4(ep):void 0;if(eC){let{isValidElementType:e}=a("./dist/compiled/react-is/index.js");void 0===eA||e(eA)||nE(M,em??"page"),void 0===es||e(es)||nE(M,"error"),void 0===eu||e(eu)||nE(M,"loading"),void 0===eb||e(eb)||nE(M,"not-found"),void 0===eE||e(eE)||nE(M,"forbidden"),void 0===ek||e(ek)||nE(M,"unauthorized")}let eO=L(e),ej=t;eO&&null!==eO.value&&(ej={...t,[eO.param]:eO.value});let e$=(null==eO?void 0:eO.type)==="oc"&&null===eO.value?eO.param:r,eI=u.renderOpts.dir||"",[eD,eN]=await nP({ctx:u,conventionName:"not-found",Component:eb,styles:ew,tree:e}),[eM]=await nP({ctx:u,conventionName:"forbidden",Component:eE,styles:eR,tree:e}),[eL]=await nP({ctx:u,conventionName:"unauthorized",Component:ek,styles:ex,tree:e}),eU=await Promise.all(Object.keys(X).map(async t=>{let r="children"===t,n=X[t],a=r?eD:void 0,i=r?eM:void 0,s=r?eL:void 0,o=null;if(U&&(eu||!r0(n))&&!v.isRoutePPREnabled);else{if((null==p?void 0:p.boundaryTree)===e&&r){let e;switch(p.triggeredStatus){case 404:e=eD;break;case 403:e=eM;break;case 401:e=eL}e&&(o=nC(u,e,{},null,eT,!1,nm))}null===o&&(o=await nR({loaderTree:n,parentParams:ej,parentOptionalCatchAllParamName:e$,parentRuntimePrefetchable:e_,rootLayoutIncluded:ev,injectedCSS:Z,injectedJS:ee,injectedFontPreloadTags:et,ctx:u,missingSlots:c,preloadCallbacks:d,authInterrupts:f,MetadataOutlet:r?h:null,prerenderHTTPError:p},!1))}let l=S(en,null,S(x,null));return nS(e,eI,"template"),nS(e,eI,"error"),nS(e,eI,"loading"),m&&nS(e,eI,"global-error"),[t,S(k,{parallelRouterKey:t,error:es,errorStyles:eo,errorScripts:el,template:l,templateStyles:ea,templateScripts:ei,notFound:a,forbidden:i,unauthorized:s,...!1}),o]})),eF={},eH={};for(let e of eU){let[t,r,n]=e;eF[t]=r,eH[t]=n}let eB=eu?S(eu,{key:"l"}):null,ez=(nS(e,eI,"loading"),eB?[eB,ec,ed]:null);if(!eA)return nC(u,S(_,{key:"c"},er,eF.children),eH,ez,eT,e_,nm);if(w.isStaticGeneration&&w.forceDynamic&&v.isRoutePPREnabled)return nC(u,S(_,{key:"c"},S(N,{reason:'dynamic = "force-dynamic" was used',route:w.route}),er),eH,ez,!0,e_,nm);let eq=(null==(g=(null==ep?void 0:ep.default)||ep)?void 0:g.$$typeof)===Symbol.for("react.client.reference"),eX=eq&&b?nm:function(){let e=eQ.workUnitAsyncStorage.getStore();if(e)switch(e.type){case"prerender":case"prerender-runtime":{let t=e.varyParamsAccumulator;if(null!==t){let e=nh();return t.segments.add(e),e}}}return null}();if(eh){let t;if(eq)if(b)t=S(P,{Component:eA,serverProvidedParams:null});else if(eC){let e=I(ej),r=A();t=S(P,{Component:eA,serverProvidedParams:{searchParams:F,params:ej,promises:[r,e]}})}else t=S(P,{Component:eA,serverProvidedParams:{searchParams:F,params:ej,promises:null}});else{let e=O(ej,e$,eX,e_),r=T(F,eX,e_);t=r1(eA)?S(eA,{params:e,searchParams:r,$$isPage:!0}):S(eA,{params:e,searchParams:r})}re.WO;return nC(u,S(_,{key:"c"},(nS(e,eI,"page")??nS(e,eI,"defaultPage"),t),er,h?S(h,null):null),eH,ez,eT,e_,eX)}{let t,r=eg&&"children"in X&&Object.keys(X).length>1;if(eq){let e;if(b)e=S(C,{Component:eA,slots:eF,serverProvidedParams:null});else if(eC){let t=I(ej);e=S(C,{Component:eA,slots:eF,serverProvidedParams:{params:ej,promises:[t]}})}else e=S(C,{Component:eA,slots:eF,serverProvidedParams:{params:ej,promises:null}});if(r){let r,n,a;r=nk({ctx:u,ErrorBoundaryComponent:eb,errorElement:eD,ClientSegmentRoot:C,layerAssets:er,SegmentComponent:eA,currentParams:ej}),n=nk({ctx:u,ErrorBoundaryComponent:eE,errorElement:eM,ClientSegmentRoot:C,layerAssets:er,SegmentComponent:eA,currentParams:ej}),a=nk({ctx:u,ErrorBoundaryComponent:ek,errorElement:eL,ClientSegmentRoot:C,layerAssets:er,SegmentComponent:eA,currentParams:ej}),t=r||n||a?S(R,{key:"c",notFound:r,forbidden:n,unauthorized:a},er,e):S(_,{key:"c"},er,e)}else t=S(_,{key:"c"},er,e)}else{let e,n=O(ej,e$,eX,e_);e=r1(eA)?S(eA,{...eF,params:n,$$isLayout:!0},eF.children):S(eA,{...eF,params:n},eF.children),t=r?S(R,{key:"c",notFound:eD?S(_,null,er,S(eA,{params:n},ew,eD)):void 0},er,e):S(_,{key:"c"},er,e)}return nS(e,eI,"layout"),nC(u,t,eH,ez,eT,e_,eX)}}function nk({ctx:e,ErrorBoundaryComponent:t,errorElement:r,ClientSegmentRoot:n,layerAssets:a,SegmentComponent:i,currentParams:s}){let{componentMod:{createElement:o,Fragment:l}}=e;return t?o(l,null,a,o(n,{Component:i,slots:{children:r},params:s})):null}function nx(e,t){return function e(t,r,n){let{modules:{layout:a},parallelRoutes:i}=r3(r),s=n(r),o=t;return(s&&null!==s.value&&(o={...t,[s.param]:s.value}),void 0!==a)?o:i.children?e(o,i.children,n):o}({},e,t)}async function nP({ctx:e,conventionName:t,Component:r,styles:n,tree:a}){let{componentMod:{createElement:i,Fragment:s}}=e,o=e.renderOpts.dir||"",{SegmentViewNode:l}=e.componentMod;return[r?i(s,null,i(r,null),n):void 0,nS(a,o,t)]}function nC(e,t,r,n,a,i,s){let o=e.componentMod.createElement;if(!i){let e=eQ.workUnitAsyncStorage.getStore();if(e){let r;switch(e.type){case"request":case"prerender-runtime":if(r=e.stagedRendering){let e=t;t=r.waitForStage(nd.D.Static).then(()=>e)}}}}return null!==n&&(t=o(e.componentMod.LoadingBoundaryProvider,{loading:n,children:t})),[t,r,null,a,s||null]}async function nT({loaderTreeToFilter:e,parentParams:t,flightRouterState:r,parentIsInsideSharedLayout:n,rscHead:a,injectedCSS:i,injectedJS:s,injectedFontPreloadTags:o,rootLayoutIncluded:l,ctx:u,preloadCallbacks:c,MetadataOutlet:d,hintTree:f}){let{renderOpts:{nextFontManifest:h,experimental:p},query:m,isPrefetch:g,getDynamicParamFromSegment:y,parsedRequestHeaders:v}=u,[b,w,S]=e,_=Object.keys(w),{layout:E}=S,R=void 0!==E&&!l,k=l||R,x=y(e),P=x&&null!==x.value?{...t,[x.param]:x.value}:t,C=(0,re.HG)(x?x.treeSegment:b,m),T=!r||!rY(C,r[0])||"refetch"===r[3],A=T||n||"inside-shared-layout"===r[3];if(A&&!p.isRoutePPREnabled&&(v.isRouteTreePrefetchRequest||g&&!S.loading&&!r0(e)))return[[r&&nA(C,r[0])?r[0]:C,v.isRouteTreePrefetchRequest?await rn(e,f,y):await rr(e,f,y,m),null,[null,null],!0]];if(r&&"metadata-only"===r[3])return[[r&&nA(C,r[0])?r[0]:C,v.isRouteTreePrefetchRequest?await rn(e,f,y):await rr(e,f,y,m),null,a,!1]];if(T){let t=r&&nA(C,r[0])?r[0]:C,n=await rr(e,f,y,m),h=await n_({ctx:u,loaderTree:e,parentParams:P,parentOptionalCatchAllParamName:null,parentRuntimePrefetchable:!1,injectedCSS:i,injectedJS:s,injectedFontPreloadTags:o,rootLayoutIncluded:l,preloadCallbacks:c,authInterrupts:p.authInterrupts,MetadataOutlet:d});return[[t,n,h,a,!1]]}let O=null==E?void 0:E[1],j=new Set(i),$=new Set(s),I=new Set(o);O&&(rQ(O,j,$,!0),rZ(h,O,I));let D=[];for(let e of _){var N;let t=w[e];for(let n of(await nT({ctx:u,loaderTreeToFilter:t,parentParams:P,flightRouterState:r&&r[1][e],parentIsInsideSharedLayout:A,rscHead:a,injectedCSS:j,injectedJS:$,injectedFontPreloadTags:I,rootLayoutIncluded:k,preloadCallbacks:c,MetadataOutlet:d,hintTree:(null==f||null==(N=f.slots)?void 0:N[e])??null})))D.push([C,e,...n])}return D}let nA=(e,t)=>{var r;return!Array.isArray(e)&&!!Array.isArray(t)&&(null==(r=(0,t2.Hp)(e))?void 0:r.paramName)===t[0]};var nO=a("./dist/esm/shared/lib/router/utils/interception-routes.js");function nj(e){if(""===e)return null;let t=nO.VB.find(t=>e.startsWith(t)),r=(0,t2.Hp)(e);return r?{type:"dynamic",name:e,param:r,interceptionMarker:t}:e.startsWith("(")&&e.endsWith(")")?{type:"route-group",name:e,interceptionMarker:t}:e.startsWith("@")?{type:"parallel-route",name:e,interceptionMarker:t}:{type:"static",name:e,interceptionMarker:t}}function n$(e,t){let r,n,a,i=e.split("/").filter(Boolean),s=[];for(let o of i){let i=nj(function(e){if(!/%5b|%5d/i.test(e))return e;try{let t=decodeURIComponent(e);return(0,t2.Hp)(t)?t:e}catch{return e}}(o));if(i){if(t&&("route-group"===i.type||"parallel-route"===i.type))throw Object.defineProperty(new eB.z(`${e} is being parsed as a normalized route, but it has a route group or parallel route segment.`),"__NEXT_ERROR_CODE",{value:"E923",enumerable:!1,configurable:!0});if(s.push(i),i.interceptionMarker){let s=e.split(i.interceptionMarker);if(2!==s.length)throw Object.defineProperty(Error(`Invalid interception route: ${e}`),"__NEXT_ERROR_CODE",{value:"E924",enumerable:!1,configurable:!0});n=t?n$(s[0],!0):n$(s[0],!1),a=t?n$(s[1],!0):n$(s[1],!1),r=i.interceptionMarker}}}let o=s.filter(e=>"dynamic"===e.type);return{normalized:t,pathname:e,segments:s,dynamicSegments:o,interceptionMarker:r,interceptingRoute:n,interceptedRoute:a}}function nI(e){switch(e){case"catchall-intercepted-(..)(..)":case"dynamic-intercepted-(..)(..)":return"(..)(..)";case"catchall-intercepted-(.)":case"dynamic-intercepted-(.)":return"(.)";case"catchall-intercepted-(..)":case"dynamic-intercepted-(..)":return"(..)";case"catchall-intercepted-(...)":case"dynamic-intercepted-(...)":return"(...)";default:return null}}function nD(e,t,r,n,a){switch(t){case"catchall":case"optional-catchall":case"catchall-intercepted-(..)(..)":case"catchall-intercepted-(.)":case"catchall-intercepted-(..)":case"catchall-intercepted-(...)":let i=[];for(let e=r;e0)return i;if("optional-catchall"===t)return;throw Object.defineProperty(new eB.z(`Unexpected empty path segments match for a route "${n.pathname}" with param "${e}" of type "${t}"`),"__NEXT_ERROR_CODE",{value:"E931",enumerable:!1,configurable:!0});case"dynamic":case"dynamic-intercepted-(..)(..)":case"dynamic-intercepted-(.)":case"dynamic-intercepted-(..)":case"dynamic-intercepted-(...)":if(r0;){let{tree:e,depth:t}=i.pop(),{segment:r,parallelRoutes:o}=r3(e),l=nj(r);if(l?.type==="dynamic"&&!a.hasOwnProperty(l.param.paramName)&&!n?.has(l.param.paramName)){let{paramName:e,paramType:r}=l.param,n=nD(e,r,t,s,a);if(void 0!==n)a[e]=n;else if("optional-catchall"!==r)throw Object.defineProperty(new eB.z(`Could not resolve param value for segment: ${e}`),"__NEXT_ERROR_CODE",{value:"E932",enumerable:!1,configurable:!0})}let u=t;for(let e of(l&&"route-group"!==l.type&&"parallel-route"!==l.type&&u++,Object.values(o)))i.push({tree:e,depth:u})}return a}function nM(e,t,r,n,a){let i=function(e,t,r){let n=e[t];if(r?.has(t)){let[e]=r.get(t);n=e}else Array.isArray(n)?n=n.map(e=>encodeURIComponent(e)):"string"==typeof n&&(n=encodeURIComponent(n));return n}(e,t,n);if(!i||0===i.length){if("oc"===r)return{param:t,value:null,type:r,treeSegment:[t,"",r,a]};throw Object.defineProperty(new eB.z(`Missing value for segment key: "${t}" with dynamic param type: ${r}`),"__NEXT_ERROR_CODE",{value:"E864",enumerable:!1,configurable:!0})}let s=Array.isArray(i)?i.join("/"):i;return{param:t,value:i,treeSegment:[t,s,r,a],type:r}}let nL=/^([^[]*)\[((?:\[[^\]]*\])|[^\]]+)\](.*)$/;function nU(e){let t=e.startsWith("[")&&e.endsWith("]");t&&(e=e.slice(1,-1));let r=e.startsWith("...");return r&&(e=e.slice(3)),{key:e,repeat:r,optional:t}}async function nF(e,t){return Promise.all(Array.from(e).map(([e,r])=>r.then(async({entry:r,hasExplicitRevalidate:n,hasExplicitExpire:a,readRootParamNames:i})=>{if(t&&(0===r.revalidate||r.expire<300))return null;let[s,o]=r.value.tee();r.value=o;let l="";for await(let e of s)l+=function(e){let t=new Uint8Array(e),r=t.byteLength;if(r<65535)return String.fromCharCode.apply(null,t);let n="";for(let e=0;enull)))}async function nH(e,t){{if(0===e.fetch.size&&0===e.cache.size)return"null";let r={store:{fetch:Object.fromEntries(Array.from(e.fetch.entries())),cache:Object.fromEntries((await nF(e.cache.entries(),t)).filter(e=>null!==e)),encryptedBoundArgs:Object.fromEntries(Array.from(e.encryptedBoundArgs.entries()))}},{deflateSync:n}=a("node:zlib");return n(JSON.stringify(r)).toString("base64")}}function nB(e){return e?{cache:new Map(e.cache),fetch:new Map(e.fetch),encryptedBoundArgs:new Map(e.encryptedBoundArgs),decryptedBoundArgs:new Map(e.decryptedBoundArgs)}:{cache:new Map,fetch:new Map,encryptedBoundArgs:new Map,decryptedBoundArgs:new Map}}function nz(e,t){{let r;if("string"!=typeof e)return e;if("null"===e)return{cache:new Map,fetch:new Map,encryptedBoundArgs:new Map,decryptedBoundArgs:new Map};let{inflateSync:n}=a("node:zlib"),i=t?5*t:524288e3;try{r=JSON.parse(n(Buffer.from(e,"base64"),{maxOutputLength:i}).toString("utf-8"))}catch(e){if(e instanceof RangeError&&"ERR_BUFFER_TOO_LARGE"===e.code)throw Object.defineProperty(Error(`Decompressed resume data cache exceeded ${i} byte limit`),"__NEXT_ERROR_CODE",{value:"E976",enumerable:!1,configurable:!0});throw e}return{cache:function(e){let t=new Map;for(let[r,{entry:n,hasExplicitRevalidate:a,hasExplicitExpire:i,readRootParamNames:s}]of e)t.set(r,Promise.resolve({entry:{value:new ReadableStream({start(e){e.enqueue(function(e){let t=e.length,r=new Uint8Array(t);for(let n=0;n(r(function(){let e=document.getElementsByName(at)[0];if(e?.shadowRoot?.childNodes[0])return e.shadowRoot.childNodes[0];{let e=document.createElement(at);e.style.cssText="position:absolute";let t=document.createElement("div");return t.ariaLive="assertive",t.id="__next-route-announcer__",t.role="alert",t.style.cssText="position:absolute;border:0;height:1px;margin:-1px;padding:0;width:1px;clip:rect(0 0 0 0);overflow:hidden;white-space:nowrap;word-wrap:normal",e.attachShadow({mode:"open"}).appendChild(t),document.body.appendChild(e),t}}()),()=>{let e=document.getElementsByTagName(at)[0];e?.isConnected&&document.body.removeChild(e)}),[]);let[n,a]=(0,O.useState)(""),i=(0,O.useRef)(void 0);return(0,O.useEffect)(()=>{let e="";if(document.title)e=document.title;else{let t=document.querySelector("h1");t&&(e=t.innerText||t.textContent||"")}void 0!==i.current&&i.current!==e&&a(e),i.current=e},[e]),t?(0,rG.createPortal)(n,t):null}tA.s8,tA.s8,a("./dist/esm/client/components/unstable-rethrow.server.js").X,a("./dist/esm/server/app-render/dynamic-rendering.js").Ip,a("./dist/esm/server/app-render/dynamic-rendering.js").FD;let{instrumentParamsForClientValidation:an,instrumentSearchParamsForClientValidation:aa,expectCompleteParamsInClientValidation:ai}=process.env.__NEXT_CACHE_COMPONENTS?a("./dist/esm/server/app-render/instant-validation/instant-samples-client.js"):{};function as(){let e=(0,O.useContext)(nJ);if(null===e)throw Object.defineProperty(Error("invariant expected app router to be mounted"),"__NEXT_ERROR_CODE",{value:"E238",enumerable:!1,configurable:!0});return e}function ao({redirect:e,reset:t,redirectType:r}){let n=as();return(0,O.useEffect)(()=>{O.startTransition(()=>{"push"===r?n.push(e,{}):n.replace(e,{}),t()})},[e,r,t,n]),null}class al extends O.Component{constructor(e){super(e),this.state={redirect:null,redirectType:null}}static getDerivedStateFromError(e){if((0,tO.n)(e)){let t=tj(e),r=t$(e);return"handled"in e?{redirect:null,redirectType:null}:{redirect:t,redirectType:r}}throw e}render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&null!==t?(0,T.jsx)(ao,{redirect:e,redirectType:t,reset:()=>this.setState({redirect:null})}):this.props.children}}function au({children:e}){let t=as();return(0,T.jsx)(al,{router:t,children:e})}function ac(e,t=!1){return Array.isArray(e)?`${e[0]}|${e[1]}|${e[2]}`:t&&e.startsWith(re.OG)?re.OG:e}let ad={then:()=>{}},af=process.env.__NEXT_ROUTER_BASEPATH||"",ah=process.env.__NEXT_ROUTER_BASEPATH||"",ap=e=>"/"===e[0]?e.slice(1):e,am=e=>"string"==typeof e?"children"===e?"":e:e[1];function ag(e){return e.reduce((e,t)=>""===(t=ap(t))||(0,re.V)(t)?e:`${e}/${t}`,"")||"/"}function ay(e){let t=Array.isArray(e[0])?e[0][1]:e[0];if(t===re.WO||nO.VB.some(e=>t.startsWith(e)))return;if(t.startsWith(re.OG))return"";let r=[am(t)],n=e[1]??{},a=n.children?ay(n.children):void 0;if(void 0!==a)r.push(a);else for(let[e,t]of Object.entries(n)){if("children"===e)continue;let n=ay(t);void 0!==n&&r.push(n)}return ag(r)}var av=a("./dist/compiled/react-server-dom-turbopack/client.node.js");async function ab(e,t){return new Promise((r,n)=>{(0,O.startTransition)(()=>{(0,n7.Dd)({type:n0.s8,actionId:e,actionArgs:t,resolve:r,reject:n})})})}process.env.__NEXT_ROUTER_BASEPATH;function aw(e){let[t,r,n,a]=e.slice(-4),i=e.slice(0,-4);return{pathToSegment:i.slice(0,-1),segmentPath:i,segment:i[i.length-1]??"",tree:t,seedData:r,head:n,isHeadPartial:a,isRootRender:4===e.length}}function aS(e){return"string"==typeof e?e:e.map(e=>aw(e))}function a_(e,t){return t?encodeURIComponent(JSON.stringify(e)):encodeURIComponent(JSON.stringify(function e(t){let[r,n,a,i,s]=t,o=function(e){if("string"==typeof e)return e.startsWith(re.OG+"?")?re.OG:e;let[t,r,n]=e;return[t,r,n,null]}(r),l={};for(let[t,r]of Object.entries(n))l[t]=e(r);let u=[o,l];return i&&(u[2]=null,u[3]=i),void 0!==s&&(u[4]=s),u}(e)))}let aE="/_head";function aR(e){if("string"==typeof e)return e.startsWith(re.OG)?re.OG:"/_not-found"===e?"_not-found":aP(e);let t=e[0];return"$"+e[2]+"$"+aP(t)}function ak(e,t,r){return e+"/"+("children"===t?r:`@${aP(t)}/${r}`)}let ax=/^[a-zA-Z0-9\-_@]+$/;function aP(e){return ax.test(e)?e:"!"+btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function aC(e){let t=e.headers.get(z.Wc);return null!==t?""===t?"":"?"+t:aO(new URL(e.url)).search}function aT(e){try{return encodeURIComponent(decodeURIComponent(e))}catch{return e}}function aA(e){return!(""===e||e.startsWith(re.OG)||"("===e[0]&&e.endsWith(")"))&&e!==re.WO&&"/_not-found"!==e}function aO(e){let t=new URL(e);if(t.searchParams.delete(z._A),"export"===process.env.__NEXT_CONFIG_OUTPUT&&t.pathname.endsWith(".txt")){let{pathname:e}=t,r=e.endsWith("/index.txt")?10:4;t.pathname=e.slice(0,-r)}return t}e=process.env.NEXT_DEPLOYMENT_ID||void 0;function aj(e){return(e.then(a$),"fulfilled"!==e.status)?null:e.value}let a$=()=>{};function aI(e,t){let r=new URL(e);return{pathname:r.pathname,search:r.search,nextUrl:t}}var aD=((p={})[p.Intent=2]="Intent",p[p.Default=1]="Default",p[p.Background=0]="Background",p),aN=((m={})[m.LoadingBoundary=0]="LoadingBoundary",m[m.PPR=1]="PPR",m[m.PPRRuntime=2]="PPRRuntime",m[m.Full=3]="Full",m);let aM={},aL={};function aU(){return{parent:null,key:null,value:null,map:null,prev:null,next:null,size:0}}function aF(e,t,r,n,a){let i=function e(t,r,n,a,i,s){let o,l;if(null!==a)o=a.value,l=a.parent;else if(i&&s!==aL)o=aL,l=null;else return null===n.value?n:aH(t,r,n.value)?(aq(n),null):n;let u=n.map;if(null!==u){let n=u.get(o);if(void 0!==n){let a=e(t,r,n,l,i,o);if(null!==a)return a}let a=u.get(aM);if(void 0!==a)return e(t,r,a,l,i,o)}return null}(e,t,r,n,a,0);return null===i||null===i.value?null:(aG(i),i.value)}function aH(e,t,r){return r.staleAt<=e||r.versionPromise.resolve().then(e).catch(e=>setTimeout(()=>{throw e})),aQ=[],aZ=0,a0=0,a1=!1,a2=null;function a4(e,t,r,n,a,i){var s;let o={key:e,treeAtTimeOfPrefetch:t,routeCacheVersion:iV,segmentCacheVersion:0,priority:n,phase:1,hasBackgroundWork:!1,spawnedRuntimePrefetches:null,fetchStrategy:r,sortId:a0++,isCanceled:!1,onInvalidate:a,_heapIndex:-1};return process.env.__NEXT_EXPOSE_TESTING_API&&(o._onComplete=i),(s=o).priority===aD.Intent&&s!==a2&&(null!==a2&&a2.priority!==aD.Background&&(a2.priority=aD.Default,ih(aQ,a2)),a2=s),iu(aQ,o),a6(),o}function a3(e,t,r){return e.routeCacheVersion!==iV||0!==e.segmentCacheVersion||e.treeAtTimeOfPrefetch!==r||e.key.nextUrl!==t}function a6(){a1||(a1=!0,aY(a7))}function a8(e){return e.priority===aD.Intent?aZ<12:aZ<4}function a9(e){return aZ++,e.then(e=>null===e?(a5(),null):(e.closed.then(a5),e.value))}function a5(){aZ--,a6()}function a7(){a1=!1;let e=Date.now(),t=ic(aQ);for(;null!==t&&a8(t);){t.routeCacheVersion=iV,t.segmentCacheVersion=0;let r=function(e,t){let r=t.key,n=iY(e,t,r),a=function(e,t,r){switch(r.status){case iF.Empty:a9(sa(r,t.key)),r.staleAt=e+6e4,r.status=iF.Pending;case iF.Pending:{let e=r.blockedTasks;return null===e?r.blockedTasks=new Set([t]):e.add(t),1}case iF.Rejected:break;case iF.Fulfilled:{let s;if(0!==t.phase)return 2;if(!a8(t))return 0;let o=r.tree;switch(s=o.prefetchHints&t7.SubtreeHasInstant?aN.PPR:t.fetchStrategy===aN.PPR?r.supportsPerSegmentPrefetching?aN.PPR:aN.LoadingBoundary:t.fetchStrategy){case aN.PPR:{var n,a,i;if(ia(n=e,a=t,i=r,iZ(n,aN.PPR,i.metadata),a.key,i.metadata),0===function e(t,r,n,a,i){let s=iZ(t,r.fetchStrategy,i);ia(t,r,n,s,r.key,i);let o=a[1],l=i.slots;if(null!==l)for(let a in l){if(!a8(r))return 0;let i=l[a],s=i.segment,u=o[a],c=u?.[0];if(0===(void 0!==c&&io(n,s,c)?e(t,r,n,u,i):function e(t,r,n,a){if(a.prefetchHints&t7.HasRuntimePrefetch)return null===r.spawnedRuntimePrefetches?r.spawnedRuntimePrefetches=new Set([a.requestKey]):r.spawnedRuntimePrefetches.add(a.requestKey),2;let i=iZ(t,r.fetchStrategy,a);if(ia(t,r,n,i,r.key,a),null!==a.slots){if(!a8(r))return 0;for(let i in a.slots)if(0===e(t,r,n,a.slots[i]))return 0}return 2}(t,r,n,i)))return 0}return 2}(e,t,r,t.treeAtTimeOfPrefetch,o))return 0;let s=t.spawnedRuntimePrefetches;if(null!==s){let n=new Map;it(e,t,r,n,aN.PPRRuntime);let a=function e(t,r,n,a,i,s){if(i.has(a.requestKey))return ir(t,r,n,a,!1,s,aN.PPRRuntime);let o={},l=a.slots;if(null!==l)for(let a in l){let u=l[a];o[a]=e(t,r,n,u,i,s)}return[a.segment,o,null,null]}(e,t,r,o,s,n);n.size>0&&a9(so(t,r,aN.PPRRuntime,a,n))}return 2}case aN.Full:case aN.PPRRuntime:case aN.LoadingBoundary:{let n=new Map;it(e,t,r,n,s);let a=function e(t,r,n,a,i,s,o){let l=a[1],u=i.slots,c={};if(null!==u)for(let a in u){let i=u[a],d=i.segment,f=l[a],h=f?.[0];if(void 0!==h&&io(n,d,h)){let l=e(t,r,n,f,i,s,o);c[a]=l}else switch(o){case aN.LoadingBoundary:{let e=(i.prefetchHints&(t7.SegmentHasLoadingBoundary|t7.SubtreeHasLoadingBoundary))!=0?function e(t,r,n,a,i,s){let o=null===i?"inside-shared-layout":null,l=iZ(t,r.fetchStrategy,a);switch(l.status){case iF.Empty:s.set(a.requestKey,i4(l,aN.LoadingBoundary)),"refetch"!==i&&(o=i="refetch");break;case iF.Fulfilled:if((a.prefetchHints&t7.SegmentHasLoadingBoundary)!=0)return sn(a);case iF.Pending:case iF.Rejected:}let u={};if(null!==a.slots)for(let o in a.slots){let l=a.slots[o];u[o]=e(t,r,n,l,i,s)}return[a.segment,u,null,o]}(t,r,n,i,null,s):sn(i);c[a]=e;break}case aN.PPRRuntime:{let e=ir(t,r,n,i,!1,s,o);c[a]=e;break}case aN.Full:{let e=ir(t,r,n,i,!1,s,o);c[a]=e}}}return[i.segment,c,null,null]}(e,t,r,t.treeAtTimeOfPrefetch,o,n,s);return n.size>0&&a9(so(t,r,s,a,n)),2}}}}return 2}(e,t,n);if(0!==a&&""!==r.search){let n=aI(new URL(r.pathname,location.origin).href,r.nextUrl),a=iY(e,t,n);switch(a.status){case iF.Empty:ie(t)&&(a.status=iF.Pending,a9(sa(a,n)));case iF.Pending:case iF.Fulfilled:case iF.Rejected:}}return a}(e,t),n=t.hasBackgroundWork;switch(t.hasBackgroundWork=!1,t.spawnedRuntimePrefetches=null,r){case 0:return;case 1:id(aQ),t=ic(aQ);continue;case 2:if(1===t.phase)t.phase=0,ih(aQ,t);else if(n)t.priority=aD.Background,ih(aQ,t);else{if(process.env.__NEXT_EXPOSE_TESTING_API){let e=t._onComplete;t._onComplete=void 0,e?.()}id(aQ)}t=ic(aQ);continue}}null===t&&0===aZ&&function(){if(!(aW<=0x3200000))for(;aW>0x2d00000&&null!==aV;){let e=aV.prev;null!==e&&aq(e)}}()}function ie(e){return e.priority===aD.Background||(e.hasBackgroundWork=!0,!1)}function it(e,t,r,n,a){ir(e,t,r,r.metadata,!1,n,a===aN.LoadingBoundary?aN.Full:a)}function ir(e,t,r,n,a,i,s){var o,l;let u=iZ(e,s,n),c=null;switch(u.status){case iF.Empty:if(s===aN.Full&&null!==function(e,t,r){r.varyPath;let n=null;if(null!==n){let r=n.navigatedAt+s4;return e>r?null:i5(i4(t,aN.Full),n.rsc,r,!1)}return null}(e,u,n))break;c=i4(u,s);break;case iF.Fulfilled:if(u.isPartial&&(o=u.fetchStrategy,on)return null;let a=i5(i4(i2(e),aN.Full),r.rsc,n,!1),i=i1(e,i_(aN.Full,t),a);if(null!==i&&2===i.status)return i}return null}(e,n))break;c=is(e,n,s)}break;case iF.Pending:case iF.Rejected:l=u.fetchStrategy,l0&&a9(ss(r,a,r.tree,i));break}a9(si(r,i4(n,aN.PPR),a,i));break;case iF.Pending:switch(n.fetchStrategy){case aN.PPR:case aN.PPRRuntime:case aN.Full:break;case aN.LoadingBoundary:ie(t)&&ii(e,r,a,i);break;default:n.fetchStrategy}break;case iF.Rejected:switch(n.fetchStrategy){case aN.PPR:case aN.PPRRuntime:case aN.Full:break;case aN.LoadingBoundary:ii(e,r,a,i);break;default:n.fetchStrategy}case iF.Fulfilled:}}function ii(e,t,r,n){let a=i0(e,aN.PPR,n);switch(a.status){case iF.Empty:a9(si(t,i4(a,aN.PPR),r,n));case iF.Pending:case iF.Fulfilled:case iF.Rejected:}}function is(e,t,r){var n,a;let i=i0(e,r,t);if(i.status===iF.Empty)return i4(i,r);if(n=i.fetchStrategy,n>>1],t)>0?ip(e,t,r):im(e,t,r))}function ip(e,t,r){let n=r;for(;n>0;){let r=n-1>>>1,a=e[r];if(!(il(a,t)>0))return;e[r]=t,t._heapIndex=r,e[n]=a,a._heapIndex=n,n=r}}function im(e,t,r){let n=r,a=e.length,i=a>>>1;for(;nil(i,t))sil(o,i)?(e[n]=o,o._heapIndex=n,e[s]=t,t._heapIndex=s,n=s):(e[n]=i,i._heapIndex=n,e[r]=t,t._heapIndex=r,n=r);else{if(!(sil(o,t)))return;e[n]=o,o._heapIndex=n,e[s]=t,t._heapIndex=s,n=s}}}function ig(e,t,r){return{id:null,value:e,parent:{id:"?",value:t,parent:{id:null,value:r,parent:null}}}}function iy(e,t,r,n){return{id:null,value:e,parent:{id:"?",value:t,parent:{id:null,value:n?r:aM,parent:null}}}}function iv(e,t,r){return{id:r,value:t,parent:e}}function ib(e,t){return{id:null,value:e,parent:t}}function iw(e,t,r){return{id:null,value:e,parent:{id:"?",value:t,parent:r}}}function iS(e,t,r){return{id:null,value:e+aE,parent:{id:"?",value:t,parent:r}}}function i_(e,t){let r=t.varyPath;if(t.isPage&&e!==aN.Full&&e!==aN.PPRRuntime){let e=r.parent.parent;return{id:null,value:r.value,parent:{id:"?",value:aM,parent:e}}}return r}function iE(e){let t=e.parent.value;return"string"==typeof t?t:null}function iR(e,t){return{id:e.id,value:null===e.id||t.has(e.id)?e.value:aM,parent:null===e.parent?null:iR(e.parent,t)}}let ik=null,ix={pending:!0},iP={pending:!1},iC="function"==typeof WeakMap?new WeakMap:new Map,iT=new Set;function iA(e,t){for(let r of iT){let n=r.prefetchTask;if(null!==n&&!a3(n,e,t))continue;null!==n&&function(e){if(e.isCanceled=!0,function(e,t){let r=t._heapIndex;if(-1!==r&&(t._heapIndex=-1,0!==e.length)){let n=e.pop();n!==t&&(e[r]=n,n._heapIndex=r,im(e,n,r))}}(aQ,e),process.env.__NEXT_EXPOSE_TESTING_API){let t=e._onComplete;e._onComplete=void 0,t?.()}}(n);let a=aI(r.prefetchHref,e);r.prefetchTask=a4(a,t,r.fetchStrategy,aD.Default,null)}}"function"==typeof IntersectionObserver&&new IntersectionObserver(function(e){for(let t of e){let e=t.intersectionRatio>0;!function(e,t){let r=iC.get(e);void 0!==r&&(r.isVisible=t,t?iT.add(r):iT.delete(r),aD.Default)}(t.target,e)}},{rootMargin:"200px"});var iO=a("./dist/esm/shared/lib/promise-with-resolvers.js");function ij(e,t){return -1!==t?e+1e3*t:e+s2}function i$(e,t,r,n,a,i,s){}function iI(e,t,r,n,a){}aU();function iD(){return{staticChildren:null,dynamicChild:null,dynamicChildParamName:null,dynamicChildParamType:null,pattern:null}}let iN=iD();function iM(e,t,r,n,a,i,s,o,l,u){let c=t.split("/").filter(e=>""!==e),d=c.length>0?c[0]:null,f=c.length>0?c.slice(1):[];if(null!==n){let c=i8(e,n,a,i,s,o,l);return u&&(c.hasDynamicRewrite=!0),iL(iN,a,d,f,c,e,t,r,a,i,s,o,l,u),c}return iL(iN,a,d,f,null,e,t,r,a,i,s,o,l,u)}function iL(e,t,r,n,a,i,s,o,l,u,c,d,f,h){let p,m,g=t.segment,y=null,v=null,b=null;"string"==typeof g?p=aA(g):(y=g[0],v=g[2],b=g[3],p=!0);let w=e,S=r,_=n;if(p){if(null===y&&r!==g)return null!==a?a:i9(i,s,o,l,u,c,d,f);if(null!==y&&null!==v){if(w=function(e,t,r){if(null!==e.dynamicChild)return e.dynamicChild;let n=iD();return e.dynamicChild=n,e.dynamicChildParamName=t,e.dynamicChildParamType=r,n}(e,y,v),null!==b)for(let t of(null===e.staticChildren&&(e.staticChildren=new Map),b))e.staticChildren.has(t)||e.staticChildren.set(t,iD())}else{null===e.staticChildren&&(e.staticChildren=new Map);let t=e.staticChildren.get(r);void 0===t&&(t=iD(),e.staticChildren.set(r,t)),w=t}S=n.length>0?n[0]:null,_=n.length>0?n.slice(1):[]}let E=t.slots,R=null;if(null!==E){for(let e in E){let t=E[e];null===t.refreshState&&(R=iL(w,t,S,_,a,i,s,o,l,u,c,d,f,h))}return null!==R?R:null!==a?a:i9(i,s,o,l,u,c,d,f)}return null!==w.pattern?(h&&(w.pattern.hasDynamicRewrite=!0),w.pattern):(m=null!==a?a:i9(i,s,o,l,u,c,d,f),h&&(m.hasDynamicRewrite=!0),w.pattern=m,m)}function iU(e){return 1e3*Math.max(e,30)}var iF=((g={})[g.Empty=0]="Empty",g[g.Pending=1]="Pending",g[g.Fulfilled=2]="Fulfilled",g[g.Rejected=3]="Rejected",g);let iH="export"===process.env.__NEXT_CONFIG_OUTPUT,iB=["",{},null,"metadata-only"],iz=aU(),iq=aU(),iX=null,iV=0;function iW(e,t){let r=ig(t.pathname,t.search,t.nextUrl),n=aF(e,iV,iz,r,!1);return null!==n?n:process.env.__NEXT_OPTIMISTIC_ROUTING?function(e,t){let r=e.split("/").filter(e=>""!==e),n=new Map,a=function e(t,r,n,a){let i=n=400)return i7(e,Date.now()+1e4),null;l=r.redirected?new URL(r.url):u,t=await sd(sh(l,i),s)}else t=await sd(u,s),l=null!==t&&t.redirected?new URL(t.url):u;if(!t||!t.ok||204===t.status||!t.body)return i7(e,Date.now()+1e4),null;let c=n1(l),d=t.headers.get("vary"),f=null!==d&&d.includes(z.kO),h=(0,iO.b)(),p="2"===t.headers.get(z.jc)||iH;if(p){var o;let n,{stream:i,size:l}=await sf(t.body);h.resolve(),aX(e,l);let u=await sC(i,s,{allowPartialStream:!0});if((t.headers.get(ey.eQ)??u.buildId)!=="")return i7(e,Date.now()+1e4),null;let d=(o=t).headers.get(z.j9)??aO(new URL(o.url)).pathname,m=aC(t),g={metadataVaryPath:null},y=(n=d.split("/").filter(e=>""!==e),function e(t,r,n,a,i,s,o,l){let u,c,d=null,f=t.slots;if(null!==f)for(let t in u=!1,c=ib(a,n),d={},f){let r,u,c,h=f[t],p=h.name,m=h.param;if(null!==m){let e=function(e,t,r){switch(e){case"c":return raT(e)):[];case"ci(..)(..)":case"ci(.)":case"ci(..)":case"ci(...)":{let n=e.length-2;return r0===t?aT(e.slice(n)):aT(e)):[]}case"oc":return raT(e)):null;case"d":if(r>=t.length)return"";return aT(t[r]);case"di(..)(..)":case"di(.)":case"di(..)":case"di(...)":{let n=e.length-2;if(r>=t.length)return"";return aT(t[r].slice(n))}default:return""}}(m.type,i,s),t=null!==m.key?m.key:"string"==typeof e?(0,re.HG)(e,Object.fromEntries(new URLSearchParams(""))):null===e?"":e.join("/");c=iv(n,t,p),u=[p,t,m.type,m.siblings],r=!0}else c=n,u=p,r=aA(p);let g=r?s+1:s,y=ak(a,t,aR(u));d[t]=e(h,u,c,y,i,g,o,l)}else a.endsWith(re.OG)?(u=!0,c=iw(a,o,n),null===l.metadataVaryPath&&(l.metadataVaryPath=iS(a,o,n))):(u=!1,c=ib(a,n));return{requestKey:a,segment:r,refreshState:null,varyPath:c,isPage:u,slots:d,prefetchHints:t.prefetchHints}}(u.tree,"",null,"",n,0,m,g)),v=g.metadataVaryPath;if(null===v)return i7(e,Date.now()+1e4),null;iM(Date.now(),r,a,e,y,v,f,c,p,!1)}else{let{stream:n,size:i}=await sf(t.body);h.resolve(),aX(e,i);let o=await sC(n,s,{allowPartialStream:!0});if((t.headers.get(ey.eQ)??o.b)!=="")return i7(e,Date.now()+1e4),null;let l=o.h,u=null!==l?aj(l):null;!function(e,t,r,n,a,i,s,o,l,u,c){let d=aC(r),f=aS(n.f);if("string"==typeof f||1!==f.length)return i7(a,e+1e4);let h=f[0];if(!h.isRootRender)return i7(a,e+1e4);let p=h.tree,m="1"===r.headers.get(z.jc),g={metadataVaryPath:null},y=st(p,d,g),v=g.metadataVaryPath;if(null===v)return i7(a,e+1e4);iM(e,u,c,a,y,v,i,s,o,!1);let b=s0(e,p,f,d,-1);su(e,t,f,r.headers.get(ey.eQ)??n.b,m,l,sm(e,r),b,null)}(Date.now(),aN.LoadingBoundary,t,o,e,f,c,p,u,r,a)}if(!f){let t=iy(r,n,a,f);aB(iz,t,e,!1)}return{value:null,closed:h.promise}}catch(t){return i7(e,Date.now()+1e4),null}}async function si(e,t,r,n){let a=new URL(e.canonicalUrl,location.origin),i=r.nextUrl,s=n.requestKey,o=""===s?"/_index":s,l={[z.hY]:"1",[z._V]:"1",[z.qm]:o};null!==i&&(l[z.kO]=i),sp(l);let u=iH?sh(a,o):a;try{let e=await sd(u,l);if(!e||!e.ok||204===e.status||"2"!==e.headers.get(z.jc)&&!iH||!e.body)return se(t,Date.now()+1e4),null;let r=(0,iO.b)(),{stream:a,size:i}=await sf(e.body);r.resolve(),aX(t,i);let s=await sC(a,l,{allowPartialStream:!0});if((e.headers.get(ey.eQ)??s.buildId)!=="")return se(t,Date.now()+1e4),null;let o=Date.now(),c=o+iU(s.staleTime),d=i5(t,s.rsc,c,s.isPartial),f=s.varyParams,h=process.env.__NEXT_VARY_PARAMS&&null!==f?iR(n.varyPath,f):i_(t.fetchStrategy,n);return i1(o,h,d),{value:d,closed:r.promise}}catch(e){return se(t,Date.now()+1e4),null}}async function ss(e,t,r,n){let a=new URL(e.canonicalUrl,location.origin),i=t.nextUrl,s={[z.hY]:"1",[z._V]:"1",[z.qm]:"/"+re.OG};null!==i&&(s[z.kO]=i),sp(s);try{let t=await sd(a,s);if(!t||!t.ok||204===t.status||"2"!==t.headers.get(z.jc)&&!iH||!t.body)return sl(n,Date.now()+1e4),null;let i=(0,iO.b)(),{stream:o}=await sf(t.body);i.resolve();let l=await sC(o,s,{allowPartialStream:!0});if((t.headers.get(ey.eQ)??l.tree.segment.buildId)!=="")return sl(n,Date.now()+1e4),null;let u=Date.now();!function e(t,r,n,a,i){let s=a.segment,o=t+iU(s.staleTime),l=i.get(n.requestKey);if(void 0!==l)i5(l,s.rsc,o,s.isPartial);else{let e=iZ(t,aN.PPR,n);0===e.status&&i5(i4(e,aN.PPR),s.rsc,o,s.isPartial)}if(null!==n.slots&&null!==a.slots)for(let s in n.slots){let o=n.slots[s],l=a.slots[s];void 0!==l&&e(t,r,o,l,i)}}(u,e,r,l.tree,n);let c=u+iU(l.head.staleTime),d=e.metadata.requestKey,f=n.get(d);if(void 0!==f)i5(f,l.head.rsc,c,l.head.isPartial);else{let t=iZ(u,aN.PPR,e.metadata);0===t.status&&i5(i4(t,aN.PPR),l.head.rsc,c,l.head.isPartial)}return sl(n,Date.now()+1e4),{value:null,closed:i.promise}}catch(e){return sl(n,Date.now()+1e4),null}}async function so(e,t,r,n,a){let i=e.key,s=new URL(t.canonicalUrl,location.origin),o=i.nextUrl;1===a.size&&a.has(t.metadata.requestKey)&&(n=iB);let l={[z.hY]:"1",[z.B]:a_(n)};switch(null!==o&&(l[z.kO]=o),r){case aN.Full:break;case aN.PPRRuntime:l[z._V]="2";break;case aN.LoadingBoundary:l[z._V]="1"}try{let e,i=await sd(s,l);if(!i||!i.ok||!i.body)return sl(a,Date.now()+1e4),null;let o=aC(i);if(o!==t.renderedSearch)return sl(a,Date.now()+1e4),null;let f=(0,iO.b)(),h=null,p=null;if(r===aN.Full){var u,c,d;let t,r;u=i.body,c=f.resolve,d=function(e){if(null===h)return;let t=e/h.length;for(let e of h)aX(e,t)},t=0,r=u.getReader(),e=new ReadableStream({async pull(e){for(;;){let{done:n,value:a}=await r.read();if(!n){e.enqueue(a),d(t+=a.byteLength);continue}e.close(),c();return}}})}else{let{stream:t,size:r}=await sf(i.body);f.resolve(),e=t,p=r}let[m,g]=await Promise.all([sC(e,l,{allowPartialStream:!0}),i.cacheData]),y=m.h,v=null!==y?aj(y):null,b=Date.now(),w=await sg(b,m.s,i),S=r===aN.PPRRuntime&&(g?.isResponsePartial??!1),_=i.headers.get(ey.eQ)??m.b,E=aS(m.f);if("string"==typeof E)return sl(a,Date.now()+1e4),null;let R=s0(b,n,E,o,-1);if(h=su(b,r,E,_,S,v,w,R,a),null!==p&&null!==h&&h.length>0){let e=p/h.length;for(let t of h)aX(t,e)}return{value:null,closed:f.promise}}catch(e){return sl(a,Date.now()+1e4),null}}function sl(e,t){let r=[];for(let n of e.values())1===n.status?se(n,t):2===n.status&&r.push(n);return r}function su(e,t,r,n,a,i,s,o,l){if(n&&""!==n)return null!==l&&sl(l,e+1e4),null;let u=o.routeTree,c=null!==o.metadataVaryPath?i6(o.metadataVaryPath):null;for(let n of r){let r=n.seedData;if(null!==r){let i=n.segmentPath,o=u;for(let t=0;t1){t=new Uint8Array(a);let e=0;for(let r of n)t.set(r,e),e+=r.byteLength}else t=new Uint8Array(0);return{stream:new ReadableStream({start(e){e.enqueue(t),e.close()}}),size:a}}function sh(e,t){if(iH){let r=new URL(e),n=r.pathname.endsWith("/")?r.pathname.slice(0,-1):r.pathname,a=`__next${t.replace(/\//g,".")}.txt`;return r.pathname=`${n}/${a}`,r}return e}function sp(e){if(process.env.__NEXT_EXPOSE_TESTING_API){let{isNavigationLocked:t}=a("./dist/esm/client/components/segment-cache/navigation-testing-lock.js");t()&&(e[z.Yf]="1")}}function sm(e,t){let r=parseInt(t.headers.get(z.UK)??"",10);return e+(isNaN(r)?s4:iU(r))}async function sg(e,t,r){if(void 0!==t){let r;for await(let e of t)r=e;if(void 0!==r)return e+(isNaN(r)?s4:iU(r))}return void 0!==r?sm(e,r):e+s4}function sy(e,t,r,n,a,i,s,o){let l=o?aN.PPR:aN.Full,u=null!==n?aj(n):null,c=aS(t);if("string"==typeof c)return;let d=s0(e,i,c,s,-1);su(e,l,c,r,o,u,a,d,null)}async function sv(e,t,r,n){let{stream:a,isPartial:i}=await sb(t),s=await sC(a,void 0,{allowPartialStream:!0}),o=s.h,l=null!==o?aj(o):null,u=await sg(e,s.s),c=aS(s.f);if("string"==typeof c)return null;let d=s0(e,r,c,n,-1);return{flightDatas:c,navigationSeed:d,buildId:s.b,isResponsePartial:i,headVaryParams:l,staleAt:u}}async function sb(e){let t=!!process.env.__NEXT_EXPERIMENTAL_CACHED_NAVIGATIONS,r=e.getReader(),{done:n,value:a}=await r.read();if(n||!a||0===a.byteLength)return{stream:new ReadableStream({start:e=>e.close()}),isPartial:t};let i=a[0],s=35===i||126===i,o=s?a.byteLength>1?a.subarray(1):null:a;return{isPartial:s?126===i:t,stream:new ReadableStream({start(e){o&&e.enqueue(o)},async pull(e){let t=await r.read();t.done?e.close():e.enqueue(t.value)}})}}let sw=av.createFromReadableStream,sS=av.createFromFetch;function s_(e){return aO(new URL(e,location.origin)).toString()}async function sE(e,t){let{flightRouterState:r,nextUrl:n}=t,a={[z.hY]:"1",[z.B]:a_(r,t.isHmrRefresh)};n&&(a[z.kO]=n);let i=e;try{"export"===process.env.__NEXT_CONFIG_OUTPUT&&((e=new URL(e)).pathname.endsWith("/")?e.pathname+="index.txt":e.pathname+=".txt");let t=process.env.__NEXT_PPR&&!process.env.__NEXT_CACHE_COMPONENTS,r=await sP(e,a,"auto",!t),n=aO(new URL(r.url)),s=r.redirected?n:i,o=r.headers.get("content-type")||"",l=!!r.headers.get("vary")?.includes(z.kO),u=!!r.headers.get(z.jc),c=o.startsWith(z.al);if("export"!==process.env.__NEXT_CONFIG_OUTPUT||c||(c=o.startsWith("text/plain")),!c||!r.ok||!r.body)return e.hash&&(n.hash=e.hash),s_(n.toString());let d=r.flightResponsePromise;null===d&&(d=sC(r.body,a,{allowPartialStream:u}));let[f,h]=await Promise.all([d,r.cacheData]);if((r.headers.get(ey.eQ)??f.b)!=="")return s_(r.url);let p=aS(f.f);if("string"==typeof p)return s_(p);let m=null!==h?await sk(h,f,a):null;return{flightData:p,canonicalUrl:s,renderedSearch:f.q,couldBeIntercepted:l,supportsPerSegmentPrefetching:f.S,postponed:u,dynamicStaleTime:f.d??-1,staticStageData:m,runtimePrefetchStream:f.p??null,responseHeaders:r.headers,debugInfo:d._debugInfo??null}}catch(e){return console.error(`Failed to fetch RSC payload for ${i}. Falling back to browser navigation.`,e),i.toString()}}async function sR(e){if(process.env.__NEXT_CACHE_COMPONENTS){let t,r;if(!e.body)throw Object.defineProperty(new eB.z("Expected RSC navigation response to have a body"),"__NEXT_ERROR_CODE",{value:"E1088",enumerable:!1,configurable:!0});let{stream:n,isPartial:a}=await sb(e.body);if(process.env.__NEXT_EXPERIMENTAL_CACHED_NAVIGATIONS){let[e,i]=n.tee();t=e,r={isResponsePartial:a,responseBodyClone:i}}else t=n,r={isResponsePartial:a};let i=new Response(t,{headers:e.headers,status:e.status,statusText:e.statusText});return Object.defineProperty(i,"url",{value:e.url}),Object.defineProperty(i,"redirected",{value:e.redirected}),{response:i,cacheData:r}}return{response:e,cacheData:null}}async function sk(e,t,r){let{isResponsePartial:n,responseBodyClone:a}=e;if(a){if(!n)return a.cancel(),{response:t,isResponsePartial:!1};if(void 0!==t.l)return{response:await sx(a,t.l,r),isResponsePartial:!0};a.cancel()}return null}async function sx(e,t,r){var n,a;let i,s;return sC((n=e,a=await t,i=n.getReader(),s=a,new ReadableStream({async pull(e){if(s<=0){i.cancel(),e.close();return}let{done:t,value:r}=await i.read();t?e.close():r.byteLength<=s?(e.enqueue(r),s-=r.byteLength):(e.enqueue(r.subarray(0,s)),s=0,i.cancel(),e.close())},cancel(){i.cancel()}})),r,{allowPartialStream:!0})}async function sP(t,r,n,a,i){process.env.__NEXT_TEST_MODE&&null!==n&&(r["Next-Test-Fetch-Priority"]=n),e&&(r["x-deployment-id"]=e);let s={credentials:"same-origin",headers:r,priority:n||void 0,signal:i},o=new URL(t);await rC(o,r);let l=fetch(o,s).then(sR),u=l.then(({response:e})=>e),c=a?sT(u,r):null,d=await u,f=d.redirected;if(process.env.__NEXT_CLIENT_VALIDATE_RSC_REQUEST_HEADERS)for(let e=0;e<20&&d.redirected;e++){let e=new URL(d.url,o);if(e.origin!==o.origin||e.searchParams.get(z._A)===o.searchParams.get(z._A))break;o=new URL(e),await rC(o,r),u=(l=fetch(o,s).then(sR)).then(({response:e})=>e),c=a?sT(u,r):null,d=await u,f=!0}let h=new URL(d.url,o);return h.searchParams.delete(z._A),{url:h.href,redirected:f,ok:d.ok,headers:d.headers,body:d.body,status:d.status,flightResponsePromise:c,cacheData:l.then(({cacheData:e})=>e)}}function sC(e,r,n){return sw(e,{callServer:ab,findSourceMapURL:s,debugChannel:t&&t(r),unstable_allowPartialStream:n?.allowPartialStream})}function sT(e,r){return sS(e,{callServer:ab,findSourceMapURL:s,debugChannel:t&&t(r)})}var sA=((y={})[y.Default=0]="Default",y[y.Hydration=1]="Hydration",y[y.HistoryTraversal=2]="HistoryTraversal",y[y.RefreshAll=3]="RefreshAll",y[y.HMRRefresh=4]="HMRRefresh",y[y.Gesture=5]="Gesture",y);let sO=()=>{};function sj(e,t,r,n,a,i,s,o,l){let u=s$(t),c=t.slots,d=null!==a?a[1]:null,f=sN(e,t,null!==a?a[0]:null,r,i,n,s),h=f.cacheNode,p=f.needsDynamicRequest;null===c&&function(e,t,r){switch(e){case 0:case 5:case 3:case 4:null===r.scrollRef&&(r.scrollRef={current:!0}),t.scrollRef=r.scrollRef}}(n,h,l);let m={},g=null,y=!1,v={},b=null;if(null!==c)for(let t in h.slots=b={},g=new Map,c){let a=sj(e,c[t],r,n,(null!==d?d[t]:null)??null,i,s,o||p,l);g.set(t,a),b[t]=a.node;let u=a.route;m[t]=u;let f=a.dynamicRequestTree;null!==f?(y=!0,v[t]=f):v[t]=u}let w=[u,m,null,null,t.prefetchHints];return{status:+!p,route:w,node:h,dynamicRequestTree:sD(w,v,p,y,o),refreshState:null,children:g}}function s$(e){if(e.isPage){let t=iE(e.varyPath);if(null===t)return re.OG;let r=JSON.stringify(Object.fromEntries(new URLSearchParams(t)));return"{}"!==r?re.OG+"?"+r:re.OG}return e.segment}function sI(e,t){let r=[e[0],t];return 2 in e&&(r[2]=e[2]),3 in e&&(r[3]=e[3]),4 in e&&(r[4]=e[4]),r}function sD(e,t,r,n,a){let i=null;return r?(i=sI(e,t),a||(i[3]="refetch")):i=n?sI(e,t):null,i}function sN(e,t,r,n,a,i,s){let o,l,u,c=t.isPage;switch(i){case 0:{let e=(t.varyPath,null);if(null!==e)return{cacheNode:sM(e.rsc,e.prefetchRsc,e.head,e.prefetchHead),needsDynamicRequest:!1};break}case 1:{let i=c?a:null;return i$(e,t.varyPath,r,null,i,null,s),c&&null!==n&&iI(e,n,i,null,s),{cacheNode:sM(r,null,i,null),needsDynamicRequest:!1}}case 2:let d=(t.varyPath,null);if(null!==d){let e=d.rsc,t=!sz(e)||"pending"!==e.status;return{cacheNode:sM(d.rsc,t?null:d.prefetchRsc,d.head,t?null:d.prefetchHead),needsDynamicRequest:!1}}}let f=null,h=!0,p=iG(e,t.varyPath);if(null!==p)switch(p.status){case iF.Fulfilled:f=p.rsc,h=p.isPartial;break;case iF.Pending:f=iJ(p).then(e=>null!==e?e.rsc:null),h=p.isPartial;case iF.Empty:case iF.Rejected:}null!==r?(h?(o=f,l=r):(o=null,l=f),u=!1):(h?(o=f,l=sq()):(o=null,l=f),u=h);let m=null,g=null,y=c;if(c){let t=null,r=!0;if(null!==n){let a=iG(e,n);if(null!==a)switch(a.status){case iF.Fulfilled:t=a.rsc,r=a.isPartial;break;case iF.Pending:t=iJ(a).then(e=>null!==e?e.rsc:null),r=a.isPartial;case iF.Empty:case iF.Rejected:}}process.env.__NEXT_OPTIMISTIC_ROUTING&&r&&(t=""),null!==a?(r?(m=t,g=a):(m=null,g=t),y=!1):(r?(m=t,g=sq()):(m=null,g=t),y=r)}return 5!==i&&(i$(e,t.varyPath,l,o,g,m,s),c&&null!==n&&iI(e,n,g,m,s)),{cacheNode:sM(l,o,g,m),needsDynamicRequest:u||y}}function sM(e,t,r,n,a=null){return{rsc:e,prefetchRsc:t,head:r,prefetchHead:n,slots:null,scrollRef:a}}let sL=!1;async function sU(e,t,r,n,a,i){var s,o;let l=await (s=r,o=n,new Promise(e=>{let t=t=>{0===t.exitStatus?0==--n&&e(0):e(t.exitStatus)},r=()=>e(2),n=1;s.then(t,r),null!==o&&(n+=o.length,o.forEach(e=>e.then(t,r)))}));switch(0===l&&(l=function e(t,r,n){var a,i,s;let o,l,u;0===t.status?(t.status=2,a=t.node,i=r,s=n,sz(l=a.rsc)&&(null===i?l.resolve(null,s):l.reject(i,s)),sz(u=a.head)&&u.resolve(null,s),o=null===t.refreshState?1:2):o=0;let c=t.children;if(null!==c)for(let[,t]of c){let a=e(t,r,n);a>o&&(o=a)}return o}(e,null,null)),l){case 0:sL=!1;return;case 1:{let n=await r;sF(!1,n.url,t,n.seed,e.route,a,i);return}case 2:{let n=await r;sF(!0,n.url,t,n.seed,e.route,a,i);return}default:return l}}function sF(e,t,r,n,a,i,s){if(null!==i)i.hasDynamicRewrite=!0;else if(null!==n){let e=n.metadataVaryPath;null!==e&&iM(Date.now(),t.pathname,r,null,n.routeTree,e,!1,n1(t),!1,!0)}iV++,iA(r,a),function(e,t){if(null!==iX){let r=iX;for(let n of(iX=null,r))a3(n,e,t)&&function(e){let t=e.onInvalidate;if(null!==t){e.onInvalidate=null;try{t()}catch(e){"function"==typeof reportError?reportError(e):console.error(e)}}}(n)}}(r,a),e=e||sL,sL=!0;let o=ae,l=null!==o&&a!==o?s:"replace",u={type:n0.Aw,previousTree:a,url:t,nextUrl:r,seed:n,mpa:e,navigateType:l};(0,n7.Dd)(u)}async function sH(e,t,r,n,a,i){try{let s=await sE(r,{flightRouterState:t,nextUrl:n,isHmrRefresh:4===a});if("string"==typeof s)return{exitStatus:2,url:new URL(s,location.origin),seed:null};let o=Date.now(),l=s0(o,e.route,s.flightData,s.renderedSearch,s.dynamicStaleTime);if(process.env.__NEXT_EXPOSE_TESTING_API&&await sX(),null!==i&&null!==s.staticStageData){let{response:e,isResponsePartial:r}=s.staticStageData;sg(o,e.s).then(n=>{let a=s.responseHeaders.get(ey.eQ)??e.b;sy(o,e.f,a,e.h,n,t,s.renderedSearch,r)}).catch(()=>{})}null!==i&&null!==s.runtimePrefetchStream&&sv(o,s.runtimePrefetchStream,t,s.renderedSearch).then(e=>{null!==e&&su(o,aN.PPRRuntime,e.flightDatas,e.buildId,e.isResponsePartial,e.headVaryParams,e.staleAt,e.navigationSeed,null)}).catch(()=>{});let u=ij(o,s.dynamicStaleTime);return{exitStatus:+!!function e(t,r,n,a,i,s){0===t.status&&null!==n&&(t.status=1,function(e,t,r,n){let a=e.rsc,i=t[0];if(null===i)return;null===a?e.rsc=i:sz(a)&&a.resolve(i,n);let s=e.head;sz(s)&&s.resolve(r,n)}(t.node,n,a,s),r.varyPath);let o=t.children,l=r.slots,u=null!==n?n[1]:null,c=!1;if(null!==o)if(null!==l)for(let t in l){let r=l[t],n=null!==u?u[t]:null,d=o.get(t);if(void 0===d)c=!0;else{let t=d.route[0];rY(s$(r),t)&&null!=n&&e(d,r,n,a,i,s)&&(c=!0)}}else null!==l&&(c=!0);return c}(e,l.routeTree,l.data,l.head,u,s.debugInfo),url:new URL(s.canonicalUrl,location.origin),seed:l}}catch{return{exitStatus:2,url:r,seed:null}}}let sB=Symbol();function sz(e){return e&&"object"==typeof e&&e.tag===sB}function sq(){let e,t,r=[],n=new Promise((r,n)=>{e=r,t=n});return n.status="pending",n.resolve=(t,a)=>{"pending"===n.status&&(n.status="fulfilled",n.value=t,null!==a&&r.push.apply(r,a),e(t))},n.reject=(e,a)=>{"pending"===n.status&&(n.status="rejected",n.reason=e,null!==a&&r.push.apply(r,a),t(e))},n.tag=sB,n._debugInfo=r,n}async function sX(){if(process.env.__NEXT_EXPOSE_TESTING_API){let{waitForNavigationLockIfActive:e}=a("./dist/esm/client/components/segment-cache/navigation-testing-lock.js");await e()}}let sV=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;function sW(e){return sV.test(""+e)}function sG(e,t,r,n,a,i,s,o,l,u){let c=Date.now(),d=iW(c,aI(t.href,s));if(null!==d&&d.status===iF.Fulfilled)return sK(c,e,t,r,n,s,a,i,o,l,u,d);if(!process.env.__NEXT_OPTIMISTIC_ROUTING&&(null===d||d.status!==iF.Rejected)){let d=function(e,t,r){let n=t.search;if(""===n)return null;let a=new URL(t);a.search="";let i=iW(e,aI(a.href,r));if(null===i||2!==i.status)return null;let s=new URL(i.canonicalUrl,t.origin),o=""!==s.search?s.search:n,l=""!==i.renderedSearch?i.renderedSearch:n,u=new URL(i.canonicalUrl,location.origin);return u.search=o,{canonicalUrl:n1(u),status:2,blockedTasks:null,tree:iQ(i.tree,l),metadata:iQ(i.metadata,l),couldBeIntercepted:i.couldBeIntercepted,supportsPerSegmentPrefetching:i.supportsPerSegmentPrefetching,hasDynamicRewrite:i.hasDynamicRewrite,renderedSearch:l,ref:null,size:0,staleAt:i.staleAt,version:i.version}}(c,t,s);if(null!==d)return sK(c,e,t,r,n,s,a,i,o,l,u,d)}return sQ(c,e,t,r,n,s,a,i,o,l,u).catch(()=>e)}function sJ(e,t,r,n,a,i,s,o,l,u,c,d,f,h,p){var m,g,y,v,b;let w,S={separateRefreshUrls:null,scrollRef:null},_=r.href===i.href,E=(m=a.routeTree,g=a.metadataVaryPath,y=a.data,v=a.head,b=a.dynamicStaleAt,w={canonicalUrl:n1(i),renderedSearch:s},function e(t,r,n,a,i,s,o,l,u,c,d,f,h,p,m,g){var y,v,b;let w,S,_,E,R=a[0],k=s$(i);if(!rY(k,R))return!l&&function e(t,r){let n=t[0],a=r.segment;if(Array.isArray(n)&&Array.isArray(a)){if(n[0]!==a[0]||n[2]!==a[2])return!0}else if(n!==a)return!0;let i=((t[4]??0)&t7.IsRootLayout)!=0,s=(r.prefetchHints&t7.IsRootLayout)!=0;if(i)return!s;if(s)return!0;let o=r.slots,l=t[1];if(null!==o)for(let t in o){let r=o[t],n=l[t];if(void 0===n||e(n,r))return!0}return!1}(a,i)||k===re.Jn?null:sj(t,i,s,o,u,c,d,h,g);let x=i.slots,P=a[1],C=null!==u?u[1]:null,T=l||(i.prefetchHints&t7.IsRootLayout)!=0,A=!1;switch(o){case 0:case 2:case 1:case 5:A=!1;break;case 3:case 4:A=!0}let O=null===x;if(void 0===n||A||O&&f){let e=sN(t,i,null!==u?u[0]:null,s,c,o,d);_=e.cacheNode,E=e.needsDynamicRequest,void 0!==n&&(_.scrollRef=n.scrollRef)}else{y=!1,_=sM((v=n).rsc,y?null:v.prefetchRsc,v.head,y?null:v.prefetchHead,v.scrollRef),E=!1}let j=i.refreshState,$=null!=j?j:m;E&&null!==$&&(b=g,w=$.canonicalUrl,null===(S=b.separateRefreshUrls)?b.separateRefreshUrls=new Set([w]):S.add(w));let I={},D=null,N=!1,M={},L=null;if(null!==x){let a=void 0!==n?n.slots:null;for(let n in _.slots=L={},D=new Map,x){let l=x[n],u=P[n];if(void 0===u)return null;let m=null!==C?C[n]:null,y=u[0],v=s$(l),b=c;2!==o&&v===re.WO&&y!==re.WO&&(v=s$(l=function(e,t,r,n){let a,i,s=n[2];null!=s?(a=s[0],i=s[1]):(a=r.canonicalUrl,i=r.renderedSearch);let o=function(e,t,r,n,a){let i=e.isPage?e.varyPath.parent.parent:e.varyPath.parent,s=r[0];return sr(r,ak(e.requestKey,t,aR(s)),i,n,a)}(e,t,n,i,{metadataVaryPath:null});return o.refreshState={canonicalUrl:a,renderedSearch:i},o}(i,n,p,u)),m=null,b=null);let w=e(t,r,null!==a?a[n]:void 0,u,l,s,o,T,m??null,b,d,f,h||E,p,$,g);if(null===w)return null;D.set(n,w),L[n]=w.node;let S=w.route;I[n]=S;let _=w.dynamicRequestTree;null!==_?(N=!0,M[n]=_):M[n]=S}}let U=[s$(i),I,null!==$?[$.canonicalUrl,$.renderedSearch]:null,null,i.prefetchHints];return{status:+!E,route:U,node:_,dynamicRequestTree:sD(U,M,E,N,h),refreshState:$,children:D}}(e,i,null!==o?o:void 0,l,m,g,u,!1,y,v,b,_,!1,w,null,S));return null!==E?(u!==sA.Gesture&&function(e,t,r,n,a,i,s){let o=e.dynamicRequestTree;if(null===o){sL=!1;return}let l=sH(e,o,t,r,n,i),u=a.separateRefreshUrls,c=null;if(null!==u){c=[];let a=n1(t);for(let t of u)t!==a&&null!==o&&c.push(sH(e,o,new URL(t,location.origin),r,n,i))}sU(e,r,l,c,i,s).then(sO,sO)}(E,r,c,u,S,p,f),function(e,t,r,n,a,i,s,o,l,u,c){let d,f,h,p=(null==(h=function e(t,r){let[n,a]=t,[i,s]=r,o=am(n),l=am(i);if(nO.VB.some(e=>o.startsWith(e)||l.startsWith(e)))return"";if(!rY(n,i))return ay(r)??"";for(let t in a)if(s[t]){let r=e(a[t],s[t]);if(null!==r)return`${am(i)}/${r}`}return null}(e.tree,n))||"/"===h?h:ag(h.split("/")))||e.nextUrl,m=new URL(e.canonicalUrl,t),g=t.pathname===m.pathname&&t.search===m.search&&t.hash!==m.hash;if(l===n0.Kj.NoScroll)null!==u&&(u.current=!1),d=e.focusAndScrollRef.scrollRef,f=!1;else if(g){let t=e.focusAndScrollRef.scrollRef;null!==t&&(t.current=!1),null!==u&&(u.current=!1),d={current:!0},f=!0}else{if(d=u,null!==u){let t=e.focusAndScrollRef.scrollRef;null!==t&&(t.current=!1)}f=!1}return{canonicalUrl:s,renderedSearch:i,pushRef:{pendingPush:"push"===o,mpaNavigation:!1,preserveCustomHistoryState:!1},focusAndScrollRef:{scrollRef:d,forceScroll:f,onlyHashChange:g,hashFragment:l!==n0.Kj.NoScroll&&""!==t.hash?decodeURIComponent(t.hash.slice(1)):e.focusAndScrollRef.hashFragment},cache:a,tree:n,nextUrl:p,previousNextUrl:r,debugInfo:c}}(t,r,c,E.route,E.node,a.renderedSearch,n,f,d,S.scrollRef,h)):sZ(t,r,f)}function sK(e,t,r,n,a,i,s,o,l,u,c,d){let f=d.tree,h=d.canonicalUrl+r.hash,p={renderedSearch:d.renderedSearch,routeTree:f,metadataVaryPath:d.metadata.varyPath,data:null,head:null,dynamicStaleAt:ij(e,-1)};return sJ(e,t,r,h,p,n,a,s,o,l,i,u,c,null,d)}let sY=["",{},null,"refetch"];async function sQ(e,t,r,n,a,i,s,o,l,u,c){let d;switch(l){case sA.Default:case sA.HistoryTraversal:case sA.Gesture:d=o;break;case sA.Hydration:case sA.RefreshAll:case sA.HMRRefresh:d=sY;break;default:d=o}let f=sE(r,{flightRouterState:d,nextUrl:i}),h=await f;if("string"==typeof h)return sZ(t,new URL(h,location.origin),c);let{flightData:p,canonicalUrl:m,renderedSearch:g,couldBeIntercepted:y,supportsPerSegmentPrefetching:v,dynamicStaleTime:b,staticStageData:w,runtimePrefetchStream:S,responseHeaders:_,debugInfo:E}=h,R=s0(e,o,p,g,b),k=R.metadataVaryPath;if(null!==k){if(iM(e,r.pathname,i,null,R.routeTree,k,y,n1(m),v,!1),null!==w){let{response:t,isResponsePartial:r}=w;sg(e,t.s).then(n=>{let a=_.get(ey.eQ)??t.b;sy(e,t.f,a,t.h,n,o,g,r)}).catch(()=>{})}null!==S&&sv(e,S,o,g).then(t=>{null!==t&&su(e,aN.PPRRuntime,t.flightDatas,t.buildId,t.isResponsePartial,t.headVaryParams,t.staleAt,t.navigationSeed,null)}).catch(()=>{})}return sJ(e,t,r,n1(m),R,n,a,s,o,l,i,u,c,E,null)}function sZ(e,t,r){return sW(t.href)?(console.error("Next.js has blocked a javascript: URL as a security precaution."),e):{canonicalUrl:t.origin===location.origin?n1(t):t.href,pushRef:{pendingPush:"push"===r,mpaNavigation:!0,preserveCustomHistoryState:!1},renderedSearch:e.renderedSearch,focusAndScrollRef:e.focusAndScrollRef,cache:e.cache,tree:e.tree,nextUrl:e.nextUrl,previousNextUrl:e.previousNextUrl,debugInfo:null}}function s0(e,t,r,n,a){let i=t,s=null,o=null;if(null!==r)for(let{segmentPath:e,tree:t,seedData:a,head:l}of r){let r=function e(t,r,n,a,i,s,o){let l;if(o===i.length)return{tree:n,data:a};let u=i[o],c=t[1],d=null!==r?r[1]:null,f={},h={};for(let t in c){let r=c[t],l=null!==d?d[t]??null:null;if(t===u){let u=e(r,l,n,a,i,s,o+2);f[t]=u.tree,h[t]=u.data}else f[t]=r,h[t]=l}if(l=[t[0],f],2 in t){let e=t[2];null!=e&&(l[2]=[e[0],s])}return 3 in t&&(l[3]=t[3]),4 in t&&(l[4]=t[4]),{tree:l,data:[null,h,null,!0,null]}}(i,s,t,a,e,n,0);i=r.tree,s=r.data,o=l}let l={metadataVaryPath:null};return{routeTree:st(i,n,l),metadataVaryPath:l.metadataVaryPath,data:s,renderedSearch:n,head:o,dynamicStaleAt:ij(e,a)}}async function s1(e,t,r,n,i,s,o,l,u,c){let d=ik,f=null!==d?d.fetchStrategy:aN.PPR,{transitionToCapturedSPA:h,updateCapturedSPAToTree:p}=a("./dist/esm/client/components/segment-cache/navigation-testing-lock.js");h(s,null);let m=aI(t.href,o);await new Promise(e=>{a4(m,s,f,aD.Default,null,e)});let g=await sG(e,t,r,n,i,s,o,l,u,c);return p(s,g.tree),g}let s2=1e3*Number(process.env.__NEXT_CLIENT_ROUTER_DYNAMIC_STALETIME),s4=iU(Number(process.env.__NEXT_CLIENT_ROUTER_STATIC_STALETIME)),s3=process.env.__NEXT_ROUTER_BASEPATH||"";function s6(e,t){return(e=>{if(!e.startsWith("/")||process.env.__NEXT_MANUAL_TRAILING_SLASH)return e;let{pathname:t,query:r,hash:n}=eS(e);if(process.env.__NEXT_TRAILING_SLASH)if(/\.[^/]+\/?$/.test(t));else if(t.endsWith("/"))return`${t}${r}${n}`;else return`${t}/${r}${n}`;return`${ew(t)}${r}${n}`})(process.env.__NEXT_MANUAL_CLIENT_BASE_PATH&&!t?e:e_(e,s3))}let s8=/[\w-]+-Google|Google-[\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight/i,s9=/Googlebot(?!-)|Googlebot$/i;function s5(e){return e.origin!==window.location.origin}s8.source;var s7=a("./dist/esm/shared/lib/is-thenable.js");function oe(e,t){null!==e.pending?(e.pending=e.pending.next,null!==e.pending&&ot({actionQueue:e,action:e.pending,setState:t})):e.needsRefresh&&(e.needsRefresh=!1,e.dispatch({type:n0.z8},t))}async function ot({actionQueue:e,action:t,setState:r}){let n=e.state;e.pending=t;let a=t.payload,i=e.action(n,a);function s(n){if(t.discarded){t.payload.type===n0.s8&&t.payload.didRevalidate&&(e.needsRefresh=!0),oe(e,r);return}e.state=n,oe(e,r),t.resolve(n)}(0,s7.Q)(i)?i.then(s,n=>{oe(e,r),t.reject(n)}):s(i)}function or(e,t){let r={state:e,dispatch:(e,t)=>(function(e,t,r){let n={resolve:r,reject:()=>{}};if(t.type!==n0.IU){let e=new Promise((e,t)=>{n={resolve:e,reject:t}});(0,O.startTransition)(()=>{r(e)})}let a={payload:t,next:null,resolve:n.resolve,reject:n.reject};null===e.pending?(e.last=a,ot({actionQueue:e,action:a,setState:r})):t.type===n0.Zb||t.type===n0.IU?(e.pending.discarded=!0,a.next=e.pending.next,ot({actionQueue:e,action:a,setState:r})):(null!==e.last&&(e.last.next=a),e.last=a)})(r,e,t),action:async(e,t)=>e,pending:null,last:null,onRouterTransitionStart:null!==t&&"function"==typeof t.onRouterTransitionStart?t.onRouterTransitionStart:null};return r}function on(e,t,r,n,a){if(a)for(let e of a)(0,O.addTransitionType)(e);let i=new URL(s6(e),location.href);process.env.__NEXT_APP_NAV_FAIL_HANDLING&&(window.next.__pendingUrl=i),(0,O.startTransition)(()=>{ik?.setOptimisticLinkStatus(iP),n?.setOptimisticLinkStatus(ix),ik=n});(0,n7.Dd)({type:n0.Zb,url:i,isExternalUrl:s5(i),locationSearch:location.search,scrollBehavior:r,navigateType:t})}let oa={back:()=>window.history.back(),forward:()=>window.history.forward(),prefetch:(e,t)=>{var r,n,a,i;let s,o;if(sW(e))throw Object.defineProperty(Error("Next.js has blocked a javascript: URL as a security precaution."),"__NEXT_ERROR_CODE",{value:"E978",enumerable:!1,configurable:!0});let l=function(){throw Object.defineProperty(Error("Internal Next.js error: Router action dispatched before initialization."),"__NEXT_ERROR_CODE",{value:"E668",enumerable:!1,configurable:!0})}();switch(t?.kind??n0.ob.AUTO){case n0.ob.AUTO:s=aN.PPR;break;case n0.ob.FULL:s=aN.Full;break;default:s=aN.PPR}r=l.state.nextUrl,n=l.state.tree,a=s,i=t?.onInvalidate??null,null===(o=function(e){var t,r;let n;if(r=t=window.navigator.userAgent,s9.test(r)||s8.test(t))return null;try{n=new URL(s6(e),window.location.href)}catch(t){throw Object.defineProperty(Error(`Cannot prefetch '${e}' because it cannot be converted to a URL.`),"__NEXT_ERROR_CODE",{value:"E234",enumerable:!1,configurable:!0})}return s5(n)?null:n}(e))||a4(aI(o.href,r),n,a,aD.Default,i)},replace:(e,t)=>{if(sW(e))throw Object.defineProperty(Error("Next.js has blocked a javascript: URL as a security precaution."),"__NEXT_ERROR_CODE",{value:"E978",enumerable:!1,configurable:!0});(0,O.startTransition)(()=>{on(e,"replace",t?.scroll===!1?n0.Kj.NoScroll:n0.Kj.Default,null,t?.transitionTypes)})},push:(e,t)=>{if(sW(e))throw Object.defineProperty(Error("Next.js has blocked a javascript: URL as a security precaution."),"__NEXT_ERROR_CODE",{value:"E978",enumerable:!1,configurable:!0});(0,O.startTransition)(()=>{on(e,"push",t?.scroll===!1?n0.Kj.NoScroll:n0.Kj.Default,null,t?.transitionTypes)})},refresh:()=>{(0,O.startTransition)(()=>{(0,n7.Dd)({type:n0.z8})})},hmrRefresh:()=>{throw Object.defineProperty(Error("hmrRefresh can only be used in development mode. Please use refresh instead."),"__NEXT_ERROR_CODE",{value:"E485",enumerable:!1,configurable:!0})}};process.env.__NEXT_GESTURE_TRANSITION&&(oa.experimental_gesturePush=function(e,t){if(process.env.__NEXT_GESTURE_TRANSITION){if(sW(e))throw Object.defineProperty(Error("Next.js has blocked a javascript: URL as a security precaution."),"__NEXT_ERROR_CODE",{value:"E978",enumerable:!1,configurable:!0});!0;return}}),O.Component;let oi=a("../../app-render/work-async-storage.external").workAsyncStorage;function os({error:e}){if(oi){let t=oi.getStore();if(t?.isStaticGeneration)throw e&&console.error(e),e}}class oo extends O.Component{static{this.contextType=nJ}constructor(e){super(e),this.reset=()=>{this.setState({error:null})},this.unstable_retry=()=>{(0,O.startTransition)(()=>{this.context?.refresh(),this.reset()})},this.state={error:null,previousPathname:this.props.pathname}}static getDerivedStateFromError(e){if((0,tX.p)(e))throw e;return{error:e}}static getDerivedStateFromProps(e,t){let{error:r}=t;return(process.env.__NEXT_APP_NAV_FAIL_HANDLING&&r,e.pathname!==t.previousPathname&&t.error)?{error:null,previousPathname:e.pathname}:{error:t.error,previousPathname:e.pathname}}render(){return this.state.error&&1?(os({error:this.state.error}),(0,T.jsxs)(T.Fragment,{children:[this.props.errorStyles,this.props.errorScripts,(0,T.jsx)(this.props.errorComponent,{error:this.state.error,reset:this.reset,unstable_retry:this.unstable_retry})]})):this.props.children}}function ol({errorComponent:e,errorStyles:t,errorScripts:r,children:n}){let i=!function(){{let{workUnitAsyncStorage:e}=a("../../app-render/work-unit-async-storage.external"),t=e.getStore();if(!t)return!1;switch(t.type){case"prerender":case"prerender-client":case"prerender-ppr":case"validation-client":let r=t.fallbackRouteParams;return!!r&&r.size>0}return!1}}()?(0,O.useContext)(n6):null;return e?(0,T.jsx)(oo,{pathname:i,errorComponent:e,errorStyles:t,errorScripts:r,children:n}):(0,T.jsx)(T.Fragment,{children:n})}function ou({children:e,errorComponent:t,errorStyles:r,errorScripts:n}){return(0,T.jsx)(ol,{errorComponent:t,errorStyles:r,errorScripts:n,children:e})}let oc={fontFamily:'system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"',height:"100vh",display:"flex",alignItems:"center",justifyContent:"center"},od={marginTop:"-32px",maxWidth:"325px",padding:"32px 28px",textAlign:"left"},of={marginBottom:"24px"},oh={fontSize:"24px",fontWeight:500,letterSpacing:"-0.02em",lineHeight:"32px",margin:"0 0 12px 0",color:"var(--next-error-title)"},op={fontSize:"14px",fontWeight:400,lineHeight:"21px",margin:"0 0 20px 0",color:"var(--next-error-message)"},om={margin:0},og={display:"flex",gap:"8px",alignItems:"center"},oy={display:"inline-flex",alignItems:"center",justifyContent:"center",height:"32px",padding:"0 12px",fontSize:"14px",fontWeight:500,lineHeight:"20px",borderRadius:"6px",cursor:"pointer",color:"var(--next-error-btn-text)",background:"var(--next-error-btn-bg)",border:"var(--next-error-btn-border)"},ov={display:"inline-flex",alignItems:"center",justifyContent:"center",height:"32px",padding:"0 12px",fontSize:"14px",fontWeight:500,lineHeight:"20px",borderRadius:"6px",cursor:"pointer",color:"var(--next-error-btn-secondary-text)",background:"var(--next-error-btn-secondary-bg)",border:"var(--next-error-btn-secondary-border)"},ob={position:"fixed",bottom:"32px",left:"0",right:"0",textAlign:"center",fontFamily:'ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace',fontSize:"12px",lineHeight:"18px",fontWeight:400,margin:"0",color:"var(--next-error-digest)"},ow=` +:root { + --next-error-bg: #fff; + --next-error-text: #171717; + --next-error-title: #171717; + --next-error-message: #171717; + --next-error-digest: #666666; + --next-error-btn-text: #fff; + --next-error-btn-bg: #171717; + --next-error-btn-border: none; + --next-error-btn-secondary-text: #171717; + --next-error-btn-secondary-bg: transparent; + --next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08); +} +@media (prefers-color-scheme: dark) { + :root { + --next-error-bg: #0a0a0a; + --next-error-text: #ededed; + --next-error-title: #ededed; + --next-error-message: #ededed; + --next-error-digest: #a0a0a0; + --next-error-btn-text: #0a0a0a; + --next-error-btn-bg: #ededed; + --next-error-btn-border: none; + --next-error-btn-secondary-text: #ededed; + --next-error-btn-secondary-bg: transparent; + --next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14); + } +} +body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); } +`.replace(/\n\s*/g,"");function oS(){return(0,T.jsx)("svg",{width:"32",height:"32",viewBox:"-0.2 -1.5 32 32",fill:"none",style:of,children:(0,T.jsx)("path",{d:"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z",fill:"var(--next-error-title)"})})}let o_=function({error:e}){let t=e?.digest,r=!!t;return os({error:e}),(0,T.jsxs)("html",{id:"__next_error__",children:[(0,T.jsx)("head",{children:(0,T.jsx)("style",{dangerouslySetInnerHTML:{__html:ow}})}),(0,T.jsxs)("body",{children:[(0,T.jsx)("div",{style:oc,children:(0,T.jsxs)("div",{style:od,children:[(0,T.jsx)(oS,{}),(0,T.jsx)("h1",{style:oh,children:"This page couldn’t load"}),(0,T.jsx)("p",{style:op,children:r?"A server error occurred. Reload to try again.":"Reload to try again, or go back."}),(0,T.jsxs)("div",{style:og,children:[(0,T.jsx)("form",{style:om,children:(0,T.jsx)("button",{type:"submit",style:oy,children:"Reload"})}),!r&&(0,T.jsx)("button",{type:"button",style:ov,onClick:()=>{window.history.length>1?window.history.back():window.location.href="/"},children:"Back"})]})]})}),t&&(0,T.jsxs)("p",{style:ob,children:["ERROR ",t]})]})]})};var oE=a("./dist/esm/lib/framework/boundary-constants.js");let oR={[oE.NJ]:function({children:e}){return e},[oE.A$]:function({children:e}){return e},[oE.DQ]:function({children:e}){return e},[oE.ri]:function({children:e}){return e}};oR[oE.NJ.slice(0)],oR[oE.A$.slice(0)],oR[oE.DQ.slice(0)];let ok=oR[oE.ri.slice(0)],ox={};function oP({appRouterState:e}){return(0,O.useInsertionEffect)(()=>{process.env.__NEXT_APP_NAV_FAIL_HANDLING&&(window.next.__pendingUrl=void 0);let{tree:t,pushRef:r,canonicalUrl:n,renderedSearch:a}=e,i={...r.preserveCustomHistoryState?window.history.state:{},__NA:!0,__PRIVATE_NEXTJS_INTERNALS_TREE:{tree:t,renderedSearch:a}};r.pendingPush&&n1(new URL(window.location.href))!==n?(r.pendingPush=!1,window.history.pushState(i,"",n)):window.history.replaceState(i,"",n),ae=t},[e]),(0,O.useEffect)(()=>{iA(e.nextUrl,e.tree)},[e.nextUrl,e.tree]),null}function oC(e){null==e&&(e={});let t=window.history.state,r=t?.__NA;r&&(e.__NA=r);let n=t?.__PRIVATE_NEXTJS_INTERNALS_TREE;return n&&(e.__PRIVATE_NEXTJS_INTERNALS_TREE=n),e}function oT({headCacheNode:e}){let t=null!==e?e.head:null,r=null!==e?e.prefetchHead:null,n=null!==r?r:t;return(0,O.useDeferredValue)(t,n)}function oA({actionQueue:e,globalError:t,webSocket:r,staticIndicatorState:n}){let a,i=(0,n7.n5)(e),{canonicalUrl:s}=i,{searchParams:o,pathname:l}=(0,O.useMemo)(()=>{var e;let t=new URL(s,"http://n");return{searchParams:t.searchParams,pathname:eR(t.pathname,af)?(e=t.pathname,process.env.__NEXT_MANUAL_CLIENT_BASE_PATH&&!eR(e,af)||0===ah.length||(e=e.slice(ah.length)).startsWith("/")||(e=`/${e}`),e):t.pathname}},[s]);(0,O.useEffect)(()=>{let e,t=(e=function e(t){let r=(e=>{if("string"==typeof e)return"children"===e?"":e.startsWith(re.OG)?"page":e;let[t,,r]=e;switch(r){case"c":return`[...${t}]`;case"ci(..)(..)":return`(..)(..)[...${t}]`;case"ci(.)":return`(.)[...${t}]`;case"ci(..)":return`(..)[...${t}]`;case"ci(...)":return`(...)[...${t}]`;case"oc":return`[[...${t}]]`;case"d":default:return`[${t}]`;case"di(..)(..)":return`(..)(..)[${t}]`;case"di(.)":return`(.)[${t}]`;case"di(..)":return`(..)[${t}]`;case"di(...)":return`(...)[${t}]`}})(t[0]);if(r===re.WO)return;if("page"===r)return[r];let n=t[1]??{},a=n.children?e(n.children):void 0;if(void 0!==a)return""===r?a:[ap(r),...a];for(let[t,a]of Object.entries(n)){if("children"===t)continue;let n=e(a);if(void 0!==n)return""===r?n:[ap(r),...n]}}(i.tree))?`/${e.join("/")}`:void 0;void 0!==t?window.next.__internal_src_page=t:delete window.next.__internal_src_page},[i.tree]),(0,O.useEffect)(()=>{function e(e){e.persisted&&window.history.state?.__PRIVATE_NEXTJS_INTERNALS_TREE&&(ox.pendingMpaPath=void 0,(0,n7.Dd)({type:n0.IU,url:new URL(window.location.href),historyState:window.history.state.__PRIVATE_NEXTJS_INTERNALS_TREE}))}return window.addEventListener("pageshow",e),()=>{window.removeEventListener("pageshow",e)}},[]),(0,O.useEffect)(()=>{function e(e){let t="reason"in e?e.reason:e.error;if((0,tO.n)(t)){e.preventDefault();let r=tj(t);"push"===t$(t)?oa.push(r,{}):oa.replace(r,{})}}return window.addEventListener("error",e),window.addEventListener("unhandledrejection",e),()=>{window.removeEventListener("error",e),window.removeEventListener("unhandledrejection",e)}},[]);let{pushRef:u}=i;if(u.mpaNavigation){if(ox.pendingMpaPath!==s){let e=window.location;u.pendingPush?e.assign(s):e.replace(s),ox.pendingMpaPath=s}throw ad}(0,O.useEffect)(()=>{let e=window.history.pushState.bind(window.history),t=window.history.replaceState.bind(window.history),r=e=>{let t=window.location.href,r=window.history.state?.__PRIVATE_NEXTJS_INTERNALS_TREE;(0,O.startTransition)(()=>{(0,n7.Dd)({type:n0.IU,url:new URL(e??t,t),historyState:r})})};window.history.pushState=function(t,n,a){return t?.__NA||t?._N||(t=oC(t),a&&r(a)),e(t,n,a)},window.history.replaceState=function(e,n,a){return e?.__NA||e?._N||(e=oC(e),a&&r(a)),t(e,n,a)};let n=e=>{if(e.state){if(!e.state.__NA)return void window.location.reload();(0,O.startTransition)(()=>{var t,r;t=window.location.href,r=e.state.__PRIVATE_NEXTJS_INTERNALS_TREE,(0,n7.Dd)({type:n0.IU,url:new URL(t),historyState:r})})}};return window.addEventListener("popstate",n),()=>{window.history.pushState=e,window.history.replaceState=t,window.removeEventListener("popstate",n)}},[]);let{cache:c,tree:d,nextUrl:f,focusAndScrollRef:h,previousNextUrl:p}=i,m=(0,O.useMemo)(()=>(function e(t,r,n,a){if(0===Object.keys(r).length)return[t,n,a];let i=Object.keys(r).filter(e=>"children"!==e);"children"in r&&i.unshift("children");let s=t.slots;if(null!==s)for(let t of i){let[a,i]=r[t];if(a===re.WO)continue;let o=s[t];if(!o)continue;let l=e(o,i,n+"/"+ac(a),n+"/"+ac(a,!0));if(l)return l}return null})(c,d[1],"",""),[c,d]),g=(0,O.useMemo)(()=>(function e(t,r={}){for(let n of Object.values(t[1])){let t=n[0],a=Array.isArray(t),i=a?t[1]:t;!i||i.startsWith(re.OG)||(a&&("c"===t[2]||"oc"===t[2])?r[t[0]]=t[1].split("/"):a&&(r[t[0]]=t[1]),r=e(n,r))}return r})(d),[d]),y=(0,O.useMemo)(()=>({parentTree:d,parentCacheNode:c,parentSegmentPath:null,parentParams:{},parentLoadingData:null,debugNameContext:"/",url:s,isActive:!0}),[d,c,s]),v=(0,O.useMemo)(()=>({tree:d,focusAndScrollRef:h,nextUrl:f,previousNextUrl:p}),[d,h,f,p]);if(null!==m){let[e,t,r]=m;a=(0,T.jsx)(oT,{headCacheNode:e},r)}else a=null;let b=(0,T.jsxs)(au,{children:[a,(0,T.jsx)(ok,{children:c.rsc}),(0,T.jsx)(ar,{tree:d})]});return b=(0,T.jsx)(ou,{errorComponent:t[0],errorStyles:t[1],children:b}),(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(oP,{appRouterState:i}),null,(0,T.jsx)(n9.Provider,{value:null,children:(0,T.jsx)(n8.Provider,{value:g,children:(0,T.jsx)(n6.Provider,{value:l,children:(0,T.jsx)(n3.Provider,{value:o,children:(0,T.jsx)(nY.Provider,{value:v,children:(0,T.jsx)(nJ.Provider,{value:oa,children:(0,T.jsx)(nK.Provider,{value:y,children:b})})})})})})})]})}function oO({actionQueue:e,globalErrorState:t,webSocket:r,staticIndicatorState:n}){process.env.__NEXT_APP_NAV_FAIL_HANDLING&&(0,O.useEffect)(()=>{let e=e=>{"reason"in e?e.reason:e.error};return window.addEventListener("unhandledrejection",e),window.addEventListener("error",e),()=>{window.removeEventListener("error",e),window.removeEventListener("unhandledrejection",e)}},[]);let a=(0,T.jsx)(oA,{actionQueue:e,globalError:t,webSocket:r,staticIndicatorState:n});return(0,T.jsx)(ou,{errorComponent:o_,children:a})}function oj({navigatedAt:e,initialRSCPayload:t,initialFlightStreamForCache:r,location:n}){let{c:a,f:i,q:s,i:o,S:l,s:u,l:c,h:d,p:f,d:h}=t,p=a.join("/"),{tree:m,seedData:g,head:y}=aw(i[0]),v=n?n1(n):p,b={metadataVaryPath:null},w=st(m,s,b),S=b.metadataVaryPath,_=sj(e,w,null,1,g,y,ij(e,h??-1),!1,{separateRefreshUrls:null,scrollRef:null});if(null!==n&&null!==S){if(iM(Date.now(),n.pathname,null,null,w,S,o,v,l,!1),null!==g&&void 0!==u)if(void 0!==c&&null!=r)sx(r,c,void 0).then(async e=>{let t=Date.now(),r=await sg(t,e.s);sy(t,e.f,void 0,e.h,r,m,s,!0)}).catch(()=>{});else{let e=Date.now();sg(e,u).then(t=>{sy(e,i,void 0,d,t,m,s,!1)}).catch(()=>{}),r?.cancel()}else r?.cancel();null!=f&&sv(Date.now(),f,m,s).then(e=>{null!==e&&su(Date.now(),aN.PPRRuntime,e.flightDatas,e.buildId,e.isResponsePartial,e.headVaryParams,e.staleAt,e.navigationSeed,null)}).catch(()=>{})}return{tree:_.route,cache:_.node,pushRef:{pendingPush:!1,mpaNavigation:!1,preserveCustomHistoryState:!0},focusAndScrollRef:{scrollRef:null,forceScroll:!1,onlyHashChange:!1,hashFragment:null},canonicalUrl:v,renderedSearch:s,nextUrl:(ay(m)||n?.pathname)??null,previousNextUrl:null,debugInfo:null}}var o$=((v={}).ProspectiveRender="the prospective render",v.SegmentCollection="segment collection",v.InstantValidation="instant validation",v);function oI(e,t,r){let n;if(!tQ(e)){if(tK(e))return void console.error(e);if("object"==typeof e&&null!==e&&"string"==typeof e.message){if(n=e.message,"string"==typeof e.stack){let a=e.stack,i=a.indexOf("\n");if(i>-1){let e=Object.defineProperty(Error(`Route ${t} errored during ${r}. These errors are normally ignored and may not prevent the route from prerendering but are logged here because build debugging is enabled. + +Original Error: ${n}`),"__NEXT_ERROR_CODE",{value:"E949",enumerable:!1,configurable:!0});e.stack="Error: "+e.message+a.slice(i),console.error(e);return}}}else"string"==typeof e&&(n=e);if(n)return void console.error(`Route ${t} errored during ${r}. These errors are normally ignored and may not prevent the route from prerendering but are logged here because build debugging is enabled. No stack was provided. + +Original Message: ${n}`);console.error(`Route ${t} errored during ${r}. These errors are normally ignored and may not prevent the route from prerendering but are logged here because build debugging is enabled. The thrown value is logged just following this message`),console.error(e)}}let oD=require("next/dist/server/node-environment-extensions/fast-set-immediate.external.js"),oN=!0;function oM(){console.warn("Next.js cannot guarantee that Cache Components will run as expected due to the current runtime's implementation of `setTimeout()`.\nPlease report a github issue here: https://github.com/vercel/next.js/issues/new/")}function oL(){}function oU(e,...t){return new Promise((r,n)=>{let a,i=function(e=0){{let n=!0,a=null,i=!1,s=!1;function t(e){return i=!0,oN&&(0,oD.unpatchedSetImmediate)(()=>{s=!0}),e()}function r(e){return oN&&s&&(oN=!1,oM()),e()}return function(s){if(i)throw Object.defineProperty(new eB.z("Cannot schedule more timers into a group that already executed"),"__NEXT_ERROR_CODE",{value:"E935",enumerable:!1,configurable:!0});let o=setTimeout(n?t:r,e,s);if(n=!1,!oN)return o;try{"_idleStart"in o&&"number"==typeof o._idleStart?null===a?a=o._idleStart:o._idleStart=a:(oN=!1,oM())}catch(e){console.error(Object.defineProperty(new eB.z("An unexpected error occurred while adjusting `_idleStart` on an atomic timer",{cause:e}),"__NEXT_ERROR_CODE",{value:"E933",enumerable:!1,configurable:!0})),oN=!1,oM()}return o}}}(),s=[];s.push(i(()=>{try{(0,oD.DANGEROUSLY_runPendingImmediatesAfterCurrentTask)(),a=e(),(0,s7.Q)(a)&&a.then(oL,oL)}catch(e){for(let e=1;e{try{(0,oD.DANGEROUSLY_runPendingImmediatesAfterCurrentTask)(),r()}catch(e){for(;++a{try{(0,oD.expectNoPendingImmediates)(),r(a)}catch(e){n(e)}}))})}let oF=require("next/dist/server/app-render/console-async-storage.external.js");class oH{constructor(){this.count=0,this.earlyListeners=[],this.listeners=[],this.tickPending=!1,this.pendingTimeoutCleanup=null,this.subscribedSignals=null,this.invokeListenersIfNoPendingReads=()=>{if(this.pendingTimeoutCleanup=null,0===this.count){for(let e=0;eprocess.nextTick(()=>{if(this.tickPending=!1,0===this.count){for(let e=0;e{t=clearTimeout.bind(null,setTimeout(e,0))}),t=clearImmediate.bind(null,r),()=>t())}inputReady(){return new Promise(e=>{this.earlyListeners.push(e),0===this.count&&this.noMorePendingCaches()})}cacheReady(){return new Promise(e=>{this.listeners.push(e),0===this.count&&this.noMorePendingCaches()})}beginRead(){if(this.count++,this.pendingTimeoutCleanup&&(this.pendingTimeoutCleanup(),this.pendingTimeoutCleanup=null),null!==this.subscribedSignals)for(let e of this.subscribedSignals)e.beginRead()}endRead(){if(0===this.count)throw Object.defineProperty(new eB.z("CacheSignal got more endRead() calls than beginRead() calls"),"__NEXT_ERROR_CODE",{value:"E678",enumerable:!1,configurable:!0});if(this.count--,0===this.count&&this.noMorePendingCaches(),null!==this.subscribedSignals)for(let e of this.subscribedSignals)e.endRead()}hasPendingReads(){return this.count>0}trackRead(e){this.beginRead();let t=this.endRead.bind(this);return e.then(t,t),e}subscribeToReads(e){if(e===this)throw Object.defineProperty(new eB.z("A CacheSignal cannot subscribe to itself"),"__NEXT_ERROR_CODE",{value:"E679",enumerable:!1,configurable:!0});null===this.subscribedSignals&&(this.subscribedSignals=new Set),this.subscribedSignals.add(e);for(let t=0;tt.includes(e))}class oz{update(e){this._done||(this.currentValue=e,this._resolve?(this._resolve({value:e,done:!1}),this._resolve=null):this._buffer.push(e))}close(){!this._done&&(this._done=!0,this._resolve&&(this._resolve({value:void 0,done:!0}),this._resolve=null))}[Symbol.asyncIterator](){return{next:()=>this._buffer.length>0?Promise.resolve({value:this._buffer.shift(),done:!1}):this._done?Promise.resolve({value:void 0,done:!0}):new Promise(e=>{this._resolve=e})}}constructor(){this._resolve=null,this._done=!1,this._buffer=[],this.currentValue=0}}function oq(e){return t=>{var r;return t===ey.AR&&"number"==typeof(null==(r=e.staleTimes)?void 0:r.static)?e.staleTimes.static:t}}function oX(e,t,r){let n=e.stale;t.update(r(n)),Object.defineProperty(e,"stale",{get:()=>n,set:e=>{n=e,t.update(r(e))},configurable:!0,enumerable:!0})}async function oV(e){e.close(),await Promise.resolve(),await Promise.resolve(),await Promise.resolve()}function oW(e){let t=!1;return async function(){return t?"":(t=!0,`document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))`)}}var oG=a("./dist/compiled/path-to-regexp/index.js");let oJ=/[|\\{}()[\]^$+*?.-]/,oK=/[|\\{}()[\]^$+*?.-]/g;function oY(e){return oJ.test(e)?e.replace(oK,"\\$&"):e}function oQ(e,{includeSuffix:t=!1,includePrefix:r=!1,excludeOptionalTrailingSlash:n=!1}={}){let{parameterizedRoute:a,groups:i}=function(e,t,r){let n={},a=1,i=[];for(let s of ew(e).slice(1).split("/")){let e=nO.VB.find(e=>s.startsWith(e)),o=s.match(nL);if(e&&o&&o[2]){let{key:t,optional:r,repeat:s}=nU(o[2]);n[t]={pos:a++,repeat:s,optional:r},i.push(`/${oY(e)}([^/]+?)`)}else if(o&&o[2]){let{key:e,repeat:t,optional:s}=nU(o[2]);n[e]={pos:a++,repeat:t,optional:s},r&&o[1]&&i.push(`/${oY(o[1])}`);let l=t?s?"(?:/(.+?))?":"/(.+?)":"/([^/]+?)";r&&o[1]&&(l=l.substring(1)),i.push(l)}else i.push(`/${oY(s)}`);t&&o&&o[3]&&i.push(oY(o[3]))}return{parameterizedRoute:i.join(""),groups:n}}(e,t,r),s=a;return n||(s+="(?:/)?"),{re:RegExp(`^${s}$`),groups:i}}function oZ({interceptionMarker:e,getSafeRouteKey:t,segment:r,routeKeys:n,keyPrefix:a,backreferenceDuplicateKeys:i}){let s,{key:o,optional:l,repeat:u}=nU(r),c=o.replace(/\W/g,"");a&&(c=`${a}${c}`);let d=!1;(0===c.length||c.length>30)&&(d=!0),isNaN(parseInt(c.slice(0,1)))||(d=!0),d&&(c=t());let f=c in n;a?n[c]=`${a}${o}`:n[c]=o;let h=e?oY(e):"";return s=f&&i?`\\k<${c}>`:u?`(?<${c}>.+?)`:`(?<${c}>[^/]+?)`,{key:o,pattern:l?`(?:/${h}${s})?`:`/${h}${s}`,cleanedKey:c,optional:l,repeat:u}}var o0=a("./dist/esm/shared/lib/utils.js");let o1="_NEXTSEP_";function o2(e){return"string"==typeof e&&!!(/\/\(\.{1,3}\):[^/\s]+/.test(e)||/:[a-zA-Z_][a-zA-Z0-9_]*:[a-zA-Z_][a-zA-Z0-9_]*/.test(e))}function o4(e){let t=e;return(t=t.replace(/(\([^)]*\)):([^/\s]+)/g,`$1${o1}:$2`)).replace(/:([^:/\s)]+)(?=:)/g,`:$1${o1}`)}function o3(e){return e.replace(RegExp(`\\)${o1}`,"g"),")")}function o6(e,t,r){if("string"!=typeof e)return(0,oG.pathToRegexp)(e,t,r);let n=o2(e),a=n?o4(e):e;try{return(0,oG.pathToRegexp)(a,t,r)}catch(a){if(!n)try{let n=o4(e);return(0,oG.pathToRegexp)(n,t,r)}catch(e){}throw a}}function o8(e,t){let r=o2(e),n=r?o4(e):e;try{let e=(0,oG.compile)(n,t);if(r)return t=>o3(e(t));return e}catch(n){if(!r)try{let r=o4(e),n=(0,oG.compile)(r,t);return e=>o3(n(e))}catch(e){}throw n}}function o9({re:e,groups:t}){var r;return r=r=>{let n=e.exec(r);if(!n)return!1;let a=e=>{try{return decodeURIComponent(e)}catch{throw Object.defineProperty(new o0.Xc("failed to decode param"),"__NEXT_ERROR_CODE",{value:"E528",enumerable:!1,configurable:!0})}},i={};for(let[e,r]of Object.entries(t)){let t=n[r.pos];void 0!==t&&(r.repeat?i[e]=t.split("/").map(e=>a(e)):i[e]=a(t))}return i},e=>{let t=r(e);if(!t)return!1;let n={};for(let[e,r]of Object.entries(t))"string"==typeof r?n[e]=r.replace(RegExp(`^${o1}`),""):Array.isArray(r)?n[e]=r.map(e=>"string"==typeof e?e.replace(RegExp(`^${o1}`),""):e):n[e]=r;return n}}var o5=a("./dist/esm/shared/lib/router/utils/querystring.js");function o7(e){return e.replace(/__ESC_COLON_/gi,":")}function le(e,t){if(!e.includes(":"))return e;for(let r of Object.keys(t))e.includes(`:${r}`)&&(e=e.replace(RegExp(`:${r}\\*`,"g"),`:${r}--ESCAPED_PARAM_ASTERISKS`).replace(RegExp(`:${r}\\?`,"g"),`:${r}--ESCAPED_PARAM_QUESTION`).replace(RegExp(`:${r}\\+`,"g"),`:${r}--ESCAPED_PARAM_PLUS`).replace(RegExp(`:${r}(?!\\w)`,"g"),`--ESCAPED_PARAM_COLON${r}`));return e=e.replace(/(:|\*|\?|\+|\(|\)|\{|\})/g,"\\$1").replace(/--ESCAPED_PARAM_PLUS/g,"+").replace(/--ESCAPED_PARAM_COLON/g,":").replace(/--ESCAPED_PARAM_QUESTION/g,"?").replace(/--ESCAPED_PARAM_ASTERISKS/g,"*"),o8(`/${e}`,{validate:!1})(t).slice(1)}function lt(e){try{return decodeURIComponent(e)}catch{return e}}function lr(e){let t=function(e){let t;try{t=new URL(e,"http://n")}catch{}return t}(e);if(!t)return;let r={};for(let e of t.searchParams.keys()){let n=t.searchParams.getAll(e);r[e]=n.length>1?n:n[0]}return{query:r,hash:t.hash,search:t.search,path:t.pathname,pathname:t.pathname,href:`${t.pathname}${t.search}${t.hash}`,host:"",hostname:"",auth:"",protocol:"",slashes:null,port:""}}let ln=/https?|ftp|gopher|file/;function la(e){let{auth:t,hostname:r}=e,n=e.protocol||"",a=e.pathname||"",i=e.hash||"",s=e.query||"",o=!1;t=t?encodeURIComponent(t).replace(/%3A/i,":")+"@":"",e.host?o=t+e.host:r&&(o=t+(~r.indexOf(":")?`[${r}]`:r),e.port&&(o+=":"+e.port)),s&&"object"==typeof s&&(s=String(o5.Bw(s)));let l=e.search||s&&`?${s}`||"";return n&&!n.endsWith(":")&&(n+=":"),e.slashes||(!n||ln.test(n))&&!1!==o?(o="//"+(o||""),a&&"/"!==a[0]&&(a="/"+a)):o||(o=""),i&&"#"!==i[0]&&(i="#"+i),l&&"?"!==l[0]&&(l="?"+l),a=a.replace(/[?#]/g,encodeURIComponent),l=l.replace("#","%23"),`${n}${o}${a}${l}${i}`}function li(e,t){for(let r in delete e.nextInternalLocale,e){let n=r!==ey.AA&&r.startsWith(ey.AA),a=r!==ey.h&&r.startsWith(ey.h);(n||a||t.includes(r))&&delete e[r]}}function ls(e,t){return"string"==typeof e[ey.vS]&&e[ey.c1]===t?e[ey.vS].split(","):[]}let lo=require("next/dist/server/app-render/module-loading/track-module-loading.external.js"),ll={deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[32,48,64,96,128,256,384],path:"/_next/image",loader:"default",loaderFile:"",domains:[],disableStaticImages:!1,minimumCacheTTL:14400,formats:["image/webp"],maximumDiskCacheSize:void 0,maximumRedirects:3,maximumResponseBody:5e7,dangerouslyAllowLocalIP:!1,dangerouslyAllowSVG:!1,contentSecurityPolicy:"script-src 'none'; frame-src 'none'; sandbox;",contentDispositionType:"attachment",localPatterns:void 0,remotePatterns:[],qualities:[75],unoptimized:!1,customCacheHandler:!1},lu=O.createContext(ll);async function lc(e){let{mod:t}=await r2(e),r=t?t.unstable_instant:void 0;if(r&&"object"==typeof r&&"runtime"===r.prefetch)return!0;let{parallelRoutes:n}=r3(e);for(let e in n){let t=n[e];if(await lc(t))return!0}return!1}async function ld(e){let{mod:t}=await r2(e),r=t?t.unstable_instant:void 0;if(void 0!==r){if("object"==typeof r)return!1;else if(!1===r)return!0}let{parallelRoutes:n}=r3(e);for(let e in n){let t=n[e];if(await ld(t))return!0}return!1}async function lf(e,t){let r=await lp(e),n=!1;for(let{config:e}of r)if("object"==typeof e){if(!0===e.unstable_disableValidation||"dev"===t&&!0===e.unstable_disableDevValidation||"build"===t&&!0===e.unstable_disableBuildValidation)return!1;n=!0}return n}lg(async e=>lf(e,"dev"));let lh=lg(async e=>lf(e,"build")),lp=lg(async e=>{let t=[];async function r(e,n){let{mod:a}=await r2(e),i=a?a.unstable_instant:void 0;void 0!==i&&t.push({path:n,config:i});let{parallelRoutes:s}=r3(e);for(let e in s){let t=s[e];await r(t,[...n,e])}}return await r(e,[]),t}),lm=async e=>{let{mod:t}=await r2(e),r=t?t.unstable_instant:void 0,n=null;void 0!==r&&"object"==typeof r&&r.samples&&(n=r.samples);let{parallelRoutes:a}=r3(e);for(let e in a){if("children"!==e)continue;let t=a[e],r=await lm(t);null!==r&&(n=r)}return n};function lg(e){let t=new WeakMap;return r=>{let n=A.workAsyncStorage.getStore();if(!n)return e(r);let a=t.get(n);if(a&&a.has(r))return a.get(r);let i=e(r);return a||(a=new WeakMap,t.set(n,a)),a.set(r,i),i}}function ly(){}function lv(e,t){return e.sharedContext.deploymentId||(t.b=e.sharedContext.buildId),t}async function lb(e){let{page:t,parallelRoutes:r}=r3(e),n=null;if(void 0!==t){let e=await t[0]();if(e&&"number"==typeof e.unstable_dynamicStaleTime){let t=e.unstable_dynamicStaleTime;n=null!==n?Math.min(n,t):t}}let a=[];for(let e in r)a.push(lb(r[e]));for(let e of(await Promise.all(a)))null!==e&&(n=null!==n?Math.min(n,e):e);return n}function lw(e,t,r){return function(n){let[a,,,i]=n,s=(0,t2.Hp)(a);return s?nM(e,s.paramName,t1[s.paramType],t,r?i:null):null}}function lS({createElement:e,pagePath:t,statusCode:r,isPossibleServerAction:n}){return!n&&("/404"===t||"number"==typeof r&&r>400)?e("meta",{name:"robots",content:"noindex"}):null}async function l_(e,t){let r="",{componentMod:{routeModule:{userland:{loaderTree:n}},createElement:a,createMetadataComponents:i,Fragment:s},query:o,requestId:l,flightRouterState:u,workStore:c,url:d}=e,f=!!e.renderOpts.serveStreamingMetadata;if(!(null==t?void 0:t.skipPageRendering)){var h;let t=await lc(n),{Viewport:c,Metadata:p,MetadataOutlet:m}=i({tree:n,parsedQuery:o,pathname:d.pathname,metadataContext:tb(e.renderOpts),interpolatedParams:e.interpolatedParams,serveStreamingMetadata:f,isRuntimePrefetchable:t}),g=a(s,{key:"h"},a(lS,{createElement:a,pagePath:e.pagePath,statusCode:e.res.statusCode,isPossibleServerAction:e.isPossibleServerAction}),a(c,{key:l+"v"}),a(p,{key:l+"m"}));r=(await nT({ctx:e,loaderTreeToFilter:n,parentParams:{},flightRouterState:u,rscHead:g,injectedCSS:new Set,injectedJS:new Set,injectedFontPreloadTags:new Set,rootLayoutIncluded:!1,preloadCallbacks:[],MetadataOutlet:m,hintTree:(null==(h=e.renderOpts.prefetchHints)?void 0:h[e.pagePath])??null})).map(e=>e.slice(1))}let p=e.res.getHeader("vary"),m="string"==typeof p&&p.includes(z.kO);if(null==t?void 0:t.actionResult)return lv(e,{a:t.actionResult,f:r,q:lj(o),i:!!m});let g=lv(e,{f:r,q:lj(o),i:!!m,S:c.isStaticGeneration,h:ny()});if((null==t?void 0:t.staleTimeIterable)!==void 0&&(g.s=t.staleTimeIterable),(null==t?void 0:t.staticStageByteLengthPromise)!==void 0&&(g.l=t.staticStageByteLengthPromise),(null==t?void 0:t.runtimePrefetchStream)!==void 0&&(g.p=t.runtimePrefetchStream),!c.isStaticGeneration){let t=await lb(e.componentMod.routeModule.userland.loaderTree);null!==t&&(g.d=t)}return g}function lE(e,t){var r;return{routerKind:"App Router",routePath:e.pagePath,routeType:e.isPossibleServerAction?"action":"render",renderSource:t,revalidateReason:(r=e.workStore).isOnDemandRevalidate?"on-demand":r.isStaticGeneration?"stale":void 0}}async function lR(e,t,r,n){let{htmlRequestId:a,renderOpts:i,requestId:s,workStore:l}=t,{onInstrumentationRequestError:u,setReactDebugChannel:c,isBuildTimePrerendering:d=!1}=i,f=tZ(!1,d,l.reactServerErrorsByDigest,function(r,n){return null==u?void 0:u(r,e,lE(t,"react-server-components-payload"),n)}),h=c&&ly();h&&c(h.clientSide,a,s);let{clientModules:p}=e4(),m=await eQ.workUnitAsyncStorage.run(r,l_,t,n),g=eQ.workUnitAsyncStorage.run(r,tf,t.componentMod,m,p,{onError:f,temporaryReferences:null==n?void 0:n.temporaryReferences,filterStackFrame:o,debugChannel:null==h?void 0:h.serverSide});return new tN(g,{fetchMetrics:l.fetchMetrics},null==n?void 0:n.waitUntil)}async function lk(e,t,r){let n,a,{componentMod:i,workStore:s,renderOpts:l}=t,{renderToReadableStream:u,routeModule:c}=i,{loaderTree:d}=c.userland,{onInstrumentationRequestError:f,experimental:h}=l,p=tZ(!1,!1,s.reactServerErrorsByDigest,function(r,n){return null==f?void 0:f(r,e,lE(t,"react-server-components-payload"),n)}),m=oq(h),g=new oz,y=new nd.V(null,null,!1);r.stale=ey.AR,r.stagedRendering=y,r.asyncApiPromises=lq(y,r.cookies,r.mutableCookies,r.headers),oX(r,g,m);let v=new Promise(e=>{n=e});if(await lc(d)){let e=nB();r.prerenderResumeDataCache=e;let n=new oH;(0,lo.trackPendingModules)(n),r.cacheSignal=n;let i=new TransformStream;a=i.readable,n.cacheReady().then(()=>lx(i.writable,t,e,r,p))}let b=await eQ.workUnitAsyncStorage.run(r,l_,t,{staleTimeIterable:g,staticStageByteLengthPromise:v,runtimePrefetchStream:a}),{clientModules:w}=e4();return new tN(await oU(()=>{y.advanceStage(nd.D.Static);let[e,t]=eQ.workUnitAsyncStorage.run(r,u,b,w,{onError:p,filterStackFrame:o}).tee();return lz(t,y).then(n),e},()=>{oV(g)},()=>{y.advanceStage(nd.D.Dynamic)}),{fetchMetrics:s.fetchMetrics})}async function lx(e,t,r,n,a){try{let{componentMod:i,getDynamicParamFromSegment:s}=t,{loaderTree:o}=i.routeModule.userland,l=nx(o,s),u=new oz,{result:c}=await lA(t,l_.bind(null,t,{staleTimeIterable:u}),r,null,l,n.headers,n.cookies,n.draftMode,a,u);await c.prelude.pipeTo(e)}catch{try{await e.close()}catch{}}}async function lP(e,t,r){let{workStore:n,renderOpts:a}=t,{isBuildTimePrerendering:i=!1,onInstrumentationRequestError:s}=a,o=tZ(!1,i,n.reactServerErrorsByDigest,function(r,n){return null==s?void 0:s(r,e,lE(t,"react-server-components-payload"),n)}),l={},u=new oz,{componentMod:{routeModule:{userland:{loaderTree:c}}},getDynamicParamFromSegment:d}=t,f=nx(c,d),h=nB();await lC(t,l_.bind(null,t),h,null,f,r.headers,r.cookies,r.draftMode);let p=await lA(t,l_.bind(null,t,{staleTimeIterable:u}),h,null,f,r.headers,r.cookies,r.draftMode,o,u);return lF(p,l,n),l.fetchMetrics=t.workStore.fetchMetrics,new tN(p.result.prelude,l)}async function lC(e,t,r,n,a,i,s,l){let{implicitTags:u,renderOpts:c,workStore:d}=e,{ComponentMod:f}=c,h=new AbortController,p=new AbortController,m=new oH,g={type:"prerender-runtime",phase:"render",rootParams:a,implicitTags:u,renderSignal:p.signal,controller:h,cacheSignal:m,dynamicTracking:null,revalidate:1,expire:0,stale:ey.AR,tags:[...u.tags],renderResumeDataCache:n,prerenderResumeDataCache:r,hmrRefreshHash:void 0,varyParamsAccumulator:null,stagedRendering:null,headers:i,cookies:s,draftMode:l},{clientModules:y}=e4(),v=await eQ.workUnitAsyncStorage.run(g,t),b={filterStackFrame:o,onError:e=>{let t=tQ(e);return t||(h.signal.aborted?void 0:void((process.env.NEXT_DEBUG_BUILD||process.env.__NEXT_VERBOSE_LOGGING)&&oI(e,d.route,o$.ProspectiveRender)))},signal:p.signal},w=eQ.workUnitAsyncStorage.run(g,tg(f),v,y,b);if((0,lo.trackPendingModules)(m),await m.cacheReady(),p.abort(),h.abort(),d.invalidDynamicUsageError)throw d.invalidDynamicUsageError;try{return await tr(w)}catch(e){return p.signal.aborted||h.signal.aborted||(process.env.NEXT_DEBUG_BUILD||process.env.__NEXT_VERBOSE_LOGGING)&&oI(e,d.route,o$.ProspectiveRender),null}}function lT(e,t){let r=new Uint8Array([t?126:35]);return e.pipeThrough(new TransformStream({start(e){e.enqueue(r)}}))}async function lA(e,t,r,n,a,i,s,l,u,c){let{implicitTags:d,renderOpts:f}=e,{ComponentMod:h,experimental:p,isDebugDynamicAccesses:m}=f,g=oq(p),y=!1,v=new AbortController,b=(0,tV.uO)(m),w=new nd.V(v.signal,null,!0),S=ng(),_={type:"prerender-runtime",phase:"render",rootParams:a,implicitTags:d,renderSignal:v.signal,controller:v,cacheSignal:null,dynamicTracking:b,revalidate:1,expire:0,stale:ey.AR,tags:[...d.tags],prerenderResumeDataCache:r,renderResumeDataCache:n,hmrRefreshHash:void 0,varyParamsAccumulator:S,stagedRendering:w,headers:i,cookies:s,draftMode:l};oX(_,c,g);let{clientModules:E}=e4(),R=await eQ.workUnitAsyncStorage.run(_,t),k=!0,x=await oU(async()=>{w.advanceStage(nd.D.EarlyStatic);let e=await eQ.workUnitAsyncStorage.run(_,tg(h),R,E,{filterStackFrame:o,onError:u,signal:v.signal});return k=!1,e},()=>{w.advanceStage(nd.D.Static)},()=>{w.advanceStage(nd.D.EarlyRuntime)},()=>{w.advanceStage(nd.D.Runtime)},()=>{Promise.all([oV(c),nv(S)]).then(()=>{if(v.signal.aborted){y=!0;return}k&&(y=!0),v.abort()})});return x.prelude=lT(x.prelude,y),{result:x,dynamicAccess:b,isPartial:y,collectedRevalidate:_.revalidate,collectedExpire:_.expire,collectedStale:c.currentValue,collectedTags:_.tags}}function lO(e){return(e.pathname+e.search).split("/")}function lj(e){let t=[];for(let r in e){let n=e[r];if(null!=n)if(Array.isArray(n))for(let e of n)t.push(`${encodeURIComponent(r)}=${encodeURIComponent(String(e))}`);else t.push(`${encodeURIComponent(r)}=${encodeURIComponent(String(n))}`)}return 0===t.length?"":"?"+t.join("&")}async function l$(e,t,r){var n;let a,{is404:i,prerenderHTTPError:s,staleTimeIterable:o,staticStageByteLengthPromise:l,runtimePrefetchStream:u}=r,c=new Set,d=new Set,f=new Set,{getDynamicParamFromSegment:h,query:p,appUsingSizeAdjustment:m,componentMod:{createMetadataComponents:g,createElement:y,Fragment:v},url:b,workStore:w}=t,S=(null==(n=t.renderOpts.prefetchHints)?void 0:n[t.pagePath])??null,_=await rr(e,S,h,p),E=!!t.renderOpts.serveStreamingMetadata,R=!!e[2]["global-not-found"],k=await lc(e),{Viewport:x,Metadata:P,MetadataOutlet:C}=g({tree:e,errorType:i&&!R?"not-found":void 0,parsedQuery:p,pathname:b.pathname,metadataContext:tb(t.renderOpts),interpolatedParams:t.interpolatedParams,serveStreamingMetadata:E,isRuntimePrefetchable:k}),T=[],A=await n_({ctx:t,loaderTree:e,parentParams:{},parentOptionalCatchAllParamName:null,parentRuntimePrefetchable:!1,injectedCSS:c,injectedJS:d,injectedFontPreloadTags:f,rootLayoutIncluded:!1,missingSlots:a,preloadCallbacks:T,authInterrupts:t.renderOpts.experimental.authInterrupts,MetadataOutlet:C,prerenderHTTPError:s}),O=t.res.getHeader("vary"),j="string"==typeof O&&O.includes(z.kO),$=y(v,{key:"h"},y(lS,{createElement:y,pagePath:t.pagePath,statusCode:t.res.statusCode,isPossibleServerAction:t.isPossibleServerAction}),y(x,null),y(P,null),m?y("meta",{name:"next-size-adjust",content:""}):null),{GlobalError:I,styles:D}=await lZ(e,t),N=w.isStaticGeneration&&!0===t.renderOpts.experimental.isRoutePPREnabled;return lv(t,{P:y(lI,{preloadCallbacks:T}),c:lO(b),q:lj(p),i:!!j,f:[[_,A,$,N]],m:a,G:[I,D],S:w.isStaticGeneration||t.renderOpts.cacheComponents,h:ny(),s:o,l:l,p:u,d:w.isStaticGeneration?void 0:await lb(e)??void 0})}function lI({preloadCallbacks:e}){return e.forEach(e=>e()),null}async function lD(e,t,r,n){var a;let{getDynamicParamFromSegment:i,query:s,componentMod:{createMetadataComponents:o,createElement:l,Fragment:u},url:c,workStore:d}=t,f=!!t.renderOpts.serveStreamingMetadata,h=await lc(e),{Viewport:p,Metadata:m}=o({tree:e,parsedQuery:s,pathname:c.pathname,metadataContext:tb(t.renderOpts),errorType:n,interpolatedParams:t.interpolatedParams,serveStreamingMetadata:f,isRuntimePrefetchable:h}),g=l(u,{key:"h"},l(lS,{createElement:l,pagePath:t.pagePath,statusCode:t.res.statusCode,isPossibleServerAction:t.isPossibleServerAction}),l(p,null),"",l(m,null)),y=(null==(a=t.renderOpts.prefetchHints)?void 0:a[t.pagePath])??null,v=await rr(e,y,i,s);r&&(tW(r)||Object.defineProperty(Error(r+""),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0}));let b=[l("html",{id:"__next_error__"},l("head",null),l("body",null,null)),{},null,!1,null],{GlobalError:w,styles:S}=await lZ(e,t),_=d.isStaticGeneration&&!0===t.renderOpts.experimental.isRoutePPREnabled;return lv(t,{c:lO(c),q:lj(s),m:void 0,i:!1,f:[[v,b,g,_]],G:[w,S],S:d.isStaticGeneration||t.renderOpts.cacheComponents,h:ny()})}function lN({reactServerStream:e,reactDebugStream:t,debugEndTime:r,preinitScripts:n,ServerInsertedHTMLProvider:i,nonce:s,images:o}){n();let l=O.use(e7(e,t,r,s)),u=or(oj({navigatedAt:-1,initialRSCPayload:l,location:null}),null),{HeadManagerContext:c}=a("./dist/esm/shared/lib/head-manager-context.shared-runtime.js");return(0,T.jsx)(c.Provider,{value:{appDir:!0,nonce:s},children:(0,T.jsx)(lu.Provider,{value:o??ll,children:(0,T.jsx)(i,{children:(0,T.jsx)(oO,{actionQueue:u,globalErrorState:l.G})})})})}function lM({reactServerStream:e,preinitScripts:t,ServerInsertedHTMLProvider:r,nonce:n,images:a}){t();let i=O.use(e7(e,void 0,void 0,n)),s=or(oj({navigatedAt:-1,initialRSCPayload:i,location:null}),null);return(0,T.jsx)(lu.Provider,{value:a??ll,children:(0,T.jsx)(r,{children:(0,T.jsx)(oO,{actionQueue:s,globalErrorState:i.G})})})}async function lL(e,t,r,n,i,s,o,l,u,c,d,f,h){let p,m,g="/404"===n;g&&(t.statusCode=404);let y=Date.now(),{ComponentMod:v,nextFontManifest:b,serverActions:w,assetPrefix:S="",enableTainting:_,cacheComponents:E,setIsrStatus:R}=s,{cachedNavigations:k}=s.experimental;if(v.__next_app__){let e="performance"in globalThis?{require:(...e)=>{let t=performance.now();0===eN&&(eN=t);try{return eL+=1,v.__next_app__.require(...e)}finally{eM+=performance.now()-t}},loadChunk:(...e)=>{let t=performance.now(),r=v.__next_app__.loadChunk(...e);return r.finally(()=>{eM+=performance.now()-t}),r}}:v.__next_app__,t=()=>{if(!E)return!1;let e=eQ.workUnitAsyncStorage.getStore();if(!e)return!1;switch(e.type){case"prerender":case"prerender-client":case"validation-client":case"prerender-runtime":case"cache":case"private-cache":return!0;case"prerender-ppr":case"prerender-legacy":case"request":case"unstable-cache":case"generate-static-params":return!1}};globalThis.__next_require__=(...r)=>{let n=e.require(...r);return t()&&(0,lo.trackPendingImport)(n),n},globalThis.__next_chunk_load__=(...r)=>{let n=e.loadChunk(...r);return t()&&(0,lo.trackPendingChunkLoad)(n),n}}t.onClose(()=>{o.shouldTrackFetchMetrics=!1}),e.originalRequest.on("end",()=>{if("performance"in globalThis){let e=eU({reset:!0});e&&(0,j.getTracer)().startSpan($.Fx.clientComponentLoading,{startTime:e.clientComponentLoadStart,attributes:{"next.clientComponentLoadCount":e.clientComponentLoadCount,"next.span_type":$.Fx.clientComponentLoading}}).end(e.clientComponentLoadStart+e.clientComponentLoadTimes)}});let x={statusCode:g?404:void 0},C=!!(null==b?void 0:b.appUsingSizeAdjust);v.patchFetch();let{routeModule:{userland:{loaderTree:T}},taintObjectReference:A}=v;_&&A("Do not pass process.env to Client Components since it will leak sensitive data",process.env),o.fetchMetrics=[],x.fetchMetrics=o.fetchMetrics;var O=i={...i};for(let e of tv)delete O[e];let{isStaticGeneration:I}=o,{flightRouterState:D,isPrefetchRequest:N,isRuntimePrefetchRequest:M,isRSCRequest:L,isHmrRefresh:U,nonce:F}=l;l.requestId?p=l.requestId:I?p=Buffer.from(await crypto.subtle.digest("SHA-1",Buffer.from(e.url))).toString("hex"):p=a("./dist/compiled/nanoid/index.cjs").nanoid(),m=l.htmlRequestId||p;let H=lw(f,h,s.experimental.optimisticRouting),B=ri(e).isPossibleServerAction,z=P(e,"resolvedPathname");if(!z)throw Object.defineProperty(new eB.z("resolvedPathname must be set in request metadata"),"__NEXT_ERROR_CODE",{value:"E981",enumerable:!1,configurable:!0});let q=await tD(o.page,z,h),X={componentMod:v,url:r,renderOpts:s,workStore:o,parsedRequestHeaders:l,getDynamicParamFromSegment:H,interpolatedParams:f,query:i,isPrefetch:N,isPossibleServerAction:B,requestTimestamp:y,appUsingSizeAdjustment:C,flightRouterState:D,requestId:p,htmlRequestId:m,pagePath:n,assetPrefix:S,isNotFoundPath:g,nonce:F,res:t,sharedContext:d,implicitTags:q};if((0,j.getTracer)().setRootSpanAttribute("next.route",n),I){let a=(0,j.getTracer)().wrap($.Wc.getBodyResult,{spanName:`prerender route (app) ${n}`,attributes:{"next.route":n}},lQ),i=await a(e,t,X,x,T,h);if(i.dynamicAccess&&(0,tV.Lu)(i.dynamicAccess)&&s.isDebugDynamicAccesses)for(let e of(r_("The following dynamic usage was detected:"),(0,tV.JL)(i.dynamicAccess)))r_(e);if(o.invalidDynamicUsageError)throw(0,tV.gR)(o,o.invalidDynamicUsageError),new nf.f;if(i.digestErrorsMap.size){let e=i.digestErrorsMap.values().next().value;if(e)throw e}if(i.ssrErrors.length){let e=i.ssrErrors.find(e=>!eF(e)&&!(0,tz.C)(e)&&!(0,tX.p)(e));if(e)throw e}let l={metadata:x,contentType:ey.j9},u=(0,rx.C)(o);if(!1!==u){let e=u.finally(()=>{process.env.NEXT_PRIVATE_DEBUG_CACHE&&console.log("pending revalidates promise finished for:",r.href)});s.waitUntil?s.waitUntil(e):l.waitUntil=e}lF(i,x,o),i.renderResumeDataCache&&(x.renderResumeDataCache=i.renderResumeDataCache);let c=new ez(await th(i.stream),l);return o.cacheComponentsEnabled&&o.isBuildTimePrerendering&&s.runInstantValidation&&await lh(T)&&await lG(X,i.renderResumeDataCache??null),c}{let n=s.renderResumeDataCache??(null==u?void 0:u.renderResumeDataCache)??null,a=nx(T,X.getDynamicParamFromSegment),i=P(e,"fallbackParams")||null,l=tk.bind(null,e,t,r,a,q,s.onUpdateCookies,s.previewProps,U,c,n,i),d=l();if(L)if(M)return lP(e,X,d);else return E&&k?lk(e,X,d):lR(e,X,d);let f=!1,h=null;if(B){let r=await rN({req:e,res:t,ComponentMod:v,generateFlight:lR,workStore:o,requestStore:d,serverActions:w,ctx:X,metadata:x});if(r){if("not-found"===r.type){let r,n,a,s=(a=(n=!!(r=T[2])["global-not-found"])?{layout:r["global-not-found"],page:[()=>null,"next/dist/client/components/builtin/empty-stub"]}:{page:r["not-found"]},["",{children:[re.OG,{},a,null]},n?r:{"global-error":r["global-error"]},null]);return t.statusCode=404,x.statusCode=404,new ez(await lH(d,e,t,X,s,h,u,x,void 0,i),{metadata:x,contentType:ey.j9})}else if("done"===r.type)if(r.result)return r.result.assignMetadata(x),r.result;else r.formState&&(h=r.formState)}f=!0}let p={metadata:x,contentType:ey.j9},m=await lH(d,e,t,X,T,h,u,x,f?void 0:l,i);o.invalidDynamicUsageError;let g=(0,rx.C)(o);if(!1!==g){let e=g.finally(()=>{process.env.NEXT_PRIVATE_DEBUG_CACHE&&console.log("pending revalidates promise finished for:",r.href)});s.waitUntil?s.waitUntil(e):p.waitUntil=e}return new ez(m,p)}}let lU=(e,t,r,n,a,i,s,o)=>{var l,u,c;let d,f,h,p,m,g,y,v,b,w;if(!e.url)throw Object.defineProperty(Error("Invalid URL"),"__NEXT_ERROR_CODE",{value:"E182",enumerable:!1,configurable:!0});let S=(0,nG.r)(e.url,void 0,!1),_=(u=e.headers,c={isRoutePPREnabled:!0===i.experimental.isRoutePPREnabled,previewModeId:null==(l=i.previewProps)?void 0:l.previewModeId},p="1"===u[z._V],m="2"===u[z._V],g=void 0!==u[z.sX],v=(y="1"===u[z.hY])&&(!p||!c.isRoutePPREnabled)?function(e){if(void 0!==e){if(Array.isArray(e))throw Object.defineProperty(Error("Multiple router state headers were sent. This is not allowed."),"__NEXT_ERROR_CODE",{value:"E418",enumerable:!1,configurable:!0});if(e.length>4e4)throw Object.defineProperty(Error("The router state header was too large."),"__NEXT_ERROR_CODE",{value:"E142",enumerable:!1,configurable:!0});try{let t=JSON.parse(decodeURIComponent(e));return(0,t3.assert)(t,t5),t}catch{throw Object.defineProperty(Error("The router state header was sent but could not be parsed."),"__NEXT_ERROR_CODE",{value:"E10",enumerable:!1,configurable:!0})}}}(u[z.B]):void 0,b="/_tree"===u[z.qm],{flightRouterState:v,isPrefetchRequest:p,isRuntimePrefetchRequest:m,isRouteTreePrefetchRequest:b,isHmrRefresh:g,isRSCRequest:y,nonce:"string"==typeof(w=u["content-security-policy"]||u["content-security-policy-report-only"])?function(e){let t=e.split(";").map(e=>e.trim()),r=t.find(e=>e.startsWith("script-src"))||t.find(e=>e.startsWith("default-src"));if(r)for(let e of r.split(/\s+/).slice(1)){let t=e.trim().match(t4);if(t)return t[1]}}(w):void 0,previouslyRevalidatedTags:ls(u,c.previewModeId),requestId:f,htmlRequestId:h}),{isPrefetchRequest:E,previouslyRevalidatedTags:R,nonce:k}=_,x=null;if("string"==typeof i.postponed){if(a)throw Object.defineProperty(new eB.z("postponed state should not be provided when fallback params are provided"),"__NEXT_ERROR_CODE",{value:"E592",enumerable:!1,configurable:!0});d=nN(i.ComponentMod.routeModule.userland.loaderTree,i.params??{},r,a),x=function(e,t,r){try{var n,a;let i=null==(n=e.match(/^([0-9]*):/))?void 0:n[1];if(!i)throw Object.defineProperty(Error(`Invariant: invalid postponed state ${e}`),"__NEXT_ERROR_CODE",{value:"E314",enumerable:!1,configurable:!0});let s=parseInt(i),o=e.slice(i.length+1,i.length+s+1),l=nz(e.slice(i.length+s+1),r);try{if("null"===o)return{type:1,renderResumeDataCache:l};if(/^[0-9]/.test(o)){let e=null==(a=o.match(/^([0-9]*)/))?void 0:a[1];if(!e)throw Object.defineProperty(Error(`Invariant: invalid postponed state ${JSON.stringify(o)}`),"__NEXT_ERROR_CODE",{value:"E314",enumerable:!1,configurable:!0});let r=parseInt(e),n=JSON.parse(o.slice(e.length,e.length+r)),i=o.slice(e.length+r);for(let[e,[r,a]]of n){let{treeSegment:[,n]}=nM(t,e,a,null,null);i=i.replaceAll(r,n)}return{type:2,data:JSON.parse(i),renderResumeDataCache:l}}return{type:2,data:JSON.parse(o),renderResumeDataCache:l}}catch(e){return console.error("Failed to parse postponed state",e),{type:1,renderResumeDataCache:l}}}catch(e){return console.error("Failed to parse postponed state",e),{type:1,renderResumeDataCache:nB()}}}(i.postponed,d,i.experimental.maxPostponedStateSizeBytes)}else d=nN(i.ComponentMod.routeModule.userland.loaderTree,i.params??{},r,a);if((null==x?void 0:x.renderResumeDataCache)&&i.renderResumeDataCache)throw Object.defineProperty(new eB.z("postponed state and dev warmup immutable resume data cache should not be provided together"),"__NEXT_ERROR_CODE",{value:"E589",enumerable:!1,configurable:!0});let P=function({page:e,renderOpts:t,isPrefetchRequest:r,buildId:n,deploymentId:a,previouslyRevalidatedTags:i,nonce:s}){let o=!t.shouldWaitOnAllReady&&!t.supportsDynamicResponse&&!t.isDraftMode&&!t.isPossibleServerAction,l=o&&(!!process.env.NEXT_DEBUG_BUILD||"1"===process.env.NEXT_SSG_FETCH_METRICS),u={isStaticGeneration:o,page:e,route:(0,eZ.Yr)(e),incrementalCache:t.incrementalCache||globalThis.__incrementalCache,cacheLifeProfiles:t.cacheLifeProfiles,isBuildTimePrerendering:t.isBuildTimePrerendering,fetchCache:t.fetchCache,isOnDemandRevalidate:t.isOnDemandRevalidate,isDraftMode:t.isDraftMode,isPrefetchRequest:r,buildId:n,deploymentId:a,reactLoadableManifest:(null==t?void 0:t.reactLoadableManifest)||{},assetPrefix:(null==t?void 0:t.assetPrefix)||"",nonce:s,afterContext:function(e){let{waitUntil:t,onClose:r,onAfterTaskError:n}=e;return new tx.AfterContext({waitUntil:t,onClose:r,onTaskError:n})}(t),cacheComponentsEnabled:t.cacheComponents,previouslyRevalidatedTags:i,refreshTagsByCacheKind:function(){let e=new Map,t=(0,tC.fs)();if(t)for(let[r,n]of t)"refreshTags"in n&&e.set(r,tP(async()=>n.refreshTags()));return e}(),runInCleanSnapshot:(0,tT.$p)(),shouldTrackFetchMetrics:l,reactServerErrorsByDigest:new Map};return t.store=u,u}({page:i.routeModule.definition.page,renderOpts:i,isPrefetchRequest:E,buildId:o.buildId,deploymentId:o.deploymentId,previouslyRevalidatedTags:R,nonce:k});return A.workAsyncStorage.run(P,lL,e,t,S,r,n,i,P,_,x,s,o,d,a)};function lF(e,t,r){e.collectedTags&&(t.fetchTags=e.collectedTags.join(","));let n=String(e.collectedStale);t.headers??={},t.headers[z.UK]=n,!1===r.forceStatic||0===e.collectedRevalidate?t.cacheControl={revalidate:0,expire:void 0}:t.cacheControl={revalidate:!(e.collectedRevalidate>=ey.AR)&&e.collectedRevalidate,expire:e.collectedExpire>=ey.AR?void 0:e.collectedExpire},0===t.cacheControl.revalidate&&(t.staticBailoutInfo={description:r.dynamicUsageDescription,stack:r.dynamicUsageStack})}async function lH(e,t,r,n,a,i,s,l,u,c){let{assetPrefix:d,htmlRequestId:f,nonce:h,pagePath:p,renderOpts:m,requestId:g,workStore:y}=n,{basePath:v,buildManifest:b,ComponentMod:{createElement:w},crossOrigin:S,experimental:_,isBuildTimePrerendering:E=!1,onInstrumentationRequestError:R,page:k,reactMaxHeadersLength:x,setReactDebugChannel:P,shouldWaitOnAllReady:C,subresourceIntegrityManifest:A,supportsDynamicResponse:O,cacheComponents:I}=m,{cachedNavigations:D}=m.experimental,{ServerInsertedHTMLProvider:N,renderServerInsertedHTML:M}=rV(),U=oW(h),F=oB((0,j.getTracer)().getTracePropagationData(),_.clientTraceMetadata),H=b.polyfillFiles.filter(e=>e.endsWith(".js")&&!e.endsWith(".module.js")).map(e=>({src:`${d}/_next/${e}${r6(n,!1)}`,integrity:null==A?void 0:A[e],crossOrigin:S,noModule:!0,nonce:h})),[B,z]=rJ(b,d,S,A,r6(n,!0),h,k),q,X=(0,j.getTracer)().startSpan(`render route (app) ${p}`,{attributes:{"next.span_name":`render route (app) ${p}`,"next.span_type":$.Wc.getBodyResult,"next.route":p}}),V=e=>{X.isRecording()&&(e instanceof Error&&(X.recordException(e),X.setAttribute("error.type",e.name)),X.setStatus({code:j.SpanStatusCode.ERROR,message:e instanceof Error?e.message:void 0}),X.end())};return(0,j.getTracer)().withSpan(X,async()=>{var u,c;let w,{reactServerErrorsByDigest:k}=y,j=tZ(!1,E,k,function(e,r){return null==R?void 0:R(e,t,lE(n,"react-server-components"),r)},X),$=[],W=t0(!1,E,k,$,function(e){return null==R?void 0:R(e,t,lE(n,"server-rendering"),!1)},X),G=null,J=r.setHeader.bind(r),K=r.appendHeader.bind(r),{clientModules:Z}=e4();try{if(I&&D){let t,i,{renderToReadableStream:s}=n.componentMod,l=oq(_),u=new oz,c=new nd.V(null,null,!1);e.stale=ey.AR,e.stagedRendering=c,oX(e,u,l);let d=new Promise(e=>{t=e});if(await lc(a)){let t=nB();e.prerenderResumeDataCache=t;let r=new oH;(0,lo.trackPendingModules)(r),e.cacheSignal=r;let a=new TransformStream;i=a.readable,r.cacheReady().then(()=>lx(a.writable,n,t,e,j))}let f=await eQ.workUnitAsyncStorage.run(e,l$,a,n,{is404:404===r.statusCode,staleTimeIterable:u,staticStageByteLengthPromise:d,runtimePrefetchStream:i}),h=await oU(()=>{c.advanceStage(nd.D.Static);let[r,n]=eQ.workUnitAsyncStorage.run(e,s,f,Z,{onError:j,filterStackFrame:o}).tee();return lz(n,c).then(t),r},()=>{oV(u)},()=>{c.advanceStage(nd.D.Dynamic)});G=new tt(h)}else{let t=await eQ.workUnitAsyncStorage.run(e,l$,a,n,{is404:404===r.statusCode}),i=P&&ly();if(i){let[e,t]=i.clientSide.readable.tee();w=e,P({readable:t},f,g)}G=new tt(eQ.workUnitAsyncStorage.run(e,tf,n.componentMod,t,Z,{filterStackFrame:o,onError:j,debugChannel:null==i?void 0:i.serverSide}))}if(await L(),"string"==typeof m.postponed){if((null==s?void 0:s.type)===nq.DATA){let e=tl(G.tee(),h,i);return X.isRecording()&&X.end(),Y(e,Q(el))}else if(s){let{postponed:t,preludeState:r}=function(e){let[t,r]=e.data;return{preludeState:t,postponed:r}}(s),a=(0,T.jsx)(lN,{reactServerStream:G.tee(),reactDebugStream:w,debugEndTime:void 0,preinitScripts:B,ServerInsertedHTMLProvider:N,nonce:h,images:n.renderOpts.images}),o=rK({polyfills:H,renderServerInsertedHTML:M,serverCapturedErrors:$,basePath:v,tracingMetadata:F}),{stream:l,allReady:u}=await eQ.workUnitAsyncStorage.run(e,tm,a,t,{onError:W,nonce:h});return u.finally(()=>{X.isRecording()&&X.end()}),await eg(l,{delayDataUntilFirstHtmlChunk:r===nX.Empty,inlinedDataStream:tl(G.consume(),h,i),getServerInsertedHTML:o,getServerInsertedMetadata:U,deploymentId:n.sharedContext.deploymentId})}}let t=rK({polyfills:H,renderServerInsertedHTML:M,serverCapturedErrors:$,basePath:v,tracingMetadata:F}),l=(0,T.jsx)(lN,{reactServerStream:G.tee(),reactDebugStream:w,debugEndTime:void 0,preinitScripts:B,ServerInsertedHTMLProvider:N,nonce:h,images:n.renderOpts.images}),{stream:c,allReady:d}=await eQ.workUnitAsyncStorage.run(e,tp,l,{onError:W,nonce:h,onHeaders:e=>{e.forEach((e,t)=>{K(t,e)})},maxHeadersLength:x,bootstrapScriptContent:q,bootstrapScripts:[z],formState:i});return d.finally(()=>{X.isRecording()&&X.end()}),await (u={inlinedDataStream:tl(G.consume(),h,i),isStaticGeneration:!0!==O||!!C,allReady:d,deploymentId:n.sharedContext.deploymentId,getServerInsertedHTML:t,getServerInsertedMetadata:U,validateRootLayout:!1},ef(c,u))}catch(y){let t,s,u;if((0,nf.l)(y)||"object"==typeof y&&null!==y&&"message"in y&&"string"==typeof y.message&&y.message.includes("https://nextjs.org/docs/advanced-features/static-html-export"))throw V(y),y;let f=(0,tz.C)(y);if(f){let e=tH(y);throw rS(`${y.reason} should be wrapped in a suspense boundary at page "${p}". Read more: https://nextjs.org/docs/messages/missing-suspense-with-csr-bailout +${e}`),V(y),y}if((0,tA.RM)(y))r.statusCode=(0,tA.jT)(y),l.statusCode=r.statusCode,t=(0,tA.qe)(r.statusCode);else if((0,tO.n)(y)){t="redirect",r.statusCode=tI(y),l.statusCode=r.statusCode;let n=e_(tj(y),v),a=new Headers;(0,tS.IN)(a,e.mutableCookies)&&J("set-cookie",Array.from(a.values())),J("location",n)}else f||(r.statusCode=500,l.statusCode=r.statusCode);let[m,g]=rJ(b,d,S,A,r6(n,!1),h,"/_not-found/page");try{if(s=await eQ.workUnitAsyncStorage.run(e,lD,a,n,k.has(y.digest)?null:y,t),u=eQ.workUnitAsyncStorage.run(e,tf,n.componentMod,s,Z,{filterStackFrame:o,onError:j}),null===G)throw V(y),y}catch(e){throw V(e),e}try{let{stream:t,allReady:r}=await eQ.workUnitAsyncStorage.run(e,tp,(0,T.jsx)(lM,{reactServerStream:u,ServerInsertedHTMLProvider:N,preinitScripts:m,nonce:h,images:n.renderOpts.images}),{nonce:h,bootstrapScriptContent:q,bootstrapScripts:[g],formState:i});return r.finally(()=>{X.isRecording()&&X.end()}),await (c={inlinedDataStream:tl(G.consume(),h,i),isStaticGeneration:!0!==O||!!C,deploymentId:n.sharedContext.deploymentId,getServerInsertedHTML:rK({polyfills:H,renderServerInsertedHTML:M,serverCapturedErrors:[],basePath:v,tracingMetadata:F}),getServerInsertedMetadata:U,validateRootLayout:!1},ef(t,c))}catch(e){throw V(e),e}}})}async function lB(e,t,r){let n=[],a=[],i=[],s=e.getReader(),o=!1;function l(){o||(o=!0,s.cancel())}r&&r.addEventListener("abort",l,{once:!0});try{for(;!o;){let{done:e,value:r}=await s.read();if(e){l();break}switch(t.currentStage){case nd.D.Before:throw Object.defineProperty(new eB.z("Unexpected stream chunk while in Before stage"),"__NEXT_ERROR_CODE",{value:"E942",enumerable:!1,configurable:!0});case nd.D.EarlyStatic:case nd.D.Static:n.push(r);case nd.D.EarlyRuntime:case nd.D.Runtime:a.push(r);case nd.D.Dynamic:i.push(r);break;case nd.D.Abandoned:break;default:t.currentStage}}}catch(e){if(!o)throw e}return{staticChunks:n,runtimeChunks:a,dynamicChunks:i}}async function lz(e,t){let r=0,n=e.getReader();for(t.onStage(nd.D.EarlyRuntime,()=>{n.cancel()});;){let{done:e,value:a}=await n.read();if(e)break;if(t.currentStage<=nd.D.Static)r+=a.byteLength;else{n.cancel();break}}return r}function lq(e,t,r,n){return{cookies:e.delayUntilStage(nd.D.Runtime,"cookies",t),earlyCookies:e.delayUntilStage(nd.D.EarlyRuntime,"cookies",t),mutableCookies:e.delayUntilStage(nd.D.Runtime,"cookies",r),earlyMutableCookies:e.delayUntilStage(nd.D.EarlyRuntime,"cookies",r),headers:e.delayUntilStage(nd.D.Runtime,"headers",n),earlyHeaders:e.delayUntilStage(nd.D.EarlyRuntime,"headers",n),sharedParamsParent:e.delayUntilStage(nd.D.Runtime,void 0,""),earlySharedParamsParent:e.delayUntilStage(nd.D.EarlyRuntime,void 0,""),sharedSearchParamsParent:e.delayUntilStage(nd.D.Runtime,void 0,""),earlySharedSearchParamsParent:e.delayUntilStage(nd.D.EarlyRuntime,void 0,""),connection:e.delayUntilStage(nd.D.Dynamic,"connection",void 0)}}async function lX(e,t,r,n,i,s,o,l,u){let c,{implicitTags:d,nonce:f,workStore:h}=o,p=new AbortController,m=new AbortController,g=new AbortController,{ServerInsertedHTMLProvider:y}=rV();c="prerender-client"===e?{type:"prerender-client",phase:"render",rootParams:n,fallbackRouteParams:i,implicitTags:d,renderSignal:g.signal,controller:p,cacheSignal:null,dynamicTracking:null,allowEmptyStaticShell:s,revalidate:ey.AR,expire:ey.AR,stale:ey.AR,tags:[...d.tags],prerenderResumeDataCache:null,renderResumeDataCache:null,hmrRefreshHash:void 0,varyParamsAccumulator:null}:{type:"validation-client",phase:"render",rootParams:n,implicitTags:d,renderSignal:g.signal,controller:p,cacheSignal:null,dynamicTracking:null,revalidate:ey.AR,expire:ey.AR,stale:ey.AR,tags:[...d.tags],prerenderResumeDataCache:null,renderResumeDataCache:null,hmrRefreshHash:void 0,varyParamsAccumulator:null,boundaryState:null,validationSamples:l,validationSampleTracking:u,fallbackRouteParams:i};let v=function(e,t,r){{let{Readable:n}=a("node:stream"),i=0,s=new n({read(){for(;i{for(;i{s.push(null)})},{once:!0}),s}}(t,r,m.signal),b=eQ.workUnitAsyncStorage.run(c,ty,(0,T.jsx)(lN,{reactServerStream:v,reactDebugStream:void 0,debugEndTime:void 0,preinitScripts:()=>{},ServerInsertedHTMLProvider:y,nonce:f,images:o.renderOpts.images}),{signal:m.signal,onError:e=>{let t=tQ(e);return t||(tK(e)?void console.error(e):void(m.signal.aborted||(process.env.NEXT_DEBUG_BUILD||process.env.__NEXT_VERBOSE_LOGGING)&&oI(e,h.route,o$.ProspectiveRender)))}});m.signal.addEventListener("abort",()=>{g.abort()},{once:!0}),b.catch(e=>{m.signal.aborted||(0,tV.AA)(e)||(process.env.NEXT_DEBUG_BUILD||process.env.__NEXT_VERBOSE_LOGGING)&&oI(e,h.route,o$.ProspectiveRender)});let w=new oH;(0,lo.trackPendingModules)(w),await w.cacheReady(),m.abort()}async function lV(e,t,r,n,i,s,o,l){let u="1"===process.env.NEXT_PRIVATE_DEBUG_VALIDATION?console.log:void 0,{createCombinedPayloadAtDepth:c,createCombinedPayloadStream:d,collectStagedSegmentData:f,discoverValidationDepths:h}=s.componentMod.InstantValidation(),{createValidationSampleTracking:p}=a("./dist/esm/server/app-render/instant-validation/instant-samples.js");null==u||u("\nStarting depth-based instant validation...");let m=s.componentMod.routeModule.userland.loaderTree,g=e4(),{cache:y,payload:v,stageEndTimes:b}=await f({[nd.D.Static]:e.staticChunks,[nd.D.Runtime]:e.runtimeChunks,[nd.D.Dynamic]:e.dynamicChunks},t,r,!0,g),{implicitTags:w,nonce:S,workStore:_}=s,E=!!s.renderOpts.setReactDebugChannel;async function R(e,t){return k(e,t,null)}async function k(e,t,a){let u,f=new AbortController,h={expectedIds:new Set,renderedIds:new Set},R=!1;if(a)for(let e of(R=!0,a.expectedIds))h.expectedIds.add(e);let x=await c(v,y,m,s.getDynamicParamFromSegment,s.query,e,t,f.signal,h,g,b,R);if(null===x)return null;let P=new AbortController,C=new AbortController,A=()=>{},{ServerInsertedHTMLProvider:O}=rV(),{stream:j,debugStream:$}=await d(x.payload,f,P.signal,g,r,E),I=(0,tV.md)(x.createInstantStack),D=null!==l?p():null,N=(0,tV.uO)(!1),M={type:"validation-client",phase:"render",rootParams:n,implicitTags:w,renderSignal:C.signal,controller:P,cacheSignal:null,dynamicTracking:N,revalidate:ey.AR,expire:ey.AR,stale:ey.AR,tags:[...w.tags],prerenderResumeDataCache:null,renderResumeDataCache:null,hmrRefreshHash:o,varyParamsAccumulator:null,boundaryState:h,fallbackRouteParams:i,validationSamples:l,validationSampleTracking:D};try{let{prelude:e}=await oU(()=>{let e=eQ.workUnitAsyncStorage.run(M,ty,(0,T.jsx)(lN,{reactServerStream:j,reactDebugStream:$??void 0,debugEndTime:void 0,preinitScripts:A,ServerInsertedHTMLProvider:O,nonce:S,images:s.renderOpts.images}),{signal:P.signal,onError:(e,t)=>{if((0,tV.AA)(e)||P.signal.aborted){let e=t.componentStack;"string"==typeof e&&(0,tV.g)(_,e,I,N,x.hasAmbiguousErrors?tV.Q.Runtime:tV.Q.Dynamic,h);return}if(!P.signal.aborted){let r=t.componentStack;if("string"==typeof r){let t=e;if(e&&"object"==typeof e&&"digest"in e&&"string"==typeof e.digest){let r=_.reactServerErrorsByDigest.get(e.digest);void 0!==r&&(t=r)}(0,tV.n1)(_,I,t,r)}}return tK(e)?void console.error(e):tQ(e)}});return P.signal.addEventListener("abort",()=>{C.abort()},{once:!0}),e},()=>{P.abort()}),{preludeIsEmpty:t}=await to(e);u=(0,tV.Jr)(_,t?tV.r0.Empty:tV.r0.Full,I,D,h)}catch(e){u=(0,tV.Jr)(_,tV.r0.Errored,I,D,h)}if(0===u.length)return[];if(null===a&&x.hasAmbiguousErrors){let r=await k(e,t,h);if(null!==r&&r.length>0)return r}return u}let x=h(m),P=x.length;for(let e=P-1;e>=0;e--){let t=x[e];for(let r=t;r>=0;r--){null==u||u(`Trying depth ${e}`+(r>0?` + groupDepth ${r}...`:"..."));let t=await R(e,r);if(null===t){null==u||u(` No config at depth ${e}+${r}, skipping.`);continue}if(t.length>0)return null==u||u(` Depth ${e}+${r}: ❌ Failed (${t.length} errors)`),t;null==u||u(` Depth ${e}+${r}: ✅ Passed`)}}return null==u||u(`✅ All depths passed`),[]}async function lW(e,t,r,n,a,i){let{componentMod:s}=e,{clientModules:l}=e4(),u=-1/0,c=t,d=new oH;(0,lo.trackPendingModules)(d);let f=i?nB(i):nB(),h=new AbortController,p=new AbortController,m=new AbortController,g=new nd.V(p.signal,m,!0);c.prerenderResumeDataCache=f,c.renderResumeDataCache=null,c.stagedRendering=g,c.cacheSignal=d,c.asyncApiPromises=lq(g,c.cookies,c.mutableCookies,c.headers),c.controller=void 0,c.renderSignal=void 0;let y=await n(c),v=e=>{!0===m.signal.aborted||(d.hasPendingReads()?m.abort():g.advanceStage(e))},b=await oU(()=>{g.advanceStage(nd.D.EarlyStatic),u=performance.now()+performance.timeOrigin;let e=eQ.workUnitAsyncStorage.run(c,tf,s,y,l,{onError:a(h.signal,!1),startTime:u,filterStackFrame:o,signal:h.signal});h.signal.addEventListener("abort",()=>{let{reason:e}=h.signal;p.abort(e)},{once:!0});let t=lB(e,g,p.signal);return t.catch(()=>{}),{accumulatedChunksPromise:t}},()=>{v(nd.D.Static)},()=>{v(nd.D.EarlyRuntime)},()=>{v(nd.D.Runtime)},()=>{v(nd.D.Dynamic)});if(g.currentStage!==nd.D.Abandoned)return{accumulatedChunksPromise:b.accumulatedChunksPromise,startTime:u,stageController:g,requestStore:c};await d.cacheReady(),h.abort(),c=r();let w=new AbortController,S=new AbortController,_=new nd.V(S.signal,null,!0);c.prerenderResumeDataCache=null,c.renderResumeDataCache=nz(f),c.stagedRendering=_,c.cacheSignal=null,c.asyncApiPromises=lq(_,c.cookies,c.mutableCookies,c.headers),c.controller=w,c.renderSignal=S.signal;let E=await n(c);return{accumulatedChunksPromise:(await oU(()=>{_.advanceStage(nd.D.EarlyStatic),u=performance.now()+performance.timeOrigin;let e=eQ.workUnitAsyncStorage.run(c,tf,s,E,l,{onError:a(w.signal,!0),startTime:u,filterStackFrame:o,signal:w.signal});w.signal.addEventListener("abort",()=>{S.abort(w.signal.reason)},{once:!0});let t=lB(e,_,null);return t.catch(()=>{}),{accumulatedChunksPromise:t}},()=>{_.advanceStage(nd.D.Static)},()=>{_.advanceStage(nd.D.EarlyRuntime)},()=>{_.advanceStage(nd.D.Runtime)},()=>{_.advanceStage(nd.D.Dynamic)})).accumulatedChunksPromise,startTime:u,stageController:_,requestStore:c}}async function lG(e,t){let r=async()=>{let r;try{r=await A.workAsyncStorage.exit(async()=>lJ(e,t))}catch(e){console.error(Object.defineProperty(new eB.z("An unexpected error occcured during instant validation",{cause:e}),"__NEXT_ERROR_CODE",{value:"E1097",enumerable:!1,configurable:!0})),r=!1}if(!r)throw console.error("Stopping prerender due to instant validation errors."),new nf.f};if(!process.env.__NEXT_TEST_MODE||!process.env.NEXT_TEST_LOG_VALIDATION)return await r();{let t=Date.now(),n=e.workStore.route;console.error(""+JSON.stringify({type:"validation_start",requestId:t,url:n})+"");try{return await r()}finally{console.error(""+JSON.stringify({type:"validation_end",requestId:t,url:n})+"")}}}async function lJ(e,t){let r="1"===process.env.NEXT_PRIVATE_DEBUG_VALIDATION?console.log:void 0,{workStore:n}=e,a=n.route,i=e.componentMod.routeModule.userland.loaderTree,s=await lm(i);s&&0!==s.length||(s=[{}]),null==r||r("Resolved samples:",s);let o=function(e,t){let r=n$(e,!0),{pathnameRouteParamSegments:n,params:a}=function(e,t){let r=[],n={},a=[{tree:e,depth:0,currentPath:[]}];for(;a.length>0;){let{tree:e,depth:i,currentPath:s}=a.shift(),{segment:o,parallelRoutes:l}=r3(e),u=s,c=i,d=nj(o);if(d&&"route-group"!==d.type&&"parallel-route"!==d.type&&(u=[...s,d],c=i+1),(null==d?void 0:d.type)==="dynamic"){let{paramName:e,paramType:a}=d.param;if(i({paramName:e,paramType:t}));!function(e,t,r,n){let a=[{tree:e,depth:0}];for(;a.length>0;){let{tree:e,depth:i}=a.pop(),{segment:s,parallelRoutes:o}=r3(e),l=nj(s);if((null==l?void 0:l.type)==="dynamic"&&!t.hasOwnProperty(l.param.paramName)&&!n.some(e=>e.paramName===l.param.paramName)){let{paramName:e,paramType:a}=l.param,s=nD(e,a,i,r,t);void 0!==s?t[e]=s:"optional-catchall"!==a&&n.push({paramName:e,paramType:a})}let u=i;for(let e of(l&&"route-group"!==l.type&&"parallel-route"!==l.type&&u++,Object.values(o)))a.push({tree:e,depth:u})}}(t.userland.loaderTree,a,r,i);if(0===i.length)return null;let s=Math.random().toString(16).slice(2),o=new Map;for(let{paramName:e,paramType:t}of i)o.set(e,[`%%drp:${e}:${s}%%`,t1[t]]);return o}(a,e.componentMod.routeModule);for(let n=0;nlK(e,l,o,t))}catch(e){if((0,tY.R)(e))i=[e];else throw e}if(i.length>0){null==r||r(`❌ Sample failed validation (${i.length} errors)`);let e=s.length>1?` (sample ${n+1} of ${s.length})`:"";for(let e of i)console.error(e);return console.error(`Build-time instant validation failed for route "${a}"${e}.`),!1}null==r||r("✅ Sample validated successfully")}return!0}async function lK(e,t,r,n){let i,s,{workStore:o}=e,l=e.componentMod.routeModule.userland.loaderTree,u=o.route,{createCookiesFromSample:c,createHeadersFromSample:d,createDraftModeForValidation:f,createRelativeURLFromSamples:h,createValidationSampleTracking:p}=a("./dist/esm/server/app-render/instant-validation/instant-samples.js"),m=h(u,t.params,t.searchParams),g=t.params??{},y=null;if(r){let e=new Map;for(let[t,n]of r)t in g||e.set(t,n);y=e}let v=lw(g,y,!1),b=nx(l,v);({query:s,...i}=m);let{AfterContext:w}=a("./dist/esm/server/after/after-context.js"),S={isStaticGeneration:!1,page:o.page,route:o.route,incrementalCache:o.incrementalCache,cacheLifeProfiles:o.cacheLifeProfiles,isBuildTimePrerendering:!1,fetchCache:o.fetchCache,isOnDemandRevalidate:!1,isDraftMode:!1,isPrefetchRequest:!1,buildId:o.buildId,deploymentId:o.deploymentId,reactLoadableManifest:o.reactLoadableManifest,assetPrefix:o.assetPrefix,nonce:o.nonce,afterContext:new w({waitUntil(e){e.catch(()=>{})},onClose(){},onTaskError(){}}),cacheComponentsEnabled:o.cacheComponentsEnabled,previouslyRevalidatedTags:[],refreshTagsByCacheKind:new Map,runInCleanSnapshot:o.runInCleanSnapshot,shouldTrackFetchMetrics:!1,reactServerErrorsByDigest:new Map};return A.workAsyncStorage.run(S,async()=>{let r={componentMod:e.componentMod,url:i,renderOpts:e.renderOpts,workStore:S,parsedRequestHeaders:e.parsedRequestHeaders,getDynamicParamFromSegment:v,interpolatedParams:g,query:s,isPrefetch:!1,isPossibleServerAction:!1,requestTimestamp:e.requestTimestamp,appUsingSizeAdjustment:e.appUsingSizeAdjustment,flightRouterState:void 0,requestId:e.requestId,htmlRequestId:e.htmlRequestId,pagePath:e.pagePath,assetPrefix:e.assetPrefix,isNotFoundPath:e.isNotFoundPath,nonce:e.nonce,res:e.res,sharedContext:e.sharedContext,implicitTags:e.implicitTags},a={params:t.params,searchParams:t.searchParams},o=()=>{let r=c(t.cookies,u),n=new e$.VO(new Headers),i=d(t.headers,t.cookies,u),s=f();return{type:"request",phase:"render",implicitTags:e.implicitTags,url:{pathname:m.pathname,search:m.search},headers:i,cookies:r,mutableCookies:n,userspaceMutableCookies:n,draftMode:s,rootParams:b,validationSamples:a,validationSampleTracking:p(),renderResumeDataCache:null,prerenderResumeDataCache:null,stagedRendering:null,asyncApiPromises:void 0}},h=tZ(!0,!0,S.reactServerErrorsByDigest,()=>{}),{accumulatedChunksPromise:w,startTime:_,stageController:E,requestStore:R}=await lW(r,o(),o,e=>eQ.workUnitAsyncStorage.run(e,l$,l,r,{is404:!1}),e=>function(t){let r=tQ(t);return r||(e.aborted?void 0:h(t))},n),k=await w,x=R.validationSampleTracking;if(x.missingSampleErrors.length>0)return x.missingSampleErrors;if(E.currentStage===nd.D.Abandoned&&E.syncInterruptReason)return[E.syncInterruptReason];let P=(r.renderOpts.allowEmptyStaticShell??!1)||await ld(l),C=p();return(await lX("validation-client",k.dynamicChunks,k.dynamicChunks,b,y,P,r,a,C),C.missingSampleErrors.length>0)?C.missingSampleErrors:await lV(k,null,_,b,y,r,void 0,a)})}function lY(e){let{isStaticGeneration:t}=e;return!!t}async function lQ(e,t,r,n,a,i){var s,l,u;let{assetPrefix:c,getDynamicParamFromSegment:d,implicitTags:f,nonce:h,pagePath:p,renderOpts:m,workStore:g}=r,{basePath:y,buildManifest:v,ComponentMod:b,crossOrigin:w,experimental:S,isDebugDynamicAccesses:_,isBuildTimePrerendering:E=!1,onInstrumentationRequestError:R,page:k,reactMaxHeadersLength:x,subresourceIntegrityManifest:P,cacheComponents:C}=m,{cachedNavigations:A}=m.experimental,O=(m.allowEmptyStaticShell??!1)||await ld(a),$=nx(a,d),{ServerInsertedHTMLProvider:I,renderServerInsertedHTML:D}=rV(),N=oW(h),M=oB((0,j.getTracer)().getTracePropagationData(),S.clientTraceMetadata),L=v.polyfillFiles.filter(e=>e.endsWith(".js")&&!e.endsWith(".module.js")).map(e=>({src:`${c}/_next/${e}${r6(r,!1)}`,integrity:null==P?void 0:P[e],crossOrigin:w,noModule:!0,nonce:h})),[U,F]=rJ(v,c,w,P,r6(r,!0),h,k),{reactServerErrorsByDigest:H}=g,B=!S.isRoutePPREnabled,z=tZ(!1,E,H,function(t,n){if(B)return null==R?void 0:R(t,e,lE(r,"react-server-components"),n)}),q=[],X=t0(!1,E,H,q,function(t){if(B)return null==R?void 0:R(t,e,lE(r,"server-rendering"),!1)}),V=null,W=e=>{n.headers??={},n.headers[e]=t.getHeader(e)},G=(e,r)=>{Array.isArray(r)?r.forEach(r=>{t.appendHeader(e,r)}):t.appendHeader(e,r),W(e)},J=oq(S),{clientModules:K}=e4(),Q=null;try{if(C){let e,s,l=new AbortController,u=new AbortController,c=new AbortController,d=new oH,p=nB(),v=m.renderResumeDataCache??null,w={type:"prerender",phase:"render",rootParams:$,fallbackRouteParams:i,implicitTags:f,renderSignal:c.signal,controller:new AbortController,cacheSignal:d,dynamicTracking:null,allowEmptyStaticShell:O,revalidate:ey.AR,expire:ey.AR,stale:ey.AR,tags:[...f.tags],prerenderResumeDataCache:p,renderResumeDataCache:v,hmrRefreshHash:void 0,varyParamsAccumulator:null},S=await eQ.workUnitAsyncStorage.run(w,l$,a,r,{is404:404===t.statusCode}),E=Q={type:"prerender",phase:"render",rootParams:$,fallbackRouteParams:i,implicitTags:f,renderSignal:c.signal,controller:l,cacheSignal:d,dynamicTracking:null,allowEmptyStaticShell:O,revalidate:ey.AR,expire:ey.AR,stale:ey.AR,tags:[...f.tags],prerenderResumeDataCache:p,renderResumeDataCache:v,hmrRefreshHash:void 0,varyParamsAccumulator:null},R={filterStackFrame:o,onError:e=>{let t=tQ(e);return t||(tK(e)?void console.error(e):l.signal.aborted?void 0:void((process.env.NEXT_DEBUG_BUILD||process.env.__NEXT_VERBOSE_LOGGING)&&oI(e,g.route,o$.ProspectiveRender)))},signal:u.signal},k=eQ.workUnitAsyncStorage.run(E,tg(b),S,K,R);if(u.signal.addEventListener("abort",()=>{c.abort(),l.abort()},{once:!0}),(0,lo.trackPendingModules)(d),await d.cacheReady(),u.abort(),g.invalidDynamicUsageError)throw(0,tV.gR)(g,g.invalidDynamicUsageError),new nf.f;try{e=await tr(k)}catch(e){u.signal.aborted||l.signal.aborted||(process.env.NEXT_DEBUG_BUILD||process.env.__NEXT_VERBOSE_LOGGING)&&oI(e,g.route,o$.ProspectiveRender)}if(e){let t=new AbortController,n=new AbortController,a=new AbortController,s={type:"prerender-client",phase:"render",rootParams:$,fallbackRouteParams:i,implicitTags:f,renderSignal:a.signal,controller:t,cacheSignal:null,dynamicTracking:null,allowEmptyStaticShell:O,revalidate:ey.AR,expire:ey.AR,stale:ey.AR,tags:[...f.tags],prerenderResumeDataCache:p,renderResumeDataCache:v,hmrRefreshHash:void 0,varyParamsAccumulator:null},o=eQ.workUnitAsyncStorage.run(s,ty,(0,T.jsx)(lN,{reactServerStream:e.asUnclosingStream(),reactDebugStream:void 0,debugEndTime:void 0,preinitScripts:U,ServerInsertedHTMLProvider:I,nonce:h,images:r.renderOpts.images}),{signal:n.signal,onError:e=>{let t=tQ(e);return t||(tK(e)?void console.error(e):void(n.signal.aborted||(process.env.NEXT_DEBUG_BUILD||process.env.__NEXT_VERBOSE_LOGGING)&&oI(e,g.route,o$.ProspectiveRender)))},bootstrapScripts:[F]});n.signal.addEventListener("abort",()=>{a.abort()},{once:!0}),o.catch(e=>{n.signal.aborted||(0,tV.AA)(e)||(process.env.NEXT_DEBUG_BUILD||process.env.__NEXT_VERBOSE_LOGGING)&&oI(e,g.route,o$.ProspectiveRender)}),(0,lo.trackPendingModules)(d),await d.cacheReady(),n.abort()}m.renderResumeDataCache&&(v=nz(p));let P=new AbortController,j=new AbortController,B=ng(),W={type:"prerender",phase:"render",rootParams:$,fallbackRouteParams:i,implicitTags:f,renderSignal:j.signal,controller:new AbortController,cacheSignal:null,dynamicTracking:null,allowEmptyStaticShell:O,revalidate:ey.AR,expire:ey.AR,stale:ey.AR,tags:[...f.tags],prerenderResumeDataCache:p,renderResumeDataCache:v,hmrRefreshHash:void 0,varyParamsAccumulator:B},Z=await eQ.workUnitAsyncStorage.run(W,l$,a,r,{is404:404===t.statusCode});A&&(Z.s=s=new oz);let ee=(0,tV.uO)(_),er=!1,en=Q={type:"prerender",phase:"render",rootParams:$,fallbackRouteParams:i,implicitTags:f,renderSignal:j.signal,controller:P,cacheSignal:null,dynamicTracking:ee,allowEmptyStaticShell:O,revalidate:ey.AR,expire:ey.AR,stale:ey.AR,tags:[...f.tags],prerenderResumeDataCache:p,renderResumeDataCache:v,hmrRefreshHash:void 0,varyParamsAccumulator:B};void 0!==s&&oX(en,s,J);let ea=!0,ei={filterStackFrame:o,onError:e=>z(e),signal:P.signal},es=async()=>{let e=[nv(B)];if(void 0!==s&&e.push(oV(s)),await Promise.all(e),P.signal.aborted){er=!0;return}ea&&(er=!0),P.abort()},eo=async()=>{let e=eQ.workUnitAsyncStorage.run(en,tg(b),Z,K,ei);P.signal.addEventListener("abort",()=>{j.abort()},{once:!0});let t=await e;return ea=!1,t},el=V=await tr(oU(eo,es)),eu=(0,tV.uO)(_),ec=new AbortController,ed=new AbortController,ef={type:"prerender-client",phase:"render",rootParams:$,fallbackRouteParams:i,implicitTags:f,renderSignal:ed.signal,controller:ec,cacheSignal:null,dynamicTracking:eu,allowEmptyStaticShell:O,revalidate:ey.AR,expire:ey.AR,stale:ey.AR,tags:[...f.tags],prerenderResumeDataCache:p,renderResumeDataCache:v,hmrRefreshHash:void 0,varyParamsAccumulator:null},eg=(0,tV.Wt)(),ev=tc(G),{prelude:eb,postponed:ew}=await oU(()=>{let e=eQ.workUnitAsyncStorage.run(ef,ty,(0,T.jsx)(lN,{reactServerStream:el.asUnclosingStream(),reactDebugStream:void 0,debugEndTime:void 0,preinitScripts:U,ServerInsertedHTMLProvider:I,nonce:h,images:r.renderOpts.images}),{signal:ec.signal,onError:(e,t)=>{if((0,tV.AA)(e)||ec.signal.aborted){let e=t.componentStack;"string"==typeof e&&(0,tV.Pe)(g,e,eg,eu);return}return X(e,t)},onHeaders:ev,maxHeadersLength:x,bootstrapScripts:[F]});return ec.signal.addEventListener("abort",()=>{ed.abort()},{once:!0}),e},()=>{ec.abort()}),{prelude:eS,preludeIsEmpty:e_}=await to(eb);O||(0,tV.V2)(g,e_?tV.r0.Empty:tV.r0.Full,eg,ee);let eE=rK({polyfills:L,renderServerInsertedHTML:D,serverCapturedErrors:q,basePath:y,tracingMetadata:M});n.flightData=await et(A?lT(el.asStream(),er):el.asStream());let eR=A?n.flightData.subarray(1):n.flightData;if(await l0(eR,en,b,m,r.pagePath,n),er){null!=ew?n.postponed=await nV(ew,e_?nX.Empty:nX.Full,i,p,C):n.postponed=await nW(p,C),el.consume();let e={getServerInsertedHTML:eE,getServerInsertedMetadata:N,deploymentId:r.sharedContext.deploymentId};return{digestErrorsMap:H,ssrErrors:q,stream:await eh(eS,e),dynamicAccess:(0,tV.yI)(ee,eu),collectedRevalidate:en.revalidate,collectedExpire:en.expire,collectedStale:J(en.stale),collectedTags:en.tags,renderResumeDataCache:nz(p)}}{let e;if(g.forceDynamic)throw Object.defineProperty(new nf.f('Invariant: a Page with `dynamic = "force-dynamic"` did not trigger the dynamic pathway. This is a bug in Next.js'),"__NEXT_ERROR_CODE",{value:"E598",enumerable:!1,configurable:!0});let t=eS;if(null!=ew){let e=tu(),n=await td((0,T.jsx)(lN,{reactServerStream:e,reactDebugStream:void 0,debugEndTime:void 0,preinitScripts:()=>{},ServerInsertedHTMLProvider:I,nonce:h,images:r.renderOpts.images}),JSON.parse(JSON.stringify(ew)),{signal:(0,tV.kb)(),onError:X,nonce:h});t=Y(eS,n)}if(i&&i.size>0){let n=await tn(tf(b,[],K,{filterStackFrame:o,onError:z}));e=await em(t,{inlinedDataStream:tl(n.consumeAsStream(),h,null),getServerInsertedHTML:eE,getServerInsertedMetadata:N,deploymentId:r.sharedContext.deploymentId})}else e=await ep(t,{inlinedDataStream:tl(el.consumeAsStream(),h,null),getServerInsertedHTML:eE,getServerInsertedMetadata:N,deploymentId:r.sharedContext.deploymentId});return{digestErrorsMap:H,ssrErrors:q,stream:e,dynamicAccess:(0,tV.yI)(ee,eu),collectedRevalidate:en.revalidate,collectedExpire:en.expire,collectedStale:J(en.stale),collectedTags:en.tags,renderResumeDataCache:nz(p)}}}if(S.isRoutePPREnabled){let e,s=(0,tV.uO)(_),l=nB(),u=Q={type:"prerender-ppr",phase:"render",rootParams:$,fallbackRouteParams:i,implicitTags:f,dynamicTracking:s,revalidate:ey.AR,expire:ey.AR,stale:ey.AR,tags:[...f.tags],prerenderResumeDataCache:l},c=await eQ.workUnitAsyncStorage.run(u,l$,a,r,{is404:404===t.statusCode});e=V=await tn(eQ.workUnitAsyncStorage.run(u,tf,b,c,K,{filterStackFrame:o,onError:z}));let d={type:"prerender-ppr",phase:"render",rootParams:$,fallbackRouteParams:i,implicitTags:f,dynamicTracking:s,revalidate:ey.AR,expire:ey.AR,stale:ey.AR,tags:[...f.tags],prerenderResumeDataCache:l},p=tc(G),{prelude:v,postponed:w}=await eQ.workUnitAsyncStorage.run(d,ty,(0,T.jsx)(lN,{reactServerStream:e.asUnclosingStream(),reactDebugStream:void 0,debugEndTime:void 0,preinitScripts:U,ServerInsertedHTMLProvider:I,nonce:h,images:r.renderOpts.images}),{onError:X,onHeaders:p,maxHeadersLength:x,bootstrapScripts:[F]}),S=rK({polyfills:L,renderServerInsertedHTML:D,serverCapturedErrors:q,basePath:y,tracingMetadata:M}),E=await et(e.asStream());lY(g)&&(n.flightData=E,await l0(E,d,b,m,r.pagePath,n));let{prelude:R,preludeIsEmpty:k}=await to(v);if((0,tV.Lu)(s.dynamicAccesses)){null!=w?n.postponed=await nV(w,k?nX.Empty:nX.Full,i,l,C):n.postponed=await nW(l,C),e.consume();let t={getServerInsertedHTML:S,getServerInsertedMetadata:N,deploymentId:r.sharedContext.deploymentId};return{digestErrorsMap:H,ssrErrors:q,stream:await eh(R,t),dynamicAccess:s.dynamicAccesses,collectedRevalidate:u.revalidate,collectedExpire:u.expire,collectedStale:J(u.stale),collectedTags:u.tags}}if(i&&i.size>0){n.postponed=await nW(l,C);let e={getServerInsertedHTML:S,getServerInsertedMetadata:N,deploymentId:r.sharedContext.deploymentId};return{digestErrorsMap:H,ssrErrors:q,stream:await eh(R,e),dynamicAccess:s.dynamicAccesses,collectedRevalidate:u.revalidate,collectedExpire:u.expire,collectedStale:J(u.stale),collectedTags:u.tags}}{if(g.forceDynamic)throw Object.defineProperty(new nf.f('Invariant: a Page with `dynamic = "force-dynamic"` did not trigger the dynamic pathway. This is a bug in Next.js'),"__NEXT_ERROR_CODE",{value:"E598",enumerable:!1,configurable:!0});let t=R;if(null!=w){let e=tu(),n=await td((0,T.jsx)(lN,{reactServerStream:e,reactDebugStream:void 0,debugEndTime:void 0,preinitScripts:()=>{},ServerInsertedHTMLProvider:I,nonce:h,images:r.renderOpts.images}),JSON.parse(JSON.stringify(w)),{signal:(0,tV.kb)(),onError:X,nonce:h});t=Y(R,n)}return{digestErrorsMap:H,ssrErrors:q,stream:await ep(t,{inlinedDataStream:tl(e.consumeAsStream(),h,null),getServerInsertedHTML:S,getServerInsertedMetadata:N,deploymentId:r.sharedContext.deploymentId}),dynamicAccess:s.dynamicAccesses,collectedRevalidate:u.revalidate,collectedExpire:u.expire,collectedStale:J(u.stale),collectedTags:u.tags}}}{let e,i=Q={type:"prerender-legacy",phase:"render",rootParams:$,implicitTags:f,revalidate:ey.AR,expire:ey.AR,stale:ey.AR,tags:[...f.tags]},l=await eQ.workUnitAsyncStorage.run(i,l$,a,r,{is404:404===t.statusCode});e=V=await tn(eQ.workUnitAsyncStorage.run(i,tf,b,l,K,{filterStackFrame:o,onError:z}));let{stream:u}=await eQ.workUnitAsyncStorage.run(i,tp,(0,T.jsx)(lN,{reactServerStream:e.asUnclosingStream(),reactDebugStream:void 0,debugEndTime:void 0,preinitScripts:U,ServerInsertedHTMLProvider:I,nonce:h,images:r.renderOpts.images}),{onError:X,nonce:h,bootstrapScripts:[F]});if(lY(g)){let t=await et(e.asStream());n.flightData=t,await l0(t,i,b,m,r.pagePath,n)}let c=rK({polyfills:L,renderServerInsertedHTML:D,serverCapturedErrors:q,basePath:y,tracingMetadata:M});return{digestErrorsMap:H,ssrErrors:q,stream:await (s={inlinedDataStream:tl(e.consumeAsStream(),h,null),isStaticGeneration:!0,getServerInsertedHTML:c,getServerInsertedMetadata:N,deploymentId:r.sharedContext.deploymentId},ef(u,s)),collectedRevalidate:i.revalidate,collectedExpire:i.expire,collectedStale:J(i.stale),collectedTags:i.tags}}}catch(A){let e,i;if((0,nf.l)(A)||"object"==typeof A&&null!==A&&"message"in A&&"string"==typeof A.message&&A.message.includes("https://nextjs.org/docs/advanced-features/static-html-export")||(0,tq.isDynamicServerError)(A))throw A;let s=(0,tz.C)(A);if(s){let e=tH(A);throw rS(`${A.reason} should be wrapped in a suspense boundary at page "${p}". Read more: https://nextjs.org/docs/messages/missing-suspense-with-csr-bailout +${e}`),A}if(null===V)throw A;(0,tA.RM)(A)?(t.statusCode=(0,tA.jT)(A),n.statusCode=t.statusCode,e=(0,tA.qe)(t.statusCode)):(0,tO.n)(A)?(e="redirect",t.statusCode=tI(A),n.statusCode=t.statusCode,l=e_(tj(A),y),t.setHeader("location",l),W("location")):s||(t.statusCode=500,n.statusCode=t.statusCode);let[d,S]=rJ(v,c,w,P,r6(r,!1),h,"/_not-found/page"),_=Q={type:"prerender-legacy",phase:"render",rootParams:$,implicitTags:f,revalidate:void 0!==(null==Q?void 0:Q.revalidate)?Q.revalidate:ey.AR,expire:void 0!==(null==Q?void 0:Q.expire)?Q.expire:ey.AR,stale:void 0!==(null==Q?void 0:Q.stale)?Q.stale:ey.AR,tags:[...(null==Q?void 0:Q.tags)||f.tags]};if(C&&(0,tA.RM)(A)){let e=(0,tA.jT)(A),t=function e(t,r,n){let a=!function(e,t,r){switch(t){case 404:return!!e[2]["not-found"];case 403:return r&&!!e[2].forbidden;case 401:return r&&!!e[2].unauthorized;default:return!1}}(t,r,n)?null:t,i=t[1].children;if(i){let t=e(i,r,n);t&&(a=t)}return a}(a,e,r.renderOpts.experimental.authInterrupts);t&&(i={boundaryTree:t,triggeredStatus:e})}let E=i?await eQ.workUnitAsyncStorage.run(_,l$,a,r,{is404:"not-found"===e,prerenderHTTPError:i}):await eQ.workUnitAsyncStorage.run(_,lD,a,r,H.has(A.digest)?void 0:A,e),R=eQ.workUnitAsyncStorage.run(_,tf,b,E,K,{filterStackFrame:o,onError:z}),k=R,x=i?(()=>{let[e,t]=R.tee();return k=e,tn(t)})():null;try{let{stream:e}=await eQ.workUnitAsyncStorage.run(_,tp,(0,T.jsx)(lM,{reactServerStream:k,ServerInsertedHTMLProvider:I,preinitScripts:d,nonce:h,images:r.renderOpts.images}),{nonce:h,bootstrapScripts:[S],formState:null}),t=x?await x:V;if(x&&V.consume(),lY(g)){let e=await et(t.asStream());n.flightData=e,await l0(e,_,b,m,r.pagePath,n)}let a=t.consumeAsStream();return{digestErrorsMap:H,ssrErrors:q,stream:await (u={inlinedDataStream:tl(a,h,null),isStaticGeneration:!0,getServerInsertedHTML:rK({polyfills:L,renderServerInsertedHTML:D,serverCapturedErrors:[],basePath:y,tracingMetadata:M}),getServerInsertedMetadata:N,validateRootLayout:!1,deploymentId:r.sharedContext.deploymentId},ef(e,u)),dynamicAccess:null,collectedRevalidate:null!==Q?Q.revalidate:ey.AR,collectedExpire:null!==Q?Q.expire:ey.AR,collectedStale:J(null!==Q?Q.stale:ey.AR),collectedTags:null!==Q?Q.tags:null}}catch(e){throw e}}}let lZ=async(e,t)=>{let r=r3(e).modules["global-error"];if(!r)throw Object.defineProperty(Error("Invariant: global-error module is required but not found in loader tree"),"__NEXT_ERROR_CODE",{value:"E983",enumerable:!1,configurable:!0});let{componentMod:{createElement:n}}=t,[a,i]=await r9({ctx:t,filePath:r[1],getComponent:r[0],injectedCSS:new Set,injectedJS:new Set});return{GlobalError:a,styles:i}};async function l0(e,t,r,n,a,i){let s,{clientModules:o,edgeRscModuleMapping:l,rscModuleMapping:u}=e4(),c={moduleLoading:null,moduleMap:u,serverModuleMap:e6()},d=oq(n.experimental)(t.stale),f=n.experimental.prefetchInlining;if(f)if(n.isBuildTimePrerendering)i.prefetchHints=s=await r.collectPrefetchHints(e,d,o,c,f.maxSize,f.maxBundleSize);else{var h;s=(null==(h=n.prefetchHints)?void 0:h[a])??null}else s=null;i.segmentData=await r.collectSegmentData(n.cacheComponents,e,d,o,c,!!n.experimental.prefetchInlining,s)}require("next/dist/build/adapter/setup-node-env.external.js"),a("./dist/esm/shared/lib/modern-browserslist-target.js");let l1="build-manifest.json";[...process?.features?.typescript?["next.config.mts"]:[]],Symbol("polyfills");let l2=/\/[^/]*\[[^/]+\][^/]*(?=\/|$)/,l4=/\/\[[^/]+\](?=\/|$)/;function l3(e,t=!0){return((0,nO.m1)(e)&&(e=(0,nO.$8)(e).interceptedRoute),t)?l4.test(e):l2.test(e)}function l6(e){return eR(e||"/","/_next/data")&&"/index"===(e=e.replace(/\/_next\/data\/[^/]{1,}/,"").replace(/\.json$/,""))?"/":e}let l8=Symbol("next.patchSetHeaderWithCookieSupport");var l9=a("./dist/esm/shared/lib/page-path/ensure-leading-slash.js");function l5(e){let t=/^\/index(\/|$)/.test(e)&&!l3(e)?`/index${e}`:"/"===e?"/index":(0,l9.A)(e);{let{posix:e}=a("path"),r=e.normalize(t);if(r!==t)throw new o0.MK(`Requested and resolved page mismatch: ${t} ${r}`)}return t}let l7=["ico","jpg","jpeg","png","svg"],ue=["jpg","jpeg","png"],ut=["jpg","jpeg","png","gif"],ur=["jpg","jpeg","png","gif"],un=(e,t)=>t&&0!==t.length?`(?:\\.(${e.join("|")})|(\\.(${t.join("|")})))`:`(\\.(?:${e.join("|")}))`,ua=/^[\\/]favicon\.ico$/,ui=/^[\\/]robots\.txt$/,us=/^[\\/]manifest\.json$/,uo=/^[\\/]manifest\.webmanifest$/,ul=/[\\/]sitemap\.xml$/,uu=new Map;var uc=a("./dist/esm/shared/lib/isomorphic/path.js"),ud=a.n(uc),uf=a("./tags-manifest.external");class uh{constructor(e){this.fs=e,this.tasks=[]}findOrCreateTask(e){for(let t of this.tasks)if(t[0]===e)return t;let t=this.fs.mkdir(e);t.catch(()=>{});let r=[e,t,[]];return this.tasks.push(r),r}append(e,t){let r=this.findOrCreateTask(ud().dirname(e)),n=r[1].then(()=>this.fs.writeFile(e,t));n.catch(()=>{}),r[2].push(n)}wait(){return Promise.all(this.tasks.flatMap(e=>e[2]))}}let up=require("next/dist/server/lib/incremental-cache/memory-cache.external.js");class um{static #e=this.debug=!!process.env.NEXT_PRIVATE_DEBUG_CACHE;constructor(e){this.fs=e.fs,this.flushToDisk=e.flushToDisk,this.serverDistDir=e.serverDistDir,this.revalidatedTags=e.revalidatedTags,e.maxMemoryCacheSize?um.memoryCache?um.debug&&console.log("FileSystemCache: memory store already initialized"):(um.debug&&console.log("FileSystemCache: using memory store for fetch cache"),um.memoryCache=(0,up.getMemoryCache)(e.maxMemoryCacheSize)):um.debug&&console.log("FileSystemCache: not using memory store for fetch cache")}resetRequestCache(){}async revalidateTag(e,t){if(e="string"==typeof e?[e]:e,um.debug&&console.log("FileSystemCache: revalidateTag",e,t),0===e.length)return;let r=Date.now();for(let n of e){let e=uf.tagsManifest.get(n)||{};if(t){let a={...e};a.stale=r,void 0!==t.expire&&(a.expired=r+1e3*t.expire),uf.tagsManifest.set(n,a)}else uf.tagsManifest.set(n,{...e,expired:r})}}async get(...e){var t,r,n,a,i,s,o,l,u;let[c,d]=e,{kind:f}=d,h=null==(t=um.memoryCache)?void 0:t.get(c);if(um.debug&&(f===nt.FETCH?console.log("FileSystemCache: get",c,d.tags,f,!!h):console.log("FileSystemCache: get",c,f,!!h)),!h)try{if(f===nt.APP_ROUTE){let e=this.getFilePath(`${c}.body`,nt.APP_ROUTE),t=await this.fs.readFile(e),{mtime:r}=await this.fs.stat(e),n=JSON.parse(await this.fs.readFile(e.replace(/\.body$/,ey.EP),"utf8"));h={lastModified:r.getTime(),value:{kind:ne.APP_ROUTE,body:t,headers:n.headers,status:n.status}}}else{let e=this.getFilePath(f===nt.FETCH?c:`${c}.html`,f),t=await this.fs.readFile(e,"utf8"),{mtime:r}=await this.fs.stat(e);if(f===nt.FETCH){let{tags:e,fetchIdx:n,fetchUrl:a}=d;if(!this.flushToDisk)return null;let i=r.getTime(),l=JSON.parse(t);if(h={lastModified:i,value:l},(null==(s=h.value)?void 0:s.kind)===ne.FETCH){let t=null==(o=h.value)?void 0:o.tags;(null==e?void 0:e.every(e=>null==t?void 0:t.includes(e)))||(um.debug&&console.log("FileSystemCache: tags vs storedTags mismatch",e,t),await this.set(c,h.value,{fetchCache:!0,tags:e,fetchIdx:n,fetchUrl:a}))}}else if(f===nt.APP_PAGE){let n,a,i;try{n=JSON.parse(await this.fs.readFile(e.replace(/\.html$/,ey.EP),"utf8"))}catch{}if(null==n?void 0:n.segmentPaths){let e=new Map;a=e;let t=c+ey.mH;await Promise.all(n.segmentPaths.map(async r=>{let n=this.getFilePath(t+r+ey.tz,nt.APP_PAGE);try{e.set(r,await this.fs.readFile(n))}catch{}}))}d.isFallback||d.isRoutePPREnabled&&(null==n?void 0:n.postponed)!=null||(i=await this.fs.readFile(this.getFilePath(`${c}${ey.RM}`,nt.APP_PAGE))),h={lastModified:r.getTime(),value:{kind:ne.APP_PAGE,html:t,rscData:i,postponed:null==n?void 0:n.postponed,headers:null==n?void 0:n.headers,status:null==n?void 0:n.status,segmentData:a}}}else if(f===nt.PAGES){let e,n={};d.isFallback||(n=JSON.parse(await this.fs.readFile(this.getFilePath(`${c}${ey.x3}`,nt.PAGES),"utf8"))),h={lastModified:r.getTime(),value:{kind:ne.PAGES,html:t,pageData:n,headers:null==e?void 0:e.headers,status:null==e?void 0:e.status}}}else throw Object.defineProperty(Error(`Invariant: Unexpected route kind ${f} in file system cache.`),"__NEXT_ERROR_CODE",{value:"E445",enumerable:!1,configurable:!0})}h&&(null==(l=um.memoryCache)||l.set(c,h))}catch{return null}if((null==h||null==(r=h.value)?void 0:r.kind)===ne.APP_PAGE||(null==h||null==(n=h.value)?void 0:n.kind)===ne.APP_ROUTE||(null==h||null==(a=h.value)?void 0:a.kind)===ne.PAGES){let e=null==(u=h.value.headers)?void 0:u[ey.VC];if("string"==typeof e){let t=e.split(",");if(t.length>0&&(0,uf.areTagsExpired)(t,h.lastModified))return um.debug&&console.log("FileSystemCache: expired tags",t),null}}else if((null==h||null==(i=h.value)?void 0:i.kind)===ne.FETCH){let e=d.kind===nt.FETCH?[...d.tags||[],...d.softTags||[]]:[];if(e.some(e=>this.revalidatedTags.includes(e)))return um.debug&&console.log("FileSystemCache: was revalidated",e),null;if((0,uf.areTagsExpired)(e,h.lastModified))return um.debug&&console.log("FileSystemCache: expired tags",e),null}return h??null}async set(e,t,r){var n;if(null==(n=um.memoryCache)||n.set(e,{value:t,lastModified:Date.now()}),um.debug&&console.log("FileSystemCache: set",e),!this.flushToDisk||!t)return;let a=new uh(this.fs);if(t.kind===ne.APP_ROUTE){let r=this.getFilePath(`${e}.body`,nt.APP_ROUTE);a.append(r,t.body);let n={headers:t.headers,status:t.status,postponed:void 0,segmentPaths:void 0,prefetchHints:void 0};a.append(r.replace(/\.body$/,ey.EP),JSON.stringify(n,null,2))}else if(t.kind===ne.PAGES||t.kind===ne.APP_PAGE){let n=t.kind===ne.APP_PAGE,i=this.getFilePath(`${e}.html`,n?nt.APP_PAGE:nt.PAGES);if(a.append(i,t.html),r.fetchCache||r.isFallback||r.isRoutePPREnabled||a.append(this.getFilePath(`${e}${n?ey.RM:ey.x3}`,n?nt.APP_PAGE:nt.PAGES),n?t.rscData:JSON.stringify(t.pageData)),(null==t?void 0:t.kind)===ne.APP_PAGE){let e;if(t.segmentData){e=[];let r=i.replace(/\.html$/,ey.mH);for(let[n,i]of t.segmentData){e.push(n);let t=r+n+ey.tz;a.append(t,i)}}let r={headers:t.headers,status:t.status,postponed:t.postponed,segmentPaths:e,prefetchHints:void 0};a.append(i.replace(/\.html$/,ey.EP),JSON.stringify(r))}}else if(t.kind===ne.FETCH){let n=this.getFilePath(e,nt.FETCH);a.append(n,JSON.stringify({...t,tags:r.fetchCache?r.tags:[]}))}await a.wait()}getFilePath(e,t){switch(t){case nt.FETCH:return ud().join(this.serverDistDir,"..","cache","fetch-cache",e);case nt.PAGES:return ud().join(this.serverDistDir,"pages",e);case nt.IMAGE:case nt.APP_PAGE:case nt.APP_ROUTE:return ud().join(this.serverDistDir,"app",e);default:throw Object.defineProperty(Error(`Unexpected file path kind: ${t}`),"__NEXT_ERROR_CODE",{value:"E479",enumerable:!1,configurable:!0})}}}function ug(e){return e.replace(/(?:\/index)?\/?$/,"")||"/"}let uy=require("next/dist/server/lib/incremental-cache/shared-cache-controls.external.js");class uv{static #e=this.debug=!!process.env.NEXT_PRIVATE_DEBUG_CACHE;constructor({fs:e,dev:t,flushToDisk:r,minimalMode:n,serverDistDir:a,requestHeaders:i,maxMemoryCacheSize:s,getPrerenderManifest:o,fetchCacheKeyPrefix:l,CurCacheHandler:u,allowedRevalidateHeaderKeys:c}){var d,f,h,p;this.locks=new Map,this.hasCustomCacheHandler=!!u;const m=Symbol.for("@next/cache-handlers"),g=globalThis;if(u)uv.debug&&console.log("IncrementalCache: using custom cache handler",u.name);else{const t=g[m];(null==t?void 0:t.FetchCache)?(u=t.FetchCache,uv.debug&&console.log("IncrementalCache: using global FetchCache cache handler")):e&&a&&(uv.debug&&console.log("IncrementalCache: using filesystem cache handler"),u=um)}process.env.__NEXT_TEST_MAX_ISR_CACHE&&(s=parseInt(process.env.__NEXT_TEST_MAX_ISR_CACHE,10)),this.dev=t,this.disableForTestmode="true"===process.env.NEXT_PRIVATE_TEST_PROXY,this.minimalMode=n,this.requestHeaders=i,this.allowedRevalidateHeaderKeys=c,this.prerenderManifest=o(),this.cacheControls=new uy.SharedCacheControls(this.prerenderManifest),this.fetchCacheKeyPrefix=l;let y=[];i[ey.kz]===(null==(f=this.prerenderManifest)||null==(d=f.preview)?void 0:d.previewModeId)&&(this.isOnDemandRevalidate=!0),n&&(y=this.revalidatedTags=ls(i,null==(p=this.prerenderManifest)||null==(h=p.preview)?void 0:h.previewModeId)),u&&(this.cacheHandler=new u({dev:t,fs:e,flushToDisk:r,serverDistDir:a,revalidatedTags:y,maxMemoryCacheSize:s,_requestHeaders:i,fetchCacheKeyPrefix:l}))}calculateRevalidate(e,t,r,n){if(r)return Math.floor(performance.timeOrigin+performance.now()-1e3);let a=this.cacheControls.get(ug(e)),i=a?a.revalidate:!n&&1;return"number"==typeof i?1e3*i+t:i}_getPathname(e,t){return t?e:l5(e)}resetRequestCache(){var e,t;null==(t=this.cacheHandler)||null==(e=t.resetRequestCache)||e.call(t)}async lock(e){for(;;){let t=this.locks.get(e);if(uv.debug&&console.log("IncrementalCache: lock get",e,!!t),!t)break;await t}let{resolve:t,promise:r}=new I;return uv.debug&&console.log("IncrementalCache: successfully locked",e),this.locks.set(e,r),()=>{t(),this.locks.delete(e)}}async revalidateTag(e,t){var r;return null==(r=this.cacheHandler)?void 0:r.revalidateTag(e,t)}async generateCacheKey(e,t={}){let r=[],n=new TextEncoder,i=new TextDecoder;if(t.body)if(t.body instanceof Uint8Array)r.push(i.decode(t.body)),t._ogBody=t.body;else if("function"==typeof t.body.getReader){let e=t.body,a=[];try{await e.pipeTo(new WritableStream({write(e){"string"==typeof e?(a.push(n.encode(e)),r.push(e)):(a.push(e),r.push(i.decode(e,{stream:!0})))}})),r.push(i.decode());let s=a.reduce((e,t)=>e+t.length,0),o=new Uint8Array(s),l=0;for(let e of a)o.set(e,l),l+=e.length;t._ogBody=o}catch(e){console.error("Problem reading body",e)}}else if("function"==typeof t.body.keys){let e=t.body;for(let n of(t._ogBody=t.body,new Set([...e.keys()]))){let t=e.getAll(n);r.push(`${n}=${(await Promise.all(t.map(async e=>"string"==typeof e?e:await e.text()))).join(",")}`)}}else if("function"==typeof t.body.arrayBuffer){let e=t.body,n=await e.arrayBuffer();r.push(await e.text()),t._ogBody=new Blob([n],{type:e.type})}else"string"==typeof t.body&&(r.push(t.body),t._ogBody=t.body);let s="function"==typeof(t.headers||{}).keys?Object.fromEntries(t.headers):Object.assign({},t.headers);"traceparent"in s&&delete s.traceparent,"tracestate"in s&&delete s.tracestate;let o=JSON.stringify(["v3",this.fetchCacheKeyPrefix||"",e,t.method,s,t.mode,t.redirect,t.credentials,t.referrer,t.referrerPolicy,t.integrity,t.cache,r]);return a("crypto").createHash("sha256").update(o).digest("hex")}async get(e,t){var r,n,a,i,s,o,l;let u,c;if(t.kind===nt.FETCH){let r=eQ.workUnitAsyncStorage.getStore(),n=r?(0,eQ.getRenderResumeDataCache)(r):null;if(n){let r=n.fetch.get(e);if((null==r?void 0:r.kind)===ne.FETCH){let n=A.workAsyncStorage.getStore();if(![...t.tags||[],...t.softTags||[]].some(e=>{var t,r;return(null==(t=this.revalidatedTags)?void 0:t.includes(e))||(null==n||null==(r=n.pendingRevalidatedTags)?void 0:r.some(t=>t.tag===e))}))return uv.debug&&console.log("IncrementalCache: rdc:hit",e),{isStale:!1,value:r};uv.debug&&console.log("IncrementalCache: rdc:revalidated-tag",e)}else uv.debug&&console.log("IncrementalCache: rdc:miss",e)}else uv.debug&&console.log("IncrementalCache: rdc:no-resume-data")}if(this.disableForTestmode||this.dev&&(t.kind!==nt.FETCH||"no-cache"===this.requestHeaders["cache-control"]))return null;e=this._getPathname(e,t.kind===nt.FETCH);let d=await (null==(r=this.cacheHandler)?void 0:r.get(e,t));if(t.kind===nt.FETCH){if(!d)return null;if((null==(a=d.value)?void 0:a.kind)!==ne.FETCH)throw Object.defineProperty(new eB.z(`Expected cached value for cache key ${JSON.stringify(e)} to be a "FETCH" kind, got ${JSON.stringify(null==(i=d.value)?void 0:i.kind)} instead.`),"__NEXT_ERROR_CODE",{value:"E653",enumerable:!1,configurable:!0});let r=A.workAsyncStorage.getStore(),n=[...t.tags||[],...t.softTags||[]];if(n.some(e=>{var t,n;return(null==(t=this.revalidatedTags)?void 0:t.includes(e))||(null==r||null==(n=r.pendingRevalidatedTags)?void 0:n.some(t=>t.tag===e))}))return uv.debug&&console.log("IncrementalCache: expired tag",e),null;let s=eQ.workUnitAsyncStorage.getStore();if(s){let t=(0,eQ.getPrerenderResumeDataCache)(s);t&&(uv.debug&&console.log("IncrementalCache: rdc:set",e),t.fetch.set(e,d.value))}let o=t.revalidate||d.value.revalidate,l=(performance.timeOrigin+performance.now()-(d.lastModified||0))/1e3>o,u=d.value.data;return(0,uf.areTagsExpired)(n,d.lastModified)?null:((0,uf.areTagsStale)(n,d.lastModified)&&(l=!0),{isStale:l,value:{kind:ne.FETCH,data:u,revalidate:o}})}if((null==d||null==(n=d.value)?void 0:n.kind)===ne.FETCH)throw Object.defineProperty(new eB.z(`Expected cached value for cache key ${JSON.stringify(e)} not to be a ${JSON.stringify(t.kind)} kind, got "FETCH" instead.`),"__NEXT_ERROR_CODE",{value:"E652",enumerable:!1,configurable:!0});let f=null,{isFallback:h}=t,p=this.cacheControls.get(ug(e));if((null==d?void 0:d.lastModified)===-1)u=-1,c=-1*ey.eM*1e3;else{let r=performance.timeOrigin+performance.now(),n=(null==d?void 0:d.lastModified)||r;if(void 0===(u=!1!==(c=this.calculateRevalidate(e,n,this.dev??!1,t.isFallback))&&c0&&((0,uf.areTagsExpired)(t,n)?u=-1:(0,uf.areTagsStale)(t,n)&&(u=!0))}}}return d&&(f={isStale:u,cacheControl:p,revalidateAfter:c,value:d.value,isFallback:h}),!d&&this.prerenderManifest.notFoundRoutes.includes(e)&&(f={isStale:u,value:null,cacheControl:p,revalidateAfter:c,isFallback:h},this.set(e,f.value,{...t,cacheControl:p})),f}async set(e,t,r){if((null==t?void 0:t.kind)===ne.FETCH){let r=eQ.workUnitAsyncStorage.getStore(),n=r?(0,eQ.getPrerenderResumeDataCache)(r):null;n&&(uv.debug&&console.log("IncrementalCache: rdc:set",e),n.fetch.set(e,t))}if(this.disableForTestmode||this.dev&&!r.fetchCache)return;e=this._getPathname(e,r.fetchCache);let n=JSON.stringify(t).length;if(r.fetchCache&&n>2097152&&!this.hasCustomCacheHandler&&!r.isImplicitBuildTimeCache){let t=`Failed to set Next.js data cache for ${r.fetchUrl||e}, items over 2MB can not be cached (${n} bytes)`;if(this.dev)throw Object.defineProperty(Error(t),"__NEXT_ERROR_CODE",{value:"E1003",enumerable:!1,configurable:!0});console.warn(t);return}try{var a;!r.fetchCache&&r.cacheControl&&this.cacheControls.set(ug(e),r.cacheControl),await (null==(a=this.cacheHandler)?void 0:a.set(e,t,r))}catch(t){console.warn("Failed to update prerender cache for",e,t)}}}let ub=Symbol.for("@next/router-server-methods"),uw=globalThis;function uS(e){var t,r;return(null==(r=e.has)||null==(t=r[0])?void 0:t.key)===z.kO}let u_=e=>import(e).then(e=>e.default||e);class uE{constructor({userland:e,definition:t,distDir:r,relativeProjectDir:n}){this.userland=e,this.definition=t,this.isDev=!1,this.distDir=r,this.relativeProjectDir=n}getRouterServerContext(e){var t;let r=P(e,"hostname"),n=P(e,"revalidate"),a=P(e,"render404"),i=P(e,"relativeProjectDir")||this.relativeProjectDir;return{...null==(t=uw[ub])?void 0:t[i],...void 0!==r?{hostname:r}:{},...void 0!==n?{revalidate:n}:{},...void 0!==a?{render404:a}:{}}}normalizeUrl(e,t){}async instrumentationOnRequestError(e,...t){{let{join:r}=a("node:path"),n=r(process.cwd(),P(e,"relativeProjectDir")||this.relativeProjectDir),{instrumentationOnRequestError:i}=await Promise.resolve().then(a.t.bind(a,"../lib/router-utils/instrumentation-globals.external.js",23));return i(n,this.distDir,...t)}}loadManifests(e,t){let r;{var n,i;let s;if(!t)throw Object.defineProperty(Error("Invariant: projectDir is required for node runtime"),"__NEXT_ERROR_CODE",{value:"E718",enumerable:!1,configurable:!0});let{loadManifestFromRelativePath:o}=a("../load-manifest.external"),l=l5(e),u=this.definition.kind===nr.PAGES||this.definition.kind===nr.PAGES_API?"pages":"app",[c,d,f,h,p,m,g,y,v,b,w,S]=[o({projectDir:t,distDir:this.distDir,manifest:"routes-manifest.json",shouldCache:!this.isDev}),o({projectDir:t,distDir:this.distDir,manifest:"prerender-manifest.json",shouldCache:!this.isDev}),o({projectDir:t,distDir:this.distDir,manifest:l1,shouldCache:!this.isDev}),"/_error"===e?o({projectDir:t,distDir:this.distDir,manifest:`fallback-${l1}`,shouldCache:!this.isDev,handleMissing:!0}):{},o({projectDir:t,distDir:this.distDir,manifest:`server/${"app"===u?"app":"pages"}${l}/react-loadable-manifest.json`,handleMissing:!0,shouldCache:!this.isDev}),o({projectDir:t,distDir:this.distDir,manifest:"server/next-font-manifest.json",shouldCache:!this.isDev}),"app"!==u||(s=(i=e).replace(/\/route$/,""),i.endsWith("/route")&&function(e,t,r){if(!e||e.length<2)return!1;let n=e.replace(/\\/g,"/"),a=!!(ua.test(n)||ui.test(n)||us.test(n)||uo.test(n)||ul.test(n))||(!!n.includes("robots")||!!n.includes("manifest")||!!n.includes("sitemap")||!!n.includes("icon")||!!n.includes("apple-icon")||!!n.includes("opengraph-image")||!!n.includes("twitter-image")||!!n.includes("favicon"))&&null;if(null!==a)return a;let i=function(e,t){let r=`${e.join(",")}|${t}`,n=uu.get(r);if(n)return n;let a=t?"$":"?$",i="\\d?"+(t?"":"(-\\w{6})?"),s=e.length>0?[...e,"txt"]:["txt"],o=e.length>0?[...e,"webmanifest","json"]:["webmanifest","json"],l=[RegExp(`^[\\\\/]robots${un(s,null)}${a}`),RegExp(`^[\\\\/]manifest${un(o,null)}${a}`),RegExp(`[\\\\/]sitemap${un(["xml"],e)}${a}`),RegExp(`[\\\\/]icon${i}${un(l7,e)}${a}`),RegExp(`[\\\\/]apple-icon${i}${un(ue,e)}${a}`),RegExp(`[\\\\/]opengraph-image${i}${un(ut,e)}${a}`),RegExp(`[\\\\/]twitter-image${i}${un(ur,e)}${a}`)];return uu.set(r,l),l}(t,r);for(let e=0;enew RegExp(e.regex))}}return r}async loadCustomCacheHandlers(e,t){{let{cacheMaxMemorySize:r,cacheHandlers:n}=t;if(!n||!(0,tC.q3)(r))return;for(let[t,r]of Object.entries(n)){if(!r)continue;let{formatDynamicImportPath:n}=a("./dist/esm/lib/format-dynamic-import-path.js"),{join:i}=a("node:path"),s=i(process.cwd(),P(e,"relativeProjectDir")||this.relativeProjectDir);(0,tC.XJ)(t,r4(await u_(n(`${s}/${this.distDir}`,r))))}}}async getIncrementalCache(e,t,r,n){{let i,{cacheHandler:s}=t;if(s){let{formatDynamicImportPath:e}=a("./dist/esm/lib/format-dynamic-import-path.js");i=r4(await u_(e(this.distDir,s)))}let{join:o}=a("node:path"),l=o(process.cwd(),P(e,"relativeProjectDir")||this.relativeProjectDir);await this.loadCustomCacheHandlers(e,t);let u=new uv({fs:a("./dist/esm/server/lib/node-fs-methods.js").e,dev:this.isDev,requestHeaders:e.headers,allowedRevalidateHeaderKeys:t.experimental.allowedRevalidateHeaderKeys,minimalMode:n,serverDistDir:`${l}/${this.distDir}/server`,fetchCacheKeyPrefix:t.experimental.fetchCacheKeyPrefix,maxMemoryCacheSize:t.cacheMaxMemorySize,flushToDisk:!n&&t.experimental.isrFlushToDisk,getPrerenderManifest:()=>r,CurCacheHandler:i});return globalThis.__incrementalCache=u,u}}async onRequestError(e,t,r,n,a){n||((null==a?void 0:a.logErrorWithOriginalStack)?a.logErrorWithOriginalStack(t,"app-dir"):console.error(t)),await this.instrumentationOnRequestError(e,t,{path:e.url||"/",headers:e.headers,method:e.method||"GET"},r)}getNextConfigEdge(e){throw Object.defineProperty(Error("Invariant: getNextConfigEdge must only be called in edge runtime"),"__NEXT_ERROR_CODE",{value:"E968",enumerable:!1,configurable:!0})}async prepare(e,t,{srcPage:r,multiZoneDraftMode:n}){var i,s;let o,l,u,c,d;{t&&function(e,t){if(t[l8])return;let r=t.setHeader.bind(t);Object.defineProperty(t,l8,{value:!0}),t.setHeader=(n,a)=>{if("headersSent"in t&&t.headersSent)return t;if("set-cookie"===n.toLowerCase()){let t=P(e,"middlewareCookie");t&&Array.isArray(a)&&a.every((e,r)=>e===t[r])||(a=[...new Set([...t||[],..."string"==typeof a?[a]:Array.isArray(a)?a:[]])])}return r(n,a)}}(e,t);let{join:r,relative:n}=a("node:path");o=r(process.cwd(),P(e,"relativeProjectDir")||this.relativeProjectDir);let i=P(e,"distDir");i&&(this.distDir=n(o,i));let{ensureInstrumentationRegistered:s}=await Promise.resolve().then(a.t.bind(a,"../lib/router-utils/instrumentation-globals.external.js",23));s(o,this.distDir)}let f=this.loadManifests(r,o),{routesManifest:h,prerenderManifest:p,serverFilesManifest:m}=f,{basePath:g,i18n:y,rewrites:v}=h,b=this.getRouterServerContext(e),w=(null==b?void 0:b.nextConfig)||(null==m?void 0:m.config),S=(null==(i=e.headers["x-forwarded-proto"])?void 0:i.includes("https"))?"https":"http";if(!P(e,"initURL")){let t=(null==m?void 0:m.config.experimental.trustHostHeader)?`${S}://${e.headers.host||"localhost"}${e.url}`:`${S}://${(null==b?void 0:b.hostname)||"localhost"}${e.url}`;C(e,"initURL",t),C(e,"initProtocol",S)}g&&(e.url=eC(e.url||"/",g));let _=lr(e.url||"/");if(C(e,"initQuery",{...null==_?void 0:_.query}),!_)return;let E=!1;eR(_.pathname||"/","/_next/data")&&(E=!0,_.pathname=l6(_.pathname||"/")),this.normalizeUrl(e,_);let R=_.pathname||"/",k={..._.query},x=l3(r);y&&(l=eP(_.pathname||"/",y.locales)).detectedLocale&&(e.url=`${l.pathname}${_.search}`,R=l.pathname,u||(u=l.detectedLocale));let T=(0,eZ.Yr)(r),A=function({page:e,i18n:t,basePath:r,rewrites:n,pageIsDynamic:i,trailingSlash:s,caseSensitive:o}){let l,u,c;if(i){var d;let t,r;r=(t=function(e,t,r,n,a,i={names:{},intercepted:{}}){let s,o=(s=0,()=>{let e="",t=++s;for(;t>0;)e+=String.fromCharCode(97+(t-1)%26),t=Math.floor((t-1)/26);return e}),l={},u=[],c=[];for(let s of(i=structuredClone(i),ew(e).slice(1).split("/"))){let e,d=nO.VB.some(e=>s.startsWith(e)),f=s.match(nL),h=d?f?.[1]:void 0;if(h&&f?.[2]?(e=t?ey.h:void 0,i.intercepted[f[2]]=h):e=f?.[2]&&i.intercepted[f[2]]?t?ey.h:void 0:t?ey.AA:void 0,h&&f&&f[2]){let{key:t,pattern:r,cleanedKey:n,repeat:s,optional:d}=oZ({getSafeRouteKey:o,interceptionMarker:h,segment:f[2],routeKeys:l,keyPrefix:e,backreferenceDuplicateKeys:a});u.push(r),c.push(`/${f[1]}:${i.names[t]??n}${s?d?"*":"+":""}`),i.names[t]??=n}else if(f&&f[2]){n&&f[1]&&(u.push(`/${oY(f[1])}`),c.push(`/${f[1]}`));let{key:t,pattern:r,cleanedKey:s,repeat:d,optional:h}=oZ({getSafeRouteKey:o,segment:f[2],routeKeys:l,keyPrefix:e,backreferenceDuplicateKeys:a}),p=r;n&&f[1]&&(p=p.substring(1)),u.push(p),c.push(`/:${i.names[t]??s}${d?h?"*":"+":""}`),i.names[t]??=s}else u.push(`/${oY(s)}`),c.push(`/${s}`);r&&f&&f[3]&&(u.push(oY(f[3])),c.push(f[3]))}return{namedParameterizedRoute:u.join(""),routeKeys:l,pathToRegexpPattern:c.join(""),reference:i}}(e,(d={prefixRouteKeys:!1}).prefixRouteKeys,d.includeSuffix??!1,d.includePrefix??!1,d.backreferenceDuplicateKeys??!1,d.reference)).namedParameterizedRoute,d.excludeOptionalTrailingSlash||(r+="(?:/)?"),c=(u=o9(l={...oQ(e,d),namedRegex:`^${r}$`,routeKeys:t.routeKeys,pathToRegexpPattern:t.pathToRegexpPattern,reference:t.reference}))(e)}return{handleRewrites:function(l,c){let d=structuredClone(c),f={},h=d.pathname,p=n=>{var c,p;let m,g,y,v=(c=n.source+(s?"(/)?":""),p={removeUnnamedParams:!0,strict:!0,sensitive:!!o},m=[],g=(0,oG.pathToRegexp)(c,m,{delimiter:"/",sensitive:"boolean"==typeof p?.sensitive&&p.sensitive,strict:p?.strict}),y=(0,oG.regexpToFunction)(p?.regexModifier?new RegExp(p.regexModifier(g.source),g.flags):g,m),(e,t)=>{if("string"!=typeof e)return!1;let r=y(e);if(!r)return!1;if(p?.removeUnnamedParams)for(let e of m)"number"==typeof e.name&&delete r.params[e.name];return{...t,...r.params}});if(!d.pathname)return!1;let b=v(d.pathname);if((n.has||n.missing)&&b){let e=function(e,t,r=[],n=[]){let i={},s=r=>{let n,s=r.key;switch(r.type){case"header":s=s.toLowerCase(),n=e.headers[s];break;case"cookie":if("cookies"in e)n=e.cookies[r.key];else{var o;n=(o=e.headers,function(){let{cookie:e}=o;if(!e)return{};let{parse:t}=a("./dist/compiled/cookie/index.js");return t(Array.isArray(e)?e.join("; "):e)})()[r.key]}break;case"query":n=t[s];break;case"host":{let{host:t}=e?.headers||{};n=t?.split(":",1)[0].toLowerCase()}}if(!r.value&&n)return i[function(e){let t="";for(let r=0;r64&&n<91||n>96&&n<123)&&(t+=e[r])}return t}(s)]=n,!0;if(n){let e=RegExp(`^${r.value}$`),t=Array.isArray(n)?n.slice(-1)[0].match(e):n.match(e);if(t)return Array.isArray(t)&&(t.groups?Object.keys(t.groups).forEach(e=>{i[e]=t.groups[e]}):"host"===r.type&&t[0]&&(i.host=t[0])),!0}return!1};return!(!r.every(e=>s(e))||n.some(e=>s(e)))&&i}(l,d.query,n.has,n.missing);e?Object.assign(b,e):b=!1}if(b){let{parsedDestination:a,destQuery:s}=function(e){let t,r,n=function(e){let t=e.destination;for(let r of Object.keys({...e.params,...e.query}))r&&(t=t.replace(RegExp(`:${oY(r)}`,"g"),`__ESC_COLON_${r}`));let r=function(e){if(e.startsWith("/"))return(0,nG.r)(e);let t=new URL(e),r=t.username,n=t.password,a=r?n?`${r}:${n}`:r:null,i=t.pathname,s=t.search;return{auth:a,hash:t.hash,hostname:t.hostname,href:t.href,pathname:i,port:t.port,protocol:t.protocol,query:(0,o5.v1)(t.searchParams),search:s,origin:t.origin,slashes:"//"===t.href.slice(t.protocol.length,t.protocol.length+2)}}(t),n=r.pathname;n&&(n=o7(n));let a=r.href;a&&(a=o7(a));let i=r.hostname;i&&(i=o7(i));let s=r.hash;s&&(s=o7(s));let o=r.search;o&&(o=o7(o));let l=r.origin;return l&&(l=o7(l)),{...r,pathname:n,hostname:i,href:a,hash:s,search:o,origin:l}}(e),{hostname:a,query:i,search:s}=n,o=n.pathname;n.hash&&(o=`${o}${n.hash}`);let l=[],u=[];for(let e of(o6(o,u),u))l.push(e.name);if(a){let e=[];for(let t of(o6(a,e),e))l.push(t.name)}let c=o8(o,{validate:!1});for(let[r,n]of(a&&(t=o8(a,{validate:!1})),Object.entries(i)))Array.isArray(n)?i[r]=n.map(t=>le(o7(t),e.params)):"string"==typeof n&&(i[r]=le(o7(n),e.params));let d=Object.keys(e.params).filter(e=>"nextInternalLocale"!==e);if(e.appendParamsToQuery&&!d.some(e=>l.includes(e)))for(let t of d)t in i||(i[t]=e.params[t]);if((0,nO.m1)(o))for(let t of o.split("/")){let r=nO.VB.find(e=>t.startsWith(e));if(r){"(..)(..)"===r?(e.params["0"]="(..)",e.params["1"]="(..)"):e.params["0"]=r;break}}try{let[a,i]=(r=c(e.params)).split("#",2);t&&(n.hostname=t(e.params)),n.pathname=a,n.hash=`${i?"#":""}${i||""}`,n.search=s?le(s,e.params):""}catch(e){if(e.message.match(/Expected .*? to not repeat, but got an array/))throw Object.defineProperty(Error("To use a multi-match in the destination you must add `*` at the end of the param name to signify it should repeat. https://nextjs.org/docs/messages/invalid-multi-match"),"__NEXT_ERROR_CODE",{value:"E329",enumerable:!1,configurable:!0});throw e}return n.query={...e.query,...n.query},{newUrl:r,destQuery:i,parsedDestination:n}}({appendParamsToQuery:!0,destination:n.destination,params:b,query:d.query});if(a.protocol)return!0;if(Object.assign(f,s,b),Object.assign(d.query,a.query),delete a.query,Object.assign(d,a),!(h=d.pathname))return!1;if(r&&(h=h.replace(RegExp(`^${r}`),"")||"/"),t){let e=eP(h,t.locales);h=e.pathname,d.query.nextInternalLocale=e.detectedLocale||b.nextInternalLocale}if(h===e)return!0;if(i&&u){let e=u(h);if(e)return d.query={...d.query,...e},!0}}return!1};for(let e of n.beforeFiles||[])p(e);if(h!==e){let t,r=!1;for(let e of n.afterFiles||[])if(r=p(e))break;if(!r&&!((t=ew(h||""))===ew(e)||(null==u?void 0:u(t)))){for(let e of n.fallback||[])if(r=p(e))break}}return{rewriteParams:f,rewrittenParsedUrl:d}},defaultRouteRegex:l,dynamicRouteMatcher:u,defaultRouteMatches:c,normalizeQueryParams:function(e,t){for(let[r,n]of(delete e.nextInternalLocale,Object.entries(e))){let a=ev(r);a&&(delete e[r],t.add(a),void 0!==n&&(e[a]=Array.isArray(n)?n.map(e=>lt(e)):lt(n)))}},getParamsFromRouteMatches:function(e){if(!l)return null;let{groups:t,routeKeys:r}=l,n=o9({re:{exec:e=>{let n=Object.fromEntries(new URLSearchParams(e));for(let[e,t]of Object.entries(n)){let r=ev(e);r&&(n[r]=t,delete n[e])}let a={};for(let e of Object.keys(r)){let i=r[e];if(!i)continue;let s=t[i],o=n[e];if(!s.optional&&!o)return null;a[s.pos]=o}return a}},groups:t})(e);return n||null},normalizeDynamicRouteParams:(e,t)=>l&&c?function(e,t,r,n){let a=(e,t)=>{if(!e)return!1;let r=(0,eZ.P7)(e);for(let e=0;e<3;e++){if(r===t)return!0;let e=lt(r);if(e===r)break;r=e}return!1},i={};for(let s of Object.keys(t.groups)){let o=e[s];"string"==typeof o?o=(0,eZ.P7)(o):Array.isArray(o)&&(o=o.map(eZ.P7));let l=r[s],u=t.groups[s].optional;if((Array.isArray(l)?l.some(e=>Array.isArray(o)?o.some(t=>a(t,e)):a(o,e)):Array.isArray(o)?o.some(e=>a(e,l)):a(o,l))||void 0===o&&!(u&&n))return{params:{},hasValidParams:!1};u&&(!o||Array.isArray(o)&&1===o.length&&("index"===o[0]||o[0]===`[[...${s}]]`)||"index"===o||o===`[[...${s}]]`)&&(o=void 0,delete e[s]),o&&"string"==typeof o&&t.groups[s].repeat&&(o=o.split("/")),o&&(i[s]=o)}return{params:i,hasValidParams:!0}}(e,l,c,t):{params:{},hasValidParams:!1},normalizeCdnUrl:(e,t)=>(function(e,t){let r=lr(e.url);if(!r)return e.url;delete r.search,li(r.query,t),e.url=la(r)})(e,t),interpolateDynamicPath:(e,t)=>(function(e,t,r){if(!r)return e;for(let n of Object.keys(r.groups)){let a,{optional:i,repeat:s}=r.groups[n],o=`[${s?"...":""}${n}]`;i&&(o=`[${o}]`);let l=t[n];((a=Array.isArray(l)?l.map(e=>e&&encodeURIComponent(e)).join("/"):l?encodeURIComponent(l):"")||i)&&(e=e.replaceAll(o,a))}return e})(e,t,l),filterInternalQuery:(e,t)=>li(e,t)}}({page:T,i18n:y,basePath:g,rewrites:v,pageIsDynamic:x,trailingSlash:process.env.__NEXT_TRAILING_SLASH,caseSensitive:!!h.caseSensitive}),O=eb(null==y?void 0:y.domains,ek(_,e.headers),u);O&&C(e,"isLocaleDomain",!!O);let j=P(e,"defaultLocale")||(null==O?void 0:O.defaultLocale)||(null==y?void 0:y.defaultLocale);j&&!u&&(_.pathname=`/${j}${"/"===_.pathname?"":_.pathname}`);let $=P(e,"locale")||u||j,{rewriteParams:I,rewrittenParsedUrl:D}=A.handleRewrites(e,_),N=Object.keys(I);Object.assign(_.query,D.query),y&&(_.pathname=eP(_.pathname||"/",y.locales).pathname,D.pathname=eP(D.pathname||"/",y.locales).pathname);let M=P(e,"params");if(!M&&A.dynamicRouteMatcher){let e=A.dynamicRouteMatcher(l6((null==D?void 0:D.pathname)||_.pathname||"/")),t=A.normalizeDynamicRouteParams(e||{},!0);t.hasValidParams&&(M=t.params)}let L=P(e,"query")||{..._.query},U=new Set,F=[];if(this.definition.kind===nr.PAGES||this.definition.kind===nr.PAGES_API)for(let e of[...N,...Object.keys(A.defaultRouteMatches||{})]){let t=Array.isArray(k[e])?k[e].join(""):k[e],r=Array.isArray(L[e])?L[e].join(""):L[e];e in k&&t!==r||F.push(e)}if(A.normalizeCdnUrl(e,F),(null==b?void 0:b.isWrappedByNextServer)?A.filterInternalQuery(L,[]):A.normalizeQueryParams(L,U),A.filterInternalQuery(k,F),x){let t,r=A.normalizeDynamicRouteParams(L,!0),n=A.normalizeDynamicRouteParams(M||{},!0);if(L&&M&&n.hasValidParams&&r.hasValidParams&&U.size>0&&Object.keys(n.params).length<=Object.keys(r.params).length?(t=r.params,M=Object.assign(r.params)):t=n.hasValidParams&&M?M:r.hasValidParams?L:{},e.url=A.interpolateDynamicPath(e.url||"/",t),_.pathname=A.interpolateDynamicPath(_.pathname||"/",t),R=A.interpolateDynamicPath(R,t),!M)if(r.hasValidParams)for(let e in M=Object.assign({},r.params),A.defaultRouteMatches)delete L[e];else{let e=null==A.dynamicRouteMatcher?void 0:A.dynamicRouteMatcher.call(A,l6((null==l?void 0:l.pathname)||_.pathname||"/"));e&&(M=Object.assign({},e))}}for(let e of U)e in k?k[e]&&L[e]&&k[e]!==L[e]&&(L[e]=k[e]):delete L[e];let{isOnDemandRevalidate:H,revalidateOnlyGenerated:B}=(0,t_.checkIsOnDemandRevalidate)(e,p.preview),z=!1;if(t){let{tryGetPreviewData:r}=a("./dist/esm/server/api-utils/node/try-get-preview-data.js");z=!1!==(c=r(e,t,p.preview,!!n))}if(!w)throw Object.defineProperty(Error("Invariant: nextConfig couldn't be loaded"),"__NEXT_ERROR_CODE",{value:"E969",enumerable:!1,configurable:!0});{let{installProcessErrorHandlers:e}=a("./dist/esm/server/node-environment-extensions/process-error-handlers.js");e(!!w.experimental.removeUncaughtErrorAndRejectionListeners)}let q=T;l3(q)&&M&&(q=A.interpolateDynamicPath(q,M)),"/index"===q&&(q="/"),t&&e.headers["x-nextjs-data"]&&(!t.statusCode||200===t.statusCode)&&t.setHeader("x-nextjs-matched-path",ew(`${$?`/${$}`:""}${T}`));let X=q;try{q=q.split("/").map(e=>{try{var t;t=decodeURIComponent(e),e=t.replace(RegExp("([/#?]|%(2f|23|3f|5c))","gi"),e=>encodeURIComponent(e))}catch(e){throw Object.defineProperty(new o0.Xc("Failed to decode path param(s)."),"__NEXT_ERROR_CODE",{value:"E539",enumerable:!1,configurable:!0})}return e}).join("/")}catch(e){}if(C(e,"resolvedPathname",q=ew(q)),null==(s=w.experimental)?void 0:s.runtimeServerDeploymentId){if(!process.env.NEXT_DEPLOYMENT_ID)throw Object.defineProperty(Error("process.env.NEXT_DEPLOYMENT_ID is missing but runtimeServerDeploymentId is enabled"),"__NEXT_ERROR_CODE",{value:"E970",enumerable:!1,configurable:!0});d=process.env.NEXT_DEPLOYMENT_ID}else d=w.deploymentId||"";return{query:L,originalQuery:k,originalPathname:R,params:M,parsedUrl:_,locale:$,isNextDataRequest:E,locales:null==y?void 0:y.locales,defaultLocale:j,isDraftMode:z,previewData:c,pageIsDynamic:x,resolvedPathname:q,encodedResolvedPathname:X,isOnDemandRevalidate:H,revalidateOnlyGenerated:B,...f,nextConfig:w,routerServerContext:b,deploymentId:d,clientAssetToken:w.experimental.immutableAssetToken||d}}getResponseCache(e){if(!this.responseCache){let t=P(e,"minimalMode")??!1;this.responseCache=new nc(t)}return this.responseCache}async handleResponse({req:e,nextConfig:t,cacheKey:r,routeKind:n,isFallback:a,prerenderManifest:i,isRoutePPREnabled:s,isOnDemandRevalidate:o,revalidateOnlyGenerated:l,responseGenerator:u,waitUntil:c,isMinimalMode:d}){let f=this.getResponseCache(e),h=await f.get(r,u,{routeKind:n,isFallback:a,isRoutePPREnabled:s,isOnDemandRevalidate:o,isPrefetch:"prefetch"===e.headers.purpose,invocationID:e.headers["x-invocation-id"],incrementalCache:await this.getIncrementalCache(e,t,i,d),waitUntil:c});if(!h&&r&&!(o&&l))throw Object.defineProperty(Error("invariant: cache entry required but not generated"),"__NEXT_ERROR_CODE",{value:"E62",enumerable:!1,configurable:!0});return h}}var uR=a("./dist/esm/shared/lib/head-manager-context.shared-runtime.js");let uk=O.createContext(null);class ux{constructor(e,t){this.matchers=Object.entries(t.dynamicRoutes).filter(([t,r])=>r.fallbackSourceRoute===e||t===e).map(([e,t])=>({source:e,route:t}))}match(e){for(let t of this.matchers)if(t.matcher||(t.matcher=o9(oQ(t.source))),t.matcher(e))return{source:t.source,route:t.route};return null}}class uP{constructor(e){this.suffix=e}match(e){return!!e.endsWith(this.suffix)}normalize(e,t){return t||this.match(e)?e.substring(0,e.length-this.suffix.length):e}}class uC extends uP{constructor(){super(ey.RM)}}let uT=RegExp(`^(/.*)${oY(ey.mH)}(/.*)${oY(ey.tz)}$`);class uA{match(e){return uT.test(e)}extract(e){let t=e.match(uT);return t?{originalPathname:t[1],segmentPath:t[2]}:null}normalize(e){let t=this.extract(e);return t?t.originalPathname:e}}{r=a("(react-server)/./dist/esm/server/route-modules/app-page/vendored/rsc/entrypoints.js"),n=a("./dist/esm/server/route-modules/app-page/vendored/ssr/entrypoints.js");let{registerServerReact:e,registerClientReact:t}=a("../../runtime-reacts.external");e(r.React),t(n.React)}class uO extends uE{match(e,t){let r=this.matchers.get(t);return r||(r=new ux(this.definition.pathname,t),this.matchers.set(t,r)),r.match(e)}normalizeUrl(e,t){if(this.normalizers.segmentPrefetchRSC.match(t.pathname||"/")){let r=this.normalizers.segmentPrefetchRSC.extract(t.pathname||"/");if(!r)return!1;let{originalPathname:n,segmentPath:a}=r;t.pathname=n,e.headers[z.hY]="1",e.headers[z._V]="1",e.headers[z.qm]=a,C(e,"isRSCRequest",!0),C(e,"isPrefetchRSCRequest",!0),C(e,"segmentPrefetchRSCRequest",a)}else this.normalizers.rsc.match(t.pathname||"/")?(t.pathname=this.normalizers.rsc.normalize(t.pathname||"/",!0),e.headers[z.hY]="1",C(e,"isRSCRequest",!0)):super.normalizeUrl(e,t);!function(e,t){if(!e.url)return;let r=lr(e.url);r&&(r.pathname=t,e.url=la(r))}(e,t.pathname||"/")}render(e,t,r){return lU(e,t,r.page,r.query,r.fallbackRouteParams,r.renderOpts,r.serverComponentsHmrCache,r.sharedContext)}pathCouldBeIntercepted(e,t){return(0,nO.m1)(e)||t.some(t=>t.test(e))}getVaryHeader(e,t){let r=`${z.hY}, ${z.B}, ${z._V}, ${z.qm}`;return this.pathCouldBeIntercepted(e,t)?`${r}, ${z.kO}`:r}constructor(...e){super(...e),this.matchers=new WeakMap,this.normalizers={rsc:new uC,segmentPrefetchRSC:new uA}}}let uj={"react-rsc":r,"react-ssr":n,contexts:k},u$=uO})(),module.exports=i})(); +//# sourceMappingURL=app-page-turbo.runtime.prod.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.prod.js b/build/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.prod.js new file mode 100644 index 0000000..bca46ca --- /dev/null +++ b/build/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.prod.js @@ -0,0 +1,6 @@ +(()=>{var e,t,r={"./dist/compiled/@edge-runtime/cookies/index.js"(e){"use strict";var t=Object.defineProperty,r=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,a=Object.prototype.hasOwnProperty,i={},s={RequestCookies:()=>f,ResponseCookies:()=>p,parseCookie:()=>c,parseSetCookie:()=>u,stringifyCookie:()=>l};for(var o in s)t(i,o,{get:s[o],enumerable:!0});function l(e){var t;let r=["path"in e&&e.path&&`Path=${e.path}`,"expires"in e&&(e.expires||0===e.expires)&&`Expires=${("number"==typeof e.expires?new Date(e.expires):e.expires).toUTCString()}`,"maxAge"in e&&"number"==typeof e.maxAge&&`Max-Age=${e.maxAge}`,"domain"in e&&e.domain&&`Domain=${e.domain}`,"secure"in e&&e.secure&&"Secure","httpOnly"in e&&e.httpOnly&&"HttpOnly","sameSite"in e&&e.sameSite&&`SameSite=${e.sameSite}`,"partitioned"in e&&e.partitioned&&"Partitioned","priority"in e&&e.priority&&`Priority=${e.priority}`].filter(Boolean),n=`${e.name}=${encodeURIComponent(null!=(t=e.value)?t:"")}`;return 0===r.length?n:`${n}; ${r.join("; ")}`}function c(e){let t=new Map;for(let r of e.split(/; */)){if(!r)continue;let e=r.indexOf("=");if(-1===e){t.set(r,"true");continue}let[n,a]=[r.slice(0,e),r.slice(e+1)];try{t.set(n,decodeURIComponent(null!=a?a:"true"))}catch{}}return t}function u(e){if(!e)return;let[[t,r],...n]=c(e),{domain:a,expires:i,httponly:s,maxage:o,path:l,samesite:u,secure:f,partitioned:p,priority:m}=Object.fromEntries(n.map(([e,t])=>[e.toLowerCase().replace(/-/g,""),t]));{var g,v,y={name:t,value:decodeURIComponent(r),domain:a,...i&&{expires:new Date(i)},...s&&{httpOnly:!0},..."string"==typeof o&&{maxAge:Number(o)},path:l,...u&&{sameSite:d.includes(g=(g=u).toLowerCase())?g:void 0},...f&&{secure:!0},...m&&{priority:h.includes(v=(v=m).toLowerCase())?v:void 0},...p&&{partitioned:!0}};let e={};for(let t in y)y[t]&&(e[t]=y[t]);return e}}e.exports=((e,i,s,o)=>{if(i&&"object"==typeof i||"function"==typeof i)for(let l of n(i))a.call(e,l)||l===s||t(e,l,{get:()=>i[l],enumerable:!(o=r(i,l))||o.enumerable});return e})(t({},"__esModule",{value:!0}),i);var d=["strict","lax","none"],h=["low","medium","high"],f=class{constructor(e){this._parsed=new Map,this._headers=e;const t=e.get("cookie");if(t)for(const[e,r]of c(t))this._parsed.set(e,{name:e,value:r})}[Symbol.iterator](){return this._parsed[Symbol.iterator]()}get size(){return this._parsed.size}get(...e){let t="string"==typeof e[0]?e[0]:e[0].name;return this._parsed.get(t)}getAll(...e){var t;let r=Array.from(this._parsed);if(!e.length)return r.map(([e,t])=>t);let n="string"==typeof e[0]?e[0]:null==(t=e[0])?void 0:t.name;return r.filter(([e])=>e===n).map(([e,t])=>t)}has(e){return this._parsed.has(e)}set(...e){let[t,r]=1===e.length?[e[0].name,e[0].value]:e,n=this._parsed;return n.set(t,{name:t,value:r}),this._headers.set("cookie",Array.from(n).map(([e,t])=>l(t)).join("; ")),this}delete(e){let t=this._parsed,r=Array.isArray(e)?e.map(e=>t.delete(e)):t.delete(e);return this._headers.set("cookie",Array.from(t).map(([e,t])=>l(t)).join("; ")),r}clear(){return this.delete(Array.from(this._parsed.keys())),this}[Symbol.for("edge-runtime.inspect.custom")](){return`RequestCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`}toString(){return[...this._parsed.values()].map(e=>`${e.name}=${encodeURIComponent(e.value)}`).join("; ")}},p=class{constructor(e){var t,r,n;this._parsed=new Map,this._headers=e;const a=null!=(n=null!=(r=null==(t=e.getSetCookie)?void 0:t.call(e))?r:e.get("set-cookie"))?n:[];for(const e of Array.isArray(a)?a:function(e){if(!e)return[];var t,r,n,a,i,s=[],o=0;function l(){for(;o=e.length)&&s.push(e.substring(t,e.length))}return s}(a)){const t=u(e);t&&this._parsed.set(t.name,t)}}get(...e){let t="string"==typeof e[0]?e[0]:e[0].name;return this._parsed.get(t)}getAll(...e){var t;let r=Array.from(this._parsed.values());if(!e.length)return r;let n="string"==typeof e[0]?e[0]:null==(t=e[0])?void 0:t.name;return r.filter(e=>e.name===n)}has(e){return this._parsed.has(e)}set(...e){let[t,r,n]=1===e.length?[e[0].name,e[0].value,e[0]]:e,a=this._parsed;return a.set(t,function(e={name:"",value:""}){return"number"==typeof e.expires&&(e.expires=new Date(e.expires)),e.maxAge&&(e.expires=new Date(Date.now()+1e3*e.maxAge)),(null===e.path||void 0===e.path)&&(e.path="/"),e}({name:t,value:r,...n})),function(e,t){for(let[,r]of(t.delete("set-cookie"),e)){let e=l(r);t.append("set-cookie",e)}}(a,this._headers),this}delete(...e){let[t,r]="string"==typeof e[0]?[e[0]]:[e[0].name,e[0]];return this.set({...r,name:t,value:"",expires:new Date(0)})}[Symbol.for("edge-runtime.inspect.custom")](){return`ResponseCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`}toString(){return[...this._parsed.values()].map(l).join("; ")}}},"./dist/compiled/cookie/index.js"(e){(()=>{"use strict";"undefined"!=typeof __nccwpck_require__&&(__nccwpck_require__.ab=__dirname+"/");var t,r,n,a,i={};i.parse=function(e,r){if("string"!=typeof e)throw TypeError("argument str must be a string");for(var a={},i=e.split(n),s=(r||{}).decode||t,o=0;o{"use strict";let t,r,n,a,i;var s={993:e=>{var t=Object.prototype.hasOwnProperty,r="~";function n(){}function a(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function i(e,t,n,i,s){if("function"!=typeof n)throw TypeError("The listener must be a function");var o=new a(n,i||e,s),l=r?r+t:t;return e._events[l]?e._events[l].fn?e._events[l]=[e._events[l],o]:e._events[l].push(o):(e._events[l]=o,e._eventsCount++),e}function s(e,t){0==--e._eventsCount?e._events=new n:delete e._events[t]}function o(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(r=!1)),o.prototype.eventNames=function(){var e,n,a=[];if(0===this._eventsCount)return a;for(n in e=this._events)t.call(e,n)&&a.push(r?n.slice(1):n);return Object.getOwnPropertySymbols?a.concat(Object.getOwnPropertySymbols(e)):a},o.prototype.listeners=function(e){var t=r?r+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var a=0,i=n.length,s=Array(i);a{e.exports=(e,t)=>(t=t||(()=>{}),e.then(e=>new Promise(e=>{e(t())}).then(()=>e),e=>new Promise(e=>{e(t())}).then(()=>{throw e})))},574:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){let n=0,a=e.length;for(;a>0;){let i=a/2|0,s=n+i;0>=r(e[s],t)?(n=++s,a-=i+1):a=i}return n}},821:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});let n=r(574);t.default=class{constructor(){this._queue=[]}enqueue(e,t){let r={priority:(t=Object.assign({priority:0},t)).priority,run:e};if(this.size&&this._queue[this.size-1].priority>=t.priority)return void this._queue.push(r);let a=n.default(this._queue,r,(e,t)=>t.priority-e.priority);this._queue.splice(a,0,r)}dequeue(){let e=this._queue.shift();return null==e?void 0:e.run}filter(e){return this._queue.filter(t=>t.priority===e.priority).map(e=>e.run)}get size(){return this._queue.length}}},816:(e,t,r)=>{let n=r(213);class a extends Error{constructor(e){super(e),this.name="TimeoutError"}}let i=(e,t,r)=>new Promise((i,s)=>{if("number"!=typeof t||t<0)throw TypeError("Expected `milliseconds` to be a positive number");if(t===1/0)return void i(e);let o=setTimeout(()=>{if("function"==typeof r){try{i(r())}catch(e){s(e)}return}let n="string"==typeof r?r:`Promise timed out after ${t} milliseconds`,o=r instanceof Error?r:new a(n);"function"==typeof e.cancel&&e.cancel(),s(o)},t);n(e.then(i,s),()=>{clearTimeout(o)})});e.exports=i,e.exports.default=i,e.exports.TimeoutError=a}},o={};function l(e){var t=o[e];if(void 0!==t)return t.exports;var r=o[e]={exports:{}},n=!0;try{s[e](r,r.exports,l),n=!1}finally{n&&delete o[e]}return r.exports}l.ab=__dirname+"/";var c={};Object.defineProperty(c,"__esModule",{value:!0}),t=l(993),r=l(816),n=l(821),a=()=>{},i=new r.TimeoutError,c.default=class extends t{constructor(e){var t,r,i,s;if(super(),this._intervalCount=0,this._intervalEnd=0,this._pendingCount=0,this._resolveEmpty=a,this._resolveIdle=a,!("number"==typeof(e=Object.assign({carryoverConcurrencyCount:!1,intervalCap:1/0,interval:0,concurrency:1/0,autoStart:!0,queueClass:n.default},e)).intervalCap&&e.intervalCap>=1))throw TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${null!=(r=null==(t=e.intervalCap)?void 0:t.toString())?r:""}\` (${typeof e.intervalCap})`);if(void 0===e.interval||!(Number.isFinite(e.interval)&&e.interval>=0))throw TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${null!=(s=null==(i=e.interval)?void 0:i.toString())?s:""}\` (${typeof e.interval})`);this._carryoverConcurrencyCount=e.carryoverConcurrencyCount,this._isIntervalIgnored=e.intervalCap===1/0||0===e.interval,this._intervalCap=e.intervalCap,this._interval=e.interval,this._queue=new e.queueClass,this._queueClass=e.queueClass,this.concurrency=e.concurrency,this._timeout=e.timeout,this._throwOnTimeout=!0===e.throwOnTimeout,this._isPaused=!1===e.autoStart}get _doesIntervalAllowAnother(){return this._isIntervalIgnored||this._intervalCount{this._onResumeInterval()},t)),!0;this._intervalCount=this._carryoverConcurrencyCount?this._pendingCount:0}return!1}_tryToStartAnother(){if(0===this._queue.size)return this._intervalId&&clearInterval(this._intervalId),this._intervalId=void 0,this._resolvePromises(),!1;if(!this._isPaused){let e=!this._isIntervalPaused();if(this._doesIntervalAllowAnother&&this._doesConcurrentAllowAnother){let t=this._queue.dequeue();return!!t&&(this.emit("active"),t(),e&&this._initializeIntervalIfNeeded(),!0)}}return!1}_initializeIntervalIfNeeded(){this._isIntervalIgnored||void 0!==this._intervalId||(this._intervalId=setInterval(()=>{this._onInterval()},this._interval),this._intervalEnd=Date.now()+this._interval)}_onInterval(){0===this._intervalCount&&0===this._pendingCount&&this._intervalId&&(clearInterval(this._intervalId),this._intervalId=void 0),this._intervalCount=this._carryoverConcurrencyCount?this._pendingCount:0,this._processQueue()}_processQueue(){for(;this._tryToStartAnother(););}get concurrency(){return this._concurrency}set concurrency(e){if(!("number"==typeof e&&e>=1))throw TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${e}\` (${typeof e})`);this._concurrency=e,this._processQueue()}async add(e,t={}){return new Promise((n,a)=>{let s=async()=>{this._pendingCount++,this._intervalCount++;try{let s=void 0===this._timeout&&void 0===t.timeout?e():r.default(Promise.resolve(e()),void 0===t.timeout?this._timeout:t.timeout,()=>{(void 0===t.throwOnTimeout?this._throwOnTimeout:t.throwOnTimeout)&&a(i)});n(await s)}catch(e){a(e)}this._next()};this._queue.enqueue(s,t),this._tryToStartAnother(),this.emit("add")})}async addAll(e,t){return Promise.all(e.map(async e=>this.add(e,t)))}start(){return this._isPaused&&(this._isPaused=!1,this._processQueue()),this}pause(){this._isPaused=!0}clear(){this._queue=new this._queueClass}async onEmpty(){if(0!==this._queue.size)return new Promise(e=>{let t=this._resolveEmpty;this._resolveEmpty=()=>{t(),e()}})}async onIdle(){if(0!==this._pendingCount||0!==this._queue.size)return new Promise(e=>{let t=this._resolveIdle;this._resolveIdle=()=>{t(),e()}})}get size(){return this._queue.size}sizeBy(e){return this._queue.filter(e).length}get pending(){return this._pendingCount}get isPaused(){return this._isPaused}get timeout(){return this._timeout}set timeout(e){this._timeout=e}},e.exports=c})()},"./dist/compiled/path-to-regexp/index.js"(e){(()=>{"use strict";"undefined"!=typeof __nccwpck_require__&&(__nccwpck_require__.ab=__dirname+"/");var t={};(()=>{function e(e,t){void 0===t&&(t={});for(var r=function(e){for(var t=[],r=0;r=48&&s<=57||s>=65&&s<=90||s>=97&&s<=122||95===s){a+=e[i++];continue}break}if(!a)throw TypeError("Missing parameter name at ".concat(r));t.push({type:"NAME",index:r,value:a}),r=i;continue}if("("===n){var o=1,l="",i=r+1;if("?"===e[i])throw TypeError('Pattern cannot start with "?" at '.concat(i));for(;i-1)return!0}return!1},g=function(e){var t=l[l.length-1],r=e||(t&&"string"==typeof t?t:"");if(t&&!r)throw TypeError('Must have text between two parameters, missing text after "'.concat(t.name,'"'));return!r||m(r)?"[^".concat(a(o),"]+?"):"(?:(?!".concat(a(r),")[^").concat(a(o),"])+?")};u-1:void 0===_;s||(m+="(?:".concat(p,"(?=").concat(f,"))?")),w||(m+="(?=".concat(p,"|").concat(f,")"))}return new RegExp(m,i(r))}function o(t,r,n){if(t instanceof RegExp){var a;if(!r)return t;for(var l=/\((?:\?<(.*?)>)?(?!\?)/g,c=0,u=l.exec(t.source);u;)r.push({name:u[1]||c++,prefix:"",suffix:"",modifier:"",pattern:""}),u=l.exec(t.source);return t}return Array.isArray(t)?(a=t.map(function(e){return o(e,r,n).source}),new RegExp("(?:".concat(a.join("|"),")"),i(n))):s(e(t,n),r,n)}Object.defineProperty(t,"__esModule",{value:!0}),t.pathToRegexp=t.tokensToRegexp=t.regexpToFunction=t.match=t.tokensToFunction=t.compile=t.parse=void 0,t.parse=e,t.compile=function(t,n){return r(e(t,n),n)},t.tokensToFunction=r,t.match=function(e,t){var r=[];return n(o(e,r,t),r,t)},t.regexpToFunction=n,t.tokensToRegexp=s,t.pathToRegexp=o})(),e.exports=t})()},"./dist/compiled/react/cjs/react.production.js"(e,t){"use strict";var r=Symbol.for("react.transitional.element"),n=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),i=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),o=Symbol.for("react.consumer"),l=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),h=Symbol.for("react.lazy"),f=Symbol.for("react.activity"),p=Symbol.for("react.view_transition"),m=Symbol.iterator,g={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},v=Object.assign,y={};function b(e,t,r){this.props=e,this.context=t,this.refs=y,this.updater=r||g}function E(){}function _(e,t,r){this.props=e,this.context=t,this.refs=y,this.updater=r||g}b.prototype.isReactComponent={},b.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},b.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},E.prototype=b.prototype;var w=_.prototype=new E;w.constructor=_,v(w,b.prototype),w.isPureReactComponent=!0;var R=Array.isArray;function x(){}var P={H:null,A:null,T:null,S:null},S=Object.prototype.hasOwnProperty;function C(e,t,n){var a=n.ref;return{$$typeof:r,type:e,key:t,ref:void 0!==a?a:null,props:n}}function O(e){return"object"==typeof e&&null!==e&&e.$$typeof===r}var T=/\/+/g;function A(e,t){var r,n;return"object"==typeof e&&null!==e&&null!=e.key?(r=""+e.key,n={"=":"=0",":":"=2"},"$"+r.replace(/[=:]/g,function(e){return n[e]})):t.toString(36)}function j(e,t,a){if(null==e)return e;var i=[],s=0;return!function e(t,a,i,s,o){var l,c,u,d=typeof t;("undefined"===d||"boolean"===d)&&(t=null);var f=!1;if(null===t)f=!0;else switch(d){case"bigint":case"string":case"number":f=!0;break;case"object":switch(t.$$typeof){case r:case n:f=!0;break;case h:return e((f=t._init)(t._payload),a,i,s,o)}}if(f)return o=o(t),f=""===s?"."+A(t,0):s,R(o)?(i="",null!=f&&(i=f.replace(T,"$&/")+"/"),e(o,a,i,"",function(e){return e})):null!=o&&(O(o)&&(l=o,c=i+(null==o.key||t&&t.key===o.key?"":(""+o.key).replace(T,"$&/")+"/")+f,o=C(l.type,c,l.props)),a.push(o)),1;f=0;var p=""===s?".":s+":";if(R(t))for(var g=0;g{"use strict";var t={328:e=>{e.exports=function(e){for(var t=5381,r=e.length;r;)t=33*t^e.charCodeAt(--r);return t>>>0}}},r={};function n(e){var a=r[e];if(void 0!==a)return a.exports;var i=r[e]={exports:{}},s=!0;try{t[e](i,i.exports,n),s=!1}finally{s&&delete r[e]}return i.exports}n.ab=__dirname+"/",e.exports=n(328)})()},"./dist/esm/lib/constants.js"(e,t,r){"use strict";r.d(t,{AA:()=>a,AR:()=>E,EP:()=>h,RM:()=>u,VC:()=>f,c1:()=>m,eM:()=>b,gW:()=>y,h:()=>i,j9:()=>n,kz:()=>s,mH:()=>l,o7:()=>g,qq:()=>v,r4:()=>o,tz:()=>c,vS:()=>p,x3:()=>d});let n="text/html; charset=utf-8",a="nxtP",i="nxtI",s="x-prerender-revalidate",o="x-prerender-revalidate-if-generated",l=".segments",c=".segment.rsc",u=".rsc",d=".json",h=".meta",f="x-next-cache-tags",p="x-next-revalidated-tags",m="x-next-revalidate-tag-token",g=128,v=256,y="_N_T_",b=31536e3,E=0xfffffffe,_={shared:"shared",reactServerComponents:"rsc",serverSideRendering:"ssr",actionBrowser:"action-browser",apiNode:"api-node",apiEdge:"api-edge",middleware:"middleware",instrument:"instrument",edgeAsset:"edge-asset",appPagesBrowser:"app-pages-browser",pagesDirBrowser:"pages-dir-browser",pagesDirEdge:"pages-dir-edge",pagesDirNode:"pages-dir-node"};({..._,GROUP:{builtinReact:[_.reactServerComponents,_.actionBrowser],serverOnly:[_.reactServerComponents,_.actionBrowser,_.instrument,_.middleware],neutralTarget:[_.apiNode,_.apiEdge],clientOnly:[_.serverSideRendering,_.appPagesBrowser],bundled:[_.reactServerComponents,_.actionBrowser,_.serverSideRendering,_.appPagesBrowser,_.shared,_.instrument,_.middleware],appPages:[_.reactServerComponents,_.serverSideRendering,_.appPagesBrowser,_.actionBrowser]}})},"./dist/esm/lib/format-dynamic-import-path.js"(e,t,r){"use strict";r.r(t),r.d(t,{formatDynamicImportPath:()=>s});var n=r("path"),a=r.n(n);let i=require("url"),s=(e,t)=>{let r=a().isAbsolute(t)?t:a().join(e,t);return(0,i.pathToFileURL)(r).toString()}},"./dist/esm/server/api-utils/index.js"(e,t,r){"use strict";r.d(t,{COOKIE_NAME_PRERENDER_BYPASS:()=>s,COOKIE_NAME_PRERENDER_DATA:()=>o,SYMBOL_PREVIEW_DATA:()=>l,checkIsOnDemandRevalidate:()=>i,clearPreviewData:()=>u});var n=r("./dist/esm/server/web/spec-extension/adapters/headers.js"),a=r("./dist/esm/lib/constants.js");function i(e,t){let r=n.o.from(e.headers);return{isOnDemandRevalidate:r.get(a.kz)===t.previewModeId,revalidateOnlyGenerated:r.has(a.r4)}}r("../../lib/trace/tracer"),r("./dist/esm/server/lib/trace/constants.js");let s="__prerender_bypass",o="__next_preview_data",l=Symbol(o),c=Symbol(s);function u(e,t={}){if(c in e)return e;let{serialize:n}=r("./dist/compiled/cookie/index.js"),a=e.getHeader("Set-Cookie");return e.setHeader("Set-Cookie",[..."string"==typeof a?[a]:Array.isArray(a)?a:[],n(s,"",{expires:new Date(0),httpOnly:!0,sameSite:"none",secure:!0,path:"/",...void 0!==t.path?{path:t.path}:void 0}),n(o,"",{expires:new Date(0),httpOnly:!0,sameSite:"none",secure:!0,path:"/",...void 0!==t.path?{path:t.path}:void 0})]),Object.defineProperty(e,c,{value:!0,enumerable:!1}),e}},"./dist/esm/server/api-utils/node/try-get-preview-data.js"(e,t,r){"use strict";r.r(t),r.d(t,{tryGetPreviewData:()=>s});var n=r("./dist/esm/server/api-utils/index.js"),a=r("./dist/esm/server/web/spec-extension/cookies.js"),i=r("./dist/esm/server/web/spec-extension/adapters/headers.js");function s(e,t,s,o){var l,c;let u;if(s&&(0,n.checkIsOnDemandRevalidate)(e,s).isOnDemandRevalidate)return!1;if(n.SYMBOL_PREVIEW_DATA in e)return e[n.SYMBOL_PREVIEW_DATA];let d=i.o.from(e.headers),h=new a.tm(d),f=null==(l=h.get(n.COOKIE_NAME_PRERENDER_BYPASS))?void 0:l.value,p=null==(c=h.get(n.COOKIE_NAME_PRERENDER_DATA))?void 0:c.value;if(f&&!p&&f===s.previewModeId){let t={};return Object.defineProperty(e,n.SYMBOL_PREVIEW_DATA,{value:t,enumerable:!1}),t}if(!f&&!p)return!1;if(!f||!p||f!==s.previewModeId)return o||(0,n.clearPreviewData)(t),!1;try{u=r("next/dist/compiled/jsonwebtoken").verify(p,s.previewModeSigningKey)}catch{return(0,n.clearPreviewData)(t),!1}let{decryptWithSecret:m}=r("./dist/esm/server/crypto-utils.js"),g=m(Buffer.from(s.previewModeEncryptionKey),u.data);try{let t=JSON.parse(g);return Object.defineProperty(e,n.SYMBOL_PREVIEW_DATA,{value:t,enumerable:!1}),t}catch{return!1}}},"./dist/esm/server/app-render/instant-validation/instant-samples.js"(e,t,r){"use strict";r.r(t),r.d(t,{assertRootParamInSamples:()=>x,createCookiesFromSample:()=>m,createDraftModeForValidation:()=>y,createExhaustiveParamsProxy:()=>b,createExhaustiveSearchParamsProxy:()=>E,createExhaustiveURLSearchParamsProxy:()=>_,createHeadersFromSample:()=>v,createRelativeURLFromSamples:()=>R,createValidationSampleTracking:()=>h,trackMissingSampleError:()=>f,trackMissingSampleErrorAndThrow:()=>p});var n=r("./dist/esm/server/web/spec-extension/cookies.js"),a=r("./dist/esm/server/web/spec-extension/adapters/request-cookies.js"),i=r("./dist/esm/server/web/spec-extension/adapters/headers.js"),s=r("./dist/esm/shared/lib/router/utils/get-segment-param.js"),o=r("./dist/esm/shared/lib/router/utils/parse-relative-url.js"),l=r("./dist/esm/shared/lib/invariant-error.js"),c=r("./dist/esm/server/app-render/instant-validation/instant-validation-error.js"),u=r("../../app-render/work-unit-async-storage.external"),d=r("./dist/esm/shared/lib/utils/reflect-utils.js");function h(){return{missingSampleErrors:[]}}function f(e){(function(){let e=null,t=u.workUnitAsyncStorage.getStore();if(t)switch(t.type){case"request":case"validation-client":e=t.validationSampleTracking??null}if(!e)throw Object.defineProperty(new l.z("Expected to have a workUnitStore that provides validationSampleTracking"),"__NEXT_ERROR_CODE",{value:"E1110",enumerable:!1,configurable:!0});return e})().missingSampleErrors.push(e)}function p(e){throw f(e),e}function m(e,t){let r=new Set,i=new n.tm(new Headers);if(e)for(let t of e)r.add(t.name),null!==t.value&&i.set(t.name,t.value);return new Proxy(a.Ck.seal(i),{get(e,n,a){if("has"===n){let i=Reflect.get(e,n,a);return function(n){return r.has(n)||p(g(t,n)),i.call(e,n)}}if("get"===n){let i=Reflect.get(e,n,a);return function(n){let a;if("string"==typeof n)a=n;else{if(!n||"object"!=typeof n||"string"!=typeof n.name)return i.call(e,n);a=n.name}return r.has(a)||p(g(t,a)),i.call(e,a)}}return Reflect.get(e,n,a)}})}function g(e,t){return Object.defineProperty(new c.D(`Route "${e}" accessed cookie "${t}" which is not defined in the \`samples\` of \`unstable_instant\`. Add it to the sample's \`cookies\` array, or \`{ name: "${t}", value: null }\` if it should be absent.`),"__NEXT_ERROR_CODE",{value:"E1115",enumerable:!1,configurable:!0})}function v(e,t,r){let n=e?[...e]:[];if(n.find(([e])=>"cookie"===e.toLowerCase()))throw Object.defineProperty(new c.D('Invalid sample: Defining cookies via a "cookie" header is not supported. Use `cookies: [{ name: ..., value: ... }]` instead.'),"__NEXT_ERROR_CODE",{value:"E1111",enumerable:!1,configurable:!0});if(t){let e=t.toString();n.push(["cookie",""!==e?e:null])}let a=new Set,s={};for(let[e,t]of n)a.add(e.toLowerCase()),null!==t&&(s[e.toLowerCase()]=t);return new Proxy(i.o.seal(i.o.from(s)),{get(e,t,n){if("get"===t||"has"===t){let i=Reflect.get(e,t,n);return function(t){let n=t.toLowerCase();return a.has(n)||p(Object.defineProperty(new c.D(`Route "${r}" accessed header "${n}" which is not defined in the \`samples\` of \`unstable_instant\`. Add it to the sample's \`headers\` array, or \`["${n}", null]\` if it should be absent.`),"__NEXT_ERROR_CODE",{value:"E1116",enumerable:!1,configurable:!0})),i.call(e,n)}}return Reflect.get(e,t,n)}})}function y(){return{get isEnabled(){return!1},enable(){throw Object.defineProperty(Error("Draft mode cannot be enabled during build-time instant validation."),"__NEXT_ERROR_CODE",{value:"E1092",enumerable:!1,configurable:!0})},disable(){throw Object.defineProperty(Error("Draft mode cannot be disabled during build-time instant validation."),"__NEXT_ERROR_CODE",{value:"E1094",enumerable:!1,configurable:!0})}}}function b(e,t,r){return new Proxy(e,{get:(n,a,i)=>("string"==typeof a&&!d.lY.has(a)&&a in e&&!t.has(a)&&p(Object.defineProperty(new c.D(`Route "${r}" accessed param "${a}" which is not defined in the \`samples\` of \`unstable_instant\`. Add it to the sample's \`params\` object.`),"__NEXT_ERROR_CODE",{value:"E1095",enumerable:!1,configurable:!0})),Reflect.get(n,a,i))})}function E(e,t,r){return new Proxy(e,{get:(e,n,a)=>("string"!=typeof n||d.lY.has(n)||t.has(n)||p(w(r,n)),Reflect.get(e,n,a)),has:(e,n)=>("string"!=typeof n||d.lY.has(n)||t.has(n)||p(w(r,n)),Reflect.has(e,n))})}function _(e,t,r){return new Proxy(e,{get(e,n,a){if("get"===n||"getAll"===n||"has"===n){let i=Reflect.get(e,n,a);return n=>("string"!=typeof n||t.has(n)||p(w(r,n)),i.call(e,n))}let i=Reflect.get(e,n,a);return"function"!=typeof i||Object.hasOwn(e,n)?i:i.bind(e)}})}function w(e,t){return Object.defineProperty(new c.D(`Route "${e}" accessed searchParam "${t}" which is not defined in the \`samples\` of \`unstable_instant\`. Add it to the sample's \`searchParams\` object, or \`{ "${t}": null }\` if it should be absent.`),"__NEXT_ERROR_CODE",{value:"E1098",enumerable:!1,configurable:!0})}function R(e,t,r){let n=function(e,t){let r=[];for(let n of e.split("/")){let e=(0,s.Hp)(n);if(e)switch(e.paramType){case"catchall":case"optional-catchall":{let a=t[e.paramName];if(void 0===a)a=[n];else if(!Array.isArray(a))throw Object.defineProperty(new c.D(`Expected sample param value for segment '${n}' to be an array of strings, got ${typeof a}`),"__NEXT_ERROR_CODE",{value:"E1104",enumerable:!1,configurable:!0});r.push(...a.map(e=>encodeURIComponent(e)));break}case"dynamic":{let a=t[e.paramName];if(void 0===a)a=n;else if("string"!=typeof a)throw Object.defineProperty(new c.D(`Expected sample param value for segment '${n}' to be a string, got ${typeof a}`),"__NEXT_ERROR_CODE",{value:"E1108",enumerable:!1,configurable:!0});r.push(encodeURIComponent(a));break}case"catchall-intercepted-(..)(..)":case"catchall-intercepted-(.)":case"catchall-intercepted-(..)":case"catchall-intercepted-(...)":case"dynamic-intercepted-(..)(..)":case"dynamic-intercepted-(.)":case"dynamic-intercepted-(..)":case"dynamic-intercepted-(...)":throw Object.defineProperty(new l.z("Not implemented: Validation of interception routes"),"__NEXT_ERROR_CODE",{value:"E1106",enumerable:!1,configurable:!0});default:e.paramType}else r.push(n)}return r.join("/")}(e,t??{}),a="";if(r){let e=(function(e){let t=new URLSearchParams;if(e){for(let[r,n]of Object.entries(e))if(null!=n)if(Array.isArray(n))for(let e of n)t.append(r,e);else t.set(r,n)}return t})(r).toString();e&&(a="?"+e)}return(0,o.r)(n+a,void 0,!0)}function x(e,t,r){if(t&&r in t);else{let t=e.route;p(Object.defineProperty(new c.D(`Route "${t}" accessed root param "${r}" which is not defined in the \`samples\` of \`unstable_instant\`. Add it to the sample's \`params\` object.`),"__NEXT_ERROR_CODE",{value:"E1114",enumerable:!1,configurable:!0}))}}},"./dist/esm/server/app-render/instant-validation/instant-validation-error.js"(e,t,r){"use strict";r.d(t,{D:()=>i,R:()=>a});let n="INSTANT_VALIDATION_ERROR";function a(e){return!!(e&&"object"==typeof e&&e instanceof Error&&e.digest===n)}class i extends Error{constructor(...e){super(...e),this.digest=n}}},"./dist/esm/server/crypto-utils.js"(e,t,r){"use strict";r.r(t),r.d(t,{decryptWithSecret:()=>o,encryptWithSecret:()=>s});var n=r("crypto"),a=r.n(n);let i="aes-256-gcm";function s(e,t){let r=a().randomBytes(16),n=a().randomBytes(64),s=a().pbkdf2Sync(e,n,1e5,32,"sha512"),o=a().createCipheriv(i,s,r),l=Buffer.concat([o.update(t,"utf8"),o.final()]),c=o.getAuthTag();return Buffer.concat([n,r,c,l]).toString("hex")}function o(e,t){let r=Buffer.from(t,"hex"),n=r.slice(0,64),s=r.slice(64,80),o=r.slice(80,96),l=r.slice(96),c=a().pbkdf2Sync(e,n,1e5,32,"sha512"),u=a().createDecipheriv(i,c,s);return u.setAuthTag(o),u.update(l)+u.final("utf8")}},"./dist/esm/server/lib/node-fs-methods.js"(e,t,r){"use strict";r.d(t,{e:()=>i});let n=require("fs");var a=r.n(n);let i={existsSync:a().existsSync,readFile:a().promises.readFile,readFileSync:a().readFileSync,writeFile:(e,t)=>a().promises.writeFile(e,t),mkdir:e=>a().promises.mkdir(e,{recursive:!0}),stat:e=>a().promises.stat(e)}},"./dist/esm/server/lib/router-utils/is-postpone.js"(e,t,r){"use strict";r.d(t,{D:()=>a});let n=Symbol.for("react.postpone");function a(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}},"./dist/esm/server/lib/trace/constants.js"(e,t,r){"use strict";r.d(t,{Fx:()=>s,Wc:()=>o,jM:()=>l});var n,a,i,s=((n=s||{}).compression="NextNodeServer.compression",n.getBuildId="NextNodeServer.getBuildId",n.createComponentTree="NextNodeServer.createComponentTree",n.clientComponentLoading="NextNodeServer.clientComponentLoading",n.getLayoutOrPageModule="NextNodeServer.getLayoutOrPageModule",n.generateStaticRoutes="NextNodeServer.generateStaticRoutes",n.generateFsStaticRoutes="NextNodeServer.generateFsStaticRoutes",n.generatePublicRoutes="NextNodeServer.generatePublicRoutes",n.generateImageRoutes="NextNodeServer.generateImageRoutes.route",n.sendRenderResult="NextNodeServer.sendRenderResult",n.proxyRequest="NextNodeServer.proxyRequest",n.runApi="NextNodeServer.runApi",n.render="NextNodeServer.render",n.renderHTML="NextNodeServer.renderHTML",n.imageOptimizer="NextNodeServer.imageOptimizer",n.getPagePath="NextNodeServer.getPagePath",n.getRoutesManifest="NextNodeServer.getRoutesManifest",n.findPageComponents="NextNodeServer.findPageComponents",n.getFontManifest="NextNodeServer.getFontManifest",n.getServerComponentManifest="NextNodeServer.getServerComponentManifest",n.getRequestHandler="NextNodeServer.getRequestHandler",n.renderToHTML="NextNodeServer.renderToHTML",n.renderError="NextNodeServer.renderError",n.renderErrorToHTML="NextNodeServer.renderErrorToHTML",n.render404="NextNodeServer.render404",n.startResponse="NextNodeServer.startResponse",n.route="route",n.onProxyReq="onProxyReq",n.apiResolver="apiResolver",n.internalFetch="internalFetch",n),o=((a=o||{}).renderToString="AppRender.renderToString",a.renderToReadableStream="AppRender.renderToReadableStream",a.getBodyResult="AppRender.getBodyResult",a.fetch="AppRender.fetch",a),l=((i=l||{}).runHandler="AppRouteRouteHandlers.runHandler",i)},"./dist/esm/server/node-environment-extensions/process-error-handlers.js"(e,t,r){"use strict";r.r(t),r.d(t,{installProcessErrorHandlers:()=>i});var n=r("./dist/esm/server/lib/router-utils/is-postpone.js");let a=globalThis;function i(e){a.nextInitializedProcessErrorHandlers||(a.nextInitializedProcessErrorHandlers=!0,e&&(process.removeAllListeners("uncaughtException"),process.removeAllListeners("unhandledRejection")),process.on("unhandledRejection",e=>{(0,n.D)(e)||console.error(e)}),process.on("rejectionHandled",()=>{}),process.on("uncaughtException",e=>{(0,n.D)(e)||console.error(e)}))}},"./dist/esm/server/web/spec-extension/adapters/headers.js"(e,t,r){"use strict";r.d(t,{o:()=>i});var n=r("./dist/esm/server/web/spec-extension/adapters/reflect.js");class a extends Error{constructor(){super("Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers")}static callable(){throw new a}}class i extends Headers{constructor(e){super(),this.headers=new Proxy(e,{get(t,r,a){if("symbol"==typeof r)return n.l.get(t,r,a);let i=r.toLowerCase(),s=Object.keys(e).find(e=>e.toLowerCase()===i);if(void 0!==s)return n.l.get(t,s,a)},set(t,r,a,i){if("symbol"==typeof r)return n.l.set(t,r,a,i);let s=r.toLowerCase(),o=Object.keys(e).find(e=>e.toLowerCase()===s);return n.l.set(t,o??r,a,i)},has(t,r){if("symbol"==typeof r)return n.l.has(t,r);let a=r.toLowerCase(),i=Object.keys(e).find(e=>e.toLowerCase()===a);return void 0!==i&&n.l.has(t,i)},deleteProperty(t,r){if("symbol"==typeof r)return n.l.deleteProperty(t,r);let a=r.toLowerCase(),i=Object.keys(e).find(e=>e.toLowerCase()===a);return void 0===i||n.l.deleteProperty(t,i)}})}static seal(e){return new Proxy(e,{get(e,t,r){switch(t){case"append":case"delete":case"set":return a.callable;default:return n.l.get(e,t,r)}}})}merge(e){return Array.isArray(e)?e.join(", "):e}static from(e){return e instanceof Headers?e:new i(e)}append(e,t){let r=this.headers[e];"string"==typeof r?this.headers[e]=[r,t]:Array.isArray(r)?r.push(t):this.headers[e]=t}delete(e){delete this.headers[e]}get(e){let t=this.headers[e];return void 0!==t?this.merge(t):null}has(e){return void 0!==this.headers[e]}set(e,t){this.headers[e]=t}forEach(e,t){for(let[r,n]of this.entries())e.call(t,n,r,this)}*entries(){for(let e of Object.keys(this.headers)){let t=e.toLowerCase(),r=this.get(t);yield[t,r]}}*keys(){for(let e of Object.keys(this.headers)){let t=e.toLowerCase();yield t}}*values(){for(let e of Object.keys(this.headers)){let t=this.get(e);yield t}}[Symbol.iterator](){return this.entries()}}},"./dist/esm/server/web/spec-extension/adapters/reflect.js"(e,t,r){"use strict";r.d(t,{l:()=>n});class n{static get(e,t,r){let n=Reflect.get(e,t,r);return"function"==typeof n?n.bind(e):n}static set(e,t,r,n){return Reflect.set(e,t,r,n)}static has(e,t){return Reflect.has(e,t)}static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}}},"./dist/esm/server/web/spec-extension/adapters/request-cookies.js"(e,t,r){"use strict";r.d(t,{Ck:()=>l,EJ:()=>h,IN:()=>u,K8:()=>d});var n=r("./dist/esm/server/web/spec-extension/cookies.js"),a=r("./dist/esm/server/web/spec-extension/adapters/reflect.js"),i=r("../../app-render/work-async-storage.external"),s=r("./dist/esm/shared/lib/action-revalidation-kind.js");class o extends Error{constructor(){super("Cookies can only be modified in a Server Action or Route Handler. Read more: https://nextjs.org/docs/app/api-reference/functions/cookies#options")}static callable(){throw new o}}class l{static seal(e){return new Proxy(e,{get(e,t,r){switch(t){case"clear":case"delete":case"set":return o.callable;default:return a.l.get(e,t,r)}}})}}let c=Symbol.for("next.mutated.cookies");function u(e,t){let r,a=(r=t[c])&&Array.isArray(r)&&0!==r.length?r:[];if(0===a.length)return!1;let i=new n.VO(e),s=i.getAll();for(let e of a)i.set(e);for(let e of s)i.set(e);return!0}class d{static wrap(e,t){let r=new n.VO(new Headers);for(let t of e.getAll())r.set(t);let o=[],l=new Set,u=()=>{let e=i.workAsyncStorage.getStore();if(e&&(e.pathWasRevalidated=s.Du),o=r.getAll().filter(e=>l.has(e.name)),t){let e=[];for(let t of o){let r=new n.VO(new Headers);r.set(t),e.push(r.toString())}t(e)}},d=new Proxy(r,{get(e,t,r){switch(t){case c:return o;case"delete":return function(...t){l.add("string"==typeof t[0]?t[0]:t[0].name);try{return e.delete(...t),d}finally{u()}};case"set":return function(...t){l.add("string"==typeof t[0]?t[0]:t[0].name);try{return e.set(...t),d}finally{u()}};default:return a.l.get(e,t,r)}}});return d}}function h(e){let t=new Proxy(e.mutableCookies,{get(r,n,i){switch(n){case"delete":return function(...n){return f(e,"cookies().delete"),r.delete(...n),t};case"set":return function(...n){return f(e,"cookies().set"),r.set(...n),t};default:return a.l.get(r,n,i)}}});return t}function f(e,t){if("action"!==e.phase)throw new o}},"./dist/esm/server/web/spec-extension/cookies.js"(e,t,r){"use strict";r.d(t,{VO:()=>n.ResponseCookies,tm:()=>n.RequestCookies});var n=r("./dist/compiled/@edge-runtime/cookies/index.js")},"./dist/esm/shared/lib/action-revalidation-kind.js"(e,t,r){"use strict";r.d(t,{Du:()=>n});let n=1},"./dist/esm/shared/lib/invariant-error.js"(e,t,r){"use strict";r.d(t,{z:()=>n});class n extends Error{constructor(e,t){super(`Invariant: ${e.endsWith(".")?e:e+"."} This is a bug in Next.js.`,t),this.name="InvariantError"}}},"./dist/esm/shared/lib/isomorphic/path.js"(e,t,r){e.exports=r("path")},"./dist/esm/shared/lib/modern-browserslist-target.js"(e){e.exports=["chrome 111","edge 111","firefox 111","safari 16.4"]},"./dist/esm/shared/lib/page-path/ensure-leading-slash.js"(e,t,r){"use strict";function n(e){return e.startsWith("/")?e:`/${e}`}r.d(t,{A:()=>n})},"./dist/esm/shared/lib/router/utils/app-paths.js"(e,t,r){"use strict";r.d(t,{P7:()=>s,Yr:()=>i});var n=r("./dist/esm/shared/lib/page-path/ensure-leading-slash.js"),a=r("./dist/esm/shared/lib/segment.js");function i(e){return(0,n.A)(e.split("/").reduce((e,t,r,n)=>!t||(0,a.V)(t)||"@"===t[0]||("page"===t||"route"===t)&&r===n.length-1?e:`${e}/${t}`,""))}function s(e){return e.replace(/\.rsc($|\?)/,"$1")}},"./dist/esm/shared/lib/router/utils/get-segment-param.js"(e,t,r){"use strict";r.d(t,{Hp:()=>a});var n=r("./dist/esm/shared/lib/router/utils/interception-routes.js");function a(e){let t=n.VB.find(t=>e.startsWith(t));return(t&&(e=e.slice(t.length)),e.startsWith("[[...")&&e.endsWith("]]"))?{paramType:"optional-catchall",paramName:e.slice(5,-2)}:e.startsWith("[...")&&e.endsWith("]")?{paramType:t?`catchall-intercepted-${t}`:"catchall",paramName:e.slice(4,-1)}:e.startsWith("[")&&e.endsWith("]")?{paramType:t?`dynamic-intercepted-${t}`:"dynamic",paramName:e.slice(1,-1)}:null}},"./dist/esm/shared/lib/router/utils/interception-routes.js"(e,t,r){"use strict";r.d(t,{$8:()=>s,VB:()=>a,m1:()=>i});var n=r("./dist/esm/shared/lib/router/utils/app-paths.js");let a=["(..)(..)","(.)","(..)","(...)"];function i(e){return void 0!==e.split("/").find(e=>a.find(t=>e.startsWith(t)))}function s(e){let t,r,i;for(let n of e.split("/"))if(r=a.find(e=>n.startsWith(e))){[t,i]=e.split(r,2);break}if(!t||!r||!i)throw Object.defineProperty(Error(`Invalid interception route: ${e}. Must be in the format //(..|...|..)(..)/`),"__NEXT_ERROR_CODE",{value:"E269",enumerable:!1,configurable:!0});switch(t=(0,n.Yr)(t),r){case"(.)":i="/"===t?`/${i}`:t+"/"+i;break;case"(..)":if("/"===t)throw Object.defineProperty(Error(`Invalid interception route: ${e}. Cannot use (..) marker at the root level, use (.) instead.`),"__NEXT_ERROR_CODE",{value:"E207",enumerable:!1,configurable:!0});i=t.split("/").slice(0,-1).concat(i).join("/");break;case"(...)":i="/"+i;break;case"(..)(..)":let s=t.split("/");if(s.length<=2)throw Object.defineProperty(Error(`Invalid interception route: ${e}. Cannot use (..)(..) marker at the root level or one level up.`),"__NEXT_ERROR_CODE",{value:"E486",enumerable:!1,configurable:!0});i=s.slice(0,-2).concat(i).join("/");break;default:throw Object.defineProperty(Error("Invariant: unexpected marker"),"__NEXT_ERROR_CODE",{value:"E112",enumerable:!1,configurable:!0})}return{interceptingRoute:t,interceptedRoute:i}}},"./dist/esm/shared/lib/router/utils/parse-relative-url.js"(e,t,r){"use strict";r.d(t,{r:()=>a}),r("./dist/esm/shared/lib/utils.js");var n=r("./dist/esm/shared/lib/router/utils/querystring.js");function a(e,t,r=!0){let i=new URL("http://n"),s=t?new URL(t,i):e.startsWith(".")?new URL("http://n"):i,{pathname:o,searchParams:l,search:c,hash:u,href:d,origin:h}=e.startsWith("/")?new URL(`${s.protocol}//${s.host}${e}`):new URL(e,s);if(h!==i.origin)throw Object.defineProperty(Error(`invariant: invalid relative URL, router received ${e}`),"__NEXT_ERROR_CODE",{value:"E159",enumerable:!1,configurable:!0});return{auth:null,host:null,hostname:null,pathname:o,port:null,protocol:null,query:r?(0,n.v1)(l):void 0,search:c,hash:u,href:d.slice(h.length),slashes:null}}},"./dist/esm/shared/lib/router/utils/querystring.js"(e,t,r){"use strict";function n(e){let t={};for(let[r,n]of e.entries()){let e=t[r];void 0===e?t[r]=n:Array.isArray(e)?e.push(n):t[r]=[e,n]}return t}function a(e){return"string"==typeof e?e:("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}function i(e){let t=new URLSearchParams;for(let[r,n]of Object.entries(e))if(Array.isArray(n))for(let e of n)t.append(r,a(e));else t.set(r,a(n));return t}r.d(t,{Bw:()=>i,v1:()=>n})},"./dist/esm/shared/lib/segment.js"(e,t,r){"use strict";function n(e){return"("===e[0]&&e.endsWith(")")}r.d(t,{V:()=>n})},"./dist/esm/shared/lib/utils.js"(e,t,r){"use strict";r.d(t,{MK:()=>a,Xc:()=>n}),"undefined"!=typeof performance&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class n extends Error{}class a extends Error{}},"./dist/esm/shared/lib/utils/reflect-utils.js"(e,t,r){"use strict";r.d(t,{ke:()=>a,lY:()=>i});let n=/^[A-Za-z_$][A-Za-z0-9_$]*$/;function a(e,t){return n.test(t)?`\`${e}.${t}\``:`\`${e}[${JSON.stringify(t)}]\``}let i=new Set(["hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toString","valueOf","toLocaleString","then","catch","finally","status","displayName","_debugInfo","toJSON","$$typeof","__esModule","@@iterator"])},"../../app-render/action-async-storage.external"(e){"use strict";e.exports=require("next/dist/server/app-render/action-async-storage.external.js")},"../../app-render/work-async-storage.external"(e){"use strict";e.exports=require("next/dist/server/app-render/work-async-storage.external.js")},"../../app-render/work-unit-async-storage.external"(e){"use strict";e.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},"../lib/router-utils/instrumentation-globals.external.js"(e){"use strict";e.exports=require("next/dist/server/lib/router-utils/instrumentation-globals.external.js")},"../../lib/trace/tracer"(e){"use strict";e.exports=require("next/dist/server/lib/trace/tracer")},"../load-manifest.external"(e){"use strict";e.exports=require("next/dist/server/load-manifest.external.js")},"next/dist/compiled/jsonwebtoken"(e){"use strict";e.exports=require("next/dist/compiled/jsonwebtoken")},crypto(e){"use strict";e.exports=require("crypto")},"node:path"(e){"use strict";e.exports=require("node:path")},"node:zlib"(e){"use strict";e.exports=require("node:zlib")},path(e){"use strict";e.exports=require("path")}},n={};function a(e){var t=n[e];if(void 0!==t)return t.exports;var i=n[e]={exports:{}};return r[e](i,i.exports,a),i.exports}a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,a.t=function(r,n){if(1&n&&(r=this(r)),8&n||"object"==typeof r&&r&&(4&n&&r.__esModule||16&n&&"function"==typeof r.then))return r;var i=Object.create(null);a.r(i);var s={};e=e||[null,t({}),t([]),t(t)];for(var o=2&n&&r;("object"==typeof o||"function"==typeof o)&&!~e.indexOf(o);o=t(o))Object.getOwnPropertyNames(o).forEach(e=>{s[e]=()=>r[e]});return s.default=()=>r,a.d(i,s),i},a.d=(e,t)=>{for(var r in t)a.o(t,r)&&!a.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var i={};(()=>{"use strict";let e;a.r(i),a.d(i,{AppRouteRouteModule:()=>rW,WrappedNextRouterError:()=>rB,default:()=>rV,hasNonStaticMethods:()=>rK});var t,r,n,s,o,l,c,u,d={};a.r(d),a.d(d,{DynamicServerError:()=>t3,isDynamicServerError:()=>t4});var h={};a.r(h),a.d(h,{AppRouterContext:()=>rC,GlobalLayoutRouterContext:()=>rT,LayoutRouterContext:()=>rO,MissingSlotContext:()=>rj,TemplateContext:()=>rA});var f={};a.r(f),a.d(f,{appRouterContext:()=>h}),require("next/dist/build/adapter/setup-node-env.external.js"),a("./dist/esm/shared/lib/modern-browserslist-target.js");let p="build-manifest.json";function m(e){let t=function(e){let t;try{t=new URL(e,"http://n")}catch{}return t}(e);if(!t)return;let r={};for(let e of t.searchParams.keys()){let n=t.searchParams.getAll(e);r[e]=n.length>1?n:n[0]}return{query:r,hash:t.hash,search:t.search,path:t.pathname,pathname:t.pathname,href:`${t.pathname}${t.search}${t.hash}`,host:"",hostname:"",auth:"",protocol:"",slashes:null,port:""}}[...process?.features?.typescript?["next.config.mts"]:[]],Symbol("polyfills");let g=new WeakMap;function v(e,t){let r;if(!t)return{pathname:e};let n=g.get(t);n||(n=t.map(e=>e.toLowerCase()),g.set(t,n));let a=e.split("/",2);if(!a[1])return{pathname:e};let i=a[1].toLowerCase(),s=n.indexOf(i);return s<0?{pathname:e}:(r=t[s],{pathname:e=e.slice(r.length+1)||"/",detectedLocale:r})}var y=a("./dist/esm/shared/lib/router/utils/interception-routes.js");let b=/\/[^/]*\[[^/]+\][^/]*(?=\/|$)/,E=/\/\[[^/]+\](?=\/|$)/;function _(e,t=!0){return((0,y.m1)(e)&&(e=(0,y.$8)(e).interceptedRoute),t)?E.test(e):b.test(e)}function w(e){let t=e.indexOf("#"),r=e.indexOf("?"),n=r>-1&&(t<0||r-1?{pathname:e.substring(0,n?r:t),query:n?e.substring(r,t>-1?t:void 0):"",hash:t>-1?e.slice(t):""}:{pathname:e,query:"",hash:""}}function R(e,t){if("string"!=typeof e)return!1;let{pathname:r}=w(e);return r===t||r.startsWith(t+"/")}function x(e,t){if(!R(e,t))return e;let r=e.slice(t.length);return r.startsWith("/")?r:`/${r}`}var P=a("./dist/compiled/path-to-regexp/index.js"),S=a("./dist/esm/lib/constants.js");let C=/[|\\{}()[\]^$+*?.-]/,O=/[|\\{}()[\]^$+*?.-]/g;function T(e){return C.test(e)?e.replace(O,"\\$&"):e}function A(e){return e.replace(/\/$/,"")||"/"}var j=a("./dist/esm/shared/lib/invariant-error.js");let k=/^([^[]*)\[((?:\[[^\]]*\])|[^\]]+)\](.*)$/;function D(e){let t=e.startsWith("[")&&e.endsWith("]");t&&(e=e.slice(1,-1));let r=e.startsWith("...");return r&&(e=e.slice(3)),{key:e,repeat:r,optional:t}}function $({interceptionMarker:e,getSafeRouteKey:t,segment:r,routeKeys:n,keyPrefix:a,backreferenceDuplicateKeys:i}){let s,{key:o,optional:l,repeat:c}=D(r),u=o.replace(/\W/g,"");a&&(u=`${a}${u}`);let d=!1;(0===u.length||u.length>30)&&(d=!0),isNaN(parseInt(u.slice(0,1)))||(d=!0),d&&(u=t());let h=u in n;a?n[u]=`${a}${o}`:n[u]=o;let f=e?T(e):"";return s=h&&i?`\\k<${u}>`:c?`(?<${u}>.+?)`:`(?<${u}>[^/]+?)`,{key:o,pattern:l?`(?:/${f}${s})?`:`/${f}${s}`,cleanedKey:u,optional:l,repeat:c}}var N=a("./dist/esm/shared/lib/utils.js");let I="_NEXTSEP_";function M(e){return"string"==typeof e&&!!(/\/\(\.{1,3}\):[^/\s]+/.test(e)||/:[a-zA-Z_][a-zA-Z0-9_]*:[a-zA-Z_][a-zA-Z0-9_]*/.test(e))}function U(e){let t=e;return(t=t.replace(/(\([^)]*\)):([^/\s]+)/g,`$1${I}:$2`)).replace(/:([^:/\s)]+)(?=:)/g,`:$1${I}`)}function L(e){return e.replace(RegExp(`\\)${I}`,"g"),")")}function H(e,t,r){if("string"!=typeof e)return(0,P.pathToRegexp)(e,t,r);let n=M(e),a=n?U(e):e;try{return(0,P.pathToRegexp)(a,t,r)}catch(a){if(!n)try{let n=U(e);return(0,P.pathToRegexp)(n,t,r)}catch(e){}throw a}}function F(e,t){let r=M(e),n=r?U(e):e;try{let e=(0,P.compile)(n,t);if(r)return t=>L(e(t));return e}catch(n){if(!r)try{let r=U(e),n=(0,P.compile)(r,t);return e=>L(n(e))}catch(e){}throw n}}function q({re:e,groups:t}){var r;return r=r=>{let n=e.exec(r);if(!n)return!1;let a=e=>{try{return decodeURIComponent(e)}catch{throw Object.defineProperty(new N.Xc("failed to decode param"),"__NEXT_ERROR_CODE",{value:"E528",enumerable:!1,configurable:!0})}},i={};for(let[e,r]of Object.entries(t)){let t=n[r.pos];void 0!==t&&(r.repeat?i[e]=t.split("/").map(e=>a(e)):i[e]=a(t))}return i},e=>{let t=r(e);if(!t)return!1;let n={};for(let[e,r]of Object.entries(t))"string"==typeof r?n[e]=r.replace(RegExp(`^${I}`),""):Array.isArray(r)?n[e]=r.map(e=>"string"==typeof e?e.replace(RegExp(`^${I}`),""):e):n[e]=r;return n}}var X=a("./dist/esm/shared/lib/router/utils/querystring.js"),z=a("./dist/esm/shared/lib/router/utils/parse-relative-url.js");function G(e){return e.replace(/__ESC_COLON_/gi,":")}function B(e,t){if(!e.includes(":"))return e;for(let r of Object.keys(t))e.includes(`:${r}`)&&(e=e.replace(RegExp(`:${r}\\*`,"g"),`:${r}--ESCAPED_PARAM_ASTERISKS`).replace(RegExp(`:${r}\\?`,"g"),`:${r}--ESCAPED_PARAM_QUESTION`).replace(RegExp(`:${r}\\+`,"g"),`:${r}--ESCAPED_PARAM_PLUS`).replace(RegExp(`:${r}(?!\\w)`,"g"),`--ESCAPED_PARAM_COLON${r}`));return e=e.replace(/(:|\*|\?|\+|\(|\)|\{|\})/g,"\\$1").replace(/--ESCAPED_PARAM_PLUS/g,"+").replace(/--ESCAPED_PARAM_COLON/g,":").replace(/--ESCAPED_PARAM_QUESTION/g,"?").replace(/--ESCAPED_PARAM_ASTERISKS/g,"*"),F(`/${e}`,{validate:!1})(t).slice(1)}var W=a("./dist/esm/shared/lib/router/utils/app-paths.js");function V(e){for(let t of[S.AA,S.h])if(e!==t&&e.startsWith(t))return e.substring(t.length);return null}function K(e){try{return decodeURIComponent(e)}catch{return e}}let J=/https?|ftp|gopher|file/;function Y(e,t){for(let r in delete e.nextInternalLocale,e){let n=r!==S.AA&&r.startsWith(S.AA),a=r!==S.h&&r.startsWith(S.h);(n||a||t.includes(r))&&delete e[r]}}function Q(e,t,r){if(e){for(let n of(r&&(r=r.toLowerCase()),e))if(t===n.domain?.split(":",1)[0].toLowerCase()||r===n.defaultLocale.toLowerCase()||n.locales?.some(e=>e.toLowerCase()===r))return n}}function Z(e,t){let r;if(t?.host&&!Array.isArray(t.host))r=t.host.toString().split(":",1)[0];else{if(!e.hostname)return;r=e.hostname}return r.toLowerCase()}var ee=a("./dist/esm/server/api-utils/index.js");function et(e){return R(e||"/","/_next/data")&&"/index"===(e=e.replace(/\/_next\/data\/[^/]{1,}/,"").replace(/\.json$/,""))?"/":e}let er=Symbol.for("NextInternalRequestMeta");function en(e,t){let r=e[er]||{};return"string"==typeof t?r[t]:r}function ea(e,t,r){let n=en(e);return n[t]=r,e[er]=n,n}let ei=Symbol("next.patchSetHeaderWithCookieSupport");var es=a("./dist/esm/shared/lib/page-path/ensure-leading-slash.js");function eo(e){let t=/^\/index(\/|$)/.test(e)&&!_(e)?`/index${e}`:"/"===e?"/index":(0,es.A)(e);{let{posix:e}=a("path"),r=e.normalize(t);if(r!==t)throw new N.MK(`Requested and resolved page mismatch: ${t} ${r}`)}return t}let el=["ico","jpg","jpeg","png","svg"],ec=["jpg","jpeg","png"],eu=["jpg","jpeg","png","gif"],ed=["jpg","jpeg","png","gif"],eh=(e,t)=>t&&0!==t.length?`(?:\\.(${e.join("|")})|(\\.(${t.join("|")})))`:`(\\.(?:${e.join("|")}))`,ef=/^[\\/]favicon\.ico$/,ep=/^[\\/]robots\.txt$/,em=/^[\\/]manifest\.json$/,eg=/^[\\/]manifest\.webmanifest$/,ev=/[\\/]sitemap\.xml$/,ey=new Map;class eb{constructor(){let e,t;this.promise=new Promise((r,n)=>{e=r,t=n}),this.resolve=e,this.reject=t}}class eE{constructor(e,t=e=>e()){this.cacheKeyFn=e,this.schedulerFn=t,this.pending=new Map}static create(e){return new eE(null==e?void 0:e.cacheKeyFn,null==e?void 0:e.schedulerFn)}async batch(e,t){let r=this.cacheKeyFn?await this.cacheKeyFn(e):e;if(null===r)return t({resolve:e=>Promise.resolve(e),key:e});let n=this.pending.get(r);if(n)return n;let{promise:a,resolve:i,reject:s}=new eb;return this.pending.set(r,a),this.schedulerFn(async()=>{try{let r=await t({resolve:i,key:e});i(r)}catch(e){s(e)}finally{this.pending.delete(r)}}),a}}class e_{constructor(e,t,r){this.prev=null,this.next=null,this.key=e,this.data=t,this.size=r}}class ew{constructor(){this.prev=null,this.next=null}}class eR{constructor(e,t,r){this.cache=new Map,this.totalSize=0,this.maxSize=e,this.calculateSize=t,this.onEvict=r,this.head=new ew,this.tail=new ew,this.head.next=this.tail,this.tail.prev=this.head}addToHead(e){e.prev=this.head,e.next=this.head.next,this.head.next.prev=e,this.head.next=e}removeNode(e){e.prev.next=e.next,e.next.prev=e.prev}moveToHead(e){this.removeNode(e),this.addToHead(e)}removeTail(){let e=this.tail.prev;return this.removeNode(e),e}set(e,t){let r=(null==this.calculateSize?void 0:this.calculateSize.call(this,t))??1;if(r<=0)throw Object.defineProperty(Error(`LRUCache: calculateSize returned ${r}, but size must be > 0. Items with size 0 would never be evicted, causing unbounded cache growth.`),"__NEXT_ERROR_CODE",{value:"E1045",enumerable:!1,configurable:!0});if(r>this.maxSize)return console.warn("Single item size exceeds maxSize"),!1;let n=this.cache.get(e);if(n)n.data=t,this.totalSize=this.totalSize-n.size+r,n.size=r,this.moveToHead(n);else{let n=new e_(e,t,r);this.cache.set(e,n),this.addToHead(n),this.totalSize+=r}for(;this.totalSize>this.maxSize&&this.cache.size>0;){let e=this.removeTail();this.cache.delete(e.key),this.totalSize-=e.size,null==this.onEvict||this.onEvict.call(this,e.key,e.data)}return!0}has(e){return this.cache.has(e)}get(e){let t=this.cache.get(e);if(t)return this.moveToHead(t),t.data}*[Symbol.iterator](){let e=this.head.next;for(;e&&e!==this.tail;){let t=e;yield[t.key,t.data],e=e.next}}remove(e){let t=this.cache.get(e);t&&(this.removeNode(t),this.cache.delete(e),this.totalSize-=t.size)}get size(){return this.cache.size}get currentSize(){return this.totalSize}}let{env:ex,stdout:eP}=(null==(u=globalThis)?void 0:u.process)??{},eS=ex&&!ex.NO_COLOR&&(ex.FORCE_COLOR||(null==eP?void 0:eP.isTTY)&&!ex.CI&&"dumb"!==ex.TERM),eC=(e,t,r,n)=>{let a=e.substring(0,n)+r,i=e.substring(n+t.length),s=i.indexOf(t);return~s?a+eC(i,t,r,s):a+i},eO=(e,t,r=e)=>eS?n=>{let a=""+n,i=a.indexOf(t,e.length);return~i?e+eC(a,t,r,i)+t:e+a+t}:String,eT=eO("\x1b[1m","\x1b[22m","\x1b[22m\x1b[1m");eO("\x1b[2m","\x1b[22m","\x1b[22m\x1b[2m"),eO("\x1b[3m","\x1b[23m"),eO("\x1b[4m","\x1b[24m"),eO("\x1b[7m","\x1b[27m"),eO("\x1b[8m","\x1b[28m"),eO("\x1b[9m","\x1b[29m"),eO("\x1b[30m","\x1b[39m");let eA=eO("\x1b[31m","\x1b[39m"),ej=eO("\x1b[32m","\x1b[39m"),ek=eO("\x1b[33m","\x1b[39m");eO("\x1b[34m","\x1b[39m");let eD=eO("\x1b[35m","\x1b[39m");eO("\x1b[38;2;173;127;168m","\x1b[39m"),eO("\x1b[36m","\x1b[39m");let e$=eO("\x1b[37m","\x1b[39m");eO("\x1b[90m","\x1b[39m"),eO("\x1b[40m","\x1b[49m"),eO("\x1b[41m","\x1b[49m"),eO("\x1b[42m","\x1b[49m"),eO("\x1b[43m","\x1b[49m"),eO("\x1b[44m","\x1b[49m"),eO("\x1b[45m","\x1b[49m"),eO("\x1b[46m","\x1b[49m"),eO("\x1b[47m","\x1b[49m");let eN={wait:e$(eT("○")),error:eA(eT("⨯")),warn:ek(eT("⚠")),ready:"▲",info:e$(eT(" ")),event:ej(eT("✓")),trace:eD(eT("\xbb"))},eI={log:"log",warn:"warn",error:"error"},eM=new eR(1e4,e=>e.length);new eR(1e4,e=>e.length);let eU=e=>{Promise.resolve().then(()=>{process.nextTick(e)})},eL=e=>{setImmediate(e)};var eH=((t={}).APP_PAGE="APP_PAGE",t.APP_ROUTE="APP_ROUTE",t.PAGES="PAGES",t.FETCH="FETCH",t.REDIRECT="REDIRECT",t.IMAGE="IMAGE",t),eF=((r={}).APP_PAGE="APP_PAGE",r.APP_ROUTE="APP_ROUTE",r.PAGES="PAGES",r.FETCH="FETCH",r.IMAGE="IMAGE",r),eq=a("../../lib/trace/tracer"),eX=a("./dist/esm/server/lib/trace/constants.js");function ez(){}new Uint8Array([60,104,116,109,108]),new Uint8Array([60,104,101,97,100]),new Uint8Array([60,98,111,100,121]),new Uint8Array([60,47,104,101,97,100,62]),new Uint8Array([60,47,98,111,100,121,62]),new Uint8Array([60,47,104,116,109,108,62]),new Uint8Array([60,47,98,111,100,121,62,60,47,104,116,109,108,62]),new Uint8Array([60,109,101,116,97,32,110,97,109,101,61,34,194,171,110,120,116,45,105,99,111,110,194,187,34]),new TextEncoder;let eG=new TextEncoder;function eB(e){return new ReadableStream({start(t){t.enqueue(eG.encode(e)),t.close()}})}function eW(e){return new ReadableStream({start(t){t.enqueue(e),t.close()}})}async function eV(e,t){let r=new TextDecoder("utf-8",{fatal:!0}),n="";for await(let a of e){if(null==t?void 0:t.aborted)return n;n+=r.decode(a,{stream:!0})}return n+r.decode()}function eK(e,t){if(!e.startsWith("/")||!t)return e;let{pathname:r,query:n,hash:a}=w(e);return`${t}${r}${n}${a}`}function eJ(e,t){if(!e.startsWith("/")||!t)return e;let{pathname:r,query:n,hash:a}=w(e);return`${r}${t}${n}${a}`}let eY=/^(?:127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|\[::1\]|localhost)$/;function eQ(e,t){let r=new URL(String(e),t&&String(t));return eY.test(r.hostname)&&(r.hostname="localhost"),r}let eZ=Symbol("NextURLInternal");class e0{constructor(e,t,r){let n,a;"object"==typeof t&&"pathname"in t||"string"==typeof t?(n=t,a=r||{}):a=r||t||{},this[eZ]={url:eQ(e,n??a.base),options:a,basePath:""},this.analyze()}analyze(){var e,t,r,n,a;let i=function(e,t){let{basePath:r,i18n:n,trailingSlash:a}=t.nextConfig??{},i={pathname:e,trailingSlash:"/"!==e?e.endsWith("/"):a};r&&R(i.pathname,r)&&(i.pathname=x(i.pathname,r),i.basePath=r);let s=i.pathname;if(i.pathname.startsWith("/_next/data/")&&i.pathname.endsWith(".json")){let e=i.pathname.replace(/^\/_next\/data\//,"").replace(/\.json$/,"").split("/");i.buildId=e[0],s="index"!==e[1]?`/${e.slice(1).join("/")}`:"/",!0===t.parseData&&(i.pathname=s)}if(n){let e=t.i18nProvider?t.i18nProvider.analyze(i.pathname):v(i.pathname,n.locales);i.locale=e.detectedLocale,i.pathname=e.pathname??i.pathname,!e.detectedLocale&&i.buildId&&(e=t.i18nProvider?t.i18nProvider.analyze(s):v(s,n.locales)).detectedLocale&&(i.locale=e.detectedLocale)}return i}(this[eZ].url.pathname,{nextConfig:this[eZ].options.nextConfig,parseData:!process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE,i18nProvider:this[eZ].options.i18nProvider}),s=Z(this[eZ].url,this[eZ].options.headers);this[eZ].domainLocale=this[eZ].options.i18nProvider?this[eZ].options.i18nProvider.detectDomainLocale(s):Q(null==(t=this[eZ].options.nextConfig)||null==(e=t.i18n)?void 0:e.domains,s);let o=(null==(r=this[eZ].domainLocale)?void 0:r.defaultLocale)||(null==(a=this[eZ].options.nextConfig)||null==(n=a.i18n)?void 0:n.defaultLocale);this[eZ].url.pathname=i.pathname,this[eZ].defaultLocale=o,this[eZ].basePath=i.basePath??"",this[eZ].buildId=i.buildId,this[eZ].locale=i.locale??o,this[eZ].trailingSlash=i.trailingSlash}formatPathname(){var e;let t;return t=function(e,t,r,n){if(!t||t===r)return e;let a=e.toLowerCase();return!n&&(R(a,"/api")||R(a,`/${t.toLowerCase()}`))?e:eK(e,`/${t}`)}((e={basePath:this[eZ].basePath,buildId:this[eZ].buildId,defaultLocale:this[eZ].options.forceLocale?void 0:this[eZ].defaultLocale,locale:this[eZ].locale,pathname:this[eZ].url.pathname,trailingSlash:this[eZ].trailingSlash}).pathname,e.locale,e.buildId?void 0:e.defaultLocale,e.ignorePrefix),(e.buildId||!e.trailingSlash)&&(t=A(t)),e.buildId&&(t=eJ(eK(t,`/_next/data/${e.buildId}`),"/"===e.pathname?"index.json":".json")),t=eK(t,e.basePath),!e.buildId&&e.trailingSlash?t.endsWith("/")?t:eJ(t,"/"):A(t)}formatSearch(){return this[eZ].url.search}get buildId(){return this[eZ].buildId}set buildId(e){this[eZ].buildId=e}get locale(){return this[eZ].locale??""}set locale(e){var t,r;if(!this[eZ].locale||!(null==(r=this[eZ].options.nextConfig)||null==(t=r.i18n)?void 0:t.locales.includes(e)))throw Object.defineProperty(TypeError(`The NextURL configuration includes no locale "${e}"`),"__NEXT_ERROR_CODE",{value:"E597",enumerable:!1,configurable:!0});this[eZ].locale=e}get defaultLocale(){return this[eZ].defaultLocale}get domainLocale(){return this[eZ].domainLocale}get searchParams(){return this[eZ].url.searchParams}get host(){return this[eZ].url.host}set host(e){this[eZ].url.host=e}get hostname(){return this[eZ].url.hostname}set hostname(e){this[eZ].url.hostname=e}get port(){return this[eZ].url.port}set port(e){this[eZ].url.port=e}get protocol(){return this[eZ].url.protocol}set protocol(e){this[eZ].url.protocol=e}get href(){let e=this.formatPathname(),t=this.formatSearch();return`${this.protocol}//${this.host}${e}${t}${this.hash}`}set href(e){this[eZ].url=eQ(e),this.analyze()}get origin(){return this[eZ].url.origin}get pathname(){return this[eZ].url.pathname}set pathname(e){this[eZ].url.pathname=e}get hash(){return this[eZ].url.hash}set hash(e){this[eZ].url.hash=e}get search(){return this[eZ].url.search}set search(e){this[eZ].url.search=e}get password(){return this[eZ].url.password}set password(e){this[eZ].url.password=e}get username(){return this[eZ].url.username}set username(e){this[eZ].url.username=e}get basePath(){return this[eZ].basePath}set basePath(e){this[eZ].basePath=e.startsWith("/")?e:`/${e}`}toString(){return this.href}toJSON(){return this.href}[Symbol.for("edge-runtime.inspect.custom")](){return{href:this.href,origin:this.origin,protocol:this.protocol,username:this.username,password:this.password,host:this.host,hostname:this.hostname,port:this.port,pathname:this.pathname,search:this.search,searchParams:this.searchParams,hash:this.hash}}clone(){return new e0(String(this),this[eZ].options)}}var e1=a("./dist/esm/server/web/spec-extension/cookies.js");Symbol("internal request"),Request,Symbol.for("edge-runtime.inspect.custom");let e2="ResponseAborted";class e3 extends Error{constructor(...e){super(...e),this.name=e2}}let e4=0,e9=0,e8=0;function e6(e){return(null==e?void 0:e.name)==="AbortError"||(null==e?void 0:e.name)===e2}async function e5(e,t,r){try{let n,{errored:a,destroyed:i}=t;if(a||i)return;let s=(n=new AbortController,t.once("close",()=>{t.writableFinished||n.abort(new e3)}),n),o=function(e,t){let r=!1,n=new eb;function a(){n.resolve()}e.on("drain",a),e.once("close",()=>{e.off("drain",a),n.resolve()});let i=new eb;return e.once("finish",()=>{i.resolve()}),new WritableStream({write:async t=>{if(!r){if(r=!0,"performance"in globalThis&&process.env.NEXT_OTEL_PERFORMANCE_PREFIX){let e=function(e={}){let t=0===e4?void 0:{clientComponentLoadStart:e4,clientComponentLoadTimes:e9,clientComponentLoadCount:e8};return e.reset&&(e4=0,e9=0,e8=0),t}();e&&performance.measure(`${process.env.NEXT_OTEL_PERFORMANCE_PREFIX}:next-client-component-loading`,{start:e.clientComponentLoadStart,end:e.clientComponentLoadStart+e.clientComponentLoadTimes})}e.flushHeaders(),(0,eq.getTracer)().trace(eX.Fx.startResponse,{spanName:"start response"},()=>void 0)}try{let r=e.write(t);"flush"in e&&"function"==typeof e.flush&&e.flush(),r||(await n.promise,n=new eb)}catch(t){throw e.end(),Object.defineProperty(Error("failed to write chunk to response",{cause:t}),"__NEXT_ERROR_CODE",{value:"E321",enumerable:!1,configurable:!0})}},abort:t=>{e.writableFinished||e.destroy(t)},close:async()=>{if(t&&await t,!e.writableFinished)return e.end(),i.promise}})}(t,r);await e.pipeTo(o,{signal:s.signal})}catch(e){if(e6(e))return;throw Object.defineProperty(Error("failed to pipe response",{cause:e}),"__NEXT_ERROR_CODE",{value:"E180",enumerable:!1,configurable:!0})}}class e7{static #e=this.EMPTY=new e7(null,{metadata:{},contentType:null});static fromStatic(e,t){return new e7(e,{metadata:{},contentType:t})}constructor(e,{contentType:t,waitUntil:r,metadata:n}){this.response=e,this.contentType=t,this.metadata=n,this.waitUntil=r}assignMetadata(e){Object.assign(this.metadata,e)}get isNull(){return null===this.response}get isDynamic(){return"string"!=typeof this.response}toUnchunkedString(e=!1){if(null===this.response)return"";if("string"!=typeof this.response){if(!e)throw Object.defineProperty(new j.z("dynamic responses cannot be unchunked. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E732",enumerable:!1,configurable:!0});return eV(this.readable)}return this.response}get readable(){return null===this.response?new ReadableStream({start(e){e.close()}}):"string"==typeof this.response?eB(this.response):Buffer.isBuffer(this.response)?eW(this.response):Array.isArray(this.response)?function(...e){if(0===e.length)return new ReadableStream({start(e){e.close()}});if(1===e.length)return e[0];let{readable:t,writable:r}=new TransformStream,n=e[0].pipeTo(r,{preventClose:!0}),a=1;for(;at.pipeTo(r,{preventClose:!0}))}let i=e[a];return(n=n.then(()=>i.pipeTo(r))).catch(ez),t}(...this.response):this.response}coerce(){return null===this.response?[]:"string"==typeof this.response?[eB(this.response)]:Array.isArray(this.response)?this.response:Buffer.isBuffer(this.response)?[eW(this.response)]:[this.response]}pipeThrough(e){this.response=this.readable.pipeThrough(e)}unshift(e){this.response=this.coerce(),this.response.unshift(e)}push(e){this.response=this.coerce(),this.response.push(e)}async pipeTo(e){try{await this.readable.pipeTo(e,{preventClose:!0}),this.waitUntil&&await this.waitUntil,await e.close()}catch(t){if(e6(t))return void await e.abort(t);throw t}}async pipeToNodeResponse(e){await e5(this.readable,e,this.waitUntil)}}var te=((n={}).PAGES="PAGES",n.PAGES_API="PAGES_API",n.APP_PAGE="APP_PAGE",n.APP_ROUTE="APP_ROUTE",n.IMAGE="IMAGE",n);async function tt(e){var t,r;return{...e,value:(null==(t=e.value)?void 0:t.kind)===eH.PAGES?{kind:eH.PAGES,html:await e.value.html.toUnchunkedString(!0),pageData:e.value.pageData,headers:e.value.headers,status:e.value.status}:(null==(r=e.value)?void 0:r.kind)===eH.APP_PAGE?{kind:eH.APP_PAGE,html:await e.value.html.toUnchunkedString(!0),postponed:e.value.postponed,rscData:e.value.rscData,headers:e.value.headers,status:e.value.status,segmentData:e.value.segmentData}:e.value}}async function tr(e){var t,r;return e?{isMiss:e.isMiss,isStale:e.isStale,cacheControl:e.cacheControl,isFallback:e.isFallback,value:(null==(t=e.value)?void 0:t.kind)===eH.PAGES?{kind:eH.PAGES,html:e7.fromStatic(e.value.html,S.j9),pageData:e.value.pageData,headers:e.value.headers,status:e.value.status}:(null==(r=e.value)?void 0:r.kind)===eH.APP_PAGE?{kind:eH.APP_PAGE,html:e7.fromStatic(e.value.html,S.j9),rscData:e.value.rscData,headers:e.value.headers,status:e.value.status,postponed:e.value.postponed,segmentData:e.value.segmentData}:e.value}:null}function tn(e,t){if(!e)return t;let r=parseInt(e,10);return Number.isFinite(r)&&r>0?r:t}let ta=tn(process.env.NEXT_PRIVATE_RESPONSE_CACHE_TTL,1e4),ti=tn(process.env.NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE,150),ts="__ttl_sentinel__";function to(e,t){return`${e}\0${t??ts}`}class tl{constructor(e,t=ti,r=ta){this.getBatcher=eE.create({cacheKeyFn:({key:e,isOnDemandRevalidate:t})=>`${e}-${t?"1":"0"}`,schedulerFn:eU}),this.revalidateBatcher=eE.create({schedulerFn:eU}),this.evictedInvocationIDs=new Set,this.minimal_mode=e,this.maxSize=t,this.ttl=r,this.cache=new eR(t,void 0,e=>{let t=function(e){let t=e.lastIndexOf("\0");if(-1===t)return;let r=e.slice(t+1);return r===ts?void 0:r}(e);if(t){if(this.evictedInvocationIDs.size>=100){let e=this.evictedInvocationIDs.values().next().value;e&&this.evictedInvocationIDs.delete(e)}this.evictedInvocationIDs.add(t)}})}async get(e,t,r){if(!e)return t({hasResolved:!1,previousCacheEntry:null});if(this.minimal_mode){let t=to(e,r.invocationID),n=this.cache.get(t);if(n){if(void 0!==r.invocationID)return tr(n.entry);let e=Date.now();if(n.expiresAt>e)return tr(n.entry);this.cache.remove(t)}r.invocationID&&this.evictedInvocationIDs.has(r.invocationID)&&function(...e){let t=e.join(" ");eM.has(t)||(eM.set(t,t),function(...e){!function(e,...t){(""===t[0]||void 0===t[0])&&1===t.length&&t.shift();let r=e in eI?eI[e]:"log",n=eN[e];0===t.length?console[r](""):1===t.length&&"string"==typeof t[0]?console[r](n+" "+t[0]):console[r](n,...t)}("warn",...e)}(...e))}(`Response cache entry was evicted for invocation ${r.invocationID}. Consider increasing NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE (current: ${this.maxSize}).`)}let{incrementalCache:n,isOnDemandRevalidate:a=!1,isFallback:i=!1,isRoutePPREnabled:s=!1,isPrefetch:o=!1,waitUntil:l,routeKind:c,invocationID:u}=r,d=await this.getBatcher.batch({key:e,isOnDemandRevalidate:a},({resolve:r})=>{let d=this.handleGet(e,t,{incrementalCache:n,isOnDemandRevalidate:a,isFallback:i,isRoutePPREnabled:s,isPrefetch:o,routeKind:c,invocationID:u},r);return l&&l(d),d});return tr(d)}async handleGet(e,t,r,n){let a=null,i=!1;try{if((a=this.minimal_mode?null:await r.incrementalCache.get(e,{kind:function(e){switch(e){case te.PAGES:return eF.PAGES;case te.APP_PAGE:return eF.APP_PAGE;case te.IMAGE:return eF.IMAGE;case te.APP_ROUTE:return eF.APP_ROUTE;case te.PAGES_API:throw Object.defineProperty(Error(`Unexpected route kind ${e}`),"__NEXT_ERROR_CODE",{value:"E64",enumerable:!1,configurable:!0});default:return e}}(r.routeKind),isRoutePPREnabled:r.isRoutePPREnabled,isFallback:r.isFallback}))&&!r.isOnDemandRevalidate&&(n(a),i=!0,!a.isStale||r.isPrefetch))return a;let s=await this.revalidate(e,r.incrementalCache,r.isRoutePPREnabled,r.isFallback,t,a,null!==a&&!r.isOnDemandRevalidate,void 0,r.invocationID);if(!s){if(this.minimal_mode){let t=to(e,r.invocationID);this.cache.remove(t)}return null}return r.isOnDemandRevalidate,s}catch(e){if(i)return console.error(e),null;throw e}}async revalidate(e,t,r,n,a,i,s,o,l){return this.revalidateBatcher.batch(e,()=>{let c=this.handleRevalidate(e,t,r,n,a,i,s,l);return o&&o(c),c})}async handleRevalidate(e,t,r,n,a,i,s,o){try{let l=await a({hasResolved:s,previousCacheEntry:i,isRevalidating:!0});if(!l)return null;let c=await tt({...l,isMiss:!i});if(c.cacheControl)if(this.minimal_mode){let t=to(e,o);this.cache.set(t,{entry:c,expiresAt:Date.now()+this.ttl})}else await t.set(e,c.value,{cacheControl:c.cacheControl,isRoutePPREnabled:r,isFallback:n});return c}catch(a){if(null==i?void 0:i.cacheControl){let a=Math.min(Math.max(i.cacheControl.revalidate||3,3),30),s=void 0===i.cacheControl.expire?void 0:Math.max(a+3,i.cacheControl.expire);await t.set(e,i.value,{cacheControl:{revalidate:a,expire:s},isRoutePPREnabled:r,isFallback:n})}throw a}}}var tc=a("./dist/esm/shared/lib/isomorphic/path.js"),tu=a.n(tc);let td=require("next/dist/server/lib/incremental-cache/tags-manifest.external.js");class th{constructor(e){this.fs=e,this.tasks=[]}findOrCreateTask(e){for(let t of this.tasks)if(t[0]===e)return t;let t=this.fs.mkdir(e);t.catch(()=>{});let r=[e,t,[]];return this.tasks.push(r),r}append(e,t){let r=this.findOrCreateTask(tu().dirname(e)),n=r[1].then(()=>this.fs.writeFile(e,t));n.catch(()=>{}),r[2].push(n)}wait(){return Promise.all(this.tasks.flatMap(e=>e[2]))}}let tf=require("next/dist/server/lib/incremental-cache/memory-cache.external.js");class tp{static #e=this.debug=!!process.env.NEXT_PRIVATE_DEBUG_CACHE;constructor(e){this.fs=e.fs,this.flushToDisk=e.flushToDisk,this.serverDistDir=e.serverDistDir,this.revalidatedTags=e.revalidatedTags,e.maxMemoryCacheSize?tp.memoryCache?tp.debug&&console.log("FileSystemCache: memory store already initialized"):(tp.debug&&console.log("FileSystemCache: using memory store for fetch cache"),tp.memoryCache=(0,tf.getMemoryCache)(e.maxMemoryCacheSize)):tp.debug&&console.log("FileSystemCache: not using memory store for fetch cache")}resetRequestCache(){}async revalidateTag(e,t){if(e="string"==typeof e?[e]:e,tp.debug&&console.log("FileSystemCache: revalidateTag",e,t),0===e.length)return;let r=Date.now();for(let n of e){let e=td.tagsManifest.get(n)||{};if(t){let a={...e};a.stale=r,void 0!==t.expire&&(a.expired=r+1e3*t.expire),td.tagsManifest.set(n,a)}else td.tagsManifest.set(n,{...e,expired:r})}}async get(...e){var t,r,n,a,i,s,o,l,c;let[u,d]=e,{kind:h}=d,f=null==(t=tp.memoryCache)?void 0:t.get(u);if(tp.debug&&(h===eF.FETCH?console.log("FileSystemCache: get",u,d.tags,h,!!f):console.log("FileSystemCache: get",u,h,!!f)),!f)try{if(h===eF.APP_ROUTE){let e=this.getFilePath(`${u}.body`,eF.APP_ROUTE),t=await this.fs.readFile(e),{mtime:r}=await this.fs.stat(e),n=JSON.parse(await this.fs.readFile(e.replace(/\.body$/,S.EP),"utf8"));f={lastModified:r.getTime(),value:{kind:eH.APP_ROUTE,body:t,headers:n.headers,status:n.status}}}else{let e=this.getFilePath(h===eF.FETCH?u:`${u}.html`,h),t=await this.fs.readFile(e,"utf8"),{mtime:r}=await this.fs.stat(e);if(h===eF.FETCH){let{tags:e,fetchIdx:n,fetchUrl:a}=d;if(!this.flushToDisk)return null;let i=r.getTime(),l=JSON.parse(t);if(f={lastModified:i,value:l},(null==(s=f.value)?void 0:s.kind)===eH.FETCH){let t=null==(o=f.value)?void 0:o.tags;(null==e?void 0:e.every(e=>null==t?void 0:t.includes(e)))||(tp.debug&&console.log("FileSystemCache: tags vs storedTags mismatch",e,t),await this.set(u,f.value,{fetchCache:!0,tags:e,fetchIdx:n,fetchUrl:a}))}}else if(h===eF.APP_PAGE){let n,a,i;try{n=JSON.parse(await this.fs.readFile(e.replace(/\.html$/,S.EP),"utf8"))}catch{}if(null==n?void 0:n.segmentPaths){let e=new Map;a=e;let t=u+S.mH;await Promise.all(n.segmentPaths.map(async r=>{let n=this.getFilePath(t+r+S.tz,eF.APP_PAGE);try{e.set(r,await this.fs.readFile(n))}catch{}}))}d.isFallback||d.isRoutePPREnabled&&(null==n?void 0:n.postponed)!=null||(i=await this.fs.readFile(this.getFilePath(`${u}${S.RM}`,eF.APP_PAGE))),f={lastModified:r.getTime(),value:{kind:eH.APP_PAGE,html:t,rscData:i,postponed:null==n?void 0:n.postponed,headers:null==n?void 0:n.headers,status:null==n?void 0:n.status,segmentData:a}}}else if(h===eF.PAGES){let e,n={};d.isFallback||(n=JSON.parse(await this.fs.readFile(this.getFilePath(`${u}${S.x3}`,eF.PAGES),"utf8"))),f={lastModified:r.getTime(),value:{kind:eH.PAGES,html:t,pageData:n,headers:null==e?void 0:e.headers,status:null==e?void 0:e.status}}}else throw Object.defineProperty(Error(`Invariant: Unexpected route kind ${h} in file system cache.`),"__NEXT_ERROR_CODE",{value:"E445",enumerable:!1,configurable:!0})}f&&(null==(l=tp.memoryCache)||l.set(u,f))}catch{return null}if((null==f||null==(r=f.value)?void 0:r.kind)===eH.APP_PAGE||(null==f||null==(n=f.value)?void 0:n.kind)===eH.APP_ROUTE||(null==f||null==(a=f.value)?void 0:a.kind)===eH.PAGES){let e=null==(c=f.value.headers)?void 0:c[S.VC];if("string"==typeof e){let t=e.split(",");if(t.length>0&&(0,td.areTagsExpired)(t,f.lastModified))return tp.debug&&console.log("FileSystemCache: expired tags",t),null}}else if((null==f||null==(i=f.value)?void 0:i.kind)===eH.FETCH){let e=d.kind===eF.FETCH?[...d.tags||[],...d.softTags||[]]:[];if(e.some(e=>this.revalidatedTags.includes(e)))return tp.debug&&console.log("FileSystemCache: was revalidated",e),null;if((0,td.areTagsExpired)(e,f.lastModified))return tp.debug&&console.log("FileSystemCache: expired tags",e),null}return f??null}async set(e,t,r){var n;if(null==(n=tp.memoryCache)||n.set(e,{value:t,lastModified:Date.now()}),tp.debug&&console.log("FileSystemCache: set",e),!this.flushToDisk||!t)return;let a=new th(this.fs);if(t.kind===eH.APP_ROUTE){let r=this.getFilePath(`${e}.body`,eF.APP_ROUTE);a.append(r,t.body);let n={headers:t.headers,status:t.status,postponed:void 0,segmentPaths:void 0,prefetchHints:void 0};a.append(r.replace(/\.body$/,S.EP),JSON.stringify(n,null,2))}else if(t.kind===eH.PAGES||t.kind===eH.APP_PAGE){let n=t.kind===eH.APP_PAGE,i=this.getFilePath(`${e}.html`,n?eF.APP_PAGE:eF.PAGES);if(a.append(i,t.html),r.fetchCache||r.isFallback||r.isRoutePPREnabled||a.append(this.getFilePath(`${e}${n?S.RM:S.x3}`,n?eF.APP_PAGE:eF.PAGES),n?t.rscData:JSON.stringify(t.pageData)),(null==t?void 0:t.kind)===eH.APP_PAGE){let e;if(t.segmentData){e=[];let r=i.replace(/\.html$/,S.mH);for(let[n,i]of t.segmentData){e.push(n);let t=r+n+S.tz;a.append(t,i)}}let r={headers:t.headers,status:t.status,postponed:t.postponed,segmentPaths:e,prefetchHints:void 0};a.append(i.replace(/\.html$/,S.EP),JSON.stringify(r))}}else if(t.kind===eH.FETCH){let n=this.getFilePath(e,eF.FETCH);a.append(n,JSON.stringify({...t,tags:r.fetchCache?r.tags:[]}))}await a.wait()}getFilePath(e,t){switch(t){case eF.FETCH:return tu().join(this.serverDistDir,"..","cache","fetch-cache",e);case eF.PAGES:return tu().join(this.serverDistDir,"pages",e);case eF.IMAGE:case eF.APP_PAGE:case eF.APP_ROUTE:return tu().join(this.serverDistDir,"app",e);default:throw Object.defineProperty(Error(`Unexpected file path kind: ${t}`),"__NEXT_ERROR_CODE",{value:"E479",enumerable:!1,configurable:!0})}}}function tm(e){return e.replace(/(?:\/index)?\/?$/,"")||"/"}let tg=require("next/dist/server/lib/incremental-cache/shared-cache-controls.external.js");var tv=a("../../app-render/work-unit-async-storage.external"),ty=a("../../app-render/work-async-storage.external");class tb{static #e=this.debug=!!process.env.NEXT_PRIVATE_DEBUG_CACHE;constructor({fs:e,dev:t,flushToDisk:r,minimalMode:n,serverDistDir:a,requestHeaders:i,maxMemoryCacheSize:s,getPrerenderManifest:o,fetchCacheKeyPrefix:l,CurCacheHandler:c,allowedRevalidateHeaderKeys:u}){var d,h,f,p;this.locks=new Map,this.hasCustomCacheHandler=!!c;const m=Symbol.for("@next/cache-handlers"),g=globalThis;if(c)tb.debug&&console.log("IncrementalCache: using custom cache handler",c.name);else{const t=g[m];(null==t?void 0:t.FetchCache)?(c=t.FetchCache,tb.debug&&console.log("IncrementalCache: using global FetchCache cache handler")):e&&a&&(tb.debug&&console.log("IncrementalCache: using filesystem cache handler"),c=tp)}process.env.__NEXT_TEST_MAX_ISR_CACHE&&(s=parseInt(process.env.__NEXT_TEST_MAX_ISR_CACHE,10)),this.dev=t,this.disableForTestmode="true"===process.env.NEXT_PRIVATE_TEST_PROXY,this.minimalMode=n,this.requestHeaders=i,this.allowedRevalidateHeaderKeys=u,this.prerenderManifest=o(),this.cacheControls=new tg.SharedCacheControls(this.prerenderManifest),this.fetchCacheKeyPrefix=l;let v=[];i[S.kz]===(null==(h=this.prerenderManifest)||null==(d=h.preview)?void 0:d.previewModeId)&&(this.isOnDemandRevalidate=!0),n&&(v=this.revalidatedTags=function(e,t){return"string"==typeof e[S.vS]&&e[S.c1]===t?e[S.vS].split(","):[]}(i,null==(p=this.prerenderManifest)||null==(f=p.preview)?void 0:f.previewModeId)),c&&(this.cacheHandler=new c({dev:t,fs:e,flushToDisk:r,serverDistDir:a,revalidatedTags:v,maxMemoryCacheSize:s,_requestHeaders:i,fetchCacheKeyPrefix:l}))}calculateRevalidate(e,t,r,n){if(r)return Math.floor(performance.timeOrigin+performance.now()-1e3);let a=this.cacheControls.get(tm(e)),i=a?a.revalidate:!n&&1;return"number"==typeof i?1e3*i+t:i}_getPathname(e,t){return t?e:eo(e)}resetRequestCache(){var e,t;null==(t=this.cacheHandler)||null==(e=t.resetRequestCache)||e.call(t)}async lock(e){for(;;){let t=this.locks.get(e);if(tb.debug&&console.log("IncrementalCache: lock get",e,!!t),!t)break;await t}let{resolve:t,promise:r}=new eb;return tb.debug&&console.log("IncrementalCache: successfully locked",e),this.locks.set(e,r),()=>{t(),this.locks.delete(e)}}async revalidateTag(e,t){var r;return null==(r=this.cacheHandler)?void 0:r.revalidateTag(e,t)}async generateCacheKey(e,t={}){let r=[],n=new TextEncoder,i=new TextDecoder;if(t.body)if(t.body instanceof Uint8Array)r.push(i.decode(t.body)),t._ogBody=t.body;else if("function"==typeof t.body.getReader){let e=t.body,a=[];try{await e.pipeTo(new WritableStream({write(e){"string"==typeof e?(a.push(n.encode(e)),r.push(e)):(a.push(e),r.push(i.decode(e,{stream:!0})))}})),r.push(i.decode());let s=a.reduce((e,t)=>e+t.length,0),o=new Uint8Array(s),l=0;for(let e of a)o.set(e,l),l+=e.length;t._ogBody=o}catch(e){console.error("Problem reading body",e)}}else if("function"==typeof t.body.keys){let e=t.body;for(let n of(t._ogBody=t.body,new Set([...e.keys()]))){let t=e.getAll(n);r.push(`${n}=${(await Promise.all(t.map(async e=>"string"==typeof e?e:await e.text()))).join(",")}`)}}else if("function"==typeof t.body.arrayBuffer){let e=t.body,n=await e.arrayBuffer();r.push(await e.text()),t._ogBody=new Blob([n],{type:e.type})}else"string"==typeof t.body&&(r.push(t.body),t._ogBody=t.body);let s="function"==typeof(t.headers||{}).keys?Object.fromEntries(t.headers):Object.assign({},t.headers);"traceparent"in s&&delete s.traceparent,"tracestate"in s&&delete s.tracestate;let o=JSON.stringify(["v3",this.fetchCacheKeyPrefix||"",e,t.method,s,t.mode,t.redirect,t.credentials,t.referrer,t.referrerPolicy,t.integrity,t.cache,r]);return a("crypto").createHash("sha256").update(o).digest("hex")}async get(e,t){var r,n,a,i,s,o,l;let c,u;if(t.kind===eF.FETCH){let r=tv.workUnitAsyncStorage.getStore(),n=r?(0,tv.getRenderResumeDataCache)(r):null;if(n){let r=n.fetch.get(e);if((null==r?void 0:r.kind)===eH.FETCH){let n=ty.workAsyncStorage.getStore();if(![...t.tags||[],...t.softTags||[]].some(e=>{var t,r;return(null==(t=this.revalidatedTags)?void 0:t.includes(e))||(null==n||null==(r=n.pendingRevalidatedTags)?void 0:r.some(t=>t.tag===e))}))return tb.debug&&console.log("IncrementalCache: rdc:hit",e),{isStale:!1,value:r};tb.debug&&console.log("IncrementalCache: rdc:revalidated-tag",e)}else tb.debug&&console.log("IncrementalCache: rdc:miss",e)}else tb.debug&&console.log("IncrementalCache: rdc:no-resume-data")}if(this.disableForTestmode||this.dev&&(t.kind!==eF.FETCH||"no-cache"===this.requestHeaders["cache-control"]))return null;e=this._getPathname(e,t.kind===eF.FETCH);let d=await (null==(r=this.cacheHandler)?void 0:r.get(e,t));if(t.kind===eF.FETCH){if(!d)return null;if((null==(a=d.value)?void 0:a.kind)!==eH.FETCH)throw Object.defineProperty(new j.z(`Expected cached value for cache key ${JSON.stringify(e)} to be a "FETCH" kind, got ${JSON.stringify(null==(i=d.value)?void 0:i.kind)} instead.`),"__NEXT_ERROR_CODE",{value:"E653",enumerable:!1,configurable:!0});let r=ty.workAsyncStorage.getStore(),n=[...t.tags||[],...t.softTags||[]];if(n.some(e=>{var t,n;return(null==(t=this.revalidatedTags)?void 0:t.includes(e))||(null==r||null==(n=r.pendingRevalidatedTags)?void 0:n.some(t=>t.tag===e))}))return tb.debug&&console.log("IncrementalCache: expired tag",e),null;let s=tv.workUnitAsyncStorage.getStore();if(s){let t=(0,tv.getPrerenderResumeDataCache)(s);t&&(tb.debug&&console.log("IncrementalCache: rdc:set",e),t.fetch.set(e,d.value))}let o=t.revalidate||d.value.revalidate,l=(performance.timeOrigin+performance.now()-(d.lastModified||0))/1e3>o,c=d.value.data;return(0,td.areTagsExpired)(n,d.lastModified)?null:((0,td.areTagsStale)(n,d.lastModified)&&(l=!0),{isStale:l,value:{kind:eH.FETCH,data:c,revalidate:o}})}if((null==d||null==(n=d.value)?void 0:n.kind)===eH.FETCH)throw Object.defineProperty(new j.z(`Expected cached value for cache key ${JSON.stringify(e)} not to be a ${JSON.stringify(t.kind)} kind, got "FETCH" instead.`),"__NEXT_ERROR_CODE",{value:"E652",enumerable:!1,configurable:!0});let h=null,{isFallback:f}=t,p=this.cacheControls.get(tm(e));if((null==d?void 0:d.lastModified)===-1)c=-1,u=-1*S.eM*1e3;else{let r=performance.timeOrigin+performance.now(),n=(null==d?void 0:d.lastModified)||r;if(void 0===(c=!1!==(u=this.calculateRevalidate(e,n,this.dev??!1,t.isFallback))&&u0&&((0,td.areTagsExpired)(t,n)?c=-1:(0,td.areTagsStale)(t,n)&&(c=!0))}}}return d&&(h={isStale:c,cacheControl:p,revalidateAfter:u,value:d.value,isFallback:f}),!d&&this.prerenderManifest.notFoundRoutes.includes(e)&&(h={isStale:c,value:null,cacheControl:p,revalidateAfter:u,isFallback:f},this.set(e,h.value,{...t,cacheControl:p})),h}async set(e,t,r){if((null==t?void 0:t.kind)===eH.FETCH){let r=tv.workUnitAsyncStorage.getStore(),n=r?(0,tv.getPrerenderResumeDataCache)(r):null;n&&(tb.debug&&console.log("IncrementalCache: rdc:set",e),n.fetch.set(e,t))}if(this.disableForTestmode||this.dev&&!r.fetchCache)return;e=this._getPathname(e,r.fetchCache);let n=JSON.stringify(t).length;if(r.fetchCache&&n>2097152&&!this.hasCustomCacheHandler&&!r.isImplicitBuildTimeCache){let t=`Failed to set Next.js data cache for ${r.fetchUrl||e}, items over 2MB can not be cached (${n} bytes)`;if(this.dev)throw Object.defineProperty(Error(t),"__NEXT_ERROR_CODE",{value:"E1003",enumerable:!1,configurable:!0});console.warn(t);return}try{var a;!r.fetchCache&&r.cacheControl&&this.cacheControls.set(tm(e),r.cacheControl),await (null==(a=this.cacheHandler)?void 0:a.set(e,t,r))}catch(t){console.warn("Failed to update prerender cache for",e,t)}}}function tE(e){if(0===e)return{get:()=>Promise.resolve(void 0),set:()=>Promise.resolve(),refreshTags:()=>Promise.resolve(),getExpiration:()=>Promise.resolve(0),updateTags:()=>Promise.resolve()};let t=new eR(e,e=>e.size),r=new Map,n=process.env.NEXT_PRIVATE_DEBUG_CACHE?console.debug.bind(console,"DefaultCacheHandler:"):void 0;return{async get(e){let a=r.get(e);a&&(null==n||n("get",e,"pending"),await a);let i=t.get(e);if(!i){null==n||n("get",e,"not found");return}let s=i.entry;if(performance.timeOrigin+performance.now()>s.timestamp+1e3*s.revalidate){null==n||n("get",e,"expired");return}let o=s.revalidate;if((0,td.areTagsExpired)(s.tags,s.timestamp)){null==n||n("get",e,"had expired tag");return}(0,td.areTagsStale)(s.tags,s.timestamp)&&(null==n||n("get",e,"had stale tag"),o=-1);let[l,c]=s.value.tee();return s.value=c,null==n||n("get",e,"found",{tags:s.tags,timestamp:s.timestamp,expire:s.expire,revalidate:o}),{...s,revalidate:o,value:l}},async set(e,a){null==n||n("set",e,"start");let i=()=>{},s=new Promise(e=>{i=e});r.set(e,s);let o=await a,l=0;try{let[r,a]=o.value.tee();o.value=r;let i=a.getReader();for(let e;!(e=await i.read()).done;)l+=Buffer.from(e.value).byteLength;t.set(e,{entry:o,isErrored:!1,errorRetryCount:0,size:l}),null==n||n("set",e,"done")}catch(t){null==n||n("set",e,"failed",t)}finally{i(),r.delete(e)}},async refreshTags(){},async getExpiration(e){let t=Math.max(...e.map(e=>{let t=td.tagsManifest.get(e);return t&&t.expired||0}),0);return null==n||n("getExpiration",{tags:e,expiration:t}),t},async updateTags(e,t){let r=Math.round(performance.timeOrigin+performance.now());for(let a of(null==n||n("updateTags",{tags:e,timestamp:r}),e)){let e=td.tagsManifest.get(a)||{};if(t){let n={...e};n.stale=r,void 0!==t.expire&&(n.expired=r+1e3*t.expire),td.tagsManifest.set(a,n)}else td.tagsManifest.set(a,{...e,expired:r})}}}}let t_=process.env.NEXT_PRIVATE_DEBUG_CACHE?(e,...t)=>{console.log(`use-cache: ${e}`,...t)}:void 0,tw=Symbol.for("@next/cache-handlers"),tR=Symbol.for("@next/cache-handlers-map"),tx=Symbol.for("@next/cache-handlers-set"),tP=globalThis;function tS(){if(tP[tR])return tP[tR].entries()}function tC(e){return e.default||e}let tO=Symbol.for("@next/router-server-methods"),tT=globalThis,tA="next-action",tj=["rsc","next-router-state-tree","next-router-prefetch","next-hmr-refresh","next-router-segment-prefetch"];function tk(e){var t,r;return(null==(r=e.has)||null==(t=r[0])?void 0:t.key)==="next-url"}let tD=e=>import(e).then(e=>e.default||e);class t${constructor({userland:e,definition:t,distDir:r,relativeProjectDir:n}){this.userland=e,this.definition=t,this.isDev=!1,this.distDir=r,this.relativeProjectDir=n}getRouterServerContext(e){var t;let r=en(e,"hostname"),n=en(e,"revalidate"),a=en(e,"render404"),i=en(e,"relativeProjectDir")||this.relativeProjectDir;return{...null==(t=tT[tO])?void 0:t[i],...void 0!==r?{hostname:r}:{},...void 0!==n?{revalidate:n}:{},...void 0!==a?{render404:a}:{}}}normalizeUrl(e,t){}async instrumentationOnRequestError(e,...t){{let{join:r}=a("node:path"),n=r(process.cwd(),en(e,"relativeProjectDir")||this.relativeProjectDir),{instrumentationOnRequestError:i}=await Promise.resolve().then(a.t.bind(a,"../lib/router-utils/instrumentation-globals.external.js",23));return i(n,this.distDir,...t)}}loadManifests(e,t){let r;{var n,i;let s;if(!t)throw Object.defineProperty(Error("Invariant: projectDir is required for node runtime"),"__NEXT_ERROR_CODE",{value:"E718",enumerable:!1,configurable:!0});let{loadManifestFromRelativePath:o}=a("../load-manifest.external"),l=eo(e),c=this.definition.kind===te.PAGES||this.definition.kind===te.PAGES_API?"pages":"app",[u,d,h,f,m,g,v,y,b,E,_,w]=[o({projectDir:t,distDir:this.distDir,manifest:"routes-manifest.json",shouldCache:!this.isDev}),o({projectDir:t,distDir:this.distDir,manifest:"prerender-manifest.json",shouldCache:!this.isDev}),o({projectDir:t,distDir:this.distDir,manifest:p,shouldCache:!this.isDev}),"/_error"===e?o({projectDir:t,distDir:this.distDir,manifest:`fallback-${p}`,shouldCache:!this.isDev,handleMissing:!0}):{},o({projectDir:t,distDir:this.distDir,manifest:`server/${"app"===c?"app":"pages"}${l}/react-loadable-manifest.json`,handleMissing:!0,shouldCache:!this.isDev}),o({projectDir:t,distDir:this.distDir,manifest:"server/next-font-manifest.json",shouldCache:!this.isDev}),"app"!==c||(s=(i=e).replace(/\/route$/,""),i.endsWith("/route")&&function(e,t,r){if(!e||e.length<2)return!1;let n=e.replace(/\\/g,"/"),a=!!(ef.test(n)||ep.test(n)||em.test(n)||eg.test(n)||ev.test(n))||(!!n.includes("robots")||!!n.includes("manifest")||!!n.includes("sitemap")||!!n.includes("icon")||!!n.includes("apple-icon")||!!n.includes("opengraph-image")||!!n.includes("twitter-image")||!!n.includes("favicon"))&&null;if(null!==a)return a;let i=function(e,t){let r=`${e.join(",")}|${t}`,n=ey.get(r);if(n)return n;let a=t?"$":"?$",i="\\d?"+(t?"":"(-\\w{6})?"),s=e.length>0?[...e,"txt"]:["txt"],o=e.length>0?[...e,"webmanifest","json"]:["webmanifest","json"],l=[RegExp(`^[\\\\/]robots${eh(s,null)}${a}`),RegExp(`^[\\\\/]manifest${eh(o,null)}${a}`),RegExp(`[\\\\/]sitemap${eh(["xml"],e)}${a}`),RegExp(`[\\\\/]icon${i}${eh(el,e)}${a}`),RegExp(`[\\\\/]apple-icon${i}${eh(ec,e)}${a}`),RegExp(`[\\\\/]opengraph-image${i}${eh(eu,e)}${a}`),RegExp(`[\\\\/]twitter-image${i}${eh(ed,e)}${a}`)];return ey.set(r,l),l}(t,r);for(let e=0;enew RegExp(e.regex))}}return r}async loadCustomCacheHandlers(e,t){{let{cacheMaxMemorySize:n,cacheHandlers:i}=t;if(!i||!function(e){if(tP[tR])return null==t_||t_("cache handlers already initialized"),!1;if(null==t_||t_("initializing cache handlers"),tP[tR]=new Map,tP[tw]){let t;tP[tw].DefaultCache?(null==t_||t_('setting "default" cache handler from symbol'),t=tP[tw].DefaultCache):(null==t_||t_('setting "default" cache handler from default'),t=tE(e)),tP[tR].set("default",t),tP[tw].RemoteCache?(null==t_||t_('setting "remote" cache handler from symbol'),tP[tR].set("remote",tP[tw].RemoteCache)):(null==t_||t_('setting "remote" cache handler from default'),tP[tR].set("remote",t))}else{let t=tE(e);null==t_||t_('setting "default" cache handler from default'),tP[tR].set("default",t),null==t_||t_('setting "remote" cache handler from default'),tP[tR].set("remote",t)}return tP[tx]=new Set(tP[tR].values()),!0}(n))return;for(let[t,n]of Object.entries(i)){if(!n)continue;let{formatDynamicImportPath:i}=a("./dist/esm/lib/format-dynamic-import-path.js"),{join:s}=a("node:path"),o=s(process.cwd(),en(e,"relativeProjectDir")||this.relativeProjectDir);var r=tC(await tD(i(`${o}/${this.distDir}`,n)));if(!tP[tR]||!tP[tx])throw Object.defineProperty(Error("Cache handlers not initialized"),"__NEXT_ERROR_CODE",{value:"E649",enumerable:!1,configurable:!0});null==t_||t_('setting cache handler for "%s"',t),tP[tR].set(t,r),tP[tx].add(r)}}}async getIncrementalCache(e,t,r,n){{let i,{cacheHandler:s}=t;if(s){let{formatDynamicImportPath:e}=a("./dist/esm/lib/format-dynamic-import-path.js");i=tC(await tD(e(this.distDir,s)))}let{join:o}=a("node:path"),l=o(process.cwd(),en(e,"relativeProjectDir")||this.relativeProjectDir);await this.loadCustomCacheHandlers(e,t);let c=new tb({fs:a("./dist/esm/server/lib/node-fs-methods.js").e,dev:this.isDev,requestHeaders:e.headers,allowedRevalidateHeaderKeys:t.experimental.allowedRevalidateHeaderKeys,minimalMode:n,serverDistDir:`${l}/${this.distDir}/server`,fetchCacheKeyPrefix:t.experimental.fetchCacheKeyPrefix,maxMemoryCacheSize:t.cacheMaxMemorySize,flushToDisk:!n&&t.experimental.isrFlushToDisk,getPrerenderManifest:()=>r,CurCacheHandler:i});return globalThis.__incrementalCache=c,c}}async onRequestError(e,t,r,n,a){n||((null==a?void 0:a.logErrorWithOriginalStack)?a.logErrorWithOriginalStack(t,"app-dir"):console.error(t)),await this.instrumentationOnRequestError(e,t,{path:e.url||"/",headers:e.headers,method:e.method||"GET"},r)}getNextConfigEdge(e){throw Object.defineProperty(Error("Invariant: getNextConfigEdge must only be called in edge runtime"),"__NEXT_ERROR_CODE",{value:"E968",enumerable:!1,configurable:!0})}async prepare(e,t,{srcPage:r,multiZoneDraftMode:n}){var i,s;let o,l,c,u,d;{t&&function(e,t){if(t[ei])return;let r=t.setHeader.bind(t);Object.defineProperty(t,ei,{value:!0}),t.setHeader=(n,a)=>{if("headersSent"in t&&t.headersSent)return t;if("set-cookie"===n.toLowerCase()){let t=en(e,"middlewareCookie");t&&Array.isArray(a)&&a.every((e,r)=>e===t[r])||(a=[...new Set([...t||[],..."string"==typeof a?[a]:Array.isArray(a)?a:[]])])}return r(n,a)}}(e,t);let{join:r,relative:n}=a("node:path");o=r(process.cwd(),en(e,"relativeProjectDir")||this.relativeProjectDir);let i=en(e,"distDir");i&&(this.distDir=n(o,i));let{ensureInstrumentationRegistered:s}=await Promise.resolve().then(a.t.bind(a,"../lib/router-utils/instrumentation-globals.external.js",23));s(o,this.distDir)}let h=this.loadManifests(r,o),{routesManifest:f,prerenderManifest:p,serverFilesManifest:g}=h,{basePath:b,i18n:E,rewrites:w}=f,C=this.getRouterServerContext(e),O=(null==C?void 0:C.nextConfig)||(null==g?void 0:g.config),j=(null==(i=e.headers["x-forwarded-proto"])?void 0:i.includes("https"))?"https":"http";if(!en(e,"initURL")){let t=(null==g?void 0:g.config.experimental.trustHostHeader)?`${j}://${e.headers.host||"localhost"}${e.url}`:`${j}://${(null==C?void 0:C.hostname)||"localhost"}${e.url}`;ea(e,"initURL",t),ea(e,"initProtocol",j)}b&&(e.url=x(e.url||"/",b));let I=m(e.url||"/");if(ea(e,"initQuery",{...null==I?void 0:I.query}),!I)return;let M=!1;R(I.pathname||"/","/_next/data")&&(M=!0,I.pathname=et(I.pathname||"/")),this.normalizeUrl(e,I);let U=I.pathname||"/",L={...I.query},er=_(r);E&&(l=v(I.pathname||"/",E.locales)).detectedLocale&&(e.url=`${l.pathname}${I.search}`,U=l.pathname,c||(c=l.detectedLocale));let es=(0,W.Yr)(r),eo=function({page:e,i18n:t,basePath:r,rewrites:n,pageIsDynamic:i,trailingSlash:s,caseSensitive:o}){let l,c,u;if(i){var d;let t,r;r=(t=function(e,t,r,n,a,i={names:{},intercepted:{}}){let s,o=(s=0,()=>{let e="",t=++s;for(;t>0;)e+=String.fromCharCode(97+(t-1)%26),t=Math.floor((t-1)/26);return e}),l={},c=[],u=[];for(let s of(i=structuredClone(i),A(e).slice(1).split("/"))){let e,d=y.VB.some(e=>s.startsWith(e)),h=s.match(k),f=d?h?.[1]:void 0;if(f&&h?.[2]?(e=t?S.h:void 0,i.intercepted[h[2]]=f):e=h?.[2]&&i.intercepted[h[2]]?t?S.h:void 0:t?S.AA:void 0,f&&h&&h[2]){let{key:t,pattern:r,cleanedKey:n,repeat:s,optional:d}=$({getSafeRouteKey:o,interceptionMarker:f,segment:h[2],routeKeys:l,keyPrefix:e,backreferenceDuplicateKeys:a});c.push(r),u.push(`/${h[1]}:${i.names[t]??n}${s?d?"*":"+":""}`),i.names[t]??=n}else if(h&&h[2]){n&&h[1]&&(c.push(`/${T(h[1])}`),u.push(`/${h[1]}`));let{key:t,pattern:r,cleanedKey:s,repeat:d,optional:f}=$({getSafeRouteKey:o,segment:h[2],routeKeys:l,keyPrefix:e,backreferenceDuplicateKeys:a}),p=r;n&&h[1]&&(p=p.substring(1)),c.push(p),u.push(`/:${i.names[t]??s}${d?f?"*":"+":""}`),i.names[t]??=s}else c.push(`/${T(s)}`),u.push(`/${s}`);r&&h&&h[3]&&(c.push(T(h[3])),u.push(h[3]))}return{namedParameterizedRoute:c.join(""),routeKeys:l,pathToRegexpPattern:u.join(""),reference:i}}(e,(d={prefixRouteKeys:!1}).prefixRouteKeys,d.includeSuffix??!1,d.includePrefix??!1,d.backreferenceDuplicateKeys??!1,d.reference)).namedParameterizedRoute,d.excludeOptionalTrailingSlash||(r+="(?:/)?"),u=(c=q(l={...function(e,{includeSuffix:t=!1,includePrefix:r=!1,excludeOptionalTrailingSlash:n=!1}={}){let{parameterizedRoute:a,groups:i}=function(e,t,r){let n={},a=1,i=[];for(let s of A(e).slice(1).split("/")){let e=y.VB.find(e=>s.startsWith(e)),o=s.match(k);if(e&&o&&o[2]){let{key:t,optional:r,repeat:s}=D(o[2]);n[t]={pos:a++,repeat:s,optional:r},i.push(`/${T(e)}([^/]+?)`)}else if(o&&o[2]){let{key:e,repeat:t,optional:s}=D(o[2]);n[e]={pos:a++,repeat:t,optional:s},r&&o[1]&&i.push(`/${T(o[1])}`);let l=t?s?"(?:/(.+?))?":"/(.+?)":"/([^/]+?)";r&&o[1]&&(l=l.substring(1)),i.push(l)}else i.push(`/${T(s)}`);t&&o&&o[3]&&i.push(T(o[3]))}return{parameterizedRoute:i.join(""),groups:n}}(e,t,r),s=a;return n||(s+="(?:/)?"),{re:RegExp(`^${s}$`),groups:i}}(e,d),namedRegex:`^${r}$`,routeKeys:t.routeKeys,pathToRegexpPattern:t.pathToRegexpPattern,reference:t.reference}))(e)}return{handleRewrites:function(l,u){let d=structuredClone(u),h={},f=d.pathname,p=n=>{var u,p;let m,g,b,E=(u=n.source+(s?"(/)?":""),p={removeUnnamedParams:!0,strict:!0,sensitive:!!o},m=[],g=(0,P.pathToRegexp)(u,m,{delimiter:"/",sensitive:"boolean"==typeof p?.sensitive&&p.sensitive,strict:p?.strict}),b=(0,P.regexpToFunction)(p?.regexModifier?new RegExp(p.regexModifier(g.source),g.flags):g,m),(e,t)=>{if("string"!=typeof e)return!1;let r=b(e);if(!r)return!1;if(p?.removeUnnamedParams)for(let e of m)"number"==typeof e.name&&delete r.params[e.name];return{...t,...r.params}});if(!d.pathname)return!1;let _=E(d.pathname);if((n.has||n.missing)&&_){let e=function(e,t,r=[],n=[]){let i={},s=r=>{let n,s=r.key;switch(r.type){case"header":s=s.toLowerCase(),n=e.headers[s];break;case"cookie":if("cookies"in e)n=e.cookies[r.key];else{var o;n=(o=e.headers,function(){let{cookie:e}=o;if(!e)return{};let{parse:t}=a("./dist/compiled/cookie/index.js");return t(Array.isArray(e)?e.join("; "):e)})()[r.key]}break;case"query":n=t[s];break;case"host":{let{host:t}=e?.headers||{};n=t?.split(":",1)[0].toLowerCase()}}if(!r.value&&n)return i[function(e){let t="";for(let r=0;r64&&n<91||n>96&&n<123)&&(t+=e[r])}return t}(s)]=n,!0;if(n){let e=RegExp(`^${r.value}$`),t=Array.isArray(n)?n.slice(-1)[0].match(e):n.match(e);if(t)return Array.isArray(t)&&(t.groups?Object.keys(t.groups).forEach(e=>{i[e]=t.groups[e]}):"host"===r.type&&t[0]&&(i.host=t[0])),!0}return!1};return!(!r.every(e=>s(e))||n.some(e=>s(e)))&&i}(l,d.query,n.has,n.missing);e?Object.assign(_,e):_=!1}if(_){let{parsedDestination:a,destQuery:s}=function(e){let t,r,n=function(e){let t=e.destination;for(let r of Object.keys({...e.params,...e.query}))r&&(t=t.replace(RegExp(`:${T(r)}`,"g"),`__ESC_COLON_${r}`));let r=function(e){if(e.startsWith("/"))return(0,z.r)(e);let t=new URL(e),r=t.username,n=t.password,a=r?n?`${r}:${n}`:r:null,i=t.pathname,s=t.search;return{auth:a,hash:t.hash,hostname:t.hostname,href:t.href,pathname:i,port:t.port,protocol:t.protocol,query:(0,X.v1)(t.searchParams),search:s,origin:t.origin,slashes:"//"===t.href.slice(t.protocol.length,t.protocol.length+2)}}(t),n=r.pathname;n&&(n=G(n));let a=r.href;a&&(a=G(a));let i=r.hostname;i&&(i=G(i));let s=r.hash;s&&(s=G(s));let o=r.search;o&&(o=G(o));let l=r.origin;return l&&(l=G(l)),{...r,pathname:n,hostname:i,href:a,hash:s,search:o,origin:l}}(e),{hostname:a,query:i,search:s}=n,o=n.pathname;n.hash&&(o=`${o}${n.hash}`);let l=[],c=[];for(let e of(H(o,c),c))l.push(e.name);if(a){let e=[];for(let t of(H(a,e),e))l.push(t.name)}let u=F(o,{validate:!1});for(let[r,n]of(a&&(t=F(a,{validate:!1})),Object.entries(i)))Array.isArray(n)?i[r]=n.map(t=>B(G(t),e.params)):"string"==typeof n&&(i[r]=B(G(n),e.params));let d=Object.keys(e.params).filter(e=>"nextInternalLocale"!==e);if(e.appendParamsToQuery&&!d.some(e=>l.includes(e)))for(let t of d)t in i||(i[t]=e.params[t]);if((0,y.m1)(o))for(let t of o.split("/")){let r=y.VB.find(e=>t.startsWith(e));if(r){"(..)(..)"===r?(e.params["0"]="(..)",e.params["1"]="(..)"):e.params["0"]=r;break}}try{let[a,i]=(r=u(e.params)).split("#",2);t&&(n.hostname=t(e.params)),n.pathname=a,n.hash=`${i?"#":""}${i||""}`,n.search=s?B(s,e.params):""}catch(e){if(e.message.match(/Expected .*? to not repeat, but got an array/))throw Object.defineProperty(Error("To use a multi-match in the destination you must add `*` at the end of the param name to signify it should repeat. https://nextjs.org/docs/messages/invalid-multi-match"),"__NEXT_ERROR_CODE",{value:"E329",enumerable:!1,configurable:!0});throw e}return n.query={...e.query,...n.query},{newUrl:r,destQuery:i,parsedDestination:n}}({appendParamsToQuery:!0,destination:n.destination,params:_,query:d.query});if(a.protocol)return!0;if(Object.assign(h,s,_),Object.assign(d.query,a.query),delete a.query,Object.assign(d,a),!(f=d.pathname))return!1;if(r&&(f=f.replace(RegExp(`^${r}`),"")||"/"),t){let e=v(f,t.locales);f=e.pathname,d.query.nextInternalLocale=e.detectedLocale||_.nextInternalLocale}if(f===e)return!0;if(i&&c){let e=c(f);if(e)return d.query={...d.query,...e},!0}}return!1};for(let e of n.beforeFiles||[])p(e);if(f!==e){let t,r=!1;for(let e of n.afterFiles||[])if(r=p(e))break;if(!r&&!((t=A(f||""))===A(e)||(null==c?void 0:c(t)))){for(let e of n.fallback||[])if(r=p(e))break}}return{rewriteParams:h,rewrittenParsedUrl:d}},defaultRouteRegex:l,dynamicRouteMatcher:c,defaultRouteMatches:u,normalizeQueryParams:function(e,t){for(let[r,n]of(delete e.nextInternalLocale,Object.entries(e))){let a=V(r);a&&(delete e[r],t.add(a),void 0!==n&&(e[a]=Array.isArray(n)?n.map(e=>K(e)):K(n)))}},getParamsFromRouteMatches:function(e){if(!l)return null;let{groups:t,routeKeys:r}=l,n=q({re:{exec:e=>{let n=Object.fromEntries(new URLSearchParams(e));for(let[e,t]of Object.entries(n)){let r=V(e);r&&(n[r]=t,delete n[e])}let a={};for(let e of Object.keys(r)){let i=r[e];if(!i)continue;let s=t[i],o=n[e];if(!s.optional&&!o)return null;a[s.pos]=o}return a}},groups:t})(e);return n||null},normalizeDynamicRouteParams:(e,t)=>l&&u?function(e,t,r,n){let a=(e,t)=>{if(!e)return!1;let r=(0,W.P7)(e);for(let e=0;e<3;e++){if(r===t)return!0;let e=K(r);if(e===r)break;r=e}return!1},i={};for(let s of Object.keys(t.groups)){let o=e[s];"string"==typeof o?o=(0,W.P7)(o):Array.isArray(o)&&(o=o.map(W.P7));let l=r[s],c=t.groups[s].optional;if((Array.isArray(l)?l.some(e=>Array.isArray(o)?o.some(t=>a(t,e)):a(o,e)):Array.isArray(o)?o.some(e=>a(e,l)):a(o,l))||void 0===o&&!(c&&n))return{params:{},hasValidParams:!1};c&&(!o||Array.isArray(o)&&1===o.length&&("index"===o[0]||o[0]===`[[...${s}]]`)||"index"===o||o===`[[...${s}]]`)&&(o=void 0,delete e[s]),o&&"string"==typeof o&&t.groups[s].repeat&&(o=o.split("/")),o&&(i[s]=o)}return{params:i,hasValidParams:!0}}(e,l,u,t):{params:{},hasValidParams:!1},normalizeCdnUrl:(e,t)=>(function(e,t){let r=m(e.url);if(!r)return e.url;delete r.search,Y(r.query,t),e.url=function(e){let{auth:t,hostname:r}=e,n=e.protocol||"",a=e.pathname||"",i=e.hash||"",s=e.query||"",o=!1;t=t?encodeURIComponent(t).replace(/%3A/i,":")+"@":"",e.host?o=t+e.host:r&&(o=t+(~r.indexOf(":")?`[${r}]`:r),e.port&&(o+=":"+e.port)),s&&"object"==typeof s&&(s=String(X.Bw(s)));let l=e.search||s&&`?${s}`||"";return n&&!n.endsWith(":")&&(n+=":"),e.slashes||(!n||J.test(n))&&!1!==o?(o="//"+(o||""),a&&"/"!==a[0]&&(a="/"+a)):o||(o=""),i&&"#"!==i[0]&&(i="#"+i),l&&"?"!==l[0]&&(l="?"+l),a=a.replace(/[?#]/g,encodeURIComponent),l=l.replace("#","%23"),`${n}${o}${a}${l}${i}`}(r)})(e,t),interpolateDynamicPath:(e,t)=>(function(e,t,r){if(!r)return e;for(let n of Object.keys(r.groups)){let a,{optional:i,repeat:s}=r.groups[n],o=`[${s?"...":""}${n}]`;i&&(o=`[${o}]`);let l=t[n];((a=Array.isArray(l)?l.map(e=>e&&encodeURIComponent(e)).join("/"):l?encodeURIComponent(l):"")||i)&&(e=e.replaceAll(o,a))}return e})(e,t,l),filterInternalQuery:(e,t)=>Y(e,t)}}({page:es,i18n:E,basePath:b,rewrites:w,pageIsDynamic:er,trailingSlash:process.env.__NEXT_TRAILING_SLASH,caseSensitive:!!f.caseSensitive}),el=Q(null==E?void 0:E.domains,Z(I,e.headers),c);el&&ea(e,"isLocaleDomain",!!el);let ec=en(e,"defaultLocale")||(null==el?void 0:el.defaultLocale)||(null==E?void 0:E.defaultLocale);ec&&!c&&(I.pathname=`/${ec}${"/"===I.pathname?"":I.pathname}`);let eu=en(e,"locale")||c||ec,{rewriteParams:ed,rewrittenParsedUrl:eh}=eo.handleRewrites(e,I),ef=Object.keys(ed);Object.assign(I.query,eh.query),E&&(I.pathname=v(I.pathname||"/",E.locales).pathname,eh.pathname=v(eh.pathname||"/",E.locales).pathname);let ep=en(e,"params");if(!ep&&eo.dynamicRouteMatcher){let e=eo.dynamicRouteMatcher(et((null==eh?void 0:eh.pathname)||I.pathname||"/")),t=eo.normalizeDynamicRouteParams(e||{},!0);t.hasValidParams&&(ep=t.params)}let em=en(e,"query")||{...I.query},eg=new Set,ev=[];if(this.definition.kind===te.PAGES||this.definition.kind===te.PAGES_API)for(let e of[...ef,...Object.keys(eo.defaultRouteMatches||{})]){let t=Array.isArray(L[e])?L[e].join(""):L[e],r=Array.isArray(em[e])?em[e].join(""):em[e];e in L&&t!==r||ev.push(e)}if(eo.normalizeCdnUrl(e,ev),(null==C?void 0:C.isWrappedByNextServer)?eo.filterInternalQuery(em,[]):eo.normalizeQueryParams(em,eg),eo.filterInternalQuery(L,ev),er){let t,r=eo.normalizeDynamicRouteParams(em,!0),n=eo.normalizeDynamicRouteParams(ep||{},!0);if(em&&ep&&n.hasValidParams&&r.hasValidParams&&eg.size>0&&Object.keys(n.params).length<=Object.keys(r.params).length?(t=r.params,ep=Object.assign(r.params)):t=n.hasValidParams&&ep?ep:r.hasValidParams?em:{},e.url=eo.interpolateDynamicPath(e.url||"/",t),I.pathname=eo.interpolateDynamicPath(I.pathname||"/",t),U=eo.interpolateDynamicPath(U,t),!ep)if(r.hasValidParams)for(let e in ep=Object.assign({},r.params),eo.defaultRouteMatches)delete em[e];else{let e=null==eo.dynamicRouteMatcher?void 0:eo.dynamicRouteMatcher.call(eo,et((null==l?void 0:l.pathname)||I.pathname||"/"));e&&(ep=Object.assign({},e))}}for(let e of eg)e in L?L[e]&&em[e]&&L[e]!==em[e]&&(em[e]=L[e]):delete em[e];let{isOnDemandRevalidate:ey,revalidateOnlyGenerated:eb}=(0,ee.checkIsOnDemandRevalidate)(e,p.preview),eE=!1;if(t){let{tryGetPreviewData:r}=a("./dist/esm/server/api-utils/node/try-get-preview-data.js");eE=!1!==(u=r(e,t,p.preview,!!n))}if(!O)throw Object.defineProperty(Error("Invariant: nextConfig couldn't be loaded"),"__NEXT_ERROR_CODE",{value:"E969",enumerable:!1,configurable:!0});{let{installProcessErrorHandlers:e}=a("./dist/esm/server/node-environment-extensions/process-error-handlers.js");e(!!O.experimental.removeUncaughtErrorAndRejectionListeners)}let e_=es;_(e_)&&ep&&(e_=eo.interpolateDynamicPath(e_,ep)),"/index"===e_&&(e_="/"),t&&e.headers["x-nextjs-data"]&&(!t.statusCode||200===t.statusCode)&&t.setHeader("x-nextjs-matched-path",A(`${eu?`/${eu}`:""}${es}`));let ew=e_;try{e_=e_.split("/").map(e=>{try{var t;t=decodeURIComponent(e),e=t.replace(RegExp("([/#?]|%(2f|23|3f|5c))","gi"),e=>encodeURIComponent(e))}catch(e){throw Object.defineProperty(new N.Xc("Failed to decode path param(s)."),"__NEXT_ERROR_CODE",{value:"E539",enumerable:!1,configurable:!0})}return e}).join("/")}catch(e){}if(ea(e,"resolvedPathname",e_=A(e_)),null==(s=O.experimental)?void 0:s.runtimeServerDeploymentId){if(!process.env.NEXT_DEPLOYMENT_ID)throw Object.defineProperty(Error("process.env.NEXT_DEPLOYMENT_ID is missing but runtimeServerDeploymentId is enabled"),"__NEXT_ERROR_CODE",{value:"E970",enumerable:!1,configurable:!0});d=process.env.NEXT_DEPLOYMENT_ID}else d=O.deploymentId||"";return{query:em,originalQuery:L,originalPathname:U,params:ep,parsedUrl:I,locale:eu,isNextDataRequest:M,locales:null==E?void 0:E.locales,defaultLocale:ec,isDraftMode:eE,previewData:u,pageIsDynamic:er,resolvedPathname:e_,encodedResolvedPathname:ew,isOnDemandRevalidate:ey,revalidateOnlyGenerated:eb,...h,nextConfig:O,routerServerContext:C,deploymentId:d,clientAssetToken:O.experimental.immutableAssetToken||d}}getResponseCache(e){if(!this.responseCache){let t=en(e,"minimalMode")??!1;this.responseCache=new tl(t)}return this.responseCache}async handleResponse({req:e,nextConfig:t,cacheKey:r,routeKind:n,isFallback:a,prerenderManifest:i,isRoutePPREnabled:s,isOnDemandRevalidate:o,revalidateOnlyGenerated:l,responseGenerator:c,waitUntil:u,isMinimalMode:d}){let h=this.getResponseCache(e),f=await h.get(r,c,{routeKind:n,isFallback:a,isRoutePPREnabled:s,isOnDemandRevalidate:o,isPrefetch:"prefetch"===e.headers.purpose,invocationID:e.headers["x-invocation-id"],incrementalCache:await this.getIncrementalCache(e,t,i,d),waitUntil:u});if(!f&&r&&!(o&&l))throw Object.defineProperty(Error("invariant: cache entry required but not generated"),"__NEXT_ERROR_CODE",{value:"E62",enumerable:!1,configurable:!0});return f}}var tN=a("./dist/esm/server/web/spec-extension/adapters/headers.js"),tI=a("./dist/esm/server/web/spec-extension/adapters/request-cookies.js");class tM{constructor(e,t,r,n){var a;const i=e&&(0,ee.checkIsOnDemandRevalidate)(t,e).isOnDemandRevalidate,s=null==(a=r.get(ee.COOKIE_NAME_PRERENDER_BYPASS))?void 0:a.value;this._isEnabled=!!(!i&&s&&e&&s===e.previewModeId),this._previewModeId=null==e?void 0:e.previewModeId,this._mutableCookies=n}get isEnabled(){return this._isEnabled}enable(){if(!this._previewModeId)throw Object.defineProperty(Error("Invariant: previewProps missing previewModeId this should never happen"),"__NEXT_ERROR_CODE",{value:"E93",enumerable:!1,configurable:!0});this._mutableCookies.set({name:ee.COOKIE_NAME_PRERENDER_BYPASS,value:this._previewModeId,httpOnly:!0,sameSite:"none",secure:!0,path:"/"}),this._isEnabled=!0}disable(){this._mutableCookies.set({name:ee.COOKIE_NAME_PRERENDER_BYPASS,value:"",httpOnly:!0,sameSite:"none",secure:!0,path:"/",expires:new Date(0)}),this._isEnabled=!1}}function tU(e,t){if("x-middleware-set-cookie"in e.headers&&"string"==typeof e.headers["x-middleware-set-cookie"]){let r=e.headers["x-middleware-set-cookie"],n=new Headers;for(let e of function(e){var t,r,n,a,i,s=[],o=0;function l(){for(;o=e.length)&&s.push(e.substring(t,e.length))}return s}(r))n.append("set-cookie",e);for(let e of new e1.VO(n).getAll())t.set(e)}}var tL=a("./dist/compiled/p-queue/index.js"),tH=a.n(tL);async function tF(e,t){if(!e)return t();let r=tq(e);try{return await t()}finally{var n,a;let t,i,s=(n=r,a=tq(e),t=new Set(n.pendingRevalidatedTags.map(e=>{let t="object"==typeof e.profile?JSON.stringify(e.profile):e.profile||"";return`${e.tag}:${t}`})),i=new Set(n.pendingRevalidateWrites),{pendingRevalidatedTags:a.pendingRevalidatedTags.filter(e=>{let r="object"==typeof e.profile?JSON.stringify(e.profile):e.profile||"";return!t.has(`${e.tag}:${r}`)}),pendingRevalidates:Object.fromEntries(Object.entries(a.pendingRevalidates).filter(([e])=>!(e in n.pendingRevalidates))),pendingRevalidateWrites:a.pendingRevalidateWrites.filter(e=>!i.has(e))});await tz(e,s)}}function tq(e){return{pendingRevalidatedTags:e.pendingRevalidatedTags?[...e.pendingRevalidatedTags]:[],pendingRevalidates:{...e.pendingRevalidates},pendingRevalidateWrites:e.pendingRevalidateWrites?[...e.pendingRevalidateWrites]:[]}}async function tX(e,t,r){if(0===e.length)return;let n=function(){if(tP[tx])return tP[tx].values()}(),a=[],i=new Map;for(let t of e){let e,r=t.profile;for(let[t]of i)if("string"==typeof t&&"string"==typeof r&&t===r||"object"==typeof t&&"object"==typeof r&&JSON.stringify(t)===JSON.stringify(r)||t===r){e=t;break}let n=e||r;i.has(n)||i.set(n,[]),i.get(n).push(t.tag)}for(let[e,o]of i){let i;if(e){let t;if("object"==typeof e)t=e;else if("string"==typeof e){var s;if(!(t=null==r||null==(s=r.cacheLifeProfiles)?void 0:s[e]))throw Object.defineProperty(Error(`Invalid profile provided "${e}" must be configured under cacheLife in next.config or be "max"`),"__NEXT_ERROR_CODE",{value:"E873",enumerable:!1,configurable:!0})}t&&(i={expire:t.expire})}for(let t of n||[])e?a.push(null==t.updateTags?void 0:t.updateTags.call(t,o,i)):a.push(null==t.updateTags?void 0:t.updateTags.call(t,o));t&&a.push(t.revalidateTag(o,i))}await Promise.all(a)}function tz(e,t){let r=[],n=(null==t?void 0:t.pendingRevalidatedTags)??e.pendingRevalidatedTags??[];return n.length>0&&r.push(tX(n,e.incrementalCache,e)),r.push(...Object.values((null==t?void 0:t.pendingRevalidates)??e.pendingRevalidates??{})),r.push(...(null==t?void 0:t.pendingRevalidateWrites)??e.pendingRevalidateWrites??[]),0!==r.length&&Promise.all(r).then(()=>void 0)}let tG=Object.defineProperty(Error("Invariant: AsyncLocalStorage accessed in runtime where it is not available"),"__NEXT_ERROR_CODE",{value:"E504",enumerable:!1,configurable:!0});class tB{disable(){throw tG}getStore(){}run(){throw tG}exit(){throw tG}enterWith(){throw tG}static bind(e){return e}}let tW="undefined"!=typeof globalThis&&globalThis.AsyncLocalStorage,tV=require("next/dist/server/app-render/after-task-async-storage.external.js");class tK{constructor({waitUntil:e,onClose:t,onTaskError:r}){this.workUnitStores=new Set,this.waitUntil=e,this.onClose=t,this.onTaskError=r,this.callbackQueue=new(tH()),this.callbackQueue.pause()}after(e){if(null!==e&&"object"==typeof e&&"then"in e&&"function"==typeof e.then)this.waitUntil||tJ(),this.waitUntil(e.catch(e=>this.reportTaskError("promise",e)));else if("function"==typeof e)this.addCallback(e);else throw Object.defineProperty(Error("`after()`: Argument must be a promise or a function"),"__NEXT_ERROR_CODE",{value:"E50",enumerable:!1,configurable:!0})}addCallback(e){var t;this.waitUntil||tJ();let r=tv.workUnitAsyncStorage.getStore();r&&this.workUnitStores.add(r);let n=tV.afterTaskAsyncStorage.getStore(),a=n?n.rootTaskSpawnPhase:null==r?void 0:r.phase;this.runCallbacksOnClosePromise||(this.runCallbacksOnClosePromise=this.runCallbacksOnClose(),this.waitUntil(this.runCallbacksOnClosePromise));let i=(t=async()=>{try{await tV.afterTaskAsyncStorage.run({rootTaskSpawnPhase:a},()=>e())}catch(e){this.reportTaskError("function",e)}},tW?tW.bind(t):tB.bind(t));this.callbackQueue.add(i)}async runCallbacksOnClose(){return await new Promise(e=>this.onClose(e)),this.runCallbacks()}async runCallbacks(){if(0===this.callbackQueue.size)return;for(let e of this.workUnitStores)e.phase="after";let e=ty.workAsyncStorage.getStore();if(!e)throw Object.defineProperty(new j.z("Missing workStore in AfterContext.runCallbacks"),"__NEXT_ERROR_CODE",{value:"E547",enumerable:!1,configurable:!0});return tF(e,()=>(this.callbackQueue.start(),this.callbackQueue.onIdle()))}reportTaskError(e,t){if(console.error("promise"===e?"A promise passed to `after()` rejected:":"An error occurred in a function passed to `after()`:",t),this.onTaskError)try{null==this.onTaskError||this.onTaskError.call(this,t)}catch(e){console.error(Object.defineProperty(new j.z("`onTaskError` threw while handling an error thrown from an `after` task",{cause:e}),"__NEXT_ERROR_CODE",{value:"E569",enumerable:!1,configurable:!0}))}}}function tJ(){throw Object.defineProperty(Error("`after()` will not work correctly, because `waitUntil` is not available in the current environment."),"__NEXT_ERROR_CODE",{value:"E91",enumerable:!1,configurable:!0})}function tY(e){let t,r={then:(n,a)=>(t||(t=Promise.resolve(e())),t.then(e=>{r.value=e}).catch(()=>{}),t.then(n,a))};return r}let tQ=["GET","HEAD","OPTIONS","POST","PUT","DELETE","PATCH"];function tZ(e){return tQ.includes(e)}async function t0(e,t,r){let n=new Set;for(let t of(e=>{let t=["/layout"];if(e.startsWith("/")){let r=e.split("/");for(let e=1;ea.getExpiration(e)));return t}(a)}}var t1=a("./dist/compiled/react/index.js");let t2="DYNAMIC_SERVER_USAGE";class t3 extends Error{constructor(e){super(`Dynamic server usage: ${e}`),this.description=e,this.digest=t2}}function t4(e){return"object"==typeof e&&null!==e&&"digest"in e&&"string"==typeof e.digest&&e.digest===t2}class t9 extends Error{constructor(...e){super(...e),this.code="NEXT_STATIC_GEN_BAILOUT"}}var t8=((s={})[s.Before=1]="Before",s[s.EarlyStatic=2]="EarlyStatic",s[s.Static=3]="Static",s[s.EarlyRuntime=4]="EarlyRuntime",s[s.Runtime=5]="Runtime",s[s.Dynamic=6]="Dynamic",s[s.Abandoned=7]="Abandoned",s);class t6 extends Error{constructor(e,t){super(`During prerendering, ${t} rejects when the prerender is complete. Typically these errors are handled by React but if you move ${t} to a different context by using \`setTimeout\`, \`after\`, or similar functions you may observe this error and you should handle it in that context. This occurred at route "${e}".`),this.route=e,this.expression=t,this.digest="HANGING_PROMISE_REJECTION"}}let t5=new WeakMap;function t7(e,t,r){if(e.aborted)return Promise.reject(new t6(t,r));{let n=new Promise((n,a)=>{let i=a.bind(null,new t6(t,r)),s=t5.get(e);if(s)s.push(i);else{let t=[i];t5.set(e,t),e.addEventListener("abort",()=>{for(let e=0;e\\)(?:(?!\\n\\s+at (?:body|div|main|section|article|aside|header|footer|nav|form|p|span|h1|h2|h3|h4|h5|h6) \\(\\))[\\s\\S])*?\\n\\s+at __next_root_layout_boundary__ \\([^\\n]*\\)`),RegExp(`\\n\\s+at __next_metadata_boundary__[\\n\\s]`),RegExp(`\\n\\s+at __next_viewport_boundary__[\\n\\s]`),RegExp(`\\n\\s+at __next_outlet_boundary__[\\n\\s]`),RegExp(`\\n\\s+at __next_instant_validation_boundary__[\\n\\s]`);let rl=()=>{};function rc(t){if(!t.body)return[t,t];let[r,n]=t.body.tee(),a=new Response(r,{status:t.status,statusText:t.statusText,headers:t.headers});Object.defineProperty(a,"url",{value:t.url,configurable:!0,enumerable:!0,writable:!1});let i=new Response(n,{status:t.status,statusText:t.statusText,headers:t.headers});return Object.defineProperty(i,"url",{value:t.url,configurable:!0,enumerable:!0,writable:!1}),e&&(a.body&&e.register(a,new WeakRef(a.body)),i.body&&e.register(i,new WeakRef(i.body))),[a,i]}globalThis.FinalizationRegistry&&(e=new FinalizationRegistry(e=>{let t=e.deref();t&&!t.locked&&t.cancel("Response object has been garbage collected").then(rl)}));let ru=new Set(["traceparent","tracestate"]),rd=Symbol.for("next-patch");function rh(e,t){e.shouldTrackFetchMetrics&&(e.fetchMetrics??=[],e.fetchMetrics.push({...t,end:performance.timeOrigin+performance.now(),idx:e.nextFetchId||0}))}async function rf(e,t,r,n,a,i){let s=await e.arrayBuffer(),o={headers:Object.fromEntries(e.headers.entries()),body:Buffer.from(s).toString("base64"),status:e.status,url:e.url};return r&&await n.set(t,{kind:eH.FETCH,data:o,revalidate:a},r),await i(),new Response(s,{headers:e.headers,status:e.status,statusText:e.statusText})}async function rp(e,t,r,n,a,i,s,o,l,c){let[u,d]=rc(t),h=u.arrayBuffer().then(async e=>{let t=Buffer.from(e),o={headers:Object.fromEntries(u.headers.entries()),body:t.toString("base64"),status:u.status,url:u.url};null==i||i.set(r,o),n&&await a.set(r,{kind:eH.FETCH,data:o,revalidate:s},n)}).catch(e=>{(null==c?void 0:c.aborted)||console.warn("Failed to set fetch cache",o,e)}).finally(l),f=`cache-set-${r}`,p=e.pendingRevalidates??={},m=Promise.resolve();return f in p&&(m=p[f]),p[f]=m.then(()=>h).finally(()=>{(null==p?void 0:p[f])&&delete p[f]}),d}let rm=null,rg=["HEAD","OPTIONS"];function rv(){return new Response(null,{status:405})}function ry(e){let t=tQ.reduce((t,r)=>({...t,[r]:e[r]??rv}),{}),r=new Set(tQ.filter(t=>e[t]));for(let n of rg.filter(e=>!r.has(e))){if("HEAD"===n){e.GET&&(t.HEAD=e.GET,r.add("HEAD"));continue}if("OPTIONS"===n){let e=["OPTIONS",...r];!r.has("HEAD")&&r.has("GET")&&e.push("HEAD");let n={Allow:e.sort().join(", ")};t.OPTIONS=()=>new Response(null,{status:204,headers:n}),r.add("OPTIONS");continue}throw Object.defineProperty(Error(`Invariant: should handle all automatic implementable methods, got method: ${n}`),"__NEXT_ERROR_CODE",{value:"E211",enumerable:!1,configurable:!0})}return t}a("./dist/compiled/string-hash/index.js");let rb=new Set(Object.values({NOT_FOUND:404,FORBIDDEN:403,UNAUTHORIZED:401}));function rE(e){if("object"!=typeof e||null===e||!("digest"in e)||"string"!=typeof e.digest)return!1;let[t,r]=e.digest.split(";");return"NEXT_HTTP_ERROR_FALLBACK"===t&&rb.has(Number(r))}var r_=((l={})[l.SeeOther=303]="SeeOther",l[l.TemporaryRedirect=307]="TemporaryRedirect",l[l.PermanentRedirect=308]="PermanentRedirect",l);function rw(e){if("object"!=typeof e||null===e||!("digest"in e)||"string"!=typeof e.digest)return!1;let t=e.digest.split(";"),[r,n]=t,a=t.slice(2,-2).join(";"),i=Number(t.at(-2));return"NEXT_REDIRECT"===r&&("replace"===n||"push"===n)&&"string"==typeof a&&!isNaN(i)&&i in r_}var rR=a("./dist/esm/server/app-render/instant-validation/instant-validation-error.js"),rx=((c={}).ProspectiveRender="the prospective render",c.SegmentCollection="segment collection",c.InstantValidation="instant validation",c);function rP(e,t,r){let n;if(!function(e){if("object"==typeof e&&null!==e&&"digest"in e&&"BAILOUT_TO_CLIENT_SIDE_RENDERING"===e.digest||rw(e)||rE(e)||t4(e)||"object"==typeof e&&null!==e&&e.digest===rs&&"name"in e&&"message"in e&&e instanceof Error||(0,rR.R)(e))return e.digest}(e)){if("object"==typeof e&&null!==e&&"message"in e&&"string"==typeof e.message&&e.message.startsWith("This rendered a large document (>"))return void console.error(e);if("object"==typeof e&&null!==e&&"string"==typeof e.message){if(n=e.message,"string"==typeof e.stack){let a=e.stack,i=a.indexOf("\n");if(i>-1){let e=Object.defineProperty(Error(`Route ${t} errored during ${r}. These errors are normally ignored and may not prevent the route from prerendering but are logged here because build debugging is enabled. + +Original Error: ${n}`),"__NEXT_ERROR_CODE",{value:"E949",enumerable:!1,configurable:!0});e.stack="Error: "+e.message+a.slice(i),console.error(e);return}}}else"string"==typeof e&&(n=e);if(n)return void console.error(`Route ${t} errored during ${r}. These errors are normally ignored and may not prevent the route from prerendering but are logged here because build debugging is enabled. No stack was provided. + +Original Message: ${n}`);console.error(`Route ${t} errored during ${r}. These errors are normally ignored and may not prevent the route from prerendering but are logged here because build debugging is enabled. The thrown value is logged just following this message`),console.error(e)}}var rS=a("../../app-render/action-async-storage.external");let rC=t1.createContext(null),rO=t1.createContext(null),rT=t1.createContext(null),rA=t1.createContext(null),rj=t1.createContext(new Set);var rk=a("./dist/compiled/@edge-runtime/cookies/index.js"),rD=a("./dist/esm/server/web/spec-extension/adapters/reflect.js");class r${constructor(){this.count=0,this.earlyListeners=[],this.listeners=[],this.tickPending=!1,this.pendingTimeoutCleanup=null,this.subscribedSignals=null,this.invokeListenersIfNoPendingReads=()=>{if(this.pendingTimeoutCleanup=null,0===this.count){for(let e=0;eprocess.nextTick(()=>{if(this.tickPending=!1,0===this.count){for(let e=0;e{t=clearTimeout.bind(null,setTimeout(e,0))}),t=clearImmediate.bind(null,r),()=>t())}inputReady(){return new Promise(e=>{this.earlyListeners.push(e),0===this.count&&this.noMorePendingCaches()})}cacheReady(){return new Promise(e=>{this.listeners.push(e),0===this.count&&this.noMorePendingCaches()})}beginRead(){if(this.count++,this.pendingTimeoutCleanup&&(this.pendingTimeoutCleanup(),this.pendingTimeoutCleanup=null),null!==this.subscribedSignals)for(let e of this.subscribedSignals)e.beginRead()}endRead(){if(0===this.count)throw Object.defineProperty(new j.z("CacheSignal got more endRead() calls than beginRead() calls"),"__NEXT_ERROR_CODE",{value:"E678",enumerable:!1,configurable:!0});if(this.count--,0===this.count&&this.noMorePendingCaches(),null!==this.subscribedSignals)for(let e of this.subscribedSignals)e.endRead()}hasPendingReads(){return this.count>0}trackRead(e){this.beginRead();let t=this.endRead.bind(this);return e.then(t,t),e}subscribeToReads(e){if(e===this)throw Object.defineProperty(new j.z("A CacheSignal cannot subscribe to itself"),"__NEXT_ERROR_CODE",{value:"E679",enumerable:!1,configurable:!0});null===this.subscribedSignals&&(this.subscribedSignals=new Set),this.subscribedSignals.add(e);for(let t=0;t("string"==typeof n&&(n===r||Object.prototype.hasOwnProperty.call(t,n))&&rN(e,n),Reflect.get(t,n,a)),has:(t,n)=>(n===r&&rN(e,r),Reflect.has(t,n)),ownKeys:t=>(rN(e,r),Reflect.ownKeys(t))});let n={};for(let r in t)Object.defineProperty(n,r,{get:()=>(rN(e,r),t[r]),enumerable:!0});return n}var rM=a("./dist/esm/shared/lib/utils/reflect-utils.js");let rU={current:null},rL="function"==typeof t1.cache?t1.cache:e=>e,rH=process.env.__NEXT_CACHE_COMPONENTS?console.error:console.warn;rL(e=>{try{rH(rU.current)}finally{rU.current=null}});let rF=require("next/dist/server/app-render/dynamic-access-async-storage.external.js"),rq=new WeakMap,rX={get:function(e,t,r){if("then"===t||"catch"===t||"finally"===t){let n=rD.l.get(e,t,r);return({[t]:(...t)=>{let r=rF.dynamicAccessAsyncStorage.getStore();return r&&r.abortController.abort(Object.defineProperty(Error("Accessed fallback `params` during prerendering."),"__NEXT_ERROR_CODE",{value:"E691",enumerable:!1,configurable:!0})),new Proxy(n.apply(e,t),rX)}})[t]}return rD.l.get(e,t,r)}};function rz(e){let t=rq.get(e);if(t)return t;let r=Promise.resolve(e);return rq.set(e,r),r}a("../../app-render/action-async-storage.external").actionAsyncStorage;let rG=require("next/dist/server/app-render/module-loading/track-module-loading.external.js");Symbol.for("next.server.manifests");class rB{constructor(e,t){this.error=e,this.headers=t}}class rW extends t${static #e=this.sharedModules=f;constructor({userland:e,getUserland:t,definition:r,distDir:n,relativeProjectDir:a,resolvedPagePath:i,nextConfigOutput:s}){if(super({userland:e,definition:r,distDir:n,relativeProjectDir:a}),this.workUnitAsyncStorage=tv.workUnitAsyncStorage,this.workAsyncStorage=ty.workAsyncStorage,this.serverHooks=d,this.actionAsyncStorage=rS.actionAsyncStorage,this.resolvedPagePath=i,this.nextConfigOutput=s,this._getUserland=t,this.methods=ry(e),this.hasNonStaticMethods=rK(e),this.dynamic=e.dynamic,"export"===this.nextConfigOutput)if("force-dynamic"===this.dynamic)throw Object.defineProperty(Error(`export const dynamic = "force-dynamic" on page "${r.pathname}" cannot be used with "output: export". See more info here: https://nextjs.org/docs/advanced-features/static-html-export`),"__NEXT_ERROR_CODE",{value:"E278",enumerable:!1,configurable:!0});else if(!function(e){return"force-static"===e.dynamic||"error"===e.dynamic||!1===e.revalidate||void 0!==e.revalidate&&e.revalidate>0||"function"==typeof e.generateStaticParams}(this.userland)&&this.userland.GET)throw Object.defineProperty(Error(`export const dynamic = "force-static"/export const revalidate not configured on route "${r.pathname}" with "output: export". See more info here: https://nextjs.org/docs/advanced-features/static-html-export`),"__NEXT_ERROR_CODE",{value:"E301",enumerable:!1,configurable:!0});else this.dynamic="error"}resolve(e){return tZ(e)?ry(this.userland)[e]:()=>new Response(null,{status:400})}async resolveWithGetter(e,t){return tZ(e)?ry(await t())[e]:()=>new Response(null,{status:400})}async do(e,t,r,n,a,i,s){var o,l,c,u;let d,h=r.isStaticGeneration,f=!!s.renderOpts.cacheComponents;!function(e){var t;let r;if(!0===globalThis[rd])return;let n=(t=globalThis.fetch,r=t1.cache(e=>[]),function(e,n){let a,i;if(n&&n.signal)return t(e,n);if("string"!=typeof e||n){let r,s="string"==typeof e||e instanceof URL?new Request(e,n):e;if("GET"!==s.method&&"HEAD"!==s.method||s.keepalive)return t(e,n);r=Array.from(s.headers.entries()).filter(([e])=>!ru.has(e.toLowerCase())),i=JSON.stringify([s.method,r,s.mode,s.redirect,s.credentials,s.referrer,s.referrerPolicy,s.integrity]),a=s.url}else i='["GET",[],null,"follow",null,null,null,null]',a=e;let s=r(a);for(let e=0,t=s.length;e{let t=s[e][2];if(!t)throw Object.defineProperty(new j.z("No cached response"),"__NEXT_ERROR_CODE",{value:"E579",enumerable:!1,configurable:!0});let[r,n]=rc(t);return s[e][2]=n,r})}let o=t(e,n),l=[i,o,null];return s.push(l),o.then(e=>{let[t,r]=rc(e);return l[2]=r,t})});globalThis.fetch=function(e,{workAsyncStorage:t,workUnitAsyncStorage:r}){let n=async function(n,a){var i,s;let o;try{(o=new URL(n instanceof Request?n.url:n)).username="",o.password=""}catch{o=void 0}let l=(null==o?void 0:o.href)??"",c=(null==a||null==(i=a.method)?void 0:i.toUpperCase())||"GET",u=(null==a||null==(s=a.next)?void 0:s.internal)===!0,d="1"===process.env.NEXT_OTEL_FETCH_DISABLED,h=u?void 0:performance.timeOrigin+performance.now(),f=t.getStore(),p=r.getStore(),m=p?(0,tv.getCacheSignal)(p):null;m&&m.beginRead();let g=(0,eq.getTracer)().trace(u?eX.Fx.internalFetch:eX.Wc.fetch,{hideSpan:d,kind:eq.SpanKind.CLIENT,spanName:["fetch",c,l].filter(Boolean).join(" "),attributes:{"http.url":l,"http.method":c,"net.peer.name":null==o?void 0:o.hostname,"net.peer.port":(null==o?void 0:o.port)||void 0}},async()=>{var t;let r,i,s,o,c,d;if(u||!f||f.isDraftMode)return e(n,a);let g=n&&"object"==typeof n&&"string"==typeof n.method,v=e=>(null==a?void 0:a[e])||(g?n[e]:null),y=e=>{var t,r,i;return void 0!==(null==a||null==(t=a.next)?void 0:t[e])?null==a||null==(r=a.next)?void 0:r[e]:g?null==(i=n.next)?void 0:i[e]:void 0},b=y("revalidate"),E=b,_=function(e,t){let r=[],n=[];for(let a=0;aS.qq?n.push({tag:i,reason:`exceeded max length of ${S.qq}`}):r.push(i),r.length>S.o7){console.warn(`Warning: exceeded max tag count for ${t}, dropped tags:`,e.slice(a).join(", "));break}}if(n.length>0)for(let{tag:e,reason:r}of(console.warn(`Warning: invalid tags passed to ${t}: `),n))console.log(`tag: "${e}" ${r}`);return r}(y("tags")||[],`fetch ${n.toString()}`);if(p)switch(p.type){case"prerender":case"prerender-runtime":case"prerender-client":case"validation-client":case"prerender-ppr":case"prerender-legacy":case"cache":case"private-cache":r=p}if(r&&Array.isArray(_)){let e=r.tags??(r.tags=[]);for(let t of _)e.includes(t)||e.push(t)}let w=null==p?void 0:p.implicitTags,R=f.fetchCache;p&&"unstable-cache"===p.type&&(R="force-no-store");let x=!!f.isUnstableNoStore,P=v("cache"),C="";"string"==typeof P&&void 0!==E&&("force-cache"===P&&0===E||"no-store"===P&&(E>0||!1===E))&&(i=`Specified "cache: ${P}" and "revalidate: ${E}", only one should be specified.`,P=void 0,E=void 0);let O="no-cache"===P||"no-store"===P||"force-no-store"===R||"only-no-store"===R,T=!R&&!P&&!E&&f.forceDynamic;"force-cache"===P&&void 0===E?E=!1:(O||T)&&(E=0),("no-cache"===P||"no-store"===P)&&(C=`cache: ${P}`),d=function(e,t){try{let r;if(!1===e)r=S.AR;else if("number"==typeof e&&!isNaN(e)&&e>-1)r=e;else if(void 0!==e)throw Object.defineProperty(Error(`Invalid revalidate value "${e}" on "${t}", must be a non-negative number or false`),"__NEXT_ERROR_CODE",{value:"E179",enumerable:!1,configurable:!0});return r}catch(e){if(e instanceof Error&&e.message.includes("Invalid revalidate"))throw e;return}}(E,f.route);let A=v("headers"),j="function"==typeof(null==A?void 0:A.get)?A:new Headers(A||{}),k=j.get("authorization")||j.get("cookie"),D=!["get","head"].includes((null==(t=v("method"))?void 0:t.toLowerCase())||"get"),$=void 0==R&&(void 0==P||"default"===P)&&void 0==E,N=!!((k||D)&&(null==r?void 0:r.revalidate)===0),I=!1;if(!N&&$&&(f.isBuildTimePrerendering?I=!0:N=!0),$&&void 0!==p)switch(p.type){case"prerender":case"prerender-runtime":case"prerender-client":return m&&(m.endRead(),m=null),t7(p.renderSignal,f.route,"fetch()")}switch(R){case"force-no-store":C="fetchCache = force-no-store";break;case"only-no-store":if("force-cache"===P||void 0!==d&&d>0)throw Object.defineProperty(Error(`cache: 'force-cache' used on fetch for ${l} with 'export const fetchCache = 'only-no-store'`),"__NEXT_ERROR_CODE",{value:"E448",enumerable:!1,configurable:!0});C="fetchCache = only-no-store";break;case"only-cache":if("no-store"===P)throw Object.defineProperty(Error(`cache: 'no-store' used on fetch for ${l} with 'export const fetchCache = 'only-cache'`),"__NEXT_ERROR_CODE",{value:"E521",enumerable:!1,configurable:!0});break;case"force-cache":(void 0===E||0===E)&&(C="fetchCache = force-cache",d=S.AR)}if(void 0===d?"default-cache"!==R||x?"default-no-store"===R?(d=0,C="fetchCache = default-no-store"):x?(d=0,C="noStore call"):N?(d=0,C="auto no cache"):(C="auto cache",d=r?r.revalidate:S.AR):(d=S.AR,C="fetchCache = default-cache"):C||(C=`revalidate: ${d}`),!(f.forceStatic&&0===d)&&!N&&r&&d0,{incrementalCache:U}=f,L=!1;if(p)switch(p.type){case"request":case"cache":case"private-cache":L=p.isHmrRefresh??!1,o=p.serverComponentsHmrCache}if(U&&(M||o))try{s=await U.generateCacheKey(l,g?n:a)}catch(e){console.error("Failed to generate cache key for",n)}let H=f.nextFetchId??1;f.nextFetchId=H+1;let F=()=>{},q=async(t,r)=>{let c=["cache","credentials","headers","integrity","keepalive","method","mode","redirect","referrer","referrerPolicy","window","duplex",...t?[]:["signal"]];if(g){let e=n,t={body:e._ogBody||e.body};for(let r of c)t[r]=e[r];n=new Request(e.url,t)}else if(a){let{_ogBody:e,body:r,signal:n,...i}=a;a={...i,body:e||r,signal:t?void 0:n}}let u={...a,next:{...null==a?void 0:a.next,fetchType:"origin",fetchIdx:H}};return e(n,u).then(async e=>{if(!t&&h&&rh(f,{start:h,url:l,cacheReason:r||C,cacheStatus:0===d||r?"skip":"miss",cacheWarning:i,status:e.status,method:u.method||"GET"}),200===e.status&&U&&s&&(M||o)){let t=d>=S.AR?S.eM:d,r=M?{fetchCache:!0,fetchUrl:l,fetchIdx:H,tags:_,isImplicitBuildTimeCache:I}:void 0;switch(null==p?void 0:p.type){case"prerender":case"prerender-client":case"validation-client":case"prerender-runtime":return rf(e,s,r,U,t,F);case"request":case"prerender-ppr":case"prerender-legacy":case"cache":case"private-cache":case"unstable-cache":case"generate-static-params":case void 0:return rp(f,e,s,r,U,o,t,n,F,v("signal"))}}return await F(),e}).catch(e=>{throw F(),e})},X=!1,z=!1;if(s&&U){let e;if(L&&o&&(e=o.get(s),z=!0),M&&!e){F=await U.lock(s);let t=f.isOnDemandRevalidate?null:await U.get(s,{kind:eF.FETCH,revalidate:d,fetchUrl:l,fetchIdx:H,tags:_,softTags:null==w?void 0:w.tags});if($&&p)switch(p.type){case"prerender":case"prerender-client":case"validation-client":case"prerender-runtime":await (rm||(rm=new Promise(e=>{setTimeout(()=>{rm=null,e()},0)})),rm)}if(t?await F():c="cache-control: no-cache (hard refresh)",(null==t?void 0:t.value)&&t.value.kind===eH.FETCH)if(f.isStaticGeneration&&t.isStale)X=!0;else{if(t.isStale&&(f.pendingRevalidates??={},!f.pendingRevalidates[s])){let e=q(!0).then(async e=>({body:await e.arrayBuffer(),headers:e.headers,status:e.status,statusText:e.statusText})).finally(()=>{f.pendingRevalidates??={},delete f.pendingRevalidates[s||""]});e.catch(console.error),f.pendingRevalidates[s]=e}e=t.value.data}}if(e){h&&rh(f,{start:h,url:l,cacheReason:C,cacheStatus:z?"hmr":"hit",cacheWarning:i,status:e.status||200,method:(null==a?void 0:a.method)||"GET"});let t=new Response(Buffer.from(e.body,"base64"),{headers:e.headers,status:e.status});return Object.defineProperty(t,"url",{value:e.url}),t}}if(f.isStaticGeneration&&a&&"object"==typeof a){let{cache:e}=a;if("no-store"===e){if(p)switch(p.type){case"prerender":case"prerender-client":case"prerender-runtime":case"validation-client":return m&&(m.endRead(),m=null),t7(p.renderSignal,f.route,"fetch()")}rn(f,p,`no-store fetch ${n} ${f.route}`)}let t="next"in a,{next:i={}}=a;if("number"==typeof i.revalidate&&r&&i.revalidate{let t=e[0];return{body:await t.arrayBuffer(),headers:t.headers,status:t.status,statusText:t.statusText}}).finally(()=>{var t;(null==(t=f.pendingRevalidates)?void 0:t[e])&&delete f.pendingRevalidates[e]})).catch(()=>{}),f.pendingRevalidates[e]=t,r.then(e=>e[1])}});if(m)try{return await g}finally{m&&m.endRead()}return g};return n.__nextPatched=!0,n.__nextGetStaticStore=()=>t,n._nextOriginalFetch=e,globalThis[rd]=!0,Object.defineProperty(n,"name",{value:"fetch",writable:!1}),n}(n,e)}({workAsyncStorage:this.workAsyncStorage,workUnitAsyncStorage:this.workUnitAsyncStorage});let p={params:s.params?function(e,t=null){let r=ty.workAsyncStorage.getStore();if(!r)throw Object.defineProperty(new j.z("Expected workStore to be initialized"),"__NEXT_ERROR_CODE",{value:"E1068",enumerable:!1,configurable:!0});let n=tv.workUnitAsyncStorage.getStore();if(n)switch(n.type){case"prerender":case"prerender-ppr":case"prerender-legacy":var a=e,i=r,s=n,o=t;let l=null!==o?rI(o,a,null):a;switch(s.type){case"prerender":case"prerender-client":{let e=s.fallbackRouteParams;if(e){for(let t in a)if(e.has(t))return function(e,t,r){let n=rq.get(e);if(n)return n;let a=new Proxy(t7(r.renderSignal,t.route,"`params`"),rX);return rq.set(e,a),a}(l,i,s)}break}case"prerender-ppr":{let e=s.fallbackRouteParams;if(e){for(let t in a)if(e.has(t))return function(e,t,r,n){let a=rq.get(e);if(a)return a;let i={...e},s=Promise.resolve(i);return rq.set(e,s),Object.keys(e).forEach(e=>{rM.lY.has(e)||t.has(e)&&Object.defineProperty(i,e,{get(){let t=(0,rM.ke)("params",e);if("prerender-ppr"===n.type)ra(r.route,t,n.dynamicTracking);else{let e=Object.defineProperty(new t3(`Route ${r.route} couldn't be rendered statically because it used \`${t}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`),"__NEXT_ERROR_CODE",{value:"E558",enumerable:!1,configurable:!0});throw n.revalidate=0,r.dynamicUsageDescription=t,r.dynamicUsageStack=e.stack,e}},enumerable:!0})}),s}(l,e,i,s)}}}return rz(l);case"prerender-client":case"validation-client":throw Object.defineProperty(new j.z("createServerParamsForRoute should not be called in client contexts."),"__NEXT_ERROR_CODE",{value:"E1064",enumerable:!1,configurable:!0});case"cache":case"private-cache":case"unstable-cache":throw Object.defineProperty(new j.z("createServerParamsForRoute should not be called in cache contexts."),"__NEXT_ERROR_CODE",{value:"E738",enumerable:!1,configurable:!0});case"generate-static-params":throw Object.defineProperty(new j.z("createServerParamsForRoute should not be called inside generateStaticParams."),"__NEXT_ERROR_CODE",{value:"E1131",enumerable:!1,configurable:!0});case"prerender-runtime":return function(e,t,r,n,a){let i=rz(null!==n?rI(n,e,null):e),{stagedRendering:s}=r;if(!s)return i;let o=a?t8.EarlyRuntime:t8.Runtime;return s.waitForStage(o).then(()=>i)}(e,null,n,t,!1);case"request":return rz(e)}(0,tv.throwInvariantForMissingStore)()}(function(e){let t={};for(let[r,n]of Object.entries(e))void 0!==n&&(t[r]=n);return t}(s.params)):void 0},m=()=>{let e=tz(r);!1!==e&&(s.renderOpts.pendingWaitUntil=e.finally(()=>{process.env.NEXT_PRIVATE_DEBUG_CACHE&&console.log("pending revalidates promise finished for:",n.url.pathname+n.url.search)}))},g=null;try{if(h){let t=this.userland.revalidate,n=!1===t||void 0===t?S.AR:t;if(f){let t,s=new AbortController,o=!1,l=new r$,h=rr(void 0),f={cache:new Map,fetch:new Map,encryptedBoundArgs:new Map,decryptedBoundArgs:new Map},m=g={type:"prerender",phase:"action",rootParams:{},fallbackRouteParams:null,implicitTags:a,renderSignal:s.signal,controller:s,cacheSignal:l,dynamicTracking:h,allowEmptyStaticShell:!1,revalidate:n,expire:S.AR,stale:S.AR,tags:[...a.tags],prerenderResumeDataCache:f,renderResumeDataCache:null,hmrRefreshHash:void 0,varyParamsAccumulator:null};try{t=this.workUnitAsyncStorage.run(m,e,i,p)}catch(e){s.signal.aborted?o=!0:(process.env.NEXT_DEBUG_BUILD||process.env.__NEXT_VERBOSE_LOGGING)&&rP(e,r.route,rx.ProspectiveRender)}if("object"==typeof t&&null!==t&&"function"==typeof t.then&&t.then(()=>{},e=>{s.signal.aborted?o=!0:process.env.NEXT_DEBUG_BUILD&&rP(e,r.route,rx.ProspectiveRender)}),(0,rG.trackPendingModules)(l),await l.cacheReady(),o){let e=(c=h,null==(u=c.dynamicAccesses[0])?void 0:u.expression);if(e)throw Object.defineProperty(new t3(`Route ${r.route} couldn't be rendered statically because it used \`${e}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`),"__NEXT_ERROR_CODE",{value:"E558",enumerable:!1,configurable:!0});throw console.error("Expected Next.js to keep track of reason for opting out of static rendering but one was not found. This is a bug in Next.js"),Object.defineProperty(new t3(`Route ${r.route} couldn't be rendered statically because it used a dynamic API. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`),"__NEXT_ERROR_CODE",{value:"E577",enumerable:!1,configurable:!0})}let v=new AbortController;h=rr(void 0);let y=g={type:"prerender",phase:"action",rootParams:{},fallbackRouteParams:null,implicitTags:a,renderSignal:v.signal,controller:v,cacheSignal:null,dynamicTracking:h,allowEmptyStaticShell:!1,revalidate:n,expire:S.AR,stale:S.AR,tags:[...a.tags],prerenderResumeDataCache:f,renderResumeDataCache:null,hmrRefreshHash:void 0,varyParamsAccumulator:null},b=!1;if(d=await new Promise((t,n)=>{eL(async()=>{try{let a=await this.workUnitAsyncStorage.run(y,e,i,p);if(b)return;if(!(a instanceof Response))return void t(a);b=!0;let s=!1;a.arrayBuffer().then(e=>{s||(s=!0,t(new Response(e,{headers:a.headers,status:a.status,statusText:a.statusText})))},n),eL(()=>{s||(s=!0,v.abort(),n(r5(r.route)))})}catch(e){n(e)}}),eL(()=>{b||(b=!0,v.abort(),n(r5(r.route)))})}),v.signal.aborted)throw r5(r.route);v.abort()}else g={type:"prerender-legacy",phase:"action",rootParams:{},implicitTags:a,revalidate:n,expire:S.AR,stale:S.AR,tags:[...a.tags]},d=await tv.workUnitAsyncStorage.run(g,e,i,p)}else d=await tv.workUnitAsyncStorage.run(n,e,i,p)}catch(e){if(rw(e)){let r=rw(e)?e.digest.split(";").slice(2,-2).join(";"):null;if(!r)throw Object.defineProperty(Error("Invariant: Unexpected redirect url format"),"__NEXT_ERROR_CODE",{value:"E399",enumerable:!1,configurable:!0});let a=new Headers({Location:r});return(0,tI.IN)(a,n.mutableCookies),m(),new Response(null,{status:t.isAction?r_.SeeOther:function(e){if(!rw(e))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return Number(e.digest.split(";").at(-2))}(e),headers:a})}if(rE(e))return new Response(null,{status:Number(e.digest.split(";")[1])});throw e}if(!(d instanceof Response)){let e=null===d?"null":void 0===d?"undefined":"object"==typeof d?(null==(o=d.constructor)?void 0:o.name)||"object":typeof d;throw Object.defineProperty(Error(`No response is returned from route handler '${this.resolvedPagePath}'. Expected a Response object but received '${e}' (method: ${i.method}, url: ${n.url.pathname}). Ensure you return a \`Response\` or a \`NextResponse\` in all branches of your handler.`),"__NEXT_ERROR_CODE",{value:"E985",enumerable:!1,configurable:!0})}s.renderOpts.fetchMetrics=r.fetchMetrics,m(),g&&(s.renderOpts.collectedTags=null==(l=g.tags)?void 0:l.join(","),s.renderOpts.collectedRevalidate=g.revalidate,s.renderOpts.collectedExpire=g.expire,s.renderOpts.collectedStale=g.stale);let v=new Headers(d.headers);return(0,tI.IN)(v,n.mutableCookies)?new Response(d.body,{status:d.status,statusText:d.statusText,headers:v}):d}async handle(e,t){var r;let n,a,i,s,o,l=this._getUserland?await this.resolveWithGetter(e.method,this._getUserland):this.resolve(e.method),c={page:this.definition.page,renderOpts:t.renderOpts,buildId:t.sharedContext.buildId,deploymentId:t.sharedContext.deploymentId,previouslyRevalidatedTags:[]};c.renderOpts.fetchCache=this.userland.fetchCache;let u={isAppRoute:!0,isAction:(e.headers instanceof Headers?(n=e.headers.get(tA)??null,a=e.headers.get("content-type")):(n=e.headers[tA]??null,a=e.headers["content-type"]??null),i="POST"===e.method&&"application/x-www-form-urlencoded"===a,s=!!("POST"===e.method&&(null==a?void 0:a.startsWith("multipart/form-data"))),o=void 0!==n&&"string"==typeof n&&"POST"===e.method,{actionId:n,isURLEncodedAction:i,isMultipartAction:s,isFetchAction:o,isPossibleServerAction:!!(o||i||s)}).isPossibleServerAction},d=await t0(this.definition.page,e.nextUrl.pathname,null),h=(r=e.nextUrl,function(e,t,r,n,a,i,s,o,l,c,u,d){function h(e){r&&r.setHeader("Set-Cookie",e)}let f={};return{type:"request",phase:e,implicitTags:i,url:{pathname:n.pathname,search:n.search??""},rootParams:a,get headers(){return f.headers||(f.headers=function(e){let t=tN.o.from(e);for(let e of tj)t.delete(e);return tN.o.seal(t)}(t.headers)),f.headers},get cookies(){if(!f.cookies){let e=new e1.tm(tN.o.from(t.headers));tU(t,e),f.cookies=tI.Ck.seal(e)}return f.cookies},set cookies(value){f.cookies=value},get mutableCookies(){if(!f.mutableCookies){var p,m;let e,n=(p=t.headers,m=s||(r?h:void 0),e=new e1.tm(tN.o.from(p)),tI.K8.wrap(e,m));tU(t,n),f.mutableCookies=n}return f.mutableCookies},get userspaceMutableCookies(){return f.userspaceMutableCookies||(f.userspaceMutableCookies=(0,tI.EJ)(this)),f.userspaceMutableCookies},get draftMode(){return f.draftMode||(f.draftMode=new tM(l,t,this.cookies,this.mutableCookies)),f.draftMode},renderResumeDataCache:null,isHmrRefresh:c,serverComponentsHmrCache:u||globalThis.__serverComponentsHmrCache,fallbackParams:null}}("action",e,void 0,r,{},d,void 0,null,t.previewProps,!1,void 0,null)),f=function({page:e,renderOpts:t,isPrefetchRequest:r,buildId:n,deploymentId:a,previouslyRevalidatedTags:i,nonce:s}){let o=!t.shouldWaitOnAllReady&&!t.supportsDynamicResponse&&!t.isDraftMode&&!t.isPossibleServerAction,l=o&&(!!process.env.NEXT_DEBUG_BUILD||"1"===process.env.NEXT_SSG_FETCH_METRICS),c={isStaticGeneration:o,page:e,route:(0,W.Yr)(e),incrementalCache:t.incrementalCache||globalThis.__incrementalCache,cacheLifeProfiles:t.cacheLifeProfiles,isBuildTimePrerendering:t.isBuildTimePrerendering,fetchCache:t.fetchCache,isOnDemandRevalidate:t.isOnDemandRevalidate,isDraftMode:t.isDraftMode,isPrefetchRequest:r,buildId:n,deploymentId:a,reactLoadableManifest:(null==t?void 0:t.reactLoadableManifest)||{},assetPrefix:(null==t?void 0:t.assetPrefix)||"",nonce:s,afterContext:function(e){let{waitUntil:t,onClose:r,onAfterTaskError:n}=e;return new tK({waitUntil:t,onClose:r,onTaskError:n})}(t),cacheComponentsEnabled:t.cacheComponents,previouslyRevalidatedTags:i,refreshTagsByCacheKind:function(){let e=new Map,t=tS();if(t)for(let[r,n]of t)"refreshTags"in n&&e.set(r,tY(async()=>n.refreshTags()));return e}(),runInCleanSnapshot:tW?tW.snapshot():function(e,...t){return e(...t)},shouldTrackFetchMetrics:l,reactServerErrorsByDigest:new Map};return t.store=c,c}(c),p=await this.actionAsyncStorage.run(u,()=>this.workUnitAsyncStorage.run(h,()=>this.workAsyncStorage.run(f,async()=>{if(rK(this.userland)&&f.isStaticGeneration){let e=Object.defineProperty(new t3("Route is configured with methods that cannot be statically generated."),"__NEXT_ERROR_CODE",{value:"E582",enumerable:!1,configurable:!0});throw f.dynamicUsageDescription=e.message,f.dynamicUsageStack=e.stack,e}let r=e,{dynamic:n}=this.userland;switch(n){case"force-dynamic":if(f.forceDynamic=!0,f.isStaticGeneration){let e=Object.defineProperty(new t3("Route is configured with dynamic = error which cannot be statically generated."),"__NEXT_ERROR_CODE",{value:"E703",enumerable:!1,configurable:!0});throw f.dynamicUsageDescription=e.message,f.dynamicUsageStack=e.stack,e}break;case"force-static":f.forceStatic=!0,r=new Proxy(e,r4);break;case"error":f.dynamicShouldError=!0,f.isStaticGeneration&&(r=new Proxy(e,r8));break;case void 0:case"auto":var a,i;let s,o;a=e,i=f,s={get(e,t,r){switch(t){case"search":case"searchParams":case"url":case"href":case"toJSON":case"toString":case"origin":return r7(i,tv.workUnitAsyncStorage.getStore(),`nextUrl.${t}`),rD.l.get(e,t,r);case"clone":return e[rQ]||(e[rQ]=()=>new Proxy(e.clone(),s));default:return rD.l.get(e,t,r)}}},o={get(e,t){switch(t){case"nextUrl":return e[rJ]||(e[rJ]=new Proxy(e.nextUrl,s));case"headers":case"cookies":case"url":case"body":case"blob":case"json":case"text":case"arrayBuffer":case"formData":return r7(i,tv.workUnitAsyncStorage.getStore(),`request.${t}`),rD.l.get(e,t,e);case"clone":return e[rY]||(e[rY]=()=>new Proxy(e.clone(),o));default:return rD.l.get(e,t,e)}}},r=new Proxy(a,o)}let c=(0,eq.getTracer)(),{pathname:p}=this.definition;return c.setRootSpanAttribute("next.route",p),c.trace(eX.jM.runHandler,{spanName:`executing api route (app) ${p}`,attributes:{"next.route":p}},async()=>this.do(l,u,f,h,d,r,t))})));if(!(p instanceof Response))return new Response(null,{status:500});if(p.headers.has("x-middleware-rewrite"))throw Object.defineProperty(Error("NextResponse.rewrite() was used in a app route handler, this is not currently supported. Please remove the invocation to continue."),"__NEXT_ERROR_CODE",{value:"E374",enumerable:!1,configurable:!0});if("1"===p.headers.get("x-middleware-next"))throw Object.defineProperty(Error("NextResponse.next() was used in a app route handler, this is not supported. See here for more info: https://nextjs.org/docs/messages/next-response-next-in-app-route-handler"),"__NEXT_ERROR_CODE",{value:"E385",enumerable:!1,configurable:!0});return p}}let rV=rW;function rK(e){return!!e.POST||!!e.PUT||!!e.DELETE||!!e.PATCH||!!e.OPTIONS}let rJ=Symbol("nextUrl"),rY=Symbol("clone"),rQ=Symbol("clone"),rZ=Symbol("searchParams"),r0=Symbol("href"),r1=Symbol("toString"),r2=Symbol("headers"),r3=Symbol("cookies"),r4={get(e,t,r){switch(t){case"headers":return e[r2]||(e[r2]=tN.o.seal(new Headers({})));case"cookies":return e[r3]||(e[r3]=tI.Ck.seal(new rk.RequestCookies(new Headers({}))));case"nextUrl":return e[rJ]||(e[rJ]=new Proxy(e.nextUrl,r9));case"url":return r.nextUrl.href;case"geo":case"ip":return;case"clone":return e[rY]||(e[rY]=()=>new Proxy(e.clone(),r4));default:return rD.l.get(e,t,r)}}},r9={get(e,t,r){switch(t){case"search":return"";case"searchParams":return e[rZ]||(e[rZ]=new URLSearchParams);case"href":let n;return e[r0]||(e[r0]=((n=new URL(e.href)).host="localhost:3000",n.search="",n.protocol="http",n).href);case"toJSON":case"toString":return e[r1]||(e[r1]=()=>r.href);case"url":return;case"clone":return e[rQ]||(e[rQ]=()=>new Proxy(e.clone(),r9));default:return rD.l.get(e,t,r)}}},r8={get(e,t,r){switch(t){case"nextUrl":return e[rJ]||(e[rJ]=new Proxy(e.nextUrl,r6));case"headers":case"cookies":case"url":case"body":case"blob":case"json":case"text":case"arrayBuffer":case"formData":throw Object.defineProperty(new t9(`Route ${e.nextUrl.pathname} with \`dynamic = "error"\` couldn't be rendered statically because it used \`request.${t}\`.`),"__NEXT_ERROR_CODE",{value:"E611",enumerable:!1,configurable:!0});case"clone":return e[rY]||(e[rY]=()=>new Proxy(e.clone(),r8));default:return rD.l.get(e,t,r)}}},r6={get(e,t,r){switch(t){case"search":case"searchParams":case"url":case"href":case"toJSON":case"toString":case"origin":throw Object.defineProperty(new t9(`Route ${e.pathname} with \`dynamic = "error"\` couldn't be rendered statically because it used \`nextUrl.${t}\`.`),"__NEXT_ERROR_CODE",{value:"E575",enumerable:!1,configurable:!0});case"clone":return e[rQ]||(e[rQ]=()=>new Proxy(e.clone(),r6));default:return rD.l.get(e,t,r)}}};function r5(e){return Object.defineProperty(new t3(`Route ${e} couldn't be rendered statically because it used IO that was not cached. See more info here: https://nextjs.org/docs/messages/cache-components`),"__NEXT_ERROR_CODE",{value:"E727",enumerable:!1,configurable:!0})}function r7(e,t,r){if(e.dynamicShouldError)throw Object.defineProperty(new t9(`Route ${e.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`${r}\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E553",enumerable:!1,configurable:!0});if(t)switch(t.type){case"cache":case"private-cache":throw Object.defineProperty(Error(`Route ${e.route} used "${r}" inside "use cache". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use "${r}" outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E178",enumerable:!1,configurable:!0});case"unstable-cache":throw Object.defineProperty(Error(`Route ${e.route} used "${r}" inside a function cached with "unstable_cache(...)". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use "${r}" outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`),"__NEXT_ERROR_CODE",{value:"E133",enumerable:!1,configurable:!0});case"prerender":let n=Object.defineProperty(Error(`Route ${e.route} used ${r} without first calling \`await connection()\`. See more info here: https://nextjs.org/docs/messages/next-prerender-sync-request`),"__NEXT_ERROR_CODE",{value:"E261",enumerable:!1,configurable:!0});return function(e,t,r,n){if(!1===n.controller.signal.aborted){let a,i;a=ro(`Route ${e} needs to bail out of prerendering at this point because it used ${t}.`),n.controller.abort(a),(i=n.dynamicTracking)&&i.dynamicAccesses.push({stack:i.isDebugDynamicAccesses?Error().stack:void 0,expression:t});let s=n.dynamicTracking;s&&null===s.syncDynamicErrorWithStack&&(s.syncDynamicErrorWithStack=r)}throw ro(`Route ${e} needs to bail out of prerendering at this point because it used ${t}.`)}(e.route,r,n,t);case"prerender-client":case"validation-client":throw Object.defineProperty(new j.z("A client prerender store should not be used for a route handler."),"__NEXT_ERROR_CODE",{value:"E720",enumerable:!1,configurable:!0});case"prerender-runtime":throw Object.defineProperty(new j.z("A runtime prerender store should not be used for a route handler."),"__NEXT_ERROR_CODE",{value:"E767",enumerable:!1,configurable:!0});case"prerender-ppr":return ra(e.route,r,t.dynamicTracking);case"prerender-legacy":t.revalidate=0;let a=Object.defineProperty(new t3(`Route ${e.route} couldn't be rendered statically because it used \`${r}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`),"__NEXT_ERROR_CODE",{value:"E558",enumerable:!1,configurable:!0});throw e.dynamicUsageDescription=r,e.dynamicUsageStack=a.stack,a}}})(),module.exports=i})(); +//# sourceMappingURL=app-route-turbo.runtime.prod.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js b/build/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js new file mode 100644 index 0000000..d6d301f --- /dev/null +++ b/build/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js @@ -0,0 +1,20 @@ +(()=>{var e,t,r={"./dist/compiled/@edge-runtime/cookies/index.js"(e){"use strict";var t=Object.defineProperty,r=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,n=Object.prototype.hasOwnProperty,i={},s={RequestCookies:()=>p,ResponseCookies:()=>f,parseCookie:()=>c,parseSetCookie:()=>u,stringifyCookie:()=>l};for(var o in s)t(i,o,{get:s[o],enumerable:!0});function l(e){var t;let r=["path"in e&&e.path&&`Path=${e.path}`,"expires"in e&&(e.expires||0===e.expires)&&`Expires=${("number"==typeof e.expires?new Date(e.expires):e.expires).toUTCString()}`,"maxAge"in e&&"number"==typeof e.maxAge&&`Max-Age=${e.maxAge}`,"domain"in e&&e.domain&&`Domain=${e.domain}`,"secure"in e&&e.secure&&"Secure","httpOnly"in e&&e.httpOnly&&"HttpOnly","sameSite"in e&&e.sameSite&&`SameSite=${e.sameSite}`,"partitioned"in e&&e.partitioned&&"Partitioned","priority"in e&&e.priority&&`Priority=${e.priority}`].filter(Boolean),a=`${e.name}=${encodeURIComponent(null!=(t=e.value)?t:"")}`;return 0===r.length?a:`${a}; ${r.join("; ")}`}function c(e){let t=new Map;for(let r of e.split(/; */)){if(!r)continue;let e=r.indexOf("=");if(-1===e){t.set(r,"true");continue}let[a,n]=[r.slice(0,e),r.slice(e+1)];try{t.set(a,decodeURIComponent(null!=n?n:"true"))}catch{}}return t}function u(e){if(!e)return;let[[t,r],...a]=c(e),{domain:n,expires:i,httponly:s,maxage:o,path:l,samesite:u,secure:p,partitioned:f,priority:m}=Object.fromEntries(a.map(([e,t])=>[e.toLowerCase().replace(/-/g,""),t]));{var g,v,y={name:t,value:decodeURIComponent(r),domain:n,...i&&{expires:new Date(i)},...s&&{httpOnly:!0},..."string"==typeof o&&{maxAge:Number(o)},path:l,...u&&{sameSite:d.includes(g=(g=u).toLowerCase())?g:void 0},...p&&{secure:!0},...m&&{priority:h.includes(v=(v=m).toLowerCase())?v:void 0},...f&&{partitioned:!0}};let e={};for(let t in y)y[t]&&(e[t]=y[t]);return e}}e.exports=((e,i,s,o)=>{if(i&&"object"==typeof i||"function"==typeof i)for(let s of a(i))n.call(e,s)||void 0===s||t(e,s,{get:()=>i[s],enumerable:!(o=r(i,s))||o.enumerable});return e})(t({},"__esModule",{value:!0}),i);var d=["strict","lax","none"],h=["low","medium","high"],p=class{constructor(e){this._parsed=new Map,this._headers=e;const t=e.get("cookie");if(t)for(const[e,r]of c(t))this._parsed.set(e,{name:e,value:r})}[Symbol.iterator](){return this._parsed[Symbol.iterator]()}get size(){return this._parsed.size}get(...e){let t="string"==typeof e[0]?e[0]:e[0].name;return this._parsed.get(t)}getAll(...e){var t;let r=Array.from(this._parsed);if(!e.length)return r.map(([e,t])=>t);let a="string"==typeof e[0]?e[0]:null==(t=e[0])?void 0:t.name;return r.filter(([e])=>e===a).map(([e,t])=>t)}has(e){return this._parsed.has(e)}set(...e){let[t,r]=1===e.length?[e[0].name,e[0].value]:e,a=this._parsed;return a.set(t,{name:t,value:r}),this._headers.set("cookie",Array.from(a).map(([e,t])=>l(t)).join("; ")),this}delete(e){let t=this._parsed,r=Array.isArray(e)?e.map(e=>t.delete(e)):t.delete(e);return this._headers.set("cookie",Array.from(t).map(([e,t])=>l(t)).join("; ")),r}clear(){return this.delete(Array.from(this._parsed.keys())),this}[Symbol.for("edge-runtime.inspect.custom")](){return`RequestCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`}toString(){return[...this._parsed.values()].map(e=>`${e.name}=${encodeURIComponent(e.value)}`).join("; ")}},f=class{constructor(e){var t,r,a;this._parsed=new Map,this._headers=e;const n=null!=(a=null!=(r=null==(t=e.getSetCookie)?void 0:t.call(e))?r:e.get("set-cookie"))?a:[];for(const e of Array.isArray(n)?n:function(e){if(!e)return[];var t,r,a,n,i,s=[],o=0;function l(){for(;o=e.length)&&s.push(e.substring(t,e.length))}return s}(n)){const t=u(e);t&&this._parsed.set(t.name,t)}}get(...e){let t="string"==typeof e[0]?e[0]:e[0].name;return this._parsed.get(t)}getAll(...e){var t;let r=Array.from(this._parsed.values());if(!e.length)return r;let a="string"==typeof e[0]?e[0]:null==(t=e[0])?void 0:t.name;return r.filter(e=>e.name===a)}has(e){return this._parsed.has(e)}set(...e){let[t,r,a]=1===e.length?[e[0].name,e[0].value,e[0]]:e,n=this._parsed;return n.set(t,function(e={name:"",value:""}){return"number"==typeof e.expires&&(e.expires=new Date(e.expires)),e.maxAge&&(e.expires=new Date(Date.now()+1e3*e.maxAge)),(null===e.path||void 0===e.path)&&(e.path="/"),e}({name:t,value:r,...a})),function(e,t){for(let[,r]of(t.delete("set-cookie"),e)){let e=l(r);t.append("set-cookie",e)}}(n,this._headers),this}delete(...e){let[t,r]="string"==typeof e[0]?[e[0]]:[e[0].name,e[0]];return this.set({...r,name:t,value:"",expires:new Date(0)})}[Symbol.for("edge-runtime.inspect.custom")](){return`ResponseCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`}toString(){return[...this._parsed.values()].map(l).join("; ")}}},"./dist/compiled/cookie/index.js"(e){(()=>{"use strict";"undefined"!=typeof __nccwpck_require__&&(__nccwpck_require__.ab=__dirname+"/");var t,r,a,n,i={};i.parse=function(e,r){if("string"!=typeof e)throw TypeError("argument str must be a string");for(var n={},i=e.split(a),s=(r||{}).decode||t,o=0;o{"use strict";"undefined"!=typeof __nccwpck_require__&&(__nccwpck_require__.ab=__dirname+"/");var t={};(()=>{function e(e,t){void 0===t&&(t={});for(var r=function(e){for(var t=[],r=0;r=48&&s<=57||s>=65&&s<=90||s>=97&&s<=122||95===s){n+=e[i++];continue}break}if(!n)throw TypeError("Missing parameter name at ".concat(r));t.push({type:"NAME",index:r,value:n}),r=i;continue}if("("===a){var o=1,l="",i=r+1;if("?"===e[i])throw TypeError('Pattern cannot start with "?" at '.concat(i));for(;i-1)return!0}return!1},g=function(e){var t=l[l.length-1],r=e||(t&&"string"==typeof t?t:"");if(t&&!r)throw TypeError('Must have text between two parameters, missing text after "'.concat(t.name,'"'));return!r||m(r)?"[^".concat(n(o),"]+?"):"(?:(?!".concat(n(r),")[^").concat(n(o),"])+?")};u-1:void 0===x;s||(m+="(?:".concat(f,"(?=").concat(p,"))?")),_||(m+="(?=".concat(f,"|").concat(p,")"))}return new RegExp(m,i(r))}function o(t,r,a){if(t instanceof RegExp){var n;if(!r)return t;for(var l=/\((?:\?<(.*?)>)?(?!\?)/g,c=0,u=l.exec(t.source);u;)r.push({name:u[1]||c++,prefix:"",suffix:"",modifier:"",pattern:""}),u=l.exec(t.source);return t}return Array.isArray(t)?(n=t.map(function(e){return o(e,r,a).source}),new RegExp("(?:".concat(n.join("|"),")"),i(a))):s(e(t,a),r,a)}Object.defineProperty(t,"__esModule",{value:!0}),t.pathToRegexp=t.tokensToRegexp=t.regexpToFunction=t.match=t.tokensToFunction=t.compile=t.parse=void 0,t.parse=e,t.compile=function(t,a){return r(e(t,a),a)},t.tokensToFunction=r,t.match=function(e,t){var r=[];return a(o(e,r,t),r,t)},t.regexpToFunction=a,t.tokensToRegexp=s,t.pathToRegexp=o})(),e.exports=t})()},"./dist/compiled/strip-ansi/index.js"(e){(()=>{"use strict";var t={511:e=>{e.exports=({onlyFirst:e=!1}={})=>RegExp("[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)|(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))",e?void 0:"g")},532:(e,t,r)=>{let a=r(511);e.exports=e=>"string"==typeof e?e.replace(a(),""):e}},r={};function a(e){var n=r[e];if(void 0!==n)return n.exports;var i=r[e]={exports:{}},s=!0;try{t[e](i,i.exports,a),s=!1}finally{s&&delete r[e]}return i.exports}a.ab=__dirname+"/",e.exports=a(532)})()},"./dist/esm/build/output/log.js"(e,t,r){"use strict";r.d(t,{R8:()=>o,mc:()=>c});var a=r("./dist/esm/lib/picocolors.js"),n=r("./dist/esm/server/lib/lru-cache.js");let i={wait:(0,a.ON)((0,a.Cr)("○")),error:(0,a.wv)((0,a.Cr)("⨯")),warn:(0,a.D9)((0,a.Cr)("⚠")),ready:"▲",info:(0,a.ON)((0,a.Cr)(" ")),event:(0,a.wL)((0,a.Cr)("✓")),trace:(0,a.GC)((0,a.Cr)("\xbb"))},s={log:"log",warn:"warn",error:"error"};function o(...e){!function(e,...t){(""===t[0]||void 0===t[0])&&1===t.length&&t.shift();let r=e in s?s[e]:"log",a=i[e];0===t.length?console[r](""):1===t.length&&"string"==typeof t[0]?console[r](a+" "+t[0]):console[r](a,...t)}("warn",...e)}let l=new n.q(1e4,e=>e.length);function c(...e){let t=e.join(" ");l.has(t)||(l.set(t,t),o(...e))}new n.q(1e4,e=>e.length)},"./dist/esm/lib/constants.js"(e,t,r){"use strict";r.d(t,{$1:()=>P,AA:()=>i,EP:()=>p,Oh:()=>R,RM:()=>d,U2:()=>n,UO:()=>_,VC:()=>f,bX:()=>b,c1:()=>g,eM:()=>v,g0:()=>E,h:()=>s,iS:()=>y,j9:()=>a,kz:()=>o,mH:()=>c,r4:()=>l,tz:()=>u,vS:()=>m,x3:()=>h,xV:()=>x});let a="text/html; charset=utf-8",n="application/json; charset=utf-8",i="nxtP",s="nxtI",o="x-prerender-revalidate",l="x-prerender-revalidate-if-generated",c=".segments",u=".segment.rsc",d=".rsc",h=".json",p=".meta",f="x-next-cache-tags",m="x-next-revalidated-tags",g="x-next-revalidate-tag-token",v=31536e3,y="You can not use getInitialProps with getStaticProps. To use SSG, please remove your getInitialProps",b="You can not use getInitialProps with getServerSideProps. Please remove getInitialProps.",E="You can not use getStaticProps or getStaticPaths with getServerSideProps. To use SSG, please remove getServerSideProps",x="Your `getStaticProps` function did not return an object. Did you forget to add a `return`?",_="Your `getServerSideProps` function did not return an object. Did you forget to add a `return`?",P="The `unstable_revalidate` property is available for general use.\nPlease use `revalidate` instead.",R="can not be attached to a page's component and must be exported from the page. See more info here: https://nextjs.org/docs/messages/gssp-component-member",w={shared:"shared",reactServerComponents:"rsc",serverSideRendering:"ssr",actionBrowser:"action-browser",apiNode:"api-node",apiEdge:"api-edge",middleware:"middleware",instrument:"instrument",edgeAsset:"edge-asset",appPagesBrowser:"app-pages-browser",pagesDirBrowser:"pages-dir-browser",pagesDirEdge:"pages-dir-edge",pagesDirNode:"pages-dir-node"};({...w,GROUP:{builtinReact:[w.reactServerComponents,w.actionBrowser],serverOnly:[w.reactServerComponents,w.actionBrowser,w.instrument,w.middleware],neutralTarget:[w.apiNode,w.apiEdge],clientOnly:[w.serverSideRendering,w.appPagesBrowser],bundled:[w.reactServerComponents,w.actionBrowser,w.serverSideRendering,w.appPagesBrowser,w.shared,w.instrument,w.middleware],appPages:[w.reactServerComponents,w.serverSideRendering,w.appPagesBrowser,w.actionBrowser]}})},"./dist/esm/lib/format-dynamic-import-path.js"(e,t,r){"use strict";r.r(t),r.d(t,{formatDynamicImportPath:()=>s});var a=r("path"),n=r.n(a);let i=require("url"),s=(e,t)=>{let r=n().isAbsolute(t)?t:n().join(e,t);return(0,i.pathToFileURL)(r).toString()}},"./dist/esm/lib/picocolors.js"(e,t,r){"use strict";var a;r.d(t,{Cr:()=>c,D9:()=>h,GC:()=>p,ON:()=>f,wL:()=>d,wv:()=>u});let{env:n,stdout:i}=(null==(a=globalThis)?void 0:a.process)??{},s=n&&!n.NO_COLOR&&(n.FORCE_COLOR||(null==i?void 0:i.isTTY)&&!n.CI&&"dumb"!==n.TERM),o=(e,t,r,a)=>{let n=e.substring(0,a)+r,i=e.substring(a+t.length),s=i.indexOf(t);return~s?n+o(i,t,r,s):n+i},l=(e,t,r=e)=>s?a=>{let n=""+a,i=n.indexOf(t,e.length);return~i?e+o(n,t,r,i)+t:e+n+t}:String,c=l("\x1b[1m","\x1b[22m","\x1b[22m\x1b[1m");l("\x1b[2m","\x1b[22m","\x1b[22m\x1b[2m"),l("\x1b[3m","\x1b[23m"),l("\x1b[4m","\x1b[24m"),l("\x1b[7m","\x1b[27m"),l("\x1b[8m","\x1b[28m"),l("\x1b[9m","\x1b[29m"),l("\x1b[30m","\x1b[39m");let u=l("\x1b[31m","\x1b[39m"),d=l("\x1b[32m","\x1b[39m"),h=l("\x1b[33m","\x1b[39m");l("\x1b[34m","\x1b[39m");let p=l("\x1b[35m","\x1b[39m");l("\x1b[38;2;173;127;168m","\x1b[39m"),l("\x1b[36m","\x1b[39m");let f=l("\x1b[37m","\x1b[39m");l("\x1b[90m","\x1b[39m"),l("\x1b[40m","\x1b[49m"),l("\x1b[41m","\x1b[49m"),l("\x1b[42m","\x1b[49m"),l("\x1b[43m","\x1b[49m"),l("\x1b[44m","\x1b[49m"),l("\x1b[45m","\x1b[49m"),l("\x1b[46m","\x1b[49m"),l("\x1b[47m","\x1b[49m")},"./dist/esm/server/api-utils/index.js"(e,t,r){"use strict";r.d(t,{C4:()=>d,Gx:()=>i,Ic:()=>s,PW:()=>l,Uc:()=>o,wE:()=>u});var a=r("./dist/esm/server/web/spec-extension/adapters/headers.js"),n=r("./dist/esm/lib/constants.js");function i(e,t){let r=a.o.from(e.headers);return{isOnDemandRevalidate:r.get(n.kz)===t.previewModeId,revalidateOnlyGenerated:r.has(n.r4)}}r("./lib/trace/tracer"),r("./dist/esm/server/lib/trace/constants.js");let s="__prerender_bypass",o="__next_preview_data",l=Symbol(o),c=Symbol(s);function u(e,t={}){if(c in e)return e;let{serialize:a}=r("./dist/compiled/cookie/index.js"),n=e.getHeader("Set-Cookie");return e.setHeader("Set-Cookie",[..."string"==typeof n?[n]:Array.isArray(n)?n:[],a(s,"",{expires:new Date(0),httpOnly:!0,sameSite:"none",secure:!0,path:"/",...void 0!==t.path?{path:t.path}:void 0}),a(o,"",{expires:new Date(0),httpOnly:!0,sameSite:"none",secure:!0,path:"/",...void 0!==t.path?{path:t.path}:void 0})]),Object.defineProperty(e,c,{value:!0,enumerable:!1}),e}function d({req:e},t,r){let a={configurable:!0,enumerable:!0},n={...a,writable:!0};Object.defineProperty(e,t,{...a,get:()=>{let a=r();return Object.defineProperty(e,t,{...n,value:a}),a},set:r=>{Object.defineProperty(e,t,{...n,value:r})}})}},"./dist/esm/server/api-utils/node/try-get-preview-data.js"(e,t,r){"use strict";r.r(t),r.d(t,{tryGetPreviewData:()=>s});var a=r("./dist/esm/server/api-utils/index.js"),n=r("./dist/esm/server/web/spec-extension/cookies.js"),i=r("./dist/esm/server/web/spec-extension/adapters/headers.js");function s(e,t,s,o){var l,c;let u;if(s&&(0,a.Gx)(e,s).isOnDemandRevalidate)return!1;if(a.PW in e)return e[a.PW];let d=i.o.from(e.headers),h=new n.tm(d),p=null==(l=h.get(a.Ic))?void 0:l.value,f=null==(c=h.get(a.Uc))?void 0:c.value;if(p&&!f&&p===s.previewModeId){let t={};return Object.defineProperty(e,a.PW,{value:t,enumerable:!1}),t}if(!p&&!f)return!1;if(!p||!f||p!==s.previewModeId)return o||(0,a.wE)(t),!1;try{u=r("next/dist/compiled/jsonwebtoken").verify(f,s.previewModeSigningKey)}catch{return(0,a.wE)(t),!1}let{decryptWithSecret:m}=r("./dist/esm/server/crypto-utils.js"),g=m(Buffer.from(s.previewModeEncryptionKey),u.data);try{let t=JSON.parse(g);return Object.defineProperty(e,a.PW,{value:t,enumerable:!1}),t}catch{return!1}}},"./dist/esm/server/crypto-utils.js"(e,t,r){"use strict";r.r(t),r.d(t,{decryptWithSecret:()=>o,encryptWithSecret:()=>s});var a=r("crypto"),n=r.n(a);let i="aes-256-gcm";function s(e,t){let r=n().randomBytes(16),a=n().randomBytes(64),s=n().pbkdf2Sync(e,a,1e5,32,"sha512"),o=n().createCipheriv(i,s,r),l=Buffer.concat([o.update(t,"utf8"),o.final()]),c=o.getAuthTag();return Buffer.concat([a,r,c,l]).toString("hex")}function o(e,t){let r=Buffer.from(t,"hex"),a=r.slice(0,64),s=r.slice(64,80),o=r.slice(80,96),l=r.slice(96),c=n().pbkdf2Sync(e,a,1e5,32,"sha512"),u=n().createDecipheriv(i,c,s);return u.setAuthTag(o),u.update(l)+u.final("utf8")}},"./dist/esm/server/lib/lru-cache.js"(e,t,r){"use strict";r.d(t,{q:()=>i});class a{constructor(e,t,r){this.prev=null,this.next=null,this.key=e,this.data=t,this.size=r}}class n{constructor(){this.prev=null,this.next=null}}class i{constructor(e,t,r){this.cache=new Map,this.totalSize=0,this.maxSize=e,this.calculateSize=t,this.onEvict=r,this.head=new n,this.tail=new n,this.head.next=this.tail,this.tail.prev=this.head}addToHead(e){e.prev=this.head,e.next=this.head.next,this.head.next.prev=e,this.head.next=e}removeNode(e){e.prev.next=e.next,e.next.prev=e.prev}moveToHead(e){this.removeNode(e),this.addToHead(e)}removeTail(){let e=this.tail.prev;return this.removeNode(e),e}set(e,t){let r=(null==this.calculateSize?void 0:this.calculateSize.call(this,t))??1;if(r<=0)throw Object.defineProperty(Error(`LRUCache: calculateSize returned ${r}, but size must be > 0. Items with size 0 would never be evicted, causing unbounded cache growth.`),"__NEXT_ERROR_CODE",{value:"E1045",enumerable:!1,configurable:!0});if(r>this.maxSize)return console.warn("Single item size exceeds maxSize"),!1;let n=this.cache.get(e);if(n)n.data=t,this.totalSize=this.totalSize-n.size+r,n.size=r,this.moveToHead(n);else{let n=new a(e,t,r);this.cache.set(e,n),this.addToHead(n),this.totalSize+=r}for(;this.totalSize>this.maxSize&&this.cache.size>0;){let e=this.removeTail();this.cache.delete(e.key),this.totalSize-=e.size,null==this.onEvict||this.onEvict.call(this,e.key,e.data)}return!0}has(e){return this.cache.has(e)}get(e){let t=this.cache.get(e);if(t)return this.moveToHead(t),t.data}*[Symbol.iterator](){let e=this.head.next;for(;e&&e!==this.tail;){let t=e;yield[t.key,t.data],e=e.next}}remove(e){let t=this.cache.get(e);t&&(this.removeNode(t),this.cache.delete(e),this.totalSize-=t.size)}get size(){return this.cache.size}get currentSize(){return this.totalSize}}},"./dist/esm/server/lib/node-fs-methods.js"(e,t,r){"use strict";r.d(t,{e:()=>i});let a=require("fs");var n=r.n(a);let i={existsSync:n().existsSync,readFile:n().promises.readFile,readFileSync:n().readFileSync,writeFile:(e,t)=>n().promises.writeFile(e,t),mkdir:e=>n().promises.mkdir(e,{recursive:!0}),stat:e=>n().promises.stat(e)}},"./dist/esm/server/lib/trace/constants.js"(e,t,r){"use strict";r.d(t,{Fx:()=>s,Wc:()=>l,vr:()=>o});var a,n,i,s=((a=s||{}).compression="NextNodeServer.compression",a.getBuildId="NextNodeServer.getBuildId",a.createComponentTree="NextNodeServer.createComponentTree",a.clientComponentLoading="NextNodeServer.clientComponentLoading",a.getLayoutOrPageModule="NextNodeServer.getLayoutOrPageModule",a.generateStaticRoutes="NextNodeServer.generateStaticRoutes",a.generateFsStaticRoutes="NextNodeServer.generateFsStaticRoutes",a.generatePublicRoutes="NextNodeServer.generatePublicRoutes",a.generateImageRoutes="NextNodeServer.generateImageRoutes.route",a.sendRenderResult="NextNodeServer.sendRenderResult",a.proxyRequest="NextNodeServer.proxyRequest",a.runApi="NextNodeServer.runApi",a.render="NextNodeServer.render",a.renderHTML="NextNodeServer.renderHTML",a.imageOptimizer="NextNodeServer.imageOptimizer",a.getPagePath="NextNodeServer.getPagePath",a.getRoutesManifest="NextNodeServer.getRoutesManifest",a.findPageComponents="NextNodeServer.findPageComponents",a.getFontManifest="NextNodeServer.getFontManifest",a.getServerComponentManifest="NextNodeServer.getServerComponentManifest",a.getRequestHandler="NextNodeServer.getRequestHandler",a.renderToHTML="NextNodeServer.renderToHTML",a.renderError="NextNodeServer.renderError",a.renderErrorToHTML="NextNodeServer.renderErrorToHTML",a.render404="NextNodeServer.render404",a.startResponse="NextNodeServer.startResponse",a.route="route",a.onProxyReq="onProxyReq",a.apiResolver="apiResolver",a.internalFetch="internalFetch",a),o=((n=o||{}).getServerSideProps="Render.getServerSideProps",n.getStaticProps="Render.getStaticProps",n.renderToString="Render.renderToString",n.renderDocument="Render.renderDocument",n.createBodyResult="Render.createBodyResult",n),l=((i=l||{}).renderToString="AppRender.renderToString",i.renderToReadableStream="AppRender.renderToReadableStream",i.getBodyResult="AppRender.getBodyResult",i.fetch="AppRender.fetch",i)},"./dist/esm/server/node-environment-extensions/process-error-handlers.js"(e,t,r){"use strict";r.r(t),r.d(t,{installProcessErrorHandlers:()=>s});let a=Symbol.for("react.postpone");function n(e){return"object"==typeof e&&null!==e&&e.$$typeof===a}let i=globalThis;function s(e){i.nextInitializedProcessErrorHandlers||(i.nextInitializedProcessErrorHandlers=!0,e&&(process.removeAllListeners("uncaughtException"),process.removeAllListeners("unhandledRejection")),process.on("unhandledRejection",e=>{n(e)||console.error(e)}),process.on("rejectionHandled",()=>{}),process.on("uncaughtException",e=>{n(e)||console.error(e)}))}},"./dist/esm/server/post-process.js"(e,t,r){"use strict";function a(e){return null!=e}async function n(e,t){for(let n of[t.optimizeCss?async e=>{let a=new(r("critters"))({ssrMode:!0,reduceInlineStyles:!1,path:t.distDir,publicPath:`${t.assetPrefix}/_next/`,preload:"media",fonts:!1,logLevel:process.env.CRITTERS_LOG_LEVEL||"warn",...t.optimizeCss});return await a.process(e)}:null].filter(a))n&&(e=await n(e));return e}r.d(t,{F:()=>n})},"./dist/esm/server/web/spec-extension/adapters/headers.js"(e,t,r){"use strict";r.d(t,{o:()=>i});class a{static get(e,t,r){let a=Reflect.get(e,t,r);return"function"==typeof a?a.bind(e):a}static set(e,t,r,a){return Reflect.set(e,t,r,a)}static has(e,t){return Reflect.has(e,t)}static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}}class n extends Error{constructor(){super("Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers")}static callable(){throw new n}}class i extends Headers{constructor(e){super(),this.headers=new Proxy(e,{get(t,r,n){if("symbol"==typeof r)return a.get(t,r,n);let i=r.toLowerCase(),s=Object.keys(e).find(e=>e.toLowerCase()===i);if(void 0!==s)return a.get(t,s,n)},set(t,r,n,i){if("symbol"==typeof r)return a.set(t,r,n,i);let s=r.toLowerCase(),o=Object.keys(e).find(e=>e.toLowerCase()===s);return a.set(t,o??r,n,i)},has(t,r){if("symbol"==typeof r)return a.has(t,r);let n=r.toLowerCase(),i=Object.keys(e).find(e=>e.toLowerCase()===n);return void 0!==i&&a.has(t,i)},deleteProperty(t,r){if("symbol"==typeof r)return a.deleteProperty(t,r);let n=r.toLowerCase(),i=Object.keys(e).find(e=>e.toLowerCase()===n);return void 0===i||a.deleteProperty(t,i)}})}static seal(e){return new Proxy(e,{get(e,t,r){switch(t){case"append":case"delete":case"set":return n.callable;default:return a.get(e,t,r)}}})}merge(e){return Array.isArray(e)?e.join(", "):e}static from(e){return e instanceof Headers?e:new i(e)}append(e,t){let r=this.headers[e];"string"==typeof r?this.headers[e]=[r,t]:Array.isArray(r)?r.push(t):this.headers[e]=t}delete(e){delete this.headers[e]}get(e){let t=this.headers[e];return void 0!==t?this.merge(t):null}has(e){return void 0!==this.headers[e]}set(e,t){this.headers[e]=t}forEach(e,t){for(let[r,a]of this.entries())e.call(t,a,r,this)}*entries(){for(let e of Object.keys(this.headers)){let t=e.toLowerCase(),r=this.get(t);yield[t,r]}}*keys(){for(let e of Object.keys(this.headers)){let t=e.toLowerCase();yield t}}*values(){for(let e of Object.keys(this.headers)){let t=this.get(e);yield t}}[Symbol.iterator](){return this.entries()}}},"./dist/esm/server/web/spec-extension/cookies.js"(e,t,r){"use strict";r.d(t,{tm:()=>a.RequestCookies});var a=r("./dist/compiled/@edge-runtime/cookies/index.js")},"./dist/esm/shared/lib/isomorphic/path.js"(e,t,r){e.exports=r("path")},"./dist/esm/shared/lib/modern-browserslist-target.js"(e){e.exports=["chrome 111","edge 111","firefox 111","safari 16.4"]},"./dist/server/ReactDOMServerPages.js"(e,t,r){"use strict";let a;try{a=r("react-dom/server.edge")}catch(e){if("MODULE_NOT_FOUND"!==e.code&&"ERR_PACKAGE_PATH_NOT_EXPORTED"!==e.code)throw e;a=r("react-dom/server.browser")}e.exports=a},"../lib/router-utils/instrumentation-globals.external.js"(e){"use strict";e.exports=require("next/dist/server/lib/router-utils/instrumentation-globals.external.js")},"./lib/trace/tracer"(e){"use strict";e.exports=require("next/dist/server/lib/trace/tracer")},"../load-manifest.external"(e){"use strict";e.exports=require("next/dist/server/load-manifest.external.js")},critters(e){"use strict";e.exports=require("critters")},"next/dist/compiled/jsonwebtoken"(e){"use strict";e.exports=require("next/dist/compiled/jsonwebtoken")},"react-dom/server.browser"(e){"use strict";e.exports=require("react-dom/server.browser")},"react-dom/server.edge"(e){"use strict";e.exports=require("react-dom/server.edge")},crypto(e){"use strict";e.exports=require("crypto")},"node:path"(e){"use strict";e.exports=require("node:path")},path(e){"use strict";e.exports=require("path")}},a={};function n(e){var t=a[e];if(void 0!==t)return t.exports;var i=a[e]={exports:{}};return r[e](i,i.exports,n),i.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,n.t=function(r,a){if(1&a&&(r=this(r)),8&a||"object"==typeof r&&r&&(4&a&&r.__esModule||16&a&&"function"==typeof r.then))return r;var i=Object.create(null);n.r(i);var s={};e=e||[null,t({}),t([]),t(t)];for(var o=2&a&&r;("object"==typeof o||"function"==typeof o)&&!~e.indexOf(o);o=t(o))Object.getOwnPropertyNames(o).forEach(e=>{s[e]=()=>r[e]});return s.default=()=>r,n.d(i,s),i},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var i={};(()=>{"use strict";let e,t,r;n.r(i),n.d(i,{PagesRouteModule:()=>rx,default:()=>rP,renderToHTML:()=>ry,vendored:()=>r_});var a,s,o,l,c={};n.r(c),n.d(c,{HeadManagerContext:()=>tH});var u={};n.r(u),n.d(u,{LoadableContext:()=>tU});var d={};n.r(d),n.d(d,{default:()=>tV});var h={};n.r(h),n.d(h,{RouterContext:()=>tJ});var p={};n.r(p),n.d(p,{HtmlContext:()=>tK,useHtmlContext:()=>tZ});var f={};n.r(f),n.d(f,{ImageConfigContext:()=>t1});var m={};n.r(m),n.d(m,{NavigationPromisesContext:()=>re,PathParamsContext:()=>t7,PathnameContext:()=>t5,ReadonlyURLSearchParams:()=>t8,SearchParamsContext:()=>t6,createDevToolsInstrumentedPromise:()=>rt});var g={};n.r(g),n.d(g,{AppRouterContext:()=>ra,GlobalLayoutRouterContext:()=>ri,LayoutRouterContext:()=>rn,MissingSlotContext:()=>ro,TemplateContext:()=>rs});var v={};n.r(v),n.d(v,{ServerInsertedHTMLContext:()=>rb,useServerInsertedHTML:()=>rE});var y={};n.r(y),n.d(y,{AppRouterContext:()=>g,HeadManagerContext:()=>c,HooksClientContext:()=>m,HtmlContext:()=>p,ImageConfigContext:()=>f,Loadable:()=>d,LoadableContext:()=>u,RouterContext:()=>h,ServerInsertedHtml:()=>v}),require("next/dist/build/adapter/setup-node-env.external.js"),n("./dist/esm/shared/lib/modern-browserslist-target.js");let b="build-manifest.json";function E(e){let t=function(e){let t;try{t=new URL(e,"http://n")}catch{}return t}(e);if(!t)return;let r={};for(let e of t.searchParams.keys()){let a=t.searchParams.getAll(e);r[e]=a.length>1?a:a[0]}return{query:r,hash:t.hash,search:t.search,path:t.pathname,pathname:t.pathname,href:`${t.pathname}${t.search}${t.hash}`,host:"",hostname:"",auth:"",protocol:"",slashes:null,port:""}}[...process?.features?.typescript?["next.config.mts"]:[]],Symbol("polyfills");let x=new WeakMap;function _(e,t){let r;if(!t)return{pathname:e};let a=x.get(t);a||(a=t.map(e=>e.toLowerCase()),x.set(t,a));let n=e.split("/",2);if(!n[1])return{pathname:e};let i=n[1].toLowerCase(),s=a.indexOf(i);return s<0?{pathname:e}:(r=t[s],{pathname:e=e.slice(r.length+1)||"/",detectedLocale:r})}function P(e){return e.startsWith("/")?e:`/${e}`}function R(e){return P(e.split("/").reduce((e,t,r,a)=>t?"("===t[0]&&t.endsWith(")")||"@"===t[0]||("page"===t||"route"===t)&&r===a.length-1?e:`${e}/${t}`:e,""))}function w(e){return e.replace(/\.rsc($|\?)/,"$1")}let C=["(..)(..)","(.)","(..)","(...)"];function S(e){return void 0!==e.split("/").find(e=>C.find(t=>e.startsWith(t)))}let O=/\/[^/]*\[[^/]+\][^/]*(?=\/|$)/,T=/\/\[[^/]+\](?=\/|$)/;function A(e,t=!0){return(S(e)&&(e=function(e){let t,r,a;for(let n of e.split("/"))if(r=C.find(e=>n.startsWith(e))){[t,a]=e.split(r,2);break}if(!t||!r||!a)throw Object.defineProperty(Error(`Invalid interception route: ${e}. Must be in the format //(..|...|..)(..)/`),"__NEXT_ERROR_CODE",{value:"E269",enumerable:!1,configurable:!0});switch(t=R(t),r){case"(.)":a="/"===t?`/${a}`:t+"/"+a;break;case"(..)":if("/"===t)throw Object.defineProperty(Error(`Invalid interception route: ${e}. Cannot use (..) marker at the root level, use (.) instead.`),"__NEXT_ERROR_CODE",{value:"E207",enumerable:!1,configurable:!0});a=t.split("/").slice(0,-1).concat(a).join("/");break;case"(...)":a="/"+a;break;case"(..)(..)":let n=t.split("/");if(n.length<=2)throw Object.defineProperty(Error(`Invalid interception route: ${e}. Cannot use (..)(..) marker at the root level or one level up.`),"__NEXT_ERROR_CODE",{value:"E486",enumerable:!1,configurable:!0});a=n.slice(0,-2).concat(a).join("/");break;default:throw Object.defineProperty(Error("Invariant: unexpected marker"),"__NEXT_ERROR_CODE",{value:"E112",enumerable:!1,configurable:!0})}return{interceptingRoute:t,interceptedRoute:a}}(e).interceptedRoute),t)?T.test(e):O.test(e)}function j(e){let t=e.indexOf("#"),r=e.indexOf("?"),a=r>-1&&(t<0||r-1?{pathname:e.substring(0,a?r:t),query:a?e.substring(r,t>-1?t:void 0):"",hash:t>-1?e.slice(t):""}:{pathname:e,query:"",hash:""}}function $(e,t){if("string"!=typeof e)return!1;let{pathname:r}=j(e);return r===t||r.startsWith(t+"/")}function D(e,t){if(!$(e,t))return e;let r=e.slice(t.length);return r.startsWith("/")?r:`/${r}`}var N=n("./dist/compiled/path-to-regexp/index.js"),k=n("./dist/esm/lib/constants.js");let I=/[|\\{}()[\]^$+*?.-]/,M=/[|\\{}()[\]^$+*?.-]/g;function F(e){return I.test(e)?e.replace(M,"\\$&"):e}function L(e){return e.replace(/\/$/,"")||"/"}class H extends Error{constructor(e,t){super(`Invariant: ${e.endsWith(".")?e:e+"."} This is a bug in Next.js.`,t),this.name="InvariantError"}}let U=/^([^[]*)\[((?:\[[^\]]*\])|[^\]]+)\](.*)$/;function z(e){let t=e.startsWith("[")&&e.endsWith("]");t&&(e=e.slice(1,-1));let r=e.startsWith("...");return r&&(e=e.slice(3)),{key:e,repeat:r,optional:t}}function q(e,{includeSuffix:t=!1,includePrefix:r=!1,excludeOptionalTrailingSlash:a=!1}={}){let{parameterizedRoute:n,groups:i}=function(e,t,r){let a={},n=1,i=[];for(let s of L(e).slice(1).split("/")){let e=C.find(e=>s.startsWith(e)),o=s.match(U);if(e&&o&&o[2]){let{key:t,optional:r,repeat:s}=z(o[2]);a[t]={pos:n++,repeat:s,optional:r},i.push(`/${F(e)}([^/]+?)`)}else if(o&&o[2]){let{key:e,repeat:t,optional:s}=z(o[2]);a[e]={pos:n++,repeat:t,optional:s},r&&o[1]&&i.push(`/${F(o[1])}`);let l=t?s?"(?:/(.+?))?":"/(.+?)":"/([^/]+?)";r&&o[1]&&(l=l.substring(1)),i.push(l)}else i.push(`/${F(s)}`);t&&o&&o[3]&&i.push(F(o[3]))}return{parameterizedRoute:i.join(""),groups:a}}(e,t,r),s=n;return a||(s+="(?:/)?"),{re:RegExp(`^${s}$`),groups:i}}function G({interceptionMarker:e,getSafeRouteKey:t,segment:r,routeKeys:a,keyPrefix:n,backreferenceDuplicateKeys:i}){let s,{key:o,optional:l,repeat:c}=z(r),u=o.replace(/\W/g,"");n&&(u=`${n}${u}`);let d=!1;(0===u.length||u.length>30)&&(d=!0),isNaN(parseInt(u.slice(0,1)))||(d=!0),d&&(u=t());let h=u in a;n?a[u]=`${n}${o}`:a[u]=o;let p=e?F(e):"";return s=h&&i?`\\k<${u}>`:c?`(?<${u}>.+?)`:`(?<${u}>[^/]+?)`,{key:o,pattern:l?`(?:/${p}${s})?`:`/${p}${s}`,cleanedKey:u,optional:l,repeat:c}}function X(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function B(e){return e.finished||e.headersSent}async function W(e,t){let r=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:await W(t.Component,t.ctx)}:{};let a=await e.getInitialProps(t);if(r&&B(r))return a;if(!a)throw Object.defineProperty(Error(`"${X(e)}.getInitialProps()" should resolve to an object. But found "${a}" instead.`),"__NEXT_ERROR_CODE",{value:"E1025",enumerable:!1,configurable:!0});return a}"undefined"!=typeof performance&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class V extends Error{}class J extends Error{}let K="_NEXTSEP_";function Z(e){return"string"==typeof e&&!!(/\/\(\.{1,3}\):[^/\s]+/.test(e)||/:[a-zA-Z_][a-zA-Z0-9_]*:[a-zA-Z_][a-zA-Z0-9_]*/.test(e))}function Y(e){let t=e;return(t=t.replace(/(\([^)]*\)):([^/\s]+)/g,`$1${K}:$2`)).replace(/:([^:/\s)]+)(?=:)/g,`:$1${K}`)}function Q(e){return e.replace(RegExp(`\\)${K}`,"g"),")")}function ee(e,t,r){if("string"!=typeof e)return(0,N.pathToRegexp)(e,t,r);let a=Z(e),n=a?Y(e):e;try{return(0,N.pathToRegexp)(n,t,r)}catch(n){if(!a)try{let a=Y(e);return(0,N.pathToRegexp)(a,t,r)}catch(e){}throw n}}function et(e,t){let r=Z(e),a=r?Y(e):e;try{let e=(0,N.compile)(a,t);if(r)return t=>Q(e(t));return e}catch(a){if(!r)try{let r=Y(e),a=(0,N.compile)(r,t);return e=>Q(a(e))}catch(e){}throw a}}function er({re:e,groups:t}){var r;return r=r=>{let a=e.exec(r);if(!a)return!1;let n=e=>{try{return decodeURIComponent(e)}catch{throw Object.defineProperty(new V("failed to decode param"),"__NEXT_ERROR_CODE",{value:"E528",enumerable:!1,configurable:!0})}},i={};for(let[e,r]of Object.entries(t)){let t=a[r.pos];void 0!==t&&(r.repeat?i[e]=t.split("/").map(e=>n(e)):i[e]=n(t))}return i},e=>{let t=r(e);if(!t)return!1;let a={};for(let[e,r]of Object.entries(t))"string"==typeof r?a[e]=r.replace(RegExp(`^${K}`),""):Array.isArray(r)?a[e]=r.map(e=>"string"==typeof e?e.replace(RegExp(`^${K}`),""):e):a[e]=r;return a}}function ea(e){let t={};for(let[r,a]of e.entries()){let e=t[r];void 0===e?t[r]=a:Array.isArray(e)?e.push(a):t[r]=[e,a]}return t}function en(e){return"string"==typeof e?e:("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}function ei(e){return function(){let{cookie:t}=e;if(!t)return{};let{parse:r}=n("./dist/compiled/cookie/index.js");return r(Array.isArray(t)?t.join("; "):t)}}function es(e){return e.replace(/__ESC_COLON_/gi,":")}function eo(e,t){if(!e.includes(":"))return e;for(let r of Object.keys(t))e.includes(`:${r}`)&&(e=e.replace(RegExp(`:${r}\\*`,"g"),`:${r}--ESCAPED_PARAM_ASTERISKS`).replace(RegExp(`:${r}\\?`,"g"),`:${r}--ESCAPED_PARAM_QUESTION`).replace(RegExp(`:${r}\\+`,"g"),`:${r}--ESCAPED_PARAM_PLUS`).replace(RegExp(`:${r}(?!\\w)`,"g"),`--ESCAPED_PARAM_COLON${r}`));return e=e.replace(/(:|\*|\?|\+|\(|\)|\{|\})/g,"\\$1").replace(/--ESCAPED_PARAM_PLUS/g,"+").replace(/--ESCAPED_PARAM_COLON/g,":").replace(/--ESCAPED_PARAM_QUESTION/g,"?").replace(/--ESCAPED_PARAM_ASTERISKS/g,"*"),et(`/${e}`,{validate:!1})(t).slice(1)}function el(e){for(let t of[k.AA,k.h])if(e!==t&&e.startsWith(t))return e.substring(t.length);return null}function ec(e){try{return decodeURIComponent(e)}catch{return e}}let eu=/https?|ftp|gopher|file/;function ed(e,t){for(let r in delete e.nextInternalLocale,e){let a=r!==k.AA&&r.startsWith(k.AA),n=r!==k.h&&r.startsWith(k.h);(a||n||t.includes(r))&&delete e[r]}}function eh(e,t,r){if(e){for(let a of(r&&(r=r.toLowerCase()),e))if(t===a.domain?.split(":",1)[0].toLowerCase()||r===a.defaultLocale.toLowerCase()||a.locales?.some(e=>e.toLowerCase()===r))return a}}function ep(e,t){let r;if(t?.host&&!Array.isArray(t.host))r=t.host.toString().split(":",1)[0];else{if(!e.hostname)return;r=e.hostname}return r.toLowerCase()}var ef=n("./dist/esm/server/api-utils/index.js");function em(e){return $(e||"/","/_next/data")&&"/index"===(e=e.replace(/\/_next\/data\/[^/]{1,}/,"").replace(/\.json$/,""))?"/":e}let eg=Symbol.for("NextInternalRequestMeta");function ev(e,t){let r=e[eg]||{};return"string"==typeof t?r[t]:r}function ey(e,t,r){let a=ev(e);return a[t]=r,e[eg]=a,a}let eb=Symbol("next.patchSetHeaderWithCookieSupport");function eE(e){let t=/^\/index(\/|$)/.test(e)&&!A(e)?`/index${e}`:"/"===e?"/index":P(e);{let{posix:e}=n("path"),r=e.normalize(t);if(r!==t)throw new J(`Requested and resolved page mismatch: ${t} ${r}`)}return t}function ex(e){return e.replace(/\\/g,"/")}let e_=["ico","jpg","jpeg","png","svg"],eP=["jpg","jpeg","png"],eR=["jpg","jpeg","png","gif"],ew=["jpg","jpeg","png","gif"],eC=(e,t)=>t&&0!==t.length?`(?:\\.(${e.join("|")})|(\\.(${t.join("|")})))`:`(\\.(?:${e.join("|")}))`,eS=/^[\\/]favicon\.ico$/,eO=/^[\\/]robots\.txt$/,eT=/^[\\/]manifest\.json$/,eA=/^[\\/]manifest\.webmanifest$/,ej=/[\\/]sitemap\.xml$/,e$=new Map;class eD{constructor(){let e,t;this.promise=new Promise((r,a)=>{e=r,t=a}),this.resolve=e,this.reject=t}}class eN{constructor(e,t=e=>e()){this.cacheKeyFn=e,this.schedulerFn=t,this.pending=new Map}static create(e){return new eN(null==e?void 0:e.cacheKeyFn,null==e?void 0:e.schedulerFn)}async batch(e,t){let r=this.cacheKeyFn?await this.cacheKeyFn(e):e;if(null===r)return t({resolve:e=>Promise.resolve(e),key:e});let a=this.pending.get(r);if(a)return a;let{promise:n,resolve:i,reject:s}=new eD;return this.pending.set(r,n),this.schedulerFn(async()=>{try{let r=await t({resolve:i,key:e});i(r)}catch(e){s(e)}finally{this.pending.delete(r)}}),n}}var ek=n("./dist/esm/server/lib/lru-cache.js"),eI=n("./dist/esm/build/output/log.js");let eM=e=>{Promise.resolve().then(()=>{process.nextTick(e)})};var eF=((a={}).APP_PAGE="APP_PAGE",a.APP_ROUTE="APP_ROUTE",a.PAGES="PAGES",a.FETCH="FETCH",a.REDIRECT="REDIRECT",a.IMAGE="IMAGE",a),eL=((s={}).APP_PAGE="APP_PAGE",s.APP_ROUTE="APP_ROUTE",s.PAGES="PAGES",s.FETCH="FETCH",s.IMAGE="IMAGE",s),eH=n("./lib/trace/tracer"),eU=n("./dist/esm/server/lib/trace/constants.js");function ez(){}new Uint8Array([60,104,116,109,108]),new Uint8Array([60,104,101,97,100]),new Uint8Array([60,98,111,100,121]),new Uint8Array([60,47,104,101,97,100,62]),new Uint8Array([60,47,98,111,100,121,62]),new Uint8Array([60,47,104,116,109,108,62]),new Uint8Array([60,47,98,111,100,121,62,60,47,104,116,109,108,62]),new Uint8Array([60,109,101,116,97,32,110,97,109,101,61,34,194,171,110,120,116,45,105,99,111,110,194,187,34]),new TextEncoder;let eq=new TextEncoder;function eG(e){return new ReadableStream({start(t){t.enqueue(eq.encode(e)),t.close()}})}function eX(e){return new ReadableStream({start(t){t.enqueue(e),t.close()}})}async function eB(e,t){let r=new TextDecoder("utf-8",{fatal:!0}),a="";for await(let n of e){if(null==t?void 0:t.aborted)return a;a+=r.decode(n,{stream:!0})}return a+r.decode()}function eW(e,t){if(!e.startsWith("/")||!t)return e;let{pathname:r,query:a,hash:n}=j(e);return`${t}${r}${a}${n}`}function eV(e,t){if(!e.startsWith("/")||!t)return e;let{pathname:r,query:a,hash:n}=j(e);return`${r}${t}${a}${n}`}let eJ=/^(?:127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|\[::1\]|localhost)$/;function eK(e,t){let r=new URL(String(e),t&&String(t));return eJ.test(r.hostname)&&(r.hostname="localhost"),r}let eZ=Symbol("NextURLInternal");class eY{constructor(e,t,r){let a,n;"object"==typeof t&&"pathname"in t||"string"==typeof t?(a=t,n=r||{}):n=r||t||{},this[eZ]={url:eK(e,a??n.base),options:n,basePath:""},this.analyze()}analyze(){var e,t,r,a,n;let i=function(e,t){let{basePath:r,i18n:a,trailingSlash:n}=t.nextConfig??{},i={pathname:e,trailingSlash:"/"!==e?e.endsWith("/"):n};r&&$(i.pathname,r)&&(i.pathname=D(i.pathname,r),i.basePath=r);let s=i.pathname;if(i.pathname.startsWith("/_next/data/")&&i.pathname.endsWith(".json")){let e=i.pathname.replace(/^\/_next\/data\//,"").replace(/\.json$/,"").split("/");i.buildId=e[0],s="index"!==e[1]?`/${e.slice(1).join("/")}`:"/",!0===t.parseData&&(i.pathname=s)}if(a){let e=t.i18nProvider?t.i18nProvider.analyze(i.pathname):_(i.pathname,a.locales);i.locale=e.detectedLocale,i.pathname=e.pathname??i.pathname,!e.detectedLocale&&i.buildId&&(e=t.i18nProvider?t.i18nProvider.analyze(s):_(s,a.locales)).detectedLocale&&(i.locale=e.detectedLocale)}return i}(this[eZ].url.pathname,{nextConfig:this[eZ].options.nextConfig,parseData:!process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE,i18nProvider:this[eZ].options.i18nProvider}),s=ep(this[eZ].url,this[eZ].options.headers);this[eZ].domainLocale=this[eZ].options.i18nProvider?this[eZ].options.i18nProvider.detectDomainLocale(s):eh(null==(t=this[eZ].options.nextConfig)||null==(e=t.i18n)?void 0:e.domains,s);let o=(null==(r=this[eZ].domainLocale)?void 0:r.defaultLocale)||(null==(n=this[eZ].options.nextConfig)||null==(a=n.i18n)?void 0:a.defaultLocale);this[eZ].url.pathname=i.pathname,this[eZ].defaultLocale=o,this[eZ].basePath=i.basePath??"",this[eZ].buildId=i.buildId,this[eZ].locale=i.locale??o,this[eZ].trailingSlash=i.trailingSlash}formatPathname(){var e;let t;return t=function(e,t,r,a){if(!t||t===r)return e;let n=e.toLowerCase();return!a&&($(n,"/api")||$(n,`/${t.toLowerCase()}`))?e:eW(e,`/${t}`)}((e={basePath:this[eZ].basePath,buildId:this[eZ].buildId,defaultLocale:this[eZ].options.forceLocale?void 0:this[eZ].defaultLocale,locale:this[eZ].locale,pathname:this[eZ].url.pathname,trailingSlash:this[eZ].trailingSlash}).pathname,e.locale,e.buildId?void 0:e.defaultLocale,e.ignorePrefix),(e.buildId||!e.trailingSlash)&&(t=L(t)),e.buildId&&(t=eV(eW(t,`/_next/data/${e.buildId}`),"/"===e.pathname?"index.json":".json")),t=eW(t,e.basePath),!e.buildId&&e.trailingSlash?t.endsWith("/")?t:eV(t,"/"):L(t)}formatSearch(){return this[eZ].url.search}get buildId(){return this[eZ].buildId}set buildId(e){this[eZ].buildId=e}get locale(){return this[eZ].locale??""}set locale(e){var t,r;if(!this[eZ].locale||!(null==(r=this[eZ].options.nextConfig)||null==(t=r.i18n)?void 0:t.locales.includes(e)))throw Object.defineProperty(TypeError(`The NextURL configuration includes no locale "${e}"`),"__NEXT_ERROR_CODE",{value:"E597",enumerable:!1,configurable:!0});this[eZ].locale=e}get defaultLocale(){return this[eZ].defaultLocale}get domainLocale(){return this[eZ].domainLocale}get searchParams(){return this[eZ].url.searchParams}get host(){return this[eZ].url.host}set host(e){this[eZ].url.host=e}get hostname(){return this[eZ].url.hostname}set hostname(e){this[eZ].url.hostname=e}get port(){return this[eZ].url.port}set port(e){this[eZ].url.port=e}get protocol(){return this[eZ].url.protocol}set protocol(e){this[eZ].url.protocol=e}get href(){let e=this.formatPathname(),t=this.formatSearch();return`${this.protocol}//${this.host}${e}${t}${this.hash}`}set href(e){this[eZ].url=eK(e),this.analyze()}get origin(){return this[eZ].url.origin}get pathname(){return this[eZ].url.pathname}set pathname(e){this[eZ].url.pathname=e}get hash(){return this[eZ].url.hash}set hash(e){this[eZ].url.hash=e}get search(){return this[eZ].url.search}set search(e){this[eZ].url.search=e}get password(){return this[eZ].url.password}set password(e){this[eZ].url.password=e}get username(){return this[eZ].url.username}set username(e){this[eZ].url.username=e}get basePath(){return this[eZ].basePath}set basePath(e){this[eZ].basePath=e.startsWith("/")?e:`/${e}`}toString(){return this.href}toJSON(){return this.href}[Symbol.for("edge-runtime.inspect.custom")](){return{href:this.href,origin:this.origin,protocol:this.protocol,username:this.username,password:this.password,host:this.host,hostname:this.hostname,port:this.port,pathname:this.pathname,search:this.search,searchParams:this.searchParams,hash:this.hash}}clone(){return new eY(String(this),this[eZ].options)}}n("./dist/esm/server/web/spec-extension/cookies.js"),Symbol("internal request"),Request,Symbol.for("edge-runtime.inspect.custom");let eQ="ResponseAborted";class e0 extends Error{constructor(...e){super(...e),this.name=eQ}}let e1=0,e2=0,e3=0;function e4(e){return(null==e?void 0:e.name)==="AbortError"||(null==e?void 0:e.name)===eQ}async function e9(e,t,r){try{let a,{errored:n,destroyed:i}=t;if(n||i)return;let s=(a=new AbortController,t.once("close",()=>{t.writableFinished||a.abort(new e0)}),a),o=function(e,t){let r=!1,a=new eD;function n(){a.resolve()}e.on("drain",n),e.once("close",()=>{e.off("drain",n),a.resolve()});let i=new eD;return e.once("finish",()=>{i.resolve()}),new WritableStream({write:async t=>{if(!r){if(r=!0,"performance"in globalThis&&process.env.NEXT_OTEL_PERFORMANCE_PREFIX){let e=function(e={}){let t=0===e1?void 0:{clientComponentLoadStart:e1,clientComponentLoadTimes:e2,clientComponentLoadCount:e3};return e.reset&&(e1=0,e2=0,e3=0),t}();e&&performance.measure(`${process.env.NEXT_OTEL_PERFORMANCE_PREFIX}:next-client-component-loading`,{start:e.clientComponentLoadStart,end:e.clientComponentLoadStart+e.clientComponentLoadTimes})}e.flushHeaders(),(0,eH.getTracer)().trace(eU.Fx.startResponse,{spanName:"start response"},()=>void 0)}try{let r=e.write(t);"flush"in e&&"function"==typeof e.flush&&e.flush(),r||(await a.promise,a=new eD)}catch(t){throw e.end(),Object.defineProperty(Error("failed to write chunk to response",{cause:t}),"__NEXT_ERROR_CODE",{value:"E321",enumerable:!1,configurable:!0})}},abort:t=>{e.writableFinished||e.destroy(t)},close:async()=>{if(t&&await t,!e.writableFinished)return e.end(),i.promise}})}(t,r);await e.pipeTo(o,{signal:s.signal})}catch(e){if(e4(e))return;throw Object.defineProperty(Error("failed to pipe response",{cause:e}),"__NEXT_ERROR_CODE",{value:"E180",enumerable:!1,configurable:!0})}}class e8{static #e=this.EMPTY=new e8(null,{metadata:{},contentType:null});static fromStatic(e,t){return new e8(e,{metadata:{},contentType:t})}constructor(e,{contentType:t,waitUntil:r,metadata:a}){this.response=e,this.contentType=t,this.metadata=a,this.waitUntil=r}assignMetadata(e){Object.assign(this.metadata,e)}get isNull(){return null===this.response}get isDynamic(){return"string"!=typeof this.response}toUnchunkedString(e=!1){if(null===this.response)return"";if("string"!=typeof this.response){if(!e)throw Object.defineProperty(new H("dynamic responses cannot be unchunked. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E732",enumerable:!1,configurable:!0});return eB(this.readable)}return this.response}get readable(){return null===this.response?new ReadableStream({start(e){e.close()}}):"string"==typeof this.response?eG(this.response):Buffer.isBuffer(this.response)?eX(this.response):Array.isArray(this.response)?function(...e){if(0===e.length)return new ReadableStream({start(e){e.close()}});if(1===e.length)return e[0];let{readable:t,writable:r}=new TransformStream,a=e[0].pipeTo(r,{preventClose:!0}),n=1;for(;nt.pipeTo(r,{preventClose:!0}))}let i=e[n];return(a=a.then(()=>i.pipeTo(r))).catch(ez),t}(...this.response):this.response}coerce(){return null===this.response?[]:"string"==typeof this.response?[eG(this.response)]:Array.isArray(this.response)?this.response:Buffer.isBuffer(this.response)?[eX(this.response)]:[this.response]}pipeThrough(e){this.response=this.readable.pipeThrough(e)}unshift(e){this.response=this.coerce(),this.response.unshift(e)}push(e){this.response=this.coerce(),this.response.push(e)}async pipeTo(e){try{await this.readable.pipeTo(e,{preventClose:!0}),this.waitUntil&&await this.waitUntil,await e.close()}catch(t){if(e4(t))return void await e.abort(t);throw t}}async pipeToNodeResponse(e){await e9(this.readable,e,this.waitUntil)}}var e6=((o={}).PAGES="PAGES",o.PAGES_API="PAGES_API",o.APP_PAGE="APP_PAGE",o.APP_ROUTE="APP_ROUTE",o.IMAGE="IMAGE",o);async function e5(e){var t,r;return{...e,value:(null==(t=e.value)?void 0:t.kind)===eF.PAGES?{kind:eF.PAGES,html:await e.value.html.toUnchunkedString(!0),pageData:e.value.pageData,headers:e.value.headers,status:e.value.status}:(null==(r=e.value)?void 0:r.kind)===eF.APP_PAGE?{kind:eF.APP_PAGE,html:await e.value.html.toUnchunkedString(!0),postponed:e.value.postponed,rscData:e.value.rscData,headers:e.value.headers,status:e.value.status,segmentData:e.value.segmentData}:e.value}}async function e7(e){var t,r;return e?{isMiss:e.isMiss,isStale:e.isStale,cacheControl:e.cacheControl,isFallback:e.isFallback,value:(null==(t=e.value)?void 0:t.kind)===eF.PAGES?{kind:eF.PAGES,html:e8.fromStatic(e.value.html,k.j9),pageData:e.value.pageData,headers:e.value.headers,status:e.value.status}:(null==(r=e.value)?void 0:r.kind)===eF.APP_PAGE?{kind:eF.APP_PAGE,html:e8.fromStatic(e.value.html,k.j9),rscData:e.value.rscData,headers:e.value.headers,status:e.value.status,postponed:e.value.postponed,segmentData:e.value.segmentData}:e.value}:null}function te(e,t){if(!e)return t;let r=parseInt(e,10);return Number.isFinite(r)&&r>0?r:t}let tt=te(process.env.NEXT_PRIVATE_RESPONSE_CACHE_TTL,1e4),tr=te(process.env.NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE,150),ta="__ttl_sentinel__";function tn(e,t){return`${e}\0${t??ta}`}class ti{constructor(e,t=tr,r=tt){this.getBatcher=eN.create({cacheKeyFn:({key:e,isOnDemandRevalidate:t})=>`${e}-${t?"1":"0"}`,schedulerFn:eM}),this.revalidateBatcher=eN.create({schedulerFn:eM}),this.evictedInvocationIDs=new Set,this.minimal_mode=e,this.maxSize=t,this.ttl=r,this.cache=new ek.q(t,void 0,e=>{let t=function(e){let t=e.lastIndexOf("\0");if(-1===t)return;let r=e.slice(t+1);return r===ta?void 0:r}(e);if(t){if(this.evictedInvocationIDs.size>=100){let e=this.evictedInvocationIDs.values().next().value;e&&this.evictedInvocationIDs.delete(e)}this.evictedInvocationIDs.add(t)}})}async get(e,t,r){if(!e)return t({hasResolved:!1,previousCacheEntry:null});if(this.minimal_mode){let t=tn(e,r.invocationID),a=this.cache.get(t);if(a){if(void 0!==r.invocationID)return e7(a.entry);let e=Date.now();if(a.expiresAt>e)return e7(a.entry);this.cache.remove(t)}r.invocationID&&this.evictedInvocationIDs.has(r.invocationID)&&(0,eI.mc)(`Response cache entry was evicted for invocation ${r.invocationID}. Consider increasing NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE (current: ${this.maxSize}).`)}let{incrementalCache:a,isOnDemandRevalidate:n=!1,isFallback:i=!1,isRoutePPREnabled:s=!1,isPrefetch:o=!1,waitUntil:l,routeKind:c,invocationID:u}=r,d=await this.getBatcher.batch({key:e,isOnDemandRevalidate:n},({resolve:r})=>{let d=this.handleGet(e,t,{incrementalCache:a,isOnDemandRevalidate:n,isFallback:i,isRoutePPREnabled:s,isPrefetch:o,routeKind:c,invocationID:u},r);return l&&l(d),d});return e7(d)}async handleGet(e,t,r,a){let n=null,i=!1;try{if((n=this.minimal_mode?null:await r.incrementalCache.get(e,{kind:function(e){switch(e){case e6.PAGES:return eL.PAGES;case e6.APP_PAGE:return eL.APP_PAGE;case e6.IMAGE:return eL.IMAGE;case e6.APP_ROUTE:return eL.APP_ROUTE;case e6.PAGES_API:throw Object.defineProperty(Error(`Unexpected route kind ${e}`),"__NEXT_ERROR_CODE",{value:"E64",enumerable:!1,configurable:!0});default:return e}}(r.routeKind),isRoutePPREnabled:r.isRoutePPREnabled,isFallback:r.isFallback}))&&!r.isOnDemandRevalidate&&(a(n),i=!0,!n.isStale||r.isPrefetch))return n;let s=await this.revalidate(e,r.incrementalCache,r.isRoutePPREnabled,r.isFallback,t,n,null!==n&&!r.isOnDemandRevalidate,void 0,r.invocationID);if(!s){if(this.minimal_mode){let t=tn(e,r.invocationID);this.cache.remove(t)}return null}return r.isOnDemandRevalidate,s}catch(e){if(i)return console.error(e),null;throw e}}async revalidate(e,t,r,a,n,i,s,o,l){return this.revalidateBatcher.batch(e,()=>{let c=this.handleRevalidate(e,t,r,a,n,i,s,l);return o&&o(c),c})}async handleRevalidate(e,t,r,a,n,i,s,o){try{let l=await n({hasResolved:s,previousCacheEntry:i,isRevalidating:!0});if(!l)return null;let c=await e5({...l,isMiss:!i});if(c.cacheControl)if(this.minimal_mode){let t=tn(e,o);this.cache.set(t,{entry:c,expiresAt:Date.now()+this.ttl})}else await t.set(e,c.value,{cacheControl:c.cacheControl,isRoutePPREnabled:r,isFallback:a});return c}catch(n){if(null==i?void 0:i.cacheControl){let n=Math.min(Math.max(i.cacheControl.revalidate||3,3),30),s=void 0===i.cacheControl.expire?void 0:Math.max(n+3,i.cacheControl.expire);await t.set(e,i.value,{cacheControl:{revalidate:n,expire:s},isRoutePPREnabled:r,isFallback:a})}throw n}}}var ts=n("./dist/esm/shared/lib/isomorphic/path.js"),to=n.n(ts);let tl=require("next/dist/server/lib/incremental-cache/tags-manifest.external.js");class tc{constructor(e){this.fs=e,this.tasks=[]}findOrCreateTask(e){for(let t of this.tasks)if(t[0]===e)return t;let t=this.fs.mkdir(e);t.catch(()=>{});let r=[e,t,[]];return this.tasks.push(r),r}append(e,t){let r=this.findOrCreateTask(to().dirname(e)),a=r[1].then(()=>this.fs.writeFile(e,t));a.catch(()=>{}),r[2].push(a)}wait(){return Promise.all(this.tasks.flatMap(e=>e[2]))}}let tu=require("next/dist/server/lib/incremental-cache/memory-cache.external.js");class td{static #e=this.debug=!!process.env.NEXT_PRIVATE_DEBUG_CACHE;constructor(e){this.fs=e.fs,this.flushToDisk=e.flushToDisk,this.serverDistDir=e.serverDistDir,this.revalidatedTags=e.revalidatedTags,e.maxMemoryCacheSize?td.memoryCache?td.debug&&console.log("FileSystemCache: memory store already initialized"):(td.debug&&console.log("FileSystemCache: using memory store for fetch cache"),td.memoryCache=(0,tu.getMemoryCache)(e.maxMemoryCacheSize)):td.debug&&console.log("FileSystemCache: not using memory store for fetch cache")}resetRequestCache(){}async revalidateTag(e,t){if(e="string"==typeof e?[e]:e,td.debug&&console.log("FileSystemCache: revalidateTag",e,t),0===e.length)return;let r=Date.now();for(let a of e){let e=tl.tagsManifest.get(a)||{};if(t){let n={...e};n.stale=r,void 0!==t.expire&&(n.expired=r+1e3*t.expire),tl.tagsManifest.set(a,n)}else tl.tagsManifest.set(a,{...e,expired:r})}}async get(...e){var t,r,a,n,i,s,o,l,c;let[u,d]=e,{kind:h}=d,p=null==(t=td.memoryCache)?void 0:t.get(u);if(td.debug&&(h===eL.FETCH?console.log("FileSystemCache: get",u,d.tags,h,!!p):console.log("FileSystemCache: get",u,h,!!p)),!p)try{if(h===eL.APP_ROUTE){let e=this.getFilePath(`${u}.body`,eL.APP_ROUTE),t=await this.fs.readFile(e),{mtime:r}=await this.fs.stat(e),a=JSON.parse(await this.fs.readFile(e.replace(/\.body$/,k.EP),"utf8"));p={lastModified:r.getTime(),value:{kind:eF.APP_ROUTE,body:t,headers:a.headers,status:a.status}}}else{let e=this.getFilePath(h===eL.FETCH?u:`${u}.html`,h),t=await this.fs.readFile(e,"utf8"),{mtime:r}=await this.fs.stat(e);if(h===eL.FETCH){let{tags:e,fetchIdx:a,fetchUrl:n}=d;if(!this.flushToDisk)return null;let i=r.getTime(),l=JSON.parse(t);if(p={lastModified:i,value:l},(null==(s=p.value)?void 0:s.kind)===eF.FETCH){let t=null==(o=p.value)?void 0:o.tags;(null==e?void 0:e.every(e=>null==t?void 0:t.includes(e)))||(td.debug&&console.log("FileSystemCache: tags vs storedTags mismatch",e,t),await this.set(u,p.value,{fetchCache:!0,tags:e,fetchIdx:a,fetchUrl:n}))}}else if(h===eL.APP_PAGE){let a,n,i;try{a=JSON.parse(await this.fs.readFile(e.replace(/\.html$/,k.EP),"utf8"))}catch{}if(null==a?void 0:a.segmentPaths){let e=new Map;n=e;let t=u+k.mH;await Promise.all(a.segmentPaths.map(async r=>{let a=this.getFilePath(t+r+k.tz,eL.APP_PAGE);try{e.set(r,await this.fs.readFile(a))}catch{}}))}d.isFallback||d.isRoutePPREnabled&&(null==a?void 0:a.postponed)!=null||(i=await this.fs.readFile(this.getFilePath(`${u}${k.RM}`,eL.APP_PAGE))),p={lastModified:r.getTime(),value:{kind:eF.APP_PAGE,html:t,rscData:i,postponed:null==a?void 0:a.postponed,headers:null==a?void 0:a.headers,status:null==a?void 0:a.status,segmentData:n}}}else if(h===eL.PAGES){let e,a={};d.isFallback||(a=JSON.parse(await this.fs.readFile(this.getFilePath(`${u}${k.x3}`,eL.PAGES),"utf8"))),p={lastModified:r.getTime(),value:{kind:eF.PAGES,html:t,pageData:a,headers:null==e?void 0:e.headers,status:null==e?void 0:e.status}}}else throw Object.defineProperty(Error(`Invariant: Unexpected route kind ${h} in file system cache.`),"__NEXT_ERROR_CODE",{value:"E445",enumerable:!1,configurable:!0})}p&&(null==(l=td.memoryCache)||l.set(u,p))}catch{return null}if((null==p||null==(r=p.value)?void 0:r.kind)===eF.APP_PAGE||(null==p||null==(a=p.value)?void 0:a.kind)===eF.APP_ROUTE||(null==p||null==(n=p.value)?void 0:n.kind)===eF.PAGES){let e=null==(c=p.value.headers)?void 0:c[k.VC];if("string"==typeof e){let t=e.split(",");if(t.length>0&&(0,tl.areTagsExpired)(t,p.lastModified))return td.debug&&console.log("FileSystemCache: expired tags",t),null}}else if((null==p||null==(i=p.value)?void 0:i.kind)===eF.FETCH){let e=d.kind===eL.FETCH?[...d.tags||[],...d.softTags||[]]:[];if(e.some(e=>this.revalidatedTags.includes(e)))return td.debug&&console.log("FileSystemCache: was revalidated",e),null;if((0,tl.areTagsExpired)(e,p.lastModified))return td.debug&&console.log("FileSystemCache: expired tags",e),null}return p??null}async set(e,t,r){var a;if(null==(a=td.memoryCache)||a.set(e,{value:t,lastModified:Date.now()}),td.debug&&console.log("FileSystemCache: set",e),!this.flushToDisk||!t)return;let n=new tc(this.fs);if(t.kind===eF.APP_ROUTE){let r=this.getFilePath(`${e}.body`,eL.APP_ROUTE);n.append(r,t.body);let a={headers:t.headers,status:t.status,postponed:void 0,segmentPaths:void 0,prefetchHints:void 0};n.append(r.replace(/\.body$/,k.EP),JSON.stringify(a,null,2))}else if(t.kind===eF.PAGES||t.kind===eF.APP_PAGE){let a=t.kind===eF.APP_PAGE,i=this.getFilePath(`${e}.html`,a?eL.APP_PAGE:eL.PAGES);if(n.append(i,t.html),r.fetchCache||r.isFallback||r.isRoutePPREnabled||n.append(this.getFilePath(`${e}${a?k.RM:k.x3}`,a?eL.APP_PAGE:eL.PAGES),a?t.rscData:JSON.stringify(t.pageData)),(null==t?void 0:t.kind)===eF.APP_PAGE){let e;if(t.segmentData){e=[];let r=i.replace(/\.html$/,k.mH);for(let[a,i]of t.segmentData){e.push(a);let t=r+a+k.tz;n.append(t,i)}}let r={headers:t.headers,status:t.status,postponed:t.postponed,segmentPaths:e,prefetchHints:void 0};n.append(i.replace(/\.html$/,k.EP),JSON.stringify(r))}}else if(t.kind===eF.FETCH){let a=this.getFilePath(e,eL.FETCH);n.append(a,JSON.stringify({...t,tags:r.fetchCache?r.tags:[]}))}await n.wait()}getFilePath(e,t){switch(t){case eL.FETCH:return to().join(this.serverDistDir,"..","cache","fetch-cache",e);case eL.PAGES:return to().join(this.serverDistDir,"pages",e);case eL.IMAGE:case eL.APP_PAGE:case eL.APP_ROUTE:return to().join(this.serverDistDir,"app",e);default:throw Object.defineProperty(Error(`Unexpected file path kind: ${t}`),"__NEXT_ERROR_CODE",{value:"E479",enumerable:!1,configurable:!0})}}}function th(e){return e.replace(/(?:\/index)?\/?$/,"")||"/"}let tp=require("next/dist/server/lib/incremental-cache/shared-cache-controls.external.js"),tf=require("next/dist/server/app-render/work-unit-async-storage.external.js"),tm=require("next/dist/server/app-render/work-async-storage.external.js");class tg{static #e=this.debug=!!process.env.NEXT_PRIVATE_DEBUG_CACHE;constructor({fs:e,dev:t,flushToDisk:r,minimalMode:a,serverDistDir:n,requestHeaders:i,maxMemoryCacheSize:s,getPrerenderManifest:o,fetchCacheKeyPrefix:l,CurCacheHandler:c,allowedRevalidateHeaderKeys:u}){var d,h,p,f;this.locks=new Map,this.hasCustomCacheHandler=!!c;const m=Symbol.for("@next/cache-handlers"),g=globalThis;if(c)tg.debug&&console.log("IncrementalCache: using custom cache handler",c.name);else{const t=g[m];(null==t?void 0:t.FetchCache)?(c=t.FetchCache,tg.debug&&console.log("IncrementalCache: using global FetchCache cache handler")):e&&n&&(tg.debug&&console.log("IncrementalCache: using filesystem cache handler"),c=td)}process.env.__NEXT_TEST_MAX_ISR_CACHE&&(s=parseInt(process.env.__NEXT_TEST_MAX_ISR_CACHE,10)),this.dev=t,this.disableForTestmode="true"===process.env.NEXT_PRIVATE_TEST_PROXY,this.minimalMode=a,this.requestHeaders=i,this.allowedRevalidateHeaderKeys=u,this.prerenderManifest=o(),this.cacheControls=new tp.SharedCacheControls(this.prerenderManifest),this.fetchCacheKeyPrefix=l;let v=[];i[k.kz]===(null==(h=this.prerenderManifest)||null==(d=h.preview)?void 0:d.previewModeId)&&(this.isOnDemandRevalidate=!0),a&&(v=this.revalidatedTags=function(e,t){return"string"==typeof e[k.vS]&&e[k.c1]===t?e[k.vS].split(","):[]}(i,null==(f=this.prerenderManifest)||null==(p=f.preview)?void 0:p.previewModeId)),c&&(this.cacheHandler=new c({dev:t,fs:e,flushToDisk:r,serverDistDir:n,revalidatedTags:v,maxMemoryCacheSize:s,_requestHeaders:i,fetchCacheKeyPrefix:l}))}calculateRevalidate(e,t,r,a){if(r)return Math.floor(performance.timeOrigin+performance.now()-1e3);let n=this.cacheControls.get(th(e)),i=n?n.revalidate:!a&&1;return"number"==typeof i?1e3*i+t:i}_getPathname(e,t){return t?e:eE(e)}resetRequestCache(){var e,t;null==(t=this.cacheHandler)||null==(e=t.resetRequestCache)||e.call(t)}async lock(e){for(;;){let t=this.locks.get(e);if(tg.debug&&console.log("IncrementalCache: lock get",e,!!t),!t)break;await t}let{resolve:t,promise:r}=new eD;return tg.debug&&console.log("IncrementalCache: successfully locked",e),this.locks.set(e,r),()=>{t(),this.locks.delete(e)}}async revalidateTag(e,t){var r;return null==(r=this.cacheHandler)?void 0:r.revalidateTag(e,t)}async generateCacheKey(e,t={}){let r=[],a=new TextEncoder,i=new TextDecoder;if(t.body)if(t.body instanceof Uint8Array)r.push(i.decode(t.body)),t._ogBody=t.body;else if("function"==typeof t.body.getReader){let e=t.body,n=[];try{await e.pipeTo(new WritableStream({write(e){"string"==typeof e?(n.push(a.encode(e)),r.push(e)):(n.push(e),r.push(i.decode(e,{stream:!0})))}})),r.push(i.decode());let s=n.reduce((e,t)=>e+t.length,0),o=new Uint8Array(s),l=0;for(let e of n)o.set(e,l),l+=e.length;t._ogBody=o}catch(e){console.error("Problem reading body",e)}}else if("function"==typeof t.body.keys){let e=t.body;for(let a of(t._ogBody=t.body,new Set([...e.keys()]))){let t=e.getAll(a);r.push(`${a}=${(await Promise.all(t.map(async e=>"string"==typeof e?e:await e.text()))).join(",")}`)}}else if("function"==typeof t.body.arrayBuffer){let e=t.body,a=await e.arrayBuffer();r.push(await e.text()),t._ogBody=new Blob([a],{type:e.type})}else"string"==typeof t.body&&(r.push(t.body),t._ogBody=t.body);let s="function"==typeof(t.headers||{}).keys?Object.fromEntries(t.headers):Object.assign({},t.headers);"traceparent"in s&&delete s.traceparent,"tracestate"in s&&delete s.tracestate;let o=JSON.stringify(["v3",this.fetchCacheKeyPrefix||"",e,t.method,s,t.mode,t.redirect,t.credentials,t.referrer,t.referrerPolicy,t.integrity,t.cache,r]);return n("crypto").createHash("sha256").update(o).digest("hex")}async get(e,t){var r,a,n,i,s,o,l;let c,u;if(t.kind===eL.FETCH){let r=tf.workUnitAsyncStorage.getStore(),a=r?(0,tf.getRenderResumeDataCache)(r):null;if(a){let r=a.fetch.get(e);if((null==r?void 0:r.kind)===eF.FETCH){let a=tm.workAsyncStorage.getStore();if(![...t.tags||[],...t.softTags||[]].some(e=>{var t,r;return(null==(t=this.revalidatedTags)?void 0:t.includes(e))||(null==a||null==(r=a.pendingRevalidatedTags)?void 0:r.some(t=>t.tag===e))}))return tg.debug&&console.log("IncrementalCache: rdc:hit",e),{isStale:!1,value:r};tg.debug&&console.log("IncrementalCache: rdc:revalidated-tag",e)}else tg.debug&&console.log("IncrementalCache: rdc:miss",e)}else tg.debug&&console.log("IncrementalCache: rdc:no-resume-data")}if(this.disableForTestmode||this.dev&&(t.kind!==eL.FETCH||"no-cache"===this.requestHeaders["cache-control"]))return null;e=this._getPathname(e,t.kind===eL.FETCH);let d=await (null==(r=this.cacheHandler)?void 0:r.get(e,t));if(t.kind===eL.FETCH){if(!d)return null;if((null==(n=d.value)?void 0:n.kind)!==eF.FETCH)throw Object.defineProperty(new H(`Expected cached value for cache key ${JSON.stringify(e)} to be a "FETCH" kind, got ${JSON.stringify(null==(i=d.value)?void 0:i.kind)} instead.`),"__NEXT_ERROR_CODE",{value:"E653",enumerable:!1,configurable:!0});let r=tm.workAsyncStorage.getStore(),a=[...t.tags||[],...t.softTags||[]];if(a.some(e=>{var t,a;return(null==(t=this.revalidatedTags)?void 0:t.includes(e))||(null==r||null==(a=r.pendingRevalidatedTags)?void 0:a.some(t=>t.tag===e))}))return tg.debug&&console.log("IncrementalCache: expired tag",e),null;let s=tf.workUnitAsyncStorage.getStore();if(s){let t=(0,tf.getPrerenderResumeDataCache)(s);t&&(tg.debug&&console.log("IncrementalCache: rdc:set",e),t.fetch.set(e,d.value))}let o=t.revalidate||d.value.revalidate,l=(performance.timeOrigin+performance.now()-(d.lastModified||0))/1e3>o,c=d.value.data;return(0,tl.areTagsExpired)(a,d.lastModified)?null:((0,tl.areTagsStale)(a,d.lastModified)&&(l=!0),{isStale:l,value:{kind:eF.FETCH,data:c,revalidate:o}})}if((null==d||null==(a=d.value)?void 0:a.kind)===eF.FETCH)throw Object.defineProperty(new H(`Expected cached value for cache key ${JSON.stringify(e)} not to be a ${JSON.stringify(t.kind)} kind, got "FETCH" instead.`),"__NEXT_ERROR_CODE",{value:"E652",enumerable:!1,configurable:!0});let h=null,{isFallback:p}=t,f=this.cacheControls.get(th(e));if((null==d?void 0:d.lastModified)===-1)c=-1,u=-1*k.eM*1e3;else{let r=performance.timeOrigin+performance.now(),a=(null==d?void 0:d.lastModified)||r;if(void 0===(c=!1!==(u=this.calculateRevalidate(e,a,this.dev??!1,t.isFallback))&&u0&&((0,tl.areTagsExpired)(t,a)?c=-1:(0,tl.areTagsStale)(t,a)&&(c=!0))}}}return d&&(h={isStale:c,cacheControl:f,revalidateAfter:u,value:d.value,isFallback:p}),!d&&this.prerenderManifest.notFoundRoutes.includes(e)&&(h={isStale:c,value:null,cacheControl:f,revalidateAfter:u,isFallback:p},this.set(e,h.value,{...t,cacheControl:f})),h}async set(e,t,r){if((null==t?void 0:t.kind)===eF.FETCH){let r=tf.workUnitAsyncStorage.getStore(),a=r?(0,tf.getPrerenderResumeDataCache)(r):null;a&&(tg.debug&&console.log("IncrementalCache: rdc:set",e),a.fetch.set(e,t))}if(this.disableForTestmode||this.dev&&!r.fetchCache)return;e=this._getPathname(e,r.fetchCache);let a=JSON.stringify(t).length;if(r.fetchCache&&a>2097152&&!this.hasCustomCacheHandler&&!r.isImplicitBuildTimeCache){let t=`Failed to set Next.js data cache for ${r.fetchUrl||e}, items over 2MB can not be cached (${a} bytes)`;if(this.dev)throw Object.defineProperty(Error(t),"__NEXT_ERROR_CODE",{value:"E1003",enumerable:!1,configurable:!0});console.warn(t);return}try{var n;!r.fetchCache&&r.cacheControl&&this.cacheControls.set(th(e),r.cacheControl),await (null==(n=this.cacheHandler)?void 0:n.set(e,t,r))}catch(t){console.warn("Failed to update prerender cache for",e,t)}}}function tv(e){if(0===e)return{get:()=>Promise.resolve(void 0),set:()=>Promise.resolve(),refreshTags:()=>Promise.resolve(),getExpiration:()=>Promise.resolve(0),updateTags:()=>Promise.resolve()};let t=new ek.q(e,e=>e.size),r=new Map,a=process.env.NEXT_PRIVATE_DEBUG_CACHE?console.debug.bind(console,"DefaultCacheHandler:"):void 0;return{async get(e){let n=r.get(e);n&&(null==a||a("get",e,"pending"),await n);let i=t.get(e);if(!i){null==a||a("get",e,"not found");return}let s=i.entry;if(performance.timeOrigin+performance.now()>s.timestamp+1e3*s.revalidate){null==a||a("get",e,"expired");return}let o=s.revalidate;if((0,tl.areTagsExpired)(s.tags,s.timestamp)){null==a||a("get",e,"had expired tag");return}(0,tl.areTagsStale)(s.tags,s.timestamp)&&(null==a||a("get",e,"had stale tag"),o=-1);let[l,c]=s.value.tee();return s.value=c,null==a||a("get",e,"found",{tags:s.tags,timestamp:s.timestamp,expire:s.expire,revalidate:o}),{...s,revalidate:o,value:l}},async set(e,n){null==a||a("set",e,"start");let i=()=>{},s=new Promise(e=>{i=e});r.set(e,s);let o=await n,l=0;try{let[r,n]=o.value.tee();o.value=r;let i=n.getReader();for(let e;!(e=await i.read()).done;)l+=Buffer.from(e.value).byteLength;t.set(e,{entry:o,isErrored:!1,errorRetryCount:0,size:l}),null==a||a("set",e,"done")}catch(t){null==a||a("set",e,"failed",t)}finally{i(),r.delete(e)}},async refreshTags(){},async getExpiration(e){let t=Math.max(...e.map(e=>{let t=tl.tagsManifest.get(e);return t&&t.expired||0}),0);return null==a||a("getExpiration",{tags:e,expiration:t}),t},async updateTags(e,t){let r=Math.round(performance.timeOrigin+performance.now());for(let n of(null==a||a("updateTags",{tags:e,timestamp:r}),e)){let e=tl.tagsManifest.get(n)||{};if(t){let a={...e};a.stale=r,void 0!==t.expire&&(a.expired=r+1e3*t.expire),tl.tagsManifest.set(n,a)}else tl.tagsManifest.set(n,{...e,expired:r})}}}}let ty=process.env.NEXT_PRIVATE_DEBUG_CACHE?(e,...t)=>{console.log(`use-cache: ${e}`,...t)}:void 0,tb=Symbol.for("@next/cache-handlers"),tE=Symbol.for("@next/cache-handlers-map"),tx=Symbol.for("@next/cache-handlers-set"),t_=globalThis;function tP(e){return e.default||e}let tR=Symbol.for("@next/router-server-methods"),tw=globalThis;function tC(e){var t,r;return(null==(r=e.has)||null==(t=r[0])?void 0:t.key)==="next-url"}let tS=e=>import(e).then(e=>e.default||e);class tO{constructor({userland:e,definition:t,distDir:r,relativeProjectDir:a}){this.userland=e,this.definition=t,this.isDev=!1,this.distDir=r,this.relativeProjectDir=a}getRouterServerContext(e){var t;let r=ev(e,"hostname"),a=ev(e,"revalidate"),n=ev(e,"render404"),i=ev(e,"relativeProjectDir")||this.relativeProjectDir;return{...null==(t=tw[tR])?void 0:t[i],...void 0!==r?{hostname:r}:{},...void 0!==a?{revalidate:a}:{},...void 0!==n?{render404:n}:{}}}normalizeUrl(e,t){}async instrumentationOnRequestError(e,...t){{let{join:r}=n("node:path"),a=r(process.cwd(),ev(e,"relativeProjectDir")||this.relativeProjectDir),{instrumentationOnRequestError:i}=await Promise.resolve().then(n.t.bind(n,"../lib/router-utils/instrumentation-globals.external.js",23));return i(a,this.distDir,...t)}}loadManifests(e,t){let r;{var a,i;let s;if(!t)throw Object.defineProperty(Error("Invariant: projectDir is required for node runtime"),"__NEXT_ERROR_CODE",{value:"E718",enumerable:!1,configurable:!0});let{loadManifestFromRelativePath:o}=n("../load-manifest.external"),l=eE(e),c=this.definition.kind===e6.PAGES||this.definition.kind===e6.PAGES_API?"pages":"app",[u,d,h,p,f,m,g,v,y,E,x,_]=[o({projectDir:t,distDir:this.distDir,manifest:"routes-manifest.json",shouldCache:!this.isDev}),o({projectDir:t,distDir:this.distDir,manifest:"prerender-manifest.json",shouldCache:!this.isDev}),o({projectDir:t,distDir:this.distDir,manifest:b,shouldCache:!this.isDev}),"/_error"===e?o({projectDir:t,distDir:this.distDir,manifest:`fallback-${b}`,shouldCache:!this.isDev,handleMissing:!0}):{},o({projectDir:t,distDir:this.distDir,manifest:`server/${"app"===c?"app":"pages"}${l}/react-loadable-manifest.json`,handleMissing:!0,shouldCache:!this.isDev}),o({projectDir:t,distDir:this.distDir,manifest:"server/next-font-manifest.json",shouldCache:!this.isDev}),"app"!==c||(s=(i=e).replace(/\/route$/,""),i.endsWith("/route")&&function(e,t,r){if(!e||e.length<2)return!1;let a=ex(e),n=!!(eS.test(a)||eO.test(a)||eT.test(a)||eA.test(a)||ej.test(a))||(!!a.includes("robots")||!!a.includes("manifest")||!!a.includes("sitemap")||!!a.includes("icon")||!!a.includes("apple-icon")||!!a.includes("opengraph-image")||!!a.includes("twitter-image")||!!a.includes("favicon"))&&null;if(null!==n)return n;let i=function(e,t){let r=`${e.join(",")}|${t}`,a=e$.get(r);if(a)return a;let n=t?"$":"?$",i="\\d?"+(t?"":"(-\\w{6})?"),s=e.length>0?[...e,"txt"]:["txt"],o=e.length>0?[...e,"webmanifest","json"]:["webmanifest","json"],l=[RegExp(`^[\\\\/]robots${eC(s,null)}${n}`),RegExp(`^[\\\\/]manifest${eC(o,null)}${n}`),RegExp(`[\\\\/]sitemap${eC(["xml"],e)}${n}`),RegExp(`[\\\\/]icon${i}${eC(e_,e)}${n}`),RegExp(`[\\\\/]apple-icon${i}${eC(eP,e)}${n}`),RegExp(`[\\\\/]opengraph-image${i}${eC(eR,e)}${n}`),RegExp(`[\\\\/]twitter-image${i}${eC(ew,e)}${n}`)];return e$.set(r,l),l}(t,r);for(let e=0;enew RegExp(e.regex))}}return r}async loadCustomCacheHandlers(e,t){{let{cacheMaxMemorySize:a,cacheHandlers:i}=t;if(!i||!function(e){if(t_[tE])return null==ty||ty("cache handlers already initialized"),!1;if(null==ty||ty("initializing cache handlers"),t_[tE]=new Map,t_[tb]){let t;t_[tb].DefaultCache?(null==ty||ty('setting "default" cache handler from symbol'),t=t_[tb].DefaultCache):(null==ty||ty('setting "default" cache handler from default'),t=tv(e)),t_[tE].set("default",t),t_[tb].RemoteCache?(null==ty||ty('setting "remote" cache handler from symbol'),t_[tE].set("remote",t_[tb].RemoteCache)):(null==ty||ty('setting "remote" cache handler from default'),t_[tE].set("remote",t))}else{let t=tv(e);null==ty||ty('setting "default" cache handler from default'),t_[tE].set("default",t),null==ty||ty('setting "remote" cache handler from default'),t_[tE].set("remote",t)}return t_[tx]=new Set(t_[tE].values()),!0}(a))return;for(let[t,a]of Object.entries(i)){if(!a)continue;let{formatDynamicImportPath:i}=n("./dist/esm/lib/format-dynamic-import-path.js"),{join:s}=n("node:path"),o=s(process.cwd(),ev(e,"relativeProjectDir")||this.relativeProjectDir);var r=tP(await tS(i(`${o}/${this.distDir}`,a)));if(!t_[tE]||!t_[tx])throw Object.defineProperty(Error("Cache handlers not initialized"),"__NEXT_ERROR_CODE",{value:"E649",enumerable:!1,configurable:!0});null==ty||ty('setting cache handler for "%s"',t),t_[tE].set(t,r),t_[tx].add(r)}}}async getIncrementalCache(e,t,r,a){{let i,{cacheHandler:s}=t;if(s){let{formatDynamicImportPath:e}=n("./dist/esm/lib/format-dynamic-import-path.js");i=tP(await tS(e(this.distDir,s)))}let{join:o}=n("node:path"),l=o(process.cwd(),ev(e,"relativeProjectDir")||this.relativeProjectDir);await this.loadCustomCacheHandlers(e,t);let c=new tg({fs:n("./dist/esm/server/lib/node-fs-methods.js").e,dev:this.isDev,requestHeaders:e.headers,allowedRevalidateHeaderKeys:t.experimental.allowedRevalidateHeaderKeys,minimalMode:a,serverDistDir:`${l}/${this.distDir}/server`,fetchCacheKeyPrefix:t.experimental.fetchCacheKeyPrefix,maxMemoryCacheSize:t.cacheMaxMemorySize,flushToDisk:!a&&t.experimental.isrFlushToDisk,getPrerenderManifest:()=>r,CurCacheHandler:i});return globalThis.__incrementalCache=c,c}}async onRequestError(e,t,r,a,n){a||((null==n?void 0:n.logErrorWithOriginalStack)?n.logErrorWithOriginalStack(t,"app-dir"):console.error(t)),await this.instrumentationOnRequestError(e,t,{path:e.url||"/",headers:e.headers,method:e.method||"GET"},r)}getNextConfigEdge(e){throw Object.defineProperty(Error("Invariant: getNextConfigEdge must only be called in edge runtime"),"__NEXT_ERROR_CODE",{value:"E968",enumerable:!1,configurable:!0})}async prepare(e,t,{srcPage:r,multiZoneDraftMode:a}){var i,s;let o,l,c,u,d;{t&&function(e,t){if(t[eb])return;let r=t.setHeader.bind(t);Object.defineProperty(t,eb,{value:!0}),t.setHeader=(a,n)=>{if("headersSent"in t&&t.headersSent)return t;if("set-cookie"===a.toLowerCase()){let t=ev(e,"middlewareCookie");t&&Array.isArray(n)&&n.every((e,r)=>e===t[r])||(n=[...new Set([...t||[],..."string"==typeof n?[n]:Array.isArray(n)?n:[]])])}return r(a,n)}}(e,t);let{join:r,relative:a}=n("node:path");o=r(process.cwd(),ev(e,"relativeProjectDir")||this.relativeProjectDir);let i=ev(e,"distDir");i&&(this.distDir=a(o,i));let{ensureInstrumentationRegistered:s}=await Promise.resolve().then(n.t.bind(n,"../lib/router-utils/instrumentation-globals.external.js",23));s(o,this.distDir)}let h=this.loadManifests(r,o),{routesManifest:p,prerenderManifest:f,serverFilesManifest:m}=h,{basePath:g,i18n:v,rewrites:y}=p,b=this.getRouterServerContext(e),x=(null==b?void 0:b.nextConfig)||(null==m?void 0:m.config),P=(null==(i=e.headers["x-forwarded-proto"])?void 0:i.includes("https"))?"https":"http";if(!ev(e,"initURL")){let t=(null==m?void 0:m.config.experimental.trustHostHeader)?`${P}://${e.headers.host||"localhost"}${e.url}`:`${P}://${(null==b?void 0:b.hostname)||"localhost"}${e.url}`;ey(e,"initURL",t),ey(e,"initProtocol",P)}g&&(e.url=D(e.url||"/",g));let O=E(e.url||"/");if(ey(e,"initQuery",{...null==O?void 0:O.query}),!O)return;let T=!1;$(O.pathname||"/","/_next/data")&&(T=!0,O.pathname=em(O.pathname||"/")),this.normalizeUrl(e,O);let j=O.pathname||"/",I={...O.query},M=A(r);v&&(l=_(O.pathname||"/",v.locales)).detectedLocale&&(e.url=`${l.pathname}${O.search}`,j=l.pathname,c||(c=l.detectedLocale));let H=R(r),z=function({page:e,i18n:t,basePath:r,rewrites:a,pageIsDynamic:n,trailingSlash:i,caseSensitive:s}){let o,l,c;if(n){var u;let t,r;r=(t=function(e,t,r,a,n,i={names:{},intercepted:{}}){let s,o=(s=0,()=>{let e="",t=++s;for(;t>0;)e+=String.fromCharCode(97+(t-1)%26),t=Math.floor((t-1)/26);return e}),l={},c=[],u=[];for(let s of(i=structuredClone(i),L(e).slice(1).split("/"))){let e,d=C.some(e=>s.startsWith(e)),h=s.match(U),p=d?h?.[1]:void 0;if(p&&h?.[2]?(e=t?k.h:void 0,i.intercepted[h[2]]=p):e=h?.[2]&&i.intercepted[h[2]]?t?k.h:void 0:t?k.AA:void 0,p&&h&&h[2]){let{key:t,pattern:r,cleanedKey:a,repeat:s,optional:d}=G({getSafeRouteKey:o,interceptionMarker:p,segment:h[2],routeKeys:l,keyPrefix:e,backreferenceDuplicateKeys:n});c.push(r),u.push(`/${h[1]}:${i.names[t]??a}${s?d?"*":"+":""}`),i.names[t]??=a}else if(h&&h[2]){a&&h[1]&&(c.push(`/${F(h[1])}`),u.push(`/${h[1]}`));let{key:t,pattern:r,cleanedKey:s,repeat:d,optional:p}=G({getSafeRouteKey:o,segment:h[2],routeKeys:l,keyPrefix:e,backreferenceDuplicateKeys:n}),f=r;a&&h[1]&&(f=f.substring(1)),c.push(f),u.push(`/:${i.names[t]??s}${d?p?"*":"+":""}`),i.names[t]??=s}else c.push(`/${F(s)}`),u.push(`/${s}`);r&&h&&h[3]&&(c.push(F(h[3])),u.push(h[3]))}return{namedParameterizedRoute:c.join(""),routeKeys:l,pathToRegexpPattern:u.join(""),reference:i}}(e,(u={prefixRouteKeys:!1}).prefixRouteKeys,u.includeSuffix??!1,u.includePrefix??!1,u.backreferenceDuplicateKeys??!1,u.reference)).namedParameterizedRoute,u.excludeOptionalTrailingSlash||(r+="(?:/)?"),c=(l=er(o={...q(e,u),namedRegex:`^${r}$`,routeKeys:t.routeKeys,pathToRegexpPattern:t.pathToRegexpPattern,reference:t.reference}))(e)}return{handleRewrites:function(o,c){let u=structuredClone(c),d={},h=u.pathname,p=a=>{var c,p;let f,m,g,v=(c=a.source+(i?"(/)?":""),p={removeUnnamedParams:!0,strict:!0,sensitive:!!s},f=[],m=(0,N.pathToRegexp)(c,f,{delimiter:"/",sensitive:"boolean"==typeof p?.sensitive&&p.sensitive,strict:p?.strict}),g=(0,N.regexpToFunction)(p?.regexModifier?new RegExp(p.regexModifier(m.source),m.flags):m,f),(e,t)=>{if("string"!=typeof e)return!1;let r=g(e);if(!r)return!1;if(p?.removeUnnamedParams)for(let e of f)"number"==typeof e.name&&delete r.params[e.name];return{...t,...r.params}});if(!u.pathname)return!1;let y=v(u.pathname);if((a.has||a.missing)&&y){let e=function(e,t,r=[],a=[]){let n={},i=r=>{let a,i=r.key;switch(r.type){case"header":i=i.toLowerCase(),a=e.headers[i];break;case"cookie":a="cookies"in e?e.cookies[r.key]:ei(e.headers)()[r.key];break;case"query":a=t[i];break;case"host":{let{host:t}=e?.headers||{};a=t?.split(":",1)[0].toLowerCase()}}if(!r.value&&a)return n[function(e){let t="";for(let r=0;r64&&a<91||a>96&&a<123)&&(t+=e[r])}return t}(i)]=a,!0;if(a){let e=RegExp(`^${r.value}$`),t=Array.isArray(a)?a.slice(-1)[0].match(e):a.match(e);if(t)return Array.isArray(t)&&(t.groups?Object.keys(t.groups).forEach(e=>{n[e]=t.groups[e]}):"host"===r.type&&t[0]&&(n.host=t[0])),!0}return!1};return!(!r.every(e=>i(e))||a.some(e=>i(e)))&&n}(o,u.query,a.has,a.missing);e?Object.assign(y,e):y=!1}if(y){let{parsedDestination:i,destQuery:s}=function(e){let t,r,a=function(e){let t=e.destination;for(let r of Object.keys({...e.params,...e.query}))r&&(t=t.replace(RegExp(`:${F(r)}`,"g"),`__ESC_COLON_${r}`));let r=function(e){if(e.startsWith("/"))return function(e,t,r=!0){let a=new URL("http://n"),n=e.startsWith(".")?new URL("http://n"):a,{pathname:i,searchParams:s,search:o,hash:l,href:c,origin:u}=e.startsWith("/")?new URL(`${n.protocol}//${n.host}${e}`):new URL(e,n);if(u!==a.origin)throw Object.defineProperty(Error(`invariant: invalid relative URL, router received ${e}`),"__NEXT_ERROR_CODE",{value:"E159",enumerable:!1,configurable:!0});return{auth:null,host:null,hostname:null,pathname:i,port:null,protocol:null,query:r?ea(s):void 0,search:o,hash:l,href:c.slice(u.length),slashes:null}}(e);let t=new URL(e),r=t.username,a=t.password,n=r?a?`${r}:${a}`:r:null,i=t.pathname,s=t.search;return{auth:n,hash:t.hash,hostname:t.hostname,href:t.href,pathname:i,port:t.port,protocol:t.protocol,query:ea(t.searchParams),search:s,origin:t.origin,slashes:"//"===t.href.slice(t.protocol.length,t.protocol.length+2)}}(t),a=r.pathname;a&&(a=es(a));let n=r.href;n&&(n=es(n));let i=r.hostname;i&&(i=es(i));let s=r.hash;s&&(s=es(s));let o=r.search;o&&(o=es(o));let l=r.origin;return l&&(l=es(l)),{...r,pathname:a,hostname:i,href:n,hash:s,search:o,origin:l}}(e),{hostname:n,query:i,search:s}=a,o=a.pathname;a.hash&&(o=`${o}${a.hash}`);let l=[],c=[];for(let e of(ee(o,c),c))l.push(e.name);if(n){let e=[];for(let t of(ee(n,e),e))l.push(t.name)}let u=et(o,{validate:!1});for(let[r,a]of(n&&(t=et(n,{validate:!1})),Object.entries(i)))Array.isArray(a)?i[r]=a.map(t=>eo(es(t),e.params)):"string"==typeof a&&(i[r]=eo(es(a),e.params));let d=Object.keys(e.params).filter(e=>"nextInternalLocale"!==e);if(e.appendParamsToQuery&&!d.some(e=>l.includes(e)))for(let t of d)t in i||(i[t]=e.params[t]);if(S(o))for(let t of o.split("/")){let r=C.find(e=>t.startsWith(e));if(r){"(..)(..)"===r?(e.params["0"]="(..)",e.params["1"]="(..)"):e.params["0"]=r;break}}try{let[n,i]=(r=u(e.params)).split("#",2);t&&(a.hostname=t(e.params)),a.pathname=n,a.hash=`${i?"#":""}${i||""}`,a.search=s?eo(s,e.params):""}catch(e){if(e.message.match(/Expected .*? to not repeat, but got an array/))throw Object.defineProperty(Error("To use a multi-match in the destination you must add `*` at the end of the param name to signify it should repeat. https://nextjs.org/docs/messages/invalid-multi-match"),"__NEXT_ERROR_CODE",{value:"E329",enumerable:!1,configurable:!0});throw e}return a.query={...e.query,...a.query},{newUrl:r,destQuery:i,parsedDestination:a}}({appendParamsToQuery:!0,destination:a.destination,params:y,query:u.query});if(i.protocol)return!0;if(Object.assign(d,s,y),Object.assign(u.query,i.query),delete i.query,Object.assign(u,i),!(h=u.pathname))return!1;if(r&&(h=h.replace(RegExp(`^${r}`),"")||"/"),t){let e=_(h,t.locales);h=e.pathname,u.query.nextInternalLocale=e.detectedLocale||y.nextInternalLocale}if(h===e)return!0;if(n&&l){let e=l(h);if(e)return u.query={...u.query,...e},!0}}return!1};for(let e of a.beforeFiles||[])p(e);if(h!==e){let t,r=!1;for(let e of a.afterFiles||[])if(r=p(e))break;if(!r&&!((t=L(h||""))===L(e)||(null==l?void 0:l(t)))){for(let e of a.fallback||[])if(r=p(e))break}}return{rewriteParams:d,rewrittenParsedUrl:u}},defaultRouteRegex:o,dynamicRouteMatcher:l,defaultRouteMatches:c,normalizeQueryParams:function(e,t){for(let[r,a]of(delete e.nextInternalLocale,Object.entries(e))){let n=el(r);n&&(delete e[r],t.add(n),void 0!==a&&(e[n]=Array.isArray(a)?a.map(e=>ec(e)):ec(a)))}},getParamsFromRouteMatches:function(e){if(!o)return null;let{groups:t,routeKeys:r}=o,a=er({re:{exec:e=>{let a=Object.fromEntries(new URLSearchParams(e));for(let[e,t]of Object.entries(a)){let r=el(e);r&&(a[r]=t,delete a[e])}let n={};for(let e of Object.keys(r)){let i=r[e];if(!i)continue;let s=t[i],o=a[e];if(!s.optional&&!o)return null;n[s.pos]=o}return n}},groups:t})(e);return a||null},normalizeDynamicRouteParams:(e,t)=>o&&c?function(e,t,r,a){let n=(e,t)=>{if(!e)return!1;let r=w(e);for(let e=0;e<3;e++){if(r===t)return!0;let e=ec(r);if(e===r)break;r=e}return!1},i={};for(let s of Object.keys(t.groups)){let o=e[s];"string"==typeof o?o=w(o):Array.isArray(o)&&(o=o.map(w));let l=r[s],c=t.groups[s].optional;if((Array.isArray(l)?l.some(e=>Array.isArray(o)?o.some(t=>n(t,e)):n(o,e)):Array.isArray(o)?o.some(e=>n(e,l)):n(o,l))||void 0===o&&!(c&&a))return{params:{},hasValidParams:!1};c&&(!o||Array.isArray(o)&&1===o.length&&("index"===o[0]||o[0]===`[[...${s}]]`)||"index"===o||o===`[[...${s}]]`)&&(o=void 0,delete e[s]),o&&"string"==typeof o&&t.groups[s].repeat&&(o=o.split("/")),o&&(i[s]=o)}return{params:i,hasValidParams:!0}}(e,o,c,t):{params:{},hasValidParams:!1},normalizeCdnUrl:(e,t)=>(function(e,t){let r=E(e.url);if(!r)return e.url;delete r.search,ed(r.query,t),e.url=function(e){let{auth:t,hostname:r}=e,a=e.protocol||"",n=e.pathname||"",i=e.hash||"",s=e.query||"",o=!1;t=t?encodeURIComponent(t).replace(/%3A/i,":")+"@":"",e.host?o=t+e.host:r&&(o=t+(~r.indexOf(":")?`[${r}]`:r),e.port&&(o+=":"+e.port)),s&&"object"==typeof s&&(s=String(function(e){let t=new URLSearchParams;for(let[r,a]of Object.entries(e))if(Array.isArray(a))for(let e of a)t.append(r,en(e));else t.set(r,en(a));return t}(s)));let l=e.search||s&&`?${s}`||"";return a&&!a.endsWith(":")&&(a+=":"),e.slashes||(!a||eu.test(a))&&!1!==o?(o="//"+(o||""),n&&"/"!==n[0]&&(n="/"+n)):o||(o=""),i&&"#"!==i[0]&&(i="#"+i),l&&"?"!==l[0]&&(l="?"+l),n=n.replace(/[?#]/g,encodeURIComponent),l=l.replace("#","%23"),`${a}${o}${n}${l}${i}`}(r)})(e,t),interpolateDynamicPath:(e,t)=>(function(e,t,r){if(!r)return e;for(let a of Object.keys(r.groups)){let n,{optional:i,repeat:s}=r.groups[a],o=`[${s?"...":""}${a}]`;i&&(o=`[${o}]`);let l=t[a];((n=Array.isArray(l)?l.map(e=>e&&encodeURIComponent(e)).join("/"):l?encodeURIComponent(l):"")||i)&&(e=e.replaceAll(o,n))}return e})(e,t,o),filterInternalQuery:(e,t)=>ed(e,t)}}({page:H,i18n:v,basePath:g,rewrites:y,pageIsDynamic:M,trailingSlash:process.env.__NEXT_TRAILING_SLASH,caseSensitive:!!p.caseSensitive}),X=eh(null==v?void 0:v.domains,ep(O,e.headers),c);X&&ey(e,"isLocaleDomain",!!X);let B=ev(e,"defaultLocale")||(null==X?void 0:X.defaultLocale)||(null==v?void 0:v.defaultLocale);B&&!c&&(O.pathname=`/${B}${"/"===O.pathname?"":O.pathname}`);let W=ev(e,"locale")||c||B,{rewriteParams:J,rewrittenParsedUrl:K}=z.handleRewrites(e,O),Z=Object.keys(J);Object.assign(O.query,K.query),v&&(O.pathname=_(O.pathname||"/",v.locales).pathname,K.pathname=_(K.pathname||"/",v.locales).pathname);let Y=ev(e,"params");if(!Y&&z.dynamicRouteMatcher){let e=z.dynamicRouteMatcher(em((null==K?void 0:K.pathname)||O.pathname||"/")),t=z.normalizeDynamicRouteParams(e||{},!0);t.hasValidParams&&(Y=t.params)}let Q=ev(e,"query")||{...O.query},eg=new Set,eE=[];if(this.definition.kind===e6.PAGES||this.definition.kind===e6.PAGES_API)for(let e of[...Z,...Object.keys(z.defaultRouteMatches||{})]){let t=Array.isArray(I[e])?I[e].join(""):I[e],r=Array.isArray(Q[e])?Q[e].join(""):Q[e];e in I&&t!==r||eE.push(e)}if(z.normalizeCdnUrl(e,eE),(null==b?void 0:b.isWrappedByNextServer)?z.filterInternalQuery(Q,[]):z.normalizeQueryParams(Q,eg),z.filterInternalQuery(I,eE),M){let t,r=z.normalizeDynamicRouteParams(Q,!0),a=z.normalizeDynamicRouteParams(Y||{},!0);if(Q&&Y&&a.hasValidParams&&r.hasValidParams&&eg.size>0&&Object.keys(a.params).length<=Object.keys(r.params).length?(t=r.params,Y=Object.assign(r.params)):t=a.hasValidParams&&Y?Y:r.hasValidParams?Q:{},e.url=z.interpolateDynamicPath(e.url||"/",t),O.pathname=z.interpolateDynamicPath(O.pathname||"/",t),j=z.interpolateDynamicPath(j,t),!Y)if(r.hasValidParams)for(let e in Y=Object.assign({},r.params),z.defaultRouteMatches)delete Q[e];else{let e=null==z.dynamicRouteMatcher?void 0:z.dynamicRouteMatcher.call(z,em((null==l?void 0:l.pathname)||O.pathname||"/"));e&&(Y=Object.assign({},e))}}for(let e of eg)e in I?I[e]&&Q[e]&&I[e]!==Q[e]&&(Q[e]=I[e]):delete Q[e];let{isOnDemandRevalidate:ex,revalidateOnlyGenerated:e_}=(0,ef.Gx)(e,f.preview),eP=!1;if(t){let{tryGetPreviewData:r}=n("./dist/esm/server/api-utils/node/try-get-preview-data.js");eP=!1!==(u=r(e,t,f.preview,!!a))}if(!x)throw Object.defineProperty(Error("Invariant: nextConfig couldn't be loaded"),"__NEXT_ERROR_CODE",{value:"E969",enumerable:!1,configurable:!0});{let{installProcessErrorHandlers:e}=n("./dist/esm/server/node-environment-extensions/process-error-handlers.js");e(!!x.experimental.removeUncaughtErrorAndRejectionListeners)}let eR=H;A(eR)&&Y&&(eR=z.interpolateDynamicPath(eR,Y)),"/index"===eR&&(eR="/"),t&&e.headers["x-nextjs-data"]&&(!t.statusCode||200===t.statusCode)&&t.setHeader("x-nextjs-matched-path",L(`${W?`/${W}`:""}${H}`));let ew=eR;try{eR=eR.split("/").map(e=>{try{var t;t=decodeURIComponent(e),e=t.replace(RegExp("([/#?]|%(2f|23|3f|5c))","gi"),e=>encodeURIComponent(e))}catch(e){throw Object.defineProperty(new V("Failed to decode path param(s)."),"__NEXT_ERROR_CODE",{value:"E539",enumerable:!1,configurable:!0})}return e}).join("/")}catch(e){}if(ey(e,"resolvedPathname",eR=L(eR)),null==(s=x.experimental)?void 0:s.runtimeServerDeploymentId){if(!process.env.NEXT_DEPLOYMENT_ID)throw Object.defineProperty(Error("process.env.NEXT_DEPLOYMENT_ID is missing but runtimeServerDeploymentId is enabled"),"__NEXT_ERROR_CODE",{value:"E970",enumerable:!1,configurable:!0});d=process.env.NEXT_DEPLOYMENT_ID}else d=x.deploymentId||"";return{query:Q,originalQuery:I,originalPathname:j,params:Y,parsedUrl:O,locale:W,isNextDataRequest:T,locales:null==v?void 0:v.locales,defaultLocale:B,isDraftMode:eP,previewData:u,pageIsDynamic:M,resolvedPathname:eR,encodedResolvedPathname:ew,isOnDemandRevalidate:ex,revalidateOnlyGenerated:e_,...h,nextConfig:x,routerServerContext:b,deploymentId:d,clientAssetToken:x.experimental.immutableAssetToken||d}}getResponseCache(e){if(!this.responseCache){let t=ev(e,"minimalMode")??!1;this.responseCache=new ti(t)}return this.responseCache}async handleResponse({req:e,nextConfig:t,cacheKey:r,routeKind:a,isFallback:n,prerenderManifest:i,isRoutePPREnabled:s,isOnDemandRevalidate:o,revalidateOnlyGenerated:l,responseGenerator:c,waitUntil:u,isMinimalMode:d}){let h=this.getResponseCache(e),p=await h.get(r,c,{routeKind:a,isFallback:n,isRoutePPREnabled:s,isOnDemandRevalidate:o,isPrefetch:"prefetch"===e.headers.purpose,invocationID:e.headers["x-invocation-id"],incrementalCache:await this.getIncrementalCache(e,t,i,d),waitUntil:u});if(!p&&r&&!(o&&l))throw Object.defineProperty(Error("invariant: cache entry required but not generated"),"__NEXT_ERROR_CODE",{value:"E62",enumerable:!1,configurable:!0});return p}}let tT=require("react/jsx-runtime"),tA=require("react");var tj=n.n(tA),t$=n("./dist/server/ReactDOMServerPages.js"),tD=n.n(t$);let tN=require("styled-jsx");function tk(e){return Object.prototype.toString.call(e)}function tI(e){if("[object Object]"!==tk(e))return!1;let t=Object.getPrototypeOf(e);return null===t||t.hasOwnProperty("isPrototypeOf")}let tM=/^[A-Za-z_$][A-Za-z0-9_$]*$/;class tF extends Error{constructor(e,t,r,a){super(r?`Error serializing \`${r}\` returned from \`${t}\` in "${e}". +Reason: ${a}`:`Error serializing props returned from \`${t}\` in "${e}". +Reason: ${a}`)}}function tL(e,t,r){if(!tI(r))throw Object.defineProperty(new tF(e,t,"",`Props must be returned as a plain object from ${t}: \`{ props: { ... } }\` (received: \`${tk(r)}\`).`),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});function a(r,a,n){if(r.has(a))throw Object.defineProperty(new tF(e,t,n,`Circular references cannot be expressed in JSON (references: \`${r.get(a)||"(self)"}\`).`),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});r.set(a,n)}return function r(n,i,s){let o=typeof i;if(null===i||"boolean"===o||"number"===o||"string"===o)return!0;if("undefined"===o)throw Object.defineProperty(new tF(e,t,s,"`undefined` cannot be serialized as JSON. Please use `null` or omit this value."),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});if(tI(i)){if(a(n,i,s),Object.entries(i).every(([e,t])=>{let a=tM.test(e)?`${s}.${e}`:`${s}[${JSON.stringify(e)}]`,i=new Map(n);return r(i,e,a)&&r(i,t,a)}))return!0;throw Object.defineProperty(new tF(e,t,s,"invariant: Unknown error encountered in Object."),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0})}if(Array.isArray(i)){if(a(n,i,s),i.every((e,t)=>r(new Map(n),e,`${s}[${t}]`)))return!0;throw Object.defineProperty(new tF(e,t,s,"invariant: Unknown error encountered in Array."),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0})}throw Object.defineProperty(new tF(e,t,s,"`"+o+"`"+("object"===o?` ("${Object.prototype.toString.call(i)}")`:"")+" cannot be serialized as JSON. Please only return JSON serializable data types."),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0})}(new Map,r,"")}let tH=tj().createContext({}),tU=tj().createContext(null),tz=[],tq=[];function tG(e){let t=e(),r={loading:!0,loaded:null,error:null};return r.promise=t.then(e=>(r.loading=!1,r.loaded=e,e)).catch(e=>{throw r.loading=!1,r.error=e,e}),r}class tX{constructor(e,t){this._loadFn=e,this._opts=t,this._callbacks=new Set,this._delay=null,this._timeout=null,this.retry()}promise(){return this._res.promise}retry(){this._clearTimeouts(),this._res=this._loadFn(this._opts.loader),this._state={pastDelay:!1,timedOut:!1};let{_res:e,_opts:t}=this;e.loading&&("number"==typeof t.delay&&(0===t.delay?this._state.pastDelay=!0:this._delay=setTimeout(()=>{this._update({pastDelay:!0})},t.delay)),"number"==typeof t.timeout&&(this._timeout=setTimeout(()=>{this._update({timedOut:!0})},t.timeout))),this._res.promise.then(()=>{this._update({}),this._clearTimeouts()}).catch(e=>{this._update({}),this._clearTimeouts()}),this._update({})}_update(e){this._state={...this._state,error:this._res.error,loaded:this._res.loaded,loading:this._res.loading,...e},this._callbacks.forEach(e=>e())}_clearTimeouts(){clearTimeout(this._delay),clearTimeout(this._timeout)}getCurrentValue(){return this._state}subscribe(e){return this._callbacks.add(e),()=>{this._callbacks.delete(e)}}}function tB(e){let t=Object.assign({loader:null,loading:null,delay:200,timeout:null,webpack:null,modules:null},e),r=null;function a(){if(!r){let e=new tX(tG,t);r={getCurrentValue:e.getCurrentValue.bind(e),subscribe:e.subscribe.bind(e),retry:e.retry.bind(e),promise:e.promise.bind(e)}}return r.promise()}function n(e,n){let i;a(),(i=tj().useContext(tU))&&Array.isArray(t.modules)&&t.modules.forEach(e=>{i(e)});let s=tj().useSyncExternalStore(r.subscribe,r.getCurrentValue,r.getCurrentValue);return tj().useImperativeHandle(n,()=>({retry:r.retry}),[]),tj().useMemo(()=>{var a;return s.loading||s.error?tj().createElement(t.loading,{isLoading:s.loading,pastDelay:s.pastDelay,timedOut:s.timedOut,error:s.error,retry:r.retry}):s.loaded?tj().createElement((a=s.loaded)&&a.default?a.default:a,e):null},[e,s])}return tz.push(a),n.preload=()=>a(),n.displayName="LoadableComponent",tj().forwardRef(n)}function tW(e,t){let r=[];for(;e.length;){let a=e.pop();r.push(a(t))}return Promise.all(r).then(()=>{if(e.length)return tW(e,t)})}tB.preloadAll=()=>new Promise((e,t)=>{tW(tz).then(e,t)}),tB.preloadReady=(e=[])=>new Promise(t=>{let r=()=>t();tW(tq,e).then(r,r)});let tV=tB,tJ=tj().createContext(null),tK=(0,tA.createContext)(void 0);function tZ(){let e=(0,tA.useContext)(tK);if(!e)throw Object.defineProperty(Error(` should not be imported outside of pages/_document. +Read more: https://nextjs.org/docs/messages/no-document-import-in-page`),"__NEXT_ERROR_CODE",{value:"E67",enumerable:!1,configurable:!0});return e}var tY=((l={})[l.SeeOther=303]="SeeOther",l[l.TemporaryRedirect=307]="TemporaryRedirect",l[l.PermanentRedirect=308]="PermanentRedirect",l);let tQ=new Set([301,302,303,307,308]);function t0(e){return e.statusCode||(e.permanent?tY.PermanentRedirect:tY.TemporaryRedirect)}let t1=tj().createContext({deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[32,48,64,96,128,256,384],path:"/_next/image",loader:"default",loaderFile:"",domains:[],disableStaticImages:!1,minimumCacheTTL:14400,formats:["image/webp"],maximumDiskCacheSize:void 0,maximumRedirects:3,maximumResponseBody:5e7,dangerouslyAllowLocalIP:!1,dangerouslyAllowSVG:!1,contentSecurityPolicy:"script-src 'none'; frame-src 'none'; sandbox;",contentDispositionType:"attachment",localPatterns:void 0,remotePatterns:[],qualities:[75],unoptimized:!1,customCacheHandler:!1});var t2=n("./dist/compiled/strip-ansi/index.js"),t3=n.n(t2);let t4=["_rsc"];class t9 extends Error{constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams")}}class t8 extends URLSearchParams{append(){throw new t9}delete(){throw new t9}set(){throw new t9}sort(){throw new t9}}let t6=(0,tA.createContext)(null),t5=(0,tA.createContext)(null),t7=(0,tA.createContext)(null),re=(0,tA.createContext)(null);function rt(e,t){let r=Promise.resolve(t);return r.status="fulfilled",r.value=t,r.displayName=`${e} (SSR)`,r}function rr({children:e,router:t,...r}){let a=(0,tA.useRef)(r.isAutoExport),n=(0,tA.useMemo)(()=>{let e,r=a.current;if(r&&(a.current=!1),A(t.pathname)&&(t.isFallback||r&&!t.isReady))return null;try{e=new URL(t.asPath,"http://f")}catch(e){return"/"}return e.pathname},[t.asPath,t.isFallback,t.isReady,t.pathname]);return(0,tT.jsx)(t5.Provider,{value:n,children:e})}let ra=tj().createContext(null),rn=tj().createContext(null),ri=tj().createContext(null),rs=tj().createContext(null),ro=tj().createContext(new Set),rl=Symbol.for("NextjsError"),rc=/^'nonce-([A-Za-z0-9+/_-]+={0,2})'$/,ru="";function rd(){throw Object.defineProperty(Error('No router instance found. you should only use "next/router" inside the client side of your app. https://nextjs.org/docs/messages/no-router-instance'),"__NEXT_ERROR_CODE",{value:"E1027",enumerable:!1,configurable:!0})}async function rh(e){let t=await tD().renderToReadableStream(e);return await t.allReady,eB(t)}e=n("./dist/esm/server/api-utils/node/try-get-preview-data.js").tryGetPreviewData,t=n("./dist/esm/build/output/log.js").R8,r=n("./dist/esm/server/post-process.js").F;class rp{constructor(e,t,r,{isFallback:a},n,i,s,o,l,c,u,d){this.route=e.replace(/\/$/,"")||"/",this.pathname=e,this.query=t,this.asPath=r,this.isFallback=a,this.basePath=i,this.locale=s,this.locales=o,this.defaultLocale=l,this.isReady=n,this.domainLocales=c,this.isPreview=!!u,this.isLocaleDomain=!!d}push(){rd()}replace(){rd()}reload(){rd()}back(){rd()}forward(){rd()}prefetch(){rd()}beforePopState(){rd()}}function rf(e,t,r){return(0,tT.jsx)(e,{Component:t,...r})}let rm=(e,t)=>{let r=`invalid-${e.toLocaleLowerCase()}-value`;return`Additional keys were returned from \`${e}\`. Properties intended for your component must be nested under the \`props\` key, e.g.: + + return { props: { title: 'My Title', content: '...' } } + +Keys that need to be moved: ${t.join(", ")}. +Read more: https://nextjs.org/docs/messages/${r}`};function rg(e,t,r){let{destination:a,permanent:n,statusCode:i,basePath:s}=e,o=[],l=void 0!==i,c=void 0!==n;c&&l?o.push("`permanent` and `statusCode` can not both be provided"):c&&"boolean"!=typeof n?o.push("`permanent` must be `true` or `false`"):l&&!tQ.has(i)&&o.push(`\`statusCode\` must undefined or one of ${[...tQ].join(", ")}`);let u=typeof a;"string"!==u&&o.push(`\`destination\` should be string but received ${u}`);let d=typeof s;if("undefined"!==d&&"boolean"!==d&&o.push(`\`basePath\` should be undefined or a false, received ${d}`),o.length>0)throw Object.defineProperty(Error(`Invalid redirect object returned from ${r} for ${t.url} +`+o.join(" and ")+"\nSee more info here: https://nextjs.org/docs/messages/invalid-redirect-gssp"),"__NEXT_ERROR_CODE",{value:"E185",enumerable:!1,configurable:!0})}async function rv(a,n,i,s,o,l,c,u){let d,h,p;(0,ef.C4)({req:a},"cookies",ei(a.headers));let f="",m=c.deploymentId?`?dpl=${c.deploymentId}`:"",g=c.clientAssetToken?`?dpl=${c.clientAssetToken}`:"",v=f+(c.clientAssetToken?`${f?"&":"?"}dpl=${c.clientAssetToken}`:""),y={};s=Object.assign({},s);let{err:b,pageConfig:E={},buildManifest:x,reactLoadableManifest:_,ErrorDebug:P,getStaticProps:R,getStaticPaths:w,getServerSideProps:C,isNextDataRequest:S,params:O,previewProps:T,basePath:j,images:$,runtime:D,isExperimentalCompile:N,expireTime:I}=o,{App:M}=l,F=l.Document,L=o.Component,H=u.isFallback??!1;u.developmentNotFoundSourcePage;var U=s;for(let e of t4)delete U[e];let z=!!R,G=z&&o.isBuildTimePrerendering,V=M.getInitialProps===M.origGetInitialProps,J=!!(null==L?void 0:L.getInitialProps),K=null==L?void 0:L.unstable_scriptLoader,Z=A(i),Y="/_error"===i&&L.getInitialProps===L.origGetInitialProps;o.isBuildTimePrerendering&&J&&!Y&&t(`Detected getInitialProps on page '${i}' while running export. It's recommended to use getStaticProps which has a more correct behavior for static exporting. +Read more: https://nextjs.org/docs/messages/get-initial-props-export`);let Q=!J&&V&&!z&&!C;if(Q&&N&&(n.setHeader("Cache-Control",function({revalidate:e,expire:t}){let r="number"==typeof e&&void 0!==t&&e"beforeInteractive"===e.props.strategy).map(e=>e.props));let eu=a.headers["content-security-policy"]||a.headers["content-security-policy-report-only"],ed="string"==typeof eu?function(e){let t=e.split(";").map(e=>e.trim()),r=t.find(e=>e.startsWith("script-src"))||t.find(e=>e.startsWith("default-src"));if(r)for(let e of r.split(/\s+/).slice(1)){let t=e.trim().match(rc);if(t)return t[1]}}(eu):void 0,eh=({children:e})=>{var t;return(0,tT.jsx)(ra.Provider,{value:ea,children:(0,tT.jsx)(t6.Provider,{value:(t=er).isReady&&t.query?new URL(t.asPath,"http://n").searchParams:new URLSearchParams,children:(0,tT.jsx)(rr,{router:er,isAutoExport:Q,children:(0,tT.jsx)(t7.Provider,{value:function(e){if(!e.isReady||!e.query)return null;let t={};for(let r of Object.keys(q(e.pathname).groups))t[r]=e.query[r];return t}(er),children:(0,tT.jsx)(tJ.Provider,{value:er,children:(0,tT.jsx)(tH.Provider,{value:{updateHead:e=>{eo=e},updateScripts:e=>{en=e},scripts:ec,mountedInstances:new Set,nonce:ed},children:(0,tT.jsx)(tU.Provider,{value:e=>el.push(e),children:(0,tT.jsx)(tN.StyleRegistry,{registry:es,children:(0,tT.jsx)(t1.Provider,{value:$,children:e})})})})})})})})})},ep=()=>null,em=({children:e})=>(0,tT.jsxs)(tT.Fragment,{children:[(0,tT.jsx)(ep,{}),(0,tT.jsx)(eh,{children:(0,tT.jsxs)(tT.Fragment,{children:[e,(0,tT.jsx)(ep,{})]})})]}),eg={err:b,req:Q?void 0:a,res:Q?void 0:n,pathname:i,query:s,asPath:ee,locale:o.locale,locales:o.locales,defaultLocale:o.defaultLocale,AppTree:e=>(0,tT.jsx)(em,{children:rf(M,L,{...e,router:er})}),defaultGetInitialProps:async(e,t={})=>{let{html:r,head:a}=await e.renderPage({enhanceApp:e=>t=>(0,tT.jsx)(e,{...t})}),n=es.styles({nonce:t.nonce||ed});return es.flush(),{html:r,head:a,styles:n}}},ey=!z&&(o.isBuildTimePrerendering||"");if(h=await W(M,{AppTree:eg.AppTree,Component:L,router:er,ctx:eg}),(z||C)&&p&&(h.__N_PREVIEW=!0),z&&(h.__N_SSG=!0),z&&!H){let e,t;try{e=await (0,eH.getTracer)().trace(eU.vr.getStaticProps,{spanName:`getStaticProps ${i}`,attributes:{"next.route":i}},()=>R({...Z?{params:O}:void 0,...p?{draftMode:!0,preview:!0,previewData:d}:void 0,locales:[...o.locales??[]],locale:o.locale,defaultLocale:o.defaultLocale,revalidateReason:o.isOnDemandRevalidate?"on-demand":G?"build":"stale"}))}catch(e){throw e&&"ENOENT"===e.code&&delete e.code,e}if(null==e)throw Object.defineProperty(Error(k.xV),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});let r=Object.keys(e).filter(e=>"revalidate"!==e&&"props"!==e&&"redirect"!==e&&"notFound"!==e);if(r.includes("unstable_revalidate"))throw Object.defineProperty(Error(k.$1),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});if(r.length)throw Object.defineProperty(Error(rm("getStaticProps",r)),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});if("notFound"in e&&e.notFound){if("/404"===i)throw Object.defineProperty(Error('The /404 page can not return notFound in "getStaticProps", please remove it to continue!'),"__NEXT_ERROR_CODE",{value:"E121",enumerable:!1,configurable:!0});y.isNotFound=!0}if("redirect"in e&&e.redirect&&"object"==typeof e.redirect){if(rg(e.redirect,a,"getStaticProps"),G)throw Object.defineProperty(Error(`\`redirect\` can not be returned from getStaticProps during prerendering (${a.url}) +See more info here: https://nextjs.org/docs/messages/gsp-redirect-during-prerender`),"__NEXT_ERROR_CODE",{value:"E497",enumerable:!1,configurable:!0});e.props={__N_REDIRECT:e.redirect.destination,__N_REDIRECT_STATUS:t0(e.redirect)},void 0!==e.redirect.basePath&&(e.props.__N_REDIRECT_BASE_PATH=e.redirect.basePath),y.isRedirect=!0}if(G&&!y.isNotFound&&!tL(i,"getStaticProps",e.props))throw Object.defineProperty(Error("invariant: getStaticProps did not return valid props. Please report this."),"__NEXT_ERROR_CODE",{value:"E129",enumerable:!1,configurable:!0});if("revalidate"in e){if(e.revalidate&&"export"===o.nextConfigOutput)throw Object.defineProperty(Error('ISR cannot be used with "output: export". See more info here: https://nextjs.org/docs/advanced-features/static-html-export'),"__NEXT_ERROR_CODE",{value:"E201",enumerable:!1,configurable:!0});if("number"==typeof e.revalidate)if(Number.isInteger(e.revalidate))if(e.revalidate<=0)throw Object.defineProperty(Error(`A page's revalidate option can not be less than or equal to zero for ${a.url}. A revalidate option of zero means to revalidate after _every_ request, and implies stale data cannot be tolerated. + +To never revalidate, you can set revalidate to \`false\` (only ran once at build-time). +To revalidate as soon as possible, you can set the value to \`1\`.`),"__NEXT_ERROR_CODE",{value:"E311",enumerable:!1,configurable:!0});else e.revalidate>31536e3&&console.warn(`Warning: A page's revalidate option was set to more than a year for ${a.url}. This may have been done in error. +To only run getStaticProps at build-time and not revalidate at runtime, you can set \`revalidate\` to \`false\`!`),t=e.revalidate;else throw Object.defineProperty(Error(`A page's revalidate option must be seconds expressed as a natural number for ${a.url}. Mixed numbers, such as '${e.revalidate}', cannot be used. +Try changing the value to '${Math.ceil(e.revalidate)}' or using \`Math.ceil()\` if you're computing the value.`),"__NEXT_ERROR_CODE",{value:"E438",enumerable:!1,configurable:!0});else if(!0===e.revalidate)t=1;else if(!1===e.revalidate||void 0===e.revalidate)t=!1;else throw Object.defineProperty(Error(`A page's revalidate option must be seconds expressed as a natural number. Mixed numbers and strings cannot be used. Received '${JSON.stringify(e.revalidate)}' for ${a.url}`),"__NEXT_ERROR_CODE",{value:"E161",enumerable:!1,configurable:!0})}else t=!1;if(h.pageProps=Object.assign({},h.pageProps,"props"in e?e.props:void 0),y.cacheControl={revalidate:t,expire:void 0},y.pageData=h,y.isNotFound)return new e8(null,{metadata:y,contentType:null})}if(C&&(h.__N_SSP=!0),C&&!H){let e,t=!1;try{e=await (0,eH.getTracer)().trace(eU.vr.getServerSideProps,{spanName:`getServerSideProps ${i}`,attributes:{"next.route":i}},async()=>C({req:a,res:n,query:s,resolvedUrl:o.resolvedUrl,...Z?{params:O}:void 0,...!1!==d?{draftMode:!0,preview:!0,previewData:d}:void 0,locales:[...o.locales??[]],locale:o.locale,defaultLocale:o.defaultLocale})),y.cacheControl={revalidate:0,expire:void 0}}catch(e){throw"object"==typeof e&&null!==e&&"name"in e&&"message"in e&&"ENOENT"===e.code&&delete e.code,e}if(null==e)throw Object.defineProperty(Error(k.UO),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});e.props instanceof Promise&&(t=!0);let r=Object.keys(e).filter(e=>"props"!==e&&"redirect"!==e&&"notFound"!==e);if(e.unstable_notFound)throw Object.defineProperty(Error(`unstable_notFound has been renamed to notFound, please update the field to continue. Page: ${i}`),"__NEXT_ERROR_CODE",{value:"E516",enumerable:!1,configurable:!0});if(e.unstable_redirect)throw Object.defineProperty(Error(`unstable_redirect has been renamed to redirect, please update the field to continue. Page: ${i}`),"__NEXT_ERROR_CODE",{value:"E284",enumerable:!1,configurable:!0});if(r.length)throw Object.defineProperty(Error(rm("getServerSideProps",r)),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});if("notFound"in e&&e.notFound){if("/404"===i)throw Object.defineProperty(Error('The /404 page can not return notFound in "getStaticProps", please remove it to continue!'),"__NEXT_ERROR_CODE",{value:"E121",enumerable:!1,configurable:!0});return y.isNotFound=!0,new e8(null,{metadata:y,contentType:null})}if("redirect"in e&&"object"==typeof e.redirect&&(rg(e.redirect,a,"getServerSideProps"),e.props={__N_REDIRECT:e.redirect.destination,__N_REDIRECT_STATUS:t0(e.redirect)},void 0!==e.redirect.basePath&&(e.props.__N_REDIRECT_BASE_PATH=e.redirect.basePath),y.isRedirect=!0),t&&(e.props=await e.props),G&&!tL(i,"getServerSideProps",e.props))throw Object.defineProperty(Error("invariant: getServerSideProps did not return valid props. Please report this."),"__NEXT_ERROR_CODE",{value:"E31",enumerable:!1,configurable:!0});h.pageProps=Object.assign({},h.pageProps,e.props),y.pageData=h}if(S&&!z||y.isRedirect)return new e8(JSON.stringify(h),{metadata:y,contentType:k.U2});if(H&&(h.pageProps={}),B(n)&&!z)return e8.EMPTY;let eb=x;if(Q&&Z){let e,t=(e=ex(eE(i))).startsWith("/index/")&&!A(e)?e.slice(6):"/index"!==e?e:"/";t in eb.pages&&(eb={...eb,pages:{...eb.pages,[t]:[...eb.pages[t],...eb.lowPriorityFiles.filter(e=>e.includes("_buildManifest"))]},lowPriorityFiles:eb.lowPriorityFiles.filter(e=>!e.includes("_buildManifest"))})}let e_=({children:e})=>(0,tT.jsx)("div",{id:"__next",children:e}),eP=async()=>{let e,t,r,a;async function i(e){let t=async(t={})=>{if(eg.err&&P)return e&&e(M,L),{html:await rh((0,tT.jsx)(e_,{children:(0,tT.jsx)(P,{})})),head:eo};let{App:r,Component:a}="function"==typeof t?{App:M,Component:t(L)}:{App:t.enhanceApp?t.enhanceApp(M):M,Component:t.enhanceComponent?t.enhanceComponent(L):L},n=await e(r,a);return await n.allReady,{html:await eB(n),head:eo}},r={...eg,renderPage:t},a=await W(F,r);if(B(n)&&!z)return null;if(!a||"string"!=typeof a.html)throw Object.defineProperty(Error(`"${X(F)}.getInitialProps()" should resolve to an object with a "html" prop set with a valid html string`),"__NEXT_ERROR_CODE",{value:"E1039",enumerable:!1,configurable:!0});return{docProps:a,documentCtx:r}}F.__NEXT_BUILTIN_DOCUMENT__;let s=async(e,t)=>{let r,a,n=(r=e||M,a=t||L,eg.err&&P?(0,tT.jsx)(e_,{children:(0,tT.jsx)(P,{})}):(0,tT.jsx)(e_,{children:(0,tT.jsx)(em,{children:rf(r,a,{...h,router:er})})}));return await function({ReactDOMServer:e,element:t,streamOptions:r}){return(0,eH.getTracer)().trace(eU.Wc.renderToReadableStream,async()=>e.renderToReadableStream(t,r))}({ReactDOMServer:tD(),element:n})},o=!!F.getInitialProps;if(o)if(null===(e=await i(s)))t=null;else{let{docProps:r}=e;t=r.html}else{e={};let r=await s(M,L);await r.allReady,t=await eB(r)}let{docProps:l}=e||{};o?(r=l.styles,eo=l.head):(r=es.styles(),es.flush());let c=await rh((a=es.styles(),es.flush(),(0,tT.jsx)(tT.Fragment,{children:a})));return null===t?null:{contentHTML:c+t,documentElement:e=>(0,tT.jsx)(F,{...e,...l}),head:eo,headTags:[],styles:r}};(0,eH.getTracer)().setRootSpanAttribute("next.route",o.page);let eR=await (0,eH.getTracer)().trace(eU.vr.renderDocument,{spanName:`render route (pages) ${o.page}`,attributes:{"next.route":o.page}},async()=>eP());if(!eR)return new e8(null,{metadata:y,contentType:k.j9});let ew=new Set,eC=new Set;for(let e of el){let t=_[e];t&&(ew.add(t.id),t.files.forEach(e=>{eC.add(e)}))}let{assetPrefix:eS,defaultLocale:eO,disableOptimizedLoading:eT,domainLocales:eA,locale:ej,locales:e$}=o,eD={__NEXT_DATA__:{props:h,page:i,query:s,buildId:c.buildId,assetPrefix:""===eS?void 0:eS,nextExport:!0===ey||void 0,autoExport:!0===Q||void 0,isFallback:H,isExperimentalCompile:N,dynamicIds:0===ew.size?void 0:Array.from(ew),err:o.err?function(e,t){if(e){let e="server";return e=t[rl]||"server",{name:t.name,source:e,message:t3()(t.message),stack:t.stack,digest:t.digest}}return{name:"Internal Server Error.",message:"500 - Internal Server Error.",statusCode:500}}(!1,o.err):void 0,gsp:!!R||void 0,gssp:!!C||void 0,customServer:c.customServer,gip:!!J||void 0,appGip:!V||void 0,locale:ej,locales:e$,defaultLocale:eO,domainLocales:eA,isPreview:!0===p||void 0,notFoundSrcPage:void 0},nonce:ed,buildManifest:eb,docComponentsRendered:{},dangerousAsPath:er.asPath,isDevelopment:!1,deploymentId:c.deploymentId,dynamicImports:Array.from(eC),dynamicCssManifest:new Set(o.dynamicCssManifest||[]),assetPrefix:eS,unstable_runtimeJS:E.unstable_runtimeJS,unstable_JsPreload:E.unstable_JsPreload,assetQueryString:g,cssAssetQueryString:v,mutableAssetQueryString:m,scriptLoader:en,locale:ej,disableOptimizedLoading:eT,head:eR.head,headTags:eR.headTags,styles:eR.styles,crossOrigin:o.crossOrigin,optimizeCss:o.optimizeCss,nextConfigOutput:o.nextConfigOutput,nextScriptWorkers:o.nextScriptWorkers,runtime:D,largePageDataBytes:o.largePageDataBytes,nextFontManifest:o.nextFontManifest,experimentalClientTraceMetadata:o.experimental.clientTraceMetadata},eN=(0,tT.jsx)(tK.Provider,{value:eD,children:eR.documentElement(eD)}),ek=await (0,eH.getTracer)().trace(eU.vr.renderToString,async()=>rh(eN)),[eI,eM]=ek.split("",2),eF="";ek.startsWith(ru)||(eF+=ru);let eL=(eF+=eI)+eR.contentHTML+eM;return new e8(await r(eL,o),{metadata:y,contentType:k.j9})}let ry=(e,t,r,a,n,i,s)=>rv(e,t,r,a,n,n,i,s),rb=tj().createContext(null);function rE(e){let t=(0,tA.useContext)(rb);t&&t(e)}class rx extends tO{constructor(e){super(e),this.components=e.components}render(e,t,r){return rv(e,t,r.page,r.query,r.renderOpts,{App:this.components.App,Document:this.components.Document},r.sharedContext,r.renderContext)}}let r_={contexts:y},rP=rx})(),module.exports=i})(); +//# sourceMappingURL=pages-turbo.runtime.prod.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/p-limit/index.js b/build/node_modules/next/dist/compiled/p-limit/index.js new file mode 100644 index 0000000..3584cdf --- /dev/null +++ b/build/node_modules/next/dist/compiled/p-limit/index.js @@ -0,0 +1 @@ +(()=>{var e={758:(e,t,i)=>{"use strict";const r=i(738);const pLimit=e=>{if(!((Number.isInteger(e)||e===Infinity)&&e>0)){throw new TypeError("Expected `concurrency` to be a number from 1 and up")}const t=new r;let i=0;const next=()=>{i--;if(t.size>0){t.dequeue()()}};const run=async(e,t,...r)=>{i++;const s=(async()=>e(...r))();t(s);try{await s}catch{}next()};const enqueue=(r,s,...n)=>{t.enqueue(run.bind(null,r,s,...n));(async()=>{await Promise.resolve();if(i0){t.dequeue()()}})()};const generator=(e,...t)=>new Promise((i=>{enqueue(e,i,...t)}));Object.defineProperties(generator,{activeCount:{get:()=>i},pendingCount:{get:()=>t.size},clearQueue:{value:()=>{t.clear()}}});return generator};e.exports=pLimit},738:e=>{class Node{constructor(e){this.value=e;this.next=undefined}}class Queue{constructor(){this.clear()}enqueue(e){const t=new Node(e);if(this._head){this._tail.next=t;this._tail=t}else{this._head=t;this._tail=t}this._size++}dequeue(){const e=this._head;if(!e){return}this._head=this._head.next;this._size--;return e.value}clear(){this._head=undefined;this._tail=undefined;this._size=0}get size(){return this._size}*[Symbol.iterator](){let e=this._head;while(e){yield e.value;e=e.next}}}e.exports=Queue}};var t={};function __nccwpck_require__(i){var r=t[i];if(r!==undefined){return r.exports}var s=t[i]={exports:{}};var n=true;try{e[i](s,s.exports,__nccwpck_require__);n=false}finally{if(n)delete t[i]}return s.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var i=__nccwpck_require__(758);module.exports=i})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/p-limit/package.json b/build/node_modules/next/dist/compiled/p-limit/package.json new file mode 100644 index 0000000..df63773 --- /dev/null +++ b/build/node_modules/next/dist/compiled/p-limit/package.json @@ -0,0 +1 @@ +{"name":"p-limit","main":"index.js","author":{"name":"Sindre Sorhus","email":"sindresorhus@gmail.com","url":"https://sindresorhus.com"},"license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/p-queue/index.js b/build/node_modules/next/dist/compiled/p-queue/index.js new file mode 100644 index 0000000..e28bcbf --- /dev/null +++ b/build/node_modules/next/dist/compiled/p-queue/index.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={993:e=>{var t=Object.prototype.hasOwnProperty,n="~";function Events(){}if(Object.create){Events.prototype=Object.create(null);if(!(new Events).__proto__)n=false}function EE(e,t,n){this.fn=e;this.context=t;this.once=n||false}function addListener(e,t,r,i,s){if(typeof r!=="function"){throw new TypeError("The listener must be a function")}var o=new EE(r,i||e,s),u=n?n+t:t;if(!e._events[u])e._events[u]=o,e._eventsCount++;else if(!e._events[u].fn)e._events[u].push(o);else e._events[u]=[e._events[u],o];return e}function clearEvent(e,t){if(--e._eventsCount===0)e._events=new Events;else delete e._events[t]}function EventEmitter(){this._events=new Events;this._eventsCount=0}EventEmitter.prototype.eventNames=function eventNames(){var e=[],r,i;if(this._eventsCount===0)return e;for(i in r=this._events){if(t.call(r,i))e.push(n?i.slice(1):i)}if(Object.getOwnPropertySymbols){return e.concat(Object.getOwnPropertySymbols(r))}return e};EventEmitter.prototype.listeners=function listeners(e){var t=n?n+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var i=0,s=r.length,o=new Array(s);i{e.exports=(e,t)=>{t=t||(()=>{});return e.then((e=>new Promise((e=>{e(t())})).then((()=>e))),(e=>new Promise((e=>{e(t())})).then((()=>{throw e}))))}},574:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true});function lowerBound(e,t,n){let r=0;let i=e.length;while(i>0){const s=i/2|0;let o=r+s;if(n(e[o],t)<=0){r=++o;i-=s+1}else{i=s}}return r}t["default"]=lowerBound},821:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:true});const r=n(574);class PriorityQueue{constructor(){this._queue=[]}enqueue(e,t){t=Object.assign({priority:0},t);const n={priority:t.priority,run:e};if(this.size&&this._queue[this.size-1].priority>=t.priority){this._queue.push(n);return}const i=r.default(this._queue,n,((e,t)=>t.priority-e.priority));this._queue.splice(i,0,n)}dequeue(){const e=this._queue.shift();return e===null||e===void 0?void 0:e.run}filter(e){return this._queue.filter((t=>t.priority===e.priority)).map((e=>e.run))}get size(){return this._queue.length}}t["default"]=PriorityQueue},816:(e,t,n)=>{const r=n(213);class TimeoutError extends Error{constructor(e){super(e);this.name="TimeoutError"}}const pTimeout=(e,t,n)=>new Promise(((i,s)=>{if(typeof t!=="number"||t<0){throw new TypeError("Expected `milliseconds` to be a positive number")}if(t===Infinity){i(e);return}const o=setTimeout((()=>{if(typeof n==="function"){try{i(n())}catch(e){s(e)}return}const r=typeof n==="string"?n:`Promise timed out after ${t} milliseconds`;const o=n instanceof Error?n:new TimeoutError(r);if(typeof e.cancel==="function"){e.cancel()}s(o)}),t);r(e.then(i,s),(()=>{clearTimeout(o)}))}));e.exports=pTimeout;e.exports["default"]=pTimeout;e.exports.TimeoutError=TimeoutError}};var t={};function __nccwpck_require__(n){var r=t[n];if(r!==undefined){return r.exports}var i=t[n]={exports:{}};var s=true;try{e[n](i,i.exports,__nccwpck_require__);s=false}finally{if(s)delete t[n]}return i.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var n={};(()=>{var e=n;Object.defineProperty(e,"__esModule",{value:true});const t=__nccwpck_require__(993);const r=__nccwpck_require__(816);const i=__nccwpck_require__(821);const empty=()=>{};const s=new r.TimeoutError;class PQueue extends t{constructor(e){var t,n,r,s;super();this._intervalCount=0;this._intervalEnd=0;this._pendingCount=0;this._resolveEmpty=empty;this._resolveIdle=empty;e=Object.assign({carryoverConcurrencyCount:false,intervalCap:Infinity,interval:0,concurrency:Infinity,autoStart:true,queueClass:i.default},e);if(!(typeof e.intervalCap==="number"&&e.intervalCap>=1)){throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${(n=(t=e.intervalCap)===null||t===void 0?void 0:t.toString())!==null&&n!==void 0?n:""}\` (${typeof e.intervalCap})`)}if(e.interval===undefined||!(Number.isFinite(e.interval)&&e.interval>=0)){throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${(s=(r=e.interval)===null||r===void 0?void 0:r.toString())!==null&&s!==void 0?s:""}\` (${typeof e.interval})`)}this._carryoverConcurrencyCount=e.carryoverConcurrencyCount;this._isIntervalIgnored=e.intervalCap===Infinity||e.interval===0;this._intervalCap=e.intervalCap;this._interval=e.interval;this._queue=new e.queueClass;this._queueClass=e.queueClass;this.concurrency=e.concurrency;this._timeout=e.timeout;this._throwOnTimeout=e.throwOnTimeout===true;this._isPaused=e.autoStart===false}get _doesIntervalAllowAnother(){return this._isIntervalIgnored||this._intervalCount{this._onResumeInterval()}),t)}return true}}return false}_tryToStartAnother(){if(this._queue.size===0){if(this._intervalId){clearInterval(this._intervalId)}this._intervalId=undefined;this._resolvePromises();return false}if(!this._isPaused){const e=!this._isIntervalPaused();if(this._doesIntervalAllowAnother&&this._doesConcurrentAllowAnother){const t=this._queue.dequeue();if(!t){return false}this.emit("active");t();if(e){this._initializeIntervalIfNeeded()}return true}}return false}_initializeIntervalIfNeeded(){if(this._isIntervalIgnored||this._intervalId!==undefined){return}this._intervalId=setInterval((()=>{this._onInterval()}),this._interval);this._intervalEnd=Date.now()+this._interval}_onInterval(){if(this._intervalCount===0&&this._pendingCount===0&&this._intervalId){clearInterval(this._intervalId);this._intervalId=undefined}this._intervalCount=this._carryoverConcurrencyCount?this._pendingCount:0;this._processQueue()}_processQueue(){while(this._tryToStartAnother()){}}get concurrency(){return this._concurrency}set concurrency(e){if(!(typeof e==="number"&&e>=1)){throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${e}\` (${typeof e})`)}this._concurrency=e;this._processQueue()}async add(e,t={}){return new Promise(((n,i)=>{const run=async()=>{this._pendingCount++;this._intervalCount++;try{const o=this._timeout===undefined&&t.timeout===undefined?e():r.default(Promise.resolve(e()),t.timeout===undefined?this._timeout:t.timeout,(()=>{if(t.throwOnTimeout===undefined?this._throwOnTimeout:t.throwOnTimeout){i(s)}return undefined}));n(await o)}catch(e){i(e)}this._next()};this._queue.enqueue(run,t);this._tryToStartAnother();this.emit("add")}))}async addAll(e,t){return Promise.all(e.map((async e=>this.add(e,t))))}start(){if(!this._isPaused){return this}this._isPaused=false;this._processQueue();return this}pause(){this._isPaused=true}clear(){this._queue=new this._queueClass}async onEmpty(){if(this._queue.size===0){return}return new Promise((e=>{const t=this._resolveEmpty;this._resolveEmpty=()=>{t();e()}}))}async onIdle(){if(this._pendingCount===0&&this._queue.size===0){return}return new Promise((e=>{const t=this._resolveIdle;this._resolveIdle=()=>{t();e()}}))}get size(){return this._queue.size}sizeBy(e){return this._queue.filter(e).length}get pending(){return this._pendingCount}get isPaused(){return this._isPaused}get timeout(){return this._timeout}set timeout(e){this._timeout=e}}e["default"]=PQueue})();module.exports=n})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/p-queue/package.json b/build/node_modules/next/dist/compiled/p-queue/package.json new file mode 100644 index 0000000..86ebb70 --- /dev/null +++ b/build/node_modules/next/dist/compiled/p-queue/package.json @@ -0,0 +1 @@ +{"name":"p-queue","main":"index.js","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/path-browserify/index.js b/build/node_modules/next/dist/compiled/path-browserify/index.js new file mode 100644 index 0000000..1a7ae04 --- /dev/null +++ b/build/node_modules/next/dist/compiled/path-browserify/index.js @@ -0,0 +1 @@ +(function(){"use strict";var e={114:function(e){function assertPath(e){if(typeof e!=="string"){throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}}function normalizeStringPosix(e,r){var t="";var i=0;var n=-1;var a=0;var f;for(var l=0;l<=e.length;++l){if(l2){var s=t.lastIndexOf("/");if(s!==t.length-1){if(s===-1){t="";i=0}else{t=t.slice(0,s);i=t.length-1-t.lastIndexOf("/")}n=l;a=0;continue}}else if(t.length===2||t.length===1){t="";i=0;n=l;a=0;continue}}if(r){if(t.length>0)t+="/..";else t="..";i=2}}else{if(t.length>0)t+="/"+e.slice(n+1,l);else t=e.slice(n+1,l);i=l-n-1}n=l;a=0}else if(f===46&&a!==-1){++a}else{a=-1}}return t}function _format(e,r){var t=r.dir||r.root;var i=r.base||(r.name||"")+(r.ext||"");if(!t){return i}if(t===r.root){return t+i}return t+e+i}var r={resolve:function resolve(){var e="";var r=false;var t;for(var i=arguments.length-1;i>=-1&&!r;i--){var n;if(i>=0)n=arguments[i];else{if(t===undefined)t="";n=t}assertPath(n);if(n.length===0){continue}e=n+"/"+e;r=n.charCodeAt(0)===47}e=normalizeStringPosix(e,!r);if(r){if(e.length>0)return"/"+e;else return"/"}else if(e.length>0){return e}else{return"."}},normalize:function normalize(e){assertPath(e);if(e.length===0)return".";var r=e.charCodeAt(0)===47;var t=e.charCodeAt(e.length-1)===47;e=normalizeStringPosix(e,!r);if(e.length===0&&!r)e=".";if(e.length>0&&t)e+="/";if(r)return"/"+e;return e},isAbsolute:function isAbsolute(e){assertPath(e);return e.length>0&&e.charCodeAt(0)===47},join:function join(){if(arguments.length===0)return".";var e;for(var t=0;t0){if(e===undefined)e=i;else e+="/"+i}}if(e===undefined)return".";return r.normalize(e)},relative:function relative(e,t){assertPath(e);assertPath(t);if(e===t)return"";e=r.resolve(e);t=r.resolve(t);if(e===t)return"";var i=1;for(;io){if(t.charCodeAt(f+h)===47){return t.slice(f+h+1)}else if(h===0){return t.slice(f+h)}}else if(a>o){if(e.charCodeAt(i+h)===47){u=h}else if(h===0){u=0}}break}var c=e.charCodeAt(i+h);var v=t.charCodeAt(f+h);if(c!==v)break;else if(c===47)u=h}var g="";for(h=i+u+1;h<=n;++h){if(h===n||e.charCodeAt(h)===47){if(g.length===0)g+="..";else g+="/.."}}if(g.length>0)return g+t.slice(f+u);else{f+=u;if(t.charCodeAt(f)===47)++f;return t.slice(f)}},_makeLong:function _makeLong(e){return e},dirname:function dirname(e){assertPath(e);if(e.length===0)return".";var r=e.charCodeAt(0);var t=r===47;var i=-1;var n=true;for(var a=e.length-1;a>=1;--a){r=e.charCodeAt(a);if(r===47){if(!n){i=a;break}}else{n=false}}if(i===-1)return t?"/":".";if(t&&i===1)return"//";return e.slice(0,i)},basename:function basename(e,r){if(r!==undefined&&typeof r!=="string")throw new TypeError('"ext" argument must be a string');assertPath(e);var t=0;var i=-1;var n=true;var a;if(r!==undefined&&r.length>0&&r.length<=e.length){if(r.length===e.length&&r===e)return"";var f=r.length-1;var l=-1;for(a=e.length-1;a>=0;--a){var s=e.charCodeAt(a);if(s===47){if(!n){t=a+1;break}}else{if(l===-1){n=false;l=a+1}if(f>=0){if(s===r.charCodeAt(f)){if(--f===-1){i=a}}else{f=-1;i=l}}}}if(t===i)i=l;else if(i===-1)i=e.length;return e.slice(t,i)}else{for(a=e.length-1;a>=0;--a){if(e.charCodeAt(a)===47){if(!n){t=a+1;break}}else if(i===-1){n=false;i=a+1}}if(i===-1)return"";return e.slice(t,i)}},extname:function extname(e){assertPath(e);var r=-1;var t=0;var i=-1;var n=true;var a=0;for(var f=e.length-1;f>=0;--f){var l=e.charCodeAt(f);if(l===47){if(!n){t=f+1;break}continue}if(i===-1){n=false;i=f+1}if(l===46){if(r===-1)r=f;else if(a!==1)a=1}else if(r!==-1){a=-1}}if(r===-1||i===-1||a===0||a===1&&r===i-1&&r===t+1){return""}return e.slice(r,i)},format:function format(e){if(e===null||typeof e!=="object"){throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof e)}return _format("/",e)},parse:function parse(e){assertPath(e);var r={root:"",dir:"",base:"",ext:"",name:""};if(e.length===0)return r;var t=e.charCodeAt(0);var i=t===47;var n;if(i){r.root="/";n=1}else{n=0}var a=-1;var f=0;var l=-1;var s=true;var o=e.length-1;var u=0;for(;o>=n;--o){t=e.charCodeAt(o);if(t===47){if(!s){f=o+1;break}continue}if(l===-1){s=false;l=o+1}if(t===46){if(a===-1)a=o;else if(u!==1)u=1}else if(a!==-1){u=-1}}if(a===-1||l===-1||u===0||u===1&&a===l-1&&a===f+1){if(l!==-1){if(f===0&&i)r.base=r.name=e.slice(1,l);else r.base=r.name=e.slice(f,l)}}else{if(f===0&&i){r.name=e.slice(1,a);r.base=e.slice(1,l)}else{r.name=e.slice(f,a);r.base=e.slice(f,l)}r.ext=e.slice(a,l)}if(f>0)r.dir=e.slice(0,f-1);else if(i)r.dir="/";return r},sep:"/",delimiter:":",win32:null,posix:null};r.posix=r;e.exports=r}};var r={};function __nccwpck_require__(t){var i=r[t];if(i!==undefined){return i.exports}var n=r[t]={exports:{}};var a=true;try{e[t](n,n.exports,__nccwpck_require__);a=false}finally{if(a)delete r[t]}return n.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var t=__nccwpck_require__(114);module.exports=t})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/path-browserify/package.json b/build/node_modules/next/dist/compiled/path-browserify/package.json new file mode 100644 index 0000000..8d3b5a8 --- /dev/null +++ b/build/node_modules/next/dist/compiled/path-browserify/package.json @@ -0,0 +1 @@ +{"name":"path-browserify","main":"index.js","author":{"name":"James Halliday","email":"mail@substack.net","url":"http://substack.net"},"license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/path-to-regexp/index.js b/build/node_modules/next/dist/compiled/path-to-regexp/index.js new file mode 100644 index 0000000..6a86d02 --- /dev/null +++ b/build/node_modules/next/dist/compiled/path-to-regexp/index.js @@ -0,0 +1 @@ +(()=>{"use strict";if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var e={};(()=>{var n=e;Object.defineProperty(n,"__esModule",{value:true});n.pathToRegexp=n.tokensToRegexp=n.regexpToFunction=n.match=n.tokensToFunction=n.compile=n.parse=void 0;function lexer(e){var n=[];var r=0;while(r=48&&o<=57||o>=65&&o<=90||o>=97&&o<=122||o===95){a+=e[i++];continue}break}if(!a)throw new TypeError("Missing parameter name at ".concat(r));n.push({type:"NAME",index:r,value:a});r=i;continue}if(t==="("){var c=1;var f="";var i=r+1;if(e[i]==="?"){throw new TypeError('Pattern cannot start with "?" at '.concat(i))}while(i-1)return true}return false};var safePattern=function(e){var n=c[c.length-1];var r=e||(n&&typeof n==="string"?n:"");if(n&&!r){throw new TypeError('Must have text between two parameters, missing text after "'.concat(n.name,'"'))}if(!r||isSafe(r))return"[^".concat(escapeString(o),"]+?");return"(?:(?!".concat(escapeString(r),")[^").concat(escapeString(o),"])+?")};while(u)?(?!\?)/g;var t=0;var a=r.exec(e.source);while(a){n.push({name:a[1]||t++,prefix:"",suffix:"",modifier:"",pattern:""});a=r.exec(e.source)}return e}function arrayToRegexp(e,n,r){var t=e.map((function(e){return pathToRegexp(e,n,r).source}));return new RegExp("(?:".concat(t.join("|"),")"),flags(r))}function stringToRegexp(e,n,r){return tokensToRegexp(parse(e,r),n,r)}function tokensToRegexp(e,n,r){if(r===void 0){r={}}var t=r.strict,a=t===void 0?false:t,i=r.start,o=i===void 0?true:i,c=r.end,f=c===void 0?true:c,u=r.encode,p=u===void 0?function(e){return e}:u,v=r.delimiter,s=v===void 0?"/#?":v,d=r.endsWith,g=d===void 0?"":d;var x="[".concat(escapeString(g),"]|$");var h="[".concat(escapeString(s),"]");var l=o?"^":"";for(var m=0,T=e;m-1:A===undefined;if(!a){l+="(?:".concat(h,"(?=").concat(x,"))?")}if(!_){l+="(?=".concat(h,"|").concat(x,")")}}return new RegExp(l,flags(r))}n.tokensToRegexp=tokensToRegexp;function pathToRegexp(e,n,r){if(e instanceof RegExp)return regexpToRegexp(e,n);if(Array.isArray(e))return arrayToRegexp(e,n,r);return stringToRegexp(e,n,r)}n.pathToRegexp=pathToRegexp})();module.exports=e})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/path-to-regexp/package.json b/build/node_modules/next/dist/compiled/path-to-regexp/package.json new file mode 100644 index 0000000..b623625 --- /dev/null +++ b/build/node_modules/next/dist/compiled/path-to-regexp/package.json @@ -0,0 +1 @@ +{"name":"path-to-regexp","main":"index.js","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/picomatch/index.js b/build/node_modules/next/dist/compiled/picomatch/index.js new file mode 100644 index 0000000..86c9d8f --- /dev/null +++ b/build/node_modules/next/dist/compiled/picomatch/index.js @@ -0,0 +1 @@ +(()=>{"use strict";var t={170:(t,e,u)=>{const n=u(510);const isWindows=()=>{if(typeof navigator!=="undefined"&&navigator.platform){const t=navigator.platform.toLowerCase();return t==="win32"||t==="windows"}if(typeof process!=="undefined"&&process.platform){return process.platform==="win32"}return false};function picomatch(t,e,u=false){if(e&&(e.windows===null||e.windows===undefined)){e={...e,windows:isWindows()}}return n(t,e,u)}Object.assign(picomatch,n);t.exports=picomatch},154:t=>{const e="\\\\/";const u=`[^${e}]`;const n="\\.";const o="\\+";const s="\\?";const r="\\/";const a="(?=.)";const i="[^/]";const c=`(?:${r}|$)`;const p=`(?:^|${r})`;const l=`${n}{1,2}${c}`;const f=`(?!${n})`;const A=`(?!${p}${l})`;const _=`(?!${n}{0,1}${c})`;const R=`(?!${l})`;const E=`[^.${r}]`;const h=`${i}*?`;const g="/";const b={DOT_LITERAL:n,PLUS_LITERAL:o,QMARK_LITERAL:s,SLASH_LITERAL:r,ONE_CHAR:a,QMARK:i,END_ANCHOR:c,DOTS_SLASH:l,NO_DOT:f,NO_DOTS:A,NO_DOT_SLASH:_,NO_DOTS_SLASH:R,QMARK_NO_DOT:E,STAR:h,START_ANCHOR:p,SEP:g};const C={...b,SLASH_LITERAL:`[${e}]`,QMARK:u,STAR:`${u}*?`,DOTS_SLASH:`${n}{1,2}(?:[${e}]|$)`,NO_DOT:`(?!${n})`,NO_DOTS:`(?!(?:^|[${e}])${n}{1,2}(?:[${e}]|$))`,NO_DOT_SLASH:`(?!${n}{0,1}(?:[${e}]|$))`,NO_DOTS_SLASH:`(?!${n}{1,2}(?:[${e}]|$))`,QMARK_NO_DOT:`[^.${e}]`,START_ANCHOR:`(?:^|[${e}])`,END_ANCHOR:`(?:[${e}]|$)`,SEP:"\\"};const y={alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"\\x21-\\x7E",lower:"a-z",print:"\\x20-\\x7E ",punct:"\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",space:" \\t\\r\\n\\v\\f",upper:"A-Z",word:"A-Za-z0-9_",xdigit:"A-Fa-f0-9"};t.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:y,REGEX_BACKSLASH:/\\(?![*+?^${}(|)[\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\].,$*+?^{}()|\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\?)((\W)(\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\[.*?[^\\]\]|\\(?=.))/g,REPLACEMENTS:{"***":"*","**/**":"**","**/**/**":"**"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,extglobChars(t){return{"!":{type:"negate",open:"(?:(?!(?:",close:`))${t.STAR})`},"?":{type:"qmark",open:"(?:",close:")?"},"+":{type:"plus",open:"(?:",close:")+"},"*":{type:"star",open:"(?:",close:")*"},"@":{type:"at",open:"(?:",close:")"}}},globChars(t){return t===true?C:b}}},697:(t,e,u)=>{const n=u(154);const o=u(96);const{MAX_LENGTH:s,POSIX_REGEX_SOURCE:r,REGEX_NON_SPECIAL_CHARS:a,REGEX_SPECIAL_CHARS_BACKREF:i,REPLACEMENTS:c}=n;const expandRange=(t,e)=>{if(typeof e.expandRange==="function"){return e.expandRange(...t,e)}t.sort();const u=`[${t.join("-")}]`;try{new RegExp(u)}catch(e){return t.map((t=>o.escapeRegex(t))).join("..")}return u};const syntaxError=(t,e)=>`Missing ${t}: "${e}" - use "\\\\${e}" to match literal characters`;const parse=(t,e)=>{if(typeof t!=="string"){throw new TypeError("Expected a string")}t=c[t]||t;const u={...e};const p=typeof u.maxLength==="number"?Math.min(s,u.maxLength):s;let l=t.length;if(l>p){throw new SyntaxError(`Input length: ${l}, exceeds maximum allowed length: ${p}`)}const f={type:"bos",value:"",output:u.prepend||""};const A=[f];const _=u.capture?"":"?:";const R=n.globChars(u.windows);const E=n.extglobChars(R);const{DOT_LITERAL:h,PLUS_LITERAL:g,SLASH_LITERAL:b,ONE_CHAR:C,DOTS_SLASH:y,NO_DOT:$,NO_DOT_SLASH:x,NO_DOTS_SLASH:S,QMARK:H,QMARK_NO_DOT:v,STAR:d,START_ANCHOR:L}=R;const globstar=t=>`(${_}(?:(?!${L}${t.dot?y:h}).)*?)`;const T=u.dot?"":$;const O=u.dot?H:v;let k=u.bash===true?globstar(u):d;if(u.capture){k=`(${k})`}if(typeof u.noext==="boolean"){u.noextglob=u.noext}const m={input:t,index:-1,start:0,dot:u.dot===true,consumed:"",output:"",prefix:"",backtrack:false,negated:false,brackets:0,braces:0,parens:0,quotes:0,globstar:false,tokens:A};t=o.removePrefix(t,m);l=t.length;const w=[];const N=[];const I=[];let B=f;let G;const eos=()=>m.index===l-1;const D=m.peek=(e=1)=>t[m.index+e];const M=m.advance=()=>t[++m.index]||"";const remaining=()=>t.slice(m.index+1);const consume=(t="",e=0)=>{m.consumed+=t;m.index+=e};const append=t=>{m.output+=t.output!=null?t.output:t.value;consume(t.value)};const negate=()=>{let t=1;while(D()==="!"&&(D(2)!=="("||D(3)==="?")){M();m.start++;t++}if(t%2===0){return false}m.negated=true;m.start++;return true};const increment=t=>{m[t]++;I.push(t)};const decrement=t=>{m[t]--;I.pop()};const push=t=>{if(B.type==="globstar"){const e=m.braces>0&&(t.type==="comma"||t.type==="brace");const u=t.extglob===true||w.length&&(t.type==="pipe"||t.type==="paren");if(t.type!=="slash"&&t.type!=="paren"&&!e&&!u){m.output=m.output.slice(0,-B.output.length);B.type="star";B.value="*";B.output=k;m.output+=B.output}}if(w.length&&t.type!=="paren"){w[w.length-1].inner+=t.value}if(t.value||t.output)append(t);if(B&&B.type==="text"&&t.type==="text"){B.output=(B.output||B.value)+t.value;B.value+=t.value;return}t.prev=B;A.push(t);B=t};const extglobOpen=(t,e)=>{const n={...E[e],conditions:1,inner:""};n.prev=B;n.parens=m.parens;n.output=m.output;const o=(u.capture?"(":"")+n.open;increment("parens");push({type:t,value:e,output:m.output?"":C});push({type:"paren",extglob:true,value:M(),output:o});w.push(n)};const extglobClose=t=>{let n=t.close+(u.capture?")":"");let o;if(t.type==="negate"){let s=k;if(t.inner&&t.inner.length>1&&t.inner.includes("/")){s=globstar(u)}if(s!==k||eos()||/^\)+$/.test(remaining())){n=t.close=`)$))${s}`}if(t.inner.includes("*")&&(o=remaining())&&/^\.[^\\/.]+$/.test(o)){const u=parse(o,{...e,fastpaths:false}).output;n=t.close=`)${u})${s})`}if(t.prev.type==="bos"){m.negatedExtglob=true}}push({type:"paren",extglob:true,value:G,output:n});decrement("parens")};if(u.fastpaths!==false&&!/(^[*!]|[/()[\]{}"])/.test(t)){let n=false;let s=t.replace(i,((t,e,u,o,s,r)=>{if(o==="\\"){n=true;return t}if(o==="?"){if(e){return e+o+(s?H.repeat(s.length):"")}if(r===0){return O+(s?H.repeat(s.length):"")}return H.repeat(u.length)}if(o==="."){return h.repeat(u.length)}if(o==="*"){if(e){return e+o+(s?k:"")}return k}return e?t:`\\${t}`}));if(n===true){if(u.unescape===true){s=s.replace(/\\/g,"")}else{s=s.replace(/\\+/g,(t=>t.length%2===0?"\\\\":t?"\\":""))}}if(s===t&&u.contains===true){m.output=t;return m}m.output=o.wrapOutput(s,m,e);return m}while(!eos()){G=M();if(G==="\0"){continue}if(G==="\\"){const t=D();if(t==="/"&&u.bash!==true){continue}if(t==="."||t===";"){continue}if(!t){G+="\\";push({type:"text",value:G});continue}const e=/^\\+/.exec(remaining());let n=0;if(e&&e[0].length>2){n=e[0].length;m.index+=n;if(n%2!==0){G+="\\"}}if(u.unescape===true){G=M()}else{G+=M()}if(m.brackets===0){push({type:"text",value:G});continue}}if(m.brackets>0&&(G!=="]"||B.value==="["||B.value==="[^")){if(u.posix!==false&&G===":"){const t=B.value.slice(1);if(t.includes("[")){B.posix=true;if(t.includes(":")){const t=B.value.lastIndexOf("[");const e=B.value.slice(0,t);const u=B.value.slice(t+2);const n=r[u];if(n){B.value=e+n;m.backtrack=true;M();if(!f.output&&A.indexOf(B)===1){f.output=C}continue}}}}if(G==="["&&D()!==":"||G==="-"&&D()==="]"){G=`\\${G}`}if(G==="]"&&(B.value==="["||B.value==="[^")){G=`\\${G}`}if(u.posix===true&&G==="!"&&B.value==="["){G="^"}B.value+=G;append({value:G});continue}if(m.quotes===1&&G!=='"'){G=o.escapeRegex(G);B.value+=G;append({value:G});continue}if(G==='"'){m.quotes=m.quotes===1?0:1;if(u.keepQuotes===true){push({type:"text",value:G})}continue}if(G==="("){increment("parens");push({type:"paren",value:G});continue}if(G===")"){if(m.parens===0&&u.strictBrackets===true){throw new SyntaxError(syntaxError("opening","("))}const t=w[w.length-1];if(t&&m.parens===t.parens+1){extglobClose(w.pop());continue}push({type:"paren",value:G,output:m.parens?")":"\\)"});decrement("parens");continue}if(G==="["){if(u.nobracket===true||!remaining().includes("]")){if(u.nobracket!==true&&u.strictBrackets===true){throw new SyntaxError(syntaxError("closing","]"))}G=`\\${G}`}else{increment("brackets")}push({type:"bracket",value:G});continue}if(G==="]"){if(u.nobracket===true||B&&B.type==="bracket"&&B.value.length===1){push({type:"text",value:G,output:`\\${G}`});continue}if(m.brackets===0){if(u.strictBrackets===true){throw new SyntaxError(syntaxError("opening","["))}push({type:"text",value:G,output:`\\${G}`});continue}decrement("brackets");const t=B.value.slice(1);if(B.posix!==true&&t[0]==="^"&&!t.includes("/")){G=`/${G}`}B.value+=G;append({value:G});if(u.literalBrackets===false||o.hasRegexChars(t)){continue}const e=o.escapeRegex(B.value);m.output=m.output.slice(0,-B.value.length);if(u.literalBrackets===true){m.output+=e;B.value=e;continue}B.value=`(${_}${e}|${B.value})`;m.output+=B.value;continue}if(G==="{"&&u.nobrace!==true){increment("braces");const t={type:"brace",value:G,output:"(",outputIndex:m.output.length,tokensIndex:m.tokens.length};N.push(t);push(t);continue}if(G==="}"){const t=N[N.length-1];if(u.nobrace===true||!t){push({type:"text",value:G,output:G});continue}let e=")";if(t.dots===true){const t=A.slice();const n=[];for(let e=t.length-1;e>=0;e--){A.pop();if(t[e].type==="brace"){break}if(t[e].type!=="dots"){n.unshift(t[e].value)}}e=expandRange(n,u);m.backtrack=true}if(t.comma!==true&&t.dots!==true){const u=m.output.slice(0,t.outputIndex);const n=m.tokens.slice(t.tokensIndex);t.value=t.output="\\{";G=e="\\}";m.output=u;for(const t of n){m.output+=t.output||t.value}}push({type:"brace",value:G,output:e});decrement("braces");N.pop();continue}if(G==="|"){if(w.length>0){w[w.length-1].conditions++}push({type:"text",value:G});continue}if(G===","){let t=G;const e=N[N.length-1];if(e&&I[I.length-1]==="braces"){e.comma=true;t="|"}push({type:"comma",value:G,output:t});continue}if(G==="/"){if(B.type==="dot"&&m.index===m.start+1){m.start=m.index+1;m.consumed="";m.output="";A.pop();B=f;continue}push({type:"slash",value:G,output:b});continue}if(G==="."){if(m.braces>0&&B.type==="dot"){if(B.value===".")B.output=h;const t=N[N.length-1];B.type="dots";B.output+=G;B.value+=G;t.dots=true;continue}if(m.braces+m.parens===0&&B.type!=="bos"&&B.type!=="slash"){push({type:"text",value:G,output:h});continue}push({type:"dot",value:G,output:h});continue}if(G==="?"){const t=B&&B.value==="(";if(!t&&u.noextglob!==true&&D()==="("&&D(2)!=="?"){extglobOpen("qmark",G);continue}if(B&&B.type==="paren"){const t=D();let e=G;if(B.value==="("&&!/[!=<:]/.test(t)||t==="<"&&!/<([!=]|\w+>)/.test(remaining())){e=`\\${G}`}push({type:"text",value:G,output:e});continue}if(u.dot!==true&&(B.type==="slash"||B.type==="bos")){push({type:"qmark",value:G,output:v});continue}push({type:"qmark",value:G,output:H});continue}if(G==="!"){if(u.noextglob!==true&&D()==="("){if(D(2)!=="?"||!/[!=<:]/.test(D(3))){extglobOpen("negate",G);continue}}if(u.nonegate!==true&&m.index===0){negate();continue}}if(G==="+"){if(u.noextglob!==true&&D()==="("&&D(2)!=="?"){extglobOpen("plus",G);continue}if(B&&B.value==="("||u.regex===false){push({type:"plus",value:G,output:g});continue}if(B&&(B.type==="bracket"||B.type==="paren"||B.type==="brace")||m.parens>0){push({type:"plus",value:G});continue}push({type:"plus",value:g});continue}if(G==="@"){if(u.noextglob!==true&&D()==="("&&D(2)!=="?"){push({type:"at",extglob:true,value:G,output:""});continue}push({type:"text",value:G});continue}if(G!=="*"){if(G==="$"||G==="^"){G=`\\${G}`}const t=a.exec(remaining());if(t){G+=t[0];m.index+=t[0].length}push({type:"text",value:G});continue}if(B&&(B.type==="globstar"||B.star===true)){B.type="star";B.star=true;B.value+=G;B.output=k;m.backtrack=true;m.globstar=true;consume(G);continue}let e=remaining();if(u.noextglob!==true&&/^\([^?]/.test(e)){extglobOpen("star",G);continue}if(B.type==="star"){if(u.noglobstar===true){consume(G);continue}const n=B.prev;const o=n.prev;const s=n.type==="slash"||n.type==="bos";const r=o&&(o.type==="star"||o.type==="globstar");if(u.bash===true&&(!s||e[0]&&e[0]!=="/")){push({type:"star",value:G,output:""});continue}const a=m.braces>0&&(n.type==="comma"||n.type==="brace");const i=w.length&&(n.type==="pipe"||n.type==="paren");if(!s&&n.type!=="paren"&&!a&&!i){push({type:"star",value:G,output:""});continue}while(e.slice(0,3)==="/**"){const u=t[m.index+4];if(u&&u!=="/"){break}e=e.slice(3);consume("/**",3)}if(n.type==="bos"&&eos()){B.type="globstar";B.value+=G;B.output=globstar(u);m.output=B.output;m.globstar=true;consume(G);continue}if(n.type==="slash"&&n.prev.type!=="bos"&&!r&&eos()){m.output=m.output.slice(0,-(n.output+B.output).length);n.output=`(?:${n.output}`;B.type="globstar";B.output=globstar(u)+(u.strictSlashes?")":"|$)");B.value+=G;m.globstar=true;m.output+=n.output+B.output;consume(G);continue}if(n.type==="slash"&&n.prev.type!=="bos"&&e[0]==="/"){const t=e[1]!==void 0?"|$":"";m.output=m.output.slice(0,-(n.output+B.output).length);n.output=`(?:${n.output}`;B.type="globstar";B.output=`${globstar(u)}${b}|${b}${t})`;B.value+=G;m.output+=n.output+B.output;m.globstar=true;consume(G+M());push({type:"slash",value:"/",output:""});continue}if(n.type==="bos"&&e[0]==="/"){B.type="globstar";B.value+=G;B.output=`(?:^|${b}|${globstar(u)}${b})`;m.output=B.output;m.globstar=true;consume(G+M());push({type:"slash",value:"/",output:""});continue}m.output=m.output.slice(0,-B.output.length);B.type="globstar";B.output=globstar(u);B.value+=G;m.output+=B.output;m.globstar=true;consume(G);continue}const n={type:"star",value:G,output:k};if(u.bash===true){n.output=".*?";if(B.type==="bos"||B.type==="slash"){n.output=T+n.output}push(n);continue}if(B&&(B.type==="bracket"||B.type==="paren")&&u.regex===true){n.output=G;push(n);continue}if(m.index===m.start||B.type==="slash"||B.type==="dot"){if(B.type==="dot"){m.output+=x;B.output+=x}else if(u.dot===true){m.output+=S;B.output+=S}else{m.output+=T;B.output+=T}if(D()!=="*"){m.output+=C;B.output+=C}}push(n)}while(m.brackets>0){if(u.strictBrackets===true)throw new SyntaxError(syntaxError("closing","]"));m.output=o.escapeLast(m.output,"[");decrement("brackets")}while(m.parens>0){if(u.strictBrackets===true)throw new SyntaxError(syntaxError("closing",")"));m.output=o.escapeLast(m.output,"(");decrement("parens")}while(m.braces>0){if(u.strictBrackets===true)throw new SyntaxError(syntaxError("closing","}"));m.output=o.escapeLast(m.output,"{");decrement("braces")}if(u.strictSlashes!==true&&(B.type==="star"||B.type==="bracket")){push({type:"maybe_slash",value:"",output:`${b}?`})}if(m.backtrack===true){m.output="";for(const t of m.tokens){m.output+=t.output!=null?t.output:t.value;if(t.suffix){m.output+=t.suffix}}}return m};parse.fastpaths=(t,e)=>{const u={...e};const r=typeof u.maxLength==="number"?Math.min(s,u.maxLength):s;const a=t.length;if(a>r){throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${r}`)}t=c[t]||t;const{DOT_LITERAL:i,SLASH_LITERAL:p,ONE_CHAR:l,DOTS_SLASH:f,NO_DOT:A,NO_DOTS:_,NO_DOTS_SLASH:R,STAR:E,START_ANCHOR:h}=n.globChars(u.windows);const g=u.dot?_:A;const b=u.dot?R:A;const C=u.capture?"":"?:";const y={negated:false,prefix:""};let $=u.bash===true?".*?":E;if(u.capture){$=`(${$})`}const globstar=t=>{if(t.noglobstar===true)return $;return`(${C}(?:(?!${h}${t.dot?f:i}).)*?)`};const create=t=>{switch(t){case"*":return`${g}${l}${$}`;case".*":return`${i}${l}${$}`;case"*.*":return`${g}${$}${i}${l}${$}`;case"*/*":return`${g}${$}${p}${l}${b}${$}`;case"**":return g+globstar(u);case"**/*":return`(?:${g}${globstar(u)}${p})?${b}${l}${$}`;case"**/*.*":return`(?:${g}${globstar(u)}${p})?${b}${$}${i}${l}${$}`;case"**/.*":return`(?:${g}${globstar(u)}${p})?${i}${l}${$}`;default:{const e=/^(.*?)\.(\w+)$/.exec(t);if(!e)return;const u=create(e[1]);if(!u)return;return u+i+e[2]}}};const x=o.removePrefix(t,y);let S=create(x);if(S&&u.strictSlashes!==true){S+=`${p}?`}return S};t.exports=parse},510:(t,e,u)=>{const n=u(716);const o=u(697);const s=u(96);const r=u(154);const isObject=t=>t&&typeof t==="object"&&!Array.isArray(t);const picomatch=(t,e,u=false)=>{if(Array.isArray(t)){const n=t.map((t=>picomatch(t,e,u)));const arrayMatcher=t=>{for(const e of n){const u=e(t);if(u)return u}return false};return arrayMatcher}const n=isObject(t)&&t.tokens&&t.input;if(t===""||typeof t!=="string"&&!n){throw new TypeError("Expected pattern to be a non-empty string")}const o=e||{};const s=o.windows;const r=n?picomatch.compileRe(t,e):picomatch.makeRe(t,e,false,true);const a=r.state;delete r.state;let isIgnored=()=>false;if(o.ignore){const t={...e,ignore:null,onMatch:null,onResult:null};isIgnored=picomatch(o.ignore,t,u)}const matcher=(u,n=false)=>{const{isMatch:i,match:c,output:p}=picomatch.test(u,r,e,{glob:t,posix:s});const l={glob:t,state:a,regex:r,posix:s,input:u,output:p,match:c,isMatch:i};if(typeof o.onResult==="function"){o.onResult(l)}if(i===false){l.isMatch=false;return n?l:false}if(isIgnored(u)){if(typeof o.onIgnore==="function"){o.onIgnore(l)}l.isMatch=false;return n?l:false}if(typeof o.onMatch==="function"){o.onMatch(l)}return n?l:true};if(u){matcher.state=a}return matcher};picomatch.test=(t,e,u,{glob:n,posix:o}={})=>{if(typeof t!=="string"){throw new TypeError("Expected input to be a string")}if(t===""){return{isMatch:false,output:""}}const r=u||{};const a=r.format||(o?s.toPosixSlashes:null);let i=t===n;let c=i&&a?a(t):t;if(i===false){c=a?a(t):t;i=c===n}if(i===false||r.capture===true){if(r.matchBase===true||r.basename===true){i=picomatch.matchBase(t,e,u,o)}else{i=e.exec(c)}}return{isMatch:Boolean(i),match:i,output:c}};picomatch.matchBase=(t,e,u)=>{const n=e instanceof RegExp?e:picomatch.makeRe(e,u);return n.test(s.basename(t))};picomatch.isMatch=(t,e,u)=>picomatch(e,u)(t);picomatch.parse=(t,e)=>{if(Array.isArray(t))return t.map((t=>picomatch.parse(t,e)));return o(t,{...e,fastpaths:false})};picomatch.scan=(t,e)=>n(t,e);picomatch.compileRe=(t,e,u=false,n=false)=>{if(u===true){return t.output}const o=e||{};const s=o.contains?"":"^";const r=o.contains?"":"$";let a=`${s}(?:${t.output})${r}`;if(t&&t.negated===true){a=`^(?!${a}).*$`}const i=picomatch.toRegex(a,e);if(n===true){i.state=t}return i};picomatch.makeRe=(t,e={},u=false,n=false)=>{if(!t||typeof t!=="string"){throw new TypeError("Expected a non-empty string")}let s={negated:false,fastpaths:true};if(e.fastpaths!==false&&(t[0]==="."||t[0]==="*")){s.output=o.fastpaths(t,e)}if(!s.output){s=o(t,e)}return picomatch.compileRe(s,e,u,n)};picomatch.toRegex=(t,e)=>{try{const u=e||{};return new RegExp(t,u.flags||(u.nocase?"i":""))}catch(t){if(e&&e.debug===true)throw t;return/$^/}};picomatch.constants=r;t.exports=picomatch},716:(t,e,u)=>{const n=u(96);const{CHAR_ASTERISK:o,CHAR_AT:s,CHAR_BACKWARD_SLASH:r,CHAR_COMMA:a,CHAR_DOT:i,CHAR_EXCLAMATION_MARK:c,CHAR_FORWARD_SLASH:p,CHAR_LEFT_CURLY_BRACE:l,CHAR_LEFT_PARENTHESES:f,CHAR_LEFT_SQUARE_BRACKET:A,CHAR_PLUS:_,CHAR_QUESTION_MARK:R,CHAR_RIGHT_CURLY_BRACE:E,CHAR_RIGHT_PARENTHESES:h,CHAR_RIGHT_SQUARE_BRACKET:g}=u(154);const isPathSeparator=t=>t===p||t===r;const depth=t=>{if(t.isPrefix!==true){t.depth=t.isGlobstar?Infinity:1}};const scan=(t,e)=>{const u=e||{};const b=t.length-1;const C=u.parts===true||u.scanToEnd===true;const y=[];const $=[];const x=[];let S=t;let H=-1;let v=0;let d=0;let L=false;let T=false;let O=false;let k=false;let m=false;let w=false;let N=false;let I=false;let B=false;let G=false;let D=0;let M;let P;let K={value:"",depth:0,isGlob:false};const eos=()=>H>=b;const peek=()=>S.charCodeAt(H+1);const advance=()=>{M=P;return S.charCodeAt(++H)};while(H0){X=S.slice(0,v);S=S.slice(v);d-=v}if(U&&O===true&&d>0){U=S.slice(0,d);F=S.slice(d)}else if(O===true){U="";F=S}else{U=S}if(U&&U!==""&&U!=="/"&&U!==S){if(isPathSeparator(U.charCodeAt(U.length-1))){U=U.slice(0,-1)}}if(u.unescape===true){if(F)F=n.removeBackslashes(F);if(U&&N===true){U=n.removeBackslashes(U)}}const Q={prefix:X,input:t,start:v,base:U,glob:F,isBrace:L,isBracket:T,isGlob:O,isExtglob:k,isGlobstar:m,negated:I,negatedExtglob:B};if(u.tokens===true){Q.maxDepth=0;if(!isPathSeparator(P)){$.push(K)}Q.tokens=$}if(u.parts===true||u.tokens===true){let e;for(let n=0;n{const{REGEX_BACKSLASH:n,REGEX_REMOVE_BACKSLASH:o,REGEX_SPECIAL_CHARS:s,REGEX_SPECIAL_CHARS_GLOBAL:r}=u(154);e.isObject=t=>t!==null&&typeof t==="object"&&!Array.isArray(t);e.hasRegexChars=t=>s.test(t);e.isRegexChar=t=>t.length===1&&e.hasRegexChars(t);e.escapeRegex=t=>t.replace(r,"\\$1");e.toPosixSlashes=t=>t.replace(n,"/");e.removeBackslashes=t=>t.replace(o,(t=>t==="\\"?"":t));e.escapeLast=(t,u,n)=>{const o=t.lastIndexOf(u,n);if(o===-1)return t;if(t[o-1]==="\\")return e.escapeLast(t,u,o-1);return`${t.slice(0,o)}\\${t.slice(o)}`};e.removePrefix=(t,e={})=>{let u=t;if(u.startsWith("./")){u=u.slice(2);e.prefix="./"}return u};e.wrapOutput=(t,e={},u={})=>{const n=u.contains?"":"^";const o=u.contains?"":"$";let s=`${n}(?:${t})${o}`;if(e.negated===true){s=`(?:^(?!${s}).*$)`}return s};e.basename=(t,{windows:e}={})=>{const u=t.split(e?/[\\/]/:"/");const n=u[u.length-1];if(n===""){return u[u.length-2]}return n}}};var e={};function __nccwpck_require__(u){var n=e[u];if(n!==undefined){return n.exports}var o=e[u]={exports:{}};var s=true;try{t[u](o,o.exports,__nccwpck_require__);s=false}finally{if(s)delete e[u]}return o.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var u=__nccwpck_require__(170);module.exports=u})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/picomatch/package.json b/build/node_modules/next/dist/compiled/picomatch/package.json new file mode 100644 index 0000000..bcb8420 --- /dev/null +++ b/build/node_modules/next/dist/compiled/picomatch/package.json @@ -0,0 +1 @@ +{"name":"picomatch","main":"index.js","author":"Jon Schlinkert (https://github.com/jonschlinkert)","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/react-is/cjs/react-is.development.js b/build/node_modules/next/dist/compiled/react-is/cjs/react-is.development.js new file mode 100644 index 0000000..930755c --- /dev/null +++ b/build/node_modules/next/dist/compiled/react-is/cjs/react-is.development.js @@ -0,0 +1,133 @@ +/** + * @license React + * react-is.development.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; +"production" !== process.env.NODE_ENV && + (function () { + function typeOf(object) { + if ("object" === typeof object && null !== object) { + var $$typeof = object.$$typeof; + switch ($$typeof) { + case REACT_ELEMENT_TYPE: + switch (((object = object.type), object)) { + case REACT_FRAGMENT_TYPE: + case REACT_PROFILER_TYPE: + case REACT_STRICT_MODE_TYPE: + case REACT_SUSPENSE_TYPE: + case REACT_SUSPENSE_LIST_TYPE: + case REACT_VIEW_TRANSITION_TYPE: + return object; + default: + switch (((object = object && object.$$typeof), object)) { + case REACT_CONTEXT_TYPE: + case REACT_FORWARD_REF_TYPE: + case REACT_LAZY_TYPE: + case REACT_MEMO_TYPE: + return object; + case REACT_CONSUMER_TYPE: + return object; + default: + return $$typeof; + } + } + case REACT_PORTAL_TYPE: + return $$typeof; + } + } + } + var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), + REACT_PORTAL_TYPE = Symbol.for("react.portal"), + REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), + REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), + REACT_PROFILER_TYPE = Symbol.for("react.profiler"), + REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), + REACT_CONTEXT_TYPE = Symbol.for("react.context"), + REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), + REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), + REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), + REACT_MEMO_TYPE = Symbol.for("react.memo"), + REACT_LAZY_TYPE = Symbol.for("react.lazy"), + REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"), + REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"); + exports.ContextConsumer = REACT_CONSUMER_TYPE; + exports.ContextProvider = REACT_CONTEXT_TYPE; + exports.Element = REACT_ELEMENT_TYPE; + exports.ForwardRef = REACT_FORWARD_REF_TYPE; + exports.Fragment = REACT_FRAGMENT_TYPE; + exports.Lazy = REACT_LAZY_TYPE; + exports.Memo = REACT_MEMO_TYPE; + exports.Portal = REACT_PORTAL_TYPE; + exports.Profiler = REACT_PROFILER_TYPE; + exports.StrictMode = REACT_STRICT_MODE_TYPE; + exports.Suspense = REACT_SUSPENSE_TYPE; + exports.SuspenseList = REACT_SUSPENSE_LIST_TYPE; + exports.isContextConsumer = function (object) { + return typeOf(object) === REACT_CONSUMER_TYPE; + }; + exports.isContextProvider = function (object) { + return typeOf(object) === REACT_CONTEXT_TYPE; + }; + exports.isElement = function (object) { + return ( + "object" === typeof object && + null !== object && + object.$$typeof === REACT_ELEMENT_TYPE + ); + }; + exports.isForwardRef = function (object) { + return typeOf(object) === REACT_FORWARD_REF_TYPE; + }; + exports.isFragment = function (object) { + return typeOf(object) === REACT_FRAGMENT_TYPE; + }; + exports.isLazy = function (object) { + return typeOf(object) === REACT_LAZY_TYPE; + }; + exports.isMemo = function (object) { + return typeOf(object) === REACT_MEMO_TYPE; + }; + exports.isPortal = function (object) { + return typeOf(object) === REACT_PORTAL_TYPE; + }; + exports.isProfiler = function (object) { + return typeOf(object) === REACT_PROFILER_TYPE; + }; + exports.isStrictMode = function (object) { + return typeOf(object) === REACT_STRICT_MODE_TYPE; + }; + exports.isSuspense = function (object) { + return typeOf(object) === REACT_SUSPENSE_TYPE; + }; + exports.isSuspenseList = function (object) { + return typeOf(object) === REACT_SUSPENSE_LIST_TYPE; + }; + exports.isValidElementType = function (type) { + return "string" === typeof type || + "function" === typeof type || + type === REACT_FRAGMENT_TYPE || + type === REACT_PROFILER_TYPE || + type === REACT_STRICT_MODE_TYPE || + type === REACT_SUSPENSE_TYPE || + type === REACT_SUSPENSE_LIST_TYPE || + type === REACT_VIEW_TRANSITION_TYPE || + ("object" === typeof type && + null !== type && + (type.$$typeof === REACT_LAZY_TYPE || + type.$$typeof === REACT_MEMO_TYPE || + type.$$typeof === REACT_CONTEXT_TYPE || + type.$$typeof === REACT_CONSUMER_TYPE || + type.$$typeof === REACT_FORWARD_REF_TYPE || + type.$$typeof === REACT_CLIENT_REFERENCE || + void 0 !== type.getModuleId)) + ? !0 + : !1; + }; + exports.typeOf = typeOf; + })(); diff --git a/build/node_modules/next/dist/compiled/react-is/cjs/react-is.production.js b/build/node_modules/next/dist/compiled/react-is/cjs/react-is.production.js new file mode 100644 index 0000000..409fd6c --- /dev/null +++ b/build/node_modules/next/dist/compiled/react-is/cjs/react-is.production.js @@ -0,0 +1,130 @@ +/** + * @license React + * react-is.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; +var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), + REACT_PORTAL_TYPE = Symbol.for("react.portal"), + REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), + REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), + REACT_PROFILER_TYPE = Symbol.for("react.profiler"), + REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), + REACT_CONTEXT_TYPE = Symbol.for("react.context"), + REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), + REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), + REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), + REACT_MEMO_TYPE = Symbol.for("react.memo"), + REACT_LAZY_TYPE = Symbol.for("react.lazy"), + REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"), + REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"); +function typeOf(object) { + if ("object" === typeof object && null !== object) { + var $$typeof = object.$$typeof; + switch ($$typeof) { + case REACT_ELEMENT_TYPE: + switch (((object = object.type), object)) { + case REACT_FRAGMENT_TYPE: + case REACT_PROFILER_TYPE: + case REACT_STRICT_MODE_TYPE: + case REACT_SUSPENSE_TYPE: + case REACT_SUSPENSE_LIST_TYPE: + case REACT_VIEW_TRANSITION_TYPE: + return object; + default: + switch (((object = object && object.$$typeof), object)) { + case REACT_CONTEXT_TYPE: + case REACT_FORWARD_REF_TYPE: + case REACT_LAZY_TYPE: + case REACT_MEMO_TYPE: + return object; + case REACT_CONSUMER_TYPE: + return object; + default: + return $$typeof; + } + } + case REACT_PORTAL_TYPE: + return $$typeof; + } + } +} +exports.ContextConsumer = REACT_CONSUMER_TYPE; +exports.ContextProvider = REACT_CONTEXT_TYPE; +exports.Element = REACT_ELEMENT_TYPE; +exports.ForwardRef = REACT_FORWARD_REF_TYPE; +exports.Fragment = REACT_FRAGMENT_TYPE; +exports.Lazy = REACT_LAZY_TYPE; +exports.Memo = REACT_MEMO_TYPE; +exports.Portal = REACT_PORTAL_TYPE; +exports.Profiler = REACT_PROFILER_TYPE; +exports.StrictMode = REACT_STRICT_MODE_TYPE; +exports.Suspense = REACT_SUSPENSE_TYPE; +exports.SuspenseList = REACT_SUSPENSE_LIST_TYPE; +exports.isContextConsumer = function (object) { + return typeOf(object) === REACT_CONSUMER_TYPE; +}; +exports.isContextProvider = function (object) { + return typeOf(object) === REACT_CONTEXT_TYPE; +}; +exports.isElement = function (object) { + return ( + "object" === typeof object && + null !== object && + object.$$typeof === REACT_ELEMENT_TYPE + ); +}; +exports.isForwardRef = function (object) { + return typeOf(object) === REACT_FORWARD_REF_TYPE; +}; +exports.isFragment = function (object) { + return typeOf(object) === REACT_FRAGMENT_TYPE; +}; +exports.isLazy = function (object) { + return typeOf(object) === REACT_LAZY_TYPE; +}; +exports.isMemo = function (object) { + return typeOf(object) === REACT_MEMO_TYPE; +}; +exports.isPortal = function (object) { + return typeOf(object) === REACT_PORTAL_TYPE; +}; +exports.isProfiler = function (object) { + return typeOf(object) === REACT_PROFILER_TYPE; +}; +exports.isStrictMode = function (object) { + return typeOf(object) === REACT_STRICT_MODE_TYPE; +}; +exports.isSuspense = function (object) { + return typeOf(object) === REACT_SUSPENSE_TYPE; +}; +exports.isSuspenseList = function (object) { + return typeOf(object) === REACT_SUSPENSE_LIST_TYPE; +}; +exports.isValidElementType = function (type) { + return "string" === typeof type || + "function" === typeof type || + type === REACT_FRAGMENT_TYPE || + type === REACT_PROFILER_TYPE || + type === REACT_STRICT_MODE_TYPE || + type === REACT_SUSPENSE_TYPE || + type === REACT_SUSPENSE_LIST_TYPE || + type === REACT_VIEW_TRANSITION_TYPE || + ("object" === typeof type && + null !== type && + (type.$$typeof === REACT_LAZY_TYPE || + type.$$typeof === REACT_MEMO_TYPE || + type.$$typeof === REACT_CONTEXT_TYPE || + type.$$typeof === REACT_CONSUMER_TYPE || + type.$$typeof === REACT_FORWARD_REF_TYPE || + type.$$typeof === REACT_CLIENT_REFERENCE || + void 0 !== type.getModuleId)) + ? !0 + : !1; +}; +exports.typeOf = typeOf; diff --git a/build/node_modules/next/dist/compiled/react-is/index.js b/build/node_modules/next/dist/compiled/react-is/index.js new file mode 100644 index 0000000..2cafe48 --- /dev/null +++ b/build/node_modules/next/dist/compiled/react-is/index.js @@ -0,0 +1,7 @@ +'use strict'; + +if (process.env.NODE_ENV === 'production') { + module.exports = require('./cjs/react-is.production.js'); +} else { + module.exports = require('./cjs/react-is.development.js'); +} diff --git a/build/node_modules/next/dist/compiled/react-is/package.json b/build/node_modules/next/dist/compiled/react-is/package.json new file mode 100644 index 0000000..ed5e262 --- /dev/null +++ b/build/node_modules/next/dist/compiled/react-is/package.json @@ -0,0 +1,26 @@ +{ + "name": "react-is", + "version": "19.3.0-canary-3f0b9e61-20260317", + "description": "Brand checking of React Elements.", + "main": "index.js", + "sideEffects": false, + "repository": { + "type": "git", + "url": "https://github.com/facebook/react.git", + "directory": "packages/react-is" + }, + "keywords": [ + "react" + ], + "license": "MIT", + "bugs": { + "url": "https://github.com/facebook/react/issues" + }, + "homepage": "https://react.dev/", + "files": [ + "LICENSE", + "README.md", + "index.js", + "cjs/" + ] +} \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/regenerator-runtime/package.json b/build/node_modules/next/dist/compiled/regenerator-runtime/package.json new file mode 100644 index 0000000..ebfd49a --- /dev/null +++ b/build/node_modules/next/dist/compiled/regenerator-runtime/package.json @@ -0,0 +1,19 @@ +{ + "name": "regenerator-runtime", + "author": "Ben Newman ", + "description": "Runtime for Regenerator-compiled generator and async functions.", + "version": "0.13.4", + "main": "runtime.js", + "keywords": [ + "regenerator", + "runtime", + "generator", + "async" + ], + "sideEffects": true, + "repository": { + "type": "git", + "url": "https://github.com/facebook/regenerator/tree/master/packages/regenerator-runtime" + }, + "license": "MIT" +} diff --git a/build/node_modules/next/dist/compiled/regenerator-runtime/runtime.js b/build/node_modules/next/dist/compiled/regenerator-runtime/runtime.js new file mode 100644 index 0000000..224bf70 --- /dev/null +++ b/build/node_modules/next/dist/compiled/regenerator-runtime/runtime.js @@ -0,0 +1,729 @@ +/** + * Copyright (c) 2014-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +var runtime = (function (exports) { + "use strict"; + + var Op = Object.prototype; + var hasOwn = Op.hasOwnProperty; + var undefined; // More compressible than void 0. + var $Symbol = typeof Symbol === "function" ? Symbol : {}; + var iteratorSymbol = $Symbol.iterator || "@@iterator"; + var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; + var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; + + function wrap(innerFn, outerFn, self, tryLocsList) { + // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator. + var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; + var generator = Object.create(protoGenerator.prototype); + var context = new Context(tryLocsList || []); + + // The ._invoke method unifies the implementations of the .next, + // .throw, and .return methods. + generator._invoke = makeInvokeMethod(innerFn, self, context); + + return generator; + } + exports.wrap = wrap; + + // Try/catch helper to minimize deoptimizations. Returns a completion + // record like context.tryEntries[i].completion. This interface could + // have been (and was previously) designed to take a closure to be + // invoked without arguments, but in all the cases we care about we + // already have an existing method we want to call, so there's no need + // to create a new function object. We can even get away with assuming + // the method takes exactly one argument, since that happens to be true + // in every case, so we don't have to touch the arguments object. The + // only additional allocation required is the completion record, which + // has a stable shape and so hopefully should be cheap to allocate. + function tryCatch(fn, obj, arg) { + try { + return { type: "normal", arg: fn.call(obj, arg) }; + } catch (err) { + return { type: "throw", arg: err }; + } + } + + var GenStateSuspendedStart = "suspendedStart"; + var GenStateSuspendedYield = "suspendedYield"; + var GenStateExecuting = "executing"; + var GenStateCompleted = "completed"; + + // Returning this object from the innerFn has the same effect as + // breaking out of the dispatch switch statement. + var ContinueSentinel = {}; + + // Dummy constructor functions that we use as the .constructor and + // .constructor.prototype properties for functions that return Generator + // objects. For full spec compliance, you may wish to configure your + // minifier not to mangle the names of these two functions. + function Generator() {} + function GeneratorFunction() {} + function GeneratorFunctionPrototype() {} + + // This is a polyfill for %IteratorPrototype% for environments that + // don't natively support it. + var IteratorPrototype = {}; + IteratorPrototype[iteratorSymbol] = function () { + return this; + }; + + var getProto = Object.getPrototypeOf; + var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); + if (NativeIteratorPrototype && + NativeIteratorPrototype !== Op && + hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { + // This environment has a native %IteratorPrototype%; use it instead + // of the polyfill. + IteratorPrototype = NativeIteratorPrototype; + } + + var Gp = GeneratorFunctionPrototype.prototype = + Generator.prototype = Object.create(IteratorPrototype); + GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; + GeneratorFunctionPrototype.constructor = GeneratorFunction; + GeneratorFunctionPrototype[toStringTagSymbol] = + GeneratorFunction.displayName = "GeneratorFunction"; + + // Helper for defining the .next, .throw, and .return methods of the + // Iterator interface in terms of a single ._invoke method. + function defineIteratorMethods(prototype) { + ["next", "throw", "return"].forEach(function(method) { + prototype[method] = function(arg) { + return this._invoke(method, arg); + }; + }); + } + + exports.isGeneratorFunction = function(genFun) { + var ctor = typeof genFun === "function" && genFun.constructor; + return ctor + ? ctor === GeneratorFunction || + // For the native GeneratorFunction constructor, the best we can + // do is to check its .name property. + (ctor.displayName || ctor.name) === "GeneratorFunction" + : false; + }; + + exports.mark = function(genFun) { + if (Object.setPrototypeOf) { + Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); + } else { + genFun.__proto__ = GeneratorFunctionPrototype; + if (!(toStringTagSymbol in genFun)) { + genFun[toStringTagSymbol] = "GeneratorFunction"; + } + } + genFun.prototype = Object.create(Gp); + return genFun; + }; + + // Within the body of any async function, `await x` is transformed to + // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test + // `hasOwn.call(value, "__await")` to determine if the yielded value is + // meant to be awaited. + exports.awrap = function(arg) { + return { __await: arg }; + }; + + function AsyncIterator(generator, PromiseImpl) { + function invoke(method, arg, resolve, reject) { + var record = tryCatch(generator[method], generator, arg); + if (record.type === "throw") { + reject(record.arg); + } else { + var result = record.arg; + var value = result.value; + if (value && + typeof value === "object" && + hasOwn.call(value, "__await")) { + return PromiseImpl.resolve(value.__await).then(function(value) { + invoke("next", value, resolve, reject); + }, function(err) { + invoke("throw", err, resolve, reject); + }); + } + + return PromiseImpl.resolve(value).then(function(unwrapped) { + // When a yielded Promise is resolved, its final value becomes + // the .value of the Promise<{value,done}> result for the + // current iteration. + result.value = unwrapped; + resolve(result); + }, function(error) { + // If a rejected Promise was yielded, throw the rejection back + // into the async generator function so it can be handled there. + return invoke("throw", error, resolve, reject); + }); + } + } + + var previousPromise; + + function enqueue(method, arg) { + function callInvokeWithMethodAndArg() { + return new PromiseImpl(function(resolve, reject) { + invoke(method, arg, resolve, reject); + }); + } + + return previousPromise = + // If enqueue has been called before, then we want to wait until + // all previous Promises have been resolved before calling invoke, + // so that results are always delivered in the correct order. If + // enqueue has not been called before, then it is important to + // call invoke immediately, without waiting on a callback to fire, + // so that the async generator function has the opportunity to do + // any necessary setup in a predictable way. This predictability + // is why the Promise constructor synchronously invokes its + // executor callback, and why async functions synchronously + // execute code before the first await. Since we implement simple + // async functions in terms of async generators, it is especially + // important to get this right, even though it requires care. + previousPromise ? previousPromise.then( + callInvokeWithMethodAndArg, + // Avoid propagating failures to Promises returned by later + // invocations of the iterator. + callInvokeWithMethodAndArg + ) : callInvokeWithMethodAndArg(); + } + + // Define the unified helper method that is used to implement .next, + // .throw, and .return (see defineIteratorMethods). + this._invoke = enqueue; + } + + defineIteratorMethods(AsyncIterator.prototype); + AsyncIterator.prototype[asyncIteratorSymbol] = function () { + return this; + }; + exports.AsyncIterator = AsyncIterator; + + // Note that simple async functions are implemented on top of + // AsyncIterator objects; they just return a Promise for the value of + // the final result produced by the iterator. + exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) { + if (PromiseImpl === void 0) PromiseImpl = Promise; + + var iter = new AsyncIterator( + wrap(innerFn, outerFn, self, tryLocsList), + PromiseImpl + ); + + return exports.isGeneratorFunction(outerFn) + ? iter // If outerFn is a generator, return the full iterator. + : iter.next().then(function(result) { + return result.done ? result.value : iter.next(); + }); + }; + + function makeInvokeMethod(innerFn, self, context) { + var state = GenStateSuspendedStart; + + return function invoke(method, arg) { + if (state === GenStateExecuting) { + throw new Error("Generator is already running"); + } + + if (state === GenStateCompleted) { + if (method === "throw") { + throw arg; + } + + // Be forgiving, per 25.3.3.3.3 of the spec: + // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume + return doneResult(); + } + + context.method = method; + context.arg = arg; + + while (true) { + var delegate = context.delegate; + if (delegate) { + var delegateResult = maybeInvokeDelegate(delegate, context); + if (delegateResult) { + if (delegateResult === ContinueSentinel) continue; + return delegateResult; + } + } + + if (context.method === "next") { + // Setting context._sent for legacy support of Babel's + // function.sent implementation. + context.sent = context._sent = context.arg; + + } else if (context.method === "throw") { + if (state === GenStateSuspendedStart) { + state = GenStateCompleted; + throw context.arg; + } + + context.dispatchException(context.arg); + + } else if (context.method === "return") { + context.abrupt("return", context.arg); + } + + state = GenStateExecuting; + + var record = tryCatch(innerFn, self, context); + if (record.type === "normal") { + // If an exception is thrown from innerFn, we leave state === + // GenStateExecuting and loop back for another invocation. + state = context.done + ? GenStateCompleted + : GenStateSuspendedYield; + + if (record.arg === ContinueSentinel) { + continue; + } + + return { + value: record.arg, + done: context.done + }; + + } else if (record.type === "throw") { + state = GenStateCompleted; + // Dispatch the exception by looping back around to the + // context.dispatchException(context.arg) call above. + context.method = "throw"; + context.arg = record.arg; + } + } + }; + } + + // Call delegate.iterator[context.method](context.arg) and handle the + // result, either by returning a { value, done } result from the + // delegate iterator, or by modifying context.method and context.arg, + // setting context.delegate to null, and returning the ContinueSentinel. + function maybeInvokeDelegate(delegate, context) { + var method = delegate.iterator[context.method]; + if (method === undefined) { + // A .throw or .return when the delegate iterator has no .throw + // method always terminates the yield* loop. + context.delegate = null; + + if (context.method === "throw") { + // Note: ["return"] must be used for ES3 parsing compatibility. + if (delegate.iterator["return"]) { + // If the delegate iterator has a return method, give it a + // chance to clean up. + context.method = "return"; + context.arg = undefined; + maybeInvokeDelegate(delegate, context); + + if (context.method === "throw") { + // If maybeInvokeDelegate(context) changed context.method from + // "return" to "throw", let that override the TypeError below. + return ContinueSentinel; + } + } + + context.method = "throw"; + context.arg = new TypeError( + "The iterator does not provide a 'throw' method"); + } + + return ContinueSentinel; + } + + var record = tryCatch(method, delegate.iterator, context.arg); + + if (record.type === "throw") { + context.method = "throw"; + context.arg = record.arg; + context.delegate = null; + return ContinueSentinel; + } + + var info = record.arg; + + if (! info) { + context.method = "throw"; + context.arg = new TypeError("iterator result is not an object"); + context.delegate = null; + return ContinueSentinel; + } + + if (info.done) { + // Assign the result of the finished delegate to the temporary + // variable specified by delegate.resultName (see delegateYield). + context[delegate.resultName] = info.value; + + // Resume execution at the desired location (see delegateYield). + context.next = delegate.nextLoc; + + // If context.method was "throw" but the delegate handled the + // exception, let the outer generator proceed normally. If + // context.method was "next", forget context.arg since it has been + // "consumed" by the delegate iterator. If context.method was + // "return", allow the original .return call to continue in the + // outer generator. + if (context.method !== "return") { + context.method = "next"; + context.arg = undefined; + } + + } else { + // Re-yield the result returned by the delegate method. + return info; + } + + // The delegate iterator is finished, so forget it and continue with + // the outer generator. + context.delegate = null; + return ContinueSentinel; + } + + // Define Generator.prototype.{next,throw,return} in terms of the + // unified ._invoke helper method. + defineIteratorMethods(Gp); + + Gp[toStringTagSymbol] = "Generator"; + + // A Generator should always return itself as the iterator object when the + // @@iterator function is called on it. Some browsers' implementations of the + // iterator prototype chain incorrectly implement this, causing the Generator + // object to not be returned from this call. This ensures that doesn't happen. + // See https://github.com/facebook/regenerator/issues/274 for more details. + Gp[iteratorSymbol] = function() { + return this; + }; + + Gp.toString = function() { + return "[object Generator]"; + }; + + function pushTryEntry(locs) { + var entry = { tryLoc: locs[0] }; + + if (1 in locs) { + entry.catchLoc = locs[1]; + } + + if (2 in locs) { + entry.finallyLoc = locs[2]; + entry.afterLoc = locs[3]; + } + + this.tryEntries.push(entry); + } + + function resetTryEntry(entry) { + var record = entry.completion || {}; + record.type = "normal"; + delete record.arg; + entry.completion = record; + } + + function Context(tryLocsList) { + // The root entry object (effectively a try statement without a catch + // or a finally block) gives us a place to store values thrown from + // locations where there is no enclosing try statement. + this.tryEntries = [{ tryLoc: "root" }]; + tryLocsList.forEach(pushTryEntry, this); + this.reset(true); + } + + exports.keys = function(object) { + var keys = []; + for (var key in object) { + keys.push(key); + } + keys.reverse(); + + // Rather than returning an object with a next method, we keep + // things simple and return the next function itself. + return function next() { + while (keys.length) { + var key = keys.pop(); + if (key in object) { + next.value = key; + next.done = false; + return next; + } + } + + // To avoid creating an additional object, we just hang the .value + // and .done properties off the next function object itself. This + // also ensures that the minifier will not anonymize the function. + next.done = true; + return next; + }; + }; + + function values(iterable) { + if (iterable) { + var iteratorMethod = iterable[iteratorSymbol]; + if (iteratorMethod) { + return iteratorMethod.call(iterable); + } + + if (typeof iterable.next === "function") { + return iterable; + } + + if (!isNaN(iterable.length)) { + var i = -1, next = function next() { + while (++i < iterable.length) { + if (hasOwn.call(iterable, i)) { + next.value = iterable[i]; + next.done = false; + return next; + } + } + + next.value = undefined; + next.done = true; + + return next; + }; + + return next.next = next; + } + } + + // Return an iterator with no values. + return { next: doneResult }; + } + exports.values = values; + + function doneResult() { + return { value: undefined, done: true }; + } + + Context.prototype = { + constructor: Context, + + reset: function(skipTempReset) { + this.prev = 0; + this.next = 0; + // Resetting context._sent for legacy support of Babel's + // function.sent implementation. + this.sent = this._sent = undefined; + this.done = false; + this.delegate = null; + + this.method = "next"; + this.arg = undefined; + + this.tryEntries.forEach(resetTryEntry); + + if (!skipTempReset) { + for (var name in this) { + // Not sure about the optimal order of these conditions: + if (name.charAt(0) === "t" && + hasOwn.call(this, name) && + !isNaN(+name.slice(1))) { + this[name] = undefined; + } + } + } + }, + + stop: function() { + this.done = true; + + var rootEntry = this.tryEntries[0]; + var rootRecord = rootEntry.completion; + if (rootRecord.type === "throw") { + throw rootRecord.arg; + } + + return this.rval; + }, + + dispatchException: function(exception) { + if (this.done) { + throw exception; + } + + var context = this; + function handle(loc, caught) { + record.type = "throw"; + record.arg = exception; + context.next = loc; + + if (caught) { + // If the dispatched exception was caught by a catch block, + // then let that catch block handle the exception normally. + context.method = "next"; + context.arg = undefined; + } + + return !! caught; + } + + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + var record = entry.completion; + + if (entry.tryLoc === "root") { + // Exception thrown outside of any try block that could handle + // it, so set the completion value of the entire function to + // throw the exception. + return handle("end"); + } + + if (entry.tryLoc <= this.prev) { + var hasCatch = hasOwn.call(entry, "catchLoc"); + var hasFinally = hasOwn.call(entry, "finallyLoc"); + + if (hasCatch && hasFinally) { + if (this.prev < entry.catchLoc) { + return handle(entry.catchLoc, true); + } else if (this.prev < entry.finallyLoc) { + return handle(entry.finallyLoc); + } + + } else if (hasCatch) { + if (this.prev < entry.catchLoc) { + return handle(entry.catchLoc, true); + } + + } else if (hasFinally) { + if (this.prev < entry.finallyLoc) { + return handle(entry.finallyLoc); + } + + } else { + throw new Error("try statement without catch or finally"); + } + } + } + }, + + abrupt: function(type, arg) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.tryLoc <= this.prev && + hasOwn.call(entry, "finallyLoc") && + this.prev < entry.finallyLoc) { + var finallyEntry = entry; + break; + } + } + + if (finallyEntry && + (type === "break" || + type === "continue") && + finallyEntry.tryLoc <= arg && + arg <= finallyEntry.finallyLoc) { + // Ignore the finally entry if control is not jumping to a + // location outside the try/catch block. + finallyEntry = null; + } + + var record = finallyEntry ? finallyEntry.completion : {}; + record.type = type; + record.arg = arg; + + if (finallyEntry) { + this.method = "next"; + this.next = finallyEntry.finallyLoc; + return ContinueSentinel; + } + + return this.complete(record); + }, + + complete: function(record, afterLoc) { + if (record.type === "throw") { + throw record.arg; + } + + if (record.type === "break" || + record.type === "continue") { + this.next = record.arg; + } else if (record.type === "return") { + this.rval = this.arg = record.arg; + this.method = "return"; + this.next = "end"; + } else if (record.type === "normal" && afterLoc) { + this.next = afterLoc; + } + + return ContinueSentinel; + }, + + finish: function(finallyLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.finallyLoc === finallyLoc) { + this.complete(entry.completion, entry.afterLoc); + resetTryEntry(entry); + return ContinueSentinel; + } + } + }, + + "catch": function(tryLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.tryLoc === tryLoc) { + var record = entry.completion; + if (record.type === "throw") { + var thrown = record.arg; + resetTryEntry(entry); + } + return thrown; + } + } + + // The context.catch method must only be called with a location + // argument that corresponds to a known catch block. + throw new Error("illegal catch attempt"); + }, + + delegateYield: function(iterable, resultName, nextLoc) { + this.delegate = { + iterator: values(iterable), + resultName: resultName, + nextLoc: nextLoc + }; + + if (this.method === "next") { + // Deliberately forget the last sent value so that we don't + // accidentally pass it on to the delegate. + this.arg = undefined; + } + + return ContinueSentinel; + } + }; + + // Regardless of whether this script is executing as a CommonJS module + // or not, return the runtime object so that we can declare the variable + // regeneratorRuntime in the outer scope, which allows this module to be + // injected easily by `bin/regenerator --include-runtime script.js`. + return exports; + +}( + // If this script is executing as a CommonJS module, use module.exports + // as the regeneratorRuntime namespace. Otherwise create a new empty + // object. Either way, the resulting object will be used to initialize + // the regeneratorRuntime variable at the top of this file. + typeof module === "object" ? module.exports : {} +)); + +try { + regeneratorRuntime = runtime; +} catch (accidentalStrictMode) { + // This module should not be running in strict mode, so the above + // assignment should always work unless something is misconfigured. Just + // in case runtime.js accidentally runs in strict mode, we can escape + // strict mode using a global Function call. This could conceivably fail + // if a Content Security Policy forbids using Function, but in that case + // the proper solution is to fix the accidental strict mode problem. If + // you've misconfigured your bundler to force strict mode and applied a + // CSP to forbid Function, and you're not willing to fix either of those + // problems, please detail your unique predicament in a GitHub issue. + Function("r", "regeneratorRuntime = r")(runtime); +} diff --git a/build/node_modules/next/dist/compiled/semver/index.js b/build/node_modules/next/dist/compiled/semver/index.js new file mode 100644 index 0000000..b7f2017 --- /dev/null +++ b/build/node_modules/next/dist/compiled/semver/index.js @@ -0,0 +1 @@ +(()=>{var e={842:(e,r,t)=>{const s=Symbol("SemVer ANY");class Comparator{static get ANY(){return s}constructor(e,r){if(!r||typeof r!=="object"){r={loose:!!r,includePrerelease:false}}if(e instanceof Comparator){if(e.loose===!!r.loose){return e}else{e=e.value}}a("comparator",e,r);this.options=r;this.loose=!!r.loose;this.parse(e);if(this.semver===s){this.value=""}else{this.value=this.operator+this.semver.version}a("comp",this)}parse(e){const r=this.options.loose?o[n.COMPARATORLOOSE]:o[n.COMPARATOR];const t=e.match(r);if(!t){throw new TypeError(`Invalid comparator: ${e}`)}this.operator=t[1]!==undefined?t[1]:"";if(this.operator==="="){this.operator=""}if(!t[2]){this.semver=s}else{this.semver=new l(t[2],this.options.loose)}}toString(){return this.value}test(e){a("Comparator.test",e,this.options.loose);if(this.semver===s||e===s){return true}if(typeof e==="string"){try{e=new l(e,this.options)}catch(e){return false}}return i(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof Comparator)){throw new TypeError("a Comparator is required")}if(!r||typeof r!=="object"){r={loose:!!r,includePrerelease:false}}if(this.operator===""){if(this.value===""){return true}return new c(e.value,r).test(this.value)}else if(e.operator===""){if(e.value===""){return true}return new c(this.value,r).test(e.semver)}const t=(this.operator===">="||this.operator===">")&&(e.operator===">="||e.operator===">");const s=(this.operator==="<="||this.operator==="<")&&(e.operator==="<="||e.operator==="<");const o=this.semver.version===e.semver.version;const n=(this.operator===">="||this.operator==="<=")&&(e.operator===">="||e.operator==="<=");const a=i(this.semver,"<",e.semver,r)&&(this.operator===">="||this.operator===">")&&(e.operator==="<="||e.operator==="<");const l=i(this.semver,">",e.semver,r)&&(this.operator==="<="||this.operator==="<")&&(e.operator===">="||e.operator===">");return t||s||o&&n||a||l}}e.exports=Comparator;const{re:o,t:n}=t(608);const i=t(96);const a=t(435);const l=t(834);const c=t(798)},798:(e,r,t)=>{class Range{constructor(e,r){if(!r||typeof r!=="object"){r={loose:!!r,includePrerelease:false}}if(e instanceof Range){if(e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease){return e}else{return new Range(e.raw,r)}}if(e instanceof s){this.raw=e.value;this.set=[[e]];this.format();return this}this.options=r;this.loose=!!r.loose;this.includePrerelease=!!r.includePrerelease;this.raw=e;this.set=e.split(/\s*\|\|\s*/).map((e=>this.parseRange(e.trim()))).filter((e=>e.length));if(!this.set.length){throw new TypeError(`Invalid SemVer Range: ${e}`)}this.format()}format(){this.range=this.set.map((e=>e.join(" ").trim())).join("||").trim();return this.range}toString(){return this.range}parseRange(e){const r=this.options.loose;e=e.trim();const t=r?i[a.HYPHENRANGELOOSE]:i[a.HYPHENRANGE];e=e.replace(t,hyphenReplace(this.options.includePrerelease));o("hyphen replace",e);e=e.replace(i[a.COMPARATORTRIM],l);o("comparator trim",e,i[a.COMPARATORTRIM]);e=e.replace(i[a.TILDETRIM],c);e=e.replace(i[a.CARETTRIM],p);e=e.split(/\s+/).join(" ");const n=r?i[a.COMPARATORLOOSE]:i[a.COMPARATOR];return e.split(" ").map((e=>parseComparator(e,this.options))).join(" ").split(/\s+/).map((e=>replaceGTE0(e,this.options))).filter(this.options.loose?e=>!!e.match(n):()=>true).map((e=>new s(e,this.options)))}intersects(e,r){if(!(e instanceof Range)){throw new TypeError("a Range is required")}return this.set.some((t=>isSatisfiable(t,r)&&e.set.some((e=>isSatisfiable(e,r)&&t.every((t=>e.every((e=>t.intersects(e,r)))))))))}test(e){if(!e){return false}if(typeof e==="string"){try{e=new n(e,this.options)}catch(e){return false}}for(let r=0;r{let t=true;const s=e.slice();let o=s.pop();while(t&&s.length){t=s.every((e=>o.intersects(e,r)));o=s.pop()}return t};const parseComparator=(e,r)=>{o("comp",e,r);e=replaceCarets(e,r);o("caret",e);e=replaceTildes(e,r);o("tildes",e);e=replaceXRanges(e,r);o("xrange",e);e=replaceStars(e,r);o("stars",e);return e};const isX=e=>!e||e.toLowerCase()==="x"||e==="*";const replaceTildes=(e,r)=>e.trim().split(/\s+/).map((e=>replaceTilde(e,r))).join(" ");const replaceTilde=(e,r)=>{const t=r.loose?i[a.TILDELOOSE]:i[a.TILDE];return e.replace(t,((r,t,s,n,i)=>{o("tilde",e,r,t,s,n,i);let a;if(isX(t)){a=""}else if(isX(s)){a=`>=${t}.0.0 <${+t+1}.0.0-0`}else if(isX(n)){a=`>=${t}.${s}.0 <${t}.${+s+1}.0-0`}else if(i){o("replaceTilde pr",i);a=`>=${t}.${s}.${n}-${i} <${t}.${+s+1}.0-0`}else{a=`>=${t}.${s}.${n} <${t}.${+s+1}.0-0`}o("tilde return",a);return a}))};const replaceCarets=(e,r)=>e.trim().split(/\s+/).map((e=>replaceCaret(e,r))).join(" ");const replaceCaret=(e,r)=>{o("caret",e,r);const t=r.loose?i[a.CARETLOOSE]:i[a.CARET];const s=r.includePrerelease?"-0":"";return e.replace(t,((r,t,n,i,a)=>{o("caret",e,r,t,n,i,a);let l;if(isX(t)){l=""}else if(isX(n)){l=`>=${t}.0.0${s} <${+t+1}.0.0-0`}else if(isX(i)){if(t==="0"){l=`>=${t}.${n}.0${s} <${t}.${+n+1}.0-0`}else{l=`>=${t}.${n}.0${s} <${+t+1}.0.0-0`}}else if(a){o("replaceCaret pr",a);if(t==="0"){if(n==="0"){l=`>=${t}.${n}.${i}-${a} <${t}.${n}.${+i+1}-0`}else{l=`>=${t}.${n}.${i}-${a} <${t}.${+n+1}.0-0`}}else{l=`>=${t}.${n}.${i}-${a} <${+t+1}.0.0-0`}}else{o("no pr");if(t==="0"){if(n==="0"){l=`>=${t}.${n}.${i}${s} <${t}.${n}.${+i+1}-0`}else{l=`>=${t}.${n}.${i}${s} <${t}.${+n+1}.0-0`}}else{l=`>=${t}.${n}.${i} <${+t+1}.0.0-0`}}o("caret return",l);return l}))};const replaceXRanges=(e,r)=>{o("replaceXRanges",e,r);return e.split(/\s+/).map((e=>replaceXRange(e,r))).join(" ")};const replaceXRange=(e,r)=>{e=e.trim();const t=r.loose?i[a.XRANGELOOSE]:i[a.XRANGE];return e.replace(t,((t,s,n,i,a,l)=>{o("xRange",e,t,s,n,i,a,l);const c=isX(n);const p=c||isX(i);const E=p||isX(a);const f=E;if(s==="="&&f){s=""}l=r.includePrerelease?"-0":"";if(c){if(s===">"||s==="<"){t="<0.0.0-0"}else{t="*"}}else if(s&&f){if(p){i=0}a=0;if(s===">"){s=">=";if(p){n=+n+1;i=0;a=0}else{i=+i+1;a=0}}else if(s==="<="){s="<";if(p){n=+n+1}else{i=+i+1}}if(s==="<")l="-0";t=`${s+n}.${i}.${a}${l}`}else if(p){t=`>=${n}.0.0${l} <${+n+1}.0.0-0`}else if(E){t=`>=${n}.${i}.0${l} <${n}.${+i+1}.0-0`}o("xRange return",t);return t}))};const replaceStars=(e,r)=>{o("replaceStars",e,r);return e.trim().replace(i[a.STAR],"")};const replaceGTE0=(e,r)=>{o("replaceGTE0",e,r);return e.trim().replace(i[r.includePrerelease?a.GTE0PRE:a.GTE0],"")};const hyphenReplace=e=>(r,t,s,o,n,i,a,l,c,p,E,f,h)=>{if(isX(s)){t=""}else if(isX(o)){t=`>=${s}.0.0${e?"-0":""}`}else if(isX(n)){t=`>=${s}.${o}.0${e?"-0":""}`}else if(i){t=`>=${t}`}else{t=`>=${t}${e?"-0":""}`}if(isX(c)){l=""}else if(isX(p)){l=`<${+c+1}.0.0-0`}else if(isX(E)){l=`<${c}.${+p+1}.0-0`}else if(f){l=`<=${c}.${p}.${E}-${f}`}else if(e){l=`<${c}.${p}.${+E+1}-0`}else{l=`<=${l}`}return`${t} ${l}`.trim()};const testSet=(e,r,t)=>{for(let t=0;t0){const s=e[t].semver;if(s.major===r.major&&s.minor===r.minor&&s.patch===r.patch){return true}}}return false}return true}},834:(e,r,t)=>{const s=t(435);const{MAX_LENGTH:o,MAX_SAFE_INTEGER:n}=t(370);const{re:i,t:a}=t(608);const{compareIdentifiers:l}=t(154);class SemVer{constructor(e,r){if(!r||typeof r!=="object"){r={loose:!!r,includePrerelease:false}}if(e instanceof SemVer){if(e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease){return e}else{e=e.version}}else if(typeof e!=="string"){throw new TypeError(`Invalid Version: ${e}`)}if(e.length>o){throw new TypeError(`version is longer than ${o} characters`)}s("SemVer",e,r);this.options=r;this.loose=!!r.loose;this.includePrerelease=!!r.includePrerelease;const t=e.trim().match(r.loose?i[a.LOOSE]:i[a.FULL]);if(!t){throw new TypeError(`Invalid Version: ${e}`)}this.raw=e;this.major=+t[1];this.minor=+t[2];this.patch=+t[3];if(this.major>n||this.major<0){throw new TypeError("Invalid major version")}if(this.minor>n||this.minor<0){throw new TypeError("Invalid minor version")}if(this.patch>n||this.patch<0){throw new TypeError("Invalid patch version")}if(!t[4]){this.prerelease=[]}else{this.prerelease=t[4].split(".").map((e=>{if(/^[0-9]+$/.test(e)){const r=+e;if(r>=0&&r=0){if(typeof this.prerelease[e]==="number"){this.prerelease[e]++;e=-2}}if(e===-1){this.prerelease.push(0)}}if(r){if(this.prerelease[0]===r){if(isNaN(this.prerelease[1])){this.prerelease=[r,0]}}else{this.prerelease=[r,0]}}break;default:throw new Error(`invalid increment argument: ${e}`)}this.format();this.raw=this.version;return this}}e.exports=SemVer},909:(e,r,t)=>{const s=t(815);const clean=(e,r)=>{const t=s(e.trim().replace(/^[=v]+/,""),r);return t?t.version:null};e.exports=clean},96:(e,r,t)=>{const s=t(83);const o=t(818);const n=t(850);const i=t(488);const a=t(957);const l=t(551);const cmp=(e,r,t,c)=>{switch(r){case"===":if(typeof e==="object")e=e.version;if(typeof t==="object")t=t.version;return e===t;case"!==":if(typeof e==="object")e=e.version;if(typeof t==="object")t=t.version;return e!==t;case"":case"=":case"==":return s(e,t,c);case"!=":return o(e,t,c);case">":return n(e,t,c);case">=":return i(e,t,c);case"<":return a(e,t,c);case"<=":return l(e,t,c);default:throw new TypeError(`Invalid operator: ${r}`)}};e.exports=cmp},778:(e,r,t)=>{const s=t(834);const o=t(815);const{re:n,t:i}=t(608);const coerce=(e,r)=>{if(e instanceof s){return e}if(typeof e==="number"){e=String(e)}if(typeof e!=="string"){return null}r=r||{};let t=null;if(!r.rtl){t=e.match(n[i.COERCE])}else{let r;while((r=n[i.COERCERTL].exec(e))&&(!t||t.index+t[0].length!==e.length)){if(!t||r.index+r[0].length!==t.index+t[0].length){t=r}n[i.COERCERTL].lastIndex=r.index+r[1].length+r[2].length}n[i.COERCERTL].lastIndex=-1}if(t===null)return null;return o(`${t[2]}.${t[3]||"0"}.${t[4]||"0"}`,r)};e.exports=coerce},406:(e,r,t)=>{const s=t(834);const compareBuild=(e,r,t)=>{const o=new s(e,t);const n=new s(r,t);return o.compare(n)||o.compareBuild(n)};e.exports=compareBuild},473:(e,r,t)=>{const s=t(756);const compareLoose=(e,r)=>s(e,r,true);e.exports=compareLoose},756:(e,r,t)=>{const s=t(834);const compare=(e,r,t)=>new s(e,t).compare(new s(r,t));e.exports=compare},843:(e,r,t)=>{const s=t(815);const o=t(83);const diff=(e,r)=>{if(o(e,r)){return null}else{const t=s(e);const o=s(r);const n=t.prerelease.length||o.prerelease.length;const i=n?"pre":"";const a=n?"prerelease":"";for(const e in t){if(e==="major"||e==="minor"||e==="patch"){if(t[e]!==o[e]){return i+e}}}return a}};e.exports=diff},83:(e,r,t)=>{const s=t(756);const eq=(e,r,t)=>s(e,r,t)===0;e.exports=eq},850:(e,r,t)=>{const s=t(756);const gt=(e,r,t)=>s(e,r,t)>0;e.exports=gt},488:(e,r,t)=>{const s=t(756);const gte=(e,r,t)=>s(e,r,t)>=0;e.exports=gte},77:(e,r,t)=>{const s=t(834);const inc=(e,r,t,o)=>{if(typeof t==="string"){o=t;t=undefined}try{return new s(e,t).inc(r,o).version}catch(e){return null}};e.exports=inc},957:(e,r,t)=>{const s=t(756);const lt=(e,r,t)=>s(e,r,t)<0;e.exports=lt},551:(e,r,t)=>{const s=t(756);const lte=(e,r,t)=>s(e,r,t)<=0;e.exports=lte},973:(e,r,t)=>{const s=t(834);const major=(e,r)=>new s(e,r).major;e.exports=major},70:(e,r,t)=>{const s=t(834);const minor=(e,r)=>new s(e,r).minor;e.exports=minor},818:(e,r,t)=>{const s=t(756);const neq=(e,r,t)=>s(e,r,t)!==0;e.exports=neq},815:(e,r,t)=>{const{MAX_LENGTH:s}=t(370);const{re:o,t:n}=t(608);const i=t(834);const parse=(e,r)=>{if(!r||typeof r!=="object"){r={loose:!!r,includePrerelease:false}}if(e instanceof i){return e}if(typeof e!=="string"){return null}if(e.length>s){return null}const t=r.loose?o[n.LOOSE]:o[n.FULL];if(!t.test(e)){return null}try{return new i(e,r)}catch(e){return null}};e.exports=parse},944:(e,r,t)=>{const s=t(834);const patch=(e,r)=>new s(e,r).patch;e.exports=patch},304:(e,r,t)=>{const s=t(815);const prerelease=(e,r)=>{const t=s(e,r);return t&&t.prerelease.length?t.prerelease:null};e.exports=prerelease},503:(e,r,t)=>{const s=t(756);const rcompare=(e,r,t)=>s(r,e,t);e.exports=rcompare},548:(e,r,t)=>{const s=t(406);const rsort=(e,r)=>e.sort(((e,t)=>s(t,e,r)));e.exports=rsort},177:(e,r,t)=>{const s=t(798);const satisfies=(e,r,t)=>{try{r=new s(r,t)}catch(e){return false}return r.test(e)};e.exports=satisfies},892:(e,r,t)=>{const s=t(406);const sort=(e,r)=>e.sort(((e,t)=>s(e,t,r)));e.exports=sort},49:(e,r,t)=>{const s=t(815);const valid=(e,r)=>{const t=s(e,r);return t?t.version:null};e.exports=valid},553:(e,r,t)=>{const s=t(608);e.exports={re:s.re,src:s.src,tokens:s.t,SEMVER_SPEC_VERSION:t(370).SEMVER_SPEC_VERSION,SemVer:t(834),compareIdentifiers:t(154).compareIdentifiers,rcompareIdentifiers:t(154).rcompareIdentifiers,parse:t(815),valid:t(49),clean:t(909),inc:t(77),diff:t(843),major:t(973),minor:t(70),patch:t(944),prerelease:t(304),compare:t(756),rcompare:t(503),compareLoose:t(473),compareBuild:t(406),sort:t(892),rsort:t(548),gt:t(850),lt:t(957),eq:t(83),neq:t(818),gte:t(488),lte:t(551),cmp:t(96),coerce:t(778),Comparator:t(842),Range:t(798),satisfies:t(177),toComparators:t(504),maxSatisfying:t(795),minSatisfying:t(530),minVersion:t(226),validRange:t(802),outside:t(878),gtr:t(114),ltr:t(848),intersects:t(134),simplifyRange:t(799),subset:t(654)}},370:e=>{const r="2.0.0";const t=256;const s=Number.MAX_SAFE_INTEGER||9007199254740991;const o=16;e.exports={SEMVER_SPEC_VERSION:r,MAX_LENGTH:t,MAX_SAFE_INTEGER:s,MAX_SAFE_COMPONENT_LENGTH:o}},435:e=>{const r=typeof process==="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...e)=>console.error("SEMVER",...e):()=>{};e.exports=r},154:e=>{const r=/^[0-9]+$/;const compareIdentifiers=(e,t)=>{const s=r.test(e);const o=r.test(t);if(s&&o){e=+e;t=+t}return e===t?0:s&&!o?-1:o&&!s?1:ecompareIdentifiers(r,e);e.exports={compareIdentifiers:compareIdentifiers,rcompareIdentifiers:rcompareIdentifiers}},608:(e,r,t)=>{const{MAX_SAFE_COMPONENT_LENGTH:s}=t(370);const o=t(435);r=e.exports={};const n=r.re=[];const i=r.src=[];const a=r.t={};let l=0;const createToken=(e,r,t)=>{const s=l++;o(s,r);a[e]=s;i[s]=r;n[s]=new RegExp(r,t?"g":undefined)};createToken("NUMERICIDENTIFIER","0|[1-9]\\d*");createToken("NUMERICIDENTIFIERLOOSE","[0-9]+");createToken("NONNUMERICIDENTIFIER","\\d*[a-zA-Z-][a-zA-Z0-9-]*");createToken("MAINVERSION",`(${i[a.NUMERICIDENTIFIER]})\\.`+`(${i[a.NUMERICIDENTIFIER]})\\.`+`(${i[a.NUMERICIDENTIFIER]})`);createToken("MAINVERSIONLOOSE",`(${i[a.NUMERICIDENTIFIERLOOSE]})\\.`+`(${i[a.NUMERICIDENTIFIERLOOSE]})\\.`+`(${i[a.NUMERICIDENTIFIERLOOSE]})`);createToken("PRERELEASEIDENTIFIER",`(?:${i[a.NUMERICIDENTIFIER]}|${i[a.NONNUMERICIDENTIFIER]})`);createToken("PRERELEASEIDENTIFIERLOOSE",`(?:${i[a.NUMERICIDENTIFIERLOOSE]}|${i[a.NONNUMERICIDENTIFIER]})`);createToken("PRERELEASE",`(?:-(${i[a.PRERELEASEIDENTIFIER]}(?:\\.${i[a.PRERELEASEIDENTIFIER]})*))`);createToken("PRERELEASELOOSE",`(?:-?(${i[a.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${i[a.PRERELEASEIDENTIFIERLOOSE]})*))`);createToken("BUILDIDENTIFIER","[0-9A-Za-z-]+");createToken("BUILD",`(?:\\+(${i[a.BUILDIDENTIFIER]}(?:\\.${i[a.BUILDIDENTIFIER]})*))`);createToken("FULLPLAIN",`v?${i[a.MAINVERSION]}${i[a.PRERELEASE]}?${i[a.BUILD]}?`);createToken("FULL",`^${i[a.FULLPLAIN]}$`);createToken("LOOSEPLAIN",`[v=\\s]*${i[a.MAINVERSIONLOOSE]}${i[a.PRERELEASELOOSE]}?${i[a.BUILD]}?`);createToken("LOOSE",`^${i[a.LOOSEPLAIN]}$`);createToken("GTLT","((?:<|>)?=?)");createToken("XRANGEIDENTIFIERLOOSE",`${i[a.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);createToken("XRANGEIDENTIFIER",`${i[a.NUMERICIDENTIFIER]}|x|X|\\*`);createToken("XRANGEPLAIN",`[v=\\s]*(${i[a.XRANGEIDENTIFIER]})`+`(?:\\.(${i[a.XRANGEIDENTIFIER]})`+`(?:\\.(${i[a.XRANGEIDENTIFIER]})`+`(?:${i[a.PRERELEASE]})?${i[a.BUILD]}?`+`)?)?`);createToken("XRANGEPLAINLOOSE",`[v=\\s]*(${i[a.XRANGEIDENTIFIERLOOSE]})`+`(?:\\.(${i[a.XRANGEIDENTIFIERLOOSE]})`+`(?:\\.(${i[a.XRANGEIDENTIFIERLOOSE]})`+`(?:${i[a.PRERELEASELOOSE]})?${i[a.BUILD]}?`+`)?)?`);createToken("XRANGE",`^${i[a.GTLT]}\\s*${i[a.XRANGEPLAIN]}$`);createToken("XRANGELOOSE",`^${i[a.GTLT]}\\s*${i[a.XRANGEPLAINLOOSE]}$`);createToken("COERCE",`${"(^|[^\\d])"+"(\\d{1,"}${s}})`+`(?:\\.(\\d{1,${s}}))?`+`(?:\\.(\\d{1,${s}}))?`+`(?:$|[^\\d])`);createToken("COERCERTL",i[a.COERCE],true);createToken("LONETILDE","(?:~>?)");createToken("TILDETRIM",`(\\s*)${i[a.LONETILDE]}\\s+`,true);r.tildeTrimReplace="$1~";createToken("TILDE",`^${i[a.LONETILDE]}${i[a.XRANGEPLAIN]}$`);createToken("TILDELOOSE",`^${i[a.LONETILDE]}${i[a.XRANGEPLAINLOOSE]}$`);createToken("LONECARET","(?:\\^)");createToken("CARETTRIM",`(\\s*)${i[a.LONECARET]}\\s+`,true);r.caretTrimReplace="$1^";createToken("CARET",`^${i[a.LONECARET]}${i[a.XRANGEPLAIN]}$`);createToken("CARETLOOSE",`^${i[a.LONECARET]}${i[a.XRANGEPLAINLOOSE]}$`);createToken("COMPARATORLOOSE",`^${i[a.GTLT]}\\s*(${i[a.LOOSEPLAIN]})$|^$`);createToken("COMPARATOR",`^${i[a.GTLT]}\\s*(${i[a.FULLPLAIN]})$|^$`);createToken("COMPARATORTRIM",`(\\s*)${i[a.GTLT]}\\s*(${i[a.LOOSEPLAIN]}|${i[a.XRANGEPLAIN]})`,true);r.comparatorTrimReplace="$1$2$3";createToken("HYPHENRANGE",`^\\s*(${i[a.XRANGEPLAIN]})`+`\\s+-\\s+`+`(${i[a.XRANGEPLAIN]})`+`\\s*$`);createToken("HYPHENRANGELOOSE",`^\\s*(${i[a.XRANGEPLAINLOOSE]})`+`\\s+-\\s+`+`(${i[a.XRANGEPLAINLOOSE]})`+`\\s*$`);createToken("STAR","(<|>)?=?\\s*\\*");createToken("GTE0","^\\s*>=\\s*0.0.0\\s*$");createToken("GTE0PRE","^\\s*>=\\s*0.0.0-0\\s*$")},114:(e,r,t)=>{const s=t(878);const gtr=(e,r,t)=>s(e,r,">",t);e.exports=gtr},134:(e,r,t)=>{const s=t(798);const intersects=(e,r,t)=>{e=new s(e,t);r=new s(r,t);return e.intersects(r)};e.exports=intersects},848:(e,r,t)=>{const s=t(878);const ltr=(e,r,t)=>s(e,r,"<",t);e.exports=ltr},795:(e,r,t)=>{const s=t(834);const o=t(798);const maxSatisfying=(e,r,t)=>{let n=null;let i=null;let a=null;try{a=new o(r,t)}catch(e){return null}e.forEach((e=>{if(a.test(e)){if(!n||i.compare(e)===-1){n=e;i=new s(n,t)}}}));return n};e.exports=maxSatisfying},530:(e,r,t)=>{const s=t(834);const o=t(798);const minSatisfying=(e,r,t)=>{let n=null;let i=null;let a=null;try{a=new o(r,t)}catch(e){return null}e.forEach((e=>{if(a.test(e)){if(!n||i.compare(e)===1){n=e;i=new s(n,t)}}}));return n};e.exports=minSatisfying},226:(e,r,t)=>{const s=t(834);const o=t(798);const n=t(850);const minVersion=(e,r)=>{e=new o(e,r);let t=new s("0.0.0");if(e.test(t)){return t}t=new s("0.0.0-0");if(e.test(t)){return t}t=null;for(let r=0;r{const r=new s(e.semver.version);switch(e.operator){case">":if(r.prerelease.length===0){r.patch++}else{r.prerelease.push(0)}r.raw=r.format();case"":case">=":if(!t||n(t,r)){t=r}break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${e.operator}`)}}))}if(t&&e.test(t)){return t}return null};e.exports=minVersion},878:(e,r,t)=>{const s=t(834);const o=t(842);const{ANY:n}=o;const i=t(798);const a=t(177);const l=t(850);const c=t(957);const p=t(551);const E=t(488);const outside=(e,r,t,f)=>{e=new s(e,f);r=new i(r,f);let h,u,$,I,R;switch(t){case">":h=l;u=p;$=c;I=">";R=">=";break;case"<":h=c;u=E;$=l;I="<";R="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(a(e,r,f)){return false}for(let t=0;t{if(e.semver===n){e=new o(">=0.0.0")}i=i||e;a=a||e;if(h(e.semver,i.semver,f)){i=e}else if($(e.semver,a.semver,f)){a=e}}));if(i.operator===I||i.operator===R){return false}if((!a.operator||a.operator===I)&&u(e,a.semver)){return false}else if(a.operator===R&&$(e,a.semver)){return false}}return true};e.exports=outside},799:(e,r,t)=>{const s=t(177);const o=t(756);e.exports=(e,r,t)=>{const n=[];let i=null;let a=null;const l=e.sort(((e,r)=>o(e,r,t)));for(const e of l){const o=s(e,r,t);if(o){a=e;if(!i)i=e}else{if(a){n.push([i,a])}a=null;i=null}}if(i)n.push([i,null]);const c=[];for(const[e,r]of n){if(e===r)c.push(e);else if(!r&&e===l[0])c.push("*");else if(!r)c.push(`>=${e}`);else if(e===l[0])c.push(`<=${r}`);else c.push(`${e} - ${r}`)}const p=c.join(" || ");const E=typeof r.raw==="string"?r.raw:String(r);return p.length{const s=t(798);const{ANY:o}=t(842);const n=t(177);const i=t(756);const subset=(e,r,t)=>{e=new s(e,t);r=new s(r,t);let o=false;e:for(const s of e.set){for(const e of r.set){const r=simpleSubset(s,e,t);o=o||r!==null;if(r)continue e}if(o)return false}return true};const simpleSubset=(e,r,t)=>{if(e.length===1&&e[0].semver===o)return r.length===1&&r[0].semver===o;const s=new Set;let a,l;for(const r of e){if(r.operator===">"||r.operator===">=")a=higherGT(a,r,t);else if(r.operator==="<"||r.operator==="<=")l=lowerLT(l,r,t);else s.add(r.semver)}if(s.size>1)return null;let c;if(a&&l){c=i(a.semver,l.semver,t);if(c>0)return null;else if(c===0&&(a.operator!==">="||l.operator!=="<="))return null}for(const e of s){if(a&&!n(e,String(a),t))return null;if(l&&!n(e,String(l),t))return null;for(const s of r){if(!n(e,String(s),t))return false}return true}let p,E;let f,h;for(const e of r){h=h||e.operator===">"||e.operator===">=";f=f||e.operator==="<"||e.operator==="<=";if(a){if(e.operator===">"||e.operator===">="){p=higherGT(a,e,t);if(p===e)return false}else if(a.operator===">="&&!n(a.semver,String(e),t))return false}if(l){if(e.operator==="<"||e.operator==="<="){E=lowerLT(l,e,t);if(E===e)return false}else if(l.operator==="<="&&!n(l.semver,String(e),t))return false}if(!e.operator&&(l||a)&&c!==0)return false}if(a&&f&&!l&&c!==0)return false;if(l&&h&&!a&&c!==0)return false;return true};const higherGT=(e,r,t)=>{if(!e)return r;const s=i(e.semver,r.semver,t);return s>0?e:s<0?r:r.operator===">"&&e.operator===">="?r:e};const lowerLT=(e,r,t)=>{if(!e)return r;const s=i(e.semver,r.semver,t);return s<0?e:s>0?r:r.operator==="<"&&e.operator==="<="?r:e};e.exports=subset},504:(e,r,t)=>{const s=t(798);const toComparators=(e,r)=>new s(e,r).set.map((e=>e.map((e=>e.value)).join(" ").trim().split(" ")));e.exports=toComparators},802:(e,r,t)=>{const s=t(798);const validRange=(e,r)=>{try{return new s(e,r).range||"*"}catch(e){return null}};e.exports=validRange}};var r={};function __nccwpck_require__(t){var s=r[t];if(s!==undefined){return s.exports}var o=r[t]={exports:{}};var n=true;try{e[t](o,o.exports,__nccwpck_require__);n=false}finally{if(n)delete r[t]}return o.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var t=__nccwpck_require__(553);module.exports=t})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/semver/package.json b/build/node_modules/next/dist/compiled/semver/package.json new file mode 100644 index 0000000..9c30e33 --- /dev/null +++ b/build/node_modules/next/dist/compiled/semver/package.json @@ -0,0 +1 @@ +{"name":"semver","main":"index.js","license":"ISC"} diff --git a/build/node_modules/next/dist/compiled/send/index.js b/build/node_modules/next/dist/compiled/send/index.js new file mode 100644 index 0000000..c442078 --- /dev/null +++ b/build/node_modules/next/dist/compiled/send/index.js @@ -0,0 +1,70 @@ +(()=>{var e={186:(e,t,a)=>{ +/*! + * depd + * Copyright(c) 2014-2018 Douglas Christopher Wilson + * MIT Licensed + */ +var i=a(17).relative;e.exports=depd;var n=process.cwd();function containsNamespace(e,t){var a=e.split(/[ ,]+/);var i=String(t).toLowerCase();for(var n=0;n0}function isignored(e){if(process.noDeprecation){return true}var t=process.env.NO_DEPRECATION||"";return containsNamespace(t,e)}function istraced(e){if(process.traceDeprecation){return true}var t=process.env.TRACE_DEPRECATION||"";return containsNamespace(t,e)}function log(e,t){var a=eehaslisteners(process,"deprecation");if(!a&&this._ignored){return}var i;var n;var r;var o;var p=0;var s=false;var c=getStack();var l=this._file;if(t){o=t;r=callSiteLocation(c[1]);r.name=o.name;l=r[0]}else{p=2;o=callSiteLocation(c[p]);r=o}for(;p";var a=e.getLineNumber();var i=e.getColumnNumber();if(e.isEval()){t=e.getEvalOrigin()+", "+t}var n=[t,a,i];n.callSite=e;n.name=e.getFunctionName();return n}function defaultMessage(e){var t=e.callSite;var a=e.name;if(!a){a=""}var i=t.getThis();var n=i&&t.getTypeName();if(n==="Object"){n=undefined}if(n==="Function"){n=i.name||n}return n&&t.getMethodName()?n+"."+a:a}function formatPlain(e,t,a){var i=(new Date).toUTCString();var n=i+" "+this._namespace+" deprecated "+e;if(this._traced){for(var r=0;r{"use strict"; +/*! + * destroy + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015-2022 Douglas Christopher Wilson + * MIT Licensed + */var i=a(361).EventEmitter;var n=a(147).ReadStream;var r=a(781);var o=a(796);e.exports=destroy;function destroy(e,t){if(isFsReadStream(e)){destroyReadStream(e)}else if(isZlibStream(e)){destroyZlibStream(e)}else if(hasDestroy(e)){e.destroy()}if(isEventEmitter(e)&&t){e.removeAllListeners("error");e.addListener("error",noop)}return e}function destroyReadStream(e){e.destroy();if(typeof e.close==="function"){e.on("open",onOpenClose)}}function closeZlibStream(e){if(e._hadError===true){var t=e._binding===null?"_binding":"_handle";e[t]={close:function(){this[t]=null}}}e.close()}function destroyZlibStream(e){if(typeof e.destroy==="function"){if(e._binding){e.destroy();if(e._processing){e._needDrain=true;e.once("drain",onDrainClearBinding)}else{e._binding.clear()}}else if(e._destroy&&e._destroy!==r.Transform.prototype._destroy){e.destroy()}else if(e._destroy&&typeof e.close==="function"){e.destroyed=true;e.close()}else{e.destroy()}}else if(typeof e.close==="function"){closeZlibStream(e)}}function hasDestroy(e){return e instanceof r&&typeof e.destroy==="function"}function isEventEmitter(e){return e instanceof i}function isFsReadStream(e){return e instanceof n}function isZlibStream(e){return e instanceof o.Gzip||e instanceof o.Gunzip||e instanceof o.Deflate||e instanceof o.DeflateRaw||e instanceof o.Inflate||e instanceof o.InflateRaw||e instanceof o.Unzip}function noop(){}function onDrainClearBinding(){this._binding.clear()}function onOpenClose(){if(typeof this.fd==="number"){this.close()}}},481:e=>{"use strict"; +/*! + * ee-first + * Copyright(c) 2014 Jonathan Ong + * MIT Licensed + */e.exports=first;function first(e,t){if(!Array.isArray(e))throw new TypeError("arg must be an array of [ee, events...] arrays");var a=[];for(var i=0;i{"use strict"; +/*! + * encodeurl + * Copyright(c) 2016 Douglas Christopher Wilson + * MIT Licensed + */e.exports=encodeUrl;var t=/(?:[^\x21\x25\x26-\x3B\x3D\x3F-\x5B\x5D\x5F\x61-\x7A\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g;var a=/(^|[^\uD800-\uDBFF])[\uDC00-\uDFFF]|[\uD800-\uDBFF]([^\uDC00-\uDFFF]|$)/g;var i="$1�$2";function encodeUrl(e){return String(e).replace(a,i).replace(t,encodeURI)}},354:e=>{"use strict"; +/*! + * escape-html + * Copyright(c) 2012-2013 TJ Holowaychuk + * Copyright(c) 2015 Andreas Lubbe + * Copyright(c) 2015 Tiancheng "Timothy" Gu + * MIT Licensed + */var t=/["'&<>]/;e.exports=escapeHtml;function escapeHtml(e){var a=""+e;var i=t.exec(a);if(!i){return a}var n;var r="";var o=0;var p=0;for(o=i.index;o{"use strict"; +/*! + * etag + * Copyright(c) 2014-2016 Douglas Christopher Wilson + * MIT Licensed + */e.exports=etag;var i=a(113);var n=a(147).Stats;var r=Object.prototype.toString;function entitytag(e){if(e.length===0){return'"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk"'}var t=i.createHash("sha1").update(e,"utf8").digest("base64").substring(0,27);var a=typeof e==="string"?Buffer.byteLength(e,"utf8"):e.length;return'"'+a.toString(16)+"-"+t+'"'}function etag(e,t){if(e==null){throw new TypeError("argument entity is required")}var a=isstats(e);var i=t&&typeof t.weak==="boolean"?t.weak:a;if(!a&&typeof e!=="string"&&!Buffer.isBuffer(e)){throw new TypeError("argument entity must be string, Buffer, or fs.Stats")}var n=a?stattag(e):entitytag(e);return i?"W/"+n:n}function isstats(e){if(typeof n==="function"&&e instanceof n){return true}return e&&typeof e==="object"&&"ctime"in e&&r.call(e.ctime)==="[object Date]"&&"mtime"in e&&r.call(e.mtime)==="[object Date]"&&"ino"in e&&typeof e.ino==="number"&&"size"in e&&typeof e.size==="number"}function stattag(e){var t=e.mtime.getTime().toString(16);var a=e.size.toString(16);return'"'+a+"-"+t+'"'}},546:(e,t,a)=>{"use strict"; +/*! + * http-errors + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2016 Douglas Christopher Wilson + * MIT Licensed + */var i=a(186)("http-errors");var n=a(832);var r=a(596);var o=a(842);var p=a(637);e.exports=createError;e.exports.HttpError=createHttpErrorConstructor();e.exports.isHttpError=createIsHttpErrorFunction(e.exports.HttpError);populateConstructorExports(e.exports,r.codes,e.exports.HttpError);function codeClass(e){return Number(String(e).charAt(0)+"00")}function createError(){var e;var t;var a=500;var n={};for(var o=0;o=600)){i("non-error status code; use only 4xx or 5xx status codes")}if(typeof a!=="number"||!r.message[a]&&(a<400||a>=600)){a=500}var c=createError[a]||createError[codeClass(a)];if(!e){e=c?new c(t):new Error(t||r.message[a]);Error.captureStackTrace(e,createError)}if(!c||!(e instanceof c)||e.status!==a){e.expose=a<500;e.status=e.statusCode=a}for(var l in n){if(l!=="status"&&l!=="statusCode"){e[l]=n[l]}}return e}function createHttpErrorConstructor(){function HttpError(){throw new TypeError("cannot construct abstract class")}o(HttpError,Error);return HttpError}function createClientErrorConstructor(e,t,a){var i=toClassName(t);function ClientError(e){var t=e!=null?e:r.message[a];var o=new Error(t);Error.captureStackTrace(o,ClientError);n(o,ClientError.prototype);Object.defineProperty(o,"message",{enumerable:true,configurable:true,value:t,writable:true});Object.defineProperty(o,"name",{enumerable:false,configurable:true,value:i,writable:true});return o}o(ClientError,e);nameFunc(ClientError,i);ClientError.prototype.status=a;ClientError.prototype.statusCode=a;ClientError.prototype.expose=true;return ClientError}function createIsHttpErrorFunction(e){return function isHttpError(t){if(!t||typeof t!=="object"){return false}if(t instanceof e){return true}return t instanceof Error&&typeof t.expose==="boolean"&&typeof t.statusCode==="number"&&t.status===t.statusCode}}function createServerErrorConstructor(e,t,a){var i=toClassName(t);function ServerError(e){var t=e!=null?e:r.message[a];var o=new Error(t);Error.captureStackTrace(o,ServerError);n(o,ServerError.prototype);Object.defineProperty(o,"message",{enumerable:true,configurable:true,value:t,writable:true});Object.defineProperty(o,"name",{enumerable:false,configurable:true,value:i,writable:true});return o}o(ServerError,e);nameFunc(ServerError,i);ServerError.prototype.status=a;ServerError.prototype.statusCode=a;ServerError.prototype.expose=false;return ServerError}function nameFunc(e,t){var a=Object.getOwnPropertyDescriptor(e,"name");if(a&&a.configurable){a.value=t;Object.defineProperty(e,"name",a)}}function populateConstructorExports(e,t,a){t.forEach((function forEachCode(t){var i;var n=p(r.message[t]);switch(codeClass(t)){case 400:i=createClientErrorConstructor(a,n,t);break;case 500:i=createServerErrorConstructor(a,n,t);break}if(i){e[t]=i;e[n]=i}}))}function toClassName(e){return e.substr(-5)!=="Error"?e+"Error":e}},842:(e,t,a)=>{try{var i=a(837);if(typeof i.inherits!=="function")throw"";e.exports=i.inherits}catch(t){e.exports=a(782)}},782:e=>{if(typeof Object.create==="function"){e.exports=function inherits(e,t){if(t){e.super_=t;e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:false,writable:true,configurable:true}})}}}else{e.exports=function inherits(e,t){if(t){e.super_=t;var TempCtor=function(){};TempCtor.prototype=t.prototype;e.prototype=new TempCtor;e.prototype.constructor=e}}}},396:(e,t,a)=>{var i=a(17);var n=a(147);function Mime(){this.types=Object.create(null);this.extensions=Object.create(null)}Mime.prototype.define=function(e){for(var t in e){var a=e[t];for(var i=0;i{var t=1e3;var a=t*60;var i=a*60;var n=i*24;var r=n*7;var o=n*365.25;e.exports=function(e,t){t=t||{};var a=typeof e;if(a==="string"&&e.length>0){return parse(e)}else if(a==="number"&&isFinite(e)){return t.long?fmtLong(e):fmtShort(e)}throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))};function parse(e){e=String(e);if(e.length>100){return}var p=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(!p){return}var s=parseFloat(p[1]);var c=(p[2]||"ms").toLowerCase();switch(c){case"years":case"year":case"yrs":case"yr":case"y":return s*o;case"weeks":case"week":case"w":return s*r;case"days":case"day":case"d":return s*n;case"hours":case"hour":case"hrs":case"hr":case"h":return s*i;case"minutes":case"minute":case"mins":case"min":case"m":return s*a;case"seconds":case"second":case"secs":case"sec":case"s":return s*t;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return s;default:return undefined}}function fmtShort(e){var r=Math.abs(e);if(r>=n){return Math.round(e/n)+"d"}if(r>=i){return Math.round(e/i)+"h"}if(r>=a){return Math.round(e/a)+"m"}if(r>=t){return Math.round(e/t)+"s"}return e+"ms"}function fmtLong(e){var r=Math.abs(e);if(r>=n){return plural(e,r,n,"day")}if(r>=i){return plural(e,r,i,"hour")}if(r>=a){return plural(e,r,a,"minute")}if(r>=t){return plural(e,r,t,"second")}return e+" ms"}function plural(e,t,a,i){var n=t>=a*1.5;return Math.round(e/a)+" "+i+(n?"s":"")}},71:(e,t,a)=>{"use strict"; +/*! + * on-finished + * Copyright(c) 2013 Jonathan Ong + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */e.exports=onFinished;e.exports.isFinished=isFinished;var i=tryRequireAsyncHooks();var n=a(481);var r=typeof setImmediate==="function"?setImmediate:function(e){process.nextTick(e.bind.apply(e,arguments))};function onFinished(e,t){if(isFinished(e)!==false){r(t,null,e);return e}attachListener(e,wrap(t));return e}function isFinished(e){var t=e.socket;if(typeof e.finished==="boolean"){return Boolean(e.finished||t&&!t.writable)}if(typeof e.complete==="boolean"){return Boolean(e.upgrade||!t||!t.readable||e.complete&&!e.readable)}return undefined}function attachFinishedListener(e,t){var a;var i;var r=false;function onFinish(e){a.cancel();i.cancel();r=true;t(e)}a=i=n([[e,"end","finish"]],onFinish);function onSocket(t){e.removeListener("socket",onSocket);if(r)return;if(a!==i)return;i=n([[t,"error","close"]],onFinish)}if(e.socket){onSocket(e.socket);return}e.on("socket",onSocket);if(e.socket===undefined){patchAssignSocket(e,onSocket)}}function attachListener(e,t){var a=e.__onFinished;if(!a||!a.queue){a=e.__onFinished=createListener(e);attachFinishedListener(e,a)}a.queue.push(t)}function createListener(e){function listener(t){if(e.__onFinished===listener)e.__onFinished=null;if(!listener.queue)return;var a=listener.queue;listener.queue=null;for(var i=0;i{"use strict"; +/*! + * range-parser + * Copyright(c) 2012-2014 TJ Holowaychuk + * Copyright(c) 2015-2016 Douglas Christopher Wilson + * MIT Licensed + */e.exports=rangeParser;function rangeParser(e,t,a){if(typeof t!=="string"){throw new TypeError("argument str must be a string")}var i=t.indexOf("=");if(i===-1){return-2}var n=t.slice(i+1).split(",");var r=[];r.type=t.slice(0,i);for(var o=0;oe-1){c=e-1}if(isNaN(s)||isNaN(c)||s>c||s<0){continue}r.push({start:s,end:c})}if(r.length<1){return-1}return a&&a.combine?combineRanges(r):r}function combineRanges(e){var t=e.map(mapWithIndex).sort(sortByRangeStart);for(var a=0,i=1;ir.end+1){t[++a]=n}else if(n.end>r.end){r.end=n.end;r.index=Math.min(r.index,n.index)}}t.length=a+1;var o=t.sort(sortByRangeIndex).map(mapWithoutIndex);o.type=e.type;return o}function mapWithIndex(e,t){return{start:e.start,end:e.end,index:t}}function mapWithoutIndex(e){return{start:e.start,end:e.end}}function sortByRangeIndex(e,t){return e.index-t.index}function sortByRangeStart(e,t){return e.start-t.start}},228:(e,t,a)=>{"use strict"; +/*! + * send + * Copyright(c) 2012 TJ Holowaychuk + * Copyright(c) 2014-2022 Douglas Christopher Wilson + * MIT Licensed + */var i=a(546);var n=a(937)("send");var r=a(186)("send");var o=a(397);var p=a(927);var s=a(354);var c=a(516);var l=a(890);var d=a(147);var m=a(396);var u=a(958);var v=a(71);var f=a(953);var x=a(17);var g=a(596);var h=a(781);var b=a(837);var y=x.extname;var w=x.join;var k=x.normalize;var S=x.resolve;var j=x.sep;var _=/^ *bytes=/;var E=60*60*24*365*1e3;var C=/(?:^|[\\/])\.\.(?:[\\/]|$)/;e.exports=send;e.exports.mime=m;function send(e,t,a){return new SendStream(e,t,a)}function SendStream(e,t,a){h.call(this);var i=a||{};this.options=i;this.path=t;this.req=e;this._acceptRanges=i.acceptRanges!==undefined?Boolean(i.acceptRanges):true;this._cacheControl=i.cacheControl!==undefined?Boolean(i.cacheControl):true;this._etag=i.etag!==undefined?Boolean(i.etag):true;this._dotfiles=i.dotfiles!==undefined?i.dotfiles:"ignore";if(this._dotfiles!=="ignore"&&this._dotfiles!=="allow"&&this._dotfiles!=="deny"){throw new TypeError('dotfiles option must be "allow", "deny", or "ignore"')}this._hidden=Boolean(i.hidden);if(i.hidden!==undefined){r("hidden: use dotfiles: '"+(this._hidden?"allow":"ignore")+"' instead")}if(i.dotfiles===undefined){this._dotfiles=undefined}this._extensions=i.extensions!==undefined?normalizeList(i.extensions,"extensions option"):[];this._immutable=i.immutable!==undefined?Boolean(i.immutable):false;this._index=i.index!==undefined?normalizeList(i.index,"index option"):["index.html"];this._lastModified=i.lastModified!==undefined?Boolean(i.lastModified):true;this._maxage=i.maxAge||i.maxage;this._maxage=typeof this._maxage==="string"?u(this._maxage):Number(this._maxage);this._maxage=!isNaN(this._maxage)?Math.min(Math.max(0,this._maxage),E):0;this._root=i.root?S(i.root):null;if(!this._root&&i.from){this.from(i.from)}}b.inherits(SendStream,h);SendStream.prototype.etag=r.function((function etag(e){this._etag=Boolean(e);n("etag %s",this._etag);return this}),"send.etag: pass etag as option");SendStream.prototype.hidden=r.function((function hidden(e){this._hidden=Boolean(e);this._dotfiles=undefined;n("hidden %s",this._hidden);return this}),"send.hidden: use dotfiles option");SendStream.prototype.index=r.function((function index(e){var index=!e?[]:normalizeList(e,"paths argument");n("index %o",e);this._index=index;return this}),"send.index: pass index as option");SendStream.prototype.root=function root(e){this._root=S(String(e));n("root %s",this._root);return this};SendStream.prototype.from=r.function(SendStream.prototype.root,"send.from: pass root as option");SendStream.prototype.root=r.function(SendStream.prototype.root,"send.root: pass root as option");SendStream.prototype.maxage=r.function((function maxage(e){this._maxage=typeof e==="string"?u(e):Number(e);this._maxage=!isNaN(this._maxage)?Math.min(Math.max(0,this._maxage),E):0;n("max-age %d",this._maxage);return this}),"send.maxage: pass maxAge as option");SendStream.prototype.error=function error(e,t){if(hasListeners(this,"error")){return this.emit("error",createHttpError(e,t))}var a=this.res;var i=g.message[e]||String(e);var n=createHtmlDocument("Error",s(i));clearHeaders(a);if(t&&t.headers){setHeaders(a,t.headers)}a.statusCode=e;a.setHeader("Content-Type","text/html; charset=UTF-8");a.setHeader("Content-Length",Buffer.byteLength(n));a.setHeader("Content-Security-Policy","default-src 'none'");a.setHeader("X-Content-Type-Options","nosniff");a.end(n)};SendStream.prototype.hasTrailingSlash=function hasTrailingSlash(){return this.path[this.path.length-1]==="/"};SendStream.prototype.isConditionalGET=function isConditionalGET(){return this.req.headers["if-match"]||this.req.headers["if-unmodified-since"]||this.req.headers["if-none-match"]||this.req.headers["if-modified-since"]};SendStream.prototype.isPreconditionFailure=function isPreconditionFailure(){var e=this.req;var t=this.res;var a=e.headers["if-match"];if(a){var i=t.getHeader("ETag");return!i||a!=="*"&&parseTokenList(a).every((function(e){return e!==i&&e!=="W/"+i&&"W/"+e!==i}))}var n=parseHttpDate(e.headers["if-unmodified-since"]);if(!isNaN(n)){var r=parseHttpDate(t.getHeader("Last-Modified"));return isNaN(r)||r>n}return false};SendStream.prototype.removeContentHeaderFields=function removeContentHeaderFields(){var e=this.res;e.removeHeader("Content-Encoding");e.removeHeader("Content-Language");e.removeHeader("Content-Length");e.removeHeader("Content-Range");e.removeHeader("Content-Type")};SendStream.prototype.notModified=function notModified(){var e=this.res;n("not modified");this.removeContentHeaderFields();e.statusCode=304;e.end()};SendStream.prototype.headersAlreadySent=function headersAlreadySent(){var e=new Error("Can't set headers after they are sent.");n("headers already sent");this.error(500,e)};SendStream.prototype.isCachable=function isCachable(){var e=this.res.statusCode;return e>=200&&e<300||e===304};SendStream.prototype.onStatError=function onStatError(e){switch(e.code){case"ENAMETOOLONG":case"ENOENT":case"ENOTDIR":this.error(404,e);break;default:this.error(500,e);break}};SendStream.prototype.isFresh=function isFresh(){return l(this.req.headers,{etag:this.res.getHeader("ETag"),"last-modified":this.res.getHeader("Last-Modified")})};SendStream.prototype.isRangeFresh=function isRangeFresh(){var e=this.req.headers["if-range"];if(!e){return true}if(e.indexOf('"')!==-1){var t=this.res.getHeader("ETag");return Boolean(t&&e.indexOf(t)!==-1)}var a=this.res.getHeader("Last-Modified");return parseHttpDate(a)<=parseHttpDate(e)};SendStream.prototype.redirect=function redirect(e){var t=this.res;if(hasListeners(this,"directory")){this.emit("directory",t,e);return}if(this.hasTrailingSlash()){this.error(403);return}var a=p(collapseLeadingSlashes(this.path+"/"));var i=createHtmlDocument("Redirecting",'Redirecting to '+s(a)+"");t.statusCode=301;t.setHeader("Content-Type","text/html; charset=UTF-8");t.setHeader("Content-Length",Buffer.byteLength(i));t.setHeader("Content-Security-Policy","default-src 'none'");t.setHeader("X-Content-Type-Options","nosniff");t.setHeader("Location",a);t.end(i)};SendStream.prototype.pipe=function pipe(e){var t=this._root;this.res=e;var a=decode(this.path);if(a===-1){this.error(400);return e}if(~a.indexOf("\0")){this.error(400);return e}var i;if(t!==null){if(a){a=k("."+j+a)}if(C.test(a)){n('malicious path "%s"',a);this.error(403);return e}i=a.split(j);a=k(w(t,a))}else{if(C.test(a)){n('malicious path "%s"',a);this.error(403);return e}i=k(a).split(j);a=S(a)}if(containsDotFile(i)){var r=this._dotfiles;if(r===undefined){r=i[i.length-1][0]==="."?this._hidden?"allow":"ignore":"allow"}n('%s dotfile "%s"',r,a);switch(r){case"allow":break;case"deny":this.error(403);return e;case"ignore":default:this.error(404);return e}}if(this._index.length&&this.hasTrailingSlash()){this.sendIndex(a);return e}this.sendFile(a);return e};SendStream.prototype.send=function send(e,t){var a=t.size;var i=this.options;var r={};var o=this.res;var p=this.req;var s=p.headers.range;var c=i.start||0;if(headersSent(o)){this.headersAlreadySent();return}n('pipe "%s"',e);this.setHeader(e,t);this.type(e);if(this.isConditionalGET()){if(this.isPreconditionFailure()){this.error(412);return}if(this.isCachable()&&this.isFresh()){this.notModified();return}}a=Math.max(0,a-c);if(i.end!==undefined){var l=i.end-c+1;if(a>l)a=l}if(this._acceptRanges&&_.test(s)){s=f(a,s,{combine:true});if(!this.isRangeFresh()){n("range stale");s=-2}if(s===-1){n("range unsatisfiable");o.setHeader("Content-Range",contentRange("bytes",a));return this.error(416,{headers:{"Content-Range":o.getHeader("Content-Range")}})}if(s!==-2&&s.length===1){n("range %j",s);o.statusCode=206;o.setHeader("Content-Range",contentRange("bytes",a,s[0]));c+=s[0].start;a=s[0].end-s[0].start+1}}for(var d in i){r[d]=i[d]}r.start=c;r.end=Math.max(c,c+a-1);o.setHeader("Content-Length",a);if(p.method==="HEAD"){o.end();return}this.stream(e,r)};SendStream.prototype.sendFile=function sendFile(e){var t=0;var a=this;n('stat "%s"',e);d.stat(e,(function onstat(t,i){if(t&&t.code==="ENOENT"&&!y(e)&&e[e.length-1]!==j){return next(t)}if(t)return a.onStatError(t);if(i.isDirectory())return a.redirect(e);a.emit("file",e,i);a.send(e,i)}));function next(i){if(a._extensions.length<=t){return i?a.onStatError(i):a.error(404)}var r=e+"."+a._extensions[t++];n('stat "%s"',r);d.stat(r,(function(e,t){if(e)return next(e);if(t.isDirectory())return next();a.emit("file",r,t);a.send(r,t)}))}};SendStream.prototype.sendIndex=function sendIndex(e){var t=-1;var a=this;function next(i){if(++t>=a._index.length){if(i)return a.onStatError(i);return a.error(404)}var r=w(e,a._index[t]);n('stat "%s"',r);d.stat(r,(function(e,t){if(e)return next(e);if(t.isDirectory())return next();a.emit("file",r,t);a.send(r,t)}))}next()};SendStream.prototype.stream=function stream(e,t){var a=this;var i=this.res;var stream=d.createReadStream(e,t);this.emit("stream",stream);stream.pipe(i);function cleanup(){o(stream,true)}v(i,cleanup);stream.on("error",(function onerror(e){cleanup();a.onStatError(e)}));stream.on("end",(function onend(){a.emit("end")}))};SendStream.prototype.type=function type(e){var t=this.res;if(t.getHeader("Content-Type"))return;var type=m.lookup(e);if(!type){n("no content-type");return}var a=m.charsets.lookup(type);n("content-type %s",type);t.setHeader("Content-Type",type+(a?"; charset="+a:""))};SendStream.prototype.setHeader=function setHeader(e,t){var a=this.res;this.emit("headers",a,e,t);if(this._acceptRanges&&!a.getHeader("Accept-Ranges")){n("accept ranges");a.setHeader("Accept-Ranges","bytes")}if(this._cacheControl&&!a.getHeader("Cache-Control")){var i="public, max-age="+Math.floor(this._maxage/1e3);if(this._immutable){i+=", immutable"}n("cache-control %s",i);a.setHeader("Cache-Control",i)}if(this._lastModified&&!a.getHeader("Last-Modified")){var r=t.mtime.toUTCString();n("modified %s",r);a.setHeader("Last-Modified",r)}if(this._etag&&!a.getHeader("ETag")){var o=c(t);n("etag %s",o);a.setHeader("ETag",o)}};function clearHeaders(e){var t=getHeaderNames(e);for(var a=0;a1?"/"+e.substr(t):e}function containsDotFile(e){for(var t=0;t1&&a[0]==="."){return true}}return false}function contentRange(e,t,a){return e+" "+(a?a.start+"-"+a.end:"*")+"/"+t}function createHtmlDocument(e,t){return"\n"+'\n'+"\n"+'\n'+""+e+"\n"+"\n"+"\n"+"
    "+t+"
    \n"+"\n"+"\n"}function createHttpError(e,t){if(!t){return i(e)}return t instanceof Error?i(e,t,{expose:false}):i(e,t)}function decode(e){try{return decodeURIComponent(e)}catch(e){return-1}}function getHeaderNames(e){return typeof e.getHeaderNames!=="function"?Object.keys(e._headers||{}):e.getHeaderNames()}function hasListeners(e,t){var a=typeof e.listenerCount!=="function"?e.listeners(t).length:e.listenerCount(t);return a>0}function headersSent(e){return typeof e.headersSent!=="boolean"?Boolean(e._header):e.headersSent}function normalizeList(e,t){var a=[].concat(e||[]);for(var i=0;i{"use strict";e.exports=Object.setPrototypeOf||({__proto__:[]}instanceof Array?setProtoOf:mixinProperties);function setProtoOf(e,t){e.__proto__=t;return e}function mixinProperties(e,t){for(var a in t){if(!Object.prototype.hasOwnProperty.call(e,a)){e[a]=t[a]}}return e}},596:(e,t,a)=>{"use strict"; +/*! + * statuses + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2016 Douglas Christopher Wilson + * MIT Licensed + */var i=a(64);e.exports=status;status.message=i;status.code=createMessageToStatusCodeMap(i);status.codes=createStatusCodeList(i);status.redirect={300:true,301:true,302:true,303:true,305:true,307:true,308:true};status.empty={204:true,205:true,304:true};status.retry={502:true,503:true,504:true};function createMessageToStatusCodeMap(e){var t={};Object.keys(e).forEach((function forEachCode(a){var i=e[a];var n=Number(a);t[i.toLowerCase()]=n}));return t}function createStatusCodeList(e){return Object.keys(e).map((function mapCode(e){return Number(e)}))}function getStatusCode(e){var t=e.toLowerCase();if(!Object.prototype.hasOwnProperty.call(status.code,t)){throw new Error('invalid status message: "'+e+'"')}return status.code[t]}function getStatusMessage(e){if(!Object.prototype.hasOwnProperty.call(status.message,e)){throw new Error("invalid status code: "+e)}return status.message[e]}function status(e){if(typeof e==="number"){return getStatusMessage(e)}if(typeof e!=="string"){throw new TypeError("code must be a number or string")}var t=parseInt(e,10);if(!isNaN(t)){return getStatusMessage(t)}return getStatusCode(e)}},637:e=>{"use strict"; +/*! + * toidentifier + * Copyright(c) 2016 Douglas Christopher Wilson + * MIT Licensed + */e.exports=toIdentifier;function toIdentifier(e){return e.split(" ").map((function(e){return e.slice(0,1).toUpperCase()+e.slice(1)})).join("").replace(/[^ _0-9a-z]/gi,"")}},852:e=>{"use strict";e.exports=require("async_hooks")},113:e=>{"use strict";e.exports=require("crypto")},361:e=>{"use strict";e.exports=require("events")},147:e=>{"use strict";e.exports=require("fs")},937:e=>{"use strict";e.exports=require("next/dist/compiled/debug")},890:e=>{"use strict";e.exports=require("next/dist/compiled/fresh")},17:e=>{"use strict";e.exports=require("path")},781:e=>{"use strict";e.exports=require("stream")},837:e=>{"use strict";e.exports=require("util")},796:e=>{"use strict";e.exports=require("zlib")},598:e=>{"use strict";e.exports=JSON.parse('{"application/andrew-inset":["ez"],"application/applixware":["aw"],"application/atom+xml":["atom"],"application/atomcat+xml":["atomcat"],"application/atomsvc+xml":["atomsvc"],"application/bdoc":["bdoc"],"application/ccxml+xml":["ccxml"],"application/cdmi-capability":["cdmia"],"application/cdmi-container":["cdmic"],"application/cdmi-domain":["cdmid"],"application/cdmi-object":["cdmio"],"application/cdmi-queue":["cdmiq"],"application/cu-seeme":["cu"],"application/dash+xml":["mpd"],"application/davmount+xml":["davmount"],"application/docbook+xml":["dbk"],"application/dssc+der":["dssc"],"application/dssc+xml":["xdssc"],"application/ecmascript":["ecma"],"application/emma+xml":["emma"],"application/epub+zip":["epub"],"application/exi":["exi"],"application/font-tdpfr":["pfr"],"application/font-woff":[],"application/font-woff2":[],"application/geo+json":["geojson"],"application/gml+xml":["gml"],"application/gpx+xml":["gpx"],"application/gxf":["gxf"],"application/gzip":["gz"],"application/hyperstudio":["stk"],"application/inkml+xml":["ink","inkml"],"application/ipfix":["ipfix"],"application/java-archive":["jar","war","ear"],"application/java-serialized-object":["ser"],"application/java-vm":["class"],"application/javascript":["js","mjs"],"application/json":["json","map"],"application/json5":["json5"],"application/jsonml+json":["jsonml"],"application/ld+json":["jsonld"],"application/lost+xml":["lostxml"],"application/mac-binhex40":["hqx"],"application/mac-compactpro":["cpt"],"application/mads+xml":["mads"],"application/manifest+json":["webmanifest"],"application/marc":["mrc"],"application/marcxml+xml":["mrcx"],"application/mathematica":["ma","nb","mb"],"application/mathml+xml":["mathml"],"application/mbox":["mbox"],"application/mediaservercontrol+xml":["mscml"],"application/metalink+xml":["metalink"],"application/metalink4+xml":["meta4"],"application/mets+xml":["mets"],"application/mods+xml":["mods"],"application/mp21":["m21","mp21"],"application/mp4":["mp4s","m4p"],"application/msword":["doc","dot"],"application/mxf":["mxf"],"application/octet-stream":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"],"application/oda":["oda"],"application/oebps-package+xml":["opf"],"application/ogg":["ogx"],"application/omdoc+xml":["omdoc"],"application/onenote":["onetoc","onetoc2","onetmp","onepkg"],"application/oxps":["oxps"],"application/patch-ops-error+xml":["xer"],"application/pdf":["pdf"],"application/pgp-encrypted":["pgp"],"application/pgp-signature":["asc","sig"],"application/pics-rules":["prf"],"application/pkcs10":["p10"],"application/pkcs7-mime":["p7m","p7c"],"application/pkcs7-signature":["p7s"],"application/pkcs8":["p8"],"application/pkix-attr-cert":["ac"],"application/pkix-cert":["cer"],"application/pkix-crl":["crl"],"application/pkix-pkipath":["pkipath"],"application/pkixcmp":["pki"],"application/pls+xml":["pls"],"application/postscript":["ai","eps","ps"],"application/prs.cww":["cww"],"application/pskc+xml":["pskcxml"],"application/raml+yaml":["raml"],"application/rdf+xml":["rdf"],"application/reginfo+xml":["rif"],"application/relax-ng-compact-syntax":["rnc"],"application/resource-lists+xml":["rl"],"application/resource-lists-diff+xml":["rld"],"application/rls-services+xml":["rs"],"application/rpki-ghostbusters":["gbr"],"application/rpki-manifest":["mft"],"application/rpki-roa":["roa"],"application/rsd+xml":["rsd"],"application/rss+xml":["rss"],"application/rtf":["rtf"],"application/sbml+xml":["sbml"],"application/scvp-cv-request":["scq"],"application/scvp-cv-response":["scs"],"application/scvp-vp-request":["spq"],"application/scvp-vp-response":["spp"],"application/sdp":["sdp"],"application/set-payment-initiation":["setpay"],"application/set-registration-initiation":["setreg"],"application/shf+xml":["shf"],"application/smil+xml":["smi","smil"],"application/sparql-query":["rq"],"application/sparql-results+xml":["srx"],"application/srgs":["gram"],"application/srgs+xml":["grxml"],"application/sru+xml":["sru"],"application/ssdl+xml":["ssdl"],"application/ssml+xml":["ssml"],"application/tei+xml":["tei","teicorpus"],"application/thraud+xml":["tfi"],"application/timestamped-data":["tsd"],"application/vnd.3gpp.pic-bw-large":["plb"],"application/vnd.3gpp.pic-bw-small":["psb"],"application/vnd.3gpp.pic-bw-var":["pvb"],"application/vnd.3gpp2.tcap":["tcap"],"application/vnd.3m.post-it-notes":["pwn"],"application/vnd.accpac.simply.aso":["aso"],"application/vnd.accpac.simply.imp":["imp"],"application/vnd.acucobol":["acu"],"application/vnd.acucorp":["atc","acutc"],"application/vnd.adobe.air-application-installer-package+zip":["air"],"application/vnd.adobe.formscentral.fcdt":["fcdt"],"application/vnd.adobe.fxp":["fxp","fxpl"],"application/vnd.adobe.xdp+xml":["xdp"],"application/vnd.adobe.xfdf":["xfdf"],"application/vnd.ahead.space":["ahead"],"application/vnd.airzip.filesecure.azf":["azf"],"application/vnd.airzip.filesecure.azs":["azs"],"application/vnd.amazon.ebook":["azw"],"application/vnd.americandynamics.acc":["acc"],"application/vnd.amiga.ami":["ami"],"application/vnd.android.package-archive":["apk"],"application/vnd.anser-web-certificate-issue-initiation":["cii"],"application/vnd.anser-web-funds-transfer-initiation":["fti"],"application/vnd.antix.game-component":["atx"],"application/vnd.apple.installer+xml":["mpkg"],"application/vnd.apple.mpegurl":["m3u8"],"application/vnd.apple.pkpass":["pkpass"],"application/vnd.aristanetworks.swi":["swi"],"application/vnd.astraea-software.iota":["iota"],"application/vnd.audiograph":["aep"],"application/vnd.blueice.multipass":["mpm"],"application/vnd.bmi":["bmi"],"application/vnd.businessobjects":["rep"],"application/vnd.chemdraw+xml":["cdxml"],"application/vnd.chipnuts.karaoke-mmd":["mmd"],"application/vnd.cinderella":["cdy"],"application/vnd.claymore":["cla"],"application/vnd.cloanto.rp9":["rp9"],"application/vnd.clonk.c4group":["c4g","c4d","c4f","c4p","c4u"],"application/vnd.cluetrust.cartomobile-config":["c11amc"],"application/vnd.cluetrust.cartomobile-config-pkg":["c11amz"],"application/vnd.commonspace":["csp"],"application/vnd.contact.cmsg":["cdbcmsg"],"application/vnd.cosmocaller":["cmc"],"application/vnd.crick.clicker":["clkx"],"application/vnd.crick.clicker.keyboard":["clkk"],"application/vnd.crick.clicker.palette":["clkp"],"application/vnd.crick.clicker.template":["clkt"],"application/vnd.crick.clicker.wordbank":["clkw"],"application/vnd.criticaltools.wbs+xml":["wbs"],"application/vnd.ctc-posml":["pml"],"application/vnd.cups-ppd":["ppd"],"application/vnd.curl.car":["car"],"application/vnd.curl.pcurl":["pcurl"],"application/vnd.dart":["dart"],"application/vnd.data-vision.rdz":["rdz"],"application/vnd.dece.data":["uvf","uvvf","uvd","uvvd"],"application/vnd.dece.ttml+xml":["uvt","uvvt"],"application/vnd.dece.unspecified":["uvx","uvvx"],"application/vnd.dece.zip":["uvz","uvvz"],"application/vnd.denovo.fcselayout-link":["fe_launch"],"application/vnd.dna":["dna"],"application/vnd.dolby.mlp":["mlp"],"application/vnd.dpgraph":["dpg"],"application/vnd.dreamfactory":["dfac"],"application/vnd.ds-keypoint":["kpxx"],"application/vnd.dvb.ait":["ait"],"application/vnd.dvb.service":["svc"],"application/vnd.dynageo":["geo"],"application/vnd.ecowin.chart":["mag"],"application/vnd.enliven":["nml"],"application/vnd.epson.esf":["esf"],"application/vnd.epson.msf":["msf"],"application/vnd.epson.quickanime":["qam"],"application/vnd.epson.salt":["slt"],"application/vnd.epson.ssf":["ssf"],"application/vnd.eszigno3+xml":["es3","et3"],"application/vnd.ezpix-album":["ez2"],"application/vnd.ezpix-package":["ez3"],"application/vnd.fdf":["fdf"],"application/vnd.fdsn.mseed":["mseed"],"application/vnd.fdsn.seed":["seed","dataless"],"application/vnd.flographit":["gph"],"application/vnd.fluxtime.clip":["ftc"],"application/vnd.framemaker":["fm","frame","maker","book"],"application/vnd.frogans.fnc":["fnc"],"application/vnd.frogans.ltf":["ltf"],"application/vnd.fsc.weblaunch":["fsc"],"application/vnd.fujitsu.oasys":["oas"],"application/vnd.fujitsu.oasys2":["oa2"],"application/vnd.fujitsu.oasys3":["oa3"],"application/vnd.fujitsu.oasysgp":["fg5"],"application/vnd.fujitsu.oasysprs":["bh2"],"application/vnd.fujixerox.ddd":["ddd"],"application/vnd.fujixerox.docuworks":["xdw"],"application/vnd.fujixerox.docuworks.binder":["xbd"],"application/vnd.fuzzysheet":["fzs"],"application/vnd.genomatix.tuxedo":["txd"],"application/vnd.geogebra.file":["ggb"],"application/vnd.geogebra.tool":["ggt"],"application/vnd.geometry-explorer":["gex","gre"],"application/vnd.geonext":["gxt"],"application/vnd.geoplan":["g2w"],"application/vnd.geospace":["g3w"],"application/vnd.gmx":["gmx"],"application/vnd.google-apps.document":["gdoc"],"application/vnd.google-apps.presentation":["gslides"],"application/vnd.google-apps.spreadsheet":["gsheet"],"application/vnd.google-earth.kml+xml":["kml"],"application/vnd.google-earth.kmz":["kmz"],"application/vnd.grafeq":["gqf","gqs"],"application/vnd.groove-account":["gac"],"application/vnd.groove-help":["ghf"],"application/vnd.groove-identity-message":["gim"],"application/vnd.groove-injector":["grv"],"application/vnd.groove-tool-message":["gtm"],"application/vnd.groove-tool-template":["tpl"],"application/vnd.groove-vcard":["vcg"],"application/vnd.hal+xml":["hal"],"application/vnd.handheld-entertainment+xml":["zmm"],"application/vnd.hbci":["hbci"],"application/vnd.hhe.lesson-player":["les"],"application/vnd.hp-hpgl":["hpgl"],"application/vnd.hp-hpid":["hpid"],"application/vnd.hp-hps":["hps"],"application/vnd.hp-jlyt":["jlt"],"application/vnd.hp-pcl":["pcl"],"application/vnd.hp-pclxl":["pclxl"],"application/vnd.hydrostatix.sof-data":["sfd-hdstx"],"application/vnd.ibm.minipay":["mpy"],"application/vnd.ibm.modcap":["afp","listafp","list3820"],"application/vnd.ibm.rights-management":["irm"],"application/vnd.ibm.secure-container":["sc"],"application/vnd.iccprofile":["icc","icm"],"application/vnd.igloader":["igl"],"application/vnd.immervision-ivp":["ivp"],"application/vnd.immervision-ivu":["ivu"],"application/vnd.insors.igm":["igm"],"application/vnd.intercon.formnet":["xpw","xpx"],"application/vnd.intergeo":["i2g"],"application/vnd.intu.qbo":["qbo"],"application/vnd.intu.qfx":["qfx"],"application/vnd.ipunplugged.rcprofile":["rcprofile"],"application/vnd.irepository.package+xml":["irp"],"application/vnd.is-xpr":["xpr"],"application/vnd.isac.fcs":["fcs"],"application/vnd.jam":["jam"],"application/vnd.jcp.javame.midlet-rms":["rms"],"application/vnd.jisp":["jisp"],"application/vnd.joost.joda-archive":["joda"],"application/vnd.kahootz":["ktz","ktr"],"application/vnd.kde.karbon":["karbon"],"application/vnd.kde.kchart":["chrt"],"application/vnd.kde.kformula":["kfo"],"application/vnd.kde.kivio":["flw"],"application/vnd.kde.kontour":["kon"],"application/vnd.kde.kpresenter":["kpr","kpt"],"application/vnd.kde.kspread":["ksp"],"application/vnd.kde.kword":["kwd","kwt"],"application/vnd.kenameaapp":["htke"],"application/vnd.kidspiration":["kia"],"application/vnd.kinar":["kne","knp"],"application/vnd.koan":["skp","skd","skt","skm"],"application/vnd.kodak-descriptor":["sse"],"application/vnd.las.las+xml":["lasxml"],"application/vnd.llamagraphics.life-balance.desktop":["lbd"],"application/vnd.llamagraphics.life-balance.exchange+xml":["lbe"],"application/vnd.lotus-1-2-3":["123"],"application/vnd.lotus-approach":["apr"],"application/vnd.lotus-freelance":["pre"],"application/vnd.lotus-notes":["nsf"],"application/vnd.lotus-organizer":["org"],"application/vnd.lotus-screencam":["scm"],"application/vnd.lotus-wordpro":["lwp"],"application/vnd.macports.portpkg":["portpkg"],"application/vnd.mcd":["mcd"],"application/vnd.medcalcdata":["mc1"],"application/vnd.mediastation.cdkey":["cdkey"],"application/vnd.mfer":["mwf"],"application/vnd.mfmp":["mfm"],"application/vnd.micrografx.flo":["flo"],"application/vnd.micrografx.igx":["igx"],"application/vnd.mif":["mif"],"application/vnd.mobius.daf":["daf"],"application/vnd.mobius.dis":["dis"],"application/vnd.mobius.mbk":["mbk"],"application/vnd.mobius.mqy":["mqy"],"application/vnd.mobius.msl":["msl"],"application/vnd.mobius.plc":["plc"],"application/vnd.mobius.txf":["txf"],"application/vnd.mophun.application":["mpn"],"application/vnd.mophun.certificate":["mpc"],"application/vnd.mozilla.xul+xml":["xul"],"application/vnd.ms-artgalry":["cil"],"application/vnd.ms-cab-compressed":["cab"],"application/vnd.ms-excel":["xls","xlm","xla","xlc","xlt","xlw"],"application/vnd.ms-excel.addin.macroenabled.12":["xlam"],"application/vnd.ms-excel.sheet.binary.macroenabled.12":["xlsb"],"application/vnd.ms-excel.sheet.macroenabled.12":["xlsm"],"application/vnd.ms-excel.template.macroenabled.12":["xltm"],"application/vnd.ms-fontobject":["eot"],"application/vnd.ms-htmlhelp":["chm"],"application/vnd.ms-ims":["ims"],"application/vnd.ms-lrm":["lrm"],"application/vnd.ms-officetheme":["thmx"],"application/vnd.ms-outlook":["msg"],"application/vnd.ms-pki.seccat":["cat"],"application/vnd.ms-pki.stl":["stl"],"application/vnd.ms-powerpoint":["ppt","pps","pot"],"application/vnd.ms-powerpoint.addin.macroenabled.12":["ppam"],"application/vnd.ms-powerpoint.presentation.macroenabled.12":["pptm"],"application/vnd.ms-powerpoint.slide.macroenabled.12":["sldm"],"application/vnd.ms-powerpoint.slideshow.macroenabled.12":["ppsm"],"application/vnd.ms-powerpoint.template.macroenabled.12":["potm"],"application/vnd.ms-project":["mpp","mpt"],"application/vnd.ms-word.document.macroenabled.12":["docm"],"application/vnd.ms-word.template.macroenabled.12":["dotm"],"application/vnd.ms-works":["wps","wks","wcm","wdb"],"application/vnd.ms-wpl":["wpl"],"application/vnd.ms-xpsdocument":["xps"],"application/vnd.mseq":["mseq"],"application/vnd.musician":["mus"],"application/vnd.muvee.style":["msty"],"application/vnd.mynfc":["taglet"],"application/vnd.neurolanguage.nlu":["nlu"],"application/vnd.nitf":["ntf","nitf"],"application/vnd.noblenet-directory":["nnd"],"application/vnd.noblenet-sealer":["nns"],"application/vnd.noblenet-web":["nnw"],"application/vnd.nokia.n-gage.data":["ngdat"],"application/vnd.nokia.n-gage.symbian.install":["n-gage"],"application/vnd.nokia.radio-preset":["rpst"],"application/vnd.nokia.radio-presets":["rpss"],"application/vnd.novadigm.edm":["edm"],"application/vnd.novadigm.edx":["edx"],"application/vnd.novadigm.ext":["ext"],"application/vnd.oasis.opendocument.chart":["odc"],"application/vnd.oasis.opendocument.chart-template":["otc"],"application/vnd.oasis.opendocument.database":["odb"],"application/vnd.oasis.opendocument.formula":["odf"],"application/vnd.oasis.opendocument.formula-template":["odft"],"application/vnd.oasis.opendocument.graphics":["odg"],"application/vnd.oasis.opendocument.graphics-template":["otg"],"application/vnd.oasis.opendocument.image":["odi"],"application/vnd.oasis.opendocument.image-template":["oti"],"application/vnd.oasis.opendocument.presentation":["odp"],"application/vnd.oasis.opendocument.presentation-template":["otp"],"application/vnd.oasis.opendocument.spreadsheet":["ods"],"application/vnd.oasis.opendocument.spreadsheet-template":["ots"],"application/vnd.oasis.opendocument.text":["odt"],"application/vnd.oasis.opendocument.text-master":["odm"],"application/vnd.oasis.opendocument.text-template":["ott"],"application/vnd.oasis.opendocument.text-web":["oth"],"application/vnd.olpc-sugar":["xo"],"application/vnd.oma.dd2+xml":["dd2"],"application/vnd.openofficeorg.extension":["oxt"],"application/vnd.openxmlformats-officedocument.presentationml.presentation":["pptx"],"application/vnd.openxmlformats-officedocument.presentationml.slide":["sldx"],"application/vnd.openxmlformats-officedocument.presentationml.slideshow":["ppsx"],"application/vnd.openxmlformats-officedocument.presentationml.template":["potx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":["xlsx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.template":["xltx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":["docx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.template":["dotx"],"application/vnd.osgeo.mapguide.package":["mgp"],"application/vnd.osgi.dp":["dp"],"application/vnd.osgi.subsystem":["esa"],"application/vnd.palm":["pdb","pqa","oprc"],"application/vnd.pawaafile":["paw"],"application/vnd.pg.format":["str"],"application/vnd.pg.osasli":["ei6"],"application/vnd.picsel":["efif"],"application/vnd.pmi.widget":["wg"],"application/vnd.pocketlearn":["plf"],"application/vnd.powerbuilder6":["pbd"],"application/vnd.previewsystems.box":["box"],"application/vnd.proteus.magazine":["mgz"],"application/vnd.publishare-delta-tree":["qps"],"application/vnd.pvi.ptid1":["ptid"],"application/vnd.quark.quarkxpress":["qxd","qxt","qwd","qwt","qxl","qxb"],"application/vnd.realvnc.bed":["bed"],"application/vnd.recordare.musicxml":["mxl"],"application/vnd.recordare.musicxml+xml":["musicxml"],"application/vnd.rig.cryptonote":["cryptonote"],"application/vnd.rim.cod":["cod"],"application/vnd.rn-realmedia":["rm"],"application/vnd.rn-realmedia-vbr":["rmvb"],"application/vnd.route66.link66+xml":["link66"],"application/vnd.sailingtracker.track":["st"],"application/vnd.seemail":["see"],"application/vnd.sema":["sema"],"application/vnd.semd":["semd"],"application/vnd.semf":["semf"],"application/vnd.shana.informed.formdata":["ifm"],"application/vnd.shana.informed.formtemplate":["itp"],"application/vnd.shana.informed.interchange":["iif"],"application/vnd.shana.informed.package":["ipk"],"application/vnd.simtech-mindmapper":["twd","twds"],"application/vnd.smaf":["mmf"],"application/vnd.smart.teacher":["teacher"],"application/vnd.solent.sdkm+xml":["sdkm","sdkd"],"application/vnd.spotfire.dxp":["dxp"],"application/vnd.spotfire.sfs":["sfs"],"application/vnd.stardivision.calc":["sdc"],"application/vnd.stardivision.draw":["sda"],"application/vnd.stardivision.impress":["sdd"],"application/vnd.stardivision.math":["smf"],"application/vnd.stardivision.writer":["sdw","vor"],"application/vnd.stardivision.writer-global":["sgl"],"application/vnd.stepmania.package":["smzip"],"application/vnd.stepmania.stepchart":["sm"],"application/vnd.sun.wadl+xml":["wadl"],"application/vnd.sun.xml.calc":["sxc"],"application/vnd.sun.xml.calc.template":["stc"],"application/vnd.sun.xml.draw":["sxd"],"application/vnd.sun.xml.draw.template":["std"],"application/vnd.sun.xml.impress":["sxi"],"application/vnd.sun.xml.impress.template":["sti"],"application/vnd.sun.xml.math":["sxm"],"application/vnd.sun.xml.writer":["sxw"],"application/vnd.sun.xml.writer.global":["sxg"],"application/vnd.sun.xml.writer.template":["stw"],"application/vnd.sus-calendar":["sus","susp"],"application/vnd.svd":["svd"],"application/vnd.symbian.install":["sis","sisx"],"application/vnd.syncml+xml":["xsm"],"application/vnd.syncml.dm+wbxml":["bdm"],"application/vnd.syncml.dm+xml":["xdm"],"application/vnd.tao.intent-module-archive":["tao"],"application/vnd.tcpdump.pcap":["pcap","cap","dmp"],"application/vnd.tmobile-livetv":["tmo"],"application/vnd.trid.tpt":["tpt"],"application/vnd.triscape.mxs":["mxs"],"application/vnd.trueapp":["tra"],"application/vnd.ufdl":["ufd","ufdl"],"application/vnd.uiq.theme":["utz"],"application/vnd.umajin":["umj"],"application/vnd.unity":["unityweb"],"application/vnd.uoml+xml":["uoml"],"application/vnd.vcx":["vcx"],"application/vnd.visio":["vsd","vst","vss","vsw"],"application/vnd.visionary":["vis"],"application/vnd.vsf":["vsf"],"application/vnd.wap.wbxml":["wbxml"],"application/vnd.wap.wmlc":["wmlc"],"application/vnd.wap.wmlscriptc":["wmlsc"],"application/vnd.webturbo":["wtb"],"application/vnd.wolfram.player":["nbp"],"application/vnd.wordperfect":["wpd"],"application/vnd.wqd":["wqd"],"application/vnd.wt.stf":["stf"],"application/vnd.xara":["xar"],"application/vnd.xfdl":["xfdl"],"application/vnd.yamaha.hv-dic":["hvd"],"application/vnd.yamaha.hv-script":["hvs"],"application/vnd.yamaha.hv-voice":["hvp"],"application/vnd.yamaha.openscoreformat":["osf"],"application/vnd.yamaha.openscoreformat.osfpvg+xml":["osfpvg"],"application/vnd.yamaha.smaf-audio":["saf"],"application/vnd.yamaha.smaf-phrase":["spf"],"application/vnd.yellowriver-custom-menu":["cmp"],"application/vnd.zul":["zir","zirz"],"application/vnd.zzazz.deck+xml":["zaz"],"application/voicexml+xml":["vxml"],"application/wasm":["wasm"],"application/widget":["wgt"],"application/winhlp":["hlp"],"application/wsdl+xml":["wsdl"],"application/wspolicy+xml":["wspolicy"],"application/x-7z-compressed":["7z"],"application/x-abiword":["abw"],"application/x-ace-compressed":["ace"],"application/x-apple-diskimage":[],"application/x-arj":["arj"],"application/x-authorware-bin":["aab","x32","u32","vox"],"application/x-authorware-map":["aam"],"application/x-authorware-seg":["aas"],"application/x-bcpio":["bcpio"],"application/x-bdoc":[],"application/x-bittorrent":["torrent"],"application/x-blorb":["blb","blorb"],"application/x-bzip":["bz"],"application/x-bzip2":["bz2","boz"],"application/x-cbr":["cbr","cba","cbt","cbz","cb7"],"application/x-cdlink":["vcd"],"application/x-cfs-compressed":["cfs"],"application/x-chat":["chat"],"application/x-chess-pgn":["pgn"],"application/x-chrome-extension":["crx"],"application/x-cocoa":["cco"],"application/x-conference":["nsc"],"application/x-cpio":["cpio"],"application/x-csh":["csh"],"application/x-debian-package":["udeb"],"application/x-dgc-compressed":["dgc"],"application/x-director":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"],"application/x-doom":["wad"],"application/x-dtbncx+xml":["ncx"],"application/x-dtbook+xml":["dtb"],"application/x-dtbresource+xml":["res"],"application/x-dvi":["dvi"],"application/x-envoy":["evy"],"application/x-eva":["eva"],"application/x-font-bdf":["bdf"],"application/x-font-ghostscript":["gsf"],"application/x-font-linux-psf":["psf"],"application/x-font-pcf":["pcf"],"application/x-font-snf":["snf"],"application/x-font-type1":["pfa","pfb","pfm","afm"],"application/x-freearc":["arc"],"application/x-futuresplash":["spl"],"application/x-gca-compressed":["gca"],"application/x-glulx":["ulx"],"application/x-gnumeric":["gnumeric"],"application/x-gramps-xml":["gramps"],"application/x-gtar":["gtar"],"application/x-hdf":["hdf"],"application/x-httpd-php":["php"],"application/x-install-instructions":["install"],"application/x-iso9660-image":[],"application/x-java-archive-diff":["jardiff"],"application/x-java-jnlp-file":["jnlp"],"application/x-latex":["latex"],"application/x-lua-bytecode":["luac"],"application/x-lzh-compressed":["lzh","lha"],"application/x-makeself":["run"],"application/x-mie":["mie"],"application/x-mobipocket-ebook":["prc","mobi"],"application/x-ms-application":["application"],"application/x-ms-shortcut":["lnk"],"application/x-ms-wmd":["wmd"],"application/x-ms-wmz":["wmz"],"application/x-ms-xbap":["xbap"],"application/x-msaccess":["mdb"],"application/x-msbinder":["obd"],"application/x-mscardfile":["crd"],"application/x-msclip":["clp"],"application/x-msdos-program":[],"application/x-msdownload":["com","bat"],"application/x-msmediaview":["mvb","m13","m14"],"application/x-msmetafile":["wmf","emf","emz"],"application/x-msmoney":["mny"],"application/x-mspublisher":["pub"],"application/x-msschedule":["scd"],"application/x-msterminal":["trm"],"application/x-mswrite":["wri"],"application/x-netcdf":["nc","cdf"],"application/x-ns-proxy-autoconfig":["pac"],"application/x-nzb":["nzb"],"application/x-perl":["pl","pm"],"application/x-pilot":[],"application/x-pkcs12":["p12","pfx"],"application/x-pkcs7-certificates":["p7b","spc"],"application/x-pkcs7-certreqresp":["p7r"],"application/x-rar-compressed":["rar"],"application/x-redhat-package-manager":["rpm"],"application/x-research-info-systems":["ris"],"application/x-sea":["sea"],"application/x-sh":["sh"],"application/x-shar":["shar"],"application/x-shockwave-flash":["swf"],"application/x-silverlight-app":["xap"],"application/x-sql":["sql"],"application/x-stuffit":["sit"],"application/x-stuffitx":["sitx"],"application/x-subrip":["srt"],"application/x-sv4cpio":["sv4cpio"],"application/x-sv4crc":["sv4crc"],"application/x-t3vm-image":["t3"],"application/x-tads":["gam"],"application/x-tar":["tar"],"application/x-tcl":["tcl","tk"],"application/x-tex":["tex"],"application/x-tex-tfm":["tfm"],"application/x-texinfo":["texinfo","texi"],"application/x-tgif":["obj"],"application/x-ustar":["ustar"],"application/x-virtualbox-hdd":["hdd"],"application/x-virtualbox-ova":["ova"],"application/x-virtualbox-ovf":["ovf"],"application/x-virtualbox-vbox":["vbox"],"application/x-virtualbox-vbox-extpack":["vbox-extpack"],"application/x-virtualbox-vdi":["vdi"],"application/x-virtualbox-vhd":["vhd"],"application/x-virtualbox-vmdk":["vmdk"],"application/x-wais-source":["src"],"application/x-web-app-manifest+json":["webapp"],"application/x-x509-ca-cert":["der","crt","pem"],"application/x-xfig":["fig"],"application/x-xliff+xml":["xlf"],"application/x-xpinstall":["xpi"],"application/x-xz":["xz"],"application/x-zmachine":["z1","z2","z3","z4","z5","z6","z7","z8"],"application/xaml+xml":["xaml"],"application/xcap-diff+xml":["xdf"],"application/xenc+xml":["xenc"],"application/xhtml+xml":["xhtml","xht"],"application/xml":["xml","xsl","xsd","rng"],"application/xml-dtd":["dtd"],"application/xop+xml":["xop"],"application/xproc+xml":["xpl"],"application/xslt+xml":["xslt"],"application/xspf+xml":["xspf"],"application/xv+xml":["mxml","xhvml","xvml","xvm"],"application/yang":["yang"],"application/yin+xml":["yin"],"application/zip":["zip"],"audio/3gpp":[],"audio/adpcm":["adp"],"audio/basic":["au","snd"],"audio/midi":["mid","midi","kar","rmi"],"audio/mp3":[],"audio/mp4":["m4a","mp4a"],"audio/mpeg":["mpga","mp2","mp2a","mp3","m2a","m3a"],"audio/ogg":["oga","ogg","spx"],"audio/s3m":["s3m"],"audio/silk":["sil"],"audio/vnd.dece.audio":["uva","uvva"],"audio/vnd.digital-winds":["eol"],"audio/vnd.dra":["dra"],"audio/vnd.dts":["dts"],"audio/vnd.dts.hd":["dtshd"],"audio/vnd.lucent.voice":["lvp"],"audio/vnd.ms-playready.media.pya":["pya"],"audio/vnd.nuera.ecelp4800":["ecelp4800"],"audio/vnd.nuera.ecelp7470":["ecelp7470"],"audio/vnd.nuera.ecelp9600":["ecelp9600"],"audio/vnd.rip":["rip"],"audio/wav":["wav"],"audio/wave":[],"audio/webm":["weba"],"audio/x-aac":["aac"],"audio/x-aiff":["aif","aiff","aifc"],"audio/x-caf":["caf"],"audio/x-flac":["flac"],"audio/x-m4a":[],"audio/x-matroska":["mka"],"audio/x-mpegurl":["m3u"],"audio/x-ms-wax":["wax"],"audio/x-ms-wma":["wma"],"audio/x-pn-realaudio":["ram","ra"],"audio/x-pn-realaudio-plugin":["rmp"],"audio/x-realaudio":[],"audio/x-wav":[],"audio/xm":["xm"],"chemical/x-cdx":["cdx"],"chemical/x-cif":["cif"],"chemical/x-cmdf":["cmdf"],"chemical/x-cml":["cml"],"chemical/x-csml":["csml"],"chemical/x-xyz":["xyz"],"font/collection":["ttc"],"font/otf":["otf"],"font/ttf":["ttf"],"font/woff":["woff"],"font/woff2":["woff2"],"image/apng":["apng"],"image/bmp":["bmp"],"image/cgm":["cgm"],"image/g3fax":["g3"],"image/gif":["gif"],"image/ief":["ief"],"image/jp2":["jp2","jpg2"],"image/jpeg":["jpeg","jpg","jpe"],"image/jpm":["jpm"],"image/jpx":["jpx","jpf"],"image/ktx":["ktx"],"image/png":["png"],"image/prs.btif":["btif"],"image/sgi":["sgi"],"image/svg+xml":["svg","svgz"],"image/tiff":["tiff","tif"],"image/vnd.adobe.photoshop":["psd"],"image/vnd.dece.graphic":["uvi","uvvi","uvg","uvvg"],"image/vnd.djvu":["djvu","djv"],"image/vnd.dvb.subtitle":[],"image/vnd.dwg":["dwg"],"image/vnd.dxf":["dxf"],"image/vnd.fastbidsheet":["fbs"],"image/vnd.fpx":["fpx"],"image/vnd.fst":["fst"],"image/vnd.fujixerox.edmics-mmr":["mmr"],"image/vnd.fujixerox.edmics-rlc":["rlc"],"image/vnd.ms-modi":["mdi"],"image/vnd.ms-photo":["wdp"],"image/vnd.net-fpx":["npx"],"image/vnd.wap.wbmp":["wbmp"],"image/vnd.xiff":["xif"],"image/webp":["webp"],"image/x-3ds":["3ds"],"image/x-cmu-raster":["ras"],"image/x-cmx":["cmx"],"image/x-freehand":["fh","fhc","fh4","fh5","fh7"],"image/x-icon":["ico"],"image/x-jng":["jng"],"image/x-mrsid-image":["sid"],"image/x-ms-bmp":[],"image/x-pcx":["pcx"],"image/x-pict":["pic","pct"],"image/x-portable-anymap":["pnm"],"image/x-portable-bitmap":["pbm"],"image/x-portable-graymap":["pgm"],"image/x-portable-pixmap":["ppm"],"image/x-rgb":["rgb"],"image/x-tga":["tga"],"image/x-xbitmap":["xbm"],"image/x-xpixmap":["xpm"],"image/x-xwindowdump":["xwd"],"message/rfc822":["eml","mime"],"model/gltf+json":["gltf"],"model/gltf-binary":["glb"],"model/iges":["igs","iges"],"model/mesh":["msh","mesh","silo"],"model/vnd.collada+xml":["dae"],"model/vnd.dwf":["dwf"],"model/vnd.gdl":["gdl"],"model/vnd.gtw":["gtw"],"model/vnd.mts":["mts"],"model/vnd.vtu":["vtu"],"model/vrml":["wrl","vrml"],"model/x3d+binary":["x3db","x3dbz"],"model/x3d+vrml":["x3dv","x3dvz"],"model/x3d+xml":["x3d","x3dz"],"text/cache-manifest":["appcache","manifest"],"text/calendar":["ics","ifb"],"text/coffeescript":["coffee","litcoffee"],"text/css":["css"],"text/csv":["csv"],"text/hjson":["hjson"],"text/html":["html","htm","shtml"],"text/jade":["jade"],"text/jsx":["jsx"],"text/less":["less"],"text/markdown":["markdown","md"],"text/mathml":["mml"],"text/n3":["n3"],"text/plain":["txt","text","conf","def","list","log","in","ini"],"text/prs.lines.tag":["dsc"],"text/richtext":["rtx"],"text/rtf":[],"text/sgml":["sgml","sgm"],"text/slim":["slim","slm"],"text/stylus":["stylus","styl"],"text/tab-separated-values":["tsv"],"text/troff":["t","tr","roff","man","me","ms"],"text/turtle":["ttl"],"text/uri-list":["uri","uris","urls"],"text/vcard":["vcard"],"text/vnd.curl":["curl"],"text/vnd.curl.dcurl":["dcurl"],"text/vnd.curl.mcurl":["mcurl"],"text/vnd.curl.scurl":["scurl"],"text/vnd.dvb.subtitle":["sub"],"text/vnd.fly":["fly"],"text/vnd.fmi.flexstor":["flx"],"text/vnd.graphviz":["gv"],"text/vnd.in3d.3dml":["3dml"],"text/vnd.in3d.spot":["spot"],"text/vnd.sun.j2me.app-descriptor":["jad"],"text/vnd.wap.wml":["wml"],"text/vnd.wap.wmlscript":["wmls"],"text/vtt":["vtt"],"text/x-asm":["s","asm"],"text/x-c":["c","cc","cxx","cpp","h","hh","dic"],"text/x-component":["htc"],"text/x-fortran":["f","for","f77","f90"],"text/x-handlebars-template":["hbs"],"text/x-java-source":["java"],"text/x-lua":["lua"],"text/x-markdown":["mkd"],"text/x-nfo":["nfo"],"text/x-opml":["opml"],"text/x-org":[],"text/x-pascal":["p","pas"],"text/x-processing":["pde"],"text/x-sass":["sass"],"text/x-scss":["scss"],"text/x-setext":["etx"],"text/x-sfv":["sfv"],"text/x-suse-ymp":["ymp"],"text/x-uuencode":["uu"],"text/x-vcalendar":["vcs"],"text/x-vcard":["vcf"],"text/xml":[],"text/yaml":["yaml","yml"],"video/3gpp":["3gp","3gpp"],"video/3gpp2":["3g2"],"video/h261":["h261"],"video/h263":["h263"],"video/h264":["h264"],"video/jpeg":["jpgv"],"video/jpm":["jpgm"],"video/mj2":["mj2","mjp2"],"video/mp2t":["ts"],"video/mp4":["mp4","mp4v","mpg4"],"video/mpeg":["mpeg","mpg","mpe","m1v","m2v"],"video/ogg":["ogv"],"video/quicktime":["qt","mov"],"video/vnd.dece.hd":["uvh","uvvh"],"video/vnd.dece.mobile":["uvm","uvvm"],"video/vnd.dece.pd":["uvp","uvvp"],"video/vnd.dece.sd":["uvs","uvvs"],"video/vnd.dece.video":["uvv","uvvv"],"video/vnd.dvb.file":["dvb"],"video/vnd.fvt":["fvt"],"video/vnd.mpegurl":["mxu","m4u"],"video/vnd.ms-playready.media.pyv":["pyv"],"video/vnd.uvvu.mp4":["uvu","uvvu"],"video/vnd.vivo":["viv"],"video/webm":["webm"],"video/x-f4v":["f4v"],"video/x-fli":["fli"],"video/x-flv":["flv"],"video/x-m4v":["m4v"],"video/x-matroska":["mkv","mk3d","mks"],"video/x-mng":["mng"],"video/x-ms-asf":["asf","asx"],"video/x-ms-vob":["vob"],"video/x-ms-wm":["wm"],"video/x-ms-wmv":["wmv"],"video/x-ms-wmx":["wmx"],"video/x-ms-wvx":["wvx"],"video/x-msvideo":["avi"],"video/x-sgi-movie":["movie"],"video/x-smv":["smv"],"x-conference/x-cooltalk":["ice"]}')},64:e=>{"use strict";e.exports=JSON.parse('{"100":"Continue","101":"Switching Protocols","102":"Processing","103":"Early Hints","200":"OK","201":"Created","202":"Accepted","203":"Non-Authoritative Information","204":"No Content","205":"Reset Content","206":"Partial Content","207":"Multi-Status","208":"Already Reported","226":"IM Used","300":"Multiple Choices","301":"Moved Permanently","302":"Found","303":"See Other","304":"Not Modified","305":"Use Proxy","307":"Temporary Redirect","308":"Permanent Redirect","400":"Bad Request","401":"Unauthorized","402":"Payment Required","403":"Forbidden","404":"Not Found","405":"Method Not Allowed","406":"Not Acceptable","407":"Proxy Authentication Required","408":"Request Timeout","409":"Conflict","410":"Gone","411":"Length Required","412":"Precondition Failed","413":"Payload Too Large","414":"URI Too Long","415":"Unsupported Media Type","416":"Range Not Satisfiable","417":"Expectation Failed","418":"I\'m a Teapot","421":"Misdirected Request","422":"Unprocessable Entity","423":"Locked","424":"Failed Dependency","425":"Too Early","426":"Upgrade Required","428":"Precondition Required","429":"Too Many Requests","431":"Request Header Fields Too Large","451":"Unavailable For Legal Reasons","500":"Internal Server Error","501":"Not Implemented","502":"Bad Gateway","503":"Service Unavailable","504":"Gateway Timeout","505":"HTTP Version Not Supported","506":"Variant Also Negotiates","507":"Insufficient Storage","508":"Loop Detected","509":"Bandwidth Limit Exceeded","510":"Not Extended","511":"Network Authentication Required"}')}};var t={};function __nccwpck_require__(a){var i=t[a];if(i!==undefined){return i.exports}var n=t[a]={exports:{}};var r=true;try{e[a](n,n.exports,__nccwpck_require__);r=false}finally{if(r)delete t[a]}return n.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var a=__nccwpck_require__(228);module.exports=a})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/send/package.json b/build/node_modules/next/dist/compiled/send/package.json new file mode 100644 index 0000000..649e82d --- /dev/null +++ b/build/node_modules/next/dist/compiled/send/package.json @@ -0,0 +1 @@ +{"name":"send","main":"index.js","author":"TJ Holowaychuk ","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/source-map/package.json b/build/node_modules/next/dist/compiled/source-map/package.json new file mode 100644 index 0000000..91ae47b --- /dev/null +++ b/build/node_modules/next/dist/compiled/source-map/package.json @@ -0,0 +1 @@ +{"name":"source-map","main":"source-map.js","author":"Nick Fitzgerald ","license":"BSD-3-Clause"} diff --git a/build/node_modules/next/dist/compiled/source-map/source-map.js b/build/node_modules/next/dist/compiled/source-map/source-map.js new file mode 100644 index 0000000..61febd7 --- /dev/null +++ b/build/node_modules/next/dist/compiled/source-map/source-map.js @@ -0,0 +1 @@ +(()=>{var e={542:(e,r,n)=>{var t=n(749);var o=Object.prototype.hasOwnProperty;var i=typeof Map!=="undefined";function ArraySet(){this._array=[];this._set=i?new Map:Object.create(null)}ArraySet.fromArray=function ArraySet_fromArray(e,r){var n=new ArraySet;for(var t=0,o=e.length;t=0){return r}}else{var n=t.toSetString(e);if(o.call(this._set,n)){return this._set[n]}}throw new Error('"'+e+'" is not in the set.')};ArraySet.prototype.at=function ArraySet_at(e){if(e>=0&&e{var t=n(192);var o=5;var i=1<>1;return r?-n:n}r.encode=function base64VLQ_encode(e){var r="";var n;var i=toVLQSigned(e);do{n=i&a;i>>>=o;if(i>0){n|=u}r+=t.encode(n)}while(i>0);return r};r.decode=function base64VLQ_decode(e,r,n){var i=e.length;var s=0;var l=0;var c,p;do{if(r>=i){throw new Error("Expected more digits in base 64 VLQ value.")}p=t.decode(e.charCodeAt(r++));if(p===-1){throw new Error("Invalid base64 digit: "+e.charAt(r-1))}c=!!(p&u);p&=a;s=s+(p<{var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");r.encode=function(e){if(0<=e&&e{r.GREATEST_LOWER_BOUND=1;r.LEAST_UPPER_BOUND=2;function recursiveSearch(e,n,t,o,i,a){var u=Math.floor((n-e)/2)+e;var s=i(t,o[u],true);if(s===0){return u}else if(s>0){if(n-u>1){return recursiveSearch(u,n,t,o,i,a)}if(a==r.LEAST_UPPER_BOUND){return n1){return recursiveSearch(e,u,t,o,i,a)}if(a==r.LEAST_UPPER_BOUND){return u}else{return e<0?-1:e}}}r.search=function search(e,n,t,o){if(n.length===0){return-1}var i=recursiveSearch(-1,n.length,e,n,t,o||r.GREATEST_LOWER_BOUND);if(i<0){return-1}while(i-1>=0){if(t(n[i],n[i-1],true)!==0){break}--i}return i}},460:(e,r,n)=>{var t=n(749);function generatedPositionAfter(e,r){var n=e.generatedLine;var o=r.generatedLine;var i=e.generatedColumn;var a=r.generatedColumn;return o>n||o==n&&a>=i||t.compareByGeneratedPositionsInflated(e,r)<=0}function MappingList(){this._array=[];this._sorted=true;this._last={generatedLine:-1,generatedColumn:0}}MappingList.prototype.unsortedForEach=function MappingList_forEach(e,r){this._array.forEach(e,r)};MappingList.prototype.add=function MappingList_add(e){if(generatedPositionAfter(this._last,e)){this._last=e;this._array.push(e)}else{this._sorted=false;this._array.push(e)}};MappingList.prototype.toArray=function MappingList_toArray(){if(!this._sorted){this._array.sort(t.compareByGeneratedPositionsInflated);this._sorted=true}return this._array};r.H=MappingList},136:(e,r)=>{function swap(e,r,n){var t=e[r];e[r]=e[n];e[n]=t}function randomIntInRange(e,r){return Math.round(e+Math.random()*(r-e))}function doQuickSort(e,r,n,t){if(n{var t;var o=n(749);var i=n(968);var a=n(542).I;var u=n(447);var s=n(136).U;function SourceMapConsumer(e,r){var n=e;if(typeof e==="string"){n=o.parseSourceMapInput(e)}return n.sections!=null?new IndexedSourceMapConsumer(n,r):new BasicSourceMapConsumer(n,r)}SourceMapConsumer.fromSourceMap=function(e,r){return BasicSourceMapConsumer.fromSourceMap(e,r)};SourceMapConsumer.prototype._version=3;SourceMapConsumer.prototype.__generatedMappings=null;Object.defineProperty(SourceMapConsumer.prototype,"_generatedMappings",{configurable:true,enumerable:true,get:function(){if(!this.__generatedMappings){this._parseMappings(this._mappings,this.sourceRoot)}return this.__generatedMappings}});SourceMapConsumer.prototype.__originalMappings=null;Object.defineProperty(SourceMapConsumer.prototype,"_originalMappings",{configurable:true,enumerable:true,get:function(){if(!this.__originalMappings){this._parseMappings(this._mappings,this.sourceRoot)}return this.__originalMappings}});SourceMapConsumer.prototype._charIsMappingSeparator=function SourceMapConsumer_charIsMappingSeparator(e,r){var n=e.charAt(r);return n===";"||n===","};SourceMapConsumer.prototype._parseMappings=function SourceMapConsumer_parseMappings(e,r){throw new Error("Subclasses must implement _parseMappings")};SourceMapConsumer.GENERATED_ORDER=1;SourceMapConsumer.ORIGINAL_ORDER=2;SourceMapConsumer.GREATEST_LOWER_BOUND=1;SourceMapConsumer.LEAST_UPPER_BOUND=2;SourceMapConsumer.prototype.eachMapping=function SourceMapConsumer_eachMapping(e,r,n){var t=r||null;var i=n||SourceMapConsumer.GENERATED_ORDER;var a;switch(i){case SourceMapConsumer.GENERATED_ORDER:a=this._generatedMappings;break;case SourceMapConsumer.ORIGINAL_ORDER:a=this._originalMappings;break;default:throw new Error("Unknown order of iteration.")}var u=this.sourceRoot;a.map((function(e){var r=e.source===null?null:this._sources.at(e.source);r=o.computeSourceURL(u,r,this._sourceMapURL);return{source:r,generatedLine:e.generatedLine,generatedColumn:e.generatedColumn,originalLine:e.originalLine,originalColumn:e.originalColumn,name:e.name===null?null:this._names.at(e.name)}}),this).forEach(e,t)};SourceMapConsumer.prototype.allGeneratedPositionsFor=function SourceMapConsumer_allGeneratedPositionsFor(e){var r=o.getArg(e,"line");var n={source:o.getArg(e,"source"),originalLine:r,originalColumn:o.getArg(e,"column",0)};n.source=this._findSourceIndex(n.source);if(n.source<0){return[]}var t=[];var a=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",o.compareByOriginalPositions,i.LEAST_UPPER_BOUND);if(a>=0){var u=this._originalMappings[a];if(e.column===undefined){var s=u.originalLine;while(u&&u.originalLine===s){t.push({line:o.getArg(u,"generatedLine",null),column:o.getArg(u,"generatedColumn",null),lastColumn:o.getArg(u,"lastGeneratedColumn",null)});u=this._originalMappings[++a]}}else{var l=u.originalColumn;while(u&&u.originalLine===r&&u.originalColumn==l){t.push({line:o.getArg(u,"generatedLine",null),column:o.getArg(u,"generatedColumn",null),lastColumn:o.getArg(u,"lastGeneratedColumn",null)});u=this._originalMappings[++a]}}}return t};r.SourceMapConsumer=SourceMapConsumer;function BasicSourceMapConsumer(e,r){var n=e;if(typeof e==="string"){n=o.parseSourceMapInput(e)}var t=o.getArg(n,"version");var i=o.getArg(n,"sources");var u=o.getArg(n,"names",[]);var s=o.getArg(n,"sourceRoot",null);var l=o.getArg(n,"sourcesContent",null);var c=o.getArg(n,"mappings");var p=o.getArg(n,"file",null);if(t!=this._version){throw new Error("Unsupported version: "+t)}if(s){s=o.normalize(s)}i=i.map(String).map(o.normalize).map((function(e){return s&&o.isAbsolute(s)&&o.isAbsolute(e)?o.relative(s,e):e}));this._names=a.fromArray(u.map(String),true);this._sources=a.fromArray(i,true);this._absoluteSources=this._sources.toArray().map((function(e){return o.computeSourceURL(s,e,r)}));this.sourceRoot=s;this.sourcesContent=l;this._mappings=c;this._sourceMapURL=r;this.file=p}BasicSourceMapConsumer.prototype=Object.create(SourceMapConsumer.prototype);BasicSourceMapConsumer.prototype.consumer=SourceMapConsumer;BasicSourceMapConsumer.prototype._findSourceIndex=function(e){var r=e;if(this.sourceRoot!=null){r=o.relative(this.sourceRoot,r)}if(this._sources.has(r)){return this._sources.indexOf(r)}var n;for(n=0;n1){_.source=l+S[1];l+=S[1];_.originalLine=i+S[2];i=_.originalLine;_.originalLine+=1;_.originalColumn=a+S[3];a=_.originalColumn;if(S.length>4){_.name=c+S[4];c+=S[4]}}m.push(_);if(typeof _.originalLine==="number"){d.push(_)}}}s(m,o.compareByGeneratedPositionsDeflated);this.__generatedMappings=m;s(d,o.compareByOriginalPositions);this.__originalMappings=d};BasicSourceMapConsumer.prototype._findMapping=function SourceMapConsumer_findMapping(e,r,n,t,o,a){if(e[n]<=0){throw new TypeError("Line must be greater than or equal to 1, got "+e[n])}if(e[t]<0){throw new TypeError("Column must be greater than or equal to 0, got "+e[t])}return i.search(e,r,o,a)};BasicSourceMapConsumer.prototype.computeColumnSpans=function SourceMapConsumer_computeColumnSpans(){for(var e=0;e=0){var t=this._generatedMappings[n];if(t.generatedLine===r.generatedLine){var i=o.getArg(t,"source",null);if(i!==null){i=this._sources.at(i);i=o.computeSourceURL(this.sourceRoot,i,this._sourceMapURL)}var a=o.getArg(t,"name",null);if(a!==null){a=this._names.at(a)}return{source:i,line:o.getArg(t,"originalLine",null),column:o.getArg(t,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}};BasicSourceMapConsumer.prototype.hasContentsOfAllSources=function BasicSourceMapConsumer_hasContentsOfAllSources(){if(!this.sourcesContent){return false}return this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some((function(e){return e==null}))};BasicSourceMapConsumer.prototype.sourceContentFor=function SourceMapConsumer_sourceContentFor(e,r){if(!this.sourcesContent){return null}var n=this._findSourceIndex(e);if(n>=0){return this.sourcesContent[n]}var t=e;if(this.sourceRoot!=null){t=o.relative(this.sourceRoot,t)}var i;if(this.sourceRoot!=null&&(i=o.urlParse(this.sourceRoot))){var a=t.replace(/^file:\/\//,"");if(i.scheme=="file"&&this._sources.has(a)){return this.sourcesContent[this._sources.indexOf(a)]}if((!i.path||i.path=="/")&&this._sources.has("/"+t)){return this.sourcesContent[this._sources.indexOf("/"+t)]}}if(r){return null}else{throw new Error('"'+t+'" is not in the SourceMap.')}};BasicSourceMapConsumer.prototype.generatedPositionFor=function SourceMapConsumer_generatedPositionFor(e){var r=o.getArg(e,"source");r=this._findSourceIndex(r);if(r<0){return{line:null,column:null,lastColumn:null}}var n={source:r,originalLine:o.getArg(e,"line"),originalColumn:o.getArg(e,"column")};var t=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",o.compareByOriginalPositions,o.getArg(e,"bias",SourceMapConsumer.GREATEST_LOWER_BOUND));if(t>=0){var i=this._originalMappings[t];if(i.source===n.source){return{line:o.getArg(i,"generatedLine",null),column:o.getArg(i,"generatedColumn",null),lastColumn:o.getArg(i,"lastGeneratedColumn",null)}}}return{line:null,column:null,lastColumn:null}};t=BasicSourceMapConsumer;function IndexedSourceMapConsumer(e,r){var n=e;if(typeof e==="string"){n=o.parseSourceMapInput(e)}var t=o.getArg(n,"version");var i=o.getArg(n,"sections");if(t!=this._version){throw new Error("Unsupported version: "+t)}this._sources=new a;this._names=new a;var u={line:-1,column:0};this._sections=i.map((function(e){if(e.url){throw new Error("Support for url field in sections not implemented.")}var n=o.getArg(e,"offset");var t=o.getArg(n,"line");var i=o.getArg(n,"column");if(t{var t=n(447);var o=n(749);var i=n(542).I;var a=n(460).H;function SourceMapGenerator(e){if(!e){e={}}this._file=o.getArg(e,"file",null);this._sourceRoot=o.getArg(e,"sourceRoot",null);this._skipValidation=o.getArg(e,"skipValidation",false);this._sources=new i;this._names=new i;this._mappings=new a;this._sourcesContents=null}SourceMapGenerator.prototype._version=3;SourceMapGenerator.fromSourceMap=function SourceMapGenerator_fromSourceMap(e){var r=e.sourceRoot;var n=new SourceMapGenerator({file:e.file,sourceRoot:r});e.eachMapping((function(e){var t={generated:{line:e.generatedLine,column:e.generatedColumn}};if(e.source!=null){t.source=e.source;if(r!=null){t.source=o.relative(r,t.source)}t.original={line:e.originalLine,column:e.originalColumn};if(e.name!=null){t.name=e.name}}n.addMapping(t)}));e.sources.forEach((function(t){var i=t;if(r!==null){i=o.relative(r,t)}if(!n._sources.has(i)){n._sources.add(i)}var a=e.sourceContentFor(t);if(a!=null){n.setSourceContent(t,a)}}));return n};SourceMapGenerator.prototype.addMapping=function SourceMapGenerator_addMapping(e){var r=o.getArg(e,"generated");var n=o.getArg(e,"original",null);var t=o.getArg(e,"source",null);var i=o.getArg(e,"name",null);if(!this._skipValidation){this._validateMapping(r,n,t,i)}if(t!=null){t=String(t);if(!this._sources.has(t)){this._sources.add(t)}}if(i!=null){i=String(i);if(!this._names.has(i)){this._names.add(i)}}this._mappings.add({generatedLine:r.line,generatedColumn:r.column,originalLine:n!=null&&n.line,originalColumn:n!=null&&n.column,source:t,name:i})};SourceMapGenerator.prototype.setSourceContent=function SourceMapGenerator_setSourceContent(e,r){var n=e;if(this._sourceRoot!=null){n=o.relative(this._sourceRoot,n)}if(r!=null){if(!this._sourcesContents){this._sourcesContents=Object.create(null)}this._sourcesContents[o.toSetString(n)]=r}else if(this._sourcesContents){delete this._sourcesContents[o.toSetString(n)];if(Object.keys(this._sourcesContents).length===0){this._sourcesContents=null}}};SourceMapGenerator.prototype.applySourceMap=function SourceMapGenerator_applySourceMap(e,r,n){var t=r;if(r==null){if(e.file==null){throw new Error("SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, "+'or the source map\'s "file" property. Both were omitted.')}t=e.file}var a=this._sourceRoot;if(a!=null){t=o.relative(a,t)}var u=new i;var s=new i;this._mappings.unsortedForEach((function(r){if(r.source===t&&r.originalLine!=null){var i=e.originalPositionFor({line:r.originalLine,column:r.originalColumn});if(i.source!=null){r.source=i.source;if(n!=null){r.source=o.join(n,r.source)}if(a!=null){r.source=o.relative(a,r.source)}r.originalLine=i.line;r.originalColumn=i.column;if(i.name!=null){r.name=i.name}}}var l=r.source;if(l!=null&&!u.has(l)){u.add(l)}var c=r.name;if(c!=null&&!s.has(c)){s.add(c)}}),this);this._sources=u;this._names=s;e.sources.forEach((function(r){var t=e.sourceContentFor(r);if(t!=null){if(n!=null){r=o.join(n,r)}if(a!=null){r=o.relative(a,r)}this.setSourceContent(r,t)}}),this)};SourceMapGenerator.prototype._validateMapping=function SourceMapGenerator_validateMapping(e,r,n,t){if(r&&typeof r.line!=="number"&&typeof r.column!=="number"){throw new Error("original.line and original.column are not numbers -- you probably meant to omit "+"the original mapping entirely and only map the generated position. If so, pass "+"null for the original mapping instead of an object with empty or null values.")}if(e&&"line"in e&&"column"in e&&e.line>0&&e.column>=0&&!r&&!n&&!t){return}else if(e&&"line"in e&&"column"in e&&r&&"line"in r&&"column"in r&&e.line>0&&e.column>=0&&r.line>0&&r.column>=0&&n){return}else{throw new Error("Invalid mapping: "+JSON.stringify({generated:e,source:n,original:r,name:t}))}};SourceMapGenerator.prototype._serializeMappings=function SourceMapGenerator_serializeMappings(){var e=0;var r=1;var n=0;var i=0;var a=0;var u=0;var s="";var l;var c;var p;var g;var f=this._mappings.toArray();for(var h=0,d=f.length;h0){if(!o.compareByGeneratedPositionsInflated(c,f[h-1])){continue}l+=","}}l+=t.encode(c.generatedColumn-e);e=c.generatedColumn;if(c.source!=null){g=this._sources.indexOf(c.source);l+=t.encode(g-u);u=g;l+=t.encode(c.originalLine-1-i);i=c.originalLine-1;l+=t.encode(c.originalColumn-n);n=c.originalColumn;if(c.name!=null){p=this._names.indexOf(c.name);l+=t.encode(p-a);a=p}}s+=l}return s};SourceMapGenerator.prototype._generateSourcesContent=function SourceMapGenerator_generateSourcesContent(e,r){return e.map((function(e){if(!this._sourcesContents){return null}if(r!=null){e=o.relative(r,e)}var n=o.toSetString(e);return Object.prototype.hasOwnProperty.call(this._sourcesContents,n)?this._sourcesContents[n]:null}),this)};SourceMapGenerator.prototype.toJSON=function SourceMapGenerator_toJSON(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};if(this._file!=null){e.file=this._file}if(this._sourceRoot!=null){e.sourceRoot=this._sourceRoot}if(this._sourcesContents){e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)}return e};SourceMapGenerator.prototype.toString=function SourceMapGenerator_toString(){return JSON.stringify(this.toJSON())};r.SourceMapGenerator=SourceMapGenerator},13:(e,r,n)=>{var t=n(231).SourceMapGenerator;var o=n(749);var i=/(\r?\n)/;var a=10;var u="$$$isSourceNode$$$";function SourceNode(e,r,n,t,o){this.children=[];this.sourceContents={};this.line=e==null?null:e;this.column=r==null?null:r;this.source=n==null?null:n;this.name=o==null?null:o;this[u]=true;if(t!=null)this.add(t)}SourceNode.fromStringWithSourceMap=function SourceNode_fromStringWithSourceMap(e,r,n){var t=new SourceNode;var a=e.split(i);var u=0;var shiftNextLine=function(){var e=getNextLine();var r=getNextLine()||"";return e+r;function getNextLine(){return u=0;r--){this.prepend(e[r])}}else if(e[u]||typeof e==="string"){this.children.unshift(e)}else{throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e)}return this};SourceNode.prototype.walk=function SourceNode_walk(e){var r;for(var n=0,t=this.children.length;n0){r=[];for(n=0;n{function getArg(e,r,n){if(r in e){return e[r]}else if(arguments.length===3){return n}else{throw new Error('"'+r+'" is a required argument.')}}r.getArg=getArg;var n=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/;var t=/^data:.+\,.+$/;function urlParse(e){var r=e.match(n);if(!r){return null}return{scheme:r[1],auth:r[2],host:r[3],port:r[4],path:r[5]}}r.urlParse=urlParse;function urlGenerate(e){var r="";if(e.scheme){r+=e.scheme+":"}r+="//";if(e.auth){r+=e.auth+"@"}if(e.host){r+=e.host}if(e.port){r+=":"+e.port}if(e.path){r+=e.path}return r}r.urlGenerate=urlGenerate;function normalize(e){var n=e;var t=urlParse(e);if(t){if(!t.path){return e}n=t.path}var o=r.isAbsolute(n);var i=n.split(/\/+/);for(var a,u=0,s=i.length-1;s>=0;s--){a=i[s];if(a==="."){i.splice(s,1)}else if(a===".."){u++}else if(u>0){if(a===""){i.splice(s+1,u);u=0}else{i.splice(s,2);u--}}}n=i.join("/");if(n===""){n=o?"/":"."}if(t){t.path=n;return urlGenerate(t)}return n}r.normalize=normalize;function join(e,r){if(e===""){e="."}if(r===""){r="."}var n=urlParse(r);var o=urlParse(e);if(o){e=o.path||"/"}if(n&&!n.scheme){if(o){n.scheme=o.scheme}return urlGenerate(n)}if(n||r.match(t)){return r}if(o&&!o.host&&!o.path){o.host=r;return urlGenerate(o)}var i=r.charAt(0)==="/"?r:normalize(e.replace(/\/+$/,"")+"/"+r);if(o){o.path=i;return urlGenerate(o)}return i}r.join=join;r.isAbsolute=function(e){return e.charAt(0)==="/"||n.test(e)};function relative(e,r){if(e===""){e="."}e=e.replace(/\/$/,"");var n=0;while(r.indexOf(e+"/")!==0){var t=e.lastIndexOf("/");if(t<0){return r}e=e.slice(0,t);if(e.match(/^([^\/]+:\/)?\/*$/)){return r}++n}return Array(n+1).join("../")+r.substr(e.length+1)}r.relative=relative;var o=function(){var e=Object.create(null);return!("__proto__"in e)}();function identity(e){return e}function toSetString(e){if(isProtoString(e)){return"$"+e}return e}r.toSetString=o?identity:toSetString;function fromSetString(e){if(isProtoString(e)){return e.slice(1)}return e}r.fromSetString=o?identity:fromSetString;function isProtoString(e){if(!e){return false}var r=e.length;if(r<9){return false}if(e.charCodeAt(r-1)!==95||e.charCodeAt(r-2)!==95||e.charCodeAt(r-3)!==111||e.charCodeAt(r-4)!==116||e.charCodeAt(r-5)!==111||e.charCodeAt(r-6)!==114||e.charCodeAt(r-7)!==112||e.charCodeAt(r-8)!==95||e.charCodeAt(r-9)!==95){return false}for(var n=r-10;n>=0;n--){if(e.charCodeAt(n)!==36){return false}}return true}function compareByOriginalPositions(e,r,n){var t=strcmp(e.source,r.source);if(t!==0){return t}t=e.originalLine-r.originalLine;if(t!==0){return t}t=e.originalColumn-r.originalColumn;if(t!==0||n){return t}t=e.generatedColumn-r.generatedColumn;if(t!==0){return t}t=e.generatedLine-r.generatedLine;if(t!==0){return t}return strcmp(e.name,r.name)}r.compareByOriginalPositions=compareByOriginalPositions;function compareByGeneratedPositionsDeflated(e,r,n){var t=e.generatedLine-r.generatedLine;if(t!==0){return t}t=e.generatedColumn-r.generatedColumn;if(t!==0||n){return t}t=strcmp(e.source,r.source);if(t!==0){return t}t=e.originalLine-r.originalLine;if(t!==0){return t}t=e.originalColumn-r.originalColumn;if(t!==0){return t}return strcmp(e.name,r.name)}r.compareByGeneratedPositionsDeflated=compareByGeneratedPositionsDeflated;function strcmp(e,r){if(e===r){return 0}if(e===null){return 1}if(r===null){return-1}if(e>r){return 1}return-1}function compareByGeneratedPositionsInflated(e,r){var n=e.generatedLine-r.generatedLine;if(n!==0){return n}n=e.generatedColumn-r.generatedColumn;if(n!==0){return n}n=strcmp(e.source,r.source);if(n!==0){return n}n=e.originalLine-r.originalLine;if(n!==0){return n}n=e.originalColumn-r.originalColumn;if(n!==0){return n}return strcmp(e.name,r.name)}r.compareByGeneratedPositionsInflated=compareByGeneratedPositionsInflated;function parseSourceMapInput(e){return JSON.parse(e.replace(/^\)]}'[^\n]*\n/,""))}r.parseSourceMapInput=parseSourceMapInput;function computeSourceURL(e,r,n){r=r||"";if(e){if(e[e.length-1]!=="/"&&r[0]!=="/"){e+="/"}r=e+r}if(n){var t=urlParse(n);if(!t){throw new Error("sourceMapURL could not be parsed")}if(t.path){var o=t.path.lastIndexOf("/");if(o>=0){t.path=t.path.substring(0,o+1)}}r=join(urlGenerate(t),r)}return normalize(r)}r.computeSourceURL=computeSourceURL}};var r={};function __nccwpck_require__(n){var t=r[n];if(t!==undefined){return t.exports}var o=r[n]={exports:{}};var i=true;try{e[n](o,o.exports,__nccwpck_require__);i=false}finally{if(i)delete r[n]}return o.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var n={};(()=>{var e=n;e.SourceMapGenerator=__nccwpck_require__(231).SourceMapGenerator;e.SourceMapConsumer=__nccwpck_require__(69).SourceMapConsumer;e.SourceNode=__nccwpck_require__(13).SourceNode})();module.exports=n})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/stacktrace-parser/package.json b/build/node_modules/next/dist/compiled/stacktrace-parser/package.json new file mode 100644 index 0000000..1dafea1 --- /dev/null +++ b/build/node_modules/next/dist/compiled/stacktrace-parser/package.json @@ -0,0 +1 @@ +{"name":"stacktrace-parser","main":"stack-trace-parser.cjs.js","author":"Georg Tavonius (http://jaz-lounge.com)","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js b/build/node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js new file mode 100644 index 0000000..f3c22be --- /dev/null +++ b/build/node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js @@ -0,0 +1 @@ +(()=>{"use strict";if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var e={};(()=>{var r=e;Object.defineProperty(r,"__esModule",{value:true});var n="";function parse(e){var r=e.split("\n");return r.reduce((function(e,r){var n=parseChrome(r)||parseWinjs(r)||parseGecko(r)||parseNode(r)||parseJSC(r);if(n){e.push(n)}return e}),[])}var a=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack|webpack-internal|rsc|about|turbopack||\/|[a-z]:\\|\\\\).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;var u=/\((\S*)(?::(\d+))(?::(\d+))\)/;function parseChrome(e){var r=a.exec(e);if(!r){return null}var l=r[2]&&r[2].indexOf("native")===0;var t=r[2]&&r[2].indexOf("eval")===0;var i=u.exec(r[2]);if(t&&i!=null){r[2]=i[1];r[3]=i[2];r[4]=i[3]}return{file:!l?r[2]:null,methodName:r[1]||n,arguments:l?[r[2]]:[],lineNumber:r[3]?+r[3]:null,column:r[4]?+r[4]:null}}var l=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|webpack-internal|rsc|about|turbopack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;function parseWinjs(e){var r=l.exec(e);if(!r){return null}return{file:r[2],methodName:r[1]||n,arguments:[],lineNumber:+r[3],column:r[4]?+r[4]:null}}var t=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|webpack-internal|rsc|about|turbopack|resource|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i;var i=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i;function parseGecko(e){var r=t.exec(e);if(!r){return null}var a=r[3]&&r[3].indexOf(" > eval")>-1;var u=i.exec(r[3]);if(a&&u!=null){r[3]=u[1];r[4]=u[2];r[5]=null}return{file:r[3],methodName:r[1]||n,arguments:r[2]?r[2].split(","):[],lineNumber:r[4]?+r[4]:null,column:r[5]?+r[5]:null}}var o=/^\s*(?:([^@]*)(?:\((.*?)\))?@)?(\S.*?):(\d+)(?::(\d+))?\s*$/i;function parseJSC(e){var r=o.exec(e);if(!r){return null}return{file:r[3],methodName:r[1]||n,arguments:[],lineNumber:+r[4],column:r[5]?+r[5]:null}}var s=/^\s*at (?:((?:\[object object\])?[^\\/]+(?: \[as \S+\])?) )?\(?(.*?):(\d+)(?::(\d+))?\)?\s*$/i;function parseNode(e){var r=s.exec(e);if(!r){return null}return{file:r[2],methodName:r[1]||n,arguments:[],lineNumber:+r[3],column:r[4]?+r[4]:null}}r.parse=parse})();module.exports=e})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/string-hash/index.js b/build/node_modules/next/dist/compiled/string-hash/index.js new file mode 100644 index 0000000..06f7bb3 --- /dev/null +++ b/build/node_modules/next/dist/compiled/string-hash/index.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={328:e=>{function hash(e){var r=5381,_=e.length;while(_){r=r*33^e.charCodeAt(--_)}return r>>>0}e.exports=hash}};var r={};function __nccwpck_require__(_){var a=r[_];if(a!==undefined){return a.exports}var t=r[_]={exports:{}};var i=true;try{e[_](t,t.exports,__nccwpck_require__);i=false}finally{if(i)delete r[_]}return t.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var _=__nccwpck_require__(328);module.exports=_})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/string-hash/package.json b/build/node_modules/next/dist/compiled/string-hash/package.json new file mode 100644 index 0000000..7b140e8 --- /dev/null +++ b/build/node_modules/next/dist/compiled/string-hash/package.json @@ -0,0 +1 @@ +{"name":"string-hash","main":"index.js","author":{"name":"The Dark Sky Company","email":"developer@darksky.net"},"license":"CC0-1.0"} diff --git a/build/node_modules/next/dist/compiled/strip-ansi/index.js b/build/node_modules/next/dist/compiled/strip-ansi/index.js new file mode 100644 index 0000000..b0b706b --- /dev/null +++ b/build/node_modules/next/dist/compiled/strip-ansi/index.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={511:e=>{e.exports=({onlyFirst:e=false}={})=>{const r=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(r,e?undefined:"g")}},532:(e,r,_)=>{const t=_(511);e.exports=e=>typeof e==="string"?e.replace(t(),""):e}};var r={};function __nccwpck_require__(_){var t=r[_];if(t!==undefined){return t.exports}var a=r[_]={exports:{}};var n=true;try{e[_](a,a.exports,__nccwpck_require__);n=false}finally{if(n)delete r[_]}return a.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var _=__nccwpck_require__(532);module.exports=_})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/strip-ansi/package.json b/build/node_modules/next/dist/compiled/strip-ansi/package.json new file mode 100644 index 0000000..c005a27 --- /dev/null +++ b/build/node_modules/next/dist/compiled/strip-ansi/package.json @@ -0,0 +1 @@ +{"name":"strip-ansi","main":"index.js","author":{"name":"Sindre Sorhus","email":"sindresorhus@gmail.com","url":"sindresorhus.com"},"license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/superstruct/index.cjs b/build/node_modules/next/dist/compiled/superstruct/index.cjs new file mode 100644 index 0000000..a173ca6 --- /dev/null +++ b/build/node_modules/next/dist/compiled/superstruct/index.cjs @@ -0,0 +1 @@ +(()=>{var e={318:function(e,t){(function(e,n){true?n(t):0})(this,(function(e){"use strict";class StructError extends TypeError{constructor(e,t){let n;const{message:r,explanation:i,...c}=e;const{path:o}=e;const a=o.length===0?r:`At path: ${o.join(".")} -- ${r}`;super(i??a);if(i!=null)this.cause=a;Object.assign(this,c);this.name=this.constructor.name;this.failures=()=>n??(n=[e,...t()])}}function isIterable(e){return isObject(e)&&typeof e[Symbol.iterator]==="function"}function isObject(e){return typeof e==="object"&&e!=null}function isPlainObject(e){if(Object.prototype.toString.call(e)!=="[object Object]"){return false}const t=Object.getPrototypeOf(e);return t===null||t===Object.prototype}function print(e){if(typeof e==="symbol"){return e.toString()}return typeof e==="string"?JSON.stringify(e):`${e}`}function shiftIterator(e){const{done:t,value:n}=e.next();return t?undefined:n}function toFailure(e,t,n,r){if(e===true){return}else if(e===false){e={}}else if(typeof e==="string"){e={message:e}}const{path:i,branch:c}=t;const{type:o}=n;const{refinement:a,message:s=`Expected a value of type \`${o}\`${a?` with refinement \`${a}\``:""}, but received: \`${print(r)}\``}=e;return{value:r,type:o,refinement:a,key:i[i.length-1],path:i,branch:c,...e,message:s}}function*toFailures(e,t,n,r){if(!isIterable(e)){e=[e]}for(const i of e){const e=toFailure(i,t,n,r);if(e){yield e}}}function*run(e,t,n={}){const{path:r=[],branch:i=[e],coerce:c=false,mask:o=false}=n;const a={path:r,branch:i};if(c){e=t.coercer(e,a);if(o&&t.type!=="type"&&isObject(t.schema)&&isObject(e)&&!Array.isArray(e)){for(const n in e){if(t.schema[n]===undefined){delete e[n]}}}}let s="valid";for(const r of t.validator(e,a)){r.explanation=n.message;s="not_valid";yield[r,undefined]}for(let[u,f,l]of t.entries(e,a)){const t=run(f,l,{path:u===undefined?r:[...r,u],branch:u===undefined?i:[...i,f],coerce:c,mask:o,message:n.message});for(const n of t){if(n[0]){s=n[0].refinement!=null?"not_refined":"not_valid";yield[n[0],undefined]}else if(c){f=n[1];if(u===undefined){e=f}else if(e instanceof Map){e.set(u,f)}else if(e instanceof Set){e.add(f)}else if(isObject(e)){if(f!==undefined||u in e)e[u]=f}}}}if(s!=="not_valid"){for(const r of t.refiner(e,a)){r.explanation=n.message;s="not_refined";yield[r,undefined]}}if(s==="valid"){yield[undefined,e]}}class Struct{constructor(e){const{type:t,schema:n,validator:r,refiner:i,coercer:c=(e=>e),entries:o=function*(){}}=e;this.type=t;this.schema=n;this.entries=o;this.coercer=c;if(r){this.validator=(e,t)=>{const n=r(e,t);return toFailures(n,t,this,e)}}else{this.validator=()=>[]}if(i){this.refiner=(e,t)=>{const n=i(e,t);return toFailures(n,t,this,e)}}else{this.refiner=()=>[]}}assert(e,t){return assert(e,this,t)}create(e,t){return create(e,this,t)}is(e){return is(e,this)}mask(e,t){return mask(e,this,t)}validate(e,t={}){return validate(e,this,t)}}function assert(e,t,n){const r=validate(e,t,{message:n});if(r[0]){throw r[0]}}function create(e,t,n){const r=validate(e,t,{coerce:true,message:n});if(r[0]){throw r[0]}else{return r[1]}}function mask(e,t,n){const r=validate(e,t,{coerce:true,mask:true,message:n});if(r[0]){throw r[0]}else{return r[1]}}function is(e,t){const n=validate(e,t);return!n[0]}function validate(e,t,n={}){const r=run(e,t,n);const i=shiftIterator(r);if(i[0]){const e=new StructError(i[0],(function*(){for(const e of r){if(e[0]){yield e[0]}}}));return[e,undefined]}else{const e=i[1];return[undefined,e]}}function assign(...e){const t=e[0].type==="type";const n=e.map((e=>e.schema));const r=Object.assign({},...n);return t?type(r):object(r)}function define(e,t){return new Struct({type:e,schema:null,validator:t})}function deprecated(e,t){return new Struct({...e,refiner:(t,n)=>t===undefined||e.refiner(t,n),validator(n,r){if(n===undefined){return true}else{t(n,r);return e.validator(n,r)}}})}function dynamic(e){return new Struct({type:"dynamic",schema:null,*entries(t,n){const r=e(t,n);yield*r.entries(t,n)},validator(t,n){const r=e(t,n);return r.validator(t,n)},coercer(t,n){const r=e(t,n);return r.coercer(t,n)},refiner(t,n){const r=e(t,n);return r.refiner(t,n)}})}function lazy(e){let t;return new Struct({type:"lazy",schema:null,*entries(n,r){t??(t=e());yield*t.entries(n,r)},validator(n,r){t??(t=e());return t.validator(n,r)},coercer(n,r){t??(t=e());return t.coercer(n,r)},refiner(n,r){t??(t=e());return t.refiner(n,r)}})}function omit(e,t){const{schema:n}=e;const r={...n};for(const e of t){delete r[e]}switch(e.type){case"type":return type(r);default:return object(r)}}function partial(e){const t=e instanceof Struct?{...e.schema}:{...e};for(const e in t){t[e]=optional(t[e])}return object(t)}function pick(e,t){const{schema:n}=e;const r={};for(const e of t){r[e]=n[e]}return object(r)}function struct(e,t){console.warn("superstruct@0.11 - The `struct` helper has been renamed to `define`.");return define(e,t)}function any(){return define("any",(()=>true))}function array(e){return new Struct({type:"array",schema:e,*entries(t){if(e&&Array.isArray(t)){for(const[n,r]of t.entries()){yield[n,r,e]}}},coercer(e){return Array.isArray(e)?e.slice():e},validator(e){return Array.isArray(e)||`Expected an array value, but received: ${print(e)}`}})}function bigint(){return define("bigint",(e=>typeof e==="bigint"))}function boolean(){return define("boolean",(e=>typeof e==="boolean"))}function date(){return define("date",(e=>e instanceof Date&&!isNaN(e.getTime())||`Expected a valid \`Date\` object, but received: ${print(e)}`))}function enums(e){const t={};const n=e.map((e=>print(e))).join();for(const n of e){t[n]=n}return new Struct({type:"enums",schema:t,validator(t){return e.includes(t)||`Expected one of \`${n}\`, but received: ${print(t)}`}})}function func(){return define("func",(e=>typeof e==="function"||`Expected a function, but received: ${print(e)}`))}function instance(e){return define("instance",(t=>t instanceof e||`Expected a \`${e.name}\` instance, but received: ${print(t)}`))}function integer(){return define("integer",(e=>typeof e==="number"&&!isNaN(e)&&Number.isInteger(e)||`Expected an integer, but received: ${print(e)}`))}function intersection(e){return new Struct({type:"intersection",schema:null,*entries(t,n){for(const r of e){yield*r.entries(t,n)}},*validator(t,n){for(const r of e){yield*r.validator(t,n)}},*refiner(t,n){for(const r of e){yield*r.refiner(t,n)}}})}function literal(e){const t=print(e);const n=typeof e;return new Struct({type:"literal",schema:n==="string"||n==="number"||n==="boolean"?e:null,validator(n){return n===e||`Expected the literal \`${t}\`, but received: ${print(n)}`}})}function map(e,t){return new Struct({type:"map",schema:null,*entries(n){if(e&&t&&n instanceof Map){for(const[r,i]of n.entries()){yield[r,r,e];yield[r,i,t]}}},coercer(e){return e instanceof Map?new Map(e):e},validator(e){return e instanceof Map||`Expected a \`Map\` object, but received: ${print(e)}`}})}function never(){return define("never",(()=>false))}function nullable(e){return new Struct({...e,validator:(t,n)=>t===null||e.validator(t,n),refiner:(t,n)=>t===null||e.refiner(t,n)})}function number(){return define("number",(e=>typeof e==="number"&&!isNaN(e)||`Expected a number, but received: ${print(e)}`))}function object(e){const t=e?Object.keys(e):[];const n=never();return new Struct({type:"object",schema:e?e:null,*entries(r){if(e&&isObject(r)){const i=new Set(Object.keys(r));for(const n of t){i.delete(n);yield[n,r[n],e[n]]}for(const e of i){yield[e,r[e],n]}}},validator(e){return isObject(e)||`Expected an object, but received: ${print(e)}`},coercer(e){return isObject(e)?{...e}:e}})}function optional(e){return new Struct({...e,validator:(t,n)=>t===undefined||e.validator(t,n),refiner:(t,n)=>t===undefined||e.refiner(t,n)})}function record(e,t){return new Struct({type:"record",schema:null,*entries(n){if(isObject(n)){for(const r in n){const i=n[r];yield[r,r,e];yield[r,i,t]}}},validator(e){return isObject(e)||`Expected an object, but received: ${print(e)}`}})}function regexp(){return define("regexp",(e=>e instanceof RegExp))}function set(e){return new Struct({type:"set",schema:null,*entries(t){if(e&&t instanceof Set){for(const n of t){yield[n,n,e]}}},coercer(e){return e instanceof Set?new Set(e):e},validator(e){return e instanceof Set||`Expected a \`Set\` object, but received: ${print(e)}`}})}function string(){return define("string",(e=>typeof e==="string"||`Expected a string, but received: ${print(e)}`))}function tuple(e){const t=never();return new Struct({type:"tuple",schema:null,*entries(n){if(Array.isArray(n)){const r=Math.max(e.length,n.length);for(let i=0;ie.type)).join(" | ");return new Struct({type:"union",schema:null,coercer(t){for(const n of e){const[e,r]=n.validate(t,{coerce:true});if(!e){return r}}return t},validator(n,r){const i=[];for(const t of e){const[...e]=run(n,t,r);const[c]=e;if(!c[0]){return[]}else{for(const[t]of e){if(t){i.push(t)}}}}return[`Expected the value to satisfy a union of \`${t}\`, but received: ${print(n)}`,...i]}})}function unknown(){return define("unknown",(()=>true))}function coerce(e,t,n){return new Struct({...e,coercer:(r,i)=>is(r,t)?e.coercer(n(r,i),i):e.coercer(r,i)})}function defaulted(e,t,n={}){return coerce(e,unknown(),(e=>{const r=typeof t==="function"?t():t;if(e===undefined){return r}if(!n.strict&&isPlainObject(e)&&isPlainObject(r)){const t={...e};let n=false;for(const e in r){if(t[e]===undefined){t[e]=r[e];n=true}}if(n){return t}}return e}))}function trimmed(e){return coerce(e,string(),(e=>e.trim()))}function empty(e){return refine(e,"empty",(t=>{const n=getSize(t);return n===0||`Expected an empty ${e.type} but received one with a size of \`${n}\``}))}function getSize(e){if(e instanceof Map||e instanceof Set){return e.size}else{return e.length}}function max(e,t,n={}){const{exclusive:r}=n;return refine(e,"max",(n=>r?nr?n>t:n>=t||`Expected a ${e.type} greater than ${r?"":"or equal to "}${t} but received \`${n}\``))}function nonempty(e){return refine(e,"nonempty",(t=>{const n=getSize(t);return n>0||`Expected a nonempty ${e.type} but received an empty one`}))}function pattern(e,t){return refine(e,"pattern",(n=>t.test(n)||`Expected a ${e.type} matching \`/${t.source}/\` but received "${n}"`))}function size(e,t,n=t){const r=`Expected a ${e.type}`;const i=t===n?`of \`${t}\``:`between \`${t}\` and \`${n}\``;return refine(e,"size",(e=>{if(typeof e==="number"||e instanceof Date){return t<=e&&e<=n||`${r} ${i} but received \`${e}\``}else if(e instanceof Map||e instanceof Set){const{size:c}=e;return t<=c&&c<=n||`${r} with a size ${i} but received one with a size of \`${c}\``}else{const{length:c}=e;return t<=c&&c<=n||`${r} with a length ${i} but received one with a length of \`${c}\``}}))}function refine(e,t,n){return new Struct({...e,*refiner(r,i){yield*e.refiner(r,i);const c=n(r,i);const o=toFailures(c,i,e,r);for(const e of o){yield{...e,refinement:t}}}})}e.Struct=Struct;e.StructError=StructError;e.any=any;e.array=array;e.assert=assert;e.assign=assign;e.bigint=bigint;e.boolean=boolean;e.coerce=coerce;e.create=create;e.date=date;e.defaulted=defaulted;e.define=define;e.deprecated=deprecated;e.dynamic=dynamic;e.empty=empty;e.enums=enums;e.func=func;e.instance=instance;e.integer=integer;e.intersection=intersection;e.is=is;e.lazy=lazy;e.literal=literal;e.map=map;e.mask=mask;e.max=max;e.min=min;e.never=never;e.nonempty=nonempty;e.nullable=nullable;e.number=number;e.object=object;e.omit=omit;e.optional=optional;e.partial=partial;e.pattern=pattern;e.pick=pick;e.record=record;e.refine=refine;e.regexp=regexp;e.set=set;e.size=size;e.string=string;e.struct=struct;e.trimmed=trimmed;e.tuple=tuple;e.type=type;e.union=union;e.unknown=unknown;e.validate=validate}))}};if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var t={};e[318](0,t);module.exports=t})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/superstruct/package.json b/build/node_modules/next/dist/compiled/superstruct/package.json new file mode 100644 index 0000000..bee4891 --- /dev/null +++ b/build/node_modules/next/dist/compiled/superstruct/package.json @@ -0,0 +1 @@ +{"name":"superstruct","main":"index.cjs","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/tar/index.min.js b/build/node_modules/next/dist/compiled/tar/index.min.js new file mode 100644 index 0000000..451aa90 --- /dev/null +++ b/build/node_modules/next/dist/compiled/tar/index.min.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={491:e=>{e.exports=require("assert")},300:e=>{e.exports=require("buffer")},361:e=>{e.exports=require("events")},147:e=>{e.exports=require("fs")},61:e=>{e.exports=require("node:assert")},5:e=>{e.exports=require("node:crypto")},673:e=>{e.exports=require("node:events")},561:e=>{e.exports=require("node:fs")},977:e=>{e.exports=require("node:fs/promises")},411:e=>{e.exports=require("node:path")},492:e=>{e.exports=require("node:stream")},915:e=>{e.exports=require("node:string_decoder")},17:e=>{e.exports=require("path")},796:e=>{e.exports=require("zlib")},590:(e,f,p)=>{var d=(e,f)=>()=>(f||e((f={exports:{}}).exports,f),f.exports);var m=d((e=>{"use strict";var f=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0});e.Minipass=e.isWritable=e.isReadable=e.isStream=void 0;var m=typeof process=="object"&&process?process:{stdout:null,stderr:null},y=p(673),b=f(p(492)),v=p(915),bo=f=>!!f&&typeof f=="object"&&(f instanceof J||f instanceof b.default||(0,e.isReadable)(f)||(0,e.isWritable)(f));e.isStream=bo;var So=e=>!!e&&typeof e=="object"&&e instanceof y.EventEmitter&&typeof e.pipe=="function"&&e.pipe!==b.default.Writable.prototype.pipe;e.isReadable=So;var go=e=>!!e&&typeof e=="object"&&e instanceof y.EventEmitter&&typeof e.write=="function"&&typeof e.end=="function";e.isWritable=go;var _=Symbol("EOF"),w=Symbol("maybeEmitEnd"),g=Symbol("emittedEnd"),S=Symbol("emittingEnd"),O=Symbol("emittedError"),R=Symbol("closed"),k=Symbol("read"),P=Symbol("flush"),T=Symbol("flushChunk"),D=Symbol("encoding"),M=Symbol("decoder"),x=Symbol("flowing"),L=Symbol("paused"),A=Symbol("resume"),N=Symbol("buffer"),I=Symbol("pipes"),F=Symbol("bufferLength"),B=Symbol("bufferPush"),z=Symbol("bufferShift"),C=Symbol("objectMode"),j=Symbol("destroyed"),U=Symbol("error"),W=Symbol("emitData"),Z=Symbol("emitEnd"),H=Symbol("emitEnd2"),G=Symbol("async"),Y=Symbol("abort"),$=Symbol("aborted"),q=Symbol("signal"),V=Symbol("dataListeners"),K=Symbol("discarded"),pt=e=>Promise.resolve().then(e),Ro=e=>e(),Oo=e=>e==="end"||e==="finish"||e==="prefinish",vo=e=>e instanceof ArrayBuffer||!!e&&typeof e=="object"&&e.constructor&&e.constructor.name==="ArrayBuffer"&&e.byteLength>=0,To=e=>!Buffer.isBuffer(e)&&ArrayBuffer.isView(e),X=class{src;dest;opts;ondrain;constructor(e,f,p){this.src=e,this.dest=f,this.opts=p,this.ondrain=()=>e[A](),this.dest.on("drain",this.ondrain)}unpipe(){this.dest.removeListener("drain",this.ondrain)}proxyErrors(e){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},Q=class extends X{unpipe(){this.src.removeListener("error",this.proxyErrors),super.unpipe()}constructor(e,f,p){super(e,f,p),this.proxyErrors=e=>this.dest.emit("error",e),e.on("error",this.proxyErrors)}},Do=e=>!!e.objectMode,Po=e=>!e.objectMode&&!!e.encoding&&e.encoding!=="buffer",J=class extends y.EventEmitter{[x]=!1;[L]=!1;[I]=[];[N]=[];[C];[D];[G];[M];[_]=!1;[g]=!1;[S]=!1;[R]=!1;[O]=null;[F]=0;[j]=!1;[q];[$]=!1;[V]=0;[K]=!1;writable=!0;readable=!0;constructor(...e){let f=e[0]||{};if(super(),f.objectMode&&typeof f.encoding=="string")throw new TypeError("Encoding and objectMode may not be used together");Do(f)?(this[C]=!0,this[D]=null):Po(f)?(this[D]=f.encoding,this[C]=!1):(this[C]=!1,this[D]=null),this[G]=!!f.async,this[M]=this[D]?new v.StringDecoder(this[D]):null,f&&f.debugExposeBuffer===!0&&Object.defineProperty(this,"buffer",{get:()=>this[N]}),f&&f.debugExposePipes===!0&&Object.defineProperty(this,"pipes",{get:()=>this[I]});let{signal:p}=f;p&&(this[q]=p,p.aborted?this[Y]():p.addEventListener("abort",(()=>this[Y]())))}get bufferLength(){return this[F]}get encoding(){return this[D]}set encoding(e){throw new Error("Encoding must be set at instantiation time")}setEncoding(e){throw new Error("Encoding must be set at instantiation time")}get objectMode(){return this[C]}set objectMode(e){throw new Error("objectMode must be set at instantiation time")}get async(){return this[G]}set async(e){this[G]=this[G]||!!e}[Y](){this[$]=!0,this.emit("abort",this[q]?.reason),this.destroy(this[q]?.reason)}get aborted(){return this[$]}set aborted(e){}write(e,f,p){if(this[$])return!1;if(this[_])throw new Error("write after end");if(this[j])return this.emit("error",Object.assign(new Error("Cannot call write after a stream was destroyed"),{code:"ERR_STREAM_DESTROYED"})),!0;typeof f=="function"&&(p=f,f="utf8"),f||(f="utf8");let m=this[G]?pt:Ro;if(!this[C]&&!Buffer.isBuffer(e)){if(To(e))e=Buffer.from(e.buffer,e.byteOffset,e.byteLength);else if(vo(e))e=Buffer.from(e);else if(typeof e!="string")throw new Error("Non-contiguous data written to non-objectMode stream")}return this[C]?(this[x]&&this[F]!==0&&this[P](!0),this[x]?this.emit("data",e):this[B](e),this[F]!==0&&this.emit("readable"),p&&m(p),this[x]):e.length?(typeof e=="string"&&!(f===this[D]&&!this[M]?.lastNeed)&&(e=Buffer.from(e,f)),Buffer.isBuffer(e)&&this[D]&&(e=this[M].write(e)),this[x]&&this[F]!==0&&this[P](!0),this[x]?this.emit("data",e):this[B](e),this[F]!==0&&this.emit("readable"),p&&m(p),this[x]):(this[F]!==0&&this.emit("readable"),p&&m(p),this[x])}read(e){if(this[j])return null;if(this[K]=!1,this[F]===0||e===0||e&&e>this[F])return this[w](),null;this[C]&&(e=null),this[N].length>1&&!this[C]&&(this[N]=[this[D]?this[N].join(""):Buffer.concat(this[N],this[F])]);let f=this[k](e||null,this[N][0]);return this[w](),f}[k](e,f){if(this[C])this[z]();else{let p=f;e===p.length||e===null?this[z]():typeof p=="string"?(this[N][0]=p.slice(e),f=p.slice(0,e),this[F]-=e):(this[N][0]=p.subarray(e),f=p.subarray(0,e),this[F]-=e)}return this.emit("data",f),!this[N].length&&!this[_]&&this.emit("drain"),f}end(e,f,p){return typeof e=="function"&&(p=e,e=void 0),typeof f=="function"&&(p=f,f="utf8"),e!==void 0&&this.write(e,f),p&&this.once("end",p),this[_]=!0,this.writable=!1,(this[x]||!this[L])&&this[w](),this}[A](){this[j]||(!this[V]&&!this[I].length&&(this[K]=!0),this[L]=!1,this[x]=!0,this.emit("resume"),this[N].length?this[P]():this[_]?this[w]():this.emit("drain"))}resume(){return this[A]()}pause(){this[x]=!1,this[L]=!0,this[K]=!1}get destroyed(){return this[j]}get flowing(){return this[x]}get paused(){return this[L]}[B](e){this[C]?this[F]+=1:this[F]+=e.length,this[N].push(e)}[z](){return this[C]?this[F]-=1:this[F]-=this[N][0].length,this[N].shift()}[P](e=!1){do{}while(this[T](this[z]())&&this[N].length);!e&&!this[N].length&&!this[_]&&this.emit("drain")}[T](e){return this.emit("data",e),this[x]}pipe(e,f){if(this[j])return e;this[K]=!1;let p=this[g];return f=f||{},e===m.stdout||e===m.stderr?f.end=!1:f.end=f.end!==!1,f.proxyErrors=!!f.proxyErrors,p?f.end&&e.end():(this[I].push(f.proxyErrors?new Q(this,e,f):new X(this,e,f)),this[G]?pt((()=>this[A]())):this[A]()),e}unpipe(e){let f=this[I].find((f=>f.dest===e));f&&(this[I].length===1?(this[x]&&this[V]===0&&(this[x]=!1),this[I]=[]):this[I].splice(this[I].indexOf(f),1),f.unpipe())}addListener(e,f){return this.on(e,f)}on(e,f){let p=super.on(e,f);if(e==="data")this[K]=!1,this[V]++,!this[I].length&&!this[x]&&this[A]();else if(e==="readable"&&this[F]!==0)super.emit("readable");else if(Oo(e)&&this[g])super.emit(e),this.removeAllListeners(e);else if(e==="error"&&this[O]){let e=f;this[G]?pt((()=>e.call(this,this[O]))):e.call(this,this[O])}return p}removeListener(e,f){return this.off(e,f)}off(e,f){let p=super.off(e,f);return e==="data"&&(this[V]=this.listeners("data").length,this[V]===0&&!this[K]&&!this[I].length&&(this[x]=!1)),p}removeAllListeners(e){let f=super.removeAllListeners(e);return(e==="data"||e===void 0)&&(this[V]=0,!this[K]&&!this[I].length&&(this[x]=!1)),f}get emittedEnd(){return this[g]}[w](){!this[S]&&!this[g]&&!this[j]&&this[N].length===0&&this[_]&&(this[S]=!0,this.emit("end"),this.emit("prefinish"),this.emit("finish"),this[R]&&this.emit("close"),this[S]=!1)}emit(e,...f){let p=f[0];if(e!=="error"&&e!=="close"&&e!==j&&this[j])return!1;if(e==="data")return!this[C]&&!p?!1:this[G]?(pt((()=>this[W](p))),!0):this[W](p);if(e==="end")return this[Z]();if(e==="close"){if(this[R]=!0,!this[g]&&!this[j])return!1;let e=super.emit("close");return this.removeAllListeners("close"),e}else if(e==="error"){this[O]=p,super.emit(U,p);let e=!this[q]||this.listeners("error").length?super.emit("error",p):!1;return this[w](),e}else if(e==="resume"){let e=super.emit("resume");return this[w](),e}else if(e==="finish"||e==="prefinish"){let f=super.emit(e);return this.removeAllListeners(e),f}let m=super.emit(e,...f);return this[w](),m}[W](e){for(let f of this[I])f.dest.write(e)===!1&&this.pause();let f=this[K]?!1:super.emit("data",e);return this[w](),f}[Z](){return this[g]?!1:(this[g]=!0,this.readable=!1,this[G]?(pt((()=>this[H]())),!0):this[H]())}[H](){if(this[M]){let e=this[M].end();if(e){for(let f of this[I])f.dest.write(e);this[K]||super.emit("data",e)}}for(let e of this[I])e.end();let e=super.emit("end");return this.removeAllListeners("end"),e}async collect(){let e=Object.assign([],{dataLength:0});this[C]||(e.dataLength=0);let f=this.promise();return this.on("data",(f=>{e.push(f),this[C]||(e.dataLength+=f.length)})),await f,e}async concat(){if(this[C])throw new Error("cannot concat in objectMode");let e=await this.collect();return this[D]?e.join(""):Buffer.concat(e,e.dataLength)}async promise(){return new Promise(((e,f)=>{this.on(j,(()=>f(new Error("stream destroyed")))),this.on("error",(e=>f(e))),this.on("end",(()=>e()))}))}[Symbol.asyncIterator](){this[K]=!1;let e=!1,t=async()=>(this.pause(),e=!0,{value:void 0,done:!0});return{next:()=>{if(e)return t();let f=this.read();if(f!==null)return Promise.resolve({done:!1,value:f});if(this[_])return t();let p,m,a=e=>{this.off("data",h),this.off("end",l),this.off(j,u),t(),m(e)},h=e=>{this.off("error",a),this.off("end",l),this.off(j,u),this.pause(),p({value:e,done:!!this[_]})},l=()=>{this.off("error",a),this.off("data",h),this.off(j,u),t(),p({done:!0,value:void 0})},u=()=>a(new Error("stream destroyed"));return new Promise(((e,f)=>{m=f,p=e,this.once(j,u),this.once("error",a),this.once("end",l),this.once("data",h)}))},throw:t,return:t,[Symbol.asyncIterator](){return this},[Symbol.asyncDispose]:async()=>{}}}[Symbol.iterator](){this[K]=!1;let e=!1,t=()=>(this.pause(),this.off(U,t),this.off(j,t),this.off("end",t),e=!0,{done:!0,value:void 0}),i=()=>{if(e)return t();let f=this.read();return f===null?t():{done:!1,value:f}};return this.once("end",t),this.once(U,t),this.once(j,t),{next:i,throw:t,return:t,[Symbol.iterator](){return this},[Symbol.dispose]:()=>{}}}destroy(e){if(this[j])return e?this.emit("error",e):this.emit(j),this;this[j]=!0,this[K]=!0,this[N].length=0,this[F]=0;let f=this;return typeof f.close=="function"&&!this[R]&&f.close(),e?this.emit("error",e):this.emit(j),this}static get isStream(){return e.isStream}};e.Minipass=J}));var y=d((e=>{"use strict";var f=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0});e.WriteStreamSync=e.WriteStream=e.ReadStreamSync=e.ReadStream=void 0;var y=f(p(361)),b=f(p(147)),v=m(),_=b.default.writev,w=Symbol("_autoClose"),g=Symbol("_close"),S=Symbol("_ended"),O=Symbol("_fd"),R=Symbol("_finished"),k=Symbol("_flags"),P=Symbol("_flush"),T=Symbol("_handleChunk"),D=Symbol("_makeBuf"),M=Symbol("_mode"),x=Symbol("_needDrain"),L=Symbol("_onerror"),A=Symbol("_onopen"),N=Symbol("_onread"),I=Symbol("_onwrite"),F=Symbol("_open"),B=Symbol("_path"),z=Symbol("_pos"),C=Symbol("_queue"),j=Symbol("_read"),U=Symbol("_readSize"),W=Symbol("_reading"),Z=Symbol("_remain"),H=Symbol("_size"),G=Symbol("_write"),Y=Symbol("_writing"),$=Symbol("_defaultFlag"),q=Symbol("_errored"),V=class extends v.Minipass{[q]=!1;[O];[B];[U];[W]=!1;[H];[Z];[w];constructor(e,f){if(f=f||{},super(f),this.readable=!0,this.writable=!1,typeof e!="string")throw new TypeError("path must be a string");this[q]=!1,this[O]=typeof f.fd=="number"?f.fd:void 0,this[B]=e,this[U]=f.readSize||16*1024*1024,this[W]=!1,this[H]=typeof f.size=="number"?f.size:1/0,this[Z]=this[H],this[w]=typeof f.autoClose=="boolean"?f.autoClose:!0,typeof this[O]=="number"?this[j]():this[F]()}get fd(){return this[O]}get path(){return this[B]}write(){throw new TypeError("this is a readable stream")}end(){throw new TypeError("this is a readable stream")}[F](){b.default.open(this[B],"r",((e,f)=>this[A](e,f)))}[A](e,f){e?this[L](e):(this[O]=f,this.emit("open",f),this[j]())}[D](){return Buffer.allocUnsafe(Math.min(this[U],this[Z]))}[j](){if(!this[W]){this[W]=!0;let e=this[D]();if(e.length===0)return process.nextTick((()=>this[N](null,0,e)));b.default.read(this[O],e,0,e.length,null,((e,f,p)=>this[N](e,f,p)))}}[N](e,f,p){this[W]=!1,e?this[L](e):this[T](f,p)&&this[j]()}[g](){if(this[w]&&typeof this[O]=="number"){let e=this[O];this[O]=void 0,b.default.close(e,(e=>e?this.emit("error",e):this.emit("close")))}}[L](e){this[W]=!0,this[g](),this.emit("error",e)}[T](e,f){let p=!1;return this[Z]-=e,e>0&&(p=super.write(ethis[A](e,f)))}[A](e,f){this[$]&&this[k]==="r+"&&e&&e.code==="ENOENT"?(this[k]="w",this[F]()):e?this[L](e):(this[O]=f,this.emit("open",f),this[Y]||this[P]())}end(e,f){return e&&this.write(e,f),this[S]=!0,!this[Y]&&!this[C].length&&typeof this[O]=="number"&&this[I](null,0),this}write(e,f){return typeof e=="string"&&(e=Buffer.from(e,f)),this[S]?(this.emit("error",new Error("write() after end()")),!1):this[O]===void 0||this[Y]||this[C].length?(this[C].push(e),this[x]=!0,!1):(this[Y]=!0,this[G](e),!0)}[G](e){b.default.write(this[O],e,0,e.length,this[z],((e,f)=>this[I](e,f)))}[I](e,f){e?this[L](e):(this[z]!==void 0&&typeof f=="number"&&(this[z]+=f),this[C].length?this[P]():(this[Y]=!1,this[S]&&!this[R]?(this[R]=!0,this[g](),this.emit("finish")):this[x]&&(this[x]=!1,this.emit("drain"))))}[P](){if(this[C].length===0)this[S]&&this[I](null,0);else if(this[C].length===1)this[G](this[C].pop());else{let e=this[C];this[C]=[],_(this[O],e,this[z],((e,f)=>this[I](e,f)))}}[g](){if(this[w]&&typeof this[O]=="number"){let e=this[O];this[O]=void 0,b.default.close(e,(e=>e?this.emit("error",e):this.emit("close")))}}};e.WriteStream=X;var Q=class extends X{[F](){let e;if(this[$]&&this[k]==="r+")try{e=b.default.openSync(this[B],this[k],this[M])}catch(e){if(e?.code==="ENOENT")return this[k]="w",this[F]();throw e}else e=b.default.openSync(this[B],this[k],this[M]);this[A](null,e)}[g](){if(this[w]&&typeof this[O]=="number"){let e=this[O];this[O]=void 0,b.default.closeSync(e),this.emit("close")}}[G](e){let f=!0;try{this[I](null,b.default.writeSync(this[O],e,0,e.length,this[z])),f=!1}finally{if(f)try{this[g]()}catch{}}}};e.WriteStreamSync=Q}));var b=d((e=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.dealias=e.isNoFile=e.isFile=e.isAsync=e.isSync=e.isAsyncNoFile=e.isSyncNoFile=e.isAsyncFile=e.isSyncFile=void 0;var f=new Map([["C","cwd"],["f","file"],["z","gzip"],["P","preservePaths"],["U","unlink"],["strip-components","strip"],["stripComponents","strip"],["keep-newer","newer"],["keepNewer","newer"],["keep-newer-files","newer"],["keepNewerFiles","newer"],["k","keep"],["keep-existing","keep"],["keepExisting","keep"],["m","noMtime"],["no-mtime","noMtime"],["p","preserveOwner"],["L","follow"],["h","follow"],["onentry","onReadEntry"]]),Io=e=>!!e.sync&&!!e.file;e.isSyncFile=Io;var Co=e=>!e.sync&&!!e.file;e.isAsyncFile=Co;var Fo=e=>!!e.sync&&!e.file;e.isSyncNoFile=Fo;var Bo=e=>!e.sync&&!e.file;e.isAsyncNoFile=Bo;var zo=e=>!!e.sync;e.isSync=zo;var ko=e=>!e.sync;e.isAsync=ko;var jo=e=>!!e.file;e.isFile=jo;var xo=e=>!e.file;e.isNoFile=xo;var Uo=e=>{let p=f.get(e);return p||e},qo=(e={})=>{if(!e)return{};let f={};for(let[p,m]of Object.entries(e)){let e=Uo(p);f[e]=m}return f.chmod===void 0&&f.noChmod===!1&&(f.chmod=!0),delete f.noChmod,f};e.dealias=qo}));var v=d((e=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.makeCommand=void 0;var f=b(),Wo=(e,p,m,y,b)=>Object.assign(((v=[],_,w)=>{Array.isArray(v)&&(_=v,v={}),typeof _=="function"&&(w=_,_=void 0),_?_=Array.from(_):_=[];let g=(0,f.dealias)(v);if(b?.(g,_),(0,f.isSyncFile)(g)){if(typeof w=="function")throw new TypeError("callback not supported for sync tar functions");return e(g,_)}else if((0,f.isAsyncFile)(g)){let e=p(g,_),f=w||void 0;return f?e.then((()=>f()),f):e}else if((0,f.isSyncNoFile)(g)){if(typeof w=="function")throw new TypeError("callback not supported for sync tar functions");return m(g,_)}else if((0,f.isAsyncNoFile)(g)){if(typeof w=="function")throw new TypeError("callback only supported with file option");return y(g,_)}else throw new Error("impossible options??")}),{syncFile:e,asyncFile:p,syncNoFile:m,asyncNoFile:y,validate:b});e.makeCommand=Wo}));var _=d((e=>{"use strict";var f=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0});e.constants=void 0;var m=f(p(796)),y=m.default.constants||{ZLIB_VERNUM:4736};e.constants=Object.freeze(Object.assign(Object.create(null),{Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_VERSION_ERROR:-6,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,DEFLATE:1,INFLATE:2,GZIP:3,GUNZIP:4,DEFLATERAW:5,INFLATERAW:6,UNZIP:7,BROTLI_DECODE:8,BROTLI_ENCODE:9,Z_MIN_WINDOWBITS:8,Z_MAX_WINDOWBITS:15,Z_DEFAULT_WINDOWBITS:15,Z_MIN_CHUNK:64,Z_MAX_CHUNK:1/0,Z_DEFAULT_CHUNK:16384,Z_MIN_MEMLEVEL:1,Z_MAX_MEMLEVEL:9,Z_DEFAULT_MEMLEVEL:8,Z_MIN_LEVEL:-1,Z_MAX_LEVEL:9,Z_DEFAULT_LEVEL:-1,BROTLI_OPERATION_PROCESS:0,BROTLI_OPERATION_FLUSH:1,BROTLI_OPERATION_FINISH:2,BROTLI_OPERATION_EMIT_METADATA:3,BROTLI_MODE_GENERIC:0,BROTLI_MODE_TEXT:1,BROTLI_MODE_FONT:2,BROTLI_DEFAULT_MODE:0,BROTLI_MIN_QUALITY:0,BROTLI_MAX_QUALITY:11,BROTLI_DEFAULT_QUALITY:11,BROTLI_MIN_WINDOW_BITS:10,BROTLI_MAX_WINDOW_BITS:24,BROTLI_LARGE_MAX_WINDOW_BITS:30,BROTLI_DEFAULT_WINDOW:22,BROTLI_MIN_INPUT_BLOCK_BITS:16,BROTLI_MAX_INPUT_BLOCK_BITS:24,BROTLI_PARAM_MODE:0,BROTLI_PARAM_QUALITY:1,BROTLI_PARAM_LGWIN:2,BROTLI_PARAM_LGBLOCK:3,BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:4,BROTLI_PARAM_SIZE_HINT:5,BROTLI_PARAM_LARGE_WINDOW:6,BROTLI_PARAM_NPOSTFIX:7,BROTLI_PARAM_NDIRECT:8,BROTLI_DECODER_RESULT_ERROR:0,BROTLI_DECODER_RESULT_SUCCESS:1,BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT:2,BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:0,BROTLI_DECODER_PARAM_LARGE_WINDOW:1,BROTLI_DECODER_NO_ERROR:0,BROTLI_DECODER_SUCCESS:1,BROTLI_DECODER_NEEDS_MORE_INPUT:2,BROTLI_DECODER_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE:-1,BROTLI_DECODER_ERROR_FORMAT_RESERVED:-2,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE:-3,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET:-4,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME:-5,BROTLI_DECODER_ERROR_FORMAT_CL_SPACE:-6,BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE:-7,BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT:-8,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1:-9,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2:-10,BROTLI_DECODER_ERROR_FORMAT_TRANSFORM:-11,BROTLI_DECODER_ERROR_FORMAT_DICTIONARY:-12,BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS:-13,BROTLI_DECODER_ERROR_FORMAT_PADDING_1:-14,BROTLI_DECODER_ERROR_FORMAT_PADDING_2:-15,BROTLI_DECODER_ERROR_FORMAT_DISTANCE:-16,BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET:-19,BROTLI_DECODER_ERROR_INVALID_ARGUMENTS:-20,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES:-21,BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS:-22,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP:-25,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1:-26,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2:-27,BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES:-30,BROTLI_DECODER_ERROR_UNREACHABLE:-31},y))}));var w=d((e=>{"use strict";var f=e&&e.__createBinding||(Object.create?function(e,f,p,m){m===void 0&&(m=p);var y=Object.getOwnPropertyDescriptor(f,p);(!y||("get"in y?!f.__esModule:y.writable||y.configurable))&&(y={enumerable:!0,get:function(){return f[p]}}),Object.defineProperty(e,m,y)}:function(e,f,p,m){m===void 0&&(m=p),e[m]=f[p]}),y=e&&e.__setModuleDefault||(Object.create?function(e,f){Object.defineProperty(e,"default",{enumerable:!0,value:f})}:function(e,f){e.default=f}),b=e&&e.__importStar||function(){var s=function(e){return s=Object.getOwnPropertyNames||function(e){var f=[];for(var p in e)Object.prototype.hasOwnProperty.call(e,p)&&(f[f.length]=p);return f},s(e)};return function(e){if(e&&e.__esModule)return e;var p={};if(e!=null)for(var m=s(e),b=0;be,D=T?.writable===!0||T?.set!==void 0?e=>{g.Buffer.concat=e?ea:P}:e=>{},M=Symbol("_superWrite"),x=class extends Error{code;errno;constructor(e,f){super("zlib: "+e.message,{cause:e}),this.code=e.code,this.errno=e.errno,this.code||(this.code="ZLIB_ERROR"),this.message="zlib: "+e.message,Error.captureStackTrace(this,f??this.constructor)}get name(){return"ZlibError"}};e.ZlibError=x;var L=Symbol("flushFlag"),A=class extends S.Minipass{#e=!1;#t=!1;#i;#r;#s;#n;#o;get sawError(){return this.#e}get handle(){return this.#n}get flushFlag(){return this.#i}constructor(e,f){if(!e||typeof e!="object")throw new TypeError("invalid options for ZlibBase constructor");if(super(e),this.#i=e.flush??0,this.#r=e.finishFlush??0,this.#s=e.fullFlushFlag??0,typeof O[f]!="function")throw new TypeError("Compression method not supported: "+f);try{this.#n=new O[f](e)}catch(e){throw new x(e,this.constructor)}this.#o=e=>{this.#e||(this.#e=!0,this.close(),this.emit("error",e))},this.#n?.on("error",(e=>this.#o(new x(e)))),this.once("end",(()=>this.close))}close(){this.#n&&(this.#n.close(),this.#n=void 0,this.emit("close"))}reset(){if(!this.#e)return(0,w.default)(this.#n,"zlib binding closed"),this.#n.reset?.()}flush(e){this.ended||(typeof e!="number"&&(e=this.#s),this.write(Object.assign(g.Buffer.alloc(0),{[L]:e})))}end(e,f,p){return typeof e=="function"&&(p=e,f=void 0,e=void 0),typeof f=="function"&&(p=f,f=void 0),e&&(f?this.write(e,f):this.write(e)),this.flush(this.#r),this.#t=!0,super.end(p)}get ended(){return this.#t}[M](e){return super.write(e)}write(e,f,p){if(typeof f=="function"&&(p=f,f="utf8"),typeof e=="string"&&(e=g.Buffer.from(e,f)),this.#e)return;(0,w.default)(this.#n,"zlib binding closed");let m=this.#n._handle,y=m.close;m.close=()=>{};let b=this.#n.close;this.#n.close=()=>{},D(!0);let v;try{let f=typeof e[L]=="number"?e[L]:this.#i;v=this.#n._processChunk(e,f),D(!1)}catch(e){D(!1),this.#o(new x(e,this.write))}finally{this.#n&&(this.#n._handle=m,m.close=y,this.#n.close=b,this.#n.removeAllListeners("error"))}this.#n&&this.#n.on("error",(e=>this.#o(new x(e,this.write))));let _;if(v)if(Array.isArray(v)&&v.length>0){let e=v[0];_=this[M](g.Buffer.from(e));for(let e=1;e{typeof e=="function"&&(f=e,e=this.flushFlag),this.flush(e),f?.()};try{this.handle.params(e,f)}finally{this.handle.flush=p}this.handle&&(this.#e=e,this.#t=f)}}}};e.Zlib=N;var I=class extends N{constructor(e){super(e,"Deflate")}};e.Deflate=I;var F=class extends N{constructor(e){super(e,"Inflate")}};e.Inflate=F;var B=class extends N{#e;constructor(e){super(e,"Gzip"),this.#e=e&&!!e.portable}[M](e){return this.#e?(this.#e=!1,e[9]=255,super[M](e)):super[M](e)}};e.Gzip=B;var z=class extends N{constructor(e){super(e,"Gunzip")}};e.Gunzip=z;var C=class extends N{constructor(e){super(e,"DeflateRaw")}};e.DeflateRaw=C;var j=class extends N{constructor(e){super(e,"InflateRaw")}};e.InflateRaw=j;var U=class extends N{constructor(e){super(e,"Unzip")}};e.Unzip=U;var W=class extends A{constructor(e,f){e=e||{},e.flush=e.flush||R.constants.BROTLI_OPERATION_PROCESS,e.finishFlush=e.finishFlush||R.constants.BROTLI_OPERATION_FINISH,e.fullFlushFlag=R.constants.BROTLI_OPERATION_FLUSH,super(e,f)}},Z=class extends W{constructor(e){super(e,"BrotliCompress")}};e.BrotliCompress=Z;var H=class extends W{constructor(e){super(e,"BrotliDecompress")}};e.BrotliDecompress=H;var G=class extends A{constructor(e,f){e=e||{},e.flush=e.flush||R.constants.ZSTD_e_continue,e.finishFlush=e.finishFlush||R.constants.ZSTD_e_end,e.fullFlushFlag=R.constants.ZSTD_e_flush,super(e,f)}},Y=class extends G{constructor(e){super(e,"ZstdCompress")}};e.ZstdCompress=Y;var $=class extends G{constructor(e){super(e,"ZstdDecompress")}};e.ZstdDecompress=$}));var g=d((e=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.parse=e.encode=void 0;var ta=(e,f)=>{if(Number.isSafeInteger(e))e<0?sa(e,f):ia(e,f);else throw Error("cannot encode number outside of javascript safe integer range");return f};e.encode=ta;var ia=(e,f)=>{f[0]=128;for(var p=f.length;p>1;p--)f[p-1]=e&255,e=Math.floor(e/256)},sa=(e,f)=>{f[0]=255;var p=!1;e=e*-1;for(var m=f.length;m>1;m--){var y=e&255;e=Math.floor(e/256),p?f[m-1]=Hr(y):y===0?f[m-1]=0:(p=!0,f[m-1]=Zr(y))}},ra=e=>{let f=e[0],p=f===128?oa(e.subarray(1,e.length)):f===255?na(e):null;if(p===null)throw Error("invalid base256 encoding");if(!Number.isSafeInteger(p))throw Error("parsed number outside of javascript safe integer range");return p};e.parse=ra;var na=e=>{for(var f=e.length,p=0,m=!1,y=f-1;y>-1;y--){var b=Number(e[y]),v;m?v=Hr(b):b===0?v=b:(m=!0,v=Zr(b)),v!==0&&(p-=v*Math.pow(256,f-y-1))}return p},oa=e=>{for(var f=e.length,p=0,m=f-1;m>-1;m--){var y=Number(e[m]);y!==0&&(p+=y*Math.pow(256,f-m-1))}return p},Hr=e=>(255^e)&255,Zr=e=>(255^e)+1&255}));var S=d((e=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.code=e.name=e.isName=e.isCode=void 0;var aa=f=>e.name.has(f);e.isCode=aa;var ha=f=>e.code.has(f);e.isName=ha;e.name=new Map([["0","File"],["","OldFile"],["1","Link"],["2","SymbolicLink"],["3","CharacterDevice"],["4","BlockDevice"],["5","Directory"],["6","FIFO"],["7","ContiguousFile"],["g","GlobalExtendedHeader"],["x","ExtendedHeader"],["A","SolarisACL"],["D","GNUDumpDir"],["I","Inode"],["K","NextFileHasLongLinkpath"],["L","NextFileHasLongPath"],["M","ContinuationFile"],["N","OldGnuLongPath"],["S","SparseFile"],["V","TapeVolumeHeader"],["X","OldExtendedHeader"]]);e.code=new Map(Array.from(e.name).map((e=>[e[1],e[0]])))}));var O=d((e=>{"use strict";var f=e&&e.__createBinding||(Object.create?function(e,f,p,m){m===void 0&&(m=p);var y=Object.getOwnPropertyDescriptor(f,p);(!y||("get"in y?!f.__esModule:y.writable||y.configurable))&&(y={enumerable:!0,get:function(){return f[p]}}),Object.defineProperty(e,m,y)}:function(e,f,p,m){m===void 0&&(m=p),e[m]=f[p]}),m=e&&e.__setModuleDefault||(Object.create?function(e,f){Object.defineProperty(e,"default",{enumerable:!0,value:f})}:function(e,f){e.default=f}),y=e&&e.__importStar||function(){var s=function(e){return s=Object.getOwnPropertyNames||function(e){var f=[];for(var p in e)Object.prototype.hasOwnProperty.call(e,p)&&(f[f.length]=p);return f},s(e)};return function(e){if(e&&e.__esModule)return e;var p={};if(e!=null)for(var y=s(e),b=0;b=f+512))throw new Error("need 512 bytes for header");this.path=p?.path??Ce(e,f,100),this.mode=p?.mode??m?.mode??be(e,f+100,8),this.uid=p?.uid??m?.uid??be(e,f+108,8),this.gid=p?.gid??m?.gid??be(e,f+116,8),this.size=p?.size??m?.size??be(e,f+124,12),this.mtime=p?.mtime??m?.mtime??Ds(e,f+136,12),this.cksum=be(e,f+148,12),m&&this.#t(m,!0),p&&this.#t(p);let y=Ce(e,f+156,1);if(_.isCode(y)&&(this.#e=y||"0"),this.#e==="0"&&this.path.slice(-1)==="/"&&(this.#e="5"),this.#e==="5"&&(this.size=0),this.linkpath=Ce(e,f+157,100),e.subarray(f+257,f+265).toString()==="ustar\x0000")if(this.uname=p?.uname??m?.uname??Ce(e,f+265,32),this.gname=p?.gname??m?.gname??Ce(e,f+297,32),this.devmaj=p?.devmaj??m?.devmaj??be(e,f+329,8)??0,this.devmin=p?.devmin??m?.devmin??be(e,f+337,8)??0,e[f+475]!==0){let p=Ce(e,f+345,155);this.path=p+"/"+this.path}else{let y=Ce(e,f+345,130);y&&(this.path=y+"/"+this.path),this.atime=p?.atime??m?.atime??Ds(e,f+476,12),this.ctime=p?.ctime??m?.ctime??Ds(e,f+488,12)}let b=256;for(let p=f;p!(p==null||e==="path"&&f||e==="linkpath"&&f||e==="global")))))}encode(e,f=0){if(e||(e=this.block=Buffer.alloc(512)),this.#e==="Unsupported"&&(this.#e="0"),!(e.length>=f+512))throw new Error("need 512 bytes for header");let p=this.ctime||this.atime?130:155,m=ca(this.path||"",p),y=m[0],b=m[1];this.needPax=!!m[2],this.needPax=Fe(e,f,100,y)||this.needPax,this.needPax=Se(e,f+100,8,this.mode)||this.needPax,this.needPax=Se(e,f+108,8,this.uid)||this.needPax,this.needPax=Se(e,f+116,8,this.gid)||this.needPax,this.needPax=Se(e,f+124,12,this.size)||this.needPax,this.needPax=Ps(e,f+136,12,this.mtime)||this.needPax,e[f+156]=this.#e.charCodeAt(0),this.needPax=Fe(e,f+157,100,this.linkpath)||this.needPax,e.write("ustar\x0000",f+257,8),this.needPax=Fe(e,f+265,32,this.uname)||this.needPax,this.needPax=Fe(e,f+297,32,this.gname)||this.needPax,this.needPax=Se(e,f+329,8,this.devmaj)||this.needPax,this.needPax=Se(e,f+337,8,this.devmin)||this.needPax,this.needPax=Fe(e,f+345,p,b)||this.needPax,e[f+475]!==0?this.needPax=Fe(e,f+345,155,b)||this.needPax:(this.needPax=Fe(e,f+345,130,b)||this.needPax,this.needPax=Ps(e,f+476,12,this.atime)||this.needPax,this.needPax=Ps(e,f+488,12,this.ctime)||this.needPax);let v=256;for(let p=f;p{let p=e,m="",y,v=b.posix.parse(e).root||".";if(Buffer.byteLength(p)<100)y=[p,m,!1];else{m=b.posix.dirname(p),p=b.posix.basename(p);do{Buffer.byteLength(p)<=100&&Buffer.byteLength(m)<=f?y=[p,m,!1]:Buffer.byteLength(p)>100&&Buffer.byteLength(m)<=f?y=[p.slice(0,99),m,!0]:(p=b.posix.join(b.posix.basename(m),p),m=b.posix.dirname(m))}while(m!==v&&y===void 0);y||(y=[e.slice(0,99),"",!0])}return y},Ce=(e,f,p)=>e.subarray(f,f+p).toString("utf8").replace(/\0.*/,""),Ds=(e,f,p)=>fa(be(e,f,p)),fa=e=>e===void 0?void 0:new Date(e*1e3),be=(e,f,p)=>Number(e[f])&128?v.parse(e.subarray(f,f+p)):ma(e,f,p),da=e=>isNaN(e)?void 0:e,ma=(e,f,p)=>da(parseInt(e.subarray(f,f+p).toString("utf8").replace(/\0.*$/,"").trim(),8)),O={12:8589934591,8:2097151},Se=(e,f,p,m)=>m===void 0?!1:m>O[p]||m<0?(v.encode(m,e.subarray(f,f+p)),!0):(_a(e,f,p,m),!1),_a=(e,f,p,m)=>e.write(wa(m,p),f,p,"ascii"),wa=(e,f)=>ya(Math.floor(e).toString(8),f),ya=(e,f)=>(e.length===f-1?e:new Array(f-e.length-1).join("0")+e+" ")+"\0",Ps=(e,f,p,m)=>m===void 0?!1:Se(e,f,p,m.getTime()/1e3),R=new Array(156).join("\0"),Fe=(e,f,p,m)=>m===void 0?!1:(e.write(m+R,f,p,"utf8"),m.length!==Buffer.byteLength(m)||m.length>p)}));var R=d((e=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.Pax=void 0;var f=p(411),m=O(),y=class s{atime;mtime;ctime;charset;comment;gid;uid;gname;uname;linkpath;dev;ino;nlink;path;size;mode;global;constructor(e,f=!1){this.atime=e.atime,this.charset=e.charset,this.comment=e.comment,this.ctime=e.ctime,this.dev=e.dev,this.gid=e.gid,this.global=f,this.gname=e.gname,this.ino=e.ino,this.linkpath=e.linkpath,this.mtime=e.mtime,this.nlink=e.nlink,this.path=e.path,this.size=e.size,this.uid=e.uid,this.uname=e.uname}encode(){let e=this.encodeBody();if(e==="")return Buffer.allocUnsafe(0);let p=Buffer.byteLength(e),y=512*Math.ceil(1+p/512),b=Buffer.allocUnsafe(y);for(let e=0;e<512;e++)b[e]=0;new m.Header({path:("PaxHeader/"+(0,f.basename)(this.path??"")).slice(0,99),mode:this.mode||420,uid:this.uid,gid:this.gid,size:p,mtime:this.mtime,type:this.global?"GlobalExtendedHeader":"ExtendedHeader",linkpath:"",uname:this.uname||"",gname:this.gname||"",devmaj:0,devmin:0,atime:this.atime,ctime:this.ctime}).encode(b),b.write(e,512,p,"utf8");for(let e=p+512;e=Math.pow(10,b)&&(b+=1),b+y+m}static parse(e,f,p=!1){return new s(ga(Ra(e),f),p)}};e.Pax=y;var ga=(e,f)=>f?Object.assign({},f,e):e,Ra=e=>e.replace(/\n$/,"").split(`\n`).reduce(Oa,Object.create(null)),Oa=(e,f)=>{let p=parseInt(f,10);if(p!==Buffer.byteLength(f)+1)return e;f=f.slice((p+" ").length);let m=f.split("="),y=m.shift();if(!y)return e;let b=y.replace(/^SCHILY\.(dev|ino|nlink)/,"$1"),v=m.join("=");return e[b]=/^([A-Z]+\.)?([mac]|birth|creation)time$/.test(b)?new Date(Number(v)*1e3):/^[0-9]+$/.test(v)?+v:v,e}}));var k=d((e=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.normalizeWindowsPath=void 0;var f=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform;e.normalizeWindowsPath=f!=="win32"?e=>e:e=>e&&e.replace(/\\/g,"/")}));var P=d((e=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.ReadEntry=void 0;var f=m(),p=k(),y=class extends f.Minipass{extended;globalExtended;header;startBlockSize;blockRemain;remain;type;meta=!1;ignore=!1;path;mode;uid;gid;uname;gname;size=0;mtime;atime;ctime;linkpath;dev;ino;nlink;invalid=!1;absolute;unsupported=!1;constructor(e,f,m){switch(super({}),this.pause(),this.extended=f,this.globalExtended=m,this.header=e,this.remain=e.size??0,this.startBlockSize=512*Math.ceil(this.remain/512),this.blockRemain=this.startBlockSize,this.type=e.type,this.type){case"File":case"OldFile":case"Link":case"SymbolicLink":case"CharacterDevice":case"BlockDevice":case"Directory":case"FIFO":case"ContiguousFile":case"GNUDumpDir":break;case"NextFileHasLongLinkpath":case"NextFileHasLongPath":case"OldGnuLongPath":case"GlobalExtendedHeader":case"ExtendedHeader":case"OldExtendedHeader":this.meta=!0;break;default:this.ignore=!0}if(!e.path)throw new Error("no path provided for tar.ReadEntry");this.path=(0,p.normalizeWindowsPath)(e.path),this.mode=e.mode,this.mode&&(this.mode=this.mode&4095),this.uid=e.uid,this.gid=e.gid,this.uname=e.uname,this.gname=e.gname,this.size=this.remain,this.mtime=e.mtime,this.atime=e.atime,this.ctime=e.ctime,this.linkpath=e.linkpath?(0,p.normalizeWindowsPath)(e.linkpath):void 0,this.uname=e.uname,this.gname=e.gname,f&&this.#e(f),m&&this.#e(m,!0)}write(e){let f=e.length;if(f>this.blockRemain)throw new Error("writing more to entry than is appropriate");let p=this.remain,m=this.blockRemain;return this.remain=Math.max(0,p-f),this.blockRemain=Math.max(0,m-f),this.ignore?!0:p>=f?super.write(e):super.write(e.subarray(0,p))}#e(e,f=!1){e.path&&(e.path=(0,p.normalizeWindowsPath)(e.path)),e.linkpath&&(e.linkpath=(0,p.normalizeWindowsPath)(e.linkpath)),Object.assign(this,Object.fromEntries(Object.entries(e).filter((([e,p])=>!(p==null||e==="path"&&f)))))}};e.ReadEntry=y}));var T=d((e=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.warnMethod=void 0;var Da=(e,f,p,m={})=>{e.file&&(m.file=e.file),e.cwd&&(m.cwd=e.cwd),m.code=p instanceof Error&&p.code||f,m.tarCode=f,!e.strict&&m.recoverable!==!1?(p instanceof Error&&(m=Object.assign(p,m),p=p.message),e.emit("warn",f,p,m)):p instanceof Error?e.emit("error",Object.assign(p,m)):e.emit("error",Object.assign(new Error(`${f}: ${p}`),m))};e.warnMethod=Da}));var D=d((e=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.Parser=void 0;var f=p(361),m=w(),y=O(),b=R(),v=P(),_=T(),g=1024*1024,S=Buffer.from([31,139]),k=Buffer.from([40,181,47,253]),D=Math.max(S.length,k.length),M=Symbol("state"),x=Symbol("writeEntry"),L=Symbol("readEntry"),A=Symbol("nextEntry"),N=Symbol("processEntry"),I=Symbol("extendedHeader"),F=Symbol("globalExtendedHeader"),B=Symbol("meta"),z=Symbol("emitMeta"),C=Symbol("buffer"),j=Symbol("queue"),U=Symbol("ended"),W=Symbol("emittedEnd"),Z=Symbol("emit"),H=Symbol("unzip"),G=Symbol("consumeChunk"),Y=Symbol("consumeChunkSub"),$=Symbol("consumeBody"),q=Symbol("consumeMeta"),V=Symbol("consumeHeader"),K=Symbol("consuming"),X=Symbol("bufferConcat"),Q=Symbol("maybeEnd"),J=Symbol("writing"),ee=Symbol("aborted"),te=Symbol("onDone"),ie=Symbol("sawValidEntry"),re=Symbol("sawNullBlock"),se=Symbol("sawEOF"),ne=Symbol("closeStream"),Ia=()=>!0,oe=class extends f.EventEmitter{file;strict;maxMetaEntrySize;filter;brotli;zstd;writable=!0;readable=!1;[j]=[];[C];[L];[x];[M]="begin";[B]="";[I];[F];[U]=!1;[H];[ee]=!1;[ie];[re]=!1;[se]=!1;[J]=!1;[K]=!1;[W]=!1;constructor(e={}){super(),this.file=e.file||"",this.on(te,(()=>{(this[M]==="begin"||this[ie]===!1)&&this.warn("TAR_BAD_ARCHIVE","Unrecognized archive format")})),e.ondone?this.on(te,e.ondone):this.on(te,(()=>{this.emit("prefinish"),this.emit("finish"),this.emit("end")})),this.strict=!!e.strict,this.maxMetaEntrySize=e.maxMetaEntrySize||g,this.filter=typeof e.filter=="function"?e.filter:Ia;let f=e.file&&(e.file.endsWith(".tar.br")||e.file.endsWith(".tbr"));this.brotli=!(e.gzip||e.zstd)&&e.brotli!==void 0?e.brotli:f?void 0:!1;let p=e.file&&(e.file.endsWith(".tar.zst")||e.file.endsWith(".tzst"));this.zstd=!(e.gzip||e.brotli)&&e.zstd!==void 0?e.zstd:p?!0:void 0,this.on("end",(()=>this[ne]())),typeof e.onwarn=="function"&&this.on("warn",e.onwarn),typeof e.onReadEntry=="function"&&this.on("entry",e.onReadEntry)}warn(e,f,p={}){(0,_.warnMethod)(this,e,f,p)}[V](e,f){this[ie]===void 0&&(this[ie]=!1);let p;try{p=new y.Header(e,f,this[I],this[F])}catch(e){return this.warn("TAR_ENTRY_INVALID",e)}if(p.nullBlock)this[re]?(this[se]=!0,this[M]==="begin"&&(this[M]="header"),this[Z]("eof")):(this[re]=!0,this[Z]("nullBlock"));else if(this[re]=!1,!p.cksumValid)this.warn("TAR_ENTRY_INVALID","checksum failure",{header:p});else if(!p.path)this.warn("TAR_ENTRY_INVALID","path is required",{header:p});else{let e=p.type;if(/^(Symbolic)?Link$/.test(e)&&!p.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath required",{header:p});else if(!/^(Symbolic)?Link$/.test(e)&&!/^(Global)?ExtendedHeader$/.test(e)&&p.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath forbidden",{header:p});else{let e=this[x]=new v.ReadEntry(p,this[I],this[F]);if(!this[ie])if(e.remain){let o=()=>{e.invalid||(this[ie]=!0)};e.on("end",o)}else this[ie]=!0;e.meta?e.size>this.maxMetaEntrySize?(e.ignore=!0,this[Z]("ignoredEntry",e),this[M]="ignore",e.resume()):e.size>0&&(this[B]="",e.on("data",(e=>this[B]+=e)),this[M]="meta"):(this[I]=void 0,e.ignore=e.ignore||!this.filter(e.path,e),e.ignore?(this[Z]("ignoredEntry",e),this[M]=e.remain?"ignore":"header",e.resume()):(e.remain?this[M]="body":(this[M]="header",e.end()),this[L]?this[j].push(e):(this[j].push(e),this[A]())))}}}[ne](){queueMicrotask((()=>this.emit("close")))}[N](e){let f=!0;if(!e)this[L]=void 0,f=!1;else if(Array.isArray(e)){let[f,...p]=e;this.emit(f,...p)}else this[L]=e,this.emit("entry",e),e.emittedEnd||(e.on("end",(()=>this[A]())),f=!1);return f}[A](){do{}while(this[N](this[j].shift()));if(!this[j].length){let e=this[L];!e||e.flowing||e.size===e.remain?this[J]||this.emit("drain"):e.once("drain",(()=>this.emit("drain")))}}[$](e,f){let p=this[x];if(!p)throw new Error("attempt to consume body without entry??");let m=p.blockRemain??0,y=m>=e.length&&f===0?e:e.subarray(f,f+m);return p.write(y),p.blockRemain||(this[M]="header",this[x]=void 0,p.end()),y.length}[q](e,f){let p=this[x],m=this[$](e,f);return!this[x]&&p&&this[z](p),m}[Z](e,f,p){!this[j].length&&!this[L]?this.emit(e,f,p):this[j].push([e,f,p])}[z](e){switch(this[Z]("meta",this[B]),e.type){case"ExtendedHeader":case"OldExtendedHeader":this[I]=b.Pax.parse(this[B],this[I],!1);break;case"GlobalExtendedHeader":this[F]=b.Pax.parse(this[B],this[F],!0);break;case"NextFileHasLongPath":case"OldGnuLongPath":{let e=this[I]??Object.create(null);this[I]=e,e.path=this[B].replace(/\0.*/,"");break}case"NextFileHasLongLinkpath":{let e=this[I]||Object.create(null);this[I]=e,e.linkpath=this[B].replace(/\0.*/,"");break}default:throw new Error("unknown meta: "+e.type)}}abort(e){this[ee]=!0,this.emit("abort",e),this.warn("TAR_ABORT",e,{recoverable:!1})}write(e,f,p){if(typeof f=="function"&&(p=f,f=void 0),typeof e=="string"&&(e=Buffer.from(e,typeof f=="string"?f:"utf8")),this[ee])return p?.(),!1;if((this[H]===void 0||this.brotli===void 0&&this[H]===!1)&&e){if(this[C]&&(e=Buffer.concat([this[C],e]),this[C]=void 0),e.lengththis[G](e))),this[H].on("error",(e=>this.abort(e))),this[H].on("end",(()=>{this[U]=!0,this[G]()})),this[J]=!0;let b=!!this[H][y?"end":"write"](e);return this[J]=!1,p?.(),b}}this[J]=!0,this[H]?this[H].write(e):this[G](e),this[J]=!1;let b=this[j].length?!1:this[L]?this[L].flowing:!0;return!b&&!this[j].length&&this[L]?.once("drain",(()=>this.emit("drain"))),p?.(),b}[X](e){e&&!this[ee]&&(this[C]=this[C]?Buffer.concat([this[C],e]):e)}[Q](){if(this[U]&&!this[W]&&!this[ee]&&!this[K]){this[W]=!0;let e=this[x];if(e&&e.blockRemain){let f=this[C]?this[C].length:0;this.warn("TAR_BAD_ARCHIVE",`Truncated input (needed ${e.blockRemain} more bytes, only ${f} available)`,{entry:e}),this[C]&&e.write(this[C]),e.end()}this[Z](te)}}[G](e){if(this[K]&&e)this[X](e);else if(!e&&!this[C])this[Q]();else if(e){if(this[K]=!0,this[C]){this[X](e);let f=this[C];this[C]=void 0,this[Y](f)}else this[Y](e);for(;this[C]&&this[C]?.length>=512&&!this[ee]&&!this[se];){let e=this[C];this[C]=void 0,this[Y](e)}this[K]=!1}(!this[C]||this[U])&&this[Q]()}[Y](e){let f=0,p=e.length;for(;f+512<=p&&!this[ee]&&!this[se];)switch(this[M]){case"begin":case"header":this[V](e,f),f+=512;break;case"ignore":case"body":f+=this[$](e,f);break;case"meta":f+=this[q](e,f);break;default:throw new Error("invalid state: "+this[M])}f{"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.stripTrailingSlashes=void 0;var Ca=e=>{let f=e.length-1,p=-1;for(;f>-1&&e.charAt(f)==="/";)p=f,f--;return p===-1?e:e.slice(0,p)};e.stripTrailingSlashes=Ca}));var x=d((e=>{"use strict";var f=e&&e.__createBinding||(Object.create?function(e,f,p,m){m===void 0&&(m=p);var y=Object.getOwnPropertyDescriptor(f,p);(!y||("get"in y?!f.__esModule:y.writable||y.configurable))&&(y={enumerable:!0,get:function(){return f[p]}}),Object.defineProperty(e,m,y)}:function(e,f,p,m){m===void 0&&(m=p),e[m]=f[p]}),m=e&&e.__setModuleDefault||(Object.create?function(e,f){Object.defineProperty(e,"default",{enumerable:!0,value:f})}:function(e,f){e.default=f}),b=e&&e.__importStar||function(){var s=function(e){return s=Object.getOwnPropertyNames||function(e){var f=[];for(var p in e)Object.prototype.hasOwnProperty.call(e,p)&&(f[f.length]=p);return f},s(e)};return function(e){if(e&&e.__esModule)return e;var p={};if(e!=null)for(var y=s(e),b=0;b{let f=e.onReadEntry;e.onReadEntry=f?e=>{f(e),e.resume()}:e=>e.resume()},qa=(e,f)=>{let p=new Map(f.map((e=>[(0,k.stripTrailingSlashes)(e),!0]))),m=e.filter,r=(e,f="")=>{let m=f||(0,S.parse)(e).root||".",y;if(e===m)y=!1;else{let f=p.get(e);f!==void 0?y=f:y=r((0,S.dirname)(e),m)}return p.set(e,y),y};e.filter=m?(e,f)=>m(e,f)&&r((0,k.stripTrailingSlashes)(e)):e=>r((0,k.stripTrailingSlashes)(e))};e.filesFilter=qa;var Wa=e=>{let f=new R.Parser(e),p=e.file,m;try{m=g.default.openSync(p,"r");let y=g.default.fstatSync(m),b=e.maxReadSize||16*1024*1024;if(y.size{let p=new R.Parser(e),m=e.maxReadSize||16*1024*1024,y=e.file;return new Promise(((e,f)=>{p.on("error",f),p.on("end",e),g.default.stat(y,((e,b)=>{if(e)f(e);else{let e=new w.ReadStream(y,{readSize:m,size:b.size});e.on("error",f),e.pipe(p)}}))}))};e.list=(0,O.makeCommand)(Wa,Ha,(e=>new R.Parser(e)),(e=>new R.Parser(e)),((f,p)=>{p?.length&&(0,e.filesFilter)(f,p),f.noResume||Ua(f)}))}));var L=d((e=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.modeFix=void 0;var Za=(e,f,p)=>(e&=4095,p&&(e=(e|384)&-19),f&&(e&256&&(e|=64),e&32&&(e|=8),e&4&&(e|=1)),e);e.modeFix=Za}));var A=d((e=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.stripAbsolutePath=void 0;var f=p(411),{isAbsolute:m,parse:y}=f.win32,Ka=e=>{let f="",p=y(e);for(;m(e)||p.root;){let m=e.charAt(0)==="/"&&e.slice(0,4)!=="//?/"?"/":p.root;e=e.slice(m.length),f+=m,p=y(e)}return[f,e]};e.stripAbsolutePath=Ka}));var N=d((e=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.decode=e.encode=void 0;var f=["|","<",">","?",":"],p=f.map((e=>String.fromCharCode(61440+e.charCodeAt(0)))),m=new Map(f.map(((e,f)=>[e,p[f]]))),y=new Map(p.map(((e,p)=>[e,f[p]]))),Xa=e=>f.reduce(((e,f)=>e.split(f).join(m.get(f))),e);e.encode=Xa;var Qa=e=>p.reduce(((e,f)=>e.split(f).join(y.get(f))),e);e.decode=Qa}));var I=d((e=>{"use strict";var f=e&&e.__createBinding||(Object.create?function(e,f,p,m){m===void 0&&(m=p);var y=Object.getOwnPropertyDescriptor(f,p);(!y||("get"in y?!f.__esModule:y.writable||y.configurable))&&(y={enumerable:!0,get:function(){return f[p]}}),Object.defineProperty(e,m,y)}:function(e,f,p,m){m===void 0&&(m=p),e[m]=f[p]}),y=e&&e.__setModuleDefault||(Object.create?function(e,f){Object.defineProperty(e,"default",{enumerable:!0,value:f})}:function(e,f){e.default=f}),v=e&&e.__importStar||function(){var s=function(e){return s=Object.getOwnPropertyNames||function(e){var f=[];for(var p in e)Object.prototype.hasOwnProperty.call(e,p)&&(f[f.length]=p);return f},s(e)};return function(e){if(e&&e.__esModule)return e;var p={};if(e!=null)for(var m=s(e),b=0;bf?(e=(0,x.normalizeWindowsPath)(e).replace(/^\.(\/|$)/,""),(0,z.stripTrailingSlashes)(f)+"/"+e):(0,x.normalizeWindowsPath)(e),U=16*1024*1024,W=Symbol("process"),Z=Symbol("file"),H=Symbol("directory"),G=Symbol("symlink"),Y=Symbol("hardlink"),$=Symbol("header"),q=Symbol("read"),V=Symbol("lstat"),K=Symbol("onlstat"),X=Symbol("onread"),Q=Symbol("onreadlink"),J=Symbol("openfile"),ee=Symbol("onopenfile"),te=Symbol("close"),ie=Symbol("mode"),re=Symbol("awaitDrain"),se=Symbol("ondrain"),ne=Symbol("prefix"),oe=class extends g.Minipass{path;portable;myuid=process.getuid&&process.getuid()||0;myuser=process.env.USER||"";maxReadSize;linkCache;statCache;preservePaths;cwd;strict;mtime;noPax;noMtime;prefix;fd;blockLen=0;blockRemain=0;buf;pos=0;remain=0;length=0;offset=0;win32;absolute;header;type;linkpath;stat;onWriteEntry;#e=!1;constructor(e,f={}){let p=(0,I.dealias)(f);super(),this.path=(0,x.normalizeWindowsPath)(e),this.portable=!!p.portable,this.maxReadSize=p.maxReadSize||U,this.linkCache=p.linkCache||new Map,this.statCache=p.statCache||new Map,this.preservePaths=!!p.preservePaths,this.cwd=(0,x.normalizeWindowsPath)(p.cwd||process.cwd()),this.strict=!!p.strict,this.noPax=!!p.noPax,this.noMtime=!!p.noMtime,this.mtime=p.mtime,this.prefix=p.prefix?(0,x.normalizeWindowsPath)(p.prefix):void 0,this.onWriteEntry=p.onWriteEntry,typeof p.onwarn=="function"&&this.on("warn",p.onwarn);let m=!1;if(!this.preservePaths){let[e,f]=(0,B.stripAbsolutePath)(this.path);e&&typeof f=="string"&&(this.path=f,m=e)}this.win32=!!p.win32||process.platform==="win32",this.win32&&(this.path=j.decode(this.path.replace(/\\/g,"/")),e=e.replace(/\\/g,"/")),this.absolute=(0,x.normalizeWindowsPath)(p.absolute||S.default.resolve(this.cwd,e)),this.path===""&&(this.path="./"),m&&this.warn("TAR_ENTRY_INFO",`stripping ${m} from absolute path`,{entry:this,path:m+this.path});let y=this.statCache.get(this.absolute);y?this[K](y):this[V]()}warn(e,f,p={}){return(0,C.warnMethod)(this,e,f,p)}emit(e,...f){return e==="error"&&(this.#e=!0),super.emit(e,...f)}[V](){w.default.lstat(this.absolute,((e,f)=>{if(e)return this.emit("error",e);this[K](f)}))}[K](e){this.statCache.set(this.absolute,e),this.stat=e,e.isFile()||(e.size=0),this.type=nh(e),this.emit("stat",e),this[W]()}[W](){switch(this.type){case"File":return this[Z]();case"Directory":return this[H]();case"SymbolicLink":return this[G]();default:return this.end()}}[ie](e){return(0,D.modeFix)(e,this.type==="Directory",this.portable)}[ne](e){return En(e,this.prefix)}[$](){if(!this.stat)throw new Error("cannot write header before stat");this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.onWriteEntry?.(this),this.header=new P.Header({path:this[ne](this.path),linkpath:this.type==="Link"&&this.linkpath!==void 0?this[ne](this.linkpath):this.linkpath,mode:this[ie](this.stat.mode),uid:this.portable?void 0:this.stat.uid,gid:this.portable?void 0:this.stat.gid,size:this.stat.size,mtime:this.noMtime?void 0:this.mtime||this.stat.mtime,type:this.type==="Unsupported"?void 0:this.type,uname:this.portable?void 0:this.stat.uid===this.myuid?this.myuser:"",atime:this.portable?void 0:this.stat.atime,ctime:this.portable?void 0:this.stat.ctime}),this.header.encode()&&!this.noPax&&super.write(new F.Pax({atime:this.portable?void 0:this.header.atime,ctime:this.portable?void 0:this.header.ctime,gid:this.portable?void 0:this.header.gid,mtime:this.noMtime?void 0:this.mtime||this.header.mtime,path:this[ne](this.path),linkpath:this.type==="Link"&&this.linkpath!==void 0?this[ne](this.linkpath):this.linkpath,size:this.header.size,uid:this.portable?void 0:this.header.uid,uname:this.portable?void 0:this.header.uname,dev:this.portable?void 0:this.stat.dev,ino:this.portable?void 0:this.stat.ino,nlink:this.portable?void 0:this.stat.nlink}).encode());let e=this.header?.block;if(!e)throw new Error("failed to encode header");super.write(e)}[H](){if(!this.stat)throw new Error("cannot create directory entry without stat");this.path.slice(-1)!=="/"&&(this.path+="/"),this.stat.size=0,this[$](),this.end()}[G](){w.default.readlink(this.absolute,((e,f)=>{if(e)return this.emit("error",e);this[Q](f)}))}[Q](e){this.linkpath=(0,x.normalizeWindowsPath)(e),this[$](),this.end()}[Y](e){if(!this.stat)throw new Error("cannot create link entry without stat");this.type="Link",this.linkpath=(0,x.normalizeWindowsPath)(S.default.relative(this.cwd,e)),this.stat.size=0,this[$](),this.end()}[Z](){if(!this.stat)throw new Error("cannot create file entry without stat");if(this.stat.nlink>1){let e=`${this.stat.dev}:${this.stat.ino}`,f=this.linkCache.get(e);if(f?.indexOf(this.cwd)===0)return this[Y](f);this.linkCache.set(e,this.absolute)}if(this[$](),this.stat.size===0)return this.end();this[J]()}[J](){w.default.open(this.absolute,"r",((e,f)=>{if(e)return this.emit("error",e);this[ee](f)}))}[ee](e){if(this.fd=e,this.#e)return this[te]();if(!this.stat)throw new Error("should stat before calling onopenfile");this.blockLen=512*Math.ceil(this.stat.size/512),this.blockRemain=this.blockLen;let f=Math.min(this.blockLen,this.maxReadSize);this.buf=Buffer.allocUnsafe(f),this.offset=0,this.pos=0,this.remain=this.stat.size,this.length=this.buf.length,this[q]()}[q](){let{fd:e,buf:f,offset:p,length:m,pos:y}=this;if(e===void 0||f===void 0)throw new Error("cannot read file without first opening");w.default.read(e,f,p,m,y,((e,f)=>{if(e)return this[te]((()=>this.emit("error",e)));this[X](f)}))}[te](e=(()=>{})){this.fd!==void 0&&w.default.close(this.fd,e)}[X](e){if(e<=0&&this.remain>0){let e=Object.assign(new Error("encountered unexpected EOF"),{path:this.absolute,syscall:"read",code:"EOF"});return this[te]((()=>this.emit("error",e)))}if(e>this.remain){let e=Object.assign(new Error("did not encounter expected EOF"),{path:this.absolute,syscall:"read",code:"EOF"});return this[te]((()=>this.emit("error",e)))}if(!this.buf)throw new Error("should have created buffer prior to reading");if(e===this.remain)for(let f=e;fthis[se]()))}[re](e){this.once("drain",e)}write(e,f,p){if(typeof f=="function"&&(p=f,f=void 0),typeof e=="string"&&(e=Buffer.from(e,typeof f=="string"?f:"utf8")),this.blockRemaine?this.emit("error",e):this.end()));if(!this.buf)throw new Error("buffer lost somehow in ONDRAIN");this.offset>=this.length&&(this.buf=Buffer.allocUnsafe(Math.min(this.blockRemain,this.buf.length)),this.offset=0),this.length=this.buf.length-this.offset,this[q]()}};e.WriteEntry=oe;var ae=class extends oe{sync=!0;[V](){this[K](w.default.lstatSync(this.absolute))}[G](){this[Q](w.default.readlinkSync(this.absolute))}[J](){this[ee](w.default.openSync(this.absolute,"r"))}[q](){let e=!0;try{let{fd:f,buf:p,offset:m,length:y,pos:b}=this;if(f===void 0||p===void 0)throw new Error("fd and buf must be set in READ method");let v=w.default.readSync(f,p,m,y,b);this[X](v),e=!1}finally{if(e)try{this[te]((()=>{}))}catch{}}}[re](e){e()}[te](e=(()=>{})){this.fd!==void 0&&w.default.closeSync(this.fd),e()}};e.WriteEntrySync=ae;var he=class extends g.Minipass{blockLen=0;blockRemain=0;buf=0;pos=0;remain=0;length=0;preservePaths;portable;strict;noPax;noMtime;readEntry;type;prefix;path;mode;uid;gid;uname;gname;header;mtime;atime;ctime;linkpath;size;onWriteEntry;warn(e,f,p={}){return(0,C.warnMethod)(this,e,f,p)}constructor(e,f={}){let p=(0,I.dealias)(f);super(),this.preservePaths=!!p.preservePaths,this.portable=!!p.portable,this.strict=!!p.strict,this.noPax=!!p.noPax,this.noMtime=!!p.noMtime,this.onWriteEntry=p.onWriteEntry,this.readEntry=e;let{type:m}=e;if(m==="Unsupported")throw new Error("writing entry that should be ignored");this.type=m,this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.prefix=p.prefix,this.path=(0,x.normalizeWindowsPath)(e.path),this.mode=e.mode!==void 0?this[ie](e.mode):void 0,this.uid=this.portable?void 0:e.uid,this.gid=this.portable?void 0:e.gid,this.uname=this.portable?void 0:e.uname,this.gname=this.portable?void 0:e.gname,this.size=e.size,this.mtime=this.noMtime?void 0:p.mtime||e.mtime,this.atime=this.portable?void 0:e.atime,this.ctime=this.portable?void 0:e.ctime,this.linkpath=e.linkpath!==void 0?(0,x.normalizeWindowsPath)(e.linkpath):void 0,typeof p.onwarn=="function"&&this.on("warn",p.onwarn);let y=!1;if(!this.preservePaths){let[e,f]=(0,B.stripAbsolutePath)(this.path);e&&typeof f=="string"&&(this.path=f,y=e)}this.remain=e.size,this.blockRemain=e.startBlockSize,this.onWriteEntry?.(this),this.header=new P.Header({path:this[ne](this.path),linkpath:this.type==="Link"&&this.linkpath!==void 0?this[ne](this.linkpath):this.linkpath,mode:this.mode,uid:this.portable?void 0:this.uid,gid:this.portable?void 0:this.gid,size:this.size,mtime:this.noMtime?void 0:this.mtime,type:this.type,uname:this.portable?void 0:this.uname,atime:this.portable?void 0:this.atime,ctime:this.portable?void 0:this.ctime}),y&&this.warn("TAR_ENTRY_INFO",`stripping ${y} from absolute path`,{entry:this,path:y+this.path}),this.header.encode()&&!this.noPax&&super.write(new F.Pax({atime:this.portable?void 0:this.atime,ctime:this.portable?void 0:this.ctime,gid:this.portable?void 0:this.gid,mtime:this.noMtime?void 0:this.mtime,path:this[ne](this.path),linkpath:this.type==="Link"&&this.linkpath!==void 0?this[ne](this.linkpath):this.linkpath,size:this.size,uid:this.portable?void 0:this.uid,uname:this.portable?void 0:this.uname,dev:this.portable?void 0:this.readEntry.dev,ino:this.portable?void 0:this.readEntry.ino,nlink:this.portable?void 0:this.readEntry.nlink}).encode());let b=this.header?.block;if(!b)throw new Error("failed to encode header");super.write(b),e.pipe(this)}[ne](e){return En(e,this.prefix)}[ie](e){return(0,D.modeFix)(e,this.type==="Directory",this.portable)}write(e,f,p){typeof f=="function"&&(p=f,f=void 0),typeof e=="string"&&(e=Buffer.from(e,typeof f=="string"?f:"utf8"));let m=e.length;if(m>this.blockRemain)throw new Error("writing more to entry than is appropriate");return this.blockRemain-=m,super.write(e,p)}end(e,f,p){return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),typeof e=="function"&&(p=e,f=void 0,e=void 0),typeof f=="function"&&(p=f,f=void 0),typeof e=="string"&&(e=Buffer.from(e,f??"utf8")),p&&this.once("finish",p),e?super.end(e,p):super.end(p),this}};e.WriteEntryTar=he;var nh=e=>e.isFile()?"File":e.isDirectory()?"Directory":e.isSymbolicLink()?"SymbolicLink":"Unsupported"}));var F=d((e=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.Node=e.Yallist=void 0;var f=class s{tail;head;length=0;static create(e=[]){return new s(e)}constructor(e=[]){for(let f of e)this.push(f)}*[Symbol.iterator](){for(let e=this.head;e;e=e.next)yield e.value}removeNode(e){if(e.list!==this)throw new Error("removing node which does not belong to this list");let f=e.next,p=e.prev;return f&&(f.prev=p),p&&(p.next=f),e===this.head&&(this.head=f),e===this.tail&&(this.tail=p),this.length--,e.next=void 0,e.prev=void 0,e.list=void 0,f}unshiftNode(e){if(e===this.head)return;e.list&&e.list.removeNode(e);let f=this.head;e.list=this,e.next=f,f&&(f.prev=e),this.head=e,this.tail||(this.tail=e),this.length++}pushNode(e){if(e===this.tail)return;e.list&&e.list.removeNode(e);let f=this.tail;e.list=this,e.prev=f,f&&(f.next=e),this.tail=e,this.head||(this.head=e),this.length++}push(...e){for(let f=0,p=e.length;f1)p=f;else if(this.head)m=this.head.next,p=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var y=0;m;y++)p=e(p,m.value,y),m=m.next;return p}reduceReverse(e,f){let p,m=this.tail;if(arguments.length>1)p=f;else if(this.tail)m=this.tail.prev,p=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(let f=this.length-1;m;f--)p=e(p,m.value,f),m=m.prev;return p}toArray(){let e=new Array(this.length);for(let f=0,p=this.head;p;f++)e[f]=p.value,p=p.next;return e}toArrayReverse(){let e=new Array(this.length);for(let f=0,p=this.tail;p;f++)e[f]=p.value,p=p.prev;return e}slice(e=0,f=this.length){f<0&&(f+=this.length),e<0&&(e+=this.length);let p=new s;if(fthis.length&&(f=this.length);let m=this.head,y=0;for(y=0;m&&ythis.length&&(f=this.length);let m=this.length,y=this.tail;for(;y&&m>f;m--)y=y.prev;for(;y&&m>e;m--,y=y.prev)p.push(y.value);return p}splice(e,f=0,...p){e>this.length&&(e=this.length-1),e<0&&(e=this.length+e);let m=this.head;for(let f=0;m&&f{"use strict";var f=e&&e.__createBinding||(Object.create?function(e,f,p,m){m===void 0&&(m=p);var y=Object.getOwnPropertyDescriptor(f,p);(!y||("get"in y?!f.__esModule:y.writable||y.configurable))&&(y={enumerable:!0,get:function(){return f[p]}}),Object.defineProperty(e,m,y)}:function(e,f,p,m){m===void 0&&(m=p),e[m]=f[p]}),y=e&&e.__setModuleDefault||(Object.create?function(e,f){Object.defineProperty(e,"default",{enumerable:!0,value:f})}:function(e,f){e.default=f}),b=e&&e.__importStar||function(){var s=function(e){return s=Object.getOwnPropertyNames||function(e){var f=[];for(var p in e)Object.prototype.hasOwnProperty.call(e,p)&&(f[f.length]=p);return f},s(e)};return function(e){if(e&&e.__esModule)return e;var p={};if(e!=null)for(var m=s(e),b=0;b1)throw new TypeError("gzip, brotli, zstd are mutually exclusive");if(e.gzip&&(typeof e.gzip!="object"&&(e.gzip={}),this.portable&&(e.gzip.portable=!0),this.zip=new R.Gzip(e.gzip)),e.brotli&&(typeof e.brotli!="object"&&(e.brotli={}),this.zip=new R.BrotliCompress(e.brotli)),e.zstd&&(typeof e.zstd!="object"&&(e.zstd={}),this.zip=new R.ZstdCompress(e.zstd)),!this.zip)throw new Error("impossible");let f=this.zip;f.on("data",(e=>super.write(e))),f.on("end",(()=>super.end())),f.on("drain",(()=>this[ee]())),this.on("resume",(()=>f.resume()))}else this.on("drain",this[ee]);this.noDirRecurse=!!e.noDirRecurse,this.follow=!!e.follow,this.noMtime=!!e.noMtime,e.mtime&&(this.mtime=e.mtime),this.filter=typeof e.filter=="function"?e.filter:()=>!0,this[B]=new D.Yallist,this[W]=0,this.jobs=Number(e.jobs)||4,this[j]=!1,this[N]=!1}[J](e){return super.write(e)}add(e){return this.write(e),this}end(e,f,p){return typeof e=="function"&&(p=e,e=void 0),typeof f=="function"&&(p=f,f=void 0),e&&this.add(e),this[N]=!0,this[C](),p&&p(),this}write(e){if(this[N])throw new Error("write after end");return e instanceof M.ReadEntry?this[G](e):this[H](e),this.flowing}[G](e){let f=(0,ie.normalizeWindowsPath)(te.default.resolve(this.cwd,e.path));if(!this.filter(e.path,e))e.resume();else{let p=new S(e.path,f);p.entry=new g.WriteEntryTar(e,this[X](p)),p.entry.on("end",(()=>this[Z](p))),this[W]+=1,this[B].push(p)}this[C]()}[H](e){let f=(0,ie.normalizeWindowsPath)(te.default.resolve(this.cwd,e));this[B].push(new S(e,f)),this[C]()}[Y](e){e.pending=!0,this[W]+=1;let f=this.follow?"stat":"lstat";_.default[f](e.absolute,((f,p)=>{e.pending=!1,this[W]-=1,f?this.emit("error",f):this[A](e,p)}))}[A](e,f){this.statCache.set(e.absolute,f),e.stat=f,this.filter(e.path,f)?f.isFile()&&f.nlink>1&&e===this[z]&&!this.linkCache.get(`${f.dev}:${f.ino}`)&&!this.sync&&this[U](e):e.ignore=!0,this[C]()}[$](e){e.pending=!0,this[W]+=1,_.default.readdir(e.absolute,((f,p)=>{if(e.pending=!1,this[W]-=1,f)return this.emit("error",f);this[q](e,p)}))}[q](e,f){this.readdirCache.set(e.absolute,f),e.readdir=f,this[C]()}[C](){if(!this[j]){this[j]=!0;for(let e=this[B].head;e&&this[W]this.warn(e,f,p),noPax:this.noPax,cwd:this.cwd,absolute:e.absolute,preservePaths:this.preservePaths,maxReadSize:this.maxReadSize,strict:this.strict,portable:this.portable,linkCache:this.linkCache,statCache:this.statCache,noMtime:this.noMtime,mtime:this.mtime,prefix:this.prefix,onWriteEntry:this.onWriteEntry}}[K](e){this[W]+=1;try{return new this[Q](e.path,this[X](e)).on("end",(()=>this[Z](e))).on("error",(e=>this.emit("error",e)))}catch(e){this.emit("error",e)}}[ee](){this[z]&&this[z].entry&&this[z].entry.resume()}[V](e){e.piped=!0,e.readdir&&e.readdir.forEach((f=>{let p=e.path,m=p==="./"?"":p.replace(/\/*$/,"/");this[H](m+f)}));let f=e.entry,p=this.zip;if(!f)throw new Error("cannot pipe without source");p?f.on("data",(e=>{p.write(e)||f.pause()})):f.on("data",(e=>{super.write(e)||f.pause()}))}pause(){return this.zip&&this.zip.pause(),super.pause()}warn(e,f,p={}){(0,x.warnMethod)(this,e,f,p)}};e.Pack=re;var se=class extends re{sync=!0;constructor(e){super(e),this[Q]=g.WriteEntrySync}pause(){}resume(){}[Y](e){let f=this.follow?"statSync":"lstatSync";this[A](e,_.default[f](e.absolute))}[$](e){this[q](e,_.default.readdirSync(e.absolute))}[V](e){let f=e.entry,p=this.zip;if(e.readdir&&e.readdir.forEach((f=>{let p=e.path,m=p==="./"?"":p.replace(/\/*$/,"/");this[H](m+f)})),!f)throw new Error("Cannot pipe without source");p?f.on("data",(e=>{p.write(e)})):f.on("data",(e=>{super[J](e)}))}};e.PackSync=se}));var z=d((e=>{"use strict";var f=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0});e.create=void 0;var m=y(),b=f(p(411)),_=x(),w=v(),g=B(),yh=(e,f)=>{let p=new g.PackSync(e),y=new m.WriteStreamSync(e.file,{mode:e.mode||438});p.pipe(y),Mn(p,f)},Eh=(e,f)=>{let p=new g.Pack(e),y=new m.WriteStream(e.file,{mode:e.mode||438});p.pipe(y);let b=new Promise(((e,f)=>{y.on("error",f),y.on("close",e),p.on("error",f)}));return Ln(p,f),b},Mn=(e,f)=>{f.forEach((f=>{f.charAt(0)==="@"?(0,_.list)({file:b.default.resolve(e.cwd,f.slice(1)),sync:!0,noResume:!0,onReadEntry:f=>e.add(f)}):e.add(f)})),e.end()},Ln=async(e,f)=>{for(let p=0;p{e.add(f)}}):e.add(m)}e.end()},bh=(e,f)=>{let p=new g.PackSync(e);return Mn(p,f),p},Sh=(e,f)=>{let p=new g.Pack(e);return Ln(p,f),p};e.create=(0,w.makeCommand)(yh,Eh,bh,Sh,((e,f)=>{if(!f?.length)throw new TypeError("no paths specified to add to archive")}))}));var C=d((e=>{"use strict";var f=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0});e.getWriteFlag=void 0;var m=f(p(147)),y=process.env.__FAKE_PLATFORM__||process.platform,b=y==="win32",{O_CREAT:v,O_TRUNC:_,O_WRONLY:w}=m.default.constants,g=Number(process.env.__FAKE_FS_O_FILENAME__)||m.default.constants.UV_FS_O_FILEMAP||0,S=b&&!!g,O=512*1024,R=g|_|v|w;e.getWriteFlag=S?e=>e"w"}));var j=d((e=>{"use strict";var f=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0});e.chownrSync=e.chownr=void 0;var m=f(p(561)),y=f(p(411)),dr=(e,f,p)=>{try{return m.default.lchownSync(e,f,p)}catch(e){if(e?.code!=="ENOENT")throw e}},Ci=(e,f,p,y)=>{m.default.lchown(e,f,p,(e=>{y(e&&e?.code!=="ENOENT"?e:null)}))},Lh=(f,p,m,b,v)=>{if(p.isDirectory())(0,e.chownr)(y.default.resolve(f,p.name),m,b,(e=>{if(e)return v(e);let _=y.default.resolve(f,p.name);Ci(_,m,b,v)}));else{let e=y.default.resolve(f,p.name);Ci(e,m,b,v)}},Ah=(e,f,p,y)=>{m.default.readdir(e,{withFileTypes:!0},((m,b)=>{if(m){if(m.code==="ENOENT")return y();if(m.code!=="ENOTDIR"&&m.code!=="ENOTSUP")return y(m)}if(m||!b.length)return Ci(e,f,p,y);let v=b.length,_=null,h=m=>{if(!_){if(m)return y(_=m);if(--v===0)return Ci(e,f,p,y)}};for(let m of b)Lh(e,m,f,p,h)}))};e.chownr=Ah;var Ih=(f,p,m,b)=>{p.isDirectory()&&(0,e.chownrSync)(y.default.resolve(f,p.name),m,b),dr(y.default.resolve(f,p.name),m,b)},Ch=(e,f,p)=>{let y;try{y=m.default.readdirSync(e,{withFileTypes:!0})}catch(m){let y=m;if(y?.code==="ENOENT")return;if(y?.code==="ENOTDIR"||y?.code==="ENOTSUP")return dr(e,f,p);throw y}for(let m of y)Ih(e,m,f,p);return dr(e,f,p)};e.chownrSync=Ch}));var U=d((e=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.CwdError=void 0;var f=class extends Error{path;code;syscall="chdir";constructor(e,f){super(`${f}: Cannot cd into '${e}'`),this.path=e,this.code=f}get name(){return"CwdError"}};e.CwdError=f}));var W=d((e=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.SymlinkError=void 0;var f=class extends Error{path;symlink;syscall="symlink";code="TAR_SYMLINK_ERROR";constructor(e,f){super("TAR_SYMLINK_ERROR: Cannot extract through symbolic link"),this.symlink=e,this.path=f}get name(){return"SymlinkError"}};e.SymlinkError=f}));var Z=d((e=>{"use strict";var f=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0});e.mkdirSync=e.mkdir=void 0;var m=j(),y=f(p(561)),b=f(p(977)),v=f(p(411)),_=U(),w=k(),g=W(),Bh=(e,f)=>{y.default.stat(e,((p,m)=>{(p||!m.isDirectory())&&(p=new _.CwdError(e,p?.code||"ENOTDIR")),f(p)}))},zh=(e,f,p)=>{e=(0,w.normalizeWindowsPath)(e);let _=f.umask??18,g=f.mode|448,S=(g&_)!==0,O=f.uid,R=f.gid,k=typeof O=="number"&&typeof R=="number"&&(O!==f.processUid||R!==f.processGid),P=f.preserve,T=f.unlink,D=(0,w.normalizeWindowsPath)(f.cwd),E=(f,b)=>{f?p(f):b&&k?(0,m.chownr)(b,O,R,(e=>E(e))):S?y.default.chmod(e,g,p):p()};if(e===D)return Bh(e,E);if(P)return b.default.mkdir(e,{mode:g,recursive:!0}).then((e=>E(null,e??void 0)),E);let M=(0,w.normalizeWindowsPath)(v.default.relative(D,e)).split("/");wr(D,M,g,T,D,void 0,E)};e.mkdir=zh;var wr=(e,f,p,m,b,_,g)=>{if(!f.length)return g(null,_);let S=f.shift(),O=(0,w.normalizeWindowsPath)(v.default.resolve(e+"/"+S));y.default.mkdir(O,p,Un(O,f,p,m,b,_,g))},Un=(e,f,p,m,b,v,_)=>S=>{S?y.default.lstat(e,((O,R)=>{if(O)O.path=O.path&&(0,w.normalizeWindowsPath)(O.path),_(O);else if(R.isDirectory())wr(e,f,p,m,b,v,_);else if(m)y.default.unlink(e,(w=>{if(w)return _(w);y.default.mkdir(e,p,Un(e,f,p,m,b,v,_))}));else{if(R.isSymbolicLink())return _(new g.SymlinkError(e,e+"/"+f.join("/")));_(S)}})):(v=v||e,wr(e,f,p,m,b,v,_))},kh=e=>{let f=!1,p;try{f=y.default.statSync(e).isDirectory()}catch(e){p=e?.code}finally{if(!f)throw new _.CwdError(e,p??"ENOTDIR")}},jh=(e,f)=>{e=(0,w.normalizeWindowsPath)(e);let p=f.umask??18,b=f.mode|448,_=(b&p)!==0,S=f.uid,O=f.gid,R=typeof S=="number"&&typeof O=="number"&&(S!==f.processUid||O!==f.processGid),k=f.preserve,P=f.unlink,T=(0,w.normalizeWindowsPath)(f.cwd),c=f=>{f&&R&&(0,m.chownrSync)(f,S,O),_&&y.default.chmodSync(e,b)};if(e===T)return kh(T),c();if(k)return c(y.default.mkdirSync(e,{mode:b,recursive:!0})??void 0);let D=(0,w.normalizeWindowsPath)(v.default.relative(T,e)).split("/"),M;for(let e=D.shift(),f=T;e&&(f+="/"+e);e=D.shift()){f=(0,w.normalizeWindowsPath)(v.default.resolve(f));try{y.default.mkdirSync(f,b),M=M||f}catch{let e=y.default.lstatSync(f);if(e.isDirectory())continue;if(P){y.default.unlinkSync(f),y.default.mkdirSync(f,b),M=M||f;continue}else if(e.isSymbolicLink())return new g.SymlinkError(f,f+"/"+D.join("/"))}}return c(M)};e.mkdirSync=jh}));var H=d((e=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.normalizeUnicode=void 0;var f=Object.create(null),p=1e4,m=new Set,xh=e=>{m.has(e)?m.delete(e):f[e]=e.normalize("NFD").toLocaleLowerCase("en").toLocaleUpperCase("en"),m.add(e);let y=f[e],b=m.size-p;if(b>p/10){for(let e of m)if(m.delete(e),delete f[e],--b<=0)break}return y};e.normalizeUnicode=xh}));var G=d((e=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.PathReservations=void 0;var f=p(411),m=H(),y=M(),b=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,v=b==="win32",Zh=e=>e.split("/").slice(0,-1).reduce(((e,p)=>{let m=e[e.length-1];return m!==void 0&&(p=(0,f.join)(m,p)),e.push(p||"/"),e}),[]),_=class{#e=new Map;#t=new Map;#i=new Set;reserve(e,p){e=v?["win32 parallelization disabled"]:e.map((e=>(0,y.stripTrailingSlashes)((0,f.join)((0,m.normalizeUnicode)(e)))));let b=new Set(e.map((e=>Zh(e))).reduce(((e,f)=>e.concat(f))));this.#t.set(p,{dirs:b,paths:e});for(let f of e){let e=this.#e.get(f);e?e.push(p):this.#e.set(f,[p])}for(let e of b){let f=this.#e.get(e);if(!f)this.#e.set(e,[new Set([p])]);else{let e=f[f.length-1];e instanceof Set?e.add(p):f.push(new Set([p]))}}return this.#s(p)}#r(e){let f=this.#t.get(e);if(!f)throw new Error("function does not have any path reservations");return{paths:f.paths.map((e=>this.#e.get(e))),dirs:[...f.dirs].map((e=>this.#e.get(e)))}}check(e){let{paths:f,dirs:p}=this.#r(e);return f.every((f=>f&&f[0]===e))&&p.every((f=>f&&f[0]instanceof Set&&f[0].has(e)))}#s(e){return this.#i.has(e)||!this.check(e)?!1:(this.#i.add(e),e((()=>this.#n(e))),!0)}#n(e){if(!this.#i.has(e))return!1;let f=this.#t.get(e);if(!f)throw new Error("invalid reservation");let{paths:p,dirs:m}=f,y=new Set;for(let f of p){let p=this.#e.get(f);if(!p||p?.[0]!==e)continue;let m=p[1];if(!m){this.#e.delete(f);continue}if(p.shift(),typeof m=="function")y.add(m);else for(let e of m)y.add(e)}for(let f of m){let p=this.#e.get(f),m=p?.[0];if(!(!p||!(m instanceof Set)))if(m.size===1&&p.length===1){this.#e.delete(f);continue}else if(m.size===1){p.shift();let e=p[0];typeof e=="function"&&y.add(e)}else m.delete(e)}return this.#i.delete(e),y.forEach((e=>this.#s(e))),!0}};e.PathReservations=_}));var Y=d((e=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.umask=void 0;var Gh=()=>process.umask();e.umask=Gh}));var $=d((e=>{"use strict";var f=e&&e.__createBinding||(Object.create?function(e,f,p,m){m===void 0&&(m=p);var y=Object.getOwnPropertyDescriptor(f,p);(!y||("get"in y?!f.__esModule:y.writable||y.configurable))&&(y={enumerable:!0,get:function(){return f[p]}}),Object.defineProperty(e,m,y)}:function(e,f,p,m){m===void 0&&(m=p),e[m]=f[p]}),m=e&&e.__setModuleDefault||(Object.create?function(e,f){Object.defineProperty(e,"default",{enumerable:!0,value:f})}:function(e,f){e.default=f}),b=e&&e.__importStar||function(){var s=function(e){return s=Object.getOwnPropertyNames||function(e){var f=[];for(var p in e)Object.prototype.hasOwnProperty.call(e,p)&&(f[f.length]=p);return f},s(e)};return function(e){if(e&&e.__esModule)return e;var p={};if(e!=null)for(var y=s(e),b=0;b{if(!ye)return S.default.unlink(e,f);let p=e+".DELETE."+(0,g.randomBytes)(16).toString("hex");S.default.rename(e,p,(e=>{if(e)return f(e);S.default.unlink(p,f)}))},rl=e=>{if(!ye)return S.default.unlinkSync(e);let f=e+".DELETE."+(0,g.randomBytes)(16).toString("hex");S.default.renameSync(e,f),S.default.unlinkSync(f)},io=(e,f,p)=>e!==void 0&&e===e>>>0?e:f!==void 0&&f===f>>>0?f:p,_e=class extends M.Parser{[he]=!1;[pe]=!1;[ne]=0;reservations=new I.PathReservations;transform;writable=!0;readable=!1;uid;gid;setOwner;preserveOwner;processGid;processUid;maxDepth;forceChown;win32;newer;keep;noMtime;preservePaths;unlink;cwd;strip;processUmask;umask;dmode;fmode;chmod;constructor(e={}){if(e.ondone=()=>{this[he]=!0,this[le]()},super(e),this.transform=e.transform,this.chmod=!!e.chmod,typeof e.uid=="number"||typeof e.gid=="number"){if(typeof e.uid!="number"||typeof e.gid!="number")throw new TypeError("cannot set owner without number uid and gid");if(e.preserveOwner)throw new TypeError("cannot preserve owner in archive and also set owner explicitly");this.uid=e.uid,this.gid=e.gid,this.setOwner=!0}else this.uid=void 0,this.gid=void 0,this.setOwner=!1;e.preserveOwner===void 0&&typeof e.uid!="number"?this.preserveOwner=!!(process.getuid&&process.getuid()===0):this.preserveOwner=!!e.preserveOwner,this.processUid=(this.preserveOwner||this.setOwner)&&process.getuid?process.getuid():void 0,this.processGid=(this.preserveOwner||this.setOwner)&&process.getgid?process.getgid():void 0,this.maxDepth=typeof e.maxDepth=="number"?e.maxDepth:ve,this.forceChown=e.forceChown===!0,this.win32=!!e.win32||ye,this.newer=!!e.newer,this.keep=!!e.keep,this.noMtime=!!e.noMtime,this.preservePaths=!!e.preservePaths,this.unlink=!!e.unlink,this.cwd=(0,T.normalizeWindowsPath)(O.default.resolve(e.cwd||process.cwd())),this.strip=Number(e.strip)||0,this.processUmask=this.chmod?typeof e.processUmask=="number"?e.processUmask:(0,B.umask)():0,this.umask=typeof e.umask=="number"?e.umask:this.processUmask,this.dmode=e.dmode||511&~this.umask,this.fmode=e.fmode||438&~this.umask,this.on("entry",(e=>this[z](e)))}warn(e,f,p={}){return(e==="TAR_BAD_ARCHIVE"||e==="TAR_ABORT")&&(p.recoverable=!1),super.warn(e,f,p)}[le](){this[he]&&this[ne]===0&&(this.emit("prefinish"),this.emit("finish"),this.emit("end"))}[ie](e,f){let p=e[f],{type:m}=e;if(!p||this.preservePaths)return!0;let[y,b]=(0,x.stripAbsolutePath)(p),v=b.replace(/\\/g,"/").split("/");if(v.includes("..")||ye&&/^[a-z]:\.\.$/i.test(v[0]??"")){if(f==="path"||m==="Link")return this.warn("TAR_ENTRY_ERROR",`${f} contains '..'`,{entry:e,[f]:p}),!1;{let m=O.default.posix.dirname(e.path),y=O.default.posix.normalize(O.default.posix.join(m,v.join("/")));if(y.startsWith("../")||y==="..")return this.warn("TAR_ENTRY_ERROR",`${f} escapes extraction directory`,{entry:e,[f]:p}),!1}}return y&&(e[f]=String(b),this.warn("TAR_ENTRY_INFO",`stripping ${y} from absolute ${f}`,{entry:e,[f]:p})),!0}[te](e){let f=(0,T.normalizeWindowsPath)(e.path),p=f.split("/");if(this.strip){if(p.length=this.strip)e.linkpath=f.slice(this.strip).join("/");else return!1}p.splice(0,this.strip),e.path=p.join("/")}if(isFinite(this.maxDepth)&&p.length>this.maxDepth)return this.warn("TAR_ENTRY_ERROR","path excessively deep",{entry:e,path:f,depth:p.length,maxDepth:this.maxDepth}),!1;if(!this[ie](e,"path")||!this[ie](e,"linkpath"))return!1;if(O.default.isAbsolute(e.path)?e.absolute=(0,T.normalizeWindowsPath)(O.default.resolve(e.path)):e.absolute=(0,T.normalizeWindowsPath)(O.default.resolve(this.cwd,e.path)),!this.preservePaths&&typeof e.absolute=="string"&&e.absolute.indexOf(this.cwd+"/")!==0&&e.absolute!==this.cwd)return this.warn("TAR_ENTRY_ERROR","path escaped extraction target",{entry:e,path:(0,T.normalizeWindowsPath)(e.path),resolvedPath:e.absolute,cwd:this.cwd}),!1;if(e.absolute===this.cwd&&e.type!=="Directory"&&e.type!=="GNUDumpDir")return!1;if(this.win32){let{root:f}=O.default.win32.parse(String(e.absolute));e.absolute=f+L.encode(String(e.absolute).slice(f.length));let{root:p}=O.default.win32.parse(e.path);e.path=p+L.encode(e.path.slice(p.length))}return!0}[z](e){if(!this[te](e))return e.resume();switch(w.default.equal(typeof e.absolute,"string"),e.type){case"Directory":case"GNUDumpDir":e.mode&&(e.mode=e.mode|448);case"File":case"OldFile":case"ContiguousFile":case"Link":case"SymbolicLink":return this[j](e);default:return this[ee](e)}}[se](e,f){e.name==="CwdError"?this.emit("error",e):(this.warn("TAR_ENTRY_ERROR",e,{entry:f}),this[ae](),f.resume())}[re](e,f,p){(0,P.mkdir)((0,T.normalizeWindowsPath)(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cwd:this.cwd,mode:f},p)}[ue](e){return this.forceChown||this.preserveOwner&&(typeof e.uid=="number"&&e.uid!==this.processUid||typeof e.gid=="number"&&e.gid!==this.processGid)||typeof this.uid=="number"&&this.uid!==this.processUid||typeof this.gid=="number"&&this.gid!==this.processGid}[ce](e){return io(this.uid,e.uid,this.processUid)}[fe](e){return io(this.gid,e.gid,this.processGid)}[q](e,f){let p=typeof e.mode=="number"?e.mode&4095:this.fmode,m=new _.WriteStream(String(e.absolute),{flags:(0,R.getWriteFlag)(e.size),mode:p,autoClose:!1});m.on("error",(p=>{m.fd&&S.default.close(m.fd,(()=>{})),m.write=()=>!0,this[se](p,e),f()}));let y=1,o=p=>{if(p){m.fd&&S.default.close(m.fd,(()=>{})),this[se](p,e),f();return}--y===0&&m.fd!==void 0&&S.default.close(m.fd,(p=>{p?this[se](p,e):this[ae](),f()}))};m.on("finish",(()=>{let f=String(e.absolute),p=m.fd;if(typeof p=="number"&&e.mtime&&!this.noMtime){y++;let m=e.atime||new Date,b=e.mtime;S.default.futimes(p,m,b,(e=>e?S.default.utimes(f,m,b,(f=>o(f&&e))):o()))}if(typeof p=="number"&&this[ue](e)){y++;let m=this[ce](e),b=this[fe](e);typeof m=="number"&&typeof b=="number"&&S.default.fchown(p,m,b,(e=>e?S.default.chown(f,m,b,(f=>o(f&&e))):o()))}o()}));let b=this.transform&&this.transform(e)||e;b!==e&&(b.on("error",(p=>{this[se](p,e),f()})),e.pipe(b)),b.pipe(m)}[V](e,f){let p=typeof e.mode=="number"?e.mode&4095:this.dmode;this[re](String(e.absolute),p,(p=>{if(p){this[se](p,e),f();return}let m=1,o=()=>{--m===0&&(f(),this[ae](),e.resume())};e.mtime&&!this.noMtime&&(m++,S.default.utimes(String(e.absolute),e.atime||new Date,e.mtime,o)),this[ue](e)&&(m++,S.default.chown(String(e.absolute),Number(this[ce](e)),Number(this[fe](e)),o)),o()}))}[ee](e){e.unsupported=!0,this.warn("TAR_ENTRY_UNSUPPORTED",`unsupported entry type: ${e.type}`,{entry:e}),e.resume()}[X](e,f){let p=(0,T.normalizeWindowsPath)(O.default.relative(this.cwd,O.default.resolve(O.default.dirname(String(e.absolute)),String(e.linkpath)))).split("/");this[J](e,this.cwd,p,(()=>this[K](e,String(e.linkpath),"symlink",f)),(p=>{this[se](p,e),f()}))}[Q](e,f){let p=(0,T.normalizeWindowsPath)(O.default.resolve(this.cwd,String(e.linkpath))),m=(0,T.normalizeWindowsPath)(String(e.linkpath)).split("/");this[J](e,this.cwd,m,(()=>this[K](e,p,"link",f)),(p=>{this[se](p,e),f()}))}[J](e,f,p,m,y){let b=p.shift();if(this.preservePaths||b===void 0)return m();let v=O.default.resolve(f,b);S.default.lstat(v,((f,b)=>{if(f)return m();if(b?.isSymbolicLink())return y(new F.SymlinkError(v,O.default.resolve(v,p.join("/"))));this[J](e,v,p,m,y)}))}[oe](){this[ne]++}[ae](){this[ne]--,this[le]()}[de](e){this[ae](),e.resume()}[H](e,f){return e.type==="File"&&!this.unlink&&f.isFile()&&f.nlink<=1&&!ye}[j](e){this[oe]();let f=[e.path];e.linkpath&&f.push(e.linkpath),this.reservations.reserve(f,(f=>this[U](e,f)))}[U](e,f){let i=e=>{f(e)},r=()=>{this[re](this.cwd,this.dmode,(f=>{if(f){this[se](f,e),i();return}this[pe]=!0,n()}))},n=()=>{if(e.absolute!==this.cwd){let f=(0,T.normalizeWindowsPath)(O.default.dirname(String(e.absolute)));if(f!==this.cwd)return this[re](f,this.dmode,(f=>{if(f){this[se](f,e),i();return}o()}))}o()},o=()=>{S.default.lstat(String(e.absolute),((f,p)=>{if(p&&(this.keep||this.newer&&p.mtime>(e.mtime??p.mtime))){this[de](e),i();return}if(f||this[H](e,p))return this[$](null,e,i);if(p.isDirectory()){if(e.type==="Directory"){let f=this.chmod&&e.mode&&(p.mode&4095)!==e.mode,u=f=>this[$](f??null,e,i);return f?S.default.chmod(String(e.absolute),Number(e.mode),u):u()}if(e.absolute!==this.cwd)return S.default.rmdir(String(e.absolute),(f=>this[$](f??null,e,i)))}if(e.absolute===this.cwd)return this[$](null,e,i);sl(String(e.absolute),(f=>this[$](f??null,e,i)))}))};this[pe]?n():r()}[$](e,f,p){if(e){this[se](e,f),p();return}switch(f.type){case"File":case"OldFile":case"ContiguousFile":return this[q](f,p);case"Link":return this[Q](f,p);case"SymbolicLink":return this[X](f,p);case"Directory":case"GNUDumpDir":return this[V](f,p)}}[K](e,f,p,m){S.default[p](f,String(e.absolute),(f=>{f?this[se](f,e):(this[ae](),e.resume()),m()}))}};e.Unpack=_e;var Nt=e=>{try{return[null,e()]}catch(e){return[e,null]}},we=class extends _e{sync=!0;[$](e,f){return super[$](e,f,(()=>{}))}[j](e){if(!this[pe]){let f=this[re](this.cwd,this.dmode);if(f)return this[se](f,e);this[pe]=!0}if(e.absolute!==this.cwd){let f=(0,T.normalizeWindowsPath)(O.default.dirname(String(e.absolute)));if(f!==this.cwd){let p=this[re](f,this.dmode);if(p)return this[se](p,e)}}let[f,p]=Nt((()=>S.default.lstatSync(String(e.absolute))));if(p&&(this.keep||this.newer&&p.mtime>(e.mtime??p.mtime)))return this[de](e);if(f||this[H](e,p))return this[$](null,e);if(p.isDirectory()){if(e.type==="Directory"){let f=this.chmod&&e.mode&&(p.mode&4095)!==e.mode,[m]=f?Nt((()=>{S.default.chmodSync(String(e.absolute),Number(e.mode))})):[];return this[$](m,e)}let[f]=Nt((()=>S.default.rmdirSync(String(e.absolute))));this[$](f,e)}let[m]=e.absolute===this.cwd?[]:Nt((()=>rl(String(e.absolute))));this[$](m,e)}[q](e,f){let p=typeof e.mode=="number"?e.mode&4095:this.fmode,r=p=>{let y;try{S.default.closeSync(m)}catch(e){y=e}(p||y)&&this[se](p||y,e),f()},m;try{m=S.default.openSync(String(e.absolute),(0,R.getWriteFlag)(e.size),p)}catch(e){return r(e)}let y=this.transform&&this.transform(e)||e;y!==e&&(y.on("error",(f=>this[se](f,e))),e.pipe(y)),y.on("data",(e=>{try{S.default.writeSync(m,e,0,e.length)}catch(e){r(e)}})),y.on("end",(()=>{let f=null;if(e.mtime&&!this.noMtime){let p=e.atime||new Date,y=e.mtime;try{S.default.futimesSync(m,p,y)}catch(m){try{S.default.utimesSync(String(e.absolute),p,y)}catch{f=m}}}if(this[ue](e)){let p=this[ce](e),y=this[fe](e);try{S.default.fchownSync(m,Number(p),Number(y))}catch(m){try{S.default.chownSync(String(e.absolute),Number(p),Number(y))}catch{f=f||m}}}r(f)}))}[V](e,f){let p=typeof e.mode=="number"?e.mode&4095:this.dmode,m=this[re](String(e.absolute),p);if(m){this[se](m,e),f();return}if(e.mtime&&!this.noMtime)try{S.default.utimesSync(String(e.absolute),e.atime||new Date,e.mtime)}catch{}if(this[ue](e))try{S.default.chownSync(String(e.absolute),Number(this[ce](e)),Number(this[fe](e)))}catch{}f(),e.resume()}[re](e,f){try{return(0,P.mkdirSync)((0,T.normalizeWindowsPath)(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cwd:this.cwd,mode:f})}catch(e){return e}}[J](e,f,p,m,y){if(this.preservePaths||!p.length)return m();let b=f;for(let e of p){b=O.default.resolve(b,e);let[v,_]=Nt((()=>S.default.lstatSync(b)));if(v)return m();if(_.isSymbolicLink())return y(new F.SymlinkError(b,O.default.resolve(f,p.join("/"))))}m()}[K](e,f,p,m){let y=`${p}Sync`;try{S.default[y](f,String(e.absolute)),m(),e.resume()}catch(f){return this[se](f,e)}}};e.UnpackSync=we}));var q=d((e=>{"use strict";var f=e&&e.__createBinding||(Object.create?function(e,f,p,m){m===void 0&&(m=p);var y=Object.getOwnPropertyDescriptor(f,p);(!y||("get"in y?!f.__esModule:y.writable||y.configurable))&&(y={enumerable:!0,get:function(){return f[p]}}),Object.defineProperty(e,m,y)}:function(e,f,p,m){m===void 0&&(m=p),e[m]=f[p]}),m=e&&e.__setModuleDefault||(Object.create?function(e,f){Object.defineProperty(e,"default",{enumerable:!0,value:f})}:function(e,f){e.default=f}),b=e&&e.__importStar||function(){var s=function(e){return s=Object.getOwnPropertyNames||function(e){var f=[];for(var p in e)Object.prototype.hasOwnProperty.call(e,p)&&(f[f.length]=p);return f},s(e)};return function(e){if(e&&e.__esModule)return e;var p={};if(e!=null)for(var y=s(e),b=0;b{let f=new R.UnpackSync(e),p=e.file,m=g.default.statSync(p),y=e.maxReadSize||16*1024*1024;new w.ReadStreamSync(p,{readSize:y,size:m.size}).pipe(f)},fl=(e,f)=>{let p=new R.Unpack(e),m=e.maxReadSize||16*1024*1024,y=e.file;return new Promise(((e,f)=>{p.on("error",f),p.on("close",e),g.default.stat(y,((e,b)=>{if(e)f(e);else{let e=new w.ReadStream(y,{readSize:m,size:b.size});e.on("error",f),e.pipe(p)}}))}))};e.extract=(0,O.makeCommand)(cl,fl,(e=>new R.UnpackSync(e)),(e=>new R.Unpack(e)),((e,f)=>{f?.length&&(0,S.filesFilter)(e,f)}))}));var V=d((e=>{"use strict";var f=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0});e.replace=void 0;var m=y(),_=f(p(561)),w=f(p(411)),g=O(),S=x(),R=v(),k=b(),P=B(),pl=(e,f)=>{let p=new P.PackSync(e),m=!0,y,b;try{try{y=_.default.openSync(e.file,"r+")}catch(f){if(f?.code==="ENOENT")y=_.default.openSync(e.file,"w+");else throw f}let v=_.default.fstatSync(y),w=Buffer.alloc(512);e:for(b=0;bv.size)break;b+=p,e.mtimeCache&&f.mtime&&e.mtimeCache.set(String(f.path),f.mtime)}m=!1,_l(e,p,b,y,f)}finally{if(m)try{_.default.closeSync(y)}catch{}}},_l=(e,f,p,y,b)=>{let v=new m.WriteStreamSync(e.file,{fd:y,start:p});f.pipe(v),yl(f,b)},wl=(e,f)=>{f=Array.from(f);let p=new P.Pack(e),i=(f,p,m)=>{let h=(e,p)=>{e?_.default.close(f,(f=>m(e))):m(null,p)},y=0;if(p===0)return h(null,0);let b=0,v=Buffer.alloc(512),E=(m,w)=>{if(m||typeof w>"u")return h(m);if(b+=w,b<512&&w)return _.default.read(f,v,b,v.length-b,y+b,E);if(y===0&&v[0]===31&&v[1]===139)return h(new Error("cannot append to compressed archives"));if(b<512)return h(null,y);let S=new g.Header(v);if(!S.cksumValid)return h(null,y);let O=512*Math.ceil((S.size??0)/512);if(y+O+512>p||(y+=O+512,y>=p))return h(null,y);e.mtimeCache&&S.mtime&&e.mtimeCache.set(String(S.path),S.mtime),b=0,_.default.read(f,v,0,512,y,E)};_.default.read(f,v,0,512,y,E)};return new Promise(((y,b)=>{p.on("error",b);let v="r+",h=(w,g)=>{if(w&&w.code==="ENOENT"&&v==="r+")return v="w+",_.default.open(e.file,v,h);if(w||!g)return b(w);_.default.fstat(g,((v,w)=>{if(v)return _.default.close(g,(()=>b(v)));i(g,w.size,((v,_)=>{if(v)return b(v);let w=new m.WriteStream(e.file,{fd:g,start:_});p.pipe(w),w.on("error",b),w.on("close",y),El(p,f)}))}))};_.default.open(e.file,v,h)}))},yl=(e,f)=>{f.forEach((f=>{f.charAt(0)==="@"?(0,S.list)({file:w.default.resolve(e.cwd,f.slice(1)),sync:!0,noResume:!0,onReadEntry:f=>e.add(f)}):e.add(f)})),e.end()},El=async(e,f)=>{for(let p=0;pe.add(f)}):e.add(m)}e.end()};e.replace=(0,R.makeCommand)(pl,wl,(()=>{throw new TypeError("file is required")}),(()=>{throw new TypeError("file is required")}),((e,f)=>{if(!(0,k.isFile)(e))throw new TypeError("file is required");if(e.gzip||e.brotli||e.zstd||e.file.endsWith(".br")||e.file.endsWith(".tbr"))throw new TypeError("cannot append to compressed archives");if(!f?.length)throw new TypeError("no paths specified to add/replace")}))}));var K=d((e=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.update=void 0;var f=v(),p=V();e.update=(0,f.makeCommand)(p.replace.syncFile,p.replace.asyncFile,p.replace.syncNoFile,p.replace.asyncNoFile,((e,f=[])=>{p.replace.validate?.(e,f),Sl(e)}));var Sl=e=>{let f=e.filter;e.mtimeCache||(e.mtimeCache=new Map),e.filter=f?(p,m)=>f(p,m)&&!((e.mtimeCache?.get(p)??m.mtime??0)>(m.mtime??0)):(f,p)=>!((e.mtimeCache?.get(f)??p.mtime??0)>(p.mtime??0))}}));var X=f&&f.__createBinding||(Object.create?function(e,f,p,m){m===void 0&&(m=p);var y=Object.getOwnPropertyDescriptor(f,p);(!y||("get"in y?!f.__esModule:y.writable||y.configurable))&&(y={enumerable:!0,get:function(){return f[p]}}),Object.defineProperty(e,m,y)}:function(e,f,p,m){m===void 0&&(m=p),e[m]=f[p]}),Q=f&&f.__setModuleDefault||(Object.create?function(e,f){Object.defineProperty(e,"default",{enumerable:!0,value:f})}:function(e,f){e.default=f}),J=f&&f.__exportStar||function(e,f){for(var p in e)p!=="default"&&!Object.prototype.hasOwnProperty.call(f,p)&&X(f,e,p)},ee=f&&f.__importStar||function(){var s=function(e){return s=Object.getOwnPropertyNames||function(e){var f=[];for(var p in e)Object.prototype.hasOwnProperty.call(e,p)&&(f[f.length]=p);return f},s(e)};return function(e){if(e&&e.__esModule)return e;var f={};if(e!=null)for(var p=s(e),m=0;m{var r={286:r=>{r.exports=function(r,e){if(!e)e={};var n=e.hsep===undefined?" ":e.hsep;var t=e.align||[];var a=e.stringLength||function(r){return String(r).length};var i=reduce(r,(function(r,e){forEach(e,(function(e,n){var t=dotindex(e);if(!r[n]||t>r[n])r[n]=t}));return r}),[]);var u=map(r,(function(r){return map(r,(function(r,e){var n=String(r);if(t[e]==="."){var u=dotindex(n);var f=i[e]+(/\./.test(n)?1:2)-(a(n)-u);return n+Array(f).join(" ")}else return n}))}));var f=reduce(u,(function(r,e){forEach(e,(function(e,n){var t=a(e);if(!r[n]||t>r[n])r[n]=t}));return r}),[]);return map(u,(function(r){return map(r,(function(r,e){var n=f[e]-a(r)||0;var i=Array(Math.max(n+1,1)).join(" ");if(t[e]==="r"||t[e]==="."){return i+r}if(t[e]==="c"){return Array(Math.ceil(n/2+1)).join(" ")+r+Array(Math.floor(n/2+1)).join(" ")}return r+i})).join(n).replace(/\s+$/,"")})).join("\n")};function dotindex(r){var e=/\.[^.]*$/.exec(r);return e?e.index+1:r.length}function reduce(r,e,n){if(r.reduce)return r.reduce(e,n);var t=0;var a=arguments.length>=3?n:r[t++];for(;t{var e={660:e=>{e.exports=function(e,t){if(typeof e!=="string"){throw new TypeError("Expected a string")}var i=String(e);var s="";var r=t?!!t.extended:false;var n=t?!!t.globstar:false;var c=false;var a=t&&typeof t.flags==="string"?t.flags:"";var o;for(var h=0,f=i.length;h1&&(l==="/"||l===undefined)&&(d==="/"||d===undefined);if(p){s+="((?:[^/]*(?:/|$))*)";h++}else{s+="([^/]*)"}}break;default:s+=o}}if(!a||!~a.indexOf("g")){s="^"+s+"$"}return new RegExp(s,a)}},567:e=>{"use strict";e.exports=clone;var t=Object.getPrototypeOf||function(e){return e.__proto__};function clone(e){if(e===null||typeof e!=="object")return e;if(e instanceof Object)var i={__proto__:t(e)};else var i=Object.create(null);Object.getOwnPropertyNames(e).forEach((function(t){Object.defineProperty(i,t,Object.getOwnPropertyDescriptor(e,t))}));return i}},450:(e,t,i)=>{var s=i(147);var r=i(164);var n=i(873);var c=i(567);var a=i(837);var o;var h;if(typeof Symbol==="function"&&typeof Symbol.for==="function"){o=Symbol.for("graceful-fs.queue");h=Symbol.for("graceful-fs.previous")}else{o="___graceful-fs.queue";h="___graceful-fs.previous"}function noop(){}function publishQueue(e,t){Object.defineProperty(e,o,{get:function(){return t}})}var f=noop;if(a.debuglog)f=a.debuglog("gfs4");else if(/\bgfs4\b/i.test(process.env.NODE_DEBUG||""))f=function(){var e=a.format.apply(a,arguments);e="GFS4: "+e.split(/\n/).join("\nGFS4: ");console.error(e)};if(!s[o]){var l=global[o]||[];publishQueue(s,l);s.close=function(e){function close(t,i){return e.call(s,t,(function(e){if(!e){resetQueue()}if(typeof i==="function")i.apply(this,arguments)}))}Object.defineProperty(close,h,{value:e});return close}(s.close);s.closeSync=function(e){function closeSync(t){e.apply(s,arguments);resetQueue()}Object.defineProperty(closeSync,h,{value:e});return closeSync}(s.closeSync);if(/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")){process.on("exit",(function(){f(s[o]);i(491).equal(s[o].length,0)}))}}if(!global[o]){publishQueue(global,s[o])}e.exports=patch(c(s));if(process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH&&!s.__patched){e.exports=patch(s);s.__patched=true}function patch(e){r(e);e.gracefulify=patch;e.createReadStream=createReadStream;e.createWriteStream=createWriteStream;var t=e.readFile;e.readFile=readFile;function readFile(e,i,s){if(typeof i==="function")s=i,i=null;return go$readFile(e,i,s);function go$readFile(e,i,s,r){return t(e,i,(function(t){if(t&&(t.code==="EMFILE"||t.code==="ENFILE"))enqueue([go$readFile,[e,i,s],t,r||Date.now(),Date.now()]);else{if(typeof s==="function")s.apply(this,arguments)}}))}}var i=e.writeFile;e.writeFile=writeFile;function writeFile(e,t,s,r){if(typeof s==="function")r=s,s=null;return go$writeFile(e,t,s,r);function go$writeFile(e,t,s,r,n){return i(e,t,s,(function(i){if(i&&(i.code==="EMFILE"||i.code==="ENFILE"))enqueue([go$writeFile,[e,t,s,r],i,n||Date.now(),Date.now()]);else{if(typeof r==="function")r.apply(this,arguments)}}))}}var s=e.appendFile;if(s)e.appendFile=appendFile;function appendFile(e,t,i,r){if(typeof i==="function")r=i,i=null;return go$appendFile(e,t,i,r);function go$appendFile(e,t,i,r,n){return s(e,t,i,(function(s){if(s&&(s.code==="EMFILE"||s.code==="ENFILE"))enqueue([go$appendFile,[e,t,i,r],s,n||Date.now(),Date.now()]);else{if(typeof r==="function")r.apply(this,arguments)}}))}}var c=e.copyFile;if(c)e.copyFile=copyFile;function copyFile(e,t,i,s){if(typeof i==="function"){s=i;i=0}return go$copyFile(e,t,i,s);function go$copyFile(e,t,i,s,r){return c(e,t,i,(function(n){if(n&&(n.code==="EMFILE"||n.code==="ENFILE"))enqueue([go$copyFile,[e,t,i,s],n,r||Date.now(),Date.now()]);else{if(typeof s==="function")s.apply(this,arguments)}}))}}var a=e.readdir;e.readdir=readdir;var o=/^v[0-5]\./;function readdir(e,t,i){if(typeof t==="function")i=t,t=null;var s=o.test(process.version)?function go$readdir(e,t,i,s){return a(e,fs$readdirCallback(e,t,i,s))}:function go$readdir(e,t,i,s){return a(e,t,fs$readdirCallback(e,t,i,s))};return s(e,t,i);function fs$readdirCallback(e,t,i,r){return function(n,c){if(n&&(n.code==="EMFILE"||n.code==="ENFILE"))enqueue([s,[e,t,i],n,r||Date.now(),Date.now()]);else{if(c&&c.sort)c.sort();if(typeof i==="function")i.call(this,n,c)}}}}if(process.version.substr(0,4)==="v0.8"){var h=n(e);ReadStream=h.ReadStream;WriteStream=h.WriteStream}var f=e.ReadStream;if(f){ReadStream.prototype=Object.create(f.prototype);ReadStream.prototype.open=ReadStream$open}var l=e.WriteStream;if(l){WriteStream.prototype=Object.create(l.prototype);WriteStream.prototype.open=WriteStream$open}Object.defineProperty(e,"ReadStream",{get:function(){return ReadStream},set:function(e){ReadStream=e},enumerable:true,configurable:true});Object.defineProperty(e,"WriteStream",{get:function(){return WriteStream},set:function(e){WriteStream=e},enumerable:true,configurable:true});var u=ReadStream;Object.defineProperty(e,"FileReadStream",{get:function(){return u},set:function(e){u=e},enumerable:true,configurable:true});var d=WriteStream;Object.defineProperty(e,"FileWriteStream",{get:function(){return d},set:function(e){d=e},enumerable:true,configurable:true});function ReadStream(e,t){if(this instanceof ReadStream)return f.apply(this,arguments),this;else return ReadStream.apply(Object.create(ReadStream.prototype),arguments)}function ReadStream$open(){var e=this;open(e.path,e.flags,e.mode,(function(t,i){if(t){if(e.autoClose)e.destroy();e.emit("error",t)}else{e.fd=i;e.emit("open",i);e.read()}}))}function WriteStream(e,t){if(this instanceof WriteStream)return l.apply(this,arguments),this;else return WriteStream.apply(Object.create(WriteStream.prototype),arguments)}function WriteStream$open(){var e=this;open(e.path,e.flags,e.mode,(function(t,i){if(t){e.destroy();e.emit("error",t)}else{e.fd=i;e.emit("open",i)}}))}function createReadStream(t,i){return new e.ReadStream(t,i)}function createWriteStream(t,i){return new e.WriteStream(t,i)}var p=e.open;e.open=open;function open(e,t,i,s){if(typeof i==="function")s=i,i=null;return go$open(e,t,i,s);function go$open(e,t,i,s,r){return p(e,t,i,(function(n,c){if(n&&(n.code==="EMFILE"||n.code==="ENFILE"))enqueue([go$open,[e,t,i,s],n,r||Date.now(),Date.now()]);else{if(typeof s==="function")s.apply(this,arguments)}}))}}return e}function enqueue(e){f("ENQUEUE",e[0].name,e[1]);s[o].push(e);retry()}var u;function resetQueue(){var e=Date.now();for(var t=0;t2){s[o][t][3]=e;s[o][t][4]=e}}retry()}function retry(){clearTimeout(u);u=undefined;if(s[o].length===0)return;var e=s[o].shift();var t=e[0];var i=e[1];var r=e[2];var n=e[3];var c=e[4];if(n===undefined){f("RETRY",t.name,i);t.apply(null,i)}else if(Date.now()-n>=6e4){f("TIMEOUT",t.name,i);var a=i.pop();if(typeof a==="function")a.call(null,r)}else{var h=Date.now()-c;var l=Math.max(c-n,1);var d=Math.min(l*1.2,100);if(h>=d){f("RETRY",t.name,i);t.apply(null,i.concat([n]))}else{s[o].push(e)}}if(u===undefined){u=setTimeout(retry,0)}}},873:(e,t,i)=>{var s=i(781).Stream;e.exports=legacy;function legacy(e){return{ReadStream:ReadStream,WriteStream:WriteStream};function ReadStream(t,i){if(!(this instanceof ReadStream))return new ReadStream(t,i);s.call(this);var r=this;this.path=t;this.fd=null;this.readable=true;this.paused=false;this.flags="r";this.mode=438;this.bufferSize=64*1024;i=i||{};var n=Object.keys(i);for(var c=0,a=n.length;cthis.end){throw new Error("start must be <= end")}this.pos=this.start}if(this.fd!==null){process.nextTick((function(){r._read()}));return}e.open(this.path,this.flags,this.mode,(function(e,t){if(e){r.emit("error",e);r.readable=false;return}r.fd=t;r.emit("open",t);r._read()}))}function WriteStream(t,i){if(!(this instanceof WriteStream))return new WriteStream(t,i);s.call(this);this.path=t;this.fd=null;this.writable=true;this.flags="w";this.encoding="binary";this.mode=438;this.bytesWritten=0;i=i||{};var r=Object.keys(i);for(var n=0,c=r.length;n= zero")}this.pos=this.start}this.busy=false;this._queue=[];if(this.fd===null){this._open=e.open;this._queue.push([this._open,this.path,this.flags,this.mode,undefined]);this.flush()}}}},164:(e,t,i)=>{var s=i(57);var r=process.cwd;var n=null;var c=process.env.GRACEFUL_FS_PLATFORM||process.platform;process.cwd=function(){if(!n)n=r.call(process);return n};try{process.cwd()}catch(e){}if(typeof process.chdir==="function"){var a=process.chdir;process.chdir=function(e){n=null;a.call(process,e)};if(Object.setPrototypeOf)Object.setPrototypeOf(process.chdir,a)}e.exports=patch;function patch(e){if(s.hasOwnProperty("O_SYMLINK")&&process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)){patchLchmod(e)}if(!e.lutimes){patchLutimes(e)}e.chown=chownFix(e.chown);e.fchown=chownFix(e.fchown);e.lchown=chownFix(e.lchown);e.chmod=chmodFix(e.chmod);e.fchmod=chmodFix(e.fchmod);e.lchmod=chmodFix(e.lchmod);e.chownSync=chownFixSync(e.chownSync);e.fchownSync=chownFixSync(e.fchownSync);e.lchownSync=chownFixSync(e.lchownSync);e.chmodSync=chmodFixSync(e.chmodSync);e.fchmodSync=chmodFixSync(e.fchmodSync);e.lchmodSync=chmodFixSync(e.lchmodSync);e.stat=statFix(e.stat);e.fstat=statFix(e.fstat);e.lstat=statFix(e.lstat);e.statSync=statFixSync(e.statSync);e.fstatSync=statFixSync(e.fstatSync);e.lstatSync=statFixSync(e.lstatSync);if(e.chmod&&!e.lchmod){e.lchmod=function(e,t,i){if(i)process.nextTick(i)};e.lchmodSync=function(){}}if(e.chown&&!e.lchown){e.lchown=function(e,t,i,s){if(s)process.nextTick(s)};e.lchownSync=function(){}}if(c==="win32"){e.rename=typeof e.rename!=="function"?e.rename:function(t){function rename(i,s,r){var n=Date.now();var c=0;t(i,s,(function CB(a){if(a&&(a.code==="EACCES"||a.code==="EPERM"||a.code==="EBUSY")&&Date.now()-n<6e4){setTimeout((function(){e.stat(s,(function(e,n){if(e&&e.code==="ENOENT")t(i,s,CB);else r(a)}))}),c);if(c<100)c+=10;return}if(r)r(a)}))}if(Object.setPrototypeOf)Object.setPrototypeOf(rename,t);return rename}(e.rename)}e.read=typeof e.read!=="function"?e.read:function(t){function read(i,s,r,n,c,a){var o;if(a&&typeof a==="function"){var h=0;o=function(f,l,u){if(f&&f.code==="EAGAIN"&&h<10){h++;return t.call(e,i,s,r,n,c,o)}a.apply(this,arguments)}}return t.call(e,i,s,r,n,c,o)}if(Object.setPrototypeOf)Object.setPrototypeOf(read,t);return read}(e.read);e.readSync=typeof e.readSync!=="function"?e.readSync:function(t){return function(i,s,r,n,c){var a=0;while(true){try{return t.call(e,i,s,r,n,c)}catch(e){if(e.code==="EAGAIN"&&a<10){a++;continue}throw e}}}}(e.readSync);function patchLchmod(e){e.lchmod=function(t,i,r){e.open(t,s.O_WRONLY|s.O_SYMLINK,i,(function(t,s){if(t){if(r)r(t);return}e.fchmod(s,i,(function(t){e.close(s,(function(e){if(r)r(t||e)}))}))}))};e.lchmodSync=function(t,i){var r=e.openSync(t,s.O_WRONLY|s.O_SYMLINK,i);var n=true;var c;try{c=e.fchmodSync(r,i);n=false}finally{if(n){try{e.closeSync(r)}catch(e){}}else{e.closeSync(r)}}return c}}function patchLutimes(e){if(s.hasOwnProperty("O_SYMLINK")&&e.futimes){e.lutimes=function(t,i,r,n){e.open(t,s.O_SYMLINK,(function(t,s){if(t){if(n)n(t);return}e.futimes(s,i,r,(function(t){e.close(s,(function(e){if(n)n(t||e)}))}))}))};e.lutimesSync=function(t,i,r){var n=e.openSync(t,s.O_SYMLINK);var c;var a=true;try{c=e.futimesSync(n,i,r);a=false}finally{if(a){try{e.closeSync(n)}catch(e){}}else{e.closeSync(n)}}return c}}else if(e.futimes){e.lutimes=function(e,t,i,s){if(s)process.nextTick(s)};e.lutimesSync=function(){}}}function chmodFix(t){if(!t)return t;return function(i,s,r){return t.call(e,i,s,(function(e){if(chownErOk(e))e=null;if(r)r.apply(this,arguments)}))}}function chmodFixSync(t){if(!t)return t;return function(i,s){try{return t.call(e,i,s)}catch(e){if(!chownErOk(e))throw e}}}function chownFix(t){if(!t)return t;return function(i,s,r,n){return t.call(e,i,s,r,(function(e){if(chownErOk(e))e=null;if(n)n.apply(this,arguments)}))}}function chownFixSync(t){if(!t)return t;return function(i,s,r){try{return t.call(e,i,s,r)}catch(e){if(!chownErOk(e))throw e}}}function statFix(t){if(!t)return t;return function(i,s,r){if(typeof s==="function"){r=s;s=null}function callback(e,t){if(t){if(t.uid<0)t.uid+=4294967296;if(t.gid<0)t.gid+=4294967296}if(r)r.apply(this,arguments)}return s?t.call(e,i,s,callback):t.call(e,i,callback)}}function statFixSync(t){if(!t)return t;return function(i,s){var r=s?t.call(e,i,s):t.call(e,i);if(r){if(r.uid<0)r.uid+=4294967296;if(r.gid<0)r.gid+=4294967296}return r}}function chownErOk(e){if(!e)return true;if(e.code==="ENOSYS")return true;var t=!process.getuid||process.getuid()!==0;if(t){if(e.code==="EINVAL"||e.code==="EPERM")return true}return false}}},377:(e,t,i)=>{"use strict";const s=i(361).EventEmitter;const r=i(450);const n=i(17);const c=i(384);const a=Object.freeze({});let o=2e3;const h=i(37).platform()==="darwin";const f=process.env.WATCHPACK_POLLING;const l=`${+f}`===f?+f:!!f&&f!=="false";function withoutCase(e){return e.toLowerCase()}function needCalls(e,t){return function(){if(--e===0){return t()}}}class Watcher extends s{constructor(e,t,i){super();this.directoryWatcher=e;this.path=t;this.startTime=i&&+i}checkStartTime(e,t){const i=this.startTime;if(typeof i!=="number")return!t;return i<=e}close(){this.emit("closed")}}class DirectoryWatcher extends s{constructor(e,t,i){super();if(l){i.poll=l}this.watcherManager=e;this.options=i;this.path=t;this.files=new Map;this.filesWithoutCase=new Map;this.directories=new Map;this.lastWatchEvent=0;this.initialScan=true;this.ignored=i.ignored||(()=>false);this.nestedWatching=false;this.polledWatching=typeof i.poll==="number"?i.poll:i.poll?5007:false;this.timeout=undefined;this.initialScanRemoved=new Set;this.initialScanFinished=undefined;this.watchers=new Map;this.parentWatcher=null;this.refs=0;this._activeEvents=new Map;this.closed=false;this.scanning=false;this.scanAgain=false;this.scanAgainInitial=false;this.createWatcher();this.doScan(true)}createWatcher(){try{if(this.polledWatching){this.watcher={close:()=>{if(this.timeout){clearTimeout(this.timeout);this.timeout=undefined}}}}else{if(h){this.watchInParentDirectory()}this.watcher=c.watch(this.path);this.watcher.on("change",this.onWatchEvent.bind(this));this.watcher.on("error",this.onWatcherError.bind(this))}}catch(e){this.onWatcherError(e)}}forEachWatcher(e,t){const i=this.watchers.get(withoutCase(e));if(i!==undefined){for(const e of i){t(e)}}}setMissing(e,t,i){if(this.initialScan){this.initialScanRemoved.add(e)}const s=this.directories.get(e);if(s){if(this.nestedWatching)s.close();this.directories.delete(e);this.forEachWatcher(e,(e=>e.emit("remove",i)));if(!t){this.forEachWatcher(this.path,(s=>s.emit("change",e,null,i,t)))}}const r=this.files.get(e);if(r){this.files.delete(e);const s=withoutCase(e);const r=this.filesWithoutCase.get(s)-1;if(r<=0){this.filesWithoutCase.delete(s);this.forEachWatcher(e,(e=>e.emit("remove",i)))}else{this.filesWithoutCase.set(s,r)}if(!t){this.forEachWatcher(this.path,(s=>s.emit("change",e,null,i,t)))}}}setFileTime(e,t,i,s,r){const n=Date.now();if(this.ignored(e))return;const c=this.files.get(e);let a,h;if(i){a=Math.min(n,t)+o;h=o}else{a=n;h=0;if(c&&c.timestamp===t&&t+o{if(!i||e.checkStartTime(a,i)){e.emit("change",t,r)}}))}else if(!i){this.forEachWatcher(e,(e=>e.emit("change",t,r)))}this.forEachWatcher(this.path,(t=>{if(!i||t.checkStartTime(a,i)){t.emit("change",e,a,r,i)}}))}setDirectory(e,t,i,s){if(this.ignored(e))return;if(e===this.path){if(!i){this.forEachWatcher(this.path,(r=>r.emit("change",e,t,s,i)))}}else{const r=this.directories.get(e);if(!r){const r=Date.now();if(this.nestedWatching){this.createNestedWatcher(e)}else{this.directories.set(e,true)}let n;if(i){n=Math.min(r,t)+o}else{n=r}this.forEachWatcher(e,(e=>{if(!i||e.checkStartTime(n,false)){e.emit("change",t,s)}}));this.forEachWatcher(this.path,(t=>{if(!i||t.checkStartTime(n,i)){t.emit("change",e,n,s,i)}}))}}}createNestedWatcher(e){const t=this.watcherManager.watchDirectory(e,1);t.on("change",((e,t,i,s)=>{this.forEachWatcher(this.path,(r=>{if(!s||r.checkStartTime(t,s)){r.emit("change",e,t,i,s)}}))}));this.directories.set(e,t)}setNestedWatching(e){if(this.nestedWatching!==!!e){this.nestedWatching=!!e;if(this.nestedWatching){for(const e of this.directories.keys()){this.createNestedWatcher(e)}}else{for(const[e,t]of this.directories){t.close();this.directories.set(e,true)}}}}watch(e,t){const i=withoutCase(e);let s=this.watchers.get(i);if(s===undefined){s=new Set;this.watchers.set(i,s)}this.refs++;const r=new Watcher(this,e,t);r.on("closed",(()=>{if(--this.refs<=0){this.close();return}s.delete(r);if(s.size===0){this.watchers.delete(i);if(this.path===e)this.setNestedWatching(false)}}));s.add(r);let n;if(e===this.path){this.setNestedWatching(true);n=this.lastWatchEvent;for(const e of this.files.values()){fixupEntryAccuracy(e);n=Math.max(n,e.safeTime)}}else{const t=this.files.get(e);if(t){fixupEntryAccuracy(t);n=t.safeTime}else{n=0}}if(n){if(n>=t){process.nextTick((()=>{if(this.closed)return;if(e===this.path){r.emit("change",e,n,"watch (outdated on attach)",true)}else{r.emit("change",n,"watch (outdated on attach)",true)}}))}}else if(this.initialScan){if(this.initialScanRemoved.has(e)){process.nextTick((()=>{if(this.closed)return;r.emit("remove")}))}}else if(!this.directories.has(e)&&r.checkStartTime(this.initialScanFinished,false)){process.nextTick((()=>{if(this.closed)return;r.emit("initial-missing","watch (missing on attach)")}))}return r}onWatchEvent(e,t){if(this.closed)return;if(!t){this.doScan(false);return}const i=n.join(this.path,t);if(this.ignored(i))return;if(this._activeEvents.get(t)===undefined){this._activeEvents.set(t,false);const checkStats=()=>{if(this.closed)return;this._activeEvents.set(t,false);r.lstat(i,((s,c)=>{if(this.closed)return;if(this._activeEvents.get(t)===true){process.nextTick(checkStats);return}this._activeEvents.delete(t);if(s){if(s.code!=="ENOENT"&&s.code!=="EPERM"&&s.code!=="EBUSY"){this.onStatsError(s)}else{if(t===n.basename(this.path)){if(!r.existsSync(this.path)){this.onDirectoryRemoved("stat failed")}}}}this.lastWatchEvent=Date.now();if(!c){this.setMissing(i,false,e)}else if(c.isDirectory()){this.setDirectory(i,+c.birthtime||1,false,e)}else if(c.isFile()||c.isSymbolicLink()){if(c.mtime){ensureFsAccuracy(c.mtime)}this.setFileTime(i,+c.mtime||+c.ctime||1,false,false,e)}}))};process.nextTick(checkStats)}else{this._activeEvents.set(t,true)}}onWatcherError(e){if(this.closed)return;if(e){if(e.code!=="EPERM"&&e.code!=="ENOENT"){console.error("Watchpack Error (watcher): "+e)}this.onDirectoryRemoved("watch error")}}onStatsError(e){if(e){console.error("Watchpack Error (stats): "+e)}}onScanError(e){if(e){console.error("Watchpack Error (initial scan): "+e)}this.onScanFinished()}onScanFinished(){if(this.polledWatching){this.timeout=setTimeout((()=>{if(this.closed)return;this.doScan(false)}),this.polledWatching)}}onDirectoryRemoved(e){if(this.watcher){this.watcher.close();this.watcher=null}this.watchInParentDirectory();const t=`directory-removed (${e})`;for(const e of this.directories.keys()){this.setMissing(e,null,t)}for(const e of this.files.keys()){this.setMissing(e,null,t)}}watchInParentDirectory(){if(!this.parentWatcher){const e=n.dirname(this.path);if(n.dirname(e)===e)return;this.parentWatcher=this.watcherManager.watchFile(this.path,1);this.parentWatcher.on("change",((e,t)=>{if(this.closed)return;if((!h||this.polledWatching)&&this.parentWatcher){this.parentWatcher.close();this.parentWatcher=null}if(!this.watcher){this.createWatcher();this.doScan(false);this.forEachWatcher(this.path,(i=>i.emit("change",this.path,e,t,false)))}}));this.parentWatcher.on("remove",(()=>{this.onDirectoryRemoved("parent directory removed")}))}}doScan(e){if(this.scanning){if(this.scanAgain){if(!e)this.scanAgainInitial=false}else{this.scanAgain=true;this.scanAgainInitial=e}return}this.scanning=true;if(this.timeout){clearTimeout(this.timeout);this.timeout=undefined}process.nextTick((()=>{if(this.closed)return;r.readdir(this.path,((t,i)=>{if(this.closed)return;if(t){if(t.code==="ENOENT"||t.code==="EPERM"){this.onDirectoryRemoved("scan readdir failed")}else{this.onScanError(t)}this.initialScan=false;this.initialScanFinished=Date.now();if(e){for(const e of this.watchers.values()){for(const t of e){if(t.checkStartTime(this.initialScanFinished,false)){t.emit("initial-missing","scan (parent directory missing in initial scan)")}}}}if(this.scanAgain){this.scanAgain=false;this.doScan(this.scanAgainInitial)}else{this.scanning=false}return}const s=new Set(i.map((e=>n.join(this.path,e.normalize("NFC")))));for(const t of this.files.keys()){if(!s.has(t)){this.setMissing(t,e,"scan (missing)")}}for(const t of this.directories.keys()){if(!s.has(t)){this.setMissing(t,e,"scan (missing)")}}if(this.scanAgain){this.scanAgain=false;this.doScan(e);return}const c=needCalls(s.size+1,(()=>{if(this.closed)return;this.initialScan=false;this.initialScanRemoved=null;this.initialScanFinished=Date.now();if(e){const e=new Map(this.watchers);e.delete(withoutCase(this.path));for(const t of s){e.delete(withoutCase(t))}for(const t of e.values()){for(const e of t){if(e.checkStartTime(this.initialScanFinished,false)){e.emit("initial-missing","scan (missing in initial scan)")}}}}if(this.scanAgain){this.scanAgain=false;this.doScan(this.scanAgainInitial)}else{this.scanning=false;this.onScanFinished()}}));for(const t of s){r.lstat(t,((i,s)=>{if(this.closed)return;if(i){if(i.code==="ENOENT"||i.code==="EPERM"||i.code==="EACCES"||i.code==="EBUSY"){this.setMissing(t,e,"scan ("+i.code+")")}else{this.onScanError(i)}c();return}if(s.isFile()||s.isSymbolicLink()){if(s.mtime){ensureFsAccuracy(s.mtime)}this.setFileTime(t,+s.mtime||+s.ctime||1,e,true,"scan (file)")}else if(s.isDirectory()){if(!e||!this.directories.has(t))this.setDirectory(t,+s.birthtime||1,e,"scan (dir)")}c()}))}c()}))}))}getTimes(){const e=Object.create(null);let t=this.lastWatchEvent;for(const[i,s]of this.files){fixupEntryAccuracy(s);t=Math.max(t,s.safeTime);e[i]=Math.max(s.safeTime,s.timestamp)}if(this.nestedWatching){for(const i of this.directories.values()){const s=i.directoryWatcher.getTimes();for(const i of Object.keys(s)){const r=s[i];t=Math.max(t,r);e[i]=r}}e[this.path]=t}if(!this.initialScan){for(const t of this.watchers.values()){for(const i of t){const t=i.path;if(!Object.prototype.hasOwnProperty.call(e,t)){e[t]=null}}}}return e}collectTimeInfoEntries(e,t){let i=this.lastWatchEvent;for(const[t,s]of this.files){fixupEntryAccuracy(s);i=Math.max(i,s.safeTime);e.set(t,s)}if(this.nestedWatching){for(const s of this.directories.values()){i=Math.max(i,s.directoryWatcher.collectTimeInfoEntries(e,t))}e.set(this.path,a);t.set(this.path,{safeTime:i})}else{for(const i of this.directories.keys()){e.set(i,a);if(!t.has(i))t.set(i,a)}e.set(this.path,a);t.set(this.path,a)}if(!this.initialScan){for(const t of this.watchers.values()){for(const i of t){const t=i.path;if(!e.has(t)){e.set(t,null)}}}}return i}close(){this.closed=true;this.initialScan=false;if(this.watcher){this.watcher.close();this.watcher=null}if(this.nestedWatching){for(const e of this.directories.values()){e.close()}this.directories.clear()}if(this.parentWatcher){this.parentWatcher.close();this.parentWatcher=null}this.emit("closed")}}e.exports=DirectoryWatcher;e.exports.EXISTANCE_ONLY_TIME_ENTRY=a;function fixupEntryAccuracy(e){if(e.accuracy>o){e.safeTime=e.safeTime-e.accuracy+o;e.accuracy=o}}function ensureFsAccuracy(e){if(!e)return;if(o>1&&e%1!==0)o=1;else if(o>10&&e%10!==0)o=10;else if(o>100&&e%100!==0)o=100;else if(o>1e3&&e%1e3!==0)o=1e3}},73:(e,t,i)=>{"use strict";const s=i(147);const r=i(17);const n=new Set(["EINVAL","ENOENT"]);if(process.platform==="win32")n.add("UNKNOWN");class LinkResolver{constructor(){this.cache=new Map}resolve(e){const t=this.cache.get(e);if(t!==undefined){return t}const i=r.dirname(e);if(i===e){const t=Object.freeze([e]);this.cache.set(e,t);return t}const c=this.resolve(i);let a=e;if(c[0]!==i){const t=r.basename(e);a=r.resolve(c[0],t)}try{const t=s.readlinkSync(a);const i=r.resolve(c[0],t);const n=this.resolve(i);let o;if(n.length>1&&c.length>1){const e=new Set(n);e.add(a);for(let t=1;t1){o=c.slice();o[0]=n[0];o.push(a);Object.freeze(o)}else if(n.length>1){o=n.slice();o.push(a);Object.freeze(o)}else{o=Object.freeze([n[0],a])}this.cache.set(e,o);return o}catch(t){if(!n.has(t.code)){throw t}const i=c.slice();i[0]=a;Object.freeze(i);this.cache.set(e,i);return i}}}e.exports=LinkResolver},653:(e,t,i)=>{"use strict";const s=i(17);const r=i(377);class WatcherManager{constructor(e){this.options=e;this.directoryWatchers=new Map}getDirectoryWatcher(e){const t=this.directoryWatchers.get(e);if(t===undefined){const t=new r(this,e,this.options);this.directoryWatchers.set(e,t);t.on("closed",(()=>{this.directoryWatchers.delete(e)}));return t}return t}watchFile(e,t){const i=s.dirname(e);if(i===e)return null;return this.getDirectoryWatcher(i).watch(e,t)}watchDirectory(e,t){return this.getDirectoryWatcher(e).watch(e,t)}}const n=new WeakMap;e.exports=e=>{const t=n.get(e);if(t!==undefined)return t;const i=new WatcherManager(e);n.set(e,i);return i};e.exports.WatcherManager=WatcherManager},535:(e,t,i)=>{"use strict";const s=i(17);e.exports=(e,t)=>{const i=new Map;for(const[t,s]of e){i.set(t,{filePath:t,parent:undefined,children:undefined,entries:1,active:true,value:s})}let r=i.size;for(const e of i.values()){const t=s.dirname(e.filePath);if(t!==e.filePath){let s=i.get(t);if(s===undefined){s={filePath:t,parent:undefined,children:[e],entries:e.entries,active:false,value:undefined};i.set(t,s);e.parent=s}else{e.parent=s;if(s.children===undefined){s.children=[e]}else{s.children.push(e)}do{s.entries+=e.entries;s=s.parent}while(s)}}}while(r>t){const e=r-t;let s=undefined;let n=Infinity;for(const r of i.values()){if(r.entries<=1||!r.children||!r.parent)continue;if(r.children.length===0)continue;if(r.children.length===1&&!r.value)continue;const i=r.entries-1>=e?r.entries-1-e:e-r.entries+1+t*.3;if(i{"use strict";const s=i(147);const r=i(17);const{EventEmitter:n}=i(361);const c=i(535);const a=i(37).platform()==="darwin";const o=i(37).platform()==="win32";const h=a||o;const f=+process.env.WATCHPACK_WATCHER_LIMIT||(a?2e3:1e4);const l=!!process.env.WATCHPACK_RECURSIVE_WATCHER_LOGGING;let u=false;let d=0;const p=new Map;const m=new Map;const g=new Map;const y=new Map;class DirectWatcher{constructor(e){this.filePath=e;this.watchers=new Set;this.watcher=undefined;try{const t=s.watch(e);this.watcher=t;t.on("change",((e,t)=>{for(const i of this.watchers){i.emit("change",e,t)}}));t.on("error",(e=>{for(const t of this.watchers){t.emit("error",e)}}))}catch(e){process.nextTick((()=>{for(const t of this.watchers){t.emit("error",e)}}))}d++}add(e){y.set(e,this);this.watchers.add(e)}remove(e){this.watchers.delete(e);if(this.watchers.size===0){g.delete(this.filePath);d--;if(this.watcher)this.watcher.close()}}getWatchers(){return this.watchers}}class RecursiveWatcher{constructor(e){this.rootPath=e;this.mapWatcherToPath=new Map;this.mapPathToWatchers=new Map;this.watcher=undefined;try{const t=s.watch(e,{recursive:true});this.watcher=t;t.on("change",((e,t)=>{if(!t){if(l){process.stderr.write(`[watchpack] dispatch ${e} event in recursive watcher (${this.rootPath}) to all watchers\n`)}for(const t of this.mapWatcherToPath.keys()){t.emit("change",e)}}else{const i=r.dirname(t);const s=this.mapPathToWatchers.get(i);if(l){process.stderr.write(`[watchpack] dispatch ${e} event in recursive watcher (${this.rootPath}) for '${t}' to ${s?s.size:0} watchers\n`)}if(s===undefined)return;for(const i of s){i.emit("change",e,r.basename(t))}}}));t.on("error",(e=>{for(const t of this.mapWatcherToPath.keys()){t.emit("error",e)}}))}catch(e){process.nextTick((()=>{for(const t of this.mapWatcherToPath.keys()){t.emit("error",e)}}))}d++;if(l){process.stderr.write(`[watchpack] created recursive watcher at ${e}\n`)}}add(e,t){y.set(t,this);const i=e.slice(this.rootPath.length+1)||".";this.mapWatcherToPath.set(t,i);const s=this.mapPathToWatchers.get(i);if(s===undefined){const e=new Set;e.add(t);this.mapPathToWatchers.set(i,e)}else{s.add(t)}}remove(e){const t=this.mapWatcherToPath.get(e);if(!t)return;this.mapWatcherToPath.delete(e);const i=this.mapPathToWatchers.get(t);i.delete(e);if(i.size===0){this.mapPathToWatchers.delete(t)}if(this.mapWatcherToPath.size===0){m.delete(this.rootPath);d--;if(this.watcher)this.watcher.close();if(l){process.stderr.write(`[watchpack] closed recursive watcher at ${this.rootPath}\n`)}}}getWatchers(){return this.mapWatcherToPath}}class Watcher extends n{close(){if(p.has(this)){p.delete(this);return}const e=y.get(this);e.remove(this);y.delete(this)}}const createDirectWatcher=e=>{const t=g.get(e);if(t!==undefined)return t;const i=new DirectWatcher(e);g.set(e,i);return i};const createRecursiveWatcher=e=>{const t=m.get(e);if(t!==undefined)return t;const i=new RecursiveWatcher(e);m.set(e,i);return i};const execute=()=>{const e=new Map;const addWatcher=(t,i)=>{const s=e.get(i);if(s===undefined){e.set(i,t)}else if(Array.isArray(s)){s.push(t)}else{e.set(i,[s,t])}};for(const[e,t]of p){addWatcher(e,t)}p.clear();if(!h||f-d>=e.size){for(const[t,i]of e){const e=createDirectWatcher(t);if(Array.isArray(i)){for(const t of i)e.add(t)}else{e.add(i)}}return}for(const e of m.values()){for(const[t,i]of e.getWatchers()){addWatcher(t,r.join(e.rootPath,i))}}for(const e of g.values()){for(const t of e.getWatchers()){addWatcher(t,e.filePath)}}const t=c(e,f*.9);for(const[e,i]of t){if(i.size===1){for(const[e,t]of i){const i=createDirectWatcher(t);const s=y.get(e);if(s===i)continue;i.add(e);if(s!==undefined)s.remove(e)}}else{const t=new Set(i.values());if(t.size>1){const t=createRecursiveWatcher(e);for(const[e,s]of i){const i=y.get(e);if(i===t)continue;t.add(s,e);if(i!==undefined)i.remove(e)}}else{for(const e of t){const t=createDirectWatcher(e);for(const e of i.keys()){const i=y.get(e);if(i===t)continue;t.add(e);if(i!==undefined)i.remove(e)}}}}}};t.watch=e=>{const t=new Watcher;const i=g.get(e);if(i!==undefined){i.add(t);return t}let s=e;for(;;){const i=m.get(s);if(i!==undefined){i.add(e,t);return t}const n=r.dirname(s);if(n===s)break;s=n}p.set(t,e);if(!u)execute();return t};t.batch=e=>{u=true;try{e()}finally{u=false;execute()}};t.getNumberOfWatchers=()=>d},747:(e,t,i)=>{"use strict";const s=i(653);const r=i(73);const n=i(361).EventEmitter;const c=i(660);const a=i(384);const o=[];const h={};function addWatchersToSet(e,t){for(const i of e){const e=i.watcher;if(!t.has(e.directoryWatcher)){t.add(e.directoryWatcher)}}}const stringToRegexp=e=>{const t=c(e,{globstar:true,extended:true}).source;const i=t.slice(0,t.length-1)+"(?:$|\\/)";return i};const ignoredToFunction=e=>{if(Array.isArray(e)){const t=new RegExp(e.map((e=>stringToRegexp(e))).join("|"));return e=>t.test(e.replace(/\\/g,"/"))}else if(typeof e==="string"){const t=new RegExp(stringToRegexp(e));return e=>t.test(e.replace(/\\/g,"/"))}else if(e instanceof RegExp){return t=>e.test(t.replace(/\\/g,"/"))}else if(e instanceof Function){return e}else if(e){throw new Error(`Invalid option for 'ignored': ${e}`)}else{return()=>false}};const normalizeOptions=e=>({followSymlinks:!!e.followSymlinks,ignored:ignoredToFunction(e.ignored),poll:e.poll});const f=new WeakMap;const cachedNormalizeOptions=e=>{const t=f.get(e);if(t!==undefined)return t;const i=normalizeOptions(e);f.set(e,i);return i};class WatchpackFileWatcher{constructor(e,t,i){this.files=Array.isArray(i)?i:[i];this.watcher=t;t.on("initial-missing",(t=>{for(const i of this.files){if(!e._missing.has(i))e._onRemove(i,i,t)}}));t.on("change",((t,i)=>{for(const s of this.files){e._onChange(s,t,s,i)}}));t.on("remove",(t=>{for(const i of this.files){e._onRemove(i,i,t)}}))}update(e){if(!Array.isArray(e)){if(this.files.length!==1){this.files=[e]}else if(this.files[0]!==e){this.files[0]=e}}else{this.files=e}}close(){this.watcher.close()}}class WatchpackDirectoryWatcher{constructor(e,t,i){this.directories=Array.isArray(i)?i:[i];this.watcher=t;t.on("initial-missing",(t=>{for(const i of this.directories){e._onRemove(i,i,t)}}));t.on("change",((t,i,s)=>{for(const r of this.directories){e._onChange(r,i,t,s)}}));t.on("remove",(t=>{for(const i of this.directories){e._onRemove(i,i,t)}}))}update(e){if(!Array.isArray(e)){if(this.directories.length!==1){this.directories=[e]}else if(this.directories[0]!==e){this.directories[0]=e}}else{this.directories=e}}close(){this.watcher.close()}}class Watchpack extends n{constructor(e){super();if(!e)e=h;this.options=e;this.aggregateTimeout=typeof e.aggregateTimeout==="number"?e.aggregateTimeout:200;this.watcherOptions=cachedNormalizeOptions(e);this.watcherManager=s(this.watcherOptions);this.fileWatchers=new Map;this.directoryWatchers=new Map;this._missing=new Set;this.startTime=undefined;this.paused=false;this.aggregatedChanges=new Set;this.aggregatedRemovals=new Set;this.aggregateTimer=undefined;this._onTimeout=this._onTimeout.bind(this)}watch(e,t,i){let s,n,c,h;if(!t){({files:s=o,directories:n=o,missing:c=o,startTime:h}=e)}else{s=e;n=t;c=o;h=i}this.paused=false;const f=this.fileWatchers;const l=this.directoryWatchers;const u=this.watcherOptions.ignored;const filter=e=>!u(e);const addToMap=(e,t,i)=>{const s=e.get(t);if(s===undefined){e.set(t,i)}else if(Array.isArray(s)){s.push(i)}else{e.set(t,[s,i])}};const d=new Map;const p=new Map;const m=new Set;if(this.watcherOptions.followSymlinks){const e=new r;for(const t of s){if(filter(t)){for(const i of e.resolve(t)){if(t===i||filter(i)){addToMap(d,i,t)}}}}for(const t of c){if(filter(t)){for(const i of e.resolve(t)){if(t===i||filter(i)){m.add(t);addToMap(d,i,t)}}}}for(const t of n){if(filter(t)){let i=true;for(const s of e.resolve(t)){if(filter(s)){addToMap(i?p:d,s,t)}i=false}}}}else{for(const e of s){if(filter(e)){addToMap(d,e,e)}}for(const e of c){if(filter(e)){m.add(e);addToMap(d,e,e)}}for(const e of n){if(filter(e)){addToMap(p,e,e)}}}for(const[e,t]of f){const i=d.get(e);if(i===undefined){t.close();f.delete(e)}else{t.update(i);d.delete(e)}}for(const[e,t]of l){const i=p.get(e);if(i===undefined){t.close();l.delete(e)}else{t.update(i);p.delete(e)}}a.batch((()=>{for(const[e,t]of d){const i=this.watcherManager.watchFile(e,h);if(i){f.set(e,new WatchpackFileWatcher(this,i,t))}}for(const[e,t]of p){const i=this.watcherManager.watchDirectory(e,h);if(i){l.set(e,new WatchpackDirectoryWatcher(this,i,t))}}}));this._missing=m;this.startTime=h}close(){this.paused=true;if(this.aggregateTimer)clearTimeout(this.aggregateTimer);for(const e of this.fileWatchers.values())e.close();for(const e of this.directoryWatchers.values())e.close();this.fileWatchers.clear();this.directoryWatchers.clear()}pause(){this.paused=true;if(this.aggregateTimer)clearTimeout(this.aggregateTimer)}getTimes(){const e=new Set;addWatchersToSet(this.fileWatchers.values(),e);addWatchersToSet(this.directoryWatchers.values(),e);const t=Object.create(null);for(const i of e){const e=i.getTimes();for(const i of Object.keys(e))t[i]=e[i]}return t}getTimeInfoEntries(){const e=new Map;this.collectTimeInfoEntries(e,e);return e}collectTimeInfoEntries(e,t){const i=new Set;addWatchersToSet(this.fileWatchers.values(),i);addWatchersToSet(this.directoryWatchers.values(),i);const s={value:0};for(const r of i){r.collectTimeInfoEntries(e,t,s)}}getAggregated(){if(this.aggregateTimer){clearTimeout(this.aggregateTimer);this.aggregateTimer=undefined}const e=this.aggregatedChanges;const t=this.aggregatedRemovals;this.aggregatedChanges=new Set;this.aggregatedRemovals=new Set;return{changes:e,removals:t}}_onChange(e,t,i,s){i=i||e;if(!this.paused){this.emit("change",i,t,s);if(this.aggregateTimer)clearTimeout(this.aggregateTimer);this.aggregateTimer=setTimeout(this._onTimeout,this.aggregateTimeout)}this.aggregatedRemovals.delete(e);this.aggregatedChanges.add(e)}_onRemove(e,t,i){t=t||e;if(!this.paused){this.emit("remove",t,i);if(this.aggregateTimer)clearTimeout(this.aggregateTimer);this.aggregateTimer=setTimeout(this._onTimeout,this.aggregateTimeout)}this.aggregatedChanges.delete(e);this.aggregatedRemovals.add(e)}_onTimeout(){this.aggregateTimer=undefined;const e=this.aggregatedChanges;const t=this.aggregatedRemovals;this.aggregatedChanges=new Set;this.aggregatedRemovals=new Set;this.emit("aggregated",e,t)}}e.exports=Watchpack},491:e=>{"use strict";e.exports=require("assert")},57:e=>{"use strict";e.exports=require("constants")},361:e=>{"use strict";e.exports=require("events")},147:e=>{"use strict";e.exports=require("fs")},37:e=>{"use strict";e.exports=require("os")},17:e=>{"use strict";e.exports=require("path")},781:e=>{"use strict";e.exports=require("stream")},837:e=>{"use strict";e.exports=require("util")}};var t={};function __nccwpck_require__(i){var s=t[i];if(s!==undefined){return s.exports}var r=t[i]={exports:{}};var n=true;try{e[i](r,r.exports,__nccwpck_require__);n=false}finally{if(n)delete t[i]}return r.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var i=__nccwpck_require__(747);module.exports=i})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/ws/index.js b/build/node_modules/next/dist/compiled/ws/index.js new file mode 100644 index 0000000..1ccdf5f --- /dev/null +++ b/build/node_modules/next/dist/compiled/ws/index.js @@ -0,0 +1 @@ +(()=>{var __webpack_modules__={28:(e,t,s)=>{"use strict";const r=s(335);r.createWebSocketStream=s(551);r.Server=s(597);r.Receiver=s(157);r.Sender=s(769);r.WebSocket=r;r.WebSocketServer=r.Server;e.exports=r},214:(e,t,s)=>{"use strict";const{EMPTY_BUFFER:r}=s(217);function concat(e,t){if(e.length===0)return r;if(e.length===1)return e[0];const s=Buffer.allocUnsafe(t);let n=0;for(let t=0;t{"use strict";e.exports={BINARY_TYPES:["nodebuffer","arraybuffer","fragments"],EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}},874:(e,t,s)=>{"use strict";const{kForOnEventAttribute:r,kListener:n}=s(217);const i=Symbol("kCode");const o=Symbol("kData");const a=Symbol("kError");const c=Symbol("kMessage");const l=Symbol("kReason");const f=Symbol("kTarget");const h=Symbol("kType");const d=Symbol("kWasClean");class Event{constructor(e){this[f]=null;this[h]=e}get target(){return this[f]}get type(){return this[h]}}Object.defineProperty(Event.prototype,"target",{enumerable:true});Object.defineProperty(Event.prototype,"type",{enumerable:true});class CloseEvent extends Event{constructor(e,t={}){super(e);this[i]=t.code===undefined?0:t.code;this[l]=t.reason===undefined?"":t.reason;this[d]=t.wasClean===undefined?false:t.wasClean}get code(){return this[i]}get reason(){return this[l]}get wasClean(){return this[d]}}Object.defineProperty(CloseEvent.prototype,"code",{enumerable:true});Object.defineProperty(CloseEvent.prototype,"reason",{enumerable:true});Object.defineProperty(CloseEvent.prototype,"wasClean",{enumerable:true});class ErrorEvent extends Event{constructor(e,t={}){super(e);this[a]=t.error===undefined?null:t.error;this[c]=t.message===undefined?"":t.message}get error(){return this[a]}get message(){return this[c]}}Object.defineProperty(ErrorEvent.prototype,"error",{enumerable:true});Object.defineProperty(ErrorEvent.prototype,"message",{enumerable:true});class MessageEvent extends Event{constructor(e,t={}){super(e);this[o]=t.data===undefined?null:t.data}get data(){return this[o]}}Object.defineProperty(MessageEvent.prototype,"data",{enumerable:true});const u={addEventListener(e,t,s={}){let i;if(e==="message"){i=function onMessage(e,s){const r=new MessageEvent("message",{data:s?e:e.toString()});r[f]=this;t.call(this,r)}}else if(e==="close"){i=function onClose(e,s){const r=new CloseEvent("close",{code:e,reason:s.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});r[f]=this;t.call(this,r)}}else if(e==="error"){i=function onError(e){const s=new ErrorEvent("error",{error:e,message:e.message});s[f]=this;t.call(this,s)}}else if(e==="open"){i=function onOpen(){const e=new Event("open");e[f]=this;t.call(this,e)}}else{return}i[r]=!!s[r];i[n]=t;if(s.once){this.once(e,i)}else{this.on(e,i)}},removeEventListener(e,t){for(const s of this.listeners(e)){if(s[n]===t&&!s[r]){this.removeListener(e,s);break}}}};e.exports={CloseEvent:CloseEvent,ErrorEvent:ErrorEvent,Event:Event,EventTarget:u,MessageEvent:MessageEvent}},725:(e,t,s)=>{"use strict";const{tokenChars:r}=s(848);function push(e,t,s){if(e[t]===undefined)e[t]=[s];else e[t].push(s)}function parse(e){const t=Object.create(null);let s=Object.create(null);let n=false;let i=false;let o=false;let a;let c;let l=-1;let f=-1;let h=-1;let d=0;for(;d{let s=e[t];if(!Array.isArray(s))s=[s];return s.map((e=>[t].concat(Object.keys(e).map((t=>{let s=e[t];if(!Array.isArray(s))s=[s];return s.map((e=>e===true?t:`${t}=${e}`)).join("; ")}))).join("; "))).join(", ")})).join(", ")}e.exports={format:format,parse:parse}},462:e=>{"use strict";const t=Symbol("kDone");const s=Symbol("kRun");class Limiter{constructor(e){this[t]=()=>{this.pending--;this[s]()};this.concurrency=e||Infinity;this.jobs=[];this.pending=0}add(e){this.jobs.push(e);this[s]()}[s](){if(this.pending===this.concurrency)return;if(this.jobs.length){const e=this.jobs.shift();this.pending++;e(this[t])}}}e.exports=Limiter},290:(e,t,s)=>{"use strict";const r=s(796);const n=s(214);const i=s(462);const{kStatusCode:o}=s(217);const a=Buffer.from([0,0,255,255]);const c=Symbol("permessage-deflate");const l=Symbol("total-length");const f=Symbol("callback");const h=Symbol("buffers");const d=Symbol("error");let u;class PerMessageDeflate{constructor(e,t,s){this._maxPayload=s|0;this._options=e||{};this._threshold=this._options.threshold!==undefined?this._options.threshold:1024;this._isServer=!!t;this._deflate=null;this._inflate=null;this.params=null;if(!u){const e=this._options.concurrencyLimit!==undefined?this._options.concurrencyLimit:10;u=new i(e)}}static get extensionName(){return"permessage-deflate"}offer(){const e={};if(this._options.serverNoContextTakeover){e.server_no_context_takeover=true}if(this._options.clientNoContextTakeover){e.client_no_context_takeover=true}if(this._options.serverMaxWindowBits){e.server_max_window_bits=this._options.serverMaxWindowBits}if(this._options.clientMaxWindowBits){e.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits==null){e.client_max_window_bits=true}return e}accept(e){e=this.normalizeParams(e);this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e);return this.params}cleanup(){if(this._inflate){this._inflate.close();this._inflate=null}if(this._deflate){const e=this._deflate[f];this._deflate.close();this._deflate=null;if(e){e(new Error("The deflate stream was closed while data was being processed"))}}}acceptAsServer(e){const t=this._options;const s=e.find((e=>{if(t.serverNoContextTakeover===false&&e.server_no_context_takeover||e.server_max_window_bits&&(t.serverMaxWindowBits===false||typeof t.serverMaxWindowBits==="number"&&t.serverMaxWindowBits>e.server_max_window_bits)||typeof t.clientMaxWindowBits==="number"&&!e.client_max_window_bits){return false}return true}));if(!s){throw new Error("None of the extension offers can be accepted")}if(t.serverNoContextTakeover){s.server_no_context_takeover=true}if(t.clientNoContextTakeover){s.client_no_context_takeover=true}if(typeof t.serverMaxWindowBits==="number"){s.server_max_window_bits=t.serverMaxWindowBits}if(typeof t.clientMaxWindowBits==="number"){s.client_max_window_bits=t.clientMaxWindowBits}else if(s.client_max_window_bits===true||t.clientMaxWindowBits===false){delete s.client_max_window_bits}return s}acceptAsClient(e){const t=e[0];if(this._options.clientNoContextTakeover===false&&t.client_no_context_takeover){throw new Error('Unexpected parameter "client_no_context_takeover"')}if(!t.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number"){t.client_max_window_bits=this._options.clientMaxWindowBits}}else if(this._options.clientMaxWindowBits===false||typeof this._options.clientMaxWindowBits==="number"&&t.client_max_window_bits>this._options.clientMaxWindowBits){throw new Error('Unexpected or invalid parameter "client_max_window_bits"')}return t}normalizeParams(e){e.forEach((e=>{Object.keys(e).forEach((t=>{let s=e[t];if(s.length>1){throw new Error(`Parameter "${t}" must have only a single value`)}s=s[0];if(t==="client_max_window_bits"){if(s!==true){const e=+s;if(!Number.isInteger(e)||e<8||e>15){throw new TypeError(`Invalid value for parameter "${t}": ${s}`)}s=e}else if(!this._isServer){throw new TypeError(`Invalid value for parameter "${t}": ${s}`)}}else if(t==="server_max_window_bits"){const e=+s;if(!Number.isInteger(e)||e<8||e>15){throw new TypeError(`Invalid value for parameter "${t}": ${s}`)}s=e}else if(t==="client_no_context_takeover"||t==="server_no_context_takeover"){if(s!==true){throw new TypeError(`Invalid value for parameter "${t}": ${s}`)}}else{throw new Error(`Unknown parameter "${t}"`)}e[t]=s}))}));return e}decompress(e,t,s){u.add((r=>{this._decompress(e,t,((e,t)=>{r();s(e,t)}))}))}compress(e,t,s){u.add((r=>{this._compress(e,t,((e,t)=>{r();s(e,t)}))}))}_decompress(e,t,s){const i=this._isServer?"client":"server";if(!this._inflate){const e=`${i}_max_window_bits`;const t=typeof this.params[e]!=="number"?r.Z_DEFAULT_WINDOWBITS:this.params[e];this._inflate=r.createInflateRaw({...this._options.zlibInflateOptions,windowBits:t});this._inflate[c]=this;this._inflate[l]=0;this._inflate[h]=[];this._inflate.on("error",inflateOnError);this._inflate.on("data",inflateOnData)}this._inflate[f]=s;this._inflate.write(e);if(t)this._inflate.write(a);this._inflate.flush((()=>{const e=this._inflate[d];if(e){this._inflate.close();this._inflate=null;s(e);return}const r=n.concat(this._inflate[h],this._inflate[l]);if(this._inflate._readableState.endEmitted){this._inflate.close();this._inflate=null}else{this._inflate[l]=0;this._inflate[h]=[];if(t&&this.params[`${i}_no_context_takeover`]){this._inflate.reset()}}s(null,r)}))}_compress(e,t,s){const i=this._isServer?"server":"client";if(!this._deflate){const e=`${i}_max_window_bits`;const t=typeof this.params[e]!=="number"?r.Z_DEFAULT_WINDOWBITS:this.params[e];this._deflate=r.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:t});this._deflate[l]=0;this._deflate[h]=[];this._deflate.on("data",deflateOnData)}this._deflate[f]=s;this._deflate.write(e);this._deflate.flush(r.Z_SYNC_FLUSH,(()=>{if(!this._deflate){return}let e=n.concat(this._deflate[h],this._deflate[l]);if(t)e=e.slice(0,e.length-4);this._deflate[f]=null;this._deflate[l]=0;this._deflate[h]=[];if(t&&this.params[`${i}_no_context_takeover`]){this._deflate.reset()}s(null,e)}))}}e.exports=PerMessageDeflate;function deflateOnData(e){this[h].push(e);this[l]+=e.length}function inflateOnData(e){this[l]+=e.length;if(this[c]._maxPayload<1||this[l]<=this[c]._maxPayload){this[h].push(e);return}this[d]=new RangeError("Max payload size exceeded");this[d].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH";this[d][o]=1009;this.removeListener("data",inflateOnData);this.reset()}function inflateOnError(e){this[c]._inflate=null;e[o]=1007;this[f](e)}},157:(e,t,s)=>{"use strict";const{Writable:r}=s(781);const n=s(290);const{BINARY_TYPES:i,EMPTY_BUFFER:o,kStatusCode:a,kWebSocket:c}=s(217);const{concat:l,toArrayBuffer:f,unmask:h}=s(214);const{isValidStatusCode:d,isValidUTF8:u}=s(848);const _=0;const p=1;const m=2;const b=3;const y=4;const S=5;class Receiver extends r{constructor(e={}){super();this._binaryType=e.binaryType||i[0];this._extensions=e.extensions||{};this._isServer=!!e.isServer;this._maxPayload=e.maxPayload|0;this._skipUTF8Validation=!!e.skipUTF8Validation;this[c]=undefined;this._bufferedBytes=0;this._buffers=[];this._compressed=false;this._payloadLength=0;this._mask=undefined;this._fragmented=0;this._masked=false;this._fin=false;this._opcode=0;this._totalPayloadLength=0;this._messageLength=0;this._fragments=[];this._state=_;this._loop=false}_write(e,t,s){if(this._opcode===8&&this._state==_)return s();this._bufferedBytes+=e.length;this._buffers.push(e);this.startLoop(s)}consume(e){this._bufferedBytes-=e;if(e===this._buffers[0].length)return this._buffers.shift();if(e=s.length){t.set(this._buffers.shift(),r)}else{t.set(new Uint8Array(s.buffer,s.byteOffset,e),r);this._buffers[0]=s.slice(e)}e-=s.length}while(e>0);return t}startLoop(e){let t;this._loop=true;do{switch(this._state){case _:t=this.getInfo();break;case p:t=this.getPayloadLength16();break;case m:t=this.getPayloadLength64();break;case b:this.getMask();break;case y:t=this.getData(e);break;default:this._loop=false;return}}while(this._loop);e(t)}getInfo(){if(this._bufferedBytes<2){this._loop=false;return}const e=this.consume(2);if((e[0]&48)!==0){this._loop=false;return error(RangeError,"RSV2 and RSV3 must be clear",true,1002,"WS_ERR_UNEXPECTED_RSV_2_3")}const t=(e[0]&64)===64;if(t&&!this._extensions[n.extensionName]){this._loop=false;return error(RangeError,"RSV1 must be clear",true,1002,"WS_ERR_UNEXPECTED_RSV_1")}this._fin=(e[0]&128)===128;this._opcode=e[0]&15;this._payloadLength=e[1]&127;if(this._opcode===0){if(t){this._loop=false;return error(RangeError,"RSV1 must be clear",true,1002,"WS_ERR_UNEXPECTED_RSV_1")}if(!this._fragmented){this._loop=false;return error(RangeError,"invalid opcode 0",true,1002,"WS_ERR_INVALID_OPCODE")}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){this._loop=false;return error(RangeError,`invalid opcode ${this._opcode}`,true,1002,"WS_ERR_INVALID_OPCODE")}this._compressed=t}else if(this._opcode>7&&this._opcode<11){if(!this._fin){this._loop=false;return error(RangeError,"FIN must be set",true,1002,"WS_ERR_EXPECTED_FIN")}if(t){this._loop=false;return error(RangeError,"RSV1 must be clear",true,1002,"WS_ERR_UNEXPECTED_RSV_1")}if(this._payloadLength>125){this._loop=false;return error(RangeError,`invalid payload length ${this._payloadLength}`,true,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH")}}else{this._loop=false;return error(RangeError,`invalid opcode ${this._opcode}`,true,1002,"WS_ERR_INVALID_OPCODE")}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;this._masked=(e[1]&128)===128;if(this._isServer){if(!this._masked){this._loop=false;return error(RangeError,"MASK must be set",true,1002,"WS_ERR_EXPECTED_MASK")}}else if(this._masked){this._loop=false;return error(RangeError,"MASK must be clear",true,1002,"WS_ERR_UNEXPECTED_MASK")}if(this._payloadLength===126)this._state=p;else if(this._payloadLength===127)this._state=m;else return this.haveLength()}getPayloadLength16(){if(this._bufferedBytes<2){this._loop=false;return}this._payloadLength=this.consume(2).readUInt16BE(0);return this.haveLength()}getPayloadLength64(){if(this._bufferedBytes<8){this._loop=false;return}const e=this.consume(8);const t=e.readUInt32BE(0);if(t>Math.pow(2,53-32)-1){this._loop=false;return error(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",false,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH")}this._payloadLength=t*Math.pow(2,32)+e.readUInt32BE(4);return this.haveLength()}haveLength(){if(this._payloadLength&&this._opcode<8){this._totalPayloadLength+=this._payloadLength;if(this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){this._loop=false;return error(RangeError,"Max payload size exceeded",false,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH")}}if(this._masked)this._state=b;else this._state=y}getMask(){if(this._bufferedBytes<4){this._loop=false;return}this._mask=this.consume(4);this._state=y}getData(e){let t=o;if(this._payloadLength){if(this._bufferedBytes7)return this.controlMessage(t);if(this._compressed){this._state=S;this.decompress(t,e);return}if(t.length){this._messageLength=this._totalPayloadLength;this._fragments.push(t)}return this.dataMessage()}decompress(e,t){const s=this._extensions[n.extensionName];s.decompress(e,this._fin,((e,s)=>{if(e)return t(e);if(s.length){this._messageLength+=s.length;if(this._messageLength>this._maxPayload&&this._maxPayload>0){return t(error(RangeError,"Max payload size exceeded",false,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH"))}this._fragments.push(s)}const r=this.dataMessage();if(r)return t(r);this.startLoop(t)}))}dataMessage(){if(this._fin){const e=this._messageLength;const t=this._fragments;this._totalPayloadLength=0;this._messageLength=0;this._fragmented=0;this._fragments=[];if(this._opcode===2){let s;if(this._binaryType==="nodebuffer"){s=l(t,e)}else if(this._binaryType==="arraybuffer"){s=f(l(t,e))}else{s=t}this.emit("message",s,true)}else{const s=l(t,e);if(!this._skipUTF8Validation&&!u(s)){this._loop=false;return error(Error,"invalid UTF-8 sequence",true,1007,"WS_ERR_INVALID_UTF8")}this.emit("message",s,false)}}this._state=_}controlMessage(e){if(this._opcode===8){this._loop=false;if(e.length===0){this.emit("conclude",1005,o);this.end()}else if(e.length===1){return error(RangeError,"invalid payload length 1",true,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH")}else{const t=e.readUInt16BE(0);if(!d(t)){return error(RangeError,`invalid status code ${t}`,true,1002,"WS_ERR_INVALID_CLOSE_CODE")}const s=e.slice(2);if(!this._skipUTF8Validation&&!u(s)){return error(Error,"invalid UTF-8 sequence",true,1007,"WS_ERR_INVALID_UTF8")}this.emit("conclude",t,s);this.end()}}else if(this._opcode===9){this.emit("ping",e)}else{this.emit("pong",e)}this._state=_}}e.exports=Receiver;function error(e,t,s,r,n){const i=new e(s?`Invalid WebSocket frame: ${t}`:t);Error.captureStackTrace(i,error);i.code=n;i[a]=r;return i}},769:(e,t,s)=>{"use strict";const r=s(808);const n=s(404);const{randomFillSync:i}=s(113);const o=s(290);const{EMPTY_BUFFER:a}=s(217);const{isValidStatusCode:c}=s(848);const{mask:l,toBuffer:f}=s(214);const h=Buffer.alloc(4);class Sender{constructor(e,t){this._extensions=t||{};this._socket=e;this._firstFragment=true;this._compress=false;this._bufferedBytes=0;this._deflating=false;this._queue=[]}static frame(e,t){const s=t.mask&&t.readOnly;let r=t.mask?6:2;let n=e.length;if(e.length>=65536){r+=8;n=127}else if(e.length>125){r+=2;n=126}const o=Buffer.allocUnsafe(s?e.length+r:r);o[0]=t.fin?t.opcode|128:t.opcode;if(t.rsv1)o[0]|=64;o[1]=n;if(n===126){o.writeUInt16BE(e.length,2)}else if(n===127){o.writeUInt32BE(0,2);o.writeUInt32BE(e.length,6)}if(!t.mask)return[o,e];i(h,0,4);o[1]|=128;o[r-4]=h[0];o[r-3]=h[1];o[r-2]=h[2];o[r-1]=h[3];if(s){l(e,h,o,r,e.length);return[o]}l(e,h,e,0,e.length);return[o,e]}close(e,t,s,r){let n;if(e===undefined){n=a}else if(typeof e!=="number"||!c(e)){throw new TypeError("First argument must be a valid error code number")}else if(t===undefined||!t.length){n=Buffer.allocUnsafe(2);n.writeUInt16BE(e,0)}else{const s=Buffer.byteLength(t);if(s>123){throw new RangeError("The message must not be greater than 123 bytes")}n=Buffer.allocUnsafe(2+s);n.writeUInt16BE(e,0);if(typeof t==="string"){n.write(t,2)}else{n.set(t,2)}}if(this._deflating){this.enqueue([this.doClose,n,s,r])}else{this.doClose(n,s,r)}}doClose(e,t,s){this.sendFrame(Sender.frame(e,{fin:true,rsv1:false,opcode:8,mask:t,readOnly:false}),s)}ping(e,t,s){const r=f(e);if(r.length>125){throw new RangeError("The data size must not be greater than 125 bytes")}if(this._deflating){this.enqueue([this.doPing,r,t,f.readOnly,s])}else{this.doPing(r,t,f.readOnly,s)}}doPing(e,t,s,r){this.sendFrame(Sender.frame(e,{fin:true,rsv1:false,opcode:9,mask:t,readOnly:s}),r)}pong(e,t,s){const r=f(e);if(r.length>125){throw new RangeError("The data size must not be greater than 125 bytes")}if(this._deflating){this.enqueue([this.doPong,r,t,f.readOnly,s])}else{this.doPong(r,t,f.readOnly,s)}}doPong(e,t,s,r){this.sendFrame(Sender.frame(e,{fin:true,rsv1:false,opcode:10,mask:t,readOnly:s}),r)}send(e,t,s){const r=f(e);const n=this._extensions[o.extensionName];let i=t.binary?2:1;let a=t.compress;if(this._firstFragment){this._firstFragment=false;if(a&&n&&n.params[n._isServer?"server_no_context_takeover":"client_no_context_takeover"]){a=r.length>=n._threshold}this._compress=a}else{a=false;i=0}if(t.fin)this._firstFragment=true;if(n){const e={fin:t.fin,rsv1:a,opcode:i,mask:t.mask,readOnly:f.readOnly};if(this._deflating){this.enqueue([this.dispatch,r,this._compress,e,s])}else{this.dispatch(r,this._compress,e,s)}}else{this.sendFrame(Sender.frame(r,{fin:t.fin,rsv1:false,opcode:i,mask:t.mask,readOnly:f.readOnly}),s)}}dispatch(e,t,s,r){if(!t){this.sendFrame(Sender.frame(e,s),r);return}const n=this._extensions[o.extensionName];this._bufferedBytes+=e.length;this._deflating=true;n.compress(e,s.fin,((t,n)=>{if(this._socket.destroyed){const e=new Error("The socket was closed while data was being compressed");if(typeof r==="function")r(e);for(let t=0;t{"use strict";const{Duplex:r}=s(781);function emitClose(e){e.emit("close")}function duplexOnEnd(){if(!this.destroyed&&this._writableState.finished){this.destroy()}}function duplexOnError(e){this.removeListener("error",duplexOnError);this.destroy();if(this.listenerCount("error")===0){this.emit("error",e)}}function createWebSocketStream(e,t){let s=true;let n=true;function receiverOnDrain(){if(s)e._socket.resume()}if(e.readyState===e.CONNECTING){e.once("open",(function open(){e._receiver.removeAllListeners("drain");e._receiver.on("drain",receiverOnDrain)}))}else{e._receiver.removeAllListeners("drain");e._receiver.on("drain",receiverOnDrain)}const i=new r({...t,autoDestroy:false,emitClose:false,objectMode:false,writableObjectMode:false});e.on("message",(function message(t,r){const n=!r&&i._readableState.objectMode?t.toString():t;if(!i.push(n)){s=false;e._socket.pause()}}));e.once("error",(function error(e){if(i.destroyed)return;n=false;i.destroy(e)}));e.once("close",(function close(){if(i.destroyed)return;i.push(null)}));i._destroy=function(t,s){if(e.readyState===e.CLOSED){s(t);process.nextTick(emitClose,i);return}let r=false;e.once("error",(function error(e){r=true;s(e)}));e.once("close",(function close(){if(!r)s(t);process.nextTick(emitClose,i)}));if(n)e.terminate()};i._final=function(t){if(e.readyState===e.CONNECTING){e.once("open",(function open(){i._final(t)}));return}if(e._socket===null)return;if(e._socket._writableState.finished){t();if(i._readableState.endEmitted)i.destroy()}else{e._socket.once("finish",(function finish(){t()}));e.close()}};i._read=function(){if(e.readyState===e.OPEN&&!s){s=true;if(!e._receiver._writableState.needDrain)e._socket.resume()}};i._write=function(t,s,r){if(e.readyState===e.CONNECTING){e.once("open",(function open(){i._write(t,s,r)}));return}e.send(t,r)};i.on("end",duplexOnEnd);i.on("error",duplexOnError);return i}e.exports=createWebSocketStream},955:(e,t,s)=>{"use strict";const{tokenChars:r}=s(848);function parse(e){const t=new Set;let s=-1;let n=-1;let i=0;for(i;i{"use strict";const r=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function isValidStatusCode(e){return e>=1e3&&e<=1014&&e!==1004&&e!==1005&&e!==1006||e>=3e3&&e<=4999}function _isValidUTF8(e){const t=e.length;let s=0;while(s=t||(e[s+1]&192)!==128||(e[s+2]&192)!==128||e[s]===224&&(e[s+1]&224)===128||e[s]===237&&(e[s+1]&224)===160){return false}s+=3}else if((e[s]&248)===240){if(s+3>=t||(e[s+1]&192)!==128||(e[s+2]&192)!==128||(e[s+3]&192)!==128||e[s]===240&&(e[s+1]&240)===128||e[s]===244&&e[s+1]>143||e[s]>244){return false}s+=4}else{return false}}return true}try{const t=s(12);e.exports={isValidStatusCode:isValidStatusCode,isValidUTF8(e){return e.length<150?_isValidUTF8(e):t(e)},tokenChars:r}}catch(t){e.exports={isValidStatusCode:isValidStatusCode,isValidUTF8:_isValidUTF8,tokenChars:r}}},597:(e,t,s)=>{"use strict";const r=s(361);const n=s(685);const i=s(687);const o=s(808);const a=s(404);const{createHash:c}=s(113);const l=s(725);const f=s(290);const h=s(955);const d=s(335);const{GUID:u,kWebSocket:_}=s(217);const p=/^[+/0-9A-Za-z]{22}==$/;const m=0;const b=1;const y=2;class WebSocketServer extends r{constructor(e,t){super();e={maxPayload:100*1024*1024,skipUTF8Validation:false,perMessageDeflate:false,handleProtocols:null,clientTracking:true,verifyClient:null,noServer:false,backlog:null,server:null,host:null,path:null,port:null,...e};if(e.port==null&&!e.server&&!e.noServer||e.port!=null&&(e.server||e.noServer)||e.server&&e.noServer){throw new TypeError('One and only one of the "port", "server", or "noServer" options '+"must be specified")}if(e.port!=null){this._server=n.createServer(((e,t)=>{const s=n.STATUS_CODES[426];t.writeHead(426,{"Content-Length":s.length,"Content-Type":"text/plain"});t.end(s)}));this._server.listen(e.port,e.host,e.backlog,t)}else if(e.server){this._server=e.server}if(this._server){const e=this.emit.bind(this,"connection");this._removeListeners=addListeners(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(t,s,r)=>{this.handleUpgrade(t,s,r,e)}})}if(e.perMessageDeflate===true)e.perMessageDeflate={};if(e.clientTracking){this.clients=new Set;this._shouldEmitClose=false}this.options=e;this._state=m}address(){if(this.options.noServer){throw new Error('The server is operating in "noServer" mode')}if(!this._server)return null;return this._server.address()}close(e){if(this._state===y){if(e){this.once("close",(()=>{e(new Error("The server is not running"))}))}process.nextTick(emitClose,this);return}if(e)this.once("close",e);if(this._state===b)return;this._state=b;if(this.options.noServer||this.options.server){if(this._server){this._removeListeners();this._removeListeners=this._server=null}if(this.clients){if(!this.clients.size){process.nextTick(emitClose,this)}else{this._shouldEmitClose=true}}else{process.nextTick(emitClose,this)}}else{const e=this._server;this._removeListeners();this._removeListeners=this._server=null;e.close((()=>{emitClose(this)}))}}shouldHandle(e){if(this.options.path){const t=e.url.indexOf("?");const s=t!==-1?e.url.slice(0,t):e.url;if(s!==this.options.path)return false}return true}handleUpgrade(e,t,s,r){t.on("error",socketOnError);const n=e.headers["sec-websocket-key"]!==undefined?e.headers["sec-websocket-key"]:false;const i=+e.headers["sec-websocket-version"];if(e.method!=="GET"||e.headers.upgrade.toLowerCase()!=="websocket"||!n||!p.test(n)||i!==8&&i!==13||!this.shouldHandle(e)){return abortHandshake(t,400)}const o=e.headers["sec-websocket-protocol"];let a=new Set;if(o!==undefined){try{a=h.parse(o)}catch(e){return abortHandshake(t,400)}}const c=e.headers["sec-websocket-extensions"];const d={};if(this.options.perMessageDeflate&&c!==undefined){const e=new f(this.options.perMessageDeflate,true,this.options.maxPayload);try{const t=l.parse(c);if(t[f.extensionName]){e.accept(t[f.extensionName]);d[f.extensionName]=e}}catch(e){return abortHandshake(t,400)}}if(this.options.verifyClient){const o={origin:e.headers[`${i===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(o,((i,o,c,l)=>{if(!i){return abortHandshake(t,o||401,c,l)}this.completeUpgrade(d,n,a,e,t,s,r)}));return}if(!this.options.verifyClient(o))return abortHandshake(t,401)}this.completeUpgrade(d,n,a,e,t,s,r)}completeUpgrade(e,t,s,r,n,i,o){if(!n.readable||!n.writable)return n.destroy();if(n[_]){throw new Error("server.handleUpgrade() was called more than once with the same "+"socket, possibly due to a misconfiguration")}if(this._state>m)return abortHandshake(n,503);const a=c("sha1").update(t+u).digest("base64");const h=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${a}`];const p=new d(null);if(s.size){const e=this.options.handleProtocols?this.options.handleProtocols(s,r):s.values().next().value;if(e){h.push(`Sec-WebSocket-Protocol: ${e}`);p._protocol=e}}if(e[f.extensionName]){const t=e[f.extensionName].params;const s=l.format({[f.extensionName]:[t]});h.push(`Sec-WebSocket-Extensions: ${s}`);p._extensions=e}this.emit("headers",h,r);n.write(h.concat("\r\n").join("\r\n"));n.removeListener("error",socketOnError);p.setSocket(n,i,{maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation});if(this.clients){this.clients.add(p);p.on("close",(()=>{this.clients.delete(p);if(this._shouldEmitClose&&!this.clients.size){process.nextTick(emitClose,this)}}))}o(p,r)}}e.exports=WebSocketServer;function addListeners(e,t){for(const s of Object.keys(t))e.on(s,t[s]);return function removeListeners(){for(const s of Object.keys(t)){e.removeListener(s,t[s])}}}function emitClose(e){e._state=y;e.emit("close")}function socketOnError(){this.destroy()}function abortHandshake(e,t,s,r){if(e.writable){s=s||n.STATUS_CODES[t];r={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(s),...r};e.write(`HTTP/1.1 ${t} ${n.STATUS_CODES[t]}\r\n`+Object.keys(r).map((e=>`${e}: ${r[e]}`)).join("\r\n")+"\r\n\r\n"+s)}e.removeListener("error",socketOnError);e.destroy()}},335:(e,t,s)=>{"use strict";const r=s(361);const n=s(687);const i=s(685);const o=s(808);const a=s(404);const{randomBytes:c,createHash:l}=s(113);const{Readable:f}=s(781);const{URL:h}=s(310);const d=s(290);const u=s(157);const _=s(769);const{BINARY_TYPES:p,EMPTY_BUFFER:m,GUID:b,kForOnEventAttribute:y,kListener:S,kStatusCode:g,kWebSocket:k,NOOP:v}=s(217);const{EventTarget:{addEventListener:E,removeEventListener:w}}=s(874);const{format:x,parse:O}=s(725);const{toBuffer:C}=s(214);const T=["CONNECTING","OPEN","CLOSING","CLOSED"];const N=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;const L=[8,13];const P=30*1e3;class WebSocket extends r{constructor(e,t,s){super();this._binaryType=p[0];this._closeCode=1006;this._closeFrameReceived=false;this._closeFrameSent=false;this._closeMessage=m;this._closeTimer=null;this._extensions={};this._protocol="";this._readyState=WebSocket.CONNECTING;this._receiver=null;this._sender=null;this._socket=null;if(e!==null){this._bufferedAmount=0;this._isServer=false;this._redirects=0;if(t===undefined){t=[]}else if(!Array.isArray(t)){if(typeof t==="object"&&t!==null){s=t;t=[]}else{t=[t]}}initAsClient(this,e,t,s)}else{this._isServer=true}}get binaryType(){return this._binaryType}set binaryType(e){if(!p.includes(e))return;this._binaryType=e;if(this._receiver)this._receiver._binaryType=e}get bufferedAmount(){if(!this._socket)return this._bufferedAmount;return this._socket._writableState.length+this._sender._bufferedBytes}get extensions(){return Object.keys(this._extensions).join()}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(e,t,s){const r=new u({binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation});this._sender=new _(e,this._extensions);this._receiver=r;this._socket=e;r[k]=this;e[k]=this;r.on("conclude",receiverOnConclude);r.on("drain",receiverOnDrain);r.on("error",receiverOnError);r.on("message",receiverOnMessage);r.on("ping",receiverOnPing);r.on("pong",receiverOnPong);e.setTimeout(0);e.setNoDelay();if(t.length>0)e.unshift(t);e.on("close",socketOnClose);e.on("data",socketOnData);e.on("end",socketOnEnd);e.on("error",socketOnError);this._readyState=WebSocket.OPEN;this.emit("open")}emitClose(){if(!this._socket){this._readyState=WebSocket.CLOSED;this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[d.extensionName]){this._extensions[d.extensionName].cleanup()}this._receiver.removeAllListeners();this._readyState=WebSocket.CLOSED;this.emit("close",this._closeCode,this._closeMessage)}close(e,t){if(this.readyState===WebSocket.CLOSED)return;if(this.readyState===WebSocket.CONNECTING){const e="WebSocket was closed before the connection was established";return abortHandshake(this,this._req,e)}if(this.readyState===WebSocket.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)){this._socket.end()}return}this._readyState=WebSocket.CLOSING;this._sender.close(e,t,!this._isServer,(e=>{if(e)return;this._closeFrameSent=true;if(this._closeFrameReceived||this._receiver._writableState.errorEmitted){this._socket.end()}}));this._closeTimer=setTimeout(this._socket.destroy.bind(this._socket),P)}ping(e,t,s){if(this.readyState===WebSocket.CONNECTING){throw new Error("WebSocket is not open: readyState 0 (CONNECTING)")}if(typeof e==="function"){s=e;e=t=undefined}else if(typeof t==="function"){s=t;t=undefined}if(typeof e==="number")e=e.toString();if(this.readyState!==WebSocket.OPEN){sendAfterClose(this,e,s);return}if(t===undefined)t=!this._isServer;this._sender.ping(e||m,t,s)}pong(e,t,s){if(this.readyState===WebSocket.CONNECTING){throw new Error("WebSocket is not open: readyState 0 (CONNECTING)")}if(typeof e==="function"){s=e;e=t=undefined}else if(typeof t==="function"){s=t;t=undefined}if(typeof e==="number")e=e.toString();if(this.readyState!==WebSocket.OPEN){sendAfterClose(this,e,s);return}if(t===undefined)t=!this._isServer;this._sender.pong(e||m,t,s)}send(e,t,s){if(this.readyState===WebSocket.CONNECTING){throw new Error("WebSocket is not open: readyState 0 (CONNECTING)")}if(typeof t==="function"){s=t;t={}}if(typeof e==="number")e=e.toString();if(this.readyState!==WebSocket.OPEN){sendAfterClose(this,e,s);return}const r={binary:typeof e!=="string",mask:!this._isServer,compress:true,fin:true,...t};if(!this._extensions[d.extensionName]){r.compress=false}this._sender.send(e||m,r,s)}terminate(){if(this.readyState===WebSocket.CLOSED)return;if(this.readyState===WebSocket.CONNECTING){const e="WebSocket was closed before the connection was established";return abortHandshake(this,this._req,e)}if(this._socket){this._readyState=WebSocket.CLOSING;this._socket.destroy()}}}Object.defineProperty(WebSocket,"CONNECTING",{enumerable:true,value:T.indexOf("CONNECTING")});Object.defineProperty(WebSocket.prototype,"CONNECTING",{enumerable:true,value:T.indexOf("CONNECTING")});Object.defineProperty(WebSocket,"OPEN",{enumerable:true,value:T.indexOf("OPEN")});Object.defineProperty(WebSocket.prototype,"OPEN",{enumerable:true,value:T.indexOf("OPEN")});Object.defineProperty(WebSocket,"CLOSING",{enumerable:true,value:T.indexOf("CLOSING")});Object.defineProperty(WebSocket.prototype,"CLOSING",{enumerable:true,value:T.indexOf("CLOSING")});Object.defineProperty(WebSocket,"CLOSED",{enumerable:true,value:T.indexOf("CLOSED")});Object.defineProperty(WebSocket.prototype,"CLOSED",{enumerable:true,value:T.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","protocol","readyState","url"].forEach((e=>{Object.defineProperty(WebSocket.prototype,e,{enumerable:true})}));["open","error","close","message"].forEach((e=>{Object.defineProperty(WebSocket.prototype,`on${e}`,{enumerable:true,get(){for(const t of this.listeners(e)){if(t[y])return t[S]}return null},set(t){for(const t of this.listeners(e)){if(t[y]){this.removeListener(e,t);break}}if(typeof t!=="function")return;this.addEventListener(e,t,{[y]:true})}})}));WebSocket.prototype.addEventListener=E;WebSocket.prototype.removeEventListener=w;e.exports=WebSocket;function initAsClient(e,t,s,r){const o={protocolVersion:L[1],maxPayload:100*1024*1024,skipUTF8Validation:false,perMessageDeflate:true,followRedirects:false,maxRedirects:10,...r,createConnection:undefined,socketPath:undefined,hostname:undefined,protocol:undefined,timeout:undefined,method:undefined,host:undefined,path:undefined,port:undefined};if(!L.includes(o.protocolVersion)){throw new RangeError(`Unsupported protocol version: ${o.protocolVersion} `+`(supported versions: ${L.join(", ")})`)}let a;if(t instanceof h){a=t;e._url=t.href}else{try{a=new h(t)}catch(e){throw new SyntaxError(`Invalid URL: ${t}`)}e._url=t}const f=a.protocol==="wss:";const u=a.protocol==="ws+unix:";if(a.protocol!=="ws:"&&!f&&!u){throw new SyntaxError('The URL\'s protocol must be one of "ws:", "wss:", or "ws+unix:"')}if(u&&!a.pathname){throw new SyntaxError("The URL's pathname is empty")}if(a.hash){throw new SyntaxError("The URL contains a fragment identifier")}const _=f?443:80;const p=c(16).toString("base64");const m=f?n.get:i.get;const y=new Set;let S;o.createConnection=f?tlsConnect:netConnect;o.defaultPort=o.defaultPort||_;o.port=a.port||_;o.host=a.hostname.startsWith("[")?a.hostname.slice(1,-1):a.hostname;o.headers={"Sec-WebSocket-Version":o.protocolVersion,"Sec-WebSocket-Key":p,Connection:"Upgrade",Upgrade:"websocket",...o.headers};o.path=a.pathname+a.search;o.timeout=o.handshakeTimeout;if(o.perMessageDeflate){S=new d(o.perMessageDeflate!==true?o.perMessageDeflate:{},false,o.maxPayload);o.headers["Sec-WebSocket-Extensions"]=x({[d.extensionName]:S.offer()})}if(s.length){for(const e of s){if(typeof e!=="string"||!N.test(e)||y.has(e)){throw new SyntaxError("An invalid or duplicated subprotocol was specified")}y.add(e)}o.headers["Sec-WebSocket-Protocol"]=s.join(",")}if(o.origin){if(o.protocolVersion<13){o.headers["Sec-WebSocket-Origin"]=o.origin}else{o.headers.Origin=o.origin}}if(a.username||a.password){o.auth=`${a.username}:${a.password}`}if(u){const e=o.path.split(":");o.socketPath=e[0];o.path=e[1]}let g=e._req=m(o);if(o.timeout){g.on("timeout",(()=>{abortHandshake(e,g,"Opening handshake has timed out")}))}g.on("error",(t=>{if(g===null||g.aborted)return;g=e._req=null;e._readyState=WebSocket.CLOSING;e.emit("error",t);e.emitClose()}));g.on("response",(n=>{const i=n.headers.location;const a=n.statusCode;if(i&&o.followRedirects&&a>=300&&a<400){if(++e._redirects>o.maxRedirects){abortHandshake(e,g,"Maximum redirects exceeded");return}g.abort();const n=new h(i,t);initAsClient(e,n,s,r)}else if(!e.emit("unexpected-response",g,n)){abortHandshake(e,g,`Unexpected server response: ${n.statusCode}`)}}));g.on("upgrade",((t,s,r)=>{e.emit("upgrade",t);if(e.readyState!==WebSocket.CONNECTING)return;g=e._req=null;const n=l("sha1").update(p+b).digest("base64");if(t.headers["sec-websocket-accept"]!==n){abortHandshake(e,s,"Invalid Sec-WebSocket-Accept header");return}const i=t.headers["sec-websocket-protocol"];let a;if(i!==undefined){if(!y.size){a="Server sent a subprotocol but none was requested"}else if(!y.has(i)){a="Server sent an invalid subprotocol"}}else if(y.size){a="Server sent no subprotocol"}if(a){abortHandshake(e,s,a);return}if(i)e._protocol=i;const c=t.headers["sec-websocket-extensions"];if(c!==undefined){if(!S){const t="Server sent a Sec-WebSocket-Extensions header but no extension "+"was requested";abortHandshake(e,s,t);return}let t;try{t=O(c)}catch(t){const r="Invalid Sec-WebSocket-Extensions header";abortHandshake(e,s,r);return}const r=Object.keys(t);if(r.length!==1||r[0]!==d.extensionName){const t="Server indicated an extension that was not requested";abortHandshake(e,s,t);return}try{S.accept(t[d.extensionName])}catch(t){const r="Invalid Sec-WebSocket-Extensions header";abortHandshake(e,s,r);return}e._extensions[d.extensionName]=S}e.setSocket(s,r,{maxPayload:o.maxPayload,skipUTF8Validation:o.skipUTF8Validation})}))}function netConnect(e){e.path=e.socketPath;return o.connect(e)}function tlsConnect(e){e.path=undefined;if(!e.servername&&e.servername!==""){e.servername=o.isIP(e.host)?"":e.host}return a.connect(e)}function abortHandshake(e,t,s){e._readyState=WebSocket.CLOSING;const r=new Error(s);Error.captureStackTrace(r,abortHandshake);if(t.setHeader){t.abort();if(t.socket&&!t.socket.destroyed){t.socket.destroy()}t.once("abort",e.emitClose.bind(e));e.emit("error",r)}else{t.destroy(r);t.once("error",e.emit.bind(e,"error"));t.once("close",e.emitClose.bind(e))}}function sendAfterClose(e,t,s){if(t){const s=C(t).length;if(e._socket)e._sender._bufferedBytes+=s;else e._bufferedAmount+=s}if(s){const t=new Error(`WebSocket is not open: readyState ${e.readyState} `+`(${T[e.readyState]})`);s(t)}}function receiverOnConclude(e,t){const s=this[k];s._closeFrameReceived=true;s._closeMessage=t;s._closeCode=e;if(s._socket[k]===undefined)return;s._socket.removeListener("data",socketOnData);process.nextTick(resume,s._socket);if(e===1005)s.close();else s.close(e,t)}function receiverOnDrain(){this[k]._socket.resume()}function receiverOnError(e){const t=this[k];if(t._socket[k]!==undefined){t._socket.removeListener("data",socketOnData);process.nextTick(resume,t._socket);t.close(e[g])}t.emit("error",e)}function receiverOnFinish(){this[k].emitClose()}function receiverOnMessage(e,t){this[k].emit("message",e,t)}function receiverOnPing(e){const t=this[k];t.pong(e,!t._isServer,v);t.emit("ping",e)}function receiverOnPong(e){this[k].emit("pong",e)}function resume(e){e.resume()}function socketOnClose(){const e=this[k];this.removeListener("close",socketOnClose);this.removeListener("data",socketOnData);this.removeListener("end",socketOnEnd);e._readyState=WebSocket.CLOSING;let t;if(!this._readableState.endEmitted&&!e._closeFrameReceived&&!e._receiver._writableState.errorEmitted&&(t=e._socket.read())!==null){e._receiver.write(t)}e._receiver.end();this[k]=undefined;clearTimeout(e._closeTimer);if(e._receiver._writableState.finished||e._receiver._writableState.errorEmitted){e.emitClose()}else{e._receiver.on("error",receiverOnFinish);e._receiver.on("finish",receiverOnFinish)}}function socketOnData(e){if(!this[k]._receiver.write(e)){this.pause()}}function socketOnEnd(){const e=this[k];e._readyState=WebSocket.CLOSING;e._receiver.end();this.end()}function socketOnError(){const e=this[k];this.removeListener("error",socketOnError);this.on("error",v);if(e){e._readyState=WebSocket.CLOSING;this.destroy()}}},605:module=>{module.exports=eval("require")("bufferutil")},12:module=>{module.exports=eval("require")("utf-8-validate")},113:e=>{"use strict";e.exports=require("crypto")},361:e=>{"use strict";e.exports=require("events")},685:e=>{"use strict";e.exports=require("http")},687:e=>{"use strict";e.exports=require("https")},808:e=>{"use strict";e.exports=require("net")},781:e=>{"use strict";e.exports=require("stream")},404:e=>{"use strict";e.exports=require("tls")},310:e=>{"use strict";e.exports=require("url")},796:e=>{"use strict";e.exports=require("zlib")}};var __webpack_module_cache__={};function __nccwpck_require__(e){var t=__webpack_module_cache__[e];if(t!==undefined){return t.exports}var s=__webpack_module_cache__[e]={exports:{}};var r=true;try{__webpack_modules__[e](s,s.exports,__nccwpck_require__);r=false}finally{if(r)delete __webpack_module_cache__[e]}return s.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var __webpack_exports__=__nccwpck_require__(28);module.exports=__webpack_exports__})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/ws/package.json b/build/node_modules/next/dist/compiled/ws/package.json new file mode 100644 index 0000000..4098296 --- /dev/null +++ b/build/node_modules/next/dist/compiled/ws/package.json @@ -0,0 +1 @@ +{"name":"ws","main":"index.js","author":"Einar Otto Stangvik (http://2x.io)","license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/zod-validation-error/index.js b/build/node_modules/next/dist/compiled/zod-validation-error/index.js new file mode 100644 index 0000000..24b076f --- /dev/null +++ b/build/node_modules/next/dist/compiled/zod-validation-error/index.js @@ -0,0 +1 @@ +(()=>{"use strict";var r={452:(r,e,o)=>{var t=Object.create;var s=Object.defineProperty;var n=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var a=Object.getPrototypeOf;var u=Object.prototype.hasOwnProperty;var __export=(r,e)=>{for(var o in e)s(r,o,{get:e[o],enumerable:true})};var __copyProps=(r,e,o,t)=>{if(e&&typeof e==="object"||typeof e==="function"){for(let a of i(e))if(!u.call(r,a)&&a!==o)s(r,a,{get:()=>e[a],enumerable:!(t=n(e,a))||t.enumerable})}return r};var __toESM=(r,e,o)=>(o=r!=null?t(a(r)):{},__copyProps(e||!r||!r.__esModule?s(o,"default",{value:r,enumerable:true}):o,r));var __toCommonJS=r=>__copyProps(s({},"__esModule",{value:true}),r);var d={};__export(d,{ValidationError:()=>c,createMessageBuilder:()=>createMessageBuilder,errorMap:()=>errorMap,fromError:()=>fromError,fromZodError:()=>fromZodError,fromZodIssue:()=>fromZodIssue,isValidationError:()=>isValidationError,isValidationErrorLike:()=>isValidationErrorLike,isZodErrorLike:()=>isZodErrorLike,toValidationError:()=>toValidationError});r.exports=__toCommonJS(d);function isZodErrorLike(r){return r instanceof Error&&r.name==="ZodError"&&"issues"in r&&Array.isArray(r.issues)}var c=class extends Error{name;details;constructor(r,e){super(r,e);this.name="ZodValidationError";this.details=getIssuesFromErrorOptions(e)}toString(){return this.message}};function getIssuesFromErrorOptions(r){if(r){const e=r.cause;if(isZodErrorLike(e)){return e.issues}}return[]}function isValidationError(r){return r instanceof c}function isValidationErrorLike(r){return r instanceof Error&&r.name==="ZodValidationError"}var f=__toESM(o(788));var p=__toESM(o(788));function isNonEmptyArray(r){return r.length!==0}var l=/[$_\p{ID_Start}][$\u200c\u200d\p{ID_Continue}]*/u;function joinPath(r){if(r.length===1){return r[0].toString()}return r.reduce(((r,e)=>{if(typeof e==="number"){return r+"["+e.toString()+"]"}if(e.includes('"')){return r+'["'+escapeQuotes(e)+'"]'}if(!l.test(e)){return r+'["'+e+'"]'}const o=r.length===0?"":".";return r+o+e}),"")}function escapeQuotes(r){return r.replace(/"/g,'\\"')}var m="; ";var g=99;var E="Validation error";var _=": ";var v=", or ";function createMessageBuilder(r={}){const{issueSeparator:e=m,unionSeparator:o=v,prefixSeparator:t=_,prefix:s=E,includePath:n=true,maxIssuesInMessage:i=g}=r;return r=>{const a=r.slice(0,i).map((r=>getMessageFromZodIssue({issue:r,issueSeparator:e,unionSeparator:o,includePath:n}))).join(e);return prefixMessage(a,s,t)}}function getMessageFromZodIssue(r){const{issue:e,issueSeparator:o,unionSeparator:t,includePath:s}=r;if(e.code===p.ZodIssueCode.invalid_union){return e.unionErrors.reduce(((r,e)=>{const n=e.issues.map((r=>getMessageFromZodIssue({issue:r,issueSeparator:o,unionSeparator:t,includePath:s}))).join(o);if(!r.includes(n)){r.push(n)}return r}),[]).join(t)}if(e.code===p.ZodIssueCode.invalid_arguments){return[e.message,...e.argumentsError.issues.map((r=>getMessageFromZodIssue({issue:r,issueSeparator:o,unionSeparator:t,includePath:s})))].join(o)}if(e.code===p.ZodIssueCode.invalid_return_type){return[e.message,...e.returnTypeError.issues.map((r=>getMessageFromZodIssue({issue:r,issueSeparator:o,unionSeparator:t,includePath:s})))].join(o)}if(s&&isNonEmptyArray(e.path)){if(e.path.length===1){const r=e.path[0];if(typeof r==="number"){return`${e.message} at index ${r}`}}return`${e.message} at "${joinPath(e.path)}"`}return e.message}function prefixMessage(r,e,o){if(e!==null){if(r.length>0){return[e,r].join(o)}return e}if(r.length>0){return r}return E}function fromZodIssue(r,e={}){const o=createMessageBuilderFromOptions(e);const t=o([r]);return new c(t,{cause:new f.ZodError([r])})}function createMessageBuilderFromOptions(r){if("messageBuilder"in r){return r.messageBuilder}return createMessageBuilder(r)}var errorMap=(r,e)=>{const o=fromZodIssue({...r,message:r.message??e.defaultError});return{message:o.message}};function fromZodError(r,e={}){if(!isZodErrorLike(r)){throw new TypeError(`Invalid zodError param; expected instance of ZodError. Did you mean to use the "${fromError.name}" method instead?`)}return fromZodErrorWithoutRuntimeCheck(r,e)}function fromZodErrorWithoutRuntimeCheck(r,e={}){const o=r.errors;let t;if(isNonEmptyArray(o)){const r=createMessageBuilderFromOptions2(e);t=r(o)}else{t=r.message}return new c(t,{cause:r})}function createMessageBuilderFromOptions2(r){if("messageBuilder"in r){return r.messageBuilder}return createMessageBuilder(r)}var toValidationError=(r={})=>e=>{if(isZodErrorLike(e)){return fromZodErrorWithoutRuntimeCheck(e,r)}if(e instanceof Error){return new c(e.message,{cause:e})}return new c("Unknown error")};function fromError(r,e={}){return toValidationError(e)(r)}0&&0},788:r=>{r.exports=require("next/dist/compiled/zod")}};var e={};function __nccwpck_require__(o){var t=e[o];if(t!==undefined){return t.exports}var s=e[o]={exports:{}};var n=true;try{r[o](s,s.exports,__nccwpck_require__);n=false}finally{if(n)delete e[o]}return s.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var o=__nccwpck_require__(452);module.exports=o})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/zod-validation-error/package.json b/build/node_modules/next/dist/compiled/zod-validation-error/package.json new file mode 100644 index 0000000..1a00bdc --- /dev/null +++ b/build/node_modules/next/dist/compiled/zod-validation-error/package.json @@ -0,0 +1 @@ +{"name":"zod-validation-error","main":"index.js","author":{"name":"Dimitrios C. Michalakos","email":"dimitris@jmike.gr","url":"https://github.com/jmike"},"license":"MIT"} diff --git a/build/node_modules/next/dist/compiled/zod/index.cjs b/build/node_modules/next/dist/compiled/zod/index.cjs new file mode 100644 index 0000000..4ea1d24 --- /dev/null +++ b/build/node_modules/next/dist/compiled/zod/index.cjs @@ -0,0 +1 @@ +(()=>{"use strict";var e={629:function(e,t,s){var r=this&&this.__createBinding||(Object.create?function(e,t,s,r){if(r===undefined)r=s;var a=Object.getOwnPropertyDescriptor(t,s);if(!a||("get"in a?!t.__esModule:a.writable||a.configurable)){a={enumerable:true,get:function(){return t[s]}}}Object.defineProperty(e,r,a)}:function(e,t,s,r){if(r===undefined)r=s;e[r]=t[s]});var a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var n=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var s in e)if(s!=="default"&&Object.prototype.hasOwnProperty.call(e,s))r(t,e,s);a(t,e);return t};var i=this&&this.__exportStar||function(e,t){for(var s in e)if(s!=="default"&&!Object.prototype.hasOwnProperty.call(t,s))r(t,e,s)};Object.defineProperty(t,"__esModule",{value:true});t.z=void 0;const o=n(s(923));t.z=o;i(s(923),t);t["default"]=o},348:(e,t,s)=>{Object.defineProperty(t,"__esModule",{value:true});t.ZodError=t.quotelessJson=t.ZodIssueCode=void 0;const r=s(709);t.ZodIssueCode=r.util.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]);const quotelessJson=e=>{const t=JSON.stringify(e,null,2);return t.replace(/"([^"]+)":/g,"$1:")};t.quotelessJson=quotelessJson;class ZodError extends Error{get errors(){return this.issues}constructor(e){super();this.issues=[];this.addIssue=e=>{this.issues=[...this.issues,e]};this.addIssues=(e=[])=>{this.issues=[...this.issues,...e]};const t=new.target.prototype;if(Object.setPrototypeOf){Object.setPrototypeOf(this,t)}else{this.__proto__=t}this.name="ZodError";this.issues=e}format(e){const t=e||function(e){return e.message};const s={_errors:[]};const processError=e=>{for(const r of e.issues){if(r.code==="invalid_union"){r.unionErrors.map(processError)}else if(r.code==="invalid_return_type"){processError(r.returnTypeError)}else if(r.code==="invalid_arguments"){processError(r.argumentsError)}else if(r.path.length===0){s._errors.push(t(r))}else{let e=s;let a=0;while(ae.message)){const t={};const s=[];for(const r of this.issues){if(r.path.length>0){const s=r.path[0];t[s]=t[s]||[];t[s].push(e(r))}else{s.push(e(r))}}return{formErrors:s,fieldErrors:t}}get formErrors(){return this.flatten()}}t.ZodError=ZodError;ZodError.create=e=>{const t=new ZodError(e);return t}},61:function(e,t,s){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:true});t.defaultErrorMap=void 0;t.setErrorMap=setErrorMap;t.getErrorMap=getErrorMap;const a=r(s(871));t.defaultErrorMap=a.default;let n=a.default;function setErrorMap(e){n=e}function getErrorMap(){return n}},923:function(e,t,s){var r=this&&this.__createBinding||(Object.create?function(e,t,s,r){if(r===undefined)r=s;var a=Object.getOwnPropertyDescriptor(t,s);if(!a||("get"in a?!t.__esModule:a.writable||a.configurable)){a={enumerable:true,get:function(){return t[s]}}}Object.defineProperty(e,r,a)}:function(e,t,s,r){if(r===undefined)r=s;e[r]=t[s]});var a=this&&this.__exportStar||function(e,t){for(var s in e)if(s!=="default"&&!Object.prototype.hasOwnProperty.call(t,s))r(t,e,s)};Object.defineProperty(t,"__esModule",{value:true});a(s(61),t);a(s(818),t);a(s(515),t);a(s(709),t);a(s(155),t);a(s(348),t)},538:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true});t.errorUtil=void 0;var s;(function(e){e.errToObj=e=>typeof e==="string"?{message:e}:e||{};e.toString=e=>typeof e==="string"?e:e?.message})(s||(t.errorUtil=s={}))},818:function(e,t,s){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:true});t.isAsync=t.isValid=t.isDirty=t.isAborted=t.OK=t.DIRTY=t.INVALID=t.ParseStatus=t.EMPTY_PATH=t.makeIssue=void 0;t.addIssueToContext=addIssueToContext;const a=s(61);const n=r(s(871));const makeIssue=e=>{const{data:t,path:s,errorMaps:r,issueData:a}=e;const n=[...s,...a.path||[]];const i={...a,path:n};if(a.message!==undefined){return{...a,path:n,message:a.message}}let o="";const d=r.filter((e=>!!e)).slice().reverse();for(const e of d){o=e(i,{data:t,defaultError:o}).message}return{...a,path:n,message:o}};t.makeIssue=makeIssue;t.EMPTY_PATH=[];function addIssueToContext(e,s){const r=(0,a.getErrorMap)();const i=(0,t.makeIssue)({issueData:s,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,r,r===n.default?undefined:n.default].filter((e=>!!e))});e.common.issues.push(i)}class ParseStatus{constructor(){this.value="valid"}dirty(){if(this.value==="valid")this.value="dirty"}abort(){if(this.value!=="aborted")this.value="aborted"}static mergeArray(e,s){const r=[];for(const a of s){if(a.status==="aborted")return t.INVALID;if(a.status==="dirty")e.dirty();r.push(a.value)}return{status:e.value,value:r}}static async mergeObjectAsync(e,t){const s=[];for(const e of t){const t=await e.key;const r=await e.value;s.push({key:t,value:r})}return ParseStatus.mergeObjectSync(e,s)}static mergeObjectSync(e,s){const r={};for(const a of s){const{key:s,value:n}=a;if(s.status==="aborted")return t.INVALID;if(n.status==="aborted")return t.INVALID;if(s.status==="dirty")e.dirty();if(n.status==="dirty")e.dirty();if(s.value!=="__proto__"&&(typeof n.value!=="undefined"||a.alwaysSet)){r[s.value]=n.value}}return{status:e.value,value:r}}}t.ParseStatus=ParseStatus;t.INVALID=Object.freeze({status:"aborted"});const DIRTY=e=>({status:"dirty",value:e});t.DIRTY=DIRTY;const OK=e=>({status:"valid",value:e});t.OK=OK;const isAborted=e=>e.status==="aborted";t.isAborted=isAborted;const isDirty=e=>e.status==="dirty";t.isDirty=isDirty;const isValid=e=>e.status==="valid";t.isValid=isValid;const isAsync=e=>typeof Promise!=="undefined"&&e instanceof Promise;t.isAsync=isAsync},515:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true})},709:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true});t.getParsedType=t.ZodParsedType=t.objectUtil=t.util=void 0;var s;(function(e){e.assertEqual=e=>{};function assertIs(e){}e.assertIs=assertIs;function assertNever(e){throw new Error}e.assertNever=assertNever;e.arrayToEnum=e=>{const t={};for(const s of e){t[s]=s}return t};e.getValidEnumValues=t=>{const s=e.objectKeys(t).filter((e=>typeof t[t[e]]!=="number"));const r={};for(const e of s){r[e]=t[e]}return e.objectValues(r)};e.objectValues=t=>e.objectKeys(t).map((function(e){return t[e]}));e.objectKeys=typeof Object.keys==="function"?e=>Object.keys(e):e=>{const t=[];for(const s in e){if(Object.prototype.hasOwnProperty.call(e,s)){t.push(s)}}return t};e.find=(e,t)=>{for(const s of e){if(t(s))return s}return undefined};e.isInteger=typeof Number.isInteger==="function"?e=>Number.isInteger(e):e=>typeof e==="number"&&Number.isFinite(e)&&Math.floor(e)===e;function joinValues(e,t=" | "){return e.map((e=>typeof e==="string"?`'${e}'`:e)).join(t)}e.joinValues=joinValues;e.jsonStringifyReplacer=(e,t)=>{if(typeof t==="bigint"){return t.toString()}return t}})(s||(t.util=s={}));var r;(function(e){e.mergeShapes=(e,t)=>({...e,...t})})(r||(t.objectUtil=r={}));t.ZodParsedType=s.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]);const getParsedType=e=>{const s=typeof e;switch(s){case"undefined":return t.ZodParsedType.undefined;case"string":return t.ZodParsedType.string;case"number":return Number.isNaN(e)?t.ZodParsedType.nan:t.ZodParsedType.number;case"boolean":return t.ZodParsedType.boolean;case"function":return t.ZodParsedType.function;case"bigint":return t.ZodParsedType.bigint;case"symbol":return t.ZodParsedType.symbol;case"object":if(Array.isArray(e)){return t.ZodParsedType.array}if(e===null){return t.ZodParsedType.null}if(e.then&&typeof e.then==="function"&&e.catch&&typeof e.catch==="function"){return t.ZodParsedType.promise}if(typeof Map!=="undefined"&&e instanceof Map){return t.ZodParsedType.map}if(typeof Set!=="undefined"&&e instanceof Set){return t.ZodParsedType.set}if(typeof Date!=="undefined"&&e instanceof Date){return t.ZodParsedType.date}return t.ZodParsedType.object;default:return t.ZodParsedType.unknown}};t.getParsedType=getParsedType},871:(e,t,s)=>{Object.defineProperty(t,"__esModule",{value:true});const r=s(348);const a=s(709);const errorMap=(e,t)=>{let s;switch(e.code){case r.ZodIssueCode.invalid_type:if(e.received===a.ZodParsedType.undefined){s="Required"}else{s=`Expected ${e.expected}, received ${e.received}`}break;case r.ZodIssueCode.invalid_literal:s=`Invalid literal value, expected ${JSON.stringify(e.expected,a.util.jsonStringifyReplacer)}`;break;case r.ZodIssueCode.unrecognized_keys:s=`Unrecognized key(s) in object: ${a.util.joinValues(e.keys,", ")}`;break;case r.ZodIssueCode.invalid_union:s=`Invalid input`;break;case r.ZodIssueCode.invalid_union_discriminator:s=`Invalid discriminator value. Expected ${a.util.joinValues(e.options)}`;break;case r.ZodIssueCode.invalid_enum_value:s=`Invalid enum value. Expected ${a.util.joinValues(e.options)}, received '${e.received}'`;break;case r.ZodIssueCode.invalid_arguments:s=`Invalid function arguments`;break;case r.ZodIssueCode.invalid_return_type:s=`Invalid function return type`;break;case r.ZodIssueCode.invalid_date:s=`Invalid date`;break;case r.ZodIssueCode.invalid_string:if(typeof e.validation==="object"){if("includes"in e.validation){s=`Invalid input: must include "${e.validation.includes}"`;if(typeof e.validation.position==="number"){s=`${s} at one or more positions greater than or equal to ${e.validation.position}`}}else if("startsWith"in e.validation){s=`Invalid input: must start with "${e.validation.startsWith}"`}else if("endsWith"in e.validation){s=`Invalid input: must end with "${e.validation.endsWith}"`}else{a.util.assertNever(e.validation)}}else if(e.validation!=="regex"){s=`Invalid ${e.validation}`}else{s="Invalid"}break;case r.ZodIssueCode.too_small:if(e.type==="array")s=`Array must contain ${e.exact?"exactly":e.inclusive?`at least`:`more than`} ${e.minimum} element(s)`;else if(e.type==="string")s=`String must contain ${e.exact?"exactly":e.inclusive?`at least`:`over`} ${e.minimum} character(s)`;else if(e.type==="number")s=`Number must be ${e.exact?`exactly equal to `:e.inclusive?`greater than or equal to `:`greater than `}${e.minimum}`;else if(e.type==="bigint")s=`Number must be ${e.exact?`exactly equal to `:e.inclusive?`greater than or equal to `:`greater than `}${e.minimum}`;else if(e.type==="date")s=`Date must be ${e.exact?`exactly equal to `:e.inclusive?`greater than or equal to `:`greater than `}${new Date(Number(e.minimum))}`;else s="Invalid input";break;case r.ZodIssueCode.too_big:if(e.type==="array")s=`Array must contain ${e.exact?`exactly`:e.inclusive?`at most`:`less than`} ${e.maximum} element(s)`;else if(e.type==="string")s=`String must contain ${e.exact?`exactly`:e.inclusive?`at most`:`under`} ${e.maximum} character(s)`;else if(e.type==="number")s=`Number must be ${e.exact?`exactly`:e.inclusive?`less than or equal to`:`less than`} ${e.maximum}`;else if(e.type==="bigint")s=`BigInt must be ${e.exact?`exactly`:e.inclusive?`less than or equal to`:`less than`} ${e.maximum}`;else if(e.type==="date")s=`Date must be ${e.exact?`exactly`:e.inclusive?`smaller than or equal to`:`smaller than`} ${new Date(Number(e.maximum))}`;else s="Invalid input";break;case r.ZodIssueCode.custom:s=`Invalid input`;break;case r.ZodIssueCode.invalid_intersection_types:s=`Intersection results could not be merged`;break;case r.ZodIssueCode.not_multiple_of:s=`Number must be a multiple of ${e.multipleOf}`;break;case r.ZodIssueCode.not_finite:s="Number must be finite";break;default:s=t.defaultError;a.util.assertNever(e)}return{message:s}};t["default"]=errorMap},155:(e,t,s)=>{Object.defineProperty(t,"__esModule",{value:true});t.discriminatedUnion=t.date=t.boolean=t.bigint=t.array=t.any=t.coerce=t.ZodFirstPartyTypeKind=t.late=t.ZodSchema=t.Schema=t.ZodReadonly=t.ZodPipeline=t.ZodBranded=t.BRAND=t.ZodNaN=t.ZodCatch=t.ZodDefault=t.ZodNullable=t.ZodOptional=t.ZodTransformer=t.ZodEffects=t.ZodPromise=t.ZodNativeEnum=t.ZodEnum=t.ZodLiteral=t.ZodLazy=t.ZodFunction=t.ZodSet=t.ZodMap=t.ZodRecord=t.ZodTuple=t.ZodIntersection=t.ZodDiscriminatedUnion=t.ZodUnion=t.ZodObject=t.ZodArray=t.ZodVoid=t.ZodNever=t.ZodUnknown=t.ZodAny=t.ZodNull=t.ZodUndefined=t.ZodSymbol=t.ZodDate=t.ZodBoolean=t.ZodBigInt=t.ZodNumber=t.ZodString=t.ZodType=void 0;t.NEVER=t["void"]=t.unknown=t.union=t.undefined=t.tuple=t.transformer=t.symbol=t.string=t.strictObject=t.set=t.record=t.promise=t.preprocess=t.pipeline=t.ostring=t.optional=t.onumber=t.oboolean=t.object=t.number=t.nullable=t["null"]=t.never=t.nativeEnum=t.nan=t.map=t.literal=t.lazy=t.intersection=t["instanceof"]=t["function"]=t["enum"]=t.effect=void 0;t.datetimeRegex=datetimeRegex;t.custom=custom;const r=s(348);const a=s(61);const n=s(538);const i=s(818);const o=s(709);class ParseInputLazyPath{constructor(e,t,s,r){this._cachedPath=[];this.parent=e;this.data=t;this._path=s;this._key=r}get path(){if(!this._cachedPath.length){if(Array.isArray(this._key)){this._cachedPath.push(...this._path,...this._key)}else{this._cachedPath.push(...this._path,this._key)}}return this._cachedPath}}const handleResult=(e,t)=>{if((0,i.isValid)(t)){return{success:true,data:t.value}}else{if(!e.common.issues.length){throw new Error("Validation failed but no issues detected.")}return{success:false,get error(){if(this._error)return this._error;const t=new r.ZodError(e.common.issues);this._error=t;return this._error}}}};function processCreateParams(e){if(!e)return{};const{errorMap:t,invalid_type_error:s,required_error:r,description:a}=e;if(t&&(s||r)){throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`)}if(t)return{errorMap:t,description:a};const customMap=(t,a)=>{const{message:n}=e;if(t.code==="invalid_enum_value"){return{message:n??a.defaultError}}if(typeof a.data==="undefined"){return{message:n??r??a.defaultError}}if(t.code!=="invalid_type")return{message:a.defaultError};return{message:n??s??a.defaultError}};return{errorMap:customMap,description:a}}class ZodType{get description(){return this._def.description}_getType(e){return(0,o.getParsedType)(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:(0,o.getParsedType)(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new i.ParseStatus,ctx:{common:e.parent.common,data:e.data,parsedType:(0,o.getParsedType)(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){const t=this._parse(e);if((0,i.isAsync)(t)){throw new Error("Synchronous parse encountered promise.")}return t}_parseAsync(e){const t=this._parse(e);return Promise.resolve(t)}parse(e,t){const s=this.safeParse(e,t);if(s.success)return s.data;throw s.error}safeParse(e,t){const s={common:{issues:[],async:t?.async??false,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,o.getParsedType)(e)};const r=this._parseSync({data:e,path:s.path,parent:s});return handleResult(s,r)}"~validate"(e){const t={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,o.getParsedType)(e)};if(!this["~standard"].async){try{const s=this._parseSync({data:e,path:[],parent:t});return(0,i.isValid)(s)?{value:s.value}:{issues:t.common.issues}}catch(e){if(e?.message?.toLowerCase()?.includes("encountered")){this["~standard"].async=true}t.common={issues:[],async:true}}}return this._parseAsync({data:e,path:[],parent:t}).then((e=>(0,i.isValid)(e)?{value:e.value}:{issues:t.common.issues}))}async parseAsync(e,t){const s=await this.safeParseAsync(e,t);if(s.success)return s.data;throw s.error}async safeParseAsync(e,t){const s={common:{issues:[],contextualErrorMap:t?.errorMap,async:true},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,o.getParsedType)(e)};const r=this._parse({data:e,path:s.path,parent:s});const a=await((0,i.isAsync)(r)?r:Promise.resolve(r));return handleResult(s,a)}refine(e,t){const getIssueProperties=e=>{if(typeof t==="string"||typeof t==="undefined"){return{message:t}}else if(typeof t==="function"){return t(e)}else{return t}};return this._refinement(((t,s)=>{const a=e(t);const setError=()=>s.addIssue({code:r.ZodIssueCode.custom,...getIssueProperties(t)});if(typeof Promise!=="undefined"&&a instanceof Promise){return a.then((e=>{if(!e){setError();return false}else{return true}}))}if(!a){setError();return false}else{return true}}))}refinement(e,t){return this._refinement(((s,r)=>{if(!e(s)){r.addIssue(typeof t==="function"?t(s,r):t);return false}else{return true}}))}_refinement(e){return new ZodEffects({schema:this,typeName:k.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync;this._def=e;this.parse=this.parse.bind(this);this.safeParse=this.safeParse.bind(this);this.parseAsync=this.parseAsync.bind(this);this.safeParseAsync=this.safeParseAsync.bind(this);this.spa=this.spa.bind(this);this.refine=this.refine.bind(this);this.refinement=this.refinement.bind(this);this.superRefine=this.superRefine.bind(this);this.optional=this.optional.bind(this);this.nullable=this.nullable.bind(this);this.nullish=this.nullish.bind(this);this.array=this.array.bind(this);this.promise=this.promise.bind(this);this.or=this.or.bind(this);this.and=this.and.bind(this);this.transform=this.transform.bind(this);this.brand=this.brand.bind(this);this.default=this.default.bind(this);this.catch=this.catch.bind(this);this.describe=this.describe.bind(this);this.pipe=this.pipe.bind(this);this.readonly=this.readonly.bind(this);this.isNullable=this.isNullable.bind(this);this.isOptional=this.isOptional.bind(this);this["~standard"]={version:1,vendor:"zod",validate:e=>this["~validate"](e)}}optional(){return ZodOptional.create(this,this._def)}nullable(){return ZodNullable.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return ZodArray.create(this)}promise(){return ZodPromise.create(this,this._def)}or(e){return ZodUnion.create([this,e],this._def)}and(e){return ZodIntersection.create(this,e,this._def)}transform(e){return new ZodEffects({...processCreateParams(this._def),schema:this,typeName:k.ZodEffects,effect:{type:"transform",transform:e}})}default(e){const t=typeof e==="function"?e:()=>e;return new ZodDefault({...processCreateParams(this._def),innerType:this,defaultValue:t,typeName:k.ZodDefault})}brand(){return new ZodBranded({typeName:k.ZodBranded,type:this,...processCreateParams(this._def)})}catch(e){const t=typeof e==="function"?e:()=>e;return new ZodCatch({...processCreateParams(this._def),innerType:this,catchValue:t,typeName:k.ZodCatch})}describe(e){const t=this.constructor;return new t({...this._def,description:e})}pipe(e){return ZodPipeline.create(this,e)}readonly(){return ZodReadonly.create(this)}isOptional(){return this.safeParse(undefined).success}isNullable(){return this.safeParse(null).success}}t.ZodType=ZodType;t.Schema=ZodType;t.ZodSchema=ZodType;const d=/^c[^\s-]{8,}$/i;const u=/^[0-9a-z]+$/;const c=/^[0-9A-HJKMNP-TV-Z]{26}$/i;const l=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i;const p=/^[a-z0-9_-]{21}$/i;const f=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/;const h=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/;const m=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i;const y=`^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`;let Z;const _=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;const g=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/;const v=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;const I=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;const T=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;const b=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;const x=`((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))`;const C=new RegExp(`^${x}$`);function timeRegexSource(e){let t=`[0-5]\\d`;if(e.precision){t=`${t}\\.\\d{${e.precision}}`}else if(e.precision==null){t=`${t}(\\.\\d+)?`}const s=e.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${t})${s}`}function timeRegex(e){return new RegExp(`^${timeRegexSource(e)}$`)}function datetimeRegex(e){let t=`${x}T${timeRegexSource(e)}`;const s=[];s.push(e.local?`Z?`:`Z`);if(e.offset)s.push(`([+-]\\d{2}:?\\d{2})`);t=`${t}(${s.join("|")})`;return new RegExp(`^${t}$`)}function isValidIP(e,t){if((t==="v4"||!t)&&_.test(e)){return true}if((t==="v6"||!t)&&v.test(e)){return true}return false}function isValidJWT(e,t){if(!f.test(e))return false;try{const[s]=e.split(".");if(!s)return false;const r=s.replace(/-/g,"+").replace(/_/g,"/").padEnd(s.length+(4-s.length%4)%4,"=");const a=JSON.parse(atob(r));if(typeof a!=="object"||a===null)return false;if("typ"in a&&a?.typ!=="JWT")return false;if(!a.alg)return false;if(t&&a.alg!==t)return false;return true}catch{return false}}function isValidCidr(e,t){if((t==="v4"||!t)&&g.test(e)){return true}if((t==="v6"||!t)&&I.test(e)){return true}return false}class ZodString extends ZodType{_parse(e){if(this._def.coerce){e.data=String(e.data)}const t=this._getType(e);if(t!==o.ZodParsedType.string){const t=this._getOrReturnCtx(e);(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.string,received:t.parsedType});return i.INVALID}const s=new i.ParseStatus;let a=undefined;for(const t of this._def.checks){if(t.kind==="min"){if(e.data.lengtht.value){a=this._getOrReturnCtx(e,a);(0,i.addIssueToContext)(a,{code:r.ZodIssueCode.too_big,maximum:t.value,type:"string",inclusive:true,exact:false,message:t.message});s.dirty()}}else if(t.kind==="length"){const n=e.data.length>t.value;const o=e.data.lengthe.test(t)),{validation:t,code:r.ZodIssueCode.invalid_string,...n.errorUtil.errToObj(s)})}_addCheck(e){return new ZodString({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...n.errorUtil.errToObj(e)})}url(e){return this._addCheck({kind:"url",...n.errorUtil.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...n.errorUtil.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...n.errorUtil.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...n.errorUtil.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...n.errorUtil.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...n.errorUtil.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...n.errorUtil.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...n.errorUtil.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...n.errorUtil.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...n.errorUtil.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...n.errorUtil.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...n.errorUtil.errToObj(e)})}datetime(e){if(typeof e==="string"){return this._addCheck({kind:"datetime",precision:null,offset:false,local:false,message:e})}return this._addCheck({kind:"datetime",precision:typeof e?.precision==="undefined"?null:e?.precision,offset:e?.offset??false,local:e?.local??false,...n.errorUtil.errToObj(e?.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){if(typeof e==="string"){return this._addCheck({kind:"time",precision:null,message:e})}return this._addCheck({kind:"time",precision:typeof e?.precision==="undefined"?null:e?.precision,...n.errorUtil.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...n.errorUtil.errToObj(e)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...n.errorUtil.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:t?.position,...n.errorUtil.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...n.errorUtil.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...n.errorUtil.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...n.errorUtil.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...n.errorUtil.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...n.errorUtil.errToObj(t)})}nonempty(e){return this.min(1,n.errorUtil.errToObj(e))}trim(){return new ZodString({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new ZodString({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new ZodString({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find((e=>e.kind==="datetime"))}get isDate(){return!!this._def.checks.find((e=>e.kind==="date"))}get isTime(){return!!this._def.checks.find((e=>e.kind==="time"))}get isDuration(){return!!this._def.checks.find((e=>e.kind==="duration"))}get isEmail(){return!!this._def.checks.find((e=>e.kind==="email"))}get isURL(){return!!this._def.checks.find((e=>e.kind==="url"))}get isEmoji(){return!!this._def.checks.find((e=>e.kind==="emoji"))}get isUUID(){return!!this._def.checks.find((e=>e.kind==="uuid"))}get isNANOID(){return!!this._def.checks.find((e=>e.kind==="nanoid"))}get isCUID(){return!!this._def.checks.find((e=>e.kind==="cuid"))}get isCUID2(){return!!this._def.checks.find((e=>e.kind==="cuid2"))}get isULID(){return!!this._def.checks.find((e=>e.kind==="ulid"))}get isIP(){return!!this._def.checks.find((e=>e.kind==="ip"))}get isCIDR(){return!!this._def.checks.find((e=>e.kind==="cidr"))}get isBase64(){return!!this._def.checks.find((e=>e.kind==="base64"))}get isBase64url(){return!!this._def.checks.find((e=>e.kind==="base64url"))}get minLength(){let e=null;for(const t of this._def.checks){if(t.kind==="min"){if(e===null||t.value>e)e=t.value}}return e}get maxLength(){let e=null;for(const t of this._def.checks){if(t.kind==="max"){if(e===null||t.valuenew ZodString({checks:[],typeName:k.ZodString,coerce:e?.coerce??false,...processCreateParams(e)});function floatSafeRemainder(e,t){const s=(e.toString().split(".")[1]||"").length;const r=(t.toString().split(".")[1]||"").length;const a=s>r?s:r;const n=Number.parseInt(e.toFixed(a).replace(".",""));const i=Number.parseInt(t.toFixed(a).replace(".",""));return n%i/10**a}class ZodNumber extends ZodType{constructor(){super(...arguments);this.min=this.gte;this.max=this.lte;this.step=this.multipleOf}_parse(e){if(this._def.coerce){e.data=Number(e.data)}const t=this._getType(e);if(t!==o.ZodParsedType.number){const t=this._getOrReturnCtx(e);(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.number,received:t.parsedType});return i.INVALID}let s=undefined;const a=new i.ParseStatus;for(const t of this._def.checks){if(t.kind==="int"){if(!o.util.isInteger(e.data)){s=this._getOrReturnCtx(e,s);(0,i.addIssueToContext)(s,{code:r.ZodIssueCode.invalid_type,expected:"integer",received:"float",message:t.message});a.dirty()}}else if(t.kind==="min"){const n=t.inclusive?e.datat.value:e.data>=t.value;if(n){s=this._getOrReturnCtx(e,s);(0,i.addIssueToContext)(s,{code:r.ZodIssueCode.too_big,maximum:t.value,type:"number",inclusive:t.inclusive,exact:false,message:t.message});a.dirty()}}else if(t.kind==="multipleOf"){if(floatSafeRemainder(e.data,t.value)!==0){s=this._getOrReturnCtx(e,s);(0,i.addIssueToContext)(s,{code:r.ZodIssueCode.not_multiple_of,multipleOf:t.value,message:t.message});a.dirty()}}else if(t.kind==="finite"){if(!Number.isFinite(e.data)){s=this._getOrReturnCtx(e,s);(0,i.addIssueToContext)(s,{code:r.ZodIssueCode.not_finite,message:t.message});a.dirty()}}else{o.util.assertNever(t)}}return{status:a.value,value:e.data}}gte(e,t){return this.setLimit("min",e,true,n.errorUtil.toString(t))}gt(e,t){return this.setLimit("min",e,false,n.errorUtil.toString(t))}lte(e,t){return this.setLimit("max",e,true,n.errorUtil.toString(t))}lt(e,t){return this.setLimit("max",e,false,n.errorUtil.toString(t))}setLimit(e,t,s,r){return new ZodNumber({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:s,message:n.errorUtil.toString(r)}]})}_addCheck(e){return new ZodNumber({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:n.errorUtil.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:false,message:n.errorUtil.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:false,message:n.errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:true,message:n.errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:true,message:n.errorUtil.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:n.errorUtil.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:n.errorUtil.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:true,value:Number.MIN_SAFE_INTEGER,message:n.errorUtil.toString(e)})._addCheck({kind:"max",inclusive:true,value:Number.MAX_SAFE_INTEGER,message:n.errorUtil.toString(e)})}get minValue(){let e=null;for(const t of this._def.checks){if(t.kind==="min"){if(e===null||t.value>e)e=t.value}}return e}get maxValue(){let e=null;for(const t of this._def.checks){if(t.kind==="max"){if(e===null||t.valuee.kind==="int"||e.kind==="multipleOf"&&o.util.isInteger(e.value)))}get isFinite(){let e=null;let t=null;for(const s of this._def.checks){if(s.kind==="finite"||s.kind==="int"||s.kind==="multipleOf"){return true}else if(s.kind==="min"){if(t===null||s.value>t)t=s.value}else if(s.kind==="max"){if(e===null||s.valuenew ZodNumber({checks:[],typeName:k.ZodNumber,coerce:e?.coerce||false,...processCreateParams(e)});class ZodBigInt extends ZodType{constructor(){super(...arguments);this.min=this.gte;this.max=this.lte}_parse(e){if(this._def.coerce){try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}}const t=this._getType(e);if(t!==o.ZodParsedType.bigint){return this._getInvalidInput(e)}let s=undefined;const a=new i.ParseStatus;for(const t of this._def.checks){if(t.kind==="min"){const n=t.inclusive?e.datat.value:e.data>=t.value;if(n){s=this._getOrReturnCtx(e,s);(0,i.addIssueToContext)(s,{code:r.ZodIssueCode.too_big,type:"bigint",maximum:t.value,inclusive:t.inclusive,message:t.message});a.dirty()}}else if(t.kind==="multipleOf"){if(e.data%t.value!==BigInt(0)){s=this._getOrReturnCtx(e,s);(0,i.addIssueToContext)(s,{code:r.ZodIssueCode.not_multiple_of,multipleOf:t.value,message:t.message});a.dirty()}}else{o.util.assertNever(t)}}return{status:a.value,value:e.data}}_getInvalidInput(e){const t=this._getOrReturnCtx(e);(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.bigint,received:t.parsedType});return i.INVALID}gte(e,t){return this.setLimit("min",e,true,n.errorUtil.toString(t))}gt(e,t){return this.setLimit("min",e,false,n.errorUtil.toString(t))}lte(e,t){return this.setLimit("max",e,true,n.errorUtil.toString(t))}lt(e,t){return this.setLimit("max",e,false,n.errorUtil.toString(t))}setLimit(e,t,s,r){return new ZodBigInt({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:s,message:n.errorUtil.toString(r)}]})}_addCheck(e){return new ZodBigInt({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:false,message:n.errorUtil.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:false,message:n.errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:true,message:n.errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:true,message:n.errorUtil.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:n.errorUtil.toString(t)})}get minValue(){let e=null;for(const t of this._def.checks){if(t.kind==="min"){if(e===null||t.value>e)e=t.value}}return e}get maxValue(){let e=null;for(const t of this._def.checks){if(t.kind==="max"){if(e===null||t.valuenew ZodBigInt({checks:[],typeName:k.ZodBigInt,coerce:e?.coerce??false,...processCreateParams(e)});class ZodBoolean extends ZodType{_parse(e){if(this._def.coerce){e.data=Boolean(e.data)}const t=this._getType(e);if(t!==o.ZodParsedType.boolean){const t=this._getOrReturnCtx(e);(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.boolean,received:t.parsedType});return i.INVALID}return(0,i.OK)(e.data)}}t.ZodBoolean=ZodBoolean;ZodBoolean.create=e=>new ZodBoolean({typeName:k.ZodBoolean,coerce:e?.coerce||false,...processCreateParams(e)});class ZodDate extends ZodType{_parse(e){if(this._def.coerce){e.data=new Date(e.data)}const t=this._getType(e);if(t!==o.ZodParsedType.date){const t=this._getOrReturnCtx(e);(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.date,received:t.parsedType});return i.INVALID}if(Number.isNaN(e.data.getTime())){const t=this._getOrReturnCtx(e);(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_date});return i.INVALID}const s=new i.ParseStatus;let a=undefined;for(const t of this._def.checks){if(t.kind==="min"){if(e.data.getTime()t.value){a=this._getOrReturnCtx(e,a);(0,i.addIssueToContext)(a,{code:r.ZodIssueCode.too_big,message:t.message,inclusive:true,exact:false,maximum:t.value,type:"date"});s.dirty()}}else{o.util.assertNever(t)}}return{status:s.value,value:new Date(e.data.getTime())}}_addCheck(e){return new ZodDate({...this._def,checks:[...this._def.checks,e]})}min(e,t){return this._addCheck({kind:"min",value:e.getTime(),message:n.errorUtil.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:n.errorUtil.toString(t)})}get minDate(){let e=null;for(const t of this._def.checks){if(t.kind==="min"){if(e===null||t.value>e)e=t.value}}return e!=null?new Date(e):null}get maxDate(){let e=null;for(const t of this._def.checks){if(t.kind==="max"){if(e===null||t.valuenew ZodDate({checks:[],coerce:e?.coerce||false,typeName:k.ZodDate,...processCreateParams(e)});class ZodSymbol extends ZodType{_parse(e){const t=this._getType(e);if(t!==o.ZodParsedType.symbol){const t=this._getOrReturnCtx(e);(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.symbol,received:t.parsedType});return i.INVALID}return(0,i.OK)(e.data)}}t.ZodSymbol=ZodSymbol;ZodSymbol.create=e=>new ZodSymbol({typeName:k.ZodSymbol,...processCreateParams(e)});class ZodUndefined extends ZodType{_parse(e){const t=this._getType(e);if(t!==o.ZodParsedType.undefined){const t=this._getOrReturnCtx(e);(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.undefined,received:t.parsedType});return i.INVALID}return(0,i.OK)(e.data)}}t.ZodUndefined=ZodUndefined;ZodUndefined.create=e=>new ZodUndefined({typeName:k.ZodUndefined,...processCreateParams(e)});class ZodNull extends ZodType{_parse(e){const t=this._getType(e);if(t!==o.ZodParsedType.null){const t=this._getOrReturnCtx(e);(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.null,received:t.parsedType});return i.INVALID}return(0,i.OK)(e.data)}}t.ZodNull=ZodNull;ZodNull.create=e=>new ZodNull({typeName:k.ZodNull,...processCreateParams(e)});class ZodAny extends ZodType{constructor(){super(...arguments);this._any=true}_parse(e){return(0,i.OK)(e.data)}}t.ZodAny=ZodAny;ZodAny.create=e=>new ZodAny({typeName:k.ZodAny,...processCreateParams(e)});class ZodUnknown extends ZodType{constructor(){super(...arguments);this._unknown=true}_parse(e){return(0,i.OK)(e.data)}}t.ZodUnknown=ZodUnknown;ZodUnknown.create=e=>new ZodUnknown({typeName:k.ZodUnknown,...processCreateParams(e)});class ZodNever extends ZodType{_parse(e){const t=this._getOrReturnCtx(e);(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.never,received:t.parsedType});return i.INVALID}}t.ZodNever=ZodNever;ZodNever.create=e=>new ZodNever({typeName:k.ZodNever,...processCreateParams(e)});class ZodVoid extends ZodType{_parse(e){const t=this._getType(e);if(t!==o.ZodParsedType.undefined){const t=this._getOrReturnCtx(e);(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.void,received:t.parsedType});return i.INVALID}return(0,i.OK)(e.data)}}t.ZodVoid=ZodVoid;ZodVoid.create=e=>new ZodVoid({typeName:k.ZodVoid,...processCreateParams(e)});class ZodArray extends ZodType{_parse(e){const{ctx:t,status:s}=this._processInputParams(e);const a=this._def;if(t.parsedType!==o.ZodParsedType.array){(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.array,received:t.parsedType});return i.INVALID}if(a.exactLength!==null){const e=t.data.length>a.exactLength.value;const n=t.data.lengtha.maxLength.value){(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.too_big,maximum:a.maxLength.value,type:"array",inclusive:true,exact:false,message:a.maxLength.message});s.dirty()}}if(t.common.async){return Promise.all([...t.data].map(((e,s)=>a.type._parseAsync(new ParseInputLazyPath(t,e,t.path,s))))).then((e=>i.ParseStatus.mergeArray(s,e)))}const n=[...t.data].map(((e,s)=>a.type._parseSync(new ParseInputLazyPath(t,e,t.path,s))));return i.ParseStatus.mergeArray(s,n)}get element(){return this._def.type}min(e,t){return new ZodArray({...this._def,minLength:{value:e,message:n.errorUtil.toString(t)}})}max(e,t){return new ZodArray({...this._def,maxLength:{value:e,message:n.errorUtil.toString(t)}})}length(e,t){return new ZodArray({...this._def,exactLength:{value:e,message:n.errorUtil.toString(t)}})}nonempty(e){return this.min(1,e)}}t.ZodArray=ZodArray;ZodArray.create=(e,t)=>new ZodArray({type:e,minLength:null,maxLength:null,exactLength:null,typeName:k.ZodArray,...processCreateParams(t)});function deepPartialify(e){if(e instanceof ZodObject){const t={};for(const s in e.shape){const r=e.shape[s];t[s]=ZodOptional.create(deepPartialify(r))}return new ZodObject({...e._def,shape:()=>t})}else if(e instanceof ZodArray){return new ZodArray({...e._def,type:deepPartialify(e.element)})}else if(e instanceof ZodOptional){return ZodOptional.create(deepPartialify(e.unwrap()))}else if(e instanceof ZodNullable){return ZodNullable.create(deepPartialify(e.unwrap()))}else if(e instanceof ZodTuple){return ZodTuple.create(e.items.map((e=>deepPartialify(e))))}else{return e}}class ZodObject extends ZodType{constructor(){super(...arguments);this._cached=null;this.nonstrict=this.passthrough;this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;const e=this._def.shape();const t=o.util.objectKeys(e);this._cached={shape:e,keys:t};return this._cached}_parse(e){const t=this._getType(e);if(t!==o.ZodParsedType.object){const t=this._getOrReturnCtx(e);(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.object,received:t.parsedType});return i.INVALID}const{status:s,ctx:a}=this._processInputParams(e);const{shape:n,keys:d}=this._getCached();const u=[];if(!(this._def.catchall instanceof ZodNever&&this._def.unknownKeys==="strip")){for(const e in a.data){if(!d.includes(e)){u.push(e)}}}const c=[];for(const e of d){const t=n[e];const s=a.data[e];c.push({key:{status:"valid",value:e},value:t._parse(new ParseInputLazyPath(a,s,a.path,e)),alwaysSet:e in a.data})}if(this._def.catchall instanceof ZodNever){const e=this._def.unknownKeys;if(e==="passthrough"){for(const e of u){c.push({key:{status:"valid",value:e},value:{status:"valid",value:a.data[e]}})}}else if(e==="strict"){if(u.length>0){(0,i.addIssueToContext)(a,{code:r.ZodIssueCode.unrecognized_keys,keys:u});s.dirty()}}else if(e==="strip"){}else{throw new Error(`Internal ZodObject error: invalid unknownKeys value.`)}}else{const e=this._def.catchall;for(const t of u){const s=a.data[t];c.push({key:{status:"valid",value:t},value:e._parse(new ParseInputLazyPath(a,s,a.path,t)),alwaysSet:t in a.data})}}if(a.common.async){return Promise.resolve().then((async()=>{const e=[];for(const t of c){const s=await t.key;const r=await t.value;e.push({key:s,value:r,alwaysSet:t.alwaysSet})}return e})).then((e=>i.ParseStatus.mergeObjectSync(s,e)))}else{return i.ParseStatus.mergeObjectSync(s,c)}}get shape(){return this._def.shape()}strict(e){n.errorUtil.errToObj;return new ZodObject({...this._def,unknownKeys:"strict",...e!==undefined?{errorMap:(t,s)=>{const r=this._def.errorMap?.(t,s).message??s.defaultError;if(t.code==="unrecognized_keys")return{message:n.errorUtil.errToObj(e).message??r};return{message:r}}}:{}})}strip(){return new ZodObject({...this._def,unknownKeys:"strip"})}passthrough(){return new ZodObject({...this._def,unknownKeys:"passthrough"})}extend(e){return new ZodObject({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){const t=new ZodObject({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:k.ZodObject});return t}setKey(e,t){return this.augment({[e]:t})}catchall(e){return new ZodObject({...this._def,catchall:e})}pick(e){const t={};for(const s of o.util.objectKeys(e)){if(e[s]&&this.shape[s]){t[s]=this.shape[s]}}return new ZodObject({...this._def,shape:()=>t})}omit(e){const t={};for(const s of o.util.objectKeys(this.shape)){if(!e[s]){t[s]=this.shape[s]}}return new ZodObject({...this._def,shape:()=>t})}deepPartial(){return deepPartialify(this)}partial(e){const t={};for(const s of o.util.objectKeys(this.shape)){const r=this.shape[s];if(e&&!e[s]){t[s]=r}else{t[s]=r.optional()}}return new ZodObject({...this._def,shape:()=>t})}required(e){const t={};for(const s of o.util.objectKeys(this.shape)){if(e&&!e[s]){t[s]=this.shape[s]}else{const e=this.shape[s];let r=e;while(r instanceof ZodOptional){r=r._def.innerType}t[s]=r}}return new ZodObject({...this._def,shape:()=>t})}keyof(){return createZodEnum(o.util.objectKeys(this.shape))}}t.ZodObject=ZodObject;ZodObject.create=(e,t)=>new ZodObject({shape:()=>e,unknownKeys:"strip",catchall:ZodNever.create(),typeName:k.ZodObject,...processCreateParams(t)});ZodObject.strictCreate=(e,t)=>new ZodObject({shape:()=>e,unknownKeys:"strict",catchall:ZodNever.create(),typeName:k.ZodObject,...processCreateParams(t)});ZodObject.lazycreate=(e,t)=>new ZodObject({shape:e,unknownKeys:"strip",catchall:ZodNever.create(),typeName:k.ZodObject,...processCreateParams(t)});class ZodUnion extends ZodType{_parse(e){const{ctx:t}=this._processInputParams(e);const s=this._def.options;function handleResults(e){for(const t of e){if(t.result.status==="valid"){return t.result}}for(const s of e){if(s.result.status==="dirty"){t.common.issues.push(...s.ctx.common.issues);return s.result}}const s=e.map((e=>new r.ZodError(e.ctx.common.issues)));(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_union,unionErrors:s});return i.INVALID}if(t.common.async){return Promise.all(s.map((async e=>{const s={...t,common:{...t.common,issues:[]},parent:null};return{result:await e._parseAsync({data:t.data,path:t.path,parent:s}),ctx:s}}))).then(handleResults)}else{let e=undefined;const a=[];for(const r of s){const s={...t,common:{...t.common,issues:[]},parent:null};const n=r._parseSync({data:t.data,path:t.path,parent:s});if(n.status==="valid"){return n}else if(n.status==="dirty"&&!e){e={result:n,ctx:s}}if(s.common.issues.length){a.push(s.common.issues)}}if(e){t.common.issues.push(...e.ctx.common.issues);return e.result}const n=a.map((e=>new r.ZodError(e)));(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_union,unionErrors:n});return i.INVALID}}get options(){return this._def.options}}t.ZodUnion=ZodUnion;ZodUnion.create=(e,t)=>new ZodUnion({options:e,typeName:k.ZodUnion,...processCreateParams(t)});const getDiscriminator=e=>{if(e instanceof ZodLazy){return getDiscriminator(e.schema)}else if(e instanceof ZodEffects){return getDiscriminator(e.innerType())}else if(e instanceof ZodLiteral){return[e.value]}else if(e instanceof ZodEnum){return e.options}else if(e instanceof ZodNativeEnum){return o.util.objectValues(e.enum)}else if(e instanceof ZodDefault){return getDiscriminator(e._def.innerType)}else if(e instanceof ZodUndefined){return[undefined]}else if(e instanceof ZodNull){return[null]}else if(e instanceof ZodOptional){return[undefined,...getDiscriminator(e.unwrap())]}else if(e instanceof ZodNullable){return[null,...getDiscriminator(e.unwrap())]}else if(e instanceof ZodBranded){return getDiscriminator(e.unwrap())}else if(e instanceof ZodReadonly){return getDiscriminator(e.unwrap())}else if(e instanceof ZodCatch){return getDiscriminator(e._def.innerType)}else{return[]}};class ZodDiscriminatedUnion extends ZodType{_parse(e){const{ctx:t}=this._processInputParams(e);if(t.parsedType!==o.ZodParsedType.object){(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.object,received:t.parsedType});return i.INVALID}const s=this.discriminator;const a=t.data[s];const n=this.optionsMap.get(a);if(!n){(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[s]});return i.INVALID}if(t.common.async){return n._parseAsync({data:t.data,path:t.path,parent:t})}else{return n._parseSync({data:t.data,path:t.path,parent:t})}}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,t,s){const r=new Map;for(const s of t){const t=getDiscriminator(s.shape[e]);if(!t.length){throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`)}for(const a of t){if(r.has(a)){throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(a)}`)}r.set(a,s)}}return new ZodDiscriminatedUnion({typeName:k.ZodDiscriminatedUnion,discriminator:e,options:t,optionsMap:r,...processCreateParams(s)})}}t.ZodDiscriminatedUnion=ZodDiscriminatedUnion;function mergeValues(e,t){const s=(0,o.getParsedType)(e);const r=(0,o.getParsedType)(t);if(e===t){return{valid:true,data:e}}else if(s===o.ZodParsedType.object&&r===o.ZodParsedType.object){const s=o.util.objectKeys(t);const r=o.util.objectKeys(e).filter((e=>s.indexOf(e)!==-1));const a={...e,...t};for(const s of r){const r=mergeValues(e[s],t[s]);if(!r.valid){return{valid:false}}a[s]=r.data}return{valid:true,data:a}}else if(s===o.ZodParsedType.array&&r===o.ZodParsedType.array){if(e.length!==t.length){return{valid:false}}const s=[];for(let r=0;r{if((0,i.isAborted)(e)||(0,i.isAborted)(a)){return i.INVALID}const n=mergeValues(e.value,a.value);if(!n.valid){(0,i.addIssueToContext)(s,{code:r.ZodIssueCode.invalid_intersection_types});return i.INVALID}if((0,i.isDirty)(e)||(0,i.isDirty)(a)){t.dirty()}return{status:t.value,value:n.data}};if(s.common.async){return Promise.all([this._def.left._parseAsync({data:s.data,path:s.path,parent:s}),this._def.right._parseAsync({data:s.data,path:s.path,parent:s})]).then((([e,t])=>handleParsed(e,t)))}else{return handleParsed(this._def.left._parseSync({data:s.data,path:s.path,parent:s}),this._def.right._parseSync({data:s.data,path:s.path,parent:s}))}}}t.ZodIntersection=ZodIntersection;ZodIntersection.create=(e,t,s)=>new ZodIntersection({left:e,right:t,typeName:k.ZodIntersection,...processCreateParams(s)});class ZodTuple extends ZodType{_parse(e){const{status:t,ctx:s}=this._processInputParams(e);if(s.parsedType!==o.ZodParsedType.array){(0,i.addIssueToContext)(s,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.array,received:s.parsedType});return i.INVALID}if(s.data.lengththis._def.items.length){(0,i.addIssueToContext)(s,{code:r.ZodIssueCode.too_big,maximum:this._def.items.length,inclusive:true,exact:false,type:"array"});t.dirty()}const n=[...s.data].map(((e,t)=>{const r=this._def.items[t]||this._def.rest;if(!r)return null;return r._parse(new ParseInputLazyPath(s,e,s.path,t))})).filter((e=>!!e));if(s.common.async){return Promise.all(n).then((e=>i.ParseStatus.mergeArray(t,e)))}else{return i.ParseStatus.mergeArray(t,n)}}get items(){return this._def.items}rest(e){return new ZodTuple({...this._def,rest:e})}}t.ZodTuple=ZodTuple;ZodTuple.create=(e,t)=>{if(!Array.isArray(e)){throw new Error("You must pass an array of schemas to z.tuple([ ... ])")}return new ZodTuple({items:e,typeName:k.ZodTuple,rest:null,...processCreateParams(t)})};class ZodRecord extends ZodType{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){const{status:t,ctx:s}=this._processInputParams(e);if(s.parsedType!==o.ZodParsedType.object){(0,i.addIssueToContext)(s,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.object,received:s.parsedType});return i.INVALID}const a=[];const n=this._def.keyType;const d=this._def.valueType;for(const e in s.data){a.push({key:n._parse(new ParseInputLazyPath(s,e,s.path,e)),value:d._parse(new ParseInputLazyPath(s,s.data[e],s.path,e)),alwaysSet:e in s.data})}if(s.common.async){return i.ParseStatus.mergeObjectAsync(t,a)}else{return i.ParseStatus.mergeObjectSync(t,a)}}get element(){return this._def.valueType}static create(e,t,s){if(t instanceof ZodType){return new ZodRecord({keyType:e,valueType:t,typeName:k.ZodRecord,...processCreateParams(s)})}return new ZodRecord({keyType:ZodString.create(),valueType:e,typeName:k.ZodRecord,...processCreateParams(t)})}}t.ZodRecord=ZodRecord;class ZodMap extends ZodType{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){const{status:t,ctx:s}=this._processInputParams(e);if(s.parsedType!==o.ZodParsedType.map){(0,i.addIssueToContext)(s,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.map,received:s.parsedType});return i.INVALID}const a=this._def.keyType;const n=this._def.valueType;const d=[...s.data.entries()].map((([e,t],r)=>({key:a._parse(new ParseInputLazyPath(s,e,s.path,[r,"key"])),value:n._parse(new ParseInputLazyPath(s,t,s.path,[r,"value"]))})));if(s.common.async){const e=new Map;return Promise.resolve().then((async()=>{for(const s of d){const r=await s.key;const a=await s.value;if(r.status==="aborted"||a.status==="aborted"){return i.INVALID}if(r.status==="dirty"||a.status==="dirty"){t.dirty()}e.set(r.value,a.value)}return{status:t.value,value:e}}))}else{const e=new Map;for(const s of d){const r=s.key;const a=s.value;if(r.status==="aborted"||a.status==="aborted"){return i.INVALID}if(r.status==="dirty"||a.status==="dirty"){t.dirty()}e.set(r.value,a.value)}return{status:t.value,value:e}}}}t.ZodMap=ZodMap;ZodMap.create=(e,t,s)=>new ZodMap({valueType:t,keyType:e,typeName:k.ZodMap,...processCreateParams(s)});class ZodSet extends ZodType{_parse(e){const{status:t,ctx:s}=this._processInputParams(e);if(s.parsedType!==o.ZodParsedType.set){(0,i.addIssueToContext)(s,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.set,received:s.parsedType});return i.INVALID}const a=this._def;if(a.minSize!==null){if(s.data.sizea.maxSize.value){(0,i.addIssueToContext)(s,{code:r.ZodIssueCode.too_big,maximum:a.maxSize.value,type:"set",inclusive:true,exact:false,message:a.maxSize.message});t.dirty()}}const n=this._def.valueType;function finalizeSet(e){const s=new Set;for(const r of e){if(r.status==="aborted")return i.INVALID;if(r.status==="dirty")t.dirty();s.add(r.value)}return{status:t.value,value:s}}const d=[...s.data.values()].map(((e,t)=>n._parse(new ParseInputLazyPath(s,e,s.path,t))));if(s.common.async){return Promise.all(d).then((e=>finalizeSet(e)))}else{return finalizeSet(d)}}min(e,t){return new ZodSet({...this._def,minSize:{value:e,message:n.errorUtil.toString(t)}})}max(e,t){return new ZodSet({...this._def,maxSize:{value:e,message:n.errorUtil.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}}t.ZodSet=ZodSet;ZodSet.create=(e,t)=>new ZodSet({valueType:e,minSize:null,maxSize:null,typeName:k.ZodSet,...processCreateParams(t)});class ZodFunction extends ZodType{constructor(){super(...arguments);this.validate=this.implement}_parse(e){const{ctx:t}=this._processInputParams(e);if(t.parsedType!==o.ZodParsedType.function){(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.function,received:t.parsedType});return i.INVALID}function makeArgsIssue(e,s){return(0,i.makeIssue)({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,(0,a.getErrorMap)(),a.defaultErrorMap].filter((e=>!!e)),issueData:{code:r.ZodIssueCode.invalid_arguments,argumentsError:s}})}function makeReturnsIssue(e,s){return(0,i.makeIssue)({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,(0,a.getErrorMap)(),a.defaultErrorMap].filter((e=>!!e)),issueData:{code:r.ZodIssueCode.invalid_return_type,returnTypeError:s}})}const s={errorMap:t.common.contextualErrorMap};const n=t.data;if(this._def.returns instanceof ZodPromise){const e=this;return(0,i.OK)((async function(...t){const a=new r.ZodError([]);const i=await e._def.args.parseAsync(t,s).catch((e=>{a.addIssue(makeArgsIssue(t,e));throw a}));const o=await Reflect.apply(n,this,i);const d=await e._def.returns._def.type.parseAsync(o,s).catch((e=>{a.addIssue(makeReturnsIssue(o,e));throw a}));return d}))}else{const e=this;return(0,i.OK)((function(...t){const a=e._def.args.safeParse(t,s);if(!a.success){throw new r.ZodError([makeArgsIssue(t,a.error)])}const i=Reflect.apply(n,this,a.data);const o=e._def.returns.safeParse(i,s);if(!o.success){throw new r.ZodError([makeReturnsIssue(i,o.error)])}return o.data}))}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new ZodFunction({...this._def,args:ZodTuple.create(e).rest(ZodUnknown.create())})}returns(e){return new ZodFunction({...this._def,returns:e})}implement(e){const t=this.parse(e);return t}strictImplement(e){const t=this.parse(e);return t}static create(e,t,s){return new ZodFunction({args:e?e:ZodTuple.create([]).rest(ZodUnknown.create()),returns:t||ZodUnknown.create(),typeName:k.ZodFunction,...processCreateParams(s)})}}t.ZodFunction=ZodFunction;class ZodLazy extends ZodType{get schema(){return this._def.getter()}_parse(e){const{ctx:t}=this._processInputParams(e);const s=this._def.getter();return s._parse({data:t.data,path:t.path,parent:t})}}t.ZodLazy=ZodLazy;ZodLazy.create=(e,t)=>new ZodLazy({getter:e,typeName:k.ZodLazy,...processCreateParams(t)});class ZodLiteral extends ZodType{_parse(e){if(e.data!==this._def.value){const t=this._getOrReturnCtx(e);(0,i.addIssueToContext)(t,{received:t.data,code:r.ZodIssueCode.invalid_literal,expected:this._def.value});return i.INVALID}return{status:"valid",value:e.data}}get value(){return this._def.value}}t.ZodLiteral=ZodLiteral;ZodLiteral.create=(e,t)=>new ZodLiteral({value:e,typeName:k.ZodLiteral,...processCreateParams(t)});function createZodEnum(e,t){return new ZodEnum({values:e,typeName:k.ZodEnum,...processCreateParams(t)})}class ZodEnum extends ZodType{_parse(e){if(typeof e.data!=="string"){const t=this._getOrReturnCtx(e);const s=this._def.values;(0,i.addIssueToContext)(t,{expected:o.util.joinValues(s),received:t.parsedType,code:r.ZodIssueCode.invalid_type});return i.INVALID}if(!this._cache){this._cache=new Set(this._def.values)}if(!this._cache.has(e.data)){const t=this._getOrReturnCtx(e);const s=this._def.values;(0,i.addIssueToContext)(t,{received:t.data,code:r.ZodIssueCode.invalid_enum_value,options:s});return i.INVALID}return(0,i.OK)(e.data)}get options(){return this._def.values}get enum(){const e={};for(const t of this._def.values){e[t]=t}return e}get Values(){const e={};for(const t of this._def.values){e[t]=t}return e}get Enum(){const e={};for(const t of this._def.values){e[t]=t}return e}extract(e,t=this._def){return ZodEnum.create(e,{...this._def,...t})}exclude(e,t=this._def){return ZodEnum.create(this.options.filter((t=>!e.includes(t))),{...this._def,...t})}}t.ZodEnum=ZodEnum;ZodEnum.create=createZodEnum;class ZodNativeEnum extends ZodType{_parse(e){const t=o.util.getValidEnumValues(this._def.values);const s=this._getOrReturnCtx(e);if(s.parsedType!==o.ZodParsedType.string&&s.parsedType!==o.ZodParsedType.number){const e=o.util.objectValues(t);(0,i.addIssueToContext)(s,{expected:o.util.joinValues(e),received:s.parsedType,code:r.ZodIssueCode.invalid_type});return i.INVALID}if(!this._cache){this._cache=new Set(o.util.getValidEnumValues(this._def.values))}if(!this._cache.has(e.data)){const e=o.util.objectValues(t);(0,i.addIssueToContext)(s,{received:s.data,code:r.ZodIssueCode.invalid_enum_value,options:e});return i.INVALID}return(0,i.OK)(e.data)}get enum(){return this._def.values}}t.ZodNativeEnum=ZodNativeEnum;ZodNativeEnum.create=(e,t)=>new ZodNativeEnum({values:e,typeName:k.ZodNativeEnum,...processCreateParams(t)});class ZodPromise extends ZodType{unwrap(){return this._def.type}_parse(e){const{ctx:t}=this._processInputParams(e);if(t.parsedType!==o.ZodParsedType.promise&&t.common.async===false){(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.promise,received:t.parsedType});return i.INVALID}const s=t.parsedType===o.ZodParsedType.promise?t.data:Promise.resolve(t.data);return(0,i.OK)(s.then((e=>this._def.type.parseAsync(e,{path:t.path,errorMap:t.common.contextualErrorMap}))))}}t.ZodPromise=ZodPromise;ZodPromise.create=(e,t)=>new ZodPromise({type:e,typeName:k.ZodPromise,...processCreateParams(t)});class ZodEffects extends ZodType{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===k.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){const{status:t,ctx:s}=this._processInputParams(e);const r=this._def.effect||null;const a={addIssue:e=>{(0,i.addIssueToContext)(s,e);if(e.fatal){t.abort()}else{t.dirty()}},get path(){return s.path}};a.addIssue=a.addIssue.bind(a);if(r.type==="preprocess"){const e=r.transform(s.data,a);if(s.common.async){return Promise.resolve(e).then((async e=>{if(t.value==="aborted")return i.INVALID;const r=await this._def.schema._parseAsync({data:e,path:s.path,parent:s});if(r.status==="aborted")return i.INVALID;if(r.status==="dirty")return(0,i.DIRTY)(r.value);if(t.value==="dirty")return(0,i.DIRTY)(r.value);return r}))}else{if(t.value==="aborted")return i.INVALID;const r=this._def.schema._parseSync({data:e,path:s.path,parent:s});if(r.status==="aborted")return i.INVALID;if(r.status==="dirty")return(0,i.DIRTY)(r.value);if(t.value==="dirty")return(0,i.DIRTY)(r.value);return r}}if(r.type==="refinement"){const executeRefinement=e=>{const t=r.refinement(e,a);if(s.common.async){return Promise.resolve(t)}if(t instanceof Promise){throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.")}return e};if(s.common.async===false){const e=this._def.schema._parseSync({data:s.data,path:s.path,parent:s});if(e.status==="aborted")return i.INVALID;if(e.status==="dirty")t.dirty();executeRefinement(e.value);return{status:t.value,value:e.value}}else{return this._def.schema._parseAsync({data:s.data,path:s.path,parent:s}).then((e=>{if(e.status==="aborted")return i.INVALID;if(e.status==="dirty")t.dirty();return executeRefinement(e.value).then((()=>({status:t.value,value:e.value})))}))}}if(r.type==="transform"){if(s.common.async===false){const e=this._def.schema._parseSync({data:s.data,path:s.path,parent:s});if(!(0,i.isValid)(e))return i.INVALID;const n=r.transform(e.value,a);if(n instanceof Promise){throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`)}return{status:t.value,value:n}}else{return this._def.schema._parseAsync({data:s.data,path:s.path,parent:s}).then((e=>{if(!(0,i.isValid)(e))return i.INVALID;return Promise.resolve(r.transform(e.value,a)).then((e=>({status:t.value,value:e})))}))}}o.util.assertNever(r)}}t.ZodEffects=ZodEffects;t.ZodTransformer=ZodEffects;ZodEffects.create=(e,t,s)=>new ZodEffects({schema:e,typeName:k.ZodEffects,effect:t,...processCreateParams(s)});ZodEffects.createWithPreprocess=(e,t,s)=>new ZodEffects({schema:t,effect:{type:"preprocess",transform:e},typeName:k.ZodEffects,...processCreateParams(s)});class ZodOptional extends ZodType{_parse(e){const t=this._getType(e);if(t===o.ZodParsedType.undefined){return(0,i.OK)(undefined)}return this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}t.ZodOptional=ZodOptional;ZodOptional.create=(e,t)=>new ZodOptional({innerType:e,typeName:k.ZodOptional,...processCreateParams(t)});class ZodNullable extends ZodType{_parse(e){const t=this._getType(e);if(t===o.ZodParsedType.null){return(0,i.OK)(null)}return this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}t.ZodNullable=ZodNullable;ZodNullable.create=(e,t)=>new ZodNullable({innerType:e,typeName:k.ZodNullable,...processCreateParams(t)});class ZodDefault extends ZodType{_parse(e){const{ctx:t}=this._processInputParams(e);let s=t.data;if(t.parsedType===o.ZodParsedType.undefined){s=this._def.defaultValue()}return this._def.innerType._parse({data:s,path:t.path,parent:t})}removeDefault(){return this._def.innerType}}t.ZodDefault=ZodDefault;ZodDefault.create=(e,t)=>new ZodDefault({innerType:e,typeName:k.ZodDefault,defaultValue:typeof t.default==="function"?t.default:()=>t.default,...processCreateParams(t)});class ZodCatch extends ZodType{_parse(e){const{ctx:t}=this._processInputParams(e);const s={...t,common:{...t.common,issues:[]}};const a=this._def.innerType._parse({data:s.data,path:s.path,parent:{...s}});if((0,i.isAsync)(a)){return a.then((e=>({status:"valid",value:e.status==="valid"?e.value:this._def.catchValue({get error(){return new r.ZodError(s.common.issues)},input:s.data})})))}else{return{status:"valid",value:a.status==="valid"?a.value:this._def.catchValue({get error(){return new r.ZodError(s.common.issues)},input:s.data})}}}removeCatch(){return this._def.innerType}}t.ZodCatch=ZodCatch;ZodCatch.create=(e,t)=>new ZodCatch({innerType:e,typeName:k.ZodCatch,catchValue:typeof t.catch==="function"?t.catch:()=>t.catch,...processCreateParams(t)});class ZodNaN extends ZodType{_parse(e){const t=this._getType(e);if(t!==o.ZodParsedType.nan){const t=this._getOrReturnCtx(e);(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.nan,received:t.parsedType});return i.INVALID}return{status:"valid",value:e.data}}}t.ZodNaN=ZodNaN;ZodNaN.create=e=>new ZodNaN({typeName:k.ZodNaN,...processCreateParams(e)});t.BRAND=Symbol("zod_brand");class ZodBranded extends ZodType{_parse(e){const{ctx:t}=this._processInputParams(e);const s=t.data;return this._def.type._parse({data:s,path:t.path,parent:t})}unwrap(){return this._def.type}}t.ZodBranded=ZodBranded;class ZodPipeline extends ZodType{_parse(e){const{status:t,ctx:s}=this._processInputParams(e);if(s.common.async){const handleAsync=async()=>{const e=await this._def.in._parseAsync({data:s.data,path:s.path,parent:s});if(e.status==="aborted")return i.INVALID;if(e.status==="dirty"){t.dirty();return(0,i.DIRTY)(e.value)}else{return this._def.out._parseAsync({data:e.value,path:s.path,parent:s})}};return handleAsync()}else{const e=this._def.in._parseSync({data:s.data,path:s.path,parent:s});if(e.status==="aborted")return i.INVALID;if(e.status==="dirty"){t.dirty();return{status:"dirty",value:e.value}}else{return this._def.out._parseSync({data:e.value,path:s.path,parent:s})}}}static create(e,t){return new ZodPipeline({in:e,out:t,typeName:k.ZodPipeline})}}t.ZodPipeline=ZodPipeline;class ZodReadonly extends ZodType{_parse(e){const t=this._def.innerType._parse(e);const freeze=e=>{if((0,i.isValid)(e)){e.value=Object.freeze(e.value)}return e};return(0,i.isAsync)(t)?t.then((e=>freeze(e))):freeze(t)}unwrap(){return this._def.innerType}}t.ZodReadonly=ZodReadonly;ZodReadonly.create=(e,t)=>new ZodReadonly({innerType:e,typeName:k.ZodReadonly,...processCreateParams(t)});function cleanParams(e,t){const s=typeof e==="function"?e(t):typeof e==="string"?{message:e}:e;const r=typeof s==="string"?{message:s}:s;return r}function custom(e,t={},s){if(e)return ZodAny.create().superRefine(((r,a)=>{const n=e(r);if(n instanceof Promise){return n.then((e=>{if(!e){const e=cleanParams(t,r);const n=e.fatal??s??true;a.addIssue({code:"custom",...e,fatal:n})}}))}if(!n){const e=cleanParams(t,r);const n=e.fatal??s??true;a.addIssue({code:"custom",...e,fatal:n})}return}));return ZodAny.create()}t.late={object:ZodObject.lazycreate};var k;(function(e){e["ZodString"]="ZodString";e["ZodNumber"]="ZodNumber";e["ZodNaN"]="ZodNaN";e["ZodBigInt"]="ZodBigInt";e["ZodBoolean"]="ZodBoolean";e["ZodDate"]="ZodDate";e["ZodSymbol"]="ZodSymbol";e["ZodUndefined"]="ZodUndefined";e["ZodNull"]="ZodNull";e["ZodAny"]="ZodAny";e["ZodUnknown"]="ZodUnknown";e["ZodNever"]="ZodNever";e["ZodVoid"]="ZodVoid";e["ZodArray"]="ZodArray";e["ZodObject"]="ZodObject";e["ZodUnion"]="ZodUnion";e["ZodDiscriminatedUnion"]="ZodDiscriminatedUnion";e["ZodIntersection"]="ZodIntersection";e["ZodTuple"]="ZodTuple";e["ZodRecord"]="ZodRecord";e["ZodMap"]="ZodMap";e["ZodSet"]="ZodSet";e["ZodFunction"]="ZodFunction";e["ZodLazy"]="ZodLazy";e["ZodLiteral"]="ZodLiteral";e["ZodEnum"]="ZodEnum";e["ZodEffects"]="ZodEffects";e["ZodNativeEnum"]="ZodNativeEnum";e["ZodOptional"]="ZodOptional";e["ZodNullable"]="ZodNullable";e["ZodDefault"]="ZodDefault";e["ZodCatch"]="ZodCatch";e["ZodPromise"]="ZodPromise";e["ZodBranded"]="ZodBranded";e["ZodPipeline"]="ZodPipeline";e["ZodReadonly"]="ZodReadonly"})(k||(t.ZodFirstPartyTypeKind=k={}));class Class{constructor(...e){}}const instanceOfType=(e,t={message:`Input not instance of ${e.name}`})=>custom((t=>t instanceof e),t);t["instanceof"]=instanceOfType;const P=ZodString.create;t.string=P;const w=ZodNumber.create;t.number=w;const N=ZodNaN.create;t.nan=N;const O=ZodBigInt.create;t.bigint=O;const A=ZodBoolean.create;t.boolean=A;const S=ZodDate.create;t.date=S;const j=ZodSymbol.create;t.symbol=j;const E=ZodUndefined.create;t.undefined=E;const D=ZodNull.create;t["null"]=D;const L=ZodAny.create;t.any=L;const U=ZodUnknown.create;t.unknown=U;const R=ZodNever.create;t.never=R;const V=ZodVoid.create;t["void"]=V;const M=ZodArray.create;t.array=M;const $=ZodObject.create;t.object=$;const z=ZodObject.strictCreate;t.strictObject=z;const F=ZodUnion.create;t.union=F;const B=ZodDiscriminatedUnion.create;t.discriminatedUnion=B;const K=ZodIntersection.create;t.intersection=K;const q=ZodTuple.create;t.tuple=q;const W=ZodRecord.create;t.record=W;const Y=ZodMap.create;t.map=Y;const J=ZodSet.create;t.set=J;const H=ZodFunction.create;t["function"]=H;const G=ZodLazy.create;t.lazy=G;const X=ZodLiteral.create;t.literal=X;const Q=ZodEnum.create;t["enum"]=Q;const ee=ZodNativeEnum.create;t.nativeEnum=ee;const te=ZodPromise.create;t.promise=te;const se=ZodEffects.create;t.effect=se;t.transformer=se;const re=ZodOptional.create;t.optional=re;const ae=ZodNullable.create;t.nullable=ae;const ne=ZodEffects.createWithPreprocess;t.preprocess=ne;const ie=ZodPipeline.create;t.pipeline=ie;const ostring=()=>P().optional();t.ostring=ostring;const onumber=()=>w().optional();t.onumber=onumber;const oboolean=()=>A().optional();t.oboolean=oboolean;t.coerce={string:e=>ZodString.create({...e,coerce:true}),number:e=>ZodNumber.create({...e,coerce:true}),boolean:e=>ZodBoolean.create({...e,coerce:true}),bigint:e=>ZodBigInt.create({...e,coerce:true}),date:e=>ZodDate.create({...e,coerce:true})};t.NEVER=i.INVALID}};var t={};function __nccwpck_require__(s){var r=t[s];if(r!==undefined){return r.exports}var a=t[s]={exports:{}};var n=true;try{e[s].call(a.exports,a,a.exports,__nccwpck_require__);n=false}finally{if(n)delete t[s]}return a.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var s=__nccwpck_require__(629);module.exports=s})(); \ No newline at end of file diff --git a/build/node_modules/next/dist/compiled/zod/package.json b/build/node_modules/next/dist/compiled/zod/package.json new file mode 100644 index 0000000..02d25cd --- /dev/null +++ b/build/node_modules/next/dist/compiled/zod/package.json @@ -0,0 +1 @@ +{"name":"zod","main":"index.cjs","author":"Colin McDonnell ","license":"MIT"} diff --git a/build/node_modules/next/dist/experimental/testmode/context.js b/build/node_modules/next/dist/experimental/testmode/context.js new file mode 100644 index 0000000..1ce3204 --- /dev/null +++ b/build/node_modules/next/dist/experimental/testmode/context.js @@ -0,0 +1,57 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getTestReqInfo: null, + withRequest: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getTestReqInfo: function() { + return getTestReqInfo; + }, + withRequest: function() { + return withRequest; + } +}); +const _nodeasync_hooks = require("node:async_hooks"); +const testStorage = new _nodeasync_hooks.AsyncLocalStorage(); +function extractTestInfoFromRequest(req, reader) { + const proxyPortHeader = reader.header(req, 'next-test-proxy-port'); + if (!proxyPortHeader) { + return undefined; + } + const url = reader.url(req); + const proxyPort = Number(proxyPortHeader); + const testData = reader.header(req, 'next-test-data') || ''; + return { + url, + proxyPort, + testData + }; +} +function withRequest(req, reader, fn) { + const testReqInfo = extractTestInfoFromRequest(req, reader); + if (!testReqInfo) { + return fn(); + } + return testStorage.run(testReqInfo, fn); +} +function getTestReqInfo(req, reader) { + const testReqInfo = testStorage.getStore(); + if (testReqInfo) { + return testReqInfo; + } + if (req && reader) { + return extractTestInfoFromRequest(req, reader); + } + return undefined; +} + +//# sourceMappingURL=context.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/experimental/testmode/fetch.js b/build/node_modules/next/dist/experimental/testmode/fetch.js new file mode 100644 index 0000000..71b25d5 --- /dev/null +++ b/build/node_modules/next/dist/experimental/testmode/fetch.js @@ -0,0 +1,142 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + handleFetch: null, + interceptFetch: null, + reader: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + handleFetch: function() { + return handleFetch; + }, + interceptFetch: function() { + return interceptFetch; + }, + reader: function() { + return reader; + } +}); +const _context = require("./context"); +const reader = { + url (req) { + return req.url; + }, + header (req, name) { + return req.headers.get(name); + } +}; +function getTestStack() { + let stack = (new Error().stack ?? '').split('\n'); + // Skip the first line and find first non-empty line. + for(let i = 1; i < stack.length; i++){ + if (stack[i].length > 0) { + stack = stack.slice(i); + break; + } + } + // Filter out franmework lines. + stack = stack.filter((f)=>!f.includes('/next/dist/')); + // At most 5 lines. + stack = stack.slice(0, 5); + // Cleanup some internal info and trim. + stack = stack.map((s)=>s.replace('webpack-internal:///(rsc)/', '').trim()); + return stack.join(' '); +} +async function buildProxyRequest(testData, request) { + const { url, method, headers, body, cache, credentials, integrity, mode, redirect, referrer, referrerPolicy } = request; + return { + testData, + api: 'fetch', + request: { + url, + method, + headers: [ + ...Array.from(headers), + [ + 'next-test-stack', + getTestStack() + ] + ], + body: body ? Buffer.from(await request.arrayBuffer()).toString('base64') : null, + cache, + credentials, + integrity, + mode, + redirect, + referrer, + referrerPolicy + } + }; +} +function buildResponse(proxyResponse) { + const { status, headers, body } = proxyResponse.response; + return new Response(body ? Buffer.from(body, 'base64') : null, { + status, + headers: new Headers(headers) + }); +} +async function handleFetch(originalFetch, request) { + const testInfo = (0, _context.getTestReqInfo)(request, reader); + if (!testInfo) { + // Passthrough non-test requests. + return originalFetch(request); + } + const { testData, proxyPort } = testInfo; + const proxyRequest = await buildProxyRequest(testData, request); + const resp = await originalFetch(`http://localhost:${proxyPort}`, { + method: 'POST', + body: JSON.stringify(proxyRequest), + next: { + // @ts-ignore + internal: true + } + }); + if (!resp.ok) { + throw Object.defineProperty(new Error(`Proxy request failed: ${resp.status}`), "__NEXT_ERROR_CODE", { + value: "E146", + enumerable: false, + configurable: true + }); + } + const proxyResponse = await resp.json(); + const { api } = proxyResponse; + switch(api){ + case 'continue': + return originalFetch(request); + case 'abort': + case 'unhandled': + throw Object.defineProperty(new Error(`Proxy request aborted [${request.method} ${request.url}]`), "__NEXT_ERROR_CODE", { + value: "E145", + enumerable: false, + configurable: true + }); + case 'fetch': + return buildResponse(proxyResponse); + default: + return api; + } +} +function interceptFetch(originalFetch) { + global.fetch = function testFetch(input, init) { + var _init_next; + // Passthrough internal requests. + // @ts-ignore + if (init == null ? void 0 : (_init_next = init.next) == null ? void 0 : _init_next.internal) { + return originalFetch(input, init); + } + return handleFetch(originalFetch, new Request(input, init)); + }; + return ()=>{ + global.fetch = originalFetch; + }; +} + +//# sourceMappingURL=fetch.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/experimental/testmode/httpget.js b/build/node_modules/next/dist/experimental/testmode/httpget.js new file mode 100644 index 0000000..18a0dab --- /dev/null +++ b/build/node_modules/next/dist/experimental/testmode/httpget.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "interceptHttpGet", { + enumerable: true, + get: function() { + return interceptHttpGet; + } +}); +const _ClientRequest = require("next/dist/compiled/@mswjs/interceptors/ClientRequest"); +const _fetch = require("./fetch"); +function interceptHttpGet(originalFetch) { + const clientRequestInterceptor = new _ClientRequest.ClientRequestInterceptor(); + clientRequestInterceptor.on('request', async ({ request })=>{ + const response = await (0, _fetch.handleFetch)(originalFetch, request); + request.respondWith(response); + }); + clientRequestInterceptor.apply(); + // Cleanup. + return ()=>{ + clientRequestInterceptor.dispose(); + }; +} + +//# sourceMappingURL=httpget.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/experimental/testmode/server-edge.js b/build/node_modules/next/dist/experimental/testmode/server-edge.js new file mode 100644 index 0000000..31a97c6 --- /dev/null +++ b/build/node_modules/next/dist/experimental/testmode/server-edge.js @@ -0,0 +1,32 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + interceptTestApis: null, + wrapRequestHandler: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + interceptTestApis: function() { + return interceptTestApis; + }, + wrapRequestHandler: function() { + return wrapRequestHandler; + } +}); +const _context = require("./context"); +const _fetch = require("./fetch"); +function interceptTestApis() { + return (0, _fetch.interceptFetch)(global.fetch); +} +function wrapRequestHandler(handler) { + return (req, fn)=>(0, _context.withRequest)(req, _fetch.reader, ()=>handler(req, fn)); +} + +//# sourceMappingURL=server-edge.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/experimental/testmode/server.js b/build/node_modules/next/dist/experimental/testmode/server.js new file mode 100644 index 0000000..104fc39 --- /dev/null +++ b/build/node_modules/next/dist/experimental/testmode/server.js @@ -0,0 +1,62 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + interceptTestApis: null, + wrapRequestHandlerNode: null, + wrapRequestHandlerWorker: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + interceptTestApis: function() { + return interceptTestApis; + }, + wrapRequestHandlerNode: function() { + return wrapRequestHandlerNode; + }, + wrapRequestHandlerWorker: function() { + return wrapRequestHandlerWorker; + } +}); +const _context = require("./context"); +const _fetch = require("./fetch"); +const _httpget = require("./httpget"); +const reader = { + url (req) { + return req.url ?? ''; + }, + header (req, name) { + const h = req.headers[name]; + if (h === undefined || h === null) { + return null; + } + if (typeof h === 'string') { + return h; + } + return h[0] ?? null; + } +}; +function interceptTestApis() { + const originalFetch = global.fetch; + const restoreFetch = (0, _fetch.interceptFetch)(originalFetch); + const restoreHttpGet = (0, _httpget.interceptHttpGet)(originalFetch); + // Cleanup. + return ()=>{ + restoreFetch(); + restoreHttpGet(); + }; +} +function wrapRequestHandlerWorker(handler) { + return (req, res)=>(0, _context.withRequest)(req, reader, ()=>handler(req, res)); +} +function wrapRequestHandlerNode(handler) { + return (req, res, parsedUrl)=>(0, _context.withRequest)(req, reader, ()=>handler(req, res, parsedUrl)); +} + +//# sourceMappingURL=server.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/export/helpers/create-incremental-cache.js b/build/node_modules/next/dist/export/helpers/create-incremental-cache.js new file mode 100644 index 0000000..360cec5 --- /dev/null +++ b/build/node_modules/next/dist/export/helpers/create-incremental-cache.js @@ -0,0 +1,61 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "createIncrementalCache", { + enumerable: true, + get: function() { + return createIncrementalCache; + } +}); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _incrementalcache = require("../../server/lib/incremental-cache"); +const _ciinfo = require("../../server/ci-info"); +const _nodefsmethods = require("../../server/lib/node-fs-methods"); +const _interopdefault = require("../../lib/interop-default"); +const _formatdynamicimportpath = require("../../lib/format-dynamic-import-path"); +const _handlers = require("../../server/use-cache/handlers"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +async function createIncrementalCache({ cacheHandler, cacheMaxMemorySize, fetchCacheKeyPrefix, distDir, dir, flushToDisk, cacheHandlers, requestHeaders }) { + // Custom cache handler overrides. + let CacheHandler; + if (cacheHandler) { + CacheHandler = (0, _interopdefault.interopDefault)(await import((0, _formatdynamicimportpath.formatDynamicImportPath)(dir, cacheHandler)).then((mod)=>mod.default || mod)); + } + if (cacheHandlers && (0, _handlers.initializeCacheHandlers)(cacheMaxMemorySize)) { + for (const [kind, handler] of Object.entries(cacheHandlers)){ + if (!handler) continue; + (0, _handlers.setCacheHandler)(kind, (0, _interopdefault.interopDefault)(await import((0, _formatdynamicimportpath.formatDynamicImportPath)(dir, handler)).then((mod)=>mod.default || mod))); + } + } + const incrementalCache = new _incrementalcache.IncrementalCache({ + dev: false, + requestHeaders: requestHeaders || {}, + flushToDisk, + maxMemoryCacheSize: cacheMaxMemorySize, + fetchCacheKeyPrefix, + getPrerenderManifest: ()=>({ + version: 4, + routes: {}, + dynamicRoutes: {}, + preview: { + previewModeEncryptionKey: '', + previewModeId: '', + previewModeSigningKey: '' + }, + notFoundRoutes: [] + }), + fs: _nodefsmethods.nodeFs, + serverDistDir: _path.default.join(distDir, 'server'), + CurCacheHandler: CacheHandler, + minimalMode: _ciinfo.hasNextSupport + }); + globalThis.__incrementalCache = incrementalCache; + return incrementalCache; +} + +//# sourceMappingURL=create-incremental-cache.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/batcher.js b/build/node_modules/next/dist/lib/batcher.js new file mode 100644 index 0000000..3850c8a --- /dev/null +++ b/build/node_modules/next/dist/lib/batcher.js @@ -0,0 +1,65 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "Batcher", { + enumerable: true, + get: function() { + return Batcher; + } +}); +const _detachedpromise = require("./detached-promise"); +class Batcher { + constructor(cacheKeyFn, /** + * A function that will be called to schedule the wrapped function to be + * executed. This defaults to a function that will execute the function + * immediately. + */ schedulerFn = (fn)=>fn()){ + this.cacheKeyFn = cacheKeyFn; + this.schedulerFn = schedulerFn; + this.pending = new Map(); + } + static create(options) { + return new Batcher(options == null ? void 0 : options.cacheKeyFn, options == null ? void 0 : options.schedulerFn); + } + /** + * Wraps a function in a promise that will be resolved or rejected only once + * for a given key. This will allow multiple calls to the function to be + * made, but only one will be executed at a time. The result of the first + * call will be returned to all callers. + * + * @param key the key to use for the cache + * @param fn the function to wrap + * @returns a promise that resolves to the result of the function + */ async batch(key, fn) { + const cacheKey = this.cacheKeyFn ? await this.cacheKeyFn(key) : key; + if (cacheKey === null) { + return fn({ + resolve: (value)=>Promise.resolve(value), + key + }); + } + const pending = this.pending.get(cacheKey); + if (pending) return pending; + const { promise, resolve, reject } = new _detachedpromise.DetachedPromise(); + this.pending.set(cacheKey, promise); + this.schedulerFn(async ()=>{ + try { + const result = await fn({ + resolve, + key + }); + // Resolving a promise multiple times is a no-op, so we can safely + // resolve all pending promises with the same result. + resolve(result); + } catch (err) { + reject(err); + } finally{ + this.pending.delete(cacheKey); + } + }); + return promise; + } +} + +//# sourceMappingURL=batcher.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/build-custom-route.js b/build/node_modules/next/dist/lib/build-custom-route.js new file mode 100644 index 0000000..b236676 --- /dev/null +++ b/build/node_modules/next/dist/lib/build-custom-route.js @@ -0,0 +1,46 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "buildCustomRoute", { + enumerable: true, + get: function() { + return buildCustomRoute; + } +}); +const _pathtoregexp = require("next/dist/compiled/path-to-regexp"); +const _loadcustomroutes = require("./load-custom-routes"); +const _redirectstatus = require("./redirect-status"); +function buildCustomRoute(type, route, restrictedRedirectPaths) { + const compiled = (0, _pathtoregexp.pathToRegexp)(route.source, [], { + strict: true, + sensitive: false, + delimiter: '/' + }); + // If this is an internal rewrite and it already provides a regex, use it + // otherwise, normalize the source to a regex. + let regex; + if (!route.internal || type !== 'rewrite' || !('regex' in route) || typeof route.regex !== 'string') { + let source = compiled.source; + if (!route.internal) { + source = (0, _redirectstatus.modifyRouteRegex)(source, type === 'redirect' ? restrictedRedirectPaths : undefined); + } + regex = (0, _loadcustomroutes.normalizeRouteRegex)(source); + } else { + regex = route.regex; + } + if (type !== 'redirect') { + return { + ...route, + regex + }; + } + return { + ...route, + statusCode: (0, _redirectstatus.getRedirectStatus)(route), + permanent: undefined, + regex + }; +} + +//# sourceMappingURL=build-custom-route.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/bundler.js b/build/node_modules/next/dist/lib/bundler.js new file mode 100644 index 0000000..45e51ca --- /dev/null +++ b/build/node_modules/next/dist/lib/bundler.js @@ -0,0 +1,97 @@ +/// Utilties for configuring the bundler to use. +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + Bundler: null, + finalizeBundlerFromConfig: null, + parseBundlerArgs: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + Bundler: function() { + return Bundler; + }, + finalizeBundlerFromConfig: function() { + return finalizeBundlerFromConfig; + }, + parseBundlerArgs: function() { + return parseBundlerArgs; + } +}); +var Bundler = /*#__PURE__*/ function(Bundler) { + Bundler[Bundler["Turbopack"] = 0] = "Turbopack"; + Bundler[Bundler["Webpack"] = 1] = "Webpack"; + Bundler[Bundler["Rspack"] = 2] = "Rspack"; + return Bundler; +}({}); +function parseBundlerArgs(options) { + const bundlerFlags = new Map(); + const setBundlerFlag = (bundler, flag)=>{ + bundlerFlags.set(bundler, (bundlerFlags.get(bundler) ?? []).concat(flag)); + }; + // What turbo flag was set? We allow multiple to be set, which is silly but not ambiguous, just pick the most relevant one. + if (options.turbopack) { + setBundlerFlag(0, '--turbopack'); + } + if (options.turbo) { + setBundlerFlag(0, '--turbo'); + } else if (process.env.TURBOPACK) { + // We don't really want to support this but it is trivial and not really confusing. + // If we don't support it and someone sets it, we would have inconsistent behavior + // since some parts of next would read the return value of this function and other + // parts will read the env variable. + setBundlerFlag(0, `TURBOPACK=${process.env.TURBOPACK}`); + } else if (process.env.IS_TURBOPACK_TEST) { + setBundlerFlag(0, `IS_TURBOPACK_TEST=${process.env.IS_TURBOPACK_TEST}`); + } + if (options.webpack) { + setBundlerFlag(1, '--webpack'); + } + if (process.env.IS_WEBPACK_TEST) { + setBundlerFlag(1, `IS_WEBPACK_TEST=${process.env.IS_WEBPACK_TEST}`); + } + // Mostly this is set via the NextConfig but it can also be set via the command line which is + // common for testing. + if (process.env.NEXT_RSPACK) { + setBundlerFlag(2, `NEXT_RSPACK=${process.env.NEXT_RSPACK}`); + } + if (process.env.NEXT_TEST_USE_RSPACK) { + setBundlerFlag(2, `NEXT_TEST_USE_RSPACK=${process.env.NEXT_TEST_USE_RSPACK}`); + } + if (bundlerFlags.size > 1) { + console.error(`Multiple bundler flags set: ${Array.from(bundlerFlags.values()).flat().join(', ')}. + +Edit your command or your package.json script to configure only one bundler.`); + process.exit(1); + } + // The default is turbopack when nothing is configured. + if (bundlerFlags.size === 0) { + process.env.TURBOPACK = 'auto'; + return 0; + } + if (bundlerFlags.has(0)) { + // Only conditionally assign to the environment variable, preserving already set values. + // If it was set to 'auto' because no flag was set and this function is called a second time we + // would upgrade to '1' but we don't really want that. + process.env.TURBOPACK ??= '1'; + return 0; + } + // Otherwise it is one of rspack or webpack. At this point there must be exactly one key in the map. + return bundlerFlags.keys().next().value; +} +function finalizeBundlerFromConfig(fromOptions) { + // Reading the next config can set NEXT_RSPACK environment variables. + if (process.env.NEXT_RSPACK) { + return 2; + } + return fromOptions; +} + +//# sourceMappingURL=bundler.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/client-and-server-references.js b/build/node_modules/next/dist/lib/client-and-server-references.js new file mode 100644 index 0000000..2545cc0 --- /dev/null +++ b/build/node_modules/next/dist/lib/client-and-server-references.js @@ -0,0 +1,54 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getUseCacheFunctionInfo: null, + isClientReference: null, + isServerReference: null, + isUseCacheFunction: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getUseCacheFunctionInfo: function() { + return getUseCacheFunctionInfo; + }, + isClientReference: function() { + return isClientReference; + }, + isServerReference: function() { + return isServerReference; + }, + isUseCacheFunction: function() { + return isUseCacheFunction; + } +}); +const _serverreferenceinfo = require("../shared/lib/server-reference-info"); +function isServerReference(value) { + return value.$$typeof === Symbol.for('react.server.reference'); +} +function isUseCacheFunction(value) { + if (!isServerReference(value)) { + return false; + } + const { type } = (0, _serverreferenceinfo.extractInfoFromServerReferenceId)(value.$$id); + return type === 'use-cache'; +} +function getUseCacheFunctionInfo(value) { + if (!isServerReference(value)) { + return null; + } + const info = (0, _serverreferenceinfo.extractInfoFromServerReferenceId)(value.$$id); + return info.type === 'use-cache' ? info : null; +} +function isClientReference(mod) { + const defaultExport = (mod == null ? void 0 : mod.default) || mod; + return (defaultExport == null ? void 0 : defaultExport.$$typeof) === Symbol.for('react.client.reference'); +} + +//# sourceMappingURL=client-and-server-references.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/coalesced-function.js b/build/node_modules/next/dist/lib/coalesced-function.js new file mode 100644 index 0000000..aa70314 --- /dev/null +++ b/build/node_modules/next/dist/lib/coalesced-function.js @@ -0,0 +1,39 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "withCoalescedInvoke", { + enumerable: true, + get: function() { + return withCoalescedInvoke; + } +}); +const globalInvokeCache = new Map(); +function withCoalescedInvoke(func) { + return async function(key, args) { + const entry = globalInvokeCache.get(key); + if (entry) { + return entry.then((res)=>({ + isOrigin: false, + value: res.value + })); + } + async function __wrapper() { + return await func.apply(undefined, args); + } + const future = __wrapper().then((res)=>{ + globalInvokeCache.delete(key); + return { + isOrigin: true, + value: res + }; + }).catch((err)=>{ + globalInvokeCache.delete(key); + return Promise.reject(err); + }); + globalInvokeCache.set(key, future); + return future; + }; +} + +//# sourceMappingURL=coalesced-function.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/compile-error.js b/build/node_modules/next/dist/lib/compile-error.js new file mode 100644 index 0000000..63b1acd --- /dev/null +++ b/build/node_modules/next/dist/lib/compile-error.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "CompileError", { + enumerable: true, + get: function() { + return CompileError; + } +}); +class CompileError extends Error { +} + +//# sourceMappingURL=compile-error.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/constants.js b/build/node_modules/next/dist/lib/constants.js new file mode 100644 index 0000000..888d533 --- /dev/null +++ b/build/node_modules/next/dist/lib/constants.js @@ -0,0 +1,420 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + ACTION_SUFFIX: null, + APP_DIR_ALIAS: null, + CACHE_ONE_YEAR_SECONDS: null, + DOT_NEXT_ALIAS: null, + ESLINT_DEFAULT_DIRS: null, + GSP_NO_RETURNED_VALUE: null, + GSSP_COMPONENT_MEMBER_ERROR: null, + GSSP_NO_RETURNED_VALUE: null, + HTML_CONTENT_TYPE_HEADER: null, + INFINITE_CACHE: null, + INSTRUMENTATION_HOOK_FILENAME: null, + JSON_CONTENT_TYPE_HEADER: null, + MATCHED_PATH_HEADER: null, + MIDDLEWARE_FILENAME: null, + MIDDLEWARE_LOCATION_REGEXP: null, + NEXT_BODY_SUFFIX: null, + NEXT_CACHE_IMPLICIT_TAG_ID: null, + NEXT_CACHE_REVALIDATED_TAGS_HEADER: null, + NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER: null, + NEXT_CACHE_ROOT_PARAM_TAG_ID: null, + NEXT_CACHE_SOFT_TAG_MAX_LENGTH: null, + NEXT_CACHE_TAGS_HEADER: null, + NEXT_CACHE_TAG_MAX_ITEMS: null, + NEXT_CACHE_TAG_MAX_LENGTH: null, + NEXT_DATA_SUFFIX: null, + NEXT_INTERCEPTION_MARKER_PREFIX: null, + NEXT_META_SUFFIX: null, + NEXT_NAV_DEPLOYMENT_ID_HEADER: null, + NEXT_QUERY_PARAM_PREFIX: null, + NEXT_RESUME_HEADER: null, + NEXT_RESUME_STATE_LENGTH_HEADER: null, + NON_STANDARD_NODE_ENV: null, + PAGES_DIR_ALIAS: null, + PRERENDER_REVALIDATE_HEADER: null, + PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER: null, + PROXY_FILENAME: null, + PROXY_LOCATION_REGEXP: null, + PUBLIC_DIR_MIDDLEWARE_CONFLICT: null, + ROOT_DIR_ALIAS: null, + RSC_ACTION_CLIENT_WRAPPER_ALIAS: null, + RSC_ACTION_ENCRYPTION_ALIAS: null, + RSC_ACTION_PROXY_ALIAS: null, + RSC_ACTION_VALIDATE_ALIAS: null, + RSC_CACHE_WRAPPER_ALIAS: null, + RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS: null, + RSC_MOD_REF_PROXY_ALIAS: null, + RSC_SEGMENTS_DIR_SUFFIX: null, + RSC_SEGMENT_SUFFIX: null, + RSC_SUFFIX: null, + SERVER_PROPS_EXPORT_ERROR: null, + SERVER_PROPS_GET_INIT_PROPS_CONFLICT: null, + SERVER_PROPS_SSG_CONFLICT: null, + SERVER_RUNTIME: null, + SSG_FALLBACK_EXPORT_ERROR: null, + SSG_GET_INITIAL_PROPS_CONFLICT: null, + STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR: null, + TEXT_PLAIN_CONTENT_TYPE_HEADER: null, + UNSTABLE_REVALIDATE_RENAME_ERROR: null, + WEBPACK_LAYERS: null, + WEBPACK_RESOURCE_QUERIES: null, + WEB_SOCKET_MAX_RECONNECTIONS: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + ACTION_SUFFIX: function() { + return ACTION_SUFFIX; + }, + APP_DIR_ALIAS: function() { + return APP_DIR_ALIAS; + }, + CACHE_ONE_YEAR_SECONDS: function() { + return CACHE_ONE_YEAR_SECONDS; + }, + DOT_NEXT_ALIAS: function() { + return DOT_NEXT_ALIAS; + }, + ESLINT_DEFAULT_DIRS: function() { + return ESLINT_DEFAULT_DIRS; + }, + GSP_NO_RETURNED_VALUE: function() { + return GSP_NO_RETURNED_VALUE; + }, + GSSP_COMPONENT_MEMBER_ERROR: function() { + return GSSP_COMPONENT_MEMBER_ERROR; + }, + GSSP_NO_RETURNED_VALUE: function() { + return GSSP_NO_RETURNED_VALUE; + }, + HTML_CONTENT_TYPE_HEADER: function() { + return HTML_CONTENT_TYPE_HEADER; + }, + INFINITE_CACHE: function() { + return INFINITE_CACHE; + }, + INSTRUMENTATION_HOOK_FILENAME: function() { + return INSTRUMENTATION_HOOK_FILENAME; + }, + JSON_CONTENT_TYPE_HEADER: function() { + return JSON_CONTENT_TYPE_HEADER; + }, + MATCHED_PATH_HEADER: function() { + return MATCHED_PATH_HEADER; + }, + MIDDLEWARE_FILENAME: function() { + return MIDDLEWARE_FILENAME; + }, + MIDDLEWARE_LOCATION_REGEXP: function() { + return MIDDLEWARE_LOCATION_REGEXP; + }, + NEXT_BODY_SUFFIX: function() { + return NEXT_BODY_SUFFIX; + }, + NEXT_CACHE_IMPLICIT_TAG_ID: function() { + return NEXT_CACHE_IMPLICIT_TAG_ID; + }, + NEXT_CACHE_REVALIDATED_TAGS_HEADER: function() { + return NEXT_CACHE_REVALIDATED_TAGS_HEADER; + }, + NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER: function() { + return NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER; + }, + NEXT_CACHE_ROOT_PARAM_TAG_ID: function() { + return NEXT_CACHE_ROOT_PARAM_TAG_ID; + }, + NEXT_CACHE_SOFT_TAG_MAX_LENGTH: function() { + return NEXT_CACHE_SOFT_TAG_MAX_LENGTH; + }, + NEXT_CACHE_TAGS_HEADER: function() { + return NEXT_CACHE_TAGS_HEADER; + }, + NEXT_CACHE_TAG_MAX_ITEMS: function() { + return NEXT_CACHE_TAG_MAX_ITEMS; + }, + NEXT_CACHE_TAG_MAX_LENGTH: function() { + return NEXT_CACHE_TAG_MAX_LENGTH; + }, + NEXT_DATA_SUFFIX: function() { + return NEXT_DATA_SUFFIX; + }, + NEXT_INTERCEPTION_MARKER_PREFIX: function() { + return NEXT_INTERCEPTION_MARKER_PREFIX; + }, + NEXT_META_SUFFIX: function() { + return NEXT_META_SUFFIX; + }, + NEXT_NAV_DEPLOYMENT_ID_HEADER: function() { + return NEXT_NAV_DEPLOYMENT_ID_HEADER; + }, + NEXT_QUERY_PARAM_PREFIX: function() { + return NEXT_QUERY_PARAM_PREFIX; + }, + NEXT_RESUME_HEADER: function() { + return NEXT_RESUME_HEADER; + }, + NEXT_RESUME_STATE_LENGTH_HEADER: function() { + return NEXT_RESUME_STATE_LENGTH_HEADER; + }, + NON_STANDARD_NODE_ENV: function() { + return NON_STANDARD_NODE_ENV; + }, + PAGES_DIR_ALIAS: function() { + return PAGES_DIR_ALIAS; + }, + PRERENDER_REVALIDATE_HEADER: function() { + return PRERENDER_REVALIDATE_HEADER; + }, + PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER: function() { + return PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER; + }, + PROXY_FILENAME: function() { + return PROXY_FILENAME; + }, + PROXY_LOCATION_REGEXP: function() { + return PROXY_LOCATION_REGEXP; + }, + PUBLIC_DIR_MIDDLEWARE_CONFLICT: function() { + return PUBLIC_DIR_MIDDLEWARE_CONFLICT; + }, + ROOT_DIR_ALIAS: function() { + return ROOT_DIR_ALIAS; + }, + RSC_ACTION_CLIENT_WRAPPER_ALIAS: function() { + return RSC_ACTION_CLIENT_WRAPPER_ALIAS; + }, + RSC_ACTION_ENCRYPTION_ALIAS: function() { + return RSC_ACTION_ENCRYPTION_ALIAS; + }, + RSC_ACTION_PROXY_ALIAS: function() { + return RSC_ACTION_PROXY_ALIAS; + }, + RSC_ACTION_VALIDATE_ALIAS: function() { + return RSC_ACTION_VALIDATE_ALIAS; + }, + RSC_CACHE_WRAPPER_ALIAS: function() { + return RSC_CACHE_WRAPPER_ALIAS; + }, + RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS: function() { + return RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS; + }, + RSC_MOD_REF_PROXY_ALIAS: function() { + return RSC_MOD_REF_PROXY_ALIAS; + }, + RSC_SEGMENTS_DIR_SUFFIX: function() { + return RSC_SEGMENTS_DIR_SUFFIX; + }, + RSC_SEGMENT_SUFFIX: function() { + return RSC_SEGMENT_SUFFIX; + }, + RSC_SUFFIX: function() { + return RSC_SUFFIX; + }, + SERVER_PROPS_EXPORT_ERROR: function() { + return SERVER_PROPS_EXPORT_ERROR; + }, + SERVER_PROPS_GET_INIT_PROPS_CONFLICT: function() { + return SERVER_PROPS_GET_INIT_PROPS_CONFLICT; + }, + SERVER_PROPS_SSG_CONFLICT: function() { + return SERVER_PROPS_SSG_CONFLICT; + }, + SERVER_RUNTIME: function() { + return SERVER_RUNTIME; + }, + SSG_FALLBACK_EXPORT_ERROR: function() { + return SSG_FALLBACK_EXPORT_ERROR; + }, + SSG_GET_INITIAL_PROPS_CONFLICT: function() { + return SSG_GET_INITIAL_PROPS_CONFLICT; + }, + STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR: function() { + return STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR; + }, + TEXT_PLAIN_CONTENT_TYPE_HEADER: function() { + return TEXT_PLAIN_CONTENT_TYPE_HEADER; + }, + UNSTABLE_REVALIDATE_RENAME_ERROR: function() { + return UNSTABLE_REVALIDATE_RENAME_ERROR; + }, + WEBPACK_LAYERS: function() { + return WEBPACK_LAYERS; + }, + WEBPACK_RESOURCE_QUERIES: function() { + return WEBPACK_RESOURCE_QUERIES; + }, + WEB_SOCKET_MAX_RECONNECTIONS: function() { + return WEB_SOCKET_MAX_RECONNECTIONS; + } +}); +const TEXT_PLAIN_CONTENT_TYPE_HEADER = 'text/plain'; +const HTML_CONTENT_TYPE_HEADER = 'text/html; charset=utf-8'; +const JSON_CONTENT_TYPE_HEADER = 'application/json; charset=utf-8'; +const NEXT_QUERY_PARAM_PREFIX = 'nxtP'; +const NEXT_INTERCEPTION_MARKER_PREFIX = 'nxtI'; +const MATCHED_PATH_HEADER = 'x-matched-path'; +const PRERENDER_REVALIDATE_HEADER = 'x-prerender-revalidate'; +const PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER = 'x-prerender-revalidate-if-generated'; +const RSC_SEGMENTS_DIR_SUFFIX = '.segments'; +const RSC_SEGMENT_SUFFIX = '.segment.rsc'; +const RSC_SUFFIX = '.rsc'; +const ACTION_SUFFIX = '.action'; +const NEXT_DATA_SUFFIX = '.json'; +const NEXT_META_SUFFIX = '.meta'; +const NEXT_BODY_SUFFIX = '.body'; +const NEXT_NAV_DEPLOYMENT_ID_HEADER = 'x-nextjs-deployment-id'; +const NEXT_CACHE_TAGS_HEADER = 'x-next-cache-tags'; +const NEXT_CACHE_REVALIDATED_TAGS_HEADER = 'x-next-revalidated-tags'; +const NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER = 'x-next-revalidate-tag-token'; +const NEXT_RESUME_HEADER = 'next-resume'; +const NEXT_RESUME_STATE_LENGTH_HEADER = 'x-next-resume-state-length'; +const NEXT_CACHE_TAG_MAX_ITEMS = 128; +const NEXT_CACHE_TAG_MAX_LENGTH = 256; +const NEXT_CACHE_SOFT_TAG_MAX_LENGTH = 1024; +const NEXT_CACHE_IMPLICIT_TAG_ID = '_N_T_'; +const NEXT_CACHE_ROOT_PARAM_TAG_ID = '_N_RP_'; +const CACHE_ONE_YEAR_SECONDS = 31536000; +const INFINITE_CACHE = 0xfffffffe; +const MIDDLEWARE_FILENAME = 'middleware'; +const MIDDLEWARE_LOCATION_REGEXP = `(?:src/)?${MIDDLEWARE_FILENAME}`; +const PROXY_FILENAME = 'proxy'; +const PROXY_LOCATION_REGEXP = `(?:src/)?${PROXY_FILENAME}`; +const INSTRUMENTATION_HOOK_FILENAME = 'instrumentation'; +const PAGES_DIR_ALIAS = 'private-next-pages'; +const DOT_NEXT_ALIAS = 'private-dot-next'; +const ROOT_DIR_ALIAS = 'private-next-root-dir'; +const APP_DIR_ALIAS = 'private-next-app-dir'; +const RSC_MOD_REF_PROXY_ALIAS = 'private-next-rsc-mod-ref-proxy'; +const RSC_ACTION_VALIDATE_ALIAS = 'private-next-rsc-action-validate'; +const RSC_ACTION_PROXY_ALIAS = 'private-next-rsc-server-reference'; +const RSC_CACHE_WRAPPER_ALIAS = 'private-next-rsc-cache-wrapper'; +const RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS = 'private-next-rsc-track-dynamic-import'; +const RSC_ACTION_ENCRYPTION_ALIAS = 'private-next-rsc-action-encryption'; +const RSC_ACTION_CLIENT_WRAPPER_ALIAS = 'private-next-rsc-action-client-wrapper'; +const PUBLIC_DIR_MIDDLEWARE_CONFLICT = `You can not have a '_next' folder inside of your public folder. This conflicts with the internal '/_next' route. https://nextjs.org/docs/messages/public-next-folder-conflict`; +const SSG_GET_INITIAL_PROPS_CONFLICT = `You can not use getInitialProps with getStaticProps. To use SSG, please remove your getInitialProps`; +const SERVER_PROPS_GET_INIT_PROPS_CONFLICT = `You can not use getInitialProps with getServerSideProps. Please remove getInitialProps.`; +const SERVER_PROPS_SSG_CONFLICT = `You can not use getStaticProps or getStaticPaths with getServerSideProps. To use SSG, please remove getServerSideProps`; +const STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR = `can not have getInitialProps/getServerSideProps, https://nextjs.org/docs/messages/404-get-initial-props`; +const SERVER_PROPS_EXPORT_ERROR = `pages with \`getServerSideProps\` can not be exported. See more info here: https://nextjs.org/docs/messages/gssp-export`; +const GSP_NO_RETURNED_VALUE = 'Your `getStaticProps` function did not return an object. Did you forget to add a `return`?'; +const GSSP_NO_RETURNED_VALUE = 'Your `getServerSideProps` function did not return an object. Did you forget to add a `return`?'; +const UNSTABLE_REVALIDATE_RENAME_ERROR = 'The `unstable_revalidate` property is available for general use.\n' + 'Please use `revalidate` instead.'; +const GSSP_COMPONENT_MEMBER_ERROR = `can not be attached to a page's component and must be exported from the page. See more info here: https://nextjs.org/docs/messages/gssp-component-member`; +const NON_STANDARD_NODE_ENV = `You are using a non-standard "NODE_ENV" value in your environment. This creates inconsistencies in the project and is strongly advised against. Read more: https://nextjs.org/docs/messages/non-standard-node-env`; +const SSG_FALLBACK_EXPORT_ERROR = `Pages with \`fallback\` enabled in \`getStaticPaths\` can not be exported. See more info here: https://nextjs.org/docs/messages/ssg-fallback-true-export`; +const ESLINT_DEFAULT_DIRS = [ + 'app', + 'pages', + 'components', + 'lib', + 'src' +]; +const SERVER_RUNTIME = { + edge: 'edge', + experimentalEdge: 'experimental-edge', + nodejs: 'nodejs' +}; +const WEB_SOCKET_MAX_RECONNECTIONS = 12; +/** + * The names of the webpack layers. These layers are the primitives for the + * webpack chunks. + */ const WEBPACK_LAYERS_NAMES = { + /** + * The layer for the shared code between the client and server bundles. + */ shared: 'shared', + /** + * The layer for server-only runtime and picking up `react-server` export conditions. + * Including app router RSC pages and app router custom routes and metadata routes. + */ reactServerComponents: 'rsc', + /** + * Server Side Rendering layer for app (ssr). + */ serverSideRendering: 'ssr', + /** + * The browser client bundle layer for actions. + */ actionBrowser: 'action-browser', + /** + * The Node.js bundle layer for the API routes. + */ apiNode: 'api-node', + /** + * The Edge Lite bundle layer for the API routes. + */ apiEdge: 'api-edge', + /** + * The layer for the middleware code. + */ middleware: 'middleware', + /** + * The layer for the instrumentation hooks. + */ instrument: 'instrument', + /** + * The layer for assets on the edge. + */ edgeAsset: 'edge-asset', + /** + * The browser client bundle layer for App directory. + */ appPagesBrowser: 'app-pages-browser', + /** + * The browser client bundle layer for Pages directory. + */ pagesDirBrowser: 'pages-dir-browser', + /** + * The Edge Lite bundle layer for Pages directory. + */ pagesDirEdge: 'pages-dir-edge', + /** + * The Node.js bundle layer for Pages directory. + */ pagesDirNode: 'pages-dir-node' +}; +const WEBPACK_LAYERS = { + ...WEBPACK_LAYERS_NAMES, + GROUP: { + builtinReact: [ + WEBPACK_LAYERS_NAMES.reactServerComponents, + WEBPACK_LAYERS_NAMES.actionBrowser + ], + serverOnly: [ + WEBPACK_LAYERS_NAMES.reactServerComponents, + WEBPACK_LAYERS_NAMES.actionBrowser, + WEBPACK_LAYERS_NAMES.instrument, + WEBPACK_LAYERS_NAMES.middleware + ], + neutralTarget: [ + // pages api + WEBPACK_LAYERS_NAMES.apiNode, + WEBPACK_LAYERS_NAMES.apiEdge + ], + clientOnly: [ + WEBPACK_LAYERS_NAMES.serverSideRendering, + WEBPACK_LAYERS_NAMES.appPagesBrowser + ], + bundled: [ + WEBPACK_LAYERS_NAMES.reactServerComponents, + WEBPACK_LAYERS_NAMES.actionBrowser, + WEBPACK_LAYERS_NAMES.serverSideRendering, + WEBPACK_LAYERS_NAMES.appPagesBrowser, + WEBPACK_LAYERS_NAMES.shared, + WEBPACK_LAYERS_NAMES.instrument, + WEBPACK_LAYERS_NAMES.middleware + ], + appPages: [ + // app router pages and layouts + WEBPACK_LAYERS_NAMES.reactServerComponents, + WEBPACK_LAYERS_NAMES.serverSideRendering, + WEBPACK_LAYERS_NAMES.appPagesBrowser, + WEBPACK_LAYERS_NAMES.actionBrowser + ] + } +}; +const WEBPACK_RESOURCE_QUERIES = { + edgeSSREntry: '__next_edge_ssr_entry__', + metadata: '__next_metadata__', + metadataRoute: '__next_metadata_route__', + metadataImageMeta: '__next_metadata_image_meta__' +}; + +//# sourceMappingURL=constants.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/create-client-router-filter.js b/build/node_modules/next/dist/lib/create-client-router-filter.js new file mode 100644 index 0000000..65c6cd1 --- /dev/null +++ b/build/node_modules/next/dist/lib/create-client-router-filter.js @@ -0,0 +1,67 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "createClientRouterFilter", { + enumerable: true, + get: function() { + return createClientRouterFilter; + } +}); +const _bloomfilter = require("../shared/lib/bloom-filter"); +const _utils = require("../shared/lib/router/utils"); +const _removetrailingslash = require("../shared/lib/router/utils/remove-trailing-slash"); +const _trytoparsepath = require("./try-to-parse-path"); +const _interceptionroutes = require("../shared/lib/router/utils/interception-routes"); +function createClientRouterFilter(paths, redirects, allowedErrorRate) { + const staticPaths = new Set(); + const dynamicPaths = new Set(); + for (let path of paths){ + if ((0, _utils.isDynamicRoute)(path)) { + if ((0, _interceptionroutes.isInterceptionRouteAppPath)(path)) { + path = (0, _interceptionroutes.extractInterceptionRouteInformation)(path).interceptedRoute; + } + let subPath = ''; + const pathParts = path.split('/'); + // start at 1 since we split on '/' and the path starts + // with this so the first entry is an empty string + for(let i = 1; i < pathParts.length; i++){ + const curPart = pathParts[i]; + if (curPart.startsWith('[')) { + break; + } + subPath = `${subPath}/${curPart}`; + } + if (subPath) { + dynamicPaths.add(subPath); + } + } else { + staticPaths.add(path); + } + } + for (const redirect of redirects){ + const { source } = redirect; + const path = (0, _removetrailingslash.removeTrailingSlash)(source); + let tokens = []; + try { + tokens = (0, _trytoparsepath.tryToParsePath)(source).tokens || []; + } catch {} + if (tokens.every((token)=>typeof token === 'string')) { + // only include static redirects initially + staticPaths.add(path); + } + } + const staticFilter = _bloomfilter.BloomFilter.from([ + ...staticPaths + ], allowedErrorRate); + const dynamicFilter = _bloomfilter.BloomFilter.from([ + ...dynamicPaths + ], allowedErrorRate); + const data = { + staticFilter: staticFilter.export(), + dynamicFilter: dynamicFilter.export() + }; + return data; +} + +//# sourceMappingURL=create-client-router-filter.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/default-transpiled-packages.json b/build/node_modules/next/dist/lib/default-transpiled-packages.json new file mode 100644 index 0000000..aca6e6d --- /dev/null +++ b/build/node_modules/next/dist/lib/default-transpiled-packages.json @@ -0,0 +1 @@ +["geist"] diff --git a/build/node_modules/next/dist/lib/detached-promise.js b/build/node_modules/next/dist/lib/detached-promise.js new file mode 100644 index 0000000..6a7ce08 --- /dev/null +++ b/build/node_modules/next/dist/lib/detached-promise.js @@ -0,0 +1,32 @@ +/** + * A `Promise.withResolvers` implementation that exposes the `resolve` and + * `reject` functions on a `Promise`. + * + * @see https://tc39.es/proposal-promise-with-resolvers/ + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "DetachedPromise", { + enumerable: true, + get: function() { + return DetachedPromise; + } +}); +class DetachedPromise { + constructor(){ + let resolve; + let reject; + // Create the promise and assign the resolvers to the object. + this.promise = new Promise((res, rej)=>{ + resolve = res; + reject = rej; + }); + // We know that resolvers is defined because the Promise constructor runs + // synchronously. + this.resolve = resolve; + this.reject = reject; + } +} + +//# sourceMappingURL=detached-promise.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/detect-typo.js b/build/node_modules/next/dist/lib/detect-typo.js new file mode 100644 index 0000000..135f481 --- /dev/null +++ b/build/node_modules/next/dist/lib/detect-typo.js @@ -0,0 +1,51 @@ +// the minimum number of operations required to convert string a to string b. +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "detectTypo", { + enumerable: true, + get: function() { + return detectTypo; + } +}); +function minDistance(a, b, threshold) { + const m = a.length; + const n = b.length; + if (m < n) { + return minDistance(b, a, threshold); + } + if (n === 0) { + return m; + } + let previousRow = Array.from({ + length: n + 1 + }, (_, i)=>i); + for(let i = 0; i < m; i++){ + const s1 = a[i]; + let currentRow = [ + i + 1 + ]; + for(let j = 0; j < n; j++){ + const s2 = b[j]; + const insertions = previousRow[j + 1] + 1; + const deletions = currentRow[j] + 1; + const substitutions = previousRow[j] + Number(s1 !== s2); + currentRow.push(Math.min(insertions, deletions, substitutions)); + } + previousRow = currentRow; + } + return previousRow[previousRow.length - 1]; +} +function detectTypo(input, options, threshold = 2) { + const potentialTypos = options.map((o)=>({ + option: o, + distance: minDistance(o, input, threshold) + })).filter(({ distance })=>distance <= threshold && distance > 0).sort((a, b)=>a.distance - b.distance); + if (potentialTypos.length) { + return potentialTypos[0].option; + } + return null; +} + +//# sourceMappingURL=detect-typo.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/download-swc.js b/build/node_modules/next/dist/lib/download-swc.js new file mode 100644 index 0000000..319b1b1 --- /dev/null +++ b/build/node_modules/next/dist/lib/download-swc.js @@ -0,0 +1,183 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + downloadNativeNextSwc: null, + downloadWasmSwc: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + downloadNativeNextSwc: function() { + return downloadNativeNextSwc; + }, + downloadWasmSwc: function() { + return downloadWasmSwc; + } +}); +const _fs = /*#__PURE__*/ _interop_require_default(require("fs")); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("../build/output/log")); +const _tar = require("next/dist/compiled/tar"); +const _getregistry = require("./helpers/get-registry"); +const _getcachedirectory = require("./helpers/get-cache-directory"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +const { WritableStream } = require('node:stream/web'); +const MAX_VERSIONS_TO_CACHE = 8; +async function extractBinary(outputDirectory, pkgName, tarFileName) { + const cacheDirectory = (0, _getcachedirectory.getCacheDirectory)('next-swc', process.env['NEXT_SWC_PATH']); + const extractFromTar = ()=>(0, _tar.x)({ + file: _path.default.join(cacheDirectory, tarFileName), + cwd: outputDirectory, + strip: 1 + }); + if (!_fs.default.existsSync(_path.default.join(cacheDirectory, tarFileName))) { + _log.info(`Downloading swc package ${pkgName}... to ${cacheDirectory}`); + await _fs.default.promises.mkdir(cacheDirectory, { + recursive: true + }); + const tempFile = _path.default.join(cacheDirectory, `${tarFileName}.temp-${Date.now()}`); + const registry = (0, _getregistry.getRegistry)(); + const downloadUrl = `${registry}${pkgName}/-/${tarFileName}`; + await fetch(downloadUrl).then((res)=>{ + const { ok, body } = res; + if (!ok || !body) { + _log.error(`Failed to download swc package from ${downloadUrl}`); + } + if (!ok) { + throw Object.defineProperty(new Error(`request failed with status ${res.status}`), "__NEXT_ERROR_CODE", { + value: "E109", + enumerable: false, + configurable: true + }); + } + if (!body) { + throw Object.defineProperty(new Error('request failed with empty body'), "__NEXT_ERROR_CODE", { + value: "E143", + enumerable: false, + configurable: true + }); + } + const cacheWriteStream = _fs.default.createWriteStream(tempFile); + return body.pipeTo(new WritableStream({ + write (chunk) { + return new Promise((resolve, reject)=>cacheWriteStream.write(chunk, (error)=>{ + if (error) { + reject(error); + return; + } + resolve(); + })); + }, + close () { + return new Promise((resolve, reject)=>cacheWriteStream.close((error)=>{ + if (error) { + reject(error); + return; + } + resolve(); + })); + } + })); + }); + await _fs.default.promises.access(tempFile) // ensure the temp file existed + ; + await _fs.default.promises.rename(tempFile, _path.default.join(cacheDirectory, tarFileName)); + } else { + _log.info(`Using cached swc package ${pkgName}...`); + } + await extractFromTar(); + const cacheFiles = await _fs.default.promises.readdir(cacheDirectory); + if (cacheFiles.length > MAX_VERSIONS_TO_CACHE) { + cacheFiles.sort((a, b)=>{ + if (a.length < b.length) return -1; + return a.localeCompare(b); + }); + // prune oldest versions in cache + for(let i = 0; i++; i < cacheFiles.length - MAX_VERSIONS_TO_CACHE){ + await _fs.default.promises.unlink(_path.default.join(cacheDirectory, cacheFiles[i])).catch(()=>{}); + } + } +} +async function downloadNativeNextSwc(version, bindingsDirectory, triplesABI) { + for (const triple of triplesABI){ + const pkgName = `@next/swc-${triple}`; + const tarFileName = `${pkgName.substring(6)}-${version}.tgz`; + const outputDirectory = _path.default.join(bindingsDirectory, pkgName); + if (_fs.default.existsSync(outputDirectory)) { + // if the package is already downloaded a different + // failure occurred than not being present + return; + } + await _fs.default.promises.mkdir(outputDirectory, { + recursive: true + }); + await extractBinary(outputDirectory, pkgName, tarFileName); + } +} +async function downloadWasmSwc(version, wasmDirectory, variant = 'nodejs') { + const pkgName = `@next/swc-wasm-${variant}`; + const tarFileName = `${pkgName.substring(6)}-${version}.tgz`; + const outputDirectory = _path.default.join(wasmDirectory, pkgName); + if (_fs.default.existsSync(outputDirectory)) { + // if the package is already downloaded a different + // failure occurred than not being present + return; + } + await _fs.default.promises.mkdir(outputDirectory, { + recursive: true + }); + await extractBinary(outputDirectory, pkgName, tarFileName); +} + +//# sourceMappingURL=download-swc.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/error-telemetry-utils.js b/build/node_modules/next/dist/lib/error-telemetry-utils.js new file mode 100644 index 0000000..5828927 --- /dev/null +++ b/build/node_modules/next/dist/lib/error-telemetry-utils.js @@ -0,0 +1,42 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createDigestWithErrorCode: null, + extractNextErrorCode: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createDigestWithErrorCode: function() { + return createDigestWithErrorCode; + }, + extractNextErrorCode: function() { + return extractNextErrorCode; + } +}); +const ERROR_CODE_DELIMITER = '@'; +const createDigestWithErrorCode = (thrownValue, originalDigest)=>{ + if (typeof thrownValue === 'object' && thrownValue !== null && '__NEXT_ERROR_CODE' in thrownValue) { + return `${originalDigest}${ERROR_CODE_DELIMITER}${thrownValue.__NEXT_ERROR_CODE}`; + } + return originalDigest; +}; +const extractNextErrorCode = (error)=>{ + if (typeof error === 'object' && error !== null && '__NEXT_ERROR_CODE' in error && typeof error.__NEXT_ERROR_CODE === 'string') { + return error.__NEXT_ERROR_CODE; + } + if (typeof error === 'object' && error !== null && 'digest' in error && typeof error.digest === 'string') { + const segments = error.digest.split(ERROR_CODE_DELIMITER); + const errorCode = segments.find((segment)=>segment.startsWith('E')); + return errorCode; + } + return undefined; +}; + +//# sourceMappingURL=error-telemetry-utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/fallback.js b/build/node_modules/next/dist/lib/fallback.js new file mode 100644 index 0000000..4f7730b --- /dev/null +++ b/build/node_modules/next/dist/lib/fallback.js @@ -0,0 +1,100 @@ +/** + * Describes the different fallback modes that a given page can have. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + FallbackMode: null, + fallbackModeToFallbackField: null, + parseFallbackField: null, + parseStaticPathsResult: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + FallbackMode: function() { + return FallbackMode; + }, + fallbackModeToFallbackField: function() { + return fallbackModeToFallbackField; + }, + parseFallbackField: function() { + return parseFallbackField; + }, + parseStaticPathsResult: function() { + return parseStaticPathsResult; + } +}); +var FallbackMode = /*#__PURE__*/ function(FallbackMode) { + /** + * A BLOCKING_STATIC_RENDER fallback will block the request until the page is + * generated. No fallback page will be rendered, and users will have to wait + * to render the page. + */ FallbackMode["BLOCKING_STATIC_RENDER"] = "BLOCKING_STATIC_RENDER"; + /** + * When set to PRERENDER, a fallback page will be sent to users in place of + * forcing them to wait for the page to be generated. This allows the user to + * see a rendered page earlier. + */ FallbackMode["PRERENDER"] = "PRERENDER"; + /** + * When set to NOT_FOUND, pages that are not already prerendered will result + * in a not found response. + */ FallbackMode["NOT_FOUND"] = "NOT_FOUND"; + return FallbackMode; +}({}); +function parseFallbackField(fallbackField) { + if (typeof fallbackField === 'string') { + return "PRERENDER"; + } else if (fallbackField === null) { + return "BLOCKING_STATIC_RENDER"; + } else if (fallbackField === false) { + return "NOT_FOUND"; + } else if (fallbackField === undefined) { + return undefined; + } else { + throw Object.defineProperty(new Error(`Invalid fallback option: ${fallbackField}. Fallback option must be a string, null, undefined, or false.`), "__NEXT_ERROR_CODE", { + value: "E285", + enumerable: false, + configurable: true + }); + } +} +function fallbackModeToFallbackField(fallback, page) { + switch(fallback){ + case "BLOCKING_STATIC_RENDER": + return null; + case "NOT_FOUND": + return false; + case "PRERENDER": + if (!page) { + throw Object.defineProperty(new Error(`Invariant: expected a page to be provided when fallback mode is "${fallback}"`), "__NEXT_ERROR_CODE", { + value: "E422", + enumerable: false, + configurable: true + }); + } + return page; + default: + throw Object.defineProperty(new Error(`Invalid fallback mode: ${fallback}`), "__NEXT_ERROR_CODE", { + value: "E254", + enumerable: false, + configurable: true + }); + } +} +function parseStaticPathsResult(result) { + if (result === true) { + return "PRERENDER"; + } else if (result === 'blocking') { + return "BLOCKING_STATIC_RENDER"; + } else { + return "NOT_FOUND"; + } +} + +//# sourceMappingURL=fallback.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/fatal-error.js b/build/node_modules/next/dist/lib/fatal-error.js new file mode 100644 index 0000000..574944e --- /dev/null +++ b/build/node_modules/next/dist/lib/fatal-error.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "FatalError", { + enumerable: true, + get: function() { + return FatalError; + } +}); +class FatalError extends Error { +} + +//# sourceMappingURL=fatal-error.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/file-exists.js b/build/node_modules/next/dist/lib/file-exists.js new file mode 100644 index 0000000..183eb89 --- /dev/null +++ b/build/node_modules/next/dist/lib/file-exists.js @@ -0,0 +1,53 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + FileType: null, + fileExists: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + FileType: function() { + return FileType; + }, + fileExists: function() { + return fileExists; + } +}); +const _fs = require("fs"); +const _iserror = /*#__PURE__*/ _interop_require_default(require("./is-error")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +var FileType = /*#__PURE__*/ function(FileType) { + FileType["File"] = "file"; + FileType["Directory"] = "directory"; + return FileType; +}({}); +async function fileExists(fileName, type) { + try { + if (type === "file") { + const stats = await _fs.promises.stat(fileName); + return stats.isFile(); + } else if (type === "directory") { + const stats = await _fs.promises.stat(fileName); + return stats.isDirectory(); + } + return (0, _fs.existsSync)(fileName); + } catch (err) { + if ((0, _iserror.default)(err) && (err.code === 'ENOENT' || err.code === 'ENAMETOOLONG')) { + return false; + } + throw err; + } +} + +//# sourceMappingURL=file-exists.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/find-config.js b/build/node_modules/next/dist/lib/find-config.js new file mode 100644 index 0000000..82b080a --- /dev/null +++ b/build/node_modules/next/dist/lib/find-config.js @@ -0,0 +1,102 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + findConfig: null, + findConfigPath: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + findConfig: function() { + return findConfig; + }, + findConfigPath: function() { + return findConfigPath; + } +}); +const _findup = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/find-up")); +const _promises = require("fs/promises"); +const _json5 = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/json5")); +const _url = require("url"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function findConfigPath(dir, key) { + // If we didn't find the configuration in `package.json`, we should look for + // known filenames. + return (0, _findup.default)([ + `.${key}rc.json`, + `${key}.config.json`, + `.${key}rc.js`, + `${key}.config.js`, + `${key}.config.mjs`, + `${key}.config.cjs` + ], { + cwd: dir + }); +} +async function findConfig(directory, key, _returnFile) { + // `package.json` configuration always wins. Let's check that first. + const packageJsonPath = await (0, _findup.default)('package.json', { + cwd: directory + }); + let isESM = false; + if (packageJsonPath) { + try { + const packageJsonStr = await (0, _promises.readFile)(packageJsonPath, 'utf8'); + const packageJson = JSON.parse(packageJsonStr); + if (typeof packageJson !== 'object') { + throw new Error() // Stop processing and continue + ; + } + if (packageJson.type === 'module') { + isESM = true; + } + if (packageJson[key] != null && typeof packageJson[key] === 'object') { + return packageJson[key]; + } + } catch { + // Ignore error and continue + } + } + const filePath = await findConfigPath(directory, key); + const esmImport = (path)=>{ + // Skip mapping to absolute url with pathToFileURL on windows if it's jest + // https://github.com/nodejs/node/issues/31710#issuecomment-587345749 + if (process.platform === 'win32' && !process.env.JEST_WORKER_ID) { + // on windows import("C:\\path\\to\\file") is not valid, so we need to + // use file:// URLs + return import((0, _url.pathToFileURL)(path).toString()); + } else { + return import(path); + } + }; + if (filePath) { + if (filePath.endsWith('.js')) { + if (isESM) { + return (await esmImport(filePath)).default; + } else { + return require(filePath); + } + } else if (filePath.endsWith('.mjs')) { + return (await esmImport(filePath)).default; + } else if (filePath.endsWith('.cjs')) { + return require(filePath); + } + // We load JSON contents with JSON5 to allow users to comment in their + // configuration file. This pattern was popularized by TypeScript. + const fileContents = await (0, _promises.readFile)(filePath, 'utf8'); + return _json5.default.parse(fileContents); + } + return null; +} + +//# sourceMappingURL=find-config.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/find-pages-dir.js b/build/node_modules/next/dist/lib/find-pages-dir.js new file mode 100644 index 0000000..1445f34 --- /dev/null +++ b/build/node_modules/next/dist/lib/find-pages-dir.js @@ -0,0 +1,65 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + findDir: null, + findPagesDir: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + findDir: function() { + return findDir; + }, + findPagesDir: function() { + return findPagesDir; + } +}); +const _fs = /*#__PURE__*/ _interop_require_default(require("fs")); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function findDir(dir, name) { + // prioritize ./${name} over ./src/${name} + let curDir = _path.default.join(dir, name); + if (_fs.default.existsSync(curDir)) return curDir; + curDir = _path.default.join(dir, 'src', name); + if (_fs.default.existsSync(curDir)) return curDir; + return null; +} +function findPagesDir(dir) { + const pagesDir = findDir(dir, 'pages') || undefined; + const appDir = findDir(dir, 'app') || undefined; + if (appDir == null && pagesDir == null) { + throw Object.defineProperty(new Error("> Couldn't find any `pages` or `app` directory. Please create one under the project root"), "__NEXT_ERROR_CODE", { + value: "E144", + enumerable: false, + configurable: true + }); + } + if (pagesDir && appDir) { + const pagesParent = _path.default.dirname(pagesDir); + const appParent = _path.default.dirname(appDir); + if (pagesParent !== appParent) { + throw Object.defineProperty(new Error('> `pages` and `app` directories should be under the same folder'), "__NEXT_ERROR_CODE", { + value: "E801", + enumerable: false, + configurable: true + }); + } + } + return { + pagesDir, + appDir + }; +} + +//# sourceMappingURL=find-pages-dir.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/find-root.js b/build/node_modules/next/dist/lib/find-root.js new file mode 100644 index 0000000..00f0d6b --- /dev/null +++ b/build/node_modules/next/dist/lib/find-root.js @@ -0,0 +1,126 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + findRootDirAndLockFiles: null, + warnDuplicatedLockFiles: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + findRootDirAndLockFiles: function() { + return findRootDirAndLockFiles; + }, + warnDuplicatedLockFiles: function() { + return warnDuplicatedLockFiles; + } +}); +const _path = require("path"); +const _findup = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/find-up")); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("../build/output/log")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +function findWorkRoot(cwd) { + // Find-up evaluates the list of files at each level. + // For pnpm-workspace.yaml we first want to look up before searching for lockfiles as those can be included in the application directory by accident. + const pnpmWorkspaceFile = _findup.default.sync('pnpm-workspace.yaml', { + cwd + }); + if (pnpmWorkspaceFile) { + return pnpmWorkspaceFile; + } + return _findup.default.sync([ + 'pnpm-lock.yaml', + 'package-lock.json', + 'yarn.lock', + 'bun.lock', + 'bun.lockb' + ], { + cwd + }); +} +function findRootDirAndLockFiles(cwd) { + const lockFile = findWorkRoot(cwd); + if (!lockFile) return { + lockFiles: [], + rootDir: cwd + }; + const lockFiles = [ + lockFile + ]; + while(true){ + const lastLockFile = lockFiles[lockFiles.length - 1]; + const currentDir = (0, _path.dirname)(lastLockFile); + const parentDir = (0, _path.dirname)(currentDir); + // dirname('/')==='/' so if we happen to reach the FS root (as might happen in a container we need to quit to avoid looping forever + if (parentDir === currentDir) break; + const newLockFile = findWorkRoot(parentDir); + if (!newLockFile) break; + lockFiles.push(newLockFile); + } + return { + lockFiles, + rootDir: (0, _path.dirname)(lockFiles[lockFiles.length - 1]) + }; +} +function warnDuplicatedLockFiles(lockFiles) { + if (lockFiles.length > 1) { + const additionalLockFiles = lockFiles.slice(0, -1).map((str)=>`\n * ${str}`).join(''); + if (process.env.TURBOPACK) { + _log.warnOnce(`Warning: Next.js inferred your workspace root, but it may not be correct.\n` + ` We detected multiple lockfiles and selected the directory of ${lockFiles[lockFiles.length - 1]} as the root directory.\n` + ` To silence this warning, set \`turbopack.root\` in your Next.js config, or consider ` + `removing one of the lockfiles if it's not needed.\n` + ` See https://nextjs.org/docs/app/api-reference/config/next-config-js/turbopack#root-directory for more information.\n` + ` Detected additional lockfiles: ${additionalLockFiles}\n`); + } else { + _log.warnOnce(`Warning: Next.js inferred your workspace root, but it may not be correct.\n` + ` We detected multiple lockfiles and selected the directory of ${lockFiles[lockFiles.length - 1]} as the root directory.\n` + ` To silence this warning, set \`outputFileTracingRoot\` in your Next.js config, or consider ` + `removing one of the lockfiles if it's not needed.\n` + ` See https://nextjs.org/docs/app/api-reference/config/next-config-js/output#caveats for more information.\n` + ` Detected additional lockfiles: ${additionalLockFiles}\n`); + } + } +} + +//# sourceMappingURL=find-root.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/format-cli-help-output.js b/build/node_modules/next/dist/lib/format-cli-help-output.js new file mode 100644 index 0000000..d9ecfc2 --- /dev/null +++ b/build/node_modules/next/dist/lib/format-cli-help-output.js @@ -0,0 +1,84 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "formatCliHelpOutput", { + enumerable: true, + get: function() { + return formatCliHelpOutput; + } +}); +const _picocolors = require("../lib/picocolors"); +// Copy-pasted from Commander's Help class -> formatHelp(). +// TL;DR, we're overriding the built-in help to add a few niceties. +// Link: https://github.com/tj/commander.js/blob/master/lib/help.js +const formatCliHelpOutput = (cmd, helper)=>{ + const termWidth = helper.padWidth(cmd, helper); + const helpWidth = helper.helpWidth || 80; + const itemIndentWidth = 2; + const itemSeparatorWidth = 2 // between term and description + ; + function formatItem(term, description) { + let value = term; + if (description) { + if (term === 'directory') { + value = `[${term}]`; + } + const fullText = `${value.padEnd(termWidth + itemSeparatorWidth)}${description}`; + return helper.wrap(fullText, helpWidth - itemIndentWidth, termWidth + itemSeparatorWidth); + } + return term; + } + function formatList(textArray) { + return textArray.join('\n').replace(/^/gm, ' '.repeat(itemIndentWidth)); + } + // Usage + let output = [ + `${(0, _picocolors.bold)('Usage:')} ${helper.commandUsage(cmd)}`, + '' + ]; + // Description + const commandDescription = helper.commandDescription(cmd); + if (commandDescription.length > 0) { + output = output.concat([ + helper.wrap(commandDescription, helpWidth, 0), + '' + ]); + } + // Arguments + const argumentList = helper.visibleArguments(cmd).map((argument)=>{ + return formatItem(helper.argumentTerm(argument), helper.argumentDescription(argument)); + }); + if (argumentList.length > 0) { + output = output.concat([ + `${(0, _picocolors.bold)('Arguments:')}`, + formatList(argumentList), + '' + ]); + } + // Options + const optionList = helper.visibleOptions(cmd).map((option)=>{ + return formatItem(helper.optionTerm(option), helper.optionDescription(option)); + }); + if (optionList.length > 0) { + output = output.concat([ + `${(0, _picocolors.bold)('Options:')}`, + formatList(optionList), + '' + ]); + } + // Commands + const commandList = helper.visibleCommands(cmd).map((subCmd)=>{ + return formatItem(helper.subcommandTerm(subCmd), helper.subcommandDescription(subCmd)); + }); + if (commandList.length > 0) { + output = output.concat([ + `${(0, _picocolors.bold)('Commands:')}`, + formatList(commandList), + '' + ]); + } + return output.join('\n'); +}; + +//# sourceMappingURL=format-cli-help-output.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/format-dynamic-import-path.js b/build/node_modules/next/dist/lib/format-dynamic-import-path.js new file mode 100644 index 0000000..337ac23 --- /dev/null +++ b/build/node_modules/next/dist/lib/format-dynamic-import-path.js @@ -0,0 +1,24 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "formatDynamicImportPath", { + enumerable: true, + get: function() { + return formatDynamicImportPath; + } +}); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _url = require("url"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const formatDynamicImportPath = (dir, filePath)=>{ + const absoluteFilePath = _path.default.isAbsolute(filePath) ? filePath : _path.default.join(dir, filePath); + const formattedFilePath = (0, _url.pathToFileURL)(absoluteFilePath).toString(); + return formattedFilePath; +}; + +//# sourceMappingURL=format-dynamic-import-path.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/format-server-error.js b/build/node_modules/next/dist/lib/format-server-error.js new file mode 100644 index 0000000..7e2c8e4 --- /dev/null +++ b/build/node_modules/next/dist/lib/format-server-error.js @@ -0,0 +1,75 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + formatServerError: null, + getStackWithoutErrorMessage: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + formatServerError: function() { + return formatServerError; + }, + getStackWithoutErrorMessage: function() { + return getStackWithoutErrorMessage; + } +}); +const invalidServerComponentReactHooks = [ + 'useDeferredValue', + 'useEffect', + 'useEffectEvent', + 'useImperativeHandle', + 'useInsertionEffect', + 'useLayoutEffect', + 'useReducer', + 'useRef', + 'useState', + 'useSyncExternalStore', + 'useTransition', + 'experimental_useOptimistic', + 'useOptimistic' +]; +function setMessage(error, message) { + error.message = message; + if (error.stack) { + const lines = error.stack.split('\n'); + lines[0] = message; + error.stack = lines.join('\n'); + } +} +function getStackWithoutErrorMessage(error) { + const stack = error.stack; + if (!stack) return ''; + return stack.replace(/^[^\n]*\n/, ''); +} +function formatServerError(error) { + if (typeof (error == null ? void 0 : error.message) !== 'string') return; + if (error.message.includes('Class extends value undefined is not a constructor or null')) { + const addedMessage = 'This might be caused by a React Class Component being rendered in a Server Component, React Class Components only works in Client Components. Read more: https://nextjs.org/docs/messages/class-component-in-server-component'; + // If this error instance already has the message, don't add it again + if (error.message.includes(addedMessage)) return; + setMessage(error, `${error.message} + +${addedMessage}`); + return; + } + if (error.message.includes('createContext is not a function')) { + setMessage(error, 'createContext only works in Client Components. Add the "use client" directive at the top of the file to use it. Read more: https://nextjs.org/docs/messages/context-in-server-component'); + return; + } + for (const clientHook of invalidServerComponentReactHooks){ + const regex = new RegExp(`\\b${clientHook}\\b.*is not a function`); + if (regex.test(error.message)) { + setMessage(error, `${clientHook} only works in Client Components. Add the "use client" directive at the top of the file to use it. Read more: https://nextjs.org/docs/messages/react-client-hook-in-server-component`); + return; + } + } +} + +//# sourceMappingURL=format-server-error.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/framework/boundary-components.js b/build/node_modules/next/dist/lib/framework/boundary-components.js new file mode 100644 index 0000000..c465a96 --- /dev/null +++ b/build/node_modules/next/dist/lib/framework/boundary-components.js @@ -0,0 +1,62 @@ +'use client'; +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + MetadataBoundary: null, + OutletBoundary: null, + RootLayoutBoundary: null, + ViewportBoundary: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + MetadataBoundary: function() { + return MetadataBoundary; + }, + OutletBoundary: function() { + return OutletBoundary; + }, + RootLayoutBoundary: function() { + return RootLayoutBoundary; + }, + ViewportBoundary: function() { + return ViewportBoundary; + } +}); +const _boundaryconstants = require("./boundary-constants"); +// We use a namespace object to allow us to recover the name of the function +// at runtime even when production bundling/minification is used. +const NameSpace = { + [_boundaryconstants.METADATA_BOUNDARY_NAME]: function({ children }) { + return children; + }, + [_boundaryconstants.VIEWPORT_BOUNDARY_NAME]: function({ children }) { + return children; + }, + [_boundaryconstants.OUTLET_BOUNDARY_NAME]: function({ children }) { + return children; + }, + [_boundaryconstants.ROOT_LAYOUT_BOUNDARY_NAME]: function({ children }) { + return children; + } +}; +const MetadataBoundary = // We use slice(0) to trick the bundler into not inlining/minifying the function +// so it retains the name inferred from the namespace object +NameSpace[_boundaryconstants.METADATA_BOUNDARY_NAME.slice(0)]; +const ViewportBoundary = // We use slice(0) to trick the bundler into not inlining/minifying the function +// so it retains the name inferred from the namespace object +NameSpace[_boundaryconstants.VIEWPORT_BOUNDARY_NAME.slice(0)]; +const OutletBoundary = // We use slice(0) to trick the bundler into not inlining/minifying the function +// so it retains the name inferred from the namespace object +NameSpace[_boundaryconstants.OUTLET_BOUNDARY_NAME.slice(0)]; +const RootLayoutBoundary = // We use slice(0) to trick the bundler into not inlining/minifying the function +// so it retains the name inferred from the namespace object +NameSpace[_boundaryconstants.ROOT_LAYOUT_BOUNDARY_NAME.slice(0)]; + +//# sourceMappingURL=boundary-components.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/framework/boundary-constants.js b/build/node_modules/next/dist/lib/framework/boundary-constants.js new file mode 100644 index 0000000..6e96806 --- /dev/null +++ b/build/node_modules/next/dist/lib/framework/boundary-constants.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + METADATA_BOUNDARY_NAME: null, + OUTLET_BOUNDARY_NAME: null, + ROOT_LAYOUT_BOUNDARY_NAME: null, + VIEWPORT_BOUNDARY_NAME: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + METADATA_BOUNDARY_NAME: function() { + return METADATA_BOUNDARY_NAME; + }, + OUTLET_BOUNDARY_NAME: function() { + return OUTLET_BOUNDARY_NAME; + }, + ROOT_LAYOUT_BOUNDARY_NAME: function() { + return ROOT_LAYOUT_BOUNDARY_NAME; + }, + VIEWPORT_BOUNDARY_NAME: function() { + return VIEWPORT_BOUNDARY_NAME; + } +}); +const METADATA_BOUNDARY_NAME = '__next_metadata_boundary__'; +const VIEWPORT_BOUNDARY_NAME = '__next_viewport_boundary__'; +const OUTLET_BOUNDARY_NAME = '__next_outlet_boundary__'; +const ROOT_LAYOUT_BOUNDARY_NAME = '__next_root_layout_boundary__'; + +//# sourceMappingURL=boundary-constants.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/fs/rename.js b/build/node_modules/next/dist/lib/fs/rename.js new file mode 100644 index 0000000..ba9f169 --- /dev/null +++ b/build/node_modules/next/dist/lib/fs/rename.js @@ -0,0 +1,87 @@ +/* +MIT License + +Copyright (c) 2015 - present Microsoft Corporation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + */ // This file is based on https://github.com/microsoft/vscode/blob/f860fcf11022f10a992440fd54c6e45674e39617/src/vs/base/node/pfs.ts +// See the LICENSE at the top of the file +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "renameSync", { + enumerable: true, + get: function() { + return renameSync; + } +}); +const _nodefs = require("node:fs"); +function renameSync(source, target, windowsRetryTimeout = 60000 /* matches graceful-fs */ ) { + if (source === target) { + return; // simulate node.js behaviour here and do a no-op if paths match + } + if (process.platform === 'win32' && typeof windowsRetryTimeout === 'number') { + // On Windows, a rename can fail when either source or target + // is locked by AV software. We do leverage graceful-fs to iron + // out these issues, however in case the target file exists, + // graceful-fs will immediately return without retry for fs.rename(). + renameSyncWithRetry(source, target, Date.now(), windowsRetryTimeout); + } else { + (0, _nodefs.renameSync)(source, target); + } +} +function renameSyncWithRetry(source, target, startTime, retryTimeout, attempt = 0) { + try { + return (0, _nodefs.renameSync)(source, target); + } catch (error) { + if (error.code !== 'EACCES' && error.code !== 'EPERM' && error.code !== 'EBUSY') { + throw error // only for errors we think are temporary + ; + } + if (Date.now() - startTime >= retryTimeout) { + console.error(`Node.js fs rename failed after ${attempt} retries with error: ${error}`); + throw error // give up after configurable timeout + ; + } + if (attempt > 100) { + console.error(`Node.js fs rename failed after ${attempt} retries with error ${error}`); + throw error; + } + if (attempt === 0) { + let abortRetry = false; + try { + const statTarget = (0, _nodefs.statSync)(target); + if (!statTarget.isFile()) { + abortRetry = true // if target is not a file, EPERM error may be raised and we should not attempt to retry + ; + } + } catch (e) { + // Ignore + } + if (abortRetry) { + throw error; + } + } + // Attempt again + return renameSyncWithRetry(source, target, startTime, retryTimeout, attempt + 1); + } +} + +//# sourceMappingURL=rename.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/fs/write-atomic.js b/build/node_modules/next/dist/lib/fs/write-atomic.js new file mode 100644 index 0000000..aa24697 --- /dev/null +++ b/build/node_modules/next/dist/lib/fs/write-atomic.js @@ -0,0 +1,28 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "writeFileAtomic", { + enumerable: true, + get: function() { + return writeFileAtomic; + } +}); +const _fs = require("fs"); +const _rename = require("./rename"); +function writeFileAtomic(filePath, content) { + const tempPath = filePath + '.tmp.' + Math.random().toString(36).slice(2); + try { + (0, _fs.writeFileSync)(tempPath, content, 'utf-8'); + (0, _rename.renameSync)(tempPath, filePath); + } catch (e) { + try { + (0, _fs.unlinkSync)(tempPath); + } catch { + // ignore + } + throw e; + } +} + +//# sourceMappingURL=write-atomic.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/generate-interception-routes-rewrites.js b/build/node_modules/next/dist/lib/generate-interception-routes-rewrites.js new file mode 100644 index 0000000..8e91148 --- /dev/null +++ b/build/node_modules/next/dist/lib/generate-interception-routes-rewrites.js @@ -0,0 +1,52 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "generateInterceptionRoutesRewrites", { + enumerable: true, + get: function() { + return generateInterceptionRoutesRewrites; + } +}); +const _approuterheaders = require("../client/components/app-router-headers"); +const _interceptionroutes = require("../shared/lib/router/utils/interception-routes"); +const _routeregex = require("../shared/lib/router/utils/route-regex"); +function generateInterceptionRoutesRewrites(appPaths, basePath = '') { + const rewrites = []; + for (const appPath of appPaths){ + if ((0, _interceptionroutes.isInterceptionRouteAppPath)(appPath)) { + const { interceptingRoute, interceptedRoute } = (0, _interceptionroutes.extractInterceptionRouteInformation)(appPath); + const destination = (0, _routeregex.getNamedRouteRegex)(basePath + appPath, { + prefixRouteKeys: true + }); + const header = (0, _routeregex.getNamedRouteRegex)(interceptingRoute, { + prefixRouteKeys: true, + reference: destination.reference + }); + const source = (0, _routeregex.getNamedRouteRegex)(basePath + interceptedRoute, { + prefixRouteKeys: true, + reference: header.reference + }); + const headerRegex = header.namedRegex// Strip ^ and $ anchors since matchHas() will add them automatically + .replace(/^\^/, '').replace(/\$$/, '')// Replace matching the `/` with matching any route segment. + .replace(/^\/\(\?:\/\)\?$/, '/.*')// Replace the optional trailing with slash capture group with one that + // will match any descendants. + .replace(/\(\?:\/\)\?$/, '(?:/.*)?'); + rewrites.push({ + source: source.pathToRegexpPattern, + destination: destination.pathToRegexpPattern, + has: [ + { + type: 'header', + key: _approuterheaders.NEXT_URL, + value: headerRegex + } + ], + regex: source.namedRegex + }); + } + } + return rewrites; +} + +//# sourceMappingURL=generate-interception-routes-rewrites.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/get-files-in-dir.js b/build/node_modules/next/dist/lib/get-files-in-dir.js new file mode 100644 index 0000000..797bb24 --- /dev/null +++ b/build/node_modules/next/dist/lib/get-files-in-dir.js @@ -0,0 +1,33 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getFilesInDir", { + enumerable: true, + get: function() { + return getFilesInDir; + } +}); +const _path = require("path"); +const _promises = /*#__PURE__*/ _interop_require_default(require("fs/promises")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +async function getFilesInDir(path) { + const dir = await _promises.default.opendir(path); + const results = new Set(); + for await (const file of dir){ + let resolvedFile = file; + if (file.isSymbolicLink()) { + resolvedFile = await _promises.default.stat((0, _path.join)(path, file.name)); + } + if (resolvedFile.isFile()) { + results.add(file.name); + } + } + return results; +} + +//# sourceMappingURL=get-files-in-dir.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/get-network-host.js b/build/node_modules/next/dist/lib/get-network-host.js new file mode 100644 index 0000000..091e292 --- /dev/null +++ b/build/node_modules/next/dist/lib/get-network-host.js @@ -0,0 +1,44 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getNetworkHost", { + enumerable: true, + get: function() { + return getNetworkHost; + } +}); +const _os = /*#__PURE__*/ _interop_require_default(require("os")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function getNetworkHosts(family) { + const interfaces = _os.default.networkInterfaces(); + const hosts = []; + Object.keys(interfaces).forEach((key)=>{ + var _interfaces_key; + (_interfaces_key = interfaces[key]) == null ? void 0 : _interfaces_key.filter((networkInterface)=>{ + switch(networkInterface.family){ + case 'IPv6': + return family === 'IPv6' && networkInterface.scopeid === 0 && networkInterface.address !== '::1'; + case 'IPv4': + return family === 'IPv4' && networkInterface.address !== '127.0.0.1'; + default: + return false; + } + }).forEach((networkInterface)=>{ + if (networkInterface.address) { + hosts.push(networkInterface.address); + } + }); + }); + return hosts; +} +function getNetworkHost(family) { + const hosts = getNetworkHosts(family); + return hosts[0] ?? null; +} + +//# sourceMappingURL=get-network-host.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/get-package-version.js b/build/node_modules/next/dist/lib/get-package-version.js new file mode 100644 index 0000000..9cd1682 --- /dev/null +++ b/build/node_modules/next/dist/lib/get-package-version.js @@ -0,0 +1,118 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getDependencies: null, + getPackageVersion: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getDependencies: function() { + return getDependencies; + }, + getPackageVersion: function() { + return getPackageVersion; + } +}); +const _fs = require("fs"); +const _findup = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/find-up")); +const _json5 = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/json5")); +const _path = /*#__PURE__*/ _interop_require_wildcard(require("path")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +let cachedDeps; +function getDependencies({ cwd }) { + if (cachedDeps) { + return cachedDeps; + } + return cachedDeps = (async ()=>{ + const configurationPath = await (0, _findup.default)('package.json', { + cwd + }); + if (!configurationPath) { + return { + dependencies: {}, + devDependencies: {} + }; + } + const content = await _fs.promises.readFile(configurationPath, 'utf-8'); + const packageJson = _json5.default.parse(content); + const { dependencies = {}, devDependencies = {} } = packageJson || {}; + return { + dependencies, + devDependencies + }; + })(); +} +async function getPackageVersion({ cwd, name }) { + const { dependencies, devDependencies } = await getDependencies({ + cwd + }); + if (!(dependencies[name] || devDependencies[name])) { + return null; + } + const cwd2 = cwd.endsWith(_path.posix.sep) || cwd.endsWith(_path.win32.sep) ? cwd : `${cwd}/`; + try { + const targetPath = require.resolve(`${name}/package.json`, { + paths: [ + cwd2 + ] + }); + const targetContent = await _fs.promises.readFile(targetPath, 'utf-8'); + return _json5.default.parse(targetContent).version ?? null; + } catch { + return null; + } +} + +//# sourceMappingURL=get-package-version.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/get-project-dir.js b/build/node_modules/next/dist/lib/get-project-dir.js new file mode 100644 index 0000000..a2064c0 --- /dev/null +++ b/build/node_modules/next/dist/lib/get-project-dir.js @@ -0,0 +1,51 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getProjectDir", { + enumerable: true, + get: function() { + return getProjectDir; + } +}); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _log = require("../build/output/log"); +const _detecttypo = require("./detect-typo"); +const _realpath = require("./realpath"); +const _utils = require("../server/lib/utils"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function getProjectDir(dir, exitOnEnoent = true) { + const resolvedDir = _path.default.resolve(dir || '.'); + try { + const realDir = (0, _realpath.realpathSync)(resolvedDir); + if (resolvedDir !== realDir && resolvedDir.toLowerCase() === realDir.toLowerCase()) { + (0, _log.warn)(`Invalid casing detected for project dir, received ${resolvedDir} actual path ${realDir}, see more info here https://nextjs.org/docs/messages/invalid-project-dir-casing`); + } + return realDir; + } catch (err) { + if (err.code === 'ENOENT' && exitOnEnoent) { + if (typeof dir === 'string') { + const detectedTypo = (0, _detecttypo.detectTypo)(dir, [ + 'build', + 'dev', + 'info', + 'lint', + 'start', + 'telemetry', + 'experimental-test' + ]); + if (detectedTypo) { + return (0, _utils.printAndExit)(`"next ${dir}" does not exist. Did you mean "next ${detectedTypo}"?`); + } + } + return (0, _utils.printAndExit)(`Invalid project directory provided, no such directory: ${resolvedDir}`); + } + throw err; + } +} + +//# sourceMappingURL=get-project-dir.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/has-necessary-dependencies.js b/build/node_modules/next/dist/lib/has-necessary-dependencies.js new file mode 100644 index 0000000..6f4a693 --- /dev/null +++ b/build/node_modules/next/dist/lib/has-necessary-dependencies.js @@ -0,0 +1,49 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "hasNecessaryDependencies", { + enumerable: true, + get: function() { + return hasNecessaryDependencies; + } +}); +const _fs = require("fs"); +const _resolvefrom = require("./resolve-from"); +const _path = require("path"); +function hasNecessaryDependencies(baseDir, requiredPackages) { + let resolutions = new Map(); + const missingPackages = []; + for (const p of requiredPackages){ + try { + const pkgPath = (0, _fs.realpathSync)((0, _resolvefrom.resolveFrom)(baseDir, `${p.pkg}/package.json`)); + const pkgDir = (0, _path.dirname)(pkgPath); + resolutions.set((0, _path.join)(p.pkg, 'package.json'), pkgPath); + if (p.exportsRestrict) { + const fileNameToVerify = (0, _path.relative)(p.pkg, p.file); + if (fileNameToVerify) { + const fileToVerify = (0, _path.join)(pkgDir, fileNameToVerify); + if ((0, _fs.existsSync)(fileToVerify)) { + resolutions.set(p.pkg, fileToVerify); + } else { + missingPackages.push(p); + continue; + } + } else { + resolutions.set(p.pkg, pkgPath); + } + } else { + resolutions.set(p.pkg, (0, _resolvefrom.resolveFrom)(baseDir, p.file)); + } + } catch (_) { + missingPackages.push(p); + continue; + } + } + return { + resolved: resolutions, + missing: missingPackages + }; +} + +//# sourceMappingURL=has-necessary-dependencies.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/helpers/get-cache-directory.js b/build/node_modules/next/dist/lib/helpers/get-cache-directory.js new file mode 100644 index 0000000..94499f5 --- /dev/null +++ b/build/node_modules/next/dist/lib/helpers/get-cache-directory.js @@ -0,0 +1,66 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getCacheDirectory", { + enumerable: true, + get: function() { + return getCacheDirectory; + } +}); +const _os = /*#__PURE__*/ _interop_require_default(require("os")); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _fs = /*#__PURE__*/ _interop_require_default(require("fs")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function getCacheDirectory(fileDirectory, envPath) { + let result; + if (envPath) { + result = envPath; + } else { + let systemCacheDirectory; + if (process.platform === 'linux') { + systemCacheDirectory = process.env.XDG_CACHE_HOME || _path.default.join(_os.default.homedir(), '.cache'); + } else if (process.platform === 'darwin') { + systemCacheDirectory = _path.default.join(_os.default.homedir(), 'Library', 'Caches'); + } else if (process.platform === 'win32') { + systemCacheDirectory = process.env.LOCALAPPDATA || _path.default.join(_os.default.homedir(), 'AppData', 'Local'); + } else { + /// Attempt to use generic tmp location for un-handled platform + if (!systemCacheDirectory) { + for (const dir of [ + _path.default.join(_os.default.homedir(), '.cache'), + _path.default.join(_os.default.tmpdir()) + ]){ + if (_fs.default.existsSync(dir)) { + systemCacheDirectory = dir; + break; + } + } + } + if (!systemCacheDirectory) { + console.error(Object.defineProperty(new Error('Unsupported platform: ' + process.platform), "__NEXT_ERROR_CODE", { + value: "E141", + enumerable: false, + configurable: true + })); + process.exit(0); + } + } + result = _path.default.join(systemCacheDirectory, fileDirectory); + } + if (!_path.default.isAbsolute(result)) { + // It is important to resolve to the absolute path: + // - for unzipping to work correctly; + // - so that registry directory matches between installation and execution. + // INIT_CWD points to the root of `npm/yarn install` and is probably what + // the user meant when typing the relative path. + result = _path.default.resolve(process.env['INIT_CWD'] || process.cwd(), result); + } + return result; +} + +//# sourceMappingURL=get-cache-directory.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/helpers/get-npx-command.js b/build/node_modules/next/dist/lib/helpers/get-npx-command.js new file mode 100644 index 0000000..9f63ab4 --- /dev/null +++ b/build/node_modules/next/dist/lib/helpers/get-npx-command.js @@ -0,0 +1,29 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getNpxCommand", { + enumerable: true, + get: function() { + return getNpxCommand; + } +}); +const _child_process = require("child_process"); +const _getpkgmanager = require("./get-pkg-manager"); +function getNpxCommand(baseDir) { + const pkgManager = (0, _getpkgmanager.getPkgManager)(baseDir); + let command = 'npx --yes'; + if (pkgManager === 'pnpm') { + command = 'pnpm --silent dlx'; + } else if (pkgManager === 'yarn') { + try { + (0, _child_process.execSync)('yarn dlx --help', { + stdio: 'ignore' + }); + command = 'yarn --quiet dlx'; + } catch {} + } + return command; +} + +//# sourceMappingURL=get-npx-command.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/helpers/get-online.js b/build/node_modules/next/dist/lib/helpers/get-online.js new file mode 100644 index 0000000..225ceb5 --- /dev/null +++ b/build/node_modules/next/dist/lib/helpers/get-online.js @@ -0,0 +1,50 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getOnline", { + enumerable: true, + get: function() { + return getOnline; + } +}); +const _child_process = require("child_process"); +const _promises = /*#__PURE__*/ _interop_require_default(require("dns/promises")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function getProxy() { + if (process.env.https_proxy) { + return process.env.https_proxy; + } + try { + const httpsProxy = (0, _child_process.execSync)('npm config get https-proxy', { + encoding: 'utf8' + }).trim(); + return httpsProxy !== 'null' ? httpsProxy : undefined; + } catch (e) { + return; + } +} +async function getOnline() { + try { + await _promises.default.lookup('registry.yarnpkg.com'); + return true; + } catch { + const proxy = getProxy(); + if (!proxy) { + return false; + } + try { + const { hostname } = new URL(proxy); + await _promises.default.lookup(hostname); + return true; + } catch { + return false; + } + } +} + +//# sourceMappingURL=get-online.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/helpers/get-pkg-manager.js b/build/node_modules/next/dist/lib/helpers/get-pkg-manager.js new file mode 100644 index 0000000..758ec04 --- /dev/null +++ b/build/node_modules/next/dist/lib/helpers/get-pkg-manager.js @@ -0,0 +1,63 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getPkgManager", { + enumerable: true, + get: function() { + return getPkgManager; + } +}); +const _fs = /*#__PURE__*/ _interop_require_default(require("fs")); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _child_process = require("child_process"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function getPkgManager(baseDir) { + try { + for (const { lockFile, packageManager } of [ + { + lockFile: 'yarn.lock', + packageManager: 'yarn' + }, + { + lockFile: 'pnpm-lock.yaml', + packageManager: 'pnpm' + }, + { + lockFile: 'package-lock.json', + packageManager: 'npm' + } + ]){ + if (_fs.default.existsSync(_path.default.join(baseDir, lockFile))) { + return packageManager; + } + } + const userAgent = process.env.npm_config_user_agent; + if (userAgent) { + if (userAgent.startsWith('yarn')) { + return 'yarn'; + } else if (userAgent.startsWith('pnpm')) { + return 'pnpm'; + } + } + try { + (0, _child_process.execSync)('yarn --version', { + stdio: 'ignore' + }); + return 'yarn'; + } catch { + (0, _child_process.execSync)('pnpm --version', { + stdio: 'ignore' + }); + return 'pnpm'; + } + } catch { + return 'npm'; + } +} + +//# sourceMappingURL=get-pkg-manager.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/helpers/get-registry.js b/build/node_modules/next/dist/lib/helpers/get-registry.js new file mode 100644 index 0000000..f73bf73 --- /dev/null +++ b/build/node_modules/next/dist/lib/helpers/get-registry.js @@ -0,0 +1,45 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getRegistry", { + enumerable: true, + get: function() { + return getRegistry; + } +}); +const _child_process = require("child_process"); +const _getpkgmanager = require("./get-pkg-manager"); +const _utils = require("../../server/lib/utils"); +function getRegistry(baseDir = process.cwd()) { + const pkgManager = (0, _getpkgmanager.getPkgManager)(baseDir); + // Since `npm config` command fails in npm workspace to prevent workspace config conflicts, + // add `--no-workspaces` flag to run under the context of the root project only. + // Safe for non-workspace projects as it's equivalent to default `--workspaces=false`. + // x-ref: https://github.com/vercel/next.js/issues/47121#issuecomment-1499044345 + // x-ref: https://github.com/npm/statusboard/issues/371#issue-920669998 + const resolvedFlags = pkgManager === 'npm' ? '--no-workspaces' : ''; + let registry = `https://registry.npmjs.org/`; + try { + const output = (0, _child_process.execSync)(`${pkgManager} config get registry ${resolvedFlags}`, { + env: { + ...process.env, + NODE_OPTIONS: (0, _utils.getFormattedNodeOptionsWithoutInspect)() + } + }).toString().trim(); + if (output.startsWith('http')) { + registry = output.endsWith('/') ? output : `${output}/`; + } + } catch (err) { + throw Object.defineProperty(new Error(`Failed to get registry from "${pkgManager}".`, { + cause: err + }), "__NEXT_ERROR_CODE", { + value: "E508", + enumerable: false, + configurable: true + }); + } + return registry; +} + +//# sourceMappingURL=get-registry.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/helpers/get-reserved-port.js b/build/node_modules/next/dist/lib/helpers/get-reserved-port.js new file mode 100644 index 0000000..9c27f1a --- /dev/null +++ b/build/node_modules/next/dist/lib/helpers/get-reserved-port.js @@ -0,0 +1,116 @@ +/** https://fetch.spec.whatwg.org/#port-blocking */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + KNOWN_RESERVED_PORTS: null, + getReservedPortExplanation: null, + isPortIsReserved: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + KNOWN_RESERVED_PORTS: function() { + return KNOWN_RESERVED_PORTS; + }, + getReservedPortExplanation: function() { + return getReservedPortExplanation; + }, + isPortIsReserved: function() { + return isPortIsReserved; + } +}); +const KNOWN_RESERVED_PORTS = { + 1: 'tcpmux', + 7: 'echo', + 9: 'discard', + 11: 'systat', + 13: 'daytime', + 15: 'netstat', + 17: 'qotd', + 19: 'chargen', + 20: 'ftp-data', + 21: 'ftp', + 22: 'ssh', + 23: 'telnet', + 25: 'smtp', + 37: 'time', + 42: 'name', + 43: 'nicname', + 53: 'domain', + 69: 'tftp', + 77: 'rje', + 79: 'finger', + 87: 'link', + 95: 'supdup', + 101: 'hostname', + 102: 'iso-tsap', + 103: 'gppitnp', + 104: 'acr-nema', + 109: 'pop2', + 110: 'pop3', + 111: 'sunrpc', + 113: 'auth', + 115: 'sftp', + 117: 'uucp-path', + 119: 'nntp', + 123: 'ntp', + 135: 'epmap', + 137: 'netbios-ns', + 139: 'netbios-ssn', + 143: 'imap', + 161: 'snmp', + 179: 'bgp', + 389: 'ldap', + 427: 'svrloc', + 465: 'submissions', + 512: 'exec', + 513: 'login', + 514: 'shell', + 515: 'printer', + 526: 'tempo', + 530: 'courier', + 531: 'chat', + 532: 'netnews', + 540: 'uucp', + 548: 'afp', + 554: 'rtsp', + 556: 'remotefs', + 563: 'nntps', + 587: 'submission', + 601: 'syslog-conn', + 636: 'ldaps', + 989: 'ftps-data', + 990: 'ftps', + 993: 'imaps', + 995: 'pop3s', + 1719: 'h323gatestat', + 1720: 'h323hostcall', + 1723: 'pptp', + 2049: 'nfs', + 3659: 'apple-sasl', + 4045: 'npp', + 5060: 'sip', + 5061: 'sips', + 6000: 'x11', + 6566: 'sane-port', + 6665: 'ircu', + 6666: 'ircu', + 6667: 'ircu', + 6668: 'ircu', + 6669: 'ircu', + 6697: 'ircs-u', + 10080: 'amanda' +}; +function isPortIsReserved(port) { + return port in KNOWN_RESERVED_PORTS; +} +function getReservedPortExplanation(port) { + return `Bad port: "${port}" is reserved for ${KNOWN_RESERVED_PORTS[port]}\n` + 'Read more: https://nextjs.org/docs/messages/reserved-port'; +} + +//# sourceMappingURL=get-reserved-port.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/helpers/install.js b/build/node_modules/next/dist/lib/helpers/install.js new file mode 100644 index 0000000..c96f48f --- /dev/null +++ b/build/node_modules/next/dist/lib/helpers/install.js @@ -0,0 +1,83 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "install", { + enumerable: true, + get: function() { + return install; + } +}); +const _picocolors = require("../picocolors"); +const _crossspawn = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/cross-spawn")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function install(root, dependencies, { packageManager, isOnline, devDependencies }) { + let args = []; + if (dependencies.length > 0) { + if (packageManager === 'yarn') { + args = [ + 'add', + '--exact' + ]; + if (devDependencies) args.push('--dev'); + } else if (packageManager === 'pnpm') { + args = [ + 'add', + '--save-exact' + ]; + args.push(devDependencies ? '--save-dev' : '--save-prod'); + } else { + // npm + args = [ + 'install', + '--save-exact' + ]; + args.push(devDependencies ? '--save-dev' : '--save'); + } + args.push(...dependencies); + } else { + args = [ + 'install' + ] // npm, pnpm, and yarn all support `install` + ; + if (!isOnline) { + args.push('--offline'); + console.log((0, _picocolors.yellow)('You appear to be offline.')); + if (packageManager !== 'npm') { + console.log((0, _picocolors.yellow)(`Falling back to the local ${packageManager} cache.`)); + } + console.log(); + } + } + return new Promise((resolve, reject)=>{ + /** + * Spawn the installation process. + */ const child = (0, _crossspawn.default)(packageManager, args, { + cwd: root, + stdio: 'inherit', + env: { + ...process.env, + ADBLOCK: '1', + // we set NODE_ENV to development as pnpm skips dev + // dependencies when production + NODE_ENV: 'development', + DISABLE_OPENCOLLECTIVE: '1' + } + }); + child.on('close', (code)=>{ + if (code !== 0) { + reject({ + command: `${packageManager} ${args.join(' ')}` + }); + return; + } + resolve(); + }); + }); +} + +//# sourceMappingURL=install.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/import-next-warning.js b/build/node_modules/next/dist/lib/import-next-warning.js new file mode 100644 index 0000000..ce8d96e --- /dev/null +++ b/build/node_modules/next/dist/lib/import-next-warning.js @@ -0,0 +1,50 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("../build/output/log")); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +var _module_parent; +_log.warn(`"next" should not be imported directly, imported in ${(_module_parent = module.parent) == null ? void 0 : _module_parent.filename}\nSee more info here: https://nextjs.org/docs/messages/import-next`); + +//# sourceMappingURL=import-next-warning.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/inline-static-env.js b/build/node_modules/next/dist/lib/inline-static-env.js new file mode 100644 index 0000000..a448d54 --- /dev/null +++ b/build/node_modules/next/dist/lib/inline-static-env.js @@ -0,0 +1,112 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "inlineStaticEnv", { + enumerable: true, + get: function() { + return inlineStaticEnv; + } +}); +const _fs = /*#__PURE__*/ _interop_require_default(require("fs")); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _crypto = /*#__PURE__*/ _interop_require_default(require("crypto")); +const _util = require("util"); +const _glob = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/glob")); +const _asyncsema = require("next/dist/compiled/async-sema"); +const _staticenv = require("./static-env"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const glob = (0, _util.promisify)(_glob.default); +async function inlineStaticEnv({ distDir, config }) { + const nextConfigEnv = (0, _staticenv.getNextConfigEnv)(config); + const staticEnv = (0, _staticenv.getStaticEnv)(config, config.deploymentId); + const serverDir = _path.default.join(distDir, 'server'); + const serverChunks = await glob('**/*.{js,json,js.map}', { + cwd: serverDir + }); + const clientDir = _path.default.join(distDir, 'static'); + const clientChunks = await glob('**/*.{js,json,js.map}', { + cwd: clientDir + }); + const manifestChunks = await glob('*.{js,json,js.map}', { + cwd: distDir + }); + const inlineSema = new _asyncsema.Sema(8); + const nextConfigEnvKeys = Object.keys(nextConfigEnv).map((item)=>item.split('process.env.').pop()); + const builtRegEx = new RegExp(`[\\w]{1,}(\\.env)?\\.(?:NEXT_PUBLIC_[\\w]{1,}${nextConfigEnvKeys.length ? '|' + nextConfigEnvKeys.join('|') : ''})`, 'g'); + const changedClientFiles = []; + const filesToCheck = new Set(manifestChunks.map((f)=>_path.default.join(distDir, f))); + for (const [parentDir, files] of [ + [ + serverDir, + serverChunks + ], + [ + clientDir, + clientChunks + ] + ]){ + await Promise.all(files.map(async (file)=>{ + await inlineSema.acquire(); + const filepath = _path.default.join(parentDir, file); + const content = await _fs.default.promises.readFile(filepath, 'utf8'); + const newContent = content.replace(builtRegEx, (match)=>{ + let normalizedMatch = `process.env.${match.split('.').pop()}`; + if (staticEnv[normalizedMatch]) { + return JSON.stringify(staticEnv[normalizedMatch]); + } + return match; + }); + await _fs.default.promises.writeFile(filepath, newContent); + if (content !== newContent && parentDir === clientDir) { + changedClientFiles.push({ + file, + content: newContent + }); + } + filesToCheck.add(filepath); + inlineSema.release(); + })); + } + const hashChanges = []; + // hashes need updating for any changed client files + for (const { file, content } of changedClientFiles){ + var _file_match; + // hash is 16 chars currently for all client chunks + const originalHash = ((_file_match = file.match(/([a-z0-9]{16})\./)) == null ? void 0 : _file_match[1]) || ''; + if (!originalHash) { + throw Object.defineProperty(new Error(`Invariant: client chunk changed but failed to detect hash ${file}`), "__NEXT_ERROR_CODE", { + value: "E663", + enumerable: false, + configurable: true + }); + } + const newHash = _crypto.default.createHash('sha256').update(content).digest('hex').substring(0, 16); + hashChanges.push({ + originalHash, + newHash + }); + const filepath = _path.default.join(clientDir, file); + const newFilepath = filepath.replace(originalHash, newHash); + filesToCheck.delete(filepath); + filesToCheck.add(newFilepath); + await _fs.default.promises.rename(filepath, newFilepath); + } + // update build-manifest and webpack-runtime with new hashes + for (let file of filesToCheck){ + const content = await _fs.default.promises.readFile(file, 'utf-8'); + let newContent = content; + for (const { originalHash, newHash } of hashChanges){ + newContent = newContent.replaceAll(originalHash, newHash); + } + if (content !== newContent) { + await _fs.default.promises.writeFile(file, newContent); + } + } +} + +//# sourceMappingURL=inline-static-env.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/install-dependencies.js b/build/node_modules/next/dist/lib/install-dependencies.js new file mode 100644 index 0000000..b93d5ea --- /dev/null +++ b/build/node_modules/next/dist/lib/install-dependencies.js @@ -0,0 +1,40 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "installDependencies", { + enumerable: true, + get: function() { + return installDependencies; + } +}); +const _picocolors = require("./picocolors"); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _getpkgmanager = require("./helpers/get-pkg-manager"); +const _install = require("./helpers/install"); +const _getonline = require("./helpers/get-online"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +async function installDependencies(baseDir, deps, dev = false) { + const packageManager = (0, _getpkgmanager.getPkgManager)(baseDir); + const isOnline = await (0, _getonline.getOnline)(); + if (deps.length) { + console.log(); + console.log(`Installing ${dev ? 'devDependencies' : 'dependencies'} (${packageManager}):`); + for (const dep of deps){ + console.log(`- ${(0, _picocolors.cyan)(dep.pkg)}`); + } + console.log(); + await (0, _install.install)(_path.default.resolve(baseDir), deps.map((dep)=>dep.pkg), { + devDependencies: dev, + isOnline, + packageManager + }); + console.log(); + } +} + +//# sourceMappingURL=install-dependencies.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/interop-default.js b/build/node_modules/next/dist/lib/interop-default.js new file mode 100644 index 0000000..4e3c7ac --- /dev/null +++ b/build/node_modules/next/dist/lib/interop-default.js @@ -0,0 +1,16 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "interopDefault", { + enumerable: true, + get: function() { + return interopDefault; + } +}); +function interopDefault(mod) { + // @ts-ignore + return mod.default || mod; +} + +//# sourceMappingURL=interop-default.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/is-api-route.js b/build/node_modules/next/dist/lib/is-api-route.js new file mode 100644 index 0000000..50adf8a --- /dev/null +++ b/build/node_modules/next/dist/lib/is-api-route.js @@ -0,0 +1,15 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "isAPIRoute", { + enumerable: true, + get: function() { + return isAPIRoute; + } +}); +function isAPIRoute(value) { + return value === '/api' || Boolean(value == null ? void 0 : value.startsWith('/api/')); +} + +//# sourceMappingURL=is-api-route.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/is-app-page-route.js b/build/node_modules/next/dist/lib/is-app-page-route.js new file mode 100644 index 0000000..e866d34 --- /dev/null +++ b/build/node_modules/next/dist/lib/is-app-page-route.js @@ -0,0 +1,15 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "isAppPageRoute", { + enumerable: true, + get: function() { + return isAppPageRoute; + } +}); +function isAppPageRoute(route) { + return route.endsWith('/page'); +} + +//# sourceMappingURL=is-app-page-route.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/is-app-route-route.js b/build/node_modules/next/dist/lib/is-app-route-route.js new file mode 100644 index 0000000..7c901ad --- /dev/null +++ b/build/node_modules/next/dist/lib/is-app-route-route.js @@ -0,0 +1,15 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "isAppRouteRoute", { + enumerable: true, + get: function() { + return isAppRouteRoute; + } +}); +function isAppRouteRoute(route) { + return route.endsWith('/route'); +} + +//# sourceMappingURL=is-app-route-route.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/is-edge-runtime.js b/build/node_modules/next/dist/lib/is-edge-runtime.js new file mode 100644 index 0000000..ea85e13 --- /dev/null +++ b/build/node_modules/next/dist/lib/is-edge-runtime.js @@ -0,0 +1,16 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "isEdgeRuntime", { + enumerable: true, + get: function() { + return isEdgeRuntime; + } +}); +const _constants = require("./constants"); +function isEdgeRuntime(value) { + return value === _constants.SERVER_RUNTIME.experimentalEdge || value === _constants.SERVER_RUNTIME.edge; +} + +//# sourceMappingURL=is-edge-runtime.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/is-error.js b/build/node_modules/next/dist/lib/is-error.js new file mode 100644 index 0000000..3107f65 --- /dev/null +++ b/build/node_modules/next/dist/lib/is-error.js @@ -0,0 +1,78 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + default: null, + getProperError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + /** + * Checks whether the given value is a NextError. + * This can be used to print a more detailed error message with properties like `code` & `digest`. + */ default: function() { + return isError; + }, + getProperError: function() { + return getProperError; + } +}); +const _isplainobject = require("../shared/lib/is-plain-object"); +/** + * This is a safe stringify function that handles circular references. + * We're using a simpler version here to avoid introducing + * the dependency `safe-stable-stringify` into production bundle. + * + * This helper is used both in development and production. + */ function safeStringifyLite(obj) { + const seen = new WeakSet(); + return JSON.stringify(obj, (_key, value)=>{ + // If value is an object and already seen, replace with "[Circular]" + if (typeof value === 'object' && value !== null) { + if (seen.has(value)) { + return '[Circular]'; + } + seen.add(value); + } + return value; + }); +} +function isError(err) { + return typeof err === 'object' && err !== null && 'name' in err && 'message' in err; +} +function getProperError(err) { + if (isError(err)) { + return err; + } + if (process.env.NODE_ENV === 'development') { + // provide better error for case where `throw undefined` + // is called in development + if (typeof err === 'undefined') { + return Object.defineProperty(new Error('An undefined error was thrown, ' + 'see here for more info: https://nextjs.org/docs/messages/threw-undefined'), "__NEXT_ERROR_CODE", { + value: "E98", + enumerable: false, + configurable: true + }); + } + if (err === null) { + return Object.defineProperty(new Error('A null error was thrown, ' + 'see here for more info: https://nextjs.org/docs/messages/threw-undefined'), "__NEXT_ERROR_CODE", { + value: "E336", + enumerable: false, + configurable: true + }); + } + } + return Object.defineProperty(new Error((0, _isplainobject.isPlainObject)(err) ? safeStringifyLite(err) : err + ''), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); +} + +//# sourceMappingURL=is-error.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/is-interception-route-rewrite.js b/build/node_modules/next/dist/lib/is-interception-route-rewrite.js new file mode 100644 index 0000000..e2217c1 --- /dev/null +++ b/build/node_modules/next/dist/lib/is-interception-route-rewrite.js @@ -0,0 +1,18 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "isInterceptionRouteRewrite", { + enumerable: true, + get: function() { + return isInterceptionRouteRewrite; + } +}); +const _approuterheaders = require("../client/components/app-router-headers"); +function isInterceptionRouteRewrite(route) { + var _route_has_, _route_has; + // When we generate interception rewrites in the above implementation, we always do so with only a single `has` condition. + return ((_route_has = route.has) == null ? void 0 : (_route_has_ = _route_has[0]) == null ? void 0 : _route_has_.key) === _approuterheaders.NEXT_URL; +} + +//# sourceMappingURL=is-interception-route-rewrite.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/is-internal-component.js b/build/node_modules/next/dist/lib/is-internal-component.js new file mode 100644 index 0000000..b0413f3 --- /dev/null +++ b/build/node_modules/next/dist/lib/is-internal-component.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + isInternalComponent: null, + isNonRoutePagesPage: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + isInternalComponent: function() { + return isInternalComponent; + }, + isNonRoutePagesPage: function() { + return isNonRoutePagesPage; + } +}); +function isInternalComponent(pathname) { + switch(pathname){ + case 'next/dist/pages/_app': + case 'next/dist/pages/_document': + return true; + default: + return false; + } +} +function isNonRoutePagesPage(pathname) { + return pathname === '/_app' || pathname === '/_document'; +} + +//# sourceMappingURL=is-internal-component.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/is-serializable-props.js b/build/node_modules/next/dist/lib/is-serializable-props.js new file mode 100644 index 0000000..f2cff69 --- /dev/null +++ b/build/node_modules/next/dist/lib/is-serializable-props.js @@ -0,0 +1,106 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + SerializableError: null, + isSerializableProps: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + SerializableError: function() { + return SerializableError; + }, + isSerializableProps: function() { + return isSerializableProps; + } +}); +const _isplainobject = require("../shared/lib/is-plain-object"); +const regexpPlainIdentifier = /^[A-Za-z_$][A-Za-z0-9_$]*$/; +class SerializableError extends Error { + constructor(page, method, path, message){ + super(path ? `Error serializing \`${path}\` returned from \`${method}\` in "${page}".\nReason: ${message}` : `Error serializing props returned from \`${method}\` in "${page}".\nReason: ${message}`); + } +} +function isSerializableProps(page, method, input) { + if (!(0, _isplainobject.isPlainObject)(input)) { + throw Object.defineProperty(new SerializableError(page, method, '', `Props must be returned as a plain object from ${method}: \`{ props: { ... } }\` (received: \`${(0, _isplainobject.getObjectClassLabel)(input)}\`).`), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + function visit(visited, value, path) { + if (visited.has(value)) { + throw Object.defineProperty(new SerializableError(page, method, path, `Circular references cannot be expressed in JSON (references: \`${visited.get(value) || '(self)'}\`).`), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + visited.set(value, path); + } + function isSerializable(refs, value, path) { + const type = typeof value; + if (// `null` can be serialized, but not `undefined`. + value === null || // n.b. `bigint`, `function`, `symbol`, and `undefined` cannot be + // serialized. + // + // `object` is special-cased below, as it may represent `null`, an Array, + // a plain object, a class, et al. + type === 'boolean' || type === 'number' || type === 'string') { + return true; + } + if (type === 'undefined') { + throw Object.defineProperty(new SerializableError(page, method, path, '`undefined` cannot be serialized as JSON. Please use `null` or omit this value.'), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + if ((0, _isplainobject.isPlainObject)(value)) { + visit(refs, value, path); + if (Object.entries(value).every(([key, nestedValue])=>{ + const nextPath = regexpPlainIdentifier.test(key) ? `${path}.${key}` : `${path}[${JSON.stringify(key)}]`; + const newRefs = new Map(refs); + return isSerializable(newRefs, key, nextPath) && isSerializable(newRefs, nestedValue, nextPath); + })) { + return true; + } + throw Object.defineProperty(new SerializableError(page, method, path, `invariant: Unknown error encountered in Object.`), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + if (Array.isArray(value)) { + visit(refs, value, path); + if (value.every((nestedValue, index)=>{ + const newRefs = new Map(refs); + return isSerializable(newRefs, nestedValue, `${path}[${index}]`); + })) { + return true; + } + throw Object.defineProperty(new SerializableError(page, method, path, `invariant: Unknown error encountered in Array.`), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + // None of these can be expressed as JSON: + // const type: "bigint" | "symbol" | "object" | "function" + throw Object.defineProperty(new SerializableError(page, method, path, '`' + type + '`' + (type === 'object' ? ` ("${Object.prototype.toString.call(value)}")` : '') + ' cannot be serialized as JSON. Please only return JSON serializable data types.'), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + return isSerializable(new Map(), input, ''); +} + +//# sourceMappingURL=is-serializable-props.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/known-edge-safe-packages.json b/build/node_modules/next/dist/lib/known-edge-safe-packages.json new file mode 100644 index 0000000..be767c4 --- /dev/null +++ b/build/node_modules/next/dist/lib/known-edge-safe-packages.json @@ -0,0 +1 @@ +["function-bind"] diff --git a/build/node_modules/next/dist/lib/load-custom-routes.js b/build/node_modules/next/dist/lib/load-custom-routes.js new file mode 100644 index 0000000..6f29316 --- /dev/null +++ b/build/node_modules/next/dist/lib/load-custom-routes.js @@ -0,0 +1,594 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + checkCustomRoutes: null, + default: null, + normalizeRouteRegex: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + checkCustomRoutes: function() { + return checkCustomRoutes; + }, + default: function() { + return loadCustomRoutes; + }, + normalizeRouteRegex: function() { + return normalizeRouteRegex; + } +}); +const _picocolors = require("./picocolors"); +const _escaperegexp = require("../shared/lib/escape-regexp"); +const _trytoparsepath = require("./try-to-parse-path"); +const _redirectstatus = require("./redirect-status"); +const _url = require("./url"); +const _constants = require("./constants"); +const allowedHasTypes = new Set([ + 'header', + 'cookie', + 'query', + 'host' +]); +const namedGroupsRegex = /\(\?<([a-zA-Z][a-zA-Z0-9]*)>/g; +function normalizeRouteRegex(regex) { + // clean up un-necessary escaping from regex.source which turns / into \\/ + return regex.replace(/\\\//g, '/'); +} +function checkRedirect(route) { + const invalidParts = []; + let hadInvalidStatus = false; + if (route.statusCode && !_redirectstatus.allowedStatusCodes.has(route['statusCode'])) { + hadInvalidStatus = true; + invalidParts.push(`\`statusCode\` is not undefined or valid statusCode`); + } + if (typeof route.permanent !== 'boolean' && !route['statusCode']) { + invalidParts.push(`\`permanent\` is not set to \`true\` or \`false\``); + } + return { + invalidParts, + hadInvalidStatus + }; +} +function checkHeader(route) { + const invalidParts = []; + if (!Array.isArray(route.headers)) { + invalidParts.push('`headers` field must be an array'); + } else if (route.headers.length === 0) { + invalidParts.push('`headers` field cannot be empty'); + } else { + for (const header of route.headers){ + if (!header || typeof header !== 'object') { + invalidParts.push("`headers` items must be object with { key: '', value: '' }"); + break; + } + if (typeof header.key !== 'string') { + invalidParts.push('`key` in header item must be string'); + break; + } + if (typeof header.value !== 'string') { + invalidParts.push('`value` in header item must be string'); + break; + } + } + } + return invalidParts; +} +function checkCustomRoutes(routes, type) { + if (!Array.isArray(routes)) { + console.error(`Error: ${type}s must return an array, received ${typeof routes}.\n` + `See here for more info: https://nextjs.org/docs/messages/routes-must-be-array`); + process.exit(1); + } + let numInvalidRoutes = 0; + let hadInvalidStatus = false; + let hadInvalidHas = false; + let hadInvalidMissing = false; + const allowedKeys = new Set([ + 'source', + 'locale', + 'has', + 'missing' + ]); + if (type === 'rewrite') { + allowedKeys.add('basePath'); + allowedKeys.add('destination'); + } + if (type === 'redirect') { + allowedKeys.add('basePath'); + allowedKeys.add('statusCode'); + allowedKeys.add('permanent'); + allowedKeys.add('destination'); + } + if (type === 'header') { + allowedKeys.add('basePath'); + allowedKeys.add('headers'); + } + for (const route of routes){ + if (!route || typeof route !== 'object') { + console.error(`The route ${JSON.stringify(route)} is not a valid object with \`source\`${type !== 'middleware' ? ` and \`${type === 'header' ? 'headers' : 'destination'}\`` : ''}`); + numInvalidRoutes++; + continue; + } + if (type === 'rewrite' && route.basePath === false && !(route.destination.startsWith('http://') || route.destination.startsWith('https://'))) { + console.error(`The route ${route.source} rewrites urls outside of the basePath. Please use a destination that starts with \`http://\` or \`https://\` https://nextjs.org/docs/messages/invalid-external-rewrite`); + numInvalidRoutes++; + continue; + } + const keys = Object.keys(route); + const invalidKeys = keys.filter((key)=>!allowedKeys.has(key)); + const invalidParts = []; + if ('basePath' in route && typeof route.basePath !== 'undefined' && route.basePath !== false) { + invalidParts.push('`basePath` must be undefined or false'); + } + if (typeof route.locale !== 'undefined' && route.locale !== false) { + invalidParts.push('`locale` must be undefined or false'); + } + const checkInvalidHasMissing = (items, fieldName)=>{ + let hadInvalidItem = false; + if (typeof items !== 'undefined' && !Array.isArray(items)) { + invalidParts.push(`\`${fieldName}\` must be undefined or valid has object`); + hadInvalidItem = true; + } else if (items) { + const invalidHasItems = []; + for (const hasItem of items){ + let invalidHasParts = []; + if (!allowedHasTypes.has(hasItem.type)) { + invalidHasParts.push(`invalid type "${hasItem.type}"`); + } + if (typeof hasItem.key !== 'string' && hasItem.type !== 'host') { + invalidHasParts.push(`invalid key "${hasItem.key}"`); + } + if (typeof hasItem.value !== 'undefined' && typeof hasItem.value !== 'string') { + invalidHasParts.push(`invalid value "${hasItem.value}"`); + } + if (typeof hasItem.value === 'undefined' && hasItem.type === 'host') { + invalidHasParts.push(`value is required for "host" type`); + } + if (invalidHasParts.length > 0) { + invalidHasItems.push(`${invalidHasParts.join(', ')} for ${JSON.stringify(hasItem)}`); + } + } + if (invalidHasItems.length > 0) { + hadInvalidItem = true; + const itemStr = `item${invalidHasItems.length === 1 ? '' : 's'}`; + console.error(`Invalid \`${fieldName}\` ${itemStr}:\n` + invalidHasItems.join('\n')); + console.error(); + invalidParts.push(`invalid \`${fieldName}\` ${itemStr} found`); + } + } + return hadInvalidItem; + }; + if (checkInvalidHasMissing(route.has, 'has')) { + hadInvalidHas = true; + } + if (checkInvalidHasMissing(route.missing, 'missing')) { + hadInvalidMissing = true; + } + if (!route.source) { + invalidParts.push('`source` is missing'); + } else if (typeof route.source !== 'string') { + invalidParts.push('`source` is not a string'); + } else if (!route.source.startsWith('/')) { + invalidParts.push('`source` does not start with /'); + } + if (type === 'header') { + invalidParts.push(...checkHeader(route)); + } else if (type !== 'middleware') { + let _route = route; + if (!_route.destination) { + invalidParts.push('`destination` is missing'); + } else if (typeof _route.destination !== 'string') { + invalidParts.push('`destination` is not a string'); + } else if (type === 'rewrite' && !_route.destination.match(/^(\/|https:\/\/|http:\/\/)/)) { + invalidParts.push('`destination` does not start with `/`, `http://`, or `https://`'); + } + } + if (type === 'redirect') { + const result = checkRedirect(route); + hadInvalidStatus = hadInvalidStatus || result.hadInvalidStatus; + invalidParts.push(...result.invalidParts); + } + let sourceTokens; + if (typeof route.source === 'string' && route.source.startsWith('/')) { + // only show parse error if we didn't already show error + // for not being a string + const { tokens, error, regexStr } = (0, _trytoparsepath.tryToParsePath)(route.source); + if (error) { + invalidParts.push('`source` parse failed'); + } + if (regexStr && regexStr.length > 4096) { + invalidParts.push('`source` exceeds max built length of 4096'); + } + sourceTokens = tokens; + } + const hasSegments = new Set(); + if (route.has) { + for (const hasItem of route.has){ + if (!hasItem.value && hasItem.key) { + hasSegments.add(hasItem.key); + } + if (hasItem.value) { + for (const match of hasItem.value.matchAll(namedGroupsRegex)){ + if (match[1]) { + hasSegments.add(match[1]); + } + } + if (hasItem.type === 'host') { + hasSegments.add('host'); + } + } + } + } + // make sure no unnamed patterns are attempted to be used in the + // destination as this can cause confusion and is not allowed + if (typeof route.destination === 'string') { + if (route.destination.startsWith('/') && Array.isArray(sourceTokens)) { + const unnamedInDest = new Set(); + for (const token of sourceTokens){ + if (typeof token === 'object' && typeof token.name === 'number') { + const unnamedIndex = new RegExp(`:${token.name}(?!\\d)`); + if (route.destination.match(unnamedIndex)) { + unnamedInDest.add(`:${token.name}`); + } + } + } + if (unnamedInDest.size > 0) { + invalidParts.push(`\`destination\` has unnamed params ${[ + ...unnamedInDest + ].join(', ')}`); + } else { + const { tokens: destTokens, regexStr: destRegexStr, error: destinationParseFailed } = (0, _trytoparsepath.tryToParsePath)(route.destination, { + handleUrl: true + }); + if (destRegexStr && destRegexStr.length > 4096) { + invalidParts.push('`destination` exceeds max built length of 4096'); + } + if (destinationParseFailed) { + invalidParts.push('`destination` parse failed'); + } else { + const sourceSegments = new Set(sourceTokens.map((item)=>typeof item === 'object' && item.name).filter(Boolean)); + const invalidDestSegments = new Set(); + for (const token of destTokens){ + if (typeof token === 'object' && !sourceSegments.has(token.name) && !hasSegments.has(token.name)) { + invalidDestSegments.add(token.name); + } + } + if (invalidDestSegments.size) { + invalidParts.push(`\`destination\` has segments not in \`source\` or \`has\` (${[ + ...invalidDestSegments + ].join(', ')})`); + } + } + } + } + } + const hasInvalidKeys = invalidKeys.length > 0; + const hasInvalidParts = invalidParts.length > 0; + if (hasInvalidKeys || hasInvalidParts) { + console.error(`${invalidParts.join(', ')}${invalidKeys.length ? (hasInvalidParts ? ',' : '') + ` invalid field${invalidKeys.length === 1 ? '' : 's'}: ` + invalidKeys.join(',') : ''} for route ${JSON.stringify(route)}`); + console.error(); + numInvalidRoutes++; + } + } + if (numInvalidRoutes > 0) { + if (hadInvalidStatus) { + console.error(`\nValid redirect statusCode values are ${[ + ..._redirectstatus.allowedStatusCodes + ].join(', ')}`); + } + if (hadInvalidHas) { + console.error(`\nValid \`has\` object shape is ${JSON.stringify({ + type: [ + ...allowedHasTypes + ].join(', '), + key: 'the key to check for', + value: 'undefined or a value string to match against' + }, null, 2)}`); + } + if (hadInvalidMissing) { + console.error(`\nValid \`missing\` object shape is ${JSON.stringify({ + type: [ + ...allowedHasTypes + ].join(', '), + key: 'the key to check for', + value: 'undefined or a value string to match against' + }, null, 2)}`); + } + console.error(); + console.error(`Error: Invalid ${type}${numInvalidRoutes === 1 ? '' : 's'} found`); + process.exit(1); + } +} +function processRoutes(routes, config, type) { + const _routes = routes; + const newRoutes = []; + const defaultLocales = []; + if (config.i18n && type === 'redirect') { + var _config_i18n; + for (const item of ((_config_i18n = config.i18n) == null ? void 0 : _config_i18n.domains) || []){ + defaultLocales.push({ + locale: item.defaultLocale, + base: `http${item.http ? '' : 's'}://${item.domain}` + }); + } + defaultLocales.push({ + locale: config.i18n.defaultLocale, + base: '' + }); + } + for (const r of _routes){ + var _r_destination; + const srcBasePath = config.basePath && r.basePath !== false ? config.basePath : ''; + const isExternal = !((_r_destination = r.destination) == null ? void 0 : _r_destination.startsWith('/')); + const destBasePath = srcBasePath && !isExternal ? srcBasePath : ''; + if (config.i18n && r.locale !== false) { + var _r_destination1; + if (!isExternal) { + defaultLocales.forEach((item)=>{ + let destination; + if (r.destination) { + destination = item.base ? `${item.base}${destBasePath}${r.destination}` : `${destBasePath}${r.destination}`; + } + newRoutes.push({ + ...r, + destination, + source: `${srcBasePath}/${item.locale}${r.source === '/' && !config.trailingSlash ? '' : r.source}` + }); + }); + } + r.source = `/:nextInternalLocale(${config.i18n.locales.map((locale)=>(0, _escaperegexp.escapeStringRegexp)(locale)).join('|')})${r.source === '/' && !config.trailingSlash ? '' : r.source}`; + if (r.destination && ((_r_destination1 = r.destination) == null ? void 0 : _r_destination1.startsWith('/'))) { + r.destination = `/:nextInternalLocale${r.destination === '/' && !config.trailingSlash ? '' : r.destination}`; + } + } + r.source = `${srcBasePath}${r.source === '/' && srcBasePath ? '' : r.source}`; + if (r.destination) { + r.destination = `${destBasePath}${r.destination === '/' && destBasePath ? '' : r.destination}`; + } + newRoutes.push(r); + } + return newRoutes; +} +async function loadRedirects(config) { + if (typeof config.redirects !== 'function') { + return []; + } + let redirects = await config.redirects(); + // check before we process the routes and after to ensure + // they are still valid + checkCustomRoutes(redirects, 'redirect'); + // save original redirects before transforms + if (Array.isArray(redirects)) { + config._originalRedirects = redirects.map((r)=>({ + ...r + })); + } + redirects = processRoutes(redirects, config, 'redirect'); + checkCustomRoutes(redirects, 'redirect'); + return redirects; +} +async function loadRewrites(config) { + // If assetPrefix is set, add a rewrite for `/${assetPrefix}/_next/*` + // requests so that they are handled in any of dev, start, or deploy + // automatically without the user having to configure this. + // If the assetPrefix is an absolute URL, we still consider the path for automatic rewrite. + // but hostname routing must be handled by the user + let maybeAssetPrefixRewrite = []; + if (config.assetPrefix) { + let prefix = config.assetPrefix; + if ((0, _url.isFullStringUrl)(config.assetPrefix) && URL.canParse(config.assetPrefix)) { + prefix = new URL(config.assetPrefix).pathname; + } + if (prefix && prefix !== '/') { + const assetPrefix = prefix.startsWith('/') ? prefix : `/${prefix}`; + const basePath = config.basePath || ''; + // If these are the same, then this would result in an infinite rewrite. + if (assetPrefix !== basePath) { + maybeAssetPrefixRewrite.push({ + source: `${assetPrefix}/_next/:path+`, + destination: `${basePath}/_next/:path+` + }); + } + } + } + if (typeof config.rewrites !== 'function') { + return { + beforeFiles: [ + ...maybeAssetPrefixRewrite + ], + afterFiles: [], + fallback: [] + }; + } + const _rewrites = await config.rewrites(); + let beforeFiles = []; + let afterFiles = []; + let fallback = []; + if (!Array.isArray(_rewrites) && typeof _rewrites === 'object' && Object.keys(_rewrites).every((key)=>key === 'beforeFiles' || key === 'afterFiles' || key === 'fallback')) { + beforeFiles = _rewrites.beforeFiles || []; + afterFiles = _rewrites.afterFiles || []; + fallback = _rewrites.fallback || []; + } else { + afterFiles = _rewrites; + } + // check before we process the routes and after to ensure + // they are still valid + checkCustomRoutes(beforeFiles, 'rewrite'); + checkCustomRoutes(afterFiles, 'rewrite'); + checkCustomRoutes(fallback, 'rewrite'); + // save original rewrites before transforms + config._originalRewrites = { + beforeFiles: beforeFiles.map((r)=>({ + ...r + })), + afterFiles: afterFiles.map((r)=>({ + ...r + })), + fallback: fallback.map((r)=>({ + ...r + })) + }; + beforeFiles = [ + ...maybeAssetPrefixRewrite, + ...processRoutes(beforeFiles, config, 'rewrite') + ]; + afterFiles = processRoutes(afterFiles, config, 'rewrite'); + fallback = processRoutes(fallback, config, 'rewrite'); + checkCustomRoutes(beforeFiles, 'rewrite'); + checkCustomRoutes(afterFiles, 'rewrite'); + checkCustomRoutes(fallback, 'rewrite'); + return { + beforeFiles, + afterFiles, + fallback + }; +} +async function loadHeaders(config) { + if (typeof config.headers !== 'function') { + return []; + } + let headers = await config.headers(); + // check before we process the routes and after to ensure + // they are still valid + checkCustomRoutes(headers, 'header'); + headers = processRoutes(headers, config, 'header'); + checkCustomRoutes(headers, 'header'); + return headers; +} +async function loadCustomRoutes(config) { + const [headers, rewrites, redirects] = await Promise.all([ + loadHeaders(config), + loadRewrites(config), + loadRedirects(config) + ]); + const onMatchHeaders = []; + const totalRewrites = rewrites.beforeFiles.length + rewrites.afterFiles.length + rewrites.fallback.length; + const totalRoutes = headers.length + redirects.length + totalRewrites; + if (totalRoutes > 1000) { + console.warn((0, _picocolors.bold)((0, _picocolors.yellow)(`Warning: `)) + `total number of custom routes exceeds 1000, this can reduce performance. Route counts:\n` + `headers: ${headers.length}\n` + `rewrites: ${totalRewrites}\n` + `redirects: ${redirects.length}\n` + `See more info: https://nextjs.org/docs/messages/max-custom-routes-reached`); + } + const cacheControlSources = []; + for (const headerRoute of headers){ + if (!headerRoute.source.startsWith('/_next/')) { + continue; + } + for (const header of headerRoute.headers){ + if (header.key.toLowerCase() === 'cache-control') { + cacheControlSources.push(headerRoute.source); + break; + } + } + } + if (cacheControlSources.length > 0) { + console.warn((0, _picocolors.bold)((0, _picocolors.yellow)(`Warning: `)) + `Custom Cache-Control headers detected for the following routes:\n` + cacheControlSources.map((source)=>` - ${source}`).join('\n') + `\n\nSetting a custom Cache-Control header can break Next.js development behavior.`); + } + if (config.deploymentId) { + var _config_experimental; + if ((_config_experimental = config.experimental) == null ? void 0 : _config_experimental.useSkewCookie) { + headers.unshift({ + source: '/:path*', + headers: [ + { + key: 'Set-Cookie', + value: `__vdpl=${config.deploymentId}; Path=/; HttpOnly` + } + ] + }); + } + onMatchHeaders.push({ + source: '/:path*', + has: [ + { + type: 'header', + key: 'rsc', + value: '1' + } + ], + headers: [ + { + key: _constants.NEXT_NAV_DEPLOYMENT_ID_HEADER, + value: config.deploymentId + } + ] + }, { + source: '/_next/data/(.*)', + headers: [ + { + key: _constants.NEXT_NAV_DEPLOYMENT_ID_HEADER, + value: config.deploymentId + } + ] + }); + } + if (!config.skipTrailingSlashRedirect) { + if (config.trailingSlash) { + redirects.unshift({ + source: '/:file((?!\\.well-known(?:/.*)?)(?:[^/]+/)*[^/]+\\.\\w+)/', + destination: '/:file', + permanent: true, + locale: config.i18n ? false : undefined, + internal: true, + priority: true, + // don't run this redirect for _next/data requests + missing: [ + { + type: 'header', + key: 'x-nextjs-data' + } + ] + }, { + source: '/:notfile((?!\\.well-known(?:/.*)?)(?:[^/]+/)*[^/\\.]+)', + destination: '/:notfile/', + permanent: true, + locale: config.i18n ? false : undefined, + internal: true, + priority: true + }); + if (config.basePath) { + redirects.unshift({ + source: config.basePath, + destination: config.basePath + '/', + permanent: true, + basePath: false, + locale: config.i18n ? false : undefined, + internal: true, + priority: true + }); + } + } else { + redirects.unshift({ + source: '/:path+/', + destination: '/:path+', + permanent: true, + locale: config.i18n ? false : undefined, + internal: true, + priority: true + }); + if (config.basePath) { + redirects.unshift({ + source: config.basePath + '/', + destination: config.basePath, + permanent: true, + basePath: false, + locale: config.i18n ? false : undefined, + internal: true, + priority: true + }); + } + } + } + return { + headers, + onMatchHeaders, + rewrites, + redirects + }; +} + +//# sourceMappingURL=load-custom-routes.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/memory/gc-observer.js b/build/node_modules/next/dist/lib/memory/gc-observer.js new file mode 100644 index 0000000..7084afc --- /dev/null +++ b/build/node_modules/next/dist/lib/memory/gc-observer.js @@ -0,0 +1,53 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getGcEvents: null, + startObservingGc: null, + stopObservingGc: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getGcEvents: function() { + return getGcEvents; + }, + startObservingGc: function() { + return startObservingGc; + }, + stopObservingGc: function() { + return stopObservingGc; + } +}); +const _perf_hooks = require("perf_hooks"); +const _log = require("../../build/output/log"); +const _picocolors = require("../picocolors"); +const LONG_RUNNING_GC_THRESHOLD_MS = 15; +const gcEvents = []; +const obs = new _perf_hooks.PerformanceObserver((list)=>{ + const entry = list.getEntries()[0]; + gcEvents.push(entry); + if (entry.duration > LONG_RUNNING_GC_THRESHOLD_MS) { + (0, _log.warn)((0, _picocolors.bold)(`Long running GC detected: ${entry.duration.toFixed(2)}ms`)); + } +}); +function startObservingGc() { + obs.observe({ + entryTypes: [ + 'gc' + ] + }); +} +function stopObservingGc() { + obs.disconnect(); +} +function getGcEvents() { + return gcEvents; +} + +//# sourceMappingURL=gc-observer.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/memory/shutdown.js b/build/node_modules/next/dist/lib/memory/shutdown.js new file mode 100644 index 0000000..8115654 --- /dev/null +++ b/build/node_modules/next/dist/lib/memory/shutdown.js @@ -0,0 +1,29 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "disableMemoryDebuggingMode", { + enumerable: true, + get: function() { + return disableMemoryDebuggingMode; + } +}); +const _log = require("../../build/output/log"); +const _picocolors = require("../picocolors"); +const _gcobserver = require("./gc-observer"); +const _trace = require("./trace"); +function disableMemoryDebuggingMode() { + (0, _trace.stopPeriodicMemoryUsageTracing)(); + (0, _gcobserver.stopObservingGc)(); + (0, _log.info)((0, _picocolors.bold)('Memory usage report:')); + const gcEvents = (0, _gcobserver.getGcEvents)(); + const totalTimeInGcMs = gcEvents.reduce((acc, event)=>acc + event.duration, 0); + (0, _log.info)(` - Total time spent in GC: ${totalTimeInGcMs.toFixed(2)}ms`); + const allMemoryUsage = (0, _trace.getAllMemoryUsageSpans)(); + const peakHeapUsage = Math.max(...allMemoryUsage.map((usage)=>usage['memory.heapUsed'])); + const peakRssUsage = Math.max(...allMemoryUsage.map((usage)=>usage['memory.rss'])); + (0, _log.info)(` - Peak heap usage: ${(peakHeapUsage / 1024 / 1024).toFixed(2)} MB`); + (0, _log.info)(` - Peak RSS usage: ${(peakRssUsage / 1024 / 1024).toFixed(2)} MB`); +} + +//# sourceMappingURL=shutdown.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/memory/startup.js b/build/node_modules/next/dist/lib/memory/startup.js new file mode 100644 index 0000000..e248ade --- /dev/null +++ b/build/node_modules/next/dist/lib/memory/startup.js @@ -0,0 +1,47 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "enableMemoryDebuggingMode", { + enumerable: true, + get: function() { + return enableMemoryDebuggingMode; + } +}); +const _v8 = /*#__PURE__*/ _interop_require_default(require("v8")); +const _log = require("../../build/output/log"); +const _picocolors = require("../picocolors"); +const _gcobserver = require("./gc-observer"); +const _trace = require("./trace"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function enableMemoryDebuggingMode() { + // This will generate a heap snapshot when the program is close to the + // memory limit. It does not give any warning to the user though which + // can be jarring. If memory is large, this may take a long time. + if ('setHeapSnapshotNearHeapLimit' in _v8.default) { + _v8.default.setHeapSnapshotNearHeapLimit(1); + } + // This flag will kill the process when it starts to GC thrash when it's + // close to the memory limit rather than continuing to try to collect + // memory ineffectively. + _v8.default.setFlagsFromString('--detect-ineffective-gcs-near-heap-limit'); + // This allows users to generate a heap snapshot on demand just by sending + // a signal to the process. + process.on('SIGUSR2', ()=>{ + (0, _log.warn)(`Received SIGUSR2 signal. Generating heap snapshot. ${(0, _picocolors.italic)('Note: this will take some time.')}`); + _v8.default.writeHeapSnapshot(); + }); + (0, _gcobserver.startObservingGc)(); + (0, _trace.startPeriodicMemoryUsageTracing)(); + (0, _log.warn)(`Memory debugging mode is enabled. ${(0, _picocolors.italic)('Note: This will affect performance.')}`); + (0, _log.info)(' - Heap snapshots will be automatically generated when the process reaches more than 70% of the memory limit and again when the process is just about to run out of memory.'); + (0, _log.info)(` - To manually generate a heap snapshot, send the process a SIGUSR2 signal: \`kill -SIGUSR2 ${process.pid}\``); + (0, _log.info)(' - Heap snapshots when there is high memory will take a very long time to complete and may be difficult to analyze in tools.'); + (0, _log.info)(' - See https://nextjs.org/docs/app/building-your-application/optimizing/memory-usage for more information.'); +} + +//# sourceMappingURL=startup.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/memory/trace.js b/build/node_modules/next/dist/lib/memory/trace.js new file mode 100644 index 0000000..1ec36a7 --- /dev/null +++ b/build/node_modules/next/dist/lib/memory/trace.js @@ -0,0 +1,109 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getAllMemoryUsageSpans: null, + startPeriodicMemoryUsageTracing: null, + stopPeriodicMemoryUsageTracing: null, + traceMemoryUsage: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getAllMemoryUsageSpans: function() { + return getAllMemoryUsageSpans; + }, + startPeriodicMemoryUsageTracing: function() { + return startPeriodicMemoryUsageTracing; + }, + stopPeriodicMemoryUsageTracing: function() { + return stopPeriodicMemoryUsageTracing; + }, + traceMemoryUsage: function() { + return traceMemoryUsage; + } +}); +const _v8 = /*#__PURE__*/ _interop_require_default(require("v8")); +const _log = require("../../build/output/log"); +const _trace = require("../../trace"); +const _picocolors = require("../picocolors"); +const _path = require("path"); +const _shared = require("../../trace/shared"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const HEAP_SNAPSHOT_THRESHOLD_PERCENT = 70; +let alreadyGeneratedHeapSnapshot = false; +const TRACE_MEMORY_USAGE_TIMER_MS = 20000; +let traceMemoryUsageTimer; +const allMemoryUsage = []; +function startPeriodicMemoryUsageTracing() { + traceMemoryUsageTimer = setTimeout(()=>{ + traceMemoryUsage('periodic memory snapshot'); + startPeriodicMemoryUsageTracing(); + }, TRACE_MEMORY_USAGE_TIMER_MS); +} +function stopPeriodicMemoryUsageTracing() { + if (traceMemoryUsageTimer) { + clearTimeout(traceMemoryUsageTimer); + } +} +function getAllMemoryUsageSpans() { + return allMemoryUsage; +} +function traceMemoryUsage(description, parentSpan) { + const memoryUsage = process.memoryUsage(); + const v8HeapStatistics = _v8.default.getHeapStatistics(); + const heapUsed = v8HeapStatistics.used_heap_size; + const heapMax = v8HeapStatistics.heap_size_limit; + const tracedMemoryUsage = { + 'memory.rss': memoryUsage.rss, + 'memory.heapUsed': heapUsed, + 'memory.heapTotal': memoryUsage.heapTotal, + 'memory.heapMax': heapMax + }; + allMemoryUsage.push(tracedMemoryUsage); + const tracedMemoryUsageAsStrings = Object.fromEntries(Object.entries(tracedMemoryUsage).map(([key, value])=>[ + key, + String(value) + ])); + if (parentSpan) { + parentSpan.traceChild('memory-usage', tracedMemoryUsageAsStrings); + } else { + (0, _trace.trace)('memory-usage', undefined, tracedMemoryUsageAsStrings); + } + if (process.env.EXPERIMENTAL_DEBUG_MEMORY_USAGE) { + const percentageHeapUsed = 100 * heapUsed / heapMax; + (0, _log.info)(''); + (0, _log.info)('***************************************'); + (0, _log.info)(`Memory usage report at "${description}":`); + (0, _log.info)(` - RSS: ${(memoryUsage.rss / 1024 / 1024).toFixed(2)} MB`); + (0, _log.info)(` - Heap Used: ${(heapUsed / 1024 / 1024).toFixed(2)} MB`); + (0, _log.info)(` - Heap Total Allocated: ${(memoryUsage.heapTotal / 1024 / 1024).toFixed(2)} MB`); + (0, _log.info)(` - Heap Max: ${(heapMax / 1024 / 1024).toFixed(2)} MB`); + (0, _log.info)(` - Percentage Heap Used: ${percentageHeapUsed.toFixed(2)}%`); + (0, _log.info)('***************************************'); + (0, _log.info)(''); + if (percentageHeapUsed > HEAP_SNAPSHOT_THRESHOLD_PERCENT) { + const distDir = _shared.traceGlobals.get('distDir'); + const heapFilename = (0, _path.join)(distDir, `${description.replace(' ', '-')}.heapsnapshot`); + (0, _log.warn)((0, _picocolors.bold)(`Heap usage is close to the limit. ${percentageHeapUsed.toFixed(2)}% of heap has been used.`)); + if (!alreadyGeneratedHeapSnapshot) { + (0, _log.warn)((0, _picocolors.bold)(`Saving heap snapshot to ${heapFilename}. ${(0, _picocolors.italic)('Note: this will take some time.')}`)); + _v8.default.writeHeapSnapshot(heapFilename); + alreadyGeneratedHeapSnapshot = true; + } else { + (0, _log.warn)('Skipping heap snapshot generation since heap snapshot has already been generated.'); + } + } + } +} + +//# sourceMappingURL=trace.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/metadata/constants.js b/build/node_modules/next/dist/lib/metadata/constants.js new file mode 100644 index 0000000..838b87c --- /dev/null +++ b/build/node_modules/next/dist/lib/metadata/constants.js @@ -0,0 +1,40 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + IconKeys: null, + ViewportMetaKeys: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + IconKeys: function() { + return IconKeys; + }, + ViewportMetaKeys: function() { + return ViewportMetaKeys; + } +}); +const ViewportMetaKeys = { + width: 'width', + height: 'height', + initialScale: 'initial-scale', + minimumScale: 'minimum-scale', + maximumScale: 'maximum-scale', + viewportFit: 'viewport-fit', + userScalable: 'user-scalable', + interactiveWidget: 'interactive-widget' +}; +const IconKeys = [ + 'icon', + 'shortcut', + 'apple', + 'other' +]; + +//# sourceMappingURL=constants.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/metadata/default-metadata.js b/build/node_modules/next/dist/lib/metadata/default-metadata.js new file mode 100644 index 0000000..84d4f69 --- /dev/null +++ b/build/node_modules/next/dist/lib/metadata/default-metadata.js @@ -0,0 +1,82 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createDefaultMetadata: null, + createDefaultViewport: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createDefaultMetadata: function() { + return createDefaultMetadata; + }, + createDefaultViewport: function() { + return createDefaultViewport; + } +}); +function createDefaultViewport() { + return { + // name=viewport + width: 'device-width', + initialScale: 1, + // visual metadata + themeColor: null, + colorScheme: null + }; +} +function createDefaultMetadata() { + return { + // Deprecated ones + viewport: null, + themeColor: null, + colorScheme: null, + metadataBase: null, + // Other values are all null + title: null, + description: null, + applicationName: null, + authors: null, + generator: null, + keywords: null, + referrer: null, + creator: null, + publisher: null, + robots: null, + manifest: null, + alternates: { + canonical: null, + languages: null, + media: null, + types: null + }, + icons: null, + openGraph: null, + twitter: null, + verification: {}, + appleWebApp: null, + formatDetection: null, + itunes: null, + facebook: null, + pinterest: null, + abstract: null, + appLinks: null, + archives: null, + assets: null, + bookmarks: null, + category: null, + classification: null, + pagination: { + previous: null, + next: null + }, + other: {} + }; +} + +//# sourceMappingURL=default-metadata.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/metadata/generate/icon-mark.js b/build/node_modules/next/dist/lib/metadata/generate/icon-mark.js new file mode 100644 index 0000000..b3d200b --- /dev/null +++ b/build/node_modules/next/dist/lib/metadata/generate/icon-mark.js @@ -0,0 +1,22 @@ +'use client'; +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "IconMark", { + enumerable: true, + get: function() { + return IconMark; + } +}); +const _jsxruntime = require("react/jsx-runtime"); +const IconMark = ()=>{ + if (typeof window !== 'undefined') { + return null; + } + return /*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "\xabnxt-icon\xbb" + }); +}; + +//# sourceMappingURL=icon-mark.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/metadata/generate/utils.js b/build/node_modules/next/dist/lib/metadata/generate/utils.js new file mode 100644 index 0000000..b373fe9 --- /dev/null +++ b/build/node_modules/next/dist/lib/metadata/generate/utils.js @@ -0,0 +1,52 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getOrigin: null, + resolveArray: null, + resolveAsArrayOrUndefined: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getOrigin: function() { + return getOrigin; + }, + resolveArray: function() { + return resolveArray; + }, + resolveAsArrayOrUndefined: function() { + return resolveAsArrayOrUndefined; + } +}); +function resolveArray(value) { + if (Array.isArray(value)) { + return value; + } + return [ + value + ]; +} +function resolveAsArrayOrUndefined(value) { + if (typeof value === 'undefined' || value === null) { + return undefined; + } + return resolveArray(value); +} +function getOrigin(url) { + let origin = undefined; + if (typeof url === 'string') { + try { + url = new URL(url); + origin = url.origin; + } catch {} + } + return origin; +} + +//# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/metadata/get-metadata-route.js b/build/node_modules/next/dist/lib/metadata/get-metadata-route.js new file mode 100644 index 0000000..c8a2df2 --- /dev/null +++ b/build/node_modules/next/dist/lib/metadata/get-metadata-route.js @@ -0,0 +1,123 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + fillMetadataSegment: null, + normalizeMetadataPageToRoute: null, + normalizeMetadataRoute: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + fillMetadataSegment: function() { + return fillMetadataSegment; + }, + normalizeMetadataPageToRoute: function() { + return normalizeMetadataPageToRoute; + }, + normalizeMetadataRoute: function() { + return normalizeMetadataRoute; + } +}); +const _ismetadataroute = require("./is-metadata-route"); +const _path = /*#__PURE__*/ _interop_require_default(require("../../shared/lib/isomorphic/path")); +const _serverutils = require("../../server/server-utils"); +const _routeregex = require("../../shared/lib/router/utils/route-regex"); +const _hash = require("../../shared/lib/hash"); +const _apppaths = require("../../shared/lib/router/utils/app-paths"); +const _normalizepathsep = require("../../shared/lib/page-path/normalize-path-sep"); +const _segment = require("../../shared/lib/segment"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +/* + * If there's special convention like (...) or @ in the page path, + * Give it a unique hash suffix to avoid conflicts + * + * e.g. + * /opengraph-image -> /opengraph-image + * /(post)/opengraph-image.tsx -> /opengraph-image-[0-9a-z]{6} + * + * Sitemap is an exception, it should not have a suffix. + * Each sitemap contains all the urls of sub routes, we don't have the case of duplicates `/(group)/sitemap.[ext]` and `/sitemap.[ext]` since they should be the same. + * Hence we always normalize the urls for sitemap and do not append hash suffix, and ensure user-land only contains one sitemap per pathname. + * + * /sitemap -> /sitemap + * /(post)/sitemap -> /sitemap + */ function getMetadataRouteSuffix(page) { + // Remove the last segment and get the parent pathname + // e.g. /parent/a/b/c -> /parent/a/b + // e.g. /parent/opengraph-image -> /parent + const parentPathname = _path.default.dirname(page); + // Only apply suffix to metadata routes except for sitemaps + if (page.endsWith('/sitemap') || page.endsWith('/sitemap.xml')) { + return ''; + } + // Calculate the hash suffix based on the parent path + let suffix = ''; + // Check if there's any special characters in the parent pathname. + const segments = parentPathname.split('/'); + if (segments.some((seg)=>(0, _segment.isGroupSegment)(seg) || (0, _segment.isParallelRouteSegment)(seg))) { + // Hash the parent path to get a unique suffix + suffix = (0, _hash.djb2Hash)(parentPathname).toString(36).slice(0, 6); + } + return suffix; +} +function fillMetadataSegment(segment, params, lastSegment, isStatic) { + const pathname = (0, _apppaths.normalizeAppPath)(segment); + const routeRegex = (0, _routeregex.getNamedRouteRegex)(pathname, { + prefixRouteKeys: false + }); + // For static metadata files, fill all dynamic segments with "-" placeholder + const routeParams = isStatic ? Object.keys(routeRegex.groups).reduce((acc, key)=>{ + const { repeat } = routeRegex.groups[key]; + // Use array for catch-all segments, string for regular segments + acc[key] = repeat ? [ + '-' + ] : '-'; + return acc; + }, {}) : params; + const route = (0, _serverutils.interpolateDynamicPath)(pathname, routeParams, routeRegex); + const { name, ext } = _path.default.parse(lastSegment); + const pagePath = _path.default.posix.join(segment, name); + const suffix = getMetadataRouteSuffix(pagePath); + const routeSuffix = suffix ? `-${suffix}` : ''; + return (0, _normalizepathsep.normalizePathSep)(_path.default.join(route, `${name}${routeSuffix}${ext}`)); +} +function normalizeMetadataRoute(page) { + if (!(0, _ismetadataroute.isMetadataPage)(page)) { + return page; + } + let route = page; + let suffix = ''; + if (page === '/robots') { + route += '.txt'; + } else if (page === '/manifest') { + route += '.webmanifest'; + } else { + suffix = getMetadataRouteSuffix(page); + } + // Support both / and custom routes //route.ts. + // If it's a metadata file route, we need to append /[id]/route to the page. + if (!route.endsWith('/route')) { + const { dir, name: baseName, ext } = _path.default.parse(route); + route = _path.default.posix.join(dir, `${baseName}${suffix ? `-${suffix}` : ''}${ext}`, 'route'); + } + return route; +} +function normalizeMetadataPageToRoute(page, isDynamic) { + const isRoute = page.endsWith('/route'); + const routePagePath = isRoute ? page.slice(0, -'/route'.length) : page; + const metadataRouteExtension = routePagePath.endsWith('/sitemap') ? '.xml' : ''; + const mapped = isDynamic ? `${routePagePath}/[__metadata_id__]` : `${routePagePath}${metadataRouteExtension}`; + return mapped + (isRoute ? '/route' : ''); +} + +//# sourceMappingURL=get-metadata-route.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/metadata/is-metadata-route.js b/build/node_modules/next/dist/lib/metadata/is-metadata-route.js new file mode 100644 index 0000000..a481dd1 --- /dev/null +++ b/build/node_modules/next/dist/lib/metadata/is-metadata-route.js @@ -0,0 +1,221 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + DEFAULT_METADATA_ROUTE_EXTENSIONS: null, + STATIC_METADATA_IMAGES: null, + getExtensionRegexString: null, + isMetadataPage: null, + isMetadataRoute: null, + isMetadataRouteFile: null, + isStaticMetadataFile: null, + isStaticMetadataRoute: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + DEFAULT_METADATA_ROUTE_EXTENSIONS: function() { + return DEFAULT_METADATA_ROUTE_EXTENSIONS; + }, + STATIC_METADATA_IMAGES: function() { + return STATIC_METADATA_IMAGES; + }, + getExtensionRegexString: function() { + return getExtensionRegexString; + }, + isMetadataPage: function() { + return isMetadataPage; + }, + isMetadataRoute: function() { + return isMetadataRoute; + }, + isMetadataRouteFile: function() { + return isMetadataRouteFile; + }, + isStaticMetadataFile: function() { + return isStaticMetadataFile; + }, + isStaticMetadataRoute: function() { + return isStaticMetadataRoute; + } +}); +const _normalizepathsep = require("../../shared/lib/page-path/normalize-path-sep"); +const _apppaths = require("../../shared/lib/router/utils/app-paths"); +const _isapprouteroute = require("../is-app-route-route"); +const STATIC_METADATA_IMAGES = { + icon: { + filename: 'icon', + extensions: [ + 'ico', + 'jpg', + 'jpeg', + 'png', + 'svg' + ] + }, + apple: { + filename: 'apple-icon', + extensions: [ + 'jpg', + 'jpeg', + 'png' + ] + }, + favicon: { + filename: 'favicon', + extensions: [ + 'ico' + ] + }, + openGraph: { + filename: 'opengraph-image', + extensions: [ + 'jpg', + 'jpeg', + 'png', + 'gif' + ] + }, + twitter: { + filename: 'twitter-image', + extensions: [ + 'jpg', + 'jpeg', + 'png', + 'gif' + ] + } +}; +const DEFAULT_METADATA_ROUTE_EXTENSIONS = [ + 'js', + 'jsx', + 'ts', + 'tsx' +]; +const getExtensionRegexString = (staticExtensions, dynamicExtensions)=>{ + let result; + // If there's no possible multi dynamic routes, will not match any []. files + if (!dynamicExtensions || dynamicExtensions.length === 0) { + result = `(\\.(?:${staticExtensions.join('|')}))`; + } else { + result = `(?:\\.(${staticExtensions.join('|')})|(\\.(${dynamicExtensions.join('|')})))`; + } + return result; +}; +function isStaticMetadataFile(appDirRelativePath) { + return isMetadataRouteFile(appDirRelativePath, [], true); +} +// Pre-compiled static regexes for common cases +const FAVICON_REGEX = /^[\\/]favicon\.ico$/; +const ROBOTS_TXT_REGEX = /^[\\/]robots\.txt$/; +const MANIFEST_JSON_REGEX = /^[\\/]manifest\.json$/; +const MANIFEST_WEBMANIFEST_REGEX = /^[\\/]manifest\.webmanifest$/; +const SITEMAP_XML_REGEX = /[\\/]sitemap\.xml$/; +// Cache for compiled regex patterns based on parameters +const compiledRegexCache = new Map(); +// Fast path checks for common metadata files +function fastPathCheck(normalizedPath) { + // Check favicon.ico first (most common) + if (FAVICON_REGEX.test(normalizedPath)) return true; + // Check other common static files + if (ROBOTS_TXT_REGEX.test(normalizedPath)) return true; + if (MANIFEST_JSON_REGEX.test(normalizedPath)) return true; + if (MANIFEST_WEBMANIFEST_REGEX.test(normalizedPath)) return true; + if (SITEMAP_XML_REGEX.test(normalizedPath)) return true; + // Quick negative check - if it doesn't contain any metadata keywords, skip + if (!normalizedPath.includes('robots') && !normalizedPath.includes('manifest') && !normalizedPath.includes('sitemap') && !normalizedPath.includes('icon') && !normalizedPath.includes('apple-icon') && !normalizedPath.includes('opengraph-image') && !normalizedPath.includes('twitter-image') && !normalizedPath.includes('favicon')) { + return false; + } + return null // Continue with full regex matching + ; +} +function getCompiledRegexes(pageExtensions, strictlyMatchExtensions) { + // Create cache key + const cacheKey = `${pageExtensions.join(',')}|${strictlyMatchExtensions}`; + const cached = compiledRegexCache.get(cacheKey); + if (cached) { + return cached; + } + // Pre-compute common strings + const trailingMatcher = strictlyMatchExtensions ? '$' : '?$'; + const variantsMatcher = '\\d?'; + const groupSuffix = strictlyMatchExtensions ? '' : '(-\\w{6})?'; + const suffixMatcher = variantsMatcher + groupSuffix; + // Pre-compute extension arrays to avoid repeated concatenation + const robotsExts = pageExtensions.length > 0 ? [ + ...pageExtensions, + 'txt' + ] : [ + 'txt' + ]; + const manifestExts = pageExtensions.length > 0 ? [ + ...pageExtensions, + 'webmanifest', + 'json' + ] : [ + 'webmanifest', + 'json' + ]; + const regexes = [ + new RegExp(`^[\\\\/]robots${getExtensionRegexString(robotsExts, null)}${trailingMatcher}`), + new RegExp(`^[\\\\/]manifest${getExtensionRegexString(manifestExts, null)}${trailingMatcher}`), + // FAVICON_REGEX removed - already handled in fastPathCheck + new RegExp(`[\\\\/]sitemap${getExtensionRegexString([ + 'xml' + ], pageExtensions)}${trailingMatcher}`), + new RegExp(`[\\\\/]icon${suffixMatcher}${getExtensionRegexString(STATIC_METADATA_IMAGES.icon.extensions, pageExtensions)}${trailingMatcher}`), + new RegExp(`[\\\\/]apple-icon${suffixMatcher}${getExtensionRegexString(STATIC_METADATA_IMAGES.apple.extensions, pageExtensions)}${trailingMatcher}`), + new RegExp(`[\\\\/]opengraph-image${suffixMatcher}${getExtensionRegexString(STATIC_METADATA_IMAGES.openGraph.extensions, pageExtensions)}${trailingMatcher}`), + new RegExp(`[\\\\/]twitter-image${suffixMatcher}${getExtensionRegexString(STATIC_METADATA_IMAGES.twitter.extensions, pageExtensions)}${trailingMatcher}`) + ]; + compiledRegexCache.set(cacheKey, regexes); + return regexes; +} +function isMetadataRouteFile(appDirRelativePath, pageExtensions, strictlyMatchExtensions) { + // Early exit for empty or obviously non-metadata paths + if (!appDirRelativePath || appDirRelativePath.length < 2) { + return false; + } + const normalizedPath = (0, _normalizepathsep.normalizePathSep)(appDirRelativePath); + // Fast path check for common cases + const fastResult = fastPathCheck(normalizedPath); + if (fastResult !== null) { + return fastResult; + } + // Get compiled regexes from cache + const regexes = getCompiledRegexes(pageExtensions, strictlyMatchExtensions); + // Use for loop instead of .some() for better performance + for(let i = 0; i < regexes.length; i++){ + if (regexes[i].test(normalizedPath)) { + return true; + } + } + return false; +} +function isStaticMetadataRoute(route) { + // extract ext with regex + const pathname = route.replace(/\/route$/, ''); + const matched = (0, _isapprouteroute.isAppRouteRoute)(route) && isMetadataRouteFile(pathname, [], true) && // These routes can either be built by static or dynamic entrypoints, + // so we assume they're dynamic + pathname !== '/robots.txt' && pathname !== '/manifest.webmanifest' && !pathname.endsWith('/sitemap.xml'); + return matched; +} +function isMetadataPage(page) { + const matched = !(0, _isapprouteroute.isAppRouteRoute)(page) && isMetadataRouteFile(page, [], false); + return matched; +} +function isMetadataRoute(route) { + let page = (0, _apppaths.normalizeAppPath)(route).replace(/^\/?app\//, '')// Remove the dynamic route id + .replace('/[__metadata_id__]', '')// Remove the /route suffix + .replace(/\/route$/, ''); + if (page[0] !== '/') page = '/' + page; + const matched = (0, _isapprouteroute.isAppRouteRoute)(route) && isMetadataRouteFile(page, [], false); + return matched; +} + +//# sourceMappingURL=is-metadata-route.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/metadata/metadata-context.js b/build/node_modules/next/dist/lib/metadata/metadata-context.js new file mode 100644 index 0000000..70271e7 --- /dev/null +++ b/build/node_modules/next/dist/lib/metadata/metadata-context.js @@ -0,0 +1,18 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "createMetadataContext", { + enumerable: true, + get: function() { + return createMetadataContext; + } +}); +function createMetadataContext(renderOpts) { + return { + trailingSlash: renderOpts.trailingSlash, + isStaticMetadataRouteFile: false + }; +} + +//# sourceMappingURL=metadata-context.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/metadata/metadata.js b/build/node_modules/next/dist/lib/metadata/metadata.js new file mode 100644 index 0000000..25d7c63 --- /dev/null +++ b/build/node_modules/next/dist/lib/metadata/metadata.js @@ -0,0 +1,1686 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "createMetadataComponents", { + enumerable: true, + get: function() { + return createMetadataComponents; + } +}); +const _jsxruntime = require("react/jsx-runtime"); +const _react = /*#__PURE__*/ _interop_require_wildcard(require("react")); +const _resolvemetadata = require("./resolve-metadata"); +const _httpaccessfallback = require("../../client/components/http-access-fallback/http-access-fallback"); +const _searchparams = require("../../server/request/search-params"); +const _pathname = require("../../server/request/pathname"); +const _ispostpone = require("../../server/lib/router-utils/is-postpone"); +const _workunitasyncstorageexternal = require("../../server/app-render/work-unit-async-storage.external"); +const _stagedrendering = require("../../server/app-render/staged-rendering"); +const _boundarycomponents = require("../framework/boundary-components"); +const _utils = require("./generate/utils"); +const _iconmark = require("./generate/icon-mark"); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +function createMetadataComponents({ tree, pathname, parsedQuery, metadataContext, interpolatedParams, errorType, serveStreamingMetadata, isRuntimePrefetchable }) { + const searchParams = (0, _searchparams.createServerSearchParamsForMetadata)(parsedQuery, isRuntimePrefetchable); + const pathnameForMetadata = (0, _pathname.createServerPathnameForMetadata)(pathname); + async function Viewport() { + // Gate metadata to the correct render stage. If the page is not + // runtime-prefetchable, defer until the Static stage so that + // prefetchable segments get a head start. + if (!isRuntimePrefetchable) { + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workUnitStore) { + const stagedRendering = (0, _workunitasyncstorageexternal.getStagedRenderingController)(workUnitStore); + if (stagedRendering) { + await stagedRendering.waitForStage(_stagedrendering.RenderStage.Static); + } + } + } + const tags = await getResolvedViewport(tree, searchParams, interpolatedParams, isRuntimePrefetchable, errorType).catch((viewportErr)=>{ + // When Legacy PPR is enabled viewport can reject with a Postpone type + // This will go away once Legacy PPR is removed and dynamic metadata will + // stay pending until after the prerender is complete when it is dynamic + if ((0, _ispostpone.isPostpone)(viewportErr)) { + throw viewportErr; + } + if (!errorType && (0, _httpaccessfallback.isHTTPAccessFallbackError)(viewportErr)) { + return getNotFoundViewport(tree, searchParams, interpolatedParams, isRuntimePrefetchable).catch(()=>null); + } + // We're going to throw the error from the metadata outlet so we just render null here instead + return null; + }); + return tags; + } + Viewport.displayName = 'Next.Viewport'; + function ViewportWrapper() { + return /*#__PURE__*/ (0, _jsxruntime.jsx)(_boundarycomponents.ViewportBoundary, { + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(Viewport, {}) + }); + } + async function Metadata() { + // Gate metadata to the correct render stage. If the page is not + // runtime-prefetchable, defer until the Static stage so that + // prefetchable segments get a head start. + if (!isRuntimePrefetchable) { + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workUnitStore) { + const stagedRendering = (0, _workunitasyncstorageexternal.getStagedRenderingController)(workUnitStore); + if (stagedRendering) { + await stagedRendering.waitForStage(_stagedrendering.RenderStage.Static); + } + } + } + const tags = await getResolvedMetadata(tree, pathnameForMetadata, searchParams, interpolatedParams, metadataContext, isRuntimePrefetchable, errorType).catch((metadataErr)=>{ + // When Legacy PPR is enabled metadata can reject with a Postpone type + // This will go away once Legacy PPR is removed and dynamic metadata will + // stay pending until after the prerender is complete when it is dynamic + if ((0, _ispostpone.isPostpone)(metadataErr)) { + throw metadataErr; + } + if (!errorType && (0, _httpaccessfallback.isHTTPAccessFallbackError)(metadataErr)) { + return getNotFoundMetadata(tree, pathnameForMetadata, searchParams, interpolatedParams, metadataContext, isRuntimePrefetchable).catch(()=>null); + } + // We're going to throw the error from the metadata outlet so we just render null here instead + return null; + }); + return tags; + } + Metadata.displayName = 'Next.Metadata'; + function MetadataWrapper() { + // TODO: We shouldn't change what we render based on whether we are streaming or not. + // If we aren't streaming we should just block the response until we have resolved the + // metadata. + if (!serveStreamingMetadata) { + return /*#__PURE__*/ (0, _jsxruntime.jsx)(_boundarycomponents.MetadataBoundary, { + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(Metadata, {}) + }); + } + return /*#__PURE__*/ (0, _jsxruntime.jsx)("div", { + hidden: true, + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_boundarycomponents.MetadataBoundary, { + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_react.Suspense, { + name: "Next.Metadata", + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(Metadata, {}) + }) + }) + }); + } + function MetadataOutlet() { + const pendingOutlet = Promise.all([ + getResolvedMetadata(tree, pathnameForMetadata, searchParams, interpolatedParams, metadataContext, isRuntimePrefetchable, errorType), + getResolvedViewport(tree, searchParams, interpolatedParams, isRuntimePrefetchable, errorType) + ]).then(()=>null); + // TODO: We shouldn't change what we render based on whether we are streaming or not. + // If we aren't streaming we should just block the response until we have resolved the + // metadata. + if (!serveStreamingMetadata) { + return /*#__PURE__*/ (0, _jsxruntime.jsx)(_boundarycomponents.OutletBoundary, { + children: pendingOutlet + }); + } + return /*#__PURE__*/ (0, _jsxruntime.jsx)(_boundarycomponents.OutletBoundary, { + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_react.Suspense, { + name: "Next.MetadataOutlet", + children: pendingOutlet + }) + }); + } + MetadataOutlet.displayName = 'Next.MetadataOutlet'; + return { + Viewport: ViewportWrapper, + Metadata: MetadataWrapper, + MetadataOutlet + }; +} +const getResolvedMetadata = (0, _react.cache)(getResolvedMetadataImpl); +async function getResolvedMetadataImpl(tree, pathname, searchParams, interpolatedParams, metadataContext, isRuntimePrefetchable, errorType) { + const errorConvention = errorType === 'redirect' ? undefined : errorType; + return renderMetadata(tree, pathname, searchParams, interpolatedParams, metadataContext, isRuntimePrefetchable, errorConvention); +} +const getNotFoundMetadata = (0, _react.cache)(getNotFoundMetadataImpl); +async function getNotFoundMetadataImpl(tree, pathname, searchParams, interpolatedParams, metadataContext, isRuntimePrefetchable) { + const notFoundErrorConvention = 'not-found'; + return renderMetadata(tree, pathname, searchParams, interpolatedParams, metadataContext, isRuntimePrefetchable, notFoundErrorConvention); +} +const getResolvedViewport = (0, _react.cache)(getResolvedViewportImpl); +async function getResolvedViewportImpl(tree, searchParams, interpolatedParams, isRuntimePrefetchable, errorType) { + const errorConvention = errorType === 'redirect' ? undefined : errorType; + return renderViewport(tree, searchParams, interpolatedParams, isRuntimePrefetchable, errorConvention); +} +const getNotFoundViewport = (0, _react.cache)(getNotFoundViewportImpl); +async function getNotFoundViewportImpl(tree, searchParams, interpolatedParams, isRuntimePrefetchable) { + const notFoundErrorConvention = 'not-found'; + return renderViewport(tree, searchParams, interpolatedParams, isRuntimePrefetchable, notFoundErrorConvention); +} +async function renderMetadata(tree, pathname, searchParams, interpolatedParams, metadataContext, isRuntimePrefetchable, errorConvention) { + const resolvedMetadata = await (0, _resolvemetadata.resolveMetadata)(tree, pathname, searchParams, errorConvention, interpolatedParams, metadataContext, isRuntimePrefetchable); + return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, { + children: createMetadataElements(resolvedMetadata) + }); +} +async function renderViewport(tree, searchParams, interpolatedParams, isRuntimePrefetchable, errorConvention) { + const resolvedViewport = await (0, _resolvemetadata.resolveViewport)(tree, searchParams, errorConvention, interpolatedParams, isRuntimePrefetchable); + return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, { + children: createViewportElements(resolvedViewport) + }); +} +// --------------------------------------------------------------------------- +// Viewport tag rendering +// --------------------------------------------------------------------------- +function createViewportElements(viewport) { + const tags = []; + let i = 0; + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + charSet: "utf-8" + }, i++)); + // Build viewport content string from layout properties + const viewportParts = []; + if (viewport.width != null) { + viewportParts.push(`width=${viewport.width}`); + } + if (viewport.height != null) { + viewportParts.push(`height=${viewport.height}`); + } + if (viewport.initialScale != null) { + viewportParts.push(`initial-scale=${viewport.initialScale}`); + } + if (viewport.minimumScale != null) { + viewportParts.push(`minimum-scale=${viewport.minimumScale}`); + } + if (viewport.maximumScale != null) { + viewportParts.push(`maximum-scale=${viewport.maximumScale}`); + } + if (viewport.userScalable != null) { + viewportParts.push(`user-scalable=${viewport.userScalable ? 'yes' : 'no'}`); + } + if (viewport.viewportFit) { + viewportParts.push(`viewport-fit=${viewport.viewportFit}`); + } + if (viewport.interactiveWidget) { + viewportParts.push(`interactive-widget=${viewport.interactiveWidget}`); + } + if (viewportParts.length) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "viewport", + content: viewportParts.join(', ') + }, i++)); + } + if (viewport.themeColor) { + for (const themeColor of viewport.themeColor){ + if (themeColor.media) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "theme-color", + content: themeColor.color, + media: themeColor.media + }, i++)); + } else { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "theme-color", + content: themeColor.color + }, i++)); + } + } + } + if (viewport.colorScheme) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "color-scheme", + content: viewport.colorScheme + }, i++)); + } + return tags; +} +// --------------------------------------------------------------------------- +// Metadata tag rendering +// --------------------------------------------------------------------------- +function createMetadataElements(metadata) { + var _metadata_robots, _metadata_robots1; + const tags = []; + let i = 0; + // --- Title --- + if (metadata.title !== null && metadata.title.absolute) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("title", { + children: metadata.title.absolute + }, i++)); + } + // --- Basic meta tags --- + if (metadata.description) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "description", + content: metadata.description + }, i++)); + } + if (metadata.applicationName) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "application-name", + content: metadata.applicationName + }, i++)); + } + // --- Authors --- + if (metadata.authors) { + for (const author of metadata.authors){ + if (author.url) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("link", { + rel: "author", + href: author.url.toString() + }, i++)); + } + if (author.name) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "author", + content: author.name + }, i++)); + } + } + } + // --- Manifest --- + if (metadata.manifest) { + const manifestOrigin = (0, _utils.getOrigin)(metadata.manifest); + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("link", { + rel: "manifest", + href: metadata.manifest.toString(), + crossOrigin: !manifestOrigin && process.env.VERCEL_ENV === 'preview' ? 'use-credentials' : undefined + }, i++)); + } + if (metadata.generator) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "generator", + content: metadata.generator + }, i++)); + } + if (metadata.keywords && metadata.keywords.length) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "keywords", + content: metadata.keywords.join(',') + }, i++)); + } + if (metadata.referrer) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "referrer", + content: metadata.referrer + }, i++)); + } + if (metadata.creator) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "creator", + content: metadata.creator + }, i++)); + } + if (metadata.publisher) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "publisher", + content: metadata.publisher + }, i++)); + } + if ((_metadata_robots = metadata.robots) == null ? void 0 : _metadata_robots.basic) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "robots", + content: metadata.robots.basic + }, i++)); + } + if ((_metadata_robots1 = metadata.robots) == null ? void 0 : _metadata_robots1.googleBot) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "googlebot", + content: metadata.robots.googleBot + }, i++)); + } + if (metadata.abstract) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "abstract", + content: metadata.abstract + }, i++)); + } + // --- Link rel arrays --- + if (metadata.archives) { + for (const archive of metadata.archives){ + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("link", { + rel: "archives", + href: archive + }, i++)); + } + } + if (metadata.assets) { + for (const asset of metadata.assets){ + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("link", { + rel: "assets", + href: asset + }, i++)); + } + } + if (metadata.bookmarks) { + for (const bookmark of metadata.bookmarks){ + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("link", { + rel: "bookmarks", + href: bookmark + }, i++)); + } + } + // --- Pagination --- + if (metadata.pagination) { + if (metadata.pagination.previous) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("link", { + rel: "prev", + href: metadata.pagination.previous + }, i++)); + } + if (metadata.pagination.next) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("link", { + rel: "next", + href: metadata.pagination.next + }, i++)); + } + } + if (metadata.category) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "category", + content: metadata.category + }, i++)); + } + if (metadata.classification) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "classification", + content: metadata.classification + }, i++)); + } + // --- Other (arbitrary name/value pairs) --- + if (metadata.other) { + for (const [name, content] of Object.entries(metadata.other)){ + if (Array.isArray(content)) { + for (const contentItem of content){ + if (contentItem != null && contentItem !== '') { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: name, + content: String(contentItem) + }, i++)); + } + } + } else if (content != null && content !== '') { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: name, + content: String(content) + }, i++)); + } + } + } + // --- Alternates --- + if (metadata.alternates) { + const { canonical, languages, media, types } = metadata.alternates; + if (canonical && canonical.url) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("link", { + rel: "canonical", + href: canonical.url.toString(), + ...canonical.title ? { + title: canonical.title + } : undefined + }, i++)); + } + if (languages) { + for (const [locale, descriptors] of Object.entries(languages)){ + if (descriptors) { + for (const descriptor of descriptors){ + if (descriptor.url) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("link", { + rel: "alternate", + hrefLang: locale, + href: descriptor.url.toString(), + ...descriptor.title ? { + title: descriptor.title + } : undefined + }, i++)); + } + } + } + } + } + if (media) { + for (const [mediaName, descriptors] of Object.entries(media)){ + if (descriptors) { + for (const descriptor of descriptors){ + if (descriptor.url) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("link", { + rel: "alternate", + media: mediaName, + href: descriptor.url.toString(), + ...descriptor.title ? { + title: descriptor.title + } : undefined + }, i++)); + } + } + } + } + } + if (types) { + for (const [type, descriptors] of Object.entries(types)){ + if (descriptors) { + for (const descriptor of descriptors){ + if (descriptor.url) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("link", { + rel: "alternate", + type: type, + href: descriptor.url.toString(), + ...descriptor.title ? { + title: descriptor.title + } : undefined + }, i++)); + } + } + } + } + } + } + // --- iTunes --- + if (metadata.itunes) { + const { appId, appArgument } = metadata.itunes; + let itunesContent = `app-id=${appId}`; + if (appArgument) { + itunesContent += `, app-argument=${appArgument}`; + } + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "apple-itunes-app", + content: itunesContent + }, i++)); + } + // --- Facebook --- + if (metadata.facebook) { + if (metadata.facebook.appId) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "fb:app_id", + content: metadata.facebook.appId + }, i++)); + } + if (metadata.facebook.admins) { + for (const admin of metadata.facebook.admins){ + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "fb:admins", + content: admin + }, i++)); + } + } + } + // --- Pinterest --- + if (metadata.pinterest && metadata.pinterest.richPin !== undefined) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "pinterest-rich-pin", + content: metadata.pinterest.richPin.toString() + }, i++)); + } + // --- Format Detection --- + if (metadata.formatDetection) { + const formatDetectionKeys = [ + 'telephone', + 'date', + 'address', + 'email', + 'url' + ]; + let formatContent = ''; + for (const key of formatDetectionKeys){ + if (metadata.formatDetection[key] === false) { + if (formatContent) formatContent += ', '; + formatContent += `${key}=no`; + } + } + if (formatContent) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "format-detection", + content: formatContent + }, i++)); + } + } + // --- Verification --- + if (metadata.verification) { + const verification = metadata.verification; + if (verification.google) { + for (const value of verification.google){ + if (value != null && value !== '') { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "google-site-verification", + content: String(value) + }, i++)); + } + } + } + if (verification.yahoo) { + for (const value of verification.yahoo){ + if (value != null && value !== '') { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "y_key", + content: String(value) + }, i++)); + } + } + } + if (verification.yandex) { + for (const value of verification.yandex){ + if (value != null && value !== '') { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "yandex-verification", + content: String(value) + }, i++)); + } + } + } + if (verification.me) { + for (const value of verification.me){ + if (value != null && value !== '') { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "me", + content: String(value) + }, i++)); + } + } + } + if (verification.other) { + for (const [name, values] of Object.entries(verification.other)){ + for (const value of values){ + if (value != null && value !== '') { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: name, + content: String(value) + }, i++)); + } + } + } + } + } + // --- Apple Web App --- + if (metadata.appleWebApp) { + const { capable, title, startupImage, statusBarStyle } = metadata.appleWebApp; + if (capable) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "mobile-web-app-capable", + content: "yes" + }, i++)); + } + if (title) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "apple-mobile-web-app-title", + content: title + }, i++)); + } + if (startupImage) { + for (const image of startupImage){ + if (image.media) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("link", { + href: image.url, + media: image.media, + rel: "apple-touch-startup-image" + }, i++)); + } else { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("link", { + href: image.url, + rel: "apple-touch-startup-image" + }, i++)); + } + } + } + if (statusBarStyle) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "apple-mobile-web-app-status-bar-style", + content: statusBarStyle + }, i++)); + } + } + // --- Open Graph --- + if (metadata.openGraph) { + var _og_title; + const og = metadata.openGraph; + if (og.determiner) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:determiner", + content: og.determiner + }, i++)); + } + if ((_og_title = og.title) == null ? void 0 : _og_title.absolute) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:title", + content: og.title.absolute + }, i++)); + } + if (og.description) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:description", + content: og.description + }, i++)); + } + if (og.url) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:url", + content: og.url.toString() + }, i++)); + } + if (og.siteName) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:site_name", + content: og.siteName + }, i++)); + } + if (og.locale) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:locale", + content: og.locale + }, i++)); + } + if (og.countryName) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:country_name", + content: og.countryName + }, i++)); + } + if (og.ttl != null) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:ttl", + content: og.ttl.toString() + }, i++)); + } + // OG images + if (og.images) { + for (const image of og.images){ + if (typeof image === 'string') { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:image", + content: image + }, i++)); + } else { + if (image.url) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:image", + content: String(image.url) + }, i++)); + } + if (image.secureUrl) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:image:secure_url", + content: String(image.secureUrl) + }, i++)); + } + if (image.type) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:image:type", + content: image.type + }, i++)); + } + if (image.width) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:image:width", + content: String(image.width) + }, i++)); + } + if (image.height) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:image:height", + content: String(image.height) + }, i++)); + } + if (image.alt) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:image:alt", + content: image.alt + }, i++)); + } + } + } + } + // OG videos + if (og.videos) { + for (const video of og.videos){ + if (typeof video === 'string') { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:video", + content: video + }, i++)); + } else { + if (video.url) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:video", + content: String(video.url) + }, i++)); + } + if (video.secureUrl) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:video:secure_url", + content: String(video.secureUrl) + }, i++)); + } + if (video.type) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:video:type", + content: video.type + }, i++)); + } + if (video.width) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:video:width", + content: String(video.width) + }, i++)); + } + if (video.height) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:video:height", + content: String(video.height) + }, i++)); + } + } + } + } + // OG audio + if (og.audio) { + for (const audio of og.audio){ + if (typeof audio === 'string') { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:audio", + content: audio + }, i++)); + } else { + if (audio.url) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:audio", + content: String(audio.url) + }, i++)); + } + if (audio.secureUrl) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:audio:secure_url", + content: String(audio.secureUrl) + }, i++)); + } + if (audio.type) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:audio:type", + content: audio.type + }, i++)); + } + } + } + } + // OG simple array properties + if (og.emails) { + for (const email of og.emails){ + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:email", + content: email + }, i++)); + } + } + if (og.phoneNumbers) { + for (const phone of og.phoneNumbers){ + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:phone_number", + content: phone + }, i++)); + } + } + if (og.faxNumbers) { + for (const fax of og.faxNumbers){ + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:fax_number", + content: fax + }, i++)); + } + } + if (og.alternateLocale) { + for (const locale of og.alternateLocale){ + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:locale:alternate", + content: locale + }, i++)); + } + } + // OG type-specific tags + if ('type' in og) { + const ogType = og.type; + switch(ogType){ + case 'website': + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:type", + content: "website" + }, i++)); + break; + case 'article': + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:type", + content: "article" + }, i++)); + if (og.publishedTime) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "article:published_time", + content: og.publishedTime.toString() + }, i++)); + } + if (og.modifiedTime) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "article:modified_time", + content: og.modifiedTime.toString() + }, i++)); + } + if (og.expirationTime) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "article:expiration_time", + content: og.expirationTime.toString() + }, i++)); + } + if (og.authors) { + for (const author of og.authors){ + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "article:author", + content: String(author) + }, i++)); + } + } + if (og.section) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "article:section", + content: og.section + }, i++)); + } + if (og.tags) { + for (const tag of og.tags){ + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "article:tag", + content: tag + }, i++)); + } + } + break; + case 'book': + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:type", + content: "book" + }, i++)); + if (og.isbn) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "book:isbn", + content: og.isbn + }, i++)); + } + if (og.releaseDate) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "book:release_date", + content: og.releaseDate + }, i++)); + } + if (og.authors) { + for (const author of og.authors){ + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "book:author", + content: String(author) + }, i++)); + } + } + if (og.tags) { + for (const tag of og.tags){ + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "book:tag", + content: tag + }, i++)); + } + } + break; + case 'profile': + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:type", + content: "profile" + }, i++)); + if (og.firstName) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "profile:first_name", + content: og.firstName + }, i++)); + } + if (og.lastName) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "profile:last_name", + content: og.lastName + }, i++)); + } + if (og.username) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "profile:username", + content: og.username + }, i++)); + } + if (og.gender) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "profile:gender", + content: og.gender + }, i++)); + } + break; + case 'music.song': + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:type", + content: "music.song" + }, i++)); + if (og.duration != null) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "music:duration", + content: og.duration.toString() + }, i++)); + } + if (og.albums) { + for (const album of og.albums){ + if (typeof album === 'string') { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "music:album", + content: album + }, i++)); + } else { + if (album.url) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "music:album", + content: String(album.url) + }, i++)); + } + if (album.disc != null) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "music:album:disc", + content: String(album.disc) + }, i++)); + } + if (album.track != null) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "music:album:track", + content: String(album.track) + }, i++)); + } + } + } + } + if (og.musicians) { + for (const musician of og.musicians){ + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "music:musician", + content: String(musician) + }, i++)); + } + } + break; + case 'music.album': + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:type", + content: "music.album" + }, i++)); + if (og.songs) { + for (const song of og.songs){ + if (typeof song === 'string') { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "music:song", + content: song + }, i++)); + } else { + if (song.url) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "music:song", + content: String(song.url) + }, i++)); + } + if (song.disc != null) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "music:song:disc", + content: String(song.disc) + }, i++)); + } + if (song.track != null) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "music:song:track", + content: String(song.track) + }, i++)); + } + } + } + } + if (og.musicians) { + for (const musician of og.musicians){ + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "music:musician", + content: String(musician) + }, i++)); + } + } + if (og.releaseDate) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "music:release_date", + content: og.releaseDate + }, i++)); + } + break; + case 'music.playlist': + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:type", + content: "music.playlist" + }, i++)); + if (og.songs) { + for (const song of og.songs){ + if (typeof song === 'string') { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "music:song", + content: song + }, i++)); + } else { + if (song.url) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "music:song", + content: String(song.url) + }, i++)); + } + if (song.disc != null) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "music:song:disc", + content: String(song.disc) + }, i++)); + } + if (song.track != null) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "music:song:track", + content: String(song.track) + }, i++)); + } + } + } + } + if (og.creators) { + for (const creator of og.creators){ + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "music:creator", + content: String(creator) + }, i++)); + } + } + break; + case 'music.radio_station': + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:type", + content: "music.radio_station" + }, i++)); + if (og.creators) { + for (const creator of og.creators){ + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "music:creator", + content: String(creator) + }, i++)); + } + } + break; + case 'video.movie': + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:type", + content: "video.movie" + }, i++)); + if (og.actors) { + for (const actor of og.actors){ + if (typeof actor === 'string') { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "video:actor", + content: actor + }, i++)); + } else { + if (actor.url) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "video:actor", + content: String(actor.url) + }, i++)); + } + if (actor.role) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "video:actor:role", + content: actor.role + }, i++)); + } + } + } + } + if (og.directors) { + for (const director of og.directors){ + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "video:director", + content: String(director) + }, i++)); + } + } + if (og.writers) { + for (const writer of og.writers){ + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "video:writer", + content: String(writer) + }, i++)); + } + } + if (og.duration != null) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "video:duration", + content: String(og.duration) + }, i++)); + } + if (og.releaseDate) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "video:release_date", + content: og.releaseDate + }, i++)); + } + if (og.tags) { + for (const tag of og.tags){ + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "video:tag", + content: tag + }, i++)); + } + } + break; + case 'video.episode': + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:type", + content: "video.episode" + }, i++)); + if (og.actors) { + for (const actor of og.actors){ + if (typeof actor === 'string') { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "video:actor", + content: actor + }, i++)); + } else { + if (actor.url) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "video:actor", + content: String(actor.url) + }, i++)); + } + if (actor.role) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "video:actor:role", + content: actor.role + }, i++)); + } + } + } + } + if (og.directors) { + for (const director of og.directors){ + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "video:director", + content: String(director) + }, i++)); + } + } + if (og.writers) { + for (const writer of og.writers){ + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "video:writer", + content: String(writer) + }, i++)); + } + } + if (og.duration != null) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "video:duration", + content: String(og.duration) + }, i++)); + } + if (og.releaseDate) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "video:release_date", + content: og.releaseDate + }, i++)); + } + if (og.tags) { + for (const tag of og.tags){ + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "video:tag", + content: tag + }, i++)); + } + } + if (og.series) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "video:series", + content: String(og.series) + }, i++)); + } + break; + case 'video.tv_show': + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:type", + content: "video.tv_show" + }, i++)); + break; + case 'video.other': + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "og:type", + content: "video.other" + }, i++)); + break; + default: + const _exhaustiveCheck = ogType; + throw Object.defineProperty(new Error(`Invalid OpenGraph type: ${_exhaustiveCheck}`), "__NEXT_ERROR_CODE", { + value: "E237", + enumerable: false, + configurable: true + }); + } + } + } + // --- Twitter --- + if (metadata.twitter) { + var _tw_title; + const tw = metadata.twitter; + const { card } = tw; + if (card) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "twitter:card", + content: card + }, i++)); + } + if (tw.site) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "twitter:site", + content: tw.site + }, i++)); + } + if (tw.siteId) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "twitter:site:id", + content: tw.siteId + }, i++)); + } + if (tw.creator) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "twitter:creator", + content: tw.creator + }, i++)); + } + if (tw.creatorId) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "twitter:creator:id", + content: tw.creatorId + }, i++)); + } + if ((_tw_title = tw.title) == null ? void 0 : _tw_title.absolute) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "twitter:title", + content: tw.title.absolute + }, i++)); + } + if (tw.description) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "twitter:description", + content: tw.description + }, i++)); + } + // Twitter images + if (tw.images) { + for (const image of tw.images){ + if (typeof image === 'string') { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "twitter:image", + content: image + }, i++)); + } else { + if (image.url) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "twitter:image", + content: String(image.url) + }, i++)); + } + if (image.alt) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "twitter:image:alt", + content: image.alt + }, i++)); + } + if (image.secureUrl) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "twitter:image:secure_url", + content: String(image.secureUrl) + }, i++)); + } + if (image.type) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "twitter:image:type", + content: image.type + }, i++)); + } + if (image.width) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "twitter:image:width", + content: String(image.width) + }, i++)); + } + if (image.height) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "twitter:image:height", + content: String(image.height) + }, i++)); + } + } + } + } + // Twitter player cards + if (card === 'player') { + for (const player of tw.players){ + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "twitter:player", + content: player.playerUrl.toString() + }, i++)); + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "twitter:player:stream", + content: player.streamUrl.toString() + }, i++)); + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "twitter:player:width", + content: String(player.width) + }, i++)); + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "twitter:player:height", + content: String(player.height) + }, i++)); + } + } + // Twitter app cards + if (card === 'app') { + const { app } = tw; + for (const platform of [ + 'iphone', + 'ipad', + 'googleplay' + ]){ + var _app_url; + if (app.name) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: `twitter:app:name:${platform}`, + content: app.name + }, i++)); + } + if (app.id[platform]) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: `twitter:app:id:${platform}`, + content: String(app.id[platform]) + }, i++)); + } + if ((_app_url = app.url) == null ? void 0 : _app_url[platform]) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: `twitter:app:url:${platform}`, + content: app.url[platform].toString() + }, i++)); + } + } + } + } + // --- App Links --- + if (metadata.appLinks) { + const appLinks = metadata.appLinks; + // iOS / iPhone / iPad (AppLinksApple: url, app_store_id, app_name) + if (appLinks.ios) { + for (const item of appLinks.ios){ + if (item.url) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "al:ios:url", + content: String(item.url) + }, i++)); + } + if (item.app_store_id) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "al:ios:app_store_id", + content: String(item.app_store_id) + }, i++)); + } + if (item.app_name) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "al:ios:app_name", + content: item.app_name + }, i++)); + } + } + } + if (appLinks.iphone) { + for (const item of appLinks.iphone){ + if (item.url) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "al:iphone:url", + content: String(item.url) + }, i++)); + } + if (item.app_store_id) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "al:iphone:app_store_id", + content: String(item.app_store_id) + }, i++)); + } + if (item.app_name) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "al:iphone:app_name", + content: item.app_name + }, i++)); + } + } + } + if (appLinks.ipad) { + for (const item of appLinks.ipad){ + if (item.url) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "al:ipad:url", + content: String(item.url) + }, i++)); + } + if (item.app_store_id) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "al:ipad:app_store_id", + content: String(item.app_store_id) + }, i++)); + } + if (item.app_name) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "al:ipad:app_name", + content: item.app_name + }, i++)); + } + } + } + // Android (AppLinksAndroid: package, url, class, app_name) + if (appLinks.android) { + for (const item of appLinks.android){ + if (item.package) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "al:android:package", + content: item.package + }, i++)); + } + if (item.url) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "al:android:url", + content: String(item.url) + }, i++)); + } + if (item.class) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "al:android:class", + content: item.class + }, i++)); + } + if (item.app_name) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "al:android:app_name", + content: item.app_name + }, i++)); + } + } + } + // Windows Phone (AppLinksWindows: url, app_id, app_name) + if (appLinks.windows_phone) { + for (const item of appLinks.windows_phone){ + if (item.url) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "al:windows_phone:url", + content: String(item.url) + }, i++)); + } + if (item.app_id) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "al:windows_phone:app_id", + content: item.app_id + }, i++)); + } + if (item.app_name) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "al:windows_phone:app_name", + content: item.app_name + }, i++)); + } + } + } + // Windows (AppLinksWindows: url, app_id, app_name) + if (appLinks.windows) { + for (const item of appLinks.windows){ + if (item.url) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "al:windows:url", + content: String(item.url) + }, i++)); + } + if (item.app_id) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "al:windows:app_id", + content: item.app_id + }, i++)); + } + if (item.app_name) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "al:windows:app_name", + content: item.app_name + }, i++)); + } + } + } + // Windows Universal (AppLinksWindows: url, app_id, app_name) + if (appLinks.windows_universal) { + for (const item of appLinks.windows_universal){ + if (item.url) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "al:windows_universal:url", + content: String(item.url) + }, i++)); + } + if (item.app_id) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "al:windows_universal:app_id", + content: item.app_id + }, i++)); + } + if (item.app_name) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "al:windows_universal:app_name", + content: item.app_name + }, i++)); + } + } + } + // Web (AppLinksWeb: url, should_fallback) + if (appLinks.web) { + for (const item of appLinks.web){ + if (item.url) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "al:web:url", + content: String(item.url) + }, i++)); + } + if (item.should_fallback != null) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + property: "al:web:should_fallback", + content: String(item.should_fallback) + }, i++)); + } + } + } + } + // --- Icons --- + if (metadata.icons) { + const { shortcut, icon, apple, other } = metadata.icons; + const hasIcon = Boolean((shortcut == null ? void 0 : shortcut.length) || (icon == null ? void 0 : icon.length) || (apple == null ? void 0 : apple.length) || (other == null ? void 0 : other.length)); + if (shortcut) { + for (const ic of shortcut){ + const { url, rel, ...props } = ic; + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("link", { + rel: rel || 'shortcut icon', + href: url.toString(), + ...props + }, i++)); + } + } + if (icon) { + for (const ic of icon){ + const { url, rel, ...props } = ic; + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("link", { + rel: rel || 'icon', + href: url.toString(), + ...props + }, i++)); + } + } + if (apple) { + for (const ic of apple){ + const { url, rel, ...props } = ic; + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("link", { + rel: rel || 'apple-touch-icon', + href: url.toString(), + ...props + }, i++)); + } + } + if (other) { + for (const ic of other){ + const { url, rel, ...props } = ic; + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("link", { + rel: rel || 'icon', + href: url.toString(), + ...props + }, i++)); + } + } + if (hasIcon) { + tags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)(_iconmark.IconMark, {}, i++)); + } + } + return tags; +} + +//# sourceMappingURL=metadata.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/metadata/resolve-metadata.js b/build/node_modules/next/dist/lib/metadata/resolve-metadata.js new file mode 100644 index 0000000..90e3110 --- /dev/null +++ b/build/node_modules/next/dist/lib/metadata/resolve-metadata.js @@ -0,0 +1,884 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + accumulateMetadata: null, + accumulateViewport: null, + resolveMetadata: null, + resolveViewport: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + accumulateMetadata: function() { + return accumulateMetadata; + }, + accumulateViewport: function() { + return accumulateViewport; + }, + resolveMetadata: function() { + return resolveMetadata; + }, + resolveViewport: function() { + return resolveViewport; + } +}); +const _getsegmentparam = require("../../shared/lib/router/utils/get-segment-param"); +const _workasyncstorageexternal = require("../../server/app-render/work-async-storage.external"); +const _invarianterror = require("../../shared/lib/invariant-error"); +require("server-only"); +const _react = require("react"); +const _defaultmetadata = require("./default-metadata"); +const _resolveopengraph = require("./resolvers/resolve-opengraph"); +const _resolvetitle = require("./resolvers/resolve-title"); +const _utils = require("./generate/utils"); +const _appdirmodule = require("../../server/lib/app-dir-module"); +const _resolvebasics = require("./resolvers/resolve-basics"); +const _resolveicons = require("./resolvers/resolve-icons"); +const _tracer = require("../../server/lib/trace/tracer"); +const _constants = require("../../server/lib/trace/constants"); +const _segment = require("../../shared/lib/segment"); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("../../build/output/log")); +const _params = require("../../server/request/params"); +const _clientandserverreferences = require("../client-and-server-references"); +const _lazyresult = require("../../server/lib/lazy-result"); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +function isFavicon(icon) { + if (!icon) { + return false; + } + // turbopack appends a hash to all images + return (icon.url === '/favicon.ico' || icon.url.toString().startsWith('/favicon.ico?')) && icon.type === 'image/x-icon'; +} +function convertUrlsToStrings(input) { + if (input instanceof URL) { + return input.toString(); + } else if (Array.isArray(input)) { + return input.map((item)=>convertUrlsToStrings(item)); + } else if (input && typeof input === 'object') { + const result = {}; + for (const [key, value] of Object.entries(input)){ + result[key] = convertUrlsToStrings(value); + } + return result; + } + return input; +} +function normalizeMetadataBase(metadataBase) { + if (typeof metadataBase === 'string') { + try { + metadataBase = new URL(metadataBase); + } catch { + throw Object.defineProperty(new Error(`metadataBase is not a valid URL: ${metadataBase}`), "__NEXT_ERROR_CODE", { + value: "E850", + enumerable: false, + configurable: true + }); + } + } + return metadataBase; +} +async function mergeStaticMetadata(metadataBase, source, target, staticFilesMetadata, metadataContext, titleTemplates, leafSegmentStaticIcons, pathname) { + var _source_twitter, _source_openGraph; + if (!staticFilesMetadata) return target; + const { icon, apple, openGraph, twitter, manifest } = staticFilesMetadata; + // Keep updating the static icons in the most leaf node + if (icon) { + leafSegmentStaticIcons.icon = icon; + } + if (apple) { + leafSegmentStaticIcons.apple = apple; + } + // file based metadata is specified and current level metadata twitter.images is not specified + if (twitter && !(source == null ? void 0 : (_source_twitter = source.twitter) == null ? void 0 : _source_twitter.hasOwnProperty('images'))) { + const resolvedTwitter = (0, _resolveopengraph.resolveTwitter)({ + ...target.twitter, + images: twitter + }, metadataBase, { + ...metadataContext, + isStaticMetadataRouteFile: true + }, titleTemplates.twitter); + target.twitter = convertUrlsToStrings(resolvedTwitter); + } + // file based metadata is specified and current level metadata openGraph.images is not specified + if (openGraph && !(source == null ? void 0 : (_source_openGraph = source.openGraph) == null ? void 0 : _source_openGraph.hasOwnProperty('images'))) { + const resolvedOpenGraph = await (0, _resolveopengraph.resolveOpenGraph)({ + ...target.openGraph, + images: openGraph + }, metadataBase, pathname, { + ...metadataContext, + isStaticMetadataRouteFile: true + }, titleTemplates.openGraph); + target.openGraph = convertUrlsToStrings(resolvedOpenGraph); + } + if (manifest) { + target.manifest = manifest; + } + return target; +} +/** + * Merges the given metadata with the resolved metadata. Returns a new object. + */ async function mergeMetadata(route, pathname, { metadata, resolvedMetadata, staticFilesMetadata, titleTemplates, metadataContext, buildState, leafSegmentStaticIcons }) { + const newResolvedMetadata = structuredClone(resolvedMetadata); + const metadataBase = normalizeMetadataBase((metadata == null ? void 0 : metadata.metadataBase) !== undefined ? metadata.metadataBase : resolvedMetadata.metadataBase); + for(const key_ in metadata){ + const key = key_; + switch(key){ + case 'title': + { + newResolvedMetadata.title = (0, _resolvetitle.resolveTitle)(metadata.title, titleTemplates.title); + break; + } + case 'alternates': + { + newResolvedMetadata.alternates = convertUrlsToStrings(await (0, _resolvebasics.resolveAlternates)(metadata.alternates, metadataBase, pathname, metadataContext)); + break; + } + case 'openGraph': + { + newResolvedMetadata.openGraph = convertUrlsToStrings(await (0, _resolveopengraph.resolveOpenGraph)(metadata.openGraph, metadataBase, pathname, metadataContext, titleTemplates.openGraph)); + break; + } + case 'twitter': + { + newResolvedMetadata.twitter = convertUrlsToStrings((0, _resolveopengraph.resolveTwitter)(metadata.twitter, metadataBase, metadataContext, titleTemplates.twitter)); + break; + } + case 'facebook': + newResolvedMetadata.facebook = (0, _resolvebasics.resolveFacebook)(metadata.facebook); + break; + case 'verification': + newResolvedMetadata.verification = (0, _resolvebasics.resolveVerification)(metadata.verification); + break; + case 'icons': + { + newResolvedMetadata.icons = convertUrlsToStrings((0, _resolveicons.resolveIcons)(metadata.icons)); + break; + } + case 'appleWebApp': + newResolvedMetadata.appleWebApp = (0, _resolvebasics.resolveAppleWebApp)(metadata.appleWebApp); + break; + case 'appLinks': + newResolvedMetadata.appLinks = convertUrlsToStrings((0, _resolvebasics.resolveAppLinks)(metadata.appLinks)); + break; + case 'robots': + { + newResolvedMetadata.robots = (0, _resolvebasics.resolveRobots)(metadata.robots); + break; + } + case 'archives': + case 'assets': + case 'bookmarks': + case 'keywords': + { + newResolvedMetadata[key] = (0, _utils.resolveAsArrayOrUndefined)(metadata[key]); + break; + } + case 'authors': + { + newResolvedMetadata[key] = convertUrlsToStrings((0, _utils.resolveAsArrayOrUndefined)(metadata.authors)); + break; + } + case 'itunes': + { + newResolvedMetadata[key] = await (0, _resolvebasics.resolveItunes)(metadata.itunes, metadataBase, pathname, metadataContext); + break; + } + case 'pagination': + { + newResolvedMetadata.pagination = await (0, _resolvebasics.resolvePagination)(metadata.pagination, metadataBase, pathname, metadataContext); + break; + } + // directly assign fields that fallback to null + case 'abstract': + newResolvedMetadata[key] = metadata[key] ?? null; + break; + case 'applicationName': + newResolvedMetadata[key] = metadata[key] ?? null; + break; + case 'description': + newResolvedMetadata[key] = metadata[key] ?? null; + break; + case 'generator': + newResolvedMetadata[key] = metadata[key] ?? null; + break; + case 'creator': + newResolvedMetadata[key] = metadata[key] ?? null; + break; + case 'publisher': + newResolvedMetadata[key] = metadata[key] ?? null; + break; + case 'category': + newResolvedMetadata[key] = metadata[key] ?? null; + break; + case 'classification': + newResolvedMetadata[key] = metadata[key] ?? null; + break; + case 'referrer': + newResolvedMetadata[key] = metadata[key] ?? null; + break; + case 'formatDetection': + newResolvedMetadata[key] = metadata[key] ?? null; + break; + case 'manifest': + newResolvedMetadata[key] = convertUrlsToStrings(metadata[key]) ?? null; + break; + case 'pinterest': + newResolvedMetadata[key] = convertUrlsToStrings(metadata[key]) ?? null; + break; + case 'other': + newResolvedMetadata.other = Object.assign({}, newResolvedMetadata.other, metadata.other); + if (metadata.other) { + if ('apple-touch-fullscreen' in metadata.other) { + buildState.warnings.add(`Use appleWebApp instead\nRead more: https://nextjs.org/docs/app/api-reference/functions/generate-metadata`); + } + if ('apple-touch-icon-precomposed' in metadata.other) { + buildState.warnings.add(`Use icons.apple instead\nRead more: https://nextjs.org/docs/app/api-reference/functions/generate-metadata`); + } + } + break; + case 'metadataBase': + newResolvedMetadata.metadataBase = metadataBase ? metadataBase.toString() : null; + break; + case 'apple-touch-fullscreen': + { + buildState.warnings.add(`Use appleWebApp instead\nRead more: https://nextjs.org/docs/app/api-reference/functions/generate-metadata`); + break; + } + case 'apple-touch-icon-precomposed': + { + buildState.warnings.add(`Use icons.apple instead\nRead more: https://nextjs.org/docs/app/api-reference/functions/generate-metadata`); + break; + } + case 'themeColor': + case 'colorScheme': + case 'viewport': + if (metadata[key] != null) { + buildState.warnings.add(`Unsupported metadata ${key} is configured in metadata export in ${route}. Please move it to viewport export instead.\nRead more: https://nextjs.org/docs/app/api-reference/functions/generate-viewport`); + } + break; + default: + { + key; + } + } + } + return mergeStaticMetadata(metadataBase, metadata, newResolvedMetadata, staticFilesMetadata, metadataContext, titleTemplates, leafSegmentStaticIcons, pathname); +} +/** + * Merges the given viewport with the resolved viewport. Returns a new object. + */ function mergeViewport({ resolvedViewport, viewport }) { + const newResolvedViewport = structuredClone(resolvedViewport); + if (viewport) { + for(const key_ in viewport){ + const key = key_; + switch(key){ + case 'themeColor': + { + newResolvedViewport.themeColor = (0, _resolvebasics.resolveThemeColor)(viewport.themeColor); + break; + } + case 'colorScheme': + newResolvedViewport.colorScheme = viewport.colorScheme || null; + break; + case 'width': + case 'height': + case 'initialScale': + case 'minimumScale': + case 'maximumScale': + case 'userScalable': + case 'viewportFit': + case 'interactiveWidget': + // always override the target with the source + // @ts-ignore viewport properties + newResolvedViewport[key] = viewport[key]; + break; + default: + key; + } + } + } + return newResolvedViewport; +} +function getDefinedViewport(mod, props, tracingProps) { + if (typeof mod.generateViewport === 'function') { + const { route } = tracingProps; + const segmentProps = createSegmentProps(mod.generateViewport, props); + return Object.assign((parent)=>(0, _tracer.getTracer)().trace(_constants.ResolveMetadataSpan.generateViewport, { + spanName: `generateViewport ${route}`, + attributes: { + 'next.page': route + } + }, ()=>mod.generateViewport(segmentProps, parent)), { + $$original: mod.generateViewport + }); + } + return mod.viewport || null; +} +function getDefinedMetadata(mod, props, tracingProps) { + if (typeof mod.generateMetadata === 'function') { + const { route } = tracingProps; + const segmentProps = createSegmentProps(mod.generateMetadata, props); + return Object.assign((parent)=>(0, _tracer.getTracer)().trace(_constants.ResolveMetadataSpan.generateMetadata, { + spanName: `generateMetadata ${route}`, + attributes: { + 'next.page': route + } + }, ()=>mod.generateMetadata(segmentProps, parent)), { + $$original: mod.generateMetadata + }); + } + return mod.metadata || null; +} +/** + * If `fn` is a `'use cache'` function, we add special markers to the props, + * that the cache wrapper reads and removes, before passing the props to the + * user function. + */ function createSegmentProps(fn, props) { + return (0, _clientandserverreferences.isUseCacheFunction)(fn) ? 'searchParams' in props ? { + ...props, + $$isPage: true + } : { + ...props, + $$isLayout: true + } : props; +} +async function collectStaticImagesFiles(metadata, props, type) { + if (!(metadata == null ? void 0 : metadata[type])) return undefined; + const iconPromises = metadata[type].map(async (imageModule)=>await imageModule(props)); + return (iconPromises == null ? void 0 : iconPromises.length) > 0 ? (await Promise.all(iconPromises)).flat() : undefined; +} +async function resolveStaticMetadata(modules, props) { + const { metadata } = modules; + if (!metadata) return null; + const [icon, apple, openGraph, twitter] = await Promise.all([ + collectStaticImagesFiles(metadata, props, 'icon'), + collectStaticImagesFiles(metadata, props, 'apple'), + collectStaticImagesFiles(metadata, props, 'openGraph'), + collectStaticImagesFiles(metadata, props, 'twitter') + ]); + const staticMetadata = { + icon, + apple, + openGraph, + twitter, + manifest: metadata.manifest + }; + return staticMetadata; +} +// [layout.metadata, static files metadata] -> ... -> [page.metadata, static files metadata] +async function collectMetadata({ tree, metadataItems, errorMetadataItem, props, route, errorConvention }) { + let mod; + let modType; + const hasErrorConventionComponent = Boolean(errorConvention && tree[2][errorConvention]); + if (errorConvention) { + mod = await (0, _appdirmodule.getComponentTypeModule)(tree, 'layout'); + modType = errorConvention; + } else { + const { mod: layoutOrPageMod, modType: layoutOrPageModType } = await (0, _appdirmodule.getLayoutOrPageModule)(tree); + mod = layoutOrPageMod; + modType = layoutOrPageModType; + } + if (modType) { + route += `/${modType}`; + } + const staticFilesMetadata = await resolveStaticMetadata(tree[2], props); + const metadataExport = mod ? getDefinedMetadata(mod, props, { + route + }) : null; + metadataItems.push([ + metadataExport, + staticFilesMetadata + ]); + if (hasErrorConventionComponent && errorConvention) { + const errorMod = await (0, _appdirmodule.getComponentTypeModule)(tree, errorConvention); + const errorMetadataExport = errorMod ? getDefinedMetadata(errorMod, props, { + route + }) : null; + errorMetadataItem[0] = errorMetadataExport; + errorMetadataItem[1] = staticFilesMetadata; + } +} +// [layout.metadata, static files metadata] -> ... -> [page.metadata, static files metadata] +async function collectViewport({ tree, viewportItems, errorViewportItemRef, props, route, errorConvention }) { + let mod; + let modType; + const hasErrorConventionComponent = Boolean(errorConvention && tree[2][errorConvention]); + if (errorConvention) { + mod = await (0, _appdirmodule.getComponentTypeModule)(tree, 'layout'); + modType = errorConvention; + } else { + const { mod: layoutOrPageMod, modType: layoutOrPageModType } = await (0, _appdirmodule.getLayoutOrPageModule)(tree); + mod = layoutOrPageMod; + modType = layoutOrPageModType; + } + if (modType) { + route += `/${modType}`; + } + const viewportExport = mod ? getDefinedViewport(mod, props, { + route + }) : null; + viewportItems.push(viewportExport); + if (hasErrorConventionComponent && errorConvention) { + const errorMod = await (0, _appdirmodule.getComponentTypeModule)(tree, errorConvention); + const errorViewportExport = errorMod ? getDefinedViewport(errorMod, props, { + route + }) : null; + errorViewportItemRef.current = errorViewportExport; + } +} +const resolveMetadataItems = (0, _react.cache)(async function(tree, searchParams, errorConvention, interpolatedParams, isRuntimePrefetchable) { + const parentParams = {}; + const metadataItems = []; + const errorMetadataItem = [ + null, + null + ]; + const treePrefix = undefined; + return resolveMetadataItemsImpl(metadataItems, tree, treePrefix, parentParams, null, searchParams, errorConvention, errorMetadataItem, interpolatedParams, isRuntimePrefetchable); +}); +async function resolveMetadataItemsImpl(metadataItems, tree, /** Provided tree can be nested subtree, this argument says what is the path of such subtree */ treePrefix, parentParams, parentOptionalCatchAllParamName, searchParams, errorConvention, errorMetadataItem, interpolatedParams, isRuntimePrefetchable) { + const [segment, parallelRoutes, { page }] = tree; + const currentTreePrefix = treePrefix && treePrefix.length ? [ + ...treePrefix, + segment + ] : [ + segment + ]; + const isPage = typeof page !== 'undefined'; + // Handle dynamic segment params. + let currentParams = parentParams; + const segmentParam = (0, _getsegmentparam.getSegmentParam)(segment); + if (segmentParam) { + const value = interpolatedParams[segmentParam.paramName]; + if (value !== null && value !== undefined) { + currentParams = { + ...parentParams, + [segmentParam.paramName]: value + }; + } + } + // Track optional catch-all params with no value (see comment in + // create-component-tree.tsx for full explanation). + const optionalCatchAllParamName = (segmentParam == null ? void 0 : segmentParam.paramType) === 'optional-catchall' && (interpolatedParams[segmentParam.paramName] === null || interpolatedParams[segmentParam.paramName] === undefined) ? segmentParam.paramName : parentOptionalCatchAllParamName; + const params = (0, _params.createServerParamsForMetadata)(currentParams, optionalCatchAllParamName, isRuntimePrefetchable); + const props = isPage ? { + params, + searchParams + } : { + params + }; + await collectMetadata({ + tree, + metadataItems, + errorMetadataItem, + errorConvention, + props, + route: currentTreePrefix// __PAGE__ shouldn't be shown in a route + .filter((s)=>s !== _segment.PAGE_SEGMENT_KEY).join('/') + }); + for(const key in parallelRoutes){ + const childTree = parallelRoutes[key]; + await resolveMetadataItemsImpl(metadataItems, childTree, currentTreePrefix, currentParams, optionalCatchAllParamName, searchParams, errorConvention, errorMetadataItem, interpolatedParams, isRuntimePrefetchable); + } + if (Object.keys(parallelRoutes).length === 0 && errorConvention) { + // If there are no parallel routes, place error metadata as the last item. + // e.g. layout -> layout -> not-found + metadataItems.push(errorMetadataItem); + } + return metadataItems; +} +const resolveViewportItems = (0, _react.cache)(async function(tree, searchParams, errorConvention, interpolatedParams, isRuntimePrefetchable) { + const parentParams = {}; + const viewportItems = []; + const errorViewportItemRef = { + current: null + }; + const treePrefix = undefined; + return resolveViewportItemsImpl(viewportItems, tree, treePrefix, parentParams, null, searchParams, errorConvention, errorViewportItemRef, interpolatedParams, isRuntimePrefetchable); +}); +async function resolveViewportItemsImpl(viewportItems, tree, /** Provided tree can be nested subtree, this argument says what is the path of such subtree */ treePrefix, parentParams, parentOptionalCatchAllParamName, searchParams, errorConvention, errorViewportItemRef, interpolatedParams, isRuntimePrefetchable) { + const [segment, parallelRoutes, { page }] = tree; + const currentTreePrefix = treePrefix && treePrefix.length ? [ + ...treePrefix, + segment + ] : [ + segment + ]; + const isPage = typeof page !== 'undefined'; + // Handle dynamic segment params. + let currentParams = parentParams; + const segmentParam = (0, _getsegmentparam.getSegmentParam)(segment); + if (segmentParam) { + const value = interpolatedParams[segmentParam.paramName]; + if (value !== null && value !== undefined) { + currentParams = { + ...parentParams, + [segmentParam.paramName]: value + }; + } + } + // Track optional catch-all params with no value (see comment in + // create-component-tree.tsx for full explanation). + const optionalCatchAllParamName = (segmentParam == null ? void 0 : segmentParam.paramType) === 'optional-catchall' && (interpolatedParams[segmentParam.paramName] === null || interpolatedParams[segmentParam.paramName] === undefined) ? segmentParam.paramName : parentOptionalCatchAllParamName; + const params = (0, _params.createServerParamsForMetadata)(currentParams, optionalCatchAllParamName, isRuntimePrefetchable); + let layerProps; + if (isPage) { + layerProps = { + params, + searchParams + }; + } else { + layerProps = { + params + }; + } + await collectViewport({ + tree, + viewportItems, + errorViewportItemRef, + errorConvention, + props: layerProps, + route: currentTreePrefix// __PAGE__ shouldn't be shown in a route + .filter((s)=>s !== _segment.PAGE_SEGMENT_KEY).join('/') + }); + for(const key in parallelRoutes){ + const childTree = parallelRoutes[key]; + await resolveViewportItemsImpl(viewportItems, childTree, currentTreePrefix, currentParams, optionalCatchAllParamName, searchParams, errorConvention, errorViewportItemRef, interpolatedParams, isRuntimePrefetchable); + } + if (Object.keys(parallelRoutes).length === 0 && errorConvention) { + // If there are no parallel routes, place error metadata as the last item. + // e.g. layout -> layout -> not-found + viewportItems.push(errorViewportItemRef.current); + } + return viewportItems; +} +const isTitleTruthy = (title)=>!!(title == null ? void 0 : title.absolute); +const hasTitle = (metadata)=>isTitleTruthy(metadata == null ? void 0 : metadata.title); +function inheritFromMetadata(target, metadata) { + if (target) { + if (!hasTitle(target) && hasTitle(metadata)) { + target.title = metadata.title; + } + if (!target.description && metadata.description) { + target.description = metadata.description; + } + } +} +// eslint-disable-next-line @typescript-eslint/no-unused-vars +const commonOgKeys = [ + 'title', + 'description', + 'images' +]; +function postProcessMetadata(metadata, favicon, titleTemplates, metadataContext) { + const { openGraph, twitter } = metadata; + if (openGraph) { + // If there's openGraph information but not configured in twitter, + // inherit them from openGraph metadata. + let autoFillProps = {}; + const hasTwTitle = hasTitle(twitter); + const hasTwDescription = twitter == null ? void 0 : twitter.description; + const hasTwImages = Boolean((twitter == null ? void 0 : twitter.hasOwnProperty('images')) && twitter.images); + if (!hasTwTitle) { + if (isTitleTruthy(openGraph.title)) { + autoFillProps.title = openGraph.title; + } else if (metadata.title && isTitleTruthy(metadata.title)) { + autoFillProps.title = metadata.title; + } + } + if (!hasTwDescription) autoFillProps.description = openGraph.description || metadata.description || undefined; + if (!hasTwImages) autoFillProps.images = openGraph.images; + if (Object.keys(autoFillProps).length > 0) { + const partialTwitter = (0, _resolveopengraph.resolveTwitter)(autoFillProps, normalizeMetadataBase(metadata.metadataBase), metadataContext, titleTemplates.twitter); + if (metadata.twitter) { + metadata.twitter = Object.assign({}, metadata.twitter, { + ...!hasTwTitle && { + title: partialTwitter == null ? void 0 : partialTwitter.title + }, + ...!hasTwDescription && { + description: partialTwitter == null ? void 0 : partialTwitter.description + }, + ...!hasTwImages && { + images: partialTwitter == null ? void 0 : partialTwitter.images + } + }); + } else { + metadata.twitter = convertUrlsToStrings(partialTwitter); + } + } + } + // If there's no title and description configured in openGraph or twitter, + // use the title and description from metadata. + inheritFromMetadata(openGraph, metadata); + inheritFromMetadata(twitter, metadata); + if (favicon) { + if (!metadata.icons) { + metadata.icons = { + icon: [], + apple: [] + }; + } + metadata.icons.icon.unshift(favicon); + } + return metadata; +} +function prerenderMetadata(metadataItems) { + // If the index is a function then it is a resolver and the next slot + // is the corresponding result. If the index is not a function it is the result + // itself. + const resolversAndResults = []; + for(let i = 0; i < metadataItems.length; i++){ + const metadataExport = metadataItems[i][0]; + getResult(resolversAndResults, metadataExport); + } + return resolversAndResults; +} +function prerenderViewport(viewportItems) { + // If the index is a function then it is a resolver and the next slot + // is the corresponding result. If the index is not a function it is the result + // itself. + const resolversAndResults = []; + for(let i = 0; i < viewportItems.length; i++){ + const viewportExport = viewportItems[i]; + getResult(resolversAndResults, viewportExport); + } + return resolversAndResults; +} +const noop = ()=>{}; +function getResult(resolversAndResults, exportForResult) { + if (typeof exportForResult === 'function') { + // If the function is a 'use cache' function that uses the parent data as + // the second argument, we don't want to eagerly execute it during + // metadata/viewport pre-rendering, as the parent data might also be + // computed from another 'use cache' function. To ensure that the hanging + // input abort signal handling works in this case (i.e. the depending + // function waits for the cached input to resolve while encoding its args), + // they must be called sequentially. This can be accomplished by wrapping + // the call in a lazy promise, so that the original function is only called + // when the result is actually awaited. + const useCacheFunctionInfo = (0, _clientandserverreferences.getUseCacheFunctionInfo)(exportForResult.$$original); + if (useCacheFunctionInfo && useCacheFunctionInfo.usedArgs[1]) { + const promise = new Promise((resolve)=>resolversAndResults.push(resolve)); + resolversAndResults.push((0, _lazyresult.createLazyResult)(async ()=>exportForResult(promise))); + } else { + let result; + if (useCacheFunctionInfo) { + resolversAndResults.push(noop); + // @ts-expect-error We intentionally omit the parent argument, because + // we know from the check above that the 'use cache' function does not + // use it. + result = exportForResult(); + } else { + result = exportForResult(new Promise((resolve)=>resolversAndResults.push(resolve))); + } + resolversAndResults.push(result); + if (result instanceof Promise) { + // since we eager execute generateMetadata and + // they can reject at anytime we need to ensure + // we attach the catch handler right away to + // prevent unhandled rejections crashing the process + result.catch((err)=>{ + return { + __nextError: err + }; + }); + } + } + } else if (typeof exportForResult === 'object') { + resolversAndResults.push(exportForResult); + } else { + resolversAndResults.push(null); + } +} +function freezeInDev(obj) { + if (process.env.NODE_ENV === 'development') { + return require('../../shared/lib/deep-freeze').deepFreeze(obj); + } + return obj; +} +async function accumulateMetadata(route, metadataItems, pathname, metadataContext) { + let resolvedMetadata = (0, _defaultmetadata.createDefaultMetadata)(); + let titleTemplates = { + title: null, + twitter: null, + openGraph: null + }; + const buildState = { + warnings: new Set() + }; + let favicon; + // Collect the static icons in the most leaf node, + // since we don't collect all the static metadata icons in the parent segments. + const leafSegmentStaticIcons = { + icon: [], + apple: [] + }; + const resolversAndResults = prerenderMetadata(metadataItems); + let resultIndex = 0; + for(let i = 0; i < metadataItems.length; i++){ + var _staticFilesMetadata_icon; + const staticFilesMetadata = metadataItems[i][1]; + // Treat favicon as special case, it should be the first icon in the list + // i <= 1 represents root layout, and if current page is also at root + if (i <= 1 && isFavicon(staticFilesMetadata == null ? void 0 : (_staticFilesMetadata_icon = staticFilesMetadata.icon) == null ? void 0 : _staticFilesMetadata_icon[0])) { + var _staticFilesMetadata_icon1; + const iconMod = staticFilesMetadata == null ? void 0 : (_staticFilesMetadata_icon1 = staticFilesMetadata.icon) == null ? void 0 : _staticFilesMetadata_icon1.shift(); + if (i === 0) favicon = iconMod; + } + let pendingMetadata = resolversAndResults[resultIndex++]; + if (typeof pendingMetadata === 'function') { + // This metadata item had a `generateMetadata` and + // we need to provide the currently resolved metadata + // to it before we continue; + const resolveParentMetadata = pendingMetadata; + // we know that the next item is a result if this item + // was a resolver + pendingMetadata = resolversAndResults[resultIndex++]; + resolveParentMetadata(freezeInDev(resolvedMetadata)); + } + // Otherwise the item was either null or a static export + let metadata; + if (isPromiseLike(pendingMetadata)) { + metadata = await pendingMetadata; + } else { + metadata = pendingMetadata; + } + resolvedMetadata = await mergeMetadata(route, pathname, { + resolvedMetadata, + metadata, + metadataContext, + staticFilesMetadata, + titleTemplates, + buildState, + leafSegmentStaticIcons + }); + // If the layout is the same layer with page, skip the leaf layout and leaf page + // The leaf layout and page are the last two items + if (i < metadataItems.length - 2) { + var _resolvedMetadata_title, _resolvedMetadata_openGraph, _resolvedMetadata_twitter; + titleTemplates = { + title: ((_resolvedMetadata_title = resolvedMetadata.title) == null ? void 0 : _resolvedMetadata_title.template) || null, + openGraph: ((_resolvedMetadata_openGraph = resolvedMetadata.openGraph) == null ? void 0 : _resolvedMetadata_openGraph.title.template) || null, + twitter: ((_resolvedMetadata_twitter = resolvedMetadata.twitter) == null ? void 0 : _resolvedMetadata_twitter.title.template) || null + }; + } + } + if (leafSegmentStaticIcons.icon.length > 0 || leafSegmentStaticIcons.apple.length > 0) { + if (!resolvedMetadata.icons) { + resolvedMetadata.icons = { + icon: [], + apple: [] + }; + if (leafSegmentStaticIcons.icon.length > 0) { + resolvedMetadata.icons.icon.unshift(...leafSegmentStaticIcons.icon); + } + if (leafSegmentStaticIcons.apple.length > 0) { + resolvedMetadata.icons.apple.unshift(...leafSegmentStaticIcons.apple); + } + } + } + // Only log warnings if there are any, and only once after the metadata resolving process is finished + if (buildState.warnings.size > 0) { + for (const warning of buildState.warnings){ + _log.warn(warning); + } + } + return postProcessMetadata(resolvedMetadata, favicon, titleTemplates, metadataContext); +} +async function accumulateViewport(viewportItems) { + let resolvedViewport = (0, _defaultmetadata.createDefaultViewport)(); + const resolversAndResults = prerenderViewport(viewportItems); + let i = 0; + while(i < resolversAndResults.length){ + let pendingViewport = resolversAndResults[i++]; + if (typeof pendingViewport === 'function') { + // this viewport item had a `generateViewport` and + // we need to provide the currently resolved viewport + // to it before we continue; + const resolveParentViewport = pendingViewport; + // we know that the next item is a result if this item + // was a resolver + pendingViewport = resolversAndResults[i++]; + resolveParentViewport(freezeInDev(resolvedViewport)); + } + // Otherwise the item was either null or a static export + let viewport; + if (isPromiseLike(pendingViewport)) { + viewport = await pendingViewport; + } else { + viewport = pendingViewport; + } + resolvedViewport = mergeViewport({ + resolvedViewport, + viewport + }); + } + return resolvedViewport; +} +async function resolveMetadata(tree, pathname, searchParams, errorConvention, interpolatedParams, metadataContext, isRuntimePrefetchable) { + const metadataItems = await resolveMetadataItems(tree, searchParams, errorConvention, interpolatedParams, isRuntimePrefetchable); + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + if (!workStore) { + throw Object.defineProperty(new _invarianterror.InvariantError('Expected workStore to be initialized'), "__NEXT_ERROR_CODE", { + value: "E1068", + enumerable: false, + configurable: true + }); + } + return accumulateMetadata(workStore.route, metadataItems, pathname, metadataContext); +} +async function resolveViewport(tree, searchParams, errorConvention, interpolatedParams, isRuntimePrefetchable) { + const viewportItems = await resolveViewportItems(tree, searchParams, errorConvention, interpolatedParams, isRuntimePrefetchable); + return accumulateViewport(viewportItems); +} +function isPromiseLike(value) { + return typeof value === 'object' && value !== null && typeof value.then === 'function'; +} + +//# sourceMappingURL=resolve-metadata.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/metadata/resolvers/resolve-basics.js b/build/node_modules/next/dist/lib/metadata/resolvers/resolve-basics.js new file mode 100644 index 0000000..c6d22d9 --- /dev/null +++ b/build/node_modules/next/dist/lib/metadata/resolvers/resolve-basics.js @@ -0,0 +1,232 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + resolveAlternates: null, + resolveAppLinks: null, + resolveAppleWebApp: null, + resolveFacebook: null, + resolveItunes: null, + resolvePagination: null, + resolveRobots: null, + resolveThemeColor: null, + resolveVerification: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + resolveAlternates: function() { + return resolveAlternates; + }, + resolveAppLinks: function() { + return resolveAppLinks; + }, + resolveAppleWebApp: function() { + return resolveAppleWebApp; + }, + resolveFacebook: function() { + return resolveFacebook; + }, + resolveItunes: function() { + return resolveItunes; + }, + resolvePagination: function() { + return resolvePagination; + }, + resolveRobots: function() { + return resolveRobots; + }, + resolveThemeColor: function() { + return resolveThemeColor; + }, + resolveVerification: function() { + return resolveVerification; + } +}); +const _utils = require("../generate/utils"); +const _resolveurl = require("./resolve-url"); +function resolveAlternateUrl(url, metadataBase, pathname, metadataContext) { + // If alter native url is an URL instance, + // we treat it as a URL base and resolve with current pathname + if (url instanceof URL) { + const newUrl = new URL(pathname, url); + url.searchParams.forEach((value, key)=>newUrl.searchParams.set(key, value)); + url = newUrl; + } + return (0, _resolveurl.resolveAbsoluteUrlWithPathname)(url, metadataBase, pathname, metadataContext); +} +const resolveThemeColor = (themeColor)=>{ + var _resolveAsArrayOrUndefined; + if (!themeColor) return null; + const themeColorDescriptors = []; + (_resolveAsArrayOrUndefined = (0, _utils.resolveAsArrayOrUndefined)(themeColor)) == null ? void 0 : _resolveAsArrayOrUndefined.forEach((descriptor)=>{ + if (typeof descriptor === 'string') themeColorDescriptors.push({ + color: descriptor + }); + else if (typeof descriptor === 'object') themeColorDescriptors.push({ + color: descriptor.color, + media: descriptor.media + }); + }); + return themeColorDescriptors; +}; +async function resolveUrlValuesOfObject(obj, metadataBase, pathname, metadataContext) { + if (!obj) return null; + const result = {}; + for (const [key, value] of Object.entries(obj)){ + if (typeof value === 'string' || value instanceof URL) { + const pathnameForUrl = await pathname; + result[key] = [ + { + url: resolveAlternateUrl(value, metadataBase, pathnameForUrl, metadataContext) + } + ]; + } else if (value && value.length) { + result[key] = []; + const pathnameForUrl = await pathname; + value.forEach((item, index)=>{ + const url = resolveAlternateUrl(item.url, metadataBase, pathnameForUrl, metadataContext); + result[key][index] = { + url, + title: item.title + }; + }); + } + } + return result; +} +async function resolveCanonicalUrl(urlOrDescriptor, metadataBase, pathname, metadataContext) { + if (!urlOrDescriptor) return null; + const url = typeof urlOrDescriptor === 'string' || urlOrDescriptor instanceof URL ? urlOrDescriptor : urlOrDescriptor.url; + const pathnameForUrl = await pathname; + // Return string url because structureClone can't handle URL instance + return { + url: resolveAlternateUrl(url, metadataBase, pathnameForUrl, metadataContext) + }; +} +const resolveAlternates = async (alternates, metadataBase, pathname, context)=>{ + if (!alternates) return null; + const canonical = await resolveCanonicalUrl(alternates.canonical, metadataBase, pathname, context); + const languages = await resolveUrlValuesOfObject(alternates.languages, metadataBase, pathname, context); + const media = await resolveUrlValuesOfObject(alternates.media, metadataBase, pathname, context); + const types = await resolveUrlValuesOfObject(alternates.types, metadataBase, pathname, context); + return { + canonical, + languages, + media, + types + }; +}; +const robotsKeys = [ + 'noarchive', + 'nosnippet', + 'noimageindex', + 'nocache', + 'notranslate', + 'indexifembedded', + 'nositelinkssearchbox', + 'unavailable_after', + 'max-video-preview', + 'max-image-preview', + 'max-snippet' +]; +const resolveRobotsValue = (robots)=>{ + if (!robots) return null; + if (typeof robots === 'string') return robots; + const values = []; + if (robots.index) values.push('index'); + else if (typeof robots.index === 'boolean') values.push('noindex'); + if (robots.follow) values.push('follow'); + else if (typeof robots.follow === 'boolean') values.push('nofollow'); + for (const key of robotsKeys){ + const value = robots[key]; + if (typeof value !== 'undefined' && value !== false) { + values.push(typeof value === 'boolean' ? key : `${key}:${value}`); + } + } + return values.join(', '); +}; +const resolveRobots = (robots)=>{ + if (!robots) return null; + return { + basic: resolveRobotsValue(robots), + googleBot: typeof robots !== 'string' ? resolveRobotsValue(robots.googleBot) : null + }; +}; +const VerificationKeys = [ + 'google', + 'yahoo', + 'yandex', + 'me', + 'other' +]; +const resolveVerification = (verification)=>{ + if (!verification) return null; + const res = {}; + for (const key of VerificationKeys){ + const value = verification[key]; + if (value) { + if (key === 'other') { + res.other = {}; + for(const otherKey in verification.other){ + const otherValue = (0, _utils.resolveAsArrayOrUndefined)(verification.other[otherKey]); + if (otherValue) res.other[otherKey] = otherValue; + } + } else res[key] = (0, _utils.resolveAsArrayOrUndefined)(value); + } + } + return res; +}; +const resolveAppleWebApp = (appWebApp)=>{ + var _resolveAsArrayOrUndefined; + if (!appWebApp) return null; + if (appWebApp === true) { + return { + capable: true + }; + } + const startupImages = appWebApp.startupImage ? (_resolveAsArrayOrUndefined = (0, _utils.resolveAsArrayOrUndefined)(appWebApp.startupImage)) == null ? void 0 : _resolveAsArrayOrUndefined.map((item)=>typeof item === 'string' ? { + url: item + } : item) : null; + return { + capable: 'capable' in appWebApp ? !!appWebApp.capable : true, + title: appWebApp.title || null, + startupImage: startupImages, + statusBarStyle: appWebApp.statusBarStyle || 'default' + }; +}; +const resolveAppLinks = (appLinks)=>{ + if (!appLinks) return null; + for(const key in appLinks){ + // @ts-ignore // TODO: type infer + appLinks[key] = (0, _utils.resolveAsArrayOrUndefined)(appLinks[key]); + } + return appLinks; +}; +const resolveItunes = async (itunes, metadataBase, pathname, context)=>{ + if (!itunes) return null; + return { + appId: itunes.appId, + appArgument: itunes.appArgument ? resolveAlternateUrl(itunes.appArgument, metadataBase, await pathname, context) : undefined + }; +}; +const resolveFacebook = (facebook)=>{ + if (!facebook) return null; + return { + appId: facebook.appId, + admins: (0, _utils.resolveAsArrayOrUndefined)(facebook.admins) + }; +}; +const resolvePagination = async (pagination, metadataBase, pathname, context)=>{ + return { + previous: (pagination == null ? void 0 : pagination.previous) ? resolveAlternateUrl(pagination.previous, metadataBase, await pathname, context) : null, + next: (pagination == null ? void 0 : pagination.next) ? resolveAlternateUrl(pagination.next, metadataBase, await pathname, context) : null + }; +}; + +//# sourceMappingURL=resolve-basics.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/metadata/resolvers/resolve-icons.js b/build/node_modules/next/dist/lib/metadata/resolvers/resolve-icons.js new file mode 100644 index 0000000..0ba0df0 --- /dev/null +++ b/build/node_modules/next/dist/lib/metadata/resolvers/resolve-icons.js @@ -0,0 +1,56 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + resolveIcon: null, + resolveIcons: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + resolveIcon: function() { + return resolveIcon; + }, + resolveIcons: function() { + return resolveIcons; + } +}); +const _utils = require("../generate/utils"); +const _resolveurl = require("./resolve-url"); +const _constants = require("../constants"); +function resolveIcon(icon) { + if ((0, _resolveurl.isStringOrURL)(icon)) return { + url: icon + }; + else if (Array.isArray(icon)) return icon; + return icon; +} +const resolveIcons = (icons)=>{ + if (!icons) { + return null; + } + const resolved = { + icon: [], + apple: [] + }; + if (Array.isArray(icons)) { + resolved.icon = icons.map(resolveIcon).filter(Boolean); + } else if ((0, _resolveurl.isStringOrURL)(icons)) { + resolved.icon = [ + resolveIcon(icons) + ]; + } else { + for (const key of _constants.IconKeys){ + const values = (0, _utils.resolveAsArrayOrUndefined)(icons[key]); + if (values) resolved[key] = values.map(resolveIcon); + } + } + return resolved; +}; + +//# sourceMappingURL=resolve-icons.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/metadata/resolvers/resolve-opengraph.js b/build/node_modules/next/dist/lib/metadata/resolvers/resolve-opengraph.js new file mode 100644 index 0000000..4d53a32 --- /dev/null +++ b/build/node_modules/next/dist/lib/metadata/resolvers/resolve-opengraph.js @@ -0,0 +1,199 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + resolveImages: null, + resolveOpenGraph: null, + resolveTwitter: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + resolveImages: function() { + return resolveImages; + }, + resolveOpenGraph: function() { + return resolveOpenGraph; + }, + resolveTwitter: function() { + return resolveTwitter; + } +}); +const _utils = require("../generate/utils"); +const _resolveurl = require("./resolve-url"); +const _resolvetitle = require("./resolve-title"); +const _url = require("../../url"); +const _log = require("../../../build/output/log"); +const OgTypeFields = { + article: [ + 'authors', + 'tags' + ], + song: [ + 'albums', + 'musicians' + ], + playlist: [ + 'albums', + 'musicians' + ], + radio: [ + 'creators' + ], + video: [ + 'actors', + 'directors', + 'writers', + 'tags' + ], + basic: [ + 'emails', + 'phoneNumbers', + 'faxNumbers', + 'alternateLocale', + 'audio', + 'videos' + ] +}; +function resolveAndValidateImage(item, metadataBase, isStaticMetadataRouteFile) { + if (!item) return undefined; + const isItemUrl = (0, _resolveurl.isStringOrURL)(item); + const inputUrl = isItemUrl ? item : item.url; + if (!inputUrl) return undefined; + // process.env.VERCEL is set to "1" when System Environment Variables are + // exposed. When exposed, validation is not necessary since we are falling back to + // process.env.VERCEL_PROJECT_PRODUCTION_URL, process.env.VERCEL_BRANCH_URL, or + // process.env.VERCEL_URL for the `metadataBase`. process.env.VERCEL is undefined + // when System Environment Variables are not exposed. When not exposed, we cannot + // detect in the build environment if the deployment is a Vercel deployment or not. + // + // x-ref: https://vercel.com/docs/projects/environment-variables/system-environment-variables#system-environment-variables + const isUsingVercelSystemEnvironmentVariables = Boolean(process.env.VERCEL); + const isRelativeUrl = typeof inputUrl === 'string' && !(0, _url.isFullStringUrl)(inputUrl); + // When no explicit metadataBase is specified by the user, we'll override it with the fallback metadata + // under the following conditions: + // - The provided URL is relative (ie ./og-image). + // - The image is statically generated by Next.js (such as the special `opengraph-image` route) + // In both cases, we want to ensure that across all environments, the ogImage is a fully qualified URL. + // In the `opengraph-image` case, since the user isn't explicitly passing a relative path, this ensures + // the ogImage will be properly discovered across different environments without the user needing to + // have a bunch of `process.env` checks when defining their `metadataBase`. + if (isRelativeUrl && (!metadataBase || isStaticMetadataRouteFile)) { + const fallbackMetadataBase = (0, _resolveurl.getSocialImageMetadataBaseFallback)(metadataBase); + // When not using Vercel environment variables for URL injection, we aren't able to determine + // a fallback value for `metadataBase`. For self-hosted setups, we want to warn + // about this since the only fallback we'll be able to generate is `localhost`. + // In development, we'll only warn for relative metadata that isn't part of the static + // metadata conventions (eg `opengraph-image`), as otherwise it's currently very noisy + // for common cases. Eventually we should remove this warning all together in favor of + // devtools. + const shouldWarn = !isUsingVercelSystemEnvironmentVariables && !metadataBase && (process.env.NODE_ENV === 'production' || !isStaticMetadataRouteFile); + if (shouldWarn) { + (0, _log.warnOnce)(`metadataBase property in metadata export is not set for resolving social open graph or twitter images, using "${fallbackMetadataBase.origin}". See https://nextjs.org/docs/app/api-reference/functions/generate-metadata#metadatabase`); + } + metadataBase = fallbackMetadataBase; + } + return isItemUrl ? { + url: (0, _resolveurl.resolveUrl)(inputUrl, metadataBase) + } : { + ...item, + // Update image descriptor url + url: (0, _resolveurl.resolveUrl)(inputUrl, metadataBase) + }; +} +function resolveImages(images, metadataBase, isStaticMetadataRouteFile) { + const resolvedImages = (0, _utils.resolveAsArrayOrUndefined)(images); + if (!resolvedImages) return resolvedImages; + const nonNullableImages = []; + for (const item of resolvedImages){ + const resolvedItem = resolveAndValidateImage(item, metadataBase, isStaticMetadataRouteFile); + if (!resolvedItem) continue; + nonNullableImages.push(resolvedItem); + } + return nonNullableImages; +} +const ogTypeToFields = { + article: OgTypeFields.article, + book: OgTypeFields.article, + 'music.song': OgTypeFields.song, + 'music.album': OgTypeFields.song, + 'music.playlist': OgTypeFields.playlist, + 'music.radio_station': OgTypeFields.radio, + 'video.movie': OgTypeFields.video, + 'video.episode': OgTypeFields.video +}; +function getFieldsByOgType(ogType) { + if (!ogType || !(ogType in ogTypeToFields)) return OgTypeFields.basic; + return ogTypeToFields[ogType].concat(OgTypeFields.basic); +} +const resolveOpenGraph = async (openGraph, metadataBase, pathname, metadataContext, titleTemplate)=>{ + if (!openGraph) return null; + function resolveProps(target, og) { + const ogType = og && 'type' in og ? og.type : undefined; + const keys = getFieldsByOgType(ogType); + for (const k of keys){ + const key = k; + if (key in og && key !== 'url') { + const value = og[key]; + target[key] = value ? (0, _utils.resolveArray)(value) : null; + } + } + target.images = resolveImages(og.images, metadataBase, metadataContext.isStaticMetadataRouteFile); + } + const resolved = { + ...openGraph, + title: (0, _resolvetitle.resolveTitle)(openGraph.title, titleTemplate) + }; + resolveProps(resolved, openGraph); + resolved.url = openGraph.url ? (0, _resolveurl.resolveAbsoluteUrlWithPathname)(openGraph.url, metadataBase, await pathname, metadataContext) : null; + return resolved; +}; +const TwitterBasicInfoKeys = [ + 'site', + 'siteId', + 'creator', + 'creatorId', + 'description' +]; +const resolveTwitter = (twitter, metadataBase, metadataContext, titleTemplate)=>{ + var _resolved_images; + if (!twitter) return null; + let card = 'card' in twitter ? twitter.card : undefined; + const resolved = { + ...twitter, + title: (0, _resolvetitle.resolveTitle)(twitter.title, titleTemplate) + }; + for (const infoKey of TwitterBasicInfoKeys){ + resolved[infoKey] = twitter[infoKey] || null; + } + resolved.images = resolveImages(twitter.images, metadataBase, metadataContext.isStaticMetadataRouteFile); + card = card || (((_resolved_images = resolved.images) == null ? void 0 : _resolved_images.length) ? 'summary_large_image' : 'summary'); + resolved.card = card; + if ('card' in resolved) { + switch(resolved.card){ + case 'player': + { + resolved.players = (0, _utils.resolveAsArrayOrUndefined)(resolved.players) || []; + break; + } + case 'app': + { + resolved.app = resolved.app || {}; + break; + } + case 'summary': + case 'summary_large_image': + break; + default: + resolved; + } + } + return resolved; +}; + +//# sourceMappingURL=resolve-opengraph.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/metadata/resolvers/resolve-title.js b/build/node_modules/next/dist/lib/metadata/resolvers/resolve-title.js new file mode 100644 index 0000000..5489e56 --- /dev/null +++ b/build/node_modules/next/dist/lib/metadata/resolvers/resolve-title.js @@ -0,0 +1,40 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "resolveTitle", { + enumerable: true, + get: function() { + return resolveTitle; + } +}); +function resolveTitleTemplate(template, title) { + return template ? template.replace(/%s/g, title) : title; +} +function resolveTitle(title, stashedTemplate) { + let resolved; + const template = typeof title !== 'string' && title && 'template' in title ? title.template : null; + if (typeof title === 'string') { + resolved = resolveTitleTemplate(stashedTemplate, title); + } else if (title) { + if ('default' in title) { + resolved = resolveTitleTemplate(stashedTemplate, title.default); + } + if ('absolute' in title && title.absolute) { + resolved = title.absolute; + } + } + if (title && typeof title !== 'string') { + return { + template, + absolute: resolved || '' + }; + } else { + return { + absolute: resolved || title || '', + template + }; + } +} + +//# sourceMappingURL=resolve-title.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/metadata/resolvers/resolve-url.js b/build/node_modules/next/dist/lib/metadata/resolvers/resolve-url.js new file mode 100644 index 0000000..7f956f1 --- /dev/null +++ b/build/node_modules/next/dist/lib/metadata/resolvers/resolve-url.js @@ -0,0 +1,135 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getSocialImageMetadataBaseFallback: null, + isStringOrURL: null, + resolveAbsoluteUrlWithPathname: null, + resolveRelativeUrl: null, + resolveUrl: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getSocialImageMetadataBaseFallback: function() { + return getSocialImageMetadataBaseFallback; + }, + isStringOrURL: function() { + return isStringOrURL; + }, + resolveAbsoluteUrlWithPathname: function() { + return resolveAbsoluteUrlWithPathname; + }, + resolveRelativeUrl: function() { + return resolveRelativeUrl; + }, + resolveUrl: function() { + return resolveUrl; + } +}); +const _path = /*#__PURE__*/ _interop_require_default(require("../../../shared/lib/isomorphic/path")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function isStringOrURL(icon) { + return typeof icon === 'string' || icon instanceof URL; +} +function createLocalMetadataBase() { + // Check if experimental HTTPS is enabled + const isExperimentalHttps = Boolean(process.env.__NEXT_EXPERIMENTAL_HTTPS); + const protocol = isExperimentalHttps ? 'https' : 'http'; + return new URL(`${protocol}://localhost:${process.env.PORT || 3000}`); +} +function getPreviewDeploymentUrl() { + const origin = process.env.VERCEL_BRANCH_URL || process.env.VERCEL_URL; + return origin ? new URL(`https://${origin}`) : undefined; +} +function getProductionDeploymentUrl() { + const origin = process.env.VERCEL_PROJECT_PRODUCTION_URL; + return origin ? new URL(`https://${origin}`) : undefined; +} +function getSocialImageMetadataBaseFallback(metadataBase) { + const defaultMetadataBase = createLocalMetadataBase(); + const previewDeploymentUrl = getPreviewDeploymentUrl(); + const productionDeploymentUrl = getProductionDeploymentUrl(); + let fallbackMetadataBase; + if (process.env.NODE_ENV === 'development') { + fallbackMetadataBase = defaultMetadataBase; + } else { + fallbackMetadataBase = process.env.NODE_ENV === 'production' && previewDeploymentUrl && process.env.VERCEL_ENV === 'preview' ? previewDeploymentUrl : metadataBase || productionDeploymentUrl || defaultMetadataBase; + } + return fallbackMetadataBase; +} +function resolveUrl(url, metadataBase) { + if (url instanceof URL) return url; + if (!url) return null; + try { + // If we can construct a URL instance from url, ignore metadataBase + const parsedUrl = new URL(url); + return parsedUrl; + } catch {} + if (!metadataBase) { + metadataBase = createLocalMetadataBase(); + } + // Handle relative or absolute paths + const pathname = metadataBase.pathname || ''; + const joinedPath = _path.default.posix.join(pathname, url); + return new URL(joinedPath, metadataBase); +} +// Resolve with `pathname` if `url` is a relative path. +function resolveRelativeUrl(url, pathname) { + if (typeof url === 'string' && url.startsWith('./')) { + return _path.default.posix.resolve(pathname, url); + } + return url; +} +// The regex is matching logic from packages/next/src/lib/load-custom-routes.ts +const FILE_REGEX = /^(?:\/((?!\.well-known(?:\/.*)?)(?:[^/]+\/)*[^/]+\.\w+))(\/?|$)/i; +function isFilePattern(pathname) { + return FILE_REGEX.test(pathname); +} +// Resolve `pathname` if `url` is a relative path the compose with `metadataBase`. +function resolveAbsoluteUrlWithPathname(url, metadataBase, pathname, { trailingSlash }) { + // Resolve url with pathname that always starts with `/` + url = resolveRelativeUrl(url, pathname); + // Convert string url or URL instance to absolute url string, + // if there's case needs to be resolved with metadataBase + let resolvedUrl = ''; + const result = metadataBase ? resolveUrl(url, metadataBase) : url; + if (typeof result === 'string') { + resolvedUrl = result; + } else { + resolvedUrl = result.pathname === '/' && result.searchParams.size === 0 ? result.origin : result.href; + } + // Add trailing slash if it's enabled for urls matches the condition + // - Not external, same origin with metadataBase + // - Doesn't have query + if (trailingSlash && !resolvedUrl.endsWith('/')) { + let isRelative = resolvedUrl.startsWith('/'); + let hasQuery = resolvedUrl.includes('?'); + let isExternal = false; + let isFileUrl = false; + if (!isRelative) { + try { + const parsedUrl = new URL(resolvedUrl); + isExternal = metadataBase != null && parsedUrl.origin !== metadataBase.origin; + isFileUrl = isFilePattern(parsedUrl.pathname); + } catch { + // If it's not a valid URL, treat it as external + isExternal = true; + } + if (// Do not apply trailing slash for file like urls, aligning with the behavior with `trailingSlash` + !isFileUrl && !isExternal && !hasQuery) return `${resolvedUrl}/`; + } + } + return resolvedUrl; +} + +//# sourceMappingURL=resolve-url.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/metadata/types/alternative-urls-types.js b/build/node_modules/next/dist/lib/metadata/types/alternative-urls-types.js new file mode 100644 index 0000000..cd2c253 --- /dev/null +++ b/build/node_modules/next/dist/lib/metadata/types/alternative-urls-types.js @@ -0,0 +1,7 @@ +// Reference: https://hreflang.org/what-is-a-valid-hreflang +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=alternative-urls-types.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/metadata/types/extra-types.js b/build/node_modules/next/dist/lib/metadata/types/extra-types.js new file mode 100644 index 0000000..e911152 --- /dev/null +++ b/build/node_modules/next/dist/lib/metadata/types/extra-types.js @@ -0,0 +1,9 @@ +// When rendering applink meta tags add a namespace tag before each array instance +// if more than one member exists. +// ref: https://developers.facebook.com/docs/applinks/metadata-reference +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=extra-types.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/metadata/types/icons.js b/build/node_modules/next/dist/lib/metadata/types/icons.js new file mode 100644 index 0000000..6e2259d --- /dev/null +++ b/build/node_modules/next/dist/lib/metadata/types/icons.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=icons.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/metadata/types/manifest-types.js b/build/node_modules/next/dist/lib/metadata/types/manifest-types.js new file mode 100644 index 0000000..a5b59aa --- /dev/null +++ b/build/node_modules/next/dist/lib/metadata/types/manifest-types.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=manifest-types.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/metadata/types/metadata-interface.js b/build/node_modules/next/dist/lib/metadata/types/metadata-interface.js new file mode 100644 index 0000000..8ed5101 --- /dev/null +++ b/build/node_modules/next/dist/lib/metadata/types/metadata-interface.js @@ -0,0 +1,18 @@ +/** + * Next.js Metadata API + * + * This file defines the types used by Next.js to configure metadata + * through static exports or dynamic `generateMetadata` functions in Server Components. + * + * @remarks + * - The static `metadata` object and `generateMetadata` function are only supported in Server Components. + * - Do not export both a `metadata` object and a `generateMetadata` function from the same route segment. + * - You can still render metadata in client components directly as part of the component's JSX. + * + * @see https://nextjs.org/docs/app/api-reference/metadata + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=metadata-interface.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/metadata/types/metadata-types.js b/build/node_modules/next/dist/lib/metadata/types/metadata-types.js new file mode 100644 index 0000000..0163f77 --- /dev/null +++ b/build/node_modules/next/dist/lib/metadata/types/metadata-types.js @@ -0,0 +1,10 @@ +/** + * + * Metadata types + * + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=metadata-types.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/metadata/types/opengraph-types.js b/build/node_modules/next/dist/lib/metadata/types/opengraph-types.js new file mode 100644 index 0000000..79081b8 --- /dev/null +++ b/build/node_modules/next/dist/lib/metadata/types/opengraph-types.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=opengraph-types.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/metadata/types/resolvers.js b/build/node_modules/next/dist/lib/metadata/types/resolvers.js new file mode 100644 index 0000000..9553881 --- /dev/null +++ b/build/node_modules/next/dist/lib/metadata/types/resolvers.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=resolvers.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/metadata/types/twitter-types.js b/build/node_modules/next/dist/lib/metadata/types/twitter-types.js new file mode 100644 index 0000000..f1c4f9e --- /dev/null +++ b/build/node_modules/next/dist/lib/metadata/types/twitter-types.js @@ -0,0 +1,7 @@ +// Reference: https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/markup +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=twitter-types.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/mime-type.js b/build/node_modules/next/dist/lib/mime-type.js new file mode 100644 index 0000000..2274221 --- /dev/null +++ b/build/node_modules/next/dist/lib/mime-type.js @@ -0,0 +1,20 @@ +/** + * Map of images extensions to MIME types + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "imageExtMimeTypeMap", { + enumerable: true, + get: function() { + return imageExtMimeTypeMap; + } +}); +const imageExtMimeTypeMap = { + jpeg: 'image/jpeg', + png: 'image/png', + ico: 'image/x-icon', + svg: 'image/svg+xml' +}; + +//# sourceMappingURL=mime-type.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/mkcert.js b/build/node_modules/next/dist/lib/mkcert.js new file mode 100644 index 0000000..5590866 --- /dev/null +++ b/build/node_modules/next/dist/lib/mkcert.js @@ -0,0 +1,204 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "createSelfSignedCertificate", { + enumerable: true, + get: function() { + return createSelfSignedCertificate; + } +}); +const _nodefs = /*#__PURE__*/ _interop_require_default(require("node:fs")); +const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path")); +const _nodecrypto = require("node:crypto"); +const _getcachedirectory = require("./helpers/get-cache-directory"); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("../build/output/log")); +const _nodechild_process = require("node:child_process"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +const { WritableStream } = require('node:stream/web'); +const MKCERT_VERSION = 'v1.4.4'; +function getBinaryName() { + const platform = process.platform; + const arch = process.arch === 'x64' ? 'amd64' : process.arch; + if (platform === 'win32') { + return `mkcert-${MKCERT_VERSION}-windows-${arch}.exe`; + } + if (platform === 'darwin') { + return `mkcert-${MKCERT_VERSION}-darwin-${arch}`; + } + if (platform === 'linux') { + return `mkcert-${MKCERT_VERSION}-linux-${arch}`; + } + throw Object.defineProperty(new Error(`Unsupported platform: ${platform}`), "__NEXT_ERROR_CODE", { + value: "E141", + enumerable: false, + configurable: true + }); +} +async function downloadBinary() { + try { + const binaryName = getBinaryName(); + const cacheDirectory = (0, _getcachedirectory.getCacheDirectory)('mkcert'); + const binaryPath = _nodepath.default.join(cacheDirectory, binaryName); + if (_nodefs.default.existsSync(binaryPath)) { + return binaryPath; + } + const downloadUrl = `https://github.com/FiloSottile/mkcert/releases/download/${MKCERT_VERSION}/${binaryName}`; + await _nodefs.default.promises.mkdir(cacheDirectory, { + recursive: true + }); + _log.info(`Downloading mkcert package...`); + const response = await fetch(downloadUrl); + if (!response.ok || !response.body) { + throw Object.defineProperty(new Error(`request failed with status ${response.status}`), "__NEXT_ERROR_CODE", { + value: "E109", + enumerable: false, + configurable: true + }); + } + _log.info(`Download response was successful, writing to disk`); + const binaryWriteStream = _nodefs.default.createWriteStream(binaryPath); + await response.body.pipeTo(new WritableStream({ + write (chunk) { + return new Promise((resolve, reject)=>{ + binaryWriteStream.write(chunk, (error)=>{ + if (error) { + reject(error); + return; + } + resolve(); + }); + }); + }, + close () { + return new Promise((resolve, reject)=>{ + binaryWriteStream.close((error)=>{ + if (error) { + reject(error); + return; + } + resolve(); + }); + }); + } + })); + await _nodefs.default.promises.chmod(binaryPath, 493); + return binaryPath; + } catch (err) { + _log.error('Error downloading mkcert:', err); + } +} +async function createSelfSignedCertificate(host, certDir = 'certificates') { + try { + const binaryPath = await downloadBinary(); + if (!binaryPath) throw Object.defineProperty(new Error('missing mkcert binary'), "__NEXT_ERROR_CODE", { + value: "E198", + enumerable: false, + configurable: true + }); + const resolvedCertDir = _nodepath.default.resolve(process.cwd(), `./${certDir}`); + await _nodefs.default.promises.mkdir(resolvedCertDir, { + recursive: true + }); + const keyPath = _nodepath.default.resolve(resolvedCertDir, 'localhost-key.pem'); + const certPath = _nodepath.default.resolve(resolvedCertDir, 'localhost.pem'); + if (_nodefs.default.existsSync(keyPath) && _nodefs.default.existsSync(certPath)) { + const cert = new _nodecrypto.X509Certificate(_nodefs.default.readFileSync(certPath)); + const key = _nodefs.default.readFileSync(keyPath); + if (cert.checkHost(host ?? 'localhost') && cert.checkPrivateKey((0, _nodecrypto.createPrivateKey)(key))) { + _log.info('Using already generated self signed certificate'); + const caLocation = (0, _nodechild_process.execSync)(`"${binaryPath}" -CAROOT`).toString().trim(); + return { + key: keyPath, + cert: certPath, + rootCA: `${caLocation}/rootCA.pem` + }; + } + } + _log.info('Attempting to generate self signed certificate. This may prompt for your password'); + const defaultHosts = [ + 'localhost', + '127.0.0.1', + '::1' + ]; + const hosts = host && !defaultHosts.includes(host) ? [ + ...defaultHosts, + host + ] : defaultHosts; + (0, _nodechild_process.execSync)(`"${binaryPath}" -install -key-file "${keyPath}" -cert-file "${certPath}" ${hosts.join(' ')}`, { + stdio: 'ignore' + }); + const caLocation = (0, _nodechild_process.execSync)(`"${binaryPath}" -CAROOT`).toString().trim(); + if (!_nodefs.default.existsSync(keyPath) || !_nodefs.default.existsSync(certPath)) { + throw Object.defineProperty(new Error('Certificate files not found'), "__NEXT_ERROR_CODE", { + value: "E131", + enumerable: false, + configurable: true + }); + } + _log.info(`CA Root certificate created in ${caLocation}`); + _log.info(`Certificates created in ${resolvedCertDir}`); + const gitignorePath = _nodepath.default.resolve(process.cwd(), './.gitignore'); + if (_nodefs.default.existsSync(gitignorePath)) { + const gitignore = await _nodefs.default.promises.readFile(gitignorePath, 'utf8'); + if (!gitignore.includes(certDir)) { + _log.info('Adding certificates to .gitignore'); + await _nodefs.default.promises.appendFile(gitignorePath, `\n${certDir}`); + } + } + return { + key: keyPath, + cert: certPath, + rootCA: `${caLocation}/rootCA.pem` + }; + } catch (err) { + _log.error('Failed to generate self-signed certificate. Falling back to http.', err); + } +} + +//# sourceMappingURL=mkcert.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/multi-file-writer.js b/build/node_modules/next/dist/lib/multi-file-writer.js new file mode 100644 index 0000000..c92cbcb --- /dev/null +++ b/build/node_modules/next/dist/lib/multi-file-writer.js @@ -0,0 +1,75 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "MultiFileWriter", { + enumerable: true, + get: function() { + return MultiFileWriter; + } +}); +const _path = /*#__PURE__*/ _interop_require_default(require("../shared/lib/isomorphic/path")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +class MultiFileWriter { + constructor(/** + * The file system methods to use. + */ fs){ + this.fs = fs; + this.tasks = []; + } + /** + * Finds or creates a task for a directory. + * + * @param directory - The directory to find or create a task for. + * @returns The task for the directory. + */ findOrCreateTask(directory) { + // See if this directory already has a task to create it. + for (const task of this.tasks){ + if (task[0] === directory) { + return task; + } + } + const promise = this.fs.mkdir(directory); + // Attach a catch handler so that it doesn't throw an unhandled promise + // rejection warning. + promise.catch(()=>{}); + // Otherwise, create a new task for this directory. + const task = [ + directory, + promise, + [] + ]; + this.tasks.push(task); + return task; + } + /** + * Appends a file to the writer to be written after its containing directory + * is created. The file writer should be awaited after all the files have been + * appended. Any async operation that occurs between appending and awaiting + * may cause an unhandled promise rejection warning and potentially crash the + * process. + * + * @param filePath - The path to the file to write. + * @param data - The data to write to the file. + */ append(filePath, data) { + // Find or create a task for the directory that contains the file. + const task = this.findOrCreateTask(_path.default.dirname(filePath)); + const promise = task[1].then(()=>this.fs.writeFile(filePath, data)); + // Attach a catch handler so that it doesn't throw an unhandled promise + // rejection warning. + promise.catch(()=>{}); + // Add the file write to the task AFTER the directory promise has resolved. + task[2].push(promise); + } + /** + * Returns a promise that resolves when all the files have been written. + */ wait() { + return Promise.all(this.tasks.flatMap((task)=>task[2])); + } +} + +//# sourceMappingURL=multi-file-writer.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/needs-experimental-react.js b/build/node_modules/next/dist/lib/needs-experimental-react.js new file mode 100644 index 0000000..3e259b5 --- /dev/null +++ b/build/node_modules/next/dist/lib/needs-experimental-react.js @@ -0,0 +1,16 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "needsExperimentalReact", { + enumerable: true, + get: function() { + return needsExperimentalReact; + } +}); +function needsExperimentalReact(config) { + const { taint, transitionIndicator, gestureTransition } = config.experimental || {}; + return Boolean(taint || transitionIndicator || gestureTransition); +} + +//# sourceMappingURL=needs-experimental-react.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/non-nullable.js b/build/node_modules/next/dist/lib/non-nullable.js new file mode 100644 index 0000000..30b607b --- /dev/null +++ b/build/node_modules/next/dist/lib/non-nullable.js @@ -0,0 +1,15 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "nonNullable", { + enumerable: true, + get: function() { + return nonNullable; + } +}); +function nonNullable(value) { + return value !== null && value !== undefined; +} + +//# sourceMappingURL=non-nullable.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/normalize-path.js b/build/node_modules/next/dist/lib/normalize-path.js new file mode 100644 index 0000000..1d52799 --- /dev/null +++ b/build/node_modules/next/dist/lib/normalize-path.js @@ -0,0 +1,21 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "normalizePath", { + enumerable: true, + get: function() { + return normalizePath; + } +}); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function normalizePath(file) { + return _path.default.sep === '\\' ? file.replace(/\\/g, '/') : file; +} + +//# sourceMappingURL=normalize-path.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/oxford-comma-list.js b/build/node_modules/next/dist/lib/oxford-comma-list.js new file mode 100644 index 0000000..f11033d --- /dev/null +++ b/build/node_modules/next/dist/lib/oxford-comma-list.js @@ -0,0 +1,15 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getOxfordCommaList", { + enumerable: true, + get: function() { + return getOxfordCommaList; + } +}); +function getOxfordCommaList(items) { + return items.map((v, index, { length })=>(index > 0 ? index === length - 1 ? length > 2 ? ', and ' : ' and ' : ', ' : '') + v).join(''); +} + +//# sourceMappingURL=oxford-comma-list.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/page-types.js b/build/node_modules/next/dist/lib/page-types.js new file mode 100644 index 0000000..a182598 --- /dev/null +++ b/build/node_modules/next/dist/lib/page-types.js @@ -0,0 +1,18 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "PAGE_TYPES", { + enumerable: true, + get: function() { + return PAGE_TYPES; + } +}); +var PAGE_TYPES = /*#__PURE__*/ function(PAGE_TYPES) { + PAGE_TYPES["PAGES"] = "pages"; + PAGE_TYPES["ROOT"] = "root"; + PAGE_TYPES["APP"] = "app"; + return PAGE_TYPES; +}({}); + +//# sourceMappingURL=page-types.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/patch-incorrect-lockfile.js b/build/node_modules/next/dist/lib/patch-incorrect-lockfile.js new file mode 100644 index 0000000..6bfb065 --- /dev/null +++ b/build/node_modules/next/dist/lib/patch-incorrect-lockfile.js @@ -0,0 +1,185 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "patchIncorrectLockfile", { + enumerable: true, + get: function() { + return patchIncorrectLockfile; + } +}); +const _fs = require("fs"); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("../build/output/log")); +const _findup = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/find-up")); +const _packagejson = require("next/package.json"); +const _ciinfo = require("../server/ci-info"); +const _getregistry = require("./helpers/get-registry"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +let registry; +async function fetchPkgInfo(pkg) { + if (!registry) registry = (0, _getregistry.getRegistry)(); + const res = await fetch(`${registry}${pkg}`); + if (!res.ok) { + throw Object.defineProperty(new Error(`Failed to fetch registry info for ${pkg}, got status ${res.status}`), "__NEXT_ERROR_CODE", { + value: "E172", + enumerable: false, + configurable: true + }); + } + const data = await res.json(); + const versionData = data.versions["16.2.6"]; + return { + os: versionData.os, + cpu: versionData.cpu, + engines: versionData.engines, + tarball: versionData.dist.tarball, + integrity: versionData.dist.integrity + }; +} +async function patchIncorrectLockfile(dir) { + if (process.env.NEXT_IGNORE_INCORRECT_LOCKFILE) { + return; + } + const lockfilePath = await (0, _findup.default)('package-lock.json', { + cwd: dir + }); + if (!lockfilePath) { + // if no lockfile present there is no action to take + return; + } + const content = await _fs.promises.readFile(lockfilePath, 'utf8'); + // maintain current line ending + const endingNewline = content.endsWith('\r\n') ? '\r\n' : content.endsWith('\n') ? '\n' : ''; + const lockfileParsed = JSON.parse(content); + const lockfileVersion = parseInt(lockfileParsed == null ? void 0 : lockfileParsed.lockfileVersion, 10); + const expectedSwcPkgs = Object.keys(_packagejson.optionalDependencies || {}).filter((pkg)=>pkg.startsWith('@next/swc-')); + const patchDependency = (pkg, pkgData)=>{ + lockfileParsed.dependencies[pkg] = { + version: "16.2.6", + resolved: pkgData.tarball, + integrity: pkgData.integrity, + optional: true + }; + }; + const patchPackage = (pkg, pkgData)=>{ + lockfileParsed.packages[pkg] = { + version: "16.2.6", + resolved: pkgData.tarball, + integrity: pkgData.integrity, + cpu: pkgData.cpu, + optional: true, + os: pkgData.os, + engines: pkgData.engines + }; + }; + try { + const supportedVersions = [ + 1, + 2, + 3 + ]; + if (!supportedVersions.includes(lockfileVersion)) { + // bail on unsupported version + return; + } + // v1 only uses dependencies + // v2 uses dependencies and packages + // v3 only uses packages + const shouldPatchDependencies = lockfileVersion === 1 || lockfileVersion === 2; + const shouldPatchPackages = lockfileVersion === 2 || lockfileVersion === 3; + if (shouldPatchDependencies && !lockfileParsed.dependencies || shouldPatchPackages && !lockfileParsed.packages) { + // invalid lockfile so bail + return; + } + const missingSwcPkgs = []; + let pkgPrefix; + if (shouldPatchPackages) { + pkgPrefix = ''; + for (const pkg of Object.keys(lockfileParsed.packages)){ + if (pkg.endsWith('node_modules/next')) { + pkgPrefix = pkg.substring(0, pkg.length - 4); + } + } + if (!pkgPrefix) { + // unable to locate the next package so bail + return; + } + } + for (const pkg of expectedSwcPkgs){ + if (shouldPatchDependencies && !lockfileParsed.dependencies[pkg] || shouldPatchPackages && !lockfileParsed.packages[`${pkgPrefix}${pkg}`]) { + missingSwcPkgs.push(pkg); + } + } + if (missingSwcPkgs.length === 0) { + return; + } + _log.warn(`Found lockfile missing swc dependencies,`, _ciinfo.isCI ? 'run next locally to automatically patch' : 'patching...'); + if (_ciinfo.isCI) { + // no point in updating in CI as the user can't save the patch + return; + } + const pkgsData = await Promise.all(missingSwcPkgs.map((pkg)=>fetchPkgInfo(pkg))); + for(let i = 0; i < pkgsData.length; i++){ + const pkg = missingSwcPkgs[i]; + const pkgData = pkgsData[i]; + if (shouldPatchDependencies) { + patchDependency(pkg, pkgData); + } + if (shouldPatchPackages) { + patchPackage(`${pkgPrefix}${pkg}`, pkgData); + } + } + await _fs.promises.writeFile(lockfilePath, JSON.stringify(lockfileParsed, null, 2) + endingNewline); + _log.warn('Lockfile was successfully patched, please run "npm install" to ensure @next/swc dependencies are downloaded'); + } catch (err) { + _log.error(`Failed to patch lockfile, please try uninstalling and reinstalling next in this workspace`); + console.error(err); + } +} + +//# sourceMappingURL=patch-incorrect-lockfile.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/pick.js b/build/node_modules/next/dist/lib/pick.js new file mode 100644 index 0000000..1b08307 --- /dev/null +++ b/build/node_modules/next/dist/lib/pick.js @@ -0,0 +1,19 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "pick", { + enumerable: true, + get: function() { + return pick; + } +}); +function pick(obj, keys) { + const newObj = {}; + for (const key of keys){ + newObj[key] = obj[key]; + } + return newObj; +} + +//# sourceMappingURL=pick.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/picocolors.js b/build/node_modules/next/dist/lib/picocolors.js new file mode 100644 index 0000000..40ffa70 --- /dev/null +++ b/build/node_modules/next/dist/lib/picocolors.js @@ -0,0 +1,177 @@ +// ISC License +// Copyright (c) 2021 Alexey Raspopov, Kostiantyn Denysov, Anton Verinov +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// +// https://github.com/alexeyraspopov/picocolors/blob/b6261487e7b81aaab2440e397a356732cad9e342/picocolors.js#L1 +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + bgBlack: null, + bgBlue: null, + bgCyan: null, + bgGreen: null, + bgMagenta: null, + bgRed: null, + bgWhite: null, + bgYellow: null, + black: null, + blue: null, + bold: null, + cyan: null, + dim: null, + gray: null, + green: null, + hidden: null, + inverse: null, + italic: null, + magenta: null, + purple: null, + red: null, + reset: null, + strikethrough: null, + underline: null, + white: null, + yellow: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + bgBlack: function() { + return bgBlack; + }, + bgBlue: function() { + return bgBlue; + }, + bgCyan: function() { + return bgCyan; + }, + bgGreen: function() { + return bgGreen; + }, + bgMagenta: function() { + return bgMagenta; + }, + bgRed: function() { + return bgRed; + }, + bgWhite: function() { + return bgWhite; + }, + bgYellow: function() { + return bgYellow; + }, + black: function() { + return black; + }, + blue: function() { + return blue; + }, + bold: function() { + return bold; + }, + cyan: function() { + return cyan; + }, + dim: function() { + return dim; + }, + gray: function() { + return gray; + }, + green: function() { + return green; + }, + hidden: function() { + return hidden; + }, + inverse: function() { + return inverse; + }, + italic: function() { + return italic; + }, + magenta: function() { + return magenta; + }, + purple: function() { + return purple; + }, + red: function() { + return red; + }, + reset: function() { + return reset; + }, + strikethrough: function() { + return strikethrough; + }, + underline: function() { + return underline; + }, + white: function() { + return white; + }, + yellow: function() { + return yellow; + } +}); +var _globalThis; +const { env, stdout } = ((_globalThis = globalThis) == null ? void 0 : _globalThis.process) ?? {}; +const enabled = env && !env.NO_COLOR && (env.FORCE_COLOR || (stdout == null ? void 0 : stdout.isTTY) && !env.CI && env.TERM !== 'dumb'); +const replaceClose = (str, close, replace, index)=>{ + const start = str.substring(0, index) + replace; + const end = str.substring(index + close.length); + const nextIndex = end.indexOf(close); + return ~nextIndex ? start + replaceClose(end, close, replace, nextIndex) : start + end; +}; +const formatter = (open, close, replace = open)=>{ + if (!enabled) return String; + return (input)=>{ + const string = '' + input; + const index = string.indexOf(close, open.length); + return ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close; + }; +}; +const reset = enabled ? (s)=>`\x1b[0m${s}\x1b[0m` : String; +const bold = formatter('\x1b[1m', '\x1b[22m', '\x1b[22m\x1b[1m'); +const dim = formatter('\x1b[2m', '\x1b[22m', '\x1b[22m\x1b[2m'); +const italic = formatter('\x1b[3m', '\x1b[23m'); +const underline = formatter('\x1b[4m', '\x1b[24m'); +const inverse = formatter('\x1b[7m', '\x1b[27m'); +const hidden = formatter('\x1b[8m', '\x1b[28m'); +const strikethrough = formatter('\x1b[9m', '\x1b[29m'); +const black = formatter('\x1b[30m', '\x1b[39m'); +const red = formatter('\x1b[31m', '\x1b[39m'); +const green = formatter('\x1b[32m', '\x1b[39m'); +const yellow = formatter('\x1b[33m', '\x1b[39m'); +const blue = formatter('\x1b[34m', '\x1b[39m'); +const magenta = formatter('\x1b[35m', '\x1b[39m'); +const purple = formatter('\x1b[38;2;173;127;168m', '\x1b[39m'); +const cyan = formatter('\x1b[36m', '\x1b[39m'); +const white = formatter('\x1b[37m', '\x1b[39m'); +const gray = formatter('\x1b[90m', '\x1b[39m'); +const bgBlack = formatter('\x1b[40m', '\x1b[49m'); +const bgRed = formatter('\x1b[41m', '\x1b[49m'); +const bgGreen = formatter('\x1b[42m', '\x1b[49m'); +const bgYellow = formatter('\x1b[43m', '\x1b[49m'); +const bgBlue = formatter('\x1b[44m', '\x1b[49m'); +const bgMagenta = formatter('\x1b[45m', '\x1b[49m'); +const bgCyan = formatter('\x1b[46m', '\x1b[49m'); +const bgWhite = formatter('\x1b[47m', '\x1b[49m'); + +//# sourceMappingURL=picocolors.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/pretty-bytes.js b/build/node_modules/next/dist/lib/pretty-bytes.js new file mode 100644 index 0000000..7815ec3 --- /dev/null +++ b/build/node_modules/next/dist/lib/pretty-bytes.js @@ -0,0 +1,74 @@ +/* +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "default", { + enumerable: true, + get: function() { + return prettyBytes; + } +}); +const UNITS = [ + 'B', + 'kB', + 'MB', + 'GB', + 'TB', + 'PB', + 'EB', + 'ZB', + 'YB' +]; +/* +Formats the given number using `Number#toLocaleString`. +- If locale is a string, the value is expected to be a locale-key (for example: `de`). +- If locale is true, the system default locale is used for translation. +- If no value for locale is specified, the number is returned unmodified. +*/ const toLocaleString = (number, locale)=>{ + let result = number; + if (typeof locale === 'string') { + result = number.toLocaleString(locale); + } else if (locale === true) { + result = number.toLocaleString(); + } + return result; +}; +function prettyBytes(number, options) { + if (!Number.isFinite(number)) { + throw Object.defineProperty(new TypeError(`Expected a finite number, got ${typeof number}: ${number}`), "__NEXT_ERROR_CODE", { + value: "E572", + enumerable: false, + configurable: true + }); + } + options = Object.assign({}, options); + if (options.signed && number === 0) { + return ' 0 B'; + } + const isNegative = number < 0; + const prefix = isNegative ? '-' : options.signed ? '+' : ''; + if (isNegative) { + number = -number; + } + if (number < 1) { + const numberString = toLocaleString(number, options.locale); + return prefix + numberString + ' B'; + } + const exponent = Math.min(Math.floor(Math.log10(number) / 3), UNITS.length - 1); + number = Number((number / Math.pow(1000, exponent)).toPrecision(3)); + const numberString = toLocaleString(number, options.locale); + const unit = UNITS[exponent]; + return prefix + numberString + ' ' + unit; +} + +//# sourceMappingURL=pretty-bytes.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/realpath.js b/build/node_modules/next/dist/lib/realpath.js new file mode 100644 index 0000000..7068767 --- /dev/null +++ b/build/node_modules/next/dist/lib/realpath.js @@ -0,0 +1,20 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "realpathSync", { + enumerable: true, + get: function() { + return realpathSync; + } +}); +const _fs = /*#__PURE__*/ _interop_require_default(require("fs")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const isWindows = process.platform === 'win32'; +const realpathSync = isWindows ? _fs.default.realpathSync : _fs.default.realpathSync.native; + +//# sourceMappingURL=realpath.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/recursive-copy.js b/build/node_modules/next/dist/lib/recursive-copy.js new file mode 100644 index 0000000..9317eb2 --- /dev/null +++ b/build/node_modules/next/dist/lib/recursive-copy.js @@ -0,0 +1,76 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "recursiveCopy", { + enumerable: true, + get: function() { + return recursiveCopy; + } +}); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _fs = require("fs"); +const _asyncsema = require("next/dist/compiled/async-sema"); +const _iserror = /*#__PURE__*/ _interop_require_default(require("./is-error")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const COPYFILE_EXCL = _fs.constants.COPYFILE_EXCL; +async function recursiveCopy(source, dest, { concurrency = 32, overwrite = false, filter = ()=>true } = {}) { + const cwdPath = process.cwd(); + const from = _path.default.resolve(cwdPath, source); + const to = _path.default.resolve(cwdPath, dest); + const sema = new _asyncsema.Sema(concurrency); + // deep copy the file/directory + async function _copy(item, lstats) { + const target = item.replace(from, to); + await sema.acquire(); + if (!lstats) { + // after lock on first run + lstats = await _fs.promises.lstat(from); + } + // readdir & lstat do not follow symbolic links + // if part is a symbolic link, follow it with stat + let isFile = lstats.isFile(); + let isDirectory = lstats.isDirectory(); + if (lstats.isSymbolicLink()) { + const stats = await _fs.promises.stat(item); + isFile = stats.isFile(); + isDirectory = stats.isDirectory(); + } + if (isDirectory) { + try { + await _fs.promises.mkdir(target, { + recursive: true + }); + } catch (err) { + // do not throw `folder already exists` errors + if ((0, _iserror.default)(err) && err.code !== 'EEXIST') { + throw err; + } + } + sema.release(); + const files = await _fs.promises.readdir(item, { + withFileTypes: true + }); + await Promise.all(files.map((file)=>_copy(_path.default.join(item, file.name), file))); + } else if (isFile && // before we send the path to filter + // we remove the base path (from) and replace \ by / (windows) + filter(item.replace(from, '').replace(/\\/g, '/'))) { + await _fs.promises.copyFile(item, target, overwrite ? undefined : COPYFILE_EXCL).catch((err)=>{ + // if overwrite is false we shouldn't fail on EEXIST + if (err.code !== 'EEXIST') { + throw err; + } + }); + sema.release(); + } else { + sema.release(); + } + } + await _copy(from); +} + +//# sourceMappingURL=recursive-copy.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/recursive-delete.js b/build/node_modules/next/dist/lib/recursive-delete.js new file mode 100644 index 0000000..164341f --- /dev/null +++ b/build/node_modules/next/dist/lib/recursive-delete.js @@ -0,0 +1,137 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + calcBackoffMs: null, + recursiveDeleteSyncWithAsyncRetries: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + calcBackoffMs: function() { + return calcBackoffMs; + }, + recursiveDeleteSyncWithAsyncRetries: function() { + return recursiveDeleteSyncWithAsyncRetries; + } +}); +const _nodefs = /*#__PURE__*/ _interop_require_wildcard(require("node:fs")); +const _nodepath = require("node:path"); +const _iserror = /*#__PURE__*/ _interop_require_default(require("./is-error")); +const _wait = require("./wait"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +// We use an exponential backoff. See the unit test for example values. +// +// - Node's `fs` module uses a linear backoff, starting with 100ms. +// - Rust tries 64 times with only a `thread::yield_now` in between. +// +// We want something more aggressive, as `recursiveDelete` is in the critical +// path of `next dev` and `next build` startup. +const INITIAL_RETRY_MS = 8; +const MAX_RETRY_MS = 64; +const MAX_RETRIES = 6; +function calcBackoffMs(attempt) { + return Math.min(INITIAL_RETRY_MS * Math.pow(2, attempt), MAX_RETRY_MS); +} +function unlinkPath(p, isDir = false, attempt = 0) { + try { + if (isDir) { + _nodefs.rmdirSync(p); + } else { + _nodefs.unlinkSync(p); + } + } catch (e) { + const code = (0, _iserror.default)(e) && e.code; + if ((code === 'EBUSY' || code === 'ENOTEMPTY' || code === 'EPERM' || code === 'EMFILE') && attempt < MAX_RETRIES) { + // retrying is unlikely to succeed on POSIX platforms, but Windows can + // fail due to temporarily-open files + return (async ()=>{ + await (0, _wait.wait)(calcBackoffMs(attempt)); + return unlinkPath(p, isDir, attempt + 1); + })(); + } + if (code === 'ENOENT') { + return; + } + throw e; + } +} +async function recursiveDeleteSyncWithAsyncRetries(/** Directory to delete the contents of */ dir, /** Exclude based on relative file path */ exclude, /** Relative path to the directory being deleted, used for exclude */ previousPath = '') { + let result; + try { + result = _nodefs.readdirSync(dir, { + withFileTypes: true + }); + } catch (e) { + if ((0, _iserror.default)(e) && e.code === 'ENOENT') { + return; + } + throw e; + } + await Promise.all(result.map(async (part)=>{ + const absolutePath = (0, _nodepath.join)(dir, part.name); + const pp = (0, _nodepath.join)(previousPath, part.name); + const isNotExcluded = !exclude || !exclude.test(pp); + if (isNotExcluded) { + // Note: readdir does not follow symbolic links, that's good: we want to + // delete the links and not the destination. + let isDirectory = part.isDirectory(); + if (isDirectory) { + await recursiveDeleteSyncWithAsyncRetries(absolutePath, exclude, pp); + } + return unlinkPath(absolutePath, isDirectory); + } + })); +} + +//# sourceMappingURL=recursive-delete.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/recursive-readdir.js b/build/node_modules/next/dist/lib/recursive-readdir.js new file mode 100644 index 0000000..570e184 --- /dev/null +++ b/build/node_modules/next/dist/lib/recursive-readdir.js @@ -0,0 +1,124 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "recursiveReadDir", { + enumerable: true, + get: function() { + return recursiveReadDir; + } +}); +const _promises = /*#__PURE__*/ _interop_require_default(require("fs/promises")); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +async function recursiveReadDir(rootDirectory, options = {}) { + // Grab our options. + const { pathnameFilter, ignoreFilter, ignorePartFilter, sortPathnames = true, relativePathnames = true } = options; + // The list of pathnames to return. + const pathnames = []; + /** + * Coerces the pathname to be relative if requested. + */ const coerce = relativePathnames ? (pathname)=>pathname.replace(rootDirectory, '') : (pathname)=>pathname; + // The queue of directories to scan. + let directories = [ + rootDirectory + ]; + while(directories.length > 0){ + // Load all the files in each directory at the same time. + const results = await Promise.all(directories.map(async (directory)=>{ + const result = { + directories: [], + pathnames: [], + links: [] + }; + try { + const dir = await _promises.default.readdir(directory, { + withFileTypes: true + }); + for (const file of dir){ + // If enabled, ignore the file if it matches the ignore filter. + if (ignorePartFilter && ignorePartFilter(file.name)) { + continue; + } + // Handle each file. + const absolutePathname = _path.default.join(directory, file.name); + // If enabled, ignore the file if it matches the ignore filter. + if (ignoreFilter && ignoreFilter(absolutePathname)) { + continue; + } + // If the file is a directory, then add it to the list of directories, + // they'll be scanned on a later pass. + if (file.isDirectory()) { + result.directories.push(absolutePathname); + } else if (file.isSymbolicLink()) { + result.links.push(absolutePathname); + } else if (!pathnameFilter || pathnameFilter(absolutePathname)) { + result.pathnames.push(coerce(absolutePathname)); + } + } + } catch (err) { + // This can only happen when the underlying directory was removed. If + // anything other than this error occurs, re-throw it. + // if (err.code !== 'ENOENT') throw err + if (err.code !== 'ENOENT' || directory === rootDirectory) throw err; + // The error occurred, so abandon reading this directory. + return null; + } + return result; + })); + // Empty the directories, we'll fill it later if some of the files are + // directories. + directories = []; + // Keep track of any symbolic links we find, we'll resolve them later. + const links = []; + // For each result of directory scans... + for (const result of results){ + // If the directory was removed, then skip it. + if (!result) continue; + // Add any directories to the list of directories to scan. + directories.push(...result.directories); + // Add any symbolic links to the list of symbolic links to resolve. + links.push(...result.links); + // Add any file pathnames to the list of pathnames. + pathnames.push(...result.pathnames); + } + // Resolve all the symbolic links we found if any. + if (links.length > 0) { + const resolved = await Promise.all(links.map(async (absolutePathname)=>{ + try { + return await _promises.default.stat(absolutePathname); + } catch (err) { + // This can only happen when the underlying link was removed. If + // anything other than this error occurs, re-throw it. + if (err.code !== 'ENOENT') throw err; + // The error occurred, so abandon reading this directory. + return null; + } + })); + for(let i = 0; i < links.length; i++){ + const stats = resolved[i]; + // If the link was removed, then skip it. + if (!stats) continue; + // We would have already ignored the file if it matched the ignore + // filter, so we don't need to check it again. + const absolutePathname = links[i]; + if (stats.isDirectory()) { + directories.push(absolutePathname); + } else if (!pathnameFilter || pathnameFilter(absolutePathname)) { + pathnames.push(coerce(absolutePathname)); + } + } + } + } + // Sort the pathnames in place if requested. + if (sortPathnames) { + pathnames.sort(); + } + return pathnames; +} + +//# sourceMappingURL=recursive-readdir.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/redirect-status.js b/build/node_modules/next/dist/lib/redirect-status.js new file mode 100644 index 0000000..802b9b3 --- /dev/null +++ b/build/node_modules/next/dist/lib/redirect-status.js @@ -0,0 +1,46 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + allowedStatusCodes: null, + getRedirectStatus: null, + modifyRouteRegex: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + allowedStatusCodes: function() { + return allowedStatusCodes; + }, + getRedirectStatus: function() { + return getRedirectStatus; + }, + modifyRouteRegex: function() { + return modifyRouteRegex; + } +}); +const _redirectstatuscode = require("../client/components/redirect-status-code"); +const allowedStatusCodes = new Set([ + 301, + 302, + 303, + 307, + 308 +]); +function getRedirectStatus(route) { + return route.statusCode || (route.permanent ? _redirectstatuscode.RedirectStatusCode.PermanentRedirect : _redirectstatuscode.RedirectStatusCode.TemporaryRedirect); +} +function modifyRouteRegex(regex, restrictedPaths) { + if (restrictedPaths) { + regex = regex.replace(/\^/, `^(?!${restrictedPaths.map((path)=>path.replace(/\//g, '\\/')).join('|')})`); + } + regex = regex.replace(/\$$/, '(?:\\/)?$'); + return regex; +} + +//# sourceMappingURL=redirect-status.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/require-instrumentation-client.js b/build/node_modules/next/dist/lib/require-instrumentation-client.js new file mode 100644 index 0000000..1de9300 --- /dev/null +++ b/build/node_modules/next/dist/lib/require-instrumentation-client.js @@ -0,0 +1,26 @@ +/** + * This module imports the client instrumentation hook from the project root. + * + * The `private-next-instrumentation-client` module is automatically aliased to + * the `instrumentation-client.ts` file in the project root by webpack or turbopack. + */ "use strict"; +if (process.env.NODE_ENV === 'development') { + const measureName = 'Client Instrumentation Hook'; + const startTime = performance.now(); + // eslint-disable-next-line @next/internal/typechecked-require -- Not a module. + module.exports = require('private-next-instrumentation-client'); + const endTime = performance.now(); + const duration = endTime - startTime; + // Using 16ms threshold as it represents one frame (1000ms/60fps) + // This helps identify if the instrumentation hook initialization + // could potentially cause frame drops during development. + const THRESHOLD = 16; + if (duration > THRESHOLD) { + console.log(`[${measureName}] Slow execution detected: ${duration.toFixed(0)}ms (Note: Code download overhead is not included in this measurement)`); + } +} else { + // eslint-disable-next-line @next/internal/typechecked-require -- Not a module. + module.exports = require('private-next-instrumentation-client'); +} + +//# sourceMappingURL=require-instrumentation-client.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/resolve-build-paths.js b/build/node_modules/next/dist/lib/resolve-build-paths.js new file mode 100644 index 0000000..b835de9 --- /dev/null +++ b/build/node_modules/next/dist/lib/resolve-build-paths.js @@ -0,0 +1,154 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + parseBuildPathsInput: null, + resolveBuildPaths: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + parseBuildPathsInput: function() { + return parseBuildPathsInput; + }, + resolveBuildPaths: function() { + return resolveBuildPaths; + } +}); +const _util = require("util"); +const _glob = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/glob")); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("../build/output/log")); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _fs = /*#__PURE__*/ _interop_require_default(require("fs")); +const _iserror = /*#__PURE__*/ _interop_require_default(require("./is-error")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +const glob = (0, _util.promisify)(_glob.default); +/** + * Escapes Next.js dynamic route bracket expressions so glob treats them as + * literal directory names rather than character classes. + * + * e.g., "app/blog/[slug]/** /page.tsx" → "app/blog/\[slug\]/** /page.tsx" + */ function escapeBrackets(pattern) { + // Match Next.js dynamic route patterns: [name], [...name], [[...name]] + return pattern.replace(/\[\[?\.\.\.[^\]]+\]?\]|\[[^\]]+\]/g, (match)=>match.replace(/\[/g, '\\[').replace(/\]/g, '\\]')); +} +async function resolveBuildPaths(patterns, projectDir) { + const appPaths = new Set(); + const pagePaths = new Set(); + const includePatterns = []; + const excludePatterns = []; + for (const pattern of patterns){ + const trimmed = pattern.trim(); + if (!trimmed) continue; + if (trimmed.startsWith('!')) { + excludePatterns.push(escapeBrackets(trimmed.slice(1))); + } else { + includePatterns.push(escapeBrackets(trimmed)); + } + } + // Default to matching all files when only negation patterns are provided. + if (includePatterns.length === 0 && excludePatterns.length > 0) { + includePatterns.push('**'); + } + // Combine patterns using brace expansion: {pattern1,pattern2} + const combinedPattern = includePatterns.length === 1 ? includePatterns[0] : `{${includePatterns.join(',')}}`; + try { + const matches = await glob(combinedPattern, { + cwd: projectDir, + ignore: excludePatterns + }); + if (matches.length === 0) { + _log.warn(`Pattern "${patterns.join(',')}" did not match any files`); + } + for (const file of matches){ + if (!_fs.default.statSync(_path.default.join(projectDir, file)).isDirectory()) { + categorizeAndAddPath(file, appPaths, pagePaths); + } + } + } catch (error) { + throw Object.defineProperty(new Error(`Failed to resolve pattern "${patterns.join(',')}": ${(0, _iserror.default)(error) ? error.message : String(error)}`), "__NEXT_ERROR_CODE", { + value: "E972", + enumerable: false, + configurable: true + }); + } + return { + appPaths: Array.from(appPaths).sort(), + pagePaths: Array.from(pagePaths).sort() + }; +} +/** + * Categorizes a file path to either app or pages router based on its prefix. + * For app router, only route-defining files (page.*, route.*) are included. + * + * Examples: + * - "app/page.tsx" → appPaths.add("/page.tsx") + * - "app/layout.tsx" → skipped (not a route file) + * - "pages/index.tsx" → pagePaths.add("/index.tsx") + */ function categorizeAndAddPath(filePath, appPaths, pagePaths) { + const normalized = filePath.replace(/\\/g, '/'); + if (normalized.startsWith('app/')) { + // Only include route-defining files (page.* or route.*) + if (/\/(page|route)\.[^/]+$/.test(normalized)) { + appPaths.add('/' + normalized.slice(4)); + } + } else if (normalized.startsWith('pages/')) { + pagePaths.add('/' + normalized.slice(6)); + } +} +function parseBuildPathsInput(input) { + // Comma-separated values + return input.split(',').map((p)=>p.trim()).filter((p)=>p.length > 0); +} + +//# sourceMappingURL=resolve-build-paths.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/resolve-from.js b/build/node_modules/next/dist/lib/resolve-from.js new file mode 100644 index 0000000..f45b6a6 --- /dev/null +++ b/build/node_modules/next/dist/lib/resolve-from.js @@ -0,0 +1,65 @@ +// source: https://github.com/sindresorhus/resolve-from +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "resolveFrom", { + enumerable: true, + get: function() { + return resolveFrom; + } +}); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _iserror = /*#__PURE__*/ _interop_require_default(require("./is-error")); +const _realpath = require("./realpath"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const Module = require('module'); +const resolveFrom = (fromDirectory, moduleId, silent)=>{ + if (typeof fromDirectory !== 'string') { + throw Object.defineProperty(new TypeError(`Expected \`fromDir\` to be of type \`string\`, got \`${typeof fromDirectory}\``), "__NEXT_ERROR_CODE", { + value: "E537", + enumerable: false, + configurable: true + }); + } + if (typeof moduleId !== 'string') { + throw Object.defineProperty(new TypeError(`Expected \`moduleId\` to be of type \`string\`, got \`${typeof moduleId}\``), "__NEXT_ERROR_CODE", { + value: "E565", + enumerable: false, + configurable: true + }); + } + try { + fromDirectory = (0, _realpath.realpathSync)(fromDirectory); + } catch (error) { + if ((0, _iserror.default)(error) && error.code === 'ENOENT') { + fromDirectory = _path.default.resolve(fromDirectory); + } else if (silent) { + return; + } else { + throw error; + } + } + const fromFile = _path.default.join(fromDirectory, 'noop.js'); + const resolveFileName = ()=>// @ts-expect-error + Module._resolveFilename(moduleId, { + id: fromFile, + filename: fromFile, + paths: // @ts-expect-error + Module._nodeModulePaths(fromDirectory) + }); + if (silent) { + try { + return resolveFileName(); + } catch (error) { + return; + } + } + return resolveFileName(); +}; + +//# sourceMappingURL=resolve-from.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/route-pattern-normalizer.js b/build/node_modules/next/dist/lib/route-pattern-normalizer.js new file mode 100644 index 0000000..4c5fa07 --- /dev/null +++ b/build/node_modules/next/dist/lib/route-pattern-normalizer.js @@ -0,0 +1,107 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + PARAM_SEPARATOR: null, + hasAdjacentParameterIssues: null, + normalizeAdjacentParameters: null, + normalizeTokensForRegexp: null, + stripNormalizedSeparators: null, + stripParameterSeparators: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + PARAM_SEPARATOR: function() { + return PARAM_SEPARATOR; + }, + hasAdjacentParameterIssues: function() { + return hasAdjacentParameterIssues; + }, + normalizeAdjacentParameters: function() { + return normalizeAdjacentParameters; + }, + normalizeTokensForRegexp: function() { + return normalizeTokensForRegexp; + }, + stripNormalizedSeparators: function() { + return stripNormalizedSeparators; + }, + stripParameterSeparators: function() { + return stripParameterSeparators; + } +}); +const PARAM_SEPARATOR = '_NEXTSEP_'; +function hasAdjacentParameterIssues(route) { + if (typeof route !== 'string') return false; + // Check for interception route markers followed immediately by parameters + // Pattern: /(.):param, /(..):param, /(...):param, /(.)(.):param etc. + // These patterns cause "Must have text between two parameters" errors + if (/\/\(\.{1,3}\):[^/\s]+/.test(route)) { + return true; + } + // Check for basic adjacent parameters without separators + // Pattern: :param1:param2 (but not :param* or other URL patterns) + if (/:[a-zA-Z_][a-zA-Z0-9_]*:[a-zA-Z_][a-zA-Z0-9_]*/.test(route)) { + return true; + } + return false; +} +function normalizeAdjacentParameters(route) { + let normalized = route; + // Handle interception route patterns: (.):param -> (.)_NEXTSEP_:param + normalized = normalized.replace(/(\([^)]*\)):([^/\s]+)/g, `$1${PARAM_SEPARATOR}:$2`); + // Handle other adjacent parameter patterns: :param1:param2 -> :param1_NEXTSEP_:param2 + normalized = normalized.replace(/:([^:/\s)]+)(?=:)/g, `:$1${PARAM_SEPARATOR}`); + return normalized; +} +function normalizeTokensForRegexp(tokens) { + return tokens.map((token)=>{ + // Token union type: Token = string | TokenObject + // Literal path segments are strings, parameters/wildcards are objects + if (typeof token === 'object' && token !== null && // Not all token objects have 'modifier' property (e.g., simple text tokens) + 'modifier' in token && // Only repeating modifiers (* or +) cause the validation error + // Other modifiers like '?' (optional) are fine + (token.modifier === '*' || token.modifier === '+') && // Token objects can have different shapes depending on route pattern + 'prefix' in token && 'suffix' in token && // Both prefix and suffix must be empty strings + // This is what causes the validation error in path-to-regexp + token.prefix === '' && token.suffix === '') { + // Add minimal prefix to satisfy path-to-regexp validation + // We use '/' as it's the most common path delimiter and won't break route matching + // The prefix gets used in regex generation but doesn't affect parameter extraction + return { + ...token, + prefix: '/' + }; + } + return token; + }); +} +function stripNormalizedSeparators(pathname) { + // Remove separator after interception route markers + // Pattern: (.)_NEXTSEP_ -> (.), (..)_NEXTSEP_ -> (..), etc. + // The separator appears after the closing paren of interception markers + return pathname.replace(new RegExp(`\\)${PARAM_SEPARATOR}`, 'g'), ')'); +} +function stripParameterSeparators(params) { + const cleaned = {}; + for (const [key, value] of Object.entries(params)){ + if (typeof value === 'string') { + // Remove the separator if it appears at the start of parameter values + cleaned[key] = value.replace(new RegExp(`^${PARAM_SEPARATOR}`), ''); + } else if (Array.isArray(value)) { + // Handle array parameters (from repeated route segments) + cleaned[key] = value.map((item)=>typeof item === 'string' ? item.replace(new RegExp(`^${PARAM_SEPARATOR}`), '') : item); + } else { + cleaned[key] = value; + } + } + return cleaned; +} + +//# sourceMappingURL=route-pattern-normalizer.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/scheduler.js b/build/node_modules/next/dist/lib/scheduler.js new file mode 100644 index 0000000..6a9be0c --- /dev/null +++ b/build/node_modules/next/dist/lib/scheduler.js @@ -0,0 +1,64 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + atLeastOneTask: null, + scheduleImmediate: null, + scheduleOnNextTick: null, + waitAtLeastOneReactRenderTask: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + atLeastOneTask: function() { + return atLeastOneTask; + }, + scheduleImmediate: function() { + return scheduleImmediate; + }, + scheduleOnNextTick: function() { + return scheduleOnNextTick; + }, + waitAtLeastOneReactRenderTask: function() { + return waitAtLeastOneReactRenderTask; + } +}); +const scheduleOnNextTick = (cb)=>{ + // We use Promise.resolve().then() here so that the operation is scheduled at + // the end of the promise job queue, we then add it to the next process tick + // to ensure it's evaluated afterwards. + // + // This was inspired by the implementation of the DataLoader interface: https://github.com/graphql/dataloader/blob/d336bd15282664e0be4b4a657cb796f09bafbc6b/src/index.js#L213-L255 + // + Promise.resolve().then(()=>{ + if (process.env.NEXT_RUNTIME === 'edge') { + setTimeout(cb, 0); + } else { + process.nextTick(cb); + } + }); +}; +const scheduleImmediate = (cb)=>{ + if (process.env.NEXT_RUNTIME === 'edge') { + setTimeout(cb, 0); + } else { + setImmediate(cb); + } +}; +function atLeastOneTask() { + return new Promise((resolve)=>scheduleImmediate(resolve)); +} +function waitAtLeastOneReactRenderTask() { + if (process.env.NEXT_RUNTIME === 'edge') { + return new Promise((r)=>setTimeout(r, 0)); + } else { + return new Promise((r)=>setImmediate(r)); + } +} + +//# sourceMappingURL=scheduler.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/semver-noop.js b/build/node_modules/next/dist/lib/semver-noop.js new file mode 100644 index 0000000..720199e --- /dev/null +++ b/build/node_modules/next/dist/lib/semver-noop.js @@ -0,0 +1,18 @@ +// DO NOT MODIFY THIS FILE DIRECTLY +// It's for aliasing the `semver` package to be a noop for the `jsonwebtoken` package. +// We're trying to minimize the size of the worker bundle. +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "satisfies", { + enumerable: true, + get: function() { + return satisfies; + } +}); +function satisfies() { + return true; +} + +//# sourceMappingURL=semver-noop.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/server-external-packages.jsonc b/build/node_modules/next/dist/lib/server-external-packages.jsonc new file mode 100644 index 0000000..fd596dd --- /dev/null +++ b/build/node_modules/next/dist/lib/server-external-packages.jsonc @@ -0,0 +1,103 @@ +[ + // alineacms.com generates this package at build time and it should not end up in a cache (much like the @prisma/client package) + "@alinea/generated", + "@appsignal/nodejs", + "@aws-sdk/client-s3", + "@aws-sdk/s3-presigned-post", + "@blockfrost/blockfrost-js", + "@highlight-run/node", + "@huggingface/transformers", + "@jpg-store/lucid-cardano", + "@libsql/client", + "@mikro-orm/core", + "@mikro-orm/knex", + "@node-rs/argon2", + "@node-rs/bcrypt", + "@prisma/client", + "@react-pdf/renderer", + // Native Node.js addons + "@sentry/profiling-node", + "@sparticuz/chromium", + "@sparticuz/chromium-min", + // Native Node.js addons + "@statsig/statsig-node-core", + // Native Node.js addons + "@swc/core", + "@xenova/transformers", + // Builds on top of @prisma/client so dynamically loads the version. + "@zenstackhq/runtime", + "argon2", + "autoprefixer", + "aws-crt", + "bcrypt", + "better-sqlite3", + "canvas", + "chromadb-default-embed", + // Contains an unconditional require to a undeclared dependency 'coffee-script' + "config", + // Native Node.js addons + "cpu-features", + "cypress", + "dd-trace", + "eslint", + "express", + "firebase-admin", + "htmlrewriter", + // Patches the module system to shim modules + "import-in-the-middle", + // Native Node.js addons + "isolated-vm", + "jest", + "jsdom", + // Used to contain a very dynamic require to load the DB backend: + // https://github.com/jaredwray/keyv/blob/78b247b5b7a8c9b12154fbfae4295d6fb29158cf/packages/keyv/src/index.js#L22 + "keyv", + "libsql", + "mdx-bundler", + "mongodb", + "mongoose", + "newrelic", + "next-mdx-remote", + "next-seo", + "node-cron", + "node-pty", + "node-web-audio-api", + "onnxruntime-node", + "oslo", + "pg", + // pino@10.1.0/lib/transport.js passes `join(__dirname, 'worker.js')` to thread-stream which ends + // up `require`ing that filepath, leading to + // `Cannot find module '/ROOT/node_modules/.pnpm/pino@10.1.0/node_modules/pino/lib/worker.js'` + "pino", + // A "plugin" that is passed to pino as a string (and is then required in a worker) + "pino-pretty", + // A "plugin" that is passed to pino as a string (and is then required in a worker) + "pino-roll", + "playwright", + "playwright-core", + "postcss", + "prettier", + "prisma", + "puppeteer", + "puppeteer-core", + "ravendb", + // Patches the module system to shim modules + "require-in-the-middle", + "rimraf", + // Native Node.js addons + "sharp", + "shiki", + "sqlite3", + // dynamic `new Worker` call in thread-stream@3.1.0/index.js which pulls in various non-code files + // as well (trying to parse README and invalid test files) + "thread-stream", + // Slow to compile because it pulls in typescript + "ts-morph", + "ts-node", + "typescript", + "vscode-oniguruma", + "webpack", + "websocket", + // Native Node.js addons + "zeromq", +] diff --git a/build/node_modules/next/dist/lib/setup-exception-listeners.js b/build/node_modules/next/dist/lib/setup-exception-listeners.js new file mode 100644 index 0000000..3683cbc --- /dev/null +++ b/build/node_modules/next/dist/lib/setup-exception-listeners.js @@ -0,0 +1,11 @@ +"use strict"; +process.on('uncaughtException', (err)=>{ + console.error('uncaughtException', err); + process.exit(1); +}); +process.on('unhandledRejection', (err)=>{ + console.error('unhandledRejection', err); + process.exit(1); +}); + +//# sourceMappingURL=setup-exception-listeners.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/static-env.js b/build/node_modules/next/dist/lib/static-env.js new file mode 100644 index 0000000..d13b8b3 --- /dev/null +++ b/build/node_modules/next/dist/lib/static-env.js @@ -0,0 +1,92 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getNextConfigEnv: null, + getNextPublicEnvironmentVariables: null, + getStaticEnv: null, + populateStaticEnv: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getNextConfigEnv: function() { + return getNextConfigEnv; + }, + getNextPublicEnvironmentVariables: function() { + return getNextPublicEnvironmentVariables; + }, + getStaticEnv: function() { + return getStaticEnv; + }, + populateStaticEnv: function() { + return populateStaticEnv; + } +}); +function errorIfEnvConflicted(config, key) { + const isPrivateKey = /^(?:NODE_.+)|^(?:__.+)$/i.test(key); + const hasNextRuntimeKey = key === 'NEXT_RUNTIME'; + if (isPrivateKey || hasNextRuntimeKey) { + throw Object.defineProperty(new Error(`The key "${key}" under "env" in ${config.configFileName || 'config'} is not allowed. https://nextjs.org/docs/messages/env-key-not-allowed`), "__NEXT_ERROR_CODE", { + value: "E967", + enumerable: false, + configurable: true + }); + } +} +function getNextPublicEnvironmentVariables() { + const defineEnv = []; + for(const key in process.env){ + if (key.startsWith('NEXT_PUBLIC_')) { + const value = process.env[key]; + if (value != null) { + defineEnv.push([ + `process.env.${key}`, + value + ]); + } + } + } + defineEnv.sort((a, b)=>a[0].localeCompare(b[0])); + return Object.fromEntries(defineEnv); +} +function getNextConfigEnv(config) { + // Refactored code below to use for-of + const defineEnv = {}; + const env = config.env; + for(const key in env){ + const value = env[key]; + if (value != null) { + errorIfEnvConflicted(config, key); + defineEnv[`process.env.${key}`] = value; + } + } + return defineEnv; +} +function getStaticEnv(config, deploymentId) { + const staticEnv = { + ...getNextPublicEnvironmentVariables(), + ...getNextConfigEnv(config), + 'process.env.NEXT_DEPLOYMENT_ID': deploymentId + }; + return staticEnv; +} +function populateStaticEnv(config, deploymentId) { + // since inlining comes after static generation we need + // to ensure this value is assigned to process env so it + // can still be accessed + const staticEnv = getStaticEnv(config, deploymentId); + for(const key in staticEnv){ + const innerKey = key.split('.').pop() || ''; + if (!process.env[innerKey]) { + process.env[innerKey] = staticEnv[key] || ''; + } + } +} + +//# sourceMappingURL=static-env.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/try-to-parse-path.js b/build/node_modules/next/dist/lib/try-to-parse-path.js new file mode 100644 index 0000000..eb86077 --- /dev/null +++ b/build/node_modules/next/dist/lib/try-to-parse-path.js @@ -0,0 +1,67 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "tryToParsePath", { + enumerable: true, + get: function() { + return tryToParsePath; + } +}); +const _pathtoregexp = require("next/dist/compiled/path-to-regexp"); +const _iserror = /*#__PURE__*/ _interop_require_default(require("./is-error")); +const _routepatternnormalizer = require("./route-pattern-normalizer"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +/** + * If there is an error show our error link but still show original error or + * a formatted one if we can + */ function reportError({ route, parsedPath }, err) { + let errMatches; + if ((0, _iserror.default)(err) && (errMatches = err.message.match(/at (\d{0,})/))) { + const position = parseInt(errMatches[1], 10); + console.error(`\nError parsing \`${route}\` ` + `https://nextjs.org/docs/messages/invalid-route-source\n` + `Reason: ${err.message}\n\n` + ` ${parsedPath}\n` + ` ${new Array(position).fill(' ').join('')}^\n`); + } else { + console.error(`\nError parsing ${route} https://nextjs.org/docs/messages/invalid-route-source`, err); + } +} +/** + * Safe wrapper around tokensToRegexp that handles path-to-regexp 6.3.0+ validation errors. + */ function safeTokensToRegexp(tokens) { + try { + return (0, _pathtoregexp.tokensToRegexp)(tokens); + } catch (error) { + if ((0, _iserror.default)(error)) { + // Try to normalize tokens with repeating modifiers but no prefix/suffix + const normalizedTokens = (0, _routepatternnormalizer.normalizeTokensForRegexp)(tokens); + return (0, _pathtoregexp.tokensToRegexp)(normalizedTokens); + } + throw error; + } +} +function tryToParsePath(route, options) { + const result = { + route, + parsedPath: route + }; + try { + if (options == null ? void 0 : options.handleUrl) { + const parsed = new URL(route, 'http://n'); + result.parsedPath = `${parsed.pathname}${parsed.hash || ''}`; + } + result.tokens = (0, _pathtoregexp.parse)(result.parsedPath); + // Use safe wrapper instead of proactive detection + if (result.tokens) { + result.regexStr = safeTokensToRegexp(result.tokens).source; + } + } catch (err) { + reportError(result, err); + result.error = err; + } + return result; +} + +//# sourceMappingURL=try-to-parse-path.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/turbopack-warning.js b/build/node_modules/next/dist/lib/turbopack-warning.js new file mode 100644 index 0000000..77afa86 --- /dev/null +++ b/build/node_modules/next/dist/lib/turbopack-warning.js @@ -0,0 +1,185 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "validateTurboNextConfig", { + enumerable: true, + get: function() { + return validateTurboNextConfig; + } +}); +const _config = /*#__PURE__*/ _interop_require_default(require("../server/config")); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("../build/output/log")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +const unsupportedTurbopackNextConfigOptions = [ + // Left to be implemented (priority) + // 'experimental.clientRouterFilter', + // 'experimental.optimizePackageImports', + // 'compiler.emotion', + // 'compiler.reactRemoveProperties', + // 'compiler.relay', + // 'compiler.removeConsole', + // 'compiler.styledComponents', + 'experimental.fetchCacheKeyPrefix', + // Left to be implemented + // 'excludeDefaultMomentLocales', + // 'experimental.optimizeServerReact', + 'experimental.clientRouterFilterAllowedRate', + // 'experimental.serverMinification', + // 'experimental.serverSourceMaps', + 'experimental.allowedRevalidateHeaderKeys', + 'experimental.extensionAlias', + 'experimental.fallbackNodePolyfills', + 'experimental.swcTraceProfiling', + // Left to be implemented (Might not be needed for Turbopack) + 'experimental.craCompat', + 'experimental.disablePostcssPresetEnv', + 'experimental.esmExternals', + // This is used to force swc-loader to run regardless of finding Babel. + 'experimental.forceSwcTransforms', + 'experimental.fullySpecified', + 'experimental.urlImports', + 'experimental.slowModuleDetection' +]; +async function validateTurboNextConfig({ dir, configPhase }) { + const { defaultConfig } = require('../server/config-shared'); + const { cyan, red, underline } = require('../lib/picocolors'); + const { interopDefault } = require('../lib/interop-default'); + let unsupportedParts = ''; + let hasWebpackConfig = false; + let hasTurboConfig = false; + const unsupportedConfig = []; + let rawNextConfig = {}; + try { + rawNextConfig = interopDefault(await (0, _config.default)(configPhase, dir, { + rawConfig: true + })); + if (typeof rawNextConfig === 'function') { + rawNextConfig = rawNextConfig(configPhase, { + defaultConfig + }); + } + hasWebpackConfig = Boolean(rawNextConfig.webpack); + hasTurboConfig = Boolean(rawNextConfig.turbopack); + const flattenKeys = (obj, prefix = '')=>{ + let keys = []; + for(const key in obj){ + const value = obj == null ? void 0 : obj[key]; + if (typeof value === 'undefined') { + continue; + } + const pre = prefix.length ? `${prefix}.` : ''; + if (typeof value === 'object' && !Array.isArray(value) && value !== null) { + keys = keys.concat(flattenKeys(value, pre + key)); + } else { + keys.push(pre + key); + } + } + return keys; + }; + const getDeepValue = (obj, keys)=>{ + if (typeof keys === 'string') { + keys = keys.split('.'); + } + if (keys.length === 1) { + return obj == null ? void 0 : obj[keys == null ? void 0 : keys[0]]; + } + return getDeepValue(obj == null ? void 0 : obj[keys == null ? void 0 : keys[0]], keys.slice(1)); + }; + const customKeys = flattenKeys(rawNextConfig); + for (const key of customKeys){ + if (key.startsWith('experimental.turbo')) { + hasTurboConfig = true; + } + const isUnsupported = unsupportedTurbopackNextConfigOptions.some((unsupportedKey)=>// Either the key matches (or is a more specific subkey) of + // unsupportedKey, or the key is the path to a specific subkey. + // | key | unsupportedKey | + // |---------|----------------| + // | foo | foo | + // | foo.bar | foo | + // | foo | foo.bar | + key.startsWith(unsupportedKey) || unsupportedKey.startsWith(`${key}.`)) && getDeepValue(rawNextConfig, key) !== getDeepValue(defaultConfig, key); + if (isUnsupported) { + unsupportedConfig.push(key); + } + } + } catch (e) { + _log.error('Unexpected error occurred while checking config', e); + } + // If the build was defaulted to Turbopack, we want to warn about possibly ignored webpack + // configuration. Otherwise the user explicitly picked turbopack and thus we expect that + // they have configured it correctly. + if (process.env.TURBOPACK === 'auto' && hasWebpackConfig && !hasTurboConfig) { + const configFile = rawNextConfig.configFileName ?? 'your Next config file'; + _log.error(`ERROR: This build is using Turbopack, with a \`webpack\` config and no \`turbopack\` config. + This may be a mistake. + + As of Next.js 16 Turbopack is enabled by default and + custom webpack configurations may need to be migrated to Turbopack. + + NOTE: your \`webpack\` config may have been added by a configuration plugin. + + To configure Turbopack, see https://nextjs.org/docs/app/api-reference/next-config-js/turbopack + + TIP: Many applications work fine under Turbopack with no configuration, + if that is the case for you, you can silence this error by passing the + \`--turbopack\` or \`--webpack\` flag explicitly or simply setting an + empty turbopack config in ${configFile} (e.g. \`turbopack: {}\`).`); + process.exit(1); + } + if (unsupportedConfig.length) { + unsupportedParts += `\n\n- Unsupported Next.js configuration option(s) (${cyan('next.config.js')})\n Turbopack will ignore the following configuration options:\n${unsupportedConfig.map((name)=>` - ${red(name)}\n`).join('')}`; + } + if (unsupportedParts) { + _log.error(`You are using configuration and/or tools that are not yet\nsupported by Next.js with Turbopack:\n${unsupportedParts}\n`); + _log.warn('Learn more about how to configure Turbopack with Next.js:\n' + underline('https://nextjs.org/docs/app/api-reference/config/next-config-js/turbopack')); + } + return rawNextConfig; +} + +//# sourceMappingURL=turbopack-warning.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/typescript/diagnosticFormatter.js b/build/node_modules/next/dist/lib/typescript/diagnosticFormatter.js new file mode 100644 index 0000000..764d8d1 --- /dev/null +++ b/build/node_modules/next/dist/lib/typescript/diagnosticFormatter.js @@ -0,0 +1,243 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getFormattedDiagnostic", { + enumerable: true, + get: function() { + return getFormattedDiagnostic; + } +}); +const _codeframe = require("../../shared/lib/errors/code-frame"); +const _picocolors = require("../picocolors"); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function getFormattedLinkDiagnosticMessageText(diagnostic) { + const message = diagnostic.messageText; + if (typeof message === 'string' && diagnostic.code === 2322) { + const match = message.match(/Type '"(.+)"' is not assignable to type 'RouteImpl<.+> \| UrlObject'\./) || message.match(/Type '"(.+)"' is not assignable to type 'UrlObject \| RouteImpl<.+>'\./); + if (match) { + const [, href] = match; + return `"${(0, _picocolors.bold)(href)}" is not an existing route. If it is intentional, please type it explicitly with \`as Route\`.`; + } else if (message === "Type 'string' is not assignable to type 'UrlObject'.") { + var _diagnostic_relatedInformation_, _diagnostic_relatedInformation; + const relatedMessage = (_diagnostic_relatedInformation = diagnostic.relatedInformation) == null ? void 0 : (_diagnostic_relatedInformation_ = _diagnostic_relatedInformation[0]) == null ? void 0 : _diagnostic_relatedInformation_.messageText; + if (typeof relatedMessage === 'string' && relatedMessage.match(/The expected type comes from property 'href' which is declared here on type 'IntrinsicAttributes & /)) { + return `Invalid \`href\` property of \`Link\`: the route does not exist. If it is intentional, please type it explicitly with \`as Route\`.`; + } + } + } else if (typeof message === 'string' && diagnostic.code === 2820) { + const match = message.match(/Type '"(.+)"' is not assignable to type 'RouteImpl<.+> \| UrlObject'\. Did you mean '"(.+)"'?/) || message.match(/Type '"(.+)"' is not assignable to type 'UrlObject \| RouteImpl<.+>'\. Did you mean '"(.+)"'?/); + if (match) { + const [, href, suggestion] = match; + return `"${(0, _picocolors.bold)(href)}" is not an existing route. Did you mean "${(0, _picocolors.bold)(suggestion)}" instead? If it is intentional, please type it explicitly with \`as Route\`.`; + } + } +} +function getFormattedLayoutAndPageDiagnosticMessageText(relativeSourceFilepath, diagnostic) { + const message = typeof diagnostic.messageText === 'string' ? diagnostic : diagnostic.messageText; + const messageText = message.messageText; + if (typeof messageText === 'string') { + const type = /page\.[^.]+$/.test(relativeSourceFilepath) ? 'Page' : /route\.[^.]+$/.test(relativeSourceFilepath) ? 'Route' : 'Layout'; + // Reference of error codes: + // https://github.com/Microsoft/TypeScript/blob/main/src/compiler/diagnosticMessages.json + switch(message.code){ + case 2344: + const filepathAndType = messageText.match(/typeof import\("(.+)"\)/); + if (filepathAndType) { + let main = `${type} "${(0, _picocolors.bold)(relativeSourceFilepath)}" does not match the required types of a Next.js ${type}.`; + function processNext(indent, next) { + if (!next) return; + for (const item of next){ + switch(item.code){ + case 2200: + const mismatchedField = item.messageText.match(/The types of '(.+)'/); + if (mismatchedField) { + main += '\n' + ' '.repeat(indent * 2); + main += `"${(0, _picocolors.bold)(mismatchedField[1])}" has the wrong type:`; + } + break; + case 2322: + const types = item.messageText.match(/Type '(.+)' is not assignable to type '(.+)'./); + if (types) { + main += '\n' + ' '.repeat(indent * 2); + if (types[2] === 'PageComponent' || types[2] === 'LayoutComponent') { + main += `The exported ${type} component isn't correctly typed.`; + } else { + main += `Expected "${(0, _picocolors.bold)(types[2].replace('"__invalid_negative_number__"', 'number (>= 0)'))}", got "${(0, _picocolors.bold)(types[1])}".`; + } + } + break; + case 2326: + const invalidConfig = item.messageText.match(/Types of property '(.+)' are incompatible\./); + main += '\n' + ' '.repeat(indent * 2); + main += `Invalid configuration${invalidConfig ? ` "${(0, _picocolors.bold)(invalidConfig[1])}"` : ''}:`; + break; + case 2530: + const invalidField = item.messageText.match(/Property '(.+)' is incompatible with index signature/); + if (invalidField) { + main += '\n' + ' '.repeat(indent * 2); + main += `"${(0, _picocolors.bold)(invalidField[1])}" is not a valid ${type} export field.`; + } + return; + case 2739: + const invalidProp = item.messageText.match(/Type '(.+)' is missing the following properties from type '(.+)'/); + if (invalidProp) { + if (invalidProp[1] === 'LayoutProps' || invalidProp[1] === 'PageProps') { + main += '\n' + ' '.repeat(indent * 2); + main += `Prop "${invalidProp[2]}" is incompatible with the ${type}.`; + } + } + break; + case 2559: + const invalid = item.messageText.match(/Type '(.+)' has/); + if (invalid) { + main += '\n' + ' '.repeat(indent * 2); + main += `Type "${(0, _picocolors.bold)(invalid[1])}" isn't allowed.`; + } + break; + case 2741: + const incompatPageProp = item.messageText.match(/Property '(.+)' is missing in type 'PageProps'/); + if (incompatPageProp) { + main += '\n' + ' '.repeat(indent * 2); + main += `Prop "${(0, _picocolors.bold)(incompatPageProp[1])}" will never be passed. Remove it from the component's props.`; + } else { + const extraLayoutProp = item.messageText.match(/Property '(.+)' is missing in type 'LayoutProps' but required in type '(.+)'/); + if (extraLayoutProp) { + main += '\n' + ' '.repeat(indent * 2); + main += `Prop "${(0, _picocolors.bold)(extraLayoutProp[1])}" is not valid for this Layout, remove it to fix.`; + } + } + break; + default: + } + processNext(indent + 1, item.next); + } + } + if ('next' in message) processNext(1, message.next); + return main; + } + const invalidExportFnArg = messageText.match(/Type 'OmitWithTag<(.+), .+, "(.+)">' does not satisfy the constraint/); + if (invalidExportFnArg) { + const main = `${type} "${(0, _picocolors.bold)(relativeSourceFilepath)}" has an invalid "${(0, _picocolors.bold)(invalidExportFnArg[2])}" export:\n Type "${(0, _picocolors.bold)(invalidExportFnArg[1])}" is not valid.`; + return main; + } + function processNextItems(indent, next) { + if (!next) return ''; + let result = ''; + for (const item of next){ + switch(item.code){ + case 2322: + const types = item.messageText.match(/Type '(.+)' is not assignable to type '(.+)'./); + if (types) { + result += '\n' + ' '.repeat(indent * 2); + result += `Expected "${(0, _picocolors.bold)(types[2])}", got "${(0, _picocolors.bold)(types[1])}".`; + } + break; + default: + } + result += processNextItems(indent + 1, item.next); + } + return result; + } + const invalidParamFn = messageText.match(/Type '{ __tag__: (.+); __param_position__: "(.*)"; __param_type__: (.+); }' does not satisfy/); + if (invalidParamFn) { + let main = `${type} "${(0, _picocolors.bold)(relativeSourceFilepath)}" has an invalid ${invalidParamFn[1]} export:\n Type "${(0, _picocolors.bold)(invalidParamFn[3])}" is not a valid type for the function's ${invalidParamFn[2]} argument.`; + if ('next' in message) main += processNextItems(1, message.next); + return main; + } + const invalidExportFnReturn = messageText.match(/Type '{ __tag__: "(.+)"; __return_type__: (.+); }' does not satisfy/); + if (invalidExportFnReturn) { + let main = `${type} "${(0, _picocolors.bold)(relativeSourceFilepath)}" has an invalid export:\n "${(0, _picocolors.bold)(invalidExportFnReturn[2])}" is not a valid ${invalidExportFnReturn[1]} return type:`; + if ('next' in message) main += processNextItems(1, message.next); + return main; + } + break; + case 2345: + const filepathAndInvalidExport = messageText.match(/'typeof import\("(.+)"\)'.+Impossible<"(.+)">/); + if (filepathAndInvalidExport) { + const main = `${type} "${(0, _picocolors.bold)(relativeSourceFilepath)}" exports an invalid "${(0, _picocolors.bold)(filepathAndInvalidExport[2])}" field. ${type} should only export a default React component and configuration options. Learn more: https://nextjs.org/docs/messages/invalid-segment-export`; + return main; + } + break; + case 2559: + const invalid = messageText.match(/Type '(.+)' has no properties in common with type '(.+)'/); + if (invalid) { + const main = `${type} "${(0, _picocolors.bold)(relativeSourceFilepath)}" contains an invalid type "${(0, _picocolors.bold)(invalid[1])}" as ${invalid[2]}.`; + return main; + } + break; + default: + } + } +} +function getAppEntrySourceFilePath(baseDir, diagnostic) { + var _diagnostic_file_text_trim_match, _diagnostic_file; + const sourceFilepath = ((_diagnostic_file = diagnostic.file) == null ? void 0 : (_diagnostic_file_text_trim_match = _diagnostic_file.text.trim().match(/^\/\/ File: (.+)\n/)) == null ? void 0 : _diagnostic_file_text_trim_match[1]) || ''; + return _path.default.relative(baseDir, sourceFilepath); +} +function getFormattedDiagnostic(ts, baseDir, distDir, diagnostic, isAppDirEnabled) { + var _diagnostic_file; + // If the error comes from .next/types/, we handle it specially. + const isLayoutOrPageError = isAppDirEnabled && ((_diagnostic_file = diagnostic.file) == null ? void 0 : _diagnostic_file.fileName.startsWith(_path.default.join(baseDir, distDir, 'types'))); + let message = ''; + const appPath = isLayoutOrPageError ? getAppEntrySourceFilePath(baseDir, diagnostic) : null; + const linkReason = getFormattedLinkDiagnosticMessageText(diagnostic); + const appReason = !linkReason && isLayoutOrPageError && appPath ? getFormattedLayoutAndPageDiagnosticMessageText(appPath, diagnostic) : null; + const reason = linkReason || appReason || ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n'); + const category = diagnostic.category; + switch(category){ + // Warning + case ts.DiagnosticCategory.Warning: + { + message += (0, _picocolors.yellow)((0, _picocolors.bold)('Type warning')) + ': '; + break; + } + // Error + case ts.DiagnosticCategory.Error: + { + message += (0, _picocolors.red)((0, _picocolors.bold)('Type error')) + ': '; + break; + } + // 2 = Suggestion, 3 = Message + case ts.DiagnosticCategory.Suggestion: + case ts.DiagnosticCategory.Message: + message += (0, _picocolors.cyan)((0, _picocolors.bold)(category === 2 ? 'Suggestion' : 'Info')) + ': '; + break; + default: + { + category; + } + } + message += reason + '\n'; + if (!isLayoutOrPageError && diagnostic.file) { + const pos = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start); + const line = pos.line + 1; + const character = pos.character + 1; + let fileName = _path.default.posix.normalize(_path.default.relative(baseDir, diagnostic.file.fileName).replace(/\\/g, '/')); + if (!fileName.startsWith('.')) { + fileName = './' + fileName; + } + message = (0, _picocolors.cyan)(fileName) + ':' + (0, _picocolors.yellow)(line.toString()) + ':' + (0, _picocolors.yellow)(character.toString()) + '\n' + message; + const codeFrame = (0, _codeframe.codeFrameColumns)(diagnostic.file.getFullText(diagnostic.file.getSourceFile()), { + start: { + line: line, + column: character + } + }, { + color: true + }); + if (codeFrame) { + message += '\n' + codeFrame; + } + } else if (isLayoutOrPageError && appPath) { + message = (0, _picocolors.cyan)(appPath) + '\n' + message; + } + return message; +} + +//# sourceMappingURL=diagnosticFormatter.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/typescript/getTypeScriptConfiguration.js b/build/node_modules/next/dist/lib/typescript/getTypeScriptConfiguration.js new file mode 100644 index 0000000..e7707fe --- /dev/null +++ b/build/node_modules/next/dist/lib/typescript/getTypeScriptConfiguration.js @@ -0,0 +1,153 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getTypeScriptConfiguration", { + enumerable: true, + get: function() { + return getTypeScriptConfiguration; + } +}); +const _picocolors = require("../picocolors"); +const _os = /*#__PURE__*/ _interop_require_default(require("os")); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _semver = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/semver")); +const _fatalerror = require("../fatal-error"); +const _iserror = /*#__PURE__*/ _interop_require_default(require("../is-error")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function resolvePathAliasTarget(baseUrl, target) { + if (_path.default.isAbsolute(target) || target.startsWith('./') || target.startsWith('../')) { + return target; + } + if (baseUrl === '.' || baseUrl === './') { + return `./${target}`; + } + const resolvedTarget = _path.default.join(baseUrl, target); + if (_path.default.isAbsolute(resolvedTarget) || resolvedTarget.startsWith('./') || resolvedTarget.startsWith('../')) { + return resolvedTarget; + } + return `./${resolvedTarget}`; +} +function rewritePathAliasesWithoutBaseUrl(baseUrl, originalPaths) { + const rewrittenPaths = originalPaths && typeof originalPaths === 'object' ? Object.fromEntries(Object.entries(originalPaths).map(([key, values])=>[ + key, + Array.isArray(values) ? values.map((value)=>typeof value === 'string' ? resolvePathAliasTarget(baseUrl, value) : value) : values + ])) : { + '*': [ + resolvePathAliasTarget(baseUrl, '*') + ] + }; + if (!Object.prototype.hasOwnProperty.call(rewrittenPaths, '*')) { + rewrittenPaths['*'] = [ + resolvePathAliasTarget(baseUrl, '*') + ]; + } + return rewrittenPaths; +} +function getNormalizedBaseUrlForPaths(baseUrl, tsConfigPath) { + const tsConfigDir = _path.default.resolve(_path.default.dirname(tsConfigPath)); + const absoluteBaseUrl = _path.default.isAbsolute(baseUrl) ? baseUrl : baseUrl.startsWith('./') || baseUrl.startsWith('../') ? _path.default.resolve(tsConfigDir, baseUrl) : _path.default.resolve(baseUrl); + const relativeBaseUrl = _path.default.relative(tsConfigDir, absoluteBaseUrl); + return relativeBaseUrl || '.'; +} +async function getTypeScriptConfiguration(typescript, tsConfigPath, metaOnly) { + try { + var _result_errors; + const formatDiagnosticsHost = { + getCanonicalFileName: (fileName)=>fileName, + getCurrentDirectory: typescript.sys.getCurrentDirectory, + getNewLine: ()=>_os.default.EOL + }; + const { config, error } = typescript.readConfigFile(tsConfigPath, typescript.sys.readFile); + if (error) { + throw Object.defineProperty(new _fatalerror.FatalError(typescript.formatDiagnostic(error, formatDiagnosticsHost)), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + let configToParse = config; + if (_semver.default.gte(typescript.version, '6.0.0')) { + var _configToParse_compilerOptions, _configToParse_compilerOptions1; + const target = (_configToParse_compilerOptions = configToParse.compilerOptions) == null ? void 0 : _configToParse_compilerOptions.target; + if (typeof target === 'string' && (target.toLowerCase() === 'es3' || target.toLowerCase() === 'es5')) { + const { target: _target, ...restCompilerOptions } = configToParse.compilerOptions ?? {}; + // TypeScript 6 deprecates ES3/ES5 targets. Rewrite deprecated + // targets in-memory to keep typechecking working without requiring + // `ignoreDeprecations`. + configToParse = { + ...configToParse, + compilerOptions: { + ...restCompilerOptions, + target: 'es2015' + } + }; + } + const baseUrl = (_configToParse_compilerOptions1 = configToParse.compilerOptions) == null ? void 0 : _configToParse_compilerOptions1.baseUrl; + const hasBaseUrl = typeof baseUrl === 'string' && baseUrl.length > 0; + if (hasBaseUrl) { + var _configToParse_compilerOptions2; + const rewrittenPaths = rewritePathAliasesWithoutBaseUrl(baseUrl, (_configToParse_compilerOptions2 = configToParse.compilerOptions) == null ? void 0 : _configToParse_compilerOptions2.paths); + const { baseUrl: _baseUrl, ...restCompilerOptions } = configToParse.compilerOptions ?? {}; + // TypeScript 6 deprecates `baseUrl`; rewrite aliases to explicit + // relative paths so path mapping still works without this option. + configToParse = { + ...configToParse, + compilerOptions: { + ...restCompilerOptions, + paths: rewrittenPaths + } + }; + } + } + const result = typescript.parseJsonConfigFileContent(configToParse, // When only interested in meta info, + // avoid enumerating all files (for performance reasons) + metaOnly ? { + ...typescript.sys, + readDirectory (_path, extensions, _excludes, _includes, _depth) { + return [ + extensions ? `file${extensions[0]}` : `file.ts` + ]; + } + } : typescript.sys, _path.default.dirname(tsConfigPath)); + if (_semver.default.gte(typescript.version, '6.0.0')) { + const parsedBaseUrl = result.options.baseUrl; + if (typeof parsedBaseUrl === 'string' && parsedBaseUrl.length > 0) { + const normalizedBaseUrl = getNormalizedBaseUrlForPaths(parsedBaseUrl, tsConfigPath); + // `baseUrl` can come from extended tsconfigs. Rewrite paths from the + // fully-resolved baseUrl and remove it so TS6 deprecation checks do not + // fail type checking. + result.options.paths = rewritePathAliasesWithoutBaseUrl(normalizedBaseUrl, result.options.paths); + delete result.options.baseUrl; + } + } + if (result.errors) { + result.errors = result.errors.filter(({ code })=>// No inputs were found in config file + code !== 18003); + } + if ((_result_errors = result.errors) == null ? void 0 : _result_errors.length) { + throw Object.defineProperty(new _fatalerror.FatalError(typescript.formatDiagnostic(result.errors[0], formatDiagnosticsHost)), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + return result; + } catch (err) { + if ((0, _iserror.default)(err) && err.name === 'SyntaxError') { + const reason = '\n' + (err.message ?? ''); + throw Object.defineProperty(new _fatalerror.FatalError((0, _picocolors.bold)('Could not parse' + (0, _picocolors.cyan)('tsconfig.json') + '.' + ' Please make sure it contains syntactically correct JSON.') + reason), "__NEXT_ERROR_CODE", { + value: "E1023", + enumerable: false, + configurable: true + }); + } + throw err; + } +} + +//# sourceMappingURL=getTypeScriptConfiguration.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/typescript/getTypeScriptIntent.js b/build/node_modules/next/dist/lib/typescript/getTypeScriptIntent.js new file mode 100644 index 0000000..41fdc83 --- /dev/null +++ b/build/node_modules/next/dist/lib/typescript/getTypeScriptIntent.js @@ -0,0 +1,52 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getTypeScriptIntent", { + enumerable: true, + get: function() { + return getTypeScriptIntent; + } +}); +const _fs = require("fs"); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _recursivereaddir = require("../recursive-readdir"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +async function getTypeScriptIntent(baseDir, intentDirs, tsconfigPath) { + const resolvedTsConfigPath = _path.default.join(baseDir, tsconfigPath); + // The integration turns on if we find a `tsconfig.json` in the user's + // project. + const hasTypeScriptConfiguration = (0, _fs.existsSync)(resolvedTsConfigPath); + if (hasTypeScriptConfiguration) { + const content = (0, _fs.readFileSync)(resolvedTsConfigPath, { + encoding: 'utf8' + }).trim(); + return { + firstTimeSetup: content === '' || content === '{}' + }; + } + // Next.js also offers a friendly setup mode that bootstraps a TypeScript + // project for the user when we detect TypeScript files. So, we need to check + // the `pages/` directory for a TypeScript file. + // Checking all directories is too slow, so this is a happy medium. + const tsFilesRegex = /.*\.(ts|tsx)$/; + const excludedRegex = /(node_modules|.*\.d\.ts$)/; + for (const dir of intentDirs){ + const typescriptFiles = await (0, _recursivereaddir.recursiveReadDir)(dir, { + pathnameFilter: (name)=>tsFilesRegex.test(name), + ignoreFilter: (name)=>excludedRegex.test(name) + }); + if (typescriptFiles.length) { + return { + firstTimeSetup: true + }; + } + } + return false; +} + +//# sourceMappingURL=getTypeScriptIntent.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/typescript/missingDependencyError.js b/build/node_modules/next/dist/lib/typescript/missingDependencyError.js new file mode 100644 index 0000000..ee3e878 --- /dev/null +++ b/build/node_modules/next/dist/lib/typescript/missingDependencyError.js @@ -0,0 +1,27 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "missingDepsError", { + enumerable: true, + get: function() { + return missingDepsError; + } +}); +const _picocolors = require("../picocolors"); +const _oxfordcommalist = require("../oxford-comma-list"); +const _fatalerror = require("../fatal-error"); +const _getpkgmanager = require("../helpers/get-pkg-manager"); +function missingDepsError(dir, missingPackages) { + const packagesHuman = (0, _oxfordcommalist.getOxfordCommaList)(missingPackages.map((p)=>p.pkg)); + const packagesCli = missingPackages.map((p)=>p.pkg).join(' '); + const packageManager = (0, _getpkgmanager.getPkgManager)(dir); + const removalMsg = '\n\n' + (0, _picocolors.bold)('If you are not trying to use TypeScript, please remove the ' + (0, _picocolors.cyan)('tsconfig.json') + ' file from your package root (and any TypeScript files in your app and pages directories).'); + throw Object.defineProperty(new _fatalerror.FatalError((0, _picocolors.bold)((0, _picocolors.red)(`It looks like you're trying to use TypeScript but do not have the required package(s) installed.`)) + '\n\n' + (0, _picocolors.bold)(`Please install ${(0, _picocolors.bold)(packagesHuman)} by running:`) + '\n\n' + `\t${(0, _picocolors.bold)((0, _picocolors.cyan)((packageManager === 'yarn' ? 'yarn add --dev' : packageManager === 'pnpm' ? 'pnpm install --save-dev' : 'npm install --save-dev') + ' ' + packagesCli))}` + removalMsg + '\n'), "__NEXT_ERROR_CODE", { + value: "E552", + enumerable: false, + configurable: true + }); +} + +//# sourceMappingURL=missingDependencyError.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/typescript/runTypeCheck.js b/build/node_modules/next/dist/lib/typescript/runTypeCheck.js new file mode 100644 index 0000000..c890de0 --- /dev/null +++ b/build/node_modules/next/dist/lib/typescript/runTypeCheck.js @@ -0,0 +1,149 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "runTypeCheck", { + enumerable: true, + get: function() { + return runTypeCheck; + } +}); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _diagnosticFormatter = require("./diagnosticFormatter"); +const _getTypeScriptConfiguration = require("./getTypeScriptConfiguration"); +const _writeConfigurationDefaults = require("./writeConfigurationDefaults"); +const _typepaths = require("./type-paths"); +const _compileerror = require("../compile-error"); +const _log = require("../../build/output/log"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +/** + * Check if a file path matches any of the debug build paths. + * Both filePath and debugPaths are resolved file paths from glob. + */ function fileMatchesDebugPaths(filePath, debugPaths) { + return debugPaths.includes(filePath); +} +async function runTypeCheck(typescript, baseDir, distDir, tsConfigPath, cacheDir, isAppDirEnabled, dirs, debugBuildPaths) { + const effectiveConfiguration = await (0, _getTypeScriptConfiguration.getTypeScriptConfiguration)(typescript, tsConfigPath); + // tsconfig includes both .next/types and .next/dev/types to avoid config churn + // between dev/build modes. During build, we filter out .next/dev/types files to + // prevent stale dev types from causing errors when routes have been deleted since + // the last dev session. + let fileNames = effectiveConfiguration.fileNames; + // Get the dev types path to filter (null if not applicable) + const devTypesDir = (0, _typepaths.getDevTypesPath)(baseDir, distDir); + if (devTypesDir) { + fileNames = fileNames.filter((fileName)=>!fileName.startsWith(devTypesDir)); + } + // Apply debug build paths filter if specified + if (dirs && debugBuildPaths) { + const { app: appDir, pages: pagesDir } = dirs; + const { app: debugAppPaths, pages: debugPagePaths } = debugBuildPaths; + fileNames = fileNames.filter((fileName)=>{ + // Check if file is in app directory + if (appDir && fileName.startsWith(appDir + _path.default.sep)) { + // If debugAppPaths is undefined, include all app files + if (debugAppPaths === undefined) { + return true; + } + // If debugAppPaths is empty array, exclude all app files + if (debugAppPaths.length === 0) { + return false; + } + // Check if file matches any of the debug paths + const relativeToApp = fileName.slice(appDir.length); + return fileMatchesDebugPaths(relativeToApp, debugAppPaths); + } + // Check if file is in pages directory + if (pagesDir && fileName.startsWith(pagesDir + _path.default.sep)) { + // If debugPagePaths is undefined, include all pages files + if (debugPagePaths === undefined) { + return true; + } + // If debugPagePaths is empty array, exclude all pages files + if (debugPagePaths.length === 0) { + return false; + } + // Check if file matches any of the debug paths + const relativeToPages = fileName.slice(pagesDir.length); + return fileMatchesDebugPaths(relativeToPages, debugPagePaths); + } + // Keep files outside app/pages directories (shared code, etc.) + return true; + }); + } + if (fileNames.length < 1) { + return { + hasWarnings: false, + inputFilesCount: 0, + totalFilesCount: 0, + incremental: false + }; + } + const requiredConfig = (0, _writeConfigurationDefaults.getRequiredConfiguration)(typescript); + const options = { + ...requiredConfig, + ...effectiveConfiguration.options, + declarationMap: false, + emitDeclarationOnly: false, + noEmit: true + }; + let program; + let incremental = false; + if ((options.incremental || options.composite) && cacheDir) { + if (options.composite) { + (0, _log.warn)('TypeScript project references are not fully supported. Attempting to build in incremental mode.'); + } + incremental = true; + program = typescript.createIncrementalProgram({ + rootNames: fileNames, + options: { + ...options, + composite: false, + incremental: true, + tsBuildInfoFile: _path.default.join(cacheDir, '.tsbuildinfo') + } + }); + } else { + program = typescript.createProgram(fileNames, options); + } + const result = program.emit(); + const ignoreRegex = [ + // matches **/__(tests|mocks)__/** + /[\\/]__(?:tests|mocks)__[\\/]/, + // matches **/*.(spec|test).* + /(?<=[\\/.])(?:spec|test)\.[^\\/]+$/ + ]; + const regexIgnoredFile = new RegExp(ignoreRegex.map((r)=>r.source).join('|')); + const allDiagnostics = typescript.getPreEmitDiagnostics(program).concat(result.diagnostics).filter((d)=>!(d.file && regexIgnoredFile.test(d.file.fileName))); + const firstError = allDiagnostics.find((d)=>d.category === typescript.DiagnosticCategory.Error && Boolean(d.file)) ?? allDiagnostics.find((d)=>d.category === typescript.DiagnosticCategory.Error); + // In test mode, we want to check all diagnostics, not just the first one. + if (process.env.__NEXT_TEST_MODE) { + if (firstError) { + const allErrors = allDiagnostics.filter((d)=>d.category === typescript.DiagnosticCategory.Error).map((d)=>'[Test Mode] ' + (0, _diagnosticFormatter.getFormattedDiagnostic)(typescript, baseDir, distDir, d, isAppDirEnabled)); + console.error('\n\n===== TS errors =====\n\n' + allErrors.join('\n\n') + '\n\n===== TS errors =====\n\n'); + // Make sure all stdout is flushed before we exit. + await new Promise((resolve)=>setTimeout(resolve, 100)); + } + } + if (firstError) { + throw Object.defineProperty(new _compileerror.CompileError((0, _diagnosticFormatter.getFormattedDiagnostic)(typescript, baseDir, distDir, firstError, isAppDirEnabled)), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + const warnings = allDiagnostics.filter((d)=>d.category === typescript.DiagnosticCategory.Warning).map((d)=>(0, _diagnosticFormatter.getFormattedDiagnostic)(typescript, baseDir, distDir, d, isAppDirEnabled)); + return { + hasWarnings: true, + warnings, + inputFilesCount: fileNames.length, + totalFilesCount: program.getSourceFiles().length, + incremental + }; +} + +//# sourceMappingURL=runTypeCheck.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/typescript/type-paths.js b/build/node_modules/next/dist/lib/typescript/type-paths.js new file mode 100644 index 0000000..38ad353 --- /dev/null +++ b/build/node_modules/next/dist/lib/typescript/type-paths.js @@ -0,0 +1,51 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getDevTypesPath: null, + getTypeDefinitionGlobPatterns: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getDevTypesPath: function() { + return getDevTypesPath; + }, + getTypeDefinitionGlobPatterns: function() { + return getTypeDefinitionGlobPatterns; + } +}); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function getTypeDefinitionGlobPatterns(distDir) { + const distDirPosix = _path.default.win32.sep === _path.default.sep ? distDir.replaceAll(_path.default.win32.sep, _path.default.posix.sep) : distDir; + const typeGlobPatterns = [ + `${distDirPosix}/types/**/*.ts` + ]; + // Include both .next/types and .next/dev/types to avoid tsconfig churn when switching + // between dev/build modes + typeGlobPatterns.push(process.env.NODE_ENV === 'development' ? `${distDirPosix.replace(/\/dev$/, '')}/types/**/*.ts` : `${distDirPosix}/dev/types/**/*.ts`); + // Sort for consistent order + typeGlobPatterns.sort((a, b)=>a.length - b.length); + return typeGlobPatterns; +} +function getDevTypesPath(baseDir, distDir) { + const isDev = process.env.NODE_ENV === 'development'; + if (isDev) { + // In dev mode, dev types are the main types, so no need to filter + return null; + } + // In build mode, dev types are at "{baseDir}/{distDir}/dev/types" and should be filtered + return _path.default.join(baseDir, distDir, 'dev', 'types'); +} + +//# sourceMappingURL=type-paths.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/typescript/writeAppTypeDeclarations.js b/build/node_modules/next/dist/lib/typescript/writeAppTypeDeclarations.js new file mode 100644 index 0000000..afc8e5d --- /dev/null +++ b/build/node_modules/next/dist/lib/typescript/writeAppTypeDeclarations.js @@ -0,0 +1,75 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "writeAppTypeDeclarations", { + enumerable: true, + get: function() { + return writeAppTypeDeclarations; + } +}); +const _os = /*#__PURE__*/ _interop_require_default(require("os")); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _fs = require("fs"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +async function writeAppTypeDeclarations({ baseDir, distDir, imageImportsEnabled, hasPagesDir, hasAppDir, strictRouteTypes, typedRoutes }) { + // Reference `next` types + const appTypeDeclarations = _path.default.join(baseDir, 'next-env.d.ts'); + // Defaults EOL to system default + let eol = _os.default.EOL; + let currentContent; + try { + currentContent = await _fs.promises.readFile(appTypeDeclarations, 'utf8'); + // If file already exists then preserve its line ending + const lf = currentContent.indexOf('\n', /* skip first so we can lf - 1 */ 1); + if (lf !== -1) { + if (currentContent[lf - 1] === '\r') { + eol = '\r\n'; + } else { + eol = '\n'; + } + } + } catch {} + /** + * "Triple-slash directives" used to create typings files for Next.js projects + * using Typescript . + * + * @see https://www.typescriptlang.org/docs/handbook/triple-slash-directives.html + */ const lines = [ + // Include the core Next.js typings. + '/// ' + ]; + if (imageImportsEnabled) { + lines.push('/// '); + } + if (hasAppDir && hasPagesDir) { + lines.push('/// '); + } + const routeTypesPath = _path.default.posix.join(distDir.replaceAll(_path.default.win32.sep, _path.default.posix.sep), 'types/routes.d.ts'); + // Use ESM import instead of triple-slash reference for better ESLint compatibility + lines.push(`import "./${routeTypesPath}";`); + if (strictRouteTypes) { + const cacheLifePath = _path.default.posix.join(distDir.replaceAll(_path.default.win32.sep, _path.default.posix.sep), 'types/cache-life.d.ts'); + lines.push(`import "./${cacheLifePath}";`); + const routeValidatorPath = _path.default.posix.join(distDir.replaceAll(_path.default.win32.sep, _path.default.posix.sep), 'types/validator.ts'); + lines.push(`import "./${routeValidatorPath}";`); + if (typedRoutes === true) { + const linkTypesPath = _path.default.posix.join(distDir.replaceAll(_path.default.win32.sep, _path.default.posix.sep), 'types/link.d.ts'); + lines.push(`import "./${linkTypesPath}";`); + } + } + // Push the notice in. + lines.push('', '// NOTE: This file should not be edited', `// see https://nextjs.org/docs/${hasAppDir ? 'app' : 'pages'}/api-reference/config/typescript for more information.`); + const content = lines.join(eol) + eol; + // Avoids an un-necessary write on read-only fs + if (currentContent === content) { + return; + } + await _fs.promises.writeFile(appTypeDeclarations, content); +} + +//# sourceMappingURL=writeAppTypeDeclarations.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/typescript/writeConfigurationDefaults.js b/build/node_modules/next/dist/lib/typescript/writeConfigurationDefaults.js new file mode 100644 index 0000000..66293b3 --- /dev/null +++ b/build/node_modules/next/dist/lib/typescript/writeConfigurationDefaults.js @@ -0,0 +1,395 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getRequiredConfiguration: null, + writeConfigurationDefaults: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getRequiredConfiguration: function() { + return getRequiredConfiguration; + }, + writeConfigurationDefaults: function() { + return writeConfigurationDefaults; + } +}); +const _fs = require("fs"); +const _picocolors = require("../picocolors"); +const _commentjson = /*#__PURE__*/ _interop_require_wildcard(require("next/dist/compiled/comment-json")); +const _semver = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/semver")); +const _os = /*#__PURE__*/ _interop_require_default(require("os")); +const _typepaths = require("./type-paths"); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("../../build/output/log")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +function getDesiredCompilerOptions(typescriptVersion, userTsConfig) { + var _userTsConfig_compilerOptions, _userTsConfig_compilerOptions_module, _userTsConfig_compilerOptions1, _userTsConfig_compilerOptions2; + // ModuleKind + const moduleKindESNext = 'esnext'; + const moduleKindES2020 = 'es2020'; + const moduleKindPreserve = 'preserve'; + const moduleKindNodeNext = 'nodenext'; + const moduleKindNode16 = 'node16'; + const moduleKindCommonJS = 'commonjs'; + const moduleKindAMD = 'amd'; + // ModuleResolutionKind + const moduleResolutionKindBundler = 'bundler'; + const moduleResolutionKindNode16 = 'node16'; + const moduleResolutionKindNodeNext = 'nodenext'; + const moduleResolutionKindNode12 = 'node12'; + const moduleResolutionKindNode = 'node'; + const configuredModule = typeof (userTsConfig == null ? void 0 : (_userTsConfig_compilerOptions = userTsConfig.compilerOptions) == null ? void 0 : _userTsConfig_compilerOptions.module) === 'string' ? userTsConfig.compilerOptions.module.toLowerCase() : undefined; + const preferBundlerResolution = _semver.default.gte(typescriptVersion, '5.0.0') && configuredModule !== moduleKindCommonJS && configuredModule !== moduleKindAMD; + // Jsx + const jsxEmitReactJSX = 'react-jsx'; + return { + target: { + suggested: 'ES2017', + reason: 'For top-level `await`. Note: Next.js only polyfills for the esmodules target.' + }, + // These are suggested values and will be set when not present in the + // tsconfig.json + lib: { + suggested: [ + 'dom', + 'dom.iterable', + 'esnext' + ] + }, + allowJs: { + suggested: true + }, + skipLibCheck: { + suggested: true + }, + strict: { + suggested: false + }, + noEmit: { + suggested: true + }, + incremental: { + suggested: true + }, + // These values are required and cannot be changed by the user + // Keep this in sync with the webpack config + // 'parsedValue' matches the output value from ts.parseJsonConfigFileContent() + module: { + parsedValue: moduleKindESNext, + // All of these values work: + parsedValues: [ + _semver.default.gte(typescriptVersion, '5.4.0') && moduleKindPreserve, + moduleKindES2020, + moduleKindESNext, + moduleKindCommonJS, + moduleKindAMD, + moduleKindNodeNext, + moduleKindNode16 + ], + value: 'esnext', + reason: 'for dynamic import() support' + }, + // TODO: Semver check not needed once Next.js repo uses 5.4. + ..._semver.default.gte(typescriptVersion, '5.4.0') && (userTsConfig == null ? void 0 : (_userTsConfig_compilerOptions1 = userTsConfig.compilerOptions) == null ? void 0 : (_userTsConfig_compilerOptions_module = _userTsConfig_compilerOptions1.module) == null ? void 0 : _userTsConfig_compilerOptions_module.toLowerCase()) === moduleKindPreserve ? { + } : { + esModuleInterop: { + value: true, + reason: 'requirement for SWC / babel' + }, + moduleResolution: { + parsedValue: preferBundlerResolution ? moduleResolutionKindBundler : moduleResolutionKindNode, + // All of these values work: + parsedValues: preferBundlerResolution ? [ + moduleResolutionKindNode16, + moduleResolutionKindNodeNext, + moduleResolutionKindBundler + ] : [ + moduleResolutionKindNode, + // only older TypeScript versions have this field + moduleResolutionKindNode12, + moduleResolutionKindNode16, + moduleResolutionKindNodeNext + ], + value: preferBundlerResolution ? moduleResolutionKindBundler : moduleResolutionKindNode, + reason: preferBundlerResolution ? 'to match modern bundler resolution' : 'to match webpack resolution' + }, + resolveJsonModule: { + value: true, + reason: 'to match webpack resolution' + } + }, + ...(userTsConfig == null ? void 0 : (_userTsConfig_compilerOptions2 = userTsConfig.compilerOptions) == null ? void 0 : _userTsConfig_compilerOptions2.verbatimModuleSyntax) === true ? undefined : { + isolatedModules: { + value: true, + reason: 'requirement for SWC / Babel' + } + }, + jsx: { + parsedValue: jsxEmitReactJSX, + value: 'react-jsx', + reason: 'next.js uses the React automatic runtime' + } + }; +} +function getRequiredConfiguration(typescript) { + const res = {}; + const typescriptVersion = typescript.version; + const desiredCompilerOptions = getDesiredCompilerOptions(typescriptVersion); + for (const optionKey of Object.keys(desiredCompilerOptions)){ + const ev = desiredCompilerOptions[optionKey]; + if (!('value' in ev)) { + continue; + } + const value = ev.parsedValue ?? ev.value; + // Convert string values back to TypeScript enum values + if (optionKey === 'module' && typeof value === 'string') { + const moduleMap = { + esnext: typescript.ModuleKind.ESNext, + es2020: typescript.ModuleKind.ES2020, + ...typescript.ModuleKind.Preserve !== undefined ? { + preserve: typescript.ModuleKind.Preserve + } : {}, + nodenext: typescript.ModuleKind.NodeNext, + node16: typescript.ModuleKind.Node16, + commonjs: typescript.ModuleKind.CommonJS, + amd: typescript.ModuleKind.AMD + }; + res[optionKey] = moduleMap[value.toLowerCase()] ?? value; + } else if (optionKey === 'moduleResolution' && typeof value === 'string') { + const moduleResolutionMap = { + bundler: typescript.ModuleResolutionKind.Bundler, + node16: typescript.ModuleResolutionKind.Node16, + nodenext: typescript.ModuleResolutionKind.NodeNext, + node12: typescript.ModuleResolutionKind.Node12, + node: typescript.ModuleResolutionKind.Node10 ?? typescript.ModuleResolutionKind.NodeJs + }; + res[optionKey] = moduleResolutionMap[value.toLowerCase()] ?? value; + } else if (optionKey === 'jsx' && typeof value === 'string') { + const jsxMap = { + 'react-jsx': typescript.JsxEmit.ReactJSX + }; + res[optionKey] = jsxMap[value.toLowerCase()] ?? value; + } else { + res[optionKey] = value; + } + } + return res; +} +const localDevTestFilesExcludeAction = 'NEXT_PRIVATE_LOCAL_DEV_TEST_FILES_EXCLUDE'; +async function writeConfigurationDefaults(typescriptVersion, tsConfigPath, isFirstTimeSetup, hasAppDir, distDir, hasPagesDir, strictRouteTypes) { + var _userTsConfig_compilerOptions; + if (isFirstTimeSetup) { + (0, _fs.writeFileSync)(tsConfigPath, '{}' + _os.default.EOL); + } + const userTsConfigContent = (0, _fs.readFileSync)(tsConfigPath, 'utf8'); + const userTsConfig = _commentjson.parse(userTsConfigContent); + // Bail automatic setup when the user has extended or referenced another config + if ('extends' in userTsConfig || 'references' in userTsConfig) { + return; + } + if ((userTsConfig == null ? void 0 : userTsConfig.compilerOptions) == null) { + userTsConfig.compilerOptions = {}; + isFirstTimeSetup = true; + } + const desiredCompilerOptions = getDesiredCompilerOptions(typescriptVersion, userTsConfig); + const suggestedActions = []; + const requiredActions = []; + for(const optionKey in desiredCompilerOptions){ + const check = desiredCompilerOptions[optionKey]; + if ('suggested' in check) { + if (!(optionKey in (userTsConfig == null ? void 0 : userTsConfig.compilerOptions))) { + userTsConfig.compilerOptions[optionKey] = check.suggested; + suggestedActions.push((0, _picocolors.cyan)(optionKey) + ' was set to ' + (0, _picocolors.bold)(check.suggested) + (check.reason ? ` (${check.reason})` : '')); + } + } else if ('value' in check) { + var _userTsConfig_compilerOptions1; + let existingValue = userTsConfig == null ? void 0 : (_userTsConfig_compilerOptions1 = userTsConfig.compilerOptions) == null ? void 0 : _userTsConfig_compilerOptions1[optionKey]; + if (typeof existingValue === 'string') { + existingValue = existingValue.toLowerCase(); + } + const shouldWriteRequiredValue = ()=>{ + // Check if the option has multiple allowed values + if (check.parsedValues) { + return !check.parsedValues.includes(existingValue); + } + // Check if the option has a single parsed value + if (check.parsedValue) { + return check.parsedValue !== existingValue; + } + // Fall back to direct value comparison + return check.value !== existingValue; + }; + if (shouldWriteRequiredValue()) { + if (!userTsConfig.compilerOptions) { + userTsConfig.compilerOptions = {}; + } + userTsConfig.compilerOptions[optionKey] = check.value; + requiredActions.push((0, _picocolors.cyan)(optionKey) + ' was set to ' + (0, _picocolors.bold)(check.value) + ` (${check.reason})`); + } + } else { + const _ = check; + } + } + // Get type definition glob patterns using shared utility to ensure consistency + // with other TypeScript infrastructure (e.g., runTypeCheck.ts) + const nextTypes = (0, _typepaths.getTypeDefinitionGlobPatterns)(distDir); + if (!('include' in userTsConfig)) { + const defaultInclude = hasAppDir && !strictRouteTypes ? [ + 'next-env.d.ts', + ...nextTypes, + '**/*.mts', + '**/*.ts', + '**/*.tsx' + ] : [ + 'next-env.d.ts', + '**/*.mts', + '**/*.ts', + '**/*.tsx' + ]; + userTsConfig.include = defaultInclude; + suggestedActions.push((0, _picocolors.cyan)('include') + ' was set to [' + (0, _picocolors.bold)(defaultInclude.map((type)=>`'${type}'`).join(', ')) + ']'); + } else if (hasAppDir && !strictRouteTypes) { + const missingFromResolved = []; + for (const type of nextTypes){ + if (!userTsConfig.include.includes(type)) { + missingFromResolved.push(type); + } + } + if (missingFromResolved.length > 0) { + if (!Array.isArray(userTsConfig.include)) { + userTsConfig.include = []; + } + missingFromResolved.forEach((item)=>{ + userTsConfig.include.push(item); + suggestedActions.push((0, _picocolors.cyan)('include') + ' was updated to add ' + (0, _picocolors.bold)(`'${item}'`)); + }); + } + } + // Enable the Next.js typescript plugin. + if (hasAppDir) { + var _userTsConfig_compilerOptions2; + // Check if the config or the resolved config has the plugin already. + const plugins = [ + ...Array.isArray(userTsConfig == null ? void 0 : userTsConfig.plugins) ? userTsConfig.plugins : [], + ...userTsConfig.compilerOptions && Array.isArray(userTsConfig.compilerOptions.plugins) ? userTsConfig.compilerOptions.plugins : [] + ]; + const hasNextPlugin = plugins.some(({ name })=>name === 'next'); + // If the TS config extends on another config, we can't add the `plugin` field + // because that will override the parent config's plugins. + // Instead we have to show a message to the user to add the plugin manually. + if (!userTsConfig.compilerOptions || plugins.length && !hasNextPlugin && 'extends' in userTsConfig && (!userTsConfig.compilerOptions || !userTsConfig.compilerOptions.plugins)) { + _log.info(`\nYour ${(0, _picocolors.bold)('tsconfig.json')} extends another configuration, which means we cannot add the Next.js TypeScript plugin automatically. To improve your development experience, we recommend adding the Next.js plugin (\`${(0, _picocolors.cyan)('"plugins": [{ "name": "next" }]')}\`) manually to your TypeScript configuration. Learn more: https://nextjs.org/docs/app/api-reference/config/typescript#the-typescript-plugin\n`); + } else if (!hasNextPlugin) { + if (!('plugins' in userTsConfig.compilerOptions)) { + userTsConfig.compilerOptions.plugins = []; + } + userTsConfig.compilerOptions.plugins.push({ + name: 'next' + }); + suggestedActions.push((0, _picocolors.cyan)('plugins') + ' was updated to add ' + (0, _picocolors.bold)(`{ name: 'next' }`)); + } + // If `strict` is set to `false` and `strictNullChecks` is set to `false`, + // then set `strictNullChecks` to `true`. + if (hasPagesDir && hasAppDir && !(userTsConfig == null ? void 0 : (_userTsConfig_compilerOptions2 = userTsConfig.compilerOptions) == null ? void 0 : _userTsConfig_compilerOptions2.strict) && !('strictNullChecks' in (userTsConfig == null ? void 0 : userTsConfig.compilerOptions))) { + userTsConfig.compilerOptions.strictNullChecks = true; + suggestedActions.push((0, _picocolors.cyan)('strictNullChecks') + ' was set to ' + (0, _picocolors.bold)(`true`)); + } + } + if (!('exclude' in userTsConfig)) { + userTsConfig.exclude = [ + 'node_modules' + ]; + suggestedActions.push((0, _picocolors.cyan)('exclude') + ' was set to ' + (0, _picocolors.bold)(`['node_modules']`)); + } + // During local development inside Next.js repo, exclude the test files coverage by the local tsconfig + if (process.env.NEXT_PRIVATE_LOCAL_DEV && userTsConfig.exclude) { + const tsGlob = '**/*.test.ts'; + const tsxGlob = '**/*.test.tsx'; + let hasUpdates = false; + if (!userTsConfig.exclude.includes(tsGlob)) { + userTsConfig.exclude.push(tsGlob); + hasUpdates = true; + } + if (!userTsConfig.exclude.includes(tsxGlob)) { + userTsConfig.exclude.push(tsxGlob); + hasUpdates = true; + } + if (hasUpdates) { + requiredActions.push(localDevTestFilesExcludeAction); + } + } + if (suggestedActions.length < 1 && requiredActions.length < 1) { + return; + } + (0, _fs.writeFileSync)(tsConfigPath, _commentjson.stringify(userTsConfig, null, 2) + _os.default.EOL); + _log.info(''); + if (isFirstTimeSetup) { + _log.info(`We detected TypeScript in your project and created a ${(0, _picocolors.cyan)('tsconfig.json')} file for you.`); + return; + } + _log.info(`We detected TypeScript in your project and reconfigured your ${(0, _picocolors.cyan)('tsconfig.json')} file for you.${((_userTsConfig_compilerOptions = userTsConfig.compilerOptions) == null ? void 0 : _userTsConfig_compilerOptions.strict) ? '' : ` Strict-mode is set to ${(0, _picocolors.cyan)('false')} by default.`}`); + if (suggestedActions.length) { + _log.info(`The following suggested values were added to your ${(0, _picocolors.cyan)('tsconfig.json')}. These values ${(0, _picocolors.cyan)('can be changed')} to fit your project's needs:\n`); + suggestedActions.forEach((action)=>_log.info(`\t- ${action}`)); + _log.info(''); + } + const requiredActionsToBeLogged = process.env.NEXT_PRIVATE_LOCAL_DEV ? requiredActions.filter((action)=>action !== localDevTestFilesExcludeAction) : requiredActions; + if (requiredActionsToBeLogged.length) { + _log.info(`The following ${(0, _picocolors.white)('mandatory changes')} were made to your ${(0, _picocolors.cyan)('tsconfig.json')}:\n`); + requiredActionsToBeLogged.forEach((action)=>_log.info(`\t- ${action}`)); + _log.info(''); + } +} + +//# sourceMappingURL=writeConfigurationDefaults.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/url.js b/build/node_modules/next/dist/lib/url.js new file mode 100644 index 0000000..73d5f3d --- /dev/null +++ b/build/node_modules/next/dist/lib/url.js @@ -0,0 +1,75 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + isFullStringUrl: null, + parseReqUrl: null, + parseUrl: null, + stripNextRscUnionQuery: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + isFullStringUrl: function() { + return isFullStringUrl; + }, + parseReqUrl: function() { + return parseReqUrl; + }, + parseUrl: function() { + return parseUrl; + }, + stripNextRscUnionQuery: function() { + return stripNextRscUnionQuery; + } +}); +const _approuterheaders = require("../client/components/app-router-headers"); +const DUMMY_ORIGIN = 'http://n'; +function isFullStringUrl(url) { + return /https?:\/\//.test(url); +} +function parseUrl(url) { + let parsed = undefined; + try { + parsed = new URL(url, DUMMY_ORIGIN); + } catch {} + return parsed; +} +function parseReqUrl(url) { + const parsedUrl = parseUrl(url); + if (!parsedUrl) { + return; + } + const query = {}; + for (const key of parsedUrl.searchParams.keys()){ + const values = parsedUrl.searchParams.getAll(key); + query[key] = values.length > 1 ? values : values[0]; + } + const legacyUrl = { + query, + hash: parsedUrl.hash, + search: parsedUrl.search, + path: parsedUrl.pathname, + pathname: parsedUrl.pathname, + href: `${parsedUrl.pathname}${parsedUrl.search}${parsedUrl.hash}`, + host: '', + hostname: '', + auth: '', + protocol: '', + slashes: null, + port: '' + }; + return legacyUrl; +} +function stripNextRscUnionQuery(relativeUrl) { + const urlInstance = new URL(relativeUrl, DUMMY_ORIGIN); + urlInstance.searchParams.delete(_approuterheaders.NEXT_RSC_UNION_QUERY); + return urlInstance.pathname + urlInstance.search; +} + +//# sourceMappingURL=url.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/verify-partytown-setup.js b/build/node_modules/next/dist/lib/verify-partytown-setup.js new file mode 100644 index 0000000..9903c38 --- /dev/null +++ b/build/node_modules/next/dist/lib/verify-partytown-setup.js @@ -0,0 +1,115 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "verifyPartytownSetup", { + enumerable: true, + get: function() { + return verifyPartytownSetup; + } +}); +const _fs = require("fs"); +const _picocolors = require("./picocolors"); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _hasnecessarydependencies = require("./has-necessary-dependencies"); +const _fileexists = require("./file-exists"); +const _fatalerror = require("./fatal-error"); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("../build/output/log")); +const _getpkgmanager = require("./helpers/get-pkg-manager"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +async function missingDependencyError(dir) { + const packageManager = (0, _getpkgmanager.getPkgManager)(dir); + throw Object.defineProperty(new _fatalerror.FatalError((0, _picocolors.bold)((0, _picocolors.red)("It looks like you're trying to use Partytown with next/script but do not have the required package(s) installed.")) + '\n\n' + (0, _picocolors.bold)(`Please install Partytown by running:`) + '\n\n' + `\t${(0, _picocolors.bold)((0, _picocolors.cyan)((packageManager === 'yarn' ? 'yarn add --dev' : packageManager === 'pnpm' ? 'pnpm install --save-dev' : 'npm install --save-dev') + ' @builder.io/partytown'))}` + '\n\n' + (0, _picocolors.bold)(`If you are not trying to use Partytown, please disable the experimental ${(0, _picocolors.cyan)('"nextScriptWorkers"')} flag in next.config.js.`) + '\n'), "__NEXT_ERROR_CODE", { + value: "E552", + enumerable: false, + configurable: true + }); +} +async function copyPartytownStaticFiles(deps, staticDir) { + const partytownLibDir = _path.default.join(staticDir, '~partytown'); + const hasPartytownLibDir = await (0, _fileexists.fileExists)(partytownLibDir, _fileexists.FileType.Directory); + if (hasPartytownLibDir) { + await _fs.promises.rm(partytownLibDir, { + recursive: true, + force: true + }); + } + const { copyLibFiles } = await Promise.resolve(require(_path.default.join(deps.resolved.get('@builder.io/partytown'), '../utils'))); + await copyLibFiles(partytownLibDir); +} +async function verifyPartytownSetup(dir, targetDir) { + try { + var _partytownDeps_missing; + const partytownDeps = (0, _hasnecessarydependencies.hasNecessaryDependencies)(dir, [ + { + file: '@builder.io/partytown', + pkg: '@builder.io/partytown', + exportsRestrict: false + } + ]); + if (((_partytownDeps_missing = partytownDeps.missing) == null ? void 0 : _partytownDeps_missing.length) > 0) { + await missingDependencyError(dir); + } else { + try { + await copyPartytownStaticFiles(partytownDeps, targetDir); + } catch (err) { + _log.warn(`Partytown library files could not be copied to the static directory. Please ensure that ${(0, _picocolors.bold)((0, _picocolors.cyan)('@builder.io/partytown'))} is installed as a dependency.`); + } + } + } catch (err) { + // Don't show a stack trace when there is an error due to missing dependencies + if (err instanceof _fatalerror.FatalError) { + console.error(err.message); + // Throw to allow finally blocks to run (e.g., telemetry flush) + throw err; + } + throw err; + } +} + +//# sourceMappingURL=verify-partytown-setup.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/verify-root-layout.js b/build/node_modules/next/dist/lib/verify-root-layout.js new file mode 100644 index 0000000..d592f0e --- /dev/null +++ b/build/node_modules/next/dist/lib/verify-root-layout.js @@ -0,0 +1,165 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "verifyRootLayout", { + enumerable: true, + get: function() { + return verifyRootLayout; + } +}); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("../build/output/log")); +const _fs = require("fs"); +const _picocolors = require("./picocolors"); +const _constants = require("./constants"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +const globOrig = require('next/dist/compiled/glob'); +const glob = (cwd, pattern)=>{ + return new Promise((resolve, reject)=>{ + globOrig(pattern, { + cwd + }, (err, files)=>{ + if (err) { + return reject(err); + } + resolve(files); + }); + }); +}; +function getRootLayout(isTs) { + if (isTs) { + return `export const metadata = { + title: 'Next.js', + description: 'Generated by Next.js', +} + +export default function RootLayout({ + children, +}: { + children: React.ReactNode +}) { + return ( + + {children} + + ) +} +`; + } + return `export const metadata = { + title: 'Next.js', + description: 'Generated by Next.js', +} + +export default function RootLayout({ children }) { + return ( + + {children} + + ) +} +`; +} +async function verifyRootLayout({ dir, appDir, tsconfigPath, pagePath, pageExtensions }) { + let rootLayoutPath; + try { + const layoutFiles = await glob(appDir, `**/layout.{${pageExtensions.join(',')}}`); + const isFileUnderAppDir = pagePath.startsWith(`${_constants.APP_DIR_ALIAS}/`); + const normalizedPagePath = pagePath.replace(`${_constants.APP_DIR_ALIAS}/`, ''); + const pagePathSegments = normalizedPagePath.split('/'); + // Find an available dir to place the layout file in, the layout file can't affect any other layout. + // Place the layout as close to app/ as possible. + let availableDir; + if (isFileUnderAppDir) { + if (layoutFiles.length === 0) { + // If there's no other layout file we can place the layout file in the app dir. + // However, if the page is within a route group directly under app (e.g. app/(routegroup)/page.js) + // prefer creating the root layout in that route group. + const firstSegmentValue = pagePathSegments[0]; + availableDir = firstSegmentValue.startsWith('(') ? firstSegmentValue : ''; + } else { + pagePathSegments.pop() // remove the page from segments + ; + let currentSegments = []; + for (const segment of pagePathSegments){ + currentSegments.push(segment); + // Find the dir closest to app/ where a layout can be created without affecting other layouts. + if (!layoutFiles.some((file)=>file.startsWith(currentSegments.join('/')))) { + availableDir = currentSegments.join('/'); + break; + } + } + } + } else { + availableDir = ''; + } + if (typeof availableDir === 'string') { + const tsConfigFileName = tsconfigPath || 'tsconfig.json'; + const resolvedTsConfigPath = _path.default.join(dir, tsConfigFileName); + const hasTsConfig = await _fs.promises.access(resolvedTsConfigPath).then(()=>true, ()=>false); + rootLayoutPath = _path.default.join(appDir, availableDir, `layout.${hasTsConfig ? 'tsx' : 'js'}`); + await _fs.promises.writeFile(rootLayoutPath, getRootLayout(hasTsConfig)); + _log.warn(`Your page ${(0, _picocolors.bold)(`app/${normalizedPagePath}`)} did not have a root layout. We created ${(0, _picocolors.bold)(`app${rootLayoutPath.replace(appDir, '')}`)} for you.`); + // Created root layout + return [ + true, + rootLayoutPath + ]; + } + } catch (e) { + console.error(e); + } + // Didn't create root layout + return [ + false, + rootLayoutPath + ]; +} + +//# sourceMappingURL=verify-root-layout.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/verify-typescript-setup.js b/build/node_modules/next/dist/lib/verify-typescript-setup.js new file mode 100644 index 0000000..caa1e6a --- /dev/null +++ b/build/node_modules/next/dist/lib/verify-typescript-setup.js @@ -0,0 +1,228 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "verifyAndRunTypeScript", { + enumerable: true, + get: function() { + return verifyAndRunTypeScript; + } +}); +const _picocolors = require("./picocolors"); +const _path = /*#__PURE__*/ _interop_require_wildcard(require("path")); +const _hasnecessarydependencies = require("./has-necessary-dependencies"); +const _semver = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/semver")); +const _compileerror = require("./compile-error"); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("../build/output/log")); +const _getTypeScriptIntent = require("./typescript/getTypeScriptIntent"); +const _writeAppTypeDeclarations = require("./typescript/writeAppTypeDeclarations"); +const _writeConfigurationDefaults = require("./typescript/writeConfigurationDefaults"); +const _installdependencies = require("./install-dependencies"); +const _ciinfo = require("../server/ci-info"); +const _missingDependencyError = require("./typescript/missingDependencyError"); +const _resolvefrom = require("./resolve-from"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +const typescriptPackage = { + file: 'typescript/lib/typescript.js', + pkg: 'typescript', + exportsRestrict: true +}; +const requiredPackages = [ + typescriptPackage, + { + file: '@types/react/index.d.ts', + pkg: '@types/react', + exportsRestrict: true + }, + { + file: '@types/node/index.d.ts', + pkg: '@types/node', + exportsRestrict: true + } +]; +/** + * Check if @typescript/native-preview is installed as an alternative TypeScript compiler. + * This is a Go-based native TypeScript compiler that can be used instead of the standard + * TypeScript package for faster compilation. + */ function hasNativeTypeScriptPreview(dir) { + try { + (0, _resolvefrom.resolveFrom)(dir, '@typescript/native-preview/package.json'); + return true; + } catch { + return false; + } +} +async function verifyAndRunTypeScript({ dir, distDir, cacheDir, strictRouteTypes, tsconfigPath, shouldRunTypeCheck, typedRoutes, disableStaticImages, hasAppDir, hasPagesDir, appDir, pagesDir, debugBuildPaths }) { + const tsConfigFileName = tsconfigPath || 'tsconfig.json'; + const resolvedTsConfigPath = _path.default.join(dir, tsConfigFileName); + // Construct intentDirs from appDir and pagesDir for getTypeScriptIntent + const intentDirs = [ + pagesDir, + appDir + ].filter(Boolean); + try { + var _deps_missing, _deps_missing1; + // Check if the project uses TypeScript: + const intent = await (0, _getTypeScriptIntent.getTypeScriptIntent)(dir, intentDirs, tsConfigFileName); + if (!intent) { + return { + version: null + }; + } + // Check if @typescript/native-preview is installed as an alternative + const hasNativePreview = hasNativeTypeScriptPreview(dir); + // Ensure TypeScript and necessary `@types/*` are installed: + let deps = (0, _hasnecessarydependencies.hasNecessaryDependencies)(dir, requiredPackages); + // If @typescript/native-preview is installed and only the typescript package is missing, + // we can skip auto-installing typescript since the native preview provides TS compilation. + // However, we still need @types/react and @types/node for type checking. + if (hasNativePreview && ((_deps_missing = deps.missing) == null ? void 0 : _deps_missing.length) > 0) { + const missingWithoutTypescript = deps.missing.filter((dep)=>dep.pkg !== 'typescript'); + const onlyTypescriptMissing = deps.missing.length === 1 && deps.missing[0].pkg === 'typescript'; + if (onlyTypescriptMissing) { + // @typescript/native-preview is installed and only typescript is missing + // Skip installation and return early - the project can use the native preview + _log.info(`Detected ${(0, _picocolors.bold)('@typescript/native-preview')} as TypeScript compiler. ` + `Some Next.js TypeScript features (like type checking during build) require the standard ${(0, _picocolors.bold)('typescript')} package.`); + // Still write type declarations since they don't require the typescript package + await (0, _writeAppTypeDeclarations.writeAppTypeDeclarations)({ + baseDir: dir, + distDir, + imageImportsEnabled: !disableStaticImages, + hasPagesDir, + hasAppDir, + strictRouteTypes, + typedRoutes + }); + return { + version: null + }; + } + // If there are other missing deps besides typescript, only install those + if (missingWithoutTypescript.length > 0 && missingWithoutTypescript.length < deps.missing.length) { + deps.missing = missingWithoutTypescript; + } + } + if (((_deps_missing1 = deps.missing) == null ? void 0 : _deps_missing1.length) > 0) { + if (_ciinfo.isCI) { + // we don't attempt auto install in CI to avoid side-effects + // and instead log the error for installing needed packages + (0, _missingDependencyError.missingDepsError)(dir, deps.missing); + } + console.log((0, _picocolors.bold)((0, _picocolors.yellow)(`It looks like you're trying to use TypeScript but do not have the required package(s) installed.`)) + '\n' + 'Installing dependencies' + '\n\n' + (0, _picocolors.bold)('If you are not trying to use TypeScript, please remove the ' + (0, _picocolors.cyan)('tsconfig.json') + ' file from your package root (and any TypeScript files in your app and pages directories).') + '\n'); + await (0, _installdependencies.installDependencies)(dir, deps.missing, true).catch((err)=>{ + if (err && typeof err === 'object' && 'command' in err) { + console.error(`Failed to install required TypeScript dependencies, please install them manually to continue:\n` + err.command + '\n'); + } + throw err; + }); + deps = (0, _hasnecessarydependencies.hasNecessaryDependencies)(dir, requiredPackages); + } + // Load TypeScript after we're sure it exists: + const tsPackageJsonPath = deps.resolved.get((0, _path.join)('typescript', 'package.json')); + const typescriptPackageJson = require(tsPackageJsonPath); + const typescriptVersion = typescriptPackageJson.version; + if (_semver.default.lt(typescriptVersion, '5.1.0')) { + _log.warn(`Minimum recommended TypeScript version is v5.1.0, older versions can potentially be incompatible with Next.js. Detected: ${typescriptVersion}`); + } + // Reconfigure (or create) the user's `tsconfig.json` for them: + await (0, _writeConfigurationDefaults.writeConfigurationDefaults)(typescriptVersion, resolvedTsConfigPath, intent.firstTimeSetup, hasAppDir, distDir, hasPagesDir, strictRouteTypes); + // Write out the necessary `next-env.d.ts` file to correctly register + // Next.js' types: + await (0, _writeAppTypeDeclarations.writeAppTypeDeclarations)({ + baseDir: dir, + distDir, + imageImportsEnabled: !disableStaticImages, + hasPagesDir, + hasAppDir, + strictRouteTypes, + typedRoutes + }); + let result; + if (shouldRunTypeCheck) { + const { runTypeCheck } = require('./typescript/runTypeCheck'); + // Install native bindings so that code frame rendering works in the worker + const { installBindings } = require('../build/swc/install-bindings'); + await installBindings(); + const tsPath = deps.resolved.get('typescript'); + const typescript = await Promise.resolve(require(tsPath)); + // Verify the project passes type-checking before we go to webpack phase: + result = await runTypeCheck(typescript, dir, distDir, resolvedTsConfigPath, cacheDir, hasAppDir, { + app: appDir, + pages: pagesDir + }, debugBuildPaths); + } + return { + result, + version: typescriptVersion + }; + } catch (err) { + // These are special errors that should not show a stack trace: + if (err instanceof _compileerror.CompileError) { + console.error((0, _picocolors.red)('Failed to type check.\n')); + console.error(err.message); + process.exit(1); + } + /** + * verifyAndRunTypeScript can be either invoked directly in the main thread (during next dev / next lint) + * or run in a worker (during next build). In the latter case, we need to print the error message, as the + * parent process will only receive an `Jest worker encountered 1 child process exceptions, exceeding retry limit`. + */ // we are in a worker, print the error message and exit the process + if (process.env.IS_NEXT_WORKER) { + if (err instanceof Error) { + console.error(err.message); + } else { + console.error(err); + } + process.exit(1); + } + // we are in the main thread, throw the error and it will be handled by the caller + throw err; + } +} + +//# sourceMappingURL=verify-typescript-setup.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/wait.js b/build/node_modules/next/dist/lib/wait.js new file mode 100644 index 0000000..b620eef --- /dev/null +++ b/build/node_modules/next/dist/lib/wait.js @@ -0,0 +1,19 @@ +/** + * Wait for a given number of milliseconds and then resolve. + * + * @param ms the number of milliseconds to wait + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "wait", { + enumerable: true, + get: function() { + return wait; + } +}); +async function wait(ms) { + return new Promise((resolve)=>setTimeout(resolve, ms)); +} + +//# sourceMappingURL=wait.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/with-promise-cache.js b/build/node_modules/next/dist/lib/with-promise-cache.js new file mode 100644 index 0000000..3ff892f --- /dev/null +++ b/build/node_modules/next/dist/lib/with-promise-cache.js @@ -0,0 +1,24 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "withPromiseCache", { + enumerable: true, + get: function() { + return withPromiseCache; + } +}); +function withPromiseCache(cache, fn, getKey) { + return (...values)=>{ + const key = getKey ? getKey(...values) : values[0]; + let p = cache.get(key); + if (!p) { + p = fn(...values); + p.catch(()=>cache.remove(key)); + cache.set(key, p); + } + return p; + }; +} + +//# sourceMappingURL=with-promise-cache.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/lib/worker.js b/build/node_modules/next/dist/lib/worker.js new file mode 100644 index 0000000..5655554 --- /dev/null +++ b/build/node_modules/next/dist/lib/worker.js @@ -0,0 +1,234 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + Worker: null, + getNextBuildDebuggerPortOffset: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + Worker: function() { + return Worker; + }, + getNextBuildDebuggerPortOffset: function() { + return getNextBuildDebuggerPortOffset; + } +}); +const _jestworker = require("next/dist/compiled/jest-worker"); +const _stream = require("stream"); +const _utils = require("../server/lib/utils"); +const RESTARTED = Symbol('restarted'); +const cleanupWorkers = (worker)=>{ + var _worker__workerPool; + for (const curWorker of ((_worker__workerPool = worker._workerPool) == null ? void 0 : _worker__workerPool._workers) || []){ + var _curWorker__child; + (_curWorker__child = curWorker._child) == null ? void 0 : _curWorker__child.kill('SIGINT'); + } +}; +function getNextBuildDebuggerPortOffset(_) { + // 0: export worker + return 0; +} +class Worker { + constructor(workerPath, options){ + let { enableSourceMaps, timeout, onRestart, logger = console, debuggerPortOffset, isolatedMemory, onActivity, onActivityAbort, ...farmOptions } = options; + this._onActivity = onActivity; + this._onActivityAbort = onActivityAbort; + let restartPromise; + let resolveRestartPromise; + let activeTasks = 0; + this._worker = undefined; + // ensure we end workers if they weren't before exit + process.on('exit', ()=>{ + this.close(); + }); + const nodeOptions = (0, _utils.getParsedNodeOptions)(); + const originalOptions = { + ...nodeOptions + }; + delete nodeOptions.inspect; + delete nodeOptions['inspect-brk']; + delete nodeOptions['inspect_brk']; + if (debuggerPortOffset !== -1) { + const nodeDebugType = (0, _utils.getNodeDebugType)(originalOptions); + if (nodeDebugType) { + const debuggerAddress = (0, _utils.getParsedDebugAddress)(originalOptions[nodeDebugType]); + const address = { + host: debuggerAddress.host, + // current process runs on `address.port` + port: debuggerAddress.port === 0 ? 0 : debuggerAddress.port + 1 + debuggerPortOffset + }; + nodeOptions[nodeDebugType] = (0, _utils.formatDebugAddress)(address); + } + } + if (enableSourceMaps) { + nodeOptions['enable-source-maps'] = true; + } + if (isolatedMemory) { + delete nodeOptions['max-old-space-size']; + delete nodeOptions['max_old_space_size']; + } + const { nodeOptions: formattedNodeOptions, execArgv } = (0, _utils.formatNodeOptions)(nodeOptions); + const createWorker = ()=>{ + var _farmOptions_forkOptions, _farmOptions_forkOptions1; + const workerEnv = { + ...process.env, + ...((_farmOptions_forkOptions = farmOptions.forkOptions) == null ? void 0 : _farmOptions_forkOptions.env) || {}, + IS_NEXT_WORKER: 'true', + NODE_OPTIONS: formattedNodeOptions + }; + if (workerEnv.FORCE_COLOR === undefined) { + var _process_stderr; + // Mirror the enablement heuristic from picocolors (see https://github.com/vercel/next.js/blob/6a40da0345939fe4f7b1ae519b296a86dd103432/packages/next/src/lib/picocolors.ts#L21-L24). + // Picocolors snapshots `process.env`/`stdout.isTTY` at module load time, so when the worker + // process bootstraps with piped stdio its own check would disable colors. Re-evaluating the + // same conditions here lets us opt the worker into color output only when the parent would + // have seen colors, while still respecting explicit opt-outs like NO_COLOR. + const supportsColors = !workerEnv.NO_COLOR && !workerEnv.CI && workerEnv.TERM !== 'dumb' && (process.stdout.isTTY || ((_process_stderr = process.stderr) == null ? void 0 : _process_stderr.isTTY)); + if (supportsColors) { + workerEnv.FORCE_COLOR = '1'; + } + } + this._worker = new _jestworker.Worker(workerPath, { + ...farmOptions, + forkOptions: { + ...farmOptions.forkOptions, + execArgv: [ + ...execArgv, + ...((_farmOptions_forkOptions1 = farmOptions.forkOptions) == null ? void 0 : _farmOptions_forkOptions1.execArgv) || [] + ], + env: workerEnv + }, + maxRetries: 0 + }); + restartPromise = new Promise((resolve)=>resolveRestartPromise = resolve); + /** + * Jest Worker has two worker types, ChildProcessWorker (uses child_process) and NodeThreadWorker (uses worker_threads) + * Next.js uses ChildProcessWorker by default, but it can be switched to NodeThreadWorker with an experimental flag + * + * We only want to handle ChildProcessWorker's orphan process issue, so we access the private property "_child": + * https://github.com/facebook/jest/blob/b38d7d345a81d97d1dc3b68b8458b1837fbf19be/packages/jest-worker/src/workers/ChildProcessWorker.ts + * + * But this property is not available in NodeThreadWorker, so we need to check if we are using ChildProcessWorker + */ if (!farmOptions.enableWorkerThreads) { + var _this__worker__workerPool; + for (const worker of ((_this__worker__workerPool = this._worker._workerPool) == null ? void 0 : _this__worker__workerPool._workers) || []){ + var _worker__child, // if a child process emits a particular message, we track that as activity + // so the parent process can keep track of progress + _worker__child1; + (_worker__child = worker._child) == null ? void 0 : _worker__child.on('exit', (code, signal)=>{ + if ((code || signal && signal !== 'SIGINT') && this._worker) { + logger.error(`Next.js build worker exited with code: ${code} and signal: ${signal}`); + // if a child process doesn't exit gracefully, we want to bubble up the exit code to the parent process + process.exit(code ?? 1); + } + }); + (_worker__child1 = worker._child) == null ? void 0 : _worker__child1.on('message', ([, data])=>{ + if (data && typeof data === 'object' && 'type' in data && data.type === 'activity') { + onActivityImpl(); + } + }); + } + } + let aborted = false; + const onActivityAbortImpl = ()=>{ + if (!aborted) { + this._onActivityAbort == null ? void 0 : this._onActivityAbort.call(this); + aborted = true; + } + }; + // Listen to the worker's stdout and stderr, if there's any thing logged, abort the activity first + const abortActivityStreamOnLog = new _stream.Transform({ + transform (_chunk, _encoding, callback) { + onActivityAbortImpl(); + callback(); + } + }); + // Stop the activity if there's any output from the worker + this._worker.getStdout().pipe(abortActivityStreamOnLog); + this._worker.getStderr().pipe(abortActivityStreamOnLog); + // Pipe the worker's stdout and stderr to the parent process + this._worker.getStdout().pipe(process.stdout); + this._worker.getStderr().pipe(process.stderr); + }; + createWorker(); + const onHanging = ()=>{ + const worker = this._worker; + if (!worker) return; + const resolve = resolveRestartPromise; + createWorker(); + logger.warn(`Sending SIGTERM signal to static worker due to timeout${timeout ? ` of ${timeout / 1000} seconds` : ''}. Subsequent errors may be a result of the worker exiting.`); + worker.end().then(()=>{ + resolve(RESTARTED); + }); + }; + let hangingTimer = false; + const onActivityImpl = ()=>{ + if (hangingTimer) clearTimeout(hangingTimer); + if (this._onActivity) this._onActivity(); + hangingTimer = activeTasks > 0 && setTimeout(onHanging, timeout); + }; + // TODO: Remove this once callers stop passing non-serializable values + // (e.g. functions) in worker method arguments. The structured clone + // algorithm used by worker_threads rejects functions, unlike + // child_process which silently drops them via JSON serialization. + const sanitizeArgs = farmOptions.enableWorkerThreads ? (args)=>JSON.parse(JSON.stringify(args)) : (args)=>args; + for (const method of farmOptions.exposedMethods){ + if (method.startsWith('_')) continue; + this[method] = timeout ? async (...args)=>{ + activeTasks++; + const sanitizedArgs = sanitizeArgs(args); + try { + let attempts = 0; + for(;;){ + onActivityImpl(); + const result = await Promise.race([ + this._worker[method](...sanitizedArgs), + restartPromise + ]); + if (result !== RESTARTED) return result; + if (onRestart) onRestart(method, sanitizedArgs, ++attempts); + } + } finally{ + activeTasks--; + onActivityImpl(); + } + } : (...args)=>this._worker[method](...sanitizeArgs(args)); + } + } + setOnActivity(onActivity) { + this._onActivity = onActivity; + } + setOnActivityAbort(onActivityAbort) { + this._onActivityAbort = onActivityAbort; + } + end() { + const worker = this._worker; + if (!worker) { + throw Object.defineProperty(new Error('Farm is ended, no more calls can be done to it'), "__NEXT_ERROR_CODE", { + value: "E265", + enumerable: false, + configurable: true + }); + } + cleanupWorkers(worker); + this._worker = undefined; + return worker.end(); + } + /** + * Quietly end the worker if it exists + */ close() { + if (this._worker) { + cleanupWorkers(this._worker); + this._worker.end(); + } + } +} + +//# sourceMappingURL=worker.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/ReactDOMServerPages.js b/build/node_modules/next/dist/server/ReactDOMServerPages.js new file mode 100644 index 0000000..362aace --- /dev/null +++ b/build/node_modules/next/dist/server/ReactDOMServerPages.js @@ -0,0 +1,16 @@ +"use strict"; +let ReactDOMServer; +try { + // TODO: Use Node.js build unless we're in an Edge runtime. + ReactDOMServer = require('react-dom/server.edge'); +} catch (error) { + if (error.code !== 'MODULE_NOT_FOUND' && error.code !== 'ERR_PACKAGE_PATH_NOT_EXPORTED') { + throw error; + } + // In React versions without react-dom/server.edge, the browser build works in Node.js. + // The Node.js build does not support renderToReadableStream. + ReactDOMServer = require('react-dom/server.browser'); +} +module.exports = ReactDOMServer; + +//# sourceMappingURL=ReactDOMServerPages.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/accept-header.js b/build/node_modules/next/dist/server/accept-header.js new file mode 100644 index 0000000..0b23fa3 --- /dev/null +++ b/build/node_modules/next/dist/server/accept-header.js @@ -0,0 +1,132 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "acceptLanguage", { + enumerable: true, + get: function() { + return acceptLanguage; + } +}); +function parse(raw, preferences, options) { + const lowers = new Map(); + const header = raw.replace(/[ \t]/g, ''); + if (preferences) { + let pos = 0; + for (const preference of preferences){ + const lower = preference.toLowerCase(); + lowers.set(lower, { + orig: preference, + pos: pos++ + }); + if (options.prefixMatch) { + const parts = lower.split('-'); + while(parts.pop(), parts.length > 0){ + const joined = parts.join('-'); + if (!lowers.has(joined)) { + lowers.set(joined, { + orig: preference, + pos: pos++ + }); + } + } + } + } + } + const parts = header.split(','); + const selections = []; + const map = new Set(); + for(let i = 0; i < parts.length; ++i){ + const part = parts[i]; + if (!part) { + continue; + } + const params = part.split(';'); + if (params.length > 2) { + throw Object.defineProperty(new Error(`Invalid ${options.type} header`), "__NEXT_ERROR_CODE", { + value: "E77", + enumerable: false, + configurable: true + }); + } + let token = params[0].toLowerCase(); + if (!token) { + throw Object.defineProperty(new Error(`Invalid ${options.type} header`), "__NEXT_ERROR_CODE", { + value: "E77", + enumerable: false, + configurable: true + }); + } + const selection = { + token, + pos: i, + q: 1 + }; + if (preferences && lowers.has(token)) { + selection.pref = lowers.get(token).pos; + } + map.add(selection.token); + if (params.length === 2) { + const q = params[1]; + const [key, value] = q.split('='); + if (!value || key !== 'q' && key !== 'Q') { + throw Object.defineProperty(new Error(`Invalid ${options.type} header`), "__NEXT_ERROR_CODE", { + value: "E77", + enumerable: false, + configurable: true + }); + } + const score = parseFloat(value); + if (score === 0) { + continue; + } + if (Number.isFinite(score) && score <= 1 && score >= 0.001) { + selection.q = score; + } + } + selections.push(selection); + } + selections.sort((a, b)=>{ + if (b.q !== a.q) { + return b.q - a.q; + } + if (b.pref !== a.pref) { + if (a.pref === undefined) { + return 1; + } + if (b.pref === undefined) { + return -1; + } + return a.pref - b.pref; + } + return a.pos - b.pos; + }); + const values = selections.map((selection)=>selection.token); + if (!preferences || !preferences.length) { + return values; + } + const preferred = []; + for (const selection of values){ + if (selection === '*') { + for (const [preference, value] of lowers){ + if (!map.has(preference)) { + preferred.push(value.orig); + } + } + } else { + const lower = selection.toLowerCase(); + if (lowers.has(lower)) { + preferred.push(lowers.get(lower).orig); + } + } + } + return preferred; +} +function acceptLanguage(header = '', preferences) { + return parse(header, preferences, { + type: 'accept-language', + prefixMatch: true + })[0] || ''; +} + +//# sourceMappingURL=accept-header.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/after/after-context.js b/build/node_modules/next/dist/server/after/after-context.js new file mode 100644 index 0000000..8b045e1 --- /dev/null +++ b/build/node_modules/next/dist/server/after/after-context.js @@ -0,0 +1,140 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "AfterContext", { + enumerable: true, + get: function() { + return AfterContext; + } +}); +const _pqueue = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/p-queue")); +const _invarianterror = require("../../shared/lib/invariant-error"); +const _isthenable = require("../../shared/lib/is-thenable"); +const _workasyncstorageexternal = require("../app-render/work-async-storage.external"); +const _revalidationutils = require("../revalidation-utils"); +const _asynclocalstorage = require("../app-render/async-local-storage"); +const _workunitasyncstorageexternal = require("../app-render/work-unit-async-storage.external"); +const _aftertaskasyncstorageexternal = require("../app-render/after-task-async-storage.external"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +class AfterContext { + constructor({ waitUntil, onClose, onTaskError }){ + this.workUnitStores = new Set(); + this.waitUntil = waitUntil; + this.onClose = onClose; + this.onTaskError = onTaskError; + this.callbackQueue = new _pqueue.default(); + this.callbackQueue.pause(); + } + after(task) { + if ((0, _isthenable.isThenable)(task)) { + if (!this.waitUntil) { + errorWaitUntilNotAvailable(); + } + this.waitUntil(task.catch((error)=>this.reportTaskError('promise', error))); + } else if (typeof task === 'function') { + // TODO(after): implement tracing + this.addCallback(task); + } else { + throw Object.defineProperty(new Error('`after()`: Argument must be a promise or a function'), "__NEXT_ERROR_CODE", { + value: "E50", + enumerable: false, + configurable: true + }); + } + } + addCallback(callback) { + // if something is wrong, throw synchronously, bubbling up to the `after` callsite. + if (!this.waitUntil) { + errorWaitUntilNotAvailable(); + } + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workUnitStore) { + this.workUnitStores.add(workUnitStore); + } + const afterTaskStore = _aftertaskasyncstorageexternal.afterTaskAsyncStorage.getStore(); + // This is used for checking if request APIs can be called inside `after`. + // Note that we need to check the phase in which the *topmost* `after` was called (which should be "action"), + // not the current phase (which might be "after" if we're in a nested after). + // Otherwise, we might allow `after(() => headers())`, but not `after(() => after(() => headers()))`. + const rootTaskSpawnPhase = afterTaskStore ? afterTaskStore.rootTaskSpawnPhase // nested after + : workUnitStore == null ? void 0 : workUnitStore.phase // topmost after + ; + // this should only happen once. + if (!this.runCallbacksOnClosePromise) { + this.runCallbacksOnClosePromise = this.runCallbacksOnClose(); + this.waitUntil(this.runCallbacksOnClosePromise); + } + // Bind the callback to the current execution context (i.e. preserve all currently available ALS-es). + // We do this because we want all of these to be equivalent in every regard except timing: + // after(() => x()) + // after(x()) + // await x() + const wrappedCallback = (0, _asynclocalstorage.bindSnapshot)(// WARNING: Don't make this a named function. It must be anonymous. + // See: https://github.com/facebook/react/pull/34911 + async ()=>{ + try { + await _aftertaskasyncstorageexternal.afterTaskAsyncStorage.run({ + rootTaskSpawnPhase + }, ()=>callback()); + } catch (error) { + this.reportTaskError('function', error); + } + }); + this.callbackQueue.add(wrappedCallback); + } + async runCallbacksOnClose() { + await new Promise((resolve)=>this.onClose(resolve)); + return this.runCallbacks(); + } + async runCallbacks() { + if (this.callbackQueue.size === 0) return; + for (const workUnitStore of this.workUnitStores){ + workUnitStore.phase = 'after'; + } + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + if (!workStore) { + throw Object.defineProperty(new _invarianterror.InvariantError('Missing workStore in AfterContext.runCallbacks'), "__NEXT_ERROR_CODE", { + value: "E547", + enumerable: false, + configurable: true + }); + } + return (0, _revalidationutils.withExecuteRevalidates)(workStore, ()=>{ + this.callbackQueue.start(); + return this.callbackQueue.onIdle(); + }); + } + reportTaskError(taskKind, error) { + // TODO(after): this is fine for now, but will need better intergration with our error reporting. + // TODO(after): should we log this if we have a onTaskError callback? + console.error(taskKind === 'promise' ? `A promise passed to \`after()\` rejected:` : `An error occurred in a function passed to \`after()\`:`, error); + if (this.onTaskError) { + // this is very defensive, but we really don't want anything to blow up in an error handler + try { + this.onTaskError == null ? void 0 : this.onTaskError.call(this, error); + } catch (handlerError) { + console.error(Object.defineProperty(new _invarianterror.InvariantError('`onTaskError` threw while handling an error thrown from an `after` task', { + cause: handlerError + }), "__NEXT_ERROR_CODE", { + value: "E569", + enumerable: false, + configurable: true + })); + } + } + } +} +function errorWaitUntilNotAvailable() { + throw Object.defineProperty(new Error('`after()` will not work correctly, because `waitUntil` is not available in the current environment.'), "__NEXT_ERROR_CODE", { + value: "E91", + enumerable: false, + configurable: true + }); +} + +//# sourceMappingURL=after-context.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/after/after.js b/build/node_modules/next/dist/server/after/after.js new file mode 100644 index 0000000..2d69970 --- /dev/null +++ b/build/node_modules/next/dist/server/after/after.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "after", { + enumerable: true, + get: function() { + return after; + } +}); +const _workasyncstorageexternal = require("../app-render/work-async-storage.external"); +function after(task) { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + if (!workStore) { + // TODO(after): the linked docs page talks about *dynamic* APIs, which after soon won't be anymore + throw Object.defineProperty(new Error('`after` was called outside a request scope. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context'), "__NEXT_ERROR_CODE", { + value: "E468", + enumerable: false, + configurable: true + }); + } + const { afterContext } = workStore; + return afterContext.after(task); +} + +//# sourceMappingURL=after.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/after/awaiter.js b/build/node_modules/next/dist/server/after/awaiter.js new file mode 100644 index 0000000..5523cf5 --- /dev/null +++ b/build/node_modules/next/dist/server/after/awaiter.js @@ -0,0 +1,74 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + AwaiterMulti: null, + AwaiterOnce: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + AwaiterMulti: function() { + return AwaiterMulti; + }, + AwaiterOnce: function() { + return AwaiterOnce; + } +}); +const _invarianterror = require("../../shared/lib/invariant-error"); +class AwaiterMulti { + constructor({ onError } = {}){ + this.promises = new Set(); + this.waitUntil = (promise)=>{ + // if a promise settles before we await it, we should drop it -- + // storing them indefinitely could result in a memory leak. + const cleanup = ()=>{ + this.promises.delete(promise); + }; + promise.then(cleanup, (err)=>{ + cleanup(); + this.onError(err); + }); + this.promises.add(promise); + }; + this.onError = onError ?? console.error; + } + async awaiting() { + while(this.promises.size > 0){ + const promises = Array.from(this.promises); + this.promises.clear(); + await Promise.allSettled(promises); + } + } +} +class AwaiterOnce { + constructor(options = {}){ + this.done = false; + this.waitUntil = (promise)=>{ + if (this.done) { + throw Object.defineProperty(new _invarianterror.InvariantError('Cannot call waitUntil() on an AwaiterOnce that was already awaited'), "__NEXT_ERROR_CODE", { + value: "E563", + enumerable: false, + configurable: true + }); + } + return this.awaiter.waitUntil(promise); + }; + this.awaiter = new AwaiterMulti(options); + } + async awaiting() { + if (!this.pending) { + this.pending = this.awaiter.awaiting().finally(()=>{ + this.done = true; + }); + } + return this.pending; + } +} + +//# sourceMappingURL=awaiter.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/after/builtin-request-context.js b/build/node_modules/next/dist/server/after/builtin-request-context.js new file mode 100644 index 0000000..c9706a5 --- /dev/null +++ b/build/node_modules/next/dist/server/after/builtin-request-context.js @@ -0,0 +1,38 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createLocalRequestContext: null, + getBuiltinRequestContext: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createLocalRequestContext: function() { + return createLocalRequestContext; + }, + getBuiltinRequestContext: function() { + return getBuiltinRequestContext; + } +}); +const _asynclocalstorage = require("../app-render/async-local-storage"); +function getBuiltinRequestContext() { + const _globalThis = globalThis; + const ctx = _globalThis[NEXT_REQUEST_CONTEXT_SYMBOL]; + return ctx == null ? void 0 : ctx.get(); +} +const NEXT_REQUEST_CONTEXT_SYMBOL = Symbol.for('@next/request-context'); +function createLocalRequestContext() { + const storage = (0, _asynclocalstorage.createAsyncLocalStorage)(); + return { + get: ()=>storage.getStore(), + run: (value, callback)=>storage.run(value, callback) + }; +} + +//# sourceMappingURL=builtin-request-context.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/after/index.js b/build/node_modules/next/dist/server/after/index.js new file mode 100644 index 0000000..5f45137 --- /dev/null +++ b/build/node_modules/next/dist/server/after/index.js @@ -0,0 +1,21 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && __export(require("./after")); +_export_star(require("./after"), exports); +function _export_star(from, to) { + Object.keys(from).forEach(function(k) { + if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) { + Object.defineProperty(to, k, { + enumerable: true, + get: function() { + return from[k]; + } + }); + } + }); + return from; +} + +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/after/run-with-after.js b/build/node_modules/next/dist/server/after/run-with-after.js new file mode 100644 index 0000000..bfd1e00 --- /dev/null +++ b/build/node_modules/next/dist/server/after/run-with-after.js @@ -0,0 +1,35 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "AfterRunner", { + enumerable: true, + get: function() { + return AfterRunner; + } +}); +const _detachedpromise = require("../../lib/detached-promise"); +const _webonclose = require("../web/web-on-close"); +const _awaiter = require("./awaiter"); +class AfterRunner { + async executeAfter() { + this.closeController.dispatchClose(); + await this.awaiter.awaiting(); + // if we got an error while running the callbacks, + // thenthis is a noop, because the promise is already rejected + this.finishedWithoutErrors.resolve(); + return this.finishedWithoutErrors.promise; + } + constructor(){ + this.awaiter = new _awaiter.AwaiterOnce(); + this.closeController = new _webonclose.CloseController(); + this.finishedWithoutErrors = new _detachedpromise.DetachedPromise(); + this.context = { + waitUntil: this.awaiter.waitUntil.bind(this.awaiter), + onClose: this.closeController.onClose.bind(this.closeController), + onTaskError: (error)=>this.finishedWithoutErrors.reject(error) + }; + } +} + +//# sourceMappingURL=run-with-after.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/api-utils/get-cookie-parser.js b/build/node_modules/next/dist/server/api-utils/get-cookie-parser.js new file mode 100644 index 0000000..9997837 --- /dev/null +++ b/build/node_modules/next/dist/server/api-utils/get-cookie-parser.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getCookieParser", { + enumerable: true, + get: function() { + return getCookieParser; + } +}); +function getCookieParser(headers) { + return function parseCookie() { + const { cookie } = headers; + if (!cookie) { + return {}; + } + const { parse: parseCookieFn } = require('next/dist/compiled/cookie'); + return parseCookieFn(Array.isArray(cookie) ? cookie.join('; ') : cookie); + }; +} + +//# sourceMappingURL=get-cookie-parser.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/api-utils/index.js b/build/node_modules/next/dist/server/api-utils/index.js new file mode 100644 index 0000000..6d38e7d --- /dev/null +++ b/build/node_modules/next/dist/server/api-utils/index.js @@ -0,0 +1,201 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + ApiError: null, + COOKIE_NAME_PRERENDER_BYPASS: null, + COOKIE_NAME_PRERENDER_DATA: null, + RESPONSE_LIMIT_DEFAULT: null, + SYMBOL_CLEARED_COOKIES: null, + SYMBOL_PREVIEW_DATA: null, + checkIsOnDemandRevalidate: null, + clearPreviewData: null, + redirect: null, + sendError: null, + sendStatusCode: null, + setLazyProp: null, + wrapApiHandler: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + ApiError: function() { + return ApiError; + }, + COOKIE_NAME_PRERENDER_BYPASS: function() { + return COOKIE_NAME_PRERENDER_BYPASS; + }, + COOKIE_NAME_PRERENDER_DATA: function() { + return COOKIE_NAME_PRERENDER_DATA; + }, + RESPONSE_LIMIT_DEFAULT: function() { + return RESPONSE_LIMIT_DEFAULT; + }, + SYMBOL_CLEARED_COOKIES: function() { + return SYMBOL_CLEARED_COOKIES; + }, + SYMBOL_PREVIEW_DATA: function() { + return SYMBOL_PREVIEW_DATA; + }, + checkIsOnDemandRevalidate: function() { + return checkIsOnDemandRevalidate; + }, + clearPreviewData: function() { + return clearPreviewData; + }, + redirect: function() { + return redirect; + }, + sendError: function() { + return sendError; + }, + sendStatusCode: function() { + return sendStatusCode; + }, + setLazyProp: function() { + return setLazyProp; + }, + wrapApiHandler: function() { + return wrapApiHandler; + } +}); +const _headers = require("../web/spec-extension/adapters/headers"); +const _constants = require("../../lib/constants"); +const _tracer = require("../lib/trace/tracer"); +const _constants1 = require("../lib/trace/constants"); +function wrapApiHandler(page, handler) { + return (...args)=>{ + (0, _tracer.getTracer)().setRootSpanAttribute('next.route', page); + // Call API route method + return (0, _tracer.getTracer)().trace(_constants1.NodeSpan.runHandler, { + spanName: `executing api route (pages) ${page}` + }, ()=>handler(...args)); + }; +} +function sendStatusCode(res, statusCode) { + res.statusCode = statusCode; + return res; +} +function redirect(res, statusOrUrl, url) { + if (typeof statusOrUrl === 'string') { + url = statusOrUrl; + statusOrUrl = 307; + } + if (typeof statusOrUrl !== 'number' || typeof url !== 'string') { + throw Object.defineProperty(new Error(`Invalid redirect arguments. Please use a single argument URL, e.g. res.redirect('/destination') or use a status code and URL, e.g. res.redirect(307, '/destination').`), "__NEXT_ERROR_CODE", { + value: "E389", + enumerable: false, + configurable: true + }); + } + res.writeHead(statusOrUrl, { + Location: url + }); + res.write(url); + res.end(); + return res; +} +function checkIsOnDemandRevalidate(req, previewProps) { + const headers = _headers.HeadersAdapter.from(req.headers); + const previewModeId = headers.get(_constants.PRERENDER_REVALIDATE_HEADER); + const isOnDemandRevalidate = previewModeId === previewProps.previewModeId; + const revalidateOnlyGenerated = headers.has(_constants.PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER); + return { + isOnDemandRevalidate, + revalidateOnlyGenerated + }; +} +const COOKIE_NAME_PRERENDER_BYPASS = `__prerender_bypass`; +const COOKIE_NAME_PRERENDER_DATA = `__next_preview_data`; +const RESPONSE_LIMIT_DEFAULT = 4 * 1024 * 1024; +const SYMBOL_PREVIEW_DATA = Symbol(COOKIE_NAME_PRERENDER_DATA); +const SYMBOL_CLEARED_COOKIES = Symbol(COOKIE_NAME_PRERENDER_BYPASS); +function clearPreviewData(res, options = {}) { + if (SYMBOL_CLEARED_COOKIES in res) { + return res; + } + const { serialize } = require('next/dist/compiled/cookie'); + const previous = res.getHeader('Set-Cookie'); + res.setHeader(`Set-Cookie`, [ + ...typeof previous === 'string' ? [ + previous + ] : Array.isArray(previous) ? previous : [], + serialize(COOKIE_NAME_PRERENDER_BYPASS, '', { + // To delete a cookie, set `expires` to a date in the past: + // https://tools.ietf.org/html/rfc6265#section-4.1.1 + // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted. + expires: new Date(0), + httpOnly: true, + sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax', + secure: process.env.NODE_ENV !== 'development', + path: '/', + ...options.path !== undefined ? { + path: options.path + } : undefined + }), + serialize(COOKIE_NAME_PRERENDER_DATA, '', { + // To delete a cookie, set `expires` to a date in the past: + // https://tools.ietf.org/html/rfc6265#section-4.1.1 + // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted. + expires: new Date(0), + httpOnly: true, + sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax', + secure: process.env.NODE_ENV !== 'development', + path: '/', + ...options.path !== undefined ? { + path: options.path + } : undefined + }) + ]); + Object.defineProperty(res, SYMBOL_CLEARED_COOKIES, { + value: true, + enumerable: false + }); + return res; +} +class ApiError extends Error { + constructor(statusCode, message){ + super(message); + this.statusCode = statusCode; + } +} +function sendError(res, statusCode, message) { + res.statusCode = statusCode; + res.statusMessage = message; + res.end(message); +} +function setLazyProp({ req }, prop, getter) { + const opts = { + configurable: true, + enumerable: true + }; + const optsReset = { + ...opts, + writable: true + }; + Object.defineProperty(req, prop, { + ...opts, + get: ()=>{ + const value = getter(); + // we set the property on the object to avoid recalculating it + Object.defineProperty(req, prop, { + ...optsReset, + value + }); + return value; + }, + set: (value)=>{ + Object.defineProperty(req, prop, { + ...optsReset, + value + }); + } + }); +} + +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/api-utils/node/api-resolver.js b/build/node_modules/next/dist/server/api-utils/node/api-resolver.js new file mode 100644 index 0000000..0382c87 --- /dev/null +++ b/build/node_modules/next/dist/server/api-utils/node/api-resolver.js @@ -0,0 +1,395 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "apiResolver", { + enumerable: true, + get: function() { + return apiResolver; + } +}); +const _bytes = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/bytes")); +const _etag = require("../../lib/etag"); +const _sendpayload = require("../../send-payload"); +const _stream = require("stream"); +const _iserror = /*#__PURE__*/ _interop_require_default(require("../../../lib/is-error")); +const _utils = require("../../../shared/lib/utils"); +const _interopdefault = require("../../../lib/interop-default"); +const _index = require("./../index"); +const _getcookieparser = require("./../get-cookie-parser"); +const _constants = require("../../../lib/constants"); +const _trygetpreviewdata = require("./try-get-preview-data"); +const _parsebody = require("./parse-body"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function getMaxContentLength(responseLimit) { + if (responseLimit && typeof responseLimit !== 'boolean') { + return _bytes.default.parse(responseLimit); + } + return _index.RESPONSE_LIMIT_DEFAULT; +} +/** + * Send `any` body to response + * @param req request object + * @param res response object + * @param body of response + */ function sendData(req, res, body) { + if (body === null || body === undefined) { + res.end(); + return; + } + // strip irrelevant headers/body + if (res.statusCode === 204 || res.statusCode === 304) { + res.removeHeader('Content-Type'); + res.removeHeader('Content-Length'); + res.removeHeader('Transfer-Encoding'); + if (process.env.NODE_ENV === 'development' && body) { + console.warn(`A body was attempted to be set with a 204 statusCode for ${req.url}, this is invalid and the body was ignored.\n` + `See more info here https://nextjs.org/docs/messages/invalid-api-status-body`); + } + res.end(); + return; + } + const contentType = res.getHeader('Content-Type'); + if (body instanceof _stream.Stream) { + if (!contentType) { + res.setHeader('Content-Type', 'application/octet-stream'); + } + body.pipe(res); + return; + } + const isJSONLike = [ + 'object', + 'number', + 'boolean' + ].includes(typeof body); + const stringifiedBody = isJSONLike ? JSON.stringify(body) : body; + const etag = (0, _etag.generateETag)(stringifiedBody); + if ((0, _sendpayload.sendEtagResponse)(req, res, etag)) { + return; + } + if (Buffer.isBuffer(body)) { + if (!contentType) { + res.setHeader('Content-Type', 'application/octet-stream'); + } + res.setHeader('Content-Length', body.length); + res.end(body); + return; + } + if (isJSONLike) { + res.setHeader('Content-Type', _constants.JSON_CONTENT_TYPE_HEADER); + } + res.setHeader('Content-Length', Buffer.byteLength(stringifiedBody)); + res.end(stringifiedBody); +} +/** + * Send `JSON` object + * @param res response object + * @param jsonBody of data + */ function sendJson(res, jsonBody) { + // Set header to application/json + res.setHeader('Content-Type', _constants.JSON_CONTENT_TYPE_HEADER); + // Use send to handle request + res.send(JSON.stringify(jsonBody)); +} +function isValidData(str) { + return typeof str === 'string' && str.length >= 16; +} +function setDraftMode(res, options) { + if (!isValidData(options.previewModeId)) { + throw Object.defineProperty(new Error('invariant: invalid previewModeId'), "__NEXT_ERROR_CODE", { + value: "E169", + enumerable: false, + configurable: true + }); + } + const expires = options.enable ? undefined : new Date(0); + // To delete a cookie, set `expires` to a date in the past: + // https://tools.ietf.org/html/rfc6265#section-4.1.1 + // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted. + const { serialize } = require('next/dist/compiled/cookie'); + const previous = res.getHeader('Set-Cookie'); + res.setHeader(`Set-Cookie`, [ + ...typeof previous === 'string' ? [ + previous + ] : Array.isArray(previous) ? previous : [], + serialize(_index.COOKIE_NAME_PRERENDER_BYPASS, options.previewModeId, { + httpOnly: true, + sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax', + secure: process.env.NODE_ENV !== 'development', + path: '/', + expires + }) + ]); + return res; +} +function setPreviewData(res, data, options) { + if (!isValidData(options.previewModeId)) { + throw Object.defineProperty(new Error('invariant: invalid previewModeId'), "__NEXT_ERROR_CODE", { + value: "E169", + enumerable: false, + configurable: true + }); + } + if (!isValidData(options.previewModeEncryptionKey)) { + throw Object.defineProperty(new Error('invariant: invalid previewModeEncryptionKey'), "__NEXT_ERROR_CODE", { + value: "E334", + enumerable: false, + configurable: true + }); + } + if (!isValidData(options.previewModeSigningKey)) { + throw Object.defineProperty(new Error('invariant: invalid previewModeSigningKey'), "__NEXT_ERROR_CODE", { + value: "E436", + enumerable: false, + configurable: true + }); + } + const jsonwebtoken = require('next/dist/compiled/jsonwebtoken'); + const { encryptWithSecret } = require('../../crypto-utils'); + const payload = jsonwebtoken.sign({ + data: encryptWithSecret(Buffer.from(options.previewModeEncryptionKey), JSON.stringify(data)) + }, options.previewModeSigningKey, { + algorithm: 'HS256', + ...options.maxAge !== undefined ? { + expiresIn: options.maxAge + } : undefined + }); + // limit preview mode cookie to 2KB since we shouldn't store too much + // data here and browsers drop cookies over 4KB + if (payload.length > 2048) { + throw Object.defineProperty(new Error(`Preview data is limited to 2KB currently, reduce how much data you are storing as preview data to continue`), "__NEXT_ERROR_CODE", { + value: "E465", + enumerable: false, + configurable: true + }); + } + const { serialize } = require('next/dist/compiled/cookie'); + const previous = res.getHeader('Set-Cookie'); + res.setHeader(`Set-Cookie`, [ + ...typeof previous === 'string' ? [ + previous + ] : Array.isArray(previous) ? previous : [], + serialize(_index.COOKIE_NAME_PRERENDER_BYPASS, options.previewModeId, { + httpOnly: true, + sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax', + secure: process.env.NODE_ENV !== 'development', + path: '/', + ...options.maxAge !== undefined ? { + maxAge: options.maxAge + } : undefined, + ...options.path !== undefined ? { + path: options.path + } : undefined + }), + serialize(_index.COOKIE_NAME_PRERENDER_DATA, payload, { + httpOnly: true, + sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax', + secure: process.env.NODE_ENV !== 'development', + path: '/', + ...options.maxAge !== undefined ? { + maxAge: options.maxAge + } : undefined, + ...options.path !== undefined ? { + path: options.path + } : undefined + }) + ]); + return res; +} +async function revalidate(urlPath, opts, req, context) { + if (typeof urlPath !== 'string' || !urlPath.startsWith('/')) { + throw Object.defineProperty(new Error(`Invalid urlPath provided to revalidate(), must be a path e.g. /blog/post-1, received ${urlPath}`), "__NEXT_ERROR_CODE", { + value: "E153", + enumerable: false, + configurable: true + }); + } + const headers = { + [_constants.PRERENDER_REVALIDATE_HEADER]: context.previewModeId, + ...opts.unstable_onlyGenerated ? { + [_constants.PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER]: '1' + } : {} + }; + const allowedRevalidateHeaderKeys = [ + ...context.allowedRevalidateHeaderKeys || [] + ]; + if (context.trustHostHeader || context.dev) { + allowedRevalidateHeaderKeys.push('cookie'); + } + if (context.trustHostHeader) { + allowedRevalidateHeaderKeys.push('x-vercel-protection-bypass'); + } + for (const key of Object.keys(req.headers)){ + if (allowedRevalidateHeaderKeys.includes(key)) { + headers[key] = req.headers[key]; + } + } + const internalRevalidate = context.internalRevalidate; + try { + // We use the revalidate in router-server if available. + // If we are operating without router-server (serverless) + // we must go through network layer with fetch request + if (internalRevalidate) { + return await internalRevalidate({ + urlPath, + headers, + opts + }); + } + if (context.trustHostHeader) { + const res = await fetch(`https://${req.headers.host}${urlPath}`, { + method: 'HEAD', + headers + }); + // we use the cache header to determine successful revalidate as + // a non-200 status code can be returned from a successful revalidate + // e.g. notFound: true returns 404 status code but is successful + const cacheHeader = res.headers.get('x-vercel-cache') || res.headers.get('x-nextjs-cache'); + if ((cacheHeader == null ? void 0 : cacheHeader.toUpperCase()) !== 'REVALIDATED' && res.status !== 200 && !(res.status === 404 && opts.unstable_onlyGenerated)) { + throw Object.defineProperty(new Error(`Invalid response ${res.status}`), "__NEXT_ERROR_CODE", { + value: "E175", + enumerable: false, + configurable: true + }); + } + } else { + throw Object.defineProperty(new Error(`Invariant: missing internal router-server-methods this is an internal bug`), "__NEXT_ERROR_CODE", { + value: "E676", + enumerable: false, + configurable: true + }); + } + } catch (err) { + throw Object.defineProperty(new Error(`Failed to revalidate ${urlPath}: ${(0, _iserror.default)(err) ? err.message : err}`), "__NEXT_ERROR_CODE", { + value: "E240", + enumerable: false, + configurable: true + }); + } +} +async function apiResolver(req, res, query, resolverModule, apiContext, propagateError, dev, page, onError) { + const apiReq = req; + const apiRes = res; + try { + var _config_api, _config_api1, _config_api2; + if (!resolverModule) { + res.statusCode = 404; + res.end('Not Found'); + return; + } + const config = resolverModule.config || {}; + const bodyParser = ((_config_api = config.api) == null ? void 0 : _config_api.bodyParser) !== false; + const responseLimit = ((_config_api1 = config.api) == null ? void 0 : _config_api1.responseLimit) ?? true; + const externalResolver = ((_config_api2 = config.api) == null ? void 0 : _config_api2.externalResolver) || false; + // Parsing of cookies + (0, _index.setLazyProp)({ + req: apiReq + }, 'cookies', (0, _getcookieparser.getCookieParser)(req.headers)); + // Ensure req.query is a writable, enumerable property by using Object.defineProperty. + // This addresses Express 5.x, which defines query as a getter only (read-only). + Object.defineProperty(apiReq, 'query', { + value: { + ...query + }, + writable: true, + enumerable: true, + configurable: true + }); + // Parsing preview data + (0, _index.setLazyProp)({ + req: apiReq + }, 'previewData', ()=>(0, _trygetpreviewdata.tryGetPreviewData)(req, res, apiContext, !!apiContext.multiZoneDraftMode)); + // Checking if preview mode is enabled + (0, _index.setLazyProp)({ + req: apiReq + }, 'preview', ()=>apiReq.previewData !== false ? true : undefined); + // Set draftMode to the same value as preview + (0, _index.setLazyProp)({ + req: apiReq + }, 'draftMode', ()=>apiReq.preview); + // Parsing of body + if (bodyParser && !apiReq.body) { + apiReq.body = await (0, _parsebody.parseBody)(apiReq, config.api && config.api.bodyParser && config.api.bodyParser.sizeLimit ? config.api.bodyParser.sizeLimit : '1mb'); + } + let contentLength = 0; + const maxContentLength = getMaxContentLength(responseLimit); + const writeData = apiRes.write; + const endResponse = apiRes.end; + apiRes.write = (...args)=>{ + contentLength += Buffer.byteLength(args[0] || ''); + return writeData.apply(apiRes, args); + }; + apiRes.end = (...args)=>{ + if (args.length && typeof args[0] !== 'function') { + contentLength += Buffer.byteLength(args[0] || ''); + } + if (responseLimit && contentLength >= maxContentLength) { + console.warn(`API response for ${req.url} exceeds ${_bytes.default.format(maxContentLength)}. API Routes are meant to respond quickly. https://nextjs.org/docs/messages/api-routes-response-size-limit`); + } + return endResponse.apply(apiRes, args); + }; + apiRes.status = (statusCode)=>(0, _index.sendStatusCode)(apiRes, statusCode); + apiRes.send = (data)=>sendData(apiReq, apiRes, data); + apiRes.json = (data)=>sendJson(apiRes, data); + apiRes.redirect = (statusOrUrl, url)=>(0, _index.redirect)(apiRes, statusOrUrl, url); + apiRes.setDraftMode = (options = { + enable: true + })=>setDraftMode(apiRes, Object.assign({}, apiContext, options)); + apiRes.setPreviewData = (data, options = {})=>setPreviewData(apiRes, data, Object.assign({}, apiContext, options)); + apiRes.clearPreviewData = (options = {})=>(0, _index.clearPreviewData)(apiRes, options); + apiRes.revalidate = (urlPath, opts)=>revalidate(urlPath, opts || {}, req, apiContext); + const resolver = (0, _interopdefault.interopDefault)(resolverModule); + let wasPiped = false; + if (process.env.NODE_ENV !== 'production') { + // listen for pipe event and don't show resolve warning + res.once('pipe', ()=>wasPiped = true); + } + const apiRouteResult = await resolver(req, res); + if (process.env.NODE_ENV !== 'production') { + if (typeof apiRouteResult !== 'undefined') { + if (apiRouteResult instanceof Response) { + throw Object.defineProperty(new Error('API route returned a Response object in the Node.js runtime, this is not supported. Please use `runtime: "edge"` instead: https://nextjs.org/docs/api-routes/edge-api-routes'), "__NEXT_ERROR_CODE", { + value: "E36", + enumerable: false, + configurable: true + }); + } + console.warn(`API handler should not return a value, received ${typeof apiRouteResult}.`); + } + if (!externalResolver && !(0, _utils.isResSent)(res) && !wasPiped) { + console.warn(`API resolved without sending a response for ${req.url}, this may result in stalled requests.`); + } + } + } catch (err) { + await (onError == null ? void 0 : onError(err, { + method: req.method || 'GET', + headers: req.headers, + path: req.url || '/' + }, { + routerKind: 'Pages Router', + routePath: page || '', + routeType: 'route', + revalidateReason: undefined + })); + if (err instanceof _index.ApiError) { + (0, _index.sendError)(apiRes, err.statusCode, err.message); + } else { + if (dev) { + if ((0, _iserror.default)(err)) { + err.page = page; + } + throw err; + } + console.error(err); + if (propagateError) { + throw err; + } + (0, _index.sendError)(apiRes, 500, 'Internal Server Error'); + } + } +} + +//# sourceMappingURL=api-resolver.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/api-utils/node/parse-body.js b/build/node_modules/next/dist/server/api-utils/node/parse-body.js new file mode 100644 index 0000000..1c820bc --- /dev/null +++ b/build/node_modules/next/dist/server/api-utils/node/parse-body.js @@ -0,0 +1,79 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "parseBody", { + enumerable: true, + get: function() { + return parseBody; + } +}); +const _contenttype = require("next/dist/compiled/content-type"); +const _iserror = /*#__PURE__*/ _interop_require_default(require("../../../lib/is-error")); +const _index = require("../index"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +/** + * Parse `JSON` and handles invalid `JSON` strings + * @param str `JSON` string + */ function parseJson(str) { + if (str.length === 0) { + // special-case empty json body, as it's a common client-side mistake + return {}; + } + try { + return JSON.parse(str); + } catch (e) { + throw Object.defineProperty(new _index.ApiError(400, 'Invalid JSON'), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } +} +async function parseBody(req, limit) { + let contentType; + try { + contentType = (0, _contenttype.parse)(req.headers['content-type'] || 'text/plain'); + } catch { + contentType = (0, _contenttype.parse)('text/plain'); + } + const { type, parameters } = contentType; + const encoding = parameters.charset || 'utf-8'; + let buffer; + try { + const getRawBody = require('next/dist/compiled/raw-body'); + buffer = await getRawBody(req, { + encoding, + limit + }); + } catch (e) { + if ((0, _iserror.default)(e) && e.type === 'entity.too.large') { + throw Object.defineProperty(new _index.ApiError(413, `Body exceeded ${limit} limit`), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } else { + throw Object.defineProperty(new _index.ApiError(400, 'Invalid body'), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + } + const body = buffer.toString(); + if (type === 'application/json' || type === 'application/ld+json') { + return parseJson(body); + } else if (type === 'application/x-www-form-urlencoded') { + const qs = require('querystring'); + return qs.decode(body); + } else { + return body; + } +} + +//# sourceMappingURL=parse-body.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/api-utils/node/try-get-preview-data.js b/build/node_modules/next/dist/server/api-utils/node/try-get-preview-data.js new file mode 100644 index 0000000..62bcd3d --- /dev/null +++ b/build/node_modules/next/dist/server/api-utils/node/try-get-preview-data.js @@ -0,0 +1,86 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "tryGetPreviewData", { + enumerable: true, + get: function() { + return tryGetPreviewData; + } +}); +const _ = require("../."); +const _index = require("../index"); +const _cookies = require("../../web/spec-extension/cookies"); +const _headers = require("../../web/spec-extension/adapters/headers"); +function tryGetPreviewData(req, res, options, multiZoneDraftMode) { + var _cookies_get, _cookies_get1; + // if an On-Demand revalidation is being done preview mode + // is disabled + if (options && (0, _.checkIsOnDemandRevalidate)(req, options).isOnDemandRevalidate) { + return false; + } + // Read cached preview data if present + // TODO: use request metadata instead of a symbol + if (_index.SYMBOL_PREVIEW_DATA in req) { + return req[_index.SYMBOL_PREVIEW_DATA]; + } + const headers = _headers.HeadersAdapter.from(req.headers); + const cookies = new _cookies.RequestCookies(headers); + const previewModeId = (_cookies_get = cookies.get(_index.COOKIE_NAME_PRERENDER_BYPASS)) == null ? void 0 : _cookies_get.value; + const tokenPreviewData = (_cookies_get1 = cookies.get(_index.COOKIE_NAME_PRERENDER_DATA)) == null ? void 0 : _cookies_get1.value; + // Case: preview mode cookie set but data cookie is not set + if (previewModeId && !tokenPreviewData && previewModeId === options.previewModeId) { + // This is "Draft Mode" which doesn't use + // previewData, so we return an empty object + // for backwards compat with "Preview Mode". + const data = {}; + Object.defineProperty(req, _index.SYMBOL_PREVIEW_DATA, { + value: data, + enumerable: false + }); + return data; + } + // Case: neither cookie is set. + if (!previewModeId && !tokenPreviewData) { + return false; + } + // Case: one cookie is set, but not the other. + if (!previewModeId || !tokenPreviewData) { + if (!multiZoneDraftMode) { + (0, _index.clearPreviewData)(res); + } + return false; + } + // Case: preview session is for an old build. + if (previewModeId !== options.previewModeId) { + if (!multiZoneDraftMode) { + (0, _index.clearPreviewData)(res); + } + return false; + } + let encryptedPreviewData; + try { + const jsonwebtoken = require('next/dist/compiled/jsonwebtoken'); + encryptedPreviewData = jsonwebtoken.verify(tokenPreviewData, options.previewModeSigningKey); + } catch { + // TODO: warn + (0, _index.clearPreviewData)(res); + return false; + } + const { decryptWithSecret } = require('../../crypto-utils'); + const decryptedPreviewData = decryptWithSecret(Buffer.from(options.previewModeEncryptionKey), encryptedPreviewData.data); + try { + // TODO: strict runtime type checking + const data = JSON.parse(decryptedPreviewData); + // Cache lookup + Object.defineProperty(req, _index.SYMBOL_PREVIEW_DATA, { + value: data, + enumerable: false + }); + return data; + } catch { + return false; + } +} + +//# sourceMappingURL=try-get-preview-data.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/api-utils/web.js b/build/node_modules/next/dist/server/api-utils/web.js new file mode 100644 index 0000000..0ac193f --- /dev/null +++ b/build/node_modules/next/dist/server/api-utils/web.js @@ -0,0 +1,17 @@ +// Buffer.byteLength polyfill in the Edge runtime, with only utf8 strings +// supported at the moment. +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "byteLength", { + enumerable: true, + get: function() { + return byteLength; + } +}); +function byteLength(payload) { + return new TextEncoder().encode(payload).buffer.byteLength; +} + +//# sourceMappingURL=web.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/action-async-storage-instance.js b/build/node_modules/next/dist/server/app-render/action-async-storage-instance.js new file mode 100644 index 0000000..a9d8f68 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/action-async-storage-instance.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "actionAsyncStorageInstance", { + enumerable: true, + get: function() { + return actionAsyncStorageInstance; + } +}); +const _asynclocalstorage = require("./async-local-storage"); +const actionAsyncStorageInstance = (0, _asynclocalstorage.createAsyncLocalStorage)(); + +//# sourceMappingURL=action-async-storage-instance.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/action-async-storage.external.js b/build/node_modules/next/dist/server/app-render/action-async-storage.external.js new file mode 100644 index 0000000..9b19aed --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/action-async-storage.external.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "actionAsyncStorage", { + enumerable: true, + get: function() { + return _actionasyncstorageinstance.actionAsyncStorageInstance; + } +}); +const _actionasyncstorageinstance = require("./action-async-storage-instance"); + +//# sourceMappingURL=action-async-storage.external.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/action-handler.js b/build/node_modules/next/dist/server/app-render/action-handler.js new file mode 100644 index 0000000..0b34ac2 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/action-handler.js @@ -0,0 +1,1017 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + handleAction: null, + parseHostHeader: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + handleAction: function() { + return handleAction; + }, + parseHostHeader: function() { + return parseHostHeader; + } +}); +const _approuterheaders = require("../../client/components/app-router-headers"); +const _httpaccessfallback = require("../../client/components/http-access-fallback/http-access-fallback"); +const _redirect = require("../../client/components/redirect"); +const _redirecterror = require("../../client/components/redirect-error"); +const _renderresult = /*#__PURE__*/ _interop_require_default(require("../render-result")); +const _flightrenderresult = require("./flight-render-result"); +const _utils = require("../lib/server-ipc/utils"); +const _requestcookies = require("../web/spec-extension/adapters/request-cookies"); +const _constants = require("../../lib/constants"); +const _serveractionrequestmeta = require("../lib/server-action-request-meta"); +const _csrfprotection = require("./csrf-protection"); +const _log = require("../../build/output/log"); +const _cookies = require("../web/spec-extension/cookies"); +const _headers = require("../web/spec-extension/adapters/headers"); +const _utils1 = require("../web/utils"); +const _manifestssingleton = require("./manifests-singleton"); +const _helpers = require("../base-http/helpers"); +const _segmentexplorerpath = require("./segment-explorer-path"); +const _serverreferenceinfo = require("../../shared/lib/server-reference-info"); +const _redirectstatuscode = require("../../client/components/redirect-status-code"); +const _requeststore = require("../async-storage/request-store"); +const _workunitasyncstorageexternal = require("../app-render/work-unit-async-storage.external"); +const _invarianterror = require("../../shared/lib/invariant-error"); +const _revalidationutils = require("../revalidation-utils"); +const _requestmeta = require("../request-meta"); +const _setcachebustingsearchparam = require("../../client/components/router-reducer/set-cache-busting-search-param"); +const _actionrevalidationkind = require("../../shared/lib/action-revalidation-kind"); +const _cachebustingsearchparam = require("../../shared/lib/router/utils/cache-busting-search-param"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const INLINE_ACTION_PREFIX = '$$RSC_SERVER_ACTION_'; +/** + * Checks if the app has any server actions defined in any runtime. + */ function hasServerActions() { + const serverActionsManifest = (0, _manifestssingleton.getServerActionsManifest)(); + return Object.keys(serverActionsManifest.node).length > 0 || Object.keys(serverActionsManifest.edge).length > 0; +} +function nodeHeadersToRecord(headers) { + const record = {}; + for (const [key, value] of Object.entries(headers)){ + if (value !== undefined) { + record[key] = Array.isArray(value) ? value.join(', ') : `${value}`; + } + } + return record; +} +function getForwardedHeaders(req, res) { + // Get request headers and cookies + const requestHeaders = req.headers; + const requestCookies = new _cookies.RequestCookies(_headers.HeadersAdapter.from(requestHeaders)); + // Get response headers and cookies + const responseHeaders = res.getHeaders(); + const responseCookies = new _cookies.ResponseCookies((0, _utils1.fromNodeOutgoingHttpHeaders)(responseHeaders)); + // Merge request and response headers + const mergedHeaders = (0, _utils.filterReqHeaders)({ + ...nodeHeadersToRecord(requestHeaders), + ...nodeHeadersToRecord(responseHeaders) + }, _utils.actionsForbiddenHeaders); + // Merge cookies into requestCookies, so responseCookies always take precedence + // and overwrite/delete those from requestCookies. + responseCookies.getAll().forEach((cookie)=>{ + if (typeof cookie.value === 'undefined') { + requestCookies.delete(cookie.name); + } else { + requestCookies.set(cookie); + } + }); + // Update the 'cookie' header with the merged cookies + mergedHeaders['cookie'] = requestCookies.toString(); + // Remove headers that should not be forwarded + delete mergedHeaders['transfer-encoding']; + return new Headers(mergedHeaders); +} +function addRevalidationHeader(res, { workStore, requestStore }) { + var _workStore_pendingRevalidatedTags; + // If a tag was revalidated, the client router needs to invalidate all the + // client router cache as they may be stale. And if a path was revalidated, the + // client needs to invalidate all subtrees below that path. + // TODO: Currently we don't send the specific tags or paths to the client, + // we just send a flag indicating that all the static data on the client + // should be invalidated. In the future, this will likely be a Bloom filter + // or bitmask of some kind. + // TODO-APP: Currently the prefetch cache doesn't have subtree information, + // so we need to invalidate the entire cache if a path was revalidated. + // TODO-APP: Currently paths are treated as tags, so the second element of the tuple + // is always empty. + // Only count tags without a profile (updateTag) as requiring client cache invalidation + // Tags with a profile (revalidateTag) use stale-while-revalidate and shouldn't + // trigger immediate client-side cache invalidation + const isTagRevalidated = ((_workStore_pendingRevalidatedTags = workStore.pendingRevalidatedTags) == null ? void 0 : _workStore_pendingRevalidatedTags.some((item)=>item.profile === undefined)) ? 1 : 0; + const isCookieRevalidated = (0, _requestcookies.getModifiedCookieValues)(requestStore.mutableCookies).length ? 1 : 0; + // First check if a tag, cookie, or path was revalidated. + if (isTagRevalidated || isCookieRevalidated) { + res.setHeader(_approuterheaders.NEXT_ACTION_REVALIDATED_HEADER, JSON.stringify(_actionrevalidationkind.ActionDidRevalidateStaticAndDynamic)); + } else if (// Check for refresh() actions. This will invalidate only the dynamic data. + workStore.pathWasRevalidated !== undefined && workStore.pathWasRevalidated !== _actionrevalidationkind.ActionDidNotRevalidate) { + res.setHeader(_approuterheaders.NEXT_ACTION_REVALIDATED_HEADER, JSON.stringify(workStore.pathWasRevalidated)); + } +} +/** + * Forwards a server action request to a separate worker. Used when the requested action is not available in the current worker. + */ async function createForwardedActionResponse(req, res, host, workerPathname, basePath) { + var _getRequestMeta; + if (!host) { + throw Object.defineProperty(new Error('Invariant: Missing `host` header from a forwarded Server Actions request.'), "__NEXT_ERROR_CODE", { + value: "E226", + enumerable: false, + configurable: true + }); + } + const forwardedHeaders = getForwardedHeaders(req, res); + // indicate that this action request was forwarded from another worker + // we use this to skip rendering the flight tree so that we don't update the UI + // with the response from the forwarded worker + forwardedHeaders.set('x-action-forwarded', '1'); + const proto = ((_getRequestMeta = (0, _requestmeta.getRequestMeta)(req, 'initProtocol')) == null ? void 0 : _getRequestMeta.replace(/:+$/, '')) || 'https'; + // For standalone or the serverful mode, use the internal origin directly + // other than the host headers from the request. + const origin = process.env.__NEXT_PRIVATE_ORIGIN || `${proto}://${host.value}`; + const fetchUrl = new URL(`${origin}${basePath}${workerPathname}`); + try { + var _response_headers_get; + let body; + if (// The type check here ensures that `req` is correctly typed, and the + // environment variable check provides dead code elimination. + process.env.NEXT_RUNTIME === 'edge' && (0, _helpers.isWebNextRequest)(req)) { + if (!req.body) { + throw Object.defineProperty(new Error('Invariant: missing request body.'), "__NEXT_ERROR_CODE", { + value: "E333", + enumerable: false, + configurable: true + }); + } + body = req.body; + } else if (// The type check here ensures that `req` is correctly typed, and the + // environment variable check provides dead code elimination. + process.env.NEXT_RUNTIME !== 'edge' && (0, _helpers.isNodeNextRequest)(req)) { + body = req.stream(); + } else { + throw Object.defineProperty(new Error('Invariant: Unknown request type.'), "__NEXT_ERROR_CODE", { + value: "E114", + enumerable: false, + configurable: true + }); + } + // Forward the request to the new worker + const response = await fetch(fetchUrl, { + method: 'POST', + body, + duplex: 'half', + headers: forwardedHeaders, + redirect: 'manual', + next: { + // @ts-ignore + internal: 1 + } + }); + if ((_response_headers_get = response.headers.get('content-type')) == null ? void 0 : _response_headers_get.startsWith(_approuterheaders.RSC_CONTENT_TYPE_HEADER)) { + // copy the headers from the redirect response to the response we're sending + for (const [key, value] of response.headers){ + if (!_utils.actionsForbiddenHeaders.includes(key)) { + res.setHeader(key, value); + } + } + return new _flightrenderresult.FlightRenderResult(response.body); + } else { + var // Since we aren't consuming the response body, we cancel it to avoid memory leaks + _response_body; + (_response_body = response.body) == null ? void 0 : _response_body.cancel(); + } + } catch (err) { + // we couldn't stream the forwarded response, so we'll just return an empty response + console.error(`failed to forward action response`, err); + } + return _renderresult.default.fromStatic('{}', _constants.JSON_CONTENT_TYPE_HEADER); +} +/** + * Returns the parsed redirect URL if we deem that it is hosted by us. + * + * We handle both relative and absolute redirect URLs. + * + * In case the redirect URL is not relative to the application we return `null`. + */ function getAppRelativeRedirectUrl(basePath, host, redirectUrl, currentPathname) { + if (redirectUrl.startsWith('/')) { + // Absolute path - just add basePath + return new URL(`${basePath}${redirectUrl}`, 'http://n'); + } else if (redirectUrl.startsWith('.')) { + // Relative path - resolve relative to current pathname + let base = currentPathname || '/'; + // Ensure the base path ends with a slash so relative resolution works correctly + // e.g., "./subpage" from "/subdir" should resolve to "/subdir/subpage" + // not "/subpage" + if (!base.endsWith('/')) { + base = base + '/'; + } + const resolved = new URL(redirectUrl, `http://n${base}`); + // Include basePath in the final URL + return new URL(`${basePath}${resolved.pathname}${resolved.search}${resolved.hash}`, 'http://n'); + } + const parsedRedirectUrl = new URL(redirectUrl); + if ((host == null ? void 0 : host.value) !== parsedRedirectUrl.host) { + return null; + } + // At this point the hosts are the same, just confirm we + // are routing to a path underneath the `basePath` + return parsedRedirectUrl.pathname.startsWith(basePath) ? parsedRedirectUrl : null; +} +async function createRedirectRenderResult(req, res, originalHost, redirectUrl, redirectType, basePath, workStore, currentPathname) { + res.setHeader('x-action-redirect', `${redirectUrl};${redirectType}`); + // If we're redirecting to another route of this Next.js application, we'll + // try to stream the response from the other worker path. When that works, + // we can save an extra roundtrip and avoid a full page reload. + // When the redirect URL starts with a `/` or is to the same host, under the + // `basePath` we treat it as an app-relative redirect; + const appRelativeRedirectUrl = getAppRelativeRedirectUrl(basePath, originalHost, redirectUrl, currentPathname); + if (appRelativeRedirectUrl) { + var _getRequestMeta; + if (!originalHost) { + throw Object.defineProperty(new Error('Invariant: Missing `host` header from a forwarded Server Actions request.'), "__NEXT_ERROR_CODE", { + value: "E226", + enumerable: false, + configurable: true + }); + } + const forwardedHeaders = getForwardedHeaders(req, res); + forwardedHeaders.set(_approuterheaders.RSC_HEADER, '1'); + const proto = ((_getRequestMeta = (0, _requestmeta.getRequestMeta)(req, 'initProtocol')) == null ? void 0 : _getRequestMeta.replace(/:+$/, '')) || 'https'; + // For standalone or the serverful mode, use the internal origin directly + // other than the host headers from the request. + const origin = process.env.__NEXT_PRIVATE_ORIGIN || `${proto}://${originalHost.value}`; + const fetchUrl = new URL(`${origin}${appRelativeRedirectUrl.pathname}${appRelativeRedirectUrl.search}`); + if (workStore.pendingRevalidatedTags) { + var _workStore_incrementalCache_prerenderManifest_preview, _workStore_incrementalCache_prerenderManifest, _workStore_incrementalCache; + forwardedHeaders.set(_constants.NEXT_CACHE_REVALIDATED_TAGS_HEADER, workStore.pendingRevalidatedTags.map((item)=>item.tag).join(',')); + forwardedHeaders.set(_constants.NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER, ((_workStore_incrementalCache = workStore.incrementalCache) == null ? void 0 : (_workStore_incrementalCache_prerenderManifest = _workStore_incrementalCache.prerenderManifest) == null ? void 0 : (_workStore_incrementalCache_prerenderManifest_preview = _workStore_incrementalCache_prerenderManifest.preview) == null ? void 0 : _workStore_incrementalCache_prerenderManifest_preview.previewModeId) || ''); + } + // Ensures that when the path was revalidated we don't return a partial response on redirects + forwardedHeaders.delete(_approuterheaders.NEXT_ROUTER_STATE_TREE_HEADER); + // When an action follows a redirect, it's no longer handling an action: it's just a normal RSC request + // to the requested URL. We should remove the `next-action` header so that it's not treated as an action + forwardedHeaders.delete(_approuterheaders.ACTION_HEADER); + try { + var _response_headers_get; + const cacheBustingSearchParam = await (0, _cachebustingsearchparam.computeCacheBustingSearchParam)(forwardedHeaders.get(_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER) ? '1' : undefined, forwardedHeaders.get(_approuterheaders.NEXT_ROUTER_SEGMENT_PREFETCH_HEADER) ?? undefined, forwardedHeaders.get(_approuterheaders.NEXT_ROUTER_STATE_TREE_HEADER) ?? undefined, forwardedHeaders.get(_approuterheaders.NEXT_URL) ?? undefined); + (0, _setcachebustingsearchparam.setCacheBustingSearchParamWithHash)(fetchUrl, cacheBustingSearchParam); + const response = await fetch(fetchUrl, { + method: 'GET', + headers: forwardedHeaders, + next: { + // @ts-ignore + internal: 1 + } + }); + if ((_response_headers_get = response.headers.get('content-type')) == null ? void 0 : _response_headers_get.startsWith(_approuterheaders.RSC_CONTENT_TYPE_HEADER)) { + // copy the headers from the redirect response to the response we're sending + for (const [key, value] of response.headers){ + if (!_utils.actionsForbiddenHeaders.includes(key)) { + res.setHeader(key, value); + } + } + return new _flightrenderresult.FlightRenderResult(response.body); + } else { + var // Since we aren't consuming the response body, we cancel it to avoid memory leaks + _response_body; + (_response_body = response.body) == null ? void 0 : _response_body.cancel(); + } + } catch (err) { + // we couldn't stream the redirect response, so we'll just do a normal redirect + console.error(`failed to get redirect response`, err); + } + } + return _renderresult.default.EMPTY; +} +/** + * Ensures the value of the header can't create long logs. + */ function limitUntrustedHeaderValueForLogs(value) { + return value.length > 100 ? value.slice(0, 100) + '...' : value; +} +function parseHostHeader(headers, originDomain) { + var _forwardedHostHeader_split_, _forwardedHostHeader_split; + const forwardedHostHeader = headers['x-forwarded-host']; + const forwardedHostHeaderValue = forwardedHostHeader && Array.isArray(forwardedHostHeader) ? forwardedHostHeader[0] : forwardedHostHeader == null ? void 0 : (_forwardedHostHeader_split = forwardedHostHeader.split(',')) == null ? void 0 : (_forwardedHostHeader_split_ = _forwardedHostHeader_split[0]) == null ? void 0 : _forwardedHostHeader_split_.trim(); + const hostHeader = headers['host']; + if (originDomain) { + return forwardedHostHeaderValue === originDomain ? { + type: "x-forwarded-host", + value: forwardedHostHeaderValue + } : hostHeader === originDomain ? { + type: "host", + value: hostHeader + } : undefined; + } + return forwardedHostHeaderValue ? { + type: "x-forwarded-host", + value: forwardedHostHeaderValue + } : hostHeader ? { + type: "host", + value: hostHeader + } : undefined; +} +async function handleAction({ req, res, ComponentMod, generateFlight, workStore, requestStore, serverActions, ctx, metadata }) { + const contentType = req.headers['content-type']; + const { page } = ctx.renderOpts; + const serverModuleMap = (0, _manifestssingleton.getServerModuleMap)(); + const { actionId, isMultipartAction, isFetchAction, isURLEncodedAction, isPossibleServerAction } = (0, _serveractionrequestmeta.getServerActionRequestMetadata)(req); + const handleUnrecognizedFetchAction = (err)=>{ + // If the deployment doesn't have skew protection, this is expected to occasionally happen, + // so we use a warning instead of an error. + console.warn(err); + // Return an empty response with a header that the client router will interpret. + // We don't need to waste time encoding a flight response, and using a blank body + header + // means that unrecognized actions can also be handled at the infra level + // (i.e. without needing to invoke a lambda) + res.setHeader(_approuterheaders.NEXT_ACTION_NOT_FOUND_HEADER, '1'); + res.setHeader('content-type', 'text/plain'); + res.statusCode = 404; + return { + type: 'done', + result: _renderresult.default.fromStatic('Server action not found.', 'text/plain') + }; + }; + // If it can't be a Server Action, skip handling. + // Note that this can be a false positive -- any multipart/urlencoded POST can get us here, + // But won't know if it's an MPA action or not until we call `decodeAction` below. + if (!isPossibleServerAction) { + return null; + } + // We don't currently support URL encoded actions, so we bail out early. + // Depending on if it's a fetch action or an MPA, we return a different response. + if (isURLEncodedAction) { + if (isFetchAction) { + return { + type: 'not-found' + }; + } else { + // This is an MPA action, so we return null + return null; + } + } + // If the app has no server actions at all, we can 404 early. + if (!hasServerActions()) { + return handleUnrecognizedFetchAction(getActionNotFoundError(actionId)); + } + if (workStore.isStaticGeneration) { + throw Object.defineProperty(new Error("Invariant: server actions can't be handled during static rendering"), "__NEXT_ERROR_CODE", { + value: "E359", + enumerable: false, + configurable: true + }); + } + let temporaryReferences; + // When running actions the default is no-store, you can still `cache: 'force-cache'` + workStore.fetchCache = 'default-no-store'; + const originHeader = req.headers['origin']; + const originHost = typeof originHeader === 'string' ? // However, these contexts can still send along credentials like cookies, + // so we need to check if they're allowed cross-origin requests. + originHeader === 'null' ? 'null' : new URL(originHeader).host : undefined; + const host = parseHostHeader(req.headers); + let warning = undefined; + function warnBadServerActionRequest() { + if (warning) { + (0, _log.warn)(warning); + } + } + // This is to prevent CSRF attacks. If `x-forwarded-host` is set, we need to + // ensure that the request is coming from the same host. + if (!originHost) { + // This is a handcrafted request without an origin or a request from an unsafe browser. + // We'll let this through but log a warning. + // We can't guard against unsafe browsers and handcrafted requests can't contain + // user credentials that haven't been shared willingly. + warning = 'Missing `origin` header from a forwarded Server Actions request.'; + } else if (!host || originHost !== host.value) { + // If the customer sets a list of allowed origins, we'll allow the request. + // These are considered safe but might be different from forwarded host set + // by the infra (i.e. reverse proxies). + if ((0, _csrfprotection.isCsrfOriginAllowed)(originHost, serverActions == null ? void 0 : serverActions.allowedOrigins)) { + // Ignore it + } else { + if (host) { + // This seems to be an CSRF attack. We should not proceed the action. + console.error(`\`${host.type}\` header with value \`${limitUntrustedHeaderValueForLogs(host.value)}\` does not match \`origin\` header with value \`${limitUntrustedHeaderValueForLogs(originHost)}\` from a forwarded Server Actions request. Aborting the action.`); + } else { + // This is an attack. We should not proceed the action. + console.error(`\`x-forwarded-host\` or \`host\` headers are not provided. One of these is needed to compare the \`origin\` header from a forwarded Server Actions request. Aborting the action.`); + } + const error = Object.defineProperty(new Error('Invalid Server Actions request.'), "__NEXT_ERROR_CODE", { + value: "E80", + enumerable: false, + configurable: true + }); + if (isFetchAction) { + res.statusCode = 500; + metadata.statusCode = 500; + const promise = Promise.reject(error); + try { + // we need to await the promise to trigger the rejection early + // so that it's already handled by the time we call + // the RSC runtime. Otherwise, it will throw an unhandled + // promise rejection error in the renderer. + await promise; + } catch { + // swallow error, it's gonna be handled on the client + } + return { + type: 'done', + result: await generateFlight(req, ctx, requestStore, { + actionResult: promise, + // We didn't execute an action, so no revalidations could have + // occurred. We can skip rendering the page. + skipPageRendering: true, + temporaryReferences + }) + }; + } + throw error; + } + } + // ensure we avoid caching server actions unexpectedly + res.setHeader('Cache-Control', 'no-cache, no-store, max-age=0, must-revalidate'); + const { actionAsyncStorage } = ComponentMod; + const actionWasForwarded = Boolean(req.headers['x-action-forwarded']); + if (actionId) { + const forwardedWorker = (0, _manifestssingleton.selectWorkerForForwarding)(actionId, page); + // If forwardedWorker is truthy, it means there isn't a worker for the action + // in the current handler, so we forward the request to a worker that has the action. + if (forwardedWorker) { + return { + type: 'done', + result: await createForwardedActionResponse(req, res, host, forwardedWorker, ctx.renderOpts.basePath) + }; + } + } + try { + return await actionAsyncStorage.run({ + isAction: true + }, async ()=>{ + // We only use these for fetch actions -- MPA actions handle them inside `decodeAction`. + let actionModId; + let boundActionArguments = []; + if (// The type check here ensures that `req` is correctly typed, and the + // environment variable check provides dead code elimination. + process.env.NEXT_RUNTIME === 'edge' && (0, _helpers.isWebNextRequest)(req)) { + if (!req.body) { + throw Object.defineProperty(new Error('invariant: Missing request body.'), "__NEXT_ERROR_CODE", { + value: "E364", + enumerable: false, + configurable: true + }); + } + // TODO: add body limit + // Use react-server-dom-webpack/server + const { createTemporaryReferenceSet, decodeReply, decodeAction, decodeFormState } = ComponentMod; + temporaryReferences = createTemporaryReferenceSet(); + if (isMultipartAction) { + // TODO-APP: Add streaming support + const formData = await req.request.formData(); + if (isFetchAction) { + // A fetch action with a multipart body. + try { + actionModId = getActionModIdOrError(actionId, serverModuleMap); + } catch (err) { + return handleUnrecognizedFetchAction(err); + } + boundActionArguments = await decodeReply(formData, serverModuleMap, { + temporaryReferences + }); + } else { + // Multipart POST, but not a fetch action. + // Potentially an MPA action, we have to try decoding it to check. + if (areAllActionIdsValid(formData, serverModuleMap) === false) { + // TODO: This can be from skew or manipulated input. We should handle this case + // more gracefully but this preserves the prior behavior where decodeAction would throw instead. + throw Object.defineProperty(new Error(`Failed to find Server Action. This request might be from an older or newer deployment.\nRead more: https://nextjs.org/docs/messages/failed-to-find-server-action`), "__NEXT_ERROR_CODE", { + value: "E975", + enumerable: false, + configurable: true + }); + } + const action = await decodeAction(formData, serverModuleMap); + if (typeof action === 'function') { + // an MPA action. + // Only warn if it's a server action, otherwise skip for other post requests + warnBadServerActionRequest(); + const { actionResult } = await executeActionAndPrepareForRender(action, [], workStore, requestStore, actionWasForwarded); + const formState = await decodeFormState(actionResult, formData, serverModuleMap); + // Skip the fetch path. + // We need to render a full HTML version of the page for the response, we'll handle that in app-render. + return { + type: 'done', + result: undefined, + formState + }; + } else { + // We couldn't decode an action, so this POST request turned out not to be a server action request. + return null; + } + } + } else { + // POST with non-multipart body. + // If it's not multipart AND not a fetch action, + // then it can't be an action request. + if (!isFetchAction) { + return null; + } + try { + actionModId = getActionModIdOrError(actionId, serverModuleMap); + } catch (err) { + return handleUnrecognizedFetchAction(err); + } + // A fetch action with a non-multipart body. + // In practice, this happens if `encodeReply` returned a string instead of FormData, + // which can happen for very simple JSON-like values that don't need multiple flight rows. + const chunks = []; + const reader = req.body.getReader(); + while(true){ + const { done, value } = await reader.read(); + if (done) { + break; + } + chunks.push(value); + } + const actionData = Buffer.concat(chunks).toString('utf-8'); + boundActionArguments = await decodeReply(actionData, serverModuleMap, { + temporaryReferences + }); + } + } else if (// The type check here ensures that `req` is correctly typed, and the + // environment variable check provides dead code elimination. + process.env.NEXT_RUNTIME !== 'edge' && (0, _helpers.isNodeNextRequest)(req)) { + // Use react-server-dom-webpack/server.node which supports streaming + const { createTemporaryReferenceSet, decodeReply, decodeReplyFromBusboy, decodeAction, decodeFormState } = require(`./react-server.node`); + temporaryReferences = createTemporaryReferenceSet(); + const { PassThrough, Readable, Transform } = require('node:stream'); + const { pipeline } = require('node:stream/promises'); + // If actionBody was stashed in request meta (from parsing the postponed + // state prefix in minimal mode), use it instead of req.body + const actionBodyFromMeta = (0, _requestmeta.getRequestMeta)(req, 'actionBody'); + const body = actionBodyFromMeta ? Readable.from(actionBodyFromMeta) : req.body; + const defaultBodySizeLimit = '1 MB'; + const bodySizeLimit = (serverActions == null ? void 0 : serverActions.bodySizeLimit) ?? defaultBodySizeLimit; + const bodySizeLimitBytes = bodySizeLimit !== defaultBodySizeLimit ? require('next/dist/compiled/bytes').parse(bodySizeLimit) : 1024 * 1024 // 1 MB + ; + let size = 0; + const sizeLimitTransform = new Transform({ + transform (chunk, encoding, callback) { + size += Buffer.byteLength(chunk, encoding); + if (size > bodySizeLimitBytes) { + const { ApiError } = require('../api-utils'); + callback(Object.defineProperty(new ApiError(413, `Body exceeded ${bodySizeLimit} limit.\n` + `To configure the body size limit for Server Actions, see: https://nextjs.org/docs/app/api-reference/next-config-js/serverActions#bodysizelimit`), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + })); + return; + } + callback(null, chunk); + } + }); + if (isMultipartAction) { + if (isFetchAction) { + // A fetch action with a multipart body. + try { + actionModId = getActionModIdOrError(actionId, serverModuleMap); + } catch (err) { + return handleUnrecognizedFetchAction(err); + } + const busboy = require('next/dist/compiled/busboy')({ + defParamCharset: 'utf8', + headers: req.headers, + limits: { + fieldSize: bodySizeLimitBytes + } + }); + const abortController = new AbortController(); + try { + ; + [, boundActionArguments] = await Promise.all([ + pipeline(body, sizeLimitTransform, busboy, { + signal: abortController.signal + }), + decodeReplyFromBusboy(busboy, serverModuleMap, { + temporaryReferences + }) + ]); + } catch (err) { + abortController.abort(); + throw err; + } + } else { + // Multipart POST, but not a fetch action. + // Potentially an MPA action, we have to try decoding it to check. + const sizeLimitedBody = new PassThrough(); + // React doesn't yet publish a busboy version of decodeAction + // so we polyfill the parsing of FormData. + const fakeRequest = new Request('http://localhost', { + method: 'POST', + // @ts-expect-error + headers: { + 'Content-Type': contentType + }, + body: Readable.toWeb(sizeLimitedBody), + duplex: 'half' + }); + let formData; + const abortController = new AbortController(); + try { + ; + [, formData] = await Promise.all([ + pipeline(body, sizeLimitTransform, sizeLimitedBody, { + signal: abortController.signal + }), + fakeRequest.formData() + ]); + } catch (err) { + abortController.abort(); + throw err; + } + if (areAllActionIdsValid(formData, serverModuleMap) === false) { + // TODO: This can be from skew or manipulated input. We should handle this case + // more gracefully but this preserves the prior behavior where decodeAction would throw instead. + throw Object.defineProperty(new Error(`Failed to find Server Action. This request might be from an older or newer deployment.\nRead more: https://nextjs.org/docs/messages/failed-to-find-server-action`), "__NEXT_ERROR_CODE", { + value: "E975", + enumerable: false, + configurable: true + }); + } + // TODO: Refactor so it is harder to accidentally decode an action before you have validated that the + // action referred to is available. + const action = await decodeAction(formData, serverModuleMap); + if (typeof action === 'function') { + // an MPA action. + // Only warn if it's a server action, otherwise skip for other post requests + warnBadServerActionRequest(); + const { actionResult } = await executeActionAndPrepareForRender(action, [], workStore, requestStore, actionWasForwarded); + const formState = await decodeFormState(actionResult, formData, serverModuleMap); + // Skip the fetch path. + // We need to render a full HTML version of the page for the response, we'll handle that in app-render. + return { + type: 'done', + result: undefined, + formState + }; + } else { + // We couldn't decode an action, so this POST request turned out not to be a server action request. + return null; + } + } + } else { + // POST with non-multipart body. + // If it's not multipart AND not a fetch action, + // then it can't be an action request. + if (!isFetchAction) { + return null; + } + try { + actionModId = getActionModIdOrError(actionId, serverModuleMap); + } catch (err) { + return handleUnrecognizedFetchAction(err); + } + // A fetch action with a non-multipart body. + // In practice, this happens if `encodeReply` returned a string instead of FormData, + // which can happen for very simple JSON-like values that don't need multiple flight rows. + const sizeLimitedBody = new PassThrough(); + const chunks = []; + await Promise.all([ + pipeline(body, sizeLimitTransform, sizeLimitedBody), + (async ()=>{ + for await (const chunk of sizeLimitedBody){ + chunks.push(Buffer.from(chunk)); + } + })() + ]); + const actionData = Buffer.concat(chunks).toString('utf-8'); + boundActionArguments = await decodeReply(actionData, serverModuleMap, { + temporaryReferences + }); + } + } else { + throw Object.defineProperty(new Error('Invariant: Unknown request type.'), "__NEXT_ERROR_CODE", { + value: "E114", + enumerable: false, + configurable: true + }); + } + // actions.js + // app/page.js + // action worker1 + // appRender1 + // app/foo/page.js + // action worker2 + // appRender + // / -> fire action -> POST / -> appRender1 -> modId for the action file + // /foo -> fire action -> POST /foo -> appRender2 -> modId for the action file + const actionMod = await ComponentMod.__next_app__.require(actionModId); + const actionHandler = actionMod[// `actionId` must exist if we got here, as otherwise we would have thrown an error above + actionId]; + // Log server action call in development when enabled + let logInfo = null; + const { type: actionType } = (0, _serverreferenceinfo.extractInfoFromServerReferenceId)(actionId); + if (process.env.NODE_ENV === 'development' && ctx.renderOpts.logServerFunctions && // TODO: For now, skip logging for 'use cache' Server Functions as the + // output needs more work, or a different approach entirely. + actionType !== 'use-cache') { + var _serverActionsManifest_runtime; + const serverActionsManifest = (0, _manifestssingleton.getServerActionsManifest)(); + const runtime = process.env.NEXT_RUNTIME === 'edge' ? 'edge' : 'node'; + const actionInfo = (_serverActionsManifest_runtime = serverActionsManifest[runtime]) == null ? void 0 : _serverActionsManifest_runtime[actionId]; + if (actionInfo) { + var _actionInfo_exportedName; + const isInlineAction = (_actionInfo_exportedName = actionInfo.exportedName) == null ? void 0 : _actionInfo_exportedName.startsWith(INLINE_ACTION_PREFIX); + const projectDir = ctx.renderOpts.dir || (process.env.NEXT_RUNTIME === 'edge' ? '' : process.cwd()); + const location = (0, _segmentexplorerpath.normalizeFilePath)(projectDir, actionInfo.filename); + // Format function name for display + let functionName; + if (isInlineAction) { + functionName = ''; + } else if (actionInfo.exportedName === 'default') { + functionName = 'default'; + } else { + functionName = actionInfo.exportedName || ''; + } + logInfo = { + functionName, + args: boundActionArguments, + location + }; + } + } + const startTime = performance.now(); + const { actionResult, skipPageRendering } = await executeActionAndPrepareForRender(actionHandler, boundActionArguments, workStore, requestStore, actionWasForwarded).finally(()=>{ + addRevalidationHeader(res, { + workStore, + requestStore + }); + if (logInfo) { + // Store server action log info to be logged after the request log + const duration = Math.round(performance.now() - startTime); + (0, _requestmeta.addRequestMeta)(req, 'devServerActionLog', { + functionName: logInfo.functionName, + args: logInfo.args, + location: logInfo.location, + duration + }); + } + }); + // For form actions, we need to continue rendering the page. + if (isFetchAction) { + // If we skip page rendering, we need to ensure pending revalidates + // are awaited before closing the response. Otherwise, this will be + // done after rendering the page. + const maybeRevalidatesPromise = skipPageRendering ? (0, _revalidationutils.executeRevalidates)(workStore) : false; + return { + type: 'done', + result: await generateFlight(req, ctx, requestStore, { + actionResult: Promise.resolve(actionResult), + skipPageRendering, + temporaryReferences, + waitUntil: maybeRevalidatesPromise === false ? undefined : maybeRevalidatesPromise + }) + }; + } else { + // TODO: this shouldn't be reachable, because all non-fetch codepaths return early. + // this will be handled in a follow-up refactor PR. + return null; + } + }); + } catch (err) { + if ((0, _redirecterror.isRedirectError)(err)) { + const redirectUrl = (0, _redirect.getURLFromRedirectError)(err); + const redirectType = (0, _redirect.getRedirectTypeFromError)(err); + // if it's a fetch action, we'll set the status code for logging/debugging purposes + // but we won't set a Location header, as the redirect will be handled by the client router + res.statusCode = _redirectstatuscode.RedirectStatusCode.SeeOther; + metadata.statusCode = _redirectstatuscode.RedirectStatusCode.SeeOther; + if (isFetchAction) { + return { + type: 'done', + result: await createRedirectRenderResult(req, res, host, redirectUrl, redirectType, ctx.renderOpts.basePath, workStore, requestStore.url.pathname) + }; + } + // For an MPA action, the redirect doesn't need a body, just a Location header. + res.setHeader('Location', redirectUrl); + return { + type: 'done', + result: _renderresult.default.EMPTY + }; + } else if ((0, _httpaccessfallback.isHTTPAccessFallbackError)(err)) { + res.statusCode = (0, _httpaccessfallback.getAccessFallbackHTTPStatus)(err); + metadata.statusCode = res.statusCode; + if (isFetchAction) { + const promise = Promise.reject(err); + try { + // we need to await the promise to trigger the rejection early + // so that it's already handled by the time we call + // the RSC runtime. Otherwise, it will throw an unhandled + // promise rejection error in the renderer. + await promise; + } catch { + // swallow error, it's gonna be handled on the client + } + return { + type: 'done', + result: await generateFlight(req, ctx, requestStore, { + skipPageRendering: false, + actionResult: promise, + temporaryReferences + }) + }; + } + // For an MPA action, we need to render a HTML response. We'll handle that in app-render. + return { + type: 'not-found' + }; + } + // An error that didn't come from `redirect()` or `notFound()`, likely thrown from user code + // (but it could also be a bug in our code!) + if (isFetchAction) { + // TODO: consider checking if the error is an `ApiError` and change status code + // so that we can respond with a 413 to requests that break the body size limit + // (but if we do that, we also need to make sure that whatever handles the non-fetch error path below does the same) + res.statusCode = 500; + metadata.statusCode = 500; + const promise = Promise.reject(err); + try { + // we need to await the promise to trigger the rejection early + // so that it's already handled by the time we call + // the RSC runtime. Otherwise, it will throw an unhandled + // promise rejection error in the renderer. + await promise; + } catch { + // swallow error, it's gonna be handled on the client + } + return { + type: 'done', + result: await generateFlight(req, ctx, requestStore, { + actionResult: promise, + // If the page was not revalidated, or if the action was forwarded + // from another worker, we can skip rendering the page. + skipPageRendering: workStore.pathWasRevalidated === undefined || workStore.pathWasRevalidated === _actionrevalidationkind.ActionDidNotRevalidate || actionWasForwarded, + temporaryReferences + }) + }; + } + // For an MPA action, we need to render a HTML response. We'll rethrow the error and let it be handled above. + throw err; + } +} +/** + * Limit on the number of arguments passed to a server action. This prevents + * stack overflow during `action.apply()` from malicious requests. + */ const SERVER_ACTION_ARGS_LIMIT = 1000; +async function executeActionAndPrepareForRender(action, args, workStore, requestStore, actionWasForwarded) { + requestStore.phase = 'action'; + let skipPageRendering = actionWasForwarded; + if (args.length > SERVER_ACTION_ARGS_LIMIT) { + throw Object.defineProperty(new Error(`Server Action arguments list is too long (${args.length}). Maximum allowed is ${SERVER_ACTION_ARGS_LIMIT}.`), "__NEXT_ERROR_CODE", { + value: "E986", + enumerable: false, + configurable: true + }); + } + try { + const actionResult = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, ()=>action.apply(null, args)); + // If the page was not revalidated, or if the action was forwarded from + // another worker, we can skip rendering the page. + skipPageRendering ||= workStore.pathWasRevalidated === undefined || workStore.pathWasRevalidated === _actionrevalidationkind.ActionDidNotRevalidate; + return { + actionResult, + skipPageRendering + }; + } finally{ + if (!skipPageRendering) { + requestStore.phase = 'render'; + // When we switch to the render phase, cookies() will return + // `workUnitStore.cookies` instead of + // `workUnitStore.userspaceMutableCookies`. We want the render to see any + // cookie writes that we performed during the action, so we need to update + // the immutable cookies to reflect the changes. + (0, _requeststore.synchronizeMutableCookies)(requestStore); + // The server action might have toggled draft mode, so we need to reflect + // that in the work store to be up-to-date for subsequent rendering. + workStore.isDraftMode = requestStore.draftMode.isEnabled; + // If the action called revalidateTag/revalidatePath, then that might + // affect data used by the subsequent render, so we need to make sure all + // revalidations are applied before that. + await (0, _revalidationutils.executeRevalidates)(workStore); + } + } +} +/** + * Attempts to find the module ID for the action from the module map. When this fails, it could be a deployment skew where + * the action came from a different deployment. It could also simply be an invalid POST request that is not a server action. + * In either case, we'll throw an error to be handled by the caller. + */ function getActionModIdOrError(actionId, serverModuleMap) { + var _serverModuleMap_actionId; + // if we're missing the action ID header, we can't do any further processing + if (!actionId) { + throw Object.defineProperty(new _invarianterror.InvariantError("Missing 'next-action' header."), "__NEXT_ERROR_CODE", { + value: "E664", + enumerable: false, + configurable: true + }); + } + const actionModId = (_serverModuleMap_actionId = serverModuleMap[actionId]) == null ? void 0 : _serverModuleMap_actionId.id; + if (!actionModId) { + throw getActionNotFoundError(actionId); + } + return actionModId; +} +function getActionNotFoundError(actionId) { + return Object.defineProperty(new Error(`Failed to find Server Action${actionId ? ` "${actionId}"` : ''}. This request might be from an older or newer deployment.\nRead more: https://nextjs.org/docs/messages/failed-to-find-server-action`), "__NEXT_ERROR_CODE", { + value: "E974", + enumerable: false, + configurable: true + }); +} +const $ACTION_ = '$ACTION_'; +const $ACTION_REF_ = '$ACTION_REF_'; +const $ACTION_ID_ = '$ACTION_ID_'; +const ACTION_ID_EXPECTED_LENGTH = 42; +/** + * This function mirrors logic inside React's decodeAction and should be kept in sync with that. + * It pre-parses the FormData to ensure that any action IDs referred to are actual action IDs for + * this Next.js application. + */ function areAllActionIdsValid(mpaFormData, serverModuleMap) { + let hasAtLeastOneAction = false; + // Before we attempt to decode the payload for a possible MPA action, assert that all + // action IDs are valid IDs. If not we should disregard the payload + for (let key of mpaFormData.keys()){ + if (!key.startsWith($ACTION_)) { + continue; + } + if (key.startsWith($ACTION_ID_)) { + // No Bound args case + if (isInvalidActionIdFieldName(key, serverModuleMap)) { + return false; + } + hasAtLeastOneAction = true; + } else if (key.startsWith($ACTION_REF_)) { + // Bound args case + const actionDescriptorField = $ACTION_ + key.slice($ACTION_REF_.length) + ':0'; + const actionFields = mpaFormData.getAll(actionDescriptorField); + if (actionFields.length !== 1) { + return false; + } + const actionField = actionFields[0]; + if (typeof actionField !== 'string') { + return false; + } + if (isInvalidStringActionDescriptor(actionField, serverModuleMap)) { + return false; + } + hasAtLeastOneAction = true; + } + } + return hasAtLeastOneAction; +} +const ACTION_DESCRIPTOR_ID_PREFIX = '{"id":"'; +function isInvalidStringActionDescriptor(actionDescriptor, serverModuleMap) { + if (actionDescriptor.startsWith(ACTION_DESCRIPTOR_ID_PREFIX) === false) { + return true; + } + const from = ACTION_DESCRIPTOR_ID_PREFIX.length; + const to = from + ACTION_ID_EXPECTED_LENGTH; + // We expect actionDescriptor to be '{"id":"",...}' + const actionId = actionDescriptor.slice(from, to); + if (actionId.length !== ACTION_ID_EXPECTED_LENGTH || actionDescriptor[to] !== '"') { + return true; + } + const entry = serverModuleMap[actionId]; + if (entry == null) { + return true; + } + return false; +} +function isInvalidActionIdFieldName(actionIdFieldName, serverModuleMap) { + // The field name must always start with $ACTION_ID_ but since it is + // the id is extracted from the key of the field we have already validated + // this before entering this function + if (actionIdFieldName.length !== $ACTION_ID_.length + ACTION_ID_EXPECTED_LENGTH) { + // this field name has too few or too many characters + return true; + } + const actionId = actionIdFieldName.slice($ACTION_ID_.length); + const entry = serverModuleMap[actionId]; + if (entry == null) { + return true; + } + return false; +} + +//# sourceMappingURL=action-handler.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/after-task-async-storage-instance.js b/build/node_modules/next/dist/server/app-render/after-task-async-storage-instance.js new file mode 100644 index 0000000..bc1c11a --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/after-task-async-storage-instance.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "afterTaskAsyncStorageInstance", { + enumerable: true, + get: function() { + return afterTaskAsyncStorageInstance; + } +}); +const _asynclocalstorage = require("./async-local-storage"); +const afterTaskAsyncStorageInstance = (0, _asynclocalstorage.createAsyncLocalStorage)(); + +//# sourceMappingURL=after-task-async-storage-instance.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/after-task-async-storage.external.js b/build/node_modules/next/dist/server/app-render/after-task-async-storage.external.js new file mode 100644 index 0000000..f3ba64e --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/after-task-async-storage.external.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "afterTaskAsyncStorage", { + enumerable: true, + get: function() { + return _aftertaskasyncstorageinstance.afterTaskAsyncStorageInstance; + } +}); +const _aftertaskasyncstorageinstance = require("./after-task-async-storage-instance"); + +//# sourceMappingURL=after-task-async-storage.external.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/app-render-prerender-utils.js b/build/node_modules/next/dist/server/app-render/app-render-prerender-utils.js new file mode 100644 index 0000000..20dba38 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/app-render-prerender-utils.js @@ -0,0 +1,167 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + ReactServerPrerenderResult: null, + ReactServerResult: null, + createReactServerPrerenderResult: null, + createReactServerPrerenderResultFromRender: null, + processPrelude: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + ReactServerPrerenderResult: function() { + return ReactServerPrerenderResult; + }, + ReactServerResult: function() { + return ReactServerResult; + }, + createReactServerPrerenderResult: function() { + return createReactServerPrerenderResult; + }, + createReactServerPrerenderResultFromRender: function() { + return createReactServerPrerenderResultFromRender; + }, + processPrelude: function() { + return processPrelude; + } +}); +const _invarianterror = require("../../shared/lib/invariant-error"); +class ReactServerResult { + constructor(stream){ + this._stream = stream; + } + tee() { + if (this._stream === null) { + throw Object.defineProperty(new Error('Cannot tee a ReactServerResult that has already been consumed'), "__NEXT_ERROR_CODE", { + value: "E106", + enumerable: false, + configurable: true + }); + } + const tee = this._stream.tee(); + this._stream = tee[0]; + return tee[1]; + } + consume() { + if (this._stream === null) { + throw Object.defineProperty(new Error('Cannot consume a ReactServerResult that has already been consumed'), "__NEXT_ERROR_CODE", { + value: "E470", + enumerable: false, + configurable: true + }); + } + const stream = this._stream; + this._stream = null; + return stream; + } +} +async function createReactServerPrerenderResult(underlying) { + const chunks = []; + const { prelude } = await underlying; + const reader = prelude.getReader(); + while(true){ + const { done, value } = await reader.read(); + if (done) { + return new ReactServerPrerenderResult(chunks); + } else { + chunks.push(value); + } + } +} +async function createReactServerPrerenderResultFromRender(underlying) { + const chunks = []; + const reader = underlying.getReader(); + while(true){ + const { done, value } = await reader.read(); + if (done) { + break; + } else { + chunks.push(value); + } + } + return new ReactServerPrerenderResult(chunks); +} +class ReactServerPrerenderResult { + assertChunks(expression) { + if (this._chunks === null) { + throw Object.defineProperty(new _invarianterror.InvariantError(`Cannot \`${expression}\` on a ReactServerPrerenderResult that has already been consumed.`), "__NEXT_ERROR_CODE", { + value: "E593", + enumerable: false, + configurable: true + }); + } + return this._chunks; + } + consumeChunks(expression) { + const chunks = this.assertChunks(expression); + this.consume(); + return chunks; + } + consume() { + this._chunks = null; + } + constructor(chunks){ + this._chunks = chunks; + } + asUnclosingStream() { + const chunks = this.assertChunks('asUnclosingStream()'); + return createUnclosingStream(chunks); + } + consumeAsUnclosingStream() { + const chunks = this.consumeChunks('consumeAsUnclosingStream()'); + return createUnclosingStream(chunks); + } + asStream() { + const chunks = this.assertChunks('asStream()'); + return createClosingStream(chunks); + } + consumeAsStream() { + const chunks = this.consumeChunks('consumeAsStream()'); + return createClosingStream(chunks); + } +} +function createUnclosingStream(chunks) { + let i = 0; + return new ReadableStream({ + async pull (controller) { + if (i < chunks.length) { + controller.enqueue(chunks[i++]); + } + // we intentionally keep the stream open. The consumer will clear + // out chunks once finished and the remaining memory will be GC'd + // when this object goes out of scope + } + }); +} +function createClosingStream(chunks) { + let i = 0; + return new ReadableStream({ + async pull (controller) { + if (i < chunks.length) { + controller.enqueue(chunks[i++]); + } else { + controller.close(); + } + } + }); +} +async function processPrelude(unprocessedPrelude) { + const [prelude, peek] = unprocessedPrelude.tee(); + const reader = peek.getReader(); + const firstResult = await reader.read(); + reader.cancel(); + const preludeIsEmpty = firstResult.done === true; + return { + prelude, + preludeIsEmpty + }; +} + +//# sourceMappingURL=app-render-prerender-utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/app-render-render-utils.js b/build/node_modules/next/dist/server/app-render/app-render-render-utils.js new file mode 100644 index 0000000..4586bbd --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/app-render-render-utils.js @@ -0,0 +1,76 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "runInSequentialTasks", { + enumerable: true, + get: function() { + return runInSequentialTasks; + } +}); +const _invarianterror = require("../../shared/lib/invariant-error"); +const _apprenderscheduling = require("./app-render-scheduling"); +const _fastsetimmediateexternal = require("../node-environment-extensions/fast-set-immediate.external"); +const _isthenable = require("../../shared/lib/is-thenable"); +function noop() {} +function runInSequentialTasks(first, ...rest) { + if (process.env.NEXT_RUNTIME === 'edge') { + throw Object.defineProperty(new _invarianterror.InvariantError('`runInSequentialTasks` should not be called in edge runtime.'), "__NEXT_ERROR_CODE", { + value: "E1054", + enumerable: false, + configurable: true + }); + } else { + return new Promise((resolve, reject)=>{ + const scheduleTimeout = (0, _apprenderscheduling.createAtomicTimerGroup)(); + const ids = []; + let result; + ids.push(scheduleTimeout(()=>{ + try { + (0, _fastsetimmediateexternal.DANGEROUSLY_runPendingImmediatesAfterCurrentTask)(); + result = first(); + // If the first function returns a thenable, suppress unhandled + // rejections. A later task in the sequence (e.g. an abort) may + // cause the promise to reject, and we don't want that to surface + // as an unhandled rejection — the caller will observe the + // rejection when they await the returned promise. + if ((0, _isthenable.isThenable)(result)) { + result.then(noop, noop); + } + } catch (err) { + for(let i = 1; i < ids.length; i++){ + clearTimeout(ids[i]); + } + reject(err); + } + })); + for(let i = 0; i < rest.length; i++){ + const fn = rest[i]; + let index = ids.length; + ids.push(scheduleTimeout(()=>{ + try { + (0, _fastsetimmediateexternal.DANGEROUSLY_runPendingImmediatesAfterCurrentTask)(); + fn(); + } catch (err) { + // clear remaining timeouts + while(++index < ids.length){ + clearTimeout(ids[index]); + } + reject(err); + } + })); + } + // We wait a task before resolving + ids.push(scheduleTimeout(()=>{ + try { + (0, _fastsetimmediateexternal.expectNoPendingImmediates)(); + resolve(result); + } catch (err) { + reject(err); + } + })); + }); + } +} + +//# sourceMappingURL=app-render-render-utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/app-render-scheduling.js b/build/node_modules/next/dist/server/app-render/app-render-scheduling.js new file mode 100644 index 0000000..debb86d --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/app-render-scheduling.js @@ -0,0 +1,188 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "createAtomicTimerGroup", { + enumerable: true, + get: function() { + return createAtomicTimerGroup; + } +}); +const _invarianterror = require("../../shared/lib/invariant-error"); +const _fastsetimmediateexternal = require("../node-environment-extensions/fast-set-immediate.external"); +/* +========================== +| Background | +========================== + +Node.js does not guarantee that two timers scheduled back to back will run +on the same iteration of the event loop: + +```ts +setTimeout(one, 0) +setTimeout(two, 0) +``` + +Internally, each timer is assigned a `_idleStart` property that holds +an internal libuv timestamp in millisecond resolution. +This will be used to determine if the timer is already "expired" and should be executed. +However, even in sync code, it's possible for two timers to get different `_idleStart` values. +This can cause one of the timers to be executed, and the other to be delayed until the next timer phase. + +The delaying happens [here](https://github.com/nodejs/node/blob/c208ffc66bb9418ff026c4e3fa82e5b4387bd147/lib/internal/timers.js#L556-L564). +and can be debugged by running node with `NODE_DEBUG=timer`. + +The easiest way to observe it is to run this program in a loop until it exits with status 1: + +``` +// test.js + +let immediateRan = false +const t1 = setTimeout(() => { + console.log('timeout 1') + setImmediate(() => { + console.log('immediate 1') + immediateRan = true + }) +}) + +const t2 = setTimeout(() => { + console.log('timeout 2') + if (immediateRan) { + console.log('immediate ran before the second timeout!') + console.log( + `t1._idleStart: ${t1._idleStart}, t2_idleStart: ${t2._idleStart}` + ); + process.exit(1) + } +}) +``` + +```bash +#!/usr/bin/env bash + +i=1; +while true; do + output="$(NODE_DEBUG=timer node test.js 2>&1)"; + if [ "$?" -eq 1 ]; then + echo "failed after $i iterations"; + echo "$output"; + break; + fi; + i=$((i+1)); +done +``` + +If `t2` is deferred to the next iteration of the event loop, +then the immediate scheduled from inside `t1` will run first. +When this occurs, `_idleStart` is reliably different between `t1` and `t2`. + +========================== +| Solution | +========================== + +We can guarantee that multiple timers (with the same delay, usually `0`) +run together without any delays by making sure that their `_idleStart`s are the same, +because that's what's used to determine if a timer should be deferred or not. +Luckily, this property is currently exposed to userland and mutable, +so we can patch it. + +Another related trick we could potentially apply is making +a timer immediately be considered expired by doing `timer._idleStart -= 2`. +(the value must be more than `1`, the delay that actually gets set for `setTimeout(cb, 0)`). +This makes node view this timer as "a 1ms timer scheduled 2ms ago", +meaning that it should definitely run in the next timer phase. +However, I'm not confident we know all the side effects of doing this, +so for now, simply ensuring coordination is enough. +*/ let shouldAttemptPatching = true; +function warnAboutTimers() { + console.warn("Next.js cannot guarantee that Cache Components will run as expected due to the current runtime's implementation of `setTimeout()`.\nPlease report a github issue here: https://github.com/vercel/next.js/issues/new/"); +} +function createAtomicTimerGroup(delayMs = 0) { + if (process.env.NEXT_RUNTIME === 'edge') { + throw Object.defineProperty(new _invarianterror.InvariantError('createAtomicTimerGroup cannot be called in the edge runtime'), "__NEXT_ERROR_CODE", { + value: "E934", + enumerable: false, + configurable: true + }); + } else { + let isFirstCallback = true; + let firstTimerIdleStart = null; + let didFirstTimerRun = false; + // As a sanity check, we schedule an immediate from the first timeout + // to check if the execution was interrupted (i.e. if it ran between the timeouts). + // Note that we're deliberately bypassing the "fast setImmediate" patch here -- + // otherwise, this check would always fail, because the immediate + // would always run before the second timeout. + let didImmediateRun = false; + function runFirstCallback(callback) { + didFirstTimerRun = true; + if (shouldAttemptPatching) { + (0, _fastsetimmediateexternal.unpatchedSetImmediate)(()=>{ + didImmediateRun = true; + }); + } + return callback(); + } + function runSubsequentCallback(callback) { + if (shouldAttemptPatching) { + if (didImmediateRun) { + // If the immediate managed to run between the timers, then we're not + // able to provide the guarantees that we're supposed to + shouldAttemptPatching = false; + warnAboutTimers(); + } + } + return callback(); + } + return function scheduleTimeout(callback) { + if (didFirstTimerRun) { + throw Object.defineProperty(new _invarianterror.InvariantError('Cannot schedule more timers into a group that already executed'), "__NEXT_ERROR_CODE", { + value: "E935", + enumerable: false, + configurable: true + }); + } + const timer = setTimeout(isFirstCallback ? runFirstCallback : runSubsequentCallback, delayMs, callback); + isFirstCallback = false; + if (!shouldAttemptPatching) { + // We already tried patching some timers, and it didn't work. + // No point trying again. + return timer; + } + // NodeJS timers have a `_idleStart` property, but it doesn't exist e.g. in Bun. + // If it's not present, we'll warn and try to continue. + try { + if ('_idleStart' in timer && typeof timer._idleStart === 'number') { + // If this is the first timer that was scheduled, save its `_idleStart`. + // We'll copy it onto subsequent timers to guarantee that they'll all be + // considered expired in the same iteration of the event loop + // and thus will all be executed in the same timer phase. + if (firstTimerIdleStart === null) { + firstTimerIdleStart = timer._idleStart; + } else { + timer._idleStart = firstTimerIdleStart; + } + } else { + shouldAttemptPatching = false; + warnAboutTimers(); + } + } catch (err) { + // This should never fail in current Node, but it might start failing in the future. + // We might be okay even without tweaking the timers, so warn and try to continue. + console.error(Object.defineProperty(new _invarianterror.InvariantError('An unexpected error occurred while adjusting `_idleStart` on an atomic timer', { + cause: err + }), "__NEXT_ERROR_CODE", { + value: "E933", + enumerable: false, + configurable: true + })); + shouldAttemptPatching = false; + warnAboutTimers(); + } + return timer; + }; + } +} + +//# sourceMappingURL=app-render-scheduling.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/app-render.js b/build/node_modules/next/dist/server/app-render/app-render.js new file mode 100644 index 0000000..5588d51 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/app-render.js @@ -0,0 +1,4522 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "renderToHTMLOrFlight", { + enumerable: true, + get: function() { + return renderToHTMLOrFlight; + } +}); +const _jsxruntime = require("react/jsx-runtime"); +const _workasyncstorageexternal = require("../app-render/work-async-storage.external"); +const _react = /*#__PURE__*/ _interop_require_wildcard(require("react")); +const _renderresult = /*#__PURE__*/ _interop_require_default(require("../render-result")); +const _streamops = require("./stream-ops"); +const _internalutils = require("../internal-utils"); +const _approuterheaders = require("../../client/components/app-router-headers"); +const _metadatacontext = require("../../lib/metadata/metadata-context"); +const _requeststore = require("../async-storage/request-store"); +const _isrscrequest = require("../lib/is-rsc-request"); +const _workstore = require("../async-storage/work-store"); +const _httpaccessfallback = require("../../client/components/http-access-fallback/http-access-fallback"); +const _redirect = require("../../client/components/redirect"); +const _redirecterror = require("../../client/components/redirect-error"); +const _implicittags = require("../lib/implicit-tags"); +const _constants = require("../lib/trace/constants"); +const _tracer = require("../lib/trace/tracer"); +const _flightrenderresult = require("./flight-render-result"); +const _createerrorhandler = require("./create-error-handler"); +const _getshortdynamicparamtype = require("./get-short-dynamic-param-type"); +const _getsegmentparam = require("../../shared/lib/router/utils/get-segment-param"); +const _getscriptnoncefromheader = require("./get-script-nonce-from-header"); +const _parseandvalidateflightrouterstate = require("./parse-and-validate-flight-router-state"); +const _createflightrouterstatefromloadertree = require("./create-flight-router-state-from-loader-tree"); +const _actionhandler = require("./action-handler"); +const _bailouttocsr = require("../../shared/lib/lazy-dynamic/bailout-to-csr"); +const _log = require("../../build/output/log"); +const _requestcookies = require("../web/spec-extension/adapters/request-cookies"); +const _serverinsertedhtml = require("./server-inserted-html"); +const _requiredscripts = require("./required-scripts"); +const _addpathprefix = require("../../shared/lib/router/utils/add-path-prefix"); +const _makegetserverinsertedhtml = require("./make-get-server-inserted-html"); +const _walktreewithflightrouterstate = require("./walk-tree-with-flight-router-state"); +const _createcomponenttree = require("./create-component-tree"); +const _getassetquerystring = require("./get-asset-query-string"); +const _manifestssingleton = require("./manifests-singleton"); +const _postponedstate = require("./postponed-state"); +const _hooksservercontext = require("../../client/components/hooks-server-context"); +const _useflightresponse = require("./use-flight-response"); +const _staticgenerationbailout = require("../../client/components/static-generation-bailout"); +const _formatservererror = require("../../lib/format-server-error"); +const _errortelemetryutils = require("../../lib/error-telemetry-utils"); +const _dynamicrendering = require("./dynamic-rendering"); +const _clientcomponentrendererlogger = require("../client-component-renderer-logger"); +const _helpers = require("../base-http/helpers"); +const _parserelativeurl = require("../../shared/lib/router/utils/parse-relative-url"); +const _approuter = /*#__PURE__*/ _interop_require_default(require("../../client/components/app-router")); +const _serveractionrequestmeta = require("../lib/server-action-request-meta"); +const _createinitialrouterstate = require("../../client/components/router-reducer/create-initial-router-state"); +const _approuterinstance = require("../../client/components/app-router-instance"); +const _utils = require("../instrumentation/utils"); +const _segment = require("../../shared/lib/segment"); +const _fallbackparams = require("../request/fallback-params"); +const _apprenderprerenderutils = require("./app-render-prerender-utils"); +const _prospectiverenderutils = require("./prospective-render-utils"); +const _apprenderrenderutils = require("./app-render-render-utils"); +const _scheduler = require("../../lib/scheduler"); +const _workunitasyncstorageexternal = require("./work-unit-async-storage.external"); +const _consoleasyncstorageexternal = require("./console-async-storage.external"); +const _cachesignal = require("./cache-signal"); +const _varyparams = require("./vary-params"); +const _utils1 = require("../lib/trace/utils"); +const _invarianterror = require("../../shared/lib/invariant-error"); +const _staletime = require("./stale-time"); +const _constants1 = require("../../lib/constants"); +const _createcomponentstylesandscripts = require("./create-component-styles-and-scripts"); +const _parseloadertree = require("../../shared/lib/router/utils/parse-loader-tree"); +const _resumedatacache = require("../resume-data-cache/resume-data-cache"); +const _iserror = /*#__PURE__*/ _interop_require_default(require("../../lib/is-error")); +const _createserverinsertedmetadata = require("./metadata-insertion/create-server-inserted-metadata"); +const _serverutils = require("../server-utils"); +const _revalidationutils = require("../revalidation-utils"); +const _trackmoduleloadingexternal = require("./module-loading/track-module-loading.external"); +const _reactlargeshellerror = require("./react-large-shell-error"); +const _segmentexplorerpath = require("./segment-explorer-path"); +const _requestmeta = require("../request-meta"); +const _getdynamicparam = require("../../shared/lib/router/utils/get-dynamic-param"); +const _imageconfigcontextsharedruntime = require("../../shared/lib/image-config-context.shared-runtime"); +const _imageconfig = require("../../shared/lib/image-config"); +const _stagedrendering = require("./staged-rendering"); +const _instantconfig = require("./instant-validation/instant-config"); +const _warnonce = require("../../shared/lib/utils/warn-once"); +const _debugchannelserver = require("./debug-channel-server"); +const _streamutils = require("./instant-validation/stream-utils"); +const _boundarytracking = require("./instant-validation/boundary-tracking"); +const _cookies = require("../web/spec-extension/cookies"); +const _instantvalidationerror = require("./instant-validation/instant-validation-error"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +function maybeAppendBuildIdToRSCPayload(ctx, payload) { + if (!ctx.sharedContext.deploymentId) { + // When using the build id, we need to initialize the id on initial page load, so a build id + // header wouldn't be enough. + payload.b = ctx.sharedContext.buildId; + } + return payload; +} +const flightDataPathHeadKey = 'h'; +const getFlightViewportKey = (requestId)=>requestId + 'v'; +const getFlightMetadataKey = (requestId)=>requestId + 'm'; +const filterStackFrame = process.env.NODE_ENV !== 'production' ? require('../lib/source-maps').filterStackFrameDEV : undefined; +function parseRequestHeaders(headers, options) { + // runtime prefetch requests are *not* treated as prefetch requests + // (TODO: this is confusing, we should refactor this to express this better) + const isPrefetchRequest = headers[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER] === '1'; + const isRuntimePrefetchRequest = headers[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER] === '2'; + const isHmrRefresh = headers[_approuterheaders.NEXT_HMR_REFRESH_HEADER] !== undefined; + const isRSCRequest = (0, _isrscrequest.isRSCRequestHeader)(headers[_approuterheaders.RSC_HEADER]); + const shouldProvideFlightRouterState = isRSCRequest && (!isPrefetchRequest || !options.isRoutePPREnabled); + const flightRouterState = shouldProvideFlightRouterState ? (0, _parseandvalidateflightrouterstate.parseAndValidateFlightRouterState)(headers[_approuterheaders.NEXT_ROUTER_STATE_TREE_HEADER]) : undefined; + // Checks if this is a prefetch of the Route Tree by the Segment Cache + const isRouteTreePrefetchRequest = headers[_approuterheaders.NEXT_ROUTER_SEGMENT_PREFETCH_HEADER] === '/_tree'; + const csp = headers['content-security-policy'] || headers['content-security-policy-report-only']; + const nonce = typeof csp === 'string' ? (0, _getscriptnoncefromheader.getScriptNonceFromHeader)(csp) : undefined; + const previouslyRevalidatedTags = (0, _serverutils.getPreviouslyRevalidatedTags)(headers, options.previewModeId); + let requestId; + let htmlRequestId; + if (process.env.__NEXT_DEV_SERVER) { + // The request IDs are only used for the dev server to send debug + // information to the matching client (identified by the HTML request ID + // that was sent to the client with the HTML document) for the current + // request (identified by the request ID, as defined by the client). + requestId = typeof headers[_approuterheaders.NEXT_REQUEST_ID_HEADER] === 'string' ? headers[_approuterheaders.NEXT_REQUEST_ID_HEADER] : undefined; + htmlRequestId = typeof headers[_approuterheaders.NEXT_HTML_REQUEST_ID_HEADER] === 'string' ? headers[_approuterheaders.NEXT_HTML_REQUEST_ID_HEADER] : undefined; + } + return { + flightRouterState, + isPrefetchRequest, + isRuntimePrefetchRequest, + isRouteTreePrefetchRequest, + isHmrRefresh, + isRSCRequest, + nonce, + previouslyRevalidatedTags, + requestId, + htmlRequestId + }; +} +/** + * Walks the loader tree to find the minimum `unstable_dynamicStaleTime` exported by + * any page module. Returns null if no page exports the config. + * + * This only reads static exports from page modules — it does not render any + * server components, so it's cheap to call. + * + * TODO: Move this to the prefetch hints file so we don't have to walk the + * tree on every render. + */ async function getDynamicStaleTime(tree) { + const { page, parallelRoutes } = (0, _parseloadertree.parseLoaderTree)(tree); + let result = null; + // Only pages (not layouts) can export unstable_dynamicStaleTime. + if (typeof page !== 'undefined') { + const pageMod = await page[0](); + if (pageMod && typeof pageMod.unstable_dynamicStaleTime === 'number') { + const value = pageMod.unstable_dynamicStaleTime; + result = result !== null ? Math.min(result, value) : value; + } + } + const childPromises = []; + for(const parallelRouteKey in parallelRoutes){ + childPromises.push(getDynamicStaleTime(parallelRoutes[parallelRouteKey])); + } + const childResults = await Promise.all(childPromises); + for (const childResult of childResults){ + if (childResult !== null) { + result = result !== null ? Math.min(result, childResult) : childResult; + } + } + return result; +} +function createNotFoundLoaderTree(loaderTree) { + const components = loaderTree[2]; + const hasGlobalNotFound = !!components['global-not-found']; + const notFoundTreeComponents = hasGlobalNotFound ? { + layout: components['global-not-found'], + page: [ + ()=>null, + 'next/dist/client/components/builtin/empty-stub' + ] + } : { + page: components['not-found'] + }; + return [ + '', + { + children: [ + _segment.PAGE_SEGMENT_KEY, + {}, + notFoundTreeComponents, + null + ] + }, + // Always include global-error so that getGlobalErrorStyles can access it. + // When global-not-found is present, use full components. + // Otherwise, only include global-error module. + hasGlobalNotFound ? components : { + 'global-error': components['global-error'] + }, + null + ]; +} +function hasPrerenderHTTPErrorBoundary(loaderTree, triggeredStatus, authInterrupts) { + switch(triggeredStatus){ + case 404: + return !!loaderTree[2]['not-found']; + case 403: + return authInterrupts && !!loaderTree[2].forbidden; + case 401: + return authInterrupts && !!loaderTree[2].unauthorized; + default: + return false; + } +} +function findPrerenderHTTPErrorBoundaryTree(loaderTree, triggeredStatus, authInterrupts) { + let boundaryTree = hasPrerenderHTTPErrorBoundary(loaderTree, triggeredStatus, authInterrupts) ? loaderTree : null; + const childrenTree = loaderTree[1].children; + if (childrenTree) { + const deeperBoundaryTree = findPrerenderHTTPErrorBoundaryTree(childrenTree, triggeredStatus, authInterrupts); + if (deeperBoundaryTree) { + boundaryTree = deeperBoundaryTree; + } + } + return boundaryTree; +} +/** + * Returns a function that parses the dynamic segment and return the associated value. + */ function makeGetDynamicParamFromSegment(interpolatedParams, fallbackRouteParams, optimisticRouting) { + return function getDynamicParamFromSegment(loaderTree) { + const [segment, , , staticSiblings] = loaderTree; + const segmentParam = (0, _getsegmentparam.getSegmentParam)(segment); + if (!segmentParam) { + return null; + } + const segmentKey = segmentParam.paramName; + const dynamicParamType = _getshortdynamicparamtype.dynamicParamTypes[segmentParam.paramType]; + // Static siblings are only included when optimistic routing is enabled + const siblings = optimisticRouting ? staticSiblings : null; + return (0, _getdynamicparam.getDynamicParam)(interpolatedParams, segmentKey, dynamicParamType, fallbackRouteParams, siblings); + }; +} +function NonIndex({ createElement, pagePath, statusCode, isPossibleServerAction }) { + const is404Page = pagePath === '/404'; + const isInvalidStatusCode = typeof statusCode === 'number' && statusCode > 400; + // Only render noindex for page request, skip for server actions + // TODO: is this correct if `isPossibleServerAction` is a false positive? + if (!isPossibleServerAction && (is404Page || isInvalidStatusCode)) { + return createElement('meta', { + name: 'robots', + content: 'noindex' + }); + } + return null; +} +/** + * This is used by server actions & client-side navigations to generate RSC data from a client-side request. + * This function is only called on "dynamic" requests (ie, there wasn't already a static response). + * It uses request headers (namely `next-router-state-tree`) to determine where to start rendering. + */ async function generateDynamicRSCPayload(ctx, options) { + // Flight data that is going to be passed to the browser. + // Currently a single item array but in the future multiple patches might be combined in a single request. + // We initialize `flightData` to an empty string because the client router knows how to tolerate + // it (treating it as an MPA navigation). The only time this function wouldn't generate flight data + // is for server actions, if the server action handler instructs this function to skip it. When the server + // action reducer sees a falsy value, it'll simply resolve the action with no data. + let flightData = ''; + const { componentMod: { routeModule: { userland: { loaderTree } }, createElement, createMetadataComponents, Fragment }, query, requestId, flightRouterState, workStore, url } = ctx; + const serveStreamingMetadata = !!ctx.renderOpts.serveStreamingMetadata; + if (!(options == null ? void 0 : options.skipPageRendering)) { + var _ctx_renderOpts_prefetchHints; + const preloadCallbacks = []; + // If we're performing instant validation, we need to render the whole tree, + // without skipping shared layouts. + const needsFullTree = process.env.__NEXT_DEV_SERVER && ctx.renderOpts.cacheComponents && !(options == null ? void 0 : options.actionResult) && // Only for navigations + await (0, _instantconfig.anySegmentNeedsInstantValidationInDev)(loaderTree); + const metadataIsRuntimePrefetchable = await (0, _instantconfig.anySegmentHasRuntimePrefetchEnabled)(loaderTree); + const { Viewport, Metadata, MetadataOutlet } = createMetadataComponents({ + tree: loaderTree, + parsedQuery: query, + pathname: url.pathname, + metadataContext: (0, _metadatacontext.createMetadataContext)(ctx.renderOpts), + interpolatedParams: ctx.interpolatedParams, + serveStreamingMetadata, + isRuntimePrefetchable: metadataIsRuntimePrefetchable + }); + const rscHead = createElement(Fragment, { + key: flightDataPathHeadKey + }, createElement(NonIndex, { + createElement, + pagePath: ctx.pagePath, + statusCode: ctx.res.statusCode, + isPossibleServerAction: ctx.isPossibleServerAction + }), createElement(Viewport, { + key: getFlightViewportKey(requestId) + }), createElement(Metadata, { + key: getFlightMetadataKey(requestId) + })); + flightData = (needsFullTree ? await (0, _walktreewithflightrouterstate.createFullTreeFlightDataForNavigation)({ + ctx, + loaderTree, + rscHead, + injectedCSS: new Set(), + injectedJS: new Set(), + injectedFontPreloadTags: new Set(), + preloadCallbacks, + MetadataOutlet + }) : await (0, _walktreewithflightrouterstate.walkTreeWithFlightRouterState)({ + ctx, + loaderTreeToFilter: loaderTree, + parentParams: {}, + flightRouterState, + rscHead, + injectedCSS: new Set(), + injectedJS: new Set(), + injectedFontPreloadTags: new Set(), + rootLayoutIncluded: false, + preloadCallbacks, + MetadataOutlet, + hintTree: ((_ctx_renderOpts_prefetchHints = ctx.renderOpts.prefetchHints) == null ? void 0 : _ctx_renderOpts_prefetchHints[ctx.pagePath]) ?? null + })).map((path)=>path.slice(1)) // remove the '' (root) segment + ; + } + // In dev, the Vary header may not reliably reflect whether a route can + // be intercepted, because interception routes are compiled on demand. + // Default to true so the client doesn't cache a stale Fallback entry. + const varyHeader = ctx.res.getHeader('vary'); + const couldBeIntercepted = !!process.env.__NEXT_DEV_SERVER || typeof varyHeader === 'string' && varyHeader.includes(_approuterheaders.NEXT_URL); + // If we have an action result, then this is a server action response. + // We can rely on this because `ActionResult` will always be a promise, even if + // the result is falsey. + if (options == null ? void 0 : options.actionResult) { + return maybeAppendBuildIdToRSCPayload(ctx, { + a: options.actionResult, + f: flightData, + q: getRenderedSearch(query), + i: !!couldBeIntercepted + }); + } + // Otherwise, it's a regular RSC response. + const baseResponse = maybeAppendBuildIdToRSCPayload(ctx, { + f: flightData, + q: getRenderedSearch(query), + i: !!couldBeIntercepted, + S: workStore.isStaticGeneration, + h: (0, _varyparams.getMetadataVaryParamsThenable)() + }); + if ((options == null ? void 0 : options.staleTimeIterable) !== undefined) { + baseResponse.s = options.staleTimeIterable; + } + if ((options == null ? void 0 : options.staticStageByteLengthPromise) !== undefined) { + baseResponse.l = options.staticStageByteLengthPromise; + } + if ((options == null ? void 0 : options.runtimePrefetchStream) !== undefined) { + baseResponse.p = options.runtimePrefetchStream; + } + // Include the per-page dynamic stale time from unstable_dynamicStaleTime, but only + // for dynamic renders (not prerenders/static generation). The client treats + // its presence as authoritative. + // TODO: Move this to the prefetch hints file so we don't have to walk the + // tree on every render. + if (!workStore.isStaticGeneration) { + const dynamicStaleTime = await getDynamicStaleTime(ctx.componentMod.routeModule.userland.loaderTree); + if (dynamicStaleTime !== null) { + baseResponse.d = dynamicStaleTime; + } + } + return baseResponse; +} +function createErrorContext(ctx, renderSource) { + return { + routerKind: 'App Router', + routePath: ctx.pagePath, + // TODO: is this correct if `isPossibleServerAction` is a false positive? + routeType: ctx.isPossibleServerAction ? 'action' : 'render', + renderSource, + revalidateReason: (0, _utils.getRevalidateReason)(ctx.workStore) + }; +} +/** + * Produces a RenderResult containing the Flight data for the given request. See + * `generateDynamicRSCPayload` for information on the contents of the render result. + */ async function generateDynamicFlightRenderResult(req, ctx, requestStore, options) { + const { htmlRequestId, renderOpts, requestId, workStore } = ctx; + const { onInstrumentationRequestError, setReactDebugChannel, isBuildTimePrerendering = false } = renderOpts; + function onFlightDataRenderError(err, silenceLog) { + return onInstrumentationRequestError == null ? void 0 : onInstrumentationRequestError(err, req, createErrorContext(ctx, 'react-server-components-payload'), silenceLog); + } + const onError = (0, _createerrorhandler.createReactServerErrorHandler)(process.env.NODE_ENV === 'development', isBuildTimePrerendering, workStore.reactServerErrorsByDigest, onFlightDataRenderError); + const debugChannel = setReactDebugChannel && (0, _debugchannelserver.createDebugChannel)(); + if (debugChannel) { + setReactDebugChannel(debugChannel.clientSide, htmlRequestId, requestId); + } + const { clientModules } = (0, _manifestssingleton.getClientReferenceManifest)(); + // For app dir, use the bundled version of Flight server renderer (renderToReadableStream) + // which contains the subset React. + const rscPayload = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, generateDynamicRSCPayload, ctx, options); + const flightStream = _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, _streamops.renderToFlightStream, ctx.componentMod, rscPayload, clientModules, { + onError, + temporaryReferences: options == null ? void 0 : options.temporaryReferences, + filterStackFrame, + debugChannel: debugChannel == null ? void 0 : debugChannel.serverSide + }); + return new _flightrenderresult.FlightRenderResult(flightStream, { + fetchMetrics: workStore.fetchMetrics + }, options == null ? void 0 : options.waitUntil); +} +/** + * Production-only staged dynamic flight render for cache components. Uses + * staged rendering to separate static (RDC-backed) from runtime/dynamic + * content. + */ async function generateStagedDynamicFlightRenderResult(req, ctx, requestStore) { + const { componentMod, workStore, renderOpts } = ctx; + const { renderToReadableStream, routeModule } = componentMod; + const { loaderTree } = routeModule.userland; + const { onInstrumentationRequestError, experimental } = renderOpts; + function onFlightDataRenderError(err, silenceLog) { + return onInstrumentationRequestError == null ? void 0 : onInstrumentationRequestError(err, req, createErrorContext(ctx, 'react-server-components-payload'), silenceLog); + } + const onError = (0, _createerrorhandler.createReactServerErrorHandler)(false, false, workStore.reactServerErrorsByDigest, onFlightDataRenderError); + const selectStaleTime = (0, _staletime.createSelectStaleTime)(experimental); + const staleTimeIterable = new _staletime.StaleTimeIterable(); + // TODO(cached-navs): this assumes that we checked during build that there's no sync IO. + // but it can happen e.g. after a revalidation or conditionally for a param that wasn't prerendered. + // we should change this to track sync IO, log an error and advance to dynamic. + const shouldTrackSyncIO = false; + const stageController = new _stagedrendering.StagedRenderingController(null, null, shouldTrackSyncIO); + // Initialize stale time tracking on the request store. + requestStore.stale = _constants1.INFINITE_CACHE; + requestStore.stagedRendering = stageController; + requestStore.asyncApiPromises = createAsyncApiPromises(stageController, requestStore.cookies, requestStore.mutableCookies, requestStore.headers); + (0, _staletime.trackStaleTime)(requestStore, staleTimeIterable, selectStaleTime); + // Deferred promise for the static stage byte length. Flight serializes the + // resolved value into the stream so the client knows where the static + // prefix ends. + let resolveStaticStageByteLength; + const staticStageByteLengthPromise = new Promise((resolve)=>{ + resolveStaticStageByteLength = resolve; + }); + // Check if this route has opted into runtime prefetching via + // unstable_instant. If so, we piggyback on the dynamic render to fill caches + // and then spawn a final runtime prerender whose result stream is embedded in + // the RSC payload. This is gated on the explicit opt-in because it adds extra + // server processing, increases the response payload size, and the runtime + // prefetch output should have been validated first. + const hasRuntimePrefetch = await (0, _instantconfig.anySegmentHasRuntimePrefetchEnabled)(loaderTree); + let runtimePrefetchStream; + if (hasRuntimePrefetch) { + // Create a mutable cache that gets filled during the dynamic render. + const prerenderResumeDataCache = (0, _resumedatacache.createPrerenderResumeDataCache)(); + requestStore.prerenderResumeDataCache = prerenderResumeDataCache; + const cacheSignal = new _cachesignal.CacheSignal(); + (0, _trackmoduleloadingexternal.trackPendingModules)(cacheSignal); + requestStore.cacheSignal = cacheSignal; + // Create a deferred stream for the runtime prefetch result. Its readable + // side goes into the RSC payload (Flight serializes it lazily). The + // writable side receives the runtime prerender result once the dynamic + // render has filled all caches. + const runtimePrefetchTransform = new TransformStream(); + runtimePrefetchStream = runtimePrefetchTransform.readable; + // Wait for the dynamic render to fill caches, then run the final runtime + // prerender (fire-and-forget — does not block the response). + void cacheSignal.cacheReady().then(()=>spawnRuntimePrefetchWithFilledCaches(runtimePrefetchTransform.writable, ctx, prerenderResumeDataCache, requestStore, onError)); + } + const rscPayload = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, generateDynamicRSCPayload, ctx, { + staleTimeIterable, + staticStageByteLengthPromise, + runtimePrefetchStream + }); + const { clientModules } = (0, _manifestssingleton.getClientReferenceManifest)(); + const flightReadableStream = await (0, _apprenderrenderutils.runInSequentialTasks)(()=>{ + stageController.advanceStage(_stagedrendering.RenderStage.Static); + const stream = _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, renderToReadableStream, rscPayload, clientModules, { + onError, + filterStackFrame + }); + const [dynamicStream, staticStream] = stream.tee(); + countStaticStageBytes(staticStream, stageController).then(resolveStaticStageByteLength); + return dynamicStream; + }, ()=>{ + // This is a separate task that doesn't advance a stage. It forces + // draining the microtask queue so that the stale time iterable is closed + // before we advance to the dynamic stage. + void (0, _staletime.finishStaleTimeTracking)(staleTimeIterable); + }, ()=>{ + stageController.advanceStage(_stagedrendering.RenderStage.Dynamic); + }); + return new _flightrenderresult.FlightRenderResult(flightReadableStream, { + fetchMetrics: workStore.fetchMetrics + }); +} +/** + * Runs a final runtime prerender using the provided (already filled) cache and + * pipes its output into the provided writable stream. The caller is responsible + * for waiting until caches are warm before calling this function. + */ async function spawnRuntimePrefetchWithFilledCaches(writable, ctx, prerenderResumeDataCache, requestStore, onError) { + try { + const { componentMod, getDynamicParamFromSegment } = ctx; + const { loaderTree } = componentMod.routeModule.userland; + const rootParams = (0, _createcomponenttree.getRootParams)(loaderTree, getDynamicParamFromSegment); + const staleTimeIterable = new _staletime.StaleTimeIterable(); + const { result } = await finalRuntimeServerPrerender(ctx, generateDynamicRSCPayload.bind(null, ctx, { + staleTimeIterable + }), prerenderResumeDataCache, null, rootParams, requestStore.headers, requestStore.cookies, requestStore.draftMode, onError, staleTimeIterable); + await result.prelude.pipeTo(writable); + } catch { + // Runtime prerender failed. Close the stream gracefully — the navigation + // still works, we just won't get cached runtime data. + try { + await writable.close(); + } catch { + // Writable may already be closed/errored. + } + } +} +async function stagedRenderToReadableStreamWithoutCachesInDev(ctx, requestStore, getPayload, options) { + // We're rendering while bypassing caches, + // so we have no hope of showing a useful runtime stage. + // But we still want things like `params` to show up in devtools correctly, + // which relies on mechanisms we've set up for staged rendering, + // so we do a 2-task version (Static -> Dynamic) instead. + // We aren't filling caches so we don't need to abort this render, it'll + // stream in a single pass + const stageController = new _stagedrendering.StagedRenderingController(null, null, false // do not track sync IO (we don't have reliable stages) + ); + const environmentName = ()=>{ + const currentStage = stageController.currentStage; + switch(currentStage){ + case _stagedrendering.RenderStage.Before: + case _stagedrendering.RenderStage.EarlyStatic: + case _stagedrendering.RenderStage.Static: + return 'Prerender'; + case _stagedrendering.RenderStage.EarlyRuntime: + case _stagedrendering.RenderStage.Runtime: + case _stagedrendering.RenderStage.Dynamic: + case _stagedrendering.RenderStage.Abandoned: + return 'Server'; + default: + currentStage; + throw Object.defineProperty(new _invarianterror.InvariantError(`Invalid render stage: ${currentStage}`), "__NEXT_ERROR_CODE", { + value: "E881", + enumerable: false, + configurable: true + }); + } + }; + requestStore.stagedRendering = stageController; + requestStore.asyncApiPromises = createAsyncApiPromises(stageController, requestStore.cookies, requestStore.mutableCookies, requestStore.headers); + const { clientModules } = (0, _manifestssingleton.getClientReferenceManifest)(); + const rscPayload = await getPayload(requestStore); + return await (0, _apprenderrenderutils.runInSequentialTasks)(()=>{ + stageController.advanceStage(_stagedrendering.RenderStage.Static); + return _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, _streamops.renderToFlightStream, ctx.componentMod, rscPayload, clientModules, { + ...options, + environmentName + }); + }, ()=>{ + stageController.advanceStage(_stagedrendering.RenderStage.Dynamic); + }); +} +/** + * Fork of `generateDynamicFlightRenderResult` that renders using `renderWithRestartOnCacheMissInDev` + * to ensure correct separation of environments Prerender/Server (for use in Cache Components) + */ async function generateDynamicFlightRenderResultWithStagesInDev(req, ctx, initialRequestStore, createRequestStore, fallbackParams) { + const { htmlRequestId, renderOpts, requestId, workStore, componentMod: { createElement, routeModule: { userland: { loaderTree } } }, url } = ctx; + const { onInstrumentationRequestError, setReactDebugChannel, setCacheStatus, isBuildTimePrerendering = false } = renderOpts; + function onFlightDataRenderError(err, silenceLog) { + return onInstrumentationRequestError == null ? void 0 : onInstrumentationRequestError(err, req, createErrorContext(ctx, 'react-server-components-payload'), silenceLog); + } + const onError = (0, _createerrorhandler.createReactServerErrorHandler)(process.env.NODE_ENV === 'development', isBuildTimePrerendering, workStore.reactServerErrorsByDigest, onFlightDataRenderError); + // We validate RSC requests for HMR refreshes and client navigations when + // instant configs exist, since we render all the layouts necessary to perform + // the validation in those cases. + const shouldValidate = !isBypassingCachesInDev(initialRequestStore) && (initialRequestStore.isHmrRefresh === true || await (0, _instantconfig.anySegmentNeedsInstantValidationInDev)(loaderTree)); + const getPayload = async (requestStore)=>{ + const payload = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, generateDynamicRSCPayload, ctx, undefined); + if (isBypassingCachesInDev(requestStore)) { + // Mark the RSC payload to indicate that caches were bypassed in dev. + // This lets the client know not to cache anything based on this render. + payload._bypassCachesInDev = createElement(WarnForBypassCachesInDev, { + route: workStore.route + }); + } else if (shouldValidate) { + // If this payload will be used for validation, it needs to contain the + // canonical URL. Without it we'd get an error. + payload.c = prepareInitialCanonicalUrl(url); + } + return payload; + }; + let debugChannel; + let stream; + if (// We only do this flow if we can safely recreate the store from scratch + // (which is not the case for renders after an action) + createRequestStore && // We only do this flow if we're not bypassing caches in dev using + // "disable cache" in devtools or a hard refresh (cache-control: "no-store") + !isBypassingCachesInDev(initialRequestStore)) { + // Before we kick off the render, we set the cache status back to it's initial state + // in case a previous render bypassed the cache. + if (setCacheStatus) { + setCacheStatus('ready', htmlRequestId); + } + const { stream: serverStream, accumulatedChunksPromise, syncInterruptReason, startTime, staticStageEndTime, runtimeStageEndTime, debugChannel: returnedDebugChannel, requestStore: finalRequestStore } = await renderWithRestartOnCacheMissInDev(ctx, initialRequestStore, createRequestStore, getPayload, onError); + if (shouldValidate) { + let validationDebugChannelClient = undefined; + if (returnedDebugChannel) { + const [t1, t2] = returnedDebugChannel.clientSide.readable.tee(); + returnedDebugChannel.clientSide.readable = t1; + validationDebugChannelClient = nodeStreamFromReadableStream(t2); + } + _consoleasyncstorageexternal.consoleAsyncStorage.run({ + dim: true + }, spawnStaticShellValidationInDev, accumulatedChunksPromise, syncInterruptReason, startTime, staticStageEndTime, runtimeStageEndTime, ctx, finalRequestStore, fallbackParams, validationDebugChannelClient); + } else { + logValidationSkipped(ctx); + } + debugChannel = returnedDebugChannel; + stream = serverStream; + } else { + // We're either bypassing caches or we can't restart the render. + // Do a dynamic render, but with (basic) environment labels. + // Set cache status to bypass when specifically bypassing caches in dev + if (setCacheStatus) { + setCacheStatus('bypass', htmlRequestId); + } + debugChannel = setReactDebugChannel && (0, _debugchannelserver.createDebugChannel)(); + stream = await stagedRenderToReadableStreamWithoutCachesInDev(ctx, initialRequestStore, getPayload, { + onError: onError, + filterStackFrame, + debugChannel: debugChannel == null ? void 0 : debugChannel.serverSide + }); + } + if (debugChannel && setReactDebugChannel) { + setReactDebugChannel(debugChannel.clientSide, htmlRequestId, requestId); + } + return new _flightrenderresult.FlightRenderResult(stream, { + fetchMetrics: workStore.fetchMetrics + }); +} +async function generateRuntimePrefetchResult(req, ctx, requestStore) { + const { workStore, renderOpts } = ctx; + const { isBuildTimePrerendering = false, onInstrumentationRequestError } = renderOpts; + function onFlightDataRenderError(err, silenceLog) { + return onInstrumentationRequestError == null ? void 0 : onInstrumentationRequestError(err, req, // TODO(runtime-ppr): should we use a different value? + createErrorContext(ctx, 'react-server-components-payload'), silenceLog); + } + const onError = (0, _createerrorhandler.createReactServerErrorHandler)(false, isBuildTimePrerendering, workStore.reactServerErrorsByDigest, onFlightDataRenderError); + const metadata = {}; + const staleTimeIterable = new _staletime.StaleTimeIterable(); + const { componentMod: { routeModule: { userland: { loaderTree } } }, getDynamicParamFromSegment } = ctx; + const rootParams = (0, _createcomponenttree.getRootParams)(loaderTree, getDynamicParamFromSegment); + // We need to share caches between the prospective prerender and the final prerender, + // but we're not going to persist this anywhere. + const prerenderResumeDataCache = (0, _resumedatacache.createPrerenderResumeDataCache)(); + // We're not resuming an existing render. + const renderResumeDataCache = null; + await prospectiveRuntimeServerPrerender(ctx, generateDynamicRSCPayload.bind(null, ctx), prerenderResumeDataCache, renderResumeDataCache, rootParams, requestStore.headers, requestStore.cookies, requestStore.draftMode); + const response = await finalRuntimeServerPrerender(ctx, generateDynamicRSCPayload.bind(null, ctx, { + staleTimeIterable + }), prerenderResumeDataCache, renderResumeDataCache, rootParams, requestStore.headers, requestStore.cookies, requestStore.draftMode, onError, staleTimeIterable); + applyMetadataFromPrerenderResult(response, metadata, workStore); + metadata.fetchMetrics = ctx.workStore.fetchMetrics; + return new _flightrenderresult.FlightRenderResult(response.result.prelude, metadata); +} +async function prospectiveRuntimeServerPrerender(ctx, getPayload, prerenderResumeDataCache, renderResumeDataCache, rootParams, headers, cookies, draftMode) { + const { implicitTags, renderOpts, workStore } = ctx; + const { ComponentMod } = renderOpts; + // Prerender controller represents the lifetime of the prerender. + // It will be aborted when a Task is complete or a synchronously aborting + // API is called. Notably during cache-filling renders this does not actually + // terminate the render itself which will continue until all caches are filled + const initialServerPrerenderController = new AbortController(); + // This controller represents the lifetime of the React render call. Notably + // during the cache-filling render it is different from the prerender controller + // because we don't want to end the react render until all caches are filled. + const initialServerRenderController = new AbortController(); + // The cacheSignal helps us track whether caches are still filling or we are ready + // to cut the render off. + const cacheSignal = new _cachesignal.CacheSignal(); + const initialServerPrerenderStore = { + type: 'prerender-runtime', + phase: 'render', + rootParams, + implicitTags, + renderSignal: initialServerRenderController.signal, + controller: initialServerPrerenderController, + // During the initial prerender we need to track all cache reads to ensure + // we render long enough to fill every cache it is possible to visit during + // the final prerender. + cacheSignal, + // We only need to track dynamic accesses during the final prerender. + dynamicTracking: null, + // Runtime prefetches are never cached server-side, only client-side, + // so we set `expire` and `revalidate` to their minimum values just in case. + revalidate: 1, + expire: 0, + stale: _constants1.INFINITE_CACHE, + tags: [ + ...implicitTags.tags + ], + renderResumeDataCache, + prerenderResumeDataCache, + hmrRefreshHash: undefined, + // We don't track vary params during initial prerender, only the final one + varyParamsAccumulator: null, + // No stage sequencing needed for prospective renders. + stagedRendering: null, + // These are not present in regular prerenders, but allowed in a runtime prerender. + headers, + cookies, + draftMode + }; + const { clientModules } = (0, _manifestssingleton.getClientReferenceManifest)(); + // We're not going to use the result of this render because the only time it could be used + // is if it completes in a microtask and that's likely very rare for any non-trivial app + const initialServerPayload = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(initialServerPrerenderStore, getPayload); + const prerenderOptions = { + filterStackFrame, + onError: (err)=>{ + const digest = (0, _createerrorhandler.getDigestForWellKnownError)(err); + if (digest) { + return digest; + } + if (initialServerPrerenderController.signal.aborted) { + // The render aborted before this error was handled which indicates + // the error is caused by unfinished components within the render + return; + } else if (process.env.NEXT_DEBUG_BUILD || process.env.__NEXT_VERBOSE_LOGGING) { + (0, _prospectiverenderutils.printDebugThrownValueForProspectiveRender)(err, workStore.route, _prospectiverenderutils.Phase.ProspectiveRender); + } + }, + // We don't want to stop rendering until the cacheSignal is complete so we pass + // a different signal to this render call than is used by dynamic APIs to signify + // transitioning out of the prerender environment + signal: initialServerRenderController.signal + }; + const pendingInitialServerResult = _workunitasyncstorageexternal.workUnitAsyncStorage.run(initialServerPrerenderStore, (0, _streamops.getServerPrerender)(ComponentMod), initialServerPayload, clientModules, prerenderOptions); + // Wait for all caches to be finished filling and for async imports to resolve + (0, _trackmoduleloadingexternal.trackPendingModules)(cacheSignal); + await cacheSignal.cacheReady(); + initialServerRenderController.abort(); + initialServerPrerenderController.abort(); + // We don't need to continue the prerender process if we already + // detected invalid dynamic usage in the initial prerender phase. + if (workStore.invalidDynamicUsageError) { + throw workStore.invalidDynamicUsageError; + } + try { + return await (0, _apprenderprerenderutils.createReactServerPrerenderResult)(pendingInitialServerResult); + } catch (err) { + if (initialServerRenderController.signal.aborted || initialServerPrerenderController.signal.aborted) { + // These are expected errors that might error the prerender. we ignore them. + } else if (process.env.NEXT_DEBUG_BUILD || process.env.__NEXT_VERBOSE_LOGGING) { + // We don't normally log these errors because we are going to retry anyway but + // it can be useful for debugging Next.js itself to get visibility here when needed + (0, _prospectiverenderutils.printDebugThrownValueForProspectiveRender)(err, workStore.route, _prospectiverenderutils.Phase.ProspectiveRender); + } + return null; + } +} +/** + * Prepends a single ASCII byte to the stream indicating whether the response + * is partial (contains dynamic holes): '~' (0x7e) for partial, '#' (0x23) + * for complete. + */ function prependIsPartialByte(stream, isPartial) { + const byte = new Uint8Array([ + isPartial ? 0x7e : 0x23 + ]); + return stream.pipeThrough(new TransformStream({ + start (controller) { + controller.enqueue(byte); + } + })); +} +async function finalRuntimeServerPrerender(ctx, getPayload, prerenderResumeDataCache, renderResumeDataCache, rootParams, headers, cookies, draftMode, onError, staleTimeIterable) { + const { implicitTags, renderOpts } = ctx; + const { ComponentMod, experimental, isDebugDynamicAccesses } = renderOpts; + const selectStaleTime = (0, _staletime.createSelectStaleTime)(experimental); + let serverIsDynamic = false; + const finalServerController = new AbortController(); + const serverDynamicTracking = (0, _dynamicrendering.createDynamicTrackingState)(isDebugDynamicAccesses); + const finalStageController = new _stagedrendering.StagedRenderingController(finalServerController.signal, null, true // track sync IO + ); + const varyParamsAccumulator = (0, _varyparams.createResponseVaryParamsAccumulator)(); + const finalServerPrerenderStore = { + type: 'prerender-runtime', + phase: 'render', + rootParams, + implicitTags, + renderSignal: finalServerController.signal, + controller: finalServerController, + // All caches we could read must already be filled so no tracking is necessary + cacheSignal: null, + dynamicTracking: serverDynamicTracking, + // Runtime prefetches are never cached server-side, only client-side, + // so we set `expire` and `revalidate` to their minimum values just in case. + revalidate: 1, + expire: 0, + stale: _constants1.INFINITE_CACHE, + tags: [ + ...implicitTags.tags + ], + prerenderResumeDataCache, + renderResumeDataCache, + hmrRefreshHash: undefined, + varyParamsAccumulator, + // Used to separate the stages in the 5-task pipeline. + stagedRendering: finalStageController, + // These are not present in regular prerenders, but allowed in a runtime prerender. + headers, + cookies, + draftMode + }; + (0, _staletime.trackStaleTime)(finalServerPrerenderStore, staleTimeIterable, selectStaleTime); + const { clientModules } = (0, _manifestssingleton.getClientReferenceManifest)(); + const finalRSCPayload = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(finalServerPrerenderStore, getPayload); + let prerenderIsPending = true; + const result = await (0, _apprenderrenderutils.runInSequentialTasks)(async ()=>{ + // EarlyStatic stage: render begins. + // Runtime-prefetchable segments render immediately. + // Non-prefetchable segments are gated until the Static stage. + finalStageController.advanceStage(_stagedrendering.RenderStage.EarlyStatic); + const prerenderResult = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(finalServerPrerenderStore, (0, _streamops.getServerPrerender)(ComponentMod), finalRSCPayload, clientModules, { + filterStackFrame, + onError, + signal: finalServerController.signal + }); + prerenderIsPending = false; + return prerenderResult; + }, ()=>{ + // Advance to Static stage: resolve promise holding back + // non-prefetchable segments so they can begin rendering. + finalStageController.advanceStage(_stagedrendering.RenderStage.Static); + }, ()=>{ + // Advance to EarlyRuntime stage: resolve cookies/headers for + // runtime-prefetchable segments. Sync IO is checked here. + finalStageController.advanceStage(_stagedrendering.RenderStage.EarlyRuntime); + }, ()=>{ + // Advance to Runtime stage: resolve cookies/headers for + // non-prefetchable segments. Sync IO is allowed here. + finalStageController.advanceStage(_stagedrendering.RenderStage.Runtime); + }, ()=>{ + Promise.all([ + (0, _staletime.finishStaleTimeTracking)(staleTimeIterable), + (0, _varyparams.finishAccumulatingVaryParams)(varyParamsAccumulator) + ]).then(()=>{ + // Abort. This runs as a microtask after Flight has flushed the + // staleTime and varyParams closing chunks, but before the next + // macrotask resolves the overall result. + if (finalServerController.signal.aborted) { + // If the server controller is already aborted we must have called + // something that required aborting the prerender synchronously such + // as with new Date() + serverIsDynamic = true; + return; + } + if (prerenderIsPending) { + // If prerenderIsPending then we have blocked for longer than a Task + // and we assume there is something unfinished. + serverIsDynamic = true; + } + finalServerController.abort(); + }); + }); + result.prelude = prependIsPartialByte(result.prelude, serverIsDynamic); + return { + result, + // TODO(runtime-ppr): do we need to produce a digest map here? + // digestErrorsMap: ..., + dynamicAccess: serverDynamicTracking, + isPartial: serverIsDynamic, + collectedRevalidate: finalServerPrerenderStore.revalidate, + collectedExpire: finalServerPrerenderStore.expire, + collectedStale: staleTimeIterable.currentValue, + collectedTags: finalServerPrerenderStore.tags + }; +} +/** + * Crawlers will inadvertently think the canonicalUrl in the RSC payload should be crawled + * when our intention is to just seed the router state with the current URL. + * This function splits up the pathname so that we can later join it on + * when we're ready to consume the path. + */ function prepareInitialCanonicalUrl(url) { + return (url.pathname + url.search).split('/'); +} +function getRenderedSearch(query) { + // Inlined implementation of querystring.encode, which is not available in + // the Edge runtime. + const pairs = []; + for(const key in query){ + const value = query[key]; + if (value == null) continue; + if (Array.isArray(value)) { + for (const v of value){ + pairs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(v))}`); + } + } else { + pairs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`); + } + } + // The result should match the format of a web URL's `search` property, since + // this is the format that's stored in the App Router state. + // TODO: We're a bit inconsistent about this. The x-nextjs-rewritten-query + // header omits the leading question mark. Should refactor to always do + // that instead. + if (pairs.length === 0) { + // If the search string is empty, return an empty string. + return ''; + } + // Prepend '?' to the search params string. + return '?' + pairs.join('&'); +} +// This is the data necessary to render when no SSR errors are encountered +async function getRSCPayload(tree, ctx, options) { + var _ctx_renderOpts_prefetchHints; + const { is404, prerenderHTTPError, staleTimeIterable, staticStageByteLengthPromise, runtimePrefetchStream } = options; + const injectedCSS = new Set(); + const injectedJS = new Set(); + const injectedFontPreloadTags = new Set(); + let missingSlots; + // We only track missing parallel slots in development + if (process.env.__NEXT_DEV_SERVER) { + missingSlots = new Set(); + } + const { getDynamicParamFromSegment, query, appUsingSizeAdjustment, componentMod: { createMetadataComponents, createElement, Fragment }, url, workStore } = ctx; + const hints = ((_ctx_renderOpts_prefetchHints = ctx.renderOpts.prefetchHints) == null ? void 0 : _ctx_renderOpts_prefetchHints[ctx.pagePath]) ?? null; + const initialTree = await (0, _createflightrouterstatefromloadertree.createFlightRouterStateFromLoaderTree)(tree, hints, getDynamicParamFromSegment, query); + const serveStreamingMetadata = !!ctx.renderOpts.serveStreamingMetadata; + const hasGlobalNotFound = !!tree[2]['global-not-found']; + const metadataIsRuntimePrefetchable = await (0, _instantconfig.anySegmentHasRuntimePrefetchEnabled)(tree); + const { Viewport, Metadata, MetadataOutlet } = createMetadataComponents({ + tree, + // When it's using global-not-found, metadata errorType is undefined, which will retrieve the + // metadata from the page. + // When it's using not-found, metadata errorType is 'not-found', which will retrieve the + // metadata from the not-found.js boundary. + // TODO: remove this condition and keep it undefined when global-not-found is stabilized. + errorType: is404 && !hasGlobalNotFound ? 'not-found' : undefined, + parsedQuery: query, + pathname: url.pathname, + metadataContext: (0, _metadatacontext.createMetadataContext)(ctx.renderOpts), + interpolatedParams: ctx.interpolatedParams, + serveStreamingMetadata, + isRuntimePrefetchable: metadataIsRuntimePrefetchable + }); + const preloadCallbacks = []; + const seedData = await (0, _createcomponenttree.createComponentTree)({ + ctx, + loaderTree: tree, + parentParams: {}, + parentOptionalCatchAllParamName: null, + parentRuntimePrefetchable: false, + injectedCSS, + injectedJS, + injectedFontPreloadTags, + rootLayoutIncluded: false, + missingSlots, + preloadCallbacks, + authInterrupts: ctx.renderOpts.experimental.authInterrupts, + MetadataOutlet, + prerenderHTTPError + }); + // When the `vary` response header is present with `Next-URL`, that means there's a chance + // it could respond differently if there's an interception route. We provide this information + // to `AppRouter` so that it can properly seed the prefetch cache with a prefix, if needed. + // In dev, the Vary header may not reliably reflect whether a route can + // be intercepted, because interception routes are compiled on demand. + // Default to true so the client doesn't cache a stale Fallback entry. + const varyHeader = ctx.res.getHeader('vary'); + const couldBeIntercepted = !!process.env.__NEXT_DEV_SERVER || typeof varyHeader === 'string' && varyHeader.includes(_approuterheaders.NEXT_URL); + const initialHead = createElement(Fragment, { + key: flightDataPathHeadKey + }, createElement(NonIndex, { + createElement, + pagePath: ctx.pagePath, + statusCode: ctx.res.statusCode, + isPossibleServerAction: ctx.isPossibleServerAction + }), createElement(Viewport, null), createElement(Metadata, null), appUsingSizeAdjustment ? createElement('meta', { + name: 'next-size-adjust', + content: '' + }) : null); + const { GlobalError, styles: globalErrorStyles } = await getGlobalErrorStyles(tree, ctx); + // Assume the head we're rendering contains only partial data if PPR is + // enabled and this is a statically generated response. This is used by the + // client Segment Cache after a prefetch to determine if it can skip the + // second request to fill in the dynamic data. + // + // See similar comment in create-component-tree.tsx for more context. + const isPossiblyPartialHead = workStore.isStaticGeneration && ctx.renderOpts.experimental.isRoutePPREnabled === true; + return maybeAppendBuildIdToRSCPayload(ctx, { + // See the comment above the `Preloads` component (below) for why this is part of the payload + P: createElement(Preloads, { + preloadCallbacks: preloadCallbacks + }), + c: prepareInitialCanonicalUrl(url), + q: getRenderedSearch(query), + i: !!couldBeIntercepted, + f: [ + [ + initialTree, + seedData, + initialHead, + isPossiblyPartialHead + ] + ], + m: missingSlots, + G: [ + GlobalError, + globalErrorStyles + ], + // Tells the client whether this route supports per-segment prefetching. + // With Cache Components, all routes support it. Without it, only fully + // static pages do, because their per-segment prefetch responses are + // generated during static generation (build or ISR). + S: workStore.isStaticGeneration || ctx.renderOpts.cacheComponents, + h: (0, _varyparams.getMetadataVaryParamsThenable)(), + s: staleTimeIterable, + l: staticStageByteLengthPromise, + p: runtimePrefetchStream, + // Include the per-page dynamic stale time from unstable_dynamicStaleTime, but + // only for dynamic renders. The client treats its presence as + // authoritative. + // TODO: Move this to the prefetch hints file so we don't have to walk + // the tree on every render. + d: !workStore.isStaticGeneration ? await getDynamicStaleTime(tree) ?? undefined : undefined + }); +} +/** + * Preload calls (such as `ReactDOM.preloadStyle` and `ReactDOM.preloadFont`) need to be called during rendering + * in order to create the appropriate preload tags in the DOM, otherwise they're a no-op. Since we invoke + * renderToReadableStream with a function that returns component props rather than a component itself, we use + * this component to "render " the preload calls. + */ function Preloads({ preloadCallbacks }) { + preloadCallbacks.forEach((preloadFn)=>preloadFn()); + return null; +} +// This is the data necessary to render when an error state is triggered +async function getErrorRSCPayload(tree, ctx, ssrError, errorType) { + var _ctx_renderOpts_prefetchHints; + const { getDynamicParamFromSegment, query, componentMod: { createMetadataComponents, createElement, Fragment }, url, workStore } = ctx; + const serveStreamingMetadata = !!ctx.renderOpts.serveStreamingMetadata; + const metadataIsRuntimePrefetchable = await (0, _instantconfig.anySegmentHasRuntimePrefetchEnabled)(tree); + const { Viewport, Metadata } = createMetadataComponents({ + tree, + parsedQuery: query, + pathname: url.pathname, + metadataContext: (0, _metadatacontext.createMetadataContext)(ctx.renderOpts), + errorType, + interpolatedParams: ctx.interpolatedParams, + serveStreamingMetadata: serveStreamingMetadata, + isRuntimePrefetchable: metadataIsRuntimePrefetchable + }); + const initialHead = createElement(Fragment, { + key: flightDataPathHeadKey + }, createElement(NonIndex, { + createElement, + pagePath: ctx.pagePath, + statusCode: ctx.res.statusCode, + isPossibleServerAction: ctx.isPossibleServerAction + }), createElement(Viewport, null), process.env.__NEXT_DEV_SERVER && createElement('meta', { + name: 'next-error', + content: 'not-found' + }), createElement(Metadata, null)); + const errorHints = ((_ctx_renderOpts_prefetchHints = ctx.renderOpts.prefetchHints) == null ? void 0 : _ctx_renderOpts_prefetchHints[ctx.pagePath]) ?? null; + const initialTree = await (0, _createflightrouterstatefromloadertree.createFlightRouterStateFromLoaderTree)(tree, errorHints, getDynamicParamFromSegment, query); + let err = undefined; + if (ssrError) { + err = (0, _iserror.default)(ssrError) ? ssrError : Object.defineProperty(new Error(ssrError + ''), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + // For metadata notFound error there's no global not found boundary on top + // so we create a not found page with AppRouter + const seedData = [ + createElement('html', { + id: '__next_error__' + }, createElement('head', null), createElement('body', null, process.env.__NEXT_DEV_SERVER && err ? createElement('template', { + 'data-next-error-message': err.message, + 'data-next-error-digest': 'digest' in err ? err.digest : '', + 'data-next-error-stack': err.stack + }) : null)), + {}, + null, + false, + null + ]; + const { GlobalError, styles: globalErrorStyles } = await getGlobalErrorStyles(tree, ctx); + const isPossiblyPartialHead = workStore.isStaticGeneration && ctx.renderOpts.experimental.isRoutePPREnabled === true; + return maybeAppendBuildIdToRSCPayload(ctx, { + c: prepareInitialCanonicalUrl(url), + q: getRenderedSearch(query), + m: undefined, + i: false, + f: [ + [ + initialTree, + seedData, + initialHead, + isPossiblyPartialHead + ] + ], + G: [ + GlobalError, + globalErrorStyles + ], + // Tells the client whether this route supports per-segment prefetching. + // With Cache Components, all routes support it. Without it, only fully + // static pages do, because their per-segment prefetch responses are + // generated during static generation (build or ISR). + S: workStore.isStaticGeneration || ctx.renderOpts.cacheComponents, + h: (0, _varyparams.getMetadataVaryParamsThenable)() + }); +} +// This component must run in an SSR context. It will render the RSC root component +function App({ reactServerStream, reactDebugStream, debugEndTime, preinitScripts, ServerInsertedHTMLProvider, nonce, images }) { + preinitScripts(); + const response = _react.use((0, _useflightresponse.getFlightStream)(reactServerStream, reactDebugStream, debugEndTime, nonce)); + const initialState = (0, _createinitialrouterstate.createInitialRouterState)({ + // This is not used during hydration, so we don't have to pass a + // real timestamp. + navigatedAt: -1, + initialRSCPayload: response, + // location is not initialized in the SSR render + // it's set to window.location during hydration + location: null + }); + const actionQueue = (0, _approuterinstance.createMutableActionQueue)(initialState, null); + const { HeadManagerContext } = require('../../shared/lib/head-manager-context.shared-runtime'); + return /*#__PURE__*/ (0, _jsxruntime.jsx)(HeadManagerContext.Provider, { + value: { + appDir: true, + nonce + }, + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_imageconfigcontextsharedruntime.ImageConfigContext.Provider, { + value: images ?? _imageconfig.imageConfigDefault, + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(ServerInsertedHTMLProvider, { + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_approuter.default, { + actionQueue: actionQueue, + globalErrorState: response.G + }) + }) + }) + }); +/* eslint-enable @next/internal/no-ambiguous-jsx -- React Client */ } +// @TODO our error stream should be probably just use the same root component. But it was previously +// different I don't want to figure out if that is meaningful at this time so just keeping the behavior +// consistent for now. +function ErrorApp({ reactServerStream, preinitScripts, ServerInsertedHTMLProvider, nonce, images }) { + /* eslint-disable @next/internal/no-ambiguous-jsx -- React Client */ preinitScripts(); + const response = _react.use((0, _useflightresponse.getFlightStream)(reactServerStream, undefined, undefined, nonce)); + const initialState = (0, _createinitialrouterstate.createInitialRouterState)({ + // This is not used during hydration, so we don't have to pass a + // real timestamp. + navigatedAt: -1, + initialRSCPayload: response, + // location is not initialized in the SSR render + // it's set to window.location during hydration + location: null + }); + const actionQueue = (0, _approuterinstance.createMutableActionQueue)(initialState, null); + return /*#__PURE__*/ (0, _jsxruntime.jsx)(_imageconfigcontextsharedruntime.ImageConfigContext.Provider, { + value: images ?? _imageconfig.imageConfigDefault, + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(ServerInsertedHTMLProvider, { + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_approuter.default, { + actionQueue: actionQueue, + globalErrorState: response.G + }) + }) + }); +/* eslint-enable @next/internal/no-ambiguous-jsx -- React Client */ } +async function renderToHTMLOrFlightImpl(req, res, url, pagePath, query, renderOpts, workStore, parsedRequestHeaders, postponedState, serverComponentsHmrCache, sharedContext, interpolatedParams, fallbackRouteParams) { + const isNotFoundPath = pagePath === '/404'; + if (isNotFoundPath) { + res.statusCode = 404; + } + // A unique request timestamp used by development to ensure that it's + // consistent and won't change during this request. This is important to + // avoid that resources can be deduped by React Float if the same resource is + // rendered or preloaded multiple times: ``. + const requestTimestamp = Date.now(); + const { ComponentMod, nextFontManifest, serverActions, assetPrefix = '', enableTainting, cacheComponents, setIsrStatus } = renderOpts; + const { cachedNavigations } = renderOpts.experimental; + // We need to expose the bundled `require` API globally for + // react-server-dom-webpack. This is a hack until we find a better way. + if (ComponentMod.__next_app__) { + const instrumented = (0, _clientcomponentrendererlogger.wrapClientComponentLoader)(ComponentMod); + // When we are prerendering if there is a cacheSignal for tracking + // cache reads we track calls to `loadChunk` and `require`. This allows us + // to treat chunk/module loading with similar semantics as cache reads to avoid + // module loading from causing a prerender to abort too early. + const shouldTrackModuleLoading = ()=>{ + if (!cacheComponents) { + return false; + } + if (process.env.__NEXT_DEV_SERVER) { + return true; + } + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (!workUnitStore) { + return false; + } + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-runtime': + case 'cache': + case 'private-cache': + return true; + case 'prerender-ppr': + case 'prerender-legacy': + case 'request': + case 'unstable-cache': + case 'generate-static-params': + return false; + default: + workUnitStore; + } + }; + const __next_require__ = (...args)=>{ + const exportsOrPromise = instrumented.require(...args); + if (shouldTrackModuleLoading()) { + // requiring an async module returns a promise. + (0, _trackmoduleloadingexternal.trackPendingImport)(exportsOrPromise); + } + return exportsOrPromise; + }; + // @ts-expect-error + globalThis.__next_require__ = __next_require__; + const __next_chunk_load__ = (...args)=>{ + const loadingChunk = instrumented.loadChunk(...args); + if (shouldTrackModuleLoading()) { + (0, _trackmoduleloadingexternal.trackPendingChunkLoad)(loadingChunk); + } + return loadingChunk; + }; + // @ts-expect-error + globalThis.__next_chunk_load__ = __next_chunk_load__; + } + if (process.env.__NEXT_DEV_SERVER && setIsrStatus && !cacheComponents) { + // Reset the ISR status at start of request. + const { pathname } = new URL(req.url || '/', 'http://n'); + setIsrStatus(pathname, // Only pages using the Node runtime can use ISR, Edge is always dynamic. + process.env.NEXT_RUNTIME === 'edge' ? false : undefined); + } + if (// The type check here ensures that `req` is correctly typed, and the + // environment variable check provides dead code elimination. + process.env.NEXT_RUNTIME !== 'edge' && (0, _helpers.isNodeNextRequest)(req)) { + res.onClose(()=>{ + // We stop tracking fetch metrics when the response closes, since we + // report them at that time. + workStore.shouldTrackFetchMetrics = false; + }); + req.originalRequest.on('end', ()=>{ + if ('performance' in globalThis) { + const metrics = (0, _clientcomponentrendererlogger.getClientComponentLoaderMetrics)({ + reset: true + }); + if (metrics) { + (0, _tracer.getTracer)().startSpan(_constants.NextNodeServerSpan.clientComponentLoading, { + startTime: metrics.clientComponentLoadStart, + attributes: { + 'next.clientComponentLoadCount': metrics.clientComponentLoadCount, + 'next.span_type': _constants.NextNodeServerSpan.clientComponentLoading + } + }).end(metrics.clientComponentLoadStart + metrics.clientComponentLoadTimes); + } + } + }); + } + const metadata = { + statusCode: isNotFoundPath ? 404 : undefined + }; + const appUsingSizeAdjustment = !!(nextFontManifest == null ? void 0 : nextFontManifest.appUsingSizeAdjust); + ComponentMod.patchFetch(); + // Pull out the hooks/references from the component. + const { routeModule: { userland: { loaderTree } }, taintObjectReference } = ComponentMod; + if (enableTainting) { + taintObjectReference('Do not pass process.env to Client Components since it will leak sensitive data', process.env); + } + workStore.fetchMetrics = []; + metadata.fetchMetrics = workStore.fetchMetrics; + // don't modify original query object + query = { + ...query + }; + (0, _internalutils.stripInternalQueries)(query); + const { isStaticGeneration } = workStore; + let requestId; + let htmlRequestId; + const { flightRouterState, isPrefetchRequest, isRuntimePrefetchRequest, isRSCRequest, isHmrRefresh, nonce } = parsedRequestHeaders; + if (parsedRequestHeaders.requestId) { + // If the client has provided a request ID (in development mode), we use it. + requestId = parsedRequestHeaders.requestId; + } else { + // Otherwise we generate a new request ID. + if (isStaticGeneration) { + requestId = Buffer.from(await crypto.subtle.digest('SHA-1', Buffer.from(req.url))).toString('hex'); + } else if (process.env.NEXT_RUNTIME === 'edge') { + requestId = crypto.randomUUID(); + } else { + requestId = require('next/dist/compiled/nanoid').nanoid(); + } + } + // If the client has provided an HTML request ID, we use it to associate the + // request with the HTML document from which it originated, which is used to + // send debug information to the associated WebSocket client. Otherwise, this + // is the request for the HTML document, so we use the request ID also as the + // HTML request ID. + htmlRequestId = parsedRequestHeaders.htmlRequestId || requestId; + const getDynamicParamFromSegment = makeGetDynamicParamFromSegment(interpolatedParams, fallbackRouteParams, renderOpts.experimental.optimisticRouting); + const isPossibleActionRequest = (0, _serveractionrequestmeta.getIsPossibleServerAction)(req); + // For implicit tags, we use the resolved pathname which has dynamic params + // interpolated, is decoded, and has trailing slash removed. + const resolvedPathname = (0, _requestmeta.getRequestMeta)(req, 'resolvedPathname'); + if (!resolvedPathname) { + throw Object.defineProperty(new _invarianterror.InvariantError('resolvedPathname must be set in request metadata'), "__NEXT_ERROR_CODE", { + value: "E981", + enumerable: false, + configurable: true + }); + } + const implicitTags = await (0, _implicittags.getImplicitTags)(workStore.page, resolvedPathname, fallbackRouteParams); + const ctx = { + componentMod: ComponentMod, + url, + renderOpts, + workStore, + parsedRequestHeaders, + getDynamicParamFromSegment, + interpolatedParams, + query, + isPrefetch: isPrefetchRequest, + isPossibleServerAction: isPossibleActionRequest, + requestTimestamp, + appUsingSizeAdjustment, + flightRouterState, + requestId, + htmlRequestId, + pagePath, + assetPrefix, + isNotFoundPath, + nonce, + res, + sharedContext, + implicitTags + }; + (0, _tracer.getTracer)().setRootSpanAttribute('next.route', pagePath); + if (isStaticGeneration) { + // We're either building or revalidating. In either case we need to + // prerender our page rather than render it. + const prerenderToStreamWithTracing = (0, _tracer.getTracer)().wrap(_constants.AppRenderSpan.getBodyResult, { + spanName: `prerender route (app) ${pagePath}`, + attributes: { + 'next.route': pagePath + } + }, prerenderToStream); + const response = await prerenderToStreamWithTracing(req, res, ctx, metadata, loaderTree, fallbackRouteParams); + // If we're debugging partial prerendering, print all the dynamic API accesses + // that occurred during the render. + // @TODO move into renderToStream function + if (response.dynamicAccess && (0, _dynamicrendering.accessedDynamicData)(response.dynamicAccess) && renderOpts.isDebugDynamicAccesses) { + (0, _log.warn)('The following dynamic usage was detected:'); + for (const access of (0, _dynamicrendering.formatDynamicAPIAccesses)(response.dynamicAccess)){ + (0, _log.warn)(access); + } + } + // If we encountered any unexpected errors during build we fail the + // prerendering phase and the build. + if (workStore.invalidDynamicUsageError) { + (0, _dynamicrendering.logDisallowedDynamicError)(workStore, workStore.invalidDynamicUsageError); + throw new _staticgenerationbailout.StaticGenBailoutError(); + } + if (response.digestErrorsMap.size) { + const buildFailingError = response.digestErrorsMap.values().next().value; + if (buildFailingError) throw buildFailingError; + } + // Pick first userland SSR error, which is also not a RSC error. + if (response.ssrErrors.length) { + const buildFailingError = response.ssrErrors.find((err)=>(0, _createerrorhandler.isUserLandError)(err)); + if (buildFailingError) throw buildFailingError; + } + const options = { + metadata, + contentType: _constants1.HTML_CONTENT_TYPE_HEADER + }; + // If we have pending revalidates, wait until they are all resolved. + const maybeRevalidatesPromise = (0, _revalidationutils.executeRevalidates)(workStore); + if (maybeRevalidatesPromise !== false) { + const revalidatesPromise = maybeRevalidatesPromise.finally(()=>{ + if (process.env.NEXT_PRIVATE_DEBUG_CACHE) { + console.log('pending revalidates promise finished for:', url.href); + } + }); + if (renderOpts.waitUntil) { + renderOpts.waitUntil(revalidatesPromise); + } else { + options.waitUntil = revalidatesPromise; + } + } + applyMetadataFromPrerenderResult(response, metadata, workStore); + if (response.renderResumeDataCache) { + metadata.renderResumeDataCache = response.renderResumeDataCache; + } + const streamString = await (0, _streamops.streamToString)(response.stream); + const result = new _renderresult.default(streamString, options); + // Run build-time instant validation if the page has instant configs + // TODO(instant-validation-build): This is not a great place to wire this in. + if (workStore.cacheComponentsEnabled && workStore.isBuildTimePrerendering && renderOpts.runInstantValidation && await (0, _instantconfig.anySegmentNeedsInstantValidationInBuild)(loaderTree)) { + // Throws StaticGenBailoutError if validation failed. + await validateInstantConfigsInBuild(ctx, response.renderResumeDataCache ?? null); + } + return result; + } else { + // We're rendering dynamically + const renderResumeDataCache = renderOpts.renderResumeDataCache ?? (postponedState == null ? void 0 : postponedState.renderResumeDataCache) ?? null; + const rootParams = (0, _createcomponenttree.getRootParams)(loaderTree, ctx.getDynamicParamFromSegment); + const fallbackParams = (0, _requestmeta.getRequestMeta)(req, 'fallbackParams') || null; + const createRequestStore = _requeststore.createRequestStoreForRender.bind(null, req, res, url, rootParams, implicitTags, renderOpts.onUpdateCookies, renderOpts.previewProps, isHmrRefresh, serverComponentsHmrCache, renderResumeDataCache, fallbackParams); + const requestStore = createRequestStore(); + if (process.env.__NEXT_DEV_SERVER && setIsrStatus && !cacheComponents && // Only pages using the Node runtime can use ISR, so we only need to + // update the status for those. + // The type check here ensures that `req` is correctly typed, and the + // environment variable check provides dead code elimination. + process.env.NEXT_RUNTIME !== 'edge' && (0, _helpers.isNodeNextRequest)(req)) { + req.originalRequest.on('end', ()=>{ + const { pathname } = new URL(req.url || '/', 'http://n'); + const isStatic = !requestStore.usedDynamic && !workStore.forceDynamic; + setIsrStatus(pathname, isStatic); + }); + } + if (isRSCRequest) { + if (isRuntimePrefetchRequest) { + return generateRuntimePrefetchResult(req, ctx, requestStore); + } else { + if (process.env.__NEXT_DEV_SERVER && process.env.NEXT_RUNTIME !== 'edge' && cacheComponents) { + return generateDynamicFlightRenderResultWithStagesInDev(req, ctx, requestStore, createRequestStore, fallbackParams); + } else if (cacheComponents && cachedNavigations) { + return generateStagedDynamicFlightRenderResult(req, ctx, requestStore); + } else { + return generateDynamicFlightRenderResult(req, ctx, requestStore); + } + } + } + let didExecuteServerAction = false; + let formState = null; + if (isPossibleActionRequest) { + // For action requests, we handle them differently with a special render result. + const actionRequestResult = await (0, _actionhandler.handleAction)({ + req, + res, + ComponentMod, + generateFlight: generateDynamicFlightRenderResult, + workStore, + requestStore, + serverActions, + ctx, + metadata + }); + if (actionRequestResult) { + if (actionRequestResult.type === 'not-found') { + const notFoundLoaderTree = createNotFoundLoaderTree(loaderTree); + res.statusCode = 404; + metadata.statusCode = 404; + const stream = await renderToStream(requestStore, req, res, ctx, notFoundLoaderTree, formState, postponedState, metadata, undefined, fallbackParams); + return new _renderresult.default(stream, { + metadata, + contentType: _constants1.HTML_CONTENT_TYPE_HEADER + }); + } else if (actionRequestResult.type === 'done') { + if (actionRequestResult.result) { + actionRequestResult.result.assignMetadata(metadata); + return actionRequestResult.result; + } else if (actionRequestResult.formState) { + formState = actionRequestResult.formState; + } + } + } + didExecuteServerAction = true; + } + const options = { + metadata, + contentType: _constants1.HTML_CONTENT_TYPE_HEADER + }; + const stream = await renderToStream(// NOTE: in Cache Components (dev), if the render is restarted, it will use a different requestStore + // than the one that we're passing in here. + requestStore, req, res, ctx, loaderTree, formState, postponedState, metadata, // If we're rendering HTML after an action, we don't want restartable-render behavior + // because the result should be dynamic, like it is in prod. + // Also, the request store might have been mutated by the action (e.g. enabling draftMode) + // and we currently we don't copy changes over when creating a new store, + // so the restarted render wouldn't be correct. + didExecuteServerAction ? undefined : createRequestStore, fallbackParams); + // Invalid dynamic usages should only error the request in development. + // In production, it's better to produce a result. + // (the dynamic error will still be thrown inside the component tree, but it's catchable by error boundaries) + if (workStore.invalidDynamicUsageError && process.env.__NEXT_DEV_SERVER) { + throw workStore.invalidDynamicUsageError; + } + // If we have pending revalidates, wait until they are all resolved. + const maybeRevalidatesPromise = (0, _revalidationutils.executeRevalidates)(workStore); + if (maybeRevalidatesPromise !== false) { + const revalidatesPromise = maybeRevalidatesPromise.finally(()=>{ + if (process.env.NEXT_PRIVATE_DEBUG_CACHE) { + console.log('pending revalidates promise finished for:', url.href); + } + }); + if (renderOpts.waitUntil) { + renderOpts.waitUntil(revalidatesPromise); + } else { + options.waitUntil = revalidatesPromise; + } + } + // Create the new render result for the response. + return new _renderresult.default(stream, options); + } +} +const renderToHTMLOrFlight = (req, res, pagePath, query, fallbackRouteParams, renderOpts, serverComponentsHmrCache, sharedContext)=>{ + var _renderOpts_previewProps; + if (!req.url) { + throw Object.defineProperty(new Error('Invalid URL'), "__NEXT_ERROR_CODE", { + value: "E182", + enumerable: false, + configurable: true + }); + } + const url = (0, _parserelativeurl.parseRelativeUrl)(req.url, undefined, false); + // We read these values from the request object as, in certain cases, + // base-server will strip them to opt into different rendering behavior. + const parsedRequestHeaders = parseRequestHeaders(req.headers, { + isRoutePPREnabled: renderOpts.experimental.isRoutePPREnabled === true, + previewModeId: (_renderOpts_previewProps = renderOpts.previewProps) == null ? void 0 : _renderOpts_previewProps.previewModeId + }); + const { isPrefetchRequest, previouslyRevalidatedTags, nonce } = parsedRequestHeaders; + let interpolatedParams; + let postponedState = null; + // If provided, the postpone state should be parsed so it can be provided to + // React. + if (typeof renderOpts.postponed === 'string') { + if (fallbackRouteParams) { + throw Object.defineProperty(new _invarianterror.InvariantError('postponed state should not be provided when fallback params are provided'), "__NEXT_ERROR_CODE", { + value: "E592", + enumerable: false, + configurable: true + }); + } + interpolatedParams = (0, _getdynamicparam.interpolateParallelRouteParams)(renderOpts.ComponentMod.routeModule.userland.loaderTree, renderOpts.params ?? {}, pagePath, fallbackRouteParams); + postponedState = (0, _postponedstate.parsePostponedState)(renderOpts.postponed, interpolatedParams, renderOpts.experimental.maxPostponedStateSizeBytes); + } else { + interpolatedParams = (0, _getdynamicparam.interpolateParallelRouteParams)(renderOpts.ComponentMod.routeModule.userland.loaderTree, renderOpts.params ?? {}, pagePath, fallbackRouteParams); + } + if ((postponedState == null ? void 0 : postponedState.renderResumeDataCache) && renderOpts.renderResumeDataCache) { + throw Object.defineProperty(new _invarianterror.InvariantError('postponed state and dev warmup immutable resume data cache should not be provided together'), "__NEXT_ERROR_CODE", { + value: "E589", + enumerable: false, + configurable: true + }); + } + const workStore = (0, _workstore.createWorkStore)({ + page: renderOpts.routeModule.definition.page, + renderOpts, + // @TODO move to workUnitStore of type Request + isPrefetchRequest, + buildId: sharedContext.buildId, + deploymentId: sharedContext.deploymentId, + previouslyRevalidatedTags, + nonce + }); + return _workasyncstorageexternal.workAsyncStorage.run(workStore, // The function to run + renderToHTMLOrFlightImpl, // all of it's args + req, res, url, pagePath, query, renderOpts, workStore, parsedRequestHeaders, postponedState, serverComponentsHmrCache, sharedContext, interpolatedParams, fallbackRouteParams); +}; +function applyMetadataFromPrerenderResult(response, metadata, workStore) { + if (response.collectedTags) { + metadata.fetchTags = response.collectedTags.join(','); + } + // Let the client router know how long to keep the cached entry around. + const staleHeader = String(response.collectedStale); + metadata.headers ??= {}; + metadata.headers[_approuterheaders.NEXT_ROUTER_STALE_TIME_HEADER] = staleHeader; + // If force static is specifically set to false, we should not revalidate + // the page. + if (workStore.forceStatic === false || response.collectedRevalidate === 0) { + metadata.cacheControl = { + revalidate: 0, + expire: undefined + }; + } else { + // Copy the cache control value onto the render result metadata. + metadata.cacheControl = { + revalidate: response.collectedRevalidate >= _constants1.INFINITE_CACHE ? false : response.collectedRevalidate, + expire: response.collectedExpire >= _constants1.INFINITE_CACHE ? undefined : response.collectedExpire + }; + } + // provide bailout info for debugging + if (metadata.cacheControl.revalidate === 0) { + metadata.staticBailoutInfo = { + description: workStore.dynamicUsageDescription, + stack: workStore.dynamicUsageStack + }; + } +} +async function renderToStream(requestStore, req, res, ctx, tree, formState, postponedState, metadata, createRequestStore, fallbackParams) { + /* eslint-disable @next/internal/no-ambiguous-jsx -- React Client */ const { assetPrefix, htmlRequestId, nonce, pagePath, renderOpts, requestId, workStore } = ctx; + const { basePath, buildManifest, ComponentMod: { createElement }, crossOrigin, experimental, isBuildTimePrerendering = false, onInstrumentationRequestError, page, reactMaxHeadersLength, setReactDebugChannel, shouldWaitOnAllReady, subresourceIntegrityManifest, supportsDynamicResponse, cacheComponents } = renderOpts; + const { cachedNavigations } = renderOpts.experimental; + const { ServerInsertedHTMLProvider, renderServerInsertedHTML } = (0, _serverinsertedhtml.createServerInsertedHTML)(); + const getServerInsertedMetadata = (0, _createserverinsertedmetadata.createServerInsertedMetadata)(nonce); + const tracingMetadata = (0, _utils1.getTracedMetadata)((0, _tracer.getTracer)().getTracePropagationData(), experimental.clientTraceMetadata); + const polyfills = buildManifest.polyfillFiles.filter((polyfill)=>polyfill.endsWith('.js') && !polyfill.endsWith('.module.js')).map((polyfill)=>({ + src: `${assetPrefix}/_next/${polyfill}${(0, _getassetquerystring.getAssetQueryString)(ctx, false)}`, + integrity: subresourceIntegrityManifest == null ? void 0 : subresourceIntegrityManifest[polyfill], + crossOrigin, + noModule: true, + nonce + })); + const [preinitScripts, bootstrapScript] = (0, _requiredscripts.getRequiredScripts)(buildManifest, // Why is assetPrefix optional on renderOpts? + // @TODO make it default empty string on renderOpts and get rid of it from ctx + assetPrefix, crossOrigin, subresourceIntegrityManifest, (0, _getassetquerystring.getAssetQueryString)(ctx, true), nonce, page); + // In development mode, set the request ID as a global variable, before the + // bootstrap script is executed, which depends on it during hydration. + // For MPA navigations (page reload, direct URL entry), the request ID + // header is not present, so we generate a random one. + const bootstrapScriptContent = process.env.__NEXT_DEV_SERVER ? `self.__next_r=${JSON.stringify(requestId ?? crypto.randomUUID())}` : undefined; + // Create the "render route (app)" span manually so we can keep it open during streaming. + // This is necessary because errors inside Suspense boundaries are reported asynchronously + // during stream consumption, after a typical wrapped function would have ended the span. + // Note: We pass the full span name as the first argument since startSpan uses it directly. + const renderSpan = (0, _tracer.getTracer)().startSpan(`render route (app) ${pagePath}`, { + attributes: { + 'next.span_name': `render route (app) ${pagePath}`, + 'next.span_type': _constants.AppRenderSpan.getBodyResult, + 'next.route': pagePath + } + }); + // Helper to end the span with error status (used when throwing from catch blocks) + const endSpanWithError = (err)=>{ + if (!renderSpan.isRecording()) return; + if (err instanceof Error) { + renderSpan.recordException(err); + renderSpan.setAttribute('error.type', err.name); + } + renderSpan.setStatus({ + code: _tracer.SpanStatusCode.ERROR, + message: err instanceof Error ? err.message : undefined + }); + renderSpan.end(); + }; + // Run the rest of the function within the span's context so child spans + // (like "build component tree", "generateMetadata") are properly parented. + return (0, _tracer.getTracer)().withSpan(renderSpan, async ()=>{ + const { reactServerErrorsByDigest } = workStore; + function onHTMLRenderRSCError(err, silenceLog) { + return onInstrumentationRequestError == null ? void 0 : onInstrumentationRequestError(err, req, createErrorContext(ctx, 'react-server-components'), silenceLog); + } + const serverComponentsErrorHandler = (0, _createerrorhandler.createReactServerErrorHandler)(process.env.NODE_ENV === 'development', isBuildTimePrerendering, reactServerErrorsByDigest, onHTMLRenderRSCError, renderSpan); + function onHTMLRenderSSRError(err) { + // We don't need to silence logs here. onHTMLRenderSSRError won't be called + // at all if the error was logged before in the RSC error handler. + const silenceLog = false; + return onInstrumentationRequestError == null ? void 0 : onInstrumentationRequestError(err, req, createErrorContext(ctx, 'server-rendering'), silenceLog); + } + const allCapturedErrors = []; + const htmlRendererErrorHandler = (0, _createerrorhandler.createHTMLErrorHandler)(process.env.NODE_ENV === 'development', isBuildTimePrerendering, reactServerErrorsByDigest, allCapturedErrors, onHTMLRenderSSRError, renderSpan); + let reactServerResult = null; + let reactDebugStream; + const setHeader = res.setHeader.bind(res); + const appendHeader = res.appendHeader.bind(res); + const { clientModules } = (0, _manifestssingleton.getClientReferenceManifest)(); + try { + if (process.env.__NEXT_DEV_SERVER && // Edge routes never prerender so we don't have a Prerender environment for anything in edge runtime + process.env.NEXT_RUNTIME !== 'edge' && // We only have a Prerender environment for projects opted into cacheComponents + cacheComponents) { + let debugChannel; + // eslint-disable-next-line @typescript-eslint/no-shadow + const getPayload = async (requestStore)=>{ + const payload = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, getRSCPayload, tree, ctx, { + is404: res.statusCode === 404 + }); + if (isBypassingCachesInDev(requestStore)) { + // Mark the RSC payload to indicate that caches were bypassed in dev. + // This lets the client know not to cache anything based on this render. + if (renderOpts.setCacheStatus) { + // we know this is available when cacheComponents is enabled, but typeguard to be safe + renderOpts.setCacheStatus('bypass', htmlRequestId); + } + payload._bypassCachesInDev = createElement(WarnForBypassCachesInDev, { + route: workStore.route + }); + } + return payload; + }; + if (// We only do this flow if we can safely recreate the store from scratch + // (which is not the case for renders after an action) + createRequestStore && // We only do this flow if we're not bypassing caches in dev using + // "disable cache" in devtools or a hard refresh (cache-control: "no-store") + !isBypassingCachesInDev(requestStore)) { + const { stream: serverStream, accumulatedChunksPromise, syncInterruptReason, startTime, staticStageEndTime, runtimeStageEndTime, debugChannel: returnedDebugChannel, requestStore: finalRequestStore } = await renderWithRestartOnCacheMissInDev(ctx, requestStore, createRequestStore, getPayload, serverComponentsErrorHandler); + let validationDebugChannelClient = undefined; + if (returnedDebugChannel) { + const [t1, t2] = returnedDebugChannel.clientSide.readable.tee(); + returnedDebugChannel.clientSide.readable = t1; + validationDebugChannelClient = nodeStreamFromReadableStream(t2); + } + _consoleasyncstorageexternal.consoleAsyncStorage.run({ + dim: true + }, spawnStaticShellValidationInDev, accumulatedChunksPromise, syncInterruptReason, startTime, staticStageEndTime, runtimeStageEndTime, ctx, finalRequestStore, fallbackParams, validationDebugChannelClient); + reactServerResult = new _apprenderprerenderutils.ReactServerResult(serverStream); + requestStore = finalRequestStore; + debugChannel = returnedDebugChannel; + } else { + logValidationSkipped(ctx); + // We're either bypassing caches or we can't restart the render. + // Do a dynamic render, but with (basic) environment labels. + debugChannel = setReactDebugChannel && (0, _debugchannelserver.createDebugChannel)(); + const serverStream = await stagedRenderToReadableStreamWithoutCachesInDev(ctx, requestStore, getPayload, { + onError: serverComponentsErrorHandler, + filterStackFrame, + debugChannel: debugChannel == null ? void 0 : debugChannel.serverSide + }); + reactServerResult = new _apprenderprerenderutils.ReactServerResult(serverStream); + } + if (debugChannel && setReactDebugChannel) { + const [readableSsr, readableBrowser] = debugChannel.clientSide.readable.tee(); + reactDebugStream = readableSsr; + setReactDebugChannel({ + readable: readableBrowser + }, htmlRequestId, requestId); + } + } else if (cacheComponents && cachedNavigations) { + // Production Cache Components + Cached Navigations: use staged + // rendering so the RSC payload includes the static stage byte length + // (`l` field), enabling the client to cache the static subset during + // hydration. + const { renderToReadableStream } = ctx.componentMod; + const selectStaleTime = (0, _staletime.createSelectStaleTime)(experimental); + const staleTimeIterable = new _staletime.StaleTimeIterable(); + // TODO(cached-navs): this assumes that we checked during build that there's no sync IO. + // but it can happen e.g. after a revalidation or conditionally for a param that wasn't prerendered. + // we should change this to track sync IO, log an error and advance to dynamic. + const shouldTrackSyncIO = false; + const stageController = new _stagedrendering.StagedRenderingController(null, null, shouldTrackSyncIO); + requestStore.stale = _constants1.INFINITE_CACHE; + requestStore.stagedRendering = stageController; + (0, _staletime.trackStaleTime)(requestStore, staleTimeIterable, selectStaleTime); + let resolveStaticStageByteLength; + const staticStageByteLengthPromise = new Promise((resolve)=>{ + resolveStaticStageByteLength = resolve; + }); + // If the route has runtime prefetching enabled, spawn a runtime + // prerender after the resume render fills caches. The result is + // embedded in the initial RSC payload so the client can cache + // runtime-prefetchable content during hydration. + const hasRuntimePrefetch = await (0, _instantconfig.anySegmentHasRuntimePrefetchEnabled)(tree); + let runtimePrefetchStream; + if (hasRuntimePrefetch) { + const prerenderResumeDataCache = (0, _resumedatacache.createPrerenderResumeDataCache)(); + requestStore.prerenderResumeDataCache = prerenderResumeDataCache; + const cacheSignal = new _cachesignal.CacheSignal(); + (0, _trackmoduleloadingexternal.trackPendingModules)(cacheSignal); + requestStore.cacheSignal = cacheSignal; + const runtimePrefetchTransform = new TransformStream(); + runtimePrefetchStream = runtimePrefetchTransform.readable; + void cacheSignal.cacheReady().then(()=>spawnRuntimePrefetchWithFilledCaches(runtimePrefetchTransform.writable, ctx, prerenderResumeDataCache, requestStore, serverComponentsErrorHandler)); + } + const RSCPayload = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, getRSCPayload, tree, ctx, { + is404: res.statusCode === 404, + staleTimeIterable, + staticStageByteLengthPromise, + runtimePrefetchStream + }); + const flightStream = await (0, _apprenderrenderutils.runInSequentialTasks)(()=>{ + stageController.advanceStage(_stagedrendering.RenderStage.Static); + const stream = _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, renderToReadableStream, RSCPayload, clientModules, { + onError: serverComponentsErrorHandler, + filterStackFrame + }); + const [dynamicStream, staticStream] = stream.tee(); + countStaticStageBytes(staticStream, stageController).then(resolveStaticStageByteLength); + return dynamicStream; + }, ()=>{ + // This is a separate task that doesn't advance a stage. It forces + // draining the microtask queue so that the stale time iterable is + // closed before we advance to the dynamic stage. + void (0, _staletime.finishStaleTimeTracking)(staleTimeIterable); + }, ()=>{ + stageController.advanceStage(_stagedrendering.RenderStage.Dynamic); + }); + reactServerResult = new _apprenderprerenderutils.ReactServerResult(flightStream); + } else { + // This is a dynamic render. We don't do dynamic tracking because we're not prerendering + const RSCPayload = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, getRSCPayload, tree, ctx, { + is404: res.statusCode === 404 + }); + const debugChannel = setReactDebugChannel && (0, _debugchannelserver.createDebugChannel)(); + if (debugChannel) { + const [readableSsr, readableBrowser] = debugChannel.clientSide.readable.tee(); + reactDebugStream = readableSsr; + setReactDebugChannel({ + readable: readableBrowser + }, htmlRequestId, requestId); + } + reactServerResult = new _apprenderprerenderutils.ReactServerResult(_workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, _streamops.renderToFlightStream, ctx.componentMod, RSCPayload, clientModules, { + filterStackFrame, + onError: serverComponentsErrorHandler, + debugChannel: debugChannel == null ? void 0 : debugChannel.serverSide + })); + } + // React doesn't start rendering synchronously but we want the RSC render to have a chance to start + // before we begin SSR rendering because we want to capture any available preload headers so we tick + // one task before continuing + await (0, _scheduler.waitAtLeastOneReactRenderTask)(); + // If provided, the postpone state should be parsed as JSON so it can be + // provided to React. + if (typeof renderOpts.postponed === 'string') { + if ((postponedState == null ? void 0 : postponedState.type) === _postponedstate.DynamicState.DATA) { + // We have a complete HTML Document in the prerender but we need to + // still include the new server component render because it was not included + // in the static prelude. + const inlinedDataStream = (0, _streamops.createInlinedDataStream)(reactServerResult.tee(), nonce, formState); + // End the span since there's no async rendering in this path + if (renderSpan.isRecording()) renderSpan.end(); + return (0, _streamops.chainStreams)(inlinedDataStream, (0, _streamops.createDocumentClosingStream)()); + } else if (postponedState) { + // We assume we have dynamic HTML requiring a resume render to complete + const { postponed, preludeState } = (0, _postponedstate.getPostponedFromState)(postponedState); + const resumeAppElement = /*#__PURE__*/ (0, _jsxruntime.jsx)(App, { + reactServerStream: reactServerResult.tee(), + reactDebugStream: reactDebugStream, + debugEndTime: undefined, + preinitScripts: preinitScripts, + ServerInsertedHTMLProvider: ServerInsertedHTMLProvider, + nonce: nonce, + images: ctx.renderOpts.images + }); + const getServerInsertedHTML = (0, _makegetserverinsertedhtml.makeGetServerInsertedHTML)({ + polyfills, + renderServerInsertedHTML, + serverCapturedErrors: allCapturedErrors, + basePath, + tracingMetadata: tracingMetadata + }); + const { stream: htmlStream, allReady } = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, _streamops.resumeToFizzStream, resumeAppElement, postponed, { + onError: htmlRendererErrorHandler, + nonce + }); + // End the render span only after React completed rendering (including anything inside Suspense boundaries) + allReady.finally(()=>{ + if (renderSpan.isRecording()) renderSpan.end(); + }); + return await (0, _streamops.continueDynamicHTMLResume)(htmlStream, { + delayDataUntilFirstHtmlChunk: preludeState === _postponedstate.DynamicHTMLPreludeState.Empty, + inlinedDataStream: (0, _streamops.createInlinedDataStream)(reactServerResult.consume(), nonce, formState), + getServerInsertedHTML, + getServerInsertedMetadata, + deploymentId: ctx.sharedContext.deploymentId + }); + } + } + // This is a regular dynamic render + const getServerInsertedHTML = (0, _makegetserverinsertedhtml.makeGetServerInsertedHTML)({ + polyfills, + renderServerInsertedHTML, + serverCapturedErrors: allCapturedErrors, + basePath, + tracingMetadata: tracingMetadata + }); + const generateStaticHTML = supportsDynamicResponse !== true || !!shouldWaitOnAllReady; + const appElement = /*#__PURE__*/ (0, _jsxruntime.jsx)(App, { + reactServerStream: reactServerResult.tee(), + reactDebugStream: reactDebugStream, + debugEndTime: undefined, + preinitScripts: preinitScripts, + ServerInsertedHTMLProvider: ServerInsertedHTMLProvider, + nonce: nonce, + images: ctx.renderOpts.images + }); + const fizzOptions = { + onError: htmlRendererErrorHandler, + nonce, + onHeaders: (headers)=>{ + headers.forEach((value, key)=>{ + appendHeader(key, value); + }); + }, + maxHeadersLength: reactMaxHeadersLength, + bootstrapScriptContent, + bootstrapScripts: [ + bootstrapScript + ], + formState + }; + const { stream: htmlStream, allReady } = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, _streamops.renderToFizzStream, appElement, fizzOptions); + // End the render span only after React completed rendering (including anything inside Suspense boundaries) + allReady.finally(()=>{ + if (renderSpan.isRecording()) renderSpan.end(); + }); + return await (0, _streamops.continueFizzStream)(htmlStream, { + inlinedDataStream: (0, _streamops.createInlinedDataStream)(reactServerResult.consume(), nonce, formState), + isStaticGeneration: generateStaticHTML, + allReady, + deploymentId: ctx.sharedContext.deploymentId, + getServerInsertedHTML, + getServerInsertedMetadata, + validateRootLayout: !!process.env.__NEXT_DEV_SERVER + }); + } catch (err) { + if ((0, _staticgenerationbailout.isStaticGenBailoutError)(err) || typeof err === 'object' && err !== null && 'message' in err && typeof err.message === 'string' && err.message.includes('https://nextjs.org/docs/advanced-features/static-html-export')) { + // Ensure that "next dev" prints the red error overlay + endSpanWithError(err); + throw err; + } + // If a bailout made it to this point, it means it wasn't wrapped inside + // a suspense boundary. + const shouldBailoutToCSR = (0, _bailouttocsr.isBailoutToCSRError)(err); + if (shouldBailoutToCSR) { + const stack = (0, _formatservererror.getStackWithoutErrorMessage)(err); + (0, _log.error)(`${err.reason} should be wrapped in a suspense boundary at page "${pagePath}". Read more: https://nextjs.org/docs/messages/missing-suspense-with-csr-bailout\n${stack}`); + endSpanWithError(err); + throw err; + } + let errorType; + if ((0, _httpaccessfallback.isHTTPAccessFallbackError)(err)) { + res.statusCode = (0, _httpaccessfallback.getAccessFallbackHTTPStatus)(err); + metadata.statusCode = res.statusCode; + errorType = (0, _httpaccessfallback.getAccessFallbackErrorTypeByStatus)(res.statusCode); + } else if ((0, _redirecterror.isRedirectError)(err)) { + errorType = 'redirect'; + res.statusCode = (0, _redirect.getRedirectStatusCodeFromError)(err); + metadata.statusCode = res.statusCode; + const redirectUrl = (0, _addpathprefix.addPathPrefix)((0, _redirect.getURLFromRedirectError)(err), basePath); + // If there were mutable cookies set, we need to set them on the + // response. + const headers = new Headers(); + if ((0, _requestcookies.appendMutableCookies)(headers, requestStore.mutableCookies)) { + setHeader('set-cookie', Array.from(headers.values())); + } + setHeader('location', redirectUrl); + } else if (!shouldBailoutToCSR) { + res.statusCode = 500; + metadata.statusCode = res.statusCode; + } + const [errorPreinitScripts, errorBootstrapScript] = (0, _requiredscripts.getRequiredScripts)(buildManifest, assetPrefix, crossOrigin, subresourceIntegrityManifest, (0, _getassetquerystring.getAssetQueryString)(ctx, false), nonce, '/_not-found/page'); + let errorRSCPayload; + let errorServerStream; + try { + errorRSCPayload = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, getErrorRSCPayload, tree, ctx, reactServerErrorsByDigest.has(err.digest) ? null : err, errorType); + errorServerStream = _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, _streamops.renderToFlightStream, ctx.componentMod, errorRSCPayload, clientModules, { + filterStackFrame, + onError: serverComponentsErrorHandler + }); + if (reactServerResult === null) { + // We errored when we did not have an RSC stream to read from. This is not just a render + // error, we need to throw early + endSpanWithError(err); + throw err; + } + } catch (setupErr) { + endSpanWithError(setupErr); + throw setupErr; + } + try { + const generateStaticHTML = supportsDynamicResponse !== true || !!shouldWaitOnAllReady; + const { stream: errorHtmlStream, allReady: errorAllReady } = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, _streamops.renderToFizzStream, /*#__PURE__*/ (0, _jsxruntime.jsx)(ErrorApp, { + reactServerStream: errorServerStream, + ServerInsertedHTMLProvider: ServerInsertedHTMLProvider, + preinitScripts: errorPreinitScripts, + nonce: nonce, + images: ctx.renderOpts.images + }), { + nonce, + bootstrapScriptContent, + bootstrapScripts: [ + errorBootstrapScript + ], + formState + }); + // End the render span only after React completed rendering (including anything inside Suspense boundaries) + errorAllReady.finally(()=>{ + if (renderSpan.isRecording()) renderSpan.end(); + }); + return await (0, _streamops.continueFizzStream)(errorHtmlStream, { + inlinedDataStream: (0, _streamops.createInlinedDataStream)(// This is intentionally using the readable datastream from the + // main render rather than the flight data from the error page + // render + reactServerResult.consume(), nonce, formState), + isStaticGeneration: generateStaticHTML, + deploymentId: ctx.sharedContext.deploymentId, + getServerInsertedHTML: (0, _makegetserverinsertedhtml.makeGetServerInsertedHTML)({ + polyfills, + renderServerInsertedHTML, + serverCapturedErrors: [], + basePath, + tracingMetadata: tracingMetadata + }), + getServerInsertedMetadata, + validateRootLayout: !!process.env.__NEXT_DEV_SERVER + }); + } catch (finalErr) { + if (process.env.__NEXT_DEV_SERVER && (0, _httpaccessfallback.isHTTPAccessFallbackError)(finalErr)) { + const { bailOnRootNotFound } = require('../../client/components/dev-root-http-access-fallback-boundary'); + bailOnRootNotFound(); + } + endSpanWithError(finalErr); + throw finalErr; + } + } + }); +/* eslint-enable @next/internal/no-ambiguous-jsx */ } +async function renderWithRestartOnCacheMissInDev(ctx, initialRequestStore, createRequestStore, getPayload, onError) { + const { htmlRequestId, renderOpts } = ctx; + const { ComponentMod, setCacheStatus, setReactDebugChannel } = renderOpts; + let startTime = -Infinity; + // If the render is restarted, we'll recreate a fresh request store + let requestStore = initialRequestStore; + const environmentName = ()=>{ + const currentStage = requestStore.stagedRendering.currentStage; + switch(currentStage){ + case _stagedrendering.RenderStage.Before: + case _stagedrendering.RenderStage.EarlyStatic: + case _stagedrendering.RenderStage.Static: + return 'Prerender'; + case _stagedrendering.RenderStage.EarlyRuntime: + return 'Prefetch'; + case _stagedrendering.RenderStage.Runtime: + return 'Prefetchable'; + case _stagedrendering.RenderStage.Dynamic: + case _stagedrendering.RenderStage.Abandoned: + return 'Server'; + default: + currentStage; + throw Object.defineProperty(new _invarianterror.InvariantError(`Invalid render stage: ${currentStage}`), "__NEXT_ERROR_CODE", { + value: "E881", + enumerable: false, + configurable: true + }); + } + }; + //=============================================== + // Initial render + //=============================================== + // Try to render the page and see if there's any cache misses. + // If there are, wait for caches to finish and restart the render. + // This render might end up being used as a prospective render (if there's cache misses), + // so we need to set it up for filling caches. + const cacheSignal = new _cachesignal.CacheSignal(); + // If we encounter async modules that delay rendering, we'll also need to restart. + // TODO(restart-on-cache-miss): technically, we only need to wait for pending *server* modules here, + // but `trackPendingModules` doesn't distinguish between client and server. + (0, _trackmoduleloadingexternal.trackPendingModules)(cacheSignal); + const prerenderResumeDataCache = (0, _resumedatacache.createPrerenderResumeDataCache)(); + const initialReactController = new AbortController(); + const initialDataController = new AbortController() // Controls hanging promises we create + ; + const initialAbandonController = new AbortController() // Controls whether this render is abandoned + ; + const initialStageController = new _stagedrendering.StagedRenderingController(initialDataController.signal, initialAbandonController, true // track sync IO + ); + requestStore.prerenderResumeDataCache = prerenderResumeDataCache; + // `getRenderResumeDataCache` will fall back to using `prerenderResumeDataCache` as `renderResumeDataCache`, + // so not having a resume data cache won't break any expectations in case we don't need to restart. + requestStore.renderResumeDataCache = null; + requestStore.stagedRendering = initialStageController; + requestStore.asyncApiPromises = createAsyncApiPromises(initialStageController, requestStore.cookies, requestStore.mutableCookies, requestStore.headers); + requestStore.cacheSignal = cacheSignal; + let debugChannel = setReactDebugChannel && (0, _debugchannelserver.createDebugChannel)(); + const { clientModules } = (0, _manifestssingleton.getClientReferenceManifest)(); + // Note: The stage controller starts out in the `Before` stage, + // where sync IO does not cause aborts, so it's okay if it happens before render. + const initialRscPayload = await getPayload(requestStore); + const initialStreamResult = await (0, _apprenderrenderutils.runInSequentialTasks)(()=>{ + initialStageController.advanceStage(_stagedrendering.RenderStage.EarlyStatic); + startTime = performance.now() + performance.timeOrigin; + const streamPair = _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, _streamops.renderToFlightStream, ComponentMod, initialRscPayload, clientModules, { + onError, + environmentName, + startTime, + filterStackFrame, + debugChannel: debugChannel == null ? void 0 : debugChannel.serverSide, + signal: initialReactController.signal + }).tee(); + // If we abort the render, we want to reject the stage-dependent promises as well. + // Note that we want to install this listener after the render is started + // so that it runs after react is finished running its abort code. + initialReactController.signal.addEventListener('abort', ()=>{ + const { reason } = initialReactController.signal; + initialDataController.abort(reason); + }, { + once: true + }); + const stream = streamPair[0]; + const accumulatedChunksPromise = accumulateStreamChunks(streamPair[1], initialStageController, initialDataController.signal); + initialDataController.signal.addEventListener('abort', ()=>{ + accumulatedChunksPromise.catch(()=>{}); + stream.cancel(); + }, { + once: true + }); + return { + stream, + accumulatedChunksPromise + }; + }, ()=>{ + if (initialAbandonController.signal.aborted === true) { + return; + } else if (cacheSignal.hasPendingReads()) { + initialAbandonController.abort(); + } else { + initialStageController.advanceStage(_stagedrendering.RenderStage.Static); + } + }, ()=>{ + if (initialAbandonController.signal.aborted === true) { + return; + } else if (cacheSignal.hasPendingReads()) { + initialAbandonController.abort(); + } else { + initialStageController.advanceStage(_stagedrendering.RenderStage.EarlyRuntime); + } + }, ()=>{ + if (initialAbandonController.signal.aborted === true) { + return; + } else if (cacheSignal.hasPendingReads()) { + initialAbandonController.abort(); + } else { + initialStageController.advanceStage(_stagedrendering.RenderStage.Runtime); + } + }, ()=>{ + if (initialAbandonController.signal.aborted === true) { + return; + } else if (cacheSignal.hasPendingReads()) { + initialAbandonController.abort(); + } else { + initialStageController.advanceStage(_stagedrendering.RenderStage.Dynamic); + } + }); + if (initialStageController.currentStage !== _stagedrendering.RenderStage.Abandoned) { + // No cache misses. We can use the result as-is. + return { + stream: initialStreamResult.stream, + accumulatedChunksPromise: initialStreamResult.accumulatedChunksPromise, + syncInterruptReason: initialStageController.getSyncInterruptReason(), + startTime, + staticStageEndTime: initialStageController.getStaticStageEndTime(), + runtimeStageEndTime: initialStageController.getRuntimeStageEndTime(), + debugChannel, + requestStore + }; + } + if (process.env.__NEXT_DEV_SERVER && setCacheStatus) { + setCacheStatus('filling', htmlRequestId); + } + // Cache miss. We will use the initial render to fill caches, and discard its result. + // Then, we can render again with warm caches. + // TODO(restart-on-cache-miss): + // This might end up waiting for more caches than strictly necessary, + // because we can't abort the render yet, and we'll let runtime/dynamic APIs resolve. + // Ideally we'd only wait for caches that are needed in the static stage. + // This will be optimized in the future by not allowing runtime/dynamic APIs to resolve. + await cacheSignal.cacheReady(); + initialReactController.abort(); + //=============================================== + // Final render (restarted) + //=============================================== + // The initial render acted as a prospective render to warm the caches. + requestStore = createRequestStore(); + // We are going to render this pass all the way through because we've already + // filled any caches so we won't be aborting this time. + const abortSignal = null; + const finalStageController = new _stagedrendering.StagedRenderingController(abortSignal, null, true // track sync IO + ); + // We've filled the caches, so now we can render as usual, + // without any cache-filling mechanics. + requestStore.prerenderResumeDataCache = null; + requestStore.renderResumeDataCache = (0, _resumedatacache.createRenderResumeDataCache)(prerenderResumeDataCache); + requestStore.stagedRendering = finalStageController; + requestStore.cacheSignal = null; + requestStore.asyncApiPromises = createAsyncApiPromises(finalStageController, requestStore.cookies, requestStore.mutableCookies, requestStore.headers); + // The initial render already wrote to its debug channel. + // We're not using it, so we need to create a new one. + debugChannel = setReactDebugChannel && (0, _debugchannelserver.createDebugChannel)(); + // Note: The stage controller starts out in the `Before` stage, + // where sync IO does not cause aborts, so it's okay if it happens before render. + const finalRscPayload = await getPayload(requestStore); + const finalStreamResult = await (0, _apprenderrenderutils.runInSequentialTasks)(()=>{ + finalStageController.advanceStage(_stagedrendering.RenderStage.EarlyStatic); + startTime = performance.now() + performance.timeOrigin; + const streamPair = _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, _streamops.renderToFlightStream, ComponentMod, finalRscPayload, clientModules, { + onError, + environmentName, + startTime, + filterStackFrame, + debugChannel: debugChannel == null ? void 0 : debugChannel.serverSide + }).tee(); + return { + stream: streamPair[0], + accumulatedChunksPromise: accumulateStreamChunks(streamPair[1], finalStageController, null) + }; + }, ()=>{ + // Static stage + finalStageController.advanceStage(_stagedrendering.RenderStage.Static); + }, ()=>{ + // EarlyRuntime stage + finalStageController.advanceStage(_stagedrendering.RenderStage.EarlyRuntime); + }, ()=>{ + // Runtime stage + finalStageController.advanceStage(_stagedrendering.RenderStage.Runtime); + }, ()=>{ + // Dynamic stage + finalStageController.advanceStage(_stagedrendering.RenderStage.Dynamic); + }); + if (process.env.__NEXT_DEV_SERVER && setCacheStatus) { + setCacheStatus('filled', htmlRequestId); + } + return { + stream: finalStreamResult.stream, + accumulatedChunksPromise: finalStreamResult.accumulatedChunksPromise, + syncInterruptReason: finalStageController.getSyncInterruptReason(), + startTime, + staticStageEndTime: finalStageController.getStaticStageEndTime(), + runtimeStageEndTime: finalStageController.getRuntimeStageEndTime(), + debugChannel, + requestStore + }; +} +async function accumulateStreamChunks(stream, stageController, signal) { + const staticChunks = []; + const runtimeChunks = []; + const dynamicChunks = []; + const reader = stream.getReader(); + let cancelled = false; + function cancel() { + if (!cancelled) { + cancelled = true; + reader.cancel(); + } + } + if (signal) { + signal.addEventListener('abort', cancel, { + once: true + }); + } + try { + while(!cancelled){ + const { done, value } = await reader.read(); + if (done) { + cancel(); + break; + } + switch(stageController.currentStage){ + case _stagedrendering.RenderStage.Before: + throw Object.defineProperty(new _invarianterror.InvariantError('Unexpected stream chunk while in Before stage'), "__NEXT_ERROR_CODE", { + value: "E942", + enumerable: false, + configurable: true + }); + case _stagedrendering.RenderStage.EarlyStatic: + case _stagedrendering.RenderStage.Static: + staticChunks.push(value); + // fall through + case _stagedrendering.RenderStage.EarlyRuntime: + case _stagedrendering.RenderStage.Runtime: + runtimeChunks.push(value); + // fall through + case _stagedrendering.RenderStage.Dynamic: + dynamicChunks.push(value); + break; + case _stagedrendering.RenderStage.Abandoned: + break; + default: + stageController.currentStage; + break; + } + } + } catch (err) { + // When we cancel the reader we may reject the read. + // Only swallow errors caused by our intentional cancel(); + // re-throw unexpected errors to avoid silently returning partial data. + if (!cancelled) { + throw err; + } + } + return { + staticChunks, + runtimeChunks, + dynamicChunks + }; +} +async function countStaticStageBytes(stream, stageController) { + let byteLength = 0; + const reader = stream.getReader(); + stageController.onStage(_stagedrendering.RenderStage.EarlyRuntime, ()=>{ + reader.cancel(); + }); + while(true){ + const { done, value } = await reader.read(); + if (done) { + break; + } + if (stageController.currentStage <= _stagedrendering.RenderStage.Static) { + byteLength += value.byteLength; + } else { + reader.cancel(); + break; + } + } + return byteLength; +} +function createAsyncApiPromises(stagedRendering, cookies, mutableCookies, headers) { + return { + // Runtime APIs (for prefetch segments) + cookies: stagedRendering.delayUntilStage(_stagedrendering.RenderStage.Runtime, 'cookies', cookies), + earlyCookies: stagedRendering.delayUntilStage(_stagedrendering.RenderStage.EarlyRuntime, 'cookies', cookies), + mutableCookies: stagedRendering.delayUntilStage(_stagedrendering.RenderStage.Runtime, 'cookies', mutableCookies), + earlyMutableCookies: stagedRendering.delayUntilStage(_stagedrendering.RenderStage.EarlyRuntime, 'cookies', mutableCookies), + headers: stagedRendering.delayUntilStage(_stagedrendering.RenderStage.Runtime, 'headers', headers), + earlyHeaders: stagedRendering.delayUntilStage(_stagedrendering.RenderStage.EarlyRuntime, 'headers', headers), + // These are not used directly, but we chain other `params`/`searchParams` promises off of them. + sharedParamsParent: stagedRendering.delayUntilStage(_stagedrendering.RenderStage.Runtime, undefined, ''), + earlySharedParamsParent: stagedRendering.delayUntilStage(_stagedrendering.RenderStage.EarlyRuntime, undefined, ''), + sharedSearchParamsParent: stagedRendering.delayUntilStage(_stagedrendering.RenderStage.Runtime, undefined, ''), + earlySharedSearchParamsParent: stagedRendering.delayUntilStage(_stagedrendering.RenderStage.EarlyRuntime, undefined, ''), + connection: stagedRendering.delayUntilStage(_stagedrendering.RenderStage.Dynamic, 'connection', undefined) + }; +} +/** + * Logs the given messages, and sends the error instances to the browser as an + * RSC stream, where they can be deserialized and logged (or otherwise presented + * in the devtools), while leveraging React's capabilities to not only + * source-map the stack frames (via findSourceMapURL), but also create virtual + * server modules that allow users to inspect the server source code in the + * browser. + */ async function logMessagesAndSendErrorsToBrowser(messages, ctx) { + const { htmlRequestId, renderOpts } = ctx; + const { sendErrorsToBrowser } = renderOpts; + const errors = []; + for (const message of messages){ + // Log the error to the CLI. Prevent the logs from being dimmed, which we + // apply for other logs during the spawned validation. + _consoleasyncstorageexternal.consoleAsyncStorage.exit(()=>{ + console.error(message); + }); + // Error instances are also sent to the browser. We're currently using a + // non-Error message only in debug build mode as a message that is only + // meant for the CLI. FIXME: This is a bit spooky action at a distance. We + // should maybe have a more explicit way of determining which messages + // should be sent to the browser. Regardless, only real errors with a proper + // stack make sense to be "replayed" in the browser. + if (message instanceof Error) { + errors.push(message); + } + } + if (errors.length > 0) { + if (!sendErrorsToBrowser) { + throw Object.defineProperty(new _invarianterror.InvariantError('Expected `sendErrorsToBrowser` to be defined in renderOpts.'), "__NEXT_ERROR_CODE", { + value: "E947", + enumerable: false, + configurable: true + }); + } + // Build a Map of error → error code for errors that have one. + // React doesn't revive __NEXT_ERROR_CODE during RSC deserialization, so we + // send it as a side-channel Map. RSC preserves object identity, so the + // deserialized Map keys will reference the same Error objects. + const errorCodes = new Map(); + for (const err of errors){ + const code = (0, _errortelemetryutils.extractNextErrorCode)(err); + if (code !== undefined) { + errorCodes.set(err, code); + } + } + const { clientModules } = (0, _manifestssingleton.getClientReferenceManifest)(); + const errorsFlightStream = (0, _streamops.renderToFlightStream)(ctx.componentMod, { + errors, + errorCodes + }, clientModules, { + filterStackFrame + }); + sendErrorsToBrowser(errorsFlightStream, htmlRequestId); + } +} +function logValidationSkipped(ctx) { + if (process.env.__NEXT_TEST_MODE && process.env.NEXT_TEST_LOG_VALIDATION) { + const requestId = ctx.requestId; + const url = ctx.url.href; + console.log('' + JSON.stringify({ + type: 'validation_start', + requestId, + url + }) + ''); + console.log('' + JSON.stringify({ + type: 'validation_end', + requestId, + url + }) + ''); + } +} +async function spawnStaticShellValidationInDev(...args) { + if (process.env.__NEXT_TEST_MODE && process.env.NEXT_TEST_LOG_VALIDATION) { + const ctx = args[5]; + const requestId = ctx.requestId; + const url = ctx.url.href; + console.log('' + JSON.stringify({ + type: 'validation_start', + requestId, + url + }) + ''); + try { + return await spawnStaticShellValidationInDevImpl(...args); + } finally{ + console.log('' + JSON.stringify({ + type: 'validation_end', + requestId, + url + }) + ''); + } + } else { + return await spawnStaticShellValidationInDevImpl(...args); + } +} +/** + * This function is a fork of prerenderToStream cacheComponents branch. + * While it doesn't return a stream we want it to have identical + * prerender semantics to prerenderToStream and should update it + * in conjunction with any changes to that function. + */ async function spawnStaticShellValidationInDevImpl(accumulatedChunksPromise, syncInterruptReason, startTime, staticStageEndTime, runtimeStageEndTime, ctx, requestStore, fallbackRouteParams, debugChannelClient) { + const debug = process.env.NEXT_PRIVATE_DEBUG_VALIDATION === '1' ? console.log : undefined; + const { componentMod: ComponentMod, getDynamicParamFromSegment, renderOpts, workStore } = ctx; + const loaderTree = ComponentMod.routeModule.userland.loaderTree; + const allowEmptyStaticShell = (renderOpts.allowEmptyStaticShell ?? false) || await (0, _instantconfig.isPageAllowedToBlock)(loaderTree); + const rootParams = (0, _createcomponenttree.getRootParams)(loaderTree, getDynamicParamFromSegment); + const hmrRefreshHash = (0, _workunitasyncstorageexternal.getHmrRefreshHash)(requestStore); + // We don't need to continue the prerender process if we already + // detected invalid dynamic usage in the initial prerender phase. + const { invalidDynamicUsageError } = workStore; + if (invalidDynamicUsageError) { + return logMessagesAndSendErrorsToBrowser([ + invalidDynamicUsageError + ], ctx); + } + if (syncInterruptReason) { + return logMessagesAndSendErrorsToBrowser([ + syncInterruptReason + ], ctx); + } + let debugChunks = null; + if (debugChannelClient) { + debugChunks = []; + debugChannelClient.on('data', (c)=>{ + debugChunks.push(c); + }); + } + const accumulatedChunks = await accumulatedChunksPromise; + const { staticChunks, runtimeChunks, dynamicChunks } = accumulatedChunks; + const needsInstantValidation = await (0, _instantconfig.anySegmentNeedsInstantValidationInDev)(loaderTree); + // `samples` from instant config are only used during build + const validationSamples = null; + const validationSampleTracking = null; + // First we warmup SSR with the runtime chunks. This ensures that when we do + // the full prerender pass with dynamic tracking module loading won't + // interrupt the prerender and can properly observe the entire content + await warmupClientModulesForStagedValidation(// if we're going to be validating prefetches, we'll be rendering some segments in the dynamic stage. + // otherwise, for static shell validation, we only need to warm up to the runtime stage. + // we also need to use a different store type, because instant validation allows more APIs to resolve. + needsInstantValidation ? 'validation-client' : 'prerender-client', needsInstantValidation ? dynamicChunks : runtimeChunks, dynamicChunks, rootParams, fallbackRouteParams, allowEmptyStaticShell, ctx, validationSamples, validationSampleTracking); + debug == null ? void 0 : debug(`Starting static shell validation...`); + const runtimeResult = await validateStagedShell(runtimeChunks, dynamicChunks, debugChunks, runtimeStageEndTime, rootParams, fallbackRouteParams, allowEmptyStaticShell, ctx, hmrRefreshHash, _dynamicrendering.trackDynamicHoleInRuntimeShell); + if (runtimeResult.length > 0) { + debug == null ? void 0 : debug(`❌ Failed - ${runtimeResult.length} errors from runtime stage`); + // We have something to report from the runtime validation + // We can skip the rest + return logMessagesAndSendErrorsToBrowser(runtimeResult, ctx); + } + const staticResult = await validateStagedShell(staticChunks, dynamicChunks, debugChunks, staticStageEndTime, rootParams, fallbackRouteParams, allowEmptyStaticShell, ctx, hmrRefreshHash, _dynamicrendering.trackDynamicHoleInStaticShell); + if (staticResult.length > 0) { + debug == null ? void 0 : debug(`❌ Failed - ${staticResult.length} errors from static stage`); + // We have something to report from the static validation + // We can skip the rest + return logMessagesAndSendErrorsToBrowser(staticResult, ctx); + } + debug == null ? void 0 : debug(`✅ Passed`); + if (needsInstantValidation) { + const instantConfigsResult = await validateInstantConfigs(accumulatedChunks, debugChunks, startTime, rootParams, fallbackRouteParams, ctx, hmrRefreshHash, validationSamples); + if (instantConfigsResult.length > 0) { + return logMessagesAndSendErrorsToBrowser(instantConfigsResult, ctx); + } + } +} +async function warmupClientModulesForStagedValidation(storeType, partialServerChunks, allServerChunks, rootParams, fallbackRouteParams, allowEmptyStaticShell, ctx, validationSamples, validationSampleTracking) { + const { implicitTags, nonce, workStore } = ctx; + // Warmup SSR + const initialClientPrerenderController = new AbortController(); + const initialClientReactController = new AbortController(); + const initialClientRenderController = new AbortController(); + const preinitScripts = ()=>{}; + const { ServerInsertedHTMLProvider } = (0, _serverinsertedhtml.createServerInsertedHTML)(); + let initialClientPrerenderStore; + if (storeType === 'prerender-client') { + const store = { + type: 'prerender-client', + phase: 'render', + rootParams, + fallbackRouteParams, + implicitTags, + renderSignal: initialClientRenderController.signal, + controller: initialClientPrerenderController, + // For HTML Generation the only cache tracked activity + // is module loading, which has it's own cache signal + cacheSignal: null, + dynamicTracking: null, + allowEmptyStaticShell, + revalidate: _constants1.INFINITE_CACHE, + expire: _constants1.INFINITE_CACHE, + stale: _constants1.INFINITE_CACHE, + tags: [ + ...implicitTags.tags + ], + // TODO should this be removed from client stores? + prerenderResumeDataCache: null, + renderResumeDataCache: null, + hmrRefreshHash: undefined, + // Client prerenders don't track server param access + varyParamsAccumulator: null + }; + initialClientPrerenderStore = store; + } else { + const store = { + type: 'validation-client', + phase: 'render', + rootParams, + implicitTags, + renderSignal: initialClientRenderController.signal, + controller: initialClientPrerenderController, + // For HTML Generation the only cache tracked activity + // is module loading, which has it's own cache signal + cacheSignal: null, + dynamicTracking: null, + revalidate: _constants1.INFINITE_CACHE, + expire: _constants1.INFINITE_CACHE, + stale: _constants1.INFINITE_CACHE, + tags: [ + ...implicitTags.tags + ], + // TODO should this be removed from client stores? + prerenderResumeDataCache: null, + renderResumeDataCache: null, + hmrRefreshHash: undefined, + // Client prerenders don't track server param access + varyParamsAccumulator: null, + // We're not rendering any validation boundaries yet. + boundaryState: null, + validationSamples, + validationSampleTracking, + fallbackRouteParams + }; + initialClientPrerenderStore = store; + } + // TODO: maybe conditionally switch between runtime chunks and all chunks? + // but warming too much should always be fine, just not always necessary + const serverStream = (0, _streamutils.createNodeStreamWithLateRelease)(partialServerChunks, allServerChunks, initialClientReactController.signal); + const pendingInitialClientResult = _workunitasyncstorageexternal.workUnitAsyncStorage.run(initialClientPrerenderStore, _streamops.getClientPrerender, // eslint-disable-next-line @next/internal/no-ambiguous-jsx -- React Client + /*#__PURE__*/ (0, _jsxruntime.jsx)(App, { + reactServerStream: serverStream, + reactDebugStream: undefined, + debugEndTime: undefined, + preinitScripts: preinitScripts, + ServerInsertedHTMLProvider: ServerInsertedHTMLProvider, + nonce: nonce, + images: ctx.renderOpts.images + }), { + signal: initialClientReactController.signal, + onError: (err)=>{ + const digest = (0, _createerrorhandler.getDigestForWellKnownError)(err); + if (digest) { + return digest; + } + if ((0, _reactlargeshellerror.isReactLargeShellError)(err)) { + // TODO: Aggregate + console.error(err); + return undefined; + } + if (initialClientReactController.signal.aborted) { + // These are expected errors that might error the prerender. we ignore them. + } else if (process.env.NEXT_DEBUG_BUILD || process.env.__NEXT_VERBOSE_LOGGING) { + // We don't normally log these errors because we are going to retry anyway but + // it can be useful for debugging Next.js itself to get visibility here when needed + (0, _prospectiverenderutils.printDebugThrownValueForProspectiveRender)(err, workStore.route, _prospectiverenderutils.Phase.ProspectiveRender); + } + } + }); + // The listener to abort our own render controller must be added after React + // has added its listener, to ensure that pending I/O is not + // aborted/rejected too early. + initialClientReactController.signal.addEventListener('abort', ()=>{ + initialClientRenderController.abort(); + }, { + once: true + }); + pendingInitialClientResult.catch((err)=>{ + if (initialClientReactController.signal.aborted || (0, _dynamicrendering.isPrerenderInterruptedError)(err)) { + // These are expected errors that might error the prerender. we ignore them. + } else if (process.env.NEXT_DEBUG_BUILD || process.env.__NEXT_VERBOSE_LOGGING) { + // We don't normally log these errors because we are going to retry anyway but + // it can be useful for debugging Next.js itself to get visibility here when needed + (0, _prospectiverenderutils.printDebugThrownValueForProspectiveRender)(err, workStore.route, _prospectiverenderutils.Phase.ProspectiveRender); + } + }); + // This is mostly needed for dynamic `import()`s in client components. + // Promises passed to client were already awaited above (assuming that they came from cached functions) + const cacheSignal = new _cachesignal.CacheSignal(); + (0, _trackmoduleloadingexternal.trackPendingModules)(cacheSignal); + await cacheSignal.cacheReady(); + initialClientReactController.abort(); +} +async function validateStagedShell(stageChunks, allServerChunks, debugChunks, debugEndTime, rootParams, fallbackRouteParams, allowEmptyStaticShell, ctx, hmrRefreshHash, trackDynamicHole) { + const { implicitTags, nonce, workStore } = ctx; + const clientDynamicTracking = (0, _dynamicrendering.createDynamicTrackingState)(false //isDebugDynamicAccesses + ); + const clientReactController = new AbortController(); + const clientRenderController = new AbortController(); + const preinitScripts = ()=>{}; + const { ServerInsertedHTMLProvider } = (0, _serverinsertedhtml.createServerInsertedHTML)(); + const finalClientPrerenderStore = { + type: 'prerender-client', + phase: 'render', + rootParams, + fallbackRouteParams, + implicitTags, + renderSignal: clientRenderController.signal, + controller: clientReactController, + // No APIs require a cacheSignal through the workUnitStore during the HTML prerender + cacheSignal: null, + dynamicTracking: clientDynamicTracking, + allowEmptyStaticShell, + revalidate: _constants1.INFINITE_CACHE, + expire: _constants1.INFINITE_CACHE, + stale: _constants1.INFINITE_CACHE, + tags: [ + ...implicitTags.tags + ], + // TODO should this be removed from client stores? + prerenderResumeDataCache: null, + renderResumeDataCache: null, + hmrRefreshHash, + // Client prerenders don't track server param access + varyParamsAccumulator: null + }; + const dynamicValidation = (0, _dynamicrendering.createDynamicValidationState)(); + const serverStream = (0, _streamutils.createNodeStreamWithLateRelease)(stageChunks, allServerChunks, clientReactController.signal); + const debugChannelClient = debugChunks ? (0, _streamutils.createNodeStreamWithLateRelease)(debugChunks, debugChunks, clientReactController.signal) : undefined; + try { + let { prelude: unprocessedPrelude } = await (0, _apprenderrenderutils.runInSequentialTasks)(()=>{ + const pendingFinalClientResult = _workunitasyncstorageexternal.workUnitAsyncStorage.run(finalClientPrerenderStore, _streamops.getClientPrerender, // eslint-disable-next-line @next/internal/no-ambiguous-jsx -- React Client + /*#__PURE__*/ (0, _jsxruntime.jsx)(App, { + reactServerStream: serverStream, + reactDebugStream: debugChannelClient, + debugEndTime: debugEndTime, + preinitScripts: preinitScripts, + ServerInsertedHTMLProvider: ServerInsertedHTMLProvider, + nonce: nonce, + images: ctx.renderOpts.images + }), { + signal: clientReactController.signal, + onError: (err, errorInfo)=>{ + if ((0, _dynamicrendering.isPrerenderInterruptedError)(err) || clientReactController.signal.aborted) { + const componentStack = errorInfo.componentStack; + if (typeof componentStack === 'string') { + trackDynamicHole(workStore, componentStack, dynamicValidation, clientDynamicTracking); + } + return; + } + if ((0, _reactlargeshellerror.isReactLargeShellError)(err)) { + // TODO: Aggregate + console.error(err); + return undefined; + } + return (0, _createerrorhandler.getDigestForWellKnownError)(err); + } + }); + // The listener to abort our own render controller must be added after + // React has added its listener, to ensure that pending I/O is not + // aborted/rejected too early. + clientReactController.signal.addEventListener('abort', ()=>{ + clientRenderController.abort(); + }, { + once: true + }); + return pendingFinalClientResult; + }, ()=>{ + clientReactController.abort(); + }); + const { preludeIsEmpty } = await (0, _streamops.processPrelude)(unprocessedPrelude); + return (0, _dynamicrendering.getStaticShellDisallowedDynamicReasons)(workStore, preludeIsEmpty ? _dynamicrendering.PreludeState.Empty : _dynamicrendering.PreludeState.Full, dynamicValidation, // TODO(instant-validation): if allowEmptyStaticShell is true (likely due to blocking configs), + // we should probably just skip this altogether + allowEmptyStaticShell); + } catch (thrownValue) { + // Even if the root errors we still want to report any cache components errors + // that were discovered before the root errored. + let errors = (0, _dynamicrendering.getStaticShellDisallowedDynamicReasons)(workStore, _dynamicrendering.PreludeState.Errored, dynamicValidation, // TODO(instant-validation): if allowEmptyStaticShell is true (likely due to blocking configs), + // we should probably just skip this altogether + allowEmptyStaticShell); + if (process.env.NEXT_DEBUG_BUILD || process.env.__NEXT_VERBOSE_LOGGING) { + errors.unshift('During dynamic validation the root of the page errored. The next logged error is the thrown value. It may be a duplicate of errors reported during the normal development mode render.', thrownValue); + } + return errors; + } +} +/** + * Validates instant configs by iterating URL depths from deepest to + * shallowest. At each depth, builds a combined payload where segments + * above the boundary use Dynamic stage (already mounted) and segments + * below use Static/Runtime stage (being prefetched). If the new subtree + * contains any `unstable_instant` configs, the payload is rendered to + * detect dynamic holes without Suspense. + */ async function validateInstantConfigs(accumulatedChunks, debugChunks, startTime, rootParams, fallbackRouteParams, ctx, hmrRefreshHash, validationSamples) { + const debug = process.env.NEXT_PRIVATE_DEBUG_VALIDATION === '1' ? console.log : undefined; + const { createCombinedPayloadAtDepth, createCombinedPayloadStream, collectStagedSegmentData, discoverValidationDepths } = ctx.componentMod.InstantValidation(); + const { createValidationSampleTracking } = require('./instant-validation/instant-samples'); + debug == null ? void 0 : debug('\nStarting depth-based instant validation...'); + const loaderTree = ctx.componentMod.routeModule.userland.loaderTree; + // Only affects a debug environment name label, not functional behavior. + const hasRuntimePrefetch = true; + const clientReferenceManifest = (0, _manifestssingleton.getClientReferenceManifest)(); + const { cache, payload: initialRscPayload, stageEndTimes } = await collectStagedSegmentData({ + [_stagedrendering.RenderStage.Static]: accumulatedChunks.staticChunks, + [_stagedrendering.RenderStage.Runtime]: accumulatedChunks.runtimeChunks, + [_stagedrendering.RenderStage.Dynamic]: accumulatedChunks.dynamicChunks + }, debugChunks, startTime, hasRuntimePrefetch, clientReferenceManifest); + const { implicitTags, nonce, workStore } = ctx; + const isDebugChannelEnabled = !!ctx.renderOpts.setReactDebugChannel; + /** + * Build and validate a combined payload at the given URL depth. + * + * Returns null if no instant config exists at this depth. + * Returns an empty array if validation passed. + * Returns a non-empty array of errors if validation failed. + * + * When the initial validation uses static segments and finds errors, + * automatically retries with runtime stages to discriminate between + * runtime and dynamic errors, returning the more specific result. + */ async function validateAtDepth(depth, groupDepthForValidation) { + return validateAtDepthImpl(depth, groupDepthForValidation, null); + } + async function validateAtDepthImpl(depth, groupDepthForValidation, previousBoundaryState) { + const extraChunksController = new AbortController(); + const boundaryState = (0, _boundarytracking.createValidationBoundaryTracking)(); + let useRuntimeStageForPartialSegments = false; + if (previousBoundaryState) { + // We're doing a followup render to better discriminate error types + useRuntimeStageForPartialSegments = true; + for (const id of previousBoundaryState.expectedIds){ + boundaryState.expectedIds.add(id); + } + } + const payloadResult = await createCombinedPayloadAtDepth(initialRscPayload, cache, loaderTree, ctx.getDynamicParamFromSegment, ctx.query, depth, groupDepthForValidation, extraChunksController.signal, boundaryState, clientReferenceManifest, stageEndTimes, useRuntimeStageForPartialSegments); + if (payloadResult === null) { + return null; + } + const reactController = new AbortController(); + const renderController = new AbortController(); + const preinitScripts = ()=>{}; + const { ServerInsertedHTMLProvider } = (0, _serverinsertedhtml.createServerInsertedHTML)(); + const { stream: serverStream, debugStream } = await createCombinedPayloadStream(payloadResult.payload, extraChunksController, reactController.signal, clientReferenceManifest, startTime, isDebugChannelEnabled); + const instantValidationState = (0, _dynamicrendering.createInstantValidationState)(payloadResult.createInstantStack); + const validationSampleTracking = validationSamples !== null ? createValidationSampleTracking() : null; + const clientDynamicTracking = (0, _dynamicrendering.createDynamicTrackingState)(false); + const prerenderStore = { + type: 'validation-client', + phase: 'render', + rootParams, + implicitTags, + renderSignal: renderController.signal, + controller: reactController, + cacheSignal: null, + dynamicTracking: clientDynamicTracking, + revalidate: _constants1.INFINITE_CACHE, + expire: _constants1.INFINITE_CACHE, + stale: _constants1.INFINITE_CACHE, + tags: [ + ...implicitTags.tags + ], + prerenderResumeDataCache: null, + renderResumeDataCache: null, + hmrRefreshHash, + varyParamsAccumulator: null, + boundaryState, + fallbackRouteParams, + validationSamples, + validationSampleTracking + }; + let errors; + try { + const { prelude: unprocessedPrelude } = await (0, _apprenderrenderutils.runInSequentialTasks)(()=>{ + const pendingResult = _workunitasyncstorageexternal.workUnitAsyncStorage.run(prerenderStore, _streamops.getClientPrerender, // eslint-disable-next-line @next/internal/no-ambiguous-jsx -- React Client + /*#__PURE__*/ (0, _jsxruntime.jsx)(App, { + reactServerStream: serverStream, + reactDebugStream: debugStream ?? undefined, + debugEndTime: undefined, + preinitScripts: preinitScripts, + ServerInsertedHTMLProvider: ServerInsertedHTMLProvider, + nonce: nonce, + images: ctx.renderOpts.images + }), { + signal: reactController.signal, + onError: (err, errorInfo)=>{ + if ((0, _dynamicrendering.isPrerenderInterruptedError)(err) || reactController.signal.aborted) { + const componentStack = errorInfo.componentStack; + if (typeof componentStack === 'string') { + (0, _dynamicrendering.trackDynamicHoleInNavigation)(workStore, componentStack, instantValidationState, clientDynamicTracking, payloadResult.hasAmbiguousErrors ? _dynamicrendering.DynamicHoleKind.Runtime : _dynamicrendering.DynamicHoleKind.Dynamic, boundaryState); + } + return; + } else if (!reactController.signal.aborted) { + const componentStack = errorInfo.componentStack; + if (typeof componentStack === 'string') { + let errorForDisplay = err; + if (process.env.NODE_ENV === 'production') { + // In production (i.e. build validation), Flight omits everything except the digest + // when serializing errors, which makes them very unfriendly for debugging. + // Map the deserialized errors back to their original error object to make it more useful. + if (err && typeof err === 'object' && 'digest' in err && typeof err.digest === 'string') { + const serverError = workStore.reactServerErrorsByDigest.get(err.digest); + if (serverError !== undefined) { + errorForDisplay = serverError; + } + } + } + (0, _dynamicrendering.trackThrownErrorInNavigation)(workStore, instantValidationState, errorForDisplay, componentStack); + } + } + if ((0, _reactlargeshellerror.isReactLargeShellError)(err)) { + console.error(err); + return undefined; + } + return (0, _createerrorhandler.getDigestForWellKnownError)(err); + } + }); + reactController.signal.addEventListener('abort', ()=>{ + renderController.abort(); + }, { + once: true + }); + return pendingResult; + }, ()=>{ + reactController.abort(); + }); + const { preludeIsEmpty } = await (0, _streamops.processPrelude)(unprocessedPrelude); + errors = (0, _dynamicrendering.getNavigationDisallowedDynamicReasons)(workStore, preludeIsEmpty ? _dynamicrendering.PreludeState.Empty : _dynamicrendering.PreludeState.Full, instantValidationState, validationSampleTracking, boundaryState); + } catch (thrownValue) { + errors = (0, _dynamicrendering.getNavigationDisallowedDynamicReasons)(workStore, _dynamicrendering.PreludeState.Errored, instantValidationState, validationSampleTracking, boundaryState); + } + // This prerender did not produce any errors + if (errors.length === 0) { + return []; + } + if (previousBoundaryState === null && payloadResult.hasAmbiguousErrors) { + // This is the first validation attempt. we prepared a payload where dynamic holes might be runtime data dependencies + // or dynamic data dependencies. We do a followup validation using a payload with only Runtime segments to discriminate + const dynamicOnlyErrors = await validateAtDepthImpl(depth, groupDepthForValidation, boundaryState); + if (dynamicOnlyErrors !== null && dynamicOnlyErrors.length > 0) { + // The dynamic errors only validation found errors to report so we favor those + return dynamicOnlyErrors; + } + } + // If we didn't return some other errors at this point the only thing to return is this validation's errors + return errors; + } + // Discover validation depth bounds from the LoaderTree. The array + // length is the max URL depth; each entry is the max group depth + // (route group segments) between that URL depth and the next. + const groupDepthsByUrlDepth = discoverValidationDepths(loaderTree); + const maxDepth = groupDepthsByUrlDepth.length; + for(let depth = maxDepth - 1; depth >= 0; depth--){ + const maxGroupDepth = groupDepthsByUrlDepth[depth]; + for(let currentGroupDepth = maxGroupDepth; currentGroupDepth >= 0; currentGroupDepth--){ + debug == null ? void 0 : debug(`Trying depth ${depth}` + (currentGroupDepth > 0 ? ` + groupDepth ${currentGroupDepth}...` : '...')); + const errors = await validateAtDepth(depth, currentGroupDepth); + if (errors === null) { + debug == null ? void 0 : debug(` No config at depth ${depth}+${currentGroupDepth}, skipping.`); + continue; + } + if (errors.length > 0) { + debug == null ? void 0 : debug(` Depth ${depth}+${currentGroupDepth}: ❌ Failed (${errors.length} errors)`); + return errors; + } + debug == null ? void 0 : debug(` Depth ${depth}+${currentGroupDepth}: ✅ Passed`); + } + } + debug == null ? void 0 : debug(`✅ All depths passed`); + return []; +} +/** + * Two-pass render for build-time instant validation. + * The flow is similar to `renderWithRestartOnCacheMissInDev`: pass 1 warms caches, + * pass 2 renders with warm caches. If pass 1 has no cache misses, + * its result is returned directly. + * + * Differences from `renderWithRestartOnCacheMissInDev`: + * - both renders are abortable: if we know that we can't use a stream, we can just + * throw it away, we don't have to render a complete result. + * - We don't need to tee the stream, we only care about accumulating chunks. + */ async function renderWithRestartOnCacheMissInValidation(ctx, initialRequestStore, createRequestStore, getPayload, createOnError, prefilledDataCache) { + const { componentMod: ComponentMod } = ctx; + const { clientModules } = (0, _manifestssingleton.getClientReferenceManifest)(); + let startTime = -Infinity; + let requestStore = initialRequestStore; + //=============================================== + // Initial render (prospective — may warm caches) + //=============================================== + const cacheSignal = new _cachesignal.CacheSignal(); + (0, _trackmoduleloadingexternal.trackPendingModules)(cacheSignal); + // The prerender we rean before the validation probably already filled some caches, + // so we want to save work and re-use them. + const prerenderResumeDataCache = prefilledDataCache ? (0, _resumedatacache.createPrerenderResumeDataCache)(prefilledDataCache) : (0, _resumedatacache.createPrerenderResumeDataCache)(); + const initialReactController = new AbortController(); + const initialDataController = new AbortController(); + const initialAbandonController = new AbortController(); + const initialStageController = new _stagedrendering.StagedRenderingController(initialDataController.signal, initialAbandonController, true // track sync IO + ); + requestStore.prerenderResumeDataCache = prerenderResumeDataCache; + requestStore.renderResumeDataCache = null; + requestStore.stagedRendering = initialStageController; + requestStore.cacheSignal = cacheSignal; + requestStore.asyncApiPromises = createAsyncApiPromises(initialStageController, requestStore.cookies, requestStore.mutableCookies, requestStore.headers); + // We don't set `requestStore.controller and requestStore.renderSignal here. + // Right now, we only abort for sync IO, and in the first render, that's just a restart + // (after waiting for caches) + requestStore.controller = undefined; + requestStore.renderSignal = undefined; + const initialRscPayload = await getPayload(requestStore); + const advanceStageIfNoCacheMiss = (stage)=>{ + if (initialAbandonController.signal.aborted === true) { + return; + } else if (cacheSignal.hasPendingReads()) { + initialAbandonController.abort(); + } else { + initialStageController.advanceStage(stage); + } + }; + const initialResult = await (0, _apprenderrenderutils.runInSequentialTasks)(()=>{ + initialStageController.advanceStage(_stagedrendering.RenderStage.EarlyStatic); + startTime = performance.now() + performance.timeOrigin; + const stream = _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, _streamops.renderToFlightStream, ComponentMod, initialRscPayload, clientModules, { + onError: createOnError(initialReactController.signal, false), + startTime, + filterStackFrame, + signal: initialReactController.signal + }); + initialReactController.signal.addEventListener('abort', ()=>{ + const { reason } = initialReactController.signal; + initialDataController.abort(reason); + }, { + once: true + }); + const accumulatedChunksPromise = accumulateStreamChunks(stream, initialStageController, initialDataController.signal); + accumulatedChunksPromise.catch(()=>{}); + return { + accumulatedChunksPromise + }; + }, ()=>{ + advanceStageIfNoCacheMiss(_stagedrendering.RenderStage.Static); + }, ()=>{ + advanceStageIfNoCacheMiss(_stagedrendering.RenderStage.EarlyRuntime); + }, ()=>{ + advanceStageIfNoCacheMiss(_stagedrendering.RenderStage.Runtime); + }, ()=>{ + advanceStageIfNoCacheMiss(_stagedrendering.RenderStage.Dynamic); + }); + if (initialStageController.currentStage !== _stagedrendering.RenderStage.Abandoned) { + // No cache misses. Use the result as-is. + return { + accumulatedChunksPromise: initialResult.accumulatedChunksPromise, + startTime, + stageController: initialStageController, + requestStore + }; + } + // Cache miss. Wait for caches to fill, then re-render with warm caches. + await cacheSignal.cacheReady(); + initialReactController.abort(); + //=============================================== + // Final render (restarted, with warm caches) + //=============================================== + requestStore = createRequestStore(); + // Unlike dev, where we're re-using the render that'll be visible in the browser, + // we *can* abort the validation render. + const finalReactController = new AbortController(); + const finalDataController = new AbortController(); + const finalStageController = new _stagedrendering.StagedRenderingController(finalDataController.signal, null, true // track sync IO + ); + requestStore.prerenderResumeDataCache = null; + requestStore.renderResumeDataCache = (0, _resumedatacache.createRenderResumeDataCache)(prerenderResumeDataCache); + requestStore.stagedRendering = finalStageController; + requestStore.cacheSignal = null; + requestStore.asyncApiPromises = createAsyncApiPromises(finalStageController, requestStore.cookies, requestStore.mutableCookies, requestStore.headers); + // Right now, we only abort for sync IO. + // If sync IO occurs in a place where it's not allowed, then we have to fail validation, + // and we can abort the render immediately, without waiting for anything else.. + requestStore.controller = finalReactController; + requestStore.renderSignal = finalDataController.signal; + const finalRscPayload = await getPayload(requestStore); + const finalResult = await (0, _apprenderrenderutils.runInSequentialTasks)(()=>{ + finalStageController.advanceStage(_stagedrendering.RenderStage.EarlyStatic); + startTime = performance.now() + performance.timeOrigin; + const stream = _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, _streamops.renderToFlightStream, ComponentMod, finalRscPayload, clientModules, { + onError: createOnError(finalReactController.signal, true), + startTime, + filterStackFrame, + signal: finalReactController.signal + }); + finalReactController.signal.addEventListener('abort', ()=>{ + finalDataController.abort(finalReactController.signal.reason); + }, { + once: true + }); + const accumulatedChunksPromise = accumulateStreamChunks(stream, finalStageController, null); + accumulatedChunksPromise.catch(()=>{}); + return { + accumulatedChunksPromise + }; + }, ()=>{ + finalStageController.advanceStage(_stagedrendering.RenderStage.Static); + }, ()=>{ + finalStageController.advanceStage(_stagedrendering.RenderStage.EarlyRuntime); + }, ()=>{ + finalStageController.advanceStage(_stagedrendering.RenderStage.Runtime); + }, ()=>{ + finalStageController.advanceStage(_stagedrendering.RenderStage.Dynamic); + }); + return { + accumulatedChunksPromise: finalResult.accumulatedChunksPromise, + startTime, + stageController: finalStageController, + requestStore + }; +} +async function validateInstantConfigsInBuild(ctx, prefilledDataCache) { + const run = async ()=>{ + let success; + try { + // The validation renders are separate renders, and use a separate WorkStore. + // However, we defensively exit the existing workStore to avoid relying on something from there + // before we shadow it. + success = await _workasyncstorageexternal.workAsyncStorage.exit(async ()=>validateInstantConfigsInBuildImpl(ctx, prefilledDataCache)); + } catch (err) { + console.error(Object.defineProperty(new _invarianterror.InvariantError('An unexpected error occcured during instant validation', { + cause: err + }), "__NEXT_ERROR_CODE", { + value: "E1097", + enumerable: false, + configurable: true + })); + success = false; + } + if (!success) { + console.error('Stopping prerender due to instant validation errors.'); + throw new _staticgenerationbailout.StaticGenBailoutError(); + } + }; + if (process.env.__NEXT_TEST_MODE && process.env.NEXT_TEST_LOG_VALIDATION) { + // In tests, we use these markers to extract the relevant portion of the CLI logs. + // We want consistent ordering of these messages and other console.error calls, + // so we use console.error here as well. Using console.log leads to non-deterministic + // log order, likely stdout/stderr can interleave in non-deterministic ways. + const requestId = Date.now(); + const route = ctx.workStore.route; + console.error('' + JSON.stringify({ + type: 'validation_start', + requestId, + url: route + }) + ''); + try { + return await run(); + } finally{ + console.error('' + JSON.stringify({ + type: 'validation_end', + requestId, + url: route + }) + ''); + } + } else { + return await run(); + } +} +/** + * Runs instant validation at build time using the `samples` from `unstable_instant`. + * + * For each sample, this creates a staged RSC render with a synthetic `RequestStore` + * populated from sample data, then feeds the accumulated chunks to + * `validateInstantConfigs` which handles the actual validation. + */ async function validateInstantConfigsInBuildImpl(ctx, prefilledDataCache) { + const debug = process.env.NEXT_PRIVATE_DEBUG_VALIDATION === '1' ? console.log : undefined; + const { workStore: outerWorkStore } = ctx; + const route = outerWorkStore.route; + const loaderTree = ctx.componentMod.routeModule.userland.loaderTree; + let samples = await (0, _instantconfig.resolveInstantConfigSamplesForPage)(loaderTree); + if (!samples || samples.length === 0) { + // No samples defined; use a single empty sample to still run validation + samples = [ + {} + ]; + } + debug == null ? void 0 : debug('Resolved samples:', samples); + const allPossibleFallbackRouteParams = (0, _fallbackparams.getFallbackRouteParams)(route, ctx.componentMod.routeModule); + for(let sampleIndex = 0; sampleIndex < samples.length; sampleIndex++){ + const sample = samples[sampleIndex]; + debug == null ? void 0 : debug(`Validating sample (${sampleIndex + 1}/${samples.length}):`, sample); + let errors; + try { + errors = await _consoleasyncstorageexternal.consoleAsyncStorage.run({ + dim: true + }, ()=>validateInstantConfigInBuildWithSample(ctx, sample, allPossibleFallbackRouteParams, prefilledDataCache)); + } catch (err) { + if ((0, _instantvalidationerror.isInstantValidationError)(err)) { + errors = [ + err + ]; + } else { + throw err; + } + } + if (errors.length > 0) { + debug == null ? void 0 : debug(`❌ Sample failed validation (${errors.length} errors)`); + const sampleDesc = samples.length > 1 ? ` (sample ${sampleIndex + 1} of ${samples.length})` : ''; + for (const err of errors){ + console.error(err); + } + console.error(`Build-time instant validation failed for route "${route}"${sampleDesc}.`); + return false; + } else { + debug == null ? void 0 : debug('✅ Sample validated successfully'); + } + } + return true; +} +async function validateInstantConfigInBuildWithSample(outerCtx, sample, allPossibleFallbackRouteParams, prefilledDataCache) { + // The flow for build mirrors what we do when validating in dev. + // We have to perform a full dynamic render to get the RSC chunks for each stage. + // In order to do that, we have to set up a mock AppRenderContext, workStore, and requestStore + // based on the `sample` we're using. + const { workStore: outerWorkStore } = outerCtx; + const loaderTree = outerCtx.componentMod.routeModule.userland.loaderTree; + const route = outerWorkStore.route; + const { createCookiesFromSample, createHeadersFromSample, createDraftModeForValidation, createRelativeURLFromSamples, createValidationSampleTracking } = require('./instant-validation/instant-samples'); + // TODO(instant-validation-build): it feels like this should happen higher up + // and go through existing URL parsing/generation logic? + const sampleUrl = createRelativeURLFromSamples(route, sample.params, sample.searchParams); + const sampleParams = sample.params ?? {}; + let fallbackRouteParams = null; + if (allPossibleFallbackRouteParams) { + const fallbackRouteParamsMut = new Map(); + for (const [paramKey, value] of allPossibleFallbackRouteParams){ + if (!(paramKey in sampleParams)) { + fallbackRouteParamsMut.set(paramKey, value); + } + } + fallbackRouteParams = fallbackRouteParamsMut; + } + const getDynamicParamFromSegment = makeGetDynamicParamFromSegment(sampleParams, fallbackRouteParams, false); + const sampleRootParams = (0, _createcomponenttree.getRootParams)(loaderTree, getDynamicParamFromSegment); + let sampleUrlWithoutQuery; + let sampleQuery; + ({ query: sampleQuery, ...sampleUrlWithoutQuery } = sampleUrl); + const { AfterContext } = require('../after/after-context'); + // NOTE: Matching the field order in `createWorkStore` to avoid deopting. + const workStore = { + isStaticGeneration: false, + page: outerWorkStore.page, + route: outerWorkStore.route, + incrementalCache: outerWorkStore.incrementalCache, + cacheLifeProfiles: outerWorkStore.cacheLifeProfiles, + isBuildTimePrerendering: false, + fetchCache: outerWorkStore.fetchCache, + isOnDemandRevalidate: false, + isDraftMode: false, + isPrefetchRequest: false, + buildId: outerWorkStore.buildId, + deploymentId: outerWorkStore.deploymentId, + reactLoadableManifest: outerWorkStore.reactLoadableManifest, + assetPrefix: outerWorkStore.assetPrefix, + nonce: outerWorkStore.nonce, + // Never run `after()` for this validation render. by definition, `after` can't affect the rendered output. + afterContext: new AfterContext({ + waitUntil (promise) { + promise.catch(()=>{}); + }, + onClose () {}, + onTaskError () {} + }), + cacheComponentsEnabled: outerWorkStore.cacheComponentsEnabled, + previouslyRevalidatedTags: [], + refreshTagsByCacheKind: new Map(), + runInCleanSnapshot: outerWorkStore.runInCleanSnapshot, + shouldTrackFetchMetrics: false, + reactServerErrorsByDigest: new Map() + }; + return _workasyncstorageexternal.workAsyncStorage.run(workStore, async ()=>{ + // NOTE: match field order in renderToHTMLOrFlightImpl to avoid deopts + const validationCtx = { + componentMod: outerCtx.componentMod, + url: sampleUrlWithoutQuery, + renderOpts: outerCtx.renderOpts, + workStore, + parsedRequestHeaders: outerCtx.parsedRequestHeaders, + getDynamicParamFromSegment, + interpolatedParams: sampleParams, + query: sampleQuery, + isPrefetch: false, + isPossibleServerAction: false, + requestTimestamp: outerCtx.requestTimestamp, + appUsingSizeAdjustment: outerCtx.appUsingSizeAdjustment, + flightRouterState: undefined, + requestId: outerCtx.requestId, + htmlRequestId: outerCtx.htmlRequestId, + pagePath: outerCtx.pagePath, + assetPrefix: outerCtx.assetPrefix, + isNotFoundPath: outerCtx.isNotFoundPath, + nonce: outerCtx.nonce, + res: outerCtx.res, + sharedContext: outerCtx.sharedContext, + implicitTags: outerCtx.implicitTags + }; + const validationSamples = { + params: sample.params, + searchParams: sample.searchParams + }; + const createRequestStore = ()=>{ + // Create exhaustive request data from sample + const sampleCookies = createCookiesFromSample(sample.cookies, route); + // We don't have to bother initializing these, pages can't access them anyway, + // we just need them because RequestStore requires them. + const unusedMutableCookies = new _cookies.ResponseCookies(new Headers()); + // Create headers. + const sampleHeaders = createHeadersFromSample(sample.headers, sample.cookies, route); + const draftMode = createDraftModeForValidation(); + return { + type: 'request', + phase: 'render', + implicitTags: outerCtx.implicitTags, + url: { + pathname: sampleUrl.pathname, + search: sampleUrl.search + }, + headers: sampleHeaders, + cookies: sampleCookies, + mutableCookies: unusedMutableCookies, + userspaceMutableCookies: unusedMutableCookies, + draftMode, + rootParams: sampleRootParams, + validationSamples, + validationSampleTracking: createValidationSampleTracking(), + // These will be set when rendering + renderResumeDataCache: null, + prerenderResumeDataCache: null, + stagedRendering: null, + asyncApiPromises: undefined + }; + }; + // Track server errors. If one of them surfaces during the client render + // in the deserialized form (with no message/stack) we'll use this to map it + // back to the original. + const onServerError = (0, _createerrorhandler.createReactServerErrorHandler)(true, true, workStore.reactServerErrorsByDigest, ()=>{} // Don't report anything here. If needed, it will be reported in the client render. + ); + const { accumulatedChunksPromise, startTime, stageController, requestStore: finalServerStore } = await renderWithRestartOnCacheMissInValidation(validationCtx, createRequestStore(), createRequestStore, (requestStore)=>_workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, getRSCPayload, loaderTree, validationCtx, { + is404: false + }), (signal)=>function onError(err) { + const digest = (0, _createerrorhandler.getDigestForWellKnownError)(err); + if (digest) { + return digest; + } + if (signal.aborted) { + return; + } + return onServerError(err); + }, prefilledDataCache); + const accumulatedChunks = await accumulatedChunksPromise; + const debugChunks = null // TODO(instant-validation-build): support debugChannel + ; + // Missing sample errors take priority over everything else, + // because they prevent us from rendering everything we need to validate. + const serverValidationSampleTracking = finalServerStore.validationSampleTracking; + if (serverValidationSampleTracking.missingSampleErrors.length > 0) { + return serverValidationSampleTracking.missingSampleErrors; + } + // We also error for sync IO. This runs after the prerender, + // so if we get sync IO errors here, they're likely from the runtime stage -- + // the prerender probably discovered sync IO in the static stage + if (stageController.currentStage === _stagedrendering.RenderStage.Abandoned && stageController.syncInterruptReason) { + return [ + stageController.syncInterruptReason + ]; + } + const allowEmptyStaticShell = (validationCtx.renderOpts.allowEmptyStaticShell ?? false) || await (0, _instantconfig.isPageAllowedToBlock)(loaderTree); + // Now we the chunks of a fully rendered page, just like in dev. + // We can use them to validate all the navigations required by `instant` configs. + // Note that we're not performing static shell validation here -- that happens + // implicitly as part of the static prerender. + // The static prerender has warmed some client modules already, + // but we'll be reaching Runtime/Dynamic stages and thus rendering more content, + // so we need to warm again. + // TODO(instant-validation-build): This might warm too much, possibly hitting errors on code that didn't expect + // to run at build time. For example, we generally don't need to render leaf segments (e.g. __PAGE__) in + // the Dynamic stage, they're Runtime at best. + const warmupValidationSamplesTracking = createValidationSampleTracking(); + await warmupClientModulesForStagedValidation('validation-client', accumulatedChunks.dynamicChunks, accumulatedChunks.dynamicChunks, sampleRootParams, fallbackRouteParams, allowEmptyStaticShell, validationCtx, validationSamples, warmupValidationSamplesTracking); + if (warmupValidationSamplesTracking.missingSampleErrors.length > 0) { + return warmupValidationSamplesTracking.missingSampleErrors; + } + return await validateInstantConfigs(accumulatedChunks, debugChunks, startTime, sampleRootParams, fallbackRouteParams, validationCtx, undefined, validationSamples); + }); +} +/** + * Determines whether we should generate static flight data. + */ function shouldGenerateStaticFlightData(workStore) { + const { isStaticGeneration } = workStore; + if (!isStaticGeneration) return false; + return true; +} +async function prerenderToStream(req, res, ctx, metadata, tree, fallbackRouteParams) { + // When prerendering formState is always null. We still include it + // because some shared APIs expect a formState value and this is slightly + // more explicit than making it an optional function argument + const formState = null; + const { assetPrefix, getDynamicParamFromSegment, implicitTags, nonce, pagePath, renderOpts, workStore } = ctx; + const { basePath, buildManifest, ComponentMod, crossOrigin, experimental, isDebugDynamicAccesses, isBuildTimePrerendering = false, onInstrumentationRequestError, page, reactMaxHeadersLength, subresourceIntegrityManifest, cacheComponents } = renderOpts; + const { cachedNavigations } = renderOpts.experimental; + const allowEmptyStaticShell = (renderOpts.allowEmptyStaticShell ?? false) || await (0, _instantconfig.isPageAllowedToBlock)(tree); + const rootParams = (0, _createcomponenttree.getRootParams)(tree, getDynamicParamFromSegment); + const { ServerInsertedHTMLProvider, renderServerInsertedHTML } = (0, _serverinsertedhtml.createServerInsertedHTML)(); + const getServerInsertedMetadata = (0, _createserverinsertedmetadata.createServerInsertedMetadata)(nonce); + const tracingMetadata = (0, _utils1.getTracedMetadata)((0, _tracer.getTracer)().getTracePropagationData(), experimental.clientTraceMetadata); + const polyfills = buildManifest.polyfillFiles.filter((polyfill)=>polyfill.endsWith('.js') && !polyfill.endsWith('.module.js')).map((polyfill)=>({ + src: `${assetPrefix}/_next/${polyfill}${(0, _getassetquerystring.getAssetQueryString)(ctx, false)}`, + integrity: subresourceIntegrityManifest == null ? void 0 : subresourceIntegrityManifest[polyfill], + crossOrigin, + noModule: true, + nonce + })); + const [preinitScripts, bootstrapScript] = (0, _requiredscripts.getRequiredScripts)(buildManifest, // Why is assetPrefix optional on renderOpts? + // @TODO make it default empty string on renderOpts and get rid of it from ctx + assetPrefix, crossOrigin, subresourceIntegrityManifest, (0, _getassetquerystring.getAssetQueryString)(ctx, true), nonce, page); + const { reactServerErrorsByDigest } = workStore; + // We don't report errors during prerendering through our instrumentation hooks + const reportErrors = !experimental.isRoutePPREnabled; + function onHTMLRenderRSCError(err, silenceLog) { + if (reportErrors) { + return onInstrumentationRequestError == null ? void 0 : onInstrumentationRequestError(err, req, createErrorContext(ctx, 'react-server-components'), silenceLog); + } + } + const serverComponentsErrorHandler = (0, _createerrorhandler.createReactServerErrorHandler)(process.env.NODE_ENV === 'development', isBuildTimePrerendering, reactServerErrorsByDigest, onHTMLRenderRSCError); + function onHTMLRenderSSRError(err) { + if (reportErrors) { + // We don't need to silence logs here. onHTMLRenderSSRError won't be + // called at all if the error was logged before in the RSC error handler. + const silenceLog = false; + return onInstrumentationRequestError == null ? void 0 : onInstrumentationRequestError(err, req, createErrorContext(ctx, 'server-rendering'), silenceLog); + } + } + const allCapturedErrors = []; + const htmlRendererErrorHandler = (0, _createerrorhandler.createHTMLErrorHandler)(process.env.NODE_ENV === 'development', isBuildTimePrerendering, reactServerErrorsByDigest, allCapturedErrors, onHTMLRenderSSRError); + let reactServerPrerenderResult = null; + const setMetadataHeader = (name)=>{ + metadata.headers ??= {}; + metadata.headers[name] = res.getHeader(name); + }; + const setHeader = (name, value)=>{ + res.setHeader(name, value); + setMetadataHeader(name); + return res; + }; + const appendHeader = (name, value)=>{ + if (Array.isArray(value)) { + value.forEach((item)=>{ + res.appendHeader(name, item); + }); + } else { + res.appendHeader(name, value); + } + setMetadataHeader(name); + }; + const selectStaleTime = (0, _staletime.createSelectStaleTime)(experimental); + const { clientModules } = (0, _manifestssingleton.getClientReferenceManifest)(); + let prerenderStore = null; + try { + if (cacheComponents) { + /** + * cacheComponents with PPR + * + * The general approach is to render the RSC stream first allowing any cache reads to resolve. + * Once we have settled all cache reads we restart the render and abort after a single Task. + * + * Unlike with the non PPR case we can't synchronously abort the render when a dynamic API is used + * during the initial render because we need to ensure all caches can be filled as part of the initial Task + * and a synchronous abort might prevent us from filling all caches. + * + * Once the render is complete we allow the SSR render to finish and use a combination of the postponed state + * and the reactServerIsDynamic value to determine how to treat the resulting render + */ // The prerender controller represents the lifetime of the prerender. It + // will be aborted when a task is complete or a synchronously aborting API + // is called. Notably, during prospective prerenders, this does not + // actually terminate the prerender itself, which will continue until all + // caches are filled. + const initialServerPrerenderController = new AbortController(); + // This controller is used to abort the React prerender. + const initialServerReactController = new AbortController(); + // This controller represents the lifetime of the React prerender. Its + // signal can be used for any I/O operation to abort the I/O and/or to + // reject, when prerendering aborts. This includes our own hanging + // promises for accessing request data, and for fetch calls. It might be + // replaced in the future by React.cacheSignal(). It's aborted after the + // React controller, so that no pending I/O can register abort listeners + // that are called before React's abort listener is called. This ensures + // that pending I/O is not rejected too early when aborting the prerender. + // Notably, during the prospective prerender, it is different from the + // prerender controller because we don't want to end the React prerender + // until all caches are filled. + const initialServerRenderController = new AbortController(); + // The cacheSignal helps us track whether caches are still filling or we are ready + // to cut the render off. + const cacheSignal = new _cachesignal.CacheSignal(); + // Always start with a fresh prerender RDC so warmup can fill misses, + // even when we have a prefilled render RDC to seed from. + const prerenderResumeDataCache = (0, _resumedatacache.createPrerenderResumeDataCache)(); + let renderResumeDataCache = renderOpts.renderResumeDataCache ?? null; + const initialServerPayloadPrerenderStore = { + type: 'prerender', + phase: 'render', + rootParams, + fallbackRouteParams, + implicitTags, + // While this render signal isn't going to be used to abort a React render while getting the RSC payload + // various request data APIs bind to this controller to reject after completion. + renderSignal: initialServerRenderController.signal, + // When we generate the RSC payload we might abort this controller due to sync IO + // but we don't actually care about sync IO in this phase so we use a throw away controller + // that isn't connected to anything + controller: new AbortController(), + // During the initial prerender we need to track all cache reads to ensure + // we render long enough to fill every cache it is possible to visit during + // the final prerender. + cacheSignal, + dynamicTracking: null, + allowEmptyStaticShell, + revalidate: _constants1.INFINITE_CACHE, + expire: _constants1.INFINITE_CACHE, + stale: _constants1.INFINITE_CACHE, + tags: [ + ...implicitTags.tags + ], + prerenderResumeDataCache, + renderResumeDataCache, + hmrRefreshHash: undefined, + // We don't track vary params during initial prerender, only the final one + varyParamsAccumulator: null + }; + // We're not going to use the result of this render because the only time it could be used + // is if it completes in a microtask and that's likely very rare for any non-trivial app + const initialServerPayload = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(initialServerPayloadPrerenderStore, getRSCPayload, tree, ctx, { + is404: res.statusCode === 404 + }); + const initialServerPrerenderStore = prerenderStore = { + type: 'prerender', + phase: 'render', + rootParams, + fallbackRouteParams, + implicitTags, + renderSignal: initialServerRenderController.signal, + controller: initialServerPrerenderController, + // During the initial prerender we need to track all cache reads to ensure + // we render long enough to fill every cache it is possible to visit during + // the final prerender. + cacheSignal, + dynamicTracking: null, + allowEmptyStaticShell, + revalidate: _constants1.INFINITE_CACHE, + expire: _constants1.INFINITE_CACHE, + stale: _constants1.INFINITE_CACHE, + tags: [ + ...implicitTags.tags + ], + prerenderResumeDataCache, + renderResumeDataCache, + hmrRefreshHash: undefined, + // We don't track vary params during initial prerender, only the final one + varyParamsAccumulator: null + }; + const initialPrerenderOptions = { + filterStackFrame, + onError: (err)=>{ + const digest = (0, _createerrorhandler.getDigestForWellKnownError)(err); + if (digest) { + return digest; + } + if ((0, _reactlargeshellerror.isReactLargeShellError)(err)) { + // TODO: Aggregate + console.error(err); + return undefined; + } + if (initialServerPrerenderController.signal.aborted) { + // The render aborted before this error was handled which indicates + // the error is caused by unfinished components within the render + return; + } else if (process.env.NEXT_DEBUG_BUILD || process.env.__NEXT_VERBOSE_LOGGING) { + (0, _prospectiverenderutils.printDebugThrownValueForProspectiveRender)(err, workStore.route, _prospectiverenderutils.Phase.ProspectiveRender); + } + }, + // We don't want to stop rendering until the cacheSignal is complete so we pass + // a different signal to this render call than is used by dynamic APIs to signify + // transitioning out of the prerender environment + signal: initialServerReactController.signal + }; + const pendingInitialServerResult = _workunitasyncstorageexternal.workUnitAsyncStorage.run(initialServerPrerenderStore, (0, _streamops.getServerPrerender)(ComponentMod), initialServerPayload, clientModules, initialPrerenderOptions); + // The listener to abort our own render controller must be added after + // React has added its listener, to ensure that pending I/O is not + // aborted/rejected too early. + initialServerReactController.signal.addEventListener('abort', ()=>{ + initialServerRenderController.abort(); + initialServerPrerenderController.abort(); + }, { + once: true + }); + // Wait for all caches to be finished filling and for async imports to resolve + (0, _trackmoduleloadingexternal.trackPendingModules)(cacheSignal); + await cacheSignal.cacheReady(); + initialServerReactController.abort(); + // We don't need to continue the prerender process if we already + // detected invalid dynamic usage in the initial prerender phase. + if (workStore.invalidDynamicUsageError) { + (0, _dynamicrendering.logDisallowedDynamicError)(workStore, workStore.invalidDynamicUsageError); + throw new _staticgenerationbailout.StaticGenBailoutError(); + } + let initialServerResult; + try { + initialServerResult = await (0, _apprenderprerenderutils.createReactServerPrerenderResult)(pendingInitialServerResult); + } catch (err) { + if (initialServerReactController.signal.aborted || initialServerPrerenderController.signal.aborted) { + // These are expected errors that might error the prerender. we ignore them. + } else if (process.env.NEXT_DEBUG_BUILD || process.env.__NEXT_VERBOSE_LOGGING) { + // We don't normally log these errors because we are going to retry anyway but + // it can be useful for debugging Next.js itself to get visibility here when needed + (0, _prospectiverenderutils.printDebugThrownValueForProspectiveRender)(err, workStore.route, _prospectiverenderutils.Phase.ProspectiveRender); + } + } + if (initialServerResult) { + const initialClientPrerenderController = new AbortController(); + const initialClientReactController = new AbortController(); + const initialClientRenderController = new AbortController(); + const initialClientPrerenderStore = { + type: 'prerender-client', + phase: 'render', + rootParams, + fallbackRouteParams, + implicitTags, + renderSignal: initialClientRenderController.signal, + controller: initialClientPrerenderController, + // For HTML Generation the only cache tracked activity + // is module loading, which has it's own cache signal + cacheSignal: null, + dynamicTracking: null, + allowEmptyStaticShell, + revalidate: _constants1.INFINITE_CACHE, + expire: _constants1.INFINITE_CACHE, + stale: _constants1.INFINITE_CACHE, + tags: [ + ...implicitTags.tags + ], + prerenderResumeDataCache, + renderResumeDataCache, + hmrRefreshHash: undefined, + // Client prerenders don't track server param access + varyParamsAccumulator: null + }; + const pendingInitialClientResult = _workunitasyncstorageexternal.workUnitAsyncStorage.run(initialClientPrerenderStore, _streamops.getClientPrerender, // eslint-disable-next-line @next/internal/no-ambiguous-jsx + /*#__PURE__*/ (0, _jsxruntime.jsx)(App, { + reactServerStream: initialServerResult.asUnclosingStream(), + reactDebugStream: undefined, + debugEndTime: undefined, + preinitScripts: preinitScripts, + ServerInsertedHTMLProvider: ServerInsertedHTMLProvider, + nonce: nonce, + images: ctx.renderOpts.images + }), { + signal: initialClientReactController.signal, + onError: (err)=>{ + const digest = (0, _createerrorhandler.getDigestForWellKnownError)(err); + if (digest) { + return digest; + } + if ((0, _reactlargeshellerror.isReactLargeShellError)(err)) { + // TODO: Aggregate + console.error(err); + return undefined; + } + if (initialClientReactController.signal.aborted) { + // These are expected errors that might error the prerender. we ignore them. + } else if (process.env.NEXT_DEBUG_BUILD || process.env.__NEXT_VERBOSE_LOGGING) { + // We don't normally log these errors because we are going to retry anyway but + // it can be useful for debugging Next.js itself to get visibility here when needed + (0, _prospectiverenderutils.printDebugThrownValueForProspectiveRender)(err, workStore.route, _prospectiverenderutils.Phase.ProspectiveRender); + } + }, + bootstrapScripts: [ + bootstrapScript + ] + }); + // The listener to abort our own render controller must be added after + // React has added its listener, to ensure that pending I/O is not + // aborted/rejected too early. + initialClientReactController.signal.addEventListener('abort', ()=>{ + initialClientRenderController.abort(); + }, { + once: true + }); + pendingInitialClientResult.catch((err)=>{ + if (initialClientReactController.signal.aborted || (0, _dynamicrendering.isPrerenderInterruptedError)(err)) { + // These are expected errors that might error the prerender. we ignore them. + } else if (process.env.NEXT_DEBUG_BUILD || process.env.__NEXT_VERBOSE_LOGGING) { + // We don't normally log these errors because we are going to retry anyway but + // it can be useful for debugging Next.js itself to get visibility here when needed + (0, _prospectiverenderutils.printDebugThrownValueForProspectiveRender)(err, workStore.route, _prospectiverenderutils.Phase.ProspectiveRender); + } + }); + // This is mostly needed for dynamic `import()`s in client components. + // Promises passed to client were already awaited above (assuming that they came from cached functions) + (0, _trackmoduleloadingexternal.trackPendingModules)(cacheSignal); + await cacheSignal.cacheReady(); + initialClientReactController.abort(); + } + if (renderOpts.renderResumeDataCache) { + // Swap to the warmed cache so the final render uses entries produced during warmup. + renderResumeDataCache = (0, _resumedatacache.createRenderResumeDataCache)(prerenderResumeDataCache); + } + const finalServerReactController = new AbortController(); + const finalServerRenderController = new AbortController(); + const varyParamsAccumulator = (0, _varyparams.createResponseVaryParamsAccumulator)(); + const finalServerPayloadPrerenderStore = { + type: 'prerender', + phase: 'render', + rootParams, + fallbackRouteParams, + implicitTags, + // While this render signal isn't going to be used to abort a React render while getting the RSC payload + // various request data APIs bind to this controller to reject after completion. + renderSignal: finalServerRenderController.signal, + // When we generate the RSC payload we might abort this controller due to sync IO + // but we don't actually care about sync IO in this phase so we use a throw away controller + // that isn't connected to anything + controller: new AbortController(), + // All caches we could read must already be filled so no tracking is necessary + cacheSignal: null, + dynamicTracking: null, + allowEmptyStaticShell, + revalidate: _constants1.INFINITE_CACHE, + expire: _constants1.INFINITE_CACHE, + stale: _constants1.INFINITE_CACHE, + tags: [ + ...implicitTags.tags + ], + prerenderResumeDataCache, + renderResumeDataCache, + hmrRefreshHash: undefined, + varyParamsAccumulator + }; + const finalAttemptRSCPayload = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(finalServerPayloadPrerenderStore, getRSCPayload, tree, ctx, { + is404: res.statusCode === 404 + }); + let staleTimeIterable; + if (cachedNavigations) { + staleTimeIterable = new _staletime.StaleTimeIterable(); + finalAttemptRSCPayload.s = staleTimeIterable; + } + const serverDynamicTracking = (0, _dynamicrendering.createDynamicTrackingState)(isDebugDynamicAccesses); + let serverIsDynamic = false; + const finalServerPrerenderStore = prerenderStore = { + type: 'prerender', + phase: 'render', + rootParams, + fallbackRouteParams, + implicitTags, + renderSignal: finalServerRenderController.signal, + controller: finalServerReactController, + // All caches we could read must already be filled so no tracking is necessary + cacheSignal: null, + dynamicTracking: serverDynamicTracking, + allowEmptyStaticShell, + revalidate: _constants1.INFINITE_CACHE, + expire: _constants1.INFINITE_CACHE, + stale: _constants1.INFINITE_CACHE, + tags: [ + ...implicitTags.tags + ], + prerenderResumeDataCache, + renderResumeDataCache, + hmrRefreshHash: undefined, + varyParamsAccumulator + }; + if (staleTimeIterable !== undefined) { + (0, _staletime.trackStaleTime)(finalServerPrerenderStore, staleTimeIterable, selectStaleTime); + } + let prerenderIsPending = true; + const finalRSCPrerenderOptions = { + filterStackFrame, + onError: (err)=>{ + return serverComponentsErrorHandler(err); + }, + signal: finalServerReactController.signal + }; + const finalRSCAbortCallback = async ()=>{ + // Now that the prerendering is complete, we know the final stale + // time and vary params. Close the stale time iterable and resolve + // the vary params thenable so Flight can serialize their values + // into the stream. The timing here is important: both were + // included in the Flight payload, but they can only be serialized + // at the very end, after all the components have finished. + // + // We resolve these directly here instead of reading from the work + // unit store because this callback runs in a separate task (via + // setTimeout) and may not have access to the async storage context. + const pendingFinishes = [ + (0, _varyparams.finishAccumulatingVaryParams)(varyParamsAccumulator) + ]; + if (staleTimeIterable !== undefined) { + pendingFinishes.push((0, _staletime.finishStaleTimeTracking)(staleTimeIterable)); + } + await Promise.all(pendingFinishes); + if (finalServerReactController.signal.aborted) { + // If the server controller is already aborted we must have called something + // that required aborting the prerender synchronously such as with new Date() + serverIsDynamic = true; + return; + } + if (prerenderIsPending) { + // If prerenderIsPending then we have blocked for longer than a Task and we assume + // there is something unfinished. + serverIsDynamic = true; + } + finalServerReactController.abort(); + }; + const finalRSCPrerenderFn = async ()=>{ + const pendingPrerenderResult = _workunitasyncstorageexternal.workUnitAsyncStorage.run(// The store to scope + finalServerPrerenderStore, // The function to run + (0, _streamops.getServerPrerender)(ComponentMod), // ... the arguments for the function to run + finalAttemptRSCPayload, clientModules, finalRSCPrerenderOptions); + // The listener to abort our own render controller must be added + // after React has added its listener, to ensure that pending I/O + // is not aborted/rejected too early. + finalServerReactController.signal.addEventListener('abort', ()=>{ + finalServerRenderController.abort(); + }, { + once: true + }); + const prerenderResult = await pendingPrerenderResult; + prerenderIsPending = false; + return prerenderResult; + }; + const reactServerResult = reactServerPrerenderResult = await (0, _apprenderprerenderutils.createReactServerPrerenderResult)((0, _apprenderrenderutils.runInSequentialTasks)(finalRSCPrerenderFn, finalRSCAbortCallback)); + const clientDynamicTracking = (0, _dynamicrendering.createDynamicTrackingState)(isDebugDynamicAccesses); + const finalClientReactController = new AbortController(); + const finalClientRenderController = new AbortController(); + const finalClientPrerenderStore = { + type: 'prerender-client', + phase: 'render', + rootParams, + fallbackRouteParams, + implicitTags, + renderSignal: finalClientRenderController.signal, + controller: finalClientReactController, + // No APIs require a cacheSignal through the workUnitStore during the HTML prerender + cacheSignal: null, + dynamicTracking: clientDynamicTracking, + allowEmptyStaticShell, + revalidate: _constants1.INFINITE_CACHE, + expire: _constants1.INFINITE_CACHE, + stale: _constants1.INFINITE_CACHE, + tags: [ + ...implicitTags.tags + ], + prerenderResumeDataCache, + renderResumeDataCache, + hmrRefreshHash: undefined, + // Client prerenders don't track server param access + varyParamsAccumulator: null + }; + let dynamicValidation = (0, _dynamicrendering.createDynamicValidationState)(); + const finalClientOnHeaders = (0, _streamops.createOnHeadersCallback)(appendHeader); + let { prelude: unprocessedPrelude, postponed } = await (0, _apprenderrenderutils.runInSequentialTasks)(()=>{ + const pendingFinalClientResult = _workunitasyncstorageexternal.workUnitAsyncStorage.run(finalClientPrerenderStore, _streamops.getClientPrerender, // eslint-disable-next-line @next/internal/no-ambiguous-jsx + /*#__PURE__*/ (0, _jsxruntime.jsx)(App, { + reactServerStream: reactServerResult.asUnclosingStream(), + reactDebugStream: undefined, + debugEndTime: undefined, + preinitScripts: preinitScripts, + ServerInsertedHTMLProvider: ServerInsertedHTMLProvider, + nonce: nonce, + images: ctx.renderOpts.images + }), { + signal: finalClientReactController.signal, + onError: (err, errorInfo)=>{ + if ((0, _dynamicrendering.isPrerenderInterruptedError)(err) || finalClientReactController.signal.aborted) { + const componentStack = errorInfo.componentStack; + if (typeof componentStack === 'string') { + (0, _dynamicrendering.trackAllowedDynamicAccess)(workStore, componentStack, dynamicValidation, clientDynamicTracking); + } + return; + } + return htmlRendererErrorHandler(err, errorInfo); + }, + onHeaders: finalClientOnHeaders, + maxHeadersLength: reactMaxHeadersLength, + bootstrapScripts: [ + bootstrapScript + ] + }); + // The listener to abort our own render controller must be added + // after React has added its listener, to ensure that pending I/O is + // not aborted/rejected too early. + finalClientReactController.signal.addEventListener('abort', ()=>{ + finalClientRenderController.abort(); + }, { + once: true + }); + return pendingFinalClientResult; + }, ()=>{ + finalClientReactController.abort(); + }); + const { prelude, preludeIsEmpty } = await (0, _streamops.processPrelude)(unprocessedPrelude); + // If we've disabled throwing on empty static shell, then we don't need to + // track any dynamic access that occurs above the suspense boundary because + // we'll do so in the route shell. + if (!allowEmptyStaticShell) { + (0, _dynamicrendering.throwIfDisallowedDynamic)(workStore, preludeIsEmpty ? _dynamicrendering.PreludeState.Empty : _dynamicrendering.PreludeState.Full, dynamicValidation, serverDynamicTracking); + } + const getServerInsertedHTML = (0, _makegetserverinsertedhtml.makeGetServerInsertedHTML)({ + polyfills, + renderServerInsertedHTML, + serverCapturedErrors: allCapturedErrors, + basePath, + tracingMetadata: tracingMetadata + }); + metadata.flightData = await (0, _streamops.streamToBuffer)(cachedNavigations ? prependIsPartialByte(reactServerResult.asStream(), serverIsDynamic) : reactServerResult.asStream()); + // collectSegmentData needs the raw flight data without the marker byte. + const flightData = cachedNavigations ? metadata.flightData.subarray(1) : metadata.flightData; + await collectSegmentData(flightData, finalServerPrerenderStore, ComponentMod, renderOpts, ctx.pagePath, metadata); + if (serverIsDynamic) { + // Dynamic case + // We will always need to perform a "resume" render of some kind when this route is accessed + // because the RSC data itself is dynamic. We determine if there are any HTML holes or not + // but generally this is a "partial" prerender in that there will be a per-request compute + // concatenated to the static shell. + if (postponed != null) { + // Dynamic HTML case + metadata.postponed = await (0, _postponedstate.getDynamicHTMLPostponedState)(postponed, preludeIsEmpty ? _postponedstate.DynamicHTMLPreludeState.Empty : _postponedstate.DynamicHTMLPreludeState.Full, fallbackRouteParams, prerenderResumeDataCache, cacheComponents); + } else { + // Dynamic Data case + metadata.postponed = await (0, _postponedstate.getDynamicDataPostponedState)(prerenderResumeDataCache, cacheComponents); + } + reactServerResult.consume(); + const continueDynamicPrerenderOpts = { + getServerInsertedHTML, + getServerInsertedMetadata, + deploymentId: ctx.sharedContext.deploymentId + }; + return { + digestErrorsMap: reactServerErrorsByDigest, + ssrErrors: allCapturedErrors, + stream: await (0, _streamops.continueDynamicPrerender)(prelude, continueDynamicPrerenderOpts), + dynamicAccess: (0, _dynamicrendering.consumeDynamicAccess)(serverDynamicTracking, clientDynamicTracking), + // TODO: Should this include the SSR pass? + collectedRevalidate: finalServerPrerenderStore.revalidate, + collectedExpire: finalServerPrerenderStore.expire, + collectedStale: selectStaleTime(finalServerPrerenderStore.stale), + collectedTags: finalServerPrerenderStore.tags, + renderResumeDataCache: (0, _resumedatacache.createRenderResumeDataCache)(prerenderResumeDataCache) + }; + } else { + // Static case + // We will not perform resumption per request. The result can be served statically to the requestor + // and if there was anything dynamic it will only be rendered in the browser. + if (workStore.forceDynamic) { + throw Object.defineProperty(new _staticgenerationbailout.StaticGenBailoutError('Invariant: a Page with `dynamic = "force-dynamic"` did not trigger the dynamic pathway. This is a bug in Next.js'), "__NEXT_ERROR_CODE", { + value: "E598", + enumerable: false, + configurable: true + }); + } + let htmlStream = prelude; + if (postponed != null) { + // We postponed but nothing dynamic was used. We resume the render now and immediately abort it + // so we can set all the postponed boundaries to client render mode before we store the HTML response + const foreverStream = (0, _streamops.createPendingStream)(); + const resumePrelude = await (0, _streamops.resumeAndAbort)(// eslint-disable-next-line @next/internal/no-ambiguous-jsx + /*#__PURE__*/ (0, _jsxruntime.jsx)(App, { + reactServerStream: foreverStream, + reactDebugStream: undefined, + debugEndTime: undefined, + preinitScripts: ()=>{}, + ServerInsertedHTMLProvider: ServerInsertedHTMLProvider, + nonce: nonce, + images: ctx.renderOpts.images + }), JSON.parse(JSON.stringify(postponed)), { + signal: (0, _dynamicrendering.createRenderInBrowserAbortSignal)(), + onError: htmlRendererErrorHandler, + nonce + }); + // First we write everything from the prerender, then we write everything from the aborted resume render + htmlStream = (0, _streamops.chainStreams)(prelude, resumePrelude); + } + let finalStream; + const hasFallbackRouteParams = fallbackRouteParams && fallbackRouteParams.size > 0; + if (hasFallbackRouteParams) { + // This is a "static fallback" prerender: although the page didn't + // access any runtime params in a Server Component, it may have + // accessed a runtime param in a client segment. + // + // TODO: If there were no client segments, we can use the fully static + // path instead. + // + // Rather than use a dynamic server resume to fill in the params, + // we can rely on the client to parse the params from the URL and use + // that to hydrate the page. + // + // Send an empty InitialRSCPayload to the server component renderer + // The data will be fetched by the client instead. + // TODO: In the future, rather than defer the entire hydration payload + // to be fetched by the client, we should only defer the client + // segments, since those are the only ones whose data is not complete. + const emptyReactServerResult = await (0, _apprenderprerenderutils.createReactServerPrerenderResultFromRender)((0, _streamops.renderToFlightStream)(ComponentMod, [], clientModules, { + filterStackFrame, + onError: serverComponentsErrorHandler + })); + finalStream = await (0, _streamops.continueStaticFallbackPrerender)(htmlStream, { + inlinedDataStream: (0, _streamops.createInlinedDataStream)(emptyReactServerResult.consumeAsStream(), nonce, formState), + getServerInsertedHTML, + getServerInsertedMetadata, + deploymentId: ctx.sharedContext.deploymentId + }); + } else { + // Normal static prerender case, no fallback param handling needed + finalStream = await (0, _streamops.continueStaticPrerender)(htmlStream, { + inlinedDataStream: (0, _streamops.createInlinedDataStream)(reactServerResult.consumeAsStream(), nonce, formState), + getServerInsertedHTML, + getServerInsertedMetadata, + deploymentId: ctx.sharedContext.deploymentId + }); + } + return { + digestErrorsMap: reactServerErrorsByDigest, + ssrErrors: allCapturedErrors, + stream: finalStream, + dynamicAccess: (0, _dynamicrendering.consumeDynamicAccess)(serverDynamicTracking, clientDynamicTracking), + // TODO: Should this include the SSR pass? + collectedRevalidate: finalServerPrerenderStore.revalidate, + collectedExpire: finalServerPrerenderStore.expire, + collectedStale: selectStaleTime(finalServerPrerenderStore.stale), + collectedTags: finalServerPrerenderStore.tags, + renderResumeDataCache: (0, _resumedatacache.createRenderResumeDataCache)(prerenderResumeDataCache) + }; + } + } else if (experimental.isRoutePPREnabled) { + // We're statically generating with PPR and need to do dynamic tracking + let dynamicTracking = (0, _dynamicrendering.createDynamicTrackingState)(isDebugDynamicAccesses); + const prerenderResumeDataCache = (0, _resumedatacache.createPrerenderResumeDataCache)(); + const reactServerPrerenderStore = prerenderStore = { + type: 'prerender-ppr', + phase: 'render', + rootParams, + fallbackRouteParams, + implicitTags, + dynamicTracking, + revalidate: _constants1.INFINITE_CACHE, + expire: _constants1.INFINITE_CACHE, + stale: _constants1.INFINITE_CACHE, + tags: [ + ...implicitTags.tags + ], + prerenderResumeDataCache + }; + const RSCPayload = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(reactServerPrerenderStore, getRSCPayload, tree, ctx, { + is404: res.statusCode === 404 + }); + let reactServerResult; + reactServerResult = reactServerPrerenderResult = await (0, _apprenderprerenderutils.createReactServerPrerenderResultFromRender)(_workunitasyncstorageexternal.workUnitAsyncStorage.run(reactServerPrerenderStore, _streamops.renderToFlightStream, ComponentMod, RSCPayload, clientModules, { + filterStackFrame, + onError: serverComponentsErrorHandler + })); + const ssrPrerenderStore = { + type: 'prerender-ppr', + phase: 'render', + rootParams, + fallbackRouteParams, + implicitTags, + dynamicTracking, + revalidate: _constants1.INFINITE_CACHE, + expire: _constants1.INFINITE_CACHE, + stale: _constants1.INFINITE_CACHE, + tags: [ + ...implicitTags.tags + ], + prerenderResumeDataCache + }; + const pprOnHeaders = (0, _streamops.createOnHeadersCallback)(appendHeader); + const { prelude: unprocessedPrelude, postponed } = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(ssrPrerenderStore, _streamops.getClientPrerender, // eslint-disable-next-line @next/internal/no-ambiguous-jsx + /*#__PURE__*/ (0, _jsxruntime.jsx)(App, { + reactServerStream: reactServerResult.asUnclosingStream(), + reactDebugStream: undefined, + debugEndTime: undefined, + preinitScripts: preinitScripts, + ServerInsertedHTMLProvider: ServerInsertedHTMLProvider, + nonce: nonce, + images: ctx.renderOpts.images + }), { + onError: htmlRendererErrorHandler, + onHeaders: pprOnHeaders, + maxHeadersLength: reactMaxHeadersLength, + bootstrapScripts: [ + bootstrapScript + ] + }); + const getServerInsertedHTML = (0, _makegetserverinsertedhtml.makeGetServerInsertedHTML)({ + polyfills, + renderServerInsertedHTML, + serverCapturedErrors: allCapturedErrors, + basePath, + tracingMetadata: tracingMetadata + }); + // After awaiting here we've waited for the entire RSC render to complete. Crucially this means + // that when we detect whether we've used dynamic APIs below we know we'll have picked up even + // parts of the React Server render that might not be used in the SSR render. + const flightData = await (0, _streamops.streamToBuffer)(reactServerResult.asStream()); + if (shouldGenerateStaticFlightData(workStore)) { + metadata.flightData = flightData; + await collectSegmentData(flightData, ssrPrerenderStore, ComponentMod, renderOpts, ctx.pagePath, metadata); + } + const { prelude, preludeIsEmpty } = await (0, _streamops.processPrelude)(unprocessedPrelude); + /** + * When prerendering there are three outcomes to consider + * + * Dynamic HTML: The prerender has dynamic holes (caused by using Next.js Dynamic Rendering APIs) + * We will need to resume this result when requests are handled and we don't include + * any server inserted HTML or inlined flight data in the static HTML + * + * Dynamic Data: The prerender has no dynamic holes but dynamic APIs were used. We will not + * resume this render when requests are handled but we will generate new inlined + * flight data since it is dynamic and differences may end up reconciling on the client + * + * Static: The prerender has no dynamic holes and no dynamic APIs were used. We statically encode + * all server inserted HTML and flight data + */ // First we check if we have any dynamic holes in our HTML prerender + if ((0, _dynamicrendering.accessedDynamicData)(dynamicTracking.dynamicAccesses)) { + if (postponed != null) { + // Dynamic HTML case. + metadata.postponed = await (0, _postponedstate.getDynamicHTMLPostponedState)(postponed, preludeIsEmpty ? _postponedstate.DynamicHTMLPreludeState.Empty : _postponedstate.DynamicHTMLPreludeState.Full, fallbackRouteParams, prerenderResumeDataCache, cacheComponents); + } else { + // Dynamic Data case. + metadata.postponed = await (0, _postponedstate.getDynamicDataPostponedState)(prerenderResumeDataCache, cacheComponents); + } + // Regardless of whether this is the Dynamic HTML or Dynamic Data case we need to ensure we include + // server inserted html in the static response because the html that is part of the prerender may depend on it + // It is possible in the set of stream transforms for Dynamic HTML vs Dynamic Data may differ but currently both states + // require the same set so we unify the code path here + reactServerResult.consume(); + const pprDynamicOpts = { + getServerInsertedHTML, + getServerInsertedMetadata, + deploymentId: ctx.sharedContext.deploymentId + }; + return { + digestErrorsMap: reactServerErrorsByDigest, + ssrErrors: allCapturedErrors, + stream: await (0, _streamops.continueDynamicPrerender)(prelude, pprDynamicOpts), + dynamicAccess: dynamicTracking.dynamicAccesses, + // TODO: Should this include the SSR pass? + collectedRevalidate: reactServerPrerenderStore.revalidate, + collectedExpire: reactServerPrerenderStore.expire, + collectedStale: selectStaleTime(reactServerPrerenderStore.stale), + collectedTags: reactServerPrerenderStore.tags + }; + } else if (fallbackRouteParams && fallbackRouteParams.size > 0) { + // Rendering the fallback case. + metadata.postponed = await (0, _postponedstate.getDynamicDataPostponedState)(prerenderResumeDataCache, cacheComponents); + const pprFallbackDynamicOpts = { + getServerInsertedHTML, + getServerInsertedMetadata, + deploymentId: ctx.sharedContext.deploymentId + }; + return { + digestErrorsMap: reactServerErrorsByDigest, + ssrErrors: allCapturedErrors, + stream: await (0, _streamops.continueDynamicPrerender)(prelude, pprFallbackDynamicOpts), + dynamicAccess: dynamicTracking.dynamicAccesses, + // TODO: Should this include the SSR pass? + collectedRevalidate: reactServerPrerenderStore.revalidate, + collectedExpire: reactServerPrerenderStore.expire, + collectedStale: selectStaleTime(reactServerPrerenderStore.stale), + collectedTags: reactServerPrerenderStore.tags + }; + } else { + // Static case + // We still have not used any dynamic APIs. At this point we can produce an entirely static prerender response + if (workStore.forceDynamic) { + throw Object.defineProperty(new _staticgenerationbailout.StaticGenBailoutError('Invariant: a Page with `dynamic = "force-dynamic"` did not trigger the dynamic pathway. This is a bug in Next.js'), "__NEXT_ERROR_CODE", { + value: "E598", + enumerable: false, + configurable: true + }); + } + let htmlStream = prelude; + if (postponed != null) { + // We postponed but nothing dynamic was used. We resume the render now and immediately abort it + // so we can set all the postponed boundaries to client render mode before we store the HTML response + const foreverStream = (0, _streamops.createPendingStream)(); + const resumePrelude = await (0, _streamops.resumeAndAbort)(// eslint-disable-next-line @next/internal/no-ambiguous-jsx + /*#__PURE__*/ (0, _jsxruntime.jsx)(App, { + reactServerStream: foreverStream, + reactDebugStream: undefined, + debugEndTime: undefined, + preinitScripts: ()=>{}, + ServerInsertedHTMLProvider: ServerInsertedHTMLProvider, + nonce: nonce, + images: ctx.renderOpts.images + }), JSON.parse(JSON.stringify(postponed)), { + signal: (0, _dynamicrendering.createRenderInBrowserAbortSignal)(), + onError: htmlRendererErrorHandler, + nonce + }); + // First we write everything from the prerender, then we write everything from the aborted resume render + htmlStream = (0, _streamops.chainStreams)(prelude, resumePrelude); + } + return { + digestErrorsMap: reactServerErrorsByDigest, + ssrErrors: allCapturedErrors, + stream: await (0, _streamops.continueStaticPrerender)(htmlStream, { + inlinedDataStream: (0, _streamops.createInlinedDataStream)(reactServerResult.consumeAsStream(), nonce, formState), + getServerInsertedHTML, + getServerInsertedMetadata, + deploymentId: ctx.sharedContext.deploymentId + }), + dynamicAccess: dynamicTracking.dynamicAccesses, + // TODO: Should this include the SSR pass? + collectedRevalidate: reactServerPrerenderStore.revalidate, + collectedExpire: reactServerPrerenderStore.expire, + collectedStale: selectStaleTime(reactServerPrerenderStore.stale), + collectedTags: reactServerPrerenderStore.tags + }; + } + } else { + const prerenderLegacyStore = prerenderStore = { + type: 'prerender-legacy', + phase: 'render', + rootParams, + implicitTags, + revalidate: _constants1.INFINITE_CACHE, + expire: _constants1.INFINITE_CACHE, + stale: _constants1.INFINITE_CACHE, + tags: [ + ...implicitTags.tags + ] + }; + // This is a regular static generation. We don't do dynamic tracking because we rely on + // the old-school dynamic error handling to bail out of static generation + const RSCPayload = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(prerenderLegacyStore, getRSCPayload, tree, ctx, { + is404: res.statusCode === 404 + }); + let reactServerResult; + reactServerResult = reactServerPrerenderResult = await (0, _apprenderprerenderutils.createReactServerPrerenderResultFromRender)(_workunitasyncstorageexternal.workUnitAsyncStorage.run(prerenderLegacyStore, _streamops.renderToFlightStream, ComponentMod, RSCPayload, clientModules, { + filterStackFrame, + onError: serverComponentsErrorHandler + })); + const { stream: htmlStream } = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(prerenderLegacyStore, _streamops.renderToFizzStream, // eslint-disable-next-line @next/internal/no-ambiguous-jsx + /*#__PURE__*/ (0, _jsxruntime.jsx)(App, { + reactServerStream: reactServerResult.asUnclosingStream(), + reactDebugStream: undefined, + debugEndTime: undefined, + preinitScripts: preinitScripts, + ServerInsertedHTMLProvider: ServerInsertedHTMLProvider, + nonce: nonce, + images: ctx.renderOpts.images + }), { + onError: htmlRendererErrorHandler, + nonce, + bootstrapScripts: [ + bootstrapScript + ] + }); + if (shouldGenerateStaticFlightData(workStore)) { + const flightData = await (0, _streamops.streamToBuffer)(reactServerResult.asStream()); + metadata.flightData = flightData; + await collectSegmentData(flightData, prerenderLegacyStore, ComponentMod, renderOpts, ctx.pagePath, metadata); + } + const getServerInsertedHTML = (0, _makegetserverinsertedhtml.makeGetServerInsertedHTML)({ + polyfills, + renderServerInsertedHTML, + serverCapturedErrors: allCapturedErrors, + basePath, + tracingMetadata: tracingMetadata + }); + return { + digestErrorsMap: reactServerErrorsByDigest, + ssrErrors: allCapturedErrors, + stream: await (0, _streamops.continueFizzStream)(htmlStream, { + inlinedDataStream: (0, _streamops.createInlinedDataStream)(reactServerResult.consumeAsStream(), nonce, formState), + isStaticGeneration: true, + getServerInsertedHTML, + getServerInsertedMetadata, + deploymentId: ctx.sharedContext.deploymentId + }), + // TODO: Should this include the SSR pass? + collectedRevalidate: prerenderLegacyStore.revalidate, + collectedExpire: prerenderLegacyStore.expire, + collectedStale: selectStaleTime(prerenderLegacyStore.stale), + collectedTags: prerenderLegacyStore.tags + }; + } + } catch (err) { + if ((0, _staticgenerationbailout.isStaticGenBailoutError)(err) || typeof err === 'object' && err !== null && 'message' in err && typeof err.message === 'string' && err.message.includes('https://nextjs.org/docs/advanced-features/static-html-export')) { + // Ensure that "next dev" prints the red error overlay + throw err; + } + // If this is a static generation error, we need to throw it so that it + // can be handled by the caller if we're in static generation mode. + if ((0, _hooksservercontext.isDynamicServerError)(err)) { + throw err; + } + // If a bailout made it to this point, it means it wasn't wrapped inside + // a suspense boundary. + const shouldBailoutToCSR = (0, _bailouttocsr.isBailoutToCSRError)(err); + if (shouldBailoutToCSR) { + const stack = (0, _formatservererror.getStackWithoutErrorMessage)(err); + (0, _log.error)(`${err.reason} should be wrapped in a suspense boundary at page "${pagePath}". Read more: https://nextjs.org/docs/messages/missing-suspense-with-csr-bailout\n${stack}`); + throw err; + } + // If we errored when we did not have an RSC stream to read from. This is + // not just a render error, we need to throw early. + if (reactServerPrerenderResult === null) { + throw err; + } + let errorType; + if ((0, _httpaccessfallback.isHTTPAccessFallbackError)(err)) { + res.statusCode = (0, _httpaccessfallback.getAccessFallbackHTTPStatus)(err); + metadata.statusCode = res.statusCode; + errorType = (0, _httpaccessfallback.getAccessFallbackErrorTypeByStatus)(res.statusCode); + } else if ((0, _redirecterror.isRedirectError)(err)) { + errorType = 'redirect'; + res.statusCode = (0, _redirect.getRedirectStatusCodeFromError)(err); + metadata.statusCode = res.statusCode; + const redirectUrl = (0, _addpathprefix.addPathPrefix)((0, _redirect.getURLFromRedirectError)(err), basePath); + setHeader('location', redirectUrl); + } else if (!shouldBailoutToCSR) { + res.statusCode = 500; + metadata.statusCode = res.statusCode; + } + const [errorPreinitScripts, errorBootstrapScript] = (0, _requiredscripts.getRequiredScripts)(buildManifest, assetPrefix, crossOrigin, subresourceIntegrityManifest, (0, _getassetquerystring.getAssetQueryString)(ctx, false), nonce, '/_not-found/page'); + const prerenderLegacyStore = prerenderStore = { + type: 'prerender-legacy', + phase: 'render', + rootParams, + implicitTags: implicitTags, + revalidate: typeof (prerenderStore == null ? void 0 : prerenderStore.revalidate) !== 'undefined' ? prerenderStore.revalidate : _constants1.INFINITE_CACHE, + expire: typeof (prerenderStore == null ? void 0 : prerenderStore.expire) !== 'undefined' ? prerenderStore.expire : _constants1.INFINITE_CACHE, + stale: typeof (prerenderStore == null ? void 0 : prerenderStore.stale) !== 'undefined' ? prerenderStore.stale : _constants1.INFINITE_CACHE, + tags: [ + ...(prerenderStore == null ? void 0 : prerenderStore.tags) || implicitTags.tags + ] + }; + let prerenderHTTPError; + if (cacheComponents && (0, _httpaccessfallback.isHTTPAccessFallbackError)(err)) { + const triggeredStatus = (0, _httpaccessfallback.getAccessFallbackHTTPStatus)(err); + const boundaryTree = findPrerenderHTTPErrorBoundaryTree(tree, triggeredStatus, ctx.renderOpts.experimental.authInterrupts); + if (boundaryTree) { + prerenderHTTPError = { + boundaryTree, + triggeredStatus + }; + } + } + const errorRSCPayload = prerenderHTTPError ? await _workunitasyncstorageexternal.workUnitAsyncStorage.run(prerenderLegacyStore, getRSCPayload, tree, ctx, { + is404: errorType === 'not-found', + prerenderHTTPError + }) : await _workunitasyncstorageexternal.workUnitAsyncStorage.run(prerenderLegacyStore, getErrorRSCPayload, tree, ctx, reactServerErrorsByDigest.has(err.digest) ? undefined : err, errorType); + const errorServerStreamRaw = _workunitasyncstorageexternal.workUnitAsyncStorage.run(prerenderLegacyStore, _streamops.renderToFlightStream, ComponentMod, errorRSCPayload, clientModules, { + filterStackFrame, + onError: serverComponentsErrorHandler + }); + let errorServerStream = errorServerStreamRaw; + const errorFlightResultPromise = prerenderHTTPError ? (()=>{ + // Fizz still needs to read the Flight stream to render ErrorApp, but + // the prerender path also needs a buffered Flight result for the HTML + // prelude and segment data collectors. Tee the stream so each consumer + // gets its own copy. + const [appStream, flightStream] = errorServerStreamRaw.tee(); + errorServerStream = appStream; + return (0, _apprenderprerenderutils.createReactServerPrerenderResultFromRender)(flightStream); + })() : null; + try { + const { stream: errorHtmlStream } = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(prerenderLegacyStore, _streamops.renderToFizzStream, // eslint-disable-next-line @next/internal/no-ambiguous-jsx + /*#__PURE__*/ (0, _jsxruntime.jsx)(ErrorApp, { + reactServerStream: errorServerStream, + ServerInsertedHTMLProvider: ServerInsertedHTMLProvider, + preinitScripts: errorPreinitScripts, + nonce: nonce, + images: ctx.renderOpts.images + }), { + nonce, + bootstrapScripts: [ + errorBootstrapScript + ], + formState + }); + const resolvedFlightResult = errorFlightResultPromise ? await errorFlightResultPromise : reactServerPrerenderResult; + if (errorFlightResultPromise) { + reactServerPrerenderResult.consume(); + } + if (shouldGenerateStaticFlightData(workStore)) { + const flightData = await (0, _streamops.streamToBuffer)(resolvedFlightResult.asStream()); + metadata.flightData = flightData; + await collectSegmentData(flightData, prerenderLegacyStore, ComponentMod, renderOpts, ctx.pagePath, metadata); + } + const flightStream = resolvedFlightResult.consumeAsStream(); + return { + digestErrorsMap: reactServerErrorsByDigest, + ssrErrors: allCapturedErrors, + stream: await (0, _streamops.continueFizzStream)(errorHtmlStream, { + inlinedDataStream: (0, _streamops.createInlinedDataStream)(flightStream, nonce, formState), + isStaticGeneration: true, + getServerInsertedHTML: (0, _makegetserverinsertedhtml.makeGetServerInsertedHTML)({ + polyfills, + renderServerInsertedHTML, + serverCapturedErrors: [], + basePath, + tracingMetadata: tracingMetadata + }), + getServerInsertedMetadata, + validateRootLayout: !!process.env.__NEXT_DEV_SERVER, + deploymentId: ctx.sharedContext.deploymentId + }), + dynamicAccess: null, + collectedRevalidate: prerenderStore !== null ? prerenderStore.revalidate : _constants1.INFINITE_CACHE, + collectedExpire: prerenderStore !== null ? prerenderStore.expire : _constants1.INFINITE_CACHE, + collectedStale: selectStaleTime(prerenderStore !== null ? prerenderStore.stale : _constants1.INFINITE_CACHE), + collectedTags: prerenderStore !== null ? prerenderStore.tags : null + }; + } catch (finalErr) { + if (process.env.__NEXT_DEV_SERVER && (0, _httpaccessfallback.isHTTPAccessFallbackError)(finalErr)) { + const { bailOnRootNotFound } = require('../../client/components/dev-root-http-access-fallback-boundary'); + bailOnRootNotFound(); + } + throw finalErr; + } + } +} +const getGlobalErrorStyles = async (tree, ctx)=>{ + const globalErrorModule = (0, _parseloadertree.parseLoaderTree)(tree).modules['global-error']; + if (!globalErrorModule) { + throw Object.defineProperty(new Error('Invariant: global-error module is required but not found in loader tree'), "__NEXT_ERROR_CODE", { + value: "E983", + enumerable: false, + configurable: true + }); + } + const { componentMod: { createElement } } = ctx; + // Get the GlobalError component and styles from the loader tree + const [GlobalErrorComponent, styles] = await (0, _createcomponentstylesandscripts.createComponentStylesAndScripts)({ + ctx, + filePath: globalErrorModule[1], + getComponent: globalErrorModule[0], + injectedCSS: new Set(), + injectedJS: new Set() + }); + let globalErrorStyles = styles; + if (process.env.__NEXT_DEV_SERVER) { + const dir = (process.env.NEXT_RUNTIME === 'edge' ? process.env.__NEXT_EDGE_PROJECT_DIR : ctx.renderOpts.dir) || ''; + const globalErrorModulePath = (0, _segmentexplorerpath.normalizeConventionFilePath)(dir, globalErrorModule[1]); + if (globalErrorModulePath) { + const SegmentViewNode = ctx.componentMod.SegmentViewNode; + globalErrorStyles = // This will be rendered next to GlobalError component under ErrorBoundary, + // it requires a key to avoid React warning about duplicate keys. + createElement(SegmentViewNode, { + key: 'ge-svn', + type: 'global-error', + pagePath: globalErrorModulePath + }, globalErrorStyles); + } + } + return { + GlobalError: GlobalErrorComponent, + styles: globalErrorStyles + }; +}; +async function collectSegmentData(fullPageDataBuffer, prerenderStore, ComponentMod, renderOpts, pagePath, metadata) { + // Per-segment prefetch data + // + // All of the segments for a page are generated simultaneously, including + // during revalidations. This is to ensure consistency, because it's + // possible for a mismatch between a layout and page segment can cause the + // client to error during rendering. We want to preserve the ability of the + // client to recover from such a mismatch by re-requesting all the segments + // to get a consistent view of the page. + // + // For performance, we reuse the Flight output that was created when + // generating the initial page HTML. The Flight stream for the whole page is + // decomposed into a separate stream per segment. + const { clientModules, edgeRscModuleMapping, rscModuleMapping } = (0, _manifestssingleton.getClientReferenceManifest)(); + // Manifest passed to the Flight client for reading the full-page Flight + // stream. Based off similar code in use-cache-wrapper.ts. + const isEdgeRuntime = process.env.NEXT_RUNTIME === 'edge'; + const serverConsumerManifest = { + // moduleLoading must be null because we don't want to trigger preloads of ClientReferences + // to be added to the consumer. Instead, we'll wait for any ClientReference to be emitted + // which themselves will handle the preloading. + moduleLoading: null, + moduleMap: isEdgeRuntime ? edgeRscModuleMapping : rscModuleMapping, + serverModuleMap: (0, _manifestssingleton.getServerModuleMap)() + }; + const selectStaleTime = (0, _staletime.createSelectStaleTime)(renderOpts.experimental); + const staleTime = selectStaleTime(prerenderStore.stale); + // Resolve prefetch hints. At runtime (next start / ISR), the precomputed + // hints are already loaded from the prefetch-hints.json manifest. During + // build, compute them by measuring segment gzip sizes and write them to + // metadata so the build pipeline can persist them to the manifest. + let hints; + const prefetchInlining = renderOpts.experimental.prefetchInlining; + if (!prefetchInlining) { + hints = null; + } else if (renderOpts.isBuildTimePrerendering) { + // Build time: compute fresh hints and store in metadata for the manifest. + hints = await ComponentMod.collectPrefetchHints(fullPageDataBuffer, staleTime, clientModules, serverConsumerManifest, prefetchInlining.maxSize, prefetchInlining.maxBundleSize); + metadata.prefetchHints = hints; + } else { + var _renderOpts_prefetchHints; + // Runtime: use hints from the manifest. Never compute fresh hints + // during ISR/revalidation. + hints = ((_renderOpts_prefetchHints = renderOpts.prefetchHints) == null ? void 0 : _renderOpts_prefetchHints[pagePath]) ?? null; + } + // Pass the resolved hints so collectSegmentData can union them into + // the TreePrefetch. During the initial build the FlightRouterState in + // the buffer doesn't have inlining hints yet (they were just computed + // above), so we need to merge them in here. At runtime/ISR the hints + // are already embedded in the FlightRouterState, so this is null. + metadata.segmentData = await ComponentMod.collectSegmentData(renderOpts.cacheComponents, fullPageDataBuffer, staleTime, clientModules, serverConsumerManifest, Boolean(renderOpts.experimental.prefetchInlining), hints); +} +function isBypassingCachesInDev(requestStore) { + return !!process.env.__NEXT_DEV_SERVER && requestStore.headers.get('cache-control') === 'no-cache'; +} +function WarnForBypassCachesInDev({ route }) { + (0, _warnonce.warnOnce)(`Route ${route} is rendering with server caches disabled. For this navigation, Component Metadata in React DevTools will not accurately reflect what is statically prerenderable and runtime prefetchable. See more info here: https://nextjs.org/docs/messages/cache-bypass-in-dev`); + return null; +} +function nodeStreamFromReadableStream(stream) { + if (process.env.NEXT_RUNTIME === 'edge') { + throw Object.defineProperty(new _invarianterror.InvariantError('nodeStreamFromReadableStream cannot be used in the edge runtime'), "__NEXT_ERROR_CODE", { + value: "E944", + enumerable: false, + configurable: true + }); + } else { + const reader = stream.getReader(); + const { Readable } = require('node:stream'); + return new Readable({ + read () { + reader.read().then(({ done, value })=>{ + if (done) { + this.push(null); + } else { + this.push(value); + } + }).catch((err)=>this.destroy(err)); + } + }); + } +} + +//# sourceMappingURL=app-render.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/async-local-storage.js b/build/node_modules/next/dist/server/app-render/async-local-storage.js new file mode 100644 index 0000000..c069df7 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/async-local-storage.js @@ -0,0 +1,76 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + bindSnapshot: null, + createAsyncLocalStorage: null, + createSnapshot: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + bindSnapshot: function() { + return bindSnapshot; + }, + createAsyncLocalStorage: function() { + return createAsyncLocalStorage; + }, + createSnapshot: function() { + return createSnapshot; + } +}); +const sharedAsyncLocalStorageNotAvailableError = Object.defineProperty(new Error('Invariant: AsyncLocalStorage accessed in runtime where it is not available'), "__NEXT_ERROR_CODE", { + value: "E504", + enumerable: false, + configurable: true +}); +class FakeAsyncLocalStorage { + disable() { + throw sharedAsyncLocalStorageNotAvailableError; + } + getStore() { + // This fake implementation of AsyncLocalStorage always returns `undefined`. + return undefined; + } + run() { + throw sharedAsyncLocalStorageNotAvailableError; + } + exit() { + throw sharedAsyncLocalStorageNotAvailableError; + } + enterWith() { + throw sharedAsyncLocalStorageNotAvailableError; + } + static bind(fn) { + return fn; + } +} +const maybeGlobalAsyncLocalStorage = typeof globalThis !== 'undefined' && globalThis.AsyncLocalStorage; +function createAsyncLocalStorage() { + if (maybeGlobalAsyncLocalStorage) { + return new maybeGlobalAsyncLocalStorage(); + } + return new FakeAsyncLocalStorage(); +} +function bindSnapshot(// WARNING: Don't pass a named function to this argument! See: https://github.com/facebook/react/pull/34911 +fn) { + if (maybeGlobalAsyncLocalStorage) { + return maybeGlobalAsyncLocalStorage.bind(fn); + } + return FakeAsyncLocalStorage.bind(fn); +} +function createSnapshot() { + if (maybeGlobalAsyncLocalStorage) { + return maybeGlobalAsyncLocalStorage.snapshot(); + } + return function(fn, ...args) { + return fn(...args); + }; +} + +//# sourceMappingURL=async-local-storage.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/cache-signal.js b/build/node_modules/next/dist/server/app-render/cache-signal.js new file mode 100644 index 0000000..2c45318 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/cache-signal.js @@ -0,0 +1,181 @@ +/** + * This class is used to detect when all cache reads for a given render are settled. + * We do this to allow for cache warming the prerender without having to continue rendering + * the remainder of the page. This feature is really only useful when the cacheComponents flag is on + * and should only be used in codepaths gated with this feature. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "CacheSignal", { + enumerable: true, + get: function() { + return CacheSignal; + } +}); +const _invarianterror = require("../../shared/lib/invariant-error"); +class CacheSignal { + constructor(){ + this.count = 0; + this.earlyListeners = []; + this.listeners = []; + this.tickPending = false; + this.pendingTimeoutCleanup = null; + this.subscribedSignals = null; + this.invokeListenersIfNoPendingReads = ()=>{ + this.pendingTimeoutCleanup = null; + if (this.count === 0) { + for(let i = 0; i < this.listeners.length; i++){ + this.listeners[i](); + } + this.listeners.length = 0; + } + }; + if (process.env.NEXT_RUNTIME === 'edge') { + // we rely on `process.nextTick`, which is not supported in edge + throw Object.defineProperty(new _invarianterror.InvariantError('CacheSignal cannot be used in the edge runtime, because `cacheComponents` does not support it.'), "__NEXT_ERROR_CODE", { + value: "E728", + enumerable: false, + configurable: true + }); + } + } + noMorePendingCaches() { + if (!this.tickPending) { + this.tickPending = true; + queueMicrotask(()=>process.nextTick(()=>{ + this.tickPending = false; + if (this.count === 0) { + for(let i = 0; i < this.earlyListeners.length; i++){ + this.earlyListeners[i](); + } + this.earlyListeners.length = 0; + } + })); + } + // After a cache resolves, React will schedule new rendering work: + // - in a microtask (when prerendering) + // - in setImmediate (when rendering) + // To cover both of these, we have to make sure that we let immediates execute at least once after each cache resolved. + // We don't know when the pending timeout was scheduled (and if it's about to resolve), + // so by scheduling a new one, we can be sure that we'll go around the event loop at least once. + if (this.pendingTimeoutCleanup) { + // We cancel the timeout in beginRead, so this shouldn't ever be active here, + // but we still cancel it defensively. + this.pendingTimeoutCleanup(); + } + this.pendingTimeoutCleanup = scheduleImmediateAndTimeoutWithCleanup(this.invokeListenersIfNoPendingReads); + } + /** + * This promise waits until there are no more in progress cache reads but no later. + * This allows for adding more cache reads after to delay cacheReady. + */ inputReady() { + return new Promise((resolve)=>{ + this.earlyListeners.push(resolve); + if (this.count === 0) { + this.noMorePendingCaches(); + } + }); + } + /** + * If there are inflight cache reads this Promise can resolve in a microtask however + * if there are no inflight cache reads then we wait at least one task to allow initial + * cache reads to be initiated. + */ cacheReady() { + return new Promise((resolve)=>{ + this.listeners.push(resolve); + if (this.count === 0) { + this.noMorePendingCaches(); + } + }); + } + beginRead() { + this.count++; + // There's a new pending cache, so if there's a `noMorePendingCaches` timeout running, + // we should cancel it. + if (this.pendingTimeoutCleanup) { + this.pendingTimeoutCleanup(); + this.pendingTimeoutCleanup = null; + } + if (this.subscribedSignals !== null) { + for (const subscriber of this.subscribedSignals){ + subscriber.beginRead(); + } + } + } + endRead() { + if (this.count === 0) { + throw Object.defineProperty(new _invarianterror.InvariantError('CacheSignal got more endRead() calls than beginRead() calls'), "__NEXT_ERROR_CODE", { + value: "E678", + enumerable: false, + configurable: true + }); + } + // If this is the last read we need to wait a task before we can claim the cache is settled. + // The cache read will likely ping a Server Component which can read from the cache again and this + // will play out in a microtask so we need to only resolve pending listeners if we're still at 0 + // after at least one task. + // We only want one task scheduled at a time so when we hit count 1 we don't decrement the counter immediately. + // If intervening reads happen before the scheduled task runs they will never observe count 1 preventing reentrency + this.count--; + if (this.count === 0) { + this.noMorePendingCaches(); + } + if (this.subscribedSignals !== null) { + for (const subscriber of this.subscribedSignals){ + subscriber.endRead(); + } + } + } + hasPendingReads() { + return this.count > 0; + } + trackRead(promise) { + this.beginRead(); + // `promise.finally()` still rejects, so don't use it here to avoid unhandled rejections + const onFinally = this.endRead.bind(this); + promise.then(onFinally, onFinally); + return promise; + } + subscribeToReads(subscriber) { + if (subscriber === this) { + throw Object.defineProperty(new _invarianterror.InvariantError('A CacheSignal cannot subscribe to itself'), "__NEXT_ERROR_CODE", { + value: "E679", + enumerable: false, + configurable: true + }); + } + if (this.subscribedSignals === null) { + this.subscribedSignals = new Set(); + } + this.subscribedSignals.add(subscriber); + // we'll notify the subscriber of each endRead() on this signal, + // so we need to give it a corresponding beginRead() for each read we have in flight now. + for(let i = 0; i < this.count; i++){ + subscriber.beginRead(); + } + return this.unsubscribeFromReads.bind(this, subscriber); + } + unsubscribeFromReads(subscriber) { + if (!this.subscribedSignals) { + return; + } + this.subscribedSignals.delete(subscriber); + // we don't need to set the set back to `null` if it's empty -- + // if other signals are subscribing to this one, it'll likely get more subscriptions later, + // so we'd have to allocate a fresh set again when that happens. + } +} +function scheduleImmediateAndTimeoutWithCleanup(cb) { + // If we decide to clean up the timeout, we want to remove + // either the immediate or the timeout, whichever is still pending. + let clearPending; + const immediate = setImmediate(()=>{ + const timeout = setTimeout(cb, 0); + clearPending = clearTimeout.bind(null, timeout); + }); + clearPending = clearImmediate.bind(null, immediate); + return ()=>clearPending(); +} + +//# sourceMappingURL=cache-signal.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/collect-segment-data.js b/build/node_modules/next/dist/server/app-render/collect-segment-data.js new file mode 100644 index 0000000..a6f494a --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/collect-segment-data.js @@ -0,0 +1,616 @@ +/* eslint-disable @next/internal/no-ambiguous-jsx -- Bundled in entry-base so it gets the right JSX runtime. */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + collectPrefetchHints: null, + collectSegmentData: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + collectPrefetchHints: function() { + return collectPrefetchHints; + }, + collectSegmentData: function() { + return collectSegmentData; + } +}); +const _jsxruntime = require("react/jsx-runtime"); +const _approutertypes = require("../../shared/lib/app-router-types"); +const _varyparamsdecoding = require("../../shared/lib/segment-cache/vary-params-decoding"); +const _segment = require("../../shared/lib/segment"); +const _client = require("react-server-dom-webpack/client"); +const _static = require("react-server-dom-webpack/static"); +const _nodewebstreamshelper = require("../stream-utils/node-web-streams-helper"); +const _scheduler = require("../../lib/scheduler"); +const _segmentvalueencoding = require("../../shared/lib/segment-cache/segment-value-encoding"); +const _createerrorhandler = require("./create-error-handler"); +const _prospectiverenderutils = require("./prospective-render-utils"); +const _workasyncstorageexternal = require("./work-async-storage.external"); +const filterStackFrame = process.env.NODE_ENV !== 'production' ? require('../lib/source-maps').filterStackFrameDEV : undefined; +const findSourceMapURL = process.env.NODE_ENV !== 'production' ? require('../lib/source-maps').findSourceMapURLDEV : undefined; +function onSegmentPrerenderError(error) { + const digest = (0, _createerrorhandler.getDigestForWellKnownError)(error); + if (digest) { + return digest; + } + // We don't need to log the errors because we would have already done that + // when generating the original Flight stream for the whole page. + if (process.env.NEXT_DEBUG_BUILD || process.env.__NEXT_VERBOSE_LOGGING) { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + (0, _prospectiverenderutils.printDebugThrownValueForProspectiveRender)(error, (workStore == null ? void 0 : workStore.route) ?? 'unknown route', _prospectiverenderutils.Phase.SegmentCollection); + } +} +/** + * Extract the FlightRouterState, seed data, and head from a prerendered + * InitialRSCPayload. Returns null if the payload doesn't match the expected + * shape (single path with 3 elements). + */ function extractFlightData(initialRSCPayload) { + const flightDataPaths = initialRSCPayload.f; + // FlightDataPath is an unsound type, hence the additional checks. + if (flightDataPaths.length !== 1 && flightDataPaths[0].length !== 3) { + console.error('Internal Next.js error: InitialRSCPayload does not match the expected ' + 'shape for a prerendered page during segment prefetch generation.'); + return null; + } + return { + buildId: initialRSCPayload.b, + flightRouterState: flightDataPaths[0][0], + seedData: flightDataPaths[0][1], + head: flightDataPaths[0][2] + }; +} +async function collectSegmentData(isCacheComponentsEnabled, fullPageDataBuffer, staleTime, clientModules, serverConsumerManifest, prefetchInlining, hints) { + // Traverse the router tree and generate a prefetch response for each segment. + // A mutable map to collect the results as we traverse the route tree. + const resultMap = new Map(); + // Before we start, warm up the module cache by decoding the page data once. + // Then we can assume that any remaining async tasks that occur the next time + // are due to hanging promises caused by dynamic data access. Note we only + // have to do this once per page, not per individual segment. + // + try { + await (0, _client.createFromReadableStream)((0, _nodewebstreamshelper.streamFromBuffer)(fullPageDataBuffer), { + findSourceMapURL, + serverConsumerManifest + }); + await (0, _scheduler.waitAtLeastOneReactRenderTask)(); + } catch {} + // Create an abort controller that we'll use to stop the stream. + const abortController = new AbortController(); + const onCompletedProcessingRouteTree = async ()=>{ + // Since all we're doing is decoding and re-encoding a cached prerender, if + // serializing the stream takes longer than a microtask, it must because of + // hanging promises caused by dynamic data. + await (0, _scheduler.waitAtLeastOneReactRenderTask)(); + abortController.abort(); + }; + // Generate a stream for the route tree prefetch. While we're walking the + // tree, we'll also spawn additional tasks to generate the segment prefetches. + // The promises for these tasks are pushed to a mutable array that we will + // await once the route tree is fully rendered. + const segmentTasks = []; + const { prelude: treeStream } = await (0, _static.prerender)(// RootTreePrefetch is not a valid return type for a React component, but + // we need to use a component so that when we decode the original stream + // inside of it, the side effects are transferred to the new stream. + // @ts-expect-error + /*#__PURE__*/ (0, _jsxruntime.jsx)(PrefetchTreeData, { + isClientParamParsingEnabled: isCacheComponentsEnabled, + fullPageDataBuffer: fullPageDataBuffer, + serverConsumerManifest: serverConsumerManifest, + clientModules: clientModules, + staleTime: staleTime, + segmentTasks: segmentTasks, + onCompletedProcessingRouteTree: onCompletedProcessingRouteTree, + prefetchInlining: prefetchInlining, + hints: hints + }), clientModules, { + filterStackFrame, + signal: abortController.signal, + onError: onSegmentPrerenderError + }); + // Write the route tree to a special `/_tree` segment. + const treeBuffer = await (0, _nodewebstreamshelper.streamToBuffer)(treeStream); + resultMap.set('/_tree', treeBuffer); + // Also output the entire full page data response + resultMap.set('/_full', fullPageDataBuffer); + // Now that we've finished rendering the route tree, all the segment tasks + // should have been spawned. Await them in parallel and write the segment + // prefetches to the result map. + let hasPageSegment = false; + for (const [segmentPath, buffer] of (await Promise.all(segmentTasks))){ + resultMap.set(segmentPath, buffer); + if (segmentPath.endsWith('__PAGE__')) { + hasPageSegment = true; + } + } + if (!hasPageSegment) { + // The build requires at least one segment path ending with __PAGE__ to + // register the catch-all segment data route. When all page segments are + // disabled (e.g. every leaf has runtime prefetching), no __PAGE__ entry + // is emitted. Write a dummy entry with a path that doesn't match any + // real route segment so the client will never request it. + // + // TODO: Remove the __PAGE__ requirement from the build instead of + // working around it here. The invariant is outdated now that segments + // can be disabled. + resultMap.set('/todo-remove-fake-segment/__PAGE__', Buffer.alloc(0)); + } + return resultMap; +} +async function collectPrefetchHints(fullPageDataBuffer, staleTime, clientModules, serverConsumerManifest, maxSize, maxBundleSize) { + // Warm up the module cache, same as collectSegmentData. + try { + await (0, _client.createFromReadableStream)((0, _nodewebstreamshelper.streamFromBuffer)(fullPageDataBuffer), { + findSourceMapURL, + serverConsumerManifest + }); + await (0, _scheduler.waitAtLeastOneReactRenderTask)(); + } catch {} + // Decode the Flight data to walk the route tree. + const initialRSCPayload = await (0, _client.createFromReadableStream)(createUnclosingPrefetchStream((0, _nodewebstreamshelper.streamFromBuffer)(fullPageDataBuffer)), { + findSourceMapURL, + serverConsumerManifest + }); + const flightData = extractFlightData(initialRSCPayload); + if (flightData === null) { + return { + hints: 0, + slots: null + }; + } + const { buildId, flightRouterState, seedData, head } = flightData; + // Measure the head (metadata/viewport) gzip size so the main traversal + // can decide whether to inline it into a page's bundle. + const headVaryParamsThenable = initialRSCPayload.h; + const headVaryParams = headVaryParamsThenable !== null ? (0, _varyparamsdecoding.readVaryParams)(headVaryParamsThenable) : null; + const [, headBuffer] = await renderSegmentPrefetch(buildId, staleTime, head, _segmentvalueencoding.HEAD_REQUEST_KEY, headVaryParams, clientModules); + const headGzipSize = await getGzipSize(headBuffer); + // Mutable accumulator: the first page leaf that can fit the head sets + // this to true. Once set, subsequent leaves skip the check. + const headInlineState = { + inlined: false + }; + // Walk the tree with the parent-first, child-decides algorithm. + const { node } = await collectPrefetchHintsImpl(flightRouterState, buildId, staleTime, seedData, clientModules, _segmentvalueencoding.ROOT_SEGMENT_REQUEST_KEY, null, maxSize, maxBundleSize, headGzipSize, headInlineState); + if (!headInlineState.inlined) { + // No page could accept the head. Set HeadOutlined on the root so the + // client knows to fetch the head separately. + node.hints |= _approutertypes.PrefetchHint.HeadOutlined; + } + return node; +} +// Measure a segment's gzip size and decide whether it should be inlined. +// +// These hints are computed once during build and never change for the +// lifetime of that deployment. The client can assume that hints delivered as +// part of one request will be the same during a subsequent request, given +// the same build ID. There's no skew to worry about as long as the build +// itself is consistent. +// +// In the Segment Cache, we split page prefetches into multiple requests so +// that each one can be cached and deduped independently. However, some +// segments are small enough that the potential caching benefits are not worth +// the additional network overhead. For these, we inline a parent's data into +// one of its children's responses, avoiding a separate request. The parent +// is inlined into the child (not the other way around) because the parent's +// response is more likely to be shared across multiple pages. The child's +// response is already page-specific, so adding the parent's data there +// doesn't meaningfully reduce deduplication. It's similar to how JS bundlers +// decide whether to inline a module into a chunk. +// +// The algorithm is parent-first, child-decides: the parent measures itself +// and passes its gzip size down. Each child decides whether to accept. A +// child rejects if the parent exceeds maxSize or if accepting would push +// the cumulative inlined bytes past maxBundleSize. This produces +// both ParentInlinedIntoSelf (on the child) and InlinedIntoChild (on the +// parent) in a single pass. +async function collectPrefetchHintsImpl(route, buildId, staleTime, seedData, clientModules, // TODO: Consider persisting the computed requestKey into the hints output +// so it doesn't need to be recomputed during the build. This might also +// suggest renaming prefetch-hints.json to something like +// segment-manifest.json, since it would contain more than just hints. +requestKey, parentGzipSize, maxSize, maxBundleSize, headGzipSize, headInlineState) { + // Render current segment and measure its gzip size. + let currentGzipSize = null; + if (seedData !== null) { + const varyParamsThenable = seedData[4]; + const varyParams = varyParamsThenable !== null ? (0, _varyparamsdecoding.readVaryParams)(varyParamsThenable) : null; + const [, buffer] = await renderSegmentPrefetch(buildId, staleTime, seedData[0], requestKey, varyParams, clientModules); + currentGzipSize = await getGzipSize(buffer); + } + // Only offer this segment to its children for inlining if its gzip size + // is below maxSize. Segments above this get their own response. + const sizeToInline = currentGzipSize !== null && currentGzipSize < maxSize ? currentGzipSize : null; + // Process children serially (not in parallel) to ensure deterministic + // results. Since this only runs at build time and the rendering is just + // re-encoding cached prerenders, this won't impact build times. Each child + // receives our gzip size and decides whether to inline us. Once a child + // accepts, we stop offering to remaining siblings — the parent is only + // inlined into one child. In parallel routes, this avoids duplicating the + // parent's data across multiple sibling responses. + const children = route[1]; + const seedDataChildren = seedData !== null ? seedData[1] : null; + let slots = null; + let didInlineIntoChild = false; + let acceptingChildInlinedBytes = 0; + // Track the smallest inlinedBytes across all children so we know how much + // budget remains along the best path. When our own parent asks whether we + // can accept its data, the parent's bytes would flow through to the child + // with the most remaining headroom. + let smallestChildInlinedBytes = Infinity; + let hasChildren = false; + for(const parallelRouteKey in children){ + hasChildren = true; + const childRoute = children[parallelRouteKey]; + const childSegment = childRoute[0]; + const childSeedData = seedDataChildren !== null ? seedDataChildren[parallelRouteKey] : null; + const childRequestKey = (0, _segmentvalueencoding.appendSegmentRequestKeyPart)(requestKey, parallelRouteKey, (0, _segmentvalueencoding.createSegmentRequestKeyPart)(childSegment)); + const childResult = await collectPrefetchHintsImpl(childRoute, buildId, staleTime, childSeedData, clientModules, childRequestKey, // Once a child has accepted us, stop offering to remaining siblings. + didInlineIntoChild ? null : sizeToInline, maxSize, maxBundleSize, headGzipSize, headInlineState); + if (slots === null) { + slots = {}; + } + slots[parallelRouteKey] = childResult.node; + if (childResult.node.hints & _approutertypes.PrefetchHint.ParentInlinedIntoSelf) { + // This child accepted our data — it will include our segment's + // response in its own. No need to track headroom anymore since + // we already know which child we're inlined into. + didInlineIntoChild = true; + acceptingChildInlinedBytes = childResult.inlinedBytes; + } else if (!didInlineIntoChild) { + // Track the child with the most remaining headroom. Used below + // when deciding whether to accept our own parent's data. + if (childResult.inlinedBytes < smallestChildInlinedBytes) { + smallestChildInlinedBytes = childResult.inlinedBytes; + } + } + } + // Leaf segment: no children have consumed any budget yet. + if (!hasChildren) { + smallestChildInlinedBytes = 0; + } + // Mark this segment as InlinedIntoChild if one of its children accepted. + // This means this segment doesn't need its own prefetch response — its + // data is included in the accepting child's response instead. + let hints = 0; + if (didInlineIntoChild) { + hints |= _approutertypes.PrefetchHint.InlinedIntoChild; + } + // inlinedBytes represents the total gzipped bytes of parent data inlined + // into the deepest "inlining target" along this branch. It starts at 0 at + // the leaves and grows as parents are inlined going back up the tree. If a + // child accepted us, our size is already counted in that child's value. + let inlinedBytes = didInlineIntoChild ? acceptingChildInlinedBytes : smallestChildInlinedBytes; + // At leaf nodes (pages), try to inline the head (metadata/viewport) into + // this page's response. The head is treated like an additional inlined + // entry — it counts against the same total budget. Only the first page + // that has room gets the head; subsequent pages skip via the shared + // headInlineState accumulator. + if (!hasChildren && !headInlineState.inlined) { + if (inlinedBytes + headGzipSize < maxBundleSize) { + hints |= _approutertypes.PrefetchHint.HeadInlinedIntoSelf; + inlinedBytes += headGzipSize; + headInlineState.inlined = true; + } + } + // Decide whether to accept our own parent's data. Two conditions: + // + // 1. The parent offered us a size (parentGzipSize is not null). It's null + // when the parent is too large to inline or when this is the root. + // + // 2. The total inlined bytes along this branch wouldn't exceed the budget. + // Even if each segment is individually small, at some point it no + // longer makes sense to keep adding bytes because the combined response + // is unique per URL and can't be deduped. + // + // A node can be both InlinedIntoChild and ParentInlinedIntoSelf. This + // happens in multi-level chains: GP → P → C where all are small. C + // accepts P (P is InlinedIntoChild), then P also accepts GP (P is + // ParentInlinedIntoSelf). The result: C's response includes both P's + // and GP's data. The parent's data flows through to the deepest + // accepting descendant. + if (parentGzipSize !== null) { + if (inlinedBytes + parentGzipSize < maxBundleSize) { + hints |= _approutertypes.PrefetchHint.ParentInlinedIntoSelf; + inlinedBytes += parentGzipSize; + } + } + return { + node: { + hints, + slots + }, + inlinedBytes + }; +} +// We use gzip size rather than raw size because it better reflects the actual +// transfer cost. The inlining trade-off is about whether the overhead of an +// additional HTTP request (connection setup, headers, round trip) is worth +// the deduplication benefit of keeping a segment separate. Below some +// compressed size, the request overhead dominates and inlining is better. +// Above it, the deduplication benefit of a cacheable standalone response +// wins out. +async function getGzipSize(buffer) { + const stream = new Blob([ + new Uint8Array(buffer) + ]).stream().pipeThrough(new CompressionStream('gzip')); + const compressedBlob = await new Response(stream).blob(); + return compressedBlob.size; +} +async function PrefetchTreeData({ isClientParamParsingEnabled, fullPageDataBuffer, serverConsumerManifest, clientModules, staleTime, segmentTasks, onCompletedProcessingRouteTree, prefetchInlining, hints }) { + // We're currently rendering a Flight response for the route tree prefetch. + // Inside this component, decode the Flight stream for the whole page. This is + // a hack to transfer the side effects from the original Flight stream (e.g. + // Float preloads) onto the Flight stream for the tree prefetch. + // TODO: React needs a better way to do this. Needed for Server Actions, too. + const initialRSCPayload = await (0, _client.createFromReadableStream)(createUnclosingPrefetchStream((0, _nodewebstreamshelper.streamFromBuffer)(fullPageDataBuffer)), { + findSourceMapURL, + serverConsumerManifest + }); + const flightData = extractFlightData(initialRSCPayload); + if (flightData === null) { + return null; + } + const { buildId, flightRouterState, seedData, head } = flightData; + // Extract the head vary params from the decoded response. + // The head vary params thenable should be fulfilled by now; if not, treat + // as unknown (null). + const headVaryParamsThenable = initialRSCPayload.h; + const headVaryParams = headVaryParamsThenable !== null ? (0, _varyparamsdecoding.readVaryParams)(headVaryParamsThenable) : null; + // Compute the route metadata tree by traversing the FlightRouterState. As we + // walk the tree, we will also spawn a task to produce a prefetch response for + // each segment (unless prefetch inlining is enabled, in which case all + // segments are bundled into a single /_inlined response). + const tree = collectSegmentDataImpl(isClientParamParsingEnabled, flightRouterState, buildId, staleTime, seedData, clientModules, _segmentvalueencoding.ROOT_SEGMENT_REQUEST_KEY, segmentTasks, prefetchInlining, hints); + if (prefetchInlining) { + // When prefetch inlining is enabled, bundle all segment data into a single + // /_inlined response instead of individual per-segment responses. The head + // is also included in the inlined response. + segmentTasks.push((0, _scheduler.waitAtLeastOneReactRenderTask)().then(()=>renderInlinedPrefetchResponse(flightRouterState, buildId, staleTime, seedData, head, headVaryParams, clientModules))); + } else { + // Also spawn a task to produce a prefetch response for the "head" segment. + // The head contains metadata, like the title; it's not really a route + // segment, but it contains RSC data, so it's treated like a segment by + // the client cache. + segmentTasks.push((0, _scheduler.waitAtLeastOneReactRenderTask)().then(()=>renderSegmentPrefetch(buildId, staleTime, head, _segmentvalueencoding.HEAD_REQUEST_KEY, headVaryParams, clientModules))); + } + // Notify the abort controller that we're done processing the route tree. + // Anything async that happens after this point must be due to hanging + // promises in the original stream. + onCompletedProcessingRouteTree(); + // Render the route tree to a special `/_tree` segment. + const treePrefetch = { + tree, + staleTime + }; + if (buildId) { + treePrefetch.buildId = buildId; + } + return treePrefetch; +} +function collectSegmentDataImpl(isClientParamParsingEnabled, route, buildId, staleTime, seedData, clientModules, requestKey, segmentTasks, prefetchInlining, hintTree) { + // Metadata about the segment. Sent as part of the tree prefetch. Null if + // there are no children. + let slotMetadata = null; + const children = route[1]; + const seedDataChildren = seedData !== null ? seedData[1] : null; + for(const parallelRouteKey in children){ + const childRoute = children[parallelRouteKey]; + const childSegment = childRoute[0]; + const childSeedData = seedDataChildren !== null ? seedDataChildren[parallelRouteKey] : null; + const childRequestKey = (0, _segmentvalueencoding.appendSegmentRequestKeyPart)(requestKey, parallelRouteKey, (0, _segmentvalueencoding.createSegmentRequestKeyPart)(childSegment)); + const childHintTree = hintTree !== null && hintTree.slots !== null ? hintTree.slots[parallelRouteKey] ?? null : null; + const childTree = collectSegmentDataImpl(isClientParamParsingEnabled, childRoute, buildId, staleTime, childSeedData, clientModules, childRequestKey, segmentTasks, prefetchInlining, childHintTree); + if (slotMetadata === null) { + slotMetadata = {}; + } + slotMetadata[parallelRouteKey] = childTree; + } + // Union the hints already embedded in the FlightRouterState with the + // separately-computed build-time hints. During the initial build, the + // FlightRouterState was produced before collectPrefetchHints ran, so + // inlining hints (ParentInlinedIntoSelf, InlinedIntoChild) won't be in + // route[4] yet. On subsequent renders the hints are already in the + // FlightRouterState, so the union is idempotent. + const prefetchHints = (route[4] ?? 0) | (hintTree !== null ? hintTree.hints : 0); + // Determine which params this segment varies on. + // Read the vary params thenable directly from the seed data. By the time + // collectSegmentData runs, the thenable should be fulfilled. If it's not + // fulfilled or null, treat as unknown (null means we can't share cache + // entries across param values). + const varyParamsThenable = seedData !== null ? seedData[4] : null; + const varyParams = varyParamsThenable !== null ? (0, _varyparamsdecoding.readVaryParams)(varyParamsThenable) : null; + if (!prefetchInlining) { + // When prefetch inlining is disabled, spawn individual segment tasks. + // When enabled, segment data is bundled into the /_inlined response + // instead, so we skip per-segment tasks here. + if (seedData !== null) { + // Spawn a task to write the segment data to a new Flight stream. + segmentTasks.push(// Since we're already in the middle of a render, wait until after the + // current task to escape the current rendering context. + (0, _scheduler.waitAtLeastOneReactRenderTask)().then(()=>renderSegmentPrefetch(buildId, staleTime, seedData[0], requestKey, varyParams, clientModules))); + } else { + // This segment does not have any seed data. Skip generating a prefetch + // response for it. We'll still include it in the route tree, though. + // TODO: We should encode in the route tree whether a segment is missing + // so we don't attempt to fetch it for no reason. As of now this shouldn't + // ever happen in practice, though. + } + } + const segment = route[0]; + let name; + let param; + if (typeof segment === 'string') { + name = segment; + param = null; + } else { + name = segment[0]; + param = { + type: segment[2], + // This value is omitted from the prefetch response when cacheComponents + // is enabled. + key: isClientParamParsingEnabled ? null : segment[1], + siblings: segment[3] + }; + } + // Metadata about the segment. Sent to the client as part of the + // tree prefetch. + return { + name, + param, + prefetchHints, + slots: slotMetadata + }; +} +async function renderSegmentPrefetch(buildId, staleTime, rsc, requestKey, varyParams, clientModules) { + // Render the segment data to a stream. + const segmentPrefetch = { + rsc, + isPartial: await isPartialRSCData(rsc, clientModules), + staleTime, + varyParams + }; + if (buildId) { + segmentPrefetch.buildId = buildId; + } + // Since all we're doing is decoding and re-encoding a cached prerender, if + // it takes longer than a microtask, it must because of hanging promises + // caused by dynamic data. Abort the stream at the end of the current task. + const abortController = new AbortController(); + (0, _scheduler.waitAtLeastOneReactRenderTask)().then(()=>abortController.abort()); + const { prelude: segmentStream } = await (0, _static.prerender)(segmentPrefetch, clientModules, { + filterStackFrame, + signal: abortController.signal, + onError: onSegmentPrerenderError + }); + const segmentBuffer = await (0, _nodewebstreamshelper.streamToBuffer)(segmentStream); + if (requestKey === _segmentvalueencoding.ROOT_SEGMENT_REQUEST_KEY) { + return [ + '/_index', + segmentBuffer + ]; + } else { + return [ + requestKey, + segmentBuffer + ]; + } +} +async function renderInlinedPrefetchResponse(route, buildId, staleTime, seedData, head, headVaryParams, clientModules) { + // Build the inlined tree by walking the route and collecting all segments. + const inlinedTree = await buildInlinedSegmentPrefetch(route, buildId, staleTime, seedData, clientModules); + // Build the head segment. + const headPrefetch = { + rsc: head, + isPartial: await isPartialRSCData(head, clientModules), + staleTime, + varyParams: headVaryParams + }; + if (buildId) { + headPrefetch.buildId = buildId; + } + const response = { + tree: inlinedTree, + head: headPrefetch + }; + // Render as a single Flight response. + const abortController = new AbortController(); + (0, _scheduler.waitAtLeastOneReactRenderTask)().then(()=>abortController.abort()); + const { prelude } = await (0, _static.prerender)(response, clientModules, { + filterStackFrame, + signal: abortController.signal, + onError: onSegmentPrerenderError + }); + const buffer = await (0, _nodewebstreamshelper.streamToBuffer)(prelude); + return [ + '/' + _segment.PAGE_SEGMENT_KEY, + buffer + ]; +} +async function buildInlinedSegmentPrefetch(route, buildId, staleTime, seedData, clientModules) { + let slots = null; + const children = route[1]; + const seedDataChildren = seedData !== null ? seedData[1] : null; + for(const parallelRouteKey in children){ + const childRoute = children[parallelRouteKey]; + const childSeedData = seedDataChildren !== null ? seedDataChildren[parallelRouteKey] : null; + const childPrefetch = await buildInlinedSegmentPrefetch(childRoute, buildId, staleTime, childSeedData, clientModules); + if (slots === null) { + slots = {}; + } + slots[parallelRouteKey] = childPrefetch; + } + const rsc = seedData !== null ? seedData[0] : null; + const varyParamsThenable = seedData !== null ? seedData[4] : null; + const varyParams = varyParamsThenable !== null ? (0, _varyparamsdecoding.readVaryParams)(varyParamsThenable) : null; + const segment = { + rsc, + isPartial: rsc !== null ? await isPartialRSCData(rsc, clientModules) : true, + staleTime, + varyParams + }; + if (buildId) { + segment.buildId = buildId; + } + return { + segment, + slots + }; +} +async function isPartialRSCData(rsc, clientModules) { + // We can determine if a segment contains only partial data if it takes longer + // than a task to encode, because dynamic data is encoded as an infinite + // promise. We must do this in a separate Flight prerender from the one that + // actually generates the prefetch stream because we need to include + // `isPartial` in the stream itself. + let isPartial = false; + const abortController = new AbortController(); + (0, _scheduler.waitAtLeastOneReactRenderTask)().then(()=>{ + // If we haven't yet finished the outer task, then it must be because we + // accessed dynamic data. + isPartial = true; + abortController.abort(); + }); + await (0, _static.prerender)(rsc, clientModules, { + filterStackFrame, + signal: abortController.signal, + onError () {} + }); + return isPartial; +} +function createUnclosingPrefetchStream(originalFlightStream) { + // When PPR is enabled, prefetch streams may contain references that never + // resolve, because that's how we encode dynamic data access. In the decoded + // object returned by the Flight client, these are reified into hanging + // promises that suspend during render, which is effectively what we want. + // The UI resolves when it switches to the dynamic data stream + // (via useDeferredValue(dynamic, static)). + // + // However, the Flight implementation currently errors if the server closes + // the response before all the references are resolved. As a cheat to work + // around this, we wrap the original stream in a new stream that never closes, + // and therefore doesn't error. + const reader = originalFlightStream.getReader(); + return new ReadableStream({ + async pull (controller) { + while(true){ + const { done, value } = await reader.read(); + if (!done) { + // Pass to the target stream and keep consuming the Flight response + // from the server. + controller.enqueue(value); + continue; + } + // The server stream has closed. Exit, but intentionally do not close + // the target stream. + return; + } + } + }); +} + +//# sourceMappingURL=collect-segment-data.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/console-async-storage-instance.js b/build/node_modules/next/dist/server/app-render/console-async-storage-instance.js new file mode 100644 index 0000000..08cf1fa --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/console-async-storage-instance.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "consoleAsyncStorageInstance", { + enumerable: true, + get: function() { + return consoleAsyncStorageInstance; + } +}); +const _asynclocalstorage = require("./async-local-storage"); +const consoleAsyncStorageInstance = (0, _asynclocalstorage.createAsyncLocalStorage)(); + +//# sourceMappingURL=console-async-storage-instance.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/console-async-storage.external.js b/build/node_modules/next/dist/server/app-render/console-async-storage.external.js new file mode 100644 index 0000000..585c529 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/console-async-storage.external.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "consoleAsyncStorage", { + enumerable: true, + get: function() { + return _consoleasyncstorageinstance.consoleAsyncStorageInstance; + } +}); +const _consoleasyncstorageinstance = require("./console-async-storage-instance"); + +//# sourceMappingURL=console-async-storage.external.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/create-component-styles-and-scripts.js b/build/node_modules/next/dist/server/app-render/create-component-styles-and-scripts.js new file mode 100644 index 0000000..ccfd371 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/create-component-styles-and-scripts.js @@ -0,0 +1,33 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "createComponentStylesAndScripts", { + enumerable: true, + get: function() { + return createComponentStylesAndScripts; + } +}); +const _interopdefault = require("./interop-default"); +const _getcssinlinedlinktags = require("./get-css-inlined-link-tags"); +const _getassetquerystring = require("./get-asset-query-string"); +const _encodeuripath = require("../../shared/lib/encode-uri-path"); +const _rendercssresource = require("./render-css-resource"); +async function createComponentStylesAndScripts({ filePath, getComponent, injectedCSS, injectedJS, ctx }) { + const { componentMod: { createElement } } = ctx; + const { styles: entryCssFiles, scripts: jsHrefs } = (0, _getcssinlinedlinktags.getLinkAndScriptTags)(filePath, injectedCSS, injectedJS); + const styles = (0, _rendercssresource.renderCssResource)(entryCssFiles, ctx); + const scripts = jsHrefs ? jsHrefs.map((href, index)=>createElement('script', { + src: `${ctx.assetPrefix}/_next/${(0, _encodeuripath.encodeURIPath)(href)}${(0, _getassetquerystring.getAssetQueryString)(ctx, true)}`, + async: true, + key: `script-${index}` + })) : null; + const Comp = (0, _interopdefault.interopDefault)(await getComponent()); + return [ + Comp, + styles, + scripts + ]; +} + +//# sourceMappingURL=create-component-styles-and-scripts.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/create-component-tree.js b/build/node_modules/next/dist/server/app-render/create-component-tree.js new file mode 100644 index 0000000..c957576 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/create-component-tree.js @@ -0,0 +1,870 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createComponentTree: null, + getRootParams: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createComponentTree: function() { + return createComponentTree; + }, + getRootParams: function() { + return getRootParams; + } +}); +const _clientandserverreferences = require("../../lib/client-and-server-references"); +const _appdirmodule = require("../lib/app-dir-module"); +const _interopdefault = require("./interop-default"); +const _parseloadertree = require("../../shared/lib/router/utils/parse-loader-tree"); +const _createcomponentstylesandscripts = require("./create-component-styles-and-scripts"); +const _getlayerassets = require("./get-layer-assets"); +const _hasloadingcomponentintree = require("./has-loading-component-in-tree"); +const _patchfetch = require("../lib/patch-fetch"); +const _default = require("../../client/components/builtin/default"); +const _tracer = require("../lib/trace/tracer"); +const _constants = require("../lib/trace/constants"); +const _staticgenerationbailout = require("../../client/components/static-generation-bailout"); +const _workunitasyncstorageexternal = require("./work-unit-async-storage.external"); +const _varyparams = require("./vary-params"); +const _segment = require("../../shared/lib/segment"); +const _segmentexplorerpath = require("./segment-explorer-path"); +const _stagedrendering = require("./staged-rendering"); +function createComponentTree(props) { + return (0, _tracer.getTracer)().trace(_constants.NextNodeServerSpan.createComponentTree, { + spanName: 'build component tree' + }, ()=>createComponentTreeInternal(props, true)); +} +function errorMissingDefaultExport(pagePath, convention) { + const normalizedPagePath = pagePath === '/' ? '' : pagePath; + throw Object.defineProperty(new Error(`The default export is not a React Component in "${normalizedPagePath}/${convention}"`), "__NEXT_ERROR_CODE", { + value: "E45", + enumerable: false, + configurable: true + }); +} +const cacheNodeKey = 'c'; +async function createComponentTreeInternal({ loaderTree: tree, parentParams, parentOptionalCatchAllParamName, parentRuntimePrefetchable, rootLayoutIncluded, injectedCSS, injectedJS, injectedFontPreloadTags, ctx, missingSlots, preloadCallbacks, authInterrupts, MetadataOutlet, prerenderHTTPError }, isRoot) { + const { renderOpts: { nextConfigOutput, experimental, cacheComponents }, workStore, componentMod: { createElement, Fragment, SegmentViewNode, HTTPAccessFallbackBoundary, LayoutRouter, RenderFromTemplateContext, ClientPageRoot, ClientSegmentRoot, createServerSearchParamsForServerPage, createPrerenderSearchParamsForClientPage, createServerParamsForServerSegment, createPrerenderParamsForClientSegment, serverHooks: { DynamicServerError }, Postpone }, pagePath, getDynamicParamFromSegment, isPrefetch, query } = ctx; + const { page, conventionPath, segment, modules, parallelRoutes } = (0, _parseloadertree.parseLoaderTree)(tree); + const { layout, template, error, loading, 'not-found': notFound, forbidden, unauthorized } = modules; + const injectedCSSWithCurrentLayout = new Set(injectedCSS); + const injectedJSWithCurrentLayout = new Set(injectedJS); + const injectedFontPreloadTagsWithCurrentLayout = new Set(injectedFontPreloadTags); + const layerAssets = (0, _getlayerassets.getLayerAssets)({ + preloadCallbacks, + ctx, + layoutOrPagePath: conventionPath, + injectedCSS: injectedCSSWithCurrentLayout, + injectedJS: injectedJSWithCurrentLayout, + injectedFontPreloadTags: injectedFontPreloadTagsWithCurrentLayout + }); + const [Template, templateStyles, templateScripts] = template ? await (0, _createcomponentstylesandscripts.createComponentStylesAndScripts)({ + ctx, + filePath: template[1], + getComponent: template[0], + injectedCSS: injectedCSSWithCurrentLayout, + injectedJS: injectedJSWithCurrentLayout + }) : [ + Fragment + ]; + const [ErrorComponent, errorStyles, errorScripts] = error ? await (0, _createcomponentstylesandscripts.createComponentStylesAndScripts)({ + ctx, + filePath: error[1], + getComponent: error[0], + injectedCSS: injectedCSSWithCurrentLayout, + injectedJS: injectedJSWithCurrentLayout + }) : []; + const [Loading, loadingStyles, loadingScripts] = loading ? await (0, _createcomponentstylesandscripts.createComponentStylesAndScripts)({ + ctx, + filePath: loading[1], + getComponent: loading[0], + injectedCSS: injectedCSSWithCurrentLayout, + injectedJS: injectedJSWithCurrentLayout + }) : []; + const isLayout = typeof layout !== 'undefined'; + const isPage = typeof page !== 'undefined'; + const { mod: layoutOrPageMod, modType } = await (0, _tracer.getTracer)().trace(_constants.NextNodeServerSpan.getLayoutOrPageModule, { + hideSpan: !(isLayout || isPage), + spanName: 'resolve segment modules', + attributes: { + 'next.segment': segment + } + }, ()=>(0, _appdirmodule.getLayoutOrPageModule)(tree)); + /** + * Checks if the current segment is a root layout. + */ const rootLayoutAtThisLevel = isLayout && !rootLayoutIncluded; + /** + * Checks if the current segment or any level above it has a root layout. + */ const rootLayoutIncludedAtThisLevelOrAbove = rootLayoutIncluded || rootLayoutAtThisLevel; + const [NotFound, notFoundStyles] = notFound ? await (0, _createcomponentstylesandscripts.createComponentStylesAndScripts)({ + ctx, + filePath: notFound[1], + getComponent: notFound[0], + injectedCSS: injectedCSSWithCurrentLayout, + injectedJS: injectedJSWithCurrentLayout + }) : []; + const instantConfig = layoutOrPageMod ? layoutOrPageMod.unstable_instant : undefined; + const hasRuntimePrefetch = instantConfig && typeof instantConfig === 'object' ? instantConfig.prefetch === 'runtime' : false; + const isRuntimePrefetchable = hasRuntimePrefetch || parentRuntimePrefetchable; + const [Forbidden, forbiddenStyles] = authInterrupts && forbidden ? await (0, _createcomponentstylesandscripts.createComponentStylesAndScripts)({ + ctx, + filePath: forbidden[1], + getComponent: forbidden[0], + injectedCSS: injectedCSSWithCurrentLayout, + injectedJS: injectedJSWithCurrentLayout + }) : []; + const [Unauthorized, unauthorizedStyles] = authInterrupts && unauthorized ? await (0, _createcomponentstylesandscripts.createComponentStylesAndScripts)({ + ctx, + filePath: unauthorized[1], + getComponent: unauthorized[0], + injectedCSS: injectedCSSWithCurrentLayout, + injectedJS: injectedJSWithCurrentLayout + }) : []; + let dynamic = layoutOrPageMod == null ? void 0 : layoutOrPageMod.dynamic; + if (nextConfigOutput === 'export') { + if (!dynamic || dynamic === 'auto') { + dynamic = 'error'; + } else if (dynamic === 'force-dynamic') { + // force-dynamic is always incompatible with 'export'. We must interrupt the build + throw Object.defineProperty(new _staticgenerationbailout.StaticGenBailoutError(`Page with \`dynamic = "force-dynamic"\` couldn't be exported. \`output: "export"\` requires all pages be renderable statically because there is no runtime server to dynamically render routes in this output format. Learn more: https://nextjs.org/docs/app/building-your-application/deploying/static-exports`), "__NEXT_ERROR_CODE", { + value: "E527", + enumerable: false, + configurable: true + }); + } + } + if (typeof dynamic === 'string') { + // the nested most config wins so we only force-static + // if it's configured above any parent that configured + // otherwise + if (dynamic === 'error') { + workStore.dynamicShouldError = true; + } else if (dynamic === 'force-dynamic') { + workStore.forceDynamic = true; + // TODO: (PPR) remove this bailout once PPR is the default + if (workStore.isStaticGeneration && !experimental.isRoutePPREnabled) { + // If the postpone API isn't available, we can't postpone the render and + // therefore we can't use the dynamic API. + const err = Object.defineProperty(new DynamicServerError(`Page with \`dynamic = "force-dynamic"\` won't be rendered statically.`), "__NEXT_ERROR_CODE", { + value: "E585", + enumerable: false, + configurable: true + }); + workStore.dynamicUsageDescription = err.message; + workStore.dynamicUsageStack = err.stack; + throw err; + } + } else { + workStore.dynamicShouldError = false; + workStore.forceStatic = dynamic === 'force-static'; + } + } + if (typeof (layoutOrPageMod == null ? void 0 : layoutOrPageMod.fetchCache) === 'string') { + workStore.fetchCache = layoutOrPageMod == null ? void 0 : layoutOrPageMod.fetchCache; + } + if (typeof (layoutOrPageMod == null ? void 0 : layoutOrPageMod.revalidate) !== 'undefined') { + (0, _patchfetch.validateRevalidate)(layoutOrPageMod == null ? void 0 : layoutOrPageMod.revalidate, workStore.route); + } + if (typeof (layoutOrPageMod == null ? void 0 : layoutOrPageMod.revalidate) === 'number') { + const defaultRevalidate = layoutOrPageMod.revalidate; + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-runtime': + case 'prerender-legacy': + case 'prerender-ppr': + if (workUnitStore.revalidate > defaultRevalidate) { + workUnitStore.revalidate = defaultRevalidate; + } + break; + case 'request': + break; + // createComponentTree is not called for these stores: + case 'cache': + case 'private-cache': + case 'prerender-client': + case 'validation-client': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + if (!workStore.forceStatic && workStore.isStaticGeneration && defaultRevalidate === 0 && // If the postpone API isn't available, we can't postpone the render and + // therefore we can't use the dynamic API. + !experimental.isRoutePPREnabled) { + const dynamicUsageDescription = `revalidate: 0 configured ${segment}`; + workStore.dynamicUsageDescription = dynamicUsageDescription; + throw Object.defineProperty(new DynamicServerError(dynamicUsageDescription), "__NEXT_ERROR_CODE", { + value: "E1005", + enumerable: false, + configurable: true + }); + } + } + // Read unstable_dynamicStaleTime from page modules (not layouts) and track it on + // the store's stale field. This affects the segment cache stale time via + // the StaleTimeIterable. + if (isPage && typeof (layoutOrPageMod == null ? void 0 : layoutOrPageMod.unstable_dynamicStaleTime) === 'number') { + const pageStaleTime = layoutOrPageMod.unstable_dynamicStaleTime; + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-runtime': + case 'prerender-legacy': + case 'prerender-ppr': + if (workUnitStore.stale > pageStaleTime) { + workUnitStore.stale = pageStaleTime; + } + break; + case 'request': + if (workUnitStore.stale === undefined || workUnitStore.stale > pageStaleTime) { + workUnitStore.stale = pageStaleTime; + } + break; + // createComponentTree is not called for these stores: + case 'cache': + case 'private-cache': + case 'prerender-client': + case 'validation-client': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + } + const isStaticGeneration = workStore.isStaticGeneration; + // Assume the segment we're rendering contains only partial data if PPR is + // enabled and this is a statically generated response. This is used by the + // client Segment Cache after a prefetch to determine if it can skip the + // second request to fill in the dynamic data. + // + // It's OK for this to be `true` when the data is actually fully static, but + // it's not OK for this to be `false` when the data possibly contains holes. + // Although the value here is overly pessimistic, for prefetches, it will be + // replaced by a more specific value when the data is later processed into + // per-segment responses (see collect-segment-data.tsx) + // + // For dynamic requests, this must always be `false` because dynamic responses + // are never partial. + const isPossiblyPartialResponse = isStaticGeneration && experimental.isRoutePPREnabled === true; + const LayoutOrPage = layoutOrPageMod ? (0, _interopdefault.interopDefault)(layoutOrPageMod) : undefined; + /** + * The React Component to render. + */ let MaybeComponent = LayoutOrPage; + if (process.env.NODE_ENV === 'development' || isStaticGeneration) { + const { isValidElementType } = require('next/dist/compiled/react-is'); + if (typeof MaybeComponent !== 'undefined' && !isValidElementType(MaybeComponent)) { + errorMissingDefaultExport(pagePath, modType ?? 'page'); + } + if (typeof ErrorComponent !== 'undefined' && !isValidElementType(ErrorComponent)) { + errorMissingDefaultExport(pagePath, 'error'); + } + if (typeof Loading !== 'undefined' && !isValidElementType(Loading)) { + errorMissingDefaultExport(pagePath, 'loading'); + } + if (typeof NotFound !== 'undefined' && !isValidElementType(NotFound)) { + errorMissingDefaultExport(pagePath, 'not-found'); + } + if (typeof Forbidden !== 'undefined' && !isValidElementType(Forbidden)) { + errorMissingDefaultExport(pagePath, 'forbidden'); + } + if (typeof Unauthorized !== 'undefined' && !isValidElementType(Unauthorized)) { + errorMissingDefaultExport(pagePath, 'unauthorized'); + } + } + // Handle dynamic segment params. + const segmentParam = getDynamicParamFromSegment(tree); + // Create object holding the parent params and current params + let currentParams = parentParams; + if (segmentParam && segmentParam.value !== null) { + currentParams = { + ...parentParams, + [segmentParam.param]: segmentParam.value + }; + } + // Track optional catch-all params with no value (e.g., [[...slug]] at /). + // These params won't exist as properties on the params object, so vary + // params tracking needs to use a Proxy to detect access. We propagate this + // through the tree so that child segments (like __PAGE__) also know about + // the missing param. In practice, this only gets passed down one level — + // from the optional catch-all layout segment to the page segment — so it's + // always very close to the leaf of the tree. + const optionalCatchAllParamName = (segmentParam == null ? void 0 : segmentParam.type) === 'oc' && segmentParam.value === null ? segmentParam.param : parentOptionalCatchAllParamName; + // Resolve the segment param + const isSegmentViewEnabled = !!process.env.__NEXT_DEV_SERVER; + const dir = (process.env.NEXT_RUNTIME === 'edge' ? process.env.__NEXT_EDGE_PROJECT_DIR : ctx.renderOpts.dir) || ''; + const [notFoundElement, notFoundFilePath] = await createBoundaryConventionElement({ + ctx, + conventionName: 'not-found', + Component: NotFound, + styles: notFoundStyles, + tree + }); + const [forbiddenElement] = await createBoundaryConventionElement({ + ctx, + conventionName: 'forbidden', + Component: Forbidden, + styles: forbiddenStyles, + tree + }); + const [unauthorizedElement] = await createBoundaryConventionElement({ + ctx, + conventionName: 'unauthorized', + Component: Unauthorized, + styles: unauthorizedStyles, + tree + }); + // TODO: Combine this `map` traversal with the loop below that turns the array + // into an object. + const parallelRouteMap = await Promise.all(Object.keys(parallelRoutes).map(async (parallelRouteKey)=>{ + const isChildrenRouteKey = parallelRouteKey === 'children'; + const parallelRoute = parallelRoutes[parallelRouteKey]; + const notFoundComponent = isChildrenRouteKey ? notFoundElement : undefined; + const forbiddenComponent = isChildrenRouteKey ? forbiddenElement : undefined; + const unauthorizedComponent = isChildrenRouteKey ? unauthorizedElement : undefined; + // if we're prefetching and that there's a Loading component, we bail out + // otherwise we keep rendering for the prefetch. + // We also want to bail out if there's no Loading component in the tree. + let childCacheNodeSeedData = null; + if (// Before PPR, the way instant navigations work in Next.js is we + // prefetch everything up to the first route segment that defines a + // loading.tsx boundary. (We do the same if there's no loading + // boundary in the entire tree, because we don't want to prefetch too + // much) The rest of the tree is deferred until the actual navigation. + // It does not take into account whether the data is dynamic — even if + // the tree is completely static, it will still defer everything + // inside the loading boundary. + // + // This behavior predates PPR and is only relevant if the + // PPR flag is not enabled. + isPrefetch && (Loading || !(0, _hasloadingcomponentintree.hasLoadingComponentInTree)(parallelRoute)) && // The approach with PPR is different — loading.tsx behaves like a + // regular Suspense boundary and has no special behavior. + // + // With PPR, we prefetch as deeply as possible, and only defer when + // dynamic data is accessed. If so, we only defer the nearest parent + // Suspense boundary of the dynamic data access, regardless of whether + // the boundary is defined by loading.tsx or a normal + // component in userspace. + // + // NOTE: In practice this usually means we'll end up prefetching more + // than we were before PPR, which may or may not be considered a + // performance regression by some apps. The plan is to address this + // before General Availability of PPR by introducing granular + // per-segment fetching, so we can reuse as much of the tree as + // possible during both prefetches and dynamic navigations. But during + // the beta period, we should be clear about this trade off in our + // communications. + !experimental.isRoutePPREnabled) { + // Don't prefetch this child. This will trigger a lazy fetch by the + // client router. + } else { + // Create the child component + if (process.env.NODE_ENV === 'development' && missingSlots) { + var _parsedTree_conventionPath; + // When we detect the default fallback (which triggers a 404), we collect the missing slots + // to provide more helpful debug information during development mode. + const parsedTree = (0, _parseloadertree.parseLoaderTree)(parallelRoute); + if ((_parsedTree_conventionPath = parsedTree.conventionPath) == null ? void 0 : _parsedTree_conventionPath.endsWith(_default.PARALLEL_ROUTE_DEFAULT_PATH)) { + missingSlots.add(parallelRouteKey); + } + } + // The outer prerender catch already found the deepest segment whose + // HTTP fallback should replace the throwing page. When we reach that + // segment's `children` slot, render the fallback directly instead of + // descending back into the subtree that threw during deserialization. + // Like the other segment-level boundary props below, HTTP access + // fallbacks are attached to the default `children` slot, not to named + // parallel routes. + const shouldRenderPrerenderHTTPFallback = (prerenderHTTPError == null ? void 0 : prerenderHTTPError.boundaryTree) === tree && isChildrenRouteKey; + if (shouldRenderPrerenderHTTPFallback) { + let fallbackElement; + switch(prerenderHTTPError.triggeredStatus){ + case 404: + fallbackElement = notFoundElement; + break; + case 403: + fallbackElement = forbiddenElement; + break; + case 401: + fallbackElement = unauthorizedElement; + break; + default: + break; + } + if (fallbackElement) { + childCacheNodeSeedData = createSeedData(ctx, fallbackElement, {}, null, isPossiblyPartialResponse, false, _varyparams.emptyVaryParamsAccumulator); + } + } + if (childCacheNodeSeedData === null) { + const seedData = await createComponentTreeInternal({ + loaderTree: parallelRoute, + parentParams: currentParams, + parentOptionalCatchAllParamName: optionalCatchAllParamName, + parentRuntimePrefetchable: isRuntimePrefetchable, + rootLayoutIncluded: rootLayoutIncludedAtThisLevelOrAbove, + injectedCSS: injectedCSSWithCurrentLayout, + injectedJS: injectedJSWithCurrentLayout, + injectedFontPreloadTags: injectedFontPreloadTagsWithCurrentLayout, + ctx, + missingSlots, + preloadCallbacks, + authInterrupts, + // `StreamingMetadataOutlet` is used to conditionally throw. In the case of parallel routes we will have more than one page + // but we only want to throw on the first one. + MetadataOutlet: isChildrenRouteKey ? MetadataOutlet : null, + prerenderHTTPError + }, false); + childCacheNodeSeedData = seedData; + } + } + const templateNode = createElement(Template, null, createElement(RenderFromTemplateContext, null)); + const templateFilePath = (0, _segmentexplorerpath.getConventionPathByType)(tree, dir, 'template'); + const errorFilePath = (0, _segmentexplorerpath.getConventionPathByType)(tree, dir, 'error'); + const loadingFilePath = (0, _segmentexplorerpath.getConventionPathByType)(tree, dir, 'loading'); + const globalErrorFilePath = isRoot ? (0, _segmentexplorerpath.getConventionPathByType)(tree, dir, 'global-error') : undefined; + const wrappedErrorStyles = isSegmentViewEnabled && errorFilePath ? createElement(SegmentViewNode, { + type: 'error', + pagePath: errorFilePath + }, errorStyles) : errorStyles; + // Add a suffix to avoid conflict with the segment view node representing rendered file. + // existence: not-found.tsx@boundary + // rendered: not-found.tsx + const fileNameSuffix = _segmentexplorerpath.BOUNDARY_SUFFIX; + const segmentViewBoundaries = isSegmentViewEnabled ? createElement(Fragment, null, notFoundFilePath && createElement(SegmentViewNode, { + type: `${_segmentexplorerpath.BOUNDARY_PREFIX}not-found`, + pagePath: notFoundFilePath + fileNameSuffix + }), loadingFilePath && createElement(SegmentViewNode, { + type: `${_segmentexplorerpath.BOUNDARY_PREFIX}loading`, + pagePath: loadingFilePath + fileNameSuffix + }), errorFilePath && createElement(SegmentViewNode, { + type: `${_segmentexplorerpath.BOUNDARY_PREFIX}error`, + pagePath: errorFilePath + fileNameSuffix + }), globalErrorFilePath && createElement(SegmentViewNode, { + type: `${_segmentexplorerpath.BOUNDARY_PREFIX}global-error`, + pagePath: (0, _segmentexplorerpath.isNextjsBuiltinFilePath)(globalErrorFilePath) ? `${_segmentexplorerpath.BUILTIN_PREFIX}global-error.js${fileNameSuffix}` : globalErrorFilePath + })) : null; + return [ + parallelRouteKey, + createElement(LayoutRouter, { + parallelRouterKey: parallelRouteKey, + error: ErrorComponent, + errorStyles: wrappedErrorStyles, + errorScripts: errorScripts, + template: isSegmentViewEnabled && templateFilePath ? createElement(SegmentViewNode, { + type: 'template', + pagePath: templateFilePath + }, templateNode) : templateNode, + templateStyles: templateStyles, + templateScripts: templateScripts, + notFound: notFoundComponent, + forbidden: forbiddenComponent, + unauthorized: unauthorizedComponent, + ...isSegmentViewEnabled && { + segmentViewBoundaries + } + }), + childCacheNodeSeedData + ]; + })); + // Convert the parallel route map into an object after all promises have been resolved. + let parallelRouteProps = {}; + let parallelRouteCacheNodeSeedData = {}; + for (const parallelRoute of parallelRouteMap){ + const [parallelRouteKey, parallelRouteProp, flightData] = parallelRoute; + parallelRouteProps[parallelRouteKey] = parallelRouteProp; + parallelRouteCacheNodeSeedData[parallelRouteKey] = flightData; + } + let loadingElement = Loading ? createElement(Loading, { + key: 'l' + }) : null; + const loadingFilePath = (0, _segmentexplorerpath.getConventionPathByType)(tree, dir, 'loading'); + if (isSegmentViewEnabled && loadingElement) { + if (loadingFilePath) { + loadingElement = createElement(SegmentViewNode, { + key: cacheNodeKey + '-loading', + type: 'loading', + pagePath: loadingFilePath + }, loadingElement); + } + } + const loadingData = loadingElement ? [ + loadingElement, + loadingStyles, + loadingScripts + ] : null; + // When the segment does not have a layout or page we still have to add the layout router to ensure the path holds the loading component + if (!MaybeComponent) { + return createSeedData(ctx, createElement(Fragment, { + key: cacheNodeKey + }, layerAssets, parallelRouteProps.children), parallelRouteCacheNodeSeedData, loadingData, isPossiblyPartialResponse, isRuntimePrefetchable, // No user-provided component, so no params will be accessed. Use the + // pre-resolved empty tracker. + _varyparams.emptyVaryParamsAccumulator); + } + const Component = MaybeComponent; + // If force-dynamic is used and the current render supports postponing, we + // replace it with a node that will postpone the render. This ensures that the + // postpone is invoked during the react render phase and not during the next + // render phase. + // @TODO this does not actually do what it seems like it would or should do. The idea is that + // if we are rendering in a force-dynamic mode and we can postpone we should only make the segments + // that ask for force-dynamic to be dynamic, allowing other segments to still prerender. However + // because this comes after the children traversal and the static generation store is mutated every segment + // along the parent path of a force-dynamic segment will hit this condition effectively making the entire + // render force-dynamic. We should refactor this function so that we can correctly track which segments + // need to be dynamic + if (workStore.isStaticGeneration && workStore.forceDynamic && experimental.isRoutePPREnabled) { + return createSeedData(ctx, createElement(Fragment, { + key: cacheNodeKey + }, createElement(Postpone, { + reason: 'dynamic = "force-dynamic" was used', + route: workStore.route + }), layerAssets), parallelRouteCacheNodeSeedData, loadingData, true, isRuntimePrefetchable, // force-dynamic postpones without rendering the component, so no params + // are accessed. The vary params are empty. + _varyparams.emptyVaryParamsAccumulator); + } + const isClientComponent = (0, _clientandserverreferences.isClientReference)(layoutOrPageMod); + const varyParamsAccumulator = isClientComponent && cacheComponents ? // from the server, so they have an empty vary params set. + _varyparams.emptyVaryParamsAccumulator : (0, _varyparams.createVaryParamsAccumulator)(); + if (process.env.NODE_ENV === 'development' && 'params' in parallelRouteProps) { + // @TODO consider making this an error and running the check in build as well + console.error(`"params" is a reserved prop in Layouts and Pages and cannot be used as the name of a parallel route in ${segment}`); + } + if (isPage) { + const PageComponent = Component; + // Assign searchParams to props if this is a page + let pageElement; + if (isClientComponent) { + if (cacheComponents) { + // Params are omitted when Cache Components is enabled + pageElement = createElement(ClientPageRoot, { + Component: PageComponent, + serverProvidedParams: null + }); + } else if (isStaticGeneration) { + const promiseOfParams = createPrerenderParamsForClientSegment(currentParams); + const promiseOfSearchParams = createPrerenderSearchParamsForClientPage(); + pageElement = createElement(ClientPageRoot, { + Component: PageComponent, + serverProvidedParams: { + searchParams: query, + params: currentParams, + promises: [ + promiseOfSearchParams, + promiseOfParams + ] + } + }); + } else { + pageElement = createElement(ClientPageRoot, { + Component: PageComponent, + serverProvidedParams: { + searchParams: query, + params: currentParams, + promises: null + } + }); + } + } else { + // If we are passing params to a server component Page we need to track + // their usage in case the current render mode tracks dynamic API usage. + const params = createServerParamsForServerSegment(currentParams, optionalCatchAllParamName, varyParamsAccumulator, isRuntimePrefetchable); + // If we are passing searchParams to a server component Page we need to + // track their usage in case the current render mode tracks dynamic API + // usage. + let searchParams = createServerSearchParamsForServerPage(query, varyParamsAccumulator, isRuntimePrefetchable); + if ((0, _clientandserverreferences.isUseCacheFunction)(PageComponent)) { + const UseCachePageComponent = PageComponent; + pageElement = createElement(UseCachePageComponent, { + params: params, + searchParams: searchParams, + $$isPage: true + }); + } else { + pageElement = createElement(PageComponent, { + params: params, + searchParams: searchParams + }); + } + } + const isDefaultSegment = segment === _segment.DEFAULT_SEGMENT_KEY; + const pageFilePath = (0, _segmentexplorerpath.getConventionPathByType)(tree, dir, 'page') ?? (0, _segmentexplorerpath.getConventionPathByType)(tree, dir, 'defaultPage'); + const segmentType = isDefaultSegment ? 'default' : 'page'; + const wrappedPageElement = isSegmentViewEnabled && pageFilePath ? createElement(SegmentViewNode, { + key: cacheNodeKey + '-' + segmentType, + type: segmentType, + pagePath: pageFilePath + }, pageElement) : pageElement; + return createSeedData(ctx, createElement(Fragment, { + key: cacheNodeKey + }, wrappedPageElement, layerAssets, MetadataOutlet ? createElement(MetadataOutlet, null) : null), parallelRouteCacheNodeSeedData, loadingData, isPossiblyPartialResponse, isRuntimePrefetchable, varyParamsAccumulator); + } else { + const SegmentComponent = Component; + const isRootLayoutWithChildrenSlotAndAtLeastOneMoreSlot = rootLayoutAtThisLevel && 'children' in parallelRoutes && Object.keys(parallelRoutes).length > 1; + let segmentNode; + if (isClientComponent) { + let clientSegment; + if (cacheComponents) { + // Params are omitted when Cache Components is enabled + clientSegment = createElement(ClientSegmentRoot, { + Component: SegmentComponent, + slots: parallelRouteProps, + serverProvidedParams: null + }); + } else if (isStaticGeneration) { + const promiseOfParams = createPrerenderParamsForClientSegment(currentParams); + clientSegment = createElement(ClientSegmentRoot, { + Component: SegmentComponent, + slots: parallelRouteProps, + serverProvidedParams: { + params: currentParams, + promises: [ + promiseOfParams + ] + } + }); + } else { + clientSegment = createElement(ClientSegmentRoot, { + Component: SegmentComponent, + slots: parallelRouteProps, + serverProvidedParams: { + params: currentParams, + promises: null + } + }); + } + if (isRootLayoutWithChildrenSlotAndAtLeastOneMoreSlot) { + let notfoundClientSegment; + let forbiddenClientSegment; + let unauthorizedClientSegment; + // TODO-APP: This is a hack to support unmatched parallel routes, which will throw `notFound()`. + // This ensures that a `HTTPAccessFallbackBoundary` is available for when that happens, + // but it's not ideal, as it needlessly invokes the `NotFound` component and renders the `RootLayout` twice. + // We should instead look into handling the fallback behavior differently in development mode so that it doesn't + // rely on the `NotFound` behavior. + notfoundClientSegment = createErrorBoundaryClientSegmentRoot({ + ctx, + ErrorBoundaryComponent: NotFound, + errorElement: notFoundElement, + ClientSegmentRoot, + layerAssets, + SegmentComponent, + currentParams + }); + forbiddenClientSegment = createErrorBoundaryClientSegmentRoot({ + ctx, + ErrorBoundaryComponent: Forbidden, + errorElement: forbiddenElement, + ClientSegmentRoot, + layerAssets, + SegmentComponent, + currentParams + }); + unauthorizedClientSegment = createErrorBoundaryClientSegmentRoot({ + ctx, + ErrorBoundaryComponent: Unauthorized, + errorElement: unauthorizedElement, + ClientSegmentRoot, + layerAssets, + SegmentComponent, + currentParams + }); + if (notfoundClientSegment || forbiddenClientSegment || unauthorizedClientSegment) { + segmentNode = createElement(HTTPAccessFallbackBoundary, { + key: cacheNodeKey, + notFound: notfoundClientSegment, + forbidden: forbiddenClientSegment, + unauthorized: unauthorizedClientSegment + }, layerAssets, clientSegment); + } else { + segmentNode = createElement(Fragment, { + key: cacheNodeKey + }, layerAssets, clientSegment); + } + } else { + segmentNode = createElement(Fragment, { + key: cacheNodeKey + }, layerAssets, clientSegment); + } + } else { + const params = createServerParamsForServerSegment(currentParams, optionalCatchAllParamName, varyParamsAccumulator, isRuntimePrefetchable); + let serverSegment; + if ((0, _clientandserverreferences.isUseCacheFunction)(SegmentComponent)) { + const UseCacheLayoutComponent = SegmentComponent; + serverSegment = createElement(UseCacheLayoutComponent, { + ...parallelRouteProps, + params: params, + $$isLayout: true + }, // Force static children here so that they're validated. + // See https://github.com/facebook/react/pull/34846 + parallelRouteProps.children); + } else { + serverSegment = createElement(SegmentComponent, { + ...parallelRouteProps, + params: params + }, // Force static children here so that they're validated. + // See https://github.com/facebook/react/pull/34846 + parallelRouteProps.children); + } + if (isRootLayoutWithChildrenSlotAndAtLeastOneMoreSlot) { + // TODO-APP: This is a hack to support unmatched parallel routes, which will throw `notFound()`. + // This ensures that a `HTTPAccessFallbackBoundary` is available for when that happens, + // but it's not ideal, as it needlessly invokes the `NotFound` component and renders the `RootLayout` twice. + // We should instead look into handling the fallback behavior differently in development mode so that it doesn't + // rely on the `NotFound` behavior. + segmentNode = createElement(HTTPAccessFallbackBoundary, { + key: cacheNodeKey, + notFound: notFoundElement ? createElement(Fragment, null, layerAssets, createElement(SegmentComponent, { + params: params + }, notFoundStyles, notFoundElement)) : undefined + }, layerAssets, serverSegment); + } else { + segmentNode = createElement(Fragment, { + key: cacheNodeKey + }, layerAssets, serverSegment); + } + } + const layoutFilePath = (0, _segmentexplorerpath.getConventionPathByType)(tree, dir, 'layout'); + const wrappedSegmentNode = isSegmentViewEnabled && layoutFilePath ? createElement(SegmentViewNode, { + key: 'layout', + type: 'layout', + pagePath: layoutFilePath + }, segmentNode) : segmentNode; + // For layouts we just render the component + return createSeedData(ctx, wrappedSegmentNode, parallelRouteCacheNodeSeedData, loadingData, isPossiblyPartialResponse, isRuntimePrefetchable, varyParamsAccumulator); + } +} +function createErrorBoundaryClientSegmentRoot({ ctx, ErrorBoundaryComponent, errorElement, ClientSegmentRoot, layerAssets, SegmentComponent, currentParams }) { + const { componentMod: { createElement, Fragment } } = ctx; + if (ErrorBoundaryComponent) { + const notFoundParallelRouteProps = { + children: errorElement + }; + return createElement(Fragment, null, layerAssets, createElement(ClientSegmentRoot, { + Component: SegmentComponent, + slots: notFoundParallelRouteProps, + params: currentParams + })); + } + return null; +} +function getRootParams(loaderTree, getDynamicParamFromSegment) { + return getRootParamsImpl({}, loaderTree, getDynamicParamFromSegment); +} +function getRootParamsImpl(parentParams, loaderTree, getDynamicParamFromSegment) { + const { modules: { layout }, parallelRoutes } = (0, _parseloadertree.parseLoaderTree)(loaderTree); + const segmentParam = getDynamicParamFromSegment(loaderTree); + let currentParams = parentParams; + if (segmentParam && segmentParam.value !== null) { + currentParams = { + ...parentParams, + [segmentParam.param]: segmentParam.value + }; + } + const isRootLayout = typeof layout !== 'undefined'; + if (isRootLayout) { + return currentParams; + } else if (!parallelRoutes.children) { + // This should really be an error but there are bugs in Turbopack that cause + // the _not-found LoaderTree to not have any layouts. For rootParams sake + // this is somewhat irrelevant when you are not customizing the 404 page. + // If you are customizing 404 + // TODO update rootParams to make all params optional if `/app/not-found.tsx` is defined + return currentParams; + } else { + return getRootParamsImpl(currentParams, // We stop looking for root params as soon as we hit the first layout + // and it is not possible to use parallel route children above the root layout + // so every parallelRoutes object that this function can visit will necessarily + // have a single `children` prop and no others. + parallelRoutes.children, getDynamicParamFromSegment); + } +} +async function createBoundaryConventionElement({ ctx, conventionName, Component, styles, tree }) { + const { componentMod: { createElement, Fragment } } = ctx; + const isSegmentViewEnabled = !!process.env.__NEXT_DEV_SERVER; + const dir = (process.env.NEXT_RUNTIME === 'edge' ? process.env.__NEXT_EDGE_PROJECT_DIR : ctx.renderOpts.dir) || ''; + const { SegmentViewNode } = ctx.componentMod; + const element = Component ? createElement(Fragment, null, createElement(Component, null), styles) : undefined; + const pagePath = (0, _segmentexplorerpath.getConventionPathByType)(tree, dir, conventionName); + const wrappedElement = isSegmentViewEnabled && element ? createElement(SegmentViewNode, { + key: cacheNodeKey + '-' + conventionName, + type: conventionName, + // TODO: Discovered when moving to `createElement`. + // `SegmentViewNode` doesn't support undefined `pagePath` + pagePath: pagePath + }, element) : element; + return [ + wrappedElement, + pagePath + ]; +} +function createSeedData(ctx, rsc, parallelRoutes, loading, isPossiblyPartialResponse, isRuntimePrefetchable, varyParamsAccumulator) { + const createElement = ctx.componentMod.createElement; + // When this segment is NOT runtime-prefetchable, delay it until the Static + // stage by wrapping the node in a promise. This allows runtime-prefetchable + // segments (the lower tree) to render first during EarlyStatic, so their + // runtime data resolves in EarlyRuntime where sync IO can be checked. + // React will suspend on the thenable and resume when the stage advances. + if (!isRuntimePrefetchable) { + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workUnitStore) { + let stagedRendering; + switch(workUnitStore.type){ + case 'request': + case 'prerender-runtime': + stagedRendering = workUnitStore.stagedRendering; + if (stagedRendering) { + const deferredRsc = rsc; + rsc = stagedRendering.waitForStage(_stagedrendering.RenderStage.Static).then(()=>deferredRsc); + } + break; + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-ppr': + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + } + if (loading !== null) { + // If a loading.tsx boundary is present, wrap the component data in an + // additional context provider to pass the loading data to the next + // set of children. + // NOTE: The reason this is a separate wrapper from LayoutRouter is because + // not all segments render a LayoutRouter component, e.g. the root segment. + const LoadingBoundaryProvider = ctx.componentMod.LoadingBoundaryProvider; + rsc = createElement(LoadingBoundaryProvider, { + loading: loading, + children: rsc + }); + } + return [ + rsc, + parallelRoutes, + null, + isPossiblyPartialResponse, + varyParamsAccumulator ? (0, _varyparams.getVaryParamsThenable)(varyParamsAccumulator) : null + ]; +} + +//# sourceMappingURL=create-component-tree.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/create-error-handler.js b/build/node_modules/next/dist/server/app-render/create-error-handler.js new file mode 100644 index 0000000..cfe112f --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/create-error-handler.js @@ -0,0 +1,189 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createHTMLErrorHandler: null, + createReactServerErrorHandler: null, + getDigestForWellKnownError: null, + isUserLandError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createHTMLErrorHandler: function() { + return createHTMLErrorHandler; + }, + createReactServerErrorHandler: function() { + return createReactServerErrorHandler; + }, + getDigestForWellKnownError: function() { + return getDigestForWellKnownError; + }, + isUserLandError: function() { + return isUserLandError; + } +}); +const _stringhash = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/string-hash")); +const _formatservererror = require("../../lib/format-server-error"); +const _tracer = require("../lib/trace/tracer"); +const _pipereadable = require("../pipe-readable"); +const _bailouttocsr = require("../../shared/lib/lazy-dynamic/bailout-to-csr"); +const _hooksservercontext = require("../../client/components/hooks-server-context"); +const _isnextroutererror = require("../../client/components/is-next-router-error"); +const _dynamicrendering = require("./dynamic-rendering"); +const _iserror = require("../../lib/is-error"); +const _errortelemetryutils = require("../../lib/error-telemetry-utils"); +const _reactlargeshellerror = require("./react-large-shell-error"); +const _instantvalidationerror = require("./instant-validation/instant-validation-error"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function getDigestForWellKnownError(error) { + // If we're bailing out to CSR, we don't need to log the error. + if ((0, _bailouttocsr.isBailoutToCSRError)(error)) return error.digest; + // If this is a navigation error, we don't need to log the error. + if ((0, _isnextroutererror.isNextRouterError)(error)) return error.digest; + // If this error occurs, we know that we should be stopping the static + // render. This is only thrown in static generation when PPR is not enabled, + // which causes the whole page to be marked as dynamic. We don't need to + // tell the user about this error, as it's not actionable. + if ((0, _hooksservercontext.isDynamicServerError)(error)) return error.digest; + // If this is a prerender interrupted error, we don't need to log the error. + if ((0, _dynamicrendering.isPrerenderInterruptedError)(error)) return error.digest; + if ((0, _instantvalidationerror.isInstantValidationError)(error)) return error.digest; + return undefined; +} +function createReactServerErrorHandler(shouldFormatError, isBuildTimePrerendering, reactServerErrors, onReactServerRenderError, spanToRecordOn) { + return (thrownValue)=>{ + var _err_message; + if (typeof thrownValue === 'string') { + // TODO-APP: look at using webcrypto instead. Requires a promise to be awaited. + return (0, _stringhash.default)(thrownValue).toString(); + } + // If the response was closed, we don't need to log the error. + if ((0, _pipereadable.isAbortError)(thrownValue)) return; + const digest = getDigestForWellKnownError(thrownValue); + if (digest) { + return digest; + } + if ((0, _reactlargeshellerror.isReactLargeShellError)(thrownValue)) { + // TODO: Aggregate + console.error(thrownValue); + return undefined; + } + let err = (0, _iserror.getProperError)(thrownValue); + let silenceLog = false; + // If the error already has a digest, respect the original digest, + // so it won't get re-generated into another new error. + if (err.digest) { + if (process.env.NODE_ENV === 'production' && reactServerErrors.has(err.digest)) { + // This error is likely an obfuscated error from another react-server + // environment (e.g. 'use cache'). We recover the original error here + // for reporting purposes. + err = reactServerErrors.get(err.digest); + // We don't log it again though, as it was already logged in the + // original environment. + silenceLog = true; + } else { + // Either we're in development (where we want to keep the transported + // error with environmentName), or the error is not in reactServerErrors + // but has a digest from other means. Keep the error as-is. + } + } else { + err.digest = (0, _errortelemetryutils.createDigestWithErrorCode)(err, // TODO-APP: look at using webcrypto instead. Requires a promise to be awaited. + (0, _stringhash.default)(err.message + (err.stack || '')).toString()); + } + // @TODO by putting this here and not at the top it is possible that + // we don't error the build in places we actually expect to + if (!reactServerErrors.has(err.digest)) { + reactServerErrors.set(err.digest, err); + } + // Format server errors in development to add more helpful error messages + if (shouldFormatError) { + (0, _formatservererror.formatServerError)(err); + } + // Don't log the suppressed error during export + if (!(isBuildTimePrerendering && (err == null ? void 0 : (_err_message = err.message) == null ? void 0 : _err_message.includes('The specific message is omitted in production builds to avoid leaking sensitive details.')))) { + // Record exception on the provided span if available, otherwise try active span. + const span = spanToRecordOn ?? (0, _tracer.getTracer)().getActiveScopeSpan(); + if (span) { + span.recordException(err); + span.setAttribute('error.type', err.name); + span.setStatus({ + code: _tracer.SpanStatusCode.ERROR, + message: err.message + }); + } + onReactServerRenderError(err, silenceLog); + } + return err.digest; + }; +} +function createHTMLErrorHandler(shouldFormatError, isBuildTimePrerendering, reactServerErrors, allCapturedErrors, onHTMLRenderSSRError, spanToRecordOn) { + return (thrownValue, errorInfo)=>{ + var _err_message; + if ((0, _reactlargeshellerror.isReactLargeShellError)(thrownValue)) { + // TODO: Aggregate + console.error(thrownValue); + return undefined; + } + let isSSRError = true; + allCapturedErrors.push(thrownValue); + // If the response was closed, we don't need to log the error. + if ((0, _pipereadable.isAbortError)(thrownValue)) return; + const digest = getDigestForWellKnownError(thrownValue); + if (digest) { + return digest; + } + const err = (0, _iserror.getProperError)(thrownValue); + // If the error already has a digest, respect the original digest, + // so it won't get re-generated into another new error. + if (err.digest) { + if (reactServerErrors.has(err.digest)) { + // This error is likely an obfuscated error from react-server. + // We recover the original error here. + thrownValue = reactServerErrors.get(err.digest); + isSSRError = false; + } else { + // The error is not from react-server but has a digest + // from other means so we don't need to produce a new one + } + } else { + err.digest = (0, _errortelemetryutils.createDigestWithErrorCode)(err, (0, _stringhash.default)(err.message + ((errorInfo == null ? void 0 : errorInfo.componentStack) || err.stack || '')).toString()); + } + // Format server errors in development to add more helpful error messages + if (shouldFormatError) { + (0, _formatservererror.formatServerError)(err); + } + // Don't log the suppressed error during export + if (!(isBuildTimePrerendering && (err == null ? void 0 : (_err_message = err.message) == null ? void 0 : _err_message.includes('The specific message is omitted in production builds to avoid leaking sensitive details.')))) { + // HTML errors contain RSC errors as well, filter them out before reporting + if (isSSRError) { + // Record exception on the provided span if available, otherwise try active span. + const span = spanToRecordOn ?? (0, _tracer.getTracer)().getActiveScopeSpan(); + if (span) { + span.recordException(err); + span.setAttribute('error.type', err.name); + span.setStatus({ + code: _tracer.SpanStatusCode.ERROR, + message: err.message + }); + } + onHTMLRenderSSRError(err, errorInfo); + } + } + return err.digest; + }; +} +function isUserLandError(err) { + return !(0, _pipereadable.isAbortError)(err) && !(0, _bailouttocsr.isBailoutToCSRError)(err) && !(0, _isnextroutererror.isNextRouterError)(err); +} + +//# sourceMappingURL=create-error-handler.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/create-flight-router-state-from-loader-tree.js b/build/node_modules/next/dist/server/app-render/create-flight-router-state-from-loader-tree.js new file mode 100644 index 0000000..c3e5328 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/create-flight-router-state-from-loader-tree.js @@ -0,0 +1,102 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createFlightRouterStateFromLoaderTree: null, + createRouteTreePrefetch: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createFlightRouterStateFromLoaderTree: function() { + return createFlightRouterStateFromLoaderTree; + }, + createRouteTreePrefetch: function() { + return createRouteTreePrefetch; + } +}); +const _approutertypes = require("../../shared/lib/app-router-types"); +const _segment = require("../../shared/lib/segment"); +async function createFlightRouterStateFromLoaderTreeImpl(loaderTree, hintTree, getDynamicParamFromSegment, searchParams, didFindRootLayout) { + const [segment, parallelRoutes, { layout, loading, page }] = loaderTree; + const dynamicParam = getDynamicParamFromSegment(loaderTree); + const treeSegment = dynamicParam ? dynamicParam.treeSegment : segment; + const segmentTree = [ + (0, _segment.addSearchParamsIfPageSegment)(treeSegment, searchParams), + {} + ]; + // Load the layout or page module to check for unstable_instant config + const mod = layout ? await layout[0]() : page ? await page[0]() : undefined; + const instantConfig = mod ? mod.unstable_instant : undefined; + let prefetchHints = 0; + // Union in the precomputed build-time hints (e.g. segment inlining + // decisions) if available. When hints are not available (e.g. dev mode or + // if prefetch-hints.json was not generated), we fall through and still + // compute the other hints below. In the future this should be a build + // error, but for now we gracefully degrade. + // + // TODO: Move more of the hints computation (IsRootLayout, instant config, + // loading boundary detection) into the build-time measurement step in + // collectPrefetchHints, so this function only needs to union the + // precomputed bitmask rather than re-derive hints on every render. + if (hintTree !== null) { + prefetchHints |= hintTree.hints; + } + // Mark the first segment that has a layout as the "root" layout + if (!didFindRootLayout && typeof layout !== 'undefined') { + didFindRootLayout = true; + prefetchHints |= _approutertypes.PrefetchHint.IsRootLayout; + } + if (instantConfig && typeof instantConfig === 'object') { + prefetchHints |= _approutertypes.PrefetchHint.SubtreeHasInstant; + if (instantConfig.prefetch === 'runtime') { + prefetchHints |= _approutertypes.PrefetchHint.HasRuntimePrefetch; + } + } + // Check if this segment has a loading boundary + if (loading) { + prefetchHints |= _approutertypes.PrefetchHint.SegmentHasLoadingBoundary; + } + const children = {}; + for(const parallelRouteKey in parallelRoutes){ + var _hintTree_slots; + // Look up the child hint node by parallel route key, traversing the + // hint tree in parallel with the loader tree. + const childHintNode = (hintTree == null ? void 0 : (_hintTree_slots = hintTree.slots) == null ? void 0 : _hintTree_slots[parallelRouteKey]) ?? null; + const child = await createFlightRouterStateFromLoaderTreeImpl(parallelRoutes[parallelRouteKey], childHintNode, getDynamicParamFromSegment, searchParams, didFindRootLayout); + // Propagate subtree flags from children + if (child[4] !== undefined) { + prefetchHints |= child[4] & (_approutertypes.PrefetchHint.SubtreeHasInstant | _approutertypes.PrefetchHint.SubtreeHasLoadingBoundary); + // If a child has a loading boundary (either directly or in its subtree), + // propagate that as SubtreeHasLoadingBoundary to this segment. + if (child[4] & (_approutertypes.PrefetchHint.SegmentHasLoadingBoundary | _approutertypes.PrefetchHint.SubtreeHasLoadingBoundary)) { + prefetchHints |= _approutertypes.PrefetchHint.SubtreeHasLoadingBoundary; + } + } + children[parallelRouteKey] = child; + } + segmentTree[1] = children; + if (prefetchHints !== 0) { + segmentTree[4] = prefetchHints; + } + return segmentTree; +} +async function createFlightRouterStateFromLoaderTree(loaderTree, hintTree, getDynamicParamFromSegment, searchParams) { + const didFindRootLayout = false; + return createFlightRouterStateFromLoaderTreeImpl(loaderTree, hintTree, getDynamicParamFromSegment, searchParams, didFindRootLayout); +} +async function createRouteTreePrefetch(loaderTree, hintTree, getDynamicParamFromSegment) { + // Search params should not be added to page segment's cache key during a + // route tree prefetch request, because they do not affect the structure of + // the route. The client cache has its own logic to handle search params. + const searchParams = {}; + const didFindRootLayout = false; + return createFlightRouterStateFromLoaderTreeImpl(loaderTree, hintTree, getDynamicParamFromSegment, searchParams, didFindRootLayout); +} + +//# sourceMappingURL=create-flight-router-state-from-loader-tree.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/csrf-protection.js b/build/node_modules/next/dist/server/app-render/csrf-protection.js new file mode 100644 index 0000000..91d000c --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/csrf-protection.js @@ -0,0 +1,86 @@ +// micromatch is only available at node runtime, so it cannot be used here since the code path that calls this function +// can be run from edge. This is a simple implementation that safely achieves the required functionality. +// the goal is to match the functionality for remotePatterns as defined here - +// https://nextjs.org/docs/app/api-reference/components/image#remotepatterns +// TODO - retrofit micromatch to work in edge and use that instead +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "isCsrfOriginAllowed", { + enumerable: true, + get: function() { + return isCsrfOriginAllowed; + } +}); +function matchWildcardDomain(domain, pattern) { + // DNS names are case-insensitive per RFC 1035 + // Use ASCII-only toLowerCase to avoid unicode issues + const normalizedDomain = domain.replace(/[A-Z]/g, (c)=>c.toLowerCase()); + const normalizedPattern = pattern.replace(/[A-Z]/g, (c)=>c.toLowerCase()); + const domainParts = normalizedDomain.split('.'); + const patternParts = normalizedPattern.split('.'); + if (patternParts.length < 1) { + // pattern is empty and therefore invalid to match against + return false; + } + if (domainParts.length < patternParts.length) { + // domain has too few segments and thus cannot match + return false; + } + // Prevent wildcards from matching entire domains (e.g. '**' or '*.com') + // This ensures wildcards can only match subdomains, not the main domain + if (patternParts.length === 1 && (patternParts[0] === '*' || patternParts[0] === '**')) { + return false; + } + while(patternParts.length){ + const patternPart = patternParts.pop(); + const domainPart = domainParts.pop(); + switch(patternPart){ + case '': + { + // invalid pattern. pattern segments must be non empty + return false; + } + case '*': + { + // wildcard matches anything so we continue if the domain part is non-empty + if (domainPart) { + continue; + } else { + return false; + } + } + case '**': + { + // if this is not the last item in the pattern the pattern is invalid + if (patternParts.length > 0) { + return false; + } + // recursive wildcard matches anything so we terminate here if the domain part is non empty + return domainPart !== undefined; + } + case undefined: + default: + { + if (domainPart !== patternPart) { + return false; + } + } + } + } + // We exhausted the pattern. If we also exhausted the domain we have a match + return domainParts.length === 0; +} +const isCsrfOriginAllowed = (originDomain, allowedOrigins = [])=>{ + // DNS names are case-insensitive per RFC 1035 + // Use ASCII-only toLowerCase to avoid unicode issues + const normalizedOrigin = originDomain.replace(/[A-Z]/g, (c)=>c.toLowerCase()); + return allowedOrigins.some((allowedOrigin)=>{ + if (!allowedOrigin) return false; + const normalizedAllowed = allowedOrigin.replace(/[A-Z]/g, (c)=>c.toLowerCase()); + return normalizedAllowed === normalizedOrigin || matchWildcardDomain(originDomain, allowedOrigin); + }); +}; + +//# sourceMappingURL=csrf-protection.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/debug-channel-server.js b/build/node_modules/next/dist/server/app-render/debug-channel-server.js new file mode 100644 index 0000000..8e17760 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/debug-channel-server.js @@ -0,0 +1,30 @@ +/** + * Compile-time switcher for debug channel operations. + * + * Simple re-export from the web implementation. + * A future change will add a conditional branch for node streams. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createDebugChannel: null, + toNodeDebugChannel: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createDebugChannel: function() { + return _debugchannelserverweb.createDebugChannel; + }, + toNodeDebugChannel: function() { + return _debugchannelserverweb.toNodeDebugChannel; + } +}); +const _debugchannelserverweb = require("./debug-channel-server.web"); + +//# sourceMappingURL=debug-channel-server.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/debug-channel-server.web.js b/build/node_modules/next/dist/server/app-render/debug-channel-server.web.js new file mode 100644 index 0000000..d50ae7a --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/debug-channel-server.web.js @@ -0,0 +1,71 @@ +/** + * Web debug channel implementation. + * Loaded by debug-channel-server.ts. + */ // Types defined inline for now; will move to debug-channel-server.node.ts later. +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createDebugChannel: null, + createWebDebugChannel: null, + toNodeDebugChannel: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createDebugChannel: function() { + return createDebugChannel; + }, + createWebDebugChannel: function() { + return createWebDebugChannel; + }, + toNodeDebugChannel: function() { + return toNodeDebugChannel; + } +}); +function createDebugChannel() { + if (process.env.NODE_ENV === 'production') { + return undefined; + } + return createWebDebugChannel(); +} +function createWebDebugChannel() { + let readableController; + const clientSideReadable = new ReadableStream({ + start (controller) { + readableController = controller; + } + }); + return { + serverSide: { + writable: new WritableStream({ + write (chunk) { + readableController == null ? void 0 : readableController.enqueue(chunk); + }, + close () { + readableController == null ? void 0 : readableController.close(); + }, + abort (err) { + readableController == null ? void 0 : readableController.error(err); + } + }) + }, + clientSide: { + readable: clientSideReadable + } + }; +} +function toNodeDebugChannel(_webDebugChannel) { + throw Object.defineProperty(new Error('toNodeDebugChannel cannot be used in edge/web runtime, this is a bug in the Next.js codebase'), "__NEXT_ERROR_CODE", { + value: "E1071", + enumerable: false, + configurable: true + }); +} + +//# sourceMappingURL=debug-channel-server.web.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/dynamic-access-async-storage-instance.js b/build/node_modules/next/dist/server/app-render/dynamic-access-async-storage-instance.js new file mode 100644 index 0000000..03facf6 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/dynamic-access-async-storage-instance.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "dynamicAccessAsyncStorageInstance", { + enumerable: true, + get: function() { + return dynamicAccessAsyncStorageInstance; + } +}); +const _asynclocalstorage = require("./async-local-storage"); +const dynamicAccessAsyncStorageInstance = (0, _asynclocalstorage.createAsyncLocalStorage)(); + +//# sourceMappingURL=dynamic-access-async-storage-instance.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/dynamic-access-async-storage.external.js b/build/node_modules/next/dist/server/app-render/dynamic-access-async-storage.external.js new file mode 100644 index 0000000..5ab075f --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/dynamic-access-async-storage.external.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "dynamicAccessAsyncStorage", { + enumerable: true, + get: function() { + return _dynamicaccessasyncstorageinstance.dynamicAccessAsyncStorageInstance; + } +}); +const _dynamicaccessasyncstorageinstance = require("./dynamic-access-async-storage-instance"); + +//# sourceMappingURL=dynamic-access-async-storage.external.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/dynamic-rendering.js b/build/node_modules/next/dist/server/app-render/dynamic-rendering.js new file mode 100644 index 0000000..1cd8f1a --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/dynamic-rendering.js @@ -0,0 +1,1144 @@ +/** + * The functions provided by this module are used to communicate certain properties + * about the currently running code so that Next.js can make decisions on how to handle + * the current execution in different rendering modes such as pre-rendering, resuming, and SSR. + * + * Today Next.js treats all code as potentially static. Certain APIs may only make sense when dynamically rendering. + * Traditionally this meant deopting the entire render to dynamic however with PPR we can now deopt parts + * of a React tree as dynamic while still keeping other parts static. There are really two different kinds of + * Dynamic indications. + * + * The first is simply an intention to be dynamic. unstable_noStore is an example of this where + * the currently executing code simply declares that the current scope is dynamic but if you use it + * inside unstable_cache it can still be cached. This type of indication can be removed if we ever + * make the default dynamic to begin with because the only way you would ever be static is inside + * a cache scope which this indication does not affect. + * + * The second is an indication that a dynamic data source was read. This is a stronger form of dynamic + * because it means that it is inappropriate to cache this at all. using a dynamic data source inside + * unstable_cache should error. If you want to use some dynamic data inside unstable_cache you should + * read that data outside the cache and pass it in as an argument to the cached function. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + DynamicHoleKind: null, + Postpone: null, + PreludeState: null, + abortAndThrowOnSynchronousRequestDataAccess: null, + abortOnSynchronousPlatformIOAccess: null, + accessedDynamicData: null, + annotateDynamicAccess: null, + consumeDynamicAccess: null, + createDynamicTrackingState: null, + createDynamicValidationState: null, + createHangingInputAbortSignal: null, + createInstantValidationState: null, + createRenderInBrowserAbortSignal: null, + formatDynamicAPIAccesses: null, + getFirstDynamicReason: null, + getNavigationDisallowedDynamicReasons: null, + getStaticShellDisallowedDynamicReasons: null, + isDynamicPostpone: null, + isPrerenderInterruptedError: null, + logDisallowedDynamicError: null, + markCurrentScopeAsDynamic: null, + postponeWithTracking: null, + throwIfDisallowedDynamic: null, + throwToInterruptStaticGeneration: null, + trackAllowedDynamicAccess: null, + trackDynamicDataInDynamicRender: null, + trackDynamicHoleInNavigation: null, + trackDynamicHoleInRuntimeShell: null, + trackDynamicHoleInStaticShell: null, + trackThrownErrorInNavigation: null, + useDynamicRouteParams: null, + useDynamicSearchParams: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + DynamicHoleKind: function() { + return DynamicHoleKind; + }, + Postpone: function() { + return Postpone; + }, + PreludeState: function() { + return PreludeState; + }, + abortAndThrowOnSynchronousRequestDataAccess: function() { + return abortAndThrowOnSynchronousRequestDataAccess; + }, + abortOnSynchronousPlatformIOAccess: function() { + return abortOnSynchronousPlatformIOAccess; + }, + accessedDynamicData: function() { + return accessedDynamicData; + }, + annotateDynamicAccess: function() { + return annotateDynamicAccess; + }, + consumeDynamicAccess: function() { + return consumeDynamicAccess; + }, + createDynamicTrackingState: function() { + return createDynamicTrackingState; + }, + createDynamicValidationState: function() { + return createDynamicValidationState; + }, + createHangingInputAbortSignal: function() { + return createHangingInputAbortSignal; + }, + createInstantValidationState: function() { + return createInstantValidationState; + }, + createRenderInBrowserAbortSignal: function() { + return createRenderInBrowserAbortSignal; + }, + formatDynamicAPIAccesses: function() { + return formatDynamicAPIAccesses; + }, + getFirstDynamicReason: function() { + return getFirstDynamicReason; + }, + getNavigationDisallowedDynamicReasons: function() { + return getNavigationDisallowedDynamicReasons; + }, + getStaticShellDisallowedDynamicReasons: function() { + return getStaticShellDisallowedDynamicReasons; + }, + isDynamicPostpone: function() { + return isDynamicPostpone; + }, + isPrerenderInterruptedError: function() { + return isPrerenderInterruptedError; + }, + logDisallowedDynamicError: function() { + return logDisallowedDynamicError; + }, + markCurrentScopeAsDynamic: function() { + return markCurrentScopeAsDynamic; + }, + postponeWithTracking: function() { + return postponeWithTracking; + }, + throwIfDisallowedDynamic: function() { + return throwIfDisallowedDynamic; + }, + throwToInterruptStaticGeneration: function() { + return throwToInterruptStaticGeneration; + }, + trackAllowedDynamicAccess: function() { + return trackAllowedDynamicAccess; + }, + trackDynamicDataInDynamicRender: function() { + return trackDynamicDataInDynamicRender; + }, + trackDynamicHoleInNavigation: function() { + return trackDynamicHoleInNavigation; + }, + trackDynamicHoleInRuntimeShell: function() { + return trackDynamicHoleInRuntimeShell; + }, + trackDynamicHoleInStaticShell: function() { + return trackDynamicHoleInStaticShell; + }, + trackThrownErrorInNavigation: function() { + return trackThrownErrorInNavigation; + }, + useDynamicRouteParams: function() { + return useDynamicRouteParams; + }, + useDynamicSearchParams: function() { + return useDynamicSearchParams; + } +}); +const _react = /*#__PURE__*/ _interop_require_default(require("react")); +const _hooksservercontext = require("../../client/components/hooks-server-context"); +const _staticgenerationbailout = require("../../client/components/static-generation-bailout"); +const _workunitasyncstorageexternal = require("./work-unit-async-storage.external"); +const _workasyncstorageexternal = require("../app-render/work-async-storage.external"); +const _dynamicrenderingutils = require("../dynamic-rendering-utils"); +const _boundaryconstants = require("../../lib/framework/boundary-constants"); +const _scheduler = require("../../lib/scheduler"); +const _bailouttocsr = require("../../shared/lib/lazy-dynamic/bailout-to-csr"); +const _invarianterror = require("../../shared/lib/invariant-error"); +const _boundaryconstants1 = require("./instant-validation/boundary-constants"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const hasPostpone = typeof _react.default.unstable_postpone === 'function'; +function createDynamicTrackingState(isDebugDynamicAccesses) { + return { + isDebugDynamicAccesses, + dynamicAccesses: [], + syncDynamicErrorWithStack: null + }; +} +function createDynamicValidationState() { + return { + hasSuspenseAboveBody: false, + hasDynamicMetadata: false, + dynamicMetadata: null, + hasDynamicViewport: false, + hasAllowedDynamic: false, + dynamicErrors: [] + }; +} +function getFirstDynamicReason(trackingState) { + var _trackingState_dynamicAccesses_; + return (_trackingState_dynamicAccesses_ = trackingState.dynamicAccesses[0]) == null ? void 0 : _trackingState_dynamicAccesses_.expression; +} +function markCurrentScopeAsDynamic(store, workUnitStore, expression) { + if (workUnitStore) { + switch(workUnitStore.type){ + case 'cache': + case 'unstable-cache': + // Inside cache scopes, marking a scope as dynamic has no effect, + // because the outer cache scope creates a cache boundary. This is + // subtly different from reading a dynamic data source, which is + // forbidden inside a cache scope. + return; + case 'private-cache': + // A private cache scope is already dynamic by definition. + return; + case 'prerender-legacy': + case 'prerender-ppr': + case 'request': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + // If we're forcing dynamic rendering or we're forcing static rendering, we + // don't need to do anything here because the entire page is already dynamic + // or it's static and it should not throw or postpone here. + if (store.forceDynamic || store.forceStatic) return; + if (store.dynamicShouldError) { + throw Object.defineProperty(new _staticgenerationbailout.StaticGenBailoutError(`Route ${store.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`${expression}\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`), "__NEXT_ERROR_CODE", { + value: "E553", + enumerable: false, + configurable: true + }); + } + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender-ppr': + return postponeWithTracking(store.route, expression, workUnitStore.dynamicTracking); + case 'prerender-legacy': + workUnitStore.revalidate = 0; + // We aren't prerendering, but we are generating a static page. We need + // to bail out of static generation. + const err = Object.defineProperty(new _hooksservercontext.DynamicServerError(`Route ${store.route} couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`), "__NEXT_ERROR_CODE", { + value: "E550", + enumerable: false, + configurable: true + }); + store.dynamicUsageDescription = expression; + store.dynamicUsageStack = err.stack; + throw err; + case 'request': + if (process.env.NODE_ENV !== 'production') { + workUnitStore.usedDynamic = true; + } + break; + case 'generate-static-params': + break; + default: + workUnitStore; + } + } +} +function throwToInterruptStaticGeneration(expression, store, prerenderStore) { + // We aren't prerendering but we are generating a static page. We need to bail out of static generation + const err = Object.defineProperty(new _hooksservercontext.DynamicServerError(`Route ${store.route} couldn't be rendered statically because it used \`${expression}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`), "__NEXT_ERROR_CODE", { + value: "E558", + enumerable: false, + configurable: true + }); + prerenderStore.revalidate = 0; + store.dynamicUsageDescription = expression; + store.dynamicUsageStack = err.stack; + throw err; +} +function trackDynamicDataInDynamicRender(workUnitStore) { + switch(workUnitStore.type){ + case 'cache': + case 'unstable-cache': + // Inside cache scopes, marking a scope as dynamic has no effect, + // because the outer cache scope creates a cache boundary. This is + // subtly different from reading a dynamic data source, which is + // forbidden inside a cache scope. + return; + case 'private-cache': + // A private cache scope is already dynamic by definition. + return; + case 'prerender': + case 'prerender-runtime': + case 'prerender-legacy': + case 'prerender-ppr': + case 'prerender-client': + case 'validation-client': + case 'generate-static-params': + break; + case 'request': + if (process.env.NODE_ENV !== 'production') { + workUnitStore.usedDynamic = true; + } + break; + default: + workUnitStore; + } +} +function abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore) { + const reason = `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`; + const error = createPrerenderInterruptedError(reason); + prerenderStore.controller.abort(error); + const dynamicTracking = prerenderStore.dynamicTracking; + if (dynamicTracking) { + dynamicTracking.dynamicAccesses.push({ + // When we aren't debugging, we don't need to create another error for the + // stack trace. + stack: dynamicTracking.isDebugDynamicAccesses ? new Error().stack : undefined, + expression + }); + } +} +function abortOnSynchronousPlatformIOAccess(route, expression, errorWithStack, prerenderStore) { + const dynamicTracking = prerenderStore.dynamicTracking; + abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore); + // It is important that we set this tracking value after aborting. Aborts are executed + // synchronously except for the case where you abort during render itself. By setting this + // value late we can use it to determine if any of the aborted tasks are the task that + // called the sync IO expression in the first place. + if (dynamicTracking) { + if (dynamicTracking.syncDynamicErrorWithStack === null) { + dynamicTracking.syncDynamicErrorWithStack = errorWithStack; + } + } +} +function abortAndThrowOnSynchronousRequestDataAccess(route, expression, errorWithStack, prerenderStore) { + const prerenderSignal = prerenderStore.controller.signal; + if (prerenderSignal.aborted === false) { + // TODO it would be better to move this aborted check into the callsite so we can avoid making + // the error object when it isn't relevant to the aborting of the prerender however + // since we need the throw semantics regardless of whether we abort it is easier to land + // this way. See how this was handled with `abortOnSynchronousPlatformIOAccess` for a closer + // to ideal implementation + abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore); + // It is important that we set this tracking value after aborting. Aborts are executed + // synchronously except for the case where you abort during render itself. By setting this + // value late we can use it to determine if any of the aborted tasks are the task that + // called the sync IO expression in the first place. + const dynamicTracking = prerenderStore.dynamicTracking; + if (dynamicTracking) { + if (dynamicTracking.syncDynamicErrorWithStack === null) { + dynamicTracking.syncDynamicErrorWithStack = errorWithStack; + } + } + } + throw createPrerenderInterruptedError(`Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`); +} +function Postpone({ reason, route }) { + const prerenderStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + const dynamicTracking = prerenderStore && prerenderStore.type === 'prerender-ppr' ? prerenderStore.dynamicTracking : null; + postponeWithTracking(route, reason, dynamicTracking); +} +function postponeWithTracking(route, expression, dynamicTracking) { + assertPostpone(); + if (dynamicTracking) { + dynamicTracking.dynamicAccesses.push({ + // When we aren't debugging, we don't need to create another error for the + // stack trace. + stack: dynamicTracking.isDebugDynamicAccesses ? new Error().stack : undefined, + expression + }); + } + _react.default.unstable_postpone(createPostponeReason(route, expression)); +} +function createPostponeReason(route, expression) { + return `Route ${route} needs to bail out of prerendering at this point because it used ${expression}. ` + `React throws this special object to indicate where. It should not be caught by ` + `your own try/catch. Learn more: https://nextjs.org/docs/messages/ppr-caught-error`; +} +function isDynamicPostpone(err) { + if (typeof err === 'object' && err !== null && typeof err.message === 'string') { + return isDynamicPostponeReason(err.message); + } + return false; +} +function isDynamicPostponeReason(reason) { + return reason.includes('needs to bail out of prerendering at this point because it used') && reason.includes('Learn more: https://nextjs.org/docs/messages/ppr-caught-error'); +} +if (isDynamicPostponeReason(createPostponeReason('%%%', '^^^')) === false) { + throw Object.defineProperty(new Error('Invariant: isDynamicPostpone misidentified a postpone reason. This is a bug in Next.js'), "__NEXT_ERROR_CODE", { + value: "E296", + enumerable: false, + configurable: true + }); +} +const NEXT_PRERENDER_INTERRUPTED = 'NEXT_PRERENDER_INTERRUPTED'; +function createPrerenderInterruptedError(message) { + const error = Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + error.digest = NEXT_PRERENDER_INTERRUPTED; + return error; +} +function isPrerenderInterruptedError(error) { + return typeof error === 'object' && error !== null && error.digest === NEXT_PRERENDER_INTERRUPTED && 'name' in error && 'message' in error && error instanceof Error; +} +function accessedDynamicData(dynamicAccesses) { + return dynamicAccesses.length > 0; +} +function consumeDynamicAccess(serverDynamic, clientDynamic) { + // We mutate because we only call this once we are no longer writing + // to the dynamicTrackingState and it's more efficient than creating a new + // array. + serverDynamic.dynamicAccesses.push(...clientDynamic.dynamicAccesses); + return serverDynamic.dynamicAccesses; +} +function formatDynamicAPIAccesses(dynamicAccesses) { + return dynamicAccesses.filter((access)=>typeof access.stack === 'string' && access.stack.length > 0).map(({ expression, stack })=>{ + stack = stack.split('\n')// Remove the "Error: " prefix from the first line of the stack trace as + // well as the first 4 lines of the stack trace which is the distance + // from the user code and the `new Error().stack` call. + .slice(4).filter((line)=>{ + // Exclude Next.js internals from the stack trace. + if (line.includes('node_modules/next/')) { + return false; + } + // Exclude anonymous functions from the stack trace. + if (line.includes(' ()')) { + return false; + } + // Exclude Node.js internals from the stack trace. + if (line.includes(' (node:')) { + return false; + } + return true; + }).join('\n'); + return `Dynamic API Usage Debug - ${expression}:\n${stack}`; + }); +} +function assertPostpone() { + if (!hasPostpone) { + throw Object.defineProperty(new Error(`Invariant: React.unstable_postpone is not defined. This suggests the wrong version of React was loaded. This is a bug in Next.js`), "__NEXT_ERROR_CODE", { + value: "E224", + enumerable: false, + configurable: true + }); + } +} +function createRenderInBrowserAbortSignal() { + const controller = new AbortController(); + controller.abort(Object.defineProperty(new _bailouttocsr.BailoutToCSRError('Render in Browser'), "__NEXT_ERROR_CODE", { + value: "E721", + enumerable: false, + configurable: true + })); + return controller.signal; +} +function createHangingInputAbortSignal(workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-runtime': + const controller = new AbortController(); + if (workUnitStore.cacheSignal) { + // If we have a cacheSignal it means we're in a prospective render. If + // the input we're waiting on is coming from another cache, we do want + // to wait for it so that we can resolve this cache entry too. + workUnitStore.cacheSignal.inputReady().then(()=>{ + controller.abort(); + }); + } else { + // Otherwise we're in the final render and we should already have all + // our caches filled. + // If the prerender uses stages, we have wait until the runtime stage, + // at which point all runtime inputs will be resolved. + // (otherwise, a runtime prerender might consider `cookies()` hanging + // even though they'd resolve in the next task.) + // + // We might still be waiting on some microtasks so we + // wait one tick before giving up. When we give up, we still want to + // render the content of this cache as deeply as we can so that we can + // suspend as deeply as possible in the tree or not at all if we don't + // end up waiting for the input. + if (// eslint-disable-next-line no-restricted-syntax -- We are discriminating between two different refined types and don't need an addition exhaustive switch here + workUnitStore.type === 'prerender-runtime' && workUnitStore.stagedRendering) { + const { stagedRendering } = workUnitStore; + stagedRendering.waitForStage((0, _dynamicrenderingutils.getRuntimeStage)(stagedRendering)).then(()=>(0, _scheduler.scheduleOnNextTick)(()=>controller.abort())); + } else { + (0, _scheduler.scheduleOnNextTick)(()=>controller.abort()); + } + } + return controller.signal; + case 'prerender-client': + case 'validation-client': + case 'prerender-ppr': + case 'prerender-legacy': + case 'request': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + return undefined; + default: + workUnitStore; + } +} +function annotateDynamicAccess(expression, prerenderStore) { + const dynamicTracking = prerenderStore.dynamicTracking; + if (dynamicTracking) { + dynamicTracking.dynamicAccesses.push({ + stack: dynamicTracking.isDebugDynamicAccesses ? new Error().stack : undefined, + expression + }); + } +} +function useDynamicRouteParams(expression) { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workStore && workUnitStore) { + switch(workUnitStore.type){ + case 'prerender-client': + case 'prerender': + { + const fallbackParams = workUnitStore.fallbackRouteParams; + if (fallbackParams && fallbackParams.size > 0) { + // We are in a prerender with cacheComponents semantics. We are going to + // hang here and never resolve. This will cause the currently + // rendering component to effectively be a dynamic hole. + _react.default.use((0, _dynamicrenderingutils.makeHangingPromise)(workUnitStore.renderSignal, workStore.route, expression)); + } + break; + } + case 'prerender-ppr': + { + const fallbackParams = workUnitStore.fallbackRouteParams; + if (fallbackParams && fallbackParams.size > 0) { + return postponeWithTracking(workStore.route, expression, workUnitStore.dynamicTracking); + } + break; + } + case 'validation-client': + { + break; + } + case 'prerender-runtime': + throw Object.defineProperty(new _invarianterror.InvariantError(`\`${expression}\` was called during a runtime prerender. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`), "__NEXT_ERROR_CODE", { + value: "E771", + enumerable: false, + configurable: true + }); + case 'cache': + case 'private-cache': + throw Object.defineProperty(new _invarianterror.InvariantError(`\`${expression}\` was called inside a cache scope. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`), "__NEXT_ERROR_CODE", { + value: "E745", + enumerable: false, + configurable: true + }); + case 'generate-static-params': + throw Object.defineProperty(new _invarianterror.InvariantError(`\`${expression}\` was called in \`generateStaticParams\`. Next.js should be preventing ${expression} from being included in server component files statically, but did not in this case.`), "__NEXT_ERROR_CODE", { + value: "E1130", + enumerable: false, + configurable: true + }); + case 'prerender-legacy': + case 'request': + case 'unstable-cache': + break; + default: + workUnitStore; + } + } +} +function useDynamicSearchParams(expression) { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (!workStore) { + // We assume pages router context and just return + return; + } + if (!workUnitStore) { + (0, _workunitasyncstorageexternal.throwForMissingRequestStore)(expression); + } + switch(workUnitStore.type){ + case 'validation-client': + // During instant validation we try to behave as close to client as possible, + // so this shouldn't hang during SSR. + return; + case 'prerender-client': + { + _react.default.use((0, _dynamicrenderingutils.makeHangingPromise)(workUnitStore.renderSignal, workStore.route, expression)); + break; + } + case 'prerender-legacy': + case 'prerender-ppr': + { + if (workStore.forceStatic) { + return; + } + throw Object.defineProperty(new _bailouttocsr.BailoutToCSRError(expression), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + case 'prerender': + case 'prerender-runtime': + throw Object.defineProperty(new _invarianterror.InvariantError(`\`${expression}\` was called from a Server Component. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`), "__NEXT_ERROR_CODE", { + value: "E795", + enumerable: false, + configurable: true + }); + case 'cache': + case 'unstable-cache': + case 'private-cache': + throw Object.defineProperty(new _invarianterror.InvariantError(`\`${expression}\` was called inside a cache scope. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`), "__NEXT_ERROR_CODE", { + value: "E745", + enumerable: false, + configurable: true + }); + case 'generate-static-params': + throw Object.defineProperty(new _invarianterror.InvariantError(`\`${expression}\` was called in \`generateStaticParams\`. Next.js should be preventing ${expression} from being included in server component files statically, but did not in this case.`), "__NEXT_ERROR_CODE", { + value: "E1130", + enumerable: false, + configurable: true + }); + case 'request': + return; + default: + workUnitStore; + } +} +const hasSuspenseRegex = /\n\s+at Suspense \(\)/; +// Common implicit body tags that React will treat as body when placed directly in html +const bodyAndImplicitTags = 'body|div|main|section|article|aside|header|footer|nav|form|p|span|h1|h2|h3|h4|h5|h6'; +// Detects when RootLayoutBoundary (our framework marker component) appears +// after Suspense in the component stack, indicating the root layout is wrapped +// within a Suspense boundary. Ensures no body/html/implicit-body components are in between. +// +// Example matches: +// at Suspense () +// at __next_root_layout_boundary__ () +// +// Or with other components in between (but not body/html/implicit-body): +// at Suspense () +// at SomeComponent () +// at __next_root_layout_boundary__ () +const hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex = new RegExp(`\\n\\s+at Suspense \\(\\)(?:(?!\\n\\s+at (?:${bodyAndImplicitTags}) \\(\\))[\\s\\S])*?\\n\\s+at ${_boundaryconstants.ROOT_LAYOUT_BOUNDARY_NAME} \\([^\\n]*\\)`); +const hasMetadataRegex = new RegExp(`\\n\\s+at ${_boundaryconstants.METADATA_BOUNDARY_NAME}[\\n\\s]`); +const hasViewportRegex = new RegExp(`\\n\\s+at ${_boundaryconstants.VIEWPORT_BOUNDARY_NAME}[\\n\\s]`); +const hasOutletRegex = new RegExp(`\\n\\s+at ${_boundaryconstants.OUTLET_BOUNDARY_NAME}[\\n\\s]`); +const hasInstantValidationBoundaryRegex = new RegExp(`\\n\\s+at ${_boundaryconstants1.INSTANT_VALIDATION_BOUNDARY_NAME}[\\n\\s]`); +function trackAllowedDynamicAccess(workStore, componentStack, dynamicValidation, clientDynamic) { + if (hasOutletRegex.test(componentStack)) { + // We don't need to track that this is dynamic. It is only so when something else is also dynamic. + return; + } else if (hasMetadataRegex.test(componentStack)) { + dynamicValidation.hasDynamicMetadata = true; + return; + } else if (hasViewportRegex.test(componentStack)) { + dynamicValidation.hasDynamicViewport = true; + return; + } else if (hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(componentStack)) { + // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule. + // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense + // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering. + dynamicValidation.hasAllowedDynamic = true; + dynamicValidation.hasSuspenseAboveBody = true; + return; + } else if (hasSuspenseRegex.test(componentStack)) { + // this error had a Suspense boundary above it so we don't need to report it as a source + // of disallowed + dynamicValidation.hasAllowedDynamic = true; + return; + } else if (clientDynamic.syncDynamicErrorWithStack) { + // This task was the task that called the sync error. + dynamicValidation.dynamicErrors.push(clientDynamic.syncDynamicErrorWithStack); + return; + } else { + const message = `Route "${workStore.route}": Uncached data was accessed outside of ` + '. This delays the entire page from rendering, resulting in a ' + 'slow user experience. Learn more: ' + 'https://nextjs.org/docs/messages/blocking-route'; + const error = addErrorContext(Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E1079", + enumerable: false, + configurable: true + }), componentStack, null); + dynamicValidation.dynamicErrors.push(error); + return; + } +} +var DynamicHoleKind = /*#__PURE__*/ function(DynamicHoleKind) { + /** We know that this hole is caused by runtime data. */ DynamicHoleKind[DynamicHoleKind["Runtime"] = 1] = "Runtime"; + /** We know that this hole is caused by dynamic data. */ DynamicHoleKind[DynamicHoleKind["Dynamic"] = 2] = "Dynamic"; + return DynamicHoleKind; +}({}); +function createInstantValidationState(createInstantStack) { + return { + hasDynamicMetadata: false, + hasAllowedClientDynamicAboveBoundary: false, + dynamicMetadata: null, + hasDynamicViewport: false, + hasAllowedDynamic: false, + dynamicErrors: [], + validationPreventingErrors: [], + thrownErrorsOutsideBoundary: [], + createInstantStack + }; +} +function trackDynamicHoleInNavigation(workStore, componentStack, dynamicValidation, clientDynamic, kind, boundaryState) { + if (hasOutletRegex.test(componentStack)) { + // We don't need to track that this is dynamic. It is only so when something else is also dynamic. + return; + } + if (hasMetadataRegex.test(componentStack)) { + const usageDescription = kind === 1 ? `Runtime data such as \`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` was accessed inside \`generateMetadata\` or you have file-based metadata such as icons that depend on dynamic params segments.` : `Uncached data or \`connection()\` was accessed inside \`generateMetadata\`.`; + const message = `Route "${workStore.route}": ${usageDescription} Except for this instance, the page would have been entirely prerenderable which may have been the intended behavior. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`; + const error = addErrorContext(Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E1076", + enumerable: false, + configurable: true + }), componentStack, dynamicValidation.createInstantStack); + dynamicValidation.dynamicMetadata = error; + return; + } + if (hasViewportRegex.test(componentStack)) { + const usageDescription = kind === 1 ? `Runtime data such as \`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` was accessed inside \`generateViewport\`.` : `Uncached data or \`connection()\` was accessed inside \`generateViewport\`.`; + const message = `Route "${workStore.route}": ${usageDescription} This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`; + const error = addErrorContext(Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E1086", + enumerable: false, + configurable: true + }), componentStack, dynamicValidation.createInstantStack); + dynamicValidation.dynamicErrors.push(error); + return; + } + const boundaryLocation = hasInstantValidationBoundaryRegex.exec(componentStack); + if (!boundaryLocation) { + // We don't see the validation boundary in the component stack, + // so this hole must be coming from a shared parent. + // Shared parents are fully resolved and don't have RSC holes, + // but they can still suspend in a client component during SSR. + // If we managed to render all the validation boundaries, that means + // that the client holes aren't blocking validation and we can disregard them. + // Note that we don't even care whether they have suspense or not. + if (boundaryState.expectedIds.size === boundaryState.renderedIds.size) { + dynamicValidation.hasAllowedClientDynamicAboveBoundary = true; + dynamicValidation.hasAllowedDynamic = true // Holes outside the boundary contribute to allowing dynamic metadata + ; + return; + } else { + // TODO(instant-validation) TODO(NAR-787) + // If shared parents blocked us from validating, we should only log + // the errors from the innermost (segments), i.e. omit layouts whose + // slots managed to render (because clearly they didn't block validation) + const message = `Route "${workStore.route}": Could not validate \`unstable_instant\` because a Client Component in a parent segment prevented the page from rendering.`; + const error = addErrorContext(Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E1082", + enumerable: false, + configurable: true + }), componentStack, dynamicValidation.createInstantStack); + dynamicValidation.validationPreventingErrors.push(error); + return; + } + } else { + // The hole originates inside the validation boundary. + // + // Check if we have a Suspense above the hole, but below the validation boundary. + // If we do, then this dynamic usage wouldn't block a navigation to this subtree. + // Conversely, if the nearest suspense is above the validation boundary, then this subtree would block. + // + // Note that in the component stack, children come before parents. + // + // Valid: + // ... + // at Suspense + // ... + // at __next_prefetch_validation_boundary__ + // + // Invalid: + // ... + // at __next_prefetch_validation_boundary__ + // ... + // at Suspense + // + const suspenseLocation = hasSuspenseRegex.exec(componentStack); + if (suspenseLocation) { + if (suspenseLocation.index < boundaryLocation.index) { + dynamicValidation.hasAllowedDynamic = true; + return; + } else { + // invalid - fallthrough + } + } + } + if (clientDynamic.syncDynamicErrorWithStack) { + // This task was the task that called the sync error. + const syncError = clientDynamic.syncDynamicErrorWithStack; + if (dynamicValidation.createInstantStack !== null && syncError.cause === undefined) { + syncError.cause = dynamicValidation.createInstantStack(); + } + dynamicValidation.dynamicErrors.push(syncError); + return; + } + const usageDescription = kind === 1 ? `Runtime data such as \`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` was accessed outside of \`\`.` : `Uncached data or \`connection()\` was accessed outside of \`\`.`; + const message = `Route "${workStore.route}": ${usageDescription} This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/blocking-route`; + const error = addErrorContext(Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E1078", + enumerable: false, + configurable: true + }), componentStack, dynamicValidation.createInstantStack); + dynamicValidation.dynamicErrors.push(error); + return; +} +function trackThrownErrorInNavigation(workStore, dynamicValidation, thrownValue, componentStack) { + const boundaryLocation = hasInstantValidationBoundaryRegex.exec(componentStack); + if (!boundaryLocation) { + // There's no validation boundary on the component stack. + // This error may have blocked a boundary from rendering. + // Wrap the error to provide component context. + // This helps for errors from node_modules which would otherwise + // have no useful stack information due to ignore-listing, + // e.g. next/dynamic with `ssr: false`. + const error = addErrorContext(Object.defineProperty(new Error('An error occurred while attempting to validate instant UI. This error may be preventing the validation from completing.', { + cause: thrownValue + }), "__NEXT_ERROR_CODE", { + value: "E1118", + enumerable: false, + configurable: true + }), componentStack, null); + dynamicValidation.thrownErrorsOutsideBoundary.push(error); + } else { + // There's validation boundary on the component stack, + // so we know this error didn't block a validation boundary from rendering. + // However, this error might be hiding be hiding dynamic content that would + // cause validation to fail. + const suspenseLocation = hasSuspenseRegex.exec(componentStack); + if (suspenseLocation) { + if (suspenseLocation.index < boundaryLocation.index) { + // There's a Suspense below the validation boundary but above this error's location. + // This subtree can't fail instant validation because any potential + // dynamic holes would be guarded by the Suspense anyway, + // so we can allow this. + return; + } else { + // invalid - fallthrough + } + } + const message = `Route "${workStore.route}": Could not validate \`unstable_instant\` because an error prevented the target segment from rendering.`; + const error = addErrorContext(Object.defineProperty(new Error(message, { + cause: thrownValue + }), "__NEXT_ERROR_CODE", { + value: "E1112", + enumerable: false, + configurable: true + }), componentStack, null // TODO(instant-validation-build): conflicting use of cause + ); + dynamicValidation.validationPreventingErrors.push(error); + } +} +function trackDynamicHoleInRuntimeShell(workStore, componentStack, dynamicValidation, clientDynamic) { + if (hasOutletRegex.test(componentStack)) { + // We don't need to track that this is dynamic. It is only so when something else is also dynamic. + return; + } else if (hasMetadataRegex.test(componentStack)) { + const message = `Route "${workStore.route}": Uncached data or \`connection()\` was accessed inside \`generateMetadata\`. Except for this instance, the page would have been entirely prerenderable which may have been the intended behavior. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`; + const error = addErrorContext(Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E1080", + enumerable: false, + configurable: true + }), componentStack, null); + dynamicValidation.dynamicMetadata = error; + return; + } else if (hasViewportRegex.test(componentStack)) { + // TODO(instant-validation): If the page only has holes caused by runtime data, + // we won't find out if there's a suspense-above-body and error for dynamic viewport + // even if there is in fact a suspense-above-body + const message = `Route "${workStore.route}": Uncached data or \`connection()\` was accessed inside \`generateViewport\`. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`; + const error = addErrorContext(Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E1077", + enumerable: false, + configurable: true + }), componentStack, null); + dynamicValidation.dynamicErrors.push(error); + return; + } else if (hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(componentStack)) { + // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule. + // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense + // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering. + dynamicValidation.hasAllowedDynamic = true; + dynamicValidation.hasSuspenseAboveBody = true; + return; + } else if (hasSuspenseRegex.test(componentStack)) { + // this error had a Suspense boundary above it so we don't need to report it as a source + // of disallowed + dynamicValidation.hasAllowedDynamic = true; + return; + } else if (clientDynamic.syncDynamicErrorWithStack) { + // This task was the task that called the sync error. + dynamicValidation.dynamicErrors.push(clientDynamic.syncDynamicErrorWithStack); + return; + } + const message = `Route "${workStore.route}": Uncached data or \`connection()\` was accessed outside of \`\`. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/blocking-route`; + const error = addErrorContext(Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E1084", + enumerable: false, + configurable: true + }), componentStack, null); + dynamicValidation.dynamicErrors.push(error); + return; +} +function trackDynamicHoleInStaticShell(workStore, componentStack, dynamicValidation, clientDynamic) { + if (hasOutletRegex.test(componentStack)) { + // We don't need to track that this is dynamic. It is only so when something else is also dynamic. + return; + } else if (hasMetadataRegex.test(componentStack)) { + const message = `Route "${workStore.route}": Runtime data such as \`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` was accessed inside \`generateMetadata\` or you have file-based metadata such as icons that depend on dynamic params segments. Except for this instance, the page would have been entirely prerenderable which may have been the intended behavior. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`; + const error = addErrorContext(Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E1085", + enumerable: false, + configurable: true + }), componentStack, null); + dynamicValidation.dynamicMetadata = error; + return; + } else if (hasViewportRegex.test(componentStack)) { + const message = `Route "${workStore.route}": Runtime data such as \`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` was accessed inside \`generateViewport\`. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`; + const error = addErrorContext(Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E1081", + enumerable: false, + configurable: true + }), componentStack, null); + dynamicValidation.dynamicErrors.push(error); + return; + } else if (hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(componentStack)) { + // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule. + // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense + // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering. + dynamicValidation.hasAllowedDynamic = true; + dynamicValidation.hasSuspenseAboveBody = true; + return; + } else if (hasSuspenseRegex.test(componentStack)) { + // this error had a Suspense boundary above it so we don't need to report it as a source + // of disallowed + dynamicValidation.hasAllowedDynamic = true; + return; + } else if (clientDynamic.syncDynamicErrorWithStack) { + // This task was the task that called the sync error. + dynamicValidation.dynamicErrors.push(clientDynamic.syncDynamicErrorWithStack); + return; + } else { + const message = `Route "${workStore.route}": Runtime data such as \`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` was accessed outside of \`\`. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/blocking-route`; + const error = addErrorContext(Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E1083", + enumerable: false, + configurable: true + }), componentStack, null); + dynamicValidation.dynamicErrors.push(error); + return; + } +} +/** + * In dev mode, we prefer using the owner stack, otherwise the provided + * component stack is used. + * + * Accepts an already-created Error so the SWC error-code plugin can see the + * `new Error(...)` call at each call site and auto-assign error codes. + */ function addErrorContext(error, componentStack, createInstantStack) { + const ownerStack = process.env.NODE_ENV !== 'production' && _react.default.captureOwnerStack ? _react.default.captureOwnerStack() : null; + if (createInstantStack !== null) { + error.cause = createInstantStack(); + } + // TODO go back to owner stack here if available. This is temporarily using componentStack to get the right + // + error.stack = error.name + ': ' + error.message + (ownerStack || componentStack); + return error; +} +var PreludeState = /*#__PURE__*/ function(PreludeState) { + PreludeState[PreludeState["Full"] = 0] = "Full"; + PreludeState[PreludeState["Empty"] = 1] = "Empty"; + PreludeState[PreludeState["Errored"] = 2] = "Errored"; + return PreludeState; +}({}); +function logDisallowedDynamicError(workStore, error) { + console.error(error); + if (process.env.NODE_ENV !== 'development') { + console.error(`To get a more detailed stack trace and pinpoint the issue, try one of the following: + - Start the app in development mode by running \`next dev\`, then open "${workStore.route}" in your browser to investigate the error. + - Rerun the production build with \`next build --debug-prerender\` to generate better stack traces.`); + } else if (!process.env.__NEXT_DEV_SERVER) { + console.error(`To debug the issue, start the app in development mode by running \`next dev\`, then open "${workStore.route}" in your browser to investigate the error.`); + } +} +function throwIfDisallowedDynamic(workStore, prelude, dynamicValidation, serverDynamic) { + if (serverDynamic.syncDynamicErrorWithStack) { + logDisallowedDynamicError(workStore, serverDynamic.syncDynamicErrorWithStack); + throw new _staticgenerationbailout.StaticGenBailoutError(); + } + if (prelude !== 0) { + if (dynamicValidation.hasSuspenseAboveBody) { + // This route has opted into allowing fully dynamic rendering + // by including a Suspense boundary above the body. In this case + // a lack of a shell is not considered disallowed so we simply return + return; + } + // We didn't have any sync bailouts but there may be user code which + // blocked the root. We would have captured these during the prerender + // and can log them here and then terminate the build/validating render + const dynamicErrors = dynamicValidation.dynamicErrors; + if (dynamicErrors.length > 0) { + for(let i = 0; i < dynamicErrors.length; i++){ + logDisallowedDynamicError(workStore, dynamicErrors[i]); + } + throw new _staticgenerationbailout.StaticGenBailoutError(); + } + // If we got this far then the only other thing that could be blocking + // the root is dynamic Viewport. If this is dynamic then + // you need to opt into that by adding a Suspense boundary above the body + // to indicate your are ok with fully dynamic rendering. + if (dynamicValidation.hasDynamicViewport) { + console.error(`Route "${workStore.route}" has a \`generateViewport\` that depends on Request data (\`cookies()\`, etc...) or uncached external data (\`fetch(...)\`, etc...) without explicitly allowing fully dynamic rendering. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`); + throw new _staticgenerationbailout.StaticGenBailoutError(); + } + if (prelude === 1) { + // If we ever get this far then we messed up the tracking of invalid dynamic. + // We still adhere to the constraint that you must produce a shell but invite the + // user to report this as a bug in Next.js. + console.error(`Route "${workStore.route}" did not produce a static shell and Next.js was unable to determine a reason. This is a bug in Next.js.`); + throw new _staticgenerationbailout.StaticGenBailoutError(); + } + } else { + if (dynamicValidation.hasAllowedDynamic === false && dynamicValidation.hasDynamicMetadata) { + console.error(`Route "${workStore.route}" has a \`generateMetadata\` that depends on Request data (\`cookies()\`, etc...) or uncached external data (\`fetch(...)\`, etc...) when the rest of the route does not. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`); + throw new _staticgenerationbailout.StaticGenBailoutError(); + } + } +} +function getStaticShellDisallowedDynamicReasons(workStore, prelude, dynamicValidation, configAllowsBlocking) { + if (configAllowsBlocking || dynamicValidation.hasSuspenseAboveBody) { + // This route has opted into allowing fully dynamic rendering + // by including a Suspense boundary above the body. In this case + // a lack of a shell is not considered disallowed so we simply return + return []; + } + if (prelude !== 0) { + // We didn't have any sync bailouts but there may be user code which + // blocked the root. We would have captured these during the prerender + // and can log them here and then terminate the build/validating render + const dynamicErrors = dynamicValidation.dynamicErrors; + if (dynamicErrors.length > 0) { + return dynamicErrors; + } + if (prelude === 1) { + // If we ever get this far then we messed up the tracking of invalid dynamic. + // We still adhere to the constraint that you must produce a shell but invite the + // user to report this as a bug in Next.js. + return [ + Object.defineProperty(new _invarianterror.InvariantError(`Route "${workStore.route}" did not produce a static shell and Next.js was unable to determine a reason.`), "__NEXT_ERROR_CODE", { + value: "E936", + enumerable: false, + configurable: true + }) + ]; + } + } else { + // We have a prelude but we might still have dynamic metadata without any other dynamic access + if (dynamicValidation.hasAllowedDynamic === false && dynamicValidation.dynamicErrors.length === 0 && dynamicValidation.dynamicMetadata) { + return [ + dynamicValidation.dynamicMetadata + ]; + } + } + // We had a non-empty prelude and there are no dynamic holes + return []; +} +function getNavigationDisallowedDynamicReasons(workStore, prelude, dynamicValidation, validationSampleTracking, boundaryState) { + // If we have errors related to missing samples, those should take precedence over everything else. + if (validationSampleTracking) { + const { missingSampleErrors } = validationSampleTracking; + if (missingSampleErrors.length > 0) { + return missingSampleErrors; + } + } + const { validationPreventingErrors } = dynamicValidation; + if (validationPreventingErrors.length > 0) { + return validationPreventingErrors; + } + if (boundaryState.renderedIds.size < boundaryState.expectedIds.size) { + const { thrownErrorsOutsideBoundary, createInstantStack } = dynamicValidation; + if (thrownErrorsOutsideBoundary.length === 0) { + const message = `Route "${workStore.route}": Could not validate \`unstable_instant\` because the target segment was prevented from rendering for an unknown reason.`; + const error = createInstantStack !== null ? createInstantStack() : new Error(); + error.name = 'Error'; + error.message = message; + return [ + error + ]; + } else if (thrownErrorsOutsideBoundary.length === 1) { + const message = `Route "${workStore.route}": Could not validate \`unstable_instant\` because the target segment was prevented from rendering, likely due to the following error.`; + const error = createInstantStack !== null ? createInstantStack() : new Error(); + error.name = 'Error'; + error.message = message; + return [ + error, + thrownErrorsOutsideBoundary[0] + ]; + } else { + const message = `Route "${workStore.route}": Could not validate \`unstable_instant\` because the target segment was prevented from rendering, likely due to one of the following errors.`; + const error = createInstantStack !== null ? createInstantStack() : new Error(); + error.name = 'Error'; + error.message = message; + return [ + error, + ...thrownErrorsOutsideBoundary + ]; + } + } + // NOTE: We don't care about Suspense above body here, + // we're only concerned with the validation boundary + if (prelude !== 0) { + const dynamicErrors = dynamicValidation.dynamicErrors; + if (dynamicErrors.length > 0) { + return dynamicErrors; + } + if (prelude === 1) { + // If a client component suspended prevented us from rendering a shell + // but didn't block validation, we don't require a prelude. + if (dynamicValidation.hasAllowedClientDynamicAboveBoundary) { + return []; + } + // If we ever get this far then we messed up the tracking of invalid dynamic. + return [ + Object.defineProperty(new _invarianterror.InvariantError(`Route "${workStore.route}" failed to render during instant validation and Next.js was unable to determine a reason.`), "__NEXT_ERROR_CODE", { + value: "E1055", + enumerable: false, + configurable: true + }) + ]; + } + } else { + const dynamicErrors = dynamicValidation.dynamicErrors; + if (dynamicErrors.length > 0) { + return dynamicErrors; + } + if (dynamicValidation.hasAllowedDynamic === false && dynamicValidation.dynamicMetadata) { + return [ + dynamicValidation.dynamicMetadata + ]; + } + } + // We had a non-empty prelude and there are no dynamic holes + return []; +} + +//# sourceMappingURL=dynamic-rendering.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/encryption-utils-server.js b/build/node_modules/next/dist/server/app-render/encryption-utils-server.js new file mode 100644 index 0000000..2e83a7a --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/encryption-utils-server.js @@ -0,0 +1,114 @@ +// This file should never be bundled into application's runtime code and should +// stay in the Next.js server. +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "generateEncryptionKeyBase64", { + enumerable: true, + get: function() { + return generateEncryptionKeyBase64; + } +}); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _fs = /*#__PURE__*/ _interop_require_default(require("fs")); +const _cachedir = require("../cache-dir"); +const _encryptionutils = require("./encryption-utils"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +// Keep the key in memory as it should never change during the lifetime of the server in +// both development and production. +let __next_encryption_key_generation_promise = null; +const CONFIG_FILE = '.rscinfo'; +const ENCRYPTION_KEY = 'encryption.key'; +const ENCRYPTION_EXPIRE_AT = 'encryption.expire_at'; +const EXPIRATION = 1000 * 60 * 60 * 24 * 14 // 14 days +; +async function writeCache(distDir, configValue) { + const cacheBaseDir = (0, _cachedir.getStorageDirectory)(distDir); + if (!cacheBaseDir) return; + const configPath = _path.default.join(cacheBaseDir, CONFIG_FILE); + if (!_fs.default.existsSync(cacheBaseDir)) { + await _fs.default.promises.mkdir(cacheBaseDir, { + recursive: true + }); + } + await _fs.default.promises.writeFile(configPath, JSON.stringify({ + [ENCRYPTION_KEY]: configValue, + [ENCRYPTION_EXPIRE_AT]: Date.now() + EXPIRATION + })); +} +// This utility is used to get a key for the cache directory. If the +// key is not present, it will generate a new one and store it in the +// cache directory inside dist. +// The key will also expire after a certain amount of time. Once it +// expires, a new one will be generated. +// During the lifetime of the server, it will be reused and never refreshed. +async function loadOrGenerateKey(distDir, isBuild, generateKey) { + const cacheBaseDir = (0, _cachedir.getStorageDirectory)(distDir); + if (!cacheBaseDir) { + // There's no persistent storage available. We generate a new key. + // This also covers development time. + return await generateKey(); + } + const configPath = _path.default.join(cacheBaseDir, CONFIG_FILE); + async function hasCachedKey() { + if (!_fs.default.existsSync(configPath)) return false; + try { + const config = JSON.parse(await _fs.default.promises.readFile(configPath, 'utf8')); + if (!config) return false; + if (typeof config[ENCRYPTION_KEY] !== 'string' || typeof config[ENCRYPTION_EXPIRE_AT] !== 'number') { + return false; + } + // For build time, we need to rotate the key if it's expired. Otherwise + // (next start) we have to keep the key as it is so the runtime key matches + // the build time key. + if (isBuild && config[ENCRYPTION_EXPIRE_AT] < Date.now()) { + return false; + } + const cachedKey = config[ENCRYPTION_KEY]; + // If encryption key is provided via env, and it's not same as valid cache, + // we should not use the cached key and respect the env key. + if (cachedKey && process.env.NEXT_SERVER_ACTIONS_ENCRYPTION_KEY && cachedKey !== process.env.NEXT_SERVER_ACTIONS_ENCRYPTION_KEY) { + return false; + } + return cachedKey; + } catch { + // Broken config file. We should generate a new key and overwrite it. + return false; + } + } + const maybeValidKey = await hasCachedKey(); + if (typeof maybeValidKey === 'string') { + return maybeValidKey; + } + const key = await generateKey(); + await writeCache(distDir, key); + return key; +} +async function generateEncryptionKeyBase64({ isBuild, distDir }) { + // This avoids it being generated multiple times in parallel. + if (!__next_encryption_key_generation_promise) { + __next_encryption_key_generation_promise = loadOrGenerateKey(distDir, isBuild, async ()=>{ + const providedKey = process.env.NEXT_SERVER_ACTIONS_ENCRYPTION_KEY; + if (providedKey) { + return providedKey; + } + const key = await crypto.subtle.generateKey({ + name: 'AES-GCM', + length: 256 + }, true, [ + 'encrypt', + 'decrypt' + ]); + const exported = await crypto.subtle.exportKey('raw', key); + return btoa((0, _encryptionutils.arrayBufferToString)(exported)); + }); + } + return __next_encryption_key_generation_promise; +} + +//# sourceMappingURL=encryption-utils-server.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/encryption-utils.js b/build/node_modules/next/dist/server/app-render/encryption-utils.js new file mode 100644 index 0000000..322825e --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/encryption-utils.js @@ -0,0 +1,93 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + arrayBufferToString: null, + decrypt: null, + encrypt: null, + getActionEncryptionKey: null, + stringToUint8Array: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + arrayBufferToString: function() { + return arrayBufferToString; + }, + decrypt: function() { + return decrypt; + }, + encrypt: function() { + return encrypt; + }, + getActionEncryptionKey: function() { + return getActionEncryptionKey; + }, + stringToUint8Array: function() { + return stringToUint8Array; + } +}); +const _invarianterror = require("../../shared/lib/invariant-error"); +const _manifestssingleton = require("./manifests-singleton"); +let __next_loaded_action_key; +function arrayBufferToString(buffer) { + const bytes = new Uint8Array(buffer); + const len = bytes.byteLength; + // @anonrig: V8 has a limit of 65535 arguments in a function. + // For len < 65535, this is faster. + // https://github.com/vercel/next.js/pull/56377#pullrequestreview-1656181623 + if (len < 65535) { + return String.fromCharCode.apply(null, bytes); + } + let binary = ''; + for(let i = 0; i < len; i++){ + binary += String.fromCharCode(bytes[i]); + } + return binary; +} +function stringToUint8Array(binary) { + const len = binary.length; + const arr = new Uint8Array(len); + for(let i = 0; i < len; i++){ + arr[i] = binary.charCodeAt(i); + } + return arr; +} +function encrypt(key, iv, data) { + return crypto.subtle.encrypt({ + name: 'AES-GCM', + iv + }, key, data); +} +function decrypt(key, iv, data) { + return crypto.subtle.decrypt({ + name: 'AES-GCM', + iv + }, key, data); +} +async function getActionEncryptionKey() { + if (__next_loaded_action_key) { + return __next_loaded_action_key; + } + const serverActionsManifest = (0, _manifestssingleton.getServerActionsManifest)(); + const rawKey = process.env.NEXT_SERVER_ACTIONS_ENCRYPTION_KEY || serverActionsManifest.encryptionKey; + if (rawKey === undefined) { + throw Object.defineProperty(new _invarianterror.InvariantError('Missing encryption key for Server Actions'), "__NEXT_ERROR_CODE", { + value: "E571", + enumerable: false, + configurable: true + }); + } + __next_loaded_action_key = await crypto.subtle.importKey('raw', stringToUint8Array(atob(rawKey)), 'AES-GCM', true, [ + 'encrypt', + 'decrypt' + ]); + return __next_loaded_action_key; +} + +//# sourceMappingURL=encryption-utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/encryption.js b/build/node_modules/next/dist/server/app-render/encryption.js new file mode 100644 index 0000000..0f7c51b --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/encryption.js @@ -0,0 +1,259 @@ +/* eslint-disable import/no-extraneous-dependencies */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + decryptActionBoundArgs: null, + encryptActionBoundArgs: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + decryptActionBoundArgs: function() { + return decryptActionBoundArgs; + }, + encryptActionBoundArgs: function() { + return encryptActionBoundArgs; + } +}); +require("server-only"); +const _server = require("react-server-dom-webpack/server"); +const _client = require("react-server-dom-webpack/client"); +const _nodewebstreamshelper = require("../stream-utils/node-web-streams-helper"); +const _encryptionutils = require("./encryption-utils"); +const _manifestssingleton = require("./manifests-singleton"); +const _workunitasyncstorageexternal = require("./work-unit-async-storage.external"); +const _dynamicrendering = require("./dynamic-rendering"); +const _react = /*#__PURE__*/ _interop_require_default(require("react")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const isEdgeRuntime = process.env.NEXT_RUNTIME === 'edge'; +const textEncoder = new TextEncoder(); +const textDecoder = new TextDecoder(); +const filterStackFrame = process.env.NODE_ENV !== 'production' ? require('../lib/source-maps').filterStackFrameDEV : undefined; +const findSourceMapURL = process.env.NODE_ENV !== 'production' ? require('../lib/source-maps').findSourceMapURLDEV : undefined; +/** + * Decrypt the serialized string with the action id as the salt. + */ async function decodeActionBoundArg(actionId, arg) { + const key = await (0, _encryptionutils.getActionEncryptionKey)(); + if (typeof key === 'undefined') { + throw Object.defineProperty(new Error(`Missing encryption key for Server Action. This is a bug in Next.js`), "__NEXT_ERROR_CODE", { + value: "E65", + enumerable: false, + configurable: true + }); + } + // Get the iv (16 bytes) and the payload from the arg. + const originalPayload = atob(arg); + const ivValue = originalPayload.slice(0, 16); + const payload = originalPayload.slice(16); + const decrypted = textDecoder.decode(await (0, _encryptionutils.decrypt)(key, (0, _encryptionutils.stringToUint8Array)(ivValue), (0, _encryptionutils.stringToUint8Array)(payload))); + if (!decrypted.startsWith(actionId)) { + throw Object.defineProperty(new Error('Invalid Server Action payload: failed to decrypt.'), "__NEXT_ERROR_CODE", { + value: "E191", + enumerable: false, + configurable: true + }); + } + return decrypted.slice(actionId.length); +} +/** + * Encrypt the serialized string with the action id as the salt. Add a prefix to + * later ensure that the payload is correctly decrypted, similar to a checksum. + */ async function encodeActionBoundArg(actionId, arg) { + const key = await (0, _encryptionutils.getActionEncryptionKey)(); + if (key === undefined) { + throw Object.defineProperty(new Error(`Missing encryption key for Server Action. This is a bug in Next.js`), "__NEXT_ERROR_CODE", { + value: "E65", + enumerable: false, + configurable: true + }); + } + // Get 16 random bytes as iv. + const randomBytes = new Uint8Array(16); + _workunitasyncstorageexternal.workUnitAsyncStorage.exit(()=>crypto.getRandomValues(randomBytes)); + const ivValue = (0, _encryptionutils.arrayBufferToString)(randomBytes.buffer); + const encrypted = await (0, _encryptionutils.encrypt)(key, randomBytes, textEncoder.encode(actionId + arg)); + return btoa(ivValue + (0, _encryptionutils.arrayBufferToString)(encrypted)); +} +var ReadStatus = /*#__PURE__*/ function(ReadStatus) { + ReadStatus[ReadStatus["Ready"] = 0] = "Ready"; + ReadStatus[ReadStatus["Pending"] = 1] = "Pending"; + ReadStatus[ReadStatus["Complete"] = 2] = "Complete"; + return ReadStatus; +}(ReadStatus || {}); +const encryptActionBoundArgs = _react.default.cache(async function encryptActionBoundArgs(actionId, ...args) { + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + const cacheSignal = workUnitStore ? (0, _workunitasyncstorageexternal.getCacheSignal)(workUnitStore) : undefined; + const { clientModules } = (0, _manifestssingleton.getClientReferenceManifest)(); + // Create an error before any asynchronous calls, to capture the original + // call stack in case we need it when the serialization errors. + const error = new Error(); + Error.captureStackTrace(error, encryptActionBoundArgs); + let didCatchError = false; + const hangingInputAbortSignal = workUnitStore ? (0, _dynamicrendering.createHangingInputAbortSignal)(workUnitStore) : undefined; + let readStatus = 0; + function startReadOnce() { + if (readStatus === 0) { + readStatus = 1; + cacheSignal == null ? void 0 : cacheSignal.beginRead(); + } + } + function endReadIfStarted() { + if (readStatus === 1) { + cacheSignal == null ? void 0 : cacheSignal.endRead(); + } + readStatus = 2; + } + // streamToString might take longer than a microtask to resolve and then other things + // waiting on the cache signal might not realize there is another cache to fill so if + // we are no longer waiting on the bound args serialization via the hangingInputAbortSignal + // we should eagerly start the cache read to prevent other readers of the cache signal from + // missing this cache fill. We use a idempotent function to only start reading once because + // it's also possible that streamToString finishes before the hangingInputAbortSignal aborts. + if (hangingInputAbortSignal && cacheSignal) { + hangingInputAbortSignal.addEventListener('abort', startReadOnce, { + once: true + }); + } + const prerenderResumeDataCache = workUnitStore ? (0, _workunitasyncstorageexternal.getPrerenderResumeDataCache)(workUnitStore) : null; + const renderResumeDataCache = workUnitStore ? (0, _workunitasyncstorageexternal.getRenderResumeDataCache)(workUnitStore) : null; + // Using Flight to serialize the args into a string. + const serialized = await (0, _nodewebstreamshelper.streamToString)((0, _server.renderToReadableStream)(args, clientModules, { + filterStackFrame, + signal: hangingInputAbortSignal, + debugChannel: // In Cache Components, we want to cache the encrypted result, + // and we use the unencrypted bound args as a cache key. + // In order to do that we need to strip debug info, because it + // contains timing information and thus changes each time we serialize the args. + // We can do this by piping debug info into a debug channel that throws it away. + // + // Note that this can result in dangling debug info references when we decode the bound args, + // but React ignores those as long as no debug channel is passed on the decode side, so it's fine: + // https://github.com/facebook/react/blob/bb8a76c6cc77ea2976d690ea09f5a1b3d9b1792a/packages/react-client/src/ReactFlightClient.js#L1711-L1729 + // https://github.com/facebook/react/blob/bb8a76c6cc77ea2976d690ea09f5a1b3d9b1792a/packages/react-client/src/ReactFlightClient.js#L4005-L4025 + process.env.NODE_ENV === 'development' && (prerenderResumeDataCache || renderResumeDataCache) ? { + writable: new WritableStream() + } : undefined, + onError (err) { + if (hangingInputAbortSignal == null ? void 0 : hangingInputAbortSignal.aborted) { + return; + } + // We're only reporting one error at a time, starting with the first. + if (didCatchError) { + return; + } + didCatchError = true; + // Use the original error message together with the previously created + // stack, because err.stack is a useless Flight Server call stack. + error.message = err instanceof Error ? err.message : String(err); + } + }), // We pass the abort signal to `streamToString` so that no chunks are + // included that are emitted after the signal was already aborted. This + // ensures that we can encode hanging promises. + hangingInputAbortSignal); + if (didCatchError) { + if (process.env.NODE_ENV === 'development') { + // Logging the error is needed for server functions that are passed to the + // client where the decryption is not done during rendering. Console + // replaying allows us to still show the error dev overlay in this case. + console.error(error); + } + endReadIfStarted(); + throw error; + } + if (!workUnitStore) { + // We don't need to call cacheSignal.endRead here because we can't have a cacheSignal + // if we do not have a workUnitStore. + return encodeActionBoundArg(actionId, serialized); + } + startReadOnce(); + const cacheKey = actionId + serialized; + const cachedEncrypted = (prerenderResumeDataCache == null ? void 0 : prerenderResumeDataCache.encryptedBoundArgs.get(cacheKey)) ?? (renderResumeDataCache == null ? void 0 : renderResumeDataCache.encryptedBoundArgs.get(cacheKey)); + if (cachedEncrypted) { + return cachedEncrypted; + } + const encrypted = await encodeActionBoundArg(actionId, serialized); + endReadIfStarted(); + prerenderResumeDataCache == null ? void 0 : prerenderResumeDataCache.encryptedBoundArgs.set(cacheKey, encrypted); + return encrypted; +}); +async function decryptActionBoundArgs(actionId, encryptedPromise) { + const encrypted = await encryptedPromise; + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + let decrypted; + if (workUnitStore) { + const cacheSignal = (0, _workunitasyncstorageexternal.getCacheSignal)(workUnitStore); + const prerenderResumeDataCache = (0, _workunitasyncstorageexternal.getPrerenderResumeDataCache)(workUnitStore); + const renderResumeDataCache = (0, _workunitasyncstorageexternal.getRenderResumeDataCache)(workUnitStore); + decrypted = (prerenderResumeDataCache == null ? void 0 : prerenderResumeDataCache.decryptedBoundArgs.get(encrypted)) ?? (renderResumeDataCache == null ? void 0 : renderResumeDataCache.decryptedBoundArgs.get(encrypted)); + if (!decrypted) { + cacheSignal == null ? void 0 : cacheSignal.beginRead(); + decrypted = await decodeActionBoundArg(actionId, encrypted); + cacheSignal == null ? void 0 : cacheSignal.endRead(); + prerenderResumeDataCache == null ? void 0 : prerenderResumeDataCache.decryptedBoundArgs.set(encrypted, decrypted); + } + } else { + decrypted = await decodeActionBoundArg(actionId, encrypted); + } + const { edgeRscModuleMapping, rscModuleMapping } = (0, _manifestssingleton.getClientReferenceManifest)(); + // Using Flight to deserialize the args from the string. + const deserialized = await (0, _client.createFromReadableStream)(new ReadableStream({ + start (controller) { + controller.enqueue(textEncoder.encode(decrypted)); + switch(workUnitStore == null ? void 0 : workUnitStore.type){ + case 'prerender': + case 'prerender-runtime': + // Explicitly don't close the stream here (until prerendering is + // complete) so that hanging promises are not rejected. + if (workUnitStore.renderSignal.aborted) { + controller.close(); + } else { + workUnitStore.renderSignal.addEventListener('abort', ()=>controller.close(), { + once: true + }); + } + break; + case 'prerender-client': + case 'validation-client': + case 'prerender-ppr': + case 'prerender-legacy': + case 'request': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + case undefined: + return controller.close(); + default: + workUnitStore; + } + } + }), { + findSourceMapURL, + // NOTE: When we serialized the bound args, we may have used a dummy debug channel to strip debug info. + // In that case, it's important that we also *don't* pass a debug channel here, because that will make + // the Flight Client ignore the dangling references: + // https://github.com/facebook/react/blob/bb8a76c6cc77ea2976d690ea09f5a1b3d9b1792a/packages/react-client/src/ReactFlightClient.js#L1711-L1729 + // https://github.com/facebook/react/blob/bb8a76c6cc77ea2976d690ea09f5a1b3d9b1792a/packages/react-client/src/ReactFlightClient.js#L4005-L4025 + debugChannel: undefined, + serverConsumerManifest: { + // moduleLoading must be null because we don't want to trigger preloads of ClientReferences + // to be added to the current execution. Instead, we'll wait for any ClientReference + // to be emitted which themselves will handle the preloading. + moduleLoading: null, + moduleMap: isEdgeRuntime ? edgeRscModuleMapping : rscModuleMapping, + serverModuleMap: (0, _manifestssingleton.getServerModuleMap)() + } + }); + return deserialized; +} + +//# sourceMappingURL=encryption.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/entry-base.js b/build/node_modules/next/dist/server/app-render/entry-base.js new file mode 100644 index 0000000..c1adadd --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/entry-base.js @@ -0,0 +1,256 @@ +// eslint-disable-next-line import/no-extraneous-dependencies +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + ClientPageRoot: null, + ClientSegmentRoot: null, + Fragment: null, + HTTPAccessFallbackBoundary: null, + InstantValidation: null, + LayoutRouter: null, + LoadingBoundaryProvider: null, + Postpone: null, + RenderFromTemplateContext: null, + RootLayoutBoundary: null, + SegmentViewNode: null, + SegmentViewStateNode: null, + actionAsyncStorage: null, + captureOwnerStack: null, + collectPrefetchHints: null, + collectSegmentData: null, + createElement: null, + createMetadataComponents: null, + createPrerenderParamsForClientSegment: null, + createPrerenderSearchParamsForClientPage: null, + createServerParamsForServerSegment: null, + createServerSearchParamsForServerPage: null, + createTemporaryReferenceSet: null, + decodeAction: null, + decodeFormState: null, + decodeReply: null, + patchFetch: null, + preconnect: null, + preloadFont: null, + preloadStyle: null, + prerender: null, + renderToReadableStream: null, + serverHooks: null, + taintObjectReference: null, + workAsyncStorage: null, + workUnitAsyncStorage: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + ClientPageRoot: function() { + return _clientpage.ClientPageRoot; + }, + ClientSegmentRoot: function() { + return _clientsegment.ClientSegmentRoot; + }, + Fragment: function() { + return _react.Fragment; + }, + HTTPAccessFallbackBoundary: function() { + return _errorboundary.HTTPAccessFallbackBoundary; + }, + InstantValidation: function() { + return InstantValidation; + }, + LayoutRouter: function() { + return _layoutrouter.default; + }, + LoadingBoundaryProvider: function() { + return _layoutrouter.LoadingBoundaryProvider; + }, + Postpone: function() { + return _postpone.Postpone; + }, + RenderFromTemplateContext: function() { + return _renderfromtemplatecontext.default; + }, + RootLayoutBoundary: function() { + return _boundarycomponents.RootLayoutBoundary; + }, + SegmentViewNode: function() { + return SegmentViewNode; + }, + SegmentViewStateNode: function() { + return SegmentViewStateNode; + }, + actionAsyncStorage: function() { + return _actionasyncstorageexternal.actionAsyncStorage; + }, + captureOwnerStack: function() { + return _react.captureOwnerStack; + }, + collectPrefetchHints: function() { + return _collectsegmentdata.collectPrefetchHints; + }, + collectSegmentData: function() { + return _collectsegmentdata.collectSegmentData; + }, + createElement: function() { + return _react.createElement; + }, + createMetadataComponents: function() { + return _metadata.createMetadataComponents; + }, + createPrerenderParamsForClientSegment: function() { + return _params.createPrerenderParamsForClientSegment; + }, + createPrerenderSearchParamsForClientPage: function() { + return _searchparams.createPrerenderSearchParamsForClientPage; + }, + createServerParamsForServerSegment: function() { + return _params.createServerParamsForServerSegment; + }, + createServerSearchParamsForServerPage: function() { + return _searchparams.createServerSearchParamsForServerPage; + }, + createTemporaryReferenceSet: function() { + return _server.createTemporaryReferenceSet; + }, + decodeAction: function() { + return _server.decodeAction; + }, + decodeFormState: function() { + return _server.decodeFormState; + }, + decodeReply: function() { + return _server.decodeReply; + }, + patchFetch: function() { + return patchFetch; + }, + preconnect: function() { + return _preloads.preconnect; + }, + preloadFont: function() { + return _preloads.preloadFont; + }, + preloadStyle: function() { + return _preloads.preloadStyle; + }, + prerender: function() { + return _static.prerender; + }, + renderToReadableStream: function() { + return _server.renderToReadableStream; + }, + serverHooks: function() { + return _hooksservercontext; + }, + taintObjectReference: function() { + return _taint.taintObjectReference; + }, + workAsyncStorage: function() { + return _workasyncstorageexternal.workAsyncStorage; + }, + workUnitAsyncStorage: function() { + return _workunitasyncstorageexternal.workUnitAsyncStorage; + } +}); +const _server = require("react-server-dom-webpack/server"); +const _static = require("react-server-dom-webpack/static"); +const _react = require("react"); +const _layoutrouter = /*#__PURE__*/ _interop_require_wildcard(require("../../client/components/layout-router")); +const _renderfromtemplatecontext = /*#__PURE__*/ _interop_require_default(require("../../client/components/render-from-template-context")); +const _workasyncstorageexternal = require("../app-render/work-async-storage.external"); +const _workunitasyncstorageexternal = require("./work-unit-async-storage.external"); +const _actionasyncstorageexternal = require("../app-render/action-async-storage.external"); +const _clientpage = require("../../client/components/client-page"); +const _clientsegment = require("../../client/components/client-segment"); +const _searchparams = require("../request/search-params"); +const _params = require("../request/params"); +const _hooksservercontext = /*#__PURE__*/ _interop_require_wildcard(require("../../client/components/hooks-server-context")); +const _errorboundary = require("../../client/components/http-access-fallback/error-boundary"); +const _metadata = require("../../lib/metadata/metadata"); +const _boundarycomponents = require("../../lib/framework/boundary-components"); +const _preloads = require("./rsc/preloads"); +const _postpone = require("./rsc/postpone"); +const _taint = require("./rsc/taint"); +const _collectsegmentdata = require("./collect-segment-data"); +const _patchfetch = require("../lib/patch-fetch"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +const InstantValidation = ()=>{ + if (process.env.NEXT_RUNTIME !== 'edge' && process.env.__NEXT_CACHE_COMPONENTS) { + return require('./instant-validation/instant-validation'); + } else { + return undefined; + } +}; +let SegmentViewNode = ()=>null; +let SegmentViewStateNode = ()=>null; +if (process.env.NODE_ENV === 'development') { + const mod = require('../../next-devtools/userspace/app/segment-explorer-node'); + SegmentViewNode = mod.SegmentViewNode; + SegmentViewStateNode = mod.SegmentViewStateNode; +} +// hot-reloader modules are not bundled so we need to inject `__next__clear_chunk_cache__` +// into globalThis from this file which is bundled. +if (process.env.TURBOPACK) { + globalThis.__next__clear_chunk_cache__ = __turbopack_clear_chunk_cache__; +} else { + // Webpack does not have chunks on the server + globalThis.__next__clear_chunk_cache__ = null; +} +function patchFetch() { + return (0, _patchfetch.patchFetch)({ + workAsyncStorage: _workasyncstorageexternal.workAsyncStorage, + workUnitAsyncStorage: _workunitasyncstorageexternal.workUnitAsyncStorage + }); +} + +//# sourceMappingURL=entry-base.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/flight-render-result.js b/build/node_modules/next/dist/server/app-render/flight-render-result.js new file mode 100644 index 0000000..32d8d75 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/flight-render-result.js @@ -0,0 +1,28 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "FlightRenderResult", { + enumerable: true, + get: function() { + return FlightRenderResult; + } +}); +const _approuterheaders = require("../../client/components/app-router-headers"); +const _renderresult = /*#__PURE__*/ _interop_require_default(require("../render-result")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +class FlightRenderResult extends _renderresult.default { + constructor(response, metadata = {}, waitUntil){ + super(response, { + contentType: _approuterheaders.RSC_CONTENT_TYPE_HEADER, + metadata, + waitUntil + }); + } +} + +//# sourceMappingURL=flight-render-result.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/get-asset-query-string.js b/build/node_modules/next/dist/server/app-render/get-asset-query-string.js new file mode 100644 index 0000000..e5cc920 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/get-asset-query-string.js @@ -0,0 +1,29 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getAssetQueryString", { + enumerable: true, + get: function() { + return getAssetQueryString; + } +}); +const isDev = process.env.NODE_ENV === 'development'; +const isTurbopack = !!process.env.TURBOPACK; +function getAssetQueryString(ctx, addTimestamp) { + let qs = ''; + // In development we add the request timestamp to allow react to + // reload assets when a new RSC response is received. + // Turbopack handles HMR of assets itself and react doesn't need to reload them + // so this approach is not needed for Turbopack. + const shouldAddVersion = isDev && !isTurbopack && addTimestamp; + if (shouldAddVersion) { + qs += `?v=${ctx.requestTimestamp}`; + } + if (ctx.sharedContext.clientAssetToken) { + qs += `${shouldAddVersion ? '&' : '?'}dpl=${ctx.sharedContext.clientAssetToken}`; + } + return qs; +} + +//# sourceMappingURL=get-asset-query-string.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/get-css-inlined-link-tags.js b/build/node_modules/next/dist/server/app-render/get-css-inlined-link-tags.js new file mode 100644 index 0000000..c206e2b --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/get-css-inlined-link-tags.js @@ -0,0 +1,49 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getLinkAndScriptTags", { + enumerable: true, + get: function() { + return getLinkAndScriptTags; + } +}); +const _manifestssingleton = require("./manifests-singleton"); +function getLinkAndScriptTags(filePath, injectedCSS, injectedScripts, collectNewImports) { + const filePathWithoutExt = filePath.replace(/\.[^.]+$/, ''); + const cssChunks = new Set(); + const jsChunks = new Set(); + const { entryCSSFiles, entryJSFiles } = (0, _manifestssingleton.getClientReferenceManifest)(); + const cssFiles = entryCSSFiles[filePathWithoutExt]; + const jsFiles = entryJSFiles == null ? void 0 : entryJSFiles[filePathWithoutExt]; + if (cssFiles) { + for (const css of cssFiles){ + if (!injectedCSS.has(css.path)) { + if (collectNewImports) { + injectedCSS.add(css.path); + } + cssChunks.add(css); + } + } + } + if (jsFiles) { + for (const file of jsFiles){ + if (!injectedScripts.has(file)) { + if (collectNewImports) { + injectedScripts.add(file); + } + jsChunks.add(file); + } + } + } + return { + styles: [ + ...cssChunks + ], + scripts: [ + ...jsChunks + ] + }; +} + +//# sourceMappingURL=get-css-inlined-link-tags.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/get-layer-assets.js b/build/node_modules/next/dist/server/app-render/get-layer-assets.js new file mode 100644 index 0000000..b21ae04 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/get-layer-assets.js @@ -0,0 +1,65 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getLayerAssets", { + enumerable: true, + get: function() { + return getLayerAssets; + } +}); +const _getcssinlinedlinktags = require("./get-css-inlined-link-tags"); +const _getpreloadablefonts = require("./get-preloadable-fonts"); +const _getassetquerystring = require("./get-asset-query-string"); +const _encodeuripath = require("../../shared/lib/encode-uri-path"); +const _rendercssresource = require("./render-css-resource"); +function getLayerAssets({ ctx, layoutOrPagePath, injectedCSS: injectedCSSWithCurrentLayout, injectedJS: injectedJSWithCurrentLayout, injectedFontPreloadTags: injectedFontPreloadTagsWithCurrentLayout, preloadCallbacks }) { + const { componentMod: { createElement } } = ctx; + const { styles: styleTags, scripts: scriptTags } = layoutOrPagePath ? (0, _getcssinlinedlinktags.getLinkAndScriptTags)(layoutOrPagePath, injectedCSSWithCurrentLayout, injectedJSWithCurrentLayout, true) : { + styles: [], + scripts: [] + }; + const preloadedFontFiles = layoutOrPagePath ? (0, _getpreloadablefonts.getPreloadableFonts)(ctx.renderOpts.nextFontManifest, layoutOrPagePath, injectedFontPreloadTagsWithCurrentLayout) : null; + if (preloadedFontFiles) { + if (preloadedFontFiles.length) { + for(let i = 0; i < preloadedFontFiles.length; i++){ + const fontFilename = preloadedFontFiles[i]; + const ext = /\.(woff|woff2|eot|ttf|otf)$/.exec(fontFilename)[1]; + const type = `font/${ext}`; + const href = `${ctx.assetPrefix}/_next/${(0, _encodeuripath.encodeURIPath)(fontFilename)}${(0, _getassetquerystring.getAssetQueryString)(ctx, true)}`; + preloadCallbacks.push(()=>{ + ctx.componentMod.preloadFont(href, type, ctx.renderOpts.crossOrigin, ctx.nonce); + }); + } + } else { + try { + let url = new URL(ctx.assetPrefix); + preloadCallbacks.push(()=>{ + ctx.componentMod.preconnect(url.origin, 'anonymous', ctx.nonce); + }); + } catch (error) { + // assetPrefix must not be a fully qualified domain name. We assume + // we should preconnect to same origin instead + preloadCallbacks.push(()=>{ + ctx.componentMod.preconnect('/', 'anonymous', ctx.nonce); + }); + } + } + } + const styles = (0, _rendercssresource.renderCssResource)(styleTags, ctx, preloadCallbacks); + const scripts = scriptTags ? scriptTags.map((href, index)=>{ + const fullSrc = `${ctx.assetPrefix}/_next/${(0, _encodeuripath.encodeURIPath)(href)}${(0, _getassetquerystring.getAssetQueryString)(ctx, true)}`; + return createElement('script', { + src: fullSrc, + async: true, + key: `script-${index}`, + nonce: ctx.nonce + }); + }) : []; + return styles.length || scripts.length ? [ + ...styles, + ...scripts + ] : null; +} + +//# sourceMappingURL=get-layer-assets.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/get-preloadable-fonts.js b/build/node_modules/next/dist/server/app-render/get-preloadable-fonts.js new file mode 100644 index 0000000..f4f5b9d --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/get-preloadable-fonts.js @@ -0,0 +1,39 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getPreloadableFonts", { + enumerable: true, + get: function() { + return getPreloadableFonts; + } +}); +function getPreloadableFonts(nextFontManifest, filePath, injectedFontPreloadTags) { + if (!nextFontManifest || !filePath) { + return null; + } + const filepathWithoutExtension = filePath.replace(/\.[^.]+$/, ''); + const fontFiles = new Set(); + let foundFontUsage = false; + const preloadedFontFiles = nextFontManifest.app[filepathWithoutExtension]; + if (preloadedFontFiles) { + foundFontUsage = true; + for (const fontFile of preloadedFontFiles){ + if (!injectedFontPreloadTags.has(fontFile)) { + fontFiles.add(fontFile); + injectedFontPreloadTags.add(fontFile); + } + } + } + if (fontFiles.size) { + return [ + ...fontFiles + ].sort(); + } else if (foundFontUsage && injectedFontPreloadTags.size === 0) { + return []; + } else { + return null; + } +} + +//# sourceMappingURL=get-preloadable-fonts.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/get-script-nonce-from-header.js b/build/node_modules/next/dist/server/app-render/get-script-nonce-from-header.js new file mode 100644 index 0000000..36b35ea --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/get-script-nonce-from-header.js @@ -0,0 +1,32 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getScriptNonceFromHeader", { + enumerable: true, + get: function() { + return getScriptNonceFromHeader; + } +}); +const CSP_NONCE_SOURCE_REGEX = /^'nonce-([A-Za-z0-9+/_-]+={0,2})'$/; +function getScriptNonceFromHeader(cspHeaderValue) { + const directives = cspHeaderValue// Directives are split by ';'. + .split(';').map((directive)=>directive.trim()); + // First try to find the directive for the 'script-src', otherwise try to + // fallback to the 'default-src'. + const directive = directives.find((dir)=>dir.startsWith('script-src')) || directives.find((dir)=>dir.startsWith('default-src')); + // If no directive could be found, then we're done. + if (!directive) { + return; + } + // Extract the first valid nonce from the directive. Malformed nonces are + // ignored so the request can continue without a nonce instead of failing. + for (const source of directive.split(/\s+/).slice(1)){ + const match = source.trim().match(CSP_NONCE_SOURCE_REGEX); + if (match) { + return match[1]; + } + } +} + +//# sourceMappingURL=get-script-nonce-from-header.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/get-short-dynamic-param-type.js b/build/node_modules/next/dist/server/app-render/get-short-dynamic-param-type.js new file mode 100644 index 0000000..c41c642 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/get-short-dynamic-param-type.js @@ -0,0 +1,25 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "dynamicParamTypes", { + enumerable: true, + get: function() { + return dynamicParamTypes; + } +}); +const dynamicParamTypes = { + catchall: 'c', + 'catchall-intercepted-(..)(..)': 'ci(..)(..)', + 'catchall-intercepted-(.)': 'ci(.)', + 'catchall-intercepted-(..)': 'ci(..)', + 'catchall-intercepted-(...)': 'ci(...)', + 'optional-catchall': 'oc', + dynamic: 'd', + 'dynamic-intercepted-(..)(..)': 'di(..)(..)', + 'dynamic-intercepted-(.)': 'di(.)', + 'dynamic-intercepted-(..)': 'di(..)', + 'dynamic-intercepted-(...)': 'di(...)' +}; + +//# sourceMappingURL=get-short-dynamic-param-type.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/has-loading-component-in-tree.js b/build/node_modules/next/dist/server/app-render/has-loading-component-in-tree.js new file mode 100644 index 0000000..a465dc7 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/has-loading-component-in-tree.js @@ -0,0 +1,19 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "hasLoadingComponentInTree", { + enumerable: true, + get: function() { + return hasLoadingComponentInTree; + } +}); +function hasLoadingComponentInTree(tree) { + const [, parallelRoutes, { loading }] = tree; + if (loading) { + return true; + } + return Object.values(parallelRoutes).some((parallelRoute)=>hasLoadingComponentInTree(parallelRoute)); +} + +//# sourceMappingURL=has-loading-component-in-tree.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/instant-validation/boundary-constants.js b/build/node_modules/next/dist/server/app-render/instant-validation/boundary-constants.js new file mode 100644 index 0000000..fd063ab --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/instant-validation/boundary-constants.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "INSTANT_VALIDATION_BOUNDARY_NAME", { + enumerable: true, + get: function() { + return INSTANT_VALIDATION_BOUNDARY_NAME; + } +}); +const INSTANT_VALIDATION_BOUNDARY_NAME = '__next_instant_validation_boundary__'; + +//# sourceMappingURL=boundary-constants.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/instant-validation/boundary-impl.js b/build/node_modules/next/dist/server/app-render/instant-validation/boundary-impl.js new file mode 100644 index 0000000..92fc6a3 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/instant-validation/boundary-impl.js @@ -0,0 +1,103 @@ +/* eslint-disable @next/internal/no-ambiguous-jsx -- React Client */ // Do not put a "use client" directive here. Import this module via the shim in +// `packages/next/src/client/components/instant-validation/boundary.tsx` instead. +// 'use client' +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + InstantValidationBoundaryContext: null, + PlaceValidationBoundaryBelowThisLevel: null, + RenderValidationBoundaryAtThisLevel: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + InstantValidationBoundaryContext: function() { + return InstantValidationBoundaryContext; + }, + PlaceValidationBoundaryBelowThisLevel: function() { + return PlaceValidationBoundaryBelowThisLevel; + }, + RenderValidationBoundaryAtThisLevel: function() { + return RenderValidationBoundaryAtThisLevel; + } +}); +const _jsxruntime = require("react/jsx-runtime"); +const _react = require("react"); +const _boundaryconstants = require("./boundary-constants"); +const _invarianterror = require("../../../shared/lib/invariant-error"); +const _workunitasyncstorageexternal = require("../work-unit-async-storage.external"); +if (typeof window !== 'undefined') { + throw Object.defineProperty(new _invarianterror.InvariantError('Instant validation boundaries should never appear in browser bundles.'), "__NEXT_ERROR_CODE", { + value: "E1117", + enumerable: false, + configurable: true + }); +} +function getValidationBoundaryTracking() { + const store = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (!store) return null; + switch(store.type){ + case 'validation-client': + return store.boundaryState; + case 'prerender': + case 'prerender-client': + case 'prerender-ppr': + case 'prerender-legacy': + case 'prerender-runtime': + case 'request': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + store; + } + return null; +} +// We use a namespace object to allow us to recover the name of the function +// at runtime even when production bundling/minification is used. +const NameSpace = { + [_boundaryconstants.INSTANT_VALIDATION_BOUNDARY_NAME]: function({ id, children }) { + // Track which boundaries we actually managed to render. + const state = getValidationBoundaryTracking(); + if (state === null) { + throw Object.defineProperty(new _invarianterror.InvariantError('Missing boundary tracking state'), "__NEXT_ERROR_CODE", { + value: "E1060", + enumerable: false, + configurable: true + }); + } + state.renderedIds.add(id); + return children; + } +}; +const InstantValidationBoundaryContext = /*#__PURE__*/ (0, _react.createContext)(null); +function PlaceValidationBoundaryBelowThisLevel({ id, children }) { + return(// OuterLayoutRouter will see this and render a `RenderValidationBoundaryAtThisLevel`. + /*#__PURE__*/ (0, _jsxruntime.jsx)(InstantValidationBoundaryContext, { + value: id, + children: children + })); +} +function RenderValidationBoundaryAtThisLevel({ id, children }) { + // We got a boundaryId from the context. Clear the context so that the children don't render another boundary. + return /*#__PURE__*/ (0, _jsxruntime.jsx)(InstantValidationBoundary, { + id: id, + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(InstantValidationBoundaryContext, { + value: null, + children: children + }) + }); +} +const InstantValidationBoundary = // We use slice(0) to trick the bundler into not inlining/minifying the function +// so it retains the name inferred from the namespace object +NameSpace[_boundaryconstants.INSTANT_VALIDATION_BOUNDARY_NAME.slice(0)]; + +//# sourceMappingURL=boundary-impl.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.js b/build/node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.js new file mode 100644 index 0000000..8a19da5 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.js @@ -0,0 +1,18 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "createValidationBoundaryTracking", { + enumerable: true, + get: function() { + return createValidationBoundaryTracking; + } +}); +function createValidationBoundaryTracking() { + return { + expectedIds: new Set(), + renderedIds: new Set() + }; +} + +//# sourceMappingURL=boundary-tracking.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/instant-validation/instant-config.js b/build/node_modules/next/dist/server/app-render/instant-validation/instant-config.js new file mode 100644 index 0000000..7852499 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/instant-validation/instant-config.js @@ -0,0 +1,181 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + anySegmentHasRuntimePrefetchEnabled: null, + anySegmentNeedsInstantValidationInBuild: null, + anySegmentNeedsInstantValidationInDev: null, + findSegmentsWithInstantConfig: null, + isPageAllowedToBlock: null, + resolveInstantConfigSamplesForPage: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + anySegmentHasRuntimePrefetchEnabled: function() { + return anySegmentHasRuntimePrefetchEnabled; + }, + anySegmentNeedsInstantValidationInBuild: function() { + return anySegmentNeedsInstantValidationInBuild; + }, + anySegmentNeedsInstantValidationInDev: function() { + return anySegmentNeedsInstantValidationInDev; + }, + findSegmentsWithInstantConfig: function() { + return findSegmentsWithInstantConfig; + }, + isPageAllowedToBlock: function() { + return isPageAllowedToBlock; + }, + resolveInstantConfigSamplesForPage: function() { + return resolveInstantConfigSamplesForPage; + } +}); +const _appdirmodule = require("../../lib/app-dir-module"); +const _parseloadertree = require("../../../shared/lib/router/utils/parse-loader-tree"); +const _workasyncstorageexternal = require("../work-async-storage.external"); +async function anySegmentHasRuntimePrefetchEnabled(tree) { + const { mod: layoutOrPageMod } = await (0, _appdirmodule.getLayoutOrPageModule)(tree); + // TODO(restart-on-cache-miss): Does this work correctly for client page/layout modules? + const instantConfig = layoutOrPageMod ? layoutOrPageMod.unstable_instant : undefined; + const hasRuntimePrefetch = instantConfig && typeof instantConfig === 'object' ? instantConfig.prefetch === 'runtime' : false; + if (hasRuntimePrefetch) { + return true; + } + const { parallelRoutes } = (0, _parseloadertree.parseLoaderTree)(tree); + for(const parallelRouteKey in parallelRoutes){ + const parallelRoute = parallelRoutes[parallelRouteKey]; + const hasChildRuntimePrefetch = await anySegmentHasRuntimePrefetchEnabled(parallelRoute); + if (hasChildRuntimePrefetch) { + return true; + } + } + return false; +} +async function isPageAllowedToBlock(tree) { + const { mod: layoutOrPageMod } = await (0, _appdirmodule.getLayoutOrPageModule)(tree); + // TODO(restart-on-cache-miss): Does this work correctly for client page/layout modules? + const instantConfig = layoutOrPageMod ? layoutOrPageMod.unstable_instant : undefined; + // If we encounter a non-false instant config before a instant=false, + // the page isn't allowed to block. The config expresses a requirement for + // instant UI, so we should make sure that a static shell exists. + // (even if it'd use runtime prefetching for client navs) + if (instantConfig !== undefined) { + if (typeof instantConfig === 'object') { + return false; + } else if (instantConfig === false) { + return true; + } + } + const { parallelRoutes } = (0, _parseloadertree.parseLoaderTree)(tree); + for(const parallelRouteKey in parallelRoutes){ + const parallelRoute = parallelRoutes[parallelRouteKey]; + const subtreeIsBlocking = await isPageAllowedToBlock(parallelRoute); + if (subtreeIsBlocking) { + return true; + } + } + return false; +} +/** + * Checks if any segments in the loader tree have `instant` configs that need validating. + * NOTE: Client navigations call this multiple times, so we cache it. + * */ // Shared helper (not exported, not cached — called by the cached wrappers) +async function anySegmentNeedsInstantValidation(rootTree, mode) { + const segments = await findSegmentsWithInstantConfig(rootTree); + // Check if there's any configs with `prefetch: 'static'` or `mode: 'instant'`. + // (If there's only `false`, there's no need to run validation). + // If any segment has `unstable_disableValidation`, we skip validation for the whole tree. + let needsValidation = false; + for (const { config } of segments){ + if (typeof config === 'object') { + if (config.unstable_disableValidation === true || mode === 'dev' && config.unstable_disableDevValidation === true || mode === 'build' && config.unstable_disableBuildValidation === true) { + return false; + } + // do not short-circuit, some other segment might still have `unstable_disableValidation` + needsValidation = true; + } + } + return needsValidation; +} +const anySegmentNeedsInstantValidationInDev = cacheScopedToWorkStore(async (rootTree)=>anySegmentNeedsInstantValidation(rootTree, 'dev')); +const anySegmentNeedsInstantValidationInBuild = cacheScopedToWorkStore(async (rootTree)=>anySegmentNeedsInstantValidation(rootTree, 'build')); +const findSegmentsWithInstantConfig = cacheScopedToWorkStore(async (rootTree)=>{ + const results = []; + async function visit(tree, path) { + const { mod: layoutOrPageMod } = await (0, _appdirmodule.getLayoutOrPageModule)(tree); + // TODO(restart-on-cache-miss): Does this work correctly for client page/layout modules? + const instantConfig = layoutOrPageMod ? layoutOrPageMod.unstable_instant : undefined; + if (instantConfig !== undefined) { + results.push({ + path, + config: instantConfig + }); + } + const { parallelRoutes } = (0, _parseloadertree.parseLoaderTree)(tree); + for(const parallelRouteKey in parallelRoutes){ + const childTree = parallelRoutes[parallelRouteKey]; + await visit(childTree, [ + ...path, + parallelRouteKey + ]); + } + } + await visit(rootTree, []); + return results; +}); +const resolveInstantConfigSamplesForPage = async (tree)=>{ + const { mod: layoutOrPageMod } = await (0, _appdirmodule.getLayoutOrPageModule)(tree); + const instantConfig = layoutOrPageMod ? layoutOrPageMod.unstable_instant : undefined; + let samples = null; + if (instantConfig !== undefined && typeof instantConfig === 'object' && instantConfig.samples) { + samples = instantConfig.samples; + } + // The samples from inner segments override samples from outer segments, + // i.e. a page overrides the samples from a layout. + // We do not perform any merging logic. + const { parallelRoutes } = (0, _parseloadertree.parseLoaderTree)(tree); + for(const parallelRouteKey in parallelRoutes){ + if (parallelRouteKey !== 'children') { + continue; + } + const childTree = parallelRoutes[parallelRouteKey]; + const childSamples = await resolveInstantConfigSamplesForPage(childTree); + if (childSamples !== null) { + samples = childSamples; + } + } + return samples; +}; +/** + * A simple cache wrapper for 1-argument functions. + * The cache will live as long as the current WorkStore, + * i.e. it's scoped to a single request. + */ function cacheScopedToWorkStore(func) { + const resultsPerWorkStore = new WeakMap(); + return (arg)=>{ + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + if (!workStore) { + // No caching. + return func(arg); + } + let results = resultsPerWorkStore.get(workStore); + if (results && results.has(arg)) { + return results.get(arg); + } + const result = func(arg); + if (!results) { + results = new WeakMap(); + resultsPerWorkStore.set(workStore, results); + } + results.set(arg, result); + return result; + }; +} + +//# sourceMappingURL=instant-config.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/instant-validation/instant-samples-client.js b/build/node_modules/next/dist/server/app-render/instant-validation/instant-samples-client.js new file mode 100644 index 0000000..f8bc621 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/instant-validation/instant-samples-client.js @@ -0,0 +1,128 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + expectCompleteParamsInClientValidation: null, + instrumentParamsForClientValidation: null, + instrumentSearchParamsForClientValidation: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + expectCompleteParamsInClientValidation: function() { + return expectCompleteParamsInClientValidation; + }, + instrumentParamsForClientValidation: function() { + return instrumentParamsForClientValidation; + }, + instrumentSearchParamsForClientValidation: function() { + return instrumentSearchParamsForClientValidation; + } +}); +const _workunitasyncstorageexternal = require("../work-unit-async-storage.external"); +const _workasyncstorageexternal = require("../work-async-storage.external"); +const _instantsamples = require("./instant-samples"); +const _instantvalidationerror = require("./instant-validation-error"); +function instrumentParamsForClientValidation(underlyingParams) { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workStore && workUnitStore) { + switch(workUnitStore.type){ + case 'validation-client': + { + if (workUnitStore.validationSamples) { + const declaredKeys = new Set(Object.keys(workUnitStore.validationSamples.params ?? {})); + return (0, _instantsamples.createExhaustiveParamsProxy)(underlyingParams, declaredKeys, workStore.route); + } + break; + } + case 'prerender-runtime': + case 'prerender-client': + case 'prerender-legacy': + case 'prerender-ppr': + case 'prerender': + case 'cache': + case 'request': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + return underlyingParams; +} +function expectCompleteParamsInClientValidation(expression) { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workStore && workUnitStore) { + switch(workUnitStore.type){ + case 'validation-client': + { + if (workUnitStore.validationSamples) { + const fallbackParams = workUnitStore.fallbackRouteParams; + if (fallbackParams && fallbackParams.size > 0) { + const missingParams = Array.from(fallbackParams.keys()); + (0, _instantsamples.trackMissingSampleErrorAndThrow)(Object.defineProperty(new _instantvalidationerror.InstantValidationError(`Route "${workStore.route}" called ${expression} but param${missingParams.length > 1 ? 's' : ''} ${missingParams.map((p)=>`"${p}"`).join(', ')} ${missingParams.length > 1 ? 'are' : 'is'} not defined in the \`samples\` of \`unstable_instant\`. ` + `${expression} requires all route params to be provided.`), "__NEXT_ERROR_CODE", { + value: "E1109", + enumerable: false, + configurable: true + })); + } + } + break; + } + case 'prerender-runtime': + case 'prerender-client': + case 'prerender-legacy': + case 'prerender-ppr': + case 'prerender': + case 'cache': + case 'request': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } +} +function instrumentSearchParamsForClientValidation(underlyingSearchParams) { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workStore && workUnitStore) { + switch(workUnitStore.type){ + case 'validation-client': + { + if (workUnitStore.validationSamples) { + const declaredKeys = new Set(Object.keys(workUnitStore.validationSamples.searchParams ?? {})); + return (0, _instantsamples.createExhaustiveURLSearchParamsProxy)(underlyingSearchParams, declaredKeys, workStore.route); + } + break; + } + case 'prerender-runtime': + case 'prerender-client': + case 'prerender-legacy': + case 'prerender-ppr': + case 'prerender': + case 'cache': + case 'request': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + return underlyingSearchParams; +} + +//# sourceMappingURL=instant-samples-client.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/instant-validation/instant-samples.js b/build/node_modules/next/dist/server/app-render/instant-validation/instant-samples.js new file mode 100644 index 0000000..b248a96 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/instant-validation/instant-samples.js @@ -0,0 +1,432 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + assertRootParamInSamples: null, + createCookiesFromSample: null, + createDraftModeForValidation: null, + createExhaustiveParamsProxy: null, + createExhaustiveSearchParamsProxy: null, + createExhaustiveURLSearchParamsProxy: null, + createHeadersFromSample: null, + createRelativeURLFromSamples: null, + createValidationSampleTracking: null, + trackMissingSampleError: null, + trackMissingSampleErrorAndThrow: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + assertRootParamInSamples: function() { + return assertRootParamInSamples; + }, + createCookiesFromSample: function() { + return createCookiesFromSample; + }, + createDraftModeForValidation: function() { + return createDraftModeForValidation; + }, + createExhaustiveParamsProxy: function() { + return createExhaustiveParamsProxy; + }, + createExhaustiveSearchParamsProxy: function() { + return createExhaustiveSearchParamsProxy; + }, + createExhaustiveURLSearchParamsProxy: function() { + return createExhaustiveURLSearchParamsProxy; + }, + createHeadersFromSample: function() { + return createHeadersFromSample; + }, + createRelativeURLFromSamples: function() { + return createRelativeURLFromSamples; + }, + createValidationSampleTracking: function() { + return createValidationSampleTracking; + }, + trackMissingSampleError: function() { + return trackMissingSampleError; + }, + trackMissingSampleErrorAndThrow: function() { + return trackMissingSampleErrorAndThrow; + } +}); +const _cookies = require("../../web/spec-extension/cookies"); +const _requestcookies = require("../../web/spec-extension/adapters/request-cookies"); +const _headers = require("../../web/spec-extension/adapters/headers"); +const _getsegmentparam = require("../../../shared/lib/router/utils/get-segment-param"); +const _parserelativeurl = require("../../../shared/lib/router/utils/parse-relative-url"); +const _invarianterror = require("../../../shared/lib/invariant-error"); +const _instantvalidationerror = require("./instant-validation-error"); +const _workunitasyncstorageexternal = require("../work-unit-async-storage.external"); +const _reflectutils = require("../../../shared/lib/utils/reflect-utils"); +function createValidationSampleTracking() { + return { + missingSampleErrors: [] + }; +} +function getExpectedSampleTracking() { + let validationSampleTracking = null; + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workUnitStore) { + switch(workUnitStore.type){ + case 'request': + case 'validation-client': + // TODO(instant-validation-build): do we need any special handling for caches? + validationSampleTracking = workUnitStore.validationSampleTracking ?? null; + break; + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'prerender-legacy': + case 'prerender-ppr': + case 'prerender-client': + case 'prerender': + case 'prerender-runtime': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + if (!validationSampleTracking) { + throw Object.defineProperty(new _invarianterror.InvariantError('Expected to have a workUnitStore that provides validationSampleTracking'), "__NEXT_ERROR_CODE", { + value: "E1110", + enumerable: false, + configurable: true + }); + } + return validationSampleTracking; +} +function trackMissingSampleError(error) { + const validationSampleTracking = getExpectedSampleTracking(); + validationSampleTracking.missingSampleErrors.push(error); +} +function trackMissingSampleErrorAndThrow(error) { + // TODO(instant-validation-build): this should abort the render + trackMissingSampleError(error); + throw error; +} +function createCookiesFromSample(sampleCookies, route) { + const declaredNames = new Set(); + const cookies = new _cookies.RequestCookies(new Headers()); + if (sampleCookies) { + for (const cookie of sampleCookies){ + declaredNames.add(cookie.name); + if (cookie.value !== null) { + cookies.set(cookie.name, cookie.value); + } + } + } + const sealed = _requestcookies.RequestCookiesAdapter.seal(cookies); + return new Proxy(sealed, { + get (target, prop, receiver) { + if (prop === 'has') { + const originalMethod = Reflect.get(target, prop, receiver); + const wrappedMethod = function(name) { + if (!declaredNames.has(name)) { + trackMissingSampleErrorAndThrow(createMissingCookieSampleError(route, name)); + } + return originalMethod.call(target, name); + }; + return wrappedMethod; + } + if (prop === 'get') { + const originalMethod = Reflect.get(target, prop, receiver); + const wrappedMethod = function(nameOrCookie) { + let name; + if (typeof nameOrCookie === 'string') { + name = nameOrCookie; + } else if (nameOrCookie && typeof nameOrCookie === 'object' && typeof nameOrCookie.name === 'string') { + name = nameOrCookie.name; + } else { + // This is an invalid input. Pass it through to the original method so it can error. + return originalMethod.call(target, nameOrCookie); + } + if (!declaredNames.has(name)) { + trackMissingSampleErrorAndThrow(createMissingCookieSampleError(route, name)); + } + return originalMethod.call(target, name); + }; + return wrappedMethod; + } + // TODO(instant-validation-build): what should getAll do? + // Maybe we should only allow it if there's an array (possibly empty?) + return Reflect.get(target, prop, receiver); + } + }); +} +function createMissingCookieSampleError(route, name) { + return Object.defineProperty(new _instantvalidationerror.InstantValidationError(`Route "${route}" accessed cookie "${name}" which is not defined in the \`samples\` ` + `of \`unstable_instant\`. Add it to the sample's \`cookies\` array, ` + `or \`{ name: "${name}", value: null }\` if it should be absent.`), "__NEXT_ERROR_CODE", { + value: "E1115", + enumerable: false, + configurable: true + }); +} +function createHeadersFromSample(rawSampleHeaders, sampleCookies, route) { + // If we have cookie samples, add a `cookie` header to match. + // Accessing it will be implicitly allowed by the proxy -- + // if the user defined some cookies, accessing the "cookie" header is also fine. + const sampleHeaders = rawSampleHeaders ? [ + ...rawSampleHeaders + ] : []; + if (sampleHeaders.find(([name])=>name.toLowerCase() === 'cookie')) { + throw Object.defineProperty(new _instantvalidationerror.InstantValidationError('Invalid sample: Defining cookies via a "cookie" header is not supported. Use `cookies: [{ name: ..., value: ... }]` instead.'), "__NEXT_ERROR_CODE", { + value: "E1111", + enumerable: false, + configurable: true + }); + } + if (sampleCookies) { + const cookieHeaderValue = sampleCookies.toString(); + sampleHeaders.push([ + 'cookie', + // if the `cookies` samples were empty, or they were all `null`, then we have no cookies, + // and the header isn't present, but should remains readable, so we set it to null. + cookieHeaderValue !== '' ? cookieHeaderValue : null + ]); + } + const declaredNames = new Set(); + const headersInit = {}; + for (const [name, value] of sampleHeaders){ + declaredNames.add(name.toLowerCase()); + if (value !== null) { + headersInit[name.toLowerCase()] = value; + } + } + const sealed = _headers.HeadersAdapter.seal(_headers.HeadersAdapter.from(headersInit)); + return new Proxy(sealed, { + get (target, prop, receiver) { + if (prop === 'get' || prop === 'has') { + const originalMethod = Reflect.get(target, prop, receiver); + const patchedMethod = function(rawName) { + const name = rawName.toLowerCase(); + if (!declaredNames.has(name)) { + trackMissingSampleErrorAndThrow(Object.defineProperty(new _instantvalidationerror.InstantValidationError(`Route "${route}" accessed header "${name}" which is not defined in the \`samples\` ` + `of \`unstable_instant\`. Add it to the sample's \`headers\` array, ` + `or \`["${name}", null]\` if it should be absent.`), "__NEXT_ERROR_CODE", { + value: "E1116", + enumerable: false, + configurable: true + })); + } + // typescript can't reconcile a union of functions with a union of return types, + // so we have to cast the original return type away + return originalMethod.call(target, name); + }; + return patchedMethod; + } + return Reflect.get(target, prop, receiver); + } + }); +} +function createDraftModeForValidation() { + // Create a minimal DraftModeProvider-compatible object + // that always reports draft mode as disabled. + // + // private properties that can't be set from outside the class. + return { + get isEnabled () { + return false; + }, + enable () { + throw Object.defineProperty(new Error('Draft mode cannot be enabled during build-time instant validation.'), "__NEXT_ERROR_CODE", { + value: "E1092", + enumerable: false, + configurable: true + }); + }, + disable () { + throw Object.defineProperty(new Error('Draft mode cannot be disabled during build-time instant validation.'), "__NEXT_ERROR_CODE", { + value: "E1094", + enumerable: false, + configurable: true + }); + } + }; +} +function createExhaustiveParamsProxy(underlyingParams, declaredParamNames, route) { + return new Proxy(underlyingParams, { + get (target, prop, receiver) { + if (typeof prop === 'string' && !_reflectutils.wellKnownProperties.has(prop) && // Only error when accessing a param that is part of the route but wasn't provided. + // accessing properties that aren't expected to be a valid param value is fine. + prop in underlyingParams && !declaredParamNames.has(prop)) { + trackMissingSampleErrorAndThrow(Object.defineProperty(new _instantvalidationerror.InstantValidationError(`Route "${route}" accessed param "${prop}" which is not defined in the \`samples\` ` + `of \`unstable_instant\`. Add it to the sample's \`params\` object.`), "__NEXT_ERROR_CODE", { + value: "E1095", + enumerable: false, + configurable: true + })); + } + return Reflect.get(target, prop, receiver); + } + }); +} +function createExhaustiveSearchParamsProxy(searchParams, declaredSearchParamNames, route) { + return new Proxy(searchParams, { + get (target, prop, receiver) { + if (typeof prop === 'string' && !_reflectutils.wellKnownProperties.has(prop) && !declaredSearchParamNames.has(prop)) { + trackMissingSampleErrorAndThrow(createMissingSearchParamSampleError(route, prop)); + } + return Reflect.get(target, prop, receiver); + }, + has (target, prop) { + if (typeof prop === 'string' && !_reflectutils.wellKnownProperties.has(prop) && !declaredSearchParamNames.has(prop)) { + trackMissingSampleErrorAndThrow(createMissingSearchParamSampleError(route, prop)); + } + return Reflect.has(target, prop); + } + }); +} +function createExhaustiveURLSearchParamsProxy(searchParams, declaredSearchParamNames, route) { + return new Proxy(searchParams, { + get (target, prop, receiver) { + // Intercept method calls that access specific param names + if (prop === 'get' || prop === 'getAll' || prop === 'has') { + const originalMathod = Reflect.get(target, prop, receiver); + return (name)=>{ + if (typeof name === 'string' && !declaredSearchParamNames.has(name)) { + trackMissingSampleErrorAndThrow(createMissingSearchParamSampleError(route, name)); + } + return originalMathod.call(target, name); + }; + } + const value = Reflect.get(target, prop, receiver); + // Prevent `TypeError: Value of "this" must be of type URLSearchParams` for methods + if (typeof value === 'function' && !Object.hasOwn(target, prop)) { + return value.bind(target); + } + return value; + } + }); +} +function createMissingSearchParamSampleError(route, name) { + return Object.defineProperty(new _instantvalidationerror.InstantValidationError(`Route "${route}" accessed searchParam "${name}" which is not defined in the \`samples\` ` + `of \`unstable_instant\`. Add it to the sample's \`searchParams\` object, ` + `or \`{ "${name}": null }\` if it should be absent.`), "__NEXT_ERROR_CODE", { + value: "E1098", + enumerable: false, + configurable: true + }); +} +function createRelativeURLFromSamples(route, sampleParams, sampleSearchParams) { + // Build searchParams query object and URL search string from sample + const pathname = createPathnameFromRouteAndSampleParams(route, sampleParams ?? {}); + let search = ''; + if (sampleSearchParams) { + const qs = createURLSearchParamsFromSample(sampleSearchParams).toString(); + if (qs) { + search = '?' + qs; + } + } + return (0, _parserelativeurl.parseRelativeUrl)(pathname + search, undefined, true); +} +function createURLSearchParamsFromSample(sampleSearchParams) { + const result = new URLSearchParams(); + if (sampleSearchParams) { + for (const [key, value] of Object.entries(sampleSearchParams)){ + if (value === null || value === undefined) continue; + if (Array.isArray(value)) { + for (const v of value){ + result.append(key, v); + } + } else { + result.set(key, value); + } + } + } + return result; +} +/** + * Substitute sample params into `workStore.route` to create a plausible pathname. + * TODO(instant-validation-build): this logic is somewhat hacky and likely incomplete, + * but it should be good enough for some initial testing. + */ function createPathnameFromRouteAndSampleParams(route, params) { + let interpolatedSegments = []; + const rawSegments = route.split('/'); + for (const rawSegment of rawSegments){ + const param = (0, _getsegmentparam.getSegmentParam)(rawSegment); + if (param) { + switch(param.paramType){ + case 'catchall': + case 'optional-catchall': + { + let paramValue = params[param.paramName]; + if (paramValue === undefined) { + // The value for the param was not provided. `usePathname` will detect this and throw + // before this can surface to userspace. Use `[...NAME]` as a placeholder for the param value + // in case it pops up somewhere unexpectedly. + paramValue = [ + rawSegment + ]; + } else if (!Array.isArray(paramValue)) { + // NOTE: this happens outside of render, so we don't need `trackMissingSampleErrorAndThrow` + throw Object.defineProperty(new _instantvalidationerror.InstantValidationError(`Expected sample param value for segment '${rawSegment}' to be an array of strings, got ${typeof paramValue}`), "__NEXT_ERROR_CODE", { + value: "E1104", + enumerable: false, + configurable: true + }); + } + interpolatedSegments.push(...paramValue.map((v)=>encodeURIComponent(v))); + break; + } + case 'dynamic': + { + let paramValue = params[param.paramName]; + if (paramValue === undefined) { + // The value for the param was not provided. `usePathname` will detect this and throw + // before this can surface to userspace. Use `[NAME]` as a placeholder for the param value + // in case it pops up somewhere unexpectedly. + paramValue = rawSegment; + } else if (typeof paramValue !== 'string') { + // NOTE: this happens outside of render, so we don't need `trackMissingSampleErrorAndThrow` + throw Object.defineProperty(new _instantvalidationerror.InstantValidationError(`Expected sample param value for segment '${rawSegment}' to be a string, got ${typeof paramValue}`), "__NEXT_ERROR_CODE", { + value: "E1108", + enumerable: false, + configurable: true + }); + } + interpolatedSegments.push(encodeURIComponent(paramValue)); + break; + } + case 'catchall-intercepted-(..)(..)': + case 'catchall-intercepted-(.)': + case 'catchall-intercepted-(..)': + case 'catchall-intercepted-(...)': + case 'dynamic-intercepted-(..)(..)': + case 'dynamic-intercepted-(.)': + case 'dynamic-intercepted-(..)': + case 'dynamic-intercepted-(...)': + { + // TODO(instant-validation-build): i don't know how these are supposed to work, or if we can even get them here + throw Object.defineProperty(new _invarianterror.InvariantError('Not implemented: Validation of interception routes'), "__NEXT_ERROR_CODE", { + value: "E1106", + enumerable: false, + configurable: true + }); + } + default: + { + param.paramType; + } + } + } else { + interpolatedSegments.push(rawSegment); + } + } + return interpolatedSegments.join('/'); +} +function assertRootParamInSamples(workStore, sampleParams, paramName) { + if (sampleParams && paramName in sampleParams) { + // The param is defined in the samples. + } else { + const route = workStore.route; + trackMissingSampleErrorAndThrow(Object.defineProperty(new _instantvalidationerror.InstantValidationError(`Route "${route}" accessed root param "${paramName}" which is not defined in the \`samples\` ` + `of \`unstable_instant\`. Add it to the sample's \`params\` object.`), "__NEXT_ERROR_CODE", { + value: "E1114", + enumerable: false, + configurable: true + })); + } +} + +//# sourceMappingURL=instant-samples.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/instant-validation/instant-validation-error.js b/build/node_modules/next/dist/server/app-render/instant-validation/instant-validation-error.js new file mode 100644 index 0000000..ef43261 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/instant-validation/instant-validation-error.js @@ -0,0 +1,33 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + InstantValidationError: null, + isInstantValidationError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + InstantValidationError: function() { + return InstantValidationError; + }, + isInstantValidationError: function() { + return isInstantValidationError; + } +}); +const INSTANT_VALIDATION_ERROR_DIGEST = 'INSTANT_VALIDATION_ERROR'; +function isInstantValidationError(err) { + return !!(err && typeof err === 'object' && err instanceof Error && err.digest === INSTANT_VALIDATION_ERROR_DIGEST); +} +class InstantValidationError extends Error { + constructor(...args){ + super(...args), this.digest = INSTANT_VALIDATION_ERROR_DIGEST; + } +} + +//# sourceMappingURL=instant-validation-error.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/instant-validation/instant-validation.js b/build/node_modules/next/dist/server/app-render/instant-validation/instant-validation.js new file mode 100644 index 0000000..a382688 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/instant-validation/instant-validation.js @@ -0,0 +1,713 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + collectStagedSegmentData: null, + createCombinedPayloadAtDepth: null, + createCombinedPayloadStream: null, + discoverValidationDepths: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + collectStagedSegmentData: function() { + return collectStagedSegmentData; + }, + createCombinedPayloadAtDepth: function() { + return createCombinedPayloadAtDepth; + }, + createCombinedPayloadStream: function() { + return createCombinedPayloadStream; + }, + discoverValidationDepths: function() { + return discoverValidationDepths; + } +}); +const _jsxruntime = require("react/jsx-runtime"); +const _invarianterror = require("../../../shared/lib/invariant-error"); +const _stagedrendering = require("../staged-rendering"); +const _manifestssingleton = require("../manifests-singleton"); +const _apprenderrenderutils = require("../app-render-render-utils"); +const _workasyncstorageexternal = require("../work-async-storage.external"); +const _prospectiverenderutils = require("../prospective-render-utils"); +const _createerrorhandler = require("../create-error-handler"); +const _boundary = require("../../../client/components/instant-validation/boundary"); +const _appdirmodule = require("../../lib/app-dir-module"); +const _parseloadertree = require("../../../shared/lib/router/utils/parse-loader-tree"); +const _nodestream = require("node:stream"); +const _streamutils = require("./stream-utils"); +const _debugchannelserver = require("../debug-channel-server"); +const _client = require("react-server-dom-webpack/client"); +const _server = require("react-server-dom-webpack/server"); +const _segment = require("../../../shared/lib/segment"); +const filterStackFrame = process.env.NODE_ENV !== 'production' ? require('../../lib/source-maps').filterStackFrameDEV : undefined; +const findSourceMapURL = process.env.NODE_ENV !== 'production' ? require('../../lib/source-maps').findSourceMapURLDEV : undefined; +const debug = process.env.NEXT_PRIVATE_DEBUG_VALIDATION === '1' ? console.log : undefined; +function traverseRootSeedDataSegments(initialRSCPayload, processSegment) { + const { flightRouterState, seedData } = getRootDataFromPayload(initialRSCPayload); + const [rootSegment] = flightRouterState; + const rootPath = stringifySegment(rootSegment); + return traverseCacheNodeSegments(rootPath, flightRouterState, seedData, processSegment); +} +function traverseCacheNodeSegments(path, route, seedData, processSegment) { + processSegment(path, seedData); + const [_segment, childRoutes] = route; + const [_node, parallelRoutesData, _loading, _isPartial] = seedData; + for(const parallelRouteKey in childRoutes){ + const childSeedData = parallelRoutesData[parallelRouteKey]; + if (!childSeedData) { + throw Object.defineProperty(new _invarianterror.InvariantError(`Got unexpected empty seed data during instant validation`), "__NEXT_ERROR_CODE", { + value: "E992", + enumerable: false, + configurable: true + }); + } + const childRoute = childRoutes[parallelRouteKey]; + // NOTE: if this is a __PAGE__ segment, it might have search params appended. + // Whoever reads from the cache needs to append them as well. + const [childSegment] = childRoute; + const childPath = createChildSegmentPath(path, parallelRouteKey, childSegment); + traverseCacheNodeSegments(childPath, childRoute, childSeedData, processSegment); + } +} +function createChildSegmentPath(parentPath, parallelRouteKey, segment) { + const parallelRoutePrefix = parallelRouteKey === 'children' ? '' : `@${encodeURIComponent(parallelRouteKey)}/`; + return `${parentPath}/${parallelRoutePrefix}${stringifySegment(segment)}`; +} +function stringifySegment(segment) { + return typeof segment === 'string' ? encodeURIComponent(segment) : encodeURIComponent(segment[0]) + '|' + segment[1] + '|' + segment[2]; +} +async function collectStagedSegmentData(fullPageChunks, fullPageDebugChunks, startTime, hasRuntimePrefetch, clientReferenceManifest) { + const debugChannelAbortController = new AbortController(); + const debugStream = fullPageDebugChunks ? (0, _streamutils.createNodeStreamFromChunks)(fullPageDebugChunks, debugChannelAbortController.signal) : null; + const { stream, controller } = createStagedStreamFromChunks(fullPageChunks); + stream.on('end', ()=>{ + // When the stream finishes, we have to close the debug stream too, + // but delay it to avoid "Connection closed." errors. + setImmediate(()=>debugChannelAbortController.abort()); + }); + // Technically we're just re-encoding, so nothing new should be emitted, + // but we add an environment name just in case. + const environmentName = ()=>{ + const currentStage = controller.currentStage; + switch(currentStage){ + case _stagedrendering.RenderStage.Static: + return 'Prerender'; + case _stagedrendering.RenderStage.Runtime: + return hasRuntimePrefetch ? 'Prefetch' : 'Prefetchable'; + case _stagedrendering.RenderStage.Dynamic: + return 'Server'; + default: + currentStage; + throw Object.defineProperty(new _invarianterror.InvariantError(`Invalid render stage: ${currentStage}`), "__NEXT_ERROR_CODE", { + value: "E881", + enumerable: false, + configurable: true + }); + } + }; + // Deserialize the payload. + // NOTE: the stream will initially be in the static stage, so that's as far as we get here. + // We still expect the outer structure of the payload to be readable in this state. + const serverConsumerManifest = { + moduleLoading: null, + moduleMap: clientReferenceManifest.rscModuleMapping, + serverModuleMap: (0, _manifestssingleton.getServerModuleMap)() + }; + const payload = await (0, _client.createFromNodeStream)(stream, serverConsumerManifest, { + findSourceMapURL, + debugChannel: debugStream ?? undefined, + // Do not pass start/end timings - we do not want to omit any debug info. + startTime: undefined, + endTime: undefined + }); + // Deconstruct the payload into separate streams per segment. + // We have to preserve the stage information for each of them, + // so that we can later render each segment in any stage we need. + const { head } = getRootDataFromPayload(payload); + const segments = new Map(); + traverseRootSeedDataSegments(payload, (segmentPath, seedData)=>{ + segments.set(segmentPath, createSegmentData(seedData)); + }); + const cache = createSegmentCache(); + const pendingTasks = []; + /** Track when we advance stages so we can pass them as `endTime` later. */ const stageEndTimes = { + [_stagedrendering.RenderStage.Static]: -1, + [_stagedrendering.RenderStage.Runtime]: -1 + }; + const renderIntoCacheItem = async (data, cacheEntry)=>{ + const segmentDebugChannel = cacheEntry.debugChunks ? (0, _debugchannelserver.createDebugChannel)() : undefined; + const itemStream = (0, _server.renderToReadableStream)(data, clientReferenceManifest.clientModules, { + filterStackFrame, + debugChannel: segmentDebugChannel == null ? void 0 : segmentDebugChannel.serverSide, + environmentName, + startTime, + onError (error) { + const digest = (0, _createerrorhandler.getDigestForWellKnownError)(error); + if (digest) { + return digest; + } + // Forward existing digests + if (error && typeof error === 'object' && 'digest' in error && typeof error.digest === 'string') { + return error.digest; + } + // We don't need to log the errors because we would have already done that + // when generating the original Flight stream for the whole page. + if (process.env.NEXT_DEBUG_BUILD || process.env.__NEXT_VERBOSE_LOGGING) { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + (0, _prospectiverenderutils.printDebugThrownValueForProspectiveRender)(error, (workStore == null ? void 0 : workStore.route) ?? 'unknown route', _prospectiverenderutils.Phase.InstantValidation); + } + } + }); + await Promise.all([ + // accumulate Flight chunks + (async ()=>{ + for await (const chunk of itemStream.values()){ + writeChunk(cacheEntry.chunks, controller.currentStage, chunk); + } + })(), + // accumulate Debug chunks + segmentDebugChannel && (async ()=>{ + for await (const chunk of segmentDebugChannel.clientSide.readable.values()){ + cacheEntry.debugChunks.push(chunk); + } + })() + ]); + }; + await (0, _apprenderrenderutils.runInSequentialTasks)(()=>{ + { + const headCacheItem = createSegmentCacheItem(!!fullPageDebugChunks); + cache.head = headCacheItem; + pendingTasks.push(renderIntoCacheItem(head, headCacheItem)); + } + for (const [segmentPath, segmentData] of segments){ + const segmentCacheItem = createSegmentCacheItem(!!fullPageDebugChunks); + cache.segments.set(segmentPath, segmentCacheItem); + pendingTasks.push(renderIntoCacheItem(segmentData, segmentCacheItem)); + } + }, ()=>{ + stageEndTimes[_stagedrendering.RenderStage.Static] = performance.now() + performance.timeOrigin; + controller.advanceStage(_stagedrendering.RenderStage.Runtime); + }, ()=>{ + stageEndTimes[_stagedrendering.RenderStage.Runtime] = performance.now() + performance.timeOrigin; + controller.advanceStage(_stagedrendering.RenderStage.Dynamic); + }); + await Promise.all(pendingTasks); + return { + cache, + payload, + stageEndTimes + }; +} +/** + * Turns accumulated stage chunks into a stream. + * The stream starts out in Static stage, and can be advanced further + * using the returned controller object. + * Conceptually, this is similar to how we unblock more content + * by advancing stages in a regular staged render. + * */ function createStagedStreamFromChunks(stageChunks) { + // The successive stages are supersets of one another, + // so we can index into the dynamic chunks everywhere + // and just look at the lengths of the Static/Runtime arrays + const allChunks = stageChunks[_stagedrendering.RenderStage.Dynamic]; + const numStaticChunks = stageChunks[_stagedrendering.RenderStage.Static].length; + const numRuntimeChunks = stageChunks[_stagedrendering.RenderStage.Runtime].length; + const numDynamicChunks = stageChunks[_stagedrendering.RenderStage.Dynamic].length; + let chunkIx = 0; + let currentStage = _stagedrendering.RenderStage.Static; + let closed = false; + function push(chunk) { + stream.push(chunk); + } + function close() { + closed = true; + stream.push(null); + } + const stream = new _nodestream.Readable({ + read () { + // Emit static chunks + for(; chunkIx < numStaticChunks; chunkIx++){ + push(allChunks[chunkIx]); + } + // If there's no more chunks after this stage, finish the stream. + if (chunkIx >= allChunks.length) { + close(); + return; + } + } + }); + function advanceStage(stage) { + if (closed) return true; + switch(stage){ + case _stagedrendering.RenderStage.Runtime: + { + currentStage = _stagedrendering.RenderStage.Runtime; + for(; chunkIx < numRuntimeChunks; chunkIx++){ + push(allChunks[chunkIx]); + } + break; + } + case _stagedrendering.RenderStage.Dynamic: + { + currentStage = _stagedrendering.RenderStage.Dynamic; + for(; chunkIx < numDynamicChunks; chunkIx++){ + push(allChunks[chunkIx]); + } + break; + } + default: + { + stage; + } + } + // If there's no more chunks after this stage, finish the stream. + if (chunkIx >= allChunks.length) { + close(); + return true; + } else { + return false; + } + } + return { + stream, + controller: { + get currentStage () { + return currentStage; + }, + advanceStage + } + }; +} +function writeChunk(stageChunks, stage, chunk) { + switch(stage){ + case _stagedrendering.RenderStage.Static: + { + stageChunks[_stagedrendering.RenderStage.Static].push(chunk); + // fallthrough + } + case _stagedrendering.RenderStage.Runtime: + { + stageChunks[_stagedrendering.RenderStage.Runtime].push(chunk); + // fallthrough + } + case _stagedrendering.RenderStage.Dynamic: + { + stageChunks[_stagedrendering.RenderStage.Dynamic].push(chunk); + break; + } + default: + { + stage; + } + } +} +async function createCombinedPayloadStream(payload, extraChunksAbortController, renderSignal, clientReferenceManifest, startTime, isDebugChannelEnabled) { + // Collect all the chunks so that we're not dependent on timing of the render. + let isRenderable = true; + const renderableChunks = []; + const allChunks = []; + const debugChunks = isDebugChannelEnabled ? [] : null; + const debugChannel = isDebugChannelEnabled ? (0, _debugchannelserver.createDebugChannel)() : null; + let streamFinished; + await (0, _apprenderrenderutils.runInSequentialTasks)(()=>{ + const stream = (0, _server.renderToReadableStream)(payload, clientReferenceManifest.clientModules, { + filterStackFrame, + debugChannel: debugChannel == null ? void 0 : debugChannel.serverSide, + startTime, + onError (error) { + const digest = (0, _createerrorhandler.getDigestForWellKnownError)(error); + if (digest) { + return digest; + } + // Forward existing digests + if (error && typeof error === 'object' && 'digest' in error && typeof error.digest === 'string') { + return error.digest; + } + // We don't need to log the errors because we would have already done that + // when generating the original Flight stream for the whole page. + if (process.env.NEXT_DEBUG_BUILD || process.env.__NEXT_VERBOSE_LOGGING) { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + (0, _prospectiverenderutils.printDebugThrownValueForProspectiveRender)(error, (workStore == null ? void 0 : workStore.route) ?? 'unknown route', _prospectiverenderutils.Phase.InstantValidation); + } + } + }); + streamFinished = Promise.all([ + // Accumulate Flight chunks + (async ()=>{ + for await (const chunk of stream.values()){ + allChunks.push(chunk); + if (isRenderable) { + renderableChunks.push(chunk); + } + } + })(), + // Accumulate debug chunks + debugChannel && (async ()=>{ + for await (const chunk of debugChannel.clientSide.readable.values()){ + debugChunks.push(chunk); + } + })() + ]); + }, ()=>{ + isRenderable = false; + extraChunksAbortController.abort(); + }); + await streamFinished; + return { + stream: (0, _streamutils.createNodeStreamWithLateRelease)(renderableChunks, allChunks, renderSignal), + debugStream: debugChunks ? (0, _streamutils.createNodeStreamFromChunks)(debugChunks, renderSignal) : null + }; +} +function getRootDataFromPayload(initialRSCPayload) { + // FlightDataPath is an unsound type, hence the additional checks. + const flightDataPaths = initialRSCPayload.f; + if (flightDataPaths.length !== 1 && flightDataPaths[0].length !== 3) { + throw Object.defineProperty(new _invarianterror.InvariantError('InitialRSCPayload does not match the expected shape during instant validation.'), "__NEXT_ERROR_CODE", { + value: "E994", + enumerable: false, + configurable: true + }); + } + const flightRouterState = flightDataPaths[0][0]; + const seedData = flightDataPaths[0][1]; + // TODO: handle head + const head = flightDataPaths[0][2]; + return { + flightRouterState, + seedData, + head + }; +} +async function createValidationHead(cache, releaseSignal, clientReferenceManifest, stageEndTimes, stage) { + const segmentCacheItem = cache.head; + if (!segmentCacheItem) { + throw Object.defineProperty(new _invarianterror.InvariantError(`Missing segment data: `), "__NEXT_ERROR_CODE", { + value: "E1072", + enumerable: false, + configurable: true + }); + } + return await deserializeFromChunks(segmentCacheItem.chunks[stage], segmentCacheItem.chunks[_stagedrendering.RenderStage.Dynamic], segmentCacheItem.debugChunks, releaseSignal, clientReferenceManifest, { + startTime: undefined, + endTime: stageEndTimes[stage] + }); +} +/** + * Deserializes a (partial possibly partial) RSC stream, given as a chunk-array. + * If the stream is partial, we'll wait for `releaseSignal` to fire + * and then complete the deserialization using `allChunks`. + * + * This is used to obtain a partially-complete model (that might contain unresolved holes) + * and then release any late debug info from chunks that came later before we abort the render. + * */ function deserializeFromChunks(partialChunks, allChunks, debugChunks, releaseSignal, clientReferenceManifest, timings) { + const debugChannelAbortController = new AbortController(); + const debugStream = debugChunks ? (0, _streamutils.createNodeStreamFromChunks)(debugChunks, debugChannelAbortController.signal) : null; + const serverConsumerManifest = { + moduleLoading: null, + moduleMap: clientReferenceManifest.rscModuleMapping, + serverModuleMap: (0, _manifestssingleton.getServerModuleMap)() + }; + const segmentStream = partialChunks.length < allChunks.length ? (0, _streamutils.createNodeStreamWithLateRelease)(partialChunks, allChunks, releaseSignal) : (0, _streamutils.createNodeStreamFromChunks)(partialChunks); + segmentStream.on('end', ()=>{ + // When the stream finishes, we have to close the debug stream too, + // but delay it to avoid "Connection closed." errors. + setImmediate(()=>debugChannelAbortController.abort()); + }); + return (0, _client.createFromNodeStream)(segmentStream, serverConsumerManifest, { + findSourceMapURL, + debugChannel: debugStream ?? undefined, + startTime: timings == null ? void 0 : timings.startTime, + endTime: timings == null ? void 0 : timings.endTime + }); +} +function createSegmentData(seedData) { + const [node, _parallelRoutesData, _unused, isPartial, varyParams] = seedData; + return { + node, + isPartial, + varyParams + }; +} +function getCacheNodeSeedDataFromSegment(data, slots) { + return [ + data.node, + slots, + /* unused (previously `loading`) */ null, + data.isPartial, + data.varyParams + ]; +} +function createSegmentCache() { + return { + head: null, + segments: new Map() + }; +} +function createSegmentCacheItem(withDebugChunks) { + return { + chunks: { + [_stagedrendering.RenderStage.Static]: [], + [_stagedrendering.RenderStage.Runtime]: [], + [_stagedrendering.RenderStage.Dynamic]: [] + }, + debugChunks: withDebugChunks ? [] : null + }; +} +/** + * Whether this segment consumes a URL depth level. Each URL depth + * represents a potential navigation boundary. + * + * The root segment ('') consumes depth 0. Regular segments like + * 'dashboard' consume the next depth — whether or not they have a + * layout. Route groups, __PAGE__, __DEFAULT__, and /_not-found don't + * consume a depth — they share the boundary of their parent. + */ function segmentConsumesURLDepth(segment) { + // Dynamic segments (tuples) always consume a URL depth. + if (typeof segment !== 'string') return true; + // Route groups, pages, defaults, and not-found don't consume a depth. + if (segment.startsWith(_segment.PAGE_SEGMENT_KEY) || (0, _segment.isGroupSegment)(segment) || segment === _segment.DEFAULT_SEGMENT_KEY || segment === _segment.NOT_FOUND_SEGMENT_KEY) { + return false; + } + // Everything else consumes a depth, including the root segment ''. + return true; +} +function discoverValidationDepths(loaderTree) { + const groupDepthsByUrlDepth = []; + function recordGroupDepth(urlDepth, groupDepth) { + while(groupDepthsByUrlDepth.length <= urlDepth){ + groupDepthsByUrlDepth.push(0); + } + if (groupDepth > groupDepthsByUrlDepth[urlDepth]) { + groupDepthsByUrlDepth[urlDepth] = groupDepth; + } + } + // urlDepth tracks the index of the current URL-consuming segment. + // Groups accumulate at the same index. When the next URL segment + // is reached, it increments the index and resets the group counter. + // We start at -1 so the root segment '' increments to 0. + function walk(tree, urlDepth, groupDepth) { + const segment = tree[0]; + const { parallelRoutes } = (0, _parseloadertree.parseLoaderTree)(tree); + const consumesDepth = segmentConsumesURLDepth(segment); + let nextUrlDepth = urlDepth; + let nextGroupDepth = groupDepth; + if (consumesDepth) { + nextUrlDepth = urlDepth + 1; + nextGroupDepth = 0; + recordGroupDepth(nextUrlDepth, 0); + } else if (typeof segment === 'string' && (0, _segment.isGroupSegment)(segment) && segment !== '(__SLOT__)') { + // Count real route groups but not the synthetic '(__SLOT__)' segment + // that Next.js inserts for parallel slots. The synthetic group + // can't be a real navigation boundary. + nextGroupDepth++; + recordGroupDepth(urlDepth, nextGroupDepth); + } + for(const key in parallelRoutes){ + walk(parallelRoutes[key], nextUrlDepth, nextGroupDepth); + } + } + walk(loaderTree, -1, 0); + return groupDepthsByUrlDepth; +} +async function createCombinedPayloadAtDepth(initialRSCPayload, cache, initialLoaderTree, getDynamicParamFromSegment, query, depth, groupDepth, releaseSignal, boundaryState, clientReferenceManifest, stageEndTimes, useRuntimeStageForPartialSegments) { + let hasStaticSegments = false; + let hasRuntimeSegments = false; + function getSegment(loaderTree) { + const dynamicParam = getDynamicParamFromSegment(loaderTree); + if (dynamicParam) { + return dynamicParam.treeSegment; + } + const segment = loaderTree[0]; + return query ? (0, _segment.addSearchParamsIfPageSegment)(segment, query) : segment; + } + async function buildSharedTreeSeedData(loaderTree, parentPath, key, urlDepthConsumed, groupDepthConsumed) { + const { parallelRoutes } = (0, _parseloadertree.parseLoaderTree)(loaderTree); + const segment = getSegment(loaderTree); + const path = parentPath === null ? stringifySegment(segment) : createChildSegmentPath(parentPath, key, segment); + debug == null ? void 0 : debug(` ${path || '/'} - Dynamic`); + const segmentCacheItem = cache.segments.get(path); + if (!segmentCacheItem) { + throw Object.defineProperty(new _invarianterror.InvariantError(`Missing segment data: ${path}`), "__NEXT_ERROR_CODE", { + value: "E995", + enumerable: false, + configurable: true + }); + } + const segmentData = await deserializeFromChunks(segmentCacheItem.chunks[_stagedrendering.RenderStage.Dynamic], segmentCacheItem.chunks[_stagedrendering.RenderStage.Dynamic], segmentCacheItem.debugChunks, releaseSignal, clientReferenceManifest, null); + const consumesUrlDepth = segmentConsumesURLDepth(segment); + const isGroup = typeof segment === 'string' && (0, _segment.isGroupSegment)(segment) && segment !== '(__SLOT__)'; + // Advance counters for this segment before the boundary check, + // mirroring how discoverValidationDepths counts. URL segments + // increment urlDepthConsumed, groups increment groupDepthConsumed. + // The synthetic '(__SLOT__)' segment is excluded — it can't be a + // real navigation boundary. + let nextUrlDepth = urlDepthConsumed; + let currentGroupDepth = groupDepthConsumed; + if (consumesUrlDepth) { + nextUrlDepth++; + currentGroupDepth = 0; + } else if (isGroup) { + currentGroupDepth++; + } + const pastUrlBoundary = nextUrlDepth > depth; + const isBoundary = pastUrlBoundary && currentGroupDepth >= groupDepth; + if (isBoundary) { + debug == null ? void 0 : debug(` ['${path}' is the boundary (url=${nextUrlDepth}, group=${currentGroupDepth})]`); + boundaryState.expectedIds.add(path); + const finalSegmentData = { + ...segmentData, + node: // eslint-disable-next-line @next/internal/no-ambiguous-jsx -- bundled in the server layer + /*#__PURE__*/ (0, _jsxruntime.jsx)(_boundary.PlaceValidationBoundaryBelowThisLevel, { + id: path, + children: segmentData.node + }, "c") + }; + const slots = {}; + let requiresInstantUI = false; + let createInstantStack = null; + for(const parallelRouteKey in parallelRoutes){ + const result = await buildNewTreeSeedData(parallelRoutes[parallelRouteKey], path, parallelRouteKey, false); + slots[parallelRouteKey] = result.seedData; + if (result.requiresInstantUI) { + requiresInstantUI = true; + if (createInstantStack === null) { + createInstantStack = result.createInstantStack; + } + } + } + return { + seedData: getCacheNodeSeedDataFromSegment(finalSegmentData, slots), + requiresInstantUI, + createInstantStack + }; + } + // Not at the boundary yet — keep walking as shared. + const slots = {}; + let requiresInstantUI = false; + let createInstantStack = null; + for(const parallelRouteKey in parallelRoutes){ + const result = await buildSharedTreeSeedData(parallelRoutes[parallelRouteKey], path, parallelRouteKey, nextUrlDepth, currentGroupDepth); + slots[parallelRouteKey] = result.seedData; + if (result.requiresInstantUI) { + requiresInstantUI = true; + if (createInstantStack === null) { + createInstantStack = result.createInstantStack; + } + } + } + return { + seedData: getCacheNodeSeedDataFromSegment(segmentData, slots), + requiresInstantUI, + createInstantStack + }; + } + async function buildNewTreeSeedData(lt, parentPath, key, isInsideRuntimePrefetch) { + const { parallelRoutes } = (0, _parseloadertree.parseLoaderTree)(lt); + const { mod: layoutOrPageMod } = await (0, _appdirmodule.getLayoutOrPageModule)(lt); + const segment = getSegment(lt); + const path = parentPath === null ? stringifySegment(segment) : createChildSegmentPath(parentPath, key, segment); + let instantConfig = null; + let localCreateInstantStack = null; + if (layoutOrPageMod !== undefined) { + instantConfig = layoutOrPageMod.unstable_instant ?? null; + if (instantConfig && typeof instantConfig === 'object') { + const rawFactory = layoutOrPageMod.__debugCreateInstantConfigStack; + localCreateInstantStack = typeof rawFactory === 'function' ? rawFactory : null; + } + } + let childIsInsideRuntimePrefetch = isInsideRuntimePrefetch; + let stage; + if (!isInsideRuntimePrefetch) { + if (instantConfig && typeof instantConfig === 'object' && instantConfig.prefetch === 'runtime') { + stage = _stagedrendering.RenderStage.Runtime; + childIsInsideRuntimePrefetch = true; + hasRuntimeSegments = true; + } else { + if (useRuntimeStageForPartialSegments) { + stage = _stagedrendering.RenderStage.Runtime; + hasRuntimeSegments = true; + } else { + stage = _stagedrendering.RenderStage.Static; + hasStaticSegments = true; + } + } + } else { + stage = _stagedrendering.RenderStage.Runtime; + hasRuntimeSegments = true; + } + debug == null ? void 0 : debug(` ${path || '/'} - ${_stagedrendering.RenderStage[stage]}`); + const segmentCacheItem = cache.segments.get(path); + if (!segmentCacheItem) { + throw Object.defineProperty(new _invarianterror.InvariantError(`Missing segment data: ${path}`), "__NEXT_ERROR_CODE", { + value: "E995", + enumerable: false, + configurable: true + }); + } + const segmentData = await deserializeFromChunks(segmentCacheItem.chunks[stage], segmentCacheItem.chunks[_stagedrendering.RenderStage.Dynamic], segmentCacheItem.debugChunks, releaseSignal, clientReferenceManifest, { + startTime: undefined, + endTime: stageEndTimes[stage] + }); + // Build children first, then determine requiresInstantUI. + const slots = {}; + let childrenRequireInstantUI = false; + let childCreateInstantStack = null; + for(const parallelRouteKey in parallelRoutes){ + const result = await buildNewTreeSeedData(parallelRoutes[parallelRouteKey], path, parallelRouteKey, childIsInsideRuntimePrefetch); + slots[parallelRouteKey] = result.seedData; + if (result.requiresInstantUI) { + childrenRequireInstantUI = true; + if (childCreateInstantStack === null) { + childCreateInstantStack = result.createInstantStack; + } + } + } + // Local config takes precedence over children. + let requiresInstantUI; + let createInstantStack; + if (instantConfig === false) { + requiresInstantUI = false; + createInstantStack = null; + } else if (instantConfig && typeof instantConfig === 'object') { + requiresInstantUI = true; + createInstantStack = localCreateInstantStack; + } else { + requiresInstantUI = childrenRequireInstantUI; + createInstantStack = childCreateInstantStack; + } + return { + seedData: getCacheNodeSeedDataFromSegment(segmentData, slots), + requiresInstantUI, + createInstantStack + }; + } + const { seedData, requiresInstantUI, createInstantStack } = await buildSharedTreeSeedData(initialLoaderTree, null, null, 0 /* urlDepthConsumed */ , 0 /* groupDepthConsumed */ ); + if (!requiresInstantUI) { + return null; + } + const { flightRouterState } = getRootDataFromPayload(initialRSCPayload); + const headStage = hasRuntimeSegments ? _stagedrendering.RenderStage.Runtime : _stagedrendering.RenderStage.Static; + const head = await createValidationHead(cache, releaseSignal, clientReferenceManifest, stageEndTimes, headStage); + const payload = { + ...initialRSCPayload, + f: [ + [ + flightRouterState, + seedData, + head + ] + ] + }; + return { + payload, + hasAmbiguousErrors: hasStaticSegments, + createInstantStack + }; +} + +//# sourceMappingURL=instant-validation.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/instant-validation/stream-utils.js b/build/node_modules/next/dist/server/app-render/instant-validation/stream-utils.js new file mode 100644 index 0000000..bcc7530 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/instant-validation/stream-utils.js @@ -0,0 +1,96 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createNodeStreamFromChunks: null, + createNodeStreamWithLateRelease: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createNodeStreamFromChunks: function() { + return createNodeStreamFromChunks; + }, + createNodeStreamWithLateRelease: function() { + return createNodeStreamWithLateRelease; + } +}); +const _invarianterror = require("../../../shared/lib/invariant-error"); +function createNodeStreamWithLateRelease(partialChunks, allChunks, releaseSignal) { + if (process.env.NEXT_RUNTIME === 'edge') { + throw Object.defineProperty(new _invarianterror.InvariantError('createNodeStreamWithLateRelease cannot be used in the edge runtime'), "__NEXT_ERROR_CODE", { + value: "E993", + enumerable: false, + configurable: true + }); + } else { + const { Readable } = require('node:stream'); + let nextIndex = 0; + const readable = new Readable({ + read () { + while(nextIndex < partialChunks.length){ + this.push(partialChunks[nextIndex]); + nextIndex++; + } + } + }); + releaseSignal.addEventListener('abort', ()=>{ + // Flush any remaining chunks from the original set + while(nextIndex < partialChunks.length){ + readable.push(partialChunks[nextIndex]); + nextIndex++; + } + // Flush all chunks since we're now aborted and can't schedule + // any new work but these chunks might unblock debugInfo + while(nextIndex < allChunks.length){ + readable.push(allChunks[nextIndex]); + nextIndex++; + } + setImmediate(()=>{ + readable.push(null); + }); + }, { + once: true + }); + return readable; + } +} +function createNodeStreamFromChunks(chunks, signal) { + if (process.env.NEXT_RUNTIME === 'edge') { + throw Object.defineProperty(new _invarianterror.InvariantError('createNodeStreamFromChunks cannot be used in the edge runtime'), "__NEXT_ERROR_CODE", { + value: "E945", + enumerable: false, + configurable: true + }); + } else { + const { Readable } = require('node:stream'); + // If there's a signal, delay closing until it fires + if (signal) { + signal.addEventListener('abort', ()=>{ + readable.push(null); + }, { + once: true + }); + } + let nextIndex = 0; + const readable = new Readable({ + read () { + while(nextIndex < chunks.length){ + this.push(chunks[nextIndex]); + nextIndex++; + } + if (!signal) { + this.push(null); + } + } + }); + return readable; + } +} + +//# sourceMappingURL=stream-utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/interop-default.js b/build/node_modules/next/dist/server/app-render/interop-default.js new file mode 100644 index 0000000..0170363 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/interop-default.js @@ -0,0 +1,17 @@ +/** + * Interop between "export default" and "module.exports". + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "interopDefault", { + enumerable: true, + get: function() { + return interopDefault; + } +}); +function interopDefault(mod) { + return mod.default || mod; +} + +//# sourceMappingURL=interop-default.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/make-get-server-inserted-html.js b/build/node_modules/next/dist/server/app-render/make-get-server-inserted-html.js new file mode 100644 index 0000000..ce42284 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/make-get-server-inserted-html.js @@ -0,0 +1,92 @@ +/* eslint-disable @next/internal/no-ambiguous-jsx -- whole module is used in React Client */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "makeGetServerInsertedHTML", { + enumerable: true, + get: function() { + return makeGetServerInsertedHTML; + } +}); +const _jsxruntime = require("react/jsx-runtime"); +const _react = /*#__PURE__*/ _interop_require_default(require("react")); +const _httpaccessfallback = require("../../client/components/http-access-fallback/http-access-fallback"); +const _redirect = require("../../client/components/redirect"); +const _redirecterror = require("../../client/components/redirect-error"); +const _server = require("react-dom/server"); +const _nodewebstreamshelper = require("../stream-utils/node-web-streams-helper"); +const _redirectstatuscode = require("../../client/components/redirect-status-code"); +const _addpathprefix = require("../../shared/lib/router/utils/add-path-prefix"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function makeGetServerInsertedHTML({ polyfills, renderServerInsertedHTML, serverCapturedErrors, tracingMetadata, basePath }) { + let flushedErrorMetaTagsUntilIndex = 0; + // These only need to be rendered once, they'll be set to empty arrays once flushed. + let polyfillTags = polyfills.map((polyfill)=>{ + return /*#__PURE__*/ (0, _jsxruntime.jsx)("script", { + ...polyfill + }, polyfill.src); + }); + let traceMetaTags = (tracingMetadata || []).map(({ key, value }, index)=>/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: key, + content: value + }, `next-trace-data-${index}`)); + return async function getServerInsertedHTML() { + // Loop through all the errors that have been captured but not yet + // flushed. + const errorMetaTags = []; + while(flushedErrorMetaTagsUntilIndex < serverCapturedErrors.length){ + const error = serverCapturedErrors[flushedErrorMetaTagsUntilIndex]; + flushedErrorMetaTagsUntilIndex++; + if ((0, _httpaccessfallback.isHTTPAccessFallbackError)(error)) { + errorMetaTags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "robots", + content: "noindex" + }, error.digest), process.env.NODE_ENV === 'development' ? /*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "next-error", + content: "not-found" + }, "next-error") : null); + } else if ((0, _redirecterror.isRedirectError)(error)) { + const redirectUrl = (0, _addpathprefix.addPathPrefix)((0, _redirect.getURLFromRedirectError)(error), basePath); + const statusCode = (0, _redirect.getRedirectStatusCodeFromError)(error); + const isPermanent = statusCode === _redirectstatuscode.RedirectStatusCode.PermanentRedirect ? true : false; + if (redirectUrl) { + errorMetaTags.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + id: "__next-page-redirect", + httpEquiv: "refresh", + content: `${isPermanent ? 0 : 1};url=${redirectUrl}` + }, error.digest)); + } + } + } + const serverInsertedHTML = renderServerInsertedHTML(); + // Skip React rendering if we know the content is empty. + if (polyfillTags.length === 0 && traceMetaTags.length === 0 && errorMetaTags.length === 0 && Array.isArray(serverInsertedHTML) && serverInsertedHTML.length === 0) { + return ''; + } + const stream = await (0, _server.renderToReadableStream)(/*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, { + children: [ + polyfillTags, + serverInsertedHTML, + traceMetaTags, + errorMetaTags + ] + }), { + // Larger chunk because this isn't sent over the network. + // Let's set it to 1MB. + progressiveChunkSize: 1024 * 1024 + }); + // The polyfills and trace metadata have been flushed, so they don't need to be rendered again + polyfillTags = []; + traceMetaTags = []; + // There's no need to wait for the stream to be ready + // e.g. calling `await stream.allReady` because `streamToString` will + // wait and decode the stream progressively with better parallelism. + return (0, _nodewebstreamshelper.streamToString)(stream); + }; +} + +//# sourceMappingURL=make-get-server-inserted-html.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/manifests-singleton.js b/build/node_modules/next/dist/server/app-render/manifests-singleton.js new file mode 100644 index 0000000..e2c3be1 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/manifests-singleton.js @@ -0,0 +1,264 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getClientReferenceManifest: null, + getServerActionsManifest: null, + getServerModuleMap: null, + selectWorkerForForwarding: null, + setManifestsSingleton: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getClientReferenceManifest: function() { + return getClientReferenceManifest; + }, + getServerActionsManifest: function() { + return getServerActionsManifest; + }, + getServerModuleMap: function() { + return getServerModuleMap; + }, + selectWorkerForForwarding: function() { + return selectWorkerForForwarding; + }, + setManifestsSingleton: function() { + return setManifestsSingleton; + } +}); +const _invarianterror = require("../../shared/lib/invariant-error"); +const _apppaths = require("../../shared/lib/router/utils/app-paths"); +const _pathhasprefix = require("../../shared/lib/router/utils/path-has-prefix"); +const _removepathprefix = require("../../shared/lib/router/utils/remove-path-prefix"); +const _workasyncstorageexternal = require("./work-async-storage.external"); +// This is a global singleton that is, among other things, also used to +// encode/decode bound args of server function closures. This can't be using a +// AsyncLocalStorage as it might happen at the module level. +const MANIFESTS_SINGLETON = Symbol.for('next.server.manifests'); +const globalThisWithManifests = globalThis; +function createProxiedClientReferenceManifest(clientReferenceManifestsPerRoute) { + const createMappingProxy = (prop)=>{ + return new Proxy({}, { + get (_, id) { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + if (workStore) { + const currentManifest = clientReferenceManifestsPerRoute.get(workStore.route); + if (currentManifest == null ? void 0 : currentManifest[prop][id]) { + return currentManifest[prop][id]; + } + // In development, we also check all other manifests to see if the + // module exists there. This is to support a scenario where React's + // I/O tracking (dev-only) creates a connection from one page to + // another through an emitted async I/O node that references client + // components from the other page, e.g. in owner props. + // TODO: Maybe we need to add a `debugBundlerConfig` option to React + // to avoid this workaround. The current workaround has the + // disadvantage that one might accidentally or intentionally share + // client references across pages (e.g. by storing them in a global + // variable), which would then only be caught in production. + if (process.env.NODE_ENV !== 'production') { + for (const [route, manifest] of clientReferenceManifestsPerRoute){ + if (route === workStore.route) { + continue; + } + const entry = manifest[prop][id]; + if (entry !== undefined) { + return entry; + } + } + } + } else { + // If there's no work store defined, we can assume that a client + // reference manifest is needed during module evaluation, e.g. to + // create a server function using a higher-order function. This + // might also use client components which need to be serialized by + // Flight, and therefore client references need to be resolvable. In + // that case we search all page manifests to find the module. + for (const manifest of clientReferenceManifestsPerRoute.values()){ + const entry = manifest[prop][id]; + if (entry !== undefined) { + return entry; + } + } + } + return undefined; + } + }); + }; + const mappingProxies = new Map(); + return new Proxy({}, { + get (_, prop) { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + switch(prop){ + case 'moduleLoading': + case 'entryCSSFiles': + case 'entryJSFiles': + { + if (!workStore) { + throw Object.defineProperty(new _invarianterror.InvariantError(`Cannot access "${prop}" without a work store.`), "__NEXT_ERROR_CODE", { + value: "E952", + enumerable: false, + configurable: true + }); + } + const currentManifest = clientReferenceManifestsPerRoute.get(workStore.route); + if (!currentManifest) { + throw Object.defineProperty(new _invarianterror.InvariantError(`The client reference manifest for route "${workStore.route}" does not exist.`), "__NEXT_ERROR_CODE", { + value: "E951", + enumerable: false, + configurable: true + }); + } + return currentManifest[prop]; + } + case 'clientModules': + case 'rscModuleMapping': + case 'edgeRscModuleMapping': + case 'ssrModuleMapping': + case 'edgeSSRModuleMapping': + { + let proxy = mappingProxies.get(prop); + if (!proxy) { + proxy = createMappingProxy(prop); + mappingProxies.set(prop, proxy); + } + return proxy; + } + default: + { + throw Object.defineProperty(new _invarianterror.InvariantError(`This is a proxied client reference manifest. The property "${String(prop)}" is not handled.`), "__NEXT_ERROR_CODE", { + value: "E953", + enumerable: false, + configurable: true + }); + } + } + } + }); +} +/** + * This function creates a Flight-acceptable server module map proxy from our + * Server Reference Manifest similar to our client module map. This is because + * our manifest contains a lot of internal Next.js data that are relevant to the + * runtime, workers, etc. that React doesn't need to know. + */ function createServerModuleMap() { + return new Proxy({}, { + get: (_, id)=>{ + var _getServerActionsManifest__id, _getServerActionsManifest_; + const workers = (_getServerActionsManifest_ = getServerActionsManifest()[process.env.NEXT_RUNTIME === 'edge' ? 'edge' : 'node']) == null ? void 0 : (_getServerActionsManifest__id = _getServerActionsManifest_[id]) == null ? void 0 : _getServerActionsManifest__id.workers; + if (!workers) { + return undefined; + } + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + let workerEntry; + if (workStore) { + workerEntry = workers[normalizeWorkerPageName(workStore.page)]; + } else { + // If there's no work store defined, we can assume that a server + // module map is needed during module evaluation, e.g. to create a + // server action using a higher-order function. Therefore it should be + // safe to return any entry from the manifest that matches the action + // ID. They all refer to the same module ID, which must also exist in + // the current page bundle. TODO: This is currently not guaranteed in + // Turbopack, and needs to be fixed. + workerEntry = Object.values(workers).at(0); + } + if (!workerEntry) { + return undefined; + } + const { moduleId, async } = workerEntry; + return { + id: moduleId, + name: id, + chunks: [], + async + }; + } + }); +} +/** + * The flight entry loader keys actions by bundlePath. bundlePath corresponds + * with the relative path (including 'app') to the page entrypoint. + */ function normalizeWorkerPageName(pageName) { + if ((0, _pathhasprefix.pathHasPrefix)(pageName, 'app')) { + return pageName; + } + return 'app' + pageName; +} +/** + * Converts a bundlePath (relative path to the entrypoint) to a routable page + * name. + */ function denormalizeWorkerPageName(bundlePath) { + return (0, _apppaths.normalizeAppPath)((0, _removepathprefix.removePathPrefix)(bundlePath, 'app')); +} +function selectWorkerForForwarding(actionId, pageName) { + var _serverActionsManifest__actionId; + const serverActionsManifest = getServerActionsManifest(); + const workers = (_serverActionsManifest__actionId = serverActionsManifest[process.env.NEXT_RUNTIME === 'edge' ? 'edge' : 'node'][actionId]) == null ? void 0 : _serverActionsManifest__actionId.workers; + // There are no workers to handle this action, nothing to forward to. + if (!workers) { + return; + } + // If there is an entry for the current page, we don't need to forward. + if (workers[normalizeWorkerPageName(pageName)]) { + return; + } + // Otherwise, grab the first worker that has a handler for this action id. + return denormalizeWorkerPageName(Object.keys(workers)[0]); +} +function setManifestsSingleton({ page, clientReferenceManifest, serverActionsManifest: rawServerActionsManifest }) { + const existingSingleton = globalThisWithManifests[MANIFESTS_SINGLETON]; + const serverActionsManifest = { + encryptionKey: rawServerActionsManifest.encryptionKey, + // Use null-prototypes for the action objects to prevent prototype pollution + // from affecting action ID lookups. + node: Object.assign(Object.create(null), rawServerActionsManifest.node), + edge: Object.assign(Object.create(null), rawServerActionsManifest.edge) + }; + if (existingSingleton) { + existingSingleton.clientReferenceManifestsPerRoute.set((0, _apppaths.normalizeAppPath)(page), clientReferenceManifest); + existingSingleton.serverActionsManifest = serverActionsManifest; + } else { + const clientReferenceManifestsPerRoute = new Map([ + [ + (0, _apppaths.normalizeAppPath)(page), + clientReferenceManifest + ] + ]); + const proxiedClientReferenceManifest = createProxiedClientReferenceManifest(clientReferenceManifestsPerRoute); + globalThisWithManifests[MANIFESTS_SINGLETON] = { + clientReferenceManifestsPerRoute, + proxiedClientReferenceManifest, + serverActionsManifest, + serverModuleMap: createServerModuleMap() + }; + } +} +function getManifestsSingleton() { + const manifestSingleton = globalThisWithManifests[MANIFESTS_SINGLETON]; + if (!manifestSingleton) { + throw Object.defineProperty(new _invarianterror.InvariantError('The manifests singleton was not initialized.'), "__NEXT_ERROR_CODE", { + value: "E950", + enumerable: false, + configurable: true + }); + } + return manifestSingleton; +} +function getClientReferenceManifest() { + return getManifestsSingleton().proxiedClientReferenceManifest; +} +function getServerActionsManifest() { + return getManifestsSingleton().serverActionsManifest; +} +function getServerModuleMap() { + return getManifestsSingleton().serverModuleMap; +} + +//# sourceMappingURL=manifests-singleton.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/metadata-insertion/create-server-inserted-metadata.js b/build/node_modules/next/dist/server/app-render/metadata-insertion/create-server-inserted-metadata.js new file mode 100644 index 0000000..625e855 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/metadata-insertion/create-server-inserted-metadata.js @@ -0,0 +1,29 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "createServerInsertedMetadata", { + enumerable: true, + get: function() { + return createServerInsertedMetadata; + } +}); +const _htmlescape = require("../../../shared/lib/htmlescape"); +/** + * For chromium based browsers (Chrome, Edge, etc.) and Safari, + * icons need to stay under to be picked up by the browser. + * + */ const REINSERT_ICON_SCRIPT = `\ +document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))`; +function createServerInsertedMetadata(nonce) { + let inserted = false; + return async function getServerInsertedMetadata() { + if (inserted) { + return ''; + } + inserted = true; + return `${REINSERT_ICON_SCRIPT}`; + }; +} + +//# sourceMappingURL=create-server-inserted-metadata.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/module-loading/track-dynamic-import.js b/build/node_modules/next/dist/server/app-render/module-loading/track-dynamic-import.js new file mode 100644 index 0000000..31934bd --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/module-loading/track-dynamic-import.js @@ -0,0 +1,57 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "trackDynamicImport", { + enumerable: true, + get: function() { + return trackDynamicImport; + } +}); +const _invarianterror = require("../../../shared/lib/invariant-error"); +const _isthenable = require("../../../shared/lib/is-thenable"); +const _trackmoduleloadingexternal = require("./track-module-loading.external"); +function trackDynamicImport(modulePromise) { + if (process.env.NEXT_RUNTIME === 'edge') { + throw Object.defineProperty(new _invarianterror.InvariantError("Dynamic imports should not be instrumented in the edge runtime, because `cacheComponents` doesn't support it"), "__NEXT_ERROR_CODE", { + value: "E687", + enumerable: false, + configurable: true + }); + } + if (!(0, _isthenable.isThenable)(modulePromise)) { + // We're expecting `import()` to always return a promise. If it's not, something's very wrong. + throw Object.defineProperty(new _invarianterror.InvariantError('`trackDynamicImport` should always receive a promise. Something went wrong in the dynamic imports transform.'), "__NEXT_ERROR_CODE", { + value: "E677", + enumerable: false, + configurable: true + }); + } + // Even if we're inside a prerender and have `workUnitStore.cacheSignal`, we always track the promise globally. + // (i.e. via the global `moduleLoadingSignal` that `trackPendingImport` uses internally). + // + // We do this because the `import()` promise might be cached in userspace: + // (which is quite common for e.g. lazy initialization in libraries) + // + // let promise; + // function doDynamicImportOnce() { + // if (!promise) { + // promise = import("..."); + // // transformed into: + // // promise = trackDynamicImport(import("...")); + // } + // return promise; + // } + // + // If multiple prerenders (e.g. multiple pages) depend on `doDynamicImportOnce`, + // we have to wait for the import *in all of them*. + // If we only tracked it using `workUnitStore.cacheSignal.trackRead()`, + // then only the first prerender to call `doDynamicImportOnce` would wait -- + // Subsequent prerenders would re-use the existing `promise`, + // and `trackDynamicImport` wouldn't be called again in their scope, + // so their respective CacheSignals wouldn't wait for the promise. + (0, _trackmoduleloadingexternal.trackPendingImport)(modulePromise); + return modulePromise; +} + +//# sourceMappingURL=track-dynamic-import.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/module-loading/track-module-loading.external.js b/build/node_modules/next/dist/server/app-render/module-loading/track-module-loading.external.js new file mode 100644 index 0000000..0106589 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/module-loading/track-module-loading.external.js @@ -0,0 +1,32 @@ +// NOTE: this is marked as shared/external because it's stateful +// and the state needs to be shared between app-render (which waits for pending imports) +// and helpers used in transformed page code (which register pending imports) +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + trackPendingChunkLoad: null, + trackPendingImport: null, + trackPendingModules: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + trackPendingChunkLoad: function() { + return _trackmoduleloadinginstance.trackPendingChunkLoad; + }, + trackPendingImport: function() { + return _trackmoduleloadinginstance.trackPendingImport; + }, + trackPendingModules: function() { + return _trackmoduleloadinginstance.trackPendingModules; + } +}); +const _trackmoduleloadinginstance = require("./track-module-loading.instance"); + +//# sourceMappingURL=track-module-loading.external.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/module-loading/track-module-loading.instance.js b/build/node_modules/next/dist/server/app-render/module-loading/track-module-loading.instance.js new file mode 100644 index 0000000..09e2ef9 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/module-loading/track-module-loading.instance.js @@ -0,0 +1,66 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + trackPendingChunkLoad: null, + trackPendingImport: null, + trackPendingModules: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + trackPendingChunkLoad: function() { + return trackPendingChunkLoad; + }, + trackPendingImport: function() { + return trackPendingImport; + }, + trackPendingModules: function() { + return trackPendingModules; + } +}); +const _cachesignal = require("../cache-signal"); +const _isthenable = require("../../../shared/lib/is-thenable"); +/** + * Tracks all in-flight async imports and chunk loads. + * Initialized lazily, because we don't want this to error in case it gets pulled into an edge runtime module. + */ let _moduleLoadingSignal; +function getModuleLoadingSignal() { + if (!_moduleLoadingSignal) { + _moduleLoadingSignal = new _cachesignal.CacheSignal(); + } + return _moduleLoadingSignal; +} +function trackPendingChunkLoad(promise) { + const moduleLoadingSignal = getModuleLoadingSignal(); + moduleLoadingSignal.trackRead(promise); +} +function trackPendingImport(exportsOrPromise) { + const moduleLoadingSignal = getModuleLoadingSignal(); + // requiring an async module returns a promise. + // if it's sync, there's nothing to track. + if ((0, _isthenable.isThenable)(exportsOrPromise)) { + // A client reference proxy might look like a promise, but we can only call `.then()` on it, not e.g. `.finally()`. + // Turn it into a real promise to avoid issues elsewhere. + const promise = Promise.resolve(exportsOrPromise); + moduleLoadingSignal.trackRead(promise); + } +} +function trackPendingModules(cacheSignal) { + const moduleLoadingSignal = getModuleLoadingSignal(); + // We can't just use `cacheSignal.trackRead(moduleLoadingSignal.cacheReady())`, + // because we might start and finish multiple batches of module loads while waiting for caches, + // and `moduleLoadingSignal.cacheReady()` would resolve after the first batch. + // Instead, we'll keep notifying `cacheSignal` of each import/chunk-load. + const unsubscribe = moduleLoadingSignal.subscribeToReads(cacheSignal); + // Later, when `cacheSignal` is no longer waiting for any caches (or imports that we've notified it of), + // we can unsubscribe it. + cacheSignal.cacheReady().then(unsubscribe); +} + +//# sourceMappingURL=track-module-loading.instance.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/parse-and-validate-flight-router-state.js b/build/node_modules/next/dist/server/app-render/parse-and-validate-flight-router-state.js new file mode 100644 index 0000000..2f0b64c --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/parse-and-validate-flight-router-state.js @@ -0,0 +1,49 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "parseAndValidateFlightRouterState", { + enumerable: true, + get: function() { + return parseAndValidateFlightRouterState; + } +}); +const _types = require("./types"); +const _superstruct = require("next/dist/compiled/superstruct"); +function parseAndValidateFlightRouterState(stateHeader) { + if (typeof stateHeader === 'undefined') { + return undefined; + } + if (Array.isArray(stateHeader)) { + throw Object.defineProperty(new Error('Multiple router state headers were sent. This is not allowed.'), "__NEXT_ERROR_CODE", { + value: "E418", + enumerable: false, + configurable: true + }); + } + // We limit the size of the router state header to ~40kb. This is to prevent + // a malicious user from sending a very large header and slowing down the + // resolving of the router state. + // This is around 2,000 nested or parallel route segment states: + // '{"children":["",{}]}'.length === 20. + if (stateHeader.length > 20 * 2000) { + throw Object.defineProperty(new Error('The router state header was too large.'), "__NEXT_ERROR_CODE", { + value: "E142", + enumerable: false, + configurable: true + }); + } + try { + const state = JSON.parse(decodeURIComponent(stateHeader)); + (0, _superstruct.assert)(state, _types.flightRouterStateSchema); + return state; + } catch { + throw Object.defineProperty(new Error('The router state header was sent but could not be parsed.'), "__NEXT_ERROR_CODE", { + value: "E10", + enumerable: false, + configurable: true + }); + } +} + +//# sourceMappingURL=parse-and-validate-flight-router-state.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/postponed-state.js b/build/node_modules/next/dist/server/app-render/postponed-state.js new file mode 100644 index 0000000..9b0ebdc --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/postponed-state.js @@ -0,0 +1,157 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + DynamicHTMLPreludeState: null, + DynamicState: null, + getDynamicDataPostponedState: null, + getDynamicHTMLPostponedState: null, + getPostponedFromState: null, + parsePostponedState: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + DynamicHTMLPreludeState: function() { + return DynamicHTMLPreludeState; + }, + DynamicState: function() { + return DynamicState; + }, + getDynamicDataPostponedState: function() { + return getDynamicDataPostponedState; + }, + getDynamicHTMLPostponedState: function() { + return getDynamicHTMLPostponedState; + }, + getPostponedFromState: function() { + return getPostponedFromState; + }, + parsePostponedState: function() { + return parsePostponedState; + } +}); +const _getdynamicparam = require("../../shared/lib/router/utils/get-dynamic-param"); +const _resumedatacache = require("../resume-data-cache/resume-data-cache"); +var DynamicState = /*#__PURE__*/ function(DynamicState) { + /** + * The dynamic access occurred during the RSC render phase. + */ DynamicState[DynamicState["DATA"] = 1] = "DATA"; + /** + * The dynamic access occurred during the HTML shell render phase. + */ DynamicState[DynamicState["HTML"] = 2] = "HTML"; + return DynamicState; +}({}); +var DynamicHTMLPreludeState = /*#__PURE__*/ function(DynamicHTMLPreludeState) { + DynamicHTMLPreludeState[DynamicHTMLPreludeState["Empty"] = 0] = "Empty"; + DynamicHTMLPreludeState[DynamicHTMLPreludeState["Full"] = 1] = "Full"; + return DynamicHTMLPreludeState; +}({}); +async function getDynamicHTMLPostponedState(postponed, preludeState, fallbackRouteParams, resumeDataCache, isCacheComponentsEnabled) { + const data = [ + preludeState, + postponed + ]; + const dataString = JSON.stringify(data); + // If there are no fallback route params, we can just serialize the postponed + // state as is. + if (!fallbackRouteParams || fallbackRouteParams.size === 0) { + // Serialized as `:` + return `${dataString.length}:${dataString}${await (0, _resumedatacache.stringifyResumeDataCache)((0, _resumedatacache.createRenderResumeDataCache)(resumeDataCache), isCacheComponentsEnabled)}`; + } + const replacements = Array.from(fallbackRouteParams.entries()); + const replacementsString = JSON.stringify(replacements); + // Serialized as `` + const postponedString = `${replacementsString.length}${replacementsString}${dataString}`; + // Serialized as `:` + return `${postponedString.length}:${postponedString}${await (0, _resumedatacache.stringifyResumeDataCache)(resumeDataCache, isCacheComponentsEnabled)}`; +} +async function getDynamicDataPostponedState(resumeDataCache, isCacheComponentsEnabled) { + return `4:null${await (0, _resumedatacache.stringifyResumeDataCache)((0, _resumedatacache.createRenderResumeDataCache)(resumeDataCache), isCacheComponentsEnabled)}`; +} +function parsePostponedState(state, interpolatedParams, maxPostponedStateSizeBytes) { + try { + var _state_match; + const postponedStringLengthMatch = (_state_match = state.match(/^([0-9]*):/)) == null ? void 0 : _state_match[1]; + if (!postponedStringLengthMatch) { + throw Object.defineProperty(new Error(`Invariant: invalid postponed state ${state}`), "__NEXT_ERROR_CODE", { + value: "E314", + enumerable: false, + configurable: true + }); + } + const postponedStringLength = parseInt(postponedStringLengthMatch); + // We add a `:` to the end of the length as the first character of the + // postponed string is the length of the replacement entries. + const postponedString = state.slice(postponedStringLengthMatch.length + 1, postponedStringLengthMatch.length + postponedStringLength + 1); + const renderResumeDataCache = (0, _resumedatacache.createRenderResumeDataCache)(state.slice(postponedStringLengthMatch.length + postponedStringLength + 1), maxPostponedStateSizeBytes); + try { + if (postponedString === 'null') { + return { + type: 1, + renderResumeDataCache + }; + } + if (/^[0-9]/.test(postponedString)) { + var _postponedString_match; + const match = (_postponedString_match = postponedString.match(/^([0-9]*)/)) == null ? void 0 : _postponedString_match[1]; + if (!match) { + throw Object.defineProperty(new Error(`Invariant: invalid postponed state ${JSON.stringify(postponedString)}`), "__NEXT_ERROR_CODE", { + value: "E314", + enumerable: false, + configurable: true + }); + } + // This is the length of the replacements entries. + const length = parseInt(match); + const replacements = JSON.parse(postponedString.slice(match.length, // We then go to the end of the string. + match.length + length)); + let postponed = postponedString.slice(match.length + length); + for (const [segmentKey, [searchValue, dynamicParamType]] of replacements){ + const { treeSegment: [, // This is the same value that'll be used in the postponed state + // as it's part of the tree data. That's why we use it as the + // replacement value. + value] } = (0, _getdynamicparam.getDynamicParam)(interpolatedParams, segmentKey, dynamicParamType, null, null // staticSiblings not needed for postponed state + ); + postponed = postponed.replaceAll(searchValue, value); + } + return { + type: 2, + data: JSON.parse(postponed), + renderResumeDataCache + }; + } + return { + type: 2, + data: JSON.parse(postponedString), + renderResumeDataCache + }; + } catch (err) { + console.error('Failed to parse postponed state', err); + return { + type: 1, + renderResumeDataCache + }; + } + } catch (err) { + console.error('Failed to parse postponed state', err); + return { + type: 1, + renderResumeDataCache: (0, _resumedatacache.createPrerenderResumeDataCache)() + }; + } +} +function getPostponedFromState(state) { + const [preludeState, postponed] = state.data; + return { + preludeState, + postponed + }; +} + +//# sourceMappingURL=postponed-state.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/prospective-render-utils.js b/build/node_modules/next/dist/server/app-render/prospective-render-utils.js new file mode 100644 index 0000000..2cd9eef --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/prospective-render-utils.js @@ -0,0 +1,74 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + Phase: null, + printDebugThrownValueForProspectiveRender: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + Phase: function() { + return Phase; + }, + printDebugThrownValueForProspectiveRender: function() { + return printDebugThrownValueForProspectiveRender; + } +}); +const _createerrorhandler = require("./create-error-handler"); +const _reactlargeshellerror = require("./react-large-shell-error"); +var Phase = /*#__PURE__*/ function(Phase) { + Phase["ProspectiveRender"] = "the prospective render"; + Phase["SegmentCollection"] = "segment collection"; + Phase["InstantValidation"] = "instant validation"; + return Phase; +}({}); +function printDebugThrownValueForProspectiveRender(thrownValue, route, phase) { + // We don't need to print well-known Next.js errors. + if ((0, _createerrorhandler.getDigestForWellKnownError)(thrownValue)) { + return; + } + if ((0, _reactlargeshellerror.isReactLargeShellError)(thrownValue)) { + // TODO: Aggregate + console.error(thrownValue); + return undefined; + } + let message; + if (typeof thrownValue === 'object' && thrownValue !== null && typeof thrownValue.message === 'string') { + message = thrownValue.message; + if (typeof thrownValue.stack === 'string') { + const originalErrorStack = thrownValue.stack; + const stackStart = originalErrorStack.indexOf('\n'); + if (stackStart > -1) { + const error = Object.defineProperty(new Error(`Route ${route} errored during ${phase}. These errors are normally ignored and may not prevent the route from prerendering but are logged here because build debugging is enabled. + +Original Error: ${message}`), "__NEXT_ERROR_CODE", { + value: "E949", + enumerable: false, + configurable: true + }); + error.stack = 'Error: ' + error.message + originalErrorStack.slice(stackStart); + console.error(error); + return; + } + } + } else if (typeof thrownValue === 'string') { + message = thrownValue; + } + if (message) { + console.error(`Route ${route} errored during ${phase}. These errors are normally ignored and may not prevent the route from prerendering but are logged here because build debugging is enabled. No stack was provided. + +Original Message: ${message}`); + return; + } + console.error(`Route ${route} errored during ${phase}. These errors are normally ignored and may not prevent the route from prerendering but are logged here because build debugging is enabled. The thrown value is logged just following this message`); + console.error(thrownValue); + return; +} + +//# sourceMappingURL=prospective-render-utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/react-large-shell-error.js b/build/node_modules/next/dist/server/app-render/react-large-shell-error.js new file mode 100644 index 0000000..4b2a3a1 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/react-large-shell-error.js @@ -0,0 +1,17 @@ +// TODO: isWellKnownError -> isNextInternalError +// isReactLargeShellError -> isWarning +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "isReactLargeShellError", { + enumerable: true, + get: function() { + return isReactLargeShellError; + } +}); +function isReactLargeShellError(error) { + return typeof error === 'object' && error !== null && 'message' in error && typeof error.message === 'string' && error.message.startsWith('This rendered a large document (>'); +} + +//# sourceMappingURL=react-large-shell-error.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/react-server.node.js b/build/node_modules/next/dist/server/app-render/react-server.node.js new file mode 100644 index 0000000..25b3fa5 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/react-server.node.js @@ -0,0 +1,39 @@ +// This file should be opted into the react-server layer +// eslint-disable-next-line import/no-extraneous-dependencies +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createTemporaryReferenceSet: null, + decodeAction: null, + decodeFormState: null, + decodeReply: null, + decodeReplyFromBusboy: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createTemporaryReferenceSet: function() { + return _servernode.createTemporaryReferenceSet; + }, + decodeAction: function() { + return _servernode.decodeAction; + }, + decodeFormState: function() { + return _servernode.decodeFormState; + }, + decodeReply: function() { + return _servernode.decodeReply; + }, + decodeReplyFromBusboy: function() { + return _servernode.decodeReplyFromBusboy; + } +}); +const _servernode = require("react-server-dom-webpack/server.node"); + +//# sourceMappingURL=react-server.node.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/render-css-resource.js b/build/node_modules/next/dist/server/app-render/render-css-resource.js new file mode 100644 index 0000000..53323df --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/render-css-resource.js @@ -0,0 +1,52 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "renderCssResource", { + enumerable: true, + get: function() { + return renderCssResource; + } +}); +const _encodeuripath = require("../../shared/lib/encode-uri-path"); +const _getassetquerystring = require("./get-asset-query-string"); +function renderCssResource(entryCssFiles, ctx, preloadCallbacks) { + const { componentMod: { createElement } } = ctx; + return entryCssFiles.map((entryCssFile, index)=>{ + // `Precedence` is an opt-in signal for React to handle resource + // loading and deduplication, etc. It's also used as the key to sort + // resources so they will be injected in the correct order. + // During HMR, it's critical to use different `precedence` values + // for different stylesheets, so their order will be kept. + // https://github.com/facebook/react/pull/25060 + const precedence = process.env.NODE_ENV === 'development' ? 'next_' + entryCssFile.path : 'next'; + // In dev, Safari and Firefox will cache the resource during HMR: + // - https://github.com/vercel/next.js/issues/5860 + // - https://bugs.webkit.org/show_bug.cgi?id=187726 + // Because of this, we add a `?v=` query to bypass the cache during + // development. We need to also make sure that the number is always + // increasing. + const fullHref = `${ctx.assetPrefix}/_next/${(0, _encodeuripath.encodeURIPath)(entryCssFile.path)}${(0, _getassetquerystring.getAssetQueryString)(ctx, true)}`; + if (entryCssFile.inlined && !ctx.parsedRequestHeaders.isRSCRequest) { + return createElement('style', { + key: index, + nonce: ctx.nonce, + precedence: precedence, + href: fullHref + }, entryCssFile.content); + } + preloadCallbacks == null ? void 0 : preloadCallbacks.push(()=>{ + ctx.componentMod.preloadStyle(fullHref, ctx.renderOpts.crossOrigin, ctx.nonce); + }); + return createElement('link', { + key: index, + rel: 'stylesheet', + href: fullHref, + precedence: precedence, + crossOrigin: ctx.renderOpts.crossOrigin, + nonce: ctx.nonce + }); + }); +} + +//# sourceMappingURL=render-css-resource.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/required-scripts.js b/build/node_modules/next/dist/server/app-render/required-scripts.js new file mode 100644 index 0000000..bcd19cc --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/required-scripts.js @@ -0,0 +1,76 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getRequiredScripts", { + enumerable: true, + get: function() { + return getRequiredScripts; + } +}); +const _encodeuripath = require("../../shared/lib/encode-uri-path"); +const _reactdom = /*#__PURE__*/ _interop_require_default(require("react-dom")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function getRequiredScripts(buildManifest, assetPrefix, crossOrigin, SRIManifest, qs, nonce, pagePath) { + var _buildManifest_rootMainFilesTree; + let preinitScripts; + let preinitScriptCommands = []; + const bootstrapScript = { + src: '', + crossOrigin + }; + const files = (((_buildManifest_rootMainFilesTree = buildManifest.rootMainFilesTree) == null ? void 0 : _buildManifest_rootMainFilesTree[pagePath]) || buildManifest.rootMainFiles).map(_encodeuripath.encodeURIPath); + if (files.length === 0) { + throw Object.defineProperty(new Error('Invariant: missing bootstrap script. This is a bug in Next.js'), "__NEXT_ERROR_CODE", { + value: "E459", + enumerable: false, + configurable: true + }); + } + if (SRIManifest) { + bootstrapScript.src = `${assetPrefix}/_next/` + files[0] + qs; + bootstrapScript.integrity = SRIManifest[files[0]]; + for(let i = 1; i < files.length; i++){ + const src = `${assetPrefix}/_next/` + files[i] + qs; + const integrity = SRIManifest[files[i]]; + preinitScriptCommands.push(src, integrity); + } + preinitScripts = ()=>{ + // preinitScriptCommands is a double indexed array of src/integrity pairs + for(let i = 0; i < preinitScriptCommands.length; i += 2){ + _reactdom.default.preinit(preinitScriptCommands[i], { + as: 'script', + integrity: preinitScriptCommands[i + 1], + crossOrigin, + nonce + }); + } + }; + } else { + bootstrapScript.src = `${assetPrefix}/_next/` + files[0] + qs; + for(let i = 1; i < files.length; i++){ + const src = `${assetPrefix}/_next/` + files[i] + qs; + preinitScriptCommands.push(src); + } + preinitScripts = ()=>{ + // preinitScriptCommands is a singled indexed array of src values + for(let i = 0; i < preinitScriptCommands.length; i++){ + _reactdom.default.preinit(preinitScriptCommands[i], { + as: 'script', + nonce, + crossOrigin + }); + } + }; + } + return [ + preinitScripts, + bootstrapScript + ]; +} + +//# sourceMappingURL=required-scripts.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/rsc/postpone.js b/build/node_modules/next/dist/server/app-render/rsc/postpone.js new file mode 100644 index 0000000..6bf195c --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/rsc/postpone.js @@ -0,0 +1,18 @@ +/* + +Files in the rsc directory are meant to be packaged as part of the RSC graph using next-app-loader. + +*/ // When postpone is available in canary React we can switch to importing it directly +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "Postpone", { + enumerable: true, + get: function() { + return _dynamicrendering.Postpone; + } +}); +const _dynamicrendering = require("../dynamic-rendering"); + +//# sourceMappingURL=postpone.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/rsc/preloads.js b/build/node_modules/next/dist/server/app-render/rsc/preloads.js new file mode 100644 index 0000000..f6e1e78 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/rsc/preloads.js @@ -0,0 +1,74 @@ +/* + +Files in the rsc directory are meant to be packaged as part of the RSC graph using next-app-loader. + +*/ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + preconnect: null, + preloadFont: null, + preloadStyle: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + preconnect: function() { + return preconnect; + }, + preloadFont: function() { + return preloadFont; + }, + preloadStyle: function() { + return preloadStyle; + } +}); +const _reactdom = /*#__PURE__*/ _interop_require_default(require("react-dom")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function preloadStyle(href, crossOrigin, nonce) { + const opts = { + as: 'style' + }; + if (typeof crossOrigin === 'string') { + opts.crossOrigin = crossOrigin; + } + if (typeof nonce === 'string') { + opts.nonce = nonce; + } + _reactdom.default.preload(href, opts); +} +function preloadFont(href, type, crossOrigin, nonce) { + const opts = { + as: 'font', + type + }; + if (typeof crossOrigin === 'string') { + opts.crossOrigin = crossOrigin; + } + if (typeof nonce === 'string') { + opts.nonce = nonce; + } + _reactdom.default.preload(href, opts); +} +function preconnect(href, crossOrigin, nonce) { + const opts = {}; + if (typeof crossOrigin === 'string') { + opts.crossOrigin = crossOrigin; + } + if (typeof nonce === 'string') { + opts.nonce = nonce; + } + ; + _reactdom.default.preconnect(href, opts); +} + +//# sourceMappingURL=preloads.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/rsc/taint.js b/build/node_modules/next/dist/server/app-render/rsc/taint.js new file mode 100644 index 0000000..b85b1ea --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/rsc/taint.js @@ -0,0 +1,79 @@ +/* + +Files in the rsc directory are meant to be packaged as part of the RSC graph using next-app-loader. + +*/ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + taintObjectReference: null, + taintUniqueValue: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + taintObjectReference: function() { + return taintObjectReference; + }, + taintUniqueValue: function() { + return taintUniqueValue; + } +}); +const _react = /*#__PURE__*/ _interop_require_wildcard(require("react")); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +function notImplemented() { + throw Object.defineProperty(new Error('Taint can only be used with the taint flag.'), "__NEXT_ERROR_CODE", { + value: "E354", + enumerable: false, + configurable: true + }); +} +const taintObjectReference = process.env.__NEXT_EXPERIMENTAL_REACT ? _react.experimental_taintObjectReference : notImplemented; +const taintUniqueValue = process.env.__NEXT_EXPERIMENTAL_REACT ? _react.experimental_taintUniqueValue : notImplemented; + +//# sourceMappingURL=taint.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/segment-explorer-path.js b/build/node_modules/next/dist/server/app-render/segment-explorer-path.js new file mode 100644 index 0000000..4496e2b --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/segment-explorer-path.js @@ -0,0 +1,128 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + BOUNDARY_PREFIX: null, + BOUNDARY_SUFFIX: null, + BUILTIN_PREFIX: null, + getBoundaryOriginFileType: null, + getConventionPathByType: null, + isBoundaryFile: null, + isBuiltinBoundaryFile: null, + isNextjsBuiltinFilePath: null, + normalizeBoundaryFilename: null, + normalizeConventionFilePath: null, + normalizeFilePath: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + BOUNDARY_PREFIX: function() { + return BOUNDARY_PREFIX; + }, + BOUNDARY_SUFFIX: function() { + return BOUNDARY_SUFFIX; + }, + BUILTIN_PREFIX: function() { + return BUILTIN_PREFIX; + }, + getBoundaryOriginFileType: function() { + return getBoundaryOriginFileType; + }, + getConventionPathByType: function() { + return getConventionPathByType; + }, + isBoundaryFile: function() { + return isBoundaryFile; + }, + isBuiltinBoundaryFile: function() { + return isBuiltinBoundaryFile; + }, + isNextjsBuiltinFilePath: function() { + return isNextjsBuiltinFilePath; + }, + normalizeBoundaryFilename: function() { + return normalizeBoundaryFilename; + }, + normalizeConventionFilePath: function() { + return normalizeConventionFilePath; + }, + normalizeFilePath: function() { + return normalizeFilePath; + } +}); +const BUILTIN_PREFIX = '__next_builtin__'; +const nextInternalPrefixRegex = /^(.*[\\/])?next[\\/]dist[\\/]client[\\/]components[\\/]builtin[\\/]/; +function normalizeFilePath(projectDir, filePath) { + // Turbopack project path is formed as: "/". + // When project root is not the working directory, we can extract the relative project root path. + // This is mostly used for running Next.js inside a monorepo. + const cwd = process.env.NEXT_RUNTIME === 'edge' ? '' : process.cwd(); + const relativeProjectRoot = projectDir.replace(cwd, '').replace(/^[\\/]/, ''); + let relativePath = (filePath || '')// remove turbopack [project] prefix + .replace(/^\[project\][\\/]?/, '')// remove the project root from the path (absolute) + .replace(projectDir, '')// remove cwd prefix (absolute) + .replace(cwd, '')// normalize path separators and remove leading slash + .replace(/\\/g, '/').replace(/^\//, ''); + // remove relative project path prefix (e.g., "test/e2e/app-dir/actions/") + if (relativeProjectRoot && relativePath.startsWith(relativeProjectRoot)) { + relativePath = relativePath.slice(relativeProjectRoot.length).replace(/^\//, ''); + } + // Handle case where filename is relative to a parent of projectDir + // (e.g., in tests where filename is "test/tmp/next-test-XXX/app/page.js" + // but projectDir is the test temp directory) + if (relativePath.includes('/')) { + const projectDirName = projectDir.split(/[\\/]/).pop() || ''; + if (projectDirName) { + const projectDirWithSlash = projectDirName + '/'; + const idx = relativePath.indexOf(projectDirWithSlash); + if (idx >= 0) { + relativePath = relativePath.slice(idx + projectDirWithSlash.length); + } + } + } + return relativePath; +} +function normalizeConventionFilePath(projectDir, conventionPath) { + let relativePath = normalizeFilePath(projectDir, conventionPath)// remove /(src/)?app/ dir prefix + .replace(/^(src\/)?app\//, ''); + // If it's internal file only keep the filename, strip nextjs internal prefix + if (nextInternalPrefixRegex.test(relativePath)) { + relativePath = relativePath.replace(nextInternalPrefixRegex, ''); + // Add a special prefix to let segment explorer know it's a built-in component + relativePath = `${BUILTIN_PREFIX}${relativePath}`; + } + return relativePath; +} +const isNextjsBuiltinFilePath = (filePath)=>{ + return nextInternalPrefixRegex.test(filePath); +}; +const BOUNDARY_SUFFIX = '@boundary'; +function normalizeBoundaryFilename(filename) { + return filename.replace(new RegExp(`^${BUILTIN_PREFIX}`), '').replace(new RegExp(`${BOUNDARY_SUFFIX}$`), ''); +} +const BOUNDARY_PREFIX = 'boundary:'; +function isBoundaryFile(fileType) { + return fileType.startsWith(BOUNDARY_PREFIX); +} +function isBuiltinBoundaryFile(fileType) { + return fileType.startsWith(BUILTIN_PREFIX); +} +function getBoundaryOriginFileType(fileType) { + return fileType.replace(BOUNDARY_PREFIX, ''); +} +function getConventionPathByType(tree, dir, conventionType) { + const modules = tree[2]; + const conventionPath = modules[conventionType] ? modules[conventionType][1] : undefined; + if (conventionPath) { + return normalizeConventionFilePath(dir, conventionPath); + } + return undefined; +} + +//# sourceMappingURL=segment-explorer-path.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/server-inserted-html.js b/build/node_modules/next/dist/server/app-render/server-inserted-html.js new file mode 100644 index 0000000..60af1e0 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/server-inserted-html.js @@ -0,0 +1,77 @@ +/* eslint-disable @next/internal/no-ambiguous-jsx -- whole module is used in React Client */ // Provider for the `useServerInsertedHTML` API to register callbacks to insert +// elements into the HTML stream. +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "createServerInsertedHTML", { + enumerable: true, + get: function() { + return createServerInsertedHTML; + } +}); +const _jsxruntime = require("react/jsx-runtime"); +const _react = /*#__PURE__*/ _interop_require_wildcard(require("react")); +const _serverinsertedhtmlsharedruntime = require("../../shared/lib/server-inserted-html.shared-runtime"); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +function createServerInsertedHTML() { + const serverInsertedHTMLCallbacks = []; + const addInsertedHtml = (handler)=>{ + serverInsertedHTMLCallbacks.push(handler); + }; + return { + ServerInsertedHTMLProvider ({ children }) { + return /*#__PURE__*/ (0, _jsxruntime.jsx)(_serverinsertedhtmlsharedruntime.ServerInsertedHTMLContext.Provider, { + value: addInsertedHtml, + children: children + }); + }, + renderServerInsertedHTML () { + return serverInsertedHTMLCallbacks.map((callback, index)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(_react.Fragment, { + children: callback() + }, '__next_server_inserted__' + index)); + } + }; +} + +//# sourceMappingURL=server-inserted-html.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/staged-rendering.js b/build/node_modules/next/dist/server/app-render/staged-rendering.js new file mode 100644 index 0000000..5627560 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/staged-rendering.js @@ -0,0 +1,343 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + RenderStage: null, + StagedRenderingController: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + RenderStage: function() { + return RenderStage; + }, + StagedRenderingController: function() { + return StagedRenderingController; + } +}); +const _invarianterror = require("../../shared/lib/invariant-error"); +const _promisewithresolvers = require("../../shared/lib/promise-with-resolvers"); +var RenderStage = /*#__PURE__*/ function(RenderStage) { + RenderStage[RenderStage["Before"] = 1] = "Before"; + RenderStage[RenderStage["EarlyStatic"] = 2] = "EarlyStatic"; + RenderStage[RenderStage["Static"] = 3] = "Static"; + RenderStage[RenderStage["EarlyRuntime"] = 4] = "EarlyRuntime"; + RenderStage[RenderStage["Runtime"] = 5] = "Runtime"; + RenderStage[RenderStage["Dynamic"] = 6] = "Dynamic"; + RenderStage[RenderStage["Abandoned"] = 7] = "Abandoned"; + return RenderStage; +}({}); +class StagedRenderingController { + constructor(abortSignal, abandonController, shouldTrackSyncIO){ + this.abortSignal = abortSignal; + this.abandonController = abandonController; + this.shouldTrackSyncIO = shouldTrackSyncIO; + this.currentStage = 1; + this.syncInterruptReason = null; + this.staticStageEndTime = Infinity; + this.runtimeStageEndTime = Infinity; + this.staticStageListeners = []; + this.earlyRuntimeStageListeners = []; + this.runtimeStageListeners = []; + this.dynamicStageListeners = []; + this.staticStagePromise = (0, _promisewithresolvers.createPromiseWithResolvers)(); + this.earlyRuntimeStagePromise = (0, _promisewithresolvers.createPromiseWithResolvers)(); + this.runtimeStagePromise = (0, _promisewithresolvers.createPromiseWithResolvers)(); + this.dynamicStagePromise = (0, _promisewithresolvers.createPromiseWithResolvers)(); + if (abortSignal) { + abortSignal.addEventListener('abort', ()=>{ + // Reject all stage promises that haven't already been resolved. + // If a promise was already resolved via advanceStage, the reject + // is a no-op. The ignoreReject handler suppresses unhandled + // rejection warnings for promises that no one is awaiting. + const { reason } = abortSignal; + this.staticStagePromise.promise.catch(ignoreReject); + this.staticStagePromise.reject(reason); + this.earlyRuntimeStagePromise.promise.catch(ignoreReject); + this.earlyRuntimeStagePromise.reject(reason); + this.runtimeStagePromise.promise.catch(ignoreReject); + this.runtimeStagePromise.reject(reason); + this.dynamicStagePromise.promise.catch(ignoreReject); + this.dynamicStagePromise.reject(reason); + }, { + once: true + }); + } + if (abandonController) { + abandonController.signal.addEventListener('abort', ()=>{ + this.abandonRender(); + }, { + once: true + }); + } + } + onStage(stage, callback) { + if (this.currentStage >= stage) { + callback(); + } else if (stage === 3) { + this.staticStageListeners.push(callback); + } else if (stage === 4) { + this.earlyRuntimeStageListeners.push(callback); + } else if (stage === 5) { + this.runtimeStageListeners.push(callback); + } else if (stage === 6) { + this.dynamicStageListeners.push(callback); + } else { + // This should never happen + throw Object.defineProperty(new _invarianterror.InvariantError(`Invalid render stage: ${stage}`), "__NEXT_ERROR_CODE", { + value: "E881", + enumerable: false, + configurable: true + }); + } + } + shouldTrackSyncInterrupt() { + if (!this.shouldTrackSyncIO) { + return false; + } + switch(this.currentStage){ + case 1: + // If we haven't started the render yet, it can't be interrupted. + return false; + case 2: + case 3: + return true; + case 4: + // EarlyRuntime is for runtime-prefetchable segments. Sync IO + // should error because it would abort a runtime prefetch. + return true; + case 5: + // Runtime is for non-prefetchable segments. Sync IO is fine there + // because in practice this segment will never be runtime prefetched + return false; + case 6: + case 7: + return false; + default: + return false; + } + } + syncInterruptCurrentStageWithReason(reason) { + if (this.currentStage === 1) { + return; + } + // If the render has already been abandoned, there's nothing to interrupt. + if (this.currentStage === 7) { + return; + } + // If Sync IO occurs during an abandonable render, we trigger the abandon. + // The abandon listener will call abandonRender which advances through + // stages to let caches fill before marking as Abandoned. + if (this.abandonController) { + this.abandonController.abort(); + return; + } + if (this.abortSignal) { + // If this is an abortable render, we capture the interruption reason and stop advancing. + // We don't release any more promises. + // The caller is expected to abort the signal. + this.syncInterruptReason = reason; + this.currentStage = 7; + return; + } + // If we're in a non-abandonable & non-abortable render, + // we need to advance to the Dynamic stage and capture the interruption reason. + // (in dev, this will be the restarted render) + switch(this.currentStage){ + case 2: + case 3: + case 4: + { + // EarlyRuntime is for runtime-prefetchable segments. Sync IO here + // means the prefetch would be aborted too early. + this.syncInterruptReason = reason; + this.advanceStage(6); + return; + } + case 5: + { + // canSyncInterrupt returns false for Runtime, so we should + // never get here. Defensive no-op. + return; + } + case 6: + default: + } + } + getSyncInterruptReason() { + return this.syncInterruptReason; + } + getStaticStageEndTime() { + return this.staticStageEndTime; + } + getRuntimeStageEndTime() { + return this.runtimeStageEndTime; + } + abandonRender() { + // In staged rendering, only the initial render is abandonable. + // We can abandon the initial render if + // 1. We notice a cache miss, and need to wait for caches to fill + // 2. A sync IO error occurs, and the render should be interrupted + // (this might be a lazy intitialization of a module, + // so we still want to restart in this case and see if it still occurs) + // In either case, we'll be doing another render after this one, + // so we only want to unblock the next stage, not Dynamic, because + // unblocking the dynamic stage would likely lead to wasted (uncached) IO. + const { currentStage } = this; + switch(currentStage){ + case 2: + { + this.resolveStaticStage(); + } + // intentional fallthrough + case 3: + { + this.resolveEarlyRuntimeStage(); + } + // intentional fallthrough + case 4: + { + this.resolveRuntimeStage(); + } + // intentional fallthrough + case 5: + { + this.currentStage = 7; + return; + } + case 6: + case 1: + case 7: + break; + default: + { + currentStage; + } + } + } + advanceStage(stage) { + // If we're already at the target stage or beyond, do nothing. + // (this can happen e.g. if sync IO advanced us to the dynamic stage) + if (stage <= this.currentStage) { + return; + } + let currentStage = this.currentStage; + this.currentStage = stage; + if (currentStage < 3 && stage >= 3) { + this.resolveStaticStage(); + } + if (currentStage < 4 && stage >= 4) { + this.resolveEarlyRuntimeStage(); + } + if (currentStage < 5 && stage >= 5) { + this.staticStageEndTime = performance.now() + performance.timeOrigin; + this.resolveRuntimeStage(); + } + if (currentStage < 6 && stage >= 6) { + this.runtimeStageEndTime = performance.now() + performance.timeOrigin; + this.resolveDynamicStage(); + return; + } + } + /** Fire the `onStage` listeners for the static stage and unblock any promises waiting for it. */ resolveStaticStage() { + const staticListeners = this.staticStageListeners; + for(let i = 0; i < staticListeners.length; i++){ + staticListeners[i](); + } + staticListeners.length = 0; + this.staticStagePromise.resolve(); + } + /** Fire the `onStage` listeners for the early runtime stage and unblock any promises waiting for it. */ resolveEarlyRuntimeStage() { + const earlyRuntimeListeners = this.earlyRuntimeStageListeners; + for(let i = 0; i < earlyRuntimeListeners.length; i++){ + earlyRuntimeListeners[i](); + } + earlyRuntimeListeners.length = 0; + this.earlyRuntimeStagePromise.resolve(); + } + /** Fire the `onStage` listeners for the runtime stage and unblock any promises waiting for it. */ resolveRuntimeStage() { + const runtimeListeners = this.runtimeStageListeners; + for(let i = 0; i < runtimeListeners.length; i++){ + runtimeListeners[i](); + } + runtimeListeners.length = 0; + this.runtimeStagePromise.resolve(); + } + /** Fire the `onStage` listeners for the dynamic stage and unblock any promises waiting for it. */ resolveDynamicStage() { + const dynamicListeners = this.dynamicStageListeners; + for(let i = 0; i < dynamicListeners.length; i++){ + dynamicListeners[i](); + } + dynamicListeners.length = 0; + this.dynamicStagePromise.resolve(); + } + getStagePromise(stage) { + switch(stage){ + case 3: + { + return this.staticStagePromise.promise; + } + case 4: + { + return this.earlyRuntimeStagePromise.promise; + } + case 5: + { + return this.runtimeStagePromise.promise; + } + case 6: + { + return this.dynamicStagePromise.promise; + } + default: + { + stage; + throw Object.defineProperty(new _invarianterror.InvariantError(`Invalid render stage: ${stage}`), "__NEXT_ERROR_CODE", { + value: "E881", + enumerable: false, + configurable: true + }); + } + } + } + waitForStage(stage) { + return this.getStagePromise(stage); + } + delayUntilStage(stage, displayName, resolvedValue) { + const ioTriggerPromise = this.getStagePromise(stage); + const promise = makeDevtoolsIOPromiseFromIOTrigger(ioTriggerPromise, displayName, resolvedValue); + // Analogously to `makeHangingPromise`, we might reject this promise if the signal is invoked. + // (e.g. in the case where we don't want want the render to proceed to the dynamic stage and abort it). + // We shouldn't consider this an unhandled rejection, so we attach a noop catch handler here to suppress this warning. + if (this.abortSignal) { + promise.catch(ignoreReject); + } + return promise; + } +} +function ignoreReject() {} +// TODO(restart-on-cache-miss): the layering of `delayUntilStage`, +// `makeDevtoolsIOPromiseFromIOTrigger` and and `makeDevtoolsIOAwarePromise` +// is confusing, we should clean it up. +function makeDevtoolsIOPromiseFromIOTrigger(ioTrigger, displayName, resolvedValue) { + // If we create a `new Promise` and give it a displayName + // (with no userspace code above us in the stack) + // React Devtools will use it as the IO cause when determining "suspended by". + // In particular, it should shadow any inner IO that resolved/rejected the promise + // (in case of staged rendering, this will be the `setTimeout` that triggers the relevant stage) + const promise = new Promise((resolve, reject)=>{ + ioTrigger.then(resolve.bind(null, resolvedValue), reject); + }); + if (displayName !== undefined) { + // @ts-expect-error + promise.displayName = displayName; + } + return promise; +} + +//# sourceMappingURL=staged-rendering.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/stale-time.js b/build/node_modules/next/dist/server/app-render/stale-time.js new file mode 100644 index 0000000..dd75773 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/stale-time.js @@ -0,0 +1,111 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + StaleTimeIterable: null, + createSelectStaleTime: null, + finishStaleTimeTracking: null, + trackStaleTime: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + StaleTimeIterable: function() { + return StaleTimeIterable; + }, + createSelectStaleTime: function() { + return createSelectStaleTime; + }, + finishStaleTimeTracking: function() { + return finishStaleTimeTracking; + }, + trackStaleTime: function() { + return trackStaleTime; + } +}); +const _constants = require("../../lib/constants"); +class StaleTimeIterable { + update(value) { + if (this._done) return; + this.currentValue = value; + if (this._resolve) { + this._resolve({ + value, + done: false + }); + this._resolve = null; + } else { + this._buffer.push(value); + } + } + close() { + if (this._done) return; + this._done = true; + if (this._resolve) { + this._resolve({ + value: undefined, + done: true + }); + this._resolve = null; + } + } + [Symbol.asyncIterator]() { + return { + next: ()=>{ + if (this._buffer.length > 0) { + return Promise.resolve({ + value: this._buffer.shift(), + done: false + }); + } + if (this._done) { + return Promise.resolve({ + value: undefined, + done: true + }); + } + return new Promise((resolve)=>{ + this._resolve = resolve; + }); + } + }; + } + constructor(){ + this._resolve = null; + this._done = false; + this._buffer = []; + /** The last value passed to `update()`. */ this.currentValue = 0; + } +} +function createSelectStaleTime(experimental) { + return (stale)=>{ + var _experimental_staleTimes; + return stale === _constants.INFINITE_CACHE && typeof ((_experimental_staleTimes = experimental.staleTimes) == null ? void 0 : _experimental_staleTimes.static) === 'number' ? experimental.staleTimes.static : stale; + }; +} +function trackStaleTime(store, iterable, selectStaleTime) { + let _stale = store.stale; + iterable.update(selectStaleTime(_stale)); + Object.defineProperty(store, 'stale', { + get: ()=>_stale, + set: (value)=>{ + _stale = value; + iterable.update(selectStaleTime(value)); + }, + configurable: true, + enumerable: true + }); +} +async function finishStaleTimeTracking(iterable) { + iterable.close(); + await Promise.resolve(); + await Promise.resolve(); + await Promise.resolve(); +} + +//# sourceMappingURL=stale-time.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/stream-ops.js b/build/node_modules/next/dist/server/app-render/stream-ops.js new file mode 100644 index 0000000..cb461a6 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/stream-ops.js @@ -0,0 +1,106 @@ +/** + * Compile-time switcher for stream operations. + * + * PR2: Simple re-export from the web implementation. + * A future change will add a conditional branch for node streams. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + chainStreams: null, + continueDynamicHTMLResume: null, + continueDynamicPrerender: null, + continueFizzStream: null, + continueStaticFallbackPrerender: null, + continueStaticPrerender: null, + createDocumentClosingStream: null, + createInlinedDataStream: null, + createOnHeadersCallback: null, + createPendingStream: null, + getClientPrerender: null, + getServerPrerender: null, + nodeReadableToWeb: null, + pipeRuntimePrefetchTransform: null, + processPrelude: null, + renderToFizzStream: null, + renderToFlightStream: null, + resumeAndAbort: null, + resumeToFizzStream: null, + streamToBuffer: null, + streamToString: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + chainStreams: function() { + return _streamopsweb.chainStreams; + }, + continueDynamicHTMLResume: function() { + return _streamopsweb.continueDynamicHTMLResume; + }, + continueDynamicPrerender: function() { + return _streamopsweb.continueDynamicPrerender; + }, + continueFizzStream: function() { + return _streamopsweb.continueFizzStream; + }, + continueStaticFallbackPrerender: function() { + return _streamopsweb.continueStaticFallbackPrerender; + }, + continueStaticPrerender: function() { + return _streamopsweb.continueStaticPrerender; + }, + createDocumentClosingStream: function() { + return _streamopsweb.createDocumentClosingStream; + }, + createInlinedDataStream: function() { + return _streamopsweb.createInlinedDataStream; + }, + createOnHeadersCallback: function() { + return _streamopsweb.createOnHeadersCallback; + }, + createPendingStream: function() { + return _streamopsweb.createPendingStream; + }, + getClientPrerender: function() { + return _streamopsweb.getClientPrerender; + }, + getServerPrerender: function() { + return _streamopsweb.getServerPrerender; + }, + nodeReadableToWeb: function() { + return _streamopsweb.nodeReadableToWeb; + }, + pipeRuntimePrefetchTransform: function() { + return _streamopsweb.pipeRuntimePrefetchTransform; + }, + processPrelude: function() { + return _streamopsweb.processPrelude; + }, + renderToFizzStream: function() { + return _streamopsweb.renderToFizzStream; + }, + renderToFlightStream: function() { + return _streamopsweb.renderToFlightStream; + }, + resumeAndAbort: function() { + return _streamopsweb.resumeAndAbort; + }, + resumeToFizzStream: function() { + return _streamopsweb.resumeToFizzStream; + }, + streamToBuffer: function() { + return _streamopsweb.streamToBuffer; + }, + streamToString: function() { + return _streamopsweb.streamToString; + } +}); +const _streamopsweb = require("./stream-ops.web"); + +//# sourceMappingURL=stream-ops.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/stream-ops.web.js b/build/node_modules/next/dist/server/app-render/stream-ops.web.js new file mode 100644 index 0000000..de01fc8 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/stream-ops.web.js @@ -0,0 +1,163 @@ +/** + * Web stream operations for the rendering pipeline. + * Loaded by stream-ops.ts (re-export in this PR, conditional switcher later). + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + chainStreams: null, + continueDynamicHTMLResume: null, + continueDynamicPrerender: null, + continueFizzStream: null, + continueStaticFallbackPrerender: null, + continueStaticPrerender: null, + createDocumentClosingStream: null, + createInlinedDataStream: null, + createOnHeadersCallback: null, + createPendingStream: null, + getClientPrerender: null, + getServerPrerender: null, + nodeReadableToWeb: null, + pipeRuntimePrefetchTransform: null, + processPrelude: null, + renderToFizzStream: null, + renderToFlightStream: null, + resumeAndAbort: null, + resumeToFizzStream: null, + streamToBuffer: null, + streamToString: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + chainStreams: function() { + return _nodewebstreamshelper.chainStreams; + }, + continueDynamicHTMLResume: function() { + return _nodewebstreamshelper.continueDynamicHTMLResume; + }, + continueDynamicPrerender: function() { + return _nodewebstreamshelper.continueDynamicPrerender; + }, + continueFizzStream: function() { + return continueFizzStream; + }, + continueStaticFallbackPrerender: function() { + return _nodewebstreamshelper.continueStaticFallbackPrerender; + }, + continueStaticPrerender: function() { + return _nodewebstreamshelper.continueStaticPrerender; + }, + createDocumentClosingStream: function() { + return _nodewebstreamshelper.createDocumentClosingStream; + }, + createInlinedDataStream: function() { + return createInlinedDataStream; + }, + createOnHeadersCallback: function() { + return createOnHeadersCallback; + }, + createPendingStream: function() { + return createPendingStream; + }, + getClientPrerender: function() { + return getClientPrerender; + }, + getServerPrerender: function() { + return getServerPrerender; + }, + nodeReadableToWeb: function() { + return nodeReadableToWeb; + }, + pipeRuntimePrefetchTransform: function() { + return pipeRuntimePrefetchTransform; + }, + processPrelude: function() { + return _apprenderprerenderutils.processPrelude; + }, + renderToFizzStream: function() { + return renderToFizzStream; + }, + renderToFlightStream: function() { + return renderToFlightStream; + }, + resumeAndAbort: function() { + return resumeAndAbort; + }, + resumeToFizzStream: function() { + return resumeToFizzStream; + }, + streamToBuffer: function() { + return _nodewebstreamshelper.streamToBuffer; + }, + streamToString: function() { + return streamToString; + } +}); +const _server = require("react-dom/server"); +const _static = require("react-dom/static"); +const _nodewebstreamshelper = require("../stream-utils/node-web-streams-helper"); +const _useflightresponse = require("./use-flight-response"); +const _apprenderprerenderutils = require("./app-render-prerender-utils"); +function continueFizzStream(renderStream, opts) { + return (0, _nodewebstreamshelper.continueFizzStream)(renderStream, opts); +} +const nodeReadableToWeb = undefined; +function createInlinedDataStream(source, nonce, formState) { + return (0, _useflightresponse.createInlinedDataReadableStream)(source, nonce, formState); +} +function createPendingStream() { + return new ReadableStream(); +} +function createOnHeadersCallback(appendHeader) { + return (headers)=>{ + headers.forEach((value, key)=>{ + appendHeader(key, value); + }); + }; +} +async function resumeAndAbort(element, postponed, opts) { + return (0, _server.resume)(element, postponed, opts); +} +function renderToFlightStream(ComponentMod, payload, clientModules, opts) { + return ComponentMod.renderToReadableStream(payload, clientModules, opts); +} +async function streamToString(stream) { + return (0, _nodewebstreamshelper.streamToString)(stream); +} +async function renderToFizzStream(element, streamOptions) { + const stream = await (0, _nodewebstreamshelper.renderToInitialFizzStream)({ + ReactDOMServer: { + renderToReadableStream: _server.renderToReadableStream + }, + element, + streamOptions + }); + return { + stream, + allReady: stream.allReady, + abort: undefined + }; +} +async function resumeToFizzStream(element, postponedState, streamOptions) { + const stream = await (0, _server.resume)(element, postponedState, streamOptions); + return { + stream, + allReady: stream.allReady, + abort: undefined + }; +} +function getServerPrerender(ComponentMod) { + return ComponentMod.prerender; +} +const getClientPrerender = _static.prerender; +function pipeRuntimePrefetchTransform(stream, sentinel, isPartial, staleTime) { + return stream.pipeThrough((0, _nodewebstreamshelper.createRuntimePrefetchTransformStream)(sentinel, isPartial, staleTime)); +} + +//# sourceMappingURL=stream-ops.web.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/strip-flight-headers.js b/build/node_modules/next/dist/server/app-render/strip-flight-headers.js new file mode 100644 index 0000000..eae6ad7 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/strip-flight-headers.js @@ -0,0 +1,18 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "stripFlightHeaders", { + enumerable: true, + get: function() { + return stripFlightHeaders; + } +}); +const _approuterheaders = require("../../client/components/app-router-headers"); +function stripFlightHeaders(headers) { + for (const header of _approuterheaders.FLIGHT_HEADERS){ + delete headers[header]; + } +} + +//# sourceMappingURL=strip-flight-headers.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/types.js b/build/node_modules/next/dist/server/app-render/types.js new file mode 100644 index 0000000..468d3b4 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/types.js @@ -0,0 +1,65 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "flightRouterStateSchema", { + enumerable: true, + get: function() { + return flightRouterStateSchema; + } +}); +const _superstruct = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/superstruct")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const dynamicParamTypesSchema = _superstruct.default.enums([ + 'c', + 'ci(..)(..)', + 'ci(.)', + 'ci(..)', + 'ci(...)', + 'oc', + 'd', + 'di(..)(..)', + 'di(.)', + 'di(..)', + 'di(...)' +]); +const segmentSchema = _superstruct.default.union([ + _superstruct.default.string(), + _superstruct.default.tuple([ + // Param name + _superstruct.default.string(), + // Param cache key (almost the same as the value, but arrays are + // concatenated into strings) + // TODO: We should change this to just be the value. Currently we convert + // it back to a value when passing to useParams. It only needs to be + // a string when converted to a a cache key, but that doesn't mean we + // need to store it as that representation. + _superstruct.default.string(), + // Dynamic param type + dynamicParamTypesSchema, + // Static siblings at the same URL level. Used by the client router to + // determine if a prefetch can be reused when navigating to a static + // sibling of a dynamic route. null means siblings are unknown. + _superstruct.default.nullable(_superstruct.default.array(_superstruct.default.string())) + ]) +]); +const flightRouterStateSchema = _superstruct.default.tuple([ + segmentSchema, + _superstruct.default.record(_superstruct.default.string(), _superstruct.default.lazy(()=>flightRouterStateSchema)), + _superstruct.default.optional(_superstruct.default.nullable(_superstruct.default.tuple([ + _superstruct.default.string(), + _superstruct.default.string() + ]))), + _superstruct.default.optional(_superstruct.default.nullable(_superstruct.default.union([ + _superstruct.default.literal('refetch'), + _superstruct.default.literal('inside-shared-layout'), + _superstruct.default.literal('metadata-only') + ]))), + _superstruct.default.optional(_superstruct.default.number()) +]); + +//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/use-flight-response.js b/build/node_modules/next/dist/server/app-render/use-flight-response.js new file mode 100644 index 0000000..c65e67e --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/use-flight-response.js @@ -0,0 +1,214 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createInlinedDataReadableStream: null, + getFlightStream: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createInlinedDataReadableStream: function() { + return createInlinedDataReadableStream; + }, + getFlightStream: function() { + return getFlightStream; + } +}); +const _htmlescape = require("../../shared/lib/htmlescape"); +const _workunitasyncstorageexternal = require("./work-unit-async-storage.external"); +const _invarianterror = require("../../shared/lib/invariant-error"); +const _manifestssingleton = require("./manifests-singleton"); +const isEdgeRuntime = process.env.NEXT_RUNTIME === 'edge'; +const INLINE_FLIGHT_PAYLOAD_BOOTSTRAP = 0; +const INLINE_FLIGHT_PAYLOAD_DATA = 1; +const INLINE_FLIGHT_PAYLOAD_FORM_STATE = 2; +const INLINE_FLIGHT_PAYLOAD_BINARY = 3; +const flightResponses = new WeakMap(); +const encoder = new TextEncoder(); +const findSourceMapURL = process.env.NODE_ENV !== 'production' ? require('../lib/source-maps').findSourceMapURLDEV : undefined; +function getFlightStream(flightStream, debugStream, debugEndTime, nonce) { + const response = flightResponses.get(flightStream); + if (response) { + return response; + } + const { moduleLoading, edgeSSRModuleMapping, ssrModuleMapping } = (0, _manifestssingleton.getClientReferenceManifest)(); + let newResponse; + if (flightStream instanceof ReadableStream) { + // The types of flightStream and debugStream should match. + if (debugStream && !(debugStream instanceof ReadableStream)) { + throw Object.defineProperty(new _invarianterror.InvariantError('Expected debug stream to be a ReadableStream'), "__NEXT_ERROR_CODE", { + value: "E939", + enumerable: false, + configurable: true + }); + } + // react-server-dom-webpack/client.edge must not be hoisted for require cache clearing to work correctly + const { createFromReadableStream } = // eslint-disable-next-line import/no-extraneous-dependencies + require('react-server-dom-webpack/client'); + newResponse = createFromReadableStream(flightStream, { + findSourceMapURL, + serverConsumerManifest: { + moduleLoading, + moduleMap: isEdgeRuntime ? edgeSSRModuleMapping : ssrModuleMapping, + serverModuleMap: null + }, + nonce, + debugChannel: debugStream ? { + readable: debugStream + } : undefined, + endTime: debugEndTime + }); + } else { + if (process.env.NEXT_RUNTIME === 'edge') { + throw Object.defineProperty(new _invarianterror.InvariantError('getFlightStream should always receive a ReadableStream when using the edge runtime'), "__NEXT_ERROR_CODE", { + value: "E943", + enumerable: false, + configurable: true + }); + } else { + const { Readable } = require('node:stream'); + // The types of flightStream and debugStream should match. + if (debugStream && !(debugStream instanceof Readable)) { + throw Object.defineProperty(new _invarianterror.InvariantError('Expected debug stream to be a Readable'), "__NEXT_ERROR_CODE", { + value: "E940", + enumerable: false, + configurable: true + }); + } + // react-server-dom-webpack/client.edge must not be hoisted for require cache clearing to work correctly + const { createFromNodeStream } = // eslint-disable-next-line import/no-extraneous-dependencies + require('react-server-dom-webpack/client'); + newResponse = createFromNodeStream(flightStream, { + moduleLoading, + moduleMap: isEdgeRuntime ? edgeSSRModuleMapping : ssrModuleMapping, + serverModuleMap: null + }, { + findSourceMapURL, + nonce, + debugChannel: debugStream, + endTime: debugEndTime + }); + } + } + // Edge pages are never prerendered so they necessarily cannot have a workUnitStore type + // that requires the nextTick behavior. This is why it is safe to access a node only API here + if (process.env.NEXT_RUNTIME !== 'edge') { + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (!workUnitStore) { + throw Object.defineProperty(new _invarianterror.InvariantError('Expected workUnitAsyncStorage to have a store.'), "__NEXT_ERROR_CODE", { + value: "E696", + enumerable: false, + configurable: true + }); + } + switch(workUnitStore.type){ + case 'prerender-client': + case 'validation-client': + const responseOnNextTick = new Promise((resolve)=>{ + process.nextTick(()=>{ + resolve(newResponse); + }); + }); + flightResponses.set(flightStream, responseOnNextTick); + return responseOnNextTick; + case 'prerender': + case 'prerender-runtime': + case 'prerender-ppr': + case 'prerender-legacy': + case 'request': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + flightResponses.set(flightStream, newResponse); + return newResponse; +} +function createInlinedDataReadableStream(flightStream, nonce, formState) { + const startScriptTag = nonce ? ``)); +} +function writeFlightDataInstruction(controller, scriptStart, chunk) { + let htmlInlinedData; + if (typeof chunk === 'string') { + htmlInlinedData = (0, _htmlescape.htmlEscapeJsonString)(JSON.stringify([ + INLINE_FLIGHT_PAYLOAD_DATA, + chunk + ])); + } else { + // The chunk cannot be embedded as a UTF-8 string in the script tag. + // Instead let's inline it in base64. + // Credits to Devon Govett (devongovett) for the technique. + // https://github.com/devongovett/rsc-html-stream + const base64 = typeof Buffer !== 'undefined' ? Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength).toString('base64') : btoa(String.fromCodePoint(...chunk)); + htmlInlinedData = (0, _htmlescape.htmlEscapeJsonString)(JSON.stringify([ + INLINE_FLIGHT_PAYLOAD_BINARY, + base64 + ])); + } + controller.enqueue(encoder.encode(`${scriptStart}self.__next_f.push(${htmlInlinedData})`)); +} + +//# sourceMappingURL=use-flight-response.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/vary-params.js b/build/node_modules/next/dist/server/app-render/vary-params.js new file mode 100644 index 0000000..efca192 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/vary-params.js @@ -0,0 +1,336 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + accumulateRootVaryParam: null, + accumulateVaryParam: null, + createResponseVaryParamsAccumulator: null, + createVaryParamsAccumulator: null, + createVaryingParams: null, + createVaryingSearchParams: null, + emptyVaryParamsAccumulator: null, + finishAccumulatingVaryParams: null, + getMetadataVaryParamsAccumulator: null, + getMetadataVaryParamsThenable: null, + getRootParamsVaryParamsAccumulator: null, + getVaryParamsThenable: null, + getViewportVaryParamsAccumulator: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + accumulateRootVaryParam: function() { + return accumulateRootVaryParam; + }, + accumulateVaryParam: function() { + return accumulateVaryParam; + }, + createResponseVaryParamsAccumulator: function() { + return createResponseVaryParamsAccumulator; + }, + createVaryParamsAccumulator: function() { + return createVaryParamsAccumulator; + }, + createVaryingParams: function() { + return createVaryingParams; + }, + createVaryingSearchParams: function() { + return createVaryingSearchParams; + }, + emptyVaryParamsAccumulator: function() { + return emptyVaryParamsAccumulator; + }, + finishAccumulatingVaryParams: function() { + return finishAccumulatingVaryParams; + }, + getMetadataVaryParamsAccumulator: function() { + return getMetadataVaryParamsAccumulator; + }, + getMetadataVaryParamsThenable: function() { + return getMetadataVaryParamsThenable; + }, + getRootParamsVaryParamsAccumulator: function() { + return getRootParamsVaryParamsAccumulator; + }, + getVaryParamsThenable: function() { + return getVaryParamsThenable; + }, + getViewportVaryParamsAccumulator: function() { + return getViewportVaryParamsAccumulator; + } +}); +const _workunitasyncstorageexternal = require("./work-unit-async-storage.external"); +function createSegmentVaryParamsAccumulator() { + const accumulator = { + varyParams: new Set(), + status: 'pending', + value: new Set(), + then (onfulfilled) { + if (onfulfilled) { + if (accumulator.status === 'pending') { + accumulator.resolvers.push(onfulfilled); + } else { + onfulfilled(accumulator.value); + } + } + }, + resolvers: [] + }; + return accumulator; +} +/** + * A singleton accumulator that's already resolved to an empty Set. Use this for + * segments where we know upfront that no params will be accessed, such as + * client components or segments without user code. + * + * Benefits: + * - No need to accumulate or resolve later + * - Resilient: resolves correctly even if other tracking fails + * - Memory efficient: reuses the same object + */ const emptySet = new Set(); +const emptyVaryParamsAccumulator = { + varyParams: emptySet, + status: 'fulfilled', + value: emptySet, + then (onfulfilled) { + if (onfulfilled) { + onfulfilled(emptySet); + } + }, + resolvers: [] +}; +function createResponseVaryParamsAccumulator() { + // Create the head and rootParams accumulators as top-level fields. + // Segment accumulators are added to the segments set as they are created. + const head = createSegmentVaryParamsAccumulator(); + const rootParams = createSegmentVaryParamsAccumulator(); + const segments = new Set(); + return { + head, + rootParams, + segments + }; +} +function createVaryParamsAccumulator() { + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-runtime': + { + const responseAccumulator = workUnitStore.varyParamsAccumulator; + if (responseAccumulator !== null) { + const accumulator = createSegmentVaryParamsAccumulator(); + responseAccumulator.segments.add(accumulator); + return accumulator; + } + return null; + } + case 'prerender-ppr': + case 'prerender-legacy': + case 'request': + case 'cache': + case 'private-cache': + case 'prerender-client': + case 'validation-client': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + return null; +} +function getMetadataVaryParamsAccumulator() { + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-runtime': + { + const responseAccumulator = workUnitStore.varyParamsAccumulator; + if (responseAccumulator !== null) { + return responseAccumulator.head; + } + return null; + } + case 'prerender-ppr': + case 'prerender-legacy': + case 'request': + case 'cache': + case 'private-cache': + case 'prerender-client': + case 'validation-client': + case 'unstable-cache': + case 'generate-static-params': + return null; + default: + workUnitStore; + } + } + return null; +} +function getVaryParamsThenable(accumulator) { + return accumulator; +} +function getMetadataVaryParamsThenable() { + const accumulator = getMetadataVaryParamsAccumulator(); + if (accumulator !== null) { + return getVaryParamsThenable(accumulator); + } + return null; +} +const getViewportVaryParamsAccumulator = getMetadataVaryParamsAccumulator; +function getRootParamsVaryParamsAccumulator() { + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-runtime': + { + const responseAccumulator = workUnitStore.varyParamsAccumulator; + if (responseAccumulator !== null) { + return responseAccumulator.rootParams; + } + return null; + } + case 'prerender-ppr': + case 'prerender-legacy': + case 'request': + case 'cache': + case 'private-cache': + case 'prerender-client': + case 'validation-client': + case 'unstable-cache': + case 'generate-static-params': + return null; + default: + workUnitStore; + } + } + return null; +} +function accumulateVaryParam(accumulator, paramName) { + accumulator.varyParams.add(paramName); +} +function accumulateRootVaryParam(paramName) { + const rootParamsAccumulator = getRootParamsVaryParamsAccumulator(); + if (rootParamsAccumulator !== null) { + accumulateVaryParam(rootParamsAccumulator, paramName); + } +} +function createVaryingParams(accumulator, originalParamsObject, optionalCatchAllParamName) { + if (optionalCatchAllParamName !== null) { + // When there's an optional catch-all param with no value (e.g., + // [[...slug]] at /), the param doesn't exist as a property on the params + // object. Use a Proxy to track all param access — both existing params + // and the missing optional param — including enumeration patterns like + // Object.keys(), spread, for...in, and `in` checks. + return new Proxy(originalParamsObject, { + get (target, prop, receiver) { + if (typeof prop === 'string') { + if (prop === optionalCatchAllParamName || Object.prototype.hasOwnProperty.call(target, prop)) { + accumulateVaryParam(accumulator, prop); + } + } + return Reflect.get(target, prop, receiver); + }, + has (target, prop) { + if (prop === optionalCatchAllParamName) { + accumulateVaryParam(accumulator, optionalCatchAllParamName); + } + return Reflect.has(target, prop); + }, + ownKeys (target) { + // Enumerating the params object means the user's code may depend on + // which params are present, so conservatively track the optional + // param as accessed. + accumulateVaryParam(accumulator, optionalCatchAllParamName); + return Reflect.ownKeys(target); + } + }); + } + // When there's no optional catch-all, all params exist as properties on the + // object, so we can use defineProperty getters instead of a Proxy. This is + // faster because the engine can optimize property access on regular objects + // more aggressively than Proxy trap calls. + const underlyingParamsWithVarying = {}; + for(const paramName in originalParamsObject){ + Object.defineProperty(underlyingParamsWithVarying, paramName, { + get () { + accumulateVaryParam(accumulator, paramName); + return originalParamsObject[paramName]; + }, + enumerable: true + }); + } + return underlyingParamsWithVarying; +} +function createVaryingSearchParams(accumulator, originalSearchParamsObject) { + const underlyingSearchParamsWithVarying = {}; + for(const searchParamName in originalSearchParamsObject){ + Object.defineProperty(underlyingSearchParamsWithVarying, searchParamName, { + get () { + // TODO: Unlike path params, we don't vary track each search param + // individually. The entire search string is treated as a single param. + // This may change in the future. + accumulateVaryParam(accumulator, '?'); + return originalSearchParamsObject[searchParamName]; + }, + enumerable: true + }); + } + return underlyingSearchParamsWithVarying; +} +async function finishAccumulatingVaryParams(responseAccumulator) { + const rootVaryParams = responseAccumulator.rootParams.varyParams; + // Resolve head + finishSegmentAccumulator(responseAccumulator.head, rootVaryParams); + // Resolve each segment + for (const segmentAccumulator of responseAccumulator.segments){ + finishSegmentAccumulator(segmentAccumulator, rootVaryParams); + } + // Now that the thenables are resolved, Flight should be able to flush the + // vary params into the response stream. This work gets scheduled internally + // by Flight using a microtask as soon as we notify the thenable listeners. + // + // We need to ensure that Flight's pending queues are emptied before this + // function returns; the caller will abort the prerender immediately after. + // We can't use a macrotask, because that would allow dynamic IO to sneak + // into the response. So we use microtasks instead. + // + // The exact number of awaits here isn't important (indeed, one seems to be + // sufficient, at the time of writing), as long as we wait enough ticks for + // Flight to finish writing the response. + // + // Anything that remains in Flight's internal queue after these awaits must + // be actual dynamic IO, not caused by pending vary params tasks. In other + // words, failing to do this would cause us to treat a fully static prerender + // as if it were partially dynamic. + await Promise.resolve(); + await Promise.resolve(); + await Promise.resolve(); +} +function finishSegmentAccumulator(accumulator, rootVaryParams) { + if (accumulator.status !== 'pending') { + return; + } + const merged = new Set(accumulator.varyParams); + for (const param of rootVaryParams){ + merged.add(param); + } + accumulator.value = merged; + accumulator.status = 'fulfilled'; + for (const resolver of accumulator.resolvers){ + resolver(merged); + } + accumulator.resolvers = []; +} + +//# sourceMappingURL=vary-params.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/walk-tree-with-flight-router-state.js b/build/node_modules/next/dist/server/app-render/walk-tree-with-flight-router-state.js new file mode 100644 index 0000000..3817407 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/walk-tree-with-flight-router-state.js @@ -0,0 +1,232 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createFullTreeFlightDataForNavigation: null, + walkTreeWithFlightRouterState: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createFullTreeFlightDataForNavigation: function() { + return createFullTreeFlightDataForNavigation; + }, + walkTreeWithFlightRouterState: function() { + return walkTreeWithFlightRouterState; + } +}); +const _matchsegments = require("../../client/components/match-segments"); +const _getcssinlinedlinktags = require("./get-css-inlined-link-tags"); +const _getpreloadablefonts = require("./get-preloadable-fonts"); +const _createflightrouterstatefromloadertree = require("./create-flight-router-state-from-loader-tree"); +const _hasloadingcomponentintree = require("./has-loading-component-in-tree"); +const _segment = require("../../shared/lib/segment"); +const _createcomponenttree = require("./create-component-tree"); +const _getsegmentparam = require("../../shared/lib/router/utils/get-segment-param"); +async function walkTreeWithFlightRouterState({ loaderTreeToFilter, parentParams, flightRouterState, parentIsInsideSharedLayout, rscHead, injectedCSS, injectedJS, injectedFontPreloadTags, rootLayoutIncluded, ctx, preloadCallbacks, MetadataOutlet, hintTree }) { + const { renderOpts: { nextFontManifest, experimental }, query, isPrefetch, getDynamicParamFromSegment, parsedRequestHeaders } = ctx; + const [segment, parallelRoutes, modules] = loaderTreeToFilter; + const parallelRoutesKeys = Object.keys(parallelRoutes); + const { layout } = modules; + const isLayout = typeof layout !== 'undefined'; + /** + * Checks if the current segment is a root layout. + */ const rootLayoutAtThisLevel = isLayout && !rootLayoutIncluded; + /** + * Checks if the current segment or any level above it has a root layout. + */ const rootLayoutIncludedAtThisLevelOrAbove = rootLayoutIncluded || rootLayoutAtThisLevel; + // Because this function walks to a deeper point in the tree to start rendering we have to track the dynamic parameters up to the point where rendering starts + const segmentParam = getDynamicParamFromSegment(loaderTreeToFilter); + const currentParams = // Handle null case where dynamic param is optional + segmentParam && segmentParam.value !== null ? { + ...parentParams, + [segmentParam.param]: segmentParam.value + } : parentParams; + const actualSegment = (0, _segment.addSearchParamsIfPageSegment)(segmentParam ? segmentParam.treeSegment : segment, query); + /** + * Decide if the current segment is where rendering has to start. + */ const renderComponentsOnThisLevel = // No further router state available + !flightRouterState || // Segment in router state does not match current segment + !(0, _matchsegments.matchSegment)(actualSegment, flightRouterState[0]) || // Explicit refresh + flightRouterState[3] === 'refetch'; + // Pre-PPR, the `loading` component signals to the router how deep to render the component tree + // to ensure prefetches are quick and inexpensive. If there's no `loading` component anywhere in the tree being rendered, + // the prefetch will be short-circuited to avoid requesting a potentially very expensive subtree. If there's a `loading` + // somewhere in the tree, we'll recursively render the component tree up until we encounter that loading component, and then stop. + // Check if we're inside the "new" part of the navigation — inside the + // shared layout. In the case of a prefetch, this can be true even if the + // segment matches, because the client might send a matching segment to + // indicate that it already has the data in its cache. But in order to find + // the correct loading boundary, we still need to track where the shared + // layout begins. + // + // TODO: We should rethink the protocol for dynamic requests. It might not + // make sense for the client to send a FlightRouterState, since that type is + // overloaded with other concerns. + const isInsideSharedLayout = renderComponentsOnThisLevel || parentIsInsideSharedLayout || flightRouterState[3] === 'inside-shared-layout'; + if (isInsideSharedLayout && !experimental.isRoutePPREnabled && // If PPR is disabled, and this is a request for the route tree, then we + // never render any components. Only send the router state. + (parsedRequestHeaders.isRouteTreePrefetchRequest || // Otherwise, check for the presence of a `loading` component. + isPrefetch && !Boolean(modules.loading) && !(0, _hasloadingcomponentintree.hasLoadingComponentInTree)(loaderTreeToFilter))) { + // Send only the router state. + // TODO: Even for a dynamic route, we should cache these responses, + // because they do not contain any render data (neither segment data nor + // the head). They can be made even more cacheable once we move the route + // params into a separate data structure. + const overriddenSegment = flightRouterState && // TODO: Why does canSegmentBeOverridden exist? Why don't we always just + // use `actualSegment`? Is it to avoid overwriting some state that's + // tracked by the client? Dig deeper to see if we can simplify this. + canSegmentBeOverridden(actualSegment, flightRouterState[0]) ? flightRouterState[0] : actualSegment; + const routerState = parsedRequestHeaders.isRouteTreePrefetchRequest ? await (0, _createflightrouterstatefromloadertree.createRouteTreePrefetch)(loaderTreeToFilter, hintTree, getDynamicParamFromSegment) : await (0, _createflightrouterstatefromloadertree.createFlightRouterStateFromLoaderTree)(loaderTreeToFilter, hintTree, getDynamicParamFromSegment, query); + return [ + [ + overriddenSegment, + routerState, + null, + [ + null, + null + ], + true + ] + ]; + } + // Similar to the previous branch. This flag is sent by the client to request + // only the metadata for a page. No segment data. + if (flightRouterState && flightRouterState[3] === 'metadata-only') { + const overriddenSegment = flightRouterState && canSegmentBeOverridden(actualSegment, flightRouterState[0]) ? flightRouterState[0] : actualSegment; + const routerState = parsedRequestHeaders.isRouteTreePrefetchRequest ? await (0, _createflightrouterstatefromloadertree.createRouteTreePrefetch)(loaderTreeToFilter, hintTree, getDynamicParamFromSegment) : await (0, _createflightrouterstatefromloadertree.createFlightRouterStateFromLoaderTree)(loaderTreeToFilter, hintTree, getDynamicParamFromSegment, query); + return [ + [ + overriddenSegment, + routerState, + null, + rscHead, + false + ] + ]; + } + if (renderComponentsOnThisLevel) { + const overriddenSegment = flightRouterState && // TODO: Why does canSegmentBeOverridden exist? Why don't we always just + // use `actualSegment`? Is it to avoid overwriting some state that's + // tracked by the client? Dig deeper to see if we can simplify this. + canSegmentBeOverridden(actualSegment, flightRouterState[0]) ? flightRouterState[0] : actualSegment; + const routerState = await (0, _createflightrouterstatefromloadertree.createFlightRouterStateFromLoaderTree)(// Create router state using the slice of the loaderTree + loaderTreeToFilter, hintTree, getDynamicParamFromSegment, query); + // Create component tree using the slice of the loaderTree + const seedData = await (0, _createcomponenttree.createComponentTree)(// This ensures flightRouterPath is valid and filters down the tree + { + ctx, + loaderTree: loaderTreeToFilter, + parentParams: currentParams, + parentOptionalCatchAllParamName: null, + parentRuntimePrefetchable: false, + injectedCSS, + injectedJS, + injectedFontPreloadTags, + // This is intentionally not "rootLayoutIncludedAtThisLevelOrAbove" as createComponentTree starts at the current level and does a check for "rootLayoutAtThisLevel" too. + rootLayoutIncluded, + preloadCallbacks, + authInterrupts: experimental.authInterrupts, + MetadataOutlet + }); + return [ + [ + overriddenSegment, + routerState, + seedData, + rscHead, + false + ] + ]; + } + // If we are not rendering on this level we need to check if the current + // segment has a layout. If so, we need to track all the used CSS to make + // the result consistent. + const layoutPath = layout == null ? void 0 : layout[1]; + const injectedCSSWithCurrentLayout = new Set(injectedCSS); + const injectedJSWithCurrentLayout = new Set(injectedJS); + const injectedFontPreloadTagsWithCurrentLayout = new Set(injectedFontPreloadTags); + if (layoutPath) { + (0, _getcssinlinedlinktags.getLinkAndScriptTags)(layoutPath, injectedCSSWithCurrentLayout, injectedJSWithCurrentLayout, true); + (0, _getpreloadablefonts.getPreloadableFonts)(nextFontManifest, layoutPath, injectedFontPreloadTagsWithCurrentLayout); + } + const paths = []; + // Walk through all parallel routes. + for (const parallelRouteKey of parallelRoutesKeys){ + var _hintTree_slots; + const parallelRoute = parallelRoutes[parallelRouteKey]; + const subPaths = await walkTreeWithFlightRouterState({ + ctx, + loaderTreeToFilter: parallelRoute, + parentParams: currentParams, + flightRouterState: flightRouterState && flightRouterState[1][parallelRouteKey], + parentIsInsideSharedLayout: isInsideSharedLayout, + rscHead, + injectedCSS: injectedCSSWithCurrentLayout, + injectedJS: injectedJSWithCurrentLayout, + injectedFontPreloadTags: injectedFontPreloadTagsWithCurrentLayout, + rootLayoutIncluded: rootLayoutIncludedAtThisLevelOrAbove, + preloadCallbacks, + MetadataOutlet, + hintTree: (hintTree == null ? void 0 : (_hintTree_slots = hintTree.slots) == null ? void 0 : _hintTree_slots[parallelRouteKey]) ?? null + }); + for (const subPath of subPaths){ + paths.push([ + actualSegment, + parallelRouteKey, + ...subPath + ]); + } + } + return paths; +} +async function createFullTreeFlightDataForNavigation({ loaderTree, rscHead, injectedCSS, injectedJS, injectedFontPreloadTags, ctx, preloadCallbacks, MetadataOutlet }) { + var _ctx_renderOpts_prefetchHints; + const { renderOpts: { experimental }, query, getDynamicParamFromSegment, pagePath } = ctx; + const hintTreeForInitialRender = ((_ctx_renderOpts_prefetchHints = ctx.renderOpts.prefetchHints) == null ? void 0 : _ctx_renderOpts_prefetchHints[pagePath]) ?? null; + const routerState = await (0, _createflightrouterstatefromloadertree.createFlightRouterStateFromLoaderTree)(loaderTree, hintTreeForInitialRender, getDynamicParamFromSegment, query); + const rootSegment = routerState[0]; + const seedData = await (0, _createcomponenttree.createComponentTree)({ + ctx, + loaderTree, + parentParams: {}, + parentOptionalCatchAllParamName: null, + parentRuntimePrefetchable: false, + injectedCSS, + injectedJS, + injectedFontPreloadTags, + rootLayoutIncluded: false, + preloadCallbacks, + authInterrupts: experimental.authInterrupts, + MetadataOutlet + }); + return [ + [ + // TODO: app-render slices this Segment off. + // why is that valid, and why are we including it in the first place? + rootSegment, + routerState, + seedData, + rscHead, + false + ] + ]; +} +/* + * This function is used to determine if an existing segment can be overridden + * by the incoming segment. + */ const canSegmentBeOverridden = (existingSegment, segment)=>{ + var _getSegmentParam; + if (Array.isArray(existingSegment) || !Array.isArray(segment)) { + return false; + } + return ((_getSegmentParam = (0, _getsegmentparam.getSegmentParam)(existingSegment)) == null ? void 0 : _getSegmentParam.paramName) === segment[0]; +}; + +//# sourceMappingURL=walk-tree-with-flight-router-state.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/work-async-storage-instance.js b/build/node_modules/next/dist/server/app-render/work-async-storage-instance.js new file mode 100644 index 0000000..1ea9c61 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/work-async-storage-instance.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "workAsyncStorageInstance", { + enumerable: true, + get: function() { + return workAsyncStorageInstance; + } +}); +const _asynclocalstorage = require("./async-local-storage"); +const workAsyncStorageInstance = (0, _asynclocalstorage.createAsyncLocalStorage)(); + +//# sourceMappingURL=work-async-storage-instance.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/work-async-storage.external.js b/build/node_modules/next/dist/server/app-render/work-async-storage.external.js new file mode 100644 index 0000000..7ad983b --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/work-async-storage.external.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "workAsyncStorage", { + enumerable: true, + get: function() { + return _workasyncstorageinstance.workAsyncStorageInstance; + } +}); +const _workasyncstorageinstance = require("./work-async-storage-instance"); + +//# sourceMappingURL=work-async-storage.external.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js b/build/node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js new file mode 100644 index 0000000..5fff687 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "workUnitAsyncStorageInstance", { + enumerable: true, + get: function() { + return workUnitAsyncStorageInstance; + } +}); +const _asynclocalstorage = require("./async-local-storage"); +const workUnitAsyncStorageInstance = (0, _asynclocalstorage.createAsyncLocalStorage)(); + +//# sourceMappingURL=work-unit-async-storage-instance.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/app-render/work-unit-async-storage.external.js b/build/node_modules/next/dist/server/app-render/work-unit-async-storage.external.js new file mode 100644 index 0000000..5ea6678 --- /dev/null +++ b/build/node_modules/next/dist/server/app-render/work-unit-async-storage.external.js @@ -0,0 +1,280 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getCacheSignal: null, + getDraftModeProviderForCacheScope: null, + getHmrRefreshHash: null, + getPrerenderResumeDataCache: null, + getRenderResumeDataCache: null, + getServerComponentsHmrCache: null, + getStagedRenderingController: null, + isHmrRefresh: null, + isInEarlyRenderStage: null, + throwForMissingRequestStore: null, + throwInvariantForMissingStore: null, + workUnitAsyncStorage: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getCacheSignal: function() { + return getCacheSignal; + }, + getDraftModeProviderForCacheScope: function() { + return getDraftModeProviderForCacheScope; + }, + getHmrRefreshHash: function() { + return getHmrRefreshHash; + }, + getPrerenderResumeDataCache: function() { + return getPrerenderResumeDataCache; + }, + getRenderResumeDataCache: function() { + return getRenderResumeDataCache; + }, + getServerComponentsHmrCache: function() { + return getServerComponentsHmrCache; + }, + getStagedRenderingController: function() { + return getStagedRenderingController; + }, + isHmrRefresh: function() { + return isHmrRefresh; + }, + isInEarlyRenderStage: function() { + return isInEarlyRenderStage; + }, + throwForMissingRequestStore: function() { + return throwForMissingRequestStore; + }, + throwInvariantForMissingStore: function() { + return throwInvariantForMissingStore; + }, + workUnitAsyncStorage: function() { + return _workunitasyncstorageinstance.workUnitAsyncStorageInstance; + } +}); +const _workunitasyncstorageinstance = require("./work-unit-async-storage-instance"); +const _approuterheaders = require("../../client/components/app-router-headers"); +const _invarianterror = require("../../shared/lib/invariant-error"); +const _stagedrendering = require("./staged-rendering"); +function isInEarlyRenderStage(requestStore) { + const stagedRendering = requestStore.stagedRendering; + if (stagedRendering) { + return stagedRendering.currentStage === _stagedrendering.RenderStage.EarlyStatic || stagedRendering.currentStage === _stagedrendering.RenderStage.EarlyRuntime; + } + return false; +} +function throwForMissingRequestStore(callingExpression) { + throw Object.defineProperty(new Error(`\`${callingExpression}\` was called outside a request scope. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`), "__NEXT_ERROR_CODE", { + value: "E251", + enumerable: false, + configurable: true + }); +} +function throwInvariantForMissingStore() { + throw Object.defineProperty(new _invarianterror.InvariantError('Expected workUnitAsyncStorage to have a store.'), "__NEXT_ERROR_CODE", { + value: "E696", + enumerable: false, + configurable: true + }); +} +function getPrerenderResumeDataCache(workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-runtime': + case 'prerender-ppr': + return workUnitStore.prerenderResumeDataCache; + case 'prerender-client': + case 'validation-client': + // TODO eliminate fetch caching in client scope and stop exposing this data + // cache during SSR. + return workUnitStore.prerenderResumeDataCache; + case 'request': + { + // In dev, we might fill caches even during a dynamic request. + if (workUnitStore.prerenderResumeDataCache) { + return workUnitStore.prerenderResumeDataCache; + } + // fallthrough + } + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + return null; + default: + return workUnitStore; + } +} +function getRenderResumeDataCache(workUnitStore) { + switch(workUnitStore.type){ + case 'request': + case 'prerender': + case 'prerender-runtime': + case 'prerender-client': + case 'validation-client': + if (workUnitStore.renderResumeDataCache) { + // If we are in a prerender, we might have a render resume data cache + // that is used to read from prefilled caches. + return workUnitStore.renderResumeDataCache; + } + // fallthrough + case 'prerender-ppr': + // Otherwise we return the mutable resume data cache here as an immutable + // version of the cache as it can also be used for reading. + return workUnitStore.prerenderResumeDataCache ?? null; + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'prerender-legacy': + case 'generate-static-params': + return null; + default: + return workUnitStore; + } +} +function getHmrRefreshHash(workUnitStore) { + if (process.env.__NEXT_DEV_SERVER) { + switch(workUnitStore.type){ + case 'cache': + case 'private-cache': + case 'prerender': + case 'prerender-runtime': + return workUnitStore.hmrRefreshHash; + case 'request': + var _workUnitStore_cookies_get; + return (_workUnitStore_cookies_get = workUnitStore.cookies.get(_approuterheaders.NEXT_HMR_REFRESH_HASH_COOKIE)) == null ? void 0 : _workUnitStore_cookies_get.value; + case 'prerender-client': + case 'validation-client': + case 'prerender-ppr': + case 'prerender-legacy': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + return undefined; +} +function isHmrRefresh(workUnitStore) { + if (process.env.__NEXT_DEV_SERVER) { + switch(workUnitStore.type){ + case 'cache': + case 'private-cache': + case 'request': + return workUnitStore.isHmrRefresh ?? false; + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-runtime': + case 'prerender-ppr': + case 'prerender-legacy': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + return false; +} +function getServerComponentsHmrCache(workUnitStore) { + if (process.env.__NEXT_DEV_SERVER) { + switch(workUnitStore.type){ + case 'cache': + case 'private-cache': + case 'request': + return workUnitStore.serverComponentsHmrCache; + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-runtime': + case 'prerender-ppr': + case 'prerender-legacy': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + return undefined; +} +function getDraftModeProviderForCacheScope(workStore, workUnitStore) { + if (workStore.isDraftMode) { + switch(workUnitStore.type){ + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'prerender-runtime': + case 'request': + return workUnitStore.draftMode; + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-ppr': + case 'prerender-legacy': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + return undefined; +} +function getStagedRenderingController(workUnitStore) { + switch(workUnitStore.type){ + case 'request': + case 'prerender-runtime': + return workUnitStore.stagedRendering ?? null; + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-ppr': + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + return null; + default: + return workUnitStore; + } +} +function getCacheSignal(workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-runtime': + return workUnitStore.cacheSignal; + case 'request': + { + // In dev, we might fill caches even during a dynamic request. + if (workUnitStore.cacheSignal) { + return workUnitStore.cacheSignal; + } + // fallthrough + } + case 'prerender-ppr': + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + return null; + default: + return workUnitStore; + } +} + +//# sourceMappingURL=work-unit-async-storage.external.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/async-storage/draft-mode-provider.js b/build/node_modules/next/dist/server/async-storage/draft-mode-provider.js new file mode 100644 index 0000000..cd282c7 --- /dev/null +++ b/build/node_modules/next/dist/server/async-storage/draft-mode-provider.js @@ -0,0 +1,62 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "DraftModeProvider", { + enumerable: true, + get: function() { + return DraftModeProvider; + } +}); +const _apiutils = require("../api-utils"); +class DraftModeProvider { + constructor(previewProps, req, cookies, mutableCookies){ + var _cookies_get; + // The logic for draftMode() is very similar to tryGetPreviewData() + // but Draft Mode does not have any data associated with it. + const isOnDemandRevalidate = previewProps && (0, _apiutils.checkIsOnDemandRevalidate)(req, previewProps).isOnDemandRevalidate; + const cookieValue = (_cookies_get = cookies.get(_apiutils.COOKIE_NAME_PRERENDER_BYPASS)) == null ? void 0 : _cookies_get.value; + this._isEnabled = Boolean(!isOnDemandRevalidate && cookieValue && previewProps && (cookieValue === previewProps.previewModeId || // In dev mode, the cookie can be actual hash value preview id but the preview props can still be `development-id`. + process.env.NODE_ENV !== 'production' && previewProps.previewModeId === 'development-id')); + this._previewModeId = previewProps == null ? void 0 : previewProps.previewModeId; + this._mutableCookies = mutableCookies; + } + get isEnabled() { + return this._isEnabled; + } + enable() { + if (!this._previewModeId) { + throw Object.defineProperty(new Error('Invariant: previewProps missing previewModeId this should never happen'), "__NEXT_ERROR_CODE", { + value: "E93", + enumerable: false, + configurable: true + }); + } + this._mutableCookies.set({ + name: _apiutils.COOKIE_NAME_PRERENDER_BYPASS, + value: this._previewModeId, + httpOnly: true, + sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax', + secure: process.env.NODE_ENV !== 'development', + path: '/' + }); + this._isEnabled = true; + } + disable() { + // To delete a cookie, set `expires` to a date in the past: + // https://tools.ietf.org/html/rfc6265#section-4.1.1 + // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted. + this._mutableCookies.set({ + name: _apiutils.COOKIE_NAME_PRERENDER_BYPASS, + value: '', + httpOnly: true, + sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax', + secure: process.env.NODE_ENV !== 'development', + path: '/', + expires: new Date(0) + }); + this._isEnabled = false; + } +} + +//# sourceMappingURL=draft-mode-provider.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/async-storage/request-store.js b/build/node_modules/next/dist/server/async-storage/request-store.js new file mode 100644 index 0000000..0b23cbf --- /dev/null +++ b/build/node_modules/next/dist/server/async-storage/request-store.js @@ -0,0 +1,144 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createRequestStoreForAPI: null, + createRequestStoreForRender: null, + synchronizeMutableCookies: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createRequestStoreForAPI: function() { + return createRequestStoreForAPI; + }, + createRequestStoreForRender: function() { + return createRequestStoreForRender; + }, + synchronizeMutableCookies: function() { + return synchronizeMutableCookies; + } +}); +const _approuterheaders = require("../../client/components/app-router-headers"); +const _headers = require("../web/spec-extension/adapters/headers"); +const _requestcookies = require("../web/spec-extension/adapters/request-cookies"); +const _cookies = require("../web/spec-extension/cookies"); +const _draftmodeprovider = require("./draft-mode-provider"); +const _utils = require("../web/utils"); +function getHeaders(headers) { + const cleaned = _headers.HeadersAdapter.from(headers); + for (const header of _approuterheaders.FLIGHT_HEADERS){ + cleaned.delete(header); + } + return _headers.HeadersAdapter.seal(cleaned); +} +function getMutableCookies(headers, onUpdateCookies) { + const cookies = new _cookies.RequestCookies(_headers.HeadersAdapter.from(headers)); + return _requestcookies.MutableRequestCookiesAdapter.wrap(cookies, onUpdateCookies); +} +/** + * If middleware set cookies in this request (indicated by `x-middleware-set-cookie`), + * then merge those into the existing cookie object, so that when `cookies()` is accessed + * it's able to read the newly set cookies. + */ function mergeMiddlewareCookies(req, existingCookies) { + if ('x-middleware-set-cookie' in req.headers && typeof req.headers['x-middleware-set-cookie'] === 'string') { + const setCookieValue = req.headers['x-middleware-set-cookie']; + const responseHeaders = new Headers(); + for (const cookie of (0, _utils.splitCookiesString)(setCookieValue)){ + responseHeaders.append('set-cookie', cookie); + } + const responseCookies = new _cookies.ResponseCookies(responseHeaders); + // Transfer cookies from ResponseCookies to RequestCookies + for (const cookie of responseCookies.getAll()){ + existingCookies.set(cookie); + } + } +} +function createRequestStoreForRender(req, res, url, rootParams, implicitTags, onUpdateCookies, previewProps, isHmrRefresh, serverComponentsHmrCache, renderResumeDataCache, fallbackParams) { + return createRequestStoreImpl(// Pages start in render phase by default + 'render', req, res, url, rootParams, implicitTags, onUpdateCookies, renderResumeDataCache, previewProps, isHmrRefresh, serverComponentsHmrCache, fallbackParams); +} +function createRequestStoreForAPI(req, url, implicitTags, onUpdateCookies, previewProps) { + return createRequestStoreImpl(// API routes start in action phase by default + 'action', req, undefined, url, {}, implicitTags, onUpdateCookies, null, previewProps, false, undefined, null); +} +function createRequestStoreImpl(phase, req, res, url, rootParams, implicitTags, onUpdateCookies, renderResumeDataCache, previewProps, isHmrRefresh, serverComponentsHmrCache, fallbackParams) { + function defaultOnUpdateCookies(cookies) { + if (res) { + res.setHeader('Set-Cookie', cookies); + } + } + const cache = {}; + return { + type: 'request', + phase, + implicitTags, + // Rather than just using the whole `url` here, we pull the parts we want + // to ensure we don't use parts of the URL that we shouldn't. This also + // lets us avoid requiring an empty string for `search` in the type. + url: { + pathname: url.pathname, + search: url.search ?? '' + }, + rootParams, + get headers () { + if (!cache.headers) { + // Seal the headers object that'll freeze out any methods that could + // mutate the underlying data. + cache.headers = getHeaders(req.headers); + } + return cache.headers; + }, + get cookies () { + if (!cache.cookies) { + // if middleware is setting cookie(s), then include those in + // the initial cached cookies so they can be read in render + const requestCookies = new _cookies.RequestCookies(_headers.HeadersAdapter.from(req.headers)); + mergeMiddlewareCookies(req, requestCookies); + // Seal the cookies object that'll freeze out any methods that could + // mutate the underlying data. + cache.cookies = _requestcookies.RequestCookiesAdapter.seal(requestCookies); + } + return cache.cookies; + }, + set cookies (value){ + cache.cookies = value; + }, + get mutableCookies () { + if (!cache.mutableCookies) { + const mutableCookies = getMutableCookies(req.headers, onUpdateCookies || (res ? defaultOnUpdateCookies : undefined)); + mergeMiddlewareCookies(req, mutableCookies); + cache.mutableCookies = mutableCookies; + } + return cache.mutableCookies; + }, + get userspaceMutableCookies () { + if (!cache.userspaceMutableCookies) { + const userspaceMutableCookies = (0, _requestcookies.createCookiesWithMutableAccessCheck)(this); + cache.userspaceMutableCookies = userspaceMutableCookies; + } + return cache.userspaceMutableCookies; + }, + get draftMode () { + if (!cache.draftMode) { + cache.draftMode = new _draftmodeprovider.DraftModeProvider(previewProps, req, this.cookies, this.mutableCookies); + } + return cache.draftMode; + }, + renderResumeDataCache: renderResumeDataCache ?? null, + isHmrRefresh, + serverComponentsHmrCache: serverComponentsHmrCache || globalThis.__serverComponentsHmrCache, + fallbackParams + }; +} +function synchronizeMutableCookies(store) { + // TODO: does this need to update headers as well? + store.cookies = _requestcookies.RequestCookiesAdapter.seal((0, _requestcookies.responseCookiesToRequestCookies)(store.mutableCookies)); +} + +//# sourceMappingURL=request-store.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/async-storage/with-store.js b/build/node_modules/next/dist/server/async-storage/with-store.js new file mode 100644 index 0000000..7eb7a4a --- /dev/null +++ b/build/node_modules/next/dist/server/async-storage/with-store.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=with-store.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/async-storage/work-store.js b/build/node_modules/next/dist/server/async-storage/work-store.js new file mode 100644 index 0000000..5341833 --- /dev/null +++ b/build/node_modules/next/dist/server/async-storage/work-store.js @@ -0,0 +1,92 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "createWorkStore", { + enumerable: true, + get: function() { + return createWorkStore; + } +}); +const _aftercontext = require("../after/after-context"); +const _apppaths = require("../../shared/lib/router/utils/app-paths"); +const _lazyresult = require("../lib/lazy-result"); +const _handlers = require("../use-cache/handlers"); +const _asynclocalstorage = require("../app-render/async-local-storage"); +function createWorkStore({ page, renderOpts, isPrefetchRequest, buildId, deploymentId, previouslyRevalidatedTags, nonce }) { + /** + * Rules of Static & Dynamic HTML: + * + * 1.) We must generate static HTML unless the caller explicitly opts + * in to dynamic HTML support. + * + * 2.) If dynamic HTML support is requested, we must honor that request + * or throw an error. It is the sole responsibility of the caller to + * ensure they aren't e.g. requesting dynamic HTML for a static page. + * + * 3.) If the request is in draft mode, we must generate dynamic HTML. + * + * 4.) If the request is a server action, we must generate dynamic HTML. + * + * These rules help ensure that other existing features like request caching, + * coalescing, and ISR continue working as intended. + */ const isStaticGeneration = !renderOpts.shouldWaitOnAllReady && !renderOpts.supportsDynamicResponse && !renderOpts.isDraftMode && !renderOpts.isPossibleServerAction; + const shouldTrackFetchMetrics = !!process.env.__NEXT_DEV_SERVER || // The only times we want to track fetch metrics outside of development is + // when we are performing a static generation and we either are in debug + // mode, or tracking fetch metrics was specifically opted into. + isStaticGeneration && (!!process.env.NEXT_DEBUG_BUILD || process.env.NEXT_SSG_FETCH_METRICS === '1'); + const store = { + isStaticGeneration, + page, + route: (0, _apppaths.normalizeAppPath)(page), + incrementalCache: // we fallback to a global incremental cache for edge-runtime locally + // so that it can access the fs cache without mocks + renderOpts.incrementalCache || globalThis.__incrementalCache, + cacheLifeProfiles: renderOpts.cacheLifeProfiles, + isBuildTimePrerendering: renderOpts.isBuildTimePrerendering, + fetchCache: renderOpts.fetchCache, + isOnDemandRevalidate: renderOpts.isOnDemandRevalidate, + isDraftMode: renderOpts.isDraftMode, + isPrefetchRequest, + buildId, + deploymentId, + reactLoadableManifest: (renderOpts == null ? void 0 : renderOpts.reactLoadableManifest) || {}, + assetPrefix: (renderOpts == null ? void 0 : renderOpts.assetPrefix) || '', + nonce, + afterContext: createAfterContext(renderOpts), + cacheComponentsEnabled: renderOpts.cacheComponents, + previouslyRevalidatedTags, + refreshTagsByCacheKind: createRefreshTagsByCacheKind(), + runInCleanSnapshot: (0, _asynclocalstorage.createSnapshot)(), + shouldTrackFetchMetrics, + reactServerErrorsByDigest: new Map() + }; + // TODO: remove this when we resolve accessing the store outside the execution context + renderOpts.store = store; + return store; +} +function createAfterContext(renderOpts) { + const { waitUntil, onClose, onAfterTaskError } = renderOpts; + return new _aftercontext.AfterContext({ + waitUntil, + onClose, + onTaskError: onAfterTaskError + }); +} +/** + * Creates a map with lazy results that refresh tags for the respective cache + * kind when they're awaited for the first time. + */ function createRefreshTagsByCacheKind() { + const refreshTagsByCacheKind = new Map(); + const cacheHandlers = (0, _handlers.getCacheHandlerEntries)(); + if (cacheHandlers) { + for (const [kind, cacheHandler] of cacheHandlers){ + if ('refreshTags' in cacheHandler) { + refreshTagsByCacheKind.set(kind, (0, _lazyresult.createLazyResult)(async ()=>cacheHandler.refreshTags())); + } + } + } + return refreshTagsByCacheKind; +} + +//# sourceMappingURL=work-store.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/base-http/helpers.js b/build/node_modules/next/dist/server/base-http/helpers.js new file mode 100644 index 0000000..87f4ae5 --- /dev/null +++ b/build/node_modules/next/dist/server/base-http/helpers.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + isNodeNextRequest: null, + isNodeNextResponse: null, + isWebNextRequest: null, + isWebNextResponse: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + isNodeNextRequest: function() { + return isNodeNextRequest; + }, + isNodeNextResponse: function() { + return isNodeNextResponse; + }, + isWebNextRequest: function() { + return isWebNextRequest; + }, + isWebNextResponse: function() { + return isWebNextResponse; + } +}); +const isWebNextRequest = (req)=>process.env.NEXT_RUNTIME === 'edge'; +const isWebNextResponse = (res)=>process.env.NEXT_RUNTIME === 'edge'; +const isNodeNextRequest = (req)=>process.env.NEXT_RUNTIME !== 'edge'; +const isNodeNextResponse = (res)=>process.env.NEXT_RUNTIME !== 'edge'; + +//# sourceMappingURL=helpers.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/base-http/index.js b/build/node_modules/next/dist/server/base-http/index.js new file mode 100644 index 0000000..73db796 --- /dev/null +++ b/build/node_modules/next/dist/server/base-http/index.js @@ -0,0 +1,54 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + BaseNextRequest: null, + BaseNextResponse: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + BaseNextRequest: function() { + return BaseNextRequest; + }, + BaseNextResponse: function() { + return BaseNextResponse; + } +}); +const _redirectstatuscode = require("../../client/components/redirect-status-code"); +const _getcookieparser = require("../api-utils/get-cookie-parser"); +class BaseNextRequest { + constructor(method, url, body){ + this.method = method; + this.url = url; + this.body = body; + } + // Utils implemented using the abstract methods above + get cookies() { + if (this._cookies) return this._cookies; + return this._cookies = (0, _getcookieparser.getCookieParser)(this.headers)(); + } +} +class BaseNextResponse { + constructor(destination){ + this.destination = destination; + } + // Utils implemented using the abstract methods above + redirect(destination, statusCode) { + this.setHeader('Location', destination); + this.statusCode = statusCode; + // Since IE11 doesn't support the 308 header add backwards + // compatibility using refresh header + if (statusCode === _redirectstatuscode.RedirectStatusCode.PermanentRedirect) { + this.setHeader('Refresh', `0;url=${destination}`); + } + return this; + } +} + +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/base-http/node.js b/build/node_modules/next/dist/server/base-http/node.js new file mode 100644 index 0000000..9aa867f --- /dev/null +++ b/build/node_modules/next/dist/server/base-http/node.js @@ -0,0 +1,147 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + NodeNextRequest: null, + NodeNextResponse: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + NodeNextRequest: function() { + return NodeNextRequest; + }, + NodeNextResponse: function() { + return NodeNextResponse; + } +}); +const _apiutils = require("../api-utils"); +const _requestmeta = require("../request-meta"); +const _index = require("./index"); +let prop; +class NodeNextRequest extends _index.BaseNextRequest { + static #_ = prop = _NEXT_REQUEST_META = _requestmeta.NEXT_REQUEST_META; + constructor(_req){ + var _this__req; + super(_req.method.toUpperCase(), _req.url, _req), this._req = _req, this.headers = this._req.headers, this.fetchMetrics = (_this__req = this._req) == null ? void 0 : _this__req.fetchMetrics, this[_NEXT_REQUEST_META] = this._req[_requestmeta.NEXT_REQUEST_META] || {}, this.streaming = false; + } + get originalRequest() { + // Need to mimic these changes to the original req object for places where we use it: + // render.tsx, api/ssg requests + this._req[_requestmeta.NEXT_REQUEST_META] = this[_requestmeta.NEXT_REQUEST_META]; + this._req.url = this.url; + this._req.cookies = this.cookies; + return this._req; + } + set originalRequest(value) { + this._req = value; + } + /** + * Returns the request body as a Web Readable Stream. The body here can only + * be read once as the body will start flowing as soon as the data handler + * is attached. + * + * @internal + */ stream() { + if (this.streaming) { + throw Object.defineProperty(new Error('Invariant: NodeNextRequest.stream() can only be called once'), "__NEXT_ERROR_CODE", { + value: "E467", + enumerable: false, + configurable: true + }); + } + this.streaming = true; + return new ReadableStream({ + start: (controller)=>{ + this._req.on('data', (chunk)=>{ + controller.enqueue(new Uint8Array(chunk)); + }); + this._req.on('end', ()=>{ + controller.close(); + }); + this._req.on('error', (err)=>{ + controller.error(err); + }); + } + }); + } +} +class NodeNextResponse extends _index.BaseNextResponse { + get originalResponse() { + if (_apiutils.SYMBOL_CLEARED_COOKIES in this) { + this._res[_apiutils.SYMBOL_CLEARED_COOKIES] = this[_apiutils.SYMBOL_CLEARED_COOKIES]; + } + return this._res; + } + constructor(_res){ + super(_res), this._res = _res, this.textBody = undefined; + } + get sent() { + return this._res.finished || this._res.headersSent; + } + get statusCode() { + return this._res.statusCode; + } + set statusCode(value) { + this._res.statusCode = value; + } + get statusMessage() { + return this._res.statusMessage; + } + set statusMessage(value) { + this._res.statusMessage = value; + } + setHeader(name, value) { + this._res.setHeader(name, value); + return this; + } + removeHeader(name) { + this._res.removeHeader(name); + return this; + } + getHeaderValues(name) { + const values = this._res.getHeader(name); + if (values === undefined) return undefined; + return (Array.isArray(values) ? values : [ + values + ]).map((value)=>value.toString()); + } + hasHeader(name) { + return this._res.hasHeader(name); + } + getHeader(name) { + const values = this.getHeaderValues(name); + return Array.isArray(values) ? values.join(',') : undefined; + } + getHeaders() { + return this._res.getHeaders(); + } + appendHeader(name, value) { + const currentValues = this.getHeaderValues(name) ?? []; + if (!currentValues.includes(value)) { + this._res.setHeader(name, [ + ...currentValues, + value + ]); + } + return this; + } + body(value) { + this.textBody = value; + return this; + } + send() { + this._res.end(this.textBody); + } + onClose(callback) { + this.originalResponse.on('close', callback); + } +} +var _NEXT_REQUEST_META; + +//# sourceMappingURL=node.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/base-http/web.js b/build/node_modules/next/dist/server/base-http/web.js new file mode 100644 index 0000000..3aca68e --- /dev/null +++ b/build/node_modules/next/dist/server/base-http/web.js @@ -0,0 +1,124 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + WebNextRequest: null, + WebNextResponse: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + WebNextRequest: function() { + return WebNextRequest; + }, + WebNextResponse: function() { + return WebNextResponse; + } +}); +const _utils = require("../web/utils"); +const _index = require("./index"); +const _detachedpromise = require("../../lib/detached-promise"); +const _webonclose = require("../web/web-on-close"); +const _invarianterror = require("../../shared/lib/invariant-error"); +class WebNextRequest extends _index.BaseNextRequest { + constructor(request){ + const url = new URL(request.url); + super(request.method, url.href.slice(url.origin.length), request.clone().body); + this.request = request; + this.fetchMetrics = request.fetchMetrics; + this.headers = {}; + for (const [name, value] of request.headers.entries()){ + this.headers[name] = value; + } + } + async parseBody(_limit) { + throw Object.defineProperty(new Error('parseBody is not implemented in the web runtime'), "__NEXT_ERROR_CODE", { + value: "E213", + enumerable: false, + configurable: true + }); + } +} +class WebNextResponse extends _index.BaseNextResponse { + constructor(transformStream = new TransformStream()){ + super(transformStream.writable), this.transformStream = transformStream, this.headers = new Headers(), this.textBody = undefined, this.closeController = new _webonclose.CloseController(), this.sendPromise = new _detachedpromise.DetachedPromise(), this._sent = false; + } + setHeader(name, value) { + this.headers.delete(name); + for (const val of Array.isArray(value) ? value : [ + value + ]){ + this.headers.append(name, val); + } + return this; + } + removeHeader(name) { + this.headers.delete(name); + return this; + } + getHeaderValues(name) { + var _this_getHeader; + // https://developer.mozilla.org/docs/Web/API/Headers/get#example + return (_this_getHeader = this.getHeader(name)) == null ? void 0 : _this_getHeader.split(',').map((v)=>v.trimStart()); + } + getHeader(name) { + return this.headers.get(name) ?? undefined; + } + getHeaders() { + return (0, _utils.toNodeOutgoingHttpHeaders)(this.headers); + } + hasHeader(name) { + return this.headers.has(name); + } + appendHeader(name, value) { + this.headers.append(name, value); + return this; + } + body(value) { + this.textBody = value; + return this; + } + send() { + this.sendPromise.resolve(); + this._sent = true; + } + get sent() { + return this._sent; + } + async toResponse() { + // If we haven't called `send` yet, wait for it to be called. + if (!this.sent) await this.sendPromise.promise; + const body = this.textBody ?? this.transformStream.readable; + let bodyInit = body; + // if the response is streaming, onClose() can still be called after this point. + const canAddListenersLater = typeof bodyInit !== 'string'; + const shouldTrackBody = canAddListenersLater ? true : this.closeController.listeners > 0; + if (shouldTrackBody) { + bodyInit = (0, _webonclose.trackBodyConsumed)(body, ()=>{ + this.closeController.dispatchClose(); + }); + } + return new Response(bodyInit, { + headers: this.headers, + status: this.statusCode, + statusText: this.statusMessage + }); + } + onClose(callback) { + if (this.closeController.isClosed) { + throw Object.defineProperty(new _invarianterror.InvariantError('Cannot call onClose on a WebNextResponse that is already closed'), "__NEXT_ERROR_CODE", { + value: "E599", + enumerable: false, + configurable: true + }); + } + return this.closeController.onClose(callback); + } +} + +//# sourceMappingURL=web.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/base-server.js b/build/node_modules/next/dist/server/base-server.js new file mode 100644 index 0000000..2239b16 --- /dev/null +++ b/build/node_modules/next/dist/server/base-server.js @@ -0,0 +1,1882 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + WrappedBuildError: null, + default: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + WrappedBuildError: function() { + return WrappedBuildError; + }, + default: function() { + return Server; + } +}); +const _configshared = require("./config-shared"); +const _utils = require("../shared/lib/utils"); +const _path = /*#__PURE__*/ _interop_require_wildcard(require("path")); +const _url = require("url"); +const _formathostname = require("./lib/format-hostname"); +const _isrscrequest = require("./lib/is-rsc-request"); +const _constants = require("../shared/lib/constants"); +const _utils1 = require("../shared/lib/router/utils"); +const _utils2 = require("./utils"); +const _isbot = require("../shared/lib/router/utils/is-bot"); +const _renderresult = /*#__PURE__*/ _interop_require_default(require("./render-result")); +const _removetrailingslash = require("../shared/lib/router/utils/remove-trailing-slash"); +const _denormalizepagepath = require("../shared/lib/page-path/denormalize-page-path"); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("../build/output/log")); +const _serverutils = require("./server-utils"); +const _iserror = /*#__PURE__*/ _interop_require_wildcard(require("../lib/is-error")); +const _requestmeta = require("./request-meta"); +const _removepathprefix = require("../shared/lib/router/utils/remove-path-prefix"); +const _apppaths = require("../shared/lib/router/utils/app-paths"); +const _gethostname = require("../shared/lib/get-hostname"); +const _parseurl = require("../shared/lib/router/utils/parse-url"); +const _getnextpathnameinfo = require("../shared/lib/router/utils/get-next-pathname-info"); +const _approuterheaders = require("../client/components/app-router-headers"); +const _localeroutenormalizer = require("./normalizers/locale-route-normalizer"); +const _defaultroutematchermanager = require("./route-matcher-managers/default-route-matcher-manager"); +const _apppageroutematcherprovider = require("./route-matcher-providers/app-page-route-matcher-provider"); +const _approuteroutematcherprovider = require("./route-matcher-providers/app-route-route-matcher-provider"); +const _pagesapiroutematcherprovider = require("./route-matcher-providers/pages-api-route-matcher-provider"); +const _pagesroutematcherprovider = require("./route-matcher-providers/pages-route-matcher-provider"); +const _servermanifestloader = require("./route-matcher-providers/helpers/manifest-loaders/server-manifest-loader"); +const _tracer = require("./lib/trace/tracer"); +const _constants1 = require("./lib/trace/constants"); +const _i18nprovider = require("./lib/i18n-provider"); +const _sendresponse = require("./send-response"); +const _utils3 = require("./web/utils"); +const _constants2 = require("../lib/constants"); +const _normalizelocalepath = require("../shared/lib/i18n/normalize-locale-path"); +const _matchnextdatapathname = require("./lib/match-next-data-pathname"); +const _getroutefromassetpath = /*#__PURE__*/ _interop_require_default(require("../shared/lib/router/utils/get-route-from-asset-path")); +const _rsc = require("./normalizers/request/rsc"); +const _stripflightheaders = require("./app-render/strip-flight-headers"); +const _checks = require("./route-modules/checks"); +const _nextdata = require("./normalizers/request/next-data"); +const _serveractionrequestmeta = require("./lib/server-action-request-meta"); +const _interceptionroutes = require("../shared/lib/router/utils/interception-routes"); +const _toroute = require("./lib/to-route"); +const _helpers = require("./base-http/helpers"); +const _patchsetheader = require("./lib/patch-set-header"); +const _ppr = require("./lib/experimental/ppr"); +const _builtinrequestcontext = require("./after/builtin-request-context"); +const _adapter = require("./web/adapter"); +const _fallback = require("../lib/fallback"); +const _segmentprefixrsc = require("./normalizers/request/segment-prefix-rsc"); +const _streamingmetadata = require("./lib/streaming-metadata"); +const _decodequerypathparameter = require("./lib/decode-query-path-parameter"); +const _nofallbackerrorexternal = require("../shared/lib/no-fallback-error.external"); +const _fixmojibake = require("./lib/fix-mojibake"); +const _setcachebustingsearchparam = require("../client/components/router-reducer/set-cache-busting-search-param"); +const _fallbackparams = require("./request/fallback-params"); +const _routekind = require("./route-kind"); +const _postponedrequestbody = require("./lib/postponed-request-body"); +const _cachebustingsearchparam = require("../shared/lib/router/utils/cache-busting-search-param"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +class WrappedBuildError extends Error { + constructor(innerError){ + super(); + this.innerError = innerError; + } +} +class Server { + getServerComponentsHmrCache() { + return this.nextConfig.experimental.serverComponentsHmrCache ? globalThis.__serverComponentsHmrCache : undefined; + } + /** + * This is used to persist cache scopes across + * prefetch -> full route requests for cache components + * it's only fully used in dev + */ constructor(options){ + var _this_nextConfig_i18n, _this_nextConfig_i18n1; + this.handleRSCRequest = (req, _res, parsedUrl)=>{ + var _this_normalizers_segmentPrefetchRSC, _this_normalizers_rsc; + if (!parsedUrl.pathname) return false; + if ((_this_normalizers_segmentPrefetchRSC = this.normalizers.segmentPrefetchRSC) == null ? void 0 : _this_normalizers_segmentPrefetchRSC.match(parsedUrl.pathname)) { + const result = this.normalizers.segmentPrefetchRSC.extract(parsedUrl.pathname); + if (!result) return false; + const { originalPathname, segmentPath } = result; + parsedUrl.pathname = originalPathname; + // Mark the request as a router prefetch request. + req.headers[_approuterheaders.RSC_HEADER] = '1'; + req.headers[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER] = '1'; + req.headers[_approuterheaders.NEXT_ROUTER_SEGMENT_PREFETCH_HEADER] = segmentPath; + (0, _requestmeta.addRequestMeta)(req, 'isRSCRequest', true); + (0, _requestmeta.addRequestMeta)(req, 'isPrefetchRSCRequest', true); + (0, _requestmeta.addRequestMeta)(req, 'segmentPrefetchRSCRequest', segmentPath); + } else if ((_this_normalizers_rsc = this.normalizers.rsc) == null ? void 0 : _this_normalizers_rsc.match(parsedUrl.pathname)) { + parsedUrl.pathname = this.normalizers.rsc.normalize(parsedUrl.pathname, true); + // Mark the request as a RSC request. + req.headers[_approuterheaders.RSC_HEADER] = '1'; + (0, _requestmeta.addRequestMeta)(req, 'isRSCRequest', true); + } else if (req.headers['x-now-route-matches']) { + // If we didn't match, return with the flight headers stripped. If in + // minimal mode we didn't match based on the path, this can't be a RSC + // request. This is because Vercel only sends this header during + // revalidation requests and we want the cache to instead depend on the + // request path for flight information. + (0, _stripflightheaders.stripFlightHeaders)(req.headers); + return false; + } else if ((0, _isrscrequest.isRSCRequestHeader)(req.headers[_approuterheaders.RSC_HEADER])) { + (0, _requestmeta.addRequestMeta)(req, 'isRSCRequest', true); + if (req.headers[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER] === '1') { + (0, _requestmeta.addRequestMeta)(req, 'isPrefetchRSCRequest', true); + const segmentPrefetchRSCRequest = req.headers[_approuterheaders.NEXT_ROUTER_SEGMENT_PREFETCH_HEADER]; + if (typeof segmentPrefetchRSCRequest === 'string') { + (0, _requestmeta.addRequestMeta)(req, 'segmentPrefetchRSCRequest', segmentPrefetchRSCRequest); + } + } + } else { + // Otherwise just return without doing anything. + return false; + } + if (req.url) { + const parsed = (0, _parseurl.parseUrl)(req.url); + parsed.pathname = parsedUrl.pathname; + req.url = (0, _url.format)(parsed); + } + return false; + }; + this.handleNextDataRequest = async (req, res, parsedUrl)=>{ + const middleware = await this.getMiddleware(); + const params = (0, _matchnextdatapathname.matchNextDataPathname)(parsedUrl.pathname); + // ignore for non-next data URLs + if (!params || !params.path) { + return false; + } + if (params.path[0] !== this.buildId) { + // Ignore if its a middleware request when we aren't on edge. + if ((0, _requestmeta.getRequestMeta)(req, 'middlewareInvoke')) { + return false; + } + // Make sure to 404 if the buildId isn't correct + await this.render404(req, res, parsedUrl); + return true; + } + // remove buildId from URL + params.path.shift(); + const lastParam = params.path[params.path.length - 1]; + // show 404 if it doesn't end with .json + if (typeof lastParam !== 'string' || !lastParam.endsWith('.json')) { + await this.render404(req, res, parsedUrl); + return true; + } + // re-create page's pathname + let pathname = `/${params.path.join('/')}`; + pathname = (0, _getroutefromassetpath.default)(pathname, '.json'); + // ensure trailing slash is normalized per config + if (middleware) { + if (this.nextConfig.trailingSlash && !pathname.endsWith('/')) { + pathname += '/'; + } + if (!this.nextConfig.trailingSlash && pathname.length > 1 && pathname.endsWith('/')) { + pathname = pathname.substring(0, pathname.length - 1); + } + } + if (this.i18nProvider) { + var _req_headers_host; + // Remove the port from the hostname if present. + const hostname = req == null ? void 0 : (_req_headers_host = req.headers.host) == null ? void 0 : _req_headers_host.split(':', 1)[0].toLowerCase(); + const domainLocale = this.i18nProvider.detectDomainLocale(hostname); + const defaultLocale = (domainLocale == null ? void 0 : domainLocale.defaultLocale) ?? this.i18nProvider.config.defaultLocale; + const localePathResult = this.i18nProvider.analyze(pathname); + // If the locale is detected from the path, we need to remove it + // from the pathname. + if (localePathResult.detectedLocale) { + pathname = localePathResult.pathname; + } + // Update the query with the detected locale and default locale. + (0, _requestmeta.addRequestMeta)(req, 'locale', localePathResult.detectedLocale); + (0, _requestmeta.addRequestMeta)(req, 'defaultLocale', defaultLocale); + // If the locale is not detected from the path, we need to mark that + // it was not inferred from default. + if (!localePathResult.detectedLocale) { + (0, _requestmeta.removeRequestMeta)(req, 'localeInferredFromDefault'); + } + // If no locale was detected and we don't have middleware, we need + // to render a 404 page. + if (!localePathResult.detectedLocale && !middleware) { + (0, _requestmeta.addRequestMeta)(req, 'locale', defaultLocale); + await this.render404(req, res, parsedUrl); + return true; + } + } + parsedUrl.pathname = pathname; + (0, _requestmeta.addRequestMeta)(req, 'isNextDataReq', true); + return false; + }; + this.handleNextImageRequest = ()=>false; + this.handleCatchallRenderRequest = ()=>false; + this.handleCatchallMiddlewareRequest = ()=>false; + /** + * Normalizes a pathname without attaching any metadata from any matched + * normalizer. + * + * @param pathname the pathname to normalize + * @returns the normalized pathname + */ this.normalize = (pathname)=>{ + const normalizers = []; + if (this.normalizers.data) { + normalizers.push(this.normalizers.data); + } + // We have to put the segment prefetch normalizer before the RSC normalizer + // because the RSC normalizer will match the prefetch RSC routes too. + if (this.normalizers.segmentPrefetchRSC) { + normalizers.push(this.normalizers.segmentPrefetchRSC); + } + if (this.normalizers.rsc) { + normalizers.push(this.normalizers.rsc); + } + for (const normalizer of normalizers){ + if (!normalizer.match(pathname)) continue; + return normalizer.normalize(pathname, true); + } + return pathname; + }; + this.normalizeAndAttachMetadata = async (req, res, url)=>{ + let finished = await this.handleNextImageRequest(req, res, url); + if (finished) return true; + if (this.enabledDirectories.pages) { + finished = await this.handleNextDataRequest(req, res, url); + if (finished) return true; + } + return false; + }; + this.prepared = false; + this.preparedPromise = null; + this.customErrorNo404Warn = (0, _utils.execOnce)(()=>{ + _log.warn(`You have added a custom /_error page without a custom /404 page. This prevents the 404 page from being auto statically optimized.\nSee here for info: https://nextjs.org/docs/messages/custom-error-no-custom-404`); + }); + const { dir = '.', quiet = false, conf, dev = false, minimalMode = false, hostname, port, experimentalTestProxy } = options; + this.dev = dev; + this.experimentalTestProxy = experimentalTestProxy; + this.serverOptions = options; + this.dir = _path.resolve(/* turbopackIgnore: true */ dir); + this.quiet = quiet; + this.loadEnvConfig({ + dev, + forceReload: false + }); + // TODO: should conf be normalized to prevent missing + // values from causing issues as this can be user provided + this.nextConfig = conf; + if (this.nextConfig.experimental.runtimeServerDeploymentId) { + if (!process.env.NEXT_DEPLOYMENT_ID) { + throw Object.defineProperty(new Error('process.env.NEXT_DEPLOYMENT_ID is missing but runtimeServerDeploymentId is enabled'), "__NEXT_ERROR_CODE", { + value: "E970", + enumerable: false, + configurable: true + }); + } + this.deploymentId = process.env.NEXT_DEPLOYMENT_ID; + } else { + let id = this.nextConfig.experimental.useSkewCookie ? '' : this.nextConfig.deploymentId || ''; + this.deploymentId = id; + process.env.NEXT_DEPLOYMENT_ID = id; + } + ; + globalThis.NEXT_CLIENT_ASSET_SUFFIX = this.nextConfig.experimental.immutableAssetToken || this.deploymentId ? `?dpl=${this.nextConfig.experimental.immutableAssetToken || this.deploymentId}` : ''; + this.hostname = hostname; + if (this.hostname) { + // we format the hostname so that it can be fetched + this.fetchHostname = (0, _formathostname.formatHostname)(this.hostname); + } + this.port = port; + this.distDir = _path.join(/* turbopackIgnore: true */ this.dir, this.nextConfig.distDir); + this.publicDir = this.getPublicDir(); + this.hasStaticDir = !minimalMode && this.getHasStaticDir(); + this.i18nProvider = ((_this_nextConfig_i18n = this.nextConfig.i18n) == null ? void 0 : _this_nextConfig_i18n.locales) ? new _i18nprovider.I18NProvider(this.nextConfig.i18n) : undefined; + // Configure the locale normalizer, it's used for routes inside `pages/`. + this.localeNormalizer = this.i18nProvider ? new _localeroutenormalizer.LocaleRouteNormalizer(this.i18nProvider) : undefined; + const { assetPrefix, generateEtags } = this.nextConfig; + this.buildId = this.getBuildId(); + // this is a hack to avoid Webpack knowing this is equal to this.minimalMode + // because we replace this.minimalMode to true in production bundles. + const minimalModeKey = 'minimalMode'; + this[minimalModeKey] = minimalMode || !!process.env.NEXT_PRIVATE_MINIMAL_MODE; + this.enabledDirectories = this.getEnabledDirectories(dev); + this.isAppPPREnabled = this.enabledDirectories.app && (0, _ppr.checkIsAppPPREnabled)(this.nextConfig.experimental.ppr); + this.normalizers = { + // We should normalize the pathname from the RSC prefix only in minimal + // mode as otherwise that route is not exposed external to the server as + // we instead only rely on the headers. + rsc: this.enabledDirectories.app && this.minimalMode ? new _rsc.RSCPathnameNormalizer() : undefined, + segmentPrefetchRSC: this.minimalMode ? new _segmentprefixrsc.SegmentPrefixRSCPathnameNormalizer() : undefined, + data: this.enabledDirectories.pages ? new _nextdata.NextDataPathnameNormalizer(this.buildId) : undefined + }; + this.nextFontManifest = this.getNextFontManifest(); + this.renderOpts = { + dir: this.dir, + supportsDynamicResponse: true, + trailingSlash: this.nextConfig.trailingSlash, + poweredByHeader: this.nextConfig.poweredByHeader, + generateEtags, + previewProps: this.getPrerenderManifest().preview, + basePath: this.nextConfig.basePath, + images: this.nextConfig.images, + optimizeCss: this.nextConfig.experimental.optimizeCss, + nextConfigOutput: this.nextConfig.output, + nextScriptWorkers: this.nextConfig.experimental.nextScriptWorkers, + disableOptimizedLoading: this.nextConfig.experimental.disableOptimizedLoading, + domainLocales: (_this_nextConfig_i18n1 = this.nextConfig.i18n) == null ? void 0 : _this_nextConfig_i18n1.domains, + distDir: this.distDir, + serverComponents: this.enabledDirectories.app, + cacheLifeProfiles: this.nextConfig.cacheLife, + enableTainting: this.nextConfig.experimental.taint, + crossOrigin: this.nextConfig.crossOrigin ? this.nextConfig.crossOrigin : undefined, + largePageDataBytes: this.nextConfig.experimental.largePageDataBytes, + isExperimentalCompile: this.nextConfig.experimental.isExperimentalCompile, + // `htmlLimitedBots` is passed to server as serialized config in string format + htmlLimitedBots: this.nextConfig.htmlLimitedBots, + cacheComponents: this.nextConfig.cacheComponents ?? false, + experimental: { + expireTime: this.nextConfig.expireTime, + staleTimes: this.nextConfig.experimental.staleTimes, + clientTraceMetadata: this.nextConfig.experimental.clientTraceMetadata, + clientParamParsingOrigins: this.nextConfig.experimental.clientParamParsingOrigins, + dynamicOnHover: this.nextConfig.experimental.dynamicOnHover ?? false, + optimisticRouting: this.nextConfig.experimental.optimisticRouting ?? false, + inlineCss: this.nextConfig.experimental.inlineCss ?? false, + prefetchInlining: this.nextConfig.experimental.prefetchInlining ?? false, + authInterrupts: !!this.nextConfig.experimental.authInterrupts, + cachedNavigations: this.nextConfig.experimental.cachedNavigations ?? false, + maxPostponedStateSizeBytes: (0, _configshared.parseMaxPostponedStateSize)(this.nextConfig.experimental.maxPostponedStateSize) + }, + onInstrumentationRequestError: this.instrumentationOnRequestError.bind(this), + prefetchHints: {}, + reactMaxHeadersLength: this.nextConfig.reactMaxHeadersLength, + logServerFunctions: typeof this.nextConfig.logging === 'object' && Boolean(this.nextConfig.logging.serverFunctions) + }; + this.pagesManifest = this.getPagesManifest(); + this.appPathsManifest = this.getAppPathsManifest(); + this.appPathRoutes = this.getAppPathRoutes(); + this.interceptionRoutePatterns = this.getinterceptionRoutePatterns(); + // Configure the routes. + this.matchers = this.getRouteMatchers(); + // Start route compilation. We don't wait for the routes to finish loading + // because we use the `waitTillReady` promise below in `handleRequest` to + // wait. Also we can't `await` in the constructor. + void this.matchers.reload(); + this.setAssetPrefix(assetPrefix); + } + reloadMatchers() { + return this.matchers.reload(); + } + getRouteMatchers() { + // Create a new manifest loader that get's the manifests from the server. + const manifestLoader = new _servermanifestloader.ServerManifestLoader((name)=>{ + switch(name){ + case _constants.PAGES_MANIFEST: + return this.getPagesManifest() ?? null; + case _constants.APP_PATHS_MANIFEST: + return this.getAppPathsManifest() ?? null; + default: + return null; + } + }); + // Configure the matchers and handlers. + const matchers = new _defaultroutematchermanager.DefaultRouteMatcherManager(); + // Match pages under `pages/`. + matchers.push(new _pagesroutematcherprovider.PagesRouteMatcherProvider(this.distDir, manifestLoader, this.i18nProvider)); + // Match api routes under `pages/api/`. + matchers.push(new _pagesapiroutematcherprovider.PagesAPIRouteMatcherProvider(this.distDir, manifestLoader, this.i18nProvider)); + // If the app directory is enabled, then add the app matchers and handlers. + if (this.enabledDirectories.app) { + // Match app pages under `app/`. + matchers.push(new _apppageroutematcherprovider.AppPageRouteMatcherProvider(this.distDir, manifestLoader)); + matchers.push(new _approuteroutematcherprovider.AppRouteRouteMatcherProvider(this.distDir, manifestLoader)); + } + return matchers; + } + async instrumentationOnRequestError(...args) { + const [err, req, ctx] = args; + if (this.instrumentation) { + try { + await (this.instrumentation.onRequestError == null ? void 0 : this.instrumentation.onRequestError.call(this.instrumentation, err, { + path: req.url || '', + method: req.method || 'GET', + // Normalize middleware headers and other server request headers + headers: req instanceof _adapter.NextRequestHint ? Object.fromEntries(req.headers.entries()) : req.headers + }, ctx)); + } catch (handlerErr) { + // Log the soft error and continue, since errors can thrown from react stream handler + console.error('Error in instrumentation.onRequestError:', handlerErr); + } + } + } + logError(err) { + if (this.quiet) return; + _log.error(err); + } + async handleRequest(req, res, parsedUrl) { + await this.prepare(); + const method = req.method.toUpperCase(); + const tracer = (0, _tracer.getTracer)(); + return tracer.withPropagatedContext(req.headers, ()=>{ + // Capture the parent span before creating the handleRequest span. + // When deployed with an adapter, the platform's runtime may create its + // own OTEL HTTP server span before Next.js runs. We propagate http.route + // to this parent span so APM tools (e.g. Datadog) can derive the + // resource name correctly. + const parentSpan = tracer.getActiveScopeSpan(); + return tracer.trace(_constants1.BaseServerSpan.handleRequest, { + spanName: `${method}`, + kind: _tracer.SpanKind.SERVER, + attributes: { + 'http.method': method, + 'http.target': req.url + } + }, async (span)=>this.handleRequestImpl(req, res, parsedUrl).finally(()=>{ + if (!span) return; + const isRSCRequest = (0, _requestmeta.getRequestMeta)(req, 'isRSCRequest') ?? false; + span.setAttributes({ + 'http.status_code': res.statusCode, + 'next.rsc': isRSCRequest + }); + if (res.statusCode && res.statusCode >= 500) { + // For 5xx status codes: SHOULD be set to 'Error' span status. + // x-ref: https://opentelemetry.io/docs/specs/semconv/http/http-spans/#status + span.setStatus({ + code: _tracer.SpanStatusCode.ERROR + }); + // For span status 'Error', SHOULD set 'error.type' attribute. + span.setAttribute('error.type', res.statusCode.toString()); + } + const rootSpanAttributes = tracer.getRootSpanAttributes(); + // We were unable to get attributes, probably OTEL is not enabled + if (!rootSpanAttributes) return; + if (rootSpanAttributes.get('next.span_type') !== _constants1.BaseServerSpan.handleRequest) { + console.warn(`Unexpected root span type '${rootSpanAttributes.get('next.span_type')}'. Please report this Next.js issue https://github.com/vercel/next.js`); + return; + } + const route = rootSpanAttributes.get('next.route'); + if (route) { + const name = isRSCRequest ? `RSC ${method} ${route}` : `${method} ${route}`; + span.setAttributes({ + 'next.route': route, + 'http.route': route, + 'next.span_name': name + }); + span.updateName(name); + // Propagate http.route to the parent span if one exists and + // is different from the handleRequest span. This ensures APM + // tools that read attributes from the outermost span (e.g. + // a platform-created HTTP span) can derive the resource name. + if (parentSpan && parentSpan !== span) { + parentSpan.setAttribute('http.route', route); + } + } else { + span.updateName(isRSCRequest ? `RSC ${method}` : `${method}`); + } + })); + }); + } + async handleRequestImpl(req, res, parsedUrl) { + try { + var _originalRequest_socket, _originalRequest_socket1, _this_i18nProvider, _this_nextConfig_i18n; + // Wait for the matchers to be ready. + await this.matchers.waitTillReady(); + // ensure cookies set in middleware are merged and + // not overridden by API routes/getServerSideProps + (0, _patchsetheader.patchSetHeaderWithCookieSupport)(req, (0, _helpers.isNodeNextResponse)(res) ? res.originalResponse : res); + const urlParts = (req.url || '').split('?', 1); + const urlNoQuery = urlParts[0]; + // this normalizes repeated slashes in the path e.g. hello//world -> + // hello/world or backslashes to forward slashes, this does not + // handle trailing slash as that is handled the same as a next.config.js + // redirect + if (urlNoQuery == null ? void 0 : urlNoQuery.match(/(\\|\/\/)/)) { + const cleanUrl = (0, _utils.normalizeRepeatedSlashes)(req.url); + res.redirect(cleanUrl, 308).body(cleanUrl).send(); + return; + } + // Parse url if parsedUrl not provided + if (!parsedUrl || typeof parsedUrl !== 'object') { + if (!req.url) { + throw Object.defineProperty(new Error('Invariant: url can not be undefined'), "__NEXT_ERROR_CODE", { + value: "E123", + enumerable: false, + configurable: true + }); + } + parsedUrl = (0, _parseurl.parseUrl)(req.url); + } + if (!parsedUrl.pathname) { + throw Object.defineProperty(new Error("Invariant: pathname can't be empty"), "__NEXT_ERROR_CODE", { + value: "E412", + enumerable: false, + configurable: true + }); + } + // Parse the querystring ourselves if the user doesn't handle querystring parsing + if (typeof parsedUrl.query === 'string') { + parsedUrl.query = Object.fromEntries(new URLSearchParams(parsedUrl.query)); + } + // Update the `x-forwarded-*` headers. + const { originalRequest = null } = (0, _helpers.isNodeNextRequest)(req) ? req : {}; + const xForwardedProto = originalRequest == null ? void 0 : originalRequest.headers['x-forwarded-proto']; + const isHttps = xForwardedProto ? xForwardedProto === 'https' : !!(originalRequest == null ? void 0 : (_originalRequest_socket = originalRequest.socket) == null ? void 0 : _originalRequest_socket.encrypted); + req.headers['x-forwarded-host'] ??= req.headers['host'] ?? this.hostname; + req.headers['x-forwarded-port'] ??= this.port ? this.port.toString() : isHttps ? '443' : '80'; + req.headers['x-forwarded-proto'] ??= isHttps ? 'https' : 'http'; + req.headers['x-forwarded-for'] ??= originalRequest == null ? void 0 : (_originalRequest_socket1 = originalRequest.socket) == null ? void 0 : _originalRequest_socket1.remoteAddress; + // This should be done before any normalization of the pathname happens as + // it captures the initial URL. + this.attachRequestMeta(req, parsedUrl); + let finished = await this.handleRSCRequest(req, res, parsedUrl); + if (finished) return; + const domainLocale = (_this_i18nProvider = this.i18nProvider) == null ? void 0 : _this_i18nProvider.detectDomainLocale((0, _gethostname.getHostname)(parsedUrl, req.headers)); + const defaultLocale = (domainLocale == null ? void 0 : domainLocale.defaultLocale) || ((_this_nextConfig_i18n = this.nextConfig.i18n) == null ? void 0 : _this_nextConfig_i18n.defaultLocale); + (0, _requestmeta.addRequestMeta)(req, 'defaultLocale', defaultLocale); + const url = (0, _parseurl.parseUrl)(req.url.replace(/^\/+/, '/')); + const pathnameInfo = (0, _getnextpathnameinfo.getNextPathnameInfo)(url.pathname, { + nextConfig: this.nextConfig, + i18nProvider: this.i18nProvider + }); + url.pathname = pathnameInfo.pathname; + if (pathnameInfo.basePath) { + req.url = (0, _removepathprefix.removePathPrefix)(req.url, this.nextConfig.basePath); + } + const useMatchedPathHeader = this.minimalMode && typeof req.headers[_constants2.MATCHED_PATH_HEADER] === 'string'; + // TODO: merge handling with invokePath + if (useMatchedPathHeader) { + try { + var _this_normalizers_data, _this_i18nProvider1, _this_getRoutesManifest; + if (this.enabledDirectories.app) { + // ensure /index path is normalized for prerender + // in minimal mode + if (req.url.match(/^\/index($|\?)/)) { + req.url = req.url.replace(/^\/index/, '/'); + } + parsedUrl.pathname = parsedUrl.pathname === '/index' ? '/' : parsedUrl.pathname; + } + // x-matched-path is the source of truth, it tells what page + // should be rendered because we don't process rewrites in minimalMode + let { pathname: matchedPath } = new URL((0, _fixmojibake.fixMojibake)(req.headers[_constants2.MATCHED_PATH_HEADER]), 'http://localhost'); + let { pathname: urlPathname } = new URL(req.url, 'http://localhost'); + // For ISR the URL is normalized to the prerenderPath so if + // it's a data request the URL path will be the data URL, + // basePath is already stripped by this point + if ((_this_normalizers_data = this.normalizers.data) == null ? void 0 : _this_normalizers_data.match(urlPathname)) { + (0, _requestmeta.addRequestMeta)(req, 'isNextDataReq', true); + } + // It's important to execute the following block even it the request + // matches a pages data route from above. + if (this.isAppPPREnabled && this.minimalMode && req.headers[_constants2.NEXT_RESUME_HEADER] === '1' && req.method === 'POST') { + const { maxPostponedStateSize, maxPostponedStateSizeBytes } = (0, _postponedrequestbody.getMaxPostponedStateSize)(this.nextConfig.experimental.maxPostponedStateSize); + // Decode the postponed state from the request body, it will come as + // an array of buffers, so collect them and then concat them to form + // the string. + const body = await (0, _postponedrequestbody.readBodyWithSizeLimit)(req.body, maxPostponedStateSizeBytes); + if (body === null) { + res.statusCode = 413; + res.body((0, _postponedrequestbody.getPostponedStateExceededErrorMessage)(maxPostponedStateSize)).send(); + return; + } + const postponed = body.toString('utf8'); + (0, _requestmeta.addRequestMeta)(req, 'postponed', postponed); + } + // If the request is a next data request and it has a postponed state, + // we should error, as it represents an unprocessable request. + if ((0, _requestmeta.getRequestMeta)(req, 'isNextDataReq') && (0, _requestmeta.getRequestMeta)(req, 'postponed')) { + // The server understood that this is a PPR resume request, as the + // headers were included to correctly indicate a resume request, but + // because the request URL indicates that this should render a next + // data route (a pages router route), this represents an + // unprocessable request. + res.statusCode = 422; + res.send(); + return; + } + matchedPath = this.normalize(matchedPath); + const normalizedUrlPath = this.stripNextDataPath(urlPathname); + matchedPath = (0, _denormalizepagepath.denormalizePagePath)(matchedPath); + // Perform locale detection and normalization. + const localeAnalysisResult = (_this_i18nProvider1 = this.i18nProvider) == null ? void 0 : _this_i18nProvider1.analyze(matchedPath, { + defaultLocale + }); + // The locale result will be defined even if the locale was not + // detected for the request because it will be inferred from the + // default locale. + if (localeAnalysisResult) { + (0, _requestmeta.addRequestMeta)(req, 'locale', localeAnalysisResult.detectedLocale); + // If the detected locale was inferred from the default locale, we + // need to modify the metadata on the request to indicate that. + if (localeAnalysisResult.inferredFromDefault) { + (0, _requestmeta.addRequestMeta)(req, 'localeInferredFromDefault', true); + } else { + (0, _requestmeta.removeRequestMeta)(req, 'localeInferredFromDefault'); + } + } + let srcPathname = matchedPath; + let pageIsDynamic = (0, _utils1.isDynamicRoute)(srcPathname); + let paramsResult = { + params: false, + hasValidParams: false + }; + const match = await this.matchers.match(srcPathname, { + i18n: localeAnalysisResult + }); + if (!pageIsDynamic && match) { + // Update the source pathname to the matched page's pathname. + srcPathname = match.definition.pathname; + // The page is dynamic if the params are defined. We know at this + // stage that the matched path is not a static page if the params + // were parsed from the matched path header. + if (typeof match.params !== 'undefined') { + pageIsDynamic = true; + paramsResult.params = match.params; + paramsResult.hasValidParams = true; + } + } + // The rest of this function can't handle i18n properly, so ensure we + // restore the pathname with the locale information stripped from it + // now that we're done matching if we're using i18n. + if (localeAnalysisResult) { + matchedPath = localeAnalysisResult.pathname; + } + const utils = (0, _serverutils.getServerUtils)({ + pageIsDynamic, + page: srcPathname, + i18n: this.nextConfig.i18n, + basePath: this.nextConfig.basePath, + rewrites: ((_this_getRoutesManifest = this.getRoutesManifest()) == null ? void 0 : _this_getRoutesManifest.rewrites) || { + beforeFiles: [], + afterFiles: [], + fallback: [] + }, + caseSensitive: !!this.nextConfig.experimental.caseSensitiveRoutes + }); + // Ensure parsedUrl.pathname includes locale before processing + // rewrites or they won't match correctly. + if (defaultLocale && !pathnameInfo.locale) { + parsedUrl.pathname = `/${defaultLocale}${parsedUrl.pathname}`; + } + // Store a copy of `parsedUrl.query` before calling handleRewrites. + // Since `handleRewrites` might add new queries to `parsedUrl.query`. + const originQueryParams = { + ...parsedUrl.query + }; + const pathnameBeforeRewrite = parsedUrl.pathname; + const { rewriteParams, rewrittenParsedUrl } = utils.handleRewrites(req, parsedUrl); + const rewriteParamKeys = Object.keys(rewriteParams); + // Create a copy of the query params to avoid mutating the original + // object. This prevents any overlapping query params that have the + // same normalized key from causing issues. + const rewrittenQueryParams = { + ...rewrittenParsedUrl.query + }; + const didRewrite = pathnameBeforeRewrite !== rewrittenParsedUrl.pathname; + if (didRewrite && rewrittenParsedUrl.pathname) { + (0, _requestmeta.addRequestMeta)(req, 'rewrittenPathname', rewrittenParsedUrl.pathname); + } + const routeParamKeys = new Set(); + for (const [key, value] of Object.entries(parsedUrl.query)){ + const normalizedKey = (0, _utils3.normalizeNextQueryParam)(key); + if (!normalizedKey) continue; + // Remove the prefixed key from the query params because we want + // to consume it for the dynamic route matcher. + delete parsedUrl.query[key]; + routeParamKeys.add(normalizedKey); + if (typeof value === 'undefined') continue; + rewrittenQueryParams[normalizedKey] = Array.isArray(value) ? value.map((v)=>(0, _decodequerypathparameter.decodeQueryPathParameter)(v)) : (0, _decodequerypathparameter.decodeQueryPathParameter)(value); + } + // interpolate dynamic params and normalize URL if needed + if (pageIsDynamic) { + let params = {}; + // If we don't already have valid params, try to parse them from + // the query params. + if (!paramsResult.hasValidParams) { + paramsResult = utils.normalizeDynamicRouteParams(rewrittenQueryParams, false); + } + // for prerendered ISR paths we attempt parsing the route + // params from the URL directly as route-matches may not + // contain the correct values due to the filesystem path + // matching before the dynamic route has been matched + if (!paramsResult.hasValidParams && !(0, _utils1.isDynamicRoute)(normalizedUrlPath)) { + let matcherParams = utils.dynamicRouteMatcher == null ? void 0 : utils.dynamicRouteMatcher.call(utils, normalizedUrlPath); + if (matcherParams) { + utils.normalizeDynamicRouteParams(matcherParams, false); + Object.assign(paramsResult.params, matcherParams); + paramsResult.hasValidParams = true; + } + } + // if an action request is bypassing a prerender and we + // don't have the params in the URL since it was prerendered + // and matched during handle: 'filesystem' rather than dynamic route + // resolving we need to parse the params from the matched-path. + // Note: this is similar to above case but from match-path instead + // of from the request URL since a rewrite could cause that to not + // match the src pathname + if (// we can have a collision with /index and a top-level /[slug] + matchedPath !== '/index' && !paramsResult.hasValidParams && !(0, _utils1.isDynamicRoute)(matchedPath)) { + let matcherParams = utils.dynamicRouteMatcher == null ? void 0 : utils.dynamicRouteMatcher.call(utils, matchedPath); + if (matcherParams) { + const curParamsResult = utils.normalizeDynamicRouteParams(matcherParams, false); + if (curParamsResult.hasValidParams) { + Object.assign(params, matcherParams); + paramsResult = curParamsResult; + } + } + } + if (paramsResult.hasValidParams) { + params = paramsResult.params; + } + const routeMatchesHeader = req.headers['x-now-route-matches']; + if (typeof routeMatchesHeader === 'string' && routeMatchesHeader && (0, _utils1.isDynamicRoute)(matchedPath) && !paramsResult.hasValidParams) { + const routeMatches = utils.getParamsFromRouteMatches(routeMatchesHeader); + if (routeMatches) { + paramsResult = utils.normalizeDynamicRouteParams(routeMatches, true); + if (paramsResult.hasValidParams) { + params = paramsResult.params; + } + } + } + // Try to parse the params from the query if we couldn't parse them + // from the route matches but ignore missing optional params. + if (!paramsResult.hasValidParams) { + paramsResult = utils.normalizeDynamicRouteParams(rewrittenQueryParams, true); + if (paramsResult.hasValidParams) { + params = paramsResult.params; + } + } + // If the pathname being requested is the same as the source + // pathname, and we don't have valid params, we want to use the + // default route matches. + if (utils.defaultRouteMatches && normalizedUrlPath === srcPathname && !paramsResult.hasValidParams) { + params = utils.defaultRouteMatches; + // If the route matches header is an empty string, we want to + // render a fallback shell. This is because we know this came from + // a prerender (it has the header) but it's values were filtered + // out (because the allowQuery was empty). If it was undefined + // then we know that the request is hitting the lambda directly. + if (routeMatchesHeader === '') { + (0, _requestmeta.addRequestMeta)(req, 'renderFallbackShell', true); + } + } + if (params) { + matchedPath = utils.interpolateDynamicPath(srcPathname, params); + req.url = utils.interpolateDynamicPath(req.url, params); + // If the request is for a segment prefetch, we need to update the + // segment prefetch request path to include the interpolated + // params. + let segmentPrefetchRSCRequest = (0, _requestmeta.getRequestMeta)(req, 'segmentPrefetchRSCRequest'); + if (segmentPrefetchRSCRequest && (0, _utils1.isDynamicRoute)(segmentPrefetchRSCRequest, false)) { + segmentPrefetchRSCRequest = utils.interpolateDynamicPath(segmentPrefetchRSCRequest, params); + req.headers[_approuterheaders.NEXT_ROUTER_SEGMENT_PREFETCH_HEADER] = segmentPrefetchRSCRequest; + (0, _requestmeta.addRequestMeta)(req, 'segmentPrefetchRSCRequest', segmentPrefetchRSCRequest); + } + } + } + if (pageIsDynamic || didRewrite) { + var _utils_defaultRouteRegex; + utils.normalizeCdnUrl(req, [ + ...rewriteParamKeys, + ...Object.keys(((_utils_defaultRouteRegex = utils.defaultRouteRegex) == null ? void 0 : _utils_defaultRouteRegex.groups) || {}) + ]); + } + // Remove the route `params` keys from `parsedUrl.query` if they are + // not in the original query params. + // If it's used in both route `params` and query `searchParams`, it should be kept. + for (const key of routeParamKeys){ + if (!(key in originQueryParams)) { + delete parsedUrl.query[key]; + } + } + parsedUrl.pathname = matchedPath; + url.pathname = parsedUrl.pathname; + // For Pages Router routes, use the normalized queryParams from + // handleRewrites to ensure catch-all routes get proper array values. + // App Router routes should not include rewrite query params as they + // affect RSC payload. + if ((match == null ? void 0 : match.definition.kind) === _routekind.RouteKind.PAGES || (match == null ? void 0 : match.definition.kind) === _routekind.RouteKind.PAGES_API) { + parsedUrl.query = rewrittenQueryParams; + } + finished = await this.normalizeAndAttachMetadata(req, res, parsedUrl); + if (finished) return; + } catch (err) { + if (err instanceof _utils.DecodeError || err instanceof _utils.NormalizeError) { + res.statusCode = 400; + return this.renderError(null, req, res, '/_error', {}); + } + throw err; + } + } + (0, _requestmeta.addRequestMeta)(req, 'isLocaleDomain', Boolean(domainLocale)); + if (pathnameInfo.locale) { + req.url = (0, _url.format)(url); + (0, _requestmeta.addRequestMeta)(req, 'didStripLocale', true); + } + // If we aren't in minimal mode or there is no locale in the query + // string, add the locale to the query string. + if (!this.minimalMode || !(0, _requestmeta.getRequestMeta)(req, 'locale')) { + // If the locale is in the pathname, add it to the query string. + if (pathnameInfo.locale) { + (0, _requestmeta.addRequestMeta)(req, 'locale', pathnameInfo.locale); + } else if (defaultLocale) { + (0, _requestmeta.addRequestMeta)(req, 'locale', defaultLocale); + (0, _requestmeta.addRequestMeta)(req, 'localeInferredFromDefault', true); + } + } + // set incremental cache to request meta so it can + // be passed down for edge functions and the fetch disk + // cache can be leveraged locally + if (!this.serverOptions.webServerConfig && !(0, _requestmeta.getRequestMeta)(req, 'incrementalCache')) { + const incrementalCache = await this.getIncrementalCache({ + requestHeaders: Object.assign({}, req.headers) + }); + incrementalCache.resetRequestCache(); + (0, _requestmeta.addRequestMeta)(req, 'incrementalCache', incrementalCache); + globalThis.__incrementalCache = incrementalCache; + } + // set server components HMR cache to request meta so it can be passed + // down for edge functions + if (!(0, _requestmeta.getRequestMeta)(req, 'serverComponentsHmrCache')) { + (0, _requestmeta.addRequestMeta)(req, 'serverComponentsHmrCache', this.getServerComponentsHmrCache()); + } + // when invokePath is specified we can short short circuit resolving + // we only honor this header if we are inside of a render worker to + // prevent external users coercing the routing path + const invokePath = (0, _requestmeta.getRequestMeta)(req, 'invokePath'); + const useInvokePath = !useMatchedPathHeader && invokePath; + if (useInvokePath) { + var _this_nextConfig_i18n1; + const invokeStatus = (0, _requestmeta.getRequestMeta)(req, 'invokeStatus'); + if (invokeStatus) { + const invokeQuery = (0, _requestmeta.getRequestMeta)(req, 'invokeQuery'); + if (invokeQuery) { + Object.assign(parsedUrl.query, invokeQuery); + } + res.statusCode = invokeStatus; + let err = (0, _requestmeta.getRequestMeta)(req, 'invokeError') || null; + return this.renderError(err, req, res, '/_error', parsedUrl.query); + } + const parsedMatchedPath = new URL(invokePath || '/', 'http://n'); + const invokePathnameInfo = (0, _getnextpathnameinfo.getNextPathnameInfo)(parsedMatchedPath.pathname, { + nextConfig: this.nextConfig, + parseData: false + }); + if (invokePathnameInfo.locale) { + (0, _requestmeta.addRequestMeta)(req, 'locale', invokePathnameInfo.locale); + } + if (parsedUrl.pathname !== parsedMatchedPath.pathname) { + parsedUrl.pathname = parsedMatchedPath.pathname; + (0, _requestmeta.addRequestMeta)(req, 'rewrittenPathname', invokePathnameInfo.pathname); + } + const normalizeResult = (0, _normalizelocalepath.normalizeLocalePath)((0, _removepathprefix.removePathPrefix)(parsedUrl.pathname, this.nextConfig.basePath || ''), (_this_nextConfig_i18n1 = this.nextConfig.i18n) == null ? void 0 : _this_nextConfig_i18n1.locales); + if (normalizeResult.detectedLocale) { + (0, _requestmeta.addRequestMeta)(req, 'locale', normalizeResult.detectedLocale); + } + parsedUrl.pathname = normalizeResult.pathname; + for (const key of Object.keys(parsedUrl.query)){ + delete parsedUrl.query[key]; + } + const invokeQuery = (0, _requestmeta.getRequestMeta)(req, 'invokeQuery'); + if (invokeQuery) { + Object.assign(parsedUrl.query, invokeQuery); + } + finished = await this.normalizeAndAttachMetadata(req, res, parsedUrl); + if (finished) return; + await this.handleCatchallRenderRequest(req, res, parsedUrl); + return; + } + if ((0, _requestmeta.getRequestMeta)(req, 'middlewareInvoke')) { + finished = await this.normalizeAndAttachMetadata(req, res, parsedUrl); + if (finished) return; + finished = await this.handleCatchallMiddlewareRequest(req, res, parsedUrl); + if (finished) return; + const err = new Error(); + err.result = { + response: new Response(null, { + headers: { + 'x-middleware-next': '1' + } + }) + }; + err.bubble = true; + throw err; + } + // This wasn't a request via the matched path or the invoke path, so + // prepare for a legacy run by removing the base path. + // ensure we strip the basePath when not using an invoke header + if (!useMatchedPathHeader && pathnameInfo.basePath) { + parsedUrl.pathname = (0, _removepathprefix.removePathPrefix)(parsedUrl.pathname, pathnameInfo.basePath); + } + res.statusCode = 200; + return await this.run(req, res, parsedUrl); + } catch (err) { + if (err instanceof _nofallbackerrorexternal.NoFallbackError) { + throw err; + } + if (err && typeof err === 'object' && err.code === 'ERR_INVALID_URL' || err instanceof _utils.DecodeError || err instanceof _utils.NormalizeError) { + res.statusCode = 400; + return this.renderError(null, req, res, '/_error', {}); + } + if (this.minimalMode || this.dev || (0, _tracer.isBubbledError)(err) && err.bubble) { + throw err; + } + this.logError((0, _iserror.getProperError)(err)); + res.statusCode = 500; + res.body('Internal Server Error').send(); + } + } + /** + * @internal - this method is internal to Next.js and should not be used directly by end-users + */ getRequestHandlerWithMetadata(meta) { + const handler = this.getRequestHandler(); + return (req, res, parsedUrl)=>{ + (0, _requestmeta.setRequestMeta)(req, meta); + return handler(req, res, parsedUrl); + }; + } + getRequestHandler() { + return this.handleRequest.bind(this); + } + setAssetPrefix(prefix) { + this.nextConfig.assetPrefix = prefix ? prefix.replace(/\/$/, '') : ''; + } + /** + * Runs async initialization of server. + * It is idempotent, won't fire underlying initialization more than once. + */ async prepare() { + if (this.prepared) return; + // Get instrumentation module + if (!this.instrumentation) { + this.instrumentation = await this.loadInstrumentationModule(); + } + if (this.preparedPromise === null) { + this.preparedPromise = this.prepareImpl().then(()=>{ + this.prepared = true; + this.preparedPromise = null; + }); + } + return this.preparedPromise; + } + async prepareImpl() {} + async loadInstrumentationModule() {} + async close() {} + getAppPathRoutes() { + const appPathRoutes = {}; + Object.keys(this.appPathsManifest || {}).forEach((entry)=>{ + const normalizedPath = (0, _apppaths.normalizeAppPath)(entry); + if (!appPathRoutes[normalizedPath]) { + appPathRoutes[normalizedPath] = []; + } + appPathRoutes[normalizedPath].push(entry); + }); + return appPathRoutes; + } + async run(req, res, parsedUrl) { + return (0, _tracer.getTracer)().trace(_constants1.BaseServerSpan.run, async ()=>this.runImpl(req, res, parsedUrl)); + } + async runImpl(req, res, parsedUrl) { + await this.handleCatchallRenderRequest(req, res, parsedUrl); + } + async pipe(fn, partialContext) { + return (0, _tracer.getTracer)().trace(_constants1.BaseServerSpan.pipe, async ()=>this.pipeImpl(fn, partialContext)); + } + async pipeImpl(fn, partialContext) { + const ua = partialContext.req.headers['user-agent'] || ''; + const ctx = { + ...partialContext, + renderOpts: { + ...this.renderOpts, + // `renderOpts.botType` is accumulated in `this.renderImpl()` + supportsDynamicResponse: !this.renderOpts.botType, + serveStreamingMetadata: (0, _streamingmetadata.shouldServeStreamingMetadata)(ua, this.nextConfig.htmlLimitedBots) + } + }; + const payload = await fn(ctx); + if (payload === null) { + return; + } + const { req, res } = ctx; + const originalStatus = res.statusCode; + const { body } = payload; + let { cacheControl } = payload; + if (!res.sent) { + const { generateEtags, poweredByHeader } = this.renderOpts; + // In dev, we should not cache pages for any reason. + if (this.dev) { + res.setHeader('Cache-Control', 'no-cache, must-revalidate'); + cacheControl = undefined; + } + if (cacheControl && cacheControl.expire === undefined) { + cacheControl.expire = this.nextConfig.expireTime; + } + await this.sendRenderResult(req, res, { + result: body, + generateEtags, + poweredByHeader, + cacheControl + }); + res.statusCode = originalStatus; + } + } + async getStaticHTML(fn, partialContext) { + const ctx = { + ...partialContext, + renderOpts: { + ...this.renderOpts, + supportsDynamicResponse: false + } + }; + const payload = await fn(ctx); + if (payload === null) { + return null; + } + return payload.body.toUnchunkedString(); + } + async render(req, res, pathname, query = {}, parsedUrl, internalRender = false) { + return (0, _tracer.getTracer)().trace(_constants1.BaseServerSpan.render, async ()=>this.renderImpl(req, res, pathname, query, parsedUrl, internalRender)); + } + getWaitUntil() { + const builtinRequestContext = (0, _builtinrequestcontext.getBuiltinRequestContext)(); + if (builtinRequestContext) { + // the platform provided a request context. + // use the `waitUntil` from there, whether actually present or not -- + // if not present, `after` will error. + // NOTE: if we're in an edge runtime sandbox, this context will be used to forward the outer waitUntil. + return builtinRequestContext.waitUntil; + } + if (this.minimalMode) { + // we're built for a serverless environment, and `waitUntil` is not available, + // but using a noop would likely lead to incorrect behavior, + // because we have no way of keeping the invocation alive. + // return nothing, and `after` will error if used. + // + // NOTE: for edge functions, `NextWebServer` always runs in minimal mode. + // + // NOTE: if we're in an edge runtime sandbox, waitUntil will be passed in using "@next/request-context", + // so we won't get here. + return undefined; + } + return this.getInternalWaitUntil(); + } + getInternalWaitUntil() { + return undefined; + } + async renderImpl(req, res, pathname, query = {}, parsedUrl, internalRender = false) { + var _req_url; + if (!pathname.startsWith('/')) { + console.warn(`Cannot render page with path "${pathname}", did you mean "/${pathname}"?. See more info here: https://nextjs.org/docs/messages/render-no-starting-slash`); + } + if (this.serverOptions.customServer && pathname === '/index' && !await this.hasPage('/index')) { + // maintain backwards compatibility for custom server + // (see custom-server integration tests) + pathname = '/'; + } + const ua = req.headers['user-agent'] || ''; + this.renderOpts.botType = (0, _isbot.getBotType)(ua); + // we allow custom servers to call render for all URLs + // so check if we need to serve a static _next file or not. + // we don't modify the URL for _next/data request but still + // call render so we special case this to prevent an infinite loop + if (!internalRender && !this.minimalMode && !(0, _requestmeta.getRequestMeta)(req, 'isNextDataReq') && (((_req_url = req.url) == null ? void 0 : _req_url.match(/^\/_next\//)) || this.hasStaticDir && req.url.match(/^\/static\//))) { + return this.handleRequest(req, res, parsedUrl); + } + if ((0, _utils2.isBlockedPage)(pathname)) { + return this.render404(req, res, parsedUrl); + } + return this.pipe((ctx)=>this.renderToResponse(ctx), { + req, + res, + pathname, + query + }); + } + async getStaticPaths({ pathname }) { + var _this_getPrerenderManifest_dynamicRoutes_pathname; + // Read whether or not fallback should exist from the manifest. + const fallbackField = (_this_getPrerenderManifest_dynamicRoutes_pathname = this.getPrerenderManifest().dynamicRoutes[pathname]) == null ? void 0 : _this_getPrerenderManifest_dynamicRoutes_pathname.fallback; + return { + // `staticPaths` is intentionally set to `undefined` as it should've + // been caught when checking disk data. + staticPaths: undefined, + fallbackMode: (0, _fallback.parseFallbackField)(fallbackField) + }; + } + async renderToResponseWithComponents(requestContext, findComponentsResult) { + return (0, _tracer.getTracer)().trace(_constants1.BaseServerSpan.renderToResponseWithComponents, async ()=>this.renderToResponseWithComponentsImpl(requestContext, findComponentsResult)); + } + pathCouldBeIntercepted(resolvedPathname) { + return (0, _interceptionroutes.isInterceptionRouteAppPath)(resolvedPathname) || this.interceptionRoutePatterns.some((regexp)=>{ + return regexp.test(resolvedPathname); + }); + } + setVaryHeader(req, res, isAppPath, resolvedPathname) { + const baseVaryHeader = `${_approuterheaders.RSC_HEADER}, ${_approuterheaders.NEXT_ROUTER_STATE_TREE_HEADER}, ${_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER}, ${_approuterheaders.NEXT_ROUTER_SEGMENT_PREFETCH_HEADER}`; + const isRSCRequest = (0, _requestmeta.getRequestMeta)(req, 'isRSCRequest') ?? false; + let addedNextUrlToVary = false; + if (isAppPath && this.pathCouldBeIntercepted(resolvedPathname)) { + // Interception route responses can vary based on the `Next-URL` header. + // We use the Vary header to signal this behavior to the client to properly cache the response. + res.appendHeader('vary', `${baseVaryHeader}, ${_approuterheaders.NEXT_URL}`); + addedNextUrlToVary = true; + } else if (isAppPath || isRSCRequest) { + // We don't need to include `Next-URL` in the Vary header for non-interception routes since it won't affect the response. + // We also set this header for pages to avoid caching issues when navigating between pages and app. + res.appendHeader('vary', baseVaryHeader); + } + if (!addedNextUrlToVary) { + // Remove `Next-URL` from the request headers we determined it wasn't necessary to include in the Vary header. + // This is to avoid any dependency on the `Next-URL` header being present when preparing the response. + delete req.headers[_approuterheaders.NEXT_URL]; + } + } + async renderToResponseWithComponentsImpl({ req, res, pathname, renderOpts: opts }, { components, query }) { + var _this; + if (pathname === _constants.UNDERSCORE_NOT_FOUND_ROUTE) { + pathname = '/404'; + } + const isErrorPathname = pathname === '/_error'; + const is404Page = pathname === '/404' || isErrorPathname && res.statusCode === 404; + const is500Page = pathname === '/500' || isErrorPathname && res.statusCode === 500; + const isAppPath = components.isAppPath === true; + const hasServerProps = !!components.getServerSideProps; + const isPossibleServerAction = (0, _serveractionrequestmeta.getIsPossibleServerAction)(req); + let isSSG = !!components.getStaticProps; + // NOTE: Don't delete headers[RSC] yet, it still needs to be used in renderToHTML later + const isRSCRequest = (0, _requestmeta.getRequestMeta)(req, 'isRSCRequest') ?? false; + // Not all CDNs respect the Vary header when caching. We must assume that + // only the URL is used to vary the responses. The Next client computes a + // hash of the header values and sends it as a search param. Before + // responding to a request, we must verify that the hash matches the + // expected value. Neglecting to do this properly can lead to cache + // poisoning attacks on certain CDNs. + if (!this.minimalMode && this.nextConfig.experimental.validateRSCRequestHeaders && isRSCRequest && // In the event that we're serving a NoFallbackError, the headers will + // already be stripped so this comparison will always fail, resulting in + // a redirect loop. + !is404Page) { + const headers = req.headers; + const prefetchHeaderValue = headers[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER]; + const routerPrefetch = prefetchHeaderValue !== undefined ? prefetchHeaderValue === '1' || prefetchHeaderValue === '2' ? prefetchHeaderValue : undefined : // so we don't expect the header to be stripped by an intermediate layer. + // This should only happen for static prefetches, so we only handle those here. + (0, _requestmeta.getRequestMeta)(req, 'isPrefetchRSCRequest') ? '1' : undefined; + const segmentPrefetchRSCRequest = headers[_approuterheaders.NEXT_ROUTER_SEGMENT_PREFETCH_HEADER] || (0, _requestmeta.getRequestMeta)(req, 'segmentPrefetchRSCRequest'); + const expectedHash = await (0, _cachebustingsearchparam.computeCacheBustingSearchParam)(routerPrefetch, segmentPrefetchRSCRequest, headers[_approuterheaders.NEXT_ROUTER_STATE_TREE_HEADER], headers[_approuterheaders.NEXT_URL]); + const actualHash = (0, _requestmeta.getRequestMeta)(req, 'cacheBustingSearchParam') ?? new URL(req.url || '', 'http://localhost').searchParams.get(_approuterheaders.NEXT_RSC_UNION_QUERY); + let matchesHash = expectedHash === actualHash; + if (!matchesHash && actualHash !== null) { + // We'll fallback to checking the legacy hash format to support clients that do not have a secure context + matchesHash = (0, _cachebustingsearchparam.computeLegacyCacheBustingSearchParam)(routerPrefetch, segmentPrefetchRSCRequest, headers[_approuterheaders.NEXT_ROUTER_STATE_TREE_HEADER], headers[_approuterheaders.NEXT_URL]) === actualHash; + } + if (!matchesHash) { + // The hash sent by the client does not match the expected value. + // Redirect to the URL with the correct cache-busting search param. + // This prevents cache poisoning attacks on CDNs that don't respect Vary headers. + // We continue to accept the legacy short hash for clients that still + // generate the 5-character `_rsc` form. + // Note: When no headers are present, expectedHash is empty string and client + // must send `_rsc` param, otherwise actualHash is null and hash check fails. + const url = new URL(req.url || '', 'http://localhost'); + (0, _setcachebustingsearchparam.setCacheBustingSearchParamWithHash)(url, expectedHash); + res.statusCode = 307; + res.setHeader('location', `${url.pathname}${url.search}`); + res.body('').send(); + return null; + } + } + // Compute the iSSG cache key. We use the rewritten pathname since + // pages with fallback: false are allowed to be rewritten to + // and we need to look up the path by the rewritten path + let urlPathname = (0, _parseurl.parseUrl)(req.url || '').pathname || '/'; + let resolvedUrlPathname = (0, _requestmeta.getRequestMeta)(req, 'rewrittenPathname') || urlPathname; + this.setVaryHeader(req, res, isAppPath, resolvedUrlPathname); + let staticPaths; + let hasFallback = false; + const prerenderManifest = this.getPrerenderManifest(); + if (hasFallback || (staticPaths == null ? void 0 : staticPaths.includes(resolvedUrlPathname)) || // this signals revalidation in deploy environments + // TODO: make this more generic + req.headers['x-now-route-matches']) { + isSSG = true; + } else if (!this.dev) { + isSSG ||= !!prerenderManifest.routes[(0, _toroute.toRoute)(pathname)]; + } + // Toggle whether or not this is a Data request + const isNextDataRequest = !!((0, _requestmeta.getRequestMeta)(req, 'isNextDataReq') || req.headers['x-nextjs-data'] && this.serverOptions.webServerConfig) && (isSSG || hasServerProps); + // when we are handling a middleware prefetch and it doesn't + // resolve to a static data route we bail early to avoid + // unexpected SSR invocations + if (!isSSG && req.headers['x-middleware-prefetch'] && !(is404Page || pathname === '/_error')) { + res.setHeader(_constants2.MATCHED_PATH_HEADER, pathname); + res.setHeader('x-middleware-skip', '1'); + res.setHeader('cache-control', 'private, no-cache, no-store, max-age=0, must-revalidate'); + res.body('{}').send(); + return null; + } + // normalize req.url for SSG paths as it is not exposed + // to getStaticProps and the asPath should not expose /_next/data + if (isSSG && this.minimalMode && req.headers[_constants2.MATCHED_PATH_HEADER] && req.url.startsWith('/_next/data')) { + req.url = this.stripNextDataPath(req.url); + } + const locale = (0, _requestmeta.getRequestMeta)(req, 'locale'); + if (!!req.headers['x-nextjs-data'] && (!res.statusCode || res.statusCode === 200)) { + res.setHeader('x-nextjs-matched-path', `${locale ? `/${locale}` : ''}${pathname}`); + } + let routeModule; + if (components.routeModule) { + routeModule = components.routeModule; + } + /** + * If the route being rendered is an app page, and the ppr feature has been + * enabled, then the given route _could_ support PPR. + */ const couldSupportPPR = this.isAppPPREnabled && typeof routeModule !== 'undefined' && (0, _checks.isAppPageRouteModule)(routeModule); + // When enabled, this will allow the use of the `?__nextppronly` query to + // enable debugging of the static shell. + const hasDebugStaticShellQuery = process.env.__NEXT_EXPERIMENTAL_STATIC_SHELL_DEBUGGING === '1' && typeof query.__nextppronly !== 'undefined' && couldSupportPPR; + // Whether the testing API is exposed (dev mode or explicit flag) + const exposeTestingApi = this.dev === true || this.nextConfig.experimental.exposeTestingApiInProductionBuild === true; + // Check for the instant test cookie for MPA navigations (page reload, full + // page load) in the Instant Navigation Testing API. Only applies to + // document requests (no RSC header) - RSC requests should proceed normally + // even during a locked scope, with blocking happening on the client side. + const hasInstantTestCookie = exposeTestingApi && !(0, _isrscrequest.isRSCRequestHeader)(req.headers[_approuterheaders.RSC_HEADER]) && typeof req.headers.cookie === 'string' && req.headers.cookie.includes(_approuterheaders.NEXT_INSTANT_TEST_COOKIE + '=') && couldSupportPPR; + // This page supports PPR if it is marked as being `PARTIALLY_STATIC` in the + // prerender manifest and this is an app page. + const isRoutePPREnabled = couldSupportPPR && (((_this = prerenderManifest.routes[pathname] ?? prerenderManifest.dynamicRoutes[pathname]) == null ? void 0 : _this.renderingMode) === 'PARTIALLY_STATIC' || // Ideally we'd want to check the appConfig to see if this page has PPR + // enabled or not, but that would require plumbing the appConfig through + // to the server during development. We assume that the page supports it + // but only during development or when the testing API is exposed. + (hasDebugStaticShellQuery || hasInstantTestCookie) && (exposeTestingApi || this.experimentalTestProxy === true)); + // If we're in minimal mode, then try to get the postponed information from + // the request metadata. If available, use it for resuming the postponed + // render. + const minimalPostponed = isRoutePPREnabled ? (0, _requestmeta.getRequestMeta)(req, 'postponed') : undefined; + // we need to ensure the status code if /404 is visited directly + if (is404Page && !isNextDataRequest && !isRSCRequest) { + res.statusCode = 404; + } + // ensure correct status is set when visiting a status page + // directly e.g. /500 + if (_constants.STATIC_STATUS_PAGES.includes(pathname)) { + res.statusCode = parseInt(pathname.slice(1), 10); + } + if (// Server actions can use non-GET/HEAD methods. + !isPossibleServerAction && // Resume can use non-GET/HEAD methods. + !minimalPostponed && !is404Page && !is500Page && pathname !== '/_error' && req.method !== 'HEAD' && req.method !== 'GET' && (typeof components.Component === 'string' || isSSG)) { + res.statusCode = 405; + res.setHeader('Allow', [ + 'GET', + 'HEAD' + ]); + res.body('Method Not Allowed').send(); + return null; + } + // handle static page + if (typeof components.Component === 'string') { + return { + body: _renderresult.default.fromStatic(components.Component, _constants2.HTML_CONTENT_TYPE_HEADER) + }; + } + if (opts.supportsDynamicResponse === true) { + var _components_Document; + const ua = req.headers['user-agent'] || ''; + const isBotRequest = (0, _isbot.isBot)(ua); + const isSupportedDocument = typeof ((_components_Document = components.Document) == null ? void 0 : _components_Document.getInitialProps) !== 'function' || // The built-in `Document` component also supports dynamic HTML for concurrent mode. + _constants.NEXT_BUILTIN_DOCUMENT in components.Document; + // Disable dynamic HTML in cases that we know it won't be generated, + // so that we can continue generating a cache key when possible. + // TODO-APP: should the first render for a dynamic app path + // be static so we can collect revalidate and populate the + // cache if there are no dynamic data requirements + opts.supportsDynamicResponse = !isSSG && !isBotRequest && isSupportedDocument; + } + // In development, we always want to generate dynamic HTML. + if (!isNextDataRequest && isAppPath && this.dev) { + opts.supportsDynamicResponse = true; + } + if (isSSG && this.minimalMode && req.headers[_constants2.MATCHED_PATH_HEADER]) { + // the url value is already correct when the matched-path header is set + resolvedUrlPathname = urlPathname; + } + urlPathname = (0, _removetrailingslash.removeTrailingSlash)(urlPathname); + resolvedUrlPathname = (0, _removetrailingslash.removeTrailingSlash)(resolvedUrlPathname); + if (this.localeNormalizer) { + resolvedUrlPathname = this.localeNormalizer.normalize(resolvedUrlPathname); + } + // remove /_next/data prefix from urlPathname so it matches + // for direct page visit and /_next/data visit + if (isNextDataRequest) { + resolvedUrlPathname = this.stripNextDataPath(resolvedUrlPathname); + urlPathname = this.stripNextDataPath(urlPathname); + } + // use existing incrementalCache instance if available + const incrementalCache = await this.getIncrementalCache({ + requestHeaders: Object.assign({}, req.headers) + }); + // TODO: investigate, this is not safe across multiple concurrent requests + incrementalCache.resetRequestCache(); + if ((routeModule == null ? void 0 : routeModule.isDev) && (0, _utils1.isDynamicRoute)(pathname) && (components.getStaticPaths || isAppPath)) { + var _pathsResults_staticPaths; + let getStaticPathsStart; + if (this.dev) { + getStaticPathsStart = process.hrtime.bigint(); + } + const pathsResults = await this.getStaticPaths({ + pathname, + urlPathname, + requestHeaders: req.headers, + page: components.page, + isAppPath + }); + if (this.dev && getStaticPathsStart && ((_pathsResults_staticPaths = pathsResults.staticPaths) == null ? void 0 : _pathsResults_staticPaths.length)) { + (0, _requestmeta.addRequestMeta)(req, 'devGenerateStaticParamsDuration', process.hrtime.bigint() - getStaticPathsStart); + } + if (isAppPath && this.nextConfig.cacheComponents) { + var _pathsResults_prerenderedRoutes; + if ((_pathsResults_prerenderedRoutes = pathsResults.prerenderedRoutes) == null ? void 0 : _pathsResults_prerenderedRoutes.length) { + let smallestFallbackRouteParams = null; + for (const route of pathsResults.prerenderedRoutes){ + const fallbackRouteParams = route.fallbackRouteParams; + if (!fallbackRouteParams || fallbackRouteParams.length === 0) { + // There are no fallback route params so we don't need to continue + smallestFallbackRouteParams = null; + break; + } + if (smallestFallbackRouteParams === null || fallbackRouteParams.length < smallestFallbackRouteParams.length) { + smallestFallbackRouteParams = fallbackRouteParams; + } + } + if (smallestFallbackRouteParams) { + (0, _requestmeta.addRequestMeta)(req, 'fallbackParams', (0, _fallbackparams.createOpaqueFallbackRouteParams)(smallestFallbackRouteParams)); + } + } + } + } + // An OPTIONS request to a page handler is invalid. + if (req.method === 'OPTIONS' && !is404Page && (!routeModule || !(0, _checks.isAppRouteRouteModule)(routeModule))) { + await (0, _sendresponse.sendResponse)(req, res, new Response(null, { + status: 400 + })); + return null; + } + const request = (0, _helpers.isNodeNextRequest)(req) ? req.originalRequest : req; + const response = (0, _helpers.isNodeNextResponse)(res) ? res.originalResponse : res; + const parsedInitUrl = (0, _parseurl.parseUrl)((0, _requestmeta.getRequestMeta)(req, 'initURL') || req.url); + let initPathname = parsedInitUrl.pathname || '/'; + for (const normalizer of [ + this.normalizers.segmentPrefetchRSC, + this.normalizers.rsc + ]){ + if (normalizer == null ? void 0 : normalizer.match(initPathname)) { + initPathname = normalizer.normalize(initPathname); + } + } + // On minimal mode, the request url of dynamic route can be a + // literal dynamic route ('/[slug]') instead of actual URL, so overwriting to initPathname + // will transform back the resolved url to the dynamic route pathname. + if (!(this.minimalMode && isErrorPathname)) { + request.url = `${initPathname}${parsedInitUrl.search || ''}`; + } + // propagate the request context for dev + (0, _requestmeta.setRequestMeta)(request, (0, _requestmeta.getRequestMeta)(req)); + (0, _requestmeta.addRequestMeta)(request, 'distDir', this.distDir); + (0, _requestmeta.addRequestMeta)(request, 'query', query); + (0, _requestmeta.addRequestMeta)(request, 'params', opts.params); + (0, _requestmeta.addRequestMeta)(request, 'minimalMode', this.minimalMode); + if (opts.err) { + (0, _requestmeta.addRequestMeta)(request, 'invokeError', opts.err); + } + const maybeDevRequest = // we need to capture fetch metrics when they are set + // and can't wait for handler to resolve as the fetch + // metrics are logged on response close which happens + // before handler resolves + process.env.NODE_ENV === 'development' ? new Proxy(request, { + get (target, prop) { + if (typeof target[prop] === 'function') { + return target[prop].bind(target); + } + return target[prop]; + }, + set (target, prop, value) { + if (prop === 'fetchMetrics') { + ; + req.fetchMetrics = value; + } + target[prop] = value; + return true; + } + }) : request; + // @ts-expect-error This isn't entirely correct, but the ServerRequest type param seems overly + // generic anyway. + let handlerReq = maybeDevRequest; + // @ts-expect-error This isn't entirely correct, but the ServerResponse type param seems overly + // generic anyway. + let handlerRes = response; + await components.ComponentMod.handler(handlerReq, handlerRes, { + waitUntil: this.getWaitUntil() + }); + // response is handled fully in handler + return null; + } + stripNextDataPath(filePath, stripLocale = true) { + if (filePath.includes(this.buildId)) { + const splitPath = filePath.substring(filePath.indexOf(this.buildId) + this.buildId.length); + filePath = (0, _denormalizepagepath.denormalizePagePath)(splitPath.replace(/\.json$/, '')); + } + if (this.localeNormalizer && stripLocale) { + return this.localeNormalizer.normalize(filePath); + } + return filePath; + } + // map the route to the actual bundle name + getOriginalAppPaths(route) { + if (this.enabledDirectories.app) { + var _this_appPathRoutes; + const originalAppPath = (_this_appPathRoutes = this.appPathRoutes) == null ? void 0 : _this_appPathRoutes[route]; + if (!originalAppPath) { + return null; + } + return originalAppPath; + } + return null; + } + async renderPageComponent(ctx, bubbleNoFallback) { + var _this_nextConfig_experimental_sri; + const { query, pathname } = ctx; + const appPaths = this.getOriginalAppPaths(pathname); + const isAppPath = Array.isArray(appPaths); + let page = pathname; + if (isAppPath) { + // the last item in the array is the root page, if there are parallel routes + page = appPaths[appPaths.length - 1]; + } + const result = await this.findPageComponents({ + locale: (0, _requestmeta.getRequestMeta)(ctx.req, 'locale'), + page, + query, + params: ctx.renderOpts.params || {}, + isAppPath, + sriEnabled: !!((_this_nextConfig_experimental_sri = this.nextConfig.experimental.sri) == null ? void 0 : _this_nextConfig_experimental_sri.algorithm), + appPaths, + // Ensuring for loading page component routes is done via the matcher. + shouldEnsure: false + }); + if (result) { + (0, _tracer.getTracer)().setRootSpanAttribute('next.route', pathname); + try { + return await this.renderToResponseWithComponents(ctx, result); + } catch (err) { + const isNoFallbackError = err instanceof _nofallbackerrorexternal.NoFallbackError; + if (!isNoFallbackError || isNoFallbackError && bubbleNoFallback) { + throw err; + } + } + } + return false; + } + async renderToResponse(ctx) { + return (0, _tracer.getTracer)().trace(_constants1.BaseServerSpan.renderToResponse, { + spanName: `rendering page`, + attributes: { + 'next.route': ctx.pathname + } + }, async ()=>{ + return this.renderToResponseImpl(ctx); + }); + } + async renderToResponseImpl(ctx) { + var _this_i18nProvider; + const { req, res, query, pathname } = ctx; + let page = pathname; + const bubbleNoFallback = (0, _requestmeta.getRequestMeta)(ctx.req, 'bubbleNoFallback') ?? false; + if (!this.minimalMode && this.nextConfig.experimental.validateRSCRequestHeaders) { + (0, _requestmeta.addRequestMeta)(ctx.req, 'cacheBustingSearchParam', query[_approuterheaders.NEXT_RSC_UNION_QUERY]); + } + delete query[_approuterheaders.NEXT_RSC_UNION_QUERY]; + const options = { + i18n: (_this_i18nProvider = this.i18nProvider) == null ? void 0 : _this_i18nProvider.fromRequest(req, pathname) + }; + const existingMatch = (0, _requestmeta.getRequestMeta)(ctx.req, 'match'); + let fastPath = true; + // when a specific invoke-output is meant to be matched + // ensure a prior dynamic route/page doesn't take priority + const invokeOutput = (0, _requestmeta.getRequestMeta)(ctx.req, 'invokeOutput'); + if (!this.minimalMode && typeof invokeOutput === 'string' && (0, _utils1.isDynamicRoute)(invokeOutput || '') && invokeOutput !== (existingMatch == null ? void 0 : existingMatch.definition.pathname) || (// Parallel routes are matched in `existingMatch` but since currently + // there can be multiple matches it's not guaranteed to be the right match + // therefor we need to opt-out of the fast path for parallel routes. + existingMatch == null ? void 0 : existingMatch.definition.page.includes('/@'))) { + fastPath = false; + } + try { + for await (const match of fastPath && existingMatch ? [ + existingMatch + ] : this.matchers.matchAll(pathname, options)){ + if (!this.minimalMode && typeof invokeOutput === 'string' && (0, _utils1.isDynamicRoute)(invokeOutput || '') && invokeOutput !== match.definition.pathname) { + continue; + } + const result = await this.renderPageComponent({ + ...ctx, + pathname: match.definition.pathname, + renderOpts: { + ...ctx.renderOpts, + params: match.params + } + }, bubbleNoFallback); + if (result !== false) return result; + } + // currently edge functions aren't receiving the x-matched-path + // header so we need to fallback to matching the current page + // when we weren't able to match via dynamic route to handle + // the rewrite case + // @ts-expect-error extended in child class web-server + if (this.serverOptions.webServerConfig) { + // @ts-expect-error extended in child class web-server + ctx.pathname = this.serverOptions.webServerConfig.page; + const result = await this.renderPageComponent(ctx, bubbleNoFallback); + if (result !== false) return result; + } + } catch (error) { + const err = (0, _iserror.getProperError)(error); + if (error instanceof _utils.MissingStaticPage) { + console.error('Invariant: failed to load static page', JSON.stringify({ + page, + url: ctx.req.url, + matchedPath: ctx.req.headers[_constants2.MATCHED_PATH_HEADER], + initUrl: (0, _requestmeta.getRequestMeta)(ctx.req, 'initURL'), + didRewrite: !!(0, _requestmeta.getRequestMeta)(ctx.req, 'rewrittenPathname'), + rewrittenPathname: (0, _requestmeta.getRequestMeta)(ctx.req, 'rewrittenPathname') + }, null, 2)); + throw err; + } + if (err instanceof _nofallbackerrorexternal.NoFallbackError && bubbleNoFallback) { + throw err; + } + if (err instanceof _utils.DecodeError || err instanceof _utils.NormalizeError) { + res.statusCode = 400; + return await this.renderErrorToResponse(ctx, err); + } + res.statusCode = 500; + // if pages/500 is present we still need to trigger + // /_error `getInitialProps` to allow reporting error + if (await this.hasPage('/500')) { + (0, _requestmeta.addRequestMeta)(ctx.req, 'customErrorRender', true); + await this.renderErrorToResponse(ctx, err); + (0, _requestmeta.removeRequestMeta)(ctx.req, 'customErrorRender'); + } + const isWrappedError = err instanceof WrappedBuildError; + if (!isWrappedError) { + if (this.minimalMode || this.dev) { + if ((0, _iserror.default)(err)) err.page = page; + throw err; + } + this.logError((0, _iserror.getProperError)(err)); + } + const response = await this.renderErrorToResponse(ctx, isWrappedError ? err.innerError : err); + return response; + } + const middleware = await this.getMiddleware(); + if (middleware && !!ctx.req.headers['x-nextjs-data'] && (!res.statusCode || res.statusCode === 200 || res.statusCode === 404)) { + const locale = (0, _requestmeta.getRequestMeta)(req, 'locale'); + res.setHeader('x-nextjs-matched-path', `${locale ? `/${locale}` : ''}${pathname}`); + res.statusCode = 200; + res.setHeader('Content-Type', _constants2.JSON_CONTENT_TYPE_HEADER); + res.body('{}'); + res.send(); + return null; + } + res.statusCode = 404; + return this.renderErrorToResponse(ctx, null); + } + async renderToHTML(req, res, pathname, query = {}) { + return (0, _tracer.getTracer)().trace(_constants1.BaseServerSpan.renderToHTML, async ()=>{ + return this.renderToHTMLImpl(req, res, pathname, query); + }); + } + async renderToHTMLImpl(req, res, pathname, query = {}) { + return this.getStaticHTML((ctx)=>this.renderToResponse(ctx), { + req, + res, + pathname, + query + }); + } + async renderError(err, req, res, pathname, query = {}, setHeaders = true) { + return (0, _tracer.getTracer)().trace(_constants1.BaseServerSpan.renderError, async ()=>{ + return this.renderErrorImpl(err, req, res, pathname, query, setHeaders); + }); + } + async renderErrorImpl(err, req, res, pathname, query = {}, setHeaders = true) { + if (setHeaders) { + res.setHeader('Cache-Control', 'private, no-cache, no-store, max-age=0, must-revalidate'); + } + return this.pipe(async (ctx)=>{ + const response = await this.renderErrorToResponse(ctx, err); + if (this.minimalMode && res.statusCode === 500) { + throw err; + } + return response; + }, { + req, + res, + pathname, + query + }); + } + async renderErrorToResponse(ctx, err) { + return (0, _tracer.getTracer)().trace(_constants1.BaseServerSpan.renderErrorToResponse, async ()=>{ + return this.renderErrorToResponseImpl(ctx, err); + }); + } + async renderErrorToResponseImpl(ctx, err) { + // Short-circuit favicon.ico in development to avoid compiling 404 page when the app has no favicon.ico. + // Since favicon.ico is automatically requested by the browser. + if (this.dev && ctx.pathname === '/favicon.ico') { + return { + body: _renderresult.default.EMPTY + }; + } + const { res, query } = ctx; + try { + let result = null; + const is404 = res.statusCode === 404; + let using404Page = false; + const hasAppDir = this.enabledDirectories.app; + if (is404) { + if (hasAppDir) { + // Use the not-found entry in app directory + result = await this.findPageComponents({ + locale: (0, _requestmeta.getRequestMeta)(ctx.req, 'locale'), + page: _constants.UNDERSCORE_NOT_FOUND_ROUTE_ENTRY, + query, + params: {}, + isAppPath: true, + shouldEnsure: true, + url: ctx.req.url + }); + using404Page = result !== null; + } + if (!result && await this.hasPage('/404')) { + result = await this.findPageComponents({ + locale: (0, _requestmeta.getRequestMeta)(ctx.req, 'locale'), + page: '/404', + query, + params: {}, + isAppPath: false, + // Ensuring can't be done here because you never "match" a 404 route. + shouldEnsure: true, + url: ctx.req.url + }); + using404Page = result !== null; + } + } + let statusPage = `/${res.statusCode}`; + if (!(0, _requestmeta.getRequestMeta)(ctx.req, 'customErrorRender') && !result && _constants.STATIC_STATUS_PAGES.includes(statusPage)) { + // skip ensuring /500 in dev mode as it isn't used and the + // dev overlay is used instead + if (statusPage !== '/500' || !this.dev) { + if (!result && hasAppDir) { + // Otherwise if app router present, load app router built-in 500 page + result = await this.findPageComponents({ + locale: (0, _requestmeta.getRequestMeta)(ctx.req, 'locale'), + page: statusPage, + query, + params: {}, + isAppPath: true, + // Ensuring can't be done here because you never "match" a 500 + // route. + shouldEnsure: true, + url: ctx.req.url + }); + } + // If the above App Router result is empty, fallback to pages router 500 page + result = await this.findPageComponents({ + locale: (0, _requestmeta.getRequestMeta)(ctx.req, 'locale'), + page: statusPage, + query, + params: {}, + isAppPath: false, + // Ensuring can't be done here because you never "match" a 500 + // route. + shouldEnsure: true, + url: ctx.req.url + }); + } + } + if (!result) { + result = await this.findPageComponents({ + locale: (0, _requestmeta.getRequestMeta)(ctx.req, 'locale'), + page: '/_error', + query, + params: {}, + isAppPath: false, + // Ensuring can't be done here because you never "match" an error + // route. + shouldEnsure: true, + url: ctx.req.url + }); + statusPage = '/_error'; + } + if (process.env.NODE_ENV !== 'production' && !using404Page && await this.hasPage('/_error') && !await this.hasPage('/404')) { + this.customErrorNo404Warn(); + } + if (!result) { + // this can occur when a project directory has been moved/deleted + // which is handled in the parent process in development + if (this.dev) { + return { + // wait for dev-server to restart before refreshing + body: _renderresult.default.fromStatic(` +
    missing required error components, refreshing...
    + `, _constants2.HTML_CONTENT_TYPE_HEADER) + }; + } + throw new WrappedBuildError(Object.defineProperty(new Error('missing required error components'), "__NEXT_ERROR_CODE", { + value: "E60", + enumerable: false, + configurable: true + })); + } + // If the page has a route module, use it for the new match. If it doesn't + // have a route module, remove the match. + if (result.components.routeModule) { + (0, _requestmeta.addRequestMeta)(ctx.req, 'match', { + definition: result.components.routeModule.definition, + params: undefined + }); + } else { + (0, _requestmeta.removeRequestMeta)(ctx.req, 'match'); + } + try { + return await this.renderToResponseWithComponents({ + ...ctx, + pathname: statusPage, + renderOpts: { + ...ctx.renderOpts, + err + } + }, result); + } catch (maybeFallbackError) { + if (maybeFallbackError instanceof _nofallbackerrorexternal.NoFallbackError) { + throw Object.defineProperty(new Error('invariant: failed to render error page'), "__NEXT_ERROR_CODE", { + value: "E55", + enumerable: false, + configurable: true + }); + } + throw maybeFallbackError; + } + } catch (error) { + const renderToHtmlError = (0, _iserror.getProperError)(error); + const isWrappedError = renderToHtmlError instanceof WrappedBuildError; + if (!isWrappedError) { + this.logError(renderToHtmlError); + } + res.statusCode = 500; + const fallbackComponents = await this.getFallbackErrorComponents(ctx.req.url); + if (fallbackComponents) { + // There was an error, so use it's definition from the route module + // to add the match to the request. + (0, _requestmeta.addRequestMeta)(ctx.req, 'match', { + definition: fallbackComponents.routeModule.definition, + params: undefined + }); + return this.renderToResponseWithComponents({ + ...ctx, + pathname: '/_error', + renderOpts: { + ...ctx.renderOpts, + // We render `renderToHtmlError` here because `err` is + // already captured in the stacktrace. + err: isWrappedError ? renderToHtmlError.innerError : renderToHtmlError + } + }, { + query, + components: fallbackComponents + }); + } + return { + body: _renderresult.default.fromStatic('Internal Server Error', 'text/plain') + }; + } + } + async renderErrorToHTML(err, req, res, pathname, query = {}) { + return this.getStaticHTML((ctx)=>this.renderErrorToResponse(ctx, err), { + req, + res, + pathname, + query + }); + } + async render404(req, res, parsedUrl, setHeaders = true) { + const { pathname, query } = parsedUrl ? parsedUrl : (0, _parseurl.parseUrl)(req.url); + // Ensure the locales are provided on the request meta. + if (this.nextConfig.i18n) { + if (!(0, _requestmeta.getRequestMeta)(req, 'locale')) { + (0, _requestmeta.addRequestMeta)(req, 'locale', this.nextConfig.i18n.defaultLocale); + } + (0, _requestmeta.addRequestMeta)(req, 'defaultLocale', this.nextConfig.i18n.defaultLocale); + } + res.statusCode = 404; + return this.renderError(null, req, res, pathname, query, setHeaders); + } +} + +//# sourceMappingURL=base-server.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/body-streams.js b/build/node_modules/next/dist/server/body-streams.js new file mode 100644 index 0000000..2d6d5fb --- /dev/null +++ b/build/node_modules/next/dist/server/body-streams.js @@ -0,0 +1,114 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getCloneableBody: null, + requestToBodyStream: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getCloneableBody: function() { + return getCloneableBody; + }, + requestToBodyStream: function() { + return requestToBodyStream; + } +}); +const _stream = require("stream"); +const _bytes = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/bytes")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const DEFAULT_BODY_CLONE_SIZE_LIMIT = 10 * 1024 * 1024 // 10MB +; +function requestToBodyStream(context, KUint8Array, stream) { + return new context.ReadableStream({ + start: async (controller)=>{ + for await (const chunk of stream){ + controller.enqueue(new KUint8Array(chunk)); + } + controller.close(); + } + }); +} +function replaceRequestBody(base, stream) { + for(const key in stream){ + let v = stream[key]; + if (typeof v === 'function') { + v = v.bind(base); + } + base[key] = v; + } + return base; +} +function getCloneableBody(readable, sizeLimit) { + let buffered = null; + const endPromise = new Promise((resolve, reject)=>{ + readable.on('end', resolve); + readable.on('error', reject); + }).catch((error)=>{ + return { + error + }; + }); + return { + /** + * Replaces the original request body if necessary. + * This is done because once we read the body from the original request, + * we can't read it again. + */ async finalize () { + if (buffered) { + const res = await endPromise; + if (res && typeof res === 'object' && res.error) { + throw res.error; + } + replaceRequestBody(readable, buffered); + buffered = readable; + } + }, + /** + * Clones the body stream + * to pass into a middleware + */ cloneBodyStream () { + const input = buffered ?? readable; + const p1 = new _stream.PassThrough(); + const p2 = new _stream.PassThrough(); + let bytesRead = 0; + const bodySizeLimit = sizeLimit ?? DEFAULT_BODY_CLONE_SIZE_LIMIT; + let limitExceeded = false; + input.on('data', (chunk)=>{ + if (limitExceeded) return; + bytesRead += chunk.length; + if (bytesRead > bodySizeLimit) { + limitExceeded = true; + const urlInfo = readable.url ? ` for ${readable.url}` : ''; + console.warn(// TODO(jiwon): Update this document link + `Request body exceeded ${_bytes.default.format(bodySizeLimit)}${urlInfo}. Only the first ${_bytes.default.format(bodySizeLimit)} will be available unless configured. See https://nextjs.org/docs/app/api-reference/config/next-config-js/middlewareClientMaxBodySize for more details.`); + p1.push(null); + p2.push(null); + return; + } + p1.push(chunk); + p2.push(chunk); + }); + input.on('end', ()=>{ + if (!limitExceeded) { + p1.push(null); + p2.push(null); + } + }); + buffered = p2; + return p1; + } + }; +} + +//# sourceMappingURL=body-streams.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/cache-dir.js b/build/node_modules/next/dist/server/cache-dir.js new file mode 100644 index 0000000..e182bfd --- /dev/null +++ b/build/node_modules/next/dist/server/cache-dir.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getStorageDirectory", { + enumerable: true, + get: function() { + return getStorageDirectory; + } +}); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _isdocker = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/is-docker")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function getStorageDirectory(distDir) { + const isLikelyEphemeral = (0, _isdocker.default)(); + if (isLikelyEphemeral) { + return undefined; + } + return _path.default.join(distDir, 'cache'); +} + +//# sourceMappingURL=cache-dir.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/capsize-font-metrics.json b/build/node_modules/next/dist/server/capsize-font-metrics.json new file mode 100644 index 0000000..7d1c569 --- /dev/null +++ b/build/node_modules/next/dist/server/capsize-font-metrics.json @@ -0,0 +1,181516 @@ +{ + "aBeeZee": { + "familyName": "ABeeZee", + "fullName": "ABeeZee Regular", + "postscriptName": "ABeeZee-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 920, + "descent": -262, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "ABeeZee", + "fullName": "ABeeZee Regular", + "postscriptName": "ABeeZee-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 920, + "descent": -262, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "italic": { + "familyName": "ABeeZee", + "fullName": "ABeeZee Italic", + "postscriptName": "ABeeZee-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 920, + "descent": -262, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "aDLaMDisplay": { + "familyName": "ADLaM Display", + "fullName": "ADLaM Display Regular", + "postscriptName": "ADLaMDisplay-Regular", + "category": "display", + "capHeight": 1434, + "ascent": 2140, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 991, + "subsets": { + "latin": { + "xWidthAvg": 991 + }, + "thai": { + "xWidthAvg": 1370 + } + }, + "variants": { + "regular": { + "familyName": "ADLaM Display", + "fullName": "ADLaM Display Regular", + "postscriptName": "ADLaMDisplay-Regular", + "category": "display", + "capHeight": 1434, + "ascent": 2140, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 991, + "subsets": { + "latin": { + "xWidthAvg": 991 + }, + "thai": { + "xWidthAvg": 1370 + } + } + } + } + }, + "aROneSans": { + "familyName": "AR One Sans", + "fullName": "AR One Sans Regular", + "postscriptName": "AROneSans-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1060, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 476, + "subsets": { + "latin": { + "xWidthAvg": 476 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "500": { + "familyName": "AR One Sans", + "fullName": "AR One Sans Medium", + "postscriptName": "AROneSans-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1060, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "AR One Sans", + "fullName": "AR One Sans SemiBold", + "postscriptName": "AROneSans-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1060, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "AR One Sans", + "fullName": "AR One Sans Bold", + "postscriptName": "AROneSans-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1060, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 501, + "subsets": { + "latin": { + "xWidthAvg": 501 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "AR One Sans", + "fullName": "AR One Sans Regular", + "postscriptName": "AROneSans-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1060, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 476, + "subsets": { + "latin": { + "xWidthAvg": 476 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "abel": { + "familyName": "Abel", + "fullName": "Abel Regular", + "postscriptName": "Abel-Regular", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 2006, + "descent": -604, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1044, + "xWidthAvg": 783, + "subsets": { + "latin": { + "xWidthAvg": 783 + }, + "thai": { + "xWidthAvg": 2048 + } + }, + "variants": { + "regular": { + "familyName": "Abel", + "fullName": "Abel Regular", + "postscriptName": "Abel-Regular", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 2006, + "descent": -604, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1044, + "xWidthAvg": 783, + "subsets": { + "latin": { + "xWidthAvg": 783 + }, + "thai": { + "xWidthAvg": 2048 + } + } + } + } + }, + "abhayaLibre": { + "familyName": "Abhaya Libre", + "fullName": "Abhaya Libre Regular", + "postscriptName": "AbhayaLibre-Regular", + "category": "serif", + "ascent": 860, + "descent": -348, + "lineGap": 0, + "unitsPerEm": 1024, + "xWidthAvg": 417, + "subsets": { + "latin": { + "xWidthAvg": 417 + }, + "thai": { + "xWidthAvg": 631 + } + }, + "variants": { + "500": { + "familyName": "Abhaya Libre", + "fullName": "Abhaya Libre Medium", + "postscriptName": "AbhayaLibre-Medium", + "category": "serif", + "ascent": 860, + "descent": -348, + "lineGap": 0, + "unitsPerEm": 1024, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 631 + } + } + }, + "600": { + "familyName": "Abhaya Libre", + "fullName": "Abhaya Libre SemiBold", + "postscriptName": "AbhayaLibre-SemiBold", + "category": "serif", + "ascent": 860, + "descent": -348, + "lineGap": 0, + "unitsPerEm": 1024, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 631 + } + } + }, + "700": { + "familyName": "Abhaya Libre", + "fullName": "Abhaya Libre Bold", + "postscriptName": "AbhayaLibre-Bold", + "category": "serif", + "ascent": 860, + "descent": -348, + "lineGap": 0, + "unitsPerEm": 1024, + "xWidthAvg": 424, + "subsets": { + "latin": { + "xWidthAvg": 424 + }, + "thai": { + "xWidthAvg": 631 + } + } + }, + "800": { + "familyName": "Abhaya Libre", + "fullName": "Abhaya Libre ExtraBold", + "postscriptName": "AbhayaLibre-ExtraBold", + "category": "serif", + "ascent": 860, + "descent": -348, + "lineGap": 0, + "unitsPerEm": 1024, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 631 + } + } + }, + "regular": { + "familyName": "Abhaya Libre", + "fullName": "Abhaya Libre Regular", + "postscriptName": "AbhayaLibre-Regular", + "category": "serif", + "ascent": 860, + "descent": -348, + "lineGap": 0, + "unitsPerEm": 1024, + "xWidthAvg": 417, + "subsets": { + "latin": { + "xWidthAvg": 417 + }, + "thai": { + "xWidthAvg": 631 + } + } + } + } + }, + "aboreto": { + "familyName": "Aboreto", + "fullName": "Aboreto Regular", + "postscriptName": "Aboreto-Regular", + "category": "display", + "capHeight": 700, + "ascent": 930, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 700, + "xWidthAvg": 585, + "subsets": { + "latin": { + "xWidthAvg": 585 + }, + "thai": { + "xWidthAvg": 530 + } + }, + "variants": { + "regular": { + "familyName": "Aboreto", + "fullName": "Aboreto Regular", + "postscriptName": "Aboreto-Regular", + "category": "display", + "capHeight": 700, + "ascent": 930, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 700, + "xWidthAvg": 585, + "subsets": { + "latin": { + "xWidthAvg": 585 + }, + "thai": { + "xWidthAvg": 530 + } + } + } + } + }, + "abrilFatface": { + "familyName": "Abril Fatface", + "fullName": "Abril Fatface", + "postscriptName": "AbrilFatface-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1058, + "descent": -291, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 476, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 200 + } + }, + "variants": { + "regular": { + "familyName": "Abril Fatface", + "fullName": "Abril Fatface", + "postscriptName": "AbrilFatface-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1058, + "descent": -291, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 476, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 200 + } + } + } + } + }, + "abyssinicaSIL": { + "familyName": "Abyssinica SIL", + "fullName": "Abyssinica SIL", + "postscriptName": "AbyssinicaSIL-Regular", + "category": "serif", + "capHeight": 1108, + "ascent": 2034, + "descent": -682, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 983, + "xWidthAvg": 973, + "subsets": { + "latin": { + "xWidthAvg": 973 + }, + "thai": { + "xWidthAvg": 1400 + } + }, + "variants": { + "regular": { + "familyName": "Abyssinica SIL", + "fullName": "Abyssinica SIL", + "postscriptName": "AbyssinicaSIL-Regular", + "category": "serif", + "capHeight": 1108, + "ascent": 2034, + "descent": -682, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 983, + "xWidthAvg": 973, + "subsets": { + "latin": { + "xWidthAvg": 973 + }, + "thai": { + "xWidthAvg": 1400 + } + } + } + } + }, + "aclonica": { + "familyName": "Aclonica", + "fullName": "Aclonica Regular", + "postscriptName": "Aclonica-Regular", + "category": "sans-serif", + "capHeight": 1440, + "ascent": 1687, + "descent": -533, + "lineGap": 101, + "unitsPerEm": 2048, + "xHeight": 1155, + "xWidthAvg": 1132, + "subsets": { + "latin": { + "xWidthAvg": 1132 + }, + "thai": { + "xWidthAvg": 580 + } + }, + "variants": { + "regular": { + "familyName": "Aclonica", + "fullName": "Aclonica Regular", + "postscriptName": "Aclonica-Regular", + "category": "sans-serif", + "capHeight": 1440, + "ascent": 1687, + "descent": -533, + "lineGap": 101, + "unitsPerEm": 2048, + "xHeight": 1155, + "xWidthAvg": 1132, + "subsets": { + "latin": { + "xWidthAvg": 1132 + }, + "thai": { + "xWidthAvg": 580 + } + } + } + } + }, + "acme": { + "familyName": "Acme", + "fullName": "Acme Regular", + "postscriptName": "Acme-Regular", + "category": "sans-serif", + "capHeight": 695, + "ascent": 959, + "descent": -307, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 107, + "xWidthAvg": 392, + "subsets": { + "latin": { + "xWidthAvg": 392 + }, + "thai": { + "xWidthAvg": 154 + } + }, + "variants": { + "regular": { + "familyName": "Acme", + "fullName": "Acme Regular", + "postscriptName": "Acme-Regular", + "category": "sans-serif", + "capHeight": 695, + "ascent": 959, + "descent": -307, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 107, + "xWidthAvg": 392, + "subsets": { + "latin": { + "xWidthAvg": 392 + }, + "thai": { + "xWidthAvg": 154 + } + } + } + } + }, + "actor": { + "familyName": "Actor", + "fullName": "Actor Regular", + "postscriptName": "Actor-Regular", + "category": "sans-serif", + "capHeight": 682, + "ascent": 941, + "descent": -262, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 503, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 360 + } + }, + "variants": { + "regular": { + "familyName": "Actor", + "fullName": "Actor Regular", + "postscriptName": "Actor-Regular", + "category": "sans-serif", + "capHeight": 682, + "ascent": 941, + "descent": -262, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 503, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 360 + } + } + } + } + }, + "adamina": { + "familyName": "Adamina", + "fullName": "Adamina Regular", + "postscriptName": "Adamina-Regular", + "category": "serif", + "capHeight": 796, + "ascent": 1072, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 0 + } + }, + "variants": { + "regular": { + "familyName": "Adamina", + "fullName": "Adamina Regular", + "postscriptName": "Adamina-Regular", + "category": "serif", + "capHeight": 796, + "ascent": 1072, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 0 + } + } + } + } + }, + "adventPro": { + "familyName": "Advent Pro", + "fullName": "Advent Pro Regular", + "postscriptName": "AdventPro-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 964, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 366, + "subsets": { + "latin": { + "xWidthAvg": 366 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "100": { + "familyName": "Advent Pro", + "fullName": "Advent Pro Thin", + "postscriptName": "AdventPro-Thin", + "category": "sans-serif", + "capHeight": 700, + "ascent": 964, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 356, + "subsets": { + "latin": { + "xWidthAvg": 356 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200": { + "familyName": "Advent Pro", + "fullName": "Advent Pro ExtraLight", + "postscriptName": "AdventPro-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 964, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 359, + "subsets": { + "latin": { + "xWidthAvg": 359 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Advent Pro", + "fullName": "Advent Pro Light", + "postscriptName": "AdventPro-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 964, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 362, + "subsets": { + "latin": { + "xWidthAvg": 362 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Advent Pro", + "fullName": "Advent Pro Medium", + "postscriptName": "AdventPro-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 964, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 370, + "subsets": { + "latin": { + "xWidthAvg": 370 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Advent Pro", + "fullName": "Advent Pro SemiBold", + "postscriptName": "AdventPro-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 964, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 375, + "subsets": { + "latin": { + "xWidthAvg": 375 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Advent Pro", + "fullName": "Advent Pro Bold", + "postscriptName": "AdventPro-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 964, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 380, + "subsets": { + "latin": { + "xWidthAvg": 380 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Advent Pro", + "fullName": "Advent Pro ExtraBold", + "postscriptName": "AdventPro-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 964, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 390, + "subsets": { + "latin": { + "xWidthAvg": 390 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "Advent Pro", + "fullName": "Advent Pro Black", + "postscriptName": "AdventPro-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 964, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 399, + "subsets": { + "latin": { + "xWidthAvg": 399 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Advent Pro", + "fullName": "Advent Pro Regular", + "postscriptName": "AdventPro-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 964, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 366, + "subsets": { + "latin": { + "xWidthAvg": 366 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Advent Pro", + "fullName": "Advent Pro Italic", + "postscriptName": "AdventPro-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 964, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 366, + "subsets": { + "latin": { + "xWidthAvg": 366 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900italic": { + "familyName": "Advent Pro", + "fullName": "Advent Pro Black Italic", + "postscriptName": "AdventPro-BlackItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 964, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 399, + "subsets": { + "latin": { + "xWidthAvg": 399 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800italic": { + "familyName": "Advent Pro", + "fullName": "Advent Pro ExtraBold Italic", + "postscriptName": "AdventPro-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 964, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 390, + "subsets": { + "latin": { + "xWidthAvg": 390 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700italic": { + "familyName": "Advent Pro", + "fullName": "Advent Pro Bold Italic", + "postscriptName": "AdventPro-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 964, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 380, + "subsets": { + "latin": { + "xWidthAvg": 380 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600italic": { + "familyName": "Advent Pro", + "fullName": "Advent Pro SemiBold Italic", + "postscriptName": "AdventPro-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 964, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 375, + "subsets": { + "latin": { + "xWidthAvg": 375 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500italic": { + "familyName": "Advent Pro", + "fullName": "Advent Pro Medium Italic", + "postscriptName": "AdventPro-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 964, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 370, + "subsets": { + "latin": { + "xWidthAvg": 370 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300italic": { + "familyName": "Advent Pro", + "fullName": "Advent Pro Light Italic", + "postscriptName": "AdventPro-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 964, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 363, + "subsets": { + "latin": { + "xWidthAvg": 363 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200italic": { + "familyName": "Advent Pro", + "fullName": "Advent Pro ExtraLight Italic", + "postscriptName": "AdventPro-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 964, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 360, + "subsets": { + "latin": { + "xWidthAvg": 360 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "100italic": { + "familyName": "Advent Pro", + "fullName": "Advent Pro Thin Italic", + "postscriptName": "AdventPro-ThinItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 964, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 358, + "subsets": { + "latin": { + "xWidthAvg": 358 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "afacad": { + "familyName": "Afacad", + "fullName": "Afacad Regular", + "postscriptName": "Afacad-Regular", + "category": "sans-serif", + "capHeight": 900, + "ascent": 1440, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 1440, + "xHeight": 600, + "xWidthAvg": 574, + "subsets": { + "latin": { + "xWidthAvg": 574 + }, + "thai": { + "xWidthAvg": 720 + } + }, + "variants": { + "500": { + "familyName": "Afacad", + "fullName": "Afacad Medium", + "postscriptName": "Afacad-Medium", + "category": "sans-serif", + "capHeight": 900, + "ascent": 1440, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 1440, + "xHeight": 600, + "xWidthAvg": 572, + "subsets": { + "latin": { + "xWidthAvg": 572 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "600": { + "familyName": "Afacad", + "fullName": "Afacad SemiBold", + "postscriptName": "Afacad-SemiBold", + "category": "sans-serif", + "capHeight": 900, + "ascent": 1440, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 1440, + "xHeight": 600, + "xWidthAvg": 570, + "subsets": { + "latin": { + "xWidthAvg": 570 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "700": { + "familyName": "Afacad", + "fullName": "Afacad Bold", + "postscriptName": "Afacad-Bold", + "category": "sans-serif", + "capHeight": 900, + "ascent": 1440, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 1440, + "xHeight": 600, + "xWidthAvg": 569, + "subsets": { + "latin": { + "xWidthAvg": 569 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "regular": { + "familyName": "Afacad", + "fullName": "Afacad Regular", + "postscriptName": "Afacad-Regular", + "category": "sans-serif", + "capHeight": 900, + "ascent": 1440, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 1440, + "xHeight": 600, + "xWidthAvg": 574, + "subsets": { + "latin": { + "xWidthAvg": 574 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "italic": { + "familyName": "Afacad", + "fullName": "Afacad Italic", + "postscriptName": "Afacad-Italic", + "category": "sans-serif", + "capHeight": 900, + "ascent": 1440, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 1440, + "xHeight": 600, + "xWidthAvg": 574, + "subsets": { + "latin": { + "xWidthAvg": 574 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "700italic": { + "familyName": "Afacad", + "fullName": "Afacad Bold Italic", + "postscriptName": "Afacad-BoldItalic", + "category": "sans-serif", + "capHeight": 900, + "ascent": 1440, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 1440, + "xHeight": 600, + "xWidthAvg": 569, + "subsets": { + "latin": { + "xWidthAvg": 569 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "600italic": { + "familyName": "Afacad", + "fullName": "Afacad SemiBold Italic", + "postscriptName": "Afacad-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 900, + "ascent": 1440, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 1440, + "xHeight": 600, + "xWidthAvg": 570, + "subsets": { + "latin": { + "xWidthAvg": 570 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "500italic": { + "familyName": "Afacad", + "fullName": "Afacad Medium Italic", + "postscriptName": "Afacad-MediumItalic", + "category": "sans-serif", + "capHeight": 900, + "ascent": 1440, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 1440, + "xHeight": 600, + "xWidthAvg": 572, + "subsets": { + "latin": { + "xWidthAvg": 572 + }, + "thai": { + "xWidthAvg": 720 + } + } + } + } + }, + "afacadFlux": { + "familyName": "Afacad Flux", + "fullName": "Afacad Flux Regular", + "postscriptName": "AfacadFlux-Regular", + "category": "sans-serif", + "capHeight": 900, + "ascent": 1440, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 1440, + "xHeight": 600, + "xWidthAvg": 574, + "subsets": { + "latin": { + "xWidthAvg": 574 + }, + "thai": { + "xWidthAvg": 720 + } + }, + "variants": { + "100": { + "familyName": "Afacad Flux", + "fullName": "Afacad Flux Thin", + "postscriptName": "AfacadFlux-Thin", + "category": "sans-serif", + "capHeight": 900, + "ascent": 1440, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 1440, + "xHeight": 570, + "xWidthAvg": 558, + "subsets": { + "latin": { + "xWidthAvg": 558 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "200": { + "familyName": "Afacad Flux", + "fullName": "Afacad Flux ExtraLight", + "postscriptName": "AfacadFlux-ExtraLight", + "category": "sans-serif", + "capHeight": 900, + "ascent": 1440, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 1440, + "xHeight": 578, + "xWidthAvg": 562, + "subsets": { + "latin": { + "xWidthAvg": 562 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "300": { + "familyName": "Afacad Flux", + "fullName": "Afacad Flux Light", + "postscriptName": "AfacadFlux-Light", + "category": "sans-serif", + "capHeight": 900, + "ascent": 1440, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 1440, + "xHeight": 585, + "xWidthAvg": 566, + "subsets": { + "latin": { + "xWidthAvg": 566 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "500": { + "familyName": "Afacad Flux", + "fullName": "Afacad Flux Medium", + "postscriptName": "AfacadFlux-Medium", + "category": "sans-serif", + "capHeight": 900, + "ascent": 1440, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 1440, + "xHeight": 600, + "xWidthAvg": 572, + "subsets": { + "latin": { + "xWidthAvg": 572 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "600": { + "familyName": "Afacad Flux", + "fullName": "Afacad Flux SemiBold", + "postscriptName": "AfacadFlux-SemiBold", + "category": "sans-serif", + "capHeight": 900, + "ascent": 1440, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 1440, + "xHeight": 600, + "xWidthAvg": 570, + "subsets": { + "latin": { + "xWidthAvg": 570 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "700": { + "familyName": "Afacad Flux", + "fullName": "Afacad Flux Bold", + "postscriptName": "AfacadFlux-Bold", + "category": "sans-serif", + "capHeight": 900, + "ascent": 1440, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 1440, + "xHeight": 600, + "xWidthAvg": 569, + "subsets": { + "latin": { + "xWidthAvg": 569 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "800": { + "familyName": "Afacad Flux", + "fullName": "Afacad Flux ExtraBold", + "postscriptName": "AfacadFlux-ExtraBold", + "category": "sans-serif", + "capHeight": 900, + "ascent": 1440, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 1440, + "xHeight": 615, + "xWidthAvg": 580, + "subsets": { + "latin": { + "xWidthAvg": 580 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "900": { + "familyName": "Afacad Flux", + "fullName": "Afacad Flux Black", + "postscriptName": "AfacadFlux-Black", + "category": "sans-serif", + "capHeight": 900, + "ascent": 1440, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 1440, + "xHeight": 623, + "xWidthAvg": 586, + "subsets": { + "latin": { + "xWidthAvg": 586 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "regular": { + "familyName": "Afacad Flux", + "fullName": "Afacad Flux Regular", + "postscriptName": "AfacadFlux-Regular", + "category": "sans-serif", + "capHeight": 900, + "ascent": 1440, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 1440, + "xHeight": 600, + "xWidthAvg": 574, + "subsets": { + "latin": { + "xWidthAvg": 574 + }, + "thai": { + "xWidthAvg": 720 + } + } + } + } + }, + "agbalumo": { + "familyName": "Agbalumo", + "fullName": "Agbalumo Regular", + "postscriptName": "Agbalumo-Regular", + "category": "display", + "capHeight": 720, + "ascent": 1200, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 799 + } + }, + "variants": { + "regular": { + "familyName": "Agbalumo", + "fullName": "Agbalumo Regular", + "postscriptName": "Agbalumo-Regular", + "category": "display", + "capHeight": 720, + "ascent": 1200, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 799 + } + } + } + } + }, + "agdasima": { + "familyName": "Agdasima", + "fullName": "Agdasima Regular", + "postscriptName": "Agdasima-Regular", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 2015, + "descent": -410, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 649, + "subsets": { + "latin": { + "xWidthAvg": 649 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "700": { + "familyName": "Agdasima", + "fullName": "Agdasima Bold", + "postscriptName": "Agdasima-Bold", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 2042, + "descent": -410, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 702, + "subsets": { + "latin": { + "xWidthAvg": 702 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "regular": { + "familyName": "Agdasima", + "fullName": "Agdasima Regular", + "postscriptName": "Agdasima-Regular", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 2015, + "descent": -410, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 649, + "subsets": { + "latin": { + "xWidthAvg": 649 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "aguafinaScript": { + "familyName": "Aguafina Script", + "fullName": "Aguafina Script Regular", + "postscriptName": "AguafinaScript-Regular", + "category": "handwriting", + "capHeight": 780, + "ascent": 966, + "descent": -581, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 356, + "xWidthAvg": 293, + "subsets": { + "latin": { + "xWidthAvg": 293 + }, + "thai": { + "xWidthAvg": 180 + } + }, + "variants": { + "regular": { + "familyName": "Aguafina Script", + "fullName": "Aguafina Script Regular", + "postscriptName": "AguafinaScript-Regular", + "category": "handwriting", + "capHeight": 780, + "ascent": 966, + "descent": -581, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 356, + "xWidthAvg": 293, + "subsets": { + "latin": { + "xWidthAvg": 293 + }, + "thai": { + "xWidthAvg": 180 + } + } + } + } + }, + "akatab": { + "familyName": "Akatab", + "fullName": "Akatab", + "postscriptName": "Akatab-Regular", + "category": "sans-serif", + "capHeight": 1393, + "ascent": 2093, + "descent": -711, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 914, + "subsets": { + "latin": { + "xWidthAvg": 914 + }, + "thai": { + "xWidthAvg": 922 + } + }, + "variants": { + "500": { + "familyName": "Akatab", + "fullName": "Akatab Medium", + "postscriptName": "Akatab-Medium", + "category": "sans-serif", + "capHeight": 1393, + "ascent": 2093, + "descent": -711, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 925, + "subsets": { + "latin": { + "xWidthAvg": 925 + }, + "thai": { + "xWidthAvg": 922 + } + } + }, + "600": { + "familyName": "Akatab", + "fullName": "Akatab SemiBold", + "postscriptName": "Akatab-SemiBold", + "category": "sans-serif", + "capHeight": 1393, + "ascent": 2093, + "descent": -711, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 933, + "subsets": { + "latin": { + "xWidthAvg": 933 + }, + "thai": { + "xWidthAvg": 922 + } + } + }, + "700": { + "familyName": "Akatab", + "fullName": "Akatab Bold", + "postscriptName": "Akatab-Bold", + "category": "sans-serif", + "capHeight": 1393, + "ascent": 2093, + "descent": -711, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 942, + "subsets": { + "latin": { + "xWidthAvg": 942 + }, + "thai": { + "xWidthAvg": 922 + } + } + }, + "800": { + "familyName": "Akatab", + "fullName": "Akatab ExtraBold", + "postscriptName": "Akatab-ExtraBold", + "category": "sans-serif", + "capHeight": 1393, + "ascent": 2093, + "descent": -711, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 955, + "subsets": { + "latin": { + "xWidthAvg": 955 + }, + "thai": { + "xWidthAvg": 922 + } + } + }, + "900": { + "familyName": "Akatab", + "fullName": "Akatab Black", + "postscriptName": "Akatab-Black", + "category": "sans-serif", + "capHeight": 1393, + "ascent": 2093, + "descent": -711, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 969, + "subsets": { + "latin": { + "xWidthAvg": 969 + }, + "thai": { + "xWidthAvg": 922 + } + } + }, + "regular": { + "familyName": "Akatab", + "fullName": "Akatab", + "postscriptName": "Akatab-Regular", + "category": "sans-serif", + "capHeight": 1393, + "ascent": 2093, + "descent": -711, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 914, + "subsets": { + "latin": { + "xWidthAvg": 914 + }, + "thai": { + "xWidthAvg": 922 + } + } + } + } + }, + "akayaKanadaka": { + "familyName": "Akaya Kanadaka", + "fullName": "Akaya Kanadaka Regular", + "postscriptName": "AkayaKanadaka-Regular", + "category": "display", + "capHeight": 634, + "ascent": 920, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 396, + "xWidthAvg": 408, + "subsets": { + "latin": { + "xWidthAvg": 408 + }, + "thai": { + "xWidthAvg": 543 + } + }, + "variants": { + "regular": { + "familyName": "Akaya Kanadaka", + "fullName": "Akaya Kanadaka Regular", + "postscriptName": "AkayaKanadaka-Regular", + "category": "display", + "capHeight": 634, + "ascent": 920, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 396, + "xWidthAvg": 408, + "subsets": { + "latin": { + "xWidthAvg": 408 + }, + "thai": { + "xWidthAvg": 543 + } + } + } + } + }, + "akayaTelivigala": { + "familyName": "Akaya Telivigala", + "fullName": "Akaya Telivigala Regular", + "postscriptName": "AkayaTelivigala-Regular", + "category": "display", + "capHeight": 613, + "ascent": 920, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 543 + } + }, + "variants": { + "regular": { + "familyName": "Akaya Telivigala", + "fullName": "Akaya Telivigala Regular", + "postscriptName": "AkayaTelivigala-Regular", + "category": "display", + "capHeight": 613, + "ascent": 920, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 543 + } + } + } + } + }, + "akronim": { + "familyName": "Akronim", + "fullName": "Akronim Regular", + "postscriptName": "Akronim-Regular", + "category": "display", + "capHeight": 730, + "ascent": 785, + "descent": -314, + "lineGap": 43, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 333, + "subsets": { + "latin": { + "xWidthAvg": 333 + }, + "thai": { + "xWidthAvg": 342 + } + }, + "variants": { + "regular": { + "familyName": "Akronim", + "fullName": "Akronim Regular", + "postscriptName": "Akronim-Regular", + "category": "display", + "capHeight": 730, + "ascent": 785, + "descent": -314, + "lineGap": 43, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 333, + "subsets": { + "latin": { + "xWidthAvg": 333 + }, + "thai": { + "xWidthAvg": 342 + } + } + } + } + }, + "akshar": { + "familyName": "Akshar", + "fullName": "Akshar Regular", + "postscriptName": "Akshar-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 990, + "descent": -390, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 382, + "subsets": { + "latin": { + "xWidthAvg": 382 + }, + "thai": { + "xWidthAvg": 848 + } + }, + "variants": { + "300": { + "familyName": "Akshar", + "fullName": "Akshar Light", + "postscriptName": "Akshar-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 990, + "descent": -390, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 357, + "subsets": { + "latin": { + "xWidthAvg": 357 + }, + "thai": { + "xWidthAvg": 800 + } + } + }, + "500": { + "familyName": "Akshar", + "fullName": "Akshar Medium", + "postscriptName": "Akshar-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 990, + "descent": -390, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 406, + "subsets": { + "latin": { + "xWidthAvg": 406 + }, + "thai": { + "xWidthAvg": 895 + } + } + }, + "600": { + "familyName": "Akshar", + "fullName": "Akshar SemiBold", + "postscriptName": "Akshar-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 990, + "descent": -390, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 430, + "subsets": { + "latin": { + "xWidthAvg": 430 + }, + "thai": { + "xWidthAvg": 943 + } + } + }, + "700": { + "familyName": "Akshar", + "fullName": "Akshar Bold", + "postscriptName": "Akshar-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 990, + "descent": -390, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 990 + } + } + }, + "regular": { + "familyName": "Akshar", + "fullName": "Akshar Regular", + "postscriptName": "Akshar-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 990, + "descent": -390, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 382, + "subsets": { + "latin": { + "xWidthAvg": 382 + }, + "thai": { + "xWidthAvg": 848 + } + } + } + } + }, + "aladin": { + "familyName": "Aladin", + "fullName": "Aladin Regular", + "postscriptName": "Aladin-Regular", + "category": "display", + "capHeight": 387, + "ascent": 905, + "descent": -321, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 337, + "xWidthAvg": 334, + "subsets": { + "latin": { + "xWidthAvg": 334 + }, + "thai": { + "xWidthAvg": 180 + } + }, + "variants": { + "regular": { + "familyName": "Aladin", + "fullName": "Aladin Regular", + "postscriptName": "Aladin-Regular", + "category": "display", + "capHeight": 387, + "ascent": 905, + "descent": -321, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 337, + "xWidthAvg": 334, + "subsets": { + "latin": { + "xWidthAvg": 334 + }, + "thai": { + "xWidthAvg": 180 + } + } + } + } + }, + "alata": { + "familyName": "Alata", + "fullName": "Alata Regular", + "postscriptName": "Alata-Regular", + "category": "sans-serif", + "capHeight": 735, + "ascent": 1100, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 459, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 864 + } + }, + "variants": { + "regular": { + "familyName": "Alata", + "fullName": "Alata Regular", + "postscriptName": "Alata-Regular", + "category": "sans-serif", + "capHeight": 735, + "ascent": 1100, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 459, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 864 + } + } + } + } + }, + "alatsi": { + "familyName": "Alatsi", + "fullName": "Alatsi Regular", + "postscriptName": "Alatsi-Regular", + "category": "sans-serif", + "capHeight": 1394, + "ascent": 2000, + "descent": -560, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 996, + "xWidthAvg": 864, + "subsets": { + "latin": { + "xWidthAvg": 864 + }, + "thai": { + "xWidthAvg": 1728 + } + }, + "variants": { + "regular": { + "familyName": "Alatsi", + "fullName": "Alatsi Regular", + "postscriptName": "Alatsi-Regular", + "category": "sans-serif", + "capHeight": 1394, + "ascent": 2000, + "descent": -560, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 996, + "xWidthAvg": 864, + "subsets": { + "latin": { + "xWidthAvg": 864 + }, + "thai": { + "xWidthAvg": 1728 + } + } + } + } + }, + "albertSans": { + "familyName": "Albert Sans", + "fullName": "Albert Sans Regular", + "postscriptName": "AlbertSans-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 660 + } + }, + "variants": { + "100": { + "familyName": "Albert Sans", + "fullName": "Albert Sans Thin", + "postscriptName": "AlbertSans-Thin", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 678 + } + } + }, + "200": { + "familyName": "Albert Sans", + "fullName": "Albert Sans ExtraLight", + "postscriptName": "AlbertSans-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 673 + } + } + }, + "300": { + "familyName": "Albert Sans", + "fullName": "Albert Sans Light", + "postscriptName": "AlbertSans-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "500": { + "familyName": "Albert Sans", + "fullName": "Albert Sans Medium", + "postscriptName": "AlbertSans-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 650 + } + } + }, + "600": { + "familyName": "Albert Sans", + "fullName": "Albert Sans SemiBold", + "postscriptName": "AlbertSans-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 639 + } + } + }, + "700": { + "familyName": "Albert Sans", + "fullName": "Albert Sans Bold", + "postscriptName": "AlbertSans-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 629 + } + } + }, + "800": { + "familyName": "Albert Sans", + "fullName": "Albert Sans ExtraBold", + "postscriptName": "AlbertSans-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 618 + } + } + }, + "900": { + "familyName": "Albert Sans", + "fullName": "Albert Sans Black", + "postscriptName": "AlbertSans-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 606 + } + } + }, + "regular": { + "familyName": "Albert Sans", + "fullName": "Albert Sans Regular", + "postscriptName": "AlbertSans-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 660 + } + } + }, + "italic": { + "familyName": "Albert Sans", + "fullName": "Albert Sans Italic", + "postscriptName": "AlbertSans-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 660 + } + } + }, + "900italic": { + "familyName": "Albert Sans", + "fullName": "Albert Sans Black Italic", + "postscriptName": "AlbertSans-BlackItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 606 + } + } + }, + "800italic": { + "familyName": "Albert Sans", + "fullName": "Albert Sans ExtraBold Italic", + "postscriptName": "AlbertSans-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 618 + } + } + }, + "700italic": { + "familyName": "Albert Sans", + "fullName": "Albert Sans Bold Italic", + "postscriptName": "AlbertSans-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 629 + } + } + }, + "600italic": { + "familyName": "Albert Sans", + "fullName": "Albert Sans SemiBold Italic", + "postscriptName": "AlbertSans-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 639 + } + } + }, + "500italic": { + "familyName": "Albert Sans", + "fullName": "Albert Sans Medium Italic", + "postscriptName": "AlbertSans-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 650 + } + } + }, + "300italic": { + "familyName": "Albert Sans", + "fullName": "Albert Sans Light Italic", + "postscriptName": "AlbertSans-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "200italic": { + "familyName": "Albert Sans", + "fullName": "Albert Sans ExtraLight Italic", + "postscriptName": "AlbertSans-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 673 + } + } + }, + "100italic": { + "familyName": "Albert Sans", + "fullName": "Albert Sans Thin Italic", + "postscriptName": "AlbertSans-ThinItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 678 + } + } + } + } + }, + "aldrich": { + "familyName": "Aldrich", + "fullName": "Aldrich Regular", + "postscriptName": "Aldrich-Regular", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 1475, + "descent": -430, + "lineGap": 98, + "unitsPerEm": 2048, + "xHeight": 1065, + "xWidthAvg": 1060, + "subsets": { + "latin": { + "xWidthAvg": 1060 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Aldrich", + "fullName": "Aldrich Regular", + "postscriptName": "Aldrich-Regular", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 1475, + "descent": -430, + "lineGap": 98, + "unitsPerEm": 2048, + "xHeight": 1065, + "xWidthAvg": 1060, + "subsets": { + "latin": { + "xWidthAvg": 1060 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "alef": { + "familyName": "Alef", + "fullName": "Alef Regular", + "postscriptName": "Alef-Regular", + "category": "sans-serif", + "capHeight": 1438, + "ascent": 2067, + "descent": -722, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1040, + "xWidthAvg": 941, + "subsets": { + "latin": { + "xWidthAvg": 941 + }, + "thai": { + "xWidthAvg": 748 + } + }, + "variants": { + "700": { + "familyName": "Alef", + "fullName": "Alef Bold", + "postscriptName": "Alef-Bold", + "category": "sans-serif", + "capHeight": 1438, + "ascent": 2067, + "descent": -722, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1040, + "xWidthAvg": 1020, + "subsets": { + "latin": { + "xWidthAvg": 1020 + }, + "thai": { + "xWidthAvg": 748 + } + } + }, + "regular": { + "familyName": "Alef", + "fullName": "Alef Regular", + "postscriptName": "Alef-Regular", + "category": "sans-serif", + "capHeight": 1438, + "ascent": 2067, + "descent": -722, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1040, + "xWidthAvg": 941, + "subsets": { + "latin": { + "xWidthAvg": 941 + }, + "thai": { + "xWidthAvg": 748 + } + } + } + } + }, + "alegreya": { + "familyName": "Alegreya", + "fullName": "Alegreya Regular", + "postscriptName": "Alegreya-Regular", + "category": "serif", + "capHeight": 637, + "ascent": 1016, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 452, + "xWidthAvg": 410, + "subsets": { + "latin": { + "xWidthAvg": 410 + }, + "thai": { + "xWidthAvg": 641 + } + }, + "variants": { + "500": { + "familyName": "Alegreya", + "fullName": "Alegreya Medium", + "postscriptName": "Alegreya-Medium", + "category": "serif", + "capHeight": 637, + "ascent": 1016, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 452, + "xWidthAvg": 413, + "subsets": { + "latin": { + "xWidthAvg": 413 + }, + "thai": { + "xWidthAvg": 641 + } + } + }, + "600": { + "familyName": "Alegreya", + "fullName": "Alegreya SemiBold", + "postscriptName": "Alegreya-SemiBold", + "category": "serif", + "capHeight": 637, + "ascent": 1016, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 452, + "xWidthAvg": 414, + "subsets": { + "latin": { + "xWidthAvg": 414 + }, + "thai": { + "xWidthAvg": 641 + } + } + }, + "700": { + "familyName": "Alegreya", + "fullName": "Alegreya Bold", + "postscriptName": "Alegreya-Bold", + "category": "serif", + "capHeight": 637, + "ascent": 1016, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 452, + "xWidthAvg": 416, + "subsets": { + "latin": { + "xWidthAvg": 416 + }, + "thai": { + "xWidthAvg": 641 + } + } + }, + "800": { + "familyName": "Alegreya", + "fullName": "Alegreya ExtraBold", + "postscriptName": "Alegreya-ExtraBold", + "category": "serif", + "capHeight": 637, + "ascent": 1016, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 452, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 641 + } + } + }, + "900": { + "familyName": "Alegreya", + "fullName": "Alegreya Black", + "postscriptName": "Alegreya-Black", + "category": "serif", + "capHeight": 637, + "ascent": 1016, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 452, + "xWidthAvg": 423, + "subsets": { + "latin": { + "xWidthAvg": 423 + }, + "thai": { + "xWidthAvg": 641 + } + } + }, + "regular": { + "familyName": "Alegreya", + "fullName": "Alegreya Regular", + "postscriptName": "Alegreya-Regular", + "category": "serif", + "capHeight": 637, + "ascent": 1016, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 452, + "xWidthAvg": 410, + "subsets": { + "latin": { + "xWidthAvg": 410 + }, + "thai": { + "xWidthAvg": 641 + } + } + }, + "italic": { + "familyName": "Alegreya", + "fullName": "Alegreya Italic", + "postscriptName": "Alegreya-Italic", + "category": "serif", + "capHeight": 636, + "ascent": 1016, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 452, + "xWidthAvg": 364, + "subsets": { + "latin": { + "xWidthAvg": 364 + }, + "thai": { + "xWidthAvg": 641 + } + } + }, + "900italic": { + "familyName": "Alegreya", + "fullName": "Alegreya Black Italic", + "postscriptName": "Alegreya-BlackItalic", + "category": "serif", + "capHeight": 636, + "ascent": 1016, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 452, + "xWidthAvg": 404, + "subsets": { + "latin": { + "xWidthAvg": 404 + }, + "thai": { + "xWidthAvg": 641 + } + } + }, + "800italic": { + "familyName": "Alegreya", + "fullName": "Alegreya ExtraBold Italic", + "postscriptName": "Alegreya-ExtraBoldItalic", + "category": "serif", + "capHeight": 636, + "ascent": 1016, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 452, + "xWidthAvg": 392, + "subsets": { + "latin": { + "xWidthAvg": 392 + }, + "thai": { + "xWidthAvg": 641 + } + } + }, + "700italic": { + "familyName": "Alegreya", + "fullName": "Alegreya Bold Italic", + "postscriptName": "Alegreya-BoldItalic", + "category": "serif", + "capHeight": 636, + "ascent": 1016, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 452, + "xWidthAvg": 382, + "subsets": { + "latin": { + "xWidthAvg": 382 + }, + "thai": { + "xWidthAvg": 641 + } + } + }, + "600italic": { + "familyName": "Alegreya", + "fullName": "Alegreya SemiBold Italic", + "postscriptName": "Alegreya-SemiBoldItalic", + "category": "serif", + "capHeight": 636, + "ascent": 1016, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 452, + "xWidthAvg": 377, + "subsets": { + "latin": { + "xWidthAvg": 377 + }, + "thai": { + "xWidthAvg": 641 + } + } + }, + "500italic": { + "familyName": "Alegreya", + "fullName": "Alegreya Medium Italic", + "postscriptName": "Alegreya-MediumItalic", + "category": "serif", + "capHeight": 636, + "ascent": 1016, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 452, + "xWidthAvg": 372, + "subsets": { + "latin": { + "xWidthAvg": 372 + }, + "thai": { + "xWidthAvg": 641 + } + } + } + } + }, + "alegreyaSC": { + "familyName": "Alegreya SC", + "fullName": "Alegreya SC Regular", + "postscriptName": "AlegreyaSC-Regular", + "category": "serif", + "capHeight": 636, + "ascent": 1016, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 452, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 641 + } + }, + "variants": { + "500": { + "familyName": "Alegreya SC", + "fullName": "Alegreya SC Medium", + "postscriptName": "AlegreyaSC-Medium", + "category": "serif", + "capHeight": 638, + "ascent": 1016, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 456, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 641 + } + } + }, + "700": { + "familyName": "Alegreya SC", + "fullName": "Alegreya SC Bold", + "postscriptName": "AlegreyaSC-Bold", + "category": "serif", + "capHeight": 641, + "ascent": 1016, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 461, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 641 + } + } + }, + "800": { + "familyName": "Alegreya SC", + "fullName": "Alegreya SC ExtraBold", + "postscriptName": "AlegreyaSC-ExtraBold", + "category": "serif", + "capHeight": 644, + "ascent": 1016, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 466, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 641 + } + } + }, + "900": { + "familyName": "Alegreya SC", + "fullName": "Alegreya SC Black", + "postscriptName": "AlegreyaSC-Black", + "category": "serif", + "capHeight": 647, + "ascent": 1016, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 641 + } + } + }, + "regular": { + "familyName": "Alegreya SC", + "fullName": "Alegreya SC Regular", + "postscriptName": "AlegreyaSC-Regular", + "category": "serif", + "capHeight": 636, + "ascent": 1016, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 452, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 641 + } + } + }, + "italic": { + "familyName": "Alegreya SC", + "fullName": "Alegreya SC Italic", + "postscriptName": "AlegreyaSC-Italic", + "category": "serif", + "capHeight": 636, + "ascent": 1016, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 452, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 641 + } + } + }, + "900italic": { + "familyName": "Alegreya SC", + "fullName": "Alegreya SC Black Italic", + "postscriptName": "AlegreyaSC-BlackItalic", + "category": "serif", + "capHeight": 647, + "ascent": 1016, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 641 + } + } + }, + "800italic": { + "familyName": "Alegreya SC", + "fullName": "Alegreya SC ExtraBold Italic", + "postscriptName": "AlegreyaSC-ExtraBoldItalic", + "category": "serif", + "capHeight": 644, + "ascent": 1016, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 466, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 641 + } + } + }, + "700italic": { + "familyName": "Alegreya SC", + "fullName": "Alegreya SC Bold Italic", + "postscriptName": "AlegreyaSC-BoldItalic", + "category": "serif", + "capHeight": 641, + "ascent": 1016, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 461, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 641 + } + } + }, + "500italic": { + "familyName": "Alegreya SC", + "fullName": "Alegreya SC Medium Italic", + "postscriptName": "AlegreyaSC-MediumItalic", + "category": "serif", + "capHeight": 638, + "ascent": 1016, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 456, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 641 + } + } + } + } + }, + "alegreyaSans": { + "familyName": "Alegreya Sans", + "fullName": "Alegreya Sans Regular", + "postscriptName": "AlegreyaSans-Regular", + "category": "sans-serif", + "capHeight": 641, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 458, + "xWidthAvg": 387, + "subsets": { + "latin": { + "xWidthAvg": 387 + }, + "thai": { + "xWidthAvg": 165 + } + }, + "variants": { + "100": { + "familyName": "Alegreya Sans", + "fullName": "Alegreya Sans Thin", + "postscriptName": "AlegreyaSans-Thin", + "category": "sans-serif", + "capHeight": 637, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 452, + "xWidthAvg": 376, + "subsets": { + "latin": { + "xWidthAvg": 376 + }, + "thai": { + "xWidthAvg": 180 + } + } + }, + "300": { + "familyName": "Alegreya Sans", + "fullName": "Alegreya Sans Light", + "postscriptName": "AlegreyaSans-Light", + "category": "sans-serif", + "capHeight": 639, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 455, + "xWidthAvg": 382, + "subsets": { + "latin": { + "xWidthAvg": 382 + }, + "thai": { + "xWidthAvg": 172 + } + } + }, + "500": { + "familyName": "Alegreya Sans", + "fullName": "Alegreya Sans Medium", + "postscriptName": "AlegreyaSans-Medium", + "category": "sans-serif", + "capHeight": 642, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 461, + "xWidthAvg": 391, + "subsets": { + "latin": { + "xWidthAvg": 391 + }, + "thai": { + "xWidthAvg": 160 + } + } + }, + "700": { + "familyName": "Alegreya Sans", + "fullName": "Alegreya Sans Bold", + "postscriptName": "AlegreyaSans-Bold", + "category": "sans-serif", + "capHeight": 644, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 465, + "xWidthAvg": 397, + "subsets": { + "latin": { + "xWidthAvg": 397 + }, + "thai": { + "xWidthAvg": 151 + } + } + }, + "800": { + "familyName": "Alegreya Sans", + "fullName": "Alegreya Sans ExtraBold", + "postscriptName": "AlegreyaSans-ExtraBold", + "category": "sans-serif", + "capHeight": 645, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 402, + "subsets": { + "latin": { + "xWidthAvg": 402 + }, + "thai": { + "xWidthAvg": 145 + } + } + }, + "900": { + "familyName": "Alegreya Sans", + "fullName": "Alegreya Sans Black", + "postscriptName": "AlegreyaSans-Black", + "category": "sans-serif", + "capHeight": 647, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 408, + "subsets": { + "latin": { + "xWidthAvg": 408 + }, + "thai": { + "xWidthAvg": 135 + } + } + }, + "regular": { + "familyName": "Alegreya Sans", + "fullName": "Alegreya Sans Regular", + "postscriptName": "AlegreyaSans-Regular", + "category": "sans-serif", + "capHeight": 641, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 458, + "xWidthAvg": 387, + "subsets": { + "latin": { + "xWidthAvg": 387 + }, + "thai": { + "xWidthAvg": 165 + } + } + }, + "italic": { + "familyName": "Alegreya Sans", + "fullName": "Alegreya Sans Italic", + "postscriptName": "AlegreyaSans-Italic", + "category": "sans-serif", + "capHeight": 640, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 458, + "xWidthAvg": 353, + "subsets": { + "latin": { + "xWidthAvg": 353 + }, + "thai": { + "xWidthAvg": 167 + } + } + }, + "900italic": { + "familyName": "Alegreya Sans", + "fullName": "Alegreya Sans Black Italic", + "postscriptName": "AlegreyaSans-BlackItalic", + "category": "sans-serif", + "capHeight": 647, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 391, + "subsets": { + "latin": { + "xWidthAvg": 391 + }, + "thai": { + "xWidthAvg": 135 + } + } + }, + "800italic": { + "familyName": "Alegreya Sans", + "fullName": "Alegreya Sans ExtraBold Italic", + "postscriptName": "AlegreyaSans-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 645, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 467, + "xWidthAvg": 378, + "subsets": { + "latin": { + "xWidthAvg": 378 + }, + "thai": { + "xWidthAvg": 146 + } + } + }, + "700italic": { + "familyName": "Alegreya Sans", + "fullName": "Alegreya Sans Bold Italic", + "postscriptName": "AlegreyaSans-BoldItalic", + "category": "sans-serif", + "capHeight": 643, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 464, + "xWidthAvg": 370, + "subsets": { + "latin": { + "xWidthAvg": 370 + }, + "thai": { + "xWidthAvg": 152 + } + } + }, + "500italic": { + "familyName": "Alegreya Sans", + "fullName": "Alegreya Sans Medium Italic", + "postscriptName": "AlegreyaSans-MediumItalic", + "category": "sans-serif", + "capHeight": 642, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 359, + "subsets": { + "latin": { + "xWidthAvg": 359 + }, + "thai": { + "xWidthAvg": 161 + } + } + }, + "300italic": { + "familyName": "Alegreya Sans", + "fullName": "Alegreya Sans Light Italic", + "postscriptName": "AlegreyaSans-LightItalic", + "category": "sans-serif", + "capHeight": 639, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 455, + "xWidthAvg": 347, + "subsets": { + "latin": { + "xWidthAvg": 347 + }, + "thai": { + "xWidthAvg": 173 + } + } + }, + "100italic": { + "familyName": "Alegreya Sans", + "fullName": "Alegreya Sans Thin Italic", + "postscriptName": "AlegreyaSans-ThinItalic", + "category": "sans-serif", + "capHeight": 637, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 452, + "xWidthAvg": 340, + "subsets": { + "latin": { + "xWidthAvg": 340 + }, + "thai": { + "xWidthAvg": 180 + } + } + } + } + }, + "alegreyaSansSC": { + "familyName": "Alegreya Sans SC", + "fullName": "Alegreya Sans SC Regular", + "postscriptName": "AlegreyaSansSC-Regular", + "category": "sans-serif", + "capHeight": 641, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 458, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 165 + } + }, + "variants": { + "100": { + "familyName": "Alegreya Sans SC", + "fullName": "Alegreya Sans SC Thin", + "postscriptName": "AlegreyaSansSC-Thin", + "category": "sans-serif", + "capHeight": 637, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 452, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 180 + } + } + }, + "300": { + "familyName": "Alegreya Sans SC", + "fullName": "Alegreya Sans SC Light", + "postscriptName": "AlegreyaSansSC-Light", + "category": "sans-serif", + "capHeight": 639, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 455, + "xWidthAvg": 424, + "subsets": { + "latin": { + "xWidthAvg": 424 + }, + "thai": { + "xWidthAvg": 172 + } + } + }, + "500": { + "familyName": "Alegreya Sans SC", + "fullName": "Alegreya Sans SC Medium", + "postscriptName": "AlegreyaSansSC-Medium", + "category": "sans-serif", + "capHeight": 642, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 461, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 160 + } + } + }, + "700": { + "familyName": "Alegreya Sans SC", + "fullName": "Alegreya Sans SC Bold", + "postscriptName": "AlegreyaSansSC-Bold", + "category": "sans-serif", + "capHeight": 644, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 465, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 151 + } + } + }, + "800": { + "familyName": "Alegreya Sans SC", + "fullName": "Alegreya Sans SC ExtraBold", + "postscriptName": "AlegreyaSansSC-ExtraBold", + "category": "sans-serif", + "capHeight": 645, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 145 + } + } + }, + "900": { + "familyName": "Alegreya Sans SC", + "fullName": "Alegreya Sans SC Black", + "postscriptName": "AlegreyaSansSC-Black", + "category": "sans-serif", + "capHeight": 647, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 135 + } + } + }, + "regular": { + "familyName": "Alegreya Sans SC", + "fullName": "Alegreya Sans SC Regular", + "postscriptName": "AlegreyaSansSC-Regular", + "category": "sans-serif", + "capHeight": 641, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 458, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 165 + } + } + }, + "italic": { + "familyName": "Alegreya Sans SC", + "fullName": "Alegreya Sans SC Italic", + "postscriptName": "AlegreyaSansSC-Italic", + "category": "sans-serif", + "capHeight": 640, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 458, + "xWidthAvg": 413, + "subsets": { + "latin": { + "xWidthAvg": 413 + }, + "thai": { + "xWidthAvg": 167 + } + } + }, + "900italic": { + "familyName": "Alegreya Sans SC", + "fullName": "Alegreya Sans SC Black Italic", + "postscriptName": "AlegreyaSansSC-BlackItalic", + "category": "sans-serif", + "capHeight": 647, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 135 + } + } + }, + "800italic": { + "familyName": "Alegreya Sans SC", + "fullName": "Alegreya Sans SC ExtraBold Italic", + "postscriptName": "AlegreyaSansSC-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 645, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 467, + "xWidthAvg": 436, + "subsets": { + "latin": { + "xWidthAvg": 436 + }, + "thai": { + "xWidthAvg": 146 + } + } + }, + "700italic": { + "familyName": "Alegreya Sans SC", + "fullName": "Alegreya Sans SC Bold Italic", + "postscriptName": "AlegreyaSansSC-BoldItalic", + "category": "sans-serif", + "capHeight": 643, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 464, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 152 + } + } + }, + "500italic": { + "familyName": "Alegreya Sans SC", + "fullName": "Alegreya Sans SC Medium Italic", + "postscriptName": "AlegreyaSansSC-MediumItalic", + "category": "sans-serif", + "capHeight": 642, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 418, + "subsets": { + "latin": { + "xWidthAvg": 418 + }, + "thai": { + "xWidthAvg": 161 + } + } + }, + "300italic": { + "familyName": "Alegreya Sans SC", + "fullName": "Alegreya Sans SC Light Italic", + "postscriptName": "AlegreyaSansSC-LightItalic", + "category": "sans-serif", + "capHeight": 639, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 455, + "xWidthAvg": 407, + "subsets": { + "latin": { + "xWidthAvg": 407 + }, + "thai": { + "xWidthAvg": 173 + } + } + }, + "100italic": { + "familyName": "Alegreya Sans SC", + "fullName": "Alegreya Sans SC Thin Italic", + "postscriptName": "AlegreyaSansSC-ThinItalic", + "category": "sans-serif", + "capHeight": 637, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 452, + "xWidthAvg": 402, + "subsets": { + "latin": { + "xWidthAvg": 402 + }, + "thai": { + "xWidthAvg": 180 + } + } + } + } + }, + "aleo": { + "familyName": "Aleo", + "fullName": "Aleo Regular", + "postscriptName": "Aleo-Regular", + "category": "serif", + "capHeight": 737, + "ascent": 905, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 507, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 553 + } + }, + "variants": { + "100": { + "familyName": "Aleo", + "fullName": "Aleo Thin", + "postscriptName": "Aleo-Thin", + "category": "serif", + "capHeight": 700, + "ascent": 905, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 531 + } + } + }, + "200": { + "familyName": "Aleo", + "fullName": "Aleo ExtraLight", + "postscriptName": "Aleo-ExtraLight", + "category": "serif", + "capHeight": 714, + "ascent": 905, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 539 + } + } + }, + "300": { + "familyName": "Aleo", + "fullName": "Aleo Light", + "postscriptName": "Aleo-Light", + "category": "serif", + "capHeight": 719, + "ascent": 905, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 542 + } + } + }, + "500": { + "familyName": "Aleo", + "fullName": "Aleo Medium", + "postscriptName": "Aleo-Medium", + "category": "serif", + "capHeight": 739, + "ascent": 905, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 509, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 555 + } + } + }, + "600": { + "familyName": "Aleo", + "fullName": "Aleo SemiBold", + "postscriptName": "Aleo-SemiBold", + "category": "serif", + "capHeight": 741, + "ascent": 905, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 556 + } + } + }, + "700": { + "familyName": "Aleo", + "fullName": "Aleo Bold", + "postscriptName": "Aleo-Bold", + "category": "serif", + "capHeight": 744, + "ascent": 905, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 558 + } + } + }, + "800": { + "familyName": "Aleo", + "fullName": "Aleo ExtraBold", + "postscriptName": "Aleo-ExtraBold", + "category": "serif", + "capHeight": 747, + "ascent": 905, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 560 + } + } + }, + "900": { + "familyName": "Aleo", + "fullName": "Aleo Black", + "postscriptName": "Aleo-Black", + "category": "serif", + "capHeight": 749, + "ascent": 905, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 562 + } + } + }, + "regular": { + "familyName": "Aleo", + "fullName": "Aleo Regular", + "postscriptName": "Aleo-Regular", + "category": "serif", + "capHeight": 737, + "ascent": 905, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 507, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 553 + } + } + }, + "italic": { + "familyName": "Aleo", + "fullName": "Aleo Italic", + "postscriptName": "Aleo-Italic", + "category": "serif", + "capHeight": 737, + "ascent": 905, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 507, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 553 + } + } + }, + "900italic": { + "familyName": "Aleo", + "fullName": "Aleo Black Italic", + "postscriptName": "Aleo-BlackItalic", + "category": "serif", + "capHeight": 749, + "ascent": 905, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 562 + } + } + }, + "800italic": { + "familyName": "Aleo", + "fullName": "Aleo ExtraBold Italic", + "postscriptName": "Aleo-ExtraBoldItalic", + "category": "serif", + "capHeight": 747, + "ascent": 905, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 560 + } + } + }, + "700italic": { + "familyName": "Aleo", + "fullName": "Aleo Bold Italic", + "postscriptName": "Aleo-BoldItalic", + "category": "serif", + "capHeight": 744, + "ascent": 905, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 558 + } + } + }, + "600italic": { + "familyName": "Aleo", + "fullName": "Aleo SemiBold Italic", + "postscriptName": "Aleo-SemiBoldItalic", + "category": "serif", + "capHeight": 741, + "ascent": 905, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 556 + } + } + }, + "500italic": { + "familyName": "Aleo", + "fullName": "Aleo Medium Italic", + "postscriptName": "Aleo-MediumItalic", + "category": "serif", + "capHeight": 739, + "ascent": 905, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 509, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 555 + } + } + }, + "300italic": { + "familyName": "Aleo", + "fullName": "Aleo Light Italic", + "postscriptName": "Aleo-LightItalic", + "category": "serif", + "capHeight": 719, + "ascent": 905, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 542 + } + } + }, + "200italic": { + "familyName": "Aleo", + "fullName": "Aleo ExtraLight Italic", + "postscriptName": "Aleo-ExtraLightItalic", + "category": "serif", + "capHeight": 714, + "ascent": 905, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 539 + } + } + }, + "100italic": { + "familyName": "Aleo", + "fullName": "Aleo Thin Italic", + "postscriptName": "Aleo-ThinItalic", + "category": "serif", + "capHeight": 700, + "ascent": 905, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 531 + } + } + } + } + }, + "alexBrush": { + "familyName": "Alex Brush", + "fullName": "Alex Brush Regular", + "postscriptName": "AlexBrush-Regular", + "category": "handwriting", + "capHeight": 700, + "ascent": 825, + "descent": -425, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 320, + "xWidthAvg": 341, + "subsets": { + "latin": { + "xWidthAvg": 341 + }, + "thai": { + "xWidthAvg": 499 + } + }, + "variants": { + "regular": { + "familyName": "Alex Brush", + "fullName": "Alex Brush Regular", + "postscriptName": "AlexBrush-Regular", + "category": "handwriting", + "capHeight": 700, + "ascent": 825, + "descent": -425, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 320, + "xWidthAvg": 341, + "subsets": { + "latin": { + "xWidthAvg": 341 + }, + "thai": { + "xWidthAvg": 499 + } + } + } + } + }, + "alexandria": { + "familyName": "Alexandria", + "fullName": "Alexandria Regular", + "postscriptName": "Alexandria-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 501, + "subsets": { + "latin": { + "xWidthAvg": 501 + }, + "thai": { + "xWidthAvg": 587 + } + }, + "variants": { + "100": { + "familyName": "Alexandria", + "fullName": "Alexandria Thin", + "postscriptName": "Alexandria-Thin", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "200": { + "familyName": "Alexandria", + "fullName": "Alexandria ExtraLight", + "postscriptName": "Alexandria-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "300": { + "familyName": "Alexandria", + "fullName": "Alexandria Light", + "postscriptName": "Alexandria-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "500": { + "familyName": "Alexandria", + "fullName": "Alexandria Medium", + "postscriptName": "Alexandria-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "600": { + "familyName": "Alexandria", + "fullName": "Alexandria SemiBold", + "postscriptName": "Alexandria-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "700": { + "familyName": "Alexandria", + "fullName": "Alexandria Bold", + "postscriptName": "Alexandria-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "800": { + "familyName": "Alexandria", + "fullName": "Alexandria ExtraBold", + "postscriptName": "Alexandria-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "900": { + "familyName": "Alexandria", + "fullName": "Alexandria Black", + "postscriptName": "Alexandria-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "regular": { + "familyName": "Alexandria", + "fullName": "Alexandria Regular", + "postscriptName": "Alexandria-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 501, + "subsets": { + "latin": { + "xWidthAvg": 501 + }, + "thai": { + "xWidthAvg": 587 + } + } + } + } + }, + "alfaSlabOne": { + "familyName": "Alfa Slab One", + "fullName": "Alfa Slab One Regular", + "postscriptName": "AlfaSlabOne-Regular", + "category": "display", + "capHeight": 778, + "ascent": 1036, + "descent": -333, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 556, + "xWidthAvg": 538, + "subsets": { + "latin": { + "xWidthAvg": 538 + }, + "thai": { + "xWidthAvg": 730 + } + }, + "variants": { + "regular": { + "familyName": "Alfa Slab One", + "fullName": "Alfa Slab One Regular", + "postscriptName": "AlfaSlabOne-Regular", + "category": "display", + "capHeight": 778, + "ascent": 1036, + "descent": -333, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 556, + "xWidthAvg": 538, + "subsets": { + "latin": { + "xWidthAvg": 538 + }, + "thai": { + "xWidthAvg": 730 + } + } + } + } + }, + "alice": { + "familyName": "Alice", + "fullName": "Alice Regular", + "postscriptName": "Alice-Regular", + "category": "serif", + "capHeight": 631, + "ascent": 909, + "descent": -234, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 453, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 502 + } + }, + "variants": { + "regular": { + "familyName": "Alice", + "fullName": "Alice Regular", + "postscriptName": "Alice-Regular", + "category": "serif", + "capHeight": 631, + "ascent": 909, + "descent": -234, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 453, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 502 + } + } + } + } + }, + "alike": { + "familyName": "Alike", + "fullName": "Alike Regular", + "postscriptName": "Alike-Regular", + "category": "serif", + "capHeight": 705, + "ascent": 984, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 965 + } + }, + "variants": { + "regular": { + "familyName": "Alike", + "fullName": "Alike Regular", + "postscriptName": "Alike-Regular", + "category": "serif", + "capHeight": 705, + "ascent": 984, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 965 + } + } + } + } + }, + "alikeAngular": { + "familyName": "Alike Angular", + "fullName": "Alike Angular Regular", + "postscriptName": "AlikeAngular-Regular", + "category": "serif", + "capHeight": 705, + "ascent": 984, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 965 + } + }, + "variants": { + "regular": { + "familyName": "Alike Angular", + "fullName": "Alike Angular Regular", + "postscriptName": "AlikeAngular-Regular", + "category": "serif", + "capHeight": 705, + "ascent": 984, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 965 + } + } + } + } + }, + "alkalami": { + "familyName": "Alkalami", + "fullName": "Alkalami", + "postscriptName": "Alkalami-Regular", + "category": "serif", + "capHeight": 660, + "ascent": 1035, + "descent": -857, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 430, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 1033 + } + }, + "variants": { + "regular": { + "familyName": "Alkalami", + "fullName": "Alkalami", + "postscriptName": "Alkalami-Regular", + "category": "serif", + "capHeight": 660, + "ascent": 1035, + "descent": -857, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 430, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 1033 + } + } + } + } + }, + "alkatra": { + "familyName": "Alkatra", + "fullName": "Alkatra Regular", + "postscriptName": "Alkatra-Regular", + "category": "display", + "capHeight": 680, + "ascent": 1095, + "descent": -589, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "500": { + "familyName": "Alkatra", + "fullName": "Alkatra Medium", + "postscriptName": "Alkatra-Medium", + "category": "display", + "capHeight": 680, + "ascent": 1095, + "descent": -589, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Alkatra", + "fullName": "Alkatra SemiBold", + "postscriptName": "Alkatra-SemiBold", + "category": "display", + "capHeight": 680, + "ascent": 1095, + "descent": -589, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Alkatra", + "fullName": "Alkatra Bold", + "postscriptName": "Alkatra-Bold", + "category": "display", + "capHeight": 680, + "ascent": 1095, + "descent": -589, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Alkatra", + "fullName": "Alkatra Regular", + "postscriptName": "Alkatra-Regular", + "category": "display", + "capHeight": 680, + "ascent": 1095, + "descent": -589, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "allan": { + "familyName": "Allan", + "fullName": "Allan Regular", + "postscriptName": "Allan-Regular", + "category": "display", + "capHeight": 1483, + "ascent": 1928, + "descent": -412, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1040, + "xWidthAvg": 638, + "subsets": { + "latin": { + "xWidthAvg": 638 + }, + "thai": { + "xWidthAvg": 1495 + } + }, + "variants": { + "700": { + "familyName": "Allan", + "fullName": "Allan Bold", + "postscriptName": "Allan-Bold", + "category": "display", + "ascent": 1836, + "descent": -724, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 688, + "subsets": { + "latin": { + "xWidthAvg": 688 + }, + "thai": { + "xWidthAvg": 1460 + } + } + }, + "regular": { + "familyName": "Allan", + "fullName": "Allan Regular", + "postscriptName": "Allan-Regular", + "category": "display", + "capHeight": 1483, + "ascent": 1928, + "descent": -412, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1040, + "xWidthAvg": 638, + "subsets": { + "latin": { + "xWidthAvg": 638 + }, + "thai": { + "xWidthAvg": 1495 + } + } + } + } + }, + "allerta": { + "familyName": "Allerta", + "fullName": "Allerta Regular", + "postscriptName": "Allerta-Regular", + "category": "sans-serif", + "capHeight": 737, + "ascent": 1057, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 564, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 274 + } + }, + "variants": { + "regular": { + "familyName": "Allerta", + "fullName": "Allerta Regular", + "postscriptName": "Allerta-Regular", + "category": "sans-serif", + "capHeight": 737, + "ascent": 1057, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 564, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 274 + } + } + } + } + }, + "allertaStencil": { + "familyName": "Allerta Stencil", + "fullName": "Allerta Stencil Regular", + "postscriptName": "AllertaStencil-Regular", + "category": "sans-serif", + "capHeight": 737, + "ascent": 1057, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 564, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 274 + } + }, + "variants": { + "regular": { + "familyName": "Allerta Stencil", + "fullName": "Allerta Stencil Regular", + "postscriptName": "AllertaStencil-Regular", + "category": "sans-serif", + "capHeight": 737, + "ascent": 1057, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 564, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 274 + } + } + } + } + }, + "allison": { + "familyName": "Allison", + "fullName": "Allison Regular", + "postscriptName": "Allison-Regular", + "category": "handwriting", + "capHeight": 630, + "ascent": 890, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 220, + "xWidthAvg": 246, + "subsets": { + "latin": { + "xWidthAvg": 246 + }, + "thai": { + "xWidthAvg": 568 + } + }, + "variants": { + "regular": { + "familyName": "Allison", + "fullName": "Allison Regular", + "postscriptName": "Allison-Regular", + "category": "handwriting", + "capHeight": 630, + "ascent": 890, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 220, + "xWidthAvg": 246, + "subsets": { + "latin": { + "xWidthAvg": 246 + }, + "thai": { + "xWidthAvg": 568 + } + } + } + } + }, + "allura": { + "familyName": "Allura", + "fullName": "Allura Regular", + "postscriptName": "Allura-Regular", + "category": "handwriting", + "capHeight": 590, + "ascent": 800, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 295, + "xWidthAvg": 338, + "subsets": { + "latin": { + "xWidthAvg": 338 + }, + "thai": { + "xWidthAvg": 484 + } + }, + "variants": { + "regular": { + "familyName": "Allura", + "fullName": "Allura Regular", + "postscriptName": "Allura-Regular", + "category": "handwriting", + "capHeight": 590, + "ascent": 800, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 295, + "xWidthAvg": 338, + "subsets": { + "latin": { + "xWidthAvg": 338 + }, + "thai": { + "xWidthAvg": 484 + } + } + } + } + }, + "almarai": { + "familyName": "Almarai", + "fullName": "Almarai", + "postscriptName": "Almarai-Regular", + "category": "sans-serif", + "capHeight": 716, + "ascent": 905, + "descent": -211, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 424, + "subsets": { + "latin": { + "xWidthAvg": 424 + }, + "thai": { + "xWidthAvg": 184 + } + }, + "variants": { + "300": { + "familyName": "Almarai", + "fullName": "Almarai Light", + "postscriptName": "Almarai-Light", + "category": "sans-serif", + "capHeight": 716, + "ascent": 905, + "descent": -211, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 184 + } + } + }, + "700": { + "familyName": "Almarai", + "fullName": "Almarai Bold", + "postscriptName": "Almarai-Bold", + "category": "sans-serif", + "capHeight": 716, + "ascent": 905, + "descent": -211, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 184 + } + } + }, + "800": { + "familyName": "Almarai", + "fullName": "Almarai Extrabold", + "postscriptName": "Almarai-ExtraBold", + "category": "sans-serif", + "capHeight": 716, + "ascent": 905, + "descent": -211, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 184 + } + } + }, + "regular": { + "familyName": "Almarai", + "fullName": "Almarai", + "postscriptName": "Almarai-Regular", + "category": "sans-serif", + "capHeight": 716, + "ascent": 905, + "descent": -211, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 424, + "subsets": { + "latin": { + "xWidthAvg": 424 + }, + "thai": { + "xWidthAvg": 184 + } + } + } + } + }, + "almendra": { + "familyName": "Almendra", + "fullName": "Almendra Regular", + "postscriptName": "Almendra-Regular", + "category": "serif", + "capHeight": 666, + "ascent": 951, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 406, + "subsets": { + "latin": { + "xWidthAvg": 406 + }, + "thai": { + "xWidthAvg": 180 + } + }, + "variants": { + "700": { + "familyName": "Almendra", + "fullName": "Almendra Bold", + "postscriptName": "Almendra-Bold", + "category": "serif", + "capHeight": 666, + "ascent": 951, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 180 + } + } + }, + "regular": { + "familyName": "Almendra", + "fullName": "Almendra Regular", + "postscriptName": "Almendra-Regular", + "category": "serif", + "capHeight": 666, + "ascent": 951, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 406, + "subsets": { + "latin": { + "xWidthAvg": 406 + }, + "thai": { + "xWidthAvg": 180 + } + } + }, + "italic": { + "familyName": "Almendra", + "fullName": "Almendra Italic", + "postscriptName": "Almendra-Italic", + "category": "serif", + "capHeight": 675, + "ascent": 951, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 364, + "subsets": { + "latin": { + "xWidthAvg": 364 + }, + "thai": { + "xWidthAvg": 180 + } + } + }, + "700italic": { + "familyName": "Almendra", + "fullName": "Almendra Bold Italic", + "postscriptName": "Almendra-BoldItalic", + "category": "serif", + "capHeight": 679, + "ascent": 951, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 391, + "subsets": { + "latin": { + "xWidthAvg": 391 + }, + "thai": { + "xWidthAvg": 180 + } + } + } + } + }, + "almendraDisplay": { + "familyName": "Almendra Display", + "fullName": "Almendra Display Regular", + "postscriptName": "AlmendraDisplay-Regular", + "category": "display", + "capHeight": 666, + "ascent": 951, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 408, + "subsets": { + "latin": { + "xWidthAvg": 408 + }, + "thai": { + "xWidthAvg": 180 + } + }, + "variants": { + "regular": { + "familyName": "Almendra Display", + "fullName": "Almendra Display Regular", + "postscriptName": "AlmendraDisplay-Regular", + "category": "display", + "capHeight": 666, + "ascent": 951, + "descent": -345, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 408, + "subsets": { + "latin": { + "xWidthAvg": 408 + }, + "thai": { + "xWidthAvg": 180 + } + } + } + } + }, + "almendraSC": { + "familyName": "Almendra SC", + "fullName": "Almendra SC Regular", + "postscriptName": "AlmendraSC-Regular", + "category": "serif", + "capHeight": 271, + "ascent": 939, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 193, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 180 + } + }, + "variants": { + "regular": { + "familyName": "Almendra SC", + "fullName": "Almendra SC Regular", + "postscriptName": "AlmendraSC-Regular", + "category": "serif", + "capHeight": 271, + "ascent": 939, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 193, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 180 + } + } + } + } + }, + "alumniSans": { + "familyName": "Alumni Sans", + "fullName": "Alumni Sans Regular", + "postscriptName": "AlumniSans-Regular", + "category": "sans-serif", + "capHeight": 591, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 300, + "subsets": { + "latin": { + "xWidthAvg": 300 + }, + "thai": { + "xWidthAvg": 437 + } + }, + "variants": { + "100": { + "familyName": "Alumni Sans", + "fullName": "Alumni Sans Thin", + "postscriptName": "AlumniSans-Thin", + "category": "sans-serif", + "capHeight": 591, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 290, + "subsets": { + "latin": { + "xWidthAvg": 290 + }, + "thai": { + "xWidthAvg": 437 + } + } + }, + "200": { + "familyName": "Alumni Sans", + "fullName": "Alumni Sans ExtraLight", + "postscriptName": "AlumniSans-ExtraLight", + "category": "sans-serif", + "capHeight": 591, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 293, + "subsets": { + "latin": { + "xWidthAvg": 293 + }, + "thai": { + "xWidthAvg": 437 + } + } + }, + "300": { + "familyName": "Alumni Sans", + "fullName": "Alumni Sans Light", + "postscriptName": "AlumniSans-Light", + "category": "sans-serif", + "capHeight": 591, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 296, + "subsets": { + "latin": { + "xWidthAvg": 296 + }, + "thai": { + "xWidthAvg": 437 + } + } + }, + "500": { + "familyName": "Alumni Sans", + "fullName": "Alumni Sans Medium", + "postscriptName": "AlumniSans-Medium", + "category": "sans-serif", + "capHeight": 591, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 304, + "subsets": { + "latin": { + "xWidthAvg": 304 + }, + "thai": { + "xWidthAvg": 437 + } + } + }, + "600": { + "familyName": "Alumni Sans", + "fullName": "Alumni Sans SemiBold", + "postscriptName": "AlumniSans-SemiBold", + "category": "sans-serif", + "capHeight": 591, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 308, + "subsets": { + "latin": { + "xWidthAvg": 308 + }, + "thai": { + "xWidthAvg": 437 + } + } + }, + "700": { + "familyName": "Alumni Sans", + "fullName": "Alumni Sans Bold", + "postscriptName": "AlumniSans-Bold", + "category": "sans-serif", + "capHeight": 591, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 314, + "subsets": { + "latin": { + "xWidthAvg": 314 + }, + "thai": { + "xWidthAvg": 437 + } + } + }, + "800": { + "familyName": "Alumni Sans", + "fullName": "Alumni Sans ExtraBold", + "postscriptName": "AlumniSans-ExtraBold", + "category": "sans-serif", + "capHeight": 591, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 320, + "subsets": { + "latin": { + "xWidthAvg": 320 + }, + "thai": { + "xWidthAvg": 437 + } + } + }, + "900": { + "familyName": "Alumni Sans", + "fullName": "Alumni Sans Black", + "postscriptName": "AlumniSans-Black", + "category": "sans-serif", + "capHeight": 591, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 325, + "subsets": { + "latin": { + "xWidthAvg": 325 + }, + "thai": { + "xWidthAvg": 437 + } + } + }, + "regular": { + "familyName": "Alumni Sans", + "fullName": "Alumni Sans Regular", + "postscriptName": "AlumniSans-Regular", + "category": "sans-serif", + "capHeight": 591, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 300, + "subsets": { + "latin": { + "xWidthAvg": 300 + }, + "thai": { + "xWidthAvg": 437 + } + } + }, + "italic": { + "familyName": "Alumni Sans", + "fullName": "Alumni Sans Italic", + "postscriptName": "AlumniSans-Italic", + "category": "sans-serif", + "capHeight": 591, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 301, + "subsets": { + "latin": { + "xWidthAvg": 301 + }, + "thai": { + "xWidthAvg": 437 + } + } + }, + "900italic": { + "familyName": "Alumni Sans", + "fullName": "Alumni Sans Black Italic", + "postscriptName": "AlumniSans-BlackItalic", + "category": "sans-serif", + "capHeight": 591, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 327, + "subsets": { + "latin": { + "xWidthAvg": 327 + }, + "thai": { + "xWidthAvg": 437 + } + } + }, + "800italic": { + "familyName": "Alumni Sans", + "fullName": "Alumni Sans ExtraBold Italic", + "postscriptName": "AlumniSans-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 591, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 322, + "subsets": { + "latin": { + "xWidthAvg": 322 + }, + "thai": { + "xWidthAvg": 437 + } + } + }, + "700italic": { + "familyName": "Alumni Sans", + "fullName": "Alumni Sans Bold Italic", + "postscriptName": "AlumniSans-BoldItalic", + "category": "sans-serif", + "capHeight": 591, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 316, + "subsets": { + "latin": { + "xWidthAvg": 316 + }, + "thai": { + "xWidthAvg": 437 + } + } + }, + "600italic": { + "familyName": "Alumni Sans", + "fullName": "Alumni Sans SemiBold Italic", + "postscriptName": "AlumniSans-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 591, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 310, + "subsets": { + "latin": { + "xWidthAvg": 310 + }, + "thai": { + "xWidthAvg": 437 + } + } + }, + "500italic": { + "familyName": "Alumni Sans", + "fullName": "Alumni Sans Medium Italic", + "postscriptName": "AlumniSans-MediumItalic", + "category": "sans-serif", + "capHeight": 591, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 305, + "subsets": { + "latin": { + "xWidthAvg": 305 + }, + "thai": { + "xWidthAvg": 437 + } + } + }, + "300italic": { + "familyName": "Alumni Sans", + "fullName": "Alumni Sans Light Italic", + "postscriptName": "AlumniSans-LightItalic", + "category": "sans-serif", + "capHeight": 591, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 297, + "subsets": { + "latin": { + "xWidthAvg": 297 + }, + "thai": { + "xWidthAvg": 437 + } + } + }, + "200italic": { + "familyName": "Alumni Sans", + "fullName": "Alumni Sans ExtraLight Italic", + "postscriptName": "AlumniSans-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 591, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 294, + "subsets": { + "latin": { + "xWidthAvg": 294 + }, + "thai": { + "xWidthAvg": 437 + } + } + }, + "100italic": { + "familyName": "Alumni Sans", + "fullName": "Alumni Sans Thin Italic", + "postscriptName": "AlumniSans-ThinItalic", + "category": "sans-serif", + "capHeight": 591, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 291, + "subsets": { + "latin": { + "xWidthAvg": 291 + }, + "thai": { + "xWidthAvg": 437 + } + } + } + } + }, + "alumniSansCollegiateOne": { + "familyName": "Alumni Sans Collegiate One", + "fullName": "Alumni Sans Collegiate One Regular", + "postscriptName": "AlumniSansCollegiateOne-Regular", + "category": "sans-serif", + "capHeight": 591, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 305, + "subsets": { + "latin": { + "xWidthAvg": 305 + }, + "thai": { + "xWidthAvg": 538 + } + }, + "variants": { + "regular": { + "familyName": "Alumni Sans Collegiate One", + "fullName": "Alumni Sans Collegiate One Regular", + "postscriptName": "AlumniSansCollegiateOne-Regular", + "category": "sans-serif", + "capHeight": 591, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 305, + "subsets": { + "latin": { + "xWidthAvg": 305 + }, + "thai": { + "xWidthAvg": 538 + } + } + }, + "italic": { + "familyName": "Alumni Sans Collegiate One", + "fullName": "Alumni Sans Collegiate One Italic", + "postscriptName": "AlumniSansCollegiateOne-Italic", + "category": "sans-serif", + "capHeight": 591, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 309, + "subsets": { + "latin": { + "xWidthAvg": 309 + }, + "thai": { + "xWidthAvg": 538 + } + } + } + } + }, + "alumniSansInlineOne": { + "familyName": "Alumni Sans Inline One", + "fullName": "Alumni Sans Inline One Regular", + "postscriptName": "AlumniSansInlineOne-Regular", + "category": "display", + "capHeight": 591, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 324, + "subsets": { + "latin": { + "xWidthAvg": 324 + }, + "thai": { + "xWidthAvg": 538 + } + }, + "variants": { + "regular": { + "familyName": "Alumni Sans Inline One", + "fullName": "Alumni Sans Inline One Regular", + "postscriptName": "AlumniSansInlineOne-Regular", + "category": "display", + "capHeight": 591, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 324, + "subsets": { + "latin": { + "xWidthAvg": 324 + }, + "thai": { + "xWidthAvg": 538 + } + } + }, + "italic": { + "familyName": "Alumni Sans Inline One", + "fullName": "Alumni Sans Inline One Italic", + "postscriptName": "AlumniSansInlineOne-Italic", + "category": "display", + "capHeight": 591, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 324, + "subsets": { + "latin": { + "xWidthAvg": 324 + }, + "thai": { + "xWidthAvg": 538 + } + } + } + } + }, + "alumniSansPinstripe": { + "familyName": "Alumni Sans Pinstripe", + "fullName": "Alumni Sans Pinstripe Regular", + "postscriptName": "AlumniSansPinstripe-Regular", + "category": "sans-serif", + "capHeight": 591, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 289, + "subsets": { + "latin": { + "xWidthAvg": 289 + }, + "thai": { + "xWidthAvg": 538 + } + }, + "variants": { + "regular": { + "familyName": "Alumni Sans Pinstripe", + "fullName": "Alumni Sans Pinstripe Regular", + "postscriptName": "AlumniSansPinstripe-Regular", + "category": "sans-serif", + "capHeight": 591, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 289, + "subsets": { + "latin": { + "xWidthAvg": 289 + }, + "thai": { + "xWidthAvg": 538 + } + } + }, + "italic": { + "familyName": "Alumni Sans Pinstripe", + "fullName": "Alumni Sans Pinstripe Italic", + "postscriptName": "AlumniSansPinstripe-Italic", + "category": "sans-serif", + "capHeight": 591, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 291, + "subsets": { + "latin": { + "xWidthAvg": 291 + }, + "thai": { + "xWidthAvg": 538 + } + } + } + } + }, + "amarante": { + "familyName": "Amarante", + "fullName": "Amarante Regular", + "postscriptName": "Amarante-Regular", + "category": "display", + "capHeight": 1530, + "ascent": 2020, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1010, + "xWidthAvg": 908, + "subsets": { + "latin": { + "xWidthAvg": 908 + }, + "thai": { + "xWidthAvg": 1364 + } + }, + "variants": { + "regular": { + "familyName": "Amarante", + "fullName": "Amarante Regular", + "postscriptName": "Amarante-Regular", + "category": "display", + "capHeight": 1530, + "ascent": 2020, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1010, + "xWidthAvg": 908, + "subsets": { + "latin": { + "xWidthAvg": 908 + }, + "thai": { + "xWidthAvg": 1364 + } + } + } + } + }, + "amaranth": { + "familyName": "Amaranth", + "fullName": "Amaranth Regular", + "postscriptName": "Amaranth-Regular", + "category": "sans-serif", + "capHeight": 677, + "ascent": 976, + "descent": -236, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 273 + } + }, + "variants": { + "700": { + "familyName": "Amaranth", + "fullName": "Amaranth Bold", + "postscriptName": "Amaranth-Bold", + "category": "sans-serif", + "capHeight": 677, + "ascent": 976, + "descent": -236, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 273 + } + } + }, + "regular": { + "familyName": "Amaranth", + "fullName": "Amaranth Regular", + "postscriptName": "Amaranth-Regular", + "category": "sans-serif", + "capHeight": 677, + "ascent": 976, + "descent": -236, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 273 + } + } + }, + "italic": { + "familyName": "Amaranth", + "fullName": "Amaranth Italic", + "postscriptName": "Amaranth-Italic", + "category": "sans-serif", + "capHeight": 677, + "ascent": 976, + "descent": -236, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 265 + } + } + }, + "700italic": { + "familyName": "Amaranth", + "fullName": "Amaranth Bold Italic", + "postscriptName": "Amaranth-BoldItalic", + "category": "sans-serif", + "capHeight": 680, + "ascent": 953, + "descent": -258, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 265 + } + } + } + } + }, + "amaticSC": { + "familyName": "Amatic SC", + "fullName": "Amatic SC Regular", + "postscriptName": "AmaticSC-Regular", + "category": "handwriting", + "capHeight": 754, + "ascent": 1016, + "descent": -245, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 659, + "xWidthAvg": 287, + "subsets": { + "latin": { + "xWidthAvg": 287 + }, + "thai": { + "xWidthAvg": 365 + } + }, + "variants": { + "700": { + "familyName": "Amatic SC", + "fullName": "Amatic SC Bold", + "postscriptName": "AmaticSC-Bold", + "category": "handwriting", + "capHeight": 758, + "ascent": 1016, + "descent": -245, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 667, + "xWidthAvg": 293, + "subsets": { + "latin": { + "xWidthAvg": 293 + }, + "thai": { + "xWidthAvg": 365 + } + } + }, + "regular": { + "familyName": "Amatic SC", + "fullName": "Amatic SC Regular", + "postscriptName": "AmaticSC-Regular", + "category": "handwriting", + "capHeight": 754, + "ascent": 1016, + "descent": -245, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 659, + "xWidthAvg": 287, + "subsets": { + "latin": { + "xWidthAvg": 287 + }, + "thai": { + "xWidthAvg": 365 + } + } + } + } + }, + "amethysta": { + "familyName": "Amethysta", + "fullName": "Amethysta Regular", + "postscriptName": "Amethysta-Regular", + "category": "serif", + "capHeight": 1475, + "ascent": 2022, + "descent": -563, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 1004, + "subsets": { + "latin": { + "xWidthAvg": 1004 + }, + "thai": { + "xWidthAvg": 1976 + } + }, + "variants": { + "regular": { + "familyName": "Amethysta", + "fullName": "Amethysta Regular", + "postscriptName": "Amethysta-Regular", + "category": "serif", + "capHeight": 1475, + "ascent": 2022, + "descent": -563, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 1004, + "subsets": { + "latin": { + "xWidthAvg": 1004 + }, + "thai": { + "xWidthAvg": 1976 + } + } + } + } + }, + "amiko": { + "familyName": "Amiko", + "fullName": "Amiko Regular", + "postscriptName": "Amiko-Regular", + "category": "sans-serif", + "capHeight": 696, + "ascent": 928, + "descent": -406, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 770 + } + }, + "variants": { + "600": { + "familyName": "Amiko", + "fullName": "Amiko SemiBold", + "postscriptName": "Amiko-SemiBold", + "category": "sans-serif", + "capHeight": 696, + "ascent": 928, + "descent": -406, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 770 + } + } + }, + "700": { + "familyName": "Amiko", + "fullName": "Amiko Bold", + "postscriptName": "Amiko-Bold", + "category": "sans-serif", + "capHeight": 696, + "ascent": 928, + "descent": -406, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 770 + } + } + }, + "regular": { + "familyName": "Amiko", + "fullName": "Amiko Regular", + "postscriptName": "Amiko-Regular", + "category": "sans-serif", + "capHeight": 696, + "ascent": 928, + "descent": -406, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 770 + } + } + } + } + }, + "amiri": { + "familyName": "Amiri", + "fullName": "Amiri Regular", + "postscriptName": "Amiri-Regular", + "category": "serif", + "capHeight": 646, + "ascent": 1124, + "descent": -634, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 433, + "xWidthAvg": 406, + "subsets": { + "latin": { + "xWidthAvg": 406 + }, + "thai": { + "xWidthAvg": 364 + } + }, + "variants": { + "700": { + "familyName": "Amiri", + "fullName": "Amiri Bold", + "postscriptName": "Amiri-Bold", + "category": "serif", + "capHeight": 646, + "ascent": 1124, + "descent": -634, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 433, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "regular": { + "familyName": "Amiri", + "fullName": "Amiri Regular", + "postscriptName": "Amiri-Regular", + "category": "serif", + "capHeight": 646, + "ascent": 1124, + "descent": -634, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 433, + "xWidthAvg": 406, + "subsets": { + "latin": { + "xWidthAvg": 406 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "italic": { + "familyName": "Amiri", + "fullName": "Amiri Italic", + "postscriptName": "Amiri-Italic", + "category": "serif", + "capHeight": 646, + "ascent": 1124, + "descent": -634, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 433, + "xWidthAvg": 375, + "subsets": { + "latin": { + "xWidthAvg": 375 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "700italic": { + "familyName": "Amiri", + "fullName": "Amiri Bold Italic", + "postscriptName": "Amiri-BoldItalic", + "category": "serif", + "capHeight": 646, + "ascent": 1124, + "descent": -634, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 433, + "xWidthAvg": 408, + "subsets": { + "latin": { + "xWidthAvg": 408 + }, + "thai": { + "xWidthAvg": 364 + } + } + } + } + }, + "amiriQuran": { + "familyName": "Amiri Quran", + "fullName": "Amiri Quran Regular", + "postscriptName": "AmiriQuran-Regular", + "category": "serif", + "capHeight": 646, + "ascent": 1815, + "descent": -634, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 433, + "xWidthAvg": 406, + "subsets": { + "latin": { + "xWidthAvg": 406 + }, + "thai": { + "xWidthAvg": 364 + } + }, + "variants": { + "regular": { + "familyName": "Amiri Quran", + "fullName": "Amiri Quran Regular", + "postscriptName": "AmiriQuran-Regular", + "category": "serif", + "capHeight": 646, + "ascent": 1815, + "descent": -634, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 433, + "xWidthAvg": 406, + "subsets": { + "latin": { + "xWidthAvg": 406 + }, + "thai": { + "xWidthAvg": 364 + } + } + } + } + }, + "amita": { + "familyName": "Amita", + "fullName": "Amita Regular", + "postscriptName": "Amita-Regular", + "category": "handwriting", + "capHeight": 720, + "ascent": 1292, + "descent": -650, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 215 + } + }, + "variants": { + "700": { + "familyName": "Amita", + "fullName": "Amita Bold", + "postscriptName": "Amita-Bold", + "category": "handwriting", + "capHeight": 720, + "ascent": 1292, + "descent": -650, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 215 + } + } + }, + "regular": { + "familyName": "Amita", + "fullName": "Amita Regular", + "postscriptName": "Amita-Regular", + "category": "handwriting", + "capHeight": 720, + "ascent": 1292, + "descent": -650, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 215 + } + } + } + } + }, + "anaheim": { + "familyName": "Anaheim", + "fullName": "Anaheim Regular", + "postscriptName": "Anaheim-Regular", + "category": "sans-serif", + "capHeight": 1284, + "ascent": 1968, + "descent": -672, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 985, + "xWidthAvg": 842, + "subsets": { + "latin": { + "xWidthAvg": 842 + }, + "thai": { + "xWidthAvg": 1055 + } + }, + "variants": { + "500": { + "familyName": "Anaheim", + "fullName": "Anaheim Medium", + "postscriptName": "Anaheim-Medium", + "category": "sans-serif", + "capHeight": 1284, + "ascent": 1968, + "descent": -672, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 990, + "xWidthAvg": 863, + "subsets": { + "latin": { + "xWidthAvg": 863 + }, + "thai": { + "xWidthAvg": 1035 + } + } + }, + "600": { + "familyName": "Anaheim", + "fullName": "Anaheim SemiBold", + "postscriptName": "Anaheim-SemiBold", + "category": "sans-serif", + "capHeight": 1284, + "ascent": 1968, + "descent": -672, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 995, + "xWidthAvg": 887, + "subsets": { + "latin": { + "xWidthAvg": 887 + }, + "thai": { + "xWidthAvg": 1014 + } + } + }, + "700": { + "familyName": "Anaheim", + "fullName": "Anaheim Bold", + "postscriptName": "Anaheim-Bold", + "category": "sans-serif", + "capHeight": 1284, + "ascent": 1968, + "descent": -672, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1005, + "xWidthAvg": 931, + "subsets": { + "latin": { + "xWidthAvg": 931 + }, + "thai": { + "xWidthAvg": 973 + } + } + }, + "800": { + "familyName": "Anaheim", + "fullName": "Anaheim ExtraBold", + "postscriptName": "Anaheim-ExtraBold", + "category": "sans-serif", + "capHeight": 1284, + "ascent": 1968, + "descent": -672, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1015, + "xWidthAvg": 975, + "subsets": { + "latin": { + "xWidthAvg": 975 + }, + "thai": { + "xWidthAvg": 933 + } + } + }, + "regular": { + "familyName": "Anaheim", + "fullName": "Anaheim Regular", + "postscriptName": "Anaheim-Regular", + "category": "sans-serif", + "capHeight": 1284, + "ascent": 1968, + "descent": -672, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 985, + "xWidthAvg": 842, + "subsets": { + "latin": { + "xWidthAvg": 842 + }, + "thai": { + "xWidthAvg": 1055 + } + } + } + } + }, + "andadaPro": { + "familyName": "Andada Pro", + "fullName": "Andada Pro Regular", + "postscriptName": "AndadaPro-Regular", + "category": "serif", + "capHeight": 705, + "ascent": 942, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 634 + } + }, + "variants": { + "500": { + "familyName": "Andada Pro", + "fullName": "Andada Pro Medium", + "postscriptName": "AndadaPro-Medium", + "category": "serif", + "capHeight": 705, + "ascent": 942, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 632 + } + } + }, + "600": { + "familyName": "Andada Pro", + "fullName": "Andada Pro SemiBold", + "postscriptName": "AndadaPro-SemiBold", + "category": "serif", + "capHeight": 705, + "ascent": 942, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 630 + } + } + }, + "700": { + "familyName": "Andada Pro", + "fullName": "Andada Pro Bold", + "postscriptName": "AndadaPro-Bold", + "category": "serif", + "capHeight": 705, + "ascent": 942, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 628 + } + } + }, + "800": { + "familyName": "Andada Pro", + "fullName": "Andada Pro ExtraBold", + "postscriptName": "AndadaPro-ExtraBold", + "category": "serif", + "capHeight": 705, + "ascent": 942, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 626 + } + } + }, + "regular": { + "familyName": "Andada Pro", + "fullName": "Andada Pro Regular", + "postscriptName": "AndadaPro-Regular", + "category": "serif", + "capHeight": 705, + "ascent": 942, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 634 + } + } + }, + "italic": { + "familyName": "Andada Pro", + "fullName": "Andada Pro Italic", + "postscriptName": "AndadaPro-Italic", + "category": "serif", + "capHeight": 705, + "ascent": 942, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 415, + "subsets": { + "latin": { + "xWidthAvg": 415 + }, + "thai": { + "xWidthAvg": 623 + } + } + }, + "800italic": { + "familyName": "Andada Pro", + "fullName": "Andada Pro ExtraBold Italic", + "postscriptName": "AndadaPro-ExtraBoldItalic", + "category": "serif", + "capHeight": 705, + "ascent": 942, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 619 + } + } + }, + "700italic": { + "familyName": "Andada Pro", + "fullName": "Andada Pro Bold Italic", + "postscriptName": "AndadaPro-BoldItalic", + "category": "serif", + "capHeight": 705, + "ascent": 942, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 436, + "subsets": { + "latin": { + "xWidthAvg": 436 + }, + "thai": { + "xWidthAvg": 620 + } + } + }, + "600italic": { + "familyName": "Andada Pro", + "fullName": "Andada Pro SemiBold Italic", + "postscriptName": "AndadaPro-SemiBoldItalic", + "category": "serif", + "capHeight": 705, + "ascent": 942, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 621 + } + } + }, + "500italic": { + "familyName": "Andada Pro", + "fullName": "Andada Pro Medium Italic", + "postscriptName": "AndadaPro-MediumItalic", + "category": "serif", + "capHeight": 705, + "ascent": 942, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 622 + } + } + } + } + }, + "andika": { + "familyName": "Andika", + "fullName": "Andika", + "postscriptName": "Andika", + "category": "sans-serif", + "capHeight": 1485, + "ascent": 2500, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1040, + "xWidthAvg": 958, + "subsets": { + "latin": { + "xWidthAvg": 958 + }, + "thai": { + "xWidthAvg": 1400 + } + }, + "variants": { + "700": { + "familyName": "Andika", + "fullName": "Andika Bold", + "postscriptName": "Andika-Bold", + "category": "sans-serif", + "capHeight": 1485, + "ascent": 2500, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1040, + "xWidthAvg": 1006, + "subsets": { + "latin": { + "xWidthAvg": 1006 + }, + "thai": { + "xWidthAvg": 1400 + } + } + }, + "regular": { + "familyName": "Andika", + "fullName": "Andika", + "postscriptName": "Andika", + "category": "sans-serif", + "capHeight": 1485, + "ascent": 2500, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1040, + "xWidthAvg": 958, + "subsets": { + "latin": { + "xWidthAvg": 958 + }, + "thai": { + "xWidthAvg": 1400 + } + } + }, + "italic": { + "familyName": "Andika", + "fullName": "Andika Italic", + "postscriptName": "Andika-Italic", + "category": "sans-serif", + "capHeight": 1485, + "ascent": 2500, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1040, + "xWidthAvg": 946, + "subsets": { + "latin": { + "xWidthAvg": 946 + }, + "thai": { + "xWidthAvg": 1400 + } + } + }, + "700italic": { + "familyName": "Andika", + "fullName": "Andika Bold Italic", + "postscriptName": "Andika-BoldItalic", + "category": "sans-serif", + "capHeight": 1485, + "ascent": 2500, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1040, + "xWidthAvg": 1003, + "subsets": { + "latin": { + "xWidthAvg": 1003 + }, + "thai": { + "xWidthAvg": 1400 + } + } + } + } + }, + "anekBangla": { + "familyName": "Anek Bangla", + "fullName": "Anek Bangla Regular", + "postscriptName": "AnekBangla-Regular", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2500, + "descent": -1232, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 829, + "subsets": { + "latin": { + "xWidthAvg": 829 + }, + "thai": { + "xWidthAvg": 1160 + } + }, + "variants": { + "100": { + "familyName": "Anek Bangla", + "fullName": "Anek Bangla Thin", + "postscriptName": "AnekBangla-Thin", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2500, + "descent": -1232, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 797, + "subsets": { + "latin": { + "xWidthAvg": 797 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "200": { + "familyName": "Anek Bangla", + "fullName": "Anek Bangla ExtraLight", + "postscriptName": "AnekBangla-ExtraLight", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2500, + "descent": -1232, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 807, + "subsets": { + "latin": { + "xWidthAvg": 807 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "300": { + "familyName": "Anek Bangla", + "fullName": "Anek Bangla Light", + "postscriptName": "AnekBangla-Light", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2500, + "descent": -1232, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 818, + "subsets": { + "latin": { + "xWidthAvg": 818 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "500": { + "familyName": "Anek Bangla", + "fullName": "Anek Bangla Medium", + "postscriptName": "AnekBangla-Medium", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2500, + "descent": -1232, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 837, + "subsets": { + "latin": { + "xWidthAvg": 837 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "600": { + "familyName": "Anek Bangla", + "fullName": "Anek Bangla SemiBold", + "postscriptName": "AnekBangla-SemiBold", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2500, + "descent": -1232, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 857, + "subsets": { + "latin": { + "xWidthAvg": 857 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "700": { + "familyName": "Anek Bangla", + "fullName": "Anek Bangla Bold", + "postscriptName": "AnekBangla-Bold", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2500, + "descent": -1232, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 873, + "subsets": { + "latin": { + "xWidthAvg": 873 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "800": { + "familyName": "Anek Bangla", + "fullName": "Anek Bangla ExtraBold", + "postscriptName": "AnekBangla-ExtraBold", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2500, + "descent": -1232, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 888, + "subsets": { + "latin": { + "xWidthAvg": 888 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "regular": { + "familyName": "Anek Bangla", + "fullName": "Anek Bangla Regular", + "postscriptName": "AnekBangla-Regular", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2500, + "descent": -1232, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 829, + "subsets": { + "latin": { + "xWidthAvg": 829 + }, + "thai": { + "xWidthAvg": 1160 + } + } + } + } + }, + "anekDevanagari": { + "familyName": "Anek Devanagari", + "fullName": "Anek Devanagari Regular", + "postscriptName": "AnekDevanagari-Regular", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2026, + "descent": -1385, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 839, + "subsets": { + "latin": { + "xWidthAvg": 839 + }, + "thai": { + "xWidthAvg": 1160 + } + }, + "variants": { + "100": { + "familyName": "Anek Devanagari", + "fullName": "Anek Devanagari Thin", + "postscriptName": "AnekDevanagari-Thin", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2026, + "descent": -1385, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 804, + "subsets": { + "latin": { + "xWidthAvg": 804 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "200": { + "familyName": "Anek Devanagari", + "fullName": "Anek Devanagari ExtraLight", + "postscriptName": "AnekDevanagari-ExtraLight", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2026, + "descent": -1385, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 816, + "subsets": { + "latin": { + "xWidthAvg": 816 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "300": { + "familyName": "Anek Devanagari", + "fullName": "Anek Devanagari Light", + "postscriptName": "AnekDevanagari-Light", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2026, + "descent": -1385, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 828, + "subsets": { + "latin": { + "xWidthAvg": 828 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "500": { + "familyName": "Anek Devanagari", + "fullName": "Anek Devanagari Medium", + "postscriptName": "AnekDevanagari-Medium", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2026, + "descent": -1385, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 849, + "subsets": { + "latin": { + "xWidthAvg": 849 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "600": { + "familyName": "Anek Devanagari", + "fullName": "Anek Devanagari SemiBold", + "postscriptName": "AnekDevanagari-SemiBold", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2026, + "descent": -1385, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 869, + "subsets": { + "latin": { + "xWidthAvg": 869 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "700": { + "familyName": "Anek Devanagari", + "fullName": "Anek Devanagari Bold", + "postscriptName": "AnekDevanagari-Bold", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2026, + "descent": -1385, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 886, + "subsets": { + "latin": { + "xWidthAvg": 886 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "800": { + "familyName": "Anek Devanagari", + "fullName": "Anek Devanagari ExtraBold", + "postscriptName": "AnekDevanagari-ExtraBold", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2026, + "descent": -1385, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 902, + "subsets": { + "latin": { + "xWidthAvg": 902 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "regular": { + "familyName": "Anek Devanagari", + "fullName": "Anek Devanagari Regular", + "postscriptName": "AnekDevanagari-Regular", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2026, + "descent": -1385, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 839, + "subsets": { + "latin": { + "xWidthAvg": 839 + }, + "thai": { + "xWidthAvg": 1160 + } + } + } + } + }, + "anekGujarati": { + "familyName": "Anek Gujarati", + "fullName": "Anek Gujarati Regular", + "postscriptName": "AnekGujarati-Regular", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1975, + "descent": -1064, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 836, + "subsets": { + "latin": { + "xWidthAvg": 836 + }, + "thai": { + "xWidthAvg": 1160 + } + }, + "variants": { + "100": { + "familyName": "Anek Gujarati", + "fullName": "Anek Gujarati Thin", + "postscriptName": "AnekGujarati-Thin", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1975, + "descent": -1064, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 802, + "subsets": { + "latin": { + "xWidthAvg": 802 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "200": { + "familyName": "Anek Gujarati", + "fullName": "Anek Gujarati ExtraLight", + "postscriptName": "AnekGujarati-ExtraLight", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1975, + "descent": -1064, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 813, + "subsets": { + "latin": { + "xWidthAvg": 813 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "300": { + "familyName": "Anek Gujarati", + "fullName": "Anek Gujarati Light", + "postscriptName": "AnekGujarati-Light", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1975, + "descent": -1064, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 825, + "subsets": { + "latin": { + "xWidthAvg": 825 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "500": { + "familyName": "Anek Gujarati", + "fullName": "Anek Gujarati Medium", + "postscriptName": "AnekGujarati-Medium", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1975, + "descent": -1064, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 845, + "subsets": { + "latin": { + "xWidthAvg": 845 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "600": { + "familyName": "Anek Gujarati", + "fullName": "Anek Gujarati SemiBold", + "postscriptName": "AnekGujarati-SemiBold", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1975, + "descent": -1064, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 866, + "subsets": { + "latin": { + "xWidthAvg": 866 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "700": { + "familyName": "Anek Gujarati", + "fullName": "Anek Gujarati Bold", + "postscriptName": "AnekGujarati-Bold", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1975, + "descent": -1064, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 882, + "subsets": { + "latin": { + "xWidthAvg": 882 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "800": { + "familyName": "Anek Gujarati", + "fullName": "Anek Gujarati ExtraBold", + "postscriptName": "AnekGujarati-ExtraBold", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1975, + "descent": -1064, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 898, + "subsets": { + "latin": { + "xWidthAvg": 898 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "regular": { + "familyName": "Anek Gujarati", + "fullName": "Anek Gujarati Regular", + "postscriptName": "AnekGujarati-Regular", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1975, + "descent": -1064, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 836, + "subsets": { + "latin": { + "xWidthAvg": 836 + }, + "thai": { + "xWidthAvg": 1160 + } + } + } + } + }, + "anekGurmukhi": { + "familyName": "Anek Gurmukhi", + "fullName": "Anek Gurmukhi Regular", + "postscriptName": "AnekGurmukhi-Regular", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1500, + "descent": -900, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 494, + "xWidthAvg": 859, + "subsets": { + "latin": { + "xWidthAvg": 859 + }, + "thai": { + "xWidthAvg": 1160 + } + }, + "variants": { + "100": { + "familyName": "Anek Gurmukhi", + "fullName": "Anek Gurmukhi Thin", + "postscriptName": "AnekGurmukhi-Thin", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1500, + "descent": -900, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 494, + "xWidthAvg": 825, + "subsets": { + "latin": { + "xWidthAvg": 825 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "200": { + "familyName": "Anek Gurmukhi", + "fullName": "Anek Gurmukhi ExtraLight", + "postscriptName": "AnekGurmukhi-ExtraLight", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1500, + "descent": -900, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 494, + "xWidthAvg": 837, + "subsets": { + "latin": { + "xWidthAvg": 837 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "300": { + "familyName": "Anek Gurmukhi", + "fullName": "Anek Gurmukhi Light", + "postscriptName": "AnekGurmukhi-Light", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1500, + "descent": -900, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 494, + "xWidthAvg": 848, + "subsets": { + "latin": { + "xWidthAvg": 848 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "500": { + "familyName": "Anek Gurmukhi", + "fullName": "Anek Gurmukhi Medium", + "postscriptName": "AnekGurmukhi-Medium", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1500, + "descent": -900, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 494, + "xWidthAvg": 868, + "subsets": { + "latin": { + "xWidthAvg": 868 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "600": { + "familyName": "Anek Gurmukhi", + "fullName": "Anek Gurmukhi SemiBold", + "postscriptName": "AnekGurmukhi-SemiBold", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1500, + "descent": -900, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 494, + "xWidthAvg": 888, + "subsets": { + "latin": { + "xWidthAvg": 888 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "700": { + "familyName": "Anek Gurmukhi", + "fullName": "Anek Gurmukhi Bold", + "postscriptName": "AnekGurmukhi-Bold", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1500, + "descent": -900, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 494, + "xWidthAvg": 905, + "subsets": { + "latin": { + "xWidthAvg": 905 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "800": { + "familyName": "Anek Gurmukhi", + "fullName": "Anek Gurmukhi ExtraBold", + "postscriptName": "AnekGurmukhi-ExtraBold", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1500, + "descent": -900, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 494, + "xWidthAvg": 921, + "subsets": { + "latin": { + "xWidthAvg": 921 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "regular": { + "familyName": "Anek Gurmukhi", + "fullName": "Anek Gurmukhi Regular", + "postscriptName": "AnekGurmukhi-Regular", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1500, + "descent": -900, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 494, + "xWidthAvg": 859, + "subsets": { + "latin": { + "xWidthAvg": 859 + }, + "thai": { + "xWidthAvg": 1160 + } + } + } + } + }, + "anekKannada": { + "familyName": "Anek Kannada", + "fullName": "Anek Kannada Regular", + "postscriptName": "AnekKannada-Regular", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2030, + "descent": -1310, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 848, + "subsets": { + "latin": { + "xWidthAvg": 848 + }, + "thai": { + "xWidthAvg": 1160 + } + }, + "variants": { + "100": { + "familyName": "Anek Kannada", + "fullName": "Anek Kannada Thin", + "postscriptName": "AnekKannada-Thin", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2030, + "descent": -1310, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 812, + "subsets": { + "latin": { + "xWidthAvg": 812 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "200": { + "familyName": "Anek Kannada", + "fullName": "Anek Kannada ExtraLight", + "postscriptName": "AnekKannada-ExtraLight", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2030, + "descent": -1310, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 824, + "subsets": { + "latin": { + "xWidthAvg": 824 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "300": { + "familyName": "Anek Kannada", + "fullName": "Anek Kannada Light", + "postscriptName": "AnekKannada-Light", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2030, + "descent": -1310, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 836, + "subsets": { + "latin": { + "xWidthAvg": 836 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "500": { + "familyName": "Anek Kannada", + "fullName": "Anek Kannada Medium", + "postscriptName": "AnekKannada-Medium", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2030, + "descent": -1310, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 857, + "subsets": { + "latin": { + "xWidthAvg": 857 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "600": { + "familyName": "Anek Kannada", + "fullName": "Anek Kannada SemiBold", + "postscriptName": "AnekKannada-SemiBold", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2030, + "descent": -1310, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 878, + "subsets": { + "latin": { + "xWidthAvg": 878 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "700": { + "familyName": "Anek Kannada", + "fullName": "Anek Kannada Bold", + "postscriptName": "AnekKannada-Bold", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2030, + "descent": -1310, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 895, + "subsets": { + "latin": { + "xWidthAvg": 895 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "800": { + "familyName": "Anek Kannada", + "fullName": "Anek Kannada ExtraBold", + "postscriptName": "AnekKannada-ExtraBold", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2030, + "descent": -1310, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 912, + "subsets": { + "latin": { + "xWidthAvg": 912 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "regular": { + "familyName": "Anek Kannada", + "fullName": "Anek Kannada Regular", + "postscriptName": "AnekKannada-Regular", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2030, + "descent": -1310, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 848, + "subsets": { + "latin": { + "xWidthAvg": 848 + }, + "thai": { + "xWidthAvg": 1160 + } + } + } + } + }, + "anekLatin": { + "familyName": "Anek Latin", + "fullName": "Anek Latin Regular", + "postscriptName": "AnekLatin-Regular", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1800, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 838, + "subsets": { + "latin": { + "xWidthAvg": 838 + }, + "thai": { + "xWidthAvg": 1160 + } + }, + "variants": { + "100": { + "familyName": "Anek Latin", + "fullName": "Anek Latin Thin", + "postscriptName": "AnekLatin-Thin", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1800, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 806, + "subsets": { + "latin": { + "xWidthAvg": 806 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "200": { + "familyName": "Anek Latin", + "fullName": "Anek Latin ExtraLight", + "postscriptName": "AnekLatin-ExtraLight", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1800, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 817, + "subsets": { + "latin": { + "xWidthAvg": 817 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "300": { + "familyName": "Anek Latin", + "fullName": "Anek Latin Light", + "postscriptName": "AnekLatin-Light", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1800, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 828, + "subsets": { + "latin": { + "xWidthAvg": 828 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "500": { + "familyName": "Anek Latin", + "fullName": "Anek Latin Medium", + "postscriptName": "AnekLatin-Medium", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1800, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 847, + "subsets": { + "latin": { + "xWidthAvg": 847 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "600": { + "familyName": "Anek Latin", + "fullName": "Anek Latin SemiBold", + "postscriptName": "AnekLatin-SemiBold", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1800, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 868, + "subsets": { + "latin": { + "xWidthAvg": 868 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "700": { + "familyName": "Anek Latin", + "fullName": "Anek Latin Bold", + "postscriptName": "AnekLatin-Bold", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1800, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 885, + "subsets": { + "latin": { + "xWidthAvg": 885 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "800": { + "familyName": "Anek Latin", + "fullName": "Anek Latin ExtraBold", + "postscriptName": "AnekLatin-ExtraBold", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1800, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 901, + "subsets": { + "latin": { + "xWidthAvg": 901 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "regular": { + "familyName": "Anek Latin", + "fullName": "Anek Latin Regular", + "postscriptName": "AnekLatin-Regular", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1800, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 838, + "subsets": { + "latin": { + "xWidthAvg": 838 + }, + "thai": { + "xWidthAvg": 1160 + } + } + } + } + }, + "anekMalayalam": { + "familyName": "Anek Malayalam", + "fullName": "Anek Malayalam Regular", + "postscriptName": "AnekMalayalam-Regular", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2035, + "descent": -830, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 847, + "subsets": { + "latin": { + "xWidthAvg": 847 + }, + "thai": { + "xWidthAvg": 1160 + } + }, + "variants": { + "100": { + "familyName": "Anek Malayalam", + "fullName": "Anek Malayalam Thin", + "postscriptName": "AnekMalayalam-Thin", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2035, + "descent": -830, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 810, + "subsets": { + "latin": { + "xWidthAvg": 810 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "200": { + "familyName": "Anek Malayalam", + "fullName": "Anek Malayalam ExtraLight", + "postscriptName": "AnekMalayalam-ExtraLight", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2035, + "descent": -830, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 823, + "subsets": { + "latin": { + "xWidthAvg": 823 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "300": { + "familyName": "Anek Malayalam", + "fullName": "Anek Malayalam Light", + "postscriptName": "AnekMalayalam-Light", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2035, + "descent": -830, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 835, + "subsets": { + "latin": { + "xWidthAvg": 835 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "500": { + "familyName": "Anek Malayalam", + "fullName": "Anek Malayalam Medium", + "postscriptName": "AnekMalayalam-Medium", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2035, + "descent": -830, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 857, + "subsets": { + "latin": { + "xWidthAvg": 857 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "600": { + "familyName": "Anek Malayalam", + "fullName": "Anek Malayalam SemiBold", + "postscriptName": "AnekMalayalam-SemiBold", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2035, + "descent": -830, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 879, + "subsets": { + "latin": { + "xWidthAvg": 879 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "700": { + "familyName": "Anek Malayalam", + "fullName": "Anek Malayalam Bold", + "postscriptName": "AnekMalayalam-Bold", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2035, + "descent": -830, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 897, + "subsets": { + "latin": { + "xWidthAvg": 897 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "800": { + "familyName": "Anek Malayalam", + "fullName": "Anek Malayalam ExtraBold", + "postscriptName": "AnekMalayalam-ExtraBold", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2035, + "descent": -830, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 914, + "subsets": { + "latin": { + "xWidthAvg": 914 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "regular": { + "familyName": "Anek Malayalam", + "fullName": "Anek Malayalam Regular", + "postscriptName": "AnekMalayalam-Regular", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 2035, + "descent": -830, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 847, + "subsets": { + "latin": { + "xWidthAvg": 847 + }, + "thai": { + "xWidthAvg": 1160 + } + } + } + } + }, + "anekOdia": { + "familyName": "Anek Odia", + "fullName": "Anek Odia Regular", + "postscriptName": "AnekOdia-Regular", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1960, + "descent": -1400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 838, + "subsets": { + "latin": { + "xWidthAvg": 838 + }, + "thai": { + "xWidthAvg": 1160 + } + }, + "variants": { + "100": { + "familyName": "Anek Odia", + "fullName": "Anek Odia Thin", + "postscriptName": "AnekOdia-Thin", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1960, + "descent": -1400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 806, + "subsets": { + "latin": { + "xWidthAvg": 806 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "200": { + "familyName": "Anek Odia", + "fullName": "Anek Odia ExtraLight", + "postscriptName": "AnekOdia-ExtraLight", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1960, + "descent": -1400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 817, + "subsets": { + "latin": { + "xWidthAvg": 817 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "300": { + "familyName": "Anek Odia", + "fullName": "Anek Odia Light", + "postscriptName": "AnekOdia-Light", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1960, + "descent": -1400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 828, + "subsets": { + "latin": { + "xWidthAvg": 828 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "500": { + "familyName": "Anek Odia", + "fullName": "Anek Odia Medium", + "postscriptName": "AnekOdia-Medium", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1960, + "descent": -1400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 847, + "subsets": { + "latin": { + "xWidthAvg": 847 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "600": { + "familyName": "Anek Odia", + "fullName": "Anek Odia SemiBold", + "postscriptName": "AnekOdia-SemiBold", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1960, + "descent": -1400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 868, + "subsets": { + "latin": { + "xWidthAvg": 868 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "700": { + "familyName": "Anek Odia", + "fullName": "Anek Odia Bold", + "postscriptName": "AnekOdia-Bold", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1960, + "descent": -1400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 885, + "subsets": { + "latin": { + "xWidthAvg": 885 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "800": { + "familyName": "Anek Odia", + "fullName": "Anek Odia ExtraBold", + "postscriptName": "AnekOdia-ExtraBold", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1960, + "descent": -1400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 901, + "subsets": { + "latin": { + "xWidthAvg": 901 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "regular": { + "familyName": "Anek Odia", + "fullName": "Anek Odia Regular", + "postscriptName": "AnekOdia-Regular", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1960, + "descent": -1400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 838, + "subsets": { + "latin": { + "xWidthAvg": 838 + }, + "thai": { + "xWidthAvg": 1160 + } + } + } + } + }, + "anekTamil": { + "familyName": "Anek Tamil", + "fullName": "Anek Tamil Regular", + "postscriptName": "AnekTamil-Regular", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1963, + "descent": -853, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 859, + "subsets": { + "latin": { + "xWidthAvg": 859 + }, + "thai": { + "xWidthAvg": 1160 + } + }, + "variants": { + "100": { + "familyName": "Anek Tamil", + "fullName": "Anek Tamil Thin", + "postscriptName": "AnekTamil-Thin", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1963, + "descent": -853, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 825, + "subsets": { + "latin": { + "xWidthAvg": 825 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "200": { + "familyName": "Anek Tamil", + "fullName": "Anek Tamil ExtraLight", + "postscriptName": "AnekTamil-ExtraLight", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1963, + "descent": -853, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 837, + "subsets": { + "latin": { + "xWidthAvg": 837 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "300": { + "familyName": "Anek Tamil", + "fullName": "Anek Tamil Light", + "postscriptName": "AnekTamil-Light", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1963, + "descent": -853, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 848, + "subsets": { + "latin": { + "xWidthAvg": 848 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "500": { + "familyName": "Anek Tamil", + "fullName": "Anek Tamil Medium", + "postscriptName": "AnekTamil-Medium", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1963, + "descent": -853, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 868, + "subsets": { + "latin": { + "xWidthAvg": 868 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "600": { + "familyName": "Anek Tamil", + "fullName": "Anek Tamil SemiBold", + "postscriptName": "AnekTamil-SemiBold", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1963, + "descent": -853, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 888, + "subsets": { + "latin": { + "xWidthAvg": 888 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "700": { + "familyName": "Anek Tamil", + "fullName": "Anek Tamil Bold", + "postscriptName": "AnekTamil-Bold", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1963, + "descent": -853, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 905, + "subsets": { + "latin": { + "xWidthAvg": 905 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "800": { + "familyName": "Anek Tamil", + "fullName": "Anek Tamil ExtraBold", + "postscriptName": "AnekTamil-ExtraBold", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1963, + "descent": -853, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 921, + "subsets": { + "latin": { + "xWidthAvg": 921 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "regular": { + "familyName": "Anek Tamil", + "fullName": "Anek Tamil Regular", + "postscriptName": "AnekTamil-Regular", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1963, + "descent": -853, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 859, + "subsets": { + "latin": { + "xWidthAvg": 859 + }, + "thai": { + "xWidthAvg": 1160 + } + } + } + } + }, + "anekTelugu": { + "familyName": "Anek Telugu", + "fullName": "Anek Telugu Regular", + "postscriptName": "AnekTelugu-Regular", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1800, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 845, + "subsets": { + "latin": { + "xWidthAvg": 845 + }, + "thai": { + "xWidthAvg": 1160 + } + }, + "variants": { + "100": { + "familyName": "Anek Telugu", + "fullName": "Anek Telugu Thin", + "postscriptName": "AnekTelugu-Thin", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1800, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 807, + "subsets": { + "latin": { + "xWidthAvg": 807 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "200": { + "familyName": "Anek Telugu", + "fullName": "Anek Telugu ExtraLight", + "postscriptName": "AnekTelugu-ExtraLight", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1800, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 820, + "subsets": { + "latin": { + "xWidthAvg": 820 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "300": { + "familyName": "Anek Telugu", + "fullName": "Anek Telugu Light", + "postscriptName": "AnekTelugu-Light", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1800, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 833, + "subsets": { + "latin": { + "xWidthAvg": 833 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "500": { + "familyName": "Anek Telugu", + "fullName": "Anek Telugu Medium", + "postscriptName": "AnekTelugu-Medium", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1800, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 855, + "subsets": { + "latin": { + "xWidthAvg": 855 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "600": { + "familyName": "Anek Telugu", + "fullName": "Anek Telugu SemiBold", + "postscriptName": "AnekTelugu-SemiBold", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1800, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 877, + "subsets": { + "latin": { + "xWidthAvg": 877 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "700": { + "familyName": "Anek Telugu", + "fullName": "Anek Telugu Bold", + "postscriptName": "AnekTelugu-Bold", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1800, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 895, + "subsets": { + "latin": { + "xWidthAvg": 895 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "800": { + "familyName": "Anek Telugu", + "fullName": "Anek Telugu ExtraBold", + "postscriptName": "AnekTelugu-ExtraBold", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1800, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 913, + "subsets": { + "latin": { + "xWidthAvg": 913 + }, + "thai": { + "xWidthAvg": 1160 + } + } + }, + "regular": { + "familyName": "Anek Telugu", + "fullName": "Anek Telugu Regular", + "postscriptName": "AnekTelugu-Regular", + "category": "sans-serif", + "capHeight": 1278, + "ascent": 1800, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 978, + "xWidthAvg": 845, + "subsets": { + "latin": { + "xWidthAvg": 845 + }, + "thai": { + "xWidthAvg": 1160 + } + } + } + } + }, + "angkor": { + "familyName": "Angkor", + "fullName": "Angkor Regular", + "postscriptName": "Angkor-Regular", + "category": "display", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 1180, + "subsets": { + "latin": { + "xWidthAvg": 1180 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Angkor", + "fullName": "Angkor Regular", + "postscriptName": "Angkor-Regular", + "category": "display", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 1180, + "subsets": { + "latin": { + "xWidthAvg": 1180 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "annapurnaSIL": { + "familyName": "Annapurna SIL", + "fullName": "Annapurna SIL", + "postscriptName": "AnnapurnaSIL-Regular", + "category": "serif", + "capHeight": 1434, + "ascent": 1939, + "descent": -984, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 842, + "subsets": { + "latin": { + "xWidthAvg": 842 + }, + "thai": { + "xWidthAvg": 922 + } + }, + "variants": { + "700": { + "familyName": "Annapurna SIL", + "fullName": "Annapurna SIL Bold", + "postscriptName": "AnnapurnaSIL-Bold", + "category": "serif", + "capHeight": 1434, + "ascent": 1939, + "descent": -984, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 903, + "subsets": { + "latin": { + "xWidthAvg": 903 + }, + "thai": { + "xWidthAvg": 1260 + } + } + }, + "regular": { + "familyName": "Annapurna SIL", + "fullName": "Annapurna SIL", + "postscriptName": "AnnapurnaSIL-Regular", + "category": "serif", + "capHeight": 1434, + "ascent": 1939, + "descent": -984, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 842, + "subsets": { + "latin": { + "xWidthAvg": 842 + }, + "thai": { + "xWidthAvg": 922 + } + } + } + } + }, + "annieUseYourTelescope": { + "familyName": "Annie Use Your Telescope", + "fullName": "Annie Use Your Telescope Regular", + "postscriptName": "AnnieUseYourTelescope-Regular", + "category": "handwriting", + "capHeight": 730, + "ascent": 1049, + "descent": -419, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 427, + "xWidthAvg": 353, + "subsets": { + "latin": { + "xWidthAvg": 353 + }, + "thai": { + "xWidthAvg": 384 + } + }, + "variants": { + "regular": { + "familyName": "Annie Use Your Telescope", + "fullName": "Annie Use Your Telescope Regular", + "postscriptName": "AnnieUseYourTelescope-Regular", + "category": "handwriting", + "capHeight": 730, + "ascent": 1049, + "descent": -419, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 427, + "xWidthAvg": 353, + "subsets": { + "latin": { + "xWidthAvg": 353 + }, + "thai": { + "xWidthAvg": 384 + } + } + } + } + }, + "anonymousPro": { + "familyName": "Anonymous Pro", + "fullName": "Anonymous Pro Regular", + "postscriptName": "AnonymousPro-Regular", + "category": "monospace", + "capHeight": 1305, + "ascent": 1675, + "descent": -373, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 932, + "xWidthAvg": 1118, + "subsets": { + "latin": { + "xWidthAvg": 1118 + }, + "thai": { + "xWidthAvg": 1118 + } + }, + "variants": { + "700": { + "familyName": "Anonymous Pro", + "fullName": "Anonymous Pro Bold", + "postscriptName": "AnonymousPro-Bold", + "category": "monospace", + "capHeight": 1305, + "ascent": 1675, + "descent": -373, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 932, + "xWidthAvg": 1118, + "subsets": { + "latin": { + "xWidthAvg": 1118 + }, + "thai": { + "xWidthAvg": 1118 + } + } + }, + "regular": { + "familyName": "Anonymous Pro", + "fullName": "Anonymous Pro Regular", + "postscriptName": "AnonymousPro-Regular", + "category": "monospace", + "capHeight": 1305, + "ascent": 1675, + "descent": -373, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 932, + "xWidthAvg": 1118, + "subsets": { + "latin": { + "xWidthAvg": 1118 + }, + "thai": { + "xWidthAvg": 1118 + } + } + }, + "italic": { + "familyName": "Anonymous Pro", + "fullName": "Anonymous Pro Italic", + "postscriptName": "AnonymousPro-Italic", + "category": "monospace", + "capHeight": 1305, + "ascent": 1675, + "descent": -373, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 932, + "xWidthAvg": 1118, + "subsets": { + "latin": { + "xWidthAvg": 1118 + }, + "thai": { + "xWidthAvg": 1118 + } + } + }, + "700italic": { + "familyName": "Anonymous Pro", + "fullName": "Anonymous Pro Bold Italic", + "postscriptName": "AnonymousPro-BoldItalic", + "category": "monospace", + "capHeight": 1305, + "ascent": 1675, + "descent": -373, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 932, + "xWidthAvg": 1118, + "subsets": { + "latin": { + "xWidthAvg": 1118 + }, + "thai": { + "xWidthAvg": 1118 + } + } + } + } + }, + "anta": { + "familyName": "Anta", + "fullName": "Anta Regular", + "postscriptName": "Anta-Regular", + "category": "sans-serif", + "capHeight": 1422, + "ascent": 1966, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1049, + "xWidthAvg": 970, + "subsets": { + "latin": { + "xWidthAvg": 970 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Anta", + "fullName": "Anta Regular", + "postscriptName": "Anta-Regular", + "category": "sans-serif", + "capHeight": 1422, + "ascent": 1966, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1049, + "xWidthAvg": 970, + "subsets": { + "latin": { + "xWidthAvg": 970 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "antic": { + "familyName": "Antic", + "fullName": "Antic Regular", + "postscriptName": "Antic-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 940, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 430, + "subsets": { + "latin": { + "xWidthAvg": 430 + }, + "thai": { + "xWidthAvg": 299 + } + }, + "variants": { + "regular": { + "familyName": "Antic", + "fullName": "Antic Regular", + "postscriptName": "Antic-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 940, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 430, + "subsets": { + "latin": { + "xWidthAvg": 430 + }, + "thai": { + "xWidthAvg": 299 + } + } + } + } + }, + "anticDidone": { + "familyName": "Antic Didone", + "fullName": "Antic Didone Regular", + "postscriptName": "AnticDidone-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 299 + } + }, + "variants": { + "regular": { + "familyName": "Antic Didone", + "fullName": "Antic Didone Regular", + "postscriptName": "AnticDidone-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 299 + } + } + } + } + }, + "anticSlab": { + "familyName": "Antic Slab", + "fullName": "Antic Slab Regular", + "postscriptName": "AnticSlab-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 299 + } + }, + "variants": { + "regular": { + "familyName": "Antic Slab", + "fullName": "Antic Slab Regular", + "postscriptName": "AnticSlab-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 299 + } + } + } + } + }, + "anton": { + "familyName": "Anton", + "fullName": "Anton Regular", + "postscriptName": "Anton-Regular", + "category": "sans-serif", + "capHeight": 1760, + "ascent": 2409, + "descent": -674, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1500, + "xWidthAvg": 828, + "subsets": { + "latin": { + "xWidthAvg": 828 + }, + "thai": { + "xWidthAvg": 1022 + } + }, + "variants": { + "regular": { + "familyName": "Anton", + "fullName": "Anton Regular", + "postscriptName": "Anton-Regular", + "category": "sans-serif", + "capHeight": 1760, + "ascent": 2409, + "descent": -674, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1500, + "xWidthAvg": 828, + "subsets": { + "latin": { + "xWidthAvg": 828 + }, + "thai": { + "xWidthAvg": 1022 + } + } + } + } + }, + "antonSC": { + "familyName": "Anton SC", + "fullName": "Anton SC Regular", + "postscriptName": "AntonSC-Regular", + "category": "sans-serif", + "capHeight": 1760, + "ascent": 2409, + "descent": -674, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1500, + "xWidthAvg": 828, + "subsets": { + "latin": { + "xWidthAvg": 828 + }, + "thai": { + "xWidthAvg": 1022 + } + }, + "variants": { + "regular": { + "familyName": "Anton SC", + "fullName": "Anton SC Regular", + "postscriptName": "AntonSC-Regular", + "category": "sans-serif", + "capHeight": 1760, + "ascent": 2409, + "descent": -674, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1500, + "xWidthAvg": 828, + "subsets": { + "latin": { + "xWidthAvg": 828 + }, + "thai": { + "xWidthAvg": 1022 + } + } + } + } + }, + "antonio": { + "familyName": "Antonio", + "fullName": "Antonio Regular", + "postscriptName": "Antonio-Regular", + "category": "sans-serif", + "capHeight": 1760, + "ascent": 2365, + "descent": -285, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1500, + "xWidthAvg": 765, + "subsets": { + "latin": { + "xWidthAvg": 765 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "100": { + "familyName": "Antonio", + "fullName": "Antonio Thin", + "postscriptName": "Antonio-Thin", + "category": "sans-serif", + "capHeight": 1760, + "ascent": 2365, + "descent": -285, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1500, + "xWidthAvg": 716, + "subsets": { + "latin": { + "xWidthAvg": 716 + }, + "thai": { + "xWidthAvg": 1152 + } + } + }, + "200": { + "familyName": "Antonio", + "fullName": "Antonio ExtraLight", + "postscriptName": "Antonio-ExtraLight", + "category": "sans-serif", + "capHeight": 1760, + "ascent": 2365, + "descent": -285, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1500, + "xWidthAvg": 730, + "subsets": { + "latin": { + "xWidthAvg": 730 + }, + "thai": { + "xWidthAvg": 1117 + } + } + }, + "300": { + "familyName": "Antonio", + "fullName": "Antonio Light", + "postscriptName": "Antonio-Light", + "category": "sans-serif", + "capHeight": 1760, + "ascent": 2365, + "descent": -285, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1500, + "xWidthAvg": 744, + "subsets": { + "latin": { + "xWidthAvg": 744 + }, + "thai": { + "xWidthAvg": 1081 + } + } + }, + "500": { + "familyName": "Antonio", + "fullName": "Antonio Medium", + "postscriptName": "Antonio-Medium", + "category": "sans-serif", + "capHeight": 1760, + "ascent": 2365, + "descent": -285, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1500, + "xWidthAvg": 771, + "subsets": { + "latin": { + "xWidthAvg": 771 + }, + "thai": { + "xWidthAvg": 1030 + } + } + }, + "600": { + "familyName": "Antonio", + "fullName": "Antonio SemiBold", + "postscriptName": "Antonio-SemiBold", + "category": "sans-serif", + "capHeight": 1760, + "ascent": 2365, + "descent": -285, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1500, + "xWidthAvg": 776, + "subsets": { + "latin": { + "xWidthAvg": 776 + }, + "thai": { + "xWidthAvg": 1037 + } + } + }, + "700": { + "familyName": "Antonio", + "fullName": "Antonio Bold", + "postscriptName": "Antonio-Bold", + "category": "sans-serif", + "capHeight": 1760, + "ascent": 2365, + "descent": -285, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1500, + "xWidthAvg": 791, + "subsets": { + "latin": { + "xWidthAvg": 791 + }, + "thai": { + "xWidthAvg": 1054 + } + } + }, + "regular": { + "familyName": "Antonio", + "fullName": "Antonio Regular", + "postscriptName": "Antonio-Regular", + "category": "sans-serif", + "capHeight": 1760, + "ascent": 2365, + "descent": -285, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1500, + "xWidthAvg": 765, + "subsets": { + "latin": { + "xWidthAvg": 765 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "anuphan": { + "familyName": "Anuphan", + "fullName": "Anuphan Regular", + "postscriptName": "Anuphan-Regular", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 570, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 546 + } + }, + "variants": { + "100": { + "familyName": "Anuphan", + "fullName": "Anuphan Thin", + "postscriptName": "Anuphan-Thin", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 566, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 519 + } + } + }, + "200": { + "familyName": "Anuphan", + "fullName": "Anuphan ExtraLight", + "postscriptName": "Anuphan-ExtraLight", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 567, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 528 + } + } + }, + "300": { + "familyName": "Anuphan", + "fullName": "Anuphan Light", + "postscriptName": "Anuphan-Light", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 569, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 537 + } + } + }, + "500": { + "familyName": "Anuphan", + "fullName": "Anuphan Medium", + "postscriptName": "Anuphan-Medium", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 572, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 557 + } + } + }, + "600": { + "familyName": "Anuphan", + "fullName": "Anuphan SemiBold", + "postscriptName": "Anuphan-SemiBold", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 573, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 568 + } + } + }, + "700": { + "familyName": "Anuphan", + "fullName": "Anuphan Bold", + "postscriptName": "Anuphan-Bold", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 578 + } + } + }, + "regular": { + "familyName": "Anuphan", + "fullName": "Anuphan Regular", + "postscriptName": "Anuphan-Regular", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 570, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 546 + } + } + } + } + }, + "anybody": { + "familyName": "Anybody", + "fullName": "Anybody Regular", + "postscriptName": "Anybody-Regular", + "category": "display", + "capHeight": 1350, + "ascent": 1590, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1186, + "xWidthAvg": 983, + "subsets": { + "latin": { + "xWidthAvg": 983 + }, + "thai": { + "xWidthAvg": 591 + } + }, + "variants": { + "100": { + "familyName": "Anybody", + "fullName": "Anybody Thin", + "postscriptName": "Anybody-Thin", + "category": "display", + "capHeight": 1350, + "ascent": 1590, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1186, + "xWidthAvg": 829, + "subsets": { + "latin": { + "xWidthAvg": 829 + }, + "thai": { + "xWidthAvg": 610 + } + } + }, + "200": { + "familyName": "Anybody", + "fullName": "Anybody ExtraLight", + "postscriptName": "Anybody-ExtraLight", + "category": "display", + "capHeight": 1350, + "ascent": 1590, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1186, + "xWidthAvg": 881, + "subsets": { + "latin": { + "xWidthAvg": 881 + }, + "thai": { + "xWidthAvg": 604 + } + } + }, + "300": { + "familyName": "Anybody", + "fullName": "Anybody Light", + "postscriptName": "Anybody-Light", + "category": "display", + "capHeight": 1350, + "ascent": 1590, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1186, + "xWidthAvg": 915, + "subsets": { + "latin": { + "xWidthAvg": 915 + }, + "thai": { + "xWidthAvg": 599 + } + } + }, + "500": { + "familyName": "Anybody", + "fullName": "Anybody Medium", + "postscriptName": "Anybody-Medium", + "category": "display", + "capHeight": 1350, + "ascent": 1590, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1186, + "xWidthAvg": 1017, + "subsets": { + "latin": { + "xWidthAvg": 1017 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "600": { + "familyName": "Anybody", + "fullName": "Anybody SemiBold", + "postscriptName": "Anybody-SemiBold", + "category": "display", + "capHeight": 1350, + "ascent": 1590, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1186, + "xWidthAvg": 1051, + "subsets": { + "latin": { + "xWidthAvg": 1051 + }, + "thai": { + "xWidthAvg": 583 + } + } + }, + "700": { + "familyName": "Anybody", + "fullName": "Anybody Bold", + "postscriptName": "Anybody-Bold", + "category": "display", + "capHeight": 1350, + "ascent": 1590, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1186, + "xWidthAvg": 1098, + "subsets": { + "latin": { + "xWidthAvg": 1098 + }, + "thai": { + "xWidthAvg": 577 + } + } + }, + "800": { + "familyName": "Anybody", + "fullName": "Anybody ExtraBold", + "postscriptName": "Anybody-ExtraBold", + "category": "display", + "capHeight": 1350, + "ascent": 1590, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1186, + "xWidthAvg": 1152, + "subsets": { + "latin": { + "xWidthAvg": 1152 + }, + "thai": { + "xWidthAvg": 570 + } + } + }, + "900": { + "familyName": "Anybody", + "fullName": "Anybody Black", + "postscriptName": "Anybody-Black", + "category": "display", + "capHeight": 1350, + "ascent": 1590, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1186, + "xWidthAvg": 1197, + "subsets": { + "latin": { + "xWidthAvg": 1197 + }, + "thai": { + "xWidthAvg": 565 + } + } + }, + "regular": { + "familyName": "Anybody", + "fullName": "Anybody Regular", + "postscriptName": "Anybody-Regular", + "category": "display", + "capHeight": 1350, + "ascent": 1590, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1186, + "xWidthAvg": 983, + "subsets": { + "latin": { + "xWidthAvg": 983 + }, + "thai": { + "xWidthAvg": 591 + } + } + }, + "italic": { + "familyName": "Anybody", + "fullName": "Anybody Italic", + "postscriptName": "Anybody-Italic", + "category": "display", + "capHeight": 1350, + "ascent": 1590, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1186, + "xWidthAvg": 982, + "subsets": { + "latin": { + "xWidthAvg": 982 + }, + "thai": { + "xWidthAvg": 591 + } + } + }, + "900italic": { + "familyName": "Anybody", + "fullName": "Anybody Black Italic", + "postscriptName": "Anybody-BlackItalic", + "category": "display", + "capHeight": 1350, + "ascent": 1590, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1186, + "xWidthAvg": 1197, + "subsets": { + "latin": { + "xWidthAvg": 1197 + }, + "thai": { + "xWidthAvg": 565 + } + } + }, + "800italic": { + "familyName": "Anybody", + "fullName": "Anybody ExtraBold Italic", + "postscriptName": "Anybody-ExtraBoldItalic", + "category": "display", + "capHeight": 1350, + "ascent": 1590, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1186, + "xWidthAvg": 1152, + "subsets": { + "latin": { + "xWidthAvg": 1152 + }, + "thai": { + "xWidthAvg": 570 + } + } + }, + "700italic": { + "familyName": "Anybody", + "fullName": "Anybody Bold Italic", + "postscriptName": "Anybody-BoldItalic", + "category": "display", + "capHeight": 1350, + "ascent": 1590, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1186, + "xWidthAvg": 1098, + "subsets": { + "latin": { + "xWidthAvg": 1098 + }, + "thai": { + "xWidthAvg": 577 + } + } + }, + "600italic": { + "familyName": "Anybody", + "fullName": "Anybody SemiBold Italic", + "postscriptName": "Anybody-SemiBoldItalic", + "category": "display", + "capHeight": 1350, + "ascent": 1590, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1186, + "xWidthAvg": 1050, + "subsets": { + "latin": { + "xWidthAvg": 1050 + }, + "thai": { + "xWidthAvg": 583 + } + } + }, + "500italic": { + "familyName": "Anybody", + "fullName": "Anybody Medium Italic", + "postscriptName": "Anybody-MediumItalic", + "category": "display", + "capHeight": 1350, + "ascent": 1590, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1186, + "xWidthAvg": 1017, + "subsets": { + "latin": { + "xWidthAvg": 1017 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "300italic": { + "familyName": "Anybody", + "fullName": "Anybody Light Italic", + "postscriptName": "Anybody-LightItalic", + "category": "display", + "capHeight": 1350, + "ascent": 1590, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1186, + "xWidthAvg": 915, + "subsets": { + "latin": { + "xWidthAvg": 915 + }, + "thai": { + "xWidthAvg": 599 + } + } + }, + "200italic": { + "familyName": "Anybody", + "fullName": "Anybody ExtraLight Italic", + "postscriptName": "Anybody-ExtraLightItalic", + "category": "display", + "capHeight": 1350, + "ascent": 1590, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1186, + "xWidthAvg": 881, + "subsets": { + "latin": { + "xWidthAvg": 881 + }, + "thai": { + "xWidthAvg": 604 + } + } + }, + "100italic": { + "familyName": "Anybody", + "fullName": "Anybody Thin Italic", + "postscriptName": "Anybody-ThinItalic", + "category": "display", + "capHeight": 1350, + "ascent": 1590, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1186, + "xWidthAvg": 828, + "subsets": { + "latin": { + "xWidthAvg": 828 + }, + "thai": { + "xWidthAvg": 610 + } + } + } + } + }, + "aoboshiOne": { + "familyName": "Aoboshi One", + "fullName": "Aoboshi One Regular", + "postscriptName": "AoboshiOne-Regular", + "category": "serif", + "capHeight": 750, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Aoboshi One", + "fullName": "Aoboshi One Regular", + "postscriptName": "AoboshiOne-Regular", + "category": "serif", + "capHeight": 750, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "appleSystem": { + "familyName": "-apple-system", + "fullName": "System Font", + "postscriptName": ".SFNS-Regular", + "category": "sans-serif", + "capHeight": 1443, + "ascent": 1980, + "descent": -432, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1040, + "xWidthAvg": 853, + "subsets": { + "latin": { + "xWidthAvg": 853 + }, + "thai": { + "xWidthAvg": 2048 + } + }, + "variants": { + "regular": { + "familyName": "-apple-system", + "fullName": "System Font", + "postscriptName": ".SFNS-Regular", + "category": "sans-serif", + "capHeight": 1443, + "ascent": 1980, + "descent": -432, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1040, + "xWidthAvg": 853, + "subsets": { + "latin": { + "xWidthAvg": 853 + }, + "thai": { + "xWidthAvg": 2048 + } + } + }, + "italic": { + "familyName": "-apple-system", + "fullName": "System Font Regular Italic", + "postscriptName": ".SFNS-RegularItalic", + "category": "sans-serif", + "capHeight": 1443, + "ascent": 1980, + "descent": -432, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1040, + "xWidthAvg": 873, + "subsets": { + "latin": { + "xWidthAvg": 873 + }, + "thai": { + "xWidthAvg": 2048 + } + } + } + } + }, + "arapey": { + "familyName": "Arapey", + "fullName": "Arapey Regular", + "postscriptName": "Arapey-Regular", + "category": "serif", + "capHeight": 639, + "ascent": 868, + "descent": -228, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 438, + "xWidthAvg": 400, + "subsets": { + "latin": { + "xWidthAvg": 400 + }, + "thai": { + "xWidthAvg": 250 + } + }, + "variants": { + "regular": { + "familyName": "Arapey", + "fullName": "Arapey Regular", + "postscriptName": "Arapey-Regular", + "category": "serif", + "capHeight": 639, + "ascent": 868, + "descent": -228, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 438, + "xWidthAvg": 400, + "subsets": { + "latin": { + "xWidthAvg": 400 + }, + "thai": { + "xWidthAvg": 250 + } + } + }, + "italic": { + "familyName": "Arapey", + "fullName": "Arapey Italic", + "postscriptName": "Arapey-Italic", + "category": "serif", + "capHeight": 639, + "ascent": 868, + "descent": -228, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 432, + "xWidthAvg": 391, + "subsets": { + "latin": { + "xWidthAvg": 391 + }, + "thai": { + "xWidthAvg": 250 + } + } + } + } + }, + "arbutus": { + "familyName": "Arbutus", + "fullName": "Arbutus Regular", + "postscriptName": "Arbutus-Regular", + "category": "serif", + "capHeight": 103, + "ascent": 2010, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 234, + "xWidthAvg": 1302, + "subsets": { + "latin": { + "xWidthAvg": 1302 + }, + "thai": { + "xWidthAvg": 0 + } + }, + "variants": { + "regular": { + "familyName": "Arbutus", + "fullName": "Arbutus Regular", + "postscriptName": "Arbutus-Regular", + "category": "serif", + "capHeight": 103, + "ascent": 2010, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 234, + "xWidthAvg": 1302, + "subsets": { + "latin": { + "xWidthAvg": 1302 + }, + "thai": { + "xWidthAvg": 0 + } + } + } + } + }, + "arbutusSlab": { + "familyName": "Arbutus Slab", + "fullName": "Arbutus Slab Regular", + "postscriptName": "ArbutusSlab-Regular", + "category": "serif", + "capHeight": 1500, + "ascent": 2010, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1014, + "xWidthAvg": 1022, + "subsets": { + "latin": { + "xWidthAvg": 1022 + }, + "thai": { + "xWidthAvg": 2037 + } + }, + "variants": { + "regular": { + "familyName": "Arbutus Slab", + "fullName": "Arbutus Slab Regular", + "postscriptName": "ArbutusSlab-Regular", + "category": "serif", + "capHeight": 1500, + "ascent": 2010, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1014, + "xWidthAvg": 1022, + "subsets": { + "latin": { + "xWidthAvg": 1022 + }, + "thai": { + "xWidthAvg": 2037 + } + } + } + } + }, + "architectsDaughter": { + "familyName": "Architects Daughter", + "fullName": "Architects Daughter Regular", + "postscriptName": "ArchitectsDaughter-Regular", + "category": "handwriting", + "capHeight": 675, + "ascent": 1010, + "descent": -413, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 439, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 692 + } + }, + "variants": { + "regular": { + "familyName": "Architects Daughter", + "fullName": "Architects Daughter Regular", + "postscriptName": "ArchitectsDaughter-Regular", + "category": "handwriting", + "capHeight": 675, + "ascent": 1010, + "descent": -413, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 439, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 692 + } + } + } + } + }, + "archivo": { + "familyName": "Archivo", + "fullName": "Archivo Regular", + "postscriptName": "Archivo-Regular", + "category": "sans-serif", + "capHeight": 686, + "ascent": 878, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 672 + } + }, + "variants": { + "100": { + "familyName": "Archivo", + "fullName": "Archivo Thin", + "postscriptName": "Archivo-Thin", + "category": "sans-serif", + "capHeight": 686, + "ascent": 878, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 420, + "subsets": { + "latin": { + "xWidthAvg": 420 + }, + "thai": { + "xWidthAvg": 696 + } + } + }, + "200": { + "familyName": "Archivo", + "fullName": "Archivo ExtraLight", + "postscriptName": "Archivo-ExtraLight", + "category": "sans-serif", + "capHeight": 686, + "ascent": 878, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 690 + } + } + }, + "300": { + "familyName": "Archivo", + "fullName": "Archivo Light", + "postscriptName": "Archivo-Light", + "category": "sans-serif", + "capHeight": 686, + "ascent": 878, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 432, + "subsets": { + "latin": { + "xWidthAvg": 432 + }, + "thai": { + "xWidthAvg": 682 + } + } + }, + "500": { + "familyName": "Archivo", + "fullName": "Archivo Medium", + "postscriptName": "Archivo-Medium", + "category": "sans-serif", + "capHeight": 686, + "ascent": 878, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 663 + } + } + }, + "600": { + "familyName": "Archivo", + "fullName": "Archivo SemiBold", + "postscriptName": "Archivo-SemiBold", + "category": "sans-serif", + "capHeight": 686, + "ascent": 878, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 652 + } + } + }, + "700": { + "familyName": "Archivo", + "fullName": "Archivo Bold", + "postscriptName": "Archivo-Bold", + "category": "sans-serif", + "capHeight": 686, + "ascent": 878, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 651 + } + } + }, + "800": { + "familyName": "Archivo", + "fullName": "Archivo ExtraBold", + "postscriptName": "Archivo-ExtraBold", + "category": "sans-serif", + "capHeight": 686, + "ascent": 878, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 650 + } + } + }, + "900": { + "familyName": "Archivo", + "fullName": "Archivo Black", + "postscriptName": "Archivo-Black", + "category": "sans-serif", + "capHeight": 686, + "ascent": 878, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 648 + } + } + }, + "regular": { + "familyName": "Archivo", + "fullName": "Archivo Regular", + "postscriptName": "Archivo-Regular", + "category": "sans-serif", + "capHeight": 686, + "ascent": 878, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 672 + } + } + }, + "italic": { + "familyName": "Archivo", + "fullName": "Archivo Italic", + "postscriptName": "Archivo-Italic", + "category": "sans-serif", + "capHeight": 686, + "ascent": 878, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 672 + } + } + }, + "900italic": { + "familyName": "Archivo", + "fullName": "Archivo Black Italic", + "postscriptName": "Archivo-BlackItalic", + "category": "sans-serif", + "capHeight": 686, + "ascent": 878, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 648 + } + } + }, + "800italic": { + "familyName": "Archivo", + "fullName": "Archivo ExtraBold Italic", + "postscriptName": "Archivo-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 686, + "ascent": 878, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 496, + "subsets": { + "latin": { + "xWidthAvg": 496 + }, + "thai": { + "xWidthAvg": 650 + } + } + }, + "700italic": { + "familyName": "Archivo", + "fullName": "Archivo Bold Italic", + "postscriptName": "Archivo-BoldItalic", + "category": "sans-serif", + "capHeight": 686, + "ascent": 878, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 651 + } + } + }, + "600italic": { + "familyName": "Archivo", + "fullName": "Archivo SemiBold Italic", + "postscriptName": "Archivo-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 686, + "ascent": 878, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 652 + } + } + }, + "500italic": { + "familyName": "Archivo", + "fullName": "Archivo Medium Italic", + "postscriptName": "Archivo-MediumItalic", + "category": "sans-serif", + "capHeight": 686, + "ascent": 878, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 449, + "subsets": { + "latin": { + "xWidthAvg": 449 + }, + "thai": { + "xWidthAvg": 663 + } + } + }, + "300italic": { + "familyName": "Archivo", + "fullName": "Archivo Light Italic", + "postscriptName": "Archivo-LightItalic", + "category": "sans-serif", + "capHeight": 686, + "ascent": 878, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 432, + "subsets": { + "latin": { + "xWidthAvg": 432 + }, + "thai": { + "xWidthAvg": 682 + } + } + }, + "200italic": { + "familyName": "Archivo", + "fullName": "Archivo ExtraLight Italic", + "postscriptName": "Archivo-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 686, + "ascent": 878, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 690 + } + } + }, + "100italic": { + "familyName": "Archivo", + "fullName": "Archivo Thin Italic", + "postscriptName": "Archivo-ThinItalic", + "category": "sans-serif", + "capHeight": 686, + "ascent": 878, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 420, + "subsets": { + "latin": { + "xWidthAvg": 420 + }, + "thai": { + "xWidthAvg": 696 + } + } + } + } + }, + "archivoBlack": { + "familyName": "Archivo Black", + "fullName": "Archivo Black Regular", + "postscriptName": "ArchivoBlack-Regular", + "category": "sans-serif", + "capHeight": 688, + "ascent": 878, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 528, + "xWidthAvg": 553, + "subsets": { + "latin": { + "xWidthAvg": 553 + }, + "thai": { + "xWidthAvg": 750 + } + }, + "variants": { + "regular": { + "familyName": "Archivo Black", + "fullName": "Archivo Black Regular", + "postscriptName": "ArchivoBlack-Regular", + "category": "sans-serif", + "capHeight": 688, + "ascent": 878, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 528, + "xWidthAvg": 553, + "subsets": { + "latin": { + "xWidthAvg": 553 + }, + "thai": { + "xWidthAvg": 750 + } + } + } + } + }, + "archivoNarrow": { + "familyName": "Archivo Narrow", + "fullName": "Archivo Narrow Regular", + "postscriptName": "ArchivoNarrow-Regular", + "category": "sans-serif", + "capHeight": 686, + "ascent": 1035, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 368, + "subsets": { + "latin": { + "xWidthAvg": 368 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "500": { + "familyName": "Archivo Narrow", + "fullName": "Archivo Narrow Medium", + "postscriptName": "ArchivoNarrow-Medium", + "category": "sans-serif", + "capHeight": 686, + "ascent": 1035, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 376, + "subsets": { + "latin": { + "xWidthAvg": 376 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Archivo Narrow", + "fullName": "Archivo Narrow SemiBold", + "postscriptName": "ArchivoNarrow-SemiBold", + "category": "sans-serif", + "capHeight": 686, + "ascent": 1035, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 385, + "subsets": { + "latin": { + "xWidthAvg": 385 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Archivo Narrow", + "fullName": "Archivo Narrow Bold", + "postscriptName": "ArchivoNarrow-Bold", + "category": "sans-serif", + "capHeight": 686, + "ascent": 1035, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 394, + "subsets": { + "latin": { + "xWidthAvg": 394 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Archivo Narrow", + "fullName": "Archivo Narrow Regular", + "postscriptName": "ArchivoNarrow-Regular", + "category": "sans-serif", + "capHeight": 686, + "ascent": 1035, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 368, + "subsets": { + "latin": { + "xWidthAvg": 368 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Archivo Narrow", + "fullName": "Archivo Narrow Italic", + "postscriptName": "ArchivoNarrow-Italic", + "category": "sans-serif", + "capHeight": 686, + "ascent": 1035, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 368, + "subsets": { + "latin": { + "xWidthAvg": 368 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700italic": { + "familyName": "Archivo Narrow", + "fullName": "Archivo Narrow Bold Italic", + "postscriptName": "ArchivoNarrow-BoldItalic", + "category": "sans-serif", + "capHeight": 686, + "ascent": 1035, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 394, + "subsets": { + "latin": { + "xWidthAvg": 394 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600italic": { + "familyName": "Archivo Narrow", + "fullName": "Archivo Narrow SemiBold Italic", + "postscriptName": "ArchivoNarrow-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 686, + "ascent": 1035, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 385, + "subsets": { + "latin": { + "xWidthAvg": 385 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500italic": { + "familyName": "Archivo Narrow", + "fullName": "Archivo Narrow Medium Italic", + "postscriptName": "ArchivoNarrow-MediumItalic", + "category": "sans-serif", + "capHeight": 686, + "ascent": 1035, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 376, + "subsets": { + "latin": { + "xWidthAvg": 376 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "areYouSerious": { + "familyName": "Are You Serious", + "fullName": "Are You Serious Regular", + "postscriptName": "AreYouSerious-Regular", + "category": "handwriting", + "capHeight": 660, + "ascent": 880, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 300, + "xWidthAvg": 320, + "subsets": { + "latin": { + "xWidthAvg": 320 + }, + "thai": { + "xWidthAvg": 449 + } + }, + "variants": { + "regular": { + "familyName": "Are You Serious", + "fullName": "Are You Serious Regular", + "postscriptName": "AreYouSerious-Regular", + "category": "handwriting", + "capHeight": 660, + "ascent": 880, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 300, + "xWidthAvg": 320, + "subsets": { + "latin": { + "xWidthAvg": 320 + }, + "thai": { + "xWidthAvg": 449 + } + } + } + } + }, + "arefRuqaa": { + "familyName": "Aref Ruqaa", + "fullName": "Aref Ruqaa Regular", + "postscriptName": "ArefRuqaa-Regular", + "category": "serif", + "capHeight": 683, + "ascent": 1221, + "descent": -244, + "lineGap": 98, + "unitsPerEm": 1000, + "xHeight": 462, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "700": { + "familyName": "Aref Ruqaa", + "fullName": "Aref Ruqaa Bold", + "postscriptName": "ArefRuqaa-Bold", + "category": "serif", + "capHeight": 692, + "ascent": 1221, + "descent": -244, + "lineGap": 98, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Aref Ruqaa", + "fullName": "Aref Ruqaa Regular", + "postscriptName": "ArefRuqaa-Regular", + "category": "serif", + "capHeight": 683, + "ascent": 1221, + "descent": -244, + "lineGap": 98, + "unitsPerEm": 1000, + "xHeight": 462, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "arefRuqaaInk": { + "familyName": "Aref Ruqaa Ink", + "fullName": "Aref Ruqaa Ink Regular", + "postscriptName": "ArefRuqaaInk-Regular", + "category": "serif", + "capHeight": 683, + "ascent": 1221, + "descent": -244, + "lineGap": 98, + "unitsPerEm": 1000, + "xHeight": 462, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "700": { + "familyName": "Aref Ruqaa Ink", + "fullName": "Aref Ruqaa Ink Bold", + "postscriptName": "ArefRuqaaInk-Bold", + "category": "serif", + "capHeight": 692, + "ascent": 1221, + "descent": -244, + "lineGap": 98, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Aref Ruqaa Ink", + "fullName": "Aref Ruqaa Ink Regular", + "postscriptName": "ArefRuqaaInk-Regular", + "category": "serif", + "capHeight": 683, + "ascent": 1221, + "descent": -244, + "lineGap": 98, + "unitsPerEm": 1000, + "xHeight": 462, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "arial": { + "familyName": "Arial", + "fullName": "Arial", + "postscriptName": "ArialMT", + "category": "sans-serif", + "capHeight": 1467, + "ascent": 1854, + "descent": -434, + "lineGap": 67, + "unitsPerEm": 2048, + "xHeight": 1062, + "xWidthAvg": 913, + "subsets": { + "latin": { + "xWidthAvg": 913 + }, + "thai": { + "xWidthAvg": 1536 + } + }, + "variants": { + "700": { + "familyName": "Arial", + "fullName": "Arial Bold", + "postscriptName": "Arial-BoldMT", + "category": "sans-serif", + "capHeight": 1466, + "ascent": 1854, + "descent": -434, + "lineGap": 67, + "unitsPerEm": 2048, + "xHeight": 1062, + "xWidthAvg": 983, + "subsets": { + "latin": { + "xWidthAvg": 983 + }, + "thai": { + "xWidthAvg": 1536 + } + } + }, + "regular": { + "familyName": "Arial", + "fullName": "Arial", + "postscriptName": "ArialMT", + "category": "sans-serif", + "capHeight": 1467, + "ascent": 1854, + "descent": -434, + "lineGap": 67, + "unitsPerEm": 2048, + "xHeight": 1062, + "xWidthAvg": 913, + "subsets": { + "latin": { + "xWidthAvg": 913 + }, + "thai": { + "xWidthAvg": 1536 + } + } + }, + "italic": { + "familyName": "Arial", + "fullName": "Arial Italic", + "postscriptName": "Arial-ItalicMT", + "category": "sans-serif", + "capHeight": 1466, + "ascent": 1854, + "descent": -434, + "lineGap": 67, + "unitsPerEm": 2048, + "xHeight": 1062, + "xWidthAvg": 913, + "subsets": { + "latin": { + "xWidthAvg": 913 + }, + "thai": { + "xWidthAvg": 1536 + } + } + }, + "700italic": { + "familyName": "Arial", + "fullName": "Arial Bold Italic", + "postscriptName": "Arial-BoldItalicMT", + "category": "sans-serif", + "capHeight": 1465, + "ascent": 1854, + "descent": -434, + "lineGap": 67, + "unitsPerEm": 2048, + "xHeight": 1062, + "xWidthAvg": 983, + "subsets": { + "latin": { + "xWidthAvg": 983 + }, + "thai": { + "xWidthAvg": 1536 + } + } + } + } + }, + "arima": { + "familyName": "Arima", + "fullName": "Arima Regular", + "postscriptName": "Arima-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1073, + "descent": -560, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 509, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "100": { + "familyName": "Arima", + "fullName": "Arima Thin", + "postscriptName": "Arima-Thin", + "category": "display", + "capHeight": 700, + "ascent": 1073, + "descent": -560, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200": { + "familyName": "Arima", + "fullName": "Arima ExtraLight", + "postscriptName": "Arima-ExtraLight", + "category": "display", + "capHeight": 700, + "ascent": 1073, + "descent": -560, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 502, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Arima", + "fullName": "Arima Light", + "postscriptName": "Arima-Light", + "category": "display", + "capHeight": 700, + "ascent": 1073, + "descent": -560, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Arima", + "fullName": "Arima Medium", + "postscriptName": "Arima-Medium", + "category": "display", + "capHeight": 700, + "ascent": 1073, + "descent": -560, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Arima", + "fullName": "Arima SemiBold", + "postscriptName": "Arima-SemiBold", + "category": "display", + "capHeight": 700, + "ascent": 1073, + "descent": -560, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Arima", + "fullName": "Arima Bold", + "postscriptName": "Arima-Bold", + "category": "display", + "capHeight": 700, + "ascent": 1073, + "descent": -560, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Arima", + "fullName": "Arima Regular", + "postscriptName": "Arima-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1073, + "descent": -560, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 509, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "arimo": { + "familyName": "Arimo", + "fullName": "Arimo Regular", + "postscriptName": "Arimo-Regular", + "category": "sans-serif", + "capHeight": 1409, + "ascent": 1854, + "descent": -434, + "lineGap": 67, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 913, + "subsets": { + "latin": { + "xWidthAvg": 913 + }, + "thai": { + "xWidthAvg": 1536 + } + }, + "variants": { + "500": { + "familyName": "Arimo", + "fullName": "Arimo Medium", + "postscriptName": "Arimo-Medium", + "category": "sans-serif", + "capHeight": 1409, + "ascent": 1854, + "descent": -434, + "lineGap": 67, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 936, + "subsets": { + "latin": { + "xWidthAvg": 936 + }, + "thai": { + "xWidthAvg": 1536 + } + } + }, + "600": { + "familyName": "Arimo", + "fullName": "Arimo SemiBold", + "postscriptName": "Arimo-SemiBold", + "category": "sans-serif", + "capHeight": 1409, + "ascent": 1854, + "descent": -434, + "lineGap": 67, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 1536 + } + } + }, + "700": { + "familyName": "Arimo", + "fullName": "Arimo Bold", + "postscriptName": "Arimo-Bold", + "category": "sans-serif", + "capHeight": 1409, + "ascent": 1854, + "descent": -434, + "lineGap": 67, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 983, + "subsets": { + "latin": { + "xWidthAvg": 983 + }, + "thai": { + "xWidthAvg": 1536 + } + } + }, + "regular": { + "familyName": "Arimo", + "fullName": "Arimo Regular", + "postscriptName": "Arimo-Regular", + "category": "sans-serif", + "capHeight": 1409, + "ascent": 1854, + "descent": -434, + "lineGap": 67, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 913, + "subsets": { + "latin": { + "xWidthAvg": 913 + }, + "thai": { + "xWidthAvg": 1536 + } + } + }, + "italic": { + "familyName": "Arimo", + "fullName": "Arimo Italic", + "postscriptName": "Arimo-Italic", + "category": "sans-serif", + "capHeight": 1409, + "ascent": 1854, + "descent": -434, + "lineGap": 67, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 913, + "subsets": { + "latin": { + "xWidthAvg": 913 + }, + "thai": { + "xWidthAvg": 1536 + } + } + }, + "700italic": { + "familyName": "Arimo", + "fullName": "Arimo Bold Italic", + "postscriptName": "Arimo-BoldItalic", + "category": "sans-serif", + "capHeight": 1409, + "ascent": 1854, + "descent": -434, + "lineGap": 67, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 983, + "subsets": { + "latin": { + "xWidthAvg": 983 + }, + "thai": { + "xWidthAvg": 1536 + } + } + }, + "600italic": { + "familyName": "Arimo", + "fullName": "Arimo SemiBold Italic", + "postscriptName": "Arimo-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 1409, + "ascent": 1854, + "descent": -434, + "lineGap": 67, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 1536 + } + } + }, + "500italic": { + "familyName": "Arimo", + "fullName": "Arimo Medium Italic", + "postscriptName": "Arimo-MediumItalic", + "category": "sans-serif", + "capHeight": 1409, + "ascent": 1854, + "descent": -434, + "lineGap": 67, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 936, + "subsets": { + "latin": { + "xWidthAvg": 936 + }, + "thai": { + "xWidthAvg": 1536 + } + } + } + } + }, + "arizonia": { + "familyName": "Arizonia", + "fullName": "Arizonia Regular", + "postscriptName": "Arizonia-Regular", + "category": "handwriting", + "capHeight": 660, + "ascent": 900, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 280, + "xWidthAvg": 364, + "subsets": { + "latin": { + "xWidthAvg": 364 + }, + "thai": { + "xWidthAvg": 437 + } + }, + "variants": { + "regular": { + "familyName": "Arizonia", + "fullName": "Arizonia Regular", + "postscriptName": "Arizonia-Regular", + "category": "handwriting", + "capHeight": 660, + "ascent": 900, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 280, + "xWidthAvg": 364, + "subsets": { + "latin": { + "xWidthAvg": 364 + }, + "thai": { + "xWidthAvg": 437 + } + } + } + } + }, + "armata": { + "familyName": "Armata", + "fullName": "Armata Regular", + "postscriptName": "Armata-Regular", + "category": "sans-serif", + "capHeight": 1530, + "ascent": 2000, + "descent": -560, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1190, + "xWidthAvg": 1079, + "subsets": { + "latin": { + "xWidthAvg": 1079 + }, + "thai": { + "xWidthAvg": 1534 + } + }, + "variants": { + "regular": { + "familyName": "Armata", + "fullName": "Armata Regular", + "postscriptName": "Armata-Regular", + "category": "sans-serif", + "capHeight": 1530, + "ascent": 2000, + "descent": -560, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1190, + "xWidthAvg": 1079, + "subsets": { + "latin": { + "xWidthAvg": 1079 + }, + "thai": { + "xWidthAvg": 1534 + } + } + } + } + }, + "arsenal": { + "familyName": "Arsenal", + "fullName": "Arsenal Regular", + "postscriptName": "Arsenal-Regular", + "category": "sans-serif", + "capHeight": 650, + "ascent": 1000, + "descent": -254, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 399, + "subsets": { + "latin": { + "xWidthAvg": 399 + }, + "thai": { + "xWidthAvg": 632 + } + }, + "variants": { + "700": { + "familyName": "Arsenal", + "fullName": "Arsenal Bold", + "postscriptName": "Arsenal-Bold", + "category": "sans-serif", + "capHeight": 650, + "ascent": 1000, + "descent": -254, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 660 + } + } + }, + "regular": { + "familyName": "Arsenal", + "fullName": "Arsenal Regular", + "postscriptName": "Arsenal-Regular", + "category": "sans-serif", + "capHeight": 650, + "ascent": 1000, + "descent": -254, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 399, + "subsets": { + "latin": { + "xWidthAvg": 399 + }, + "thai": { + "xWidthAvg": 632 + } + } + }, + "italic": { + "familyName": "Arsenal", + "fullName": "Arsenal Italic", + "postscriptName": "Arsenal-Italic", + "category": "sans-serif", + "capHeight": 650, + "ascent": 1000, + "descent": -254, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 537 + } + } + }, + "700italic": { + "familyName": "Arsenal", + "fullName": "Arsenal Bold Italic", + "postscriptName": "Arsenal-BoldItalic", + "category": "sans-serif", + "capHeight": 650, + "ascent": 1000, + "descent": -254, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 619 + } + } + } + } + }, + "arsenalSC": { + "familyName": "Arsenal SC", + "fullName": "Arsenal SC Regular", + "postscriptName": "ArsenalSC-Regular", + "category": "sans-serif", + "capHeight": 650, + "ascent": 1000, + "descent": -254, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 399, + "subsets": { + "latin": { + "xWidthAvg": 399 + }, + "thai": { + "xWidthAvg": 632 + } + }, + "variants": { + "700": { + "familyName": "Arsenal SC", + "fullName": "Arsenal SC Bold", + "postscriptName": "ArsenalSC-Bold", + "category": "sans-serif", + "capHeight": 650, + "ascent": 1000, + "descent": -254, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 660 + } + } + }, + "regular": { + "familyName": "Arsenal SC", + "fullName": "Arsenal SC Regular", + "postscriptName": "ArsenalSC-Regular", + "category": "sans-serif", + "capHeight": 650, + "ascent": 1000, + "descent": -254, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 399, + "subsets": { + "latin": { + "xWidthAvg": 399 + }, + "thai": { + "xWidthAvg": 632 + } + } + }, + "italic": { + "familyName": "Arsenal SC", + "fullName": "Arsenal SC Italic", + "postscriptName": "ArsenalSC-Italic", + "category": "sans-serif", + "capHeight": 650, + "ascent": 1000, + "descent": -254, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 537 + } + } + }, + "700italic": { + "familyName": "Arsenal SC", + "fullName": "Arsenal SC Bold Italic", + "postscriptName": "ArsenalSC-BoldItalic", + "category": "sans-serif", + "capHeight": 650, + "ascent": 1000, + "descent": -254, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 619 + } + } + } + } + }, + "artifika": { + "familyName": "Artifika", + "fullName": "Artifika Regular", + "postscriptName": "Artifika-Regular", + "category": "serif", + "capHeight": 1433, + "ascent": 1984, + "descent": -508, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1045, + "xWidthAvg": 1075, + "subsets": { + "latin": { + "xWidthAvg": 1075 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Artifika", + "fullName": "Artifika Regular", + "postscriptName": "Artifika-Regular", + "category": "serif", + "capHeight": 1433, + "ascent": 1984, + "descent": -508, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1045, + "xWidthAvg": 1075, + "subsets": { + "latin": { + "xWidthAvg": 1075 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "arvo": { + "familyName": "Arvo", + "fullName": "Arvo", + "postscriptName": "Arvo", + "category": "serif", + "capHeight": 1516, + "ascent": 1968, + "descent": -506, + "lineGap": 55, + "unitsPerEm": 2048, + "xHeight": 1036, + "xWidthAvg": 1000, + "subsets": { + "latin": { + "xWidthAvg": 1000 + }, + "thai": { + "xWidthAvg": 1141 + } + }, + "variants": { + "700": { + "familyName": "Arvo", + "fullName": "Arvo Bold", + "postscriptName": "Arvo-Bold", + "category": "serif", + "capHeight": 1516, + "ascent": 1968, + "descent": -506, + "lineGap": 55, + "unitsPerEm": 2048, + "xHeight": 1036, + "xWidthAvg": 1062, + "subsets": { + "latin": { + "xWidthAvg": 1062 + }, + "thai": { + "xWidthAvg": 1141 + } + } + }, + "regular": { + "familyName": "Arvo", + "fullName": "Arvo", + "postscriptName": "Arvo", + "category": "serif", + "capHeight": 1516, + "ascent": 1968, + "descent": -506, + "lineGap": 55, + "unitsPerEm": 2048, + "xHeight": 1036, + "xWidthAvg": 1000, + "subsets": { + "latin": { + "xWidthAvg": 1000 + }, + "thai": { + "xWidthAvg": 1141 + } + } + }, + "italic": { + "familyName": "Arvo", + "fullName": "Arvo-Italic", + "postscriptName": "Arvo-Italic", + "category": "serif", + "capHeight": 1516, + "ascent": 1968, + "descent": -506, + "lineGap": 55, + "unitsPerEm": 2048, + "xHeight": 1036, + "xWidthAvg": 1033, + "subsets": { + "latin": { + "xWidthAvg": 1033 + }, + "thai": { + "xWidthAvg": 1223 + } + } + }, + "700italic": { + "familyName": "Arvo", + "fullName": "Arvo Bold Italic", + "postscriptName": "Arvo-BoldItalic", + "category": "serif", + "capHeight": 1516, + "ascent": 1968, + "descent": -506, + "lineGap": 55, + "unitsPerEm": 2048, + "xHeight": 1036, + "xWidthAvg": 1072, + "subsets": { + "latin": { + "xWidthAvg": 1072 + }, + "thai": { + "xWidthAvg": 1305 + } + } + } + } + }, + "arya": { + "familyName": "Arya", + "fullName": "Arya Regular", + "postscriptName": "Arya-Regular", + "category": "sans-serif", + "capHeight": 579, + "ascent": 1265, + "descent": -544, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 392, + "xWidthAvg": 421, + "subsets": { + "latin": { + "xWidthAvg": 421 + }, + "thai": { + "xWidthAvg": 385 + } + }, + "variants": { + "700": { + "familyName": "Arya", + "fullName": "Arya Bold", + "postscriptName": "Arya-Bold", + "category": "sans-serif", + "capHeight": 579, + "ascent": 1265, + "descent": -544, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 392, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 493 + } + } + }, + "regular": { + "familyName": "Arya", + "fullName": "Arya Regular", + "postscriptName": "Arya-Regular", + "category": "sans-serif", + "capHeight": 579, + "ascent": 1265, + "descent": -544, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 392, + "xWidthAvg": 421, + "subsets": { + "latin": { + "xWidthAvg": 421 + }, + "thai": { + "xWidthAvg": 385 + } + } + } + } + }, + "asap": { + "familyName": "Asap", + "fullName": "Asap Regular", + "postscriptName": "Asap-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 545 + } + }, + "variants": { + "100": { + "familyName": "Asap", + "fullName": "Asap Thin", + "postscriptName": "Asap-Thin", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "200": { + "familyName": "Asap", + "fullName": "Asap ExtraLight", + "postscriptName": "Asap-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "300": { + "familyName": "Asap", + "fullName": "Asap Light", + "postscriptName": "Asap-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "500": { + "familyName": "Asap", + "fullName": "Asap Medium", + "postscriptName": "Asap-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "600": { + "familyName": "Asap", + "fullName": "Asap SemiBold", + "postscriptName": "Asap-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "700": { + "familyName": "Asap", + "fullName": "Asap Bold", + "postscriptName": "Asap-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "800": { + "familyName": "Asap", + "fullName": "Asap ExtraBold", + "postscriptName": "Asap-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "900": { + "familyName": "Asap", + "fullName": "Asap Black", + "postscriptName": "Asap-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "regular": { + "familyName": "Asap", + "fullName": "Asap Regular", + "postscriptName": "Asap-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "italic": { + "familyName": "Asap", + "fullName": "Asap Italic", + "postscriptName": "Asap-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "900italic": { + "familyName": "Asap", + "fullName": "Asap Black Italic", + "postscriptName": "Asap-BlackItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "800italic": { + "familyName": "Asap", + "fullName": "Asap ExtraBold Italic", + "postscriptName": "Asap-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "700italic": { + "familyName": "Asap", + "fullName": "Asap Bold Italic", + "postscriptName": "Asap-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "600italic": { + "familyName": "Asap", + "fullName": "Asap SemiBold Italic", + "postscriptName": "Asap-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "500italic": { + "familyName": "Asap", + "fullName": "Asap Medium Italic", + "postscriptName": "Asap-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "300italic": { + "familyName": "Asap", + "fullName": "Asap Light Italic", + "postscriptName": "Asap-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "200italic": { + "familyName": "Asap", + "fullName": "Asap ExtraLight Italic", + "postscriptName": "Asap-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "100italic": { + "familyName": "Asap", + "fullName": "Asap Thin Italic", + "postscriptName": "Asap-ThinItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 545 + } + } + } + } + }, + "asapCondensed": { + "familyName": "Asap Condensed", + "fullName": "Asap Condensed Regular", + "postscriptName": "AsapCondensed-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 362, + "subsets": { + "latin": { + "xWidthAvg": 362 + }, + "thai": { + "xWidthAvg": 545 + } + }, + "variants": { + "200": { + "familyName": "Asap Condensed", + "fullName": "Asap Condensed ExtraLight", + "postscriptName": "AsapCondensed-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 362, + "subsets": { + "latin": { + "xWidthAvg": 362 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "300": { + "familyName": "Asap Condensed", + "fullName": "Asap Condensed Light", + "postscriptName": "AsapCondensed-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 362, + "subsets": { + "latin": { + "xWidthAvg": 362 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "500": { + "familyName": "Asap Condensed", + "fullName": "Asap Condensed Medium", + "postscriptName": "AsapCondensed-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 362, + "subsets": { + "latin": { + "xWidthAvg": 362 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "600": { + "familyName": "Asap Condensed", + "fullName": "Asap Condensed SemiBold", + "postscriptName": "AsapCondensed-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 362, + "subsets": { + "latin": { + "xWidthAvg": 362 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "700": { + "familyName": "Asap Condensed", + "fullName": "Asap Condensed Bold", + "postscriptName": "AsapCondensed-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 362, + "subsets": { + "latin": { + "xWidthAvg": 362 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "800": { + "familyName": "Asap Condensed", + "fullName": "Asap Condensed ExtraBold", + "postscriptName": "AsapCondensed-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 362, + "subsets": { + "latin": { + "xWidthAvg": 362 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "900": { + "familyName": "Asap Condensed", + "fullName": "Asap Condensed Black", + "postscriptName": "AsapCondensed-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 362, + "subsets": { + "latin": { + "xWidthAvg": 362 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "regular": { + "familyName": "Asap Condensed", + "fullName": "Asap Condensed Regular", + "postscriptName": "AsapCondensed-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 362, + "subsets": { + "latin": { + "xWidthAvg": 362 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "italic": { + "familyName": "Asap Condensed", + "fullName": "Asap Condensed Italic", + "postscriptName": "AsapCondensed-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 363, + "subsets": { + "latin": { + "xWidthAvg": 363 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "900italic": { + "familyName": "Asap Condensed", + "fullName": "Asap Condensed Black Italic", + "postscriptName": "AsapCondensed-BlackItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 363, + "subsets": { + "latin": { + "xWidthAvg": 363 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "800italic": { + "familyName": "Asap Condensed", + "fullName": "Asap Condensed ExtraBold Italic", + "postscriptName": "AsapCondensed-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 363, + "subsets": { + "latin": { + "xWidthAvg": 363 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "700italic": { + "familyName": "Asap Condensed", + "fullName": "Asap Condensed Bold Italic", + "postscriptName": "AsapCondensed-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 363, + "subsets": { + "latin": { + "xWidthAvg": 363 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "600italic": { + "familyName": "Asap Condensed", + "fullName": "Asap Condensed SemiBold Italic", + "postscriptName": "AsapCondensed-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 363, + "subsets": { + "latin": { + "xWidthAvg": 363 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "500italic": { + "familyName": "Asap Condensed", + "fullName": "Asap Condensed Medium Italic", + "postscriptName": "AsapCondensed-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 363, + "subsets": { + "latin": { + "xWidthAvg": 363 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "300italic": { + "familyName": "Asap Condensed", + "fullName": "Asap Condensed Light Italic", + "postscriptName": "AsapCondensed-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 363, + "subsets": { + "latin": { + "xWidthAvg": 363 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "200italic": { + "familyName": "Asap Condensed", + "fullName": "Asap Condensed ExtraLight Italic", + "postscriptName": "AsapCondensed-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 934, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 363, + "subsets": { + "latin": { + "xWidthAvg": 363 + }, + "thai": { + "xWidthAvg": 545 + } + } + } + } + }, + "asar": { + "familyName": "Asar", + "fullName": "Asar Regular", + "postscriptName": "Asar-Regular", + "category": "serif", + "capHeight": 680, + "ascent": 1196, + "descent": -557, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 864 + } + }, + "variants": { + "regular": { + "familyName": "Asar", + "fullName": "Asar Regular", + "postscriptName": "Asar-Regular", + "category": "serif", + "capHeight": 680, + "ascent": 1196, + "descent": -557, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 864 + } + } + } + } + }, + "asset": { + "familyName": "Asset", + "fullName": "Asset Regular", + "postscriptName": "Asset-Regular", + "category": "display", + "capHeight": 1291, + "ascent": 1971, + "descent": -589, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1047, + "xWidthAvg": 2298, + "subsets": { + "latin": { + "xWidthAvg": 2298 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Asset", + "fullName": "Asset Regular", + "postscriptName": "Asset-Regular", + "category": "display", + "capHeight": 1291, + "ascent": 1971, + "descent": -589, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1047, + "xWidthAvg": 2298, + "subsets": { + "latin": { + "xWidthAvg": 2298 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "assistant": { + "familyName": "Assistant", + "fullName": "Assistant Regular", + "postscriptName": "Assistant-Regular", + "category": "sans-serif", + "capHeight": 750, + "ascent": 1021, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 414, + "subsets": { + "latin": { + "xWidthAvg": 414 + }, + "thai": { + "xWidthAvg": 648 + } + }, + "variants": { + "200": { + "familyName": "Assistant", + "fullName": "Assistant ExtraLight", + "postscriptName": "Assistant-ExtraLight", + "category": "sans-serif", + "capHeight": 750, + "ascent": 1021, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 398, + "subsets": { + "latin": { + "xWidthAvg": 398 + }, + "thai": { + "xWidthAvg": 624 + } + } + }, + "300": { + "familyName": "Assistant", + "fullName": "Assistant Light", + "postscriptName": "Assistant-Light", + "category": "sans-serif", + "capHeight": 750, + "ascent": 1021, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 406, + "subsets": { + "latin": { + "xWidthAvg": 406 + }, + "thai": { + "xWidthAvg": 636 + } + } + }, + "500": { + "familyName": "Assistant", + "fullName": "Assistant Medium", + "postscriptName": "Assistant-Medium", + "category": "sans-serif", + "capHeight": 750, + "ascent": 1021, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 656 + } + } + }, + "600": { + "familyName": "Assistant", + "fullName": "Assistant SemiBold", + "postscriptName": "Assistant-SemiBold", + "category": "sans-serif", + "capHeight": 750, + "ascent": 1021, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 664 + } + } + }, + "700": { + "familyName": "Assistant", + "fullName": "Assistant Bold", + "postscriptName": "Assistant-Bold", + "category": "sans-serif", + "capHeight": 750, + "ascent": 1021, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 684 + } + } + }, + "800": { + "familyName": "Assistant", + "fullName": "Assistant ExtraBold", + "postscriptName": "Assistant-ExtraBold", + "category": "sans-serif", + "capHeight": 750, + "ascent": 1021, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 704 + } + } + }, + "regular": { + "familyName": "Assistant", + "fullName": "Assistant Regular", + "postscriptName": "Assistant-Regular", + "category": "sans-serif", + "capHeight": 750, + "ascent": 1021, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 414, + "subsets": { + "latin": { + "xWidthAvg": 414 + }, + "thai": { + "xWidthAvg": 648 + } + } + } + } + }, + "astloch": { + "familyName": "Astloch", + "fullName": "Astloch Regular", + "postscriptName": "Astloch-Regular", + "category": "display", + "capHeight": 1567, + "ascent": 1948, + "descent": -526, + "lineGap": 53, + "unitsPerEm": 2048, + "xHeight": 1200, + "xWidthAvg": 704, + "subsets": { + "latin": { + "xWidthAvg": 704 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "700": { + "familyName": "Astloch", + "fullName": "Astloch Bold", + "postscriptName": "Astloch-Bold", + "category": "display", + "capHeight": 1568, + "ascent": 1948, + "descent": -526, + "lineGap": 53, + "unitsPerEm": 2048, + "xHeight": 1200, + "xWidthAvg": 730, + "subsets": { + "latin": { + "xWidthAvg": 730 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Astloch", + "fullName": "Astloch Regular", + "postscriptName": "Astloch-Regular", + "category": "display", + "capHeight": 1567, + "ascent": 1948, + "descent": -526, + "lineGap": 53, + "unitsPerEm": 2048, + "xHeight": 1200, + "xWidthAvg": 704, + "subsets": { + "latin": { + "xWidthAvg": 704 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "asul": { + "familyName": "Asul", + "fullName": "Asul Regular", + "postscriptName": "Asul-Regular", + "category": "sans-serif", + "capHeight": 703, + "ascent": 949, + "descent": -264, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 225 + } + }, + "variants": { + "700": { + "familyName": "Asul", + "fullName": "Asul Bold", + "postscriptName": "Asul-Bold", + "category": "sans-serif", + "capHeight": 703, + "ascent": 949, + "descent": -264, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 245 + } + } + }, + "regular": { + "familyName": "Asul", + "fullName": "Asul Regular", + "postscriptName": "Asul-Regular", + "category": "sans-serif", + "capHeight": 703, + "ascent": 949, + "descent": -264, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 225 + } + } + } + } + }, + "athiti": { + "familyName": "Athiti", + "fullName": "Athiti-Regular", + "postscriptName": "Athiti-Regular", + "category": "sans-serif", + "capHeight": 614, + "ascent": 1150, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 423, + "subsets": { + "latin": { + "xWidthAvg": 423 + }, + "thai": { + "xWidthAvg": 505 + } + }, + "variants": { + "200": { + "familyName": "Athiti", + "fullName": "Athiti-ExtraLight", + "postscriptName": "Athiti-ExtraLight", + "category": "sans-serif", + "capHeight": 610, + "ascent": 1150, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 464, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 494 + } + } + }, + "300": { + "familyName": "Athiti", + "fullName": "Athiti-Light", + "postscriptName": "Athiti-Light", + "category": "sans-serif", + "capHeight": 612, + "ascent": 1150, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 466, + "xWidthAvg": 417, + "subsets": { + "latin": { + "xWidthAvg": 417 + }, + "thai": { + "xWidthAvg": 499 + } + } + }, + "500": { + "familyName": "Athiti", + "fullName": "Athiti-Medium", + "postscriptName": "Athiti-Medium", + "category": "sans-serif", + "capHeight": 616, + "ascent": 1150, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 432, + "subsets": { + "latin": { + "xWidthAvg": 432 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "600": { + "familyName": "Athiti", + "fullName": "Athiti-SemiBold", + "postscriptName": "Athiti-SemiBold", + "category": "sans-serif", + "capHeight": 618, + "ascent": 1150, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 471, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 531 + } + } + }, + "700": { + "familyName": "Athiti", + "fullName": "Athiti Bold", + "postscriptName": "Athiti-Bold", + "category": "sans-serif", + "capHeight": 620, + "ascent": 1150, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 561 + } + } + }, + "regular": { + "familyName": "Athiti", + "fullName": "Athiti-Regular", + "postscriptName": "Athiti-Regular", + "category": "sans-serif", + "capHeight": 614, + "ascent": 1150, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 423, + "subsets": { + "latin": { + "xWidthAvg": 423 + }, + "thai": { + "xWidthAvg": 505 + } + } + } + } + }, + "atkinsonHyperlegible": { + "familyName": "Atkinson Hyperlegible", + "fullName": "Atkinson Hyperlegible Regular", + "postscriptName": "AtkinsonHyperlegible-Regular", + "category": "sans-serif", + "capHeight": 668, + "ascent": 950, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 527 + } + }, + "variants": { + "700": { + "familyName": "Atkinson Hyperlegible", + "fullName": "Atkinson Hyperlegible Bold", + "postscriptName": "AtkinsonHyperlegible-Bold", + "category": "sans-serif", + "capHeight": 668, + "ascent": 950, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "regular": { + "familyName": "Atkinson Hyperlegible", + "fullName": "Atkinson Hyperlegible Regular", + "postscriptName": "AtkinsonHyperlegible-Regular", + "category": "sans-serif", + "capHeight": 668, + "ascent": 950, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "italic": { + "familyName": "Atkinson Hyperlegible", + "fullName": "Atkinson Hyperlegible Italic", + "postscriptName": "AtkinsonHyperlegible-Italic", + "category": "sans-serif", + "capHeight": 668, + "ascent": 950, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "700italic": { + "familyName": "Atkinson Hyperlegible", + "fullName": "Atkinson Hyperlegible Bold Italic", + "postscriptName": "AtkinsonHyperlegible-BoldItalic", + "category": "sans-serif", + "capHeight": 668, + "ascent": 950, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 676 + } + } + } + } + }, + "atma": { + "familyName": "Atma", + "fullName": "Atma Regular", + "postscriptName": "Atma-Regular", + "category": "display", + "capHeight": 750, + "ascent": 1101, + "descent": -518, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 375, + "subsets": { + "latin": { + "xWidthAvg": 375 + }, + "thai": { + "xWidthAvg": 0 + } + }, + "variants": { + "300": { + "familyName": "Atma", + "fullName": "Atma Light", + "postscriptName": "Atma-Light", + "category": "display", + "capHeight": 750, + "ascent": 1101, + "descent": -518, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 358, + "subsets": { + "latin": { + "xWidthAvg": 358 + }, + "thai": { + "xWidthAvg": 0 + } + } + }, + "500": { + "familyName": "Atma", + "fullName": "Atma Medium", + "postscriptName": "Atma-Medium", + "category": "display", + "capHeight": 750, + "ascent": 1101, + "descent": -518, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 399, + "subsets": { + "latin": { + "xWidthAvg": 399 + }, + "thai": { + "xWidthAvg": 0 + } + } + }, + "600": { + "familyName": "Atma", + "fullName": "Atma SemiBold", + "postscriptName": "Atma-SemiBold", + "category": "display", + "capHeight": 750, + "ascent": 1101, + "descent": -518, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 0 + } + } + }, + "700": { + "familyName": "Atma", + "fullName": "Atma Bold", + "postscriptName": "Atma-Bold", + "category": "display", + "capHeight": 750, + "ascent": 1101, + "descent": -518, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 0 + } + } + }, + "regular": { + "familyName": "Atma", + "fullName": "Atma Regular", + "postscriptName": "Atma-Regular", + "category": "display", + "capHeight": 750, + "ascent": 1101, + "descent": -518, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 375, + "subsets": { + "latin": { + "xWidthAvg": 375 + }, + "thai": { + "xWidthAvg": 0 + } + } + } + } + }, + "atomicAge": { + "familyName": "Atomic Age", + "fullName": "Atomic Age Regular", + "postscriptName": "AtomicAge-Regular", + "category": "display", + "capHeight": 1516, + "ascent": 2091, + "descent": -656, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1047, + "xWidthAvg": 1083, + "subsets": { + "latin": { + "xWidthAvg": 1083 + }, + "thai": { + "xWidthAvg": 2027 + } + }, + "variants": { + "regular": { + "familyName": "Atomic Age", + "fullName": "Atomic Age Regular", + "postscriptName": "AtomicAge-Regular", + "category": "display", + "capHeight": 1516, + "ascent": 2091, + "descent": -656, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1047, + "xWidthAvg": 1083, + "subsets": { + "latin": { + "xWidthAvg": 1083 + }, + "thai": { + "xWidthAvg": 2027 + } + } + } + } + }, + "aubrey": { + "familyName": "Aubrey", + "fullName": "Aubrey Regular", + "postscriptName": "Aubrey-Regular", + "category": "display", + "capHeight": 616, + "ascent": 830, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 339, + "subsets": { + "latin": { + "xWidthAvg": 339 + }, + "thai": { + "xWidthAvg": 529 + } + }, + "variants": { + "regular": { + "familyName": "Aubrey", + "fullName": "Aubrey Regular", + "postscriptName": "Aubrey-Regular", + "category": "display", + "capHeight": 616, + "ascent": 830, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 339, + "subsets": { + "latin": { + "xWidthAvg": 339 + }, + "thai": { + "xWidthAvg": 529 + } + } + } + } + }, + "audiowide": { + "familyName": "Audiowide", + "fullName": "Audiowide Regular", + "postscriptName": "Audiowide-Regular", + "category": "display", + "capHeight": 1434, + "ascent": 2027, + "descent": -584, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1083, + "xWidthAvg": 1157, + "subsets": { + "latin": { + "xWidthAvg": 1157 + }, + "thai": { + "xWidthAvg": 666 + } + }, + "variants": { + "regular": { + "familyName": "Audiowide", + "fullName": "Audiowide Regular", + "postscriptName": "Audiowide-Regular", + "category": "display", + "capHeight": 1434, + "ascent": 2027, + "descent": -584, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1083, + "xWidthAvg": 1157, + "subsets": { + "latin": { + "xWidthAvg": 1157 + }, + "thai": { + "xWidthAvg": 666 + } + } + } + } + }, + "autourOne": { + "familyName": "Autour One", + "fullName": "Autour One Regular", + "postscriptName": "AutourOne-Regular", + "category": "display", + "capHeight": 1561, + "ascent": 2010, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1190, + "xWidthAvg": 1251, + "subsets": { + "latin": { + "xWidthAvg": 1251 + }, + "thai": { + "xWidthAvg": 0 + } + }, + "variants": { + "regular": { + "familyName": "Autour One", + "fullName": "Autour One Regular", + "postscriptName": "AutourOne-Regular", + "category": "display", + "capHeight": 1561, + "ascent": 2010, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1190, + "xWidthAvg": 1251, + "subsets": { + "latin": { + "xWidthAvg": 1251 + }, + "thai": { + "xWidthAvg": 0 + } + } + } + } + }, + "average": { + "familyName": "Average", + "fullName": "Average Regular", + "postscriptName": "Average-Regular", + "category": "serif", + "capHeight": 691, + "ascent": 953, + "descent": -263, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 456, + "xWidthAvg": 424, + "subsets": { + "latin": { + "xWidthAvg": 424 + }, + "thai": { + "xWidthAvg": 595 + } + }, + "variants": { + "regular": { + "familyName": "Average", + "fullName": "Average Regular", + "postscriptName": "Average-Regular", + "category": "serif", + "capHeight": 691, + "ascent": 953, + "descent": -263, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 456, + "xWidthAvg": 424, + "subsets": { + "latin": { + "xWidthAvg": 424 + }, + "thai": { + "xWidthAvg": 595 + } + } + } + } + }, + "averageSans": { + "familyName": "Average Sans", + "fullName": "Average Sans Regular", + "postscriptName": "AverageSans-Regular", + "category": "sans-serif", + "capHeight": 691, + "ascent": 1027, + "descent": -269, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 456, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 250 + } + }, + "variants": { + "regular": { + "familyName": "Average Sans", + "fullName": "Average Sans Regular", + "postscriptName": "AverageSans-Regular", + "category": "sans-serif", + "capHeight": 691, + "ascent": 1027, + "descent": -269, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 456, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 250 + } + } + } + } + }, + "averiaGruesaLibre": { + "familyName": "Averia Gruesa Libre", + "fullName": "Averia Gruesa Libre Regular", + "postscriptName": "AveriaGruesaLibre-Regular", + "category": "display", + "ascent": 1952, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 913, + "subsets": { + "latin": { + "xWidthAvg": 913 + }, + "thai": { + "xWidthAvg": 1152 + } + }, + "variants": { + "regular": { + "familyName": "Averia Gruesa Libre", + "fullName": "Averia Gruesa Libre Regular", + "postscriptName": "AveriaGruesaLibre-Regular", + "category": "display", + "ascent": 1952, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 913, + "subsets": { + "latin": { + "xWidthAvg": 913 + }, + "thai": { + "xWidthAvg": 1152 + } + } + } + } + }, + "averiaLibre": { + "familyName": "Averia Libre", + "fullName": "Averia Libre Regular", + "postscriptName": "AveriaLibre-Regular", + "category": "display", + "ascent": 1952, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 920, + "subsets": { + "latin": { + "xWidthAvg": 920 + }, + "thai": { + "xWidthAvg": 1152 + } + }, + "variants": { + "300": { + "familyName": "Averia Libre", + "fullName": "Averia Libre Light", + "postscriptName": "AveriaLibre-Light", + "category": "display", + "ascent": 1952, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 910, + "subsets": { + "latin": { + "xWidthAvg": 910 + }, + "thai": { + "xWidthAvg": 1152 + } + } + }, + "700": { + "familyName": "Averia Libre", + "fullName": "Averia Libre Bold", + "postscriptName": "AveriaLibre-Bold", + "category": "display", + "ascent": 1952, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 952, + "subsets": { + "latin": { + "xWidthAvg": 952 + }, + "thai": { + "xWidthAvg": 1152 + } + } + }, + "regular": { + "familyName": "Averia Libre", + "fullName": "Averia Libre Regular", + "postscriptName": "AveriaLibre-Regular", + "category": "display", + "ascent": 1952, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 920, + "subsets": { + "latin": { + "xWidthAvg": 920 + }, + "thai": { + "xWidthAvg": 1152 + } + } + }, + "italic": { + "familyName": "Averia Libre", + "fullName": "Averia Libre Italic", + "postscriptName": "AveriaLibre-Italic", + "category": "display", + "ascent": 1952, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 890, + "subsets": { + "latin": { + "xWidthAvg": 890 + }, + "thai": { + "xWidthAvg": 1152 + } + } + }, + "700italic": { + "familyName": "Averia Libre", + "fullName": "Averia Libre Bold Italic", + "postscriptName": "AveriaLibre-BoldItalic", + "category": "display", + "ascent": 1952, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 913, + "subsets": { + "latin": { + "xWidthAvg": 913 + }, + "thai": { + "xWidthAvg": 1152 + } + } + }, + "300italic": { + "familyName": "Averia Libre", + "fullName": "Averia Libre Light Italic", + "postscriptName": "AveriaLibre-LightItalic", + "category": "display", + "ascent": 1952, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 876, + "subsets": { + "latin": { + "xWidthAvg": 876 + }, + "thai": { + "xWidthAvg": 1152 + } + } + } + } + }, + "averiaSansLibre": { + "familyName": "Averia Sans Libre", + "fullName": "Averia Sans Libre Regular", + "postscriptName": "AveriaSansLibre-Regular", + "category": "display", + "ascent": 2035, + "descent": -499, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 902, + "subsets": { + "latin": { + "xWidthAvg": 902 + }, + "thai": { + "xWidthAvg": 1152 + } + }, + "variants": { + "300": { + "familyName": "Averia Sans Libre", + "fullName": "Averia Sans Libre Light", + "postscriptName": "AveriaSansLibre-Light", + "category": "display", + "ascent": 2035, + "descent": -499, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 891, + "subsets": { + "latin": { + "xWidthAvg": 891 + }, + "thai": { + "xWidthAvg": 1152 + } + } + }, + "700": { + "familyName": "Averia Sans Libre", + "fullName": "Averia Sans Libre Bold", + "postscriptName": "AveriaSansLibre-Bold", + "category": "display", + "ascent": 2035, + "descent": -499, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 935, + "subsets": { + "latin": { + "xWidthAvg": 935 + }, + "thai": { + "xWidthAvg": 1152 + } + } + }, + "regular": { + "familyName": "Averia Sans Libre", + "fullName": "Averia Sans Libre Regular", + "postscriptName": "AveriaSansLibre-Regular", + "category": "display", + "ascent": 2035, + "descent": -499, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 902, + "subsets": { + "latin": { + "xWidthAvg": 902 + }, + "thai": { + "xWidthAvg": 1152 + } + } + }, + "italic": { + "familyName": "Averia Sans Libre", + "fullName": "Averia Sans Libre Italic", + "postscriptName": "AveriaSansLibre-Italic", + "category": "display", + "ascent": 2035, + "descent": -499, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 899, + "subsets": { + "latin": { + "xWidthAvg": 899 + }, + "thai": { + "xWidthAvg": 1152 + } + } + }, + "700italic": { + "familyName": "Averia Sans Libre", + "fullName": "Averia Sans Libre Bold Italic", + "postscriptName": "AveriaSansLibre-BoldItalic", + "category": "display", + "ascent": 2035, + "descent": -499, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 911, + "subsets": { + "latin": { + "xWidthAvg": 911 + }, + "thai": { + "xWidthAvg": 1152 + } + } + }, + "300italic": { + "familyName": "Averia Sans Libre", + "fullName": "Averia Sans Libre Light Italic", + "postscriptName": "AveriaSansLibre-LightItalic", + "category": "display", + "ascent": 2035, + "descent": -499, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 887, + "subsets": { + "latin": { + "xWidthAvg": 887 + }, + "thai": { + "xWidthAvg": 1152 + } + } + } + } + }, + "averiaSerifLibre": { + "familyName": "Averia Serif Libre", + "fullName": "Averia Serif Libre Regular", + "postscriptName": "AveriaSerifLibre-Regular", + "category": "display", + "ascent": 1828, + "descent": -465, + "lineGap": 184, + "unitsPerEm": 2048, + "xWidthAvg": 944, + "subsets": { + "latin": { + "xWidthAvg": 944 + }, + "thai": { + "xWidthAvg": 1152 + } + }, + "variants": { + "300": { + "familyName": "Averia Serif Libre", + "fullName": "Averia Serif Libre Light", + "postscriptName": "AveriaSerifLibre-Light", + "category": "display", + "ascent": 1823, + "descent": -465, + "lineGap": 184, + "unitsPerEm": 2048, + "xWidthAvg": 934, + "subsets": { + "latin": { + "xWidthAvg": 934 + }, + "thai": { + "xWidthAvg": 1152 + } + } + }, + "700": { + "familyName": "Averia Serif Libre", + "fullName": "Averia Serif Libre Bold", + "postscriptName": "AveriaSerifLibre-Bold", + "category": "display", + "ascent": 1833, + "descent": -466, + "lineGap": 184, + "unitsPerEm": 2048, + "xWidthAvg": 975, + "subsets": { + "latin": { + "xWidthAvg": 975 + }, + "thai": { + "xWidthAvg": 1152 + } + } + }, + "regular": { + "familyName": "Averia Serif Libre", + "fullName": "Averia Serif Libre Regular", + "postscriptName": "AveriaSerifLibre-Regular", + "category": "display", + "ascent": 1828, + "descent": -465, + "lineGap": 184, + "unitsPerEm": 2048, + "xWidthAvg": 944, + "subsets": { + "latin": { + "xWidthAvg": 944 + }, + "thai": { + "xWidthAvg": 1152 + } + } + }, + "italic": { + "familyName": "Averia Serif Libre", + "fullName": "Averia Serif Libre Italic", + "postscriptName": "AveriaSerifLibre-Italic", + "category": "display", + "ascent": 1862, + "descent": -484, + "lineGap": 184, + "unitsPerEm": 2048, + "xWidthAvg": 876, + "subsets": { + "latin": { + "xWidthAvg": 876 + }, + "thai": { + "xWidthAvg": 1152 + } + } + }, + "700italic": { + "familyName": "Averia Serif Libre", + "fullName": "Averia Serif Libre Bold Italic", + "postscriptName": "AveriaSerifLibre-BoldItalic", + "category": "display", + "ascent": 1861, + "descent": -475, + "lineGap": 184, + "unitsPerEm": 2048, + "xWidthAvg": 916, + "subsets": { + "latin": { + "xWidthAvg": 916 + }, + "thai": { + "xWidthAvg": 1152 + } + } + }, + "300italic": { + "familyName": "Averia Serif Libre", + "fullName": "Averia Serif Libre Light Italic", + "postscriptName": "AveriaSerifLibre-LightItalic", + "category": "display", + "ascent": 1868, + "descent": -486, + "lineGap": 184, + "unitsPerEm": 2048, + "xWidthAvg": 861, + "subsets": { + "latin": { + "xWidthAvg": 861 + }, + "thai": { + "xWidthAvg": 1152 + } + } + } + } + }, + "azeretMono": { + "familyName": "Azeret Mono", + "fullName": "Azeret Mono Regular", + "postscriptName": "AzeretMono-Regular", + "category": "monospace", + "capHeight": 698, + "ascent": 937, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 650, + "subsets": { + "latin": { + "xWidthAvg": 650 + }, + "thai": { + "xWidthAvg": 1300 + } + }, + "variants": { + "100": { + "familyName": "Azeret Mono", + "fullName": "Azeret Mono Thin", + "postscriptName": "AzeretMono-Thin", + "category": "monospace", + "capHeight": 698, + "ascent": 937, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 650, + "subsets": { + "latin": { + "xWidthAvg": 650 + }, + "thai": { + "xWidthAvg": 1300 + } + } + }, + "200": { + "familyName": "Azeret Mono", + "fullName": "Azeret Mono ExtraLight", + "postscriptName": "AzeretMono-ExtraLight", + "category": "monospace", + "capHeight": 698, + "ascent": 937, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 650, + "subsets": { + "latin": { + "xWidthAvg": 650 + }, + "thai": { + "xWidthAvg": 1300 + } + } + }, + "300": { + "familyName": "Azeret Mono", + "fullName": "Azeret Mono Light", + "postscriptName": "AzeretMono-Light", + "category": "monospace", + "capHeight": 698, + "ascent": 937, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 650, + "subsets": { + "latin": { + "xWidthAvg": 650 + }, + "thai": { + "xWidthAvg": 1300 + } + } + }, + "500": { + "familyName": "Azeret Mono", + "fullName": "Azeret Mono Medium", + "postscriptName": "AzeretMono-Medium", + "category": "monospace", + "capHeight": 698, + "ascent": 937, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 650, + "subsets": { + "latin": { + "xWidthAvg": 650 + }, + "thai": { + "xWidthAvg": 1300 + } + } + }, + "600": { + "familyName": "Azeret Mono", + "fullName": "Azeret Mono SemiBold", + "postscriptName": "AzeretMono-SemiBold", + "category": "monospace", + "capHeight": 698, + "ascent": 937, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 650, + "subsets": { + "latin": { + "xWidthAvg": 650 + }, + "thai": { + "xWidthAvg": 1300 + } + } + }, + "700": { + "familyName": "Azeret Mono", + "fullName": "Azeret Mono Bold", + "postscriptName": "AzeretMono-Bold", + "category": "monospace", + "capHeight": 698, + "ascent": 937, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 650, + "subsets": { + "latin": { + "xWidthAvg": 650 + }, + "thai": { + "xWidthAvg": 1300 + } + } + }, + "800": { + "familyName": "Azeret Mono", + "fullName": "Azeret Mono ExtraBold", + "postscriptName": "AzeretMono-ExtraBold", + "category": "monospace", + "capHeight": 698, + "ascent": 937, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 650, + "subsets": { + "latin": { + "xWidthAvg": 650 + }, + "thai": { + "xWidthAvg": 1300 + } + } + }, + "900": { + "familyName": "Azeret Mono", + "fullName": "Azeret Mono Black", + "postscriptName": "AzeretMono-Black", + "category": "monospace", + "capHeight": 698, + "ascent": 937, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 650, + "subsets": { + "latin": { + "xWidthAvg": 650 + }, + "thai": { + "xWidthAvg": 1300 + } + } + }, + "regular": { + "familyName": "Azeret Mono", + "fullName": "Azeret Mono Regular", + "postscriptName": "AzeretMono-Regular", + "category": "monospace", + "capHeight": 698, + "ascent": 937, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 650, + "subsets": { + "latin": { + "xWidthAvg": 650 + }, + "thai": { + "xWidthAvg": 1300 + } + } + }, + "italic": { + "familyName": "Azeret Mono", + "fullName": "Azeret Mono Italic", + "postscriptName": "AzeretMono-Italic", + "category": "monospace", + "capHeight": 698, + "ascent": 937, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 650, + "subsets": { + "latin": { + "xWidthAvg": 650 + }, + "thai": { + "xWidthAvg": 1300 + } + } + }, + "900italic": { + "familyName": "Azeret Mono", + "fullName": "Azeret Mono Black Italic", + "postscriptName": "AzeretMono-BlackItalic", + "category": "monospace", + "capHeight": 698, + "ascent": 937, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 650, + "subsets": { + "latin": { + "xWidthAvg": 650 + }, + "thai": { + "xWidthAvg": 1300 + } + } + }, + "800italic": { + "familyName": "Azeret Mono", + "fullName": "Azeret Mono ExtraBold Italic", + "postscriptName": "AzeretMono-ExtraBoldItalic", + "category": "monospace", + "capHeight": 698, + "ascent": 937, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 650, + "subsets": { + "latin": { + "xWidthAvg": 650 + }, + "thai": { + "xWidthAvg": 1300 + } + } + }, + "700italic": { + "familyName": "Azeret Mono", + "fullName": "Azeret Mono Bold Italic", + "postscriptName": "AzeretMono-BoldItalic", + "category": "monospace", + "capHeight": 698, + "ascent": 937, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 650, + "subsets": { + "latin": { + "xWidthAvg": 650 + }, + "thai": { + "xWidthAvg": 1300 + } + } + }, + "600italic": { + "familyName": "Azeret Mono", + "fullName": "Azeret Mono SemiBold Italic", + "postscriptName": "AzeretMono-SemiBoldItalic", + "category": "monospace", + "capHeight": 698, + "ascent": 937, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 650, + "subsets": { + "latin": { + "xWidthAvg": 650 + }, + "thai": { + "xWidthAvg": 1300 + } + } + }, + "500italic": { + "familyName": "Azeret Mono", + "fullName": "Azeret Mono Medium Italic", + "postscriptName": "AzeretMono-MediumItalic", + "category": "monospace", + "capHeight": 698, + "ascent": 937, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 650, + "subsets": { + "latin": { + "xWidthAvg": 650 + }, + "thai": { + "xWidthAvg": 1300 + } + } + }, + "300italic": { + "familyName": "Azeret Mono", + "fullName": "Azeret Mono Light Italic", + "postscriptName": "AzeretMono-LightItalic", + "category": "monospace", + "capHeight": 698, + "ascent": 937, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 650, + "subsets": { + "latin": { + "xWidthAvg": 650 + }, + "thai": { + "xWidthAvg": 1300 + } + } + }, + "200italic": { + "familyName": "Azeret Mono", + "fullName": "Azeret Mono ExtraLight Italic", + "postscriptName": "AzeretMono-ExtraLightItalic", + "category": "monospace", + "capHeight": 698, + "ascent": 937, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 650, + "subsets": { + "latin": { + "xWidthAvg": 650 + }, + "thai": { + "xWidthAvg": 1300 + } + } + }, + "100italic": { + "familyName": "Azeret Mono", + "fullName": "Azeret Mono Thin Italic", + "postscriptName": "AzeretMono-ThinItalic", + "category": "monospace", + "capHeight": 698, + "ascent": 937, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 650, + "subsets": { + "latin": { + "xWidthAvg": 650 + }, + "thai": { + "xWidthAvg": 1300 + } + } + } + } + }, + "b612": { + "familyName": "B612", + "fullName": "B612 Regular", + "postscriptName": "B612-Regular", + "category": "sans-serif", + "capHeight": 1500, + "ascent": 1930, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1100, + "xWidthAvg": 977, + "subsets": { + "latin": { + "xWidthAvg": 977 + }, + "thai": { + "xWidthAvg": 1300 + } + }, + "variants": { + "700": { + "familyName": "B612", + "fullName": "B612 Bold", + "postscriptName": "B612-Bold", + "category": "sans-serif", + "capHeight": 1500, + "ascent": 1930, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1100, + "xWidthAvg": 977, + "subsets": { + "latin": { + "xWidthAvg": 977 + }, + "thai": { + "xWidthAvg": 1300 + } + } + }, + "regular": { + "familyName": "B612", + "fullName": "B612 Regular", + "postscriptName": "B612-Regular", + "category": "sans-serif", + "capHeight": 1500, + "ascent": 1930, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1100, + "xWidthAvg": 977, + "subsets": { + "latin": { + "xWidthAvg": 977 + }, + "thai": { + "xWidthAvg": 1300 + } + } + }, + "italic": { + "familyName": "B612", + "fullName": "B612 Italic", + "postscriptName": "B612-Italic", + "category": "sans-serif", + "capHeight": 1500, + "ascent": 1930, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1100, + "xWidthAvg": 980, + "subsets": { + "latin": { + "xWidthAvg": 980 + }, + "thai": { + "xWidthAvg": 1300 + } + } + }, + "700italic": { + "familyName": "B612", + "fullName": "B612 Bold Italic", + "postscriptName": "B612-BoldItalic", + "category": "sans-serif", + "capHeight": 1500, + "ascent": 1930, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1100, + "xWidthAvg": 980, + "subsets": { + "latin": { + "xWidthAvg": 980 + }, + "thai": { + "xWidthAvg": 1300 + } + } + } + } + }, + "b612Mono": { + "familyName": "B612 Mono", + "fullName": "B612 Mono Regular", + "postscriptName": "B612Mono-Regular", + "category": "monospace", + "capHeight": 1500, + "ascent": 1930, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1100, + "xWidthAvg": 1300, + "subsets": { + "latin": { + "xWidthAvg": 1300 + }, + "thai": { + "xWidthAvg": 1300 + } + }, + "variants": { + "700": { + "familyName": "B612 Mono", + "fullName": "B612 Mono Bold", + "postscriptName": "B612Mono-Bold", + "category": "monospace", + "capHeight": 1500, + "ascent": 1930, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1100, + "xWidthAvg": 1300, + "subsets": { + "latin": { + "xWidthAvg": 1300 + }, + "thai": { + "xWidthAvg": 1300 + } + } + }, + "regular": { + "familyName": "B612 Mono", + "fullName": "B612 Mono Regular", + "postscriptName": "B612Mono-Regular", + "category": "monospace", + "capHeight": 1500, + "ascent": 1930, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1100, + "xWidthAvg": 1300, + "subsets": { + "latin": { + "xWidthAvg": 1300 + }, + "thai": { + "xWidthAvg": 1300 + } + } + }, + "italic": { + "familyName": "B612 Mono", + "fullName": "B612 Mono Italic", + "postscriptName": "B612Mono-Italic", + "category": "monospace", + "capHeight": 1500, + "ascent": 1930, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1100, + "xWidthAvg": 1300, + "subsets": { + "latin": { + "xWidthAvg": 1300 + }, + "thai": { + "xWidthAvg": 1300 + } + } + }, + "700italic": { + "familyName": "B612 Mono", + "fullName": "B612 Mono Bold Italic", + "postscriptName": "B612Mono-BoldItalic", + "category": "monospace", + "capHeight": 1500, + "ascent": 1930, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1100, + "xWidthAvg": 1300, + "subsets": { + "latin": { + "xWidthAvg": 1300 + }, + "thai": { + "xWidthAvg": 1300 + } + } + } + } + }, + "bIZUDGothic": { + "familyName": "BIZ UDGothic", + "fullName": "BIZ UDGothic", + "postscriptName": "BIZUDGothic-Regular", + "category": "sans-serif", + "capHeight": 1567, + "ascent": 1802, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1108, + "xWidthAvg": 1024, + "subsets": { + "latin": { + "xWidthAvg": 1024 + }, + "thai": { + "xWidthAvg": 2048 + } + }, + "variants": { + "700": { + "familyName": "BIZ UDGothic", + "fullName": "BIZ UDGothic Bold", + "postscriptName": "BIZUDGothic-Bold", + "category": "sans-serif", + "capHeight": 1567, + "ascent": 1802, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1108, + "xWidthAvg": 1024, + "subsets": { + "latin": { + "xWidthAvg": 1024 + }, + "thai": { + "xWidthAvg": 2048 + } + } + }, + "regular": { + "familyName": "BIZ UDGothic", + "fullName": "BIZ UDGothic", + "postscriptName": "BIZUDGothic-Regular", + "category": "sans-serif", + "capHeight": 1567, + "ascent": 1802, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1108, + "xWidthAvg": 1024, + "subsets": { + "latin": { + "xWidthAvg": 1024 + }, + "thai": { + "xWidthAvg": 2048 + } + } + } + } + }, + "bIZUDMincho": { + "familyName": "BIZ UDMincho", + "fullName": "BIZ UDMincho", + "postscriptName": "BIZUDMincho-Regular", + "category": "serif", + "capHeight": 1567, + "ascent": 1802, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1108, + "xWidthAvg": 1024, + "subsets": { + "latin": { + "xWidthAvg": 1024 + }, + "thai": { + "xWidthAvg": 2048 + } + }, + "variants": { + "700": { + "familyName": "BIZ UDMincho", + "fullName": "BIZ UDMincho Bold", + "postscriptName": "BIZUDMincho-Bold", + "category": "serif", + "capHeight": 1567, + "ascent": 1802, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1108, + "xWidthAvg": 1024, + "subsets": { + "latin": { + "xWidthAvg": 1024 + }, + "thai": { + "xWidthAvg": 2048 + } + } + }, + "regular": { + "familyName": "BIZ UDMincho", + "fullName": "BIZ UDMincho", + "postscriptName": "BIZUDMincho-Regular", + "category": "serif", + "capHeight": 1567, + "ascent": 1802, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1108, + "xWidthAvg": 1024, + "subsets": { + "latin": { + "xWidthAvg": 1024 + }, + "thai": { + "xWidthAvg": 2048 + } + } + } + } + }, + "bIZUDPGothic": { + "familyName": "BIZ UDPGothic", + "fullName": "BIZ UDPGothic", + "postscriptName": "BIZUDPGothic-Regular", + "category": "sans-serif", + "capHeight": 1567, + "ascent": 1802, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1108, + "xWidthAvg": 1152, + "subsets": { + "latin": { + "xWidthAvg": 1152 + }, + "thai": { + "xWidthAvg": 2048 + } + }, + "variants": { + "700": { + "familyName": "BIZ UDPGothic", + "fullName": "BIZ UDPGothic Bold", + "postscriptName": "BIZUDPGothic-Bold", + "category": "sans-serif", + "capHeight": 1567, + "ascent": 1802, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1108, + "xWidthAvg": 1178, + "subsets": { + "latin": { + "xWidthAvg": 1178 + }, + "thai": { + "xWidthAvg": 2048 + } + } + }, + "regular": { + "familyName": "BIZ UDPGothic", + "fullName": "BIZ UDPGothic", + "postscriptName": "BIZUDPGothic-Regular", + "category": "sans-serif", + "capHeight": 1567, + "ascent": 1802, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1108, + "xWidthAvg": 1152, + "subsets": { + "latin": { + "xWidthAvg": 1152 + }, + "thai": { + "xWidthAvg": 2048 + } + } + } + } + }, + "bIZUDPMincho": { + "familyName": "BIZ UDPMincho", + "fullName": "BIZ UDPMincho", + "postscriptName": "BIZUDPMincho-Regular", + "category": "serif", + "capHeight": 1567, + "ascent": 1802, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1108, + "xWidthAvg": 1096, + "subsets": { + "latin": { + "xWidthAvg": 1096 + }, + "thai": { + "xWidthAvg": 2048 + } + }, + "variants": { + "700": { + "familyName": "BIZ UDPMincho", + "fullName": "BIZ UDPMincho Bold", + "postscriptName": "BIZUDPMincho-Bold", + "category": "serif", + "capHeight": 1567, + "ascent": 1802, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1108, + "xWidthAvg": 1223, + "subsets": { + "latin": { + "xWidthAvg": 1223 + }, + "thai": { + "xWidthAvg": 2048 + } + } + }, + "regular": { + "familyName": "BIZ UDPMincho", + "fullName": "BIZ UDPMincho", + "postscriptName": "BIZUDPMincho-Regular", + "category": "serif", + "capHeight": 1567, + "ascent": 1802, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1108, + "xWidthAvg": 1096, + "subsets": { + "latin": { + "xWidthAvg": 1096 + }, + "thai": { + "xWidthAvg": 2048 + } + } + } + } + }, + "babylonica": { + "familyName": "Babylonica", + "fullName": "Babylonica Regular", + "postscriptName": "Babylonica-Regular", + "category": "handwriting", + "capHeight": 630, + "ascent": 875, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 220, + "xWidthAvg": 281, + "subsets": { + "latin": { + "xWidthAvg": 281 + }, + "thai": { + "xWidthAvg": 437 + } + }, + "variants": { + "regular": { + "familyName": "Babylonica", + "fullName": "Babylonica Regular", + "postscriptName": "Babylonica-Regular", + "category": "handwriting", + "capHeight": 630, + "ascent": 875, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 220, + "xWidthAvg": 281, + "subsets": { + "latin": { + "xWidthAvg": 281 + }, + "thai": { + "xWidthAvg": 437 + } + } + } + } + }, + "bacasimeAntique": { + "familyName": "Bacasime Antique", + "fullName": "Bacasime Antique Regular", + "postscriptName": "BacasimeAntique-Regular", + "category": "serif", + "capHeight": 1434, + "ascent": 1536, + "descent": -512, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 819, + "subsets": { + "latin": { + "xWidthAvg": 819 + }, + "thai": { + "xWidthAvg": 682 + } + }, + "variants": { + "regular": { + "familyName": "Bacasime Antique", + "fullName": "Bacasime Antique Regular", + "postscriptName": "BacasimeAntique-Regular", + "category": "serif", + "capHeight": 1434, + "ascent": 1536, + "descent": -512, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 819, + "subsets": { + "latin": { + "xWidthAvg": 819 + }, + "thai": { + "xWidthAvg": 682 + } + } + } + } + }, + "badScript": { + "familyName": "Bad Script", + "fullName": "Bad Script Regular", + "postscriptName": "BadScript-Regular", + "category": "handwriting", + "capHeight": 1966, + "ascent": 2710, + "descent": -1327, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1034, + "xWidthAvg": 787, + "subsets": { + "latin": { + "xWidthAvg": 787 + }, + "thai": { + "xWidthAvg": 1976 + } + }, + "variants": { + "regular": { + "familyName": "Bad Script", + "fullName": "Bad Script Regular", + "postscriptName": "BadScript-Regular", + "category": "handwriting", + "capHeight": 1966, + "ascent": 2710, + "descent": -1327, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1034, + "xWidthAvg": 787, + "subsets": { + "latin": { + "xWidthAvg": 787 + }, + "thai": { + "xWidthAvg": 1976 + } + } + } + } + }, + "bagelFatOne": { + "familyName": "Bagel Fat One", + "fullName": "Bagel Fat One Regular", + "postscriptName": "BagelFatOne-Regular", + "category": "display", + "capHeight": 726, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 450 + } + }, + "variants": { + "regular": { + "familyName": "Bagel Fat One", + "fullName": "Bagel Fat One Regular", + "postscriptName": "BagelFatOne-Regular", + "category": "display", + "capHeight": 726, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 450 + } + } + } + } + }, + "bahiana": { + "familyName": "Bahiana", + "fullName": "Bahiana Regular", + "postscriptName": "Bahiana-Regular", + "category": "display", + "capHeight": 710, + "ascent": 900, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 283, + "subsets": { + "latin": { + "xWidthAvg": 283 + }, + "thai": { + "xWidthAvg": 339 + } + }, + "variants": { + "regular": { + "familyName": "Bahiana", + "fullName": "Bahiana Regular", + "postscriptName": "Bahiana-Regular", + "category": "display", + "capHeight": 710, + "ascent": 900, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 283, + "subsets": { + "latin": { + "xWidthAvg": 283 + }, + "thai": { + "xWidthAvg": 339 + } + } + } + } + }, + "bahianita": { + "familyName": "Bahianita", + "fullName": "Bahianita Regular", + "postscriptName": "Bahianita-Regular", + "category": "display", + "capHeight": 710, + "ascent": 962, + "descent": -238, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 582, + "xWidthAvg": 244, + "subsets": { + "latin": { + "xWidthAvg": 244 + }, + "thai": { + "xWidthAvg": 339 + } + }, + "variants": { + "regular": { + "familyName": "Bahianita", + "fullName": "Bahianita Regular", + "postscriptName": "Bahianita-Regular", + "category": "display", + "capHeight": 710, + "ascent": 962, + "descent": -238, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 582, + "xWidthAvg": 244, + "subsets": { + "latin": { + "xWidthAvg": 244 + }, + "thai": { + "xWidthAvg": 339 + } + } + } + } + }, + "baiJamjuree": { + "familyName": "Bai Jamjuree", + "fullName": "Bai Jamjuree Regular", + "postscriptName": "BaiJamjuree-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 569 + } + }, + "variants": { + "200": { + "familyName": "Bai Jamjuree", + "fullName": "Bai Jamjuree ExtraLight", + "postscriptName": "BaiJamjuree-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 557 + } + } + }, + "300": { + "familyName": "Bai Jamjuree", + "fullName": "Bai Jamjuree Light", + "postscriptName": "BaiJamjuree-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 563 + } + } + }, + "500": { + "familyName": "Bai Jamjuree", + "fullName": "Bai Jamjuree Medium", + "postscriptName": "BaiJamjuree-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 579 + } + } + }, + "600": { + "familyName": "Bai Jamjuree", + "fullName": "Bai Jamjuree SemiBold", + "postscriptName": "BaiJamjuree-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 589 + } + } + }, + "700": { + "familyName": "Bai Jamjuree", + "fullName": "Bai Jamjuree Bold", + "postscriptName": "BaiJamjuree-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 598 + } + } + }, + "regular": { + "familyName": "Bai Jamjuree", + "fullName": "Bai Jamjuree Regular", + "postscriptName": "BaiJamjuree-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 569 + } + } + }, + "italic": { + "familyName": "Bai Jamjuree", + "fullName": "Bai Jamjuree Italic", + "postscriptName": "BaiJamjuree-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 569 + } + } + }, + "700italic": { + "familyName": "Bai Jamjuree", + "fullName": "Bai Jamjuree Bold Italic", + "postscriptName": "BaiJamjuree-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 598 + } + } + }, + "600italic": { + "familyName": "Bai Jamjuree", + "fullName": "Bai Jamjuree SemiBold Italic", + "postscriptName": "BaiJamjuree-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 589 + } + } + }, + "500italic": { + "familyName": "Bai Jamjuree", + "fullName": "Bai Jamjuree Medium Italic", + "postscriptName": "BaiJamjuree-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 579 + } + } + }, + "300italic": { + "familyName": "Bai Jamjuree", + "fullName": "Bai Jamjuree Light Italic", + "postscriptName": "BaiJamjuree-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 563 + } + } + }, + "200italic": { + "familyName": "Bai Jamjuree", + "fullName": "Bai Jamjuree ExtraLight Italic", + "postscriptName": "BaiJamjuree-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 557 + } + } + } + } + }, + "bakbakOne": { + "familyName": "Bakbak One", + "fullName": "Bakbak One Regular", + "postscriptName": "BakbakOne-Regular", + "category": "display", + "capHeight": 607, + "ascent": 1050, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 660 + } + }, + "variants": { + "regular": { + "familyName": "Bakbak One", + "fullName": "Bakbak One Regular", + "postscriptName": "BakbakOne-Regular", + "category": "display", + "capHeight": 607, + "ascent": 1050, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 660 + } + } + } + } + }, + "ballet": { + "familyName": "Ballet", + "fullName": "Ballet 16pt Regular", + "postscriptName": "Ballet16pt-Regular", + "category": "handwriting", + "capHeight": 1209, + "ascent": 1130, + "descent": -770, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 339, + "xWidthAvg": 323, + "subsets": { + "latin": { + "xWidthAvg": 323 + }, + "thai": { + "xWidthAvg": 358 + } + }, + "variants": { + "regular": { + "familyName": "Ballet", + "fullName": "Ballet 16pt Regular", + "postscriptName": "Ballet16pt-Regular", + "category": "handwriting", + "capHeight": 1209, + "ascent": 1130, + "descent": -770, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 339, + "xWidthAvg": 323, + "subsets": { + "latin": { + "xWidthAvg": 323 + }, + "thai": { + "xWidthAvg": 358 + } + } + } + } + }, + "baloo2": { + "familyName": "Baloo 2", + "fullName": "Baloo 2 Regular", + "postscriptName": "Baloo2-Regular", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -524, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 645 + } + }, + "variants": { + "500": { + "familyName": "Baloo 2", + "fullName": "Baloo 2 Medium", + "postscriptName": "Baloo2-Medium", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -524, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 655 + } + } + }, + "600": { + "familyName": "Baloo 2", + "fullName": "Baloo 2 SemiBold", + "postscriptName": "Baloo2-SemiBold", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -524, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 664 + } + } + }, + "700": { + "familyName": "Baloo 2", + "fullName": "Baloo 2 Bold", + "postscriptName": "Baloo2-Bold", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -524, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 675 + } + } + }, + "800": { + "familyName": "Baloo 2", + "fullName": "Baloo 2 ExtraBold", + "postscriptName": "Baloo2-ExtraBold", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -524, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 684 + } + } + }, + "regular": { + "familyName": "Baloo 2", + "fullName": "Baloo 2 Regular", + "postscriptName": "Baloo2-Regular", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -524, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 645 + } + } + } + } + }, + "balooBhai2": { + "familyName": "Baloo Bhai 2", + "fullName": "Baloo Bhai 2 Regular", + "postscriptName": "BalooBhai2-Regular", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -544, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 645 + } + }, + "variants": { + "500": { + "familyName": "Baloo Bhai 2", + "fullName": "Baloo Bhai 2 Medium", + "postscriptName": "BalooBhai2-Medium", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -544, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 654 + } + } + }, + "600": { + "familyName": "Baloo Bhai 2", + "fullName": "Baloo Bhai 2 SemiBold", + "postscriptName": "BalooBhai2-SemiBold", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -544, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 665 + } + } + }, + "700": { + "familyName": "Baloo Bhai 2", + "fullName": "Baloo Bhai 2 Bold", + "postscriptName": "BalooBhai2-Bold", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -544, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 676 + } + } + }, + "800": { + "familyName": "Baloo Bhai 2", + "fullName": "Baloo Bhai 2 ExtraBold", + "postscriptName": "BalooBhai2-ExtraBold", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -544, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 684 + } + } + }, + "regular": { + "familyName": "Baloo Bhai 2", + "fullName": "Baloo Bhai 2 Regular", + "postscriptName": "BalooBhai2-Regular", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -544, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 645 + } + } + } + } + }, + "balooBhaijaan2": { + "familyName": "Baloo Bhaijaan 2", + "fullName": "Baloo Bhaijaan 2 Regular", + "postscriptName": "BalooBhaijaan2-Regular", + "category": "display", + "capHeight": 602, + "ascent": 1080, + "descent": -632, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 645 + } + }, + "variants": { + "500": { + "familyName": "Baloo Bhaijaan 2", + "fullName": "Baloo Bhaijaan 2 Medium", + "postscriptName": "BalooBhaijaan2-Medium", + "category": "display", + "capHeight": 602, + "ascent": 1080, + "descent": -632, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 655 + } + } + }, + "600": { + "familyName": "Baloo Bhaijaan 2", + "fullName": "Baloo Bhaijaan 2 SemiBold", + "postscriptName": "BalooBhaijaan2-SemiBold", + "category": "display", + "capHeight": 602, + "ascent": 1080, + "descent": -632, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 664 + } + } + }, + "700": { + "familyName": "Baloo Bhaijaan 2", + "fullName": "Baloo Bhaijaan 2 Bold", + "postscriptName": "BalooBhaijaan2-Bold", + "category": "display", + "capHeight": 602, + "ascent": 1080, + "descent": -632, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 675 + } + } + }, + "800": { + "familyName": "Baloo Bhaijaan 2", + "fullName": "Baloo Bhaijaan 2 ExtraBold", + "postscriptName": "BalooBhaijaan2-ExtraBold", + "category": "display", + "capHeight": 602, + "ascent": 1080, + "descent": -632, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 684 + } + } + }, + "regular": { + "familyName": "Baloo Bhaijaan 2", + "fullName": "Baloo Bhaijaan 2 Regular", + "postscriptName": "BalooBhaijaan2-Regular", + "category": "display", + "capHeight": 602, + "ascent": 1080, + "descent": -632, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 645 + } + } + } + } + }, + "balooBhaina2": { + "familyName": "Baloo Bhaina 2", + "fullName": "Baloo Bhaina 2 Regular", + "postscriptName": "BalooBhaina2-Regular", + "category": "display", + "capHeight": 602, + "ascent": 1185, + "descent": -827, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 644 + } + }, + "variants": { + "500": { + "familyName": "Baloo Bhaina 2", + "fullName": "Baloo Bhaina 2 Medium", + "postscriptName": "BalooBhaina2-Medium", + "category": "display", + "capHeight": 602, + "ascent": 1185, + "descent": -827, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 654 + } + } + }, + "600": { + "familyName": "Baloo Bhaina 2", + "fullName": "Baloo Bhaina 2 SemiBold", + "postscriptName": "BalooBhaina2-SemiBold", + "category": "display", + "capHeight": 602, + "ascent": 1185, + "descent": -827, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 662 + } + } + }, + "700": { + "familyName": "Baloo Bhaina 2", + "fullName": "Baloo Bhaina 2 Bold", + "postscriptName": "BalooBhaina2-Bold", + "category": "display", + "capHeight": 602, + "ascent": 1185, + "descent": -827, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 449, + "subsets": { + "latin": { + "xWidthAvg": 449 + }, + "thai": { + "xWidthAvg": 672 + } + } + }, + "800": { + "familyName": "Baloo Bhaina 2", + "fullName": "Baloo Bhaina 2 ExtraBold", + "postscriptName": "BalooBhaina2-ExtraBold", + "category": "display", + "capHeight": 602, + "ascent": 1185, + "descent": -827, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 684 + } + } + }, + "regular": { + "familyName": "Baloo Bhaina 2", + "fullName": "Baloo Bhaina 2 Regular", + "postscriptName": "BalooBhaina2-Regular", + "category": "display", + "capHeight": 602, + "ascent": 1185, + "descent": -827, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 644 + } + } + } + } + }, + "balooChettan2": { + "familyName": "Baloo Chettan 2", + "fullName": "Baloo Chettan 2 Regular", + "postscriptName": "BalooChettan2-Regular", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -392, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 645 + } + }, + "variants": { + "500": { + "familyName": "Baloo Chettan 2", + "fullName": "Baloo Chettan 2 Medium", + "postscriptName": "BalooChettan2-Medium", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -392, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 655 + } + } + }, + "600": { + "familyName": "Baloo Chettan 2", + "fullName": "Baloo Chettan 2 SemiBold", + "postscriptName": "BalooChettan2-SemiBold", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -392, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 664 + } + } + }, + "700": { + "familyName": "Baloo Chettan 2", + "fullName": "Baloo Chettan 2 Bold", + "postscriptName": "BalooChettan2-Bold", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -392, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 675 + } + } + }, + "800": { + "familyName": "Baloo Chettan 2", + "fullName": "Baloo Chettan 2 ExtraBold", + "postscriptName": "BalooChettan2-ExtraBold", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -392, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 684 + } + } + }, + "regular": { + "familyName": "Baloo Chettan 2", + "fullName": "Baloo Chettan 2 Regular", + "postscriptName": "BalooChettan2-Regular", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -392, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 645 + } + } + } + } + }, + "balooDa2": { + "familyName": "Baloo Da 2", + "fullName": "Baloo Da 2 Regular", + "postscriptName": "BalooDa2-Regular", + "category": "display", + "capHeight": 602, + "ascent": 1095, + "descent": -589, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 645 + } + }, + "variants": { + "500": { + "familyName": "Baloo Da 2", + "fullName": "Baloo Da 2 Medium", + "postscriptName": "BalooDa2-Medium", + "category": "display", + "capHeight": 602, + "ascent": 1095, + "descent": -589, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 654 + } + } + }, + "600": { + "familyName": "Baloo Da 2", + "fullName": "Baloo Da 2 SemiBold", + "postscriptName": "BalooDa2-SemiBold", + "category": "display", + "capHeight": 602, + "ascent": 1095, + "descent": -589, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 663 + } + } + }, + "700": { + "familyName": "Baloo Da 2", + "fullName": "Baloo Da 2 Bold", + "postscriptName": "BalooDa2-Bold", + "category": "display", + "capHeight": 602, + "ascent": 1095, + "descent": -589, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 674 + } + } + }, + "800": { + "familyName": "Baloo Da 2", + "fullName": "Baloo Da 2 ExtraBold", + "postscriptName": "BalooDa2-ExtraBold", + "category": "display", + "capHeight": 602, + "ascent": 1095, + "descent": -589, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 684 + } + } + }, + "regular": { + "familyName": "Baloo Da 2", + "fullName": "Baloo Da 2 Regular", + "postscriptName": "BalooDa2-Regular", + "category": "display", + "capHeight": 602, + "ascent": 1095, + "descent": -589, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 645 + } + } + } + } + }, + "balooPaaji2": { + "familyName": "Baloo Paaji 2", + "fullName": "Baloo Paaji 2 Regular", + "postscriptName": "BalooPaaji2-Regular", + "category": "display", + "capHeight": 602, + "ascent": 1157, + "descent": -614, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 645 + } + }, + "variants": { + "500": { + "familyName": "Baloo Paaji 2", + "fullName": "Baloo Paaji 2 Medium", + "postscriptName": "BalooPaaji2-Medium", + "category": "display", + "capHeight": 602, + "ascent": 1157, + "descent": -614, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 655 + } + } + }, + "600": { + "familyName": "Baloo Paaji 2", + "fullName": "Baloo Paaji 2 SemiBold", + "postscriptName": "BalooPaaji2-SemiBold", + "category": "display", + "capHeight": 602, + "ascent": 1157, + "descent": -614, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 664 + } + } + }, + "700": { + "familyName": "Baloo Paaji 2", + "fullName": "Baloo Paaji 2 Bold", + "postscriptName": "BalooPaaji2-Bold", + "category": "display", + "capHeight": 602, + "ascent": 1157, + "descent": -614, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 675 + } + } + }, + "800": { + "familyName": "Baloo Paaji 2", + "fullName": "Baloo Paaji 2 ExtraBold", + "postscriptName": "BalooPaaji2-ExtraBold", + "category": "display", + "capHeight": 602, + "ascent": 1157, + "descent": -614, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 684 + } + } + }, + "regular": { + "familyName": "Baloo Paaji 2", + "fullName": "Baloo Paaji 2 Regular", + "postscriptName": "BalooPaaji2-Regular", + "category": "display", + "capHeight": 602, + "ascent": 1157, + "descent": -614, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 645 + } + } + } + } + }, + "balooTamma2": { + "familyName": "Baloo Tamma 2", + "fullName": "Baloo Tamma 2 Regular", + "postscriptName": "BalooTamma2-Regular", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -673, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 644 + } + }, + "variants": { + "500": { + "familyName": "Baloo Tamma 2", + "fullName": "Baloo Tamma 2 Medium", + "postscriptName": "BalooTamma2-Medium", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -673, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 652 + } + } + }, + "600": { + "familyName": "Baloo Tamma 2", + "fullName": "Baloo Tamma 2 SemiBold", + "postscriptName": "BalooTamma2-SemiBold", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -673, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 449, + "subsets": { + "latin": { + "xWidthAvg": 449 + }, + "thai": { + "xWidthAvg": 660 + } + } + }, + "700": { + "familyName": "Baloo Tamma 2", + "fullName": "Baloo Tamma 2 Bold", + "postscriptName": "BalooTamma2-Bold", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -673, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 670 + } + } + }, + "800": { + "familyName": "Baloo Tamma 2", + "fullName": "Baloo Tamma 2 ExtraBold", + "postscriptName": "BalooTamma2-ExtraBold", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -673, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 684 + } + } + }, + "regular": { + "familyName": "Baloo Tamma 2", + "fullName": "Baloo Tamma 2 Regular", + "postscriptName": "BalooTamma2-Regular", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -673, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 644 + } + } + } + } + }, + "balooTammudu2": { + "familyName": "Baloo Tammudu 2", + "fullName": "Baloo Tammudu 2 Regular", + "postscriptName": "BalooTammudu2-Regular", + "category": "display", + "capHeight": 602, + "ascent": 1177, + "descent": -1119, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 645 + } + }, + "variants": { + "500": { + "familyName": "Baloo Tammudu 2", + "fullName": "Baloo Tammudu 2 Medium", + "postscriptName": "BalooTammudu2-Medium", + "category": "display", + "capHeight": 602, + "ascent": 1177, + "descent": -1119, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 653 + } + } + }, + "600": { + "familyName": "Baloo Tammudu 2", + "fullName": "Baloo Tammudu 2 SemiBold", + "postscriptName": "BalooTammudu2-SemiBold", + "category": "display", + "capHeight": 602, + "ascent": 1177, + "descent": -1119, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 661 + } + } + }, + "700": { + "familyName": "Baloo Tammudu 2", + "fullName": "Baloo Tammudu 2 Bold", + "postscriptName": "BalooTammudu2-Bold", + "category": "display", + "capHeight": 602, + "ascent": 1177, + "descent": -1119, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 671 + } + } + }, + "800": { + "familyName": "Baloo Tammudu 2", + "fullName": "Baloo Tammudu 2 ExtraBold", + "postscriptName": "BalooTammudu2-ExtraBold", + "category": "display", + "capHeight": 602, + "ascent": 1177, + "descent": -1119, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 684 + } + } + }, + "regular": { + "familyName": "Baloo Tammudu 2", + "fullName": "Baloo Tammudu 2 Regular", + "postscriptName": "BalooTammudu2-Regular", + "category": "display", + "capHeight": 602, + "ascent": 1177, + "descent": -1119, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 645 + } + } + } + } + }, + "balooThambi2": { + "familyName": "Baloo Thambi 2", + "fullName": "Baloo Thambi 2 Regular", + "postscriptName": "BalooThambi2-Regular", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 645 + } + }, + "variants": { + "500": { + "familyName": "Baloo Thambi 2", + "fullName": "Baloo Thambi 2 Medium", + "postscriptName": "BalooThambi2-Medium", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 436, + "subsets": { + "latin": { + "xWidthAvg": 436 + }, + "thai": { + "xWidthAvg": 656 + } + } + }, + "600": { + "familyName": "Baloo Thambi 2", + "fullName": "Baloo Thambi 2 SemiBold", + "postscriptName": "BalooThambi2-SemiBold", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 665 + } + } + }, + "700": { + "familyName": "Baloo Thambi 2", + "fullName": "Baloo Thambi 2 Bold", + "postscriptName": "BalooThambi2-Bold", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 674 + } + } + }, + "800": { + "familyName": "Baloo Thambi 2", + "fullName": "Baloo Thambi 2 ExtraBold", + "postscriptName": "BalooThambi2-ExtraBold", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 684 + } + } + }, + "regular": { + "familyName": "Baloo Thambi 2", + "fullName": "Baloo Thambi 2 Regular", + "postscriptName": "BalooThambi2-Regular", + "category": "display", + "capHeight": 602, + "ascent": 1078, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 645 + } + } + } + } + }, + "balsamiqSans": { + "familyName": "Balsamiq Sans", + "fullName": "Balsamiq Sans Regular", + "postscriptName": "BalsamiqSans-Regular", + "category": "display", + "capHeight": 715, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 465 + } + }, + "variants": { + "700": { + "familyName": "Balsamiq Sans", + "fullName": "Balsamiq Sans Bold", + "postscriptName": "BalsamiqSans-Bold", + "category": "display", + "capHeight": 715, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 415 + } + } + }, + "regular": { + "familyName": "Balsamiq Sans", + "fullName": "Balsamiq Sans Regular", + "postscriptName": "BalsamiqSans-Regular", + "category": "display", + "capHeight": 715, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 465 + } + } + }, + "italic": { + "familyName": "Balsamiq Sans", + "fullName": "Balsamiq Sans Italic", + "postscriptName": "BalsamiqSans-Italic", + "category": "display", + "capHeight": 715, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 465 + } + } + }, + "700italic": { + "familyName": "Balsamiq Sans", + "fullName": "Balsamiq Sans Bold Italic", + "postscriptName": "BalsamiqSans-BoldItalic", + "category": "display", + "capHeight": 715, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 464 + } + } + } + } + }, + "balthazar": { + "familyName": "Balthazar", + "fullName": "Balthazar Regular", + "postscriptName": "Balthazar-Regular", + "category": "serif", + "capHeight": 605, + "ascent": 796, + "descent": -222, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 399, + "xWidthAvg": 384, + "subsets": { + "latin": { + "xWidthAvg": 384 + }, + "thai": { + "xWidthAvg": 250 + } + }, + "variants": { + "regular": { + "familyName": "Balthazar", + "fullName": "Balthazar Regular", + "postscriptName": "Balthazar-Regular", + "category": "serif", + "capHeight": 605, + "ascent": 796, + "descent": -222, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 399, + "xWidthAvg": 384, + "subsets": { + "latin": { + "xWidthAvg": 384 + }, + "thai": { + "xWidthAvg": 250 + } + } + } + } + }, + "bangers": { + "familyName": "Bangers", + "fullName": "Bangers Regular", + "postscriptName": "Bangers-Regular", + "category": "display", + "capHeight": 721, + "ascent": 883, + "descent": -181, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 721, + "xWidthAvg": 367, + "subsets": { + "latin": { + "xWidthAvg": 367 + }, + "thai": { + "xWidthAvg": 664 + } + }, + "variants": { + "regular": { + "familyName": "Bangers", + "fullName": "Bangers Regular", + "postscriptName": "Bangers-Regular", + "category": "display", + "capHeight": 721, + "ascent": 883, + "descent": -181, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 721, + "xWidthAvg": 367, + "subsets": { + "latin": { + "xWidthAvg": 367 + }, + "thai": { + "xWidthAvg": 664 + } + } + } + } + }, + "barlow": { + "familyName": "Barlow", + "fullName": "Barlow Regular", + "postscriptName": "Barlow-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 419 + } + }, + "variants": { + "100": { + "familyName": "Barlow", + "fullName": "Barlow Thin", + "postscriptName": "Barlow-Thin", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 423, + "subsets": { + "latin": { + "xWidthAvg": 423 + }, + "thai": { + "xWidthAvg": 386 + } + } + }, + "200": { + "familyName": "Barlow", + "fullName": "Barlow ExtraLight", + "postscriptName": "Barlow-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 502, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 393 + } + } + }, + "300": { + "familyName": "Barlow", + "fullName": "Barlow Light", + "postscriptName": "Barlow-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 404 + } + } + }, + "500": { + "familyName": "Barlow", + "fullName": "Barlow Medium", + "postscriptName": "Barlow-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 509, + "xWidthAvg": 436, + "subsets": { + "latin": { + "xWidthAvg": 436 + }, + "thai": { + "xWidthAvg": 438 + } + } + }, + "600": { + "familyName": "Barlow", + "fullName": "Barlow SemiBold", + "postscriptName": "Barlow-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 454 + } + } + }, + "700": { + "familyName": "Barlow", + "fullName": "Barlow Bold", + "postscriptName": "Barlow-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 474 + } + } + }, + "800": { + "familyName": "Barlow", + "fullName": "Barlow ExtraBold", + "postscriptName": "Barlow-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 494 + } + } + }, + "900": { + "familyName": "Barlow", + "fullName": "Barlow Black", + "postscriptName": "Barlow-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 511 + } + } + }, + "regular": { + "familyName": "Barlow", + "fullName": "Barlow Regular", + "postscriptName": "Barlow-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 419 + } + } + }, + "italic": { + "familyName": "Barlow", + "fullName": "Barlow Italic", + "postscriptName": "Barlow-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 420, + "subsets": { + "latin": { + "xWidthAvg": 420 + }, + "thai": { + "xWidthAvg": 406 + } + } + }, + "900italic": { + "familyName": "Barlow", + "fullName": "Barlow Black Italic", + "postscriptName": "Barlow-BlackItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 496 + } + } + }, + "800italic": { + "familyName": "Barlow", + "fullName": "Barlow ExtraBold Italic", + "postscriptName": "Barlow-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 479 + } + } + }, + "700italic": { + "familyName": "Barlow", + "fullName": "Barlow Bold Italic", + "postscriptName": "Barlow-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 460 + } + } + }, + "600italic": { + "familyName": "Barlow", + "fullName": "Barlow SemiBold Italic", + "postscriptName": "Barlow-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 441 + } + } + }, + "500italic": { + "familyName": "Barlow", + "fullName": "Barlow Medium Italic", + "postscriptName": "Barlow-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 509, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 425 + } + } + }, + "300italic": { + "familyName": "Barlow", + "fullName": "Barlow Light Italic", + "postscriptName": "Barlow-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 417, + "subsets": { + "latin": { + "xWidthAvg": 417 + }, + "thai": { + "xWidthAvg": 392 + } + } + }, + "200italic": { + "familyName": "Barlow", + "fullName": "Barlow ExtraLight Italic", + "postscriptName": "Barlow-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 502, + "xWidthAvg": 414, + "subsets": { + "latin": { + "xWidthAvg": 414 + }, + "thai": { + "xWidthAvg": 382 + } + } + }, + "100italic": { + "familyName": "Barlow", + "fullName": "Barlow Thin Italic", + "postscriptName": "Barlow-ThinItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 413, + "subsets": { + "latin": { + "xWidthAvg": 413 + }, + "thai": { + "xWidthAvg": 375 + } + } + } + } + }, + "barlowCondensed": { + "familyName": "Barlow Condensed", + "fullName": "Barlow Condensed Regular", + "postscriptName": "BarlowCondensed-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 341, + "subsets": { + "latin": { + "xWidthAvg": 341 + }, + "thai": { + "xWidthAvg": 341 + } + }, + "variants": { + "100": { + "familyName": "Barlow Condensed", + "fullName": "Barlow Condensed Thin", + "postscriptName": "BarlowCondensed-Thin", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 327, + "subsets": { + "latin": { + "xWidthAvg": 327 + }, + "thai": { + "xWidthAvg": 304 + } + } + }, + "200": { + "familyName": "Barlow Condensed", + "fullName": "Barlow Condensed ExtraLight", + "postscriptName": "BarlowCondensed-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 502, + "xWidthAvg": 330, + "subsets": { + "latin": { + "xWidthAvg": 330 + }, + "thai": { + "xWidthAvg": 312 + } + } + }, + "300": { + "familyName": "Barlow Condensed", + "fullName": "Barlow Condensed Light", + "postscriptName": "BarlowCondensed-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 335, + "subsets": { + "latin": { + "xWidthAvg": 335 + }, + "thai": { + "xWidthAvg": 325 + } + } + }, + "500": { + "familyName": "Barlow Condensed", + "fullName": "Barlow Condensed Medium", + "postscriptName": "BarlowCondensed-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 509, + "xWidthAvg": 349, + "subsets": { + "latin": { + "xWidthAvg": 349 + }, + "thai": { + "xWidthAvg": 363 + } + } + }, + "600": { + "familyName": "Barlow Condensed", + "fullName": "Barlow Condensed SemiBold", + "postscriptName": "BarlowCondensed-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 356, + "subsets": { + "latin": { + "xWidthAvg": 356 + }, + "thai": { + "xWidthAvg": 381 + } + } + }, + "700": { + "familyName": "Barlow Condensed", + "fullName": "Barlow Condensed Bold", + "postscriptName": "BarlowCondensed-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 365, + "subsets": { + "latin": { + "xWidthAvg": 365 + }, + "thai": { + "xWidthAvg": 404 + } + } + }, + "800": { + "familyName": "Barlow Condensed", + "fullName": "Barlow Condensed ExtraBold", + "postscriptName": "BarlowCondensed-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 373, + "subsets": { + "latin": { + "xWidthAvg": 373 + }, + "thai": { + "xWidthAvg": 426 + } + } + }, + "900": { + "familyName": "Barlow Condensed", + "fullName": "Barlow Condensed Black", + "postscriptName": "BarlowCondensed-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 381, + "subsets": { + "latin": { + "xWidthAvg": 381 + }, + "thai": { + "xWidthAvg": 446 + } + } + }, + "regular": { + "familyName": "Barlow Condensed", + "fullName": "Barlow Condensed Regular", + "postscriptName": "BarlowCondensed-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 341, + "subsets": { + "latin": { + "xWidthAvg": 341 + }, + "thai": { + "xWidthAvg": 341 + } + } + }, + "italic": { + "familyName": "Barlow Condensed", + "fullName": "Barlow Condensed Italic", + "postscriptName": "BarlowCondensed-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 331, + "subsets": { + "latin": { + "xWidthAvg": 331 + }, + "thai": { + "xWidthAvg": 331 + } + } + }, + "900italic": { + "familyName": "Barlow Condensed", + "fullName": "Barlow Condensed Black Italic", + "postscriptName": "BarlowCondensed-BlackItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 369, + "subsets": { + "latin": { + "xWidthAvg": 369 + }, + "thai": { + "xWidthAvg": 433 + } + } + }, + "800italic": { + "familyName": "Barlow Condensed", + "fullName": "Barlow Condensed ExtraBold Italic", + "postscriptName": "BarlowCondensed-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 362, + "subsets": { + "latin": { + "xWidthAvg": 362 + }, + "thai": { + "xWidthAvg": 413 + } + } + }, + "700italic": { + "familyName": "Barlow Condensed", + "fullName": "Barlow Condensed Bold Italic", + "postscriptName": "BarlowCondensed-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 354, + "subsets": { + "latin": { + "xWidthAvg": 354 + }, + "thai": { + "xWidthAvg": 392 + } + } + }, + "600italic": { + "familyName": "Barlow Condensed", + "fullName": "Barlow Condensed SemiBold Italic", + "postscriptName": "BarlowCondensed-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 346, + "subsets": { + "latin": { + "xWidthAvg": 346 + }, + "thai": { + "xWidthAvg": 370 + } + } + }, + "500italic": { + "familyName": "Barlow Condensed", + "fullName": "Barlow Condensed Medium Italic", + "postscriptName": "BarlowCondensed-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 509, + "xWidthAvg": 339, + "subsets": { + "latin": { + "xWidthAvg": 339 + }, + "thai": { + "xWidthAvg": 353 + } + } + }, + "300italic": { + "familyName": "Barlow Condensed", + "fullName": "Barlow Condensed Light Italic", + "postscriptName": "BarlowCondensed-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 326, + "subsets": { + "latin": { + "xWidthAvg": 326 + }, + "thai": { + "xWidthAvg": 315 + } + } + }, + "200italic": { + "familyName": "Barlow Condensed", + "fullName": "Barlow Condensed ExtraLight Italic", + "postscriptName": "BarlowCondensed-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 502, + "xWidthAvg": 321, + "subsets": { + "latin": { + "xWidthAvg": 321 + }, + "thai": { + "xWidthAvg": 303 + } + } + }, + "100italic": { + "familyName": "Barlow Condensed", + "fullName": "Barlow Condensed Thin Italic", + "postscriptName": "BarlowCondensed-ThinItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 318, + "subsets": { + "latin": { + "xWidthAvg": 318 + }, + "thai": { + "xWidthAvg": 295 + } + } + } + } + }, + "barlowSemiCondensed": { + "familyName": "Barlow Semi Condensed", + "fullName": "Barlow Semi Condensed Regular", + "postscriptName": "BarlowSemiCondensed-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 386, + "subsets": { + "latin": { + "xWidthAvg": 386 + }, + "thai": { + "xWidthAvg": 380 + } + }, + "variants": { + "100": { + "familyName": "Barlow Semi Condensed", + "fullName": "Barlow Semi Condensed Thin", + "postscriptName": "BarlowSemiCondensed-Thin", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 375, + "subsets": { + "latin": { + "xWidthAvg": 375 + }, + "thai": { + "xWidthAvg": 345 + } + } + }, + "200": { + "familyName": "Barlow Semi Condensed", + "fullName": "Barlow Semi Condensed ExtraLight", + "postscriptName": "BarlowSemiCondensed-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 502, + "xWidthAvg": 378, + "subsets": { + "latin": { + "xWidthAvg": 378 + }, + "thai": { + "xWidthAvg": 353 + } + } + }, + "300": { + "familyName": "Barlow Semi Condensed", + "fullName": "Barlow Semi Condensed Light", + "postscriptName": "BarlowSemiCondensed-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 381, + "subsets": { + "latin": { + "xWidthAvg": 381 + }, + "thai": { + "xWidthAvg": 365 + } + } + }, + "500": { + "familyName": "Barlow Semi Condensed", + "fullName": "Barlow Semi Condensed Medium", + "postscriptName": "BarlowSemiCondensed-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 509, + "xWidthAvg": 393, + "subsets": { + "latin": { + "xWidthAvg": 393 + }, + "thai": { + "xWidthAvg": 401 + } + } + }, + "600": { + "familyName": "Barlow Semi Condensed", + "fullName": "Barlow Semi Condensed SemiBold", + "postscriptName": "BarlowSemiCondensed-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 397, + "subsets": { + "latin": { + "xWidthAvg": 397 + }, + "thai": { + "xWidthAvg": 418 + } + } + }, + "700": { + "familyName": "Barlow Semi Condensed", + "fullName": "Barlow Semi Condensed Bold", + "postscriptName": "BarlowSemiCondensed-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 405, + "subsets": { + "latin": { + "xWidthAvg": 405 + }, + "thai": { + "xWidthAvg": 439 + } + } + }, + "800": { + "familyName": "Barlow Semi Condensed", + "fullName": "Barlow Semi Condensed ExtraBold", + "postscriptName": "BarlowSemiCondensed-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 460 + } + } + }, + "900": { + "familyName": "Barlow Semi Condensed", + "fullName": "Barlow Semi Condensed Black", + "postscriptName": "BarlowSemiCondensed-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 417, + "subsets": { + "latin": { + "xWidthAvg": 417 + }, + "thai": { + "xWidthAvg": 479 + } + } + }, + "regular": { + "familyName": "Barlow Semi Condensed", + "fullName": "Barlow Semi Condensed Regular", + "postscriptName": "BarlowSemiCondensed-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 386, + "subsets": { + "latin": { + "xWidthAvg": 386 + }, + "thai": { + "xWidthAvg": 380 + } + } + }, + "italic": { + "familyName": "Barlow Semi Condensed", + "fullName": "Barlow Semi Condensed Italic", + "postscriptName": "BarlowSemiCondensed-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 376, + "subsets": { + "latin": { + "xWidthAvg": 376 + }, + "thai": { + "xWidthAvg": 368 + } + } + }, + "900italic": { + "familyName": "Barlow Semi Condensed", + "fullName": "Barlow Semi Condensed Black Italic", + "postscriptName": "BarlowSemiCondensed-BlackItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 405, + "subsets": { + "latin": { + "xWidthAvg": 405 + }, + "thai": { + "xWidthAvg": 464 + } + } + }, + "800italic": { + "familyName": "Barlow Semi Condensed", + "fullName": "Barlow Semi Condensed ExtraBold Italic", + "postscriptName": "BarlowSemiCondensed-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 400, + "subsets": { + "latin": { + "xWidthAvg": 400 + }, + "thai": { + "xWidthAvg": 446 + } + } + }, + "700italic": { + "familyName": "Barlow Semi Condensed", + "fullName": "Barlow Semi Condensed Bold Italic", + "postscriptName": "BarlowSemiCondensed-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 394, + "subsets": { + "latin": { + "xWidthAvg": 394 + }, + "thai": { + "xWidthAvg": 426 + } + } + }, + "600italic": { + "familyName": "Barlow Semi Condensed", + "fullName": "Barlow Semi Condensed SemiBold Italic", + "postscriptName": "BarlowSemiCondensed-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 387, + "subsets": { + "latin": { + "xWidthAvg": 387 + }, + "thai": { + "xWidthAvg": 405 + } + } + }, + "500italic": { + "familyName": "Barlow Semi Condensed", + "fullName": "Barlow Semi Condensed Medium Italic", + "postscriptName": "BarlowSemiCondensed-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 509, + "xWidthAvg": 382, + "subsets": { + "latin": { + "xWidthAvg": 382 + }, + "thai": { + "xWidthAvg": 389 + } + } + }, + "300italic": { + "familyName": "Barlow Semi Condensed", + "fullName": "Barlow Semi Condensed Light Italic", + "postscriptName": "BarlowSemiCondensed-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 371, + "subsets": { + "latin": { + "xWidthAvg": 371 + }, + "thai": { + "xWidthAvg": 354 + } + } + }, + "200italic": { + "familyName": "Barlow Semi Condensed", + "fullName": "Barlow Semi Condensed ExtraLight Italic", + "postscriptName": "BarlowSemiCondensed-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 502, + "xWidthAvg": 368, + "subsets": { + "latin": { + "xWidthAvg": 368 + }, + "thai": { + "xWidthAvg": 342 + } + } + }, + "100italic": { + "familyName": "Barlow Semi Condensed", + "fullName": "Barlow Semi Condensed Thin Italic", + "postscriptName": "BarlowSemiCondensed-ThinItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 366, + "subsets": { + "latin": { + "xWidthAvg": 366 + }, + "thai": { + "xWidthAvg": 335 + } + } + } + } + }, + "barriecito": { + "familyName": "Barriecito", + "fullName": "Barriecito Regular", + "postscriptName": "Barriecito-Regular", + "category": "display", + "capHeight": 710, + "ascent": 962, + "descent": -238, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 582, + "xWidthAvg": 424, + "subsets": { + "latin": { + "xWidthAvg": 424 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Barriecito", + "fullName": "Barriecito Regular", + "postscriptName": "Barriecito-Regular", + "category": "display", + "capHeight": 710, + "ascent": 962, + "descent": -238, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 582, + "xWidthAvg": 424, + "subsets": { + "latin": { + "xWidthAvg": 424 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "barrio": { + "familyName": "Barrio", + "fullName": "Barrio Regular", + "postscriptName": "Barrio-Regular", + "category": "display", + "capHeight": 710, + "ascent": 880, + "descent": -247, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Barrio", + "fullName": "Barrio Regular", + "postscriptName": "Barrio-Regular", + "category": "display", + "capHeight": 710, + "ascent": 880, + "descent": -247, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "basic": { + "familyName": "Basic", + "fullName": "Basic Regular", + "postscriptName": "Basic-Regular", + "category": "sans-serif", + "capHeight": 1358, + "ascent": 2066, + "descent": -511, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1022, + "xWidthAvg": 885, + "subsets": { + "latin": { + "xWidthAvg": 885 + }, + "thai": { + "xWidthAvg": 1530 + } + }, + "variants": { + "regular": { + "familyName": "Basic", + "fullName": "Basic Regular", + "postscriptName": "Basic-Regular", + "category": "sans-serif", + "capHeight": 1358, + "ascent": 2066, + "descent": -511, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1022, + "xWidthAvg": 885, + "subsets": { + "latin": { + "xWidthAvg": 885 + }, + "thai": { + "xWidthAvg": 1530 + } + } + } + } + }, + "baskervville": { + "familyName": "Baskervville", + "fullName": "Baskervville Regular", + "postscriptName": "Baskervville-Regular", + "category": "serif", + "capHeight": 710, + "ascent": 998, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 436, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 870 + } + }, + "variants": { + "regular": { + "familyName": "Baskervville", + "fullName": "Baskervville Regular", + "postscriptName": "Baskervville-Regular", + "category": "serif", + "capHeight": 710, + "ascent": 998, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 436, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 870 + } + } + }, + "italic": { + "familyName": "Baskervville", + "fullName": "Baskervville Italic", + "postscriptName": "Baskervville-Italic", + "category": "serif", + "capHeight": 710, + "ascent": 998, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 421, + "subsets": { + "latin": { + "xWidthAvg": 421 + }, + "thai": { + "xWidthAvg": 870 + } + } + } + } + }, + "baskervvilleSC": { + "familyName": "Baskervville SC", + "fullName": "Baskervville SC Regular", + "postscriptName": "BaskervvilleSC-Regular", + "category": "serif", + "capHeight": 710, + "ascent": 998, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 436, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 870 + } + }, + "variants": { + "regular": { + "familyName": "Baskervville SC", + "fullName": "Baskervville SC Regular", + "postscriptName": "BaskervvilleSC-Regular", + "category": "serif", + "capHeight": 710, + "ascent": 998, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 436, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 870 + } + } + } + } + }, + "battambang": { + "familyName": "Battambang", + "fullName": "Battambang Regular", + "postscriptName": "Battambang-Regular", + "category": "display", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 1001, + "subsets": { + "latin": { + "xWidthAvg": 1001 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "100": { + "familyName": "Battambang", + "fullName": "Battambang Thin", + "postscriptName": "Battambang-Thin", + "category": "display", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 987, + "subsets": { + "latin": { + "xWidthAvg": 987 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "300": { + "familyName": "Battambang", + "fullName": "Battambang Light", + "postscriptName": "Battambang-Light", + "category": "display", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 994, + "subsets": { + "latin": { + "xWidthAvg": 994 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "700": { + "familyName": "Battambang", + "fullName": "Battambang Bold", + "postscriptName": "Battambang-Bold", + "category": "display", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 1014, + "subsets": { + "latin": { + "xWidthAvg": 1014 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "900": { + "familyName": "Battambang", + "fullName": "Battambang Black", + "postscriptName": "Battambang-Black", + "category": "display", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 1022, + "subsets": { + "latin": { + "xWidthAvg": 1022 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "regular": { + "familyName": "Battambang", + "fullName": "Battambang Regular", + "postscriptName": "Battambang-Regular", + "category": "display", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 1001, + "subsets": { + "latin": { + "xWidthAvg": 1001 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "baumans": { + "familyName": "Baumans", + "fullName": "Baumans Regular", + "postscriptName": "Baumans-Regular", + "category": "display", + "capHeight": 700, + "ascent": 942, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "Baumans", + "fullName": "Baumans Regular", + "postscriptName": "Baumans-Regular", + "category": "display", + "capHeight": 700, + "ascent": 942, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "bayon": { + "familyName": "Bayon", + "fullName": "Bayon Regular", + "postscriptName": "Bayon-Regular", + "category": "sans-serif", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 813, + "subsets": { + "latin": { + "xWidthAvg": 813 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Bayon", + "fullName": "Bayon Regular", + "postscriptName": "Bayon-Regular", + "category": "sans-serif", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 813, + "subsets": { + "latin": { + "xWidthAvg": 813 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "beVietnamPro": { + "familyName": "Be Vietnam Pro", + "fullName": "Be Vietnam Pro Regular", + "postscriptName": "BeVietnamPro-Regular", + "category": "sans-serif", + "capHeight": 740, + "ascent": 1000, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "100": { + "familyName": "Be Vietnam Pro", + "fullName": "Be Vietnam Pro Thin", + "postscriptName": "BeVietnamPro-Thin", + "category": "sans-serif", + "capHeight": 740, + "ascent": 1000, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200": { + "familyName": "Be Vietnam Pro", + "fullName": "Be Vietnam Pro ExtraLight", + "postscriptName": "BeVietnamPro-ExtraLight", + "category": "sans-serif", + "capHeight": 740, + "ascent": 1000, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Be Vietnam Pro", + "fullName": "Be Vietnam Pro Light", + "postscriptName": "BeVietnamPro-Light", + "category": "sans-serif", + "capHeight": 740, + "ascent": 1000, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Be Vietnam Pro", + "fullName": "Be Vietnam Pro Medium", + "postscriptName": "BeVietnamPro-Medium", + "category": "sans-serif", + "capHeight": 740, + "ascent": 1000, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Be Vietnam Pro", + "fullName": "Be Vietnam Pro SemiBold", + "postscriptName": "BeVietnamPro-SemiBold", + "category": "sans-serif", + "capHeight": 740, + "ascent": 1000, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Be Vietnam Pro", + "fullName": "Be Vietnam Pro Bold", + "postscriptName": "BeVietnamPro-Bold", + "category": "sans-serif", + "capHeight": 740, + "ascent": 1000, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 511, + "subsets": { + "latin": { + "xWidthAvg": 511 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Be Vietnam Pro", + "fullName": "Be Vietnam Pro ExtraBold", + "postscriptName": "BeVietnamPro-ExtraBold", + "category": "sans-serif", + "capHeight": 740, + "ascent": 1000, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 517, + "subsets": { + "latin": { + "xWidthAvg": 517 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "Be Vietnam Pro", + "fullName": "Be Vietnam Pro Black", + "postscriptName": "BeVietnamPro-Black", + "category": "sans-serif", + "capHeight": 740, + "ascent": 1000, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 524, + "subsets": { + "latin": { + "xWidthAvg": 524 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Be Vietnam Pro", + "fullName": "Be Vietnam Pro Regular", + "postscriptName": "BeVietnamPro-Regular", + "category": "sans-serif", + "capHeight": 740, + "ascent": 1000, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Be Vietnam Pro", + "fullName": "Be Vietnam Pro Italic", + "postscriptName": "BeVietnamPro-Italic", + "category": "sans-serif", + "capHeight": 740, + "ascent": 1000, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900italic": { + "familyName": "Be Vietnam Pro", + "fullName": "Be Vietnam Pro Black Italic", + "postscriptName": "BeVietnamPro-BlackItalic", + "category": "sans-serif", + "capHeight": 740, + "ascent": 1000, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 522, + "subsets": { + "latin": { + "xWidthAvg": 522 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800italic": { + "familyName": "Be Vietnam Pro", + "fullName": "Be Vietnam Pro ExtraBold Italic", + "postscriptName": "BeVietnamPro-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 740, + "ascent": 1000, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 515, + "subsets": { + "latin": { + "xWidthAvg": 515 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700italic": { + "familyName": "Be Vietnam Pro", + "fullName": "Be Vietnam Pro Bold Italic", + "postscriptName": "BeVietnamPro-BoldItalic", + "category": "sans-serif", + "capHeight": 740, + "ascent": 1000, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 508, + "subsets": { + "latin": { + "xWidthAvg": 508 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600italic": { + "familyName": "Be Vietnam Pro", + "fullName": "Be Vietnam Pro SemiBold Italic", + "postscriptName": "BeVietnamPro-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 740, + "ascent": 1000, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 501, + "subsets": { + "latin": { + "xWidthAvg": 501 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500italic": { + "familyName": "Be Vietnam Pro", + "fullName": "Be Vietnam Pro Medium Italic", + "postscriptName": "BeVietnamPro-MediumItalic", + "category": "sans-serif", + "capHeight": 740, + "ascent": 1000, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300italic": { + "familyName": "Be Vietnam Pro", + "fullName": "Be Vietnam Pro Light Italic", + "postscriptName": "BeVietnamPro-LightItalic", + "category": "sans-serif", + "capHeight": 740, + "ascent": 1000, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200italic": { + "familyName": "Be Vietnam Pro", + "fullName": "Be Vietnam Pro ExtraLight Italic", + "postscriptName": "BeVietnamPro-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 740, + "ascent": 1000, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "100italic": { + "familyName": "Be Vietnam Pro", + "fullName": "Be Vietnam Pro Thin Italic", + "postscriptName": "BeVietnamPro-ThinItalic", + "category": "sans-serif", + "capHeight": 740, + "ascent": 1000, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "beauRivage": { + "familyName": "Beau Rivage", + "fullName": "Beau Rivage Regular", + "postscriptName": "BeauRivage-Regular", + "category": "handwriting", + "capHeight": 700, + "ascent": 940, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 350, + "xWidthAvg": 288, + "subsets": { + "latin": { + "xWidthAvg": 288 + }, + "thai": { + "xWidthAvg": 437 + } + }, + "variants": { + "regular": { + "familyName": "Beau Rivage", + "fullName": "Beau Rivage Regular", + "postscriptName": "BeauRivage-Regular", + "category": "handwriting", + "capHeight": 700, + "ascent": 940, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 350, + "xWidthAvg": 288, + "subsets": { + "latin": { + "xWidthAvg": 288 + }, + "thai": { + "xWidthAvg": 437 + } + } + } + } + }, + "bebasNeue": { + "familyName": "Bebas Neue", + "fullName": "Bebas Neue Regular", + "postscriptName": "BebasNeue-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 700, + "xWidthAvg": 342, + "subsets": { + "latin": { + "xWidthAvg": 342 + }, + "thai": { + "xWidthAvg": 738 + } + }, + "variants": { + "regular": { + "familyName": "Bebas Neue", + "fullName": "Bebas Neue Regular", + "postscriptName": "BebasNeue-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 700, + "xWidthAvg": 342, + "subsets": { + "latin": { + "xWidthAvg": 342 + }, + "thai": { + "xWidthAvg": 738 + } + } + } + } + }, + "beiruti": { + "familyName": "Beiruti", + "fullName": "Beiruti Regular", + "postscriptName": "Beiruti-Regular", + "category": "sans-serif", + "capHeight": 605, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 390, + "xWidthAvg": 343, + "subsets": { + "latin": { + "xWidthAvg": 343 + }, + "thai": { + "xWidthAvg": 493 + } + }, + "variants": { + "200": { + "familyName": "Beiruti", + "fullName": "Beiruti ExtraLight", + "postscriptName": "Beiruti-ExtraLight", + "category": "sans-serif", + "capHeight": 604, + "ascent": 850, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 381, + "xWidthAvg": 333, + "subsets": { + "latin": { + "xWidthAvg": 333 + }, + "thai": { + "xWidthAvg": 498 + } + } + }, + "300": { + "familyName": "Beiruti", + "fullName": "Beiruti Light", + "postscriptName": "Beiruti-Light", + "category": "sans-serif", + "capHeight": 605, + "ascent": 875, + "descent": -325, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 338, + "subsets": { + "latin": { + "xWidthAvg": 338 + }, + "thai": { + "xWidthAvg": 496 + } + } + }, + "500": { + "familyName": "Beiruti", + "fullName": "Beiruti Medium", + "postscriptName": "Beiruti-Medium", + "category": "sans-serif", + "capHeight": 605, + "ascent": 890, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 394, + "xWidthAvg": 348, + "subsets": { + "latin": { + "xWidthAvg": 348 + }, + "thai": { + "xWidthAvg": 490 + } + } + }, + "600": { + "familyName": "Beiruti", + "fullName": "Beiruti SemiBold", + "postscriptName": "Beiruti-SemiBold", + "category": "sans-serif", + "capHeight": 606, + "ascent": 880, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 398, + "xWidthAvg": 353, + "subsets": { + "latin": { + "xWidthAvg": 353 + }, + "thai": { + "xWidthAvg": 488 + } + } + }, + "700": { + "familyName": "Beiruti", + "fullName": "Beiruti Bold", + "postscriptName": "Beiruti-Bold", + "category": "sans-serif", + "capHeight": 606, + "ascent": 870, + "descent": -330, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 403, + "xWidthAvg": 358, + "subsets": { + "latin": { + "xWidthAvg": 358 + }, + "thai": { + "xWidthAvg": 485 + } + } + }, + "800": { + "familyName": "Beiruti", + "fullName": "Beiruti ExtraBold", + "postscriptName": "Beiruti-ExtraBold", + "category": "sans-serif", + "capHeight": 607, + "ascent": 860, + "descent": -340, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 407, + "xWidthAvg": 363, + "subsets": { + "latin": { + "xWidthAvg": 363 + }, + "thai": { + "xWidthAvg": 483 + } + } + }, + "900": { + "familyName": "Beiruti", + "fullName": "Beiruti Black", + "postscriptName": "Beiruti-Black", + "category": "sans-serif", + "capHeight": 607, + "ascent": 850, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 411, + "xWidthAvg": 369, + "subsets": { + "latin": { + "xWidthAvg": 369 + }, + "thai": { + "xWidthAvg": 480 + } + } + }, + "regular": { + "familyName": "Beiruti", + "fullName": "Beiruti Regular", + "postscriptName": "Beiruti-Regular", + "category": "sans-serif", + "capHeight": 605, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 390, + "xWidthAvg": 343, + "subsets": { + "latin": { + "xWidthAvg": 343 + }, + "thai": { + "xWidthAvg": 493 + } + } + } + } + }, + "belanosima": { + "familyName": "Belanosima", + "fullName": "Belanosima Regular", + "postscriptName": "Belanosima-Regular", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 1835, + "descent": -416, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 851, + "subsets": { + "latin": { + "xWidthAvg": 851 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "600": { + "familyName": "Belanosima", + "fullName": "Belanosima SemiBold", + "postscriptName": "Belanosima-SemiBold", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 1893, + "descent": -419, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 917, + "subsets": { + "latin": { + "xWidthAvg": 917 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "700": { + "familyName": "Belanosima", + "fullName": "Belanosima Bold", + "postscriptName": "Belanosima-Bold", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 1857, + "descent": -678, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 983, + "subsets": { + "latin": { + "xWidthAvg": 983 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "regular": { + "familyName": "Belanosima", + "fullName": "Belanosima Regular", + "postscriptName": "Belanosima-Regular", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 1835, + "descent": -416, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 851, + "subsets": { + "latin": { + "xWidthAvg": 851 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "belgrano": { + "familyName": "Belgrano", + "fullName": "Belgrano Regular", + "postscriptName": "Belgrano-Regular", + "category": "serif", + "capHeight": 706, + "ascent": 990, + "descent": -278, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 259 + } + }, + "variants": { + "regular": { + "familyName": "Belgrano", + "fullName": "Belgrano Regular", + "postscriptName": "Belgrano-Regular", + "category": "serif", + "capHeight": 706, + "ascent": 990, + "descent": -278, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 259 + } + } + } + } + }, + "bellefair": { + "familyName": "Bellefair", + "fullName": "Bellefair Regular", + "postscriptName": "Bellefair-Regular", + "category": "serif", + "capHeight": 688, + "ascent": 869, + "descent": -277, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 364, + "xWidthAvg": 377, + "subsets": { + "latin": { + "xWidthAvg": 377 + }, + "thai": { + "xWidthAvg": 536 + } + }, + "variants": { + "regular": { + "familyName": "Bellefair", + "fullName": "Bellefair Regular", + "postscriptName": "Bellefair-Regular", + "category": "serif", + "capHeight": 688, + "ascent": 869, + "descent": -277, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 364, + "xWidthAvg": 377, + "subsets": { + "latin": { + "xWidthAvg": 377 + }, + "thai": { + "xWidthAvg": 536 + } + } + } + } + }, + "belleza": { + "familyName": "Belleza", + "fullName": "Belleza Regular", + "postscriptName": "Belleza-Regular", + "category": "sans-serif", + "capHeight": 662, + "ascent": 928, + "descent": -224, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 452, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 250 + } + }, + "variants": { + "regular": { + "familyName": "Belleza", + "fullName": "Belleza Regular", + "postscriptName": "Belleza-Regular", + "category": "sans-serif", + "capHeight": 662, + "ascent": 928, + "descent": -224, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 452, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 250 + } + } + } + } + }, + "bellota": { + "familyName": "Bellota", + "fullName": "Bellota Regular", + "postscriptName": "Bellota-Regular", + "category": "display", + "capHeight": 684, + "ascent": 968, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "300": { + "familyName": "Bellota", + "fullName": "Bellota Light", + "postscriptName": "Bellota-Light", + "category": "display", + "capHeight": 684, + "ascent": 968, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Bellota", + "fullName": "Bellota Bold", + "postscriptName": "Bellota-Bold", + "category": "display", + "capHeight": 684, + "ascent": 968, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Bellota", + "fullName": "Bellota Regular", + "postscriptName": "Bellota-Regular", + "category": "display", + "capHeight": 684, + "ascent": 968, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "italic": { + "familyName": "Bellota", + "fullName": "Bellota Italic", + "postscriptName": "Bellota-Italic", + "category": "display", + "capHeight": 684, + "ascent": 968, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 582 + } + } + }, + "700italic": { + "familyName": "Bellota", + "fullName": "Bellota Bold Italic", + "postscriptName": "Bellota-BoldItalic", + "category": "display", + "capHeight": 684, + "ascent": 968, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 582 + } + } + }, + "300italic": { + "familyName": "Bellota", + "fullName": "Bellota Light Italic", + "postscriptName": "Bellota-LightItalic", + "category": "display", + "capHeight": 684, + "ascent": 968, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 582 + } + } + } + } + }, + "bellotaText": { + "familyName": "Bellota Text", + "fullName": "Bellota Text Regular", + "postscriptName": "BellotaText-Regular", + "category": "display", + "capHeight": 684, + "ascent": 968, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "300": { + "familyName": "Bellota Text", + "fullName": "Bellota Text Light", + "postscriptName": "BellotaText-Light", + "category": "display", + "capHeight": 684, + "ascent": 968, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Bellota Text", + "fullName": "Bellota Text Bold", + "postscriptName": "BellotaText-Bold", + "category": "display", + "capHeight": 684, + "ascent": 968, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Bellota Text", + "fullName": "Bellota Text Regular", + "postscriptName": "BellotaText-Regular", + "category": "display", + "capHeight": 684, + "ascent": 968, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "italic": { + "familyName": "Bellota Text", + "fullName": "Bellota Text Italic", + "postscriptName": "BellotaText-Italic", + "category": "display", + "capHeight": 684, + "ascent": 968, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 430, + "subsets": { + "latin": { + "xWidthAvg": 430 + }, + "thai": { + "xWidthAvg": 582 + } + } + }, + "700italic": { + "familyName": "Bellota Text", + "fullName": "Bellota Text Bold Italic", + "postscriptName": "BellotaText-BoldItalic", + "category": "display", + "capHeight": 684, + "ascent": 968, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 582 + } + } + }, + "300italic": { + "familyName": "Bellota Text", + "fullName": "Bellota Text Light Italic", + "postscriptName": "BellotaText-LightItalic", + "category": "display", + "capHeight": 684, + "ascent": 968, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 582 + } + } + } + } + }, + "benchNine": { + "familyName": "BenchNine", + "fullName": "BenchNine Regular", + "postscriptName": "BenchNine-Regular", + "category": "sans-serif", + "capHeight": 1438, + "ascent": 2020, + "descent": -720, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1006, + "xWidthAvg": 582, + "subsets": { + "latin": { + "xWidthAvg": 582 + }, + "thai": { + "xWidthAvg": 349 + } + }, + "variants": { + "300": { + "familyName": "BenchNine", + "fullName": "BenchNine Light", + "postscriptName": "BenchNine-Light", + "category": "sans-serif", + "capHeight": 1438, + "ascent": 2020, + "descent": -720, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1006, + "xWidthAvg": 549, + "subsets": { + "latin": { + "xWidthAvg": 549 + }, + "thai": { + "xWidthAvg": 349 + } + } + }, + "700": { + "familyName": "BenchNine", + "fullName": "BenchNine Bold", + "postscriptName": "BenchNine-Bold", + "category": "sans-serif", + "ascent": 2020, + "descent": -720, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 595, + "subsets": { + "latin": { + "xWidthAvg": 595 + }, + "thai": { + "xWidthAvg": 349 + } + } + }, + "regular": { + "familyName": "BenchNine", + "fullName": "BenchNine Regular", + "postscriptName": "BenchNine-Regular", + "category": "sans-serif", + "capHeight": 1438, + "ascent": 2020, + "descent": -720, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1006, + "xWidthAvg": 582, + "subsets": { + "latin": { + "xWidthAvg": 582 + }, + "thai": { + "xWidthAvg": 349 + } + } + } + } + }, + "benne": { + "familyName": "Benne", + "fullName": "Benne Regular", + "postscriptName": "Benne-Regular", + "category": "serif", + "capHeight": 655, + "ascent": 630, + "descent": -370, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 404, + "xWidthAvg": 389, + "subsets": { + "latin": { + "xWidthAvg": 389 + }, + "thai": { + "xWidthAvg": 364 + } + }, + "variants": { + "regular": { + "familyName": "Benne", + "fullName": "Benne Regular", + "postscriptName": "Benne-Regular", + "category": "serif", + "capHeight": 655, + "ascent": 630, + "descent": -370, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 404, + "xWidthAvg": 389, + "subsets": { + "latin": { + "xWidthAvg": 389 + }, + "thai": { + "xWidthAvg": 364 + } + } + } + } + }, + "bentham": { + "familyName": "Bentham", + "fullName": "Bentham Regular", + "postscriptName": "Bentham-Regular", + "category": "serif", + "ascent": 879, + "descent": -260, + "lineGap": 92, + "unitsPerEm": 1024, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 372 + } + }, + "variants": { + "regular": { + "familyName": "Bentham", + "fullName": "Bentham Regular", + "postscriptName": "Bentham-Regular", + "category": "serif", + "ascent": 879, + "descent": -260, + "lineGap": 92, + "unitsPerEm": 1024, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 372 + } + } + } + } + }, + "berkshireSwash": { + "familyName": "Berkshire Swash", + "fullName": "Berkshire Swash Regular", + "postscriptName": "BerkshireSwash-Regular", + "category": "handwriting", + "capHeight": 1858, + "ascent": 2007, + "descent": -537, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1038, + "xWidthAvg": 870, + "subsets": { + "latin": { + "xWidthAvg": 870 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Berkshire Swash", + "fullName": "Berkshire Swash Regular", + "postscriptName": "BerkshireSwash-Regular", + "category": "handwriting", + "capHeight": 1858, + "ascent": 2007, + "descent": -537, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1038, + "xWidthAvg": 870, + "subsets": { + "latin": { + "xWidthAvg": 870 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "besley": { + "familyName": "Besley", + "fullName": "Besley Regular", + "postscriptName": "Besley-Regular", + "category": "serif", + "capHeight": 1500, + "ascent": 2500, + "descent": -850, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1040, + "xWidthAvg": 1007, + "subsets": { + "latin": { + "xWidthAvg": 1007 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "500": { + "familyName": "Besley", + "fullName": "Besley Medium", + "postscriptName": "Besley-Medium", + "category": "serif", + "capHeight": 1500, + "ascent": 2500, + "descent": -850, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1040, + "xWidthAvg": 1032, + "subsets": { + "latin": { + "xWidthAvg": 1032 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "600": { + "familyName": "Besley", + "fullName": "Besley SemiBold", + "postscriptName": "Besley-SemiBold", + "category": "serif", + "capHeight": 1500, + "ascent": 2500, + "descent": -850, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1040, + "xWidthAvg": 1060, + "subsets": { + "latin": { + "xWidthAvg": 1060 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "Besley", + "fullName": "Besley Bold", + "postscriptName": "Besley-Bold", + "category": "serif", + "capHeight": 1500, + "ascent": 2500, + "descent": -850, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1040, + "xWidthAvg": 1096, + "subsets": { + "latin": { + "xWidthAvg": 1096 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "800": { + "familyName": "Besley", + "fullName": "Besley ExtraBold", + "postscriptName": "Besley-ExtraBold", + "category": "serif", + "capHeight": 1500, + "ascent": 2500, + "descent": -850, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1040, + "xWidthAvg": 1138, + "subsets": { + "latin": { + "xWidthAvg": 1138 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "900": { + "familyName": "Besley", + "fullName": "Besley Black", + "postscriptName": "Besley-Black", + "category": "serif", + "capHeight": 1500, + "ascent": 2500, + "descent": -850, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1040, + "xWidthAvg": 1186, + "subsets": { + "latin": { + "xWidthAvg": 1186 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Besley", + "fullName": "Besley Regular", + "postscriptName": "Besley-Regular", + "category": "serif", + "capHeight": 1500, + "ascent": 2500, + "descent": -850, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1040, + "xWidthAvg": 1007, + "subsets": { + "latin": { + "xWidthAvg": 1007 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "italic": { + "familyName": "Besley", + "fullName": "Besley Italic", + "postscriptName": "Besley-Italic", + "category": "serif", + "capHeight": 1500, + "ascent": 2500, + "descent": -850, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1040, + "xWidthAvg": 996, + "subsets": { + "latin": { + "xWidthAvg": 996 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "900italic": { + "familyName": "Besley", + "fullName": "Besley Black Italic", + "postscriptName": "Besley-BlackItalic", + "category": "serif", + "capHeight": 1500, + "ascent": 2500, + "descent": -850, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1040, + "xWidthAvg": 1233, + "subsets": { + "latin": { + "xWidthAvg": 1233 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "800italic": { + "familyName": "Besley", + "fullName": "Besley ExtraBold Italic", + "postscriptName": "Besley-ExtraBoldItalic", + "category": "serif", + "capHeight": 1500, + "ascent": 2500, + "descent": -850, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1040, + "xWidthAvg": 1169, + "subsets": { + "latin": { + "xWidthAvg": 1169 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700italic": { + "familyName": "Besley", + "fullName": "Besley Bold Italic", + "postscriptName": "Besley-BoldItalic", + "category": "serif", + "capHeight": 1500, + "ascent": 2500, + "descent": -850, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1040, + "xWidthAvg": 1114, + "subsets": { + "latin": { + "xWidthAvg": 1114 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "600italic": { + "familyName": "Besley", + "fullName": "Besley SemiBold Italic", + "postscriptName": "Besley-SemiBoldItalic", + "category": "serif", + "capHeight": 1500, + "ascent": 2500, + "descent": -850, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1040, + "xWidthAvg": 1067, + "subsets": { + "latin": { + "xWidthAvg": 1067 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "500italic": { + "familyName": "Besley", + "fullName": "Besley Medium Italic", + "postscriptName": "Besley-MediumItalic", + "category": "serif", + "capHeight": 1500, + "ascent": 2500, + "descent": -850, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1040, + "xWidthAvg": 1029, + "subsets": { + "latin": { + "xWidthAvg": 1029 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "bethEllen": { + "familyName": "Beth Ellen", + "fullName": "Beth Ellen Regular", + "postscriptName": "BethEllen-Regular", + "category": "handwriting", + "capHeight": 2248, + "ascent": 3250, + "descent": -1190, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1208, + "xWidthAvg": 1105, + "subsets": { + "latin": { + "xWidthAvg": 1105 + }, + "thai": { + "xWidthAvg": 863 + } + }, + "variants": { + "regular": { + "familyName": "Beth Ellen", + "fullName": "Beth Ellen Regular", + "postscriptName": "BethEllen-Regular", + "category": "handwriting", + "capHeight": 2248, + "ascent": 3250, + "descent": -1190, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1208, + "xWidthAvg": 1105, + "subsets": { + "latin": { + "xWidthAvg": 1105 + }, + "thai": { + "xWidthAvg": 863 + } + } + } + } + }, + "bevan": { + "familyName": "Bevan", + "fullName": "Bevan Regular", + "postscriptName": "Bevan-Regular", + "category": "serif", + "capHeight": 1592, + "ascent": 2366, + "descent": -925, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1072, + "xWidthAvg": 1151, + "subsets": { + "latin": { + "xWidthAvg": 1151 + }, + "thai": { + "xWidthAvg": 954 + } + }, + "variants": { + "regular": { + "familyName": "Bevan", + "fullName": "Bevan Regular", + "postscriptName": "Bevan-Regular", + "category": "serif", + "capHeight": 1592, + "ascent": 2366, + "descent": -925, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1072, + "xWidthAvg": 1151, + "subsets": { + "latin": { + "xWidthAvg": 1151 + }, + "thai": { + "xWidthAvg": 954 + } + } + }, + "italic": { + "familyName": "Bevan", + "fullName": "Bevan Italic", + "postscriptName": "Bevan-Italic", + "category": "serif", + "capHeight": 1592, + "ascent": 2366, + "descent": -925, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1072, + "xWidthAvg": 1161, + "subsets": { + "latin": { + "xWidthAvg": 1161 + }, + "thai": { + "xWidthAvg": 962 + } + } + } + } + }, + "bhuTukaExpandedOne": { + "familyName": "BhuTuka Expanded One", + "fullName": "BhuTuka Expanded One Regular", + "postscriptName": "BhuTukaExpandedOne-Regular", + "category": "serif", + "capHeight": 520, + "ascent": 826, + "descent": -182, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 357, + "xWidthAvg": 690, + "subsets": { + "latin": { + "xWidthAvg": 690 + }, + "thai": { + "xWidthAvg": 750 + } + }, + "variants": { + "regular": { + "familyName": "BhuTuka Expanded One", + "fullName": "BhuTuka Expanded One Regular", + "postscriptName": "BhuTukaExpandedOne-Regular", + "category": "serif", + "capHeight": 520, + "ascent": 826, + "descent": -182, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 357, + "xWidthAvg": 690, + "subsets": { + "latin": { + "xWidthAvg": 690 + }, + "thai": { + "xWidthAvg": 750 + } + } + } + } + }, + "bigShouldersDisplay": { + "familyName": "Big Shoulders Display", + "fullName": "Big Shoulders Display Regular", + "postscriptName": "BigShouldersDisplay-Regular", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 598, + "subsets": { + "latin": { + "xWidthAvg": 598 + }, + "thai": { + "xWidthAvg": 1056 + } + }, + "variants": { + "100": { + "familyName": "Big Shoulders Display", + "fullName": "Big Shoulders Display Thin", + "postscriptName": "BigShouldersDisplay-Thin", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 814 + } + } + }, + "200": { + "familyName": "Big Shoulders Display", + "fullName": "Big Shoulders Display ExtraLight", + "postscriptName": "BigShouldersDisplay-ExtraLight", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 508, + "subsets": { + "latin": { + "xWidthAvg": 508 + }, + "thai": { + "xWidthAvg": 869 + } + } + }, + "300": { + "familyName": "Big Shoulders Display", + "fullName": "Big Shoulders Display Light", + "postscriptName": "BigShouldersDisplay-Light", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 547, + "subsets": { + "latin": { + "xWidthAvg": 547 + }, + "thai": { + "xWidthAvg": 947 + } + } + }, + "500": { + "familyName": "Big Shoulders Display", + "fullName": "Big Shoulders Display Medium", + "postscriptName": "BigShouldersDisplay-Medium", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 624, + "subsets": { + "latin": { + "xWidthAvg": 624 + }, + "thai": { + "xWidthAvg": 1111 + } + } + }, + "600": { + "familyName": "Big Shoulders Display", + "fullName": "Big Shoulders Display SemiBold", + "postscriptName": "BigShouldersDisplay-SemiBold", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 649, + "subsets": { + "latin": { + "xWidthAvg": 649 + }, + "thai": { + "xWidthAvg": 1164 + } + } + }, + "700": { + "familyName": "Big Shoulders Display", + "fullName": "Big Shoulders Display Bold", + "postscriptName": "BigShouldersDisplay-Bold", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 699, + "subsets": { + "latin": { + "xWidthAvg": 699 + }, + "thai": { + "xWidthAvg": 1272 + } + } + }, + "800": { + "familyName": "Big Shoulders Display", + "fullName": "Big Shoulders Display ExtraBold", + "postscriptName": "BigShouldersDisplay-ExtraBold", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 750, + "subsets": { + "latin": { + "xWidthAvg": 750 + }, + "thai": { + "xWidthAvg": 1381 + } + } + }, + "900": { + "familyName": "Big Shoulders Display", + "fullName": "Big Shoulders Display Black", + "postscriptName": "BigShouldersDisplay-Black", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 800, + "subsets": { + "latin": { + "xWidthAvg": 800 + }, + "thai": { + "xWidthAvg": 1490 + } + } + }, + "regular": { + "familyName": "Big Shoulders Display", + "fullName": "Big Shoulders Display Regular", + "postscriptName": "BigShouldersDisplay-Regular", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 598, + "subsets": { + "latin": { + "xWidthAvg": 598 + }, + "thai": { + "xWidthAvg": 1056 + } + } + } + } + }, + "bigShouldersInlineDisplay": { + "familyName": "Big Shoulders Inline Display", + "fullName": "Big Shoulders Inline Display Regular", + "postscriptName": "BigShouldersInlineDisplay-Regular", + "category": "display", + "capHeight": 3200, + "ascent": 3936, + "descent": -852, + "lineGap": 0, + "unitsPerEm": 4000, + "xHeight": 2400, + "xWidthAvg": 1205, + "subsets": { + "latin": { + "xWidthAvg": 1205 + }, + "thai": { + "xWidthAvg": 2111 + } + }, + "variants": { + "100": { + "familyName": "Big Shoulders Inline Display", + "fullName": "Big Shoulders Inline Display Thin", + "postscriptName": "BigShouldersInlineDisplay-Thin", + "category": "display", + "capHeight": 3200, + "ascent": 3936, + "descent": -852, + "lineGap": 0, + "unitsPerEm": 4000, + "xHeight": 2400, + "xWidthAvg": 962, + "subsets": { + "latin": { + "xWidthAvg": 962 + }, + "thai": { + "xWidthAvg": 1628 + } + } + }, + "200": { + "familyName": "Big Shoulders Inline Display", + "fullName": "Big Shoulders Inline Display ExtraLight", + "postscriptName": "BigShouldersInlineDisplay-ExtraLight", + "category": "display", + "capHeight": 3200, + "ascent": 3936, + "descent": -852, + "lineGap": 0, + "unitsPerEm": 4000, + "xHeight": 2400, + "xWidthAvg": 1019, + "subsets": { + "latin": { + "xWidthAvg": 1019 + }, + "thai": { + "xWidthAvg": 1738 + } + } + }, + "300": { + "familyName": "Big Shoulders Inline Display", + "fullName": "Big Shoulders Inline Display Light", + "postscriptName": "BigShouldersInlineDisplay-Light", + "category": "display", + "capHeight": 3200, + "ascent": 3936, + "descent": -852, + "lineGap": 0, + "unitsPerEm": 4000, + "xHeight": 2400, + "xWidthAvg": 1100, + "subsets": { + "latin": { + "xWidthAvg": 1100 + }, + "thai": { + "xWidthAvg": 1895 + } + } + }, + "500": { + "familyName": "Big Shoulders Inline Display", + "fullName": "Big Shoulders Inline Display Medium", + "postscriptName": "BigShouldersInlineDisplay-Medium", + "category": "display", + "capHeight": 3200, + "ascent": 3936, + "descent": -852, + "lineGap": 0, + "unitsPerEm": 4000, + "xHeight": 2400, + "xWidthAvg": 1257, + "subsets": { + "latin": { + "xWidthAvg": 1257 + }, + "thai": { + "xWidthAvg": 2221 + } + } + }, + "600": { + "familyName": "Big Shoulders Inline Display", + "fullName": "Big Shoulders Inline Display SemiBold", + "postscriptName": "BigShouldersInlineDisplay-SemiBold", + "category": "display", + "capHeight": 3200, + "ascent": 3936, + "descent": -852, + "lineGap": 0, + "unitsPerEm": 4000, + "xHeight": 2400, + "xWidthAvg": 1307, + "subsets": { + "latin": { + "xWidthAvg": 1307 + }, + "thai": { + "xWidthAvg": 2329 + } + } + }, + "700": { + "familyName": "Big Shoulders Inline Display", + "fullName": "Big Shoulders Inline Display Bold", + "postscriptName": "BigShouldersInlineDisplay-Bold", + "category": "display", + "capHeight": 3200, + "ascent": 3936, + "descent": -852, + "lineGap": 0, + "unitsPerEm": 4000, + "xHeight": 2400, + "xWidthAvg": 1409, + "subsets": { + "latin": { + "xWidthAvg": 1409 + }, + "thai": { + "xWidthAvg": 2545 + } + } + }, + "800": { + "familyName": "Big Shoulders Inline Display", + "fullName": "Big Shoulders Inline Display ExtraBold", + "postscriptName": "BigShouldersInlineDisplay-ExtraBold", + "category": "display", + "capHeight": 3200, + "ascent": 3936, + "descent": -852, + "lineGap": 0, + "unitsPerEm": 4000, + "xHeight": 2400, + "xWidthAvg": 1512, + "subsets": { + "latin": { + "xWidthAvg": 1512 + }, + "thai": { + "xWidthAvg": 2762 + } + } + }, + "900": { + "familyName": "Big Shoulders Inline Display", + "fullName": "Big Shoulders Inline Display Black", + "postscriptName": "BigShouldersInlineDisplay-Black", + "category": "display", + "capHeight": 3200, + "ascent": 3936, + "descent": -852, + "lineGap": 0, + "unitsPerEm": 4000, + "xHeight": 2400, + "xWidthAvg": 1615, + "subsets": { + "latin": { + "xWidthAvg": 1615 + }, + "thai": { + "xWidthAvg": 2980 + } + } + }, + "regular": { + "familyName": "Big Shoulders Inline Display", + "fullName": "Big Shoulders Inline Display Regular", + "postscriptName": "BigShouldersInlineDisplay-Regular", + "category": "display", + "capHeight": 3200, + "ascent": 3936, + "descent": -852, + "lineGap": 0, + "unitsPerEm": 4000, + "xHeight": 2400, + "xWidthAvg": 1205, + "subsets": { + "latin": { + "xWidthAvg": 1205 + }, + "thai": { + "xWidthAvg": 2111 + } + } + } + } + }, + "bigShouldersInlineText": { + "familyName": "Big Shoulders Inline Text", + "fullName": "Big Shoulders Inline Text Regular", + "postscriptName": "BigShouldersInlineText-Regular", + "category": "display", + "capHeight": 3200, + "ascent": 3936, + "descent": -852, + "lineGap": 0, + "unitsPerEm": 4000, + "xHeight": 2400, + "xWidthAvg": 1333, + "subsets": { + "latin": { + "xWidthAvg": 1333 + }, + "thai": { + "xWidthAvg": 2584 + } + }, + "variants": { + "100": { + "familyName": "Big Shoulders Inline Text", + "fullName": "Big Shoulders Inline Text Thin", + "postscriptName": "BigShouldersInlineText-Thin", + "category": "display", + "capHeight": 3200, + "ascent": 3936, + "descent": -852, + "lineGap": 0, + "unitsPerEm": 4000, + "xHeight": 2400, + "xWidthAvg": 1151, + "subsets": { + "latin": { + "xWidthAvg": 1151 + }, + "thai": { + "xWidthAvg": 2188 + } + } + }, + "200": { + "familyName": "Big Shoulders Inline Text", + "fullName": "Big Shoulders Inline Text ExtraLight", + "postscriptName": "BigShouldersInlineText-ExtraLight", + "category": "display", + "capHeight": 3200, + "ascent": 3936, + "descent": -852, + "lineGap": 0, + "unitsPerEm": 4000, + "xHeight": 2400, + "xWidthAvg": 1191, + "subsets": { + "latin": { + "xWidthAvg": 1191 + }, + "thai": { + "xWidthAvg": 2278 + } + } + }, + "300": { + "familyName": "Big Shoulders Inline Text", + "fullName": "Big Shoulders Inline Text Light", + "postscriptName": "BigShouldersInlineText-Light", + "category": "display", + "capHeight": 3200, + "ascent": 3936, + "descent": -852, + "lineGap": 0, + "unitsPerEm": 4000, + "xHeight": 2400, + "xWidthAvg": 1248, + "subsets": { + "latin": { + "xWidthAvg": 1248 + }, + "thai": { + "xWidthAvg": 2406 + } + } + }, + "500": { + "familyName": "Big Shoulders Inline Text", + "fullName": "Big Shoulders Inline Text Medium", + "postscriptName": "BigShouldersInlineText-Medium", + "category": "display", + "capHeight": 3200, + "ascent": 3936, + "descent": -852, + "lineGap": 0, + "unitsPerEm": 4000, + "xHeight": 2400, + "xWidthAvg": 1379, + "subsets": { + "latin": { + "xWidthAvg": 1379 + }, + "thai": { + "xWidthAvg": 2675 + } + } + }, + "600": { + "familyName": "Big Shoulders Inline Text", + "fullName": "Big Shoulders Inline Text SemiBold", + "postscriptName": "BigShouldersInlineText-SemiBold", + "category": "display", + "capHeight": 3200, + "ascent": 3936, + "descent": -852, + "lineGap": 0, + "unitsPerEm": 4000, + "xHeight": 2400, + "xWidthAvg": 1423, + "subsets": { + "latin": { + "xWidthAvg": 1423 + }, + "thai": { + "xWidthAvg": 2763 + } + } + }, + "700": { + "familyName": "Big Shoulders Inline Text", + "fullName": "Big Shoulders Inline Text Bold", + "postscriptName": "BigShouldersInlineText-Bold", + "category": "display", + "capHeight": 3200, + "ascent": 3936, + "descent": -852, + "lineGap": 0, + "unitsPerEm": 4000, + "xHeight": 2400, + "xWidthAvg": 1512, + "subsets": { + "latin": { + "xWidthAvg": 1512 + }, + "thai": { + "xWidthAvg": 2941 + } + } + }, + "800": { + "familyName": "Big Shoulders Inline Text", + "fullName": "Big Shoulders Inline Text ExtraBold", + "postscriptName": "BigShouldersInlineText-ExtraBold", + "category": "display", + "capHeight": 3200, + "ascent": 3936, + "descent": -852, + "lineGap": 0, + "unitsPerEm": 4000, + "xHeight": 2400, + "xWidthAvg": 1601, + "subsets": { + "latin": { + "xWidthAvg": 1601 + }, + "thai": { + "xWidthAvg": 3121 + } + } + }, + "900": { + "familyName": "Big Shoulders Inline Text", + "fullName": "Big Shoulders Inline Text Black", + "postscriptName": "BigShouldersInlineText-Black", + "category": "display", + "capHeight": 3200, + "ascent": 3936, + "descent": -852, + "lineGap": 0, + "unitsPerEm": 4000, + "xHeight": 2400, + "xWidthAvg": 1691, + "subsets": { + "latin": { + "xWidthAvg": 1691 + }, + "thai": { + "xWidthAvg": 3300 + } + } + }, + "regular": { + "familyName": "Big Shoulders Inline Text", + "fullName": "Big Shoulders Inline Text Regular", + "postscriptName": "BigShouldersInlineText-Regular", + "category": "display", + "capHeight": 3200, + "ascent": 3936, + "descent": -852, + "lineGap": 0, + "unitsPerEm": 4000, + "xHeight": 2400, + "xWidthAvg": 1333, + "subsets": { + "latin": { + "xWidthAvg": 1333 + }, + "thai": { + "xWidthAvg": 2584 + } + } + } + } + }, + "bigShouldersStencilDisplay": { + "familyName": "Big Shoulders Stencil Display", + "fullName": "Big Shoulders Stencil Display Regular", + "postscriptName": "BigShouldersStencilDisplay-Regular", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 599, + "subsets": { + "latin": { + "xWidthAvg": 599 + }, + "thai": { + "xWidthAvg": 1056 + } + }, + "variants": { + "100": { + "familyName": "Big Shoulders Stencil Display", + "fullName": "Big Shoulders Stencil Display Thin", + "postscriptName": "BigShouldersStencilDisplay-Thin", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 814 + } + } + }, + "200": { + "familyName": "Big Shoulders Stencil Display", + "fullName": "Big Shoulders Stencil Display ExtraLight", + "postscriptName": "BigShouldersStencilDisplay-ExtraLight", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 509, + "subsets": { + "latin": { + "xWidthAvg": 509 + }, + "thai": { + "xWidthAvg": 869 + } + } + }, + "300": { + "familyName": "Big Shoulders Stencil Display", + "fullName": "Big Shoulders Stencil Display Light", + "postscriptName": "BigShouldersStencilDisplay-Light", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 548, + "subsets": { + "latin": { + "xWidthAvg": 548 + }, + "thai": { + "xWidthAvg": 947 + } + } + }, + "500": { + "familyName": "Big Shoulders Stencil Display", + "fullName": "Big Shoulders Stencil Display Medium", + "postscriptName": "BigShouldersStencilDisplay-Medium", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 625, + "subsets": { + "latin": { + "xWidthAvg": 625 + }, + "thai": { + "xWidthAvg": 1111 + } + } + }, + "600": { + "familyName": "Big Shoulders Stencil Display", + "fullName": "Big Shoulders Stencil Display SemiBold", + "postscriptName": "BigShouldersStencilDisplay-SemiBold", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 650, + "subsets": { + "latin": { + "xWidthAvg": 650 + }, + "thai": { + "xWidthAvg": 1164 + } + } + }, + "700": { + "familyName": "Big Shoulders Stencil Display", + "fullName": "Big Shoulders Stencil Display Bold", + "postscriptName": "BigShouldersStencilDisplay-Bold", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 699, + "subsets": { + "latin": { + "xWidthAvg": 699 + }, + "thai": { + "xWidthAvg": 1272 + } + } + }, + "800": { + "familyName": "Big Shoulders Stencil Display", + "fullName": "Big Shoulders Stencil Display ExtraBold", + "postscriptName": "BigShouldersStencilDisplay-ExtraBold", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 750, + "subsets": { + "latin": { + "xWidthAvg": 750 + }, + "thai": { + "xWidthAvg": 1381 + } + } + }, + "900": { + "familyName": "Big Shoulders Stencil Display", + "fullName": "Big Shoulders Stencil Display Black", + "postscriptName": "BigShouldersStencilDisplay-Black", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 800, + "subsets": { + "latin": { + "xWidthAvg": 800 + }, + "thai": { + "xWidthAvg": 1490 + } + } + }, + "regular": { + "familyName": "Big Shoulders Stencil Display", + "fullName": "Big Shoulders Stencil Display Regular", + "postscriptName": "BigShouldersStencilDisplay-Regular", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 599, + "subsets": { + "latin": { + "xWidthAvg": 599 + }, + "thai": { + "xWidthAvg": 1056 + } + } + } + } + }, + "bigShouldersStencilText": { + "familyName": "Big Shoulders Stencil Text", + "fullName": "Big Shoulders Stencil Text Regular", + "postscriptName": "BigShouldersStencilText-Regular", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 666, + "subsets": { + "latin": { + "xWidthAvg": 666 + }, + "thai": { + "xWidthAvg": 1298 + } + }, + "variants": { + "100": { + "familyName": "Big Shoulders Stencil Text", + "fullName": "Big Shoulders Stencil Text Thin", + "postscriptName": "BigShouldersStencilText-Thin", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 573, + "subsets": { + "latin": { + "xWidthAvg": 573 + }, + "thai": { + "xWidthAvg": 1094 + } + } + }, + "200": { + "familyName": "Big Shoulders Stencil Text", + "fullName": "Big Shoulders Stencil Text ExtraLight", + "postscriptName": "BigShouldersStencilText-ExtraLight", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 593, + "subsets": { + "latin": { + "xWidthAvg": 593 + }, + "thai": { + "xWidthAvg": 1139 + } + } + }, + "300": { + "familyName": "Big Shoulders Stencil Text", + "fullName": "Big Shoulders Stencil Text Light", + "postscriptName": "BigShouldersStencilText-Light", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 623, + "subsets": { + "latin": { + "xWidthAvg": 623 + }, + "thai": { + "xWidthAvg": 1203 + } + } + }, + "500": { + "familyName": "Big Shoulders Stencil Text", + "fullName": "Big Shoulders Stencil Text Medium", + "postscriptName": "BigShouldersStencilText-Medium", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 689, + "subsets": { + "latin": { + "xWidthAvg": 689 + }, + "thai": { + "xWidthAvg": 1347 + } + } + }, + "600": { + "familyName": "Big Shoulders Stencil Text", + "fullName": "Big Shoulders Stencil Text SemiBold", + "postscriptName": "BigShouldersStencilText-SemiBold", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 711, + "subsets": { + "latin": { + "xWidthAvg": 711 + }, + "thai": { + "xWidthAvg": 1396 + } + } + }, + "700": { + "familyName": "Big Shoulders Stencil Text", + "fullName": "Big Shoulders Stencil Text Bold", + "postscriptName": "BigShouldersStencilText-Bold", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 755, + "subsets": { + "latin": { + "xWidthAvg": 755 + }, + "thai": { + "xWidthAvg": 1493 + } + } + }, + "800": { + "familyName": "Big Shoulders Stencil Text", + "fullName": "Big Shoulders Stencil Text ExtraBold", + "postscriptName": "BigShouldersStencilText-ExtraBold", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 800, + "subsets": { + "latin": { + "xWidthAvg": 800 + }, + "thai": { + "xWidthAvg": 1592 + } + } + }, + "900": { + "familyName": "Big Shoulders Stencil Text", + "fullName": "Big Shoulders Stencil Text Black", + "postscriptName": "BigShouldersStencilText-Black", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 844, + "subsets": { + "latin": { + "xWidthAvg": 844 + }, + "thai": { + "xWidthAvg": 1690 + } + } + }, + "regular": { + "familyName": "Big Shoulders Stencil Text", + "fullName": "Big Shoulders Stencil Text Regular", + "postscriptName": "BigShouldersStencilText-Regular", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 666, + "subsets": { + "latin": { + "xWidthAvg": 666 + }, + "thai": { + "xWidthAvg": 1298 + } + } + } + } + }, + "bigShouldersText": { + "familyName": "Big Shoulders Text", + "fullName": "Big Shoulders Text Regular", + "postscriptName": "BigShouldersText-Regular", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 664, + "subsets": { + "latin": { + "xWidthAvg": 664 + }, + "thai": { + "xWidthAvg": 1292 + } + }, + "variants": { + "100": { + "familyName": "Big Shoulders Text", + "fullName": "Big Shoulders Text Thin", + "postscriptName": "BigShouldersText-Thin", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 570, + "subsets": { + "latin": { + "xWidthAvg": 570 + }, + "thai": { + "xWidthAvg": 1094 + } + } + }, + "200": { + "familyName": "Big Shoulders Text", + "fullName": "Big Shoulders Text ExtraLight", + "postscriptName": "BigShouldersText-ExtraLight", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 591, + "subsets": { + "latin": { + "xWidthAvg": 591 + }, + "thai": { + "xWidthAvg": 1139 + } + } + }, + "300": { + "familyName": "Big Shoulders Text", + "fullName": "Big Shoulders Text Light", + "postscriptName": "BigShouldersText-Light", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 621, + "subsets": { + "latin": { + "xWidthAvg": 621 + }, + "thai": { + "xWidthAvg": 1203 + } + } + }, + "500": { + "familyName": "Big Shoulders Text", + "fullName": "Big Shoulders Text Medium", + "postscriptName": "BigShouldersText-Medium", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 687, + "subsets": { + "latin": { + "xWidthAvg": 687 + }, + "thai": { + "xWidthAvg": 1337 + } + } + }, + "600": { + "familyName": "Big Shoulders Text", + "fullName": "Big Shoulders Text SemiBold", + "postscriptName": "BigShouldersText-SemiBold", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 709, + "subsets": { + "latin": { + "xWidthAvg": 709 + }, + "thai": { + "xWidthAvg": 1382 + } + } + }, + "700": { + "familyName": "Big Shoulders Text", + "fullName": "Big Shoulders Text Bold", + "postscriptName": "BigShouldersText-Bold", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 753, + "subsets": { + "latin": { + "xWidthAvg": 753 + }, + "thai": { + "xWidthAvg": 1471 + } + } + }, + "800": { + "familyName": "Big Shoulders Text", + "fullName": "Big Shoulders Text ExtraBold", + "postscriptName": "BigShouldersText-ExtraBold", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 797, + "subsets": { + "latin": { + "xWidthAvg": 797 + }, + "thai": { + "xWidthAvg": 1560 + } + } + }, + "900": { + "familyName": "Big Shoulders Text", + "fullName": "Big Shoulders Text Black", + "postscriptName": "BigShouldersText-Black", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 842, + "subsets": { + "latin": { + "xWidthAvg": 842 + }, + "thai": { + "xWidthAvg": 1650 + } + } + }, + "regular": { + "familyName": "Big Shoulders Text", + "fullName": "Big Shoulders Text Regular", + "postscriptName": "BigShouldersText-Regular", + "category": "display", + "capHeight": 1600, + "ascent": 1968, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1200, + "xWidthAvg": 664, + "subsets": { + "latin": { + "xWidthAvg": 664 + }, + "thai": { + "xWidthAvg": 1292 + } + } + } + } + }, + "bigelowRules": { + "familyName": "Bigelow Rules", + "fullName": "Bigelow Rules Regular", + "postscriptName": "BigelowRules-Regular", + "category": "display", + "capHeight": 1528, + "ascent": 1857, + "descent": -516, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1227, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 410 + } + }, + "variants": { + "regular": { + "familyName": "Bigelow Rules", + "fullName": "Bigelow Rules Regular", + "postscriptName": "BigelowRules-Regular", + "category": "display", + "capHeight": 1528, + "ascent": 1857, + "descent": -516, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1227, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 410 + } + } + } + } + }, + "bigshotOne": { + "familyName": "Bigshot One", + "fullName": "Bigshot One Regular", + "postscriptName": "BigshotOne-Regular", + "category": "display", + "capHeight": 615, + "ascent": 869, + "descent": -179, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 449, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 160 + } + }, + "variants": { + "regular": { + "familyName": "Bigshot One", + "fullName": "Bigshot One Regular", + "postscriptName": "BigshotOne-Regular", + "category": "display", + "capHeight": 615, + "ascent": 869, + "descent": -179, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 449, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 160 + } + } + } + } + }, + "bilbo": { + "familyName": "Bilbo", + "fullName": "Bilbo Regular", + "postscriptName": "Bilbo-Regular", + "category": "handwriting", + "capHeight": 650, + "ascent": 850, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 375, + "xWidthAvg": 280, + "subsets": { + "latin": { + "xWidthAvg": 280 + }, + "thai": { + "xWidthAvg": 349 + } + }, + "variants": { + "regular": { + "familyName": "Bilbo", + "fullName": "Bilbo Regular", + "postscriptName": "Bilbo-Regular", + "category": "handwriting", + "capHeight": 650, + "ascent": 850, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 375, + "xWidthAvg": 280, + "subsets": { + "latin": { + "xWidthAvg": 280 + }, + "thai": { + "xWidthAvg": 349 + } + } + } + } + }, + "bilboSwashCaps": { + "familyName": "Bilbo Swash Caps", + "fullName": "Bilbo Swash Caps Regular", + "postscriptName": "BilboSwashCaps-Regular", + "category": "handwriting", + "capHeight": 542, + "ascent": 850, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 327, + "xWidthAvg": 289, + "subsets": { + "latin": { + "xWidthAvg": 289 + }, + "thai": { + "xWidthAvg": 0 + } + }, + "variants": { + "regular": { + "familyName": "Bilbo Swash Caps", + "fullName": "Bilbo Swash Caps Regular", + "postscriptName": "BilboSwashCaps-Regular", + "category": "handwriting", + "capHeight": 542, + "ascent": 850, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 327, + "xWidthAvg": 289, + "subsets": { + "latin": { + "xWidthAvg": 289 + }, + "thai": { + "xWidthAvg": 0 + } + } + } + } + }, + "bioRhyme": { + "familyName": "BioRhyme", + "fullName": "BioRhyme Regular", + "postscriptName": "BioRhyme-Regular", + "category": "serif", + "capHeight": 686, + "ascent": 1127, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 471, + "xWidthAvg": 537, + "subsets": { + "latin": { + "xWidthAvg": 537 + }, + "thai": { + "xWidthAvg": 827 + } + }, + "variants": { + "200": { + "familyName": "BioRhyme", + "fullName": "BioRhyme ExtraLight", + "postscriptName": "BioRhyme-ExtraLight", + "category": "serif", + "capHeight": 686, + "ascent": 1127, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 471, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 723 + } + } + }, + "300": { + "familyName": "BioRhyme", + "fullName": "BioRhyme Light", + "postscriptName": "BioRhyme-Light", + "category": "serif", + "capHeight": 686, + "ascent": 1127, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 471, + "xWidthAvg": 529, + "subsets": { + "latin": { + "xWidthAvg": 529 + }, + "thai": { + "xWidthAvg": 758 + } + } + }, + "500": { + "familyName": "BioRhyme", + "fullName": "BioRhyme Medium", + "postscriptName": "BioRhyme-Medium", + "category": "serif", + "capHeight": 686, + "ascent": 1127, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 471, + "xWidthAvg": 538, + "subsets": { + "latin": { + "xWidthAvg": 538 + }, + "thai": { + "xWidthAvg": 833 + } + } + }, + "600": { + "familyName": "BioRhyme", + "fullName": "BioRhyme SemiBold", + "postscriptName": "BioRhyme-SemiBold", + "category": "serif", + "capHeight": 686, + "ascent": 1127, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 471, + "xWidthAvg": 539, + "subsets": { + "latin": { + "xWidthAvg": 539 + }, + "thai": { + "xWidthAvg": 833 + } + } + }, + "700": { + "familyName": "BioRhyme", + "fullName": "BioRhyme Bold", + "postscriptName": "BioRhyme-Bold", + "category": "serif", + "capHeight": 686, + "ascent": 1127, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 471, + "xWidthAvg": 540, + "subsets": { + "latin": { + "xWidthAvg": 540 + }, + "thai": { + "xWidthAvg": 833 + } + } + }, + "800": { + "familyName": "BioRhyme", + "fullName": "BioRhyme ExtraBold", + "postscriptName": "BioRhyme-ExtraBold", + "category": "serif", + "capHeight": 686, + "ascent": 1127, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 471, + "xWidthAvg": 544, + "subsets": { + "latin": { + "xWidthAvg": 544 + }, + "thai": { + "xWidthAvg": 833 + } + } + }, + "regular": { + "familyName": "BioRhyme", + "fullName": "BioRhyme Regular", + "postscriptName": "BioRhyme-Regular", + "category": "serif", + "capHeight": 686, + "ascent": 1127, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 471, + "xWidthAvg": 537, + "subsets": { + "latin": { + "xWidthAvg": 537 + }, + "thai": { + "xWidthAvg": 827 + } + } + } + } + }, + "bioRhymeExpanded": { + "familyName": "BioRhyme Expanded", + "fullName": "BioRhymeExpanded-Regular", + "postscriptName": "BioRhymeExpanded-Regular", + "category": "serif", + "capHeight": 686, + "ascent": 1127, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 471, + "xWidthAvg": 897, + "subsets": { + "latin": { + "xWidthAvg": 897 + }, + "thai": { + "xWidthAvg": 543 + } + }, + "variants": { + "200": { + "familyName": "BioRhyme Expanded", + "fullName": "BioRhymeExpanded-ExtraLight", + "postscriptName": "BioRhymeExpanded-ExtraLight", + "category": "serif", + "capHeight": 686, + "ascent": 1127, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 471, + "xWidthAvg": 899, + "subsets": { + "latin": { + "xWidthAvg": 899 + }, + "thai": { + "xWidthAvg": 554 + } + } + }, + "300": { + "familyName": "BioRhyme Expanded", + "fullName": "BioRhymeExpanded-Light", + "postscriptName": "BioRhymeExpanded-Light", + "category": "serif", + "capHeight": 686, + "ascent": 1127, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 471, + "xWidthAvg": 899, + "subsets": { + "latin": { + "xWidthAvg": 899 + }, + "thai": { + "xWidthAvg": 550 + } + } + }, + "700": { + "familyName": "BioRhyme Expanded", + "fullName": "BioRhyme Expanded Bold", + "postscriptName": "BioRhymeExpanded-Bold", + "category": "serif", + "capHeight": 686, + "ascent": 1127, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 471, + "xWidthAvg": 897, + "subsets": { + "latin": { + "xWidthAvg": 897 + }, + "thai": { + "xWidthAvg": 539 + } + } + }, + "800": { + "familyName": "BioRhyme Expanded", + "fullName": "BioRhymeExpanded-ExtraBold", + "postscriptName": "BioRhymeExpanded-ExtraBold", + "category": "serif", + "capHeight": 686, + "ascent": 1127, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 471, + "xWidthAvg": 896, + "subsets": { + "latin": { + "xWidthAvg": 896 + }, + "thai": { + "xWidthAvg": 534 + } + } + }, + "regular": { + "familyName": "BioRhyme Expanded", + "fullName": "BioRhymeExpanded-Regular", + "postscriptName": "BioRhymeExpanded-Regular", + "category": "serif", + "capHeight": 686, + "ascent": 1127, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 471, + "xWidthAvg": 897, + "subsets": { + "latin": { + "xWidthAvg": 897 + }, + "thai": { + "xWidthAvg": 543 + } + } + } + } + }, + "birthstone": { + "familyName": "Birthstone", + "fullName": "Birthstone Regular", + "postscriptName": "Birthstone-Regular", + "category": "handwriting", + "capHeight": 880, + "ascent": 950, + "descent": -410, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 320, + "xWidthAvg": 282, + "subsets": { + "latin": { + "xWidthAvg": 282 + }, + "thai": { + "xWidthAvg": 484 + } + }, + "variants": { + "regular": { + "familyName": "Birthstone", + "fullName": "Birthstone Regular", + "postscriptName": "Birthstone-Regular", + "category": "handwriting", + "capHeight": 880, + "ascent": 950, + "descent": -410, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 320, + "xWidthAvg": 282, + "subsets": { + "latin": { + "xWidthAvg": 282 + }, + "thai": { + "xWidthAvg": 484 + } + } + } + } + }, + "birthstoneBounce": { + "familyName": "Birthstone Bounce", + "fullName": "Birthstone Bounce Regular", + "postscriptName": "BirthstoneBounce-Regular", + "category": "handwriting", + "capHeight": 700, + "ascent": 950, + "descent": -410, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 390, + "xWidthAvg": 329, + "subsets": { + "latin": { + "xWidthAvg": 329 + }, + "thai": { + "xWidthAvg": 484 + } + }, + "variants": { + "500": { + "familyName": "Birthstone Bounce", + "fullName": "Birthstone Bounce Medium", + "postscriptName": "BirthstoneBounce-Medium", + "category": "handwriting", + "capHeight": 700, + "ascent": 950, + "descent": -410, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 390, + "xWidthAvg": 329, + "subsets": { + "latin": { + "xWidthAvg": 329 + }, + "thai": { + "xWidthAvg": 484 + } + } + }, + "regular": { + "familyName": "Birthstone Bounce", + "fullName": "Birthstone Bounce Regular", + "postscriptName": "BirthstoneBounce-Regular", + "category": "handwriting", + "capHeight": 700, + "ascent": 950, + "descent": -410, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 390, + "xWidthAvg": 329, + "subsets": { + "latin": { + "xWidthAvg": 329 + }, + "thai": { + "xWidthAvg": 484 + } + } + } + } + }, + "biryani": { + "familyName": "Biryani", + "fullName": "Biryani Regular", + "postscriptName": "Biryani-Regular", + "category": "sans-serif", + "capHeight": 758, + "ascent": 1109, + "descent": -656, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 563, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "200": { + "familyName": "Biryani", + "fullName": "Biryani ExtraLight", + "postscriptName": "Biryani-ExtraLight", + "category": "sans-serif", + "capHeight": 758, + "ascent": 1109, + "descent": -656, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Biryani", + "fullName": "Biryani Light", + "postscriptName": "Biryani-Light", + "category": "sans-serif", + "capHeight": 758, + "ascent": 1109, + "descent": -656, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Biryani", + "fullName": "Biryani SemiBold", + "postscriptName": "Biryani-SemiBold", + "category": "sans-serif", + "capHeight": 758, + "ascent": 1109, + "descent": -656, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 572, + "xWidthAvg": 496, + "subsets": { + "latin": { + "xWidthAvg": 496 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Biryani", + "fullName": "Biryani Bold", + "postscriptName": "Biryani-Bold", + "category": "sans-serif", + "capHeight": 758, + "ascent": 1109, + "descent": -656, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 580, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Biryani", + "fullName": "Biryani ExtraBold", + "postscriptName": "Biryani-ExtraBold", + "category": "sans-serif", + "capHeight": 758, + "ascent": 1109, + "descent": -656, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 588, + "xWidthAvg": 515, + "subsets": { + "latin": { + "xWidthAvg": 515 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Biryani", + "fullName": "Biryani Black", + "postscriptName": "Biryani-Black", + "category": "sans-serif", + "capHeight": 758, + "ascent": 1109, + "descent": -656, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 597, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Biryani", + "fullName": "Biryani Regular", + "postscriptName": "Biryani-Regular", + "category": "sans-serif", + "capHeight": 758, + "ascent": 1109, + "descent": -656, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 563, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "bitter": { + "familyName": "Bitter", + "fullName": "Bitter Regular", + "postscriptName": "Bitter-Regular", + "category": "serif", + "capHeight": 698, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 528, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "100": { + "familyName": "Bitter", + "fullName": "Bitter Thin", + "postscriptName": "Bitter-Thin", + "category": "serif", + "capHeight": 692, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200": { + "familyName": "Bitter", + "fullName": "Bitter ExtraLight", + "postscriptName": "Bitter-ExtraLight", + "category": "serif", + "capHeight": 693, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Bitter", + "fullName": "Bitter Light", + "postscriptName": "Bitter-Light", + "category": "serif", + "capHeight": 695, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Bitter", + "fullName": "Bitter Medium", + "postscriptName": "Bitter-Medium", + "category": "serif", + "capHeight": 700, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Bitter", + "fullName": "Bitter SemiBold", + "postscriptName": "Bitter-SemiBold", + "category": "serif", + "capHeight": 702, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 532, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Bitter", + "fullName": "Bitter Bold", + "postscriptName": "Bitter-Bold", + "category": "serif", + "capHeight": 704, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Bitter", + "fullName": "Bitter ExtraBold", + "postscriptName": "Bitter-ExtraBold", + "category": "serif", + "capHeight": 707, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 537, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "Bitter", + "fullName": "Bitter Black", + "postscriptName": "Bitter-Black", + "category": "serif", + "capHeight": 710, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Bitter", + "fullName": "Bitter Regular", + "postscriptName": "Bitter-Regular", + "category": "serif", + "capHeight": 698, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 528, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Bitter", + "fullName": "Bitter Italic", + "postscriptName": "Bitter-Italic", + "category": "serif", + "capHeight": 698, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 528, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 456 + } + } + }, + "900italic": { + "familyName": "Bitter", + "fullName": "Bitter Black Italic", + "postscriptName": "Bitter-BlackItalic", + "category": "serif", + "capHeight": 710, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 456 + } + } + }, + "800italic": { + "familyName": "Bitter", + "fullName": "Bitter ExtraBold Italic", + "postscriptName": "Bitter-ExtraBoldItalic", + "category": "serif", + "capHeight": 707, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 537, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 456 + } + } + }, + "700italic": { + "familyName": "Bitter", + "fullName": "Bitter Bold Italic", + "postscriptName": "Bitter-BoldItalic", + "category": "serif", + "capHeight": 704, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 456 + } + } + }, + "600italic": { + "familyName": "Bitter", + "fullName": "Bitter SemiBold Italic", + "postscriptName": "Bitter-SemiBoldItalic", + "category": "serif", + "capHeight": 702, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 532, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 456 + } + } + }, + "500italic": { + "familyName": "Bitter", + "fullName": "Bitter Medium Italic", + "postscriptName": "Bitter-MediumItalic", + "category": "serif", + "capHeight": 700, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 456 + } + } + }, + "300italic": { + "familyName": "Bitter", + "fullName": "Bitter Light Italic", + "postscriptName": "Bitter-LightItalic", + "category": "serif", + "capHeight": 695, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 456 + } + } + }, + "200italic": { + "familyName": "Bitter", + "fullName": "Bitter ExtraLight Italic", + "postscriptName": "Bitter-ExtraLightItalic", + "category": "serif", + "capHeight": 693, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 456 + } + } + }, + "100italic": { + "familyName": "Bitter", + "fullName": "Bitter Thin Italic", + "postscriptName": "Bitter-ThinItalic", + "category": "serif", + "capHeight": 692, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 456 + } + } + } + } + }, + "blackAndWhitePicture": { + "familyName": "Black And White Picture", + "fullName": "Black And White Picture Regular", + "postscriptName": "BlackAndWhitePicture-Regular", + "category": "display", + "capHeight": 648, + "ascent": 800, + "descent": -200, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 442, + "xWidthAvg": 373, + "subsets": { + "latin": { + "xWidthAvg": 373 + }, + "thai": { + "xWidthAvg": 864 + } + }, + "variants": { + "regular": { + "familyName": "Black And White Picture", + "fullName": "Black And White Picture Regular", + "postscriptName": "BlackAndWhitePicture-Regular", + "category": "display", + "capHeight": 648, + "ascent": 800, + "descent": -200, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 442, + "xWidthAvg": 373, + "subsets": { + "latin": { + "xWidthAvg": 373 + }, + "thai": { + "xWidthAvg": 864 + } + } + } + } + }, + "blackHanSans": { + "familyName": "Black Han Sans", + "fullName": "Black Han Sans Regular", + "postscriptName": "BlackHanSans-Regular", + "category": "sans-serif", + "capHeight": 750, + "ascent": 790, + "descent": -210, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 600, + "xWidthAvg": 558, + "subsets": { + "latin": { + "xWidthAvg": 558 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Black Han Sans", + "fullName": "Black Han Sans Regular", + "postscriptName": "BlackHanSans-Regular", + "category": "sans-serif", + "capHeight": 750, + "ascent": 790, + "descent": -210, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 600, + "xWidthAvg": 558, + "subsets": { + "latin": { + "xWidthAvg": 558 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "blackOpsOne": { + "familyName": "Black Ops One", + "fullName": "Black Ops One Regular", + "postscriptName": "BlackOpsOne-Regular", + "category": "display", + "capHeight": 1327, + "ascent": 1871, + "descent": -689, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1062, + "xWidthAvg": 1125, + "subsets": { + "latin": { + "xWidthAvg": 1125 + }, + "thai": { + "xWidthAvg": 1837 + } + }, + "variants": { + "regular": { + "familyName": "Black Ops One", + "fullName": "Black Ops One Regular", + "postscriptName": "BlackOpsOne-Regular", + "category": "display", + "capHeight": 1327, + "ascent": 1871, + "descent": -689, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1062, + "xWidthAvg": 1125, + "subsets": { + "latin": { + "xWidthAvg": 1125 + }, + "thai": { + "xWidthAvg": 1837 + } + } + } + } + }, + "blaka": { + "familyName": "Blaka", + "fullName": "Blaka Regular", + "postscriptName": "Blaka-Regular", + "category": "display", + "capHeight": 666, + "ascent": 932, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 356, + "subsets": { + "latin": { + "xWidthAvg": 356 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Blaka", + "fullName": "Blaka Regular", + "postscriptName": "Blaka-Regular", + "category": "display", + "capHeight": 666, + "ascent": 932, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 356, + "subsets": { + "latin": { + "xWidthAvg": 356 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "blakaHollow": { + "familyName": "Blaka Hollow", + "fullName": "Blaka Hollow Regular", + "postscriptName": "BlakaHollow-Regular", + "category": "display", + "capHeight": 666, + "ascent": 932, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 356, + "subsets": { + "latin": { + "xWidthAvg": 356 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Blaka Hollow", + "fullName": "Blaka Hollow Regular", + "postscriptName": "BlakaHollow-Regular", + "category": "display", + "capHeight": 666, + "ascent": 932, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 356, + "subsets": { + "latin": { + "xWidthAvg": 356 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "blakaInk": { + "familyName": "Blaka Ink", + "fullName": "Blaka Ink Regular", + "postscriptName": "BlakaInk-Regular", + "category": "display", + "capHeight": 666, + "ascent": 932, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 356, + "subsets": { + "latin": { + "xWidthAvg": 356 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Blaka Ink", + "fullName": "Blaka Ink Regular", + "postscriptName": "BlakaInk-Regular", + "category": "display", + "capHeight": 666, + "ascent": 932, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 356, + "subsets": { + "latin": { + "xWidthAvg": 356 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "blinkMacSystemFont": { + "familyName": "BlinkMacSystemFont", + "fullName": "System Font", + "postscriptName": ".SFNS-Regular", + "category": "sans-serif", + "capHeight": 1443, + "ascent": 1980, + "descent": -432, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1040, + "xWidthAvg": 853, + "subsets": { + "latin": { + "xWidthAvg": 853 + }, + "thai": { + "xWidthAvg": 2048 + } + }, + "variants": { + "regular": { + "familyName": "BlinkMacSystemFont", + "fullName": "System Font", + "postscriptName": ".SFNS-Regular", + "category": "sans-serif", + "capHeight": 1443, + "ascent": 1980, + "descent": -432, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1040, + "xWidthAvg": 853, + "subsets": { + "latin": { + "xWidthAvg": 853 + }, + "thai": { + "xWidthAvg": 2048 + } + } + }, + "italic": { + "familyName": "BlinkMacSystemFont", + "fullName": "System Font Regular Italic", + "postscriptName": ".SFNS-RegularItalic", + "category": "sans-serif", + "capHeight": 1443, + "ascent": 1980, + "descent": -432, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1040, + "xWidthAvg": 873, + "subsets": { + "latin": { + "xWidthAvg": 873 + }, + "thai": { + "xWidthAvg": 2048 + } + } + } + } + }, + "blinker": { + "familyName": "Blinker", + "fullName": "Blinker", + "postscriptName": "Blinker-Regular", + "category": "sans-serif", + "capHeight": 627, + "ascent": 960, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 382 + } + }, + "variants": { + "100": { + "familyName": "Blinker", + "fullName": "Blinker Thin", + "postscriptName": "Blinker-Thin", + "category": "sans-serif", + "capHeight": 627, + "ascent": 960, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 415, + "subsets": { + "latin": { + "xWidthAvg": 415 + }, + "thai": { + "xWidthAvg": 382 + } + } + }, + "200": { + "familyName": "Blinker", + "fullName": "Blinker ExtraLight", + "postscriptName": "Blinker-ExtraLight", + "category": "sans-serif", + "capHeight": 627, + "ascent": 960, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 414, + "subsets": { + "latin": { + "xWidthAvg": 414 + }, + "thai": { + "xWidthAvg": 382 + } + } + }, + "300": { + "familyName": "Blinker", + "fullName": "Blinker ExtraLight", + "postscriptName": "Blinker-ExtraLight", + "category": "sans-serif", + "capHeight": 627, + "ascent": 960, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 413, + "subsets": { + "latin": { + "xWidthAvg": 413 + }, + "thai": { + "xWidthAvg": 382 + } + } + }, + "600": { + "familyName": "Blinker", + "fullName": "Blinker SemiBold", + "postscriptName": "Blinker-SemiBold", + "category": "sans-serif", + "capHeight": 627, + "ascent": 960, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 382 + } + } + }, + "700": { + "familyName": "Blinker", + "fullName": "Blinker Bold", + "postscriptName": "Blinker-Bold", + "category": "sans-serif", + "capHeight": 627, + "ascent": 960, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 382 + } + } + }, + "800": { + "familyName": "Blinker", + "fullName": "Blinker ExtraBold", + "postscriptName": "Blinker-ExtraBold", + "category": "sans-serif", + "capHeight": 627, + "ascent": 960, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 382 + } + } + }, + "900": { + "familyName": "Blinker", + "fullName": "Blinker Black", + "postscriptName": "Blinker-Black", + "category": "sans-serif", + "capHeight": 627, + "ascent": 960, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 382 + } + } + }, + "regular": { + "familyName": "Blinker", + "fullName": "Blinker", + "postscriptName": "Blinker-Regular", + "category": "sans-serif", + "capHeight": 627, + "ascent": 960, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 382 + } + } + } + } + }, + "bodoniModa": { + "familyName": "Bodoni Moda", + "fullName": "Bodoni Moda Regular", + "postscriptName": "BodoniModa-Regular", + "category": "serif", + "capHeight": 1500, + "ascent": 2250, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 920, + "xWidthAvg": 928, + "subsets": { + "latin": { + "xWidthAvg": 928 + }, + "thai": { + "xWidthAvg": 1200 + } + }, + "variants": { + "500": { + "familyName": "Bodoni Moda", + "fullName": "Bodoni Moda Medium", + "postscriptName": "BodoniModa-Medium", + "category": "serif", + "capHeight": 1500, + "ascent": 2250, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 920, + "xWidthAvg": 943, + "subsets": { + "latin": { + "xWidthAvg": 943 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "600": { + "familyName": "Bodoni Moda", + "fullName": "Bodoni Moda SemiBold", + "postscriptName": "BodoniModa-SemiBold", + "category": "serif", + "capHeight": 1500, + "ascent": 2250, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 920, + "xWidthAvg": 959, + "subsets": { + "latin": { + "xWidthAvg": 959 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "700": { + "familyName": "Bodoni Moda", + "fullName": "Bodoni Moda Bold", + "postscriptName": "BodoniModa-Bold", + "category": "serif", + "capHeight": 1500, + "ascent": 2250, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 920, + "xWidthAvg": 980, + "subsets": { + "latin": { + "xWidthAvg": 980 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "800": { + "familyName": "Bodoni Moda", + "fullName": "Bodoni Moda ExtraBold", + "postscriptName": "BodoniModa-ExtraBold", + "category": "serif", + "capHeight": 1500, + "ascent": 2250, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 920, + "xWidthAvg": 1003, + "subsets": { + "latin": { + "xWidthAvg": 1003 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "900": { + "familyName": "Bodoni Moda", + "fullName": "Bodoni Moda Black", + "postscriptName": "BodoniModa-Black", + "category": "serif", + "capHeight": 1500, + "ascent": 2250, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 920, + "xWidthAvg": 1031, + "subsets": { + "latin": { + "xWidthAvg": 1031 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "regular": { + "familyName": "Bodoni Moda", + "fullName": "Bodoni Moda Regular", + "postscriptName": "BodoniModa-Regular", + "category": "serif", + "capHeight": 1500, + "ascent": 2250, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 920, + "xWidthAvg": 928, + "subsets": { + "latin": { + "xWidthAvg": 928 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "italic": { + "familyName": "Bodoni Moda", + "fullName": "Bodoni Moda Italic", + "postscriptName": "BodoniModa-Italic", + "category": "serif", + "capHeight": 1500, + "ascent": 2250, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 920, + "xWidthAvg": 873, + "subsets": { + "latin": { + "xWidthAvg": 873 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "900italic": { + "familyName": "Bodoni Moda", + "fullName": "Bodoni Moda Black Italic", + "postscriptName": "BodoniModa-BlackItalic", + "category": "serif", + "capHeight": 1500, + "ascent": 2250, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 920, + "xWidthAvg": 984, + "subsets": { + "latin": { + "xWidthAvg": 984 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "800italic": { + "familyName": "Bodoni Moda", + "fullName": "Bodoni Moda ExtraBold Italic", + "postscriptName": "BodoniModa-ExtraBoldItalic", + "category": "serif", + "capHeight": 1500, + "ascent": 2250, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 920, + "xWidthAvg": 954, + "subsets": { + "latin": { + "xWidthAvg": 954 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "700italic": { + "familyName": "Bodoni Moda", + "fullName": "Bodoni Moda Bold Italic", + "postscriptName": "BodoniModa-BoldItalic", + "category": "serif", + "capHeight": 1500, + "ascent": 2250, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 920, + "xWidthAvg": 929, + "subsets": { + "latin": { + "xWidthAvg": 929 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "600italic": { + "familyName": "Bodoni Moda", + "fullName": "Bodoni Moda SemiBold Italic", + "postscriptName": "BodoniModa-SemiBoldItalic", + "category": "serif", + "capHeight": 1500, + "ascent": 2250, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 920, + "xWidthAvg": 906, + "subsets": { + "latin": { + "xWidthAvg": 906 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "500italic": { + "familyName": "Bodoni Moda", + "fullName": "Bodoni Moda Medium Italic", + "postscriptName": "BodoniModa-MediumItalic", + "category": "serif", + "capHeight": 1500, + "ascent": 2250, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 920, + "xWidthAvg": 889, + "subsets": { + "latin": { + "xWidthAvg": 889 + }, + "thai": { + "xWidthAvg": 1200 + } + } + } + } + }, + "bodoniModaSC": { + "familyName": "Bodoni Moda SC", + "fullName": "Bodoni Moda SC Regular", + "postscriptName": "BodoniModaSC-Regular", + "category": "serif", + "capHeight": 1500, + "ascent": 2250, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 920, + "xWidthAvg": 928, + "subsets": { + "latin": { + "xWidthAvg": 928 + }, + "thai": { + "xWidthAvg": 1200 + } + }, + "variants": { + "500": { + "familyName": "Bodoni Moda SC", + "fullName": "Bodoni Moda SC Medium", + "postscriptName": "BodoniModaSC-Medium", + "category": "serif", + "capHeight": 1500, + "ascent": 2250, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 920, + "xWidthAvg": 943, + "subsets": { + "latin": { + "xWidthAvg": 943 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "600": { + "familyName": "Bodoni Moda SC", + "fullName": "Bodoni Moda SC SemiBold", + "postscriptName": "BodoniModaSC-SemiBold", + "category": "serif", + "capHeight": 1500, + "ascent": 2250, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 920, + "xWidthAvg": 959, + "subsets": { + "latin": { + "xWidthAvg": 959 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "700": { + "familyName": "Bodoni Moda SC", + "fullName": "Bodoni Moda SC Bold", + "postscriptName": "BodoniModaSC-Bold", + "category": "serif", + "capHeight": 1500, + "ascent": 2250, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 920, + "xWidthAvg": 980, + "subsets": { + "latin": { + "xWidthAvg": 980 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "800": { + "familyName": "Bodoni Moda SC", + "fullName": "Bodoni Moda SC ExtraBold", + "postscriptName": "BodoniModaSC-ExtraBold", + "category": "serif", + "capHeight": 1500, + "ascent": 2250, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 920, + "xWidthAvg": 1003, + "subsets": { + "latin": { + "xWidthAvg": 1003 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "900": { + "familyName": "Bodoni Moda SC", + "fullName": "Bodoni Moda SC Black", + "postscriptName": "BodoniModaSC-Black", + "category": "serif", + "capHeight": 1500, + "ascent": 2250, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 920, + "xWidthAvg": 1031, + "subsets": { + "latin": { + "xWidthAvg": 1031 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "regular": { + "familyName": "Bodoni Moda SC", + "fullName": "Bodoni Moda SC Regular", + "postscriptName": "BodoniModaSC-Regular", + "category": "serif", + "capHeight": 1500, + "ascent": 2250, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 920, + "xWidthAvg": 928, + "subsets": { + "latin": { + "xWidthAvg": 928 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "italic": { + "familyName": "Bodoni Moda SC", + "fullName": "Bodoni Moda SC Italic", + "postscriptName": "BodoniModaSC-Italic", + "category": "serif", + "capHeight": 1500, + "ascent": 2250, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 920, + "xWidthAvg": 873, + "subsets": { + "latin": { + "xWidthAvg": 873 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "900italic": { + "familyName": "Bodoni Moda SC", + "fullName": "Bodoni Moda SC Black Italic", + "postscriptName": "BodoniModaSC-BlackItalic", + "category": "serif", + "capHeight": 1500, + "ascent": 2250, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 920, + "xWidthAvg": 984, + "subsets": { + "latin": { + "xWidthAvg": 984 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "800italic": { + "familyName": "Bodoni Moda SC", + "fullName": "Bodoni Moda SC ExtraBold Italic", + "postscriptName": "BodoniModaSC-ExtraBoldItalic", + "category": "serif", + "capHeight": 1500, + "ascent": 2250, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 920, + "xWidthAvg": 954, + "subsets": { + "latin": { + "xWidthAvg": 954 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "700italic": { + "familyName": "Bodoni Moda SC", + "fullName": "Bodoni Moda SC Bold Italic", + "postscriptName": "BodoniModaSC-BoldItalic", + "category": "serif", + "capHeight": 1500, + "ascent": 2250, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 920, + "xWidthAvg": 929, + "subsets": { + "latin": { + "xWidthAvg": 929 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "600italic": { + "familyName": "Bodoni Moda SC", + "fullName": "Bodoni Moda SC SemiBold Italic", + "postscriptName": "BodoniModaSC-SemiBoldItalic", + "category": "serif", + "capHeight": 1500, + "ascent": 2250, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 920, + "xWidthAvg": 906, + "subsets": { + "latin": { + "xWidthAvg": 906 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "500italic": { + "familyName": "Bodoni Moda SC", + "fullName": "Bodoni Moda SC Medium Italic", + "postscriptName": "BodoniModaSC-MediumItalic", + "category": "serif", + "capHeight": 1500, + "ascent": 2250, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 920, + "xWidthAvg": 889, + "subsets": { + "latin": { + "xWidthAvg": 889 + }, + "thai": { + "xWidthAvg": 1200 + } + } + } + } + }, + "bokor": { + "familyName": "Bokor", + "fullName": "Bokor Regular", + "postscriptName": "Bokor-Regular", + "category": "display", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 741, + "subsets": { + "latin": { + "xWidthAvg": 741 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Bokor", + "fullName": "Bokor Regular", + "postscriptName": "Bokor-Regular", + "category": "display", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 741, + "subsets": { + "latin": { + "xWidthAvg": 741 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "bonaNova": { + "familyName": "Bona Nova", + "fullName": "Bona Nova Regular", + "postscriptName": "BonaNova-Regular", + "category": "serif", + "capHeight": 665, + "ascent": 932, + "descent": -268, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 830 + } + }, + "variants": { + "700": { + "familyName": "Bona Nova", + "fullName": "Bona Nova Bold", + "postscriptName": "BonaNova-Bold", + "category": "serif", + "capHeight": 665, + "ascent": 932, + "descent": -268, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 826 + } + } + }, + "regular": { + "familyName": "Bona Nova", + "fullName": "Bona Nova Regular", + "postscriptName": "BonaNova-Regular", + "category": "serif", + "capHeight": 665, + "ascent": 932, + "descent": -268, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 830 + } + } + }, + "italic": { + "familyName": "Bona Nova", + "fullName": "Bona Nova Italic", + "postscriptName": "BonaNova-Italic", + "category": "serif", + "capHeight": 665, + "ascent": 932, + "descent": -268, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 392, + "subsets": { + "latin": { + "xWidthAvg": 392 + }, + "thai": { + "xWidthAvg": 800 + } + } + } + } + }, + "bonaNovaSC": { + "familyName": "Bona Nova SC", + "fullName": "Bona Nova SC Regular", + "postscriptName": "BonaNovaSC-Regular", + "category": "serif", + "capHeight": 665, + "ascent": 932, + "descent": -268, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 830 + } + }, + "variants": { + "700": { + "familyName": "Bona Nova SC", + "fullName": "Bona Nova SC Bold", + "postscriptName": "BonaNovaSC-Bold", + "category": "serif", + "capHeight": 665, + "ascent": 932, + "descent": -268, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 826 + } + } + }, + "regular": { + "familyName": "Bona Nova SC", + "fullName": "Bona Nova SC Regular", + "postscriptName": "BonaNovaSC-Regular", + "category": "serif", + "capHeight": 665, + "ascent": 932, + "descent": -268, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 830 + } + } + }, + "italic": { + "familyName": "Bona Nova SC", + "fullName": "Bona Nova SC Italic", + "postscriptName": "BonaNovaSC-Italic", + "category": "serif", + "capHeight": 665, + "ascent": 932, + "descent": -268, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 392, + "subsets": { + "latin": { + "xWidthAvg": 392 + }, + "thai": { + "xWidthAvg": 800 + } + } + } + } + }, + "bonbon": { + "familyName": "Bonbon", + "fullName": "Bonbon Regular", + "postscriptName": "Bonbon-Regular", + "category": "handwriting", + "capHeight": 644, + "ascent": 845, + "descent": -330, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 1210 + } + }, + "variants": { + "regular": { + "familyName": "Bonbon", + "fullName": "Bonbon Regular", + "postscriptName": "Bonbon-Regular", + "category": "handwriting", + "capHeight": 644, + "ascent": 845, + "descent": -330, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 1210 + } + } + } + } + }, + "bonheurRoyale": { + "familyName": "Bonheur Royale", + "fullName": "Bonheur Royale Regular", + "postscriptName": "BonheurRoyale-Regular", + "category": "handwriting", + "capHeight": 620, + "ascent": 780, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 280, + "xWidthAvg": 285, + "subsets": { + "latin": { + "xWidthAvg": 285 + }, + "thai": { + "xWidthAvg": 455 + } + }, + "variants": { + "regular": { + "familyName": "Bonheur Royale", + "fullName": "Bonheur Royale Regular", + "postscriptName": "BonheurRoyale-Regular", + "category": "handwriting", + "capHeight": 620, + "ascent": 780, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 280, + "xWidthAvg": 285, + "subsets": { + "latin": { + "xWidthAvg": 285 + }, + "thai": { + "xWidthAvg": 455 + } + } + } + } + }, + "boogaloo": { + "familyName": "Boogaloo", + "fullName": "Boogaloo Regular", + "postscriptName": "Boogaloo-Regular", + "category": "display", + "capHeight": 469, + "ascent": 943, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 338, + "xWidthAvg": 348, + "subsets": { + "latin": { + "xWidthAvg": 348 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Boogaloo", + "fullName": "Boogaloo Regular", + "postscriptName": "Boogaloo-Regular", + "category": "display", + "capHeight": 469, + "ascent": 943, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 338, + "xWidthAvg": 348, + "subsets": { + "latin": { + "xWidthAvg": 348 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "borel": { + "familyName": "Borel", + "fullName": "Borel Regular", + "postscriptName": "Borel-Regular", + "category": "handwriting", + "capHeight": 722, + "ascent": 986, + "descent": -1014, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 534, + "subsets": { + "latin": { + "xWidthAvg": 534 + }, + "thai": { + "xWidthAvg": 908 + } + }, + "variants": { + "regular": { + "familyName": "Borel", + "fullName": "Borel Regular", + "postscriptName": "Borel-Regular", + "category": "handwriting", + "capHeight": 722, + "ascent": 986, + "descent": -1014, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 534, + "subsets": { + "latin": { + "xWidthAvg": 534 + }, + "thai": { + "xWidthAvg": 908 + } + } + } + } + }, + "bowlbyOne": { + "familyName": "Bowlby One", + "fullName": "Bowlby One Regular", + "postscriptName": "BowlbyOne-Regular", + "category": "display", + "capHeight": 1520, + "ascent": 2276, + "descent": -932, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1196, + "xWidthAvg": 1268, + "subsets": { + "latin": { + "xWidthAvg": 1268 + }, + "thai": { + "xWidthAvg": 732 + } + }, + "variants": { + "regular": { + "familyName": "Bowlby One", + "fullName": "Bowlby One Regular", + "postscriptName": "BowlbyOne-Regular", + "category": "display", + "capHeight": 1520, + "ascent": 2276, + "descent": -932, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1196, + "xWidthAvg": 1268, + "subsets": { + "latin": { + "xWidthAvg": 1268 + }, + "thai": { + "xWidthAvg": 732 + } + } + } + } + }, + "bowlbyOneSC": { + "familyName": "Bowlby One SC", + "fullName": "Bowlby One SC Regular", + "postscriptName": "BowlbyOneSC-Regular", + "category": "display", + "capHeight": 1520, + "ascent": 2248, + "descent": -876, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1392, + "xWidthAvg": 1214, + "subsets": { + "latin": { + "xWidthAvg": 1214 + }, + "thai": { + "xWidthAvg": 732 + } + }, + "variants": { + "regular": { + "familyName": "Bowlby One SC", + "fullName": "Bowlby One SC Regular", + "postscriptName": "BowlbyOneSC-Regular", + "category": "display", + "capHeight": 1520, + "ascent": 2248, + "descent": -876, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1392, + "xWidthAvg": 1214, + "subsets": { + "latin": { + "xWidthAvg": 1214 + }, + "thai": { + "xWidthAvg": 732 + } + } + } + } + }, + "braahOne": { + "familyName": "Braah One", + "fullName": "Braah One Regular", + "postscriptName": "BraahOne-Regular", + "category": "sans-serif", + "capHeight": 636, + "ascent": 1018, + "descent": -382, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 684 + } + }, + "variants": { + "regular": { + "familyName": "Braah One", + "fullName": "Braah One Regular", + "postscriptName": "BraahOne-Regular", + "category": "sans-serif", + "capHeight": 636, + "ascent": 1018, + "descent": -382, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 684 + } + } + } + } + }, + "brawler": { + "familyName": "Brawler", + "fullName": "Brawler Regular", + "postscriptName": "Brawler-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 971, + "descent": -248, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 965 + } + }, + "variants": { + "700": { + "familyName": "Brawler", + "fullName": "Brawler Bold", + "postscriptName": "Brawler-Bold", + "category": "serif", + "capHeight": 710, + "ascent": 971, + "descent": -248, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 498 + } + } + }, + "regular": { + "familyName": "Brawler", + "fullName": "Brawler Regular", + "postscriptName": "Brawler-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 971, + "descent": -248, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 965 + } + } + } + } + }, + "breeSerif": { + "familyName": "Bree Serif", + "fullName": "Bree Serif Regular", + "postscriptName": "BreeSerif-Regular", + "category": "serif", + "capHeight": 665, + "ascent": 1077, + "descent": -281, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 503, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Bree Serif", + "fullName": "Bree Serif Regular", + "postscriptName": "BreeSerif-Regular", + "category": "serif", + "capHeight": 665, + "ascent": 1077, + "descent": -281, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 503, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "bricolageGrotesque": { + "familyName": "Bricolage Grotesque", + "fullName": "Bricolage Grotesque Regular", + "postscriptName": "BricolageGrotesque-Regular", + "category": "sans-serif", + "capHeight": 660, + "ascent": 930, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 656 + } + }, + "variants": { + "200": { + "familyName": "Bricolage Grotesque", + "fullName": "Bricolage Grotesque ExtraLight", + "postscriptName": "BricolageGrotesque-ExtraLight", + "category": "sans-serif", + "capHeight": 660, + "ascent": 930, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 656 + } + } + }, + "300": { + "familyName": "Bricolage Grotesque", + "fullName": "Bricolage Grotesque Light", + "postscriptName": "BricolageGrotesque-Light", + "category": "sans-serif", + "capHeight": 660, + "ascent": 930, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 656 + } + } + }, + "500": { + "familyName": "Bricolage Grotesque", + "fullName": "Bricolage Grotesque Medium", + "postscriptName": "BricolageGrotesque-Medium", + "category": "sans-serif", + "capHeight": 660, + "ascent": 930, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 476, + "subsets": { + "latin": { + "xWidthAvg": 476 + }, + "thai": { + "xWidthAvg": 656 + } + } + }, + "600": { + "familyName": "Bricolage Grotesque", + "fullName": "Bricolage Grotesque SemiBold", + "postscriptName": "BricolageGrotesque-SemiBold", + "category": "sans-serif", + "capHeight": 660, + "ascent": 930, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 656 + } + } + }, + "700": { + "familyName": "Bricolage Grotesque", + "fullName": "Bricolage Grotesque Bold", + "postscriptName": "BricolageGrotesque-Bold", + "category": "sans-serif", + "capHeight": 660, + "ascent": 930, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 657 + } + } + }, + "800": { + "familyName": "Bricolage Grotesque", + "fullName": "Bricolage Grotesque ExtraBold", + "postscriptName": "BricolageGrotesque-ExtraBold", + "category": "sans-serif", + "capHeight": 660, + "ascent": 930, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 528, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 657 + } + } + }, + "regular": { + "familyName": "Bricolage Grotesque", + "fullName": "Bricolage Grotesque Regular", + "postscriptName": "BricolageGrotesque-Regular", + "category": "sans-serif", + "capHeight": 660, + "ascent": 930, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 656 + } + } + } + } + }, + "brunoAce": { + "familyName": "Bruno Ace", + "fullName": "Bruno Ace Regular", + "postscriptName": "BrunoAce-Regular", + "category": "display", + "capHeight": 700, + "ascent": 953, + "descent": -253, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 629, + "subsets": { + "latin": { + "xWidthAvg": 629 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Bruno Ace", + "fullName": "Bruno Ace Regular", + "postscriptName": "BrunoAce-Regular", + "category": "display", + "capHeight": 700, + "ascent": 953, + "descent": -253, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 629, + "subsets": { + "latin": { + "xWidthAvg": 629 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "brunoAceSC": { + "familyName": "Bruno Ace SC", + "fullName": "Bruno Ace SC Regular", + "postscriptName": "BrunoAceSC-Regular", + "category": "display", + "capHeight": 700, + "ascent": 953, + "descent": -253, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 634, + "subsets": { + "latin": { + "xWidthAvg": 634 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Bruno Ace SC", + "fullName": "Bruno Ace SC Regular", + "postscriptName": "BrunoAceSC-Regular", + "category": "display", + "capHeight": 700, + "ascent": 953, + "descent": -253, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 634, + "subsets": { + "latin": { + "xWidthAvg": 634 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "brushScript": { + "familyName": "Brush Script", + "fullName": "Brush Script MT Italic", + "postscriptName": "BrushScriptMT", + "category": "handwriting", + "capHeight": 1230, + "ascent": 1820, + "descent": -692, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 709, + "xWidthAvg": 683, + "subsets": { + "latin": { + "xWidthAvg": 683 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Brush Script", + "fullName": "Brush Script MT Italic", + "postscriptName": "BrushScriptMT", + "category": "handwriting", + "capHeight": 1230, + "ascent": 1820, + "descent": -692, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 709, + "xWidthAvg": 683, + "subsets": { + "latin": { + "xWidthAvg": 683 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "brygada1918": { + "familyName": "Brygada 1918", + "fullName": "Brygada 1918 Regular", + "postscriptName": "Brygada1918-Regular", + "category": "serif", + "capHeight": 670, + "ascent": 920, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "500": { + "familyName": "Brygada 1918", + "fullName": "Brygada 1918 Medium", + "postscriptName": "Brygada1918-Medium", + "category": "serif", + "capHeight": 670, + "ascent": 920, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Brygada 1918", + "fullName": "Brygada 1918 SemiBold", + "postscriptName": "Brygada1918-SemiBold", + "category": "serif", + "capHeight": 670, + "ascent": 920, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Brygada 1918", + "fullName": "Brygada 1918 Bold", + "postscriptName": "Brygada1918-Bold", + "category": "serif", + "capHeight": 670, + "ascent": 920, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Brygada 1918", + "fullName": "Brygada 1918 Regular", + "postscriptName": "Brygada1918-Regular", + "category": "serif", + "capHeight": 670, + "ascent": 920, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "italic": { + "familyName": "Brygada 1918", + "fullName": "Brygada 1918 Italic", + "postscriptName": "Brygada1918-Italic", + "category": "serif", + "capHeight": 670, + "ascent": 920, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700italic": { + "familyName": "Brygada 1918", + "fullName": "Brygada 1918 Bold Italic", + "postscriptName": "Brygada1918-BoldItalic", + "category": "serif", + "capHeight": 670, + "ascent": 920, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600italic": { + "familyName": "Brygada 1918", + "fullName": "Brygada 1918 SemiBold Italic", + "postscriptName": "Brygada1918-SemiBoldItalic", + "category": "serif", + "capHeight": 670, + "ascent": 920, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 449, + "subsets": { + "latin": { + "xWidthAvg": 449 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500italic": { + "familyName": "Brygada 1918", + "fullName": "Brygada 1918 Medium Italic", + "postscriptName": "Brygada1918-MediumItalic", + "category": "serif", + "capHeight": 670, + "ascent": 920, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "bubblegumSans": { + "familyName": "Bubblegum Sans", + "fullName": "Bubblegum Sans Regular", + "postscriptName": "BubblegumSans-Regular", + "category": "display", + "capHeight": 470, + "ascent": 852, + "descent": -311, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 410, + "xWidthAvg": 370, + "subsets": { + "latin": { + "xWidthAvg": 370 + }, + "thai": { + "xWidthAvg": 200 + } + }, + "variants": { + "regular": { + "familyName": "Bubblegum Sans", + "fullName": "Bubblegum Sans Regular", + "postscriptName": "BubblegumSans-Regular", + "category": "display", + "capHeight": 470, + "ascent": 852, + "descent": -311, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 410, + "xWidthAvg": 370, + "subsets": { + "latin": { + "xWidthAvg": 370 + }, + "thai": { + "xWidthAvg": 200 + } + } + } + } + }, + "bubblerOne": { + "familyName": "Bubbler One", + "fullName": "Bubbler One Regular", + "postscriptName": "BubblerOne-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 900, + "descent": -263, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 372, + "subsets": { + "latin": { + "xWidthAvg": 372 + }, + "thai": { + "xWidthAvg": 510 + } + }, + "variants": { + "regular": { + "familyName": "Bubbler One", + "fullName": "Bubbler One Regular", + "postscriptName": "BubblerOne-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 900, + "descent": -263, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 372, + "subsets": { + "latin": { + "xWidthAvg": 372 + }, + "thai": { + "xWidthAvg": 510 + } + } + } + } + }, + "buda": { + "familyName": "Buda", + "fullName": "Buda Light", + "postscriptName": "Buda-Light", + "category": "display", + "ascent": 1836, + "descent": -724, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 793, + "subsets": { + "latin": { + "xWidthAvg": 793 + }, + "thai": { + "xWidthAvg": 594 + } + }, + "variants": { + "300": { + "familyName": "Buda", + "fullName": "Buda Light", + "postscriptName": "Buda-Light", + "category": "display", + "ascent": 1836, + "descent": -724, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 793, + "subsets": { + "latin": { + "xWidthAvg": 793 + }, + "thai": { + "xWidthAvg": 594 + } + } + } + } + }, + "buenard": { + "familyName": "Buenard", + "fullName": "Buenard Regular", + "postscriptName": "Buenard-Regular", + "category": "serif", + "capHeight": 178, + "ascent": 1031, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 95, + "xWidthAvg": 415, + "subsets": { + "latin": { + "xWidthAvg": 415 + }, + "thai": { + "xWidthAvg": 218 + } + }, + "variants": { + "700": { + "familyName": "Buenard", + "fullName": "Buenard Bold", + "postscriptName": "Buenard-Bold", + "category": "serif", + "capHeight": 153, + "ascent": 1031, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 146, + "xWidthAvg": 421, + "subsets": { + "latin": { + "xWidthAvg": 421 + }, + "thai": { + "xWidthAvg": 218 + } + } + }, + "regular": { + "familyName": "Buenard", + "fullName": "Buenard Regular", + "postscriptName": "Buenard-Regular", + "category": "serif", + "capHeight": 178, + "ascent": 1031, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 95, + "xWidthAvg": 415, + "subsets": { + "latin": { + "xWidthAvg": 415 + }, + "thai": { + "xWidthAvg": 218 + } + } + } + } + }, + "bungee": { + "familyName": "Bungee", + "fullName": "Bungee Regular", + "postscriptName": "Bungee-Regular", + "category": "display", + "capHeight": 720, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 618, + "subsets": { + "latin": { + "xWidthAvg": 618 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Bungee", + "fullName": "Bungee Regular", + "postscriptName": "Bungee-Regular", + "category": "display", + "capHeight": 720, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 618, + "subsets": { + "latin": { + "xWidthAvg": 618 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "bungeeHairline": { + "familyName": "Bungee Hairline", + "fullName": "Bungee Hairline Regular", + "postscriptName": "BungeeHairline-Regular", + "category": "display", + "capHeight": 720, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 618, + "subsets": { + "latin": { + "xWidthAvg": 618 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Bungee Hairline", + "fullName": "Bungee Hairline Regular", + "postscriptName": "BungeeHairline-Regular", + "category": "display", + "capHeight": 720, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 618, + "subsets": { + "latin": { + "xWidthAvg": 618 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "bungeeInline": { + "familyName": "Bungee Inline", + "fullName": "Bungee Inline Regular", + "postscriptName": "BungeeInline-Regular", + "category": "display", + "capHeight": 720, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 618, + "subsets": { + "latin": { + "xWidthAvg": 618 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Bungee Inline", + "fullName": "Bungee Inline Regular", + "postscriptName": "BungeeInline-Regular", + "category": "display", + "capHeight": 720, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 618, + "subsets": { + "latin": { + "xWidthAvg": 618 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "bungeeOutline": { + "familyName": "Bungee Outline", + "fullName": "Bungee Outline Regular", + "postscriptName": "BungeeOutline-Regular", + "category": "display", + "capHeight": 720, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 618, + "subsets": { + "latin": { + "xWidthAvg": 618 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Bungee Outline", + "fullName": "Bungee Outline Regular", + "postscriptName": "BungeeOutline-Regular", + "category": "display", + "capHeight": 720, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 618, + "subsets": { + "latin": { + "xWidthAvg": 618 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "bungeeShade": { + "familyName": "Bungee Shade", + "fullName": "Bungee Shade Regular", + "postscriptName": "BungeeShade-Regular", + "category": "display", + "capHeight": 720, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 718, + "subsets": { + "latin": { + "xWidthAvg": 718 + }, + "thai": { + "xWidthAvg": 1100 + } + }, + "variants": { + "regular": { + "familyName": "Bungee Shade", + "fullName": "Bungee Shade Regular", + "postscriptName": "BungeeShade-Regular", + "category": "display", + "capHeight": 720, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 718, + "subsets": { + "latin": { + "xWidthAvg": 718 + }, + "thai": { + "xWidthAvg": 1100 + } + } + } + } + }, + "bungeeSpice": { + "familyName": "Bungee Spice", + "fullName": "Bungee Spice Regular", + "postscriptName": "BungeeSpice-Regular", + "category": "display", + "capHeight": 720, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 618, + "subsets": { + "latin": { + "xWidthAvg": 618 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Bungee Spice", + "fullName": "Bungee Spice Regular", + "postscriptName": "BungeeSpice-Regular", + "category": "display", + "capHeight": 720, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 618, + "subsets": { + "latin": { + "xWidthAvg": 618 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "bungeeTint": { + "familyName": "Bungee Tint", + "fullName": "Bungee Tint Regular", + "postscriptName": "BungeeTint-Regular", + "category": "display", + "capHeight": 720, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 618, + "subsets": { + "latin": { + "xWidthAvg": 618 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Bungee Tint", + "fullName": "Bungee Tint Regular", + "postscriptName": "BungeeTint-Regular", + "category": "display", + "capHeight": 720, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 618, + "subsets": { + "latin": { + "xWidthAvg": 618 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "butcherman": { + "familyName": "Butcherman", + "fullName": "Butcherman Regular", + "postscriptName": "Butcherman-Regular", + "category": "display", + "capHeight": 1509, + "ascent": 2600, + "descent": -1363, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1521, + "xWidthAvg": 1044, + "subsets": { + "latin": { + "xWidthAvg": 1044 + }, + "thai": { + "xWidthAvg": 748 + } + }, + "variants": { + "regular": { + "familyName": "Butcherman", + "fullName": "Butcherman Regular", + "postscriptName": "Butcherman-Regular", + "category": "display", + "capHeight": 1509, + "ascent": 2600, + "descent": -1363, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1521, + "xWidthAvg": 1044, + "subsets": { + "latin": { + "xWidthAvg": 1044 + }, + "thai": { + "xWidthAvg": 748 + } + } + } + } + }, + "butterflyKids": { + "familyName": "Butterfly Kids", + "fullName": "Butterfly Kids Regular", + "postscriptName": "ButterflyKids-Regular", + "category": "handwriting", + "capHeight": 802, + "ascent": 917, + "descent": -304, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 338, + "xWidthAvg": 305, + "subsets": { + "latin": { + "xWidthAvg": 305 + }, + "thai": { + "xWidthAvg": 246 + } + }, + "variants": { + "regular": { + "familyName": "Butterfly Kids", + "fullName": "Butterfly Kids Regular", + "postscriptName": "ButterflyKids-Regular", + "category": "handwriting", + "capHeight": 802, + "ascent": 917, + "descent": -304, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 338, + "xWidthAvg": 305, + "subsets": { + "latin": { + "xWidthAvg": 305 + }, + "thai": { + "xWidthAvg": 246 + } + } + } + } + }, + "cabin": { + "familyName": "Cabin", + "fullName": "Cabin Regular", + "postscriptName": "Cabin-Regular", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1930, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 980, + "xWidthAvg": 844, + "subsets": { + "latin": { + "xWidthAvg": 844 + }, + "thai": { + "xWidthAvg": 1206 + } + }, + "variants": { + "500": { + "familyName": "Cabin", + "fullName": "Cabin Medium", + "postscriptName": "Cabin-Medium", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1930, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 980, + "xWidthAvg": 852, + "subsets": { + "latin": { + "xWidthAvg": 852 + }, + "thai": { + "xWidthAvg": 1206 + } + } + }, + "600": { + "familyName": "Cabin", + "fullName": "Cabin SemiBold", + "postscriptName": "Cabin-SemiBold", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1930, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 980, + "xWidthAvg": 856, + "subsets": { + "latin": { + "xWidthAvg": 856 + }, + "thai": { + "xWidthAvg": 1206 + } + } + }, + "700": { + "familyName": "Cabin", + "fullName": "Cabin Bold", + "postscriptName": "Cabin-Bold", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1930, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 980, + "xWidthAvg": 863, + "subsets": { + "latin": { + "xWidthAvg": 863 + }, + "thai": { + "xWidthAvg": 1206 + } + } + }, + "regular": { + "familyName": "Cabin", + "fullName": "Cabin Regular", + "postscriptName": "Cabin-Regular", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1930, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 980, + "xWidthAvg": 844, + "subsets": { + "latin": { + "xWidthAvg": 844 + }, + "thai": { + "xWidthAvg": 1206 + } + } + }, + "italic": { + "familyName": "Cabin", + "fullName": "Cabin Italic", + "postscriptName": "Cabin-Italic", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1930, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 980, + "xWidthAvg": 794, + "subsets": { + "latin": { + "xWidthAvg": 794 + }, + "thai": { + "xWidthAvg": 1206 + } + } + }, + "700italic": { + "familyName": "Cabin", + "fullName": "Cabin Bold Italic", + "postscriptName": "Cabin-BoldItalic", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1930, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 980, + "xWidthAvg": 854, + "subsets": { + "latin": { + "xWidthAvg": 854 + }, + "thai": { + "xWidthAvg": 1206 + } + } + }, + "600italic": { + "familyName": "Cabin", + "fullName": "Cabin SemiBold Italic", + "postscriptName": "Cabin-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1930, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 980, + "xWidthAvg": 832, + "subsets": { + "latin": { + "xWidthAvg": 832 + }, + "thai": { + "xWidthAvg": 1206 + } + } + }, + "500italic": { + "familyName": "Cabin", + "fullName": "Cabin Medium Italic", + "postscriptName": "Cabin-MediumItalic", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1930, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 980, + "xWidthAvg": 820, + "subsets": { + "latin": { + "xWidthAvg": 820 + }, + "thai": { + "xWidthAvg": 1206 + } + } + } + } + }, + "cabinCondensed": { + "familyName": "Cabin Condensed", + "fullName": "Cabin Condensed Regular", + "postscriptName": "CabinCondensed-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 965, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 369, + "subsets": { + "latin": { + "xWidthAvg": 369 + }, + "thai": { + "xWidthAvg": 603 + } + }, + "variants": { + "500": { + "familyName": "Cabin Condensed", + "fullName": "Cabin Condensed Medium", + "postscriptName": "CabinCondensed-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 965, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 371, + "subsets": { + "latin": { + "xWidthAvg": 371 + }, + "thai": { + "xWidthAvg": 603 + } + } + }, + "600": { + "familyName": "Cabin Condensed", + "fullName": "Cabin Condensed SemiBold", + "postscriptName": "CabinCondensed-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 965, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 372, + "subsets": { + "latin": { + "xWidthAvg": 372 + }, + "thai": { + "xWidthAvg": 603 + } + } + }, + "700": { + "familyName": "Cabin Condensed", + "fullName": "Cabin Condensed Bold", + "postscriptName": "CabinCondensed-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 965, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 373, + "subsets": { + "latin": { + "xWidthAvg": 373 + }, + "thai": { + "xWidthAvg": 603 + } + } + }, + "regular": { + "familyName": "Cabin Condensed", + "fullName": "Cabin Condensed Regular", + "postscriptName": "CabinCondensed-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 965, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 369, + "subsets": { + "latin": { + "xWidthAvg": 369 + }, + "thai": { + "xWidthAvg": 603 + } + } + } + } + }, + "cabinSketch": { + "familyName": "Cabin Sketch", + "fullName": "Cabin Sketch Regular", + "postscriptName": "CabinSketch-Regular", + "category": "display", + "capHeight": 652, + "ascent": 873, + "descent": -298, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 216 + } + }, + "variants": { + "700": { + "familyName": "Cabin Sketch", + "fullName": "Cabin Sketch Bold", + "postscriptName": "CabinSketch-Bold", + "category": "display", + "capHeight": 652, + "ascent": 873, + "descent": -298, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 216 + } + } + }, + "regular": { + "familyName": "Cabin Sketch", + "fullName": "Cabin Sketch Regular", + "postscriptName": "CabinSketch-Regular", + "category": "display", + "capHeight": 652, + "ascent": 873, + "descent": -298, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 216 + } + } + } + } + }, + "cactusClassicalSerif": { + "familyName": "Cactus Classical Serif", + "fullName": "Cactus Classical Serif Regular", + "postscriptName": "CactusClassicalSerif-Regular", + "category": "serif", + "capHeight": 761, + "ascent": 995, + "descent": -229, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Cactus Classical Serif", + "fullName": "Cactus Classical Serif Regular", + "postscriptName": "CactusClassicalSerif-Regular", + "category": "serif", + "capHeight": 761, + "ascent": 995, + "descent": -229, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "caesarDressing": { + "familyName": "Caesar Dressing", + "fullName": "Caesar Dressing", + "postscriptName": "CaesarDressing", + "category": "display", + "capHeight": 773, + "ascent": 1017, + "descent": -226, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 772, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 358 + } + }, + "variants": { + "regular": { + "familyName": "Caesar Dressing", + "fullName": "Caesar Dressing", + "postscriptName": "CaesarDressing", + "category": "display", + "capHeight": 773, + "ascent": 1017, + "descent": -226, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 772, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 358 + } + } + } + } + }, + "cagliostro": { + "familyName": "Cagliostro", + "fullName": "Cagliostro Regular", + "postscriptName": "Cagliostro-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 998, + "descent": -355, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 444, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 250 + } + }, + "variants": { + "regular": { + "familyName": "Cagliostro", + "fullName": "Cagliostro Regular", + "postscriptName": "Cagliostro-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 998, + "descent": -355, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 444, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 250 + } + } + } + } + }, + "cairo": { + "familyName": "Cairo", + "fullName": "Cairo Regular", + "postscriptName": "Cairo-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1303, + "descent": -571, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 235 + } + }, + "variants": { + "200": { + "familyName": "Cairo", + "fullName": "Cairo ExtraLight", + "postscriptName": "Cairo-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1303, + "descent": -571, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 235 + } + } + }, + "300": { + "familyName": "Cairo", + "fullName": "Cairo Light", + "postscriptName": "Cairo-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1303, + "descent": -571, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 415, + "subsets": { + "latin": { + "xWidthAvg": 415 + }, + "thai": { + "xWidthAvg": 235 + } + } + }, + "500": { + "familyName": "Cairo", + "fullName": "Cairo Medium", + "postscriptName": "Cairo-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1303, + "descent": -571, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 424, + "subsets": { + "latin": { + "xWidthAvg": 424 + }, + "thai": { + "xWidthAvg": 235 + } + } + }, + "600": { + "familyName": "Cairo", + "fullName": "Cairo SemiBold", + "postscriptName": "Cairo-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1303, + "descent": -571, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 235 + } + } + }, + "700": { + "familyName": "Cairo", + "fullName": "Cairo Bold", + "postscriptName": "Cairo-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1303, + "descent": -571, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 235 + } + } + }, + "800": { + "familyName": "Cairo", + "fullName": "Cairo ExtraBold", + "postscriptName": "Cairo-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1303, + "descent": -571, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 235 + } + } + }, + "900": { + "familyName": "Cairo", + "fullName": "Cairo Black", + "postscriptName": "Cairo-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1303, + "descent": -571, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 235 + } + } + }, + "regular": { + "familyName": "Cairo", + "fullName": "Cairo Regular", + "postscriptName": "Cairo-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1303, + "descent": -571, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 235 + } + } + } + } + }, + "cairoPlay": { + "familyName": "Cairo Play", + "fullName": "Cairo Play Regular", + "postscriptName": "CairoPlay-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1303, + "descent": -571, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 235 + } + }, + "variants": { + "200": { + "familyName": "Cairo Play", + "fullName": "Cairo Play ExtraLight", + "postscriptName": "CairoPlay-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1303, + "descent": -571, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 235 + } + } + }, + "300": { + "familyName": "Cairo Play", + "fullName": "Cairo Play Light", + "postscriptName": "CairoPlay-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1303, + "descent": -571, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 415, + "subsets": { + "latin": { + "xWidthAvg": 415 + }, + "thai": { + "xWidthAvg": 235 + } + } + }, + "500": { + "familyName": "Cairo Play", + "fullName": "Cairo Play Medium", + "postscriptName": "CairoPlay-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1303, + "descent": -571, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 424, + "subsets": { + "latin": { + "xWidthAvg": 424 + }, + "thai": { + "xWidthAvg": 235 + } + } + }, + "600": { + "familyName": "Cairo Play", + "fullName": "Cairo Play SemiBold", + "postscriptName": "CairoPlay-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1303, + "descent": -571, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 235 + } + } + }, + "700": { + "familyName": "Cairo Play", + "fullName": "Cairo Play Bold", + "postscriptName": "CairoPlay-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1303, + "descent": -571, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 235 + } + } + }, + "800": { + "familyName": "Cairo Play", + "fullName": "Cairo Play ExtraBold", + "postscriptName": "CairoPlay-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1303, + "descent": -571, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 235 + } + } + }, + "900": { + "familyName": "Cairo Play", + "fullName": "Cairo Play Black", + "postscriptName": "CairoPlay-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1303, + "descent": -571, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 235 + } + } + }, + "regular": { + "familyName": "Cairo Play", + "fullName": "Cairo Play Regular", + "postscriptName": "CairoPlay-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1303, + "descent": -571, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 235 + } + } + } + } + }, + "caladea": { + "familyName": "Caladea", + "fullName": "Caladea Regular", + "postscriptName": "Caladea-Regular", + "category": "serif", + "capHeight": 667, + "ascent": 900, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 467, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 617 + } + }, + "variants": { + "700": { + "familyName": "Caladea", + "fullName": "Caladea Bold", + "postscriptName": "Caladea-Bold", + "category": "serif", + "capHeight": 667, + "ascent": 900, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 617 + } + } + }, + "regular": { + "familyName": "Caladea", + "fullName": "Caladea Regular", + "postscriptName": "Caladea-Regular", + "category": "serif", + "capHeight": 667, + "ascent": 900, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 467, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 617 + } + } + }, + "italic": { + "familyName": "Caladea", + "fullName": "Caladea Italic", + "postscriptName": "Caladea-Italic", + "category": "serif", + "capHeight": 667, + "ascent": 900, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 467, + "xWidthAvg": 404, + "subsets": { + "latin": { + "xWidthAvg": 404 + }, + "thai": { + "xWidthAvg": 683 + } + } + }, + "700italic": { + "familyName": "Caladea", + "fullName": "Caladea Bold Italic", + "postscriptName": "Caladea-BoldItalic", + "category": "serif", + "capHeight": 667, + "ascent": 900, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 685 + } + } + } + } + }, + "calistoga": { + "familyName": "Calistoga", + "fullName": "Calistoga Regular", + "postscriptName": "Calistoga-Regular", + "category": "display", + "capHeight": 698, + "ascent": 1000, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 1182 + } + }, + "variants": { + "regular": { + "familyName": "Calistoga", + "fullName": "Calistoga Regular", + "postscriptName": "Calistoga-Regular", + "category": "display", + "capHeight": 698, + "ascent": 1000, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 1182 + } + } + } + } + }, + "calligraffitti": { + "familyName": "Calligraffitti", + "fullName": "Calligraffitti Regular", + "postscriptName": "Calligraffitti-Regular", + "category": "handwriting", + "capHeight": 841, + "ascent": 986, + "descent": -607, + "lineGap": 14, + "unitsPerEm": 1024, + "xHeight": 819, + "xWidthAvg": 392, + "subsets": { + "latin": { + "xWidthAvg": 392 + }, + "thai": { + "xWidthAvg": 297 + } + }, + "variants": { + "regular": { + "familyName": "Calligraffitti", + "fullName": "Calligraffitti Regular", + "postscriptName": "Calligraffitti-Regular", + "category": "handwriting", + "capHeight": 841, + "ascent": 986, + "descent": -607, + "lineGap": 14, + "unitsPerEm": 1024, + "xHeight": 819, + "xWidthAvg": 392, + "subsets": { + "latin": { + "xWidthAvg": 392 + }, + "thai": { + "xWidthAvg": 297 + } + } + } + } + }, + "cambay": { + "familyName": "Cambay", + "fullName": "Cambay Regular", + "postscriptName": "Cambay-Regular", + "category": "sans-serif", + "capHeight": 550, + "ascent": 800, + "descent": -503, + "lineGap": 0, + "unitsPerEm": 800, + "xHeight": 384, + "xWidthAvg": 352, + "subsets": { + "latin": { + "xWidthAvg": 352 + }, + "thai": { + "xWidthAvg": 407 + } + }, + "variants": { + "700": { + "familyName": "Cambay", + "fullName": "Cambay Bold", + "postscriptName": "Cambay-Bold", + "category": "sans-serif", + "capHeight": 550, + "ascent": 800, + "descent": -503, + "lineGap": 0, + "unitsPerEm": 800, + "xHeight": 384, + "xWidthAvg": 367, + "subsets": { + "latin": { + "xWidthAvg": 367 + }, + "thai": { + "xWidthAvg": 407 + } + } + }, + "regular": { + "familyName": "Cambay", + "fullName": "Cambay Regular", + "postscriptName": "Cambay-Regular", + "category": "sans-serif", + "capHeight": 550, + "ascent": 800, + "descent": -503, + "lineGap": 0, + "unitsPerEm": 800, + "xHeight": 384, + "xWidthAvg": 352, + "subsets": { + "latin": { + "xWidthAvg": 352 + }, + "thai": { + "xWidthAvg": 407 + } + } + }, + "italic": { + "familyName": "Cambay", + "fullName": "Cambay Italic", + "postscriptName": "Cambay-Italic", + "category": "sans-serif", + "capHeight": 550, + "ascent": 800, + "descent": -503, + "lineGap": 0, + "unitsPerEm": 800, + "xHeight": 384, + "xWidthAvg": 352, + "subsets": { + "latin": { + "xWidthAvg": 352 + }, + "thai": { + "xWidthAvg": 407 + } + } + }, + "700italic": { + "familyName": "Cambay", + "fullName": "Cambay Bold Italic", + "postscriptName": "Cambay-BoldItalic", + "category": "sans-serif", + "capHeight": 550, + "ascent": 800, + "descent": -503, + "lineGap": 0, + "unitsPerEm": 800, + "xHeight": 384, + "xWidthAvg": 384, + "subsets": { + "latin": { + "xWidthAvg": 384 + }, + "thai": { + "xWidthAvg": 496 + } + } + } + } + }, + "cambo": { + "familyName": "Cambo", + "fullName": "Cambo", + "postscriptName": "Cambo-Regular", + "category": "serif", + "capHeight": 676, + "ascent": 879, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 253 + } + }, + "variants": { + "regular": { + "familyName": "Cambo", + "fullName": "Cambo", + "postscriptName": "Cambo-Regular", + "category": "serif", + "capHeight": 676, + "ascent": 879, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 253 + } + } + } + } + }, + "candal": { + "familyName": "Candal", + "fullName": "Candal", + "postscriptName": "Candal", + "category": "sans-serif", + "capHeight": 1414, + "ascent": 2226, + "descent": -432, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1079, + "xWidthAvg": 1190, + "subsets": { + "latin": { + "xWidthAvg": 1190 + }, + "thai": { + "xWidthAvg": 532 + } + }, + "variants": { + "regular": { + "familyName": "Candal", + "fullName": "Candal", + "postscriptName": "Candal", + "category": "sans-serif", + "capHeight": 1414, + "ascent": 2226, + "descent": -432, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1079, + "xWidthAvg": 1190, + "subsets": { + "latin": { + "xWidthAvg": 1190 + }, + "thai": { + "xWidthAvg": 532 + } + } + } + } + }, + "cantarell": { + "familyName": "Cantarell", + "fullName": "Cantarell Regular", + "postscriptName": "Cantarell-Regular", + "category": "sans-serif", + "ascent": 2240, + "descent": -660, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 957, + "subsets": { + "latin": { + "xWidthAvg": 957 + }, + "thai": { + "xWidthAvg": 748 + } + }, + "variants": { + "700": { + "familyName": "Cantarell", + "fullName": "Cantarell Bold", + "postscriptName": "Cantarell-Bold", + "category": "sans-serif", + "ascent": 2240, + "descent": -660, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 1084, + "subsets": { + "latin": { + "xWidthAvg": 1084 + }, + "thai": { + "xWidthAvg": 748 + } + } + }, + "regular": { + "familyName": "Cantarell", + "fullName": "Cantarell Regular", + "postscriptName": "Cantarell-Regular", + "category": "sans-serif", + "ascent": 2240, + "descent": -660, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 957, + "subsets": { + "latin": { + "xWidthAvg": 957 + }, + "thai": { + "xWidthAvg": 748 + } + } + }, + "italic": { + "familyName": "Cantarell", + "fullName": "Cantarell Italic", + "postscriptName": "Cantarell-Italic", + "category": "sans-serif", + "ascent": 2240, + "descent": -660, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 948, + "subsets": { + "latin": { + "xWidthAvg": 948 + }, + "thai": { + "xWidthAvg": 748 + } + } + }, + "700italic": { + "familyName": "Cantarell", + "fullName": "Cantarell Bold Italic", + "postscriptName": "Cantarell-BoldItalic", + "category": "sans-serif", + "ascent": 2240, + "descent": -660, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 1073, + "subsets": { + "latin": { + "xWidthAvg": 1073 + }, + "thai": { + "xWidthAvg": 748 + } + } + } + } + }, + "cantataOne": { + "familyName": "Cantata One", + "fullName": "CantataOne-Regular", + "postscriptName": "CantataOne-Regular", + "category": "serif", + "capHeight": 1530, + "ascent": 2040, + "descent": -560, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1023, + "xWidthAvg": 1075, + "subsets": { + "latin": { + "xWidthAvg": 1075 + }, + "thai": { + "xWidthAvg": 1530 + } + }, + "variants": { + "regular": { + "familyName": "Cantata One", + "fullName": "CantataOne-Regular", + "postscriptName": "CantataOne-Regular", + "category": "serif", + "capHeight": 1530, + "ascent": 2040, + "descent": -560, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1023, + "xWidthAvg": 1075, + "subsets": { + "latin": { + "xWidthAvg": 1075 + }, + "thai": { + "xWidthAvg": 1530 + } + } + } + } + }, + "cantoraOne": { + "familyName": "Cantora One", + "fullName": "Cantora One Regular", + "postscriptName": "CantoraOne-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 416, + "subsets": { + "latin": { + "xWidthAvg": 416 + }, + "thai": { + "xWidthAvg": 647 + } + }, + "variants": { + "regular": { + "familyName": "Cantora One", + "fullName": "Cantora One Regular", + "postscriptName": "CantoraOne-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 416, + "subsets": { + "latin": { + "xWidthAvg": 416 + }, + "thai": { + "xWidthAvg": 647 + } + } + } + } + }, + "caprasimo": { + "familyName": "Caprasimo", + "fullName": "Caprasimo Regular", + "postscriptName": "Caprasimo-Regular", + "category": "display", + "capHeight": 1434, + "ascent": 1880, + "descent": -469, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 1053, + "subsets": { + "latin": { + "xWidthAvg": 1053 + }, + "thai": { + "xWidthAvg": 671 + } + }, + "variants": { + "regular": { + "familyName": "Caprasimo", + "fullName": "Caprasimo Regular", + "postscriptName": "Caprasimo-Regular", + "category": "display", + "capHeight": 1434, + "ascent": 1880, + "descent": -469, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 1053, + "subsets": { + "latin": { + "xWidthAvg": 1053 + }, + "thai": { + "xWidthAvg": 671 + } + } + } + } + }, + "capriola": { + "familyName": "Capriola", + "fullName": "Capriola Regular", + "postscriptName": "Capriola-Regular", + "category": "sans-serif", + "capHeight": 1533, + "ascent": 1992, + "descent": -568, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1128, + "xWidthAvg": 1043, + "subsets": { + "latin": { + "xWidthAvg": 1043 + }, + "thai": { + "xWidthAvg": 1703 + } + }, + "variants": { + "regular": { + "familyName": "Capriola", + "fullName": "Capriola Regular", + "postscriptName": "Capriola-Regular", + "category": "sans-serif", + "capHeight": 1533, + "ascent": 1992, + "descent": -568, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1128, + "xWidthAvg": 1043, + "subsets": { + "latin": { + "xWidthAvg": 1043 + }, + "thai": { + "xWidthAvg": 1703 + } + } + } + } + }, + "caramel": { + "familyName": "Caramel", + "fullName": "Caramel Regular", + "postscriptName": "Caramel-Regular", + "category": "handwriting", + "capHeight": 650, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 270, + "xWidthAvg": 261, + "subsets": { + "latin": { + "xWidthAvg": 261 + }, + "thai": { + "xWidthAvg": 429 + } + }, + "variants": { + "regular": { + "familyName": "Caramel", + "fullName": "Caramel Regular", + "postscriptName": "Caramel-Regular", + "category": "handwriting", + "capHeight": 650, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 270, + "xWidthAvg": 261, + "subsets": { + "latin": { + "xWidthAvg": 261 + }, + "thai": { + "xWidthAvg": 429 + } + } + } + } + }, + "carattere": { + "familyName": "Carattere", + "fullName": "Carattere Regular", + "postscriptName": "Carattere-Regular", + "category": "handwriting", + "capHeight": 690, + "ascent": 800, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 350, + "xWidthAvg": 302, + "subsets": { + "latin": { + "xWidthAvg": 302 + }, + "thai": { + "xWidthAvg": 511 + } + }, + "variants": { + "regular": { + "familyName": "Carattere", + "fullName": "Carattere Regular", + "postscriptName": "Carattere-Regular", + "category": "handwriting", + "capHeight": 690, + "ascent": 800, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 350, + "xWidthAvg": 302, + "subsets": { + "latin": { + "xWidthAvg": 302 + }, + "thai": { + "xWidthAvg": 511 + } + } + } + } + }, + "cardo": { + "familyName": "Cardo", + "fullName": "Cardo", + "postscriptName": "Cardo-Regular", + "category": "serif", + "capHeight": 1410, + "ascent": 2028, + "descent": -745, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 900, + "xWidthAvg": 875, + "subsets": { + "latin": { + "xWidthAvg": 875 + }, + "thai": { + "xWidthAvg": 1078 + } + }, + "variants": { + "700": { + "familyName": "Cardo", + "fullName": "Cardo Bold", + "postscriptName": "Cardo-Bold", + "category": "serif", + "capHeight": 1410, + "ascent": 2028, + "descent": -745, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 920, + "xWidthAvg": 951, + "subsets": { + "latin": { + "xWidthAvg": 951 + }, + "thai": { + "xWidthAvg": 1078 + } + } + }, + "regular": { + "familyName": "Cardo", + "fullName": "Cardo", + "postscriptName": "Cardo-Regular", + "category": "serif", + "capHeight": 1410, + "ascent": 2028, + "descent": -745, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 900, + "xWidthAvg": 875, + "subsets": { + "latin": { + "xWidthAvg": 875 + }, + "thai": { + "xWidthAvg": 1078 + } + } + }, + "italic": { + "familyName": "Cardo", + "fullName": "Cardo Italic", + "postscriptName": "Cardo-Italic", + "category": "serif", + "capHeight": 1410, + "ascent": 2028, + "descent": -745, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 900, + "xWidthAvg": 808, + "subsets": { + "latin": { + "xWidthAvg": 808 + }, + "thai": { + "xWidthAvg": 1078 + } + } + } + } + }, + "carlito": { + "familyName": "Carlito", + "fullName": "Carlito Regular", + "postscriptName": "Carlito-Regular", + "category": "sans-serif", + "capHeight": 1314, + "ascent": 1950, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 978, + "xWidthAvg": 840, + "subsets": { + "latin": { + "xWidthAvg": 840 + }, + "thai": { + "xWidthAvg": 1038 + } + }, + "variants": { + "700": { + "familyName": "Carlito", + "fullName": "Carlito Bold", + "postscriptName": "Carlito-Bold", + "category": "sans-serif", + "capHeight": 1328, + "ascent": 1950, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 993, + "xWidthAvg": 859, + "subsets": { + "latin": { + "xWidthAvg": 859 + }, + "thai": { + "xWidthAvg": 1038 + } + } + }, + "regular": { + "familyName": "Carlito", + "fullName": "Carlito Regular", + "postscriptName": "Carlito-Regular", + "category": "sans-serif", + "capHeight": 1314, + "ascent": 1950, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 978, + "xWidthAvg": 840, + "subsets": { + "latin": { + "xWidthAvg": 840 + }, + "thai": { + "xWidthAvg": 1038 + } + } + }, + "italic": { + "familyName": "Carlito", + "fullName": "Carlito Italic", + "postscriptName": "Carlito-Italic", + "category": "sans-serif", + "capHeight": 1314, + "ascent": 1950, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 983, + "xWidthAvg": 835, + "subsets": { + "latin": { + "xWidthAvg": 835 + }, + "thai": { + "xWidthAvg": 1038 + } + } + }, + "700italic": { + "familyName": "Carlito", + "fullName": "Carlito Bold Italic", + "postscriptName": "Carlito-BoldItalic", + "category": "sans-serif", + "capHeight": 1328, + "ascent": 1950, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 993, + "xWidthAvg": 857, + "subsets": { + "latin": { + "xWidthAvg": 857 + }, + "thai": { + "xWidthAvg": 1038 + } + } + } + } + }, + "carme": { + "familyName": "Carme", + "fullName": "Carme Regular", + "postscriptName": "Carme", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 1946, + "descent": -513, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 946, + "subsets": { + "latin": { + "xWidthAvg": 946 + }, + "thai": { + "xWidthAvg": 819 + } + }, + "variants": { + "regular": { + "familyName": "Carme", + "fullName": "Carme Regular", + "postscriptName": "Carme", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 1946, + "descent": -513, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 946, + "subsets": { + "latin": { + "xWidthAvg": 946 + }, + "thai": { + "xWidthAvg": 819 + } + } + } + } + }, + "carroisGothic": { + "familyName": "Carrois Gothic", + "fullName": "Carrois Gothic Regular", + "postscriptName": "CarroisGothic-Regular", + "category": "sans-serif", + "capHeight": 720, + "ascent": 922, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 560, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 548 + } + }, + "variants": { + "regular": { + "familyName": "Carrois Gothic", + "fullName": "Carrois Gothic Regular", + "postscriptName": "CarroisGothic-Regular", + "category": "sans-serif", + "capHeight": 720, + "ascent": 922, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 560, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 548 + } + } + } + } + }, + "carroisGothicSC": { + "familyName": "Carrois Gothic SC", + "fullName": "Carrois Gothic SC Regular", + "postscriptName": "CarroisGothicSC-Regular", + "category": "sans-serif", + "capHeight": 720, + "ascent": 922, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 560, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 548 + } + }, + "variants": { + "regular": { + "familyName": "Carrois Gothic SC", + "fullName": "Carrois Gothic SC Regular", + "postscriptName": "CarroisGothicSC-Regular", + "category": "sans-serif", + "capHeight": 720, + "ascent": 922, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 560, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 548 + } + } + } + } + }, + "carterOne": { + "familyName": "Carter One", + "fullName": "Carter One", + "postscriptName": "CarterOne", + "category": "display", + "capHeight": 1481, + "ascent": 2264, + "descent": -890, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 473, + "xWidthAvg": 1005, + "subsets": { + "latin": { + "xWidthAvg": 1005 + }, + "thai": { + "xWidthAvg": 590 + } + }, + "variants": { + "regular": { + "familyName": "Carter One", + "fullName": "Carter One", + "postscriptName": "CarterOne", + "category": "display", + "capHeight": 1481, + "ascent": 2264, + "descent": -890, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 473, + "xWidthAvg": 1005, + "subsets": { + "latin": { + "xWidthAvg": 1005 + }, + "thai": { + "xWidthAvg": 590 + } + } + } + } + }, + "castoro": { + "familyName": "Castoro", + "fullName": "Castoro Regular", + "postscriptName": "Castoro-Regular", + "category": "serif", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 330, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 464 + } + }, + "variants": { + "regular": { + "familyName": "Castoro", + "fullName": "Castoro Regular", + "postscriptName": "Castoro-Regular", + "category": "serif", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 330, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 464 + } + } + }, + "italic": { + "familyName": "Castoro", + "fullName": "Castoro Italic", + "postscriptName": "Castoro-Italic", + "category": "serif", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 330, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 464 + } + } + } + } + }, + "castoroTitling": { + "familyName": "Castoro Titling", + "fullName": "Castoro Titling Regular", + "postscriptName": "CastoroTitling-Regular", + "category": "display", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 330, + "unitsPerEm": 1000, + "xHeight": 455, + "xWidthAvg": 613, + "subsets": { + "latin": { + "xWidthAvg": 613 + }, + "thai": { + "xWidthAvg": 464 + } + }, + "variants": { + "regular": { + "familyName": "Castoro Titling", + "fullName": "Castoro Titling Regular", + "postscriptName": "CastoroTitling-Regular", + "category": "display", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 330, + "unitsPerEm": 1000, + "xHeight": 455, + "xWidthAvg": 613, + "subsets": { + "latin": { + "xWidthAvg": 613 + }, + "thai": { + "xWidthAvg": 464 + } + } + } + } + }, + "catamaran": { + "familyName": "Catamaran", + "fullName": "Catamaran Regular", + "postscriptName": "Catamaran-Regular", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1100, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 658 + } + }, + "variants": { + "100": { + "familyName": "Catamaran", + "fullName": "Catamaran Thin", + "postscriptName": "Catamaran-Thin", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1100, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 395, + "subsets": { + "latin": { + "xWidthAvg": 395 + }, + "thai": { + "xWidthAvg": 628 + } + } + }, + "200": { + "familyName": "Catamaran", + "fullName": "Catamaran ExtraLight", + "postscriptName": "Catamaran-ExtraLight", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1100, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 398, + "subsets": { + "latin": { + "xWidthAvg": 398 + }, + "thai": { + "xWidthAvg": 636 + } + } + }, + "300": { + "familyName": "Catamaran", + "fullName": "Catamaran Light", + "postscriptName": "Catamaran-Light", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1100, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 402, + "subsets": { + "latin": { + "xWidthAvg": 402 + }, + "thai": { + "xWidthAvg": 645 + } + } + }, + "500": { + "familyName": "Catamaran", + "fullName": "Catamaran Medium", + "postscriptName": "Catamaran-Medium", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1100, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 421, + "subsets": { + "latin": { + "xWidthAvg": 421 + }, + "thai": { + "xWidthAvg": 671 + } + } + }, + "600": { + "familyName": "Catamaran", + "fullName": "Catamaran SemiBold", + "postscriptName": "Catamaran-SemiBold", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1100, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 684 + } + } + }, + "700": { + "familyName": "Catamaran", + "fullName": "Catamaran Bold", + "postscriptName": "Catamaran-Bold", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1100, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 698 + } + } + }, + "800": { + "familyName": "Catamaran", + "fullName": "Catamaran ExtraBold", + "postscriptName": "Catamaran-ExtraBold", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1100, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 697 + } + } + }, + "900": { + "familyName": "Catamaran", + "fullName": "Catamaran Black", + "postscriptName": "Catamaran-Black", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1100, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 697 + } + } + }, + "regular": { + "familyName": "Catamaran", + "fullName": "Catamaran Regular", + "postscriptName": "Catamaran-Regular", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1100, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 658 + } + } + } + } + }, + "caudex": { + "familyName": "Caudex", + "fullName": "Caudex", + "postscriptName": "Caudex", + "category": "serif", + "ascent": 2034, + "descent": -606, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 934, + "subsets": { + "latin": { + "xWidthAvg": 934 + }, + "thai": { + "xWidthAvg": 772 + } + }, + "variants": { + "700": { + "familyName": "Caudex", + "fullName": "Caudex Bold", + "postscriptName": "Caudex-Bold", + "category": "serif", + "ascent": 2034, + "descent": -606, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 934, + "subsets": { + "latin": { + "xWidthAvg": 934 + }, + "thai": { + "xWidthAvg": 772 + } + } + }, + "regular": { + "familyName": "Caudex", + "fullName": "Caudex", + "postscriptName": "Caudex", + "category": "serif", + "ascent": 2034, + "descent": -606, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 934, + "subsets": { + "latin": { + "xWidthAvg": 934 + }, + "thai": { + "xWidthAvg": 772 + } + } + }, + "italic": { + "familyName": "Caudex", + "fullName": "Caudex Italic", + "postscriptName": "Caudex-Italic", + "category": "serif", + "ascent": 2034, + "descent": -606, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 933, + "subsets": { + "latin": { + "xWidthAvg": 933 + }, + "thai": { + "xWidthAvg": 772 + } + } + }, + "700italic": { + "familyName": "Caudex", + "fullName": "Caudex Bold Italic", + "postscriptName": "Caudex-BoldItalic", + "category": "serif", + "ascent": 2034, + "descent": -606, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 933, + "subsets": { + "latin": { + "xWidthAvg": 933 + }, + "thai": { + "xWidthAvg": 772 + } + } + } + } + }, + "caveat": { + "familyName": "Caveat", + "fullName": "Caveat Regular", + "postscriptName": "Caveat-Regular", + "category": "handwriting", + "capHeight": 610, + "ascent": 960, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 343, + "subsets": { + "latin": { + "xWidthAvg": 343 + }, + "thai": { + "xWidthAvg": 603 + } + }, + "variants": { + "500": { + "familyName": "Caveat", + "fullName": "Caveat Medium", + "postscriptName": "Caveat-Medium", + "category": "handwriting", + "capHeight": 610, + "ascent": 960, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 345, + "subsets": { + "latin": { + "xWidthAvg": 345 + }, + "thai": { + "xWidthAvg": 603 + } + } + }, + "600": { + "familyName": "Caveat", + "fullName": "Caveat SemiBold", + "postscriptName": "Caveat-SemiBold", + "category": "handwriting", + "capHeight": 610, + "ascent": 960, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 347, + "subsets": { + "latin": { + "xWidthAvg": 347 + }, + "thai": { + "xWidthAvg": 603 + } + } + }, + "700": { + "familyName": "Caveat", + "fullName": "Caveat Bold", + "postscriptName": "Caveat-Bold", + "category": "handwriting", + "capHeight": 610, + "ascent": 960, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 349, + "subsets": { + "latin": { + "xWidthAvg": 349 + }, + "thai": { + "xWidthAvg": 603 + } + } + }, + "regular": { + "familyName": "Caveat", + "fullName": "Caveat Regular", + "postscriptName": "Caveat-Regular", + "category": "handwriting", + "capHeight": 610, + "ascent": 960, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 343, + "subsets": { + "latin": { + "xWidthAvg": 343 + }, + "thai": { + "xWidthAvg": 603 + } + } + } + } + }, + "caveatBrush": { + "familyName": "Caveat Brush", + "fullName": "Caveat Brush", + "postscriptName": "CaveatBrush-Regular", + "category": "handwriting", + "capHeight": 660, + "ascent": 960, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 420, + "xWidthAvg": 354, + "subsets": { + "latin": { + "xWidthAvg": 354 + }, + "thai": { + "xWidthAvg": 835 + } + }, + "variants": { + "regular": { + "familyName": "Caveat Brush", + "fullName": "Caveat Brush", + "postscriptName": "CaveatBrush-Regular", + "category": "handwriting", + "capHeight": 660, + "ascent": 960, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 420, + "xWidthAvg": 354, + "subsets": { + "latin": { + "xWidthAvg": 354 + }, + "thai": { + "xWidthAvg": 835 + } + } + } + } + }, + "cedarvilleCursive": { + "familyName": "Cedarville Cursive", + "fullName": "Cedarville Cursive", + "postscriptName": "Cedarville-Cursive", + "category": "handwriting", + "capHeight": 775, + "ascent": 1279, + "descent": -663, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 400, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 461 + } + }, + "variants": { + "regular": { + "familyName": "Cedarville Cursive", + "fullName": "Cedarville Cursive", + "postscriptName": "Cedarville-Cursive", + "category": "handwriting", + "capHeight": 775, + "ascent": 1279, + "descent": -663, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 400, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 461 + } + } + } + } + }, + "cevicheOne": { + "familyName": "Ceviche One", + "fullName": "Ceviche One", + "postscriptName": "CevicheOne-Regular", + "category": "display", + "capHeight": 425, + "ascent": 806, + "descent": -237, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 451, + "xWidthAvg": 358, + "subsets": { + "latin": { + "xWidthAvg": 358 + }, + "thai": { + "xWidthAvg": 294 + } + }, + "variants": { + "regular": { + "familyName": "Ceviche One", + "fullName": "Ceviche One", + "postscriptName": "CevicheOne-Regular", + "category": "display", + "capHeight": 425, + "ascent": 806, + "descent": -237, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 451, + "xWidthAvg": 358, + "subsets": { + "latin": { + "xWidthAvg": 358 + }, + "thai": { + "xWidthAvg": 294 + } + } + } + } + }, + "chakraPetch": { + "familyName": "Chakra Petch", + "fullName": "Chakra Petch Regular", + "postscriptName": "ChakraPetch-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 558 + } + }, + "variants": { + "300": { + "familyName": "Chakra Petch", + "fullName": "Chakra Petch Light", + "postscriptName": "ChakraPetch-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 449, + "subsets": { + "latin": { + "xWidthAvg": 449 + }, + "thai": { + "xWidthAvg": 550 + } + } + }, + "500": { + "familyName": "Chakra Petch", + "fullName": "Chakra Petch Medium", + "postscriptName": "ChakraPetch-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 567 + } + } + }, + "600": { + "familyName": "Chakra Petch", + "fullName": "Chakra Petch SemiBold", + "postscriptName": "ChakraPetch-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 575 + } + } + }, + "700": { + "familyName": "Chakra Petch", + "fullName": "Chakra Petch Bold", + "postscriptName": "ChakraPetch-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "regular": { + "familyName": "Chakra Petch", + "fullName": "Chakra Petch Regular", + "postscriptName": "ChakraPetch-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 558 + } + } + }, + "italic": { + "familyName": "Chakra Petch", + "fullName": "Chakra Petch Italic", + "postscriptName": "ChakraPetch-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 558 + } + } + }, + "700italic": { + "familyName": "Chakra Petch", + "fullName": "Chakra Petch Bold Italic", + "postscriptName": "ChakraPetch-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "600italic": { + "familyName": "Chakra Petch", + "fullName": "Chakra Petch SemiBold Italic", + "postscriptName": "ChakraPetch-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 575 + } + } + }, + "500italic": { + "familyName": "Chakra Petch", + "fullName": "Chakra Petch Medium Italic", + "postscriptName": "ChakraPetch-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 567 + } + } + }, + "300italic": { + "familyName": "Chakra Petch", + "fullName": "Chakra Petch Light Italic", + "postscriptName": "ChakraPetch-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 449, + "subsets": { + "latin": { + "xWidthAvg": 449 + }, + "thai": { + "xWidthAvg": 550 + } + } + } + } + }, + "changa": { + "familyName": "Changa", + "fullName": "Changa Regular", + "postscriptName": "Changa-Regular", + "category": "sans-serif", + "capHeight": 625, + "ascent": 1227, + "descent": -613, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "200": { + "familyName": "Changa", + "fullName": "Changa ExtraLight", + "postscriptName": "Changa-ExtraLight", + "category": "sans-serif", + "capHeight": 625, + "ascent": 1227, + "descent": -613, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Changa", + "fullName": "Changa Light", + "postscriptName": "Changa-Light", + "category": "sans-serif", + "capHeight": 625, + "ascent": 1227, + "descent": -613, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Changa", + "fullName": "Changa Medium", + "postscriptName": "Changa-Medium", + "category": "sans-serif", + "capHeight": 625, + "ascent": 1227, + "descent": -613, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Changa", + "fullName": "Changa SemiBold", + "postscriptName": "Changa-SemiBold", + "category": "sans-serif", + "capHeight": 625, + "ascent": 1227, + "descent": -613, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Changa", + "fullName": "Changa Bold", + "postscriptName": "Changa-Bold", + "category": "sans-serif", + "capHeight": 625, + "ascent": 1227, + "descent": -613, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Changa", + "fullName": "Changa ExtraBold", + "postscriptName": "Changa-ExtraBold", + "category": "sans-serif", + "capHeight": 625, + "ascent": 1227, + "descent": -613, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Changa", + "fullName": "Changa Regular", + "postscriptName": "Changa-Regular", + "category": "sans-serif", + "capHeight": 625, + "ascent": 1227, + "descent": -613, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "changaOne": { + "familyName": "Changa One", + "fullName": "Changa One", + "postscriptName": "ChangaOne", + "category": "display", + "capHeight": 625, + "ascent": 882, + "descent": -180, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 150 + } + }, + "variants": { + "regular": { + "familyName": "Changa One", + "fullName": "Changa One", + "postscriptName": "ChangaOne", + "category": "display", + "capHeight": 625, + "ascent": 882, + "descent": -180, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 150 + } + } + }, + "italic": { + "familyName": "Changa One", + "fullName": "Changa One Italic", + "postscriptName": "ChangaOne-Italic", + "category": "display", + "capHeight": 625, + "ascent": 882, + "descent": -180, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 150 + } + } + } + } + }, + "chango": { + "familyName": "Chango", + "fullName": "Chango Regular", + "postscriptName": "Chango-Regular", + "category": "display", + "capHeight": 700, + "ascent": 995, + "descent": -216, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 509, + "xWidthAvg": 686, + "subsets": { + "latin": { + "xWidthAvg": 686 + }, + "thai": { + "xWidthAvg": 679 + } + }, + "variants": { + "regular": { + "familyName": "Chango", + "fullName": "Chango Regular", + "postscriptName": "Chango-Regular", + "category": "display", + "capHeight": 700, + "ascent": 995, + "descent": -216, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 509, + "xWidthAvg": 686, + "subsets": { + "latin": { + "xWidthAvg": 686 + }, + "thai": { + "xWidthAvg": 679 + } + } + } + } + }, + "charisSIL": { + "familyName": "Charis SIL", + "fullName": "Charis SIL", + "postscriptName": "CharisSIL", + "category": "serif", + "capHeight": 1374, + "ascent": 2450, + "descent": -900, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 987, + "xWidthAvg": 923, + "subsets": { + "latin": { + "xWidthAvg": 923 + }, + "thai": { + "xWidthAvg": 1400 + } + }, + "variants": { + "700": { + "familyName": "Charis SIL", + "fullName": "Charis SIL Bold", + "postscriptName": "CharisSIL-Bold", + "category": "serif", + "capHeight": 1374, + "ascent": 2450, + "descent": -900, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 987, + "xWidthAvg": 993, + "subsets": { + "latin": { + "xWidthAvg": 993 + }, + "thai": { + "xWidthAvg": 1400 + } + } + }, + "regular": { + "familyName": "Charis SIL", + "fullName": "Charis SIL", + "postscriptName": "CharisSIL", + "category": "serif", + "capHeight": 1374, + "ascent": 2450, + "descent": -900, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 987, + "xWidthAvg": 923, + "subsets": { + "latin": { + "xWidthAvg": 923 + }, + "thai": { + "xWidthAvg": 1400 + } + } + }, + "italic": { + "familyName": "Charis SIL", + "fullName": "Charis SIL Italic", + "postscriptName": "CharisSIL-Italic", + "category": "serif", + "capHeight": 1374, + "ascent": 2450, + "descent": -900, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 987, + "xWidthAvg": 865, + "subsets": { + "latin": { + "xWidthAvg": 865 + }, + "thai": { + "xWidthAvg": 1400 + } + } + }, + "700italic": { + "familyName": "Charis SIL", + "fullName": "Charis SIL Bold Italic", + "postscriptName": "CharisSIL-BoldItalic", + "category": "serif", + "capHeight": 1374, + "ascent": 2450, + "descent": -900, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 987, + "xWidthAvg": 942, + "subsets": { + "latin": { + "xWidthAvg": 942 + }, + "thai": { + "xWidthAvg": 1400 + } + } + } + } + }, + "charm": { + "familyName": "Charm", + "fullName": "Charm Regular", + "postscriptName": "Charm-Regular", + "category": "handwriting", + "capHeight": 684, + "ascent": 1115, + "descent": -434, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 466, + "xWidthAvg": 385, + "subsets": { + "latin": { + "xWidthAvg": 385 + }, + "thai": { + "xWidthAvg": 468 + } + }, + "variants": { + "700": { + "familyName": "Charm", + "fullName": "Charm Bold", + "postscriptName": "Charm-Bold", + "category": "handwriting", + "capHeight": 684, + "ascent": 1115, + "descent": -434, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 466, + "xWidthAvg": 398, + "subsets": { + "latin": { + "xWidthAvg": 398 + }, + "thai": { + "xWidthAvg": 482 + } + } + }, + "regular": { + "familyName": "Charm", + "fullName": "Charm Regular", + "postscriptName": "Charm-Regular", + "category": "handwriting", + "capHeight": 684, + "ascent": 1115, + "descent": -434, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 466, + "xWidthAvg": 385, + "subsets": { + "latin": { + "xWidthAvg": 385 + }, + "thai": { + "xWidthAvg": 468 + } + } + } + } + }, + "charmonman": { + "familyName": "Charmonman", + "fullName": "Charmonman Regular", + "postscriptName": "Charmonman-Regular", + "category": "handwriting", + "capHeight": 700, + "ascent": 1200, + "descent": -700, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 420, + "xWidthAvg": 407, + "subsets": { + "latin": { + "xWidthAvg": 407 + }, + "thai": { + "xWidthAvg": 433 + } + }, + "variants": { + "700": { + "familyName": "Charmonman", + "fullName": "Charmonman Bold", + "postscriptName": "Charmonman-Bold", + "category": "handwriting", + "capHeight": 700, + "ascent": 1200, + "descent": -700, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 420, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 466 + } + } + }, + "regular": { + "familyName": "Charmonman", + "fullName": "Charmonman Regular", + "postscriptName": "Charmonman-Regular", + "category": "handwriting", + "capHeight": 700, + "ascent": 1200, + "descent": -700, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 420, + "xWidthAvg": 407, + "subsets": { + "latin": { + "xWidthAvg": 407 + }, + "thai": { + "xWidthAvg": 433 + } + } + } + } + }, + "chathura": { + "familyName": "Chathura", + "fullName": "Chathura Regular", + "postscriptName": "Chathura-Regular", + "category": "sans-serif", + "capHeight": 404, + "ascent": 1020, + "descent": -602, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 294, + "xWidthAvg": 220, + "subsets": { + "latin": { + "xWidthAvg": 220 + }, + "thai": { + "xWidthAvg": 800 + } + }, + "variants": { + "100": { + "familyName": "Chathura", + "fullName": "Chathura Thin", + "postscriptName": "Chathura-Thin", + "category": "sans-serif", + "capHeight": 404, + "ascent": 1020, + "descent": -602, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 294, + "xWidthAvg": 219, + "subsets": { + "latin": { + "xWidthAvg": 219 + }, + "thai": { + "xWidthAvg": 800 + } + } + }, + "300": { + "familyName": "Chathura", + "fullName": "Chathura Light", + "postscriptName": "Chathura-Light", + "category": "sans-serif", + "capHeight": 404, + "ascent": 1020, + "descent": -602, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 294, + "xWidthAvg": 220, + "subsets": { + "latin": { + "xWidthAvg": 220 + }, + "thai": { + "xWidthAvg": 800 + } + } + }, + "700": { + "familyName": "Chathura", + "fullName": "Chathura Bold", + "postscriptName": "Chathura-Bold", + "category": "sans-serif", + "capHeight": 404, + "ascent": 1020, + "descent": -602, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 294, + "xWidthAvg": 220, + "subsets": { + "latin": { + "xWidthAvg": 220 + }, + "thai": { + "xWidthAvg": 800 + } + } + }, + "800": { + "familyName": "Chathura", + "fullName": "Chathura ExtraBold", + "postscriptName": "Chathura-ExtraBold", + "category": "sans-serif", + "capHeight": 404, + "ascent": 1020, + "descent": -602, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 294, + "xWidthAvg": 220, + "subsets": { + "latin": { + "xWidthAvg": 220 + }, + "thai": { + "xWidthAvg": 800 + } + } + }, + "regular": { + "familyName": "Chathura", + "fullName": "Chathura Regular", + "postscriptName": "Chathura-Regular", + "category": "sans-serif", + "capHeight": 404, + "ascent": 1020, + "descent": -602, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 294, + "xWidthAvg": 220, + "subsets": { + "latin": { + "xWidthAvg": 220 + }, + "thai": { + "xWidthAvg": 800 + } + } + } + } + }, + "chauPhilomeneOne": { + "familyName": "Chau Philomene One", + "fullName": "Chau Philomene One Regular", + "postscriptName": "ChauPhilomeneOne-Regular", + "category": "sans-serif", + "capHeight": 752, + "ascent": 1033, + "descent": -334, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 397, + "subsets": { + "latin": { + "xWidthAvg": 397 + }, + "thai": { + "xWidthAvg": 266 + } + }, + "variants": { + "regular": { + "familyName": "Chau Philomene One", + "fullName": "Chau Philomene One Regular", + "postscriptName": "ChauPhilomeneOne-Regular", + "category": "sans-serif", + "capHeight": 752, + "ascent": 1033, + "descent": -334, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 397, + "subsets": { + "latin": { + "xWidthAvg": 397 + }, + "thai": { + "xWidthAvg": 266 + } + } + }, + "italic": { + "familyName": "Chau Philomene One", + "fullName": "Chau Philomene One Italic", + "postscriptName": "ChauPhilomeneOne-Italic", + "category": "sans-serif", + "capHeight": 752, + "ascent": 1033, + "descent": -334, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 397, + "subsets": { + "latin": { + "xWidthAvg": 397 + }, + "thai": { + "xWidthAvg": 266 + } + } + } + } + }, + "chelaOne": { + "familyName": "Chela One", + "fullName": "Chela One", + "postscriptName": "ChelaOne-Regular", + "category": "display", + "capHeight": 721, + "ascent": 942, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 375, + "subsets": { + "latin": { + "xWidthAvg": 375 + }, + "thai": { + "xWidthAvg": 224 + } + }, + "variants": { + "regular": { + "familyName": "Chela One", + "fullName": "Chela One", + "postscriptName": "ChelaOne-Regular", + "category": "display", + "capHeight": 721, + "ascent": 942, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 375, + "subsets": { + "latin": { + "xWidthAvg": 375 + }, + "thai": { + "xWidthAvg": 224 + } + } + } + } + }, + "chelseaMarket": { + "familyName": "Chelsea Market", + "fullName": "Chelsea Market", + "postscriptName": "ChelseaMarket-Regular", + "category": "display", + "capHeight": 796, + "ascent": 1029, + "descent": -274, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 608, + "xWidthAvg": 554, + "subsets": { + "latin": { + "xWidthAvg": 554 + }, + "thai": { + "xWidthAvg": 420 + } + }, + "variants": { + "regular": { + "familyName": "Chelsea Market", + "fullName": "Chelsea Market", + "postscriptName": "ChelseaMarket-Regular", + "category": "display", + "capHeight": 796, + "ascent": 1029, + "descent": -274, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 608, + "xWidthAvg": 554, + "subsets": { + "latin": { + "xWidthAvg": 554 + }, + "thai": { + "xWidthAvg": 420 + } + } + } + } + }, + "chenla": { + "familyName": "Chenla", + "fullName": "Chenla", + "postscriptName": "Chenla", + "category": "display", + "capHeight": 0, + "ascent": 2500, + "descent": -1200, + "lineGap": 67, + "unitsPerEm": 2048, + "xHeight": 0, + "xWidthAvg": 1359, + "subsets": { + "latin": { + "xWidthAvg": 1359 + }, + "thai": { + "xWidthAvg": 1536 + } + }, + "variants": { + "regular": { + "familyName": "Chenla", + "fullName": "Chenla", + "postscriptName": "Chenla", + "category": "display", + "capHeight": 0, + "ascent": 2500, + "descent": -1200, + "lineGap": 67, + "unitsPerEm": 2048, + "xHeight": 0, + "xWidthAvg": 1359, + "subsets": { + "latin": { + "xWidthAvg": 1359 + }, + "thai": { + "xWidthAvg": 1536 + } + } + } + } + }, + "cherish": { + "familyName": "Cherish", + "fullName": "Cherish Regular", + "postscriptName": "Cherish-Regular", + "category": "handwriting", + "capHeight": 600, + "ascent": 850, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 330, + "xWidthAvg": 256, + "subsets": { + "latin": { + "xWidthAvg": 256 + }, + "thai": { + "xWidthAvg": 370 + } + }, + "variants": { + "regular": { + "familyName": "Cherish", + "fullName": "Cherish Regular", + "postscriptName": "Cherish-Regular", + "category": "handwriting", + "capHeight": 600, + "ascent": 850, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 330, + "xWidthAvg": 256, + "subsets": { + "latin": { + "xWidthAvg": 256 + }, + "thai": { + "xWidthAvg": 370 + } + } + } + } + }, + "cherryBombOne": { + "familyName": "Cherry Bomb One", + "fullName": "Cherry Bomb One Regular", + "postscriptName": "CherryBombOne-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Cherry Bomb One", + "fullName": "Cherry Bomb One Regular", + "postscriptName": "CherryBombOne-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "cherryCreamSoda": { + "familyName": "Cherry Cream Soda", + "fullName": "Cherry Cream Soda Regular", + "postscriptName": "CherryCreamSoda-Regular", + "category": "display", + "capHeight": 741, + "ascent": 1006, + "descent": -247, + "lineGap": 29, + "unitsPerEm": 1024, + "xHeight": 502, + "xWidthAvg": 568, + "subsets": { + "latin": { + "xWidthAvg": 568 + }, + "thai": { + "xWidthAvg": 358 + } + }, + "variants": { + "regular": { + "familyName": "Cherry Cream Soda", + "fullName": "Cherry Cream Soda Regular", + "postscriptName": "CherryCreamSoda-Regular", + "category": "display", + "capHeight": 741, + "ascent": 1006, + "descent": -247, + "lineGap": 29, + "unitsPerEm": 1024, + "xHeight": 502, + "xWidthAvg": 568, + "subsets": { + "latin": { + "xWidthAvg": 568 + }, + "thai": { + "xWidthAvg": 358 + } + } + } + } + }, + "cherrySwash": { + "familyName": "Cherry Swash", + "fullName": "Cherry Swash", + "postscriptName": "CherrySwash-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1025, + "descent": -301, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 310 + } + }, + "variants": { + "700": { + "familyName": "Cherry Swash", + "fullName": "Cherry Swash Bold", + "postscriptName": "CherrySwash-Bold", + "category": "display", + "capHeight": 700, + "ascent": 1025, + "descent": -301, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 310 + } + } + }, + "regular": { + "familyName": "Cherry Swash", + "fullName": "Cherry Swash", + "postscriptName": "CherrySwash-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1025, + "descent": -301, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 310 + } + } + } + } + }, + "chewy": { + "familyName": "Chewy", + "fullName": "Chewy Regular", + "postscriptName": "Chewy-Regular", + "category": "display", + "capHeight": 768, + "ascent": 1003, + "descent": -310, + "lineGap": 25, + "unitsPerEm": 1024, + "xHeight": 577, + "xWidthAvg": 406, + "subsets": { + "latin": { + "xWidthAvg": 406 + }, + "thai": { + "xWidthAvg": 0 + } + }, + "variants": { + "regular": { + "familyName": "Chewy", + "fullName": "Chewy Regular", + "postscriptName": "Chewy-Regular", + "category": "display", + "capHeight": 768, + "ascent": 1003, + "descent": -310, + "lineGap": 25, + "unitsPerEm": 1024, + "xHeight": 577, + "xWidthAvg": 406, + "subsets": { + "latin": { + "xWidthAvg": 406 + }, + "thai": { + "xWidthAvg": 0 + } + } + } + } + }, + "chicle": { + "familyName": "Chicle", + "fullName": "Chicle Regular", + "postscriptName": "Chicle-Regular", + "category": "display", + "capHeight": 513, + "ascent": 915, + "descent": -294, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 277, + "xWidthAvg": 336, + "subsets": { + "latin": { + "xWidthAvg": 336 + }, + "thai": { + "xWidthAvg": 200 + } + }, + "variants": { + "regular": { + "familyName": "Chicle", + "fullName": "Chicle Regular", + "postscriptName": "Chicle-Regular", + "category": "display", + "capHeight": 513, + "ascent": 915, + "descent": -294, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 277, + "xWidthAvg": 336, + "subsets": { + "latin": { + "xWidthAvg": 336 + }, + "thai": { + "xWidthAvg": 200 + } + } + } + } + }, + "chilanka": { + "familyName": "Chilanka", + "fullName": "Chilanka Regular", + "postscriptName": "Chilanka-Regular", + "category": "handwriting", + "capHeight": 1448, + "ascent": 1500, + "descent": -750, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 999, + "xWidthAvg": 948, + "subsets": { + "latin": { + "xWidthAvg": 948 + }, + "thai": { + "xWidthAvg": 692 + } + }, + "variants": { + "regular": { + "familyName": "Chilanka", + "fullName": "Chilanka Regular", + "postscriptName": "Chilanka-Regular", + "category": "handwriting", + "capHeight": 1448, + "ascent": 1500, + "descent": -750, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 999, + "xWidthAvg": 948, + "subsets": { + "latin": { + "xWidthAvg": 948 + }, + "thai": { + "xWidthAvg": 692 + } + } + } + } + }, + "chivo": { + "familyName": "Chivo", + "fullName": "Chivo Regular", + "postscriptName": "Chivo-Regular", + "category": "sans-serif", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "100": { + "familyName": "Chivo", + "fullName": "Chivo Thin", + "postscriptName": "Chivo-Thin", + "category": "sans-serif", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200": { + "familyName": "Chivo", + "fullName": "Chivo ExtraLight", + "postscriptName": "Chivo-ExtraLight", + "category": "sans-serif", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Chivo", + "fullName": "Chivo Light", + "postscriptName": "Chivo-Light", + "category": "sans-serif", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Chivo", + "fullName": "Chivo Medium", + "postscriptName": "Chivo-Medium", + "category": "sans-serif", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Chivo", + "fullName": "Chivo SemiBold", + "postscriptName": "Chivo-SemiBold", + "category": "sans-serif", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Chivo", + "fullName": "Chivo Bold", + "postscriptName": "Chivo-Bold", + "category": "sans-serif", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Chivo", + "fullName": "Chivo ExtraBold", + "postscriptName": "Chivo-ExtraBold", + "category": "sans-serif", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "Chivo", + "fullName": "Chivo Black", + "postscriptName": "Chivo-Black", + "category": "sans-serif", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Chivo", + "fullName": "Chivo Regular", + "postscriptName": "Chivo-Regular", + "category": "sans-serif", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Chivo", + "fullName": "Chivo Italic", + "postscriptName": "Chivo-Italic", + "category": "sans-serif", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900italic": { + "familyName": "Chivo", + "fullName": "Chivo Black Italic", + "postscriptName": "Chivo-BlackItalic", + "category": "sans-serif", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800italic": { + "familyName": "Chivo", + "fullName": "Chivo ExtraBold Italic", + "postscriptName": "Chivo-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700italic": { + "familyName": "Chivo", + "fullName": "Chivo Bold Italic", + "postscriptName": "Chivo-BoldItalic", + "category": "sans-serif", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600italic": { + "familyName": "Chivo", + "fullName": "Chivo SemiBold Italic", + "postscriptName": "Chivo-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500italic": { + "familyName": "Chivo", + "fullName": "Chivo Medium Italic", + "postscriptName": "Chivo-MediumItalic", + "category": "sans-serif", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300italic": { + "familyName": "Chivo", + "fullName": "Chivo Light Italic", + "postscriptName": "Chivo-LightItalic", + "category": "sans-serif", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 476, + "subsets": { + "latin": { + "xWidthAvg": 476 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200italic": { + "familyName": "Chivo", + "fullName": "Chivo ExtraLight Italic", + "postscriptName": "Chivo-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "100italic": { + "familyName": "Chivo", + "fullName": "Chivo Thin Italic", + "postscriptName": "Chivo-ThinItalic", + "category": "sans-serif", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "chivoMono": { + "familyName": "Chivo Mono", + "fullName": "Chivo Mono Regular", + "postscriptName": "ChivoMono-Regular", + "category": "monospace", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Chivo Mono", + "fullName": "Chivo Mono Thin", + "postscriptName": "ChivoMono-Thin", + "category": "monospace", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Chivo Mono", + "fullName": "Chivo Mono ExtraLight", + "postscriptName": "ChivoMono-ExtraLight", + "category": "monospace", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Chivo Mono", + "fullName": "Chivo Mono Light", + "postscriptName": "ChivoMono-Light", + "category": "monospace", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Chivo Mono", + "fullName": "Chivo Mono Medium", + "postscriptName": "ChivoMono-Medium", + "category": "monospace", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Chivo Mono", + "fullName": "Chivo Mono SemiBold", + "postscriptName": "ChivoMono-SemiBold", + "category": "monospace", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Chivo Mono", + "fullName": "Chivo Mono Bold", + "postscriptName": "ChivoMono-Bold", + "category": "monospace", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Chivo Mono", + "fullName": "Chivo Mono ExtraBold", + "postscriptName": "ChivoMono-ExtraBold", + "category": "monospace", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Chivo Mono", + "fullName": "Chivo Mono Black", + "postscriptName": "ChivoMono-Black", + "category": "monospace", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Chivo Mono", + "fullName": "Chivo Mono Regular", + "postscriptName": "ChivoMono-Regular", + "category": "monospace", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "italic": { + "familyName": "Chivo Mono", + "fullName": "Chivo Mono Italic", + "postscriptName": "ChivoMono-Italic", + "category": "monospace", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900italic": { + "familyName": "Chivo Mono", + "fullName": "Chivo Mono Black Italic", + "postscriptName": "ChivoMono-BlackItalic", + "category": "monospace", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800italic": { + "familyName": "Chivo Mono", + "fullName": "Chivo Mono ExtraBold Italic", + "postscriptName": "ChivoMono-ExtraBoldItalic", + "category": "monospace", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700italic": { + "familyName": "Chivo Mono", + "fullName": "Chivo Mono Bold Italic", + "postscriptName": "ChivoMono-BoldItalic", + "category": "monospace", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600italic": { + "familyName": "Chivo Mono", + "fullName": "Chivo Mono SemiBold Italic", + "postscriptName": "ChivoMono-SemiBoldItalic", + "category": "monospace", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500italic": { + "familyName": "Chivo Mono", + "fullName": "Chivo Mono Medium Italic", + "postscriptName": "ChivoMono-MediumItalic", + "category": "monospace", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300italic": { + "familyName": "Chivo Mono", + "fullName": "Chivo Mono Light Italic", + "postscriptName": "ChivoMono-LightItalic", + "category": "monospace", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200italic": { + "familyName": "Chivo Mono", + "fullName": "Chivo Mono ExtraLight Italic", + "postscriptName": "ChivoMono-ExtraLightItalic", + "category": "monospace", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "100italic": { + "familyName": "Chivo Mono", + "fullName": "Chivo Mono Thin Italic", + "postscriptName": "ChivoMono-ThinItalic", + "category": "monospace", + "capHeight": 686, + "ascent": 940, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "chocolateClassicalSans": { + "familyName": "Chocolate Classical Sans", + "fullName": "Chocolate Classical Sans Regular", + "postscriptName": "ChocolateClassicalSans-Regular", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Chocolate Classical Sans", + "fullName": "Chocolate Classical Sans Regular", + "postscriptName": "ChocolateClassicalSans-Regular", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "chokokutai": { + "familyName": "Chokokutai", + "fullName": "Chokokutai Regular", + "postscriptName": "Chokokutai-Regular", + "category": "display", + "capHeight": 774, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 530, + "subsets": { + "latin": { + "xWidthAvg": 530 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Chokokutai", + "fullName": "Chokokutai Regular", + "postscriptName": "Chokokutai-Regular", + "category": "display", + "capHeight": 774, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 530, + "subsets": { + "latin": { + "xWidthAvg": 530 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "chonburi": { + "familyName": "Chonburi", + "fullName": "Chonburi", + "postscriptName": "Chonburi-Regular", + "category": "display", + "capHeight": 714, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 568, + "subsets": { + "latin": { + "xWidthAvg": 568 + }, + "thai": { + "xWidthAvg": 684 + } + }, + "variants": { + "regular": { + "familyName": "Chonburi", + "fullName": "Chonburi", + "postscriptName": "Chonburi-Regular", + "category": "display", + "capHeight": 714, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 568, + "subsets": { + "latin": { + "xWidthAvg": 568 + }, + "thai": { + "xWidthAvg": 684 + } + } + } + } + }, + "cinzel": { + "familyName": "Cinzel", + "fullName": "Cinzel Regular", + "postscriptName": "Cinzel-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 976, + "descent": -372, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 556, + "subsets": { + "latin": { + "xWidthAvg": 556 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "500": { + "familyName": "Cinzel", + "fullName": "Cinzel Medium", + "postscriptName": "Cinzel-Medium", + "category": "serif", + "capHeight": 700, + "ascent": 976, + "descent": -372, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 559, + "subsets": { + "latin": { + "xWidthAvg": 559 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Cinzel", + "fullName": "Cinzel SemiBold", + "postscriptName": "Cinzel-SemiBold", + "category": "serif", + "capHeight": 700, + "ascent": 976, + "descent": -372, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 563, + "subsets": { + "latin": { + "xWidthAvg": 563 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Cinzel", + "fullName": "Cinzel Bold", + "postscriptName": "Cinzel-Bold", + "category": "serif", + "capHeight": 700, + "ascent": 976, + "descent": -372, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 567, + "subsets": { + "latin": { + "xWidthAvg": 567 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Cinzel", + "fullName": "Cinzel ExtraBold", + "postscriptName": "Cinzel-ExtraBold", + "category": "serif", + "capHeight": 700, + "ascent": 976, + "descent": -372, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 571, + "subsets": { + "latin": { + "xWidthAvg": 571 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "Cinzel", + "fullName": "Cinzel Black", + "postscriptName": "Cinzel-Black", + "category": "serif", + "capHeight": 700, + "ascent": 976, + "descent": -372, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 574, + "subsets": { + "latin": { + "xWidthAvg": 574 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Cinzel", + "fullName": "Cinzel Regular", + "postscriptName": "Cinzel-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 976, + "descent": -372, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 556, + "subsets": { + "latin": { + "xWidthAvg": 556 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "cinzelDecorative": { + "familyName": "Cinzel Decorative", + "fullName": "Cinzel Decorative Regular", + "postscriptName": "CinzelDecorative-Regular", + "category": "display", + "capHeight": 700, + "ascent": 976, + "descent": -372, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 714, + "xWidthAvg": 589, + "subsets": { + "latin": { + "xWidthAvg": 589 + }, + "thai": { + "xWidthAvg": 250 + } + }, + "variants": { + "700": { + "familyName": "Cinzel Decorative", + "fullName": "Cinzel Decorative Bold", + "postscriptName": "CinzelDecorative-Bold", + "category": "display", + "capHeight": 700, + "ascent": 976, + "descent": -372, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 714, + "xWidthAvg": 626, + "subsets": { + "latin": { + "xWidthAvg": 626 + }, + "thai": { + "xWidthAvg": 250 + } + } + }, + "900": { + "familyName": "Cinzel Decorative", + "fullName": "Cinzel Decorative Black", + "postscriptName": "CinzelDecorative-Black", + "category": "display", + "capHeight": 700, + "ascent": 976, + "descent": -372, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 714, + "xWidthAvg": 651, + "subsets": { + "latin": { + "xWidthAvg": 651 + }, + "thai": { + "xWidthAvg": 250 + } + } + }, + "regular": { + "familyName": "Cinzel Decorative", + "fullName": "Cinzel Decorative Regular", + "postscriptName": "CinzelDecorative-Regular", + "category": "display", + "capHeight": 700, + "ascent": 976, + "descent": -372, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 714, + "xWidthAvg": 589, + "subsets": { + "latin": { + "xWidthAvg": 589 + }, + "thai": { + "xWidthAvg": 250 + } + } + } + } + }, + "clickerScript": { + "familyName": "Clicker Script", + "fullName": "Clicker Script", + "postscriptName": "ClickerScript-Regular", + "category": "handwriting", + "capHeight": 1358, + "ascent": 1898, + "descent": -807, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 621, + "xWidthAvg": 643, + "subsets": { + "latin": { + "xWidthAvg": 643 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "Clicker Script", + "fullName": "Clicker Script", + "postscriptName": "ClickerScript-Regular", + "category": "handwriting", + "capHeight": 1358, + "ascent": 1898, + "descent": -807, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 621, + "xWidthAvg": 643, + "subsets": { + "latin": { + "xWidthAvg": 643 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "climateCrisis": { + "familyName": "Climate Crisis", + "fullName": "Climate Crisis Regular", + "postscriptName": "ClimateCrisis-Regular", + "category": "display", + "capHeight": 750, + "ascent": 1070, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 620, + "xWidthAvg": 705, + "subsets": { + "latin": { + "xWidthAvg": 705 + }, + "thai": { + "xWidthAvg": 791 + } + }, + "variants": { + "regular": { + "familyName": "Climate Crisis", + "fullName": "Climate Crisis Regular", + "postscriptName": "ClimateCrisis-Regular", + "category": "display", + "capHeight": 750, + "ascent": 1070, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 620, + "xWidthAvg": 705, + "subsets": { + "latin": { + "xWidthAvg": 705 + }, + "thai": { + "xWidthAvg": 791 + } + } + } + } + }, + "coda": { + "familyName": "Coda", + "fullName": "Coda Regular", + "postscriptName": "Coda-Regular", + "category": "display", + "ascent": 2124, + "descent": -784, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 907, + "subsets": { + "latin": { + "xWidthAvg": 907 + }, + "thai": { + "xWidthAvg": 467 + } + }, + "variants": { + "800": { + "familyName": "Coda", + "fullName": "Coda ExtraBold", + "postscriptName": "Coda-ExtraBold", + "category": "display", + "ascent": 2124, + "descent": -784, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 1160, + "subsets": { + "latin": { + "xWidthAvg": 1160 + }, + "thai": { + "xWidthAvg": 226 + } + } + }, + "regular": { + "familyName": "Coda", + "fullName": "Coda Regular", + "postscriptName": "Coda-Regular", + "category": "display", + "ascent": 2124, + "descent": -784, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 907, + "subsets": { + "latin": { + "xWidthAvg": 907 + }, + "thai": { + "xWidthAvg": 467 + } + } + } + } + }, + "codystar": { + "familyName": "Codystar", + "fullName": "Codystar", + "postscriptName": "Codystar", + "category": "display", + "capHeight": 761, + "ascent": 953, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 753, + "xWidthAvg": 613, + "subsets": { + "latin": { + "xWidthAvg": 613 + }, + "thai": { + "xWidthAvg": 399 + } + }, + "variants": { + "300": { + "familyName": "Codystar", + "fullName": "Codystar Light", + "postscriptName": "Codystar-Light", + "category": "display", + "capHeight": 757, + "ascent": 953, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 748, + "xWidthAvg": 613, + "subsets": { + "latin": { + "xWidthAvg": 613 + }, + "thai": { + "xWidthAvg": 399 + } + } + }, + "regular": { + "familyName": "Codystar", + "fullName": "Codystar", + "postscriptName": "Codystar", + "category": "display", + "capHeight": 761, + "ascent": 953, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 753, + "xWidthAvg": 613, + "subsets": { + "latin": { + "xWidthAvg": 613 + }, + "thai": { + "xWidthAvg": 399 + } + } + } + } + }, + "coiny": { + "familyName": "Coiny", + "fullName": "Coiny Regular", + "postscriptName": "Coiny-Regular", + "category": "display", + "ascent": 750, + "descent": 250, + "lineGap": 600, + "unitsPerEm": 1000, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 1074 + } + }, + "variants": { + "regular": { + "familyName": "Coiny", + "fullName": "Coiny Regular", + "postscriptName": "Coiny-Regular", + "category": "display", + "ascent": 750, + "descent": 250, + "lineGap": 600, + "unitsPerEm": 1000, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 1074 + } + } + } + } + }, + "combo": { + "familyName": "Combo", + "fullName": "Combo", + "postscriptName": "Combo-Regular", + "category": "display", + "capHeight": 670, + "ascent": 907, + "descent": -269, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 300 + } + }, + "variants": { + "regular": { + "familyName": "Combo", + "fullName": "Combo", + "postscriptName": "Combo-Regular", + "category": "display", + "capHeight": 670, + "ascent": 907, + "descent": -269, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 300 + } + } + } + } + }, + "comfortaa": { + "familyName": "Comfortaa", + "fullName": "Comfortaa Regular", + "postscriptName": "Comfortaa-Regular", + "category": "display", + "capHeight": 781, + "ascent": 881, + "descent": -234, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 547, + "xWidthAvg": 524, + "subsets": { + "latin": { + "xWidthAvg": 524 + }, + "thai": { + "xWidthAvg": 625 + } + }, + "variants": { + "300": { + "familyName": "Comfortaa", + "fullName": "Comfortaa Light", + "postscriptName": "Comfortaa-Light", + "category": "display", + "capHeight": 781, + "ascent": 881, + "descent": -234, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 547, + "xWidthAvg": 521, + "subsets": { + "latin": { + "xWidthAvg": 521 + }, + "thai": { + "xWidthAvg": 625 + } + } + }, + "500": { + "familyName": "Comfortaa", + "fullName": "Comfortaa Medium", + "postscriptName": "Comfortaa-Medium", + "category": "display", + "capHeight": 781, + "ascent": 881, + "descent": -234, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 547, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 625 + } + } + }, + "600": { + "familyName": "Comfortaa", + "fullName": "Comfortaa SemiBold", + "postscriptName": "Comfortaa-SemiBold", + "category": "display", + "capHeight": 781, + "ascent": 881, + "descent": -234, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 547, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 625 + } + } + }, + "700": { + "familyName": "Comfortaa", + "fullName": "Comfortaa Bold", + "postscriptName": "Comfortaa-Bold", + "category": "display", + "capHeight": 781, + "ascent": 881, + "descent": -234, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 547, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 625 + } + } + }, + "regular": { + "familyName": "Comfortaa", + "fullName": "Comfortaa Regular", + "postscriptName": "Comfortaa-Regular", + "category": "display", + "capHeight": 781, + "ascent": 881, + "descent": -234, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 547, + "xWidthAvg": 524, + "subsets": { + "latin": { + "xWidthAvg": 524 + }, + "thai": { + "xWidthAvg": 625 + } + } + } + } + }, + "comforter": { + "familyName": "Comforter", + "fullName": "Comforter Regular", + "postscriptName": "Comforter-Regular", + "category": "handwriting", + "capHeight": 750, + "ascent": 930, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 296, + "subsets": { + "latin": { + "xWidthAvg": 296 + }, + "thai": { + "xWidthAvg": 523 + } + }, + "variants": { + "regular": { + "familyName": "Comforter", + "fullName": "Comforter Regular", + "postscriptName": "Comforter-Regular", + "category": "handwriting", + "capHeight": 750, + "ascent": 930, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 296, + "subsets": { + "latin": { + "xWidthAvg": 296 + }, + "thai": { + "xWidthAvg": 523 + } + } + } + } + }, + "comforterBrush": { + "familyName": "Comforter Brush", + "fullName": "Comforter Brush Regular", + "postscriptName": "ComforterBrush-Regular", + "category": "handwriting", + "capHeight": 750, + "ascent": 930, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 295, + "subsets": { + "latin": { + "xWidthAvg": 295 + }, + "thai": { + "xWidthAvg": 523 + } + }, + "variants": { + "regular": { + "familyName": "Comforter Brush", + "fullName": "Comforter Brush Regular", + "postscriptName": "ComforterBrush-Regular", + "category": "handwriting", + "capHeight": 750, + "ascent": 930, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 295, + "subsets": { + "latin": { + "xWidthAvg": 295 + }, + "thai": { + "xWidthAvg": 523 + } + } + } + } + }, + "comicNeue": { + "familyName": "Comic Neue", + "fullName": "Comic Neue Regular", + "postscriptName": "ComicNeue-Regular", + "category": "handwriting", + "capHeight": 670, + "ascent": 900, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 504 + } + }, + "variants": { + "300": { + "familyName": "Comic Neue", + "fullName": "Comic Neue Light", + "postscriptName": "ComicNeue-Light", + "category": "handwriting", + "capHeight": 670, + "ascent": 900, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 497 + } + } + }, + "700": { + "familyName": "Comic Neue", + "fullName": "Comic Neue Bold", + "postscriptName": "ComicNeue-Bold", + "category": "handwriting", + "capHeight": 670, + "ascent": 900, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 526 + } + } + }, + "regular": { + "familyName": "Comic Neue", + "fullName": "Comic Neue Regular", + "postscriptName": "ComicNeue-Regular", + "category": "handwriting", + "capHeight": 670, + "ascent": 900, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 504 + } + } + }, + "italic": { + "familyName": "Comic Neue", + "fullName": "Comic Neue Italic", + "postscriptName": "ComicNeue-Italic", + "category": "handwriting", + "capHeight": 670, + "ascent": 900, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 436, + "subsets": { + "latin": { + "xWidthAvg": 436 + }, + "thai": { + "xWidthAvg": 503 + } + } + }, + "700italic": { + "familyName": "Comic Neue", + "fullName": "Comic Neue Bold Italic", + "postscriptName": "ComicNeue-BoldItalic", + "category": "handwriting", + "capHeight": 670, + "ascent": 900, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 526 + } + } + }, + "300italic": { + "familyName": "Comic Neue", + "fullName": "Comic Neue Light Italic", + "postscriptName": "ComicNeue-LightItalic", + "category": "handwriting", + "capHeight": 670, + "ascent": 900, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 608 + } + } + } + } + }, + "comingSoon": { + "familyName": "Coming Soon", + "fullName": "Coming Soon Regular", + "postscriptName": "ComingSoon-Regular", + "category": "handwriting", + "capHeight": 763, + "ascent": 1053, + "descent": -498, + "lineGap": 21, + "unitsPerEm": 1024, + "xHeight": 569, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 340 + } + }, + "variants": { + "regular": { + "familyName": "Coming Soon", + "fullName": "Coming Soon Regular", + "postscriptName": "ComingSoon-Regular", + "category": "handwriting", + "capHeight": 763, + "ascent": 1053, + "descent": -498, + "lineGap": 21, + "unitsPerEm": 1024, + "xHeight": 569, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 340 + } + } + } + } + }, + "comme": { + "familyName": "Comme", + "fullName": "Comme Regular", + "postscriptName": "Comme-Regular", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1957, + "descent": -501, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 967, + "subsets": { + "latin": { + "xWidthAvg": 967 + }, + "thai": { + "xWidthAvg": 1312 + } + }, + "variants": { + "100": { + "familyName": "Comme", + "fullName": "Comme Thin", + "postscriptName": "Comme-Thin", + "category": "sans-serif", + "capHeight": 1455, + "ascent": 1957, + "descent": -501, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 930, + "subsets": { + "latin": { + "xWidthAvg": 930 + }, + "thai": { + "xWidthAvg": 1116 + } + } + }, + "200": { + "familyName": "Comme", + "fullName": "Comme ExtraLight", + "postscriptName": "Comme-ExtraLight", + "category": "sans-serif", + "capHeight": 1455, + "ascent": 1957, + "descent": -501, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 943, + "subsets": { + "latin": { + "xWidthAvg": 943 + }, + "thai": { + "xWidthAvg": 1181 + } + } + }, + "300": { + "familyName": "Comme", + "fullName": "Comme Light", + "postscriptName": "Comme-Light", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1957, + "descent": -501, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 955, + "subsets": { + "latin": { + "xWidthAvg": 955 + }, + "thai": { + "xWidthAvg": 1247 + } + } + }, + "500": { + "familyName": "Comme", + "fullName": "Comme Medium", + "postscriptName": "Comme-Medium", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1957, + "descent": -501, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 986, + "subsets": { + "latin": { + "xWidthAvg": 986 + }, + "thai": { + "xWidthAvg": 1374 + } + } + }, + "600": { + "familyName": "Comme", + "fullName": "Comme SemiBold", + "postscriptName": "Comme-SemiBold", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1957, + "descent": -501, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 1004, + "subsets": { + "latin": { + "xWidthAvg": 1004 + }, + "thai": { + "xWidthAvg": 1437 + } + } + }, + "700": { + "familyName": "Comme", + "fullName": "Comme Bold", + "postscriptName": "Comme-Bold", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1957, + "descent": -501, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 1023, + "subsets": { + "latin": { + "xWidthAvg": 1023 + }, + "thai": { + "xWidthAvg": 1499 + } + } + }, + "800": { + "familyName": "Comme", + "fullName": "Comme ExtraBold", + "postscriptName": "Comme-ExtraBold", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1957, + "descent": -501, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 1041, + "subsets": { + "latin": { + "xWidthAvg": 1041 + }, + "thai": { + "xWidthAvg": 1562 + } + } + }, + "900": { + "familyName": "Comme", + "fullName": "Comme Black", + "postscriptName": "Comme-Black", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1957, + "descent": -501, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 1060, + "subsets": { + "latin": { + "xWidthAvg": 1060 + }, + "thai": { + "xWidthAvg": 1624 + } + } + }, + "regular": { + "familyName": "Comme", + "fullName": "Comme Regular", + "postscriptName": "Comme-Regular", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1957, + "descent": -501, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 967, + "subsets": { + "latin": { + "xWidthAvg": 967 + }, + "thai": { + "xWidthAvg": 1312 + } + } + } + } + }, + "commissioner": { + "familyName": "Commissioner", + "fullName": "Commissioner Regular", + "postscriptName": "Commissioner-Regular", + "category": "sans-serif", + "capHeight": 1426, + "ascent": 2034, + "descent": -412, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 992, + "xWidthAvg": 901, + "subsets": { + "latin": { + "xWidthAvg": 901 + }, + "thai": { + "xWidthAvg": 1254 + } + }, + "variants": { + "100": { + "familyName": "Commissioner", + "fullName": "Commissioner Thin", + "postscriptName": "Commissioner-Thin", + "category": "sans-serif", + "capHeight": 1426, + "ascent": 2034, + "descent": -412, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 988, + "xWidthAvg": 888, + "subsets": { + "latin": { + "xWidthAvg": 888 + }, + "thai": { + "xWidthAvg": 1270 + } + } + }, + "200": { + "familyName": "Commissioner", + "fullName": "Commissioner ExtraLight", + "postscriptName": "Commissioner-ExtraLight", + "category": "sans-serif", + "capHeight": 1426, + "ascent": 2034, + "descent": -412, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 989, + "xWidthAvg": 892, + "subsets": { + "latin": { + "xWidthAvg": 892 + }, + "thai": { + "xWidthAvg": 1265 + } + } + }, + "300": { + "familyName": "Commissioner", + "fullName": "Commissioner Light", + "postscriptName": "Commissioner-Light", + "category": "sans-serif", + "capHeight": 1426, + "ascent": 2034, + "descent": -412, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 991, + "xWidthAvg": 896, + "subsets": { + "latin": { + "xWidthAvg": 896 + }, + "thai": { + "xWidthAvg": 1259 + } + } + }, + "500": { + "familyName": "Commissioner", + "fullName": "Commissioner Medium", + "postscriptName": "Commissioner-Medium", + "category": "sans-serif", + "capHeight": 1426, + "ascent": 2034, + "descent": -412, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 994, + "xWidthAvg": 907, + "subsets": { + "latin": { + "xWidthAvg": 907 + }, + "thai": { + "xWidthAvg": 1246 + } + } + }, + "600": { + "familyName": "Commissioner", + "fullName": "Commissioner SemiBold", + "postscriptName": "Commissioner-SemiBold", + "category": "sans-serif", + "capHeight": 1426, + "ascent": 2034, + "descent": -412, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 996, + "xWidthAvg": 912, + "subsets": { + "latin": { + "xWidthAvg": 912 + }, + "thai": { + "xWidthAvg": 1240 + } + } + }, + "700": { + "familyName": "Commissioner", + "fullName": "Commissioner Bold", + "postscriptName": "Commissioner-Bold", + "category": "sans-serif", + "capHeight": 1426, + "ascent": 2034, + "descent": -412, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 998, + "xWidthAvg": 917, + "subsets": { + "latin": { + "xWidthAvg": 917 + }, + "thai": { + "xWidthAvg": 1233 + } + } + }, + "800": { + "familyName": "Commissioner", + "fullName": "Commissioner ExtraBold", + "postscriptName": "Commissioner-ExtraBold", + "category": "sans-serif", + "capHeight": 1426, + "ascent": 2034, + "descent": -412, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1001, + "xWidthAvg": 925, + "subsets": { + "latin": { + "xWidthAvg": 925 + }, + "thai": { + "xWidthAvg": 1221 + } + } + }, + "900": { + "familyName": "Commissioner", + "fullName": "Commissioner Black", + "postscriptName": "Commissioner-Black", + "category": "sans-serif", + "capHeight": 1426, + "ascent": 2034, + "descent": -412, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1004, + "xWidthAvg": 933, + "subsets": { + "latin": { + "xWidthAvg": 933 + }, + "thai": { + "xWidthAvg": 1210 + } + } + }, + "regular": { + "familyName": "Commissioner", + "fullName": "Commissioner Regular", + "postscriptName": "Commissioner-Regular", + "category": "sans-serif", + "capHeight": 1426, + "ascent": 2034, + "descent": -412, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 992, + "xWidthAvg": 901, + "subsets": { + "latin": { + "xWidthAvg": 901 + }, + "thai": { + "xWidthAvg": 1254 + } + } + } + } + }, + "concertOne": { + "familyName": "Concert One", + "fullName": "Concert One", + "postscriptName": "ConcertOne-Regular", + "category": "display", + "capHeight": 1400, + "ascent": 2005, + "descent": -410, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1004, + "xWidthAvg": 927, + "subsets": { + "latin": { + "xWidthAvg": 927 + }, + "thai": { + "xWidthAvg": 1304 + } + }, + "variants": { + "regular": { + "familyName": "Concert One", + "fullName": "Concert One", + "postscriptName": "ConcertOne-Regular", + "category": "display", + "capHeight": 1400, + "ascent": 2005, + "descent": -410, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1004, + "xWidthAvg": 927, + "subsets": { + "latin": { + "xWidthAvg": 927 + }, + "thai": { + "xWidthAvg": 1304 + } + } + } + } + }, + "condiment": { + "familyName": "Condiment", + "fullName": "Condiment", + "postscriptName": "Condiment-Regular", + "category": "handwriting", + "capHeight": 327, + "ascent": 882, + "descent": -641, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 317, + "xWidthAvg": 347, + "subsets": { + "latin": { + "xWidthAvg": 347 + }, + "thai": { + "xWidthAvg": 180 + } + }, + "variants": { + "regular": { + "familyName": "Condiment", + "fullName": "Condiment", + "postscriptName": "Condiment-Regular", + "category": "handwriting", + "capHeight": 327, + "ascent": 882, + "descent": -641, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 317, + "xWidthAvg": 347, + "subsets": { + "latin": { + "xWidthAvg": 347 + }, + "thai": { + "xWidthAvg": 180 + } + } + } + } + }, + "content": { + "familyName": "Content", + "fullName": "Content", + "postscriptName": "Content", + "category": "display", + "capHeight": 0, + "ascent": 2500, + "descent": -1200, + "lineGap": 67, + "unitsPerEm": 2048, + "xHeight": 0, + "xWidthAvg": 1359, + "subsets": { + "latin": { + "xWidthAvg": 1359 + }, + "thai": { + "xWidthAvg": 1536 + } + }, + "variants": { + "700": { + "familyName": "Content", + "fullName": "Content Bold", + "postscriptName": "Content-Bold", + "category": "display", + "capHeight": 0, + "ascent": 2500, + "descent": -1200, + "lineGap": 67, + "unitsPerEm": 2048, + "xHeight": 0, + "xWidthAvg": 1359, + "subsets": { + "latin": { + "xWidthAvg": 1359 + }, + "thai": { + "xWidthAvg": 1536 + } + } + }, + "regular": { + "familyName": "Content", + "fullName": "Content", + "postscriptName": "Content", + "category": "display", + "capHeight": 0, + "ascent": 2500, + "descent": -1200, + "lineGap": 67, + "unitsPerEm": 2048, + "xHeight": 0, + "xWidthAvg": 1359, + "subsets": { + "latin": { + "xWidthAvg": 1359 + }, + "thai": { + "xWidthAvg": 1536 + } + } + } + } + }, + "contrailOne": { + "familyName": "Contrail One", + "fullName": "Contrail One", + "postscriptName": "ContrailOne-Regular", + "category": "display", + "capHeight": 421, + "ascent": 1939, + "descent": -625, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 255, + "xWidthAvg": 836, + "subsets": { + "latin": { + "xWidthAvg": 836 + }, + "thai": { + "xWidthAvg": 420 + } + }, + "variants": { + "regular": { + "familyName": "Contrail One", + "fullName": "Contrail One", + "postscriptName": "ContrailOne-Regular", + "category": "display", + "capHeight": 421, + "ascent": 1939, + "descent": -625, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 255, + "xWidthAvg": 836, + "subsets": { + "latin": { + "xWidthAvg": 836 + }, + "thai": { + "xWidthAvg": 420 + } + } + } + } + }, + "convergence": { + "familyName": "Convergence", + "fullName": "Convergence-Regular", + "postscriptName": "Convergence-Regular", + "category": "sans-serif", + "capHeight": 727, + "ascent": 943, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 541, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Convergence", + "fullName": "Convergence-Regular", + "postscriptName": "Convergence-Regular", + "category": "sans-serif", + "capHeight": 727, + "ascent": 943, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 541, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "cookie": { + "familyName": "Cookie", + "fullName": "Cookie-Regular", + "postscriptName": "Cookie-Regular", + "category": "handwriting", + "capHeight": 312, + "ascent": 789, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 115, + "xWidthAvg": 296, + "subsets": { + "latin": { + "xWidthAvg": 296 + }, + "thai": { + "xWidthAvg": 355 + } + }, + "variants": { + "regular": { + "familyName": "Cookie", + "fullName": "Cookie-Regular", + "postscriptName": "Cookie-Regular", + "category": "handwriting", + "capHeight": 312, + "ascent": 789, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 115, + "xWidthAvg": 296, + "subsets": { + "latin": { + "xWidthAvg": 296 + }, + "thai": { + "xWidthAvg": 355 + } + } + } + } + }, + "copse": { + "familyName": "Copse", + "fullName": "Copse", + "postscriptName": "Copse", + "category": "serif", + "capHeight": 1505, + "ascent": 1991, + "descent": -483, + "lineGap": 57, + "unitsPerEm": 2048, + "xHeight": 1001, + "xWidthAvg": 936, + "subsets": { + "latin": { + "xWidthAvg": 936 + }, + "thai": { + "xWidthAvg": 1333 + } + }, + "variants": { + "regular": { + "familyName": "Copse", + "fullName": "Copse", + "postscriptName": "Copse", + "category": "serif", + "capHeight": 1505, + "ascent": 1991, + "descent": -483, + "lineGap": 57, + "unitsPerEm": 2048, + "xHeight": 1001, + "xWidthAvg": 936, + "subsets": { + "latin": { + "xWidthAvg": 936 + }, + "thai": { + "xWidthAvg": 1333 + } + } + } + } + }, + "corben": { + "familyName": "Corben", + "fullName": "Corben", + "postscriptName": "Corben-Regular", + "category": "display", + "capHeight": 1404, + "ascent": 2826, + "descent": -969, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 958, + "xWidthAvg": 949, + "subsets": { + "latin": { + "xWidthAvg": 949 + }, + "thai": { + "xWidthAvg": 748 + } + }, + "variants": { + "700": { + "familyName": "Corben", + "fullName": "Corben Bold", + "postscriptName": "Corben-Bold", + "category": "display", + "capHeight": 1593, + "ascent": 2826, + "descent": -969, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1296, + "xWidthAvg": 1336, + "subsets": { + "latin": { + "xWidthAvg": 1336 + }, + "thai": { + "xWidthAvg": 0 + } + } + }, + "regular": { + "familyName": "Corben", + "fullName": "Corben", + "postscriptName": "Corben-Regular", + "category": "display", + "capHeight": 1404, + "ascent": 2826, + "descent": -969, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 958, + "xWidthAvg": 949, + "subsets": { + "latin": { + "xWidthAvg": 949 + }, + "thai": { + "xWidthAvg": 748 + } + } + } + } + }, + "corinthia": { + "familyName": "Corinthia", + "fullName": "Corinthia Regular", + "postscriptName": "Corinthia-Regular", + "category": "handwriting", + "capHeight": 535, + "ascent": 760, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 240, + "xWidthAvg": 255, + "subsets": { + "latin": { + "xWidthAvg": 255 + }, + "thai": { + "xWidthAvg": 531 + } + }, + "variants": { + "700": { + "familyName": "Corinthia", + "fullName": "Corinthia Bold", + "postscriptName": "Corinthia-Bold", + "category": "handwriting", + "capHeight": 545, + "ascent": 760, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 246, + "xWidthAvg": 327, + "subsets": { + "latin": { + "xWidthAvg": 327 + }, + "thai": { + "xWidthAvg": 531 + } + } + }, + "regular": { + "familyName": "Corinthia", + "fullName": "Corinthia Regular", + "postscriptName": "Corinthia-Regular", + "category": "handwriting", + "capHeight": 535, + "ascent": 760, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 240, + "xWidthAvg": 255, + "subsets": { + "latin": { + "xWidthAvg": 255 + }, + "thai": { + "xWidthAvg": 531 + } + } + } + } + }, + "cormorant": { + "familyName": "Cormorant", + "fullName": "Cormorant Regular", + "postscriptName": "Cormorant-Regular", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 393, + "subsets": { + "latin": { + "xWidthAvg": 393 + }, + "thai": { + "xWidthAvg": 501 + } + }, + "variants": { + "300": { + "familyName": "Cormorant", + "fullName": "Cormorant Light", + "postscriptName": "Cormorant-Light", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 392, + "subsets": { + "latin": { + "xWidthAvg": 392 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "500": { + "familyName": "Cormorant", + "fullName": "Cormorant Medium", + "postscriptName": "Cormorant-Medium", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 395, + "subsets": { + "latin": { + "xWidthAvg": 395 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "600": { + "familyName": "Cormorant", + "fullName": "Cormorant SemiBold", + "postscriptName": "Cormorant-SemiBold", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 396, + "subsets": { + "latin": { + "xWidthAvg": 396 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "700": { + "familyName": "Cormorant", + "fullName": "Cormorant Bold", + "postscriptName": "Cormorant-Bold", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 398, + "subsets": { + "latin": { + "xWidthAvg": 398 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "regular": { + "familyName": "Cormorant", + "fullName": "Cormorant Regular", + "postscriptName": "Cormorant-Regular", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 393, + "subsets": { + "latin": { + "xWidthAvg": 393 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "italic": { + "familyName": "Cormorant", + "fullName": "Cormorant Italic", + "postscriptName": "Cormorant-Italic", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 356, + "subsets": { + "latin": { + "xWidthAvg": 356 + }, + "thai": { + "xWidthAvg": 450 + } + } + }, + "700italic": { + "familyName": "Cormorant", + "fullName": "Cormorant Bold Italic", + "postscriptName": "Cormorant-BoldItalic", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 364, + "subsets": { + "latin": { + "xWidthAvg": 364 + }, + "thai": { + "xWidthAvg": 450 + } + } + }, + "600italic": { + "familyName": "Cormorant", + "fullName": "Cormorant SemiBold Italic", + "postscriptName": "Cormorant-SemiBoldItalic", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 362, + "subsets": { + "latin": { + "xWidthAvg": 362 + }, + "thai": { + "xWidthAvg": 450 + } + } + }, + "500italic": { + "familyName": "Cormorant", + "fullName": "Cormorant Medium Italic", + "postscriptName": "Cormorant-MediumItalic", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 359, + "subsets": { + "latin": { + "xWidthAvg": 359 + }, + "thai": { + "xWidthAvg": 450 + } + } + }, + "300italic": { + "familyName": "Cormorant", + "fullName": "Cormorant Light Italic", + "postscriptName": "Cormorant-LightItalic", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 354, + "subsets": { + "latin": { + "xWidthAvg": 354 + }, + "thai": { + "xWidthAvg": 450 + } + } + } + } + }, + "cormorantGaramond": { + "familyName": "Cormorant Garamond", + "fullName": "Cormorant Garamond Regular", + "postscriptName": "CormorantGaramond-Regular", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 394, + "subsets": { + "latin": { + "xWidthAvg": 394 + }, + "thai": { + "xWidthAvg": 501 + } + }, + "variants": { + "300": { + "familyName": "Cormorant Garamond", + "fullName": "Cormorant Garamond Light", + "postscriptName": "CormorantGaramond-Light", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 392, + "subsets": { + "latin": { + "xWidthAvg": 392 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "500": { + "familyName": "Cormorant Garamond", + "fullName": "Cormorant Garamond Medium", + "postscriptName": "CormorantGaramond-Medium", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 395, + "subsets": { + "latin": { + "xWidthAvg": 395 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "600": { + "familyName": "Cormorant Garamond", + "fullName": "Cormorant Garamond SemiBold", + "postscriptName": "CormorantGaramond-SemiBold", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 396, + "subsets": { + "latin": { + "xWidthAvg": 396 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "700": { + "familyName": "Cormorant Garamond", + "fullName": "Cormorant Garamond Bold", + "postscriptName": "CormorantGaramond-Bold", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 398, + "subsets": { + "latin": { + "xWidthAvg": 398 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "regular": { + "familyName": "Cormorant Garamond", + "fullName": "Cormorant Garamond Regular", + "postscriptName": "CormorantGaramond-Regular", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 394, + "subsets": { + "latin": { + "xWidthAvg": 394 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "italic": { + "familyName": "Cormorant Garamond", + "fullName": "Cormorant Garamond Italic", + "postscriptName": "CormorantGaramond-Italic", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 356, + "subsets": { + "latin": { + "xWidthAvg": 356 + }, + "thai": { + "xWidthAvg": 450 + } + } + }, + "700italic": { + "familyName": "Cormorant Garamond", + "fullName": "Cormorant Garamond Bold Italic", + "postscriptName": "CormorantGaramond-BoldItalic", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 364, + "subsets": { + "latin": { + "xWidthAvg": 364 + }, + "thai": { + "xWidthAvg": 450 + } + } + }, + "600italic": { + "familyName": "Cormorant Garamond", + "fullName": "Cormorant Garamond SemiBold Italic", + "postscriptName": "CormorantGaramond-SemiBoldItalic", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 362, + "subsets": { + "latin": { + "xWidthAvg": 362 + }, + "thai": { + "xWidthAvg": 450 + } + } + }, + "500italic": { + "familyName": "Cormorant Garamond", + "fullName": "Cormorant Garamond Medium Italic", + "postscriptName": "CormorantGaramond-MediumItalic", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 359, + "subsets": { + "latin": { + "xWidthAvg": 359 + }, + "thai": { + "xWidthAvg": 450 + } + } + }, + "300italic": { + "familyName": "Cormorant Garamond", + "fullName": "Cormorant Garamond Light Italic", + "postscriptName": "CormorantGaramond-LightItalic", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 354, + "subsets": { + "latin": { + "xWidthAvg": 354 + }, + "thai": { + "xWidthAvg": 450 + } + } + } + } + }, + "cormorantInfant": { + "familyName": "Cormorant Infant", + "fullName": "Cormorant Infant Regular", + "postscriptName": "CormorantInfant-Regular", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 400, + "subsets": { + "latin": { + "xWidthAvg": 400 + }, + "thai": { + "xWidthAvg": 501 + } + }, + "variants": { + "300": { + "familyName": "Cormorant Infant", + "fullName": "Cormorant Infant Light", + "postscriptName": "CormorantInfant-Light", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 399, + "subsets": { + "latin": { + "xWidthAvg": 399 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "500": { + "familyName": "Cormorant Infant", + "fullName": "Cormorant Infant Medium", + "postscriptName": "CormorantInfant-Medium", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "600": { + "familyName": "Cormorant Infant", + "fullName": "Cormorant Infant SemiBold", + "postscriptName": "CormorantInfant-SemiBold", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 403, + "subsets": { + "latin": { + "xWidthAvg": 403 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "700": { + "familyName": "Cormorant Infant", + "fullName": "Cormorant Infant Bold", + "postscriptName": "CormorantInfant-Bold", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 404, + "subsets": { + "latin": { + "xWidthAvg": 404 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "regular": { + "familyName": "Cormorant Infant", + "fullName": "Cormorant Infant Regular", + "postscriptName": "CormorantInfant-Regular", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 400, + "subsets": { + "latin": { + "xWidthAvg": 400 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "italic": { + "familyName": "Cormorant Infant", + "fullName": "Cormorant Infant Italic", + "postscriptName": "CormorantInfant-Italic", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 357, + "subsets": { + "latin": { + "xWidthAvg": 357 + }, + "thai": { + "xWidthAvg": 450 + } + } + }, + "700italic": { + "familyName": "Cormorant Infant", + "fullName": "Cormorant Infant Bold Italic", + "postscriptName": "CormorantInfant-BoldItalic", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 365, + "subsets": { + "latin": { + "xWidthAvg": 365 + }, + "thai": { + "xWidthAvg": 450 + } + } + }, + "600italic": { + "familyName": "Cormorant Infant", + "fullName": "Cormorant Infant SemiBold Italic", + "postscriptName": "CormorantInfant-SemiBoldItalic", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 363, + "subsets": { + "latin": { + "xWidthAvg": 363 + }, + "thai": { + "xWidthAvg": 450 + } + } + }, + "500italic": { + "familyName": "Cormorant Infant", + "fullName": "Cormorant Infant Medium Italic", + "postscriptName": "CormorantInfant-MediumItalic", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 360, + "subsets": { + "latin": { + "xWidthAvg": 360 + }, + "thai": { + "xWidthAvg": 450 + } + } + }, + "300italic": { + "familyName": "Cormorant Infant", + "fullName": "Cormorant Infant Light Italic", + "postscriptName": "CormorantInfant-LightItalic", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 356, + "subsets": { + "latin": { + "xWidthAvg": 356 + }, + "thai": { + "xWidthAvg": 450 + } + } + } + } + }, + "cormorantSC": { + "familyName": "Cormorant SC", + "fullName": "Cormorant SC Regular", + "postscriptName": "CormorantSC-Regular", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 501 + } + }, + "variants": { + "300": { + "familyName": "Cormorant SC", + "fullName": "Cormorant SC Light", + "postscriptName": "CormorantSC-Light", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "500": { + "familyName": "Cormorant SC", + "fullName": "Cormorant SC Medium", + "postscriptName": "CormorantSC-Medium", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "600": { + "familyName": "Cormorant SC", + "fullName": "Cormorant SC SemiBold", + "postscriptName": "CormorantSC-SemiBold", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "700": { + "familyName": "Cormorant SC", + "fullName": "Cormorant SC Bold", + "postscriptName": "CormorantSC-Bold", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "regular": { + "familyName": "Cormorant SC", + "fullName": "Cormorant SC Regular", + "postscriptName": "CormorantSC-Regular", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 501 + } + } + } + } + }, + "cormorantUnicase": { + "familyName": "Cormorant Unicase", + "fullName": "Cormorant Unicase Regular", + "postscriptName": "CormorantUnicase-Regular", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 501 + } + }, + "variants": { + "300": { + "familyName": "Cormorant Unicase", + "fullName": "Cormorant Unicase Light", + "postscriptName": "CormorantUnicase-Light", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "500": { + "familyName": "Cormorant Unicase", + "fullName": "Cormorant Unicase Medium", + "postscriptName": "CormorantUnicase-Medium", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "600": { + "familyName": "Cormorant Unicase", + "fullName": "Cormorant Unicase SemiBold", + "postscriptName": "CormorantUnicase-SemiBold", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "700": { + "familyName": "Cormorant Unicase", + "fullName": "Cormorant Unicase Bold", + "postscriptName": "CormorantUnicase-Bold", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "regular": { + "familyName": "Cormorant Unicase", + "fullName": "Cormorant Unicase Regular", + "postscriptName": "CormorantUnicase-Regular", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 501 + } + } + } + } + }, + "cormorantUpright": { + "familyName": "Cormorant Upright", + "fullName": "Cormorant Upright Regular", + "postscriptName": "CormorantUpright-Regular", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 379, + "subsets": { + "latin": { + "xWidthAvg": 379 + }, + "thai": { + "xWidthAvg": 501 + } + }, + "variants": { + "300": { + "familyName": "Cormorant Upright", + "fullName": "Cormorant Upright Light", + "postscriptName": "CormorantUpright-Light", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 377, + "subsets": { + "latin": { + "xWidthAvg": 377 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "500": { + "familyName": "Cormorant Upright", + "fullName": "Cormorant Upright Medium", + "postscriptName": "CormorantUpright-Medium", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 382, + "subsets": { + "latin": { + "xWidthAvg": 382 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "600": { + "familyName": "Cormorant Upright", + "fullName": "Cormorant Upright SemiBold", + "postscriptName": "CormorantUpright-SemiBold", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 385, + "subsets": { + "latin": { + "xWidthAvg": 385 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "700": { + "familyName": "Cormorant Upright", + "fullName": "Cormorant Upright Bold", + "postscriptName": "CormorantUpright-Bold", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 388, + "subsets": { + "latin": { + "xWidthAvg": 388 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "regular": { + "familyName": "Cormorant Upright", + "fullName": "Cormorant Upright Regular", + "postscriptName": "CormorantUpright-Regular", + "category": "serif", + "capHeight": 625, + "ascent": 924, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 379, + "subsets": { + "latin": { + "xWidthAvg": 379 + }, + "thai": { + "xWidthAvg": 501 + } + } + } + } + }, + "courgette": { + "familyName": "Courgette", + "fullName": "Courgette Regular", + "postscriptName": "Courgette-Regular", + "category": "handwriting", + "capHeight": 301, + "ascent": 2000, + "descent": -560, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 112, + "xWidthAvg": 920, + "subsets": { + "latin": { + "xWidthAvg": 920 + }, + "thai": { + "xWidthAvg": 1837 + } + }, + "variants": { + "regular": { + "familyName": "Courgette", + "fullName": "Courgette Regular", + "postscriptName": "Courgette-Regular", + "category": "handwriting", + "capHeight": 301, + "ascent": 2000, + "descent": -560, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 112, + "xWidthAvg": 920, + "subsets": { + "latin": { + "xWidthAvg": 920 + }, + "thai": { + "xWidthAvg": 1837 + } + } + } + } + }, + "courierNew": { + "familyName": "Courier New", + "fullName": "Courier New", + "postscriptName": "CourierNewPSMT", + "category": "monospace", + "capHeight": 1170, + "ascent": 1705, + "descent": -615, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 866, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 1229 + } + }, + "variants": { + "700": { + "familyName": "Courier New", + "fullName": "Courier New Bold", + "postscriptName": "CourierNewPS-BoldMT", + "category": "monospace", + "capHeight": 1212, + "ascent": 1705, + "descent": -615, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 908, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "regular": { + "familyName": "Courier New", + "fullName": "Courier New", + "postscriptName": "CourierNewPSMT", + "category": "monospace", + "capHeight": 1170, + "ascent": 1705, + "descent": -615, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 866, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "italic": { + "familyName": "Courier New", + "fullName": "Courier New Italic", + "postscriptName": "CourierNewPS-ItalicMT", + "category": "monospace", + "capHeight": 1170, + "ascent": 1705, + "descent": -615, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 866, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "700italic": { + "familyName": "Courier New", + "fullName": "Courier New Bold Italic", + "postscriptName": "CourierNewPS-BoldItalicMT", + "category": "monospace", + "capHeight": 1212, + "ascent": 1705, + "descent": -615, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 908, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 1229 + } + } + } + } + }, + "courierPrime": { + "familyName": "Courier Prime", + "fullName": "Courier Prime Regular", + "postscriptName": "CourierPrime-Regular", + "category": "monospace", + "capHeight": 1187, + "ascent": 1600, + "descent": -700, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 924, + "xWidthAvg": 1228, + "subsets": { + "latin": { + "xWidthAvg": 1228 + }, + "thai": { + "xWidthAvg": 1228 + } + }, + "variants": { + "700": { + "familyName": "Courier Prime", + "fullName": "Courier Prime Bold", + "postscriptName": "CourierPrime-Bold", + "category": "monospace", + "capHeight": 1187, + "ascent": 1600, + "descent": -700, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 924, + "xWidthAvg": 1228, + "subsets": { + "latin": { + "xWidthAvg": 1228 + }, + "thai": { + "xWidthAvg": 1228 + } + } + }, + "regular": { + "familyName": "Courier Prime", + "fullName": "Courier Prime Regular", + "postscriptName": "CourierPrime-Regular", + "category": "monospace", + "capHeight": 1187, + "ascent": 1600, + "descent": -700, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 924, + "xWidthAvg": 1228, + "subsets": { + "latin": { + "xWidthAvg": 1228 + }, + "thai": { + "xWidthAvg": 1228 + } + } + }, + "italic": { + "familyName": "Courier Prime", + "fullName": "Courier Prime Italic", + "postscriptName": "CourierPrime-Italic", + "category": "monospace", + "capHeight": 1187, + "ascent": 1600, + "descent": -700, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 924, + "xWidthAvg": 1228, + "subsets": { + "latin": { + "xWidthAvg": 1228 + }, + "thai": { + "xWidthAvg": 1228 + } + } + }, + "700italic": { + "familyName": "Courier Prime", + "fullName": "Courier Prime Bold Italic", + "postscriptName": "CourierPrime-BoldItalic", + "category": "monospace", + "capHeight": 1187, + "ascent": 1600, + "descent": -700, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 924, + "xWidthAvg": 1228, + "subsets": { + "latin": { + "xWidthAvg": 1228 + }, + "thai": { + "xWidthAvg": 1228 + } + } + } + } + }, + "cousine": { + "familyName": "Cousine", + "fullName": "Cousine Regular", + "postscriptName": "Cousine-Regular", + "category": "monospace", + "capHeight": 1349, + "ascent": 1705, + "descent": -615, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 1229 + } + }, + "variants": { + "700": { + "familyName": "Cousine", + "fullName": "Cousine Bold", + "postscriptName": "Cousine-Bold", + "category": "monospace", + "capHeight": 1349, + "ascent": 1705, + "descent": -615, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "regular": { + "familyName": "Cousine", + "fullName": "Cousine Regular", + "postscriptName": "Cousine-Regular", + "category": "monospace", + "capHeight": 1349, + "ascent": 1705, + "descent": -615, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "italic": { + "familyName": "Cousine", + "fullName": "Cousine Italic", + "postscriptName": "Cousine-Italic", + "category": "monospace", + "capHeight": 1349, + "ascent": 1705, + "descent": -615, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "700italic": { + "familyName": "Cousine", + "fullName": "Cousine Bold Italic", + "postscriptName": "Cousine-BoldItalic", + "category": "monospace", + "capHeight": 1349, + "ascent": 1705, + "descent": -615, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 1229 + } + } + } + } + }, + "coustard": { + "familyName": "Coustard", + "fullName": "Coustard Regular", + "postscriptName": "Coustard-Regular", + "category": "serif", + "capHeight": 346, + "ascent": 2095, + "descent": -781, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1095, + "xWidthAvg": 1011, + "subsets": { + "latin": { + "xWidthAvg": 1011 + }, + "thai": { + "xWidthAvg": 0 + } + }, + "variants": { + "900": { + "familyName": "Coustard", + "fullName": "Coustard Black", + "postscriptName": "Coustard-Black", + "category": "serif", + "capHeight": 173, + "ascent": 2095, + "descent": -781, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 235, + "xWidthAvg": 1164, + "subsets": { + "latin": { + "xWidthAvg": 1164 + }, + "thai": { + "xWidthAvg": 748 + } + } + }, + "regular": { + "familyName": "Coustard", + "fullName": "Coustard Regular", + "postscriptName": "Coustard-Regular", + "category": "serif", + "capHeight": 346, + "ascent": 2095, + "descent": -781, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1095, + "xWidthAvg": 1011, + "subsets": { + "latin": { + "xWidthAvg": 1011 + }, + "thai": { + "xWidthAvg": 0 + } + } + } + } + }, + "coveredByYourGrace": { + "familyName": "Covered By Your Grace", + "fullName": "Covered By Your Grace", + "postscriptName": "CoveredByYourGrace", + "category": "handwriting", + "capHeight": 795, + "ascent": 995, + "descent": -384, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 500, + "xWidthAvg": 380, + "subsets": { + "latin": { + "xWidthAvg": 380 + }, + "thai": { + "xWidthAvg": 410 + } + }, + "variants": { + "regular": { + "familyName": "Covered By Your Grace", + "fullName": "Covered By Your Grace", + "postscriptName": "CoveredByYourGrace", + "category": "handwriting", + "capHeight": 795, + "ascent": 995, + "descent": -384, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 500, + "xWidthAvg": 380, + "subsets": { + "latin": { + "xWidthAvg": 380 + }, + "thai": { + "xWidthAvg": 410 + } + } + } + } + }, + "craftyGirls": { + "familyName": "Crafty Girls", + "fullName": "Crafty Girls Regular", + "postscriptName": "CraftyGirls-Regular", + "category": "handwriting", + "capHeight": 772, + "ascent": 1001, + "descent": -461, + "lineGap": 21, + "unitsPerEm": 1024, + "xHeight": 548, + "xWidthAvg": 524, + "subsets": { + "latin": { + "xWidthAvg": 524 + }, + "thai": { + "xWidthAvg": 389 + } + }, + "variants": { + "regular": { + "familyName": "Crafty Girls", + "fullName": "Crafty Girls Regular", + "postscriptName": "CraftyGirls-Regular", + "category": "handwriting", + "capHeight": 772, + "ascent": 1001, + "descent": -461, + "lineGap": 21, + "unitsPerEm": 1024, + "xHeight": 548, + "xWidthAvg": 524, + "subsets": { + "latin": { + "xWidthAvg": 524 + }, + "thai": { + "xWidthAvg": 389 + } + } + } + } + }, + "creepster": { + "familyName": "Creepster", + "fullName": "Creepster", + "postscriptName": "Creepster-Regular", + "category": "display", + "capHeight": 751, + "ascent": 974, + "descent": -223, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 751, + "xWidthAvg": 410, + "subsets": { + "latin": { + "xWidthAvg": 410 + }, + "thai": { + "xWidthAvg": 241 + } + }, + "variants": { + "regular": { + "familyName": "Creepster", + "fullName": "Creepster", + "postscriptName": "Creepster-Regular", + "category": "display", + "capHeight": 751, + "ascent": 974, + "descent": -223, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 751, + "xWidthAvg": 410, + "subsets": { + "latin": { + "xWidthAvg": 410 + }, + "thai": { + "xWidthAvg": 241 + } + } + } + } + }, + "creteRound": { + "familyName": "Crete Round", + "fullName": "Crete Round", + "postscriptName": "CreteRound-Regular", + "category": "serif", + "capHeight": 679, + "ascent": 990, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Crete Round", + "fullName": "Crete Round", + "postscriptName": "CreteRound-Regular", + "category": "serif", + "capHeight": 679, + "ascent": 990, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Crete Round", + "fullName": "Crete Round Italic", + "postscriptName": "CreteRound-Italic", + "category": "serif", + "capHeight": 679, + "ascent": 990, + "descent": -285, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "crimsonPro": { + "familyName": "Crimson Pro", + "fullName": "Crimson Pro Regular", + "postscriptName": "CrimsonPro-Regular", + "category": "serif", + "capHeight": 587, + "ascent": 918, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 430, + "xWidthAvg": 410, + "subsets": { + "latin": { + "xWidthAvg": 410 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "200": { + "familyName": "Crimson Pro", + "fullName": "Crimson Pro ExtraLight", + "postscriptName": "CrimsonPro-ExtraLight", + "category": "serif", + "capHeight": 587, + "ascent": 918, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 430, + "xWidthAvg": 398, + "subsets": { + "latin": { + "xWidthAvg": 398 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "300": { + "familyName": "Crimson Pro", + "fullName": "Crimson Pro Light", + "postscriptName": "CrimsonPro-Light", + "category": "serif", + "capHeight": 587, + "ascent": 918, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 430, + "xWidthAvg": 403, + "subsets": { + "latin": { + "xWidthAvg": 403 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "500": { + "familyName": "Crimson Pro", + "fullName": "Crimson Pro Medium", + "postscriptName": "CrimsonPro-Medium", + "category": "serif", + "capHeight": 587, + "ascent": 918, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 430, + "xWidthAvg": 418, + "subsets": { + "latin": { + "xWidthAvg": 418 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "600": { + "familyName": "Crimson Pro", + "fullName": "Crimson Pro SemiBold", + "postscriptName": "CrimsonPro-SemiBold", + "category": "serif", + "capHeight": 587, + "ascent": 918, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 430, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "700": { + "familyName": "Crimson Pro", + "fullName": "Crimson Pro Bold", + "postscriptName": "CrimsonPro-Bold", + "category": "serif", + "capHeight": 587, + "ascent": 918, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 430, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "800": { + "familyName": "Crimson Pro", + "fullName": "Crimson Pro ExtraBold", + "postscriptName": "CrimsonPro-ExtraBold", + "category": "serif", + "capHeight": 587, + "ascent": 918, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 430, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "900": { + "familyName": "Crimson Pro", + "fullName": "Crimson Pro Black", + "postscriptName": "CrimsonPro-Black", + "category": "serif", + "capHeight": 587, + "ascent": 918, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 430, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "regular": { + "familyName": "Crimson Pro", + "fullName": "Crimson Pro Regular", + "postscriptName": "CrimsonPro-Regular", + "category": "serif", + "capHeight": 587, + "ascent": 918, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 430, + "xWidthAvg": 410, + "subsets": { + "latin": { + "xWidthAvg": 410 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "italic": { + "familyName": "Crimson Pro", + "fullName": "Crimson Pro Italic", + "postscriptName": "CrimsonPro-Italic", + "category": "serif", + "capHeight": 587, + "ascent": 918, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 430, + "xWidthAvg": 380, + "subsets": { + "latin": { + "xWidthAvg": 380 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "900italic": { + "familyName": "Crimson Pro", + "fullName": "Crimson Pro Black Italic", + "postscriptName": "CrimsonPro-BlackItalic", + "category": "serif", + "capHeight": 587, + "ascent": 918, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 430, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "800italic": { + "familyName": "Crimson Pro", + "fullName": "Crimson Pro ExtraBold Italic", + "postscriptName": "CrimsonPro-ExtraBoldItalic", + "category": "serif", + "capHeight": 587, + "ascent": 918, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 430, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "700italic": { + "familyName": "Crimson Pro", + "fullName": "Crimson Pro Bold Italic", + "postscriptName": "CrimsonPro-BoldItalic", + "category": "serif", + "capHeight": 587, + "ascent": 918, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 430, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "600italic": { + "familyName": "Crimson Pro", + "fullName": "Crimson Pro SemiBold Italic", + "postscriptName": "CrimsonPro-SemiBoldItalic", + "category": "serif", + "capHeight": 587, + "ascent": 918, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 430, + "xWidthAvg": 405, + "subsets": { + "latin": { + "xWidthAvg": 405 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "500italic": { + "familyName": "Crimson Pro", + "fullName": "Crimson Pro Medium Italic", + "postscriptName": "CrimsonPro-MediumItalic", + "category": "serif", + "capHeight": 587, + "ascent": 918, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 430, + "xWidthAvg": 392, + "subsets": { + "latin": { + "xWidthAvg": 392 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "300italic": { + "familyName": "Crimson Pro", + "fullName": "Crimson Pro Light Italic", + "postscriptName": "CrimsonPro-LightItalic", + "category": "serif", + "capHeight": 587, + "ascent": 918, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 430, + "xWidthAvg": 369, + "subsets": { + "latin": { + "xWidthAvg": 369 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "200italic": { + "familyName": "Crimson Pro", + "fullName": "Crimson Pro ExtraLight Italic", + "postscriptName": "CrimsonPro-ExtraLightItalic", + "category": "serif", + "capHeight": 587, + "ascent": 918, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 430, + "xWidthAvg": 362, + "subsets": { + "latin": { + "xWidthAvg": 362 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "crimsonText": { + "familyName": "Crimson Text", + "fullName": "Crimson Text Regular", + "postscriptName": "CrimsonText-Regular", + "category": "serif", + "capHeight": 656, + "ascent": 972, + "descent": -359, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 430, + "xWidthAvg": 405, + "subsets": { + "latin": { + "xWidthAvg": 405 + }, + "thai": { + "xWidthAvg": 374 + } + }, + "variants": { + "600": { + "familyName": "Crimson Text", + "fullName": "Crimson Text SemiBold", + "postscriptName": "CrimsonText-SemiBold", + "category": "serif", + "capHeight": 656, + "ascent": 972, + "descent": -359, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 430, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 374 + } + } + }, + "700": { + "familyName": "Crimson Text", + "fullName": "Crimson Text Bold", + "postscriptName": "CrimsonText-Bold", + "category": "serif", + "capHeight": 656, + "ascent": 972, + "descent": -359, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 430, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 374 + } + } + }, + "regular": { + "familyName": "Crimson Text", + "fullName": "Crimson Text Regular", + "postscriptName": "CrimsonText-Regular", + "category": "serif", + "capHeight": 656, + "ascent": 972, + "descent": -359, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 430, + "xWidthAvg": 405, + "subsets": { + "latin": { + "xWidthAvg": 405 + }, + "thai": { + "xWidthAvg": 374 + } + } + }, + "italic": { + "familyName": "Crimson Text", + "fullName": "Crimson Text Italic", + "postscriptName": "CrimsonText-Italic", + "category": "serif", + "capHeight": 658, + "ascent": 972, + "descent": -359, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 430, + "xWidthAvg": 368, + "subsets": { + "latin": { + "xWidthAvg": 368 + }, + "thai": { + "xWidthAvg": 374 + } + } + }, + "700italic": { + "familyName": "Crimson Text", + "fullName": "Crimson Text Bold Italic", + "postscriptName": "CrimsonText-BoldItalic", + "category": "serif", + "capHeight": 658, + "ascent": 972, + "descent": -359, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 430, + "xWidthAvg": 386, + "subsets": { + "latin": { + "xWidthAvg": 386 + }, + "thai": { + "xWidthAvg": 374 + } + } + }, + "600italic": { + "familyName": "Crimson Text", + "fullName": "Crimson Text SemiBold Italic", + "postscriptName": "CrimsonText-SemiBoldItalic", + "category": "serif", + "capHeight": 658, + "ascent": 972, + "descent": -359, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 430, + "xWidthAvg": 365, + "subsets": { + "latin": { + "xWidthAvg": 365 + }, + "thai": { + "xWidthAvg": 374 + } + } + } + } + }, + "croissantOne": { + "familyName": "Croissant One", + "fullName": "Croissant One", + "postscriptName": "CroissantOne-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1071, + "descent": -344, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 546, + "subsets": { + "latin": { + "xWidthAvg": 546 + }, + "thai": { + "xWidthAvg": 300 + } + }, + "variants": { + "regular": { + "familyName": "Croissant One", + "fullName": "Croissant One", + "postscriptName": "CroissantOne-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1071, + "descent": -344, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 546, + "subsets": { + "latin": { + "xWidthAvg": 546 + }, + "thai": { + "xWidthAvg": 300 + } + } + } + } + }, + "crushed": { + "familyName": "Crushed", + "fullName": "Crushed Regular", + "postscriptName": "Crushed-Regular", + "category": "display", + "capHeight": 1374, + "ascent": 1820, + "descent": -483, + "lineGap": 51, + "unitsPerEm": 2048, + "xHeight": 958, + "xWidthAvg": 757, + "subsets": { + "latin": { + "xWidthAvg": 757 + }, + "thai": { + "xWidthAvg": 400 + } + }, + "variants": { + "regular": { + "familyName": "Crushed", + "fullName": "Crushed Regular", + "postscriptName": "Crushed-Regular", + "category": "display", + "capHeight": 1374, + "ascent": 1820, + "descent": -483, + "lineGap": 51, + "unitsPerEm": 2048, + "xHeight": 958, + "xWidthAvg": 757, + "subsets": { + "latin": { + "xWidthAvg": 757 + }, + "thai": { + "xWidthAvg": 400 + } + } + } + } + }, + "cuprum": { + "familyName": "Cuprum", + "fullName": "Cuprum Regular", + "postscriptName": "Cuprum-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 895, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 384, + "subsets": { + "latin": { + "xWidthAvg": 384 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "500": { + "familyName": "Cuprum", + "fullName": "Cuprum Medium", + "postscriptName": "Cuprum-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 895, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 391, + "subsets": { + "latin": { + "xWidthAvg": 391 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Cuprum", + "fullName": "Cuprum SemiBold", + "postscriptName": "Cuprum-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 895, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 398, + "subsets": { + "latin": { + "xWidthAvg": 398 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Cuprum", + "fullName": "Cuprum Bold", + "postscriptName": "Cuprum-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 895, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 405, + "subsets": { + "latin": { + "xWidthAvg": 405 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Cuprum", + "fullName": "Cuprum Regular", + "postscriptName": "Cuprum-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 895, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 384, + "subsets": { + "latin": { + "xWidthAvg": 384 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Cuprum", + "fullName": "Cuprum Italic", + "postscriptName": "Cuprum-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 895, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 384, + "subsets": { + "latin": { + "xWidthAvg": 384 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700italic": { + "familyName": "Cuprum", + "fullName": "Cuprum Bold Italic", + "postscriptName": "Cuprum-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 895, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 407, + "subsets": { + "latin": { + "xWidthAvg": 407 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600italic": { + "familyName": "Cuprum", + "fullName": "Cuprum SemiBold Italic", + "postscriptName": "Cuprum-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 895, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 399, + "subsets": { + "latin": { + "xWidthAvg": 399 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500italic": { + "familyName": "Cuprum", + "fullName": "Cuprum Medium Italic", + "postscriptName": "Cuprum-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 895, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 391, + "subsets": { + "latin": { + "xWidthAvg": 391 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "cuteFont": { + "familyName": "Cute Font", + "fullName": "Cute Font Regular", + "postscriptName": "CuteFont-Regular", + "category": "display", + "capHeight": 429, + "ascent": 710, + "descent": -290, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 312, + "xWidthAvg": 356, + "subsets": { + "latin": { + "xWidthAvg": 356 + }, + "thai": { + "xWidthAvg": 428 + } + }, + "variants": { + "regular": { + "familyName": "Cute Font", + "fullName": "Cute Font Regular", + "postscriptName": "CuteFont-Regular", + "category": "display", + "capHeight": 429, + "ascent": 710, + "descent": -290, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 312, + "xWidthAvg": 356, + "subsets": { + "latin": { + "xWidthAvg": 356 + }, + "thai": { + "xWidthAvg": 428 + } + } + } + } + }, + "cutive": { + "familyName": "Cutive", + "fullName": "Cutive Regular", + "postscriptName": "Cutive-Regular", + "category": "serif", + "capHeight": 1714, + "ascent": 1580, + "descent": -666, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1160, + "xWidthAvg": 1173, + "subsets": { + "latin": { + "xWidthAvg": 1173 + }, + "thai": { + "xWidthAvg": 1674 + } + }, + "variants": { + "regular": { + "familyName": "Cutive", + "fullName": "Cutive Regular", + "postscriptName": "Cutive-Regular", + "category": "serif", + "capHeight": 1714, + "ascent": 1580, + "descent": -666, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1160, + "xWidthAvg": 1173, + "subsets": { + "latin": { + "xWidthAvg": 1173 + }, + "thai": { + "xWidthAvg": 1674 + } + } + } + } + }, + "cutiveMono": { + "familyName": "Cutive Mono", + "fullName": "Cutive Mono Regular", + "postscriptName": "CutiveMono-Regular", + "category": "monospace", + "capHeight": 1171, + "ascent": 1697, + "descent": -558, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 774, + "xWidthAvg": 1240, + "subsets": { + "latin": { + "xWidthAvg": 1240 + }, + "thai": { + "xWidthAvg": 1240 + } + }, + "variants": { + "regular": { + "familyName": "Cutive Mono", + "fullName": "Cutive Mono Regular", + "postscriptName": "CutiveMono-Regular", + "category": "monospace", + "capHeight": 1171, + "ascent": 1697, + "descent": -558, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 774, + "xWidthAvg": 1240, + "subsets": { + "latin": { + "xWidthAvg": 1240 + }, + "thai": { + "xWidthAvg": 1240 + } + } + } + } + }, + "dMMono": { + "familyName": "DM Mono", + "fullName": "DM Mono Regular", + "postscriptName": "DMMono-Regular", + "category": "monospace", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "300": { + "familyName": "DM Mono", + "fullName": "DM Mono Light", + "postscriptName": "DMMono-Light", + "category": "monospace", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "DM Mono", + "fullName": "DM Mono Medium", + "postscriptName": "DMMono-Medium", + "category": "monospace", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "DM Mono", + "fullName": "DM Mono Regular", + "postscriptName": "DMMono-Regular", + "category": "monospace", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "italic": { + "familyName": "DM Mono", + "fullName": "DM Mono Italic", + "postscriptName": "DMMono-Italic", + "category": "monospace", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500italic": { + "familyName": "DM Mono", + "fullName": "DM Mono Medium Italic", + "postscriptName": "DMMono-MediumItalic", + "category": "monospace", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300italic": { + "familyName": "DM Mono", + "fullName": "DM Mono Light Italic", + "postscriptName": "DMMono-LightItalic", + "category": "monospace", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "dMSans": { + "familyName": "DM Sans", + "fullName": "DM Sans Regular", + "postscriptName": "DMSans-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 551 + } + }, + "variants": { + "100": { + "familyName": "DM Sans", + "fullName": "DM Sans Thin", + "postscriptName": "DMSans-Thin", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 417, + "subsets": { + "latin": { + "xWidthAvg": 417 + }, + "thai": { + "xWidthAvg": 554 + } + } + }, + "200": { + "familyName": "DM Sans", + "fullName": "DM Sans ExtraLight", + "postscriptName": "DMSans-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 555 + } + } + }, + "300": { + "familyName": "DM Sans", + "fullName": "DM Sans Light", + "postscriptName": "DMSans-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 557 + } + } + }, + "500": { + "familyName": "DM Sans", + "fullName": "DM Sans Medium", + "postscriptName": "DMSans-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 547 + } + } + }, + "600": { + "familyName": "DM Sans", + "fullName": "DM Sans SemiBold", + "postscriptName": "DMSans-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 542 + } + } + }, + "700": { + "familyName": "DM Sans", + "fullName": "DM Sans Bold", + "postscriptName": "DMSans-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 538 + } + } + }, + "800": { + "familyName": "DM Sans", + "fullName": "DM Sans ExtraBold", + "postscriptName": "DMSans-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 537 + } + } + }, + "900": { + "familyName": "DM Sans", + "fullName": "DM Sans Black", + "postscriptName": "DMSans-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 535 + } + } + }, + "regular": { + "familyName": "DM Sans", + "fullName": "DM Sans Regular", + "postscriptName": "DMSans-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 551 + } + } + }, + "italic": { + "familyName": "DM Sans", + "fullName": "DM Sans Italic", + "postscriptName": "DMSans-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 551 + } + } + }, + "900italic": { + "familyName": "DM Sans", + "fullName": "DM Sans Black Italic", + "postscriptName": "DMSans-BlackItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 535 + } + } + }, + "800italic": { + "familyName": "DM Sans", + "fullName": "DM Sans ExtraBold Italic", + "postscriptName": "DMSans-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 538 + } + } + }, + "700italic": { + "familyName": "DM Sans", + "fullName": "DM Sans Bold Italic", + "postscriptName": "DMSans-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 539 + } + } + }, + "600italic": { + "familyName": "DM Sans", + "fullName": "DM Sans SemiBold Italic", + "postscriptName": "DMSans-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 542 + } + } + }, + "500italic": { + "familyName": "DM Sans", + "fullName": "DM Sans Medium Italic", + "postscriptName": "DMSans-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 547 + } + } + }, + "300italic": { + "familyName": "DM Sans", + "fullName": "DM Sans Light Italic", + "postscriptName": "DMSans-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 557 + } + } + }, + "200italic": { + "familyName": "DM Sans", + "fullName": "DM Sans ExtraLight Italic", + "postscriptName": "DMSans-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 557 + } + } + }, + "100italic": { + "familyName": "DM Sans", + "fullName": "DM Sans Thin Italic", + "postscriptName": "DMSans-ThinItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 417, + "subsets": { + "latin": { + "xWidthAvg": 417 + }, + "thai": { + "xWidthAvg": 556 + } + } + } + } + }, + "dMSerifDisplay": { + "familyName": "DM Serif Display", + "fullName": "DM Serif Display Regular", + "postscriptName": "DMSerifDisplay-Regular", + "category": "serif", + "capHeight": 660, + "ascent": 1036, + "descent": -335, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 640 + } + }, + "variants": { + "regular": { + "familyName": "DM Serif Display", + "fullName": "DM Serif Display Regular", + "postscriptName": "DMSerifDisplay-Regular", + "category": "serif", + "capHeight": 660, + "ascent": 1036, + "descent": -335, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "italic": { + "familyName": "DM Serif Display", + "fullName": "DM Serif Display Italic", + "postscriptName": "DMSerifDisplay-Italic", + "category": "serif", + "capHeight": 660, + "ascent": 1036, + "descent": -335, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 432, + "subsets": { + "latin": { + "xWidthAvg": 432 + }, + "thai": { + "xWidthAvg": 640 + } + } + } + } + }, + "dMSerifText": { + "familyName": "DM Serif Text", + "fullName": "DM Serif Text Regular", + "postscriptName": "DMSerifText-Regular", + "category": "serif", + "capHeight": 661, + "ascent": 1036, + "descent": -335, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 640 + } + }, + "variants": { + "regular": { + "familyName": "DM Serif Text", + "fullName": "DM Serif Text Regular", + "postscriptName": "DMSerifText-Regular", + "category": "serif", + "capHeight": 661, + "ascent": 1036, + "descent": -335, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "italic": { + "familyName": "DM Serif Text", + "fullName": "DM Serif Text Italic", + "postscriptName": "DMSerifText-Italic", + "category": "serif", + "capHeight": 661, + "ascent": 1036, + "descent": -335, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 640 + } + } + } + } + }, + "daiBannaSIL": { + "familyName": "Dai Banna SIL", + "fullName": "Dai Banna SIL", + "postscriptName": "DaiBannaSIL-Regular", + "category": "serif", + "capHeight": 1355, + "ascent": 1685, + "descent": -638, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 906, + "xWidthAvg": 809, + "subsets": { + "latin": { + "xWidthAvg": 809 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "300": { + "familyName": "Dai Banna SIL", + "fullName": "Dai Banna SIL Light", + "postscriptName": "DaiBannaSIL-Light", + "category": "serif", + "capHeight": 1355, + "ascent": 1685, + "descent": -638, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 906, + "xWidthAvg": 790, + "subsets": { + "latin": { + "xWidthAvg": 790 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "500": { + "familyName": "Dai Banna SIL", + "fullName": "Dai Banna SIL Medium", + "postscriptName": "DaiBannaSIL-Medium", + "category": "serif", + "capHeight": 1355, + "ascent": 1685, + "descent": -638, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 906, + "xWidthAvg": 824, + "subsets": { + "latin": { + "xWidthAvg": 824 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "600": { + "familyName": "Dai Banna SIL", + "fullName": "Dai Banna SIL SemiBold", + "postscriptName": "DaiBannaSIL-SemiBold", + "category": "serif", + "capHeight": 1355, + "ascent": 1685, + "descent": -638, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 906, + "xWidthAvg": 839, + "subsets": { + "latin": { + "xWidthAvg": 839 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "700": { + "familyName": "Dai Banna SIL", + "fullName": "Dai Banna SIL Bold", + "postscriptName": "DaiBannaSIL-Bold", + "category": "serif", + "capHeight": 1355, + "ascent": 1685, + "descent": -638, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 906, + "xWidthAvg": 864, + "subsets": { + "latin": { + "xWidthAvg": 864 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "regular": { + "familyName": "Dai Banna SIL", + "fullName": "Dai Banna SIL", + "postscriptName": "DaiBannaSIL-Regular", + "category": "serif", + "capHeight": 1355, + "ascent": 1685, + "descent": -638, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 906, + "xWidthAvg": 809, + "subsets": { + "latin": { + "xWidthAvg": 809 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "italic": { + "familyName": "Dai Banna SIL", + "fullName": "Dai Banna SIL Italic", + "postscriptName": "DaiBannaSIL-Italic", + "category": "serif", + "capHeight": 1355, + "ascent": 1685, + "descent": -638, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 906, + "xWidthAvg": 740, + "subsets": { + "latin": { + "xWidthAvg": 740 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "700italic": { + "familyName": "Dai Banna SIL", + "fullName": "Dai Banna SIL Bold Italic", + "postscriptName": "DaiBannaSIL-BoldItalic", + "category": "serif", + "capHeight": 1355, + "ascent": 1685, + "descent": -638, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 906, + "xWidthAvg": 800, + "subsets": { + "latin": { + "xWidthAvg": 800 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "600italic": { + "familyName": "Dai Banna SIL", + "fullName": "Dai Banna SIL SemiBold Italic", + "postscriptName": "DaiBannaSIL-SemiBoldItalic", + "category": "serif", + "capHeight": 1355, + "ascent": 1685, + "descent": -638, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 906, + "xWidthAvg": 774, + "subsets": { + "latin": { + "xWidthAvg": 774 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "500italic": { + "familyName": "Dai Banna SIL", + "fullName": "Dai Banna SIL Medium Italic", + "postscriptName": "DaiBannaSIL-MediumItalic", + "category": "serif", + "capHeight": 1355, + "ascent": 1685, + "descent": -638, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 906, + "xWidthAvg": 757, + "subsets": { + "latin": { + "xWidthAvg": 757 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "300italic": { + "familyName": "Dai Banna SIL", + "fullName": "Dai Banna SIL Light Italic", + "postscriptName": "DaiBannaSIL-LightItalic", + "category": "serif", + "capHeight": 1355, + "ascent": 1685, + "descent": -638, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 906, + "xWidthAvg": 720, + "subsets": { + "latin": { + "xWidthAvg": 720 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "damion": { + "familyName": "Damion", + "fullName": "Damion Regular", + "postscriptName": "Damion-Regular", + "category": "handwriting", + "capHeight": 1440, + "ascent": 2068, + "descent": -746, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 720, + "xWidthAvg": 758, + "subsets": { + "latin": { + "xWidthAvg": 758 + }, + "thai": { + "xWidthAvg": 1452 + } + }, + "variants": { + "regular": { + "familyName": "Damion", + "fullName": "Damion Regular", + "postscriptName": "Damion-Regular", + "category": "handwriting", + "capHeight": 1440, + "ascent": 2068, + "descent": -746, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 720, + "xWidthAvg": 758, + "subsets": { + "latin": { + "xWidthAvg": 758 + }, + "thai": { + "xWidthAvg": 1452 + } + } + } + } + }, + "dancingScript": { + "familyName": "Dancing Script", + "fullName": "Dancing Script Regular", + "postscriptName": "DancingScript-Regular", + "category": "handwriting", + "capHeight": 720, + "ascent": 920, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 332, + "xWidthAvg": 363, + "subsets": { + "latin": { + "xWidthAvg": 363 + }, + "thai": { + "xWidthAvg": 428 + } + }, + "variants": { + "500": { + "familyName": "Dancing Script", + "fullName": "Dancing Script Medium", + "postscriptName": "DancingScript-Medium", + "category": "handwriting", + "capHeight": 720, + "ascent": 920, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 332, + "xWidthAvg": 366, + "subsets": { + "latin": { + "xWidthAvg": 366 + }, + "thai": { + "xWidthAvg": 428 + } + } + }, + "600": { + "familyName": "Dancing Script", + "fullName": "Dancing Script SemiBold", + "postscriptName": "DancingScript-SemiBold", + "category": "handwriting", + "capHeight": 720, + "ascent": 920, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 332, + "xWidthAvg": 370, + "subsets": { + "latin": { + "xWidthAvg": 370 + }, + "thai": { + "xWidthAvg": 428 + } + } + }, + "700": { + "familyName": "Dancing Script", + "fullName": "Dancing Script Bold", + "postscriptName": "DancingScript-Bold", + "category": "handwriting", + "capHeight": 720, + "ascent": 920, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 332, + "xWidthAvg": 373, + "subsets": { + "latin": { + "xWidthAvg": 373 + }, + "thai": { + "xWidthAvg": 428 + } + } + }, + "regular": { + "familyName": "Dancing Script", + "fullName": "Dancing Script Regular", + "postscriptName": "DancingScript-Regular", + "category": "handwriting", + "capHeight": 720, + "ascent": 920, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 332, + "xWidthAvg": 363, + "subsets": { + "latin": { + "xWidthAvg": 363 + }, + "thai": { + "xWidthAvg": 428 + } + } + } + } + }, + "danfo": { + "familyName": "Danfo", + "fullName": "Danfo Regular", + "postscriptName": "Danfo-Regular", + "category": "serif", + "capHeight": 716, + "ascent": 1050, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 535, + "subsets": { + "latin": { + "xWidthAvg": 535 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Danfo", + "fullName": "Danfo Regular", + "postscriptName": "Danfo-Regular", + "category": "serif", + "capHeight": 716, + "ascent": 1050, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 535, + "subsets": { + "latin": { + "xWidthAvg": 535 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "dangrek": { + "familyName": "Dangrek", + "fullName": "Dangrek Regular", + "postscriptName": "Dangrek-Regular", + "category": "display", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 882, + "subsets": { + "latin": { + "xWidthAvg": 882 + }, + "thai": { + "xWidthAvg": 1304 + } + }, + "variants": { + "regular": { + "familyName": "Dangrek", + "fullName": "Dangrek Regular", + "postscriptName": "Dangrek-Regular", + "category": "display", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 882, + "subsets": { + "latin": { + "xWidthAvg": 882 + }, + "thai": { + "xWidthAvg": 1304 + } + } + } + } + }, + "darkerGrotesque": { + "familyName": "Darker Grotesque", + "fullName": "Darker Grotesque Regular", + "postscriptName": "DarkerGrotesque-Regular", + "category": "sans-serif", + "capHeight": 563, + "ascent": 1060, + "descent": -296, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 406, + "xWidthAvg": 361, + "subsets": { + "latin": { + "xWidthAvg": 361 + }, + "thai": { + "xWidthAvg": 541 + } + }, + "variants": { + "300": { + "familyName": "Darker Grotesque", + "fullName": "Darker Grotesque Light", + "postscriptName": "DarkerGrotesque-Light", + "category": "sans-serif", + "capHeight": 563, + "ascent": 1060, + "descent": -296, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 404, + "xWidthAvg": 353, + "subsets": { + "latin": { + "xWidthAvg": 353 + }, + "thai": { + "xWidthAvg": 530 + } + } + }, + "500": { + "familyName": "Darker Grotesque", + "fullName": "Darker Grotesque Medium", + "postscriptName": "DarkerGrotesque-Medium", + "category": "sans-serif", + "capHeight": 563, + "ascent": 1060, + "descent": -296, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 407, + "xWidthAvg": 369, + "subsets": { + "latin": { + "xWidthAvg": 369 + }, + "thai": { + "xWidthAvg": 552 + } + } + }, + "600": { + "familyName": "Darker Grotesque", + "fullName": "Darker Grotesque SemiBold", + "postscriptName": "DarkerGrotesque-SemiBold", + "category": "sans-serif", + "capHeight": 563, + "ascent": 1060, + "descent": -296, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 409, + "xWidthAvg": 378, + "subsets": { + "latin": { + "xWidthAvg": 378 + }, + "thai": { + "xWidthAvg": 563 + } + } + }, + "700": { + "familyName": "Darker Grotesque", + "fullName": "Darker Grotesque Bold", + "postscriptName": "DarkerGrotesque-Bold", + "category": "sans-serif", + "capHeight": 563, + "ascent": 1060, + "descent": -296, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 411, + "xWidthAvg": 385, + "subsets": { + "latin": { + "xWidthAvg": 385 + }, + "thai": { + "xWidthAvg": 574 + } + } + }, + "800": { + "familyName": "Darker Grotesque", + "fullName": "Darker Grotesque ExtraBold", + "postscriptName": "DarkerGrotesque-ExtraBold", + "category": "sans-serif", + "capHeight": 563, + "ascent": 1060, + "descent": -296, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 412, + "xWidthAvg": 394, + "subsets": { + "latin": { + "xWidthAvg": 394 + }, + "thai": { + "xWidthAvg": 585 + } + } + }, + "900": { + "familyName": "Darker Grotesque", + "fullName": "Darker Grotesque Black", + "postscriptName": "DarkerGrotesque-Black", + "category": "sans-serif", + "capHeight": 563, + "ascent": 1060, + "descent": -296, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 414, + "xWidthAvg": 402, + "subsets": { + "latin": { + "xWidthAvg": 402 + }, + "thai": { + "xWidthAvg": 596 + } + } + }, + "regular": { + "familyName": "Darker Grotesque", + "fullName": "Darker Grotesque Regular", + "postscriptName": "DarkerGrotesque-Regular", + "category": "sans-serif", + "capHeight": 563, + "ascent": 1060, + "descent": -296, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 406, + "xWidthAvg": 361, + "subsets": { + "latin": { + "xWidthAvg": 361 + }, + "thai": { + "xWidthAvg": 541 + } + } + } + } + }, + "darumadropOne": { + "familyName": "Darumadrop One", + "fullName": "Darumadrop One Regular", + "postscriptName": "DarumadropOne-Regular", + "category": "display", + "capHeight": 590, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 435, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 797 + } + }, + "variants": { + "regular": { + "familyName": "Darumadrop One", + "fullName": "Darumadrop One Regular", + "postscriptName": "DarumadropOne-Regular", + "category": "display", + "capHeight": 590, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 435, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 797 + } + } + } + } + }, + "davidLibre": { + "familyName": "David Libre", + "fullName": "David Libre Regular", + "postscriptName": "DavidLibre-Regular", + "category": "serif", + "capHeight": 1360, + "ascent": 1599, + "descent": -449, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 989, + "xWidthAvg": 848, + "subsets": { + "latin": { + "xWidthAvg": 848 + }, + "thai": { + "xWidthAvg": 1318 + } + }, + "variants": { + "500": { + "familyName": "David Libre", + "fullName": "David Libre Medium", + "postscriptName": "DavidLibre-Medium", + "category": "serif", + "capHeight": 1362, + "ascent": 1599, + "descent": -449, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 989, + "xWidthAvg": 880, + "subsets": { + "latin": { + "xWidthAvg": 880 + }, + "thai": { + "xWidthAvg": 1314 + } + } + }, + "700": { + "familyName": "David Libre", + "fullName": "David Libre Bold", + "postscriptName": "DavidLibre-Bold", + "category": "serif", + "capHeight": 1362, + "ascent": 1599, + "descent": -449, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 989, + "xWidthAvg": 896, + "subsets": { + "latin": { + "xWidthAvg": 896 + }, + "thai": { + "xWidthAvg": 1330 + } + } + }, + "regular": { + "familyName": "David Libre", + "fullName": "David Libre Regular", + "postscriptName": "DavidLibre-Regular", + "category": "serif", + "capHeight": 1360, + "ascent": 1599, + "descent": -449, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 989, + "xWidthAvg": 848, + "subsets": { + "latin": { + "xWidthAvg": 848 + }, + "thai": { + "xWidthAvg": 1318 + } + } + } + } + }, + "dawningOfANewDay": { + "familyName": "Dawning of a New Day", + "fullName": "Dawning of a New Day", + "postscriptName": "DawningofaNewDay", + "category": "handwriting", + "capHeight": 818, + "ascent": 1151, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 218, + "xWidthAvg": 381, + "subsets": { + "latin": { + "xWidthAvg": 381 + }, + "thai": { + "xWidthAvg": 633 + } + }, + "variants": { + "regular": { + "familyName": "Dawning of a New Day", + "fullName": "Dawning of a New Day", + "postscriptName": "DawningofaNewDay", + "category": "handwriting", + "capHeight": 818, + "ascent": 1151, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 218, + "xWidthAvg": 381, + "subsets": { + "latin": { + "xWidthAvg": 381 + }, + "thai": { + "xWidthAvg": 633 + } + } + } + } + }, + "daysOne": { + "familyName": "Days One", + "fullName": "Days One", + "postscriptName": "DaysOne-Regular", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 2040, + "descent": -567, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1096, + "xWidthAvg": 1128, + "subsets": { + "latin": { + "xWidthAvg": 1128 + }, + "thai": { + "xWidthAvg": 717 + } + }, + "variants": { + "regular": { + "familyName": "Days One", + "fullName": "Days One", + "postscriptName": "DaysOne-Regular", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 2040, + "descent": -567, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1096, + "xWidthAvg": 1128, + "subsets": { + "latin": { + "xWidthAvg": 1128 + }, + "thai": { + "xWidthAvg": 717 + } + } + } + } + }, + "dekko": { + "familyName": "Dekko", + "fullName": "Dekko", + "postscriptName": "Dekko", + "category": "handwriting", + "capHeight": 1340, + "ascent": 2231, + "descent": -1112, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 995, + "xWidthAvg": 823, + "subsets": { + "latin": { + "xWidthAvg": 823 + }, + "thai": { + "xWidthAvg": 1518 + } + }, + "variants": { + "regular": { + "familyName": "Dekko", + "fullName": "Dekko", + "postscriptName": "Dekko", + "category": "handwriting", + "capHeight": 1340, + "ascent": 2231, + "descent": -1112, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 995, + "xWidthAvg": 823, + "subsets": { + "latin": { + "xWidthAvg": 823 + }, + "thai": { + "xWidthAvg": 1518 + } + } + } + } + }, + "delaGothicOne": { + "familyName": "Dela Gothic One", + "fullName": "Dela Gothic One Regular", + "postscriptName": "DelaGothicOne-Regular", + "category": "display", + "capHeight": 726, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 586, + "subsets": { + "latin": { + "xWidthAvg": 586 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Dela Gothic One", + "fullName": "Dela Gothic One Regular", + "postscriptName": "DelaGothicOne-Regular", + "category": "display", + "capHeight": 726, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 586, + "subsets": { + "latin": { + "xWidthAvg": 586 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "deliciousHandrawn": { + "familyName": "Delicious Handrawn", + "fullName": "Delicious Handrawn Regular", + "postscriptName": "DeliciousHandrawn-Regular", + "category": "handwriting", + "capHeight": 850, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 333, + "subsets": { + "latin": { + "xWidthAvg": 333 + }, + "thai": { + "xWidthAvg": 560 + } + }, + "variants": { + "regular": { + "familyName": "Delicious Handrawn", + "fullName": "Delicious Handrawn Regular", + "postscriptName": "DeliciousHandrawn-Regular", + "category": "handwriting", + "capHeight": 850, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 333, + "subsets": { + "latin": { + "xWidthAvg": 333 + }, + "thai": { + "xWidthAvg": 560 + } + } + } + } + }, + "delius": { + "familyName": "Delius", + "fullName": "Delius-Regular", + "postscriptName": "Delius-Regular", + "category": "handwriting", + "capHeight": 195, + "ascent": 986, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 85, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Delius", + "fullName": "Delius-Regular", + "postscriptName": "Delius-Regular", + "category": "handwriting", + "capHeight": 195, + "ascent": 986, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 85, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "deliusSwashCaps": { + "familyName": "Delius Swash Caps", + "fullName": "Delius Swash Caps", + "postscriptName": "DeliusSwashCaps-Regular", + "category": "handwriting", + "capHeight": 282, + "ascent": 986, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 113, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 238 + } + }, + "variants": { + "regular": { + "familyName": "Delius Swash Caps", + "fullName": "Delius Swash Caps", + "postscriptName": "DeliusSwashCaps-Regular", + "category": "handwriting", + "capHeight": 282, + "ascent": 986, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 113, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 238 + } + } + } + } + }, + "deliusUnicase": { + "familyName": "Delius Unicase", + "fullName": "Delius Unicase", + "postscriptName": "DeliusUnicase-Regular", + "category": "handwriting", + "capHeight": 195, + "ascent": 1016, + "descent": -236, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 320, + "xWidthAvg": 634, + "subsets": { + "latin": { + "xWidthAvg": 634 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "700": { + "familyName": "Delius Unicase", + "fullName": "Delius Unicase Bold", + "postscriptName": "DeliusUnicase-Bold", + "category": "handwriting", + "capHeight": 195, + "ascent": 1031, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 280, + "xWidthAvg": 637, + "subsets": { + "latin": { + "xWidthAvg": 637 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Delius Unicase", + "fullName": "Delius Unicase", + "postscriptName": "DeliusUnicase-Regular", + "category": "handwriting", + "capHeight": 195, + "ascent": 1016, + "descent": -236, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 320, + "xWidthAvg": 634, + "subsets": { + "latin": { + "xWidthAvg": 634 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "dellaRespira": { + "familyName": "Della Respira", + "fullName": "Della Respira", + "postscriptName": "DellaRespira-Regular", + "category": "serif", + "ascent": 2196, + "descent": -607, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 900, + "subsets": { + "latin": { + "xWidthAvg": 900 + }, + "thai": { + "xWidthAvg": 748 + } + }, + "variants": { + "regular": { + "familyName": "Della Respira", + "fullName": "Della Respira", + "postscriptName": "DellaRespira-Regular", + "category": "serif", + "ascent": 2196, + "descent": -607, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 900, + "subsets": { + "latin": { + "xWidthAvg": 900 + }, + "thai": { + "xWidthAvg": 748 + } + } + } + } + }, + "denkOne": { + "familyName": "Denk One", + "fullName": "Denk One Regular", + "postscriptName": "DenkOne-Regular", + "category": "sans-serif", + "capHeight": 1690, + "ascent": 2118, + "descent": -442, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1202, + "xWidthAvg": 899, + "subsets": { + "latin": { + "xWidthAvg": 899 + }, + "thai": { + "xWidthAvg": 1770 + } + }, + "variants": { + "regular": { + "familyName": "Denk One", + "fullName": "Denk One Regular", + "postscriptName": "DenkOne-Regular", + "category": "sans-serif", + "capHeight": 1690, + "ascent": 2118, + "descent": -442, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1202, + "xWidthAvg": 899, + "subsets": { + "latin": { + "xWidthAvg": 899 + }, + "thai": { + "xWidthAvg": 1770 + } + } + } + } + }, + "devonshire": { + "familyName": "Devonshire", + "fullName": "Devonshire-Regular", + "postscriptName": "Devonshire-Regular", + "category": "handwriting", + "capHeight": 664, + "ascent": 981, + "descent": -433, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 405, + "xWidthAvg": 311, + "subsets": { + "latin": { + "xWidthAvg": 311 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Devonshire", + "fullName": "Devonshire-Regular", + "postscriptName": "Devonshire-Regular", + "category": "handwriting", + "capHeight": 664, + "ascent": 981, + "descent": -433, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 405, + "xWidthAvg": 311, + "subsets": { + "latin": { + "xWidthAvg": 311 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "dhurjati": { + "familyName": "Dhurjati", + "fullName": "Dhurjati", + "postscriptName": "Dhurjati", + "category": "sans-serif", + "capHeight": 419, + "ascent": 1101, + "descent": -509, + "lineGap": 0, + "unitsPerEm": 870, + "xHeight": 314, + "xWidthAvg": 325, + "subsets": { + "latin": { + "xWidthAvg": 325 + }, + "thai": { + "xWidthAvg": 319 + } + }, + "variants": { + "regular": { + "familyName": "Dhurjati", + "fullName": "Dhurjati", + "postscriptName": "Dhurjati", + "category": "sans-serif", + "capHeight": 419, + "ascent": 1101, + "descent": -509, + "lineGap": 0, + "unitsPerEm": 870, + "xHeight": 314, + "xWidthAvg": 325, + "subsets": { + "latin": { + "xWidthAvg": 325 + }, + "thai": { + "xWidthAvg": 319 + } + } + } + } + }, + "didactGothic": { + "familyName": "Didact Gothic", + "fullName": "Didact Gothic Regular", + "postscriptName": "DidactGothic-Regular", + "category": "sans-serif", + "capHeight": 682, + "ascent": 1046, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 423, + "subsets": { + "latin": { + "xWidthAvg": 423 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Didact Gothic", + "fullName": "Didact Gothic Regular", + "postscriptName": "DidactGothic-Regular", + "category": "sans-serif", + "capHeight": 682, + "ascent": 1046, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 423, + "subsets": { + "latin": { + "xWidthAvg": 423 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "diphylleia": { + "familyName": "Diphylleia", + "fullName": "Diphylleia Regular", + "postscriptName": "Diphylleia-Regular", + "category": "serif", + "capHeight": 674, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 476, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 854 + } + }, + "variants": { + "regular": { + "familyName": "Diphylleia", + "fullName": "Diphylleia Regular", + "postscriptName": "Diphylleia-Regular", + "category": "serif", + "capHeight": 674, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 476, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 854 + } + } + } + } + }, + "diplomata": { + "familyName": "Diplomata", + "fullName": "Diplomata Regular", + "postscriptName": "Diplomata-Regular", + "category": "display", + "capHeight": 650, + "ascent": 930, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 558, + "xWidthAvg": 965, + "subsets": { + "latin": { + "xWidthAvg": 965 + }, + "thai": { + "xWidthAvg": 1415 + } + }, + "variants": { + "regular": { + "familyName": "Diplomata", + "fullName": "Diplomata Regular", + "postscriptName": "Diplomata-Regular", + "category": "display", + "capHeight": 650, + "ascent": 930, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 558, + "xWidthAvg": 965, + "subsets": { + "latin": { + "xWidthAvg": 965 + }, + "thai": { + "xWidthAvg": 1415 + } + } + } + } + }, + "diplomataSC": { + "familyName": "Diplomata SC", + "fullName": "Diplomata SC Regular", + "postscriptName": "DiplomataSC-Regular", + "category": "display", + "capHeight": 650, + "ascent": 930, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 558, + "xWidthAvg": 1050, + "subsets": { + "latin": { + "xWidthAvg": 1050 + }, + "thai": { + "xWidthAvg": 1415 + } + }, + "variants": { + "regular": { + "familyName": "Diplomata SC", + "fullName": "Diplomata SC Regular", + "postscriptName": "DiplomataSC-Regular", + "category": "display", + "capHeight": 650, + "ascent": 930, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 558, + "xWidthAvg": 1050, + "subsets": { + "latin": { + "xWidthAvg": 1050 + }, + "thai": { + "xWidthAvg": 1415 + } + } + } + } + }, + "doHyeon": { + "familyName": "Do Hyeon", + "fullName": "Do Hyeon Regular", + "postscriptName": "DoHyeon-Regular", + "category": "sans-serif", + "capHeight": 851, + "ascent": 800, + "descent": -200, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 636, + "xWidthAvg": 491, + "subsets": { + "latin": { + "xWidthAvg": 491 + }, + "thai": { + "xWidthAvg": 736 + } + }, + "variants": { + "regular": { + "familyName": "Do Hyeon", + "fullName": "Do Hyeon Regular", + "postscriptName": "DoHyeon-Regular", + "category": "sans-serif", + "capHeight": 851, + "ascent": 800, + "descent": -200, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 636, + "xWidthAvg": 491, + "subsets": { + "latin": { + "xWidthAvg": 491 + }, + "thai": { + "xWidthAvg": 736 + } + } + } + } + }, + "dokdo": { + "familyName": "Dokdo", + "fullName": "Dokdo Regular", + "postscriptName": "Dokdo-Regular", + "category": "display", + "capHeight": 475, + "ascent": 696, + "descent": -304, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 272, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 690 + } + }, + "variants": { + "regular": { + "familyName": "Dokdo", + "fullName": "Dokdo Regular", + "postscriptName": "Dokdo-Regular", + "category": "display", + "capHeight": 475, + "ascent": 696, + "descent": -304, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 272, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 690 + } + } + } + } + }, + "domine": { + "familyName": "Domine", + "fullName": "Domine Regular", + "postscriptName": "Domine-Regular", + "category": "serif", + "capHeight": 720, + "ascent": 900, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 640 + } + }, + "variants": { + "500": { + "familyName": "Domine", + "fullName": "Domine Medium", + "postscriptName": "Domine-Medium", + "category": "serif", + "capHeight": 720, + "ascent": 900, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "600": { + "familyName": "Domine", + "fullName": "Domine SemiBold", + "postscriptName": "Domine-SemiBold", + "category": "serif", + "capHeight": 720, + "ascent": 900, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 491, + "subsets": { + "latin": { + "xWidthAvg": 491 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "700": { + "familyName": "Domine", + "fullName": "Domine Bold", + "postscriptName": "Domine-Bold", + "category": "serif", + "capHeight": 720, + "ascent": 900, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "regular": { + "familyName": "Domine", + "fullName": "Domine Regular", + "postscriptName": "Domine-Regular", + "category": "serif", + "capHeight": 720, + "ascent": 900, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 640 + } + } + } + } + }, + "donegalOne": { + "familyName": "Donegal One", + "fullName": "Donegal One", + "postscriptName": "DonegalOne-Regular", + "category": "serif", + "capHeight": 1530, + "ascent": 2000, + "descent": -560, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1020, + "xWidthAvg": 1023, + "subsets": { + "latin": { + "xWidthAvg": 1023 + }, + "thai": { + "xWidthAvg": 675 + } + }, + "variants": { + "regular": { + "familyName": "Donegal One", + "fullName": "Donegal One", + "postscriptName": "DonegalOne-Regular", + "category": "serif", + "capHeight": 1530, + "ascent": 2000, + "descent": -560, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1020, + "xWidthAvg": 1023, + "subsets": { + "latin": { + "xWidthAvg": 1023 + }, + "thai": { + "xWidthAvg": 675 + } + } + } + } + }, + "dongle": { + "familyName": "Dongle", + "fullName": "Dongle Regular", + "postscriptName": "Dongle-Regular", + "category": "sans-serif", + "capHeight": 395, + "ascent": 850, + "descent": -598, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 280, + "xWidthAvg": 293, + "subsets": { + "latin": { + "xWidthAvg": 293 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "300": { + "familyName": "Dongle", + "fullName": "Dongle Light", + "postscriptName": "Dongle-Light", + "category": "sans-serif", + "capHeight": 395, + "ascent": 850, + "descent": -598, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 275, + "xWidthAvg": 290, + "subsets": { + "latin": { + "xWidthAvg": 290 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Dongle", + "fullName": "Dongle Bold", + "postscriptName": "Dongle-Bold", + "category": "sans-serif", + "capHeight": 400, + "ascent": 850, + "descent": -598, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 285, + "xWidthAvg": 301, + "subsets": { + "latin": { + "xWidthAvg": 301 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Dongle", + "fullName": "Dongle Regular", + "postscriptName": "Dongle-Regular", + "category": "sans-serif", + "capHeight": 395, + "ascent": 850, + "descent": -598, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 280, + "xWidthAvg": 293, + "subsets": { + "latin": { + "xWidthAvg": 293 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "doppioOne": { + "familyName": "Doppio One", + "fullName": "Doppio One Regular", + "postscriptName": "DoppioOne-Regular", + "category": "sans-serif", + "capHeight": 1427, + "ascent": 2060, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1055, + "xWidthAvg": 967, + "subsets": { + "latin": { + "xWidthAvg": 967 + }, + "thai": { + "xWidthAvg": 1092 + } + }, + "variants": { + "regular": { + "familyName": "Doppio One", + "fullName": "Doppio One Regular", + "postscriptName": "DoppioOne-Regular", + "category": "sans-serif", + "capHeight": 1427, + "ascent": 2060, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1055, + "xWidthAvg": 967, + "subsets": { + "latin": { + "xWidthAvg": 967 + }, + "thai": { + "xWidthAvg": 1092 + } + } + } + } + }, + "dorsa": { + "familyName": "Dorsa", + "fullName": "Dorsa", + "postscriptName": "Dorsa-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 857, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 165, + "subsets": { + "latin": { + "xWidthAvg": 165 + }, + "thai": { + "xWidthAvg": 100 + } + }, + "variants": { + "regular": { + "familyName": "Dorsa", + "fullName": "Dorsa", + "postscriptName": "Dorsa-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 857, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 165, + "subsets": { + "latin": { + "xWidthAvg": 165 + }, + "thai": { + "xWidthAvg": 100 + } + } + } + } + }, + "dosis": { + "familyName": "Dosis", + "fullName": "Dosis Regular", + "postscriptName": "Dosis-Regular", + "category": "sans-serif", + "capHeight": 731, + "ascent": 1027, + "descent": -237, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 377, + "subsets": { + "latin": { + "xWidthAvg": 377 + }, + "thai": { + "xWidthAvg": 340 + } + }, + "variants": { + "200": { + "familyName": "Dosis", + "fullName": "Dosis ExtraLight", + "postscriptName": "Dosis-ExtraLight", + "category": "sans-serif", + "capHeight": 731, + "ascent": 1027, + "descent": -237, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 364, + "subsets": { + "latin": { + "xWidthAvg": 364 + }, + "thai": { + "xWidthAvg": 317 + } + } + }, + "300": { + "familyName": "Dosis", + "fullName": "Dosis Light", + "postscriptName": "Dosis-Light", + "category": "sans-serif", + "capHeight": 731, + "ascent": 1027, + "descent": -237, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 370, + "subsets": { + "latin": { + "xWidthAvg": 370 + }, + "thai": { + "xWidthAvg": 328 + } + } + }, + "500": { + "familyName": "Dosis", + "fullName": "Dosis Medium", + "postscriptName": "Dosis-Medium", + "category": "sans-serif", + "capHeight": 731, + "ascent": 1027, + "descent": -237, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 385, + "subsets": { + "latin": { + "xWidthAvg": 385 + }, + "thai": { + "xWidthAvg": 353 + } + } + }, + "600": { + "familyName": "Dosis", + "fullName": "Dosis SemiBold", + "postscriptName": "Dosis-SemiBold", + "category": "sans-serif", + "capHeight": 731, + "ascent": 1027, + "descent": -237, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 395, + "subsets": { + "latin": { + "xWidthAvg": 395 + }, + "thai": { + "xWidthAvg": 370 + } + } + }, + "700": { + "familyName": "Dosis", + "fullName": "Dosis Bold", + "postscriptName": "Dosis-Bold", + "category": "sans-serif", + "capHeight": 731, + "ascent": 1027, + "descent": -237, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 406, + "subsets": { + "latin": { + "xWidthAvg": 406 + }, + "thai": { + "xWidthAvg": 388 + } + } + }, + "800": { + "familyName": "Dosis", + "fullName": "Dosis ExtraBold", + "postscriptName": "Dosis-ExtraBold", + "category": "sans-serif", + "capHeight": 731, + "ascent": 1027, + "descent": -237, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 417, + "subsets": { + "latin": { + "xWidthAvg": 417 + }, + "thai": { + "xWidthAvg": 408 + } + } + }, + "regular": { + "familyName": "Dosis", + "fullName": "Dosis Regular", + "postscriptName": "Dosis-Regular", + "category": "sans-serif", + "capHeight": 731, + "ascent": 1027, + "descent": -237, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 377, + "subsets": { + "latin": { + "xWidthAvg": 377 + }, + "thai": { + "xWidthAvg": 340 + } + } + } + } + }, + "dotGothic16": { + "familyName": "DotGothic16", + "fullName": "DotGothic16 Regular", + "postscriptName": "DotGothic16-Regular", + "category": "sans-serif", + "capHeight": 787, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "DotGothic16", + "fullName": "DotGothic16 Regular", + "postscriptName": "DotGothic16-Regular", + "category": "sans-serif", + "capHeight": 787, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "doto": { + "familyName": "Doto", + "fullName": "Doto Regular", + "postscriptName": "Doto-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "100": { + "familyName": "Doto", + "fullName": "Doto Thin", + "postscriptName": "Doto-Thin", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200": { + "familyName": "Doto", + "fullName": "Doto ExtraLight", + "postscriptName": "Doto-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Doto", + "fullName": "Doto Light", + "postscriptName": "Doto-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Doto", + "fullName": "Doto Medium", + "postscriptName": "Doto-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Doto", + "fullName": "Doto SemiBold", + "postscriptName": "Doto-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Doto", + "fullName": "Doto Bold", + "postscriptName": "Doto-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Doto", + "fullName": "Doto ExtraBold", + "postscriptName": "Doto-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "Doto", + "fullName": "Doto Black", + "postscriptName": "Doto-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Doto", + "fullName": "Doto Regular", + "postscriptName": "Doto-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "drSugiyama": { + "familyName": "Dr Sugiyama", + "fullName": "Dr Sugiyama Regular", + "postscriptName": "DrSugiyama-Regular", + "category": "handwriting", + "capHeight": 710, + "ascent": 1009, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 235, + "xWidthAvg": 308, + "subsets": { + "latin": { + "xWidthAvg": 308 + }, + "thai": { + "xWidthAvg": 234 + } + }, + "variants": { + "regular": { + "familyName": "Dr Sugiyama", + "fullName": "Dr Sugiyama Regular", + "postscriptName": "DrSugiyama-Regular", + "category": "handwriting", + "capHeight": 710, + "ascent": 1009, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 235, + "xWidthAvg": 308, + "subsets": { + "latin": { + "xWidthAvg": 308 + }, + "thai": { + "xWidthAvg": 234 + } + } + } + } + }, + "duruSans": { + "familyName": "Duru Sans", + "fullName": "Duru Sans Regular", + "postscriptName": "DuruSans-Regular", + "category": "sans-serif", + "capHeight": 1554, + "ascent": 2020, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1157, + "xWidthAvg": 1066, + "subsets": { + "latin": { + "xWidthAvg": 1066 + }, + "thai": { + "xWidthAvg": 1634 + } + }, + "variants": { + "regular": { + "familyName": "Duru Sans", + "fullName": "Duru Sans Regular", + "postscriptName": "DuruSans-Regular", + "category": "sans-serif", + "capHeight": 1554, + "ascent": 2020, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1157, + "xWidthAvg": 1066, + "subsets": { + "latin": { + "xWidthAvg": 1066 + }, + "thai": { + "xWidthAvg": 1634 + } + } + } + } + }, + "dynaPuff": { + "familyName": "DynaPuff", + "fullName": "DynaPuff Regular", + "postscriptName": "DynaPuff-Regular", + "category": "display", + "capHeight": 730, + "ascent": 965, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 620, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "500": { + "familyName": "DynaPuff", + "fullName": "DynaPuff Medium", + "postscriptName": "DynaPuff-Medium", + "category": "display", + "capHeight": 730, + "ascent": 965, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 620, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 608 + } + } + }, + "600": { + "familyName": "DynaPuff", + "fullName": "DynaPuff SemiBold", + "postscriptName": "DynaPuff-SemiBold", + "category": "display", + "capHeight": 730, + "ascent": 965, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 620, + "xWidthAvg": 514, + "subsets": { + "latin": { + "xWidthAvg": 514 + }, + "thai": { + "xWidthAvg": 615 + } + } + }, + "700": { + "familyName": "DynaPuff", + "fullName": "DynaPuff Bold", + "postscriptName": "DynaPuff-Bold", + "category": "display", + "capHeight": 730, + "ascent": 965, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 620, + "xWidthAvg": 517, + "subsets": { + "latin": { + "xWidthAvg": 517 + }, + "thai": { + "xWidthAvg": 620 + } + } + }, + "regular": { + "familyName": "DynaPuff", + "fullName": "DynaPuff Regular", + "postscriptName": "DynaPuff-Regular", + "category": "display", + "capHeight": 730, + "ascent": 965, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 620, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "dynalight": { + "familyName": "Dynalight", + "fullName": "Dynalight", + "postscriptName": "Dynalight-Regular", + "category": "display", + "capHeight": 1441, + "ascent": 1840, + "descent": -645, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 723, + "xWidthAvg": 629, + "subsets": { + "latin": { + "xWidthAvg": 629 + }, + "thai": { + "xWidthAvg": 490 + } + }, + "variants": { + "regular": { + "familyName": "Dynalight", + "fullName": "Dynalight", + "postscriptName": "Dynalight-Regular", + "category": "display", + "capHeight": 1441, + "ascent": 1840, + "descent": -645, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 723, + "xWidthAvg": 629, + "subsets": { + "latin": { + "xWidthAvg": 629 + }, + "thai": { + "xWidthAvg": 490 + } + } + } + } + }, + "eBGaramond": { + "familyName": "EB Garamond", + "fullName": "EB Garamond Regular", + "postscriptName": "EBGaramond-Regular", + "category": "serif", + "capHeight": 650, + "ascent": 1007, + "descent": -298, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 385, + "subsets": { + "latin": { + "xWidthAvg": 385 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "500": { + "familyName": "EB Garamond", + "fullName": "EB Garamond Medium", + "postscriptName": "EBGaramond-Medium", + "category": "serif", + "capHeight": 650, + "ascent": 1007, + "descent": -298, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 399, + "subsets": { + "latin": { + "xWidthAvg": 399 + }, + "thai": { + "xWidthAvg": 505 + } + } + }, + "600": { + "familyName": "EB Garamond", + "fullName": "EB Garamond SemiBold", + "postscriptName": "EBGaramond-SemiBold", + "category": "serif", + "capHeight": 650, + "ascent": 1007, + "descent": -298, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 509 + } + } + }, + "700": { + "familyName": "EB Garamond", + "fullName": "EB Garamond Bold", + "postscriptName": "EBGaramond-Bold", + "category": "serif", + "capHeight": 650, + "ascent": 1007, + "descent": -298, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 424, + "subsets": { + "latin": { + "xWidthAvg": 424 + }, + "thai": { + "xWidthAvg": 513 + } + } + }, + "800": { + "familyName": "EB Garamond", + "fullName": "EB Garamond ExtraBold", + "postscriptName": "EBGaramond-ExtraBold", + "category": "serif", + "capHeight": 650, + "ascent": 1007, + "descent": -298, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 516 + } + } + }, + "regular": { + "familyName": "EB Garamond", + "fullName": "EB Garamond Regular", + "postscriptName": "EBGaramond-Regular", + "category": "serif", + "capHeight": 650, + "ascent": 1007, + "descent": -298, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 385, + "subsets": { + "latin": { + "xWidthAvg": 385 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "EB Garamond", + "fullName": "EB Garamond Italic", + "postscriptName": "EBGaramond-Italic", + "category": "serif", + "capHeight": 650, + "ascent": 1007, + "descent": -298, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 376, + "subsets": { + "latin": { + "xWidthAvg": 376 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800italic": { + "familyName": "EB Garamond", + "fullName": "EB Garamond ExtraBold Italic", + "postscriptName": "EBGaramond-ExtraBoldItalic", + "category": "serif", + "capHeight": 650, + "ascent": 1007, + "descent": -298, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 516 + } + } + }, + "700italic": { + "familyName": "EB Garamond", + "fullName": "EB Garamond Bold Italic", + "postscriptName": "EBGaramond-BoldItalic", + "category": "serif", + "capHeight": 650, + "ascent": 1007, + "descent": -298, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 513 + } + } + }, + "600italic": { + "familyName": "EB Garamond", + "fullName": "EB Garamond SemiBold Italic", + "postscriptName": "EBGaramond-SemiBoldItalic", + "category": "serif", + "capHeight": 650, + "ascent": 1007, + "descent": -298, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 509 + } + } + }, + "500italic": { + "familyName": "EB Garamond", + "fullName": "EB Garamond Medium Italic", + "postscriptName": "EBGaramond-MediumItalic", + "category": "serif", + "capHeight": 650, + "ascent": 1007, + "descent": -298, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 395, + "subsets": { + "latin": { + "xWidthAvg": 395 + }, + "thai": { + "xWidthAvg": 505 + } + } + } + } + }, + "eagleLake": { + "familyName": "Eagle Lake", + "fullName": "Eagle Lake", + "postscriptName": "EagleLake-Regular", + "category": "handwriting", + "capHeight": 1518, + "ascent": 2420, + "descent": -925, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1094, + "xWidthAvg": 1170, + "subsets": { + "latin": { + "xWidthAvg": 1170 + }, + "thai": { + "xWidthAvg": 610 + } + }, + "variants": { + "regular": { + "familyName": "Eagle Lake", + "fullName": "Eagle Lake", + "postscriptName": "EagleLake-Regular", + "category": "handwriting", + "capHeight": 1518, + "ascent": 2420, + "descent": -925, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1094, + "xWidthAvg": 1170, + "subsets": { + "latin": { + "xWidthAvg": 1170 + }, + "thai": { + "xWidthAvg": 610 + } + } + } + } + }, + "eastSeaDokdo": { + "familyName": "East Sea Dokdo", + "fullName": "East Sea Dokdo Regular", + "postscriptName": "EastSeaDokdo-Regular", + "category": "handwriting", + "capHeight": 418, + "ascent": 706, + "descent": -294, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 239, + "xWidthAvg": 372, + "subsets": { + "latin": { + "xWidthAvg": 372 + }, + "thai": { + "xWidthAvg": 200 + } + }, + "variants": { + "regular": { + "familyName": "East Sea Dokdo", + "fullName": "East Sea Dokdo Regular", + "postscriptName": "EastSeaDokdo-Regular", + "category": "handwriting", + "capHeight": 418, + "ascent": 706, + "descent": -294, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 239, + "xWidthAvg": 372, + "subsets": { + "latin": { + "xWidthAvg": 372 + }, + "thai": { + "xWidthAvg": 200 + } + } + } + } + }, + "eater": { + "familyName": "Eater", + "fullName": "Eater", + "postscriptName": "Eater-Regular", + "category": "display", + "capHeight": 1729, + "ascent": 2898, + "descent": -919, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1706, + "xWidthAvg": 1251, + "subsets": { + "latin": { + "xWidthAvg": 1251 + }, + "thai": { + "xWidthAvg": 532 + } + }, + "variants": { + "regular": { + "familyName": "Eater", + "fullName": "Eater", + "postscriptName": "Eater-Regular", + "category": "display", + "capHeight": 1729, + "ascent": 2898, + "descent": -919, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1706, + "xWidthAvg": 1251, + "subsets": { + "latin": { + "xWidthAvg": 1251 + }, + "thai": { + "xWidthAvg": 532 + } + } + } + } + }, + "economica": { + "familyName": "Economica", + "fullName": "Economica", + "postscriptName": "Economica-Regular", + "category": "sans-serif", + "capHeight": 720, + "ascent": 949, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 308, + "subsets": { + "latin": { + "xWidthAvg": 308 + }, + "thai": { + "xWidthAvg": 190 + } + }, + "variants": { + "700": { + "familyName": "Economica", + "fullName": "Economica Bold", + "postscriptName": "Economica-Bold", + "category": "sans-serif", + "capHeight": 720, + "ascent": 949, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 537, + "xWidthAvg": 330, + "subsets": { + "latin": { + "xWidthAvg": 330 + }, + "thai": { + "xWidthAvg": 190 + } + } + }, + "regular": { + "familyName": "Economica", + "fullName": "Economica", + "postscriptName": "Economica-Regular", + "category": "sans-serif", + "capHeight": 720, + "ascent": 949, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 308, + "subsets": { + "latin": { + "xWidthAvg": 308 + }, + "thai": { + "xWidthAvg": 190 + } + } + }, + "italic": { + "familyName": "Economica", + "fullName": "Economica Italic", + "postscriptName": "Economica-Italic", + "category": "sans-serif", + "capHeight": 720, + "ascent": 949, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 537, + "xWidthAvg": 309, + "subsets": { + "latin": { + "xWidthAvg": 309 + }, + "thai": { + "xWidthAvg": 190 + } + } + }, + "700italic": { + "familyName": "Economica", + "fullName": "Economica Bold Italic", + "postscriptName": "Economica-BoldItalic", + "category": "sans-serif", + "capHeight": 720, + "ascent": 949, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 538, + "xWidthAvg": 310, + "subsets": { + "latin": { + "xWidthAvg": 310 + }, + "thai": { + "xWidthAvg": 190 + } + } + } + } + }, + "eczar": { + "familyName": "Eczar", + "fullName": "Eczar Regular", + "postscriptName": "Eczar-Regular", + "category": "serif", + "capHeight": 650, + "ascent": 1143, + "descent": -634, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "500": { + "familyName": "Eczar", + "fullName": "Eczar Medium", + "postscriptName": "Eczar-Medium", + "category": "serif", + "capHeight": 650, + "ascent": 1143, + "descent": -634, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "600": { + "familyName": "Eczar", + "fullName": "Eczar SemiBold", + "postscriptName": "Eczar-SemiBold", + "category": "serif", + "capHeight": 650, + "ascent": 1143, + "descent": -634, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "700": { + "familyName": "Eczar", + "fullName": "Eczar Bold", + "postscriptName": "Eczar-Bold", + "category": "serif", + "capHeight": 650, + "ascent": 1143, + "descent": -634, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "800": { + "familyName": "Eczar", + "fullName": "Eczar ExtraBold", + "postscriptName": "Eczar-ExtraBold", + "category": "serif", + "capHeight": 650, + "ascent": 1143, + "descent": -634, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 499, + "subsets": { + "latin": { + "xWidthAvg": 499 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "regular": { + "familyName": "Eczar", + "fullName": "Eczar Regular", + "postscriptName": "Eczar-Regular", + "category": "serif", + "capHeight": 650, + "ascent": 1143, + "descent": -634, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "eduAUVICWANTDots": { + "familyName": "Edu AU VIC WA NT Dots", + "fullName": "Edu AU VIC WA NT Dots Regular", + "postscriptName": "EduAUVICWANTDots-Regular", + "category": "handwriting", + "capHeight": 1847, + "ascent": 2576, + "descent": -903, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 995, + "xWidthAvg": 984, + "subsets": { + "latin": { + "xWidthAvg": 984 + }, + "thai": { + "xWidthAvg": 1245 + } + }, + "variants": { + "500": { + "familyName": "Edu AU VIC WA NT Dots", + "fullName": "Edu AU VIC WA NT Dots Medium", + "postscriptName": "EduAUVICWANTDots-Medium", + "category": "handwriting", + "capHeight": 1841, + "ascent": 2576, + "descent": -903, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 995, + "xWidthAvg": 1027, + "subsets": { + "latin": { + "xWidthAvg": 1027 + }, + "thai": { + "xWidthAvg": 1307 + } + } + }, + "600": { + "familyName": "Edu AU VIC WA NT Dots", + "fullName": "Edu AU VIC WA NT Dots SemiBold", + "postscriptName": "EduAUVICWANTDots-SemiBold", + "category": "handwriting", + "capHeight": 1837, + "ascent": 2576, + "descent": -903, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 995, + "xWidthAvg": 1058, + "subsets": { + "latin": { + "xWidthAvg": 1058 + }, + "thai": { + "xWidthAvg": 1351 + } + } + }, + "700": { + "familyName": "Edu AU VIC WA NT Dots", + "fullName": "Edu AU VIC WA NT Dots Bold", + "postscriptName": "EduAUVICWANTDots-Bold", + "category": "handwriting", + "capHeight": 1835, + "ascent": 2576, + "descent": -903, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 995, + "xWidthAvg": 1077, + "subsets": { + "latin": { + "xWidthAvg": 1077 + }, + "thai": { + "xWidthAvg": 1378 + } + } + }, + "regular": { + "familyName": "Edu AU VIC WA NT Dots", + "fullName": "Edu AU VIC WA NT Dots Regular", + "postscriptName": "EduAUVICWANTDots-Regular", + "category": "handwriting", + "capHeight": 1847, + "ascent": 2576, + "descent": -903, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 995, + "xWidthAvg": 984, + "subsets": { + "latin": { + "xWidthAvg": 984 + }, + "thai": { + "xWidthAvg": 1245 + } + } + } + } + }, + "eduAUVICWANTGuides": { + "familyName": "Edu AU VIC WA NT Guides", + "fullName": "Edu AU VIC WA NT Guides Regular", + "postscriptName": "EduAUVICWANTGuides-Regular", + "category": "handwriting", + "capHeight": 1847, + "ascent": 2576, + "descent": -903, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 995, + "xWidthAvg": 838, + "subsets": { + "latin": { + "xWidthAvg": 838 + }, + "thai": { + "xWidthAvg": 1245 + } + }, + "variants": { + "500": { + "familyName": "Edu AU VIC WA NT Guides", + "fullName": "Edu AU VIC WA NT Guides Medium", + "postscriptName": "EduAUVICWANTGuides-Medium", + "category": "handwriting", + "capHeight": 1841, + "ascent": 2576, + "descent": -903, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 995, + "xWidthAvg": 874, + "subsets": { + "latin": { + "xWidthAvg": 874 + }, + "thai": { + "xWidthAvg": 1307 + } + } + }, + "600": { + "familyName": "Edu AU VIC WA NT Guides", + "fullName": "Edu AU VIC WA NT Guides SemiBold", + "postscriptName": "EduAUVICWANTGuides-SemiBold", + "category": "handwriting", + "capHeight": 1837, + "ascent": 2576, + "descent": -903, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 995, + "xWidthAvg": 900, + "subsets": { + "latin": { + "xWidthAvg": 900 + }, + "thai": { + "xWidthAvg": 1351 + } + } + }, + "700": { + "familyName": "Edu AU VIC WA NT Guides", + "fullName": "Edu AU VIC WA NT Guides Bold", + "postscriptName": "EduAUVICWANTGuides-Bold", + "category": "handwriting", + "capHeight": 1835, + "ascent": 2576, + "descent": -903, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 995, + "xWidthAvg": 915, + "subsets": { + "latin": { + "xWidthAvg": 915 + }, + "thai": { + "xWidthAvg": 1378 + } + } + }, + "regular": { + "familyName": "Edu AU VIC WA NT Guides", + "fullName": "Edu AU VIC WA NT Guides Regular", + "postscriptName": "EduAUVICWANTGuides-Regular", + "category": "handwriting", + "capHeight": 1847, + "ascent": 2576, + "descent": -903, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 995, + "xWidthAvg": 838, + "subsets": { + "latin": { + "xWidthAvg": 838 + }, + "thai": { + "xWidthAvg": 1245 + } + } + } + } + }, + "eduAUVICWANTHand": { + "familyName": "Edu AU VIC WA NT Hand", + "fullName": "Edu AU VIC WA NT Hand Regular", + "postscriptName": "EduAUVICWANTHand-Regular", + "category": "handwriting", + "capHeight": 1847, + "ascent": 2576, + "descent": -903, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 995, + "xWidthAvg": 838, + "subsets": { + "latin": { + "xWidthAvg": 838 + }, + "thai": { + "xWidthAvg": 1245 + } + }, + "variants": { + "500": { + "familyName": "Edu AU VIC WA NT Hand", + "fullName": "Edu AU VIC WA NT Hand Medium", + "postscriptName": "EduAUVICWANTHand-Medium", + "category": "handwriting", + "capHeight": 1841, + "ascent": 2576, + "descent": -903, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 995, + "xWidthAvg": 874, + "subsets": { + "latin": { + "xWidthAvg": 874 + }, + "thai": { + "xWidthAvg": 1307 + } + } + }, + "600": { + "familyName": "Edu AU VIC WA NT Hand", + "fullName": "Edu AU VIC WA NT Hand SemiBold", + "postscriptName": "EduAUVICWANTHand-SemiBold", + "category": "handwriting", + "capHeight": 1837, + "ascent": 2576, + "descent": -903, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 995, + "xWidthAvg": 900, + "subsets": { + "latin": { + "xWidthAvg": 900 + }, + "thai": { + "xWidthAvg": 1351 + } + } + }, + "700": { + "familyName": "Edu AU VIC WA NT Hand", + "fullName": "Edu AU VIC WA NT Hand Bold", + "postscriptName": "EduAUVICWANTHand-Bold", + "category": "handwriting", + "capHeight": 1835, + "ascent": 2576, + "descent": -903, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 995, + "xWidthAvg": 916, + "subsets": { + "latin": { + "xWidthAvg": 916 + }, + "thai": { + "xWidthAvg": 1378 + } + } + }, + "regular": { + "familyName": "Edu AU VIC WA NT Hand", + "fullName": "Edu AU VIC WA NT Hand Regular", + "postscriptName": "EduAUVICWANTHand-Regular", + "category": "handwriting", + "capHeight": 1847, + "ascent": 2576, + "descent": -903, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 995, + "xWidthAvg": 838, + "subsets": { + "latin": { + "xWidthAvg": 838 + }, + "thai": { + "xWidthAvg": 1245 + } + } + } + } + }, + "eduAUVICWANTPre": { + "familyName": "Edu AU VIC WA NT Pre", + "fullName": "Edu AU VIC WA NT Pre Regular", + "postscriptName": "EduAUVICWANTPre-Regular", + "category": "handwriting", + "capHeight": 1847, + "ascent": 2576, + "descent": -903, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 995, + "xWidthAvg": 838, + "subsets": { + "latin": { + "xWidthAvg": 838 + }, + "thai": { + "xWidthAvg": 1245 + } + }, + "variants": { + "500": { + "familyName": "Edu AU VIC WA NT Pre", + "fullName": "Edu AU VIC WA NT Pre Medium", + "postscriptName": "EduAUVICWANTPre-Medium", + "category": "handwriting", + "capHeight": 1841, + "ascent": 2576, + "descent": -903, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 995, + "xWidthAvg": 874, + "subsets": { + "latin": { + "xWidthAvg": 874 + }, + "thai": { + "xWidthAvg": 1307 + } + } + }, + "600": { + "familyName": "Edu AU VIC WA NT Pre", + "fullName": "Edu AU VIC WA NT Pre SemiBold", + "postscriptName": "EduAUVICWANTPre-SemiBold", + "category": "handwriting", + "capHeight": 1837, + "ascent": 2576, + "descent": -903, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 995, + "xWidthAvg": 900, + "subsets": { + "latin": { + "xWidthAvg": 900 + }, + "thai": { + "xWidthAvg": 1351 + } + } + }, + "700": { + "familyName": "Edu AU VIC WA NT Pre", + "fullName": "Edu AU VIC WA NT Pre Bold", + "postscriptName": "EduAUVICWANTPre-Bold", + "category": "handwriting", + "capHeight": 1835, + "ascent": 2576, + "descent": -903, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 995, + "xWidthAvg": 915, + "subsets": { + "latin": { + "xWidthAvg": 915 + }, + "thai": { + "xWidthAvg": 1378 + } + } + }, + "regular": { + "familyName": "Edu AU VIC WA NT Pre", + "fullName": "Edu AU VIC WA NT Pre Regular", + "postscriptName": "EduAUVICWANTPre-Regular", + "category": "handwriting", + "capHeight": 1847, + "ascent": 2576, + "descent": -903, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 995, + "xWidthAvg": 838, + "subsets": { + "latin": { + "xWidthAvg": 838 + }, + "thai": { + "xWidthAvg": 1245 + } + } + } + } + }, + "eduNSWACTFoundation": { + "familyName": "Edu NSW ACT Foundation", + "fullName": "Edu NSW ACT Foundation Regular", + "postscriptName": "EduNSWACTFoundation-Regular", + "category": "handwriting", + "capHeight": 772, + "ascent": 1016, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 350, + "subsets": { + "latin": { + "xWidthAvg": 350 + }, + "thai": { + "xWidthAvg": 684 + } + }, + "variants": { + "500": { + "familyName": "Edu NSW ACT Foundation", + "fullName": "Edu NSW ACT Foundation Medium", + "postscriptName": "EduNSWACTFoundation-Medium", + "category": "handwriting", + "capHeight": 772, + "ascent": 1016, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 365, + "subsets": { + "latin": { + "xWidthAvg": 365 + }, + "thai": { + "xWidthAvg": 709 + } + } + }, + "600": { + "familyName": "Edu NSW ACT Foundation", + "fullName": "Edu NSW ACT Foundation SemiBold", + "postscriptName": "EduNSWACTFoundation-SemiBold", + "category": "handwriting", + "capHeight": 772, + "ascent": 1016, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 383, + "subsets": { + "latin": { + "xWidthAvg": 383 + }, + "thai": { + "xWidthAvg": 739 + } + } + }, + "700": { + "familyName": "Edu NSW ACT Foundation", + "fullName": "Edu NSW ACT Foundation Bold", + "postscriptName": "EduNSWACTFoundation-Bold", + "category": "handwriting", + "capHeight": 772, + "ascent": 1016, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 395, + "subsets": { + "latin": { + "xWidthAvg": 395 + }, + "thai": { + "xWidthAvg": 759 + } + } + }, + "regular": { + "familyName": "Edu NSW ACT Foundation", + "fullName": "Edu NSW ACT Foundation Regular", + "postscriptName": "EduNSWACTFoundation-Regular", + "category": "handwriting", + "capHeight": 772, + "ascent": 1016, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 350, + "subsets": { + "latin": { + "xWidthAvg": 350 + }, + "thai": { + "xWidthAvg": 684 + } + } + } + } + }, + "eduQLDBeginner": { + "familyName": "Edu QLD Beginner", + "fullName": "Edu QLD Beginner Regular", + "postscriptName": "EduQLDBeginner-Regular", + "category": "handwriting", + "capHeight": 772, + "ascent": 1016, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 382, + "subsets": { + "latin": { + "xWidthAvg": 382 + }, + "thai": { + "xWidthAvg": 743 + } + }, + "variants": { + "500": { + "familyName": "Edu QLD Beginner", + "fullName": "Edu QLD Beginner Medium", + "postscriptName": "EduQLDBeginner-Medium", + "category": "handwriting", + "capHeight": 772, + "ascent": 1016, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 400, + "subsets": { + "latin": { + "xWidthAvg": 400 + }, + "thai": { + "xWidthAvg": 771 + } + } + }, + "600": { + "familyName": "Edu QLD Beginner", + "fullName": "Edu QLD Beginner SemiBold", + "postscriptName": "EduQLDBeginner-SemiBold", + "category": "handwriting", + "capHeight": 772, + "ascent": 1016, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 420, + "subsets": { + "latin": { + "xWidthAvg": 420 + }, + "thai": { + "xWidthAvg": 805 + } + } + }, + "700": { + "familyName": "Edu QLD Beginner", + "fullName": "Edu QLD Beginner Bold", + "postscriptName": "EduQLDBeginner-Bold", + "category": "handwriting", + "capHeight": 772, + "ascent": 1016, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 828 + } + } + }, + "regular": { + "familyName": "Edu QLD Beginner", + "fullName": "Edu QLD Beginner Regular", + "postscriptName": "EduQLDBeginner-Regular", + "category": "handwriting", + "capHeight": 772, + "ascent": 1016, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 382, + "subsets": { + "latin": { + "xWidthAvg": 382 + }, + "thai": { + "xWidthAvg": 743 + } + } + } + } + }, + "eduSABeginner": { + "familyName": "Edu SA Beginner", + "fullName": "Edu SA Beginner Regular", + "postscriptName": "EduSABeginner-Regular", + "category": "handwriting", + "capHeight": 772, + "ascent": 1016, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 363, + "subsets": { + "latin": { + "xWidthAvg": 363 + }, + "thai": { + "xWidthAvg": 684 + } + }, + "variants": { + "500": { + "familyName": "Edu SA Beginner", + "fullName": "Edu SA Beginner Medium", + "postscriptName": "EduSABeginner-Medium", + "category": "handwriting", + "capHeight": 772, + "ascent": 1016, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 376, + "subsets": { + "latin": { + "xWidthAvg": 376 + }, + "thai": { + "xWidthAvg": 698 + } + } + }, + "600": { + "familyName": "Edu SA Beginner", + "fullName": "Edu SA Beginner SemiBold", + "postscriptName": "EduSABeginner-SemiBold", + "category": "handwriting", + "capHeight": 772, + "ascent": 1016, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 391, + "subsets": { + "latin": { + "xWidthAvg": 391 + }, + "thai": { + "xWidthAvg": 715 + } + } + }, + "700": { + "familyName": "Edu SA Beginner", + "fullName": "Edu SA Beginner Bold", + "postscriptName": "EduSABeginner-Bold", + "category": "handwriting", + "capHeight": 772, + "ascent": 1016, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 402, + "subsets": { + "latin": { + "xWidthAvg": 402 + }, + "thai": { + "xWidthAvg": 726 + } + } + }, + "regular": { + "familyName": "Edu SA Beginner", + "fullName": "Edu SA Beginner Regular", + "postscriptName": "EduSABeginner-Regular", + "category": "handwriting", + "capHeight": 772, + "ascent": 1016, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 363, + "subsets": { + "latin": { + "xWidthAvg": 363 + }, + "thai": { + "xWidthAvg": 684 + } + } + } + } + }, + "eduTASBeginner": { + "familyName": "Edu TAS Beginner", + "fullName": "Edu TAS Beginner Regular", + "postscriptName": "EduTASBeginner-Regular", + "category": "handwriting", + "capHeight": 772, + "ascent": 1016, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 384, + "subsets": { + "latin": { + "xWidthAvg": 384 + }, + "thai": { + "xWidthAvg": 674 + } + }, + "variants": { + "500": { + "familyName": "Edu TAS Beginner", + "fullName": "Edu TAS Beginner Medium", + "postscriptName": "EduTASBeginner-Medium", + "category": "handwriting", + "capHeight": 772, + "ascent": 1016, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 391, + "subsets": { + "latin": { + "xWidthAvg": 391 + }, + "thai": { + "xWidthAvg": 704 + } + } + }, + "600": { + "familyName": "Edu TAS Beginner", + "fullName": "Edu TAS Beginner SemiBold", + "postscriptName": "EduTASBeginner-SemiBold", + "category": "handwriting", + "capHeight": 772, + "ascent": 1016, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 399, + "subsets": { + "latin": { + "xWidthAvg": 399 + }, + "thai": { + "xWidthAvg": 739 + } + } + }, + "700": { + "familyName": "Edu TAS Beginner", + "fullName": "Edu TAS Beginner Bold", + "postscriptName": "EduTASBeginner-Bold", + "category": "handwriting", + "capHeight": 772, + "ascent": 1016, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 404, + "subsets": { + "latin": { + "xWidthAvg": 404 + }, + "thai": { + "xWidthAvg": 763 + } + } + }, + "regular": { + "familyName": "Edu TAS Beginner", + "fullName": "Edu TAS Beginner Regular", + "postscriptName": "EduTASBeginner-Regular", + "category": "handwriting", + "capHeight": 772, + "ascent": 1016, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 384, + "subsets": { + "latin": { + "xWidthAvg": 384 + }, + "thai": { + "xWidthAvg": 674 + } + } + } + } + }, + "eduVICWANTBeginner": { + "familyName": "Edu VIC WA NT Beginner", + "fullName": "Edu VIC WA NT Beginner Regular", + "postscriptName": "EduVICWANTBeginner-Regular", + "category": "handwriting", + "capHeight": 772, + "ascent": 1016, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 378, + "subsets": { + "latin": { + "xWidthAvg": 378 + }, + "thai": { + "xWidthAvg": 743 + } + }, + "variants": { + "500": { + "familyName": "Edu VIC WA NT Beginner", + "fullName": "Edu VIC WA NT Beginner Medium", + "postscriptName": "EduVICWANTBeginner-Medium", + "category": "handwriting", + "capHeight": 772, + "ascent": 1016, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 394, + "subsets": { + "latin": { + "xWidthAvg": 394 + }, + "thai": { + "xWidthAvg": 771 + } + } + }, + "600": { + "familyName": "Edu VIC WA NT Beginner", + "fullName": "Edu VIC WA NT Beginner SemiBold", + "postscriptName": "EduVICWANTBeginner-SemiBold", + "category": "handwriting", + "capHeight": 772, + "ascent": 1016, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 414, + "subsets": { + "latin": { + "xWidthAvg": 414 + }, + "thai": { + "xWidthAvg": 805 + } + } + }, + "700": { + "familyName": "Edu VIC WA NT Beginner", + "fullName": "Edu VIC WA NT Beginner Bold", + "postscriptName": "EduVICWANTBeginner-Bold", + "category": "handwriting", + "capHeight": 772, + "ascent": 1016, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 828 + } + } + }, + "regular": { + "familyName": "Edu VIC WA NT Beginner", + "fullName": "Edu VIC WA NT Beginner Regular", + "postscriptName": "EduVICWANTBeginner-Regular", + "category": "handwriting", + "capHeight": 772, + "ascent": 1016, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 378, + "subsets": { + "latin": { + "xWidthAvg": 378 + }, + "thai": { + "xWidthAvg": 743 + } + } + } + } + }, + "elMessiri": { + "familyName": "El Messiri", + "fullName": "El Messiri Regular", + "postscriptName": "ElMessiri-Regular", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1019, + "descent": -544, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "500": { + "familyName": "El Messiri", + "fullName": "El Messiri Medium", + "postscriptName": "ElMessiri-Medium", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1019, + "descent": -544, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 432, + "subsets": { + "latin": { + "xWidthAvg": 432 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "El Messiri", + "fullName": "El Messiri SemiBold", + "postscriptName": "ElMessiri-SemiBold", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1019, + "descent": -544, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "El Messiri", + "fullName": "El Messiri Bold", + "postscriptName": "ElMessiri-Bold", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1019, + "descent": -544, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "El Messiri", + "fullName": "El Messiri Regular", + "postscriptName": "ElMessiri-Regular", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1019, + "descent": -544, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "electrolize": { + "familyName": "Electrolize", + "fullName": "Electrolize", + "postscriptName": "Electrolize-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 911, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 1210 + } + }, + "variants": { + "regular": { + "familyName": "Electrolize", + "fullName": "Electrolize", + "postscriptName": "Electrolize-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 911, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 1210 + } + } + } + } + }, + "elsie": { + "familyName": "Elsie", + "fullName": "Elsie Regular", + "postscriptName": "Elsie-Regular", + "category": "display", + "capHeight": 650, + "ascent": 878, + "descent": -274, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 200 + } + }, + "variants": { + "900": { + "familyName": "Elsie", + "fullName": "Elsie Black", + "postscriptName": "Elsie-Black", + "category": "display", + "capHeight": 700, + "ascent": 878, + "descent": -274, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 200 + } + } + }, + "regular": { + "familyName": "Elsie", + "fullName": "Elsie Regular", + "postscriptName": "Elsie-Regular", + "category": "display", + "capHeight": 650, + "ascent": 878, + "descent": -274, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 200 + } + } + } + } + }, + "elsieSwashCaps": { + "familyName": "Elsie Swash Caps", + "fullName": "Elsie Swash Caps Regular", + "postscriptName": "ElsieSwashCaps-Regular", + "category": "display", + "capHeight": 650, + "ascent": 878, + "descent": -274, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 200 + } + }, + "variants": { + "900": { + "familyName": "Elsie Swash Caps", + "fullName": "Elsie Swash Caps Black", + "postscriptName": "ElsieSwashCaps-Black", + "category": "display", + "capHeight": 700, + "ascent": 878, + "descent": -274, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 200 + } + } + }, + "regular": { + "familyName": "Elsie Swash Caps", + "fullName": "Elsie Swash Caps Regular", + "postscriptName": "ElsieSwashCaps-Regular", + "category": "display", + "capHeight": 650, + "ascent": 878, + "descent": -274, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 200 + } + } + } + } + }, + "emblemaOne": { + "familyName": "Emblema One", + "fullName": "Emblema One", + "postscriptName": "EmblemaOne-Regular", + "category": "display", + "capHeight": 1361, + "ascent": 1898, + "descent": -546, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1002, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 511 + } + }, + "variants": { + "regular": { + "familyName": "Emblema One", + "fullName": "Emblema One", + "postscriptName": "EmblemaOne-Regular", + "category": "display", + "capHeight": 1361, + "ascent": 1898, + "descent": -546, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1002, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 511 + } + } + } + } + }, + "emilysCandy": { + "familyName": "Emilys Candy", + "fullName": "Emilys Candy", + "postscriptName": "EmilysCandy-Regular", + "category": "display", + "capHeight": 762, + "ascent": 996, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 529, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 307 + } + }, + "variants": { + "regular": { + "familyName": "Emilys Candy", + "fullName": "Emilys Candy", + "postscriptName": "EmilysCandy-Regular", + "category": "display", + "capHeight": 762, + "ascent": 996, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 529, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 307 + } + } + } + } + }, + "encodeSans": { + "familyName": "Encode Sans", + "fullName": "Encode Sans Regular", + "postscriptName": "EncodeSans-Regular", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 884, + "subsets": { + "latin": { + "xWidthAvg": 884 + }, + "thai": { + "xWidthAvg": 1214 + } + }, + "variants": { + "100": { + "familyName": "Encode Sans", + "fullName": "Encode Sans Thin", + "postscriptName": "EncodeSans-Thin", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 839, + "subsets": { + "latin": { + "xWidthAvg": 839 + }, + "thai": { + "xWidthAvg": 1214 + } + } + }, + "200": { + "familyName": "Encode Sans", + "fullName": "Encode Sans ExtraLight", + "postscriptName": "EncodeSans-ExtraLight", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 849, + "subsets": { + "latin": { + "xWidthAvg": 849 + }, + "thai": { + "xWidthAvg": 1214 + } + } + }, + "300": { + "familyName": "Encode Sans", + "fullName": "Encode Sans Light", + "postscriptName": "EncodeSans-Light", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 863, + "subsets": { + "latin": { + "xWidthAvg": 863 + }, + "thai": { + "xWidthAvg": 1214 + } + } + }, + "500": { + "familyName": "Encode Sans", + "fullName": "Encode Sans Medium", + "postscriptName": "EncodeSans-Medium", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 908, + "subsets": { + "latin": { + "xWidthAvg": 908 + }, + "thai": { + "xWidthAvg": 1214 + } + } + }, + "600": { + "familyName": "Encode Sans", + "fullName": "Encode Sans SemiBold", + "postscriptName": "EncodeSans-SemiBold", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 935, + "subsets": { + "latin": { + "xWidthAvg": 935 + }, + "thai": { + "xWidthAvg": 1214 + } + } + }, + "700": { + "familyName": "Encode Sans", + "fullName": "Encode Sans Bold", + "postscriptName": "EncodeSans-Bold", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 963, + "subsets": { + "latin": { + "xWidthAvg": 963 + }, + "thai": { + "xWidthAvg": 1214 + } + } + }, + "800": { + "familyName": "Encode Sans", + "fullName": "Encode Sans ExtraBold", + "postscriptName": "EncodeSans-ExtraBold", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 991, + "subsets": { + "latin": { + "xWidthAvg": 991 + }, + "thai": { + "xWidthAvg": 1214 + } + } + }, + "900": { + "familyName": "Encode Sans", + "fullName": "Encode Sans Black", + "postscriptName": "EncodeSans-Black", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 1015, + "subsets": { + "latin": { + "xWidthAvg": 1015 + }, + "thai": { + "xWidthAvg": 1214 + } + } + }, + "regular": { + "familyName": "Encode Sans", + "fullName": "Encode Sans Regular", + "postscriptName": "EncodeSans-Regular", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 884, + "subsets": { + "latin": { + "xWidthAvg": 884 + }, + "thai": { + "xWidthAvg": 1214 + } + } + } + } + }, + "encodeSansCondensed": { + "familyName": "Encode Sans Condensed", + "fullName": "Encode Sans Condensed Regular", + "postscriptName": "EncodeSansCondensed-Regular", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1085, + "xWidthAvg": 762, + "subsets": { + "latin": { + "xWidthAvg": 762 + }, + "thai": { + "xWidthAvg": 1028 + } + }, + "variants": { + "100": { + "familyName": "Encode Sans Condensed", + "fullName": "Encode Sans Condensed Thin", + "postscriptName": "EncodeSansCondensed-Thin", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 722, + "subsets": { + "latin": { + "xWidthAvg": 722 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "200": { + "familyName": "Encode Sans Condensed", + "fullName": "Encode Sans Condensed ExtraLight", + "postscriptName": "EncodeSansCondensed-ExtraLight", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1081, + "xWidthAvg": 732, + "subsets": { + "latin": { + "xWidthAvg": 732 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "300": { + "familyName": "Encode Sans Condensed", + "fullName": "Encode Sans Condensed Light", + "postscriptName": "EncodeSansCondensed-Light", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1083, + "xWidthAvg": 745, + "subsets": { + "latin": { + "xWidthAvg": 745 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "500": { + "familyName": "Encode Sans Condensed", + "fullName": "Encode Sans Condensed Medium", + "postscriptName": "EncodeSansCondensed-Medium", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1088, + "xWidthAvg": 781, + "subsets": { + "latin": { + "xWidthAvg": 781 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "600": { + "familyName": "Encode Sans Condensed", + "fullName": "Encode Sans Condensed SemiBold", + "postscriptName": "EncodeSansCondensed-SemiBold", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1091, + "xWidthAvg": 804, + "subsets": { + "latin": { + "xWidthAvg": 804 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "700": { + "familyName": "Encode Sans Condensed", + "fullName": "Encode Sans Condensed Bold", + "postscriptName": "EncodeSansCondensed-Bold", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1094, + "xWidthAvg": 828, + "subsets": { + "latin": { + "xWidthAvg": 828 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "800": { + "familyName": "Encode Sans Condensed", + "fullName": "Encode Sans Condensed ExtraBold", + "postscriptName": "EncodeSansCondensed-ExtraBold", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1097, + "xWidthAvg": 851, + "subsets": { + "latin": { + "xWidthAvg": 851 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "900": { + "familyName": "Encode Sans Condensed", + "fullName": "Encode Sans Condensed Black", + "postscriptName": "EncodeSansCondensed-Black", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1100, + "xWidthAvg": 872, + "subsets": { + "latin": { + "xWidthAvg": 872 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "regular": { + "familyName": "Encode Sans Condensed", + "fullName": "Encode Sans Condensed Regular", + "postscriptName": "EncodeSansCondensed-Regular", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1085, + "xWidthAvg": 762, + "subsets": { + "latin": { + "xWidthAvg": 762 + }, + "thai": { + "xWidthAvg": 1028 + } + } + } + } + }, + "encodeSansExpanded": { + "familyName": "Encode Sans Expanded", + "fullName": "Encode Sans Expanded Regular", + "postscriptName": "EncodeSansExpanded-Regular", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1085, + "xWidthAvg": 1007, + "subsets": { + "latin": { + "xWidthAvg": 1007 + }, + "thai": { + "xWidthAvg": 1028 + } + }, + "variants": { + "100": { + "familyName": "Encode Sans Expanded", + "fullName": "Encode Sans Expanded Thin", + "postscriptName": "EncodeSansExpanded-Thin", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 955, + "subsets": { + "latin": { + "xWidthAvg": 955 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "200": { + "familyName": "Encode Sans Expanded", + "fullName": "Encode Sans Expanded ExtraLight", + "postscriptName": "EncodeSansExpanded-ExtraLight", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1081, + "xWidthAvg": 966, + "subsets": { + "latin": { + "xWidthAvg": 966 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "300": { + "familyName": "Encode Sans Expanded", + "fullName": "Encode Sans Expanded Light", + "postscriptName": "EncodeSansExpanded-Light", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1083, + "xWidthAvg": 984, + "subsets": { + "latin": { + "xWidthAvg": 984 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "500": { + "familyName": "Encode Sans Expanded", + "fullName": "Encode Sans Expanded Medium", + "postscriptName": "EncodeSansExpanded-Medium", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1088, + "xWidthAvg": 1034, + "subsets": { + "latin": { + "xWidthAvg": 1034 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "600": { + "familyName": "Encode Sans Expanded", + "fullName": "Encode Sans Expanded SemiBold", + "postscriptName": "EncodeSansExpanded-SemiBold", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1091, + "xWidthAvg": 1065, + "subsets": { + "latin": { + "xWidthAvg": 1065 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "700": { + "familyName": "Encode Sans Expanded", + "fullName": "Encode Sans Expanded Bold", + "postscriptName": "EncodeSansExpanded-Bold", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1094, + "xWidthAvg": 1098, + "subsets": { + "latin": { + "xWidthAvg": 1098 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "800": { + "familyName": "Encode Sans Expanded", + "fullName": "Encode Sans Expanded ExtraBold", + "postscriptName": "EncodeSansExpanded-ExtraBold", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1097, + "xWidthAvg": 1130, + "subsets": { + "latin": { + "xWidthAvg": 1130 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "900": { + "familyName": "Encode Sans Expanded", + "fullName": "Encode Sans Expanded Black", + "postscriptName": "EncodeSansExpanded-Black", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1100, + "xWidthAvg": 1159, + "subsets": { + "latin": { + "xWidthAvg": 1159 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "regular": { + "familyName": "Encode Sans Expanded", + "fullName": "Encode Sans Expanded Regular", + "postscriptName": "EncodeSansExpanded-Regular", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1085, + "xWidthAvg": 1007, + "subsets": { + "latin": { + "xWidthAvg": 1007 + }, + "thai": { + "xWidthAvg": 1028 + } + } + } + } + }, + "encodeSansSC": { + "familyName": "Encode Sans SC", + "fullName": "Encode Sans SC Regular", + "postscriptName": "EncodeSansSC-Regular", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 1001, + "subsets": { + "latin": { + "xWidthAvg": 1001 + }, + "thai": { + "xWidthAvg": 1214 + } + }, + "variants": { + "100": { + "familyName": "Encode Sans SC", + "fullName": "Encode Sans SC Thin", + "postscriptName": "EncodeSansSC-Thin", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 955, + "subsets": { + "latin": { + "xWidthAvg": 955 + }, + "thai": { + "xWidthAvg": 1214 + } + } + }, + "200": { + "familyName": "Encode Sans SC", + "fullName": "Encode Sans SC ExtraLight", + "postscriptName": "EncodeSansSC-ExtraLight", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 966, + "subsets": { + "latin": { + "xWidthAvg": 966 + }, + "thai": { + "xWidthAvg": 1214 + } + } + }, + "300": { + "familyName": "Encode Sans SC", + "fullName": "Encode Sans SC Light", + "postscriptName": "EncodeSansSC-Light", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 980, + "subsets": { + "latin": { + "xWidthAvg": 980 + }, + "thai": { + "xWidthAvg": 1214 + } + } + }, + "500": { + "familyName": "Encode Sans SC", + "fullName": "Encode Sans SC Medium", + "postscriptName": "EncodeSansSC-Medium", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 1026, + "subsets": { + "latin": { + "xWidthAvg": 1026 + }, + "thai": { + "xWidthAvg": 1214 + } + } + }, + "600": { + "familyName": "Encode Sans SC", + "fullName": "Encode Sans SC SemiBold", + "postscriptName": "EncodeSansSC-SemiBold", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 1053, + "subsets": { + "latin": { + "xWidthAvg": 1053 + }, + "thai": { + "xWidthAvg": 1214 + } + } + }, + "700": { + "familyName": "Encode Sans SC", + "fullName": "Encode Sans SC Bold", + "postscriptName": "EncodeSansSC-Bold", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 1081, + "subsets": { + "latin": { + "xWidthAvg": 1081 + }, + "thai": { + "xWidthAvg": 1214 + } + } + }, + "800": { + "familyName": "Encode Sans SC", + "fullName": "Encode Sans SC ExtraBold", + "postscriptName": "EncodeSansSC-ExtraBold", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 1110, + "subsets": { + "latin": { + "xWidthAvg": 1110 + }, + "thai": { + "xWidthAvg": 1214 + } + } + }, + "900": { + "familyName": "Encode Sans SC", + "fullName": "Encode Sans SC Black", + "postscriptName": "EncodeSansSC-Black", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 1135, + "subsets": { + "latin": { + "xWidthAvg": 1135 + }, + "thai": { + "xWidthAvg": 1214 + } + } + }, + "regular": { + "familyName": "Encode Sans SC", + "fullName": "Encode Sans SC Regular", + "postscriptName": "EncodeSansSC-Regular", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 1001, + "subsets": { + "latin": { + "xWidthAvg": 1001 + }, + "thai": { + "xWidthAvg": 1214 + } + } + } + } + }, + "encodeSansSemiCondensed": { + "familyName": "Encode Sans Semi Condensed", + "fullName": "Encode Sans Semi Condensed Regular", + "postscriptName": "EncodeSansSemiCondensed-Regular", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1085, + "xWidthAvg": 824, + "subsets": { + "latin": { + "xWidthAvg": 824 + }, + "thai": { + "xWidthAvg": 1028 + } + }, + "variants": { + "100": { + "familyName": "Encode Sans Semi Condensed", + "fullName": "Encode Sans Semi Condensed Thin", + "postscriptName": "EncodeSansSemiCondensed-Thin", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 781, + "subsets": { + "latin": { + "xWidthAvg": 781 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "200": { + "familyName": "Encode Sans Semi Condensed", + "fullName": "Encode Sans Semi Condensed ExtraLight", + "postscriptName": "EncodeSansSemiCondensed-ExtraLight", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1081, + "xWidthAvg": 790, + "subsets": { + "latin": { + "xWidthAvg": 790 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "300": { + "familyName": "Encode Sans Semi Condensed", + "fullName": "Encode Sans Semi Condensed Light", + "postscriptName": "EncodeSansSemiCondensed-Light", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1083, + "xWidthAvg": 805, + "subsets": { + "latin": { + "xWidthAvg": 805 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "500": { + "familyName": "Encode Sans Semi Condensed", + "fullName": "Encode Sans Semi Condensed Medium", + "postscriptName": "EncodeSansSemiCondensed-Medium", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1088, + "xWidthAvg": 846, + "subsets": { + "latin": { + "xWidthAvg": 846 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "600": { + "familyName": "Encode Sans Semi Condensed", + "fullName": "Encode Sans Semi Condensed SemiBold", + "postscriptName": "EncodeSansSemiCondensed-SemiBold", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1091, + "xWidthAvg": 869, + "subsets": { + "latin": { + "xWidthAvg": 869 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "700": { + "familyName": "Encode Sans Semi Condensed", + "fullName": "Encode Sans Semi Condensed Bold", + "postscriptName": "EncodeSansSemiCondensed-Bold", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1094, + "xWidthAvg": 895, + "subsets": { + "latin": { + "xWidthAvg": 895 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "800": { + "familyName": "Encode Sans Semi Condensed", + "fullName": "Encode Sans Semi Condensed ExtraBold", + "postscriptName": "EncodeSansSemiCondensed-ExtraBold", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1097, + "xWidthAvg": 921, + "subsets": { + "latin": { + "xWidthAvg": 921 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "900": { + "familyName": "Encode Sans Semi Condensed", + "fullName": "Encode Sans Semi Condensed Black", + "postscriptName": "EncodeSansSemiCondensed-Black", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1100, + "xWidthAvg": 944, + "subsets": { + "latin": { + "xWidthAvg": 944 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "regular": { + "familyName": "Encode Sans Semi Condensed", + "fullName": "Encode Sans Semi Condensed Regular", + "postscriptName": "EncodeSansSemiCondensed-Regular", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1085, + "xWidthAvg": 824, + "subsets": { + "latin": { + "xWidthAvg": 824 + }, + "thai": { + "xWidthAvg": 1028 + } + } + } + } + }, + "encodeSansSemiExpanded": { + "familyName": "Encode Sans Semi Expanded", + "fullName": "Encode Sans Semi Expanded Regular", + "postscriptName": "EncodeSansSemiExpanded-Regular", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1085, + "xWidthAvg": 944, + "subsets": { + "latin": { + "xWidthAvg": 944 + }, + "thai": { + "xWidthAvg": 1028 + } + }, + "variants": { + "100": { + "familyName": "Encode Sans Semi Expanded", + "fullName": "Encode Sans Semi Expanded Thin", + "postscriptName": "EncodeSansSemiExpanded-Thin", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 897, + "subsets": { + "latin": { + "xWidthAvg": 897 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "200": { + "familyName": "Encode Sans Semi Expanded", + "fullName": "Encode Sans Semi Expanded ExtraLight", + "postscriptName": "EncodeSansSemiExpanded-ExtraLight", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1081, + "xWidthAvg": 908, + "subsets": { + "latin": { + "xWidthAvg": 908 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "300": { + "familyName": "Encode Sans Semi Expanded", + "fullName": "Encode Sans Semi Expanded Light", + "postscriptName": "EncodeSansSemiExpanded-Light", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1083, + "xWidthAvg": 923, + "subsets": { + "latin": { + "xWidthAvg": 923 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "500": { + "familyName": "Encode Sans Semi Expanded", + "fullName": "Encode Sans Semi Expanded Medium", + "postscriptName": "EncodeSansSemiExpanded-Medium", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1088, + "xWidthAvg": 971, + "subsets": { + "latin": { + "xWidthAvg": 971 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "600": { + "familyName": "Encode Sans Semi Expanded", + "fullName": "Encode Sans Semi Expanded SemiBold", + "postscriptName": "EncodeSansSemiExpanded-SemiBold", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1091, + "xWidthAvg": 1000, + "subsets": { + "latin": { + "xWidthAvg": 1000 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "700": { + "familyName": "Encode Sans Semi Expanded", + "fullName": "Encode Sans Semi Expanded Bold", + "postscriptName": "EncodeSansSemiExpanded-Bold", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1094, + "xWidthAvg": 1032, + "subsets": { + "latin": { + "xWidthAvg": 1032 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "800": { + "familyName": "Encode Sans Semi Expanded", + "fullName": "Encode Sans Semi Expanded ExtraBold", + "postscriptName": "EncodeSansSemiExpanded-ExtraBold", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1097, + "xWidthAvg": 1060, + "subsets": { + "latin": { + "xWidthAvg": 1060 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "900": { + "familyName": "Encode Sans Semi Expanded", + "fullName": "Encode Sans Semi Expanded Black", + "postscriptName": "EncodeSansSemiExpanded-Black", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1100, + "xWidthAvg": 1087, + "subsets": { + "latin": { + "xWidthAvg": 1087 + }, + "thai": { + "xWidthAvg": 1028 + } + } + }, + "regular": { + "familyName": "Encode Sans Semi Expanded", + "fullName": "Encode Sans Semi Expanded Regular", + "postscriptName": "EncodeSansSemiExpanded-Regular", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 2060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1085, + "xWidthAvg": 944, + "subsets": { + "latin": { + "xWidthAvg": 944 + }, + "thai": { + "xWidthAvg": 1028 + } + } + } + } + }, + "engagement": { + "familyName": "Engagement", + "fullName": "Engagement", + "postscriptName": "Engagement-Regular", + "category": "handwriting", + "capHeight": 1500, + "ascent": 1843, + "descent": -684, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 653, + "xWidthAvg": 529, + "subsets": { + "latin": { + "xWidthAvg": 529 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "Engagement", + "fullName": "Engagement", + "postscriptName": "Engagement-Regular", + "category": "handwriting", + "capHeight": 1500, + "ascent": 1843, + "descent": -684, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 653, + "xWidthAvg": 529, + "subsets": { + "latin": { + "xWidthAvg": 529 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "englebert": { + "familyName": "Englebert", + "fullName": "Englebert", + "postscriptName": "Englebert-Regular", + "category": "sans-serif", + "capHeight": 1466, + "ascent": 954, + "descent": -311, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1077, + "xWidthAvg": 780, + "subsets": { + "latin": { + "xWidthAvg": 780 + }, + "thai": { + "xWidthAvg": 471 + } + }, + "variants": { + "regular": { + "familyName": "Englebert", + "fullName": "Englebert", + "postscriptName": "Englebert-Regular", + "category": "sans-serif", + "capHeight": 1466, + "ascent": 954, + "descent": -311, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1077, + "xWidthAvg": 780, + "subsets": { + "latin": { + "xWidthAvg": 780 + }, + "thai": { + "xWidthAvg": 471 + } + } + } + } + }, + "enriqueta": { + "familyName": "Enriqueta", + "fullName": "Enriqueta Regular", + "postscriptName": "Enriqueta-Regular", + "category": "serif", + "capHeight": 720, + "ascent": 1077, + "descent": -261, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 449, + "subsets": { + "latin": { + "xWidthAvg": 449 + }, + "thai": { + "xWidthAvg": 620 + } + }, + "variants": { + "500": { + "familyName": "Enriqueta", + "fullName": "Enriqueta Medium", + "postscriptName": "Enriqueta-Medium", + "category": "serif", + "capHeight": 720, + "ascent": 1077, + "descent": -261, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 482, + "xWidthAvg": 449, + "subsets": { + "latin": { + "xWidthAvg": 449 + }, + "thai": { + "xWidthAvg": 620 + } + } + }, + "600": { + "familyName": "Enriqueta", + "fullName": "Enriqueta SemiBold", + "postscriptName": "Enriqueta-SemiBold", + "category": "serif", + "capHeight": 720, + "ascent": 1077, + "descent": -261, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 620 + } + } + }, + "700": { + "familyName": "Enriqueta", + "fullName": "Enriqueta Bold", + "postscriptName": "Enriqueta-Bold", + "category": "serif", + "capHeight": 720, + "ascent": 1077, + "descent": -261, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 620 + } + } + }, + "regular": { + "familyName": "Enriqueta", + "fullName": "Enriqueta Regular", + "postscriptName": "Enriqueta-Regular", + "category": "serif", + "capHeight": 720, + "ascent": 1077, + "descent": -261, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 449, + "subsets": { + "latin": { + "xWidthAvg": 449 + }, + "thai": { + "xWidthAvg": 620 + } + } + } + } + }, + "ephesis": { + "familyName": "Ephesis", + "fullName": "Ephesis Regular", + "postscriptName": "Ephesis-Regular", + "category": "handwriting", + "capHeight": 670, + "ascent": 900, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 300, + "xWidthAvg": 311, + "subsets": { + "latin": { + "xWidthAvg": 311 + }, + "thai": { + "xWidthAvg": 538 + } + }, + "variants": { + "regular": { + "familyName": "Ephesis", + "fullName": "Ephesis Regular", + "postscriptName": "Ephesis-Regular", + "category": "handwriting", + "capHeight": 670, + "ascent": 900, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 300, + "xWidthAvg": 311, + "subsets": { + "latin": { + "xWidthAvg": 311 + }, + "thai": { + "xWidthAvg": 538 + } + } + } + } + }, + "epilogue": { + "familyName": "Epilogue", + "fullName": "Epilogue Regular", + "postscriptName": "Epilogue-Regular", + "category": "sans-serif", + "capHeight": 1475, + "ascent": 1580, + "descent": -470, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1062, + "xWidthAvg": 990, + "subsets": { + "latin": { + "xWidthAvg": 990 + }, + "thai": { + "xWidthAvg": 669 + } + }, + "variants": { + "100": { + "familyName": "Epilogue", + "fullName": "Epilogue Thin", + "postscriptName": "Epilogue-Thin", + "category": "sans-serif", + "capHeight": 1475, + "ascent": 1580, + "descent": -470, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1062, + "xWidthAvg": 951, + "subsets": { + "latin": { + "xWidthAvg": 951 + }, + "thai": { + "xWidthAvg": 669 + } + } + }, + "200": { + "familyName": "Epilogue", + "fullName": "Epilogue ExtraLight", + "postscriptName": "Epilogue-ExtraLight", + "category": "sans-serif", + "capHeight": 1475, + "ascent": 1580, + "descent": -470, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1062, + "xWidthAvg": 964, + "subsets": { + "latin": { + "xWidthAvg": 964 + }, + "thai": { + "xWidthAvg": 669 + } + } + }, + "300": { + "familyName": "Epilogue", + "fullName": "Epilogue Light", + "postscriptName": "Epilogue-Light", + "category": "sans-serif", + "capHeight": 1475, + "ascent": 1580, + "descent": -470, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1062, + "xWidthAvg": 977, + "subsets": { + "latin": { + "xWidthAvg": 977 + }, + "thai": { + "xWidthAvg": 669 + } + } + }, + "500": { + "familyName": "Epilogue", + "fullName": "Epilogue Medium", + "postscriptName": "Epilogue-Medium", + "category": "sans-serif", + "capHeight": 1475, + "ascent": 1580, + "descent": -470, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1062, + "xWidthAvg": 1005, + "subsets": { + "latin": { + "xWidthAvg": 1005 + }, + "thai": { + "xWidthAvg": 669 + } + } + }, + "600": { + "familyName": "Epilogue", + "fullName": "Epilogue SemiBold", + "postscriptName": "Epilogue-SemiBold", + "category": "sans-serif", + "capHeight": 1475, + "ascent": 1580, + "descent": -470, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1062, + "xWidthAvg": 1019, + "subsets": { + "latin": { + "xWidthAvg": 1019 + }, + "thai": { + "xWidthAvg": 669 + } + } + }, + "700": { + "familyName": "Epilogue", + "fullName": "Epilogue Bold", + "postscriptName": "Epilogue-Bold", + "category": "sans-serif", + "capHeight": 1475, + "ascent": 1580, + "descent": -470, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1062, + "xWidthAvg": 1034, + "subsets": { + "latin": { + "xWidthAvg": 1034 + }, + "thai": { + "xWidthAvg": 669 + } + } + }, + "800": { + "familyName": "Epilogue", + "fullName": "Epilogue ExtraBold", + "postscriptName": "Epilogue-ExtraBold", + "category": "sans-serif", + "capHeight": 1475, + "ascent": 1580, + "descent": -470, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1062, + "xWidthAvg": 1049, + "subsets": { + "latin": { + "xWidthAvg": 1049 + }, + "thai": { + "xWidthAvg": 669 + } + } + }, + "900": { + "familyName": "Epilogue", + "fullName": "Epilogue Black", + "postscriptName": "Epilogue-Black", + "category": "sans-serif", + "capHeight": 1475, + "ascent": 1580, + "descent": -470, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1062, + "xWidthAvg": 1064, + "subsets": { + "latin": { + "xWidthAvg": 1064 + }, + "thai": { + "xWidthAvg": 669 + } + } + }, + "regular": { + "familyName": "Epilogue", + "fullName": "Epilogue Regular", + "postscriptName": "Epilogue-Regular", + "category": "sans-serif", + "capHeight": 1475, + "ascent": 1580, + "descent": -470, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1062, + "xWidthAvg": 990, + "subsets": { + "latin": { + "xWidthAvg": 990 + }, + "thai": { + "xWidthAvg": 669 + } + } + }, + "italic": { + "familyName": "Epilogue", + "fullName": "Epilogue Italic", + "postscriptName": "Epilogue-Italic", + "category": "sans-serif", + "capHeight": 1475, + "ascent": 1580, + "descent": -470, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1062, + "xWidthAvg": 995, + "subsets": { + "latin": { + "xWidthAvg": 995 + }, + "thai": { + "xWidthAvg": 669 + } + } + }, + "900italic": { + "familyName": "Epilogue", + "fullName": "Epilogue Black Italic", + "postscriptName": "Epilogue-BlackItalic", + "category": "sans-serif", + "capHeight": 1475, + "ascent": 1580, + "descent": -470, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1062, + "xWidthAvg": 1072, + "subsets": { + "latin": { + "xWidthAvg": 1072 + }, + "thai": { + "xWidthAvg": 669 + } + } + }, + "800italic": { + "familyName": "Epilogue", + "fullName": "Epilogue ExtraBold Italic", + "postscriptName": "Epilogue-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 1475, + "ascent": 1580, + "descent": -470, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1062, + "xWidthAvg": 1057, + "subsets": { + "latin": { + "xWidthAvg": 1057 + }, + "thai": { + "xWidthAvg": 669 + } + } + }, + "700italic": { + "familyName": "Epilogue", + "fullName": "Epilogue Bold Italic", + "postscriptName": "Epilogue-BoldItalic", + "category": "sans-serif", + "capHeight": 1475, + "ascent": 1580, + "descent": -470, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1062, + "xWidthAvg": 1041, + "subsets": { + "latin": { + "xWidthAvg": 1041 + }, + "thai": { + "xWidthAvg": 669 + } + } + }, + "600italic": { + "familyName": "Epilogue", + "fullName": "Epilogue SemiBold Italic", + "postscriptName": "Epilogue-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 1475, + "ascent": 1580, + "descent": -470, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1062, + "xWidthAvg": 1026, + "subsets": { + "latin": { + "xWidthAvg": 1026 + }, + "thai": { + "xWidthAvg": 669 + } + } + }, + "500italic": { + "familyName": "Epilogue", + "fullName": "Epilogue Medium Italic", + "postscriptName": "Epilogue-MediumItalic", + "category": "sans-serif", + "capHeight": 1475, + "ascent": 1580, + "descent": -470, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1062, + "xWidthAvg": 1011, + "subsets": { + "latin": { + "xWidthAvg": 1011 + }, + "thai": { + "xWidthAvg": 669 + } + } + }, + "300italic": { + "familyName": "Epilogue", + "fullName": "Epilogue Light Italic", + "postscriptName": "Epilogue-LightItalic", + "category": "sans-serif", + "capHeight": 1475, + "ascent": 1580, + "descent": -470, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1062, + "xWidthAvg": 984, + "subsets": { + "latin": { + "xWidthAvg": 984 + }, + "thai": { + "xWidthAvg": 669 + } + } + }, + "200italic": { + "familyName": "Epilogue", + "fullName": "Epilogue ExtraLight Italic", + "postscriptName": "Epilogue-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 1475, + "ascent": 1580, + "descent": -470, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1062, + "xWidthAvg": 972, + "subsets": { + "latin": { + "xWidthAvg": 972 + }, + "thai": { + "xWidthAvg": 669 + } + } + }, + "100italic": { + "familyName": "Epilogue", + "fullName": "Epilogue Thin Italic", + "postscriptName": "Epilogue-ThinItalic", + "category": "sans-serif", + "capHeight": 1475, + "ascent": 1580, + "descent": -470, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1062, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 669 + } + } + } + } + }, + "ericaOne": { + "familyName": "Erica One", + "fullName": "Erica One", + "postscriptName": "EricaOne-Regular", + "category": "display", + "capHeight": 691, + "ascent": 1153, + "descent": -339, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 591, + "xWidthAvg": 554, + "subsets": { + "latin": { + "xWidthAvg": 554 + }, + "thai": { + "xWidthAvg": 243 + } + }, + "variants": { + "regular": { + "familyName": "Erica One", + "fullName": "Erica One", + "postscriptName": "EricaOne-Regular", + "category": "display", + "capHeight": 691, + "ascent": 1153, + "descent": -339, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 591, + "xWidthAvg": 554, + "subsets": { + "latin": { + "xWidthAvg": 554 + }, + "thai": { + "xWidthAvg": 243 + } + } + } + } + }, + "esteban": { + "familyName": "Esteban", + "fullName": "Esteban", + "postscriptName": "Esteban", + "category": "serif", + "capHeight": 137, + "ascent": 984, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 127, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 270 + } + }, + "variants": { + "regular": { + "familyName": "Esteban", + "fullName": "Esteban", + "postscriptName": "Esteban", + "category": "serif", + "capHeight": 137, + "ascent": 984, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 127, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 270 + } + } + } + } + }, + "estonia": { + "familyName": "Estonia", + "fullName": "Estonia Regular", + "postscriptName": "Estonia-Regular", + "category": "handwriting", + "capHeight": 447, + "ascent": 900, + "descent": -340, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 261, + "xWidthAvg": 241, + "subsets": { + "latin": { + "xWidthAvg": 241 + }, + "thai": { + "xWidthAvg": 391 + } + }, + "variants": { + "regular": { + "familyName": "Estonia", + "fullName": "Estonia Regular", + "postscriptName": "Estonia-Regular", + "category": "handwriting", + "capHeight": 447, + "ascent": 900, + "descent": -340, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 261, + "xWidthAvg": 241, + "subsets": { + "latin": { + "xWidthAvg": 241 + }, + "thai": { + "xWidthAvg": 391 + } + } + } + } + }, + "euphoriaScript": { + "familyName": "Euphoria Script", + "fullName": "Euphoria Script", + "postscriptName": "EuphoriaScript-Regular", + "category": "handwriting", + "capHeight": 274, + "ascent": 1014, + "descent": -442, + "lineGap": 0, + "unitsPerEm": 1250, + "xHeight": 344, + "xWidthAvg": 390, + "subsets": { + "latin": { + "xWidthAvg": 390 + }, + "thai": { + "xWidthAvg": 187 + } + }, + "variants": { + "regular": { + "familyName": "Euphoria Script", + "fullName": "Euphoria Script", + "postscriptName": "EuphoriaScript-Regular", + "category": "handwriting", + "capHeight": 274, + "ascent": 1014, + "descent": -442, + "lineGap": 0, + "unitsPerEm": 1250, + "xHeight": 344, + "xWidthAvg": 390, + "subsets": { + "latin": { + "xWidthAvg": 390 + }, + "thai": { + "xWidthAvg": 187 + } + } + } + } + }, + "ewert": { + "familyName": "Ewert", + "fullName": "Ewert", + "postscriptName": "Ewert-Regular", + "category": "display", + "capHeight": 700, + "ascent": 944, + "descent": -299, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 700, + "xWidthAvg": 655, + "subsets": { + "latin": { + "xWidthAvg": 655 + }, + "thai": { + "xWidthAvg": 399 + } + }, + "variants": { + "regular": { + "familyName": "Ewert", + "fullName": "Ewert", + "postscriptName": "Ewert-Regular", + "category": "display", + "capHeight": 700, + "ascent": 944, + "descent": -299, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 700, + "xWidthAvg": 655, + "subsets": { + "latin": { + "xWidthAvg": 655 + }, + "thai": { + "xWidthAvg": 399 + } + } + } + } + }, + "exo": { + "familyName": "Exo", + "fullName": "Exo Regular", + "postscriptName": "Exo-Regular", + "category": "sans-serif", + "capHeight": 732, + "ascent": 1002, + "descent": -327, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 654 + } + }, + "variants": { + "100": { + "familyName": "Exo", + "fullName": "Exo Thin", + "postscriptName": "Exo-Thin", + "category": "sans-serif", + "capHeight": 732, + "ascent": 1002, + "descent": -327, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 651 + } + } + }, + "200": { + "familyName": "Exo", + "fullName": "Exo ExtraLight", + "postscriptName": "Exo-ExtraLight", + "category": "sans-serif", + "capHeight": 732, + "ascent": 1002, + "descent": -327, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 652 + } + } + }, + "300": { + "familyName": "Exo", + "fullName": "Exo Light", + "postscriptName": "Exo-Light", + "category": "sans-serif", + "capHeight": 732, + "ascent": 1002, + "descent": -327, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 653 + } + } + }, + "500": { + "familyName": "Exo", + "fullName": "Exo Medium", + "postscriptName": "Exo-Medium", + "category": "sans-serif", + "capHeight": 732, + "ascent": 1002, + "descent": -327, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 655 + } + } + }, + "600": { + "familyName": "Exo", + "fullName": "Exo SemiBold", + "postscriptName": "Exo-SemiBold", + "category": "sans-serif", + "capHeight": 732, + "ascent": 1002, + "descent": -327, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 656 + } + } + }, + "700": { + "familyName": "Exo", + "fullName": "Exo Bold", + "postscriptName": "Exo-Bold", + "category": "sans-serif", + "capHeight": 732, + "ascent": 1002, + "descent": -327, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 657 + } + } + }, + "800": { + "familyName": "Exo", + "fullName": "Exo ExtraBold", + "postscriptName": "Exo-ExtraBold", + "category": "sans-serif", + "capHeight": 732, + "ascent": 1002, + "descent": -327, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 658 + } + } + }, + "900": { + "familyName": "Exo", + "fullName": "Exo Black", + "postscriptName": "Exo-Black", + "category": "sans-serif", + "capHeight": 732, + "ascent": 1002, + "descent": -327, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 659 + } + } + }, + "regular": { + "familyName": "Exo", + "fullName": "Exo Regular", + "postscriptName": "Exo-Regular", + "category": "sans-serif", + "capHeight": 732, + "ascent": 1002, + "descent": -327, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 654 + } + } + }, + "italic": { + "familyName": "Exo", + "fullName": "Exo Italic", + "postscriptName": "Exo-Italic", + "category": "sans-serif", + "capHeight": 732, + "ascent": 1002, + "descent": -327, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 654 + } + } + }, + "900italic": { + "familyName": "Exo", + "fullName": "Exo Black Italic", + "postscriptName": "Exo-BlackItalic", + "category": "sans-serif", + "capHeight": 732, + "ascent": 1002, + "descent": -327, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 659 + } + } + }, + "800italic": { + "familyName": "Exo", + "fullName": "Exo ExtraBold Italic", + "postscriptName": "Exo-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 732, + "ascent": 1002, + "descent": -327, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 476, + "subsets": { + "latin": { + "xWidthAvg": 476 + }, + "thai": { + "xWidthAvg": 658 + } + } + }, + "700italic": { + "familyName": "Exo", + "fullName": "Exo Bold Italic", + "postscriptName": "Exo-BoldItalic", + "category": "sans-serif", + "capHeight": 732, + "ascent": 1002, + "descent": -327, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 657 + } + } + }, + "600italic": { + "familyName": "Exo", + "fullName": "Exo SemiBold Italic", + "postscriptName": "Exo-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 732, + "ascent": 1002, + "descent": -327, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 656 + } + } + }, + "500italic": { + "familyName": "Exo", + "fullName": "Exo Medium Italic", + "postscriptName": "Exo-MediumItalic", + "category": "sans-serif", + "capHeight": 732, + "ascent": 1002, + "descent": -327, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 655 + } + } + }, + "300italic": { + "familyName": "Exo", + "fullName": "Exo Light Italic", + "postscriptName": "Exo-LightItalic", + "category": "sans-serif", + "capHeight": 732, + "ascent": 1002, + "descent": -327, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 653 + } + } + }, + "200italic": { + "familyName": "Exo", + "fullName": "Exo ExtraLight Italic", + "postscriptName": "Exo-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 732, + "ascent": 1002, + "descent": -327, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 652 + } + } + }, + "100italic": { + "familyName": "Exo", + "fullName": "Exo Thin Italic", + "postscriptName": "Exo-ThinItalic", + "category": "sans-serif", + "capHeight": 732, + "ascent": 1002, + "descent": -327, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 651 + } + } + } + } + }, + "exo2": { + "familyName": "Exo 2", + "fullName": "Exo 2 Regular", + "postscriptName": "Exo2-Regular", + "category": "sans-serif", + "capHeight": 690, + "ascent": 999, + "descent": -201, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 624 + } + }, + "variants": { + "100": { + "familyName": "Exo 2", + "fullName": "Exo 2 Thin", + "postscriptName": "Exo2-Thin", + "category": "sans-serif", + "capHeight": 690, + "ascent": 999, + "descent": -201, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 656 + } + } + }, + "200": { + "familyName": "Exo 2", + "fullName": "Exo 2 ExtraLight", + "postscriptName": "Exo2-ExtraLight", + "category": "sans-serif", + "capHeight": 690, + "ascent": 999, + "descent": -201, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 482, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 648 + } + } + }, + "300": { + "familyName": "Exo 2", + "fullName": "Exo 2 Light", + "postscriptName": "Exo2-Light", + "category": "sans-serif", + "capHeight": 690, + "ascent": 999, + "descent": -201, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 635 + } + } + }, + "500": { + "familyName": "Exo 2", + "fullName": "Exo 2 Medium", + "postscriptName": "Exo2-Medium", + "category": "sans-serif", + "capHeight": 690, + "ascent": 999, + "descent": -201, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 618 + } + } + }, + "600": { + "familyName": "Exo 2", + "fullName": "Exo 2 SemiBold", + "postscriptName": "Exo2-SemiBold", + "category": "sans-serif", + "capHeight": 690, + "ascent": 999, + "descent": -201, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 491, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 604 + } + } + }, + "700": { + "familyName": "Exo 2", + "fullName": "Exo 2 Bold", + "postscriptName": "Exo2-Bold", + "category": "sans-serif", + "capHeight": 690, + "ascent": 999, + "descent": -201, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 590 + } + } + }, + "800": { + "familyName": "Exo 2", + "fullName": "Exo 2 ExtraBold", + "postscriptName": "Exo2-ExtraBold", + "category": "sans-serif", + "capHeight": 690, + "ascent": 999, + "descent": -201, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 497, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 571 + } + } + }, + "900": { + "familyName": "Exo 2", + "fullName": "Exo 2 Black", + "postscriptName": "Exo2-Black", + "category": "sans-serif", + "capHeight": 690, + "ascent": 999, + "descent": -201, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 556 + } + } + }, + "regular": { + "familyName": "Exo 2", + "fullName": "Exo 2 Regular", + "postscriptName": "Exo2-Regular", + "category": "sans-serif", + "capHeight": 690, + "ascent": 999, + "descent": -201, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 624 + } + } + }, + "italic": { + "familyName": "Exo 2", + "fullName": "Exo 2 Italic", + "postscriptName": "Exo2-Italic", + "category": "sans-serif", + "capHeight": 690, + "ascent": 999, + "descent": -201, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 624 + } + } + }, + "900italic": { + "familyName": "Exo 2", + "fullName": "Exo 2 Black Italic", + "postscriptName": "Exo2-BlackItalic", + "category": "sans-serif", + "capHeight": 690, + "ascent": 999, + "descent": -201, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 556 + } + } + }, + "800italic": { + "familyName": "Exo 2", + "fullName": "Exo 2 ExtraBold Italic", + "postscriptName": "Exo2-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 690, + "ascent": 999, + "descent": -201, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 497, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 571 + } + } + }, + "700italic": { + "familyName": "Exo 2", + "fullName": "Exo 2 Bold Italic", + "postscriptName": "Exo2-BoldItalic", + "category": "sans-serif", + "capHeight": 690, + "ascent": 999, + "descent": -201, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 476, + "subsets": { + "latin": { + "xWidthAvg": 476 + }, + "thai": { + "xWidthAvg": 590 + } + } + }, + "600italic": { + "familyName": "Exo 2", + "fullName": "Exo 2 SemiBold Italic", + "postscriptName": "Exo2-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 690, + "ascent": 999, + "descent": -201, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 491, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 604 + } + } + }, + "500italic": { + "familyName": "Exo 2", + "fullName": "Exo 2 Medium Italic", + "postscriptName": "Exo2-MediumItalic", + "category": "sans-serif", + "capHeight": 690, + "ascent": 999, + "descent": -201, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 618 + } + } + }, + "300italic": { + "familyName": "Exo 2", + "fullName": "Exo 2 Light Italic", + "postscriptName": "Exo2-LightItalic", + "category": "sans-serif", + "capHeight": 690, + "ascent": 999, + "descent": -201, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 635 + } + } + }, + "200italic": { + "familyName": "Exo 2", + "fullName": "Exo 2 ExtraLight Italic", + "postscriptName": "Exo2-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 690, + "ascent": 999, + "descent": -201, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 482, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 648 + } + } + }, + "100italic": { + "familyName": "Exo 2", + "fullName": "Exo 2 Thin Italic", + "postscriptName": "Exo2-ThinItalic", + "category": "sans-serif", + "capHeight": 690, + "ascent": 999, + "descent": -201, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 656 + } + } + } + } + }, + "expletusSans": { + "familyName": "Expletus Sans", + "fullName": "Expletus Sans Regular", + "postscriptName": "ExpletusSans-Regular", + "category": "display", + "capHeight": 1454, + "ascent": 2066, + "descent": -612, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1034, + "xWidthAvg": 923, + "subsets": { + "latin": { + "xWidthAvg": 923 + }, + "thai": { + "xWidthAvg": 1524 + } + }, + "variants": { + "500": { + "familyName": "Expletus Sans", + "fullName": "Expletus Sans Medium", + "postscriptName": "ExpletusSans-Medium", + "category": "display", + "capHeight": 1454, + "ascent": 2066, + "descent": -612, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1034, + "xWidthAvg": 932, + "subsets": { + "latin": { + "xWidthAvg": 932 + }, + "thai": { + "xWidthAvg": 1518 + } + } + }, + "600": { + "familyName": "Expletus Sans", + "fullName": "Expletus Sans SemiBold", + "postscriptName": "ExpletusSans-SemiBold", + "category": "display", + "capHeight": 1454, + "ascent": 2066, + "descent": -612, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1034, + "xWidthAvg": 944, + "subsets": { + "latin": { + "xWidthAvg": 944 + }, + "thai": { + "xWidthAvg": 1510 + } + } + }, + "700": { + "familyName": "Expletus Sans", + "fullName": "Expletus Sans Bold", + "postscriptName": "ExpletusSans-Bold", + "category": "display", + "capHeight": 1454, + "ascent": 2066, + "descent": -612, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1034, + "xWidthAvg": 957, + "subsets": { + "latin": { + "xWidthAvg": 957 + }, + "thai": { + "xWidthAvg": 1502 + } + } + }, + "regular": { + "familyName": "Expletus Sans", + "fullName": "Expletus Sans Regular", + "postscriptName": "ExpletusSans-Regular", + "category": "display", + "capHeight": 1454, + "ascent": 2066, + "descent": -612, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1034, + "xWidthAvg": 923, + "subsets": { + "latin": { + "xWidthAvg": 923 + }, + "thai": { + "xWidthAvg": 1524 + } + } + }, + "italic": { + "familyName": "Expletus Sans", + "fullName": "Expletus Sans Italic", + "postscriptName": "ExpletusSans-Italic", + "category": "display", + "capHeight": 1454, + "ascent": 2066, + "descent": -612, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1034, + "xWidthAvg": 928, + "subsets": { + "latin": { + "xWidthAvg": 928 + }, + "thai": { + "xWidthAvg": 1524 + } + } + }, + "700italic": { + "familyName": "Expletus Sans", + "fullName": "Expletus Sans Bold Italic", + "postscriptName": "ExpletusSans-BoldItalic", + "category": "display", + "capHeight": 1454, + "ascent": 2066, + "descent": -612, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1034, + "xWidthAvg": 967, + "subsets": { + "latin": { + "xWidthAvg": 967 + }, + "thai": { + "xWidthAvg": 1502 + } + } + }, + "600italic": { + "familyName": "Expletus Sans", + "fullName": "Expletus Sans SemiBold Italic", + "postscriptName": "ExpletusSans-SemiBoldItalic", + "category": "display", + "capHeight": 1454, + "ascent": 2066, + "descent": -612, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1034, + "xWidthAvg": 952, + "subsets": { + "latin": { + "xWidthAvg": 952 + }, + "thai": { + "xWidthAvg": 1510 + } + } + }, + "500italic": { + "familyName": "Expletus Sans", + "fullName": "Expletus Sans Medium Italic", + "postscriptName": "ExpletusSans-MediumItalic", + "category": "display", + "capHeight": 1454, + "ascent": 2066, + "descent": -612, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1034, + "xWidthAvg": 939, + "subsets": { + "latin": { + "xWidthAvg": 939 + }, + "thai": { + "xWidthAvg": 1518 + } + } + } + } + }, + "explora": { + "familyName": "Explora", + "fullName": "Explora Regular", + "postscriptName": "Explora-Regular", + "category": "handwriting", + "capHeight": 542, + "ascent": 850, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 325, + "xWidthAvg": 242, + "subsets": { + "latin": { + "xWidthAvg": 242 + }, + "thai": { + "xWidthAvg": 429 + } + }, + "variants": { + "regular": { + "familyName": "Explora", + "fullName": "Explora Regular", + "postscriptName": "Explora-Regular", + "category": "handwriting", + "capHeight": 542, + "ascent": 850, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 325, + "xWidthAvg": 242, + "subsets": { + "latin": { + "xWidthAvg": 242 + }, + "thai": { + "xWidthAvg": 429 + } + } + } + } + }, + "facultyGlyphic": { + "familyName": "Faculty Glyphic", + "fullName": "Faculty Glyphic Regular", + "postscriptName": "FacultyGlyphic-Regular", + "category": "sans-serif", + "capHeight": 775, + "ascent": 1037, + "descent": -262, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 493 + } + }, + "variants": { + "regular": { + "familyName": "Faculty Glyphic", + "fullName": "Faculty Glyphic Regular", + "postscriptName": "FacultyGlyphic-Regular", + "category": "sans-serif", + "capHeight": 775, + "ascent": 1037, + "descent": -262, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 493 + } + } + } + } + }, + "fahkwang": { + "familyName": "Fahkwang", + "fullName": "Fahkwang Regular", + "postscriptName": "Fahkwang-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1008, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 650 + } + }, + "variants": { + "200": { + "familyName": "Fahkwang", + "fullName": "Fahkwang ExtraLight", + "postscriptName": "Fahkwang-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1008, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 641 + } + } + }, + "300": { + "familyName": "Fahkwang", + "fullName": "Fahkwang Light", + "postscriptName": "Fahkwang-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1008, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 645 + } + } + }, + "500": { + "familyName": "Fahkwang", + "fullName": "Fahkwang Medium", + "postscriptName": "Fahkwang-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1008, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 518, + "subsets": { + "latin": { + "xWidthAvg": 518 + }, + "thai": { + "xWidthAvg": 654 + } + } + }, + "600": { + "familyName": "Fahkwang", + "fullName": "Fahkwang SemiBold", + "postscriptName": "Fahkwang-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1008, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 659 + } + } + }, + "700": { + "familyName": "Fahkwang", + "fullName": "Fahkwang Bold", + "postscriptName": "Fahkwang-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1008, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 545, + "subsets": { + "latin": { + "xWidthAvg": 545 + }, + "thai": { + "xWidthAvg": 663 + } + } + }, + "regular": { + "familyName": "Fahkwang", + "fullName": "Fahkwang Regular", + "postscriptName": "Fahkwang-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1008, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 650 + } + } + }, + "italic": { + "familyName": "Fahkwang", + "fullName": "Fahkwang Italic", + "postscriptName": "Fahkwang-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1008, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 650 + } + } + }, + "700italic": { + "familyName": "Fahkwang", + "fullName": "Fahkwang Bold Italic", + "postscriptName": "Fahkwang-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1008, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 545, + "subsets": { + "latin": { + "xWidthAvg": 545 + }, + "thai": { + "xWidthAvg": 663 + } + } + }, + "600italic": { + "familyName": "Fahkwang", + "fullName": "Fahkwang SemiBold Italic", + "postscriptName": "Fahkwang-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1008, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 659 + } + } + }, + "500italic": { + "familyName": "Fahkwang", + "fullName": "Fahkwang Medium Italic", + "postscriptName": "Fahkwang-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1008, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 518, + "subsets": { + "latin": { + "xWidthAvg": 518 + }, + "thai": { + "xWidthAvg": 654 + } + } + }, + "300italic": { + "familyName": "Fahkwang", + "fullName": "Fahkwang Light Italic", + "postscriptName": "Fahkwang-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1008, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 645 + } + } + }, + "200italic": { + "familyName": "Fahkwang", + "fullName": "Fahkwang ExtraLight Italic", + "postscriptName": "Fahkwang-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1008, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 641 + } + } + } + } + }, + "familjenGrotesk": { + "familyName": "Familjen Grotesk", + "fullName": "Familjen Grotesk Regular", + "postscriptName": "FamiljenGrotesk-Regular", + "category": "sans-serif", + "capHeight": 780, + "ascent": 1230, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 720 + } + }, + "variants": { + "500": { + "familyName": "Familjen Grotesk", + "fullName": "Familjen Grotesk Medium", + "postscriptName": "FamiljenGrotesk-Medium", + "category": "sans-serif", + "capHeight": 780, + "ascent": 1230, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "600": { + "familyName": "Familjen Grotesk", + "fullName": "Familjen Grotesk SemiBold", + "postscriptName": "FamiljenGrotesk-SemiBold", + "category": "sans-serif", + "capHeight": 780, + "ascent": 1230, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "700": { + "familyName": "Familjen Grotesk", + "fullName": "Familjen Grotesk Bold", + "postscriptName": "FamiljenGrotesk-Bold", + "category": "sans-serif", + "capHeight": 780, + "ascent": 1230, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 533, + "subsets": { + "latin": { + "xWidthAvg": 533 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "regular": { + "familyName": "Familjen Grotesk", + "fullName": "Familjen Grotesk Regular", + "postscriptName": "FamiljenGrotesk-Regular", + "category": "sans-serif", + "capHeight": 780, + "ascent": 1230, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "italic": { + "familyName": "Familjen Grotesk", + "fullName": "Familjen Grotesk Italic", + "postscriptName": "FamiljenGrotesk-Italic", + "category": "sans-serif", + "capHeight": 780, + "ascent": 1230, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "700italic": { + "familyName": "Familjen Grotesk", + "fullName": "Familjen Grotesk Bold Italic", + "postscriptName": "FamiljenGrotesk-BoldItalic", + "category": "sans-serif", + "capHeight": 780, + "ascent": 1230, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 513, + "subsets": { + "latin": { + "xWidthAvg": 513 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "600italic": { + "familyName": "Familjen Grotesk", + "fullName": "Familjen Grotesk SemiBold Italic", + "postscriptName": "FamiljenGrotesk-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 780, + "ascent": 1230, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 507, + "subsets": { + "latin": { + "xWidthAvg": 507 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "500italic": { + "familyName": "Familjen Grotesk", + "fullName": "Familjen Grotesk Medium Italic", + "postscriptName": "FamiljenGrotesk-MediumItalic", + "category": "sans-serif", + "capHeight": 780, + "ascent": 1230, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 720 + } + } + } + } + }, + "fanwoodText": { + "familyName": "Fanwood Text", + "fullName": "Fanwood Text", + "postscriptName": "FanwoodText-Regular", + "category": "serif", + "capHeight": 1282, + "ascent": 3761, + "descent": -1609, + "lineGap": 0, + "unitsPerEm": 4096, + "xHeight": 1606, + "xWidthAvg": 1572, + "subsets": { + "latin": { + "xWidthAvg": 1572 + }, + "thai": { + "xWidthAvg": 1497 + } + }, + "variants": { + "regular": { + "familyName": "Fanwood Text", + "fullName": "Fanwood Text", + "postscriptName": "FanwoodText-Regular", + "category": "serif", + "capHeight": 1282, + "ascent": 3761, + "descent": -1609, + "lineGap": 0, + "unitsPerEm": 4096, + "xHeight": 1606, + "xWidthAvg": 1572, + "subsets": { + "latin": { + "xWidthAvg": 1572 + }, + "thai": { + "xWidthAvg": 1497 + } + } + }, + "italic": { + "familyName": "Fanwood Text", + "fullName": "Fanwood Text Italic", + "postscriptName": "FanwoodText-Italic", + "category": "serif", + "capHeight": 1172, + "ascent": 3761, + "descent": -1609, + "lineGap": 0, + "unitsPerEm": 4096, + "xHeight": 1261, + "xWidthAvg": 1546, + "subsets": { + "latin": { + "xWidthAvg": 1546 + }, + "thai": { + "xWidthAvg": 1497 + } + } + } + } + }, + "farro": { + "familyName": "Farro", + "fullName": "Farro Regular", + "postscriptName": "Farro-Regular", + "category": "sans-serif", + "capHeight": 750, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 600, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 1106 + } + }, + "variants": { + "300": { + "familyName": "Farro", + "fullName": "Farro Light", + "postscriptName": "Farro-Light", + "category": "sans-serif", + "capHeight": 750, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 600, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 1129 + } + } + }, + "500": { + "familyName": "Farro", + "fullName": "Farro Medium", + "postscriptName": "Farro-Medium", + "category": "sans-serif", + "capHeight": 750, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 600, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 1081 + } + } + }, + "700": { + "familyName": "Farro", + "fullName": "Farro Bold", + "postscriptName": "Farro-Bold", + "category": "sans-serif", + "capHeight": 750, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 600, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 1059 + } + } + }, + "regular": { + "familyName": "Farro", + "fullName": "Farro Regular", + "postscriptName": "Farro-Regular", + "category": "sans-serif", + "capHeight": 750, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 600, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 1106 + } + } + } + } + }, + "farsan": { + "familyName": "Farsan", + "fullName": "Farsan Regular", + "postscriptName": "Farsan-Regular", + "category": "display", + "capHeight": 664, + "ascent": 711, + "descent": -289, + "lineGap": 200, + "unitsPerEm": 1000, + "xHeight": 441, + "xWidthAvg": 312, + "subsets": { + "latin": { + "xWidthAvg": 312 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Farsan", + "fullName": "Farsan Regular", + "postscriptName": "Farsan-Regular", + "category": "display", + "capHeight": 664, + "ascent": 711, + "descent": -289, + "lineGap": 200, + "unitsPerEm": 1000, + "xHeight": 441, + "xWidthAvg": 312, + "subsets": { + "latin": { + "xWidthAvg": 312 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "fascinate": { + "familyName": "Fascinate", + "fullName": "Fascinate", + "postscriptName": "Fascinate-Regular", + "category": "display", + "capHeight": 1436, + "ascent": 2125, + "descent": -591, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 1116, + "subsets": { + "latin": { + "xWidthAvg": 1116 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "Fascinate", + "fullName": "Fascinate", + "postscriptName": "Fascinate-Regular", + "category": "display", + "capHeight": 1436, + "ascent": 2125, + "descent": -591, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 1116, + "subsets": { + "latin": { + "xWidthAvg": 1116 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "fascinateInline": { + "familyName": "Fascinate Inline", + "fullName": "Fascinate Inline", + "postscriptName": "FascinateInline-Regular", + "category": "display", + "capHeight": 1436, + "ascent": 2125, + "descent": -591, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 1116, + "subsets": { + "latin": { + "xWidthAvg": 1116 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "Fascinate Inline", + "fullName": "Fascinate Inline", + "postscriptName": "FascinateInline-Regular", + "category": "display", + "capHeight": 1436, + "ascent": 2125, + "descent": -591, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 1116, + "subsets": { + "latin": { + "xWidthAvg": 1116 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "fasterOne": { + "familyName": "Faster One", + "fullName": "Faster One Regular", + "postscriptName": "FasterOne-Regular", + "category": "display", + "capHeight": 625, + "ascent": 898, + "descent": -165, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 529, + "xWidthAvg": 613, + "subsets": { + "latin": { + "xWidthAvg": 613 + }, + "thai": { + "xWidthAvg": 150 + } + }, + "variants": { + "regular": { + "familyName": "Faster One", + "fullName": "Faster One Regular", + "postscriptName": "FasterOne-Regular", + "category": "display", + "capHeight": 625, + "ascent": 898, + "descent": -165, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 529, + "xWidthAvg": 613, + "subsets": { + "latin": { + "xWidthAvg": 613 + }, + "thai": { + "xWidthAvg": 150 + } + } + } + } + }, + "fasthand": { + "familyName": "Fasthand", + "fullName": "Fasthand Regular", + "postscriptName": "Fasthand-Regular", + "category": "display", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 755, + "subsets": { + "latin": { + "xWidthAvg": 755 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Fasthand", + "fullName": "Fasthand Regular", + "postscriptName": "Fasthand-Regular", + "category": "display", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 755, + "subsets": { + "latin": { + "xWidthAvg": 755 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "faunaOne": { + "familyName": "Fauna One", + "fullName": "Fauna One Regular", + "postscriptName": "FaunaOne-Regular", + "category": "serif", + "capHeight": 730, + "ascent": 987, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 572, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 283 + } + }, + "variants": { + "regular": { + "familyName": "Fauna One", + "fullName": "Fauna One Regular", + "postscriptName": "FaunaOne-Regular", + "category": "serif", + "capHeight": 730, + "ascent": 987, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 572, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 283 + } + } + } + } + }, + "faustina": { + "familyName": "Faustina", + "fullName": "Faustina Regular", + "postscriptName": "Faustina-Regular", + "category": "serif", + "capHeight": 648, + "ascent": 1043, + "descent": -217, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 416, + "subsets": { + "latin": { + "xWidthAvg": 416 + }, + "thai": { + "xWidthAvg": 700 + } + }, + "variants": { + "300": { + "familyName": "Faustina", + "fullName": "Faustina Light", + "postscriptName": "Faustina-Light", + "category": "serif", + "capHeight": 648, + "ascent": 1043, + "descent": -217, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 410, + "subsets": { + "latin": { + "xWidthAvg": 410 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "500": { + "familyName": "Faustina", + "fullName": "Faustina Medium", + "postscriptName": "Faustina-Medium", + "category": "serif", + "capHeight": 648, + "ascent": 1043, + "descent": -217, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 423, + "subsets": { + "latin": { + "xWidthAvg": 423 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "600": { + "familyName": "Faustina", + "fullName": "Faustina SemiBold", + "postscriptName": "Faustina-SemiBold", + "category": "serif", + "capHeight": 648, + "ascent": 1043, + "descent": -217, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "700": { + "familyName": "Faustina", + "fullName": "Faustina Bold", + "postscriptName": "Faustina-Bold", + "category": "serif", + "capHeight": 648, + "ascent": 1043, + "descent": -217, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "800": { + "familyName": "Faustina", + "fullName": "Faustina ExtraBold", + "postscriptName": "Faustina-ExtraBold", + "category": "serif", + "capHeight": 648, + "ascent": 1043, + "descent": -217, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "regular": { + "familyName": "Faustina", + "fullName": "Faustina Regular", + "postscriptName": "Faustina-Regular", + "category": "serif", + "capHeight": 648, + "ascent": 1043, + "descent": -217, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 416, + "subsets": { + "latin": { + "xWidthAvg": 416 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "italic": { + "familyName": "Faustina", + "fullName": "Faustina Italic", + "postscriptName": "Faustina-Italic", + "category": "serif", + "capHeight": 648, + "ascent": 1043, + "descent": -217, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 383, + "subsets": { + "latin": { + "xWidthAvg": 383 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "800italic": { + "familyName": "Faustina", + "fullName": "Faustina ExtraBold Italic", + "postscriptName": "Faustina-ExtraBoldItalic", + "category": "serif", + "capHeight": 648, + "ascent": 1043, + "descent": -217, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 404, + "subsets": { + "latin": { + "xWidthAvg": 404 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "700italic": { + "familyName": "Faustina", + "fullName": "Faustina Bold Italic", + "postscriptName": "Faustina-BoldItalic", + "category": "serif", + "capHeight": 648, + "ascent": 1043, + "descent": -217, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 399, + "subsets": { + "latin": { + "xWidthAvg": 399 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "600italic": { + "familyName": "Faustina", + "fullName": "Faustina SemiBold Italic", + "postscriptName": "Faustina-SemiBoldItalic", + "category": "serif", + "capHeight": 648, + "ascent": 1043, + "descent": -217, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 393, + "subsets": { + "latin": { + "xWidthAvg": 393 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "500italic": { + "familyName": "Faustina", + "fullName": "Faustina Medium Italic", + "postscriptName": "Faustina-MediumItalic", + "category": "serif", + "capHeight": 648, + "ascent": 1043, + "descent": -217, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 388, + "subsets": { + "latin": { + "xWidthAvg": 388 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "300italic": { + "familyName": "Faustina", + "fullName": "Faustina Light Italic", + "postscriptName": "Faustina-LightItalic", + "category": "serif", + "capHeight": 648, + "ascent": 1043, + "descent": -217, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 380, + "subsets": { + "latin": { + "xWidthAvg": 380 + }, + "thai": { + "xWidthAvg": 700 + } + } + } + } + }, + "federant": { + "familyName": "Federant", + "fullName": "Federant", + "postscriptName": "Federant-Regular", + "category": "display", + "capHeight": 714, + "ascent": 942, + "descent": -284, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 529 + } + }, + "variants": { + "regular": { + "familyName": "Federant", + "fullName": "Federant", + "postscriptName": "Federant-Regular", + "category": "display", + "capHeight": 714, + "ascent": 942, + "descent": -284, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 529 + } + } + } + } + }, + "federo": { + "familyName": "Federo", + "fullName": "Federo", + "postscriptName": "Federo-Regular", + "category": "sans-serif", + "capHeight": 1487, + "ascent": 1883, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 942, + "xWidthAvg": 831, + "subsets": { + "latin": { + "xWidthAvg": 831 + }, + "thai": { + "xWidthAvg": 1083 + } + }, + "variants": { + "regular": { + "familyName": "Federo", + "fullName": "Federo", + "postscriptName": "Federo-Regular", + "category": "sans-serif", + "capHeight": 1487, + "ascent": 1883, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 942, + "xWidthAvg": 831, + "subsets": { + "latin": { + "xWidthAvg": 831 + }, + "thai": { + "xWidthAvg": 1083 + } + } + } + } + }, + "felipa": { + "familyName": "Felipa", + "fullName": "Felipa", + "postscriptName": "Felipa-Regular", + "category": "handwriting", + "capHeight": 752, + "ascent": 966, + "descent": -319, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 346, + "subsets": { + "latin": { + "xWidthAvg": 346 + }, + "thai": { + "xWidthAvg": 250 + } + }, + "variants": { + "regular": { + "familyName": "Felipa", + "fullName": "Felipa", + "postscriptName": "Felipa-Regular", + "category": "handwriting", + "capHeight": 752, + "ascent": 966, + "descent": -319, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 346, + "subsets": { + "latin": { + "xWidthAvg": 346 + }, + "thai": { + "xWidthAvg": 250 + } + } + } + } + }, + "fenix": { + "familyName": "Fenix", + "fullName": "Fenix", + "postscriptName": "Fenix", + "category": "serif", + "capHeight": 650, + "ascent": 879, + "descent": -238, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 410, + "subsets": { + "latin": { + "xWidthAvg": 410 + }, + "thai": { + "xWidthAvg": 568 + } + }, + "variants": { + "regular": { + "familyName": "Fenix", + "fullName": "Fenix", + "postscriptName": "Fenix", + "category": "serif", + "capHeight": 650, + "ascent": 879, + "descent": -238, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 410, + "subsets": { + "latin": { + "xWidthAvg": 410 + }, + "thai": { + "xWidthAvg": 568 + } + } + } + } + }, + "festive": { + "familyName": "Festive", + "fullName": "Festive Regular", + "postscriptName": "Festive-Regular", + "category": "handwriting", + "capHeight": 800, + "ascent": 1100, + "descent": -590, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 360, + "xWidthAvg": 320, + "subsets": { + "latin": { + "xWidthAvg": 320 + }, + "thai": { + "xWidthAvg": 495 + } + }, + "variants": { + "regular": { + "familyName": "Festive", + "fullName": "Festive Regular", + "postscriptName": "Festive-Regular", + "category": "handwriting", + "capHeight": 800, + "ascent": 1100, + "descent": -590, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 360, + "xWidthAvg": 320, + "subsets": { + "latin": { + "xWidthAvg": 320 + }, + "thai": { + "xWidthAvg": 495 + } + } + } + } + }, + "figtree": { + "familyName": "Figtree", + "fullName": "Figtree Regular", + "postscriptName": "Figtree-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 449, + "subsets": { + "latin": { + "xWidthAvg": 449 + }, + "thai": { + "xWidthAvg": 708 + } + }, + "variants": { + "300": { + "familyName": "Figtree", + "fullName": "Figtree Light", + "postscriptName": "Figtree-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 708 + } + } + }, + "500": { + "familyName": "Figtree", + "fullName": "Figtree Medium", + "postscriptName": "Figtree-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 708 + } + } + }, + "600": { + "familyName": "Figtree", + "fullName": "Figtree SemiBold", + "postscriptName": "Figtree-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 708 + } + } + }, + "700": { + "familyName": "Figtree", + "fullName": "Figtree Bold", + "postscriptName": "Figtree-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 708 + } + } + }, + "800": { + "familyName": "Figtree", + "fullName": "Figtree ExtraBold", + "postscriptName": "Figtree-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 708 + } + } + }, + "900": { + "familyName": "Figtree", + "fullName": "Figtree Black", + "postscriptName": "Figtree-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 708 + } + } + }, + "regular": { + "familyName": "Figtree", + "fullName": "Figtree Regular", + "postscriptName": "Figtree-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 449, + "subsets": { + "latin": { + "xWidthAvg": 449 + }, + "thai": { + "xWidthAvg": 708 + } + } + }, + "italic": { + "familyName": "Figtree", + "fullName": "Figtree Italic", + "postscriptName": "Figtree-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 708 + } + } + }, + "900italic": { + "familyName": "Figtree", + "fullName": "Figtree Black Italic", + "postscriptName": "Figtree-BlackItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 708 + } + } + }, + "800italic": { + "familyName": "Figtree", + "fullName": "Figtree ExtraBold Italic", + "postscriptName": "Figtree-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 708 + } + } + }, + "700italic": { + "familyName": "Figtree", + "fullName": "Figtree Bold Italic", + "postscriptName": "Figtree-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 708 + } + } + }, + "600italic": { + "familyName": "Figtree", + "fullName": "Figtree SemiBold Italic", + "postscriptName": "Figtree-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 708 + } + } + }, + "500italic": { + "familyName": "Figtree", + "fullName": "Figtree Medium Italic", + "postscriptName": "Figtree-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 708 + } + } + }, + "300italic": { + "familyName": "Figtree", + "fullName": "Figtree Light Italic", + "postscriptName": "Figtree-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 708 + } + } + } + } + }, + "fingerPaint": { + "familyName": "Finger Paint", + "fullName": "Finger Paint Regular", + "postscriptName": "FingerPaint-Regular", + "category": "display", + "capHeight": 720, + "ascent": 1097, + "descent": -377, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 537, + "subsets": { + "latin": { + "xWidthAvg": 537 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Finger Paint", + "fullName": "Finger Paint Regular", + "postscriptName": "FingerPaint-Regular", + "category": "display", + "capHeight": 720, + "ascent": 1097, + "descent": -377, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 537, + "subsets": { + "latin": { + "xWidthAvg": 537 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "finlandica": { + "familyName": "Finlandica", + "fullName": "Finlandica Regular", + "postscriptName": "Finlandica-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "500": { + "familyName": "Finlandica", + "fullName": "Finlandica Medium", + "postscriptName": "Finlandica-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Finlandica", + "fullName": "Finlandica SemiBold", + "postscriptName": "Finlandica-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Finlandica", + "fullName": "Finlandica Bold", + "postscriptName": "Finlandica-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Finlandica", + "fullName": "Finlandica Regular", + "postscriptName": "Finlandica-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "italic": { + "familyName": "Finlandica", + "fullName": "Finlandica Italic", + "postscriptName": "Finlandica-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 430, + "subsets": { + "latin": { + "xWidthAvg": 430 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700italic": { + "familyName": "Finlandica", + "fullName": "Finlandica Bold Italic", + "postscriptName": "Finlandica-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600italic": { + "familyName": "Finlandica", + "fullName": "Finlandica SemiBold Italic", + "postscriptName": "Finlandica-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500italic": { + "familyName": "Finlandica", + "fullName": "Finlandica Medium Italic", + "postscriptName": "Finlandica-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "firaCode": { + "familyName": "Fira Code", + "fullName": "Fira Code Regular", + "postscriptName": "FiraCode-Regular", + "category": "monospace", + "capHeight": 1377, + "ascent": 1980, + "descent": -644, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1053, + "xWidthAvg": 1200, + "subsets": { + "latin": { + "xWidthAvg": 1200 + }, + "thai": { + "xWidthAvg": 1200 + } + }, + "variants": { + "300": { + "familyName": "Fira Code", + "fullName": "Fira Code Light", + "postscriptName": "FiraCode-Light", + "category": "monospace", + "capHeight": 1374, + "ascent": 1980, + "descent": -644, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1050, + "xWidthAvg": 1200, + "subsets": { + "latin": { + "xWidthAvg": 1200 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "500": { + "familyName": "Fira Code", + "fullName": "Fira Code Medium", + "postscriptName": "FiraCode-Medium", + "category": "monospace", + "capHeight": 1380, + "ascent": 1980, + "descent": -644, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1056, + "xWidthAvg": 1200, + "subsets": { + "latin": { + "xWidthAvg": 1200 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "600": { + "familyName": "Fira Code", + "fullName": "Fira Code SemiBold", + "postscriptName": "FiraCode-SemiBold", + "category": "monospace", + "capHeight": 1383, + "ascent": 1980, + "descent": -644, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1059, + "xWidthAvg": 1200, + "subsets": { + "latin": { + "xWidthAvg": 1200 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "700": { + "familyName": "Fira Code", + "fullName": "Fira Code Bold", + "postscriptName": "FiraCode-Bold", + "category": "monospace", + "capHeight": 1386, + "ascent": 1980, + "descent": -644, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1062, + "xWidthAvg": 1200, + "subsets": { + "latin": { + "xWidthAvg": 1200 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "regular": { + "familyName": "Fira Code", + "fullName": "Fira Code Regular", + "postscriptName": "FiraCode-Regular", + "category": "monospace", + "capHeight": 1377, + "ascent": 1980, + "descent": -644, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1053, + "xWidthAvg": 1200, + "subsets": { + "latin": { + "xWidthAvg": 1200 + }, + "thai": { + "xWidthAvg": 1200 + } + } + } + } + }, + "firaMono": { + "familyName": "Fira Mono", + "fullName": "Fira Mono Regular", + "postscriptName": "FiraMono-Regular", + "category": "monospace", + "capHeight": 689, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 527, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "500": { + "familyName": "Fira Mono", + "fullName": "Fira Mono Medium", + "postscriptName": "FiraMono-Medium", + "category": "monospace", + "capHeight": 690, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 528, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Fira Mono", + "fullName": "Fira Mono Bold", + "postscriptName": "FiraMono-Bold", + "category": "monospace", + "capHeight": 693, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Fira Mono", + "fullName": "Fira Mono Regular", + "postscriptName": "FiraMono-Regular", + "category": "monospace", + "capHeight": 689, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 527, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "firaSans": { + "familyName": "Fira Sans", + "fullName": "Fira Sans Regular", + "postscriptName": "FiraSans-Regular", + "category": "sans-serif", + "capHeight": 689, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 527, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 666 + } + }, + "variants": { + "100": { + "familyName": "Fira Sans", + "fullName": "Fira Sans Thin", + "postscriptName": "FiraSans-Thin", + "category": "sans-serif", + "capHeight": 681, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "200": { + "familyName": "Fira Sans", + "fullName": "Fira Sans ExtraLight", + "postscriptName": "FiraSans-ExtraLight", + "category": "sans-serif", + "capHeight": 684, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "300": { + "familyName": "Fira Sans", + "fullName": "Fira Sans Light", + "postscriptName": "FiraSans-Light", + "category": "sans-serif", + "capHeight": 685, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "500": { + "familyName": "Fira Sans", + "fullName": "Fira Sans Medium", + "postscriptName": "FiraSans-Medium", + "category": "sans-serif", + "capHeight": 691, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 529, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "600": { + "familyName": "Fira Sans", + "fullName": "Fira Sans SemiBold", + "postscriptName": "FiraSans-SemiBold", + "category": "sans-serif", + "capHeight": 692, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "700": { + "familyName": "Fira Sans", + "fullName": "Fira Sans Bold", + "postscriptName": "FiraSans-Bold", + "category": "sans-serif", + "capHeight": 693, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "800": { + "familyName": "Fira Sans", + "fullName": "Fira Sans ExtraBold", + "postscriptName": "FiraSans-ExtraBold", + "category": "sans-serif", + "capHeight": 695, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 533, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "900": { + "familyName": "Fira Sans", + "fullName": "Fira Sans Black", + "postscriptName": "FiraSans-Black", + "category": "sans-serif", + "capHeight": 696, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "regular": { + "familyName": "Fira Sans", + "fullName": "Fira Sans Regular", + "postscriptName": "FiraSans-Regular", + "category": "sans-serif", + "capHeight": 689, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 527, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "italic": { + "familyName": "Fira Sans", + "fullName": "Fira Sans Italic", + "postscriptName": "FiraSans-Italic", + "category": "sans-serif", + "capHeight": 689, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 527, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 660 + } + } + }, + "900italic": { + "familyName": "Fira Sans", + "fullName": "Fira Sans Black Italic", + "postscriptName": "FiraSans-BlackItalic", + "category": "sans-serif", + "capHeight": 696, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 654 + } + } + }, + "800italic": { + "familyName": "Fira Sans", + "fullName": "Fira Sans ExtraBold Italic", + "postscriptName": "FiraSans-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 695, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 533, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 655 + } + } + }, + "700italic": { + "familyName": "Fira Sans", + "fullName": "Fira Sans Bold Italic", + "postscriptName": "FiraSans-BoldItalic", + "category": "sans-serif", + "capHeight": 693, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 656 + } + } + }, + "600italic": { + "familyName": "Fira Sans", + "fullName": "Fira Sans SemiBold Italic", + "postscriptName": "FiraSans-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 692, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 657 + } + } + }, + "500italic": { + "familyName": "Fira Sans", + "fullName": "Fira Sans Medium Italic", + "postscriptName": "FiraSans-MediumItalic", + "category": "sans-serif", + "capHeight": 691, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 529, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 658 + } + } + }, + "300italic": { + "familyName": "Fira Sans", + "fullName": "Fira Sans Light Italic", + "postscriptName": "FiraSans-LightItalic", + "category": "sans-serif", + "capHeight": 685, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 449, + "subsets": { + "latin": { + "xWidthAvg": 449 + }, + "thai": { + "xWidthAvg": 663 + } + } + }, + "200italic": { + "familyName": "Fira Sans", + "fullName": "Fira Sans ExtraLight Italic", + "postscriptName": "FiraSans-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 684, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 664 + } + } + }, + "100italic": { + "familyName": "Fira Sans", + "fullName": "Fira Sans Thin Italic", + "postscriptName": "FiraSans-ThinItalic", + "category": "sans-serif", + "capHeight": 681, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 666 + } + } + } + } + }, + "firaSansCondensed": { + "familyName": "Fira Sans Condensed", + "fullName": "Fira Sans Condensed Regular", + "postscriptName": "FiraSansCondensed-Regular", + "category": "sans-serif", + "capHeight": 688, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 666 + } + }, + "variants": { + "100": { + "familyName": "Fira Sans Condensed", + "fullName": "Fira Sans Condensed Thin", + "postscriptName": "FiraSansCondensed-Thin", + "category": "sans-serif", + "capHeight": 681, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "200": { + "familyName": "Fira Sans Condensed", + "fullName": "Fira Sans Condensed ExtraLight", + "postscriptName": "FiraSansCondensed-ExtraLight", + "category": "sans-serif", + "capHeight": 684, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 404, + "subsets": { + "latin": { + "xWidthAvg": 404 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "300": { + "familyName": "Fira Sans Condensed", + "fullName": "Fira Sans Condensed Light", + "postscriptName": "FiraSansCondensed-Light", + "category": "sans-serif", + "capHeight": 685, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 407, + "subsets": { + "latin": { + "xWidthAvg": 407 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "500": { + "familyName": "Fira Sans Condensed", + "fullName": "Fira Sans Condensed Medium", + "postscriptName": "FiraSansCondensed-Medium", + "category": "sans-serif", + "capHeight": 691, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 529, + "xWidthAvg": 416, + "subsets": { + "latin": { + "xWidthAvg": 416 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "600": { + "familyName": "Fira Sans Condensed", + "fullName": "Fira Sans Condensed SemiBold", + "postscriptName": "FiraSansCondensed-SemiBold", + "category": "sans-serif", + "capHeight": 692, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 417, + "subsets": { + "latin": { + "xWidthAvg": 417 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "700": { + "familyName": "Fira Sans Condensed", + "fullName": "Fira Sans Condensed Bold", + "postscriptName": "FiraSansCondensed-Bold", + "category": "sans-serif", + "capHeight": 693, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 418, + "subsets": { + "latin": { + "xWidthAvg": 418 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "800": { + "familyName": "Fira Sans Condensed", + "fullName": "Fira Sans Condensed ExtraBold", + "postscriptName": "FiraSansCondensed-ExtraBold", + "category": "sans-serif", + "capHeight": 695, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 533, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "900": { + "familyName": "Fira Sans Condensed", + "fullName": "Fira Sans Condensed Black", + "postscriptName": "FiraSansCondensed-Black", + "category": "sans-serif", + "capHeight": 696, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 420, + "subsets": { + "latin": { + "xWidthAvg": 420 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "regular": { + "familyName": "Fira Sans Condensed", + "fullName": "Fira Sans Condensed Regular", + "postscriptName": "FiraSansCondensed-Regular", + "category": "sans-serif", + "capHeight": 688, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "italic": { + "familyName": "Fira Sans Condensed", + "fullName": "Fira Sans Condensed Italic", + "postscriptName": "FiraSansCondensed-Italic", + "category": "sans-serif", + "capHeight": 689, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 527, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 660 + } + } + }, + "900italic": { + "familyName": "Fira Sans Condensed", + "fullName": "Fira Sans Condensed Black Italic", + "postscriptName": "FiraSansCondensed-BlackItalic", + "category": "sans-serif", + "capHeight": 696, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 654 + } + } + }, + "800italic": { + "familyName": "Fira Sans Condensed", + "fullName": "Fira Sans Condensed ExtraBold Italic", + "postscriptName": "FiraSansCondensed-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 694, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 532, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 655 + } + } + }, + "700italic": { + "familyName": "Fira Sans Condensed", + "fullName": "Fira Sans Condensed Bold Italic", + "postscriptName": "FiraSansCondensed-BoldItalic", + "category": "sans-serif", + "capHeight": 693, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 656 + } + } + }, + "600italic": { + "familyName": "Fira Sans Condensed", + "fullName": "Fira Sans Condensed SemiBold Italic", + "postscriptName": "FiraSansCondensed-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 692, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 657 + } + } + }, + "500italic": { + "familyName": "Fira Sans Condensed", + "fullName": "Fira Sans Condensed Medium Italic", + "postscriptName": "FiraSansCondensed-MediumItalic", + "category": "sans-serif", + "capHeight": 691, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 529, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 658 + } + } + }, + "300italic": { + "familyName": "Fira Sans Condensed", + "fullName": "Fira Sans Condensed Light Italic", + "postscriptName": "FiraSansCondensed-LightItalic", + "category": "sans-serif", + "capHeight": 685, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 406, + "subsets": { + "latin": { + "xWidthAvg": 406 + }, + "thai": { + "xWidthAvg": 663 + } + } + }, + "200italic": { + "familyName": "Fira Sans Condensed", + "fullName": "Fira Sans Condensed ExtraLight Italic", + "postscriptName": "FiraSansCondensed-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 684, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 405, + "subsets": { + "latin": { + "xWidthAvg": 405 + }, + "thai": { + "xWidthAvg": 664 + } + } + }, + "100italic": { + "familyName": "Fira Sans Condensed", + "fullName": "Fira Sans Condensed Thin Italic", + "postscriptName": "FiraSansCondensed-ThinItalic", + "category": "sans-serif", + "capHeight": 681, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 402, + "subsets": { + "latin": { + "xWidthAvg": 402 + }, + "thai": { + "xWidthAvg": 666 + } + } + } + } + }, + "firaSansExtraCondensed": { + "familyName": "Fira Sans Extra Condensed", + "fullName": "Fira Sans Extra Condensed Regular", + "postscriptName": "FiraSansExtraCondensed-Regular", + "category": "sans-serif", + "capHeight": 689, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 527, + "xWidthAvg": 379, + "subsets": { + "latin": { + "xWidthAvg": 379 + }, + "thai": { + "xWidthAvg": 666 + } + }, + "variants": { + "100": { + "familyName": "Fira Sans Extra Condensed", + "fullName": "Fira Sans Extra Condensed Thin", + "postscriptName": "FiraSansExtraCondensed-Thin", + "category": "sans-serif", + "capHeight": 681, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 365, + "subsets": { + "latin": { + "xWidthAvg": 365 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "200": { + "familyName": "Fira Sans Extra Condensed", + "fullName": "Fira Sans Extra Condensed ExtraLight", + "postscriptName": "FiraSansExtraCondensed-ExtraLight", + "category": "sans-serif", + "capHeight": 684, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 370, + "subsets": { + "latin": { + "xWidthAvg": 370 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "300": { + "familyName": "Fira Sans Extra Condensed", + "fullName": "Fira Sans Extra Condensed Light", + "postscriptName": "FiraSansExtraCondensed-Light", + "category": "sans-serif", + "capHeight": 685, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 372, + "subsets": { + "latin": { + "xWidthAvg": 372 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "500": { + "familyName": "Fira Sans Extra Condensed", + "fullName": "Fira Sans Extra Condensed Medium", + "postscriptName": "FiraSansExtraCondensed-Medium", + "category": "sans-serif", + "capHeight": 691, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 529, + "xWidthAvg": 382, + "subsets": { + "latin": { + "xWidthAvg": 382 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "600": { + "familyName": "Fira Sans Extra Condensed", + "fullName": "Fira Sans Extra Condensed SemiBold", + "postscriptName": "FiraSansExtraCondensed-SemiBold", + "category": "sans-serif", + "capHeight": 692, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 383, + "subsets": { + "latin": { + "xWidthAvg": 383 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "700": { + "familyName": "Fira Sans Extra Condensed", + "fullName": "Fira Sans Extra Condensed Bold", + "postscriptName": "FiraSansExtraCondensed-Bold", + "category": "sans-serif", + "capHeight": 693, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 384, + "subsets": { + "latin": { + "xWidthAvg": 384 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "800": { + "familyName": "Fira Sans Extra Condensed", + "fullName": "Fira Sans Extra Condensed ExtraBold", + "postscriptName": "FiraSansExtraCondensed-ExtraBold", + "category": "sans-serif", + "capHeight": 695, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 533, + "xWidthAvg": 386, + "subsets": { + "latin": { + "xWidthAvg": 386 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "900": { + "familyName": "Fira Sans Extra Condensed", + "fullName": "Fira Sans Extra Condensed Black", + "postscriptName": "FiraSansExtraCondensed-Black", + "category": "sans-serif", + "capHeight": 696, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 387, + "subsets": { + "latin": { + "xWidthAvg": 387 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "regular": { + "familyName": "Fira Sans Extra Condensed", + "fullName": "Fira Sans Extra Condensed Regular", + "postscriptName": "FiraSansExtraCondensed-Regular", + "category": "sans-serif", + "capHeight": 689, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 527, + "xWidthAvg": 379, + "subsets": { + "latin": { + "xWidthAvg": 379 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "italic": { + "familyName": "Fira Sans Extra Condensed", + "fullName": "Fira Sans Extra Condensed Italic", + "postscriptName": "FiraSansExtraCondensed-Italic", + "category": "sans-serif", + "capHeight": 689, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 527, + "xWidthAvg": 378, + "subsets": { + "latin": { + "xWidthAvg": 378 + }, + "thai": { + "xWidthAvg": 660 + } + } + }, + "900italic": { + "familyName": "Fira Sans Extra Condensed", + "fullName": "Fira Sans Extra Condensed Black Italic", + "postscriptName": "FiraSansExtraCondensed-BlackItalic", + "category": "sans-serif", + "capHeight": 696, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 381, + "subsets": { + "latin": { + "xWidthAvg": 381 + }, + "thai": { + "xWidthAvg": 654 + } + } + }, + "800italic": { + "familyName": "Fira Sans Extra Condensed", + "fullName": "Fira Sans Extra Condensed ExtraBold Italic", + "postscriptName": "FiraSansExtraCondensed-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 695, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 533, + "xWidthAvg": 380, + "subsets": { + "latin": { + "xWidthAvg": 380 + }, + "thai": { + "xWidthAvg": 655 + } + } + }, + "700italic": { + "familyName": "Fira Sans Extra Condensed", + "fullName": "Fira Sans Extra Condensed Bold Italic", + "postscriptName": "FiraSansExtraCondensed-BoldItalic", + "category": "sans-serif", + "capHeight": 693, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 380, + "subsets": { + "latin": { + "xWidthAvg": 380 + }, + "thai": { + "xWidthAvg": 656 + } + } + }, + "600italic": { + "familyName": "Fira Sans Extra Condensed", + "fullName": "Fira Sans Extra Condensed SemiBold Italic", + "postscriptName": "FiraSansExtraCondensed-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 692, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 379, + "subsets": { + "latin": { + "xWidthAvg": 379 + }, + "thai": { + "xWidthAvg": 657 + } + } + }, + "500italic": { + "familyName": "Fira Sans Extra Condensed", + "fullName": "Fira Sans Extra Condensed Medium Italic", + "postscriptName": "FiraSansExtraCondensed-MediumItalic", + "category": "sans-serif", + "capHeight": 691, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 529, + "xWidthAvg": 379, + "subsets": { + "latin": { + "xWidthAvg": 379 + }, + "thai": { + "xWidthAvg": 658 + } + } + }, + "300italic": { + "familyName": "Fira Sans Extra Condensed", + "fullName": "Fira Sans Extra Condensed Light Italic", + "postscriptName": "FiraSansExtraCondensed-LightItalic", + "category": "sans-serif", + "capHeight": 685, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 373, + "subsets": { + "latin": { + "xWidthAvg": 373 + }, + "thai": { + "xWidthAvg": 663 + } + } + }, + "200italic": { + "familyName": "Fira Sans Extra Condensed", + "fullName": "Fira Sans Extra Condensed ExtraLight Italic", + "postscriptName": "FiraSansExtraCondensed-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 684, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 371, + "subsets": { + "latin": { + "xWidthAvg": 371 + }, + "thai": { + "xWidthAvg": 664 + } + } + }, + "100italic": { + "familyName": "Fira Sans Extra Condensed", + "fullName": "Fira Sans Extra Condensed Thin Italic", + "postscriptName": "FiraSansExtraCondensed-ThinItalic", + "category": "sans-serif", + "capHeight": 681, + "ascent": 935, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 368, + "subsets": { + "latin": { + "xWidthAvg": 368 + }, + "thai": { + "xWidthAvg": 666 + } + } + } + } + }, + "fjallaOne": { + "familyName": "Fjalla One", + "fullName": "Fjalla One Regular", + "postscriptName": "FjallaOne-Regular", + "category": "sans-serif", + "capHeight": 1708, + "ascent": 2066, + "descent": -508, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1377, + "xWidthAvg": 798, + "subsets": { + "latin": { + "xWidthAvg": 798 + }, + "thai": { + "xWidthAvg": 1316 + } + }, + "variants": { + "regular": { + "familyName": "Fjalla One", + "fullName": "Fjalla One Regular", + "postscriptName": "FjallaOne-Regular", + "category": "sans-serif", + "capHeight": 1708, + "ascent": 2066, + "descent": -508, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1377, + "xWidthAvg": 798, + "subsets": { + "latin": { + "xWidthAvg": 798 + }, + "thai": { + "xWidthAvg": 1316 + } + } + } + } + }, + "fjordOne": { + "familyName": "Fjord One", + "fullName": "Fjord One", + "postscriptName": "Fjord-One", + "category": "serif", + "capHeight": 1448, + "ascent": 1940, + "descent": -620, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 950, + "xWidthAvg": 919, + "subsets": { + "latin": { + "xWidthAvg": 919 + }, + "thai": { + "xWidthAvg": 1583 + } + }, + "variants": { + "regular": { + "familyName": "Fjord One", + "fullName": "Fjord One", + "postscriptName": "Fjord-One", + "category": "serif", + "capHeight": 1448, + "ascent": 1940, + "descent": -620, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 950, + "xWidthAvg": 919, + "subsets": { + "latin": { + "xWidthAvg": 919 + }, + "thai": { + "xWidthAvg": 1583 + } + } + } + } + }, + "flamenco": { + "familyName": "Flamenco", + "fullName": "Flamenco Regular", + "postscriptName": "Flamenco-Regular", + "category": "display", + "capHeight": 608, + "ascent": 800, + "descent": -231, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 385, + "xWidthAvg": 395, + "subsets": { + "latin": { + "xWidthAvg": 395 + }, + "thai": { + "xWidthAvg": 230 + } + }, + "variants": { + "300": { + "familyName": "Flamenco", + "fullName": "Flamenco Light", + "postscriptName": "Flamenco-Light", + "category": "display", + "capHeight": 608, + "ascent": 801, + "descent": -231, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 379, + "xWidthAvg": 386, + "subsets": { + "latin": { + "xWidthAvg": 386 + }, + "thai": { + "xWidthAvg": 230 + } + } + }, + "regular": { + "familyName": "Flamenco", + "fullName": "Flamenco Regular", + "postscriptName": "Flamenco-Regular", + "category": "display", + "capHeight": 608, + "ascent": 800, + "descent": -231, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 385, + "xWidthAvg": 395, + "subsets": { + "latin": { + "xWidthAvg": 395 + }, + "thai": { + "xWidthAvg": 230 + } + } + } + } + }, + "flavors": { + "familyName": "Flavors", + "fullName": "Flavors Regular", + "postscriptName": "Flavors-Regular", + "category": "display", + "capHeight": 801, + "ascent": 1015, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 845, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 287 + } + }, + "variants": { + "regular": { + "familyName": "Flavors", + "fullName": "Flavors Regular", + "postscriptName": "Flavors-Regular", + "category": "display", + "capHeight": 801, + "ascent": 1015, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 845, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 287 + } + } + } + } + }, + "fleurDeLeah": { + "familyName": "Fleur De Leah", + "fullName": "Fleur De Leah Regular", + "postscriptName": "FleurDeLeah-Regular", + "category": "handwriting", + "capHeight": 620, + "ascent": 920, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 324, + "xWidthAvg": 317, + "subsets": { + "latin": { + "xWidthAvg": 317 + }, + "thai": { + "xWidthAvg": 429 + } + }, + "variants": { + "regular": { + "familyName": "Fleur De Leah", + "fullName": "Fleur De Leah Regular", + "postscriptName": "FleurDeLeah-Regular", + "category": "handwriting", + "capHeight": 620, + "ascent": 920, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 324, + "xWidthAvg": 317, + "subsets": { + "latin": { + "xWidthAvg": 317 + }, + "thai": { + "xWidthAvg": 429 + } + } + } + } + }, + "flowBlock": { + "familyName": "Flow Block", + "fullName": "Flow Block Regular", + "postscriptName": "FlowBlock-Regular", + "category": "display", + "capHeight": 640, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 320, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 572 + } + }, + "variants": { + "regular": { + "familyName": "Flow Block", + "fullName": "Flow Block Regular", + "postscriptName": "FlowBlock-Regular", + "category": "display", + "capHeight": 640, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 320, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 572 + } + } + } + } + }, + "flowCircular": { + "familyName": "Flow Circular", + "fullName": "Flow Circular Regular", + "postscriptName": "FlowCircular-Regular", + "category": "display", + "capHeight": 640, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 320, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 562 + } + }, + "variants": { + "regular": { + "familyName": "Flow Circular", + "fullName": "Flow Circular Regular", + "postscriptName": "FlowCircular-Regular", + "category": "display", + "capHeight": 640, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 320, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 562 + } + } + } + } + }, + "flowRounded": { + "familyName": "Flow Rounded", + "fullName": "Flow Rounded Regular", + "postscriptName": "FlowRounded-Regular", + "category": "display", + "capHeight": 640, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 572 + } + }, + "variants": { + "regular": { + "familyName": "Flow Rounded", + "fullName": "Flow Rounded Regular", + "postscriptName": "FlowRounded-Regular", + "category": "display", + "capHeight": 640, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 572 + } + } + } + } + }, + "foldit": { + "familyName": "Foldit", + "fullName": "Foldit Regular", + "postscriptName": "Foldit-Regular", + "category": "display", + "capHeight": 700, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 327, + "subsets": { + "latin": { + "xWidthAvg": 327 + }, + "thai": { + "xWidthAvg": 862 + } + }, + "variants": { + "100": { + "familyName": "Foldit", + "fullName": "Foldit Thin", + "postscriptName": "Foldit-Thin", + "category": "display", + "capHeight": 700, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 176, + "subsets": { + "latin": { + "xWidthAvg": 176 + }, + "thai": { + "xWidthAvg": 862 + } + } + }, + "200": { + "familyName": "Foldit", + "fullName": "Foldit ExtraLight", + "postscriptName": "Foldit-ExtraLight", + "category": "display", + "capHeight": 700, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 202, + "subsets": { + "latin": { + "xWidthAvg": 202 + }, + "thai": { + "xWidthAvg": 862 + } + } + }, + "300": { + "familyName": "Foldit", + "fullName": "Foldit Light", + "postscriptName": "Foldit-Light", + "category": "display", + "capHeight": 700, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 252, + "subsets": { + "latin": { + "xWidthAvg": 252 + }, + "thai": { + "xWidthAvg": 862 + } + } + }, + "500": { + "familyName": "Foldit", + "fullName": "Foldit Medium", + "postscriptName": "Foldit-Medium", + "category": "display", + "capHeight": 700, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 402, + "subsets": { + "latin": { + "xWidthAvg": 402 + }, + "thai": { + "xWidthAvg": 862 + } + } + }, + "600": { + "familyName": "Foldit", + "fullName": "Foldit SemiBold", + "postscriptName": "Foldit-SemiBold", + "category": "display", + "capHeight": 700, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 862 + } + } + }, + "700": { + "familyName": "Foldit", + "fullName": "Foldit Bold", + "postscriptName": "Foldit-Bold", + "category": "display", + "capHeight": 700, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 862 + } + } + }, + "800": { + "familyName": "Foldit", + "fullName": "Foldit ExtraBold", + "postscriptName": "Foldit-ExtraBold", + "category": "display", + "capHeight": 700, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 622, + "subsets": { + "latin": { + "xWidthAvg": 622 + }, + "thai": { + "xWidthAvg": 862 + } + } + }, + "900": { + "familyName": "Foldit", + "fullName": "Foldit Black", + "postscriptName": "Foldit-Black", + "category": "display", + "capHeight": 700, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 716, + "subsets": { + "latin": { + "xWidthAvg": 716 + }, + "thai": { + "xWidthAvg": 862 + } + } + }, + "regular": { + "familyName": "Foldit", + "fullName": "Foldit Regular", + "postscriptName": "Foldit-Regular", + "category": "display", + "capHeight": 700, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 327, + "subsets": { + "latin": { + "xWidthAvg": 327 + }, + "thai": { + "xWidthAvg": 862 + } + } + } + } + }, + "fondamento": { + "familyName": "Fondamento", + "fullName": "Fondamento Regular", + "postscriptName": "Fondamento-Regular", + "category": "handwriting", + "capHeight": 1439, + "ascent": 2060, + "descent": -774, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 953, + "xWidthAvg": 883, + "subsets": { + "latin": { + "xWidthAvg": 883 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Fondamento", + "fullName": "Fondamento Regular", + "postscriptName": "Fondamento-Regular", + "category": "handwriting", + "capHeight": 1439, + "ascent": 2060, + "descent": -774, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 953, + "xWidthAvg": 883, + "subsets": { + "latin": { + "xWidthAvg": 883 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Fondamento", + "fullName": "Fondamento-Italic", + "postscriptName": "Fondamento-Italic", + "category": "handwriting", + "capHeight": 1439, + "ascent": 2060, + "descent": -774, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 953, + "xWidthAvg": 898, + "subsets": { + "latin": { + "xWidthAvg": 898 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "fontdinerSwanky": { + "familyName": "Fontdiner Swanky", + "fullName": "Fontdiner Swanky Regular", + "postscriptName": "FontdinerSwanky-Regular", + "category": "display", + "capHeight": 805, + "ascent": 1047, + "descent": -510, + "lineGap": 20, + "unitsPerEm": 1024, + "xHeight": 579, + "xWidthAvg": 559, + "subsets": { + "latin": { + "xWidthAvg": 559 + }, + "thai": { + "xWidthAvg": 328 + } + }, + "variants": { + "regular": { + "familyName": "Fontdiner Swanky", + "fullName": "Fontdiner Swanky Regular", + "postscriptName": "FontdinerSwanky-Regular", + "category": "display", + "capHeight": 805, + "ascent": 1047, + "descent": -510, + "lineGap": 20, + "unitsPerEm": 1024, + "xHeight": 579, + "xWidthAvg": 559, + "subsets": { + "latin": { + "xWidthAvg": 559 + }, + "thai": { + "xWidthAvg": 328 + } + } + } + } + }, + "forum": { + "familyName": "Forum", + "fullName": "Forum", + "postscriptName": "Forum", + "category": "display", + "capHeight": 660, + "ascent": 856, + "descent": -248, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 420, + "xWidthAvg": 406, + "subsets": { + "latin": { + "xWidthAvg": 406 + }, + "thai": { + "xWidthAvg": 260 + } + }, + "variants": { + "regular": { + "familyName": "Forum", + "fullName": "Forum", + "postscriptName": "Forum", + "category": "display", + "capHeight": 660, + "ascent": 856, + "descent": -248, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 420, + "xWidthAvg": 406, + "subsets": { + "latin": { + "xWidthAvg": 406 + }, + "thai": { + "xWidthAvg": 260 + } + } + } + } + }, + "fragmentMono": { + "familyName": "Fragment Mono", + "fullName": "Fragment Mono Regular", + "postscriptName": "FragmentMono-Regular", + "category": "monospace", + "capHeight": 699, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 524, + "xWidthAvg": 618, + "subsets": { + "latin": { + "xWidthAvg": 618 + }, + "thai": { + "xWidthAvg": 618 + } + }, + "variants": { + "regular": { + "familyName": "Fragment Mono", + "fullName": "Fragment Mono Regular", + "postscriptName": "FragmentMono-Regular", + "category": "monospace", + "capHeight": 699, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 524, + "xWidthAvg": 618, + "subsets": { + "latin": { + "xWidthAvg": 618 + }, + "thai": { + "xWidthAvg": 618 + } + } + }, + "italic": { + "familyName": "Fragment Mono", + "fullName": "Fragment Mono Italic", + "postscriptName": "FragmentMono-Italic", + "category": "monospace", + "capHeight": 699, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 524, + "xWidthAvg": 618, + "subsets": { + "latin": { + "xWidthAvg": 618 + }, + "thai": { + "xWidthAvg": 618 + } + } + } + } + }, + "francoisOne": { + "familyName": "Francois One", + "fullName": "Francois One Regular", + "postscriptName": "FrancoisOne-Regular", + "category": "sans-serif", + "capHeight": 750, + "ascent": 1089, + "descent": -329, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 563, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "regular": { + "familyName": "Francois One", + "fullName": "Francois One Regular", + "postscriptName": "FrancoisOne-Regular", + "category": "sans-serif", + "capHeight": 750, + "ascent": 1089, + "descent": -329, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 563, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 695 + } + } + } + } + }, + "frankRuhlLibre": { + "familyName": "Frank Ruhl Libre", + "fullName": "Frank Ruhl Libre Regular", + "postscriptName": "FrankRuhlLibre-Regular", + "category": "serif", + "capHeight": 660, + "ascent": 957, + "descent": -334, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 778 + } + }, + "variants": { + "300": { + "familyName": "Frank Ruhl Libre", + "fullName": "Frank Ruhl Libre Light", + "postscriptName": "FrankRuhlLibre-Light", + "category": "serif", + "capHeight": 660, + "ascent": 957, + "descent": -334, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 467, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 778 + } + } + }, + "500": { + "familyName": "Frank Ruhl Libre", + "fullName": "Frank Ruhl Libre Medium", + "postscriptName": "FrankRuhlLibre-Medium", + "category": "serif", + "capHeight": 660, + "ascent": 957, + "descent": -334, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 778 + } + } + }, + "600": { + "familyName": "Frank Ruhl Libre", + "fullName": "Frank Ruhl Libre SemiBold", + "postscriptName": "FrankRuhlLibre-SemiBold", + "category": "serif", + "capHeight": 660, + "ascent": 957, + "descent": -334, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 778 + } + } + }, + "700": { + "familyName": "Frank Ruhl Libre", + "fullName": "Frank Ruhl Libre Bold", + "postscriptName": "FrankRuhlLibre-Bold", + "category": "serif", + "capHeight": 660, + "ascent": 957, + "descent": -334, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 778 + } + } + }, + "800": { + "familyName": "Frank Ruhl Libre", + "fullName": "Frank Ruhl Libre ExtraBold", + "postscriptName": "FrankRuhlLibre-ExtraBold", + "category": "serif", + "capHeight": 660, + "ascent": 957, + "descent": -334, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 778 + } + } + }, + "900": { + "familyName": "Frank Ruhl Libre", + "fullName": "Frank Ruhl Libre Black", + "postscriptName": "FrankRuhlLibre-Black", + "category": "serif", + "capHeight": 660, + "ascent": 957, + "descent": -334, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 778 + } + } + }, + "regular": { + "familyName": "Frank Ruhl Libre", + "fullName": "Frank Ruhl Libre Regular", + "postscriptName": "FrankRuhlLibre-Regular", + "category": "serif", + "capHeight": 660, + "ascent": 957, + "descent": -334, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 778 + } + } + } + } + }, + "fraunces": { + "familyName": "Fraunces", + "fullName": "Fraunces Regular", + "postscriptName": "Fraunces-Regular", + "category": "serif", + "capHeight": 1400, + "ascent": 1956, + "descent": -510, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 964, + "xWidthAvg": 938, + "subsets": { + "latin": { + "xWidthAvg": 938 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "100": { + "familyName": "Fraunces", + "fullName": "Fraunces Thin", + "postscriptName": "Fraunces-Thin", + "category": "serif", + "capHeight": 1400, + "ascent": 1956, + "descent": -510, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 964, + "xWidthAvg": 876, + "subsets": { + "latin": { + "xWidthAvg": 876 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "200": { + "familyName": "Fraunces", + "fullName": "Fraunces ExtraLight", + "postscriptName": "Fraunces-ExtraLight", + "category": "serif", + "capHeight": 1400, + "ascent": 1956, + "descent": -510, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 964, + "xWidthAvg": 891, + "subsets": { + "latin": { + "xWidthAvg": 891 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "300": { + "familyName": "Fraunces", + "fullName": "Fraunces Light", + "postscriptName": "Fraunces-Light", + "category": "serif", + "capHeight": 1400, + "ascent": 1956, + "descent": -510, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 964, + "xWidthAvg": 907, + "subsets": { + "latin": { + "xWidthAvg": 907 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "500": { + "familyName": "Fraunces", + "fullName": "Fraunces Medium", + "postscriptName": "Fraunces-Medium", + "category": "serif", + "capHeight": 1400, + "ascent": 1956, + "descent": -510, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 964, + "xWidthAvg": 954, + "subsets": { + "latin": { + "xWidthAvg": 954 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "600": { + "familyName": "Fraunces", + "fullName": "Fraunces SemiBold", + "postscriptName": "Fraunces-SemiBold", + "category": "serif", + "capHeight": 1400, + "ascent": 1956, + "descent": -510, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 964, + "xWidthAvg": 969, + "subsets": { + "latin": { + "xWidthAvg": 969 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "Fraunces", + "fullName": "Fraunces Bold", + "postscriptName": "Fraunces-Bold", + "category": "serif", + "capHeight": 1400, + "ascent": 1956, + "descent": -510, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 964, + "xWidthAvg": 1000, + "subsets": { + "latin": { + "xWidthAvg": 1000 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "800": { + "familyName": "Fraunces", + "fullName": "Fraunces ExtraBold", + "postscriptName": "Fraunces-ExtraBold", + "category": "serif", + "capHeight": 1400, + "ascent": 1956, + "descent": -510, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 964, + "xWidthAvg": 1016, + "subsets": { + "latin": { + "xWidthAvg": 1016 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "900": { + "familyName": "Fraunces", + "fullName": "Fraunces Black", + "postscriptName": "Fraunces-Black", + "category": "serif", + "capHeight": 1400, + "ascent": 1956, + "descent": -510, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 964, + "xWidthAvg": 1032, + "subsets": { + "latin": { + "xWidthAvg": 1032 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Fraunces", + "fullName": "Fraunces Regular", + "postscriptName": "Fraunces-Regular", + "category": "serif", + "capHeight": 1400, + "ascent": 1956, + "descent": -510, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 964, + "xWidthAvg": 938, + "subsets": { + "latin": { + "xWidthAvg": 938 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "italic": { + "familyName": "Fraunces", + "fullName": "Fraunces Italic", + "postscriptName": "Fraunces-Italic", + "category": "serif", + "capHeight": 1400, + "ascent": 1956, + "descent": -510, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 940, + "xWidthAvg": 896, + "subsets": { + "latin": { + "xWidthAvg": 896 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "900italic": { + "familyName": "Fraunces", + "fullName": "Fraunces Black Italic", + "postscriptName": "Fraunces-BlackItalic", + "category": "serif", + "capHeight": 1400, + "ascent": 1956, + "descent": -510, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 940, + "xWidthAvg": 1019, + "subsets": { + "latin": { + "xWidthAvg": 1019 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "800italic": { + "familyName": "Fraunces", + "fullName": "Fraunces ExtraBold Italic", + "postscriptName": "Fraunces-ExtraBoldItalic", + "category": "serif", + "capHeight": 1400, + "ascent": 1956, + "descent": -510, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 940, + "xWidthAvg": 998, + "subsets": { + "latin": { + "xWidthAvg": 998 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700italic": { + "familyName": "Fraunces", + "fullName": "Fraunces Bold Italic", + "postscriptName": "Fraunces-BoldItalic", + "category": "serif", + "capHeight": 1400, + "ascent": 1956, + "descent": -510, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 940, + "xWidthAvg": 978, + "subsets": { + "latin": { + "xWidthAvg": 978 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "600italic": { + "familyName": "Fraunces", + "fullName": "Fraunces SemiBold Italic", + "postscriptName": "Fraunces-SemiBoldItalic", + "category": "serif", + "capHeight": 1400, + "ascent": 1956, + "descent": -510, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 940, + "xWidthAvg": 937, + "subsets": { + "latin": { + "xWidthAvg": 937 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "500italic": { + "familyName": "Fraunces", + "fullName": "Fraunces Medium Italic", + "postscriptName": "Fraunces-MediumItalic", + "category": "serif", + "capHeight": 1400, + "ascent": 1956, + "descent": -510, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 940, + "xWidthAvg": 917, + "subsets": { + "latin": { + "xWidthAvg": 917 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "300italic": { + "familyName": "Fraunces", + "fullName": "Fraunces Light Italic", + "postscriptName": "Fraunces-LightItalic", + "category": "serif", + "capHeight": 1400, + "ascent": 1956, + "descent": -510, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 940, + "xWidthAvg": 855, + "subsets": { + "latin": { + "xWidthAvg": 855 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "200italic": { + "familyName": "Fraunces", + "fullName": "Fraunces ExtraLight Italic", + "postscriptName": "Fraunces-ExtraLightItalic", + "category": "serif", + "capHeight": 1400, + "ascent": 1956, + "descent": -510, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 940, + "xWidthAvg": 835, + "subsets": { + "latin": { + "xWidthAvg": 835 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "100italic": { + "familyName": "Fraunces", + "fullName": "Fraunces Thin Italic", + "postscriptName": "Fraunces-ThinItalic", + "category": "serif", + "capHeight": 1400, + "ascent": 1956, + "descent": -510, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 940, + "xWidthAvg": 814, + "subsets": { + "latin": { + "xWidthAvg": 814 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "freckleFace": { + "familyName": "Freckle Face", + "fullName": "Freckle Face", + "postscriptName": "FreckleFace-Regular", + "category": "display", + "capHeight": 1563, + "ascent": 1946, + "descent": -571, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1147, + "xWidthAvg": 871, + "subsets": { + "latin": { + "xWidthAvg": 871 + }, + "thai": { + "xWidthAvg": 471 + } + }, + "variants": { + "regular": { + "familyName": "Freckle Face", + "fullName": "Freckle Face", + "postscriptName": "FreckleFace-Regular", + "category": "display", + "capHeight": 1563, + "ascent": 1946, + "descent": -571, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1147, + "xWidthAvg": 871, + "subsets": { + "latin": { + "xWidthAvg": 871 + }, + "thai": { + "xWidthAvg": 471 + } + } + } + } + }, + "frederickaTheGreat": { + "familyName": "Fredericka the Great", + "fullName": "Fredericka the Great", + "postscriptName": "FrederickatheGreat-Regular", + "category": "display", + "capHeight": 772, + "ascent": 1001, + "descent": -254, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 519, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 372 + } + }, + "variants": { + "regular": { + "familyName": "Fredericka the Great", + "fullName": "Fredericka the Great", + "postscriptName": "FrederickatheGreat-Regular", + "category": "display", + "capHeight": 772, + "ascent": 1001, + "descent": -254, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 519, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 372 + } + } + } + } + }, + "fredoka": { + "familyName": "Fredoka", + "fullName": "Fredoka Regular", + "postscriptName": "Fredoka-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 974, + "descent": -236, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 543 + } + }, + "variants": { + "300": { + "familyName": "Fredoka", + "fullName": "Fredoka Light", + "postscriptName": "Fredoka-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 974, + "descent": -236, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 543 + } + } + }, + "500": { + "familyName": "Fredoka", + "fullName": "Fredoka Medium", + "postscriptName": "Fredoka-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 974, + "descent": -236, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 543 + } + } + }, + "600": { + "familyName": "Fredoka", + "fullName": "Fredoka SemiBold", + "postscriptName": "Fredoka-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 974, + "descent": -236, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 543 + } + } + }, + "700": { + "familyName": "Fredoka", + "fullName": "Fredoka Bold", + "postscriptName": "Fredoka-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 974, + "descent": -236, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 543 + } + } + }, + "regular": { + "familyName": "Fredoka", + "fullName": "Fredoka Regular", + "postscriptName": "Fredoka-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 974, + "descent": -236, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 543 + } + } + } + } + }, + "freehand": { + "familyName": "Freehand", + "fullName": "Freehand Regular", + "postscriptName": "Freehand-Regular", + "category": "display", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 755, + "subsets": { + "latin": { + "xWidthAvg": 755 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Freehand", + "fullName": "Freehand Regular", + "postscriptName": "Freehand-Regular", + "category": "display", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 755, + "subsets": { + "latin": { + "xWidthAvg": 755 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "freeman": { + "familyName": "Freeman", + "fullName": "Freeman Regular", + "postscriptName": "Freeman-Regular", + "category": "display", + "capHeight": 750, + "ascent": 1050, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 564, + "xWidthAvg": 404, + "subsets": { + "latin": { + "xWidthAvg": 404 + }, + "thai": { + "xWidthAvg": 648 + } + }, + "variants": { + "regular": { + "familyName": "Freeman", + "fullName": "Freeman Regular", + "postscriptName": "Freeman-Regular", + "category": "display", + "capHeight": 750, + "ascent": 1050, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 564, + "xWidthAvg": 404, + "subsets": { + "latin": { + "xWidthAvg": 404 + }, + "thai": { + "xWidthAvg": 648 + } + } + } + } + }, + "fresca": { + "familyName": "Fresca", + "fullName": "Fresca-Regular", + "postscriptName": "Fresca-Regular", + "category": "sans-serif", + "capHeight": 648, + "ascent": 869, + "descent": -285, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 403, + "subsets": { + "latin": { + "xWidthAvg": 403 + }, + "thai": { + "xWidthAvg": 546 + } + }, + "variants": { + "regular": { + "familyName": "Fresca", + "fullName": "Fresca-Regular", + "postscriptName": "Fresca-Regular", + "category": "sans-serif", + "capHeight": 648, + "ascent": 869, + "descent": -285, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 403, + "subsets": { + "latin": { + "xWidthAvg": 403 + }, + "thai": { + "xWidthAvg": 546 + } + } + } + } + }, + "frijole": { + "familyName": "Frijole", + "fullName": "Frijole", + "postscriptName": "Frijole", + "category": "display", + "capHeight": 788, + "ascent": 1075, + "descent": -337, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 712, + "xWidthAvg": 757, + "subsets": { + "latin": { + "xWidthAvg": 757 + }, + "thai": { + "xWidthAvg": 502 + } + }, + "variants": { + "regular": { + "familyName": "Frijole", + "fullName": "Frijole", + "postscriptName": "Frijole", + "category": "display", + "capHeight": 788, + "ascent": 1075, + "descent": -337, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 712, + "xWidthAvg": 757, + "subsets": { + "latin": { + "xWidthAvg": 757 + }, + "thai": { + "xWidthAvg": 502 + } + } + } + } + }, + "fruktur": { + "familyName": "Fruktur", + "fullName": "Fruktur Regular", + "postscriptName": "Fruktur-Regular", + "category": "display", + "capHeight": 1529, + "ascent": 2020, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1182, + "xWidthAvg": 921, + "subsets": { + "latin": { + "xWidthAvg": 921 + }, + "thai": { + "xWidthAvg": 1703 + } + }, + "variants": { + "regular": { + "familyName": "Fruktur", + "fullName": "Fruktur Regular", + "postscriptName": "Fruktur-Regular", + "category": "display", + "capHeight": 1529, + "ascent": 2020, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1182, + "xWidthAvg": 921, + "subsets": { + "latin": { + "xWidthAvg": 921 + }, + "thai": { + "xWidthAvg": 1703 + } + } + }, + "italic": { + "familyName": "Fruktur", + "fullName": "Fruktur Italic", + "postscriptName": "Fruktur-Italic", + "category": "display", + "capHeight": 1529, + "ascent": 2020, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1182, + "xWidthAvg": 897, + "subsets": { + "latin": { + "xWidthAvg": 897 + }, + "thai": { + "xWidthAvg": 1703 + } + } + } + } + }, + "fugazOne": { + "familyName": "Fugaz One", + "fullName": "Fugaz One", + "postscriptName": "FugazOne-Regular", + "category": "display", + "capHeight": 720, + "ascent": 1046, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 597 + } + }, + "variants": { + "regular": { + "familyName": "Fugaz One", + "fullName": "Fugaz One", + "postscriptName": "FugazOne-Regular", + "category": "display", + "capHeight": 720, + "ascent": 1046, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 597 + } + } + } + } + }, + "fuggles": { + "familyName": "Fuggles", + "fullName": "Fuggles Regular", + "postscriptName": "Fuggles-Regular", + "category": "handwriting", + "capHeight": 667, + "ascent": 850, + "descent": -351, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 234, + "subsets": { + "latin": { + "xWidthAvg": 234 + }, + "thai": { + "xWidthAvg": 200 + } + }, + "variants": { + "regular": { + "familyName": "Fuggles", + "fullName": "Fuggles Regular", + "postscriptName": "Fuggles-Regular", + "category": "handwriting", + "capHeight": 667, + "ascent": 850, + "descent": -351, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 234, + "subsets": { + "latin": { + "xWidthAvg": 234 + }, + "thai": { + "xWidthAvg": 200 + } + } + } + } + }, + "funnelDisplay": { + "familyName": "Funnel Display", + "fullName": "Funnel Display Regular", + "postscriptName": "FunnelDisplay-Regular", + "category": "display", + "capHeight": 810, + "ascent": 1200, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 570, + "subsets": { + "latin": { + "xWidthAvg": 570 + }, + "thai": { + "xWidthAvg": 720 + } + }, + "variants": { + "300": { + "familyName": "Funnel Display", + "fullName": "Funnel Display Light", + "postscriptName": "FunnelDisplay-Light", + "category": "display", + "capHeight": 810, + "ascent": 1200, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 565, + "subsets": { + "latin": { + "xWidthAvg": 565 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "500": { + "familyName": "Funnel Display", + "fullName": "Funnel Display Medium", + "postscriptName": "FunnelDisplay-Medium", + "category": "display", + "capHeight": 810, + "ascent": 1200, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 577, + "subsets": { + "latin": { + "xWidthAvg": 577 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "600": { + "familyName": "Funnel Display", + "fullName": "Funnel Display SemiBold", + "postscriptName": "FunnelDisplay-SemiBold", + "category": "display", + "capHeight": 810, + "ascent": 1200, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 580, + "subsets": { + "latin": { + "xWidthAvg": 580 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "700": { + "familyName": "Funnel Display", + "fullName": "Funnel Display Bold", + "postscriptName": "FunnelDisplay-Bold", + "category": "display", + "capHeight": 810, + "ascent": 1200, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 585, + "subsets": { + "latin": { + "xWidthAvg": 585 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "800": { + "familyName": "Funnel Display", + "fullName": "Funnel Display ExtraBold", + "postscriptName": "FunnelDisplay-ExtraBold", + "category": "display", + "capHeight": 810, + "ascent": 1200, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 589, + "subsets": { + "latin": { + "xWidthAvg": 589 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "regular": { + "familyName": "Funnel Display", + "fullName": "Funnel Display Regular", + "postscriptName": "FunnelDisplay-Regular", + "category": "display", + "capHeight": 810, + "ascent": 1200, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 570, + "subsets": { + "latin": { + "xWidthAvg": 570 + }, + "thai": { + "xWidthAvg": 720 + } + } + } + } + }, + "funnelSans": { + "familyName": "Funnel Sans", + "fullName": "Funnel Sans Regular", + "postscriptName": "FunnelSans-Regular", + "category": "sans-serif", + "capHeight": 810, + "ascent": 1200, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 541, + "subsets": { + "latin": { + "xWidthAvg": 541 + }, + "thai": { + "xWidthAvg": 720 + } + }, + "variants": { + "300": { + "familyName": "Funnel Sans", + "fullName": "Funnel Sans Light", + "postscriptName": "FunnelSans-Light", + "category": "sans-serif", + "capHeight": 810, + "ascent": 1200, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 538, + "subsets": { + "latin": { + "xWidthAvg": 538 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "500": { + "familyName": "Funnel Sans", + "fullName": "Funnel Sans Medium", + "postscriptName": "FunnelSans-Medium", + "category": "sans-serif", + "capHeight": 810, + "ascent": 1200, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 545, + "subsets": { + "latin": { + "xWidthAvg": 545 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "600": { + "familyName": "Funnel Sans", + "fullName": "Funnel Sans SemiBold", + "postscriptName": "FunnelSans-SemiBold", + "category": "sans-serif", + "capHeight": 810, + "ascent": 1200, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 548, + "subsets": { + "latin": { + "xWidthAvg": 548 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "700": { + "familyName": "Funnel Sans", + "fullName": "Funnel Sans Bold", + "postscriptName": "FunnelSans-Bold", + "category": "sans-serif", + "capHeight": 810, + "ascent": 1200, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 551, + "subsets": { + "latin": { + "xWidthAvg": 551 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "800": { + "familyName": "Funnel Sans", + "fullName": "Funnel Sans ExtraBold", + "postscriptName": "FunnelSans-ExtraBold", + "category": "sans-serif", + "capHeight": 810, + "ascent": 1200, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 554, + "subsets": { + "latin": { + "xWidthAvg": 554 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "regular": { + "familyName": "Funnel Sans", + "fullName": "Funnel Sans Regular", + "postscriptName": "FunnelSans-Regular", + "category": "sans-serif", + "capHeight": 810, + "ascent": 1200, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 541, + "subsets": { + "latin": { + "xWidthAvg": 541 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "italic": { + "familyName": "Funnel Sans", + "fullName": "Funnel Sans Italic", + "postscriptName": "FunnelSans-Italic", + "category": "sans-serif", + "capHeight": 810, + "ascent": 1200, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 541, + "subsets": { + "latin": { + "xWidthAvg": 541 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "800italic": { + "familyName": "Funnel Sans", + "fullName": "Funnel Sans ExtraBold Italic", + "postscriptName": "FunnelSans-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 810, + "ascent": 1200, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 554, + "subsets": { + "latin": { + "xWidthAvg": 554 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "700italic": { + "familyName": "Funnel Sans", + "fullName": "Funnel Sans Bold Italic", + "postscriptName": "FunnelSans-BoldItalic", + "category": "sans-serif", + "capHeight": 810, + "ascent": 1200, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 551, + "subsets": { + "latin": { + "xWidthAvg": 551 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "600italic": { + "familyName": "Funnel Sans", + "fullName": "Funnel Sans SemiBold Italic", + "postscriptName": "FunnelSans-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 810, + "ascent": 1200, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 548, + "subsets": { + "latin": { + "xWidthAvg": 548 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "500italic": { + "familyName": "Funnel Sans", + "fullName": "Funnel Sans Medium Italic", + "postscriptName": "FunnelSans-MediumItalic", + "category": "sans-serif", + "capHeight": 810, + "ascent": 1200, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 545, + "subsets": { + "latin": { + "xWidthAvg": 545 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "300italic": { + "familyName": "Funnel Sans", + "fullName": "Funnel Sans Light Italic", + "postscriptName": "FunnelSans-LightItalic", + "category": "sans-serif", + "capHeight": 810, + "ascent": 1200, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1200, + "xHeight": 600, + "xWidthAvg": 538, + "subsets": { + "latin": { + "xWidthAvg": 538 + }, + "thai": { + "xWidthAvg": 720 + } + } + } + } + }, + "fustat": { + "familyName": "Fustat", + "fullName": "Fustat Regular", + "postscriptName": "Fustat-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -420, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 660 + } + }, + "variants": { + "200": { + "familyName": "Fustat", + "fullName": "Fustat ExtraLight", + "postscriptName": "Fustat-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -420, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "300": { + "familyName": "Fustat", + "fullName": "Fustat Light", + "postscriptName": "Fustat-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -420, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 678 + } + } + }, + "500": { + "familyName": "Fustat", + "fullName": "Fustat Medium", + "postscriptName": "Fustat-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -420, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 657 + } + } + }, + "600": { + "familyName": "Fustat", + "fullName": "Fustat SemiBold", + "postscriptName": "Fustat-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -420, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 503, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 652 + } + } + }, + "700": { + "familyName": "Fustat", + "fullName": "Fustat Bold", + "postscriptName": "Fustat-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -420, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 647 + } + } + }, + "800": { + "familyName": "Fustat", + "fullName": "Fustat ExtraBold", + "postscriptName": "Fustat-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -420, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "regular": { + "familyName": "Fustat", + "fullName": "Fustat Regular", + "postscriptName": "Fustat-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -420, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 660 + } + } + } + } + }, + "fuzzyBubbles": { + "familyName": "Fuzzy Bubbles", + "fullName": "Fuzzy Bubbles Regular", + "postscriptName": "FuzzyBubbles-Regular", + "category": "handwriting", + "capHeight": 670, + "ascent": 900, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 521, + "subsets": { + "latin": { + "xWidthAvg": 521 + }, + "thai": { + "xWidthAvg": 518 + } + }, + "variants": { + "700": { + "familyName": "Fuzzy Bubbles", + "fullName": "Fuzzy Bubbles Bold", + "postscriptName": "FuzzyBubbles-Bold", + "category": "handwriting", + "capHeight": 680, + "ascent": 900, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 521, + "subsets": { + "latin": { + "xWidthAvg": 521 + }, + "thai": { + "xWidthAvg": 518 + } + } + }, + "regular": { + "familyName": "Fuzzy Bubbles", + "fullName": "Fuzzy Bubbles Regular", + "postscriptName": "FuzzyBubbles-Regular", + "category": "handwriting", + "capHeight": 670, + "ascent": 900, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 521, + "subsets": { + "latin": { + "xWidthAvg": 521 + }, + "thai": { + "xWidthAvg": 518 + } + } + } + } + }, + "gFSDidot": { + "familyName": "GFS Didot", + "fullName": "GFS Didot Regular", + "postscriptName": "GFSDidot-Regular", + "category": "serif", + "capHeight": 689, + "ascent": 947, + "descent": -277, + "lineGap": 25, + "unitsPerEm": 1000, + "xHeight": 456, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 499 + } + }, + "variants": { + "regular": { + "familyName": "GFS Didot", + "fullName": "GFS Didot Regular", + "postscriptName": "GFSDidot-Regular", + "category": "serif", + "capHeight": 689, + "ascent": 947, + "descent": -277, + "lineGap": 25, + "unitsPerEm": 1000, + "xHeight": 456, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 499 + } + } + } + } + }, + "gFSNeohellenic": { + "familyName": "GFS Neohellenic", + "fullName": "GFS Neohellenic Regular", + "postscriptName": "GFSNeohellenic-Regular", + "category": "sans-serif", + "capHeight": 623, + "ascent": 873, + "descent": -245, + "lineGap": 24, + "unitsPerEm": 1000, + "xHeight": 387, + "xWidthAvg": 389, + "subsets": { + "latin": { + "xWidthAvg": 389 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "700": { + "familyName": "GFS Neohellenic", + "fullName": "GFS Neohellenic Bold", + "postscriptName": "GFSNeohellenic-Bold", + "category": "sans-serif", + "capHeight": 623, + "ascent": 871, + "descent": -264, + "lineGap": 22, + "unitsPerEm": 1000, + "xHeight": 388, + "xWidthAvg": 396, + "subsets": { + "latin": { + "xWidthAvg": 396 + }, + "thai": { + "xWidthAvg": 398 + } + } + }, + "regular": { + "familyName": "GFS Neohellenic", + "fullName": "GFS Neohellenic Regular", + "postscriptName": "GFSNeohellenic-Regular", + "category": "sans-serif", + "capHeight": 623, + "ascent": 873, + "descent": -245, + "lineGap": 24, + "unitsPerEm": 1000, + "xHeight": 387, + "xWidthAvg": 389, + "subsets": { + "latin": { + "xWidthAvg": 389 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "GFS Neohellenic", + "fullName": "GFS Neohellenic Italic", + "postscriptName": "GFSNeohellenic-Italic", + "category": "sans-serif", + "capHeight": 623, + "ascent": 877, + "descent": -242, + "lineGap": 24, + "unitsPerEm": 1000, + "xHeight": 388, + "xWidthAvg": 394, + "subsets": { + "latin": { + "xWidthAvg": 394 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700italic": { + "familyName": "GFS Neohellenic", + "fullName": "GFS Neohellenic Bold Italic", + "postscriptName": "GFSNeohellenic-BoldItalic", + "category": "sans-serif", + "capHeight": 625, + "ascent": 872, + "descent": -264, + "lineGap": 23, + "unitsPerEm": 1000, + "xHeight": 388, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "gaMaamli": { + "familyName": "Ga Maamli", + "fullName": "Ga Maamli Regular", + "postscriptName": "GaMaamli-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 812 + } + }, + "variants": { + "regular": { + "familyName": "Ga Maamli", + "fullName": "Ga Maamli Regular", + "postscriptName": "GaMaamli-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 812 + } + } + } + } + }, + "gabarito": { + "familyName": "Gabarito", + "fullName": "Gabarito Regular", + "postscriptName": "Gabarito-Regular", + "category": "display", + "capHeight": 681, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 834 + } + }, + "variants": { + "500": { + "familyName": "Gabarito", + "fullName": "Gabarito Medium", + "postscriptName": "Gabarito-Medium", + "category": "display", + "capHeight": 681, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 834 + } + } + }, + "600": { + "familyName": "Gabarito", + "fullName": "Gabarito SemiBold", + "postscriptName": "Gabarito-SemiBold", + "category": "display", + "capHeight": 681, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 489, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 834 + } + } + }, + "700": { + "familyName": "Gabarito", + "fullName": "Gabarito Bold", + "postscriptName": "Gabarito-Bold", + "category": "display", + "capHeight": 681, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 489, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 834 + } + } + }, + "800": { + "familyName": "Gabarito", + "fullName": "Gabarito ExtraBold", + "postscriptName": "Gabarito-ExtraBold", + "category": "display", + "capHeight": 681, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 834 + } + } + }, + "900": { + "familyName": "Gabarito", + "fullName": "Gabarito Black", + "postscriptName": "Gabarito-Black", + "category": "display", + "capHeight": 681, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 834 + } + } + }, + "regular": { + "familyName": "Gabarito", + "fullName": "Gabarito Regular", + "postscriptName": "Gabarito-Regular", + "category": "display", + "capHeight": 681, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 834 + } + } + } + } + }, + "gabriela": { + "familyName": "Gabriela", + "fullName": "Gabriela Regular", + "postscriptName": "Gabriela-Regular", + "category": "serif", + "capHeight": 718, + "ascent": 986, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 497, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 751 + } + }, + "variants": { + "regular": { + "familyName": "Gabriela", + "fullName": "Gabriela Regular", + "postscriptName": "Gabriela-Regular", + "category": "serif", + "capHeight": 718, + "ascent": 986, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 497, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 751 + } + } + } + } + }, + "gaegu": { + "familyName": "Gaegu", + "fullName": "Gaegu Regular", + "postscriptName": "Gaegu-Regular", + "category": "handwriting", + "capHeight": 525, + "ascent": 760, + "descent": -240, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 340, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 720 + } + }, + "variants": { + "300": { + "familyName": "Gaegu", + "fullName": "Gaegu Light", + "postscriptName": "Gaegu-Light", + "category": "handwriting", + "capHeight": 525, + "ascent": 760, + "descent": -240, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 491, + "subsets": { + "latin": { + "xWidthAvg": 491 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "700": { + "familyName": "Gaegu", + "fullName": "Gaegu Bold", + "postscriptName": "Gaegu-Bold", + "category": "handwriting", + "capHeight": 525, + "ascent": 760, + "descent": -240, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 340, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 720 + } + } + }, + "regular": { + "familyName": "Gaegu", + "fullName": "Gaegu Regular", + "postscriptName": "Gaegu-Regular", + "category": "handwriting", + "capHeight": 525, + "ascent": 760, + "descent": -240, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 340, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 720 + } + } + } + } + }, + "gafata": { + "familyName": "Gafata", + "fullName": "Gafata", + "postscriptName": "Gafata-Regular", + "category": "sans-serif", + "capHeight": 648, + "ascent": 921, + "descent": -202, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 406, + "subsets": { + "latin": { + "xWidthAvg": 406 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Gafata", + "fullName": "Gafata", + "postscriptName": "Gafata-Regular", + "category": "sans-serif", + "capHeight": 648, + "ascent": 921, + "descent": -202, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 406, + "subsets": { + "latin": { + "xWidthAvg": 406 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "gajrajOne": { + "familyName": "Gajraj One", + "fullName": "Gajraj One Regular", + "postscriptName": "GajrajOne-Regular", + "category": "display", + "capHeight": 665, + "ascent": 1065, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 565, + "subsets": { + "latin": { + "xWidthAvg": 565 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Gajraj One", + "fullName": "Gajraj One Regular", + "postscriptName": "GajrajOne-Regular", + "category": "display", + "capHeight": 665, + "ascent": 1065, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 565, + "subsets": { + "latin": { + "xWidthAvg": 565 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "galada": { + "familyName": "Galada", + "fullName": "Galada Regular", + "postscriptName": "Galada-Regular", + "category": "display", + "capHeight": 750, + "ascent": 1035, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 392, + "subsets": { + "latin": { + "xWidthAvg": 392 + }, + "thai": { + "xWidthAvg": 385 + } + }, + "variants": { + "regular": { + "familyName": "Galada", + "fullName": "Galada Regular", + "postscriptName": "Galada-Regular", + "category": "display", + "capHeight": 750, + "ascent": 1035, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 392, + "subsets": { + "latin": { + "xWidthAvg": 392 + }, + "thai": { + "xWidthAvg": 385 + } + } + } + } + }, + "galdeano": { + "familyName": "Galdeano", + "fullName": "Galdeano Regular", + "postscriptName": "Galdeano-Regular", + "category": "sans-serif", + "capHeight": 605, + "ascent": 820, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 166, + "xWidthAvg": 396, + "subsets": { + "latin": { + "xWidthAvg": 396 + }, + "thai": { + "xWidthAvg": 250 + } + }, + "variants": { + "regular": { + "familyName": "Galdeano", + "fullName": "Galdeano Regular", + "postscriptName": "Galdeano-Regular", + "category": "sans-serif", + "capHeight": 605, + "ascent": 820, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 166, + "xWidthAvg": 396, + "subsets": { + "latin": { + "xWidthAvg": 396 + }, + "thai": { + "xWidthAvg": 250 + } + } + } + } + }, + "galindo": { + "familyName": "Galindo", + "fullName": "Galindo", + "postscriptName": "Galindo-Regular", + "category": "display", + "capHeight": 1505, + "ascent": 2014, + "descent": -883, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1096, + "xWidthAvg": 1085, + "subsets": { + "latin": { + "xWidthAvg": 1085 + }, + "thai": { + "xWidthAvg": 614 + } + }, + "variants": { + "regular": { + "familyName": "Galindo", + "fullName": "Galindo", + "postscriptName": "Galindo-Regular", + "category": "display", + "capHeight": 1505, + "ascent": 2014, + "descent": -883, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1096, + "xWidthAvg": 1085, + "subsets": { + "latin": { + "xWidthAvg": 1085 + }, + "thai": { + "xWidthAvg": 614 + } + } + } + } + }, + "gamjaFlower": { + "familyName": "Gamja Flower", + "fullName": "Gamja Flower Regular", + "postscriptName": "GamjaFlower-Regular", + "category": "handwriting", + "capHeight": 526, + "ascent": 800, + "descent": -224, + "lineGap": 256, + "unitsPerEm": 1024, + "xHeight": 311, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Gamja Flower", + "fullName": "Gamja Flower Regular", + "postscriptName": "GamjaFlower-Regular", + "category": "handwriting", + "capHeight": 526, + "ascent": 800, + "descent": -224, + "lineGap": 256, + "unitsPerEm": 1024, + "xHeight": 311, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "gantari": { + "familyName": "Gantari", + "fullName": "Gantari Regular", + "postscriptName": "Gantari-Regular", + "category": "sans-serif", + "capHeight": 668, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 496 + } + }, + "variants": { + "100": { + "familyName": "Gantari", + "fullName": "Gantari Thin", + "postscriptName": "Gantari-Thin", + "category": "sans-serif", + "capHeight": 668, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 496 + } + } + }, + "200": { + "familyName": "Gantari", + "fullName": "Gantari ExtraLight", + "postscriptName": "Gantari-ExtraLight", + "category": "sans-serif", + "capHeight": 668, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 496 + } + } + }, + "300": { + "familyName": "Gantari", + "fullName": "Gantari Light", + "postscriptName": "Gantari-Light", + "category": "sans-serif", + "capHeight": 668, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 496 + } + } + }, + "500": { + "familyName": "Gantari", + "fullName": "Gantari Medium", + "postscriptName": "Gantari-Medium", + "category": "sans-serif", + "capHeight": 668, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 496 + } + } + }, + "600": { + "familyName": "Gantari", + "fullName": "Gantari SemiBold", + "postscriptName": "Gantari-SemiBold", + "category": "sans-serif", + "capHeight": 668, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 496 + } + } + }, + "700": { + "familyName": "Gantari", + "fullName": "Gantari Bold", + "postscriptName": "Gantari-Bold", + "category": "sans-serif", + "capHeight": 668, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 496 + } + } + }, + "800": { + "familyName": "Gantari", + "fullName": "Gantari ExtraBold", + "postscriptName": "Gantari-ExtraBold", + "category": "sans-serif", + "capHeight": 668, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 496 + } + } + }, + "900": { + "familyName": "Gantari", + "fullName": "Gantari Black", + "postscriptName": "Gantari-Black", + "category": "sans-serif", + "capHeight": 668, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 496 + } + } + }, + "regular": { + "familyName": "Gantari", + "fullName": "Gantari Regular", + "postscriptName": "Gantari-Regular", + "category": "sans-serif", + "capHeight": 668, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 496 + } + } + }, + "italic": { + "familyName": "Gantari", + "fullName": "Gantari Italic", + "postscriptName": "Gantari-Italic", + "category": "sans-serif", + "capHeight": 668, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 496 + } + } + }, + "900italic": { + "familyName": "Gantari", + "fullName": "Gantari Black Italic", + "postscriptName": "Gantari-BlackItalic", + "category": "sans-serif", + "capHeight": 668, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 496 + } + } + }, + "800italic": { + "familyName": "Gantari", + "fullName": "Gantari ExtraBold Italic", + "postscriptName": "Gantari-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 668, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 496 + } + } + }, + "700italic": { + "familyName": "Gantari", + "fullName": "Gantari Bold Italic", + "postscriptName": "Gantari-BoldItalic", + "category": "sans-serif", + "capHeight": 668, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 496 + } + } + }, + "600italic": { + "familyName": "Gantari", + "fullName": "Gantari SemiBold Italic", + "postscriptName": "Gantari-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 668, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 496 + } + } + }, + "500italic": { + "familyName": "Gantari", + "fullName": "Gantari Medium Italic", + "postscriptName": "Gantari-MediumItalic", + "category": "sans-serif", + "capHeight": 668, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 496 + } + } + }, + "300italic": { + "familyName": "Gantari", + "fullName": "Gantari Light Italic", + "postscriptName": "Gantari-LightItalic", + "category": "sans-serif", + "capHeight": 668, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 496 + } + } + }, + "200italic": { + "familyName": "Gantari", + "fullName": "Gantari ExtraLight Italic", + "postscriptName": "Gantari-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 668, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 496 + } + } + }, + "100italic": { + "familyName": "Gantari", + "fullName": "Gantari Thin Italic", + "postscriptName": "Gantari-ThinItalic", + "category": "sans-serif", + "capHeight": 668, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 496 + } + } + } + } + }, + "gasoekOne": { + "familyName": "Gasoek One", + "fullName": "Gasoek One Regular", + "postscriptName": "GasoekOne-Regular", + "category": "sans-serif", + "capHeight": 770, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 620, + "xWidthAvg": 555, + "subsets": { + "latin": { + "xWidthAvg": 555 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Gasoek One", + "fullName": "Gasoek One Regular", + "postscriptName": "GasoekOne-Regular", + "category": "sans-serif", + "capHeight": 770, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 620, + "xWidthAvg": 555, + "subsets": { + "latin": { + "xWidthAvg": 555 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "gayathri": { + "familyName": "Gayathri", + "fullName": "Gayathri Regular", + "postscriptName": "Gayathri-Regular", + "category": "sans-serif", + "capHeight": 1385, + "ascent": 1500, + "descent": -1000, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1000, + "xWidthAvg": 899, + "subsets": { + "latin": { + "xWidthAvg": 899 + }, + "thai": { + "xWidthAvg": 692 + } + }, + "variants": { + "100": { + "familyName": "Gayathri", + "fullName": "Gayathri Thin", + "postscriptName": "Gayathri-Thin", + "category": "sans-serif", + "capHeight": 1385, + "ascent": 1500, + "descent": -1000, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1000, + "xWidthAvg": 867, + "subsets": { + "latin": { + "xWidthAvg": 867 + }, + "thai": { + "xWidthAvg": 692 + } + } + }, + "700": { + "familyName": "Gayathri", + "fullName": "Gayathri Bold", + "postscriptName": "Gayathri-Bold", + "category": "sans-serif", + "capHeight": 1385, + "ascent": 1500, + "descent": -1000, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1000, + "xWidthAvg": 932, + "subsets": { + "latin": { + "xWidthAvg": 932 + }, + "thai": { + "xWidthAvg": 692 + } + } + }, + "regular": { + "familyName": "Gayathri", + "fullName": "Gayathri Regular", + "postscriptName": "Gayathri-Regular", + "category": "sans-serif", + "capHeight": 1385, + "ascent": 1500, + "descent": -1000, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1000, + "xWidthAvg": 899, + "subsets": { + "latin": { + "xWidthAvg": 899 + }, + "thai": { + "xWidthAvg": 692 + } + } + } + } + }, + "geist": { + "familyName": "Geist", + "fullName": "Geist Regular", + "postscriptName": "Geist-Regular", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1005, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Geist", + "fullName": "Geist Thin", + "postscriptName": "Geist-Thin", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1005, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 605 + } + } + }, + "200": { + "familyName": "Geist", + "fullName": "Geist ExtraLight", + "postscriptName": "Geist-ExtraLight", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1005, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 603 + } + } + }, + "300": { + "familyName": "Geist", + "fullName": "Geist Light", + "postscriptName": "Geist-Light", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1005, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 602 + } + } + }, + "500": { + "familyName": "Geist", + "fullName": "Geist Medium", + "postscriptName": "Geist-Medium", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1005, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 532, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Geist", + "fullName": "Geist SemiBold", + "postscriptName": "Geist-SemiBold", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1005, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Geist", + "fullName": "Geist Bold", + "postscriptName": "Geist-Bold", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1005, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 499, + "subsets": { + "latin": { + "xWidthAvg": 499 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Geist", + "fullName": "Geist ExtraBold", + "postscriptName": "Geist-ExtraBold", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1005, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 538, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Geist", + "fullName": "Geist Black", + "postscriptName": "Geist-Black", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1005, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 521, + "subsets": { + "latin": { + "xWidthAvg": 521 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Geist", + "fullName": "Geist Regular", + "postscriptName": "Geist-Regular", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1005, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "geistMono": { + "familyName": "Geist Mono", + "fullName": "Geist Mono Regular", + "postscriptName": "GeistMono-Regular", + "category": "monospace", + "capHeight": 710, + "ascent": 1005, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "100": { + "familyName": "Geist Mono", + "fullName": "Geist Mono Thin", + "postscriptName": "GeistMono-Thin", + "category": "monospace", + "capHeight": 710, + "ascent": 1005, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200": { + "familyName": "Geist Mono", + "fullName": "Geist Mono ExtraLight", + "postscriptName": "GeistMono-ExtraLight", + "category": "monospace", + "capHeight": 710, + "ascent": 1005, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Geist Mono", + "fullName": "Geist Mono Light", + "postscriptName": "GeistMono-Light", + "category": "monospace", + "capHeight": 710, + "ascent": 1005, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Geist Mono", + "fullName": "Geist Mono Medium", + "postscriptName": "GeistMono-Medium", + "category": "monospace", + "capHeight": 710, + "ascent": 1005, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 532, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Geist Mono", + "fullName": "Geist Mono SemiBold", + "postscriptName": "GeistMono-SemiBold", + "category": "monospace", + "capHeight": 710, + "ascent": 1005, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Geist Mono", + "fullName": "Geist Mono Bold", + "postscriptName": "GeistMono-Bold", + "category": "monospace", + "capHeight": 710, + "ascent": 1005, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Geist Mono", + "fullName": "Geist Mono ExtraBold", + "postscriptName": "GeistMono-ExtraBold", + "category": "monospace", + "capHeight": 710, + "ascent": 1005, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 538, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "Geist Mono", + "fullName": "Geist Mono Black", + "postscriptName": "GeistMono-Black", + "category": "monospace", + "capHeight": 710, + "ascent": 1005, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Geist Mono", + "fullName": "Geist Mono Regular", + "postscriptName": "GeistMono-Regular", + "category": "monospace", + "capHeight": 710, + "ascent": 1005, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "gelasio": { + "familyName": "Gelasio", + "fullName": "Gelasio Regular", + "postscriptName": "Gelasio-Regular", + "category": "serif", + "capHeight": 1419, + "ascent": 1900, + "descent": -700, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 986, + "xWidthAvg": 913, + "subsets": { + "latin": { + "xWidthAvg": 913 + }, + "thai": { + "xWidthAvg": 2048 + } + }, + "variants": { + "500": { + "familyName": "Gelasio", + "fullName": "Gelasio Medium", + "postscriptName": "Gelasio-Medium", + "category": "serif", + "capHeight": 1419, + "ascent": 1900, + "descent": -700, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 988, + "xWidthAvg": 941, + "subsets": { + "latin": { + "xWidthAvg": 941 + }, + "thai": { + "xWidthAvg": 2048 + } + } + }, + "600": { + "familyName": "Gelasio", + "fullName": "Gelasio SemiBold", + "postscriptName": "Gelasio-SemiBold", + "category": "serif", + "capHeight": 1419, + "ascent": 1900, + "descent": -700, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 992, + "xWidthAvg": 1017, + "subsets": { + "latin": { + "xWidthAvg": 1017 + }, + "thai": { + "xWidthAvg": 2048 + } + } + }, + "700": { + "familyName": "Gelasio", + "fullName": "Gelasio Bold", + "postscriptName": "Gelasio-Bold", + "category": "serif", + "capHeight": 1419, + "ascent": 1900, + "descent": -700, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 994, + "xWidthAvg": 1062, + "subsets": { + "latin": { + "xWidthAvg": 1062 + }, + "thai": { + "xWidthAvg": 2048 + } + } + }, + "regular": { + "familyName": "Gelasio", + "fullName": "Gelasio Regular", + "postscriptName": "Gelasio-Regular", + "category": "serif", + "capHeight": 1419, + "ascent": 1900, + "descent": -700, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 986, + "xWidthAvg": 913, + "subsets": { + "latin": { + "xWidthAvg": 913 + }, + "thai": { + "xWidthAvg": 2048 + } + } + }, + "italic": { + "familyName": "Gelasio", + "fullName": "Gelasio Italic", + "postscriptName": "Gelasio-Italic", + "category": "serif", + "capHeight": 1419, + "ascent": 1900, + "descent": -700, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 986, + "xWidthAvg": 931, + "subsets": { + "latin": { + "xWidthAvg": 931 + }, + "thai": { + "xWidthAvg": 2048 + } + } + }, + "700italic": { + "familyName": "Gelasio", + "fullName": "Gelasio Bold Italic", + "postscriptName": "Gelasio-BoldItalic", + "category": "serif", + "capHeight": 1419, + "ascent": 1900, + "descent": -700, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 994, + "xWidthAvg": 1082, + "subsets": { + "latin": { + "xWidthAvg": 1082 + }, + "thai": { + "xWidthAvg": 2048 + } + } + }, + "600italic": { + "familyName": "Gelasio", + "fullName": "Gelasio SemiBold Italic", + "postscriptName": "Gelasio-SemiBoldItalic", + "category": "serif", + "capHeight": 1419, + "ascent": 1900, + "descent": -700, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 992, + "xWidthAvg": 1036, + "subsets": { + "latin": { + "xWidthAvg": 1036 + }, + "thai": { + "xWidthAvg": 2048 + } + } + }, + "500italic": { + "familyName": "Gelasio", + "fullName": "Gelasio Medium Italic", + "postscriptName": "Gelasio-MediumItalic", + "category": "serif", + "capHeight": 1419, + "ascent": 1900, + "descent": -700, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 988, + "xWidthAvg": 959, + "subsets": { + "latin": { + "xWidthAvg": 959 + }, + "thai": { + "xWidthAvg": 2048 + } + } + } + } + }, + "gemunuLibre": { + "familyName": "Gemunu Libre", + "fullName": "Gemunu Libre Regular", + "postscriptName": "GemunuLibre-Regular", + "category": "sans-serif", + "capHeight": 0, + "ascent": 884, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 354, + "subsets": { + "latin": { + "xWidthAvg": 354 + }, + "thai": { + "xWidthAvg": 631 + } + }, + "variants": { + "200": { + "familyName": "Gemunu Libre", + "fullName": "Gemunu Libre ExtraLight", + "postscriptName": "GemunuLibre-ExtraLight", + "category": "sans-serif", + "capHeight": 0, + "ascent": 884, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 339, + "subsets": { + "latin": { + "xWidthAvg": 339 + }, + "thai": { + "xWidthAvg": 631 + } + } + }, + "300": { + "familyName": "Gemunu Libre", + "fullName": "Gemunu Libre Light", + "postscriptName": "GemunuLibre-Light", + "category": "sans-serif", + "capHeight": 0, + "ascent": 884, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 348, + "subsets": { + "latin": { + "xWidthAvg": 348 + }, + "thai": { + "xWidthAvg": 631 + } + } + }, + "500": { + "familyName": "Gemunu Libre", + "fullName": "Gemunu Libre Medium", + "postscriptName": "GemunuLibre-Medium", + "category": "sans-serif", + "capHeight": 0, + "ascent": 884, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 358, + "subsets": { + "latin": { + "xWidthAvg": 358 + }, + "thai": { + "xWidthAvg": 631 + } + } + }, + "600": { + "familyName": "Gemunu Libre", + "fullName": "Gemunu Libre SemiBold", + "postscriptName": "GemunuLibre-SemiBold", + "category": "sans-serif", + "capHeight": 0, + "ascent": 884, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 363, + "subsets": { + "latin": { + "xWidthAvg": 363 + }, + "thai": { + "xWidthAvg": 631 + } + } + }, + "700": { + "familyName": "Gemunu Libre", + "fullName": "Gemunu Libre Bold", + "postscriptName": "GemunuLibre-Bold", + "category": "sans-serif", + "capHeight": 0, + "ascent": 884, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 370, + "subsets": { + "latin": { + "xWidthAvg": 370 + }, + "thai": { + "xWidthAvg": 631 + } + } + }, + "800": { + "familyName": "Gemunu Libre", + "fullName": "Gemunu Libre ExtraBold", + "postscriptName": "GemunuLibre-ExtraBold", + "category": "sans-serif", + "capHeight": 0, + "ascent": 884, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 383, + "subsets": { + "latin": { + "xWidthAvg": 383 + }, + "thai": { + "xWidthAvg": 631 + } + } + }, + "regular": { + "familyName": "Gemunu Libre", + "fullName": "Gemunu Libre Regular", + "postscriptName": "GemunuLibre-Regular", + "category": "sans-serif", + "capHeight": 0, + "ascent": 884, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 354, + "subsets": { + "latin": { + "xWidthAvg": 354 + }, + "thai": { + "xWidthAvg": 631 + } + } + } + } + }, + "genos": { + "familyName": "Genos", + "fullName": "Genos Regular", + "postscriptName": "Genos-Regular", + "category": "sans-serif", + "capHeight": 460, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 395, + "subsets": { + "latin": { + "xWidthAvg": 395 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Genos", + "fullName": "Genos Thin", + "postscriptName": "Genos-Thin", + "category": "sans-serif", + "capHeight": 460, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 363, + "subsets": { + "latin": { + "xWidthAvg": 363 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Genos", + "fullName": "Genos ExtraLight", + "postscriptName": "Genos-ExtraLight", + "category": "sans-serif", + "capHeight": 460, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 370, + "subsets": { + "latin": { + "xWidthAvg": 370 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Genos", + "fullName": "Genos Light", + "postscriptName": "Genos-Light", + "category": "sans-serif", + "capHeight": 460, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 380, + "subsets": { + "latin": { + "xWidthAvg": 380 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Genos", + "fullName": "Genos Medium", + "postscriptName": "Genos-Medium", + "category": "sans-serif", + "capHeight": 460, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Genos", + "fullName": "Genos SemiBold", + "postscriptName": "Genos-SemiBold", + "category": "sans-serif", + "capHeight": 460, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Genos", + "fullName": "Genos Bold", + "postscriptName": "Genos-Bold", + "category": "sans-serif", + "capHeight": 460, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Genos", + "fullName": "Genos ExtraBold", + "postscriptName": "Genos-ExtraBold", + "category": "sans-serif", + "capHeight": 460, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Genos", + "fullName": "Genos Black", + "postscriptName": "Genos-Black", + "category": "sans-serif", + "capHeight": 460, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Genos", + "fullName": "Genos Regular", + "postscriptName": "Genos-Regular", + "category": "sans-serif", + "capHeight": 460, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 395, + "subsets": { + "latin": { + "xWidthAvg": 395 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "italic": { + "familyName": "Genos", + "fullName": "Genos Italic", + "postscriptName": "Genos-Italic", + "category": "sans-serif", + "capHeight": 460, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 395, + "subsets": { + "latin": { + "xWidthAvg": 395 + }, + "thai": { + "xWidthAvg": 275 + } + } + }, + "900italic": { + "familyName": "Genos", + "fullName": "Genos Black Italic", + "postscriptName": "Genos-BlackItalic", + "category": "sans-serif", + "capHeight": 460, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 363 + } + } + }, + "800italic": { + "familyName": "Genos", + "fullName": "Genos ExtraBold Italic", + "postscriptName": "Genos-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 460, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 345 + } + } + }, + "700italic": { + "familyName": "Genos", + "fullName": "Genos Bold Italic", + "postscriptName": "Genos-BoldItalic", + "category": "sans-serif", + "capHeight": 460, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 326 + } + } + }, + "600italic": { + "familyName": "Genos", + "fullName": "Genos SemiBold Italic", + "postscriptName": "Genos-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 460, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 430, + "subsets": { + "latin": { + "xWidthAvg": 430 + }, + "thai": { + "xWidthAvg": 308 + } + } + }, + "500italic": { + "familyName": "Genos", + "fullName": "Genos Medium Italic", + "postscriptName": "Genos-MediumItalic", + "category": "sans-serif", + "capHeight": 460, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 290 + } + } + }, + "300italic": { + "familyName": "Genos", + "fullName": "Genos Light Italic", + "postscriptName": "Genos-LightItalic", + "category": "sans-serif", + "capHeight": 460, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 381, + "subsets": { + "latin": { + "xWidthAvg": 381 + }, + "thai": { + "xWidthAvg": 261 + } + } + }, + "200italic": { + "familyName": "Genos", + "fullName": "Genos ExtraLight Italic", + "postscriptName": "Genos-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 460, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 370, + "subsets": { + "latin": { + "xWidthAvg": 370 + }, + "thai": { + "xWidthAvg": 250 + } + } + }, + "100italic": { + "familyName": "Genos", + "fullName": "Genos Thin Italic", + "postscriptName": "Genos-ThinItalic", + "category": "sans-serif", + "capHeight": 460, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 364, + "subsets": { + "latin": { + "xWidthAvg": 364 + }, + "thai": { + "xWidthAvg": 244 + } + } + } + } + }, + "gentiumBookPlus": { + "familyName": "Gentium Book Plus", + "fullName": "Gentium Book Plus", + "postscriptName": "GentiumBookPlus", + "category": "serif", + "capHeight": 1260, + "ascent": 2250, + "descent": -750, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 930, + "xWidthAvg": 863, + "subsets": { + "latin": { + "xWidthAvg": 863 + }, + "thai": { + "xWidthAvg": 1400 + } + }, + "variants": { + "700": { + "familyName": "Gentium Book Plus", + "fullName": "Gentium Book Plus Bold", + "postscriptName": "GentiumBookPlus-Bold", + "category": "serif", + "capHeight": 1260, + "ascent": 2250, + "descent": -750, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 930, + "xWidthAvg": 915, + "subsets": { + "latin": { + "xWidthAvg": 915 + }, + "thai": { + "xWidthAvg": 1400 + } + } + }, + "regular": { + "familyName": "Gentium Book Plus", + "fullName": "Gentium Book Plus", + "postscriptName": "GentiumBookPlus", + "category": "serif", + "capHeight": 1260, + "ascent": 2250, + "descent": -750, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 930, + "xWidthAvg": 863, + "subsets": { + "latin": { + "xWidthAvg": 863 + }, + "thai": { + "xWidthAvg": 1400 + } + } + }, + "italic": { + "familyName": "Gentium Book Plus", + "fullName": "Gentium Book Plus Italic", + "postscriptName": "GentiumBookPlus-Italic", + "category": "serif", + "capHeight": 1260, + "ascent": 2250, + "descent": -750, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 930, + "xWidthAvg": 778, + "subsets": { + "latin": { + "xWidthAvg": 778 + }, + "thai": { + "xWidthAvg": 1400 + } + } + }, + "700italic": { + "familyName": "Gentium Book Plus", + "fullName": "Gentium Book Plus Bold Italic", + "postscriptName": "GentiumBookPlus-BoldItalic", + "category": "serif", + "capHeight": 1260, + "ascent": 2250, + "descent": -750, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 930, + "xWidthAvg": 836, + "subsets": { + "latin": { + "xWidthAvg": 836 + }, + "thai": { + "xWidthAvg": 1400 + } + } + } + } + }, + "gentiumPlus": { + "familyName": "Gentium Plus", + "fullName": "Gentium Plus", + "postscriptName": "GentiumPlus", + "category": "serif", + "capHeight": 1260, + "ascent": 2250, + "descent": -750, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 930, + "xWidthAvg": 846, + "subsets": { + "latin": { + "xWidthAvg": 846 + }, + "thai": { + "xWidthAvg": 1400 + } + }, + "variants": { + "700": { + "familyName": "Gentium Plus", + "fullName": "Gentium Plus Bold", + "postscriptName": "GentiumPlus-Bold", + "category": "serif", + "capHeight": 1260, + "ascent": 2250, + "descent": -750, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 930, + "xWidthAvg": 898, + "subsets": { + "latin": { + "xWidthAvg": 898 + }, + "thai": { + "xWidthAvg": 1400 + } + } + }, + "regular": { + "familyName": "Gentium Plus", + "fullName": "Gentium Plus", + "postscriptName": "GentiumPlus", + "category": "serif", + "capHeight": 1260, + "ascent": 2250, + "descent": -750, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 930, + "xWidthAvg": 846, + "subsets": { + "latin": { + "xWidthAvg": 846 + }, + "thai": { + "xWidthAvg": 1400 + } + } + }, + "italic": { + "familyName": "Gentium Plus", + "fullName": "Gentium Plus Italic", + "postscriptName": "GentiumPlus-Italic", + "category": "serif", + "capHeight": 1260, + "ascent": 2250, + "descent": -750, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 930, + "xWidthAvg": 759, + "subsets": { + "latin": { + "xWidthAvg": 759 + }, + "thai": { + "xWidthAvg": 1400 + } + } + }, + "700italic": { + "familyName": "Gentium Plus", + "fullName": "Gentium Plus Bold Italic", + "postscriptName": "GentiumPlus-BoldItalic", + "category": "serif", + "capHeight": 1260, + "ascent": 2250, + "descent": -750, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 930, + "xWidthAvg": 817, + "subsets": { + "latin": { + "xWidthAvg": 817 + }, + "thai": { + "xWidthAvg": 1400 + } + } + } + } + }, + "geo": { + "familyName": "Geo", + "fullName": "Geo", + "postscriptName": "Geo-Regular", + "category": "sans-serif", + "capHeight": 573, + "ascent": 821, + "descent": -225, + "lineGap": 92, + "unitsPerEm": 1024, + "xHeight": 451, + "xWidthAvg": 410, + "subsets": { + "latin": { + "xWidthAvg": 410 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "Geo", + "fullName": "Geo", + "postscriptName": "Geo-Regular", + "category": "sans-serif", + "capHeight": 573, + "ascent": 821, + "descent": -225, + "lineGap": 92, + "unitsPerEm": 1024, + "xHeight": 451, + "xWidthAvg": 410, + "subsets": { + "latin": { + "xWidthAvg": 410 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "italic": { + "familyName": "Geo", + "fullName": "Geo Oblique", + "postscriptName": "Geo-Oblique", + "category": "sans-serif", + "capHeight": 573, + "ascent": 821, + "descent": -225, + "lineGap": 92, + "unitsPerEm": 1024, + "xHeight": 451, + "xWidthAvg": 410, + "subsets": { + "latin": { + "xWidthAvg": 410 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "geologica": { + "familyName": "Geologica", + "fullName": "Geologica Roman Regular", + "postscriptName": "GeologicaRoman-Regular", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1950, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 990, + "xWidthAvg": 964, + "subsets": { + "latin": { + "xWidthAvg": 964 + }, + "thai": { + "xWidthAvg": 1278 + } + }, + "variants": { + "100": { + "familyName": "Geologica", + "fullName": "Geologica Roman Thin", + "postscriptName": "GeologicaRoman-Thin", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1950, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 960, + "xWidthAvg": 922, + "subsets": { + "latin": { + "xWidthAvg": 922 + }, + "thai": { + "xWidthAvg": 1232 + } + } + }, + "200": { + "familyName": "Geologica", + "fullName": "Geologica Roman ExtraLight", + "postscriptName": "GeologicaRoman-ExtraLight", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1950, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 970, + "xWidthAvg": 936, + "subsets": { + "latin": { + "xWidthAvg": 936 + }, + "thai": { + "xWidthAvg": 1247 + } + } + }, + "300": { + "familyName": "Geologica", + "fullName": "Geologica Roman Light", + "postscriptName": "GeologicaRoman-Light", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1950, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 980, + "xWidthAvg": 950, + "subsets": { + "latin": { + "xWidthAvg": 950 + }, + "thai": { + "xWidthAvg": 1263 + } + } + }, + "500": { + "familyName": "Geologica", + "fullName": "Geologica Roman Medium", + "postscriptName": "GeologicaRoman-Medium", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1950, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 978, + "subsets": { + "latin": { + "xWidthAvg": 978 + }, + "thai": { + "xWidthAvg": 1293 + } + } + }, + "600": { + "familyName": "Geologica", + "fullName": "Geologica Roman SemiBold", + "postscriptName": "GeologicaRoman-SemiBold", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1950, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1010, + "xWidthAvg": 992, + "subsets": { + "latin": { + "xWidthAvg": 992 + }, + "thai": { + "xWidthAvg": 1308 + } + } + }, + "700": { + "familyName": "Geologica", + "fullName": "Geologica Roman Bold", + "postscriptName": "GeologicaRoman-Bold", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1950, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1020, + "xWidthAvg": 1006, + "subsets": { + "latin": { + "xWidthAvg": 1006 + }, + "thai": { + "xWidthAvg": 1324 + } + } + }, + "800": { + "familyName": "Geologica", + "fullName": "Geologica Roman ExtraBold", + "postscriptName": "GeologicaRoman-ExtraBold", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1950, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1030, + "xWidthAvg": 1020, + "subsets": { + "latin": { + "xWidthAvg": 1020 + }, + "thai": { + "xWidthAvg": 1339 + } + } + }, + "900": { + "familyName": "Geologica", + "fullName": "Geologica Roman Black", + "postscriptName": "GeologicaRoman-Black", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1950, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1040, + "xWidthAvg": 1034, + "subsets": { + "latin": { + "xWidthAvg": 1034 + }, + "thai": { + "xWidthAvg": 1354 + } + } + }, + "regular": { + "familyName": "Geologica", + "fullName": "Geologica Roman Regular", + "postscriptName": "GeologicaRoman-Regular", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1950, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 990, + "xWidthAvg": 964, + "subsets": { + "latin": { + "xWidthAvg": 964 + }, + "thai": { + "xWidthAvg": 1278 + } + } + } + } + }, + "georama": { + "familyName": "Georama", + "fullName": "Georama Regular", + "postscriptName": "Georama-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -226, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "100": { + "familyName": "Georama", + "fullName": "Georama Thin", + "postscriptName": "Georama-Thin", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -226, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200": { + "familyName": "Georama", + "fullName": "Georama ExtraLight", + "postscriptName": "Georama-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -226, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 420, + "subsets": { + "latin": { + "xWidthAvg": 420 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Georama", + "fullName": "Georama Light", + "postscriptName": "Georama-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -226, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 430, + "subsets": { + "latin": { + "xWidthAvg": 430 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Georama", + "fullName": "Georama Medium", + "postscriptName": "Georama-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -226, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Georama", + "fullName": "Georama SemiBold", + "postscriptName": "Georama-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -226, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Georama", + "fullName": "Georama Bold", + "postscriptName": "Georama-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -226, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Georama", + "fullName": "Georama ExtraBold", + "postscriptName": "Georama-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -226, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "Georama", + "fullName": "Georama Black", + "postscriptName": "Georama-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -226, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Georama", + "fullName": "Georama Regular", + "postscriptName": "Georama-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -226, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Georama", + "fullName": "Georama Italic", + "postscriptName": "Georama-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -226, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 415, + "subsets": { + "latin": { + "xWidthAvg": 415 + }, + "thai": { + "xWidthAvg": 611 + } + } + }, + "900italic": { + "familyName": "Georama", + "fullName": "Georama Black Italic", + "postscriptName": "Georama-BlackItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -226, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 611 + } + } + }, + "800italic": { + "familyName": "Georama", + "fullName": "Georama ExtraBold Italic", + "postscriptName": "Georama-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -226, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 611 + } + } + }, + "700italic": { + "familyName": "Georama", + "fullName": "Georama Bold Italic", + "postscriptName": "Georama-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -226, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 611 + } + } + }, + "600italic": { + "familyName": "Georama", + "fullName": "Georama SemiBold Italic", + "postscriptName": "Georama-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -226, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 611 + } + } + }, + "500italic": { + "familyName": "Georama", + "fullName": "Georama Medium Italic", + "postscriptName": "Georama-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -226, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 611 + } + } + }, + "300italic": { + "familyName": "Georama", + "fullName": "Georama Light Italic", + "postscriptName": "Georama-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -226, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 405, + "subsets": { + "latin": { + "xWidthAvg": 405 + }, + "thai": { + "xWidthAvg": 611 + } + } + }, + "200italic": { + "familyName": "Georama", + "fullName": "Georama ExtraLight Italic", + "postscriptName": "Georama-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -226, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 396, + "subsets": { + "latin": { + "xWidthAvg": 396 + }, + "thai": { + "xWidthAvg": 611 + } + } + }, + "100italic": { + "familyName": "Georama", + "fullName": "Georama Thin Italic", + "postscriptName": "Georama-ThinItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -226, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 389, + "subsets": { + "latin": { + "xWidthAvg": 389 + }, + "thai": { + "xWidthAvg": 611 + } + } + } + } + }, + "georgia": { + "familyName": "Georgia", + "fullName": "Georgia", + "postscriptName": "Georgia", + "category": "serif", + "capHeight": 1419, + "ascent": 1878, + "descent": -449, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 986, + "xWidthAvg": 913, + "subsets": { + "latin": { + "xWidthAvg": 913 + }, + "thai": { + "xWidthAvg": 2048 + } + }, + "variants": { + "700": { + "familyName": "Georgia", + "fullName": "Georgia Bold", + "postscriptName": "Georgia-Bold", + "category": "serif", + "capHeight": 1419, + "ascent": 1878, + "descent": -449, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 992, + "xWidthAvg": 1062, + "subsets": { + "latin": { + "xWidthAvg": 1062 + }, + "thai": { + "xWidthAvg": 2048 + } + } + }, + "regular": { + "familyName": "Georgia", + "fullName": "Georgia", + "postscriptName": "Georgia", + "category": "serif", + "capHeight": 1419, + "ascent": 1878, + "descent": -449, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 986, + "xWidthAvg": 913, + "subsets": { + "latin": { + "xWidthAvg": 913 + }, + "thai": { + "xWidthAvg": 2048 + } + } + }, + "italic": { + "familyName": "Georgia", + "fullName": "Georgia Italic", + "postscriptName": "Georgia-Italic", + "category": "serif", + "capHeight": 1419, + "ascent": 1878, + "descent": -449, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1009, + "xWidthAvg": 931, + "subsets": { + "latin": { + "xWidthAvg": 931 + }, + "thai": { + "xWidthAvg": 2048 + } + } + }, + "700italic": { + "familyName": "Georgia", + "fullName": "Georgia Bold Italic", + "postscriptName": "Georgia-BoldItalic", + "category": "serif", + "capHeight": 1419, + "ascent": 1878, + "descent": -449, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1015, + "xWidthAvg": 1082, + "subsets": { + "latin": { + "xWidthAvg": 1082 + }, + "thai": { + "xWidthAvg": 2048 + } + } + } + } + }, + "geostar": { + "familyName": "Geostar", + "fullName": "Geostar", + "postscriptName": "Geostar-Regular", + "category": "display", + "capHeight": 695, + "ascent": 922, + "descent": -226, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 469, + "xWidthAvg": 655, + "subsets": { + "latin": { + "xWidthAvg": 655 + }, + "thai": { + "xWidthAvg": 400 + } + }, + "variants": { + "regular": { + "familyName": "Geostar", + "fullName": "Geostar", + "postscriptName": "Geostar-Regular", + "category": "display", + "capHeight": 695, + "ascent": 922, + "descent": -226, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 469, + "xWidthAvg": 655, + "subsets": { + "latin": { + "xWidthAvg": 655 + }, + "thai": { + "xWidthAvg": 400 + } + } + } + } + }, + "geostarFill": { + "familyName": "Geostar Fill", + "fullName": "Geostar Fill", + "postscriptName": "GeostarFill-Regular", + "category": "display", + "capHeight": 695, + "ascent": 922, + "descent": -226, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 469, + "xWidthAvg": 655, + "subsets": { + "latin": { + "xWidthAvg": 655 + }, + "thai": { + "xWidthAvg": 400 + } + }, + "variants": { + "regular": { + "familyName": "Geostar Fill", + "fullName": "Geostar Fill", + "postscriptName": "GeostarFill-Regular", + "category": "display", + "capHeight": 695, + "ascent": 922, + "descent": -226, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 469, + "xWidthAvg": 655, + "subsets": { + "latin": { + "xWidthAvg": 655 + }, + "thai": { + "xWidthAvg": 400 + } + } + } + } + }, + "germaniaOne": { + "familyName": "Germania One", + "fullName": "Germania One", + "postscriptName": "GermaniaOne-Regular", + "category": "display", + "capHeight": 700, + "ascent": 911, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 539, + "xWidthAvg": 394, + "subsets": { + "latin": { + "xWidthAvg": 394 + }, + "thai": { + "xWidthAvg": 250 + } + }, + "variants": { + "regular": { + "familyName": "Germania One", + "fullName": "Germania One", + "postscriptName": "GermaniaOne-Regular", + "category": "display", + "capHeight": 700, + "ascent": 911, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 539, + "xWidthAvg": 394, + "subsets": { + "latin": { + "xWidthAvg": 394 + }, + "thai": { + "xWidthAvg": 250 + } + } + } + } + }, + "gideonRoman": { + "familyName": "Gideon Roman", + "fullName": "Gideon Roman Regular", + "postscriptName": "GideonRoman-Regular", + "category": "display", + "capHeight": 660, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 568 + } + }, + "variants": { + "regular": { + "familyName": "Gideon Roman", + "fullName": "Gideon Roman Regular", + "postscriptName": "GideonRoman-Regular", + "category": "display", + "capHeight": 660, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 568 + } + } + } + } + }, + "gidugu": { + "familyName": "Gidugu", + "fullName": "Gidugu", + "postscriptName": "Gidugu", + "category": "sans-serif", + "ascent": 1294, + "descent": -790, + "lineGap": 0, + "unitsPerEm": 1124, + "xWidthAvg": 323, + "subsets": { + "latin": { + "xWidthAvg": 323 + }, + "thai": { + "xWidthAvg": 387 + } + }, + "variants": { + "regular": { + "familyName": "Gidugu", + "fullName": "Gidugu", + "postscriptName": "Gidugu", + "category": "sans-serif", + "ascent": 1294, + "descent": -790, + "lineGap": 0, + "unitsPerEm": 1124, + "xWidthAvg": 323, + "subsets": { + "latin": { + "xWidthAvg": 323 + }, + "thai": { + "xWidthAvg": 387 + } + } + } + } + }, + "gildaDisplay": { + "familyName": "Gilda Display", + "fullName": "Gilda Display Regular", + "postscriptName": "GildaDisplay-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 892, + "descent": -285, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 473, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Gilda Display", + "fullName": "Gilda Display Regular", + "postscriptName": "GildaDisplay-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 892, + "descent": -285, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 473, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "girassol": { + "familyName": "Girassol", + "fullName": "Girassol Regular", + "postscriptName": "Girassol-Regular", + "category": "display", + "capHeight": 750, + "ascent": 944, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 572 + } + }, + "variants": { + "regular": { + "familyName": "Girassol", + "fullName": "Girassol Regular", + "postscriptName": "Girassol-Regular", + "category": "display", + "capHeight": 750, + "ascent": 944, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 572 + } + } + } + } + }, + "giveYouGlory": { + "familyName": "Give You Glory", + "fullName": "Give You Glory", + "postscriptName": "GiveYouGlory", + "category": "handwriting", + "capHeight": 747, + "ascent": 1020, + "descent": -625, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 551, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "Give You Glory", + "fullName": "Give You Glory", + "postscriptName": "GiveYouGlory", + "category": "handwriting", + "capHeight": 747, + "ascent": 1020, + "descent": -625, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 551, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "glassAntiqua": { + "familyName": "Glass Antiqua", + "fullName": "Glass Antiqua", + "postscriptName": "GlassAntiqua-Regular", + "category": "display", + "capHeight": 638, + "ascent": 835, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 372, + "subsets": { + "latin": { + "xWidthAvg": 372 + }, + "thai": { + "xWidthAvg": 250 + } + }, + "variants": { + "regular": { + "familyName": "Glass Antiqua", + "fullName": "Glass Antiqua", + "postscriptName": "GlassAntiqua-Regular", + "category": "display", + "capHeight": 638, + "ascent": 835, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 372, + "subsets": { + "latin": { + "xWidthAvg": 372 + }, + "thai": { + "xWidthAvg": 250 + } + } + } + } + }, + "glegoo": { + "familyName": "Glegoo", + "fullName": "Glegoo", + "postscriptName": "Glegoo-Regular", + "category": "serif", + "ascent": 1267, + "descent": -526, + "lineGap": 0, + "unitsPerEm": 1000, + "xWidthAvg": 507, + "subsets": { + "latin": { + "xWidthAvg": 507 + }, + "thai": { + "xWidthAvg": 1040 + } + }, + "variants": { + "700": { + "familyName": "Glegoo", + "fullName": "Glegoo Bold", + "postscriptName": "Glegoo-Bold", + "category": "serif", + "ascent": 1267, + "descent": -526, + "lineGap": 0, + "unitsPerEm": 1000, + "xWidthAvg": 508, + "subsets": { + "latin": { + "xWidthAvg": 508 + }, + "thai": { + "xWidthAvg": 1040 + } + } + }, + "regular": { + "familyName": "Glegoo", + "fullName": "Glegoo", + "postscriptName": "Glegoo-Regular", + "category": "serif", + "ascent": 1267, + "descent": -526, + "lineGap": 0, + "unitsPerEm": 1000, + "xWidthAvg": 507, + "subsets": { + "latin": { + "xWidthAvg": 507 + }, + "thai": { + "xWidthAvg": 1040 + } + } + } + } + }, + "gloock": { + "familyName": "Gloock", + "fullName": "Gloock Regular", + "postscriptName": "Gloock-Regular", + "category": "serif", + "capHeight": 750, + "ascent": 975, + "descent": -225, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 565 + } + }, + "variants": { + "regular": { + "familyName": "Gloock", + "fullName": "Gloock Regular", + "postscriptName": "Gloock-Regular", + "category": "serif", + "capHeight": 750, + "ascent": 975, + "descent": -225, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 565 + } + } + } + } + }, + "gloriaHallelujah": { + "familyName": "Gloria Hallelujah", + "fullName": "Gloria Hallelujah", + "postscriptName": "GloriaHallelujah", + "category": "handwriting", + "capHeight": 904, + "ascent": 1439, + "descent": -591, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 580, + "xWidthAvg": 517, + "subsets": { + "latin": { + "xWidthAvg": 517 + }, + "thai": { + "xWidthAvg": 461 + } + }, + "variants": { + "regular": { + "familyName": "Gloria Hallelujah", + "fullName": "Gloria Hallelujah", + "postscriptName": "GloriaHallelujah", + "category": "handwriting", + "capHeight": 904, + "ascent": 1439, + "descent": -591, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 580, + "xWidthAvg": 517, + "subsets": { + "latin": { + "xWidthAvg": 517 + }, + "thai": { + "xWidthAvg": 461 + } + } + } + } + }, + "glory": { + "familyName": "Glory", + "fullName": "Glory Regular", + "postscriptName": "Glory-Regular", + "category": "sans-serif", + "capHeight": 672, + "ascent": 900, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 390, + "subsets": { + "latin": { + "xWidthAvg": 390 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Glory", + "fullName": "Glory Thin", + "postscriptName": "Glory-Thin", + "category": "sans-serif", + "capHeight": 672, + "ascent": 900, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 387, + "subsets": { + "latin": { + "xWidthAvg": 387 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Glory", + "fullName": "Glory ExtraLight", + "postscriptName": "Glory-ExtraLight", + "category": "sans-serif", + "capHeight": 672, + "ascent": 900, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 388, + "subsets": { + "latin": { + "xWidthAvg": 388 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Glory", + "fullName": "Glory Light", + "postscriptName": "Glory-Light", + "category": "sans-serif", + "capHeight": 672, + "ascent": 900, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 389, + "subsets": { + "latin": { + "xWidthAvg": 389 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Glory", + "fullName": "Glory Medium", + "postscriptName": "Glory-Medium", + "category": "sans-serif", + "capHeight": 672, + "ascent": 900, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 391, + "subsets": { + "latin": { + "xWidthAvg": 391 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Glory", + "fullName": "Glory SemiBold", + "postscriptName": "Glory-SemiBold", + "category": "sans-serif", + "capHeight": 672, + "ascent": 900, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 393, + "subsets": { + "latin": { + "xWidthAvg": 393 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Glory", + "fullName": "Glory Bold", + "postscriptName": "Glory-Bold", + "category": "sans-serif", + "capHeight": 672, + "ascent": 900, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 395, + "subsets": { + "latin": { + "xWidthAvg": 395 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Glory", + "fullName": "Glory ExtraBold", + "postscriptName": "Glory-ExtraBold", + "category": "sans-serif", + "capHeight": 672, + "ascent": 900, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 396, + "subsets": { + "latin": { + "xWidthAvg": 396 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Glory", + "fullName": "Glory Regular", + "postscriptName": "Glory-Regular", + "category": "sans-serif", + "capHeight": 672, + "ascent": 900, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 390, + "subsets": { + "latin": { + "xWidthAvg": 390 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "italic": { + "familyName": "Glory", + "fullName": "Glory Italic", + "postscriptName": "Glory-Italic", + "category": "sans-serif", + "capHeight": 672, + "ascent": 900, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 392, + "subsets": { + "latin": { + "xWidthAvg": 392 + }, + "thai": { + "xWidthAvg": 560 + } + } + }, + "800italic": { + "familyName": "Glory", + "fullName": "Glory ExtraBold Italic", + "postscriptName": "Glory-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 672, + "ascent": 900, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 398, + "subsets": { + "latin": { + "xWidthAvg": 398 + }, + "thai": { + "xWidthAvg": 560 + } + } + }, + "700italic": { + "familyName": "Glory", + "fullName": "Glory Bold Italic", + "postscriptName": "Glory-BoldItalic", + "category": "sans-serif", + "capHeight": 672, + "ascent": 900, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 397, + "subsets": { + "latin": { + "xWidthAvg": 397 + }, + "thai": { + "xWidthAvg": 560 + } + } + }, + "600italic": { + "familyName": "Glory", + "fullName": "Glory SemiBold Italic", + "postscriptName": "Glory-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 672, + "ascent": 900, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 396, + "subsets": { + "latin": { + "xWidthAvg": 396 + }, + "thai": { + "xWidthAvg": 560 + } + } + }, + "500italic": { + "familyName": "Glory", + "fullName": "Glory Medium Italic", + "postscriptName": "Glory-MediumItalic", + "category": "sans-serif", + "capHeight": 672, + "ascent": 900, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 394, + "subsets": { + "latin": { + "xWidthAvg": 394 + }, + "thai": { + "xWidthAvg": 560 + } + } + }, + "300italic": { + "familyName": "Glory", + "fullName": "Glory Light Italic", + "postscriptName": "Glory-LightItalic", + "category": "sans-serif", + "capHeight": 672, + "ascent": 900, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 391, + "subsets": { + "latin": { + "xWidthAvg": 391 + }, + "thai": { + "xWidthAvg": 560 + } + } + }, + "200italic": { + "familyName": "Glory", + "fullName": "Glory ExtraLight Italic", + "postscriptName": "Glory-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 672, + "ascent": 900, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 390, + "subsets": { + "latin": { + "xWidthAvg": 390 + }, + "thai": { + "xWidthAvg": 560 + } + } + }, + "100italic": { + "familyName": "Glory", + "fullName": "Glory Thin Italic", + "postscriptName": "Glory-ThinItalic", + "category": "sans-serif", + "capHeight": 672, + "ascent": 900, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 389, + "subsets": { + "latin": { + "xWidthAvg": 389 + }, + "thai": { + "xWidthAvg": 560 + } + } + } + } + }, + "gluten": { + "familyName": "Gluten", + "fullName": "Gluten Regular", + "postscriptName": "Gluten-Regular", + "category": "display", + "capHeight": 1167, + "ascent": 1290, + "descent": -475, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 833, + "xWidthAvg": 1017, + "subsets": { + "latin": { + "xWidthAvg": 1017 + }, + "thai": { + "xWidthAvg": 610 + } + }, + "variants": { + "100": { + "familyName": "Gluten", + "fullName": "Gluten Thin", + "postscriptName": "Gluten-Thin", + "category": "display", + "capHeight": 1167, + "ascent": 1290, + "descent": -475, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 833, + "xWidthAvg": 893, + "subsets": { + "latin": { + "xWidthAvg": 893 + }, + "thai": { + "xWidthAvg": 610 + } + } + }, + "200": { + "familyName": "Gluten", + "fullName": "Gluten ExtraLight", + "postscriptName": "Gluten-ExtraLight", + "category": "display", + "capHeight": 1167, + "ascent": 1290, + "descent": -475, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 833, + "xWidthAvg": 935, + "subsets": { + "latin": { + "xWidthAvg": 935 + }, + "thai": { + "xWidthAvg": 610 + } + } + }, + "300": { + "familyName": "Gluten", + "fullName": "Gluten Light", + "postscriptName": "Gluten-Light", + "category": "display", + "capHeight": 1167, + "ascent": 1290, + "descent": -475, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 833, + "xWidthAvg": 976, + "subsets": { + "latin": { + "xWidthAvg": 976 + }, + "thai": { + "xWidthAvg": 610 + } + } + }, + "500": { + "familyName": "Gluten", + "fullName": "Gluten Medium", + "postscriptName": "Gluten-Medium", + "category": "display", + "capHeight": 1167, + "ascent": 1290, + "descent": -475, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 833, + "xWidthAvg": 1059, + "subsets": { + "latin": { + "xWidthAvg": 1059 + }, + "thai": { + "xWidthAvg": 610 + } + } + }, + "600": { + "familyName": "Gluten", + "fullName": "Gluten SemiBold", + "postscriptName": "Gluten-SemiBold", + "category": "display", + "capHeight": 1167, + "ascent": 1290, + "descent": -475, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 833, + "xWidthAvg": 1100, + "subsets": { + "latin": { + "xWidthAvg": 1100 + }, + "thai": { + "xWidthAvg": 610 + } + } + }, + "700": { + "familyName": "Gluten", + "fullName": "Gluten Bold", + "postscriptName": "Gluten-Bold", + "category": "display", + "capHeight": 1167, + "ascent": 1290, + "descent": -475, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 833, + "xWidthAvg": 1142, + "subsets": { + "latin": { + "xWidthAvg": 1142 + }, + "thai": { + "xWidthAvg": 610 + } + } + }, + "800": { + "familyName": "Gluten", + "fullName": "Gluten ExtraBold", + "postscriptName": "Gluten-ExtraBold", + "category": "display", + "capHeight": 1167, + "ascent": 1290, + "descent": -475, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 833, + "xWidthAvg": 1183, + "subsets": { + "latin": { + "xWidthAvg": 1183 + }, + "thai": { + "xWidthAvg": 610 + } + } + }, + "900": { + "familyName": "Gluten", + "fullName": "Gluten Black", + "postscriptName": "Gluten-Black", + "category": "display", + "capHeight": 1167, + "ascent": 1290, + "descent": -475, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 833, + "xWidthAvg": 1225, + "subsets": { + "latin": { + "xWidthAvg": 1225 + }, + "thai": { + "xWidthAvg": 610 + } + } + }, + "regular": { + "familyName": "Gluten", + "fullName": "Gluten Regular", + "postscriptName": "Gluten-Regular", + "category": "display", + "capHeight": 1167, + "ascent": 1290, + "descent": -475, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 833, + "xWidthAvg": 1017, + "subsets": { + "latin": { + "xWidthAvg": 1017 + }, + "thai": { + "xWidthAvg": 610 + } + } + } + } + }, + "goblinOne": { + "familyName": "Goblin One", + "fullName": "Goblin One", + "postscriptName": "GoblinOne", + "category": "display", + "capHeight": 1434, + "ascent": 1920, + "descent": -640, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1107, + "xWidthAvg": 1524, + "subsets": { + "latin": { + "xWidthAvg": 1524 + }, + "thai": { + "xWidthAvg": 0 + } + }, + "variants": { + "regular": { + "familyName": "Goblin One", + "fullName": "Goblin One", + "postscriptName": "GoblinOne", + "category": "display", + "capHeight": 1434, + "ascent": 1920, + "descent": -640, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1107, + "xWidthAvg": 1524, + "subsets": { + "latin": { + "xWidthAvg": 1524 + }, + "thai": { + "xWidthAvg": 0 + } + } + } + } + }, + "gochiHand": { + "familyName": "Gochi Hand", + "fullName": "Gochi Hand", + "postscriptName": "GochiHand-Regular", + "category": "handwriting", + "capHeight": 975, + "ascent": 1579, + "descent": -835, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 765, + "xWidthAvg": 857, + "subsets": { + "latin": { + "xWidthAvg": 857 + }, + "thai": { + "xWidthAvg": 485 + } + }, + "variants": { + "regular": { + "familyName": "Gochi Hand", + "fullName": "Gochi Hand", + "postscriptName": "GochiHand-Regular", + "category": "handwriting", + "capHeight": 975, + "ascent": 1579, + "descent": -835, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 765, + "xWidthAvg": 857, + "subsets": { + "latin": { + "xWidthAvg": 857 + }, + "thai": { + "xWidthAvg": 485 + } + } + } + } + }, + "goldman": { + "familyName": "Goldman", + "fullName": "Goldman Regular", + "postscriptName": "Goldman-Regular", + "category": "display", + "capHeight": 588, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 448, + "xWidthAvg": 520, + "subsets": { + "latin": { + "xWidthAvg": 520 + }, + "thai": { + "xWidthAvg": 576 + } + }, + "variants": { + "700": { + "familyName": "Goldman", + "fullName": "Goldman Bold", + "postscriptName": "Goldman-Bold", + "category": "display", + "capHeight": 588, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 448, + "xWidthAvg": 555, + "subsets": { + "latin": { + "xWidthAvg": 555 + }, + "thai": { + "xWidthAvg": 576 + } + } + }, + "regular": { + "familyName": "Goldman", + "fullName": "Goldman Regular", + "postscriptName": "Goldman-Regular", + "category": "display", + "capHeight": 588, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 448, + "xWidthAvg": 520, + "subsets": { + "latin": { + "xWidthAvg": 520 + }, + "thai": { + "xWidthAvg": 576 + } + } + } + } + }, + "golosText": { + "familyName": "Golos Text", + "fullName": "Golos Text Regular", + "postscriptName": "GolosText-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "500": { + "familyName": "Golos Text", + "fullName": "Golos Text Medium", + "postscriptName": "GolosText-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Golos Text", + "fullName": "Golos Text SemiBold", + "postscriptName": "GolosText-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Golos Text", + "fullName": "Golos Text Bold", + "postscriptName": "GolosText-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Golos Text", + "fullName": "Golos Text ExtraBold", + "postscriptName": "GolosText-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "Golos Text", + "fullName": "Golos Text Black", + "postscriptName": "GolosText-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Golos Text", + "fullName": "Golos Text Regular", + "postscriptName": "GolosText-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "gorditas": { + "familyName": "Gorditas", + "fullName": "Gorditas", + "postscriptName": "Gorditas-Regular", + "category": "display", + "capHeight": 380, + "ascent": 954, + "descent": -259, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 274, + "xWidthAvg": 509, + "subsets": { + "latin": { + "xWidthAvg": 509 + }, + "thai": { + "xWidthAvg": 203 + } + }, + "variants": { + "700": { + "familyName": "Gorditas", + "fullName": "Gorditas Bold", + "postscriptName": "Gorditas-Bold", + "category": "display", + "capHeight": 700, + "ascent": 954, + "descent": -259, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 514, + "subsets": { + "latin": { + "xWidthAvg": 514 + }, + "thai": { + "xWidthAvg": 195 + } + } + }, + "regular": { + "familyName": "Gorditas", + "fullName": "Gorditas", + "postscriptName": "Gorditas-Regular", + "category": "display", + "capHeight": 380, + "ascent": 954, + "descent": -259, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 274, + "xWidthAvg": 509, + "subsets": { + "latin": { + "xWidthAvg": 509 + }, + "thai": { + "xWidthAvg": 203 + } + } + } + } + }, + "gothicA1": { + "familyName": "Gothic A1", + "fullName": "Gothic A1 Regular", + "postscriptName": "GothicA1-Regular", + "category": "sans-serif", + "capHeight": 749, + "ascent": 817, + "descent": -207, + "lineGap": 256, + "unitsPerEm": 1024, + "xHeight": 538, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 374 + } + }, + "variants": { + "100": { + "familyName": "Gothic A1", + "fullName": "Gothic A1 Thin", + "postscriptName": "GothicA1-Thin", + "category": "sans-serif", + "capHeight": 707, + "ascent": 817, + "descent": -207, + "lineGap": 256, + "unitsPerEm": 1024, + "xHeight": 500, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 374 + } + } + }, + "200": { + "familyName": "Gothic A1", + "fullName": "Gothic A1 ExtraLight", + "postscriptName": "GothicA1-ExtraLight", + "category": "sans-serif", + "capHeight": 721, + "ascent": 817, + "descent": -207, + "lineGap": 256, + "unitsPerEm": 1024, + "xHeight": 513, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 374 + } + } + }, + "300": { + "familyName": "Gothic A1", + "fullName": "Gothic A1 Light", + "postscriptName": "GothicA1-Light", + "category": "sans-serif", + "capHeight": 735, + "ascent": 817, + "descent": -207, + "lineGap": 256, + "unitsPerEm": 1024, + "xHeight": 525, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 374 + } + } + }, + "500": { + "familyName": "Gothic A1", + "fullName": "Gothic A1 Medium", + "postscriptName": "GothicA1-Medium", + "category": "sans-serif", + "capHeight": 763, + "ascent": 817, + "descent": -207, + "lineGap": 256, + "unitsPerEm": 1024, + "xHeight": 551, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 374 + } + } + }, + "600": { + "familyName": "Gothic A1", + "fullName": "Gothic A1 SemiBold", + "postscriptName": "GothicA1-SemiBold", + "category": "sans-serif", + "capHeight": 777, + "ascent": 817, + "descent": -207, + "lineGap": 256, + "unitsPerEm": 1024, + "xHeight": 564, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 374 + } + } + }, + "700": { + "familyName": "Gothic A1", + "fullName": "Gothic A1 Bold", + "postscriptName": "GothicA1-Bold", + "category": "sans-serif", + "capHeight": 791, + "ascent": 817, + "descent": -207, + "lineGap": 256, + "unitsPerEm": 1024, + "xHeight": 577, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 374 + } + } + }, + "800": { + "familyName": "Gothic A1", + "fullName": "Gothic A1 ExtraBold", + "postscriptName": "GothicA1-ExtraBold", + "category": "sans-serif", + "capHeight": 791, + "ascent": 817, + "descent": -207, + "lineGap": 256, + "unitsPerEm": 1024, + "xHeight": 577, + "xWidthAvg": 501, + "subsets": { + "latin": { + "xWidthAvg": 501 + }, + "thai": { + "xWidthAvg": 374 + } + } + }, + "900": { + "familyName": "Gothic A1", + "fullName": "Gothic A1 Black", + "postscriptName": "GothicA1-Black", + "category": "sans-serif", + "capHeight": 819, + "ascent": 817, + "descent": -207, + "lineGap": 256, + "unitsPerEm": 1024, + "xHeight": 602, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 374 + } + } + }, + "regular": { + "familyName": "Gothic A1", + "fullName": "Gothic A1 Regular", + "postscriptName": "GothicA1-Regular", + "category": "sans-serif", + "capHeight": 749, + "ascent": 817, + "descent": -207, + "lineGap": 256, + "unitsPerEm": 1024, + "xHeight": 538, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 374 + } + } + } + } + }, + "gotu": { + "familyName": "Gotu", + "fullName": "Gotu", + "postscriptName": "Gotu-Regular", + "category": "sans-serif", + "capHeight": 713, + "ascent": 1115, + "descent": -545, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 813 + } + }, + "variants": { + "regular": { + "familyName": "Gotu", + "fullName": "Gotu", + "postscriptName": "Gotu-Regular", + "category": "sans-serif", + "capHeight": 713, + "ascent": 1115, + "descent": -545, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 813 + } + } + } + } + }, + "goudyBookletter1911": { + "familyName": "Goudy Bookletter 1911", + "fullName": "Goudy Bookletter 1911", + "postscriptName": "GoudyBookletter1911", + "category": "serif", + "capHeight": 691, + "ascent": 983, + "descent": -318, + "lineGap": 92, + "unitsPerEm": 1024, + "xHeight": 458, + "xWidthAvg": 403, + "subsets": { + "latin": { + "xWidthAvg": 403 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "Goudy Bookletter 1911", + "fullName": "Goudy Bookletter 1911", + "postscriptName": "GoudyBookletter1911", + "category": "serif", + "capHeight": 691, + "ascent": 983, + "descent": -318, + "lineGap": 92, + "unitsPerEm": 1024, + "xHeight": 458, + "xWidthAvg": 403, + "subsets": { + "latin": { + "xWidthAvg": 403 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "gowunBatang": { + "familyName": "Gowun Batang", + "fullName": "Gowun Batang Regular", + "postscriptName": "GowunBatang-Regular", + "category": "serif", + "capHeight": 775, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 900 + } + }, + "variants": { + "700": { + "familyName": "Gowun Batang", + "fullName": "Gowun Batang Bold", + "postscriptName": "GowunBatang-Bold", + "category": "serif", + "capHeight": 780, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 545, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 900 + } + } + }, + "regular": { + "familyName": "Gowun Batang", + "fullName": "Gowun Batang Regular", + "postscriptName": "GowunBatang-Regular", + "category": "serif", + "capHeight": 775, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 900 + } + } + } + } + }, + "gowunDodum": { + "familyName": "Gowun Dodum", + "fullName": "Gowun Dodum Regular", + "postscriptName": "GowunDodum-Regular", + "category": "sans-serif", + "capHeight": 775, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 900 + } + }, + "variants": { + "regular": { + "familyName": "Gowun Dodum", + "fullName": "Gowun Dodum Regular", + "postscriptName": "GowunDodum-Regular", + "category": "sans-serif", + "capHeight": 775, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 900 + } + } + } + } + }, + "graduate": { + "familyName": "Graduate", + "fullName": "Graduate", + "postscriptName": "Graduate-Regular", + "category": "serif", + "capHeight": 750, + "ascent": 953, + "descent": -186, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 650, + "xWidthAvg": 594, + "subsets": { + "latin": { + "xWidthAvg": 594 + }, + "thai": { + "xWidthAvg": 350 + } + }, + "variants": { + "regular": { + "familyName": "Graduate", + "fullName": "Graduate", + "postscriptName": "Graduate-Regular", + "category": "serif", + "capHeight": 750, + "ascent": 953, + "descent": -186, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 650, + "xWidthAvg": 594, + "subsets": { + "latin": { + "xWidthAvg": 594 + }, + "thai": { + "xWidthAvg": 350 + } + } + } + } + }, + "grandHotel": { + "familyName": "Grand Hotel", + "fullName": "Grand Hotel", + "postscriptName": "GrandHotel-Regular", + "category": "handwriting", + "capHeight": 1434, + "ascent": 1938, + "descent": -844, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 803, + "xWidthAvg": 629, + "subsets": { + "latin": { + "xWidthAvg": 629 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "Grand Hotel", + "fullName": "Grand Hotel", + "postscriptName": "GrandHotel-Regular", + "category": "handwriting", + "capHeight": 1434, + "ascent": 1938, + "descent": -844, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 803, + "xWidthAvg": 629, + "subsets": { + "latin": { + "xWidthAvg": 629 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "grandifloraOne": { + "familyName": "Grandiflora One", + "fullName": "Grandiflora One Regular", + "postscriptName": "GrandifloraOne-Regular", + "category": "serif", + "capHeight": 687, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 407, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 960 + } + }, + "variants": { + "regular": { + "familyName": "Grandiflora One", + "fullName": "Grandiflora One Regular", + "postscriptName": "GrandifloraOne-Regular", + "category": "serif", + "capHeight": 687, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 407, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 960 + } + } + } + } + }, + "grandstander": { + "familyName": "Grandstander", + "fullName": "Grandstander Regular", + "postscriptName": "Grandstander-Regular", + "category": "display", + "capHeight": 1291, + "ascent": 1465, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1063, + "xWidthAvg": 995, + "subsets": { + "latin": { + "xWidthAvg": 995 + }, + "thai": { + "xWidthAvg": 662 + } + }, + "variants": { + "100": { + "familyName": "Grandstander", + "fullName": "Grandstander Thin", + "postscriptName": "Grandstander-Thin", + "category": "display", + "capHeight": 1291, + "ascent": 1465, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1063, + "xWidthAvg": 993, + "subsets": { + "latin": { + "xWidthAvg": 993 + }, + "thai": { + "xWidthAvg": 662 + } + } + }, + "200": { + "familyName": "Grandstander", + "fullName": "Grandstander ExtraLight", + "postscriptName": "Grandstander-ExtraLight", + "category": "display", + "capHeight": 1291, + "ascent": 1465, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1063, + "xWidthAvg": 994, + "subsets": { + "latin": { + "xWidthAvg": 994 + }, + "thai": { + "xWidthAvg": 662 + } + } + }, + "300": { + "familyName": "Grandstander", + "fullName": "Grandstander Light", + "postscriptName": "Grandstander-Light", + "category": "display", + "capHeight": 1291, + "ascent": 1465, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1063, + "xWidthAvg": 994, + "subsets": { + "latin": { + "xWidthAvg": 994 + }, + "thai": { + "xWidthAvg": 662 + } + } + }, + "500": { + "familyName": "Grandstander", + "fullName": "Grandstander Medium", + "postscriptName": "Grandstander-Medium", + "category": "display", + "capHeight": 1291, + "ascent": 1465, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1063, + "xWidthAvg": 995, + "subsets": { + "latin": { + "xWidthAvg": 995 + }, + "thai": { + "xWidthAvg": 662 + } + } + }, + "600": { + "familyName": "Grandstander", + "fullName": "Grandstander SemiBold", + "postscriptName": "Grandstander-SemiBold", + "category": "display", + "capHeight": 1291, + "ascent": 1465, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1063, + "xWidthAvg": 996, + "subsets": { + "latin": { + "xWidthAvg": 996 + }, + "thai": { + "xWidthAvg": 662 + } + } + }, + "700": { + "familyName": "Grandstander", + "fullName": "Grandstander Bold", + "postscriptName": "Grandstander-Bold", + "category": "display", + "capHeight": 1291, + "ascent": 1465, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1063, + "xWidthAvg": 996, + "subsets": { + "latin": { + "xWidthAvg": 996 + }, + "thai": { + "xWidthAvg": 662 + } + } + }, + "800": { + "familyName": "Grandstander", + "fullName": "Grandstander ExtraBold", + "postscriptName": "Grandstander-ExtraBold", + "category": "display", + "capHeight": 1291, + "ascent": 1465, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1063, + "xWidthAvg": 997, + "subsets": { + "latin": { + "xWidthAvg": 997 + }, + "thai": { + "xWidthAvg": 662 + } + } + }, + "900": { + "familyName": "Grandstander", + "fullName": "Grandstander Black", + "postscriptName": "Grandstander-Black", + "category": "display", + "capHeight": 1291, + "ascent": 1465, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1063, + "xWidthAvg": 997, + "subsets": { + "latin": { + "xWidthAvg": 997 + }, + "thai": { + "xWidthAvg": 662 + } + } + }, + "regular": { + "familyName": "Grandstander", + "fullName": "Grandstander Regular", + "postscriptName": "Grandstander-Regular", + "category": "display", + "capHeight": 1291, + "ascent": 1465, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1063, + "xWidthAvg": 995, + "subsets": { + "latin": { + "xWidthAvg": 995 + }, + "thai": { + "xWidthAvg": 662 + } + } + }, + "italic": { + "familyName": "Grandstander", + "fullName": "Grandstander Italic", + "postscriptName": "Grandstander-Italic", + "category": "display", + "capHeight": 1291, + "ascent": 1465, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1063, + "xWidthAvg": 995, + "subsets": { + "latin": { + "xWidthAvg": 995 + }, + "thai": { + "xWidthAvg": 662 + } + } + }, + "900italic": { + "familyName": "Grandstander", + "fullName": "Grandstander Black Italic", + "postscriptName": "Grandstander-BlackItalic", + "category": "display", + "capHeight": 1291, + "ascent": 1465, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1063, + "xWidthAvg": 997, + "subsets": { + "latin": { + "xWidthAvg": 997 + }, + "thai": { + "xWidthAvg": 662 + } + } + }, + "800italic": { + "familyName": "Grandstander", + "fullName": "Grandstander ExtraBold Italic", + "postscriptName": "Grandstander-ExtraBoldItalic", + "category": "display", + "capHeight": 1291, + "ascent": 1465, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1063, + "xWidthAvg": 997, + "subsets": { + "latin": { + "xWidthAvg": 997 + }, + "thai": { + "xWidthAvg": 662 + } + } + }, + "700italic": { + "familyName": "Grandstander", + "fullName": "Grandstander Bold Italic", + "postscriptName": "Grandstander-BoldItalic", + "category": "display", + "capHeight": 1291, + "ascent": 1465, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1063, + "xWidthAvg": 996, + "subsets": { + "latin": { + "xWidthAvg": 996 + }, + "thai": { + "xWidthAvg": 662 + } + } + }, + "600italic": { + "familyName": "Grandstander", + "fullName": "Grandstander SemiBold Italic", + "postscriptName": "Grandstander-SemiBoldItalic", + "category": "display", + "capHeight": 1291, + "ascent": 1465, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1063, + "xWidthAvg": 996, + "subsets": { + "latin": { + "xWidthAvg": 996 + }, + "thai": { + "xWidthAvg": 662 + } + } + }, + "500italic": { + "familyName": "Grandstander", + "fullName": "Grandstander Medium Italic", + "postscriptName": "Grandstander-MediumItalic", + "category": "display", + "capHeight": 1291, + "ascent": 1465, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1063, + "xWidthAvg": 995, + "subsets": { + "latin": { + "xWidthAvg": 995 + }, + "thai": { + "xWidthAvg": 662 + } + } + }, + "300italic": { + "familyName": "Grandstander", + "fullName": "Grandstander Light Italic", + "postscriptName": "Grandstander-LightItalic", + "category": "display", + "capHeight": 1291, + "ascent": 1465, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1063, + "xWidthAvg": 994, + "subsets": { + "latin": { + "xWidthAvg": 994 + }, + "thai": { + "xWidthAvg": 662 + } + } + }, + "200italic": { + "familyName": "Grandstander", + "fullName": "Grandstander ExtraLight Italic", + "postscriptName": "Grandstander-ExtraLightItalic", + "category": "display", + "capHeight": 1291, + "ascent": 1465, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1063, + "xWidthAvg": 993, + "subsets": { + "latin": { + "xWidthAvg": 993 + }, + "thai": { + "xWidthAvg": 662 + } + } + }, + "100italic": { + "familyName": "Grandstander", + "fullName": "Grandstander Thin Italic", + "postscriptName": "Grandstander-ThinItalic", + "category": "display", + "capHeight": 1291, + "ascent": 1465, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1063, + "xWidthAvg": 993, + "subsets": { + "latin": { + "xWidthAvg": 993 + }, + "thai": { + "xWidthAvg": 662 + } + } + } + } + }, + "grapeNuts": { + "familyName": "Grape Nuts", + "fullName": "Grape Nuts Regular", + "postscriptName": "GrapeNuts-Regular", + "category": "handwriting", + "capHeight": 590, + "ascent": 900, + "descent": -325, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 365, + "xWidthAvg": 380, + "subsets": { + "latin": { + "xWidthAvg": 380 + }, + "thai": { + "xWidthAvg": 499 + } + }, + "variants": { + "regular": { + "familyName": "Grape Nuts", + "fullName": "Grape Nuts Regular", + "postscriptName": "GrapeNuts-Regular", + "category": "handwriting", + "capHeight": 590, + "ascent": 900, + "descent": -325, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 365, + "xWidthAvg": 380, + "subsets": { + "latin": { + "xWidthAvg": 380 + }, + "thai": { + "xWidthAvg": 499 + } + } + } + } + }, + "gravitasOne": { + "familyName": "Gravitas One", + "fullName": "Gravitas One", + "postscriptName": "GravitasOne", + "category": "display", + "capHeight": 1417, + "ascent": 1937, + "descent": -668, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1113, + "xWidthAvg": 1480, + "subsets": { + "latin": { + "xWidthAvg": 1480 + }, + "thai": { + "xWidthAvg": 756 + } + }, + "variants": { + "regular": { + "familyName": "Gravitas One", + "fullName": "Gravitas One", + "postscriptName": "GravitasOne", + "category": "display", + "capHeight": 1417, + "ascent": 1937, + "descent": -668, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1113, + "xWidthAvg": 1480, + "subsets": { + "latin": { + "xWidthAvg": 1480 + }, + "thai": { + "xWidthAvg": 756 + } + } + } + } + }, + "greatVibes": { + "familyName": "Great Vibes", + "fullName": "Great Vibes Regular", + "postscriptName": "GreatVibes-Regular", + "category": "handwriting", + "capHeight": 750, + "ascent": 851, + "descent": -401, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 328, + "xWidthAvg": 304, + "subsets": { + "latin": { + "xWidthAvg": 304 + }, + "thai": { + "xWidthAvg": 526 + } + }, + "variants": { + "regular": { + "familyName": "Great Vibes", + "fullName": "Great Vibes Regular", + "postscriptName": "GreatVibes-Regular", + "category": "handwriting", + "capHeight": 750, + "ascent": 851, + "descent": -401, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 328, + "xWidthAvg": 304, + "subsets": { + "latin": { + "xWidthAvg": 304 + }, + "thai": { + "xWidthAvg": 526 + } + } + } + } + }, + "grechenFuemen": { + "familyName": "Grechen Fuemen", + "fullName": "Grechen Fuemen Regular", + "postscriptName": "GrechenFuemen-Regular", + "category": "handwriting", + "capHeight": 580, + "ascent": 900, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 317, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 349 + } + }, + "variants": { + "regular": { + "familyName": "Grechen Fuemen", + "fullName": "Grechen Fuemen Regular", + "postscriptName": "GrechenFuemen-Regular", + "category": "handwriting", + "capHeight": 580, + "ascent": 900, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 317, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 349 + } + } + } + } + }, + "grenze": { + "familyName": "Grenze", + "fullName": "Grenze Regular", + "postscriptName": "Grenze-Regular", + "category": "serif", + "capHeight": 603, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 448, + "xWidthAvg": 356, + "subsets": { + "latin": { + "xWidthAvg": 356 + }, + "thai": { + "xWidthAvg": 527 + } + }, + "variants": { + "100": { + "familyName": "Grenze", + "fullName": "Grenze Thin", + "postscriptName": "Grenze-Thin", + "category": "serif", + "capHeight": 591, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 342, + "subsets": { + "latin": { + "xWidthAvg": 342 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "200": { + "familyName": "Grenze", + "fullName": "Grenze ExtraLight", + "postscriptName": "Grenze-ExtraLight", + "category": "serif", + "capHeight": 594, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 442, + "xWidthAvg": 345, + "subsets": { + "latin": { + "xWidthAvg": 345 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "300": { + "familyName": "Grenze", + "fullName": "Grenze Light", + "postscriptName": "Grenze-Light", + "category": "serif", + "capHeight": 599, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 445, + "xWidthAvg": 351, + "subsets": { + "latin": { + "xWidthAvg": 351 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "500": { + "familyName": "Grenze", + "fullName": "Grenze Medium", + "postscriptName": "Grenze-Medium", + "category": "serif", + "capHeight": 604, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 364, + "subsets": { + "latin": { + "xWidthAvg": 364 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "600": { + "familyName": "Grenze", + "fullName": "Grenze SemiBold", + "postscriptName": "Grenze-SemiBold", + "category": "serif", + "capHeight": 606, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 453, + "xWidthAvg": 373, + "subsets": { + "latin": { + "xWidthAvg": 373 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "700": { + "familyName": "Grenze", + "fullName": "Grenze Bold", + "postscriptName": "Grenze-Bold", + "category": "serif", + "capHeight": 608, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 456, + "xWidthAvg": 384, + "subsets": { + "latin": { + "xWidthAvg": 384 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "800": { + "familyName": "Grenze", + "fullName": "Grenze ExtraBold", + "postscriptName": "Grenze-ExtraBold", + "category": "serif", + "capHeight": 610, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 459, + "xWidthAvg": 395, + "subsets": { + "latin": { + "xWidthAvg": 395 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "900": { + "familyName": "Grenze", + "fullName": "Grenze Black", + "postscriptName": "Grenze-Black", + "category": "serif", + "capHeight": 612, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 462, + "xWidthAvg": 405, + "subsets": { + "latin": { + "xWidthAvg": 405 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "regular": { + "familyName": "Grenze", + "fullName": "Grenze Regular", + "postscriptName": "Grenze-Regular", + "category": "serif", + "capHeight": 603, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 448, + "xWidthAvg": 356, + "subsets": { + "latin": { + "xWidthAvg": 356 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "italic": { + "familyName": "Grenze", + "fullName": "Grenze Italic", + "postscriptName": "Grenze-Italic", + "category": "serif", + "capHeight": 603, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 448, + "xWidthAvg": 345, + "subsets": { + "latin": { + "xWidthAvg": 345 + }, + "thai": { + "xWidthAvg": 528 + } + } + }, + "900italic": { + "familyName": "Grenze", + "fullName": "Grenze Black Italic", + "postscriptName": "Grenze-BlackItalic", + "category": "serif", + "capHeight": 613, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 462, + "xWidthAvg": 394, + "subsets": { + "latin": { + "xWidthAvg": 394 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "800italic": { + "familyName": "Grenze", + "fullName": "Grenze ExtraBold Italic", + "postscriptName": "Grenze-ExtraBoldItalic", + "category": "serif", + "capHeight": 611, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 459, + "xWidthAvg": 384, + "subsets": { + "latin": { + "xWidthAvg": 384 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "700italic": { + "familyName": "Grenze", + "fullName": "Grenze Bold Italic", + "postscriptName": "Grenze-BoldItalic", + "category": "serif", + "capHeight": 609, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 456, + "xWidthAvg": 373, + "subsets": { + "latin": { + "xWidthAvg": 373 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "600italic": { + "familyName": "Grenze", + "fullName": "Grenze SemiBold Italic", + "postscriptName": "Grenze-SemiBoldItalic", + "category": "serif", + "capHeight": 607, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 453, + "xWidthAvg": 362, + "subsets": { + "latin": { + "xWidthAvg": 362 + }, + "thai": { + "xWidthAvg": 528 + } + } + }, + "500italic": { + "familyName": "Grenze", + "fullName": "Grenze Medium Italic", + "postscriptName": "Grenze-MediumItalic", + "category": "serif", + "capHeight": 605, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 353, + "subsets": { + "latin": { + "xWidthAvg": 353 + }, + "thai": { + "xWidthAvg": 528 + } + } + }, + "300italic": { + "familyName": "Grenze", + "fullName": "Grenze Light Italic", + "postscriptName": "Grenze-LightItalic", + "category": "serif", + "capHeight": 599, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 445, + "xWidthAvg": 340, + "subsets": { + "latin": { + "xWidthAvg": 340 + }, + "thai": { + "xWidthAvg": 528 + } + } + }, + "200italic": { + "familyName": "Grenze", + "fullName": "Grenze ExtraLight Italic", + "postscriptName": "Grenze-ExtraLightItalic", + "category": "serif", + "capHeight": 594, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 442, + "xWidthAvg": 336, + "subsets": { + "latin": { + "xWidthAvg": 336 + }, + "thai": { + "xWidthAvg": 528 + } + } + }, + "100italic": { + "familyName": "Grenze", + "fullName": "Grenze Thin Italic", + "postscriptName": "Grenze-ThinItalic", + "category": "serif", + "capHeight": 591, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 332, + "subsets": { + "latin": { + "xWidthAvg": 332 + }, + "thai": { + "xWidthAvg": 528 + } + } + } + } + }, + "grenzeGotisch": { + "familyName": "Grenze Gotisch", + "fullName": "Grenze Gotisch Regular", + "postscriptName": "GrenzeGotisch-Regular", + "category": "display", + "capHeight": 603, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 448, + "xWidthAvg": 354, + "subsets": { + "latin": { + "xWidthAvg": 354 + }, + "thai": { + "xWidthAvg": 527 + } + }, + "variants": { + "100": { + "familyName": "Grenze Gotisch", + "fullName": "Grenze Gotisch Thin", + "postscriptName": "GrenzeGotisch-Thin", + "category": "display", + "capHeight": 603, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 448, + "xWidthAvg": 335, + "subsets": { + "latin": { + "xWidthAvg": 335 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "200": { + "familyName": "Grenze Gotisch", + "fullName": "Grenze Gotisch ExtraLight", + "postscriptName": "GrenzeGotisch-ExtraLight", + "category": "display", + "capHeight": 603, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 448, + "xWidthAvg": 341, + "subsets": { + "latin": { + "xWidthAvg": 341 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "300": { + "familyName": "Grenze Gotisch", + "fullName": "Grenze Gotisch Light", + "postscriptName": "GrenzeGotisch-Light", + "category": "display", + "capHeight": 603, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 448, + "xWidthAvg": 348, + "subsets": { + "latin": { + "xWidthAvg": 348 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "500": { + "familyName": "Grenze Gotisch", + "fullName": "Grenze Gotisch Medium", + "postscriptName": "GrenzeGotisch-Medium", + "category": "display", + "capHeight": 603, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 448, + "xWidthAvg": 361, + "subsets": { + "latin": { + "xWidthAvg": 361 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "600": { + "familyName": "Grenze Gotisch", + "fullName": "Grenze Gotisch SemiBold", + "postscriptName": "GrenzeGotisch-SemiBold", + "category": "display", + "capHeight": 603, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 448, + "xWidthAvg": 369, + "subsets": { + "latin": { + "xWidthAvg": 369 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "700": { + "familyName": "Grenze Gotisch", + "fullName": "Grenze Gotisch Bold", + "postscriptName": "GrenzeGotisch-Bold", + "category": "display", + "capHeight": 603, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 448, + "xWidthAvg": 377, + "subsets": { + "latin": { + "xWidthAvg": 377 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "800": { + "familyName": "Grenze Gotisch", + "fullName": "Grenze Gotisch ExtraBold", + "postscriptName": "GrenzeGotisch-ExtraBold", + "category": "display", + "capHeight": 603, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 448, + "xWidthAvg": 385, + "subsets": { + "latin": { + "xWidthAvg": 385 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "900": { + "familyName": "Grenze Gotisch", + "fullName": "Grenze Gotisch Black", + "postscriptName": "GrenzeGotisch-Black", + "category": "display", + "capHeight": 603, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 448, + "xWidthAvg": 393, + "subsets": { + "latin": { + "xWidthAvg": 393 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "regular": { + "familyName": "Grenze Gotisch", + "fullName": "Grenze Gotisch Regular", + "postscriptName": "GrenzeGotisch-Regular", + "category": "display", + "capHeight": 603, + "ascent": 1100, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 448, + "xWidthAvg": 354, + "subsets": { + "latin": { + "xWidthAvg": 354 + }, + "thai": { + "xWidthAvg": 527 + } + } + } + } + }, + "greyQo": { + "familyName": "Grey Qo", + "fullName": "Grey Qo Regular", + "postscriptName": "GreyQo-Regular", + "category": "handwriting", + "capHeight": 540, + "ascent": 900, + "descent": -360, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 265, + "xWidthAvg": 257, + "subsets": { + "latin": { + "xWidthAvg": 257 + }, + "thai": { + "xWidthAvg": 370 + } + }, + "variants": { + "regular": { + "familyName": "Grey Qo", + "fullName": "Grey Qo Regular", + "postscriptName": "GreyQo-Regular", + "category": "handwriting", + "capHeight": 540, + "ascent": 900, + "descent": -360, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 265, + "xWidthAvg": 257, + "subsets": { + "latin": { + "xWidthAvg": 257 + }, + "thai": { + "xWidthAvg": 370 + } + } + } + } + }, + "griffy": { + "familyName": "Griffy", + "fullName": "Griffy", + "postscriptName": "Griffy-Regular", + "category": "display", + "capHeight": 0, + "ascent": 984, + "descent": -399, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 0, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 358 + } + }, + "variants": { + "regular": { + "familyName": "Griffy", + "fullName": "Griffy", + "postscriptName": "Griffy-Regular", + "category": "display", + "capHeight": 0, + "ascent": 984, + "descent": -399, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 0, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 358 + } + } + } + } + }, + "gruppo": { + "familyName": "Gruppo", + "fullName": "Gruppo Regular", + "postscriptName": "Gruppo-Regular", + "category": "sans-serif", + "capHeight": 1114, + "ascent": 1639, + "descent": -340, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 766, + "xWidthAvg": 928, + "subsets": { + "latin": { + "xWidthAvg": 928 + }, + "thai": { + "xWidthAvg": 1311 + } + }, + "variants": { + "regular": { + "familyName": "Gruppo", + "fullName": "Gruppo Regular", + "postscriptName": "Gruppo-Regular", + "category": "sans-serif", + "capHeight": 1114, + "ascent": 1639, + "descent": -340, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 766, + "xWidthAvg": 928, + "subsets": { + "latin": { + "xWidthAvg": 928 + }, + "thai": { + "xWidthAvg": 1311 + } + } + } + } + }, + "gudea": { + "familyName": "Gudea", + "fullName": "Gudea", + "postscriptName": "Gudea", + "category": "sans-serif", + "capHeight": 700, + "ascent": 972, + "descent": -264, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 211 + } + }, + "variants": { + "700": { + "familyName": "Gudea", + "fullName": "Gudea Bold", + "postscriptName": "Gudea-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 972, + "descent": -264, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 211 + } + } + }, + "regular": { + "familyName": "Gudea", + "fullName": "Gudea", + "postscriptName": "Gudea", + "category": "sans-serif", + "capHeight": 700, + "ascent": 972, + "descent": -264, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 211 + } + } + }, + "italic": { + "familyName": "Gudea", + "fullName": "Gudea Italic", + "postscriptName": "Gudea-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 972, + "descent": -264, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 385, + "subsets": { + "latin": { + "xWidthAvg": 385 + }, + "thai": { + "xWidthAvg": 190 + } + } + } + } + }, + "gugi": { + "familyName": "Gugi", + "fullName": "Gugi Regular", + "postscriptName": "Gugi-Regular", + "category": "display", + "capHeight": 794, + "ascent": 858, + "descent": -142, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 602, + "xWidthAvg": 588, + "subsets": { + "latin": { + "xWidthAvg": 588 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Gugi", + "fullName": "Gugi Regular", + "postscriptName": "Gugi-Regular", + "category": "display", + "capHeight": 794, + "ascent": 858, + "descent": -142, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 602, + "xWidthAvg": 588, + "subsets": { + "latin": { + "xWidthAvg": 588 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "gulzar": { + "familyName": "Gulzar", + "fullName": "Gulzar Regular", + "postscriptName": "Gulzar-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 1500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 405, + "subsets": { + "latin": { + "xWidthAvg": 405 + }, + "thai": { + "xWidthAvg": 545 + } + }, + "variants": { + "regular": { + "familyName": "Gulzar", + "fullName": "Gulzar Regular", + "postscriptName": "Gulzar-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 1500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 405, + "subsets": { + "latin": { + "xWidthAvg": 405 + }, + "thai": { + "xWidthAvg": 545 + } + } + } + } + }, + "gupter": { + "familyName": "Gupter", + "fullName": "Gupter Regular", + "postscriptName": "Gupter-Regular", + "category": "serif", + "capHeight": 622, + "ascent": 900, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 385, + "subsets": { + "latin": { + "xWidthAvg": 385 + }, + "thai": { + "xWidthAvg": 957 + } + }, + "variants": { + "500": { + "familyName": "Gupter", + "fullName": "Gupter Medium", + "postscriptName": "Gupter-Medium", + "category": "serif", + "capHeight": 622, + "ascent": 900, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 459, + "xWidthAvg": 396, + "subsets": { + "latin": { + "xWidthAvg": 396 + }, + "thai": { + "xWidthAvg": 957 + } + } + }, + "700": { + "familyName": "Gupter", + "fullName": "Gupter Bold", + "postscriptName": "Gupter-Bold", + "category": "serif", + "capHeight": 622, + "ascent": 900, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 414, + "subsets": { + "latin": { + "xWidthAvg": 414 + }, + "thai": { + "xWidthAvg": 957 + } + } + }, + "regular": { + "familyName": "Gupter", + "fullName": "Gupter Regular", + "postscriptName": "Gupter-Regular", + "category": "serif", + "capHeight": 622, + "ascent": 900, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 385, + "subsets": { + "latin": { + "xWidthAvg": 385 + }, + "thai": { + "xWidthAvg": 957 + } + } + } + } + }, + "gurajada": { + "familyName": "Gurajada", + "fullName": "Gurajada", + "postscriptName": "Gurajada", + "category": "serif", + "capHeight": 482, + "ascent": 1294, + "descent": -810, + "lineGap": 0, + "unitsPerEm": 1070, + "xHeight": 358, + "xWidthAvg": 296, + "subsets": { + "latin": { + "xWidthAvg": 296 + }, + "thai": { + "xWidthAvg": 888 + } + }, + "variants": { + "regular": { + "familyName": "Gurajada", + "fullName": "Gurajada", + "postscriptName": "Gurajada", + "category": "serif", + "capHeight": 482, + "ascent": 1294, + "descent": -810, + "lineGap": 0, + "unitsPerEm": 1070, + "xHeight": 358, + "xWidthAvg": 296, + "subsets": { + "latin": { + "xWidthAvg": 296 + }, + "thai": { + "xWidthAvg": 888 + } + } + } + } + }, + "gwendolyn": { + "familyName": "Gwendolyn", + "fullName": "Gwendolyn Regular", + "postscriptName": "Gwendolyn-Regular", + "category": "handwriting", + "capHeight": 618, + "ascent": 880, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 290, + "xWidthAvg": 320, + "subsets": { + "latin": { + "xWidthAvg": 320 + }, + "thai": { + "xWidthAvg": 484 + } + }, + "variants": { + "700": { + "familyName": "Gwendolyn", + "fullName": "Gwendolyn Bold", + "postscriptName": "Gwendolyn-Bold", + "category": "handwriting", + "capHeight": 618, + "ascent": 880, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 290, + "xWidthAvg": 343, + "subsets": { + "latin": { + "xWidthAvg": 343 + }, + "thai": { + "xWidthAvg": 484 + } + } + }, + "regular": { + "familyName": "Gwendolyn", + "fullName": "Gwendolyn Regular", + "postscriptName": "Gwendolyn-Regular", + "category": "handwriting", + "capHeight": 618, + "ascent": 880, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 290, + "xWidthAvg": 320, + "subsets": { + "latin": { + "xWidthAvg": 320 + }, + "thai": { + "xWidthAvg": 484 + } + } + } + } + }, + "habibi": { + "familyName": "Habibi", + "fullName": "Habibi", + "postscriptName": "Habibi-Regular", + "category": "serif", + "capHeight": 1508, + "ascent": 2000, + "descent": -560, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 989, + "xWidthAvg": 954, + "subsets": { + "latin": { + "xWidthAvg": 954 + }, + "thai": { + "xWidthAvg": 659 + } + }, + "variants": { + "regular": { + "familyName": "Habibi", + "fullName": "Habibi", + "postscriptName": "Habibi-Regular", + "category": "serif", + "capHeight": 1508, + "ascent": 2000, + "descent": -560, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 989, + "xWidthAvg": 954, + "subsets": { + "latin": { + "xWidthAvg": 954 + }, + "thai": { + "xWidthAvg": 659 + } + } + } + } + }, + "hachiMaruPop": { + "familyName": "Hachi Maru Pop", + "fullName": "Hachi Maru Pop Regular", + "postscriptName": "HachiMaruPop-Regular", + "category": "handwriting", + "capHeight": 700, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 660, + "subsets": { + "latin": { + "xWidthAvg": 660 + }, + "thai": { + "xWidthAvg": 659 + } + }, + "variants": { + "regular": { + "familyName": "Hachi Maru Pop", + "fullName": "Hachi Maru Pop Regular", + "postscriptName": "HachiMaruPop-Regular", + "category": "handwriting", + "capHeight": 700, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 660, + "subsets": { + "latin": { + "xWidthAvg": 660 + }, + "thai": { + "xWidthAvg": 659 + } + } + } + } + }, + "hahmlet": { + "familyName": "Hahmlet", + "fullName": "Hahmlet Regular", + "postscriptName": "Hahmlet-Regular", + "category": "serif", + "capHeight": 742, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 497, + "subsets": { + "latin": { + "xWidthAvg": 497 + }, + "thai": { + "xWidthAvg": 843 + } + }, + "variants": { + "100": { + "familyName": "Hahmlet", + "fullName": "Hahmlet Thin", + "postscriptName": "Hahmlet-Thin", + "category": "serif", + "capHeight": 742, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 843 + } + } + }, + "200": { + "familyName": "Hahmlet", + "fullName": "Hahmlet ExtraLight", + "postscriptName": "Hahmlet-ExtraLight", + "category": "serif", + "capHeight": 742, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 843 + } + } + }, + "300": { + "familyName": "Hahmlet", + "fullName": "Hahmlet Light", + "postscriptName": "Hahmlet-Light", + "category": "serif", + "capHeight": 742, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 843 + } + } + }, + "500": { + "familyName": "Hahmlet", + "fullName": "Hahmlet Medium", + "postscriptName": "Hahmlet-Medium", + "category": "serif", + "capHeight": 742, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 843 + } + } + }, + "600": { + "familyName": "Hahmlet", + "fullName": "Hahmlet SemiBold", + "postscriptName": "Hahmlet-SemiBold", + "category": "serif", + "capHeight": 742, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 843 + } + } + }, + "700": { + "familyName": "Hahmlet", + "fullName": "Hahmlet Bold", + "postscriptName": "Hahmlet-Bold", + "category": "serif", + "capHeight": 742, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 517, + "subsets": { + "latin": { + "xWidthAvg": 517 + }, + "thai": { + "xWidthAvg": 843 + } + } + }, + "800": { + "familyName": "Hahmlet", + "fullName": "Hahmlet ExtraBold", + "postscriptName": "Hahmlet-ExtraBold", + "category": "serif", + "capHeight": 742, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 843 + } + } + }, + "900": { + "familyName": "Hahmlet", + "fullName": "Hahmlet Black", + "postscriptName": "Hahmlet-Black", + "category": "serif", + "capHeight": 742, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 843 + } + } + }, + "regular": { + "familyName": "Hahmlet", + "fullName": "Hahmlet Regular", + "postscriptName": "Hahmlet-Regular", + "category": "serif", + "capHeight": 742, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 497, + "subsets": { + "latin": { + "xWidthAvg": 497 + }, + "thai": { + "xWidthAvg": 843 + } + } + } + } + }, + "halant": { + "familyName": "Halant", + "fullName": "Halant Regular", + "postscriptName": "Halant-Regular", + "category": "serif", + "capHeight": 660, + "ascent": 1089, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 424, + "subsets": { + "latin": { + "xWidthAvg": 424 + }, + "thai": { + "xWidthAvg": 550 + } + }, + "variants": { + "300": { + "familyName": "Halant", + "fullName": "Halant Light", + "postscriptName": "Halant-Light", + "category": "serif", + "capHeight": 651, + "ascent": 1089, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 503, + "xWidthAvg": 413, + "subsets": { + "latin": { + "xWidthAvg": 413 + }, + "thai": { + "xWidthAvg": 550 + } + } + }, + "500": { + "familyName": "Halant", + "fullName": "Halant Medium", + "postscriptName": "Halant-Medium", + "category": "serif", + "capHeight": 675, + "ascent": 1089, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 550 + } + } + }, + "600": { + "familyName": "Halant", + "fullName": "Halant SemiBold", + "postscriptName": "Halant-SemiBold", + "category": "serif", + "capHeight": 675, + "ascent": 1089, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 550 + } + } + }, + "700": { + "familyName": "Halant", + "fullName": "Halant Bold", + "postscriptName": "Halant-Bold", + "category": "serif", + "capHeight": 695, + "ascent": 1089, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 550 + } + } + }, + "regular": { + "familyName": "Halant", + "fullName": "Halant Regular", + "postscriptName": "Halant-Regular", + "category": "serif", + "capHeight": 660, + "ascent": 1089, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 424, + "subsets": { + "latin": { + "xWidthAvg": 424 + }, + "thai": { + "xWidthAvg": 550 + } + } + } + } + }, + "hammersmithOne": { + "familyName": "Hammersmith One", + "fullName": "Hammersmith One Regular", + "postscriptName": "HammersmithOne-Regular", + "category": "sans-serif", + "capHeight": 1330, + "ascent": 1844, + "descent": -716, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1045, + "xWidthAvg": 978, + "subsets": { + "latin": { + "xWidthAvg": 978 + }, + "thai": { + "xWidthAvg": 0 + } + }, + "variants": { + "regular": { + "familyName": "Hammersmith One", + "fullName": "Hammersmith One Regular", + "postscriptName": "HammersmithOne-Regular", + "category": "sans-serif", + "capHeight": 1330, + "ascent": 1844, + "descent": -716, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1045, + "xWidthAvg": 978, + "subsets": { + "latin": { + "xWidthAvg": 978 + }, + "thai": { + "xWidthAvg": 0 + } + } + } + } + }, + "hanalei": { + "familyName": "Hanalei", + "fullName": "Hanalei", + "postscriptName": "Hanalei-Regular", + "category": "display", + "capHeight": 0, + "ascent": 2124, + "descent": -541, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 0, + "xWidthAvg": 934, + "subsets": { + "latin": { + "xWidthAvg": 934 + }, + "thai": { + "xWidthAvg": 410 + } + }, + "variants": { + "regular": { + "familyName": "Hanalei", + "fullName": "Hanalei", + "postscriptName": "Hanalei-Regular", + "category": "display", + "capHeight": 0, + "ascent": 2124, + "descent": -541, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 0, + "xWidthAvg": 934, + "subsets": { + "latin": { + "xWidthAvg": 934 + }, + "thai": { + "xWidthAvg": 410 + } + } + } + } + }, + "hanaleiFill": { + "familyName": "Hanalei Fill", + "fullName": "Hanalei Fill", + "postscriptName": "HanaleiFill-Regular", + "category": "display", + "capHeight": 0, + "ascent": 2124, + "descent": -541, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 0, + "xWidthAvg": 934, + "subsets": { + "latin": { + "xWidthAvg": 934 + }, + "thai": { + "xWidthAvg": 410 + } + }, + "variants": { + "regular": { + "familyName": "Hanalei Fill", + "fullName": "Hanalei Fill", + "postscriptName": "HanaleiFill-Regular", + "category": "display", + "capHeight": 0, + "ascent": 2124, + "descent": -541, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 0, + "xWidthAvg": 934, + "subsets": { + "latin": { + "xWidthAvg": 934 + }, + "thai": { + "xWidthAvg": 410 + } + } + } + } + }, + "handjet": { + "familyName": "Handjet", + "fullName": "Handjet Regular", + "postscriptName": "Handjet-Regular", + "category": "display", + "capHeight": 5280, + "ascent": 7200, + "descent": -1920, + "lineGap": 0, + "unitsPerEm": 8160, + "xHeight": 3840, + "xWidthAvg": 2704, + "subsets": { + "latin": { + "xWidthAvg": 2704 + }, + "thai": { + "xWidthAvg": 3360 + } + }, + "variants": { + "100": { + "familyName": "Handjet", + "fullName": "Handjet Thin", + "postscriptName": "Handjet-Thin", + "category": "display", + "capHeight": 5280, + "ascent": 7200, + "descent": -1920, + "lineGap": 0, + "unitsPerEm": 8160, + "xHeight": 3840, + "xWidthAvg": 2704, + "subsets": { + "latin": { + "xWidthAvg": 2704 + }, + "thai": { + "xWidthAvg": 3360 + } + } + }, + "200": { + "familyName": "Handjet", + "fullName": "Handjet ExtraLight", + "postscriptName": "Handjet-ExtraLight", + "category": "display", + "capHeight": 5280, + "ascent": 7200, + "descent": -1920, + "lineGap": 0, + "unitsPerEm": 8160, + "xHeight": 3840, + "xWidthAvg": 2704, + "subsets": { + "latin": { + "xWidthAvg": 2704 + }, + "thai": { + "xWidthAvg": 3360 + } + } + }, + "300": { + "familyName": "Handjet", + "fullName": "Handjet Light", + "postscriptName": "Handjet-Light", + "category": "display", + "capHeight": 5280, + "ascent": 7200, + "descent": -1920, + "lineGap": 0, + "unitsPerEm": 8160, + "xHeight": 3840, + "xWidthAvg": 2704, + "subsets": { + "latin": { + "xWidthAvg": 2704 + }, + "thai": { + "xWidthAvg": 3360 + } + } + }, + "500": { + "familyName": "Handjet", + "fullName": "Handjet Medium", + "postscriptName": "Handjet-Medium", + "category": "display", + "capHeight": 5280, + "ascent": 7200, + "descent": -1920, + "lineGap": 0, + "unitsPerEm": 8160, + "xHeight": 3840, + "xWidthAvg": 2704, + "subsets": { + "latin": { + "xWidthAvg": 2704 + }, + "thai": { + "xWidthAvg": 3360 + } + } + }, + "600": { + "familyName": "Handjet", + "fullName": "Handjet SemiBold", + "postscriptName": "Handjet-SemiBold", + "category": "display", + "capHeight": 5280, + "ascent": 7200, + "descent": -1920, + "lineGap": 0, + "unitsPerEm": 8160, + "xHeight": 3840, + "xWidthAvg": 2704, + "subsets": { + "latin": { + "xWidthAvg": 2704 + }, + "thai": { + "xWidthAvg": 3360 + } + } + }, + "700": { + "familyName": "Handjet", + "fullName": "Handjet Bold", + "postscriptName": "Handjet-Bold", + "category": "display", + "capHeight": 5280, + "ascent": 7200, + "descent": -1920, + "lineGap": 0, + "unitsPerEm": 8160, + "xHeight": 3840, + "xWidthAvg": 2704, + "subsets": { + "latin": { + "xWidthAvg": 2704 + }, + "thai": { + "xWidthAvg": 3360 + } + } + }, + "800": { + "familyName": "Handjet", + "fullName": "Handjet ExtraBold", + "postscriptName": "Handjet-ExtraBold", + "category": "display", + "capHeight": 5280, + "ascent": 7200, + "descent": -1920, + "lineGap": 0, + "unitsPerEm": 8160, + "xHeight": 3840, + "xWidthAvg": 2704, + "subsets": { + "latin": { + "xWidthAvg": 2704 + }, + "thai": { + "xWidthAvg": 3360 + } + } + }, + "900": { + "familyName": "Handjet", + "fullName": "Handjet Black", + "postscriptName": "Handjet-Black", + "category": "display", + "capHeight": 5280, + "ascent": 7200, + "descent": -1920, + "lineGap": 0, + "unitsPerEm": 8160, + "xHeight": 3840, + "xWidthAvg": 2704, + "subsets": { + "latin": { + "xWidthAvg": 2704 + }, + "thai": { + "xWidthAvg": 3360 + } + } + }, + "regular": { + "familyName": "Handjet", + "fullName": "Handjet Regular", + "postscriptName": "Handjet-Regular", + "category": "display", + "capHeight": 5280, + "ascent": 7200, + "descent": -1920, + "lineGap": 0, + "unitsPerEm": 8160, + "xHeight": 3840, + "xWidthAvg": 2704, + "subsets": { + "latin": { + "xWidthAvg": 2704 + }, + "thai": { + "xWidthAvg": 3360 + } + } + } + } + }, + "handlee": { + "familyName": "Handlee", + "fullName": "Handlee Regular", + "postscriptName": "Handlee-Regular", + "category": "handwriting", + "capHeight": 438, + "ascent": 934, + "descent": -401, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 331, + "xWidthAvg": 402, + "subsets": { + "latin": { + "xWidthAvg": 402 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Handlee", + "fullName": "Handlee Regular", + "postscriptName": "Handlee-Regular", + "category": "handwriting", + "capHeight": 438, + "ascent": 934, + "descent": -401, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 331, + "xWidthAvg": 402, + "subsets": { + "latin": { + "xWidthAvg": 402 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "hankenGrotesk": { + "familyName": "Hanken Grotesk", + "fullName": "Hanken Grotesk Regular", + "postscriptName": "HankenGrotesk-Regular", + "category": "sans-serif", + "capHeight": 697, + "ascent": 1000, + "descent": -303, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 509 + } + }, + "variants": { + "100": { + "familyName": "Hanken Grotesk", + "fullName": "Hanken Grotesk Thin", + "postscriptName": "HankenGrotesk-Thin", + "category": "sans-serif", + "capHeight": 697, + "ascent": 1000, + "descent": -303, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 513 + } + } + }, + "200": { + "familyName": "Hanken Grotesk", + "fullName": "Hanken Grotesk ExtraLight", + "postscriptName": "HankenGrotesk-ExtraLight", + "category": "sans-serif", + "capHeight": 697, + "ascent": 1000, + "descent": -303, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "300": { + "familyName": "Hanken Grotesk", + "fullName": "Hanken Grotesk Light", + "postscriptName": "HankenGrotesk-Light", + "category": "sans-serif", + "capHeight": 697, + "ascent": 1000, + "descent": -303, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 510 + } + } + }, + "500": { + "familyName": "Hanken Grotesk", + "fullName": "Hanken Grotesk Medium", + "postscriptName": "HankenGrotesk-Medium", + "category": "sans-serif", + "capHeight": 697, + "ascent": 1000, + "descent": -303, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 508 + } + } + }, + "600": { + "familyName": "Hanken Grotesk", + "fullName": "Hanken Grotesk SemiBold", + "postscriptName": "HankenGrotesk-SemiBold", + "category": "sans-serif", + "capHeight": 697, + "ascent": 1000, + "descent": -303, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 507 + } + } + }, + "700": { + "familyName": "Hanken Grotesk", + "fullName": "Hanken Grotesk Bold", + "postscriptName": "HankenGrotesk-Bold", + "category": "sans-serif", + "capHeight": 697, + "ascent": 1000, + "descent": -303, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 506 + } + } + }, + "800": { + "familyName": "Hanken Grotesk", + "fullName": "Hanken Grotesk ExtraBold", + "postscriptName": "HankenGrotesk-ExtraBold", + "category": "sans-serif", + "capHeight": 697, + "ascent": 1000, + "descent": -303, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 505 + } + } + }, + "900": { + "familyName": "Hanken Grotesk", + "fullName": "Hanken Grotesk Black", + "postscriptName": "HankenGrotesk-Black", + "category": "sans-serif", + "capHeight": 697, + "ascent": 1000, + "descent": -303, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 504 + } + } + }, + "regular": { + "familyName": "Hanken Grotesk", + "fullName": "Hanken Grotesk Regular", + "postscriptName": "HankenGrotesk-Regular", + "category": "sans-serif", + "capHeight": 697, + "ascent": 1000, + "descent": -303, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 509 + } + } + }, + "italic": { + "familyName": "Hanken Grotesk", + "fullName": "Hanken Grotesk Italic", + "postscriptName": "HankenGrotesk-Italic", + "category": "sans-serif", + "capHeight": 697, + "ascent": 1000, + "descent": -303, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 509 + } + } + }, + "900italic": { + "familyName": "Hanken Grotesk", + "fullName": "Hanken Grotesk Black Italic", + "postscriptName": "HankenGrotesk-BlackItalic", + "category": "sans-serif", + "capHeight": 697, + "ascent": 1000, + "descent": -303, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 504 + } + } + }, + "800italic": { + "familyName": "Hanken Grotesk", + "fullName": "Hanken Grotesk ExtraBold Italic", + "postscriptName": "HankenGrotesk-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 697, + "ascent": 1000, + "descent": -303, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 505 + } + } + }, + "700italic": { + "familyName": "Hanken Grotesk", + "fullName": "Hanken Grotesk Bold Italic", + "postscriptName": "HankenGrotesk-BoldItalic", + "category": "sans-serif", + "capHeight": 697, + "ascent": 1000, + "descent": -303, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 506 + } + } + }, + "600italic": { + "familyName": "Hanken Grotesk", + "fullName": "Hanken Grotesk SemiBold Italic", + "postscriptName": "HankenGrotesk-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 697, + "ascent": 1000, + "descent": -303, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 507 + } + } + }, + "500italic": { + "familyName": "Hanken Grotesk", + "fullName": "Hanken Grotesk Medium Italic", + "postscriptName": "HankenGrotesk-MediumItalic", + "category": "sans-serif", + "capHeight": 697, + "ascent": 1000, + "descent": -303, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 508 + } + } + }, + "300italic": { + "familyName": "Hanken Grotesk", + "fullName": "Hanken Grotesk Light Italic", + "postscriptName": "HankenGrotesk-LightItalic", + "category": "sans-serif", + "capHeight": 697, + "ascent": 1000, + "descent": -303, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 510 + } + } + }, + "200italic": { + "familyName": "Hanken Grotesk", + "fullName": "Hanken Grotesk ExtraLight Italic", + "postscriptName": "HankenGrotesk-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 697, + "ascent": 1000, + "descent": -303, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "100italic": { + "familyName": "Hanken Grotesk", + "fullName": "Hanken Grotesk Thin Italic", + "postscriptName": "HankenGrotesk-ThinItalic", + "category": "sans-serif", + "capHeight": 697, + "ascent": 1000, + "descent": -303, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 513 + } + } + } + } + }, + "hanuman": { + "familyName": "Hanuman", + "fullName": "Hanuman Regular", + "postscriptName": "Hanuman-Regular", + "category": "serif", + "capHeight": 1462, + "ascent": 2000, + "descent": -1000, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 1001, + "subsets": { + "latin": { + "xWidthAvg": 1001 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "100": { + "familyName": "Hanuman", + "fullName": "Hanuman Thin", + "postscriptName": "Hanuman-Thin", + "category": "serif", + "capHeight": 1462, + "ascent": 2000, + "descent": -1000, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 987, + "subsets": { + "latin": { + "xWidthAvg": 987 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "300": { + "familyName": "Hanuman", + "fullName": "Hanuman Light", + "postscriptName": "Hanuman-Light", + "category": "serif", + "capHeight": 1462, + "ascent": 2000, + "descent": -1000, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 994, + "subsets": { + "latin": { + "xWidthAvg": 994 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "700": { + "familyName": "Hanuman", + "fullName": "Hanuman Bold", + "postscriptName": "Hanuman-Bold", + "category": "serif", + "capHeight": 1462, + "ascent": 2000, + "descent": -1000, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 1014, + "subsets": { + "latin": { + "xWidthAvg": 1014 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "900": { + "familyName": "Hanuman", + "fullName": "Hanuman Black", + "postscriptName": "Hanuman-Black", + "category": "serif", + "capHeight": 1462, + "ascent": 2000, + "descent": -1000, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 1022, + "subsets": { + "latin": { + "xWidthAvg": 1022 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "regular": { + "familyName": "Hanuman", + "fullName": "Hanuman Regular", + "postscriptName": "Hanuman-Regular", + "category": "serif", + "capHeight": 1462, + "ascent": 2000, + "descent": -1000, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 1001, + "subsets": { + "latin": { + "xWidthAvg": 1001 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "happyMonkey": { + "familyName": "Happy Monkey", + "fullName": "Happy Monkey", + "postscriptName": "HappyMonkey-Regular", + "category": "display", + "capHeight": 699, + "ascent": 950, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 241 + } + }, + "variants": { + "regular": { + "familyName": "Happy Monkey", + "fullName": "Happy Monkey", + "postscriptName": "HappyMonkey-Regular", + "category": "display", + "capHeight": 699, + "ascent": 950, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 241 + } + } + } + } + }, + "harmattan": { + "familyName": "Harmattan", + "fullName": "Harmattan", + "postscriptName": "Harmattan-Regular", + "category": "sans-serif", + "capHeight": 1111, + "ascent": 2166, + "descent": -1323, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 778, + "xWidthAvg": 722, + "subsets": { + "latin": { + "xWidthAvg": 722 + }, + "thai": { + "xWidthAvg": 1690 + } + }, + "variants": { + "500": { + "familyName": "Harmattan", + "fullName": "Harmattan Medium", + "postscriptName": "Harmattan-Medium", + "category": "sans-serif", + "capHeight": 1111, + "ascent": 2166, + "descent": -1323, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 778, + "xWidthAvg": 734, + "subsets": { + "latin": { + "xWidthAvg": 734 + }, + "thai": { + "xWidthAvg": 1690 + } + } + }, + "600": { + "familyName": "Harmattan", + "fullName": "Harmattan SemiBold", + "postscriptName": "Harmattan-SemiBold", + "category": "sans-serif", + "capHeight": 1111, + "ascent": 2166, + "descent": -1323, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 778, + "xWidthAvg": 746, + "subsets": { + "latin": { + "xWidthAvg": 746 + }, + "thai": { + "xWidthAvg": 1690 + } + } + }, + "700": { + "familyName": "Harmattan", + "fullName": "Harmattan Bold", + "postscriptName": "Harmattan-Bold", + "category": "sans-serif", + "capHeight": 1111, + "ascent": 2166, + "descent": -1323, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 778, + "xWidthAvg": 758, + "subsets": { + "latin": { + "xWidthAvg": 758 + }, + "thai": { + "xWidthAvg": 1690 + } + } + }, + "regular": { + "familyName": "Harmattan", + "fullName": "Harmattan", + "postscriptName": "Harmattan-Regular", + "category": "sans-serif", + "capHeight": 1111, + "ascent": 2166, + "descent": -1323, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 778, + "xWidthAvg": 722, + "subsets": { + "latin": { + "xWidthAvg": 722 + }, + "thai": { + "xWidthAvg": 1690 + } + } + } + } + }, + "headlandOne": { + "familyName": "Headland One", + "fullName": "HeadlandOne-Regular", + "postscriptName": "HeadlandOne-Regular", + "category": "serif", + "capHeight": 1530, + "ascent": 2043, + "descent": -522, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1189, + "xWidthAvg": 1100, + "subsets": { + "latin": { + "xWidthAvg": 1100 + }, + "thai": { + "xWidthAvg": 2351 + } + }, + "variants": { + "regular": { + "familyName": "Headland One", + "fullName": "HeadlandOne-Regular", + "postscriptName": "HeadlandOne-Regular", + "category": "serif", + "capHeight": 1530, + "ascent": 2043, + "descent": -522, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1189, + "xWidthAvg": 1100, + "subsets": { + "latin": { + "xWidthAvg": 1100 + }, + "thai": { + "xWidthAvg": 2351 + } + } + } + } + }, + "hedvigLettersSans": { + "familyName": "Hedvig Letters Sans", + "fullName": "Hedvig Letters Sans Regular", + "postscriptName": "HedvigLettersSans-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1020, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 597 + } + }, + "variants": { + "regular": { + "familyName": "Hedvig Letters Sans", + "fullName": "Hedvig Letters Sans Regular", + "postscriptName": "HedvigLettersSans-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1020, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 597 + } + } + } + } + }, + "hedvigLettersSerif": { + "familyName": "Hedvig Letters Serif", + "fullName": "Hedvig Letters Serif 24pt Regular", + "postscriptName": "HedvigLettersSerif24pt-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 1020, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 587 + } + }, + "variants": { + "regular": { + "familyName": "Hedvig Letters Serif", + "fullName": "Hedvig Letters Serif 24pt Regular", + "postscriptName": "HedvigLettersSerif24pt-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 1020, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 587 + } + } + } + } + }, + "heebo": { + "familyName": "Heebo", + "fullName": "Heebo Regular", + "postscriptName": "Heebo-Regular", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 2146, + "descent": -862, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 912, + "subsets": { + "latin": { + "xWidthAvg": 912 + }, + "thai": { + "xWidthAvg": 1300 + } + }, + "variants": { + "100": { + "familyName": "Heebo", + "fullName": "Heebo Thin", + "postscriptName": "Heebo-Thin", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 2146, + "descent": -862, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 880, + "subsets": { + "latin": { + "xWidthAvg": 880 + }, + "thai": { + "xWidthAvg": 1215 + } + } + }, + "200": { + "familyName": "Heebo", + "fullName": "Heebo ExtraLight", + "postscriptName": "Heebo-ExtraLight", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 2146, + "descent": -862, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 891, + "subsets": { + "latin": { + "xWidthAvg": 891 + }, + "thai": { + "xWidthAvg": 1243 + } + } + }, + "300": { + "familyName": "Heebo", + "fullName": "Heebo Light", + "postscriptName": "Heebo-Light", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 2146, + "descent": -862, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 900, + "subsets": { + "latin": { + "xWidthAvg": 900 + }, + "thai": { + "xWidthAvg": 1269 + } + } + }, + "500": { + "familyName": "Heebo", + "fullName": "Heebo Medium", + "postscriptName": "Heebo-Medium", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 2146, + "descent": -862, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 917, + "subsets": { + "latin": { + "xWidthAvg": 917 + }, + "thai": { + "xWidthAvg": 1346 + } + } + }, + "600": { + "familyName": "Heebo", + "fullName": "Heebo SemiBold", + "postscriptName": "Heebo-SemiBold", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 2146, + "descent": -862, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 922, + "subsets": { + "latin": { + "xWidthAvg": 922 + }, + "thai": { + "xWidthAvg": 1401 + } + } + }, + "700": { + "familyName": "Heebo", + "fullName": "Heebo Bold", + "postscriptName": "Heebo-Bold", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 2146, + "descent": -862, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 927, + "subsets": { + "latin": { + "xWidthAvg": 927 + }, + "thai": { + "xWidthAvg": 1452 + } + } + }, + "800": { + "familyName": "Heebo", + "fullName": "Heebo ExtraBold", + "postscriptName": "Heebo-ExtraBold", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 2146, + "descent": -862, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 932, + "subsets": { + "latin": { + "xWidthAvg": 932 + }, + "thai": { + "xWidthAvg": 1502 + } + } + }, + "900": { + "familyName": "Heebo", + "fullName": "Heebo Black", + "postscriptName": "Heebo-Black", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 2146, + "descent": -862, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 937, + "subsets": { + "latin": { + "xWidthAvg": 937 + }, + "thai": { + "xWidthAvg": 1553 + } + } + }, + "regular": { + "familyName": "Heebo", + "fullName": "Heebo Regular", + "postscriptName": "Heebo-Regular", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 2146, + "descent": -862, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 912, + "subsets": { + "latin": { + "xWidthAvg": 912 + }, + "thai": { + "xWidthAvg": 1300 + } + } + } + } + }, + "helvetica": { + "familyName": "Helvetica", + "fullName": "Helvetica", + "postscriptName": "Helvetica", + "category": "sans-serif", + "capHeight": 1469, + "ascent": 1577, + "descent": -471, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1071, + "xWidthAvg": 913, + "subsets": { + "latin": { + "xWidthAvg": 913 + }, + "thai": { + "xWidthAvg": 1298 + } + }, + "variants": { + "300": { + "familyName": "Helvetica", + "fullName": "Helvetica Light", + "postscriptName": "Helvetica-Light", + "category": "sans-serif", + "capHeight": 718, + "ascent": 770, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 524, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Helvetica", + "fullName": "Helvetica Bold", + "postscriptName": "Helvetica-Bold", + "category": "sans-serif", + "capHeight": 1474, + "ascent": 1577, + "descent": -471, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1090, + "xWidthAvg": 983, + "subsets": { + "latin": { + "xWidthAvg": 983 + }, + "thai": { + "xWidthAvg": 1479 + } + } + }, + "regular": { + "familyName": "Helvetica", + "fullName": "Helvetica", + "postscriptName": "Helvetica", + "category": "sans-serif", + "capHeight": 1469, + "ascent": 1577, + "descent": -471, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1071, + "xWidthAvg": 913, + "subsets": { + "latin": { + "xWidthAvg": 913 + }, + "thai": { + "xWidthAvg": 1298 + } + } + }, + "italic": { + "familyName": "Helvetica", + "fullName": "Helvetica Oblique", + "postscriptName": "Helvetica-Oblique", + "category": "sans-serif", + "capHeight": 1469, + "ascent": 1577, + "descent": -471, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1071, + "xWidthAvg": 913, + "subsets": { + "latin": { + "xWidthAvg": 913 + }, + "thai": { + "xWidthAvg": 1298 + } + } + }, + "700italic": { + "familyName": "Helvetica", + "fullName": "Helvetica Bold Oblique", + "postscriptName": "Helvetica-BoldOblique", + "category": "sans-serif", + "capHeight": 1474, + "ascent": 1577, + "descent": -471, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1105, + "xWidthAvg": 983, + "subsets": { + "latin": { + "xWidthAvg": 983 + }, + "thai": { + "xWidthAvg": 1479 + } + } + }, + "300italic": { + "familyName": "Helvetica", + "fullName": "Helvetica Light Oblique", + "postscriptName": "Helvetica-LightOblique", + "category": "sans-serif", + "capHeight": 718, + "ascent": 770, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 524, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 648 + } + } + } + } + }, + "helveticaNeue": { + "familyName": "Helvetica Neue", + "fullName": "Helvetica Neue", + "postscriptName": "HelveticaNeue", + "category": "sans-serif", + "capHeight": 714, + "ascent": 952, + "descent": -213, + "lineGap": 28, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 364 + } + }, + "variants": { + "100": { + "familyName": "Helvetica Neue", + "fullName": "Helvetica Neue UltraLight", + "postscriptName": "HelveticaNeue-UltraLight", + "category": "sans-serif", + "ascent": 931, + "descent": -213, + "lineGap": 27, + "unitsPerEm": 1000, + "xWidthAvg": 400, + "subsets": { + "latin": { + "xWidthAvg": 400 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "200": { + "familyName": "Helvetica Neue", + "fullName": "Helvetica Neue Thin", + "postscriptName": "HelveticaNeue-Thin", + "category": "sans-serif", + "capHeight": 714, + "ascent": 967, + "descent": -213, + "lineGap": 29, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 418, + "subsets": { + "latin": { + "xWidthAvg": 418 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "300": { + "familyName": "Helvetica Neue", + "fullName": "Helvetica Neue Light", + "postscriptName": "HelveticaNeue-Light", + "category": "sans-serif", + "ascent": 967, + "descent": -213, + "lineGap": 29, + "unitsPerEm": 1000, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "500": { + "familyName": "Helvetica Neue", + "fullName": "Helvetica Neue Medium", + "postscriptName": "HelveticaNeue-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 975, + "descent": -217, + "lineGap": 29, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "700": { + "familyName": "Helvetica Neue", + "fullName": "Helvetica Neue Bold", + "postscriptName": "HelveticaNeue-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 975, + "descent": -217, + "lineGap": 29, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "regular": { + "familyName": "Helvetica Neue", + "fullName": "Helvetica Neue", + "postscriptName": "HelveticaNeue", + "category": "sans-serif", + "capHeight": 714, + "ascent": 952, + "descent": -213, + "lineGap": 28, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "italic": { + "familyName": "Helvetica Neue", + "fullName": "Helvetica Neue Italic", + "postscriptName": "HelveticaNeue-Italic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 957, + "descent": -213, + "lineGap": 28, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "700italic": { + "familyName": "Helvetica Neue", + "fullName": "Helvetica Neue Bold Italic", + "postscriptName": "HelveticaNeue-BoldItalic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 975, + "descent": -217, + "lineGap": 29, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "500italic": { + "familyName": "Helvetica Neue", + "fullName": "Helvetica Neue Medium Italic", + "postscriptName": "HelveticaNeue-MediumItalic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 975, + "descent": -217, + "lineGap": 29, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "300italic": { + "familyName": "Helvetica Neue", + "fullName": "Helvetica Neue Light Italic", + "postscriptName": "HelveticaNeue-LightItalic", + "category": "sans-serif", + "ascent": 951, + "descent": -213, + "lineGap": 28, + "unitsPerEm": 1000, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "200italic": { + "familyName": "Helvetica Neue", + "fullName": "Helvetica Neue Thin Italic", + "postscriptName": "HelveticaNeue-ThinItalic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 967, + "descent": -213, + "lineGap": 29, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 417, + "subsets": { + "latin": { + "xWidthAvg": 417 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "100italic": { + "familyName": "Helvetica Neue", + "fullName": "Helvetica Neue UltraLight Italic", + "postscriptName": "HelveticaNeue-UltraLightItalic", + "category": "sans-serif", + "ascent": 931, + "descent": -213, + "lineGap": 27, + "unitsPerEm": 1000, + "xWidthAvg": 400, + "subsets": { + "latin": { + "xWidthAvg": 400 + }, + "thai": { + "xWidthAvg": 364 + } + } + } + } + }, + "hennyPenny": { + "familyName": "Henny Penny", + "fullName": "Henny Penny", + "postscriptName": "HennyPenny-Regular", + "category": "display", + "capHeight": 1794, + "ascent": 2324, + "descent": -1305, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1264, + "xWidthAvg": 941, + "subsets": { + "latin": { + "xWidthAvg": 941 + }, + "thai": { + "xWidthAvg": 553 + } + }, + "variants": { + "regular": { + "familyName": "Henny Penny", + "fullName": "Henny Penny", + "postscriptName": "HennyPenny-Regular", + "category": "display", + "capHeight": 1794, + "ascent": 2324, + "descent": -1305, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1264, + "xWidthAvg": 941, + "subsets": { + "latin": { + "xWidthAvg": 941 + }, + "thai": { + "xWidthAvg": 553 + } + } + } + } + }, + "heptaSlab": { + "familyName": "Hepta Slab", + "fullName": "Hepta Slab Regular", + "postscriptName": "HeptaSlab-Regular", + "category": "serif", + "capHeight": 1504, + "ascent": 1976, + "descent": -526, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1052, + "xWidthAvg": 1102, + "subsets": { + "latin": { + "xWidthAvg": 1102 + }, + "thai": { + "xWidthAvg": 1714 + } + }, + "variants": { + "100": { + "familyName": "Hepta Slab", + "fullName": "Hepta Slab Thin", + "postscriptName": "HeptaSlab-Thin", + "category": "serif", + "capHeight": 1504, + "ascent": 1976, + "descent": -526, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1052, + "xWidthAvg": 1091, + "subsets": { + "latin": { + "xWidthAvg": 1091 + }, + "thai": { + "xWidthAvg": 1719 + } + } + }, + "200": { + "familyName": "Hepta Slab", + "fullName": "Hepta Slab ExtraLight", + "postscriptName": "HeptaSlab-ExtraLight", + "category": "serif", + "capHeight": 1504, + "ascent": 1976, + "descent": -526, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1052, + "xWidthAvg": 1096, + "subsets": { + "latin": { + "xWidthAvg": 1096 + }, + "thai": { + "xWidthAvg": 1714 + } + } + }, + "300": { + "familyName": "Hepta Slab", + "fullName": "Hepta Slab Light", + "postscriptName": "HeptaSlab-Light", + "category": "serif", + "capHeight": 1504, + "ascent": 1976, + "descent": -526, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1052, + "xWidthAvg": 1098, + "subsets": { + "latin": { + "xWidthAvg": 1098 + }, + "thai": { + "xWidthAvg": 1714 + } + } + }, + "500": { + "familyName": "Hepta Slab", + "fullName": "Hepta Slab Medium", + "postscriptName": "HeptaSlab-Medium", + "category": "serif", + "capHeight": 1504, + "ascent": 1976, + "descent": -526, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1052, + "xWidthAvg": 1105, + "subsets": { + "latin": { + "xWidthAvg": 1105 + }, + "thai": { + "xWidthAvg": 1696 + } + } + }, + "600": { + "familyName": "Hepta Slab", + "fullName": "Hepta Slab SemiBold", + "postscriptName": "HeptaSlab-SemiBold", + "category": "serif", + "capHeight": 1504, + "ascent": 1976, + "descent": -526, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1052, + "xWidthAvg": 1123, + "subsets": { + "latin": { + "xWidthAvg": 1123 + }, + "thai": { + "xWidthAvg": 1711 + } + } + }, + "700": { + "familyName": "Hepta Slab", + "fullName": "Hepta Slab Bold", + "postscriptName": "HeptaSlab-Bold", + "category": "serif", + "capHeight": 1504, + "ascent": 1976, + "descent": -526, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1052, + "xWidthAvg": 1145, + "subsets": { + "latin": { + "xWidthAvg": 1145 + }, + "thai": { + "xWidthAvg": 1714 + } + } + }, + "800": { + "familyName": "Hepta Slab", + "fullName": "Hepta Slab ExtraBold", + "postscriptName": "HeptaSlab-ExtraBold", + "category": "serif", + "capHeight": 1504, + "ascent": 1976, + "descent": -526, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1052, + "xWidthAvg": 1180, + "subsets": { + "latin": { + "xWidthAvg": 1180 + }, + "thai": { + "xWidthAvg": 1714 + } + } + }, + "900": { + "familyName": "Hepta Slab", + "fullName": "Hepta Slab Black", + "postscriptName": "HeptaSlab-Black", + "category": "serif", + "capHeight": 1504, + "ascent": 1976, + "descent": -526, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1052, + "xWidthAvg": 1218, + "subsets": { + "latin": { + "xWidthAvg": 1218 + }, + "thai": { + "xWidthAvg": 2054 + } + } + }, + "regular": { + "familyName": "Hepta Slab", + "fullName": "Hepta Slab Regular", + "postscriptName": "HeptaSlab-Regular", + "category": "serif", + "capHeight": 1504, + "ascent": 1976, + "descent": -526, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1052, + "xWidthAvg": 1102, + "subsets": { + "latin": { + "xWidthAvg": 1102 + }, + "thai": { + "xWidthAvg": 1714 + } + } + } + } + }, + "herrVonMuellerhoff": { + "familyName": "Herr Von Muellerhoff", + "fullName": "Herr Von Muellerhoff Regular", + "postscriptName": "HerrVonMuellerhoff-Regular", + "category": "handwriting", + "capHeight": 644, + "ascent": 925, + "descent": -497, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 269, + "xWidthAvg": 260, + "subsets": { + "latin": { + "xWidthAvg": 260 + }, + "thai": { + "xWidthAvg": 220 + } + }, + "variants": { + "regular": { + "familyName": "Herr Von Muellerhoff", + "fullName": "Herr Von Muellerhoff Regular", + "postscriptName": "HerrVonMuellerhoff-Regular", + "category": "handwriting", + "capHeight": 644, + "ascent": 925, + "descent": -497, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 269, + "xWidthAvg": 260, + "subsets": { + "latin": { + "xWidthAvg": 260 + }, + "thai": { + "xWidthAvg": 220 + } + } + } + } + }, + "hiMelody": { + "familyName": "Hi Melody", + "fullName": "Hi Melody Regular", + "postscriptName": "HiMelody-Regular", + "category": "handwriting", + "capHeight": 512, + "ascent": 679, + "descent": -345, + "lineGap": 256, + "unitsPerEm": 1024, + "xHeight": 321, + "xWidthAvg": 432, + "subsets": { + "latin": { + "xWidthAvg": 432 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Hi Melody", + "fullName": "Hi Melody Regular", + "postscriptName": "HiMelody-Regular", + "category": "handwriting", + "capHeight": 512, + "ascent": 679, + "descent": -345, + "lineGap": 256, + "unitsPerEm": 1024, + "xHeight": 321, + "xWidthAvg": 432, + "subsets": { + "latin": { + "xWidthAvg": 432 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "hinaMincho": { + "familyName": "Hina Mincho", + "fullName": "Hina Mincho Regular", + "postscriptName": "HinaMincho-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 380, + "xWidthAvg": 375, + "subsets": { + "latin": { + "xWidthAvg": 375 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Hina Mincho", + "fullName": "Hina Mincho Regular", + "postscriptName": "HinaMincho-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 380, + "xWidthAvg": 375, + "subsets": { + "latin": { + "xWidthAvg": 375 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "hind": { + "familyName": "Hind", + "fullName": "Hind Regular", + "postscriptName": "Hind-Regular", + "category": "sans-serif", + "capHeight": 679, + "ascent": 1055, + "descent": -546, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 751 + } + }, + "variants": { + "300": { + "familyName": "Hind", + "fullName": "Hind Light", + "postscriptName": "Hind-Light", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1055, + "descent": -546, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 750 + } + } + }, + "500": { + "familyName": "Hind", + "fullName": "Hind Medium", + "postscriptName": "Hind-Medium", + "category": "sans-serif", + "capHeight": 679, + "ascent": 1055, + "descent": -546, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 753 + } + } + }, + "600": { + "familyName": "Hind", + "fullName": "Hind SemiBold", + "postscriptName": "Hind-SemiBold", + "category": "sans-serif", + "capHeight": 679, + "ascent": 1055, + "descent": -546, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 507, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 754 + } + } + }, + "700": { + "familyName": "Hind", + "fullName": "Hind Bold", + "postscriptName": "Hind-Bold", + "category": "sans-serif", + "capHeight": 678, + "ascent": 1055, + "descent": -546, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 507, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 756 + } + } + }, + "regular": { + "familyName": "Hind", + "fullName": "Hind Regular", + "postscriptName": "Hind-Regular", + "category": "sans-serif", + "capHeight": 679, + "ascent": 1055, + "descent": -546, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 751 + } + } + } + } + }, + "hindGuntur": { + "familyName": "Hind Guntur", + "fullName": "Hind Guntur Regular", + "postscriptName": "HindGuntur-Regular", + "category": "sans-serif", + "capHeight": 679, + "ascent": 1115, + "descent": -773, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 751 + } + }, + "variants": { + "300": { + "familyName": "Hind Guntur", + "fullName": "Hind Guntur Light", + "postscriptName": "HindGuntur-Light", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1115, + "descent": -773, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 750 + } + } + }, + "500": { + "familyName": "Hind Guntur", + "fullName": "Hind Guntur Medium", + "postscriptName": "HindGuntur-Medium", + "category": "sans-serif", + "capHeight": 679, + "ascent": 1115, + "descent": -773, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 753 + } + } + }, + "600": { + "familyName": "Hind Guntur", + "fullName": "Hind Guntur SemiBold", + "postscriptName": "HindGuntur-SemiBold", + "category": "sans-serif", + "capHeight": 679, + "ascent": 1115, + "descent": -773, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 507, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 754 + } + } + }, + "700": { + "familyName": "Hind Guntur", + "fullName": "Hind Guntur Bold", + "postscriptName": "HindGuntur-Bold", + "category": "sans-serif", + "capHeight": 678, + "ascent": 1115, + "descent": -773, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 507, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 756 + } + } + }, + "regular": { + "familyName": "Hind Guntur", + "fullName": "Hind Guntur Regular", + "postscriptName": "HindGuntur-Regular", + "category": "sans-serif", + "capHeight": 679, + "ascent": 1115, + "descent": -773, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 751 + } + } + } + } + }, + "hindMadurai": { + "familyName": "Hind Madurai", + "fullName": "Hind Madurai Regular", + "postscriptName": "HindMadurai-Regular", + "category": "sans-serif", + "capHeight": 679, + "ascent": 982, + "descent": -398, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 751 + } + }, + "variants": { + "300": { + "familyName": "Hind Madurai", + "fullName": "Hind Madurai Light", + "postscriptName": "HindMadurai-Light", + "category": "sans-serif", + "capHeight": 680, + "ascent": 982, + "descent": -398, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 750 + } + } + }, + "500": { + "familyName": "Hind Madurai", + "fullName": "Hind Madurai Medium", + "postscriptName": "HindMadurai-Medium", + "category": "sans-serif", + "capHeight": 679, + "ascent": 982, + "descent": -398, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 753 + } + } + }, + "600": { + "familyName": "Hind Madurai", + "fullName": "Hind Madurai SemiBold", + "postscriptName": "HindMadurai-SemiBold", + "category": "sans-serif", + "capHeight": 679, + "ascent": 982, + "descent": -398, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 507, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 754 + } + } + }, + "700": { + "familyName": "Hind Madurai", + "fullName": "Hind Madurai Bold", + "postscriptName": "HindMadurai-Bold", + "category": "sans-serif", + "capHeight": 678, + "ascent": 982, + "descent": -398, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 507, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 756 + } + } + }, + "regular": { + "familyName": "Hind Madurai", + "fullName": "Hind Madurai Regular", + "postscriptName": "HindMadurai-Regular", + "category": "sans-serif", + "capHeight": 679, + "ascent": 982, + "descent": -398, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 751 + } + } + } + } + }, + "hindSiliguri": { + "familyName": "Hind Siliguri", + "fullName": "Hind Siliguri Regular", + "postscriptName": "HindSiliguri-Regular", + "category": "sans-serif", + "capHeight": 679, + "ascent": 1116, + "descent": -501, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 751 + } + }, + "variants": { + "300": { + "familyName": "Hind Siliguri", + "fullName": "Hind Siliguri Light", + "postscriptName": "HindSiliguri-Light", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1116, + "descent": -501, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 750 + } + } + }, + "500": { + "familyName": "Hind Siliguri", + "fullName": "Hind Siliguri Medium", + "postscriptName": "HindSiliguri-Medium", + "category": "sans-serif", + "capHeight": 679, + "ascent": 1116, + "descent": -501, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 753 + } + } + }, + "600": { + "familyName": "Hind Siliguri", + "fullName": "Hind Siliguri SemiBold", + "postscriptName": "HindSiliguri-SemiBold", + "category": "sans-serif", + "capHeight": 679, + "ascent": 1116, + "descent": -501, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 507, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 754 + } + } + }, + "700": { + "familyName": "Hind Siliguri", + "fullName": "Hind Siliguri Bold", + "postscriptName": "HindSiliguri-Bold", + "category": "sans-serif", + "capHeight": 678, + "ascent": 1116, + "descent": -501, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 507, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 756 + } + } + }, + "regular": { + "familyName": "Hind Siliguri", + "fullName": "Hind Siliguri Regular", + "postscriptName": "HindSiliguri-Regular", + "category": "sans-serif", + "capHeight": 679, + "ascent": 1116, + "descent": -501, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 751 + } + } + } + } + }, + "hindVadodara": { + "familyName": "Hind Vadodara", + "fullName": "Hind Vadodara Regular", + "postscriptName": "HindVadodara-Regular", + "category": "sans-serif", + "capHeight": 679, + "ascent": 1125, + "descent": -373, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 751 + } + }, + "variants": { + "300": { + "familyName": "Hind Vadodara", + "fullName": "Hind Vadodara Light", + "postscriptName": "HindVadodara-Light", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1125, + "descent": -373, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 750 + } + } + }, + "500": { + "familyName": "Hind Vadodara", + "fullName": "Hind Vadodara Medium", + "postscriptName": "HindVadodara-Medium", + "category": "sans-serif", + "capHeight": 679, + "ascent": 1125, + "descent": -373, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 753 + } + } + }, + "600": { + "familyName": "Hind Vadodara", + "fullName": "Hind Vadodara SemiBold", + "postscriptName": "HindVadodara-SemiBold", + "category": "sans-serif", + "capHeight": 679, + "ascent": 1125, + "descent": -373, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 507, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 754 + } + } + }, + "700": { + "familyName": "Hind Vadodara", + "fullName": "Hind Vadodara Bold", + "postscriptName": "HindVadodara-Bold", + "category": "sans-serif", + "capHeight": 678, + "ascent": 1125, + "descent": -373, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 507, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 756 + } + } + }, + "regular": { + "familyName": "Hind Vadodara", + "fullName": "Hind Vadodara Regular", + "postscriptName": "HindVadodara-Regular", + "category": "sans-serif", + "capHeight": 679, + "ascent": 1125, + "descent": -373, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 751 + } + } + } + } + }, + "holtwoodOneSC": { + "familyName": "Holtwood One SC", + "fullName": "Holtwood One SC Regular", + "postscriptName": "HoltwoodOneSC-Regular", + "category": "serif", + "capHeight": 1536, + "ascent": 2457, + "descent": -876, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1408, + "xWidthAvg": 1426, + "subsets": { + "latin": { + "xWidthAvg": 1426 + }, + "thai": { + "xWidthAvg": 709 + } + }, + "variants": { + "regular": { + "familyName": "Holtwood One SC", + "fullName": "Holtwood One SC Regular", + "postscriptName": "HoltwoodOneSC-Regular", + "category": "serif", + "capHeight": 1536, + "ascent": 2457, + "descent": -876, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1408, + "xWidthAvg": 1426, + "subsets": { + "latin": { + "xWidthAvg": 1426 + }, + "thai": { + "xWidthAvg": 709 + } + } + } + } + }, + "homemadeApple": { + "familyName": "Homemade Apple", + "fullName": "Homemade Apple Regular", + "postscriptName": "HomemadeApple-Regular", + "category": "handwriting", + "capHeight": 1022, + "ascent": 1327, + "descent": -866, + "lineGap": 18, + "unitsPerEm": 1024, + "xHeight": 600, + "xWidthAvg": 567, + "subsets": { + "latin": { + "xWidthAvg": 567 + }, + "thai": { + "xWidthAvg": 358 + } + }, + "variants": { + "regular": { + "familyName": "Homemade Apple", + "fullName": "Homemade Apple Regular", + "postscriptName": "HomemadeApple-Regular", + "category": "handwriting", + "capHeight": 1022, + "ascent": 1327, + "descent": -866, + "lineGap": 18, + "unitsPerEm": 1024, + "xHeight": 600, + "xWidthAvg": 567, + "subsets": { + "latin": { + "xWidthAvg": 567 + }, + "thai": { + "xWidthAvg": 358 + } + } + } + } + }, + "homenaje": { + "familyName": "Homenaje", + "fullName": "Homenaje Regular", + "postscriptName": "Homenaje-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 892, + "descent": -204, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 311, + "subsets": { + "latin": { + "xWidthAvg": 311 + }, + "thai": { + "xWidthAvg": 230 + } + }, + "variants": { + "regular": { + "familyName": "Homenaje", + "fullName": "Homenaje Regular", + "postscriptName": "Homenaje-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 892, + "descent": -204, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 311, + "subsets": { + "latin": { + "xWidthAvg": 311 + }, + "thai": { + "xWidthAvg": 230 + } + } + } + } + }, + "honk": { + "familyName": "Honk", + "fullName": "Honk Regular", + "postscriptName": "Honk-Regular", + "category": "display", + "capHeight": 1200, + "ascent": 1800, + "descent": -640, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 970, + "xWidthAvg": 876, + "subsets": { + "latin": { + "xWidthAvg": 876 + }, + "thai": { + "xWidthAvg": 870 + } + }, + "variants": { + "regular": { + "familyName": "Honk", + "fullName": "Honk Regular", + "postscriptName": "Honk-Regular", + "category": "display", + "capHeight": 1200, + "ascent": 1800, + "descent": -640, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 970, + "xWidthAvg": 876, + "subsets": { + "latin": { + "xWidthAvg": 876 + }, + "thai": { + "xWidthAvg": 870 + } + } + } + } + }, + "hostGrotesk": { + "familyName": "Host Grotesk", + "fullName": "Host Grotesk Regular", + "postscriptName": "HostGrotesk-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1015, + "descent": -315, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 640 + } + }, + "variants": { + "300": { + "familyName": "Host Grotesk", + "fullName": "Host Grotesk Light", + "postscriptName": "HostGrotesk-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1015, + "descent": -315, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "500": { + "familyName": "Host Grotesk", + "fullName": "Host Grotesk Medium", + "postscriptName": "HostGrotesk-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1015, + "descent": -315, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "600": { + "familyName": "Host Grotesk", + "fullName": "Host Grotesk SemiBold", + "postscriptName": "HostGrotesk-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1015, + "descent": -315, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "700": { + "familyName": "Host Grotesk", + "fullName": "Host Grotesk Bold", + "postscriptName": "HostGrotesk-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1015, + "descent": -315, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "800": { + "familyName": "Host Grotesk", + "fullName": "Host Grotesk ExtraBold", + "postscriptName": "HostGrotesk-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1015, + "descent": -315, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "regular": { + "familyName": "Host Grotesk", + "fullName": "Host Grotesk Regular", + "postscriptName": "HostGrotesk-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1015, + "descent": -315, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "italic": { + "familyName": "Host Grotesk", + "fullName": "Host Grotesk Italic", + "postscriptName": "HostGrotesk-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1015, + "descent": -315, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "800italic": { + "familyName": "Host Grotesk", + "fullName": "Host Grotesk ExtraBold Italic", + "postscriptName": "HostGrotesk-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1015, + "descent": -315, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "700italic": { + "familyName": "Host Grotesk", + "fullName": "Host Grotesk Bold Italic", + "postscriptName": "HostGrotesk-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1015, + "descent": -315, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "600italic": { + "familyName": "Host Grotesk", + "fullName": "Host Grotesk SemiBold Italic", + "postscriptName": "HostGrotesk-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1015, + "descent": -315, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "500italic": { + "familyName": "Host Grotesk", + "fullName": "Host Grotesk Medium Italic", + "postscriptName": "HostGrotesk-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1015, + "descent": -315, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "300italic": { + "familyName": "Host Grotesk", + "fullName": "Host Grotesk Light Italic", + "postscriptName": "HostGrotesk-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1015, + "descent": -315, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 640 + } + } + } + } + }, + "hubballi": { + "familyName": "Hubballi", + "fullName": "Hubballi Regular", + "postscriptName": "Hubballi-Regular", + "category": "sans-serif", + "capHeight": 535, + "ascent": 765, + "descent": -191, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 392, + "xWidthAvg": 413, + "subsets": { + "latin": { + "xWidthAvg": 413 + }, + "thai": { + "xWidthAvg": 756 + } + }, + "variants": { + "regular": { + "familyName": "Hubballi", + "fullName": "Hubballi Regular", + "postscriptName": "Hubballi-Regular", + "category": "sans-serif", + "capHeight": 535, + "ascent": 765, + "descent": -191, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 392, + "xWidthAvg": 413, + "subsets": { + "latin": { + "xWidthAvg": 413 + }, + "thai": { + "xWidthAvg": 756 + } + } + } + } + }, + "hubotSans": { + "familyName": "Hubot Sans", + "fullName": "Hubot Sans Regular", + "postscriptName": "HubotSans-Regular", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 865 + } + }, + "variants": { + "200": { + "familyName": "Hubot Sans", + "fullName": "Hubot Sans ExtraLight", + "postscriptName": "HubotSans-ExtraLight", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 865 + } + } + }, + "300": { + "familyName": "Hubot Sans", + "fullName": "Hubot Sans Light", + "postscriptName": "HubotSans-Light", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 865 + } + } + }, + "500": { + "familyName": "Hubot Sans", + "fullName": "Hubot Sans Medium", + "postscriptName": "HubotSans-Medium", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 529, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 865 + } + } + }, + "600": { + "familyName": "Hubot Sans", + "fullName": "Hubot Sans SemiBold", + "postscriptName": "HubotSans-SemiBold", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 533, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 865 + } + } + }, + "700": { + "familyName": "Hubot Sans", + "fullName": "Hubot Sans Bold", + "postscriptName": "HubotSans-Bold", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 537, + "xWidthAvg": 499, + "subsets": { + "latin": { + "xWidthAvg": 499 + }, + "thai": { + "xWidthAvg": 865 + } + } + }, + "800": { + "familyName": "Hubot Sans", + "fullName": "Hubot Sans ExtraBold", + "postscriptName": "HubotSans-ExtraBold", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 541, + "xWidthAvg": 514, + "subsets": { + "latin": { + "xWidthAvg": 514 + }, + "thai": { + "xWidthAvg": 865 + } + } + }, + "900": { + "familyName": "Hubot Sans", + "fullName": "Hubot Sans Black", + "postscriptName": "HubotSans-Black", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 545, + "xWidthAvg": 530, + "subsets": { + "latin": { + "xWidthAvg": 530 + }, + "thai": { + "xWidthAvg": 865 + } + } + }, + "regular": { + "familyName": "Hubot Sans", + "fullName": "Hubot Sans Regular", + "postscriptName": "HubotSans-Regular", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 865 + } + } + }, + "italic": { + "familyName": "Hubot Sans", + "fullName": "Hubot Sans Italic", + "postscriptName": "HubotSans-Italic", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 524, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 881 + } + } + }, + "900italic": { + "familyName": "Hubot Sans", + "fullName": "Hubot Sans Black Italic", + "postscriptName": "HubotSans-BlackItalic", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 545, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 882 + } + } + }, + "800italic": { + "familyName": "Hubot Sans", + "fullName": "Hubot Sans ExtraBold Italic", + "postscriptName": "HubotSans-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 541, + "xWidthAvg": 517, + "subsets": { + "latin": { + "xWidthAvg": 517 + }, + "thai": { + "xWidthAvg": 882 + } + } + }, + "700italic": { + "familyName": "Hubot Sans", + "fullName": "Hubot Sans Bold Italic", + "postscriptName": "HubotSans-BoldItalic", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 537, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 882 + } + } + }, + "600italic": { + "familyName": "Hubot Sans", + "fullName": "Hubot Sans SemiBold Italic", + "postscriptName": "HubotSans-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 533, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 882 + } + } + }, + "500italic": { + "familyName": "Hubot Sans", + "fullName": "Hubot Sans Medium Italic", + "postscriptName": "HubotSans-MediumItalic", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 528, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 881 + } + } + }, + "300italic": { + "familyName": "Hubot Sans", + "fullName": "Hubot Sans Light Italic", + "postscriptName": "HubotSans-LightItalic", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 882 + } + } + }, + "200italic": { + "familyName": "Hubot Sans", + "fullName": "Hubot Sans ExtraLight Italic", + "postscriptName": "HubotSans-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 882 + } + } + } + } + }, + "hurricane": { + "familyName": "Hurricane", + "fullName": "Hurricane Regular", + "postscriptName": "Hurricane-Regular", + "category": "handwriting", + "capHeight": 610, + "ascent": 950, + "descent": -430, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 326, + "xWidthAvg": 287, + "subsets": { + "latin": { + "xWidthAvg": 287 + }, + "thai": { + "xWidthAvg": 484 + } + }, + "variants": { + "regular": { + "familyName": "Hurricane", + "fullName": "Hurricane Regular", + "postscriptName": "Hurricane-Regular", + "category": "handwriting", + "capHeight": 610, + "ascent": 950, + "descent": -430, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 326, + "xWidthAvg": 287, + "subsets": { + "latin": { + "xWidthAvg": 287 + }, + "thai": { + "xWidthAvg": 484 + } + } + } + } + }, + "iBMPlexMono": { + "familyName": "IBM Plex Mono", + "fullName": "IBM Plex Mono Regular", + "postscriptName": "IBMPlexMono-Regular", + "category": "monospace", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "IBM Plex Mono", + "fullName": "IBM Plex Mono Thin", + "postscriptName": "IBMPlexMono-Thin", + "category": "monospace", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "IBM Plex Mono", + "fullName": "IBM Plex Mono ExtraLight", + "postscriptName": "IBMPlexMono-ExtraLight", + "category": "monospace", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "IBM Plex Mono", + "fullName": "IBM Plex Mono Light", + "postscriptName": "IBMPlexMono-Light", + "category": "monospace", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "IBM Plex Mono", + "fullName": "IBM Plex Mono Medium", + "postscriptName": "IBMPlexMono-Medium", + "category": "monospace", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "IBM Plex Mono", + "fullName": "IBM Plex Mono SemiBold", + "postscriptName": "IBMPlexMono-SemiBold", + "category": "monospace", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "IBM Plex Mono", + "fullName": "IBM Plex Mono Bold", + "postscriptName": "IBMPlexMono-Bold", + "category": "monospace", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "IBM Plex Mono", + "fullName": "IBM Plex Mono Regular", + "postscriptName": "IBMPlexMono-Regular", + "category": "monospace", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "italic": { + "familyName": "IBM Plex Mono", + "fullName": "IBM Plex Mono Italic", + "postscriptName": "IBMPlexMono-Italic", + "category": "monospace", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700italic": { + "familyName": "IBM Plex Mono", + "fullName": "IBM Plex Mono Bold Italic", + "postscriptName": "IBMPlexMono-BoldItalic", + "category": "monospace", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600italic": { + "familyName": "IBM Plex Mono", + "fullName": "IBM Plex Mono SemiBold Italic", + "postscriptName": "IBMPlexMono-SemiBoldItalic", + "category": "monospace", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500italic": { + "familyName": "IBM Plex Mono", + "fullName": "IBM Plex Mono Medium Italic", + "postscriptName": "IBMPlexMono-MediumItalic", + "category": "monospace", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300italic": { + "familyName": "IBM Plex Mono", + "fullName": "IBM Plex Mono Light Italic", + "postscriptName": "IBMPlexMono-LightItalic", + "category": "monospace", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200italic": { + "familyName": "IBM Plex Mono", + "fullName": "IBM Plex Mono ExtraLight Italic", + "postscriptName": "IBMPlexMono-ExtraLightItalic", + "category": "monospace", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "100italic": { + "familyName": "IBM Plex Mono", + "fullName": "IBM Plex Mono Thin Italic", + "postscriptName": "IBMPlexMono-ThinItalic", + "category": "monospace", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "iBMPlexSans": { + "familyName": "IBM Plex Sans", + "fullName": "IBM Plex Sans Regular", + "postscriptName": "IBMPlexSans-Regular", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 472 + } + }, + "variants": { + "100": { + "familyName": "IBM Plex Sans", + "fullName": "IBM Plex Sans Thin", + "postscriptName": "IBMPlexSans-Thin", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "200": { + "familyName": "IBM Plex Sans", + "fullName": "IBM Plex Sans ExtraLight", + "postscriptName": "IBMPlexSans-ExtraLight", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "300": { + "familyName": "IBM Plex Sans", + "fullName": "IBM Plex Sans Light", + "postscriptName": "IBMPlexSans-Light", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "500": { + "familyName": "IBM Plex Sans", + "fullName": "IBM Plex Sans Medium", + "postscriptName": "IBMPlexSans-Medium", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "600": { + "familyName": "IBM Plex Sans", + "fullName": "IBM Plex Sans SemiBold", + "postscriptName": "IBMPlexSans-SemiBold", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "700": { + "familyName": "IBM Plex Sans", + "fullName": "IBM Plex Sans Bold", + "postscriptName": "IBMPlexSans-Bold", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "regular": { + "familyName": "IBM Plex Sans", + "fullName": "IBM Plex Sans Regular", + "postscriptName": "IBMPlexSans-Regular", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "italic": { + "familyName": "IBM Plex Sans", + "fullName": "IBM Plex Sans Italic", + "postscriptName": "IBMPlexSans-Italic", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "700italic": { + "familyName": "IBM Plex Sans", + "fullName": "IBM Plex Sans Bold Italic", + "postscriptName": "IBMPlexSans-BoldItalic", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "600italic": { + "familyName": "IBM Plex Sans", + "fullName": "IBM Plex Sans SemiBold Italic", + "postscriptName": "IBMPlexSans-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "500italic": { + "familyName": "IBM Plex Sans", + "fullName": "IBM Plex Sans Medium Italic", + "postscriptName": "IBMPlexSans-MediumItalic", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "300italic": { + "familyName": "IBM Plex Sans", + "fullName": "IBM Plex Sans Light Italic", + "postscriptName": "IBMPlexSans-LightItalic", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "200italic": { + "familyName": "IBM Plex Sans", + "fullName": "IBM Plex Sans ExtraLight Italic", + "postscriptName": "IBMPlexSans-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "100italic": { + "familyName": "IBM Plex Sans", + "fullName": "IBM Plex Sans Thin Italic", + "postscriptName": "IBMPlexSans-ThinItalic", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 472 + } + } + } + } + }, + "iBMPlexSansArabic": { + "familyName": "IBM Plex Sans Arabic", + "fullName": "IBM Plex Sans Arabic Regular", + "postscriptName": "IBMPlexSansArabic-Regular", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1085, + "descent": -415, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 472 + } + }, + "variants": { + "100": { + "familyName": "IBM Plex Sans Arabic", + "fullName": "IBM Plex Sans Arabic Thin", + "postscriptName": "IBMPlexSansArabic-Thin", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1085, + "descent": -415, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "200": { + "familyName": "IBM Plex Sans Arabic", + "fullName": "IBM Plex Sans Arabic ExtraLight", + "postscriptName": "IBMPlexSansArabic-ExtraLight", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1085, + "descent": -415, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "300": { + "familyName": "IBM Plex Sans Arabic", + "fullName": "IBM Plex Sans Arabic Light", + "postscriptName": "IBMPlexSansArabic-Light", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1085, + "descent": -415, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "500": { + "familyName": "IBM Plex Sans Arabic", + "fullName": "IBM Plex Sans Arabic Medium", + "postscriptName": "IBMPlexSansArabic-Medium", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1085, + "descent": -415, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "600": { + "familyName": "IBM Plex Sans Arabic", + "fullName": "IBM Plex Sans Arabic SemiBold", + "postscriptName": "IBMPlexSansArabic-SemiBold", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1085, + "descent": -415, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "700": { + "familyName": "IBM Plex Sans Arabic", + "fullName": "IBM Plex Sans Arabic Bold", + "postscriptName": "IBMPlexSansArabic-Bold", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1085, + "descent": -415, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "regular": { + "familyName": "IBM Plex Sans Arabic", + "fullName": "IBM Plex Sans Arabic Regular", + "postscriptName": "IBMPlexSansArabic-Regular", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1085, + "descent": -415, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 472 + } + } + } + } + }, + "iBMPlexSansCondensed": { + "familyName": "IBM Plex Sans Condensed", + "fullName": "IBM Plex Sans Condensed Regular", + "postscriptName": "IBMPlexSansCond-Regular", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 407, + "subsets": { + "latin": { + "xWidthAvg": 407 + }, + "thai": { + "xWidthAvg": 424 + } + }, + "variants": { + "100": { + "familyName": "IBM Plex Sans Condensed", + "fullName": "IBM Plex Sans Condensed Thin", + "postscriptName": "IBMPlexSansCond-Thin", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 391, + "subsets": { + "latin": { + "xWidthAvg": 391 + }, + "thai": { + "xWidthAvg": 424 + } + } + }, + "200": { + "familyName": "IBM Plex Sans Condensed", + "fullName": "IBM Plex Sans Condensed ExtraLight", + "postscriptName": "IBMPlexSansCond-ExtraLight", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 395, + "subsets": { + "latin": { + "xWidthAvg": 395 + }, + "thai": { + "xWidthAvg": 424 + } + } + }, + "300": { + "familyName": "IBM Plex Sans Condensed", + "fullName": "IBM Plex Sans Condensed Light", + "postscriptName": "IBMPlexSansCond-Light", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 424 + } + } + }, + "500": { + "familyName": "IBM Plex Sans Condensed", + "fullName": "IBM Plex Sans Condensed Medium", + "postscriptName": "IBMPlexSansCond-Medium", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 416, + "subsets": { + "latin": { + "xWidthAvg": 416 + }, + "thai": { + "xWidthAvg": 424 + } + } + }, + "600": { + "familyName": "IBM Plex Sans Condensed", + "fullName": "IBM Plex Sans Condensed SemiBold", + "postscriptName": "IBMPlexSansCond-SemiBold", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 424 + } + } + }, + "700": { + "familyName": "IBM Plex Sans Condensed", + "fullName": "IBM Plex Sans Condensed Bold", + "postscriptName": "IBMPlexSansCond-Bold", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 424 + } + } + }, + "regular": { + "familyName": "IBM Plex Sans Condensed", + "fullName": "IBM Plex Sans Condensed Regular", + "postscriptName": "IBMPlexSansCond-Regular", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 407, + "subsets": { + "latin": { + "xWidthAvg": 407 + }, + "thai": { + "xWidthAvg": 424 + } + } + }, + "italic": { + "familyName": "IBM Plex Sans Condensed", + "fullName": "IBM Plex Sans Condensed Italic", + "postscriptName": "IBMPlexSansCond-Italic", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 403, + "subsets": { + "latin": { + "xWidthAvg": 403 + }, + "thai": { + "xWidthAvg": 424 + } + } + }, + "700italic": { + "familyName": "IBM Plex Sans Condensed", + "fullName": "IBM Plex Sans Condensed Bold Italic", + "postscriptName": "IBMPlexSansCond-BoldItalic", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 420, + "subsets": { + "latin": { + "xWidthAvg": 420 + }, + "thai": { + "xWidthAvg": 424 + } + } + }, + "600italic": { + "familyName": "IBM Plex Sans Condensed", + "fullName": "IBM Plex Sans Condensed SemiBold Italic", + "postscriptName": "IBMPlexSansCond-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 415, + "subsets": { + "latin": { + "xWidthAvg": 415 + }, + "thai": { + "xWidthAvg": 424 + } + } + }, + "500italic": { + "familyName": "IBM Plex Sans Condensed", + "fullName": "IBM Plex Sans Condensed Medium Italic", + "postscriptName": "IBMPlexSansCond-MediumItalic", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 424 + } + } + }, + "300italic": { + "familyName": "IBM Plex Sans Condensed", + "fullName": "IBM Plex Sans Condensed Light Italic", + "postscriptName": "IBMPlexSansCond-LightItalic", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 396, + "subsets": { + "latin": { + "xWidthAvg": 396 + }, + "thai": { + "xWidthAvg": 424 + } + } + }, + "200italic": { + "familyName": "IBM Plex Sans Condensed", + "fullName": "IBM Plex Sans Condensed ExtraLight Italic", + "postscriptName": "IBMPlexSansCond-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 392, + "subsets": { + "latin": { + "xWidthAvg": 392 + }, + "thai": { + "xWidthAvg": 424 + } + } + }, + "100italic": { + "familyName": "IBM Plex Sans Condensed", + "fullName": "IBM Plex Sans Condensed Thin Italic", + "postscriptName": "IBMPlexSansCond-ThinItalic", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 388, + "subsets": { + "latin": { + "xWidthAvg": 388 + }, + "thai": { + "xWidthAvg": 424 + } + } + } + } + }, + "iBMPlexSansDevanagari": { + "familyName": "IBM Plex Sans Devanagari", + "fullName": "IBM Plex Sans Devanagari Regular", + "postscriptName": "IBMPlexSansDevanagari-Regular", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1070, + "descent": -460, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 472 + } + }, + "variants": { + "100": { + "familyName": "IBM Plex Sans Devanagari", + "fullName": "IBM Plex Sans Devanagari Thin", + "postscriptName": "IBMPlexSansDevanagari-Thin", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1070, + "descent": -460, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "200": { + "familyName": "IBM Plex Sans Devanagari", + "fullName": "IBM Plex Sans Devanagari ExtraLight", + "postscriptName": "IBMPlexSansDevanagari-ExtraLight", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1070, + "descent": -460, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "300": { + "familyName": "IBM Plex Sans Devanagari", + "fullName": "IBM Plex Sans Devanagari Light", + "postscriptName": "IBMPlexSansDevanagari-Light", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1070, + "descent": -460, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "500": { + "familyName": "IBM Plex Sans Devanagari", + "fullName": "IBM Plex Sans Devanagari Medium", + "postscriptName": "IBMPlexSansDevanagari-Medium", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1070, + "descent": -460, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "600": { + "familyName": "IBM Plex Sans Devanagari", + "fullName": "IBM Plex Sans Devanagari SemiBold", + "postscriptName": "IBMPlexSansDevanagari-SemiBold", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1070, + "descent": -460, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "700": { + "familyName": "IBM Plex Sans Devanagari", + "fullName": "IBM Plex Sans Devanagari Bold", + "postscriptName": "IBMPlexSansDevanagari-Bold", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1070, + "descent": -460, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "regular": { + "familyName": "IBM Plex Sans Devanagari", + "fullName": "IBM Plex Sans Devanagari Regular", + "postscriptName": "IBMPlexSansDevanagari-Regular", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1070, + "descent": -460, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 472 + } + } + } + } + }, + "iBMPlexSansHebrew": { + "familyName": "IBM Plex Sans Hebrew", + "fullName": "IBM Plex Sans Hebrew Regular", + "postscriptName": "IBMPlexSansHebrew-Regular", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 472 + } + }, + "variants": { + "100": { + "familyName": "IBM Plex Sans Hebrew", + "fullName": "IBM Plex Sans Hebrew Thin", + "postscriptName": "IBMPlexSansHebrew-Thin", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "200": { + "familyName": "IBM Plex Sans Hebrew", + "fullName": "IBM Plex Sans Hebrew ExtraLight", + "postscriptName": "IBMPlexSansHebrew-ExtraLight", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "300": { + "familyName": "IBM Plex Sans Hebrew", + "fullName": "IBM Plex Sans Hebrew Light", + "postscriptName": "IBMPlexSansHebrew-Light", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "500": { + "familyName": "IBM Plex Sans Hebrew", + "fullName": "IBM Plex Sans Hebrew Medium", + "postscriptName": "IBMPlexSansHebrew-Medium", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "600": { + "familyName": "IBM Plex Sans Hebrew", + "fullName": "IBM Plex Sans Hebrew SemiBold", + "postscriptName": "IBMPlexSansHebrew-SemiBold", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "700": { + "familyName": "IBM Plex Sans Hebrew", + "fullName": "IBM Plex Sans Hebrew Bold", + "postscriptName": "IBMPlexSansHebrew-Bold", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "regular": { + "familyName": "IBM Plex Sans Hebrew", + "fullName": "IBM Plex Sans Hebrew Regular", + "postscriptName": "IBMPlexSansHebrew-Regular", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 472 + } + } + } + } + }, + "iBMPlexSansJP": { + "familyName": "IBM Plex Sans JP", + "fullName": "IBM Plex Sans JP Regular", + "postscriptName": "IBMPlexSansJP-Regular", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 541, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "100": { + "familyName": "IBM Plex Sans JP", + "fullName": "IBM Plex Sans JP Thin", + "postscriptName": "IBMPlexSansJP-Thin", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "200": { + "familyName": "IBM Plex Sans JP", + "fullName": "IBM Plex Sans JP ExtraLight", + "postscriptName": "IBMPlexSansJP-ExtraLight", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "300": { + "familyName": "IBM Plex Sans JP", + "fullName": "IBM Plex Sans JP Light", + "postscriptName": "IBMPlexSansJP-Light", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 537, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "500": { + "familyName": "IBM Plex Sans JP", + "fullName": "IBM Plex Sans JP Medium", + "postscriptName": "IBMPlexSansJP-Medium", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 545, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "600": { + "familyName": "IBM Plex Sans JP", + "fullName": "IBM Plex Sans JP SemiBold", + "postscriptName": "IBMPlexSansJP-SemiBold", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 548, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "IBM Plex Sans JP", + "fullName": "IBM Plex Sans JP Bold", + "postscriptName": "IBMPlexSansJP-Bold", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "IBM Plex Sans JP", + "fullName": "IBM Plex Sans JP Regular", + "postscriptName": "IBMPlexSansJP-Regular", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1060, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 541, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "iBMPlexSansKR": { + "familyName": "IBM Plex Sans KR", + "fullName": "IBM Plex Sans KR Regular", + "postscriptName": "IBMPlexSansKR-Regular", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1085, + "descent": -415, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 472 + } + }, + "variants": { + "100": { + "familyName": "IBM Plex Sans KR", + "fullName": "IBM Plex Sans KR Thin", + "postscriptName": "IBMPlexSansKR-Thin", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1085, + "descent": -415, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "200": { + "familyName": "IBM Plex Sans KR", + "fullName": "IBM Plex Sans KR ExtraLight", + "postscriptName": "IBMPlexSansKR-ExtraLight", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1085, + "descent": -415, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "300": { + "familyName": "IBM Plex Sans KR", + "fullName": "IBM Plex Sans KR Light", + "postscriptName": "IBMPlexSansKR-Light", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1085, + "descent": -415, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "500": { + "familyName": "IBM Plex Sans KR", + "fullName": "IBM Plex Sans KR Medium", + "postscriptName": "IBMPlexSansKR-Medium", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1085, + "descent": -415, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "600": { + "familyName": "IBM Plex Sans KR", + "fullName": "IBM Plex Sans KR SemiBold", + "postscriptName": "IBMPlexSansKR-SemiBold", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1085, + "descent": -415, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "700": { + "familyName": "IBM Plex Sans KR", + "fullName": "IBM Plex Sans KR Bold", + "postscriptName": "IBMPlexSansKR-Bold", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1085, + "descent": -415, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 472 + } + } + }, + "regular": { + "familyName": "IBM Plex Sans KR", + "fullName": "IBM Plex Sans KR Regular", + "postscriptName": "IBMPlexSansKR-Regular", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1085, + "descent": -415, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 472 + } + } + } + } + }, + "iBMPlexSansThai": { + "familyName": "IBM Plex Sans Thai", + "fullName": "IBM Plex Sans Thai Regular", + "postscriptName": "IBMPlexSansThai-Regular", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1116, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 561 + } + }, + "variants": { + "100": { + "familyName": "IBM Plex Sans Thai", + "fullName": "IBM Plex Sans Thai Thin", + "postscriptName": "IBMPlexSansThai-Thin", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1116, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 540 + } + } + }, + "200": { + "familyName": "IBM Plex Sans Thai", + "fullName": "IBM Plex Sans Thai ExtraLight", + "postscriptName": "IBMPlexSansThai-ExtraLight", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1116, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "300": { + "familyName": "IBM Plex Sans Thai", + "fullName": "IBM Plex Sans Thai Light", + "postscriptName": "IBMPlexSansThai-Light", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1116, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 553 + } + } + }, + "500": { + "familyName": "IBM Plex Sans Thai", + "fullName": "IBM Plex Sans Thai Medium", + "postscriptName": "IBMPlexSansThai-Medium", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1116, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 569 + } + } + }, + "600": { + "familyName": "IBM Plex Sans Thai", + "fullName": "IBM Plex Sans Thai SemiBold", + "postscriptName": "IBMPlexSansThai-SemiBold", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1116, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 573 + } + } + }, + "700": { + "familyName": "IBM Plex Sans Thai", + "fullName": "IBM Plex Sans Thai Bold", + "postscriptName": "IBMPlexSansThai-Bold", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1116, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 579 + } + } + }, + "regular": { + "familyName": "IBM Plex Sans Thai", + "fullName": "IBM Plex Sans Thai Regular", + "postscriptName": "IBMPlexSansThai-Regular", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1116, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 561 + } + } + } + } + }, + "iBMPlexSansThaiLooped": { + "familyName": "IBM Plex Sans Thai Looped", + "fullName": "IBM Plex Sans Thai Looped Regular", + "postscriptName": "IBMPlexSansThaiLooped-Regular", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1116, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 609 + } + }, + "variants": { + "100": { + "familyName": "IBM Plex Sans Thai Looped", + "fullName": "IBM Plex Sans Thai Looped Thin", + "postscriptName": "IBMPlexSansThaiLooped-Thin", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1116, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 585 + } + } + }, + "200": { + "familyName": "IBM Plex Sans Thai Looped", + "fullName": "IBM Plex Sans Thai Looped ExtraLight", + "postscriptName": "IBMPlexSansThaiLooped-ExtraLight", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1116, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 590 + } + } + }, + "300": { + "familyName": "IBM Plex Sans Thai Looped", + "fullName": "IBM Plex Sans Thai Looped Light", + "postscriptName": "IBMPlexSansThaiLooped-Light", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1116, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 599 + } + } + }, + "500": { + "familyName": "IBM Plex Sans Thai Looped", + "fullName": "IBM Plex Sans Thai Looped Medium", + "postscriptName": "IBMPlexSansThaiLooped-Medium", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1116, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 619 + } + } + }, + "600": { + "familyName": "IBM Plex Sans Thai Looped", + "fullName": "IBM Plex Sans Thai Looped SemiBold", + "postscriptName": "IBMPlexSansThaiLooped-SemiBold", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1116, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 626 + } + } + }, + "700": { + "familyName": "IBM Plex Sans Thai Looped", + "fullName": "IBM Plex Sans Thai Looped Bold", + "postscriptName": "IBMPlexSansThaiLooped-Bold", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1116, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 634 + } + } + }, + "regular": { + "familyName": "IBM Plex Sans Thai Looped", + "fullName": "IBM Plex Sans Thai Looped Regular", + "postscriptName": "IBMPlexSansThaiLooped-Regular", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1116, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 609 + } + } + } + } + }, + "iBMPlexSerif": { + "familyName": "IBM Plex Serif", + "fullName": "IBM Plex Serif Regular", + "postscriptName": "IBMPlexSerif-Regular", + "category": "serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 464 + } + }, + "variants": { + "100": { + "familyName": "IBM Plex Serif", + "fullName": "IBM Plex Serif Thin", + "postscriptName": "IBMPlexSerif-Thin", + "category": "serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 464 + } + } + }, + "200": { + "familyName": "IBM Plex Serif", + "fullName": "IBM Plex Serif ExtraLight", + "postscriptName": "IBMPlexSerif-ExtraLight", + "category": "serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 464 + } + } + }, + "300": { + "familyName": "IBM Plex Serif", + "fullName": "IBM Plex Serif Light", + "postscriptName": "IBMPlexSerif-Light", + "category": "serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 464 + } + } + }, + "500": { + "familyName": "IBM Plex Serif", + "fullName": "IBM Plex Serif Medium", + "postscriptName": "IBMPlexSerif-Medium", + "category": "serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 464 + } + } + }, + "600": { + "familyName": "IBM Plex Serif", + "fullName": "IBM Plex Serif SemiBold", + "postscriptName": "IBMPlexSerif-SemiBold", + "category": "serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 464 + } + } + }, + "700": { + "familyName": "IBM Plex Serif", + "fullName": "IBM Plex Serif Bold", + "postscriptName": "IBMPlexSerif-Bold", + "category": "serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 524, + "xWidthAvg": 496, + "subsets": { + "latin": { + "xWidthAvg": 496 + }, + "thai": { + "xWidthAvg": 464 + } + } + }, + "regular": { + "familyName": "IBM Plex Serif", + "fullName": "IBM Plex Serif Regular", + "postscriptName": "IBMPlexSerif-Regular", + "category": "serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 464 + } + } + }, + "italic": { + "familyName": "IBM Plex Serif", + "fullName": "IBM Plex Serif Italic", + "postscriptName": "IBMPlexSerif-Italic", + "category": "serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 424 + } + } + }, + "700italic": { + "familyName": "IBM Plex Serif", + "fullName": "IBM Plex Serif Bold Italic", + "postscriptName": "IBMPlexSerif-BoldItalic", + "category": "serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 524, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 424 + } + } + }, + "600italic": { + "familyName": "IBM Plex Serif", + "fullName": "IBM Plex Serif SemiBold Italic", + "postscriptName": "IBMPlexSerif-SemiBoldItalic", + "category": "serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 424 + } + } + }, + "500italic": { + "familyName": "IBM Plex Serif", + "fullName": "IBM Plex Serif Medium Italic", + "postscriptName": "IBMPlexSerif-MediumItalic", + "category": "serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 424 + } + } + }, + "300italic": { + "familyName": "IBM Plex Serif", + "fullName": "IBM Plex Serif Light Italic", + "postscriptName": "IBMPlexSerif-LightItalic", + "category": "serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 416, + "subsets": { + "latin": { + "xWidthAvg": 416 + }, + "thai": { + "xWidthAvg": 424 + } + } + }, + "200italic": { + "familyName": "IBM Plex Serif", + "fullName": "IBM Plex Serif ExtraLight Italic", + "postscriptName": "IBMPlexSerif-ExtraLightItalic", + "category": "serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 406, + "subsets": { + "latin": { + "xWidthAvg": 406 + }, + "thai": { + "xWidthAvg": 424 + } + } + }, + "100italic": { + "familyName": "IBM Plex Serif", + "fullName": "IBM Plex Serif Thin Italic", + "postscriptName": "IBMPlexSerif-ThinItalic", + "category": "serif", + "capHeight": 698, + "ascent": 1025, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 400, + "subsets": { + "latin": { + "xWidthAvg": 400 + }, + "thai": { + "xWidthAvg": 424 + } + } + } + } + }, + "iMFellDWPica": { + "familyName": "IM Fell DW Pica", + "fullName": "IM FELL DW Pica Roman", + "postscriptName": "IM_FELL_DW_Pica_Roman", + "category": "serif", + "capHeight": 1438, + "ascent": 1868, + "descent": -692, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 903, + "xWidthAvg": 815, + "subsets": { + "latin": { + "xWidthAvg": 815 + }, + "thai": { + "xWidthAvg": 1358 + } + }, + "variants": { + "regular": { + "familyName": "IM Fell DW Pica", + "fullName": "IM FELL DW Pica Roman", + "postscriptName": "IM_FELL_DW_Pica_Roman", + "category": "serif", + "capHeight": 1438, + "ascent": 1868, + "descent": -692, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 903, + "xWidthAvg": 815, + "subsets": { + "latin": { + "xWidthAvg": 815 + }, + "thai": { + "xWidthAvg": 1358 + } + } + }, + "italic": { + "familyName": "IM Fell DW Pica", + "fullName": "IM FELL DW Pica Italic", + "postscriptName": "IM_FELL_DW_Pica_Italic", + "category": "serif", + "capHeight": 1443, + "ascent": 1868, + "descent": -692, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 971, + "xWidthAvg": 767, + "subsets": { + "latin": { + "xWidthAvg": 767 + }, + "thai": { + "xWidthAvg": 1358 + } + } + } + } + }, + "iMFellDWPicaSC": { + "familyName": "IM Fell DW Pica SC", + "fullName": "IM FELL DW Pica SC", + "postscriptName": "IM_FELL_DW_Pica_SC", + "category": "serif", + "capHeight": 1438, + "ascent": 1868, + "descent": -692, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 903, + "xWidthAvg": 876, + "subsets": { + "latin": { + "xWidthAvg": 876 + }, + "thai": { + "xWidthAvg": 1386 + } + }, + "variants": { + "regular": { + "familyName": "IM Fell DW Pica SC", + "fullName": "IM FELL DW Pica SC", + "postscriptName": "IM_FELL_DW_Pica_SC", + "category": "serif", + "capHeight": 1438, + "ascent": 1868, + "descent": -692, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 903, + "xWidthAvg": 876, + "subsets": { + "latin": { + "xWidthAvg": 876 + }, + "thai": { + "xWidthAvg": 1386 + } + } + } + } + }, + "iMFellDoublePica": { + "familyName": "IM Fell Double Pica", + "fullName": "IM FELL Double Pica Roman ", + "postscriptName": "IM_FELL_Double_Pica_Roman", + "category": "serif", + "capHeight": 1509, + "ascent": 1924, + "descent": -643, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 926, + "xWidthAvg": 810, + "subsets": { + "latin": { + "xWidthAvg": 810 + }, + "thai": { + "xWidthAvg": 1307 + } + }, + "variants": { + "regular": { + "familyName": "IM Fell Double Pica", + "fullName": "IM FELL Double Pica Roman ", + "postscriptName": "IM_FELL_Double_Pica_Roman", + "category": "serif", + "capHeight": 1509, + "ascent": 1924, + "descent": -643, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 926, + "xWidthAvg": 810, + "subsets": { + "latin": { + "xWidthAvg": 810 + }, + "thai": { + "xWidthAvg": 1307 + } + } + }, + "italic": { + "familyName": "IM Fell Double Pica", + "fullName": "IM FELL Double Pica Italic", + "postscriptName": "IM_FELL_Double_Pica_Italic", + "category": "serif", + "capHeight": 1494, + "ascent": 1924, + "descent": -643, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 917, + "xWidthAvg": 741, + "subsets": { + "latin": { + "xWidthAvg": 741 + }, + "thai": { + "xWidthAvg": 1346 + } + } + } + } + }, + "iMFellDoublePicaSC": { + "familyName": "IM Fell Double Pica SC", + "fullName": "IM FELL Double Pica SC", + "postscriptName": "IM_FELL_Double_Pica_SC", + "category": "serif", + "capHeight": 1509, + "ascent": 1924, + "descent": -643, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 946, + "xWidthAvg": 889, + "subsets": { + "latin": { + "xWidthAvg": 889 + }, + "thai": { + "xWidthAvg": 1335 + } + }, + "variants": { + "regular": { + "familyName": "IM Fell Double Pica SC", + "fullName": "IM FELL Double Pica SC", + "postscriptName": "IM_FELL_Double_Pica_SC", + "category": "serif", + "capHeight": 1509, + "ascent": 1924, + "descent": -643, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 946, + "xWidthAvg": 889, + "subsets": { + "latin": { + "xWidthAvg": 889 + }, + "thai": { + "xWidthAvg": 1335 + } + } + } + } + }, + "iMFellEnglish": { + "familyName": "IM Fell English", + "fullName": "IM FELL English Roman", + "postscriptName": "IM_FELL_English_Roman", + "category": "serif", + "capHeight": 1417, + "ascent": 1854, + "descent": -744, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 962, + "xWidthAvg": 849, + "subsets": { + "latin": { + "xWidthAvg": 849 + }, + "thai": { + "xWidthAvg": 1358 + } + }, + "variants": { + "regular": { + "familyName": "IM Fell English", + "fullName": "IM FELL English Roman", + "postscriptName": "IM_FELL_English_Roman", + "category": "serif", + "capHeight": 1417, + "ascent": 1854, + "descent": -744, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 962, + "xWidthAvg": 849, + "subsets": { + "latin": { + "xWidthAvg": 849 + }, + "thai": { + "xWidthAvg": 1358 + } + } + }, + "italic": { + "familyName": "IM Fell English", + "fullName": "IM FELL English Italic", + "postscriptName": "IM_FELL_English_Italic", + "category": "serif", + "capHeight": 1431, + "ascent": 1854, + "descent": -744, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 912, + "xWidthAvg": 740, + "subsets": { + "latin": { + "xWidthAvg": 740 + }, + "thai": { + "xWidthAvg": 1350 + } + } + } + } + }, + "iMFellEnglishSC": { + "familyName": "IM Fell English SC", + "fullName": "IM FELL English SC", + "postscriptName": "IM_FELL_English_SC", + "category": "serif", + "capHeight": 1417, + "ascent": 1854, + "descent": -744, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 901, + "xWidthAvg": 898, + "subsets": { + "latin": { + "xWidthAvg": 898 + }, + "thai": { + "xWidthAvg": 1368 + } + }, + "variants": { + "regular": { + "familyName": "IM Fell English SC", + "fullName": "IM FELL English SC", + "postscriptName": "IM_FELL_English_SC", + "category": "serif", + "capHeight": 1417, + "ascent": 1854, + "descent": -744, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 901, + "xWidthAvg": 898, + "subsets": { + "latin": { + "xWidthAvg": 898 + }, + "thai": { + "xWidthAvg": 1368 + } + } + } + } + }, + "iMFellFrenchCanon": { + "familyName": "IM Fell French Canon", + "fullName": "IM FELL French Canon Roman", + "postscriptName": "IM_FELL_French_Canon_Roman", + "category": "serif", + "capHeight": 1465, + "ascent": 1868, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 981, + "xWidthAvg": 879, + "subsets": { + "latin": { + "xWidthAvg": 879 + }, + "thai": { + "xWidthAvg": 1346 + } + }, + "variants": { + "regular": { + "familyName": "IM Fell French Canon", + "fullName": "IM FELL French Canon Roman", + "postscriptName": "IM_FELL_French_Canon_Roman", + "category": "serif", + "capHeight": 1465, + "ascent": 1868, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 981, + "xWidthAvg": 879, + "subsets": { + "latin": { + "xWidthAvg": 879 + }, + "thai": { + "xWidthAvg": 1346 + } + } + }, + "italic": { + "familyName": "IM Fell French Canon", + "fullName": "IM FELL French Canon Italic", + "postscriptName": "IM_FELL_French_Canon_Italic", + "category": "serif", + "capHeight": 1477, + "ascent": 1868, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 983, + "xWidthAvg": 826, + "subsets": { + "latin": { + "xWidthAvg": 826 + }, + "thai": { + "xWidthAvg": 1346 + } + } + } + } + }, + "iMFellFrenchCanonSC": { + "familyName": "IM Fell French Canon SC", + "fullName": "IM FELL French Canon SC", + "postscriptName": "IM_FELL_French_Canon_SC", + "category": "serif", + "capHeight": 1465, + "ascent": 1868, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 984, + "xWidthAvg": 932, + "subsets": { + "latin": { + "xWidthAvg": 932 + }, + "thai": { + "xWidthAvg": 1374 + } + }, + "variants": { + "regular": { + "familyName": "IM Fell French Canon SC", + "fullName": "IM FELL French Canon SC", + "postscriptName": "IM_FELL_French_Canon_SC", + "category": "serif", + "capHeight": 1465, + "ascent": 1868, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 984, + "xWidthAvg": 932, + "subsets": { + "latin": { + "xWidthAvg": 932 + }, + "thai": { + "xWidthAvg": 1374 + } + } + } + } + }, + "iMFellGreatPrimer": { + "familyName": "IM Fell Great Primer", + "fullName": "IM FELL Great Primer Roman", + "postscriptName": "IM_FELL_Great_Primer_Roman", + "category": "serif", + "capHeight": 1488, + "ascent": 1942, + "descent": -562, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 962, + "xWidthAvg": 837, + "subsets": { + "latin": { + "xWidthAvg": 837 + }, + "thai": { + "xWidthAvg": 1352 + } + }, + "variants": { + "regular": { + "familyName": "IM Fell Great Primer", + "fullName": "IM FELL Great Primer Roman", + "postscriptName": "IM_FELL_Great_Primer_Roman", + "category": "serif", + "capHeight": 1488, + "ascent": 1942, + "descent": -562, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 962, + "xWidthAvg": 837, + "subsets": { + "latin": { + "xWidthAvg": 837 + }, + "thai": { + "xWidthAvg": 1352 + } + } + }, + "italic": { + "familyName": "IM Fell Great Primer", + "fullName": "IM FELL Great Primer Italic", + "postscriptName": "IM_FELL_Great_Primer_Italic", + "category": "serif", + "capHeight": 878, + "ascent": 1942, + "descent": -562, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 561, + "xWidthAvg": 802, + "subsets": { + "latin": { + "xWidthAvg": 802 + }, + "thai": { + "xWidthAvg": 1346 + } + } + } + } + }, + "iMFellGreatPrimerSC": { + "familyName": "IM Fell Great Primer SC", + "fullName": "IM FELL Great Primer SC", + "postscriptName": "IM_FELL_Great_Primer_SC", + "category": "serif", + "capHeight": 1488, + "ascent": 1942, + "descent": -562, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 957, + "xWidthAvg": 944, + "subsets": { + "latin": { + "xWidthAvg": 944 + }, + "thai": { + "xWidthAvg": 1380 + } + }, + "variants": { + "regular": { + "familyName": "IM Fell Great Primer SC", + "fullName": "IM FELL Great Primer SC", + "postscriptName": "IM_FELL_Great_Primer_SC", + "category": "serif", + "capHeight": 1488, + "ascent": 1942, + "descent": -562, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 957, + "xWidthAvg": 944, + "subsets": { + "latin": { + "xWidthAvg": 944 + }, + "thai": { + "xWidthAvg": 1380 + } + } + } + } + }, + "ibarraRealNova": { + "familyName": "Ibarra Real Nova", + "fullName": "Ibarra Real Nova Regular", + "postscriptName": "IbarraRealNova-Regular", + "category": "serif", + "capHeight": 673, + "ascent": 950, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 426, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 773 + } + }, + "variants": { + "500": { + "familyName": "Ibarra Real Nova", + "fullName": "Ibarra Real Nova Medium", + "postscriptName": "IbarraRealNova-Medium", + "category": "serif", + "capHeight": 673, + "ascent": 950, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 426, + "xWidthAvg": 430, + "subsets": { + "latin": { + "xWidthAvg": 430 + }, + "thai": { + "xWidthAvg": 773 + } + } + }, + "600": { + "familyName": "Ibarra Real Nova", + "fullName": "Ibarra Real Nova SemiBold", + "postscriptName": "IbarraRealNova-SemiBold", + "category": "serif", + "capHeight": 673, + "ascent": 950, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 426, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 773 + } + } + }, + "700": { + "familyName": "Ibarra Real Nova", + "fullName": "Ibarra Real Nova Bold", + "postscriptName": "IbarraRealNova-Bold", + "category": "serif", + "capHeight": 673, + "ascent": 950, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 426, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 773 + } + } + }, + "regular": { + "familyName": "Ibarra Real Nova", + "fullName": "Ibarra Real Nova Regular", + "postscriptName": "IbarraRealNova-Regular", + "category": "serif", + "capHeight": 673, + "ascent": 950, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 426, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 773 + } + } + }, + "italic": { + "familyName": "Ibarra Real Nova", + "fullName": "Ibarra Real Nova Italic", + "postscriptName": "IbarraRealNova-Italic", + "category": "serif", + "capHeight": 673, + "ascent": 950, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 426, + "xWidthAvg": 407, + "subsets": { + "latin": { + "xWidthAvg": 407 + }, + "thai": { + "xWidthAvg": 773 + } + } + }, + "700italic": { + "familyName": "Ibarra Real Nova", + "fullName": "Ibarra Real Nova Bold Italic", + "postscriptName": "IbarraRealNova-BoldItalic", + "category": "serif", + "capHeight": 673, + "ascent": 950, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 426, + "xWidthAvg": 421, + "subsets": { + "latin": { + "xWidthAvg": 421 + }, + "thai": { + "xWidthAvg": 773 + } + } + }, + "600italic": { + "familyName": "Ibarra Real Nova", + "fullName": "Ibarra Real Nova SemiBold Italic", + "postscriptName": "IbarraRealNova-SemiBoldItalic", + "category": "serif", + "capHeight": 673, + "ascent": 950, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 426, + "xWidthAvg": 415, + "subsets": { + "latin": { + "xWidthAvg": 415 + }, + "thai": { + "xWidthAvg": 773 + } + } + }, + "500italic": { + "familyName": "Ibarra Real Nova", + "fullName": "Ibarra Real Nova Medium Italic", + "postscriptName": "IbarraRealNova-MediumItalic", + "category": "serif", + "capHeight": 673, + "ascent": 950, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 426, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 773 + } + } + } + } + }, + "iceberg": { + "familyName": "Iceberg", + "fullName": "Iceberg", + "postscriptName": "Iceberg-Regular", + "category": "display", + "capHeight": 691, + "ascent": 936, + "descent": -284, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 414, + "subsets": { + "latin": { + "xWidthAvg": 414 + }, + "thai": { + "xWidthAvg": 965 + } + }, + "variants": { + "regular": { + "familyName": "Iceberg", + "fullName": "Iceberg", + "postscriptName": "Iceberg-Regular", + "category": "display", + "capHeight": 691, + "ascent": 936, + "descent": -284, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 414, + "subsets": { + "latin": { + "xWidthAvg": 414 + }, + "thai": { + "xWidthAvg": 965 + } + } + } + } + }, + "iceland": { + "familyName": "Iceland", + "fullName": "Iceland", + "postscriptName": "Iceland-Regular", + "category": "display", + "capHeight": 490, + "ascent": 750, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 350, + "xWidthAvg": 393, + "subsets": { + "latin": { + "xWidthAvg": 393 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Iceland", + "fullName": "Iceland", + "postscriptName": "Iceland-Regular", + "category": "display", + "capHeight": 490, + "ascent": 750, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 350, + "xWidthAvg": 393, + "subsets": { + "latin": { + "xWidthAvg": 393 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "imbue": { + "familyName": "Imbue", + "fullName": "Imbue 10pt Regular", + "postscriptName": "Imbue10pt-Regular", + "category": "serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1046, + "xWidthAvg": 580, + "subsets": { + "latin": { + "xWidthAvg": 580 + }, + "thai": { + "xWidthAvg": 587 + } + }, + "variants": { + "100": { + "familyName": "Imbue", + "fullName": "Imbue 10pt Thin", + "postscriptName": "Imbue10pt-Thin", + "category": "serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1046, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 573 + } + } + }, + "200": { + "familyName": "Imbue", + "fullName": "Imbue 10pt ExtraLight", + "postscriptName": "Imbue10pt-ExtraLight", + "category": "serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1046, + "xWidthAvg": 513, + "subsets": { + "latin": { + "xWidthAvg": 513 + }, + "thai": { + "xWidthAvg": 578 + } + } + }, + "300": { + "familyName": "Imbue", + "fullName": "Imbue 10pt Light", + "postscriptName": "Imbue10pt-Light", + "category": "serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1046, + "xWidthAvg": 547, + "subsets": { + "latin": { + "xWidthAvg": 547 + }, + "thai": { + "xWidthAvg": 582 + } + } + }, + "500": { + "familyName": "Imbue", + "fullName": "Imbue 10pt Medium", + "postscriptName": "Imbue10pt-Medium", + "category": "serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1046, + "xWidthAvg": 614, + "subsets": { + "latin": { + "xWidthAvg": 614 + }, + "thai": { + "xWidthAvg": 591 + } + } + }, + "600": { + "familyName": "Imbue", + "fullName": "Imbue 10pt SemiBold", + "postscriptName": "Imbue10pt-SemiBold", + "category": "serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1046, + "xWidthAvg": 647, + "subsets": { + "latin": { + "xWidthAvg": 647 + }, + "thai": { + "xWidthAvg": 596 + } + } + }, + "700": { + "familyName": "Imbue", + "fullName": "Imbue 10pt Bold", + "postscriptName": "Imbue10pt-Bold", + "category": "serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1046, + "xWidthAvg": 681, + "subsets": { + "latin": { + "xWidthAvg": 681 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Imbue", + "fullName": "Imbue 10pt ExtraBold", + "postscriptName": "Imbue10pt-ExtraBold", + "category": "serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1046, + "xWidthAvg": 714, + "subsets": { + "latin": { + "xWidthAvg": 714 + }, + "thai": { + "xWidthAvg": 605 + } + } + }, + "900": { + "familyName": "Imbue", + "fullName": "Imbue 10pt Black", + "postscriptName": "Imbue10pt-Black", + "category": "serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1046, + "xWidthAvg": 748, + "subsets": { + "latin": { + "xWidthAvg": 748 + }, + "thai": { + "xWidthAvg": 609 + } + } + }, + "regular": { + "familyName": "Imbue", + "fullName": "Imbue 10pt Regular", + "postscriptName": "Imbue10pt-Regular", + "category": "serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1046, + "xWidthAvg": 580, + "subsets": { + "latin": { + "xWidthAvg": 580 + }, + "thai": { + "xWidthAvg": 587 + } + } + } + } + }, + "imperialScript": { + "familyName": "Imperial Script", + "fullName": "Imperial Script Regular", + "postscriptName": "ImperialScript-Regular", + "category": "handwriting", + "capHeight": 620, + "ascent": 880, + "descent": -330, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 325, + "xWidthAvg": 296, + "subsets": { + "latin": { + "xWidthAvg": 296 + }, + "thai": { + "xWidthAvg": 494 + } + }, + "variants": { + "regular": { + "familyName": "Imperial Script", + "fullName": "Imperial Script Regular", + "postscriptName": "ImperialScript-Regular", + "category": "handwriting", + "capHeight": 620, + "ascent": 880, + "descent": -330, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 325, + "xWidthAvg": 296, + "subsets": { + "latin": { + "xWidthAvg": 296 + }, + "thai": { + "xWidthAvg": 494 + } + } + } + } + }, + "imprima": { + "familyName": "Imprima", + "fullName": "Imprima Regular", + "postscriptName": "Imprima-Regular", + "category": "sans-serif", + "capHeight": 680, + "ascent": 919, + "descent": -239, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 602 + } + }, + "variants": { + "regular": { + "familyName": "Imprima", + "fullName": "Imprima Regular", + "postscriptName": "Imprima-Regular", + "category": "sans-serif", + "capHeight": 680, + "ascent": 919, + "descent": -239, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 602 + } + } + } + } + }, + "inclusiveSans": { + "familyName": "Inclusive Sans", + "fullName": "Inclusive Sans Regular", + "postscriptName": "InclusiveSans-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 648 + } + }, + "variants": { + "regular": { + "familyName": "Inclusive Sans", + "fullName": "Inclusive Sans Regular", + "postscriptName": "InclusiveSans-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 648 + } + } + }, + "italic": { + "familyName": "Inclusive Sans", + "fullName": "Inclusive Sans Italic", + "postscriptName": "InclusiveSans-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 648 + } + } + } + } + }, + "inconsolata": { + "familyName": "Inconsolata", + "fullName": "Inconsolata Regular", + "postscriptName": "Inconsolata-Regular", + "category": "monospace", + "capHeight": 623, + "ascent": 859, + "descent": -190, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 457, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "200": { + "familyName": "Inconsolata", + "fullName": "Inconsolata ExtraLight", + "postscriptName": "Inconsolata-ExtraLight", + "category": "monospace", + "capHeight": 623, + "ascent": 859, + "descent": -190, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 457, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Inconsolata", + "fullName": "Inconsolata Light", + "postscriptName": "Inconsolata-Light", + "category": "monospace", + "capHeight": 623, + "ascent": 859, + "descent": -190, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 457, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Inconsolata", + "fullName": "Inconsolata Medium", + "postscriptName": "Inconsolata-Medium", + "category": "monospace", + "capHeight": 623, + "ascent": 859, + "descent": -190, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 457, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Inconsolata", + "fullName": "Inconsolata SemiBold", + "postscriptName": "Inconsolata-SemiBold", + "category": "monospace", + "capHeight": 623, + "ascent": 859, + "descent": -190, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 457, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Inconsolata", + "fullName": "Inconsolata Bold", + "postscriptName": "Inconsolata-Bold", + "category": "monospace", + "capHeight": 623, + "ascent": 859, + "descent": -190, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 457, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Inconsolata", + "fullName": "Inconsolata ExtraBold", + "postscriptName": "Inconsolata-ExtraBold", + "category": "monospace", + "capHeight": 623, + "ascent": 859, + "descent": -190, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 457, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "Inconsolata", + "fullName": "Inconsolata Black", + "postscriptName": "Inconsolata-Black", + "category": "monospace", + "capHeight": 623, + "ascent": 859, + "descent": -190, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 457, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Inconsolata", + "fullName": "Inconsolata Regular", + "postscriptName": "Inconsolata-Regular", + "category": "monospace", + "capHeight": 623, + "ascent": 859, + "descent": -190, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 457, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "inder": { + "familyName": "Inder", + "fullName": "Inder", + "postscriptName": "Inder-Regular", + "category": "sans-serif", + "capHeight": 1392, + "ascent": 2040, + "descent": -520, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1032, + "xWidthAvg": 980, + "subsets": { + "latin": { + "xWidthAvg": 980 + }, + "thai": { + "xWidthAvg": 682 + } + }, + "variants": { + "regular": { + "familyName": "Inder", + "fullName": "Inder", + "postscriptName": "Inder-Regular", + "category": "sans-serif", + "capHeight": 1392, + "ascent": 2040, + "descent": -520, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1032, + "xWidthAvg": 980, + "subsets": { + "latin": { + "xWidthAvg": 980 + }, + "thai": { + "xWidthAvg": 682 + } + } + } + } + }, + "indieFlower": { + "familyName": "Indie Flower", + "fullName": "Indie Flower", + "postscriptName": "IndieFlower", + "category": "handwriting", + "capHeight": 587, + "ascent": 994, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 374, + "xWidthAvg": 430, + "subsets": { + "latin": { + "xWidthAvg": 430 + }, + "thai": { + "xWidthAvg": 384 + } + }, + "variants": { + "regular": { + "familyName": "Indie Flower", + "fullName": "Indie Flower", + "postscriptName": "IndieFlower", + "category": "handwriting", + "capHeight": 587, + "ascent": 994, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 374, + "xWidthAvg": 430, + "subsets": { + "latin": { + "xWidthAvg": 430 + }, + "thai": { + "xWidthAvg": 384 + } + } + } + } + }, + "ingridDarling": { + "familyName": "Ingrid Darling", + "fullName": "Ingrid Darling Regular", + "postscriptName": "IngridDarling-Regular", + "category": "handwriting", + "capHeight": 640, + "ascent": 860, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 300, + "xWidthAvg": 255, + "subsets": { + "latin": { + "xWidthAvg": 255 + }, + "thai": { + "xWidthAvg": 474 + } + }, + "variants": { + "regular": { + "familyName": "Ingrid Darling", + "fullName": "Ingrid Darling Regular", + "postscriptName": "IngridDarling-Regular", + "category": "handwriting", + "capHeight": 640, + "ascent": 860, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 300, + "xWidthAvg": 255, + "subsets": { + "latin": { + "xWidthAvg": 255 + }, + "thai": { + "xWidthAvg": 474 + } + } + } + } + }, + "inika": { + "familyName": "Inika", + "fullName": "Inika", + "postscriptName": "Inika", + "category": "serif", + "capHeight": 700, + "ascent": 1006, + "descent": -297, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 509, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 279 + } + }, + "variants": { + "700": { + "familyName": "Inika", + "fullName": "Inika Bold", + "postscriptName": "Inika-Bold", + "category": "serif", + "capHeight": 701, + "ascent": 1006, + "descent": -297, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 509, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Inika", + "fullName": "Inika", + "postscriptName": "Inika", + "category": "serif", + "capHeight": 700, + "ascent": 1006, + "descent": -297, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 509, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 279 + } + } + } + } + }, + "inknutAntiqua": { + "familyName": "Inknut Antiqua", + "fullName": "Inknut Antiqua Regular", + "postscriptName": "InknutAntiqua-Regular", + "category": "serif", + "capHeight": 786, + "ascent": 1703, + "descent": -876, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 558, + "subsets": { + "latin": { + "xWidthAvg": 558 + }, + "thai": { + "xWidthAvg": 1396 + } + }, + "variants": { + "300": { + "familyName": "Inknut Antiqua", + "fullName": "Inknut Antiqua Light", + "postscriptName": "InknutAntiqua-Light", + "category": "serif", + "capHeight": 786, + "ascent": 1703, + "descent": -876, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 554, + "subsets": { + "latin": { + "xWidthAvg": 554 + }, + "thai": { + "xWidthAvg": 1396 + } + } + }, + "500": { + "familyName": "Inknut Antiqua", + "fullName": "Inknut Antiqua Medium", + "postscriptName": "InknutAntiqua-Medium", + "category": "serif", + "capHeight": 786, + "ascent": 1703, + "descent": -876, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 533, + "xWidthAvg": 562, + "subsets": { + "latin": { + "xWidthAvg": 562 + }, + "thai": { + "xWidthAvg": 1396 + } + } + }, + "600": { + "familyName": "Inknut Antiqua", + "fullName": "Inknut Antiqua SemiBold", + "postscriptName": "InknutAntiqua-SemiBold", + "category": "serif", + "capHeight": 786, + "ascent": 1703, + "descent": -876, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 566, + "subsets": { + "latin": { + "xWidthAvg": 566 + }, + "thai": { + "xWidthAvg": 1396 + } + } + }, + "700": { + "familyName": "Inknut Antiqua", + "fullName": "Inknut Antiqua Bold", + "postscriptName": "InknutAntiqua-Bold", + "category": "serif", + "capHeight": 786, + "ascent": 1703, + "descent": -876, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 539, + "xWidthAvg": 580, + "subsets": { + "latin": { + "xWidthAvg": 580 + }, + "thai": { + "xWidthAvg": 1396 + } + } + }, + "800": { + "familyName": "Inknut Antiqua", + "fullName": "Inknut Antiqua ExtraBold", + "postscriptName": "InknutAntiqua-ExtraBold", + "category": "serif", + "capHeight": 786, + "ascent": 1703, + "descent": -876, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 541, + "xWidthAvg": 586, + "subsets": { + "latin": { + "xWidthAvg": 586 + }, + "thai": { + "xWidthAvg": 1396 + } + } + }, + "900": { + "familyName": "Inknut Antiqua", + "fullName": "Inknut Antiqua Black", + "postscriptName": "InknutAntiqua-Black", + "category": "serif", + "capHeight": 786, + "ascent": 1703, + "descent": -876, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 593, + "subsets": { + "latin": { + "xWidthAvg": 593 + }, + "thai": { + "xWidthAvg": 1396 + } + } + }, + "regular": { + "familyName": "Inknut Antiqua", + "fullName": "Inknut Antiqua Regular", + "postscriptName": "InknutAntiqua-Regular", + "category": "serif", + "capHeight": 786, + "ascent": 1703, + "descent": -876, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 558, + "subsets": { + "latin": { + "xWidthAvg": 558 + }, + "thai": { + "xWidthAvg": 1396 + } + } + } + } + }, + "inriaSans": { + "familyName": "Inria Sans", + "fullName": "Inria Sans Regular", + "postscriptName": "InriaSans-Regular", + "category": "sans-serif", + "capHeight": 680, + "ascent": 976, + "descent": -223, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 684 + } + }, + "variants": { + "300": { + "familyName": "Inria Sans", + "fullName": "Inria Sans Light", + "postscriptName": "InriaSans-Light", + "category": "sans-serif", + "capHeight": 680, + "ascent": 976, + "descent": -223, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 716 + } + } + }, + "700": { + "familyName": "Inria Sans", + "fullName": "Inria Sans Bold", + "postscriptName": "InriaSans-Bold", + "category": "sans-serif", + "capHeight": 680, + "ascent": 976, + "descent": -223, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 507, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 636 + } + } + }, + "regular": { + "familyName": "Inria Sans", + "fullName": "Inria Sans Regular", + "postscriptName": "InriaSans-Regular", + "category": "sans-serif", + "capHeight": 680, + "ascent": 976, + "descent": -223, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 684 + } + } + }, + "italic": { + "familyName": "Inria Sans", + "fullName": "Inria Sans Italic", + "postscriptName": "InriaSans-Italic", + "category": "sans-serif", + "capHeight": 680, + "ascent": 976, + "descent": -223, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 436, + "subsets": { + "latin": { + "xWidthAvg": 436 + }, + "thai": { + "xWidthAvg": 684 + } + } + }, + "700italic": { + "familyName": "Inria Sans", + "fullName": "Inria Sans Bold Italic", + "postscriptName": "InriaSans-BoldItalic", + "category": "sans-serif", + "capHeight": 680, + "ascent": 976, + "descent": -223, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 507, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 636 + } + } + }, + "300italic": { + "familyName": "Inria Sans", + "fullName": "Inria Sans Light Italic", + "postscriptName": "InriaSans-LightItalic", + "category": "sans-serif", + "capHeight": 680, + "ascent": 976, + "descent": -223, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 430, + "subsets": { + "latin": { + "xWidthAvg": 430 + }, + "thai": { + "xWidthAvg": 716 + } + } + } + } + }, + "inriaSerif": { + "familyName": "Inria Serif", + "fullName": "Inria Serif Regular", + "postscriptName": "InriaSerif-Regular", + "category": "serif", + "capHeight": 680, + "ascent": 976, + "descent": -223, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 657 + } + }, + "variants": { + "300": { + "familyName": "Inria Serif", + "fullName": "Inria Serif Light", + "postscriptName": "InriaSerif-Light", + "category": "serif", + "capHeight": 680, + "ascent": 976, + "descent": -223, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 658 + } + } + }, + "700": { + "familyName": "Inria Serif", + "fullName": "Inria Serif Bold", + "postscriptName": "InriaSerif-Bold", + "category": "serif", + "capHeight": 680, + "ascent": 976, + "descent": -223, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 507, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 656 + } + } + }, + "regular": { + "familyName": "Inria Serif", + "fullName": "Inria Serif Regular", + "postscriptName": "InriaSerif-Regular", + "category": "serif", + "capHeight": 680, + "ascent": 976, + "descent": -223, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 657 + } + } + }, + "italic": { + "familyName": "Inria Serif", + "fullName": "Inria Serif Italic", + "postscriptName": "InriaSerif-Italic", + "category": "serif", + "capHeight": 680, + "ascent": 976, + "descent": -223, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 657 + } + } + }, + "700italic": { + "familyName": "Inria Serif", + "fullName": "Inria Serif Bold Italic", + "postscriptName": "InriaSerif-BoldItalic", + "category": "serif", + "capHeight": 680, + "ascent": 976, + "descent": -223, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 507, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 656 + } + } + }, + "300italic": { + "familyName": "Inria Serif", + "fullName": "Inria Serif Light Italic", + "postscriptName": "InriaSerif-LightItalic", + "category": "serif", + "capHeight": 680, + "ascent": 976, + "descent": -223, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 658 + } + } + } + } + }, + "inspiration": { + "familyName": "Inspiration", + "fullName": "Inspiration Regular", + "postscriptName": "Inspiration-Regular", + "category": "handwriting", + "capHeight": 680, + "ascent": 870, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 340, + "xWidthAvg": 252, + "subsets": { + "latin": { + "xWidthAvg": 252 + }, + "thai": { + "xWidthAvg": 558 + } + }, + "variants": { + "regular": { + "familyName": "Inspiration", + "fullName": "Inspiration Regular", + "postscriptName": "Inspiration-Regular", + "category": "handwriting", + "capHeight": 680, + "ascent": 870, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 340, + "xWidthAvg": 252, + "subsets": { + "latin": { + "xWidthAvg": 252 + }, + "thai": { + "xWidthAvg": 558 + } + } + } + } + }, + "instrumentSans": { + "familyName": "Instrument Sans", + "fullName": "Instrument Sans Regular", + "postscriptName": "InstrumentSans-Regular", + "category": "sans-serif", + "capHeight": 720, + "ascent": 970, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 676 + } + }, + "variants": { + "500": { + "familyName": "Instrument Sans", + "fullName": "Instrument Sans Medium", + "postscriptName": "InstrumentSans-Medium", + "category": "sans-serif", + "capHeight": 720, + "ascent": 970, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 671 + } + } + }, + "600": { + "familyName": "Instrument Sans", + "fullName": "Instrument Sans SemiBold", + "postscriptName": "InstrumentSans-SemiBold", + "category": "sans-serif", + "capHeight": 720, + "ascent": 970, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 665 + } + } + }, + "700": { + "familyName": "Instrument Sans", + "fullName": "Instrument Sans Bold", + "postscriptName": "InstrumentSans-Bold", + "category": "sans-serif", + "capHeight": 720, + "ascent": 970, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 660 + } + } + }, + "regular": { + "familyName": "Instrument Sans", + "fullName": "Instrument Sans Regular", + "postscriptName": "InstrumentSans-Regular", + "category": "sans-serif", + "capHeight": 720, + "ascent": 970, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 676 + } + } + }, + "italic": { + "familyName": "Instrument Sans", + "fullName": "Instrument Sans Italic", + "postscriptName": "InstrumentSans-Italic", + "category": "sans-serif", + "capHeight": 720, + "ascent": 970, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 676 + } + } + }, + "700italic": { + "familyName": "Instrument Sans", + "fullName": "Instrument Sans Bold Italic", + "postscriptName": "InstrumentSans-BoldItalic", + "category": "sans-serif", + "capHeight": 720, + "ascent": 970, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 660 + } + } + }, + "600italic": { + "familyName": "Instrument Sans", + "fullName": "Instrument Sans SemiBold Italic", + "postscriptName": "InstrumentSans-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 720, + "ascent": 970, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 665 + } + } + }, + "500italic": { + "familyName": "Instrument Sans", + "fullName": "Instrument Sans Medium Italic", + "postscriptName": "InstrumentSans-MediumItalic", + "category": "sans-serif", + "capHeight": 720, + "ascent": 970, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 671 + } + } + } + } + }, + "instrumentSerif": { + "familyName": "Instrument Serif", + "fullName": "Instrument Serif Regular", + "postscriptName": "InstrumentSerif-Regular", + "category": "serif", + "capHeight": 720, + "ascent": 990, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 341, + "subsets": { + "latin": { + "xWidthAvg": 341 + }, + "thai": { + "xWidthAvg": 602 + } + }, + "variants": { + "regular": { + "familyName": "Instrument Serif", + "fullName": "Instrument Serif Regular", + "postscriptName": "InstrumentSerif-Regular", + "category": "serif", + "capHeight": 720, + "ascent": 990, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 341, + "subsets": { + "latin": { + "xWidthAvg": 341 + }, + "thai": { + "xWidthAvg": 602 + } + } + }, + "italic": { + "familyName": "Instrument Serif", + "fullName": "Instrument Serif Italic", + "postscriptName": "InstrumentSerif-Italic", + "category": "serif", + "capHeight": 720, + "ascent": 990, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 359, + "subsets": { + "latin": { + "xWidthAvg": 359 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "inter": { + "familyName": "Inter", + "fullName": "Inter Regular", + "postscriptName": "Inter-Regular", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 978, + "subsets": { + "latin": { + "xWidthAvg": 978 + }, + "thai": { + "xWidthAvg": 1344 + } + }, + "variants": { + "100": { + "familyName": "Inter", + "fullName": "Inter Thin", + "postscriptName": "Inter-Thin", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 925, + "subsets": { + "latin": { + "xWidthAvg": 925 + }, + "thai": { + "xWidthAvg": 1344 + } + } + }, + "200": { + "familyName": "Inter", + "fullName": "Inter ExtraLight", + "postscriptName": "Inter-ExtraLight", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 942, + "subsets": { + "latin": { + "xWidthAvg": 942 + }, + "thai": { + "xWidthAvg": 1344 + } + } + }, + "300": { + "familyName": "Inter", + "fullName": "Inter Light", + "postscriptName": "Inter-Light", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 1344 + } + } + }, + "500": { + "familyName": "Inter", + "fullName": "Inter Medium", + "postscriptName": "Inter-Medium", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 988, + "subsets": { + "latin": { + "xWidthAvg": 988 + }, + "thai": { + "xWidthAvg": 1344 + } + } + }, + "600": { + "familyName": "Inter", + "fullName": "Inter SemiBold", + "postscriptName": "Inter-SemiBold", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 998, + "subsets": { + "latin": { + "xWidthAvg": 998 + }, + "thai": { + "xWidthAvg": 1344 + } + } + }, + "700": { + "familyName": "Inter", + "fullName": "Inter Bold", + "postscriptName": "Inter-Bold", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 1008, + "subsets": { + "latin": { + "xWidthAvg": 1008 + }, + "thai": { + "xWidthAvg": 1344 + } + } + }, + "800": { + "familyName": "Inter", + "fullName": "Inter ExtraBold", + "postscriptName": "Inter-ExtraBold", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 1021, + "subsets": { + "latin": { + "xWidthAvg": 1021 + }, + "thai": { + "xWidthAvg": 1344 + } + } + }, + "900": { + "familyName": "Inter", + "fullName": "Inter Black", + "postscriptName": "Inter-Black", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 1035, + "subsets": { + "latin": { + "xWidthAvg": 1035 + }, + "thai": { + "xWidthAvg": 1344 + } + } + }, + "regular": { + "familyName": "Inter", + "fullName": "Inter Regular", + "postscriptName": "Inter-Regular", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 978, + "subsets": { + "latin": { + "xWidthAvg": 978 + }, + "thai": { + "xWidthAvg": 1344 + } + } + }, + "italic": { + "familyName": "Inter", + "fullName": "Inter Italic", + "postscriptName": "Inter-Italic", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 984, + "subsets": { + "latin": { + "xWidthAvg": 984 + }, + "thai": { + "xWidthAvg": 1344 + } + } + }, + "900italic": { + "familyName": "Inter", + "fullName": "Inter Black Italic", + "postscriptName": "Inter-BlackItalic", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 1041, + "subsets": { + "latin": { + "xWidthAvg": 1041 + }, + "thai": { + "xWidthAvg": 1344 + } + } + }, + "800italic": { + "familyName": "Inter", + "fullName": "Inter ExtraBold Italic", + "postscriptName": "Inter-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 1027, + "subsets": { + "latin": { + "xWidthAvg": 1027 + }, + "thai": { + "xWidthAvg": 1344 + } + } + }, + "700italic": { + "familyName": "Inter", + "fullName": "Inter Bold Italic", + "postscriptName": "Inter-BoldItalic", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 1015, + "subsets": { + "latin": { + "xWidthAvg": 1015 + }, + "thai": { + "xWidthAvg": 1344 + } + } + }, + "600italic": { + "familyName": "Inter", + "fullName": "Inter SemiBold Italic", + "postscriptName": "Inter-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 1005, + "subsets": { + "latin": { + "xWidthAvg": 1005 + }, + "thai": { + "xWidthAvg": 1344 + } + } + }, + "500italic": { + "familyName": "Inter", + "fullName": "Inter Medium Italic", + "postscriptName": "Inter-MediumItalic", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 994, + "subsets": { + "latin": { + "xWidthAvg": 994 + }, + "thai": { + "xWidthAvg": 1344 + } + } + }, + "300italic": { + "familyName": "Inter", + "fullName": "Inter Light Italic", + "postscriptName": "Inter-LightItalic", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 965, + "subsets": { + "latin": { + "xWidthAvg": 965 + }, + "thai": { + "xWidthAvg": 1344 + } + } + }, + "200italic": { + "familyName": "Inter", + "fullName": "Inter ExtraLight Italic", + "postscriptName": "Inter-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 947, + "subsets": { + "latin": { + "xWidthAvg": 947 + }, + "thai": { + "xWidthAvg": 1344 + } + } + }, + "100italic": { + "familyName": "Inter", + "fullName": "Inter Thin Italic", + "postscriptName": "Inter-ThinItalic", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 929, + "subsets": { + "latin": { + "xWidthAvg": 929 + }, + "thai": { + "xWidthAvg": 1344 + } + } + } + } + }, + "interTight": { + "familyName": "Inter Tight", + "fullName": "Inter Tight Regular", + "postscriptName": "InterTight-Regular", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 880, + "subsets": { + "latin": { + "xWidthAvg": 880 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "100": { + "familyName": "Inter Tight", + "fullName": "Inter Tight Thin", + "postscriptName": "InterTight-Thin", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 937, + "subsets": { + "latin": { + "xWidthAvg": 937 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "200": { + "familyName": "Inter Tight", + "fullName": "Inter Tight ExtraLight", + "postscriptName": "InterTight-ExtraLight", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 918, + "subsets": { + "latin": { + "xWidthAvg": 918 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "300": { + "familyName": "Inter Tight", + "fullName": "Inter Tight Light", + "postscriptName": "InterTight-Light", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 899, + "subsets": { + "latin": { + "xWidthAvg": 899 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "500": { + "familyName": "Inter Tight", + "fullName": "Inter Tight Medium", + "postscriptName": "InterTight-Medium", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 902, + "subsets": { + "latin": { + "xWidthAvg": 902 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "600": { + "familyName": "Inter Tight", + "fullName": "Inter Tight SemiBold", + "postscriptName": "InterTight-SemiBold", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 923, + "subsets": { + "latin": { + "xWidthAvg": 923 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "700": { + "familyName": "Inter Tight", + "fullName": "Inter Tight Bold", + "postscriptName": "InterTight-Bold", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 944, + "subsets": { + "latin": { + "xWidthAvg": 944 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "800": { + "familyName": "Inter Tight", + "fullName": "Inter Tight ExtraBold", + "postscriptName": "InterTight-ExtraBold", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 965, + "subsets": { + "latin": { + "xWidthAvg": 965 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "900": { + "familyName": "Inter Tight", + "fullName": "Inter Tight Black", + "postscriptName": "InterTight-Black", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 986, + "subsets": { + "latin": { + "xWidthAvg": 986 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "regular": { + "familyName": "Inter Tight", + "fullName": "Inter Tight Regular", + "postscriptName": "InterTight-Regular", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 880, + "subsets": { + "latin": { + "xWidthAvg": 880 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "italic": { + "familyName": "Inter Tight", + "fullName": "Inter Tight Italic", + "postscriptName": "InterTight-Italic", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 881, + "subsets": { + "latin": { + "xWidthAvg": 881 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "900italic": { + "familyName": "Inter Tight", + "fullName": "Inter Tight Black Italic", + "postscriptName": "InterTight-BlackItalic", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 986, + "subsets": { + "latin": { + "xWidthAvg": 986 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "800italic": { + "familyName": "Inter Tight", + "fullName": "Inter Tight ExtraBold Italic", + "postscriptName": "InterTight-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 965, + "subsets": { + "latin": { + "xWidthAvg": 965 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "700italic": { + "familyName": "Inter Tight", + "fullName": "Inter Tight Bold Italic", + "postscriptName": "InterTight-BoldItalic", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 944, + "subsets": { + "latin": { + "xWidthAvg": 944 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "600italic": { + "familyName": "Inter Tight", + "fullName": "Inter Tight SemiBold Italic", + "postscriptName": "InterTight-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 923, + "subsets": { + "latin": { + "xWidthAvg": 923 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "500italic": { + "familyName": "Inter Tight", + "fullName": "Inter Tight Medium Italic", + "postscriptName": "InterTight-MediumItalic", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 902, + "subsets": { + "latin": { + "xWidthAvg": 902 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "300italic": { + "familyName": "Inter Tight", + "fullName": "Inter Tight Light Italic", + "postscriptName": "InterTight-LightItalic", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 900, + "subsets": { + "latin": { + "xWidthAvg": 900 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "200italic": { + "familyName": "Inter Tight", + "fullName": "Inter Tight ExtraLight Italic", + "postscriptName": "InterTight-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 918, + "subsets": { + "latin": { + "xWidthAvg": 918 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "100italic": { + "familyName": "Inter Tight", + "fullName": "Inter Tight Thin Italic", + "postscriptName": "InterTight-ThinItalic", + "category": "sans-serif", + "capHeight": 1490, + "ascent": 1984, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 937, + "subsets": { + "latin": { + "xWidthAvg": 937 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "irishGrover": { + "familyName": "Irish Grover", + "fullName": "Irish Grover Regular", + "postscriptName": "IrishGrover-Regular", + "category": "display", + "capHeight": 731, + "ascent": 965, + "descent": -246, + "lineGap": 27, + "unitsPerEm": 1024, + "xHeight": 573, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 328 + } + }, + "variants": { + "regular": { + "familyName": "Irish Grover", + "fullName": "Irish Grover Regular", + "postscriptName": "IrishGrover-Regular", + "category": "display", + "capHeight": 731, + "ascent": 965, + "descent": -246, + "lineGap": 27, + "unitsPerEm": 1024, + "xHeight": 573, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 328 + } + } + } + } + }, + "islandMoments": { + "familyName": "Island Moments", + "fullName": "Island Moments Regular", + "postscriptName": "IslandMoments-Regular", + "category": "handwriting", + "capHeight": 480, + "ascent": 750, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 270, + "xWidthAvg": 288, + "subsets": { + "latin": { + "xWidthAvg": 288 + }, + "thai": { + "xWidthAvg": 494 + } + }, + "variants": { + "regular": { + "familyName": "Island Moments", + "fullName": "Island Moments Regular", + "postscriptName": "IslandMoments-Regular", + "category": "handwriting", + "capHeight": 480, + "ascent": 750, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 270, + "xWidthAvg": 288, + "subsets": { + "latin": { + "xWidthAvg": 288 + }, + "thai": { + "xWidthAvg": 494 + } + } + } + } + }, + "istokWeb": { + "familyName": "Istok Web", + "fullName": "Istok Web Regular", + "postscriptName": "IstokWeb-Regular", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 2061, + "descent": -887, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1050, + "xWidthAvg": 929, + "subsets": { + "latin": { + "xWidthAvg": 929 + }, + "thai": { + "xWidthAvg": 1240 + } + }, + "variants": { + "700": { + "familyName": "Istok Web", + "fullName": "Istok Web Bold", + "postscriptName": "IstokWeb-Bold", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 2061, + "descent": -887, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1050, + "xWidthAvg": 987, + "subsets": { + "latin": { + "xWidthAvg": 987 + }, + "thai": { + "xWidthAvg": 1260 + } + } + }, + "regular": { + "familyName": "Istok Web", + "fullName": "Istok Web Regular", + "postscriptName": "IstokWeb-Regular", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 2061, + "descent": -887, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1050, + "xWidthAvg": 929, + "subsets": { + "latin": { + "xWidthAvg": 929 + }, + "thai": { + "xWidthAvg": 1240 + } + } + }, + "italic": { + "familyName": "Istok Web", + "fullName": "Istok Web Italic", + "postscriptName": "IstokWeb-Italic", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 2061, + "descent": -887, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1050, + "xWidthAvg": 930, + "subsets": { + "latin": { + "xWidthAvg": 930 + }, + "thai": { + "xWidthAvg": 1240 + } + } + }, + "700italic": { + "familyName": "Istok Web", + "fullName": "Istok Web Bold Italic", + "postscriptName": "IstokWeb-BoldItalic", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 2061, + "descent": -887, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1050, + "xWidthAvg": 930, + "subsets": { + "latin": { + "xWidthAvg": 930 + }, + "thai": { + "xWidthAvg": 1240 + } + } + } + } + }, + "italiana": { + "familyName": "Italiana", + "fullName": "Italiana", + "postscriptName": "Italiana-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 928, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 200 + } + }, + "variants": { + "regular": { + "familyName": "Italiana", + "fullName": "Italiana", + "postscriptName": "Italiana-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 928, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 200 + } + } + } + } + }, + "italianno": { + "familyName": "Italianno", + "fullName": "Italianno Regular", + "postscriptName": "Italianno-Regular", + "category": "handwriting", + "capHeight": 577, + "ascent": 800, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 273, + "xWidthAvg": 266, + "subsets": { + "latin": { + "xWidthAvg": 266 + }, + "thai": { + "xWidthAvg": 398 + } + }, + "variants": { + "regular": { + "familyName": "Italianno", + "fullName": "Italianno Regular", + "postscriptName": "Italianno-Regular", + "category": "handwriting", + "capHeight": 577, + "ascent": 800, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 273, + "xWidthAvg": 266, + "subsets": { + "latin": { + "xWidthAvg": 266 + }, + "thai": { + "xWidthAvg": 398 + } + } + } + } + }, + "itim": { + "familyName": "Itim", + "fullName": "Itim", + "postscriptName": "Itim-Regular", + "category": "handwriting", + "capHeight": 635, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 432, + "subsets": { + "latin": { + "xWidthAvg": 432 + }, + "thai": { + "xWidthAvg": 534 + } + }, + "variants": { + "regular": { + "familyName": "Itim", + "fullName": "Itim", + "postscriptName": "Itim-Regular", + "category": "handwriting", + "capHeight": 635, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 432, + "subsets": { + "latin": { + "xWidthAvg": 432 + }, + "thai": { + "xWidthAvg": 534 + } + } + } + } + }, + "jacquard12": { + "familyName": "Jacquard 12", + "fullName": "Jacquard 12 Regular", + "postscriptName": "Jacquard12-Regular", + "category": "display", + "capHeight": 720, + "ascent": 960, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1260, + "xHeight": 480, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 540 + } + }, + "variants": { + "regular": { + "familyName": "Jacquard 12", + "fullName": "Jacquard 12 Regular", + "postscriptName": "Jacquard12-Regular", + "category": "display", + "capHeight": 720, + "ascent": 960, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1260, + "xHeight": 480, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 540 + } + } + } + } + }, + "jacquard12Charted": { + "familyName": "Jacquard 12 Charted", + "fullName": "Jacquard 12 Charted Regular", + "postscriptName": "Jacquard12Charted-Regular", + "category": "display", + "capHeight": 720, + "ascent": 960, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1260, + "xHeight": 480, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 300 + } + }, + "variants": { + "regular": { + "familyName": "Jacquard 12 Charted", + "fullName": "Jacquard 12 Charted Regular", + "postscriptName": "Jacquard12Charted-Regular", + "category": "display", + "capHeight": 720, + "ascent": 960, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1260, + "xHeight": 480, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 300 + } + } + } + } + }, + "jacquard24": { + "familyName": "Jacquard 24", + "fullName": "Jacquard 24 Regular", + "postscriptName": "Jacquard24-Regular", + "category": "display", + "capHeight": 750, + "ascent": 1020, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1290, + "xHeight": 510, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 330 + } + }, + "variants": { + "regular": { + "familyName": "Jacquard 24", + "fullName": "Jacquard 24 Regular", + "postscriptName": "Jacquard24-Regular", + "category": "display", + "capHeight": 750, + "ascent": 1020, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1290, + "xHeight": 510, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 330 + } + } + } + } + }, + "jacquard24Charted": { + "familyName": "Jacquard 24 Charted", + "fullName": "Jacquard 24 Charted Regular", + "postscriptName": "Jacquard24Charted-Regular", + "category": "display", + "capHeight": 750, + "ascent": 1020, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1290, + "xHeight": 510, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 330 + } + }, + "variants": { + "regular": { + "familyName": "Jacquard 24 Charted", + "fullName": "Jacquard 24 Charted Regular", + "postscriptName": "Jacquard24Charted-Regular", + "category": "display", + "capHeight": 750, + "ascent": 1020, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1290, + "xHeight": 510, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 330 + } + } + } + } + }, + "jacquardaBastarda9": { + "familyName": "Jacquarda Bastarda 9", + "fullName": "Jacquarda Bastarda 9 Regular", + "postscriptName": "JacquardaBastarda9-Regular", + "category": "display", + "capHeight": 720, + "ascent": 1045, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1040, + "xHeight": 480, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 560 + } + }, + "variants": { + "regular": { + "familyName": "Jacquarda Bastarda 9", + "fullName": "Jacquarda Bastarda 9 Regular", + "postscriptName": "JacquardaBastarda9-Regular", + "category": "display", + "capHeight": 720, + "ascent": 1045, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1040, + "xHeight": 480, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 560 + } + } + } + } + }, + "jacquardaBastarda9Charted": { + "familyName": "Jacquarda Bastarda 9 Charted", + "fullName": "Jacquarda Bastarda 9 Charted Regular", + "postscriptName": "JacquardaBastarda9Charted-Regular", + "category": "display", + "capHeight": 720, + "ascent": 1045, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1040, + "xHeight": 480, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 400 + } + }, + "variants": { + "regular": { + "familyName": "Jacquarda Bastarda 9 Charted", + "fullName": "Jacquarda Bastarda 9 Charted Regular", + "postscriptName": "JacquardaBastarda9Charted-Regular", + "category": "display", + "capHeight": 720, + "ascent": 1045, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1040, + "xHeight": 480, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 400 + } + } + } + } + }, + "jacquesFrancois": { + "familyName": "Jacques Francois", + "fullName": "Jacques Francois", + "postscriptName": "JacquesFrancois-Regular", + "category": "serif", + "capHeight": 1464, + "ascent": 2095, + "descent": -606, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 879, + "xWidthAvg": 949, + "subsets": { + "latin": { + "xWidthAvg": 949 + }, + "thai": { + "xWidthAvg": 1976 + } + }, + "variants": { + "regular": { + "familyName": "Jacques Francois", + "fullName": "Jacques Francois", + "postscriptName": "JacquesFrancois-Regular", + "category": "serif", + "capHeight": 1464, + "ascent": 2095, + "descent": -606, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 879, + "xWidthAvg": 949, + "subsets": { + "latin": { + "xWidthAvg": 949 + }, + "thai": { + "xWidthAvg": 1976 + } + } + } + } + }, + "jacquesFrancoisShadow": { + "familyName": "Jacques Francois Shadow", + "fullName": "Jacques Francois Shadow", + "postscriptName": "JacquesFrancoisShadow-Regular", + "category": "display", + "capHeight": 1513, + "ascent": 2095, + "descent": -606, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 930, + "xWidthAvg": 1039, + "subsets": { + "latin": { + "xWidthAvg": 1039 + }, + "thai": { + "xWidthAvg": 1976 + } + }, + "variants": { + "regular": { + "familyName": "Jacques Francois Shadow", + "fullName": "Jacques Francois Shadow", + "postscriptName": "JacquesFrancoisShadow-Regular", + "category": "display", + "capHeight": 1513, + "ascent": 2095, + "descent": -606, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 930, + "xWidthAvg": 1039, + "subsets": { + "latin": { + "xWidthAvg": 1039 + }, + "thai": { + "xWidthAvg": 1976 + } + } + } + } + }, + "jaini": { + "familyName": "Jaini", + "fullName": "Jaini Regular", + "postscriptName": "Jaini-Regular", + "category": "display", + "capHeight": 639, + "ascent": 1048, + "descent": -266, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 342, + "subsets": { + "latin": { + "xWidthAvg": 342 + }, + "thai": { + "xWidthAvg": 535 + } + }, + "variants": { + "regular": { + "familyName": "Jaini", + "fullName": "Jaini Regular", + "postscriptName": "Jaini-Regular", + "category": "display", + "capHeight": 639, + "ascent": 1048, + "descent": -266, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 342, + "subsets": { + "latin": { + "xWidthAvg": 342 + }, + "thai": { + "xWidthAvg": 535 + } + } + } + } + }, + "jainiPurva": { + "familyName": "Jaini Purva", + "fullName": "Jaini Purva Regular", + "postscriptName": "JainiPurva-Regular", + "category": "display", + "capHeight": 639, + "ascent": 1048, + "descent": -266, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 342, + "subsets": { + "latin": { + "xWidthAvg": 342 + }, + "thai": { + "xWidthAvg": 535 + } + }, + "variants": { + "regular": { + "familyName": "Jaini Purva", + "fullName": "Jaini Purva Regular", + "postscriptName": "JainiPurva-Regular", + "category": "display", + "capHeight": 639, + "ascent": 1048, + "descent": -266, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 342, + "subsets": { + "latin": { + "xWidthAvg": 342 + }, + "thai": { + "xWidthAvg": 535 + } + } + } + } + }, + "jaldi": { + "familyName": "Jaldi", + "fullName": "Jaldi", + "postscriptName": "Jaldi-Regular", + "category": "sans-serif", + "capHeight": 1243, + "ascent": 2350, + "descent": -1111, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 930, + "xWidthAvg": 786, + "subsets": { + "latin": { + "xWidthAvg": 786 + }, + "thai": { + "xWidthAvg": 914 + } + }, + "variants": { + "700": { + "familyName": "Jaldi", + "fullName": "Jaldi Bold", + "postscriptName": "Jaldi-Bold", + "category": "sans-serif", + "capHeight": 1243, + "ascent": 2350, + "descent": -1111, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 930, + "xWidthAvg": 786, + "subsets": { + "latin": { + "xWidthAvg": 786 + }, + "thai": { + "xWidthAvg": 914 + } + } + }, + "regular": { + "familyName": "Jaldi", + "fullName": "Jaldi", + "postscriptName": "Jaldi-Regular", + "category": "sans-serif", + "capHeight": 1243, + "ascent": 2350, + "descent": -1111, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 930, + "xWidthAvg": 786, + "subsets": { + "latin": { + "xWidthAvg": 786 + }, + "thai": { + "xWidthAvg": 914 + } + } + } + } + }, + "jaro": { + "familyName": "Jaro", + "fullName": "Jaro Regular", + "postscriptName": "Jaro-Regular", + "category": "sans-serif", + "capHeight": 1333, + "ascent": 2000, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1100, + "xWidthAvg": 809, + "subsets": { + "latin": { + "xWidthAvg": 809 + }, + "thai": { + "xWidthAvg": 1057 + } + }, + "variants": { + "regular": { + "familyName": "Jaro", + "fullName": "Jaro Regular", + "postscriptName": "Jaro-Regular", + "category": "sans-serif", + "capHeight": 1333, + "ascent": 2000, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1100, + "xWidthAvg": 809, + "subsets": { + "latin": { + "xWidthAvg": 809 + }, + "thai": { + "xWidthAvg": 1057 + } + } + } + } + }, + "jersey10": { + "familyName": "Jersey 10", + "fullName": "Jersey 10 Regular", + "postscriptName": "Jersey10-Regular", + "category": "display", + "capHeight": 750, + "ascent": 1125, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1400, + "xHeight": 600, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 300 + } + }, + "variants": { + "regular": { + "familyName": "Jersey 10", + "fullName": "Jersey 10 Regular", + "postscriptName": "Jersey10-Regular", + "category": "display", + "capHeight": 750, + "ascent": 1125, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1400, + "xHeight": 600, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 300 + } + } + } + } + }, + "jersey10Charted": { + "familyName": "Jersey 10 Charted", + "fullName": "Jersey 10 Charted Regular", + "postscriptName": "Jersey10Charted-Regular", + "category": "display", + "capHeight": 750, + "ascent": 1125, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1400, + "xHeight": 600, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 300 + } + }, + "variants": { + "regular": { + "familyName": "Jersey 10 Charted", + "fullName": "Jersey 10 Charted Regular", + "postscriptName": "Jersey10Charted-Regular", + "category": "display", + "capHeight": 750, + "ascent": 1125, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1400, + "xHeight": 600, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 300 + } + } + } + } + }, + "jersey15": { + "familyName": "Jersey 15", + "fullName": "Jersey 15 Regular", + "postscriptName": "Jersey15-Regular", + "category": "display", + "capHeight": 750, + "ascent": 1050, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1350, + "xHeight": 550, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 300 + } + }, + "variants": { + "regular": { + "familyName": "Jersey 15", + "fullName": "Jersey 15 Regular", + "postscriptName": "Jersey15-Regular", + "category": "display", + "capHeight": 750, + "ascent": 1050, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1350, + "xHeight": 550, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 300 + } + } + } + } + }, + "jersey15Charted": { + "familyName": "Jersey 15 Charted", + "fullName": "Jersey 15 Charted Regular", + "postscriptName": "Jersey15Charted-Regular", + "category": "display", + "capHeight": 750, + "ascent": 1050, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1350, + "xHeight": 550, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 300 + } + }, + "variants": { + "regular": { + "familyName": "Jersey 15 Charted", + "fullName": "Jersey 15 Charted Regular", + "postscriptName": "Jersey15Charted-Regular", + "category": "display", + "capHeight": 750, + "ascent": 1050, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1350, + "xHeight": 550, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 300 + } + } + } + } + }, + "jersey20": { + "familyName": "Jersey 20", + "fullName": "Jersey 20 Regular", + "postscriptName": "Jersey20-Regular", + "category": "display", + "capHeight": 760, + "ascent": 1026, + "descent": -266, + "lineGap": 0, + "unitsPerEm": 1292, + "xHeight": 570, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 532 + } + }, + "variants": { + "regular": { + "familyName": "Jersey 20", + "fullName": "Jersey 20 Regular", + "postscriptName": "Jersey20-Regular", + "category": "display", + "capHeight": 760, + "ascent": 1026, + "descent": -266, + "lineGap": 0, + "unitsPerEm": 1292, + "xHeight": 570, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 532 + } + } + } + } + }, + "jersey20Charted": { + "familyName": "Jersey 20 Charted", + "fullName": "Jersey 20 Charted Regular", + "postscriptName": "Jersey20Charted-Regular", + "category": "display", + "capHeight": 760, + "ascent": 1026, + "descent": -266, + "lineGap": 0, + "unitsPerEm": 1292, + "xHeight": 570, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 532 + } + }, + "variants": { + "regular": { + "familyName": "Jersey 20 Charted", + "fullName": "Jersey 20 Charted Regular", + "postscriptName": "Jersey20Charted-Regular", + "category": "display", + "capHeight": 760, + "ascent": 1026, + "descent": -266, + "lineGap": 0, + "unitsPerEm": 1292, + "xHeight": 570, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 532 + } + } + } + } + }, + "jersey25": { + "familyName": "Jersey 25", + "fullName": "Jersey 25 Regular", + "postscriptName": "Jersey25-Regular", + "category": "display", + "capHeight": 750, + "ascent": 988, + "descent": -242, + "lineGap": 0, + "unitsPerEm": 1230, + "xHeight": 570, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Jersey 25", + "fullName": "Jersey 25 Regular", + "postscriptName": "Jersey25-Regular", + "category": "display", + "capHeight": 750, + "ascent": 988, + "descent": -242, + "lineGap": 0, + "unitsPerEm": 1230, + "xHeight": 570, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "jersey25Charted": { + "familyName": "Jersey 25 Charted", + "fullName": "Jersey 25 Charted Regular", + "postscriptName": "Jersey25Charted-Regular", + "category": "display", + "capHeight": 750, + "ascent": 988, + "descent": -242, + "lineGap": 0, + "unitsPerEm": 1230, + "xHeight": 570, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Jersey 25 Charted", + "fullName": "Jersey 25 Charted Regular", + "postscriptName": "Jersey25Charted-Regular", + "category": "display", + "capHeight": 750, + "ascent": 988, + "descent": -242, + "lineGap": 0, + "unitsPerEm": 1230, + "xHeight": 570, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "jetBrainsMono": { + "familyName": "JetBrains Mono", + "fullName": "JetBrains Mono Regular", + "postscriptName": "JetBrainsMono-Regular", + "category": "monospace", + "capHeight": 730, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "JetBrains Mono", + "fullName": "JetBrains Mono Thin", + "postscriptName": "JetBrainsMono-Thin", + "category": "monospace", + "capHeight": 730, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "JetBrains Mono", + "fullName": "JetBrains Mono ExtraLight", + "postscriptName": "JetBrainsMono-ExtraLight", + "category": "monospace", + "capHeight": 730, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "JetBrains Mono", + "fullName": "JetBrains Mono Light", + "postscriptName": "JetBrainsMono-Light", + "category": "monospace", + "capHeight": 730, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "JetBrains Mono", + "fullName": "JetBrains Mono Medium", + "postscriptName": "JetBrainsMono-Medium", + "category": "monospace", + "capHeight": 730, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "JetBrains Mono", + "fullName": "JetBrains Mono SemiBold", + "postscriptName": "JetBrainsMono-SemiBold", + "category": "monospace", + "capHeight": 730, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "JetBrains Mono", + "fullName": "JetBrains Mono Bold", + "postscriptName": "JetBrainsMono-Bold", + "category": "monospace", + "capHeight": 730, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "JetBrains Mono", + "fullName": "JetBrains Mono ExtraBold", + "postscriptName": "JetBrainsMono-ExtraBold", + "category": "monospace", + "capHeight": 730, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "JetBrains Mono", + "fullName": "JetBrains Mono Regular", + "postscriptName": "JetBrainsMono-Regular", + "category": "monospace", + "capHeight": 730, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "italic": { + "familyName": "JetBrains Mono", + "fullName": "JetBrains Mono Italic", + "postscriptName": "JetBrainsMono-Italic", + "category": "monospace", + "capHeight": 730, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800italic": { + "familyName": "JetBrains Mono", + "fullName": "JetBrains Mono ExtraBold Italic", + "postscriptName": "JetBrainsMono-ExtraBoldItalic", + "category": "monospace", + "capHeight": 730, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700italic": { + "familyName": "JetBrains Mono", + "fullName": "JetBrains Mono Bold Italic", + "postscriptName": "JetBrainsMono-BoldItalic", + "category": "monospace", + "capHeight": 730, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600italic": { + "familyName": "JetBrains Mono", + "fullName": "JetBrains Mono SemiBold Italic", + "postscriptName": "JetBrainsMono-SemiBoldItalic", + "category": "monospace", + "capHeight": 730, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500italic": { + "familyName": "JetBrains Mono", + "fullName": "JetBrains Mono Medium Italic", + "postscriptName": "JetBrainsMono-MediumItalic", + "category": "monospace", + "capHeight": 730, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300italic": { + "familyName": "JetBrains Mono", + "fullName": "JetBrains Mono Light Italic", + "postscriptName": "JetBrainsMono-LightItalic", + "category": "monospace", + "capHeight": 730, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200italic": { + "familyName": "JetBrains Mono", + "fullName": "JetBrains Mono ExtraLight Italic", + "postscriptName": "JetBrainsMono-ExtraLightItalic", + "category": "monospace", + "capHeight": 730, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "100italic": { + "familyName": "JetBrains Mono", + "fullName": "JetBrains Mono Thin Italic", + "postscriptName": "JetBrainsMono-ThinItalic", + "category": "monospace", + "capHeight": 730, + "ascent": 1020, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "jimNightshade": { + "familyName": "Jim Nightshade", + "fullName": "Jim Nightshade", + "postscriptName": "JimNightshade-Regular", + "category": "handwriting", + "capHeight": 1234, + "ascent": 1852, + "descent": -1050, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 930, + "xWidthAvg": 623, + "subsets": { + "latin": { + "xWidthAvg": 623 + }, + "thai": { + "xWidthAvg": 400 + } + }, + "variants": { + "regular": { + "familyName": "Jim Nightshade", + "fullName": "Jim Nightshade", + "postscriptName": "JimNightshade-Regular", + "category": "handwriting", + "capHeight": 1234, + "ascent": 1852, + "descent": -1050, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 930, + "xWidthAvg": 623, + "subsets": { + "latin": { + "xWidthAvg": 623 + }, + "thai": { + "xWidthAvg": 400 + } + } + } + } + }, + "joan": { + "familyName": "Joan", + "fullName": "Joan Regular", + "postscriptName": "Joan-Regular", + "category": "serif", + "capHeight": 707, + "ascent": 1000, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 456, + "xWidthAvg": 414, + "subsets": { + "latin": { + "xWidthAvg": 414 + }, + "thai": { + "xWidthAvg": 742 + } + }, + "variants": { + "regular": { + "familyName": "Joan", + "fullName": "Joan Regular", + "postscriptName": "Joan-Regular", + "category": "serif", + "capHeight": 707, + "ascent": 1000, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 456, + "xWidthAvg": 414, + "subsets": { + "latin": { + "xWidthAvg": 414 + }, + "thai": { + "xWidthAvg": 742 + } + } + } + } + }, + "jockeyOne": { + "familyName": "Jockey One", + "fullName": "Jockey One", + "postscriptName": "JockeyOne-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1079, + "descent": -319, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 369, + "subsets": { + "latin": { + "xWidthAvg": 369 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Jockey One", + "fullName": "Jockey One", + "postscriptName": "JockeyOne-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1079, + "descent": -319, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 369, + "subsets": { + "latin": { + "xWidthAvg": 369 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "jollyLodger": { + "familyName": "Jolly Lodger", + "fullName": "Jolly Lodger", + "postscriptName": "JollyLodger", + "category": "display", + "capHeight": 757, + "ascent": 988, + "descent": -257, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 642, + "xWidthAvg": 293, + "subsets": { + "latin": { + "xWidthAvg": 293 + }, + "thai": { + "xWidthAvg": 195 + } + }, + "variants": { + "regular": { + "familyName": "Jolly Lodger", + "fullName": "Jolly Lodger", + "postscriptName": "JollyLodger", + "category": "display", + "capHeight": 757, + "ascent": 988, + "descent": -257, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 642, + "xWidthAvg": 293, + "subsets": { + "latin": { + "xWidthAvg": 293 + }, + "thai": { + "xWidthAvg": 195 + } + } + } + } + }, + "jomhuria": { + "familyName": "Jomhuria", + "fullName": "Jomhuria", + "postscriptName": "Jomhuria-Regular", + "category": "display", + "capHeight": 1172, + "ascent": 1840, + "descent": -1160, + "lineGap": 0, + "unitsPerEm": 3000, + "xHeight": 850, + "xWidthAvg": 739, + "subsets": { + "latin": { + "xWidthAvg": 739 + }, + "thai": { + "xWidthAvg": 1100 + } + }, + "variants": { + "regular": { + "familyName": "Jomhuria", + "fullName": "Jomhuria", + "postscriptName": "Jomhuria-Regular", + "category": "display", + "capHeight": 1172, + "ascent": 1840, + "descent": -1160, + "lineGap": 0, + "unitsPerEm": 3000, + "xHeight": 850, + "xWidthAvg": 739, + "subsets": { + "latin": { + "xWidthAvg": 739 + }, + "thai": { + "xWidthAvg": 1100 + } + } + } + } + }, + "jomolhari": { + "familyName": "Jomolhari", + "fullName": "Jomolhari Regular", + "postscriptName": "Jomolhari-Regular", + "category": "serif", + "capHeight": 756, + "ascent": 1248, + "descent": -392, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 360, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 720 + } + }, + "variants": { + "regular": { + "familyName": "Jomolhari", + "fullName": "Jomolhari Regular", + "postscriptName": "Jomolhari-Regular", + "category": "serif", + "capHeight": 756, + "ascent": 1248, + "descent": -392, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 360, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 720 + } + } + } + } + }, + "josefinSans": { + "familyName": "Josefin Sans", + "fullName": "Josefin Sans Regular", + "postscriptName": "JosefinSans-Regular", + "category": "sans-serif", + "capHeight": 702, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 378, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 300 + } + }, + "variants": { + "100": { + "familyName": "Josefin Sans", + "fullName": "Josefin Sans Thin", + "postscriptName": "JosefinSans-Thin", + "category": "sans-serif", + "capHeight": 702, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 378, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 300 + } + } + }, + "200": { + "familyName": "Josefin Sans", + "fullName": "Josefin Sans ExtraLight", + "postscriptName": "JosefinSans-ExtraLight", + "category": "sans-serif", + "capHeight": 702, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 378, + "xWidthAvg": 420, + "subsets": { + "latin": { + "xWidthAvg": 420 + }, + "thai": { + "xWidthAvg": 300 + } + } + }, + "300": { + "familyName": "Josefin Sans", + "fullName": "Josefin Sans Light", + "postscriptName": "JosefinSans-Light", + "category": "sans-serif", + "capHeight": 702, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 378, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 300 + } + } + }, + "500": { + "familyName": "Josefin Sans", + "fullName": "Josefin Sans Medium", + "postscriptName": "JosefinSans-Medium", + "category": "sans-serif", + "capHeight": 702, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 378, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 300 + } + } + }, + "600": { + "familyName": "Josefin Sans", + "fullName": "Josefin Sans SemiBold", + "postscriptName": "JosefinSans-SemiBold", + "category": "sans-serif", + "capHeight": 702, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 378, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 300 + } + } + }, + "700": { + "familyName": "Josefin Sans", + "fullName": "Josefin Sans Bold", + "postscriptName": "JosefinSans-Bold", + "category": "sans-serif", + "capHeight": 702, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 378, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 300 + } + } + }, + "regular": { + "familyName": "Josefin Sans", + "fullName": "Josefin Sans Regular", + "postscriptName": "JosefinSans-Regular", + "category": "sans-serif", + "capHeight": 702, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 378, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 300 + } + } + }, + "italic": { + "familyName": "Josefin Sans", + "fullName": "Josefin Sans Italic", + "postscriptName": "JosefinSans-Italic", + "category": "sans-serif", + "capHeight": 702, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 378, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 300 + } + } + }, + "700italic": { + "familyName": "Josefin Sans", + "fullName": "Josefin Sans Bold Italic", + "postscriptName": "JosefinSans-BoldItalic", + "category": "sans-serif", + "capHeight": 702, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 378, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 300 + } + } + }, + "600italic": { + "familyName": "Josefin Sans", + "fullName": "Josefin Sans SemiBold Italic", + "postscriptName": "JosefinSans-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 702, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 378, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 300 + } + } + }, + "500italic": { + "familyName": "Josefin Sans", + "fullName": "Josefin Sans Medium Italic", + "postscriptName": "JosefinSans-MediumItalic", + "category": "sans-serif", + "capHeight": 702, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 378, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 300 + } + } + }, + "300italic": { + "familyName": "Josefin Sans", + "fullName": "Josefin Sans Light Italic", + "postscriptName": "JosefinSans-LightItalic", + "category": "sans-serif", + "capHeight": 702, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 378, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 300 + } + } + }, + "200italic": { + "familyName": "Josefin Sans", + "fullName": "Josefin Sans ExtraLight Italic", + "postscriptName": "JosefinSans-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 702, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 378, + "xWidthAvg": 420, + "subsets": { + "latin": { + "xWidthAvg": 420 + }, + "thai": { + "xWidthAvg": 300 + } + } + }, + "100italic": { + "familyName": "Josefin Sans", + "fullName": "Josefin Sans Thin Italic", + "postscriptName": "JosefinSans-ThinItalic", + "category": "sans-serif", + "capHeight": 702, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 378, + "xWidthAvg": 413, + "subsets": { + "latin": { + "xWidthAvg": 413 + }, + "thai": { + "xWidthAvg": 300 + } + } + } + } + }, + "josefinSlab": { + "familyName": "Josefin Slab", + "fullName": "Josefin Slab Regular", + "postscriptName": "JosefinSlab-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 375, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 300 + } + }, + "variants": { + "100": { + "familyName": "Josefin Slab", + "fullName": "Josefin Slab Thin", + "postscriptName": "JosefinSlab-Thin", + "category": "serif", + "capHeight": 700, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 375, + "xWidthAvg": 416, + "subsets": { + "latin": { + "xWidthAvg": 416 + }, + "thai": { + "xWidthAvg": 300 + } + } + }, + "200": { + "familyName": "Josefin Slab", + "fullName": "Josefin Slab ExtraLight", + "postscriptName": "JosefinSlab-ExtraLight", + "category": "serif", + "capHeight": 700, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 375, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 300 + } + } + }, + "300": { + "familyName": "Josefin Slab", + "fullName": "Josefin Slab Light", + "postscriptName": "JosefinSlab-Light", + "category": "serif", + "capHeight": 700, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 375, + "xWidthAvg": 421, + "subsets": { + "latin": { + "xWidthAvg": 421 + }, + "thai": { + "xWidthAvg": 300 + } + } + }, + "500": { + "familyName": "Josefin Slab", + "fullName": "Josefin Slab Medium", + "postscriptName": "JosefinSlab-Medium", + "category": "serif", + "capHeight": 700, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 375, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 300 + } + } + }, + "600": { + "familyName": "Josefin Slab", + "fullName": "Josefin Slab SemiBold", + "postscriptName": "JosefinSlab-SemiBold", + "category": "serif", + "capHeight": 700, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 375, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 300 + } + } + }, + "700": { + "familyName": "Josefin Slab", + "fullName": "Josefin Slab Bold", + "postscriptName": "JosefinSlab-Bold", + "category": "serif", + "capHeight": 700, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 375, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 300 + } + } + }, + "regular": { + "familyName": "Josefin Slab", + "fullName": "Josefin Slab Regular", + "postscriptName": "JosefinSlab-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 375, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 300 + } + } + }, + "italic": { + "familyName": "Josefin Slab", + "fullName": "Josefin Slab Italic", + "postscriptName": "JosefinSlab-Italic", + "category": "serif", + "capHeight": 700, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 375, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 300 + } + } + }, + "700italic": { + "familyName": "Josefin Slab", + "fullName": "Josefin Slab Bold Italic", + "postscriptName": "JosefinSlab-BoldItalic", + "category": "serif", + "capHeight": 700, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 375, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 300 + } + } + }, + "600italic": { + "familyName": "Josefin Slab", + "fullName": "Josefin Slab SemiBold Italic", + "postscriptName": "JosefinSlab-SemiBoldItalic", + "category": "serif", + "capHeight": 700, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 375, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 300 + } + } + }, + "500italic": { + "familyName": "Josefin Slab", + "fullName": "Josefin Slab Medium Italic", + "postscriptName": "JosefinSlab-MediumItalic", + "category": "serif", + "capHeight": 700, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 375, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 300 + } + } + }, + "300italic": { + "familyName": "Josefin Slab", + "fullName": "Josefin Slab Light Italic", + "postscriptName": "JosefinSlab-LightItalic", + "category": "serif", + "capHeight": 700, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 375, + "xWidthAvg": 421, + "subsets": { + "latin": { + "xWidthAvg": 421 + }, + "thai": { + "xWidthAvg": 300 + } + } + }, + "200italic": { + "familyName": "Josefin Slab", + "fullName": "Josefin Slab ExtraLight Italic", + "postscriptName": "JosefinSlab-ExtraLightItalic", + "category": "serif", + "capHeight": 700, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 375, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 300 + } + } + }, + "100italic": { + "familyName": "Josefin Slab", + "fullName": "Josefin Slab Thin Italic", + "postscriptName": "JosefinSlab-ThinItalic", + "category": "serif", + "capHeight": 700, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 375, + "xWidthAvg": 416, + "subsets": { + "latin": { + "xWidthAvg": 416 + }, + "thai": { + "xWidthAvg": 300 + } + } + } + } + }, + "jost": { + "familyName": "Jost", + "fullName": "Jost Regular", + "postscriptName": "Jost-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "100": { + "familyName": "Jost", + "fullName": "Jost Thin", + "postscriptName": "Jost-Thin", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 397, + "subsets": { + "latin": { + "xWidthAvg": 397 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200": { + "familyName": "Jost", + "fullName": "Jost ExtraLight", + "postscriptName": "Jost-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 406, + "subsets": { + "latin": { + "xWidthAvg": 406 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Jost", + "fullName": "Jost Light", + "postscriptName": "Jost-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 416, + "subsets": { + "latin": { + "xWidthAvg": 416 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Jost", + "fullName": "Jost Medium", + "postscriptName": "Jost-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Jost", + "fullName": "Jost SemiBold", + "postscriptName": "Jost-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Jost", + "fullName": "Jost Bold", + "postscriptName": "Jost-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Jost", + "fullName": "Jost ExtraBold", + "postscriptName": "Jost-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "Jost", + "fullName": "Jost Black", + "postscriptName": "Jost-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 499, + "subsets": { + "latin": { + "xWidthAvg": 499 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Jost", + "fullName": "Jost Regular", + "postscriptName": "Jost-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Jost", + "fullName": "Jost Italic", + "postscriptName": "Jost-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900italic": { + "familyName": "Jost", + "fullName": "Jost Black Italic", + "postscriptName": "Jost-BlackItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 491, + "subsets": { + "latin": { + "xWidthAvg": 491 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800italic": { + "familyName": "Jost", + "fullName": "Jost ExtraBold Italic", + "postscriptName": "Jost-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700italic": { + "familyName": "Jost", + "fullName": "Jost Bold Italic", + "postscriptName": "Jost-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600italic": { + "familyName": "Jost", + "fullName": "Jost SemiBold Italic", + "postscriptName": "Jost-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500italic": { + "familyName": "Jost", + "fullName": "Jost Medium Italic", + "postscriptName": "Jost-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300italic": { + "familyName": "Jost", + "fullName": "Jost Light Italic", + "postscriptName": "Jost-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200italic": { + "familyName": "Jost", + "fullName": "Jost ExtraLight Italic", + "postscriptName": "Jost-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 403, + "subsets": { + "latin": { + "xWidthAvg": 403 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "100italic": { + "familyName": "Jost", + "fullName": "Jost Thin Italic", + "postscriptName": "Jost-ThinItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 395, + "subsets": { + "latin": { + "xWidthAvg": 395 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "jotiOne": { + "familyName": "Joti One", + "fullName": "Joti One Regular", + "postscriptName": "JotiOne-Regular", + "category": "display", + "capHeight": 650, + "ascent": 1003, + "descent": -331, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 729 + } + }, + "variants": { + "regular": { + "familyName": "Joti One", + "fullName": "Joti One Regular", + "postscriptName": "JotiOne-Regular", + "category": "display", + "capHeight": 650, + "ascent": 1003, + "descent": -331, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 729 + } + } + } + } + }, + "jua": { + "familyName": "Jua", + "fullName": "Jua Regular", + "postscriptName": "Jua-Regular", + "category": "sans-serif", + "capHeight": 711, + "ascent": 800, + "descent": -200, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 432, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 719 + } + }, + "variants": { + "regular": { + "familyName": "Jua", + "fullName": "Jua Regular", + "postscriptName": "Jua-Regular", + "category": "sans-serif", + "capHeight": 711, + "ascent": 800, + "descent": -200, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 432, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 719 + } + } + } + } + }, + "judson": { + "familyName": "Judson", + "fullName": "Judson Regular", + "postscriptName": "Judson-Regular", + "category": "serif", + "capHeight": 585, + "ascent": 902, + "descent": -248, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "700": { + "familyName": "Judson", + "fullName": "Judson Bold", + "postscriptName": "Judson-Bold", + "category": "serif", + "capHeight": 585, + "ascent": 908, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "regular": { + "familyName": "Judson", + "fullName": "Judson Regular", + "postscriptName": "Judson-Regular", + "category": "serif", + "capHeight": 585, + "ascent": 902, + "descent": -248, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Judson", + "fullName": "Judson Italic", + "postscriptName": "Judson-Italic", + "category": "serif", + "capHeight": 585, + "ascent": 902, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 420, + "subsets": { + "latin": { + "xWidthAvg": 420 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "julee": { + "familyName": "Julee", + "fullName": "Julee Regular", + "postscriptName": "Julee-Regular", + "category": "handwriting", + "capHeight": 206, + "ascent": 894, + "descent": -284, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 153, + "xWidthAvg": 393, + "subsets": { + "latin": { + "xWidthAvg": 393 + }, + "thai": { + "xWidthAvg": 535 + } + }, + "variants": { + "regular": { + "familyName": "Julee", + "fullName": "Julee Regular", + "postscriptName": "Julee-Regular", + "category": "handwriting", + "capHeight": 206, + "ascent": 894, + "descent": -284, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 153, + "xWidthAvg": 393, + "subsets": { + "latin": { + "xWidthAvg": 393 + }, + "thai": { + "xWidthAvg": 535 + } + } + } + } + }, + "juliusSansOne": { + "familyName": "Julius Sans One", + "fullName": "Julius Sans One", + "postscriptName": "JuliusSansOne-Regular", + "category": "sans-serif", + "capHeight": 715, + "ascent": 863, + "descent": -228, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 649, + "xWidthAvg": 556, + "subsets": { + "latin": { + "xWidthAvg": 556 + }, + "thai": { + "xWidthAvg": 260 + } + }, + "variants": { + "regular": { + "familyName": "Julius Sans One", + "fullName": "Julius Sans One", + "postscriptName": "JuliusSansOne-Regular", + "category": "sans-serif", + "capHeight": 715, + "ascent": 863, + "descent": -228, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 649, + "xWidthAvg": 556, + "subsets": { + "latin": { + "xWidthAvg": 556 + }, + "thai": { + "xWidthAvg": 260 + } + } + } + } + }, + "junge": { + "familyName": "Junge", + "fullName": "Junge", + "postscriptName": "Junge-Regular", + "category": "serif", + "capHeight": 1444, + "ascent": 1901, + "descent": -588, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1010, + "xWidthAvg": 961, + "subsets": { + "latin": { + "xWidthAvg": 961 + }, + "thai": { + "xWidthAvg": 1976 + } + }, + "variants": { + "regular": { + "familyName": "Junge", + "fullName": "Junge", + "postscriptName": "Junge-Regular", + "category": "serif", + "capHeight": 1444, + "ascent": 1901, + "descent": -588, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1010, + "xWidthAvg": 961, + "subsets": { + "latin": { + "xWidthAvg": 961 + }, + "thai": { + "xWidthAvg": 1976 + } + } + } + } + }, + "jura": { + "familyName": "Jura", + "fullName": "Jura Regular", + "postscriptName": "Jura-Regular", + "category": "sans-serif", + "capHeight": 1266, + "ascent": 1930, + "descent": -436, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 922, + "xWidthAvg": 951, + "subsets": { + "latin": { + "xWidthAvg": 951 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "300": { + "familyName": "Jura", + "fullName": "Jura Light", + "postscriptName": "Jura-Light", + "category": "sans-serif", + "capHeight": 1266, + "ascent": 1930, + "descent": -436, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 922, + "xWidthAvg": 918, + "subsets": { + "latin": { + "xWidthAvg": 918 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "500": { + "familyName": "Jura", + "fullName": "Jura Medium", + "postscriptName": "Jura-Medium", + "category": "sans-serif", + "capHeight": 1266, + "ascent": 1930, + "descent": -436, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 922, + "xWidthAvg": 984, + "subsets": { + "latin": { + "xWidthAvg": 984 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "600": { + "familyName": "Jura", + "fullName": "Jura SemiBold", + "postscriptName": "Jura-SemiBold", + "category": "sans-serif", + "capHeight": 1266, + "ascent": 1930, + "descent": -436, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 922, + "xWidthAvg": 1018, + "subsets": { + "latin": { + "xWidthAvg": 1018 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "Jura", + "fullName": "Jura Bold", + "postscriptName": "Jura-Bold", + "category": "sans-serif", + "capHeight": 1266, + "ascent": 1930, + "descent": -436, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 922, + "xWidthAvg": 1051, + "subsets": { + "latin": { + "xWidthAvg": 1051 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Jura", + "fullName": "Jura Regular", + "postscriptName": "Jura-Regular", + "category": "sans-serif", + "capHeight": 1266, + "ascent": 1930, + "descent": -436, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 922, + "xWidthAvg": 951, + "subsets": { + "latin": { + "xWidthAvg": 951 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "justAnotherHand": { + "familyName": "Just Another Hand", + "fullName": "Just Another Hand Regular", + "postscriptName": "JustAnotherHand-Regular", + "category": "handwriting", + "capHeight": 1436, + "ascent": 1440, + "descent": -608, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 880, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Just Another Hand", + "fullName": "Just Another Hand Regular", + "postscriptName": "JustAnotherHand-Regular", + "category": "handwriting", + "capHeight": 1436, + "ascent": 1440, + "descent": -608, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 880, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "justMeAgainDownHere": { + "familyName": "Just Me Again Down Here", + "fullName": "Just Me Again Down Here", + "postscriptName": "JustMeAgainDownHere", + "category": "handwriting", + "capHeight": 600, + "ascent": 1069, + "descent": -429, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 289, + "xWidthAvg": 315, + "subsets": { + "latin": { + "xWidthAvg": 315 + }, + "thai": { + "xWidthAvg": 640 + } + }, + "variants": { + "regular": { + "familyName": "Just Me Again Down Here", + "fullName": "Just Me Again Down Here", + "postscriptName": "JustMeAgainDownHere", + "category": "handwriting", + "capHeight": 600, + "ascent": 1069, + "descent": -429, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 289, + "xWidthAvg": 315, + "subsets": { + "latin": { + "xWidthAvg": 315 + }, + "thai": { + "xWidthAvg": 640 + } + } + } + } + }, + "k2D": { + "familyName": "K2D", + "fullName": "K2D Regular", + "postscriptName": "K2D-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1048, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 569 + } + }, + "variants": { + "100": { + "familyName": "K2D", + "fullName": "K2D Thin", + "postscriptName": "K2D-Thin", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1048, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 556 + } + } + }, + "200": { + "familyName": "K2D", + "fullName": "K2D ExtraLight", + "postscriptName": "K2D-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1048, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 560 + } + } + }, + "300": { + "familyName": "K2D", + "fullName": "K2D Light", + "postscriptName": "K2D-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1048, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 565 + } + } + }, + "500": { + "familyName": "K2D", + "fullName": "K2D Medium", + "postscriptName": "K2D-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1048, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 575 + } + } + }, + "600": { + "familyName": "K2D", + "fullName": "K2D SemiBold", + "postscriptName": "K2D-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1048, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 581 + } + } + }, + "700": { + "familyName": "K2D", + "fullName": "K2D Bold", + "postscriptName": "K2D-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1048, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 586 + } + } + }, + "800": { + "familyName": "K2D", + "fullName": "K2D ExtraBold", + "postscriptName": "K2D-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1048, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 592 + } + } + }, + "regular": { + "familyName": "K2D", + "fullName": "K2D Regular", + "postscriptName": "K2D-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1048, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 569 + } + } + }, + "italic": { + "familyName": "K2D", + "fullName": "K2D Italic", + "postscriptName": "K2D-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1048, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 569 + } + } + }, + "800italic": { + "familyName": "K2D", + "fullName": "K2D ExtraBold Italic", + "postscriptName": "K2D-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1048, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 592 + } + } + }, + "700italic": { + "familyName": "K2D", + "fullName": "K2D Bold Italic", + "postscriptName": "K2D-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1048, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 586 + } + } + }, + "600italic": { + "familyName": "K2D", + "fullName": "K2D SemiBold Italic", + "postscriptName": "K2D-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1048, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 581 + } + } + }, + "500italic": { + "familyName": "K2D", + "fullName": "K2D Medium Italic", + "postscriptName": "K2D-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1048, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 575 + } + } + }, + "300italic": { + "familyName": "K2D", + "fullName": "K2D Light Italic", + "postscriptName": "K2D-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1048, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 565 + } + } + }, + "200italic": { + "familyName": "K2D", + "fullName": "K2D ExtraLight Italic", + "postscriptName": "K2D-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1048, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 560 + } + } + }, + "100italic": { + "familyName": "K2D", + "fullName": "K2D Thin Italic", + "postscriptName": "K2D-ThinItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1048, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 556 + } + } + } + } + }, + "kablammo": { + "familyName": "Kablammo", + "fullName": "Kablammo Regular", + "postscriptName": "Kablammo-Regular", + "category": "display", + "capHeight": 1400, + "ascent": 2078, + "descent": -506, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1100, + "xWidthAvg": 1007, + "subsets": { + "latin": { + "xWidthAvg": 1007 + }, + "thai": { + "xWidthAvg": 1252 + } + }, + "variants": { + "regular": { + "familyName": "Kablammo", + "fullName": "Kablammo Regular", + "postscriptName": "Kablammo-Regular", + "category": "display", + "capHeight": 1400, + "ascent": 2078, + "descent": -506, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1100, + "xWidthAvg": 1007, + "subsets": { + "latin": { + "xWidthAvg": 1007 + }, + "thai": { + "xWidthAvg": 1252 + } + } + } + } + }, + "kadwa": { + "familyName": "Kadwa", + "fullName": "Kadwa", + "postscriptName": "Kadwa-Regular", + "category": "serif", + "capHeight": 1434, + "ascent": 2691, + "descent": -1421, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1085, + "xWidthAvg": 992, + "subsets": { + "latin": { + "xWidthAvg": 992 + }, + "thai": { + "xWidthAvg": 1228 + } + }, + "variants": { + "700": { + "familyName": "Kadwa", + "fullName": "Kadwa Bold", + "postscriptName": "Kadwa-Bold", + "category": "serif", + "capHeight": 1444, + "ascent": 2691, + "descent": -1421, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1106, + "xWidthAvg": 1040, + "subsets": { + "latin": { + "xWidthAvg": 1040 + }, + "thai": { + "xWidthAvg": 1228 + } + } + }, + "regular": { + "familyName": "Kadwa", + "fullName": "Kadwa", + "postscriptName": "Kadwa-Regular", + "category": "serif", + "capHeight": 1434, + "ascent": 2691, + "descent": -1421, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1085, + "xWidthAvg": 992, + "subsets": { + "latin": { + "xWidthAvg": 992 + }, + "thai": { + "xWidthAvg": 1228 + } + } + } + } + }, + "kaiseiDecol": { + "familyName": "Kaisei Decol", + "fullName": "Kaisei Decol Regular", + "postscriptName": "KaiseiDecol-Regular", + "category": "serif", + "capHeight": 738, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "500": { + "familyName": "Kaisei Decol", + "fullName": "Kaisei Decol Medium", + "postscriptName": "KaiseiDecol-Medium", + "category": "serif", + "capHeight": 738, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "Kaisei Decol", + "fullName": "Kaisei Decol Bold", + "postscriptName": "KaiseiDecol-Bold", + "category": "serif", + "capHeight": 738, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Kaisei Decol", + "fullName": "Kaisei Decol Regular", + "postscriptName": "KaiseiDecol-Regular", + "category": "serif", + "capHeight": 738, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "kaiseiHarunoUmi": { + "familyName": "Kaisei HarunoUmi", + "fullName": "Kaisei HarunoUmi Regular", + "postscriptName": "KaiseiHarunoUmi-Regular", + "category": "serif", + "capHeight": 738, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "500": { + "familyName": "Kaisei HarunoUmi", + "fullName": "Kaisei HarunoUmi Medium", + "postscriptName": "KaiseiHarunoUmi-Medium", + "category": "serif", + "capHeight": 738, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "Kaisei HarunoUmi", + "fullName": "Kaisei HarunoUmi Bold", + "postscriptName": "KaiseiHarunoUmi-Bold", + "category": "serif", + "capHeight": 738, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Kaisei HarunoUmi", + "fullName": "Kaisei HarunoUmi Regular", + "postscriptName": "KaiseiHarunoUmi-Regular", + "category": "serif", + "capHeight": 738, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "kaiseiOpti": { + "familyName": "Kaisei Opti", + "fullName": "Kaisei Opti Regular", + "postscriptName": "KaiseiOpti-Regular", + "category": "serif", + "capHeight": 738, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "500": { + "familyName": "Kaisei Opti", + "fullName": "Kaisei Opti Medium", + "postscriptName": "KaiseiOpti-Medium", + "category": "serif", + "capHeight": 738, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "Kaisei Opti", + "fullName": "Kaisei Opti Bold", + "postscriptName": "KaiseiOpti-Bold", + "category": "serif", + "capHeight": 738, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Kaisei Opti", + "fullName": "Kaisei Opti Regular", + "postscriptName": "KaiseiOpti-Regular", + "category": "serif", + "capHeight": 738, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "kaiseiTokumin": { + "familyName": "Kaisei Tokumin", + "fullName": "Kaisei Tokumin Regular", + "postscriptName": "KaiseiTokumin-Regular", + "category": "serif", + "capHeight": 738, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "500": { + "familyName": "Kaisei Tokumin", + "fullName": "Kaisei Tokumin Medium", + "postscriptName": "KaiseiTokumin-Medium", + "category": "serif", + "capHeight": 738, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "Kaisei Tokumin", + "fullName": "Kaisei Tokumin Bold", + "postscriptName": "KaiseiTokumin-Bold", + "category": "serif", + "capHeight": 738, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "800": { + "familyName": "Kaisei Tokumin", + "fullName": "Kaisei Tokumin ExtraBold", + "postscriptName": "KaiseiTokumin-ExtraBold", + "category": "serif", + "capHeight": 738, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Kaisei Tokumin", + "fullName": "Kaisei Tokumin Regular", + "postscriptName": "KaiseiTokumin-Regular", + "category": "serif", + "capHeight": 738, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "kalam": { + "familyName": "Kalam", + "fullName": "Kalam", + "postscriptName": "Kalam-Regular", + "category": "handwriting", + "capHeight": 739, + "ascent": 1063, + "descent": -531, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 752 + } + }, + "variants": { + "300": { + "familyName": "Kalam", + "fullName": "Kalam Light", + "postscriptName": "Kalam-Light", + "category": "handwriting", + "capHeight": 727, + "ascent": 1063, + "descent": -531, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 750 + } + } + }, + "700": { + "familyName": "Kalam", + "fullName": "Kalam Bold", + "postscriptName": "Kalam-Bold", + "category": "handwriting", + "capHeight": 760, + "ascent": 1063, + "descent": -531, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 541, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 756 + } + } + }, + "regular": { + "familyName": "Kalam", + "fullName": "Kalam", + "postscriptName": "Kalam-Regular", + "category": "handwriting", + "capHeight": 739, + "ascent": 1063, + "descent": -531, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 752 + } + } + } + } + }, + "kalnia": { + "familyName": "Kalnia", + "fullName": "Kalnia Regular", + "postscriptName": "Kalnia-Regular", + "category": "serif", + "capHeight": 708, + "ascent": 1045, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 523, + "subsets": { + "latin": { + "xWidthAvg": 523 + }, + "thai": { + "xWidthAvg": 540 + } + }, + "variants": { + "100": { + "familyName": "Kalnia", + "fullName": "Kalnia Thin", + "postscriptName": "Kalnia-Thin", + "category": "serif", + "capHeight": 708, + "ascent": 1045, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 540 + } + } + }, + "200": { + "familyName": "Kalnia", + "fullName": "Kalnia ExtraLight", + "postscriptName": "Kalnia-ExtraLight", + "category": "serif", + "capHeight": 708, + "ascent": 1045, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 540 + } + } + }, + "300": { + "familyName": "Kalnia", + "fullName": "Kalnia Light", + "postscriptName": "Kalnia-Light", + "category": "serif", + "capHeight": 708, + "ascent": 1045, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 508, + "subsets": { + "latin": { + "xWidthAvg": 508 + }, + "thai": { + "xWidthAvg": 540 + } + } + }, + "500": { + "familyName": "Kalnia", + "fullName": "Kalnia Medium", + "postscriptName": "Kalnia-Medium", + "category": "serif", + "capHeight": 708, + "ascent": 1045, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 533, + "subsets": { + "latin": { + "xWidthAvg": 533 + }, + "thai": { + "xWidthAvg": 540 + } + } + }, + "600": { + "familyName": "Kalnia", + "fullName": "Kalnia SemiBold", + "postscriptName": "Kalnia-SemiBold", + "category": "serif", + "capHeight": 708, + "ascent": 1045, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 548, + "subsets": { + "latin": { + "xWidthAvg": 548 + }, + "thai": { + "xWidthAvg": 540 + } + } + }, + "700": { + "familyName": "Kalnia", + "fullName": "Kalnia Bold", + "postscriptName": "Kalnia-Bold", + "category": "serif", + "capHeight": 708, + "ascent": 1045, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 562, + "subsets": { + "latin": { + "xWidthAvg": 562 + }, + "thai": { + "xWidthAvg": 540 + } + } + }, + "regular": { + "familyName": "Kalnia", + "fullName": "Kalnia Regular", + "postscriptName": "Kalnia-Regular", + "category": "serif", + "capHeight": 708, + "ascent": 1045, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 523, + "subsets": { + "latin": { + "xWidthAvg": 523 + }, + "thai": { + "xWidthAvg": 540 + } + } + } + } + }, + "kalniaGlaze": { + "familyName": "Kalnia Glaze", + "fullName": "Kalnia Glaze Regular", + "postscriptName": "KalniaGlaze-Regular", + "category": "display", + "capHeight": 708, + "ascent": 1045, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 516, + "subsets": { + "latin": { + "xWidthAvg": 516 + }, + "thai": { + "xWidthAvg": 540 + } + }, + "variants": { + "100": { + "familyName": "Kalnia Glaze", + "fullName": "Kalnia Glaze Thin", + "postscriptName": "KalniaGlaze-Thin", + "category": "display", + "capHeight": 708, + "ascent": 1045, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 540 + } + } + }, + "200": { + "familyName": "Kalnia Glaze", + "fullName": "Kalnia Glaze ExtraLight", + "postscriptName": "KalniaGlaze-ExtraLight", + "category": "display", + "capHeight": 708, + "ascent": 1045, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 540 + } + } + }, + "300": { + "familyName": "Kalnia Glaze", + "fullName": "Kalnia Glaze Light", + "postscriptName": "KalniaGlaze-Light", + "category": "display", + "capHeight": 708, + "ascent": 1045, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 540 + } + } + }, + "500": { + "familyName": "Kalnia Glaze", + "fullName": "Kalnia Glaze Medium", + "postscriptName": "KalniaGlaze-Medium", + "category": "display", + "capHeight": 708, + "ascent": 1045, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 524, + "subsets": { + "latin": { + "xWidthAvg": 524 + }, + "thai": { + "xWidthAvg": 540 + } + } + }, + "600": { + "familyName": "Kalnia Glaze", + "fullName": "Kalnia Glaze SemiBold", + "postscriptName": "KalniaGlaze-SemiBold", + "category": "display", + "capHeight": 708, + "ascent": 1045, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 536, + "subsets": { + "latin": { + "xWidthAvg": 536 + }, + "thai": { + "xWidthAvg": 540 + } + } + }, + "700": { + "familyName": "Kalnia Glaze", + "fullName": "Kalnia Glaze Bold", + "postscriptName": "KalniaGlaze-Bold", + "category": "display", + "capHeight": 708, + "ascent": 1045, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 547, + "subsets": { + "latin": { + "xWidthAvg": 547 + }, + "thai": { + "xWidthAvg": 540 + } + } + }, + "regular": { + "familyName": "Kalnia Glaze", + "fullName": "Kalnia Glaze Regular", + "postscriptName": "KalniaGlaze-Regular", + "category": "display", + "capHeight": 708, + "ascent": 1045, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 516, + "subsets": { + "latin": { + "xWidthAvg": 516 + }, + "thai": { + "xWidthAvg": 540 + } + } + } + } + }, + "kameron": { + "familyName": "Kameron", + "fullName": "Kameron Regular", + "postscriptName": "Kameron-Regular", + "category": "serif", + "capHeight": 1290, + "ascent": 1823, + "descent": -608, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 895, + "xWidthAvg": 914, + "subsets": { + "latin": { + "xWidthAvg": 914 + }, + "thai": { + "xWidthAvg": 1297 + } + }, + "variants": { + "500": { + "familyName": "Kameron", + "fullName": "Kameron Medium", + "postscriptName": "Kameron-Medium", + "category": "serif", + "capHeight": 1296, + "ascent": 1823, + "descent": -608, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 899, + "xWidthAvg": 953, + "subsets": { + "latin": { + "xWidthAvg": 953 + }, + "thai": { + "xWidthAvg": 1330 + } + } + }, + "600": { + "familyName": "Kameron", + "fullName": "Kameron SemiBold", + "postscriptName": "Kameron-SemiBold", + "category": "serif", + "capHeight": 1302, + "ascent": 1823, + "descent": -608, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 904, + "xWidthAvg": 992, + "subsets": { + "latin": { + "xWidthAvg": 992 + }, + "thai": { + "xWidthAvg": 1364 + } + } + }, + "700": { + "familyName": "Kameron", + "fullName": "Kameron Bold", + "postscriptName": "Kameron-Bold", + "category": "serif", + "capHeight": 1308, + "ascent": 1823, + "descent": -608, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 908, + "xWidthAvg": 1031, + "subsets": { + "latin": { + "xWidthAvg": 1031 + }, + "thai": { + "xWidthAvg": 1397 + } + } + }, + "regular": { + "familyName": "Kameron", + "fullName": "Kameron Regular", + "postscriptName": "Kameron-Regular", + "category": "serif", + "capHeight": 1290, + "ascent": 1823, + "descent": -608, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 895, + "xWidthAvg": 914, + "subsets": { + "latin": { + "xWidthAvg": 914 + }, + "thai": { + "xWidthAvg": 1297 + } + } + } + } + }, + "kanit": { + "familyName": "Kanit", + "fullName": "Kanit Regular", + "postscriptName": "Kanit-Regular", + "category": "sans-serif", + "capHeight": 644, + "ascent": 1100, + "descent": -395, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 550 + } + }, + "variants": { + "100": { + "familyName": "Kanit", + "fullName": "Kanit Thin", + "postscriptName": "Kanit-Thin", + "category": "sans-serif", + "capHeight": 644, + "ascent": 1100, + "descent": -395, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 524 + } + } + }, + "200": { + "familyName": "Kanit", + "fullName": "Kanit ExtraLight", + "postscriptName": "Kanit-ExtraLight", + "category": "sans-serif", + "capHeight": 644, + "ascent": 1100, + "descent": -395, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 536 + } + } + }, + "300": { + "familyName": "Kanit", + "fullName": "Kanit Light", + "postscriptName": "Kanit-Light", + "category": "sans-serif", + "capHeight": 644, + "ascent": 1100, + "descent": -395, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 544 + } + } + }, + "500": { + "familyName": "Kanit", + "fullName": "Kanit Medium", + "postscriptName": "Kanit-Medium", + "category": "sans-serif", + "capHeight": 644, + "ascent": 1100, + "descent": -395, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 555 + } + } + }, + "600": { + "familyName": "Kanit", + "fullName": "Kanit SemiBold", + "postscriptName": "Kanit-SemiBold", + "category": "sans-serif", + "capHeight": 644, + "ascent": 1100, + "descent": -395, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 563 + } + } + }, + "700": { + "familyName": "Kanit", + "fullName": "Kanit Bold", + "postscriptName": "Kanit-Bold", + "category": "sans-serif", + "capHeight": 644, + "ascent": 1100, + "descent": -395, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 569 + } + } + }, + "800": { + "familyName": "Kanit", + "fullName": "Kanit ExtraBold", + "postscriptName": "Kanit-ExtraBold", + "category": "sans-serif", + "capHeight": 644, + "ascent": 1100, + "descent": -395, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 577 + } + } + }, + "900": { + "familyName": "Kanit", + "fullName": "Kanit Black", + "postscriptName": "Kanit-Black", + "category": "sans-serif", + "capHeight": 644, + "ascent": 1100, + "descent": -395, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 586 + } + } + }, + "regular": { + "familyName": "Kanit", + "fullName": "Kanit Regular", + "postscriptName": "Kanit-Regular", + "category": "sans-serif", + "capHeight": 644, + "ascent": 1100, + "descent": -395, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 550 + } + } + }, + "italic": { + "familyName": "Kanit", + "fullName": "Kanit Italic", + "postscriptName": "Kanit-Italic", + "category": "sans-serif", + "capHeight": 644, + "ascent": 1100, + "descent": -395, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 549 + } + } + }, + "900italic": { + "familyName": "Kanit", + "fullName": "Kanit Black Italic", + "postscriptName": "Kanit-BlackItalic", + "category": "sans-serif", + "capHeight": 644, + "ascent": 1100, + "descent": -395, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "800italic": { + "familyName": "Kanit", + "fullName": "Kanit ExtraBold Italic", + "postscriptName": "Kanit-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 644, + "ascent": 1100, + "descent": -395, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 576 + } + } + }, + "700italic": { + "familyName": "Kanit", + "fullName": "Kanit Bold Italic", + "postscriptName": "Kanit-BoldItalic", + "category": "sans-serif", + "capHeight": 644, + "ascent": 1100, + "descent": -395, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 568 + } + } + }, + "600italic": { + "familyName": "Kanit", + "fullName": "Kanit SemiBold Italic", + "postscriptName": "Kanit-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 644, + "ascent": 1100, + "descent": -395, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 562 + } + } + }, + "500italic": { + "familyName": "Kanit", + "fullName": "Kanit Medium Italic", + "postscriptName": "Kanit-MediumItalic", + "category": "sans-serif", + "capHeight": 644, + "ascent": 1100, + "descent": -395, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 556 + } + } + }, + "300italic": { + "familyName": "Kanit", + "fullName": "Kanit Light Italic", + "postscriptName": "Kanit-LightItalic", + "category": "sans-serif", + "capHeight": 644, + "ascent": 1100, + "descent": -395, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "200italic": { + "familyName": "Kanit", + "fullName": "Kanit ExtraLight Italic", + "postscriptName": "Kanit-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 644, + "ascent": 1100, + "descent": -395, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 536 + } + } + }, + "100italic": { + "familyName": "Kanit", + "fullName": "Kanit Thin Italic", + "postscriptName": "Kanit-ThinItalic", + "category": "sans-serif", + "capHeight": 644, + "ascent": 1100, + "descent": -395, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 525 + } + } + } + } + }, + "kantumruyPro": { + "familyName": "Kantumruy Pro", + "fullName": "Kantumruy Pro Regular", + "postscriptName": "KantumruyPro-Regular", + "category": "sans-serif", + "capHeight": 750, + "ascent": 920, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "100": { + "familyName": "Kantumruy Pro", + "fullName": "Kantumruy Pro Thin", + "postscriptName": "KantumruyPro-Thin", + "category": "sans-serif", + "capHeight": 750, + "ascent": 920, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 423, + "subsets": { + "latin": { + "xWidthAvg": 423 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200": { + "familyName": "Kantumruy Pro", + "fullName": "Kantumruy Pro ExtraLight", + "postscriptName": "KantumruyPro-ExtraLight", + "category": "sans-serif", + "capHeight": 750, + "ascent": 920, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Kantumruy Pro", + "fullName": "Kantumruy Pro Light", + "postscriptName": "KantumruyPro-Light", + "category": "sans-serif", + "capHeight": 750, + "ascent": 920, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Kantumruy Pro", + "fullName": "Kantumruy Pro Medium", + "postscriptName": "KantumruyPro-Medium", + "category": "sans-serif", + "capHeight": 750, + "ascent": 920, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Kantumruy Pro", + "fullName": "Kantumruy Pro SemiBold", + "postscriptName": "KantumruyPro-SemiBold", + "category": "sans-serif", + "capHeight": 750, + "ascent": 920, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 491, + "subsets": { + "latin": { + "xWidthAvg": 491 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Kantumruy Pro", + "fullName": "Kantumruy Pro Bold", + "postscriptName": "KantumruyPro-Bold", + "category": "sans-serif", + "capHeight": 750, + "ascent": 920, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 497, + "subsets": { + "latin": { + "xWidthAvg": 497 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Kantumruy Pro", + "fullName": "Kantumruy Pro Regular", + "postscriptName": "KantumruyPro-Regular", + "category": "sans-serif", + "capHeight": 750, + "ascent": 920, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Kantumruy Pro", + "fullName": "Kantumruy Pro Italic", + "postscriptName": "KantumruyPro-Italic", + "category": "sans-serif", + "capHeight": 750, + "ascent": 920, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700italic": { + "familyName": "Kantumruy Pro", + "fullName": "Kantumruy Pro Bold Italic", + "postscriptName": "KantumruyPro-BoldItalic", + "category": "sans-serif", + "capHeight": 750, + "ascent": 920, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 496, + "subsets": { + "latin": { + "xWidthAvg": 496 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600italic": { + "familyName": "Kantumruy Pro", + "fullName": "Kantumruy Pro SemiBold Italic", + "postscriptName": "KantumruyPro-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 750, + "ascent": 920, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 491, + "subsets": { + "latin": { + "xWidthAvg": 491 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500italic": { + "familyName": "Kantumruy Pro", + "fullName": "Kantumruy Pro Medium Italic", + "postscriptName": "KantumruyPro-MediumItalic", + "category": "sans-serif", + "capHeight": 750, + "ascent": 920, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300italic": { + "familyName": "Kantumruy Pro", + "fullName": "Kantumruy Pro Light Italic", + "postscriptName": "KantumruyPro-LightItalic", + "category": "sans-serif", + "capHeight": 750, + "ascent": 920, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200italic": { + "familyName": "Kantumruy Pro", + "fullName": "Kantumruy Pro ExtraLight Italic", + "postscriptName": "KantumruyPro-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 750, + "ascent": 920, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "100italic": { + "familyName": "Kantumruy Pro", + "fullName": "Kantumruy Pro Thin Italic", + "postscriptName": "KantumruyPro-ThinItalic", + "category": "sans-serif", + "capHeight": 750, + "ascent": 920, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "karantina": { + "familyName": "Karantina", + "fullName": "Karantina Regular", + "postscriptName": "Karantina-Regular", + "category": "display", + "capHeight": 700, + "ascent": 859, + "descent": -153, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 257, + "subsets": { + "latin": { + "xWidthAvg": 257 + }, + "thai": { + "xWidthAvg": 435 + } + }, + "variants": { + "300": { + "familyName": "Karantina", + "fullName": "Karantina Light", + "postscriptName": "Karantina-Light", + "category": "display", + "capHeight": 700, + "ascent": 859, + "descent": -153, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 223, + "subsets": { + "latin": { + "xWidthAvg": 223 + }, + "thai": { + "xWidthAvg": 381 + } + } + }, + "700": { + "familyName": "Karantina", + "fullName": "Karantina Bold", + "postscriptName": "Karantina-Bold", + "category": "display", + "capHeight": 700, + "ascent": 859, + "descent": -153, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 318, + "subsets": { + "latin": { + "xWidthAvg": 318 + }, + "thai": { + "xWidthAvg": 435 + } + } + }, + "regular": { + "familyName": "Karantina", + "fullName": "Karantina Regular", + "postscriptName": "Karantina-Regular", + "category": "display", + "capHeight": 700, + "ascent": 859, + "descent": -153, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 257, + "subsets": { + "latin": { + "xWidthAvg": 257 + }, + "thai": { + "xWidthAvg": 435 + } + } + } + } + }, + "karla": { + "familyName": "Karla", + "fullName": "Karla Regular", + "postscriptName": "Karla-Regular", + "category": "sans-serif", + "capHeight": 1256, + "ascent": 1834, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 956, + "xWidthAvg": 913, + "subsets": { + "latin": { + "xWidthAvg": 913 + }, + "thai": { + "xWidthAvg": 1031 + } + }, + "variants": { + "200": { + "familyName": "Karla", + "fullName": "Karla ExtraLight", + "postscriptName": "Karla-ExtraLight", + "category": "sans-serif", + "capHeight": 1213, + "ascent": 1834, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 940, + "xWidthAvg": 868, + "subsets": { + "latin": { + "xWidthAvg": 868 + }, + "thai": { + "xWidthAvg": 1031 + } + } + }, + "300": { + "familyName": "Karla", + "fullName": "Karla Light", + "postscriptName": "Karla-Light", + "category": "sans-serif", + "capHeight": 1235, + "ascent": 1834, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 948, + "xWidthAvg": 891, + "subsets": { + "latin": { + "xWidthAvg": 891 + }, + "thai": { + "xWidthAvg": 1031 + } + } + }, + "500": { + "familyName": "Karla", + "fullName": "Karla Medium", + "postscriptName": "Karla-Medium", + "category": "sans-serif", + "capHeight": 1274, + "ascent": 1834, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 963, + "xWidthAvg": 932, + "subsets": { + "latin": { + "xWidthAvg": 932 + }, + "thai": { + "xWidthAvg": 1031 + } + } + }, + "600": { + "familyName": "Karla", + "fullName": "Karla SemiBold", + "postscriptName": "Karla-SemiBold", + "category": "sans-serif", + "capHeight": 1286, + "ascent": 1834, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 968, + "xWidthAvg": 945, + "subsets": { + "latin": { + "xWidthAvg": 945 + }, + "thai": { + "xWidthAvg": 1031 + } + } + }, + "700": { + "familyName": "Karla", + "fullName": "Karla Bold", + "postscriptName": "Karla-Bold", + "category": "sans-serif", + "capHeight": 1298, + "ascent": 1834, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 972, + "xWidthAvg": 957, + "subsets": { + "latin": { + "xWidthAvg": 957 + }, + "thai": { + "xWidthAvg": 1031 + } + } + }, + "800": { + "familyName": "Karla", + "fullName": "Karla ExtraBold", + "postscriptName": "Karla-ExtraBold", + "category": "sans-serif", + "capHeight": 1342, + "ascent": 1834, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 989, + "xWidthAvg": 1003, + "subsets": { + "latin": { + "xWidthAvg": 1003 + }, + "thai": { + "xWidthAvg": 1031 + } + } + }, + "regular": { + "familyName": "Karla", + "fullName": "Karla Regular", + "postscriptName": "Karla-Regular", + "category": "sans-serif", + "capHeight": 1256, + "ascent": 1834, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 956, + "xWidthAvg": 913, + "subsets": { + "latin": { + "xWidthAvg": 913 + }, + "thai": { + "xWidthAvg": 1031 + } + } + }, + "italic": { + "familyName": "Karla", + "fullName": "Karla Italic", + "postscriptName": "Karla-Italic", + "category": "sans-serif", + "capHeight": 1258, + "ascent": 1834, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 956, + "xWidthAvg": 826, + "subsets": { + "latin": { + "xWidthAvg": 826 + }, + "thai": { + "xWidthAvg": 1031 + } + } + }, + "800italic": { + "familyName": "Karla", + "fullName": "Karla ExtraBold Italic", + "postscriptName": "Karla-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 1346, + "ascent": 1834, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 991, + "xWidthAvg": 909, + "subsets": { + "latin": { + "xWidthAvg": 909 + }, + "thai": { + "xWidthAvg": 1031 + } + } + }, + "700italic": { + "familyName": "Karla", + "fullName": "Karla Bold Italic", + "postscriptName": "Karla-BoldItalic", + "category": "sans-serif", + "capHeight": 1298, + "ascent": 1834, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 972, + "xWidthAvg": 863, + "subsets": { + "latin": { + "xWidthAvg": 863 + }, + "thai": { + "xWidthAvg": 1031 + } + } + }, + "600italic": { + "familyName": "Karla", + "fullName": "Karla SemiBold Italic", + "postscriptName": "Karla-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 1288, + "ascent": 1834, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 968, + "xWidthAvg": 854, + "subsets": { + "latin": { + "xWidthAvg": 854 + }, + "thai": { + "xWidthAvg": 1031 + } + } + }, + "500italic": { + "familyName": "Karla", + "fullName": "Karla Medium Italic", + "postscriptName": "Karla-MediumItalic", + "category": "sans-serif", + "capHeight": 1277, + "ascent": 1834, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 964, + "xWidthAvg": 844, + "subsets": { + "latin": { + "xWidthAvg": 844 + }, + "thai": { + "xWidthAvg": 1031 + } + } + }, + "300italic": { + "familyName": "Karla", + "fullName": "Karla Light Italic", + "postscriptName": "Karla-LightItalic", + "category": "sans-serif", + "capHeight": 1237, + "ascent": 1834, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 948, + "xWidthAvg": 806, + "subsets": { + "latin": { + "xWidthAvg": 806 + }, + "thai": { + "xWidthAvg": 1031 + } + } + }, + "200italic": { + "familyName": "Karla", + "fullName": "Karla ExtraLight Italic", + "postscriptName": "Karla-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 1215, + "ascent": 1834, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 939, + "xWidthAvg": 785, + "subsets": { + "latin": { + "xWidthAvg": 785 + }, + "thai": { + "xWidthAvg": 1031 + } + } + } + } + }, + "karlaTamilInclined": { + "familyName": "Karla Tamil Inclined", + "fullName": "Karla Tamil Inclined", + "postscriptName": "KarlaTamilInclined-Regular", + "category": "sans-serif", + "capHeight": 717, + "ascent": 796, + "descent": -345, + "lineGap": 17, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 495 + } + }, + "variants": { + "700": { + "familyName": "Karla Tamil Inclined", + "fullName": "Karla Tamil Inclined Bold", + "postscriptName": "KarlaTamilInclined-Bold", + "category": "sans-serif", + "capHeight": 717, + "ascent": 796, + "descent": -345, + "lineGap": 17, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 524 + } + } + }, + "regular": { + "familyName": "Karla Tamil Inclined", + "fullName": "Karla Tamil Inclined", + "postscriptName": "KarlaTamilInclined-Regular", + "category": "sans-serif", + "capHeight": 717, + "ascent": 796, + "descent": -345, + "lineGap": 17, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 495 + } + } + } + } + }, + "karlaTamilUpright": { + "familyName": "Karla Tamil Upright", + "fullName": "Karla Tamil Upright", + "postscriptName": "KarlaTamilUpright-Regular", + "category": "sans-serif", + "capHeight": 727, + "ascent": 750, + "descent": -250, + "lineGap": 9, + "unitsPerEm": 1000, + "xHeight": 503, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 545 + } + }, + "variants": { + "700": { + "familyName": "Karla Tamil Upright", + "fullName": "Karla Tamil Upright Bold", + "postscriptName": "KarlaTamilUpright-Bold", + "category": "sans-serif", + "capHeight": 741, + "ascent": 750, + "descent": -250, + "lineGap": 9, + "unitsPerEm": 1000, + "xHeight": 509, + "xWidthAvg": 515, + "subsets": { + "latin": { + "xWidthAvg": 515 + }, + "thai": { + "xWidthAvg": 574 + } + } + }, + "regular": { + "familyName": "Karla Tamil Upright", + "fullName": "Karla Tamil Upright", + "postscriptName": "KarlaTamilUpright-Regular", + "category": "sans-serif", + "capHeight": 727, + "ascent": 750, + "descent": -250, + "lineGap": 9, + "unitsPerEm": 1000, + "xHeight": 503, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 545 + } + } + } + } + }, + "karma": { + "familyName": "Karma", + "fullName": "Karma Regular", + "postscriptName": "Karma-Regular", + "category": "serif", + "capHeight": 677, + "ascent": 945, + "descent": -508, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 489, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 518 + } + }, + "variants": { + "300": { + "familyName": "Karma", + "fullName": "Karma Light", + "postscriptName": "Karma-Light", + "category": "serif", + "capHeight": 675, + "ascent": 945, + "descent": -474, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 518 + } + } + }, + "500": { + "familyName": "Karma", + "fullName": "Karma Medium", + "postscriptName": "Karma-Medium", + "category": "serif", + "capHeight": 679, + "ascent": 945, + "descent": -548, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 518 + } + } + }, + "600": { + "familyName": "Karma", + "fullName": "Karma SemiBold", + "postscriptName": "Karma-SemiBold", + "category": "serif", + "capHeight": 682, + "ascent": 950, + "descent": -594, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 518 + } + } + }, + "700": { + "familyName": "Karma", + "fullName": "Karma Bold", + "postscriptName": "Karma-Bold", + "category": "serif", + "capHeight": 685, + "ascent": 982, + "descent": -646, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 518 + } + } + }, + "regular": { + "familyName": "Karma", + "fullName": "Karma Regular", + "postscriptName": "Karma-Regular", + "category": "serif", + "capHeight": 677, + "ascent": 945, + "descent": -508, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 489, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 518 + } + } + } + } + }, + "katibeh": { + "familyName": "Katibeh", + "fullName": "Katibeh Regular", + "postscriptName": "Katibeh-Regular", + "category": "display", + "capHeight": 700, + "ascent": 490, + "descent": -510, + "lineGap": 200, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 321, + "subsets": { + "latin": { + "xWidthAvg": 321 + }, + "thai": { + "xWidthAvg": 364 + } + }, + "variants": { + "regular": { + "familyName": "Katibeh", + "fullName": "Katibeh Regular", + "postscriptName": "Katibeh-Regular", + "category": "display", + "capHeight": 700, + "ascent": 490, + "descent": -510, + "lineGap": 200, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 321, + "subsets": { + "latin": { + "xWidthAvg": 321 + }, + "thai": { + "xWidthAvg": 364 + } + } + } + } + }, + "kaushanScript": { + "familyName": "Kaushan Script", + "fullName": "Kaushan Script", + "postscriptName": "KaushanScript-Regular", + "category": "handwriting", + "capHeight": 714, + "ascent": 1084, + "descent": -367, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 452, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 444 + } + }, + "variants": { + "regular": { + "familyName": "Kaushan Script", + "fullName": "Kaushan Script", + "postscriptName": "KaushanScript-Regular", + "category": "handwriting", + "capHeight": 714, + "ascent": 1084, + "descent": -367, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 452, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 444 + } + } + } + } + }, + "kavivanar": { + "familyName": "Kavivanar", + "fullName": "Kavivanar Regular", + "postscriptName": "Kavivanar-Regular", + "category": "handwriting", + "ascent": 1065, + "descent": -417, + "lineGap": 0, + "unitsPerEm": 1000, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 347 + } + }, + "variants": { + "regular": { + "familyName": "Kavivanar", + "fullName": "Kavivanar Regular", + "postscriptName": "Kavivanar-Regular", + "category": "handwriting", + "ascent": 1065, + "descent": -417, + "lineGap": 0, + "unitsPerEm": 1000, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 347 + } + } + } + } + }, + "kavoon": { + "familyName": "Kavoon", + "fullName": "Kavoon", + "postscriptName": "Kavoon-Regular", + "category": "display", + "capHeight": 1530, + "ascent": 2020, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1185, + "xWidthAvg": 998, + "subsets": { + "latin": { + "xWidthAvg": 998 + }, + "thai": { + "xWidthAvg": 1872 + } + }, + "variants": { + "regular": { + "familyName": "Kavoon", + "fullName": "Kavoon", + "postscriptName": "Kavoon-Regular", + "category": "display", + "capHeight": 1530, + "ascent": 2020, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1185, + "xWidthAvg": 998, + "subsets": { + "latin": { + "xWidthAvg": 998 + }, + "thai": { + "xWidthAvg": 1872 + } + } + } + } + }, + "kayPhoDu": { + "familyName": "Kay Pho Du", + "fullName": "Kay Pho Du", + "postscriptName": "KayPhoDu-Regular", + "category": "serif", + "capHeight": 1563, + "ascent": 1944, + "descent": -525, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1050, + "xWidthAvg": 945, + "subsets": { + "latin": { + "xWidthAvg": 945 + }, + "thai": { + "xWidthAvg": 1966 + } + }, + "variants": { + "500": { + "familyName": "Kay Pho Du", + "fullName": "Kay Pho Du Medium", + "postscriptName": "KayPhoDu-Medium", + "category": "serif", + "capHeight": 1563, + "ascent": 1944, + "descent": -525, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1050, + "xWidthAvg": 947, + "subsets": { + "latin": { + "xWidthAvg": 947 + }, + "thai": { + "xWidthAvg": 1955 + } + } + }, + "600": { + "familyName": "Kay Pho Du", + "fullName": "Kay Pho Du SemiBold", + "postscriptName": "KayPhoDu-SemiBold", + "category": "serif", + "capHeight": 1563, + "ascent": 1944, + "descent": -525, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1050, + "xWidthAvg": 948, + "subsets": { + "latin": { + "xWidthAvg": 948 + }, + "thai": { + "xWidthAvg": 1944 + } + } + }, + "700": { + "familyName": "Kay Pho Du", + "fullName": "Kay Pho Du Bold", + "postscriptName": "KayPhoDu-Bold", + "category": "serif", + "capHeight": 1563, + "ascent": 1944, + "descent": -525, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1050, + "xWidthAvg": 950, + "subsets": { + "latin": { + "xWidthAvg": 950 + }, + "thai": { + "xWidthAvg": 1933 + } + } + }, + "regular": { + "familyName": "Kay Pho Du", + "fullName": "Kay Pho Du", + "postscriptName": "KayPhoDu-Regular", + "category": "serif", + "capHeight": 1563, + "ascent": 1944, + "descent": -525, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1050, + "xWidthAvg": 945, + "subsets": { + "latin": { + "xWidthAvg": 945 + }, + "thai": { + "xWidthAvg": 1966 + } + } + } + } + }, + "kdamThmorPro": { + "familyName": "Kdam Thmor Pro", + "fullName": "Kdam Thmor Pro Regular", + "postscriptName": "KdamThmorPro-Regular", + "category": "sans-serif", + "capHeight": 793, + "ascent": 1146, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 612, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Kdam Thmor Pro", + "fullName": "Kdam Thmor Pro Regular", + "postscriptName": "KdamThmorPro-Regular", + "category": "sans-serif", + "capHeight": 793, + "ascent": 1146, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 612, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "keaniaOne": { + "familyName": "Keania One", + "fullName": "Keania One", + "postscriptName": "KeaniaOne-Regular", + "category": "display", + "capHeight": 723, + "ascent": 989, + "descent": -228, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 250 + } + }, + "variants": { + "regular": { + "familyName": "Keania One", + "fullName": "Keania One", + "postscriptName": "KeaniaOne-Regular", + "category": "display", + "capHeight": 723, + "ascent": 989, + "descent": -228, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 250 + } + } + } + } + }, + "kellySlab": { + "familyName": "Kelly Slab", + "fullName": "Kelly Slab", + "postscriptName": "KellySlab-Regular", + "category": "display", + "capHeight": 750, + "ascent": 962, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Kelly Slab", + "fullName": "Kelly Slab", + "postscriptName": "KellySlab-Regular", + "category": "display", + "capHeight": 750, + "ascent": 962, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "kenia": { + "familyName": "Kenia", + "fullName": "Kenia", + "postscriptName": "Kenia-Regular", + "category": "display", + "capHeight": 727, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 376, + "subsets": { + "latin": { + "xWidthAvg": 376 + }, + "thai": { + "xWidthAvg": 194 + } + }, + "variants": { + "regular": { + "familyName": "Kenia", + "fullName": "Kenia", + "postscriptName": "Kenia-Regular", + "category": "display", + "capHeight": 727, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 376, + "subsets": { + "latin": { + "xWidthAvg": 376 + }, + "thai": { + "xWidthAvg": 194 + } + } + } + } + }, + "khand": { + "familyName": "Khand", + "fullName": "Khand Regular", + "postscriptName": "Khand-Regular", + "category": "sans-serif", + "capHeight": 672, + "ascent": 1050, + "descent": -479, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 569, + "xWidthAvg": 351, + "subsets": { + "latin": { + "xWidthAvg": 351 + }, + "thai": { + "xWidthAvg": 750 + } + }, + "variants": { + "300": { + "familyName": "Khand", + "fullName": "Khand Light", + "postscriptName": "Khand-Light", + "category": "sans-serif", + "capHeight": 666, + "ascent": 1050, + "descent": -479, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 563, + "xWidthAvg": 346, + "subsets": { + "latin": { + "xWidthAvg": 346 + }, + "thai": { + "xWidthAvg": 750 + } + } + }, + "500": { + "familyName": "Khand", + "fullName": "Khand Medium", + "postscriptName": "Khand-Medium", + "category": "sans-serif", + "capHeight": 678, + "ascent": 1050, + "descent": -479, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 356, + "subsets": { + "latin": { + "xWidthAvg": 356 + }, + "thai": { + "xWidthAvg": 750 + } + } + }, + "600": { + "familyName": "Khand", + "fullName": "Khand SemiBold", + "postscriptName": "Khand-SemiBold", + "category": "sans-serif", + "capHeight": 685, + "ascent": 1050, + "descent": -479, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 582, + "xWidthAvg": 362, + "subsets": { + "latin": { + "xWidthAvg": 362 + }, + "thai": { + "xWidthAvg": 750 + } + } + }, + "700": { + "familyName": "Khand", + "fullName": "Khand Bold", + "postscriptName": "Khand-Bold", + "category": "sans-serif", + "capHeight": 693, + "ascent": 1050, + "descent": -479, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 590, + "xWidthAvg": 368, + "subsets": { + "latin": { + "xWidthAvg": 368 + }, + "thai": { + "xWidthAvg": 750 + } + } + }, + "regular": { + "familyName": "Khand", + "fullName": "Khand Regular", + "postscriptName": "Khand-Regular", + "category": "sans-serif", + "capHeight": 672, + "ascent": 1050, + "descent": -479, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 569, + "xWidthAvg": 351, + "subsets": { + "latin": { + "xWidthAvg": 351 + }, + "thai": { + "xWidthAvg": 750 + } + } + } + } + }, + "khmer": { + "familyName": "Khmer", + "fullName": "Khmer", + "postscriptName": "Khmer", + "category": "sans-serif", + "capHeight": 1462, + "ascent": 2300, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 1761, + "subsets": { + "latin": { + "xWidthAvg": 1761 + }, + "thai": { + "xWidthAvg": 2048 + } + }, + "variants": { + "regular": { + "familyName": "Khmer", + "fullName": "Khmer", + "postscriptName": "Khmer", + "category": "sans-serif", + "capHeight": 1462, + "ascent": 2300, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 1761, + "subsets": { + "latin": { + "xWidthAvg": 1761 + }, + "thai": { + "xWidthAvg": 2048 + } + } + } + } + }, + "khula": { + "familyName": "Khula", + "fullName": "Khula Regular", + "postscriptName": "Khula-Regular", + "category": "sans-serif", + "capHeight": 1316, + "ascent": 1978, + "descent": -1198, + "lineGap": 0, + "unitsPerEm": 1978, + "xHeight": 986, + "xWidthAvg": 873, + "subsets": { + "latin": { + "xWidthAvg": 873 + }, + "thai": { + "xWidthAvg": 1040 + } + }, + "variants": { + "300": { + "familyName": "Khula", + "fullName": "Khula Light", + "postscriptName": "Khula-Light", + "category": "sans-serif", + "capHeight": 1316, + "ascent": 1978, + "descent": -1198, + "lineGap": 0, + "unitsPerEm": 1978, + "xHeight": 978, + "xWidthAvg": 841, + "subsets": { + "latin": { + "xWidthAvg": 841 + }, + "thai": { + "xWidthAvg": 1009 + } + } + }, + "600": { + "familyName": "Khula", + "fullName": "Khula SemiBold", + "postscriptName": "Khula-SemiBold", + "category": "sans-serif", + "capHeight": 1316, + "ascent": 1978, + "descent": -1198, + "lineGap": 0, + "unitsPerEm": 1978, + "xHeight": 995, + "xWidthAvg": 904, + "subsets": { + "latin": { + "xWidthAvg": 904 + }, + "thai": { + "xWidthAvg": 1067 + } + } + }, + "700": { + "familyName": "Khula", + "fullName": "Khula Bold", + "postscriptName": "Khula-Bold", + "category": "sans-serif", + "capHeight": 1316, + "ascent": 1978, + "descent": -1198, + "lineGap": 0, + "unitsPerEm": 1978, + "xHeight": 1006, + "xWidthAvg": 936, + "subsets": { + "latin": { + "xWidthAvg": 936 + }, + "thai": { + "xWidthAvg": 1104 + } + } + }, + "800": { + "familyName": "Khula", + "fullName": "Khula ExtraBold", + "postscriptName": "Khula-ExtraBold", + "category": "sans-serif", + "capHeight": 1316, + "ascent": 1978, + "descent": -1198, + "lineGap": 0, + "unitsPerEm": 1978, + "xHeight": 1020, + "xWidthAvg": 969, + "subsets": { + "latin": { + "xWidthAvg": 969 + }, + "thai": { + "xWidthAvg": 1133 + } + } + }, + "regular": { + "familyName": "Khula", + "fullName": "Khula Regular", + "postscriptName": "Khula-Regular", + "category": "sans-serif", + "capHeight": 1316, + "ascent": 1978, + "descent": -1198, + "lineGap": 0, + "unitsPerEm": 1978, + "xHeight": 986, + "xWidthAvg": 873, + "subsets": { + "latin": { + "xWidthAvg": 873 + }, + "thai": { + "xWidthAvg": 1040 + } + } + } + } + }, + "kings": { + "familyName": "Kings", + "fullName": "Kings Regular", + "postscriptName": "Kings-Regular", + "category": "handwriting", + "capHeight": 630, + "ascent": 950, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 370, + "subsets": { + "latin": { + "xWidthAvg": 370 + }, + "thai": { + "xWidthAvg": 518 + } + }, + "variants": { + "regular": { + "familyName": "Kings", + "fullName": "Kings Regular", + "postscriptName": "Kings-Regular", + "category": "handwriting", + "capHeight": 630, + "ascent": 950, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 370, + "subsets": { + "latin": { + "xWidthAvg": 370 + }, + "thai": { + "xWidthAvg": 518 + } + } + } + } + }, + "kirangHaerang": { + "familyName": "Kirang Haerang", + "fullName": "Kirang Haerang Regular", + "postscriptName": "KirangHaerang-Regular", + "category": "display", + "capHeight": 558, + "ascent": 750, + "descent": -250, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 337, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 603 + } + }, + "variants": { + "regular": { + "familyName": "Kirang Haerang", + "fullName": "Kirang Haerang Regular", + "postscriptName": "KirangHaerang-Regular", + "category": "display", + "capHeight": 558, + "ascent": 750, + "descent": -250, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 337, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 603 + } + } + } + } + }, + "kiteOne": { + "familyName": "Kite One", + "fullName": "Kite One Regular", + "postscriptName": "KiteOne-Regular", + "category": "sans-serif", + "capHeight": 860, + "ascent": 1094, + "descent": -351, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 705 + } + }, + "variants": { + "regular": { + "familyName": "Kite One", + "fullName": "Kite One Regular", + "postscriptName": "KiteOne-Regular", + "category": "sans-serif", + "capHeight": 860, + "ascent": 1094, + "descent": -351, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 705 + } + } + } + } + }, + "kiwiMaru": { + "familyName": "Kiwi Maru", + "fullName": "Kiwi Maru Regular", + "postscriptName": "KiwiMaru-Regular", + "category": "serif", + "capHeight": 727, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 517, + "subsets": { + "latin": { + "xWidthAvg": 517 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "300": { + "familyName": "Kiwi Maru", + "fullName": "Kiwi Maru Light", + "postscriptName": "KiwiMaru-Light", + "category": "serif", + "capHeight": 720, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 507, + "subsets": { + "latin": { + "xWidthAvg": 507 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "500": { + "familyName": "Kiwi Maru", + "fullName": "Kiwi Maru Medium", + "postscriptName": "KiwiMaru-Medium", + "category": "serif", + "capHeight": 731, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Kiwi Maru", + "fullName": "Kiwi Maru Regular", + "postscriptName": "KiwiMaru-Regular", + "category": "serif", + "capHeight": 727, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 517, + "subsets": { + "latin": { + "xWidthAvg": 517 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "kleeOne": { + "familyName": "Klee One", + "fullName": "Klee One Regular", + "postscriptName": "KleeOne-Regular", + "category": "handwriting", + "capHeight": 695, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "600": { + "familyName": "Klee One", + "fullName": "Klee One SemiBold", + "postscriptName": "KleeOne-SemiBold", + "category": "handwriting", + "capHeight": 695, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Klee One", + "fullName": "Klee One Regular", + "postscriptName": "KleeOne-Regular", + "category": "handwriting", + "capHeight": 695, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "knewave": { + "familyName": "Knewave", + "fullName": "Knewave", + "postscriptName": "Knewave-Regular", + "category": "display", + "capHeight": 780, + "ascent": 1169, + "descent": -385, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 497, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 312 + } + }, + "variants": { + "regular": { + "familyName": "Knewave", + "fullName": "Knewave", + "postscriptName": "Knewave-Regular", + "category": "display", + "capHeight": 780, + "ascent": 1169, + "descent": -385, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 497, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 312 + } + } + } + } + }, + "koHo": { + "familyName": "KoHo", + "fullName": "KoHo Regular", + "postscriptName": "KoHo-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1045, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 556 + } + }, + "variants": { + "200": { + "familyName": "KoHo", + "fullName": "KoHo ExtraLight", + "postscriptName": "KoHo-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1045, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 418, + "subsets": { + "latin": { + "xWidthAvg": 418 + }, + "thai": { + "xWidthAvg": 535 + } + } + }, + "300": { + "familyName": "KoHo", + "fullName": "KoHo Light", + "postscriptName": "KoHo-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1045, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 546 + } + } + }, + "500": { + "familyName": "KoHo", + "fullName": "KoHo Medium", + "postscriptName": "KoHo-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1045, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 568 + } + } + }, + "600": { + "familyName": "KoHo", + "fullName": "KoHo SemiBold", + "postscriptName": "KoHo-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1045, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 580 + } + } + }, + "700": { + "familyName": "KoHo", + "fullName": "KoHo Bold", + "postscriptName": "KoHo-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1045, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 591 + } + } + }, + "regular": { + "familyName": "KoHo", + "fullName": "KoHo Regular", + "postscriptName": "KoHo-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1045, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 556 + } + } + }, + "italic": { + "familyName": "KoHo", + "fullName": "KoHo Italic", + "postscriptName": "KoHo-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1045, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 556 + } + } + }, + "700italic": { + "familyName": "KoHo", + "fullName": "KoHo Bold Italic", + "postscriptName": "KoHo-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1045, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 591 + } + } + }, + "600italic": { + "familyName": "KoHo", + "fullName": "KoHo SemiBold Italic", + "postscriptName": "KoHo-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1045, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 580 + } + } + }, + "500italic": { + "familyName": "KoHo", + "fullName": "KoHo Medium Italic", + "postscriptName": "KoHo-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1045, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 568 + } + } + }, + "300italic": { + "familyName": "KoHo", + "fullName": "KoHo Light Italic", + "postscriptName": "KoHo-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1045, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 546 + } + } + }, + "200italic": { + "familyName": "KoHo", + "fullName": "KoHo ExtraLight Italic", + "postscriptName": "KoHo-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1045, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 418, + "subsets": { + "latin": { + "xWidthAvg": 418 + }, + "thai": { + "xWidthAvg": 535 + } + } + } + } + }, + "kodchasan": { + "familyName": "Kodchasan", + "fullName": "Kodchasan Regular", + "postscriptName": "Kodchasan-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1024, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 501, + "subsets": { + "latin": { + "xWidthAvg": 501 + }, + "thai": { + "xWidthAvg": 628 + } + }, + "variants": { + "200": { + "familyName": "Kodchasan", + "fullName": "Kodchasan ExtraLight", + "postscriptName": "Kodchasan-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1024, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 622 + } + } + }, + "300": { + "familyName": "Kodchasan", + "fullName": "Kodchasan Light", + "postscriptName": "Kodchasan-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1024, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 625 + } + } + }, + "500": { + "familyName": "Kodchasan", + "fullName": "Kodchasan Medium", + "postscriptName": "Kodchasan-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1024, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 632 + } + } + }, + "600": { + "familyName": "Kodchasan", + "fullName": "Kodchasan SemiBold", + "postscriptName": "Kodchasan-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1024, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 509, + "subsets": { + "latin": { + "xWidthAvg": 509 + }, + "thai": { + "xWidthAvg": 636 + } + } + }, + "700": { + "familyName": "Kodchasan", + "fullName": "Kodchasan Bold", + "postscriptName": "Kodchasan-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1024, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 513, + "subsets": { + "latin": { + "xWidthAvg": 513 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "regular": { + "familyName": "Kodchasan", + "fullName": "Kodchasan Regular", + "postscriptName": "Kodchasan-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1024, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 501, + "subsets": { + "latin": { + "xWidthAvg": 501 + }, + "thai": { + "xWidthAvg": 628 + } + } + }, + "italic": { + "familyName": "Kodchasan", + "fullName": "Kodchasan Italic", + "postscriptName": "Kodchasan-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1024, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 508, + "subsets": { + "latin": { + "xWidthAvg": 508 + }, + "thai": { + "xWidthAvg": 628 + } + } + }, + "700italic": { + "familyName": "Kodchasan", + "fullName": "Kodchasan Bold Italic", + "postscriptName": "Kodchasan-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1024, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "600italic": { + "familyName": "Kodchasan", + "fullName": "Kodchasan SemiBold Italic", + "postscriptName": "Kodchasan-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1024, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 515, + "subsets": { + "latin": { + "xWidthAvg": 515 + }, + "thai": { + "xWidthAvg": 636 + } + } + }, + "500italic": { + "familyName": "Kodchasan", + "fullName": "Kodchasan Medium Italic", + "postscriptName": "Kodchasan-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1024, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 632 + } + } + }, + "300italic": { + "familyName": "Kodchasan", + "fullName": "Kodchasan Light Italic", + "postscriptName": "Kodchasan-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1024, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 507, + "subsets": { + "latin": { + "xWidthAvg": 507 + }, + "thai": { + "xWidthAvg": 625 + } + } + }, + "200italic": { + "familyName": "Kodchasan", + "fullName": "Kodchasan ExtraLight Italic", + "postscriptName": "Kodchasan-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1024, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 621 + } + } + } + } + }, + "kodeMono": { + "familyName": "Kode Mono", + "fullName": "Kode Mono Regular", + "postscriptName": "KodeMono-Regular", + "category": "monospace", + "capHeight": 700, + "ascent": 980, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "500": { + "familyName": "Kode Mono", + "fullName": "Kode Mono Medium", + "postscriptName": "KodeMono-Medium", + "category": "monospace", + "capHeight": 700, + "ascent": 980, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Kode Mono", + "fullName": "Kode Mono SemiBold", + "postscriptName": "KodeMono-SemiBold", + "category": "monospace", + "capHeight": 700, + "ascent": 980, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Kode Mono", + "fullName": "Kode Mono Bold", + "postscriptName": "KodeMono-Bold", + "category": "monospace", + "capHeight": 700, + "ascent": 980, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Kode Mono", + "fullName": "Kode Mono Regular", + "postscriptName": "KodeMono-Regular", + "category": "monospace", + "capHeight": 700, + "ascent": 980, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "kohSantepheap": { + "familyName": "Koh Santepheap", + "fullName": "Koh Santepheap Regular", + "postscriptName": "KohSantepheap-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 2050, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 500, + "xWidthAvg": 986, + "subsets": { + "latin": { + "xWidthAvg": 986 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "100": { + "familyName": "Koh Santepheap", + "fullName": "Koh Santepheap Thin", + "postscriptName": "KohSantepheap-Thin", + "category": "serif", + "capHeight": 700, + "ascent": 2050, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 500, + "xWidthAvg": 908, + "subsets": { + "latin": { + "xWidthAvg": 908 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "300": { + "familyName": "Koh Santepheap", + "fullName": "Koh Santepheap Light", + "postscriptName": "KohSantepheap-Light", + "category": "serif", + "capHeight": 700, + "ascent": 2050, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 500, + "xWidthAvg": 950, + "subsets": { + "latin": { + "xWidthAvg": 950 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "700": { + "familyName": "Koh Santepheap", + "fullName": "Koh Santepheap Bold", + "postscriptName": "KohSantepheap-Bold", + "category": "serif", + "capHeight": 700, + "ascent": 2050, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 500, + "xWidthAvg": 1047, + "subsets": { + "latin": { + "xWidthAvg": 1047 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "900": { + "familyName": "Koh Santepheap", + "fullName": "Koh Santepheap Black", + "postscriptName": "KohSantepheap-Black", + "category": "serif", + "capHeight": 700, + "ascent": 2050, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 500, + "xWidthAvg": 1092, + "subsets": { + "latin": { + "xWidthAvg": 1092 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "regular": { + "familyName": "Koh Santepheap", + "fullName": "Koh Santepheap Regular", + "postscriptName": "KohSantepheap-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 2050, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 500, + "xWidthAvg": 986, + "subsets": { + "latin": { + "xWidthAvg": 986 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "kolkerBrush": { + "familyName": "Kolker Brush", + "fullName": "Kolker Brush Regular", + "postscriptName": "KolkerBrush-Regular", + "category": "handwriting", + "capHeight": 480, + "ascent": 750, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 205, + "xWidthAvg": 226, + "subsets": { + "latin": { + "xWidthAvg": 226 + }, + "thai": { + "xWidthAvg": 558 + } + }, + "variants": { + "regular": { + "familyName": "Kolker Brush", + "fullName": "Kolker Brush Regular", + "postscriptName": "KolkerBrush-Regular", + "category": "handwriting", + "capHeight": 480, + "ascent": 750, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 205, + "xWidthAvg": 226, + "subsets": { + "latin": { + "xWidthAvg": 226 + }, + "thai": { + "xWidthAvg": 558 + } + } + } + } + }, + "konkhmerSleokchher": { + "familyName": "Konkhmer Sleokchher", + "fullName": "Konkhmer Sleokchher Regular", + "postscriptName": "KonkhmerSleokchher-Regular", + "category": "display", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 1012, + "subsets": { + "latin": { + "xWidthAvg": 1012 + }, + "thai": { + "xWidthAvg": 1344 + } + }, + "variants": { + "regular": { + "familyName": "Konkhmer Sleokchher", + "fullName": "Konkhmer Sleokchher Regular", + "postscriptName": "KonkhmerSleokchher-Regular", + "category": "display", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 1012, + "subsets": { + "latin": { + "xWidthAvg": 1012 + }, + "thai": { + "xWidthAvg": 1344 + } + } + } + } + }, + "kosugi": { + "familyName": "Kosugi", + "fullName": "Kosugi Regular", + "postscriptName": "Kosugi-Regular", + "category": "sans-serif", + "capHeight": 774, + "ascent": 901, + "descent": -123, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 539, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Kosugi", + "fullName": "Kosugi Regular", + "postscriptName": "Kosugi-Regular", + "category": "sans-serif", + "capHeight": 774, + "ascent": 901, + "descent": -123, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 539, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "kosugiMaru": { + "familyName": "Kosugi Maru", + "fullName": "Kosugi Maru Regular", + "postscriptName": "KosugiMaru-Regular", + "category": "sans-serif", + "capHeight": 781, + "ascent": 901, + "descent": -123, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 546, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Kosugi Maru", + "fullName": "Kosugi Maru Regular", + "postscriptName": "KosugiMaru-Regular", + "category": "sans-serif", + "capHeight": 781, + "ascent": 901, + "descent": -123, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 546, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "kottaOne": { + "familyName": "Kotta One", + "fullName": "Kotta One", + "postscriptName": "KottaOne-Regular", + "category": "serif", + "capHeight": 212, + "ascent": 915, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 76, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 0 + } + }, + "variants": { + "regular": { + "familyName": "Kotta One", + "fullName": "Kotta One", + "postscriptName": "KottaOne-Regular", + "category": "serif", + "capHeight": 212, + "ascent": 915, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 76, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 0 + } + } + } + } + }, + "koulen": { + "familyName": "Koulen", + "fullName": "Koulen Regular", + "postscriptName": "Koulen-Regular", + "category": "display", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 813, + "subsets": { + "latin": { + "xWidthAvg": 813 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Koulen", + "fullName": "Koulen Regular", + "postscriptName": "Koulen-Regular", + "category": "display", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 813, + "subsets": { + "latin": { + "xWidthAvg": 813 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "kranky": { + "familyName": "Kranky", + "fullName": "Kranky Regular", + "postscriptName": "Kranky-Regular", + "category": "display", + "capHeight": 777, + "ascent": 977, + "descent": -294, + "lineGap": 28, + "unitsPerEm": 1024, + "xHeight": 432, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 287 + } + }, + "variants": { + "regular": { + "familyName": "Kranky", + "fullName": "Kranky Regular", + "postscriptName": "Kranky-Regular", + "category": "display", + "capHeight": 777, + "ascent": 977, + "descent": -294, + "lineGap": 28, + "unitsPerEm": 1024, + "xHeight": 432, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 287 + } + } + } + } + }, + "kreon": { + "familyName": "Kreon", + "fullName": "Kreon Regular", + "postscriptName": "Kreon-Regular", + "category": "serif", + "capHeight": 691, + "ascent": 974, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 632 + } + }, + "variants": { + "300": { + "familyName": "Kreon", + "fullName": "Kreon Light", + "postscriptName": "Kreon-Light", + "category": "serif", + "capHeight": 691, + "ascent": 974, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 397, + "subsets": { + "latin": { + "xWidthAvg": 397 + }, + "thai": { + "xWidthAvg": 632 + } + } + }, + "500": { + "familyName": "Kreon", + "fullName": "Kreon Medium", + "postscriptName": "Kreon-Medium", + "category": "serif", + "capHeight": 691, + "ascent": 974, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 416, + "subsets": { + "latin": { + "xWidthAvg": 416 + }, + "thai": { + "xWidthAvg": 632 + } + } + }, + "600": { + "familyName": "Kreon", + "fullName": "Kreon SemiBold", + "postscriptName": "Kreon-SemiBold", + "category": "serif", + "capHeight": 691, + "ascent": 974, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 420, + "subsets": { + "latin": { + "xWidthAvg": 420 + }, + "thai": { + "xWidthAvg": 632 + } + } + }, + "700": { + "familyName": "Kreon", + "fullName": "Kreon Bold", + "postscriptName": "Kreon-Bold", + "category": "serif", + "capHeight": 691, + "ascent": 974, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 424, + "subsets": { + "latin": { + "xWidthAvg": 424 + }, + "thai": { + "xWidthAvg": 632 + } + } + }, + "regular": { + "familyName": "Kreon", + "fullName": "Kreon Regular", + "postscriptName": "Kreon-Regular", + "category": "serif", + "capHeight": 691, + "ascent": 974, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 632 + } + } + } + } + }, + "kristi": { + "familyName": "Kristi", + "fullName": "Kristi Regular", + "postscriptName": "Kristi-Regular", + "category": "handwriting", + "ascent": 1836, + "descent": -724, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 545, + "subsets": { + "latin": { + "xWidthAvg": 545 + }, + "thai": { + "xWidthAvg": 748 + } + }, + "variants": { + "regular": { + "familyName": "Kristi", + "fullName": "Kristi Regular", + "postscriptName": "Kristi-Regular", + "category": "handwriting", + "ascent": 1836, + "descent": -724, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 545, + "subsets": { + "latin": { + "xWidthAvg": 545 + }, + "thai": { + "xWidthAvg": 748 + } + } + } + } + }, + "kronaOne": { + "familyName": "Krona One", + "fullName": "Krona One", + "postscriptName": "KronaOne-Regular", + "category": "sans-serif", + "capHeight": 1563, + "ascent": 2030, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1180, + "xWidthAvg": 1350, + "subsets": { + "latin": { + "xWidthAvg": 1350 + }, + "thai": { + "xWidthAvg": 519 + } + }, + "variants": { + "regular": { + "familyName": "Krona One", + "fullName": "Krona One", + "postscriptName": "KronaOne-Regular", + "category": "sans-serif", + "capHeight": 1563, + "ascent": 2030, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1180, + "xWidthAvg": 1350, + "subsets": { + "latin": { + "xWidthAvg": 1350 + }, + "thai": { + "xWidthAvg": 519 + } + } + } + } + }, + "krub": { + "familyName": "Krub", + "fullName": "Krub Regular", + "postscriptName": "Krub-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1007, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 569 + } + }, + "variants": { + "200": { + "familyName": "Krub", + "fullName": "Krub ExtraLight", + "postscriptName": "Krub-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1007, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 566 + } + } + }, + "300": { + "familyName": "Krub", + "fullName": "Krub Light", + "postscriptName": "Krub-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1007, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 568 + } + } + }, + "500": { + "familyName": "Krub", + "fullName": "Krub Medium", + "postscriptName": "Krub-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1007, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 579 + } + } + }, + "600": { + "familyName": "Krub", + "fullName": "Krub SemiBold", + "postscriptName": "Krub-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1007, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 590 + } + } + }, + "700": { + "familyName": "Krub", + "fullName": "Krub Bold", + "postscriptName": "Krub-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1007, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Krub", + "fullName": "Krub Regular", + "postscriptName": "Krub-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1007, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 569 + } + } + }, + "italic": { + "familyName": "Krub", + "fullName": "Krub Italic", + "postscriptName": "Krub-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1007, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 569 + } + } + }, + "700italic": { + "familyName": "Krub", + "fullName": "Krub Bold Italic", + "postscriptName": "Krub-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1007, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600italic": { + "familyName": "Krub", + "fullName": "Krub SemiBold Italic", + "postscriptName": "Krub-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1007, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 590 + } + } + }, + "500italic": { + "familyName": "Krub", + "fullName": "Krub Medium Italic", + "postscriptName": "Krub-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1007, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 579 + } + } + }, + "300italic": { + "familyName": "Krub", + "fullName": "Krub Light Italic", + "postscriptName": "Krub-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1007, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 568 + } + } + }, + "200italic": { + "familyName": "Krub", + "fullName": "Krub ExtraLight Italic", + "postscriptName": "Krub-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1007, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 566 + } + } + } + } + }, + "kufam": { + "familyName": "Kufam", + "fullName": "Kufam Regular", + "postscriptName": "Kufam-Regular", + "category": "sans-serif", + "capHeight": 720, + "ascent": 900, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 856 + } + }, + "variants": { + "500": { + "familyName": "Kufam", + "fullName": "Kufam Medium", + "postscriptName": "Kufam-Medium", + "category": "sans-serif", + "capHeight": 720, + "ascent": 900, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 856 + } + } + }, + "600": { + "familyName": "Kufam", + "fullName": "Kufam SemiBold", + "postscriptName": "Kufam-SemiBold", + "category": "sans-serif", + "capHeight": 720, + "ascent": 900, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 856 + } + } + }, + "700": { + "familyName": "Kufam", + "fullName": "Kufam Bold", + "postscriptName": "Kufam-Bold", + "category": "sans-serif", + "capHeight": 720, + "ascent": 900, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 520, + "subsets": { + "latin": { + "xWidthAvg": 520 + }, + "thai": { + "xWidthAvg": 856 + } + } + }, + "800": { + "familyName": "Kufam", + "fullName": "Kufam ExtraBold", + "postscriptName": "Kufam-ExtraBold", + "category": "sans-serif", + "capHeight": 720, + "ascent": 900, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 856 + } + } + }, + "900": { + "familyName": "Kufam", + "fullName": "Kufam Black", + "postscriptName": "Kufam-Black", + "category": "sans-serif", + "capHeight": 720, + "ascent": 900, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 534, + "subsets": { + "latin": { + "xWidthAvg": 534 + }, + "thai": { + "xWidthAvg": 856 + } + } + }, + "regular": { + "familyName": "Kufam", + "fullName": "Kufam Regular", + "postscriptName": "Kufam-Regular", + "category": "sans-serif", + "capHeight": 720, + "ascent": 900, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 856 + } + } + }, + "italic": { + "familyName": "Kufam", + "fullName": "Kufam Italic", + "postscriptName": "Kufam-Italic", + "category": "sans-serif", + "capHeight": 720, + "ascent": 900, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 856 + } + } + }, + "900italic": { + "familyName": "Kufam", + "fullName": "Kufam Black Italic", + "postscriptName": "Kufam-BlackItalic", + "category": "sans-serif", + "capHeight": 720, + "ascent": 900, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 535, + "subsets": { + "latin": { + "xWidthAvg": 535 + }, + "thai": { + "xWidthAvg": 856 + } + } + }, + "800italic": { + "familyName": "Kufam", + "fullName": "Kufam ExtraBold Italic", + "postscriptName": "Kufam-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 720, + "ascent": 900, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 856 + } + } + }, + "700italic": { + "familyName": "Kufam", + "fullName": "Kufam Bold Italic", + "postscriptName": "Kufam-BoldItalic", + "category": "sans-serif", + "capHeight": 720, + "ascent": 900, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 521, + "subsets": { + "latin": { + "xWidthAvg": 521 + }, + "thai": { + "xWidthAvg": 856 + } + } + }, + "600italic": { + "familyName": "Kufam", + "fullName": "Kufam SemiBold Italic", + "postscriptName": "Kufam-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 720, + "ascent": 900, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 856 + } + } + }, + "500italic": { + "familyName": "Kufam", + "fullName": "Kufam Medium Italic", + "postscriptName": "Kufam-MediumItalic", + "category": "sans-serif", + "capHeight": 720, + "ascent": 900, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 856 + } + } + } + } + }, + "kulimPark": { + "familyName": "Kulim Park", + "fullName": "Kulim Park Regular", + "postscriptName": "KulimPark-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 931, + "descent": -204, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 579 + } + }, + "variants": { + "200": { + "familyName": "Kulim Park", + "fullName": "Kulim Park ExtraLight", + "postscriptName": "KulimPark-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 931, + "descent": -204, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 579 + } + } + }, + "300": { + "familyName": "Kulim Park", + "fullName": "Kulim Park Light", + "postscriptName": "KulimPark-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 931, + "descent": -204, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 579 + } + } + }, + "600": { + "familyName": "Kulim Park", + "fullName": "Kulim Park SemiBold", + "postscriptName": "KulimPark-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 931, + "descent": -204, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 579 + } + } + }, + "700": { + "familyName": "Kulim Park", + "fullName": "Kulim Park Bold", + "postscriptName": "KulimPark-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 931, + "descent": -204, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 579 + } + } + }, + "regular": { + "familyName": "Kulim Park", + "fullName": "Kulim Park Regular", + "postscriptName": "KulimPark-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 931, + "descent": -204, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 579 + } + } + }, + "italic": { + "familyName": "Kulim Park", + "fullName": "Kulim Park Italic", + "postscriptName": "KulimPark-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 931, + "descent": -204, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 593 + } + } + }, + "700italic": { + "familyName": "Kulim Park", + "fullName": "Kulim Park Bold Italic", + "postscriptName": "KulimPark-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 931, + "descent": -204, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 593 + } + } + }, + "600italic": { + "familyName": "Kulim Park", + "fullName": "Kulim Park SemiBold Italic", + "postscriptName": "KulimPark-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 931, + "descent": -204, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 593 + } + } + }, + "300italic": { + "familyName": "Kulim Park", + "fullName": "Kulim Park Light Italic", + "postscriptName": "KulimPark-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 931, + "descent": -204, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 593 + } + } + }, + "200italic": { + "familyName": "Kulim Park", + "fullName": "Kulim Park ExtraLight Italic", + "postscriptName": "KulimPark-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 931, + "descent": -204, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 593 + } + } + } + } + }, + "kumarOne": { + "familyName": "Kumar One", + "fullName": "Kumar One", + "postscriptName": "KumarOne-Regular", + "category": "display", + "capHeight": 800, + "ascent": 1137, + "descent": -642, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 600, + "xWidthAvg": 595, + "subsets": { + "latin": { + "xWidthAvg": 595 + }, + "thai": { + "xWidthAvg": 750 + } + }, + "variants": { + "regular": { + "familyName": "Kumar One", + "fullName": "Kumar One", + "postscriptName": "KumarOne-Regular", + "category": "display", + "capHeight": 800, + "ascent": 1137, + "descent": -642, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 600, + "xWidthAvg": 595, + "subsets": { + "latin": { + "xWidthAvg": 595 + }, + "thai": { + "xWidthAvg": 750 + } + } + } + } + }, + "kumarOneOutline": { + "familyName": "Kumar One Outline", + "fullName": "Kumar One Outline", + "postscriptName": "KumarOneOutline-Regular", + "category": "display", + "capHeight": 800, + "ascent": 1137, + "descent": -642, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 600, + "xWidthAvg": 595, + "subsets": { + "latin": { + "xWidthAvg": 595 + }, + "thai": { + "xWidthAvg": 750 + } + }, + "variants": { + "regular": { + "familyName": "Kumar One Outline", + "fullName": "Kumar One Outline", + "postscriptName": "KumarOneOutline-Regular", + "category": "display", + "capHeight": 800, + "ascent": 1137, + "descent": -642, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 600, + "xWidthAvg": 595, + "subsets": { + "latin": { + "xWidthAvg": 595 + }, + "thai": { + "xWidthAvg": 750 + } + } + } + } + }, + "kumbhSans": { + "familyName": "Kumbh Sans", + "fullName": "Kumbh Sans Regular", + "postscriptName": "KumbhSans-Regular", + "category": "sans-serif", + "capHeight": 1500, + "ascent": 2020, + "descent": -520, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1000, + "xWidthAvg": 954, + "subsets": { + "latin": { + "xWidthAvg": 954 + }, + "thai": { + "xWidthAvg": 1250 + } + }, + "variants": { + "100": { + "familyName": "Kumbh Sans", + "fullName": "Kumbh Sans Thin", + "postscriptName": "KumbhSans-Thin", + "category": "sans-serif", + "capHeight": 1500, + "ascent": 2020, + "descent": -520, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1000, + "xWidthAvg": 946, + "subsets": { + "latin": { + "xWidthAvg": 946 + }, + "thai": { + "xWidthAvg": 1310 + } + } + }, + "200": { + "familyName": "Kumbh Sans", + "fullName": "Kumbh Sans ExtraLight", + "postscriptName": "KumbhSans-ExtraLight", + "category": "sans-serif", + "capHeight": 1500, + "ascent": 2020, + "descent": -520, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1000, + "xWidthAvg": 949, + "subsets": { + "latin": { + "xWidthAvg": 949 + }, + "thai": { + "xWidthAvg": 1290 + } + } + }, + "300": { + "familyName": "Kumbh Sans", + "fullName": "Kumbh Sans Light", + "postscriptName": "KumbhSans-Light", + "category": "sans-serif", + "capHeight": 1500, + "ascent": 2020, + "descent": -520, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1000, + "xWidthAvg": 951, + "subsets": { + "latin": { + "xWidthAvg": 951 + }, + "thai": { + "xWidthAvg": 1270 + } + } + }, + "500": { + "familyName": "Kumbh Sans", + "fullName": "Kumbh Sans Medium", + "postscriptName": "KumbhSans-Medium", + "category": "sans-serif", + "capHeight": 1500, + "ascent": 2020, + "descent": -520, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1000, + "xWidthAvg": 959, + "subsets": { + "latin": { + "xWidthAvg": 959 + }, + "thai": { + "xWidthAvg": 1224 + } + } + }, + "600": { + "familyName": "Kumbh Sans", + "fullName": "Kumbh Sans SemiBold", + "postscriptName": "KumbhSans-SemiBold", + "category": "sans-serif", + "capHeight": 1500, + "ascent": 2020, + "descent": -520, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1000, + "xWidthAvg": 964, + "subsets": { + "latin": { + "xWidthAvg": 964 + }, + "thai": { + "xWidthAvg": 1198 + } + } + }, + "700": { + "familyName": "Kumbh Sans", + "fullName": "Kumbh Sans Bold", + "postscriptName": "KumbhSans-Bold", + "category": "sans-serif", + "capHeight": 1500, + "ascent": 2020, + "descent": -520, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1000, + "xWidthAvg": 969, + "subsets": { + "latin": { + "xWidthAvg": 969 + }, + "thai": { + "xWidthAvg": 1172 + } + } + }, + "800": { + "familyName": "Kumbh Sans", + "fullName": "Kumbh Sans ExtraBold", + "postscriptName": "KumbhSans-ExtraBold", + "category": "sans-serif", + "capHeight": 1500, + "ascent": 2020, + "descent": -520, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1000, + "xWidthAvg": 974, + "subsets": { + "latin": { + "xWidthAvg": 974 + }, + "thai": { + "xWidthAvg": 1146 + } + } + }, + "900": { + "familyName": "Kumbh Sans", + "fullName": "Kumbh Sans Black", + "postscriptName": "KumbhSans-Black", + "category": "sans-serif", + "capHeight": 1500, + "ascent": 2020, + "descent": -520, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1000, + "xWidthAvg": 979, + "subsets": { + "latin": { + "xWidthAvg": 979 + }, + "thai": { + "xWidthAvg": 1120 + } + } + }, + "regular": { + "familyName": "Kumbh Sans", + "fullName": "Kumbh Sans Regular", + "postscriptName": "KumbhSans-Regular", + "category": "sans-serif", + "capHeight": 1500, + "ascent": 2020, + "descent": -520, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1000, + "xWidthAvg": 954, + "subsets": { + "latin": { + "xWidthAvg": 954 + }, + "thai": { + "xWidthAvg": 1250 + } + } + } + } + }, + "kurale": { + "familyName": "Kurale", + "fullName": "Kurale Regular", + "postscriptName": "Kurale-Regular", + "category": "serif", + "capHeight": 650, + "ascent": 1095, + "descent": -383, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 1040 + } + }, + "variants": { + "regular": { + "familyName": "Kurale", + "fullName": "Kurale Regular", + "postscriptName": "Kurale-Regular", + "category": "serif", + "capHeight": 650, + "ascent": 1095, + "descent": -383, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 1040 + } + } + } + } + }, + "lXGWWenKaiMonoTC": { + "familyName": "LXGW WenKai Mono TC", + "fullName": "LXGW WenKai Mono TC Regular", + "postscriptName": "LXGWWenKaiMonoTC-Regular", + "category": "monospace", + "capHeight": 695, + "ascent": 928, + "descent": -241, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "300": { + "familyName": "LXGW WenKai Mono TC", + "fullName": "LXGW WenKai Mono TC Light", + "postscriptName": "LXGWWenKaiMonoTC-Light", + "category": "monospace", + "capHeight": 695, + "ascent": 928, + "descent": -241, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "LXGW WenKai Mono TC", + "fullName": "LXGW WenKai Mono TC Bold", + "postscriptName": "LXGWWenKaiMonoTC-Bold", + "category": "monospace", + "capHeight": 695, + "ascent": 928, + "descent": -241, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "LXGW WenKai Mono TC", + "fullName": "LXGW WenKai Mono TC Regular", + "postscriptName": "LXGWWenKaiMonoTC-Regular", + "category": "monospace", + "capHeight": 695, + "ascent": 928, + "descent": -241, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "lXGWWenKaiTC": { + "familyName": "LXGW WenKai TC", + "fullName": "LXGW WenKai TC Regular", + "postscriptName": "LXGWWenKaiTC-Regular", + "category": "handwriting", + "capHeight": 695, + "ascent": 1032, + "descent": -285, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "300": { + "familyName": "LXGW WenKai TC", + "fullName": "LXGW WenKai TC Light", + "postscriptName": "LXGWWenKaiTC-Light", + "category": "handwriting", + "capHeight": 695, + "ascent": 1032, + "descent": -285, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "LXGW WenKai TC", + "fullName": "LXGW WenKai TC Bold", + "postscriptName": "LXGWWenKaiTC-Bold", + "category": "handwriting", + "capHeight": 695, + "ascent": 1032, + "descent": -285, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "LXGW WenKai TC", + "fullName": "LXGW WenKai TC Regular", + "postscriptName": "LXGWWenKaiTC-Regular", + "category": "handwriting", + "capHeight": 695, + "ascent": 1032, + "descent": -285, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "laBelleAurore": { + "familyName": "La Belle Aurore", + "fullName": "La Belle Aurore", + "postscriptName": "LaBelleAurore", + "category": "handwriting", + "capHeight": 688, + "ascent": 1103, + "descent": -794, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 377, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "La Belle Aurore", + "fullName": "La Belle Aurore", + "postscriptName": "LaBelleAurore", + "category": "handwriting", + "capHeight": 688, + "ascent": 1103, + "descent": -794, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 377, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "labrada": { + "familyName": "Labrada", + "fullName": "Labrada Regular", + "postscriptName": "Labrada-Regular", + "category": "serif", + "capHeight": 640, + "ascent": 1145, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 423, + "subsets": { + "latin": { + "xWidthAvg": 423 + }, + "thai": { + "xWidthAvg": 352 + } + }, + "variants": { + "100": { + "familyName": "Labrada", + "fullName": "Labrada Thin", + "postscriptName": "Labrada-Thin", + "category": "serif", + "capHeight": 640, + "ascent": 1145, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 352 + } + } + }, + "200": { + "familyName": "Labrada", + "fullName": "Labrada ExtraLight", + "postscriptName": "Labrada-ExtraLight", + "category": "serif", + "capHeight": 640, + "ascent": 1145, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 414, + "subsets": { + "latin": { + "xWidthAvg": 414 + }, + "thai": { + "xWidthAvg": 352 + } + } + }, + "300": { + "familyName": "Labrada", + "fullName": "Labrada Light", + "postscriptName": "Labrada-Light", + "category": "serif", + "capHeight": 640, + "ascent": 1145, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 418, + "subsets": { + "latin": { + "xWidthAvg": 418 + }, + "thai": { + "xWidthAvg": 352 + } + } + }, + "500": { + "familyName": "Labrada", + "fullName": "Labrada Medium", + "postscriptName": "Labrada-Medium", + "category": "serif", + "capHeight": 640, + "ascent": 1145, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 352 + } + } + }, + "600": { + "familyName": "Labrada", + "fullName": "Labrada SemiBold", + "postscriptName": "Labrada-SemiBold", + "category": "serif", + "capHeight": 640, + "ascent": 1145, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 352 + } + } + }, + "700": { + "familyName": "Labrada", + "fullName": "Labrada Bold", + "postscriptName": "Labrada-Bold", + "category": "serif", + "capHeight": 640, + "ascent": 1145, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 352 + } + } + }, + "800": { + "familyName": "Labrada", + "fullName": "Labrada ExtraBold", + "postscriptName": "Labrada-ExtraBold", + "category": "serif", + "capHeight": 640, + "ascent": 1145, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 352 + } + } + }, + "900": { + "familyName": "Labrada", + "fullName": "Labrada Black", + "postscriptName": "Labrada-Black", + "category": "serif", + "capHeight": 640, + "ascent": 1145, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 352 + } + } + }, + "regular": { + "familyName": "Labrada", + "fullName": "Labrada Regular", + "postscriptName": "Labrada-Regular", + "category": "serif", + "capHeight": 640, + "ascent": 1145, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 423, + "subsets": { + "latin": { + "xWidthAvg": 423 + }, + "thai": { + "xWidthAvg": 352 + } + } + }, + "italic": { + "familyName": "Labrada", + "fullName": "Labrada Italic", + "postscriptName": "Labrada-Italic", + "category": "serif", + "capHeight": 652, + "ascent": 1145, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 384, + "subsets": { + "latin": { + "xWidthAvg": 384 + }, + "thai": { + "xWidthAvg": 313 + } + } + }, + "900italic": { + "familyName": "Labrada", + "fullName": "Labrada Black Italic", + "postscriptName": "Labrada-BlackItalic", + "category": "serif", + "capHeight": 652, + "ascent": 1145, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 313 + } + } + }, + "800italic": { + "familyName": "Labrada", + "fullName": "Labrada ExtraBold Italic", + "postscriptName": "Labrada-ExtraBoldItalic", + "category": "serif", + "capHeight": 652, + "ascent": 1145, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 313 + } + } + }, + "700italic": { + "familyName": "Labrada", + "fullName": "Labrada Bold Italic", + "postscriptName": "Labrada-BoldItalic", + "category": "serif", + "capHeight": 652, + "ascent": 1145, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 409, + "subsets": { + "latin": { + "xWidthAvg": 409 + }, + "thai": { + "xWidthAvg": 313 + } + } + }, + "600italic": { + "familyName": "Labrada", + "fullName": "Labrada SemiBold Italic", + "postscriptName": "Labrada-SemiBoldItalic", + "category": "serif", + "capHeight": 652, + "ascent": 1145, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 399, + "subsets": { + "latin": { + "xWidthAvg": 399 + }, + "thai": { + "xWidthAvg": 313 + } + } + }, + "500italic": { + "familyName": "Labrada", + "fullName": "Labrada Medium Italic", + "postscriptName": "Labrada-MediumItalic", + "category": "serif", + "capHeight": 652, + "ascent": 1145, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 391, + "subsets": { + "latin": { + "xWidthAvg": 391 + }, + "thai": { + "xWidthAvg": 313 + } + } + }, + "300italic": { + "familyName": "Labrada", + "fullName": "Labrada Light Italic", + "postscriptName": "Labrada-LightItalic", + "category": "serif", + "capHeight": 652, + "ascent": 1145, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 374, + "subsets": { + "latin": { + "xWidthAvg": 374 + }, + "thai": { + "xWidthAvg": 313 + } + } + }, + "200italic": { + "familyName": "Labrada", + "fullName": "Labrada ExtraLight Italic", + "postscriptName": "Labrada-ExtraLightItalic", + "category": "serif", + "capHeight": 652, + "ascent": 1145, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 367, + "subsets": { + "latin": { + "xWidthAvg": 367 + }, + "thai": { + "xWidthAvg": 313 + } + } + }, + "100italic": { + "familyName": "Labrada", + "fullName": "Labrada Thin Italic", + "postscriptName": "Labrada-ThinItalic", + "category": "serif", + "capHeight": 652, + "ascent": 1145, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 363, + "subsets": { + "latin": { + "xWidthAvg": 363 + }, + "thai": { + "xWidthAvg": 313 + } + } + } + } + }, + "lacquer": { + "familyName": "Lacquer", + "fullName": "Lacquer Regular", + "postscriptName": "Lacquer-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Lacquer", + "fullName": "Lacquer Regular", + "postscriptName": "Lacquer-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "laila": { + "familyName": "Laila", + "fullName": "Laila Regular", + "postscriptName": "Laila-Regular", + "category": "sans-serif", + "capHeight": 717, + "ascent": 1098, + "descent": -452, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 0 + } + }, + "variants": { + "300": { + "familyName": "Laila", + "fullName": "Laila Light", + "postscriptName": "Laila-Light", + "category": "sans-serif", + "capHeight": 712, + "ascent": 1098, + "descent": -452, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 0 + } + } + }, + "500": { + "familyName": "Laila", + "fullName": "Laila Medium", + "postscriptName": "Laila-Medium", + "category": "sans-serif", + "capHeight": 723, + "ascent": 1098, + "descent": -452, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 476, + "subsets": { + "latin": { + "xWidthAvg": 476 + }, + "thai": { + "xWidthAvg": 0 + } + } + }, + "600": { + "familyName": "Laila", + "fullName": "Laila SemiBold", + "postscriptName": "Laila-SemiBold", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1098, + "descent": -452, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 527, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 0 + } + } + }, + "700": { + "familyName": "Laila", + "fullName": "Laila Bold", + "postscriptName": "Laila-Bold", + "category": "sans-serif", + "capHeight": 736, + "ascent": 1098, + "descent": -452, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 0 + } + } + }, + "regular": { + "familyName": "Laila", + "fullName": "Laila Regular", + "postscriptName": "Laila-Regular", + "category": "sans-serif", + "capHeight": 717, + "ascent": 1098, + "descent": -452, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 0 + } + } + } + } + }, + "lakkiReddy": { + "familyName": "Lakki Reddy", + "fullName": "Lakki Reddy", + "postscriptName": "LakkiReddy", + "category": "handwriting", + "capHeight": 718, + "ascent": 938, + "descent": -765, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 529, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 374 + } + }, + "variants": { + "regular": { + "familyName": "Lakki Reddy", + "fullName": "Lakki Reddy", + "postscriptName": "LakkiReddy", + "category": "handwriting", + "capHeight": 718, + "ascent": 938, + "descent": -765, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 529, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 374 + } + } + } + } + }, + "lalezar": { + "familyName": "Lalezar", + "fullName": "Lalezar-Regular", + "postscriptName": "Lalezar-Regular", + "category": "display", + "capHeight": 570, + "ascent": 979, + "descent": -588, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 186, + "xWidthAvg": 416, + "subsets": { + "latin": { + "xWidthAvg": 416 + }, + "thai": { + "xWidthAvg": 590 + } + }, + "variants": { + "regular": { + "familyName": "Lalezar", + "fullName": "Lalezar-Regular", + "postscriptName": "Lalezar-Regular", + "category": "display", + "capHeight": 570, + "ascent": 979, + "descent": -588, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 186, + "xWidthAvg": 416, + "subsets": { + "latin": { + "xWidthAvg": 416 + }, + "thai": { + "xWidthAvg": 590 + } + } + } + } + }, + "lancelot": { + "familyName": "Lancelot", + "fullName": "Lancelot", + "postscriptName": "Lancelot", + "category": "display", + "capHeight": 1190, + "ascent": 1595, + "descent": -668, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 804, + "xWidthAvg": 732, + "subsets": { + "latin": { + "xWidthAvg": 732 + }, + "thai": { + "xWidthAvg": 388 + } + }, + "variants": { + "regular": { + "familyName": "Lancelot", + "fullName": "Lancelot", + "postscriptName": "Lancelot", + "category": "display", + "capHeight": 1190, + "ascent": 1595, + "descent": -668, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 804, + "xWidthAvg": 732, + "subsets": { + "latin": { + "xWidthAvg": 732 + }, + "thai": { + "xWidthAvg": 388 + } + } + } + } + }, + "langar": { + "familyName": "Langar", + "fullName": "Langar Regular", + "postscriptName": "Langar-Regular", + "category": "display", + "capHeight": 700, + "ascent": 739, + "descent": -200, + "lineGap": 455, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Langar", + "fullName": "Langar Regular", + "postscriptName": "Langar-Regular", + "category": "display", + "capHeight": 700, + "ascent": 739, + "descent": -200, + "lineGap": 455, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "lateef": { + "familyName": "Lateef", + "fullName": "Lateef", + "postscriptName": "Lateef-Regular", + "category": "serif", + "capHeight": 1022, + "ascent": 1937, + "descent": -1024, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 690, + "xWidthAvg": 671, + "subsets": { + "latin": { + "xWidthAvg": 671 + }, + "thai": { + "xWidthAvg": 1135 + } + }, + "variants": { + "200": { + "familyName": "Lateef", + "fullName": "Lateef ExtraLight", + "postscriptName": "Lateef-ExtraLight", + "category": "serif", + "capHeight": 1022, + "ascent": 1937, + "descent": -1024, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 690, + "xWidthAvg": 640, + "subsets": { + "latin": { + "xWidthAvg": 640 + }, + "thai": { + "xWidthAvg": 1135 + } + } + }, + "300": { + "familyName": "Lateef", + "fullName": "Lateef Light", + "postscriptName": "Lateef-Light", + "category": "serif", + "capHeight": 1022, + "ascent": 1937, + "descent": -1024, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 690, + "xWidthAvg": 656, + "subsets": { + "latin": { + "xWidthAvg": 656 + }, + "thai": { + "xWidthAvg": 1135 + } + } + }, + "500": { + "familyName": "Lateef", + "fullName": "Lateef Medium", + "postscriptName": "Lateef-Medium", + "category": "serif", + "capHeight": 1022, + "ascent": 1937, + "descent": -1024, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 690, + "xWidthAvg": 683, + "subsets": { + "latin": { + "xWidthAvg": 683 + }, + "thai": { + "xWidthAvg": 1135 + } + } + }, + "600": { + "familyName": "Lateef", + "fullName": "Lateef SemiBold", + "postscriptName": "Lateef-SemiBold", + "category": "serif", + "capHeight": 1022, + "ascent": 1937, + "descent": -1024, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 690, + "xWidthAvg": 694, + "subsets": { + "latin": { + "xWidthAvg": 694 + }, + "thai": { + "xWidthAvg": 1135 + } + } + }, + "700": { + "familyName": "Lateef", + "fullName": "Lateef Bold", + "postscriptName": "Lateef-Bold", + "category": "serif", + "capHeight": 1022, + "ascent": 1937, + "descent": -1024, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 690, + "xWidthAvg": 706, + "subsets": { + "latin": { + "xWidthAvg": 706 + }, + "thai": { + "xWidthAvg": 1135 + } + } + }, + "800": { + "familyName": "Lateef", + "fullName": "Lateef ExtraBold", + "postscriptName": "Lateef-ExtraBold", + "category": "serif", + "capHeight": 1022, + "ascent": 1937, + "descent": -1024, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 690, + "xWidthAvg": 717, + "subsets": { + "latin": { + "xWidthAvg": 717 + }, + "thai": { + "xWidthAvg": 1135 + } + } + }, + "regular": { + "familyName": "Lateef", + "fullName": "Lateef", + "postscriptName": "Lateef-Regular", + "category": "serif", + "capHeight": 1022, + "ascent": 1937, + "descent": -1024, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 690, + "xWidthAvg": 671, + "subsets": { + "latin": { + "xWidthAvg": 671 + }, + "thai": { + "xWidthAvg": 1135 + } + } + } + } + }, + "lato": { + "familyName": "Lato", + "fullName": "Lato Regular", + "postscriptName": "Lato-Regular", + "category": "sans-serif", + "capHeight": 1433, + "ascent": 1974, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1013, + "xWidthAvg": 871, + "subsets": { + "latin": { + "xWidthAvg": 871 + }, + "thai": { + "xWidthAvg": 1063 + } + }, + "variants": { + "100": { + "familyName": "Lato", + "fullName": "Lato-Hairline", + "postscriptName": "Lato-Hairline", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1974, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 980, + "xWidthAvg": 827, + "subsets": { + "latin": { + "xWidthAvg": 827 + }, + "thai": { + "xWidthAvg": 993 + } + } + }, + "300": { + "familyName": "Lato", + "fullName": "Lato-Light", + "postscriptName": "Lato-Light", + "category": "sans-serif", + "capHeight": 1415, + "ascent": 1974, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 995, + "xWidthAvg": 847, + "subsets": { + "latin": { + "xWidthAvg": 847 + }, + "thai": { + "xWidthAvg": 1025 + } + } + }, + "700": { + "familyName": "Lato", + "fullName": "Lato Bold", + "postscriptName": "Lato-Bold", + "category": "sans-serif", + "capHeight": 1446, + "ascent": 1974, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1026, + "xWidthAvg": 891, + "subsets": { + "latin": { + "xWidthAvg": 891 + }, + "thai": { + "xWidthAvg": 1094 + } + } + }, + "900": { + "familyName": "Lato", + "fullName": "Lato Black", + "postscriptName": "Lato-Black", + "category": "sans-serif", + "capHeight": 1457, + "ascent": 1974, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1037, + "xWidthAvg": 909, + "subsets": { + "latin": { + "xWidthAvg": 909 + }, + "thai": { + "xWidthAvg": 1123 + } + } + }, + "regular": { + "familyName": "Lato", + "fullName": "Lato Regular", + "postscriptName": "Lato-Regular", + "category": "sans-serif", + "capHeight": 1433, + "ascent": 1974, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1013, + "xWidthAvg": 871, + "subsets": { + "latin": { + "xWidthAvg": 871 + }, + "thai": { + "xWidthAvg": 1063 + } + } + }, + "italic": { + "familyName": "Lato", + "fullName": "Lato Italic", + "postscriptName": "Lato-Italic", + "category": "sans-serif", + "capHeight": 1433, + "ascent": 1974, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1013, + "xWidthAvg": 812, + "subsets": { + "latin": { + "xWidthAvg": 812 + }, + "thai": { + "xWidthAvg": 1063 + } + } + }, + "900italic": { + "familyName": "Lato", + "fullName": "Lato Black Italic", + "postscriptName": "Lato-BlackItalic", + "category": "sans-serif", + "capHeight": 1457, + "ascent": 1974, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1037, + "xWidthAvg": 849, + "subsets": { + "latin": { + "xWidthAvg": 849 + }, + "thai": { + "xWidthAvg": 1123 + } + } + }, + "700italic": { + "familyName": "Lato", + "fullName": "Lato Bold Italic", + "postscriptName": "Lato-BoldItalic", + "category": "sans-serif", + "capHeight": 1446, + "ascent": 1974, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1026, + "xWidthAvg": 832, + "subsets": { + "latin": { + "xWidthAvg": 832 + }, + "thai": { + "xWidthAvg": 1094 + } + } + }, + "300italic": { + "familyName": "Lato", + "fullName": "Lato-LightItalic", + "postscriptName": "Lato-LightItalic", + "category": "sans-serif", + "capHeight": 1415, + "ascent": 1974, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 995, + "xWidthAvg": 790, + "subsets": { + "latin": { + "xWidthAvg": 790 + }, + "thai": { + "xWidthAvg": 1025 + } + } + }, + "100italic": { + "familyName": "Lato", + "fullName": "Lato-HairlineItalic", + "postscriptName": "Lato-HairlineItalic", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1974, + "descent": -426, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 980, + "xWidthAvg": 771, + "subsets": { + "latin": { + "xWidthAvg": 771 + }, + "thai": { + "xWidthAvg": 993 + } + } + } + } + }, + "lavishlyYours": { + "familyName": "Lavishly Yours", + "fullName": "Lavishly Yours Regular", + "postscriptName": "LavishlyYours-Regular", + "category": "handwriting", + "capHeight": 780, + "ascent": 1100, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 244, + "xWidthAvg": 304, + "subsets": { + "latin": { + "xWidthAvg": 304 + }, + "thai": { + "xWidthAvg": 676 + } + }, + "variants": { + "regular": { + "familyName": "Lavishly Yours", + "fullName": "Lavishly Yours Regular", + "postscriptName": "LavishlyYours-Regular", + "category": "handwriting", + "capHeight": 780, + "ascent": 1100, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 244, + "xWidthAvg": 304, + "subsets": { + "latin": { + "xWidthAvg": 304 + }, + "thai": { + "xWidthAvg": 676 + } + } + } + } + }, + "leagueGothic": { + "familyName": "League Gothic", + "fullName": "League Gothic Regular", + "postscriptName": "LeagueGothic-Regular", + "category": "sans-serif", + "capHeight": 1470, + "ascent": 1935, + "descent": -465, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1094, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 747 + } + }, + "variants": { + "regular": { + "familyName": "League Gothic", + "fullName": "League Gothic Regular", + "postscriptName": "LeagueGothic-Regular", + "category": "sans-serif", + "capHeight": 1470, + "ascent": 1935, + "descent": -465, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1094, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 747 + } + } + } + } + }, + "leagueScript": { + "familyName": "League Script", + "fullName": "League Script", + "postscriptName": "LeagueScript", + "category": "handwriting", + "capHeight": 936, + "ascent": 1100, + "descent": -600, + "lineGap": 0, + "unitsPerEm": 1536, + "xHeight": 542, + "xWidthAvg": 683, + "subsets": { + "latin": { + "xWidthAvg": 683 + }, + "thai": { + "xWidthAvg": 412 + } + }, + "variants": { + "regular": { + "familyName": "League Script", + "fullName": "League Script", + "postscriptName": "LeagueScript", + "category": "handwriting", + "capHeight": 936, + "ascent": 1100, + "descent": -600, + "lineGap": 0, + "unitsPerEm": 1536, + "xHeight": 542, + "xWidthAvg": 683, + "subsets": { + "latin": { + "xWidthAvg": 683 + }, + "thai": { + "xWidthAvg": 412 + } + } + } + } + }, + "leagueSpartan": { + "familyName": "League Spartan", + "fullName": "League Spartan Regular", + "postscriptName": "LeagueSpartan-Regular", + "category": "sans-serif", + "capHeight": 1320, + "ascent": 1400, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 821, + "xWidthAvg": 827, + "subsets": { + "latin": { + "xWidthAvg": 827 + }, + "thai": { + "xWidthAvg": 757 + } + }, + "variants": { + "100": { + "familyName": "League Spartan", + "fullName": "League Spartan Thin", + "postscriptName": "LeagueSpartan-Thin", + "category": "sans-serif", + "capHeight": 1320, + "ascent": 1400, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 821, + "xWidthAvg": 778, + "subsets": { + "latin": { + "xWidthAvg": 778 + }, + "thai": { + "xWidthAvg": 757 + } + } + }, + "200": { + "familyName": "League Spartan", + "fullName": "League Spartan ExtraLight", + "postscriptName": "LeagueSpartan-ExtraLight", + "category": "sans-serif", + "capHeight": 1320, + "ascent": 1400, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 821, + "xWidthAvg": 787, + "subsets": { + "latin": { + "xWidthAvg": 787 + }, + "thai": { + "xWidthAvg": 757 + } + } + }, + "300": { + "familyName": "League Spartan", + "fullName": "League Spartan Light", + "postscriptName": "LeagueSpartan-Light", + "category": "sans-serif", + "capHeight": 1320, + "ascent": 1400, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 821, + "xWidthAvg": 801, + "subsets": { + "latin": { + "xWidthAvg": 801 + }, + "thai": { + "xWidthAvg": 757 + } + } + }, + "500": { + "familyName": "League Spartan", + "fullName": "League Spartan Medium", + "postscriptName": "LeagueSpartan-Medium", + "category": "sans-serif", + "capHeight": 1320, + "ascent": 1400, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 821, + "xWidthAvg": 845, + "subsets": { + "latin": { + "xWidthAvg": 845 + }, + "thai": { + "xWidthAvg": 757 + } + } + }, + "600": { + "familyName": "League Spartan", + "fullName": "League Spartan SemiBold", + "postscriptName": "LeagueSpartan-SemiBold", + "category": "sans-serif", + "capHeight": 1320, + "ascent": 1400, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 821, + "xWidthAvg": 863, + "subsets": { + "latin": { + "xWidthAvg": 863 + }, + "thai": { + "xWidthAvg": 757 + } + } + }, + "700": { + "familyName": "League Spartan", + "fullName": "League Spartan Bold", + "postscriptName": "LeagueSpartan-Bold", + "category": "sans-serif", + "capHeight": 1320, + "ascent": 1400, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 821, + "xWidthAvg": 886, + "subsets": { + "latin": { + "xWidthAvg": 886 + }, + "thai": { + "xWidthAvg": 757 + } + } + }, + "800": { + "familyName": "League Spartan", + "fullName": "League Spartan ExtraBold", + "postscriptName": "LeagueSpartan-ExtraBold", + "category": "sans-serif", + "capHeight": 1320, + "ascent": 1400, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 821, + "xWidthAvg": 908, + "subsets": { + "latin": { + "xWidthAvg": 908 + }, + "thai": { + "xWidthAvg": 757 + } + } + }, + "900": { + "familyName": "League Spartan", + "fullName": "League Spartan Black", + "postscriptName": "LeagueSpartan-Black", + "category": "sans-serif", + "capHeight": 1320, + "ascent": 1400, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 821, + "xWidthAvg": 926, + "subsets": { + "latin": { + "xWidthAvg": 926 + }, + "thai": { + "xWidthAvg": 757 + } + } + }, + "regular": { + "familyName": "League Spartan", + "fullName": "League Spartan Regular", + "postscriptName": "LeagueSpartan-Regular", + "category": "sans-serif", + "capHeight": 1320, + "ascent": 1400, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 821, + "xWidthAvg": 827, + "subsets": { + "latin": { + "xWidthAvg": 827 + }, + "thai": { + "xWidthAvg": 757 + } + } + } + } + }, + "leckerliOne": { + "familyName": "Leckerli One", + "fullName": "Leckerli One", + "postscriptName": "LeckerliOne-Regular", + "category": "handwriting", + "capHeight": 521, + "ascent": 1032, + "descent": -313, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 300, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 400 + } + }, + "variants": { + "regular": { + "familyName": "Leckerli One", + "fullName": "Leckerli One", + "postscriptName": "LeckerliOne-Regular", + "category": "handwriting", + "capHeight": 521, + "ascent": 1032, + "descent": -313, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 300, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 400 + } + } + } + } + }, + "ledger": { + "familyName": "Ledger", + "fullName": "Ledger", + "postscriptName": "Ledger-Regular", + "category": "serif", + "capHeight": 750, + "ascent": 1062, + "descent": -329, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Ledger", + "fullName": "Ledger", + "postscriptName": "Ledger-Regular", + "category": "serif", + "capHeight": 750, + "ascent": 1062, + "descent": -329, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "lekton": { + "familyName": "Lekton", + "fullName": "Lekton", + "postscriptName": "Lekton-Regular", + "category": "monospace", + "capHeight": 655, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "700": { + "familyName": "Lekton", + "fullName": "Lekton-Bold", + "postscriptName": "Lekton-Bold", + "category": "monospace", + "capHeight": 655, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 476, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Lekton", + "fullName": "Lekton", + "postscriptName": "Lekton-Regular", + "category": "monospace", + "capHeight": 655, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Lekton", + "fullName": "Lekton-Italic", + "postscriptName": "Lekton-Italic", + "category": "monospace", + "capHeight": 655, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "lemon": { + "familyName": "Lemon", + "fullName": "Lemon Regular", + "postscriptName": "Lemon-Regular", + "category": "display", + "capHeight": 710, + "ascent": 1019, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 589, + "subsets": { + "latin": { + "xWidthAvg": 589 + }, + "thai": { + "xWidthAvg": 839 + } + }, + "variants": { + "regular": { + "familyName": "Lemon", + "fullName": "Lemon Regular", + "postscriptName": "Lemon-Regular", + "category": "display", + "capHeight": 710, + "ascent": 1019, + "descent": -287, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 589, + "subsets": { + "latin": { + "xWidthAvg": 589 + }, + "thai": { + "xWidthAvg": 839 + } + } + } + } + }, + "lemonada": { + "familyName": "Lemonada", + "fullName": "Lemonada Regular", + "postscriptName": "Lemonada-Regular", + "category": "display", + "capHeight": 710, + "ascent": 1345, + "descent": -653, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 581, + "subsets": { + "latin": { + "xWidthAvg": 581 + }, + "thai": { + "xWidthAvg": 633 + } + }, + "variants": { + "300": { + "familyName": "Lemonada", + "fullName": "Lemonada Light", + "postscriptName": "Lemonada-Light", + "category": "display", + "capHeight": 710, + "ascent": 1345, + "descent": -653, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 579, + "subsets": { + "latin": { + "xWidthAvg": 579 + }, + "thai": { + "xWidthAvg": 633 + } + } + }, + "500": { + "familyName": "Lemonada", + "fullName": "Lemonada Medium", + "postscriptName": "Lemonada-Medium", + "category": "display", + "capHeight": 710, + "ascent": 1345, + "descent": -653, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 584, + "subsets": { + "latin": { + "xWidthAvg": 584 + }, + "thai": { + "xWidthAvg": 633 + } + } + }, + "600": { + "familyName": "Lemonada", + "fullName": "Lemonada SemiBold", + "postscriptName": "Lemonada-SemiBold", + "category": "display", + "capHeight": 710, + "ascent": 1345, + "descent": -653, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 587, + "subsets": { + "latin": { + "xWidthAvg": 587 + }, + "thai": { + "xWidthAvg": 633 + } + } + }, + "700": { + "familyName": "Lemonada", + "fullName": "Lemonada Bold", + "postscriptName": "Lemonada-Bold", + "category": "display", + "capHeight": 710, + "ascent": 1345, + "descent": -653, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 591, + "subsets": { + "latin": { + "xWidthAvg": 591 + }, + "thai": { + "xWidthAvg": 633 + } + } + }, + "regular": { + "familyName": "Lemonada", + "fullName": "Lemonada Regular", + "postscriptName": "Lemonada-Regular", + "category": "display", + "capHeight": 710, + "ascent": 1345, + "descent": -653, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 581, + "subsets": { + "latin": { + "xWidthAvg": 581 + }, + "thai": { + "xWidthAvg": 633 + } + } + } + } + }, + "lexend": { + "familyName": "Lexend", + "fullName": "Lexend Regular", + "postscriptName": "Lexend-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 584 + } + }, + "variants": { + "100": { + "familyName": "Lexend", + "fullName": "Lexend Thin", + "postscriptName": "Lexend-Thin", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "200": { + "familyName": "Lexend", + "fullName": "Lexend ExtraLight", + "postscriptName": "Lexend-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "300": { + "familyName": "Lexend", + "fullName": "Lexend Light", + "postscriptName": "Lexend-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 476, + "subsets": { + "latin": { + "xWidthAvg": 476 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "500": { + "familyName": "Lexend", + "fullName": "Lexend Medium", + "postscriptName": "Lexend-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "600": { + "familyName": "Lexend", + "fullName": "Lexend SemiBold", + "postscriptName": "Lexend-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "700": { + "familyName": "Lexend", + "fullName": "Lexend Bold", + "postscriptName": "Lexend-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "800": { + "familyName": "Lexend", + "fullName": "Lexend ExtraBold", + "postscriptName": "Lexend-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 533, + "subsets": { + "latin": { + "xWidthAvg": 533 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "900": { + "familyName": "Lexend", + "fullName": "Lexend Black", + "postscriptName": "Lexend-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 541, + "subsets": { + "latin": { + "xWidthAvg": 541 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "regular": { + "familyName": "Lexend", + "fullName": "Lexend Regular", + "postscriptName": "Lexend-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 584 + } + } + } + } + }, + "lexendDeca": { + "familyName": "Lexend Deca", + "fullName": "Lexend Deca Regular", + "postscriptName": "LexendDeca-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 584 + } + }, + "variants": { + "100": { + "familyName": "Lexend Deca", + "fullName": "Lexend Deca Thin", + "postscriptName": "LexendDeca-Thin", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "200": { + "familyName": "Lexend Deca", + "fullName": "Lexend Deca ExtraLight", + "postscriptName": "LexendDeca-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "300": { + "familyName": "Lexend Deca", + "fullName": "Lexend Deca Light", + "postscriptName": "LexendDeca-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 476, + "subsets": { + "latin": { + "xWidthAvg": 476 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "500": { + "familyName": "Lexend Deca", + "fullName": "Lexend Deca Medium", + "postscriptName": "LexendDeca-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "600": { + "familyName": "Lexend Deca", + "fullName": "Lexend Deca SemiBold", + "postscriptName": "LexendDeca-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "700": { + "familyName": "Lexend Deca", + "fullName": "Lexend Deca Bold", + "postscriptName": "LexendDeca-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "800": { + "familyName": "Lexend Deca", + "fullName": "Lexend Deca ExtraBold", + "postscriptName": "LexendDeca-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 533, + "subsets": { + "latin": { + "xWidthAvg": 533 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "900": { + "familyName": "Lexend Deca", + "fullName": "Lexend Deca Black", + "postscriptName": "LexendDeca-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 541, + "subsets": { + "latin": { + "xWidthAvg": 541 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "regular": { + "familyName": "Lexend Deca", + "fullName": "Lexend Deca Regular", + "postscriptName": "LexendDeca-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 584 + } + } + } + } + }, + "lexendExa": { + "familyName": "Lexend Exa", + "fullName": "Lexend Exa Regular", + "postscriptName": "LexendExa-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 619, + "subsets": { + "latin": { + "xWidthAvg": 619 + }, + "thai": { + "xWidthAvg": 584 + } + }, + "variants": { + "100": { + "familyName": "Lexend Exa", + "fullName": "Lexend Exa Thin", + "postscriptName": "LexendExa-Thin", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 582, + "subsets": { + "latin": { + "xWidthAvg": 582 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "200": { + "familyName": "Lexend Exa", + "fullName": "Lexend Exa ExtraLight", + "postscriptName": "LexendExa-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 591, + "subsets": { + "latin": { + "xWidthAvg": 591 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "300": { + "familyName": "Lexend Exa", + "fullName": "Lexend Exa Light", + "postscriptName": "LexendExa-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 604, + "subsets": { + "latin": { + "xWidthAvg": 604 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "500": { + "familyName": "Lexend Exa", + "fullName": "Lexend Exa Medium", + "postscriptName": "LexendExa-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 629, + "subsets": { + "latin": { + "xWidthAvg": 629 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "600": { + "familyName": "Lexend Exa", + "fullName": "Lexend Exa SemiBold", + "postscriptName": "LexendExa-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 639, + "subsets": { + "latin": { + "xWidthAvg": 639 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "700": { + "familyName": "Lexend Exa", + "fullName": "Lexend Exa Bold", + "postscriptName": "LexendExa-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 648, + "subsets": { + "latin": { + "xWidthAvg": 648 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "800": { + "familyName": "Lexend Exa", + "fullName": "Lexend Exa ExtraBold", + "postscriptName": "LexendExa-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 662, + "subsets": { + "latin": { + "xWidthAvg": 662 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "900": { + "familyName": "Lexend Exa", + "fullName": "Lexend Exa Black", + "postscriptName": "LexendExa-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 670, + "subsets": { + "latin": { + "xWidthAvg": 670 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "regular": { + "familyName": "Lexend Exa", + "fullName": "Lexend Exa Regular", + "postscriptName": "LexendExa-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 619, + "subsets": { + "latin": { + "xWidthAvg": 619 + }, + "thai": { + "xWidthAvg": 584 + } + } + } + } + }, + "lexendGiga": { + "familyName": "Lexend Giga", + "fullName": "Lexend Giga Regular", + "postscriptName": "LexendGiga-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 670, + "subsets": { + "latin": { + "xWidthAvg": 670 + }, + "thai": { + "xWidthAvg": 584 + } + }, + "variants": { + "100": { + "familyName": "Lexend Giga", + "fullName": "Lexend Giga Thin", + "postscriptName": "LexendGiga-Thin", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 633, + "subsets": { + "latin": { + "xWidthAvg": 633 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "200": { + "familyName": "Lexend Giga", + "fullName": "Lexend Giga ExtraLight", + "postscriptName": "LexendGiga-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 643, + "subsets": { + "latin": { + "xWidthAvg": 643 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "300": { + "familyName": "Lexend Giga", + "fullName": "Lexend Giga Light", + "postscriptName": "LexendGiga-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 656, + "subsets": { + "latin": { + "xWidthAvg": 656 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "500": { + "familyName": "Lexend Giga", + "fullName": "Lexend Giga Medium", + "postscriptName": "LexendGiga-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 681, + "subsets": { + "latin": { + "xWidthAvg": 681 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "600": { + "familyName": "Lexend Giga", + "fullName": "Lexend Giga SemiBold", + "postscriptName": "LexendGiga-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 690, + "subsets": { + "latin": { + "xWidthAvg": 690 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "700": { + "familyName": "Lexend Giga", + "fullName": "Lexend Giga Bold", + "postscriptName": "LexendGiga-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 700, + "subsets": { + "latin": { + "xWidthAvg": 700 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "800": { + "familyName": "Lexend Giga", + "fullName": "Lexend Giga ExtraBold", + "postscriptName": "LexendGiga-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 713, + "subsets": { + "latin": { + "xWidthAvg": 713 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "900": { + "familyName": "Lexend Giga", + "fullName": "Lexend Giga Black", + "postscriptName": "LexendGiga-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 722, + "subsets": { + "latin": { + "xWidthAvg": 722 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "regular": { + "familyName": "Lexend Giga", + "fullName": "Lexend Giga Regular", + "postscriptName": "LexendGiga-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 670, + "subsets": { + "latin": { + "xWidthAvg": 670 + }, + "thai": { + "xWidthAvg": 584 + } + } + } + } + }, + "lexendMega": { + "familyName": "Lexend Mega", + "fullName": "Lexend Mega Regular", + "postscriptName": "LexendMega-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 696, + "subsets": { + "latin": { + "xWidthAvg": 696 + }, + "thai": { + "xWidthAvg": 584 + } + }, + "variants": { + "100": { + "familyName": "Lexend Mega", + "fullName": "Lexend Mega Thin", + "postscriptName": "LexendMega-Thin", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 659, + "subsets": { + "latin": { + "xWidthAvg": 659 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "200": { + "familyName": "Lexend Mega", + "fullName": "Lexend Mega ExtraLight", + "postscriptName": "LexendMega-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 668, + "subsets": { + "latin": { + "xWidthAvg": 668 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "300": { + "familyName": "Lexend Mega", + "fullName": "Lexend Mega Light", + "postscriptName": "LexendMega-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 682, + "subsets": { + "latin": { + "xWidthAvg": 682 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "500": { + "familyName": "Lexend Mega", + "fullName": "Lexend Mega Medium", + "postscriptName": "LexendMega-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 706, + "subsets": { + "latin": { + "xWidthAvg": 706 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "600": { + "familyName": "Lexend Mega", + "fullName": "Lexend Mega SemiBold", + "postscriptName": "LexendMega-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 716, + "subsets": { + "latin": { + "xWidthAvg": 716 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "700": { + "familyName": "Lexend Mega", + "fullName": "Lexend Mega Bold", + "postscriptName": "LexendMega-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 726, + "subsets": { + "latin": { + "xWidthAvg": 726 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "800": { + "familyName": "Lexend Mega", + "fullName": "Lexend Mega ExtraBold", + "postscriptName": "LexendMega-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 739, + "subsets": { + "latin": { + "xWidthAvg": 739 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "900": { + "familyName": "Lexend Mega", + "fullName": "Lexend Mega Black", + "postscriptName": "LexendMega-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 748, + "subsets": { + "latin": { + "xWidthAvg": 748 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "regular": { + "familyName": "Lexend Mega", + "fullName": "Lexend Mega Regular", + "postscriptName": "LexendMega-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 696, + "subsets": { + "latin": { + "xWidthAvg": 696 + }, + "thai": { + "xWidthAvg": 584 + } + } + } + } + }, + "lexendPeta": { + "familyName": "Lexend Peta", + "fullName": "Lexend Peta Regular", + "postscriptName": "LexendPeta-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 722, + "subsets": { + "latin": { + "xWidthAvg": 722 + }, + "thai": { + "xWidthAvg": 584 + } + }, + "variants": { + "100": { + "familyName": "Lexend Peta", + "fullName": "Lexend Peta Thin", + "postscriptName": "LexendPeta-Thin", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 685, + "subsets": { + "latin": { + "xWidthAvg": 685 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "200": { + "familyName": "Lexend Peta", + "fullName": "Lexend Peta ExtraLight", + "postscriptName": "LexendPeta-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 694, + "subsets": { + "latin": { + "xWidthAvg": 694 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "300": { + "familyName": "Lexend Peta", + "fullName": "Lexend Peta Light", + "postscriptName": "LexendPeta-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 707, + "subsets": { + "latin": { + "xWidthAvg": 707 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "500": { + "familyName": "Lexend Peta", + "fullName": "Lexend Peta Medium", + "postscriptName": "LexendPeta-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 732, + "subsets": { + "latin": { + "xWidthAvg": 732 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "600": { + "familyName": "Lexend Peta", + "fullName": "Lexend Peta SemiBold", + "postscriptName": "LexendPeta-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 742, + "subsets": { + "latin": { + "xWidthAvg": 742 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "700": { + "familyName": "Lexend Peta", + "fullName": "Lexend Peta Bold", + "postscriptName": "LexendPeta-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 751, + "subsets": { + "latin": { + "xWidthAvg": 751 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "800": { + "familyName": "Lexend Peta", + "fullName": "Lexend Peta ExtraBold", + "postscriptName": "LexendPeta-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 765, + "subsets": { + "latin": { + "xWidthAvg": 765 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "900": { + "familyName": "Lexend Peta", + "fullName": "Lexend Peta Black", + "postscriptName": "LexendPeta-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 773, + "subsets": { + "latin": { + "xWidthAvg": 773 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "regular": { + "familyName": "Lexend Peta", + "fullName": "Lexend Peta Regular", + "postscriptName": "LexendPeta-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 722, + "subsets": { + "latin": { + "xWidthAvg": 722 + }, + "thai": { + "xWidthAvg": 584 + } + } + } + } + }, + "lexendTera": { + "familyName": "Lexend Tera", + "fullName": "Lexend Tera Regular", + "postscriptName": "LexendTera-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 747, + "subsets": { + "latin": { + "xWidthAvg": 747 + }, + "thai": { + "xWidthAvg": 584 + } + }, + "variants": { + "100": { + "familyName": "Lexend Tera", + "fullName": "Lexend Tera Thin", + "postscriptName": "LexendTera-Thin", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 710, + "subsets": { + "latin": { + "xWidthAvg": 710 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "200": { + "familyName": "Lexend Tera", + "fullName": "Lexend Tera ExtraLight", + "postscriptName": "LexendTera-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 720, + "subsets": { + "latin": { + "xWidthAvg": 720 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "300": { + "familyName": "Lexend Tera", + "fullName": "Lexend Tera Light", + "postscriptName": "LexendTera-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 733, + "subsets": { + "latin": { + "xWidthAvg": 733 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "500": { + "familyName": "Lexend Tera", + "fullName": "Lexend Tera Medium", + "postscriptName": "LexendTera-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 758, + "subsets": { + "latin": { + "xWidthAvg": 758 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "600": { + "familyName": "Lexend Tera", + "fullName": "Lexend Tera SemiBold", + "postscriptName": "LexendTera-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 768, + "subsets": { + "latin": { + "xWidthAvg": 768 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "700": { + "familyName": "Lexend Tera", + "fullName": "Lexend Tera Bold", + "postscriptName": "LexendTera-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 777, + "subsets": { + "latin": { + "xWidthAvg": 777 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "800": { + "familyName": "Lexend Tera", + "fullName": "Lexend Tera ExtraBold", + "postscriptName": "LexendTera-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 791, + "subsets": { + "latin": { + "xWidthAvg": 791 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "900": { + "familyName": "Lexend Tera", + "fullName": "Lexend Tera Black", + "postscriptName": "LexendTera-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 799, + "subsets": { + "latin": { + "xWidthAvg": 799 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "regular": { + "familyName": "Lexend Tera", + "fullName": "Lexend Tera Regular", + "postscriptName": "LexendTera-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 747, + "subsets": { + "latin": { + "xWidthAvg": 747 + }, + "thai": { + "xWidthAvg": 584 + } + } + } + } + }, + "lexendZetta": { + "familyName": "Lexend Zetta", + "fullName": "Lexend Zetta Regular", + "postscriptName": "LexendZetta-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 812, + "subsets": { + "latin": { + "xWidthAvg": 812 + }, + "thai": { + "xWidthAvg": 584 + } + }, + "variants": { + "100": { + "familyName": "Lexend Zetta", + "fullName": "Lexend Zetta Thin", + "postscriptName": "LexendZetta-Thin", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 774, + "subsets": { + "latin": { + "xWidthAvg": 774 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "200": { + "familyName": "Lexend Zetta", + "fullName": "Lexend Zetta ExtraLight", + "postscriptName": "LexendZetta-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 784, + "subsets": { + "latin": { + "xWidthAvg": 784 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "300": { + "familyName": "Lexend Zetta", + "fullName": "Lexend Zetta Light", + "postscriptName": "LexendZetta-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 797, + "subsets": { + "latin": { + "xWidthAvg": 797 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "500": { + "familyName": "Lexend Zetta", + "fullName": "Lexend Zetta Medium", + "postscriptName": "LexendZetta-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 822, + "subsets": { + "latin": { + "xWidthAvg": 822 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "600": { + "familyName": "Lexend Zetta", + "fullName": "Lexend Zetta SemiBold", + "postscriptName": "LexendZetta-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 832, + "subsets": { + "latin": { + "xWidthAvg": 832 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "700": { + "familyName": "Lexend Zetta", + "fullName": "Lexend Zetta Bold", + "postscriptName": "LexendZetta-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 841, + "subsets": { + "latin": { + "xWidthAvg": 841 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "800": { + "familyName": "Lexend Zetta", + "fullName": "Lexend Zetta ExtraBold", + "postscriptName": "LexendZetta-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 855, + "subsets": { + "latin": { + "xWidthAvg": 855 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "900": { + "familyName": "Lexend Zetta", + "fullName": "Lexend Zetta Black", + "postscriptName": "LexendZetta-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 864, + "subsets": { + "latin": { + "xWidthAvg": 864 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "regular": { + "familyName": "Lexend Zetta", + "fullName": "Lexend Zetta Regular", + "postscriptName": "LexendZetta-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 812, + "subsets": { + "latin": { + "xWidthAvg": 812 + }, + "thai": { + "xWidthAvg": 584 + } + } + } + } + }, + "libreBarcode128": { + "familyName": "Libre Barcode 128", + "fullName": "Libre Barcode 128 Regular", + "postscriptName": "LibreBarcode128-Regular", + "category": "display", + "capHeight": 590, + "ascent": 600, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 330, + "subsets": { + "latin": { + "xWidthAvg": 330 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Libre Barcode 128", + "fullName": "Libre Barcode 128 Regular", + "postscriptName": "LibreBarcode128-Regular", + "category": "display", + "capHeight": 590, + "ascent": 600, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 330, + "subsets": { + "latin": { + "xWidthAvg": 330 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "libreBarcode128Text": { + "familyName": "Libre Barcode 128 Text", + "fullName": "Libre Barcode 128 Text Regular", + "postscriptName": "LibreBarcode128Text-Regular", + "category": "display", + "capHeight": 590, + "ascent": 600, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 330, + "subsets": { + "latin": { + "xWidthAvg": 330 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Libre Barcode 128 Text", + "fullName": "Libre Barcode 128 Text Regular", + "postscriptName": "LibreBarcode128Text-Regular", + "category": "display", + "capHeight": 590, + "ascent": 600, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 330, + "subsets": { + "latin": { + "xWidthAvg": 330 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "libreBarcode39": { + "familyName": "Libre Barcode 39", + "fullName": "Libre Barcode 39 Regular", + "postscriptName": "LibreBarcode39-Regular", + "category": "display", + "capHeight": 590, + "ascent": 600, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Libre Barcode 39", + "fullName": "Libre Barcode 39 Regular", + "postscriptName": "LibreBarcode39-Regular", + "category": "display", + "capHeight": 590, + "ascent": 600, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "libreBarcode39Extended": { + "familyName": "Libre Barcode 39 Extended", + "fullName": "Libre Barcode 39 Extended Regular", + "postscriptName": "LibreBarcode39Extended-Regular", + "category": "display", + "capHeight": 590, + "ascent": 600, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 854, + "subsets": { + "latin": { + "xWidthAvg": 854 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Libre Barcode 39 Extended", + "fullName": "Libre Barcode 39 Extended Regular", + "postscriptName": "LibreBarcode39Extended-Regular", + "category": "display", + "capHeight": 590, + "ascent": 600, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 854, + "subsets": { + "latin": { + "xWidthAvg": 854 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "libreBarcode39ExtendedText": { + "familyName": "Libre Barcode 39 Extended Text", + "fullName": "Libre Barcode 39 Extended Text Regular", + "postscriptName": "LibreBarcode39ExtendedText-Regular", + "category": "display", + "capHeight": 590, + "ascent": 600, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 854, + "subsets": { + "latin": { + "xWidthAvg": 854 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Libre Barcode 39 Extended Text", + "fullName": "Libre Barcode 39 Extended Text Regular", + "postscriptName": "LibreBarcode39ExtendedText-Regular", + "category": "display", + "capHeight": 590, + "ascent": 600, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 854, + "subsets": { + "latin": { + "xWidthAvg": 854 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "libreBarcode39Text": { + "familyName": "Libre Barcode 39 Text", + "fullName": "Libre Barcode 39 Text Regular", + "postscriptName": "LibreBarcode39Text-Regular", + "category": "display", + "capHeight": 590, + "ascent": 600, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Libre Barcode 39 Text", + "fullName": "Libre Barcode 39 Text Regular", + "postscriptName": "LibreBarcode39Text-Regular", + "category": "display", + "capHeight": 590, + "ascent": 600, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "libreBarcodeEAN13Text": { + "familyName": "Libre Barcode EAN13 Text", + "fullName": "Libre Barcode EAN13 Text Regular", + "postscriptName": "LibreBarcodeEAN13Text-Regular", + "category": "display", + "capHeight": 840, + "ascent": 840, + "descent": -120, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 420, + "xWidthAvg": 123, + "subsets": { + "latin": { + "xWidthAvg": 123 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "Libre Barcode EAN13 Text", + "fullName": "Libre Barcode EAN13 Text Regular", + "postscriptName": "LibreBarcodeEAN13Text-Regular", + "category": "display", + "capHeight": 840, + "ascent": 840, + "descent": -120, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 420, + "xWidthAvg": 123, + "subsets": { + "latin": { + "xWidthAvg": 123 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "libreBaskerville": { + "familyName": "Libre Baskerville", + "fullName": "Libre Baskerville", + "postscriptName": "LibreBaskerville-Regular", + "category": "serif", + "capHeight": 770, + "ascent": 970, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 517, + "subsets": { + "latin": { + "xWidthAvg": 517 + }, + "thai": { + "xWidthAvg": 756 + } + }, + "variants": { + "700": { + "familyName": "Libre Baskerville", + "fullName": "Libre Baskerville Bold", + "postscriptName": "LibreBaskerville-Bold", + "category": "serif", + "capHeight": 770, + "ascent": 970, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 530, + "subsets": { + "latin": { + "xWidthAvg": 530 + }, + "thai": { + "xWidthAvg": 756 + } + } + }, + "regular": { + "familyName": "Libre Baskerville", + "fullName": "Libre Baskerville", + "postscriptName": "LibreBaskerville-Regular", + "category": "serif", + "capHeight": 770, + "ascent": 970, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 517, + "subsets": { + "latin": { + "xWidthAvg": 517 + }, + "thai": { + "xWidthAvg": 756 + } + } + }, + "italic": { + "familyName": "Libre Baskerville", + "fullName": "Libre Baskerville Italic", + "postscriptName": "LibreBaskerville-Italic", + "category": "serif", + "capHeight": 770, + "ascent": 970, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 756 + } + } + } + } + }, + "libreBodoni": { + "familyName": "Libre Bodoni", + "fullName": "Libre Bodoni Regular", + "postscriptName": "LibreBodoni-Regular", + "category": "serif", + "capHeight": 754, + "ascent": 924, + "descent": -326, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 809 + } + }, + "variants": { + "500": { + "familyName": "Libre Bodoni", + "fullName": "Libre Bodoni Medium", + "postscriptName": "LibreBodoni-Medium", + "category": "serif", + "capHeight": 754, + "ascent": 924, + "descent": -326, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 809 + } + } + }, + "600": { + "familyName": "Libre Bodoni", + "fullName": "Libre Bodoni SemiBold", + "postscriptName": "LibreBodoni-SemiBold", + "category": "serif", + "capHeight": 754, + "ascent": 924, + "descent": -326, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 809 + } + } + }, + "700": { + "familyName": "Libre Bodoni", + "fullName": "Libre Bodoni Bold", + "postscriptName": "LibreBodoni-Bold", + "category": "serif", + "capHeight": 754, + "ascent": 924, + "descent": -326, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 809 + } + } + }, + "regular": { + "familyName": "Libre Bodoni", + "fullName": "Libre Bodoni Regular", + "postscriptName": "LibreBodoni-Regular", + "category": "serif", + "capHeight": 754, + "ascent": 924, + "descent": -326, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 809 + } + } + }, + "italic": { + "familyName": "Libre Bodoni", + "fullName": "Libre Bodoni Italic", + "postscriptName": "LibreBodoni-Italic", + "category": "serif", + "capHeight": 754, + "ascent": 924, + "descent": -326, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 809 + } + } + }, + "700italic": { + "familyName": "Libre Bodoni", + "fullName": "Libre Bodoni Bold Italic", + "postscriptName": "LibreBodoni-BoldItalic", + "category": "serif", + "capHeight": 754, + "ascent": 924, + "descent": -326, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 829 + } + } + }, + "600italic": { + "familyName": "Libre Bodoni", + "fullName": "Libre Bodoni SemiBold Italic", + "postscriptName": "LibreBodoni-SemiBoldItalic", + "category": "serif", + "capHeight": 754, + "ascent": 924, + "descent": -326, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 822 + } + } + }, + "500italic": { + "familyName": "Libre Bodoni", + "fullName": "Libre Bodoni Medium Italic", + "postscriptName": "LibreBodoni-MediumItalic", + "category": "serif", + "capHeight": 754, + "ascent": 924, + "descent": -326, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 819 + } + } + } + } + }, + "libreCaslonDisplay": { + "familyName": "Libre Caslon Display", + "fullName": "Libre Caslon Display Regular", + "postscriptName": "LibreCaslonDisplay-Regular", + "category": "serif", + "capHeight": 690, + "ascent": 970, + "descent": -266, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 424, + "xWidthAvg": 374, + "subsets": { + "latin": { + "xWidthAvg": 374 + }, + "thai": { + "xWidthAvg": 160 + } + }, + "variants": { + "regular": { + "familyName": "Libre Caslon Display", + "fullName": "Libre Caslon Display Regular", + "postscriptName": "LibreCaslonDisplay-Regular", + "category": "serif", + "capHeight": 690, + "ascent": 970, + "descent": -266, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 424, + "xWidthAvg": 374, + "subsets": { + "latin": { + "xWidthAvg": 374 + }, + "thai": { + "xWidthAvg": 160 + } + } + } + } + }, + "libreCaslonText": { + "familyName": "Libre Caslon Text", + "fullName": "Libre Caslon Text Regular", + "postscriptName": "LibreCaslonText-Regular", + "category": "serif", + "capHeight": 770, + "ascent": 970, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 625 + } + }, + "variants": { + "700": { + "familyName": "Libre Caslon Text", + "fullName": "Libre Caslon Text Bold", + "postscriptName": "LibreCaslonText-Bold", + "category": "serif", + "capHeight": 770, + "ascent": 970, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 522, + "subsets": { + "latin": { + "xWidthAvg": 522 + }, + "thai": { + "xWidthAvg": 625 + } + } + }, + "regular": { + "familyName": "Libre Caslon Text", + "fullName": "Libre Caslon Text Regular", + "postscriptName": "LibreCaslonText-Regular", + "category": "serif", + "capHeight": 770, + "ascent": 970, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 625 + } + } + }, + "italic": { + "familyName": "Libre Caslon Text", + "fullName": "Libre Caslon Text Italic", + "postscriptName": "LibreCaslonText-Italic", + "category": "serif", + "capHeight": 770, + "ascent": 970, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 0 + } + } + } + } + }, + "libreFranklin": { + "familyName": "Libre Franklin", + "fullName": "Libre Franklin Regular", + "postscriptName": "LibreFranklin-Regular", + "category": "sans-serif", + "capHeight": 742, + "ascent": 966, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 702 + } + }, + "variants": { + "100": { + "familyName": "Libre Franklin", + "fullName": "Libre Franklin Thin", + "postscriptName": "LibreFranklin-Thin", + "category": "sans-serif", + "capHeight": 742, + "ascent": 966, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 736 + } + } + }, + "200": { + "familyName": "Libre Franklin", + "fullName": "Libre Franklin ExtraLight", + "postscriptName": "LibreFranklin-ExtraLight", + "category": "sans-serif", + "capHeight": 742, + "ascent": 966, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 728 + } + } + }, + "300": { + "familyName": "Libre Franklin", + "fullName": "Libre Franklin Light", + "postscriptName": "LibreFranklin-Light", + "category": "sans-serif", + "capHeight": 742, + "ascent": 966, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 716 + } + } + }, + "500": { + "familyName": "Libre Franklin", + "fullName": "Libre Franklin Medium", + "postscriptName": "LibreFranklin-Medium", + "category": "sans-serif", + "capHeight": 742, + "ascent": 966, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 685 + } + } + }, + "600": { + "familyName": "Libre Franklin", + "fullName": "Libre Franklin SemiBold", + "postscriptName": "LibreFranklin-SemiBold", + "category": "sans-serif", + "capHeight": 742, + "ascent": 966, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 476, + "subsets": { + "latin": { + "xWidthAvg": 476 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "700": { + "familyName": "Libre Franklin", + "fullName": "Libre Franklin Bold", + "postscriptName": "LibreFranklin-Bold", + "category": "sans-serif", + "capHeight": 742, + "ascent": 966, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 648 + } + } + }, + "800": { + "familyName": "Libre Franklin", + "fullName": "Libre Franklin ExtraBold", + "postscriptName": "LibreFranklin-ExtraBold", + "category": "sans-serif", + "capHeight": 742, + "ascent": 966, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 629 + } + } + }, + "900": { + "familyName": "Libre Franklin", + "fullName": "Libre Franklin Black", + "postscriptName": "LibreFranklin-Black", + "category": "sans-serif", + "capHeight": 742, + "ascent": 966, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 612 + } + } + }, + "regular": { + "familyName": "Libre Franklin", + "fullName": "Libre Franklin Regular", + "postscriptName": "LibreFranklin-Regular", + "category": "sans-serif", + "capHeight": 742, + "ascent": 966, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 702 + } + } + }, + "italic": { + "familyName": "Libre Franklin", + "fullName": "Libre Franklin Italic", + "postscriptName": "LibreFranklin-Italic", + "category": "sans-serif", + "capHeight": 742, + "ascent": 966, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 702 + } + } + }, + "900italic": { + "familyName": "Libre Franklin", + "fullName": "Libre Franklin Black Italic", + "postscriptName": "LibreFranklin-BlackItalic", + "category": "sans-serif", + "capHeight": 742, + "ascent": 966, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 612 + } + } + }, + "800italic": { + "familyName": "Libre Franklin", + "fullName": "Libre Franklin ExtraBold Italic", + "postscriptName": "LibreFranklin-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 742, + "ascent": 966, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 629 + } + } + }, + "700italic": { + "familyName": "Libre Franklin", + "fullName": "Libre Franklin Bold Italic", + "postscriptName": "LibreFranklin-BoldItalic", + "category": "sans-serif", + "capHeight": 742, + "ascent": 966, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 648 + } + } + }, + "600italic": { + "familyName": "Libre Franklin", + "fullName": "Libre Franklin SemiBold Italic", + "postscriptName": "LibreFranklin-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 742, + "ascent": 966, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 476, + "subsets": { + "latin": { + "xWidthAvg": 476 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "500italic": { + "familyName": "Libre Franklin", + "fullName": "Libre Franklin Medium Italic", + "postscriptName": "LibreFranklin-MediumItalic", + "category": "sans-serif", + "capHeight": 742, + "ascent": 966, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 685 + } + } + }, + "300italic": { + "familyName": "Libre Franklin", + "fullName": "Libre Franklin Light Italic", + "postscriptName": "LibreFranklin-LightItalic", + "category": "sans-serif", + "capHeight": 742, + "ascent": 966, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 716 + } + } + }, + "200italic": { + "familyName": "Libre Franklin", + "fullName": "Libre Franklin ExtraLight Italic", + "postscriptName": "LibreFranklin-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 742, + "ascent": 966, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 728 + } + } + }, + "100italic": { + "familyName": "Libre Franklin", + "fullName": "Libre Franklin Thin Italic", + "postscriptName": "LibreFranklin-ThinItalic", + "category": "sans-serif", + "capHeight": 742, + "ascent": 966, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 736 + } + } + } + } + }, + "licorice": { + "familyName": "Licorice", + "fullName": "Licorice Regular", + "postscriptName": "Licorice-Regular", + "category": "handwriting", + "capHeight": 720, + "ascent": 850, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 286, + "subsets": { + "latin": { + "xWidthAvg": 286 + }, + "thai": { + "xWidthAvg": 501 + } + }, + "variants": { + "regular": { + "familyName": "Licorice", + "fullName": "Licorice Regular", + "postscriptName": "Licorice-Regular", + "category": "handwriting", + "capHeight": 720, + "ascent": 850, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 286, + "subsets": { + "latin": { + "xWidthAvg": 286 + }, + "thai": { + "xWidthAvg": 501 + } + } + } + } + }, + "lifeSavers": { + "familyName": "Life Savers", + "fullName": "Life Savers Regular", + "postscriptName": "LifeSavers-Regular", + "category": "display", + "capHeight": 821, + "ascent": 972, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 436, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 670 + } + }, + "variants": { + "700": { + "familyName": "Life Savers", + "fullName": "Life Savers Bold", + "postscriptName": "LifeSavers-Bold", + "category": "display", + "capHeight": 821, + "ascent": 972, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 436, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 670 + } + } + }, + "800": { + "familyName": "Life Savers", + "fullName": "Life Savers ExtraBold", + "postscriptName": "LifeSavers-ExtraBold", + "category": "display", + "capHeight": 821, + "ascent": 972, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 436, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 670 + } + } + }, + "regular": { + "familyName": "Life Savers", + "fullName": "Life Savers Regular", + "postscriptName": "LifeSavers-Regular", + "category": "display", + "capHeight": 821, + "ascent": 972, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 436, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 670 + } + } + } + } + }, + "lilitaOne": { + "familyName": "Lilita One", + "fullName": "Lilita One", + "postscriptName": "LilitaOne", + "category": "display", + "capHeight": 704, + "ascent": 923, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 199 + } + }, + "variants": { + "regular": { + "familyName": "Lilita One", + "fullName": "Lilita One", + "postscriptName": "LilitaOne", + "category": "display", + "capHeight": 704, + "ascent": 923, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 199 + } + } + } + } + }, + "lilyScriptOne": { + "familyName": "Lily Script One", + "fullName": "Lily Script One", + "postscriptName": "LilyScriptOne-Regular", + "category": "display", + "capHeight": 762, + "ascent": 1017, + "descent": -359, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 762, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Lily Script One", + "fullName": "Lily Script One", + "postscriptName": "LilyScriptOne-Regular", + "category": "display", + "capHeight": 762, + "ascent": 1017, + "descent": -359, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 762, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "limelight": { + "familyName": "Limelight", + "fullName": "Limelight Regular", + "postscriptName": "Limelight-Regular", + "category": "display", + "capHeight": 1415, + "ascent": 1864, + "descent": -629, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1068, + "xWidthAvg": 1096, + "subsets": { + "latin": { + "xWidthAvg": 1096 + }, + "thai": { + "xWidthAvg": 411 + } + }, + "variants": { + "regular": { + "familyName": "Limelight", + "fullName": "Limelight Regular", + "postscriptName": "Limelight-Regular", + "category": "display", + "capHeight": 1415, + "ascent": 1864, + "descent": -629, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1068, + "xWidthAvg": 1096, + "subsets": { + "latin": { + "xWidthAvg": 1096 + }, + "thai": { + "xWidthAvg": 411 + } + } + } + } + }, + "lindenHill": { + "familyName": "Linden Hill", + "fullName": "Linden Hill Regular", + "postscriptName": "LindenHill-Regular", + "category": "serif", + "capHeight": 2732, + "ascent": 3633, + "descent": -1888, + "lineGap": 0, + "unitsPerEm": 4096, + "xHeight": 1606, + "xWidthAvg": 1548, + "subsets": { + "latin": { + "xWidthAvg": 1548 + }, + "thai": { + "xWidthAvg": 2048 + } + }, + "variants": { + "regular": { + "familyName": "Linden Hill", + "fullName": "Linden Hill Regular", + "postscriptName": "LindenHill-Regular", + "category": "serif", + "capHeight": 2732, + "ascent": 3633, + "descent": -1888, + "lineGap": 0, + "unitsPerEm": 4096, + "xHeight": 1606, + "xWidthAvg": 1548, + "subsets": { + "latin": { + "xWidthAvg": 1548 + }, + "thai": { + "xWidthAvg": 2048 + } + } + }, + "italic": { + "familyName": "Linden Hill", + "fullName": "Linden Hill Italic", + "postscriptName": "LindenHill-Italic", + "category": "serif", + "capHeight": 2732, + "ascent": 3633, + "descent": -1888, + "lineGap": 0, + "unitsPerEm": 4096, + "xHeight": 1688, + "xWidthAvg": 1342, + "subsets": { + "latin": { + "xWidthAvg": 1342 + }, + "thai": { + "xWidthAvg": 2048 + } + } + } + } + }, + "linefont": { + "familyName": "Linefont", + "fullName": "Linefont Regular", + "postscriptName": "Linefont-Regular", + "category": "display", + "capHeight": 0, + "ascent": 1200, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 100, + "subsets": { + "latin": { + "xWidthAvg": 100 + }, + "thai": { + "xWidthAvg": 100 + } + }, + "variants": { + "100": { + "familyName": "Linefont", + "fullName": "Linefont Thin", + "postscriptName": "Linefont-Thin", + "category": "display", + "capHeight": 0, + "ascent": 1200, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 100, + "subsets": { + "latin": { + "xWidthAvg": 100 + }, + "thai": { + "xWidthAvg": 100 + } + } + }, + "200": { + "familyName": "Linefont", + "fullName": "Linefont ExtraLight", + "postscriptName": "Linefont-ExtraLight", + "category": "display", + "capHeight": 0, + "ascent": 1200, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 100, + "subsets": { + "latin": { + "xWidthAvg": 100 + }, + "thai": { + "xWidthAvg": 100 + } + } + }, + "300": { + "familyName": "Linefont", + "fullName": "Linefont Light", + "postscriptName": "Linefont-Light", + "category": "display", + "capHeight": 0, + "ascent": 1200, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 100, + "subsets": { + "latin": { + "xWidthAvg": 100 + }, + "thai": { + "xWidthAvg": 100 + } + } + }, + "500": { + "familyName": "Linefont", + "fullName": "Linefont Medium", + "postscriptName": "Linefont-Medium", + "category": "display", + "capHeight": 0, + "ascent": 1200, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 100, + "subsets": { + "latin": { + "xWidthAvg": 100 + }, + "thai": { + "xWidthAvg": 100 + } + } + }, + "600": { + "familyName": "Linefont", + "fullName": "Linefont SemiBold", + "postscriptName": "Linefont-SemiBold", + "category": "display", + "capHeight": 0, + "ascent": 1200, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 100, + "subsets": { + "latin": { + "xWidthAvg": 100 + }, + "thai": { + "xWidthAvg": 100 + } + } + }, + "700": { + "familyName": "Linefont", + "fullName": "Linefont Bold", + "postscriptName": "Linefont-Bold", + "category": "display", + "capHeight": 0, + "ascent": 1200, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 100, + "subsets": { + "latin": { + "xWidthAvg": 100 + }, + "thai": { + "xWidthAvg": 100 + } + } + }, + "800": { + "familyName": "Linefont", + "fullName": "Linefont ExtraBold", + "postscriptName": "Linefont-ExtraBold", + "category": "display", + "capHeight": 0, + "ascent": 1200, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 100, + "subsets": { + "latin": { + "xWidthAvg": 100 + }, + "thai": { + "xWidthAvg": 100 + } + } + }, + "900": { + "familyName": "Linefont", + "fullName": "Linefont Black", + "postscriptName": "Linefont-Black", + "category": "display", + "capHeight": 0, + "ascent": 1200, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 100, + "subsets": { + "latin": { + "xWidthAvg": 100 + }, + "thai": { + "xWidthAvg": 100 + } + } + }, + "regular": { + "familyName": "Linefont", + "fullName": "Linefont Regular", + "postscriptName": "Linefont-Regular", + "category": "display", + "capHeight": 0, + "ascent": 1200, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 100, + "subsets": { + "latin": { + "xWidthAvg": 100 + }, + "thai": { + "xWidthAvg": 100 + } + } + } + } + }, + "lisuBosa": { + "familyName": "Lisu Bosa", + "fullName": "Lisu Bosa", + "postscriptName": "LisuBosa-Regular", + "category": "serif", + "capHeight": 530, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 425, + "xWidthAvg": 432, + "subsets": { + "latin": { + "xWidthAvg": 432 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "200": { + "familyName": "Lisu Bosa", + "fullName": "Lisu Bosa ExtraLight", + "postscriptName": "LisuBosa-ExtraLight", + "category": "serif", + "capHeight": 530, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 425, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "300": { + "familyName": "Lisu Bosa", + "fullName": "Lisu Bosa Light", + "postscriptName": "LisuBosa-Light", + "category": "serif", + "capHeight": 530, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 425, + "xWidthAvg": 430, + "subsets": { + "latin": { + "xWidthAvg": 430 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "500": { + "familyName": "Lisu Bosa", + "fullName": "Lisu Bosa Medium", + "postscriptName": "LisuBosa-Medium", + "category": "serif", + "capHeight": 530, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 425, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "600": { + "familyName": "Lisu Bosa", + "fullName": "Lisu Bosa SemiBold", + "postscriptName": "LisuBosa-SemiBold", + "category": "serif", + "capHeight": 530, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 425, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "Lisu Bosa", + "fullName": "Lisu Bosa Bold", + "postscriptName": "LisuBosa-Bold", + "category": "serif", + "capHeight": 530, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 425, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "800": { + "familyName": "Lisu Bosa", + "fullName": "Lisu Bosa ExtraBold", + "postscriptName": "LisuBosa-ExtraBold", + "category": "serif", + "capHeight": 530, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 425, + "xWidthAvg": 436, + "subsets": { + "latin": { + "xWidthAvg": 436 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "900": { + "familyName": "Lisu Bosa", + "fullName": "Lisu Bosa Black", + "postscriptName": "LisuBosa-Black", + "category": "serif", + "capHeight": 530, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 425, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Lisu Bosa", + "fullName": "Lisu Bosa", + "postscriptName": "LisuBosa-Regular", + "category": "serif", + "capHeight": 530, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 425, + "xWidthAvg": 432, + "subsets": { + "latin": { + "xWidthAvg": 432 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "italic": { + "familyName": "Lisu Bosa", + "fullName": "Lisu Bosa Italic", + "postscriptName": "LisuBosa-Italic", + "category": "serif", + "capHeight": 530, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 425, + "xWidthAvg": 406, + "subsets": { + "latin": { + "xWidthAvg": 406 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "900italic": { + "familyName": "Lisu Bosa", + "fullName": "Lisu Bosa Black Italic", + "postscriptName": "LisuBosa-BlackItalic", + "category": "serif", + "capHeight": 530, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 425, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "800italic": { + "familyName": "Lisu Bosa", + "fullName": "Lisu Bosa ExtraBold Italic", + "postscriptName": "LisuBosa-ExtraBoldItalic", + "category": "serif", + "capHeight": 530, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 425, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700italic": { + "familyName": "Lisu Bosa", + "fullName": "Lisu Bosa Bold Italic", + "postscriptName": "LisuBosa-BoldItalic", + "category": "serif", + "capHeight": 530, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 425, + "xWidthAvg": 416, + "subsets": { + "latin": { + "xWidthAvg": 416 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "600italic": { + "familyName": "Lisu Bosa", + "fullName": "Lisu Bosa SemiBold Italic", + "postscriptName": "LisuBosa-SemiBoldItalic", + "category": "serif", + "capHeight": 530, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 425, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "500italic": { + "familyName": "Lisu Bosa", + "fullName": "Lisu Bosa Medium Italic", + "postscriptName": "LisuBosa-MediumItalic", + "category": "serif", + "capHeight": 530, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 425, + "xWidthAvg": 409, + "subsets": { + "latin": { + "xWidthAvg": 409 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "300italic": { + "familyName": "Lisu Bosa", + "fullName": "Lisu Bosa Light Italic", + "postscriptName": "LisuBosa-LightItalic", + "category": "serif", + "capHeight": 530, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 425, + "xWidthAvg": 404, + "subsets": { + "latin": { + "xWidthAvg": 404 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "200italic": { + "familyName": "Lisu Bosa", + "fullName": "Lisu Bosa ExtraLight Italic", + "postscriptName": "LisuBosa-ExtraLightItalic", + "category": "serif", + "capHeight": 530, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 425, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "literata": { + "familyName": "Literata", + "fullName": "Literata Regular", + "postscriptName": "Literata-Regular", + "category": "serif", + "capHeight": 701, + "ascent": 1177, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 507, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "200": { + "familyName": "Literata", + "fullName": "Literata ExtraLight", + "postscriptName": "Literata-ExtraLight", + "category": "serif", + "capHeight": 701, + "ascent": 1177, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 503, + "xWidthAvg": 449, + "subsets": { + "latin": { + "xWidthAvg": 449 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Literata", + "fullName": "Literata Light", + "postscriptName": "Literata-Light", + "category": "serif", + "capHeight": 701, + "ascent": 1177, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Literata", + "fullName": "Literata Medium", + "postscriptName": "Literata-Medium", + "category": "serif", + "capHeight": 701, + "ascent": 1177, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 509, + "xWidthAvg": 491, + "subsets": { + "latin": { + "xWidthAvg": 491 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Literata", + "fullName": "Literata SemiBold", + "postscriptName": "Literata-SemiBold", + "category": "serif", + "capHeight": 701, + "ascent": 1177, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Literata", + "fullName": "Literata Bold", + "postscriptName": "Literata-Bold", + "category": "serif", + "capHeight": 701, + "ascent": 1177, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Literata", + "fullName": "Literata ExtraBold", + "postscriptName": "Literata-ExtraBold", + "category": "serif", + "capHeight": 701, + "ascent": 1177, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "Literata", + "fullName": "Literata Black", + "postscriptName": "Literata-Black", + "category": "serif", + "capHeight": 701, + "ascent": 1177, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 545, + "subsets": { + "latin": { + "xWidthAvg": 545 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Literata", + "fullName": "Literata Regular", + "postscriptName": "Literata-Regular", + "category": "serif", + "capHeight": 701, + "ascent": 1177, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 507, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Literata", + "fullName": "Literata Italic", + "postscriptName": "Literata-Italic", + "category": "serif", + "capHeight": 701, + "ascent": 1177, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 507, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 489 + } + } + }, + "900italic": { + "familyName": "Literata", + "fullName": "Literata Black Italic", + "postscriptName": "Literata-BlackItalic", + "category": "serif", + "capHeight": 701, + "ascent": 1177, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 534, + "subsets": { + "latin": { + "xWidthAvg": 534 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800italic": { + "familyName": "Literata", + "fullName": "Literata ExtraBold Italic", + "postscriptName": "Literata-ExtraBoldItalic", + "category": "serif", + "capHeight": 701, + "ascent": 1177, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 518, + "subsets": { + "latin": { + "xWidthAvg": 518 + }, + "thai": { + "xWidthAvg": 498 + } + } + }, + "700italic": { + "familyName": "Literata", + "fullName": "Literata Bold Italic", + "postscriptName": "Literata-BoldItalic", + "category": "serif", + "capHeight": 701, + "ascent": 1177, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 494 + } + } + }, + "600italic": { + "familyName": "Literata", + "fullName": "Literata SemiBold Italic", + "postscriptName": "Literata-SemiBoldItalic", + "category": "serif", + "capHeight": 701, + "ascent": 1177, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 492 + } + } + }, + "500italic": { + "familyName": "Literata", + "fullName": "Literata Medium Italic", + "postscriptName": "Literata-MediumItalic", + "category": "serif", + "capHeight": 701, + "ascent": 1177, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 509, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 491 + } + } + }, + "300italic": { + "familyName": "Literata", + "fullName": "Literata Light Italic", + "postscriptName": "Literata-LightItalic", + "category": "serif", + "capHeight": 701, + "ascent": 1177, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 495 + } + } + }, + "200italic": { + "familyName": "Literata", + "fullName": "Literata ExtraLight Italic", + "postscriptName": "Literata-ExtraLightItalic", + "category": "serif", + "capHeight": 701, + "ascent": 1177, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 503, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "liuJianMaoCao": { + "familyName": "Liu Jian Mao Cao", + "fullName": "Liu Jian Mao Cao Regular", + "postscriptName": "LiuJianMaoCao-Regular", + "category": "handwriting", + "capHeight": 600, + "ascent": 880, + "descent": -120, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 420, + "xWidthAvg": 381, + "subsets": { + "latin": { + "xWidthAvg": 381 + }, + "thai": { + "xWidthAvg": 415 + } + }, + "variants": { + "regular": { + "familyName": "Liu Jian Mao Cao", + "fullName": "Liu Jian Mao Cao Regular", + "postscriptName": "LiuJianMaoCao-Regular", + "category": "handwriting", + "capHeight": 600, + "ascent": 880, + "descent": -120, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 420, + "xWidthAvg": 381, + "subsets": { + "latin": { + "xWidthAvg": 381 + }, + "thai": { + "xWidthAvg": 415 + } + } + } + } + }, + "livvic": { + "familyName": "Livvic", + "fullName": "Livvic Regular", + "postscriptName": "Livvic-Regular", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 497, + "xWidthAvg": 449, + "subsets": { + "latin": { + "xWidthAvg": 449 + }, + "thai": { + "xWidthAvg": 290 + } + }, + "variants": { + "100": { + "familyName": "Livvic", + "fullName": "Livvic Thin", + "postscriptName": "Livvic-Thin", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 491, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 290 + } + } + }, + "200": { + "familyName": "Livvic", + "fullName": "Livvic ExtraLight", + "postscriptName": "Livvic-ExtraLight", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 290 + } + } + }, + "300": { + "familyName": "Livvic", + "fullName": "Livvic Light", + "postscriptName": "Livvic-Light", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 290 + } + } + }, + "500": { + "familyName": "Livvic", + "fullName": "Livvic Medium", + "postscriptName": "Livvic-Medium", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 290 + } + } + }, + "600": { + "familyName": "Livvic", + "fullName": "Livvic SemiBold", + "postscriptName": "Livvic-SemiBold", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 290 + } + } + }, + "700": { + "familyName": "Livvic", + "fullName": "Livvic Bold", + "postscriptName": "Livvic-Bold", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 509, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 290 + } + } + }, + "900": { + "familyName": "Livvic", + "fullName": "Livvic Black", + "postscriptName": "Livvic-Black", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 290 + } + } + }, + "regular": { + "familyName": "Livvic", + "fullName": "Livvic Regular", + "postscriptName": "Livvic-Regular", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 497, + "xWidthAvg": 449, + "subsets": { + "latin": { + "xWidthAvg": 449 + }, + "thai": { + "xWidthAvg": 290 + } + } + }, + "italic": { + "familyName": "Livvic", + "fullName": "Livvic Italic", + "postscriptName": "Livvic-Italic", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 497, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 290 + } + } + }, + "900italic": { + "familyName": "Livvic", + "fullName": "Livvic Black Italic", + "postscriptName": "Livvic-BlackItalic", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 290 + } + } + }, + "700italic": { + "familyName": "Livvic", + "fullName": "Livvic Bold Italic", + "postscriptName": "Livvic-BoldItalic", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 509, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 290 + } + } + }, + "600italic": { + "familyName": "Livvic", + "fullName": "Livvic SemiBold Italic", + "postscriptName": "Livvic-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 290 + } + } + }, + "500italic": { + "familyName": "Livvic", + "fullName": "Livvic Medium Italic", + "postscriptName": "Livvic-MediumItalic", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 290 + } + } + }, + "300italic": { + "familyName": "Livvic", + "fullName": "Livvic Light Italic", + "postscriptName": "Livvic-LightItalic", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 290 + } + } + }, + "200italic": { + "familyName": "Livvic", + "fullName": "Livvic ExtraLight Italic", + "postscriptName": "Livvic-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 290 + } + } + }, + "100italic": { + "familyName": "Livvic", + "fullName": "Livvic Thin Italic", + "postscriptName": "Livvic-ThinItalic", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 491, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 290 + } + } + } + } + }, + "lobster": { + "familyName": "Lobster", + "fullName": "Lobster Regular", + "postscriptName": "Lobster-Regular", + "category": "display", + "capHeight": 748, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 392, + "subsets": { + "latin": { + "xWidthAvg": 392 + }, + "thai": { + "xWidthAvg": 810 + } + }, + "variants": { + "regular": { + "familyName": "Lobster", + "fullName": "Lobster Regular", + "postscriptName": "Lobster-Regular", + "category": "display", + "capHeight": 748, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 392, + "subsets": { + "latin": { + "xWidthAvg": 392 + }, + "thai": { + "xWidthAvg": 810 + } + } + } + } + }, + "lobsterTwo": { + "familyName": "Lobster Two", + "fullName": "Lobster Two", + "postscriptName": "LobsterTwo", + "category": "display", + "capHeight": 754, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 364, + "subsets": { + "latin": { + "xWidthAvg": 364 + }, + "thai": { + "xWidthAvg": 385 + } + }, + "variants": { + "700": { + "familyName": "Lobster Two", + "fullName": "Lobster Two Bold", + "postscriptName": "LobsterTwo-Bold", + "category": "display", + "capHeight": 752, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 392, + "subsets": { + "latin": { + "xWidthAvg": 392 + }, + "thai": { + "xWidthAvg": 385 + } + } + }, + "regular": { + "familyName": "Lobster Two", + "fullName": "Lobster Two", + "postscriptName": "LobsterTwo", + "category": "display", + "capHeight": 754, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 364, + "subsets": { + "latin": { + "xWidthAvg": 364 + }, + "thai": { + "xWidthAvg": 385 + } + } + }, + "italic": { + "familyName": "Lobster Two", + "fullName": "Lobster Two Italic", + "postscriptName": "LobsterTwo-Italic", + "category": "display", + "capHeight": 754, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 365, + "subsets": { + "latin": { + "xWidthAvg": 365 + }, + "thai": { + "xWidthAvg": 385 + } + } + }, + "700italic": { + "familyName": "Lobster Two", + "fullName": "Lobster Two Bold Italic", + "postscriptName": "LobsterTwo-BoldItalic", + "category": "display", + "capHeight": 752, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 392, + "subsets": { + "latin": { + "xWidthAvg": 392 + }, + "thai": { + "xWidthAvg": 385 + } + } + } + } + }, + "londrinaOutline": { + "familyName": "Londrina Outline", + "fullName": "Londrina Outline Regular", + "postscriptName": "LondrinaOutline-Regular", + "category": "display", + "capHeight": 722, + "ascent": 945, + "descent": -238, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 383, + "subsets": { + "latin": { + "xWidthAvg": 383 + }, + "thai": { + "xWidthAvg": 238 + } + }, + "variants": { + "regular": { + "familyName": "Londrina Outline", + "fullName": "Londrina Outline Regular", + "postscriptName": "LondrinaOutline-Regular", + "category": "display", + "capHeight": 722, + "ascent": 945, + "descent": -238, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 383, + "subsets": { + "latin": { + "xWidthAvg": 383 + }, + "thai": { + "xWidthAvg": 238 + } + } + } + } + }, + "londrinaShadow": { + "familyName": "Londrina Shadow", + "fullName": "Londrina Shadow Regular", + "postscriptName": "LondrinaShadow-Regular", + "category": "display", + "capHeight": 722, + "ascent": 945, + "descent": -238, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 383, + "subsets": { + "latin": { + "xWidthAvg": 383 + }, + "thai": { + "xWidthAvg": 238 + } + }, + "variants": { + "regular": { + "familyName": "Londrina Shadow", + "fullName": "Londrina Shadow Regular", + "postscriptName": "LondrinaShadow-Regular", + "category": "display", + "capHeight": 722, + "ascent": 945, + "descent": -238, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 383, + "subsets": { + "latin": { + "xWidthAvg": 383 + }, + "thai": { + "xWidthAvg": 238 + } + } + } + } + }, + "londrinaSketch": { + "familyName": "Londrina Sketch", + "fullName": "Londrina Sketch Regular", + "postscriptName": "LondrinaSketch-Regular", + "category": "display", + "capHeight": 722, + "ascent": 945, + "descent": -238, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 383, + "subsets": { + "latin": { + "xWidthAvg": 383 + }, + "thai": { + "xWidthAvg": 238 + } + }, + "variants": { + "regular": { + "familyName": "Londrina Sketch", + "fullName": "Londrina Sketch Regular", + "postscriptName": "LondrinaSketch-Regular", + "category": "display", + "capHeight": 722, + "ascent": 945, + "descent": -238, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 383, + "subsets": { + "latin": { + "xWidthAvg": 383 + }, + "thai": { + "xWidthAvg": 238 + } + } + } + } + }, + "londrinaSolid": { + "familyName": "Londrina Solid", + "fullName": "Londrina Solid Regular", + "postscriptName": "LondrinaSolid-Regular", + "category": "display", + "capHeight": 722, + "ascent": 945, + "descent": -238, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 383, + "subsets": { + "latin": { + "xWidthAvg": 383 + }, + "thai": { + "xWidthAvg": 238 + } + }, + "variants": { + "100": { + "familyName": "Londrina Solid", + "fullName": "Londrina Solid Thin", + "postscriptName": "LondrinaSolid-Thin", + "category": "display", + "capHeight": 722, + "ascent": 945, + "descent": -238, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 379, + "subsets": { + "latin": { + "xWidthAvg": 379 + }, + "thai": { + "xWidthAvg": 238 + } + } + }, + "300": { + "familyName": "Londrina Solid", + "fullName": "Londrina Solid Light", + "postscriptName": "LondrinaSolid-Light", + "category": "display", + "capHeight": 722, + "ascent": 945, + "descent": -238, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 381, + "subsets": { + "latin": { + "xWidthAvg": 381 + }, + "thai": { + "xWidthAvg": 238 + } + } + }, + "900": { + "familyName": "Londrina Solid", + "fullName": "Londrina Solid Black", + "postscriptName": "LondrinaSolid-Black", + "category": "display", + "capHeight": 722, + "ascent": 945, + "descent": -238, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 383, + "subsets": { + "latin": { + "xWidthAvg": 383 + }, + "thai": { + "xWidthAvg": 238 + } + } + }, + "regular": { + "familyName": "Londrina Solid", + "fullName": "Londrina Solid Regular", + "postscriptName": "LondrinaSolid-Regular", + "category": "display", + "capHeight": 722, + "ascent": 945, + "descent": -238, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 383, + "subsets": { + "latin": { + "xWidthAvg": 383 + }, + "thai": { + "xWidthAvg": 238 + } + } + } + } + }, + "longCang": { + "familyName": "Long Cang", + "fullName": "Long Cang Regular", + "postscriptName": "LongCang-Regular", + "category": "handwriting", + "capHeight": 684, + "ascent": 880, + "descent": -120, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 400, + "subsets": { + "latin": { + "xWidthAvg": 400 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Long Cang", + "fullName": "Long Cang Regular", + "postscriptName": "LongCang-Regular", + "category": "handwriting", + "capHeight": 684, + "ascent": 880, + "descent": -120, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 400, + "subsets": { + "latin": { + "xWidthAvg": 400 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "lora": { + "familyName": "Lora", + "fullName": "Lora Regular", + "postscriptName": "Lora-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 1006, + "descent": -274, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 529 + } + }, + "variants": { + "500": { + "familyName": "Lora", + "fullName": "Lora Medium", + "postscriptName": "Lora-Medium", + "category": "serif", + "capHeight": 700, + "ascent": 1006, + "descent": -274, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 529 + } + } + }, + "600": { + "familyName": "Lora", + "fullName": "Lora SemiBold", + "postscriptName": "Lora-SemiBold", + "category": "serif", + "capHeight": 700, + "ascent": 1006, + "descent": -274, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 529 + } + } + }, + "700": { + "familyName": "Lora", + "fullName": "Lora Bold", + "postscriptName": "Lora-Bold", + "category": "serif", + "capHeight": 700, + "ascent": 1006, + "descent": -274, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 529 + } + } + }, + "regular": { + "familyName": "Lora", + "fullName": "Lora Regular", + "postscriptName": "Lora-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 1006, + "descent": -274, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 529 + } + } + }, + "italic": { + "familyName": "Lora", + "fullName": "Lora Italic", + "postscriptName": "Lora-Italic", + "category": "serif", + "capHeight": 700, + "ascent": 1006, + "descent": -274, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 503 + } + } + }, + "700italic": { + "familyName": "Lora", + "fullName": "Lora Bold Italic", + "postscriptName": "Lora-BoldItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1006, + "descent": -274, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 542 + } + } + }, + "600italic": { + "familyName": "Lora", + "fullName": "Lora SemiBold Italic", + "postscriptName": "Lora-SemiBoldItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1006, + "descent": -274, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 529 + } + } + }, + "500italic": { + "familyName": "Lora", + "fullName": "Lora Medium Italic", + "postscriptName": "Lora-MediumItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1006, + "descent": -274, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 516 + } + } + } + } + }, + "loveLight": { + "familyName": "Love Light", + "fullName": "Love Light Regular", + "postscriptName": "LoveLight-Regular", + "category": "handwriting", + "capHeight": 700, + "ascent": 900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 320, + "xWidthAvg": 296, + "subsets": { + "latin": { + "xWidthAvg": 296 + }, + "thai": { + "xWidthAvg": 499 + } + }, + "variants": { + "regular": { + "familyName": "Love Light", + "fullName": "Love Light Regular", + "postscriptName": "LoveLight-Regular", + "category": "handwriting", + "capHeight": 700, + "ascent": 900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 320, + "xWidthAvg": 296, + "subsets": { + "latin": { + "xWidthAvg": 296 + }, + "thai": { + "xWidthAvg": 499 + } + } + } + } + }, + "loveYaLikeASister": { + "familyName": "Love Ya Like A Sister", + "fullName": "Love Ya Like A Sister Regular", + "postscriptName": "LoveYaLikeASister-Regular", + "category": "display", + "capHeight": 674, + "ascent": 942, + "descent": -333, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 510, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 319 + } + }, + "variants": { + "regular": { + "familyName": "Love Ya Like A Sister", + "fullName": "Love Ya Like A Sister Regular", + "postscriptName": "LoveYaLikeASister-Regular", + "category": "display", + "capHeight": 674, + "ascent": 942, + "descent": -333, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 510, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 319 + } + } + } + } + }, + "lovedByTheKing": { + "familyName": "Loved by the King", + "fullName": "Loved by the King", + "postscriptName": "LovedbytheKing", + "category": "handwriting", + "capHeight": 1774, + "ascent": 2398, + "descent": -1137, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1111, + "xWidthAvg": 657, + "subsets": { + "latin": { + "xWidthAvg": 657 + }, + "thai": { + "xWidthAvg": 1434 + } + }, + "variants": { + "regular": { + "familyName": "Loved by the King", + "fullName": "Loved by the King", + "postscriptName": "LovedbytheKing", + "category": "handwriting", + "capHeight": 1774, + "ascent": 2398, + "descent": -1137, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1111, + "xWidthAvg": 657, + "subsets": { + "latin": { + "xWidthAvg": 657 + }, + "thai": { + "xWidthAvg": 1434 + } + } + } + } + }, + "loversQuarrel": { + "familyName": "Lovers Quarrel", + "fullName": "Lovers Quarrel Regular", + "postscriptName": "LoversQuarrel-Regular", + "category": "handwriting", + "capHeight": 609, + "ascent": 726, + "descent": -401, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 274, + "xWidthAvg": 236, + "subsets": { + "latin": { + "xWidthAvg": 236 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Lovers Quarrel", + "fullName": "Lovers Quarrel Regular", + "postscriptName": "LoversQuarrel-Regular", + "category": "handwriting", + "capHeight": 609, + "ascent": 726, + "descent": -401, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 274, + "xWidthAvg": 236, + "subsets": { + "latin": { + "xWidthAvg": 236 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "lucidaGrande": { + "familyName": "Lucida Grande", + "fullName": "Lucida Grande", + "postscriptName": "LucidaGrande", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 1980, + "descent": -432, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1086, + "xWidthAvg": 1007, + "subsets": { + "latin": { + "xWidthAvg": 1007 + }, + "thai": { + "xWidthAvg": 1536 + } + }, + "variants": { + "700": { + "familyName": "Lucida Grande", + "fullName": "Lucida Grande Bold", + "postscriptName": "LucidaGrande-Bold", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 1980, + "descent": -432, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 1071, + "subsets": { + "latin": { + "xWidthAvg": 1071 + }, + "thai": { + "xWidthAvg": 1536 + } + } + }, + "regular": { + "familyName": "Lucida Grande", + "fullName": "Lucida Grande", + "postscriptName": "LucidaGrande", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 1980, + "descent": -432, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1086, + "xWidthAvg": 1007, + "subsets": { + "latin": { + "xWidthAvg": 1007 + }, + "thai": { + "xWidthAvg": 1536 + } + } + } + } + }, + "luckiestGuy": { + "familyName": "Luckiest Guy", + "fullName": "Luckiest Guy Regular", + "postscriptName": "LuckiestGuy-Regular", + "category": "display", + "capHeight": 1424, + "ascent": 1440, + "descent": -608, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1400, + "xWidthAvg": 1040, + "subsets": { + "latin": { + "xWidthAvg": 1040 + }, + "thai": { + "xWidthAvg": 400 + } + }, + "variants": { + "regular": { + "familyName": "Luckiest Guy", + "fullName": "Luckiest Guy Regular", + "postscriptName": "LuckiestGuy-Regular", + "category": "display", + "capHeight": 1424, + "ascent": 1440, + "descent": -608, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1400, + "xWidthAvg": 1040, + "subsets": { + "latin": { + "xWidthAvg": 1040 + }, + "thai": { + "xWidthAvg": 400 + } + } + } + } + }, + "lugrasimo": { + "familyName": "Lugrasimo", + "fullName": "Lugrasimo Regular", + "postscriptName": "Lugrasimo-Regular", + "category": "handwriting", + "capHeight": 1434, + "ascent": 2122, + "descent": -666, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 1105, + "subsets": { + "latin": { + "xWidthAvg": 1105 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Lugrasimo", + "fullName": "Lugrasimo Regular", + "postscriptName": "Lugrasimo-Regular", + "category": "handwriting", + "capHeight": 1434, + "ascent": 2122, + "descent": -666, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 1105, + "subsets": { + "latin": { + "xWidthAvg": 1105 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "lumanosimo": { + "familyName": "Lumanosimo", + "fullName": "Lumanosimo Regular", + "postscriptName": "Lumanosimo-Regular", + "category": "handwriting", + "capHeight": 1434, + "ascent": 2098, + "descent": -727, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 1173, + "subsets": { + "latin": { + "xWidthAvg": 1173 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Lumanosimo", + "fullName": "Lumanosimo Regular", + "postscriptName": "Lumanosimo-Regular", + "category": "handwriting", + "capHeight": 1434, + "ascent": 2098, + "descent": -727, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 1173, + "subsets": { + "latin": { + "xWidthAvg": 1173 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "lunasima": { + "familyName": "Lunasima", + "fullName": "Lunasima Regular", + "postscriptName": "Lunasima-Regular", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 1980, + "descent": -432, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1086, + "xWidthAvg": 1007, + "subsets": { + "latin": { + "xWidthAvg": 1007 + }, + "thai": { + "xWidthAvg": 1536 + } + }, + "variants": { + "700": { + "familyName": "Lunasima", + "fullName": "Lunasima Bold", + "postscriptName": "Lunasima-Bold", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 1980, + "descent": -432, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 1071, + "subsets": { + "latin": { + "xWidthAvg": 1071 + }, + "thai": { + "xWidthAvg": 1536 + } + } + }, + "regular": { + "familyName": "Lunasima", + "fullName": "Lunasima Regular", + "postscriptName": "Lunasima-Regular", + "category": "sans-serif", + "capHeight": 1480, + "ascent": 1980, + "descent": -432, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1086, + "xWidthAvg": 1007, + "subsets": { + "latin": { + "xWidthAvg": 1007 + }, + "thai": { + "xWidthAvg": 1536 + } + } + } + } + }, + "lusitana": { + "familyName": "Lusitana", + "fullName": "Lusitana", + "postscriptName": "Lusitana", + "category": "serif", + "capHeight": 714, + "ascent": 956, + "descent": -341, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 139, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 198 + } + }, + "variants": { + "700": { + "familyName": "Lusitana", + "fullName": "Lusitana Bold", + "postscriptName": "Lusitana-Bold", + "category": "serif", + "capHeight": 713, + "ascent": 956, + "descent": -341, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 163, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 198 + } + } + }, + "regular": { + "familyName": "Lusitana", + "fullName": "Lusitana", + "postscriptName": "Lusitana", + "category": "serif", + "capHeight": 714, + "ascent": 956, + "descent": -341, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 139, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 198 + } + } + } + } + }, + "lustria": { + "familyName": "Lustria", + "fullName": "Lustria", + "postscriptName": "Lustria-Regular", + "category": "serif", + "capHeight": 704, + "ascent": 955, + "descent": -327, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Lustria", + "fullName": "Lustria", + "postscriptName": "Lustria-Regular", + "category": "serif", + "capHeight": 704, + "ascent": 955, + "descent": -327, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "luxuriousRoman": { + "familyName": "Luxurious Roman", + "fullName": "Luxurious Roman Regular", + "postscriptName": "LuxuriousRoman-Regular", + "category": "display", + "capHeight": 665, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 568 + } + }, + "variants": { + "regular": { + "familyName": "Luxurious Roman", + "fullName": "Luxurious Roman Regular", + "postscriptName": "LuxuriousRoman-Regular", + "category": "display", + "capHeight": 665, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 568 + } + } + } + } + }, + "luxuriousScript": { + "familyName": "Luxurious Script", + "fullName": "Luxurious Script Regular", + "postscriptName": "LuxuriousScript-Regular", + "category": "handwriting", + "capHeight": 565, + "ascent": 850, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 330, + "xWidthAvg": 254, + "subsets": { + "latin": { + "xWidthAvg": 254 + }, + "thai": { + "xWidthAvg": 494 + } + }, + "variants": { + "regular": { + "familyName": "Luxurious Script", + "fullName": "Luxurious Script Regular", + "postscriptName": "LuxuriousScript-Regular", + "category": "handwriting", + "capHeight": 565, + "ascent": 850, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 330, + "xWidthAvg": 254, + "subsets": { + "latin": { + "xWidthAvg": 254 + }, + "thai": { + "xWidthAvg": 494 + } + } + } + } + }, + "mPLUS1": { + "familyName": "M PLUS 1", + "fullName": "M PLUS 1 Regular", + "postscriptName": "MPLUS1-Regular", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "100": { + "familyName": "M PLUS 1", + "fullName": "M PLUS 1 Thin", + "postscriptName": "MPLUS1-Thin", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200": { + "familyName": "M PLUS 1", + "fullName": "M PLUS 1 ExtraLight", + "postscriptName": "MPLUS1-ExtraLight", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "M PLUS 1", + "fullName": "M PLUS 1 Light", + "postscriptName": "MPLUS1-Light", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "M PLUS 1", + "fullName": "M PLUS 1 Medium", + "postscriptName": "MPLUS1-Medium", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "M PLUS 1", + "fullName": "M PLUS 1 SemiBold", + "postscriptName": "MPLUS1-SemiBold", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "M PLUS 1", + "fullName": "M PLUS 1 Bold", + "postscriptName": "MPLUS1-Bold", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "M PLUS 1", + "fullName": "M PLUS 1 ExtraBold", + "postscriptName": "MPLUS1-ExtraBold", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "M PLUS 1", + "fullName": "M PLUS 1 Black", + "postscriptName": "MPLUS1-Black", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 511, + "subsets": { + "latin": { + "xWidthAvg": 511 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "M PLUS 1", + "fullName": "M PLUS 1 Regular", + "postscriptName": "MPLUS1-Regular", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "mPLUS1Code": { + "familyName": "M PLUS 1 Code", + "fullName": "M PLUS 1 Code Regular", + "postscriptName": "MPLUS1Code-Regular", + "category": "monospace", + "capHeight": 730, + "ascent": 1000, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "100": { + "familyName": "M PLUS 1 Code", + "fullName": "M PLUS 1 Code Thin", + "postscriptName": "MPLUS1Code-Thin", + "category": "monospace", + "capHeight": 730, + "ascent": 1000, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200": { + "familyName": "M PLUS 1 Code", + "fullName": "M PLUS 1 Code ExtraLight", + "postscriptName": "MPLUS1Code-ExtraLight", + "category": "monospace", + "capHeight": 730, + "ascent": 1000, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "M PLUS 1 Code", + "fullName": "M PLUS 1 Code Light", + "postscriptName": "MPLUS1Code-Light", + "category": "monospace", + "capHeight": 730, + "ascent": 1000, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "M PLUS 1 Code", + "fullName": "M PLUS 1 Code Medium", + "postscriptName": "MPLUS1Code-Medium", + "category": "monospace", + "capHeight": 730, + "ascent": 1000, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "M PLUS 1 Code", + "fullName": "M PLUS 1 Code SemiBold", + "postscriptName": "MPLUS1Code-SemiBold", + "category": "monospace", + "capHeight": 730, + "ascent": 1000, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "M PLUS 1 Code", + "fullName": "M PLUS 1 Code Bold", + "postscriptName": "MPLUS1Code-Bold", + "category": "monospace", + "capHeight": 730, + "ascent": 1000, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "M PLUS 1 Code", + "fullName": "M PLUS 1 Code Regular", + "postscriptName": "MPLUS1Code-Regular", + "category": "monospace", + "capHeight": 730, + "ascent": 1000, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "mPLUS1p": { + "familyName": "M PLUS 1p", + "fullName": "M PLUS 1p Regular", + "postscriptName": "MPLUS1p-Regular", + "category": "sans-serif", + "ascent": 1075, + "descent": -320, + "lineGap": 90, + "unitsPerEm": 1000, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 364 + } + }, + "variants": { + "100": { + "familyName": "M PLUS 1p", + "fullName": "M PLUS 1p Thin", + "postscriptName": "MPLUS1p-Thin", + "category": "sans-serif", + "ascent": 1075, + "descent": -320, + "lineGap": 90, + "unitsPerEm": 1000, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "300": { + "familyName": "M PLUS 1p", + "fullName": "M PLUS 1p Light", + "postscriptName": "MPLUS1p-Light", + "category": "sans-serif", + "ascent": 1075, + "descent": -320, + "lineGap": 90, + "unitsPerEm": 1000, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "500": { + "familyName": "M PLUS 1p", + "fullName": "M PLUS 1p Medium", + "postscriptName": "MPLUS1p-Medium", + "category": "sans-serif", + "ascent": 1075, + "descent": -320, + "lineGap": 90, + "unitsPerEm": 1000, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "700": { + "familyName": "M PLUS 1p", + "fullName": "M PLUS 1p Bold", + "postscriptName": "MPLUS1p-Bold", + "category": "sans-serif", + "ascent": 1075, + "descent": -320, + "lineGap": 90, + "unitsPerEm": 1000, + "xWidthAvg": 513, + "subsets": { + "latin": { + "xWidthAvg": 513 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "800": { + "familyName": "M PLUS 1p", + "fullName": "M PLUS 1p ExtraBold", + "postscriptName": "MPLUS1p-ExtraBold", + "category": "sans-serif", + "ascent": 1075, + "descent": -320, + "lineGap": 90, + "unitsPerEm": 1000, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "900": { + "familyName": "M PLUS 1p", + "fullName": "M PLUS 1p Black", + "postscriptName": "MPLUS1p-Black", + "category": "sans-serif", + "ascent": 1075, + "descent": -320, + "lineGap": 90, + "unitsPerEm": 1000, + "xWidthAvg": 543, + "subsets": { + "latin": { + "xWidthAvg": 543 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "regular": { + "familyName": "M PLUS 1p", + "fullName": "M PLUS 1p Regular", + "postscriptName": "MPLUS1p-Regular", + "category": "sans-serif", + "ascent": 1075, + "descent": -320, + "lineGap": 90, + "unitsPerEm": 1000, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 364 + } + } + } + } + }, + "mPLUS2": { + "familyName": "M PLUS 2", + "fullName": "M PLUS 2 Regular", + "postscriptName": "MPLUS2-Regular", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "100": { + "familyName": "M PLUS 2", + "fullName": "M PLUS 2 Thin", + "postscriptName": "MPLUS2-Thin", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200": { + "familyName": "M PLUS 2", + "fullName": "M PLUS 2 ExtraLight", + "postscriptName": "MPLUS2-ExtraLight", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "M PLUS 2", + "fullName": "M PLUS 2 Light", + "postscriptName": "MPLUS2-Light", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "M PLUS 2", + "fullName": "M PLUS 2 Medium", + "postscriptName": "MPLUS2-Medium", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 497, + "subsets": { + "latin": { + "xWidthAvg": 497 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "M PLUS 2", + "fullName": "M PLUS 2 SemiBold", + "postscriptName": "MPLUS2-SemiBold", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "M PLUS 2", + "fullName": "M PLUS 2 Bold", + "postscriptName": "MPLUS2-Bold", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "M PLUS 2", + "fullName": "M PLUS 2 ExtraBold", + "postscriptName": "MPLUS2-ExtraBold", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 507, + "subsets": { + "latin": { + "xWidthAvg": 507 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "M PLUS 2", + "fullName": "M PLUS 2 Black", + "postscriptName": "MPLUS2-Black", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 513, + "subsets": { + "latin": { + "xWidthAvg": 513 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "M PLUS 2", + "fullName": "M PLUS 2 Regular", + "postscriptName": "MPLUS2-Regular", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "mPLUSCodeLatin": { + "familyName": "M PLUS Code Latin", + "fullName": "M PLUS Code Latin Regular", + "postscriptName": "MPLUSCodeLatin-Regular", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1000, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "100": { + "familyName": "M PLUS Code Latin", + "fullName": "M PLUS Code Latin Thin", + "postscriptName": "MPLUSCodeLatin-Thin", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1000, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200": { + "familyName": "M PLUS Code Latin", + "fullName": "M PLUS Code Latin ExtraLight", + "postscriptName": "MPLUSCodeLatin-ExtraLight", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1000, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "M PLUS Code Latin", + "fullName": "M PLUS Code Latin Light", + "postscriptName": "MPLUSCodeLatin-Light", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1000, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "M PLUS Code Latin", + "fullName": "M PLUS Code Latin Medium", + "postscriptName": "MPLUSCodeLatin-Medium", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1000, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "M PLUS Code Latin", + "fullName": "M PLUS Code Latin SemiBold", + "postscriptName": "MPLUSCodeLatin-SemiBold", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1000, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "M PLUS Code Latin", + "fullName": "M PLUS Code Latin Bold", + "postscriptName": "MPLUSCodeLatin-Bold", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1000, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "M PLUS Code Latin", + "fullName": "M PLUS Code Latin Regular", + "postscriptName": "MPLUSCodeLatin-Regular", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1000, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "mPLUSRounded1c": { + "familyName": "M PLUS Rounded 1c", + "fullName": "Rounded Mplus 1c", + "postscriptName": "RoundedMplus1c-Regular", + "category": "sans-serif", + "ascent": 1075, + "descent": -320, + "lineGap": 90, + "unitsPerEm": 1000, + "xWidthAvg": 476, + "subsets": { + "latin": { + "xWidthAvg": 476 + }, + "thai": { + "xWidthAvg": 364 + } + }, + "variants": { + "100": { + "familyName": "M PLUS Rounded 1c", + "fullName": "Rounded Mplus 1c Thin", + "postscriptName": "RoundedMplus1c-Thin", + "category": "sans-serif", + "ascent": 1075, + "descent": -320, + "lineGap": 90, + "unitsPerEm": 1000, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "300": { + "familyName": "M PLUS Rounded 1c", + "fullName": "Rounded Mplus 1c Light", + "postscriptName": "RoundedMplus1c-Light", + "category": "sans-serif", + "ascent": 1075, + "descent": -320, + "lineGap": 90, + "unitsPerEm": 1000, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "500": { + "familyName": "M PLUS Rounded 1c", + "fullName": "Rounded Mplus 1c Medium", + "postscriptName": "RoundedMplus1c-Medium", + "category": "sans-serif", + "ascent": 1075, + "descent": -320, + "lineGap": 90, + "unitsPerEm": 1000, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "700": { + "familyName": "M PLUS Rounded 1c", + "fullName": "Rounded Mplus 1c Bold", + "postscriptName": "RoundedMplus1c-Bold", + "category": "sans-serif", + "ascent": 1075, + "descent": -320, + "lineGap": 90, + "unitsPerEm": 1000, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "800": { + "familyName": "M PLUS Rounded 1c", + "fullName": "Rounded Mplus 1c ExtraBold", + "postscriptName": "RoundedMplus1c-ExtraBold", + "category": "sans-serif", + "ascent": 1075, + "descent": -320, + "lineGap": 90, + "unitsPerEm": 1000, + "xWidthAvg": 515, + "subsets": { + "latin": { + "xWidthAvg": 515 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "900": { + "familyName": "M PLUS Rounded 1c", + "fullName": "Rounded Mplus 1c Black", + "postscriptName": "RoundedMplus1c-Black", + "category": "sans-serif", + "ascent": 1075, + "descent": -320, + "lineGap": 90, + "unitsPerEm": 1000, + "xWidthAvg": 530, + "subsets": { + "latin": { + "xWidthAvg": 530 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "regular": { + "familyName": "M PLUS Rounded 1c", + "fullName": "Rounded Mplus 1c", + "postscriptName": "RoundedMplus1c-Regular", + "category": "sans-serif", + "ascent": 1075, + "descent": -320, + "lineGap": 90, + "unitsPerEm": 1000, + "xWidthAvg": 476, + "subsets": { + "latin": { + "xWidthAvg": 476 + }, + "thai": { + "xWidthAvg": 364 + } + } + } + } + }, + "maShanZheng": { + "familyName": "Ma Shan Zheng", + "fullName": "Ma Shan Zheng Regular", + "postscriptName": "MaShanZheng-Regular", + "category": "handwriting", + "capHeight": 760, + "ascent": 880, + "descent": -120, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 311, + "subsets": { + "latin": { + "xWidthAvg": 311 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Ma Shan Zheng", + "fullName": "Ma Shan Zheng Regular", + "postscriptName": "MaShanZheng-Regular", + "category": "handwriting", + "capHeight": 760, + "ascent": 880, + "descent": -120, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 311, + "subsets": { + "latin": { + "xWidthAvg": 311 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "macondo": { + "familyName": "Macondo", + "fullName": "Macondo", + "postscriptName": "Macondo-Regular", + "category": "display", + "capHeight": 53, + "ascent": 888, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 24, + "xWidthAvg": 416, + "subsets": { + "latin": { + "xWidthAvg": 416 + }, + "thai": { + "xWidthAvg": 300 + } + }, + "variants": { + "regular": { + "familyName": "Macondo", + "fullName": "Macondo", + "postscriptName": "Macondo-Regular", + "category": "display", + "capHeight": 53, + "ascent": 888, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 24, + "xWidthAvg": 416, + "subsets": { + "latin": { + "xWidthAvg": 416 + }, + "thai": { + "xWidthAvg": 300 + } + } + } + } + }, + "macondoSwashCaps": { + "familyName": "Macondo Swash Caps", + "fullName": "Macondo Swash Caps", + "postscriptName": "MacondoSwashCaps-Regular", + "category": "display", + "capHeight": 696, + "ascent": 888, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 24, + "xWidthAvg": 417, + "subsets": { + "latin": { + "xWidthAvg": 417 + }, + "thai": { + "xWidthAvg": 300 + } + }, + "variants": { + "regular": { + "familyName": "Macondo Swash Caps", + "fullName": "Macondo Swash Caps", + "postscriptName": "MacondoSwashCaps-Regular", + "category": "display", + "capHeight": 696, + "ascent": 888, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 24, + "xWidthAvg": 417, + "subsets": { + "latin": { + "xWidthAvg": 417 + }, + "thai": { + "xWidthAvg": 300 + } + } + } + } + }, + "mada": { + "familyName": "Mada", + "fullName": "Mada Regular", + "postscriptName": "Mada-Regular", + "category": "sans-serif", + "capHeight": 656, + "ascent": 950, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 418, + "subsets": { + "latin": { + "xWidthAvg": 418 + }, + "thai": { + "xWidthAvg": 653 + } + }, + "variants": { + "200": { + "familyName": "Mada", + "fullName": "Mada ExtraLight", + "postscriptName": "Mada-ExtraLight", + "category": "sans-serif", + "capHeight": 660, + "ascent": 950, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 398, + "subsets": { + "latin": { + "xWidthAvg": 398 + }, + "thai": { + "xWidthAvg": 624 + } + } + }, + "300": { + "familyName": "Mada", + "fullName": "Mada Light", + "postscriptName": "Mada-Light", + "category": "sans-serif", + "capHeight": 659, + "ascent": 950, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 403, + "subsets": { + "latin": { + "xWidthAvg": 403 + }, + "thai": { + "xWidthAvg": 632 + } + } + }, + "500": { + "familyName": "Mada", + "fullName": "Mada Medium", + "postscriptName": "Mada-Medium", + "category": "sans-serif", + "capHeight": 655, + "ascent": 950, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 489, + "xWidthAvg": 424, + "subsets": { + "latin": { + "xWidthAvg": 424 + }, + "thai": { + "xWidthAvg": 663 + } + } + }, + "600": { + "familyName": "Mada", + "fullName": "Mada SemiBold", + "postscriptName": "Mada-SemiBold", + "category": "sans-serif", + "capHeight": 654, + "ascent": 950, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 491, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 672 + } + } + }, + "700": { + "familyName": "Mada", + "fullName": "Mada Bold", + "postscriptName": "Mada-Bold", + "category": "sans-serif", + "capHeight": 652, + "ascent": 950, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 690 + } + } + }, + "800": { + "familyName": "Mada", + "fullName": "Mada ExtraBold", + "postscriptName": "Mada-ExtraBold", + "category": "sans-serif", + "capHeight": 651, + "ascent": 950, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 696 + } + } + }, + "900": { + "familyName": "Mada", + "fullName": "Mada Black", + "postscriptName": "Mada-Black", + "category": "sans-serif", + "capHeight": 650, + "ascent": 950, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 704 + } + } + }, + "regular": { + "familyName": "Mada", + "fullName": "Mada Regular", + "postscriptName": "Mada-Regular", + "category": "sans-serif", + "capHeight": 656, + "ascent": 950, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 418, + "subsets": { + "latin": { + "xWidthAvg": 418 + }, + "thai": { + "xWidthAvg": 653 + } + } + } + } + }, + "madimiOne": { + "familyName": "Madimi One", + "fullName": "Madimi One Regular", + "postscriptName": "MadimiOne-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1010, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 658 + } + }, + "variants": { + "regular": { + "familyName": "Madimi One", + "fullName": "Madimi One Regular", + "postscriptName": "MadimiOne-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1010, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 658 + } + } + } + } + }, + "magra": { + "familyName": "Magra", + "fullName": "Magra", + "postscriptName": "Magra", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -247, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 413, + "subsets": { + "latin": { + "xWidthAvg": 413 + }, + "thai": { + "xWidthAvg": 637 + } + }, + "variants": { + "700": { + "familyName": "Magra", + "fullName": "Magra Bold", + "postscriptName": "Magra-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -247, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 420, + "subsets": { + "latin": { + "xWidthAvg": 420 + }, + "thai": { + "xWidthAvg": 637 + } + } + }, + "regular": { + "familyName": "Magra", + "fullName": "Magra", + "postscriptName": "Magra", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -247, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 413, + "subsets": { + "latin": { + "xWidthAvg": 413 + }, + "thai": { + "xWidthAvg": 637 + } + } + } + } + }, + "maidenOrange": { + "familyName": "Maiden Orange", + "fullName": "Maiden Orange Regular", + "postscriptName": "MaidenOrange-Regular", + "category": "serif", + "capHeight": 1406, + "ascent": 1440, + "descent": -608, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1056, + "xWidthAvg": 670, + "subsets": { + "latin": { + "xWidthAvg": 670 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Maiden Orange", + "fullName": "Maiden Orange Regular", + "postscriptName": "MaidenOrange-Regular", + "category": "serif", + "capHeight": 1406, + "ascent": 1440, + "descent": -608, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1056, + "xWidthAvg": 670, + "subsets": { + "latin": { + "xWidthAvg": 670 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "maitree": { + "familyName": "Maitree", + "fullName": "Maitree", + "postscriptName": "Maitree", + "category": "serif", + "capHeight": 695, + "ascent": 1150, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 489, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 558 + } + }, + "variants": { + "200": { + "familyName": "Maitree", + "fullName": "Maitree-ExtraLight", + "postscriptName": "Maitree-ExtraLight", + "category": "serif", + "capHeight": 695, + "ascent": 1150, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 542 + } + } + }, + "300": { + "familyName": "Maitree", + "fullName": "Maitree-Light", + "postscriptName": "Maitree-Light", + "category": "serif", + "capHeight": 695, + "ascent": 1150, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 552 + } + } + }, + "500": { + "familyName": "Maitree", + "fullName": "Maitree-Medium", + "postscriptName": "Maitree-Medium", + "category": "serif", + "capHeight": 695, + "ascent": 1150, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 567 + } + } + }, + "600": { + "familyName": "Maitree", + "fullName": "Maitree-SemiBold", + "postscriptName": "Maitree-SemiBold", + "category": "serif", + "capHeight": 695, + "ascent": 1150, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 491, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 575 + } + } + }, + "700": { + "familyName": "Maitree", + "fullName": "Maitree Bold", + "postscriptName": "Maitree-Bold", + "category": "serif", + "capHeight": 695, + "ascent": 1150, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 508, + "subsets": { + "latin": { + "xWidthAvg": 508 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "regular": { + "familyName": "Maitree", + "fullName": "Maitree", + "postscriptName": "Maitree", + "category": "serif", + "capHeight": 695, + "ascent": 1150, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 489, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 558 + } + } + } + } + }, + "majorMonoDisplay": { + "familyName": "Major Mono Display", + "fullName": "Major Mono Display Regular", + "postscriptName": "MajorMonoDisplay-Regular", + "category": "monospace", + "capHeight": 696, + "ascent": 900, + "descent": -100, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 696, + "xWidthAvg": 740, + "subsets": { + "latin": { + "xWidthAvg": 740 + }, + "thai": { + "xWidthAvg": 740 + } + }, + "variants": { + "regular": { + "familyName": "Major Mono Display", + "fullName": "Major Mono Display Regular", + "postscriptName": "MajorMonoDisplay-Regular", + "category": "monospace", + "capHeight": 696, + "ascent": 900, + "descent": -100, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 696, + "xWidthAvg": 740, + "subsets": { + "latin": { + "xWidthAvg": 740 + }, + "thai": { + "xWidthAvg": 740 + } + } + } + } + }, + "mako": { + "familyName": "Mako", + "fullName": "Mako Regular", + "postscriptName": "Mako-Regular", + "category": "sans-serif", + "capHeight": 1437, + "ascent": 2141, + "descent": -538, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1031, + "xWidthAvg": 889, + "subsets": { + "latin": { + "xWidthAvg": 889 + }, + "thai": { + "xWidthAvg": 1402 + } + }, + "variants": { + "regular": { + "familyName": "Mako", + "fullName": "Mako Regular", + "postscriptName": "Mako-Regular", + "category": "sans-serif", + "capHeight": 1437, + "ascent": 2141, + "descent": -538, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1031, + "xWidthAvg": 889, + "subsets": { + "latin": { + "xWidthAvg": 889 + }, + "thai": { + "xWidthAvg": 1402 + } + } + } + } + }, + "mali": { + "familyName": "Mali", + "fullName": "Mali Regular", + "postscriptName": "Mali-Regular", + "category": "handwriting", + "capHeight": 700, + "ascent": 1050, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 499, + "subsets": { + "latin": { + "xWidthAvg": 499 + }, + "thai": { + "xWidthAvg": 641 + } + }, + "variants": { + "200": { + "familyName": "Mali", + "fullName": "Mali ExtraLight", + "postscriptName": "Mali-ExtraLight", + "category": "handwriting", + "capHeight": 700, + "ascent": 1050, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 628 + } + } + }, + "300": { + "familyName": "Mali", + "fullName": "Mali Light", + "postscriptName": "Mali-Light", + "category": "handwriting", + "capHeight": 700, + "ascent": 1050, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 635 + } + } + }, + "500": { + "familyName": "Mali", + "fullName": "Mali Medium", + "postscriptName": "Mali-Medium", + "category": "handwriting", + "capHeight": 700, + "ascent": 1050, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 648 + } + } + }, + "600": { + "familyName": "Mali", + "fullName": "Mali SemiBold", + "postscriptName": "Mali-SemiBold", + "category": "handwriting", + "capHeight": 700, + "ascent": 1050, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 509, + "subsets": { + "latin": { + "xWidthAvg": 509 + }, + "thai": { + "xWidthAvg": 655 + } + } + }, + "700": { + "familyName": "Mali", + "fullName": "Mali Bold", + "postscriptName": "Mali-Bold", + "category": "handwriting", + "capHeight": 700, + "ascent": 1050, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 514, + "subsets": { + "latin": { + "xWidthAvg": 514 + }, + "thai": { + "xWidthAvg": 662 + } + } + }, + "regular": { + "familyName": "Mali", + "fullName": "Mali Regular", + "postscriptName": "Mali-Regular", + "category": "handwriting", + "capHeight": 700, + "ascent": 1050, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 499, + "subsets": { + "latin": { + "xWidthAvg": 499 + }, + "thai": { + "xWidthAvg": 641 + } + } + }, + "italic": { + "familyName": "Mali", + "fullName": "Mali Italic", + "postscriptName": "Mali-Italic", + "category": "handwriting", + "capHeight": 700, + "ascent": 1050, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 499, + "subsets": { + "latin": { + "xWidthAvg": 499 + }, + "thai": { + "xWidthAvg": 643 + } + } + }, + "700italic": { + "familyName": "Mali", + "fullName": "Mali Bold Italic", + "postscriptName": "Mali-BoldItalic", + "category": "handwriting", + "capHeight": 700, + "ascent": 1050, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 514, + "subsets": { + "latin": { + "xWidthAvg": 514 + }, + "thai": { + "xWidthAvg": 661 + } + } + }, + "600italic": { + "familyName": "Mali", + "fullName": "Mali SemiBold Italic", + "postscriptName": "Mali-SemiBoldItalic", + "category": "handwriting", + "capHeight": 700, + "ascent": 1050, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 509, + "subsets": { + "latin": { + "xWidthAvg": 509 + }, + "thai": { + "xWidthAvg": 655 + } + } + }, + "500italic": { + "familyName": "Mali", + "fullName": "Mali Medium Italic", + "postscriptName": "Mali-MediumItalic", + "category": "handwriting", + "capHeight": 700, + "ascent": 1050, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 649 + } + } + }, + "300italic": { + "familyName": "Mali", + "fullName": "Mali Light Italic", + "postscriptName": "Mali-LightItalic", + "category": "handwriting", + "capHeight": 700, + "ascent": 1050, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 636 + } + } + }, + "200italic": { + "familyName": "Mali", + "fullName": "Mali ExtraLight Italic", + "postscriptName": "Mali-ExtraLightItalic", + "category": "handwriting", + "capHeight": 700, + "ascent": 1050, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 628 + } + } + } + } + }, + "mallanna": { + "familyName": "Mallanna", + "fullName": "Mallanna", + "postscriptName": "Mallanna", + "category": "sans-serif", + "capHeight": 546, + "ascent": 1105, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 870, + "xHeight": 379, + "xWidthAvg": 351, + "subsets": { + "latin": { + "xWidthAvg": 351 + }, + "thai": { + "xWidthAvg": 319 + } + }, + "variants": { + "regular": { + "familyName": "Mallanna", + "fullName": "Mallanna", + "postscriptName": "Mallanna", + "category": "sans-serif", + "capHeight": 546, + "ascent": 1105, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 870, + "xHeight": 379, + "xWidthAvg": 351, + "subsets": { + "latin": { + "xWidthAvg": 351 + }, + "thai": { + "xWidthAvg": 319 + } + } + } + } + }, + "maname": { + "familyName": "Maname", + "fullName": "Maname Regular", + "postscriptName": "Maname-Regular", + "category": "serif", + "capHeight": 578, + "ascent": 1200, + "descent": 0, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 424, + "xWidthAvg": 436, + "subsets": { + "latin": { + "xWidthAvg": 436 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Maname", + "fullName": "Maname Regular", + "postscriptName": "Maname-Regular", + "category": "serif", + "capHeight": 578, + "ascent": 1200, + "descent": 0, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 424, + "xWidthAvg": 436, + "subsets": { + "latin": { + "xWidthAvg": 436 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "mandali": { + "familyName": "Mandali", + "fullName": "Mandali", + "postscriptName": "Mandali", + "category": "sans-serif", + "capHeight": 550, + "ascent": 1087, + "descent": -475, + "lineGap": 0, + "unitsPerEm": 790, + "xHeight": 382, + "xWidthAvg": 358, + "subsets": { + "latin": { + "xWidthAvg": 358 + }, + "thai": { + "xWidthAvg": 287 + } + }, + "variants": { + "regular": { + "familyName": "Mandali", + "fullName": "Mandali", + "postscriptName": "Mandali", + "category": "sans-serif", + "capHeight": 550, + "ascent": 1087, + "descent": -475, + "lineGap": 0, + "unitsPerEm": 790, + "xHeight": 382, + "xWidthAvg": 358, + "subsets": { + "latin": { + "xWidthAvg": 358 + }, + "thai": { + "xWidthAvg": 287 + } + } + } + } + }, + "manjari": { + "familyName": "Manjari", + "fullName": "Manjari Regular", + "postscriptName": "Manjari-Regular", + "category": "sans-serif", + "capHeight": 1385, + "ascent": 1500, + "descent": -750, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 928, + "subsets": { + "latin": { + "xWidthAvg": 928 + }, + "thai": { + "xWidthAvg": 761 + } + }, + "variants": { + "100": { + "familyName": "Manjari", + "fullName": "Manjari Thin", + "postscriptName": "Manjari-Thin", + "category": "sans-serif", + "capHeight": 1360, + "ascent": 1400, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1000, + "xWidthAvg": 895, + "subsets": { + "latin": { + "xWidthAvg": 895 + }, + "thai": { + "xWidthAvg": 692 + } + } + }, + "700": { + "familyName": "Manjari", + "fullName": "Manjari Bold", + "postscriptName": "Manjari-Bold", + "category": "sans-serif", + "capHeight": 1432, + "ascent": 1500, + "descent": -900, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1072, + "xWidthAvg": 944, + "subsets": { + "latin": { + "xWidthAvg": 944 + }, + "thai": { + "xWidthAvg": 771 + } + } + }, + "regular": { + "familyName": "Manjari", + "fullName": "Manjari Regular", + "postscriptName": "Manjari-Regular", + "category": "sans-serif", + "capHeight": 1385, + "ascent": 1500, + "descent": -750, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 928, + "subsets": { + "latin": { + "xWidthAvg": 928 + }, + "thai": { + "xWidthAvg": 761 + } + } + } + } + }, + "manrope": { + "familyName": "Manrope", + "fullName": "Manrope Regular", + "postscriptName": "Manrope-Regular", + "category": "sans-serif", + "capHeight": 1440, + "ascent": 2132, + "descent": -600, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 920, + "subsets": { + "latin": { + "xWidthAvg": 920 + }, + "thai": { + "xWidthAvg": 1480 + } + }, + "variants": { + "200": { + "familyName": "Manrope", + "fullName": "Manrope ExtraLight", + "postscriptName": "Manrope-ExtraLight", + "category": "sans-serif", + "capHeight": 1440, + "ascent": 2132, + "descent": -600, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 887, + "subsets": { + "latin": { + "xWidthAvg": 887 + }, + "thai": { + "xWidthAvg": 1480 + } + } + }, + "300": { + "familyName": "Manrope", + "fullName": "Manrope Light", + "postscriptName": "Manrope-Light", + "category": "sans-serif", + "capHeight": 1440, + "ascent": 2132, + "descent": -600, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 904, + "subsets": { + "latin": { + "xWidthAvg": 904 + }, + "thai": { + "xWidthAvg": 1480 + } + } + }, + "500": { + "familyName": "Manrope", + "fullName": "Manrope Medium", + "postscriptName": "Manrope-Medium", + "category": "sans-serif", + "capHeight": 1440, + "ascent": 2132, + "descent": -600, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 937, + "subsets": { + "latin": { + "xWidthAvg": 937 + }, + "thai": { + "xWidthAvg": 1480 + } + } + }, + "600": { + "familyName": "Manrope", + "fullName": "Manrope SemiBold", + "postscriptName": "Manrope-SemiBold", + "category": "sans-serif", + "capHeight": 1440, + "ascent": 2132, + "descent": -600, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 954, + "subsets": { + "latin": { + "xWidthAvg": 954 + }, + "thai": { + "xWidthAvg": 1480 + } + } + }, + "700": { + "familyName": "Manrope", + "fullName": "Manrope Bold", + "postscriptName": "Manrope-Bold", + "category": "sans-serif", + "capHeight": 1440, + "ascent": 2132, + "descent": -600, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 971, + "subsets": { + "latin": { + "xWidthAvg": 971 + }, + "thai": { + "xWidthAvg": 1480 + } + } + }, + "800": { + "familyName": "Manrope", + "fullName": "Manrope ExtraBold", + "postscriptName": "Manrope-ExtraBold", + "category": "sans-serif", + "capHeight": 1440, + "ascent": 2132, + "descent": -600, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 988, + "subsets": { + "latin": { + "xWidthAvg": 988 + }, + "thai": { + "xWidthAvg": 1480 + } + } + }, + "regular": { + "familyName": "Manrope", + "fullName": "Manrope Regular", + "postscriptName": "Manrope-Regular", + "category": "sans-serif", + "capHeight": 1440, + "ascent": 2132, + "descent": -600, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 920, + "subsets": { + "latin": { + "xWidthAvg": 920 + }, + "thai": { + "xWidthAvg": 1480 + } + } + } + } + }, + "mansalva": { + "familyName": "Mansalva", + "fullName": "Mansalva Regular", + "postscriptName": "Mansalva-Regular", + "category": "handwriting", + "capHeight": 702, + "ascent": 1112, + "descent": -466, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 384, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 619 + } + }, + "variants": { + "regular": { + "familyName": "Mansalva", + "fullName": "Mansalva Regular", + "postscriptName": "Mansalva-Regular", + "category": "handwriting", + "capHeight": 702, + "ascent": 1112, + "descent": -466, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 384, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 619 + } + } + } + } + }, + "manuale": { + "familyName": "Manuale", + "fullName": "Manuale Regular", + "postscriptName": "Manuale-Regular", + "category": "serif", + "capHeight": 611, + "ascent": 980, + "descent": -236, + "lineGap": 221, + "unitsPerEm": 1000, + "xHeight": 491, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 700 + } + }, + "variants": { + "300": { + "familyName": "Manuale", + "fullName": "Manuale Light", + "postscriptName": "Manuale-Light", + "category": "serif", + "capHeight": 611, + "ascent": 980, + "descent": -236, + "lineGap": 221, + "unitsPerEm": 1000, + "xHeight": 491, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "500": { + "familyName": "Manuale", + "fullName": "Manuale Medium", + "postscriptName": "Manuale-Medium", + "category": "serif", + "capHeight": 611, + "ascent": 980, + "descent": -236, + "lineGap": 221, + "unitsPerEm": 1000, + "xHeight": 491, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "600": { + "familyName": "Manuale", + "fullName": "Manuale SemiBold", + "postscriptName": "Manuale-SemiBold", + "category": "serif", + "capHeight": 611, + "ascent": 980, + "descent": -236, + "lineGap": 221, + "unitsPerEm": 1000, + "xHeight": 491, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "700": { + "familyName": "Manuale", + "fullName": "Manuale Bold", + "postscriptName": "Manuale-Bold", + "category": "serif", + "capHeight": 611, + "ascent": 980, + "descent": -236, + "lineGap": 221, + "unitsPerEm": 1000, + "xHeight": 491, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "800": { + "familyName": "Manuale", + "fullName": "Manuale ExtraBold", + "postscriptName": "Manuale-ExtraBold", + "category": "serif", + "capHeight": 611, + "ascent": 980, + "descent": -236, + "lineGap": 221, + "unitsPerEm": 1000, + "xHeight": 491, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "regular": { + "familyName": "Manuale", + "fullName": "Manuale Regular", + "postscriptName": "Manuale-Regular", + "category": "serif", + "capHeight": 611, + "ascent": 980, + "descent": -236, + "lineGap": 221, + "unitsPerEm": 1000, + "xHeight": 491, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "italic": { + "familyName": "Manuale", + "fullName": "Manuale Italic", + "postscriptName": "Manuale-Italic", + "category": "serif", + "capHeight": 611, + "ascent": 980, + "descent": -236, + "lineGap": 221, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 405, + "subsets": { + "latin": { + "xWidthAvg": 405 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "800italic": { + "familyName": "Manuale", + "fullName": "Manuale ExtraBold Italic", + "postscriptName": "Manuale-ExtraBoldItalic", + "category": "serif", + "capHeight": 611, + "ascent": 980, + "descent": -236, + "lineGap": 221, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 418, + "subsets": { + "latin": { + "xWidthAvg": 418 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "700italic": { + "familyName": "Manuale", + "fullName": "Manuale Bold Italic", + "postscriptName": "Manuale-BoldItalic", + "category": "serif", + "capHeight": 611, + "ascent": 980, + "descent": -236, + "lineGap": 221, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 415, + "subsets": { + "latin": { + "xWidthAvg": 415 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "600italic": { + "familyName": "Manuale", + "fullName": "Manuale SemiBold Italic", + "postscriptName": "Manuale-SemiBoldItalic", + "category": "serif", + "capHeight": 611, + "ascent": 980, + "descent": -236, + "lineGap": 221, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "500italic": { + "familyName": "Manuale", + "fullName": "Manuale Medium Italic", + "postscriptName": "Manuale-MediumItalic", + "category": "serif", + "capHeight": 611, + "ascent": 980, + "descent": -236, + "lineGap": 221, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 408, + "subsets": { + "latin": { + "xWidthAvg": 408 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "300italic": { + "familyName": "Manuale", + "fullName": "Manuale Light Italic", + "postscriptName": "Manuale-LightItalic", + "category": "serif", + "capHeight": 611, + "ascent": 980, + "descent": -236, + "lineGap": 221, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 403, + "subsets": { + "latin": { + "xWidthAvg": 403 + }, + "thai": { + "xWidthAvg": 700 + } + } + } + } + }, + "marcellus": { + "familyName": "Marcellus", + "fullName": "Marcellus", + "postscriptName": "Marcellus-Regular", + "category": "serif", + "capHeight": 1434, + "ascent": 1995, + "descent": -573, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 936, + "subsets": { + "latin": { + "xWidthAvg": 936 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "Marcellus", + "fullName": "Marcellus", + "postscriptName": "Marcellus-Regular", + "category": "serif", + "capHeight": 1434, + "ascent": 1995, + "descent": -573, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 936, + "subsets": { + "latin": { + "xWidthAvg": 936 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "marcellusSC": { + "familyName": "Marcellus SC", + "fullName": "Marcellus SC", + "postscriptName": "MarcellusSC-Regular", + "category": "serif", + "capHeight": 1434, + "ascent": 1995, + "descent": -573, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1075, + "xWidthAvg": 964, + "subsets": { + "latin": { + "xWidthAvg": 964 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "Marcellus SC", + "fullName": "Marcellus SC", + "postscriptName": "MarcellusSC-Regular", + "category": "serif", + "capHeight": 1434, + "ascent": 1995, + "descent": -573, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1075, + "xWidthAvg": 964, + "subsets": { + "latin": { + "xWidthAvg": 964 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "marckScript": { + "familyName": "Marck Script", + "fullName": "Marck Script", + "postscriptName": "MarckScript-Regular", + "category": "handwriting", + "capHeight": 638, + "ascent": 864, + "descent": -385, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 263, + "xWidthAvg": 414, + "subsets": { + "latin": { + "xWidthAvg": 414 + }, + "thai": { + "xWidthAvg": 480 + } + }, + "variants": { + "regular": { + "familyName": "Marck Script", + "fullName": "Marck Script", + "postscriptName": "MarckScript-Regular", + "category": "handwriting", + "capHeight": 638, + "ascent": 864, + "descent": -385, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 263, + "xWidthAvg": 414, + "subsets": { + "latin": { + "xWidthAvg": 414 + }, + "thai": { + "xWidthAvg": 480 + } + } + } + } + }, + "margarine": { + "familyName": "Margarine", + "fullName": "Margarine", + "postscriptName": "Margarine-Regular", + "category": "display", + "capHeight": 0, + "ascent": 2075, + "descent": -678, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 0, + "xWidthAvg": 931, + "subsets": { + "latin": { + "xWidthAvg": 931 + }, + "thai": { + "xWidthAvg": 532 + } + }, + "variants": { + "regular": { + "familyName": "Margarine", + "fullName": "Margarine", + "postscriptName": "Margarine-Regular", + "category": "display", + "capHeight": 0, + "ascent": 2075, + "descent": -678, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 0, + "xWidthAvg": 931, + "subsets": { + "latin": { + "xWidthAvg": 931 + }, + "thai": { + "xWidthAvg": 532 + } + } + } + } + }, + "marhey": { + "familyName": "Marhey", + "fullName": "Marhey Regular", + "postscriptName": "Marhey-Regular", + "category": "display", + "capHeight": 750, + "ascent": 1100, + "descent": -640, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "300": { + "familyName": "Marhey", + "fullName": "Marhey Light", + "postscriptName": "Marhey-Light", + "category": "display", + "capHeight": 750, + "ascent": 1100, + "descent": -640, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Marhey", + "fullName": "Marhey Medium", + "postscriptName": "Marhey-Medium", + "category": "display", + "capHeight": 750, + "ascent": 1100, + "descent": -640, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Marhey", + "fullName": "Marhey SemiBold", + "postscriptName": "Marhey-SemiBold", + "category": "display", + "capHeight": 750, + "ascent": 1100, + "descent": -640, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Marhey", + "fullName": "Marhey Bold", + "postscriptName": "Marhey-Bold", + "category": "display", + "capHeight": 750, + "ascent": 1100, + "descent": -640, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 521, + "subsets": { + "latin": { + "xWidthAvg": 521 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Marhey", + "fullName": "Marhey Regular", + "postscriptName": "Marhey-Regular", + "category": "display", + "capHeight": 750, + "ascent": 1100, + "descent": -640, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "markaziText": { + "familyName": "Markazi Text", + "fullName": "Markazi Text Regular", + "postscriptName": "MarkaziText-Regular", + "category": "serif", + "capHeight": 990, + "ascent": 1718, + "descent": -740, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 746, + "xWidthAvg": 687, + "subsets": { + "latin": { + "xWidthAvg": 687 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "500": { + "familyName": "Markazi Text", + "fullName": "Markazi Text Medium", + "postscriptName": "MarkaziText-Medium", + "category": "serif", + "capHeight": 990, + "ascent": 1718, + "descent": -740, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 746, + "xWidthAvg": 693, + "subsets": { + "latin": { + "xWidthAvg": 693 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "600": { + "familyName": "Markazi Text", + "fullName": "Markazi Text SemiBold", + "postscriptName": "MarkaziText-SemiBold", + "category": "serif", + "capHeight": 990, + "ascent": 1718, + "descent": -740, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 746, + "xWidthAvg": 700, + "subsets": { + "latin": { + "xWidthAvg": 700 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "700": { + "familyName": "Markazi Text", + "fullName": "Markazi Text Bold", + "postscriptName": "MarkaziText-Bold", + "category": "serif", + "capHeight": 990, + "ascent": 1718, + "descent": -740, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 746, + "xWidthAvg": 705, + "subsets": { + "latin": { + "xWidthAvg": 705 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "regular": { + "familyName": "Markazi Text", + "fullName": "Markazi Text Regular", + "postscriptName": "MarkaziText-Regular", + "category": "serif", + "capHeight": 990, + "ascent": 1718, + "descent": -740, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 746, + "xWidthAvg": 687, + "subsets": { + "latin": { + "xWidthAvg": 687 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "markoOne": { + "familyName": "Marko One", + "fullName": "Marko One", + "postscriptName": "MarkoOne-Regular", + "category": "serif", + "capHeight": 1475, + "ascent": 2019, + "descent": -727, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 713, + "xWidthAvg": 1084, + "subsets": { + "latin": { + "xWidthAvg": 1084 + }, + "thai": { + "xWidthAvg": 1976 + } + }, + "variants": { + "regular": { + "familyName": "Marko One", + "fullName": "Marko One", + "postscriptName": "MarkoOne-Regular", + "category": "serif", + "capHeight": 1475, + "ascent": 2019, + "descent": -727, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 713, + "xWidthAvg": 1084, + "subsets": { + "latin": { + "xWidthAvg": 1084 + }, + "thai": { + "xWidthAvg": 1976 + } + } + } + } + }, + "marmelad": { + "familyName": "Marmelad", + "fullName": "Marmelad Regular", + "postscriptName": "Marmelad-Regular", + "category": "sans-serif", + "capHeight": 709, + "ascent": 972, + "descent": -221, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 502, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 1210 + } + }, + "variants": { + "regular": { + "familyName": "Marmelad", + "fullName": "Marmelad Regular", + "postscriptName": "Marmelad-Regular", + "category": "sans-serif", + "capHeight": 709, + "ascent": 972, + "descent": -221, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 502, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 1210 + } + } + } + } + }, + "martel": { + "familyName": "Martel", + "fullName": "Martel", + "postscriptName": "Martel-Regular", + "category": "serif", + "capHeight": 758, + "ascent": 1125, + "descent": -562, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 501, + "subsets": { + "latin": { + "xWidthAvg": 501 + }, + "thai": { + "xWidthAvg": 595 + } + }, + "variants": { + "200": { + "familyName": "Martel", + "fullName": "Martel UltraLight", + "postscriptName": "Martel-UltraLight", + "category": "serif", + "capHeight": 758, + "ascent": 1125, + "descent": -562, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 586 + } + } + }, + "300": { + "familyName": "Martel", + "fullName": "Martel Light", + "postscriptName": "Martel-Light", + "category": "serif", + "capHeight": 758, + "ascent": 1125, + "descent": -562, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 497, + "subsets": { + "latin": { + "xWidthAvg": 497 + }, + "thai": { + "xWidthAvg": 595 + } + } + }, + "600": { + "familyName": "Martel", + "fullName": "Martel DemiBold", + "postscriptName": "Martel-DemiBold", + "category": "serif", + "capHeight": 758, + "ascent": 1125, + "descent": -562, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 499, + "subsets": { + "latin": { + "xWidthAvg": 499 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Martel", + "fullName": "Martel Bold", + "postscriptName": "Martel-Bold", + "category": "serif", + "capHeight": 758, + "ascent": 1125, + "descent": -562, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 509, + "subsets": { + "latin": { + "xWidthAvg": 509 + }, + "thai": { + "xWidthAvg": 596 + } + } + }, + "800": { + "familyName": "Martel", + "fullName": "Martel ExtraBold", + "postscriptName": "Martel-ExtraBold", + "category": "serif", + "capHeight": 758, + "ascent": 1125, + "descent": -562, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 514, + "subsets": { + "latin": { + "xWidthAvg": 514 + }, + "thai": { + "xWidthAvg": 596 + } + } + }, + "900": { + "familyName": "Martel", + "fullName": "Martel Heavy", + "postscriptName": "Martel-Heavy", + "category": "serif", + "capHeight": 758, + "ascent": 1125, + "descent": -562, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 530, + "subsets": { + "latin": { + "xWidthAvg": 530 + }, + "thai": { + "xWidthAvg": 586 + } + } + }, + "regular": { + "familyName": "Martel", + "fullName": "Martel", + "postscriptName": "Martel-Regular", + "category": "serif", + "capHeight": 758, + "ascent": 1125, + "descent": -562, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 501, + "subsets": { + "latin": { + "xWidthAvg": 501 + }, + "thai": { + "xWidthAvg": 595 + } + } + } + } + }, + "martelSans": { + "familyName": "Martel Sans", + "fullName": "Martel Sans Regular", + "postscriptName": "MartelSans-Regular", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1150, + "descent": -674, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 460 + } + }, + "variants": { + "200": { + "familyName": "Martel Sans", + "fullName": "Martel Sans ExtraLight", + "postscriptName": "MartelSans-ExtraLight", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1150, + "descent": -674, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 431 + } + } + }, + "300": { + "familyName": "Martel Sans", + "fullName": "Martel Sans Light", + "postscriptName": "MartelSans-Light", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1150, + "descent": -674, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 528, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 448 + } + } + }, + "600": { + "familyName": "Martel Sans", + "fullName": "Martel Sans SemiBold", + "postscriptName": "MartelSans-SemiBold", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1150, + "descent": -674, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 478 + } + } + }, + "700": { + "familyName": "Martel Sans", + "fullName": "Martel Sans Bold", + "postscriptName": "MartelSans-Bold", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1150, + "descent": -674, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 551, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 495 + } + } + }, + "800": { + "familyName": "Martel Sans", + "fullName": "Martel Sans ExtraBold", + "postscriptName": "MartelSans-ExtraBold", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1150, + "descent": -674, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 560, + "xWidthAvg": 520, + "subsets": { + "latin": { + "xWidthAvg": 520 + }, + "thai": { + "xWidthAvg": 513 + } + } + }, + "900": { + "familyName": "Martel Sans", + "fullName": "Martel Sans Black", + "postscriptName": "MartelSans-Black", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1150, + "descent": -674, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 568, + "xWidthAvg": 534, + "subsets": { + "latin": { + "xWidthAvg": 534 + }, + "thai": { + "xWidthAvg": 530 + } + } + }, + "regular": { + "familyName": "Martel Sans", + "fullName": "Martel Sans Regular", + "postscriptName": "MartelSans-Regular", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1150, + "descent": -674, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 460 + } + } + } + } + }, + "martianMono": { + "familyName": "Martian Mono", + "fullName": "Martian Mono Regular", + "postscriptName": "MartianMono-Regular", + "category": "monospace", + "capHeight": 800, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 600, + "xWidthAvg": 700, + "subsets": { + "latin": { + "xWidthAvg": 700 + }, + "thai": { + "xWidthAvg": 700 + } + }, + "variants": { + "100": { + "familyName": "Martian Mono", + "fullName": "Martian Mono Thin", + "postscriptName": "MartianMono-Thin", + "category": "monospace", + "capHeight": 800, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 600, + "xWidthAvg": 700, + "subsets": { + "latin": { + "xWidthAvg": 700 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "200": { + "familyName": "Martian Mono", + "fullName": "Martian Mono ExtraLight", + "postscriptName": "MartianMono-ExtraLight", + "category": "monospace", + "capHeight": 800, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 600, + "xWidthAvg": 700, + "subsets": { + "latin": { + "xWidthAvg": 700 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "300": { + "familyName": "Martian Mono", + "fullName": "Martian Mono Light", + "postscriptName": "MartianMono-Light", + "category": "monospace", + "capHeight": 800, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 600, + "xWidthAvg": 700, + "subsets": { + "latin": { + "xWidthAvg": 700 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "500": { + "familyName": "Martian Mono", + "fullName": "Martian Mono Medium", + "postscriptName": "MartianMono-Medium", + "category": "monospace", + "capHeight": 800, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 600, + "xWidthAvg": 700, + "subsets": { + "latin": { + "xWidthAvg": 700 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "600": { + "familyName": "Martian Mono", + "fullName": "Martian Mono SemiBold", + "postscriptName": "MartianMono-SemiBold", + "category": "monospace", + "capHeight": 800, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 600, + "xWidthAvg": 700, + "subsets": { + "latin": { + "xWidthAvg": 700 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "700": { + "familyName": "Martian Mono", + "fullName": "Martian Mono Bold", + "postscriptName": "MartianMono-Bold", + "category": "monospace", + "capHeight": 800, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 600, + "xWidthAvg": 700, + "subsets": { + "latin": { + "xWidthAvg": 700 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "800": { + "familyName": "Martian Mono", + "fullName": "Martian Mono ExtraBold", + "postscriptName": "MartianMono-ExtraBold", + "category": "monospace", + "capHeight": 800, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 600, + "xWidthAvg": 700, + "subsets": { + "latin": { + "xWidthAvg": 700 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "regular": { + "familyName": "Martian Mono", + "fullName": "Martian Mono Regular", + "postscriptName": "MartianMono-Regular", + "category": "monospace", + "capHeight": 800, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 600, + "xWidthAvg": 700, + "subsets": { + "latin": { + "xWidthAvg": 700 + }, + "thai": { + "xWidthAvg": 700 + } + } + } + } + }, + "marvel": { + "familyName": "Marvel", + "fullName": "Marvel", + "postscriptName": "Marvel-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 951, + "descent": -259, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 343, + "subsets": { + "latin": { + "xWidthAvg": 343 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "700": { + "familyName": "Marvel", + "fullName": "Marvel Bold", + "postscriptName": "Marvel-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 951, + "descent": -259, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 344, + "subsets": { + "latin": { + "xWidthAvg": 344 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Marvel", + "fullName": "Marvel", + "postscriptName": "Marvel-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 951, + "descent": -259, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 343, + "subsets": { + "latin": { + "xWidthAvg": 343 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Marvel", + "fullName": "Marvel Italic", + "postscriptName": "Marvel-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 951, + "descent": -259, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 345, + "subsets": { + "latin": { + "xWidthAvg": 345 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700italic": { + "familyName": "Marvel", + "fullName": "Marvel Bold Italic", + "postscriptName": "Marvel-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 951, + "descent": -259, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 345, + "subsets": { + "latin": { + "xWidthAvg": 345 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "mate": { + "familyName": "Mate", + "fullName": "Mate Regular", + "postscriptName": "Mate-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 958, + "descent": -262, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 456, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 0 + } + }, + "variants": { + "regular": { + "familyName": "Mate", + "fullName": "Mate Regular", + "postscriptName": "Mate-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 958, + "descent": -262, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 456, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 0 + } + } + }, + "italic": { + "familyName": "Mate", + "fullName": "Mate Italic", + "postscriptName": "Mate-Italic", + "category": "serif", + "capHeight": 700, + "ascent": 958, + "descent": -262, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 457, + "xWidthAvg": 393, + "subsets": { + "latin": { + "xWidthAvg": 393 + }, + "thai": { + "xWidthAvg": 235 + } + } + } + } + }, + "mateSC": { + "familyName": "Mate SC", + "fullName": "Mate SC Regular", + "postscriptName": "MateSC-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 958, + "descent": -262, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 473, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 235 + } + }, + "variants": { + "regular": { + "familyName": "Mate SC", + "fullName": "Mate SC Regular", + "postscriptName": "MateSC-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 958, + "descent": -262, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 473, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 235 + } + } + } + } + }, + "matemasie": { + "familyName": "Matemasie", + "fullName": "Matemasie Regular", + "postscriptName": "Matemasie-Regular", + "category": "sans-serif", + "capHeight": 800, + "ascent": 1250, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 600, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 791 + } + }, + "variants": { + "regular": { + "familyName": "Matemasie", + "fullName": "Matemasie Regular", + "postscriptName": "Matemasie-Regular", + "category": "sans-serif", + "capHeight": 800, + "ascent": 1250, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 600, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 791 + } + } + } + } + }, + "materialIcons": { + "familyName": "Material Icons", + "fullName": "Material Icons", + "postscriptName": "MaterialIcons-Regular", + "category": "monospace", + "capHeight": 0, + "ascent": 512, + "descent": 0, + "lineGap": 0, + "unitsPerEm": 512, + "xHeight": 0, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "Material Icons", + "fullName": "Material Icons", + "postscriptName": "MaterialIcons-Regular", + "category": "monospace", + "capHeight": 0, + "ascent": 512, + "descent": 0, + "lineGap": 0, + "unitsPerEm": 512, + "xHeight": 0, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "materialIconsOutlined": { + "familyName": "Material Icons Outlined", + "fullName": "Material Icons Outlined Regular", + "postscriptName": "MaterialIconsOutlined-Regular", + "category": "monospace", + "capHeight": 0, + "ascent": 512, + "descent": 0, + "lineGap": 0, + "unitsPerEm": 512, + "xHeight": 0, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "Material Icons Outlined", + "fullName": "Material Icons Outlined Regular", + "postscriptName": "MaterialIconsOutlined-Regular", + "category": "monospace", + "capHeight": 0, + "ascent": 512, + "descent": 0, + "lineGap": 0, + "unitsPerEm": 512, + "xHeight": 0, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "materialIconsRound": { + "familyName": "Material Icons Round", + "fullName": "Material Icons Round Regular", + "postscriptName": "MaterialIconsRound-Regular", + "category": "monospace", + "capHeight": 0, + "ascent": 512, + "descent": 0, + "lineGap": 0, + "unitsPerEm": 512, + "xHeight": 0, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "Material Icons Round", + "fullName": "Material Icons Round Regular", + "postscriptName": "MaterialIconsRound-Regular", + "category": "monospace", + "capHeight": 0, + "ascent": 512, + "descent": 0, + "lineGap": 0, + "unitsPerEm": 512, + "xHeight": 0, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "materialIconsSharp": { + "familyName": "Material Icons Sharp", + "fullName": "Material Icons Sharp Regular", + "postscriptName": "MaterialIconsSharp-Regular", + "category": "monospace", + "capHeight": 0, + "ascent": 512, + "descent": 0, + "lineGap": 0, + "unitsPerEm": 512, + "xHeight": 0, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "Material Icons Sharp", + "fullName": "Material Icons Sharp Regular", + "postscriptName": "MaterialIconsSharp-Regular", + "category": "monospace", + "capHeight": 0, + "ascent": 512, + "descent": 0, + "lineGap": 0, + "unitsPerEm": 512, + "xHeight": 0, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "materialIconsTwoTone": { + "familyName": "Material Icons Two Tone", + "fullName": "Material Icons Two Tone Regular", + "postscriptName": "MaterialIconsTwoTone-Regular", + "category": "monospace", + "capHeight": 0, + "ascent": 512, + "descent": 0, + "lineGap": 0, + "unitsPerEm": 512, + "xHeight": 0, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "Material Icons Two Tone", + "fullName": "Material Icons Two Tone Regular", + "postscriptName": "MaterialIconsTwoTone-Regular", + "category": "monospace", + "capHeight": 0, + "ascent": 512, + "descent": 0, + "lineGap": 0, + "unitsPerEm": 512, + "xHeight": 0, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "materialSymbolsOutlined": { + "familyName": "Material Symbols Outlined", + "fullName": "Material Symbols Outlined Regular", + "postscriptName": "MaterialSymbolsOutlined-Regular", + "category": "monospace", + "capHeight": 960, + "ascent": 1056, + "descent": -96, + "lineGap": 0, + "unitsPerEm": 960, + "xHeight": 960, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 960 + } + }, + "variants": { + "100": { + "familyName": "Material Symbols Outlined", + "fullName": "Material Symbols Outlined Thin", + "postscriptName": "MaterialSymbolsOutlined-Thin", + "category": "monospace", + "capHeight": 960, + "ascent": 1056, + "descent": -96, + "lineGap": 0, + "unitsPerEm": 960, + "xHeight": 960, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 960 + } + } + }, + "200": { + "familyName": "Material Symbols Outlined", + "fullName": "Material Symbols Outlined ExtraLight", + "postscriptName": "MaterialSymbolsOutlined-ExtraLight", + "category": "monospace", + "capHeight": 960, + "ascent": 1056, + "descent": -96, + "lineGap": 0, + "unitsPerEm": 960, + "xHeight": 960, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 960 + } + } + }, + "300": { + "familyName": "Material Symbols Outlined", + "fullName": "Material Symbols Outlined Light", + "postscriptName": "MaterialSymbolsOutlined-Light", + "category": "monospace", + "capHeight": 960, + "ascent": 1056, + "descent": -96, + "lineGap": 0, + "unitsPerEm": 960, + "xHeight": 960, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 960 + } + } + }, + "500": { + "familyName": "Material Symbols Outlined", + "fullName": "Material Symbols Outlined Medium", + "postscriptName": "MaterialSymbolsOutlined-Medium", + "category": "monospace", + "capHeight": 960, + "ascent": 1056, + "descent": -96, + "lineGap": 0, + "unitsPerEm": 960, + "xHeight": 960, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 960 + } + } + }, + "600": { + "familyName": "Material Symbols Outlined", + "fullName": "Material Symbols Outlined SemiBold", + "postscriptName": "MaterialSymbolsOutlined-SemiBold", + "category": "monospace", + "capHeight": 960, + "ascent": 1056, + "descent": -96, + "lineGap": 0, + "unitsPerEm": 960, + "xHeight": 960, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 960 + } + } + }, + "700": { + "familyName": "Material Symbols Outlined", + "fullName": "Material Symbols Outlined Bold", + "postscriptName": "MaterialSymbolsOutlined-Bold", + "category": "monospace", + "capHeight": 960, + "ascent": 1056, + "descent": -96, + "lineGap": 0, + "unitsPerEm": 960, + "xHeight": 960, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 960 + } + } + }, + "regular": { + "familyName": "Material Symbols Outlined", + "fullName": "Material Symbols Outlined Regular", + "postscriptName": "MaterialSymbolsOutlined-Regular", + "category": "monospace", + "capHeight": 960, + "ascent": 1056, + "descent": -96, + "lineGap": 0, + "unitsPerEm": 960, + "xHeight": 960, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 960 + } + } + } + } + }, + "materialSymbolsRounded": { + "familyName": "Material Symbols Rounded", + "fullName": "Material Symbols Rounded Regular", + "postscriptName": "MaterialSymbolsRounded-Regular", + "category": "monospace", + "capHeight": 960, + "ascent": 1056, + "descent": -96, + "lineGap": 0, + "unitsPerEm": 960, + "xHeight": 960, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 960 + } + }, + "variants": { + "100": { + "familyName": "Material Symbols Rounded", + "fullName": "Material Symbols Rounded Thin", + "postscriptName": "MaterialSymbolsRounded-Thin", + "category": "monospace", + "capHeight": 960, + "ascent": 1056, + "descent": -96, + "lineGap": 0, + "unitsPerEm": 960, + "xHeight": 960, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 960 + } + } + }, + "200": { + "familyName": "Material Symbols Rounded", + "fullName": "Material Symbols Rounded ExtraLight", + "postscriptName": "MaterialSymbolsRounded-ExtraLight", + "category": "monospace", + "capHeight": 960, + "ascent": 1056, + "descent": -96, + "lineGap": 0, + "unitsPerEm": 960, + "xHeight": 960, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 960 + } + } + }, + "300": { + "familyName": "Material Symbols Rounded", + "fullName": "Material Symbols Rounded Light", + "postscriptName": "MaterialSymbolsRounded-Light", + "category": "monospace", + "capHeight": 960, + "ascent": 1056, + "descent": -96, + "lineGap": 0, + "unitsPerEm": 960, + "xHeight": 960, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 960 + } + } + }, + "500": { + "familyName": "Material Symbols Rounded", + "fullName": "Material Symbols Rounded Medium", + "postscriptName": "MaterialSymbolsRounded-Medium", + "category": "monospace", + "capHeight": 960, + "ascent": 1056, + "descent": -96, + "lineGap": 0, + "unitsPerEm": 960, + "xHeight": 960, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 960 + } + } + }, + "600": { + "familyName": "Material Symbols Rounded", + "fullName": "Material Symbols Rounded SemiBold", + "postscriptName": "MaterialSymbolsRounded-SemiBold", + "category": "monospace", + "capHeight": 960, + "ascent": 1056, + "descent": -96, + "lineGap": 0, + "unitsPerEm": 960, + "xHeight": 960, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 960 + } + } + }, + "700": { + "familyName": "Material Symbols Rounded", + "fullName": "Material Symbols Rounded Bold", + "postscriptName": "MaterialSymbolsRounded-Bold", + "category": "monospace", + "capHeight": 960, + "ascent": 1056, + "descent": -96, + "lineGap": 0, + "unitsPerEm": 960, + "xHeight": 960, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 960 + } + } + }, + "regular": { + "familyName": "Material Symbols Rounded", + "fullName": "Material Symbols Rounded Regular", + "postscriptName": "MaterialSymbolsRounded-Regular", + "category": "monospace", + "capHeight": 960, + "ascent": 1056, + "descent": -96, + "lineGap": 0, + "unitsPerEm": 960, + "xHeight": 960, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 960 + } + } + } + } + }, + "materialSymbolsSharp": { + "familyName": "Material Symbols Sharp", + "fullName": "Material Symbols Sharp Regular", + "postscriptName": "MaterialSymbolsSharp-Regular", + "category": "monospace", + "capHeight": 960, + "ascent": 1056, + "descent": -96, + "lineGap": 0, + "unitsPerEm": 960, + "xHeight": 960, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 960 + } + }, + "variants": { + "100": { + "familyName": "Material Symbols Sharp", + "fullName": "Material Symbols Sharp Thin", + "postscriptName": "MaterialSymbolsSharp-Thin", + "category": "monospace", + "capHeight": 960, + "ascent": 1056, + "descent": -96, + "lineGap": 0, + "unitsPerEm": 960, + "xHeight": 960, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 960 + } + } + }, + "200": { + "familyName": "Material Symbols Sharp", + "fullName": "Material Symbols Sharp ExtraLight", + "postscriptName": "MaterialSymbolsSharp-ExtraLight", + "category": "monospace", + "capHeight": 960, + "ascent": 1056, + "descent": -96, + "lineGap": 0, + "unitsPerEm": 960, + "xHeight": 960, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 960 + } + } + }, + "300": { + "familyName": "Material Symbols Sharp", + "fullName": "Material Symbols Sharp Light", + "postscriptName": "MaterialSymbolsSharp-Light", + "category": "monospace", + "capHeight": 960, + "ascent": 1056, + "descent": -96, + "lineGap": 0, + "unitsPerEm": 960, + "xHeight": 960, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 960 + } + } + }, + "500": { + "familyName": "Material Symbols Sharp", + "fullName": "Material Symbols Sharp Medium", + "postscriptName": "MaterialSymbolsSharp-Medium", + "category": "monospace", + "capHeight": 960, + "ascent": 1056, + "descent": -96, + "lineGap": 0, + "unitsPerEm": 960, + "xHeight": 960, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 960 + } + } + }, + "600": { + "familyName": "Material Symbols Sharp", + "fullName": "Material Symbols Sharp SemiBold", + "postscriptName": "MaterialSymbolsSharp-SemiBold", + "category": "monospace", + "capHeight": 960, + "ascent": 1056, + "descent": -96, + "lineGap": 0, + "unitsPerEm": 960, + "xHeight": 960, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 960 + } + } + }, + "700": { + "familyName": "Material Symbols Sharp", + "fullName": "Material Symbols Sharp Bold", + "postscriptName": "MaterialSymbolsSharp-Bold", + "category": "monospace", + "capHeight": 960, + "ascent": 1056, + "descent": -96, + "lineGap": 0, + "unitsPerEm": 960, + "xHeight": 960, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 960 + } + } + }, + "regular": { + "familyName": "Material Symbols Sharp", + "fullName": "Material Symbols Sharp Regular", + "postscriptName": "MaterialSymbolsSharp-Regular", + "category": "monospace", + "capHeight": 960, + "ascent": 1056, + "descent": -96, + "lineGap": 0, + "unitsPerEm": 960, + "xHeight": 960, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 960 + } + } + } + } + }, + "mavenPro": { + "familyName": "Maven Pro", + "fullName": "Maven Pro Regular", + "postscriptName": "MavenPro-Regular", + "category": "sans-serif", + "capHeight": 667, + "ascent": 965, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "500": { + "familyName": "Maven Pro", + "fullName": "Maven Pro Medium", + "postscriptName": "MavenPro-Medium", + "category": "sans-serif", + "capHeight": 667, + "ascent": 965, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Maven Pro", + "fullName": "Maven Pro SemiBold", + "postscriptName": "MavenPro-SemiBold", + "category": "sans-serif", + "capHeight": 667, + "ascent": 965, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Maven Pro", + "fullName": "Maven Pro Bold", + "postscriptName": "MavenPro-Bold", + "category": "sans-serif", + "capHeight": 667, + "ascent": 965, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Maven Pro", + "fullName": "Maven Pro ExtraBold", + "postscriptName": "MavenPro-ExtraBold", + "category": "sans-serif", + "capHeight": 667, + "ascent": 965, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "Maven Pro", + "fullName": "Maven Pro Black", + "postscriptName": "MavenPro-Black", + "category": "sans-serif", + "capHeight": 667, + "ascent": 965, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Maven Pro", + "fullName": "Maven Pro Regular", + "postscriptName": "MavenPro-Regular", + "category": "sans-serif", + "capHeight": 667, + "ascent": 965, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "mcLaren": { + "familyName": "McLaren", + "fullName": "McLaren", + "postscriptName": "McLaren-Regular", + "category": "display", + "capHeight": 1445, + "ascent": 2216, + "descent": -722, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1042, + "xWidthAvg": 1042, + "subsets": { + "latin": { + "xWidthAvg": 1042 + }, + "thai": { + "xWidthAvg": 537 + } + }, + "variants": { + "regular": { + "familyName": "McLaren", + "fullName": "McLaren", + "postscriptName": "McLaren-Regular", + "category": "display", + "capHeight": 1445, + "ascent": 2216, + "descent": -722, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1042, + "xWidthAvg": 1042, + "subsets": { + "latin": { + "xWidthAvg": 1042 + }, + "thai": { + "xWidthAvg": 537 + } + } + } + } + }, + "meaCulpa": { + "familyName": "Mea Culpa", + "fullName": "Mea Culpa Regular", + "postscriptName": "MeaCulpa-Regular", + "category": "handwriting", + "capHeight": 800, + "ascent": 1000, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 300, + "xWidthAvg": 293, + "subsets": { + "latin": { + "xWidthAvg": 293 + }, + "thai": { + "xWidthAvg": 363 + } + }, + "variants": { + "regular": { + "familyName": "Mea Culpa", + "fullName": "Mea Culpa Regular", + "postscriptName": "MeaCulpa-Regular", + "category": "handwriting", + "capHeight": 800, + "ascent": 1000, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 300, + "xWidthAvg": 293, + "subsets": { + "latin": { + "xWidthAvg": 293 + }, + "thai": { + "xWidthAvg": 363 + } + } + } + } + }, + "meddon": { + "familyName": "Meddon", + "fullName": "Meddon", + "postscriptName": "Meddon", + "category": "handwriting", + "capHeight": 2177, + "ascent": 2860, + "descent": -1457, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 756, + "xWidthAvg": 1250, + "subsets": { + "latin": { + "xWidthAvg": 1250 + }, + "thai": { + "xWidthAvg": 1124 + } + }, + "variants": { + "regular": { + "familyName": "Meddon", + "fullName": "Meddon", + "postscriptName": "Meddon", + "category": "handwriting", + "capHeight": 2177, + "ascent": 2860, + "descent": -1457, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 756, + "xWidthAvg": 1250, + "subsets": { + "latin": { + "xWidthAvg": 1250 + }, + "thai": { + "xWidthAvg": 1124 + } + } + } + } + }, + "medievalSharp": { + "familyName": "MedievalSharp", + "fullName": "MedievalSharp", + "postscriptName": "MedievalSharp", + "category": "display", + "capHeight": 201, + "ascent": 1771, + "descent": -543, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 224, + "xWidthAvg": 947, + "subsets": { + "latin": { + "xWidthAvg": 947 + }, + "thai": { + "xWidthAvg": 748 + } + }, + "variants": { + "regular": { + "familyName": "MedievalSharp", + "fullName": "MedievalSharp", + "postscriptName": "MedievalSharp", + "category": "display", + "capHeight": 201, + "ascent": 1771, + "descent": -543, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 224, + "xWidthAvg": 947, + "subsets": { + "latin": { + "xWidthAvg": 947 + }, + "thai": { + "xWidthAvg": 748 + } + } + } + } + }, + "medulaOne": { + "familyName": "Medula One", + "fullName": "Medula One", + "postscriptName": "MedulaOne-Regular", + "category": "display", + "capHeight": 650, + "ascent": 846, + "descent": -162, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 255, + "subsets": { + "latin": { + "xWidthAvg": 255 + }, + "thai": { + "xWidthAvg": 120 + } + }, + "variants": { + "regular": { + "familyName": "Medula One", + "fullName": "Medula One", + "postscriptName": "MedulaOne-Regular", + "category": "display", + "capHeight": 650, + "ascent": 846, + "descent": -162, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 255, + "subsets": { + "latin": { + "xWidthAvg": 255 + }, + "thai": { + "xWidthAvg": 120 + } + } + } + } + }, + "meeraInimai": { + "familyName": "Meera Inimai", + "fullName": "MeeraInimai-Regular", + "postscriptName": "MeeraInimai-Regular", + "category": "sans-serif", + "capHeight": 1460, + "ascent": 1986, + "descent": -1200, + "lineGap": 184, + "unitsPerEm": 2048, + "xHeight": 1056, + "xWidthAvg": 895, + "subsets": { + "latin": { + "xWidthAvg": 895 + }, + "thai": { + "xWidthAvg": 1122 + } + }, + "variants": { + "regular": { + "familyName": "Meera Inimai", + "fullName": "MeeraInimai-Regular", + "postscriptName": "MeeraInimai-Regular", + "category": "sans-serif", + "capHeight": 1460, + "ascent": 1986, + "descent": -1200, + "lineGap": 184, + "unitsPerEm": 2048, + "xHeight": 1056, + "xWidthAvg": 895, + "subsets": { + "latin": { + "xWidthAvg": 895 + }, + "thai": { + "xWidthAvg": 1122 + } + } + } + } + }, + "megrim": { + "familyName": "Megrim", + "fullName": "Megrim", + "postscriptName": "Megrim", + "category": "display", + "capHeight": 700, + "ascent": 880, + "descent": -200, + "lineGap": 90, + "unitsPerEm": 1000, + "xHeight": 580, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Megrim", + "fullName": "Megrim", + "postscriptName": "Megrim", + "category": "display", + "capHeight": 700, + "ascent": 880, + "descent": -200, + "lineGap": 90, + "unitsPerEm": 1000, + "xHeight": 580, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "meieScript": { + "familyName": "Meie Script", + "fullName": "Meie Script", + "postscriptName": "MeieScript-Regular", + "category": "handwriting", + "capHeight": 862, + "ascent": 1814, + "descent": -780, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 354, + "xWidthAvg": 844, + "subsets": { + "latin": { + "xWidthAvg": 844 + }, + "thai": { + "xWidthAvg": 614 + } + }, + "variants": { + "regular": { + "familyName": "Meie Script", + "fullName": "Meie Script", + "postscriptName": "MeieScript-Regular", + "category": "handwriting", + "capHeight": 862, + "ascent": 1814, + "descent": -780, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 354, + "xWidthAvg": 844, + "subsets": { + "latin": { + "xWidthAvg": 844 + }, + "thai": { + "xWidthAvg": 614 + } + } + } + } + }, + "meowScript": { + "familyName": "Meow Script", + "fullName": "Meow Script Regular", + "postscriptName": "MeowScript-Regular", + "category": "handwriting", + "capHeight": 560, + "ascent": 830, + "descent": -370, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 320, + "xWidthAvg": 323, + "subsets": { + "latin": { + "xWidthAvg": 323 + }, + "thai": { + "xWidthAvg": 484 + } + }, + "variants": { + "regular": { + "familyName": "Meow Script", + "fullName": "Meow Script Regular", + "postscriptName": "MeowScript-Regular", + "category": "handwriting", + "capHeight": 560, + "ascent": 830, + "descent": -370, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 320, + "xWidthAvg": 323, + "subsets": { + "latin": { + "xWidthAvg": 323 + }, + "thai": { + "xWidthAvg": 484 + } + } + } + } + }, + "merienda": { + "familyName": "Merienda", + "fullName": "Merienda Regular", + "postscriptName": "Merienda-Regular", + "category": "handwriting", + "capHeight": 847, + "ascent": 1102, + "descent": -342, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 599, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 708 + } + }, + "variants": { + "300": { + "familyName": "Merienda", + "fullName": "Merienda Light", + "postscriptName": "Merienda-Light", + "category": "handwriting", + "capHeight": 847, + "ascent": 1102, + "descent": -342, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 599, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 686 + } + } + }, + "500": { + "familyName": "Merienda", + "fullName": "Merienda Medium", + "postscriptName": "Merienda-Medium", + "category": "handwriting", + "capHeight": 847, + "ascent": 1102, + "descent": -342, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 599, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 726 + } + } + }, + "600": { + "familyName": "Merienda", + "fullName": "Merienda SemiBold", + "postscriptName": "Merienda-SemiBold", + "category": "handwriting", + "capHeight": 847, + "ascent": 1102, + "descent": -342, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 599, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 753 + } + } + }, + "700": { + "familyName": "Merienda", + "fullName": "Merienda Bold", + "postscriptName": "Merienda-Bold", + "category": "handwriting", + "capHeight": 847, + "ascent": 1102, + "descent": -342, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 599, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 768 + } + } + }, + "800": { + "familyName": "Merienda", + "fullName": "Merienda ExtraBold", + "postscriptName": "Merienda-ExtraBold", + "category": "handwriting", + "capHeight": 847, + "ascent": 1102, + "descent": -342, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 599, + "xWidthAvg": 518, + "subsets": { + "latin": { + "xWidthAvg": 518 + }, + "thai": { + "xWidthAvg": 794 + } + } + }, + "900": { + "familyName": "Merienda", + "fullName": "Merienda Black", + "postscriptName": "Merienda-Black", + "category": "handwriting", + "capHeight": 847, + "ascent": 1102, + "descent": -342, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 599, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 808 + } + } + }, + "regular": { + "familyName": "Merienda", + "fullName": "Merienda Regular", + "postscriptName": "Merienda-Regular", + "category": "handwriting", + "capHeight": 847, + "ascent": 1102, + "descent": -342, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 599, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 708 + } + } + } + } + }, + "merriweather": { + "familyName": "Merriweather", + "fullName": "Merriweather Regular", + "postscriptName": "Merriweather-Regular", + "category": "serif", + "capHeight": 743, + "ascent": 984, + "descent": -273, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 555, + "xWidthAvg": 496, + "subsets": { + "latin": { + "xWidthAvg": 496 + }, + "thai": { + "xWidthAvg": 864 + } + }, + "variants": { + "300": { + "familyName": "Merriweather", + "fullName": "Merriweather Light", + "postscriptName": "Merriweather-Light", + "category": "serif", + "capHeight": 743, + "ascent": 984, + "descent": -273, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 555, + "xWidthAvg": 491, + "subsets": { + "latin": { + "xWidthAvg": 491 + }, + "thai": { + "xWidthAvg": 864 + } + } + }, + "700": { + "familyName": "Merriweather", + "fullName": "Merriweather Bold", + "postscriptName": "Merriweather-Bold", + "category": "serif", + "capHeight": 743, + "ascent": 984, + "descent": -273, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 556, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 864 + } + } + }, + "900": { + "familyName": "Merriweather", + "fullName": "Merriweather Black", + "postscriptName": "Merriweather-Black", + "category": "serif", + "capHeight": 743, + "ascent": 984, + "descent": -273, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 556, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 864 + } + } + }, + "regular": { + "familyName": "Merriweather", + "fullName": "Merriweather Regular", + "postscriptName": "Merriweather-Regular", + "category": "serif", + "capHeight": 743, + "ascent": 984, + "descent": -273, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 555, + "xWidthAvg": 496, + "subsets": { + "latin": { + "xWidthAvg": 496 + }, + "thai": { + "xWidthAvg": 864 + } + } + }, + "italic": { + "familyName": "Merriweather", + "fullName": "Merriweather Italic", + "postscriptName": "Merriweather-Italic", + "category": "serif", + "capHeight": 743, + "ascent": 984, + "descent": -273, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 555, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 906 + } + } + }, + "900italic": { + "familyName": "Merriweather", + "fullName": "Merriweather Black Italic", + "postscriptName": "Merriweather-BlackItalic", + "category": "serif", + "capHeight": 743, + "ascent": 984, + "descent": -273, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 555, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 914 + } + } + }, + "700italic": { + "familyName": "Merriweather", + "fullName": "Merriweather Bold Italic", + "postscriptName": "Merriweather-BoldItalic", + "category": "serif", + "capHeight": 743, + "ascent": 984, + "descent": -273, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 555, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 910 + } + } + }, + "300italic": { + "familyName": "Merriweather", + "fullName": "Merriweather Light Italic", + "postscriptName": "Merriweather-LightItalic", + "category": "serif", + "capHeight": 743, + "ascent": 984, + "descent": -273, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 555, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 902 + } + } + } + } + }, + "merriweatherSans": { + "familyName": "Merriweather Sans", + "fullName": "Merriweather Sans Regular", + "postscriptName": "MerriweatherSans-Regular", + "category": "sans-serif", + "capHeight": 1486, + "ascent": 1968, + "descent": -546, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1114, + "xWidthAvg": 949, + "subsets": { + "latin": { + "xWidthAvg": 949 + }, + "thai": { + "xWidthAvg": 1830 + } + }, + "variants": { + "300": { + "familyName": "Merriweather Sans", + "fullName": "Merriweather Sans Light", + "postscriptName": "MerriweatherSans-Light", + "category": "sans-serif", + "capHeight": 1486, + "ascent": 1968, + "descent": -546, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1114, + "xWidthAvg": 941, + "subsets": { + "latin": { + "xWidthAvg": 941 + }, + "thai": { + "xWidthAvg": 1828 + } + } + }, + "500": { + "familyName": "Merriweather Sans", + "fullName": "Merriweather Sans Medium", + "postscriptName": "MerriweatherSans-Medium", + "category": "sans-serif", + "capHeight": 1486, + "ascent": 1968, + "descent": -546, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1114, + "xWidthAvg": 961, + "subsets": { + "latin": { + "xWidthAvg": 961 + }, + "thai": { + "xWidthAvg": 1831 + } + } + }, + "600": { + "familyName": "Merriweather Sans", + "fullName": "Merriweather Sans SemiBold", + "postscriptName": "MerriweatherSans-SemiBold", + "category": "sans-serif", + "capHeight": 1486, + "ascent": 1968, + "descent": -546, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1114, + "xWidthAvg": 973, + "subsets": { + "latin": { + "xWidthAvg": 973 + }, + "thai": { + "xWidthAvg": 1832 + } + } + }, + "700": { + "familyName": "Merriweather Sans", + "fullName": "Merriweather Sans Bold", + "postscriptName": "MerriweatherSans-Bold", + "category": "sans-serif", + "capHeight": 1486, + "ascent": 1968, + "descent": -546, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1114, + "xWidthAvg": 985, + "subsets": { + "latin": { + "xWidthAvg": 985 + }, + "thai": { + "xWidthAvg": 1832 + } + } + }, + "800": { + "familyName": "Merriweather Sans", + "fullName": "Merriweather Sans ExtraBold", + "postscriptName": "MerriweatherSans-ExtraBold", + "category": "sans-serif", + "capHeight": 1486, + "ascent": 1968, + "descent": -546, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1114, + "xWidthAvg": 1011, + "subsets": { + "latin": { + "xWidthAvg": 1011 + }, + "thai": { + "xWidthAvg": 1834 + } + } + }, + "regular": { + "familyName": "Merriweather Sans", + "fullName": "Merriweather Sans Regular", + "postscriptName": "MerriweatherSans-Regular", + "category": "sans-serif", + "capHeight": 1486, + "ascent": 1968, + "descent": -546, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1114, + "xWidthAvg": 949, + "subsets": { + "latin": { + "xWidthAvg": 949 + }, + "thai": { + "xWidthAvg": 1830 + } + } + }, + "italic": { + "familyName": "Merriweather Sans", + "fullName": "Merriweather Sans Italic", + "postscriptName": "MerriweatherSans-Italic", + "category": "sans-serif", + "capHeight": 1494, + "ascent": 1968, + "descent": -546, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1114, + "xWidthAvg": 893, + "subsets": { + "latin": { + "xWidthAvg": 893 + }, + "thai": { + "xWidthAvg": 1828 + } + } + }, + "800italic": { + "familyName": "Merriweather Sans", + "fullName": "Merriweather Sans ExtraBold Italic", + "postscriptName": "MerriweatherSans-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 1494, + "ascent": 1968, + "descent": -546, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1114, + "xWidthAvg": 958, + "subsets": { + "latin": { + "xWidthAvg": 958 + }, + "thai": { + "xWidthAvg": 1828 + } + } + }, + "700italic": { + "familyName": "Merriweather Sans", + "fullName": "Merriweather Sans Bold Italic", + "postscriptName": "MerriweatherSans-BoldItalic", + "category": "sans-serif", + "capHeight": 1494, + "ascent": 1968, + "descent": -546, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1114, + "xWidthAvg": 935, + "subsets": { + "latin": { + "xWidthAvg": 935 + }, + "thai": { + "xWidthAvg": 1828 + } + } + }, + "600italic": { + "familyName": "Merriweather Sans", + "fullName": "Merriweather Sans SemiBold Italic", + "postscriptName": "MerriweatherSans-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 1494, + "ascent": 1968, + "descent": -546, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1114, + "xWidthAvg": 921, + "subsets": { + "latin": { + "xWidthAvg": 921 + }, + "thai": { + "xWidthAvg": 1828 + } + } + }, + "500italic": { + "familyName": "Merriweather Sans", + "fullName": "Merriweather Sans Medium Italic", + "postscriptName": "MerriweatherSans-MediumItalic", + "category": "sans-serif", + "capHeight": 1494, + "ascent": 1968, + "descent": -546, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1114, + "xWidthAvg": 907, + "subsets": { + "latin": { + "xWidthAvg": 907 + }, + "thai": { + "xWidthAvg": 1828 + } + } + }, + "300italic": { + "familyName": "Merriweather Sans", + "fullName": "Merriweather Sans Light Italic", + "postscriptName": "MerriweatherSans-LightItalic", + "category": "sans-serif", + "capHeight": 1494, + "ascent": 1968, + "descent": -546, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1114, + "xWidthAvg": 875, + "subsets": { + "latin": { + "xWidthAvg": 875 + }, + "thai": { + "xWidthAvg": 1802 + } + } + } + } + }, + "metal": { + "familyName": "Metal", + "fullName": "Metal Regular", + "postscriptName": "Metal-Regular", + "category": "display", + "capHeight": 1462, + "ascent": 2600, + "descent": -1600, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 746, + "subsets": { + "latin": { + "xWidthAvg": 746 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Metal", + "fullName": "Metal Regular", + "postscriptName": "Metal-Regular", + "category": "display", + "capHeight": 1462, + "ascent": 2600, + "descent": -1600, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 746, + "subsets": { + "latin": { + "xWidthAvg": 746 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "metalMania": { + "familyName": "Metal Mania", + "fullName": "Metal Mania", + "postscriptName": "MetalMania-Regular", + "category": "display", + "capHeight": 820, + "ascent": 965, + "descent": -303, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 620, + "xWidthAvg": 399, + "subsets": { + "latin": { + "xWidthAvg": 399 + }, + "thai": { + "xWidthAvg": 326 + } + }, + "variants": { + "regular": { + "familyName": "Metal Mania", + "fullName": "Metal Mania", + "postscriptName": "MetalMania-Regular", + "category": "display", + "capHeight": 820, + "ascent": 965, + "descent": -303, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 620, + "xWidthAvg": 399, + "subsets": { + "latin": { + "xWidthAvg": 399 + }, + "thai": { + "xWidthAvg": 326 + } + } + } + } + }, + "metamorphous": { + "familyName": "Metamorphous", + "fullName": "Metamorphous", + "postscriptName": "Metamorphous", + "category": "display", + "capHeight": 1530, + "ascent": 1972, + "descent": -588, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1208, + "xWidthAvg": 1140, + "subsets": { + "latin": { + "xWidthAvg": 1140 + }, + "thai": { + "xWidthAvg": 1770 + } + }, + "variants": { + "regular": { + "familyName": "Metamorphous", + "fullName": "Metamorphous", + "postscriptName": "Metamorphous", + "category": "display", + "capHeight": 1530, + "ascent": 1972, + "descent": -588, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1208, + "xWidthAvg": 1140, + "subsets": { + "latin": { + "xWidthAvg": 1140 + }, + "thai": { + "xWidthAvg": 1770 + } + } + } + } + }, + "metrophobic": { + "familyName": "Metrophobic", + "fullName": "Metrophobic Regular", + "postscriptName": "Metrophobic-Regular", + "category": "sans-serif", + "capHeight": 1441, + "ascent": 2065, + "descent": -460, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1011, + "xWidthAvg": 945, + "subsets": { + "latin": { + "xWidthAvg": 945 + }, + "thai": { + "xWidthAvg": 1154 + } + }, + "variants": { + "regular": { + "familyName": "Metrophobic", + "fullName": "Metrophobic Regular", + "postscriptName": "Metrophobic-Regular", + "category": "sans-serif", + "capHeight": 1441, + "ascent": 2065, + "descent": -460, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1011, + "xWidthAvg": 945, + "subsets": { + "latin": { + "xWidthAvg": 945 + }, + "thai": { + "xWidthAvg": 1154 + } + } + } + } + }, + "michroma": { + "familyName": "Michroma", + "fullName": "Michroma Regular", + "postscriptName": "Michroma-Regular", + "category": "sans-serif", + "capHeight": 1536, + "ascent": 2368, + "descent": -544, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1152, + "xWidthAvg": 1293, + "subsets": { + "latin": { + "xWidthAvg": 1293 + }, + "thai": { + "xWidthAvg": 1792 + } + }, + "variants": { + "regular": { + "familyName": "Michroma", + "fullName": "Michroma Regular", + "postscriptName": "Michroma-Regular", + "category": "sans-serif", + "capHeight": 1536, + "ascent": 2368, + "descent": -544, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1152, + "xWidthAvg": 1293, + "subsets": { + "latin": { + "xWidthAvg": 1293 + }, + "thai": { + "xWidthAvg": 1792 + } + } + } + } + }, + "micro5": { + "familyName": "Micro 5", + "fullName": "Micro 5 Regular", + "postscriptName": "Micro5-Regular", + "category": "display", + "capHeight": 750, + "ascent": 1190, + "descent": -460, + "lineGap": 0, + "unitsPerEm": 1650, + "xHeight": 600, + "xWidthAvg": 530, + "subsets": { + "latin": { + "xWidthAvg": 530 + }, + "thai": { + "xWidthAvg": 750 + } + }, + "variants": { + "regular": { + "familyName": "Micro 5", + "fullName": "Micro 5 Regular", + "postscriptName": "Micro5-Regular", + "category": "display", + "capHeight": 750, + "ascent": 1190, + "descent": -460, + "lineGap": 0, + "unitsPerEm": 1650, + "xHeight": 600, + "xWidthAvg": 530, + "subsets": { + "latin": { + "xWidthAvg": 530 + }, + "thai": { + "xWidthAvg": 750 + } + } + } + } + }, + "micro5Charted": { + "familyName": "Micro 5 Charted", + "fullName": "Micro 5 Charted Regular", + "postscriptName": "Micro5Charted-Regular", + "category": "display", + "capHeight": 750, + "ascent": 1190, + "descent": -460, + "lineGap": 0, + "unitsPerEm": 1650, + "xHeight": 600, + "xWidthAvg": 530, + "subsets": { + "latin": { + "xWidthAvg": 530 + }, + "thai": { + "xWidthAvg": 750 + } + }, + "variants": { + "regular": { + "familyName": "Micro 5 Charted", + "fullName": "Micro 5 Charted Regular", + "postscriptName": "Micro5Charted-Regular", + "category": "display", + "capHeight": 750, + "ascent": 1190, + "descent": -460, + "lineGap": 0, + "unitsPerEm": 1650, + "xHeight": 600, + "xWidthAvg": 530, + "subsets": { + "latin": { + "xWidthAvg": 530 + }, + "thai": { + "xWidthAvg": 750 + } + } + } + } + }, + "milonga": { + "familyName": "Milonga", + "fullName": "Milonga", + "postscriptName": "Milonga-Regular", + "category": "display", + "capHeight": 809, + "ascent": 990, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 458, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 712 + } + }, + "variants": { + "regular": { + "familyName": "Milonga", + "fullName": "Milonga", + "postscriptName": "Milonga-Regular", + "category": "display", + "capHeight": 809, + "ascent": 990, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 458, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 712 + } + } + } + } + }, + "miltonian": { + "familyName": "Miltonian", + "fullName": "Miltonian", + "postscriptName": "Miltonian-Regular", + "category": "display", + "capHeight": 689, + "ascent": 918, + "descent": -274, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 454, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 0 + } + }, + "variants": { + "regular": { + "familyName": "Miltonian", + "fullName": "Miltonian", + "postscriptName": "Miltonian-Regular", + "category": "display", + "capHeight": 689, + "ascent": 918, + "descent": -274, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 454, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 0 + } + } + } + } + }, + "miltonianTattoo": { + "familyName": "Miltonian Tattoo", + "fullName": "Miltonian Tattoo", + "postscriptName": "MiltonianTattoo-Regular", + "category": "display", + "capHeight": 689, + "ascent": 918, + "descent": -274, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 454, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 0 + } + }, + "variants": { + "regular": { + "familyName": "Miltonian Tattoo", + "fullName": "Miltonian Tattoo", + "postscriptName": "MiltonianTattoo-Regular", + "category": "display", + "capHeight": 689, + "ascent": 918, + "descent": -274, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 454, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 0 + } + } + } + } + }, + "mina": { + "familyName": "Mina", + "fullName": "Mina", + "postscriptName": "Mina-Regular", + "category": "sans-serif", + "ascent": 1075, + "descent": -515, + "lineGap": 0, + "unitsPerEm": 1000, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 364 + } + }, + "variants": { + "700": { + "familyName": "Mina", + "fullName": "Mina Bold", + "postscriptName": "Mina-Bold", + "category": "sans-serif", + "ascent": 1075, + "descent": -515, + "lineGap": 0, + "unitsPerEm": 1000, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "regular": { + "familyName": "Mina", + "fullName": "Mina", + "postscriptName": "Mina-Regular", + "category": "sans-serif", + "ascent": 1075, + "descent": -515, + "lineGap": 0, + "unitsPerEm": 1000, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 364 + } + } + } + } + }, + "mingzat": { + "familyName": "Mingzat", + "fullName": "Mingzat", + "postscriptName": "Mingzat-Regular", + "category": "sans-serif", + "capHeight": 1100, + "ascent": 1427, + "descent": -670, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 705, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 760 + } + }, + "variants": { + "regular": { + "familyName": "Mingzat", + "fullName": "Mingzat", + "postscriptName": "Mingzat-Regular", + "category": "sans-serif", + "capHeight": 1100, + "ascent": 1427, + "descent": -670, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 705, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 760 + } + } + } + } + }, + "miniver": { + "familyName": "Miniver", + "fullName": "Miniver", + "postscriptName": "Miniver", + "category": "display", + "capHeight": 782, + "ascent": 1019, + "descent": -474, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 501, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 338 + } + }, + "variants": { + "regular": { + "familyName": "Miniver", + "fullName": "Miniver", + "postscriptName": "Miniver", + "category": "display", + "capHeight": 782, + "ascent": 1019, + "descent": -474, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 501, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 338 + } + } + } + } + }, + "miriamLibre": { + "familyName": "Miriam Libre", + "fullName": "Miriam Libre Regular", + "postscriptName": "MiriamLibre-Regular", + "category": "sans-serif", + "capHeight": 695, + "ascent": 969, + "descent": -344, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 566, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "500": { + "familyName": "Miriam Libre", + "fullName": "Miriam Libre Medium", + "postscriptName": "MiriamLibre-Medium", + "category": "sans-serif", + "capHeight": 695, + "ascent": 969, + "descent": -344, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 566, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Miriam Libre", + "fullName": "Miriam Libre SemiBold", + "postscriptName": "MiriamLibre-SemiBold", + "category": "sans-serif", + "capHeight": 695, + "ascent": 969, + "descent": -344, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 566, + "xWidthAvg": 499, + "subsets": { + "latin": { + "xWidthAvg": 499 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Miriam Libre", + "fullName": "Miriam Libre Bold", + "postscriptName": "MiriamLibre-Bold", + "category": "sans-serif", + "capHeight": 695, + "ascent": 969, + "descent": -344, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 566, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Miriam Libre", + "fullName": "Miriam Libre Regular", + "postscriptName": "MiriamLibre-Regular", + "category": "sans-serif", + "capHeight": 695, + "ascent": 969, + "descent": -344, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 566, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "mirza": { + "familyName": "Mirza", + "fullName": "Mirza Regular", + "postscriptName": "Mirza-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 547, + "descent": -453, + "lineGap": 200, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 397, + "subsets": { + "latin": { + "xWidthAvg": 397 + }, + "thai": { + "xWidthAvg": 364 + } + }, + "variants": { + "500": { + "familyName": "Mirza", + "fullName": "Mirza Medium", + "postscriptName": "Mirza-Medium", + "category": "serif", + "capHeight": 700, + "ascent": 547, + "descent": -453, + "lineGap": 200, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 397, + "subsets": { + "latin": { + "xWidthAvg": 397 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "600": { + "familyName": "Mirza", + "fullName": "Mirza SemiBold", + "postscriptName": "Mirza-SemiBold", + "category": "serif", + "capHeight": 700, + "ascent": 547, + "descent": -453, + "lineGap": 200, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 398, + "subsets": { + "latin": { + "xWidthAvg": 398 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "700": { + "familyName": "Mirza", + "fullName": "Mirza Bold", + "postscriptName": "Mirza-Bold", + "category": "serif", + "capHeight": 700, + "ascent": 547, + "descent": -453, + "lineGap": 200, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 398, + "subsets": { + "latin": { + "xWidthAvg": 398 + }, + "thai": { + "xWidthAvg": 364 + } + } + }, + "regular": { + "familyName": "Mirza", + "fullName": "Mirza Regular", + "postscriptName": "Mirza-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 547, + "descent": -453, + "lineGap": 200, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 397, + "subsets": { + "latin": { + "xWidthAvg": 397 + }, + "thai": { + "xWidthAvg": 364 + } + } + } + } + }, + "missFajardose": { + "familyName": "Miss Fajardose", + "fullName": "Miss Fajardose Regular", + "postscriptName": "MissFajardose-Regular", + "category": "handwriting", + "capHeight": 658, + "ascent": 859, + "descent": -389, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 158, + "xWidthAvg": 217, + "subsets": { + "latin": { + "xWidthAvg": 217 + }, + "thai": { + "xWidthAvg": 130 + } + }, + "variants": { + "regular": { + "familyName": "Miss Fajardose", + "fullName": "Miss Fajardose Regular", + "postscriptName": "MissFajardose-Regular", + "category": "handwriting", + "capHeight": 658, + "ascent": 859, + "descent": -389, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 158, + "xWidthAvg": 217, + "subsets": { + "latin": { + "xWidthAvg": 217 + }, + "thai": { + "xWidthAvg": 130 + } + } + } + } + }, + "mitr": { + "familyName": "Mitr", + "fullName": "Mitr Regular", + "postscriptName": "Mitr-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1150, + "descent": -420, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 560 + } + }, + "variants": { + "200": { + "familyName": "Mitr", + "fullName": "Mitr ExtraLight", + "postscriptName": "Mitr-ExtraLight", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1150, + "descent": -420, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 508, + "subsets": { + "latin": { + "xWidthAvg": 508 + }, + "thai": { + "xWidthAvg": 549 + } + } + }, + "300": { + "familyName": "Mitr", + "fullName": "Mitr Light", + "postscriptName": "Mitr-Light", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1150, + "descent": -420, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 509, + "subsets": { + "latin": { + "xWidthAvg": 509 + }, + "thai": { + "xWidthAvg": 554 + } + } + }, + "500": { + "familyName": "Mitr", + "fullName": "Mitr Medium", + "postscriptName": "Mitr-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1150, + "descent": -420, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 567 + } + } + }, + "600": { + "familyName": "Mitr", + "fullName": "Mitr SemiBold", + "postscriptName": "Mitr-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1150, + "descent": -420, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 513, + "subsets": { + "latin": { + "xWidthAvg": 513 + }, + "thai": { + "xWidthAvg": 574 + } + } + }, + "700": { + "familyName": "Mitr", + "fullName": "Mitr Bold", + "postscriptName": "Mitr-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1150, + "descent": -420, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 515, + "subsets": { + "latin": { + "xWidthAvg": 515 + }, + "thai": { + "xWidthAvg": 580 + } + } + }, + "regular": { + "familyName": "Mitr", + "fullName": "Mitr Regular", + "postscriptName": "Mitr-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1150, + "descent": -420, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 560 + } + } + } + } + }, + "mochiyPopOne": { + "familyName": "Mochiy Pop One", + "fullName": "Mochiy Pop One Regular", + "postscriptName": "MochiyPopOne-Regular", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 568, + "subsets": { + "latin": { + "xWidthAvg": 568 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Mochiy Pop One", + "fullName": "Mochiy Pop One Regular", + "postscriptName": "MochiyPopOne-Regular", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 568, + "subsets": { + "latin": { + "xWidthAvg": 568 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "mochiyPopPOne": { + "familyName": "Mochiy Pop P One", + "fullName": "Mochiy Pop P One Regular", + "postscriptName": "MochiyPopPOne-Regular", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 568, + "subsets": { + "latin": { + "xWidthAvg": 568 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Mochiy Pop P One", + "fullName": "Mochiy Pop P One Regular", + "postscriptName": "MochiyPopPOne-Regular", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 568, + "subsets": { + "latin": { + "xWidthAvg": 568 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "modak": { + "familyName": "Modak", + "fullName": "Modak", + "postscriptName": "Modak", + "category": "display", + "capHeight": 1290, + "ascent": 2035, + "descent": -1049, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1099, + "xWidthAvg": 954, + "subsets": { + "latin": { + "xWidthAvg": 954 + }, + "thai": { + "xWidthAvg": 1278 + } + }, + "variants": { + "regular": { + "familyName": "Modak", + "fullName": "Modak", + "postscriptName": "Modak", + "category": "display", + "capHeight": 1290, + "ascent": 2035, + "descent": -1049, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1099, + "xWidthAvg": 954, + "subsets": { + "latin": { + "xWidthAvg": 954 + }, + "thai": { + "xWidthAvg": 1278 + } + } + } + } + }, + "modernAntiqua": { + "familyName": "Modern Antiqua", + "fullName": "Modern Antiqua Regular", + "postscriptName": "ModernAntiqua-Regular", + "category": "display", + "capHeight": 1511, + "ascent": 1815, + "descent": -508, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1089, + "xWidthAvg": 1022, + "subsets": { + "latin": { + "xWidthAvg": 1022 + }, + "thai": { + "xWidthAvg": 748 + } + }, + "variants": { + "regular": { + "familyName": "Modern Antiqua", + "fullName": "Modern Antiqua Regular", + "postscriptName": "ModernAntiqua-Regular", + "category": "display", + "capHeight": 1511, + "ascent": 1815, + "descent": -508, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1089, + "xWidthAvg": 1022, + "subsets": { + "latin": { + "xWidthAvg": 1022 + }, + "thai": { + "xWidthAvg": 748 + } + } + } + } + }, + "moderustic": { + "familyName": "Moderustic", + "fullName": "Moderustic Regular", + "postscriptName": "Moderustic-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 755 + } + }, + "variants": { + "300": { + "familyName": "Moderustic", + "fullName": "Moderustic Light", + "postscriptName": "Moderustic-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 755 + } + } + }, + "500": { + "familyName": "Moderustic", + "fullName": "Moderustic Medium", + "postscriptName": "Moderustic-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 755 + } + } + }, + "600": { + "familyName": "Moderustic", + "fullName": "Moderustic SemiBold", + "postscriptName": "Moderustic-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 755 + } + } + }, + "700": { + "familyName": "Moderustic", + "fullName": "Moderustic Bold", + "postscriptName": "Moderustic-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 755 + } + } + }, + "800": { + "familyName": "Moderustic", + "fullName": "Moderustic ExtraBold", + "postscriptName": "Moderustic-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 755 + } + } + }, + "regular": { + "familyName": "Moderustic", + "fullName": "Moderustic Regular", + "postscriptName": "Moderustic-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 755 + } + } + } + } + }, + "mogra": { + "familyName": "Mogra", + "fullName": "Mogra Regular", + "postscriptName": "Mogra-Regular", + "category": "display", + "capHeight": 705, + "ascent": 750, + "descent": -250, + "lineGap": 200, + "unitsPerEm": 1000, + "xHeight": 565, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 650 + } + }, + "variants": { + "regular": { + "familyName": "Mogra", + "fullName": "Mogra Regular", + "postscriptName": "Mogra-Regular", + "category": "display", + "capHeight": 705, + "ascent": 750, + "descent": -250, + "lineGap": 200, + "unitsPerEm": 1000, + "xHeight": 565, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 650 + } + } + } + } + }, + "mohave": { + "familyName": "Mohave", + "fullName": "Mohave Regular", + "postscriptName": "Mohave-Regular", + "category": "sans-serif", + "capHeight": 1500, + "ascent": 1980, + "descent": -806, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 755, + "subsets": { + "latin": { + "xWidthAvg": 755 + }, + "thai": { + "xWidthAvg": 1017 + } + }, + "variants": { + "300": { + "familyName": "Mohave", + "fullName": "Mohave Light", + "postscriptName": "Mohave-Light", + "category": "sans-serif", + "capHeight": 1500, + "ascent": 1980, + "descent": -806, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 753, + "subsets": { + "latin": { + "xWidthAvg": 753 + }, + "thai": { + "xWidthAvg": 1036 + } + } + }, + "500": { + "familyName": "Mohave", + "fullName": "Mohave Medium", + "postscriptName": "Mohave-Medium", + "category": "sans-serif", + "capHeight": 1500, + "ascent": 1980, + "descent": -806, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 757, + "subsets": { + "latin": { + "xWidthAvg": 757 + }, + "thai": { + "xWidthAvg": 998 + } + } + }, + "600": { + "familyName": "Mohave", + "fullName": "Mohave SemiBold", + "postscriptName": "Mohave-SemiBold", + "category": "sans-serif", + "capHeight": 1500, + "ascent": 1980, + "descent": -806, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 760, + "subsets": { + "latin": { + "xWidthAvg": 760 + }, + "thai": { + "xWidthAvg": 979 + } + } + }, + "700": { + "familyName": "Mohave", + "fullName": "Mohave Bold", + "postscriptName": "Mohave-Bold", + "category": "sans-serif", + "capHeight": 1500, + "ascent": 1980, + "descent": -806, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 762, + "subsets": { + "latin": { + "xWidthAvg": 762 + }, + "thai": { + "xWidthAvg": 960 + } + } + }, + "regular": { + "familyName": "Mohave", + "fullName": "Mohave Regular", + "postscriptName": "Mohave-Regular", + "category": "sans-serif", + "capHeight": 1500, + "ascent": 1980, + "descent": -806, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 755, + "subsets": { + "latin": { + "xWidthAvg": 755 + }, + "thai": { + "xWidthAvg": 1017 + } + } + }, + "italic": { + "familyName": "Mohave", + "fullName": "Mohave Italic", + "postscriptName": "Mohave-Italic", + "category": "sans-serif", + "capHeight": 1500, + "ascent": 1980, + "descent": -806, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 758, + "subsets": { + "latin": { + "xWidthAvg": 758 + }, + "thai": { + "xWidthAvg": 1018 + } + } + }, + "700italic": { + "familyName": "Mohave", + "fullName": "Mohave Bold Italic", + "postscriptName": "Mohave-BoldItalic", + "category": "sans-serif", + "capHeight": 1500, + "ascent": 1980, + "descent": -806, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 766, + "subsets": { + "latin": { + "xWidthAvg": 766 + }, + "thai": { + "xWidthAvg": 962 + } + } + }, + "600italic": { + "familyName": "Mohave", + "fullName": "Mohave SemiBold Italic", + "postscriptName": "Mohave-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 1500, + "ascent": 1980, + "descent": -806, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 763, + "subsets": { + "latin": { + "xWidthAvg": 763 + }, + "thai": { + "xWidthAvg": 981 + } + } + }, + "500italic": { + "familyName": "Mohave", + "fullName": "Mohave Medium Italic", + "postscriptName": "Mohave-MediumItalic", + "category": "sans-serif", + "capHeight": 1500, + "ascent": 1980, + "descent": -806, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 760, + "subsets": { + "latin": { + "xWidthAvg": 760 + }, + "thai": { + "xWidthAvg": 999 + } + } + }, + "300italic": { + "familyName": "Mohave", + "fullName": "Mohave Light Italic", + "postscriptName": "Mohave-LightItalic", + "category": "sans-serif", + "capHeight": 1500, + "ascent": 1980, + "descent": -806, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 755, + "subsets": { + "latin": { + "xWidthAvg": 755 + }, + "thai": { + "xWidthAvg": 1036 + } + } + } + } + }, + "moiraiOne": { + "familyName": "Moirai One", + "fullName": "Moirai One Regular", + "postscriptName": "MoiraiOne-Regular", + "category": "display", + "capHeight": 778, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Moirai One", + "fullName": "Moirai One Regular", + "postscriptName": "MoiraiOne-Regular", + "category": "display", + "capHeight": 778, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "molengo": { + "familyName": "Molengo", + "fullName": "Molengo", + "postscriptName": "Molengo-Regular", + "category": "sans-serif", + "capHeight": 1391, + "ascent": 1928, + "descent": -522, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 938, + "xWidthAvg": 861, + "subsets": { + "latin": { + "xWidthAvg": 861 + }, + "thai": { + "xWidthAvg": 886 + } + }, + "variants": { + "regular": { + "familyName": "Molengo", + "fullName": "Molengo", + "postscriptName": "Molengo-Regular", + "category": "sans-serif", + "capHeight": 1391, + "ascent": 1928, + "descent": -522, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 938, + "xWidthAvg": 861, + "subsets": { + "latin": { + "xWidthAvg": 861 + }, + "thai": { + "xWidthAvg": 886 + } + } + } + } + }, + "molle": { + "familyName": "Molle", + "fullName": "Molle", + "postscriptName": "Molle-Regular", + "category": "handwriting", + "capHeight": 1588, + "ascent": 1852, + "descent": -701, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 910, + "xWidthAvg": 1003, + "subsets": { + "latin": { + "xWidthAvg": 1003 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "italic": { + "familyName": "Molle", + "fullName": "Molle", + "postscriptName": "Molle-Regular", + "category": "handwriting", + "capHeight": 1588, + "ascent": 1852, + "descent": -701, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 910, + "xWidthAvg": 1003, + "subsets": { + "latin": { + "xWidthAvg": 1003 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "monaSans": { + "familyName": "Mona Sans", + "fullName": "Mona Sans Regular", + "postscriptName": "MonaSans-Regular", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 866 + } + }, + "variants": { + "200": { + "familyName": "Mona Sans", + "fullName": "Mona Sans ExtraLight", + "postscriptName": "MonaSans-ExtraLight", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 866 + } + } + }, + "300": { + "familyName": "Mona Sans", + "fullName": "Mona Sans Light", + "postscriptName": "MonaSans-Light", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 521, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 866 + } + } + }, + "500": { + "familyName": "Mona Sans", + "fullName": "Mona Sans Medium", + "postscriptName": "MonaSans-Medium", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 529, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 866 + } + } + }, + "600": { + "familyName": "Mona Sans", + "fullName": "Mona Sans SemiBold", + "postscriptName": "MonaSans-SemiBold", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 532, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 866 + } + } + }, + "700": { + "familyName": "Mona Sans", + "fullName": "Mona Sans Bold", + "postscriptName": "MonaSans-Bold", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 866 + } + } + }, + "800": { + "familyName": "Mona Sans", + "fullName": "Mona Sans ExtraBold", + "postscriptName": "MonaSans-ExtraBold", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 496, + "subsets": { + "latin": { + "xWidthAvg": 496 + }, + "thai": { + "xWidthAvg": 866 + } + } + }, + "900": { + "familyName": "Mona Sans", + "fullName": "Mona Sans Black", + "postscriptName": "MonaSans-Black", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 866 + } + } + }, + "regular": { + "familyName": "Mona Sans", + "fullName": "Mona Sans Regular", + "postscriptName": "MonaSans-Regular", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 866 + } + } + }, + "italic": { + "familyName": "Mona Sans", + "fullName": "Mona Sans Italic", + "postscriptName": "MonaSans-Italic", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 885 + } + } + }, + "900italic": { + "familyName": "Mona Sans", + "fullName": "Mona Sans Black Italic", + "postscriptName": "MonaSans-BlackItalic", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 886 + } + } + }, + "800italic": { + "familyName": "Mona Sans", + "fullName": "Mona Sans ExtraBold Italic", + "postscriptName": "MonaSans-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 886 + } + } + }, + "700italic": { + "familyName": "Mona Sans", + "fullName": "Mona Sans Bold Italic", + "postscriptName": "MonaSans-BoldItalic", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 886 + } + } + }, + "600italic": { + "familyName": "Mona Sans", + "fullName": "Mona Sans SemiBold Italic", + "postscriptName": "MonaSans-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 532, + "xWidthAvg": 476, + "subsets": { + "latin": { + "xWidthAvg": 476 + }, + "thai": { + "xWidthAvg": 886 + } + } + }, + "500italic": { + "familyName": "Mona Sans", + "fullName": "Mona Sans Medium Italic", + "postscriptName": "MonaSans-MediumItalic", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 529, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 885 + } + } + }, + "300italic": { + "familyName": "Mona Sans", + "fullName": "Mona Sans Light Italic", + "postscriptName": "MonaSans-LightItalic", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 521, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 885 + } + } + }, + "200italic": { + "familyName": "Mona Sans", + "fullName": "Mona Sans ExtraLight Italic", + "postscriptName": "MonaSans-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1090, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 885 + } + } + } + } + }, + "monda": { + "familyName": "Monda", + "fullName": "Monda Regular", + "postscriptName": "Monda-Regular", + "category": "sans-serif", + "capHeight": 1446, + "ascent": 2461, + "descent": -875, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1060, + "xWidthAvg": 979, + "subsets": { + "latin": { + "xWidthAvg": 979 + }, + "thai": { + "xWidthAvg": 724 + } + }, + "variants": { + "500": { + "familyName": "Monda", + "fullName": "Monda Medium", + "postscriptName": "Monda-Medium", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 2461, + "descent": -875, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1065, + "xWidthAvg": 983, + "subsets": { + "latin": { + "xWidthAvg": 983 + }, + "thai": { + "xWidthAvg": 732 + } + } + }, + "600": { + "familyName": "Monda", + "fullName": "Monda SemiBold", + "postscriptName": "Monda-SemiBold", + "category": "sans-serif", + "capHeight": 1466, + "ascent": 2461, + "descent": -875, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1069, + "xWidthAvg": 986, + "subsets": { + "latin": { + "xWidthAvg": 986 + }, + "thai": { + "xWidthAvg": 740 + } + } + }, + "700": { + "familyName": "Monda", + "fullName": "Monda Bold", + "postscriptName": "Monda-Bold", + "category": "sans-serif", + "capHeight": 1476, + "ascent": 2461, + "descent": -875, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1074, + "xWidthAvg": 989, + "subsets": { + "latin": { + "xWidthAvg": 989 + }, + "thai": { + "xWidthAvg": 748 + } + } + }, + "regular": { + "familyName": "Monda", + "fullName": "Monda Regular", + "postscriptName": "Monda-Regular", + "category": "sans-serif", + "capHeight": 1446, + "ascent": 2461, + "descent": -875, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1060, + "xWidthAvg": 979, + "subsets": { + "latin": { + "xWidthAvg": 979 + }, + "thai": { + "xWidthAvg": 724 + } + } + } + } + }, + "monofett": { + "familyName": "Monofett", + "fullName": "Monofett Regular", + "postscriptName": "Monofett-Regular", + "category": "monospace", + "capHeight": 1370, + "ascent": 2001, + "descent": -315, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1370, + "xWidthAvg": 1038, + "subsets": { + "latin": { + "xWidthAvg": 1038 + }, + "thai": { + "xWidthAvg": 1184 + } + }, + "variants": { + "regular": { + "familyName": "Monofett", + "fullName": "Monofett Regular", + "postscriptName": "Monofett-Regular", + "category": "monospace", + "capHeight": 1370, + "ascent": 2001, + "descent": -315, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1370, + "xWidthAvg": 1038, + "subsets": { + "latin": { + "xWidthAvg": 1038 + }, + "thai": { + "xWidthAvg": 1184 + } + } + } + } + }, + "monomaniacOne": { + "familyName": "Monomaniac One", + "fullName": "Monomaniac One Regular", + "postscriptName": "MonomaniacOne-Regular", + "category": "sans-serif", + "capHeight": 676, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 386, + "subsets": { + "latin": { + "xWidthAvg": 386 + }, + "thai": { + "xWidthAvg": 758 + } + }, + "variants": { + "regular": { + "familyName": "Monomaniac One", + "fullName": "Monomaniac One Regular", + "postscriptName": "MonomaniacOne-Regular", + "category": "sans-serif", + "capHeight": 676, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 386, + "subsets": { + "latin": { + "xWidthAvg": 386 + }, + "thai": { + "xWidthAvg": 758 + } + } + } + } + }, + "monoton": { + "familyName": "Monoton", + "fullName": "Monoton", + "postscriptName": "Monoton-Regular", + "category": "display", + "capHeight": 1656, + "ascent": 2366, + "descent": -822, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1440, + "xWidthAvg": 1273, + "subsets": { + "latin": { + "xWidthAvg": 1273 + }, + "thai": { + "xWidthAvg": 222 + } + }, + "variants": { + "regular": { + "familyName": "Monoton", + "fullName": "Monoton", + "postscriptName": "Monoton-Regular", + "category": "display", + "capHeight": 1656, + "ascent": 2366, + "descent": -822, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1440, + "xWidthAvg": 1273, + "subsets": { + "latin": { + "xWidthAvg": 1273 + }, + "thai": { + "xWidthAvg": 222 + } + } + } + } + }, + "monsieurLaDoulaise": { + "familyName": "Monsieur La Doulaise", + "fullName": "Monsieur La Doulaise Regular", + "postscriptName": "MonsieurLaDoulaise-Regular", + "category": "handwriting", + "capHeight": 729, + "ascent": 1048, + "descent": -513, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 164, + "xWidthAvg": 307, + "subsets": { + "latin": { + "xWidthAvg": 307 + }, + "thai": { + "xWidthAvg": 150 + } + }, + "variants": { + "regular": { + "familyName": "Monsieur La Doulaise", + "fullName": "Monsieur La Doulaise Regular", + "postscriptName": "MonsieurLaDoulaise-Regular", + "category": "handwriting", + "capHeight": 729, + "ascent": 1048, + "descent": -513, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 164, + "xWidthAvg": 307, + "subsets": { + "latin": { + "xWidthAvg": 307 + }, + "thai": { + "xWidthAvg": 150 + } + } + } + } + }, + "montaga": { + "familyName": "Montaga", + "fullName": "Montaga", + "postscriptName": "Montaga-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 978, + "descent": -254, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 466, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 248 + } + }, + "variants": { + "regular": { + "familyName": "Montaga", + "fullName": "Montaga", + "postscriptName": "Montaga-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 978, + "descent": -254, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 466, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 248 + } + } + } + } + }, + "montaguSlab": { + "familyName": "Montagu Slab", + "fullName": "Montagu Slab 144pt Regular", + "postscriptName": "MontaguSlab144pt-Regular", + "category": "serif", + "capHeight": 682, + "ascent": 982, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "100": { + "familyName": "Montagu Slab", + "fullName": "Montagu Slab 144pt Thin", + "postscriptName": "MontaguSlab144pt-Thin", + "category": "serif", + "capHeight": 682, + "ascent": 982, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200": { + "familyName": "Montagu Slab", + "fullName": "Montagu Slab 144pt ExtraLight", + "postscriptName": "MontaguSlab144pt-ExtraLight", + "category": "serif", + "capHeight": 682, + "ascent": 982, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Montagu Slab", + "fullName": "Montagu Slab 144pt Light", + "postscriptName": "MontaguSlab144pt-Light", + "category": "serif", + "capHeight": 682, + "ascent": 982, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Montagu Slab", + "fullName": "Montagu Slab 144pt Medium", + "postscriptName": "MontaguSlab144pt-Medium", + "category": "serif", + "capHeight": 682, + "ascent": 982, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Montagu Slab", + "fullName": "Montagu Slab 144pt SemiBold", + "postscriptName": "MontaguSlab144pt-SemiBold", + "category": "serif", + "capHeight": 682, + "ascent": 982, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 515, + "subsets": { + "latin": { + "xWidthAvg": 515 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Montagu Slab", + "fullName": "Montagu Slab 144pt Bold", + "postscriptName": "MontaguSlab144pt-Bold", + "category": "serif", + "capHeight": 682, + "ascent": 982, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 526, + "subsets": { + "latin": { + "xWidthAvg": 526 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Montagu Slab", + "fullName": "Montagu Slab 144pt Regular", + "postscriptName": "MontaguSlab144pt-Regular", + "category": "serif", + "capHeight": 682, + "ascent": 982, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "monteCarlo": { + "familyName": "MonteCarlo", + "fullName": "MonteCarlo Regular", + "postscriptName": "MonteCarlo-Regular", + "category": "handwriting", + "capHeight": 750, + "ascent": 1200, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 315, + "xWidthAvg": 297, + "subsets": { + "latin": { + "xWidthAvg": 297 + }, + "thai": { + "xWidthAvg": 175 + } + }, + "variants": { + "regular": { + "familyName": "MonteCarlo", + "fullName": "MonteCarlo Regular", + "postscriptName": "MonteCarlo-Regular", + "category": "handwriting", + "capHeight": 750, + "ascent": 1200, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 315, + "xWidthAvg": 297, + "subsets": { + "latin": { + "xWidthAvg": 297 + }, + "thai": { + "xWidthAvg": 175 + } + } + } + } + }, + "montez": { + "familyName": "Montez", + "fullName": "Montez Regular", + "postscriptName": "Montez-Regular", + "category": "handwriting", + "capHeight": 1456, + "ascent": 1831, + "descent": -848, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 766, + "xWidthAvg": 668, + "subsets": { + "latin": { + "xWidthAvg": 668 + }, + "thai": { + "xWidthAvg": 480 + } + }, + "variants": { + "regular": { + "familyName": "Montez", + "fullName": "Montez Regular", + "postscriptName": "Montez-Regular", + "category": "handwriting", + "capHeight": 1456, + "ascent": 1831, + "descent": -848, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 766, + "xWidthAvg": 668, + "subsets": { + "latin": { + "xWidthAvg": 668 + }, + "thai": { + "xWidthAvg": 480 + } + } + } + } + }, + "montserrat": { + "familyName": "Montserrat", + "fullName": "Montserrat Regular", + "postscriptName": "Montserrat-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 587 + } + }, + "variants": { + "100": { + "familyName": "Montserrat", + "fullName": "Montserrat Thin", + "postscriptName": "Montserrat-Thin", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "200": { + "familyName": "Montserrat", + "fullName": "Montserrat ExtraLight", + "postscriptName": "Montserrat-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "300": { + "familyName": "Montserrat", + "fullName": "Montserrat Light", + "postscriptName": "Montserrat-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 497, + "subsets": { + "latin": { + "xWidthAvg": 497 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "500": { + "familyName": "Montserrat", + "fullName": "Montserrat Medium", + "postscriptName": "Montserrat-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 511, + "subsets": { + "latin": { + "xWidthAvg": 511 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "600": { + "familyName": "Montserrat", + "fullName": "Montserrat SemiBold", + "postscriptName": "Montserrat-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 520, + "subsets": { + "latin": { + "xWidthAvg": 520 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "700": { + "familyName": "Montserrat", + "fullName": "Montserrat Bold", + "postscriptName": "Montserrat-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 538, + "xWidthAvg": 530, + "subsets": { + "latin": { + "xWidthAvg": 530 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "800": { + "familyName": "Montserrat", + "fullName": "Montserrat ExtraBold", + "postscriptName": "Montserrat-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 542, + "xWidthAvg": 540, + "subsets": { + "latin": { + "xWidthAvg": 540 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "900": { + "familyName": "Montserrat", + "fullName": "Montserrat Black", + "postscriptName": "Montserrat-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 547, + "xWidthAvg": 551, + "subsets": { + "latin": { + "xWidthAvg": 551 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "regular": { + "familyName": "Montserrat", + "fullName": "Montserrat Regular", + "postscriptName": "Montserrat-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "italic": { + "familyName": "Montserrat", + "fullName": "Montserrat Italic", + "postscriptName": "Montserrat-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 509, + "subsets": { + "latin": { + "xWidthAvg": 509 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "900italic": { + "familyName": "Montserrat", + "fullName": "Montserrat Black Italic", + "postscriptName": "Montserrat-BlackItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 547, + "xWidthAvg": 554, + "subsets": { + "latin": { + "xWidthAvg": 554 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "800italic": { + "familyName": "Montserrat", + "fullName": "Montserrat ExtraBold Italic", + "postscriptName": "Montserrat-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 542, + "xWidthAvg": 544, + "subsets": { + "latin": { + "xWidthAvg": 544 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "700italic": { + "familyName": "Montserrat", + "fullName": "Montserrat Bold Italic", + "postscriptName": "Montserrat-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 538, + "xWidthAvg": 534, + "subsets": { + "latin": { + "xWidthAvg": 534 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "600italic": { + "familyName": "Montserrat", + "fullName": "Montserrat SemiBold Italic", + "postscriptName": "Montserrat-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "500italic": { + "familyName": "Montserrat", + "fullName": "Montserrat Medium Italic", + "postscriptName": "Montserrat-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 517, + "subsets": { + "latin": { + "xWidthAvg": 517 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "300italic": { + "familyName": "Montserrat", + "fullName": "Montserrat Light Italic", + "postscriptName": "Montserrat-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "200italic": { + "familyName": "Montserrat", + "fullName": "Montserrat ExtraLight Italic", + "postscriptName": "Montserrat-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "100italic": { + "familyName": "Montserrat", + "fullName": "Montserrat Thin Italic", + "postscriptName": "Montserrat-ThinItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 587 + } + } + } + } + }, + "montserratAlternates": { + "familyName": "Montserrat Alternates", + "fullName": "Montserrat Alternates Regular", + "postscriptName": "MontserratAlternates-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 514, + "subsets": { + "latin": { + "xWidthAvg": 514 + }, + "thai": { + "xWidthAvg": 587 + } + }, + "variants": { + "100": { + "familyName": "Montserrat Alternates", + "fullName": "Montserrat Alternates Thin", + "postscriptName": "MontserratAlternates-Thin", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "200": { + "familyName": "Montserrat Alternates", + "fullName": "Montserrat Alternates ExtraLight", + "postscriptName": "MontserratAlternates-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "300": { + "familyName": "Montserrat Alternates", + "fullName": "Montserrat Alternates Light", + "postscriptName": "MontserratAlternates-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 508, + "subsets": { + "latin": { + "xWidthAvg": 508 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "500": { + "familyName": "Montserrat Alternates", + "fullName": "Montserrat Alternates Medium", + "postscriptName": "MontserratAlternates-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 521, + "subsets": { + "latin": { + "xWidthAvg": 521 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "600": { + "familyName": "Montserrat Alternates", + "fullName": "Montserrat Alternates SemiBold", + "postscriptName": "MontserratAlternates-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "700": { + "familyName": "Montserrat Alternates", + "fullName": "Montserrat Alternates Bold", + "postscriptName": "MontserratAlternates-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 538, + "xWidthAvg": 537, + "subsets": { + "latin": { + "xWidthAvg": 537 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "800": { + "familyName": "Montserrat Alternates", + "fullName": "Montserrat Alternates ExtraBold", + "postscriptName": "MontserratAlternates-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 542, + "xWidthAvg": 547, + "subsets": { + "latin": { + "xWidthAvg": 547 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "900": { + "familyName": "Montserrat Alternates", + "fullName": "Montserrat Alternates Black", + "postscriptName": "MontserratAlternates-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 547, + "xWidthAvg": 557, + "subsets": { + "latin": { + "xWidthAvg": 557 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "regular": { + "familyName": "Montserrat Alternates", + "fullName": "Montserrat Alternates Regular", + "postscriptName": "MontserratAlternates-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 514, + "subsets": { + "latin": { + "xWidthAvg": 514 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "italic": { + "familyName": "Montserrat Alternates", + "fullName": "Montserrat Alternates Italic", + "postscriptName": "MontserratAlternates-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 518, + "subsets": { + "latin": { + "xWidthAvg": 518 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "900italic": { + "familyName": "Montserrat Alternates", + "fullName": "Montserrat Alternates Black Italic", + "postscriptName": "MontserratAlternates-BlackItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 547, + "xWidthAvg": 562, + "subsets": { + "latin": { + "xWidthAvg": 562 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "800italic": { + "familyName": "Montserrat Alternates", + "fullName": "Montserrat Alternates ExtraBold Italic", + "postscriptName": "MontserratAlternates-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 542, + "xWidthAvg": 552, + "subsets": { + "latin": { + "xWidthAvg": 552 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "700italic": { + "familyName": "Montserrat Alternates", + "fullName": "Montserrat Alternates Bold Italic", + "postscriptName": "MontserratAlternates-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 538, + "xWidthAvg": 542, + "subsets": { + "latin": { + "xWidthAvg": 542 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "600italic": { + "familyName": "Montserrat Alternates", + "fullName": "Montserrat Alternates SemiBold Italic", + "postscriptName": "MontserratAlternates-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 533, + "subsets": { + "latin": { + "xWidthAvg": 533 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "500italic": { + "familyName": "Montserrat Alternates", + "fullName": "Montserrat Alternates Medium Italic", + "postscriptName": "MontserratAlternates-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "300italic": { + "familyName": "Montserrat Alternates", + "fullName": "Montserrat Alternates Light Italic", + "postscriptName": "MontserratAlternates-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "200italic": { + "familyName": "Montserrat Alternates", + "fullName": "Montserrat Alternates ExtraLight Italic", + "postscriptName": "MontserratAlternates-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 507, + "subsets": { + "latin": { + "xWidthAvg": 507 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "100italic": { + "familyName": "Montserrat Alternates", + "fullName": "Montserrat Alternates Thin Italic", + "postscriptName": "MontserratAlternates-ThinItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 587 + } + } + } + } + }, + "montserratSubrayada": { + "familyName": "Montserrat Subrayada", + "fullName": "MontserratSubrayada-Regular", + "postscriptName": "MontserratSubrayada-Regular", + "category": "sans-serif", + "capHeight": 699, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 699, + "xWidthAvg": 615, + "subsets": { + "latin": { + "xWidthAvg": 615 + }, + "thai": { + "xWidthAvg": 274 + } + }, + "variants": { + "700": { + "familyName": "Montserrat Subrayada", + "fullName": "MontserratSubrayada-Bold", + "postscriptName": "MontserratSubrayada-Bold", + "category": "sans-serif", + "capHeight": 699, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 699, + "xWidthAvg": 612, + "subsets": { + "latin": { + "xWidthAvg": 612 + }, + "thai": { + "xWidthAvg": 264 + } + } + }, + "regular": { + "familyName": "Montserrat Subrayada", + "fullName": "MontserratSubrayada-Regular", + "postscriptName": "MontserratSubrayada-Regular", + "category": "sans-serif", + "capHeight": 699, + "ascent": 968, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 699, + "xWidthAvg": 615, + "subsets": { + "latin": { + "xWidthAvg": 615 + }, + "thai": { + "xWidthAvg": 274 + } + } + } + } + }, + "mooLahLah": { + "familyName": "Moo Lah Lah", + "fullName": "Moo Lah Lah Regular", + "postscriptName": "MooLahLah-Regular", + "category": "display", + "capHeight": 650, + "ascent": 920, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 565, + "xWidthAvg": 415, + "subsets": { + "latin": { + "xWidthAvg": 415 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Moo Lah Lah", + "fullName": "Moo Lah Lah Regular", + "postscriptName": "MooLahLah-Regular", + "category": "display", + "capHeight": 650, + "ascent": 920, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 565, + "xWidthAvg": 415, + "subsets": { + "latin": { + "xWidthAvg": 415 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "mooli": { + "familyName": "Mooli", + "fullName": "Mooli Regular", + "postscriptName": "Mooli-Regular", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1928, + "descent": -472, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1026, + "xWidthAvg": 970, + "subsets": { + "latin": { + "xWidthAvg": 970 + }, + "thai": { + "xWidthAvg": 1431 + } + }, + "variants": { + "regular": { + "familyName": "Mooli", + "fullName": "Mooli Regular", + "postscriptName": "Mooli-Regular", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1928, + "descent": -472, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1026, + "xWidthAvg": 970, + "subsets": { + "latin": { + "xWidthAvg": 970 + }, + "thai": { + "xWidthAvg": 1431 + } + } + } + } + }, + "moonDance": { + "familyName": "Moon Dance", + "fullName": "Moon Dance Regular", + "postscriptName": "MoonDance-Regular", + "category": "handwriting", + "capHeight": 605, + "ascent": 970, + "descent": -370, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 350, + "xWidthAvg": 306, + "subsets": { + "latin": { + "xWidthAvg": 306 + }, + "thai": { + "xWidthAvg": 484 + } + }, + "variants": { + "regular": { + "familyName": "Moon Dance", + "fullName": "Moon Dance Regular", + "postscriptName": "MoonDance-Regular", + "category": "handwriting", + "capHeight": 605, + "ascent": 970, + "descent": -370, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 350, + "xWidthAvg": 306, + "subsets": { + "latin": { + "xWidthAvg": 306 + }, + "thai": { + "xWidthAvg": 484 + } + } + } + } + }, + "moul": { + "familyName": "Moul", + "fullName": "Moul Regular", + "postscriptName": "Moul-Regular", + "category": "display", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 1180, + "subsets": { + "latin": { + "xWidthAvg": 1180 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Moul", + "fullName": "Moul Regular", + "postscriptName": "Moul-Regular", + "category": "display", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 1180, + "subsets": { + "latin": { + "xWidthAvg": 1180 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "moulpali": { + "familyName": "Moulpali", + "fullName": "Moulpali Regular", + "postscriptName": "Moulpali-Regular", + "category": "sans-serif", + "capHeight": 1462, + "ascent": 2900, + "descent": -1600, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 827, + "subsets": { + "latin": { + "xWidthAvg": 827 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Moulpali", + "fullName": "Moulpali Regular", + "postscriptName": "Moulpali-Regular", + "category": "sans-serif", + "capHeight": 1462, + "ascent": 2900, + "descent": -1600, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 827, + "subsets": { + "latin": { + "xWidthAvg": 827 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "mountainsOfChristmas": { + "familyName": "Mountains of Christmas", + "fullName": "Mountains of Christmas Regular", + "postscriptName": "MountainsofChristmas-Regular", + "category": "display", + "capHeight": 743, + "ascent": 1066, + "descent": -354, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 515, + "xWidthAvg": 366, + "subsets": { + "latin": { + "xWidthAvg": 366 + }, + "thai": { + "xWidthAvg": 307 + } + }, + "variants": { + "700": { + "familyName": "Mountains of Christmas", + "fullName": "Mountains of Christmas Bold", + "postscriptName": "MountainsofChristmas-Bold", + "category": "display", + "capHeight": 744, + "ascent": 1066, + "descent": -354, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 559, + "xWidthAvg": 385, + "subsets": { + "latin": { + "xWidthAvg": 385 + }, + "thai": { + "xWidthAvg": 317 + } + } + }, + "regular": { + "familyName": "Mountains of Christmas", + "fullName": "Mountains of Christmas Regular", + "postscriptName": "MountainsofChristmas-Regular", + "category": "display", + "capHeight": 743, + "ascent": 1066, + "descent": -354, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 515, + "xWidthAvg": 366, + "subsets": { + "latin": { + "xWidthAvg": 366 + }, + "thai": { + "xWidthAvg": 307 + } + } + } + } + }, + "mouseMemoirs": { + "familyName": "Mouse Memoirs", + "fullName": "Mouse Memoirs", + "postscriptName": "MouseMemoirs-Regular", + "category": "sans-serif", + "capHeight": 1448, + "ascent": 1917, + "descent": -428, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1044, + "xWidthAvg": 596, + "subsets": { + "latin": { + "xWidthAvg": 596 + }, + "thai": { + "xWidthAvg": 338 + } + }, + "variants": { + "regular": { + "familyName": "Mouse Memoirs", + "fullName": "Mouse Memoirs", + "postscriptName": "MouseMemoirs-Regular", + "category": "sans-serif", + "capHeight": 1448, + "ascent": 1917, + "descent": -428, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1044, + "xWidthAvg": 596, + "subsets": { + "latin": { + "xWidthAvg": 596 + }, + "thai": { + "xWidthAvg": 338 + } + } + } + } + }, + "mrBedfort": { + "familyName": "Mr Bedfort", + "fullName": "Mr Bedfort", + "postscriptName": "MrBedfort-Regular", + "category": "handwriting", + "capHeight": 770, + "ascent": 1015, + "descent": -661, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 245, + "xWidthAvg": 386, + "subsets": { + "latin": { + "xWidthAvg": 386 + }, + "thai": { + "xWidthAvg": 250 + } + }, + "variants": { + "regular": { + "familyName": "Mr Bedfort", + "fullName": "Mr Bedfort", + "postscriptName": "MrBedfort-Regular", + "category": "handwriting", + "capHeight": 770, + "ascent": 1015, + "descent": -661, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 245, + "xWidthAvg": 386, + "subsets": { + "latin": { + "xWidthAvg": 386 + }, + "thai": { + "xWidthAvg": 250 + } + } + } + } + }, + "mrDafoe": { + "familyName": "Mr Dafoe", + "fullName": "Mr Dafoe Regular", + "postscriptName": "MrDafoe-Regular", + "category": "handwriting", + "capHeight": 622, + "ascent": 981, + "descent": -416, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 313, + "xWidthAvg": 361, + "subsets": { + "latin": { + "xWidthAvg": 361 + }, + "thai": { + "xWidthAvg": 250 + } + }, + "variants": { + "regular": { + "familyName": "Mr Dafoe", + "fullName": "Mr Dafoe Regular", + "postscriptName": "MrDafoe-Regular", + "category": "handwriting", + "capHeight": 622, + "ascent": 981, + "descent": -416, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 313, + "xWidthAvg": 361, + "subsets": { + "latin": { + "xWidthAvg": 361 + }, + "thai": { + "xWidthAvg": 250 + } + } + } + } + }, + "mrDeHaviland": { + "familyName": "Mr De Haviland", + "fullName": "Mr De Haviland Regular", + "postscriptName": "MrDeHaviland-Regular", + "category": "handwriting", + "capHeight": 557, + "ascent": 875, + "descent": -442, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 217, + "xWidthAvg": 254, + "subsets": { + "latin": { + "xWidthAvg": 254 + }, + "thai": { + "xWidthAvg": 175 + } + }, + "variants": { + "regular": { + "familyName": "Mr De Haviland", + "fullName": "Mr De Haviland Regular", + "postscriptName": "MrDeHaviland-Regular", + "category": "handwriting", + "capHeight": 557, + "ascent": 875, + "descent": -442, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 217, + "xWidthAvg": 254, + "subsets": { + "latin": { + "xWidthAvg": 254 + }, + "thai": { + "xWidthAvg": 175 + } + } + } + } + }, + "mrsSaintDelafield": { + "familyName": "Mrs Saint Delafield", + "fullName": "Mrs Saint Delafield", + "postscriptName": "MrsSaintDelafield-Regular", + "category": "handwriting", + "capHeight": 708, + "ascent": 906, + "descent": -619, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 224, + "xWidthAvg": 275, + "subsets": { + "latin": { + "xWidthAvg": 275 + }, + "thai": { + "xWidthAvg": 200 + } + }, + "variants": { + "regular": { + "familyName": "Mrs Saint Delafield", + "fullName": "Mrs Saint Delafield", + "postscriptName": "MrsSaintDelafield-Regular", + "category": "handwriting", + "capHeight": 708, + "ascent": 906, + "descent": -619, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 224, + "xWidthAvg": 275, + "subsets": { + "latin": { + "xWidthAvg": 275 + }, + "thai": { + "xWidthAvg": 200 + } + } + } + } + }, + "mrsSheppards": { + "familyName": "Mrs Sheppards", + "fullName": "Mrs Sheppards Regular", + "postscriptName": "MrsSheppards-Regular", + "category": "handwriting", + "capHeight": 662, + "ascent": 959, + "descent": -378, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 285, + "xWidthAvg": 356, + "subsets": { + "latin": { + "xWidthAvg": 356 + }, + "thai": { + "xWidthAvg": 250 + } + }, + "variants": { + "regular": { + "familyName": "Mrs Sheppards", + "fullName": "Mrs Sheppards Regular", + "postscriptName": "MrsSheppards-Regular", + "category": "handwriting", + "capHeight": 662, + "ascent": 959, + "descent": -378, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 285, + "xWidthAvg": 356, + "subsets": { + "latin": { + "xWidthAvg": 356 + }, + "thai": { + "xWidthAvg": 250 + } + } + } + } + }, + "msMadi": { + "familyName": "Ms Madi", + "fullName": "Ms Madi Regular", + "postscriptName": "MsMadi-Regular", + "category": "handwriting", + "capHeight": 640, + "ascent": 900, + "descent": -420, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 335, + "xWidthAvg": 321, + "subsets": { + "latin": { + "xWidthAvg": 321 + }, + "thai": { + "xWidthAvg": 474 + } + }, + "variants": { + "regular": { + "familyName": "Ms Madi", + "fullName": "Ms Madi Regular", + "postscriptName": "MsMadi-Regular", + "category": "handwriting", + "capHeight": 640, + "ascent": 900, + "descent": -420, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 335, + "xWidthAvg": 321, + "subsets": { + "latin": { + "xWidthAvg": 321 + }, + "thai": { + "xWidthAvg": 474 + } + } + } + } + }, + "mukta": { + "familyName": "Mukta", + "fullName": "Mukta Regular", + "postscriptName": "Mukta-Regular", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 420, + "subsets": { + "latin": { + "xWidthAvg": 420 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "200": { + "familyName": "Mukta", + "fullName": "Mukta ExtraLight", + "postscriptName": "Mukta-ExtraLight", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 397, + "subsets": { + "latin": { + "xWidthAvg": 397 + }, + "thai": { + "xWidthAvg": 480 + } + } + }, + "300": { + "familyName": "Mukta", + "fullName": "Mukta Light", + "postscriptName": "Mukta-Light", + "category": "sans-serif", + "capHeight": 629, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 467, + "xWidthAvg": 409, + "subsets": { + "latin": { + "xWidthAvg": 409 + }, + "thai": { + "xWidthAvg": 490 + } + } + }, + "500": { + "familyName": "Mukta", + "fullName": "Mukta Medium", + "postscriptName": "Mukta-Medium", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 506 + } + } + }, + "600": { + "familyName": "Mukta", + "fullName": "Mukta SemiBold", + "postscriptName": "Mukta-SemiBold", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "700": { + "familyName": "Mukta", + "fullName": "Mukta Bold", + "postscriptName": "Mukta-Bold", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 476, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 518 + } + } + }, + "800": { + "familyName": "Mukta", + "fullName": "Mukta ExtraBold", + "postscriptName": "Mukta-ExtraBold", + "category": "sans-serif", + "capHeight": 631, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 449, + "subsets": { + "latin": { + "xWidthAvg": 449 + }, + "thai": { + "xWidthAvg": 524 + } + } + }, + "regular": { + "familyName": "Mukta", + "fullName": "Mukta Regular", + "postscriptName": "Mukta-Regular", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 420, + "subsets": { + "latin": { + "xWidthAvg": 420 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "muktaMahee": { + "familyName": "Mukta Mahee", + "fullName": "Mukta Mahee Regular", + "postscriptName": "MuktaMahee-Regular", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "200": { + "familyName": "Mukta Mahee", + "fullName": "Mukta Mahee ExtraLight", + "postscriptName": "MuktaMahee-ExtraLight", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 397, + "subsets": { + "latin": { + "xWidthAvg": 397 + }, + "thai": { + "xWidthAvg": 480 + } + } + }, + "300": { + "familyName": "Mukta Mahee", + "fullName": "Mukta Mahee Light", + "postscriptName": "MuktaMahee-Light", + "category": "sans-serif", + "capHeight": 629, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 467, + "xWidthAvg": 408, + "subsets": { + "latin": { + "xWidthAvg": 408 + }, + "thai": { + "xWidthAvg": 490 + } + } + }, + "500": { + "familyName": "Mukta Mahee", + "fullName": "Mukta Mahee Medium", + "postscriptName": "MuktaMahee-Medium", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 506 + } + } + }, + "600": { + "familyName": "Mukta Mahee", + "fullName": "Mukta Mahee SemiBold", + "postscriptName": "MuktaMahee-SemiBold", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "700": { + "familyName": "Mukta Mahee", + "fullName": "Mukta Mahee Bold", + "postscriptName": "MuktaMahee-Bold", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 476, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 518 + } + } + }, + "800": { + "familyName": "Mukta Mahee", + "fullName": "Mukta Mahee ExtraBold", + "postscriptName": "MuktaMahee-ExtraBold", + "category": "sans-serif", + "capHeight": 631, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 524 + } + } + }, + "regular": { + "familyName": "Mukta Mahee", + "fullName": "Mukta Mahee Regular", + "postscriptName": "MuktaMahee-Regular", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "muktaMalar": { + "familyName": "Mukta Malar", + "fullName": "Mukta Malar Regular", + "postscriptName": "MuktaMalar-Regular", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "200": { + "familyName": "Mukta Malar", + "fullName": "Mukta Malar ExtraLight", + "postscriptName": "MuktaMalar-ExtraLight", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 404, + "subsets": { + "latin": { + "xWidthAvg": 404 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "300": { + "familyName": "Mukta Malar", + "fullName": "Mukta Malar Light", + "postscriptName": "MuktaMalar-Light", + "category": "sans-serif", + "capHeight": 629, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 467, + "xWidthAvg": 415, + "subsets": { + "latin": { + "xWidthAvg": 415 + }, + "thai": { + "xWidthAvg": 490 + } + } + }, + "500": { + "familyName": "Mukta Malar", + "fullName": "Mukta Malar Medium", + "postscriptName": "MuktaMalar-Medium", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 506 + } + } + }, + "600": { + "familyName": "Mukta Malar", + "fullName": "Mukta Malar SemiBold", + "postscriptName": "MuktaMalar-SemiBold", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "700": { + "familyName": "Mukta Malar", + "fullName": "Mukta Malar Bold", + "postscriptName": "MuktaMalar-Bold", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 476, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 518 + } + } + }, + "800": { + "familyName": "Mukta Malar", + "fullName": "Mukta Malar ExtraBold", + "postscriptName": "MuktaMalar-ExtraBold", + "category": "sans-serif", + "capHeight": 631, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 524 + } + } + }, + "regular": { + "familyName": "Mukta Malar", + "fullName": "Mukta Malar Regular", + "postscriptName": "MuktaMalar-Regular", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "muktaVaani": { + "familyName": "Mukta Vaani", + "fullName": "Mukta Vaani Regular", + "postscriptName": "MuktaVaani-Regular", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 420, + "subsets": { + "latin": { + "xWidthAvg": 420 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "200": { + "familyName": "Mukta Vaani", + "fullName": "Mukta Vaani ExtraLight", + "postscriptName": "MuktaVaani-ExtraLight", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 397, + "subsets": { + "latin": { + "xWidthAvg": 397 + }, + "thai": { + "xWidthAvg": 480 + } + } + }, + "300": { + "familyName": "Mukta Vaani", + "fullName": "Mukta Vaani Light", + "postscriptName": "MuktaVaani-Light", + "category": "sans-serif", + "capHeight": 629, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 467, + "xWidthAvg": 409, + "subsets": { + "latin": { + "xWidthAvg": 409 + }, + "thai": { + "xWidthAvg": 490 + } + } + }, + "500": { + "familyName": "Mukta Vaani", + "fullName": "Mukta Vaani Medium", + "postscriptName": "MuktaVaani-Medium", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 506 + } + } + }, + "600": { + "familyName": "Mukta Vaani", + "fullName": "Mukta Vaani SemiBold", + "postscriptName": "MuktaVaani-SemiBold", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "700": { + "familyName": "Mukta Vaani", + "fullName": "Mukta Vaani Bold", + "postscriptName": "MuktaVaani-Bold", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 476, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 518 + } + } + }, + "800": { + "familyName": "Mukta Vaani", + "fullName": "Mukta Vaani ExtraBold", + "postscriptName": "MuktaVaani-ExtraBold", + "category": "sans-serif", + "capHeight": 631, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 449, + "subsets": { + "latin": { + "xWidthAvg": 449 + }, + "thai": { + "xWidthAvg": 524 + } + } + }, + "regular": { + "familyName": "Mukta Vaani", + "fullName": "Mukta Vaani Regular", + "postscriptName": "MuktaVaani-Regular", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1130, + "descent": -532, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 420, + "subsets": { + "latin": { + "xWidthAvg": 420 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "mulish": { + "familyName": "Mulish", + "fullName": "Mulish Regular", + "postscriptName": "Mulish-Regular", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "200": { + "familyName": "Mulish", + "fullName": "Mulish ExtraLight", + "postscriptName": "Mulish-ExtraLight", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 449, + "subsets": { + "latin": { + "xWidthAvg": 449 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Mulish", + "fullName": "Mulish Light", + "postscriptName": "Mulish-Light", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Mulish", + "fullName": "Mulish Medium", + "postscriptName": "Mulish-Medium", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Mulish", + "fullName": "Mulish SemiBold", + "postscriptName": "Mulish-SemiBold", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Mulish", + "fullName": "Mulish Bold", + "postscriptName": "Mulish-Bold", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Mulish", + "fullName": "Mulish ExtraBold", + "postscriptName": "Mulish-ExtraBold", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "Mulish", + "fullName": "Mulish Black", + "postscriptName": "Mulish-Black", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Mulish", + "fullName": "Mulish Regular", + "postscriptName": "Mulish-Regular", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Mulish", + "fullName": "Mulish Italic", + "postscriptName": "Mulish-Italic", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900italic": { + "familyName": "Mulish", + "fullName": "Mulish Black Italic", + "postscriptName": "Mulish-BlackItalic", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800italic": { + "familyName": "Mulish", + "fullName": "Mulish ExtraBold Italic", + "postscriptName": "Mulish-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700italic": { + "familyName": "Mulish", + "fullName": "Mulish Bold Italic", + "postscriptName": "Mulish-BoldItalic", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600italic": { + "familyName": "Mulish", + "fullName": "Mulish SemiBold Italic", + "postscriptName": "Mulish-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500italic": { + "familyName": "Mulish", + "fullName": "Mulish Medium Italic", + "postscriptName": "Mulish-MediumItalic", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300italic": { + "familyName": "Mulish", + "fullName": "Mulish Light Italic", + "postscriptName": "Mulish-LightItalic", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200italic": { + "familyName": "Mulish", + "fullName": "Mulish ExtraLight Italic", + "postscriptName": "Mulish-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1005, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 449, + "subsets": { + "latin": { + "xWidthAvg": 449 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "murecho": { + "familyName": "Murecho", + "fullName": "Murecho Regular", + "postscriptName": "Murecho-Regular", + "category": "sans-serif", + "capHeight": 728, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 436, + "subsets": { + "latin": { + "xWidthAvg": 436 + }, + "thai": { + "xWidthAvg": 344 + } + }, + "variants": { + "100": { + "familyName": "Murecho", + "fullName": "Murecho Thin", + "postscriptName": "Murecho-Thin", + "category": "sans-serif", + "capHeight": 728, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 409, + "subsets": { + "latin": { + "xWidthAvg": 409 + }, + "thai": { + "xWidthAvg": 340 + } + } + }, + "200": { + "familyName": "Murecho", + "fullName": "Murecho ExtraLight", + "postscriptName": "Murecho-ExtraLight", + "category": "sans-serif", + "capHeight": 728, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 414, + "subsets": { + "latin": { + "xWidthAvg": 414 + }, + "thai": { + "xWidthAvg": 341 + } + } + }, + "300": { + "familyName": "Murecho", + "fullName": "Murecho Light", + "postscriptName": "Murecho-Light", + "category": "sans-serif", + "capHeight": 728, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 343 + } + } + }, + "500": { + "familyName": "Murecho", + "fullName": "Murecho Medium", + "postscriptName": "Murecho-Medium", + "category": "sans-serif", + "capHeight": 728, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 346 + } + } + }, + "600": { + "familyName": "Murecho", + "fullName": "Murecho SemiBold", + "postscriptName": "Murecho-SemiBold", + "category": "sans-serif", + "capHeight": 728, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 347 + } + } + }, + "700": { + "familyName": "Murecho", + "fullName": "Murecho Bold", + "postscriptName": "Murecho-Bold", + "category": "sans-serif", + "capHeight": 728, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 348 + } + } + }, + "800": { + "familyName": "Murecho", + "fullName": "Murecho ExtraBold", + "postscriptName": "Murecho-ExtraBold", + "category": "sans-serif", + "capHeight": 728, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 349 + } + } + }, + "900": { + "familyName": "Murecho", + "fullName": "Murecho Black", + "postscriptName": "Murecho-Black", + "category": "sans-serif", + "capHeight": 728, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 350 + } + } + }, + "regular": { + "familyName": "Murecho", + "fullName": "Murecho Regular", + "postscriptName": "Murecho-Regular", + "category": "sans-serif", + "capHeight": 728, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 436, + "subsets": { + "latin": { + "xWidthAvg": 436 + }, + "thai": { + "xWidthAvg": 344 + } + } + } + } + }, + "museoModerno": { + "familyName": "MuseoModerno", + "fullName": "MuseoModerno Regular", + "postscriptName": "MuseoModerno-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1145, + "descent": -445, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "100": { + "familyName": "MuseoModerno", + "fullName": "MuseoModerno Thin", + "postscriptName": "MuseoModerno-Thin", + "category": "display", + "capHeight": 700, + "ascent": 1145, + "descent": -445, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200": { + "familyName": "MuseoModerno", + "fullName": "MuseoModerno ExtraLight", + "postscriptName": "MuseoModerno-ExtraLight", + "category": "display", + "capHeight": 700, + "ascent": 1145, + "descent": -445, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "MuseoModerno", + "fullName": "MuseoModerno Light", + "postscriptName": "MuseoModerno-Light", + "category": "display", + "capHeight": 700, + "ascent": 1145, + "descent": -445, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "MuseoModerno", + "fullName": "MuseoModerno Medium", + "postscriptName": "MuseoModerno-Medium", + "category": "display", + "capHeight": 700, + "ascent": 1145, + "descent": -445, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 491, + "subsets": { + "latin": { + "xWidthAvg": 491 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "MuseoModerno", + "fullName": "MuseoModerno SemiBold", + "postscriptName": "MuseoModerno-SemiBold", + "category": "display", + "capHeight": 700, + "ascent": 1145, + "descent": -445, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "MuseoModerno", + "fullName": "MuseoModerno Bold", + "postscriptName": "MuseoModerno-Bold", + "category": "display", + "capHeight": 700, + "ascent": 1145, + "descent": -445, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 497, + "subsets": { + "latin": { + "xWidthAvg": 497 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "MuseoModerno", + "fullName": "MuseoModerno ExtraBold", + "postscriptName": "MuseoModerno-ExtraBold", + "category": "display", + "capHeight": 700, + "ascent": 1145, + "descent": -445, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "MuseoModerno", + "fullName": "MuseoModerno Black", + "postscriptName": "MuseoModerno-Black", + "category": "display", + "capHeight": 700, + "ascent": 1145, + "descent": -445, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "MuseoModerno", + "fullName": "MuseoModerno Regular", + "postscriptName": "MuseoModerno-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1145, + "descent": -445, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "MuseoModerno", + "fullName": "MuseoModerno Italic", + "postscriptName": "MuseoModerno-Italic", + "category": "display", + "capHeight": 700, + "ascent": 1145, + "descent": -445, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900italic": { + "familyName": "MuseoModerno", + "fullName": "MuseoModerno Black Italic", + "postscriptName": "MuseoModerno-BlackItalic", + "category": "display", + "capHeight": 700, + "ascent": 1145, + "descent": -445, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800italic": { + "familyName": "MuseoModerno", + "fullName": "MuseoModerno ExtraBold Italic", + "postscriptName": "MuseoModerno-ExtraBoldItalic", + "category": "display", + "capHeight": 700, + "ascent": 1145, + "descent": -445, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700italic": { + "familyName": "MuseoModerno", + "fullName": "MuseoModerno Bold Italic", + "postscriptName": "MuseoModerno-BoldItalic", + "category": "display", + "capHeight": 700, + "ascent": 1145, + "descent": -445, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 499, + "subsets": { + "latin": { + "xWidthAvg": 499 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600italic": { + "familyName": "MuseoModerno", + "fullName": "MuseoModerno SemiBold Italic", + "postscriptName": "MuseoModerno-SemiBoldItalic", + "category": "display", + "capHeight": 700, + "ascent": 1145, + "descent": -445, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500italic": { + "familyName": "MuseoModerno", + "fullName": "MuseoModerno Medium Italic", + "postscriptName": "MuseoModerno-MediumItalic", + "category": "display", + "capHeight": 700, + "ascent": 1145, + "descent": -445, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300italic": { + "familyName": "MuseoModerno", + "fullName": "MuseoModerno Light Italic", + "postscriptName": "MuseoModerno-LightItalic", + "category": "display", + "capHeight": 700, + "ascent": 1145, + "descent": -445, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 491, + "subsets": { + "latin": { + "xWidthAvg": 491 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200italic": { + "familyName": "MuseoModerno", + "fullName": "MuseoModerno ExtraLight Italic", + "postscriptName": "MuseoModerno-ExtraLightItalic", + "category": "display", + "capHeight": 700, + "ascent": 1145, + "descent": -445, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "100italic": { + "familyName": "MuseoModerno", + "fullName": "MuseoModerno Thin Italic", + "postscriptName": "MuseoModerno-ThinItalic", + "category": "display", + "capHeight": 700, + "ascent": 1145, + "descent": -445, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "mySoul": { + "familyName": "My Soul", + "fullName": "My Soul Regular", + "postscriptName": "MySoul-Regular", + "category": "handwriting", + "capHeight": 760, + "ascent": 975, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 360, + "xWidthAvg": 360, + "subsets": { + "latin": { + "xWidthAvg": 360 + }, + "thai": { + "xWidthAvg": 437 + } + }, + "variants": { + "regular": { + "familyName": "My Soul", + "fullName": "My Soul Regular", + "postscriptName": "MySoul-Regular", + "category": "handwriting", + "capHeight": 760, + "ascent": 975, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 360, + "xWidthAvg": 360, + "subsets": { + "latin": { + "xWidthAvg": 360 + }, + "thai": { + "xWidthAvg": 437 + } + } + } + } + }, + "mynerve": { + "familyName": "Mynerve", + "fullName": "Mynerve Regular", + "postscriptName": "Mynerve-Regular", + "category": "handwriting", + "capHeight": 670, + "ascent": 930, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 420, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 559 + } + }, + "variants": { + "regular": { + "familyName": "Mynerve", + "fullName": "Mynerve Regular", + "postscriptName": "Mynerve-Regular", + "category": "handwriting", + "capHeight": 670, + "ascent": 930, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 420, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 559 + } + } + } + } + }, + "mysteryQuest": { + "familyName": "Mystery Quest", + "fullName": "Mystery Quest", + "postscriptName": "MysteryQuest", + "category": "display", + "capHeight": 769, + "ascent": 989, + "descent": -409, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 626, + "xWidthAvg": 432, + "subsets": { + "latin": { + "xWidthAvg": 432 + }, + "thai": { + "xWidthAvg": 307 + } + }, + "variants": { + "regular": { + "familyName": "Mystery Quest", + "fullName": "Mystery Quest", + "postscriptName": "MysteryQuest", + "category": "display", + "capHeight": 769, + "ascent": 989, + "descent": -409, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 626, + "xWidthAvg": 432, + "subsets": { + "latin": { + "xWidthAvg": 432 + }, + "thai": { + "xWidthAvg": 307 + } + } + } + } + }, + "nTR": { + "familyName": "NTR", + "fullName": "NTR", + "postscriptName": "NTR", + "category": "sans-serif", + "capHeight": 572, + "ascent": 1294, + "descent": -877, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 422, + "xWidthAvg": 394, + "subsets": { + "latin": { + "xWidthAvg": 394 + }, + "thai": { + "xWidthAvg": 891 + } + }, + "variants": { + "regular": { + "familyName": "NTR", + "fullName": "NTR", + "postscriptName": "NTR", + "category": "sans-serif", + "capHeight": 572, + "ascent": 1294, + "descent": -877, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 422, + "xWidthAvg": 394, + "subsets": { + "latin": { + "xWidthAvg": 394 + }, + "thai": { + "xWidthAvg": 891 + } + } + } + } + }, + "nabla": { + "familyName": "Nabla", + "fullName": "Nabla Regular", + "postscriptName": "Nabla-Regular", + "category": "display", + "capHeight": 600, + "ascent": 1263, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 606 + } + }, + "variants": { + "regular": { + "familyName": "Nabla", + "fullName": "Nabla Regular", + "postscriptName": "Nabla-Regular", + "category": "display", + "capHeight": 600, + "ascent": 1263, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 606 + } + } + } + } + }, + "namdhinggo": { + "familyName": "Namdhinggo", + "fullName": "Namdhinggo", + "postscriptName": "Namdhinggo-Regular", + "category": "serif", + "capHeight": 1150, + "ascent": 1600, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 500, + "xWidthAvg": 851, + "subsets": { + "latin": { + "xWidthAvg": 851 + }, + "thai": { + "xWidthAvg": 960 + } + }, + "variants": { + "500": { + "familyName": "Namdhinggo", + "fullName": "Namdhinggo Medium", + "postscriptName": "Namdhinggo-Medium", + "category": "serif", + "capHeight": 1150, + "ascent": 1600, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 500, + "xWidthAvg": 864, + "subsets": { + "latin": { + "xWidthAvg": 864 + }, + "thai": { + "xWidthAvg": 960 + } + } + }, + "600": { + "familyName": "Namdhinggo", + "fullName": "Namdhinggo SemiBold", + "postscriptName": "Namdhinggo-SemiBold", + "category": "serif", + "capHeight": 1150, + "ascent": 1600, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 500, + "xWidthAvg": 876, + "subsets": { + "latin": { + "xWidthAvg": 876 + }, + "thai": { + "xWidthAvg": 960 + } + } + }, + "700": { + "familyName": "Namdhinggo", + "fullName": "Namdhinggo Bold", + "postscriptName": "Namdhinggo-Bold", + "category": "serif", + "capHeight": 1150, + "ascent": 1600, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 500, + "xWidthAvg": 894, + "subsets": { + "latin": { + "xWidthAvg": 894 + }, + "thai": { + "xWidthAvg": 960 + } + } + }, + "800": { + "familyName": "Namdhinggo", + "fullName": "Namdhinggo ExtraBold", + "postscriptName": "Namdhinggo-ExtraBold", + "category": "serif", + "capHeight": 1150, + "ascent": 1600, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 500, + "xWidthAvg": 901, + "subsets": { + "latin": { + "xWidthAvg": 901 + }, + "thai": { + "xWidthAvg": 960 + } + } + }, + "regular": { + "familyName": "Namdhinggo", + "fullName": "Namdhinggo", + "postscriptName": "Namdhinggo-Regular", + "category": "serif", + "capHeight": 1150, + "ascent": 1600, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 500, + "xWidthAvg": 851, + "subsets": { + "latin": { + "xWidthAvg": 851 + }, + "thai": { + "xWidthAvg": 960 + } + } + } + } + }, + "nanumBrushScript": { + "familyName": "Nanum Brush Script", + "fullName": "Nanum Brush Script", + "postscriptName": "NanumBrush", + "category": "handwriting", + "capHeight": 460, + "ascent": 630, + "descent": -370, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 300, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 940 + } + }, + "variants": { + "regular": { + "familyName": "Nanum Brush Script", + "fullName": "Nanum Brush Script", + "postscriptName": "NanumBrush", + "category": "handwriting", + "capHeight": 460, + "ascent": 630, + "descent": -370, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 300, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 940 + } + } + } + } + }, + "nanumGothic": { + "familyName": "Nanum Gothic", + "fullName": "NanumGothic", + "postscriptName": "NanumGothic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 920, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 940 + } + }, + "variants": { + "700": { + "familyName": "Nanum Gothic", + "fullName": "NanumGothicBold", + "postscriptName": "NanumGothicBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 920, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 940 + } + } + }, + "800": { + "familyName": "Nanum Gothic", + "fullName": "NanumGothicExtraBold", + "postscriptName": "NanumGothicExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 920, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 940 + } + } + }, + "regular": { + "familyName": "Nanum Gothic", + "fullName": "NanumGothic", + "postscriptName": "NanumGothic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 920, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 940 + } + } + } + } + }, + "nanumGothicCoding": { + "familyName": "Nanum Gothic Coding", + "fullName": "NanumGothicCoding", + "postscriptName": "NanumGothicCoding", + "category": "handwriting", + "capHeight": 699, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "700": { + "familyName": "Nanum Gothic Coding", + "fullName": "NanumGothicCoding-Bold", + "postscriptName": "NanumGothicCoding-Bold", + "category": "handwriting", + "capHeight": 704, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 503, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Nanum Gothic Coding", + "fullName": "NanumGothicCoding", + "postscriptName": "NanumGothicCoding", + "category": "handwriting", + "capHeight": 699, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "nanumMyeongjo": { + "familyName": "Nanum Myeongjo", + "fullName": "NanumMyeongjo", + "postscriptName": "NanumMyeongjo", + "category": "serif", + "capHeight": 755, + "ascent": 942, + "descent": -236, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 480, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "700": { + "familyName": "Nanum Myeongjo", + "fullName": "NanumMyeongjoBold", + "postscriptName": "NanumMyeongjoBold", + "category": "serif", + "capHeight": 758, + "ascent": 942, + "descent": -236, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 486, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "800": { + "familyName": "Nanum Myeongjo", + "fullName": "NanumMyeongjoExtraBold", + "postscriptName": "NanumMyeongjoExtraBold", + "category": "serif", + "capHeight": 758, + "ascent": 942, + "descent": -236, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 486, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "regular": { + "familyName": "Nanum Myeongjo", + "fullName": "NanumMyeongjo", + "postscriptName": "NanumMyeongjo", + "category": "serif", + "capHeight": 755, + "ascent": 942, + "descent": -236, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 480, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "nanumPenScript": { + "familyName": "Nanum Pen Script", + "fullName": "Nanum Pen", + "postscriptName": "NanumPen", + "category": "handwriting", + "capHeight": 674, + "ascent": 920, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 476, + "xWidthAvg": 354, + "subsets": { + "latin": { + "xWidthAvg": 354 + }, + "thai": { + "xWidthAvg": 940 + } + }, + "variants": { + "regular": { + "familyName": "Nanum Pen Script", + "fullName": "Nanum Pen", + "postscriptName": "NanumPen", + "category": "handwriting", + "capHeight": 674, + "ascent": 920, + "descent": -230, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 476, + "xWidthAvg": 354, + "subsets": { + "latin": { + "xWidthAvg": 354 + }, + "thai": { + "xWidthAvg": 940 + } + } + } + } + }, + "narnoor": { + "familyName": "Narnoor", + "fullName": "Narnoor", + "postscriptName": "Narnoor-Regular", + "category": "serif", + "capHeight": 735, + "ascent": 1314, + "descent": -237, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 509 + } + }, + "variants": { + "500": { + "familyName": "Narnoor", + "fullName": "Narnoor Medium", + "postscriptName": "Narnoor-Medium", + "category": "serif", + "capHeight": 735, + "ascent": 1314, + "descent": -237, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 509 + } + } + }, + "600": { + "familyName": "Narnoor", + "fullName": "Narnoor SemiBold", + "postscriptName": "Narnoor-SemiBold", + "category": "serif", + "capHeight": 735, + "ascent": 1314, + "descent": -237, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 509 + } + } + }, + "700": { + "familyName": "Narnoor", + "fullName": "Narnoor Bold", + "postscriptName": "Narnoor-Bold", + "category": "serif", + "capHeight": 735, + "ascent": 1314, + "descent": -237, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 509 + } + } + }, + "800": { + "familyName": "Narnoor", + "fullName": "Narnoor ExtraBold", + "postscriptName": "Narnoor-ExtraBold", + "category": "serif", + "capHeight": 735, + "ascent": 1314, + "descent": -237, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 509 + } + } + }, + "regular": { + "familyName": "Narnoor", + "fullName": "Narnoor", + "postscriptName": "Narnoor-Regular", + "category": "serif", + "capHeight": 735, + "ascent": 1314, + "descent": -237, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 509 + } + } + } + } + }, + "neonderthaw": { + "familyName": "Neonderthaw", + "fullName": "Neonderthaw Regular", + "postscriptName": "Neonderthaw-Regular", + "category": "handwriting", + "capHeight": 750, + "ascent": 1050, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 350, + "xWidthAvg": 394, + "subsets": { + "latin": { + "xWidthAvg": 394 + }, + "thai": { + "xWidthAvg": 505 + } + }, + "variants": { + "regular": { + "familyName": "Neonderthaw", + "fullName": "Neonderthaw Regular", + "postscriptName": "Neonderthaw-Regular", + "category": "handwriting", + "capHeight": 750, + "ascent": 1050, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 350, + "xWidthAvg": 394, + "subsets": { + "latin": { + "xWidthAvg": 394 + }, + "thai": { + "xWidthAvg": 505 + } + } + } + } + }, + "nerkoOne": { + "familyName": "Nerko One", + "fullName": "Nerko One Regular", + "postscriptName": "NerkoOne-Regular", + "category": "handwriting", + "capHeight": 586, + "ascent": 894, + "descent": -317, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 426, + "xWidthAvg": 410, + "subsets": { + "latin": { + "xWidthAvg": 410 + }, + "thai": { + "xWidthAvg": 481 + } + }, + "variants": { + "regular": { + "familyName": "Nerko One", + "fullName": "Nerko One Regular", + "postscriptName": "NerkoOne-Regular", + "category": "handwriting", + "capHeight": 586, + "ascent": 894, + "descent": -317, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 426, + "xWidthAvg": 410, + "subsets": { + "latin": { + "xWidthAvg": 410 + }, + "thai": { + "xWidthAvg": 481 + } + } + } + } + }, + "neucha": { + "familyName": "Neucha", + "fullName": "Neucha", + "postscriptName": "Neucha", + "category": "handwriting", + "capHeight": 720, + "ascent": 787, + "descent": -292, + "lineGap": 49, + "unitsPerEm": 1024, + "xHeight": 523, + "xWidthAvg": 379, + "subsets": { + "latin": { + "xWidthAvg": 379 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "Neucha", + "fullName": "Neucha", + "postscriptName": "Neucha", + "category": "handwriting", + "capHeight": 720, + "ascent": 787, + "descent": -292, + "lineGap": 49, + "unitsPerEm": 1024, + "xHeight": 523, + "xWidthAvg": 379, + "subsets": { + "latin": { + "xWidthAvg": 379 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "neuton": { + "familyName": "Neuton", + "fullName": "Neuton Regular", + "postscriptName": "Neuton-Regular", + "category": "serif", + "capHeight": 0, + "ascent": 2106, + "descent": -485, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 0, + "xWidthAvg": 757, + "subsets": { + "latin": { + "xWidthAvg": 757 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "200": { + "familyName": "Neuton", + "fullName": "Neuton ExtraLight", + "postscriptName": "Neuton-ExtraLight", + "category": "serif", + "capHeight": 0, + "ascent": 2106, + "descent": -485, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 0, + "xWidthAvg": 741, + "subsets": { + "latin": { + "xWidthAvg": 741 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "300": { + "familyName": "Neuton", + "fullName": "Neuton Light", + "postscriptName": "Neuton-Light", + "category": "serif", + "capHeight": 0, + "ascent": 2106, + "descent": -485, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 0, + "xWidthAvg": 754, + "subsets": { + "latin": { + "xWidthAvg": 754 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "700": { + "familyName": "Neuton", + "fullName": "Neuton Bold", + "postscriptName": "Neuton-Bold", + "category": "serif", + "capHeight": 0, + "ascent": 2106, + "descent": -485, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 0, + "xWidthAvg": 866, + "subsets": { + "latin": { + "xWidthAvg": 866 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "800": { + "familyName": "Neuton", + "fullName": "Neuton ExtraBold", + "postscriptName": "Neuton-ExtraBold", + "category": "serif", + "capHeight": 0, + "ascent": 2106, + "descent": -485, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 0, + "xWidthAvg": 827, + "subsets": { + "latin": { + "xWidthAvg": 827 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "regular": { + "familyName": "Neuton", + "fullName": "Neuton Regular", + "postscriptName": "Neuton-Regular", + "category": "serif", + "capHeight": 0, + "ascent": 2106, + "descent": -485, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 0, + "xWidthAvg": 757, + "subsets": { + "latin": { + "xWidthAvg": 757 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "italic": { + "familyName": "Neuton", + "fullName": "Neuton Italic", + "postscriptName": "Neuton-Italic", + "category": "serif", + "capHeight": 0, + "ascent": 2106, + "descent": -485, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 0, + "xWidthAvg": 703, + "subsets": { + "latin": { + "xWidthAvg": 703 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "newAmsterdam": { + "familyName": "New Amsterdam", + "fullName": "New Amsterdam Regular", + "postscriptName": "NewAmsterdam-Regular", + "category": "sans-serif", + "capHeight": 650, + "ascent": 925, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 649, + "xWidthAvg": 354, + "subsets": { + "latin": { + "xWidthAvg": 354 + }, + "thai": { + "xWidthAvg": 488 + } + }, + "variants": { + "regular": { + "familyName": "New Amsterdam", + "fullName": "New Amsterdam Regular", + "postscriptName": "NewAmsterdam-Regular", + "category": "sans-serif", + "capHeight": 650, + "ascent": 925, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 649, + "xWidthAvg": 354, + "subsets": { + "latin": { + "xWidthAvg": 354 + }, + "thai": { + "xWidthAvg": 488 + } + } + } + } + }, + "newRocker": { + "familyName": "New Rocker", + "fullName": "New Rocker", + "postscriptName": "NewRocker-Regular", + "category": "display", + "capHeight": 733, + "ascent": 946, + "descent": -283, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 465, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 752 + } + }, + "variants": { + "regular": { + "familyName": "New Rocker", + "fullName": "New Rocker", + "postscriptName": "NewRocker-Regular", + "category": "display", + "capHeight": 733, + "ascent": 946, + "descent": -283, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 465, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 752 + } + } + } + } + }, + "newTegomin": { + "familyName": "New Tegomin", + "fullName": "New Tegomin Regular", + "postscriptName": "NewTegomin-Regular", + "category": "serif", + "capHeight": 635, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 438, + "xWidthAvg": 501, + "subsets": { + "latin": { + "xWidthAvg": 501 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "New Tegomin", + "fullName": "New Tegomin Regular", + "postscriptName": "NewTegomin-Regular", + "category": "serif", + "capHeight": 635, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 438, + "xWidthAvg": 501, + "subsets": { + "latin": { + "xWidthAvg": 501 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "newsCycle": { + "familyName": "News Cycle", + "fullName": "News Cycle", + "postscriptName": "NewsCycle", + "category": "sans-serif", + "ascent": 2574, + "descent": -794, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 795, + "subsets": { + "latin": { + "xWidthAvg": 795 + }, + "thai": { + "xWidthAvg": 748 + } + }, + "variants": { + "700": { + "familyName": "News Cycle", + "fullName": "News Cycle Bold", + "postscriptName": "NewsCycle-Bold", + "category": "sans-serif", + "ascent": 2574, + "descent": -794, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 807, + "subsets": { + "latin": { + "xWidthAvg": 807 + }, + "thai": { + "xWidthAvg": 748 + } + } + }, + "regular": { + "familyName": "News Cycle", + "fullName": "News Cycle", + "postscriptName": "NewsCycle", + "category": "sans-serif", + "ascent": 2574, + "descent": -794, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 795, + "subsets": { + "latin": { + "xWidthAvg": 795 + }, + "thai": { + "xWidthAvg": 748 + } + } + } + } + }, + "newsreader": { + "familyName": "Newsreader", + "fullName": "Newsreader 16pt Regular", + "postscriptName": "Newsreader16pt-Regular", + "category": "serif", + "capHeight": 1340, + "ascent": 1470, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 852, + "xWidthAvg": 857, + "subsets": { + "latin": { + "xWidthAvg": 857 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "200": { + "familyName": "Newsreader", + "fullName": "Newsreader 16pt ExtraLight", + "postscriptName": "Newsreader16pt-ExtraLight", + "category": "serif", + "capHeight": 1340, + "ascent": 1470, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 852, + "xWidthAvg": 821, + "subsets": { + "latin": { + "xWidthAvg": 821 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "300": { + "familyName": "Newsreader", + "fullName": "Newsreader 16pt Light", + "postscriptName": "Newsreader16pt-Light", + "category": "serif", + "capHeight": 1340, + "ascent": 1470, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 852, + "xWidthAvg": 834, + "subsets": { + "latin": { + "xWidthAvg": 834 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "500": { + "familyName": "Newsreader", + "fullName": "Newsreader 16pt Medium", + "postscriptName": "Newsreader16pt-Medium", + "category": "serif", + "capHeight": 1340, + "ascent": 1470, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 852, + "xWidthAvg": 877, + "subsets": { + "latin": { + "xWidthAvg": 877 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "600": { + "familyName": "Newsreader", + "fullName": "Newsreader 16pt SemiBold", + "postscriptName": "Newsreader16pt-SemiBold", + "category": "serif", + "capHeight": 1340, + "ascent": 1470, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 852, + "xWidthAvg": 900, + "subsets": { + "latin": { + "xWidthAvg": 900 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "Newsreader", + "fullName": "Newsreader 16pt Bold", + "postscriptName": "Newsreader16pt-Bold", + "category": "serif", + "capHeight": 1340, + "ascent": 1470, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 852, + "xWidthAvg": 923, + "subsets": { + "latin": { + "xWidthAvg": 923 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "800": { + "familyName": "Newsreader", + "fullName": "Newsreader 16pt ExtraBold", + "postscriptName": "Newsreader16pt-ExtraBold", + "category": "serif", + "capHeight": 1340, + "ascent": 1470, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 852, + "xWidthAvg": 959, + "subsets": { + "latin": { + "xWidthAvg": 959 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Newsreader", + "fullName": "Newsreader 16pt Regular", + "postscriptName": "Newsreader16pt-Regular", + "category": "serif", + "capHeight": 1340, + "ascent": 1470, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 852, + "xWidthAvg": 857, + "subsets": { + "latin": { + "xWidthAvg": 857 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "italic": { + "familyName": "Newsreader", + "fullName": "Newsreader 16pt Italic", + "postscriptName": "Newsreader16pt-Italic", + "category": "serif", + "capHeight": 1340, + "ascent": 1470, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 852, + "xWidthAvg": 804, + "subsets": { + "latin": { + "xWidthAvg": 804 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "800italic": { + "familyName": "Newsreader", + "fullName": "Newsreader 16pt ExtraBold Italic", + "postscriptName": "Newsreader16pt-ExtraBoldItalic", + "category": "serif", + "capHeight": 1340, + "ascent": 1470, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 852, + "xWidthAvg": 966, + "subsets": { + "latin": { + "xWidthAvg": 966 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700italic": { + "familyName": "Newsreader", + "fullName": "Newsreader 16pt Bold Italic", + "postscriptName": "Newsreader16pt-BoldItalic", + "category": "serif", + "capHeight": 1340, + "ascent": 1470, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 852, + "xWidthAvg": 909, + "subsets": { + "latin": { + "xWidthAvg": 909 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "600italic": { + "familyName": "Newsreader", + "fullName": "Newsreader 16pt SemiBold Italic", + "postscriptName": "Newsreader16pt-SemiBoldItalic", + "category": "serif", + "capHeight": 1340, + "ascent": 1470, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 852, + "xWidthAvg": 873, + "subsets": { + "latin": { + "xWidthAvg": 873 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "500italic": { + "familyName": "Newsreader", + "fullName": "Newsreader 16pt Medium Italic", + "postscriptName": "Newsreader16pt-MediumItalic", + "category": "serif", + "capHeight": 1340, + "ascent": 1470, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 852, + "xWidthAvg": 837, + "subsets": { + "latin": { + "xWidthAvg": 837 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "300italic": { + "familyName": "Newsreader", + "fullName": "Newsreader 16pt Light Italic", + "postscriptName": "Newsreader16pt-LightItalic", + "category": "serif", + "capHeight": 1340, + "ascent": 1470, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 852, + "xWidthAvg": 777, + "subsets": { + "latin": { + "xWidthAvg": 777 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "200italic": { + "familyName": "Newsreader", + "fullName": "Newsreader 16pt ExtraLight Italic", + "postscriptName": "Newsreader16pt-ExtraLightItalic", + "category": "serif", + "capHeight": 1340, + "ascent": 1470, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 852, + "xWidthAvg": 761, + "subsets": { + "latin": { + "xWidthAvg": 761 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "niconne": { + "familyName": "Niconne", + "fullName": "Niconne", + "postscriptName": "Niconne-Regular", + "category": "handwriting", + "capHeight": 1442, + "ascent": 1898, + "descent": -585, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 218, + "xWidthAvg": 699, + "subsets": { + "latin": { + "xWidthAvg": 699 + }, + "thai": { + "xWidthAvg": 457 + } + }, + "variants": { + "regular": { + "familyName": "Niconne", + "fullName": "Niconne", + "postscriptName": "Niconne-Regular", + "category": "handwriting", + "capHeight": 1442, + "ascent": 1898, + "descent": -585, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 218, + "xWidthAvg": 699, + "subsets": { + "latin": { + "xWidthAvg": 699 + }, + "thai": { + "xWidthAvg": 457 + } + } + } + } + }, + "niramit": { + "familyName": "Niramit", + "fullName": "Niramit Regular", + "postscriptName": "Niramit-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1105, + "descent": -195, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 590 + } + }, + "variants": { + "200": { + "familyName": "Niramit", + "fullName": "Niramit ExtraLight", + "postscriptName": "Niramit-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1105, + "descent": -195, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 581 + } + } + }, + "300": { + "familyName": "Niramit", + "fullName": "Niramit Light", + "postscriptName": "Niramit-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1105, + "descent": -195, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 586 + } + } + }, + "500": { + "familyName": "Niramit", + "fullName": "Niramit Medium", + "postscriptName": "Niramit-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1105, + "descent": -195, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 595 + } + } + }, + "600": { + "familyName": "Niramit", + "fullName": "Niramit SemiBold", + "postscriptName": "Niramit-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1105, + "descent": -195, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Niramit", + "fullName": "Niramit Bold", + "postscriptName": "Niramit-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1105, + "descent": -195, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 604 + } + } + }, + "regular": { + "familyName": "Niramit", + "fullName": "Niramit Regular", + "postscriptName": "Niramit-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1105, + "descent": -195, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 590 + } + } + }, + "italic": { + "familyName": "Niramit", + "fullName": "Niramit Italic", + "postscriptName": "Niramit-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1105, + "descent": -195, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 590 + } + } + }, + "700italic": { + "familyName": "Niramit", + "fullName": "Niramit Bold Italic", + "postscriptName": "Niramit-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1105, + "descent": -195, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 604 + } + } + }, + "600italic": { + "familyName": "Niramit", + "fullName": "Niramit SemiBold Italic", + "postscriptName": "Niramit-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1105, + "descent": -195, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500italic": { + "familyName": "Niramit", + "fullName": "Niramit Medium Italic", + "postscriptName": "Niramit-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1105, + "descent": -195, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 595 + } + } + }, + "300italic": { + "familyName": "Niramit", + "fullName": "Niramit Light Italic", + "postscriptName": "Niramit-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1105, + "descent": -195, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 586 + } + } + }, + "200italic": { + "familyName": "Niramit", + "fullName": "Niramit ExtraLight Italic", + "postscriptName": "Niramit-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1105, + "descent": -195, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 581 + } + } + } + } + }, + "nixieOne": { + "familyName": "Nixie One", + "fullName": "Nixie One", + "postscriptName": "NixieOne-Regular", + "category": "display", + "capHeight": 700, + "ascent": 926, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Nixie One", + "fullName": "Nixie One", + "postscriptName": "NixieOne-Regular", + "category": "display", + "capHeight": 700, + "ascent": 926, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "nobile": { + "familyName": "Nobile", + "fullName": "Nobile", + "postscriptName": "Nobile-Regular", + "category": "sans-serif", + "capHeight": 1579, + "ascent": 1731, + "descent": -578, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1169, + "xWidthAvg": 987, + "subsets": { + "latin": { + "xWidthAvg": 987 + }, + "thai": { + "xWidthAvg": 748 + } + }, + "variants": { + "500": { + "familyName": "Nobile", + "fullName": "Nobile Medium", + "postscriptName": "Nobile-Medium", + "category": "sans-serif", + "capHeight": 1602, + "ascent": 1731, + "descent": -578, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1180, + "xWidthAvg": 1029, + "subsets": { + "latin": { + "xWidthAvg": 1029 + }, + "thai": { + "xWidthAvg": 759 + } + } + }, + "700": { + "familyName": "Nobile", + "fullName": "Nobile Bold", + "postscriptName": "Nobile-Bold", + "category": "sans-serif", + "capHeight": 1629, + "ascent": 1731, + "descent": -578, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1194, + "xWidthAvg": 1081, + "subsets": { + "latin": { + "xWidthAvg": 1081 + }, + "thai": { + "xWidthAvg": 772 + } + } + }, + "regular": { + "familyName": "Nobile", + "fullName": "Nobile", + "postscriptName": "Nobile-Regular", + "category": "sans-serif", + "capHeight": 1579, + "ascent": 1731, + "descent": -578, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1169, + "xWidthAvg": 987, + "subsets": { + "latin": { + "xWidthAvg": 987 + }, + "thai": { + "xWidthAvg": 748 + } + } + }, + "italic": { + "familyName": "Nobile", + "fullName": "Nobile Italic", + "postscriptName": "Nobile-Italic", + "category": "sans-serif", + "capHeight": 1572, + "ascent": 2301, + "descent": -530, + "lineGap": 67, + "unitsPerEm": 2048, + "xHeight": 1146, + "xWidthAvg": 900, + "subsets": { + "latin": { + "xWidthAvg": 900 + }, + "thai": { + "xWidthAvg": 747 + } + } + }, + "700italic": { + "familyName": "Nobile", + "fullName": "Nobile Bold Italic", + "postscriptName": "Nobile-BoldItalic", + "category": "sans-serif", + "capHeight": 1603, + "ascent": 2301, + "descent": -530, + "lineGap": 67, + "unitsPerEm": 2048, + "xHeight": 1126, + "xWidthAvg": 935, + "subsets": { + "latin": { + "xWidthAvg": 935 + }, + "thai": { + "xWidthAvg": 761 + } + } + }, + "500italic": { + "familyName": "Nobile", + "fullName": "Nobile Medium Italic", + "postscriptName": "Nobile-MediumItalic", + "category": "sans-serif", + "capHeight": 1582, + "ascent": 2301, + "descent": -530, + "lineGap": 67, + "unitsPerEm": 2048, + "xHeight": 1140, + "xWidthAvg": 911, + "subsets": { + "latin": { + "xWidthAvg": 911 + }, + "thai": { + "xWidthAvg": 751 + } + } + } + } + }, + "nokora": { + "familyName": "Nokora", + "fullName": "Nokora Regular", + "postscriptName": "Nokora-Regular", + "category": "sans-serif", + "capHeight": 1462, + "ascent": 1907, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 970, + "subsets": { + "latin": { + "xWidthAvg": 970 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "100": { + "familyName": "Nokora", + "fullName": "Nokora Thin", + "postscriptName": "Nokora-Thin", + "category": "sans-serif", + "capHeight": 1462, + "ascent": 1907, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 899, + "subsets": { + "latin": { + "xWidthAvg": 899 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "300": { + "familyName": "Nokora", + "fullName": "Nokora Light", + "postscriptName": "Nokora-Light", + "category": "sans-serif", + "capHeight": 1462, + "ascent": 1907, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 934, + "subsets": { + "latin": { + "xWidthAvg": 934 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "700": { + "familyName": "Nokora", + "fullName": "Nokora Bold", + "postscriptName": "Nokora-Bold", + "category": "sans-serif", + "capHeight": 1462, + "ascent": 1907, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 1032, + "subsets": { + "latin": { + "xWidthAvg": 1032 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "900": { + "familyName": "Nokora", + "fullName": "Nokora Black", + "postscriptName": "Nokora-Black", + "category": "sans-serif", + "capHeight": 1462, + "ascent": 1907, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 1066, + "subsets": { + "latin": { + "xWidthAvg": 1066 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "regular": { + "familyName": "Nokora", + "fullName": "Nokora Regular", + "postscriptName": "Nokora-Regular", + "category": "sans-serif", + "capHeight": 1462, + "ascent": 1907, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 970, + "subsets": { + "latin": { + "xWidthAvg": 970 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "norican": { + "familyName": "Norican", + "fullName": "Norican Regular", + "postscriptName": "Norican-Regular", + "category": "handwriting", + "capHeight": 1518, + "ascent": 2095, + "descent": -791, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 810, + "xWidthAvg": 734, + "subsets": { + "latin": { + "xWidthAvg": 734 + }, + "thai": { + "xWidthAvg": 1406 + } + }, + "variants": { + "regular": { + "familyName": "Norican", + "fullName": "Norican Regular", + "postscriptName": "Norican-Regular", + "category": "handwriting", + "capHeight": 1518, + "ascent": 2095, + "descent": -791, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 810, + "xWidthAvg": 734, + "subsets": { + "latin": { + "xWidthAvg": 734 + }, + "thai": { + "xWidthAvg": 1406 + } + } + } + } + }, + "nosifer": { + "familyName": "Nosifer", + "fullName": "Nosifer", + "postscriptName": "Nosifer-Regular", + "category": "display", + "capHeight": 854, + "ascent": 2236, + "descent": -1328, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 925, + "xWidthAvg": 1586, + "subsets": { + "latin": { + "xWidthAvg": 1586 + }, + "thai": { + "xWidthAvg": 748 + } + }, + "variants": { + "regular": { + "familyName": "Nosifer", + "fullName": "Nosifer", + "postscriptName": "Nosifer-Regular", + "category": "display", + "capHeight": 854, + "ascent": 2236, + "descent": -1328, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 925, + "xWidthAvg": 1586, + "subsets": { + "latin": { + "xWidthAvg": 1586 + }, + "thai": { + "xWidthAvg": 748 + } + } + } + } + }, + "notable": { + "familyName": "Notable", + "fullName": "Notable Regular", + "postscriptName": "Notable-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1143, + "descent": -157, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 356, + "xWidthAvg": 750, + "subsets": { + "latin": { + "xWidthAvg": 750 + }, + "thai": { + "xWidthAvg": 463 + } + }, + "variants": { + "regular": { + "familyName": "Notable", + "fullName": "Notable Regular", + "postscriptName": "Notable-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1143, + "descent": -157, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 356, + "xWidthAvg": 750, + "subsets": { + "latin": { + "xWidthAvg": 750 + }, + "thai": { + "xWidthAvg": 463 + } + } + } + } + }, + "nothingYouCouldDo": { + "familyName": "Nothing You Could Do", + "fullName": "Nothing You Could Do", + "postscriptName": "NothingYouCouldDo", + "category": "handwriting", + "capHeight": 758, + "ascent": 959, + "descent": -407, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 462, + "xWidthAvg": 496, + "subsets": { + "latin": { + "xWidthAvg": 496 + }, + "thai": { + "xWidthAvg": 410 + } + }, + "variants": { + "regular": { + "familyName": "Nothing You Could Do", + "fullName": "Nothing You Could Do", + "postscriptName": "NothingYouCouldDo", + "category": "handwriting", + "capHeight": 758, + "ascent": 959, + "descent": -407, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 462, + "xWidthAvg": 496, + "subsets": { + "latin": { + "xWidthAvg": 496 + }, + "thai": { + "xWidthAvg": 410 + } + } + } + } + }, + "noticiaText": { + "familyName": "Noticia Text", + "fullName": "Noticia Text", + "postscriptName": "NoticiaText-Regular", + "category": "serif", + "capHeight": 1353, + "ascent": 2202, + "descent": -593, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1085, + "xWidthAvg": 964, + "subsets": { + "latin": { + "xWidthAvg": 964 + }, + "thai": { + "xWidthAvg": 1601 + } + }, + "variants": { + "700": { + "familyName": "Noticia Text", + "fullName": "Noticia Text Bold", + "postscriptName": "NoticiaText-Bold", + "category": "serif", + "capHeight": 1353, + "ascent": 2202, + "descent": -593, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1085, + "xWidthAvg": 998, + "subsets": { + "latin": { + "xWidthAvg": 998 + }, + "thai": { + "xWidthAvg": 1501 + } + } + }, + "regular": { + "familyName": "Noticia Text", + "fullName": "Noticia Text", + "postscriptName": "NoticiaText-Regular", + "category": "serif", + "capHeight": 1353, + "ascent": 2202, + "descent": -593, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1085, + "xWidthAvg": 964, + "subsets": { + "latin": { + "xWidthAvg": 964 + }, + "thai": { + "xWidthAvg": 1601 + } + } + }, + "italic": { + "familyName": "Noticia Text", + "fullName": "Noticia Text Italic", + "postscriptName": "NoticiaText-Italic", + "category": "serif", + "capHeight": 1353, + "ascent": 2202, + "descent": -593, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1085, + "xWidthAvg": 942, + "subsets": { + "latin": { + "xWidthAvg": 942 + }, + "thai": { + "xWidthAvg": 1601 + } + } + }, + "700italic": { + "familyName": "Noticia Text", + "fullName": "Noticia Text Bold Italic", + "postscriptName": "NoticiaText-BoldItalic", + "category": "serif", + "capHeight": 1353, + "ascent": 2202, + "descent": -593, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1085, + "xWidthAvg": 1006, + "subsets": { + "latin": { + "xWidthAvg": 1006 + }, + "thai": { + "xWidthAvg": 1501 + } + } + } + } + }, + "notoColorEmoji": { + "familyName": "Noto Color Emoji", + "fullName": "Noto Color Emoji", + "postscriptName": "NotoColorEmoji", + "category": "sans-serif", + "capHeight": 717, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 512, + "xWidthAvg": 1275, + "subsets": { + "latin": { + "xWidthAvg": 1275 + }, + "thai": { + "xWidthAvg": 1275 + } + }, + "variants": { + "regular": { + "familyName": "Noto Color Emoji", + "fullName": "Noto Color Emoji", + "postscriptName": "NotoColorEmoji", + "category": "sans-serif", + "capHeight": 717, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 512, + "xWidthAvg": 1275, + "subsets": { + "latin": { + "xWidthAvg": 1275 + }, + "thai": { + "xWidthAvg": 1275 + } + } + } + } + }, + "notoEmoji": { + "familyName": "Noto Emoji", + "fullName": "Noto Emoji Regular", + "postscriptName": "NotoEmoji-Regular", + "category": "sans-serif", + "capHeight": 1900, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 0, + "xWidthAvg": 1272, + "subsets": { + "latin": { + "xWidthAvg": 1272 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "300": { + "familyName": "Noto Emoji", + "fullName": "Noto Emoji Light", + "postscriptName": "NotoEmoji-Light", + "category": "sans-serif", + "capHeight": 1900, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 0, + "xWidthAvg": 1272, + "subsets": { + "latin": { + "xWidthAvg": 1272 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "500": { + "familyName": "Noto Emoji", + "fullName": "Noto Emoji Medium", + "postscriptName": "NotoEmoji-Medium", + "category": "sans-serif", + "capHeight": 1900, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 0, + "xWidthAvg": 1272, + "subsets": { + "latin": { + "xWidthAvg": 1272 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "600": { + "familyName": "Noto Emoji", + "fullName": "Noto Emoji SemiBold", + "postscriptName": "NotoEmoji-SemiBold", + "category": "sans-serif", + "capHeight": 1900, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 0, + "xWidthAvg": 1272, + "subsets": { + "latin": { + "xWidthAvg": 1272 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "Noto Emoji", + "fullName": "Noto Emoji Bold", + "postscriptName": "NotoEmoji-Bold", + "category": "sans-serif", + "capHeight": 1900, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 0, + "xWidthAvg": 1272, + "subsets": { + "latin": { + "xWidthAvg": 1272 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Noto Emoji", + "fullName": "Noto Emoji Regular", + "postscriptName": "NotoEmoji-Regular", + "category": "sans-serif", + "capHeight": 1900, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 0, + "xWidthAvg": 1272, + "subsets": { + "latin": { + "xWidthAvg": 1272 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "notoKufiArabic": { + "familyName": "Noto Kufi Arabic", + "fullName": "Noto Kufi Arabic Regular", + "postscriptName": "NotoKufiArabic-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1282, + "descent": -615, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Kufi Arabic", + "fullName": "Noto Kufi Arabic Thin", + "postscriptName": "NotoKufiArabic-Thin", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1282, + "descent": -615, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 528, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Kufi Arabic", + "fullName": "Noto Kufi Arabic ExtraLight", + "postscriptName": "NotoKufiArabic-ExtraLight", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1282, + "descent": -615, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Kufi Arabic", + "fullName": "Noto Kufi Arabic Light", + "postscriptName": "NotoKufiArabic-Light", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1282, + "descent": -615, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 533, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Kufi Arabic", + "fullName": "Noto Kufi Arabic Medium", + "postscriptName": "NotoKufiArabic-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1282, + "descent": -615, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 539, + "xWidthAvg": 496, + "subsets": { + "latin": { + "xWidthAvg": 496 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Kufi Arabic", + "fullName": "Noto Kufi Arabic SemiBold", + "postscriptName": "NotoKufiArabic-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1282, + "descent": -615, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Kufi Arabic", + "fullName": "Noto Kufi Arabic Bold", + "postscriptName": "NotoKufiArabic-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1282, + "descent": -615, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 517, + "subsets": { + "latin": { + "xWidthAvg": 517 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Kufi Arabic", + "fullName": "Noto Kufi Arabic ExtraBold", + "postscriptName": "NotoKufiArabic-ExtraBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1282, + "descent": -615, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Kufi Arabic", + "fullName": "Noto Kufi Arabic Black", + "postscriptName": "NotoKufiArabic-Black", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1282, + "descent": -615, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 533, + "subsets": { + "latin": { + "xWidthAvg": 533 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Kufi Arabic", + "fullName": "Noto Kufi Arabic Regular", + "postscriptName": "NotoKufiArabic-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1282, + "descent": -615, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoMusic": { + "familyName": "Noto Music", + "fullName": "Noto Music Regular", + "postscriptName": "NotoMusic-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1389, + "descent": -398, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Music", + "fullName": "Noto Music Regular", + "postscriptName": "NotoMusic-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1389, + "descent": -398, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoNaskhArabic": { + "familyName": "Noto Naskh Arabic", + "fullName": "Noto Naskh Arabic Regular", + "postscriptName": "NotoNaskhArabic-Regular", + "category": "serif", + "capHeight": 0, + "ascent": 1069, + "descent": -634, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 646 + } + }, + "variants": { + "500": { + "familyName": "Noto Naskh Arabic", + "fullName": "Noto Naskh Arabic Medium", + "postscriptName": "NotoNaskhArabic-Medium", + "category": "serif", + "capHeight": 0, + "ascent": 1069, + "descent": -634, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 646 + } + } + }, + "600": { + "familyName": "Noto Naskh Arabic", + "fullName": "Noto Naskh Arabic SemiBold", + "postscriptName": "NotoNaskhArabic-SemiBold", + "category": "serif", + "capHeight": 0, + "ascent": 1069, + "descent": -634, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 646 + } + } + }, + "700": { + "familyName": "Noto Naskh Arabic", + "fullName": "Noto Naskh Arabic Bold", + "postscriptName": "NotoNaskhArabic-Bold", + "category": "serif", + "capHeight": 0, + "ascent": 1069, + "descent": -634, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 646 + } + } + }, + "regular": { + "familyName": "Noto Naskh Arabic", + "fullName": "Noto Naskh Arabic Regular", + "postscriptName": "NotoNaskhArabic-Regular", + "category": "serif", + "capHeight": 0, + "ascent": 1069, + "descent": -634, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 646 + } + } + } + } + }, + "notoNastaliqUrdu": { + "familyName": "Noto Nastaliq Urdu", + "fullName": "Noto Nastaliq Urdu Regular", + "postscriptName": "NotoNastaliqUrdu-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1904, + "descent": -596, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 900 + } + }, + "variants": { + "500": { + "familyName": "Noto Nastaliq Urdu", + "fullName": "Noto Nastaliq Urdu Medium", + "postscriptName": "NotoNastaliqUrdu-Medium", + "category": "serif", + "capHeight": 714, + "ascent": 1904, + "descent": -596, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 900 + } + } + }, + "600": { + "familyName": "Noto Nastaliq Urdu", + "fullName": "Noto Nastaliq Urdu SemiBold", + "postscriptName": "NotoNastaliqUrdu-SemiBold", + "category": "serif", + "capHeight": 714, + "ascent": 1904, + "descent": -596, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 900 + } + } + }, + "700": { + "familyName": "Noto Nastaliq Urdu", + "fullName": "Noto Nastaliq Urdu Bold", + "postscriptName": "NotoNastaliqUrdu-Bold", + "category": "serif", + "capHeight": 714, + "ascent": 1904, + "descent": -596, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 900 + } + } + }, + "regular": { + "familyName": "Noto Nastaliq Urdu", + "fullName": "Noto Nastaliq Urdu Regular", + "postscriptName": "NotoNastaliqUrdu-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1904, + "descent": -596, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 900 + } + } + } + } + }, + "notoRashiHebrew": { + "familyName": "Noto Rashi Hebrew", + "fullName": "Noto Rashi Hebrew Regular", + "postscriptName": "NotoRashiHebrew-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 896, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "100": { + "familyName": "Noto Rashi Hebrew", + "fullName": "Noto Rashi Hebrew Thin", + "postscriptName": "NotoRashiHebrew-Thin", + "category": "serif", + "capHeight": 714, + "ascent": 896, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200": { + "familyName": "Noto Rashi Hebrew", + "fullName": "Noto Rashi Hebrew ExtraLight", + "postscriptName": "NotoRashiHebrew-ExtraLight", + "category": "serif", + "capHeight": 714, + "ascent": 896, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Noto Rashi Hebrew", + "fullName": "Noto Rashi Hebrew Light", + "postscriptName": "NotoRashiHebrew-Light", + "category": "serif", + "capHeight": 714, + "ascent": 896, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Noto Rashi Hebrew", + "fullName": "Noto Rashi Hebrew Medium", + "postscriptName": "NotoRashiHebrew-Medium", + "category": "serif", + "capHeight": 714, + "ascent": 896, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 491, + "subsets": { + "latin": { + "xWidthAvg": 491 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Noto Rashi Hebrew", + "fullName": "Noto Rashi Hebrew SemiBold", + "postscriptName": "NotoRashiHebrew-SemiBold", + "category": "serif", + "capHeight": 714, + "ascent": 896, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 501, + "subsets": { + "latin": { + "xWidthAvg": 501 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Noto Rashi Hebrew", + "fullName": "Noto Rashi Hebrew Bold", + "postscriptName": "NotoRashiHebrew-Bold", + "category": "serif", + "capHeight": 714, + "ascent": 896, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Noto Rashi Hebrew", + "fullName": "Noto Rashi Hebrew ExtraBold", + "postscriptName": "NotoRashiHebrew-ExtraBold", + "category": "serif", + "capHeight": 714, + "ascent": 896, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 524, + "subsets": { + "latin": { + "xWidthAvg": 524 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "Noto Rashi Hebrew", + "fullName": "Noto Rashi Hebrew Black", + "postscriptName": "NotoRashiHebrew-Black", + "category": "serif", + "capHeight": 714, + "ascent": 896, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 533, + "subsets": { + "latin": { + "xWidthAvg": 533 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Noto Rashi Hebrew", + "fullName": "Noto Rashi Hebrew Regular", + "postscriptName": "NotoRashiHebrew-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 896, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "notoSans": { + "familyName": "Noto Sans", + "fullName": "Noto Sans Regular", + "postscriptName": "NotoSans-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans", + "fullName": "Noto Sans Thin", + "postscriptName": "NotoSans-Thin", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 528, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Sans", + "fullName": "Noto Sans ExtraLight", + "postscriptName": "NotoSans-ExtraLight", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Sans", + "fullName": "Noto Sans Light", + "postscriptName": "NotoSans-Light", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 532, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Sans", + "fullName": "Noto Sans Medium", + "postscriptName": "NotoSans-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 539, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 597 + } + } + }, + "600": { + "familyName": "Noto Sans", + "fullName": "Noto Sans SemiBold", + "postscriptName": "NotoSans-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 542, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 593 + } + } + }, + "700": { + "familyName": "Noto Sans", + "fullName": "Noto Sans Bold", + "postscriptName": "NotoSans-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 589 + } + } + }, + "800": { + "familyName": "Noto Sans", + "fullName": "Noto Sans ExtraBold", + "postscriptName": "NotoSans-ExtraBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 549, + "xWidthAvg": 511, + "subsets": { + "latin": { + "xWidthAvg": 511 + }, + "thai": { + "xWidthAvg": 586 + } + } + }, + "900": { + "familyName": "Noto Sans", + "fullName": "Noto Sans Black", + "postscriptName": "NotoSans-Black", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 521, + "subsets": { + "latin": { + "xWidthAvg": 521 + }, + "thai": { + "xWidthAvg": 582 + } + } + }, + "regular": { + "familyName": "Noto Sans", + "fullName": "Noto Sans Regular", + "postscriptName": "NotoSans-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "italic": { + "familyName": "Noto Sans", + "fullName": "Noto Sans Italic", + "postscriptName": "NotoSans-Italic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900italic": { + "familyName": "Noto Sans", + "fullName": "Noto Sans Black Italic", + "postscriptName": "NotoSans-BlackItalic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800italic": { + "familyName": "Noto Sans", + "fullName": "Noto Sans ExtraBold Italic", + "postscriptName": "NotoSans-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 549, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700italic": { + "familyName": "Noto Sans", + "fullName": "Noto Sans Bold Italic", + "postscriptName": "NotoSans-BoldItalic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600italic": { + "familyName": "Noto Sans", + "fullName": "Noto Sans SemiBold Italic", + "postscriptName": "NotoSans-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 542, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500italic": { + "familyName": "Noto Sans", + "fullName": "Noto Sans Medium Italic", + "postscriptName": "NotoSans-MediumItalic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 539, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300italic": { + "familyName": "Noto Sans", + "fullName": "Noto Sans Light Italic", + "postscriptName": "NotoSans-LightItalic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 532, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200italic": { + "familyName": "Noto Sans", + "fullName": "Noto Sans ExtraLight Italic", + "postscriptName": "NotoSans-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "100italic": { + "familyName": "Noto Sans", + "fullName": "Noto Sans Thin Italic", + "postscriptName": "NotoSans-ThinItalic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 528, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansAdlam": { + "familyName": "Noto Sans Adlam", + "fullName": "Noto Sans Adlam Regular", + "postscriptName": "NotoSansAdlam-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 574 + } + }, + "variants": { + "500": { + "familyName": "Noto Sans Adlam", + "fullName": "Noto Sans Adlam Medium", + "postscriptName": "NotoSansAdlam-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 583 + } + } + }, + "600": { + "familyName": "Noto Sans Adlam", + "fullName": "Noto Sans Adlam SemiBold", + "postscriptName": "NotoSansAdlam-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 591 + } + } + }, + "700": { + "familyName": "Noto Sans Adlam", + "fullName": "Noto Sans Adlam Bold", + "postscriptName": "NotoSansAdlam-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Adlam", + "fullName": "Noto Sans Adlam Regular", + "postscriptName": "NotoSansAdlam-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 574 + } + } + } + } + }, + "notoSansAdlamUnjoined": { + "familyName": "Noto Sans Adlam Unjoined", + "fullName": "Noto Sans Adlam Unjoined Regular", + "postscriptName": "NotoSansAdlamUnjoined-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 574 + } + }, + "variants": { + "500": { + "familyName": "Noto Sans Adlam Unjoined", + "fullName": "Noto Sans Adlam Unjoined Medium", + "postscriptName": "NotoSansAdlamUnjoined-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 578, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 583 + } + } + }, + "600": { + "familyName": "Noto Sans Adlam Unjoined", + "fullName": "Noto Sans Adlam Unjoined SemiBold", + "postscriptName": "NotoSansAdlamUnjoined-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 582, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 591 + } + } + }, + "700": { + "familyName": "Noto Sans Adlam Unjoined", + "fullName": "Noto Sans Adlam Unjoined Bold", + "postscriptName": "NotoSansAdlamUnjoined-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 585, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Adlam Unjoined", + "fullName": "Noto Sans Adlam Unjoined Regular", + "postscriptName": "NotoSansAdlamUnjoined-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 574 + } + } + } + } + }, + "notoSansAnatolianHieroglyphs": { + "familyName": "Noto Sans Anatolian Hieroglyphs", + "fullName": "Noto Sans Anatolian Hieroglyphs Regular", + "postscriptName": "NotoSansAnatolianHieroglyphs-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1153, + "descent": -253, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Anatolian Hieroglyphs", + "fullName": "Noto Sans Anatolian Hieroglyphs Regular", + "postscriptName": "NotoSansAnatolianHieroglyphs-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1153, + "descent": -253, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansArabic": { + "familyName": "Noto Sans Arabic", + "fullName": "Noto Sans Arabic Regular", + "postscriptName": "NotoSansArabic-Regular", + "category": "sans-serif", + "capHeight": 416, + "ascent": 1374, + "descent": -738, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 374, + "xWidthAvg": 541, + "subsets": { + "latin": { + "xWidthAvg": 541 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Arabic", + "fullName": "Noto Sans Arabic Thin", + "postscriptName": "NotoSansArabic-Thin", + "category": "sans-serif", + "capHeight": 356, + "ascent": 1374, + "descent": -738, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 325, + "xWidthAvg": 540, + "subsets": { + "latin": { + "xWidthAvg": 540 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Sans Arabic", + "fullName": "Noto Sans Arabic ExtraLight", + "postscriptName": "NotoSansArabic-ExtraLight", + "category": "sans-serif", + "capHeight": 368, + "ascent": 1374, + "descent": -738, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 335, + "xWidthAvg": 540, + "subsets": { + "latin": { + "xWidthAvg": 540 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Sans Arabic", + "fullName": "Noto Sans Arabic Light", + "postscriptName": "NotoSansArabic-Light", + "category": "sans-serif", + "capHeight": 386, + "ascent": 1374, + "descent": -738, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 350, + "xWidthAvg": 541, + "subsets": { + "latin": { + "xWidthAvg": 541 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Sans Arabic", + "fullName": "Noto Sans Arabic Medium", + "postscriptName": "NotoSansArabic-Medium", + "category": "sans-serif", + "capHeight": 441, + "ascent": 1374, + "descent": -738, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 393, + "xWidthAvg": 541, + "subsets": { + "latin": { + "xWidthAvg": 541 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Arabic", + "fullName": "Noto Sans Arabic SemiBold", + "postscriptName": "NotoSansArabic-SemiBold", + "category": "sans-serif", + "capHeight": 468, + "ascent": 1374, + "descent": -738, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 415, + "xWidthAvg": 541, + "subsets": { + "latin": { + "xWidthAvg": 541 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Arabic", + "fullName": "Noto Sans Arabic Bold", + "postscriptName": "NotoSansArabic-Bold", + "category": "sans-serif", + "capHeight": 500, + "ascent": 1374, + "descent": -738, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 542, + "subsets": { + "latin": { + "xWidthAvg": 542 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Sans Arabic", + "fullName": "Noto Sans Arabic ExtraBold", + "postscriptName": "NotoSansArabic-ExtraBold", + "category": "sans-serif", + "capHeight": 523, + "ascent": 1374, + "descent": -738, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 462, + "xWidthAvg": 542, + "subsets": { + "latin": { + "xWidthAvg": 542 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Sans Arabic", + "fullName": "Noto Sans Arabic Black", + "postscriptName": "NotoSansArabic-Black", + "category": "sans-serif", + "capHeight": 550, + "ascent": 1374, + "descent": -738, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 542, + "subsets": { + "latin": { + "xWidthAvg": 542 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Arabic", + "fullName": "Noto Sans Arabic Regular", + "postscriptName": "NotoSansArabic-Regular", + "category": "sans-serif", + "capHeight": 416, + "ascent": 1374, + "descent": -738, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 374, + "xWidthAvg": 541, + "subsets": { + "latin": { + "xWidthAvg": 541 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansArmenian": { + "familyName": "Noto Sans Armenian", + "fullName": "Noto Sans Armenian Regular", + "postscriptName": "NotoSansArmenian-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Armenian", + "fullName": "Noto Sans Armenian Thin", + "postscriptName": "NotoSansArmenian-Thin", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Sans Armenian", + "fullName": "Noto Sans Armenian ExtraLight", + "postscriptName": "NotoSansArmenian-ExtraLight", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Sans Armenian", + "fullName": "Noto Sans Armenian Light", + "postscriptName": "NotoSansArmenian-Light", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Sans Armenian", + "fullName": "Noto Sans Armenian Medium", + "postscriptName": "NotoSansArmenian-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Armenian", + "fullName": "Noto Sans Armenian SemiBold", + "postscriptName": "NotoSansArmenian-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Armenian", + "fullName": "Noto Sans Armenian Bold", + "postscriptName": "NotoSansArmenian-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Sans Armenian", + "fullName": "Noto Sans Armenian ExtraBold", + "postscriptName": "NotoSansArmenian-ExtraBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 583 + } + } + }, + "900": { + "familyName": "Noto Sans Armenian", + "fullName": "Noto Sans Armenian Black", + "postscriptName": "NotoSansArmenian-Black", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 521, + "subsets": { + "latin": { + "xWidthAvg": 521 + }, + "thai": { + "xWidthAvg": 564 + } + } + }, + "regular": { + "familyName": "Noto Sans Armenian", + "fullName": "Noto Sans Armenian Regular", + "postscriptName": "NotoSansArmenian-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansAvestan": { + "familyName": "Noto Sans Avestan", + "fullName": "Noto Sans Avestan Regular", + "postscriptName": "NotoSansAvestan-Regular", + "category": "sans-serif", + "capHeight": 652, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Avestan", + "fullName": "Noto Sans Avestan Regular", + "postscriptName": "NotoSansAvestan-Regular", + "category": "sans-serif", + "capHeight": 652, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansBalinese": { + "familyName": "Noto Sans Balinese", + "fullName": "Noto Sans Balinese Regular", + "postscriptName": "NotoSansBalinese-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1363, + "descent": -838, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "500": { + "familyName": "Noto Sans Balinese", + "fullName": "Noto Sans Balinese Medium", + "postscriptName": "NotoSansBalinese-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1363, + "descent": -838, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Balinese", + "fullName": "Noto Sans Balinese SemiBold", + "postscriptName": "NotoSansBalinese-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1363, + "descent": -838, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Balinese", + "fullName": "Noto Sans Balinese Bold", + "postscriptName": "NotoSansBalinese-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1363, + "descent": -838, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Balinese", + "fullName": "Noto Sans Balinese Regular", + "postscriptName": "NotoSansBalinese-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1363, + "descent": -838, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansBamum": { + "familyName": "Noto Sans Bamum", + "fullName": "Noto Sans Bamum Regular", + "postscriptName": "NotoSansBamum-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "500": { + "familyName": "Noto Sans Bamum", + "fullName": "Noto Sans Bamum Medium", + "postscriptName": "NotoSansBamum-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Bamum", + "fullName": "Noto Sans Bamum SemiBold", + "postscriptName": "NotoSansBamum-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 491, + "subsets": { + "latin": { + "xWidthAvg": 491 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Bamum", + "fullName": "Noto Sans Bamum Bold", + "postscriptName": "NotoSansBamum-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 501, + "subsets": { + "latin": { + "xWidthAvg": 501 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Bamum", + "fullName": "Noto Sans Bamum Regular", + "postscriptName": "NotoSansBamum-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansBassaVah": { + "familyName": "Noto Sans Bassa Vah", + "fullName": "Noto Sans Bassa Vah Regular", + "postscriptName": "NotoSansBassaVah-Regular", + "category": "sans-serif", + "capHeight": 674, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "500": { + "familyName": "Noto Sans Bassa Vah", + "fullName": "Noto Sans Bassa Vah Medium", + "postscriptName": "NotoSansBassaVah-Medium", + "category": "sans-serif", + "capHeight": 674, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Bassa Vah", + "fullName": "Noto Sans Bassa Vah SemiBold", + "postscriptName": "NotoSansBassaVah-SemiBold", + "category": "sans-serif", + "capHeight": 674, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Bassa Vah", + "fullName": "Noto Sans Bassa Vah Bold", + "postscriptName": "NotoSansBassaVah-Bold", + "category": "sans-serif", + "capHeight": 674, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 517, + "subsets": { + "latin": { + "xWidthAvg": 517 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Bassa Vah", + "fullName": "Noto Sans Bassa Vah Regular", + "postscriptName": "NotoSansBassaVah-Regular", + "category": "sans-serif", + "capHeight": 674, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansBatak": { + "familyName": "Noto Sans Batak", + "fullName": "Noto Sans Batak Regular", + "postscriptName": "NotoSansBatak-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Batak", + "fullName": "Noto Sans Batak Regular", + "postscriptName": "NotoSansBatak-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "notoSansBengali": { + "familyName": "Noto Sans Bengali", + "fullName": "Noto Sans Bengali Regular", + "postscriptName": "NotoSansBengali-Regular", + "category": "sans-serif", + "capHeight": 622, + "ascent": 917, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Bengali", + "fullName": "Noto Sans Bengali Thin", + "postscriptName": "NotoSansBengali-Thin", + "category": "sans-serif", + "capHeight": 622, + "ascent": 917, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Sans Bengali", + "fullName": "Noto Sans Bengali ExtraLight", + "postscriptName": "NotoSansBengali-ExtraLight", + "category": "sans-serif", + "capHeight": 622, + "ascent": 917, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Sans Bengali", + "fullName": "Noto Sans Bengali Light", + "postscriptName": "NotoSansBengali-Light", + "category": "sans-serif", + "capHeight": 622, + "ascent": 917, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Sans Bengali", + "fullName": "Noto Sans Bengali Medium", + "postscriptName": "NotoSansBengali-Medium", + "category": "sans-serif", + "capHeight": 622, + "ascent": 917, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Bengali", + "fullName": "Noto Sans Bengali SemiBold", + "postscriptName": "NotoSansBengali-SemiBold", + "category": "sans-serif", + "capHeight": 622, + "ascent": 917, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Bengali", + "fullName": "Noto Sans Bengali Bold", + "postscriptName": "NotoSansBengali-Bold", + "category": "sans-serif", + "capHeight": 622, + "ascent": 917, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Sans Bengali", + "fullName": "Noto Sans Bengali ExtraBold", + "postscriptName": "NotoSansBengali-ExtraBold", + "category": "sans-serif", + "capHeight": 622, + "ascent": 917, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 513, + "subsets": { + "latin": { + "xWidthAvg": 513 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Sans Bengali", + "fullName": "Noto Sans Bengali Black", + "postscriptName": "NotoSansBengali-Black", + "category": "sans-serif", + "capHeight": 622, + "ascent": 917, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 522, + "subsets": { + "latin": { + "xWidthAvg": 522 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Bengali", + "fullName": "Noto Sans Bengali Regular", + "postscriptName": "NotoSansBengali-Regular", + "category": "sans-serif", + "capHeight": 622, + "ascent": 917, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansBhaiksuki": { + "familyName": "Noto Sans Bhaiksuki", + "fullName": "Noto Sans Bhaiksuki Regular", + "postscriptName": "NotoSansBhaiksuki-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 960, + "descent": -460, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Bhaiksuki", + "fullName": "Noto Sans Bhaiksuki Regular", + "postscriptName": "NotoSansBhaiksuki-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 960, + "descent": -460, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansBrahmi": { + "familyName": "Noto Sans Brahmi", + "fullName": "Noto Sans Brahmi Regular", + "postscriptName": "NotoSansBrahmi-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -306, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Brahmi", + "fullName": "Noto Sans Brahmi Regular", + "postscriptName": "NotoSansBrahmi-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -306, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansBuginese": { + "familyName": "Noto Sans Buginese", + "fullName": "Noto Sans Buginese Regular", + "postscriptName": "NotoSansBuginese-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Buginese", + "fullName": "Noto Sans Buginese Regular", + "postscriptName": "NotoSansBuginese-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansBuhid": { + "familyName": "Noto Sans Buhid", + "fullName": "Noto Sans Buhid Regular", + "postscriptName": "NotoSansBuhid-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Buhid", + "fullName": "Noto Sans Buhid Regular", + "postscriptName": "NotoSansBuhid-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansCanadianAboriginal": { + "familyName": "Noto Sans Canadian Aboriginal", + "fullName": "Noto Sans Canadian Aboriginal Regular", + "postscriptName": "NotoSansCanadianAboriginal-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Canadian Aboriginal", + "fullName": "Noto Sans Canadian Aboriginal Thin", + "postscriptName": "NotoSansCanadianAboriginal-Thin", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Sans Canadian Aboriginal", + "fullName": "Noto Sans Canadian Aboriginal ExtraLight", + "postscriptName": "NotoSansCanadianAboriginal-ExtraLight", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Sans Canadian Aboriginal", + "fullName": "Noto Sans Canadian Aboriginal Light", + "postscriptName": "NotoSansCanadianAboriginal-Light", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 491, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Sans Canadian Aboriginal", + "fullName": "Noto Sans Canadian Aboriginal Medium", + "postscriptName": "NotoSansCanadianAboriginal-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 503, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Canadian Aboriginal", + "fullName": "Noto Sans Canadian Aboriginal SemiBold", + "postscriptName": "NotoSansCanadianAboriginal-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 497, + "subsets": { + "latin": { + "xWidthAvg": 497 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Canadian Aboriginal", + "fullName": "Noto Sans Canadian Aboriginal Bold", + "postscriptName": "NotoSansCanadianAboriginal-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 509, + "xWidthAvg": 508, + "subsets": { + "latin": { + "xWidthAvg": 508 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Sans Canadian Aboriginal", + "fullName": "Noto Sans Canadian Aboriginal ExtraBold", + "postscriptName": "NotoSansCanadianAboriginal-ExtraBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 516, + "subsets": { + "latin": { + "xWidthAvg": 516 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Sans Canadian Aboriginal", + "fullName": "Noto Sans Canadian Aboriginal Black", + "postscriptName": "NotoSansCanadianAboriginal-Black", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 526, + "subsets": { + "latin": { + "xWidthAvg": 526 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Canadian Aboriginal", + "fullName": "Noto Sans Canadian Aboriginal Regular", + "postscriptName": "NotoSansCanadianAboriginal-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansCarian": { + "familyName": "Noto Sans Carian", + "fullName": "Noto Sans Carian Regular", + "postscriptName": "NotoSansCarian-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Carian", + "fullName": "Noto Sans Carian Regular", + "postscriptName": "NotoSansCarian-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "notoSansCaucasianAlbanian": { + "familyName": "Noto Sans Caucasian Albanian", + "fullName": "Noto Sans Caucasian Albanian Regular", + "postscriptName": "NotoSansCaucasianAlbanian-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 976, + "descent": -274, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 410, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Caucasian Albanian", + "fullName": "Noto Sans Caucasian Albanian Regular", + "postscriptName": "NotoSansCaucasianAlbanian-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 976, + "descent": -274, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 410, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansChakma": { + "familyName": "Noto Sans Chakma", + "fullName": "Noto Sans Chakma Regular", + "postscriptName": "NotoSansChakma-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1140, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Chakma", + "fullName": "Noto Sans Chakma Regular", + "postscriptName": "NotoSansChakma-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1140, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansCham": { + "familyName": "Noto Sans Cham", + "fullName": "Noto Sans Cham Regular", + "postscriptName": "NotoSansCham-Regular", + "category": "sans-serif", + "capHeight": 594, + "ascent": 1117, + "descent": -351, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Cham", + "fullName": "Noto Sans Cham Thin", + "postscriptName": "NotoSansCham-Thin", + "category": "sans-serif", + "capHeight": 556, + "ascent": 1117, + "descent": -351, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Sans Cham", + "fullName": "Noto Sans Cham ExtraLight", + "postscriptName": "NotoSansCham-ExtraLight", + "category": "sans-serif", + "capHeight": 564, + "ascent": 1117, + "descent": -351, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Sans Cham", + "fullName": "Noto Sans Cham Light", + "postscriptName": "NotoSansCham-Light", + "category": "sans-serif", + "capHeight": 575, + "ascent": 1117, + "descent": -351, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Sans Cham", + "fullName": "Noto Sans Cham Medium", + "postscriptName": "NotoSansCham-Medium", + "category": "sans-serif", + "capHeight": 605, + "ascent": 1117, + "descent": -351, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Cham", + "fullName": "Noto Sans Cham SemiBold", + "postscriptName": "NotoSansCham-SemiBold", + "category": "sans-serif", + "capHeight": 616, + "ascent": 1117, + "descent": -351, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Cham", + "fullName": "Noto Sans Cham Bold", + "postscriptName": "NotoSansCham-Bold", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1117, + "descent": -351, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Sans Cham", + "fullName": "Noto Sans Cham ExtraBold", + "postscriptName": "NotoSansCham-ExtraBold", + "category": "sans-serif", + "capHeight": 641, + "ascent": 1117, + "descent": -351, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 511, + "subsets": { + "latin": { + "xWidthAvg": 511 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Sans Cham", + "fullName": "Noto Sans Cham Black", + "postscriptName": "NotoSansCham-Black", + "category": "sans-serif", + "capHeight": 653, + "ascent": 1117, + "descent": -351, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 521, + "subsets": { + "latin": { + "xWidthAvg": 521 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Cham", + "fullName": "Noto Sans Cham Regular", + "postscriptName": "NotoSansCham-Regular", + "category": "sans-serif", + "capHeight": 594, + "ascent": 1117, + "descent": -351, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansCherokee": { + "familyName": "Noto Sans Cherokee", + "fullName": "Noto Sans Cherokee Regular", + "postscriptName": "NotoSansCherokee-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 535, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Cherokee", + "fullName": "Noto Sans Cherokee Thin", + "postscriptName": "NotoSansCherokee-Thin", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 535, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Sans Cherokee", + "fullName": "Noto Sans Cherokee ExtraLight", + "postscriptName": "NotoSansCherokee-ExtraLight", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 535, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Sans Cherokee", + "fullName": "Noto Sans Cherokee Light", + "postscriptName": "NotoSansCherokee-Light", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 535, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Sans Cherokee", + "fullName": "Noto Sans Cherokee Medium", + "postscriptName": "NotoSansCherokee-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 535, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Cherokee", + "fullName": "Noto Sans Cherokee SemiBold", + "postscriptName": "NotoSansCherokee-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 535, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Cherokee", + "fullName": "Noto Sans Cherokee Bold", + "postscriptName": "NotoSansCherokee-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 535, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Sans Cherokee", + "fullName": "Noto Sans Cherokee ExtraBold", + "postscriptName": "NotoSansCherokee-ExtraBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 535, + "xWidthAvg": 513, + "subsets": { + "latin": { + "xWidthAvg": 513 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Sans Cherokee", + "fullName": "Noto Sans Cherokee Black", + "postscriptName": "NotoSansCherokee-Black", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 535, + "xWidthAvg": 524, + "subsets": { + "latin": { + "xWidthAvg": 524 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Cherokee", + "fullName": "Noto Sans Cherokee Regular", + "postscriptName": "NotoSansCherokee-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 535, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansChorasmian": { + "familyName": "Noto Sans Chorasmian", + "fullName": "Noto Sans Chorasmian Regular", + "postscriptName": "NotoSansChorasmian-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Chorasmian", + "fullName": "Noto Sans Chorasmian Regular", + "postscriptName": "NotoSansChorasmian-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansCoptic": { + "familyName": "Noto Sans Coptic", + "fullName": "Noto Sans Coptic Regular", + "postscriptName": "NotoSansCoptic-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Coptic", + "fullName": "Noto Sans Coptic Regular", + "postscriptName": "NotoSansCoptic-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansCuneiform": { + "familyName": "Noto Sans Cuneiform", + "fullName": "Noto Sans Cuneiform Regular", + "postscriptName": "NotoSansCuneiform-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1596, + "descent": -690, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Cuneiform", + "fullName": "Noto Sans Cuneiform Regular", + "postscriptName": "NotoSansCuneiform-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1596, + "descent": -690, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansCypriot": { + "familyName": "Noto Sans Cypriot", + "fullName": "Noto Sans Cypriot Regular", + "postscriptName": "NotoSansCypriot-Regular", + "category": "sans-serif", + "capHeight": 736, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Cypriot", + "fullName": "Noto Sans Cypriot Regular", + "postscriptName": "NotoSansCypriot-Regular", + "category": "sans-serif", + "capHeight": 736, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansCyproMinoan": { + "familyName": "Noto Sans Cypro Minoan", + "fullName": "Noto Sans Cypro Minoan Regular", + "postscriptName": "NotoSansCyproMinoan-Regular", + "category": "sans-serif", + "capHeight": 800, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Cypro Minoan", + "fullName": "Noto Sans Cypro Minoan Regular", + "postscriptName": "NotoSansCyproMinoan-Regular", + "category": "sans-serif", + "capHeight": 800, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansDeseret": { + "familyName": "Noto Sans Deseret", + "fullName": "Noto Sans Deseret Regular", + "postscriptName": "NotoSansDeseret-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Deseret", + "fullName": "Noto Sans Deseret Regular", + "postscriptName": "NotoSansDeseret-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansDevanagari": { + "familyName": "Noto Sans Devanagari", + "fullName": "Noto Sans Devanagari Regular", + "postscriptName": "NotoSansDevanagari-Regular", + "category": "sans-serif", + "capHeight": 622, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Devanagari", + "fullName": "Noto Sans Devanagari Thin", + "postscriptName": "NotoSansDevanagari-Thin", + "category": "sans-serif", + "capHeight": 622, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Sans Devanagari", + "fullName": "Noto Sans Devanagari ExtraLight", + "postscriptName": "NotoSansDevanagari-ExtraLight", + "category": "sans-serif", + "capHeight": 622, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Sans Devanagari", + "fullName": "Noto Sans Devanagari Light", + "postscriptName": "NotoSansDevanagari-Light", + "category": "sans-serif", + "capHeight": 622, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Sans Devanagari", + "fullName": "Noto Sans Devanagari Medium", + "postscriptName": "NotoSansDevanagari-Medium", + "category": "sans-serif", + "capHeight": 622, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Devanagari", + "fullName": "Noto Sans Devanagari SemiBold", + "postscriptName": "NotoSansDevanagari-SemiBold", + "category": "sans-serif", + "capHeight": 622, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Devanagari", + "fullName": "Noto Sans Devanagari Bold", + "postscriptName": "NotoSansDevanagari-Bold", + "category": "sans-serif", + "capHeight": 622, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Sans Devanagari", + "fullName": "Noto Sans Devanagari ExtraBold", + "postscriptName": "NotoSansDevanagari-ExtraBold", + "category": "sans-serif", + "capHeight": 622, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 511, + "subsets": { + "latin": { + "xWidthAvg": 511 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Sans Devanagari", + "fullName": "Noto Sans Devanagari Black", + "postscriptName": "NotoSansDevanagari-Black", + "category": "sans-serif", + "capHeight": 622, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 521, + "subsets": { + "latin": { + "xWidthAvg": 521 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Devanagari", + "fullName": "Noto Sans Devanagari Regular", + "postscriptName": "NotoSansDevanagari-Regular", + "category": "sans-serif", + "capHeight": 622, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansDisplay": { + "familyName": "Noto Sans Display", + "fullName": "Noto Sans Display Regular", + "postscriptName": "NotoSansDisplay-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 563 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Display", + "fullName": "Noto Sans Display Thin", + "postscriptName": "NotoSansDisplay-Thin", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 528, + "xWidthAvg": 414, + "subsets": { + "latin": { + "xWidthAvg": 414 + }, + "thai": { + "xWidthAvg": 563 + } + } + }, + "200": { + "familyName": "Noto Sans Display", + "fullName": "Noto Sans Display ExtraLight", + "postscriptName": "NotoSansDisplay-ExtraLight", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 421, + "subsets": { + "latin": { + "xWidthAvg": 421 + }, + "thai": { + "xWidthAvg": 563 + } + } + }, + "300": { + "familyName": "Noto Sans Display", + "fullName": "Noto Sans Display Light", + "postscriptName": "NotoSansDisplay-Light", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 532, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 563 + } + } + }, + "500": { + "familyName": "Noto Sans Display", + "fullName": "Noto Sans Display Medium", + "postscriptName": "NotoSansDisplay-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 539, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 561 + } + } + }, + "600": { + "familyName": "Noto Sans Display", + "fullName": "Noto Sans Display SemiBold", + "postscriptName": "NotoSansDisplay-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 542, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 558 + } + } + }, + "700": { + "familyName": "Noto Sans Display", + "fullName": "Noto Sans Display Bold", + "postscriptName": "NotoSansDisplay-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 555 + } + } + }, + "800": { + "familyName": "Noto Sans Display", + "fullName": "Noto Sans Display ExtraBold", + "postscriptName": "NotoSansDisplay-ExtraBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 549, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 547 + } + } + }, + "900": { + "familyName": "Noto Sans Display", + "fullName": "Noto Sans Display Black", + "postscriptName": "NotoSansDisplay-Black", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 537 + } + } + }, + "regular": { + "familyName": "Noto Sans Display", + "fullName": "Noto Sans Display Regular", + "postscriptName": "NotoSansDisplay-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 563 + } + } + }, + "italic": { + "familyName": "Noto Sans Display", + "fullName": "Noto Sans Display Italic", + "postscriptName": "NotoSansDisplay-Italic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 570 + } + } + }, + "900italic": { + "familyName": "Noto Sans Display", + "fullName": "Noto Sans Display Black Italic", + "postscriptName": "NotoSansDisplay-BlackItalic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 570 + } + } + }, + "800italic": { + "familyName": "Noto Sans Display", + "fullName": "Noto Sans Display ExtraBold Italic", + "postscriptName": "NotoSansDisplay-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 549, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 570 + } + } + }, + "700italic": { + "familyName": "Noto Sans Display", + "fullName": "Noto Sans Display Bold Italic", + "postscriptName": "NotoSansDisplay-BoldItalic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 570 + } + } + }, + "600italic": { + "familyName": "Noto Sans Display", + "fullName": "Noto Sans Display SemiBold Italic", + "postscriptName": "NotoSansDisplay-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 542, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 570 + } + } + }, + "500italic": { + "familyName": "Noto Sans Display", + "fullName": "Noto Sans Display Medium Italic", + "postscriptName": "NotoSansDisplay-MediumItalic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 539, + "xWidthAvg": 436, + "subsets": { + "latin": { + "xWidthAvg": 436 + }, + "thai": { + "xWidthAvg": 570 + } + } + }, + "300italic": { + "familyName": "Noto Sans Display", + "fullName": "Noto Sans Display Light Italic", + "postscriptName": "NotoSansDisplay-LightItalic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 532, + "xWidthAvg": 417, + "subsets": { + "latin": { + "xWidthAvg": 417 + }, + "thai": { + "xWidthAvg": 570 + } + } + }, + "200italic": { + "familyName": "Noto Sans Display", + "fullName": "Noto Sans Display ExtraLight Italic", + "postscriptName": "NotoSansDisplay-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 410, + "subsets": { + "latin": { + "xWidthAvg": 410 + }, + "thai": { + "xWidthAvg": 570 + } + } + }, + "100italic": { + "familyName": "Noto Sans Display", + "fullName": "Noto Sans Display Thin Italic", + "postscriptName": "NotoSansDisplay-ThinItalic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 528, + "xWidthAvg": 407, + "subsets": { + "latin": { + "xWidthAvg": 407 + }, + "thai": { + "xWidthAvg": 570 + } + } + } + } + }, + "notoSansDuployan": { + "familyName": "Noto Sans Duployan", + "fullName": "Noto Sans Duployan Regular", + "postscriptName": "NotoSansDuployan-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 601 + } + }, + "variants": { + "700": { + "familyName": "Noto Sans Duployan", + "fullName": "Noto Sans Duployan Bold", + "postscriptName": "NotoSansDuployan-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 601 + } + } + }, + "regular": { + "familyName": "Noto Sans Duployan", + "fullName": "Noto Sans Duployan Regular", + "postscriptName": "NotoSansDuployan-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 601 + } + } + } + } + }, + "notoSansEgyptianHieroglyphs": { + "familyName": "Noto Sans Egyptian Hieroglyphs", + "fullName": "Noto Sans Egyptian Hieroglyphs Regular", + "postscriptName": "NotoSansEgyptianHieroglyphs-Regular", + "category": "sans-serif", + "capHeight": 900, + "ascent": 1324, + "descent": -326, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Egyptian Hieroglyphs", + "fullName": "Noto Sans Egyptian Hieroglyphs Regular", + "postscriptName": "NotoSansEgyptianHieroglyphs-Regular", + "category": "sans-serif", + "capHeight": 900, + "ascent": 1324, + "descent": -326, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansElbasan": { + "familyName": "Noto Sans Elbasan", + "fullName": "Noto Sans Elbasan Regular", + "postscriptName": "NotoSansElbasan-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 847, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 560, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Elbasan", + "fullName": "Noto Sans Elbasan Regular", + "postscriptName": "NotoSansElbasan-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 847, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 560, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansElymaic": { + "familyName": "Noto Sans Elymaic", + "fullName": "Noto Sans Elymaic Regular", + "postscriptName": "NotoSansElymaic-Regular", + "category": "sans-serif", + "capHeight": 570, + "ascent": 920, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 570, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Elymaic", + "fullName": "Noto Sans Elymaic Regular", + "postscriptName": "NotoSansElymaic-Regular", + "category": "sans-serif", + "capHeight": 570, + "ascent": 920, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 570, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansEthiopic": { + "familyName": "Noto Sans Ethiopic", + "fullName": "Noto Sans Ethiopic Regular", + "postscriptName": "NotoSansEthiopic-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Ethiopic", + "fullName": "Noto Sans Ethiopic Thin", + "postscriptName": "NotoSansEthiopic-Thin", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Sans Ethiopic", + "fullName": "Noto Sans Ethiopic ExtraLight", + "postscriptName": "NotoSansEthiopic-ExtraLight", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Sans Ethiopic", + "fullName": "Noto Sans Ethiopic Light", + "postscriptName": "NotoSansEthiopic-Light", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Sans Ethiopic", + "fullName": "Noto Sans Ethiopic Medium", + "postscriptName": "NotoSansEthiopic-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Ethiopic", + "fullName": "Noto Sans Ethiopic SemiBold", + "postscriptName": "NotoSansEthiopic-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Ethiopic", + "fullName": "Noto Sans Ethiopic Bold", + "postscriptName": "NotoSansEthiopic-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Sans Ethiopic", + "fullName": "Noto Sans Ethiopic ExtraBold", + "postscriptName": "NotoSansEthiopic-ExtraBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Sans Ethiopic", + "fullName": "Noto Sans Ethiopic Black", + "postscriptName": "NotoSansEthiopic-Black", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 521, + "subsets": { + "latin": { + "xWidthAvg": 521 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Ethiopic", + "fullName": "Noto Sans Ethiopic Regular", + "postscriptName": "NotoSansEthiopic-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansGeorgian": { + "familyName": "Noto Sans Georgian", + "fullName": "Noto Sans Georgian Regular", + "postscriptName": "NotoSansGeorgian-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Georgian", + "fullName": "Noto Sans Georgian Thin", + "postscriptName": "NotoSansGeorgian-Thin", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 528, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Sans Georgian", + "fullName": "Noto Sans Georgian ExtraLight", + "postscriptName": "NotoSansGeorgian-ExtraLight", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Sans Georgian", + "fullName": "Noto Sans Georgian Light", + "postscriptName": "NotoSansGeorgian-Light", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 532, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Sans Georgian", + "fullName": "Noto Sans Georgian Medium", + "postscriptName": "NotoSansGeorgian-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 539, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Georgian", + "fullName": "Noto Sans Georgian SemiBold", + "postscriptName": "NotoSansGeorgian-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 542, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Georgian", + "fullName": "Noto Sans Georgian Bold", + "postscriptName": "NotoSansGeorgian-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Sans Georgian", + "fullName": "Noto Sans Georgian ExtraBold", + "postscriptName": "NotoSansGeorgian-ExtraBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 549, + "xWidthAvg": 511, + "subsets": { + "latin": { + "xWidthAvg": 511 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Sans Georgian", + "fullName": "Noto Sans Georgian Black", + "postscriptName": "NotoSansGeorgian-Black", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 521, + "subsets": { + "latin": { + "xWidthAvg": 521 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Georgian", + "fullName": "Noto Sans Georgian Regular", + "postscriptName": "NotoSansGeorgian-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansGlagolitic": { + "familyName": "Noto Sans Glagolitic", + "fullName": "Noto Sans Glagolitic Regular", + "postscriptName": "NotoSansGlagolitic-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Glagolitic", + "fullName": "Noto Sans Glagolitic Regular", + "postscriptName": "NotoSansGlagolitic-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "notoSansGothic": { + "familyName": "Noto Sans Gothic", + "fullName": "Noto Sans Gothic Regular", + "postscriptName": "NotoSansGothic-Regular", + "category": "sans-serif", + "capHeight": 646, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Gothic", + "fullName": "Noto Sans Gothic Regular", + "postscriptName": "NotoSansGothic-Regular", + "category": "sans-serif", + "capHeight": 646, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansGrantha": { + "familyName": "Noto Sans Grantha", + "fullName": "Noto Sans Grantha Regular", + "postscriptName": "NotoSansGrantha-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1290, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 566, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Grantha", + "fullName": "Noto Sans Grantha Regular", + "postscriptName": "NotoSansGrantha-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1290, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 566, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansGujarati": { + "familyName": "Noto Sans Gujarati", + "fullName": "Noto Sans Gujarati Regular", + "postscriptName": "NotoSansGujarati-Regular", + "category": "sans-serif", + "capHeight": 592, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Gujarati", + "fullName": "Noto Sans Gujarati Thin", + "postscriptName": "NotoSansGujarati-Thin", + "category": "sans-serif", + "capHeight": 592, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Sans Gujarati", + "fullName": "Noto Sans Gujarati ExtraLight", + "postscriptName": "NotoSansGujarati-ExtraLight", + "category": "sans-serif", + "capHeight": 592, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Sans Gujarati", + "fullName": "Noto Sans Gujarati Light", + "postscriptName": "NotoSansGujarati-Light", + "category": "sans-serif", + "capHeight": 592, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Sans Gujarati", + "fullName": "Noto Sans Gujarati Medium", + "postscriptName": "NotoSansGujarati-Medium", + "category": "sans-serif", + "capHeight": 592, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Gujarati", + "fullName": "Noto Sans Gujarati SemiBold", + "postscriptName": "NotoSansGujarati-SemiBold", + "category": "sans-serif", + "capHeight": 592, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Gujarati", + "fullName": "Noto Sans Gujarati Bold", + "postscriptName": "NotoSansGujarati-Bold", + "category": "sans-serif", + "capHeight": 592, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Sans Gujarati", + "fullName": "Noto Sans Gujarati ExtraBold", + "postscriptName": "NotoSansGujarati-ExtraBold", + "category": "sans-serif", + "capHeight": 592, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Sans Gujarati", + "fullName": "Noto Sans Gujarati Black", + "postscriptName": "NotoSansGujarati-Black", + "category": "sans-serif", + "capHeight": 592, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 521, + "subsets": { + "latin": { + "xWidthAvg": 521 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Gujarati", + "fullName": "Noto Sans Gujarati Regular", + "postscriptName": "NotoSansGujarati-Regular", + "category": "sans-serif", + "capHeight": 592, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansGunjalaGondi": { + "familyName": "Noto Sans Gunjala Gondi", + "fullName": "Noto Sans Gunjala Gondi Regular", + "postscriptName": "NotoSansGunjalaGondi-Regular", + "category": "sans-serif", + "capHeight": 622, + "ascent": 1014, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 561, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 4556 + } + }, + "variants": { + "500": { + "familyName": "Noto Sans Gunjala Gondi", + "fullName": "Noto Sans Gunjala Gondi Medium", + "postscriptName": "NotoSansGunjalaGondi-Medium", + "category": "sans-serif", + "capHeight": 622, + "ascent": 1014, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 561, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 4556 + } + } + }, + "600": { + "familyName": "Noto Sans Gunjala Gondi", + "fullName": "Noto Sans Gunjala Gondi SemiBold", + "postscriptName": "NotoSansGunjalaGondi-SemiBold", + "category": "sans-serif", + "capHeight": 622, + "ascent": 1014, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 561, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 4556 + } + } + }, + "700": { + "familyName": "Noto Sans Gunjala Gondi", + "fullName": "Noto Sans Gunjala Gondi Bold", + "postscriptName": "NotoSansGunjalaGondi-Bold", + "category": "sans-serif", + "capHeight": 622, + "ascent": 1014, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 561, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 4556 + } + } + }, + "regular": { + "familyName": "Noto Sans Gunjala Gondi", + "fullName": "Noto Sans Gunjala Gondi Regular", + "postscriptName": "NotoSansGunjalaGondi-Regular", + "category": "sans-serif", + "capHeight": 622, + "ascent": 1014, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 561, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 4556 + } + } + } + } + }, + "notoSansGurmukhi": { + "familyName": "Noto Sans Gurmukhi", + "fullName": "Noto Sans Gurmukhi Regular", + "postscriptName": "NotoSansGurmukhi-Regular", + "category": "sans-serif", + "capHeight": 622, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 622, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Gurmukhi", + "fullName": "Noto Sans Gurmukhi Thin", + "postscriptName": "NotoSansGurmukhi-Thin", + "category": "sans-serif", + "capHeight": 622, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 622, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Sans Gurmukhi", + "fullName": "Noto Sans Gurmukhi ExtraLight", + "postscriptName": "NotoSansGurmukhi-ExtraLight", + "category": "sans-serif", + "capHeight": 622, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 622, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Sans Gurmukhi", + "fullName": "Noto Sans Gurmukhi Light", + "postscriptName": "NotoSansGurmukhi-Light", + "category": "sans-serif", + "capHeight": 622, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 622, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Sans Gurmukhi", + "fullName": "Noto Sans Gurmukhi Medium", + "postscriptName": "NotoSansGurmukhi-Medium", + "category": "sans-serif", + "capHeight": 622, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 622, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Gurmukhi", + "fullName": "Noto Sans Gurmukhi SemiBold", + "postscriptName": "NotoSansGurmukhi-SemiBold", + "category": "sans-serif", + "capHeight": 622, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 622, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Gurmukhi", + "fullName": "Noto Sans Gurmukhi Bold", + "postscriptName": "NotoSansGurmukhi-Bold", + "category": "sans-serif", + "capHeight": 622, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 622, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Sans Gurmukhi", + "fullName": "Noto Sans Gurmukhi ExtraBold", + "postscriptName": "NotoSansGurmukhi-ExtraBold", + "category": "sans-serif", + "capHeight": 622, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 622, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Sans Gurmukhi", + "fullName": "Noto Sans Gurmukhi Black", + "postscriptName": "NotoSansGurmukhi-Black", + "category": "sans-serif", + "capHeight": 622, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 622, + "xWidthAvg": 522, + "subsets": { + "latin": { + "xWidthAvg": 522 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Gurmukhi", + "fullName": "Noto Sans Gurmukhi Regular", + "postscriptName": "NotoSansGurmukhi-Regular", + "category": "sans-serif", + "capHeight": 622, + "ascent": 896, + "descent": -408, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 622, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansHK": { + "familyName": "Noto Sans HK", + "fullName": "Noto Sans HK Regular", + "postscriptName": "NotoSansHK-Regular", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans HK", + "fullName": "Noto Sans HK Thin", + "postscriptName": "NotoSansHK-Thin", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "200": { + "familyName": "Noto Sans HK", + "fullName": "Noto Sans HK ExtraLight", + "postscriptName": "NotoSansHK-ExtraLight", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "300": { + "familyName": "Noto Sans HK", + "fullName": "Noto Sans HK Light", + "postscriptName": "NotoSansHK-Light", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "500": { + "familyName": "Noto Sans HK", + "fullName": "Noto Sans HK Medium", + "postscriptName": "NotoSansHK-Medium", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "600": { + "familyName": "Noto Sans HK", + "fullName": "Noto Sans HK SemiBold", + "postscriptName": "NotoSansHK-SemiBold", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "Noto Sans HK", + "fullName": "Noto Sans HK Bold", + "postscriptName": "NotoSansHK-Bold", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "800": { + "familyName": "Noto Sans HK", + "fullName": "Noto Sans HK ExtraBold", + "postscriptName": "NotoSansHK-ExtraBold", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "900": { + "familyName": "Noto Sans HK", + "fullName": "Noto Sans HK Black", + "postscriptName": "NotoSansHK-Black", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 511, + "subsets": { + "latin": { + "xWidthAvg": 511 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Noto Sans HK", + "fullName": "Noto Sans HK Regular", + "postscriptName": "NotoSansHK-Regular", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "notoSansHanifiRohingya": { + "familyName": "Noto Sans Hanifi Rohingya", + "fullName": "Noto Sans Hanifi Rohingya Regular", + "postscriptName": "NotoSansHanifiRohingya-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "500": { + "familyName": "Noto Sans Hanifi Rohingya", + "fullName": "Noto Sans Hanifi Rohingya Medium", + "postscriptName": "NotoSansHanifiRohingya-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Hanifi Rohingya", + "fullName": "Noto Sans Hanifi Rohingya SemiBold", + "postscriptName": "NotoSansHanifiRohingya-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 537, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Hanifi Rohingya", + "fullName": "Noto Sans Hanifi Rohingya Bold", + "postscriptName": "NotoSansHanifiRohingya-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 545, + "xWidthAvg": 517, + "subsets": { + "latin": { + "xWidthAvg": 517 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Hanifi Rohingya", + "fullName": "Noto Sans Hanifi Rohingya Regular", + "postscriptName": "NotoSansHanifiRohingya-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansHanunoo": { + "familyName": "Noto Sans Hanunoo", + "fullName": "Noto Sans Hanunoo Regular", + "postscriptName": "NotoSansHanunoo-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Hanunoo", + "fullName": "Noto Sans Hanunoo Regular", + "postscriptName": "NotoSansHanunoo-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansHatran": { + "familyName": "Noto Sans Hatran", + "fullName": "Noto Sans Hatran Regular", + "postscriptName": "NotoSansHatran-Regular", + "category": "sans-serif", + "capHeight": 763, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 560, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Hatran", + "fullName": "Noto Sans Hatran Regular", + "postscriptName": "NotoSansHatran-Regular", + "category": "sans-serif", + "capHeight": 763, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 560, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansHebrew": { + "familyName": "Noto Sans Hebrew", + "fullName": "Noto Sans Hebrew Regular", + "postscriptName": "NotoSansHebrew-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Hebrew", + "fullName": "Noto Sans Hebrew Thin", + "postscriptName": "NotoSansHebrew-Thin", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200": { + "familyName": "Noto Sans Hebrew", + "fullName": "Noto Sans Hebrew ExtraLight", + "postscriptName": "NotoSansHebrew-ExtraLight", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Noto Sans Hebrew", + "fullName": "Noto Sans Hebrew Light", + "postscriptName": "NotoSansHebrew-Light", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Noto Sans Hebrew", + "fullName": "Noto Sans Hebrew Medium", + "postscriptName": "NotoSansHebrew-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Noto Sans Hebrew", + "fullName": "Noto Sans Hebrew SemiBold", + "postscriptName": "NotoSansHebrew-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Noto Sans Hebrew", + "fullName": "Noto Sans Hebrew Bold", + "postscriptName": "NotoSansHebrew-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Noto Sans Hebrew", + "fullName": "Noto Sans Hebrew ExtraBold", + "postscriptName": "NotoSansHebrew-ExtraBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "Noto Sans Hebrew", + "fullName": "Noto Sans Hebrew Black", + "postscriptName": "NotoSansHebrew-Black", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 522, + "subsets": { + "latin": { + "xWidthAvg": 522 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Noto Sans Hebrew", + "fullName": "Noto Sans Hebrew Regular", + "postscriptName": "NotoSansHebrew-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "notoSansImperialAramaic": { + "familyName": "Noto Sans Imperial Aramaic", + "fullName": "Noto Sans Imperial Aramaic Regular", + "postscriptName": "NotoSansImperialAramaic-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Imperial Aramaic", + "fullName": "Noto Sans Imperial Aramaic Regular", + "postscriptName": "NotoSansImperialAramaic-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "notoSansIndicSiyaqNumbers": { + "familyName": "Noto Sans Indic Siyaq Numbers", + "fullName": "Noto Sans Indic Siyaq Numbers Regular", + "postscriptName": "NotoSansIndicSiyaqNumbers-Regular", + "category": "sans-serif", + "capHeight": 964, + "ascent": 1215, + "descent": -347, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Indic Siyaq Numbers", + "fullName": "Noto Sans Indic Siyaq Numbers Regular", + "postscriptName": "NotoSansIndicSiyaqNumbers-Regular", + "category": "sans-serif", + "capHeight": 964, + "ascent": 1215, + "descent": -347, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansInscriptionalPahlavi": { + "familyName": "Noto Sans Inscriptional Pahlavi", + "fullName": "Noto Sans Inscriptional Pahlavi Regular", + "postscriptName": "NotoSansInscriptionalPahlavi-Regular", + "category": "sans-serif", + "capHeight": 760, + "ascent": 1069, + "descent": -352, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Inscriptional Pahlavi", + "fullName": "Noto Sans Inscriptional Pahlavi Regular", + "postscriptName": "NotoSansInscriptionalPahlavi-Regular", + "category": "sans-serif", + "capHeight": 760, + "ascent": 1069, + "descent": -352, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansInscriptionalParthian": { + "familyName": "Noto Sans Inscriptional Parthian", + "fullName": "Noto Sans Inscriptional Parthian Regular", + "postscriptName": "NotoSansInscriptionalParthian-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -301, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Inscriptional Parthian", + "fullName": "Noto Sans Inscriptional Parthian Regular", + "postscriptName": "NotoSansInscriptionalParthian-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -301, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansJP": { + "familyName": "Noto Sans JP", + "fullName": "Noto Sans JP Regular", + "postscriptName": "NotoSansJP-Regular", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans JP", + "fullName": "Noto Sans JP Thin", + "postscriptName": "NotoSansJP-Thin", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "200": { + "familyName": "Noto Sans JP", + "fullName": "Noto Sans JP ExtraLight", + "postscriptName": "NotoSansJP-ExtraLight", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "300": { + "familyName": "Noto Sans JP", + "fullName": "Noto Sans JP Light", + "postscriptName": "NotoSansJP-Light", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "500": { + "familyName": "Noto Sans JP", + "fullName": "Noto Sans JP Medium", + "postscriptName": "NotoSansJP-Medium", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "600": { + "familyName": "Noto Sans JP", + "fullName": "Noto Sans JP SemiBold", + "postscriptName": "NotoSansJP-SemiBold", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "Noto Sans JP", + "fullName": "Noto Sans JP Bold", + "postscriptName": "NotoSansJP-Bold", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "800": { + "familyName": "Noto Sans JP", + "fullName": "Noto Sans JP ExtraBold", + "postscriptName": "NotoSansJP-ExtraBold", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "900": { + "familyName": "Noto Sans JP", + "fullName": "Noto Sans JP Black", + "postscriptName": "NotoSansJP-Black", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 511, + "subsets": { + "latin": { + "xWidthAvg": 511 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Noto Sans JP", + "fullName": "Noto Sans JP Regular", + "postscriptName": "NotoSansJP-Regular", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "notoSansJavanese": { + "familyName": "Noto Sans Javanese", + "fullName": "Noto Sans Javanese Regular", + "postscriptName": "NotoSansJavanese-Regular", + "category": "sans-serif", + "capHeight": 750, + "ascent": 1120, + "descent": -916, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "500": { + "familyName": "Noto Sans Javanese", + "fullName": "Noto Sans Javanese Medium", + "postscriptName": "NotoSansJavanese-Medium", + "category": "sans-serif", + "capHeight": 750, + "ascent": 1120, + "descent": -916, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Javanese", + "fullName": "Noto Sans Javanese SemiBold", + "postscriptName": "NotoSansJavanese-SemiBold", + "category": "sans-serif", + "capHeight": 750, + "ascent": 1120, + "descent": -916, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Javanese", + "fullName": "Noto Sans Javanese Bold", + "postscriptName": "NotoSansJavanese-Bold", + "category": "sans-serif", + "capHeight": 750, + "ascent": 1120, + "descent": -916, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Javanese", + "fullName": "Noto Sans Javanese Regular", + "postscriptName": "NotoSansJavanese-Regular", + "category": "sans-serif", + "capHeight": 750, + "ascent": 1120, + "descent": -916, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansKR": { + "familyName": "Noto Sans KR", + "fullName": "Noto Sans KR Regular", + "postscriptName": "NotoSansKR-Regular", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans KR", + "fullName": "Noto Sans KR Thin", + "postscriptName": "NotoSansKR-Thin", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "200": { + "familyName": "Noto Sans KR", + "fullName": "Noto Sans KR ExtraLight", + "postscriptName": "NotoSansKR-ExtraLight", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "300": { + "familyName": "Noto Sans KR", + "fullName": "Noto Sans KR Light", + "postscriptName": "NotoSansKR-Light", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "500": { + "familyName": "Noto Sans KR", + "fullName": "Noto Sans KR Medium", + "postscriptName": "NotoSansKR-Medium", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "600": { + "familyName": "Noto Sans KR", + "fullName": "Noto Sans KR SemiBold", + "postscriptName": "NotoSansKR-SemiBold", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "Noto Sans KR", + "fullName": "Noto Sans KR Bold", + "postscriptName": "NotoSansKR-Bold", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "800": { + "familyName": "Noto Sans KR", + "fullName": "Noto Sans KR ExtraBold", + "postscriptName": "NotoSansKR-ExtraBold", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "900": { + "familyName": "Noto Sans KR", + "fullName": "Noto Sans KR Black", + "postscriptName": "NotoSansKR-Black", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 511, + "subsets": { + "latin": { + "xWidthAvg": 511 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Noto Sans KR", + "fullName": "Noto Sans KR Regular", + "postscriptName": "NotoSansKR-Regular", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "notoSansKaithi": { + "familyName": "Noto Sans Kaithi", + "fullName": "Noto Sans Kaithi Regular", + "postscriptName": "NotoSansKaithi-Regular", + "category": "sans-serif", + "capHeight": 622, + "ascent": 1077, + "descent": -425, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Kaithi", + "fullName": "Noto Sans Kaithi Regular", + "postscriptName": "NotoSansKaithi-Regular", + "category": "sans-serif", + "capHeight": 622, + "ascent": 1077, + "descent": -425, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansKannada": { + "familyName": "Noto Sans Kannada", + "fullName": "Noto Sans Kannada Regular", + "postscriptName": "NotoSansKannada-Regular", + "category": "sans-serif", + "capHeight": 690, + "ascent": 809, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 551, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 599 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Kannada", + "fullName": "Noto Sans Kannada Thin", + "postscriptName": "NotoSansKannada-Thin", + "category": "sans-serif", + "capHeight": 690, + "ascent": 809, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 599 + } + } + }, + "200": { + "familyName": "Noto Sans Kannada", + "fullName": "Noto Sans Kannada ExtraLight", + "postscriptName": "NotoSansKannada-ExtraLight", + "category": "sans-serif", + "capHeight": 690, + "ascent": 809, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 542, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 599 + } + } + }, + "300": { + "familyName": "Noto Sans Kannada", + "fullName": "Noto Sans Kannada Light", + "postscriptName": "NotoSansKannada-Light", + "category": "sans-serif", + "capHeight": 690, + "ascent": 809, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 599 + } + } + }, + "500": { + "familyName": "Noto Sans Kannada", + "fullName": "Noto Sans Kannada Medium", + "postscriptName": "NotoSansKannada-Medium", + "category": "sans-serif", + "capHeight": 690, + "ascent": 809, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 551, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 599 + } + } + }, + "600": { + "familyName": "Noto Sans Kannada", + "fullName": "Noto Sans Kannada SemiBold", + "postscriptName": "NotoSansKannada-SemiBold", + "category": "sans-serif", + "capHeight": 690, + "ascent": 809, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 552, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 599 + } + } + }, + "700": { + "familyName": "Noto Sans Kannada", + "fullName": "Noto Sans Kannada Bold", + "postscriptName": "NotoSansKannada-Bold", + "category": "sans-serif", + "capHeight": 690, + "ascent": 809, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 552, + "xWidthAvg": 509, + "subsets": { + "latin": { + "xWidthAvg": 509 + }, + "thai": { + "xWidthAvg": 599 + } + } + }, + "800": { + "familyName": "Noto Sans Kannada", + "fullName": "Noto Sans Kannada ExtraBold", + "postscriptName": "NotoSansKannada-ExtraBold", + "category": "sans-serif", + "capHeight": 690, + "ascent": 809, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 562, + "xWidthAvg": 517, + "subsets": { + "latin": { + "xWidthAvg": 517 + }, + "thai": { + "xWidthAvg": 599 + } + } + }, + "900": { + "familyName": "Noto Sans Kannada", + "fullName": "Noto Sans Kannada Black", + "postscriptName": "NotoSansKannada-Black", + "category": "sans-serif", + "capHeight": 690, + "ascent": 809, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 574, + "xWidthAvg": 526, + "subsets": { + "latin": { + "xWidthAvg": 526 + }, + "thai": { + "xWidthAvg": 599 + } + } + }, + "regular": { + "familyName": "Noto Sans Kannada", + "fullName": "Noto Sans Kannada Regular", + "postscriptName": "NotoSansKannada-Regular", + "category": "sans-serif", + "capHeight": 690, + "ascent": 809, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 551, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 599 + } + } + } + } + }, + "notoSansKawi": { + "familyName": "Noto Sans Kawi", + "fullName": "Noto Sans Kawi Regular", + "postscriptName": "NotoSansKawi-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1100, + "descent": -900, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "500": { + "familyName": "Noto Sans Kawi", + "fullName": "Noto Sans Kawi Medium", + "postscriptName": "NotoSansKawi-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1100, + "descent": -900, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Noto Sans Kawi", + "fullName": "Noto Sans Kawi SemiBold", + "postscriptName": "NotoSansKawi-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1100, + "descent": -900, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Noto Sans Kawi", + "fullName": "Noto Sans Kawi Bold", + "postscriptName": "NotoSansKawi-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1100, + "descent": -900, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Noto Sans Kawi", + "fullName": "Noto Sans Kawi Regular", + "postscriptName": "NotoSansKawi-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1100, + "descent": -900, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "notoSansKayahLi": { + "familyName": "Noto Sans Kayah Li", + "fullName": "Noto Sans Kayah Li Regular", + "postscriptName": "NotoSansKayahLi-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "500": { + "familyName": "Noto Sans Kayah Li", + "fullName": "Noto Sans Kayah Li Medium", + "postscriptName": "NotoSansKayahLi-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Kayah Li", + "fullName": "Noto Sans Kayah Li SemiBold", + "postscriptName": "NotoSansKayahLi-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 491, + "subsets": { + "latin": { + "xWidthAvg": 491 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Kayah Li", + "fullName": "Noto Sans Kayah Li Bold", + "postscriptName": "NotoSansKayahLi-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Kayah Li", + "fullName": "Noto Sans Kayah Li Regular", + "postscriptName": "NotoSansKayahLi-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansKharoshthi": { + "familyName": "Noto Sans Kharoshthi", + "fullName": "Noto Sans Kharoshthi Regular", + "postscriptName": "NotoSansKharoshthi-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -301, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Kharoshthi", + "fullName": "Noto Sans Kharoshthi Regular", + "postscriptName": "NotoSansKharoshthi-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -301, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansKhmer": { + "familyName": "Noto Sans Khmer", + "fullName": "Noto Sans Khmer Regular", + "postscriptName": "NotoSansKhmer-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 634 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Khmer", + "fullName": "Noto Sans Khmer Thin", + "postscriptName": "NotoSansKhmer-Thin", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 612 + } + } + }, + "200": { + "familyName": "Noto Sans Khmer", + "fullName": "Noto Sans Khmer ExtraLight", + "postscriptName": "NotoSansKhmer-ExtraLight", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 616 + } + } + }, + "300": { + "familyName": "Noto Sans Khmer", + "fullName": "Noto Sans Khmer Light", + "postscriptName": "NotoSansKhmer-Light", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 623 + } + } + }, + "500": { + "familyName": "Noto Sans Khmer", + "fullName": "Noto Sans Khmer Medium", + "postscriptName": "NotoSansKhmer-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 644 + } + } + }, + "600": { + "familyName": "Noto Sans Khmer", + "fullName": "Noto Sans Khmer SemiBold", + "postscriptName": "NotoSansKhmer-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 655 + } + } + }, + "700": { + "familyName": "Noto Sans Khmer", + "fullName": "Noto Sans Khmer Bold", + "postscriptName": "NotoSansKhmer-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 668 + } + } + }, + "800": { + "familyName": "Noto Sans Khmer", + "fullName": "Noto Sans Khmer ExtraBold", + "postscriptName": "NotoSansKhmer-ExtraBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 511, + "subsets": { + "latin": { + "xWidthAvg": 511 + }, + "thai": { + "xWidthAvg": 677 + } + } + }, + "900": { + "familyName": "Noto Sans Khmer", + "fullName": "Noto Sans Khmer Black", + "postscriptName": "NotoSansKhmer-Black", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 521, + "subsets": { + "latin": { + "xWidthAvg": 521 + }, + "thai": { + "xWidthAvg": 689 + } + } + }, + "regular": { + "familyName": "Noto Sans Khmer", + "fullName": "Noto Sans Khmer Regular", + "postscriptName": "NotoSansKhmer-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 634 + } + } + } + } + }, + "notoSansKhojki": { + "familyName": "Noto Sans Khojki", + "fullName": "Noto Sans Khojki Regular", + "postscriptName": "NotoSansKhojki-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1409, + "descent": -447, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 545, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Khojki", + "fullName": "Noto Sans Khojki Regular", + "postscriptName": "NotoSansKhojki-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1409, + "descent": -447, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 545, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansKhudawadi": { + "familyName": "Noto Sans Khudawadi", + "fullName": "Noto Sans Khudawadi Regular", + "postscriptName": "NotoSansKhudawadi-Regular", + "category": "sans-serif", + "capHeight": 620, + "ascent": 944, + "descent": -373, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Khudawadi", + "fullName": "Noto Sans Khudawadi Regular", + "postscriptName": "NotoSansKhudawadi-Regular", + "category": "sans-serif", + "capHeight": 620, + "ascent": 944, + "descent": -373, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansLao": { + "familyName": "Noto Sans Lao", + "fullName": "Noto Sans Lao Regular", + "postscriptName": "NotoSansLao-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1183, + "descent": -462, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 548, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 503 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Lao", + "fullName": "Noto Sans Lao Thin", + "postscriptName": "NotoSansLao-Thin", + "category": "sans-serif", + "capHeight": 745, + "ascent": 1183, + "descent": -462, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 548, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 503 + } + } + }, + "200": { + "familyName": "Noto Sans Lao", + "fullName": "Noto Sans Lao ExtraLight", + "postscriptName": "NotoSansLao-ExtraLight", + "category": "sans-serif", + "capHeight": 739, + "ascent": 1183, + "descent": -462, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 548, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 503 + } + } + }, + "300": { + "familyName": "Noto Sans Lao", + "fullName": "Noto Sans Lao Light", + "postscriptName": "NotoSansLao-Light", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1183, + "descent": -462, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 548, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 503 + } + } + }, + "500": { + "familyName": "Noto Sans Lao", + "fullName": "Noto Sans Lao Medium", + "postscriptName": "NotoSansLao-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1183, + "descent": -462, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 548, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 503 + } + } + }, + "600": { + "familyName": "Noto Sans Lao", + "fullName": "Noto Sans Lao SemiBold", + "postscriptName": "NotoSansLao-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1183, + "descent": -462, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 548, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 503 + } + } + }, + "700": { + "familyName": "Noto Sans Lao", + "fullName": "Noto Sans Lao Bold", + "postscriptName": "NotoSansLao-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1183, + "descent": -462, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 548, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 503 + } + } + }, + "800": { + "familyName": "Noto Sans Lao", + "fullName": "Noto Sans Lao ExtraBold", + "postscriptName": "NotoSansLao-ExtraBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1183, + "descent": -462, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 548, + "xWidthAvg": 511, + "subsets": { + "latin": { + "xWidthAvg": 511 + }, + "thai": { + "xWidthAvg": 503 + } + } + }, + "900": { + "familyName": "Noto Sans Lao", + "fullName": "Noto Sans Lao Black", + "postscriptName": "NotoSansLao-Black", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1183, + "descent": -462, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 548, + "xWidthAvg": 521, + "subsets": { + "latin": { + "xWidthAvg": 521 + }, + "thai": { + "xWidthAvg": 503 + } + } + }, + "regular": { + "familyName": "Noto Sans Lao", + "fullName": "Noto Sans Lao Regular", + "postscriptName": "NotoSansLao-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1183, + "descent": -462, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 548, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 503 + } + } + } + } + }, + "notoSansLaoLooped": { + "familyName": "Noto Sans Lao Looped", + "fullName": "Noto Sans Lao Looped Regular", + "postscriptName": "NotoSansLaoLooped-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1250, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Lao Looped", + "fullName": "Noto Sans Lao Looped Thin", + "postscriptName": "NotoSansLaoLooped-Thin", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1250, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 528, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Sans Lao Looped", + "fullName": "Noto Sans Lao Looped ExtraLight", + "postscriptName": "NotoSansLaoLooped-ExtraLight", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1250, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Sans Lao Looped", + "fullName": "Noto Sans Lao Looped Light", + "postscriptName": "NotoSansLaoLooped-Light", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1250, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 532, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Sans Lao Looped", + "fullName": "Noto Sans Lao Looped Medium", + "postscriptName": "NotoSansLaoLooped-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1250, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 539, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 597 + } + } + }, + "600": { + "familyName": "Noto Sans Lao Looped", + "fullName": "Noto Sans Lao Looped SemiBold", + "postscriptName": "NotoSansLaoLooped-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1250, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 542, + "xWidthAvg": 491, + "subsets": { + "latin": { + "xWidthAvg": 491 + }, + "thai": { + "xWidthAvg": 593 + } + } + }, + "700": { + "familyName": "Noto Sans Lao Looped", + "fullName": "Noto Sans Lao Looped Bold", + "postscriptName": "NotoSansLaoLooped-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1250, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 501, + "subsets": { + "latin": { + "xWidthAvg": 501 + }, + "thai": { + "xWidthAvg": 589 + } + } + }, + "800": { + "familyName": "Noto Sans Lao Looped", + "fullName": "Noto Sans Lao Looped ExtraBold", + "postscriptName": "NotoSansLaoLooped-ExtraBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1250, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 549, + "xWidthAvg": 509, + "subsets": { + "latin": { + "xWidthAvg": 509 + }, + "thai": { + "xWidthAvg": 586 + } + } + }, + "900": { + "familyName": "Noto Sans Lao Looped", + "fullName": "Noto Sans Lao Looped Black", + "postscriptName": "NotoSansLaoLooped-Black", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1250, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 518, + "subsets": { + "latin": { + "xWidthAvg": 518 + }, + "thai": { + "xWidthAvg": 582 + } + } + }, + "regular": { + "familyName": "Noto Sans Lao Looped", + "fullName": "Noto Sans Lao Looped Regular", + "postscriptName": "NotoSansLaoLooped-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1250, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansLepcha": { + "familyName": "Noto Sans Lepcha", + "fullName": "Noto Sans Lepcha Regular", + "postscriptName": "NotoSansLepcha-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Lepcha", + "fullName": "Noto Sans Lepcha Regular", + "postscriptName": "NotoSansLepcha-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansLimbu": { + "familyName": "Noto Sans Limbu", + "fullName": "Noto Sans Limbu Regular", + "postscriptName": "NotoSansLimbu-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Limbu", + "fullName": "Noto Sans Limbu Regular", + "postscriptName": "NotoSansLimbu-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansLinearA": { + "familyName": "Noto Sans Linear A", + "fullName": "Noto Sans Linear A Regular", + "postscriptName": "NotoSansLinearA-Regular", + "category": "sans-serif", + "capHeight": 800, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 661 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Linear A", + "fullName": "Noto Sans Linear A Regular", + "postscriptName": "NotoSansLinearA-Regular", + "category": "sans-serif", + "capHeight": 800, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 661 + } + } + } + } + }, + "notoSansLinearB": { + "familyName": "Noto Sans Linear B", + "fullName": "Noto Sans Linear B Regular", + "postscriptName": "NotoSansLinearB-Regular", + "category": "sans-serif", + "capHeight": 800, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Linear B", + "fullName": "Noto Sans Linear B Regular", + "postscriptName": "NotoSansLinearB-Regular", + "category": "sans-serif", + "capHeight": 800, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansLisu": { + "familyName": "Noto Sans Lisu", + "fullName": "Noto Sans Lisu Regular", + "postscriptName": "NotoSansLisu-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "500": { + "familyName": "Noto Sans Lisu", + "fullName": "Noto Sans Lisu Medium", + "postscriptName": "NotoSansLisu-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Lisu", + "fullName": "Noto Sans Lisu SemiBold", + "postscriptName": "NotoSansLisu-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Lisu", + "fullName": "Noto Sans Lisu Bold", + "postscriptName": "NotoSansLisu-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Lisu", + "fullName": "Noto Sans Lisu Regular", + "postscriptName": "NotoSansLisu-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansLycian": { + "familyName": "Noto Sans Lycian", + "fullName": "Noto Sans Lycian Regular", + "postscriptName": "NotoSansLycian-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Lycian", + "fullName": "Noto Sans Lycian Regular", + "postscriptName": "NotoSansLycian-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "notoSansLydian": { + "familyName": "Noto Sans Lydian", + "fullName": "Noto Sans Lydian Regular", + "postscriptName": "NotoSansLydian-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Lydian", + "fullName": "Noto Sans Lydian Regular", + "postscriptName": "NotoSansLydian-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "notoSansMahajani": { + "familyName": "Noto Sans Mahajani", + "fullName": "Noto Sans Mahajani Regular", + "postscriptName": "NotoSansMahajani-Regular", + "category": "sans-serif", + "capHeight": 600, + "ascent": 757, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Mahajani", + "fullName": "Noto Sans Mahajani Regular", + "postscriptName": "NotoSansMahajani-Regular", + "category": "sans-serif", + "capHeight": 600, + "ascent": 757, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansMalayalam": { + "familyName": "Noto Sans Malayalam", + "fullName": "Noto Sans Malayalam Regular", + "postscriptName": "NotoSansMalayalam-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 864, + "descent": -383, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Malayalam", + "fullName": "Noto Sans Malayalam Thin", + "postscriptName": "NotoSansMalayalam-Thin", + "category": "sans-serif", + "capHeight": 714, + "ascent": 864, + "descent": -383, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Sans Malayalam", + "fullName": "Noto Sans Malayalam ExtraLight", + "postscriptName": "NotoSansMalayalam-ExtraLight", + "category": "sans-serif", + "capHeight": 714, + "ascent": 864, + "descent": -383, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Sans Malayalam", + "fullName": "Noto Sans Malayalam Light", + "postscriptName": "NotoSansMalayalam-Light", + "category": "sans-serif", + "capHeight": 714, + "ascent": 864, + "descent": -383, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Sans Malayalam", + "fullName": "Noto Sans Malayalam Medium", + "postscriptName": "NotoSansMalayalam-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 864, + "descent": -383, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Malayalam", + "fullName": "Noto Sans Malayalam SemiBold", + "postscriptName": "NotoSansMalayalam-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 864, + "descent": -383, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Malayalam", + "fullName": "Noto Sans Malayalam Bold", + "postscriptName": "NotoSansMalayalam-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 864, + "descent": -383, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Sans Malayalam", + "fullName": "Noto Sans Malayalam ExtraBold", + "postscriptName": "NotoSansMalayalam-ExtraBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 864, + "descent": -383, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 520, + "subsets": { + "latin": { + "xWidthAvg": 520 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Sans Malayalam", + "fullName": "Noto Sans Malayalam Black", + "postscriptName": "NotoSansMalayalam-Black", + "category": "sans-serif", + "capHeight": 714, + "ascent": 864, + "descent": -383, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 529, + "subsets": { + "latin": { + "xWidthAvg": 529 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Malayalam", + "fullName": "Noto Sans Malayalam Regular", + "postscriptName": "NotoSansMalayalam-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 864, + "descent": -383, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansMandaic": { + "familyName": "Noto Sans Mandaic", + "fullName": "Noto Sans Mandaic Regular", + "postscriptName": "NotoSansMandaic-Regular", + "category": "sans-serif", + "capHeight": 694, + "ascent": 724, + "descent": -423, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Mandaic", + "fullName": "Noto Sans Mandaic Regular", + "postscriptName": "NotoSansMandaic-Regular", + "category": "sans-serif", + "capHeight": 694, + "ascent": 724, + "descent": -423, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansManichaean": { + "familyName": "Noto Sans Manichaean", + "fullName": "Noto Sans Manichaean Regular", + "postscriptName": "NotoSansManichaean-Regular", + "category": "sans-serif", + "capHeight": 625, + "ascent": 790, + "descent": -340, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 439, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Manichaean", + "fullName": "Noto Sans Manichaean Regular", + "postscriptName": "NotoSansManichaean-Regular", + "category": "sans-serif", + "capHeight": 625, + "ascent": 790, + "descent": -340, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 439, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansMarchen": { + "familyName": "Noto Sans Marchen", + "fullName": "Noto Sans Marchen Regular", + "postscriptName": "NotoSansMarchen-Regular", + "category": "sans-serif", + "capHeight": 678, + "ascent": 1107, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 678, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Marchen", + "fullName": "Noto Sans Marchen Regular", + "postscriptName": "NotoSansMarchen-Regular", + "category": "sans-serif", + "capHeight": 678, + "ascent": 1107, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 678, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansMasaramGondi": { + "familyName": "Noto Sans Masaram Gondi", + "fullName": "Noto Sans Masaram Gondi Regular", + "postscriptName": "NotoSansMasaramGondi-Regular", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 357, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Masaram Gondi", + "fullName": "Noto Sans Masaram Gondi Regular", + "postscriptName": "NotoSansMasaramGondi-Regular", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 357, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansMath": { + "familyName": "Noto Sans Math", + "fullName": "Noto Sans Math Regular", + "postscriptName": "NotoSansMath-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -423, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Math", + "fullName": "Noto Sans Math Regular", + "postscriptName": "NotoSansMath-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -423, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansMayanNumerals": { + "familyName": "Noto Sans Mayan Numerals", + "fullName": "Noto Sans Mayan Numerals Regular", + "postscriptName": "NotoSansMayanNumerals-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Mayan Numerals", + "fullName": "Noto Sans Mayan Numerals Regular", + "postscriptName": "NotoSansMayanNumerals-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansMedefaidrin": { + "familyName": "Noto Sans Medefaidrin", + "fullName": "Noto Sans Medefaidrin Regular", + "postscriptName": "NotoSansMedefaidrin-Regular", + "category": "sans-serif", + "capHeight": 713, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 490 + } + }, + "variants": { + "500": { + "familyName": "Noto Sans Medefaidrin", + "fullName": "Noto Sans Medefaidrin Medium", + "postscriptName": "NotoSansMedefaidrin-Medium", + "category": "sans-serif", + "capHeight": 713, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 494 + } + } + }, + "600": { + "familyName": "Noto Sans Medefaidrin", + "fullName": "Noto Sans Medefaidrin SemiBold", + "postscriptName": "NotoSansMedefaidrin-SemiBold", + "category": "sans-serif", + "capHeight": 713, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 498 + } + } + }, + "700": { + "familyName": "Noto Sans Medefaidrin", + "fullName": "Noto Sans Medefaidrin Bold", + "postscriptName": "NotoSansMedefaidrin-Bold", + "category": "sans-serif", + "capHeight": 713, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 503 + } + } + }, + "regular": { + "familyName": "Noto Sans Medefaidrin", + "fullName": "Noto Sans Medefaidrin Regular", + "postscriptName": "NotoSansMedefaidrin-Regular", + "category": "sans-serif", + "capHeight": 713, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 490 + } + } + } + } + }, + "notoSansMeeteiMayek": { + "familyName": "Noto Sans Meetei Mayek", + "fullName": "Noto Sans Meetei Mayek Regular", + "postscriptName": "NotoSansMeeteiMayek-Regular", + "category": "sans-serif", + "capHeight": 659, + "ascent": 1069, + "descent": -321, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Meetei Mayek", + "fullName": "Noto Sans Meetei Mayek Thin", + "postscriptName": "NotoSansMeeteiMayek-Thin", + "category": "sans-serif", + "capHeight": 659, + "ascent": 1069, + "descent": -321, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Sans Meetei Mayek", + "fullName": "Noto Sans Meetei Mayek ExtraLight", + "postscriptName": "NotoSansMeeteiMayek-ExtraLight", + "category": "sans-serif", + "capHeight": 659, + "ascent": 1069, + "descent": -321, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Sans Meetei Mayek", + "fullName": "Noto Sans Meetei Mayek Light", + "postscriptName": "NotoSansMeeteiMayek-Light", + "category": "sans-serif", + "capHeight": 659, + "ascent": 1069, + "descent": -321, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Sans Meetei Mayek", + "fullName": "Noto Sans Meetei Mayek Medium", + "postscriptName": "NotoSansMeeteiMayek-Medium", + "category": "sans-serif", + "capHeight": 659, + "ascent": 1069, + "descent": -321, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Meetei Mayek", + "fullName": "Noto Sans Meetei Mayek SemiBold", + "postscriptName": "NotoSansMeeteiMayek-SemiBold", + "category": "sans-serif", + "capHeight": 659, + "ascent": 1069, + "descent": -321, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Meetei Mayek", + "fullName": "Noto Sans Meetei Mayek Bold", + "postscriptName": "NotoSansMeeteiMayek-Bold", + "category": "sans-serif", + "capHeight": 659, + "ascent": 1069, + "descent": -321, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Sans Meetei Mayek", + "fullName": "Noto Sans Meetei Mayek ExtraBold", + "postscriptName": "NotoSansMeeteiMayek-ExtraBold", + "category": "sans-serif", + "capHeight": 659, + "ascent": 1069, + "descent": -321, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Sans Meetei Mayek", + "fullName": "Noto Sans Meetei Mayek Black", + "postscriptName": "NotoSansMeeteiMayek-Black", + "category": "sans-serif", + "capHeight": 659, + "ascent": 1069, + "descent": -321, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Meetei Mayek", + "fullName": "Noto Sans Meetei Mayek Regular", + "postscriptName": "NotoSansMeeteiMayek-Regular", + "category": "sans-serif", + "capHeight": 659, + "ascent": 1069, + "descent": -321, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansMendeKikakui": { + "familyName": "Noto Sans Mende Kikakui", + "fullName": "Noto Sans Mende Kikakui Regular", + "postscriptName": "NotoSansMendeKikakui-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1030, + "descent": -237, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Mende Kikakui", + "fullName": "Noto Sans Mende Kikakui Regular", + "postscriptName": "NotoSansMendeKikakui-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1030, + "descent": -237, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansMeroitic": { + "familyName": "Noto Sans Meroitic", + "fullName": "Noto Sans Meroitic Regular", + "postscriptName": "NotoSansMeroitic-Regular", + "category": "sans-serif", + "capHeight": 680, + "ascent": 928, + "descent": -415, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Meroitic", + "fullName": "Noto Sans Meroitic Regular", + "postscriptName": "NotoSansMeroitic-Regular", + "category": "sans-serif", + "capHeight": 680, + "ascent": 928, + "descent": -415, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansMiao": { + "familyName": "Noto Sans Miao", + "fullName": "Noto Sans Miao Regular", + "postscriptName": "NotoSansMiao-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1142, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 341, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Miao", + "fullName": "Noto Sans Miao Regular", + "postscriptName": "NotoSansMiao-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1142, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 341, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansModi": { + "familyName": "Noto Sans Modi", + "fullName": "Noto Sans Modi Regular", + "postscriptName": "NotoSansModi-Regular", + "category": "sans-serif", + "capHeight": 622, + "ascent": 891, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Modi", + "fullName": "Noto Sans Modi Regular", + "postscriptName": "NotoSansModi-Regular", + "category": "sans-serif", + "capHeight": 622, + "ascent": 891, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansMongolian": { + "familyName": "Noto Sans Mongolian", + "fullName": "Noto Sans Mongolian Regular", + "postscriptName": "NotoSansMongolian-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1457, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Mongolian", + "fullName": "Noto Sans Mongolian Regular", + "postscriptName": "NotoSansMongolian-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1457, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansMono": { + "familyName": "Noto Sans Mono", + "fullName": "Noto Sans Mono Regular", + "postscriptName": "NotoSansMono-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Mono", + "fullName": "Noto Sans Mono Thin", + "postscriptName": "NotoSansMono-Thin", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 528, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Sans Mono", + "fullName": "Noto Sans Mono ExtraLight", + "postscriptName": "NotoSansMono-ExtraLight", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Sans Mono", + "fullName": "Noto Sans Mono Light", + "postscriptName": "NotoSansMono-Light", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 532, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Sans Mono", + "fullName": "Noto Sans Mono Medium", + "postscriptName": "NotoSansMono-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 539, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Mono", + "fullName": "Noto Sans Mono SemiBold", + "postscriptName": "NotoSansMono-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 542, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Mono", + "fullName": "Noto Sans Mono Bold", + "postscriptName": "NotoSansMono-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Sans Mono", + "fullName": "Noto Sans Mono ExtraBold", + "postscriptName": "NotoSansMono-ExtraBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 549, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Sans Mono", + "fullName": "Noto Sans Mono Black", + "postscriptName": "NotoSansMono-Black", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Mono", + "fullName": "Noto Sans Mono Regular", + "postscriptName": "NotoSansMono-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansMro": { + "familyName": "Noto Sans Mro", + "fullName": "Noto Sans Mro Regular", + "postscriptName": "NotoSansMro-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Mro", + "fullName": "Noto Sans Mro Regular", + "postscriptName": "NotoSansMro-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansMultani": { + "familyName": "Noto Sans Multani", + "fullName": "Noto Sans Multani Regular", + "postscriptName": "NotoSansMultani-Regular", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Multani", + "fullName": "Noto Sans Multani Regular", + "postscriptName": "NotoSansMultani-Regular", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansMyanmar": { + "familyName": "Noto Sans Myanmar", + "fullName": "Noto Sans Myanmar Regular", + "postscriptName": "NotoSansMyanmar-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1324, + "descent": -860, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 548, + "subsets": { + "latin": { + "xWidthAvg": 548 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Myanmar", + "fullName": "Noto Sans Myanmar Thin", + "postscriptName": "NotoSansMyanmar-Thin", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1324, + "descent": -860, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 548, + "subsets": { + "latin": { + "xWidthAvg": 548 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Sans Myanmar", + "fullName": "Noto Sans Myanmar ExtraLight", + "postscriptName": "NotoSansMyanmar-ExtraLight", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1324, + "descent": -860, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 548, + "subsets": { + "latin": { + "xWidthAvg": 548 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Sans Myanmar", + "fullName": "Noto Sans Myanmar Light", + "postscriptName": "NotoSansMyanmar-Light", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1324, + "descent": -860, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 548, + "subsets": { + "latin": { + "xWidthAvg": 548 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Sans Myanmar", + "fullName": "Noto Sans Myanmar Medium", + "postscriptName": "NotoSansMyanmar-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1324, + "descent": -860, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 548, + "subsets": { + "latin": { + "xWidthAvg": 548 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Myanmar", + "fullName": "Noto Sans Myanmar SemiBold", + "postscriptName": "NotoSansMyanmar-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1324, + "descent": -860, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 548, + "subsets": { + "latin": { + "xWidthAvg": 548 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Myanmar", + "fullName": "Noto Sans Myanmar Bold", + "postscriptName": "NotoSansMyanmar-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1324, + "descent": -860, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 548, + "subsets": { + "latin": { + "xWidthAvg": 548 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Sans Myanmar", + "fullName": "Noto Sans Myanmar ExtraBold", + "postscriptName": "NotoSansMyanmar-ExtraBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1324, + "descent": -860, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 548, + "subsets": { + "latin": { + "xWidthAvg": 548 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Sans Myanmar", + "fullName": "Noto Sans Myanmar Black", + "postscriptName": "NotoSansMyanmar-Black", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1324, + "descent": -860, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 548, + "subsets": { + "latin": { + "xWidthAvg": 548 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Myanmar", + "fullName": "Noto Sans Myanmar Regular", + "postscriptName": "NotoSansMyanmar-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1324, + "descent": -860, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 548, + "subsets": { + "latin": { + "xWidthAvg": 548 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansNKo": { + "familyName": "Noto Sans NKo", + "fullName": "Noto Sans NKo Regular", + "postscriptName": "NotoSansNKo-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 513, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans NKo", + "fullName": "Noto Sans NKo Regular", + "postscriptName": "NotoSansNKo-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 513, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansNKoUnjoined": { + "familyName": "Noto Sans NKo Unjoined", + "fullName": "Noto Sans NKo Unjoined Regular", + "postscriptName": "NotoSansNKoUnjoined-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 513, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "500": { + "familyName": "Noto Sans NKo Unjoined", + "fullName": "Noto Sans NKo Unjoined Medium", + "postscriptName": "NotoSansNKoUnjoined-Medium", + "category": "sans-serif", + "capHeight": 719, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans NKo Unjoined", + "fullName": "Noto Sans NKo Unjoined SemiBold", + "postscriptName": "NotoSansNKoUnjoined-SemiBold", + "category": "sans-serif", + "capHeight": 725, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans NKo Unjoined", + "fullName": "Noto Sans NKo Unjoined Bold", + "postscriptName": "NotoSansNKoUnjoined-Bold", + "category": "sans-serif", + "capHeight": 730, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 533, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans NKo Unjoined", + "fullName": "Noto Sans NKo Unjoined Regular", + "postscriptName": "NotoSansNKoUnjoined-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 513, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansNabataean": { + "familyName": "Noto Sans Nabataean", + "fullName": "Noto Sans Nabataean Regular", + "postscriptName": "NotoSansNabataean-Regular", + "category": "sans-serif", + "capHeight": 640, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Nabataean", + "fullName": "Noto Sans Nabataean Regular", + "postscriptName": "NotoSansNabataean-Regular", + "category": "sans-serif", + "capHeight": 640, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansNagMundari": { + "familyName": "Noto Sans Nag Mundari", + "fullName": "Noto Sans Nag Mundari Regular", + "postscriptName": "NotoSansNagMundari-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "500": { + "familyName": "Noto Sans Nag Mundari", + "fullName": "Noto Sans Nag Mundari Medium", + "postscriptName": "NotoSansNagMundari-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Noto Sans Nag Mundari", + "fullName": "Noto Sans Nag Mundari SemiBold", + "postscriptName": "NotoSansNagMundari-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Noto Sans Nag Mundari", + "fullName": "Noto Sans Nag Mundari Bold", + "postscriptName": "NotoSansNagMundari-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Noto Sans Nag Mundari", + "fullName": "Noto Sans Nag Mundari Regular", + "postscriptName": "NotoSansNagMundari-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "notoSansNandinagari": { + "familyName": "Noto Sans Nandinagari", + "fullName": "Noto Sans Nandinagari Regular", + "postscriptName": "NotoSansNandinagari-Regular", + "category": "sans-serif", + "capHeight": 622, + "ascent": 900, + "descent": -560, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 558, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Nandinagari", + "fullName": "Noto Sans Nandinagari Regular", + "postscriptName": "NotoSansNandinagari-Regular", + "category": "sans-serif", + "capHeight": 622, + "ascent": 900, + "descent": -560, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 558, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansNewTaiLue": { + "familyName": "Noto Sans New Tai Lue", + "fullName": "Noto Sans New Tai Lue Regular", + "postscriptName": "NotoSansNewTaiLue-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "500": { + "familyName": "Noto Sans New Tai Lue", + "fullName": "Noto Sans New Tai Lue Medium", + "postscriptName": "NotoSansNewTaiLue-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 513, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans New Tai Lue", + "fullName": "Noto Sans New Tai Lue SemiBold", + "postscriptName": "NotoSansNewTaiLue-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 491, + "subsets": { + "latin": { + "xWidthAvg": 491 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans New Tai Lue", + "fullName": "Noto Sans New Tai Lue Bold", + "postscriptName": "NotoSansNewTaiLue-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans New Tai Lue", + "fullName": "Noto Sans New Tai Lue Regular", + "postscriptName": "NotoSansNewTaiLue-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansNewa": { + "familyName": "Noto Sans Newa", + "fullName": "Noto Sans Newa Regular", + "postscriptName": "NotoSansNewa-Regular", + "category": "sans-serif", + "capHeight": 622, + "ascent": 1036, + "descent": -396, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Newa", + "fullName": "Noto Sans Newa Regular", + "postscriptName": "NotoSansNewa-Regular", + "category": "sans-serif", + "capHeight": 622, + "ascent": 1036, + "descent": -396, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansNushu": { + "familyName": "Noto Sans Nushu", + "fullName": "Noto Sans Nushu Regular", + "postscriptName": "NotoSansNushu-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -321, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Nushu", + "fullName": "Noto Sans Nushu Regular", + "postscriptName": "NotoSansNushu-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -321, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansOgham": { + "familyName": "Noto Sans Ogham", + "fullName": "Noto Sans Ogham Regular", + "postscriptName": "NotoSansOgham-Regular", + "category": "sans-serif", + "capHeight": 695, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Ogham", + "fullName": "Noto Sans Ogham Regular", + "postscriptName": "NotoSansOgham-Regular", + "category": "sans-serif", + "capHeight": 695, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansOlChiki": { + "familyName": "Noto Sans Ol Chiki", + "fullName": "Noto Sans Ol Chiki Regular", + "postscriptName": "NotoSansOlChiki-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "500": { + "familyName": "Noto Sans Ol Chiki", + "fullName": "Noto Sans Ol Chiki Medium", + "postscriptName": "NotoSansOlChiki-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Ol Chiki", + "fullName": "Noto Sans Ol Chiki SemiBold", + "postscriptName": "NotoSansOlChiki-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Ol Chiki", + "fullName": "Noto Sans Ol Chiki Bold", + "postscriptName": "NotoSansOlChiki-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Ol Chiki", + "fullName": "Noto Sans Ol Chiki Regular", + "postscriptName": "NotoSansOlChiki-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansOldHungarian": { + "familyName": "Noto Sans Old Hungarian", + "fullName": "Noto Sans Old Hungarian Regular", + "postscriptName": "NotoSansOldHungarian-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 859, + "descent": -177, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 600, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Old Hungarian", + "fullName": "Noto Sans Old Hungarian Regular", + "postscriptName": "NotoSansOldHungarian-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 859, + "descent": -177, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 600, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansOldItalic": { + "familyName": "Noto Sans Old Italic", + "fullName": "Noto Sans Old Italic Regular", + "postscriptName": "NotoSansOldItalic-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Old Italic", + "fullName": "Noto Sans Old Italic Regular", + "postscriptName": "NotoSansOldItalic-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansOldNorthArabian": { + "familyName": "Noto Sans Old North Arabian", + "fullName": "Noto Sans Old North Arabian Regular", + "postscriptName": "NotoSansOldNorthArabian-Regular", + "category": "sans-serif", + "capHeight": 665, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Old North Arabian", + "fullName": "Noto Sans Old North Arabian Regular", + "postscriptName": "NotoSansOldNorthArabian-Regular", + "category": "sans-serif", + "capHeight": 665, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansOldPermic": { + "familyName": "Noto Sans Old Permic", + "fullName": "Noto Sans Old Permic Regular", + "postscriptName": "NotoSansOldPermic-Regular", + "category": "sans-serif", + "capHeight": 638, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Old Permic", + "fullName": "Noto Sans Old Permic Regular", + "postscriptName": "NotoSansOldPermic-Regular", + "category": "sans-serif", + "capHeight": 638, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansOldPersian": { + "familyName": "Noto Sans Old Persian", + "fullName": "Noto Sans Old Persian Regular", + "postscriptName": "NotoSansOldPersian-Regular", + "category": "sans-serif", + "capHeight": 724, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Old Persian", + "fullName": "Noto Sans Old Persian Regular", + "postscriptName": "NotoSansOldPersian-Regular", + "category": "sans-serif", + "capHeight": 724, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansOldSogdian": { + "familyName": "Noto Sans Old Sogdian", + "fullName": "Noto Sans Old Sogdian Regular", + "postscriptName": "NotoSansOldSogdian-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Old Sogdian", + "fullName": "Noto Sans Old Sogdian Regular", + "postscriptName": "NotoSansOldSogdian-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansOldSouthArabian": { + "familyName": "Noto Sans Old South Arabian", + "fullName": "Noto Sans Old South Arabian Regular", + "postscriptName": "NotoSansOldSouthArabian-Regular", + "category": "sans-serif", + "capHeight": 859, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Old South Arabian", + "fullName": "Noto Sans Old South Arabian Regular", + "postscriptName": "NotoSansOldSouthArabian-Regular", + "category": "sans-serif", + "capHeight": 859, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "notoSansOldTurkic": { + "familyName": "Noto Sans Old Turkic", + "fullName": "Noto Sans Old Turkic Regular", + "postscriptName": "NotoSansOldTurkic-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Old Turkic", + "fullName": "Noto Sans Old Turkic Regular", + "postscriptName": "NotoSansOldTurkic-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansOriya": { + "familyName": "Noto Sans Oriya", + "fullName": "Noto Sans Oriya Regular", + "postscriptName": "NotoSansOriya-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 658, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 1229 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Oriya", + "fullName": "Noto Sans Oriya Thin", + "postscriptName": "NotoSansOriya-Thin", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 658, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "200": { + "familyName": "Noto Sans Oriya", + "fullName": "Noto Sans Oriya ExtraLight", + "postscriptName": "NotoSansOriya-ExtraLight", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 658, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "300": { + "familyName": "Noto Sans Oriya", + "fullName": "Noto Sans Oriya Light", + "postscriptName": "NotoSansOriya-Light", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 658, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "500": { + "familyName": "Noto Sans Oriya", + "fullName": "Noto Sans Oriya Medium", + "postscriptName": "NotoSansOriya-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 658, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "600": { + "familyName": "Noto Sans Oriya", + "fullName": "Noto Sans Oriya SemiBold", + "postscriptName": "NotoSansOriya-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 658, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "700": { + "familyName": "Noto Sans Oriya", + "fullName": "Noto Sans Oriya Bold", + "postscriptName": "NotoSansOriya-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 658, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "800": { + "familyName": "Noto Sans Oriya", + "fullName": "Noto Sans Oriya ExtraBold", + "postscriptName": "NotoSansOriya-ExtraBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 658, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "900": { + "familyName": "Noto Sans Oriya", + "fullName": "Noto Sans Oriya Black", + "postscriptName": "NotoSansOriya-Black", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 658, + "xWidthAvg": 517, + "subsets": { + "latin": { + "xWidthAvg": 517 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "regular": { + "familyName": "Noto Sans Oriya", + "fullName": "Noto Sans Oriya Regular", + "postscriptName": "NotoSansOriya-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 658, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 1229 + } + } + } + } + }, + "notoSansOsage": { + "familyName": "Noto Sans Osage", + "fullName": "Noto Sans Osage Regular", + "postscriptName": "NotoSansOsage-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Osage", + "fullName": "Noto Sans Osage Regular", + "postscriptName": "NotoSansOsage-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansOsmanya": { + "familyName": "Noto Sans Osmanya", + "fullName": "Noto Sans Osmanya Regular", + "postscriptName": "NotoSansOsmanya-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Osmanya", + "fullName": "Noto Sans Osmanya Regular", + "postscriptName": "NotoSansOsmanya-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "notoSansPahawhHmong": { + "familyName": "Noto Sans Pahawh Hmong", + "fullName": "Noto Sans Pahawh Hmong Regular", + "postscriptName": "NotoSansPahawhHmong-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Pahawh Hmong", + "fullName": "Noto Sans Pahawh Hmong Regular", + "postscriptName": "NotoSansPahawhHmong-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansPalmyrene": { + "familyName": "Noto Sans Palmyrene", + "fullName": "Noto Sans Palmyrene Regular", + "postscriptName": "NotoSansPalmyrene-Regular", + "category": "sans-serif", + "capHeight": 778, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 640, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Palmyrene", + "fullName": "Noto Sans Palmyrene Regular", + "postscriptName": "NotoSansPalmyrene-Regular", + "category": "sans-serif", + "capHeight": 778, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 640, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansPauCinHau": { + "familyName": "Noto Sans Pau Cin Hau", + "fullName": "Noto Sans Pau Cin Hau Regular", + "postscriptName": "NotoSansPauCinHau-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Pau Cin Hau", + "fullName": "Noto Sans Pau Cin Hau Regular", + "postscriptName": "NotoSansPauCinHau-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansPhagsPa": { + "familyName": "Noto Sans Phags Pa", + "fullName": "Noto Sans PhagsPa Regular", + "postscriptName": "NotoSansPhagsPa-Regular", + "category": "sans-serif", + "capHeight": 670, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 548, + "subsets": { + "latin": { + "xWidthAvg": 548 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Phags Pa", + "fullName": "Noto Sans PhagsPa Regular", + "postscriptName": "NotoSansPhagsPa-Regular", + "category": "sans-serif", + "capHeight": 670, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 548, + "subsets": { + "latin": { + "xWidthAvg": 548 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansPhoenician": { + "familyName": "Noto Sans Phoenician", + "fullName": "Noto Sans Phoenician Regular", + "postscriptName": "NotoSansPhoenician-Regular", + "category": "sans-serif", + "capHeight": 719, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Phoenician", + "fullName": "Noto Sans Phoenician Regular", + "postscriptName": "NotoSansPhoenician-Regular", + "category": "sans-serif", + "capHeight": 719, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "notoSansPsalterPahlavi": { + "familyName": "Noto Sans Psalter Pahlavi", + "fullName": "Noto Sans Psalter Pahlavi Regular", + "postscriptName": "NotoSansPsalterPahlavi-Regular", + "category": "sans-serif", + "capHeight": 625, + "ascent": 737, + "descent": -554, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 469, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Psalter Pahlavi", + "fullName": "Noto Sans Psalter Pahlavi Regular", + "postscriptName": "NotoSansPsalterPahlavi-Regular", + "category": "sans-serif", + "capHeight": 625, + "ascent": 737, + "descent": -554, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 469, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansRejang": { + "familyName": "Noto Sans Rejang", + "fullName": "Noto Sans Rejang Regular", + "postscriptName": "NotoSansRejang-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Rejang", + "fullName": "Noto Sans Rejang Regular", + "postscriptName": "NotoSansRejang-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansRunic": { + "familyName": "Noto Sans Runic", + "fullName": "Noto Sans Runic Regular", + "postscriptName": "NotoSansRunic-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Runic", + "fullName": "Noto Sans Runic Regular", + "postscriptName": "NotoSansRunic-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansSC": { + "familyName": "Noto Sans SC", + "fullName": "Noto Sans SC Regular", + "postscriptName": "NotoSansSC-Regular", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans SC", + "fullName": "Noto Sans SC Thin", + "postscriptName": "NotoSansSC-Thin", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "200": { + "familyName": "Noto Sans SC", + "fullName": "Noto Sans SC ExtraLight", + "postscriptName": "NotoSansSC-ExtraLight", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "300": { + "familyName": "Noto Sans SC", + "fullName": "Noto Sans SC Light", + "postscriptName": "NotoSansSC-Light", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "500": { + "familyName": "Noto Sans SC", + "fullName": "Noto Sans SC Medium", + "postscriptName": "NotoSansSC-Medium", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "600": { + "familyName": "Noto Sans SC", + "fullName": "Noto Sans SC SemiBold", + "postscriptName": "NotoSansSC-SemiBold", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "Noto Sans SC", + "fullName": "Noto Sans SC Bold", + "postscriptName": "NotoSansSC-Bold", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "800": { + "familyName": "Noto Sans SC", + "fullName": "Noto Sans SC ExtraBold", + "postscriptName": "NotoSansSC-ExtraBold", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "900": { + "familyName": "Noto Sans SC", + "fullName": "Noto Sans SC Black", + "postscriptName": "NotoSansSC-Black", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 511, + "subsets": { + "latin": { + "xWidthAvg": 511 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Noto Sans SC", + "fullName": "Noto Sans SC Regular", + "postscriptName": "NotoSansSC-Regular", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "notoSansSamaritan": { + "familyName": "Noto Sans Samaritan", + "fullName": "Noto Sans Samaritan Regular", + "postscriptName": "NotoSansSamaritan-Regular", + "category": "sans-serif", + "capHeight": 659, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Samaritan", + "fullName": "Noto Sans Samaritan Regular", + "postscriptName": "NotoSansSamaritan-Regular", + "category": "sans-serif", + "capHeight": 659, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "notoSansSaurashtra": { + "familyName": "Noto Sans Saurashtra", + "fullName": "Noto Sans Saurashtra Regular", + "postscriptName": "NotoSansSaurashtra-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Saurashtra", + "fullName": "Noto Sans Saurashtra Regular", + "postscriptName": "NotoSansSaurashtra-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansSharada": { + "familyName": "Noto Sans Sharada", + "fullName": "Noto Sans Sharada Regular", + "postscriptName": "NotoSansSharada-Regular", + "category": "sans-serif", + "capHeight": 625, + "ascent": 925, + "descent": -455, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Sharada", + "fullName": "Noto Sans Sharada Regular", + "postscriptName": "NotoSansSharada-Regular", + "category": "sans-serif", + "capHeight": 625, + "ascent": 925, + "descent": -455, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansShavian": { + "familyName": "Noto Sans Shavian", + "fullName": "Noto Sans Shavian Regular", + "postscriptName": "NotoSansShavian-Regular", + "category": "sans-serif", + "capHeight": 771, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Shavian", + "fullName": "Noto Sans Shavian Regular", + "postscriptName": "NotoSansShavian-Regular", + "category": "sans-serif", + "capHeight": 771, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "notoSansSiddham": { + "familyName": "Noto Sans Siddham", + "fullName": "Noto Sans Siddham Regular", + "postscriptName": "NotoSansSiddham-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1000, + "descent": -1030, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 683, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Siddham", + "fullName": "Noto Sans Siddham Regular", + "postscriptName": "NotoSansSiddham-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1000, + "descent": -1030, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 683, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansSignWriting": { + "familyName": "Noto Sans SignWriting", + "fullName": "Noto Sans SignWriting Regular", + "postscriptName": "NotoSansSignWriting-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 802, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 588, + "subsets": { + "latin": { + "xWidthAvg": 588 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans SignWriting", + "fullName": "Noto Sans SignWriting Regular", + "postscriptName": "NotoSansSignWriting-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 802, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 588, + "subsets": { + "latin": { + "xWidthAvg": 588 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "notoSansSinhala": { + "familyName": "Noto Sans Sinhala", + "fullName": "Noto Sans Sinhala Regular", + "postscriptName": "NotoSansSinhala-Regular", + "category": "sans-serif", + "capHeight": 612, + "ascent": 1011, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 511, + "subsets": { + "latin": { + "xWidthAvg": 511 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Sinhala", + "fullName": "Noto Sans Sinhala Thin", + "postscriptName": "NotoSansSinhala-Thin", + "category": "sans-serif", + "capHeight": 612, + "ascent": 1011, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Sans Sinhala", + "fullName": "Noto Sans Sinhala ExtraLight", + "postscriptName": "NotoSansSinhala-ExtraLight", + "category": "sans-serif", + "capHeight": 612, + "ascent": 1011, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Sans Sinhala", + "fullName": "Noto Sans Sinhala Light", + "postscriptName": "NotoSansSinhala-Light", + "category": "sans-serif", + "capHeight": 612, + "ascent": 1011, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Sans Sinhala", + "fullName": "Noto Sans Sinhala Medium", + "postscriptName": "NotoSansSinhala-Medium", + "category": "sans-serif", + "capHeight": 612, + "ascent": 1011, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 520, + "subsets": { + "latin": { + "xWidthAvg": 520 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Sinhala", + "fullName": "Noto Sans Sinhala SemiBold", + "postscriptName": "NotoSansSinhala-SemiBold", + "category": "sans-serif", + "capHeight": 612, + "ascent": 1011, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 530, + "subsets": { + "latin": { + "xWidthAvg": 530 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Sinhala", + "fullName": "Noto Sans Sinhala Bold", + "postscriptName": "NotoSansSinhala-Bold", + "category": "sans-serif", + "capHeight": 612, + "ascent": 1011, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 541, + "subsets": { + "latin": { + "xWidthAvg": 541 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Sans Sinhala", + "fullName": "Noto Sans Sinhala ExtraBold", + "postscriptName": "NotoSansSinhala-ExtraBold", + "category": "sans-serif", + "capHeight": 612, + "ascent": 1011, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 549, + "subsets": { + "latin": { + "xWidthAvg": 549 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Sans Sinhala", + "fullName": "Noto Sans Sinhala Black", + "postscriptName": "NotoSansSinhala-Black", + "category": "sans-serif", + "capHeight": 612, + "ascent": 1011, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 558, + "subsets": { + "latin": { + "xWidthAvg": 558 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Sinhala", + "fullName": "Noto Sans Sinhala Regular", + "postscriptName": "NotoSansSinhala-Regular", + "category": "sans-serif", + "capHeight": 612, + "ascent": 1011, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 511, + "subsets": { + "latin": { + "xWidthAvg": 511 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansSogdian": { + "familyName": "Noto Sans Sogdian", + "fullName": "Noto Sans Sogdian Regular", + "postscriptName": "NotoSansSogdian-Regular", + "category": "sans-serif", + "capHeight": 674, + "ascent": 1069, + "descent": -313, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 382, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Sogdian", + "fullName": "Noto Sans Sogdian Regular", + "postscriptName": "NotoSansSogdian-Regular", + "category": "sans-serif", + "capHeight": 674, + "ascent": 1069, + "descent": -313, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 382, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansSoraSompeng": { + "familyName": "Noto Sans Sora Sompeng", + "fullName": "Noto Sans Sora Sompeng Regular", + "postscriptName": "NotoSansSoraSompeng-Regular", + "category": "sans-serif", + "capHeight": 800, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 433, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "500": { + "familyName": "Noto Sans Sora Sompeng", + "fullName": "Noto Sans Sora Sompeng Medium", + "postscriptName": "NotoSansSoraSompeng-Medium", + "category": "sans-serif", + "capHeight": 800, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 433, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Sora Sompeng", + "fullName": "Noto Sans Sora Sompeng SemiBold", + "postscriptName": "NotoSansSoraSompeng-SemiBold", + "category": "sans-serif", + "capHeight": 800, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 433, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Sora Sompeng", + "fullName": "Noto Sans Sora Sompeng Bold", + "postscriptName": "NotoSansSoraSompeng-Bold", + "category": "sans-serif", + "capHeight": 800, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 433, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Sora Sompeng", + "fullName": "Noto Sans Sora Sompeng Regular", + "postscriptName": "NotoSansSoraSompeng-Regular", + "category": "sans-serif", + "capHeight": 800, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 433, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansSoyombo": { + "familyName": "Noto Sans Soyombo", + "fullName": "Noto Sans Soyombo Regular", + "postscriptName": "NotoSansSoyombo-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1239, + "descent": -357, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Soyombo", + "fullName": "Noto Sans Soyombo Regular", + "postscriptName": "NotoSansSoyombo-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1239, + "descent": -357, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansSundanese": { + "familyName": "Noto Sans Sundanese", + "fullName": "Noto Sans Sundanese Regular", + "postscriptName": "NotoSansSundanese-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -368, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "500": { + "familyName": "Noto Sans Sundanese", + "fullName": "Noto Sans Sundanese Medium", + "postscriptName": "NotoSansSundanese-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -368, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Sundanese", + "fullName": "Noto Sans Sundanese SemiBold", + "postscriptName": "NotoSansSundanese-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -368, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 491, + "subsets": { + "latin": { + "xWidthAvg": 491 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Sundanese", + "fullName": "Noto Sans Sundanese Bold", + "postscriptName": "NotoSansSundanese-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -368, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Sundanese", + "fullName": "Noto Sans Sundanese Regular", + "postscriptName": "NotoSansSundanese-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -368, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansSylotiNagri": { + "familyName": "Noto Sans Syloti Nagri", + "fullName": "Noto Sans Syloti Nagri Regular", + "postscriptName": "NotoSansSylotiNagri-Regular", + "category": "sans-serif", + "capHeight": 679, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Syloti Nagri", + "fullName": "Noto Sans Syloti Nagri Regular", + "postscriptName": "NotoSansSylotiNagri-Regular", + "category": "sans-serif", + "capHeight": 679, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansSymbols": { + "familyName": "Noto Sans Symbols", + "fullName": "Noto Sans Symbols Regular", + "postscriptName": "NotoSansSymbols-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1480, + "descent": -570, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Symbols", + "fullName": "Noto Sans Symbols Thin", + "postscriptName": "NotoSansSymbols-Thin", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1480, + "descent": -570, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 528, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Sans Symbols", + "fullName": "Noto Sans Symbols ExtraLight", + "postscriptName": "NotoSansSymbols-ExtraLight", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1480, + "descent": -570, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Sans Symbols", + "fullName": "Noto Sans Symbols Light", + "postscriptName": "NotoSansSymbols-Light", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1480, + "descent": -570, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 532, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Sans Symbols", + "fullName": "Noto Sans Symbols Medium", + "postscriptName": "NotoSansSymbols-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1480, + "descent": -570, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 539, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Symbols", + "fullName": "Noto Sans Symbols SemiBold", + "postscriptName": "NotoSansSymbols-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1480, + "descent": -570, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 542, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Symbols", + "fullName": "Noto Sans Symbols Bold", + "postscriptName": "NotoSansSymbols-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1480, + "descent": -570, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Sans Symbols", + "fullName": "Noto Sans Symbols ExtraBold", + "postscriptName": "NotoSansSymbols-ExtraBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1480, + "descent": -570, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 549, + "xWidthAvg": 511, + "subsets": { + "latin": { + "xWidthAvg": 511 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Sans Symbols", + "fullName": "Noto Sans Symbols Black", + "postscriptName": "NotoSansSymbols-Black", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1480, + "descent": -570, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 521, + "subsets": { + "latin": { + "xWidthAvg": 521 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Symbols", + "fullName": "Noto Sans Symbols Regular", + "postscriptName": "NotoSansSymbols-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1480, + "descent": -570, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansSymbols2": { + "familyName": "Noto Sans Symbols 2", + "fullName": "Noto Sans Symbols 2 Regular", + "postscriptName": "NotoSansSymbols2-Regular", + "category": "sans-serif", + "capHeight": 945, + "ascent": 1069, + "descent": -630, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Symbols 2", + "fullName": "Noto Sans Symbols 2 Regular", + "postscriptName": "NotoSansSymbols2-Regular", + "category": "sans-serif", + "capHeight": 945, + "ascent": 1069, + "descent": -630, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansSyriac": { + "familyName": "Noto Sans Syriac", + "fullName": "Noto Sans Syriac Regular", + "postscriptName": "NotoSansSyriac-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 926, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Syriac", + "fullName": "Noto Sans Syriac Thin", + "postscriptName": "NotoSansSyriac-Thin", + "category": "sans-serif", + "capHeight": 714, + "ascent": 926, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Sans Syriac", + "fullName": "Noto Sans Syriac ExtraLight", + "postscriptName": "NotoSansSyriac-ExtraLight", + "category": "sans-serif", + "capHeight": 714, + "ascent": 926, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Sans Syriac", + "fullName": "Noto Sans Syriac Light", + "postscriptName": "NotoSansSyriac-Light", + "category": "sans-serif", + "capHeight": 714, + "ascent": 926, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Sans Syriac", + "fullName": "Noto Sans Syriac Medium", + "postscriptName": "NotoSansSyriac-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 926, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Syriac", + "fullName": "Noto Sans Syriac SemiBold", + "postscriptName": "NotoSansSyriac-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 926, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Syriac", + "fullName": "Noto Sans Syriac Bold", + "postscriptName": "NotoSansSyriac-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 926, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 501, + "subsets": { + "latin": { + "xWidthAvg": 501 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Sans Syriac", + "fullName": "Noto Sans Syriac ExtraBold", + "postscriptName": "NotoSansSyriac-ExtraBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 926, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Sans Syriac", + "fullName": "Noto Sans Syriac Black", + "postscriptName": "NotoSansSyriac-Black", + "category": "sans-serif", + "capHeight": 714, + "ascent": 926, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Syriac", + "fullName": "Noto Sans Syriac Regular", + "postscriptName": "NotoSansSyriac-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 926, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansSyriacEastern": { + "familyName": "Noto Sans Syriac Eastern", + "fullName": "Noto Sans Syriac Eastern Regular", + "postscriptName": "NotoSansSyriacEastern-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 926, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Syriac Eastern", + "fullName": "Noto Sans Syriac Eastern Thin", + "postscriptName": "NotoSansSyriacEastern-Thin", + "category": "sans-serif", + "capHeight": 714, + "ascent": 926, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Sans Syriac Eastern", + "fullName": "Noto Sans Syriac Eastern ExtraLight", + "postscriptName": "NotoSansSyriacEastern-ExtraLight", + "category": "sans-serif", + "capHeight": 714, + "ascent": 926, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Sans Syriac Eastern", + "fullName": "Noto Sans Syriac Eastern Light", + "postscriptName": "NotoSansSyriacEastern-Light", + "category": "sans-serif", + "capHeight": 714, + "ascent": 926, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Sans Syriac Eastern", + "fullName": "Noto Sans Syriac Eastern Medium", + "postscriptName": "NotoSansSyriacEastern-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 926, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Syriac Eastern", + "fullName": "Noto Sans Syriac Eastern SemiBold", + "postscriptName": "NotoSansSyriacEastern-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 926, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Syriac Eastern", + "fullName": "Noto Sans Syriac Eastern Bold", + "postscriptName": "NotoSansSyriacEastern-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 926, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 501, + "subsets": { + "latin": { + "xWidthAvg": 501 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Sans Syriac Eastern", + "fullName": "Noto Sans Syriac Eastern ExtraBold", + "postscriptName": "NotoSansSyriacEastern-ExtraBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 926, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Sans Syriac Eastern", + "fullName": "Noto Sans Syriac Eastern Black", + "postscriptName": "NotoSansSyriacEastern-Black", + "category": "sans-serif", + "capHeight": 714, + "ascent": 926, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Syriac Eastern", + "fullName": "Noto Sans Syriac Eastern Regular", + "postscriptName": "NotoSansSyriacEastern-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 926, + "descent": -486, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansTC": { + "familyName": "Noto Sans TC", + "fullName": "Noto Sans TC Regular", + "postscriptName": "NotoSansTC-Regular", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans TC", + "fullName": "Noto Sans TC Thin", + "postscriptName": "NotoSansTC-Thin", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "200": { + "familyName": "Noto Sans TC", + "fullName": "Noto Sans TC ExtraLight", + "postscriptName": "NotoSansTC-ExtraLight", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "300": { + "familyName": "Noto Sans TC", + "fullName": "Noto Sans TC Light", + "postscriptName": "NotoSansTC-Light", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "500": { + "familyName": "Noto Sans TC", + "fullName": "Noto Sans TC Medium", + "postscriptName": "NotoSansTC-Medium", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "600": { + "familyName": "Noto Sans TC", + "fullName": "Noto Sans TC SemiBold", + "postscriptName": "NotoSansTC-SemiBold", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "Noto Sans TC", + "fullName": "Noto Sans TC Bold", + "postscriptName": "NotoSansTC-Bold", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "800": { + "familyName": "Noto Sans TC", + "fullName": "Noto Sans TC ExtraBold", + "postscriptName": "NotoSansTC-ExtraBold", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "900": { + "familyName": "Noto Sans TC", + "fullName": "Noto Sans TC Black", + "postscriptName": "NotoSansTC-Black", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 511, + "subsets": { + "latin": { + "xWidthAvg": 511 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Noto Sans TC", + "fullName": "Noto Sans TC Regular", + "postscriptName": "NotoSansTC-Regular", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "notoSansTagalog": { + "familyName": "Noto Sans Tagalog", + "fullName": "Noto Sans Tagalog Regular", + "postscriptName": "NotoSansTagalog-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Tagalog", + "fullName": "Noto Sans Tagalog Regular", + "postscriptName": "NotoSansTagalog-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansTagbanwa": { + "familyName": "Noto Sans Tagbanwa", + "fullName": "Noto Sans Tagbanwa Regular", + "postscriptName": "NotoSansTagbanwa-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Tagbanwa", + "fullName": "Noto Sans Tagbanwa Regular", + "postscriptName": "NotoSansTagbanwa-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansTaiLe": { + "familyName": "Noto Sans Tai Le", + "fullName": "Noto Sans Tai Le Regular", + "postscriptName": "NotoSansTaiLe-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Tai Le", + "fullName": "Noto Sans Tai Le Regular", + "postscriptName": "NotoSansTaiLe-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansTaiTham": { + "familyName": "Noto Sans Tai Tham", + "fullName": "Noto Sans Tai Tham Regular", + "postscriptName": "NotoSansTaiTham-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1069, + "descent": -520, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 619 + } + }, + "variants": { + "500": { + "familyName": "Noto Sans Tai Tham", + "fullName": "Noto Sans Tai Tham Medium", + "postscriptName": "NotoSansTaiTham-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1069, + "descent": -520, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 619 + } + } + }, + "600": { + "familyName": "Noto Sans Tai Tham", + "fullName": "Noto Sans Tai Tham SemiBold", + "postscriptName": "NotoSansTaiTham-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1069, + "descent": -520, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 514, + "subsets": { + "latin": { + "xWidthAvg": 514 + }, + "thai": { + "xWidthAvg": 619 + } + } + }, + "700": { + "familyName": "Noto Sans Tai Tham", + "fullName": "Noto Sans Tai Tham Bold", + "postscriptName": "NotoSansTaiTham-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1069, + "descent": -520, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 524, + "subsets": { + "latin": { + "xWidthAvg": 524 + }, + "thai": { + "xWidthAvg": 619 + } + } + }, + "regular": { + "familyName": "Noto Sans Tai Tham", + "fullName": "Noto Sans Tai Tham Regular", + "postscriptName": "NotoSansTaiTham-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1069, + "descent": -520, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 619 + } + } + } + } + }, + "notoSansTaiViet": { + "familyName": "Noto Sans Tai Viet", + "fullName": "Noto Sans Tai Viet Regular", + "postscriptName": "NotoSansTaiViet-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Tai Viet", + "fullName": "Noto Sans Tai Viet Regular", + "postscriptName": "NotoSansTaiViet-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansTakri": { + "familyName": "Noto Sans Takri", + "fullName": "Noto Sans Takri Regular", + "postscriptName": "NotoSansTakri-Regular", + "category": "sans-serif", + "capHeight": 625, + "ascent": 955, + "descent": -307, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Takri", + "fullName": "Noto Sans Takri Regular", + "postscriptName": "NotoSansTakri-Regular", + "category": "sans-serif", + "capHeight": 625, + "ascent": 955, + "descent": -307, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansTamil": { + "familyName": "Noto Sans Tamil", + "fullName": "Noto Sans Tamil Regular", + "postscriptName": "NotoSansTamil-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 870, + "descent": -370, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Tamil", + "fullName": "Noto Sans Tamil Thin", + "postscriptName": "NotoSansTamil-Thin", + "category": "sans-serif", + "capHeight": 714, + "ascent": 870, + "descent": -370, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Sans Tamil", + "fullName": "Noto Sans Tamil ExtraLight", + "postscriptName": "NotoSansTamil-ExtraLight", + "category": "sans-serif", + "capHeight": 714, + "ascent": 870, + "descent": -370, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Sans Tamil", + "fullName": "Noto Sans Tamil Light", + "postscriptName": "NotoSansTamil-Light", + "category": "sans-serif", + "capHeight": 714, + "ascent": 870, + "descent": -370, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Sans Tamil", + "fullName": "Noto Sans Tamil Medium", + "postscriptName": "NotoSansTamil-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 870, + "descent": -370, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Tamil", + "fullName": "Noto Sans Tamil SemiBold", + "postscriptName": "NotoSansTamil-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 870, + "descent": -370, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Tamil", + "fullName": "Noto Sans Tamil Bold", + "postscriptName": "NotoSansTamil-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 870, + "descent": -370, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Sans Tamil", + "fullName": "Noto Sans Tamil ExtraBold", + "postscriptName": "NotoSansTamil-ExtraBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 870, + "descent": -370, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Sans Tamil", + "fullName": "Noto Sans Tamil Black", + "postscriptName": "NotoSansTamil-Black", + "category": "sans-serif", + "capHeight": 714, + "ascent": 870, + "descent": -370, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 521, + "subsets": { + "latin": { + "xWidthAvg": 521 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Tamil", + "fullName": "Noto Sans Tamil Regular", + "postscriptName": "NotoSansTamil-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 870, + "descent": -370, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansTamilSupplement": { + "familyName": "Noto Sans Tamil Supplement", + "fullName": "Noto Sans Tamil Supplement Regular", + "postscriptName": "NotoSansTamilSupplement-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 870, + "descent": -370, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Tamil Supplement", + "fullName": "Noto Sans Tamil Supplement Regular", + "postscriptName": "NotoSansTamilSupplement-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 870, + "descent": -370, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansTangsa": { + "familyName": "Noto Sans Tangsa", + "fullName": "Noto Sans Tangsa Regular", + "postscriptName": "NotoSansTangsa-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "500": { + "familyName": "Noto Sans Tangsa", + "fullName": "Noto Sans Tangsa Medium", + "postscriptName": "NotoSansTangsa-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 605 + } + } + }, + "600": { + "familyName": "Noto Sans Tangsa", + "fullName": "Noto Sans Tangsa SemiBold", + "postscriptName": "NotoSansTangsa-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 611 + } + } + }, + "700": { + "familyName": "Noto Sans Tangsa", + "fullName": "Noto Sans Tangsa Bold", + "postscriptName": "NotoSansTangsa-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 617 + } + } + }, + "regular": { + "familyName": "Noto Sans Tangsa", + "fullName": "Noto Sans Tangsa Regular", + "postscriptName": "NotoSansTangsa-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansTelugu": { + "familyName": "Noto Sans Telugu", + "fullName": "Noto Sans Telugu Regular", + "postscriptName": "NotoSansTelugu-Regular", + "category": "sans-serif", + "capHeight": 620, + "ascent": 869, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Telugu", + "fullName": "Noto Sans Telugu Thin", + "postscriptName": "NotoSansTelugu-Thin", + "category": "sans-serif", + "capHeight": 620, + "ascent": 869, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Sans Telugu", + "fullName": "Noto Sans Telugu ExtraLight", + "postscriptName": "NotoSansTelugu-ExtraLight", + "category": "sans-serif", + "capHeight": 620, + "ascent": 869, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Sans Telugu", + "fullName": "Noto Sans Telugu Light", + "postscriptName": "NotoSansTelugu-Light", + "category": "sans-serif", + "capHeight": 620, + "ascent": 869, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 497, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Sans Telugu", + "fullName": "Noto Sans Telugu Medium", + "postscriptName": "NotoSansTelugu-Medium", + "category": "sans-serif", + "capHeight": 620, + "ascent": 869, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Telugu", + "fullName": "Noto Sans Telugu SemiBold", + "postscriptName": "NotoSansTelugu-SemiBold", + "category": "sans-serif", + "capHeight": 620, + "ascent": 869, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 496, + "subsets": { + "latin": { + "xWidthAvg": 496 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Telugu", + "fullName": "Noto Sans Telugu Bold", + "postscriptName": "NotoSansTelugu-Bold", + "category": "sans-serif", + "capHeight": 620, + "ascent": 869, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 508, + "subsets": { + "latin": { + "xWidthAvg": 508 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Sans Telugu", + "fullName": "Noto Sans Telugu ExtraBold", + "postscriptName": "NotoSansTelugu-ExtraBold", + "category": "sans-serif", + "capHeight": 620, + "ascent": 869, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 516, + "subsets": { + "latin": { + "xWidthAvg": 516 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Sans Telugu", + "fullName": "Noto Sans Telugu Black", + "postscriptName": "NotoSansTelugu-Black", + "category": "sans-serif", + "capHeight": 620, + "ascent": 869, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Telugu", + "fullName": "Noto Sans Telugu Regular", + "postscriptName": "NotoSansTelugu-Regular", + "category": "sans-serif", + "capHeight": 620, + "ascent": 869, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansThaana": { + "familyName": "Noto Sans Thaana", + "fullName": "Noto Sans Thaana Regular", + "postscriptName": "NotoSansThaana-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -424, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Thaana", + "fullName": "Noto Sans Thaana Thin", + "postscriptName": "NotoSansThaana-Thin", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -424, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Sans Thaana", + "fullName": "Noto Sans Thaana ExtraLight", + "postscriptName": "NotoSansThaana-ExtraLight", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -424, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Sans Thaana", + "fullName": "Noto Sans Thaana Light", + "postscriptName": "NotoSansThaana-Light", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -424, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Sans Thaana", + "fullName": "Noto Sans Thaana Medium", + "postscriptName": "NotoSansThaana-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -424, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Sans Thaana", + "fullName": "Noto Sans Thaana SemiBold", + "postscriptName": "NotoSansThaana-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -424, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Sans Thaana", + "fullName": "Noto Sans Thaana Bold", + "postscriptName": "NotoSansThaana-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -424, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Sans Thaana", + "fullName": "Noto Sans Thaana ExtraBold", + "postscriptName": "NotoSansThaana-ExtraBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -424, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 513, + "subsets": { + "latin": { + "xWidthAvg": 513 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Sans Thaana", + "fullName": "Noto Sans Thaana Black", + "postscriptName": "NotoSansThaana-Black", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -424, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 521, + "subsets": { + "latin": { + "xWidthAvg": 521 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Sans Thaana", + "fullName": "Noto Sans Thaana Regular", + "postscriptName": "NotoSansThaana-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -424, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansThai": { + "familyName": "Noto Sans Thai", + "fullName": "Noto Sans Thai Regular", + "postscriptName": "NotoSansThai-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1061, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 556, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 536 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Thai", + "fullName": "Noto Sans Thai Thin", + "postscriptName": "NotoSansThai-Thin", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1061, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 556, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 523 + } + } + }, + "200": { + "familyName": "Noto Sans Thai", + "fullName": "Noto Sans Thai ExtraLight", + "postscriptName": "NotoSansThai-ExtraLight", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1061, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 556, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 526 + } + } + }, + "300": { + "familyName": "Noto Sans Thai", + "fullName": "Noto Sans Thai Light", + "postscriptName": "NotoSansThai-Light", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1061, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 556, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 530 + } + } + }, + "500": { + "familyName": "Noto Sans Thai", + "fullName": "Noto Sans Thai Medium", + "postscriptName": "NotoSansThai-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1061, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 556, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "600": { + "familyName": "Noto Sans Thai", + "fullName": "Noto Sans Thai SemiBold", + "postscriptName": "NotoSansThai-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1061, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 556, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 556 + } + } + }, + "700": { + "familyName": "Noto Sans Thai", + "fullName": "Noto Sans Thai Bold", + "postscriptName": "NotoSansThai-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1061, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 556, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 567 + } + } + }, + "800": { + "familyName": "Noto Sans Thai", + "fullName": "Noto Sans Thai ExtraBold", + "postscriptName": "NotoSansThai-ExtraBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1061, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 556, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 576 + } + } + }, + "900": { + "familyName": "Noto Sans Thai", + "fullName": "Noto Sans Thai Black", + "postscriptName": "NotoSansThai-Black", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1061, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 556, + "xWidthAvg": 521, + "subsets": { + "latin": { + "xWidthAvg": 521 + }, + "thai": { + "xWidthAvg": 586 + } + } + }, + "regular": { + "familyName": "Noto Sans Thai", + "fullName": "Noto Sans Thai Regular", + "postscriptName": "NotoSansThai-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1061, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 556, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 536 + } + } + } + } + }, + "notoSansThaiLooped": { + "familyName": "Noto Sans Thai Looped", + "fullName": "Noto Sans Thai Looped Regular", + "postscriptName": "NotoSansThaiLooped-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1250, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 573 + } + }, + "variants": { + "100": { + "familyName": "Noto Sans Thai Looped", + "fullName": "Noto Sans Thai Looped Thin", + "postscriptName": "NotoSansThaiLooped-Thin", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1250, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 528, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 533 + } + } + }, + "200": { + "familyName": "Noto Sans Thai Looped", + "fullName": "Noto Sans Thai Looped ExtraLight", + "postscriptName": "NotoSansThaiLooped-ExtraLight", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1250, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 541 + } + } + }, + "300": { + "familyName": "Noto Sans Thai Looped", + "fullName": "Noto Sans Thai Looped Light", + "postscriptName": "NotoSansThaiLooped-Light", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1250, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 532, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 553 + } + } + }, + "500": { + "familyName": "Noto Sans Thai Looped", + "fullName": "Noto Sans Thai Looped Medium", + "postscriptName": "NotoSansThaiLooped-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1250, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 539, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 581 + } + } + }, + "600": { + "familyName": "Noto Sans Thai Looped", + "fullName": "Noto Sans Thai Looped SemiBold", + "postscriptName": "NotoSansThaiLooped-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1250, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 542, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 592 + } + } + }, + "700": { + "familyName": "Noto Sans Thai Looped", + "fullName": "Noto Sans Thai Looped Bold", + "postscriptName": "NotoSansThaiLooped-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1250, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 501, + "subsets": { + "latin": { + "xWidthAvg": 501 + }, + "thai": { + "xWidthAvg": 603 + } + } + }, + "800": { + "familyName": "Noto Sans Thai Looped", + "fullName": "Noto Sans Thai Looped ExtraBold", + "postscriptName": "NotoSansThaiLooped-ExtraBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1250, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 549, + "xWidthAvg": 508, + "subsets": { + "latin": { + "xWidthAvg": 508 + }, + "thai": { + "xWidthAvg": 612 + } + } + }, + "900": { + "familyName": "Noto Sans Thai Looped", + "fullName": "Noto Sans Thai Looped Black", + "postscriptName": "NotoSansThaiLooped-Black", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1250, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 553, + "xWidthAvg": 518, + "subsets": { + "latin": { + "xWidthAvg": 518 + }, + "thai": { + "xWidthAvg": 622 + } + } + }, + "regular": { + "familyName": "Noto Sans Thai Looped", + "fullName": "Noto Sans Thai Looped Regular", + "postscriptName": "NotoSansThaiLooped-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1250, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 573 + } + } + } + } + }, + "notoSansTifinagh": { + "familyName": "Noto Sans Tifinagh", + "fullName": "Noto Sans Tifinagh Regular", + "postscriptName": "NotoSansTifinagh-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Tifinagh", + "fullName": "Noto Sans Tifinagh Regular", + "postscriptName": "NotoSansTifinagh-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansTirhuta": { + "familyName": "Noto Sans Tirhuta", + "fullName": "Noto Sans Tirhuta Regular", + "postscriptName": "NotoSansTirhuta-Regular", + "category": "sans-serif", + "capHeight": 622, + "ascent": 1026, + "descent": -519, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Tirhuta", + "fullName": "Noto Sans Tirhuta Regular", + "postscriptName": "NotoSansTirhuta-Regular", + "category": "sans-serif", + "capHeight": 622, + "ascent": 1026, + "descent": -519, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansUgaritic": { + "familyName": "Noto Sans Ugaritic", + "fullName": "Noto Sans Ugaritic Regular", + "postscriptName": "NotoSansUgaritic-Regular", + "category": "sans-serif", + "capHeight": 723, + "ascent": 743, + "descent": -381, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Ugaritic", + "fullName": "Noto Sans Ugaritic Regular", + "postscriptName": "NotoSansUgaritic-Regular", + "category": "sans-serif", + "capHeight": 723, + "ascent": 743, + "descent": -381, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansVai": { + "familyName": "Noto Sans Vai", + "fullName": "Noto Sans Vai Regular", + "postscriptName": "NotoSansVai-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Vai", + "fullName": "Noto Sans Vai Regular", + "postscriptName": "NotoSansVai-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansVithkuqi": { + "familyName": "Noto Sans Vithkuqi", + "fullName": "Noto Sans Vithkuqi Regular", + "postscriptName": "NotoSansVithkuqi-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "500": { + "familyName": "Noto Sans Vithkuqi", + "fullName": "Noto Sans Vithkuqi Medium", + "postscriptName": "NotoSansVithkuqi-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 594 + } + } + }, + "600": { + "familyName": "Noto Sans Vithkuqi", + "fullName": "Noto Sans Vithkuqi SemiBold", + "postscriptName": "NotoSansVithkuqi-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 588 + } + } + }, + "700": { + "familyName": "Noto Sans Vithkuqi", + "fullName": "Noto Sans Vithkuqi Bold", + "postscriptName": "NotoSansVithkuqi-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 582 + } + } + }, + "regular": { + "familyName": "Noto Sans Vithkuqi", + "fullName": "Noto Sans Vithkuqi Regular", + "postscriptName": "NotoSansVithkuqi-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansWancho": { + "familyName": "Noto Sans Wancho", + "fullName": "Noto Sans Wancho Regular", + "postscriptName": "NotoSansWancho-Regular", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1096, + "descent": -161, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 496, + "subsets": { + "latin": { + "xWidthAvg": 496 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Wancho", + "fullName": "Noto Sans Wancho Regular", + "postscriptName": "NotoSansWancho-Regular", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1096, + "descent": -161, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 496, + "subsets": { + "latin": { + "xWidthAvg": 496 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSansWarangCiti": { + "familyName": "Noto Sans Warang Citi", + "fullName": "Noto Sans Warang Citi Regular", + "postscriptName": "NotoSansWarangCiti-Regular", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1042, + "descent": -100, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 561, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Warang Citi", + "fullName": "Noto Sans Warang Citi Regular", + "postscriptName": "NotoSansWarangCiti-Regular", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1042, + "descent": -100, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 561, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "notoSansYi": { + "familyName": "Noto Sans Yi", + "fullName": "Noto Sans Yi Regular", + "postscriptName": "NotoSansYi-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 439 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Yi", + "fullName": "Noto Sans Yi Regular", + "postscriptName": "NotoSansYi-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 439 + } + } + } + } + }, + "notoSansZanabazarSquare": { + "familyName": "Noto Sans Zanabazar Square", + "fullName": "Noto Sans Zanabazar Square Regular", + "postscriptName": "NotoSansZanabazarSquare-Regular", + "category": "sans-serif", + "capHeight": 678, + "ascent": 1621, + "descent": -821, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Sans Zanabazar Square", + "fullName": "Noto Sans Zanabazar Square Regular", + "postscriptName": "NotoSansZanabazarSquare-Regular", + "category": "sans-serif", + "capHeight": 678, + "ascent": 1621, + "descent": -821, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSerif": { + "familyName": "Noto Serif", + "fullName": "Noto Serif Regular", + "postscriptName": "NotoSerif-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Serif", + "fullName": "Noto Serif Thin", + "postscriptName": "NotoSerif-Thin", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Serif", + "fullName": "Noto Serif ExtraLight", + "postscriptName": "NotoSerif-ExtraLight", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Serif", + "fullName": "Noto Serif Light", + "postscriptName": "NotoSerif-Light", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Serif", + "fullName": "Noto Serif Medium", + "postscriptName": "NotoSerif-Medium", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 595 + } + } + }, + "600": { + "familyName": "Noto Serif", + "fullName": "Noto Serif SemiBold", + "postscriptName": "NotoSerif-SemiBold", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 589 + } + } + }, + "700": { + "familyName": "Noto Serif", + "fullName": "Noto Serif Bold", + "postscriptName": "NotoSerif-Bold", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 582 + } + } + }, + "800": { + "familyName": "Noto Serif", + "fullName": "Noto Serif ExtraBold", + "postscriptName": "NotoSerif-ExtraBold", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 524, + "subsets": { + "latin": { + "xWidthAvg": 524 + }, + "thai": { + "xWidthAvg": 592 + } + } + }, + "900": { + "familyName": "Noto Serif", + "fullName": "Noto Serif Black", + "postscriptName": "NotoSerif-Black", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 533, + "subsets": { + "latin": { + "xWidthAvg": 533 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Serif", + "fullName": "Noto Serif Regular", + "postscriptName": "NotoSerif-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "italic": { + "familyName": "Noto Serif", + "fullName": "Noto Serif Italic", + "postscriptName": "NotoSerif-Italic", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900italic": { + "familyName": "Noto Serif", + "fullName": "Noto Serif Black Italic", + "postscriptName": "NotoSerif-BlackItalic", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 552, + "subsets": { + "latin": { + "xWidthAvg": 552 + }, + "thai": { + "xWidthAvg": 426 + } + } + }, + "800italic": { + "familyName": "Noto Serif", + "fullName": "Noto Serif ExtraBold Italic", + "postscriptName": "NotoSerif-ExtraBoldItalic", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 536, + "subsets": { + "latin": { + "xWidthAvg": 536 + }, + "thai": { + "xWidthAvg": 459 + } + } + }, + "700italic": { + "familyName": "Noto Serif", + "fullName": "Noto Serif Bold Italic", + "postscriptName": "NotoSerif-BoldItalic", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 517, + "subsets": { + "latin": { + "xWidthAvg": 517 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600italic": { + "familyName": "Noto Serif", + "fullName": "Noto Serif SemiBold Italic", + "postscriptName": "NotoSerif-SemiBoldItalic", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 538 + } + } + }, + "500italic": { + "familyName": "Noto Serif", + "fullName": "Noto Serif Medium Italic", + "postscriptName": "NotoSerif-MediumItalic", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 572 + } + } + }, + "300italic": { + "familyName": "Noto Serif", + "fullName": "Noto Serif Light Italic", + "postscriptName": "NotoSerif-LightItalic", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 658 + } + } + }, + "200italic": { + "familyName": "Noto Serif", + "fullName": "Noto Serif ExtraLight Italic", + "postscriptName": "NotoSerif-ExtraLightItalic", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 421, + "subsets": { + "latin": { + "xWidthAvg": 421 + }, + "thai": { + "xWidthAvg": 701 + } + } + }, + "100italic": { + "familyName": "Noto Serif", + "fullName": "Noto Serif Thin Italic", + "postscriptName": "NotoSerif-ThinItalic", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 407, + "subsets": { + "latin": { + "xWidthAvg": 407 + }, + "thai": { + "xWidthAvg": 728 + } + } + } + } + }, + "notoSerifAhom": { + "familyName": "Noto Serif Ahom", + "fullName": "Noto Serif Ahom Regular", + "postscriptName": "NotoSerifAhom-Regular", + "category": "serif", + "capHeight": 680, + "ascent": 980, + "descent": -675, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Serif Ahom", + "fullName": "Noto Serif Ahom Regular", + "postscriptName": "NotoSerifAhom-Regular", + "category": "serif", + "capHeight": 680, + "ascent": 980, + "descent": -675, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSerifArmenian": { + "familyName": "Noto Serif Armenian", + "fullName": "Noto Serif Armenian Regular", + "postscriptName": "NotoSerifArmenian-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 554 + } + }, + "variants": { + "100": { + "familyName": "Noto Serif Armenian", + "fullName": "Noto Serif Armenian Thin", + "postscriptName": "NotoSerifArmenian-Thin", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 553 + } + } + }, + "200": { + "familyName": "Noto Serif Armenian", + "fullName": "Noto Serif Armenian ExtraLight", + "postscriptName": "NotoSerifArmenian-ExtraLight", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 553 + } + } + }, + "300": { + "familyName": "Noto Serif Armenian", + "fullName": "Noto Serif Armenian Light", + "postscriptName": "NotoSerifArmenian-Light", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 553 + } + } + }, + "500": { + "familyName": "Noto Serif Armenian", + "fullName": "Noto Serif Armenian Medium", + "postscriptName": "NotoSerifArmenian-Medium", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 567 + } + } + }, + "600": { + "familyName": "Noto Serif Armenian", + "fullName": "Noto Serif Armenian SemiBold", + "postscriptName": "NotoSerifArmenian-SemiBold", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 583 + } + } + }, + "700": { + "familyName": "Noto Serif Armenian", + "fullName": "Noto Serif Armenian Bold", + "postscriptName": "NotoSerifArmenian-Bold", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Serif Armenian", + "fullName": "Noto Serif Armenian ExtraBold", + "postscriptName": "NotoSerifArmenian-ExtraBold", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 524, + "subsets": { + "latin": { + "xWidthAvg": 524 + }, + "thai": { + "xWidthAvg": 616 + } + } + }, + "900": { + "familyName": "Noto Serif Armenian", + "fullName": "Noto Serif Armenian Black", + "postscriptName": "NotoSerifArmenian-Black", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 533, + "subsets": { + "latin": { + "xWidthAvg": 533 + }, + "thai": { + "xWidthAvg": 629 + } + } + }, + "regular": { + "familyName": "Noto Serif Armenian", + "fullName": "Noto Serif Armenian Regular", + "postscriptName": "NotoSerifArmenian-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 554 + } + } + } + } + }, + "notoSerifBalinese": { + "familyName": "Noto Serif Balinese", + "fullName": "Noto Serif Balinese Regular", + "postscriptName": "NotoSerifBalinese-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -726, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Serif Balinese", + "fullName": "Noto Serif Balinese Regular", + "postscriptName": "NotoSerifBalinese-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -726, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSerifBengali": { + "familyName": "Noto Serif Bengali", + "fullName": "Noto Serif Bengali Regular", + "postscriptName": "NotoSerifBengali-Regular", + "category": "serif", + "capHeight": 622, + "ascent": 1092, + "descent": -502, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Serif Bengali", + "fullName": "Noto Serif Bengali Thin", + "postscriptName": "NotoSerifBengali-Thin", + "category": "serif", + "capHeight": 622, + "ascent": 1092, + "descent": -502, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Serif Bengali", + "fullName": "Noto Serif Bengali ExtraLight", + "postscriptName": "NotoSerifBengali-ExtraLight", + "category": "serif", + "capHeight": 622, + "ascent": 1092, + "descent": -502, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Serif Bengali", + "fullName": "Noto Serif Bengali Light", + "postscriptName": "NotoSerifBengali-Light", + "category": "serif", + "capHeight": 622, + "ascent": 1092, + "descent": -502, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Serif Bengali", + "fullName": "Noto Serif Bengali Medium", + "postscriptName": "NotoSerifBengali-Medium", + "category": "serif", + "capHeight": 622, + "ascent": 1092, + "descent": -502, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Serif Bengali", + "fullName": "Noto Serif Bengali SemiBold", + "postscriptName": "NotoSerifBengali-SemiBold", + "category": "serif", + "capHeight": 622, + "ascent": 1092, + "descent": -502, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 501, + "subsets": { + "latin": { + "xWidthAvg": 501 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Serif Bengali", + "fullName": "Noto Serif Bengali Bold", + "postscriptName": "NotoSerifBengali-Bold", + "category": "serif", + "capHeight": 622, + "ascent": 1092, + "descent": -502, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Serif Bengali", + "fullName": "Noto Serif Bengali ExtraBold", + "postscriptName": "NotoSerifBengali-ExtraBold", + "category": "serif", + "capHeight": 622, + "ascent": 1092, + "descent": -502, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 524, + "subsets": { + "latin": { + "xWidthAvg": 524 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Serif Bengali", + "fullName": "Noto Serif Bengali Black", + "postscriptName": "NotoSerifBengali-Black", + "category": "serif", + "capHeight": 622, + "ascent": 1092, + "descent": -502, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 534, + "subsets": { + "latin": { + "xWidthAvg": 534 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Serif Bengali", + "fullName": "Noto Serif Bengali Regular", + "postscriptName": "NotoSerifBengali-Regular", + "category": "serif", + "capHeight": 622, + "ascent": 1092, + "descent": -502, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSerifDevanagari": { + "familyName": "Noto Serif Devanagari", + "fullName": "Noto Serif Devanagari Regular", + "postscriptName": "NotoSerifDevanagari-Regular", + "category": "serif", + "capHeight": 715, + "ascent": 930, + "descent": -625, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 623, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 596 + } + }, + "variants": { + "100": { + "familyName": "Noto Serif Devanagari", + "fullName": "Noto Serif Devanagari Thin", + "postscriptName": "NotoSerifDevanagari-Thin", + "category": "serif", + "capHeight": 715, + "ascent": 930, + "descent": -625, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 622, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 596 + } + } + }, + "200": { + "familyName": "Noto Serif Devanagari", + "fullName": "Noto Serif Devanagari ExtraLight", + "postscriptName": "NotoSerifDevanagari-ExtraLight", + "category": "serif", + "capHeight": 715, + "ascent": 930, + "descent": -625, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 622, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 596 + } + } + }, + "300": { + "familyName": "Noto Serif Devanagari", + "fullName": "Noto Serif Devanagari Light", + "postscriptName": "NotoSerifDevanagari-Light", + "category": "serif", + "capHeight": 715, + "ascent": 930, + "descent": -625, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 623, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 596 + } + } + }, + "500": { + "familyName": "Noto Serif Devanagari", + "fullName": "Noto Serif Devanagari Medium", + "postscriptName": "NotoSerifDevanagari-Medium", + "category": "serif", + "capHeight": 715, + "ascent": 930, + "descent": -625, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 624, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 596 + } + } + }, + "600": { + "familyName": "Noto Serif Devanagari", + "fullName": "Noto Serif Devanagari SemiBold", + "postscriptName": "NotoSerifDevanagari-SemiBold", + "category": "serif", + "capHeight": 715, + "ascent": 930, + "descent": -625, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 624, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 596 + } + } + }, + "700": { + "familyName": "Noto Serif Devanagari", + "fullName": "Noto Serif Devanagari Bold", + "postscriptName": "NotoSerifDevanagari-Bold", + "category": "serif", + "capHeight": 715, + "ascent": 930, + "descent": -625, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 625, + "xWidthAvg": 516, + "subsets": { + "latin": { + "xWidthAvg": 516 + }, + "thai": { + "xWidthAvg": 596 + } + } + }, + "800": { + "familyName": "Noto Serif Devanagari", + "fullName": "Noto Serif Devanagari ExtraBold", + "postscriptName": "NotoSerifDevanagari-ExtraBold", + "category": "serif", + "capHeight": 715, + "ascent": 930, + "descent": -625, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 626, + "xWidthAvg": 530, + "subsets": { + "latin": { + "xWidthAvg": 530 + }, + "thai": { + "xWidthAvg": 596 + } + } + }, + "900": { + "familyName": "Noto Serif Devanagari", + "fullName": "Noto Serif Devanagari Black", + "postscriptName": "NotoSerifDevanagari-Black", + "category": "serif", + "capHeight": 715, + "ascent": 930, + "descent": -625, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 627, + "xWidthAvg": 541, + "subsets": { + "latin": { + "xWidthAvg": 541 + }, + "thai": { + "xWidthAvg": 596 + } + } + }, + "regular": { + "familyName": "Noto Serif Devanagari", + "fullName": "Noto Serif Devanagari Regular", + "postscriptName": "NotoSerifDevanagari-Regular", + "category": "serif", + "capHeight": 715, + "ascent": 930, + "descent": -625, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 623, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 596 + } + } + } + } + }, + "notoSerifDisplay": { + "familyName": "Noto Serif Display", + "fullName": "Noto Serif Display Regular", + "postscriptName": "NotoSerifDisplay-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 476, + "subsets": { + "latin": { + "xWidthAvg": 476 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Serif Display", + "fullName": "Noto Serif Display Thin", + "postscriptName": "NotoSerifDisplay-Thin", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Serif Display", + "fullName": "Noto Serif Display ExtraLight", + "postscriptName": "NotoSerifDisplay-ExtraLight", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Serif Display", + "fullName": "Noto Serif Display Light", + "postscriptName": "NotoSerifDisplay-Light", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Serif Display", + "fullName": "Noto Serif Display Medium", + "postscriptName": "NotoSerifDisplay-Medium", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Serif Display", + "fullName": "Noto Serif Display SemiBold", + "postscriptName": "NotoSerifDisplay-SemiBold", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Serif Display", + "fullName": "Noto Serif Display Bold", + "postscriptName": "NotoSerifDisplay-Bold", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Serif Display", + "fullName": "Noto Serif Display ExtraBold", + "postscriptName": "NotoSerifDisplay-ExtraBold", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 518, + "subsets": { + "latin": { + "xWidthAvg": 518 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Serif Display", + "fullName": "Noto Serif Display Black", + "postscriptName": "NotoSerifDisplay-Black", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Serif Display", + "fullName": "Noto Serif Display Regular", + "postscriptName": "NotoSerifDisplay-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 476, + "subsets": { + "latin": { + "xWidthAvg": 476 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "italic": { + "familyName": "Noto Serif Display", + "fullName": "Noto Serif Display Italic", + "postscriptName": "NotoSerifDisplay-Italic", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900italic": { + "familyName": "Noto Serif Display", + "fullName": "Noto Serif Display Black Italic", + "postscriptName": "NotoSerifDisplay-BlackItalic", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 544, + "subsets": { + "latin": { + "xWidthAvg": 544 + }, + "thai": { + "xWidthAvg": 426 + } + } + }, + "800italic": { + "familyName": "Noto Serif Display", + "fullName": "Noto Serif Display ExtraBold Italic", + "postscriptName": "NotoSerifDisplay-ExtraBoldItalic", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 459 + } + } + }, + "700italic": { + "familyName": "Noto Serif Display", + "fullName": "Noto Serif Display Bold Italic", + "postscriptName": "NotoSerifDisplay-BoldItalic", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 509, + "subsets": { + "latin": { + "xWidthAvg": 509 + }, + "thai": { + "xWidthAvg": 499 + } + } + }, + "600italic": { + "familyName": "Noto Serif Display", + "fullName": "Noto Serif Display SemiBold Italic", + "postscriptName": "NotoSerifDisplay-SemiBoldItalic", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 537 + } + } + }, + "500italic": { + "familyName": "Noto Serif Display", + "fullName": "Noto Serif Display Medium Italic", + "postscriptName": "NotoSerifDisplay-MediumItalic", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 572 + } + } + }, + "300italic": { + "familyName": "Noto Serif Display", + "fullName": "Noto Serif Display Light Italic", + "postscriptName": "NotoSerifDisplay-LightItalic", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 658 + } + } + }, + "200italic": { + "familyName": "Noto Serif Display", + "fullName": "Noto Serif Display ExtraLight Italic", + "postscriptName": "NotoSerifDisplay-ExtraLightItalic", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 414, + "subsets": { + "latin": { + "xWidthAvg": 414 + }, + "thai": { + "xWidthAvg": 701 + } + } + }, + "100italic": { + "familyName": "Noto Serif Display", + "fullName": "Noto Serif Display Thin Italic", + "postscriptName": "NotoSerifDisplay-ThinItalic", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 400, + "subsets": { + "latin": { + "xWidthAvg": 400 + }, + "thai": { + "xWidthAvg": 728 + } + } + } + } + }, + "notoSerifDogra": { + "familyName": "Noto Serif Dogra", + "fullName": "Noto Serif Dogra Regular", + "postscriptName": "NotoSerifDogra-Regular", + "category": "serif", + "capHeight": 625, + "ascent": 1130, + "descent": -364, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Serif Dogra", + "fullName": "Noto Serif Dogra Regular", + "postscriptName": "NotoSerifDogra-Regular", + "category": "serif", + "capHeight": 625, + "ascent": 1130, + "descent": -364, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSerifEthiopic": { + "familyName": "Noto Serif Ethiopic", + "fullName": "Noto Serif Ethiopic Regular", + "postscriptName": "NotoSerifEthiopic-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Serif Ethiopic", + "fullName": "Noto Serif Ethiopic Thin", + "postscriptName": "NotoSerifEthiopic-Thin", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Serif Ethiopic", + "fullName": "Noto Serif Ethiopic ExtraLight", + "postscriptName": "NotoSerifEthiopic-ExtraLight", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Serif Ethiopic", + "fullName": "Noto Serif Ethiopic Light", + "postscriptName": "NotoSerifEthiopic-Light", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Serif Ethiopic", + "fullName": "Noto Serif Ethiopic Medium", + "postscriptName": "NotoSerifEthiopic-Medium", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Serif Ethiopic", + "fullName": "Noto Serif Ethiopic SemiBold", + "postscriptName": "NotoSerifEthiopic-SemiBold", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Serif Ethiopic", + "fullName": "Noto Serif Ethiopic Bold", + "postscriptName": "NotoSerifEthiopic-Bold", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Serif Ethiopic", + "fullName": "Noto Serif Ethiopic ExtraBold", + "postscriptName": "NotoSerifEthiopic-ExtraBold", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 524, + "subsets": { + "latin": { + "xWidthAvg": 524 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Serif Ethiopic", + "fullName": "Noto Serif Ethiopic Black", + "postscriptName": "NotoSerifEthiopic-Black", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 533, + "subsets": { + "latin": { + "xWidthAvg": 533 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Serif Ethiopic", + "fullName": "Noto Serif Ethiopic Regular", + "postscriptName": "NotoSerifEthiopic-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSerifGeorgian": { + "familyName": "Noto Serif Georgian", + "fullName": "Noto Serif Georgian Regular", + "postscriptName": "NotoSerifGeorgian-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 554 + } + }, + "variants": { + "100": { + "familyName": "Noto Serif Georgian", + "fullName": "Noto Serif Georgian Thin", + "postscriptName": "NotoSerifGeorgian-Thin", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 553 + } + } + }, + "200": { + "familyName": "Noto Serif Georgian", + "fullName": "Noto Serif Georgian ExtraLight", + "postscriptName": "NotoSerifGeorgian-ExtraLight", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 553 + } + } + }, + "300": { + "familyName": "Noto Serif Georgian", + "fullName": "Noto Serif Georgian Light", + "postscriptName": "NotoSerifGeorgian-Light", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 554 + } + } + }, + "500": { + "familyName": "Noto Serif Georgian", + "fullName": "Noto Serif Georgian Medium", + "postscriptName": "NotoSerifGeorgian-Medium", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 567 + } + } + }, + "600": { + "familyName": "Noto Serif Georgian", + "fullName": "Noto Serif Georgian SemiBold", + "postscriptName": "NotoSerifGeorgian-SemiBold", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 583 + } + } + }, + "700": { + "familyName": "Noto Serif Georgian", + "fullName": "Noto Serif Georgian Bold", + "postscriptName": "NotoSerifGeorgian-Bold", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Serif Georgian", + "fullName": "Noto Serif Georgian ExtraBold", + "postscriptName": "NotoSerifGeorgian-ExtraBold", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 524, + "subsets": { + "latin": { + "xWidthAvg": 524 + }, + "thai": { + "xWidthAvg": 616 + } + } + }, + "900": { + "familyName": "Noto Serif Georgian", + "fullName": "Noto Serif Georgian Black", + "postscriptName": "NotoSerifGeorgian-Black", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 533, + "subsets": { + "latin": { + "xWidthAvg": 533 + }, + "thai": { + "xWidthAvg": 629 + } + } + }, + "regular": { + "familyName": "Noto Serif Georgian", + "fullName": "Noto Serif Georgian Regular", + "postscriptName": "NotoSerifGeorgian-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 554 + } + } + } + } + }, + "notoSerifGrantha": { + "familyName": "Noto Serif Grantha", + "fullName": "Noto Serif Grantha Regular", + "postscriptName": "NotoSerifGrantha-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1290, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 566, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Serif Grantha", + "fullName": "Noto Serif Grantha Regular", + "postscriptName": "NotoSerifGrantha-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1290, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 566, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSerifGujarati": { + "familyName": "Noto Serif Gujarati", + "fullName": "Noto Serif Gujarati Regular", + "postscriptName": "NotoSerifGujarati-Regular", + "category": "serif", + "capHeight": 592, + "ascent": 997, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Serif Gujarati", + "fullName": "Noto Serif Gujarati Thin", + "postscriptName": "NotoSerifGujarati-Thin", + "category": "serif", + "capHeight": 592, + "ascent": 997, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Serif Gujarati", + "fullName": "Noto Serif Gujarati ExtraLight", + "postscriptName": "NotoSerifGujarati-ExtraLight", + "category": "serif", + "capHeight": 592, + "ascent": 997, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Serif Gujarati", + "fullName": "Noto Serif Gujarati Light", + "postscriptName": "NotoSerifGujarati-Light", + "category": "serif", + "capHeight": 592, + "ascent": 997, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Serif Gujarati", + "fullName": "Noto Serif Gujarati Medium", + "postscriptName": "NotoSerifGujarati-Medium", + "category": "serif", + "capHeight": 595, + "ascent": 997, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 497, + "subsets": { + "latin": { + "xWidthAvg": 497 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Serif Gujarati", + "fullName": "Noto Serif Gujarati SemiBold", + "postscriptName": "NotoSerifGujarati-SemiBold", + "category": "serif", + "capHeight": 598, + "ascent": 997, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 507, + "subsets": { + "latin": { + "xWidthAvg": 507 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Serif Gujarati", + "fullName": "Noto Serif Gujarati Bold", + "postscriptName": "NotoSerifGujarati-Bold", + "category": "serif", + "capHeight": 602, + "ascent": 997, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 518, + "subsets": { + "latin": { + "xWidthAvg": 518 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Serif Gujarati", + "fullName": "Noto Serif Gujarati ExtraBold", + "postscriptName": "NotoSerifGujarati-ExtraBold", + "category": "serif", + "capHeight": 602, + "ascent": 997, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 530, + "subsets": { + "latin": { + "xWidthAvg": 530 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Serif Gujarati", + "fullName": "Noto Serif Gujarati Black", + "postscriptName": "NotoSerifGujarati-Black", + "category": "serif", + "capHeight": 602, + "ascent": 997, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 540, + "subsets": { + "latin": { + "xWidthAvg": 540 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Serif Gujarati", + "fullName": "Noto Serif Gujarati Regular", + "postscriptName": "NotoSerifGujarati-Regular", + "category": "serif", + "capHeight": 592, + "ascent": 997, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSerifGurmukhi": { + "familyName": "Noto Serif Gurmukhi", + "fullName": "Noto Serif Gurmukhi Regular", + "postscriptName": "NotoSerifGurmukhi-Regular", + "category": "serif", + "capHeight": 622, + "ascent": 1006, + "descent": -428, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Serif Gurmukhi", + "fullName": "Noto Serif Gurmukhi Thin", + "postscriptName": "NotoSerifGurmukhi-Thin", + "category": "serif", + "capHeight": 622, + "ascent": 1006, + "descent": -428, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Serif Gurmukhi", + "fullName": "Noto Serif Gurmukhi ExtraLight", + "postscriptName": "NotoSerifGurmukhi-ExtraLight", + "category": "serif", + "capHeight": 622, + "ascent": 1006, + "descent": -428, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Serif Gurmukhi", + "fullName": "Noto Serif Gurmukhi Light", + "postscriptName": "NotoSerifGurmukhi-Light", + "category": "serif", + "capHeight": 622, + "ascent": 1006, + "descent": -428, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Serif Gurmukhi", + "fullName": "Noto Serif Gurmukhi Medium", + "postscriptName": "NotoSerifGurmukhi-Medium", + "category": "serif", + "capHeight": 622, + "ascent": 1006, + "descent": -428, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Serif Gurmukhi", + "fullName": "Noto Serif Gurmukhi SemiBold", + "postscriptName": "NotoSerifGurmukhi-SemiBold", + "category": "serif", + "capHeight": 622, + "ascent": 1006, + "descent": -428, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Serif Gurmukhi", + "fullName": "Noto Serif Gurmukhi Bold", + "postscriptName": "NotoSerifGurmukhi-Bold", + "category": "serif", + "capHeight": 622, + "ascent": 1006, + "descent": -428, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Serif Gurmukhi", + "fullName": "Noto Serif Gurmukhi ExtraBold", + "postscriptName": "NotoSerifGurmukhi-ExtraBold", + "category": "serif", + "capHeight": 622, + "ascent": 1006, + "descent": -428, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 524, + "subsets": { + "latin": { + "xWidthAvg": 524 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Serif Gurmukhi", + "fullName": "Noto Serif Gurmukhi Black", + "postscriptName": "NotoSerifGurmukhi-Black", + "category": "serif", + "capHeight": 622, + "ascent": 1006, + "descent": -428, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 533, + "subsets": { + "latin": { + "xWidthAvg": 533 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Serif Gurmukhi", + "fullName": "Noto Serif Gurmukhi Regular", + "postscriptName": "NotoSerifGurmukhi-Regular", + "category": "serif", + "capHeight": 622, + "ascent": 1006, + "descent": -428, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSerifHK": { + "familyName": "Noto Serif HK", + "fullName": "Noto Serif HK Regular", + "postscriptName": "NotoSerifHK-Regular", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "200": { + "familyName": "Noto Serif HK", + "fullName": "Noto Serif HK ExtraLight", + "postscriptName": "NotoSerifHK-ExtraLight", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "300": { + "familyName": "Noto Serif HK", + "fullName": "Noto Serif HK Light", + "postscriptName": "NotoSerifHK-Light", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "500": { + "familyName": "Noto Serif HK", + "fullName": "Noto Serif HK Medium", + "postscriptName": "NotoSerifHK-Medium", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 499, + "subsets": { + "latin": { + "xWidthAvg": 499 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "600": { + "familyName": "Noto Serif HK", + "fullName": "Noto Serif HK SemiBold", + "postscriptName": "NotoSerifHK-SemiBold", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "Noto Serif HK", + "fullName": "Noto Serif HK Bold", + "postscriptName": "NotoSerifHK-Bold", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 514, + "subsets": { + "latin": { + "xWidthAvg": 514 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "800": { + "familyName": "Noto Serif HK", + "fullName": "Noto Serif HK ExtraBold", + "postscriptName": "NotoSerifHK-ExtraBold", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "900": { + "familyName": "Noto Serif HK", + "fullName": "Noto Serif HK Black", + "postscriptName": "NotoSerifHK-Black", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Noto Serif HK", + "fullName": "Noto Serif HK Regular", + "postscriptName": "NotoSerifHK-Regular", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "notoSerifHebrew": { + "familyName": "Noto Serif Hebrew", + "fullName": "Noto Serif Hebrew Regular", + "postscriptName": "NotoSerifHebrew-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 896, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Serif Hebrew", + "fullName": "Noto Serif Hebrew Thin", + "postscriptName": "NotoSerifHebrew-Thin", + "category": "serif", + "capHeight": 714, + "ascent": 896, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Serif Hebrew", + "fullName": "Noto Serif Hebrew ExtraLight", + "postscriptName": "NotoSerifHebrew-ExtraLight", + "category": "serif", + "capHeight": 714, + "ascent": 896, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Serif Hebrew", + "fullName": "Noto Serif Hebrew Light", + "postscriptName": "NotoSerifHebrew-Light", + "category": "serif", + "capHeight": 714, + "ascent": 896, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Serif Hebrew", + "fullName": "Noto Serif Hebrew Medium", + "postscriptName": "NotoSerifHebrew-Medium", + "category": "serif", + "capHeight": 714, + "ascent": 896, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Serif Hebrew", + "fullName": "Noto Serif Hebrew SemiBold", + "postscriptName": "NotoSerifHebrew-SemiBold", + "category": "serif", + "capHeight": 714, + "ascent": 896, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Serif Hebrew", + "fullName": "Noto Serif Hebrew Bold", + "postscriptName": "NotoSerifHebrew-Bold", + "category": "serif", + "capHeight": 714, + "ascent": 896, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Serif Hebrew", + "fullName": "Noto Serif Hebrew ExtraBold", + "postscriptName": "NotoSerifHebrew-ExtraBold", + "category": "serif", + "capHeight": 714, + "ascent": 896, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 524, + "subsets": { + "latin": { + "xWidthAvg": 524 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Serif Hebrew", + "fullName": "Noto Serif Hebrew Black", + "postscriptName": "NotoSerifHebrew-Black", + "category": "serif", + "capHeight": 714, + "ascent": 896, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 533, + "subsets": { + "latin": { + "xWidthAvg": 533 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Serif Hebrew", + "fullName": "Noto Serif Hebrew Regular", + "postscriptName": "NotoSerifHebrew-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 896, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSerifJP": { + "familyName": "Noto Serif JP", + "fullName": "Noto Serif JP Regular", + "postscriptName": "NotoSerifJP-Regular", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "200": { + "familyName": "Noto Serif JP", + "fullName": "Noto Serif JP ExtraLight", + "postscriptName": "NotoSerifJP-ExtraLight", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "300": { + "familyName": "Noto Serif JP", + "fullName": "Noto Serif JP Light", + "postscriptName": "NotoSerifJP-Light", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "500": { + "familyName": "Noto Serif JP", + "fullName": "Noto Serif JP Medium", + "postscriptName": "NotoSerifJP-Medium", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 499, + "subsets": { + "latin": { + "xWidthAvg": 499 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "600": { + "familyName": "Noto Serif JP", + "fullName": "Noto Serif JP SemiBold", + "postscriptName": "NotoSerifJP-SemiBold", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "Noto Serif JP", + "fullName": "Noto Serif JP Bold", + "postscriptName": "NotoSerifJP-Bold", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 514, + "subsets": { + "latin": { + "xWidthAvg": 514 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "800": { + "familyName": "Noto Serif JP", + "fullName": "Noto Serif JP ExtraBold", + "postscriptName": "NotoSerifJP-ExtraBold", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "900": { + "familyName": "Noto Serif JP", + "fullName": "Noto Serif JP Black", + "postscriptName": "NotoSerifJP-Black", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Noto Serif JP", + "fullName": "Noto Serif JP Regular", + "postscriptName": "NotoSerifJP-Regular", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "notoSerifKR": { + "familyName": "Noto Serif KR", + "fullName": "Noto Serif KR Regular", + "postscriptName": "NotoSerifKR-Regular", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "200": { + "familyName": "Noto Serif KR", + "fullName": "Noto Serif KR ExtraLight", + "postscriptName": "NotoSerifKR-ExtraLight", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "300": { + "familyName": "Noto Serif KR", + "fullName": "Noto Serif KR Light", + "postscriptName": "NotoSerifKR-Light", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "500": { + "familyName": "Noto Serif KR", + "fullName": "Noto Serif KR Medium", + "postscriptName": "NotoSerifKR-Medium", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 499, + "subsets": { + "latin": { + "xWidthAvg": 499 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "600": { + "familyName": "Noto Serif KR", + "fullName": "Noto Serif KR SemiBold", + "postscriptName": "NotoSerifKR-SemiBold", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "Noto Serif KR", + "fullName": "Noto Serif KR Bold", + "postscriptName": "NotoSerifKR-Bold", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 514, + "subsets": { + "latin": { + "xWidthAvg": 514 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "800": { + "familyName": "Noto Serif KR", + "fullName": "Noto Serif KR ExtraBold", + "postscriptName": "NotoSerifKR-ExtraBold", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "900": { + "familyName": "Noto Serif KR", + "fullName": "Noto Serif KR Black", + "postscriptName": "NotoSerifKR-Black", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Noto Serif KR", + "fullName": "Noto Serif KR Regular", + "postscriptName": "NotoSerifKR-Regular", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "notoSerifKannada": { + "familyName": "Noto Serif Kannada", + "fullName": "Noto Serif Kannada Regular", + "postscriptName": "NotoSerifKannada-Regular", + "category": "serif", + "capHeight": 690, + "ascent": 910, + "descent": -710, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 547, + "xWidthAvg": 476, + "subsets": { + "latin": { + "xWidthAvg": 476 + }, + "thai": { + "xWidthAvg": 601 + } + }, + "variants": { + "100": { + "familyName": "Noto Serif Kannada", + "fullName": "Noto Serif Kannada Thin", + "postscriptName": "NotoSerifKannada-Thin", + "category": "serif", + "capHeight": 690, + "ascent": 910, + "descent": -710, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 503, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Serif Kannada", + "fullName": "Noto Serif Kannada ExtraLight", + "postscriptName": "NotoSerifKannada-ExtraLight", + "category": "serif", + "capHeight": 690, + "ascent": 910, + "descent": -710, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Serif Kannada", + "fullName": "Noto Serif Kannada Light", + "postscriptName": "NotoSerifKannada-Light", + "category": "serif", + "capHeight": 690, + "ascent": 910, + "descent": -710, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 527, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 601 + } + } + }, + "500": { + "familyName": "Noto Serif Kannada", + "fullName": "Noto Serif Kannada Medium", + "postscriptName": "NotoSerifKannada-Medium", + "category": "serif", + "capHeight": 690, + "ascent": 910, + "descent": -710, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 551, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 598 + } + } + }, + "600": { + "familyName": "Noto Serif Kannada", + "fullName": "Noto Serif Kannada SemiBold", + "postscriptName": "NotoSerifKannada-SemiBold", + "category": "serif", + "capHeight": 690, + "ascent": 910, + "descent": -710, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 556, + "xWidthAvg": 497, + "subsets": { + "latin": { + "xWidthAvg": 497 + }, + "thai": { + "xWidthAvg": 594 + } + } + }, + "700": { + "familyName": "Noto Serif Kannada", + "fullName": "Noto Serif Kannada Bold", + "postscriptName": "NotoSerifKannada-Bold", + "category": "serif", + "capHeight": 690, + "ascent": 910, + "descent": -710, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 561, + "xWidthAvg": 509, + "subsets": { + "latin": { + "xWidthAvg": 509 + }, + "thai": { + "xWidthAvg": 589 + } + } + }, + "800": { + "familyName": "Noto Serif Kannada", + "fullName": "Noto Serif Kannada ExtraBold", + "postscriptName": "NotoSerifKannada-ExtraBold", + "category": "serif", + "capHeight": 690, + "ascent": 910, + "descent": -710, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 564, + "xWidthAvg": 522, + "subsets": { + "latin": { + "xWidthAvg": 522 + }, + "thai": { + "xWidthAvg": 585 + } + } + }, + "900": { + "familyName": "Noto Serif Kannada", + "fullName": "Noto Serif Kannada Black", + "postscriptName": "NotoSerifKannada-Black", + "category": "serif", + "capHeight": 690, + "ascent": 910, + "descent": -710, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 566, + "xWidthAvg": 533, + "subsets": { + "latin": { + "xWidthAvg": 533 + }, + "thai": { + "xWidthAvg": 582 + } + } + }, + "regular": { + "familyName": "Noto Serif Kannada", + "fullName": "Noto Serif Kannada Regular", + "postscriptName": "NotoSerifKannada-Regular", + "category": "serif", + "capHeight": 690, + "ascent": 910, + "descent": -710, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 547, + "xWidthAvg": 476, + "subsets": { + "latin": { + "xWidthAvg": 476 + }, + "thai": { + "xWidthAvg": 601 + } + } + } + } + }, + "notoSerifKhitanSmallScript": { + "familyName": "Noto Serif Khitan Small Script", + "fullName": "Noto Serif Khitan Small Script Regular", + "postscriptName": "NotoSerifKhitanSmallScript-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 2300, + "descent": -1700, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 534, + "subsets": { + "latin": { + "xWidthAvg": 534 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Noto Serif Khitan Small Script", + "fullName": "Noto Serif Khitan Small Script Regular", + "postscriptName": "NotoSerifKhitanSmallScript-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 2300, + "descent": -1700, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 534, + "subsets": { + "latin": { + "xWidthAvg": 534 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "notoSerifKhmer": { + "familyName": "Noto Serif Khmer", + "fullName": "Noto Serif Khmer Regular", + "postscriptName": "NotoSerifKhmer-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 634 + } + }, + "variants": { + "100": { + "familyName": "Noto Serif Khmer", + "fullName": "Noto Serif Khmer Thin", + "postscriptName": "NotoSerifKhmer-Thin", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 588 + } + } + }, + "200": { + "familyName": "Noto Serif Khmer", + "fullName": "Noto Serif Khmer ExtraLight", + "postscriptName": "NotoSerifKhmer-ExtraLight", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 598 + } + } + }, + "300": { + "familyName": "Noto Serif Khmer", + "fullName": "Noto Serif Khmer Light", + "postscriptName": "NotoSerifKhmer-Light", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 613 + } + } + }, + "500": { + "familyName": "Noto Serif Khmer", + "fullName": "Noto Serif Khmer Medium", + "postscriptName": "NotoSerifKhmer-Medium", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 644 + } + } + }, + "600": { + "familyName": "Noto Serif Khmer", + "fullName": "Noto Serif Khmer SemiBold", + "postscriptName": "NotoSerifKhmer-SemiBold", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 656 + } + } + }, + "700": { + "familyName": "Noto Serif Khmer", + "fullName": "Noto Serif Khmer Bold", + "postscriptName": "NotoSerifKhmer-Bold", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 669 + } + } + }, + "800": { + "familyName": "Noto Serif Khmer", + "fullName": "Noto Serif Khmer ExtraBold", + "postscriptName": "NotoSerifKhmer-ExtraBold", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 524, + "subsets": { + "latin": { + "xWidthAvg": 524 + }, + "thai": { + "xWidthAvg": 683 + } + } + }, + "900": { + "familyName": "Noto Serif Khmer", + "fullName": "Noto Serif Khmer Black", + "postscriptName": "NotoSerifKhmer-Black", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 533, + "subsets": { + "latin": { + "xWidthAvg": 533 + }, + "thai": { + "xWidthAvg": 695 + } + } + }, + "regular": { + "familyName": "Noto Serif Khmer", + "fullName": "Noto Serif Khmer Regular", + "postscriptName": "NotoSerifKhmer-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 634 + } + } + } + } + }, + "notoSerifKhojki": { + "familyName": "Noto Serif Khojki", + "fullName": "Noto Serif Khojki Regular", + "postscriptName": "NotoSerifKhojki-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1409, + "descent": -447, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "500": { + "familyName": "Noto Serif Khojki", + "fullName": "Noto Serif Khojki Medium", + "postscriptName": "NotoSerifKhojki-Medium", + "category": "serif", + "capHeight": 714, + "ascent": 1409, + "descent": -447, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Serif Khojki", + "fullName": "Noto Serif Khojki SemiBold", + "postscriptName": "NotoSerifKhojki-SemiBold", + "category": "serif", + "capHeight": 714, + "ascent": 1409, + "descent": -447, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Serif Khojki", + "fullName": "Noto Serif Khojki Bold", + "postscriptName": "NotoSerifKhojki-Bold", + "category": "serif", + "capHeight": 714, + "ascent": 1409, + "descent": -447, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Serif Khojki", + "fullName": "Noto Serif Khojki Regular", + "postscriptName": "NotoSerifKhojki-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1409, + "descent": -447, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSerifLao": { + "familyName": "Noto Serif Lao", + "fullName": "Noto Serif Lao Regular", + "postscriptName": "NotoSerifLao-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1174, + "descent": -482, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "100": { + "familyName": "Noto Serif Lao", + "fullName": "Noto Serif Lao Thin", + "postscriptName": "NotoSerifLao-Thin", + "category": "serif", + "capHeight": 714, + "ascent": 1174, + "descent": -482, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 542, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200": { + "familyName": "Noto Serif Lao", + "fullName": "Noto Serif Lao ExtraLight", + "postscriptName": "NotoSerifLao-ExtraLight", + "category": "serif", + "capHeight": 714, + "ascent": 1174, + "descent": -482, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Noto Serif Lao", + "fullName": "Noto Serif Lao Light", + "postscriptName": "NotoSerifLao-Light", + "category": "serif", + "capHeight": 714, + "ascent": 1174, + "descent": -482, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Noto Serif Lao", + "fullName": "Noto Serif Lao Medium", + "postscriptName": "NotoSerifLao-Medium", + "category": "serif", + "capHeight": 714, + "ascent": 1174, + "descent": -482, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Noto Serif Lao", + "fullName": "Noto Serif Lao SemiBold", + "postscriptName": "NotoSerifLao-SemiBold", + "category": "serif", + "capHeight": 714, + "ascent": 1174, + "descent": -482, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Noto Serif Lao", + "fullName": "Noto Serif Lao Bold", + "postscriptName": "NotoSerifLao-Bold", + "category": "serif", + "capHeight": 714, + "ascent": 1174, + "descent": -482, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Noto Serif Lao", + "fullName": "Noto Serif Lao ExtraBold", + "postscriptName": "NotoSerifLao-ExtraBold", + "category": "serif", + "capHeight": 714, + "ascent": 1174, + "descent": -482, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 524, + "subsets": { + "latin": { + "xWidthAvg": 524 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "Noto Serif Lao", + "fullName": "Noto Serif Lao Black", + "postscriptName": "NotoSerifLao-Black", + "category": "serif", + "capHeight": 714, + "ascent": 1174, + "descent": -482, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 533, + "subsets": { + "latin": { + "xWidthAvg": 533 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Noto Serif Lao", + "fullName": "Noto Serif Lao Regular", + "postscriptName": "NotoSerifLao-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1174, + "descent": -482, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "notoSerifMakasar": { + "familyName": "Noto Serif Makasar", + "fullName": "Noto Serif Makasar Regular", + "postscriptName": "NotoSerifMakasar-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Noto Serif Makasar", + "fullName": "Noto Serif Makasar Regular", + "postscriptName": "NotoSerifMakasar-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "notoSerifMalayalam": { + "familyName": "Noto Serif Malayalam", + "fullName": "Noto Serif Malayalam Regular", + "postscriptName": "NotoSerifMalayalam-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 864, + "descent": -383, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Serif Malayalam", + "fullName": "Noto Serif Malayalam Thin", + "postscriptName": "NotoSerifMalayalam-Thin", + "category": "serif", + "capHeight": 714, + "ascent": 864, + "descent": -383, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 620 + } + } + }, + "200": { + "familyName": "Noto Serif Malayalam", + "fullName": "Noto Serif Malayalam ExtraLight", + "postscriptName": "NotoSerifMalayalam-ExtraLight", + "category": "serif", + "capHeight": 714, + "ascent": 864, + "descent": -383, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 616 + } + } + }, + "300": { + "familyName": "Noto Serif Malayalam", + "fullName": "Noto Serif Malayalam Light", + "postscriptName": "NotoSerifMalayalam-Light", + "category": "serif", + "capHeight": 714, + "ascent": 864, + "descent": -383, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 609 + } + } + }, + "500": { + "familyName": "Noto Serif Malayalam", + "fullName": "Noto Serif Malayalam Medium", + "postscriptName": "NotoSerifMalayalam-Medium", + "category": "serif", + "capHeight": 714, + "ascent": 864, + "descent": -383, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 497, + "subsets": { + "latin": { + "xWidthAvg": 497 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Serif Malayalam", + "fullName": "Noto Serif Malayalam SemiBold", + "postscriptName": "NotoSerifMalayalam-SemiBold", + "category": "serif", + "capHeight": 714, + "ascent": 864, + "descent": -383, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 507, + "subsets": { + "latin": { + "xWidthAvg": 507 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Serif Malayalam", + "fullName": "Noto Serif Malayalam Bold", + "postscriptName": "NotoSerifMalayalam-Bold", + "category": "serif", + "capHeight": 714, + "ascent": 864, + "descent": -383, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Serif Malayalam", + "fullName": "Noto Serif Malayalam ExtraBold", + "postscriptName": "NotoSerifMalayalam-ExtraBold", + "category": "serif", + "capHeight": 714, + "ascent": 864, + "descent": -383, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 530, + "subsets": { + "latin": { + "xWidthAvg": 530 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Serif Malayalam", + "fullName": "Noto Serif Malayalam Black", + "postscriptName": "NotoSerifMalayalam-Black", + "category": "serif", + "capHeight": 714, + "ascent": 864, + "descent": -383, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 540, + "subsets": { + "latin": { + "xWidthAvg": 540 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Serif Malayalam", + "fullName": "Noto Serif Malayalam Regular", + "postscriptName": "NotoSerifMalayalam-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 864, + "descent": -383, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSerifMyanmar": { + "familyName": "Noto Serif Myanmar", + "fullName": "Noto Serif Myanmar Regular", + "postscriptName": "NotoSerifMyanmar-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1239, + "descent": -1260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 558, + "subsets": { + "latin": { + "xWidthAvg": 558 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Serif Myanmar", + "fullName": "Noto Serif Myanmar Thin", + "postscriptName": "NotoSerifMyanmar-Thin", + "category": "serif", + "capHeight": 714, + "ascent": 1239, + "descent": -1260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 556, + "subsets": { + "latin": { + "xWidthAvg": 556 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Serif Myanmar", + "fullName": "Noto Serif Myanmar ExtraLight", + "postscriptName": "NotoSerifMyanmar-ExtraLight", + "category": "serif", + "capHeight": 714, + "ascent": 1239, + "descent": -1260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 556, + "subsets": { + "latin": { + "xWidthAvg": 556 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Serif Myanmar", + "fullName": "Noto Serif Myanmar Light", + "postscriptName": "NotoSerifMyanmar-Light", + "category": "serif", + "capHeight": 714, + "ascent": 1239, + "descent": -1260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 556, + "subsets": { + "latin": { + "xWidthAvg": 556 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Serif Myanmar", + "fullName": "Noto Serif Myanmar Medium", + "postscriptName": "NotoSerifMyanmar-Medium", + "category": "serif", + "capHeight": 714, + "ascent": 1239, + "descent": -1260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 558, + "subsets": { + "latin": { + "xWidthAvg": 558 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Serif Myanmar", + "fullName": "Noto Serif Myanmar SemiBold", + "postscriptName": "NotoSerifMyanmar-SemiBold", + "category": "serif", + "capHeight": 714, + "ascent": 1239, + "descent": -1260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 558, + "subsets": { + "latin": { + "xWidthAvg": 558 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Serif Myanmar", + "fullName": "Noto Serif Myanmar Bold", + "postscriptName": "NotoSerifMyanmar-Bold", + "category": "serif", + "capHeight": 714, + "ascent": 1239, + "descent": -1260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 559, + "subsets": { + "latin": { + "xWidthAvg": 559 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Serif Myanmar", + "fullName": "Noto Serif Myanmar ExtraBold", + "postscriptName": "NotoSerifMyanmar-ExtraBold", + "category": "serif", + "capHeight": 714, + "ascent": 1239, + "descent": -1260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 559, + "subsets": { + "latin": { + "xWidthAvg": 559 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Serif Myanmar", + "fullName": "Noto Serif Myanmar Black", + "postscriptName": "NotoSerifMyanmar-Black", + "category": "serif", + "capHeight": 714, + "ascent": 1239, + "descent": -1260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 559, + "subsets": { + "latin": { + "xWidthAvg": 559 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Serif Myanmar", + "fullName": "Noto Serif Myanmar Regular", + "postscriptName": "NotoSerifMyanmar-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1239, + "descent": -1260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 558, + "subsets": { + "latin": { + "xWidthAvg": 558 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSerifNPHmong": { + "familyName": "Noto Serif NP Hmong", + "fullName": "Noto Serif NP Hmong Regular", + "postscriptName": "NotoSerifNPHmong-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "500": { + "familyName": "Noto Serif NP Hmong", + "fullName": "Noto Serif NP Hmong Medium", + "postscriptName": "NotoSerifNPHmong-Medium", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Serif NP Hmong", + "fullName": "Noto Serif NP Hmong SemiBold", + "postscriptName": "NotoSerifNPHmong-SemiBold", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Serif NP Hmong", + "fullName": "Noto Serif NP Hmong Bold", + "postscriptName": "NotoSerifNPHmong-Bold", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Serif NP Hmong", + "fullName": "Noto Serif NP Hmong Regular", + "postscriptName": "NotoSerifNPHmong-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSerifOldUyghur": { + "familyName": "Noto Serif Old Uyghur", + "fullName": "Noto Serif Old Uyghur Regular", + "postscriptName": "NotoSerifOldUyghur-Regular", + "category": "serif", + "capHeight": 0, + "ascent": 1069, + "descent": -313, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Noto Serif Old Uyghur", + "fullName": "Noto Serif Old Uyghur Regular", + "postscriptName": "NotoSerifOldUyghur-Regular", + "category": "serif", + "capHeight": 0, + "ascent": 1069, + "descent": -313, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSerifOriya": { + "familyName": "Noto Serif Oriya", + "fullName": "Noto Serif Oriya Regular", + "postscriptName": "NotoSerifOriya-Regular", + "category": "serif", + "capHeight": 657, + "ascent": 917, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 657, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "500": { + "familyName": "Noto Serif Oriya", + "fullName": "Noto Serif Oriya Medium", + "postscriptName": "NotoSerifOriya-Medium", + "category": "serif", + "capHeight": 657, + "ascent": 917, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 657, + "xWidthAvg": 515, + "subsets": { + "latin": { + "xWidthAvg": 515 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Serif Oriya", + "fullName": "Noto Serif Oriya SemiBold", + "postscriptName": "NotoSerifOriya-SemiBold", + "category": "serif", + "capHeight": 657, + "ascent": 917, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 657, + "xWidthAvg": 526, + "subsets": { + "latin": { + "xWidthAvg": 526 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Serif Oriya", + "fullName": "Noto Serif Oriya Bold", + "postscriptName": "NotoSerifOriya-Bold", + "category": "serif", + "capHeight": 657, + "ascent": 917, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 657, + "xWidthAvg": 537, + "subsets": { + "latin": { + "xWidthAvg": 537 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Serif Oriya", + "fullName": "Noto Serif Oriya Regular", + "postscriptName": "NotoSerifOriya-Regular", + "category": "serif", + "capHeight": 657, + "ascent": 917, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 657, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSerifOttomanSiyaq": { + "familyName": "Noto Serif Ottoman Siyaq", + "fullName": "Noto Serif Ottoman Siyaq Regular", + "postscriptName": "NotoSerifOttomanSiyaq-Regular", + "category": "serif", + "capHeight": 0, + "ascent": 1069, + "descent": -634, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Noto Serif Ottoman Siyaq", + "fullName": "Noto Serif Ottoman Siyaq Regular", + "postscriptName": "NotoSerifOttomanSiyaq-Regular", + "category": "serif", + "capHeight": 0, + "ascent": 1069, + "descent": -634, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "notoSerifSC": { + "familyName": "Noto Serif SC", + "fullName": "Noto Serif SC Regular", + "postscriptName": "NotoSerifSC-Regular", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "200": { + "familyName": "Noto Serif SC", + "fullName": "Noto Serif SC ExtraLight", + "postscriptName": "NotoSerifSC-ExtraLight", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "300": { + "familyName": "Noto Serif SC", + "fullName": "Noto Serif SC Light", + "postscriptName": "NotoSerifSC-Light", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "500": { + "familyName": "Noto Serif SC", + "fullName": "Noto Serif SC Medium", + "postscriptName": "NotoSerifSC-Medium", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 499, + "subsets": { + "latin": { + "xWidthAvg": 499 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "600": { + "familyName": "Noto Serif SC", + "fullName": "Noto Serif SC SemiBold", + "postscriptName": "NotoSerifSC-SemiBold", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "Noto Serif SC", + "fullName": "Noto Serif SC Bold", + "postscriptName": "NotoSerifSC-Bold", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 514, + "subsets": { + "latin": { + "xWidthAvg": 514 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "800": { + "familyName": "Noto Serif SC", + "fullName": "Noto Serif SC ExtraBold", + "postscriptName": "NotoSerifSC-ExtraBold", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "900": { + "familyName": "Noto Serif SC", + "fullName": "Noto Serif SC Black", + "postscriptName": "NotoSerifSC-Black", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Noto Serif SC", + "fullName": "Noto Serif SC Regular", + "postscriptName": "NotoSerifSC-Regular", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "notoSerifSinhala": { + "familyName": "Noto Serif Sinhala", + "fullName": "Noto Serif Sinhala Regular", + "postscriptName": "NotoSerifSinhala-Regular", + "category": "serif", + "capHeight": 612, + "ascent": 997, + "descent": -307, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Serif Sinhala", + "fullName": "Noto Serif Sinhala Thin", + "postscriptName": "NotoSerifSinhala-Thin", + "category": "serif", + "capHeight": 612, + "ascent": 997, + "descent": -307, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Serif Sinhala", + "fullName": "Noto Serif Sinhala ExtraLight", + "postscriptName": "NotoSerifSinhala-ExtraLight", + "category": "serif", + "capHeight": 612, + "ascent": 997, + "descent": -307, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Serif Sinhala", + "fullName": "Noto Serif Sinhala Light", + "postscriptName": "NotoSerifSinhala-Light", + "category": "serif", + "capHeight": 612, + "ascent": 997, + "descent": -307, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Serif Sinhala", + "fullName": "Noto Serif Sinhala Medium", + "postscriptName": "NotoSerifSinhala-Medium", + "category": "serif", + "capHeight": 612, + "ascent": 997, + "descent": -307, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Serif Sinhala", + "fullName": "Noto Serif Sinhala SemiBold", + "postscriptName": "NotoSerifSinhala-SemiBold", + "category": "serif", + "capHeight": 612, + "ascent": 997, + "descent": -307, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 537, + "subsets": { + "latin": { + "xWidthAvg": 537 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Serif Sinhala", + "fullName": "Noto Serif Sinhala Bold", + "postscriptName": "NotoSerifSinhala-Bold", + "category": "serif", + "capHeight": 612, + "ascent": 997, + "descent": -307, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 549, + "subsets": { + "latin": { + "xWidthAvg": 549 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Serif Sinhala", + "fullName": "Noto Serif Sinhala ExtraBold", + "postscriptName": "NotoSerifSinhala-ExtraBold", + "category": "serif", + "capHeight": 612, + "ascent": 997, + "descent": -307, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 560, + "subsets": { + "latin": { + "xWidthAvg": 560 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Serif Sinhala", + "fullName": "Noto Serif Sinhala Black", + "postscriptName": "NotoSerifSinhala-Black", + "category": "serif", + "capHeight": 612, + "ascent": 997, + "descent": -307, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 570, + "subsets": { + "latin": { + "xWidthAvg": 570 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Serif Sinhala", + "fullName": "Noto Serif Sinhala Regular", + "postscriptName": "NotoSerifSinhala-Regular", + "category": "serif", + "capHeight": 612, + "ascent": 997, + "descent": -307, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSerifTC": { + "familyName": "Noto Serif TC", + "fullName": "Noto Serif TC Regular", + "postscriptName": "NotoSerifTC-Regular", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "200": { + "familyName": "Noto Serif TC", + "fullName": "Noto Serif TC ExtraLight", + "postscriptName": "NotoSerifTC-ExtraLight", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "300": { + "familyName": "Noto Serif TC", + "fullName": "Noto Serif TC Light", + "postscriptName": "NotoSerifTC-Light", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "500": { + "familyName": "Noto Serif TC", + "fullName": "Noto Serif TC Medium", + "postscriptName": "NotoSerifTC-Medium", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 499, + "subsets": { + "latin": { + "xWidthAvg": 499 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "600": { + "familyName": "Noto Serif TC", + "fullName": "Noto Serif TC SemiBold", + "postscriptName": "NotoSerifTC-SemiBold", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "Noto Serif TC", + "fullName": "Noto Serif TC Bold", + "postscriptName": "NotoSerifTC-Bold", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 514, + "subsets": { + "latin": { + "xWidthAvg": 514 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "800": { + "familyName": "Noto Serif TC", + "fullName": "Noto Serif TC ExtraBold", + "postscriptName": "NotoSerifTC-ExtraBold", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "900": { + "familyName": "Noto Serif TC", + "fullName": "Noto Serif TC Black", + "postscriptName": "NotoSerifTC-Black", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Noto Serif TC", + "fullName": "Noto Serif TC Regular", + "postscriptName": "NotoSerifTC-Regular", + "category": "serif", + "capHeight": 729, + "ascent": 1151, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "notoSerifTamil": { + "familyName": "Noto Serif Tamil", + "fullName": "Noto Serif Tamil Regular", + "postscriptName": "NotoSerifTamil-Regular", + "category": "serif", + "capHeight": 829, + "ascent": 1069, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Serif Tamil", + "fullName": "Noto Serif Tamil Thin", + "postscriptName": "NotoSerifTamil-Thin", + "category": "serif", + "capHeight": 829, + "ascent": 1069, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Serif Tamil", + "fullName": "Noto Serif Tamil ExtraLight", + "postscriptName": "NotoSerifTamil-ExtraLight", + "category": "serif", + "capHeight": 829, + "ascent": 1069, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Serif Tamil", + "fullName": "Noto Serif Tamil Light", + "postscriptName": "NotoSerifTamil-Light", + "category": "serif", + "capHeight": 829, + "ascent": 1069, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Serif Tamil", + "fullName": "Noto Serif Tamil Medium", + "postscriptName": "NotoSerifTamil-Medium", + "category": "serif", + "capHeight": 829, + "ascent": 1069, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 595 + } + } + }, + "600": { + "familyName": "Noto Serif Tamil", + "fullName": "Noto Serif Tamil SemiBold", + "postscriptName": "NotoSerifTamil-SemiBold", + "category": "serif", + "capHeight": 829, + "ascent": 1069, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 589 + } + } + }, + "700": { + "familyName": "Noto Serif Tamil", + "fullName": "Noto Serif Tamil Bold", + "postscriptName": "NotoSerifTamil-Bold", + "category": "serif", + "capHeight": 829, + "ascent": 1069, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 582 + } + } + }, + "800": { + "familyName": "Noto Serif Tamil", + "fullName": "Noto Serif Tamil ExtraBold", + "postscriptName": "NotoSerifTamil-ExtraBold", + "category": "serif", + "capHeight": 829, + "ascent": 1069, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 523, + "subsets": { + "latin": { + "xWidthAvg": 523 + }, + "thai": { + "xWidthAvg": 598 + } + } + }, + "900": { + "familyName": "Noto Serif Tamil", + "fullName": "Noto Serif Tamil Black", + "postscriptName": "NotoSerifTamil-Black", + "category": "serif", + "capHeight": 829, + "ascent": 1069, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 533, + "subsets": { + "latin": { + "xWidthAvg": 533 + }, + "thai": { + "xWidthAvg": 611 + } + } + }, + "regular": { + "familyName": "Noto Serif Tamil", + "fullName": "Noto Serif Tamil Regular", + "postscriptName": "NotoSerifTamil-Regular", + "category": "serif", + "capHeight": 829, + "ascent": 1069, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "italic": { + "familyName": "Noto Serif Tamil", + "fullName": "Noto Serif Tamil Italic", + "postscriptName": "NotoSerifTamil-Italic", + "category": "serif", + "capHeight": 829, + "ascent": 1069, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900italic": { + "familyName": "Noto Serif Tamil", + "fullName": "Noto Serif Tamil Black Italic", + "postscriptName": "NotoSerifTamil-BlackItalic", + "category": "serif", + "capHeight": 829, + "ascent": 1069, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 534, + "subsets": { + "latin": { + "xWidthAvg": 534 + }, + "thai": { + "xWidthAvg": 611 + } + } + }, + "800italic": { + "familyName": "Noto Serif Tamil", + "fullName": "Noto Serif Tamil ExtraBold Italic", + "postscriptName": "NotoSerifTamil-ExtraBoldItalic", + "category": "serif", + "capHeight": 829, + "ascent": 1069, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 524, + "subsets": { + "latin": { + "xWidthAvg": 524 + }, + "thai": { + "xWidthAvg": 598 + } + } + }, + "700italic": { + "familyName": "Noto Serif Tamil", + "fullName": "Noto Serif Tamil Bold Italic", + "postscriptName": "NotoSerifTamil-BoldItalic", + "category": "serif", + "capHeight": 829, + "ascent": 1069, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 582 + } + } + }, + "600italic": { + "familyName": "Noto Serif Tamil", + "fullName": "Noto Serif Tamil SemiBold Italic", + "postscriptName": "NotoSerifTamil-SemiBoldItalic", + "category": "serif", + "capHeight": 829, + "ascent": 1069, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 589 + } + } + }, + "500italic": { + "familyName": "Noto Serif Tamil", + "fullName": "Noto Serif Tamil Medium Italic", + "postscriptName": "NotoSerifTamil-MediumItalic", + "category": "serif", + "capHeight": 829, + "ascent": 1069, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 595 + } + } + }, + "300italic": { + "familyName": "Noto Serif Tamil", + "fullName": "Noto Serif Tamil Light Italic", + "postscriptName": "NotoSerifTamil-LightItalic", + "category": "serif", + "capHeight": 829, + "ascent": 1069, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200italic": { + "familyName": "Noto Serif Tamil", + "fullName": "Noto Serif Tamil ExtraLight Italic", + "postscriptName": "NotoSerifTamil-ExtraLightItalic", + "category": "serif", + "capHeight": 829, + "ascent": 1069, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "100italic": { + "familyName": "Noto Serif Tamil", + "fullName": "Noto Serif Tamil Thin Italic", + "postscriptName": "NotoSerifTamil-ThinItalic", + "category": "serif", + "capHeight": 829, + "ascent": 1069, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSerifTangut": { + "familyName": "Noto Serif Tangut", + "fullName": "Noto Serif Tangut Regular", + "postscriptName": "NotoSerifTangut-Regular", + "category": "serif", + "capHeight": 712, + "ascent": 856, + "descent": -150, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 502, + "xWidthAvg": 514, + "subsets": { + "latin": { + "xWidthAvg": 514 + }, + "thai": { + "xWidthAvg": 976 + } + }, + "variants": { + "regular": { + "familyName": "Noto Serif Tangut", + "fullName": "Noto Serif Tangut Regular", + "postscriptName": "NotoSerifTangut-Regular", + "category": "serif", + "capHeight": 712, + "ascent": 856, + "descent": -150, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 502, + "xWidthAvg": 514, + "subsets": { + "latin": { + "xWidthAvg": 514 + }, + "thai": { + "xWidthAvg": 976 + } + } + } + } + }, + "notoSerifTelugu": { + "familyName": "Noto Serif Telugu", + "fullName": "Noto Serif Telugu Regular", + "postscriptName": "NotoSerifTelugu-Regular", + "category": "serif", + "capHeight": 620, + "ascent": 869, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Serif Telugu", + "fullName": "Noto Serif Telugu Thin", + "postscriptName": "NotoSerifTelugu-Thin", + "category": "serif", + "capHeight": 620, + "ascent": 869, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Serif Telugu", + "fullName": "Noto Serif Telugu ExtraLight", + "postscriptName": "NotoSerifTelugu-ExtraLight", + "category": "serif", + "capHeight": 620, + "ascent": 869, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 494, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Serif Telugu", + "fullName": "Noto Serif Telugu Light", + "postscriptName": "NotoSerifTelugu-Light", + "category": "serif", + "capHeight": 620, + "ascent": 869, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 497, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Serif Telugu", + "fullName": "Noto Serif Telugu Medium", + "postscriptName": "NotoSerifTelugu-Medium", + "category": "serif", + "capHeight": 620, + "ascent": 869, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 502, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Serif Telugu", + "fullName": "Noto Serif Telugu SemiBold", + "postscriptName": "NotoSerifTelugu-SemiBold", + "category": "serif", + "capHeight": 620, + "ascent": 869, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 504, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Serif Telugu", + "fullName": "Noto Serif Telugu Bold", + "postscriptName": "NotoSerifTelugu-Bold", + "category": "serif", + "capHeight": 620, + "ascent": 869, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 515, + "subsets": { + "latin": { + "xWidthAvg": 515 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Serif Telugu", + "fullName": "Noto Serif Telugu ExtraBold", + "postscriptName": "NotoSerifTelugu-ExtraBold", + "category": "serif", + "capHeight": 620, + "ascent": 869, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 509, + "xWidthAvg": 526, + "subsets": { + "latin": { + "xWidthAvg": 526 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Serif Telugu", + "fullName": "Noto Serif Telugu Black", + "postscriptName": "NotoSerifTelugu-Black", + "category": "serif", + "capHeight": 620, + "ascent": 869, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 511, + "xWidthAvg": 536, + "subsets": { + "latin": { + "xWidthAvg": 536 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Serif Telugu", + "fullName": "Noto Serif Telugu Regular", + "postscriptName": "NotoSerifTelugu-Regular", + "category": "serif", + "capHeight": 620, + "ascent": 869, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSerifThai": { + "familyName": "Noto Serif Thai", + "fullName": "Noto Serif Thai Regular", + "postscriptName": "NotoSerifThai-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1064, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 570 + } + }, + "variants": { + "100": { + "familyName": "Noto Serif Thai", + "fullName": "Noto Serif Thai Thin", + "postscriptName": "NotoSerifThai-Thin", + "category": "serif", + "capHeight": 714, + "ascent": 1064, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 539 + } + } + }, + "200": { + "familyName": "Noto Serif Thai", + "fullName": "Noto Serif Thai ExtraLight", + "postscriptName": "NotoSerifThai-ExtraLight", + "category": "serif", + "capHeight": 714, + "ascent": 1064, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 545 + } + } + }, + "300": { + "familyName": "Noto Serif Thai", + "fullName": "Noto Serif Thai Light", + "postscriptName": "NotoSerifThai-Light", + "category": "serif", + "capHeight": 714, + "ascent": 1064, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 556 + } + } + }, + "500": { + "familyName": "Noto Serif Thai", + "fullName": "Noto Serif Thai Medium", + "postscriptName": "NotoSerifThai-Medium", + "category": "serif", + "capHeight": 714, + "ascent": 1064, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 576 + } + } + }, + "600": { + "familyName": "Noto Serif Thai", + "fullName": "Noto Serif Thai SemiBold", + "postscriptName": "NotoSerifThai-SemiBold", + "category": "serif", + "capHeight": 714, + "ascent": 1064, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "700": { + "familyName": "Noto Serif Thai", + "fullName": "Noto Serif Thai Bold", + "postscriptName": "NotoSerifThai-Bold", + "category": "serif", + "capHeight": 714, + "ascent": 1064, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 592 + } + } + }, + "800": { + "familyName": "Noto Serif Thai", + "fullName": "Noto Serif Thai ExtraBold", + "postscriptName": "NotoSerifThai-ExtraBold", + "category": "serif", + "capHeight": 714, + "ascent": 1064, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 524, + "subsets": { + "latin": { + "xWidthAvg": 524 + }, + "thai": { + "xWidthAvg": 602 + } + } + }, + "900": { + "familyName": "Noto Serif Thai", + "fullName": "Noto Serif Thai Black", + "postscriptName": "NotoSerifThai-Black", + "category": "serif", + "capHeight": 714, + "ascent": 1064, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 533, + "subsets": { + "latin": { + "xWidthAvg": 533 + }, + "thai": { + "xWidthAvg": 611 + } + } + }, + "regular": { + "familyName": "Noto Serif Thai", + "fullName": "Noto Serif Thai Regular", + "postscriptName": "NotoSerifThai-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1064, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 570 + } + } + } + } + }, + "notoSerifTibetan": { + "familyName": "Noto Serif Tibetan", + "fullName": "Noto Serif Tibetan Regular", + "postscriptName": "NotoSerifTibetan-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1466, + "descent": -1349, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 678, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Noto Serif Tibetan", + "fullName": "Noto Serif Tibetan Thin", + "postscriptName": "NotoSerifTibetan-Thin", + "category": "serif", + "capHeight": 714, + "ascent": 1466, + "descent": -1349, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 678, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Noto Serif Tibetan", + "fullName": "Noto Serif Tibetan ExtraLight", + "postscriptName": "NotoSerifTibetan-ExtraLight", + "category": "serif", + "capHeight": 714, + "ascent": 1466, + "descent": -1349, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 678, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Noto Serif Tibetan", + "fullName": "Noto Serif Tibetan Light", + "postscriptName": "NotoSerifTibetan-Light", + "category": "serif", + "capHeight": 714, + "ascent": 1466, + "descent": -1349, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 678, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Noto Serif Tibetan", + "fullName": "Noto Serif Tibetan Medium", + "postscriptName": "NotoSerifTibetan-Medium", + "category": "serif", + "capHeight": 714, + "ascent": 1466, + "descent": -1349, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 678, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Serif Tibetan", + "fullName": "Noto Serif Tibetan SemiBold", + "postscriptName": "NotoSerifTibetan-SemiBold", + "category": "serif", + "capHeight": 714, + "ascent": 1466, + "descent": -1349, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 678, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Serif Tibetan", + "fullName": "Noto Serif Tibetan Bold", + "postscriptName": "NotoSerifTibetan-Bold", + "category": "serif", + "capHeight": 714, + "ascent": 1466, + "descent": -1349, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 678, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Noto Serif Tibetan", + "fullName": "Noto Serif Tibetan ExtraBold", + "postscriptName": "NotoSerifTibetan-ExtraBold", + "category": "serif", + "capHeight": 714, + "ascent": 1466, + "descent": -1349, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 678, + "xWidthAvg": 522, + "subsets": { + "latin": { + "xWidthAvg": 522 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Noto Serif Tibetan", + "fullName": "Noto Serif Tibetan Black", + "postscriptName": "NotoSerifTibetan-Black", + "category": "serif", + "capHeight": 714, + "ascent": 1466, + "descent": -1349, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 678, + "xWidthAvg": 533, + "subsets": { + "latin": { + "xWidthAvg": 533 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Serif Tibetan", + "fullName": "Noto Serif Tibetan Regular", + "postscriptName": "NotoSerifTibetan-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1466, + "descent": -1349, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 678, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSerifToto": { + "familyName": "Noto Serif Toto", + "fullName": "Noto Serif Toto Regular", + "postscriptName": "NotoSerifToto-Regular", + "category": "serif", + "capHeight": 720, + "ascent": 925, + "descent": -378, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 622, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "500": { + "familyName": "Noto Serif Toto", + "fullName": "Noto Serif Toto Medium", + "postscriptName": "NotoSerifToto-Medium", + "category": "serif", + "capHeight": 720, + "ascent": 925, + "descent": -378, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 622, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Noto Serif Toto", + "fullName": "Noto Serif Toto SemiBold", + "postscriptName": "NotoSerifToto-SemiBold", + "category": "serif", + "capHeight": 720, + "ascent": 925, + "descent": -378, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 622, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Noto Serif Toto", + "fullName": "Noto Serif Toto Bold", + "postscriptName": "NotoSerifToto-Bold", + "category": "serif", + "capHeight": 720, + "ascent": 925, + "descent": -378, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 622, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Noto Serif Toto", + "fullName": "Noto Serif Toto Regular", + "postscriptName": "NotoSerifToto-Regular", + "category": "serif", + "capHeight": 720, + "ascent": 925, + "descent": -378, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 622, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSerifVithkuqi": { + "familyName": "Noto Serif Vithkuqi", + "fullName": "Noto Serif Vithkuqi Regular", + "postscriptName": "NotoSerifVithkuqi-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "500": { + "familyName": "Noto Serif Vithkuqi", + "fullName": "Noto Serif Vithkuqi Medium", + "postscriptName": "NotoSerifVithkuqi-Medium", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 595 + } + } + }, + "600": { + "familyName": "Noto Serif Vithkuqi", + "fullName": "Noto Serif Vithkuqi SemiBold", + "postscriptName": "NotoSerifVithkuqi-SemiBold", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 589 + } + } + }, + "700": { + "familyName": "Noto Serif Vithkuqi", + "fullName": "Noto Serif Vithkuqi Bold", + "postscriptName": "NotoSerifVithkuqi-Bold", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 582 + } + } + }, + "regular": { + "familyName": "Noto Serif Vithkuqi", + "fullName": "Noto Serif Vithkuqi Regular", + "postscriptName": "NotoSerifVithkuqi-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1069, + "descent": -293, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoSerifYezidi": { + "familyName": "Noto Serif Yezidi", + "fullName": "Noto Serif Yezidi Regular", + "postscriptName": "NotoSerifYezidi-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "500": { + "familyName": "Noto Serif Yezidi", + "fullName": "Noto Serif Yezidi Medium", + "postscriptName": "NotoSerifYezidi-Medium", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 595 + } + } + }, + "600": { + "familyName": "Noto Serif Yezidi", + "fullName": "Noto Serif Yezidi SemiBold", + "postscriptName": "NotoSerifYezidi-SemiBold", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 589 + } + } + }, + "700": { + "familyName": "Noto Serif Yezidi", + "fullName": "Noto Serif Yezidi Bold", + "postscriptName": "NotoSerifYezidi-Bold", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 582 + } + } + }, + "regular": { + "familyName": "Noto Serif Yezidi", + "fullName": "Noto Serif Yezidi Regular", + "postscriptName": "NotoSerifYezidi-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1068, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "notoTraditionalNushu": { + "familyName": "Noto Traditional Nushu", + "fullName": "Noto Traditional Nushu Regular", + "postscriptName": "NotoTraditionalNushu-Regular", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1055, + "descent": -117, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "300": { + "familyName": "Noto Traditional Nushu", + "fullName": "Noto Traditional Nushu Light", + "postscriptName": "NotoTraditionalNushu-Light", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1055, + "descent": -117, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Noto Traditional Nushu", + "fullName": "Noto Traditional Nushu Medium", + "postscriptName": "NotoTraditionalNushu-Medium", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1055, + "descent": -117, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 537, + "subsets": { + "latin": { + "xWidthAvg": 537 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Noto Traditional Nushu", + "fullName": "Noto Traditional Nushu SemiBold", + "postscriptName": "NotoTraditionalNushu-SemiBold", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1055, + "descent": -117, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 547, + "subsets": { + "latin": { + "xWidthAvg": 547 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Noto Traditional Nushu", + "fullName": "Noto Traditional Nushu Bold", + "postscriptName": "NotoTraditionalNushu-Bold", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1055, + "descent": -117, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 557, + "subsets": { + "latin": { + "xWidthAvg": 557 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Noto Traditional Nushu", + "fullName": "Noto Traditional Nushu Regular", + "postscriptName": "NotoTraditionalNushu-Regular", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1055, + "descent": -117, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 543, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "notoZnamennyMusicalNotation": { + "familyName": "Noto Znamenny Musical Notation", + "fullName": "Noto Znamenny Musical Notation Regular", + "postscriptName": "NotoZnamennyMusicalNotation-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 995, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Noto Znamenny Musical Notation", + "fullName": "Noto Znamenny Musical Notation Regular", + "postscriptName": "NotoZnamennyMusicalNotation-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 995, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "novaCut": { + "familyName": "Nova Cut", + "fullName": "Nova Cut", + "postscriptName": "NovaCut", + "category": "display", + "capHeight": 1550, + "ascent": 1966, + "descent": -506, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1140, + "xWidthAvg": 1011, + "subsets": { + "latin": { + "xWidthAvg": 1011 + }, + "thai": { + "xWidthAvg": 894 + } + }, + "variants": { + "regular": { + "familyName": "Nova Cut", + "fullName": "Nova Cut", + "postscriptName": "NovaCut", + "category": "display", + "capHeight": 1550, + "ascent": 1966, + "descent": -506, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1140, + "xWidthAvg": 1011, + "subsets": { + "latin": { + "xWidthAvg": 1011 + }, + "thai": { + "xWidthAvg": 894 + } + } + } + } + }, + "novaFlat": { + "familyName": "Nova Flat", + "fullName": "Nova Flat", + "postscriptName": "NovaFlat", + "category": "display", + "capHeight": 1530, + "ascent": 1966, + "descent": -506, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1120, + "xWidthAvg": 994, + "subsets": { + "latin": { + "xWidthAvg": 994 + }, + "thai": { + "xWidthAvg": 894 + } + }, + "variants": { + "regular": { + "familyName": "Nova Flat", + "fullName": "Nova Flat", + "postscriptName": "NovaFlat", + "category": "display", + "capHeight": 1530, + "ascent": 1966, + "descent": -506, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1120, + "xWidthAvg": 994, + "subsets": { + "latin": { + "xWidthAvg": 994 + }, + "thai": { + "xWidthAvg": 894 + } + } + } + } + }, + "novaMono": { + "familyName": "Nova Mono", + "fullName": "NovaMono", + "postscriptName": "NovaMono", + "category": "monospace", + "capHeight": 1509, + "ascent": 2215, + "descent": -639, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1120, + "xWidthAvg": 1150, + "subsets": { + "latin": { + "xWidthAvg": 1150 + }, + "thai": { + "xWidthAvg": 1150 + } + }, + "variants": { + "regular": { + "familyName": "Nova Mono", + "fullName": "NovaMono", + "postscriptName": "NovaMono", + "category": "monospace", + "capHeight": 1509, + "ascent": 2215, + "descent": -639, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1120, + "xWidthAvg": 1150, + "subsets": { + "latin": { + "xWidthAvg": 1150 + }, + "thai": { + "xWidthAvg": 1150 + } + } + } + } + }, + "novaOval": { + "familyName": "Nova Oval", + "fullName": "Nova Oval", + "postscriptName": "NovaOval", + "category": "display", + "capHeight": 1550, + "ascent": 1966, + "descent": -506, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1120, + "xWidthAvg": 995, + "subsets": { + "latin": { + "xWidthAvg": 995 + }, + "thai": { + "xWidthAvg": 894 + } + }, + "variants": { + "regular": { + "familyName": "Nova Oval", + "fullName": "Nova Oval", + "postscriptName": "NovaOval", + "category": "display", + "capHeight": 1550, + "ascent": 1966, + "descent": -506, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1120, + "xWidthAvg": 995, + "subsets": { + "latin": { + "xWidthAvg": 995 + }, + "thai": { + "xWidthAvg": 894 + } + } + } + } + }, + "novaRound": { + "familyName": "Nova Round", + "fullName": "Nova Round", + "postscriptName": "NovaRound", + "category": "display", + "capHeight": 1530, + "ascent": 1966, + "descent": -506, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1120, + "xWidthAvg": 994, + "subsets": { + "latin": { + "xWidthAvg": 994 + }, + "thai": { + "xWidthAvg": 894 + } + }, + "variants": { + "regular": { + "familyName": "Nova Round", + "fullName": "Nova Round", + "postscriptName": "NovaRound", + "category": "display", + "capHeight": 1530, + "ascent": 1966, + "descent": -506, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1120, + "xWidthAvg": 994, + "subsets": { + "latin": { + "xWidthAvg": 994 + }, + "thai": { + "xWidthAvg": 894 + } + } + } + } + }, + "novaScript": { + "familyName": "Nova Script", + "fullName": "Nova Script Regular", + "postscriptName": "NovaScript-Regular", + "category": "display", + "capHeight": 1550, + "ascent": 1966, + "descent": -506, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1120, + "xWidthAvg": 1003, + "subsets": { + "latin": { + "xWidthAvg": 1003 + }, + "thai": { + "xWidthAvg": 894 + } + }, + "variants": { + "regular": { + "familyName": "Nova Script", + "fullName": "Nova Script Regular", + "postscriptName": "NovaScript-Regular", + "category": "display", + "capHeight": 1550, + "ascent": 1966, + "descent": -506, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1120, + "xWidthAvg": 1003, + "subsets": { + "latin": { + "xWidthAvg": 1003 + }, + "thai": { + "xWidthAvg": 894 + } + } + } + } + }, + "novaSlim": { + "familyName": "Nova Slim", + "fullName": "Nova Slim", + "postscriptName": "NovaSlim", + "category": "display", + "capHeight": 1530, + "ascent": 1966, + "descent": -506, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1120, + "xWidthAvg": 995, + "subsets": { + "latin": { + "xWidthAvg": 995 + }, + "thai": { + "xWidthAvg": 894 + } + }, + "variants": { + "regular": { + "familyName": "Nova Slim", + "fullName": "Nova Slim", + "postscriptName": "NovaSlim", + "category": "display", + "capHeight": 1530, + "ascent": 1966, + "descent": -506, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1120, + "xWidthAvg": 995, + "subsets": { + "latin": { + "xWidthAvg": 995 + }, + "thai": { + "xWidthAvg": 894 + } + } + } + } + }, + "novaSquare": { + "familyName": "Nova Square", + "fullName": "Nova Square", + "postscriptName": "NovaSquare", + "category": "display", + "capHeight": 1510, + "ascent": 1966, + "descent": -506, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1100, + "xWidthAvg": 994, + "subsets": { + "latin": { + "xWidthAvg": 994 + }, + "thai": { + "xWidthAvg": 894 + } + }, + "variants": { + "regular": { + "familyName": "Nova Square", + "fullName": "Nova Square", + "postscriptName": "NovaSquare", + "category": "display", + "capHeight": 1510, + "ascent": 1966, + "descent": -506, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1100, + "xWidthAvg": 994, + "subsets": { + "latin": { + "xWidthAvg": 994 + }, + "thai": { + "xWidthAvg": 894 + } + } + } + } + }, + "numans": { + "familyName": "Numans", + "fullName": "Numans", + "postscriptName": "Numans-Regular", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 1853, + "descent": -553, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1096, + "xWidthAvg": 1093, + "subsets": { + "latin": { + "xWidthAvg": 1093 + }, + "thai": { + "xWidthAvg": 614 + } + }, + "variants": { + "regular": { + "familyName": "Numans", + "fullName": "Numans", + "postscriptName": "Numans-Regular", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 1853, + "descent": -553, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1096, + "xWidthAvg": 1093, + "subsets": { + "latin": { + "xWidthAvg": 1093 + }, + "thai": { + "xWidthAvg": 614 + } + } + } + } + }, + "nunito": { + "familyName": "Nunito", + "fullName": "Nunito Regular", + "postscriptName": "Nunito-Regular", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "200": { + "familyName": "Nunito", + "fullName": "Nunito ExtraLight", + "postscriptName": "Nunito-ExtraLight", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 436, + "subsets": { + "latin": { + "xWidthAvg": 436 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Nunito", + "fullName": "Nunito Light", + "postscriptName": "Nunito-Light", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Nunito", + "fullName": "Nunito Medium", + "postscriptName": "Nunito-Medium", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Nunito", + "fullName": "Nunito SemiBold", + "postscriptName": "Nunito-SemiBold", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Nunito", + "fullName": "Nunito Bold", + "postscriptName": "Nunito-Bold", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Nunito", + "fullName": "Nunito ExtraBold", + "postscriptName": "Nunito-ExtraBold", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "Nunito", + "fullName": "Nunito Black", + "postscriptName": "Nunito-Black", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Nunito", + "fullName": "Nunito Regular", + "postscriptName": "Nunito-Regular", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Nunito", + "fullName": "Nunito Italic", + "postscriptName": "Nunito-Italic", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900italic": { + "familyName": "Nunito", + "fullName": "Nunito Black Italic", + "postscriptName": "Nunito-BlackItalic", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800italic": { + "familyName": "Nunito", + "fullName": "Nunito ExtraBold Italic", + "postscriptName": "Nunito-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700italic": { + "familyName": "Nunito", + "fullName": "Nunito Bold Italic", + "postscriptName": "Nunito-BoldItalic", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600italic": { + "familyName": "Nunito", + "fullName": "Nunito SemiBold Italic", + "postscriptName": "Nunito-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500italic": { + "familyName": "Nunito", + "fullName": "Nunito Medium Italic", + "postscriptName": "Nunito-MediumItalic", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300italic": { + "familyName": "Nunito", + "fullName": "Nunito Light Italic", + "postscriptName": "Nunito-LightItalic", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200italic": { + "familyName": "Nunito", + "fullName": "Nunito ExtraLight Italic", + "postscriptName": "Nunito-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 436, + "subsets": { + "latin": { + "xWidthAvg": 436 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "nunitoSans": { + "familyName": "Nunito Sans", + "fullName": "Nunito Sans 12pt Regular", + "postscriptName": "NunitoSans12pt-Regular", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "200": { + "familyName": "Nunito Sans", + "fullName": "Nunito Sans 12pt ExtraLight", + "postscriptName": "NunitoSans12pt-ExtraLight", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 436, + "subsets": { + "latin": { + "xWidthAvg": 436 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Nunito Sans", + "fullName": "Nunito Sans 12pt Light", + "postscriptName": "NunitoSans12pt-Light", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Nunito Sans", + "fullName": "Nunito Sans 12pt Medium", + "postscriptName": "NunitoSans12pt-Medium", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Nunito Sans", + "fullName": "Nunito Sans 12pt SemiBold", + "postscriptName": "NunitoSans12pt-SemiBold", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Nunito Sans", + "fullName": "Nunito Sans 12pt Bold", + "postscriptName": "NunitoSans12pt-Bold", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 489, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Nunito Sans", + "fullName": "Nunito Sans 12pt ExtraBold", + "postscriptName": "NunitoSans12pt-ExtraBold", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 491, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "Nunito Sans", + "fullName": "Nunito Sans 12pt Black", + "postscriptName": "NunitoSans12pt-Black", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Nunito Sans", + "fullName": "Nunito Sans 12pt Regular", + "postscriptName": "NunitoSans12pt-Regular", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Nunito Sans", + "fullName": "Nunito Sans 12pt Italic", + "postscriptName": "NunitoSans12pt-Italic", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900italic": { + "familyName": "Nunito Sans", + "fullName": "Nunito Sans 12pt Black Italic", + "postscriptName": "NunitoSans12pt-BlackItalic", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800italic": { + "familyName": "Nunito Sans", + "fullName": "Nunito Sans 12pt ExtraBold Italic", + "postscriptName": "NunitoSans12pt-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 491, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700italic": { + "familyName": "Nunito Sans", + "fullName": "Nunito Sans 12pt Bold Italic", + "postscriptName": "NunitoSans12pt-BoldItalic", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 489, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600italic": { + "familyName": "Nunito Sans", + "fullName": "Nunito Sans 12pt SemiBold Italic", + "postscriptName": "NunitoSans12pt-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500italic": { + "familyName": "Nunito Sans", + "fullName": "Nunito Sans 12pt Medium Italic", + "postscriptName": "NunitoSans12pt-MediumItalic", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300italic": { + "familyName": "Nunito Sans", + "fullName": "Nunito Sans 12pt Light Italic", + "postscriptName": "NunitoSans12pt-LightItalic", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200italic": { + "familyName": "Nunito Sans", + "fullName": "Nunito Sans 12pt ExtraLight Italic", + "postscriptName": "NunitoSans12pt-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1011, + "descent": -353, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 436, + "subsets": { + "latin": { + "xWidthAvg": 436 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "nuosuSIL": { + "familyName": "Nuosu SIL", + "fullName": "Nuosu SIL", + "postscriptName": "NuosuSIL-Regular", + "category": "sans-serif", + "capHeight": 1800, + "ascent": 2200, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1000, + "xWidthAvg": 866, + "subsets": { + "latin": { + "xWidthAvg": 866 + }, + "thai": { + "xWidthAvg": 1080 + } + }, + "variants": { + "regular": { + "familyName": "Nuosu SIL", + "fullName": "Nuosu SIL", + "postscriptName": "NuosuSIL-Regular", + "category": "sans-serif", + "capHeight": 1800, + "ascent": 2200, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1000, + "xWidthAvg": 866, + "subsets": { + "latin": { + "xWidthAvg": 866 + }, + "thai": { + "xWidthAvg": 1080 + } + } + } + } + }, + "odibeeSans": { + "familyName": "Odibee Sans", + "fullName": "Odibee Sans Regular", + "postscriptName": "OdibeeSans-Regular", + "category": "display", + "capHeight": 700, + "ascent": 858, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 315, + "subsets": { + "latin": { + "xWidthAvg": 315 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Odibee Sans", + "fullName": "Odibee Sans Regular", + "postscriptName": "OdibeeSans-Regular", + "category": "display", + "capHeight": 700, + "ascent": 858, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 315, + "subsets": { + "latin": { + "xWidthAvg": 315 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "odorMeanChey": { + "familyName": "Odor Mean Chey", + "fullName": "Odor Mean Chey Regular", + "postscriptName": "OdorMeanChey-Regular", + "category": "serif", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 918, + "subsets": { + "latin": { + "xWidthAvg": 918 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Odor Mean Chey", + "fullName": "Odor Mean Chey Regular", + "postscriptName": "OdorMeanChey-Regular", + "category": "serif", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 918, + "subsets": { + "latin": { + "xWidthAvg": 918 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "offside": { + "familyName": "Offside", + "fullName": "Offside Regular", + "postscriptName": "Offside-Regular", + "category": "display", + "capHeight": 740, + "ascent": 996, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 605, + "xWidthAvg": 530, + "subsets": { + "latin": { + "xWidthAvg": 530 + }, + "thai": { + "xWidthAvg": 650 + } + }, + "variants": { + "regular": { + "familyName": "Offside", + "fullName": "Offside Regular", + "postscriptName": "Offside-Regular", + "category": "display", + "capHeight": 740, + "ascent": 996, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 605, + "xWidthAvg": 530, + "subsets": { + "latin": { + "xWidthAvg": 530 + }, + "thai": { + "xWidthAvg": 650 + } + } + } + } + }, + "oi": { + "familyName": "Oi", + "fullName": "Oi Regular", + "postscriptName": "Oi-Regular", + "category": "display", + "capHeight": 760, + "ascent": 1070, + "descent": -510, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 696, + "xWidthAvg": 805, + "subsets": { + "latin": { + "xWidthAvg": 805 + }, + "thai": { + "xWidthAvg": 888 + } + }, + "variants": { + "regular": { + "familyName": "Oi", + "fullName": "Oi Regular", + "postscriptName": "Oi-Regular", + "category": "display", + "capHeight": 760, + "ascent": 1070, + "descent": -510, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 696, + "xWidthAvg": 805, + "subsets": { + "latin": { + "xWidthAvg": 805 + }, + "thai": { + "xWidthAvg": 888 + } + } + } + } + }, + "ojuju": { + "familyName": "Ojuju", + "fullName": "Ojuju Regular", + "postscriptName": "Ojuju-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1130, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 483, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 666 + } + }, + "variants": { + "200": { + "familyName": "Ojuju", + "fullName": "Ojuju ExtraLight", + "postscriptName": "Ojuju-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1130, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 669 + } + } + }, + "300": { + "familyName": "Ojuju", + "fullName": "Ojuju Light", + "postscriptName": "Ojuju-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1130, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 668 + } + } + }, + "500": { + "familyName": "Ojuju", + "fullName": "Ojuju Medium", + "postscriptName": "Ojuju-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1130, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 663 + } + } + }, + "600": { + "familyName": "Ojuju", + "fullName": "Ojuju SemiBold", + "postscriptName": "Ojuju-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1130, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 489, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 659 + } + } + }, + "700": { + "familyName": "Ojuju", + "fullName": "Ojuju Bold", + "postscriptName": "Ojuju-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1130, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 653 + } + } + }, + "800": { + "familyName": "Ojuju", + "fullName": "Ojuju ExtraBold", + "postscriptName": "Ojuju-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1130, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 645 + } + } + }, + "regular": { + "familyName": "Ojuju", + "fullName": "Ojuju Regular", + "postscriptName": "Ojuju-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1130, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 483, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 666 + } + } + } + } + }, + "oldStandardTT": { + "familyName": "Old Standard TT", + "fullName": "Old Standard TT Regular", + "postscriptName": "OldStandardTT-Regular", + "category": "serif", + "capHeight": 712, + "ascent": 762, + "descent": -238, + "lineGap": 236, + "unitsPerEm": 1000, + "xHeight": 456, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "700": { + "familyName": "Old Standard TT", + "fullName": "Old Standard TT Bold", + "postscriptName": "OldStandardTT-Bold", + "category": "serif", + "capHeight": 712, + "ascent": 762, + "descent": -238, + "lineGap": 236, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Old Standard TT", + "fullName": "Old Standard TT Regular", + "postscriptName": "OldStandardTT-Regular", + "category": "serif", + "capHeight": 712, + "ascent": 762, + "descent": -238, + "lineGap": 236, + "unitsPerEm": 1000, + "xHeight": 456, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Old Standard TT", + "fullName": "Old Standard TT Italic", + "postscriptName": "OldStandardTT-Italic", + "category": "serif", + "capHeight": 712, + "ascent": 762, + "descent": -238, + "lineGap": 236, + "unitsPerEm": 1000, + "xHeight": 444, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "oldenburg": { + "familyName": "Oldenburg", + "fullName": "Oldenburg", + "postscriptName": "Oldenburg-Regular", + "category": "display", + "capHeight": 1555, + "ascent": 2020, + "descent": -540, + "lineGap": 9, + "unitsPerEm": 2048, + "xHeight": 482, + "xWidthAvg": 1101, + "subsets": { + "latin": { + "xWidthAvg": 1101 + }, + "thai": { + "xWidthAvg": 856 + } + }, + "variants": { + "regular": { + "familyName": "Oldenburg", + "fullName": "Oldenburg", + "postscriptName": "Oldenburg-Regular", + "category": "display", + "capHeight": 1555, + "ascent": 2020, + "descent": -540, + "lineGap": 9, + "unitsPerEm": 2048, + "xHeight": 482, + "xWidthAvg": 1101, + "subsets": { + "latin": { + "xWidthAvg": 1101 + }, + "thai": { + "xWidthAvg": 856 + } + } + } + } + }, + "ole": { + "familyName": "Ole", + "fullName": "Ole Regular", + "postscriptName": "Ole-Regular", + "category": "handwriting", + "capHeight": 510, + "ascent": 880, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 270, + "xWidthAvg": 278, + "subsets": { + "latin": { + "xWidthAvg": 278 + }, + "thai": { + "xWidthAvg": 484 + } + }, + "variants": { + "regular": { + "familyName": "Ole", + "fullName": "Ole Regular", + "postscriptName": "Ole-Regular", + "category": "handwriting", + "capHeight": 510, + "ascent": 880, + "descent": -380, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 270, + "xWidthAvg": 278, + "subsets": { + "latin": { + "xWidthAvg": 278 + }, + "thai": { + "xWidthAvg": 484 + } + } + } + } + }, + "oleoScript": { + "familyName": "Oleo Script", + "fullName": "Oleo Script", + "postscriptName": "OleoScript-Regular", + "category": "display", + "capHeight": 710, + "ascent": 1004, + "descent": -379, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 443, + "xWidthAvg": 383, + "subsets": { + "latin": { + "xWidthAvg": 383 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "700": { + "familyName": "Oleo Script", + "fullName": "Oleo Script Bold", + "postscriptName": "OleoScript-Bold", + "category": "display", + "capHeight": 710, + "ascent": 1004, + "descent": -379, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 443, + "xWidthAvg": 415, + "subsets": { + "latin": { + "xWidthAvg": 415 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Oleo Script", + "fullName": "Oleo Script", + "postscriptName": "OleoScript-Regular", + "category": "display", + "capHeight": 710, + "ascent": 1004, + "descent": -379, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 443, + "xWidthAvg": 383, + "subsets": { + "latin": { + "xWidthAvg": 383 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "oleoScriptSwashCaps": { + "familyName": "Oleo Script Swash Caps", + "fullName": "Oleo Script Swash Caps", + "postscriptName": "OleoScriptSwashCaps-Regular", + "category": "display", + "capHeight": 747, + "ascent": 1004, + "descent": -379, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 443, + "xWidthAvg": 387, + "subsets": { + "latin": { + "xWidthAvg": 387 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "700": { + "familyName": "Oleo Script Swash Caps", + "fullName": "Oleo Script Swash Caps Bold", + "postscriptName": "OleoScriptSwashCaps-Bold", + "category": "display", + "capHeight": 747, + "ascent": 1004, + "descent": -379, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 443, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Oleo Script Swash Caps", + "fullName": "Oleo Script Swash Caps", + "postscriptName": "OleoScriptSwashCaps-Regular", + "category": "display", + "capHeight": 747, + "ascent": 1004, + "descent": -379, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 443, + "xWidthAvg": 387, + "subsets": { + "latin": { + "xWidthAvg": 387 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "onest": { + "familyName": "Onest", + "fullName": "Onest Regular", + "postscriptName": "Onest-Regular", + "category": "sans-serif", + "capHeight": 707, + "ascent": 970, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 527, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 540 + } + }, + "variants": { + "100": { + "familyName": "Onest", + "fullName": "Onest Thin", + "postscriptName": "Onest-Thin", + "category": "sans-serif", + "capHeight": 707, + "ascent": 970, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 527, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 540 + } + } + }, + "200": { + "familyName": "Onest", + "fullName": "Onest ExtraLight", + "postscriptName": "Onest-ExtraLight", + "category": "sans-serif", + "capHeight": 707, + "ascent": 970, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 527, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 540 + } + } + }, + "300": { + "familyName": "Onest", + "fullName": "Onest Light", + "postscriptName": "Onest-Light", + "category": "sans-serif", + "capHeight": 707, + "ascent": 970, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 527, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 540 + } + } + }, + "500": { + "familyName": "Onest", + "fullName": "Onest Medium", + "postscriptName": "Onest-Medium", + "category": "sans-serif", + "capHeight": 707, + "ascent": 970, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 527, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 548 + } + } + }, + "600": { + "familyName": "Onest", + "fullName": "Onest SemiBold", + "postscriptName": "Onest-SemiBold", + "category": "sans-serif", + "capHeight": 707, + "ascent": 970, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 527, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 556 + } + } + }, + "700": { + "familyName": "Onest", + "fullName": "Onest Bold", + "postscriptName": "Onest-Bold", + "category": "sans-serif", + "capHeight": 708, + "ascent": 970, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 527, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 564 + } + } + }, + "800": { + "familyName": "Onest", + "fullName": "Onest ExtraBold", + "postscriptName": "Onest-ExtraBold", + "category": "sans-serif", + "capHeight": 708, + "ascent": 970, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 527, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 572 + } + } + }, + "900": { + "familyName": "Onest", + "fullName": "Onest Black", + "postscriptName": "Onest-Black", + "category": "sans-serif", + "capHeight": 708, + "ascent": 970, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 527, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 580 + } + } + }, + "regular": { + "familyName": "Onest", + "fullName": "Onest Regular", + "postscriptName": "Onest-Regular", + "category": "sans-serif", + "capHeight": 707, + "ascent": 970, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 527, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 540 + } + } + } + } + }, + "ooohBaby": { + "familyName": "Oooh Baby", + "fullName": "Oooh Baby Regular", + "postscriptName": "OoohBaby-Regular", + "category": "handwriting", + "capHeight": 695, + "ascent": 900, + "descent": -325, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 365, + "xWidthAvg": 364, + "subsets": { + "latin": { + "xWidthAvg": 364 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Oooh Baby", + "fullName": "Oooh Baby Regular", + "postscriptName": "OoohBaby-Regular", + "category": "handwriting", + "capHeight": 695, + "ascent": 900, + "descent": -325, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 365, + "xWidthAvg": 364, + "subsets": { + "latin": { + "xWidthAvg": 364 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "openSans": { + "familyName": "Open Sans", + "fullName": "Open Sans Regular", + "postscriptName": "OpenSans-Regular", + "category": "sans-serif", + "capHeight": 1462, + "ascent": 2189, + "descent": -600, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1096, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 1229 + } + }, + "variants": { + "300": { + "familyName": "Open Sans", + "fullName": "Open Sans Light", + "postscriptName": "OpenSans-Light", + "category": "sans-serif", + "capHeight": 1462, + "ascent": 2189, + "descent": -600, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1096, + "xWidthAvg": 924, + "subsets": { + "latin": { + "xWidthAvg": 924 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "500": { + "familyName": "Open Sans", + "fullName": "Open Sans Medium", + "postscriptName": "OpenSans-Medium", + "category": "sans-serif", + "capHeight": 1462, + "ascent": 2189, + "descent": -600, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1096, + "xWidthAvg": 978, + "subsets": { + "latin": { + "xWidthAvg": 978 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "600": { + "familyName": "Open Sans", + "fullName": "Open Sans SemiBold", + "postscriptName": "OpenSans-SemiBold", + "category": "sans-serif", + "capHeight": 1462, + "ascent": 2189, + "descent": -600, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1096, + "xWidthAvg": 995, + "subsets": { + "latin": { + "xWidthAvg": 995 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "700": { + "familyName": "Open Sans", + "fullName": "Open Sans Bold", + "postscriptName": "OpenSans-Bold", + "category": "sans-serif", + "capHeight": 1462, + "ascent": 2189, + "descent": -600, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1096, + "xWidthAvg": 1030, + "subsets": { + "latin": { + "xWidthAvg": 1030 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "800": { + "familyName": "Open Sans", + "fullName": "Open Sans ExtraBold", + "postscriptName": "OpenSans-ExtraBold", + "category": "sans-serif", + "capHeight": 1462, + "ascent": 2189, + "descent": -600, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1096, + "xWidthAvg": 1065, + "subsets": { + "latin": { + "xWidthAvg": 1065 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "regular": { + "familyName": "Open Sans", + "fullName": "Open Sans Regular", + "postscriptName": "OpenSans-Regular", + "category": "sans-serif", + "capHeight": 1462, + "ascent": 2189, + "descent": -600, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1096, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "italic": { + "familyName": "Open Sans", + "fullName": "Open Sans Italic", + "postscriptName": "OpenSans-Italic", + "category": "sans-serif", + "capHeight": 1462, + "ascent": 2189, + "descent": -600, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1096, + "xWidthAvg": 909, + "subsets": { + "latin": { + "xWidthAvg": 909 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "800italic": { + "familyName": "Open Sans", + "fullName": "Open Sans ExtraBold Italic", + "postscriptName": "OpenSans-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 1462, + "ascent": 2189, + "descent": -600, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1096, + "xWidthAvg": 1018, + "subsets": { + "latin": { + "xWidthAvg": 1018 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "700italic": { + "familyName": "Open Sans", + "fullName": "Open Sans Bold Italic", + "postscriptName": "OpenSans-BoldItalic", + "category": "sans-serif", + "capHeight": 1462, + "ascent": 2189, + "descent": -600, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1096, + "xWidthAvg": 977, + "subsets": { + "latin": { + "xWidthAvg": 977 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "600italic": { + "familyName": "Open Sans", + "fullName": "Open Sans SemiBold Italic", + "postscriptName": "OpenSans-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 1462, + "ascent": 2189, + "descent": -600, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1096, + "xWidthAvg": 943, + "subsets": { + "latin": { + "xWidthAvg": 943 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "500italic": { + "familyName": "Open Sans", + "fullName": "Open Sans Medium Italic", + "postscriptName": "OpenSans-MediumItalic", + "category": "sans-serif", + "capHeight": 1462, + "ascent": 2189, + "descent": -600, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1096, + "xWidthAvg": 926, + "subsets": { + "latin": { + "xWidthAvg": 926 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "300italic": { + "familyName": "Open Sans", + "fullName": "Open Sans Light Italic", + "postscriptName": "OpenSans-LightItalic", + "category": "sans-serif", + "capHeight": 1462, + "ascent": 2189, + "descent": -600, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1096, + "xWidthAvg": 888, + "subsets": { + "latin": { + "xWidthAvg": 888 + }, + "thai": { + "xWidthAvg": 1229 + } + } + } + } + }, + "oranienbaum": { + "familyName": "Oranienbaum", + "fullName": "Oranienbaum", + "postscriptName": "Oranienbaum-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 895, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 240 + } + }, + "variants": { + "regular": { + "familyName": "Oranienbaum", + "fullName": "Oranienbaum", + "postscriptName": "Oranienbaum-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 895, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 240 + } + } + } + } + }, + "orbit": { + "familyName": "Orbit", + "fullName": "Orbit Regular", + "postscriptName": "Orbit-Regular", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 598, + "subsets": { + "latin": { + "xWidthAvg": 598 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Orbit", + "fullName": "Orbit Regular", + "postscriptName": "Orbit-Regular", + "category": "sans-serif", + "capHeight": 710, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 598, + "subsets": { + "latin": { + "xWidthAvg": 598 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "orbitron": { + "familyName": "Orbitron", + "fullName": "Orbitron Regular", + "postscriptName": "Orbitron-Regular", + "category": "sans-serif", + "capHeight": 720, + "ascent": 1011, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 580, + "xWidthAvg": 553, + "subsets": { + "latin": { + "xWidthAvg": 553 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "500": { + "familyName": "Orbitron", + "fullName": "Orbitron Medium", + "postscriptName": "Orbitron-Medium", + "category": "sans-serif", + "capHeight": 720, + "ascent": 1011, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 580, + "xWidthAvg": 558, + "subsets": { + "latin": { + "xWidthAvg": 558 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Orbitron", + "fullName": "Orbitron SemiBold", + "postscriptName": "Orbitron-SemiBold", + "category": "sans-serif", + "capHeight": 720, + "ascent": 1011, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 580, + "xWidthAvg": 561, + "subsets": { + "latin": { + "xWidthAvg": 561 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Orbitron", + "fullName": "Orbitron Bold", + "postscriptName": "Orbitron-Bold", + "category": "sans-serif", + "capHeight": 720, + "ascent": 1011, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 580, + "xWidthAvg": 563, + "subsets": { + "latin": { + "xWidthAvg": 563 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Orbitron", + "fullName": "Orbitron ExtraBold", + "postscriptName": "Orbitron-ExtraBold", + "category": "sans-serif", + "capHeight": 720, + "ascent": 1011, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 580, + "xWidthAvg": 565, + "subsets": { + "latin": { + "xWidthAvg": 565 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "Orbitron", + "fullName": "Orbitron Black", + "postscriptName": "Orbitron-Black", + "category": "sans-serif", + "capHeight": 720, + "ascent": 1011, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 580, + "xWidthAvg": 567, + "subsets": { + "latin": { + "xWidthAvg": 567 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Orbitron", + "fullName": "Orbitron Regular", + "postscriptName": "Orbitron-Regular", + "category": "sans-serif", + "capHeight": 720, + "ascent": 1011, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 580, + "xWidthAvg": 553, + "subsets": { + "latin": { + "xWidthAvg": 553 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "oregano": { + "familyName": "Oregano", + "fullName": "Oregano", + "postscriptName": "Oregano-Regular", + "category": "display", + "capHeight": 1460, + "ascent": 1975, + "descent": -669, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 864, + "xWidthAvg": 678, + "subsets": { + "latin": { + "xWidthAvg": 678 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "Oregano", + "fullName": "Oregano", + "postscriptName": "Oregano-Regular", + "category": "display", + "capHeight": 1460, + "ascent": 1975, + "descent": -669, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 864, + "xWidthAvg": 678, + "subsets": { + "latin": { + "xWidthAvg": 678 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "italic": { + "familyName": "Oregano", + "fullName": "Oregano Italic", + "postscriptName": "Oregano-Italic", + "category": "display", + "capHeight": 1460, + "ascent": 1950, + "descent": -692, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 961, + "xWidthAvg": 758, + "subsets": { + "latin": { + "xWidthAvg": 758 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "orelegaOne": { + "familyName": "Orelega One", + "fullName": "Orelega One Regular", + "postscriptName": "OrelegaOne-Regular", + "category": "display", + "capHeight": 2480, + "ascent": 3296, + "descent": -801, + "lineGap": 369, + "unitsPerEm": 4096, + "xHeight": 1840, + "xWidthAvg": 1844, + "subsets": { + "latin": { + "xWidthAvg": 1844 + }, + "thai": { + "xWidthAvg": 1497 + } + }, + "variants": { + "regular": { + "familyName": "Orelega One", + "fullName": "Orelega One Regular", + "postscriptName": "OrelegaOne-Regular", + "category": "display", + "capHeight": 2480, + "ascent": 3296, + "descent": -801, + "lineGap": 369, + "unitsPerEm": 4096, + "xHeight": 1840, + "xWidthAvg": 1844, + "subsets": { + "latin": { + "xWidthAvg": 1844 + }, + "thai": { + "xWidthAvg": 1497 + } + } + } + } + }, + "orienta": { + "familyName": "Orienta", + "fullName": "Orienta Regular", + "postscriptName": "Orienta-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 960, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 746 + } + }, + "variants": { + "regular": { + "familyName": "Orienta", + "fullName": "Orienta Regular", + "postscriptName": "Orienta-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 960, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 746 + } + } + } + } + }, + "originalSurfer": { + "familyName": "Original Surfer", + "fullName": "Original Surfer", + "postscriptName": "OriginalSurfer-Regular", + "category": "display", + "capHeight": 1497, + "ascent": 2036, + "descent": -526, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 987, + "xWidthAvg": 962, + "subsets": { + "latin": { + "xWidthAvg": 962 + }, + "thai": { + "xWidthAvg": 594 + } + }, + "variants": { + "regular": { + "familyName": "Original Surfer", + "fullName": "Original Surfer", + "postscriptName": "OriginalSurfer-Regular", + "category": "display", + "capHeight": 1497, + "ascent": 2036, + "descent": -526, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 987, + "xWidthAvg": 962, + "subsets": { + "latin": { + "xWidthAvg": 962 + }, + "thai": { + "xWidthAvg": 594 + } + } + } + } + }, + "oswald": { + "familyName": "Oswald", + "fullName": "Oswald Regular", + "postscriptName": "Oswald-Regular", + "category": "sans-serif", + "capHeight": 810, + "ascent": 1193, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 578, + "xWidthAvg": 363, + "subsets": { + "latin": { + "xWidthAvg": 363 + }, + "thai": { + "xWidthAvg": 682 + } + }, + "variants": { + "200": { + "familyName": "Oswald", + "fullName": "Oswald ExtraLight", + "postscriptName": "Oswald-ExtraLight", + "category": "sans-serif", + "capHeight": 810, + "ascent": 1193, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 578, + "xWidthAvg": 325, + "subsets": { + "latin": { + "xWidthAvg": 325 + }, + "thai": { + "xWidthAvg": 622 + } + } + }, + "300": { + "familyName": "Oswald", + "fullName": "Oswald Light", + "postscriptName": "Oswald-Light", + "category": "sans-serif", + "capHeight": 810, + "ascent": 1193, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 578, + "xWidthAvg": 340, + "subsets": { + "latin": { + "xWidthAvg": 340 + }, + "thai": { + "xWidthAvg": 645 + } + } + }, + "500": { + "familyName": "Oswald", + "fullName": "Oswald Medium", + "postscriptName": "Oswald-Medium", + "category": "sans-serif", + "capHeight": 810, + "ascent": 1193, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 578, + "xWidthAvg": 388, + "subsets": { + "latin": { + "xWidthAvg": 388 + }, + "thai": { + "xWidthAvg": 674 + } + } + }, + "600": { + "familyName": "Oswald", + "fullName": "Oswald SemiBold", + "postscriptName": "Oswald-SemiBold", + "category": "sans-serif", + "capHeight": 810, + "ascent": 1193, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 578, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 670 + } + } + }, + "700": { + "familyName": "Oswald", + "fullName": "Oswald Bold", + "postscriptName": "Oswald-Bold", + "category": "sans-serif", + "capHeight": 810, + "ascent": 1193, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 578, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 667 + } + } + }, + "regular": { + "familyName": "Oswald", + "fullName": "Oswald Regular", + "postscriptName": "Oswald-Regular", + "category": "sans-serif", + "capHeight": 810, + "ascent": 1193, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 578, + "xWidthAvg": 363, + "subsets": { + "latin": { + "xWidthAvg": 363 + }, + "thai": { + "xWidthAvg": 682 + } + } + } + } + }, + "outfit": { + "familyName": "Outfit", + "fullName": "Outfit Regular", + "postscriptName": "Outfit-Regular", + "category": "sans-serif", + "capHeight": 694, + "ascent": 1000, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 686 + } + }, + "variants": { + "100": { + "familyName": "Outfit", + "fullName": "Outfit Thin", + "postscriptName": "Outfit-Thin", + "category": "sans-serif", + "capHeight": 676, + "ascent": 1000, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 676 + } + } + }, + "200": { + "familyName": "Outfit", + "fullName": "Outfit ExtraLight", + "postscriptName": "Outfit-ExtraLight", + "category": "sans-serif", + "capHeight": 682, + "ascent": 1000, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 465, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 679 + } + } + }, + "300": { + "familyName": "Outfit", + "fullName": "Outfit Light", + "postscriptName": "Outfit-Light", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1000, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 683 + } + } + }, + "500": { + "familyName": "Outfit", + "fullName": "Outfit Medium", + "postscriptName": "Outfit-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 689 + } + } + }, + "600": { + "familyName": "Outfit", + "fullName": "Outfit SemiBold", + "postscriptName": "Outfit-SemiBold", + "category": "sans-serif", + "capHeight": 703, + "ascent": 1000, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 483, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 683 + } + } + }, + "700": { + "familyName": "Outfit", + "fullName": "Outfit Bold", + "postscriptName": "Outfit-Bold", + "category": "sans-serif", + "capHeight": 706, + "ascent": 1000, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 677 + } + } + }, + "800": { + "familyName": "Outfit", + "fullName": "Outfit ExtraBold", + "postscriptName": "Outfit-ExtraBold", + "category": "sans-serif", + "capHeight": 709, + "ascent": 1000, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 489, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 671 + } + } + }, + "900": { + "familyName": "Outfit", + "fullName": "Outfit Black", + "postscriptName": "Outfit-Black", + "category": "sans-serif", + "capHeight": 712, + "ascent": 1000, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 665 + } + } + }, + "regular": { + "familyName": "Outfit", + "fullName": "Outfit Regular", + "postscriptName": "Outfit-Regular", + "category": "sans-serif", + "capHeight": 694, + "ascent": 1000, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 686 + } + } + } + } + }, + "overTheRainbow": { + "familyName": "Over the Rainbow", + "fullName": "Over the Rainbow", + "postscriptName": "OvertheRainbow", + "category": "handwriting", + "capHeight": 812, + "ascent": 1412, + "descent": -677, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 636, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "Over the Rainbow", + "fullName": "Over the Rainbow", + "postscriptName": "OvertheRainbow", + "category": "handwriting", + "capHeight": 812, + "ascent": 1412, + "descent": -677, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 636, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "overlock": { + "familyName": "Overlock", + "fullName": "Overlock Regular", + "postscriptName": "Overlock-Regular", + "category": "display", + "capHeight": 154, + "ascent": 966, + "descent": -254, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 125, + "xWidthAvg": 405, + "subsets": { + "latin": { + "xWidthAvg": 405 + }, + "thai": { + "xWidthAvg": 230 + } + }, + "variants": { + "700": { + "familyName": "Overlock", + "fullName": "Overlock Bold", + "postscriptName": "Overlock-Bold", + "category": "display", + "capHeight": 154, + "ascent": 966, + "descent": -254, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 179, + "xWidthAvg": 421, + "subsets": { + "latin": { + "xWidthAvg": 421 + }, + "thai": { + "xWidthAvg": 195 + } + } + }, + "900": { + "familyName": "Overlock", + "fullName": "Overlock Black", + "postscriptName": "Overlock-Black", + "category": "display", + "capHeight": 153, + "ascent": 966, + "descent": -254, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 153, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 149 + } + } + }, + "regular": { + "familyName": "Overlock", + "fullName": "Overlock Regular", + "postscriptName": "Overlock-Regular", + "category": "display", + "capHeight": 154, + "ascent": 966, + "descent": -254, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 125, + "xWidthAvg": 405, + "subsets": { + "latin": { + "xWidthAvg": 405 + }, + "thai": { + "xWidthAvg": 230 + } + } + }, + "italic": { + "familyName": "Overlock", + "fullName": "Overlock Italic", + "postscriptName": "Overlock-Italic", + "category": "display", + "capHeight": 257, + "ascent": 966, + "descent": -254, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 75, + "xWidthAvg": 376, + "subsets": { + "latin": { + "xWidthAvg": 376 + }, + "thai": { + "xWidthAvg": 230 + } + } + }, + "900italic": { + "familyName": "Overlock", + "fullName": "Overlock Black Italic", + "postscriptName": "Overlock-BlackItalic", + "category": "display", + "capHeight": 283, + "ascent": 966, + "descent": -254, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 128, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 230 + } + } + }, + "700italic": { + "familyName": "Overlock", + "fullName": "Overlock Bold Italic", + "postscriptName": "Overlock-BoldItalic", + "category": "display", + "capHeight": 257, + "ascent": 966, + "descent": -254, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 77, + "xWidthAvg": 396, + "subsets": { + "latin": { + "xWidthAvg": 396 + }, + "thai": { + "xWidthAvg": 230 + } + } + } + } + }, + "overlockSC": { + "familyName": "Overlock SC", + "fullName": "Overlock SC", + "postscriptName": "OverlockSC-Regular", + "category": "display", + "capHeight": 154, + "ascent": 966, + "descent": -254, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 159, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 230 + } + }, + "variants": { + "regular": { + "familyName": "Overlock SC", + "fullName": "Overlock SC", + "postscriptName": "OverlockSC-Regular", + "category": "display", + "capHeight": 154, + "ascent": 966, + "descent": -254, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 159, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 230 + } + } + } + } + }, + "overpass": { + "familyName": "Overpass", + "fullName": "Overpass Regular", + "postscriptName": "Overpass-Regular", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1766, + "descent": -766, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1022, + "xWidthAvg": 898, + "subsets": { + "latin": { + "xWidthAvg": 898 + }, + "thai": { + "xWidthAvg": 1232 + } + }, + "variants": { + "100": { + "familyName": "Overpass", + "fullName": "Overpass Thin", + "postscriptName": "Overpass-Thin", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1766, + "descent": -766, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1022, + "xWidthAvg": 869, + "subsets": { + "latin": { + "xWidthAvg": 869 + }, + "thai": { + "xWidthAvg": 1232 + } + } + }, + "200": { + "familyName": "Overpass", + "fullName": "Overpass ExtraLight", + "postscriptName": "Overpass-ExtraLight", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1766, + "descent": -766, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1022, + "xWidthAvg": 878, + "subsets": { + "latin": { + "xWidthAvg": 878 + }, + "thai": { + "xWidthAvg": 1232 + } + } + }, + "300": { + "familyName": "Overpass", + "fullName": "Overpass Light", + "postscriptName": "Overpass-Light", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1766, + "descent": -766, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1022, + "xWidthAvg": 888, + "subsets": { + "latin": { + "xWidthAvg": 888 + }, + "thai": { + "xWidthAvg": 1232 + } + } + }, + "500": { + "familyName": "Overpass", + "fullName": "Overpass Medium", + "postscriptName": "Overpass-Medium", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1766, + "descent": -766, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1022, + "xWidthAvg": 913, + "subsets": { + "latin": { + "xWidthAvg": 913 + }, + "thai": { + "xWidthAvg": 1232 + } + } + }, + "600": { + "familyName": "Overpass", + "fullName": "Overpass SemiBold", + "postscriptName": "Overpass-SemiBold", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1766, + "descent": -766, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1022, + "xWidthAvg": 927, + "subsets": { + "latin": { + "xWidthAvg": 927 + }, + "thai": { + "xWidthAvg": 1232 + } + } + }, + "700": { + "familyName": "Overpass", + "fullName": "Overpass Bold", + "postscriptName": "Overpass-Bold", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1766, + "descent": -766, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1022, + "xWidthAvg": 942, + "subsets": { + "latin": { + "xWidthAvg": 942 + }, + "thai": { + "xWidthAvg": 1232 + } + } + }, + "800": { + "familyName": "Overpass", + "fullName": "Overpass ExtraBold", + "postscriptName": "Overpass-ExtraBold", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1766, + "descent": -766, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1022, + "xWidthAvg": 957, + "subsets": { + "latin": { + "xWidthAvg": 957 + }, + "thai": { + "xWidthAvg": 1232 + } + } + }, + "900": { + "familyName": "Overpass", + "fullName": "Overpass Black", + "postscriptName": "Overpass-Black", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1766, + "descent": -766, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1022, + "xWidthAvg": 972, + "subsets": { + "latin": { + "xWidthAvg": 972 + }, + "thai": { + "xWidthAvg": 1232 + } + } + }, + "regular": { + "familyName": "Overpass", + "fullName": "Overpass Regular", + "postscriptName": "Overpass-Regular", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1766, + "descent": -766, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1022, + "xWidthAvg": 898, + "subsets": { + "latin": { + "xWidthAvg": 898 + }, + "thai": { + "xWidthAvg": 1232 + } + } + }, + "italic": { + "familyName": "Overpass", + "fullName": "Overpass Italic", + "postscriptName": "Overpass-Italic", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1766, + "descent": -766, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1022, + "xWidthAvg": 865, + "subsets": { + "latin": { + "xWidthAvg": 865 + }, + "thai": { + "xWidthAvg": 1232 + } + } + }, + "900italic": { + "familyName": "Overpass", + "fullName": "Overpass Black Italic", + "postscriptName": "Overpass-BlackItalic", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1766, + "descent": -766, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1022, + "xWidthAvg": 904, + "subsets": { + "latin": { + "xWidthAvg": 904 + }, + "thai": { + "xWidthAvg": 1232 + } + } + }, + "800italic": { + "familyName": "Overpass", + "fullName": "Overpass ExtraBold Italic", + "postscriptName": "Overpass-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1766, + "descent": -766, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1022, + "xWidthAvg": 896, + "subsets": { + "latin": { + "xWidthAvg": 896 + }, + "thai": { + "xWidthAvg": 1232 + } + } + }, + "700italic": { + "familyName": "Overpass", + "fullName": "Overpass Bold Italic", + "postscriptName": "Overpass-BoldItalic", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1766, + "descent": -766, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1022, + "xWidthAvg": 889, + "subsets": { + "latin": { + "xWidthAvg": 889 + }, + "thai": { + "xWidthAvg": 1232 + } + } + }, + "600italic": { + "familyName": "Overpass", + "fullName": "Overpass SemiBold Italic", + "postscriptName": "Overpass-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1766, + "descent": -766, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1022, + "xWidthAvg": 880, + "subsets": { + "latin": { + "xWidthAvg": 880 + }, + "thai": { + "xWidthAvg": 1232 + } + } + }, + "500italic": { + "familyName": "Overpass", + "fullName": "Overpass Medium Italic", + "postscriptName": "Overpass-MediumItalic", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1766, + "descent": -766, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1022, + "xWidthAvg": 873, + "subsets": { + "latin": { + "xWidthAvg": 873 + }, + "thai": { + "xWidthAvg": 1232 + } + } + }, + "300italic": { + "familyName": "Overpass", + "fullName": "Overpass Light Italic", + "postscriptName": "Overpass-LightItalic", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1766, + "descent": -766, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1022, + "xWidthAvg": 854, + "subsets": { + "latin": { + "xWidthAvg": 854 + }, + "thai": { + "xWidthAvg": 1232 + } + } + }, + "200italic": { + "familyName": "Overpass", + "fullName": "Overpass ExtraLight Italic", + "postscriptName": "Overpass-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1766, + "descent": -766, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1022, + "xWidthAvg": 844, + "subsets": { + "latin": { + "xWidthAvg": 844 + }, + "thai": { + "xWidthAvg": 1232 + } + } + }, + "100italic": { + "familyName": "Overpass", + "fullName": "Overpass Thin Italic", + "postscriptName": "Overpass-ThinItalic", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1766, + "descent": -766, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1022, + "xWidthAvg": 834, + "subsets": { + "latin": { + "xWidthAvg": 834 + }, + "thai": { + "xWidthAvg": 1232 + } + } + } + } + }, + "overpassMono": { + "familyName": "Overpass Mono", + "fullName": "Overpass Mono Regular", + "postscriptName": "OverpassMono-Regular", + "category": "monospace", + "capHeight": 1400, + "ascent": 1766, + "descent": -766, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1022, + "xWidthAvg": 1232, + "subsets": { + "latin": { + "xWidthAvg": 1232 + }, + "thai": { + "xWidthAvg": 1232 + } + }, + "variants": { + "300": { + "familyName": "Overpass Mono", + "fullName": "Overpass Mono Light", + "postscriptName": "OverpassMono-Light", + "category": "monospace", + "capHeight": 1400, + "ascent": 1766, + "descent": -766, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1022, + "xWidthAvg": 1232, + "subsets": { + "latin": { + "xWidthAvg": 1232 + }, + "thai": { + "xWidthAvg": 1232 + } + } + }, + "500": { + "familyName": "Overpass Mono", + "fullName": "Overpass Mono Medium", + "postscriptName": "OverpassMono-Medium", + "category": "monospace", + "capHeight": 1400, + "ascent": 1766, + "descent": -766, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1022, + "xWidthAvg": 1232, + "subsets": { + "latin": { + "xWidthAvg": 1232 + }, + "thai": { + "xWidthAvg": 1232 + } + } + }, + "600": { + "familyName": "Overpass Mono", + "fullName": "Overpass Mono SemiBold", + "postscriptName": "OverpassMono-SemiBold", + "category": "monospace", + "capHeight": 1400, + "ascent": 1766, + "descent": -766, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1022, + "xWidthAvg": 1232, + "subsets": { + "latin": { + "xWidthAvg": 1232 + }, + "thai": { + "xWidthAvg": 1232 + } + } + }, + "700": { + "familyName": "Overpass Mono", + "fullName": "Overpass Mono Bold", + "postscriptName": "OverpassMono-Bold", + "category": "monospace", + "capHeight": 1400, + "ascent": 1766, + "descent": -766, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1022, + "xWidthAvg": 1232, + "subsets": { + "latin": { + "xWidthAvg": 1232 + }, + "thai": { + "xWidthAvg": 1232 + } + } + }, + "regular": { + "familyName": "Overpass Mono", + "fullName": "Overpass Mono Regular", + "postscriptName": "OverpassMono-Regular", + "category": "monospace", + "capHeight": 1400, + "ascent": 1766, + "descent": -766, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1022, + "xWidthAvg": 1232, + "subsets": { + "latin": { + "xWidthAvg": 1232 + }, + "thai": { + "xWidthAvg": 1232 + } + } + } + } + }, + "ovo": { + "familyName": "Ovo", + "fullName": "Ovo", + "postscriptName": "Ovo", + "category": "serif", + "capHeight": 210, + "ascent": 1770, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 356, + "xWidthAvg": 903, + "subsets": { + "latin": { + "xWidthAvg": 903 + }, + "thai": { + "xWidthAvg": 450 + } + }, + "variants": { + "regular": { + "familyName": "Ovo", + "fullName": "Ovo", + "postscriptName": "Ovo", + "category": "serif", + "capHeight": 210, + "ascent": 1770, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 356, + "xWidthAvg": 903, + "subsets": { + "latin": { + "xWidthAvg": 903 + }, + "thai": { + "xWidthAvg": 450 + } + } + } + } + }, + "oxanium": { + "familyName": "Oxanium", + "fullName": "Oxanium Regular", + "postscriptName": "Oxanium-Regular", + "category": "display", + "capHeight": 690, + "ascent": 790, + "descent": -210, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 586 + } + }, + "variants": { + "200": { + "familyName": "Oxanium", + "fullName": "Oxanium ExtraLight", + "postscriptName": "Oxanium-ExtraLight", + "category": "display", + "capHeight": 690, + "ascent": 790, + "descent": -210, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 581 + } + } + }, + "300": { + "familyName": "Oxanium", + "fullName": "Oxanium Light", + "postscriptName": "Oxanium-Light", + "category": "display", + "capHeight": 690, + "ascent": 790, + "descent": -210, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "500": { + "familyName": "Oxanium", + "fullName": "Oxanium Medium", + "postscriptName": "Oxanium-Medium", + "category": "display", + "capHeight": 690, + "ascent": 790, + "descent": -210, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 588 + } + } + }, + "600": { + "familyName": "Oxanium", + "fullName": "Oxanium SemiBold", + "postscriptName": "Oxanium-SemiBold", + "category": "display", + "capHeight": 690, + "ascent": 790, + "descent": -210, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 591 + } + } + }, + "700": { + "familyName": "Oxanium", + "fullName": "Oxanium Bold", + "postscriptName": "Oxanium-Bold", + "category": "display", + "capHeight": 690, + "ascent": 790, + "descent": -210, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 594 + } + } + }, + "800": { + "familyName": "Oxanium", + "fullName": "Oxanium ExtraBold", + "postscriptName": "Oxanium-ExtraBold", + "category": "display", + "capHeight": 690, + "ascent": 790, + "descent": -210, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 598 + } + } + }, + "regular": { + "familyName": "Oxanium", + "fullName": "Oxanium Regular", + "postscriptName": "Oxanium-Regular", + "category": "display", + "capHeight": 690, + "ascent": 790, + "descent": -210, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 586 + } + } + } + } + }, + "oxygen": { + "familyName": "Oxygen", + "fullName": "Oxygen Regular", + "postscriptName": "Oxygen-Regular", + "category": "sans-serif", + "ascent": 2103, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 923, + "subsets": { + "latin": { + "xWidthAvg": 923 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "300": { + "familyName": "Oxygen", + "fullName": "Oxygen Light", + "postscriptName": "Oxygen-Light", + "category": "sans-serif", + "ascent": 2103, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 900, + "subsets": { + "latin": { + "xWidthAvg": 900 + }, + "thai": { + "xWidthAvg": 748 + } + } + }, + "700": { + "familyName": "Oxygen", + "fullName": "Oxygen Bold", + "postscriptName": "Oxygen-Bold", + "category": "sans-serif", + "ascent": 2103, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 977, + "subsets": { + "latin": { + "xWidthAvg": 977 + }, + "thai": { + "xWidthAvg": 748 + } + } + }, + "regular": { + "familyName": "Oxygen", + "fullName": "Oxygen Regular", + "postscriptName": "Oxygen-Regular", + "category": "sans-serif", + "ascent": 2103, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 923, + "subsets": { + "latin": { + "xWidthAvg": 923 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "oxygenMono": { + "familyName": "Oxygen Mono", + "fullName": "Oxygen Mono", + "postscriptName": "OxygenMono-Regular", + "category": "monospace", + "capHeight": 1491, + "ascent": 2015, + "descent": -672, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1097, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 748 + } + }, + "variants": { + "regular": { + "familyName": "Oxygen Mono", + "fullName": "Oxygen Mono", + "postscriptName": "OxygenMono-Regular", + "category": "monospace", + "capHeight": 1491, + "ascent": 2015, + "descent": -672, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1097, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 748 + } + } + } + } + }, + "pTMono": { + "familyName": "PT Mono", + "fullName": "PT Mono", + "postscriptName": "PTMono-Regular", + "category": "monospace", + "capHeight": 700, + "ascent": 885, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "PT Mono", + "fullName": "PT Mono", + "postscriptName": "PTMono-Regular", + "category": "monospace", + "capHeight": 700, + "ascent": 885, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "pTSans": { + "familyName": "PT Sans", + "fullName": "PT Sans", + "postscriptName": "PTSans-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 750 + } + }, + "variants": { + "700": { + "familyName": "PT Sans", + "fullName": "PT Sans Bold", + "postscriptName": "PTSans-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 750 + } + } + }, + "regular": { + "familyName": "PT Sans", + "fullName": "PT Sans", + "postscriptName": "PTSans-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 750 + } + } + }, + "italic": { + "familyName": "PT Sans", + "fullName": "PT Sans Italic", + "postscriptName": "PTSans-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 409, + "subsets": { + "latin": { + "xWidthAvg": 409 + }, + "thai": { + "xWidthAvg": 750 + } + } + }, + "700italic": { + "familyName": "PT Sans", + "fullName": "PT Sans Bold Italic", + "postscriptName": "PTSans-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 750 + } + } + } + } + }, + "pTSansCaption": { + "familyName": "PT Sans Caption", + "fullName": "PT Sans Caption", + "postscriptName": "PTSans-Caption", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 499, + "subsets": { + "latin": { + "xWidthAvg": 499 + }, + "thai": { + "xWidthAvg": 750 + } + }, + "variants": { + "700": { + "familyName": "PT Sans Caption", + "fullName": "PT Sans Caption Bold", + "postscriptName": "PTSans-CaptionBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 750 + } + } + }, + "regular": { + "familyName": "PT Sans Caption", + "fullName": "PT Sans Caption", + "postscriptName": "PTSans-Caption", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 499, + "subsets": { + "latin": { + "xWidthAvg": 499 + }, + "thai": { + "xWidthAvg": 750 + } + } + } + } + }, + "pTSansNarrow": { + "familyName": "PT Sans Narrow", + "fullName": "PT Sans Narrow", + "postscriptName": "PTSans-Narrow", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 347, + "subsets": { + "latin": { + "xWidthAvg": 347 + }, + "thai": { + "xWidthAvg": 750 + } + }, + "variants": { + "700": { + "familyName": "PT Sans Narrow", + "fullName": "PT Sans Narrow Bold", + "postscriptName": "PTSans-NarrowBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 358, + "subsets": { + "latin": { + "xWidthAvg": 358 + }, + "thai": { + "xWidthAvg": 750 + } + } + }, + "regular": { + "familyName": "PT Sans Narrow", + "fullName": "PT Sans Narrow", + "postscriptName": "PTSans-Narrow", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -276, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 347, + "subsets": { + "latin": { + "xWidthAvg": 347 + }, + "thai": { + "xWidthAvg": 750 + } + } + } + } + }, + "pTSerif": { + "familyName": "PT Serif", + "fullName": "PT Serif", + "postscriptName": "PTSerif-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 1039, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 709 + } + }, + "variants": { + "700": { + "familyName": "PT Serif", + "fullName": "PT Serif Bold", + "postscriptName": "PTSerif-Bold", + "category": "serif", + "capHeight": 700, + "ascent": 1039, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 709 + } + } + }, + "regular": { + "familyName": "PT Serif", + "fullName": "PT Serif", + "postscriptName": "PTSerif-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 1039, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 709 + } + } + }, + "italic": { + "familyName": "PT Serif", + "fullName": "PT Serif Italic", + "postscriptName": "PTSerif-Italic", + "category": "serif", + "capHeight": 700, + "ascent": 1039, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 507, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 709 + } + } + }, + "700italic": { + "familyName": "PT Serif", + "fullName": "PT Serif Bold Italic", + "postscriptName": "PTSerif-BoldItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1039, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 509, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 709 + } + } + } + } + }, + "pTSerifCaption": { + "familyName": "PT Serif Caption", + "fullName": "PT Serif Caption", + "postscriptName": "PTSerif-Caption", + "category": "serif", + "capHeight": 700, + "ascent": 1039, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 709 + } + }, + "variants": { + "regular": { + "familyName": "PT Serif Caption", + "fullName": "PT Serif Caption", + "postscriptName": "PTSerif-Caption", + "category": "serif", + "capHeight": 700, + "ascent": 1039, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 709 + } + } + }, + "italic": { + "familyName": "PT Serif Caption", + "fullName": "PT Serif Caption Italic", + "postscriptName": "PTSerif-CaptionItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1039, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 709 + } + } + } + } + }, + "pacifico": { + "familyName": "Pacifico", + "fullName": "Pacifico Regular", + "postscriptName": "Pacifico-Regular", + "category": "handwriting", + "capHeight": 840, + "ascent": 1303, + "descent": -453, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 423, + "subsets": { + "latin": { + "xWidthAvg": 423 + }, + "thai": { + "xWidthAvg": 265 + } + }, + "variants": { + "regular": { + "familyName": "Pacifico", + "fullName": "Pacifico Regular", + "postscriptName": "Pacifico-Regular", + "category": "handwriting", + "capHeight": 840, + "ascent": 1303, + "descent": -453, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 423, + "subsets": { + "latin": { + "xWidthAvg": 423 + }, + "thai": { + "xWidthAvg": 265 + } + } + } + } + }, + "padauk": { + "familyName": "Padauk", + "fullName": "Padauk", + "postscriptName": "Padauk-Regular", + "category": "sans-serif", + "capHeight": 903, + "ascent": 1010, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 459, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 0 + } + }, + "variants": { + "700": { + "familyName": "Padauk", + "fullName": "Padauk Bold", + "postscriptName": "Padauk-Bold", + "category": "sans-serif", + "capHeight": 920, + "ascent": 1010, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 464, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 1 + } + } + }, + "regular": { + "familyName": "Padauk", + "fullName": "Padauk", + "postscriptName": "Padauk-Regular", + "category": "sans-serif", + "capHeight": 903, + "ascent": 1010, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 459, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 0 + } + } + } + } + }, + "padyakkeExpandedOne": { + "familyName": "Padyakke Expanded One", + "fullName": "Padyakke Expanded One Regular", + "postscriptName": "PadyakkeExpandedOne-Regular", + "category": "serif", + "capHeight": 520, + "ascent": 813, + "descent": -628, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 357, + "xWidthAvg": 674, + "subsets": { + "latin": { + "xWidthAvg": 674 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Padyakke Expanded One", + "fullName": "Padyakke Expanded One Regular", + "postscriptName": "PadyakkeExpandedOne-Regular", + "category": "serif", + "capHeight": 520, + "ascent": 813, + "descent": -628, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 357, + "xWidthAvg": 674, + "subsets": { + "latin": { + "xWidthAvg": 674 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "palanquin": { + "familyName": "Palanquin", + "fullName": "Palanquin Regular", + "postscriptName": "Palanquin-Regular", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1320, + "descent": -491, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 658 + } + }, + "variants": { + "100": { + "familyName": "Palanquin", + "fullName": "Palanquin Thin", + "postscriptName": "Palanquin-Thin", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1320, + "descent": -491, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 628 + } + } + }, + "200": { + "familyName": "Palanquin", + "fullName": "Palanquin ExtraLight", + "postscriptName": "Palanquin-ExtraLight", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1320, + "descent": -491, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 636 + } + } + }, + "300": { + "familyName": "Palanquin", + "fullName": "Palanquin Light", + "postscriptName": "Palanquin-Light", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1320, + "descent": -491, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 421, + "subsets": { + "latin": { + "xWidthAvg": 421 + }, + "thai": { + "xWidthAvg": 645 + } + } + }, + "500": { + "familyName": "Palanquin", + "fullName": "Palanquin Medium", + "postscriptName": "Palanquin-Medium", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1320, + "descent": -491, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 671 + } + } + }, + "600": { + "familyName": "Palanquin", + "fullName": "Palanquin SemiBold", + "postscriptName": "Palanquin-SemiBold", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1320, + "descent": -491, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 684 + } + } + }, + "700": { + "familyName": "Palanquin", + "fullName": "Palanquin Bold", + "postscriptName": "Palanquin-Bold", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1320, + "descent": -491, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 697 + } + } + }, + "regular": { + "familyName": "Palanquin", + "fullName": "Palanquin Regular", + "postscriptName": "Palanquin-Regular", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1320, + "descent": -491, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 658 + } + } + } + } + }, + "palanquinDark": { + "familyName": "Palanquin Dark", + "fullName": "Palanquin Dark Regular", + "postscriptName": "PalanquinDark-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1320, + "descent": -491, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 697 + } + }, + "variants": { + "500": { + "familyName": "Palanquin Dark", + "fullName": "Palanquin Dark Medium", + "postscriptName": "PalanquinDark-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1320, + "descent": -491, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 697 + } + } + }, + "600": { + "familyName": "Palanquin Dark", + "fullName": "Palanquin Dark SemiBold", + "postscriptName": "PalanquinDark-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1320, + "descent": -491, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 697 + } + } + }, + "700": { + "familyName": "Palanquin Dark", + "fullName": "Palanquin Dark Bold", + "postscriptName": "PalanquinDark-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1320, + "descent": -491, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 697 + } + } + }, + "regular": { + "familyName": "Palanquin Dark", + "fullName": "Palanquin Dark Regular", + "postscriptName": "PalanquinDark-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1320, + "descent": -491, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 697 + } + } + } + } + }, + "paletteMosaic": { + "familyName": "Palette Mosaic", + "fullName": "Palette Mosaic Regular", + "postscriptName": "PaletteMosaic-Regular", + "category": "display", + "capHeight": 790, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 465, + "xWidthAvg": 636, + "subsets": { + "latin": { + "xWidthAvg": 636 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Palette Mosaic", + "fullName": "Palette Mosaic Regular", + "postscriptName": "PaletteMosaic-Regular", + "category": "display", + "capHeight": 790, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 465, + "xWidthAvg": 636, + "subsets": { + "latin": { + "xWidthAvg": 636 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "pangolin": { + "familyName": "Pangolin", + "fullName": "Pangolin Regular", + "postscriptName": "Pangolin-Regular", + "category": "handwriting", + "capHeight": 720, + "ascent": 937, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 555, + "xWidthAvg": 418, + "subsets": { + "latin": { + "xWidthAvg": 418 + }, + "thai": { + "xWidthAvg": 480 + } + }, + "variants": { + "regular": { + "familyName": "Pangolin", + "fullName": "Pangolin Regular", + "postscriptName": "Pangolin-Regular", + "category": "handwriting", + "capHeight": 720, + "ascent": 937, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 555, + "xWidthAvg": 418, + "subsets": { + "latin": { + "xWidthAvg": 418 + }, + "thai": { + "xWidthAvg": 480 + } + } + } + } + }, + "paprika": { + "familyName": "Paprika", + "fullName": "Paprika Regular", + "postscriptName": "Paprika-Regular", + "category": "display", + "capHeight": 889, + "ascent": 1145, + "descent": -274, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 689, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 554 + } + }, + "variants": { + "regular": { + "familyName": "Paprika", + "fullName": "Paprika Regular", + "postscriptName": "Paprika-Regular", + "category": "display", + "capHeight": 889, + "ascent": 1145, + "descent": -274, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 689, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 554 + } + } + } + } + }, + "parisienne": { + "familyName": "Parisienne", + "fullName": "Parisienne", + "postscriptName": "Parisienne-Regular", + "category": "handwriting", + "capHeight": 1558, + "ascent": 1875, + "descent": -915, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 723, + "xWidthAvg": 769, + "subsets": { + "latin": { + "xWidthAvg": 769 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Parisienne", + "fullName": "Parisienne", + "postscriptName": "Parisienne-Regular", + "category": "handwriting", + "capHeight": 1558, + "ascent": 1875, + "descent": -915, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 723, + "xWidthAvg": 769, + "subsets": { + "latin": { + "xWidthAvg": 769 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "passeroOne": { + "familyName": "Passero One", + "fullName": "Passero One", + "postscriptName": "PasseroOne-Regular", + "category": "display", + "capHeight": 1323, + "ascent": 1820, + "descent": -618, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 983, + "xWidthAvg": 815, + "subsets": { + "latin": { + "xWidthAvg": 815 + }, + "thai": { + "xWidthAvg": 1710 + } + }, + "variants": { + "regular": { + "familyName": "Passero One", + "fullName": "Passero One", + "postscriptName": "PasseroOne-Regular", + "category": "display", + "capHeight": 1323, + "ascent": 1820, + "descent": -618, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 983, + "xWidthAvg": 815, + "subsets": { + "latin": { + "xWidthAvg": 815 + }, + "thai": { + "xWidthAvg": 1710 + } + } + } + } + }, + "passionOne": { + "familyName": "Passion One", + "fullName": "Passion One Regular", + "postscriptName": "PassionOne-Regular", + "category": "display", + "capHeight": 621, + "ascent": 835, + "descent": -266, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 479, + "xWidthAvg": 372, + "subsets": { + "latin": { + "xWidthAvg": 372 + }, + "thai": { + "xWidthAvg": 210 + } + }, + "variants": { + "700": { + "familyName": "Passion One", + "fullName": "Passion One Bold", + "postscriptName": "PassionOne-Bold", + "category": "display", + "capHeight": 621, + "ascent": 835, + "descent": -266, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 479, + "xWidthAvg": 417, + "subsets": { + "latin": { + "xWidthAvg": 417 + }, + "thai": { + "xWidthAvg": 190 + } + } + }, + "900": { + "familyName": "Passion One", + "fullName": "Passion One Black", + "postscriptName": "PassionOne-Black", + "category": "display", + "capHeight": 621, + "ascent": 835, + "descent": -266, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 479, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 175 + } + } + }, + "regular": { + "familyName": "Passion One", + "fullName": "Passion One Regular", + "postscriptName": "PassionOne-Regular", + "category": "display", + "capHeight": 621, + "ascent": 835, + "descent": -266, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 479, + "xWidthAvg": 372, + "subsets": { + "latin": { + "xWidthAvg": 372 + }, + "thai": { + "xWidthAvg": 210 + } + } + } + } + }, + "passionsConflict": { + "familyName": "Passions Conflict", + "fullName": "Passions Conflict Regular", + "postscriptName": "PassionsConflict-Regular", + "category": "handwriting", + "capHeight": 475, + "ascent": 750, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 170, + "xWidthAvg": 262, + "subsets": { + "latin": { + "xWidthAvg": 262 + }, + "thai": { + "xWidthAvg": 514 + } + }, + "variants": { + "regular": { + "familyName": "Passions Conflict", + "fullName": "Passions Conflict Regular", + "postscriptName": "PassionsConflict-Regular", + "category": "handwriting", + "capHeight": 475, + "ascent": 750, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 170, + "xWidthAvg": 262, + "subsets": { + "latin": { + "xWidthAvg": 262 + }, + "thai": { + "xWidthAvg": 514 + } + } + } + } + }, + "pathwayExtreme": { + "familyName": "Pathway Extreme", + "fullName": "Pathway Extreme 12pt Regular", + "postscriptName": "PathwayExtreme12pt-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Pathway Extreme", + "fullName": "Pathway Extreme 12pt Thin", + "postscriptName": "PathwayExtreme12pt-Thin", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Pathway Extreme", + "fullName": "Pathway Extreme 12pt ExtraLight", + "postscriptName": "PathwayExtreme12pt-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Pathway Extreme", + "fullName": "Pathway Extreme 12pt Light", + "postscriptName": "PathwayExtreme12pt-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Pathway Extreme", + "fullName": "Pathway Extreme 12pt Medium", + "postscriptName": "PathwayExtreme12pt-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 507, + "subsets": { + "latin": { + "xWidthAvg": 507 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Pathway Extreme", + "fullName": "Pathway Extreme 12pt SemiBold", + "postscriptName": "PathwayExtreme12pt-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 522, + "subsets": { + "latin": { + "xWidthAvg": 522 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Pathway Extreme", + "fullName": "Pathway Extreme 12pt Bold", + "postscriptName": "PathwayExtreme12pt-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 543, + "subsets": { + "latin": { + "xWidthAvg": 543 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Pathway Extreme", + "fullName": "Pathway Extreme 12pt ExtraBold", + "postscriptName": "PathwayExtreme12pt-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 570, + "subsets": { + "latin": { + "xWidthAvg": 570 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Pathway Extreme", + "fullName": "Pathway Extreme 12pt Black", + "postscriptName": "PathwayExtreme12pt-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 607, + "subsets": { + "latin": { + "xWidthAvg": 607 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Pathway Extreme", + "fullName": "Pathway Extreme 12pt Regular", + "postscriptName": "PathwayExtreme12pt-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "italic": { + "familyName": "Pathway Extreme", + "fullName": "Pathway Extreme 12pt Italic", + "postscriptName": "PathwayExtreme12pt-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900italic": { + "familyName": "Pathway Extreme", + "fullName": "Pathway Extreme 12pt Black Italic", + "postscriptName": "PathwayExtreme12pt-BlackItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 607, + "subsets": { + "latin": { + "xWidthAvg": 607 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800italic": { + "familyName": "Pathway Extreme", + "fullName": "Pathway Extreme 12pt ExtraBold Italic", + "postscriptName": "PathwayExtreme12pt-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 570, + "subsets": { + "latin": { + "xWidthAvg": 570 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700italic": { + "familyName": "Pathway Extreme", + "fullName": "Pathway Extreme 12pt Bold Italic", + "postscriptName": "PathwayExtreme12pt-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 543, + "subsets": { + "latin": { + "xWidthAvg": 543 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600italic": { + "familyName": "Pathway Extreme", + "fullName": "Pathway Extreme 12pt SemiBold Italic", + "postscriptName": "PathwayExtreme12pt-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 522, + "subsets": { + "latin": { + "xWidthAvg": 522 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500italic": { + "familyName": "Pathway Extreme", + "fullName": "Pathway Extreme 12pt Medium Italic", + "postscriptName": "PathwayExtreme12pt-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 507, + "subsets": { + "latin": { + "xWidthAvg": 507 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300italic": { + "familyName": "Pathway Extreme", + "fullName": "Pathway Extreme 12pt Light Italic", + "postscriptName": "PathwayExtreme12pt-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200italic": { + "familyName": "Pathway Extreme", + "fullName": "Pathway Extreme 12pt ExtraLight Italic", + "postscriptName": "PathwayExtreme12pt-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "100italic": { + "familyName": "Pathway Extreme", + "fullName": "Pathway Extreme 12pt Thin Italic", + "postscriptName": "PathwayExtreme12pt-ThinItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1070, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "pathwayGothicOne": { + "familyName": "Pathway Gothic One", + "fullName": "Pathway Gothic One Regular", + "postscriptName": "PathwayGothicOne-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 954, + "descent": -198, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 308, + "subsets": { + "latin": { + "xWidthAvg": 308 + }, + "thai": { + "xWidthAvg": 144 + } + }, + "variants": { + "regular": { + "familyName": "Pathway Gothic One", + "fullName": "Pathway Gothic One Regular", + "postscriptName": "PathwayGothicOne-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 954, + "descent": -198, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 308, + "subsets": { + "latin": { + "xWidthAvg": 308 + }, + "thai": { + "xWidthAvg": 144 + } + } + } + } + }, + "patrickHand": { + "familyName": "Patrick Hand", + "fullName": "Patrick Hand", + "postscriptName": "PatrickHand-Regular", + "category": "handwriting", + "capHeight": 661, + "ascent": 1042, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 467, + "xWidthAvg": 363, + "subsets": { + "latin": { + "xWidthAvg": 363 + }, + "thai": { + "xWidthAvg": 228 + } + }, + "variants": { + "regular": { + "familyName": "Patrick Hand", + "fullName": "Patrick Hand", + "postscriptName": "PatrickHand-Regular", + "category": "handwriting", + "capHeight": 661, + "ascent": 1042, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 467, + "xWidthAvg": 363, + "subsets": { + "latin": { + "xWidthAvg": 363 + }, + "thai": { + "xWidthAvg": 228 + } + } + } + } + }, + "patrickHandSC": { + "familyName": "Patrick Hand SC", + "fullName": "Patrick Hand SC", + "postscriptName": "PatrickHandSC-Regular", + "category": "handwriting", + "capHeight": 661, + "ascent": 1042, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 464, + "xWidthAvg": 368, + "subsets": { + "latin": { + "xWidthAvg": 368 + }, + "thai": { + "xWidthAvg": 228 + } + }, + "variants": { + "regular": { + "familyName": "Patrick Hand SC", + "fullName": "Patrick Hand SC", + "postscriptName": "PatrickHandSC-Regular", + "category": "handwriting", + "capHeight": 661, + "ascent": 1042, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 464, + "xWidthAvg": 368, + "subsets": { + "latin": { + "xWidthAvg": 368 + }, + "thai": { + "xWidthAvg": 228 + } + } + } + } + }, + "pattaya": { + "familyName": "Pattaya", + "fullName": "Pattaya Regular", + "postscriptName": "Pattaya-Regular", + "category": "sans-serif", + "capHeight": 1532, + "ascent": 2065, + "descent": -777, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 803, + "subsets": { + "latin": { + "xWidthAvg": 803 + }, + "thai": { + "xWidthAvg": 1014 + } + }, + "variants": { + "regular": { + "familyName": "Pattaya", + "fullName": "Pattaya Regular", + "postscriptName": "Pattaya-Regular", + "category": "sans-serif", + "capHeight": 1532, + "ascent": 2065, + "descent": -777, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 803, + "subsets": { + "latin": { + "xWidthAvg": 803 + }, + "thai": { + "xWidthAvg": 1014 + } + } + } + } + }, + "patuaOne": { + "familyName": "Patua One", + "fullName": "Patua One", + "postscriptName": "PatuaOne-Regular", + "category": "display", + "capHeight": 690, + "ascent": 972, + "descent": -247, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 250 + } + }, + "variants": { + "regular": { + "familyName": "Patua One", + "fullName": "Patua One", + "postscriptName": "PatuaOne-Regular", + "category": "display", + "capHeight": 690, + "ascent": 972, + "descent": -247, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 250 + } + } + } + } + }, + "pavanam": { + "familyName": "Pavanam", + "fullName": "Pavanam Regular", + "postscriptName": "Pavanam-Regular", + "category": "sans-serif", + "ascent": 952, + "descent": -339, + "lineGap": 0, + "unitsPerEm": 1000, + "xWidthAvg": 391, + "subsets": { + "latin": { + "xWidthAvg": 391 + }, + "thai": { + "xWidthAvg": 347 + } + }, + "variants": { + "regular": { + "familyName": "Pavanam", + "fullName": "Pavanam Regular", + "postscriptName": "Pavanam-Regular", + "category": "sans-serif", + "ascent": 952, + "descent": -339, + "lineGap": 0, + "unitsPerEm": 1000, + "xWidthAvg": 391, + "subsets": { + "latin": { + "xWidthAvg": 391 + }, + "thai": { + "xWidthAvg": 347 + } + } + } + } + }, + "paytoneOne": { + "familyName": "Paytone One", + "fullName": "Paytone One Regular", + "postscriptName": "PaytoneOne-Regular", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1113, + "descent": -283, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 813 + } + }, + "variants": { + "regular": { + "familyName": "Paytone One", + "fullName": "Paytone One Regular", + "postscriptName": "PaytoneOne-Regular", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1113, + "descent": -283, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 501, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 813 + } + } + } + } + }, + "peddana": { + "familyName": "Peddana", + "fullName": "Peddana Regular", + "postscriptName": "Peddana", + "category": "serif", + "capHeight": 329, + "ascent": 703, + "descent": -518, + "lineGap": 0, + "unitsPerEm": 750, + "xHeight": 241, + "xWidthAvg": 235, + "subsets": { + "latin": { + "xWidthAvg": 235 + }, + "thai": { + "xWidthAvg": 421 + } + }, + "variants": { + "regular": { + "familyName": "Peddana", + "fullName": "Peddana Regular", + "postscriptName": "Peddana", + "category": "serif", + "capHeight": 329, + "ascent": 703, + "descent": -518, + "lineGap": 0, + "unitsPerEm": 750, + "xHeight": 241, + "xWidthAvg": 235, + "subsets": { + "latin": { + "xWidthAvg": 235 + }, + "thai": { + "xWidthAvg": 421 + } + } + } + } + }, + "peralta": { + "familyName": "Peralta", + "fullName": "Peralta", + "postscriptName": "Peralta-Regular", + "category": "serif", + "capHeight": 1479, + "ascent": 2004, + "descent": -647, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1036, + "xWidthAvg": 1171, + "subsets": { + "latin": { + "xWidthAvg": 1171 + }, + "thai": { + "xWidthAvg": 614 + } + }, + "variants": { + "regular": { + "familyName": "Peralta", + "fullName": "Peralta", + "postscriptName": "Peralta-Regular", + "category": "serif", + "capHeight": 1479, + "ascent": 2004, + "descent": -647, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1036, + "xWidthAvg": 1171, + "subsets": { + "latin": { + "xWidthAvg": 1171 + }, + "thai": { + "xWidthAvg": 614 + } + } + } + } + }, + "permanentMarker": { + "familyName": "Permanent Marker", + "fullName": "Permanent Marker Regular", + "postscriptName": "PermanentMarker-Regular", + "category": "handwriting", + "capHeight": 758, + "ascent": 1136, + "descent": -325, + "lineGap": 31, + "unitsPerEm": 1024, + "xHeight": 625, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 379 + } + }, + "variants": { + "regular": { + "familyName": "Permanent Marker", + "fullName": "Permanent Marker Regular", + "postscriptName": "PermanentMarker-Regular", + "category": "handwriting", + "capHeight": 758, + "ascent": 1136, + "descent": -325, + "lineGap": 31, + "unitsPerEm": 1024, + "xHeight": 625, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 379 + } + } + } + } + }, + "petemoss": { + "familyName": "Petemoss", + "fullName": "Petemoss Regular", + "postscriptName": "Petemoss-Regular", + "category": "handwriting", + "capHeight": 480, + "ascent": 800, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 305, + "xWidthAvg": 228, + "subsets": { + "latin": { + "xWidthAvg": 228 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Petemoss", + "fullName": "Petemoss Regular", + "postscriptName": "Petemoss-Regular", + "category": "handwriting", + "capHeight": 480, + "ascent": 800, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 305, + "xWidthAvg": 228, + "subsets": { + "latin": { + "xWidthAvg": 228 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "petitFormalScript": { + "familyName": "Petit Formal Script", + "fullName": "Petit Formal Script", + "postscriptName": "PetitFormalScript-Regular", + "category": "handwriting", + "capHeight": 1609, + "ascent": 2033, + "descent": -527, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1185, + "xWidthAvg": 1108, + "subsets": { + "latin": { + "xWidthAvg": 1108 + }, + "thai": { + "xWidthAvg": 1180 + } + }, + "variants": { + "regular": { + "familyName": "Petit Formal Script", + "fullName": "Petit Formal Script", + "postscriptName": "PetitFormalScript-Regular", + "category": "handwriting", + "capHeight": 1609, + "ascent": 2033, + "descent": -527, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1185, + "xWidthAvg": 1108, + "subsets": { + "latin": { + "xWidthAvg": 1108 + }, + "thai": { + "xWidthAvg": 1180 + } + } + } + } + }, + "petrona": { + "familyName": "Petrona", + "fullName": "Petrona Regular", + "postscriptName": "Petrona-Regular", + "category": "serif", + "capHeight": 641, + "ascent": 858, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 443, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 599 + } + }, + "variants": { + "100": { + "familyName": "Petrona", + "fullName": "Petrona Thin", + "postscriptName": "Petrona-Thin", + "category": "serif", + "capHeight": 641, + "ascent": 858, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 443, + "xWidthAvg": 407, + "subsets": { + "latin": { + "xWidthAvg": 407 + }, + "thai": { + "xWidthAvg": 599 + } + } + }, + "200": { + "familyName": "Petrona", + "fullName": "Petrona ExtraLight", + "postscriptName": "Petrona-ExtraLight", + "category": "serif", + "capHeight": 641, + "ascent": 858, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 443, + "xWidthAvg": 417, + "subsets": { + "latin": { + "xWidthAvg": 417 + }, + "thai": { + "xWidthAvg": 599 + } + } + }, + "300": { + "familyName": "Petrona", + "fullName": "Petrona Light", + "postscriptName": "Petrona-Light", + "category": "serif", + "capHeight": 641, + "ascent": 858, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 443, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 599 + } + } + }, + "500": { + "familyName": "Petrona", + "fullName": "Petrona Medium", + "postscriptName": "Petrona-Medium", + "category": "serif", + "capHeight": 641, + "ascent": 858, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 443, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 599 + } + } + }, + "600": { + "familyName": "Petrona", + "fullName": "Petrona SemiBold", + "postscriptName": "Petrona-SemiBold", + "category": "serif", + "capHeight": 641, + "ascent": 858, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 443, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 599 + } + } + }, + "700": { + "familyName": "Petrona", + "fullName": "Petrona Bold", + "postscriptName": "Petrona-Bold", + "category": "serif", + "capHeight": 641, + "ascent": 858, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 443, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 599 + } + } + }, + "800": { + "familyName": "Petrona", + "fullName": "Petrona ExtraBold", + "postscriptName": "Petrona-ExtraBold", + "category": "serif", + "capHeight": 641, + "ascent": 858, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 443, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Petrona", + "fullName": "Petrona Black", + "postscriptName": "Petrona-Black", + "category": "serif", + "capHeight": 641, + "ascent": 858, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 443, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Petrona", + "fullName": "Petrona Regular", + "postscriptName": "Petrona-Regular", + "category": "serif", + "capHeight": 641, + "ascent": 858, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 443, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 599 + } + } + }, + "italic": { + "familyName": "Petrona", + "fullName": "Petrona Italic", + "postscriptName": "Petrona-Italic", + "category": "serif", + "capHeight": 641, + "ascent": 858, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 443, + "xWidthAvg": 403, + "subsets": { + "latin": { + "xWidthAvg": 403 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900italic": { + "familyName": "Petrona", + "fullName": "Petrona Black Italic", + "postscriptName": "Petrona-BlackItalic", + "category": "serif", + "capHeight": 641, + "ascent": 858, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 443, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800italic": { + "familyName": "Petrona", + "fullName": "Petrona ExtraBold Italic", + "postscriptName": "Petrona-ExtraBoldItalic", + "category": "serif", + "capHeight": 641, + "ascent": 858, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 443, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700italic": { + "familyName": "Petrona", + "fullName": "Petrona Bold Italic", + "postscriptName": "Petrona-BoldItalic", + "category": "serif", + "capHeight": 641, + "ascent": 858, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 443, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600italic": { + "familyName": "Petrona", + "fullName": "Petrona SemiBold Italic", + "postscriptName": "Petrona-SemiBoldItalic", + "category": "serif", + "capHeight": 641, + "ascent": 858, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 443, + "xWidthAvg": 418, + "subsets": { + "latin": { + "xWidthAvg": 418 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500italic": { + "familyName": "Petrona", + "fullName": "Petrona Medium Italic", + "postscriptName": "Petrona-MediumItalic", + "category": "serif", + "capHeight": 641, + "ascent": 858, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 443, + "xWidthAvg": 410, + "subsets": { + "latin": { + "xWidthAvg": 410 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300italic": { + "familyName": "Petrona", + "fullName": "Petrona Light Italic", + "postscriptName": "Petrona-LightItalic", + "category": "serif", + "capHeight": 641, + "ascent": 858, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 443, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200italic": { + "familyName": "Petrona", + "fullName": "Petrona ExtraLight Italic", + "postscriptName": "Petrona-ExtraLightItalic", + "category": "serif", + "capHeight": 641, + "ascent": 858, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 443, + "xWidthAvg": 398, + "subsets": { + "latin": { + "xWidthAvg": 398 + }, + "thai": { + "xWidthAvg": 599 + } + } + }, + "100italic": { + "familyName": "Petrona", + "fullName": "Petrona Thin Italic", + "postscriptName": "Petrona-ThinItalic", + "category": "serif", + "capHeight": 641, + "ascent": 858, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 443, + "xWidthAvg": 395, + "subsets": { + "latin": { + "xWidthAvg": 395 + }, + "thai": { + "xWidthAvg": 599 + } + } + } + } + }, + "philosopher": { + "familyName": "Philosopher", + "fullName": "Philosopher Regular", + "postscriptName": "Philosopher-Regular", + "category": "sans-serif", + "capHeight": 660, + "ascent": 900, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "700": { + "familyName": "Philosopher", + "fullName": "Philosopher Bold", + "postscriptName": "Philosopher-Bold", + "category": "sans-serif", + "capHeight": 660, + "ascent": 900, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Philosopher", + "fullName": "Philosopher Regular", + "postscriptName": "Philosopher-Regular", + "category": "sans-serif", + "capHeight": 660, + "ascent": 900, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Philosopher", + "fullName": "Philosopher Italic", + "postscriptName": "Philosopher-Italic", + "category": "sans-serif", + "capHeight": 660, + "ascent": 900, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 432, + "subsets": { + "latin": { + "xWidthAvg": 432 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700italic": { + "familyName": "Philosopher", + "fullName": "Philosopher Bold Italic", + "postscriptName": "Philosopher-BoldItalic", + "category": "sans-serif", + "capHeight": 660, + "ascent": 900, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 449, + "subsets": { + "latin": { + "xWidthAvg": 449 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "phudu": { + "familyName": "Phudu", + "fullName": "Phudu Regular", + "postscriptName": "Phudu-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1025, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "300": { + "familyName": "Phudu", + "fullName": "Phudu Light", + "postscriptName": "Phudu-Light", + "category": "display", + "capHeight": 700, + "ascent": 1025, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Phudu", + "fullName": "Phudu Medium", + "postscriptName": "Phudu-Medium", + "category": "display", + "capHeight": 700, + "ascent": 1025, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Phudu", + "fullName": "Phudu SemiBold", + "postscriptName": "Phudu-SemiBold", + "category": "display", + "capHeight": 700, + "ascent": 1025, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Phudu", + "fullName": "Phudu Bold", + "postscriptName": "Phudu-Bold", + "category": "display", + "capHeight": 700, + "ascent": 1025, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Phudu", + "fullName": "Phudu ExtraBold", + "postscriptName": "Phudu-ExtraBold", + "category": "display", + "capHeight": 700, + "ascent": 1025, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 449, + "subsets": { + "latin": { + "xWidthAvg": 449 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "Phudu", + "fullName": "Phudu Black", + "postscriptName": "Phudu-Black", + "category": "display", + "capHeight": 700, + "ascent": 1025, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Phudu", + "fullName": "Phudu Regular", + "postscriptName": "Phudu-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1025, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "piazzolla": { + "familyName": "Piazzolla", + "fullName": "Piazzolla Regular", + "postscriptName": "Piazzolla-Regular", + "category": "serif", + "capHeight": 644, + "ascent": 1110, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 772 + } + }, + "variants": { + "100": { + "familyName": "Piazzolla", + "fullName": "Piazzolla Thin", + "postscriptName": "Piazzolla-Thin", + "category": "serif", + "capHeight": 644, + "ascent": 1110, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 752 + } + } + }, + "200": { + "familyName": "Piazzolla", + "fullName": "Piazzolla ExtraLight", + "postscriptName": "Piazzolla-ExtraLight", + "category": "serif", + "capHeight": 644, + "ascent": 1110, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 759 + } + } + }, + "300": { + "familyName": "Piazzolla", + "fullName": "Piazzolla Light", + "postscriptName": "Piazzolla-Light", + "category": "serif", + "capHeight": 644, + "ascent": 1110, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 765 + } + } + }, + "500": { + "familyName": "Piazzolla", + "fullName": "Piazzolla Medium", + "postscriptName": "Piazzolla-Medium", + "category": "serif", + "capHeight": 644, + "ascent": 1110, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 759 + } + } + }, + "600": { + "familyName": "Piazzolla", + "fullName": "Piazzolla SemiBold", + "postscriptName": "Piazzolla-SemiBold", + "category": "serif", + "capHeight": 644, + "ascent": 1110, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 735 + } + } + }, + "700": { + "familyName": "Piazzolla", + "fullName": "Piazzolla Bold", + "postscriptName": "Piazzolla-Bold", + "category": "serif", + "capHeight": 644, + "ascent": 1110, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 706 + } + } + }, + "800": { + "familyName": "Piazzolla", + "fullName": "Piazzolla ExtraBold", + "postscriptName": "Piazzolla-ExtraBold", + "category": "serif", + "capHeight": 644, + "ascent": 1110, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 669 + } + } + }, + "900": { + "familyName": "Piazzolla", + "fullName": "Piazzolla Black", + "postscriptName": "Piazzolla-Black", + "category": "serif", + "capHeight": 644, + "ascent": 1110, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 626 + } + } + }, + "regular": { + "familyName": "Piazzolla", + "fullName": "Piazzolla Regular", + "postscriptName": "Piazzolla-Regular", + "category": "serif", + "capHeight": 644, + "ascent": 1110, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 772 + } + } + }, + "italic": { + "familyName": "Piazzolla", + "fullName": "Piazzolla Italic", + "postscriptName": "Piazzolla-Italic", + "category": "serif", + "capHeight": 644, + "ascent": 1110, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 740 + } + } + }, + "900italic": { + "familyName": "Piazzolla", + "fullName": "Piazzolla Black Italic", + "postscriptName": "Piazzolla-BlackItalic", + "category": "serif", + "capHeight": 644, + "ascent": 1110, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 641 + } + } + }, + "800italic": { + "familyName": "Piazzolla", + "fullName": "Piazzolla ExtraBold Italic", + "postscriptName": "Piazzolla-ExtraBoldItalic", + "category": "serif", + "capHeight": 644, + "ascent": 1110, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 670 + } + } + }, + "700italic": { + "familyName": "Piazzolla", + "fullName": "Piazzolla Bold Italic", + "postscriptName": "Piazzolla-BoldItalic", + "category": "serif", + "capHeight": 644, + "ascent": 1110, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 696 + } + } + }, + "600italic": { + "familyName": "Piazzolla", + "fullName": "Piazzolla SemiBold Italic", + "postscriptName": "Piazzolla-SemiBoldItalic", + "category": "serif", + "capHeight": 644, + "ascent": 1110, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 715 + } + } + }, + "500italic": { + "familyName": "Piazzolla", + "fullName": "Piazzolla Medium Italic", + "postscriptName": "Piazzolla-MediumItalic", + "category": "serif", + "capHeight": 644, + "ascent": 1110, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 732 + } + } + }, + "300italic": { + "familyName": "Piazzolla", + "fullName": "Piazzolla Light Italic", + "postscriptName": "Piazzolla-LightItalic", + "category": "serif", + "capHeight": 644, + "ascent": 1110, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 424, + "subsets": { + "latin": { + "xWidthAvg": 424 + }, + "thai": { + "xWidthAvg": 736 + } + } + }, + "200italic": { + "familyName": "Piazzolla", + "fullName": "Piazzolla ExtraLight Italic", + "postscriptName": "Piazzolla-ExtraLightItalic", + "category": "serif", + "capHeight": 644, + "ascent": 1110, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 731 + } + } + }, + "100italic": { + "familyName": "Piazzolla", + "fullName": "Piazzolla Thin Italic", + "postscriptName": "Piazzolla-ThinItalic", + "category": "serif", + "capHeight": 644, + "ascent": 1110, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 420, + "subsets": { + "latin": { + "xWidthAvg": 420 + }, + "thai": { + "xWidthAvg": 726 + } + } + } + } + }, + "piedra": { + "familyName": "Piedra", + "fullName": "Piedra Regular", + "postscriptName": "Piedra-Regular", + "category": "display", + "capHeight": 655, + "ascent": 973, + "descent": -328, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 437, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 230 + } + }, + "variants": { + "regular": { + "familyName": "Piedra", + "fullName": "Piedra Regular", + "postscriptName": "Piedra-Regular", + "category": "display", + "capHeight": 655, + "ascent": 973, + "descent": -328, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 437, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 230 + } + } + } + } + }, + "pinyonScript": { + "familyName": "Pinyon Script", + "fullName": "Pinyon Script Regular", + "postscriptName": "PinyonScript-Regular", + "category": "handwriting", + "capHeight": 1388, + "ascent": 1768, + "descent": -787, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 760, + "xWidthAvg": 731, + "subsets": { + "latin": { + "xWidthAvg": 731 + }, + "thai": { + "xWidthAvg": 2116 + } + }, + "variants": { + "regular": { + "familyName": "Pinyon Script", + "fullName": "Pinyon Script Regular", + "postscriptName": "PinyonScript-Regular", + "category": "handwriting", + "capHeight": 1388, + "ascent": 1768, + "descent": -787, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 760, + "xWidthAvg": 731, + "subsets": { + "latin": { + "xWidthAvg": 731 + }, + "thai": { + "xWidthAvg": 2116 + } + } + } + } + }, + "pirataOne": { + "familyName": "Pirata One", + "fullName": "Pirata One", + "postscriptName": "PirataOne-Regular", + "category": "display", + "capHeight": 793, + "ascent": 1006, + "descent": -279, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 594, + "xWidthAvg": 351, + "subsets": { + "latin": { + "xWidthAvg": 351 + }, + "thai": { + "xWidthAvg": 220 + } + }, + "variants": { + "regular": { + "familyName": "Pirata One", + "fullName": "Pirata One", + "postscriptName": "PirataOne-Regular", + "category": "display", + "capHeight": 793, + "ascent": 1006, + "descent": -279, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 594, + "xWidthAvg": 351, + "subsets": { + "latin": { + "xWidthAvg": 351 + }, + "thai": { + "xWidthAvg": 220 + } + } + } + } + }, + "pixelifySans": { + "familyName": "Pixelify Sans", + "fullName": "Pixelify Sans Regular", + "postscriptName": "PixelifySans-Regular", + "category": "display", + "capHeight": 700, + "ascent": 920, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 701 + } + }, + "variants": { + "500": { + "familyName": "Pixelify Sans", + "fullName": "Pixelify Sans Medium", + "postscriptName": "PixelifySans-Medium", + "category": "display", + "capHeight": 700, + "ascent": 920, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 456, + "xWidthAvg": 507, + "subsets": { + "latin": { + "xWidthAvg": 507 + }, + "thai": { + "xWidthAvg": 710 + } + } + }, + "600": { + "familyName": "Pixelify Sans", + "fullName": "Pixelify Sans SemiBold", + "postscriptName": "PixelifySans-SemiBold", + "category": "display", + "capHeight": 700, + "ascent": 920, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 461, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 718 + } + } + }, + "700": { + "familyName": "Pixelify Sans", + "fullName": "Pixelify Sans Bold", + "postscriptName": "PixelifySans-Bold", + "category": "display", + "capHeight": 700, + "ascent": 920, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 467, + "xWidthAvg": 517, + "subsets": { + "latin": { + "xWidthAvg": 517 + }, + "thai": { + "xWidthAvg": 727 + } + } + }, + "regular": { + "familyName": "Pixelify Sans", + "fullName": "Pixelify Sans Regular", + "postscriptName": "PixelifySans-Regular", + "category": "display", + "capHeight": 700, + "ascent": 920, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 701 + } + } + } + } + }, + "plaster": { + "familyName": "Plaster", + "fullName": "Plaster", + "postscriptName": "Plaster-Regular", + "category": "display", + "capHeight": 1361, + "ascent": 2000, + "descent": -560, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1020, + "xWidthAvg": 1411, + "subsets": { + "latin": { + "xWidthAvg": 1411 + }, + "thai": { + "xWidthAvg": 1876 + } + }, + "variants": { + "regular": { + "familyName": "Plaster", + "fullName": "Plaster", + "postscriptName": "Plaster-Regular", + "category": "display", + "capHeight": 1361, + "ascent": 2000, + "descent": -560, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1020, + "xWidthAvg": 1411, + "subsets": { + "latin": { + "xWidthAvg": 1411 + }, + "thai": { + "xWidthAvg": 1876 + } + } + } + } + }, + "platypi": { + "familyName": "Platypi", + "fullName": "Platypi Regular", + "postscriptName": "Platypi-Regular", + "category": "serif", + "capHeight": 690, + "ascent": 1125, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 606 + } + }, + "variants": { + "300": { + "familyName": "Platypi", + "fullName": "Platypi Light", + "postscriptName": "Platypi-Light", + "category": "serif", + "capHeight": 690, + "ascent": 1125, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 603 + } + } + }, + "500": { + "familyName": "Platypi", + "fullName": "Platypi Medium", + "postscriptName": "Platypi-Medium", + "category": "serif", + "capHeight": 690, + "ascent": 1125, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 608 + } + } + }, + "600": { + "familyName": "Platypi", + "fullName": "Platypi SemiBold", + "postscriptName": "Platypi-SemiBold", + "category": "serif", + "capHeight": 690, + "ascent": 1125, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 513, + "subsets": { + "latin": { + "xWidthAvg": 513 + }, + "thai": { + "xWidthAvg": 611 + } + } + }, + "700": { + "familyName": "Platypi", + "fullName": "Platypi Bold", + "postscriptName": "Platypi-Bold", + "category": "serif", + "capHeight": 690, + "ascent": 1125, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 523, + "subsets": { + "latin": { + "xWidthAvg": 523 + }, + "thai": { + "xWidthAvg": 614 + } + } + }, + "800": { + "familyName": "Platypi", + "fullName": "Platypi ExtraBold", + "postscriptName": "Platypi-ExtraBold", + "category": "serif", + "capHeight": 690, + "ascent": 1125, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 617 + } + } + }, + "regular": { + "familyName": "Platypi", + "fullName": "Platypi Regular", + "postscriptName": "Platypi-Regular", + "category": "serif", + "capHeight": 690, + "ascent": 1125, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 606 + } + } + }, + "italic": { + "familyName": "Platypi", + "fullName": "Platypi Italic", + "postscriptName": "Platypi-Italic", + "category": "serif", + "capHeight": 690, + "ascent": 1125, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 744 + } + } + }, + "800italic": { + "familyName": "Platypi", + "fullName": "Platypi ExtraBold Italic", + "postscriptName": "Platypi-ExtraBoldItalic", + "category": "serif", + "capHeight": 690, + "ascent": 1125, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 515, + "subsets": { + "latin": { + "xWidthAvg": 515 + }, + "thai": { + "xWidthAvg": 765 + } + } + }, + "700italic": { + "familyName": "Platypi", + "fullName": "Platypi Bold Italic", + "postscriptName": "Platypi-BoldItalic", + "category": "serif", + "capHeight": 690, + "ascent": 1125, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 760 + } + } + }, + "600italic": { + "familyName": "Platypi", + "fullName": "Platypi SemiBold Italic", + "postscriptName": "Platypi-SemiBoldItalic", + "category": "serif", + "capHeight": 690, + "ascent": 1125, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 755 + } + } + }, + "500italic": { + "familyName": "Platypi", + "fullName": "Platypi Medium Italic", + "postscriptName": "Platypi-MediumItalic", + "category": "serif", + "capHeight": 690, + "ascent": 1125, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 476, + "subsets": { + "latin": { + "xWidthAvg": 476 + }, + "thai": { + "xWidthAvg": 749 + } + } + }, + "300italic": { + "familyName": "Platypi", + "fullName": "Platypi Light Italic", + "postscriptName": "Platypi-LightItalic", + "category": "serif", + "capHeight": 690, + "ascent": 1125, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 740 + } + } + } + } + }, + "play": { + "familyName": "Play", + "fullName": "Play Regular", + "postscriptName": "Play-Regular", + "category": "sans-serif", + "capHeight": 649, + "ascent": 937, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 260 + } + }, + "variants": { + "700": { + "familyName": "Play", + "fullName": "Play Bold", + "postscriptName": "Play-Bold", + "category": "sans-serif", + "capHeight": 649, + "ascent": 937, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 260 + } + } + }, + "regular": { + "familyName": "Play", + "fullName": "Play Regular", + "postscriptName": "Play-Regular", + "category": "sans-serif", + "capHeight": 649, + "ascent": 937, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 260 + } + } + } + } + }, + "playball": { + "familyName": "Playball", + "fullName": "Playball Regular", + "postscriptName": "Playball-Regular", + "category": "display", + "capHeight": 706, + "ascent": 950, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 403, + "xWidthAvg": 382, + "subsets": { + "latin": { + "xWidthAvg": 382 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Playball", + "fullName": "Playball Regular", + "postscriptName": "Playball-Regular", + "category": "display", + "capHeight": 706, + "ascent": 950, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 403, + "xWidthAvg": 382, + "subsets": { + "latin": { + "xWidthAvg": 382 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "playfair": { + "familyName": "Playfair", + "fullName": "Playfair Regular", + "postscriptName": "Playfair-Regular", + "category": "serif", + "capHeight": 708, + "ascent": 1098, + "descent": -390, + "lineGap": 0, + "unitsPerEm": 1240, + "xHeight": 514, + "xWidthAvg": 535, + "subsets": { + "latin": { + "xWidthAvg": 535 + }, + "thai": { + "xWidthAvg": 598 + } + }, + "variants": { + "300": { + "familyName": "Playfair", + "fullName": "Playfair Light", + "postscriptName": "Playfair-Light", + "category": "serif", + "capHeight": 708, + "ascent": 1098, + "descent": -390, + "lineGap": 0, + "unitsPerEm": 1240, + "xHeight": 514, + "xWidthAvg": 536, + "subsets": { + "latin": { + "xWidthAvg": 536 + }, + "thai": { + "xWidthAvg": 598 + } + } + }, + "500": { + "familyName": "Playfair", + "fullName": "Playfair Medium", + "postscriptName": "Playfair-Medium", + "category": "serif", + "capHeight": 708, + "ascent": 1098, + "descent": -390, + "lineGap": 0, + "unitsPerEm": 1240, + "xHeight": 515, + "xWidthAvg": 533, + "subsets": { + "latin": { + "xWidthAvg": 533 + }, + "thai": { + "xWidthAvg": 597 + } + } + }, + "600": { + "familyName": "Playfair", + "fullName": "Playfair SemiBold", + "postscriptName": "Playfair-SemiBold", + "category": "serif", + "capHeight": 708, + "ascent": 1098, + "descent": -390, + "lineGap": 0, + "unitsPerEm": 1240, + "xHeight": 516, + "xWidthAvg": 531, + "subsets": { + "latin": { + "xWidthAvg": 531 + }, + "thai": { + "xWidthAvg": 597 + } + } + }, + "700": { + "familyName": "Playfair", + "fullName": "Playfair Bold", + "postscriptName": "Playfair-Bold", + "category": "serif", + "capHeight": 708, + "ascent": 1098, + "descent": -390, + "lineGap": 0, + "unitsPerEm": 1240, + "xHeight": 517, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 597 + } + } + }, + "800": { + "familyName": "Playfair", + "fullName": "Playfair ExtraBold", + "postscriptName": "Playfair-ExtraBold", + "category": "serif", + "capHeight": 708, + "ascent": 1098, + "descent": -390, + "lineGap": 0, + "unitsPerEm": 1240, + "xHeight": 518, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 596 + } + } + }, + "900": { + "familyName": "Playfair", + "fullName": "Playfair Black", + "postscriptName": "Playfair-Black", + "category": "serif", + "capHeight": 708, + "ascent": 1098, + "descent": -390, + "lineGap": 0, + "unitsPerEm": 1240, + "xHeight": 519, + "xWidthAvg": 521, + "subsets": { + "latin": { + "xWidthAvg": 521 + }, + "thai": { + "xWidthAvg": 596 + } + } + }, + "regular": { + "familyName": "Playfair", + "fullName": "Playfair Regular", + "postscriptName": "Playfair-Regular", + "category": "serif", + "capHeight": 708, + "ascent": 1098, + "descent": -390, + "lineGap": 0, + "unitsPerEm": 1240, + "xHeight": 514, + "xWidthAvg": 535, + "subsets": { + "latin": { + "xWidthAvg": 535 + }, + "thai": { + "xWidthAvg": 598 + } + } + }, + "italic": { + "familyName": "Playfair", + "fullName": "Playfair Italic", + "postscriptName": "Playfair-Italic", + "category": "serif", + "capHeight": 708, + "ascent": 1098, + "descent": -390, + "lineGap": 0, + "unitsPerEm": 1240, + "xHeight": 514, + "xWidthAvg": 515, + "subsets": { + "latin": { + "xWidthAvg": 515 + }, + "thai": { + "xWidthAvg": 562 + } + } + }, + "900italic": { + "familyName": "Playfair", + "fullName": "Playfair Black Italic", + "postscriptName": "Playfair-BlackItalic", + "category": "serif", + "capHeight": 708, + "ascent": 1098, + "descent": -390, + "lineGap": 0, + "unitsPerEm": 1240, + "xHeight": 519, + "xWidthAvg": 571, + "subsets": { + "latin": { + "xWidthAvg": 571 + }, + "thai": { + "xWidthAvg": 562 + } + } + }, + "800italic": { + "familyName": "Playfair", + "fullName": "Playfair ExtraBold Italic", + "postscriptName": "Playfair-ExtraBoldItalic", + "category": "serif", + "capHeight": 708, + "ascent": 1098, + "descent": -390, + "lineGap": 0, + "unitsPerEm": 1240, + "xHeight": 518, + "xWidthAvg": 555, + "subsets": { + "latin": { + "xWidthAvg": 555 + }, + "thai": { + "xWidthAvg": 562 + } + } + }, + "700italic": { + "familyName": "Playfair", + "fullName": "Playfair Bold Italic", + "postscriptName": "Playfair-BoldItalic", + "category": "serif", + "capHeight": 708, + "ascent": 1098, + "descent": -390, + "lineGap": 0, + "unitsPerEm": 1240, + "xHeight": 517, + "xWidthAvg": 543, + "subsets": { + "latin": { + "xWidthAvg": 543 + }, + "thai": { + "xWidthAvg": 562 + } + } + }, + "600italic": { + "familyName": "Playfair", + "fullName": "Playfair SemiBold Italic", + "postscriptName": "Playfair-SemiBoldItalic", + "category": "serif", + "capHeight": 708, + "ascent": 1098, + "descent": -390, + "lineGap": 0, + "unitsPerEm": 1240, + "xHeight": 516, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 562 + } + } + }, + "500italic": { + "familyName": "Playfair", + "fullName": "Playfair Medium Italic", + "postscriptName": "Playfair-MediumItalic", + "category": "serif", + "capHeight": 708, + "ascent": 1098, + "descent": -390, + "lineGap": 0, + "unitsPerEm": 1240, + "xHeight": 515, + "xWidthAvg": 523, + "subsets": { + "latin": { + "xWidthAvg": 523 + }, + "thai": { + "xWidthAvg": 562 + } + } + }, + "300italic": { + "familyName": "Playfair", + "fullName": "Playfair Light Italic", + "postscriptName": "Playfair-LightItalic", + "category": "serif", + "capHeight": 708, + "ascent": 1098, + "descent": -390, + "lineGap": 0, + "unitsPerEm": 1240, + "xHeight": 514, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 562 + } + } + } + } + }, + "playfairDisplay": { + "familyName": "Playfair Display", + "fullName": "Playfair Display Regular", + "postscriptName": "PlayfairDisplay-Regular", + "category": "serif", + "capHeight": 708, + "ascent": 1082, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 562 + } + }, + "variants": { + "500": { + "familyName": "Playfair Display", + "fullName": "Playfair Display Medium", + "postscriptName": "PlayfairDisplay-Medium", + "category": "serif", + "capHeight": 708, + "ascent": 1082, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 562 + } + } + }, + "600": { + "familyName": "Playfair Display", + "fullName": "Playfair Display SemiBold", + "postscriptName": "PlayfairDisplay-SemiBold", + "category": "serif", + "capHeight": 708, + "ascent": 1082, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 562 + } + } + }, + "700": { + "familyName": "Playfair Display", + "fullName": "Playfair Display Bold", + "postscriptName": "PlayfairDisplay-Bold", + "category": "serif", + "capHeight": 708, + "ascent": 1082, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 562 + } + } + }, + "800": { + "familyName": "Playfair Display", + "fullName": "Playfair Display ExtraBold", + "postscriptName": "PlayfairDisplay-ExtraBold", + "category": "serif", + "capHeight": 708, + "ascent": 1082, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 562 + } + } + }, + "900": { + "familyName": "Playfair Display", + "fullName": "Playfair Display Black", + "postscriptName": "PlayfairDisplay-Black", + "category": "serif", + "capHeight": 708, + "ascent": 1082, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 562 + } + } + }, + "regular": { + "familyName": "Playfair Display", + "fullName": "Playfair Display Regular", + "postscriptName": "PlayfairDisplay-Regular", + "category": "serif", + "capHeight": 708, + "ascent": 1082, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 562 + } + } + }, + "italic": { + "familyName": "Playfair Display", + "fullName": "Playfair Display Italic", + "postscriptName": "PlayfairDisplay-Italic", + "category": "serif", + "capHeight": 708, + "ascent": 1082, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 562 + } + } + }, + "900italic": { + "familyName": "Playfair Display", + "fullName": "Playfair Display Black Italic", + "postscriptName": "PlayfairDisplay-BlackItalic", + "category": "serif", + "capHeight": 708, + "ascent": 1082, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 562 + } + } + }, + "800italic": { + "familyName": "Playfair Display", + "fullName": "Playfair Display ExtraBold Italic", + "postscriptName": "PlayfairDisplay-ExtraBoldItalic", + "category": "serif", + "capHeight": 708, + "ascent": 1082, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 562 + } + } + }, + "700italic": { + "familyName": "Playfair Display", + "fullName": "Playfair Display Bold Italic", + "postscriptName": "PlayfairDisplay-BoldItalic", + "category": "serif", + "capHeight": 708, + "ascent": 1082, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 562 + } + } + }, + "600italic": { + "familyName": "Playfair Display", + "fullName": "Playfair Display SemiBold Italic", + "postscriptName": "PlayfairDisplay-SemiBoldItalic", + "category": "serif", + "capHeight": 708, + "ascent": 1082, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 562 + } + } + }, + "500italic": { + "familyName": "Playfair Display", + "fullName": "Playfair Display Medium Italic", + "postscriptName": "PlayfairDisplay-MediumItalic", + "category": "serif", + "capHeight": 708, + "ascent": 1082, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 562 + } + } + } + } + }, + "playfairDisplaySC": { + "familyName": "Playfair Display SC", + "fullName": "Playfair Display SC Regular", + "postscriptName": "PlayfairDisplaySC-Regular", + "category": "serif", + "capHeight": 708, + "ascent": 1082, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 549, + "subsets": { + "latin": { + "xWidthAvg": 549 + }, + "thai": { + "xWidthAvg": 562 + } + }, + "variants": { + "700": { + "familyName": "Playfair Display SC", + "fullName": "Playfair Display SC Bold", + "postscriptName": "PlayfairDisplaySC-Bold", + "category": "serif", + "capHeight": 708, + "ascent": 1082, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 569, + "subsets": { + "latin": { + "xWidthAvg": 569 + }, + "thai": { + "xWidthAvg": 562 + } + } + }, + "900": { + "familyName": "Playfair Display SC", + "fullName": "Playfair Display SC Black", + "postscriptName": "PlayfairDisplaySC-Black", + "category": "serif", + "capHeight": 708, + "ascent": 1082, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 583, + "subsets": { + "latin": { + "xWidthAvg": 583 + }, + "thai": { + "xWidthAvg": 562 + } + } + }, + "regular": { + "familyName": "Playfair Display SC", + "fullName": "Playfair Display SC Regular", + "postscriptName": "PlayfairDisplaySC-Regular", + "category": "serif", + "capHeight": 708, + "ascent": 1082, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 549, + "subsets": { + "latin": { + "xWidthAvg": 549 + }, + "thai": { + "xWidthAvg": 562 + } + } + }, + "italic": { + "familyName": "Playfair Display SC", + "fullName": "Playfair Display SC Italic", + "postscriptName": "PlayfairDisplaySC-Italic", + "category": "serif", + "capHeight": 708, + "ascent": 1082, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 570, + "subsets": { + "latin": { + "xWidthAvg": 570 + }, + "thai": { + "xWidthAvg": 562 + } + } + }, + "900italic": { + "familyName": "Playfair Display SC", + "fullName": "Playfair Display SC Black Italic", + "postscriptName": "PlayfairDisplaySC-BlackItalic", + "category": "serif", + "capHeight": 708, + "ascent": 1082, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 625, + "subsets": { + "latin": { + "xWidthAvg": 625 + }, + "thai": { + "xWidthAvg": 562 + } + } + }, + "700italic": { + "familyName": "Playfair Display SC", + "fullName": "Playfair Display SC Bold Italic", + "postscriptName": "PlayfairDisplaySC-BoldItalic", + "category": "serif", + "capHeight": 708, + "ascent": 1082, + "descent": -251, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 603, + "subsets": { + "latin": { + "xWidthAvg": 603 + }, + "thai": { + "xWidthAvg": 562 + } + } + } + } + }, + "playpenSans": { + "familyName": "Playpen Sans", + "fullName": "Playpen Sans Regular", + "postscriptName": "PlaypenSans-Regular", + "category": "handwriting", + "capHeight": 764, + "ascent": 1170, + "descent": -340, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 537, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 683 + } + }, + "variants": { + "100": { + "familyName": "Playpen Sans", + "fullName": "Playpen Sans Thin", + "postscriptName": "PlaypenSans-Thin", + "category": "handwriting", + "capHeight": 764, + "ascent": 1170, + "descent": -340, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 694 + } + } + }, + "200": { + "familyName": "Playpen Sans", + "fullName": "Playpen Sans ExtraLight", + "postscriptName": "PlaypenSans-ExtraLight", + "category": "handwriting", + "capHeight": 764, + "ascent": 1170, + "descent": -340, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 491, + "subsets": { + "latin": { + "xWidthAvg": 491 + }, + "thai": { + "xWidthAvg": 690 + } + } + }, + "300": { + "familyName": "Playpen Sans", + "fullName": "Playpen Sans Light", + "postscriptName": "PlaypenSans-Light", + "category": "handwriting", + "capHeight": 764, + "ascent": 1170, + "descent": -340, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 533, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 687 + } + } + }, + "500": { + "familyName": "Playpen Sans", + "fullName": "Playpen Sans Medium", + "postscriptName": "PlaypenSans-Medium", + "category": "handwriting", + "capHeight": 764, + "ascent": 1170, + "descent": -340, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 539, + "xWidthAvg": 513, + "subsets": { + "latin": { + "xWidthAvg": 513 + }, + "thai": { + "xWidthAvg": 682 + } + } + }, + "600": { + "familyName": "Playpen Sans", + "fullName": "Playpen Sans SemiBold", + "postscriptName": "PlaypenSans-SemiBold", + "category": "handwriting", + "capHeight": 764, + "ascent": 1170, + "descent": -340, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 542, + "xWidthAvg": 520, + "subsets": { + "latin": { + "xWidthAvg": 520 + }, + "thai": { + "xWidthAvg": 681 + } + } + }, + "700": { + "familyName": "Playpen Sans", + "fullName": "Playpen Sans Bold", + "postscriptName": "PlaypenSans-Bold", + "category": "handwriting", + "capHeight": 764, + "ascent": 1170, + "descent": -340, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 679 + } + } + }, + "800": { + "familyName": "Playpen Sans", + "fullName": "Playpen Sans ExtraBold", + "postscriptName": "PlaypenSans-ExtraBold", + "category": "handwriting", + "capHeight": 764, + "ascent": 1170, + "descent": -340, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 533, + "subsets": { + "latin": { + "xWidthAvg": 533 + }, + "thai": { + "xWidthAvg": 678 + } + } + }, + "regular": { + "familyName": "Playpen Sans", + "fullName": "Playpen Sans Regular", + "postscriptName": "PlaypenSans-Regular", + "category": "handwriting", + "capHeight": 764, + "ascent": 1170, + "descent": -340, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 537, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 683 + } + } + } + } + }, + "playwriteAR": { + "familyName": "Playwrite AR", + "fullName": "Playwrite AR Regular", + "postscriptName": "PlaywriteAR-Regular", + "category": "handwriting", + "capHeight": 1065, + "ascent": 1508, + "descent": -571, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 529, + "subsets": { + "latin": { + "xWidthAvg": 529 + }, + "thai": { + "xWidthAvg": 983 + } + }, + "variants": { + "100": { + "familyName": "Playwrite AR", + "fullName": "Playwrite AR Thin", + "postscriptName": "PlaywriteAR-Thin", + "category": "handwriting", + "capHeight": 1065, + "ascent": 1508, + "descent": -571, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 529, + "subsets": { + "latin": { + "xWidthAvg": 529 + }, + "thai": { + "xWidthAvg": 983 + } + } + }, + "200": { + "familyName": "Playwrite AR", + "fullName": "Playwrite AR ExtraLight", + "postscriptName": "PlaywriteAR-ExtraLight", + "category": "handwriting", + "capHeight": 1065, + "ascent": 1508, + "descent": -571, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 529, + "subsets": { + "latin": { + "xWidthAvg": 529 + }, + "thai": { + "xWidthAvg": 983 + } + } + }, + "300": { + "familyName": "Playwrite AR", + "fullName": "Playwrite AR Light", + "postscriptName": "PlaywriteAR-Light", + "category": "handwriting", + "capHeight": 1065, + "ascent": 1508, + "descent": -571, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 529, + "subsets": { + "latin": { + "xWidthAvg": 529 + }, + "thai": { + "xWidthAvg": 983 + } + } + }, + "regular": { + "familyName": "Playwrite AR", + "fullName": "Playwrite AR Regular", + "postscriptName": "PlaywriteAR-Regular", + "category": "handwriting", + "capHeight": 1065, + "ascent": 1508, + "descent": -571, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 529, + "subsets": { + "latin": { + "xWidthAvg": 529 + }, + "thai": { + "xWidthAvg": 983 + } + } + } + } + }, + "playwriteAT": { + "familyName": "Playwrite AT", + "fullName": "Playwrite AT Regular", + "postscriptName": "PlaywriteAT-Regular", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 845 + } + }, + "variants": { + "100": { + "familyName": "Playwrite AT", + "fullName": "Playwrite AT Thin", + "postscriptName": "PlaywriteAT-Thin", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 531, + "subsets": { + "latin": { + "xWidthAvg": 531 + }, + "thai": { + "xWidthAvg": 845 + } + } + }, + "200": { + "familyName": "Playwrite AT", + "fullName": "Playwrite AT ExtraLight", + "postscriptName": "PlaywriteAT-ExtraLight", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 531, + "subsets": { + "latin": { + "xWidthAvg": 531 + }, + "thai": { + "xWidthAvg": 845 + } + } + }, + "300": { + "familyName": "Playwrite AT", + "fullName": "Playwrite AT Light", + "postscriptName": "PlaywriteAT-Light", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 531, + "subsets": { + "latin": { + "xWidthAvg": 531 + }, + "thai": { + "xWidthAvg": 845 + } + } + }, + "regular": { + "familyName": "Playwrite AT", + "fullName": "Playwrite AT Regular", + "postscriptName": "PlaywriteAT-Regular", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 845 + } + } + }, + "italic": { + "familyName": "Playwrite AT", + "fullName": "Playwrite AT Italic", + "postscriptName": "PlaywriteAT-Italic", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 844 + } + } + }, + "300italic": { + "familyName": "Playwrite AT", + "fullName": "Playwrite AT Light Italic", + "postscriptName": "PlaywriteAT-LightItalic", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 531, + "subsets": { + "latin": { + "xWidthAvg": 531 + }, + "thai": { + "xWidthAvg": 844 + } + } + }, + "200italic": { + "familyName": "Playwrite AT", + "fullName": "Playwrite AT ExtraLight Italic", + "postscriptName": "PlaywriteAT-ExtraLightItalic", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 531, + "subsets": { + "latin": { + "xWidthAvg": 531 + }, + "thai": { + "xWidthAvg": 845 + } + } + }, + "100italic": { + "familyName": "Playwrite AT", + "fullName": "Playwrite AT Thin Italic", + "postscriptName": "PlaywriteAT-ThinItalic", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 531, + "subsets": { + "latin": { + "xWidthAvg": 531 + }, + "thai": { + "xWidthAvg": 845 + } + } + } + } + }, + "playwriteAUNSW": { + "familyName": "Playwrite AU NSW", + "fullName": "Playwrite AU NSW Regular", + "postscriptName": "PlaywriteAUNSW-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 508, + "subsets": { + "latin": { + "xWidthAvg": 508 + }, + "thai": { + "xWidthAvg": 935 + } + }, + "variants": { + "100": { + "familyName": "Playwrite AU NSW", + "fullName": "Playwrite AU NSW Thin", + "postscriptName": "PlaywriteAUNSW-Thin", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 507, + "subsets": { + "latin": { + "xWidthAvg": 507 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "200": { + "familyName": "Playwrite AU NSW", + "fullName": "Playwrite AU NSW ExtraLight", + "postscriptName": "PlaywriteAUNSW-ExtraLight", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 508, + "subsets": { + "latin": { + "xWidthAvg": 508 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "300": { + "familyName": "Playwrite AU NSW", + "fullName": "Playwrite AU NSW Light", + "postscriptName": "PlaywriteAUNSW-Light", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 508, + "subsets": { + "latin": { + "xWidthAvg": 508 + }, + "thai": { + "xWidthAvg": 935 + } + } + }, + "regular": { + "familyName": "Playwrite AU NSW", + "fullName": "Playwrite AU NSW Regular", + "postscriptName": "PlaywriteAUNSW-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 508, + "subsets": { + "latin": { + "xWidthAvg": 508 + }, + "thai": { + "xWidthAvg": 935 + } + } + } + } + }, + "playwriteAUQLD": { + "familyName": "Playwrite AU QLD", + "fullName": "Playwrite AU QLD Regular", + "postscriptName": "PlaywriteAUQLD-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 935 + } + }, + "variants": { + "100": { + "familyName": "Playwrite AU QLD", + "fullName": "Playwrite AU QLD Thin", + "postscriptName": "PlaywriteAUQLD-Thin", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 518, + "subsets": { + "latin": { + "xWidthAvg": 518 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "200": { + "familyName": "Playwrite AU QLD", + "fullName": "Playwrite AU QLD ExtraLight", + "postscriptName": "PlaywriteAUQLD-ExtraLight", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 518, + "subsets": { + "latin": { + "xWidthAvg": 518 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "300": { + "familyName": "Playwrite AU QLD", + "fullName": "Playwrite AU QLD Light", + "postscriptName": "PlaywriteAUQLD-Light", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 935 + } + } + }, + "regular": { + "familyName": "Playwrite AU QLD", + "fullName": "Playwrite AU QLD Regular", + "postscriptName": "PlaywriteAUQLD-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 935 + } + } + } + } + }, + "playwriteAUSA": { + "familyName": "Playwrite AU SA", + "fullName": "Playwrite AU SA Regular", + "postscriptName": "PlaywriteAUSA-Regular", + "category": "handwriting", + "capHeight": 988, + "ascent": 1413, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 509, + "subsets": { + "latin": { + "xWidthAvg": 509 + }, + "thai": { + "xWidthAvg": 927 + } + }, + "variants": { + "100": { + "familyName": "Playwrite AU SA", + "fullName": "Playwrite AU SA Thin", + "postscriptName": "PlaywriteAUSA-Thin", + "category": "handwriting", + "capHeight": 988, + "ascent": 1413, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 508, + "subsets": { + "latin": { + "xWidthAvg": 508 + }, + "thai": { + "xWidthAvg": 928 + } + } + }, + "200": { + "familyName": "Playwrite AU SA", + "fullName": "Playwrite AU SA ExtraLight", + "postscriptName": "PlaywriteAUSA-ExtraLight", + "category": "handwriting", + "capHeight": 988, + "ascent": 1413, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 508, + "subsets": { + "latin": { + "xWidthAvg": 508 + }, + "thai": { + "xWidthAvg": 928 + } + } + }, + "300": { + "familyName": "Playwrite AU SA", + "fullName": "Playwrite AU SA Light", + "postscriptName": "PlaywriteAUSA-Light", + "category": "handwriting", + "capHeight": 988, + "ascent": 1413, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 509, + "subsets": { + "latin": { + "xWidthAvg": 509 + }, + "thai": { + "xWidthAvg": 927 + } + } + }, + "regular": { + "familyName": "Playwrite AU SA", + "fullName": "Playwrite AU SA Regular", + "postscriptName": "PlaywriteAUSA-Regular", + "category": "handwriting", + "capHeight": 988, + "ascent": 1413, + "descent": -492, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 509, + "subsets": { + "latin": { + "xWidthAvg": 509 + }, + "thai": { + "xWidthAvg": 927 + } + } + } + } + }, + "playwriteAUTAS": { + "familyName": "Playwrite AU TAS", + "fullName": "Playwrite AU TAS Regular", + "postscriptName": "PlaywriteAUTAS-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 507, + "subsets": { + "latin": { + "xWidthAvg": 507 + }, + "thai": { + "xWidthAvg": 935 + } + }, + "variants": { + "100": { + "familyName": "Playwrite AU TAS", + "fullName": "Playwrite AU TAS Thin", + "postscriptName": "PlaywriteAUTAS-Thin", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "200": { + "familyName": "Playwrite AU TAS", + "fullName": "Playwrite AU TAS ExtraLight", + "postscriptName": "PlaywriteAUTAS-ExtraLight", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "300": { + "familyName": "Playwrite AU TAS", + "fullName": "Playwrite AU TAS Light", + "postscriptName": "PlaywriteAUTAS-Light", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 507, + "subsets": { + "latin": { + "xWidthAvg": 507 + }, + "thai": { + "xWidthAvg": 935 + } + } + }, + "regular": { + "familyName": "Playwrite AU TAS", + "fullName": "Playwrite AU TAS Regular", + "postscriptName": "PlaywriteAUTAS-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 507, + "subsets": { + "latin": { + "xWidthAvg": 507 + }, + "thai": { + "xWidthAvg": 935 + } + } + } + } + }, + "playwriteAUVIC": { + "familyName": "Playwrite AU VIC", + "fullName": "Playwrite AU VIC Regular", + "postscriptName": "PlaywriteAUVIC-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 517, + "subsets": { + "latin": { + "xWidthAvg": 517 + }, + "thai": { + "xWidthAvg": 935 + } + }, + "variants": { + "100": { + "familyName": "Playwrite AU VIC", + "fullName": "Playwrite AU VIC Thin", + "postscriptName": "PlaywriteAUVIC-Thin", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 517, + "subsets": { + "latin": { + "xWidthAvg": 517 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "200": { + "familyName": "Playwrite AU VIC", + "fullName": "Playwrite AU VIC ExtraLight", + "postscriptName": "PlaywriteAUVIC-ExtraLight", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 517, + "subsets": { + "latin": { + "xWidthAvg": 517 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "300": { + "familyName": "Playwrite AU VIC", + "fullName": "Playwrite AU VIC Light", + "postscriptName": "PlaywriteAUVIC-Light", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 517, + "subsets": { + "latin": { + "xWidthAvg": 517 + }, + "thai": { + "xWidthAvg": 935 + } + } + }, + "regular": { + "familyName": "Playwrite AU VIC", + "fullName": "Playwrite AU VIC Regular", + "postscriptName": "PlaywriteAUVIC-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 517, + "subsets": { + "latin": { + "xWidthAvg": 517 + }, + "thai": { + "xWidthAvg": 935 + } + } + } + } + }, + "playwriteBEVLG": { + "familyName": "Playwrite BE VLG", + "fullName": "Playwrite BE VLG Regular", + "postscriptName": "PlaywriteBEVLG-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 935 + } + }, + "variants": { + "100": { + "familyName": "Playwrite BE VLG", + "fullName": "Playwrite BE VLG Thin", + "postscriptName": "PlaywriteBEVLG-Thin", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "200": { + "familyName": "Playwrite BE VLG", + "fullName": "Playwrite BE VLG ExtraLight", + "postscriptName": "PlaywriteBEVLG-ExtraLight", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "300": { + "familyName": "Playwrite BE VLG", + "fullName": "Playwrite BE VLG Light", + "postscriptName": "PlaywriteBEVLG-Light", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 935 + } + } + }, + "regular": { + "familyName": "Playwrite BE VLG", + "fullName": "Playwrite BE VLG Regular", + "postscriptName": "PlaywriteBEVLG-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 935 + } + } + } + } + }, + "playwriteBEWAL": { + "familyName": "Playwrite BE WAL", + "fullName": "Playwrite BE WAL Regular", + "postscriptName": "PlaywriteBEWAL-Regular", + "category": "handwriting", + "capHeight": 1405, + "ascent": 1924, + "descent": -922, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 546, + "subsets": { + "latin": { + "xWidthAvg": 546 + }, + "thai": { + "xWidthAvg": 1231 + } + }, + "variants": { + "100": { + "familyName": "Playwrite BE WAL", + "fullName": "Playwrite BE WAL Thin", + "postscriptName": "PlaywriteBEWAL-Thin", + "category": "handwriting", + "capHeight": 1405, + "ascent": 1924, + "descent": -922, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 545, + "subsets": { + "latin": { + "xWidthAvg": 545 + }, + "thai": { + "xWidthAvg": 1231 + } + } + }, + "200": { + "familyName": "Playwrite BE WAL", + "fullName": "Playwrite BE WAL ExtraLight", + "postscriptName": "PlaywriteBEWAL-ExtraLight", + "category": "handwriting", + "capHeight": 1405, + "ascent": 1924, + "descent": -922, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 546, + "subsets": { + "latin": { + "xWidthAvg": 546 + }, + "thai": { + "xWidthAvg": 1231 + } + } + }, + "300": { + "familyName": "Playwrite BE WAL", + "fullName": "Playwrite BE WAL Light", + "postscriptName": "PlaywriteBEWAL-Light", + "category": "handwriting", + "capHeight": 1405, + "ascent": 1924, + "descent": -922, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 546, + "subsets": { + "latin": { + "xWidthAvg": 546 + }, + "thai": { + "xWidthAvg": 1231 + } + } + }, + "regular": { + "familyName": "Playwrite BE WAL", + "fullName": "Playwrite BE WAL Regular", + "postscriptName": "PlaywriteBEWAL-Regular", + "category": "handwriting", + "capHeight": 1405, + "ascent": 1924, + "descent": -922, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 546, + "subsets": { + "latin": { + "xWidthAvg": 546 + }, + "thai": { + "xWidthAvg": 1231 + } + } + } + } + }, + "playwriteBR": { + "familyName": "Playwrite BR", + "fullName": "Playwrite BR Regular", + "postscriptName": "PlaywriteBR-Regular", + "category": "handwriting", + "capHeight": 1131, + "ascent": 1588, + "descent": -639, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 531, + "subsets": { + "latin": { + "xWidthAvg": 531 + }, + "thai": { + "xWidthAvg": 1031 + } + }, + "variants": { + "100": { + "familyName": "Playwrite BR", + "fullName": "Playwrite BR Thin", + "postscriptName": "PlaywriteBR-Thin", + "category": "handwriting", + "capHeight": 1131, + "ascent": 1588, + "descent": -639, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 531, + "subsets": { + "latin": { + "xWidthAvg": 531 + }, + "thai": { + "xWidthAvg": 1031 + } + } + }, + "200": { + "familyName": "Playwrite BR", + "fullName": "Playwrite BR ExtraLight", + "postscriptName": "PlaywriteBR-ExtraLight", + "category": "handwriting", + "capHeight": 1131, + "ascent": 1588, + "descent": -639, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 531, + "subsets": { + "latin": { + "xWidthAvg": 531 + }, + "thai": { + "xWidthAvg": 1031 + } + } + }, + "300": { + "familyName": "Playwrite BR", + "fullName": "Playwrite BR Light", + "postscriptName": "PlaywriteBR-Light", + "category": "handwriting", + "capHeight": 1131, + "ascent": 1588, + "descent": -639, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 531, + "subsets": { + "latin": { + "xWidthAvg": 531 + }, + "thai": { + "xWidthAvg": 1031 + } + } + }, + "regular": { + "familyName": "Playwrite BR", + "fullName": "Playwrite BR Regular", + "postscriptName": "PlaywriteBR-Regular", + "category": "handwriting", + "capHeight": 1131, + "ascent": 1588, + "descent": -639, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 531, + "subsets": { + "latin": { + "xWidthAvg": 531 + }, + "thai": { + "xWidthAvg": 1031 + } + } + } + } + }, + "playwriteCA": { + "familyName": "Playwrite CA", + "fullName": "Playwrite CA Regular", + "postscriptName": "PlaywriteCA-Regular", + "category": "handwriting", + "capHeight": 996, + "ascent": 1423, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 932 + } + }, + "variants": { + "100": { + "familyName": "Playwrite CA", + "fullName": "Playwrite CA Thin", + "postscriptName": "PlaywriteCA-Thin", + "category": "handwriting", + "capHeight": 996, + "ascent": 1423, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 933 + } + } + }, + "200": { + "familyName": "Playwrite CA", + "fullName": "Playwrite CA ExtraLight", + "postscriptName": "PlaywriteCA-ExtraLight", + "category": "handwriting", + "capHeight": 996, + "ascent": 1423, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 933 + } + } + }, + "300": { + "familyName": "Playwrite CA", + "fullName": "Playwrite CA Light", + "postscriptName": "PlaywriteCA-Light", + "category": "handwriting", + "capHeight": 996, + "ascent": 1423, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 932 + } + } + }, + "regular": { + "familyName": "Playwrite CA", + "fullName": "Playwrite CA Regular", + "postscriptName": "PlaywriteCA-Regular", + "category": "handwriting", + "capHeight": 996, + "ascent": 1423, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 932 + } + } + } + } + }, + "playwriteCL": { + "familyName": "Playwrite CL", + "fullName": "Playwrite CL Regular", + "postscriptName": "PlaywriteCL-Regular", + "category": "handwriting", + "capHeight": 1133, + "ascent": 1591, + "descent": -641, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 1033 + } + }, + "variants": { + "100": { + "familyName": "Playwrite CL", + "fullName": "Playwrite CL Thin", + "postscriptName": "PlaywriteCL-Thin", + "category": "handwriting", + "capHeight": 1133, + "ascent": 1591, + "descent": -641, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 1033 + } + } + }, + "200": { + "familyName": "Playwrite CL", + "fullName": "Playwrite CL ExtraLight", + "postscriptName": "PlaywriteCL-ExtraLight", + "category": "handwriting", + "capHeight": 1133, + "ascent": 1591, + "descent": -641, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 1033 + } + } + }, + "300": { + "familyName": "Playwrite CL", + "fullName": "Playwrite CL Light", + "postscriptName": "PlaywriteCL-Light", + "category": "handwriting", + "capHeight": 1133, + "ascent": 1591, + "descent": -641, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 1033 + } + } + }, + "regular": { + "familyName": "Playwrite CL", + "fullName": "Playwrite CL Regular", + "postscriptName": "PlaywriteCL-Regular", + "category": "handwriting", + "capHeight": 1133, + "ascent": 1591, + "descent": -641, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 1033 + } + } + } + } + }, + "playwriteCO": { + "familyName": "Playwrite CO", + "fullName": "Playwrite CO Regular", + "postscriptName": "PlaywriteCO-Regular", + "category": "handwriting", + "capHeight": 1020, + "ascent": 1452, + "descent": -525, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 950 + } + }, + "variants": { + "100": { + "familyName": "Playwrite CO", + "fullName": "Playwrite CO Thin", + "postscriptName": "PlaywriteCO-Thin", + "category": "handwriting", + "capHeight": 1020, + "ascent": 1452, + "descent": -525, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 526, + "subsets": { + "latin": { + "xWidthAvg": 526 + }, + "thai": { + "xWidthAvg": 951 + } + } + }, + "200": { + "familyName": "Playwrite CO", + "fullName": "Playwrite CO ExtraLight", + "postscriptName": "PlaywriteCO-ExtraLight", + "category": "handwriting", + "capHeight": 1020, + "ascent": 1452, + "descent": -525, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 526, + "subsets": { + "latin": { + "xWidthAvg": 526 + }, + "thai": { + "xWidthAvg": 951 + } + } + }, + "300": { + "familyName": "Playwrite CO", + "fullName": "Playwrite CO Light", + "postscriptName": "PlaywriteCO-Light", + "category": "handwriting", + "capHeight": 1020, + "ascent": 1452, + "descent": -525, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 526, + "subsets": { + "latin": { + "xWidthAvg": 526 + }, + "thai": { + "xWidthAvg": 950 + } + } + }, + "regular": { + "familyName": "Playwrite CO", + "fullName": "Playwrite CO Regular", + "postscriptName": "PlaywriteCO-Regular", + "category": "handwriting", + "capHeight": 1020, + "ascent": 1452, + "descent": -525, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 950 + } + } + } + } + }, + "playwriteCU": { + "familyName": "Playwrite CU", + "fullName": "Playwrite CU Regular", + "postscriptName": "PlaywriteCU-Regular", + "category": "handwriting", + "capHeight": 1115, + "ascent": 1569, + "descent": -623, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 1019 + } + }, + "variants": { + "100": { + "familyName": "Playwrite CU", + "fullName": "Playwrite CU Thin", + "postscriptName": "PlaywriteCU-Thin", + "category": "handwriting", + "capHeight": 1115, + "ascent": 1569, + "descent": -623, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 1020 + } + } + }, + "200": { + "familyName": "Playwrite CU", + "fullName": "Playwrite CU ExtraLight", + "postscriptName": "PlaywriteCU-ExtraLight", + "category": "handwriting", + "capHeight": 1115, + "ascent": 1569, + "descent": -623, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 1020 + } + } + }, + "300": { + "familyName": "Playwrite CU", + "fullName": "Playwrite CU Light", + "postscriptName": "PlaywriteCU-Light", + "category": "handwriting", + "capHeight": 1115, + "ascent": 1569, + "descent": -623, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 1019 + } + } + }, + "regular": { + "familyName": "Playwrite CU", + "fullName": "Playwrite CU Regular", + "postscriptName": "PlaywriteCU-Regular", + "category": "handwriting", + "capHeight": 1115, + "ascent": 1569, + "descent": -623, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 1019 + } + } + } + } + }, + "playwriteCZ": { + "familyName": "Playwrite CZ", + "fullName": "Playwrite CZ Regular", + "postscriptName": "PlaywriteCZ-Regular", + "category": "handwriting", + "capHeight": 985, + "ascent": 1410, + "descent": -489, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 540, + "subsets": { + "latin": { + "xWidthAvg": 540 + }, + "thai": { + "xWidthAvg": 924 + } + }, + "variants": { + "100": { + "familyName": "Playwrite CZ", + "fullName": "Playwrite CZ Thin", + "postscriptName": "PlaywriteCZ-Thin", + "category": "handwriting", + "capHeight": 985, + "ascent": 1410, + "descent": -489, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 540, + "subsets": { + "latin": { + "xWidthAvg": 540 + }, + "thai": { + "xWidthAvg": 925 + } + } + }, + "200": { + "familyName": "Playwrite CZ", + "fullName": "Playwrite CZ ExtraLight", + "postscriptName": "PlaywriteCZ-ExtraLight", + "category": "handwriting", + "capHeight": 985, + "ascent": 1410, + "descent": -489, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 540, + "subsets": { + "latin": { + "xWidthAvg": 540 + }, + "thai": { + "xWidthAvg": 925 + } + } + }, + "300": { + "familyName": "Playwrite CZ", + "fullName": "Playwrite CZ Light", + "postscriptName": "PlaywriteCZ-Light", + "category": "handwriting", + "capHeight": 985, + "ascent": 1410, + "descent": -489, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 540, + "subsets": { + "latin": { + "xWidthAvg": 540 + }, + "thai": { + "xWidthAvg": 924 + } + } + }, + "regular": { + "familyName": "Playwrite CZ", + "fullName": "Playwrite CZ Regular", + "postscriptName": "PlaywriteCZ-Regular", + "category": "handwriting", + "capHeight": 985, + "ascent": 1410, + "descent": -489, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 540, + "subsets": { + "latin": { + "xWidthAvg": 540 + }, + "thai": { + "xWidthAvg": 924 + } + } + } + } + }, + "playwriteDEGrund": { + "familyName": "Playwrite DE Grund", + "fullName": "Playwrite DE Grund Regular", + "postscriptName": "PlaywriteDEGrund-Regular", + "category": "handwriting", + "capHeight": 920, + "ascent": 1330, + "descent": -421, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 878 + } + }, + "variants": { + "100": { + "familyName": "Playwrite DE Grund", + "fullName": "Playwrite DE Grund Thin", + "postscriptName": "PlaywriteDEGrund-Thin", + "category": "handwriting", + "capHeight": 920, + "ascent": 1330, + "descent": -421, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 878 + } + } + }, + "200": { + "familyName": "Playwrite DE Grund", + "fullName": "Playwrite DE Grund ExtraLight", + "postscriptName": "PlaywriteDEGrund-ExtraLight", + "category": "handwriting", + "capHeight": 920, + "ascent": 1330, + "descent": -421, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 878 + } + } + }, + "300": { + "familyName": "Playwrite DE Grund", + "fullName": "Playwrite DE Grund Light", + "postscriptName": "PlaywriteDEGrund-Light", + "category": "handwriting", + "capHeight": 920, + "ascent": 1330, + "descent": -421, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 878 + } + } + }, + "regular": { + "familyName": "Playwrite DE Grund", + "fullName": "Playwrite DE Grund Regular", + "postscriptName": "PlaywriteDEGrund-Regular", + "category": "handwriting", + "capHeight": 920, + "ascent": 1330, + "descent": -421, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 878 + } + } + } + } + }, + "playwriteDELA": { + "familyName": "Playwrite DE LA", + "fullName": "Playwrite DE LA Regular", + "postscriptName": "PlaywriteDELA-Regular", + "category": "handwriting", + "capHeight": 920, + "ascent": 1330, + "descent": -421, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 520, + "subsets": { + "latin": { + "xWidthAvg": 520 + }, + "thai": { + "xWidthAvg": 877 + } + }, + "variants": { + "100": { + "familyName": "Playwrite DE LA", + "fullName": "Playwrite DE LA Thin", + "postscriptName": "PlaywriteDELA-Thin", + "category": "handwriting", + "capHeight": 920, + "ascent": 1330, + "descent": -421, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 520, + "subsets": { + "latin": { + "xWidthAvg": 520 + }, + "thai": { + "xWidthAvg": 878 + } + } + }, + "200": { + "familyName": "Playwrite DE LA", + "fullName": "Playwrite DE LA ExtraLight", + "postscriptName": "PlaywriteDELA-ExtraLight", + "category": "handwriting", + "capHeight": 920, + "ascent": 1330, + "descent": -421, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 520, + "subsets": { + "latin": { + "xWidthAvg": 520 + }, + "thai": { + "xWidthAvg": 878 + } + } + }, + "300": { + "familyName": "Playwrite DE LA", + "fullName": "Playwrite DE LA Light", + "postscriptName": "PlaywriteDELA-Light", + "category": "handwriting", + "capHeight": 920, + "ascent": 1330, + "descent": -421, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 520, + "subsets": { + "latin": { + "xWidthAvg": 520 + }, + "thai": { + "xWidthAvg": 877 + } + } + }, + "regular": { + "familyName": "Playwrite DE LA", + "fullName": "Playwrite DE LA Regular", + "postscriptName": "PlaywriteDELA-Regular", + "category": "handwriting", + "capHeight": 920, + "ascent": 1330, + "descent": -421, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 520, + "subsets": { + "latin": { + "xWidthAvg": 520 + }, + "thai": { + "xWidthAvg": 877 + } + } + } + } + }, + "playwriteDESAS": { + "familyName": "Playwrite DE SAS", + "fullName": "Playwrite DE SAS Regular", + "postscriptName": "PlaywriteDESAS-Regular", + "category": "handwriting", + "capHeight": 888, + "ascent": 1291, + "descent": -388, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 854 + } + }, + "variants": { + "100": { + "familyName": "Playwrite DE SAS", + "fullName": "Playwrite DE SAS Thin", + "postscriptName": "PlaywriteDESAS-Thin", + "category": "handwriting", + "capHeight": 888, + "ascent": 1291, + "descent": -388, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 855 + } + } + }, + "200": { + "familyName": "Playwrite DE SAS", + "fullName": "Playwrite DE SAS ExtraLight", + "postscriptName": "PlaywriteDESAS-ExtraLight", + "category": "handwriting", + "capHeight": 888, + "ascent": 1291, + "descent": -388, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 855 + } + } + }, + "300": { + "familyName": "Playwrite DE SAS", + "fullName": "Playwrite DE SAS Light", + "postscriptName": "PlaywriteDESAS-Light", + "category": "handwriting", + "capHeight": 888, + "ascent": 1291, + "descent": -388, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 854 + } + } + }, + "regular": { + "familyName": "Playwrite DE SAS", + "fullName": "Playwrite DE SAS Regular", + "postscriptName": "PlaywriteDESAS-Regular", + "category": "handwriting", + "capHeight": 888, + "ascent": 1291, + "descent": -388, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 532, + "subsets": { + "latin": { + "xWidthAvg": 532 + }, + "thai": { + "xWidthAvg": 854 + } + } + } + } + }, + "playwriteDEVA": { + "familyName": "Playwrite DE VA", + "fullName": "Playwrite DE VA Regular", + "postscriptName": "PlaywriteDEVA-Regular", + "category": "handwriting", + "capHeight": 979, + "ascent": 1402, + "descent": -482, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 535, + "subsets": { + "latin": { + "xWidthAvg": 535 + }, + "thai": { + "xWidthAvg": 920 + } + }, + "variants": { + "100": { + "familyName": "Playwrite DE VA", + "fullName": "Playwrite DE VA Thin", + "postscriptName": "PlaywriteDEVA-Thin", + "category": "handwriting", + "capHeight": 979, + "ascent": 1402, + "descent": -482, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 534, + "subsets": { + "latin": { + "xWidthAvg": 534 + }, + "thai": { + "xWidthAvg": 920 + } + } + }, + "200": { + "familyName": "Playwrite DE VA", + "fullName": "Playwrite DE VA ExtraLight", + "postscriptName": "PlaywriteDEVA-ExtraLight", + "category": "handwriting", + "capHeight": 979, + "ascent": 1402, + "descent": -482, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 534, + "subsets": { + "latin": { + "xWidthAvg": 534 + }, + "thai": { + "xWidthAvg": 920 + } + } + }, + "300": { + "familyName": "Playwrite DE VA", + "fullName": "Playwrite DE VA Light", + "postscriptName": "PlaywriteDEVA-Light", + "category": "handwriting", + "capHeight": 979, + "ascent": 1402, + "descent": -482, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 534, + "subsets": { + "latin": { + "xWidthAvg": 534 + }, + "thai": { + "xWidthAvg": 920 + } + } + }, + "regular": { + "familyName": "Playwrite DE VA", + "fullName": "Playwrite DE VA Regular", + "postscriptName": "PlaywriteDEVA-Regular", + "category": "handwriting", + "capHeight": 979, + "ascent": 1402, + "descent": -482, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 535, + "subsets": { + "latin": { + "xWidthAvg": 535 + }, + "thai": { + "xWidthAvg": 920 + } + } + } + } + }, + "playwriteDKLoopet": { + "familyName": "Playwrite DK Loopet", + "fullName": "Playwrite DK Loopet Regular", + "postscriptName": "PlaywriteDKLoopet-Regular", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 844 + } + }, + "variants": { + "100": { + "familyName": "Playwrite DK Loopet", + "fullName": "Playwrite DK Loopet Thin", + "postscriptName": "PlaywriteDKLoopet-Thin", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 845 + } + } + }, + "200": { + "familyName": "Playwrite DK Loopet", + "fullName": "Playwrite DK Loopet ExtraLight", + "postscriptName": "PlaywriteDKLoopet-ExtraLight", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 845 + } + } + }, + "300": { + "familyName": "Playwrite DK Loopet", + "fullName": "Playwrite DK Loopet Light", + "postscriptName": "PlaywriteDKLoopet-Light", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 844 + } + } + }, + "regular": { + "familyName": "Playwrite DK Loopet", + "fullName": "Playwrite DK Loopet Regular", + "postscriptName": "PlaywriteDKLoopet-Regular", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 844 + } + } + } + } + }, + "playwriteDKUloopet": { + "familyName": "Playwrite DK Uloopet", + "fullName": "Playwrite DK Uloopet Regular", + "postscriptName": "PlaywriteDKUloopet-Regular", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 844 + } + }, + "variants": { + "100": { + "familyName": "Playwrite DK Uloopet", + "fullName": "Playwrite DK Uloopet Thin", + "postscriptName": "PlaywriteDKUloopet-Thin", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 497, + "subsets": { + "latin": { + "xWidthAvg": 497 + }, + "thai": { + "xWidthAvg": 845 + } + } + }, + "200": { + "familyName": "Playwrite DK Uloopet", + "fullName": "Playwrite DK Uloopet ExtraLight", + "postscriptName": "PlaywriteDKUloopet-ExtraLight", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 845 + } + } + }, + "300": { + "familyName": "Playwrite DK Uloopet", + "fullName": "Playwrite DK Uloopet Light", + "postscriptName": "PlaywriteDKUloopet-Light", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 844 + } + } + }, + "regular": { + "familyName": "Playwrite DK Uloopet", + "fullName": "Playwrite DK Uloopet Regular", + "postscriptName": "PlaywriteDKUloopet-Regular", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 844 + } + } + } + } + }, + "playwriteES": { + "familyName": "Playwrite ES", + "fullName": "Playwrite ES Regular", + "postscriptName": "PlaywriteES-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 936 + } + }, + "variants": { + "100": { + "familyName": "Playwrite ES", + "fullName": "Playwrite ES Thin", + "postscriptName": "PlaywriteES-Thin", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 518, + "subsets": { + "latin": { + "xWidthAvg": 518 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "200": { + "familyName": "Playwrite ES", + "fullName": "Playwrite ES ExtraLight", + "postscriptName": "PlaywriteES-ExtraLight", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 518, + "subsets": { + "latin": { + "xWidthAvg": 518 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "300": { + "familyName": "Playwrite ES", + "fullName": "Playwrite ES Light", + "postscriptName": "PlaywriteES-Light", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 518, + "subsets": { + "latin": { + "xWidthAvg": 518 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "regular": { + "familyName": "Playwrite ES", + "fullName": "Playwrite ES Regular", + "postscriptName": "PlaywriteES-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 936 + } + } + } + } + }, + "playwriteESDeco": { + "familyName": "Playwrite ES Deco", + "fullName": "Playwrite ES Deco Regular", + "postscriptName": "PlaywriteESDeco-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 526, + "subsets": { + "latin": { + "xWidthAvg": 526 + }, + "thai": { + "xWidthAvg": 936 + } + }, + "variants": { + "100": { + "familyName": "Playwrite ES Deco", + "fullName": "Playwrite ES Deco Thin", + "postscriptName": "PlaywriteESDeco-Thin", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "200": { + "familyName": "Playwrite ES Deco", + "fullName": "Playwrite ES Deco ExtraLight", + "postscriptName": "PlaywriteESDeco-ExtraLight", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 526, + "subsets": { + "latin": { + "xWidthAvg": 526 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "300": { + "familyName": "Playwrite ES Deco", + "fullName": "Playwrite ES Deco Light", + "postscriptName": "PlaywriteESDeco-Light", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 526, + "subsets": { + "latin": { + "xWidthAvg": 526 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "regular": { + "familyName": "Playwrite ES Deco", + "fullName": "Playwrite ES Deco Regular", + "postscriptName": "PlaywriteESDeco-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 526, + "subsets": { + "latin": { + "xWidthAvg": 526 + }, + "thai": { + "xWidthAvg": 936 + } + } + } + } + }, + "playwriteFRModerne": { + "familyName": "Playwrite FR Moderne", + "fullName": "Playwrite FR Moderne Regular", + "postscriptName": "PlaywriteFRModerne-Regular", + "category": "handwriting", + "capHeight": 1100, + "ascent": 1550, + "descent": -607, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 513, + "subsets": { + "latin": { + "xWidthAvg": 513 + }, + "thai": { + "xWidthAvg": 1009 + } + }, + "variants": { + "100": { + "familyName": "Playwrite FR Moderne", + "fullName": "Playwrite FR Moderne Thin", + "postscriptName": "PlaywriteFRModerne-Thin", + "category": "handwriting", + "capHeight": 1100, + "ascent": 1550, + "descent": -607, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 513, + "subsets": { + "latin": { + "xWidthAvg": 513 + }, + "thai": { + "xWidthAvg": 1009 + } + } + }, + "200": { + "familyName": "Playwrite FR Moderne", + "fullName": "Playwrite FR Moderne ExtraLight", + "postscriptName": "PlaywriteFRModerne-ExtraLight", + "category": "handwriting", + "capHeight": 1100, + "ascent": 1550, + "descent": -607, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 513, + "subsets": { + "latin": { + "xWidthAvg": 513 + }, + "thai": { + "xWidthAvg": 1009 + } + } + }, + "300": { + "familyName": "Playwrite FR Moderne", + "fullName": "Playwrite FR Moderne Light", + "postscriptName": "PlaywriteFRModerne-Light", + "category": "handwriting", + "capHeight": 1100, + "ascent": 1550, + "descent": -607, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 513, + "subsets": { + "latin": { + "xWidthAvg": 513 + }, + "thai": { + "xWidthAvg": 1009 + } + } + }, + "regular": { + "familyName": "Playwrite FR Moderne", + "fullName": "Playwrite FR Moderne Regular", + "postscriptName": "PlaywriteFRModerne-Regular", + "category": "handwriting", + "capHeight": 1100, + "ascent": 1550, + "descent": -607, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 513, + "subsets": { + "latin": { + "xWidthAvg": 513 + }, + "thai": { + "xWidthAvg": 1009 + } + } + } + } + }, + "playwriteFRTrad": { + "familyName": "Playwrite FR Trad", + "fullName": "Playwrite FR Trad Regular", + "postscriptName": "PlaywriteFRTrad-Regular", + "category": "handwriting", + "capHeight": 1408, + "ascent": 1927, + "descent": -925, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 545, + "subsets": { + "latin": { + "xWidthAvg": 545 + }, + "thai": { + "xWidthAvg": 1233 + } + }, + "variants": { + "100": { + "familyName": "Playwrite FR Trad", + "fullName": "Playwrite FR Trad Thin", + "postscriptName": "PlaywriteFRTrad-Thin", + "category": "handwriting", + "capHeight": 1408, + "ascent": 1927, + "descent": -925, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 545, + "subsets": { + "latin": { + "xWidthAvg": 545 + }, + "thai": { + "xWidthAvg": 1233 + } + } + }, + "200": { + "familyName": "Playwrite FR Trad", + "fullName": "Playwrite FR Trad ExtraLight", + "postscriptName": "PlaywriteFRTrad-ExtraLight", + "category": "handwriting", + "capHeight": 1408, + "ascent": 1927, + "descent": -925, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 545, + "subsets": { + "latin": { + "xWidthAvg": 545 + }, + "thai": { + "xWidthAvg": 1233 + } + } + }, + "300": { + "familyName": "Playwrite FR Trad", + "fullName": "Playwrite FR Trad Light", + "postscriptName": "PlaywriteFRTrad-Light", + "category": "handwriting", + "capHeight": 1408, + "ascent": 1927, + "descent": -925, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 545, + "subsets": { + "latin": { + "xWidthAvg": 545 + }, + "thai": { + "xWidthAvg": 1233 + } + } + }, + "regular": { + "familyName": "Playwrite FR Trad", + "fullName": "Playwrite FR Trad Regular", + "postscriptName": "PlaywriteFRTrad-Regular", + "category": "handwriting", + "capHeight": 1408, + "ascent": 1927, + "descent": -925, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 545, + "subsets": { + "latin": { + "xWidthAvg": 545 + }, + "thai": { + "xWidthAvg": 1233 + } + } + } + } + }, + "playwriteGBJ": { + "familyName": "Playwrite GB J", + "fullName": "Playwrite GB J Regular", + "postscriptName": "PlaywriteGBJ-Regular", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 845 + } + }, + "variants": { + "100": { + "familyName": "Playwrite GB J", + "fullName": "Playwrite GB J Thin", + "postscriptName": "PlaywriteGBJ-Thin", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 845 + } + } + }, + "200": { + "familyName": "Playwrite GB J", + "fullName": "Playwrite GB J ExtraLight", + "postscriptName": "PlaywriteGBJ-ExtraLight", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 845 + } + } + }, + "300": { + "familyName": "Playwrite GB J", + "fullName": "Playwrite GB J Light", + "postscriptName": "PlaywriteGBJ-Light", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 845 + } + } + }, + "regular": { + "familyName": "Playwrite GB J", + "fullName": "Playwrite GB J Regular", + "postscriptName": "PlaywriteGBJ-Regular", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 845 + } + } + }, + "italic": { + "familyName": "Playwrite GB J", + "fullName": "Playwrite GB J Italic", + "postscriptName": "PlaywriteGBJ-Italic", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 845 + } + } + }, + "300italic": { + "familyName": "Playwrite GB J", + "fullName": "Playwrite GB J Light Italic", + "postscriptName": "PlaywriteGBJ-LightItalic", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 845 + } + } + }, + "200italic": { + "familyName": "Playwrite GB J", + "fullName": "Playwrite GB J ExtraLight Italic", + "postscriptName": "PlaywriteGBJ-ExtraLightItalic", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 845 + } + } + }, + "100italic": { + "familyName": "Playwrite GB J", + "fullName": "Playwrite GB J Thin Italic", + "postscriptName": "PlaywriteGBJ-ThinItalic", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 845 + } + } + } + } + }, + "playwriteGBS": { + "familyName": "Playwrite GB S", + "fullName": "Playwrite GB S Regular", + "postscriptName": "PlaywriteGBS-Regular", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 845 + } + }, + "variants": { + "100": { + "familyName": "Playwrite GB S", + "fullName": "Playwrite GB S Thin", + "postscriptName": "PlaywriteGBS-Thin", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 501, + "subsets": { + "latin": { + "xWidthAvg": 501 + }, + "thai": { + "xWidthAvg": 845 + } + } + }, + "200": { + "familyName": "Playwrite GB S", + "fullName": "Playwrite GB S ExtraLight", + "postscriptName": "PlaywriteGBS-ExtraLight", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 501, + "subsets": { + "latin": { + "xWidthAvg": 501 + }, + "thai": { + "xWidthAvg": 845 + } + } + }, + "300": { + "familyName": "Playwrite GB S", + "fullName": "Playwrite GB S Light", + "postscriptName": "PlaywriteGBS-Light", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 845 + } + } + }, + "regular": { + "familyName": "Playwrite GB S", + "fullName": "Playwrite GB S Regular", + "postscriptName": "PlaywriteGBS-Regular", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 845 + } + } + }, + "italic": { + "familyName": "Playwrite GB S", + "fullName": "Playwrite GB S Italic", + "postscriptName": "PlaywriteGBS-Italic", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 845 + } + } + }, + "300italic": { + "familyName": "Playwrite GB S", + "fullName": "Playwrite GB S Light Italic", + "postscriptName": "PlaywriteGBS-LightItalic", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 845 + } + } + }, + "200italic": { + "familyName": "Playwrite GB S", + "fullName": "Playwrite GB S ExtraLight Italic", + "postscriptName": "PlaywriteGBS-ExtraLightItalic", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 501, + "subsets": { + "latin": { + "xWidthAvg": 501 + }, + "thai": { + "xWidthAvg": 845 + } + } + }, + "100italic": { + "familyName": "Playwrite GB S", + "fullName": "Playwrite GB S Thin Italic", + "postscriptName": "PlaywriteGBS-ThinItalic", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 501, + "subsets": { + "latin": { + "xWidthAvg": 501 + }, + "thai": { + "xWidthAvg": 845 + } + } + } + } + }, + "playwriteHR": { + "familyName": "Playwrite HR", + "fullName": "Playwrite HR Regular", + "postscriptName": "PlaywriteHR-Regular", + "category": "handwriting", + "capHeight": 879, + "ascent": 1280, + "descent": -379, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 524, + "subsets": { + "latin": { + "xWidthAvg": 524 + }, + "thai": { + "xWidthAvg": 847 + } + }, + "variants": { + "100": { + "familyName": "Playwrite HR", + "fullName": "Playwrite HR Thin", + "postscriptName": "PlaywriteHR-Thin", + "category": "handwriting", + "capHeight": 879, + "ascent": 1280, + "descent": -379, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 523, + "subsets": { + "latin": { + "xWidthAvg": 523 + }, + "thai": { + "xWidthAvg": 848 + } + } + }, + "200": { + "familyName": "Playwrite HR", + "fullName": "Playwrite HR ExtraLight", + "postscriptName": "PlaywriteHR-ExtraLight", + "category": "handwriting", + "capHeight": 879, + "ascent": 1280, + "descent": -379, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 523, + "subsets": { + "latin": { + "xWidthAvg": 523 + }, + "thai": { + "xWidthAvg": 848 + } + } + }, + "300": { + "familyName": "Playwrite HR", + "fullName": "Playwrite HR Light", + "postscriptName": "PlaywriteHR-Light", + "category": "handwriting", + "capHeight": 879, + "ascent": 1280, + "descent": -379, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 524, + "subsets": { + "latin": { + "xWidthAvg": 524 + }, + "thai": { + "xWidthAvg": 847 + } + } + }, + "regular": { + "familyName": "Playwrite HR", + "fullName": "Playwrite HR Regular", + "postscriptName": "PlaywriteHR-Regular", + "category": "handwriting", + "capHeight": 879, + "ascent": 1280, + "descent": -379, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 524, + "subsets": { + "latin": { + "xWidthAvg": 524 + }, + "thai": { + "xWidthAvg": 847 + } + } + } + } + }, + "playwriteHRLijeva": { + "familyName": "Playwrite HR Lijeva", + "fullName": "Playwrite HR Lijeva Regular", + "postscriptName": "PlaywriteHRLijeva-Regular", + "category": "handwriting", + "capHeight": 879, + "ascent": 1280, + "descent": -379, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 524, + "subsets": { + "latin": { + "xWidthAvg": 524 + }, + "thai": { + "xWidthAvg": 848 + } + }, + "variants": { + "100": { + "familyName": "Playwrite HR Lijeva", + "fullName": "Playwrite HR Lijeva Thin", + "postscriptName": "PlaywriteHRLijeva-Thin", + "category": "handwriting", + "capHeight": 879, + "ascent": 1280, + "descent": -379, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 523, + "subsets": { + "latin": { + "xWidthAvg": 523 + }, + "thai": { + "xWidthAvg": 848 + } + } + }, + "200": { + "familyName": "Playwrite HR Lijeva", + "fullName": "Playwrite HR Lijeva ExtraLight", + "postscriptName": "PlaywriteHRLijeva-ExtraLight", + "category": "handwriting", + "capHeight": 879, + "ascent": 1280, + "descent": -379, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 523, + "subsets": { + "latin": { + "xWidthAvg": 523 + }, + "thai": { + "xWidthAvg": 848 + } + } + }, + "300": { + "familyName": "Playwrite HR Lijeva", + "fullName": "Playwrite HR Lijeva Light", + "postscriptName": "PlaywriteHRLijeva-Light", + "category": "handwriting", + "capHeight": 879, + "ascent": 1280, + "descent": -379, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 523, + "subsets": { + "latin": { + "xWidthAvg": 523 + }, + "thai": { + "xWidthAvg": 848 + } + } + }, + "regular": { + "familyName": "Playwrite HR Lijeva", + "fullName": "Playwrite HR Lijeva Regular", + "postscriptName": "PlaywriteHRLijeva-Regular", + "category": "handwriting", + "capHeight": 879, + "ascent": 1280, + "descent": -379, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 524, + "subsets": { + "latin": { + "xWidthAvg": 524 + }, + "thai": { + "xWidthAvg": 848 + } + } + } + } + }, + "playwriteHU": { + "familyName": "Playwrite HU", + "fullName": "Playwrite HU Regular", + "postscriptName": "PlaywriteHU-Regular", + "category": "handwriting", + "capHeight": 946, + "ascent": 1362, + "descent": -448, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 897 + } + }, + "variants": { + "100": { + "familyName": "Playwrite HU", + "fullName": "Playwrite HU Thin", + "postscriptName": "PlaywriteHU-Thin", + "category": "handwriting", + "capHeight": 946, + "ascent": 1362, + "descent": -448, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 526, + "subsets": { + "latin": { + "xWidthAvg": 526 + }, + "thai": { + "xWidthAvg": 897 + } + } + }, + "200": { + "familyName": "Playwrite HU", + "fullName": "Playwrite HU ExtraLight", + "postscriptName": "PlaywriteHU-ExtraLight", + "category": "handwriting", + "capHeight": 946, + "ascent": 1362, + "descent": -448, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 526, + "subsets": { + "latin": { + "xWidthAvg": 526 + }, + "thai": { + "xWidthAvg": 897 + } + } + }, + "300": { + "familyName": "Playwrite HU", + "fullName": "Playwrite HU Light", + "postscriptName": "PlaywriteHU-Light", + "category": "handwriting", + "capHeight": 946, + "ascent": 1362, + "descent": -448, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 897 + } + } + }, + "regular": { + "familyName": "Playwrite HU", + "fullName": "Playwrite HU Regular", + "postscriptName": "PlaywriteHU-Regular", + "category": "handwriting", + "capHeight": 946, + "ascent": 1362, + "descent": -448, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 897 + } + } + } + } + }, + "playwriteID": { + "familyName": "Playwrite ID", + "fullName": "Playwrite ID Regular", + "postscriptName": "PlaywriteID-Regular", + "category": "handwriting", + "capHeight": 1438, + "ascent": 1964, + "descent": -956, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 541, + "subsets": { + "latin": { + "xWidthAvg": 541 + }, + "thai": { + "xWidthAvg": 1255 + } + }, + "variants": { + "100": { + "familyName": "Playwrite ID", + "fullName": "Playwrite ID Thin", + "postscriptName": "PlaywriteID-Thin", + "category": "handwriting", + "capHeight": 1438, + "ascent": 1964, + "descent": -956, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 541, + "subsets": { + "latin": { + "xWidthAvg": 541 + }, + "thai": { + "xWidthAvg": 1255 + } + } + }, + "200": { + "familyName": "Playwrite ID", + "fullName": "Playwrite ID ExtraLight", + "postscriptName": "PlaywriteID-ExtraLight", + "category": "handwriting", + "capHeight": 1438, + "ascent": 1964, + "descent": -956, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 541, + "subsets": { + "latin": { + "xWidthAvg": 541 + }, + "thai": { + "xWidthAvg": 1255 + } + } + }, + "300": { + "familyName": "Playwrite ID", + "fullName": "Playwrite ID Light", + "postscriptName": "PlaywriteID-Light", + "category": "handwriting", + "capHeight": 1438, + "ascent": 1964, + "descent": -956, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 541, + "subsets": { + "latin": { + "xWidthAvg": 541 + }, + "thai": { + "xWidthAvg": 1255 + } + } + }, + "regular": { + "familyName": "Playwrite ID", + "fullName": "Playwrite ID Regular", + "postscriptName": "PlaywriteID-Regular", + "category": "handwriting", + "capHeight": 1438, + "ascent": 1964, + "descent": -956, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 541, + "subsets": { + "latin": { + "xWidthAvg": 541 + }, + "thai": { + "xWidthAvg": 1255 + } + } + } + } + }, + "playwriteIE": { + "familyName": "Playwrite IE", + "fullName": "Playwrite IE Regular", + "postscriptName": "PlaywriteIE-Regular", + "category": "handwriting", + "capHeight": 981, + "ascent": 1405, + "descent": -484, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 922 + } + }, + "variants": { + "100": { + "familyName": "Playwrite IE", + "fullName": "Playwrite IE Thin", + "postscriptName": "PlaywriteIE-Thin", + "category": "handwriting", + "capHeight": 981, + "ascent": 1405, + "descent": -484, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 923 + } + } + }, + "200": { + "familyName": "Playwrite IE", + "fullName": "Playwrite IE ExtraLight", + "postscriptName": "PlaywriteIE-ExtraLight", + "category": "handwriting", + "capHeight": 981, + "ascent": 1405, + "descent": -484, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 923 + } + } + }, + "300": { + "familyName": "Playwrite IE", + "fullName": "Playwrite IE Light", + "postscriptName": "PlaywriteIE-Light", + "category": "handwriting", + "capHeight": 981, + "ascent": 1405, + "descent": -484, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 922 + } + } + }, + "regular": { + "familyName": "Playwrite IE", + "fullName": "Playwrite IE Regular", + "postscriptName": "PlaywriteIE-Regular", + "category": "handwriting", + "capHeight": 981, + "ascent": 1405, + "descent": -484, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 922 + } + } + } + } + }, + "playwriteIN": { + "familyName": "Playwrite IN", + "fullName": "Playwrite IN Regular", + "postscriptName": "PlaywriteIN-Regular", + "category": "handwriting", + "capHeight": 1023, + "ascent": 1456, + "descent": -528, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 534, + "subsets": { + "latin": { + "xWidthAvg": 534 + }, + "thai": { + "xWidthAvg": 952 + } + }, + "variants": { + "100": { + "familyName": "Playwrite IN", + "fullName": "Playwrite IN Thin", + "postscriptName": "PlaywriteIN-Thin", + "category": "handwriting", + "capHeight": 1023, + "ascent": 1456, + "descent": -528, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 534, + "subsets": { + "latin": { + "xWidthAvg": 534 + }, + "thai": { + "xWidthAvg": 953 + } + } + }, + "200": { + "familyName": "Playwrite IN", + "fullName": "Playwrite IN ExtraLight", + "postscriptName": "PlaywriteIN-ExtraLight", + "category": "handwriting", + "capHeight": 1023, + "ascent": 1456, + "descent": -528, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 534, + "subsets": { + "latin": { + "xWidthAvg": 534 + }, + "thai": { + "xWidthAvg": 953 + } + } + }, + "300": { + "familyName": "Playwrite IN", + "fullName": "Playwrite IN Light", + "postscriptName": "PlaywriteIN-Light", + "category": "handwriting", + "capHeight": 1023, + "ascent": 1456, + "descent": -528, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 534, + "subsets": { + "latin": { + "xWidthAvg": 534 + }, + "thai": { + "xWidthAvg": 952 + } + } + }, + "regular": { + "familyName": "Playwrite IN", + "fullName": "Playwrite IN Regular", + "postscriptName": "PlaywriteIN-Regular", + "category": "handwriting", + "capHeight": 1023, + "ascent": 1456, + "descent": -528, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 534, + "subsets": { + "latin": { + "xWidthAvg": 534 + }, + "thai": { + "xWidthAvg": 952 + } + } + } + } + }, + "playwriteIS": { + "familyName": "Playwrite IS", + "fullName": "Playwrite IS Regular", + "postscriptName": "PlaywriteIS-Regular", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 844 + } + }, + "variants": { + "100": { + "familyName": "Playwrite IS", + "fullName": "Playwrite IS Thin", + "postscriptName": "PlaywriteIS-Thin", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 845 + } + } + }, + "200": { + "familyName": "Playwrite IS", + "fullName": "Playwrite IS ExtraLight", + "postscriptName": "PlaywriteIS-ExtraLight", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 845 + } + } + }, + "300": { + "familyName": "Playwrite IS", + "fullName": "Playwrite IS Light", + "postscriptName": "PlaywriteIS-Light", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 844 + } + } + }, + "regular": { + "familyName": "Playwrite IS", + "fullName": "Playwrite IS Regular", + "postscriptName": "PlaywriteIS-Regular", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 844 + } + } + } + } + }, + "playwriteITModerna": { + "familyName": "Playwrite IT Moderna", + "fullName": "Playwrite IT Moderna Regular", + "postscriptName": "PlaywriteITModerna-Regular", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 845 + } + }, + "variants": { + "100": { + "familyName": "Playwrite IT Moderna", + "fullName": "Playwrite IT Moderna Thin", + "postscriptName": "PlaywriteITModerna-Thin", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 845 + } + } + }, + "200": { + "familyName": "Playwrite IT Moderna", + "fullName": "Playwrite IT Moderna ExtraLight", + "postscriptName": "PlaywriteITModerna-ExtraLight", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 845 + } + } + }, + "300": { + "familyName": "Playwrite IT Moderna", + "fullName": "Playwrite IT Moderna Light", + "postscriptName": "PlaywriteITModerna-Light", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 845 + } + } + }, + "regular": { + "familyName": "Playwrite IT Moderna", + "fullName": "Playwrite IT Moderna Regular", + "postscriptName": "PlaywriteITModerna-Regular", + "category": "handwriting", + "capHeight": 875, + "ascent": 1275, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 845 + } + } + } + } + }, + "playwriteITTrad": { + "familyName": "Playwrite IT Trad", + "fullName": "Playwrite IT Trad Regular", + "postscriptName": "PlaywriteITTrad-Regular", + "category": "handwriting", + "capHeight": 959, + "ascent": 1378, + "descent": -462, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 523, + "subsets": { + "latin": { + "xWidthAvg": 523 + }, + "thai": { + "xWidthAvg": 906 + } + }, + "variants": { + "100": { + "familyName": "Playwrite IT Trad", + "fullName": "Playwrite IT Trad Thin", + "postscriptName": "PlaywriteITTrad-Thin", + "category": "handwriting", + "capHeight": 959, + "ascent": 1378, + "descent": -462, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 523, + "subsets": { + "latin": { + "xWidthAvg": 523 + }, + "thai": { + "xWidthAvg": 906 + } + } + }, + "200": { + "familyName": "Playwrite IT Trad", + "fullName": "Playwrite IT Trad ExtraLight", + "postscriptName": "PlaywriteITTrad-ExtraLight", + "category": "handwriting", + "capHeight": 959, + "ascent": 1378, + "descent": -462, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 523, + "subsets": { + "latin": { + "xWidthAvg": 523 + }, + "thai": { + "xWidthAvg": 906 + } + } + }, + "300": { + "familyName": "Playwrite IT Trad", + "fullName": "Playwrite IT Trad Light", + "postscriptName": "PlaywriteITTrad-Light", + "category": "handwriting", + "capHeight": 959, + "ascent": 1378, + "descent": -462, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 523, + "subsets": { + "latin": { + "xWidthAvg": 523 + }, + "thai": { + "xWidthAvg": 906 + } + } + }, + "regular": { + "familyName": "Playwrite IT Trad", + "fullName": "Playwrite IT Trad Regular", + "postscriptName": "PlaywriteITTrad-Regular", + "category": "handwriting", + "capHeight": 959, + "ascent": 1378, + "descent": -462, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 523, + "subsets": { + "latin": { + "xWidthAvg": 523 + }, + "thai": { + "xWidthAvg": 906 + } + } + } + } + }, + "playwriteMX": { + "familyName": "Playwrite MX", + "fullName": "Playwrite MX Regular", + "postscriptName": "PlaywriteMX-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 526, + "subsets": { + "latin": { + "xWidthAvg": 526 + }, + "thai": { + "xWidthAvg": 935 + } + }, + "variants": { + "100": { + "familyName": "Playwrite MX", + "fullName": "Playwrite MX Thin", + "postscriptName": "PlaywriteMX-Thin", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 524, + "subsets": { + "latin": { + "xWidthAvg": 524 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "200": { + "familyName": "Playwrite MX", + "fullName": "Playwrite MX ExtraLight", + "postscriptName": "PlaywriteMX-ExtraLight", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "300": { + "familyName": "Playwrite MX", + "fullName": "Playwrite MX Light", + "postscriptName": "PlaywriteMX-Light", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 935 + } + } + }, + "regular": { + "familyName": "Playwrite MX", + "fullName": "Playwrite MX Regular", + "postscriptName": "PlaywriteMX-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 526, + "subsets": { + "latin": { + "xWidthAvg": 526 + }, + "thai": { + "xWidthAvg": 935 + } + } + } + } + }, + "playwriteNGModern": { + "familyName": "Playwrite NG Modern", + "fullName": "Playwrite NG Modern Regular", + "postscriptName": "PlaywriteNGModern-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 936 + } + }, + "variants": { + "100": { + "familyName": "Playwrite NG Modern", + "fullName": "Playwrite NG Modern Thin", + "postscriptName": "PlaywriteNGModern-Thin", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "200": { + "familyName": "Playwrite NG Modern", + "fullName": "Playwrite NG Modern ExtraLight", + "postscriptName": "PlaywriteNGModern-ExtraLight", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "300": { + "familyName": "Playwrite NG Modern", + "fullName": "Playwrite NG Modern Light", + "postscriptName": "PlaywriteNGModern-Light", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "regular": { + "familyName": "Playwrite NG Modern", + "fullName": "Playwrite NG Modern Regular", + "postscriptName": "PlaywriteNGModern-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 936 + } + } + } + } + }, + "playwriteNL": { + "familyName": "Playwrite NL", + "fullName": "Playwrite NL Regular", + "postscriptName": "PlaywriteNL-Regular", + "category": "handwriting", + "capHeight": 1273, + "ascent": 1762, + "descent": -786, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 537, + "subsets": { + "latin": { + "xWidthAvg": 537 + }, + "thai": { + "xWidthAvg": 1135 + } + }, + "variants": { + "100": { + "familyName": "Playwrite NL", + "fullName": "Playwrite NL Thin", + "postscriptName": "PlaywriteNL-Thin", + "category": "handwriting", + "capHeight": 1273, + "ascent": 1762, + "descent": -786, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 537, + "subsets": { + "latin": { + "xWidthAvg": 537 + }, + "thai": { + "xWidthAvg": 1135 + } + } + }, + "200": { + "familyName": "Playwrite NL", + "fullName": "Playwrite NL ExtraLight", + "postscriptName": "PlaywriteNL-ExtraLight", + "category": "handwriting", + "capHeight": 1273, + "ascent": 1762, + "descent": -786, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 537, + "subsets": { + "latin": { + "xWidthAvg": 537 + }, + "thai": { + "xWidthAvg": 1135 + } + } + }, + "300": { + "familyName": "Playwrite NL", + "fullName": "Playwrite NL Light", + "postscriptName": "PlaywriteNL-Light", + "category": "handwriting", + "capHeight": 1273, + "ascent": 1762, + "descent": -786, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 537, + "subsets": { + "latin": { + "xWidthAvg": 537 + }, + "thai": { + "xWidthAvg": 1135 + } + } + }, + "regular": { + "familyName": "Playwrite NL", + "fullName": "Playwrite NL Regular", + "postscriptName": "PlaywriteNL-Regular", + "category": "handwriting", + "capHeight": 1273, + "ascent": 1762, + "descent": -786, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 537, + "subsets": { + "latin": { + "xWidthAvg": 537 + }, + "thai": { + "xWidthAvg": 1135 + } + } + } + } + }, + "playwriteNO": { + "familyName": "Playwrite NO", + "fullName": "Playwrite NO Regular", + "postscriptName": "PlaywriteNO-Regular", + "category": "handwriting", + "capHeight": 970, + "ascent": 1391, + "descent": -473, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 517, + "subsets": { + "latin": { + "xWidthAvg": 517 + }, + "thai": { + "xWidthAvg": 913 + } + }, + "variants": { + "100": { + "familyName": "Playwrite NO", + "fullName": "Playwrite NO Thin", + "postscriptName": "PlaywriteNO-Thin", + "category": "handwriting", + "capHeight": 970, + "ascent": 1391, + "descent": -473, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 516, + "subsets": { + "latin": { + "xWidthAvg": 516 + }, + "thai": { + "xWidthAvg": 914 + } + } + }, + "200": { + "familyName": "Playwrite NO", + "fullName": "Playwrite NO ExtraLight", + "postscriptName": "PlaywriteNO-ExtraLight", + "category": "handwriting", + "capHeight": 970, + "ascent": 1391, + "descent": -473, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 516, + "subsets": { + "latin": { + "xWidthAvg": 516 + }, + "thai": { + "xWidthAvg": 914 + } + } + }, + "300": { + "familyName": "Playwrite NO", + "fullName": "Playwrite NO Light", + "postscriptName": "PlaywriteNO-Light", + "category": "handwriting", + "capHeight": 970, + "ascent": 1391, + "descent": -473, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 516, + "subsets": { + "latin": { + "xWidthAvg": 516 + }, + "thai": { + "xWidthAvg": 913 + } + } + }, + "regular": { + "familyName": "Playwrite NO", + "fullName": "Playwrite NO Regular", + "postscriptName": "PlaywriteNO-Regular", + "category": "handwriting", + "capHeight": 970, + "ascent": 1391, + "descent": -473, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 517, + "subsets": { + "latin": { + "xWidthAvg": 517 + }, + "thai": { + "xWidthAvg": 913 + } + } + } + } + }, + "playwriteNZ": { + "familyName": "Playwrite NZ", + "fullName": "Playwrite NZ Regular", + "postscriptName": "PlaywriteNZ-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 507, + "subsets": { + "latin": { + "xWidthAvg": 507 + }, + "thai": { + "xWidthAvg": 935 + } + }, + "variants": { + "100": { + "familyName": "Playwrite NZ", + "fullName": "Playwrite NZ Thin", + "postscriptName": "PlaywriteNZ-Thin", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 507, + "subsets": { + "latin": { + "xWidthAvg": 507 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "200": { + "familyName": "Playwrite NZ", + "fullName": "Playwrite NZ ExtraLight", + "postscriptName": "PlaywriteNZ-ExtraLight", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 507, + "subsets": { + "latin": { + "xWidthAvg": 507 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "300": { + "familyName": "Playwrite NZ", + "fullName": "Playwrite NZ Light", + "postscriptName": "PlaywriteNZ-Light", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 507, + "subsets": { + "latin": { + "xWidthAvg": 507 + }, + "thai": { + "xWidthAvg": 935 + } + } + }, + "regular": { + "familyName": "Playwrite NZ", + "fullName": "Playwrite NZ Regular", + "postscriptName": "PlaywriteNZ-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 507, + "subsets": { + "latin": { + "xWidthAvg": 507 + }, + "thai": { + "xWidthAvg": 935 + } + } + } + } + }, + "playwritePE": { + "familyName": "Playwrite PE", + "fullName": "Playwrite PE Regular", + "postscriptName": "PlaywritePE-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 526, + "subsets": { + "latin": { + "xWidthAvg": 526 + }, + "thai": { + "xWidthAvg": 936 + } + }, + "variants": { + "100": { + "familyName": "Playwrite PE", + "fullName": "Playwrite PE Thin", + "postscriptName": "PlaywritePE-Thin", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 526, + "subsets": { + "latin": { + "xWidthAvg": 526 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "200": { + "familyName": "Playwrite PE", + "fullName": "Playwrite PE ExtraLight", + "postscriptName": "PlaywritePE-ExtraLight", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 526, + "subsets": { + "latin": { + "xWidthAvg": 526 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "300": { + "familyName": "Playwrite PE", + "fullName": "Playwrite PE Light", + "postscriptName": "PlaywritePE-Light", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 526, + "subsets": { + "latin": { + "xWidthAvg": 526 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "regular": { + "familyName": "Playwrite PE", + "fullName": "Playwrite PE Regular", + "postscriptName": "PlaywritePE-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 526, + "subsets": { + "latin": { + "xWidthAvg": 526 + }, + "thai": { + "xWidthAvg": 936 + } + } + } + } + }, + "playwritePL": { + "familyName": "Playwrite PL", + "fullName": "Playwrite PL Regular", + "postscriptName": "PlaywritePL-Regular", + "category": "handwriting", + "capHeight": 986, + "ascent": 1411, + "descent": -490, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 518, + "subsets": { + "latin": { + "xWidthAvg": 518 + }, + "thai": { + "xWidthAvg": 926 + } + }, + "variants": { + "100": { + "familyName": "Playwrite PL", + "fullName": "Playwrite PL Thin", + "postscriptName": "PlaywritePL-Thin", + "category": "handwriting", + "capHeight": 986, + "ascent": 1411, + "descent": -490, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 518, + "subsets": { + "latin": { + "xWidthAvg": 518 + }, + "thai": { + "xWidthAvg": 926 + } + } + }, + "200": { + "familyName": "Playwrite PL", + "fullName": "Playwrite PL ExtraLight", + "postscriptName": "PlaywritePL-ExtraLight", + "category": "handwriting", + "capHeight": 986, + "ascent": 1411, + "descent": -490, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 518, + "subsets": { + "latin": { + "xWidthAvg": 518 + }, + "thai": { + "xWidthAvg": 926 + } + } + }, + "300": { + "familyName": "Playwrite PL", + "fullName": "Playwrite PL Light", + "postscriptName": "PlaywritePL-Light", + "category": "handwriting", + "capHeight": 986, + "ascent": 1411, + "descent": -490, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 518, + "subsets": { + "latin": { + "xWidthAvg": 518 + }, + "thai": { + "xWidthAvg": 926 + } + } + }, + "regular": { + "familyName": "Playwrite PL", + "fullName": "Playwrite PL Regular", + "postscriptName": "PlaywritePL-Regular", + "category": "handwriting", + "capHeight": 986, + "ascent": 1411, + "descent": -490, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 518, + "subsets": { + "latin": { + "xWidthAvg": 518 + }, + "thai": { + "xWidthAvg": 926 + } + } + } + } + }, + "playwritePT": { + "familyName": "Playwrite PT", + "fullName": "Playwrite PT Regular", + "postscriptName": "PlaywritePT-Regular", + "category": "handwriting", + "capHeight": 1081, + "ascent": 1527, + "descent": -588, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 529, + "subsets": { + "latin": { + "xWidthAvg": 529 + }, + "thai": { + "xWidthAvg": 995 + } + }, + "variants": { + "100": { + "familyName": "Playwrite PT", + "fullName": "Playwrite PT Thin", + "postscriptName": "PlaywritePT-Thin", + "category": "handwriting", + "capHeight": 1081, + "ascent": 1527, + "descent": -588, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 529, + "subsets": { + "latin": { + "xWidthAvg": 529 + }, + "thai": { + "xWidthAvg": 995 + } + } + }, + "200": { + "familyName": "Playwrite PT", + "fullName": "Playwrite PT ExtraLight", + "postscriptName": "PlaywritePT-ExtraLight", + "category": "handwriting", + "capHeight": 1081, + "ascent": 1527, + "descent": -588, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 529, + "subsets": { + "latin": { + "xWidthAvg": 529 + }, + "thai": { + "xWidthAvg": 995 + } + } + }, + "300": { + "familyName": "Playwrite PT", + "fullName": "Playwrite PT Light", + "postscriptName": "PlaywritePT-Light", + "category": "handwriting", + "capHeight": 1081, + "ascent": 1527, + "descent": -588, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 529, + "subsets": { + "latin": { + "xWidthAvg": 529 + }, + "thai": { + "xWidthAvg": 995 + } + } + }, + "regular": { + "familyName": "Playwrite PT", + "fullName": "Playwrite PT Regular", + "postscriptName": "PlaywritePT-Regular", + "category": "handwriting", + "capHeight": 1081, + "ascent": 1527, + "descent": -588, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 529, + "subsets": { + "latin": { + "xWidthAvg": 529 + }, + "thai": { + "xWidthAvg": 995 + } + } + } + } + }, + "playwriteRO": { + "familyName": "Playwrite RO", + "fullName": "Playwrite RO Regular", + "postscriptName": "PlaywriteRO-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 526, + "subsets": { + "latin": { + "xWidthAvg": 526 + }, + "thai": { + "xWidthAvg": 935 + } + }, + "variants": { + "100": { + "familyName": "Playwrite RO", + "fullName": "Playwrite RO Thin", + "postscriptName": "PlaywriteRO-Thin", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "200": { + "familyName": "Playwrite RO", + "fullName": "Playwrite RO ExtraLight", + "postscriptName": "PlaywriteRO-ExtraLight", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "300": { + "familyName": "Playwrite RO", + "fullName": "Playwrite RO Light", + "postscriptName": "PlaywriteRO-Light", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 526, + "subsets": { + "latin": { + "xWidthAvg": 526 + }, + "thai": { + "xWidthAvg": 935 + } + } + }, + "regular": { + "familyName": "Playwrite RO", + "fullName": "Playwrite RO Regular", + "postscriptName": "PlaywriteRO-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 526, + "subsets": { + "latin": { + "xWidthAvg": 526 + }, + "thai": { + "xWidthAvg": 935 + } + } + } + } + }, + "playwriteSK": { + "familyName": "Playwrite SK", + "fullName": "Playwrite SK Regular", + "postscriptName": "PlaywriteSK-Regular", + "category": "handwriting", + "capHeight": 985, + "ascent": 1410, + "descent": -489, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 540, + "subsets": { + "latin": { + "xWidthAvg": 540 + }, + "thai": { + "xWidthAvg": 924 + } + }, + "variants": { + "100": { + "familyName": "Playwrite SK", + "fullName": "Playwrite SK Thin", + "postscriptName": "PlaywriteSK-Thin", + "category": "handwriting", + "capHeight": 985, + "ascent": 1410, + "descent": -489, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 540, + "subsets": { + "latin": { + "xWidthAvg": 540 + }, + "thai": { + "xWidthAvg": 925 + } + } + }, + "200": { + "familyName": "Playwrite SK", + "fullName": "Playwrite SK ExtraLight", + "postscriptName": "PlaywriteSK-ExtraLight", + "category": "handwriting", + "capHeight": 985, + "ascent": 1410, + "descent": -489, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 540, + "subsets": { + "latin": { + "xWidthAvg": 540 + }, + "thai": { + "xWidthAvg": 925 + } + } + }, + "300": { + "familyName": "Playwrite SK", + "fullName": "Playwrite SK Light", + "postscriptName": "PlaywriteSK-Light", + "category": "handwriting", + "capHeight": 985, + "ascent": 1410, + "descent": -489, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 540, + "subsets": { + "latin": { + "xWidthAvg": 540 + }, + "thai": { + "xWidthAvg": 924 + } + } + }, + "regular": { + "familyName": "Playwrite SK", + "fullName": "Playwrite SK Regular", + "postscriptName": "PlaywriteSK-Regular", + "category": "handwriting", + "capHeight": 985, + "ascent": 1410, + "descent": -489, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 540, + "subsets": { + "latin": { + "xWidthAvg": 540 + }, + "thai": { + "xWidthAvg": 924 + } + } + } + } + }, + "playwriteTZ": { + "familyName": "Playwrite TZ", + "fullName": "Playwrite TZ Regular", + "postscriptName": "PlaywriteTZ-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 522, + "subsets": { + "latin": { + "xWidthAvg": 522 + }, + "thai": { + "xWidthAvg": 935 + } + }, + "variants": { + "100": { + "familyName": "Playwrite TZ", + "fullName": "Playwrite TZ Thin", + "postscriptName": "PlaywriteTZ-Thin", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 522, + "subsets": { + "latin": { + "xWidthAvg": 522 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "200": { + "familyName": "Playwrite TZ", + "fullName": "Playwrite TZ ExtraLight", + "postscriptName": "PlaywriteTZ-ExtraLight", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 522, + "subsets": { + "latin": { + "xWidthAvg": 522 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "300": { + "familyName": "Playwrite TZ", + "fullName": "Playwrite TZ Light", + "postscriptName": "PlaywriteTZ-Light", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 522, + "subsets": { + "latin": { + "xWidthAvg": 522 + }, + "thai": { + "xWidthAvg": 935 + } + } + }, + "regular": { + "familyName": "Playwrite TZ", + "fullName": "Playwrite TZ Regular", + "postscriptName": "PlaywriteTZ-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 522, + "subsets": { + "latin": { + "xWidthAvg": 522 + }, + "thai": { + "xWidthAvg": 935 + } + } + } + } + }, + "playwriteUSModern": { + "familyName": "Playwrite US Modern", + "fullName": "Playwrite US Modern Regular", + "postscriptName": "PlaywriteUSModern-Regular", + "category": "handwriting", + "capHeight": 938, + "ascent": 1352, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 511, + "subsets": { + "latin": { + "xWidthAvg": 511 + }, + "thai": { + "xWidthAvg": 891 + } + }, + "variants": { + "100": { + "familyName": "Playwrite US Modern", + "fullName": "Playwrite US Modern Thin", + "postscriptName": "PlaywriteUSModern-Thin", + "category": "handwriting", + "capHeight": 938, + "ascent": 1352, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 511, + "subsets": { + "latin": { + "xWidthAvg": 511 + }, + "thai": { + "xWidthAvg": 891 + } + } + }, + "200": { + "familyName": "Playwrite US Modern", + "fullName": "Playwrite US Modern ExtraLight", + "postscriptName": "PlaywriteUSModern-ExtraLight", + "category": "handwriting", + "capHeight": 938, + "ascent": 1352, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 511, + "subsets": { + "latin": { + "xWidthAvg": 511 + }, + "thai": { + "xWidthAvg": 891 + } + } + }, + "300": { + "familyName": "Playwrite US Modern", + "fullName": "Playwrite US Modern Light", + "postscriptName": "PlaywriteUSModern-Light", + "category": "handwriting", + "capHeight": 938, + "ascent": 1352, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 511, + "subsets": { + "latin": { + "xWidthAvg": 511 + }, + "thai": { + "xWidthAvg": 891 + } + } + }, + "regular": { + "familyName": "Playwrite US Modern", + "fullName": "Playwrite US Modern Regular", + "postscriptName": "PlaywriteUSModern-Regular", + "category": "handwriting", + "capHeight": 938, + "ascent": 1352, + "descent": -440, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 511, + "subsets": { + "latin": { + "xWidthAvg": 511 + }, + "thai": { + "xWidthAvg": 891 + } + } + } + } + }, + "playwriteUSTrad": { + "familyName": "Playwrite US Trad", + "fullName": "Playwrite US Trad Regular", + "postscriptName": "PlaywriteUSTrad-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 935 + } + }, + "variants": { + "100": { + "familyName": "Playwrite US Trad", + "fullName": "Playwrite US Trad Thin", + "postscriptName": "PlaywriteUSTrad-Thin", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "200": { + "familyName": "Playwrite US Trad", + "fullName": "Playwrite US Trad ExtraLight", + "postscriptName": "PlaywriteUSTrad-ExtraLight", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "300": { + "familyName": "Playwrite US Trad", + "fullName": "Playwrite US Trad Light", + "postscriptName": "PlaywriteUSTrad-Light", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 935 + } + } + }, + "regular": { + "familyName": "Playwrite US Trad", + "fullName": "Playwrite US Trad Regular", + "postscriptName": "PlaywriteUSTrad-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 527, + "subsets": { + "latin": { + "xWidthAvg": 527 + }, + "thai": { + "xWidthAvg": 935 + } + } + } + } + }, + "playwriteVN": { + "familyName": "Playwrite VN", + "fullName": "Playwrite VN Regular", + "postscriptName": "PlaywriteVN-Regular", + "category": "handwriting", + "capHeight": 1257, + "ascent": 1743, + "descent": -769, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 536, + "subsets": { + "latin": { + "xWidthAvg": 536 + }, + "thai": { + "xWidthAvg": 1123 + } + }, + "variants": { + "100": { + "familyName": "Playwrite VN", + "fullName": "Playwrite VN Thin", + "postscriptName": "PlaywriteVN-Thin", + "category": "handwriting", + "capHeight": 1257, + "ascent": 1743, + "descent": -769, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 535, + "subsets": { + "latin": { + "xWidthAvg": 535 + }, + "thai": { + "xWidthAvg": 1123 + } + } + }, + "200": { + "familyName": "Playwrite VN", + "fullName": "Playwrite VN ExtraLight", + "postscriptName": "PlaywriteVN-ExtraLight", + "category": "handwriting", + "capHeight": 1257, + "ascent": 1743, + "descent": -769, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 536, + "subsets": { + "latin": { + "xWidthAvg": 536 + }, + "thai": { + "xWidthAvg": 1123 + } + } + }, + "300": { + "familyName": "Playwrite VN", + "fullName": "Playwrite VN Light", + "postscriptName": "PlaywriteVN-Light", + "category": "handwriting", + "capHeight": 1257, + "ascent": 1743, + "descent": -769, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 536, + "subsets": { + "latin": { + "xWidthAvg": 536 + }, + "thai": { + "xWidthAvg": 1123 + } + } + }, + "regular": { + "familyName": "Playwrite VN", + "fullName": "Playwrite VN Regular", + "postscriptName": "PlaywriteVN-Regular", + "category": "handwriting", + "capHeight": 1257, + "ascent": 1743, + "descent": -769, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 536, + "subsets": { + "latin": { + "xWidthAvg": 536 + }, + "thai": { + "xWidthAvg": 1123 + } + } + } + } + }, + "playwriteZA": { + "familyName": "Playwrite ZA", + "fullName": "Playwrite ZA Regular", + "postscriptName": "PlaywriteZA-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 516, + "subsets": { + "latin": { + "xWidthAvg": 516 + }, + "thai": { + "xWidthAvg": 936 + } + }, + "variants": { + "100": { + "familyName": "Playwrite ZA", + "fullName": "Playwrite ZA Thin", + "postscriptName": "PlaywriteZA-Thin", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 516, + "subsets": { + "latin": { + "xWidthAvg": 516 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "200": { + "familyName": "Playwrite ZA", + "fullName": "Playwrite ZA ExtraLight", + "postscriptName": "PlaywriteZA-ExtraLight", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 516, + "subsets": { + "latin": { + "xWidthAvg": 516 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "300": { + "familyName": "Playwrite ZA", + "fullName": "Playwrite ZA Light", + "postscriptName": "PlaywriteZA-Light", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 516, + "subsets": { + "latin": { + "xWidthAvg": 516 + }, + "thai": { + "xWidthAvg": 936 + } + } + }, + "regular": { + "familyName": "Playwrite ZA", + "fullName": "Playwrite ZA Regular", + "postscriptName": "PlaywriteZA-Regular", + "category": "handwriting", + "capHeight": 1000, + "ascent": 1428, + "descent": -504, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 516, + "subsets": { + "latin": { + "xWidthAvg": 516 + }, + "thai": { + "xWidthAvg": 936 + } + } + } + } + }, + "plusJakartaSans": { + "familyName": "Plus Jakarta Sans", + "fullName": "Plus Jakarta Sans Regular", + "postscriptName": "PlusJakartaSans-Regular", + "category": "sans-serif", + "capHeight": 745, + "ascent": 1038, + "descent": -222, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 640 + } + }, + "variants": { + "200": { + "familyName": "Plus Jakarta Sans", + "fullName": "Plus Jakarta Sans ExtraLight", + "postscriptName": "PlusJakartaSans-ExtraLight", + "category": "sans-serif", + "capHeight": 745, + "ascent": 1038, + "descent": -222, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "300": { + "familyName": "Plus Jakarta Sans", + "fullName": "Plus Jakarta Sans Light", + "postscriptName": "PlusJakartaSans-Light", + "category": "sans-serif", + "capHeight": 745, + "ascent": 1038, + "descent": -222, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "500": { + "familyName": "Plus Jakarta Sans", + "fullName": "Plus Jakarta Sans Medium", + "postscriptName": "PlusJakartaSans-Medium", + "category": "sans-serif", + "capHeight": 745, + "ascent": 1038, + "descent": -222, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 539, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "600": { + "familyName": "Plus Jakarta Sans", + "fullName": "Plus Jakarta Sans SemiBold", + "postscriptName": "PlusJakartaSans-SemiBold", + "category": "sans-serif", + "capHeight": 745, + "ascent": 1038, + "descent": -222, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 541, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "700": { + "familyName": "Plus Jakarta Sans", + "fullName": "Plus Jakarta Sans Bold", + "postscriptName": "PlusJakartaSans-Bold", + "category": "sans-serif", + "capHeight": 745, + "ascent": 1038, + "descent": -222, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "800": { + "familyName": "Plus Jakarta Sans", + "fullName": "Plus Jakarta Sans ExtraBold", + "postscriptName": "PlusJakartaSans-ExtraBold", + "category": "sans-serif", + "capHeight": 745, + "ascent": 1038, + "descent": -222, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "regular": { + "familyName": "Plus Jakarta Sans", + "fullName": "Plus Jakarta Sans Regular", + "postscriptName": "PlusJakartaSans-Regular", + "category": "sans-serif", + "capHeight": 745, + "ascent": 1038, + "descent": -222, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "italic": { + "familyName": "Plus Jakarta Sans", + "fullName": "Plus Jakarta Sans Italic", + "postscriptName": "PlusJakartaSans-Italic", + "category": "sans-serif", + "capHeight": 745, + "ascent": 1038, + "descent": -222, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 745 + } + } + }, + "800italic": { + "familyName": "Plus Jakarta Sans", + "fullName": "Plus Jakarta Sans ExtraBold Italic", + "postscriptName": "PlusJakartaSans-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 745, + "ascent": 1038, + "descent": -222, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 744 + } + } + }, + "700italic": { + "familyName": "Plus Jakarta Sans", + "fullName": "Plus Jakarta Sans Bold Italic", + "postscriptName": "PlusJakartaSans-BoldItalic", + "category": "sans-serif", + "capHeight": 745, + "ascent": 1038, + "descent": -222, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 544, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 744 + } + } + }, + "600italic": { + "familyName": "Plus Jakarta Sans", + "fullName": "Plus Jakarta Sans SemiBold Italic", + "postscriptName": "PlusJakartaSans-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 745, + "ascent": 1038, + "descent": -222, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 541, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 745 + } + } + }, + "500italic": { + "familyName": "Plus Jakarta Sans", + "fullName": "Plus Jakarta Sans Medium Italic", + "postscriptName": "PlusJakartaSans-MediumItalic", + "category": "sans-serif", + "capHeight": 745, + "ascent": 1038, + "descent": -222, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 539, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 745 + } + } + }, + "300italic": { + "familyName": "Plus Jakarta Sans", + "fullName": "Plus Jakarta Sans Light Italic", + "postscriptName": "PlusJakartaSans-LightItalic", + "category": "sans-serif", + "capHeight": 745, + "ascent": 1038, + "descent": -222, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 531, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 745 + } + } + }, + "200italic": { + "familyName": "Plus Jakarta Sans", + "fullName": "Plus Jakarta Sans ExtraLight Italic", + "postscriptName": "PlusJakartaSans-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 745, + "ascent": 1038, + "descent": -222, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 745 + } + } + } + } + }, + "podkova": { + "familyName": "Podkova", + "fullName": "Podkova Regular", + "postscriptName": "Podkova-Regular", + "category": "serif", + "capHeight": 589, + "ascent": 859, + "descent": -249, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 429, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 965 + } + }, + "variants": { + "500": { + "familyName": "Podkova", + "fullName": "Podkova Medium", + "postscriptName": "Podkova-Medium", + "category": "serif", + "capHeight": 589, + "ascent": 859, + "descent": -249, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 429, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 966 + } + } + }, + "600": { + "familyName": "Podkova", + "fullName": "Podkova SemiBold", + "postscriptName": "Podkova-SemiBold", + "category": "serif", + "capHeight": 589, + "ascent": 859, + "descent": -249, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 429, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 966 + } + } + }, + "700": { + "familyName": "Podkova", + "fullName": "Podkova Bold", + "postscriptName": "Podkova-Bold", + "category": "serif", + "capHeight": 589, + "ascent": 859, + "descent": -249, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 429, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 967 + } + } + }, + "800": { + "familyName": "Podkova", + "fullName": "Podkova ExtraBold", + "postscriptName": "Podkova-ExtraBold", + "category": "serif", + "capHeight": 589, + "ascent": 859, + "descent": -249, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 429, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 968 + } + } + }, + "regular": { + "familyName": "Podkova", + "fullName": "Podkova Regular", + "postscriptName": "Podkova-Regular", + "category": "serif", + "capHeight": 589, + "ascent": 859, + "descent": -249, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 429, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 965 + } + } + } + } + }, + "poetsenOne": { + "familyName": "Poetsen One", + "fullName": "PoetsenOne", + "postscriptName": "PoetsenOne-Regular", + "category": "display", + "capHeight": 710, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 648 + } + }, + "variants": { + "regular": { + "familyName": "Poetsen One", + "fullName": "PoetsenOne", + "postscriptName": "PoetsenOne-Regular", + "category": "display", + "capHeight": 710, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 648 + } + } + } + } + }, + "poiretOne": { + "familyName": "Poiret One", + "fullName": "Poiret One", + "postscriptName": "PoiretOne-Regular", + "category": "display", + "capHeight": 750, + "ascent": 962, + "descent": -208, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 470 + } + }, + "variants": { + "regular": { + "familyName": "Poiret One", + "fullName": "Poiret One", + "postscriptName": "PoiretOne-Regular", + "category": "display", + "capHeight": 750, + "ascent": 962, + "descent": -208, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 470 + } + } + } + } + }, + "pollerOne": { + "familyName": "Poller One", + "fullName": "Poller One", + "postscriptName": "PollerOne-Regular", + "category": "display", + "capHeight": 1486, + "ascent": 1920, + "descent": -514, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 991, + "xWidthAvg": 1272, + "subsets": { + "latin": { + "xWidthAvg": 1272 + }, + "thai": { + "xWidthAvg": 741 + } + }, + "variants": { + "regular": { + "familyName": "Poller One", + "fullName": "Poller One", + "postscriptName": "PollerOne-Regular", + "category": "display", + "capHeight": 1486, + "ascent": 1920, + "descent": -514, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 991, + "xWidthAvg": 1272, + "subsets": { + "latin": { + "xWidthAvg": 1272 + }, + "thai": { + "xWidthAvg": 741 + } + } + } + } + }, + "poltawskiNowy": { + "familyName": "Poltawski Nowy", + "fullName": "Poltawski Nowy Regular", + "postscriptName": "PoltawskiNowy-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 1000, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 449, + "subsets": { + "latin": { + "xWidthAvg": 449 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "500": { + "familyName": "Poltawski Nowy", + "fullName": "Poltawski Nowy Medium", + "postscriptName": "PoltawskiNowy-Medium", + "category": "serif", + "capHeight": 700, + "ascent": 1000, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 448, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Poltawski Nowy", + "fullName": "Poltawski Nowy SemiBold", + "postscriptName": "PoltawskiNowy-SemiBold", + "category": "serif", + "capHeight": 700, + "ascent": 1000, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Poltawski Nowy", + "fullName": "Poltawski Nowy Bold", + "postscriptName": "PoltawskiNowy-Bold", + "category": "serif", + "capHeight": 700, + "ascent": 1000, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Poltawski Nowy", + "fullName": "Poltawski Nowy Regular", + "postscriptName": "PoltawskiNowy-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 1000, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 449, + "subsets": { + "latin": { + "xWidthAvg": 449 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "italic": { + "familyName": "Poltawski Nowy", + "fullName": "Poltawski Nowy Italic", + "postscriptName": "PoltawskiNowy-Italic", + "category": "serif", + "capHeight": 700, + "ascent": 1000, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700italic": { + "familyName": "Poltawski Nowy", + "fullName": "Poltawski Nowy Bold Italic", + "postscriptName": "PoltawskiNowy-BoldItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1000, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600italic": { + "familyName": "Poltawski Nowy", + "fullName": "Poltawski Nowy SemiBold Italic", + "postscriptName": "PoltawskiNowy-SemiBoldItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1000, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 455, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500italic": { + "familyName": "Poltawski Nowy", + "fullName": "Poltawski Nowy Medium Italic", + "postscriptName": "PoltawskiNowy-MediumItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1000, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 448, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "poly": { + "familyName": "Poly", + "fullName": "Poly-Regular", + "postscriptName": "Poly-Regular", + "category": "serif", + "capHeight": 693, + "ascent": 964, + "descent": -224, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 473, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 520 + } + }, + "variants": { + "regular": { + "familyName": "Poly", + "fullName": "Poly-Regular", + "postscriptName": "Poly-Regular", + "category": "serif", + "capHeight": 693, + "ascent": 964, + "descent": -224, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 473, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 520 + } + } + }, + "italic": { + "familyName": "Poly", + "fullName": "Poly-Italic", + "postscriptName": "Poly-Italic", + "category": "serif", + "capHeight": 693, + "ascent": 964, + "descent": -224, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 80, + "xWidthAvg": 409, + "subsets": { + "latin": { + "xWidthAvg": 409 + }, + "thai": { + "xWidthAvg": 520 + } + } + } + } + }, + "pompiere": { + "familyName": "Pompiere", + "fullName": "Pompiere ", + "postscriptName": "Pompiere-Regular", + "category": "display", + "capHeight": 1315, + "ascent": 1918, + "descent": -543, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 616, + "xWidthAvg": 618, + "subsets": { + "latin": { + "xWidthAvg": 618 + }, + "thai": { + "xWidthAvg": 1146 + } + }, + "variants": { + "regular": { + "familyName": "Pompiere", + "fullName": "Pompiere ", + "postscriptName": "Pompiere-Regular", + "category": "display", + "capHeight": 1315, + "ascent": 1918, + "descent": -543, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 616, + "xWidthAvg": 618, + "subsets": { + "latin": { + "xWidthAvg": 618 + }, + "thai": { + "xWidthAvg": 1146 + } + } + } + } + }, + "pontanoSans": { + "familyName": "Pontano Sans", + "fullName": "Pontano Sans Regular", + "postscriptName": "PontanoSans-Regular", + "category": "sans-serif", + "capHeight": 1464, + "ascent": 2025, + "descent": -599, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1023, + "xWidthAvg": 860, + "subsets": { + "latin": { + "xWidthAvg": 860 + }, + "thai": { + "xWidthAvg": 1241 + } + }, + "variants": { + "300": { + "familyName": "Pontano Sans", + "fullName": "Pontano Sans Light", + "postscriptName": "PontanoSans-Light", + "category": "sans-serif", + "capHeight": 1464, + "ascent": 2025, + "descent": -599, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1023, + "xWidthAvg": 842, + "subsets": { + "latin": { + "xWidthAvg": 842 + }, + "thai": { + "xWidthAvg": 1151 + } + } + }, + "500": { + "familyName": "Pontano Sans", + "fullName": "Pontano Sans Medium", + "postscriptName": "PontanoSans-Medium", + "category": "sans-serif", + "capHeight": 1464, + "ascent": 2025, + "descent": -599, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1023, + "xWidthAvg": 868, + "subsets": { + "latin": { + "xWidthAvg": 868 + }, + "thai": { + "xWidthAvg": 1271 + } + } + }, + "600": { + "familyName": "Pontano Sans", + "fullName": "Pontano Sans SemiBold", + "postscriptName": "PontanoSans-SemiBold", + "category": "sans-serif", + "capHeight": 1464, + "ascent": 2025, + "descent": -599, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1023, + "xWidthAvg": 876, + "subsets": { + "latin": { + "xWidthAvg": 876 + }, + "thai": { + "xWidthAvg": 1301 + } + } + }, + "700": { + "familyName": "Pontano Sans", + "fullName": "Pontano Sans Bold", + "postscriptName": "PontanoSans-Bold", + "category": "sans-serif", + "capHeight": 1464, + "ascent": 2025, + "descent": -599, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1023, + "xWidthAvg": 885, + "subsets": { + "latin": { + "xWidthAvg": 885 + }, + "thai": { + "xWidthAvg": 1331 + } + } + }, + "regular": { + "familyName": "Pontano Sans", + "fullName": "Pontano Sans Regular", + "postscriptName": "PontanoSans-Regular", + "category": "sans-serif", + "capHeight": 1464, + "ascent": 2025, + "descent": -599, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1023, + "xWidthAvg": 860, + "subsets": { + "latin": { + "xWidthAvg": 860 + }, + "thai": { + "xWidthAvg": 1241 + } + } + } + } + }, + "poorStory": { + "familyName": "Poor Story", + "fullName": "Poor Story Regular", + "postscriptName": "PoorStory-Regular", + "category": "display", + "capHeight": 641, + "ascent": 819, + "descent": -205, + "lineGap": 256, + "unitsPerEm": 1024, + "xHeight": 389, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Poor Story", + "fullName": "Poor Story Regular", + "postscriptName": "PoorStory-Regular", + "category": "display", + "capHeight": 641, + "ascent": 819, + "descent": -205, + "lineGap": 256, + "unitsPerEm": 1024, + "xHeight": 389, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "poppins": { + "familyName": "Poppins", + "fullName": "Poppins Regular", + "postscriptName": "Poppins-Regular", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1050, + "descent": -350, + "lineGap": 100, + "unitsPerEm": 1000, + "xHeight": 548, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "100": { + "familyName": "Poppins", + "fullName": "Poppins Thin", + "postscriptName": "Poppins-Thin", + "category": "sans-serif", + "capHeight": 702, + "ascent": 1050, + "descent": -350, + "lineGap": 100, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200": { + "familyName": "Poppins", + "fullName": "Poppins ExtraLight", + "postscriptName": "Poppins-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1050, + "descent": -350, + "lineGap": 100, + "unitsPerEm": 1000, + "xHeight": 542, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Poppins", + "fullName": "Poppins Light", + "postscriptName": "Poppins-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1050, + "descent": -350, + "lineGap": 100, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Poppins", + "fullName": "Poppins Medium", + "postscriptName": "Poppins-Medium", + "category": "sans-serif", + "capHeight": 697, + "ascent": 1050, + "descent": -350, + "lineGap": 100, + "unitsPerEm": 1000, + "xHeight": 551, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Poppins", + "fullName": "Poppins SemiBold", + "postscriptName": "Poppins-SemiBold", + "category": "sans-serif", + "capHeight": 701, + "ascent": 1050, + "descent": -350, + "lineGap": 100, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Poppins", + "fullName": "Poppins Bold", + "postscriptName": "Poppins-Bold", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1050, + "descent": -350, + "lineGap": 100, + "unitsPerEm": 1000, + "xHeight": 558, + "xWidthAvg": 515, + "subsets": { + "latin": { + "xWidthAvg": 515 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Poppins", + "fullName": "Poppins ExtraBold", + "postscriptName": "Poppins-ExtraBold", + "category": "sans-serif", + "capHeight": 709, + "ascent": 1050, + "descent": -350, + "lineGap": 100, + "unitsPerEm": 1000, + "xHeight": 561, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "Poppins", + "fullName": "Poppins Black", + "postscriptName": "Poppins-Black", + "category": "sans-serif", + "capHeight": 713, + "ascent": 1050, + "descent": -350, + "lineGap": 100, + "unitsPerEm": 1000, + "xHeight": 564, + "xWidthAvg": 523, + "subsets": { + "latin": { + "xWidthAvg": 523 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Poppins", + "fullName": "Poppins Regular", + "postscriptName": "Poppins-Regular", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1050, + "descent": -350, + "lineGap": 100, + "unitsPerEm": 1000, + "xHeight": 548, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Poppins", + "fullName": "Poppins Italic", + "postscriptName": "Poppins-Italic", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1050, + "descent": -350, + "lineGap": 100, + "unitsPerEm": 1000, + "xHeight": 548, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900italic": { + "familyName": "Poppins", + "fullName": "Poppins Black Italic", + "postscriptName": "Poppins-BlackItalic", + "category": "sans-serif", + "capHeight": 713, + "ascent": 1050, + "descent": -350, + "lineGap": 100, + "unitsPerEm": 1000, + "xHeight": 564, + "xWidthAvg": 523, + "subsets": { + "latin": { + "xWidthAvg": 523 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800italic": { + "familyName": "Poppins", + "fullName": "Poppins ExtraBold Italic", + "postscriptName": "Poppins-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 709, + "ascent": 1050, + "descent": -350, + "lineGap": 100, + "unitsPerEm": 1000, + "xHeight": 561, + "xWidthAvg": 521, + "subsets": { + "latin": { + "xWidthAvg": 521 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700italic": { + "familyName": "Poppins", + "fullName": "Poppins Bold Italic", + "postscriptName": "Poppins-BoldItalic", + "category": "sans-serif", + "capHeight": 705, + "ascent": 1050, + "descent": -350, + "lineGap": 100, + "unitsPerEm": 1000, + "xHeight": 558, + "xWidthAvg": 518, + "subsets": { + "latin": { + "xWidthAvg": 518 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600italic": { + "familyName": "Poppins", + "fullName": "Poppins SemiBold Italic", + "postscriptName": "Poppins-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 701, + "ascent": 1050, + "descent": -350, + "lineGap": 100, + "unitsPerEm": 1000, + "xHeight": 554, + "xWidthAvg": 515, + "subsets": { + "latin": { + "xWidthAvg": 515 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500italic": { + "familyName": "Poppins", + "fullName": "Poppins Medium Italic", + "postscriptName": "Poppins-MediumItalic", + "category": "sans-serif", + "capHeight": 697, + "ascent": 1050, + "descent": -350, + "lineGap": 100, + "unitsPerEm": 1000, + "xHeight": 551, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300italic": { + "familyName": "Poppins", + "fullName": "Poppins Light Italic", + "postscriptName": "Poppins-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1050, + "descent": -350, + "lineGap": 100, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200italic": { + "familyName": "Poppins", + "fullName": "Poppins ExtraLight Italic", + "postscriptName": "Poppins-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1050, + "descent": -350, + "lineGap": 100, + "unitsPerEm": 1000, + "xHeight": 542, + "xWidthAvg": 491, + "subsets": { + "latin": { + "xWidthAvg": 491 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "100italic": { + "familyName": "Poppins", + "fullName": "Poppins Thin Italic", + "postscriptName": "Poppins-ThinItalic", + "category": "sans-serif", + "capHeight": 702, + "ascent": 1050, + "descent": -350, + "lineGap": 100, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "portLligatSans": { + "familyName": "Port Lligat Sans", + "fullName": "Port Lligat Sans", + "postscriptName": "PortLligatSans-Regular", + "category": "sans-serif", + "capHeight": 125, + "ascent": 860, + "descent": -211, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 178, + "xWidthAvg": 402, + "subsets": { + "latin": { + "xWidthAvg": 402 + }, + "thai": { + "xWidthAvg": 230 + } + }, + "variants": { + "regular": { + "familyName": "Port Lligat Sans", + "fullName": "Port Lligat Sans", + "postscriptName": "PortLligatSans-Regular", + "category": "sans-serif", + "capHeight": 125, + "ascent": 860, + "descent": -211, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 178, + "xWidthAvg": 402, + "subsets": { + "latin": { + "xWidthAvg": 402 + }, + "thai": { + "xWidthAvg": 230 + } + } + } + } + }, + "portLligatSlab": { + "familyName": "Port Lligat Slab", + "fullName": "Port Lligat Slab", + "postscriptName": "PortLligatSlab-Regular", + "category": "serif", + "capHeight": 99, + "ascent": 860, + "descent": -211, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 155, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 230 + } + }, + "variants": { + "regular": { + "familyName": "Port Lligat Slab", + "fullName": "Port Lligat Slab", + "postscriptName": "PortLligatSlab-Regular", + "category": "serif", + "capHeight": 99, + "ascent": 860, + "descent": -211, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 155, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 230 + } + } + } + } + }, + "pottaOne": { + "familyName": "Potta One", + "fullName": "Potta One Regular", + "postscriptName": "PottaOne-Regular", + "category": "display", + "capHeight": 780, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 565, + "xWidthAvg": 559, + "subsets": { + "latin": { + "xWidthAvg": 559 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Potta One", + "fullName": "Potta One Regular", + "postscriptName": "PottaOne-Regular", + "category": "display", + "capHeight": 780, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 565, + "xWidthAvg": 559, + "subsets": { + "latin": { + "xWidthAvg": 559 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "pragatiNarrow": { + "familyName": "Pragati Narrow", + "fullName": "Pragati Narrow", + "postscriptName": "PragatiNarrow-Regular", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1158, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 336, + "subsets": { + "latin": { + "xWidthAvg": 336 + }, + "thai": { + "xWidthAvg": 460 + } + }, + "variants": { + "700": { + "familyName": "Pragati Narrow", + "fullName": "Pragati Narrow Bold", + "postscriptName": "PragatiNarrow-Bold", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1158, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 362, + "subsets": { + "latin": { + "xWidthAvg": 362 + }, + "thai": { + "xWidthAvg": 460 + } + } + }, + "regular": { + "familyName": "Pragati Narrow", + "fullName": "Pragati Narrow", + "postscriptName": "PragatiNarrow-Regular", + "category": "sans-serif", + "capHeight": 630, + "ascent": 1158, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 336, + "subsets": { + "latin": { + "xWidthAvg": 336 + }, + "thai": { + "xWidthAvg": 460 + } + } + } + } + }, + "praise": { + "familyName": "Praise", + "fullName": "Praise Regular", + "postscriptName": "Praise-Regular", + "category": "handwriting", + "capHeight": 600, + "ascent": 850, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 425, + "xWidthAvg": 327, + "subsets": { + "latin": { + "xWidthAvg": 327 + }, + "thai": { + "xWidthAvg": 518 + } + }, + "variants": { + "regular": { + "familyName": "Praise", + "fullName": "Praise Regular", + "postscriptName": "Praise-Regular", + "category": "handwriting", + "capHeight": 600, + "ascent": 850, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 425, + "xWidthAvg": 327, + "subsets": { + "latin": { + "xWidthAvg": 327 + }, + "thai": { + "xWidthAvg": 518 + } + } + } + } + }, + "prata": { + "familyName": "Prata", + "fullName": "Prata Regular", + "postscriptName": "Prata-Regular", + "category": "serif", + "capHeight": 800, + "ascent": 993, + "descent": -362, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 252 + } + }, + "variants": { + "regular": { + "familyName": "Prata", + "fullName": "Prata Regular", + "postscriptName": "Prata-Regular", + "category": "serif", + "capHeight": 800, + "ascent": 993, + "descent": -362, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 252 + } + } + } + } + }, + "preahvihear": { + "familyName": "Preahvihear", + "fullName": "Preahvihear Regular", + "postscriptName": "Preahvihear-Regular", + "category": "sans-serif", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 1067, + "subsets": { + "latin": { + "xWidthAvg": 1067 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Preahvihear", + "fullName": "Preahvihear Regular", + "postscriptName": "Preahvihear-Regular", + "category": "sans-serif", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 1067, + "subsets": { + "latin": { + "xWidthAvg": 1067 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "pressStart2P": { + "familyName": "Press Start 2P", + "fullName": "Press Start 2P Regular", + "postscriptName": "PressStart2P-Regular", + "category": "display", + "capHeight": 1000, + "ascent": 1000, + "descent": 0, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 750, + "xWidthAvg": 1000, + "subsets": { + "latin": { + "xWidthAvg": 1000 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Press Start 2P", + "fullName": "Press Start 2P Regular", + "postscriptName": "PressStart2P-Regular", + "category": "display", + "capHeight": 1000, + "ascent": 1000, + "descent": 0, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 750, + "xWidthAvg": 1000, + "subsets": { + "latin": { + "xWidthAvg": 1000 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "pridi": { + "familyName": "Pridi", + "fullName": "Pridi Regular", + "postscriptName": "Pridi-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1100, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 520 + } + }, + "variants": { + "200": { + "familyName": "Pridi", + "fullName": "Pridi ExtraLight", + "postscriptName": "Pridi-ExtraLight", + "category": "serif", + "capHeight": 714, + "ascent": 1150, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 510 + } + } + }, + "300": { + "familyName": "Pridi", + "fullName": "Pridi Light", + "postscriptName": "Pridi-Light", + "category": "serif", + "capHeight": 714, + "ascent": 1100, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 515 + } + } + }, + "500": { + "familyName": "Pridi", + "fullName": "Pridi Medium", + "postscriptName": "Pridi-Medium", + "category": "serif", + "capHeight": 714, + "ascent": 1100, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 526 + } + } + }, + "600": { + "familyName": "Pridi", + "fullName": "Pridi SemiBold", + "postscriptName": "Pridi-SemiBold", + "category": "serif", + "capHeight": 714, + "ascent": 1100, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 531 + } + } + }, + "700": { + "familyName": "Pridi", + "fullName": "Pridi Bold", + "postscriptName": "Pridi-Bold", + "category": "serif", + "capHeight": 714, + "ascent": 1100, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 534 + } + } + }, + "regular": { + "familyName": "Pridi", + "fullName": "Pridi Regular", + "postscriptName": "Pridi-Regular", + "category": "serif", + "capHeight": 714, + "ascent": 1100, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 520 + } + } + } + } + }, + "princessSofia": { + "familyName": "Princess Sofia", + "fullName": "Princess Sofia", + "postscriptName": "PrincessSofia", + "category": "handwriting", + "capHeight": 858, + "ascent": 1010, + "descent": -574, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 670, + "xWidthAvg": 365, + "subsets": { + "latin": { + "xWidthAvg": 365 + }, + "thai": { + "xWidthAvg": 307 + } + }, + "variants": { + "regular": { + "familyName": "Princess Sofia", + "fullName": "Princess Sofia", + "postscriptName": "PrincessSofia", + "category": "handwriting", + "capHeight": 858, + "ascent": 1010, + "descent": -574, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 670, + "xWidthAvg": 365, + "subsets": { + "latin": { + "xWidthAvg": 365 + }, + "thai": { + "xWidthAvg": 307 + } + } + } + } + }, + "prociono": { + "familyName": "Prociono", + "fullName": "Prociono", + "postscriptName": "Prociono-Regular", + "category": "serif", + "capHeight": 738, + "ascent": 1008, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 203, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Prociono", + "fullName": "Prociono", + "postscriptName": "Prociono-Regular", + "category": "serif", + "capHeight": 738, + "ascent": 1008, + "descent": -212, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 203, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "prompt": { + "familyName": "Prompt", + "fullName": "Prompt-Regular", + "postscriptName": "Prompt-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1090, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 499, + "subsets": { + "latin": { + "xWidthAvg": 499 + }, + "thai": { + "xWidthAvg": 568 + } + }, + "variants": { + "100": { + "familyName": "Prompt", + "fullName": "Prompt-Thin", + "postscriptName": "Prompt-Thin", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1090, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 547 + } + } + }, + "200": { + "familyName": "Prompt", + "fullName": "Prompt-ExtraLight", + "postscriptName": "Prompt-ExtraLight", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1090, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 553 + } + } + }, + "300": { + "familyName": "Prompt", + "fullName": "Prompt-Light", + "postscriptName": "Prompt-Light", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1090, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 561 + } + } + }, + "500": { + "familyName": "Prompt", + "fullName": "Prompt-Medium", + "postscriptName": "Prompt-Medium", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1090, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 576 + } + } + }, + "600": { + "familyName": "Prompt", + "fullName": "Prompt-SemiBold", + "postscriptName": "Prompt-SemiBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1090, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 579 + } + } + }, + "700": { + "familyName": "Prompt", + "fullName": "Prompt Bold", + "postscriptName": "Prompt-Bold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1090, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 507, + "subsets": { + "latin": { + "xWidthAvg": 507 + }, + "thai": { + "xWidthAvg": 582 + } + } + }, + "800": { + "familyName": "Prompt", + "fullName": "Prompt-ExtraBold", + "postscriptName": "Prompt-ExtraBold", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1090, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 589 + } + } + }, + "900": { + "familyName": "Prompt", + "fullName": "Prompt-Black", + "postscriptName": "Prompt-Black", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1090, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 514, + "subsets": { + "latin": { + "xWidthAvg": 514 + }, + "thai": { + "xWidthAvg": 597 + } + } + }, + "regular": { + "familyName": "Prompt", + "fullName": "Prompt-Regular", + "postscriptName": "Prompt-Regular", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1090, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 499, + "subsets": { + "latin": { + "xWidthAvg": 499 + }, + "thai": { + "xWidthAvg": 568 + } + } + }, + "italic": { + "familyName": "Prompt", + "fullName": "Prompt Italic", + "postscriptName": "Prompt-Italic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1090, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 568 + } + } + }, + "900italic": { + "familyName": "Prompt", + "fullName": "Prompt Black Italic", + "postscriptName": "Prompt-BlackItalic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1090, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 517, + "subsets": { + "latin": { + "xWidthAvg": 517 + }, + "thai": { + "xWidthAvg": 597 + } + } + }, + "800italic": { + "familyName": "Prompt", + "fullName": "Prompt ExtraBold Italic", + "postscriptName": "Prompt-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1090, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 514, + "subsets": { + "latin": { + "xWidthAvg": 514 + }, + "thai": { + "xWidthAvg": 589 + } + } + }, + "700italic": { + "familyName": "Prompt", + "fullName": "Prompt Bold Bold Italic", + "postscriptName": "Prompt-BoldItalic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1090, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 511, + "subsets": { + "latin": { + "xWidthAvg": 511 + }, + "thai": { + "xWidthAvg": 582 + } + } + }, + "600italic": { + "familyName": "Prompt", + "fullName": "Prompt Semibold Italic", + "postscriptName": "Prompt-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1090, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 578 + } + } + }, + "500italic": { + "familyName": "Prompt", + "fullName": "Prompt Medium Italic", + "postscriptName": "Prompt-MediumItalic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1090, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 576 + } + } + }, + "300italic": { + "familyName": "Prompt", + "fullName": "Prompt Light Italic", + "postscriptName": "Prompt-LightItalic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1090, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 501, + "subsets": { + "latin": { + "xWidthAvg": 501 + }, + "thai": { + "xWidthAvg": 561 + } + } + }, + "200italic": { + "familyName": "Prompt", + "fullName": "Prompt ExtraLight Italic", + "postscriptName": "Prompt-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1090, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 553 + } + } + }, + "100italic": { + "familyName": "Prompt", + "fullName": "Prompt Thin Italic", + "postscriptName": "Prompt-ThinItalic", + "category": "sans-serif", + "capHeight": 714, + "ascent": 1090, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 547 + } + } + } + } + }, + "prostoOne": { + "familyName": "Prosto One", + "fullName": "Prosto One", + "postscriptName": "ProstoOne-Regular", + "category": "display", + "capHeight": 700, + "ascent": 940, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 562, + "subsets": { + "latin": { + "xWidthAvg": 562 + }, + "thai": { + "xWidthAvg": 330 + } + }, + "variants": { + "regular": { + "familyName": "Prosto One", + "fullName": "Prosto One", + "postscriptName": "ProstoOne-Regular", + "category": "display", + "capHeight": 700, + "ascent": 940, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 562, + "subsets": { + "latin": { + "xWidthAvg": 562 + }, + "thai": { + "xWidthAvg": 330 + } + } + } + } + }, + "protestGuerrilla": { + "familyName": "Protest Guerrilla", + "fullName": "Protest Guerrilla Regular", + "postscriptName": "ProtestGuerrilla-Regular", + "category": "display", + "capHeight": 720, + "ascent": 960, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 622 + } + }, + "variants": { + "regular": { + "familyName": "Protest Guerrilla", + "fullName": "Protest Guerrilla Regular", + "postscriptName": "ProtestGuerrilla-Regular", + "category": "display", + "capHeight": 720, + "ascent": 960, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 622 + } + } + } + } + }, + "protestRevolution": { + "familyName": "Protest Revolution", + "fullName": "Protest Revolution Regular", + "postscriptName": "ProtestRevolution-Regular", + "category": "display", + "capHeight": 720, + "ascent": 960, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Protest Revolution", + "fullName": "Protest Revolution Regular", + "postscriptName": "ProtestRevolution-Regular", + "category": "display", + "capHeight": 720, + "ascent": 960, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "protestRiot": { + "familyName": "Protest Riot", + "fullName": "Protest Riot Regular", + "postscriptName": "ProtestRiot-Regular", + "category": "display", + "capHeight": 720, + "ascent": 960, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 622 + } + }, + "variants": { + "regular": { + "familyName": "Protest Riot", + "fullName": "Protest Riot Regular", + "postscriptName": "ProtestRiot-Regular", + "category": "display", + "capHeight": 720, + "ascent": 960, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 622 + } + } + } + } + }, + "protestStrike": { + "familyName": "Protest Strike", + "fullName": "Protest Strike Regular", + "postscriptName": "ProtestStrike-Regular", + "category": "display", + "capHeight": 720, + "ascent": 960, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 622 + } + }, + "variants": { + "regular": { + "familyName": "Protest Strike", + "fullName": "Protest Strike Regular", + "postscriptName": "ProtestStrike-Regular", + "category": "display", + "capHeight": 720, + "ascent": 960, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 622 + } + } + } + } + }, + "prozaLibre": { + "familyName": "Proza Libre", + "fullName": "Proza Libre", + "postscriptName": "ProzaLibre-Regular", + "category": "sans-serif", + "capHeight": 1465, + "ascent": 1996, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1060, + "xWidthAvg": 992, + "subsets": { + "latin": { + "xWidthAvg": 992 + }, + "thai": { + "xWidthAvg": 452 + } + }, + "variants": { + "500": { + "familyName": "Proza Libre", + "fullName": "Proza Libre Medium", + "postscriptName": "ProzaLibre-Medium", + "category": "sans-serif", + "capHeight": 1465, + "ascent": 2030, + "descent": -750, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1060, + "xWidthAvg": 1011, + "subsets": { + "latin": { + "xWidthAvg": 1011 + }, + "thai": { + "xWidthAvg": 452 + } + } + }, + "600": { + "familyName": "Proza Libre", + "fullName": "Proza Libre SemiBold", + "postscriptName": "ProzaLibre-SemiBold", + "category": "sans-serif", + "capHeight": 1465, + "ascent": 2030, + "descent": -750, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1060, + "xWidthAvg": 1031, + "subsets": { + "latin": { + "xWidthAvg": 1031 + }, + "thai": { + "xWidthAvg": 452 + } + } + }, + "700": { + "familyName": "Proza Libre", + "fullName": "Proza Libre Bold", + "postscriptName": "ProzaLibre-Bold", + "category": "sans-serif", + "capHeight": 1465, + "ascent": 2030, + "descent": -750, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1060, + "xWidthAvg": 1050, + "subsets": { + "latin": { + "xWidthAvg": 1050 + }, + "thai": { + "xWidthAvg": 452 + } + } + }, + "800": { + "familyName": "Proza Libre", + "fullName": "Proza Libre ExtraBold", + "postscriptName": "ProzaLibre-ExtraBold", + "category": "sans-serif", + "capHeight": 1465, + "ascent": 1996, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1060, + "xWidthAvg": 1069, + "subsets": { + "latin": { + "xWidthAvg": 1069 + }, + "thai": { + "xWidthAvg": 452 + } + } + }, + "regular": { + "familyName": "Proza Libre", + "fullName": "Proza Libre", + "postscriptName": "ProzaLibre-Regular", + "category": "sans-serif", + "capHeight": 1465, + "ascent": 1996, + "descent": -800, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1060, + "xWidthAvg": 992, + "subsets": { + "latin": { + "xWidthAvg": 992 + }, + "thai": { + "xWidthAvg": 452 + } + } + }, + "italic": { + "familyName": "Proza Libre", + "fullName": "Proza Libre Italic", + "postscriptName": "ProzaLibre-Italic", + "category": "sans-serif", + "capHeight": 1465, + "ascent": 2030, + "descent": -750, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1060, + "xWidthAvg": 973, + "subsets": { + "latin": { + "xWidthAvg": 973 + }, + "thai": { + "xWidthAvg": 452 + } + } + }, + "800italic": { + "familyName": "Proza Libre", + "fullName": "Proza Libre ExtraBold Italic", + "postscriptName": "ProzaLibre-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 1465, + "ascent": 2030, + "descent": -750, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1060, + "xWidthAvg": 1066, + "subsets": { + "latin": { + "xWidthAvg": 1066 + }, + "thai": { + "xWidthAvg": 452 + } + } + }, + "700italic": { + "familyName": "Proza Libre", + "fullName": "Proza Libre Bold Italic", + "postscriptName": "ProzaLibre-BoldItalic", + "category": "sans-serif", + "capHeight": 1465, + "ascent": 2030, + "descent": -750, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1060, + "xWidthAvg": 1042, + "subsets": { + "latin": { + "xWidthAvg": 1042 + }, + "thai": { + "xWidthAvg": 452 + } + } + }, + "600italic": { + "familyName": "Proza Libre", + "fullName": "Proza Libre SemiBold Italic", + "postscriptName": "ProzaLibre-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 1465, + "ascent": 2030, + "descent": -750, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1060, + "xWidthAvg": 1019, + "subsets": { + "latin": { + "xWidthAvg": 1019 + }, + "thai": { + "xWidthAvg": 452 + } + } + }, + "500italic": { + "familyName": "Proza Libre", + "fullName": "Proza Libre Medium Italic", + "postscriptName": "ProzaLibre-MediumItalic", + "category": "sans-serif", + "capHeight": 1465, + "ascent": 2030, + "descent": -750, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1060, + "xWidthAvg": 996, + "subsets": { + "latin": { + "xWidthAvg": 996 + }, + "thai": { + "xWidthAvg": 452 + } + } + } + } + }, + "publicSans": { + "familyName": "Public Sans", + "fullName": "Public Sans Regular", + "postscriptName": "PublicSans-Regular", + "category": "sans-serif", + "capHeight": 1446, + "ascent": 1900, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1034, + "xWidthAvg": 935, + "subsets": { + "latin": { + "xWidthAvg": 935 + }, + "thai": { + "xWidthAvg": 1372 + } + }, + "variants": { + "100": { + "familyName": "Public Sans", + "fullName": "Public Sans Thin", + "postscriptName": "PublicSans-Thin", + "category": "sans-serif", + "capHeight": 1446, + "ascent": 1900, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1034, + "xWidthAvg": 911, + "subsets": { + "latin": { + "xWidthAvg": 911 + }, + "thai": { + "xWidthAvg": 1430 + } + } + }, + "200": { + "familyName": "Public Sans", + "fullName": "Public Sans ExtraLight", + "postscriptName": "PublicSans-ExtraLight", + "category": "sans-serif", + "capHeight": 1446, + "ascent": 1900, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1034, + "xWidthAvg": 921, + "subsets": { + "latin": { + "xWidthAvg": 921 + }, + "thai": { + "xWidthAvg": 1405 + } + } + }, + "300": { + "familyName": "Public Sans", + "fullName": "Public Sans Light", + "postscriptName": "PublicSans-Light", + "category": "sans-serif", + "capHeight": 1446, + "ascent": 1900, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1034, + "xWidthAvg": 928, + "subsets": { + "latin": { + "xWidthAvg": 928 + }, + "thai": { + "xWidthAvg": 1388 + } + } + }, + "500": { + "familyName": "Public Sans", + "fullName": "Public Sans Medium", + "postscriptName": "PublicSans-Medium", + "category": "sans-serif", + "capHeight": 1446, + "ascent": 1900, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1034, + "xWidthAvg": 941, + "subsets": { + "latin": { + "xWidthAvg": 941 + }, + "thai": { + "xWidthAvg": 1357 + } + } + }, + "600": { + "familyName": "Public Sans", + "fullName": "Public Sans SemiBold", + "postscriptName": "PublicSans-SemiBold", + "category": "sans-serif", + "capHeight": 1446, + "ascent": 1900, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1034, + "xWidthAvg": 948, + "subsets": { + "latin": { + "xWidthAvg": 948 + }, + "thai": { + "xWidthAvg": 1341 + } + } + }, + "700": { + "familyName": "Public Sans", + "fullName": "Public Sans Bold", + "postscriptName": "PublicSans-Bold", + "category": "sans-serif", + "capHeight": 1446, + "ascent": 1900, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1034, + "xWidthAvg": 959, + "subsets": { + "latin": { + "xWidthAvg": 959 + }, + "thai": { + "xWidthAvg": 1315 + } + } + }, + "800": { + "familyName": "Public Sans", + "fullName": "Public Sans ExtraBold", + "postscriptName": "PublicSans-ExtraBold", + "category": "sans-serif", + "capHeight": 1446, + "ascent": 1900, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1034, + "xWidthAvg": 969, + "subsets": { + "latin": { + "xWidthAvg": 969 + }, + "thai": { + "xWidthAvg": 1288 + } + } + }, + "900": { + "familyName": "Public Sans", + "fullName": "Public Sans Black", + "postscriptName": "PublicSans-Black", + "category": "sans-serif", + "capHeight": 1446, + "ascent": 1900, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1034, + "xWidthAvg": 980, + "subsets": { + "latin": { + "xWidthAvg": 980 + }, + "thai": { + "xWidthAvg": 1262 + } + } + }, + "regular": { + "familyName": "Public Sans", + "fullName": "Public Sans Regular", + "postscriptName": "PublicSans-Regular", + "category": "sans-serif", + "capHeight": 1446, + "ascent": 1900, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1034, + "xWidthAvg": 935, + "subsets": { + "latin": { + "xWidthAvg": 935 + }, + "thai": { + "xWidthAvg": 1372 + } + } + }, + "italic": { + "familyName": "Public Sans", + "fullName": "Public Sans Italic", + "postscriptName": "PublicSans-Italic", + "category": "sans-serif", + "capHeight": 1446, + "ascent": 1900, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1034, + "xWidthAvg": 905, + "subsets": { + "latin": { + "xWidthAvg": 905 + }, + "thai": { + "xWidthAvg": 1639 + } + } + }, + "900italic": { + "familyName": "Public Sans", + "fullName": "Public Sans Black Italic", + "postscriptName": "PublicSans-BlackItalic", + "category": "sans-serif", + "capHeight": 1446, + "ascent": 1900, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1034, + "xWidthAvg": 978, + "subsets": { + "latin": { + "xWidthAvg": 978 + }, + "thai": { + "xWidthAvg": 1527 + } + } + }, + "800italic": { + "familyName": "Public Sans", + "fullName": "Public Sans ExtraBold Italic", + "postscriptName": "PublicSans-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 1446, + "ascent": 1900, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1034, + "xWidthAvg": 961, + "subsets": { + "latin": { + "xWidthAvg": 961 + }, + "thai": { + "xWidthAvg": 1554 + } + } + }, + "700italic": { + "familyName": "Public Sans", + "fullName": "Public Sans Bold Italic", + "postscriptName": "PublicSans-BoldItalic", + "category": "sans-serif", + "capHeight": 1446, + "ascent": 1900, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1034, + "xWidthAvg": 943, + "subsets": { + "latin": { + "xWidthAvg": 943 + }, + "thai": { + "xWidthAvg": 1580 + } + } + }, + "600italic": { + "familyName": "Public Sans", + "fullName": "Public Sans SemiBold Italic", + "postscriptName": "PublicSans-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 1446, + "ascent": 1900, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1034, + "xWidthAvg": 926, + "subsets": { + "latin": { + "xWidthAvg": 926 + }, + "thai": { + "xWidthAvg": 1607 + } + } + }, + "500italic": { + "familyName": "Public Sans", + "fullName": "Public Sans Medium Italic", + "postscriptName": "PublicSans-MediumItalic", + "category": "sans-serif", + "capHeight": 1446, + "ascent": 1900, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1034, + "xWidthAvg": 915, + "subsets": { + "latin": { + "xWidthAvg": 915 + }, + "thai": { + "xWidthAvg": 1623 + } + } + }, + "300italic": { + "familyName": "Public Sans", + "fullName": "Public Sans Light Italic", + "postscriptName": "PublicSans-LightItalic", + "category": "sans-serif", + "capHeight": 1446, + "ascent": 1900, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1034, + "xWidthAvg": 895, + "subsets": { + "latin": { + "xWidthAvg": 895 + }, + "thai": { + "xWidthAvg": 1655 + } + } + }, + "200italic": { + "familyName": "Public Sans", + "fullName": "Public Sans ExtraLight Italic", + "postscriptName": "PublicSans-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 1446, + "ascent": 1900, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1034, + "xWidthAvg": 883, + "subsets": { + "latin": { + "xWidthAvg": 883 + }, + "thai": { + "xWidthAvg": 1671 + } + } + }, + "100italic": { + "familyName": "Public Sans", + "fullName": "Public Sans Thin Italic", + "postscriptName": "PublicSans-ThinItalic", + "category": "sans-serif", + "capHeight": 1446, + "ascent": 1900, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1034, + "xWidthAvg": 866, + "subsets": { + "latin": { + "xWidthAvg": 866 + }, + "thai": { + "xWidthAvg": 1697 + } + } + } + } + }, + "puppiesPlay": { + "familyName": "Puppies Play", + "fullName": "Puppies Play Regular", + "postscriptName": "PuppiesPlay-Regular", + "category": "handwriting", + "capHeight": 530, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 260, + "xWidthAvg": 236, + "subsets": { + "latin": { + "xWidthAvg": 236 + }, + "thai": { + "xWidthAvg": 484 + } + }, + "variants": { + "regular": { + "familyName": "Puppies Play", + "fullName": "Puppies Play Regular", + "postscriptName": "PuppiesPlay-Regular", + "category": "handwriting", + "capHeight": 530, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 260, + "xWidthAvg": 236, + "subsets": { + "latin": { + "xWidthAvg": 236 + }, + "thai": { + "xWidthAvg": 484 + } + } + } + } + }, + "puritan": { + "familyName": "Puritan", + "fullName": "Puritan Regular", + "postscriptName": "Puritan-Regular", + "category": "sans-serif", + "capHeight": 655, + "ascent": 881, + "descent": -256, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 507, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "700": { + "familyName": "Puritan", + "fullName": "Puritan Bold", + "postscriptName": "Puritan-Bold", + "category": "sans-serif", + "capHeight": 655, + "ascent": 896, + "descent": -256, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 507, + "xWidthAvg": 430, + "subsets": { + "latin": { + "xWidthAvg": 430 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "regular": { + "familyName": "Puritan", + "fullName": "Puritan Regular", + "postscriptName": "Puritan-Regular", + "category": "sans-serif", + "capHeight": 655, + "ascent": 881, + "descent": -256, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 507, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "italic": { + "familyName": "Puritan", + "fullName": "Puritan Italic", + "postscriptName": "Puritan-Italic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 880, + "descent": -256, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 507, + "xWidthAvg": 430, + "subsets": { + "latin": { + "xWidthAvg": 430 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "700italic": { + "familyName": "Puritan", + "fullName": "Puritan Bold Italic", + "postscriptName": "Puritan-BoldItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 896, + "descent": -256, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 507, + "xWidthAvg": 430, + "subsets": { + "latin": { + "xWidthAvg": 430 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "purplePurse": { + "familyName": "Purple Purse", + "fullName": "Purple Purse", + "postscriptName": "PurplePurse-Regular", + "category": "display", + "capHeight": 1419, + "ascent": 1870, + "descent": -690, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 856, + "xWidthAvg": 930, + "subsets": { + "latin": { + "xWidthAvg": 930 + }, + "thai": { + "xWidthAvg": 532 + } + }, + "variants": { + "regular": { + "familyName": "Purple Purse", + "fullName": "Purple Purse", + "postscriptName": "PurplePurse-Regular", + "category": "display", + "capHeight": 1419, + "ascent": 1870, + "descent": -690, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 856, + "xWidthAvg": 930, + "subsets": { + "latin": { + "xWidthAvg": 930 + }, + "thai": { + "xWidthAvg": 532 + } + } + } + } + }, + "qahiri": { + "familyName": "Qahiri", + "fullName": "Qahiri Regular", + "postscriptName": "Qahiri-Regular", + "category": "sans-serif", + "capHeight": 560, + "ascent": 600, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 750, + "xHeight": 230, + "xWidthAvg": 192, + "subsets": { + "latin": { + "xWidthAvg": 192 + }, + "thai": { + "xWidthAvg": 330 + } + }, + "variants": { + "regular": { + "familyName": "Qahiri", + "fullName": "Qahiri Regular", + "postscriptName": "Qahiri-Regular", + "category": "sans-serif", + "capHeight": 560, + "ascent": 600, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 750, + "xHeight": 230, + "xWidthAvg": 192, + "subsets": { + "latin": { + "xWidthAvg": 192 + }, + "thai": { + "xWidthAvg": 330 + } + } + } + } + }, + "quando": { + "familyName": "Quando", + "fullName": "Quando-Regular", + "postscriptName": "Quando-Regular", + "category": "serif", + "capHeight": 1533, + "ascent": 2030, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1200, + "xWidthAvg": 1120, + "subsets": { + "latin": { + "xWidthAvg": 1120 + }, + "thai": { + "xWidthAvg": 1699 + } + }, + "variants": { + "regular": { + "familyName": "Quando", + "fullName": "Quando-Regular", + "postscriptName": "Quando-Regular", + "category": "serif", + "capHeight": 1533, + "ascent": 2030, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1200, + "xWidthAvg": 1120, + "subsets": { + "latin": { + "xWidthAvg": 1120 + }, + "thai": { + "xWidthAvg": 1699 + } + } + } + } + }, + "quantico": { + "familyName": "Quantico", + "fullName": "Quantico", + "postscriptName": "Quantico-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1063, + "descent": -367, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 260 + } + }, + "variants": { + "700": { + "familyName": "Quantico", + "fullName": "Quantico-Bold", + "postscriptName": "Quantico-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1063, + "descent": -367, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 260 + } + } + }, + "regular": { + "familyName": "Quantico", + "fullName": "Quantico", + "postscriptName": "Quantico-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1063, + "descent": -367, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 260 + } + } + }, + "italic": { + "familyName": "Quantico", + "fullName": "Quantico-Italic", + "postscriptName": "Quantico-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1063, + "descent": -367, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 476, + "subsets": { + "latin": { + "xWidthAvg": 476 + }, + "thai": { + "xWidthAvg": 260 + } + } + }, + "700italic": { + "familyName": "Quantico", + "fullName": "Quantico-BoldItalic", + "postscriptName": "Quantico-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1063, + "descent": -367, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 260 + } + } + } + } + }, + "quattrocento": { + "familyName": "Quattrocento", + "fullName": "Quattrocento", + "postscriptName": "Quattrocento", + "category": "serif", + "capHeight": 660, + "ascent": 848, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 459, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 266 + } + }, + "variants": { + "700": { + "familyName": "Quattrocento", + "fullName": "Quattrocento Bold", + "postscriptName": "Quattrocento-Bold", + "category": "serif", + "capHeight": 660, + "ascent": 848, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 459, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 266 + } + } + }, + "regular": { + "familyName": "Quattrocento", + "fullName": "Quattrocento", + "postscriptName": "Quattrocento", + "category": "serif", + "capHeight": 660, + "ascent": 848, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 459, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 266 + } + } + } + } + }, + "quattrocentoSans": { + "familyName": "Quattrocento Sans", + "fullName": "Quattrocento Sans", + "postscriptName": "QuattrocentoSans", + "category": "sans-serif", + "capHeight": 660, + "ascent": 848, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 266 + } + }, + "variants": { + "700": { + "familyName": "Quattrocento Sans", + "fullName": "Quattrocento Sans Bold", + "postscriptName": "QuattrocentoSans-Bold", + "category": "sans-serif", + "capHeight": 660, + "ascent": 848, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 266 + } + } + }, + "regular": { + "familyName": "Quattrocento Sans", + "fullName": "Quattrocento Sans", + "postscriptName": "QuattrocentoSans", + "category": "sans-serif", + "capHeight": 660, + "ascent": 848, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 266 + } + } + }, + "italic": { + "familyName": "Quattrocento Sans", + "fullName": "Quattrocento Sans Italic", + "postscriptName": "QuattrocentoSans-Italic", + "category": "sans-serif", + "capHeight": 660, + "ascent": 848, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 266 + } + } + }, + "700italic": { + "familyName": "Quattrocento Sans", + "fullName": "Quattrocento Sans Bold Italic", + "postscriptName": "QuattrocentoSans-BoldItalic", + "category": "sans-serif", + "capHeight": 660, + "ascent": 848, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 266 + } + } + } + } + }, + "questrial": { + "familyName": "Questrial", + "fullName": "Questrial Regular", + "postscriptName": "Questrial-Regular", + "category": "sans-serif", + "capHeight": 662, + "ascent": 820, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 524 + } + }, + "variants": { + "regular": { + "familyName": "Questrial", + "fullName": "Questrial Regular", + "postscriptName": "Questrial-Regular", + "category": "sans-serif", + "capHeight": 662, + "ascent": 820, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 524 + } + } + } + } + }, + "quicksand": { + "familyName": "Quicksand", + "fullName": "Quicksand Regular", + "postscriptName": "Quicksand-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 503, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 584 + } + }, + "variants": { + "300": { + "familyName": "Quicksand", + "fullName": "Quicksand Light", + "postscriptName": "Quicksand-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 503, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "500": { + "familyName": "Quicksand", + "fullName": "Quicksand Medium", + "postscriptName": "Quicksand-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 503, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "600": { + "familyName": "Quicksand", + "fullName": "Quicksand SemiBold", + "postscriptName": "Quicksand-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 503, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "700": { + "familyName": "Quicksand", + "fullName": "Quicksand Bold", + "postscriptName": "Quicksand-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 503, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "regular": { + "familyName": "Quicksand", + "fullName": "Quicksand Regular", + "postscriptName": "Quicksand-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 503, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 584 + } + } + } + } + }, + "quintessential": { + "familyName": "Quintessential", + "fullName": "Quintessential", + "postscriptName": "Quintessential-Regular", + "category": "handwriting", + "capHeight": 1489, + "ascent": 2341, + "descent": -799, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1057, + "xWidthAvg": 809, + "subsets": { + "latin": { + "xWidthAvg": 809 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "Quintessential", + "fullName": "Quintessential", + "postscriptName": "Quintessential-Regular", + "category": "handwriting", + "capHeight": 1489, + "ascent": 2341, + "descent": -799, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1057, + "xWidthAvg": 809, + "subsets": { + "latin": { + "xWidthAvg": 809 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "qwigley": { + "familyName": "Qwigley", + "fullName": "Qwigley Regular", + "postscriptName": "Qwigley-Regular", + "category": "handwriting", + "capHeight": 460, + "ascent": 750, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 300, + "xWidthAvg": 252, + "subsets": { + "latin": { + "xWidthAvg": 252 + }, + "thai": { + "xWidthAvg": 185 + } + }, + "variants": { + "regular": { + "familyName": "Qwigley", + "fullName": "Qwigley Regular", + "postscriptName": "Qwigley-Regular", + "category": "handwriting", + "capHeight": 460, + "ascent": 750, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 300, + "xWidthAvg": 252, + "subsets": { + "latin": { + "xWidthAvg": 252 + }, + "thai": { + "xWidthAvg": 185 + } + } + } + } + }, + "qwitcherGrypen": { + "familyName": "Qwitcher Grypen", + "fullName": "Qwitcher Grypen Regular", + "postscriptName": "QwitcherGrypen-Regular", + "category": "handwriting", + "capHeight": 500, + "ascent": 800, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 220, + "xWidthAvg": 242, + "subsets": { + "latin": { + "xWidthAvg": 242 + }, + "thai": { + "xWidthAvg": 518 + } + }, + "variants": { + "700": { + "familyName": "Qwitcher Grypen", + "fullName": "Qwitcher Grypen Bold", + "postscriptName": "QwitcherGrypen-Bold", + "category": "handwriting", + "capHeight": 500, + "ascent": 800, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 230, + "xWidthAvg": 267, + "subsets": { + "latin": { + "xWidthAvg": 267 + }, + "thai": { + "xWidthAvg": 518 + } + } + }, + "regular": { + "familyName": "Qwitcher Grypen", + "fullName": "Qwitcher Grypen Regular", + "postscriptName": "QwitcherGrypen-Regular", + "category": "handwriting", + "capHeight": 500, + "ascent": 800, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 220, + "xWidthAvg": 242, + "subsets": { + "latin": { + "xWidthAvg": 242 + }, + "thai": { + "xWidthAvg": 518 + } + } + } + } + }, + "rEM": { + "familyName": "REM", + "fullName": "REM Regular", + "postscriptName": "REM-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 503, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 586 + } + }, + "variants": { + "100": { + "familyName": "REM", + "fullName": "REM Thin", + "postscriptName": "REM-Thin", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 586 + } + } + }, + "200": { + "familyName": "REM", + "fullName": "REM ExtraLight", + "postscriptName": "REM-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 586 + } + } + }, + "300": { + "familyName": "REM", + "fullName": "REM Light", + "postscriptName": "REM-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 586 + } + } + }, + "500": { + "familyName": "REM", + "fullName": "REM Medium", + "postscriptName": "REM-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 586 + } + } + }, + "600": { + "familyName": "REM", + "fullName": "REM SemiBold", + "postscriptName": "REM-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 513, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 586 + } + } + }, + "700": { + "familyName": "REM", + "fullName": "REM Bold", + "postscriptName": "REM-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 508, + "subsets": { + "latin": { + "xWidthAvg": 508 + }, + "thai": { + "xWidthAvg": 586 + } + } + }, + "800": { + "familyName": "REM", + "fullName": "REM ExtraBold", + "postscriptName": "REM-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 521, + "xWidthAvg": 521, + "subsets": { + "latin": { + "xWidthAvg": 521 + }, + "thai": { + "xWidthAvg": 586 + } + } + }, + "900": { + "familyName": "REM", + "fullName": "REM Black", + "postscriptName": "REM-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 531, + "subsets": { + "latin": { + "xWidthAvg": 531 + }, + "thai": { + "xWidthAvg": 586 + } + } + }, + "regular": { + "familyName": "REM", + "fullName": "REM Regular", + "postscriptName": "REM-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 503, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 586 + } + } + }, + "italic": { + "familyName": "REM", + "fullName": "REM Italic", + "postscriptName": "REM-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 503, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 667 + } + } + }, + "900italic": { + "familyName": "REM", + "fullName": "REM Black Italic", + "postscriptName": "REM-BlackItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 530, + "subsets": { + "latin": { + "xWidthAvg": 530 + }, + "thai": { + "xWidthAvg": 668 + } + } + }, + "800italic": { + "familyName": "REM", + "fullName": "REM ExtraBold Italic", + "postscriptName": "REM-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 521, + "xWidthAvg": 520, + "subsets": { + "latin": { + "xWidthAvg": 520 + }, + "thai": { + "xWidthAvg": 668 + } + } + }, + "700italic": { + "familyName": "REM", + "fullName": "REM Bold Italic", + "postscriptName": "REM-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 516, + "xWidthAvg": 508, + "subsets": { + "latin": { + "xWidthAvg": 508 + }, + "thai": { + "xWidthAvg": 667 + } + } + }, + "600italic": { + "familyName": "REM", + "fullName": "REM SemiBold Italic", + "postscriptName": "REM-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 513, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 667 + } + } + }, + "500italic": { + "familyName": "REM", + "fullName": "REM Medium Italic", + "postscriptName": "REM-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 667 + } + } + }, + "300italic": { + "familyName": "REM", + "fullName": "REM Light Italic", + "postscriptName": "REM-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 499, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 667 + } + } + }, + "200italic": { + "familyName": "REM", + "fullName": "REM ExtraLight Italic", + "postscriptName": "REM-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 495, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 667 + } + } + }, + "100italic": { + "familyName": "REM", + "fullName": "REM Thin Italic", + "postscriptName": "REM-ThinItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 667 + } + } + } + } + }, + "racingSansOne": { + "familyName": "Racing Sans One", + "fullName": "Racing Sans One", + "postscriptName": "RacingSansOne-Regular", + "category": "display", + "capHeight": 635, + "ascent": 976, + "descent": -284, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 430, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 227 + } + }, + "variants": { + "regular": { + "familyName": "Racing Sans One", + "fullName": "Racing Sans One", + "postscriptName": "RacingSansOne-Regular", + "category": "display", + "capHeight": 635, + "ascent": 976, + "descent": -284, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 430, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 227 + } + } + } + } + }, + "radioCanada": { + "familyName": "Radio Canada", + "fullName": "Radio Canada Regular", + "postscriptName": "RadioCanada-Regular", + "category": "sans-serif", + "capHeight": 690, + "ascent": 945, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "300": { + "familyName": "Radio Canada", + "fullName": "Radio Canada Light", + "postscriptName": "RadioCanada-Light", + "category": "sans-serif", + "capHeight": 690, + "ascent": 945, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Radio Canada", + "fullName": "Radio Canada Medium", + "postscriptName": "RadioCanada-Medium", + "category": "sans-serif", + "capHeight": 690, + "ascent": 945, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Radio Canada", + "fullName": "Radio Canada SemiBold", + "postscriptName": "RadioCanada-SemiBold", + "category": "sans-serif", + "capHeight": 690, + "ascent": 945, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Radio Canada", + "fullName": "Radio Canada Bold", + "postscriptName": "RadioCanada-Bold", + "category": "sans-serif", + "capHeight": 690, + "ascent": 945, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Radio Canada", + "fullName": "Radio Canada Regular", + "postscriptName": "RadioCanada-Regular", + "category": "sans-serif", + "capHeight": 690, + "ascent": 945, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "italic": { + "familyName": "Radio Canada", + "fullName": "Radio Canada Italic", + "postscriptName": "RadioCanada-Italic", + "category": "sans-serif", + "capHeight": 690, + "ascent": 945, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700italic": { + "familyName": "Radio Canada", + "fullName": "Radio Canada Bold Italic", + "postscriptName": "RadioCanada-BoldItalic", + "category": "sans-serif", + "capHeight": 690, + "ascent": 945, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600italic": { + "familyName": "Radio Canada", + "fullName": "Radio Canada SemiBold Italic", + "postscriptName": "RadioCanada-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 690, + "ascent": 945, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 522, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500italic": { + "familyName": "Radio Canada", + "fullName": "Radio Canada Medium Italic", + "postscriptName": "RadioCanada-MediumItalic", + "category": "sans-serif", + "capHeight": 690, + "ascent": 945, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300italic": { + "familyName": "Radio Canada", + "fullName": "Radio Canada Light Italic", + "postscriptName": "RadioCanada-LightItalic", + "category": "sans-serif", + "capHeight": 690, + "ascent": 945, + "descent": -255, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "radioCanadaBig": { + "familyName": "Radio Canada Big", + "fullName": "Radio Canada Big Regular", + "postscriptName": "RadioCanadaBig-Regular", + "category": "sans-serif", + "capHeight": 690, + "ascent": 995, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "500": { + "familyName": "Radio Canada Big", + "fullName": "Radio Canada Big Medium", + "postscriptName": "RadioCanadaBig-Medium", + "category": "sans-serif", + "capHeight": 690, + "ascent": 995, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 449, + "subsets": { + "latin": { + "xWidthAvg": 449 + }, + "thai": { + "xWidthAvg": 625 + } + } + }, + "600": { + "familyName": "Radio Canada Big", + "fullName": "Radio Canada Big SemiBold", + "postscriptName": "RadioCanadaBig-SemiBold", + "category": "sans-serif", + "capHeight": 690, + "ascent": 995, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 651 + } + } + }, + "700": { + "familyName": "Radio Canada Big", + "fullName": "Radio Canada Big Bold", + "postscriptName": "RadioCanadaBig-Bold", + "category": "sans-serif", + "capHeight": 690, + "ascent": 995, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 676 + } + } + }, + "regular": { + "familyName": "Radio Canada Big", + "fullName": "Radio Canada Big Regular", + "postscriptName": "RadioCanadaBig-Regular", + "category": "sans-serif", + "capHeight": 690, + "ascent": 995, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "italic": { + "familyName": "Radio Canada Big", + "fullName": "Radio Canada Big Italic", + "postscriptName": "RadioCanadaBig-Italic", + "category": "sans-serif", + "capHeight": 690, + "ascent": 995, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 449, + "subsets": { + "latin": { + "xWidthAvg": 449 + }, + "thai": { + "xWidthAvg": 597 + } + } + }, + "700italic": { + "familyName": "Radio Canada Big", + "fullName": "Radio Canada Big Bold Italic", + "postscriptName": "RadioCanadaBig-BoldItalic", + "category": "sans-serif", + "capHeight": 690, + "ascent": 995, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600italic": { + "familyName": "Radio Canada Big", + "fullName": "Radio Canada Big SemiBold Italic", + "postscriptName": "RadioCanadaBig-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 690, + "ascent": 995, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 599 + } + } + }, + "500italic": { + "familyName": "Radio Canada Big", + "fullName": "Radio Canada Big Medium Italic", + "postscriptName": "RadioCanadaBig-MediumItalic", + "category": "sans-serif", + "capHeight": 690, + "ascent": 995, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 598 + } + } + } + } + }, + "radley": { + "familyName": "Radley", + "fullName": "Radley Regular", + "postscriptName": "Radley-Regular", + "category": "serif", + "capHeight": 1302, + "ascent": 1973, + "descent": -615, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 899, + "xWidthAvg": 902, + "subsets": { + "latin": { + "xWidthAvg": 902 + }, + "thai": { + "xWidthAvg": 1226 + } + }, + "variants": { + "regular": { + "familyName": "Radley", + "fullName": "Radley Regular", + "postscriptName": "Radley-Regular", + "category": "serif", + "capHeight": 1302, + "ascent": 1973, + "descent": -615, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 899, + "xWidthAvg": 902, + "subsets": { + "latin": { + "xWidthAvg": 902 + }, + "thai": { + "xWidthAvg": 1226 + } + } + }, + "italic": { + "familyName": "Radley", + "fullName": "Radley Italic", + "postscriptName": "Radley-Italic", + "category": "serif", + "capHeight": 1264, + "ascent": 1973, + "descent": -615, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 891, + "xWidthAvg": 881, + "subsets": { + "latin": { + "xWidthAvg": 881 + }, + "thai": { + "xWidthAvg": 451 + } + } + } + } + }, + "rajdhani": { + "familyName": "Rajdhani", + "fullName": "Rajdhani Regular", + "postscriptName": "Rajdhani-Regular", + "category": "sans-serif", + "capHeight": 643, + "ascent": 930, + "descent": -346, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 406, + "subsets": { + "latin": { + "xWidthAvg": 406 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "300": { + "familyName": "Rajdhani", + "fullName": "Rajdhani Light", + "postscriptName": "Rajdhani-Light", + "category": "sans-serif", + "capHeight": 643, + "ascent": 930, + "descent": -346, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 404, + "subsets": { + "latin": { + "xWidthAvg": 404 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Rajdhani", + "fullName": "Rajdhani Medium", + "postscriptName": "Rajdhani-Medium", + "category": "sans-serif", + "capHeight": 643, + "ascent": 930, + "descent": -346, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 409, + "subsets": { + "latin": { + "xWidthAvg": 409 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Rajdhani", + "fullName": "Rajdhani SemiBold", + "postscriptName": "Rajdhani-SemiBold", + "category": "sans-serif", + "capHeight": 643, + "ascent": 930, + "descent": -346, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Rajdhani", + "fullName": "Rajdhani Bold", + "postscriptName": "Rajdhani-Bold", + "category": "sans-serif", + "capHeight": 643, + "ascent": 930, + "descent": -346, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 415, + "subsets": { + "latin": { + "xWidthAvg": 415 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Rajdhani", + "fullName": "Rajdhani Regular", + "postscriptName": "Rajdhani-Regular", + "category": "sans-serif", + "capHeight": 643, + "ascent": 930, + "descent": -346, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 406, + "subsets": { + "latin": { + "xWidthAvg": 406 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "rakkas": { + "familyName": "Rakkas", + "fullName": "Rakkas Regular", + "postscriptName": "Rakkas-Regular", + "category": "display", + "capHeight": 670, + "ascent": 1046, + "descent": -445, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 398, + "subsets": { + "latin": { + "xWidthAvg": 398 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Rakkas", + "fullName": "Rakkas Regular", + "postscriptName": "Rakkas-Regular", + "category": "display", + "capHeight": 670, + "ascent": 1046, + "descent": -445, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 398, + "subsets": { + "latin": { + "xWidthAvg": 398 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "raleway": { + "familyName": "Raleway", + "fullName": "Raleway Regular", + "postscriptName": "Raleway-Regular", + "category": "sans-serif", + "capHeight": 710, + "ascent": 940, + "descent": -234, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 608 + } + }, + "variants": { + "100": { + "familyName": "Raleway", + "fullName": "Raleway Thin", + "postscriptName": "Raleway-Thin", + "category": "sans-serif", + "capHeight": 710, + "ascent": 940, + "descent": -234, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 608 + } + } + }, + "200": { + "familyName": "Raleway", + "fullName": "Raleway ExtraLight", + "postscriptName": "Raleway-ExtraLight", + "category": "sans-serif", + "capHeight": 710, + "ascent": 940, + "descent": -234, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 608 + } + } + }, + "300": { + "familyName": "Raleway", + "fullName": "Raleway Light", + "postscriptName": "Raleway-Light", + "category": "sans-serif", + "capHeight": 710, + "ascent": 940, + "descent": -234, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 608 + } + } + }, + "500": { + "familyName": "Raleway", + "fullName": "Raleway Medium", + "postscriptName": "Raleway-Medium", + "category": "sans-serif", + "capHeight": 710, + "ascent": 940, + "descent": -234, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 608 + } + } + }, + "600": { + "familyName": "Raleway", + "fullName": "Raleway SemiBold", + "postscriptName": "Raleway-SemiBold", + "category": "sans-serif", + "capHeight": 710, + "ascent": 940, + "descent": -234, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 608 + } + } + }, + "700": { + "familyName": "Raleway", + "fullName": "Raleway Bold", + "postscriptName": "Raleway-Bold", + "category": "sans-serif", + "capHeight": 710, + "ascent": 940, + "descent": -234, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 608 + } + } + }, + "800": { + "familyName": "Raleway", + "fullName": "Raleway ExtraBold", + "postscriptName": "Raleway-ExtraBold", + "category": "sans-serif", + "capHeight": 710, + "ascent": 940, + "descent": -234, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 608 + } + } + }, + "900": { + "familyName": "Raleway", + "fullName": "Raleway Black", + "postscriptName": "Raleway-Black", + "category": "sans-serif", + "capHeight": 710, + "ascent": 940, + "descent": -234, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 496, + "subsets": { + "latin": { + "xWidthAvg": 496 + }, + "thai": { + "xWidthAvg": 608 + } + } + }, + "regular": { + "familyName": "Raleway", + "fullName": "Raleway Regular", + "postscriptName": "Raleway-Regular", + "category": "sans-serif", + "capHeight": 710, + "ascent": 940, + "descent": -234, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 608 + } + } + }, + "italic": { + "familyName": "Raleway", + "fullName": "Raleway Italic", + "postscriptName": "Raleway-Italic", + "category": "sans-serif", + "capHeight": 710, + "ascent": 940, + "descent": -234, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 608 + } + } + }, + "900italic": { + "familyName": "Raleway", + "fullName": "Raleway Black Italic", + "postscriptName": "Raleway-BlackItalic", + "category": "sans-serif", + "capHeight": 710, + "ascent": 940, + "descent": -234, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 608 + } + } + }, + "800italic": { + "familyName": "Raleway", + "fullName": "Raleway ExtraBold Italic", + "postscriptName": "Raleway-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 710, + "ascent": 940, + "descent": -234, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 476, + "subsets": { + "latin": { + "xWidthAvg": 476 + }, + "thai": { + "xWidthAvg": 608 + } + } + }, + "700italic": { + "familyName": "Raleway", + "fullName": "Raleway Bold Italic", + "postscriptName": "Raleway-BoldItalic", + "category": "sans-serif", + "capHeight": 710, + "ascent": 940, + "descent": -234, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 608 + } + } + }, + "600italic": { + "familyName": "Raleway", + "fullName": "Raleway SemiBold Italic", + "postscriptName": "Raleway-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 710, + "ascent": 940, + "descent": -234, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 608 + } + } + }, + "500italic": { + "familyName": "Raleway", + "fullName": "Raleway Medium Italic", + "postscriptName": "Raleway-MediumItalic", + "category": "sans-serif", + "capHeight": 710, + "ascent": 940, + "descent": -234, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 608 + } + } + }, + "300italic": { + "familyName": "Raleway", + "fullName": "Raleway Light Italic", + "postscriptName": "Raleway-LightItalic", + "category": "sans-serif", + "capHeight": 710, + "ascent": 940, + "descent": -234, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 608 + } + } + }, + "200italic": { + "familyName": "Raleway", + "fullName": "Raleway ExtraLight Italic", + "postscriptName": "Raleway-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 710, + "ascent": 940, + "descent": -234, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 608 + } + } + }, + "100italic": { + "familyName": "Raleway", + "fullName": "Raleway Thin Italic", + "postscriptName": "Raleway-ThinItalic", + "category": "sans-serif", + "capHeight": 710, + "ascent": 940, + "descent": -234, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 519, + "xWidthAvg": 432, + "subsets": { + "latin": { + "xWidthAvg": 432 + }, + "thai": { + "xWidthAvg": 608 + } + } + } + } + }, + "ralewayDots": { + "familyName": "Raleway Dots", + "fullName": "Raleway Dots", + "postscriptName": "RalewayDots-Regular", + "category": "display", + "capHeight": 710, + "ascent": 918, + "descent": -213, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 0 + } + }, + "variants": { + "regular": { + "familyName": "Raleway Dots", + "fullName": "Raleway Dots", + "postscriptName": "RalewayDots-Regular", + "category": "display", + "capHeight": 710, + "ascent": 918, + "descent": -213, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 0 + } + } + } + } + }, + "ramabhadra": { + "familyName": "Ramabhadra", + "fullName": "Ramabhadra", + "postscriptName": "Ramabhadra", + "category": "sans-serif", + "capHeight": 571, + "ascent": 1101, + "descent": -474, + "lineGap": 0, + "unitsPerEm": 830, + "xHeight": 439, + "xWidthAvg": 396, + "subsets": { + "latin": { + "xWidthAvg": 396 + }, + "thai": { + "xWidthAvg": 299 + } + }, + "variants": { + "regular": { + "familyName": "Ramabhadra", + "fullName": "Ramabhadra", + "postscriptName": "Ramabhadra", + "category": "sans-serif", + "capHeight": 571, + "ascent": 1101, + "descent": -474, + "lineGap": 0, + "unitsPerEm": 830, + "xHeight": 439, + "xWidthAvg": 396, + "subsets": { + "latin": { + "xWidthAvg": 396 + }, + "thai": { + "xWidthAvg": 299 + } + } + } + } + }, + "ramaraja": { + "familyName": "Ramaraja", + "fullName": "Ramaraja", + "postscriptName": "Ramaraja", + "category": "serif", + "capHeight": 439, + "ascent": 741, + "descent": -544, + "lineGap": 0, + "unitsPerEm": 750, + "xHeight": 293, + "xWidthAvg": 276, + "subsets": { + "latin": { + "xWidthAvg": 276 + }, + "thai": { + "xWidthAvg": 438 + } + }, + "variants": { + "regular": { + "familyName": "Ramaraja", + "fullName": "Ramaraja", + "postscriptName": "Ramaraja", + "category": "serif", + "capHeight": 439, + "ascent": 741, + "descent": -544, + "lineGap": 0, + "unitsPerEm": 750, + "xHeight": 293, + "xWidthAvg": 276, + "subsets": { + "latin": { + "xWidthAvg": 276 + }, + "thai": { + "xWidthAvg": 438 + } + } + } + } + }, + "rambla": { + "familyName": "Rambla", + "fullName": "Rambla", + "postscriptName": "Rambla-Regular", + "category": "sans-serif", + "capHeight": 668, + "ascent": 929, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 409, + "subsets": { + "latin": { + "xWidthAvg": 409 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "700": { + "familyName": "Rambla", + "fullName": "Rambla Bold", + "postscriptName": "Rambla-Bold", + "category": "sans-serif", + "capHeight": 669, + "ascent": 929, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 421, + "subsets": { + "latin": { + "xWidthAvg": 421 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Rambla", + "fullName": "Rambla", + "postscriptName": "Rambla-Regular", + "category": "sans-serif", + "capHeight": 668, + "ascent": 929, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 409, + "subsets": { + "latin": { + "xWidthAvg": 409 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Rambla", + "fullName": "Rambla Italic", + "postscriptName": "Rambla-Italic", + "category": "sans-serif", + "capHeight": 668, + "ascent": 929, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 506, + "xWidthAvg": 407, + "subsets": { + "latin": { + "xWidthAvg": 407 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700italic": { + "familyName": "Rambla", + "fullName": "Rambla Bold Italic", + "postscriptName": "Rambla-BoldItalic", + "category": "sans-serif", + "capHeight": 669, + "ascent": 929, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "rammettoOne": { + "familyName": "Rammetto One", + "fullName": "Rammetto One Regular", + "postscriptName": "RammettoOne-Regular", + "category": "display", + "capHeight": 1622, + "ascent": 2437, + "descent": -1022, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1243, + "xWidthAvg": 1289, + "subsets": { + "latin": { + "xWidthAvg": 1289 + }, + "thai": { + "xWidthAvg": 1963 + } + }, + "variants": { + "regular": { + "familyName": "Rammetto One", + "fullName": "Rammetto One Regular", + "postscriptName": "RammettoOne-Regular", + "category": "display", + "capHeight": 1622, + "ascent": 2437, + "descent": -1022, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1243, + "xWidthAvg": 1289, + "subsets": { + "latin": { + "xWidthAvg": 1289 + }, + "thai": { + "xWidthAvg": 1963 + } + } + } + } + }, + "rampartOne": { + "familyName": "Rampart One", + "fullName": "Rampart One Regular", + "postscriptName": "RampartOne-Regular", + "category": "display", + "capHeight": 764, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 555, + "xWidthAvg": 533, + "subsets": { + "latin": { + "xWidthAvg": 533 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Rampart One", + "fullName": "Rampart One Regular", + "postscriptName": "RampartOne-Regular", + "category": "display", + "capHeight": 764, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 555, + "xWidthAvg": 533, + "subsets": { + "latin": { + "xWidthAvg": 533 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "ranchers": { + "familyName": "Ranchers", + "fullName": "Ranchers", + "postscriptName": "Ranchers-Regular", + "category": "display", + "capHeight": 818, + "ascent": 1045, + "descent": -205, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 598, + "xWidthAvg": 381, + "subsets": { + "latin": { + "xWidthAvg": 381 + }, + "thai": { + "xWidthAvg": 626 + } + }, + "variants": { + "regular": { + "familyName": "Ranchers", + "fullName": "Ranchers", + "postscriptName": "Ranchers-Regular", + "category": "display", + "capHeight": 818, + "ascent": 1045, + "descent": -205, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 598, + "xWidthAvg": 381, + "subsets": { + "latin": { + "xWidthAvg": 381 + }, + "thai": { + "xWidthAvg": 626 + } + } + } + } + }, + "rancho": { + "familyName": "Rancho", + "fullName": "Rancho Regular", + "postscriptName": "Rancho-Regular", + "category": "handwriting", + "capHeight": 705, + "ascent": 919, + "descent": -329, + "lineGap": 24, + "unitsPerEm": 1024, + "xHeight": 407, + "xWidthAvg": 311, + "subsets": { + "latin": { + "xWidthAvg": 311 + }, + "thai": { + "xWidthAvg": 215 + } + }, + "variants": { + "regular": { + "familyName": "Rancho", + "fullName": "Rancho Regular", + "postscriptName": "Rancho-Regular", + "category": "handwriting", + "capHeight": 705, + "ascent": 919, + "descent": -329, + "lineGap": 24, + "unitsPerEm": 1024, + "xHeight": 407, + "xWidthAvg": 311, + "subsets": { + "latin": { + "xWidthAvg": 311 + }, + "thai": { + "xWidthAvg": 215 + } + } + } + } + }, + "ranga": { + "familyName": "Ranga", + "fullName": "Ranga Regular", + "postscriptName": "Ranga-Regular", + "category": "display", + "capHeight": 1483, + "ascent": 2218, + "descent": -1027, + "lineGap": 0, + "unitsPerEm": 2218, + "xHeight": 1040, + "xWidthAvg": 663, + "subsets": { + "latin": { + "xWidthAvg": 663 + }, + "thai": { + "xWidthAvg": 1495 + } + }, + "variants": { + "700": { + "familyName": "Ranga", + "fullName": "Ranga Bold", + "postscriptName": "Ranga-Bold", + "category": "display", + "capHeight": 1483, + "ascent": 2218, + "descent": -1027, + "lineGap": 0, + "unitsPerEm": 2218, + "xHeight": 1116, + "xWidthAvg": 703, + "subsets": { + "latin": { + "xWidthAvg": 703 + }, + "thai": { + "xWidthAvg": 1495 + } + } + }, + "regular": { + "familyName": "Ranga", + "fullName": "Ranga Regular", + "postscriptName": "Ranga-Regular", + "category": "display", + "capHeight": 1483, + "ascent": 2218, + "descent": -1027, + "lineGap": 0, + "unitsPerEm": 2218, + "xHeight": 1040, + "xWidthAvg": 663, + "subsets": { + "latin": { + "xWidthAvg": 663 + }, + "thai": { + "xWidthAvg": 1495 + } + } + } + } + }, + "rasa": { + "familyName": "Rasa", + "fullName": "Rasa Regular", + "postscriptName": "Rasa-Regular", + "category": "serif", + "capHeight": 568, + "ascent": 728, + "descent": -272, + "lineGap": 218, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 396, + "subsets": { + "latin": { + "xWidthAvg": 396 + }, + "thai": { + "xWidthAvg": 643 + } + }, + "variants": { + "300": { + "familyName": "Rasa", + "fullName": "Rasa Light", + "postscriptName": "Rasa-Light", + "category": "serif", + "capHeight": 568, + "ascent": 728, + "descent": -272, + "lineGap": 218, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 393, + "subsets": { + "latin": { + "xWidthAvg": 393 + }, + "thai": { + "xWidthAvg": 643 + } + } + }, + "500": { + "familyName": "Rasa", + "fullName": "Rasa Medium", + "postscriptName": "Rasa-Medium", + "category": "serif", + "capHeight": 568, + "ascent": 728, + "descent": -272, + "lineGap": 218, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 399, + "subsets": { + "latin": { + "xWidthAvg": 399 + }, + "thai": { + "xWidthAvg": 643 + } + } + }, + "600": { + "familyName": "Rasa", + "fullName": "Rasa SemiBold", + "postscriptName": "Rasa-SemiBold", + "category": "serif", + "capHeight": 568, + "ascent": 728, + "descent": -272, + "lineGap": 218, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 643 + } + } + }, + "700": { + "familyName": "Rasa", + "fullName": "Rasa Bold", + "postscriptName": "Rasa-Bold", + "category": "serif", + "capHeight": 568, + "ascent": 728, + "descent": -272, + "lineGap": 218, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 404, + "subsets": { + "latin": { + "xWidthAvg": 404 + }, + "thai": { + "xWidthAvg": 643 + } + } + }, + "regular": { + "familyName": "Rasa", + "fullName": "Rasa Regular", + "postscriptName": "Rasa-Regular", + "category": "serif", + "capHeight": 568, + "ascent": 728, + "descent": -272, + "lineGap": 218, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 396, + "subsets": { + "latin": { + "xWidthAvg": 396 + }, + "thai": { + "xWidthAvg": 643 + } + } + }, + "italic": { + "familyName": "Rasa", + "fullName": "Rasa Italic", + "postscriptName": "Rasa-Italic", + "category": "serif", + "capHeight": 568, + "ascent": 728, + "descent": -272, + "lineGap": 218, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 371, + "subsets": { + "latin": { + "xWidthAvg": 371 + }, + "thai": { + "xWidthAvg": 645 + } + } + }, + "700italic": { + "familyName": "Rasa", + "fullName": "Rasa Bold Italic", + "postscriptName": "Rasa-BoldItalic", + "category": "serif", + "capHeight": 568, + "ascent": 728, + "descent": -272, + "lineGap": 218, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 395, + "subsets": { + "latin": { + "xWidthAvg": 395 + }, + "thai": { + "xWidthAvg": 645 + } + } + }, + "600italic": { + "familyName": "Rasa", + "fullName": "Rasa SemiBold Italic", + "postscriptName": "Rasa-SemiBoldItalic", + "category": "serif", + "capHeight": 568, + "ascent": 728, + "descent": -272, + "lineGap": 218, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 387, + "subsets": { + "latin": { + "xWidthAvg": 387 + }, + "thai": { + "xWidthAvg": 645 + } + } + }, + "500italic": { + "familyName": "Rasa", + "fullName": "Rasa Medium Italic", + "postscriptName": "Rasa-MediumItalic", + "category": "serif", + "capHeight": 568, + "ascent": 728, + "descent": -272, + "lineGap": 218, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 379, + "subsets": { + "latin": { + "xWidthAvg": 379 + }, + "thai": { + "xWidthAvg": 645 + } + } + }, + "300italic": { + "familyName": "Rasa", + "fullName": "Rasa Light Italic", + "postscriptName": "Rasa-LightItalic", + "category": "serif", + "capHeight": 568, + "ascent": 728, + "descent": -272, + "lineGap": 218, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 363, + "subsets": { + "latin": { + "xWidthAvg": 363 + }, + "thai": { + "xWidthAvg": 645 + } + } + } + } + }, + "rationale": { + "familyName": "Rationale", + "fullName": "Rationale", + "postscriptName": "Rationale-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 903, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 360, + "subsets": { + "latin": { + "xWidthAvg": 360 + }, + "thai": { + "xWidthAvg": 529 + } + }, + "variants": { + "regular": { + "familyName": "Rationale", + "fullName": "Rationale", + "postscriptName": "Rationale-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 903, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 508, + "xWidthAvg": 360, + "subsets": { + "latin": { + "xWidthAvg": 360 + }, + "thai": { + "xWidthAvg": 529 + } + } + } + } + }, + "raviPrakash": { + "familyName": "Ravi Prakash", + "fullName": "Ravi Prakash", + "postscriptName": "RaviPrakash-Regular", + "category": "display", + "capHeight": 552, + "ascent": 938, + "descent": -684, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 410, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 374 + } + }, + "variants": { + "regular": { + "familyName": "Ravi Prakash", + "fullName": "Ravi Prakash", + "postscriptName": "RaviPrakash-Regular", + "category": "display", + "capHeight": 552, + "ascent": 938, + "descent": -684, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 410, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 374 + } + } + } + } + }, + "readexPro": { + "familyName": "Readex Pro", + "fullName": "Readex Pro Regular", + "postscriptName": "ReadexPro-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 584 + } + }, + "variants": { + "200": { + "familyName": "Readex Pro", + "fullName": "Readex Pro ExtraLight", + "postscriptName": "ReadexPro-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "300": { + "familyName": "Readex Pro", + "fullName": "Readex Pro Light", + "postscriptName": "ReadexPro-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "500": { + "familyName": "Readex Pro", + "fullName": "Readex Pro Medium", + "postscriptName": "ReadexPro-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "600": { + "familyName": "Readex Pro", + "fullName": "Readex Pro SemiBold", + "postscriptName": "ReadexPro-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "700": { + "familyName": "Readex Pro", + "fullName": "Readex Pro Bold", + "postscriptName": "ReadexPro-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 513, + "subsets": { + "latin": { + "xWidthAvg": 513 + }, + "thai": { + "xWidthAvg": 584 + } + } + }, + "regular": { + "familyName": "Readex Pro", + "fullName": "Readex Pro Regular", + "postscriptName": "ReadexPro-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 525, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 584 + } + } + } + } + }, + "recursive": { + "familyName": "Recursive", + "fullName": "Recursive Regular", + "postscriptName": "Recursive-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 532, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "300": { + "familyName": "Recursive", + "fullName": "Recursive Light", + "postscriptName": "Recursive-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Recursive", + "fullName": "Recursive Medium", + "postscriptName": "Recursive-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Recursive", + "fullName": "Recursive SemiBold", + "postscriptName": "Recursive-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 536, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Recursive", + "fullName": "Recursive Bold", + "postscriptName": "Recursive-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 538, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Recursive", + "fullName": "Recursive ExtraBold", + "postscriptName": "Recursive-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Recursive", + "fullName": "Recursive Black", + "postscriptName": "Recursive-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 547, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Recursive", + "fullName": "Recursive Regular", + "postscriptName": "Recursive-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 532, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "redHatDisplay": { + "familyName": "Red Hat Display", + "fullName": "Red Hat Display Regular", + "postscriptName": "RedHatDisplay-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 514 + } + }, + "variants": { + "300": { + "familyName": "Red Hat Display", + "fullName": "Red Hat Display Light", + "postscriptName": "RedHatDisplay-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "500": { + "familyName": "Red Hat Display", + "fullName": "Red Hat Display Medium", + "postscriptName": "RedHatDisplay-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "600": { + "familyName": "Red Hat Display", + "fullName": "Red Hat Display SemiBold", + "postscriptName": "RedHatDisplay-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "700": { + "familyName": "Red Hat Display", + "fullName": "Red Hat Display Bold", + "postscriptName": "RedHatDisplay-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "800": { + "familyName": "Red Hat Display", + "fullName": "Red Hat Display ExtraBold", + "postscriptName": "RedHatDisplay-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "900": { + "familyName": "Red Hat Display", + "fullName": "Red Hat Display Black", + "postscriptName": "RedHatDisplay-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "regular": { + "familyName": "Red Hat Display", + "fullName": "Red Hat Display Regular", + "postscriptName": "RedHatDisplay-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "italic": { + "familyName": "Red Hat Display", + "fullName": "Red Hat Display Italic", + "postscriptName": "RedHatDisplay-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "900italic": { + "familyName": "Red Hat Display", + "fullName": "Red Hat Display Black Italic", + "postscriptName": "RedHatDisplay-BlackItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "800italic": { + "familyName": "Red Hat Display", + "fullName": "Red Hat Display ExtraBold Italic", + "postscriptName": "RedHatDisplay-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "700italic": { + "familyName": "Red Hat Display", + "fullName": "Red Hat Display Bold Italic", + "postscriptName": "RedHatDisplay-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "600italic": { + "familyName": "Red Hat Display", + "fullName": "Red Hat Display SemiBold Italic", + "postscriptName": "RedHatDisplay-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "500italic": { + "familyName": "Red Hat Display", + "fullName": "Red Hat Display Medium Italic", + "postscriptName": "RedHatDisplay-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "300italic": { + "familyName": "Red Hat Display", + "fullName": "Red Hat Display Light Italic", + "postscriptName": "RedHatDisplay-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 514 + } + } + } + } + }, + "redHatMono": { + "familyName": "Red Hat Mono", + "fullName": "Red Hat Mono Regular", + "postscriptName": "RedHatMono-Regular", + "category": "monospace", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "300": { + "familyName": "Red Hat Mono", + "fullName": "Red Hat Mono Light", + "postscriptName": "RedHatMono-Light", + "category": "monospace", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Red Hat Mono", + "fullName": "Red Hat Mono Medium", + "postscriptName": "RedHatMono-Medium", + "category": "monospace", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Red Hat Mono", + "fullName": "Red Hat Mono SemiBold", + "postscriptName": "RedHatMono-SemiBold", + "category": "monospace", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Red Hat Mono", + "fullName": "Red Hat Mono Bold", + "postscriptName": "RedHatMono-Bold", + "category": "monospace", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Red Hat Mono", + "fullName": "Red Hat Mono Regular", + "postscriptName": "RedHatMono-Regular", + "category": "monospace", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "italic": { + "familyName": "Red Hat Mono", + "fullName": "Red Hat Mono Italic", + "postscriptName": "RedHatMono-Italic", + "category": "monospace", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700italic": { + "familyName": "Red Hat Mono", + "fullName": "Red Hat Mono Bold Italic", + "postscriptName": "RedHatMono-BoldItalic", + "category": "monospace", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600italic": { + "familyName": "Red Hat Mono", + "fullName": "Red Hat Mono SemiBold Italic", + "postscriptName": "RedHatMono-SemiBoldItalic", + "category": "monospace", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500italic": { + "familyName": "Red Hat Mono", + "fullName": "Red Hat Mono Medium Italic", + "postscriptName": "RedHatMono-MediumItalic", + "category": "monospace", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300italic": { + "familyName": "Red Hat Mono", + "fullName": "Red Hat Mono Light Italic", + "postscriptName": "RedHatMono-LightItalic", + "category": "monospace", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "redHatText": { + "familyName": "Red Hat Text", + "fullName": "Red Hat Text Regular", + "postscriptName": "RedHatText-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 514 + } + }, + "variants": { + "300": { + "familyName": "Red Hat Text", + "fullName": "Red Hat Text Light", + "postscriptName": "RedHatText-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "500": { + "familyName": "Red Hat Text", + "fullName": "Red Hat Text Medium", + "postscriptName": "RedHatText-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "600": { + "familyName": "Red Hat Text", + "fullName": "Red Hat Text SemiBold", + "postscriptName": "RedHatText-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "700": { + "familyName": "Red Hat Text", + "fullName": "Red Hat Text Bold", + "postscriptName": "RedHatText-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "regular": { + "familyName": "Red Hat Text", + "fullName": "Red Hat Text Regular", + "postscriptName": "RedHatText-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "italic": { + "familyName": "Red Hat Text", + "fullName": "Red Hat Text Italic", + "postscriptName": "RedHatText-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "700italic": { + "familyName": "Red Hat Text", + "fullName": "Red Hat Text Bold Italic", + "postscriptName": "RedHatText-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "600italic": { + "familyName": "Red Hat Text", + "fullName": "Red Hat Text SemiBold Italic", + "postscriptName": "RedHatText-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "500italic": { + "familyName": "Red Hat Text", + "fullName": "Red Hat Text Medium Italic", + "postscriptName": "RedHatText-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "300italic": { + "familyName": "Red Hat Text", + "fullName": "Red Hat Text Light Italic", + "postscriptName": "RedHatText-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1018, + "descent": -305, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 514 + } + } + } + } + }, + "redRose": { + "familyName": "Red Rose", + "fullName": "Red Rose Regular", + "postscriptName": "RedRose-Regular", + "category": "display", + "capHeight": 600, + "ascent": 937, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 420 + } + }, + "variants": { + "300": { + "familyName": "Red Rose", + "fullName": "Red Rose Light", + "postscriptName": "RedRose-Light", + "category": "display", + "capHeight": 600, + "ascent": 937, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 420 + } + } + }, + "500": { + "familyName": "Red Rose", + "fullName": "Red Rose Medium", + "postscriptName": "RedRose-Medium", + "category": "display", + "capHeight": 600, + "ascent": 937, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 420 + } + } + }, + "600": { + "familyName": "Red Rose", + "fullName": "Red Rose SemiBold", + "postscriptName": "RedRose-SemiBold", + "category": "display", + "capHeight": 600, + "ascent": 937, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 420 + } + } + }, + "700": { + "familyName": "Red Rose", + "fullName": "Red Rose Bold", + "postscriptName": "RedRose-Bold", + "category": "display", + "capHeight": 600, + "ascent": 937, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 420 + } + } + }, + "regular": { + "familyName": "Red Rose", + "fullName": "Red Rose Regular", + "postscriptName": "RedRose-Regular", + "category": "display", + "capHeight": 600, + "ascent": 937, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 468, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 420 + } + } + } + } + }, + "redacted": { + "familyName": "Redacted", + "fullName": "Redacted Regular", + "postscriptName": "Redacted-Regular", + "category": "display", + "capHeight": 0, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 317, + "subsets": { + "latin": { + "xWidthAvg": 317 + }, + "thai": { + "xWidthAvg": 375 + } + }, + "variants": { + "regular": { + "familyName": "Redacted", + "fullName": "Redacted Regular", + "postscriptName": "Redacted-Regular", + "category": "display", + "capHeight": 0, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 317, + "subsets": { + "latin": { + "xWidthAvg": 317 + }, + "thai": { + "xWidthAvg": 375 + } + } + } + } + }, + "redactedScript": { + "familyName": "Redacted Script", + "fullName": "Redacted Script Regular", + "postscriptName": "RedactedScript-Regular", + "category": "display", + "capHeight": 702, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 439, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 486 + } + }, + "variants": { + "300": { + "familyName": "Redacted Script", + "fullName": "Redacted Script Light", + "postscriptName": "RedactedScript-Light", + "category": "display", + "capHeight": 702, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 439, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 486 + } + } + }, + "700": { + "familyName": "Redacted Script", + "fullName": "Redacted Script Bold", + "postscriptName": "RedactedScript-Bold", + "category": "display", + "capHeight": 702, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 439, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 486 + } + } + }, + "regular": { + "familyName": "Redacted Script", + "fullName": "Redacted Script Regular", + "postscriptName": "RedactedScript-Regular", + "category": "display", + "capHeight": 702, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 439, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 486 + } + } + } + } + }, + "redditMono": { + "familyName": "Reddit Mono", + "fullName": "Reddit Mono Regular", + "postscriptName": "RedditMono-Regular", + "category": "monospace", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1060, + "xWidthAvg": 1152, + "subsets": { + "latin": { + "xWidthAvg": 1152 + }, + "thai": { + "xWidthAvg": 1152 + } + }, + "variants": { + "200": { + "familyName": "Reddit Mono", + "fullName": "Reddit Mono ExtraLight", + "postscriptName": "RedditMono-ExtraLight", + "category": "monospace", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1048, + "xWidthAvg": 1152, + "subsets": { + "latin": { + "xWidthAvg": 1152 + }, + "thai": { + "xWidthAvg": 1152 + } + } + }, + "300": { + "familyName": "Reddit Mono", + "fullName": "Reddit Mono Light", + "postscriptName": "RedditMono-Light", + "category": "monospace", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1055, + "xWidthAvg": 1152, + "subsets": { + "latin": { + "xWidthAvg": 1152 + }, + "thai": { + "xWidthAvg": 1152 + } + } + }, + "500": { + "familyName": "Reddit Mono", + "fullName": "Reddit Mono Medium", + "postscriptName": "RedditMono-Medium", + "category": "monospace", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1063, + "xWidthAvg": 1152, + "subsets": { + "latin": { + "xWidthAvg": 1152 + }, + "thai": { + "xWidthAvg": 1152 + } + } + }, + "600": { + "familyName": "Reddit Mono", + "fullName": "Reddit Mono SemiBold", + "postscriptName": "RedditMono-SemiBold", + "category": "monospace", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1067, + "xWidthAvg": 1152, + "subsets": { + "latin": { + "xWidthAvg": 1152 + }, + "thai": { + "xWidthAvg": 1152 + } + } + }, + "700": { + "familyName": "Reddit Mono", + "fullName": "Reddit Mono Bold", + "postscriptName": "RedditMono-Bold", + "category": "monospace", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1071, + "xWidthAvg": 1152, + "subsets": { + "latin": { + "xWidthAvg": 1152 + }, + "thai": { + "xWidthAvg": 1152 + } + } + }, + "800": { + "familyName": "Reddit Mono", + "fullName": "Reddit Mono ExtraBold", + "postscriptName": "RedditMono-ExtraBold", + "category": "monospace", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1076, + "xWidthAvg": 1152, + "subsets": { + "latin": { + "xWidthAvg": 1152 + }, + "thai": { + "xWidthAvg": 1152 + } + } + }, + "900": { + "familyName": "Reddit Mono", + "fullName": "Reddit Mono Black", + "postscriptName": "RedditMono-Black", + "category": "monospace", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1080, + "xWidthAvg": 1152, + "subsets": { + "latin": { + "xWidthAvg": 1152 + }, + "thai": { + "xWidthAvg": 1152 + } + } + }, + "regular": { + "familyName": "Reddit Mono", + "fullName": "Reddit Mono Regular", + "postscriptName": "RedditMono-Regular", + "category": "monospace", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1060, + "xWidthAvg": 1152, + "subsets": { + "latin": { + "xWidthAvg": 1152 + }, + "thai": { + "xWidthAvg": 1152 + } + } + } + } + }, + "redditSans": { + "familyName": "Reddit Sans", + "fullName": "Reddit Sans Regular", + "postscriptName": "RedditSans-Regular", + "category": "sans-serif", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1060, + "xWidthAvg": 918, + "subsets": { + "latin": { + "xWidthAvg": 918 + }, + "thai": { + "xWidthAvg": 1336 + } + }, + "variants": { + "200": { + "familyName": "Reddit Sans", + "fullName": "Reddit Sans ExtraLight", + "postscriptName": "RedditSans-ExtraLight", + "category": "sans-serif", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1048, + "xWidthAvg": 899, + "subsets": { + "latin": { + "xWidthAvg": 899 + }, + "thai": { + "xWidthAvg": 1308 + } + } + }, + "300": { + "familyName": "Reddit Sans", + "fullName": "Reddit Sans Light", + "postscriptName": "RedditSans-Light", + "category": "sans-serif", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1055, + "xWidthAvg": 910, + "subsets": { + "latin": { + "xWidthAvg": 910 + }, + "thai": { + "xWidthAvg": 1324 + } + } + }, + "500": { + "familyName": "Reddit Sans", + "fullName": "Reddit Sans Medium", + "postscriptName": "RedditSans-Medium", + "category": "sans-serif", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1063, + "xWidthAvg": 929, + "subsets": { + "latin": { + "xWidthAvg": 929 + }, + "thai": { + "xWidthAvg": 1357 + } + } + }, + "600": { + "familyName": "Reddit Sans", + "fullName": "Reddit Sans SemiBold", + "postscriptName": "RedditSans-SemiBold", + "category": "sans-serif", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1067, + "xWidthAvg": 939, + "subsets": { + "latin": { + "xWidthAvg": 939 + }, + "thai": { + "xWidthAvg": 1378 + } + } + }, + "700": { + "familyName": "Reddit Sans", + "fullName": "Reddit Sans Bold", + "postscriptName": "RedditSans-Bold", + "category": "sans-serif", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1071, + "xWidthAvg": 954, + "subsets": { + "latin": { + "xWidthAvg": 954 + }, + "thai": { + "xWidthAvg": 1405 + } + } + }, + "800": { + "familyName": "Reddit Sans", + "fullName": "Reddit Sans ExtraBold", + "postscriptName": "RedditSans-ExtraBold", + "category": "sans-serif", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1076, + "xWidthAvg": 969, + "subsets": { + "latin": { + "xWidthAvg": 969 + }, + "thai": { + "xWidthAvg": 1431 + } + } + }, + "900": { + "familyName": "Reddit Sans", + "fullName": "Reddit Sans Black", + "postscriptName": "RedditSans-Black", + "category": "sans-serif", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1080, + "xWidthAvg": 985, + "subsets": { + "latin": { + "xWidthAvg": 985 + }, + "thai": { + "xWidthAvg": 1458 + } + } + }, + "regular": { + "familyName": "Reddit Sans", + "fullName": "Reddit Sans Regular", + "postscriptName": "RedditSans-Regular", + "category": "sans-serif", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1060, + "xWidthAvg": 918, + "subsets": { + "latin": { + "xWidthAvg": 918 + }, + "thai": { + "xWidthAvg": 1336 + } + } + }, + "italic": { + "familyName": "Reddit Sans", + "fullName": "Reddit Sans Italic", + "postscriptName": "RedditSans-Italic", + "category": "sans-serif", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1060, + "xWidthAvg": 916, + "subsets": { + "latin": { + "xWidthAvg": 916 + }, + "thai": { + "xWidthAvg": 1317 + } + } + }, + "900italic": { + "familyName": "Reddit Sans", + "fullName": "Reddit Sans Black Italic", + "postscriptName": "RedditSans-BlackItalic", + "category": "sans-serif", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1080, + "xWidthAvg": 1007, + "subsets": { + "latin": { + "xWidthAvg": 1007 + }, + "thai": { + "xWidthAvg": 1419 + } + } + }, + "800italic": { + "familyName": "Reddit Sans", + "fullName": "Reddit Sans ExtraBold Italic", + "postscriptName": "RedditSans-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1076, + "xWidthAvg": 987, + "subsets": { + "latin": { + "xWidthAvg": 987 + }, + "thai": { + "xWidthAvg": 1397 + } + } + }, + "700italic": { + "familyName": "Reddit Sans", + "fullName": "Reddit Sans Bold Italic", + "postscriptName": "RedditSans-BoldItalic", + "category": "sans-serif", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1071, + "xWidthAvg": 966, + "subsets": { + "latin": { + "xWidthAvg": 966 + }, + "thai": { + "xWidthAvg": 1375 + } + } + }, + "600italic": { + "familyName": "Reddit Sans", + "fullName": "Reddit Sans SemiBold Italic", + "postscriptName": "RedditSans-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1067, + "xWidthAvg": 945, + "subsets": { + "latin": { + "xWidthAvg": 945 + }, + "thai": { + "xWidthAvg": 1352 + } + } + }, + "500italic": { + "familyName": "Reddit Sans", + "fullName": "Reddit Sans Medium Italic", + "postscriptName": "RedditSans-MediumItalic", + "category": "sans-serif", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1063, + "xWidthAvg": 931, + "subsets": { + "latin": { + "xWidthAvg": 931 + }, + "thai": { + "xWidthAvg": 1335 + } + } + }, + "300italic": { + "familyName": "Reddit Sans", + "fullName": "Reddit Sans Light Italic", + "postscriptName": "RedditSans-LightItalic", + "category": "sans-serif", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1055, + "xWidthAvg": 897, + "subsets": { + "latin": { + "xWidthAvg": 897 + }, + "thai": { + "xWidthAvg": 1293 + } + } + }, + "200italic": { + "familyName": "Reddit Sans", + "fullName": "Reddit Sans ExtraLight Italic", + "postscriptName": "RedditSans-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1048, + "xWidthAvg": 873, + "subsets": { + "latin": { + "xWidthAvg": 873 + }, + "thai": { + "xWidthAvg": 1262 + } + } + } + } + }, + "redditSansCondensed": { + "familyName": "Reddit Sans Condensed", + "fullName": "Reddit Sans Condensed Regular", + "postscriptName": "RedditSansCondensed-Regular", + "category": "sans-serif", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1080, + "xWidthAvg": 816, + "subsets": { + "latin": { + "xWidthAvg": 816 + }, + "thai": { + "xWidthAvg": 1168 + } + }, + "variants": { + "200": { + "familyName": "Reddit Sans Condensed", + "fullName": "Reddit Sans Condensed ExtraLight", + "postscriptName": "RedditSansCondensed-ExtraLight", + "category": "sans-serif", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1068, + "xWidthAvg": 790, + "subsets": { + "latin": { + "xWidthAvg": 790 + }, + "thai": { + "xWidthAvg": 1130 + } + } + }, + "300": { + "familyName": "Reddit Sans Condensed", + "fullName": "Reddit Sans Condensed Light", + "postscriptName": "RedditSansCondensed-Light", + "category": "sans-serif", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1075, + "xWidthAvg": 805, + "subsets": { + "latin": { + "xWidthAvg": 805 + }, + "thai": { + "xWidthAvg": 1152 + } + } + }, + "500": { + "familyName": "Reddit Sans Condensed", + "fullName": "Reddit Sans Condensed Medium", + "postscriptName": "RedditSansCondensed-Medium", + "category": "sans-serif", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1083, + "xWidthAvg": 829, + "subsets": { + "latin": { + "xWidthAvg": 829 + }, + "thai": { + "xWidthAvg": 1189 + } + } + }, + "600": { + "familyName": "Reddit Sans Condensed", + "fullName": "Reddit Sans Condensed SemiBold", + "postscriptName": "RedditSansCondensed-SemiBold", + "category": "sans-serif", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1087, + "xWidthAvg": 842, + "subsets": { + "latin": { + "xWidthAvg": 842 + }, + "thai": { + "xWidthAvg": 1209 + } + } + }, + "700": { + "familyName": "Reddit Sans Condensed", + "fullName": "Reddit Sans Condensed Bold", + "postscriptName": "RedditSansCondensed-Bold", + "category": "sans-serif", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1091, + "xWidthAvg": 860, + "subsets": { + "latin": { + "xWidthAvg": 860 + }, + "thai": { + "xWidthAvg": 1235 + } + } + }, + "800": { + "familyName": "Reddit Sans Condensed", + "fullName": "Reddit Sans Condensed ExtraBold", + "postscriptName": "RedditSansCondensed-ExtraBold", + "category": "sans-serif", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1096, + "xWidthAvg": 877, + "subsets": { + "latin": { + "xWidthAvg": 877 + }, + "thai": { + "xWidthAvg": 1260 + } + } + }, + "900": { + "familyName": "Reddit Sans Condensed", + "fullName": "Reddit Sans Condensed Black", + "postscriptName": "RedditSansCondensed-Black", + "category": "sans-serif", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1100, + "xWidthAvg": 894, + "subsets": { + "latin": { + "xWidthAvg": 894 + }, + "thai": { + "xWidthAvg": 1286 + } + } + }, + "regular": { + "familyName": "Reddit Sans Condensed", + "fullName": "Reddit Sans Condensed Regular", + "postscriptName": "RedditSansCondensed-Regular", + "category": "sans-serif", + "capHeight": 1474, + "ascent": 2068, + "descent": -592, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1080, + "xWidthAvg": 816, + "subsets": { + "latin": { + "xWidthAvg": 816 + }, + "thai": { + "xWidthAvg": 1168 + } + } + } + } + }, + "redressed": { + "familyName": "Redressed", + "fullName": "Redressed Regular", + "postscriptName": "Redressed-Regular", + "category": "handwriting", + "capHeight": 1495, + "ascent": 1907, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 834, + "xWidthAvg": 735, + "subsets": { + "latin": { + "xWidthAvg": 735 + }, + "thai": { + "xWidthAvg": 432 + } + }, + "variants": { + "regular": { + "familyName": "Redressed", + "fullName": "Redressed Regular", + "postscriptName": "Redressed-Regular", + "category": "handwriting", + "capHeight": 1495, + "ascent": 1907, + "descent": -494, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 834, + "xWidthAvg": 735, + "subsets": { + "latin": { + "xWidthAvg": 735 + }, + "thai": { + "xWidthAvg": 432 + } + } + } + } + }, + "reemKufi": { + "familyName": "Reem Kufi", + "fullName": "Reem Kufi Regular", + "postscriptName": "ReemKufi-Regular", + "category": "sans-serif", + "capHeight": 725, + "ascent": 1100, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 418, + "xWidthAvg": 432, + "subsets": { + "latin": { + "xWidthAvg": 432 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "500": { + "familyName": "Reem Kufi", + "fullName": "Reem Kufi Medium", + "postscriptName": "ReemKufi-Medium", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1100, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 424, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Reem Kufi", + "fullName": "Reem Kufi SemiBold", + "postscriptName": "ReemKufi-SemiBold", + "category": "sans-serif", + "capHeight": 732, + "ascent": 1100, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 431, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Reem Kufi", + "fullName": "Reem Kufi Bold", + "postscriptName": "ReemKufi-Bold", + "category": "sans-serif", + "capHeight": 736, + "ascent": 1100, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 437, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Reem Kufi", + "fullName": "Reem Kufi Regular", + "postscriptName": "ReemKufi-Regular", + "category": "sans-serif", + "capHeight": 725, + "ascent": 1100, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 418, + "xWidthAvg": 432, + "subsets": { + "latin": { + "xWidthAvg": 432 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "reemKufiFun": { + "familyName": "Reem Kufi Fun", + "fullName": "Reem Kufi Fun Regular", + "postscriptName": "ReemKufiFun-Regular", + "category": "sans-serif", + "capHeight": 725, + "ascent": 1100, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 418, + "xWidthAvg": 432, + "subsets": { + "latin": { + "xWidthAvg": 432 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "500": { + "familyName": "Reem Kufi Fun", + "fullName": "Reem Kufi Fun Medium", + "postscriptName": "ReemKufiFun-Medium", + "category": "sans-serif", + "capHeight": 729, + "ascent": 1100, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 424, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Reem Kufi Fun", + "fullName": "Reem Kufi Fun SemiBold", + "postscriptName": "ReemKufiFun-SemiBold", + "category": "sans-serif", + "capHeight": 732, + "ascent": 1100, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 431, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Reem Kufi Fun", + "fullName": "Reem Kufi Fun Bold", + "postscriptName": "ReemKufiFun-Bold", + "category": "sans-serif", + "capHeight": 736, + "ascent": 1100, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 437, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Reem Kufi Fun", + "fullName": "Reem Kufi Fun Regular", + "postscriptName": "ReemKufiFun-Regular", + "category": "sans-serif", + "capHeight": 725, + "ascent": 1100, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 418, + "xWidthAvg": 432, + "subsets": { + "latin": { + "xWidthAvg": 432 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "reemKufiInk": { + "familyName": "Reem Kufi Ink", + "fullName": "Reem Kufi Ink Regular", + "postscriptName": "ReemKufiInk-Regular", + "category": "sans-serif", + "capHeight": 725, + "ascent": 1100, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 418, + "xWidthAvg": 432, + "subsets": { + "latin": { + "xWidthAvg": 432 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Reem Kufi Ink", + "fullName": "Reem Kufi Ink Regular", + "postscriptName": "ReemKufiInk-Regular", + "category": "sans-serif", + "capHeight": 725, + "ascent": 1100, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 418, + "xWidthAvg": 432, + "subsets": { + "latin": { + "xWidthAvg": 432 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "reenieBeanie": { + "familyName": "Reenie Beanie", + "fullName": "Reenie Beanie", + "postscriptName": "ReenieBeanie", + "category": "handwriting", + "capHeight": 700, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 339, + "subsets": { + "latin": { + "xWidthAvg": 339 + }, + "thai": { + "xWidthAvg": 414 + } + }, + "variants": { + "regular": { + "familyName": "Reenie Beanie", + "fullName": "Reenie Beanie", + "postscriptName": "ReenieBeanie", + "category": "handwriting", + "capHeight": 700, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 339, + "subsets": { + "latin": { + "xWidthAvg": 339 + }, + "thai": { + "xWidthAvg": 414 + } + } + } + } + }, + "reggaeOne": { + "familyName": "Reggae One", + "fullName": "Reggae One Regular", + "postscriptName": "ReggaeOne-Regular", + "category": "display", + "capHeight": 780, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 557, + "xWidthAvg": 538, + "subsets": { + "latin": { + "xWidthAvg": 538 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Reggae One", + "fullName": "Reggae One Regular", + "postscriptName": "ReggaeOne-Regular", + "category": "display", + "capHeight": 780, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 557, + "xWidthAvg": 538, + "subsets": { + "latin": { + "xWidthAvg": 538 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "rethinkSans": { + "familyName": "Rethink Sans", + "fullName": "Rethink Sans Regular", + "postscriptName": "RethinkSans-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 529 + } + }, + "variants": { + "500": { + "familyName": "Rethink Sans", + "fullName": "Rethink Sans Medium", + "postscriptName": "RethinkSans-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 529 + } + } + }, + "600": { + "familyName": "Rethink Sans", + "fullName": "Rethink Sans SemiBold", + "postscriptName": "RethinkSans-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 529 + } + } + }, + "700": { + "familyName": "Rethink Sans", + "fullName": "Rethink Sans Bold", + "postscriptName": "RethinkSans-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 529 + } + } + }, + "800": { + "familyName": "Rethink Sans", + "fullName": "Rethink Sans ExtraBold", + "postscriptName": "RethinkSans-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 529 + } + } + }, + "regular": { + "familyName": "Rethink Sans", + "fullName": "Rethink Sans Regular", + "postscriptName": "RethinkSans-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 529 + } + } + }, + "italic": { + "familyName": "Rethink Sans", + "fullName": "Rethink Sans Italic", + "postscriptName": "RethinkSans-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 549 + } + } + }, + "800italic": { + "familyName": "Rethink Sans", + "fullName": "Rethink Sans ExtraBold Italic", + "postscriptName": "RethinkSans-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 509 + } + } + }, + "700italic": { + "familyName": "Rethink Sans", + "fullName": "Rethink Sans Bold Italic", + "postscriptName": "RethinkSans-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 517 + } + } + }, + "600italic": { + "familyName": "Rethink Sans", + "fullName": "Rethink Sans SemiBold Italic", + "postscriptName": "RethinkSans-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 528 + } + } + }, + "500italic": { + "familyName": "Rethink Sans", + "fullName": "Rethink Sans Medium Italic", + "postscriptName": "RethinkSans-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 992, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 533 + } + } + } + } + }, + "revalia": { + "familyName": "Revalia", + "fullName": "Revalia-Regular", + "postscriptName": "Revalia-Regular", + "category": "display", + "capHeight": 879, + "ascent": 2146, + "descent": 382, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1140, + "xWidthAvg": 1329, + "subsets": { + "latin": { + "xWidthAvg": 1329 + }, + "thai": { + "xWidthAvg": 1070 + } + }, + "variants": { + "regular": { + "familyName": "Revalia", + "fullName": "Revalia-Regular", + "postscriptName": "Revalia-Regular", + "category": "display", + "capHeight": 879, + "ascent": 2146, + "descent": 382, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1140, + "xWidthAvg": 1329, + "subsets": { + "latin": { + "xWidthAvg": 1329 + }, + "thai": { + "xWidthAvg": 1070 + } + } + } + } + }, + "rhodiumLibre": { + "familyName": "Rhodium Libre", + "fullName": "Rhodium Libre", + "postscriptName": "RhodiumLibre-Regular", + "category": "serif", + "capHeight": 680, + "ascent": 1100, + "descent": -610, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 502, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Rhodium Libre", + "fullName": "Rhodium Libre", + "postscriptName": "RhodiumLibre-Regular", + "category": "serif", + "capHeight": 680, + "ascent": 1100, + "descent": -610, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 502, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "ribeye": { + "familyName": "Ribeye", + "fullName": "Ribeye", + "postscriptName": "Ribeye-Regular", + "category": "display", + "capHeight": 1491, + "ascent": 2130, + "descent": -668, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1061, + "xWidthAvg": 1096, + "subsets": { + "latin": { + "xWidthAvg": 1096 + }, + "thai": { + "xWidthAvg": 614 + } + }, + "variants": { + "regular": { + "familyName": "Ribeye", + "fullName": "Ribeye", + "postscriptName": "Ribeye-Regular", + "category": "display", + "capHeight": 1491, + "ascent": 2130, + "descent": -668, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1061, + "xWidthAvg": 1096, + "subsets": { + "latin": { + "xWidthAvg": 1096 + }, + "thai": { + "xWidthAvg": 614 + } + } + } + } + }, + "ribeyeMarrow": { + "familyName": "Ribeye Marrow", + "fullName": "Ribeye Marrow", + "postscriptName": "RibeyeMarrow-Regular", + "category": "display", + "capHeight": 1460, + "ascent": 2130, + "descent": -668, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1061, + "xWidthAvg": 1096, + "subsets": { + "latin": { + "xWidthAvg": 1096 + }, + "thai": { + "xWidthAvg": 614 + } + }, + "variants": { + "regular": { + "familyName": "Ribeye Marrow", + "fullName": "Ribeye Marrow", + "postscriptName": "RibeyeMarrow-Regular", + "category": "display", + "capHeight": 1460, + "ascent": 2130, + "descent": -668, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1061, + "xWidthAvg": 1096, + "subsets": { + "latin": { + "xWidthAvg": 1096 + }, + "thai": { + "xWidthAvg": 614 + } + } + } + } + }, + "righteous": { + "familyName": "Righteous", + "fullName": "Righteous", + "postscriptName": "Righteous-Regular", + "category": "display", + "capHeight": 1434, + "ascent": 2017, + "descent": -526, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1077, + "xWidthAvg": 966, + "subsets": { + "latin": { + "xWidthAvg": 966 + }, + "thai": { + "xWidthAvg": 573 + } + }, + "variants": { + "regular": { + "familyName": "Righteous", + "fullName": "Righteous", + "postscriptName": "Righteous-Regular", + "category": "display", + "capHeight": 1434, + "ascent": 2017, + "descent": -526, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1077, + "xWidthAvg": 966, + "subsets": { + "latin": { + "xWidthAvg": 966 + }, + "thai": { + "xWidthAvg": 573 + } + } + } + } + }, + "risque": { + "familyName": "Risque", + "fullName": "Risque", + "postscriptName": "Risque-Regular", + "category": "display", + "capHeight": 1413, + "ascent": 1853, + "descent": -514, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1016, + "xWidthAvg": 884, + "subsets": { + "latin": { + "xWidthAvg": 884 + }, + "thai": { + "xWidthAvg": 532 + } + }, + "variants": { + "regular": { + "familyName": "Risque", + "fullName": "Risque", + "postscriptName": "Risque-Regular", + "category": "display", + "capHeight": 1413, + "ascent": 1853, + "descent": -514, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1016, + "xWidthAvg": 884, + "subsets": { + "latin": { + "xWidthAvg": 884 + }, + "thai": { + "xWidthAvg": 532 + } + } + } + } + }, + "roadRage": { + "familyName": "Road Rage", + "fullName": "Road Rage Regular", + "postscriptName": "RoadRage-Regular", + "category": "display", + "capHeight": 600, + "ascent": 850, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 260, + "subsets": { + "latin": { + "xWidthAvg": 260 + }, + "thai": { + "xWidthAvg": 420 + } + }, + "variants": { + "regular": { + "familyName": "Road Rage", + "fullName": "Road Rage Regular", + "postscriptName": "RoadRage-Regular", + "category": "display", + "capHeight": 600, + "ascent": 850, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 260, + "subsets": { + "latin": { + "xWidthAvg": 260 + }, + "thai": { + "xWidthAvg": 420 + } + } + } + } + }, + "roboto": { + "familyName": "Roboto", + "fullName": "Roboto", + "postscriptName": "Roboto-Regular", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 911, + "subsets": { + "latin": { + "xWidthAvg": 911 + }, + "thai": { + "xWidthAvg": 908 + } + }, + "variants": { + "100": { + "familyName": "Roboto", + "fullName": "Roboto Thin", + "postscriptName": "Roboto-Thin", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 880, + "subsets": { + "latin": { + "xWidthAvg": 880 + }, + "thai": { + "xWidthAvg": 908 + } + } + }, + "300": { + "familyName": "Roboto", + "fullName": "Roboto Light", + "postscriptName": "Roboto-Light", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 895, + "subsets": { + "latin": { + "xWidthAvg": 895 + }, + "thai": { + "xWidthAvg": 908 + } + } + }, + "500": { + "familyName": "Roboto", + "fullName": "Roboto Medium", + "postscriptName": "Roboto-Medium", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 920, + "subsets": { + "latin": { + "xWidthAvg": 920 + }, + "thai": { + "xWidthAvg": 908 + } + } + }, + "700": { + "familyName": "Roboto", + "fullName": "Roboto Bold", + "postscriptName": "Roboto-Bold", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 926, + "subsets": { + "latin": { + "xWidthAvg": 926 + }, + "thai": { + "xWidthAvg": 908 + } + } + }, + "900": { + "familyName": "Roboto", + "fullName": "Roboto Black", + "postscriptName": "Roboto-Black", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 933, + "subsets": { + "latin": { + "xWidthAvg": 933 + }, + "thai": { + "xWidthAvg": 908 + } + } + }, + "regular": { + "familyName": "Roboto", + "fullName": "Roboto", + "postscriptName": "Roboto-Regular", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 911, + "subsets": { + "latin": { + "xWidthAvg": 911 + }, + "thai": { + "xWidthAvg": 908 + } + } + }, + "italic": { + "familyName": "Roboto", + "fullName": "Roboto Italic", + "postscriptName": "Roboto-Italic", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 893, + "subsets": { + "latin": { + "xWidthAvg": 893 + }, + "thai": { + "xWidthAvg": 918 + } + } + }, + "900italic": { + "familyName": "Roboto", + "fullName": "Roboto Black Italic", + "postscriptName": "Roboto-BlackItalic", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 915, + "subsets": { + "latin": { + "xWidthAvg": 915 + }, + "thai": { + "xWidthAvg": 918 + } + } + }, + "700italic": { + "familyName": "Roboto", + "fullName": "Roboto Bold Italic", + "postscriptName": "Roboto-BoldItalic", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 909, + "subsets": { + "latin": { + "xWidthAvg": 909 + }, + "thai": { + "xWidthAvg": 918 + } + } + }, + "500italic": { + "familyName": "Roboto", + "fullName": "Roboto Medium Italic", + "postscriptName": "Roboto-MediumItalic", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 902, + "subsets": { + "latin": { + "xWidthAvg": 902 + }, + "thai": { + "xWidthAvg": 918 + } + } + }, + "300italic": { + "familyName": "Roboto", + "fullName": "Roboto Light Italic", + "postscriptName": "Roboto-LightItalic", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 878, + "subsets": { + "latin": { + "xWidthAvg": 878 + }, + "thai": { + "xWidthAvg": 918 + } + } + }, + "100italic": { + "familyName": "Roboto", + "fullName": "Roboto Thin Italic", + "postscriptName": "Roboto-ThinItalic", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 864, + "subsets": { + "latin": { + "xWidthAvg": 864 + }, + "thai": { + "xWidthAvg": 918 + } + } + } + } + }, + "robotoCondensed": { + "familyName": "Roboto Condensed", + "fullName": "Roboto Condensed Regular", + "postscriptName": "RobotoCondensed-Regular", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 811, + "subsets": { + "latin": { + "xWidthAvg": 811 + }, + "thai": { + "xWidthAvg": 803 + } + }, + "variants": { + "100": { + "familyName": "Roboto Condensed", + "fullName": "Roboto Condensed Thin", + "postscriptName": "RobotoCondensed-Thin", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 788, + "subsets": { + "latin": { + "xWidthAvg": 788 + }, + "thai": { + "xWidthAvg": 808 + } + } + }, + "200": { + "familyName": "Roboto Condensed", + "fullName": "Roboto Condensed ExtraLight", + "postscriptName": "RobotoCondensed-ExtraLight", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 791, + "subsets": { + "latin": { + "xWidthAvg": 791 + }, + "thai": { + "xWidthAvg": 806 + } + } + }, + "300": { + "familyName": "Roboto Condensed", + "fullName": "Roboto Condensed Light", + "postscriptName": "RobotoCondensed-Light", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 796, + "subsets": { + "latin": { + "xWidthAvg": 796 + }, + "thai": { + "xWidthAvg": 803 + } + } + }, + "500": { + "familyName": "Roboto Condensed", + "fullName": "Roboto Condensed Medium", + "postscriptName": "RobotoCondensed-Medium", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 819, + "subsets": { + "latin": { + "xWidthAvg": 819 + }, + "thai": { + "xWidthAvg": 803 + } + } + }, + "600": { + "familyName": "Roboto Condensed", + "fullName": "Roboto Condensed SemiBold", + "postscriptName": "RobotoCondensed-SemiBold", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 823, + "subsets": { + "latin": { + "xWidthAvg": 823 + }, + "thai": { + "xWidthAvg": 803 + } + } + }, + "700": { + "familyName": "Roboto Condensed", + "fullName": "Roboto Condensed Bold", + "postscriptName": "RobotoCondensed-Bold", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 826, + "subsets": { + "latin": { + "xWidthAvg": 826 + }, + "thai": { + "xWidthAvg": 803 + } + } + }, + "800": { + "familyName": "Roboto Condensed", + "fullName": "Roboto Condensed ExtraBold", + "postscriptName": "RobotoCondensed-ExtraBold", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 830, + "subsets": { + "latin": { + "xWidthAvg": 830 + }, + "thai": { + "xWidthAvg": 803 + } + } + }, + "900": { + "familyName": "Roboto Condensed", + "fullName": "Roboto Condensed Black", + "postscriptName": "RobotoCondensed-Black", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 833, + "subsets": { + "latin": { + "xWidthAvg": 833 + }, + "thai": { + "xWidthAvg": 803 + } + } + }, + "regular": { + "familyName": "Roboto Condensed", + "fullName": "Roboto Condensed Regular", + "postscriptName": "RobotoCondensed-Regular", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 811, + "subsets": { + "latin": { + "xWidthAvg": 811 + }, + "thai": { + "xWidthAvg": 803 + } + } + }, + "italic": { + "familyName": "Roboto Condensed", + "fullName": "Roboto Condensed Italic", + "postscriptName": "RobotoCondensed-Italic", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 788, + "subsets": { + "latin": { + "xWidthAvg": 788 + }, + "thai": { + "xWidthAvg": 813 + } + } + }, + "900italic": { + "familyName": "Roboto Condensed", + "fullName": "Roboto Condensed Black Italic", + "postscriptName": "RobotoCondensed-BlackItalic", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 810, + "subsets": { + "latin": { + "xWidthAvg": 810 + }, + "thai": { + "xWidthAvg": 813 + } + } + }, + "800italic": { + "familyName": "Roboto Condensed", + "fullName": "Roboto Condensed ExtraBold Italic", + "postscriptName": "RobotoCondensed-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 806, + "subsets": { + "latin": { + "xWidthAvg": 806 + }, + "thai": { + "xWidthAvg": 813 + } + } + }, + "700italic": { + "familyName": "Roboto Condensed", + "fullName": "Roboto Condensed Bold Italic", + "postscriptName": "RobotoCondensed-BoldItalic", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 803, + "subsets": { + "latin": { + "xWidthAvg": 803 + }, + "thai": { + "xWidthAvg": 813 + } + } + }, + "600italic": { + "familyName": "Roboto Condensed", + "fullName": "Roboto Condensed SemiBold Italic", + "postscriptName": "RobotoCondensed-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 800, + "subsets": { + "latin": { + "xWidthAvg": 800 + }, + "thai": { + "xWidthAvg": 813 + } + } + }, + "500italic": { + "familyName": "Roboto Condensed", + "fullName": "Roboto Condensed Medium Italic", + "postscriptName": "RobotoCondensed-MediumItalic", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 796, + "subsets": { + "latin": { + "xWidthAvg": 796 + }, + "thai": { + "xWidthAvg": 813 + } + } + }, + "300italic": { + "familyName": "Roboto Condensed", + "fullName": "Roboto Condensed Light Italic", + "postscriptName": "RobotoCondensed-LightItalic", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 774, + "subsets": { + "latin": { + "xWidthAvg": 774 + }, + "thai": { + "xWidthAvg": 813 + } + } + }, + "200italic": { + "familyName": "Roboto Condensed", + "fullName": "Roboto Condensed ExtraLight Italic", + "postscriptName": "RobotoCondensed-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 769, + "subsets": { + "latin": { + "xWidthAvg": 769 + }, + "thai": { + "xWidthAvg": 816 + } + } + }, + "100italic": { + "familyName": "Roboto Condensed", + "fullName": "Roboto Condensed Thin Italic", + "postscriptName": "RobotoCondensed-ThinItalic", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 766, + "subsets": { + "latin": { + "xWidthAvg": 766 + }, + "thai": { + "xWidthAvg": 818 + } + } + } + } + }, + "robotoFlex": { + "familyName": "Roboto Flex", + "fullName": "Roboto Flex Regular", + "postscriptName": "RobotoFlex-Regular", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1052, + "xWidthAvg": 908, + "subsets": { + "latin": { + "xWidthAvg": 908 + }, + "thai": { + "xWidthAvg": 908 + } + }, + "variants": { + "regular": { + "familyName": "Roboto Flex", + "fullName": "Roboto Flex Regular", + "postscriptName": "RobotoFlex-Regular", + "category": "sans-serif", + "capHeight": 1456, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1052, + "xWidthAvg": 908, + "subsets": { + "latin": { + "xWidthAvg": 908 + }, + "thai": { + "xWidthAvg": 908 + } + } + } + } + }, + "robotoMono": { + "familyName": "Roboto Mono", + "fullName": "Roboto Mono Regular", + "postscriptName": "RobotoMono-Regular", + "category": "monospace", + "capHeight": 1456, + "ascent": 2146, + "descent": -555, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 1229 + } + }, + "variants": { + "100": { + "familyName": "Roboto Mono", + "fullName": "Roboto Mono Thin", + "postscriptName": "RobotoMono-Thin", + "category": "monospace", + "capHeight": 1456, + "ascent": 2146, + "descent": -555, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "200": { + "familyName": "Roboto Mono", + "fullName": "Roboto Mono ExtraLight", + "postscriptName": "RobotoMono-ExtraLight", + "category": "monospace", + "capHeight": 1456, + "ascent": 2146, + "descent": -555, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "300": { + "familyName": "Roboto Mono", + "fullName": "Roboto Mono Light", + "postscriptName": "RobotoMono-Light", + "category": "monospace", + "capHeight": 1456, + "ascent": 2146, + "descent": -555, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "500": { + "familyName": "Roboto Mono", + "fullName": "Roboto Mono Medium", + "postscriptName": "RobotoMono-Medium", + "category": "monospace", + "capHeight": 1456, + "ascent": 2146, + "descent": -555, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "600": { + "familyName": "Roboto Mono", + "fullName": "Roboto Mono SemiBold", + "postscriptName": "RobotoMono-SemiBold", + "category": "monospace", + "capHeight": 1456, + "ascent": 2146, + "descent": -555, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "700": { + "familyName": "Roboto Mono", + "fullName": "Roboto Mono Bold", + "postscriptName": "RobotoMono-Bold", + "category": "monospace", + "capHeight": 1456, + "ascent": 2146, + "descent": -555, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "regular": { + "familyName": "Roboto Mono", + "fullName": "Roboto Mono Regular", + "postscriptName": "RobotoMono-Regular", + "category": "monospace", + "capHeight": 1456, + "ascent": 2146, + "descent": -555, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 1229 + } + } + }, + "italic": { + "familyName": "Roboto Mono", + "fullName": "Roboto Mono Italic", + "postscriptName": "RobotoMono-Italic", + "category": "monospace", + "capHeight": 1456, + "ascent": 2146, + "descent": -555, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 1202, + "subsets": { + "latin": { + "xWidthAvg": 1202 + }, + "thai": { + "xWidthAvg": 1202 + } + } + }, + "700italic": { + "familyName": "Roboto Mono", + "fullName": "Roboto Mono Bold Italic", + "postscriptName": "RobotoMono-BoldItalic", + "category": "monospace", + "capHeight": 1456, + "ascent": 2146, + "descent": -555, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 1202, + "subsets": { + "latin": { + "xWidthAvg": 1202 + }, + "thai": { + "xWidthAvg": 1202 + } + } + }, + "600italic": { + "familyName": "Roboto Mono", + "fullName": "Roboto Mono SemiBold Italic", + "postscriptName": "RobotoMono-SemiBoldItalic", + "category": "monospace", + "capHeight": 1456, + "ascent": 2146, + "descent": -555, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 1202, + "subsets": { + "latin": { + "xWidthAvg": 1202 + }, + "thai": { + "xWidthAvg": 1202 + } + } + }, + "500italic": { + "familyName": "Roboto Mono", + "fullName": "Roboto Mono Medium Italic", + "postscriptName": "RobotoMono-MediumItalic", + "category": "monospace", + "capHeight": 1456, + "ascent": 2146, + "descent": -555, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 1202, + "subsets": { + "latin": { + "xWidthAvg": 1202 + }, + "thai": { + "xWidthAvg": 1202 + } + } + }, + "300italic": { + "familyName": "Roboto Mono", + "fullName": "Roboto Mono Light Italic", + "postscriptName": "RobotoMono-LightItalic", + "category": "monospace", + "capHeight": 1456, + "ascent": 2146, + "descent": -555, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 1202, + "subsets": { + "latin": { + "xWidthAvg": 1202 + }, + "thai": { + "xWidthAvg": 1202 + } + } + }, + "200italic": { + "familyName": "Roboto Mono", + "fullName": "Roboto Mono ExtraLight Italic", + "postscriptName": "RobotoMono-ExtraLightItalic", + "category": "monospace", + "capHeight": 1456, + "ascent": 2146, + "descent": -555, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 1202, + "subsets": { + "latin": { + "xWidthAvg": 1202 + }, + "thai": { + "xWidthAvg": 1202 + } + } + }, + "100italic": { + "familyName": "Roboto Mono", + "fullName": "Roboto Mono Thin Italic", + "postscriptName": "RobotoMono-ThinItalic", + "category": "monospace", + "capHeight": 1456, + "ascent": 2146, + "descent": -555, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 1202, + "subsets": { + "latin": { + "xWidthAvg": 1202 + }, + "thai": { + "xWidthAvg": 1202 + } + } + } + } + }, + "robotoSerif": { + "familyName": "Roboto Serif", + "fullName": "Roboto Serif Regular", + "postscriptName": "RobotoSerif-Regular", + "category": "serif", + "capHeight": 710, + "ascent": 927, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 516, + "subsets": { + "latin": { + "xWidthAvg": 516 + }, + "thai": { + "xWidthAvg": 400 + } + }, + "variants": { + "100": { + "familyName": "Roboto Serif", + "fullName": "Roboto Serif Thin", + "postscriptName": "RobotoSerif-Thin", + "category": "serif", + "capHeight": 710, + "ascent": 927, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 491, + "subsets": { + "latin": { + "xWidthAvg": 491 + }, + "thai": { + "xWidthAvg": 400 + } + } + }, + "200": { + "familyName": "Roboto Serif", + "fullName": "Roboto Serif ExtraLight", + "postscriptName": "RobotoSerif-ExtraLight", + "category": "serif", + "capHeight": 710, + "ascent": 927, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 499, + "subsets": { + "latin": { + "xWidthAvg": 499 + }, + "thai": { + "xWidthAvg": 400 + } + } + }, + "300": { + "familyName": "Roboto Serif", + "fullName": "Roboto Serif Light", + "postscriptName": "RobotoSerif-Light", + "category": "serif", + "capHeight": 710, + "ascent": 927, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 507, + "subsets": { + "latin": { + "xWidthAvg": 507 + }, + "thai": { + "xWidthAvg": 400 + } + } + }, + "500": { + "familyName": "Roboto Serif", + "fullName": "Roboto Serif Medium", + "postscriptName": "RobotoSerif-Medium", + "category": "serif", + "capHeight": 710, + "ascent": 927, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 400 + } + } + }, + "600": { + "familyName": "Roboto Serif", + "fullName": "Roboto Serif SemiBold", + "postscriptName": "RobotoSerif-SemiBold", + "category": "serif", + "capHeight": 710, + "ascent": 927, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 534, + "subsets": { + "latin": { + "xWidthAvg": 534 + }, + "thai": { + "xWidthAvg": 400 + } + } + }, + "700": { + "familyName": "Roboto Serif", + "fullName": "Roboto Serif Bold", + "postscriptName": "RobotoSerif-Bold", + "category": "serif", + "capHeight": 710, + "ascent": 927, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 543, + "subsets": { + "latin": { + "xWidthAvg": 543 + }, + "thai": { + "xWidthAvg": 400 + } + } + }, + "800": { + "familyName": "Roboto Serif", + "fullName": "Roboto Serif ExtraBold", + "postscriptName": "RobotoSerif-ExtraBold", + "category": "serif", + "capHeight": 710, + "ascent": 927, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 553, + "subsets": { + "latin": { + "xWidthAvg": 553 + }, + "thai": { + "xWidthAvg": 400 + } + } + }, + "900": { + "familyName": "Roboto Serif", + "fullName": "Roboto Serif Black", + "postscriptName": "RobotoSerif-Black", + "category": "serif", + "capHeight": 710, + "ascent": 927, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 562, + "subsets": { + "latin": { + "xWidthAvg": 562 + }, + "thai": { + "xWidthAvg": 400 + } + } + }, + "regular": { + "familyName": "Roboto Serif", + "fullName": "Roboto Serif Regular", + "postscriptName": "RobotoSerif-Regular", + "category": "serif", + "capHeight": 710, + "ascent": 927, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 516, + "subsets": { + "latin": { + "xWidthAvg": 516 + }, + "thai": { + "xWidthAvg": 400 + } + } + }, + "italic": { + "familyName": "Roboto Serif", + "fullName": "Roboto Serif Italic", + "postscriptName": "RobotoSerif-Italic", + "category": "serif", + "capHeight": 710, + "ascent": 927, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 400 + } + } + }, + "900italic": { + "familyName": "Roboto Serif", + "fullName": "Roboto Serif Black Italic", + "postscriptName": "RobotoSerif-BlackItalic", + "category": "serif", + "capHeight": 710, + "ascent": 927, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 558, + "subsets": { + "latin": { + "xWidthAvg": 558 + }, + "thai": { + "xWidthAvg": 400 + } + } + }, + "800italic": { + "familyName": "Roboto Serif", + "fullName": "Roboto Serif ExtraBold Italic", + "postscriptName": "RobotoSerif-ExtraBoldItalic", + "category": "serif", + "capHeight": 710, + "ascent": 927, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 547, + "subsets": { + "latin": { + "xWidthAvg": 547 + }, + "thai": { + "xWidthAvg": 400 + } + } + }, + "700italic": { + "familyName": "Roboto Serif", + "fullName": "Roboto Serif Bold Italic", + "postscriptName": "RobotoSerif-BoldItalic", + "category": "serif", + "capHeight": 710, + "ascent": 927, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 536, + "subsets": { + "latin": { + "xWidthAvg": 536 + }, + "thai": { + "xWidthAvg": 400 + } + } + }, + "600italic": { + "familyName": "Roboto Serif", + "fullName": "Roboto Serif SemiBold Italic", + "postscriptName": "RobotoSerif-SemiBoldItalic", + "category": "serif", + "capHeight": 710, + "ascent": 927, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 525, + "subsets": { + "latin": { + "xWidthAvg": 525 + }, + "thai": { + "xWidthAvg": 400 + } + } + }, + "500italic": { + "familyName": "Roboto Serif", + "fullName": "Roboto Serif Medium Italic", + "postscriptName": "RobotoSerif-MediumItalic", + "category": "serif", + "capHeight": 710, + "ascent": 927, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 514, + "subsets": { + "latin": { + "xWidthAvg": 514 + }, + "thai": { + "xWidthAvg": 400 + } + } + }, + "300italic": { + "familyName": "Roboto Serif", + "fullName": "Roboto Serif Light Italic", + "postscriptName": "RobotoSerif-LightItalic", + "category": "serif", + "capHeight": 710, + "ascent": 927, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 400 + } + } + }, + "200italic": { + "familyName": "Roboto Serif", + "fullName": "Roboto Serif ExtraLight Italic", + "postscriptName": "RobotoSerif-ExtraLightItalic", + "category": "serif", + "capHeight": 710, + "ascent": 927, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 483, + "subsets": { + "latin": { + "xWidthAvg": 483 + }, + "thai": { + "xWidthAvg": 400 + } + } + }, + "100italic": { + "familyName": "Roboto Serif", + "fullName": "Roboto Serif Thin Italic", + "postscriptName": "RobotoSerif-ThinItalic", + "category": "serif", + "capHeight": 710, + "ascent": 927, + "descent": -244, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 400 + } + } + } + } + }, + "robotoSlab": { + "familyName": "Roboto Slab", + "fullName": "Roboto Slab Regular", + "postscriptName": "RobotoSlab-Regular", + "category": "serif", + "capHeight": 1456, + "ascent": 2146, + "descent": -555, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 972, + "subsets": { + "latin": { + "xWidthAvg": 972 + }, + "thai": { + "xWidthAvg": 1038 + } + }, + "variants": { + "100": { + "familyName": "Roboto Slab", + "fullName": "Roboto Slab Thin", + "postscriptName": "RobotoSlab-Thin", + "category": "serif", + "capHeight": 1456, + "ascent": 2146, + "descent": -555, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 953, + "subsets": { + "latin": { + "xWidthAvg": 953 + }, + "thai": { + "xWidthAvg": 1038 + } + } + }, + "200": { + "familyName": "Roboto Slab", + "fullName": "Roboto Slab ExtraLight", + "postscriptName": "RobotoSlab-ExtraLight", + "category": "serif", + "capHeight": 1456, + "ascent": 2146, + "descent": -555, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 958, + "subsets": { + "latin": { + "xWidthAvg": 958 + }, + "thai": { + "xWidthAvg": 1038 + } + } + }, + "300": { + "familyName": "Roboto Slab", + "fullName": "Roboto Slab Light", + "postscriptName": "RobotoSlab-Light", + "category": "serif", + "capHeight": 1456, + "ascent": 2146, + "descent": -555, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 962, + "subsets": { + "latin": { + "xWidthAvg": 962 + }, + "thai": { + "xWidthAvg": 1038 + } + } + }, + "500": { + "familyName": "Roboto Slab", + "fullName": "Roboto Slab Medium", + "postscriptName": "RobotoSlab-Medium", + "category": "serif", + "capHeight": 1456, + "ascent": 2146, + "descent": -555, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 979, + "subsets": { + "latin": { + "xWidthAvg": 979 + }, + "thai": { + "xWidthAvg": 1038 + } + } + }, + "600": { + "familyName": "Roboto Slab", + "fullName": "Roboto Slab SemiBold", + "postscriptName": "RobotoSlab-SemiBold", + "category": "serif", + "capHeight": 1456, + "ascent": 2146, + "descent": -555, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 981, + "subsets": { + "latin": { + "xWidthAvg": 981 + }, + "thai": { + "xWidthAvg": 1038 + } + } + }, + "700": { + "familyName": "Roboto Slab", + "fullName": "Roboto Slab Bold", + "postscriptName": "RobotoSlab-Bold", + "category": "serif", + "capHeight": 1456, + "ascent": 2146, + "descent": -555, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 984, + "subsets": { + "latin": { + "xWidthAvg": 984 + }, + "thai": { + "xWidthAvg": 1038 + } + } + }, + "800": { + "familyName": "Roboto Slab", + "fullName": "Roboto Slab ExtraBold", + "postscriptName": "RobotoSlab-ExtraBold", + "category": "serif", + "capHeight": 1456, + "ascent": 2146, + "descent": -555, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 987, + "subsets": { + "latin": { + "xWidthAvg": 987 + }, + "thai": { + "xWidthAvg": 1038 + } + } + }, + "900": { + "familyName": "Roboto Slab", + "fullName": "Roboto Slab Black", + "postscriptName": "RobotoSlab-Black", + "category": "serif", + "capHeight": 1456, + "ascent": 2146, + "descent": -555, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 991, + "subsets": { + "latin": { + "xWidthAvg": 991 + }, + "thai": { + "xWidthAvg": 1038 + } + } + }, + "regular": { + "familyName": "Roboto Slab", + "fullName": "Roboto Slab Regular", + "postscriptName": "RobotoSlab-Regular", + "category": "serif", + "capHeight": 1456, + "ascent": 2146, + "descent": -555, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 972, + "subsets": { + "latin": { + "xWidthAvg": 972 + }, + "thai": { + "xWidthAvg": 1038 + } + } + } + } + }, + "rochester": { + "familyName": "Rochester", + "fullName": "Rochester Regular", + "postscriptName": "Rochester-Regular", + "category": "handwriting", + "capHeight": 326, + "ascent": 2109, + "descent": -528, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 192, + "xWidthAvg": 687, + "subsets": { + "latin": { + "xWidthAvg": 687 + }, + "thai": { + "xWidthAvg": 471 + } + }, + "variants": { + "regular": { + "familyName": "Rochester", + "fullName": "Rochester Regular", + "postscriptName": "Rochester-Regular", + "category": "handwriting", + "capHeight": 326, + "ascent": 2109, + "descent": -528, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 192, + "xWidthAvg": 687, + "subsets": { + "latin": { + "xWidthAvg": 687 + }, + "thai": { + "xWidthAvg": 471 + } + } + } + } + }, + "rock3D": { + "familyName": "Rock 3D", + "fullName": "Rock 3D Regular", + "postscriptName": "Rock3D-Regular", + "category": "display", + "capHeight": 780, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 686, + "subsets": { + "latin": { + "xWidthAvg": 686 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Rock 3D", + "fullName": "Rock 3D Regular", + "postscriptName": "Rock3D-Regular", + "category": "display", + "capHeight": 780, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 686, + "subsets": { + "latin": { + "xWidthAvg": 686 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "rockSalt": { + "familyName": "Rock Salt", + "fullName": "Rock Salt Regular", + "postscriptName": "RockSalt-Regular", + "category": "handwriting", + "capHeight": 1154, + "ascent": 1623, + "descent": -788, + "lineGap": 32, + "unitsPerEm": 1024, + "xHeight": 833, + "xWidthAvg": 643, + "subsets": { + "latin": { + "xWidthAvg": 643 + }, + "thai": { + "xWidthAvg": 420 + } + }, + "variants": { + "regular": { + "familyName": "Rock Salt", + "fullName": "Rock Salt Regular", + "postscriptName": "RockSalt-Regular", + "category": "handwriting", + "capHeight": 1154, + "ascent": 1623, + "descent": -788, + "lineGap": 32, + "unitsPerEm": 1024, + "xHeight": 833, + "xWidthAvg": 643, + "subsets": { + "latin": { + "xWidthAvg": 643 + }, + "thai": { + "xWidthAvg": 420 + } + } + } + } + }, + "rocknRollOne": { + "familyName": "RocknRoll One", + "fullName": "RocknRoll One Regular", + "postscriptName": "RocknRollOne-Regular", + "category": "sans-serif", + "capHeight": 800, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 572, + "xWidthAvg": 523, + "subsets": { + "latin": { + "xWidthAvg": 523 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "RocknRoll One", + "fullName": "RocknRoll One Regular", + "postscriptName": "RocknRollOne-Regular", + "category": "sans-serif", + "capHeight": 800, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 572, + "xWidthAvg": 523, + "subsets": { + "latin": { + "xWidthAvg": 523 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "rokkitt": { + "familyName": "Rokkitt", + "fullName": "Rokkitt Regular", + "postscriptName": "Rokkitt-Regular", + "category": "serif", + "capHeight": 583, + "ascent": 817, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 399, + "xWidthAvg": 423, + "subsets": { + "latin": { + "xWidthAvg": 423 + }, + "thai": { + "xWidthAvg": 518 + } + }, + "variants": { + "100": { + "familyName": "Rokkitt", + "fullName": "Rokkitt Thin", + "postscriptName": "Rokkitt-Thin", + "category": "serif", + "capHeight": 583, + "ascent": 817, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 399, + "xWidthAvg": 408, + "subsets": { + "latin": { + "xWidthAvg": 408 + }, + "thai": { + "xWidthAvg": 518 + } + } + }, + "200": { + "familyName": "Rokkitt", + "fullName": "Rokkitt ExtraLight", + "postscriptName": "Rokkitt-ExtraLight", + "category": "serif", + "capHeight": 583, + "ascent": 817, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 399, + "xWidthAvg": 413, + "subsets": { + "latin": { + "xWidthAvg": 413 + }, + "thai": { + "xWidthAvg": 518 + } + } + }, + "300": { + "familyName": "Rokkitt", + "fullName": "Rokkitt Light", + "postscriptName": "Rokkitt-Light", + "category": "serif", + "capHeight": 583, + "ascent": 817, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 399, + "xWidthAvg": 416, + "subsets": { + "latin": { + "xWidthAvg": 416 + }, + "thai": { + "xWidthAvg": 518 + } + } + }, + "500": { + "familyName": "Rokkitt", + "fullName": "Rokkitt Medium", + "postscriptName": "Rokkitt-Medium", + "category": "serif", + "capHeight": 583, + "ascent": 817, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 399, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 518 + } + } + }, + "600": { + "familyName": "Rokkitt", + "fullName": "Rokkitt SemiBold", + "postscriptName": "Rokkitt-SemiBold", + "category": "serif", + "capHeight": 583, + "ascent": 817, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 399, + "xWidthAvg": 432, + "subsets": { + "latin": { + "xWidthAvg": 432 + }, + "thai": { + "xWidthAvg": 518 + } + } + }, + "700": { + "familyName": "Rokkitt", + "fullName": "Rokkitt Bold", + "postscriptName": "Rokkitt-Bold", + "category": "serif", + "capHeight": 583, + "ascent": 817, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 399, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 518 + } + } + }, + "800": { + "familyName": "Rokkitt", + "fullName": "Rokkitt ExtraBold", + "postscriptName": "Rokkitt-ExtraBold", + "category": "serif", + "capHeight": 583, + "ascent": 817, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 399, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 518 + } + } + }, + "900": { + "familyName": "Rokkitt", + "fullName": "Rokkitt Black", + "postscriptName": "Rokkitt-Black", + "category": "serif", + "capHeight": 583, + "ascent": 817, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 399, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 518 + } + } + }, + "regular": { + "familyName": "Rokkitt", + "fullName": "Rokkitt Regular", + "postscriptName": "Rokkitt-Regular", + "category": "serif", + "capHeight": 583, + "ascent": 817, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 399, + "xWidthAvg": 423, + "subsets": { + "latin": { + "xWidthAvg": 423 + }, + "thai": { + "xWidthAvg": 518 + } + } + }, + "italic": { + "familyName": "Rokkitt", + "fullName": "Rokkitt Italic", + "postscriptName": "Rokkitt-Italic", + "category": "serif", + "capHeight": 583, + "ascent": 817, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 399, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 518 + } + } + }, + "900italic": { + "familyName": "Rokkitt", + "fullName": "Rokkitt Black Italic", + "postscriptName": "Rokkitt-BlackItalic", + "category": "serif", + "capHeight": 583, + "ascent": 817, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 399, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 518 + } + } + }, + "800italic": { + "familyName": "Rokkitt", + "fullName": "Rokkitt ExtraBold Italic", + "postscriptName": "Rokkitt-ExtraBoldItalic", + "category": "serif", + "capHeight": 583, + "ascent": 817, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 399, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 518 + } + } + }, + "700italic": { + "familyName": "Rokkitt", + "fullName": "Rokkitt Bold Italic", + "postscriptName": "Rokkitt-BoldItalic", + "category": "serif", + "capHeight": 583, + "ascent": 817, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 399, + "xWidthAvg": 436, + "subsets": { + "latin": { + "xWidthAvg": 436 + }, + "thai": { + "xWidthAvg": 518 + } + } + }, + "600italic": { + "familyName": "Rokkitt", + "fullName": "Rokkitt SemiBold Italic", + "postscriptName": "Rokkitt-SemiBoldItalic", + "category": "serif", + "capHeight": 583, + "ascent": 817, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 399, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 518 + } + } + }, + "500italic": { + "familyName": "Rokkitt", + "fullName": "Rokkitt Medium Italic", + "postscriptName": "Rokkitt-MediumItalic", + "category": "serif", + "capHeight": 583, + "ascent": 817, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 399, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 518 + } + } + }, + "300italic": { + "familyName": "Rokkitt", + "fullName": "Rokkitt Light Italic", + "postscriptName": "Rokkitt-LightItalic", + "category": "serif", + "capHeight": 583, + "ascent": 817, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 399, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 518 + } + } + }, + "200italic": { + "familyName": "Rokkitt", + "fullName": "Rokkitt ExtraLight Italic", + "postscriptName": "Rokkitt-ExtraLightItalic", + "category": "serif", + "capHeight": 583, + "ascent": 817, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 399, + "xWidthAvg": 408, + "subsets": { + "latin": { + "xWidthAvg": 408 + }, + "thai": { + "xWidthAvg": 518 + } + } + }, + "100italic": { + "familyName": "Rokkitt", + "fullName": "Rokkitt Thin Italic", + "postscriptName": "Rokkitt-ThinItalic", + "category": "serif", + "capHeight": 583, + "ascent": 817, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 399, + "xWidthAvg": 403, + "subsets": { + "latin": { + "xWidthAvg": 403 + }, + "thai": { + "xWidthAvg": 518 + } + } + } + } + }, + "romanesco": { + "familyName": "Romanesco", + "fullName": "Romanesco", + "postscriptName": "Romanesco-Regular", + "category": "handwriting", + "capHeight": 1393, + "ascent": 1866, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 780, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 307 + } + }, + "variants": { + "regular": { + "familyName": "Romanesco", + "fullName": "Romanesco", + "postscriptName": "Romanesco-Regular", + "category": "handwriting", + "capHeight": 1393, + "ascent": 1866, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 780, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 307 + } + } + } + } + }, + "ropaSans": { + "familyName": "Ropa Sans", + "fullName": "Ropa Sans Regular", + "postscriptName": "RopaSans-Regular", + "category": "sans-serif", + "capHeight": 655, + "ascent": 841, + "descent": -231, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 377, + "subsets": { + "latin": { + "xWidthAvg": 377 + }, + "thai": { + "xWidthAvg": 434 + } + }, + "variants": { + "regular": { + "familyName": "Ropa Sans", + "fullName": "Ropa Sans Regular", + "postscriptName": "RopaSans-Regular", + "category": "sans-serif", + "capHeight": 655, + "ascent": 841, + "descent": -231, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 377, + "subsets": { + "latin": { + "xWidthAvg": 377 + }, + "thai": { + "xWidthAvg": 434 + } + } + }, + "italic": { + "familyName": "Ropa Sans", + "fullName": "Ropa Sans Italic", + "postscriptName": "RopaSans-Italic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 841, + "descent": -231, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 379, + "subsets": { + "latin": { + "xWidthAvg": 379 + }, + "thai": { + "xWidthAvg": 434 + } + } + } + } + }, + "rosario": { + "familyName": "Rosario", + "fullName": "Rosario Regular", + "postscriptName": "Rosario-Regular", + "category": "sans-serif", + "capHeight": 728, + "ascent": 977, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 497, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 641 + } + }, + "variants": { + "300": { + "familyName": "Rosario", + "fullName": "Rosario Light", + "postscriptName": "Rosario-Light", + "category": "sans-serif", + "capHeight": 728, + "ascent": 977, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 497, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 641 + } + } + }, + "500": { + "familyName": "Rosario", + "fullName": "Rosario Medium", + "postscriptName": "Rosario-Medium", + "category": "sans-serif", + "capHeight": 728, + "ascent": 977, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 497, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 641 + } + } + }, + "600": { + "familyName": "Rosario", + "fullName": "Rosario SemiBold", + "postscriptName": "Rosario-SemiBold", + "category": "sans-serif", + "capHeight": 728, + "ascent": 977, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 497, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 641 + } + } + }, + "700": { + "familyName": "Rosario", + "fullName": "Rosario Bold", + "postscriptName": "Rosario-Bold", + "category": "sans-serif", + "capHeight": 728, + "ascent": 977, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 497, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 641 + } + } + }, + "regular": { + "familyName": "Rosario", + "fullName": "Rosario Regular", + "postscriptName": "Rosario-Regular", + "category": "sans-serif", + "capHeight": 728, + "ascent": 977, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 497, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 641 + } + } + }, + "italic": { + "familyName": "Rosario", + "fullName": "Rosario Italic", + "postscriptName": "Rosario-Italic", + "category": "sans-serif", + "capHeight": 724, + "ascent": 977, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 395, + "subsets": { + "latin": { + "xWidthAvg": 395 + }, + "thai": { + "xWidthAvg": 642 + } + } + }, + "700italic": { + "familyName": "Rosario", + "fullName": "Rosario Bold Italic", + "postscriptName": "Rosario-BoldItalic", + "category": "sans-serif", + "capHeight": 724, + "ascent": 977, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 399, + "subsets": { + "latin": { + "xWidthAvg": 399 + }, + "thai": { + "xWidthAvg": 642 + } + } + }, + "600italic": { + "familyName": "Rosario", + "fullName": "Rosario SemiBold Italic", + "postscriptName": "Rosario-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 724, + "ascent": 977, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 397, + "subsets": { + "latin": { + "xWidthAvg": 397 + }, + "thai": { + "xWidthAvg": 642 + } + } + }, + "500italic": { + "familyName": "Rosario", + "fullName": "Rosario Medium Italic", + "postscriptName": "Rosario-MediumItalic", + "category": "sans-serif", + "capHeight": 724, + "ascent": 977, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 395, + "subsets": { + "latin": { + "xWidthAvg": 395 + }, + "thai": { + "xWidthAvg": 642 + } + } + }, + "300italic": { + "familyName": "Rosario", + "fullName": "Rosario Light Italic", + "postscriptName": "Rosario-LightItalic", + "category": "sans-serif", + "capHeight": 724, + "ascent": 977, + "descent": -235, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 392, + "subsets": { + "latin": { + "xWidthAvg": 392 + }, + "thai": { + "xWidthAvg": 642 + } + } + } + } + }, + "rosarivo": { + "familyName": "Rosarivo", + "fullName": "Rosarivo", + "postscriptName": "Rosarivo-Regular", + "category": "serif", + "capHeight": 757, + "ascent": 979, + "descent": -424, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 170, + "xWidthAvg": 476, + "subsets": { + "latin": { + "xWidthAvg": 476 + }, + "thai": { + "xWidthAvg": 667 + } + }, + "variants": { + "regular": { + "familyName": "Rosarivo", + "fullName": "Rosarivo", + "postscriptName": "Rosarivo-Regular", + "category": "serif", + "capHeight": 757, + "ascent": 979, + "descent": -424, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 170, + "xWidthAvg": 476, + "subsets": { + "latin": { + "xWidthAvg": 476 + }, + "thai": { + "xWidthAvg": 667 + } + } + }, + "italic": { + "familyName": "Rosarivo", + "fullName": "Rosarivo Italic", + "postscriptName": "Rosarivo-Italic", + "category": "serif", + "capHeight": 224, + "ascent": 979, + "descent": -424, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 217, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 667 + } + } + } + } + }, + "rougeScript": { + "familyName": "Rouge Script", + "fullName": "Rouge Script", + "postscriptName": "RougeScript-Regular", + "category": "handwriting", + "capHeight": 385, + "ascent": 1050, + "descent": -419, + "lineGap": 0, + "unitsPerEm": 1250, + "xHeight": 534, + "xWidthAvg": 372, + "subsets": { + "latin": { + "xWidthAvg": 372 + }, + "thai": { + "xWidthAvg": 339 + } + }, + "variants": { + "regular": { + "familyName": "Rouge Script", + "fullName": "Rouge Script", + "postscriptName": "RougeScript-Regular", + "category": "handwriting", + "capHeight": 385, + "ascent": 1050, + "descent": -419, + "lineGap": 0, + "unitsPerEm": 1250, + "xHeight": 534, + "xWidthAvg": 372, + "subsets": { + "latin": { + "xWidthAvg": 372 + }, + "thai": { + "xWidthAvg": 339 + } + } + } + } + }, + "rowdies": { + "familyName": "Rowdies", + "fullName": "Rowdies Regular", + "postscriptName": "Rowdies-Regular", + "category": "display", + "capHeight": 708, + "ascent": 997, + "descent": -245, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 473, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 599 + } + }, + "variants": { + "300": { + "familyName": "Rowdies", + "fullName": "Rowdies Light", + "postscriptName": "Rowdies-Light", + "category": "display", + "capHeight": 708, + "ascent": 997, + "descent": -245, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 473, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 599 + } + } + }, + "700": { + "familyName": "Rowdies", + "fullName": "Rowdies Bold", + "postscriptName": "Rowdies-Bold", + "category": "display", + "capHeight": 708, + "ascent": 997, + "descent": -245, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 473, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 599 + } + } + }, + "regular": { + "familyName": "Rowdies", + "fullName": "Rowdies Regular", + "postscriptName": "Rowdies-Regular", + "category": "display", + "capHeight": 708, + "ascent": 997, + "descent": -245, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 473, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 599 + } + } + } + } + }, + "rozhaOne": { + "familyName": "Rozha One", + "fullName": "Rozha One Regular", + "postscriptName": "RozhaOne-Regular", + "category": "serif", + "capHeight": 560, + "ascent": 998, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 750 + } + }, + "variants": { + "regular": { + "familyName": "Rozha One", + "fullName": "Rozha One Regular", + "postscriptName": "RozhaOne-Regular", + "category": "serif", + "capHeight": 560, + "ascent": 998, + "descent": -422, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 750 + } + } + } + } + }, + "rubik": { + "familyName": "Rubik", + "fullName": "Rubik Regular", + "postscriptName": "Rubik-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "300": { + "familyName": "Rubik", + "fullName": "Rubik Light", + "postscriptName": "Rubik-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 695 + } + } + }, + "500": { + "familyName": "Rubik", + "fullName": "Rubik Medium", + "postscriptName": "Rubik-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 695 + } + } + }, + "600": { + "familyName": "Rubik", + "fullName": "Rubik SemiBold", + "postscriptName": "Rubik-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 695 + } + } + }, + "700": { + "familyName": "Rubik", + "fullName": "Rubik Bold", + "postscriptName": "Rubik-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 501, + "subsets": { + "latin": { + "xWidthAvg": 501 + }, + "thai": { + "xWidthAvg": 695 + } + } + }, + "800": { + "familyName": "Rubik", + "fullName": "Rubik ExtraBold", + "postscriptName": "Rubik-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 515, + "subsets": { + "latin": { + "xWidthAvg": 515 + }, + "thai": { + "xWidthAvg": 695 + } + } + }, + "900": { + "familyName": "Rubik", + "fullName": "Rubik Black", + "postscriptName": "Rubik-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + } + }, + "regular": { + "familyName": "Rubik", + "fullName": "Rubik Regular", + "postscriptName": "Rubik-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 695 + } + } + }, + "italic": { + "familyName": "Rubik", + "fullName": "Rubik Italic", + "postscriptName": "Rubik-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 696 + } + } + }, + "900italic": { + "familyName": "Rubik", + "fullName": "Rubik Black Italic", + "postscriptName": "Rubik-BlackItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 531, + "subsets": { + "latin": { + "xWidthAvg": 531 + }, + "thai": { + "xWidthAvg": 696 + } + } + }, + "800italic": { + "familyName": "Rubik", + "fullName": "Rubik ExtraBold Italic", + "postscriptName": "Rubik-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 517, + "subsets": { + "latin": { + "xWidthAvg": 517 + }, + "thai": { + "xWidthAvg": 696 + } + } + }, + "700italic": { + "familyName": "Rubik", + "fullName": "Rubik Bold Italic", + "postscriptName": "Rubik-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 696 + } + } + }, + "600italic": { + "familyName": "Rubik", + "fullName": "Rubik SemiBold Italic", + "postscriptName": "Rubik-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 696 + } + } + }, + "500italic": { + "familyName": "Rubik", + "fullName": "Rubik Medium Italic", + "postscriptName": "Rubik-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 696 + } + } + }, + "300italic": { + "familyName": "Rubik", + "fullName": "Rubik Light Italic", + "postscriptName": "Rubik-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 696 + } + } + } + } + }, + "rubik80sFade": { + "familyName": "Rubik 80s Fade", + "fullName": "Rubik 80s Fade Regular", + "postscriptName": "Rubik80sFade-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "regular": { + "familyName": "Rubik 80s Fade", + "fullName": "Rubik 80s Fade Regular", + "postscriptName": "Rubik80sFade-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + } + } + } + }, + "rubikBeastly": { + "familyName": "Rubik Beastly", + "fullName": "Rubik Beastly Regular", + "postscriptName": "RubikBeastly-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "regular": { + "familyName": "Rubik Beastly", + "fullName": "Rubik Beastly Regular", + "postscriptName": "RubikBeastly-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + } + } + } + }, + "rubikBrokenFax": { + "familyName": "Rubik Broken Fax", + "fullName": "Rubik Broken Fax Regular", + "postscriptName": "RubikBrokenFax-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "regular": { + "familyName": "Rubik Broken Fax", + "fullName": "Rubik Broken Fax Regular", + "postscriptName": "RubikBrokenFax-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + } + } + } + }, + "rubikBubbles": { + "familyName": "Rubik Bubbles", + "fullName": "Rubik Bubbles Regular", + "postscriptName": "RubikBubbles-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "regular": { + "familyName": "Rubik Bubbles", + "fullName": "Rubik Bubbles Regular", + "postscriptName": "RubikBubbles-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + } + } + } + }, + "rubikBurned": { + "familyName": "Rubik Burned", + "fullName": "Rubik Burned Regular", + "postscriptName": "RubikBurned-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "regular": { + "familyName": "Rubik Burned", + "fullName": "Rubik Burned Regular", + "postscriptName": "RubikBurned-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + } + } + } + }, + "rubikDirt": { + "familyName": "Rubik Dirt", + "fullName": "Rubik Dirt Regular", + "postscriptName": "RubikDirt-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "regular": { + "familyName": "Rubik Dirt", + "fullName": "Rubik Dirt Regular", + "postscriptName": "RubikDirt-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + } + } + } + }, + "rubikDistressed": { + "familyName": "Rubik Distressed", + "fullName": "Rubik Distressed Regular", + "postscriptName": "RubikDistressed-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "regular": { + "familyName": "Rubik Distressed", + "fullName": "Rubik Distressed Regular", + "postscriptName": "RubikDistressed-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + } + } + } + }, + "rubikDoodleShadow": { + "familyName": "Rubik Doodle Shadow", + "fullName": "Rubik Doodle Shadow Regular", + "postscriptName": "RubikDoodleShadow-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "regular": { + "familyName": "Rubik Doodle Shadow", + "fullName": "Rubik Doodle Shadow Regular", + "postscriptName": "RubikDoodleShadow-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + } + } + } + }, + "rubikDoodleTriangles": { + "familyName": "Rubik Doodle Triangles", + "fullName": "Rubik Doodle Triangles Regular", + "postscriptName": "RubikDoodleTriangles-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "regular": { + "familyName": "Rubik Doodle Triangles", + "fullName": "Rubik Doodle Triangles Regular", + "postscriptName": "RubikDoodleTriangles-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + } + } + } + }, + "rubikGemstones": { + "familyName": "Rubik Gemstones", + "fullName": "Rubik Gemstones Regular", + "postscriptName": "RubikGemstones-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "regular": { + "familyName": "Rubik Gemstones", + "fullName": "Rubik Gemstones Regular", + "postscriptName": "RubikGemstones-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + } + } + } + }, + "rubikGlitch": { + "familyName": "Rubik Glitch", + "fullName": "Rubik Glitch Regular", + "postscriptName": "RubikGlitch-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "regular": { + "familyName": "Rubik Glitch", + "fullName": "Rubik Glitch Regular", + "postscriptName": "RubikGlitch-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + } + } + } + }, + "rubikGlitchPop": { + "familyName": "Rubik Glitch Pop", + "fullName": "Rubik Glitch Pop Regular", + "postscriptName": "RubikGlitchPop-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "regular": { + "familyName": "Rubik Glitch Pop", + "fullName": "Rubik Glitch Pop Regular", + "postscriptName": "RubikGlitchPop-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + } + } + } + }, + "rubikIso": { + "familyName": "Rubik Iso", + "fullName": "Rubik Iso Regular", + "postscriptName": "RubikIso-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "regular": { + "familyName": "Rubik Iso", + "fullName": "Rubik Iso Regular", + "postscriptName": "RubikIso-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + } + } + } + }, + "rubikLines": { + "familyName": "Rubik Lines", + "fullName": "Rubik Lines Regular", + "postscriptName": "RubikLines-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "regular": { + "familyName": "Rubik Lines", + "fullName": "Rubik Lines Regular", + "postscriptName": "RubikLines-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + } + } + } + }, + "rubikMaps": { + "familyName": "Rubik Maps", + "fullName": "Rubik Maps Regular", + "postscriptName": "RubikMaps-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "regular": { + "familyName": "Rubik Maps", + "fullName": "Rubik Maps Regular", + "postscriptName": "RubikMaps-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + } + } + } + }, + "rubikMarkerHatch": { + "familyName": "Rubik Marker Hatch", + "fullName": "Rubik Marker Hatch Regular", + "postscriptName": "RubikMarkerHatch-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "regular": { + "familyName": "Rubik Marker Hatch", + "fullName": "Rubik Marker Hatch Regular", + "postscriptName": "RubikMarkerHatch-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + } + } + } + }, + "rubikMaze": { + "familyName": "Rubik Maze", + "fullName": "Rubik Maze Regular", + "postscriptName": "RubikMaze-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "regular": { + "familyName": "Rubik Maze", + "fullName": "Rubik Maze Regular", + "postscriptName": "RubikMaze-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + } + } + } + }, + "rubikMicrobe": { + "familyName": "Rubik Microbe", + "fullName": "Rubik Microbe Regular", + "postscriptName": "RubikMicrobe-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "regular": { + "familyName": "Rubik Microbe", + "fullName": "Rubik Microbe Regular", + "postscriptName": "RubikMicrobe-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + } + } + } + }, + "rubikMonoOne": { + "familyName": "Rubik Mono One", + "fullName": "Rubik Mono One Regular", + "postscriptName": "RubikMonoOne-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 932, + "descent": -306, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 700, + "xWidthAvg": 850, + "subsets": { + "latin": { + "xWidthAvg": 850 + }, + "thai": { + "xWidthAvg": 850 + } + }, + "variants": { + "regular": { + "familyName": "Rubik Mono One", + "fullName": "Rubik Mono One Regular", + "postscriptName": "RubikMonoOne-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 932, + "descent": -306, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 700, + "xWidthAvg": 850, + "subsets": { + "latin": { + "xWidthAvg": 850 + }, + "thai": { + "xWidthAvg": 850 + } + } + } + } + }, + "rubikMoonrocks": { + "familyName": "Rubik Moonrocks", + "fullName": "Rubik Moonrocks Regular", + "postscriptName": "RubikMoonrocks-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "regular": { + "familyName": "Rubik Moonrocks", + "fullName": "Rubik Moonrocks Regular", + "postscriptName": "RubikMoonrocks-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + } + } + } + }, + "rubikPixels": { + "familyName": "Rubik Pixels", + "fullName": "Rubik Pixels Regular", + "postscriptName": "RubikPixels-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "regular": { + "familyName": "Rubik Pixels", + "fullName": "Rubik Pixels Regular", + "postscriptName": "RubikPixels-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + } + } + } + }, + "rubikPuddles": { + "familyName": "Rubik Puddles", + "fullName": "Rubik Puddles Regular", + "postscriptName": "RubikPuddles-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "regular": { + "familyName": "Rubik Puddles", + "fullName": "Rubik Puddles Regular", + "postscriptName": "RubikPuddles-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + } + } + } + }, + "rubikScribble": { + "familyName": "Rubik Scribble", + "fullName": "Rubik Scribble Regular", + "postscriptName": "RubikScribble-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "regular": { + "familyName": "Rubik Scribble", + "fullName": "Rubik Scribble Regular", + "postscriptName": "RubikScribble-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + } + } + } + }, + "rubikSprayPaint": { + "familyName": "Rubik Spray Paint", + "fullName": "Rubik Spray Paint Regular", + "postscriptName": "RubikSprayPaint-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "regular": { + "familyName": "Rubik Spray Paint", + "fullName": "Rubik Spray Paint Regular", + "postscriptName": "RubikSprayPaint-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + } + } + } + }, + "rubikStorm": { + "familyName": "Rubik Storm", + "fullName": "Rubik Storm Regular", + "postscriptName": "RubikStorm-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "regular": { + "familyName": "Rubik Storm", + "fullName": "Rubik Storm Regular", + "postscriptName": "RubikStorm-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + } + } + } + }, + "rubikVinyl": { + "familyName": "Rubik Vinyl", + "fullName": "Rubik Vinyl Regular", + "postscriptName": "RubikVinyl-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "regular": { + "familyName": "Rubik Vinyl", + "fullName": "Rubik Vinyl Regular", + "postscriptName": "RubikVinyl-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + } + } + } + }, + "rubikWetPaint": { + "familyName": "Rubik Wet Paint", + "fullName": "Rubik Wet Paint Regular", + "postscriptName": "RubikWetPaint-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "regular": { + "familyName": "Rubik Wet Paint", + "fullName": "Rubik Wet Paint Regular", + "postscriptName": "RubikWetPaint-Regular", + "category": "display", + "capHeight": 700, + "ascent": 935, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 528, + "subsets": { + "latin": { + "xWidthAvg": 528 + }, + "thai": { + "xWidthAvg": 695 + } + } + } + } + }, + "ruda": { + "familyName": "Ruda", + "fullName": "Ruda Regular", + "postscriptName": "Ruda-Regular", + "category": "sans-serif", + "capHeight": 695, + "ascent": 922, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 582, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 276 + } + }, + "variants": { + "500": { + "familyName": "Ruda", + "fullName": "Ruda Medium", + "postscriptName": "Ruda-Medium", + "category": "sans-serif", + "capHeight": 695, + "ascent": 922, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 582, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 276 + } + } + }, + "600": { + "familyName": "Ruda", + "fullName": "Ruda SemiBold", + "postscriptName": "Ruda-SemiBold", + "category": "sans-serif", + "capHeight": 695, + "ascent": 922, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 582, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 276 + } + } + }, + "700": { + "familyName": "Ruda", + "fullName": "Ruda Bold", + "postscriptName": "Ruda-Bold", + "category": "sans-serif", + "capHeight": 695, + "ascent": 922, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 582, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 276 + } + } + }, + "800": { + "familyName": "Ruda", + "fullName": "Ruda ExtraBold", + "postscriptName": "Ruda-ExtraBold", + "category": "sans-serif", + "capHeight": 695, + "ascent": 922, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 582, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 276 + } + } + }, + "900": { + "familyName": "Ruda", + "fullName": "Ruda Black", + "postscriptName": "Ruda-Black", + "category": "sans-serif", + "capHeight": 695, + "ascent": 922, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 582, + "xWidthAvg": 497, + "subsets": { + "latin": { + "xWidthAvg": 497 + }, + "thai": { + "xWidthAvg": 276 + } + } + }, + "regular": { + "familyName": "Ruda", + "fullName": "Ruda Regular", + "postscriptName": "Ruda-Regular", + "category": "sans-serif", + "capHeight": 695, + "ascent": 922, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 582, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 276 + } + } + } + } + }, + "rufina": { + "familyName": "Rufina", + "fullName": "Rufina", + "postscriptName": "Rufina-Regular", + "category": "serif", + "capHeight": 668, + "ascent": 945, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 254 + } + }, + "variants": { + "700": { + "familyName": "Rufina", + "fullName": "Rufina Bold", + "postscriptName": "Rufina-Bold", + "category": "serif", + "capHeight": 668, + "ascent": 945, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 242 + } + } + }, + "regular": { + "familyName": "Rufina", + "fullName": "Rufina", + "postscriptName": "Rufina-Regular", + "category": "serif", + "capHeight": 668, + "ascent": 945, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 254 + } + } + } + } + }, + "rugeBoogie": { + "familyName": "Ruge Boogie", + "fullName": "Ruge Boogie Regular", + "postscriptName": "RugeBoogie-Regular", + "category": "handwriting", + "capHeight": 640, + "ascent": 875, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 390, + "xWidthAvg": 309, + "subsets": { + "latin": { + "xWidthAvg": 309 + }, + "thai": { + "xWidthAvg": 449 + } + }, + "variants": { + "regular": { + "familyName": "Ruge Boogie", + "fullName": "Ruge Boogie Regular", + "postscriptName": "RugeBoogie-Regular", + "category": "handwriting", + "capHeight": 640, + "ascent": 875, + "descent": -375, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 390, + "xWidthAvg": 309, + "subsets": { + "latin": { + "xWidthAvg": 309 + }, + "thai": { + "xWidthAvg": 449 + } + } + } + } + }, + "ruluko": { + "familyName": "Ruluko", + "fullName": "Ruluko", + "postscriptName": "Ruluko", + "category": "sans-serif", + "capHeight": 690, + "ascent": 914, + "descent": -241, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 210 + } + }, + "variants": { + "regular": { + "familyName": "Ruluko", + "fullName": "Ruluko", + "postscriptName": "Ruluko", + "category": "sans-serif", + "capHeight": 690, + "ascent": 914, + "descent": -241, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 210 + } + } + } + } + }, + "rumRaisin": { + "familyName": "Rum Raisin", + "fullName": "Rum Raisin", + "postscriptName": "RumRaisin-Regular", + "category": "sans-serif", + "capHeight": 1466, + "ascent": 2013, + "descent": -629, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 725, + "subsets": { + "latin": { + "xWidthAvg": 725 + }, + "thai": { + "xWidthAvg": 430 + } + }, + "variants": { + "regular": { + "familyName": "Rum Raisin", + "fullName": "Rum Raisin", + "postscriptName": "RumRaisin-Regular", + "category": "sans-serif", + "capHeight": 1466, + "ascent": 2013, + "descent": -629, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1118, + "xWidthAvg": 725, + "subsets": { + "latin": { + "xWidthAvg": 725 + }, + "thai": { + "xWidthAvg": 430 + } + } + } + } + }, + "ruslanDisplay": { + "familyName": "Ruslan Display", + "fullName": "Ruslan Display Regular", + "postscriptName": "RuslanDisplay", + "category": "display", + "capHeight": 500, + "ascent": 688, + "descent": -397, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 610, + "subsets": { + "latin": { + "xWidthAvg": 610 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Ruslan Display", + "fullName": "Ruslan Display Regular", + "postscriptName": "RuslanDisplay", + "category": "display", + "capHeight": 500, + "ascent": 688, + "descent": -397, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 610, + "subsets": { + "latin": { + "xWidthAvg": 610 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "russoOne": { + "familyName": "Russo One", + "fullName": "Russo One", + "postscriptName": "RussoOne-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 926, + "descent": -279, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 516, + "subsets": { + "latin": { + "xWidthAvg": 516 + }, + "thai": { + "xWidthAvg": 300 + } + }, + "variants": { + "regular": { + "familyName": "Russo One", + "fullName": "Russo One", + "postscriptName": "RussoOne-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 926, + "descent": -279, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 516, + "subsets": { + "latin": { + "xWidthAvg": 516 + }, + "thai": { + "xWidthAvg": 300 + } + } + } + } + }, + "ruthie": { + "familyName": "Ruthie", + "fullName": "Ruthie Regular", + "postscriptName": "Ruthie-Regular", + "category": "handwriting", + "capHeight": 701, + "ascent": 800, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 315, + "xWidthAvg": 292, + "subsets": { + "latin": { + "xWidthAvg": 292 + }, + "thai": { + "xWidthAvg": 495 + } + }, + "variants": { + "regular": { + "familyName": "Ruthie", + "fullName": "Ruthie Regular", + "postscriptName": "Ruthie-Regular", + "category": "handwriting", + "capHeight": 701, + "ascent": 800, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 315, + "xWidthAvg": 292, + "subsets": { + "latin": { + "xWidthAvg": 292 + }, + "thai": { + "xWidthAvg": 495 + } + } + } + } + }, + "ruwudu": { + "familyName": "Ruwudu", + "fullName": "Ruwudu", + "postscriptName": "Ruwudu-Regular", + "category": "serif", + "capHeight": 660, + "ascent": 867, + "descent": -741, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 430, + "xWidthAvg": 417, + "subsets": { + "latin": { + "xWidthAvg": 417 + }, + "thai": { + "xWidthAvg": 1033 + } + }, + "variants": { + "500": { + "familyName": "Ruwudu", + "fullName": "Ruwudu Medium", + "postscriptName": "Ruwudu-Medium", + "category": "serif", + "capHeight": 660, + "ascent": 867, + "descent": -741, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 430, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 1033 + } + } + }, + "600": { + "familyName": "Ruwudu", + "fullName": "Ruwudu SemiBold", + "postscriptName": "Ruwudu-SemiBold", + "category": "serif", + "capHeight": 660, + "ascent": 867, + "descent": -741, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 430, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 1033 + } + } + }, + "700": { + "familyName": "Ruwudu", + "fullName": "Ruwudu Bold", + "postscriptName": "Ruwudu-Bold", + "category": "serif", + "capHeight": 660, + "ascent": 867, + "descent": -741, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 430, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 1033 + } + } + }, + "regular": { + "familyName": "Ruwudu", + "fullName": "Ruwudu", + "postscriptName": "Ruwudu-Regular", + "category": "serif", + "capHeight": 660, + "ascent": 867, + "descent": -741, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 430, + "xWidthAvg": 417, + "subsets": { + "latin": { + "xWidthAvg": 417 + }, + "thai": { + "xWidthAvg": 1033 + } + } + } + } + }, + "rye": { + "familyName": "Rye", + "fullName": "Rye Regular", + "postscriptName": "Rye-Regular", + "category": "display", + "capHeight": 363, + "ascent": 2020, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 387, + "xWidthAvg": 1081, + "subsets": { + "latin": { + "xWidthAvg": 1081 + }, + "thai": { + "xWidthAvg": 1073 + } + }, + "variants": { + "regular": { + "familyName": "Rye", + "fullName": "Rye Regular", + "postscriptName": "Rye-Regular", + "category": "display", + "capHeight": 363, + "ascent": 2020, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 387, + "xWidthAvg": 1081, + "subsets": { + "latin": { + "xWidthAvg": 1081 + }, + "thai": { + "xWidthAvg": 1073 + } + } + } + } + }, + "sTIXTwoText": { + "familyName": "STIX Two Text", + "fullName": "STIX Two Text Regular", + "postscriptName": "STIXTwoText-Regular", + "category": "serif", + "capHeight": 657, + "ascent": 762, + "descent": -238, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 473, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 605 + } + }, + "variants": { + "500": { + "familyName": "STIX Two Text", + "fullName": "STIX Two Text Medium", + "postscriptName": "STIXTwoText-Medium", + "category": "serif", + "capHeight": 657, + "ascent": 762, + "descent": -238, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 473, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 605 + } + } + }, + "600": { + "familyName": "STIX Two Text", + "fullName": "STIX Two Text SemiBold", + "postscriptName": "STIXTwoText-SemiBold", + "category": "serif", + "capHeight": 657, + "ascent": 762, + "descent": -238, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 473, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 605 + } + } + }, + "700": { + "familyName": "STIX Two Text", + "fullName": "STIX Two Text Bold", + "postscriptName": "STIXTwoText-Bold", + "category": "serif", + "capHeight": 657, + "ascent": 762, + "descent": -238, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 473, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 605 + } + } + }, + "regular": { + "familyName": "STIX Two Text", + "fullName": "STIX Two Text Regular", + "postscriptName": "STIXTwoText-Regular", + "category": "serif", + "capHeight": 657, + "ascent": 762, + "descent": -238, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 473, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 605 + } + } + }, + "italic": { + "familyName": "STIX Two Text", + "fullName": "STIX Two Text Italic", + "postscriptName": "STIXTwoText-Italic", + "category": "serif", + "capHeight": 657, + "ascent": 762, + "descent": -238, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 467, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 605 + } + } + }, + "700italic": { + "familyName": "STIX Two Text", + "fullName": "STIX Two Text Bold Italic", + "postscriptName": "STIXTwoText-BoldItalic", + "category": "serif", + "capHeight": 657, + "ascent": 762, + "descent": -238, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 467, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 605 + } + } + }, + "600italic": { + "familyName": "STIX Two Text", + "fullName": "STIX Two Text SemiBold Italic", + "postscriptName": "STIXTwoText-SemiBoldItalic", + "category": "serif", + "capHeight": 657, + "ascent": 762, + "descent": -238, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 467, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 605 + } + } + }, + "500italic": { + "familyName": "STIX Two Text", + "fullName": "STIX Two Text Medium Italic", + "postscriptName": "STIXTwoText-MediumItalic", + "category": "serif", + "capHeight": 657, + "ascent": 762, + "descent": -238, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 467, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 605 + } + } + } + } + }, + "sUSE": { + "familyName": "SUSE", + "fullName": "SUSE Regular", + "postscriptName": "SUSE-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 855 + } + }, + "variants": { + "100": { + "familyName": "SUSE", + "fullName": "SUSE Thin", + "postscriptName": "SUSE-Thin", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 865 + } + } + }, + "200": { + "familyName": "SUSE", + "fullName": "SUSE ExtraLight", + "postscriptName": "SUSE-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 862 + } + } + }, + "300": { + "familyName": "SUSE", + "fullName": "SUSE Light", + "postscriptName": "SUSE-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 858 + } + } + }, + "500": { + "familyName": "SUSE", + "fullName": "SUSE Medium", + "postscriptName": "SUSE-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 851 + } + } + }, + "600": { + "familyName": "SUSE", + "fullName": "SUSE SemiBold", + "postscriptName": "SUSE-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 848 + } + } + }, + "700": { + "familyName": "SUSE", + "fullName": "SUSE Bold", + "postscriptName": "SUSE-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 844 + } + } + }, + "800": { + "familyName": "SUSE", + "fullName": "SUSE ExtraBold", + "postscriptName": "SUSE-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 493, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 841 + } + } + }, + "regular": { + "familyName": "SUSE", + "fullName": "SUSE Regular", + "postscriptName": "SUSE-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 980, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 855 + } + } + } + } + }, + "sacramento": { + "familyName": "Sacramento", + "fullName": "Sacramento", + "postscriptName": "Sacramento-Regular", + "category": "handwriting", + "capHeight": 1550, + "ascent": 1905, + "descent": -1084, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 627, + "xWidthAvg": 672, + "subsets": { + "latin": { + "xWidthAvg": 672 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Sacramento", + "fullName": "Sacramento", + "postscriptName": "Sacramento-Regular", + "category": "handwriting", + "capHeight": 1550, + "ascent": 1905, + "descent": -1084, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 627, + "xWidthAvg": 672, + "subsets": { + "latin": { + "xWidthAvg": 672 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "sahitya": { + "familyName": "Sahitya", + "fullName": "Sahitya", + "postscriptName": "Sahitya-Regular", + "category": "serif", + "capHeight": 637, + "ascent": 1106, + "descent": -447, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 452, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "700": { + "familyName": "Sahitya", + "fullName": "Sahitya Bold", + "postscriptName": "Sahitya-Bold", + "category": "serif", + "capHeight": 642, + "ascent": 1106, + "descent": -447, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 462, + "xWidthAvg": 415, + "subsets": { + "latin": { + "xWidthAvg": 415 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Sahitya", + "fullName": "Sahitya", + "postscriptName": "Sahitya-Regular", + "category": "serif", + "capHeight": 637, + "ascent": 1106, + "descent": -447, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 452, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "sail": { + "familyName": "Sail", + "fullName": "Sail", + "postscriptName": "Sail-Regular", + "category": "display", + "capHeight": 666, + "ascent": 860, + "descent": -294, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 435, + "xWidthAvg": 402, + "subsets": { + "latin": { + "xWidthAvg": 402 + }, + "thai": { + "xWidthAvg": 251 + } + }, + "variants": { + "regular": { + "familyName": "Sail", + "fullName": "Sail", + "postscriptName": "Sail-Regular", + "category": "display", + "capHeight": 666, + "ascent": 860, + "descent": -294, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 435, + "xWidthAvg": 402, + "subsets": { + "latin": { + "xWidthAvg": 402 + }, + "thai": { + "xWidthAvg": 251 + } + } + } + } + }, + "saira": { + "familyName": "Saira", + "fullName": "Saira Regular", + "postscriptName": "Saira-Regular", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "100": { + "familyName": "Saira", + "fullName": "Saira Thin", + "postscriptName": "Saira-Thin", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200": { + "familyName": "Saira", + "fullName": "Saira ExtraLight", + "postscriptName": "Saira-ExtraLight", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Saira", + "fullName": "Saira Light", + "postscriptName": "Saira-Light", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Saira", + "fullName": "Saira Medium", + "postscriptName": "Saira-Medium", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Saira", + "fullName": "Saira SemiBold", + "postscriptName": "Saira-SemiBold", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Saira", + "fullName": "Saira Bold", + "postscriptName": "Saira-Bold", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Saira", + "fullName": "Saira ExtraBold", + "postscriptName": "Saira-ExtraBold", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "Saira", + "fullName": "Saira Black", + "postscriptName": "Saira-Black", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Saira", + "fullName": "Saira Regular", + "postscriptName": "Saira-Regular", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Saira", + "fullName": "Saira Italic", + "postscriptName": "Saira-Italic", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 850 + } + } + }, + "900italic": { + "familyName": "Saira", + "fullName": "Saira Black Italic", + "postscriptName": "Saira-BlackItalic", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 747 + } + } + }, + "800italic": { + "familyName": "Saira", + "fullName": "Saira ExtraBold Italic", + "postscriptName": "Saira-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 768 + } + } + }, + "700italic": { + "familyName": "Saira", + "fullName": "Saira Bold Italic", + "postscriptName": "Saira-BoldItalic", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 792 + } + } + }, + "600italic": { + "familyName": "Saira", + "fullName": "Saira SemiBold Italic", + "postscriptName": "Saira-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 816 + } + } + }, + "500italic": { + "familyName": "Saira", + "fullName": "Saira Medium Italic", + "postscriptName": "Saira-MediumItalic", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 835 + } + } + }, + "300italic": { + "familyName": "Saira", + "fullName": "Saira Light Italic", + "postscriptName": "Saira-LightItalic", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 862 + } + } + }, + "200italic": { + "familyName": "Saira", + "fullName": "Saira ExtraLight Italic", + "postscriptName": "Saira-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 871 + } + } + }, + "100italic": { + "familyName": "Saira", + "fullName": "Saira Thin Italic", + "postscriptName": "Saira-ThinItalic", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 878 + } + } + } + } + }, + "sairaCondensed": { + "familyName": "Saira Condensed", + "fullName": "Saira Condensed Regular", + "postscriptName": "SairaCondensed-Regular", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 353, + "subsets": { + "latin": { + "xWidthAvg": 353 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "100": { + "familyName": "Saira Condensed", + "fullName": "Saira Condensed Thin", + "postscriptName": "SairaCondensed-Thin", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 349, + "subsets": { + "latin": { + "xWidthAvg": 349 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200": { + "familyName": "Saira Condensed", + "fullName": "Saira Condensed ExtraLight", + "postscriptName": "SairaCondensed-ExtraLight", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 350, + "subsets": { + "latin": { + "xWidthAvg": 350 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Saira Condensed", + "fullName": "Saira Condensed Light", + "postscriptName": "SairaCondensed-Light", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 351, + "subsets": { + "latin": { + "xWidthAvg": 351 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Saira Condensed", + "fullName": "Saira Condensed Medium", + "postscriptName": "SairaCondensed-Medium", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 355, + "subsets": { + "latin": { + "xWidthAvg": 355 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Saira Condensed", + "fullName": "Saira Condensed SemiBold", + "postscriptName": "SairaCondensed-SemiBold", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 355, + "subsets": { + "latin": { + "xWidthAvg": 355 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Saira Condensed", + "fullName": "Saira Condensed Bold", + "postscriptName": "SairaCondensed-Bold", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 357, + "subsets": { + "latin": { + "xWidthAvg": 357 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Saira Condensed", + "fullName": "Saira Condensed ExtraBold", + "postscriptName": "SairaCondensed-ExtraBold", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 362, + "subsets": { + "latin": { + "xWidthAvg": 362 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "Saira Condensed", + "fullName": "Saira Condensed Black", + "postscriptName": "SairaCondensed-Black", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 368, + "subsets": { + "latin": { + "xWidthAvg": 368 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Saira Condensed", + "fullName": "Saira Condensed Regular", + "postscriptName": "SairaCondensed-Regular", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 353, + "subsets": { + "latin": { + "xWidthAvg": 353 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "sairaExtraCondensed": { + "familyName": "Saira Extra Condensed", + "fullName": "Saira ExtraCondensed Regular", + "postscriptName": "SairaExtraCondensed-Regular", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 301, + "subsets": { + "latin": { + "xWidthAvg": 301 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "100": { + "familyName": "Saira Extra Condensed", + "fullName": "Saira ExtraCondensed Thin", + "postscriptName": "SairaExtraCondensed-Thin", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 297, + "subsets": { + "latin": { + "xWidthAvg": 297 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200": { + "familyName": "Saira Extra Condensed", + "fullName": "Saira ExtraCondensed ExtraLight", + "postscriptName": "SairaExtraCondensed-ExtraLight", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 299, + "subsets": { + "latin": { + "xWidthAvg": 299 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Saira Extra Condensed", + "fullName": "Saira ExtraCondensed Light", + "postscriptName": "SairaExtraCondensed-Light", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 299, + "subsets": { + "latin": { + "xWidthAvg": 299 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Saira Extra Condensed", + "fullName": "Saira ExtraCondensed Medium", + "postscriptName": "SairaExtraCondensed-Medium", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 304, + "subsets": { + "latin": { + "xWidthAvg": 304 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Saira Extra Condensed", + "fullName": "Saira ExtraCondensed SemiBold", + "postscriptName": "SairaExtraCondensed-SemiBold", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 307, + "subsets": { + "latin": { + "xWidthAvg": 307 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Saira Extra Condensed", + "fullName": "Saira ExtraCondensed Bold", + "postscriptName": "SairaExtraCondensed-Bold", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 309, + "subsets": { + "latin": { + "xWidthAvg": 309 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Saira Extra Condensed", + "fullName": "Saira ExtraCondensed ExtraBold", + "postscriptName": "SairaExtraCondensed-ExtraBold", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 310, + "subsets": { + "latin": { + "xWidthAvg": 310 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "Saira Extra Condensed", + "fullName": "Saira ExtraCondensed Black", + "postscriptName": "SairaExtraCondensed-Black", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 311, + "subsets": { + "latin": { + "xWidthAvg": 311 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Saira Extra Condensed", + "fullName": "Saira ExtraCondensed Regular", + "postscriptName": "SairaExtraCondensed-Regular", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 301, + "subsets": { + "latin": { + "xWidthAvg": 301 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "sairaSemiCondensed": { + "familyName": "Saira Semi Condensed", + "fullName": "Saira SemiCondensed Regular", + "postscriptName": "SairaSemiCondensed-Regular", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 409, + "subsets": { + "latin": { + "xWidthAvg": 409 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "100": { + "familyName": "Saira Semi Condensed", + "fullName": "Saira SemiCondensed Thin", + "postscriptName": "SairaSemiCondensed-Thin", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 404, + "subsets": { + "latin": { + "xWidthAvg": 404 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200": { + "familyName": "Saira Semi Condensed", + "fullName": "Saira SemiCondensed ExtraLight", + "postscriptName": "SairaSemiCondensed-ExtraLight", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 406, + "subsets": { + "latin": { + "xWidthAvg": 406 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Saira Semi Condensed", + "fullName": "Saira SemiCondensed Light", + "postscriptName": "SairaSemiCondensed-Light", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 406, + "subsets": { + "latin": { + "xWidthAvg": 406 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Saira Semi Condensed", + "fullName": "Saira SemiCondensed Medium", + "postscriptName": "SairaSemiCondensed-Medium", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Saira Semi Condensed", + "fullName": "Saira SemiCondensed SemiBold", + "postscriptName": "SairaSemiCondensed-SemiBold", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 414, + "subsets": { + "latin": { + "xWidthAvg": 414 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Saira Semi Condensed", + "fullName": "Saira SemiCondensed Bold", + "postscriptName": "SairaSemiCondensed-Bold", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Saira Semi Condensed", + "fullName": "Saira SemiCondensed ExtraBold", + "postscriptName": "SairaSemiCondensed-ExtraBold", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "Saira Semi Condensed", + "fullName": "Saira SemiCondensed Black", + "postscriptName": "SairaSemiCondensed-Black", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Saira Semi Condensed", + "fullName": "Saira SemiCondensed Regular", + "postscriptName": "SairaSemiCondensed-Regular", + "category": "sans-serif", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 409, + "subsets": { + "latin": { + "xWidthAvg": 409 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "sairaStencilOne": { + "familyName": "Saira Stencil One", + "fullName": "Saira Stencil One Regular", + "postscriptName": "SairaStencilOne-Regular", + "category": "display", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Saira Stencil One", + "fullName": "Saira Stencil One Regular", + "postscriptName": "SairaStencilOne-Regular", + "category": "display", + "capHeight": 688, + "ascent": 1135, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "salsa": { + "familyName": "Salsa", + "fullName": "Salsa-Regular", + "postscriptName": "Salsa-Regular", + "category": "display", + "capHeight": 82, + "ascent": 974, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 113, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 320 + } + }, + "variants": { + "regular": { + "familyName": "Salsa", + "fullName": "Salsa-Regular", + "postscriptName": "Salsa-Regular", + "category": "display", + "capHeight": 82, + "ascent": 974, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 113, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 320 + } + } + } + } + }, + "sanchez": { + "familyName": "Sanchez", + "fullName": "Sanchez", + "postscriptName": "Sanchez-Regular", + "category": "serif", + "capHeight": 718, + "ascent": 1004, + "descent": -274, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 491, + "subsets": { + "latin": { + "xWidthAvg": 491 + }, + "thai": { + "xWidthAvg": 313 + } + }, + "variants": { + "regular": { + "familyName": "Sanchez", + "fullName": "Sanchez", + "postscriptName": "Sanchez-Regular", + "category": "serif", + "capHeight": 718, + "ascent": 1004, + "descent": -274, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 491, + "subsets": { + "latin": { + "xWidthAvg": 491 + }, + "thai": { + "xWidthAvg": 313 + } + } + }, + "italic": { + "familyName": "Sanchez", + "fullName": "Sanchez Italic", + "postscriptName": "Sanchez-Italic", + "category": "serif", + "capHeight": 718, + "ascent": 1004, + "descent": -274, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 491, + "subsets": { + "latin": { + "xWidthAvg": 491 + }, + "thai": { + "xWidthAvg": 313 + } + } + } + } + }, + "sancreek": { + "familyName": "Sancreek", + "fullName": "Sancreek Regular", + "postscriptName": "Sancreek-Regular", + "category": "display", + "capHeight": 281, + "ascent": 2104, + "descent": -738, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 402, + "xWidthAvg": 953, + "subsets": { + "latin": { + "xWidthAvg": 953 + }, + "thai": { + "xWidthAvg": 748 + } + }, + "variants": { + "regular": { + "familyName": "Sancreek", + "fullName": "Sancreek Regular", + "postscriptName": "Sancreek-Regular", + "category": "display", + "capHeight": 281, + "ascent": 2104, + "descent": -738, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 402, + "xWidthAvg": 953, + "subsets": { + "latin": { + "xWidthAvg": 953 + }, + "thai": { + "xWidthAvg": 748 + } + } + } + } + }, + "sankofaDisplay": { + "familyName": "Sankofa Display", + "fullName": "Sankofa Display Regular", + "postscriptName": "SankofaDisplay-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 395, + "subsets": { + "latin": { + "xWidthAvg": 395 + }, + "thai": { + "xWidthAvg": 419 + } + }, + "variants": { + "regular": { + "familyName": "Sankofa Display", + "fullName": "Sankofa Display Regular", + "postscriptName": "SankofaDisplay-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 395, + "subsets": { + "latin": { + "xWidthAvg": 395 + }, + "thai": { + "xWidthAvg": 419 + } + } + } + } + }, + "sansita": { + "familyName": "Sansita", + "fullName": "Sansita Regular", + "postscriptName": "Sansita-Regular", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1020, + "descent": -180, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 514 + } + }, + "variants": { + "700": { + "familyName": "Sansita", + "fullName": "Sansita Bold", + "postscriptName": "Sansita-Bold", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1020, + "descent": -180, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "800": { + "familyName": "Sansita", + "fullName": "Sansita ExtraBold", + "postscriptName": "Sansita-ExtraBold", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1020, + "descent": -180, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "900": { + "familyName": "Sansita", + "fullName": "Sansita Black", + "postscriptName": "Sansita-Black", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1020, + "descent": -180, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "regular": { + "familyName": "Sansita", + "fullName": "Sansita Regular", + "postscriptName": "Sansita-Regular", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1020, + "descent": -180, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "italic": { + "familyName": "Sansita", + "fullName": "Sansita Italic", + "postscriptName": "Sansita-Italic", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1020, + "descent": -180, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 403, + "subsets": { + "latin": { + "xWidthAvg": 403 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "900italic": { + "familyName": "Sansita", + "fullName": "Sansita Black Italic", + "postscriptName": "Sansita-BlackItalic", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1020, + "descent": -180, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "800italic": { + "familyName": "Sansita", + "fullName": "Sansita ExtraBold Italic", + "postscriptName": "Sansita-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1020, + "descent": -180, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "700italic": { + "familyName": "Sansita", + "fullName": "Sansita Bold Italic", + "postscriptName": "Sansita-BoldItalic", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1020, + "descent": -180, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 514 + } + } + } + } + }, + "sansitaSwashed": { + "familyName": "Sansita Swashed", + "fullName": "Sansita Swashed Regular", + "postscriptName": "SansitaSwashed-Regular", + "category": "display", + "capHeight": 660, + "ascent": 1020, + "descent": -180, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 415, + "subsets": { + "latin": { + "xWidthAvg": 415 + }, + "thai": { + "xWidthAvg": 514 + } + }, + "variants": { + "300": { + "familyName": "Sansita Swashed", + "fullName": "Sansita Swashed Light", + "postscriptName": "SansitaSwashed-Light", + "category": "display", + "capHeight": 660, + "ascent": 1020, + "descent": -180, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 403, + "subsets": { + "latin": { + "xWidthAvg": 403 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "500": { + "familyName": "Sansita Swashed", + "fullName": "Sansita Swashed Medium", + "postscriptName": "SansitaSwashed-Medium", + "category": "display", + "capHeight": 660, + "ascent": 1020, + "descent": -180, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "600": { + "familyName": "Sansita Swashed", + "fullName": "Sansita Swashed SemiBold", + "postscriptName": "SansitaSwashed-SemiBold", + "category": "display", + "capHeight": 660, + "ascent": 1020, + "descent": -180, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "700": { + "familyName": "Sansita Swashed", + "fullName": "Sansita Swashed Bold", + "postscriptName": "SansitaSwashed-Bold", + "category": "display", + "capHeight": 660, + "ascent": 1020, + "descent": -180, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "800": { + "familyName": "Sansita Swashed", + "fullName": "Sansita Swashed ExtraBold", + "postscriptName": "SansitaSwashed-ExtraBold", + "category": "display", + "capHeight": 660, + "ascent": 1020, + "descent": -180, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "900": { + "familyName": "Sansita Swashed", + "fullName": "Sansita Swashed Black", + "postscriptName": "SansitaSwashed-Black", + "category": "display", + "capHeight": 660, + "ascent": 1020, + "descent": -180, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 514 + } + } + }, + "regular": { + "familyName": "Sansita Swashed", + "fullName": "Sansita Swashed Regular", + "postscriptName": "SansitaSwashed-Regular", + "category": "display", + "capHeight": 660, + "ascent": 1020, + "descent": -180, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 415, + "subsets": { + "latin": { + "xWidthAvg": 415 + }, + "thai": { + "xWidthAvg": 514 + } + } + } + } + }, + "sarabun": { + "familyName": "Sarabun", + "fullName": "Sarabun Regular", + "postscriptName": "Sarabun-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1068, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 555 + } + }, + "variants": { + "100": { + "familyName": "Sarabun", + "fullName": "Sarabun Thin", + "postscriptName": "Sarabun-Thin", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1068, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 417, + "subsets": { + "latin": { + "xWidthAvg": 417 + }, + "thai": { + "xWidthAvg": 534 + } + } + }, + "200": { + "familyName": "Sarabun", + "fullName": "Sarabun ExtraLight", + "postscriptName": "Sarabun-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1068, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 423, + "subsets": { + "latin": { + "xWidthAvg": 423 + }, + "thai": { + "xWidthAvg": 541 + } + } + }, + "300": { + "familyName": "Sarabun", + "fullName": "Sarabun Light", + "postscriptName": "Sarabun-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1068, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 548 + } + } + }, + "500": { + "familyName": "Sarabun", + "fullName": "Sarabun Medium", + "postscriptName": "Sarabun-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1068, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 562 + } + } + }, + "600": { + "familyName": "Sarabun", + "fullName": "Sarabun SemiBold", + "postscriptName": "Sarabun-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1068, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 569 + } + } + }, + "700": { + "familyName": "Sarabun", + "fullName": "Sarabun Bold", + "postscriptName": "Sarabun-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1068, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 576 + } + } + }, + "800": { + "familyName": "Sarabun", + "fullName": "Sarabun ExtraBold", + "postscriptName": "Sarabun-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1068, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 583 + } + } + }, + "regular": { + "familyName": "Sarabun", + "fullName": "Sarabun Regular", + "postscriptName": "Sarabun-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1068, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 555 + } + } + }, + "italic": { + "familyName": "Sarabun", + "fullName": "Sarabun Italic", + "postscriptName": "Sarabun-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1068, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 437, + "subsets": { + "latin": { + "xWidthAvg": 437 + }, + "thai": { + "xWidthAvg": 555 + } + } + }, + "800italic": { + "familyName": "Sarabun", + "fullName": "Sarabun ExtraBold Italic", + "postscriptName": "Sarabun-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1068, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 583 + } + } + }, + "700italic": { + "familyName": "Sarabun", + "fullName": "Sarabun Bold Italic", + "postscriptName": "Sarabun-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1068, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 576 + } + } + }, + "600italic": { + "familyName": "Sarabun", + "fullName": "Sarabun SemiBold Italic", + "postscriptName": "Sarabun-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1068, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 570 + } + } + }, + "500italic": { + "familyName": "Sarabun", + "fullName": "Sarabun Medium Italic", + "postscriptName": "Sarabun-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1068, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 562 + } + } + }, + "300italic": { + "familyName": "Sarabun", + "fullName": "Sarabun Light Italic", + "postscriptName": "Sarabun-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1068, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 548 + } + } + }, + "200italic": { + "familyName": "Sarabun", + "fullName": "Sarabun ExtraLight Italic", + "postscriptName": "Sarabun-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1068, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 541 + } + } + }, + "100italic": { + "familyName": "Sarabun", + "fullName": "Sarabun Thin Italic", + "postscriptName": "Sarabun-ThinItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1068, + "descent": -232, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 534 + } + } + } + } + }, + "sarala": { + "familyName": "Sarala", + "fullName": "Sarala", + "postscriptName": "Sarala-Regular", + "category": "sans-serif", + "capHeight": 1450, + "ascent": 2398, + "descent": -941, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1053, + "xWidthAvg": 932, + "subsets": { + "latin": { + "xWidthAvg": 932 + }, + "thai": { + "xWidthAvg": 1220 + } + }, + "variants": { + "700": { + "familyName": "Sarala", + "fullName": "Sarala Bold", + "postscriptName": "Sarala-Bold", + "category": "sans-serif", + "capHeight": 1452, + "ascent": 2398, + "descent": -941, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1073, + "xWidthAvg": 978, + "subsets": { + "latin": { + "xWidthAvg": 978 + }, + "thai": { + "xWidthAvg": 1220 + } + } + }, + "regular": { + "familyName": "Sarala", + "fullName": "Sarala", + "postscriptName": "Sarala-Regular", + "category": "sans-serif", + "capHeight": 1450, + "ascent": 2398, + "descent": -941, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1053, + "xWidthAvg": 932, + "subsets": { + "latin": { + "xWidthAvg": 932 + }, + "thai": { + "xWidthAvg": 1220 + } + } + } + } + }, + "sarina": { + "familyName": "Sarina", + "fullName": "Sarina", + "postscriptName": "Sarina-Regular", + "category": "display", + "capHeight": 1530, + "ascent": 1916, + "descent": -644, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1022, + "xWidthAvg": 1284, + "subsets": { + "latin": { + "xWidthAvg": 1284 + }, + "thai": { + "xWidthAvg": 2896 + } + }, + "variants": { + "regular": { + "familyName": "Sarina", + "fullName": "Sarina", + "postscriptName": "Sarina-Regular", + "category": "display", + "capHeight": 1530, + "ascent": 1916, + "descent": -644, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1022, + "xWidthAvg": 1284, + "subsets": { + "latin": { + "xWidthAvg": 1284 + }, + "thai": { + "xWidthAvg": 2896 + } + } + } + } + }, + "sarpanch": { + "familyName": "Sarpanch", + "fullName": "Sarpanch Regular", + "postscriptName": "Sarpanch-Regular", + "category": "sans-serif", + "capHeight": 622, + "ascent": 1050, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 499, + "subsets": { + "latin": { + "xWidthAvg": 499 + }, + "thai": { + "xWidthAvg": 488 + } + }, + "variants": { + "500": { + "familyName": "Sarpanch", + "fullName": "Sarpanch Medium", + "postscriptName": "Sarpanch-Medium", + "category": "sans-serif", + "capHeight": 622, + "ascent": 1050, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 507, + "subsets": { + "latin": { + "xWidthAvg": 507 + }, + "thai": { + "xWidthAvg": 488 + } + } + }, + "600": { + "familyName": "Sarpanch", + "fullName": "Sarpanch SemiBold", + "postscriptName": "Sarpanch-SemiBold", + "category": "sans-serif", + "capHeight": 622, + "ascent": 1050, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 515, + "subsets": { + "latin": { + "xWidthAvg": 515 + }, + "thai": { + "xWidthAvg": 488 + } + } + }, + "700": { + "familyName": "Sarpanch", + "fullName": "Sarpanch Bold", + "postscriptName": "Sarpanch-Bold", + "category": "sans-serif", + "capHeight": 622, + "ascent": 1050, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 524, + "subsets": { + "latin": { + "xWidthAvg": 524 + }, + "thai": { + "xWidthAvg": 488 + } + } + }, + "800": { + "familyName": "Sarpanch", + "fullName": "Sarpanch ExtraBold", + "postscriptName": "Sarpanch-ExtraBold", + "category": "sans-serif", + "capHeight": 622, + "ascent": 1050, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 535, + "subsets": { + "latin": { + "xWidthAvg": 535 + }, + "thai": { + "xWidthAvg": 488 + } + } + }, + "900": { + "familyName": "Sarpanch", + "fullName": "Sarpanch Black", + "postscriptName": "Sarpanch-Black", + "category": "sans-serif", + "capHeight": 622, + "ascent": 1050, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 555, + "subsets": { + "latin": { + "xWidthAvg": 555 + }, + "thai": { + "xWidthAvg": 488 + } + } + }, + "regular": { + "familyName": "Sarpanch", + "fullName": "Sarpanch Regular", + "postscriptName": "Sarpanch-Regular", + "category": "sans-serif", + "capHeight": 622, + "ascent": 1050, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 499, + "subsets": { + "latin": { + "xWidthAvg": 499 + }, + "thai": { + "xWidthAvg": 488 + } + } + } + } + }, + "sassyFrass": { + "familyName": "Sassy Frass", + "fullName": "Sassy Frass Regular", + "postscriptName": "SassyFrass-Regular", + "category": "handwriting", + "capHeight": 550, + "ascent": 800, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 220, + "xWidthAvg": 224, + "subsets": { + "latin": { + "xWidthAvg": 224 + }, + "thai": { + "xWidthAvg": 313 + } + }, + "variants": { + "regular": { + "familyName": "Sassy Frass", + "fullName": "Sassy Frass Regular", + "postscriptName": "SassyFrass-Regular", + "category": "handwriting", + "capHeight": 550, + "ascent": 800, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 220, + "xWidthAvg": 224, + "subsets": { + "latin": { + "xWidthAvg": 224 + }, + "thai": { + "xWidthAvg": 313 + } + } + } + } + }, + "satisfy": { + "familyName": "Satisfy", + "fullName": "Satisfy Regular", + "postscriptName": "Satisfy-Regular", + "category": "handwriting", + "capHeight": 767, + "ascent": 957, + "descent": -501, + "lineGap": 17, + "unitsPerEm": 1024, + "xHeight": 417, + "xWidthAvg": 389, + "subsets": { + "latin": { + "xWidthAvg": 389 + }, + "thai": { + "xWidthAvg": 287 + } + }, + "variants": { + "regular": { + "familyName": "Satisfy", + "fullName": "Satisfy Regular", + "postscriptName": "Satisfy-Regular", + "category": "handwriting", + "capHeight": 767, + "ascent": 957, + "descent": -501, + "lineGap": 17, + "unitsPerEm": 1024, + "xHeight": 417, + "xWidthAvg": 389, + "subsets": { + "latin": { + "xWidthAvg": 389 + }, + "thai": { + "xWidthAvg": 287 + } + } + } + } + }, + "sawarabiGothic": { + "familyName": "Sawarabi Gothic", + "fullName": "Sawarabi Gothic", + "postscriptName": "SawarabiGothic-Regular", + "category": "sans-serif", + "capHeight": 725, + "ascent": 1110, + "descent": -272, + "lineGap": 90, + "unitsPerEm": 1000, + "xHeight": 524, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 364 + } + }, + "variants": { + "regular": { + "familyName": "Sawarabi Gothic", + "fullName": "Sawarabi Gothic", + "postscriptName": "SawarabiGothic-Regular", + "category": "sans-serif", + "capHeight": 725, + "ascent": 1110, + "descent": -272, + "lineGap": 90, + "unitsPerEm": 1000, + "xHeight": 524, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 364 + } + } + } + } + }, + "sawarabiMincho": { + "familyName": "Sawarabi Mincho", + "fullName": "Sawarabi Mincho", + "postscriptName": "SawarabiMincho-Regular", + "category": "serif", + "capHeight": 727, + "ascent": 1070, + "descent": -319, + "lineGap": 90, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 364 + } + }, + "variants": { + "regular": { + "familyName": "Sawarabi Mincho", + "fullName": "Sawarabi Mincho", + "postscriptName": "SawarabiMincho-Regular", + "category": "serif", + "capHeight": 727, + "ascent": 1070, + "descent": -319, + "lineGap": 90, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 364 + } + } + } + } + }, + "scada": { + "familyName": "Scada", + "fullName": "Scada Regular", + "postscriptName": "Scada-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 955, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 270 + } + }, + "variants": { + "700": { + "familyName": "Scada", + "fullName": "Scada Bold", + "postscriptName": "Scada-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 955, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 270 + } + } + }, + "regular": { + "familyName": "Scada", + "fullName": "Scada Regular", + "postscriptName": "Scada-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 955, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 270 + } + } + }, + "italic": { + "familyName": "Scada", + "fullName": "Scada Italic", + "postscriptName": "Scada-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 955, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 270 + } + } + }, + "700italic": { + "familyName": "Scada", + "fullName": "Scada Bold Italic", + "postscriptName": "Scada-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 955, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 270 + } + } + } + } + }, + "scheherazadeNew": { + "familyName": "Scheherazade New", + "fullName": "Scheherazade New", + "postscriptName": "ScheherazadeNew-Regular", + "category": "serif", + "capHeight": 1034, + "ascent": 2750, + "descent": -1427, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 684, + "xWidthAvg": 770, + "subsets": { + "latin": { + "xWidthAvg": 770 + }, + "thai": { + "xWidthAvg": 1646 + } + }, + "variants": { + "500": { + "familyName": "Scheherazade New", + "fullName": "Scheherazade New Medium", + "postscriptName": "ScheherazadeNew-Medium", + "category": "serif", + "capHeight": 1034, + "ascent": 2750, + "descent": -1427, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 684, + "xWidthAvg": 791, + "subsets": { + "latin": { + "xWidthAvg": 791 + }, + "thai": { + "xWidthAvg": 1646 + } + } + }, + "600": { + "familyName": "Scheherazade New", + "fullName": "Scheherazade New SemiBold", + "postscriptName": "ScheherazadeNew-SemiBold", + "category": "serif", + "capHeight": 1034, + "ascent": 2750, + "descent": -1427, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 684, + "xWidthAvg": 812, + "subsets": { + "latin": { + "xWidthAvg": 812 + }, + "thai": { + "xWidthAvg": 1646 + } + } + }, + "700": { + "familyName": "Scheherazade New", + "fullName": "Scheherazade New Bold", + "postscriptName": "ScheherazadeNew-Bold", + "category": "serif", + "capHeight": 1034, + "ascent": 2750, + "descent": -1427, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 684, + "xWidthAvg": 833, + "subsets": { + "latin": { + "xWidthAvg": 833 + }, + "thai": { + "xWidthAvg": 1646 + } + } + }, + "regular": { + "familyName": "Scheherazade New", + "fullName": "Scheherazade New", + "postscriptName": "ScheherazadeNew-Regular", + "category": "serif", + "capHeight": 1034, + "ascent": 2750, + "descent": -1427, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 684, + "xWidthAvg": 770, + "subsets": { + "latin": { + "xWidthAvg": 770 + }, + "thai": { + "xWidthAvg": 1646 + } + } + } + } + }, + "schibstedGrotesk": { + "familyName": "Schibsted Grotesk", + "fullName": "Schibsted Grotesk Regular", + "postscriptName": "SchibstedGrotesk-Regular", + "category": "sans-serif", + "capHeight": 1440, + "ascent": 2000, + "descent": -528, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1080, + "xWidthAvg": 954, + "subsets": { + "latin": { + "xWidthAvg": 954 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "500": { + "familyName": "Schibsted Grotesk", + "fullName": "Schibsted Grotesk Medium", + "postscriptName": "SchibstedGrotesk-Medium", + "category": "sans-serif", + "capHeight": 1440, + "ascent": 2000, + "descent": -528, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1080, + "xWidthAvg": 968, + "subsets": { + "latin": { + "xWidthAvg": 968 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "600": { + "familyName": "Schibsted Grotesk", + "fullName": "Schibsted Grotesk SemiBold", + "postscriptName": "SchibstedGrotesk-SemiBold", + "category": "sans-serif", + "capHeight": 1440, + "ascent": 2000, + "descent": -528, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1080, + "xWidthAvg": 984, + "subsets": { + "latin": { + "xWidthAvg": 984 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "700": { + "familyName": "Schibsted Grotesk", + "fullName": "Schibsted Grotesk Bold", + "postscriptName": "SchibstedGrotesk-Bold", + "category": "sans-serif", + "capHeight": 1440, + "ascent": 2000, + "descent": -528, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1080, + "xWidthAvg": 1003, + "subsets": { + "latin": { + "xWidthAvg": 1003 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "800": { + "familyName": "Schibsted Grotesk", + "fullName": "Schibsted Grotesk ExtraBold", + "postscriptName": "SchibstedGrotesk-ExtraBold", + "category": "sans-serif", + "capHeight": 1440, + "ascent": 2000, + "descent": -528, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1080, + "xWidthAvg": 1023, + "subsets": { + "latin": { + "xWidthAvg": 1023 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "900": { + "familyName": "Schibsted Grotesk", + "fullName": "Schibsted Grotesk Black", + "postscriptName": "SchibstedGrotesk-Black", + "category": "sans-serif", + "capHeight": 1440, + "ascent": 2000, + "descent": -528, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1080, + "xWidthAvg": 1042, + "subsets": { + "latin": { + "xWidthAvg": 1042 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "regular": { + "familyName": "Schibsted Grotesk", + "fullName": "Schibsted Grotesk Regular", + "postscriptName": "SchibstedGrotesk-Regular", + "category": "sans-serif", + "capHeight": 1440, + "ascent": 2000, + "descent": -528, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1080, + "xWidthAvg": 954, + "subsets": { + "latin": { + "xWidthAvg": 954 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "italic": { + "familyName": "Schibsted Grotesk", + "fullName": "Schibsted Grotesk Italic", + "postscriptName": "SchibstedGrotesk-Italic", + "category": "sans-serif", + "capHeight": 1440, + "ascent": 2000, + "descent": -528, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1080, + "xWidthAvg": 932, + "subsets": { + "latin": { + "xWidthAvg": 932 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "900italic": { + "familyName": "Schibsted Grotesk", + "fullName": "Schibsted Grotesk Black Italic", + "postscriptName": "SchibstedGrotesk-BlackItalic", + "category": "sans-serif", + "capHeight": 1440, + "ascent": 2000, + "descent": -528, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1080, + "xWidthAvg": 1005, + "subsets": { + "latin": { + "xWidthAvg": 1005 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "800italic": { + "familyName": "Schibsted Grotesk", + "fullName": "Schibsted Grotesk ExtraBold Italic", + "postscriptName": "SchibstedGrotesk-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 1440, + "ascent": 2000, + "descent": -528, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1080, + "xWidthAvg": 989, + "subsets": { + "latin": { + "xWidthAvg": 989 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "700italic": { + "familyName": "Schibsted Grotesk", + "fullName": "Schibsted Grotesk Bold Italic", + "postscriptName": "SchibstedGrotesk-BoldItalic", + "category": "sans-serif", + "capHeight": 1440, + "ascent": 2000, + "descent": -528, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1080, + "xWidthAvg": 973, + "subsets": { + "latin": { + "xWidthAvg": 973 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "600italic": { + "familyName": "Schibsted Grotesk", + "fullName": "Schibsted Grotesk SemiBold Italic", + "postscriptName": "SchibstedGrotesk-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 1440, + "ascent": 2000, + "descent": -528, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1080, + "xWidthAvg": 957, + "subsets": { + "latin": { + "xWidthAvg": 957 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "500italic": { + "familyName": "Schibsted Grotesk", + "fullName": "Schibsted Grotesk Medium Italic", + "postscriptName": "SchibstedGrotesk-MediumItalic", + "category": "sans-serif", + "capHeight": 1440, + "ascent": 2000, + "descent": -528, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1080, + "xWidthAvg": 943, + "subsets": { + "latin": { + "xWidthAvg": 943 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "schoolbell": { + "familyName": "Schoolbell", + "fullName": "Schoolbell Regular", + "postscriptName": "Schoolbell-Regular", + "category": "handwriting", + "capHeight": 770, + "ascent": 1019, + "descent": -383, + "lineGap": 24, + "unitsPerEm": 1024, + "xHeight": 485, + "xWidthAvg": 416, + "subsets": { + "latin": { + "xWidthAvg": 416 + }, + "thai": { + "xWidthAvg": 317 + } + }, + "variants": { + "regular": { + "familyName": "Schoolbell", + "fullName": "Schoolbell Regular", + "postscriptName": "Schoolbell-Regular", + "category": "handwriting", + "capHeight": 770, + "ascent": 1019, + "descent": -383, + "lineGap": 24, + "unitsPerEm": 1024, + "xHeight": 485, + "xWidthAvg": 416, + "subsets": { + "latin": { + "xWidthAvg": 416 + }, + "thai": { + "xWidthAvg": 317 + } + } + } + } + }, + "scopeOne": { + "familyName": "Scope One", + "fullName": "Scope One", + "postscriptName": "ScopeOne-Regular", + "category": "serif", + "capHeight": 645, + "ascent": 928, + "descent": -455, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Scope One", + "fullName": "Scope One", + "postscriptName": "ScopeOne-Regular", + "category": "serif", + "capHeight": 645, + "ascent": 928, + "descent": -455, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "seaweedScript": { + "familyName": "Seaweed Script", + "fullName": "Seaweed Script", + "postscriptName": "SeaweedScript-Regular", + "category": "display", + "capHeight": 765, + "ascent": 969, + "descent": -421, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 380, + "xWidthAvg": 372, + "subsets": { + "latin": { + "xWidthAvg": 372 + }, + "thai": { + "xWidthAvg": 317 + } + }, + "variants": { + "regular": { + "familyName": "Seaweed Script", + "fullName": "Seaweed Script", + "postscriptName": "SeaweedScript-Regular", + "category": "display", + "capHeight": 765, + "ascent": 969, + "descent": -421, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 380, + "xWidthAvg": 372, + "subsets": { + "latin": { + "xWidthAvg": 372 + }, + "thai": { + "xWidthAvg": 317 + } + } + } + } + }, + "secularOne": { + "familyName": "Secular One", + "fullName": "Secular One Regular", + "postscriptName": "SecularOne-Regular", + "category": "sans-serif", + "capHeight": 666, + "ascent": 1022, + "descent": -433, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 662 + } + }, + "variants": { + "regular": { + "familyName": "Secular One", + "fullName": "Secular One Regular", + "postscriptName": "SecularOne-Regular", + "category": "sans-serif", + "capHeight": 666, + "ascent": 1022, + "descent": -433, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 662 + } + } + } + } + }, + "sedan": { + "familyName": "Sedan", + "fullName": "Sedan Regular", + "postscriptName": "Sedan-Regular", + "category": "serif", + "capHeight": 675, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 438, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Sedan", + "fullName": "Sedan Regular", + "postscriptName": "Sedan-Regular", + "category": "serif", + "capHeight": 675, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 438, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Sedan", + "fullName": "Sedan Italic", + "postscriptName": "Sedan-Italic", + "category": "serif", + "capHeight": 675, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 438, + "xWidthAvg": 376, + "subsets": { + "latin": { + "xWidthAvg": 376 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "sedanSC": { + "familyName": "Sedan SC", + "fullName": "Sedan SC Regular", + "postscriptName": "SedanSC-Regular", + "category": "serif", + "capHeight": 675, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 438, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Sedan SC", + "fullName": "Sedan SC Regular", + "postscriptName": "SedanSC-Regular", + "category": "serif", + "capHeight": 675, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 438, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "sedgwickAve": { + "familyName": "Sedgwick Ave", + "fullName": "Sedgwick Ave Regular", + "postscriptName": "SedgwickAve-Regular", + "category": "handwriting", + "capHeight": 950, + "ascent": 937, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 660, + "xWidthAvg": 423, + "subsets": { + "latin": { + "xWidthAvg": 423 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Sedgwick Ave", + "fullName": "Sedgwick Ave Regular", + "postscriptName": "SedgwickAve-Regular", + "category": "handwriting", + "capHeight": 950, + "ascent": 937, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 660, + "xWidthAvg": 423, + "subsets": { + "latin": { + "xWidthAvg": 423 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "sedgwickAveDisplay": { + "familyName": "Sedgwick Ave Display", + "fullName": "Sedgwick Ave Display Regular", + "postscriptName": "SedgwickAveDisplay-Regular", + "category": "handwriting", + "capHeight": 950, + "ascent": 937, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 650, + "xWidthAvg": 417, + "subsets": { + "latin": { + "xWidthAvg": 417 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Sedgwick Ave Display", + "fullName": "Sedgwick Ave Display Regular", + "postscriptName": "SedgwickAveDisplay-Regular", + "category": "handwriting", + "capHeight": 950, + "ascent": 937, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 650, + "xWidthAvg": 417, + "subsets": { + "latin": { + "xWidthAvg": 417 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "segoeUI": { + "familyName": "Segoe UI", + "fullName": "Segoe UI", + "postscriptName": "SegoeUI", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 2210, + "descent": -514, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 908, + "subsets": { + "latin": { + "xWidthAvg": 908 + }, + "thai": { + "xWidthAvg": 1322 + } + }, + "variants": { + "300": { + "familyName": "Segoe UI", + "fullName": "Segoe UI Light", + "postscriptName": "SegoeUI-Light", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 2210, + "descent": -514, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 860, + "subsets": { + "latin": { + "xWidthAvg": 860 + }, + "thai": { + "xWidthAvg": 1322 + } + } + }, + "350": { + "familyName": "Segoe UI", + "fullName": "Segoe UI Semilight", + "postscriptName": "SegoeUI-Semilight", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 2210, + "descent": -514, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 883, + "subsets": { + "latin": { + "xWidthAvg": 883 + }, + "thai": { + "xWidthAvg": 1322 + } + } + }, + "600": { + "familyName": "Segoe UI", + "fullName": "Segoe UI Semibold", + "postscriptName": "SegoeUI-Semibold", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 2210, + "descent": -514, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 937, + "subsets": { + "latin": { + "xWidthAvg": 937 + }, + "thai": { + "xWidthAvg": 1322 + } + } + }, + "700": { + "familyName": "Segoe UI", + "fullName": "Segoe UI Bold", + "postscriptName": "SegoeUI-Bold", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 2210, + "descent": -514, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 973, + "subsets": { + "latin": { + "xWidthAvg": 973 + }, + "thai": { + "xWidthAvg": 1322 + } + } + }, + "900": { + "familyName": "Segoe UI", + "fullName": "Segoe UI Black", + "postscriptName": "SegoeUIBlack", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 2188, + "descent": -578, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 1021, + "subsets": { + "latin": { + "xWidthAvg": 1021 + }, + "thai": { + "xWidthAvg": 1322 + } + } + }, + "regular": { + "familyName": "Segoe UI", + "fullName": "Segoe UI", + "postscriptName": "SegoeUI", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 2210, + "descent": -514, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 908, + "subsets": { + "latin": { + "xWidthAvg": 908 + }, + "thai": { + "xWidthAvg": 1322 + } + } + }, + "italic": { + "familyName": "Segoe UI", + "fullName": "Segoe UI Italic", + "postscriptName": "SegoeUI-Italic", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 2210, + "descent": -514, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 888, + "subsets": { + "latin": { + "xWidthAvg": 888 + }, + "thai": { + "xWidthAvg": 1322 + } + } + }, + "900italic": { + "familyName": "Segoe UI", + "fullName": "Segoe UI Black Italic", + "postscriptName": "SegoeUIBlack-Italic", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 2210, + "descent": -514, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 1018, + "subsets": { + "latin": { + "xWidthAvg": 1018 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "700italic": { + "familyName": "Segoe UI", + "fullName": "Segoe UI Bold Italic", + "postscriptName": "SegoeUI-BoldItalic", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 2210, + "descent": -514, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 969, + "subsets": { + "latin": { + "xWidthAvg": 969 + }, + "thai": { + "xWidthAvg": 1322 + } + } + }, + "600italic": { + "familyName": "Segoe UI", + "fullName": "Segoe UI Semibold Italic", + "postscriptName": "SegoeUI-SemiboldItalic", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 2210, + "descent": -514, + "lineGap": 9, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 927, + "subsets": { + "latin": { + "xWidthAvg": 927 + }, + "thai": { + "xWidthAvg": 1322 + } + } + }, + "350italic": { + "familyName": "Segoe UI", + "fullName": "Segoe UI Semilight Italic", + "postscriptName": "SegoeUI-SemilightItalic", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 2210, + "descent": -514, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 864, + "subsets": { + "latin": { + "xWidthAvg": 864 + }, + "thai": { + "xWidthAvg": 1322 + } + } + }, + "300italic": { + "familyName": "Segoe UI", + "fullName": "Segoe UI Light Italic", + "postscriptName": "SegoeUI-LightItalic", + "category": "sans-serif", + "capHeight": 1434, + "ascent": 2210, + "descent": -514, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 845, + "subsets": { + "latin": { + "xWidthAvg": 845 + }, + "thai": { + "xWidthAvg": 1322 + } + } + } + } + }, + "sen": { + "familyName": "Sen", + "fullName": "Sen Regular", + "postscriptName": "Sen-Regular", + "category": "sans-serif", + "capHeight": 670, + "ascent": 962, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 500, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 679 + } + }, + "variants": { + "500": { + "familyName": "Sen", + "fullName": "Sen Medium", + "postscriptName": "Sen-Medium", + "category": "sans-serif", + "capHeight": 670, + "ascent": 962, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 502, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 685 + } + } + }, + "600": { + "familyName": "Sen", + "fullName": "Sen SemiBold", + "postscriptName": "Sen-SemiBold", + "category": "sans-serif", + "capHeight": 670, + "ascent": 962, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 504, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 691 + } + } + }, + "700": { + "familyName": "Sen", + "fullName": "Sen Bold", + "postscriptName": "Sen-Bold", + "category": "sans-serif", + "capHeight": 670, + "ascent": 962, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 505, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 694 + } + } + }, + "800": { + "familyName": "Sen", + "fullName": "Sen ExtraBold", + "postscriptName": "Sen-ExtraBold", + "category": "sans-serif", + "capHeight": 670, + "ascent": 962, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 510, + "xWidthAvg": 515, + "subsets": { + "latin": { + "xWidthAvg": 515 + }, + "thai": { + "xWidthAvg": 708 + } + } + }, + "regular": { + "familyName": "Sen", + "fullName": "Sen Regular", + "postscriptName": "Sen-Regular", + "category": "sans-serif", + "capHeight": 670, + "ascent": 962, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 500, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 679 + } + } + } + } + }, + "sendFlowers": { + "familyName": "Send Flowers", + "fullName": "Send Flowers Regular", + "postscriptName": "SendFlowers-Regular", + "category": "handwriting", + "capHeight": 710, + "ascent": 975, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 395, + "xWidthAvg": 365, + "subsets": { + "latin": { + "xWidthAvg": 365 + }, + "thai": { + "xWidthAvg": 499 + } + }, + "variants": { + "regular": { + "familyName": "Send Flowers", + "fullName": "Send Flowers Regular", + "postscriptName": "SendFlowers-Regular", + "category": "handwriting", + "capHeight": 710, + "ascent": 975, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 395, + "xWidthAvg": 365, + "subsets": { + "latin": { + "xWidthAvg": 365 + }, + "thai": { + "xWidthAvg": 499 + } + } + } + } + }, + "sevillana": { + "familyName": "Sevillana", + "fullName": "Sevillana", + "postscriptName": "Sevillana-Regular", + "category": "display", + "capHeight": 1679, + "ascent": 2062, + "descent": -717, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 860, + "xWidthAvg": 769, + "subsets": { + "latin": { + "xWidthAvg": 769 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Sevillana", + "fullName": "Sevillana", + "postscriptName": "Sevillana-Regular", + "category": "display", + "capHeight": 1679, + "ascent": 2062, + "descent": -717, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 860, + "xWidthAvg": 769, + "subsets": { + "latin": { + "xWidthAvg": 769 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "seymourOne": { + "familyName": "Seymour One", + "fullName": "Seymour One Regular", + "postscriptName": "SeymourOne", + "category": "sans-serif", + "capHeight": 1465, + "ascent": 2015, + "descent": -559, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1026, + "xWidthAvg": 1468, + "subsets": { + "latin": { + "xWidthAvg": 1468 + }, + "thai": { + "xWidthAvg": 1920 + } + }, + "variants": { + "regular": { + "familyName": "Seymour One", + "fullName": "Seymour One Regular", + "postscriptName": "SeymourOne", + "category": "sans-serif", + "capHeight": 1465, + "ascent": 2015, + "descent": -559, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1026, + "xWidthAvg": 1468, + "subsets": { + "latin": { + "xWidthAvg": 1468 + }, + "thai": { + "xWidthAvg": 1920 + } + } + } + } + }, + "shadowsIntoLight": { + "familyName": "Shadows Into Light", + "fullName": "Shadows Into Light", + "postscriptName": "ShadowsIntoLight", + "category": "handwriting", + "capHeight": 648, + "ascent": 1203, + "descent": -442, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 616, + "xWidthAvg": 386, + "subsets": { + "latin": { + "xWidthAvg": 386 + }, + "thai": { + "xWidthAvg": 461 + } + }, + "variants": { + "regular": { + "familyName": "Shadows Into Light", + "fullName": "Shadows Into Light", + "postscriptName": "ShadowsIntoLight", + "category": "handwriting", + "capHeight": 648, + "ascent": 1203, + "descent": -442, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 616, + "xWidthAvg": 386, + "subsets": { + "latin": { + "xWidthAvg": 386 + }, + "thai": { + "xWidthAvg": 461 + } + } + } + } + }, + "shadowsIntoLightTwo": { + "familyName": "Shadows Into Light Two", + "fullName": "Shadows Into Light Two", + "postscriptName": "ShadowsIntoLightTwo-Regular", + "category": "handwriting", + "capHeight": 848, + "ascent": 1145, + "descent": -341, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 610, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "Shadows Into Light Two", + "fullName": "Shadows Into Light Two", + "postscriptName": "ShadowsIntoLightTwo-Regular", + "category": "handwriting", + "capHeight": 848, + "ascent": 1145, + "descent": -341, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 610, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "shalimar": { + "familyName": "Shalimar", + "fullName": "Shalimar Regular", + "postscriptName": "Shalimar-Regular", + "category": "handwriting", + "capHeight": 560, + "ascent": 800, + "descent": -420, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 315, + "xWidthAvg": 236, + "subsets": { + "latin": { + "xWidthAvg": 236 + }, + "thai": { + "xWidthAvg": 595 + } + }, + "variants": { + "regular": { + "familyName": "Shalimar", + "fullName": "Shalimar Regular", + "postscriptName": "Shalimar-Regular", + "category": "handwriting", + "capHeight": 560, + "ascent": 800, + "descent": -420, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 315, + "xWidthAvg": 236, + "subsets": { + "latin": { + "xWidthAvg": 236 + }, + "thai": { + "xWidthAvg": 595 + } + } + } + } + }, + "shantellSans": { + "familyName": "Shantell Sans", + "fullName": "Shantell Sans Regular", + "postscriptName": "ShantellSans-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1020, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 491, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 700 + } + }, + "variants": { + "300": { + "familyName": "Shantell Sans", + "fullName": "Shantell Sans Light", + "postscriptName": "ShantellSans-Light", + "category": "display", + "capHeight": 700, + "ascent": 1020, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "500": { + "familyName": "Shantell Sans", + "fullName": "Shantell Sans Medium", + "postscriptName": "ShantellSans-Medium", + "category": "display", + "capHeight": 700, + "ascent": 1020, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 497, + "xWidthAvg": 518, + "subsets": { + "latin": { + "xWidthAvg": 518 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "600": { + "familyName": "Shantell Sans", + "fullName": "Shantell Sans SemiBold", + "postscriptName": "ShantellSans-SemiBold", + "category": "display", + "capHeight": 700, + "ascent": 1020, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 503, + "xWidthAvg": 530, + "subsets": { + "latin": { + "xWidthAvg": 530 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "700": { + "familyName": "Shantell Sans", + "fullName": "Shantell Sans Bold", + "postscriptName": "ShantellSans-Bold", + "category": "display", + "capHeight": 700, + "ascent": 1020, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 509, + "xWidthAvg": 542, + "subsets": { + "latin": { + "xWidthAvg": 542 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "800": { + "familyName": "Shantell Sans", + "fullName": "Shantell Sans ExtraBold", + "postscriptName": "ShantellSans-ExtraBold", + "category": "display", + "capHeight": 700, + "ascent": 1020, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 554, + "subsets": { + "latin": { + "xWidthAvg": 554 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "regular": { + "familyName": "Shantell Sans", + "fullName": "Shantell Sans Regular", + "postscriptName": "ShantellSans-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1020, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 491, + "xWidthAvg": 505, + "subsets": { + "latin": { + "xWidthAvg": 505 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "italic": { + "familyName": "Shantell Sans", + "fullName": "Shantell Sans Italic", + "postscriptName": "ShantellSans-Italic", + "category": "display", + "capHeight": 700, + "ascent": 1020, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 491, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "800italic": { + "familyName": "Shantell Sans", + "fullName": "Shantell Sans ExtraBold Italic", + "postscriptName": "ShantellSans-ExtraBoldItalic", + "category": "display", + "capHeight": 700, + "ascent": 1020, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 555, + "subsets": { + "latin": { + "xWidthAvg": 555 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "700italic": { + "familyName": "Shantell Sans", + "fullName": "Shantell Sans Bold Italic", + "postscriptName": "ShantellSans-BoldItalic", + "category": "display", + "capHeight": 700, + "ascent": 1020, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 509, + "xWidthAvg": 543, + "subsets": { + "latin": { + "xWidthAvg": 543 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "600italic": { + "familyName": "Shantell Sans", + "fullName": "Shantell Sans SemiBold Italic", + "postscriptName": "ShantellSans-SemiBoldItalic", + "category": "display", + "capHeight": 700, + "ascent": 1020, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 503, + "xWidthAvg": 531, + "subsets": { + "latin": { + "xWidthAvg": 531 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "500italic": { + "familyName": "Shantell Sans", + "fullName": "Shantell Sans Medium Italic", + "postscriptName": "ShantellSans-MediumItalic", + "category": "display", + "capHeight": 700, + "ascent": 1020, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 497, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "300italic": { + "familyName": "Shantell Sans", + "fullName": "Shantell Sans Light Italic", + "postscriptName": "ShantellSans-LightItalic", + "category": "display", + "capHeight": 700, + "ascent": 1020, + "descent": -320, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 700 + } + } + } + } + }, + "shanti": { + "familyName": "Shanti", + "fullName": "Shanti Regular", + "postscriptName": "Shanti-Regular", + "category": "sans-serif", + "capHeight": 1412, + "ascent": 2012, + "descent": -599, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 984, + "xWidthAvg": 905, + "subsets": { + "latin": { + "xWidthAvg": 905 + }, + "thai": { + "xWidthAvg": 1318 + } + }, + "variants": { + "regular": { + "familyName": "Shanti", + "fullName": "Shanti Regular", + "postscriptName": "Shanti-Regular", + "category": "sans-serif", + "capHeight": 1412, + "ascent": 2012, + "descent": -599, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 984, + "xWidthAvg": 905, + "subsets": { + "latin": { + "xWidthAvg": 905 + }, + "thai": { + "xWidthAvg": 1318 + } + } + } + } + }, + "share": { + "familyName": "Share", + "fullName": "Share Regular", + "postscriptName": "Share-Regular", + "category": "sans-serif", + "capHeight": 707, + "ascent": 885, + "descent": -242, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 404, + "subsets": { + "latin": { + "xWidthAvg": 404 + }, + "thai": { + "xWidthAvg": 502 + } + }, + "variants": { + "700": { + "familyName": "Share", + "fullName": "Share Bold", + "postscriptName": "Share-Bold", + "category": "sans-serif", + "capHeight": 709, + "ascent": 885, + "descent": -242, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 522 + } + } + }, + "regular": { + "familyName": "Share", + "fullName": "Share Regular", + "postscriptName": "Share-Regular", + "category": "sans-serif", + "capHeight": 707, + "ascent": 885, + "descent": -242, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 404, + "subsets": { + "latin": { + "xWidthAvg": 404 + }, + "thai": { + "xWidthAvg": 502 + } + } + }, + "italic": { + "familyName": "Share", + "fullName": "Share Italic", + "postscriptName": "Share-Italic", + "category": "sans-serif", + "capHeight": 707, + "ascent": 885, + "descent": -242, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 404, + "subsets": { + "latin": { + "xWidthAvg": 404 + }, + "thai": { + "xWidthAvg": 502 + } + } + }, + "700italic": { + "familyName": "Share", + "fullName": "Share Bold Italic", + "postscriptName": "Share-BoldItalic", + "category": "sans-serif", + "capHeight": 709, + "ascent": 885, + "descent": -242, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 522 + } + } + } + } + }, + "shareTech": { + "familyName": "Share Tech", + "fullName": "Share Tech Regular", + "postscriptName": "ShareTech-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 885, + "descent": -242, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 399, + "subsets": { + "latin": { + "xWidthAvg": 399 + }, + "thai": { + "xWidthAvg": 502 + } + }, + "variants": { + "regular": { + "familyName": "Share Tech", + "fullName": "Share Tech Regular", + "postscriptName": "ShareTech-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 885, + "descent": -242, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 399, + "subsets": { + "latin": { + "xWidthAvg": 399 + }, + "thai": { + "xWidthAvg": 502 + } + } + } + } + }, + "shareTechMono": { + "familyName": "Share Tech Mono", + "fullName": "Share Tech Mono", + "postscriptName": "ShareTechMono-Regular", + "category": "monospace", + "capHeight": 700, + "ascent": 885, + "descent": -242, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 540, + "subsets": { + "latin": { + "xWidthAvg": 540 + }, + "thai": { + "xWidthAvg": 540 + } + }, + "variants": { + "regular": { + "familyName": "Share Tech Mono", + "fullName": "Share Tech Mono", + "postscriptName": "ShareTechMono-Regular", + "category": "monospace", + "capHeight": 700, + "ascent": 885, + "descent": -242, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 540, + "subsets": { + "latin": { + "xWidthAvg": 540 + }, + "thai": { + "xWidthAvg": 540 + } + } + } + } + }, + "shipporiAntique": { + "familyName": "Shippori Antique", + "fullName": "Shippori Antique Regular", + "postscriptName": "ShipporiAntique-Regular", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 524, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Shippori Antique", + "fullName": "Shippori Antique Regular", + "postscriptName": "ShipporiAntique-Regular", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 524, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "shipporiAntiqueB1": { + "familyName": "Shippori Antique B1", + "fullName": "Shippori Antique B1 Regular", + "postscriptName": "ShipporiAntiqueB1-Regular", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 524, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Shippori Antique B1", + "fullName": "Shippori Antique B1 Regular", + "postscriptName": "ShipporiAntiqueB1-Regular", + "category": "sans-serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 524, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "shipporiMincho": { + "familyName": "Shippori Mincho", + "fullName": "Shippori Mincho Regular", + "postscriptName": "ShipporiMincho-Regular", + "category": "serif", + "capHeight": 726, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "500": { + "familyName": "Shippori Mincho", + "fullName": "Shippori Mincho Medium", + "postscriptName": "ShipporiMincho-Medium", + "category": "serif", + "capHeight": 730, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 482, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "600": { + "familyName": "Shippori Mincho", + "fullName": "Shippori Mincho SemiBold", + "postscriptName": "ShipporiMincho-SemiBold", + "category": "serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 491, + "subsets": { + "latin": { + "xWidthAvg": 491 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "Shippori Mincho", + "fullName": "Shippori Mincho Bold", + "postscriptName": "ShipporiMincho-Bold", + "category": "serif", + "capHeight": 737, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "800": { + "familyName": "Shippori Mincho", + "fullName": "Shippori Mincho ExtraBold", + "postscriptName": "ShipporiMincho-ExtraBold", + "category": "serif", + "capHeight": 740, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Shippori Mincho", + "fullName": "Shippori Mincho Regular", + "postscriptName": "ShipporiMincho-Regular", + "category": "serif", + "capHeight": 726, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "shipporiMinchoB1": { + "familyName": "Shippori Mincho B1", + "fullName": "Shippori Mincho B1 Regular", + "postscriptName": "ShipporiMinchoB1-Regular", + "category": "serif", + "capHeight": 726, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "500": { + "familyName": "Shippori Mincho B1", + "fullName": "Shippori Mincho B1 Medium", + "postscriptName": "ShipporiMinchoB1-Medium", + "category": "serif", + "capHeight": 730, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 482, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "600": { + "familyName": "Shippori Mincho B1", + "fullName": "Shippori Mincho B1 SemiBold", + "postscriptName": "ShipporiMinchoB1-SemiBold", + "category": "serif", + "capHeight": 733, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 484, + "xWidthAvg": 491, + "subsets": { + "latin": { + "xWidthAvg": 491 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "Shippori Mincho B1", + "fullName": "Shippori Mincho B1 Bold", + "postscriptName": "ShipporiMinchoB1-Bold", + "category": "serif", + "capHeight": 737, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "800": { + "familyName": "Shippori Mincho B1", + "fullName": "Shippori Mincho B1 ExtraBold", + "postscriptName": "ShipporiMinchoB1-ExtraBold", + "category": "serif", + "capHeight": 740, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Shippori Mincho B1", + "fullName": "Shippori Mincho B1 Regular", + "postscriptName": "ShipporiMinchoB1-Regular", + "category": "serif", + "capHeight": 726, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "shizuru": { + "familyName": "Shizuru", + "fullName": "Shizuru Regular", + "postscriptName": "Shizuru-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 547, + "subsets": { + "latin": { + "xWidthAvg": 547 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Shizuru", + "fullName": "Shizuru Regular", + "postscriptName": "Shizuru-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 547, + "subsets": { + "latin": { + "xWidthAvg": 547 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "shojumaru": { + "familyName": "Shojumaru", + "fullName": "Shojumaru", + "postscriptName": "Shojumaru-Regular", + "category": "display", + "capHeight": 1534, + "ascent": 2020, + "descent": -692, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1206, + "xWidthAvg": 1393, + "subsets": { + "latin": { + "xWidthAvg": 1393 + }, + "thai": { + "xWidthAvg": 819 + } + }, + "variants": { + "regular": { + "familyName": "Shojumaru", + "fullName": "Shojumaru", + "postscriptName": "Shojumaru-Regular", + "category": "display", + "capHeight": 1534, + "ascent": 2020, + "descent": -692, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1206, + "xWidthAvg": 1393, + "subsets": { + "latin": { + "xWidthAvg": 1393 + }, + "thai": { + "xWidthAvg": 819 + } + } + } + } + }, + "shortStack": { + "familyName": "Short Stack", + "fullName": "Short Stack", + "postscriptName": "ShortStack", + "category": "handwriting", + "capHeight": 1367, + "ascent": 1913, + "descent": -609, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 758, + "xWidthAvg": 1186, + "subsets": { + "latin": { + "xWidthAvg": 1186 + }, + "thai": { + "xWidthAvg": 2099 + } + }, + "variants": { + "regular": { + "familyName": "Short Stack", + "fullName": "Short Stack", + "postscriptName": "ShortStack", + "category": "handwriting", + "capHeight": 1367, + "ascent": 1913, + "descent": -609, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 758, + "xWidthAvg": 1186, + "subsets": { + "latin": { + "xWidthAvg": 1186 + }, + "thai": { + "xWidthAvg": 2099 + } + } + } + } + }, + "shrikhand": { + "familyName": "Shrikhand", + "fullName": "Shrikhand Regular", + "postscriptName": "Shrikhand-Regular", + "category": "display", + "capHeight": 669, + "ascent": 1026, + "descent": -432, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 533, + "subsets": { + "latin": { + "xWidthAvg": 533 + }, + "thai": { + "xWidthAvg": 613 + } + }, + "variants": { + "regular": { + "familyName": "Shrikhand", + "fullName": "Shrikhand Regular", + "postscriptName": "Shrikhand-Regular", + "category": "display", + "capHeight": 669, + "ascent": 1026, + "descent": -432, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 533, + "subsets": { + "latin": { + "xWidthAvg": 533 + }, + "thai": { + "xWidthAvg": 613 + } + } + } + } + }, + "siemreap": { + "familyName": "Siemreap", + "fullName": "Siemreap", + "postscriptName": "Siemreap", + "category": "sans-serif", + "capHeight": 0, + "ascent": 2500, + "descent": -1200, + "lineGap": 67, + "unitsPerEm": 2048, + "xHeight": 0, + "xWidthAvg": 1359, + "subsets": { + "latin": { + "xWidthAvg": 1359 + }, + "thai": { + "xWidthAvg": 1536 + } + }, + "variants": { + "regular": { + "familyName": "Siemreap", + "fullName": "Siemreap", + "postscriptName": "Siemreap", + "category": "sans-serif", + "capHeight": 0, + "ascent": 2500, + "descent": -1200, + "lineGap": 67, + "unitsPerEm": 2048, + "xHeight": 0, + "xWidthAvg": 1359, + "subsets": { + "latin": { + "xWidthAvg": 1359 + }, + "thai": { + "xWidthAvg": 1536 + } + } + } + } + }, + "sigmar": { + "familyName": "Sigmar", + "fullName": "Sigmar Regular", + "postscriptName": "Sigmar-Regular", + "category": "display", + "capHeight": 655, + "ascent": 1172, + "descent": -466, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 578, + "xWidthAvg": 541, + "subsets": { + "latin": { + "xWidthAvg": 541 + }, + "thai": { + "xWidthAvg": 898 + } + }, + "variants": { + "regular": { + "familyName": "Sigmar", + "fullName": "Sigmar Regular", + "postscriptName": "Sigmar-Regular", + "category": "display", + "capHeight": 655, + "ascent": 1172, + "descent": -466, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 578, + "xWidthAvg": 541, + "subsets": { + "latin": { + "xWidthAvg": 541 + }, + "thai": { + "xWidthAvg": 898 + } + } + } + } + }, + "sigmarOne": { + "familyName": "Sigmar One", + "fullName": "Sigmar One Regular", + "postscriptName": "SigmarOne-Regular", + "category": "display", + "capHeight": 676, + "ascent": 1172, + "descent": -466, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 578, + "xWidthAvg": 623, + "subsets": { + "latin": { + "xWidthAvg": 623 + }, + "thai": { + "xWidthAvg": 258 + } + }, + "variants": { + "regular": { + "familyName": "Sigmar One", + "fullName": "Sigmar One Regular", + "postscriptName": "SigmarOne-Regular", + "category": "display", + "capHeight": 676, + "ascent": 1172, + "descent": -466, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 578, + "xWidthAvg": 623, + "subsets": { + "latin": { + "xWidthAvg": 623 + }, + "thai": { + "xWidthAvg": 258 + } + } + } + } + }, + "signika": { + "familyName": "Signika", + "fullName": "Signika Regular", + "postscriptName": "Signika-Regular", + "category": "sans-serif", + "capHeight": 1366, + "ascent": 1880, + "descent": -584, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 996, + "xWidthAvg": 855, + "subsets": { + "latin": { + "xWidthAvg": 855 + }, + "thai": { + "xWidthAvg": 1281 + } + }, + "variants": { + "300": { + "familyName": "Signika", + "fullName": "Signika Light", + "postscriptName": "Signika-Light", + "category": "sans-serif", + "capHeight": 1366, + "ascent": 1880, + "descent": -584, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 987, + "xWidthAvg": 844, + "subsets": { + "latin": { + "xWidthAvg": 844 + }, + "thai": { + "xWidthAvg": 1313 + } + } + }, + "500": { + "familyName": "Signika", + "fullName": "Signika Medium", + "postscriptName": "Signika-Medium", + "category": "sans-serif", + "capHeight": 1366, + "ascent": 1880, + "descent": -584, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 999, + "xWidthAvg": 859, + "subsets": { + "latin": { + "xWidthAvg": 859 + }, + "thai": { + "xWidthAvg": 1269 + } + } + }, + "600": { + "familyName": "Signika", + "fullName": "Signika SemiBold", + "postscriptName": "Signika-SemiBold", + "category": "sans-serif", + "capHeight": 1366, + "ascent": 1880, + "descent": -584, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1004, + "xWidthAvg": 865, + "subsets": { + "latin": { + "xWidthAvg": 865 + }, + "thai": { + "xWidthAvg": 1251 + } + } + }, + "700": { + "familyName": "Signika", + "fullName": "Signika Bold", + "postscriptName": "Signika-Bold", + "category": "sans-serif", + "capHeight": 1366, + "ascent": 1880, + "descent": -584, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1012, + "xWidthAvg": 874, + "subsets": { + "latin": { + "xWidthAvg": 874 + }, + "thai": { + "xWidthAvg": 1223 + } + } + }, + "regular": { + "familyName": "Signika", + "fullName": "Signika Regular", + "postscriptName": "Signika-Regular", + "category": "sans-serif", + "capHeight": 1366, + "ascent": 1880, + "descent": -584, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 996, + "xWidthAvg": 855, + "subsets": { + "latin": { + "xWidthAvg": 855 + }, + "thai": { + "xWidthAvg": 1281 + } + } + } + } + }, + "signikaNegative": { + "familyName": "Signika Negative", + "fullName": "Signika Negative Regular", + "postscriptName": "SignikaNegative-Regular", + "category": "sans-serif", + "capHeight": 1370, + "ascent": 1880, + "descent": -584, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 980, + "xWidthAvg": 853, + "subsets": { + "latin": { + "xWidthAvg": 853 + }, + "thai": { + "xWidthAvg": 1288 + } + }, + "variants": { + "300": { + "familyName": "Signika Negative", + "fullName": "Signika Negative Light", + "postscriptName": "SignikaNegative-Light", + "category": "sans-serif", + "capHeight": 1370, + "ascent": 1880, + "descent": -584, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 980, + "xWidthAvg": 842, + "subsets": { + "latin": { + "xWidthAvg": 842 + }, + "thai": { + "xWidthAvg": 1319 + } + } + }, + "500": { + "familyName": "Signika Negative", + "fullName": "Signika Negative Medium", + "postscriptName": "SignikaNegative-Medium", + "category": "sans-serif", + "capHeight": 1370, + "ascent": 1880, + "descent": -584, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 980, + "xWidthAvg": 858, + "subsets": { + "latin": { + "xWidthAvg": 858 + }, + "thai": { + "xWidthAvg": 1273 + } + } + }, + "600": { + "familyName": "Signika Negative", + "fullName": "Signika Negative SemiBold", + "postscriptName": "SignikaNegative-SemiBold", + "category": "sans-serif", + "capHeight": 1370, + "ascent": 1880, + "descent": -584, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 980, + "xWidthAvg": 863, + "subsets": { + "latin": { + "xWidthAvg": 863 + }, + "thai": { + "xWidthAvg": 1258 + } + } + }, + "700": { + "familyName": "Signika Negative", + "fullName": "Signika Negative Bold", + "postscriptName": "SignikaNegative-Bold", + "category": "sans-serif", + "capHeight": 1370, + "ascent": 1880, + "descent": -584, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 980, + "xWidthAvg": 872, + "subsets": { + "latin": { + "xWidthAvg": 872 + }, + "thai": { + "xWidthAvg": 1231 + } + } + }, + "regular": { + "familyName": "Signika Negative", + "fullName": "Signika Negative Regular", + "postscriptName": "SignikaNegative-Regular", + "category": "sans-serif", + "capHeight": 1370, + "ascent": 1880, + "descent": -584, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 980, + "xWidthAvg": 853, + "subsets": { + "latin": { + "xWidthAvg": 853 + }, + "thai": { + "xWidthAvg": 1288 + } + } + } + } + }, + "silkscreen": { + "familyName": "Silkscreen", + "fullName": "Silkscreen Regular", + "postscriptName": "Silkscreen-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1030, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 667, + "subsets": { + "latin": { + "xWidthAvg": 667 + }, + "thai": { + "xWidthAvg": 625 + } + }, + "variants": { + "700": { + "familyName": "Silkscreen", + "fullName": "Silkscreen Bold", + "postscriptName": "Silkscreen-Bold", + "category": "display", + "capHeight": 700, + "ascent": 1030, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 773, + "subsets": { + "latin": { + "xWidthAvg": 773 + }, + "thai": { + "xWidthAvg": 625 + } + } + }, + "regular": { + "familyName": "Silkscreen", + "fullName": "Silkscreen Regular", + "postscriptName": "Silkscreen-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1030, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 667, + "subsets": { + "latin": { + "xWidthAvg": 667 + }, + "thai": { + "xWidthAvg": 625 + } + } + } + } + }, + "simonetta": { + "familyName": "Simonetta", + "fullName": "Simonetta Regular", + "postscriptName": "Simonetta-Regular", + "category": "display", + "capHeight": 1391, + "ascent": 1970, + "descent": -594, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 897, + "xWidthAvg": 829, + "subsets": { + "latin": { + "xWidthAvg": 829 + }, + "thai": { + "xWidthAvg": 477 + } + }, + "variants": { + "900": { + "familyName": "Simonetta", + "fullName": "Simonetta Black", + "postscriptName": "Simonetta-Black", + "category": "display", + "capHeight": 1397, + "ascent": 1970, + "descent": -594, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 926, + "xWidthAvg": 916, + "subsets": { + "latin": { + "xWidthAvg": 916 + }, + "thai": { + "xWidthAvg": 457 + } + } + }, + "regular": { + "familyName": "Simonetta", + "fullName": "Simonetta Regular", + "postscriptName": "Simonetta-Regular", + "category": "display", + "capHeight": 1391, + "ascent": 1970, + "descent": -594, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 897, + "xWidthAvg": 829, + "subsets": { + "latin": { + "xWidthAvg": 829 + }, + "thai": { + "xWidthAvg": 477 + } + } + }, + "italic": { + "familyName": "Simonetta", + "fullName": "Simonetta Italic", + "postscriptName": "Simonetta-Italic", + "category": "display", + "capHeight": 1391, + "ascent": 1970, + "descent": -594, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 897, + "xWidthAvg": 776, + "subsets": { + "latin": { + "xWidthAvg": 776 + }, + "thai": { + "xWidthAvg": 477 + } + } + }, + "900italic": { + "familyName": "Simonetta", + "fullName": "Simonetta Black Italic", + "postscriptName": "Simonetta-BlackItalic", + "category": "display", + "capHeight": 1397, + "ascent": 1970, + "descent": -594, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 926, + "xWidthAvg": 892, + "subsets": { + "latin": { + "xWidthAvg": 892 + }, + "thai": { + "xWidthAvg": 446 + } + } + } + } + }, + "singleDay": { + "familyName": "Single Day", + "fullName": "Single Day Regular", + "postscriptName": "SingleDay-Regular", + "category": "display", + "capHeight": 582, + "ascent": 779, + "descent": -245, + "lineGap": 256, + "unitsPerEm": 1024, + "xHeight": 390, + "xWidthAvg": 399, + "subsets": { + "latin": { + "xWidthAvg": 399 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "Single Day", + "fullName": "Single Day Regular", + "postscriptName": "SingleDay-Regular", + "category": "display", + "capHeight": 582, + "ascent": 779, + "descent": -245, + "lineGap": 256, + "unitsPerEm": 1024, + "xHeight": 390, + "xWidthAvg": 399, + "subsets": { + "latin": { + "xWidthAvg": 399 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "sintony": { + "familyName": "Sintony", + "fullName": "Sintony", + "postscriptName": "Sintony", + "category": "sans-serif", + "capHeight": 730, + "ascent": 995, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 572, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 290 + } + }, + "variants": { + "700": { + "familyName": "Sintony", + "fullName": "Sintony Bold", + "postscriptName": "Sintony-Bold", + "category": "sans-serif", + "capHeight": 730, + "ascent": 995, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 572, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 275 + } + } + }, + "regular": { + "familyName": "Sintony", + "fullName": "Sintony", + "postscriptName": "Sintony", + "category": "sans-serif", + "capHeight": 730, + "ascent": 995, + "descent": -308, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 572, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 290 + } + } + } + } + }, + "sirinStencil": { + "familyName": "Sirin Stencil", + "fullName": "SirinStencil", + "postscriptName": "SirinStencil-Regular", + "category": "display", + "capHeight": 1423, + "ascent": 2380, + "descent": -604, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1055, + "xWidthAvg": 835, + "subsets": { + "latin": { + "xWidthAvg": 835 + }, + "thai": { + "xWidthAvg": 1976 + } + }, + "variants": { + "regular": { + "familyName": "Sirin Stencil", + "fullName": "SirinStencil", + "postscriptName": "SirinStencil-Regular", + "category": "display", + "capHeight": 1423, + "ascent": 2380, + "descent": -604, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1055, + "xWidthAvg": 835, + "subsets": { + "latin": { + "xWidthAvg": 835 + }, + "thai": { + "xWidthAvg": 1976 + } + } + } + } + }, + "sixCaps": { + "familyName": "Six Caps", + "fullName": "Six Caps", + "postscriptName": "SixCaps", + "category": "sans-serif", + "ascent": 2263, + "descent": -432, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 408, + "subsets": { + "latin": { + "xWidthAvg": 408 + }, + "thai": { + "xWidthAvg": 0 + } + }, + "variants": { + "regular": { + "familyName": "Six Caps", + "fullName": "Six Caps", + "postscriptName": "SixCaps", + "category": "sans-serif", + "ascent": 2263, + "descent": -432, + "lineGap": 0, + "unitsPerEm": 2048, + "xWidthAvg": 408, + "subsets": { + "latin": { + "xWidthAvg": 408 + }, + "thai": { + "xWidthAvg": 0 + } + } + } + } + }, + "sixtyfour": { + "familyName": "Sixtyfour", + "fullName": "Sixtyfour Regular", + "postscriptName": "Sixtyfour-Regular", + "category": "monospace", + "capHeight": 896, + "ascent": 896, + "descent": -128, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 640, + "xWidthAvg": 1024, + "subsets": { + "latin": { + "xWidthAvg": 1024 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Sixtyfour", + "fullName": "Sixtyfour Regular", + "postscriptName": "Sixtyfour-Regular", + "category": "monospace", + "capHeight": 896, + "ascent": 896, + "descent": -128, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 640, + "xWidthAvg": 1024, + "subsets": { + "latin": { + "xWidthAvg": 1024 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "sixtyfourConvergence": { + "familyName": "Sixtyfour Convergence", + "fullName": "Sixtyfour Convergence Regular", + "postscriptName": "SixtyfourConvergence-Regular", + "category": "monospace", + "capHeight": 896, + "ascent": 896, + "descent": -128, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 640, + "xWidthAvg": 1024, + "subsets": { + "latin": { + "xWidthAvg": 1024 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Sixtyfour Convergence", + "fullName": "Sixtyfour Convergence Regular", + "postscriptName": "SixtyfourConvergence-Regular", + "category": "monospace", + "capHeight": 896, + "ascent": 896, + "descent": -128, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 640, + "xWidthAvg": 1024, + "subsets": { + "latin": { + "xWidthAvg": 1024 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "skranji": { + "familyName": "Skranji", + "fullName": "Skranji", + "postscriptName": "Skranji", + "category": "display", + "capHeight": 0, + "ascent": 1008, + "descent": -383, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 0, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 338 + } + }, + "variants": { + "700": { + "familyName": "Skranji", + "fullName": "Skranji Bold", + "postscriptName": "Skranji-Bold", + "category": "display", + "capHeight": 0, + "ascent": 1008, + "descent": -383, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 0, + "xWidthAvg": 513, + "subsets": { + "latin": { + "xWidthAvg": 513 + }, + "thai": { + "xWidthAvg": 338 + } + } + }, + "regular": { + "familyName": "Skranji", + "fullName": "Skranji", + "postscriptName": "Skranji", + "category": "display", + "capHeight": 0, + "ascent": 1008, + "descent": -383, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 0, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 338 + } + } + } + } + }, + "slabo13px": { + "familyName": "Slabo 13px", + "fullName": "Slabo 13px", + "postscriptName": "Slabo13px-Regular", + "category": "serif", + "capHeight": 540, + "ascent": 720, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 780, + "xHeight": 420, + "xWidthAvg": 371, + "subsets": { + "latin": { + "xWidthAvg": 371 + }, + "thai": { + "xWidthAvg": 420 + } + }, + "variants": { + "regular": { + "familyName": "Slabo 13px", + "fullName": "Slabo 13px", + "postscriptName": "Slabo13px-Regular", + "category": "serif", + "capHeight": 540, + "ascent": 720, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 780, + "xHeight": 420, + "xWidthAvg": 371, + "subsets": { + "latin": { + "xWidthAvg": 371 + }, + "thai": { + "xWidthAvg": 420 + } + } + } + } + }, + "slabo27px": { + "familyName": "Slabo 27px", + "fullName": "Slabo 27px", + "postscriptName": "Slabo27px-Regular", + "category": "serif", + "capHeight": 540, + "ascent": 750, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 810, + "xHeight": 390, + "xWidthAvg": 320, + "subsets": { + "latin": { + "xWidthAvg": 320 + }, + "thai": { + "xWidthAvg": 390 + } + }, + "variants": { + "regular": { + "familyName": "Slabo 27px", + "fullName": "Slabo 27px", + "postscriptName": "Slabo27px-Regular", + "category": "serif", + "capHeight": 540, + "ascent": 750, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 810, + "xHeight": 390, + "xWidthAvg": 320, + "subsets": { + "latin": { + "xWidthAvg": 320 + }, + "thai": { + "xWidthAvg": 390 + } + } + } + } + }, + "slackey": { + "familyName": "Slackey", + "fullName": "Slackey Regular", + "postscriptName": "Slackey-Regular", + "category": "display", + "capHeight": 772, + "ascent": 1078, + "descent": -351, + "lineGap": 28, + "unitsPerEm": 1024, + "xHeight": 691, + "xWidthAvg": 629, + "subsets": { + "latin": { + "xWidthAvg": 629 + }, + "thai": { + "xWidthAvg": 412 + } + }, + "variants": { + "regular": { + "familyName": "Slackey", + "fullName": "Slackey Regular", + "postscriptName": "Slackey-Regular", + "category": "display", + "capHeight": 772, + "ascent": 1078, + "descent": -351, + "lineGap": 28, + "unitsPerEm": 1024, + "xHeight": 691, + "xWidthAvg": 629, + "subsets": { + "latin": { + "xWidthAvg": 629 + }, + "thai": { + "xWidthAvg": 412 + } + } + } + } + }, + "slacksideOne": { + "familyName": "Slackside One", + "fullName": "Slackside One Regular", + "postscriptName": "SlacksideOne-Regular", + "category": "handwriting", + "capHeight": 513, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 255, + "xWidthAvg": 418, + "subsets": { + "latin": { + "xWidthAvg": 418 + }, + "thai": { + "xWidthAvg": 731 + } + }, + "variants": { + "regular": { + "familyName": "Slackside One", + "fullName": "Slackside One Regular", + "postscriptName": "SlacksideOne-Regular", + "category": "handwriting", + "capHeight": 513, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 255, + "xWidthAvg": 418, + "subsets": { + "latin": { + "xWidthAvg": 418 + }, + "thai": { + "xWidthAvg": 731 + } + } + } + } + }, + "smokum": { + "familyName": "Smokum", + "fullName": "Smokum Regular", + "postscriptName": "Smokum-Regular", + "category": "display", + "capHeight": 1536, + "ascent": 1986, + "descent": -512, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 691, + "subsets": { + "latin": { + "xWidthAvg": 691 + }, + "thai": { + "xWidthAvg": 2048 + } + }, + "variants": { + "regular": { + "familyName": "Smokum", + "fullName": "Smokum Regular", + "postscriptName": "Smokum-Regular", + "category": "display", + "capHeight": 1536, + "ascent": 1986, + "descent": -512, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1024, + "xWidthAvg": 691, + "subsets": { + "latin": { + "xWidthAvg": 691 + }, + "thai": { + "xWidthAvg": 2048 + } + } + } + } + }, + "smooch": { + "familyName": "Smooch", + "fullName": "Smooch Regular", + "postscriptName": "Smooch-Regular", + "category": "handwriting", + "capHeight": 640, + "ascent": 950, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 375, + "xWidthAvg": 350, + "subsets": { + "latin": { + "xWidthAvg": 350 + }, + "thai": { + "xWidthAvg": 518 + } + }, + "variants": { + "regular": { + "familyName": "Smooch", + "fullName": "Smooch Regular", + "postscriptName": "Smooch-Regular", + "category": "handwriting", + "capHeight": 640, + "ascent": 950, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 375, + "xWidthAvg": 350, + "subsets": { + "latin": { + "xWidthAvg": 350 + }, + "thai": { + "xWidthAvg": 518 + } + } + } + } + }, + "smoochSans": { + "familyName": "Smooch Sans", + "fullName": "Smooch Sans Regular", + "postscriptName": "SmoochSans-Regular", + "category": "sans-serif", + "capHeight": 620, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 311, + "subsets": { + "latin": { + "xWidthAvg": 311 + }, + "thai": { + "xWidthAvg": 494 + } + }, + "variants": { + "100": { + "familyName": "Smooch Sans", + "fullName": "Smooch Sans Thin", + "postscriptName": "SmoochSans-Thin", + "category": "sans-serif", + "capHeight": 620, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 308, + "subsets": { + "latin": { + "xWidthAvg": 308 + }, + "thai": { + "xWidthAvg": 494 + } + } + }, + "200": { + "familyName": "Smooch Sans", + "fullName": "Smooch Sans ExtraLight", + "postscriptName": "SmoochSans-ExtraLight", + "category": "sans-serif", + "capHeight": 620, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 309, + "subsets": { + "latin": { + "xWidthAvg": 309 + }, + "thai": { + "xWidthAvg": 494 + } + } + }, + "300": { + "familyName": "Smooch Sans", + "fullName": "Smooch Sans Light", + "postscriptName": "SmoochSans-Light", + "category": "sans-serif", + "capHeight": 620, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 310, + "subsets": { + "latin": { + "xWidthAvg": 310 + }, + "thai": { + "xWidthAvg": 494 + } + } + }, + "500": { + "familyName": "Smooch Sans", + "fullName": "Smooch Sans Medium", + "postscriptName": "SmoochSans-Medium", + "category": "sans-serif", + "capHeight": 620, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 313, + "subsets": { + "latin": { + "xWidthAvg": 313 + }, + "thai": { + "xWidthAvg": 494 + } + } + }, + "600": { + "familyName": "Smooch Sans", + "fullName": "Smooch Sans SemiBold", + "postscriptName": "SmoochSans-SemiBold", + "category": "sans-serif", + "capHeight": 620, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 316, + "subsets": { + "latin": { + "xWidthAvg": 316 + }, + "thai": { + "xWidthAvg": 494 + } + } + }, + "700": { + "familyName": "Smooch Sans", + "fullName": "Smooch Sans Bold", + "postscriptName": "SmoochSans-Bold", + "category": "sans-serif", + "capHeight": 620, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 319, + "subsets": { + "latin": { + "xWidthAvg": 319 + }, + "thai": { + "xWidthAvg": 494 + } + } + }, + "800": { + "familyName": "Smooch Sans", + "fullName": "Smooch Sans ExtraBold", + "postscriptName": "SmoochSans-ExtraBold", + "category": "sans-serif", + "capHeight": 620, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 322, + "subsets": { + "latin": { + "xWidthAvg": 322 + }, + "thai": { + "xWidthAvg": 494 + } + } + }, + "900": { + "familyName": "Smooch Sans", + "fullName": "Smooch Sans Black", + "postscriptName": "SmoochSans-Black", + "category": "sans-serif", + "capHeight": 620, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 324, + "subsets": { + "latin": { + "xWidthAvg": 324 + }, + "thai": { + "xWidthAvg": 494 + } + } + }, + "regular": { + "familyName": "Smooch Sans", + "fullName": "Smooch Sans Regular", + "postscriptName": "SmoochSans-Regular", + "category": "sans-serif", + "capHeight": 620, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 311, + "subsets": { + "latin": { + "xWidthAvg": 311 + }, + "thai": { + "xWidthAvg": 494 + } + } + } + } + }, + "smythe": { + "familyName": "Smythe", + "fullName": "Smythe", + "postscriptName": "Smythe", + "category": "display", + "capHeight": 1317, + "ascent": 1883, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 963, + "xWidthAvg": 622, + "subsets": { + "latin": { + "xWidthAvg": 622 + }, + "thai": { + "xWidthAvg": 309 + } + }, + "variants": { + "regular": { + "familyName": "Smythe", + "fullName": "Smythe", + "postscriptName": "Smythe", + "category": "display", + "capHeight": 1317, + "ascent": 1883, + "descent": -480, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 963, + "xWidthAvg": 622, + "subsets": { + "latin": { + "xWidthAvg": 622 + }, + "thai": { + "xWidthAvg": 309 + } + } + } + } + }, + "sniglet": { + "familyName": "Sniglet", + "fullName": "Sniglet Regular", + "postscriptName": "Sniglet-Regular", + "category": "display", + "capHeight": 700, + "ascent": 956, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 554 + } + }, + "variants": { + "800": { + "familyName": "Sniglet", + "fullName": "Sniglet ExtraBold", + "postscriptName": "Sniglet-ExtraBold", + "category": "display", + "capHeight": 700, + "ascent": 956, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 592, + "subsets": { + "latin": { + "xWidthAvg": 592 + }, + "thai": { + "xWidthAvg": 554 + } + } + }, + "regular": { + "familyName": "Sniglet", + "fullName": "Sniglet Regular", + "postscriptName": "Sniglet-Regular", + "category": "display", + "capHeight": 700, + "ascent": 956, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 554 + } + } + } + } + }, + "snippet": { + "familyName": "Snippet", + "fullName": "Snippet", + "postscriptName": "Snippet", + "category": "sans-serif", + "capHeight": 684, + "ascent": 890, + "descent": -261, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 300 + } + }, + "variants": { + "regular": { + "familyName": "Snippet", + "fullName": "Snippet", + "postscriptName": "Snippet", + "category": "sans-serif", + "capHeight": 684, + "ascent": 890, + "descent": -261, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 300 + } + } + } + } + }, + "snowburstOne": { + "familyName": "Snowburst One", + "fullName": "Snowburst One", + "postscriptName": "SnowburstOne-Regular", + "category": "display", + "capHeight": 1635, + "ascent": 2134, + "descent": -454, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1347, + "xWidthAvg": 1163, + "subsets": { + "latin": { + "xWidthAvg": 1163 + }, + "thai": { + "xWidthAvg": 0 + } + }, + "variants": { + "regular": { + "familyName": "Snowburst One", + "fullName": "Snowburst One", + "postscriptName": "SnowburstOne-Regular", + "category": "display", + "capHeight": 1635, + "ascent": 2134, + "descent": -454, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1347, + "xWidthAvg": 1163, + "subsets": { + "latin": { + "xWidthAvg": 1163 + }, + "thai": { + "xWidthAvg": 0 + } + } + } + } + }, + "sofadiOne": { + "familyName": "Sofadi One", + "fullName": "Sofadi One Regular", + "postscriptName": "SofadiOne-Regular", + "category": "display", + "capHeight": 700, + "ascent": 856, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 491, + "subsets": { + "latin": { + "xWidthAvg": 491 + }, + "thai": { + "xWidthAvg": 548 + } + }, + "variants": { + "regular": { + "familyName": "Sofadi One", + "fullName": "Sofadi One Regular", + "postscriptName": "SofadiOne-Regular", + "category": "display", + "capHeight": 700, + "ascent": 856, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 491, + "subsets": { + "latin": { + "xWidthAvg": 491 + }, + "thai": { + "xWidthAvg": 548 + } + } + } + } + }, + "sofia": { + "familyName": "Sofia", + "fullName": "Sofia", + "postscriptName": "Sofia-Regular", + "category": "handwriting", + "capHeight": 700, + "ascent": 1138, + "descent": -438, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 441, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 354 + } + }, + "variants": { + "regular": { + "familyName": "Sofia", + "fullName": "Sofia", + "postscriptName": "Sofia-Regular", + "category": "handwriting", + "capHeight": 700, + "ascent": 1138, + "descent": -438, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 441, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 354 + } + } + } + } + }, + "sofiaSans": { + "familyName": "Sofia Sans", + "fullName": "Sofia Sans Regular", + "postscriptName": "SofiaSans-Regular", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 430, + "subsets": { + "latin": { + "xWidthAvg": 430 + }, + "thai": { + "xWidthAvg": 596 + } + }, + "variants": { + "100": { + "familyName": "Sofia Sans", + "fullName": "Sofia Sans Thin", + "postscriptName": "SofiaSans-Thin", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 560 + } + } + }, + "200": { + "familyName": "Sofia Sans", + "fullName": "Sofia Sans ExtraLight", + "postscriptName": "SofiaSans-ExtraLight", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 572 + } + } + }, + "300": { + "familyName": "Sofia Sans", + "fullName": "Sofia Sans Light", + "postscriptName": "SofiaSans-Light", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 577 + } + } + }, + "500": { + "familyName": "Sofia Sans", + "fullName": "Sofia Sans Medium", + "postscriptName": "SofiaSans-Medium", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 432, + "subsets": { + "latin": { + "xWidthAvg": 432 + }, + "thai": { + "xWidthAvg": 590 + } + } + }, + "600": { + "familyName": "Sofia Sans", + "fullName": "Sofia Sans SemiBold", + "postscriptName": "SofiaSans-SemiBold", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 587 + } + } + }, + "700": { + "familyName": "Sofia Sans", + "fullName": "Sofia Sans Bold", + "postscriptName": "SofiaSans-Bold", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 436, + "subsets": { + "latin": { + "xWidthAvg": 436 + }, + "thai": { + "xWidthAvg": 576 + } + } + }, + "800": { + "familyName": "Sofia Sans", + "fullName": "Sofia Sans ExtraBold", + "postscriptName": "SofiaSans-ExtraBold", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 562 + } + } + }, + "900": { + "familyName": "Sofia Sans", + "fullName": "Sofia Sans Black", + "postscriptName": "SofiaSans-Black", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 549 + } + } + }, + "regular": { + "familyName": "Sofia Sans", + "fullName": "Sofia Sans Regular", + "postscriptName": "SofiaSans-Regular", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 430, + "subsets": { + "latin": { + "xWidthAvg": 430 + }, + "thai": { + "xWidthAvg": 596 + } + } + }, + "italic": { + "familyName": "Sofia Sans", + "fullName": "Sofia Sans Italic", + "postscriptName": "SofiaSans-Italic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 596 + } + } + }, + "900italic": { + "familyName": "Sofia Sans", + "fullName": "Sofia Sans Black Italic", + "postscriptName": "SofiaSans-BlackItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 541 + } + } + }, + "800italic": { + "familyName": "Sofia Sans", + "fullName": "Sofia Sans ExtraBold Italic", + "postscriptName": "SofiaSans-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 557 + } + } + }, + "700italic": { + "familyName": "Sofia Sans", + "fullName": "Sofia Sans Bold Italic", + "postscriptName": "SofiaSans-BoldItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 572 + } + } + }, + "600italic": { + "familyName": "Sofia Sans", + "fullName": "Sofia Sans SemiBold Italic", + "postscriptName": "SofiaSans-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 586 + } + } + }, + "500italic": { + "familyName": "Sofia Sans", + "fullName": "Sofia Sans Medium Italic", + "postscriptName": "SofiaSans-MediumItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 589 + } + } + }, + "300italic": { + "familyName": "Sofia Sans", + "fullName": "Sofia Sans Light Italic", + "postscriptName": "SofiaSans-LightItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 424, + "subsets": { + "latin": { + "xWidthAvg": 424 + }, + "thai": { + "xWidthAvg": 573 + } + } + }, + "200italic": { + "familyName": "Sofia Sans", + "fullName": "Sofia Sans ExtraLight Italic", + "postscriptName": "SofiaSans-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 424, + "subsets": { + "latin": { + "xWidthAvg": 424 + }, + "thai": { + "xWidthAvg": 566 + } + } + }, + "100italic": { + "familyName": "Sofia Sans", + "fullName": "Sofia Sans Thin Italic", + "postscriptName": "SofiaSans-ThinItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 488, + "xWidthAvg": 423, + "subsets": { + "latin": { + "xWidthAvg": 423 + }, + "thai": { + "xWidthAvg": 550 + } + } + } + } + }, + "sofiaSansCondensed": { + "familyName": "Sofia Sans Condensed", + "fullName": "Sofia Sans Condensed Regular", + "postscriptName": "SofiaSansCondensed-Regular", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 334, + "subsets": { + "latin": { + "xWidthAvg": 334 + }, + "thai": { + "xWidthAvg": 437 + } + }, + "variants": { + "100": { + "familyName": "Sofia Sans Condensed", + "fullName": "Sofia Sans Condensed Thin", + "postscriptName": "SofiaSansCondensed-Thin", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 328, + "subsets": { + "latin": { + "xWidthAvg": 328 + }, + "thai": { + "xWidthAvg": 420 + } + } + }, + "200": { + "familyName": "Sofia Sans Condensed", + "fullName": "Sofia Sans Condensed ExtraLight", + "postscriptName": "SofiaSansCondensed-ExtraLight", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 330, + "subsets": { + "latin": { + "xWidthAvg": 330 + }, + "thai": { + "xWidthAvg": 426 + } + } + }, + "300": { + "familyName": "Sofia Sans Condensed", + "fullName": "Sofia Sans Condensed Light", + "postscriptName": "SofiaSansCondensed-Light", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 330, + "subsets": { + "latin": { + "xWidthAvg": 330 + }, + "thai": { + "xWidthAvg": 428 + } + } + }, + "500": { + "familyName": "Sofia Sans Condensed", + "fullName": "Sofia Sans Condensed Medium", + "postscriptName": "SofiaSansCondensed-Medium", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 339, + "subsets": { + "latin": { + "xWidthAvg": 339 + }, + "thai": { + "xWidthAvg": 436 + } + } + }, + "600": { + "familyName": "Sofia Sans Condensed", + "fullName": "Sofia Sans Condensed SemiBold", + "postscriptName": "SofiaSansCondensed-SemiBold", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 345, + "subsets": { + "latin": { + "xWidthAvg": 345 + }, + "thai": { + "xWidthAvg": 435 + } + } + }, + "700": { + "familyName": "Sofia Sans Condensed", + "fullName": "Sofia Sans Condensed Bold", + "postscriptName": "SofiaSansCondensed-Bold", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 353, + "subsets": { + "latin": { + "xWidthAvg": 353 + }, + "thai": { + "xWidthAvg": 434 + } + } + }, + "800": { + "familyName": "Sofia Sans Condensed", + "fullName": "Sofia Sans Condensed ExtraBold", + "postscriptName": "SofiaSansCondensed-ExtraBold", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 361, + "subsets": { + "latin": { + "xWidthAvg": 361 + }, + "thai": { + "xWidthAvg": 433 + } + } + }, + "900": { + "familyName": "Sofia Sans Condensed", + "fullName": "Sofia Sans Condensed Black", + "postscriptName": "SofiaSansCondensed-Black", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 373, + "subsets": { + "latin": { + "xWidthAvg": 373 + }, + "thai": { + "xWidthAvg": 431 + } + } + }, + "regular": { + "familyName": "Sofia Sans Condensed", + "fullName": "Sofia Sans Condensed Regular", + "postscriptName": "SofiaSansCondensed-Regular", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 334, + "subsets": { + "latin": { + "xWidthAvg": 334 + }, + "thai": { + "xWidthAvg": 437 + } + } + }, + "italic": { + "familyName": "Sofia Sans Condensed", + "fullName": "Sofia Sans Condensed Italic", + "postscriptName": "SofiaSansCondensed-Italic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 329, + "subsets": { + "latin": { + "xWidthAvg": 329 + }, + "thai": { + "xWidthAvg": 433 + } + } + }, + "900italic": { + "familyName": "Sofia Sans Condensed", + "fullName": "Sofia Sans Condensed Black Italic", + "postscriptName": "SofiaSansCondensed-BlackItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 363, + "subsets": { + "latin": { + "xWidthAvg": 363 + }, + "thai": { + "xWidthAvg": 423 + } + } + }, + "800italic": { + "familyName": "Sofia Sans Condensed", + "fullName": "Sofia Sans Condensed ExtraBold Italic", + "postscriptName": "SofiaSansCondensed-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 353, + "subsets": { + "latin": { + "xWidthAvg": 353 + }, + "thai": { + "xWidthAvg": 426 + } + } + }, + "700italic": { + "familyName": "Sofia Sans Condensed", + "fullName": "Sofia Sans Condensed Bold Italic", + "postscriptName": "SofiaSansCondensed-BoldItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 345, + "subsets": { + "latin": { + "xWidthAvg": 345 + }, + "thai": { + "xWidthAvg": 428 + } + } + }, + "600italic": { + "familyName": "Sofia Sans Condensed", + "fullName": "Sofia Sans Condensed SemiBold Italic", + "postscriptName": "SofiaSansCondensed-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 338, + "subsets": { + "latin": { + "xWidthAvg": 338 + }, + "thai": { + "xWidthAvg": 430 + } + } + }, + "500italic": { + "familyName": "Sofia Sans Condensed", + "fullName": "Sofia Sans Condensed Medium Italic", + "postscriptName": "SofiaSansCondensed-MediumItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 334, + "subsets": { + "latin": { + "xWidthAvg": 334 + }, + "thai": { + "xWidthAvg": 432 + } + } + }, + "300italic": { + "familyName": "Sofia Sans Condensed", + "fullName": "Sofia Sans Condensed Light Italic", + "postscriptName": "SofiaSansCondensed-LightItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 326, + "subsets": { + "latin": { + "xWidthAvg": 326 + }, + "thai": { + "xWidthAvg": 422 + } + } + }, + "200italic": { + "familyName": "Sofia Sans Condensed", + "fullName": "Sofia Sans Condensed ExtraLight Italic", + "postscriptName": "SofiaSansCondensed-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 326, + "subsets": { + "latin": { + "xWidthAvg": 326 + }, + "thai": { + "xWidthAvg": 420 + } + } + }, + "100italic": { + "familyName": "Sofia Sans Condensed", + "fullName": "Sofia Sans Condensed Thin Italic", + "postscriptName": "SofiaSansCondensed-ThinItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 324, + "subsets": { + "latin": { + "xWidthAvg": 324 + }, + "thai": { + "xWidthAvg": 412 + } + } + } + } + }, + "sofiaSansExtraCondensed": { + "familyName": "Sofia Sans Extra Condensed", + "fullName": "Sofia Sans Extra Condensed Regular", + "postscriptName": "SofiaSansExtraCondensed-Regular", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 272, + "subsets": { + "latin": { + "xWidthAvg": 272 + }, + "thai": { + "xWidthAvg": 340 + } + }, + "variants": { + "100": { + "familyName": "Sofia Sans Extra Condensed", + "fullName": "Sofia Sans Extra Condensed Thin", + "postscriptName": "SofiaSansExtraCondensed-Thin", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 264, + "subsets": { + "latin": { + "xWidthAvg": 264 + }, + "thai": { + "xWidthAvg": 333 + } + } + }, + "200": { + "familyName": "Sofia Sans Extra Condensed", + "fullName": "Sofia Sans Extra Condensed ExtraLight", + "postscriptName": "SofiaSansExtraCondensed-ExtraLight", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 267, + "subsets": { + "latin": { + "xWidthAvg": 267 + }, + "thai": { + "xWidthAvg": 335 + } + } + }, + "300": { + "familyName": "Sofia Sans Extra Condensed", + "fullName": "Sofia Sans Extra Condensed Light", + "postscriptName": "SofiaSansExtraCondensed-Light", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 268, + "subsets": { + "latin": { + "xWidthAvg": 268 + }, + "thai": { + "xWidthAvg": 336 + } + } + }, + "500": { + "familyName": "Sofia Sans Extra Condensed", + "fullName": "Sofia Sans Extra Condensed Medium", + "postscriptName": "SofiaSansExtraCondensed-Medium", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 280, + "subsets": { + "latin": { + "xWidthAvg": 280 + }, + "thai": { + "xWidthAvg": 342 + } + } + }, + "600": { + "familyName": "Sofia Sans Extra Condensed", + "fullName": "Sofia Sans Extra Condensed SemiBold", + "postscriptName": "SofiaSansExtraCondensed-SemiBold", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 290, + "subsets": { + "latin": { + "xWidthAvg": 290 + }, + "thai": { + "xWidthAvg": 344 + } + } + }, + "700": { + "familyName": "Sofia Sans Extra Condensed", + "fullName": "Sofia Sans Extra Condensed Bold", + "postscriptName": "SofiaSansExtraCondensed-Bold", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 297, + "subsets": { + "latin": { + "xWidthAvg": 297 + }, + "thai": { + "xWidthAvg": 346 + } + } + }, + "800": { + "familyName": "Sofia Sans Extra Condensed", + "fullName": "Sofia Sans Extra Condensed ExtraBold", + "postscriptName": "SofiaSansExtraCondensed-ExtraBold", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 309, + "subsets": { + "latin": { + "xWidthAvg": 309 + }, + "thai": { + "xWidthAvg": 349 + } + } + }, + "900": { + "familyName": "Sofia Sans Extra Condensed", + "fullName": "Sofia Sans Extra Condensed Black", + "postscriptName": "SofiaSansExtraCondensed-Black", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 325, + "subsets": { + "latin": { + "xWidthAvg": 325 + }, + "thai": { + "xWidthAvg": 352 + } + } + }, + "regular": { + "familyName": "Sofia Sans Extra Condensed", + "fullName": "Sofia Sans Extra Condensed Regular", + "postscriptName": "SofiaSansExtraCondensed-Regular", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 272, + "subsets": { + "latin": { + "xWidthAvg": 272 + }, + "thai": { + "xWidthAvg": 340 + } + } + }, + "italic": { + "familyName": "Sofia Sans Extra Condensed", + "fullName": "Sofia Sans Extra Condensed Italic", + "postscriptName": "SofiaSansExtraCondensed-Italic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 268, + "subsets": { + "latin": { + "xWidthAvg": 268 + }, + "thai": { + "xWidthAvg": 333 + } + } + }, + "900italic": { + "familyName": "Sofia Sans Extra Condensed", + "fullName": "Sofia Sans Extra Condensed Black Italic", + "postscriptName": "SofiaSansExtraCondensed-BlackItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 319, + "subsets": { + "latin": { + "xWidthAvg": 319 + }, + "thai": { + "xWidthAvg": 345 + } + } + }, + "800italic": { + "familyName": "Sofia Sans Extra Condensed", + "fullName": "Sofia Sans Extra Condensed ExtraBold Italic", + "postscriptName": "SofiaSansExtraCondensed-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 304, + "subsets": { + "latin": { + "xWidthAvg": 304 + }, + "thai": { + "xWidthAvg": 342 + } + } + }, + "700italic": { + "familyName": "Sofia Sans Extra Condensed", + "fullName": "Sofia Sans Extra Condensed Bold Italic", + "postscriptName": "SofiaSansExtraCondensed-BoldItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 292, + "subsets": { + "latin": { + "xWidthAvg": 292 + }, + "thai": { + "xWidthAvg": 339 + } + } + }, + "600italic": { + "familyName": "Sofia Sans Extra Condensed", + "fullName": "Sofia Sans Extra Condensed SemiBold Italic", + "postscriptName": "SofiaSansExtraCondensed-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 285, + "subsets": { + "latin": { + "xWidthAvg": 285 + }, + "thai": { + "xWidthAvg": 337 + } + } + }, + "500italic": { + "familyName": "Sofia Sans Extra Condensed", + "fullName": "Sofia Sans Extra Condensed Medium Italic", + "postscriptName": "SofiaSansExtraCondensed-MediumItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 275, + "subsets": { + "latin": { + "xWidthAvg": 275 + }, + "thai": { + "xWidthAvg": 335 + } + } + }, + "300italic": { + "familyName": "Sofia Sans Extra Condensed", + "fullName": "Sofia Sans Extra Condensed Light Italic", + "postscriptName": "SofiaSansExtraCondensed-LightItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 264, + "subsets": { + "latin": { + "xWidthAvg": 264 + }, + "thai": { + "xWidthAvg": 329 + } + } + }, + "200italic": { + "familyName": "Sofia Sans Extra Condensed", + "fullName": "Sofia Sans Extra Condensed ExtraLight Italic", + "postscriptName": "SofiaSansExtraCondensed-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 263, + "subsets": { + "latin": { + "xWidthAvg": 263 + }, + "thai": { + "xWidthAvg": 328 + } + } + }, + "100italic": { + "familyName": "Sofia Sans Extra Condensed", + "fullName": "Sofia Sans Extra Condensed Thin Italic", + "postscriptName": "SofiaSansExtraCondensed-ThinItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 261, + "subsets": { + "latin": { + "xWidthAvg": 261 + }, + "thai": { + "xWidthAvg": 326 + } + } + } + } + }, + "sofiaSansSemiCondensed": { + "familyName": "Sofia Sans Semi Condensed", + "fullName": "Sofia Sans Semi Condensed Regular", + "postscriptName": "SofiaSansSemiCondensed-Regular", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 409, + "subsets": { + "latin": { + "xWidthAvg": 409 + }, + "thai": { + "xWidthAvg": 552 + } + }, + "variants": { + "100": { + "familyName": "Sofia Sans Semi Condensed", + "fullName": "Sofia Sans Semi Condensed Thin", + "postscriptName": "SofiaSansSemiCondensed-Thin", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 402, + "subsets": { + "latin": { + "xWidthAvg": 402 + }, + "thai": { + "xWidthAvg": 523 + } + } + }, + "200": { + "familyName": "Sofia Sans Semi Condensed", + "fullName": "Sofia Sans Semi Condensed ExtraLight", + "postscriptName": "SofiaSansSemiCondensed-ExtraLight", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 405, + "subsets": { + "latin": { + "xWidthAvg": 405 + }, + "thai": { + "xWidthAvg": 534 + } + } + }, + "300": { + "familyName": "Sofia Sans Semi Condensed", + "fullName": "Sofia Sans Semi Condensed Light", + "postscriptName": "SofiaSansSemiCondensed-Light", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 406, + "subsets": { + "latin": { + "xWidthAvg": 406 + }, + "thai": { + "xWidthAvg": 536 + } + } + }, + "500": { + "familyName": "Sofia Sans Semi Condensed", + "fullName": "Sofia Sans Semi Condensed Medium", + "postscriptName": "SofiaSansSemiCondensed-Medium", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 547 + } + } + }, + "600": { + "familyName": "Sofia Sans Semi Condensed", + "fullName": "Sofia Sans Semi Condensed SemiBold", + "postscriptName": "SofiaSansSemiCondensed-SemiBold", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 413, + "subsets": { + "latin": { + "xWidthAvg": 413 + }, + "thai": { + "xWidthAvg": 544 + } + } + }, + "700": { + "familyName": "Sofia Sans Semi Condensed", + "fullName": "Sofia Sans Semi Condensed Bold", + "postscriptName": "SofiaSansSemiCondensed-Bold", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 417, + "subsets": { + "latin": { + "xWidthAvg": 417 + }, + "thai": { + "xWidthAvg": 537 + } + } + }, + "800": { + "familyName": "Sofia Sans Semi Condensed", + "fullName": "Sofia Sans Semi Condensed ExtraBold", + "postscriptName": "SofiaSansSemiCondensed-ExtraBold", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 528 + } + } + }, + "900": { + "familyName": "Sofia Sans Semi Condensed", + "fullName": "Sofia Sans Semi Condensed Black", + "postscriptName": "SofiaSansSemiCondensed-Black", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 519 + } + } + }, + "regular": { + "familyName": "Sofia Sans Semi Condensed", + "fullName": "Sofia Sans Semi Condensed Regular", + "postscriptName": "SofiaSansSemiCondensed-Regular", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 409, + "subsets": { + "latin": { + "xWidthAvg": 409 + }, + "thai": { + "xWidthAvg": 552 + } + } + }, + "italic": { + "familyName": "Sofia Sans Semi Condensed", + "fullName": "Sofia Sans Semi Condensed Italic", + "postscriptName": "SofiaSansSemiCondensed-Italic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 404, + "subsets": { + "latin": { + "xWidthAvg": 404 + }, + "thai": { + "xWidthAvg": 549 + } + } + }, + "900italic": { + "familyName": "Sofia Sans Semi Condensed", + "fullName": "Sofia Sans Semi Condensed Black Italic", + "postscriptName": "SofiaSansSemiCondensed-BlackItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 420, + "subsets": { + "latin": { + "xWidthAvg": 420 + }, + "thai": { + "xWidthAvg": 510 + } + } + }, + "800italic": { + "familyName": "Sofia Sans Semi Condensed", + "fullName": "Sofia Sans Semi Condensed ExtraBold Italic", + "postscriptName": "SofiaSansSemiCondensed-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 416, + "subsets": { + "latin": { + "xWidthAvg": 416 + }, + "thai": { + "xWidthAvg": 521 + } + } + }, + "700italic": { + "familyName": "Sofia Sans Semi Condensed", + "fullName": "Sofia Sans Semi Condensed Bold Italic", + "postscriptName": "SofiaSansSemiCondensed-BoldItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 531 + } + } + }, + "600italic": { + "familyName": "Sofia Sans Semi Condensed", + "fullName": "Sofia Sans Semi Condensed SemiBold Italic", + "postscriptName": "SofiaSansSemiCondensed-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 408, + "subsets": { + "latin": { + "xWidthAvg": 408 + }, + "thai": { + "xWidthAvg": 540 + } + } + }, + "500italic": { + "familyName": "Sofia Sans Semi Condensed", + "fullName": "Sofia Sans Semi Condensed Medium Italic", + "postscriptName": "SofiaSansSemiCondensed-MediumItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 407, + "subsets": { + "latin": { + "xWidthAvg": 407 + }, + "thai": { + "xWidthAvg": 543 + } + } + }, + "300italic": { + "familyName": "Sofia Sans Semi Condensed", + "fullName": "Sofia Sans Semi Condensed Light Italic", + "postscriptName": "SofiaSansSemiCondensed-LightItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 530 + } + } + }, + "200italic": { + "familyName": "Sofia Sans Semi Condensed", + "fullName": "Sofia Sans Semi Condensed ExtraLight Italic", + "postscriptName": "SofiaSansSemiCondensed-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "100italic": { + "familyName": "Sofia Sans Semi Condensed", + "fullName": "Sofia Sans Semi Condensed Thin Italic", + "postscriptName": "SofiaSansSemiCondensed-ThinItalic", + "category": "sans-serif", + "capHeight": 655, + "ascent": 900, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 487, + "xWidthAvg": 398, + "subsets": { + "latin": { + "xWidthAvg": 398 + }, + "thai": { + "xWidthAvg": 513 + } + } + } + } + }, + "solitreo": { + "familyName": "Solitreo", + "fullName": "Solitreo Regular", + "postscriptName": "Solitreo-Regular", + "category": "handwriting", + "capHeight": 700, + "ascent": 880, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 420, + "subsets": { + "latin": { + "xWidthAvg": 420 + }, + "thai": { + "xWidthAvg": 695 + } + }, + "variants": { + "regular": { + "familyName": "Solitreo", + "fullName": "Solitreo Regular", + "postscriptName": "Solitreo-Regular", + "category": "handwriting", + "capHeight": 700, + "ascent": 880, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 490, + "xWidthAvg": 420, + "subsets": { + "latin": { + "xWidthAvg": 420 + }, + "thai": { + "xWidthAvg": 695 + } + } + } + } + }, + "solway": { + "familyName": "Solway", + "fullName": "Solway Regular", + "postscriptName": "Solway-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 485 + } + }, + "variants": { + "300": { + "familyName": "Solway", + "fullName": "Solway Light", + "postscriptName": "Solway-Light", + "category": "serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 485 + } + } + }, + "500": { + "familyName": "Solway", + "fullName": "Solway Medium", + "postscriptName": "Solway-Medium", + "category": "serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 485 + } + } + }, + "700": { + "familyName": "Solway", + "fullName": "Solway Bold", + "postscriptName": "Solway-Bold", + "category": "serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 511, + "subsets": { + "latin": { + "xWidthAvg": 511 + }, + "thai": { + "xWidthAvg": 485 + } + } + }, + "800": { + "familyName": "Solway", + "fullName": "Solway ExtraBold", + "postscriptName": "Solway-ExtraBold", + "category": "serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 518, + "subsets": { + "latin": { + "xWidthAvg": 518 + }, + "thai": { + "xWidthAvg": 485 + } + } + }, + "regular": { + "familyName": "Solway", + "fullName": "Solway Regular", + "postscriptName": "Solway-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 485 + } + } + } + } + }, + "sometypeMono": { + "familyName": "Sometype Mono", + "fullName": "Sometype Mono Regular", + "postscriptName": "SometypeMono-Regular", + "category": "monospace", + "capHeight": 650, + "ascent": 925, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 580, + "subsets": { + "latin": { + "xWidthAvg": 580 + }, + "thai": { + "xWidthAvg": 580 + } + }, + "variants": { + "500": { + "familyName": "Sometype Mono", + "fullName": "Sometype Mono Medium", + "postscriptName": "SometypeMono-Medium", + "category": "monospace", + "capHeight": 650, + "ascent": 925, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 580, + "subsets": { + "latin": { + "xWidthAvg": 580 + }, + "thai": { + "xWidthAvg": 580 + } + } + }, + "600": { + "familyName": "Sometype Mono", + "fullName": "Sometype Mono SemiBold", + "postscriptName": "SometypeMono-SemiBold", + "category": "monospace", + "capHeight": 650, + "ascent": 925, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 580, + "subsets": { + "latin": { + "xWidthAvg": 580 + }, + "thai": { + "xWidthAvg": 580 + } + } + }, + "700": { + "familyName": "Sometype Mono", + "fullName": "Sometype Mono Bold", + "postscriptName": "SometypeMono-Bold", + "category": "monospace", + "capHeight": 650, + "ascent": 925, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 476, + "xWidthAvg": 580, + "subsets": { + "latin": { + "xWidthAvg": 580 + }, + "thai": { + "xWidthAvg": 580 + } + } + }, + "regular": { + "familyName": "Sometype Mono", + "fullName": "Sometype Mono Regular", + "postscriptName": "SometypeMono-Regular", + "category": "monospace", + "capHeight": 650, + "ascent": 925, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 580, + "subsets": { + "latin": { + "xWidthAvg": 580 + }, + "thai": { + "xWidthAvg": 580 + } + } + }, + "italic": { + "familyName": "Sometype Mono", + "fullName": "Sometype Mono Italic", + "postscriptName": "SometypeMono-Italic", + "category": "monospace", + "capHeight": 650, + "ascent": 925, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 580, + "subsets": { + "latin": { + "xWidthAvg": 580 + }, + "thai": { + "xWidthAvg": 580 + } + } + }, + "700italic": { + "familyName": "Sometype Mono", + "fullName": "Sometype Mono Bold Italic", + "postscriptName": "SometypeMono-BoldItalic", + "category": "monospace", + "capHeight": 650, + "ascent": 925, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 476, + "xWidthAvg": 580, + "subsets": { + "latin": { + "xWidthAvg": 580 + }, + "thai": { + "xWidthAvg": 580 + } + } + }, + "600italic": { + "familyName": "Sometype Mono", + "fullName": "Sometype Mono SemiBold Italic", + "postscriptName": "SometypeMono-SemiBoldItalic", + "category": "monospace", + "capHeight": 650, + "ascent": 925, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 580, + "subsets": { + "latin": { + "xWidthAvg": 580 + }, + "thai": { + "xWidthAvg": 580 + } + } + }, + "500italic": { + "familyName": "Sometype Mono", + "fullName": "Sometype Mono Medium Italic", + "postscriptName": "SometypeMono-MediumItalic", + "category": "monospace", + "capHeight": 650, + "ascent": 925, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 472, + "xWidthAvg": 580, + "subsets": { + "latin": { + "xWidthAvg": 580 + }, + "thai": { + "xWidthAvg": 580 + } + } + } + } + }, + "songMyung": { + "familyName": "Song Myung", + "fullName": "Song Myung Regular", + "postscriptName": "SongMyung-Regular", + "category": "serif", + "capHeight": 635, + "ascent": 848, + "descent": -152, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 457, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 380 + } + }, + "variants": { + "regular": { + "familyName": "Song Myung", + "fullName": "Song Myung Regular", + "postscriptName": "SongMyung-Regular", + "category": "serif", + "capHeight": 635, + "ascent": 848, + "descent": -152, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 457, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 380 + } + } + } + } + }, + "sono": { + "familyName": "Sono", + "fullName": "Sono Monospace Regular", + "postscriptName": "SonoMonospace-Regular", + "category": "sans-serif", + "capHeight": 1238, + "ascent": 1824, + "descent": -576, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 952, + "xWidthAvg": 1238, + "subsets": { + "latin": { + "xWidthAvg": 1238 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "200": { + "familyName": "Sono", + "fullName": "Sono Monospace ExtraLight", + "postscriptName": "SonoMonospace-ExtraLight", + "category": "sans-serif", + "capHeight": 1238, + "ascent": 1824, + "descent": -576, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 952, + "xWidthAvg": 1238, + "subsets": { + "latin": { + "xWidthAvg": 1238 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "300": { + "familyName": "Sono", + "fullName": "Sono Monospace Light", + "postscriptName": "SonoMonospace-Light", + "category": "sans-serif", + "capHeight": 1238, + "ascent": 1824, + "descent": -576, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 952, + "xWidthAvg": 1238, + "subsets": { + "latin": { + "xWidthAvg": 1238 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "500": { + "familyName": "Sono", + "fullName": "Sono Monospace Medium", + "postscriptName": "SonoMonospace-Medium", + "category": "sans-serif", + "capHeight": 1238, + "ascent": 1824, + "descent": -576, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 952, + "xWidthAvg": 1238, + "subsets": { + "latin": { + "xWidthAvg": 1238 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "600": { + "familyName": "Sono", + "fullName": "Sono Monospace SemiBold", + "postscriptName": "SonoMonospace-SemiBold", + "category": "sans-serif", + "capHeight": 1238, + "ascent": 1824, + "descent": -576, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 952, + "xWidthAvg": 1238, + "subsets": { + "latin": { + "xWidthAvg": 1238 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "Sono", + "fullName": "Sono Monospace Bold", + "postscriptName": "SonoMonospace-Bold", + "category": "sans-serif", + "capHeight": 1238, + "ascent": 1824, + "descent": -576, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 952, + "xWidthAvg": 1238, + "subsets": { + "latin": { + "xWidthAvg": 1238 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "800": { + "familyName": "Sono", + "fullName": "Sono Monospace ExtraBold", + "postscriptName": "SonoMonospace-ExtraBold", + "category": "sans-serif", + "capHeight": 1238, + "ascent": 1824, + "descent": -576, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 952, + "xWidthAvg": 1238, + "subsets": { + "latin": { + "xWidthAvg": 1238 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Sono", + "fullName": "Sono Monospace Regular", + "postscriptName": "SonoMonospace-Regular", + "category": "sans-serif", + "capHeight": 1238, + "ascent": 1824, + "descent": -576, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 952, + "xWidthAvg": 1238, + "subsets": { + "latin": { + "xWidthAvg": 1238 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "sonsieOne": { + "familyName": "Sonsie One", + "fullName": "Sonsie One", + "postscriptName": "SonsieOne-Regular", + "category": "display", + "capHeight": 506, + "ascent": 2050, + "descent": -600, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 272, + "xWidthAvg": 1483, + "subsets": { + "latin": { + "xWidthAvg": 1483 + }, + "thai": { + "xWidthAvg": 1875 + } + }, + "variants": { + "regular": { + "familyName": "Sonsie One", + "fullName": "Sonsie One", + "postscriptName": "SonsieOne-Regular", + "category": "display", + "capHeight": 506, + "ascent": 2050, + "descent": -600, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 272, + "xWidthAvg": 1483, + "subsets": { + "latin": { + "xWidthAvg": 1483 + }, + "thai": { + "xWidthAvg": 1875 + } + } + } + } + }, + "sora": { + "familyName": "Sora", + "fullName": "Sora Regular", + "postscriptName": "Sora-Regular", + "category": "sans-serif", + "capHeight": 730, + "ascent": 970, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 507, + "subsets": { + "latin": { + "xWidthAvg": 507 + }, + "thai": { + "xWidthAvg": 859 + } + }, + "variants": { + "100": { + "familyName": "Sora", + "fullName": "Sora Thin", + "postscriptName": "Sora-Thin", + "category": "sans-serif", + "capHeight": 730, + "ascent": 970, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 790 + } + } + }, + "200": { + "familyName": "Sora", + "fullName": "Sora ExtraLight", + "postscriptName": "Sora-ExtraLight", + "category": "sans-serif", + "capHeight": 730, + "ascent": 970, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 813 + } + } + }, + "300": { + "familyName": "Sora", + "fullName": "Sora Light", + "postscriptName": "Sora-Light", + "category": "sans-serif", + "capHeight": 730, + "ascent": 970, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 836 + } + } + }, + "500": { + "familyName": "Sora", + "fullName": "Sora Medium", + "postscriptName": "Sora-Medium", + "category": "sans-serif", + "capHeight": 730, + "ascent": 970, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 862 + } + } + }, + "600": { + "familyName": "Sora", + "fullName": "Sora SemiBold", + "postscriptName": "Sora-SemiBold", + "category": "sans-serif", + "capHeight": 730, + "ascent": 970, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 513, + "subsets": { + "latin": { + "xWidthAvg": 513 + }, + "thai": { + "xWidthAvg": 864 + } + } + }, + "700": { + "familyName": "Sora", + "fullName": "Sora Bold", + "postscriptName": "Sora-Bold", + "category": "sans-serif", + "capHeight": 730, + "ascent": 970, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 517, + "subsets": { + "latin": { + "xWidthAvg": 517 + }, + "thai": { + "xWidthAvg": 867 + } + } + }, + "800": { + "familyName": "Sora", + "fullName": "Sora ExtraBold", + "postscriptName": "Sora-ExtraBold", + "category": "sans-serif", + "capHeight": 730, + "ascent": 970, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 520, + "subsets": { + "latin": { + "xWidthAvg": 520 + }, + "thai": { + "xWidthAvg": 869 + } + } + }, + "regular": { + "familyName": "Sora", + "fullName": "Sora Regular", + "postscriptName": "Sora-Regular", + "category": "sans-serif", + "capHeight": 730, + "ascent": 970, + "descent": -290, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 507, + "subsets": { + "latin": { + "xWidthAvg": 507 + }, + "thai": { + "xWidthAvg": 859 + } + } + } + } + }, + "sortsMillGoudy": { + "familyName": "Sorts Mill Goudy", + "fullName": "Sorts Mill Goudy Regular", + "postscriptName": "SortsMillGoudy-Regular", + "category": "serif", + "capHeight": 713, + "ascent": 960, + "descent": -478, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 442, + "xWidthAvg": 430, + "subsets": { + "latin": { + "xWidthAvg": 430 + }, + "thai": { + "xWidthAvg": 396 + } + }, + "variants": { + "regular": { + "familyName": "Sorts Mill Goudy", + "fullName": "Sorts Mill Goudy Regular", + "postscriptName": "SortsMillGoudy-Regular", + "category": "serif", + "capHeight": 713, + "ascent": 960, + "descent": -478, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 442, + "xWidthAvg": 430, + "subsets": { + "latin": { + "xWidthAvg": 430 + }, + "thai": { + "xWidthAvg": 396 + } + } + }, + "italic": { + "familyName": "Sorts Mill Goudy", + "fullName": "Sorts Mill Goudy Italic", + "postscriptName": "SortsMillGoudy-Italic", + "category": "serif", + "capHeight": 356, + "ascent": 960, + "descent": -478, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 348, + "xWidthAvg": 392, + "subsets": { + "latin": { + "xWidthAvg": 392 + }, + "thai": { + "xWidthAvg": 494 + } + } + } + } + }, + "sourGummy": { + "familyName": "Sour Gummy", + "fullName": "Sour Gummy Regular", + "postscriptName": "SourGummy-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 996, + "descent": -296, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 620 + } + }, + "variants": { + "100": { + "familyName": "Sour Gummy", + "fullName": "Sour Gummy Thin", + "postscriptName": "SourGummy-Thin", + "category": "sans-serif", + "capHeight": 700, + "ascent": 996, + "descent": -296, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 620 + } + } + }, + "200": { + "familyName": "Sour Gummy", + "fullName": "Sour Gummy ExtraLight", + "postscriptName": "SourGummy-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 996, + "descent": -296, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 620 + } + } + }, + "300": { + "familyName": "Sour Gummy", + "fullName": "Sour Gummy Light", + "postscriptName": "SourGummy-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 996, + "descent": -296, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 620 + } + } + }, + "500": { + "familyName": "Sour Gummy", + "fullName": "Sour Gummy Medium", + "postscriptName": "SourGummy-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 996, + "descent": -296, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 620 + } + } + }, + "600": { + "familyName": "Sour Gummy", + "fullName": "Sour Gummy SemiBold", + "postscriptName": "SourGummy-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 996, + "descent": -296, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 620 + } + } + }, + "700": { + "familyName": "Sour Gummy", + "fullName": "Sour Gummy Bold", + "postscriptName": "SourGummy-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 996, + "descent": -296, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 620 + } + } + }, + "800": { + "familyName": "Sour Gummy", + "fullName": "Sour Gummy ExtraBold", + "postscriptName": "SourGummy-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 996, + "descent": -296, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 620 + } + } + }, + "900": { + "familyName": "Sour Gummy", + "fullName": "Sour Gummy Black", + "postscriptName": "SourGummy-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 996, + "descent": -296, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 620 + } + } + }, + "regular": { + "familyName": "Sour Gummy", + "fullName": "Sour Gummy Regular", + "postscriptName": "SourGummy-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 996, + "descent": -296, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 620 + } + } + }, + "italic": { + "familyName": "Sour Gummy", + "fullName": "Sour Gummy Italic", + "postscriptName": "SourGummy-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 996, + "descent": -296, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 679 + } + } + }, + "900italic": { + "familyName": "Sour Gummy", + "fullName": "Sour Gummy Black Italic", + "postscriptName": "SourGummy-BlackItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 996, + "descent": -296, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 680 + } + } + }, + "800italic": { + "familyName": "Sour Gummy", + "fullName": "Sour Gummy ExtraBold Italic", + "postscriptName": "SourGummy-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 996, + "descent": -296, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 680 + } + } + }, + "700italic": { + "familyName": "Sour Gummy", + "fullName": "Sour Gummy Bold Italic", + "postscriptName": "SourGummy-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 996, + "descent": -296, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 680 + } + } + }, + "600italic": { + "familyName": "Sour Gummy", + "fullName": "Sour Gummy SemiBold Italic", + "postscriptName": "SourGummy-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 996, + "descent": -296, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 680 + } + } + }, + "500italic": { + "familyName": "Sour Gummy", + "fullName": "Sour Gummy Medium Italic", + "postscriptName": "SourGummy-MediumItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 996, + "descent": -296, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 680 + } + } + }, + "300italic": { + "familyName": "Sour Gummy", + "fullName": "Sour Gummy Light Italic", + "postscriptName": "SourGummy-LightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 996, + "descent": -296, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 679 + } + } + }, + "200italic": { + "familyName": "Sour Gummy", + "fullName": "Sour Gummy ExtraLight Italic", + "postscriptName": "SourGummy-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 996, + "descent": -296, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 679 + } + } + }, + "100italic": { + "familyName": "Sour Gummy", + "fullName": "Sour Gummy Thin Italic", + "postscriptName": "SourGummy-ThinItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 996, + "descent": -296, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 679 + } + } + } + } + }, + "sourceCodePro": { + "familyName": "Source Code Pro", + "fullName": "Source Code Pro Regular", + "postscriptName": "SourceCodePro-Regular", + "category": "monospace", + "capHeight": 660, + "ascent": 984, + "descent": -273, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "200": { + "familyName": "Source Code Pro", + "fullName": "Source Code Pro ExtraLight", + "postscriptName": "SourceCodePro-ExtraLight", + "category": "monospace", + "capHeight": 660, + "ascent": 984, + "descent": -273, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Source Code Pro", + "fullName": "Source Code Pro Light", + "postscriptName": "SourceCodePro-Light", + "category": "monospace", + "capHeight": 660, + "ascent": 984, + "descent": -273, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Source Code Pro", + "fullName": "Source Code Pro Medium", + "postscriptName": "SourceCodePro-Medium", + "category": "monospace", + "capHeight": 660, + "ascent": 984, + "descent": -273, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Source Code Pro", + "fullName": "Source Code Pro SemiBold", + "postscriptName": "SourceCodePro-SemiBold", + "category": "monospace", + "capHeight": 660, + "ascent": 984, + "descent": -273, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Source Code Pro", + "fullName": "Source Code Pro Bold", + "postscriptName": "SourceCodePro-Bold", + "category": "monospace", + "capHeight": 660, + "ascent": 984, + "descent": -273, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Source Code Pro", + "fullName": "Source Code Pro ExtraBold", + "postscriptName": "SourceCodePro-ExtraBold", + "category": "monospace", + "capHeight": 660, + "ascent": 984, + "descent": -273, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900": { + "familyName": "Source Code Pro", + "fullName": "Source Code Pro Black", + "postscriptName": "SourceCodePro-Black", + "category": "monospace", + "capHeight": 660, + "ascent": 984, + "descent": -273, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Source Code Pro", + "fullName": "Source Code Pro Regular", + "postscriptName": "SourceCodePro-Regular", + "category": "monospace", + "capHeight": 660, + "ascent": 984, + "descent": -273, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "italic": { + "familyName": "Source Code Pro", + "fullName": "Source Code Pro Italic", + "postscriptName": "SourceCodePro-Italic", + "category": "monospace", + "capHeight": 660, + "ascent": 984, + "descent": -273, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "900italic": { + "familyName": "Source Code Pro", + "fullName": "Source Code Pro Black Italic", + "postscriptName": "SourceCodePro-BlackItalic", + "category": "monospace", + "capHeight": 660, + "ascent": 984, + "descent": -273, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800italic": { + "familyName": "Source Code Pro", + "fullName": "Source Code Pro ExtraBold Italic", + "postscriptName": "SourceCodePro-ExtraBoldItalic", + "category": "monospace", + "capHeight": 660, + "ascent": 984, + "descent": -273, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700italic": { + "familyName": "Source Code Pro", + "fullName": "Source Code Pro Bold Italic", + "postscriptName": "SourceCodePro-BoldItalic", + "category": "monospace", + "capHeight": 660, + "ascent": 984, + "descent": -273, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600italic": { + "familyName": "Source Code Pro", + "fullName": "Source Code Pro SemiBold Italic", + "postscriptName": "SourceCodePro-SemiBoldItalic", + "category": "monospace", + "capHeight": 660, + "ascent": 984, + "descent": -273, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500italic": { + "familyName": "Source Code Pro", + "fullName": "Source Code Pro Medium Italic", + "postscriptName": "SourceCodePro-MediumItalic", + "category": "monospace", + "capHeight": 660, + "ascent": 984, + "descent": -273, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300italic": { + "familyName": "Source Code Pro", + "fullName": "Source Code Pro Light Italic", + "postscriptName": "SourceCodePro-LightItalic", + "category": "monospace", + "capHeight": 660, + "ascent": 984, + "descent": -273, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200italic": { + "familyName": "Source Code Pro", + "fullName": "Source Code Pro ExtraLight Italic", + "postscriptName": "SourceCodePro-ExtraLightItalic", + "category": "monospace", + "capHeight": 660, + "ascent": 984, + "descent": -273, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "sourceSans3": { + "familyName": "Source Sans 3", + "fullName": "Source Sans 3 Regular", + "postscriptName": "SourceSans3-Regular", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1024, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 418, + "subsets": { + "latin": { + "xWidthAvg": 418 + }, + "thai": { + "xWidthAvg": 653 + } + }, + "variants": { + "200": { + "familyName": "Source Sans 3", + "fullName": "Source Sans 3 ExtraLight", + "postscriptName": "SourceSans3-ExtraLight", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1024, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 398, + "subsets": { + "latin": { + "xWidthAvg": 398 + }, + "thai": { + "xWidthAvg": 624 + } + } + }, + "300": { + "familyName": "Source Sans 3", + "fullName": "Source Sans 3 Light", + "postscriptName": "SourceSans3-Light", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1024, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 403, + "subsets": { + "latin": { + "xWidthAvg": 403 + }, + "thai": { + "xWidthAvg": 632 + } + } + }, + "500": { + "familyName": "Source Sans 3", + "fullName": "Source Sans 3 Medium", + "postscriptName": "SourceSans3-Medium", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1024, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 489, + "xWidthAvg": 424, + "subsets": { + "latin": { + "xWidthAvg": 424 + }, + "thai": { + "xWidthAvg": 663 + } + } + }, + "600": { + "familyName": "Source Sans 3", + "fullName": "Source Sans 3 SemiBold", + "postscriptName": "SourceSans3-SemiBold", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1024, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 491, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 672 + } + } + }, + "700": { + "familyName": "Source Sans 3", + "fullName": "Source Sans 3 Bold", + "postscriptName": "SourceSans3-Bold", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1024, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 690 + } + } + }, + "800": { + "familyName": "Source Sans 3", + "fullName": "Source Sans 3 ExtraBold", + "postscriptName": "SourceSans3-ExtraBold", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1024, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 697 + } + } + }, + "900": { + "familyName": "Source Sans 3", + "fullName": "Source Sans 3 Black", + "postscriptName": "SourceSans3-Black", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1024, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 704 + } + } + }, + "regular": { + "familyName": "Source Sans 3", + "fullName": "Source Sans 3 Regular", + "postscriptName": "SourceSans3-Regular", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1024, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 418, + "subsets": { + "latin": { + "xWidthAvg": 418 + }, + "thai": { + "xWidthAvg": 653 + } + } + }, + "italic": { + "familyName": "Source Sans 3", + "fullName": "Source Sans 3 Italic", + "postscriptName": "SourceSans3-Italic", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1024, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 408, + "subsets": { + "latin": { + "xWidthAvg": 408 + }, + "thai": { + "xWidthAvg": 628 + } + } + }, + "900italic": { + "familyName": "Source Sans 3", + "fullName": "Source Sans 3 Black Italic", + "postscriptName": "SourceSans3-BlackItalic", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1024, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 676 + } + } + }, + "800italic": { + "familyName": "Source Sans 3", + "fullName": "Source Sans 3 ExtraBold Italic", + "postscriptName": "SourceSans3-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1024, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 669 + } + } + }, + "700italic": { + "familyName": "Source Sans 3", + "fullName": "Source Sans 3 Bold Italic", + "postscriptName": "SourceSans3-BoldItalic", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1024, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 430, + "subsets": { + "latin": { + "xWidthAvg": 430 + }, + "thai": { + "xWidthAvg": 663 + } + } + }, + "600italic": { + "familyName": "Source Sans 3", + "fullName": "Source Sans 3 SemiBold Italic", + "postscriptName": "SourceSans3-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1024, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 491, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 646 + } + } + }, + "500italic": { + "familyName": "Source Sans 3", + "fullName": "Source Sans 3 Medium Italic", + "postscriptName": "SourceSans3-MediumItalic", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1024, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 489, + "xWidthAvg": 413, + "subsets": { + "latin": { + "xWidthAvg": 413 + }, + "thai": { + "xWidthAvg": 637 + } + } + }, + "300italic": { + "familyName": "Source Sans 3", + "fullName": "Source Sans 3 Light Italic", + "postscriptName": "SourceSans3-LightItalic", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1024, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 394, + "subsets": { + "latin": { + "xWidthAvg": 394 + }, + "thai": { + "xWidthAvg": 608 + } + } + }, + "200italic": { + "familyName": "Source Sans 3", + "fullName": "Source Sans 3 ExtraLight Italic", + "postscriptName": "SourceSans3-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 660, + "ascent": 1024, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 390, + "subsets": { + "latin": { + "xWidthAvg": 390 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "sourceSerif4": { + "familyName": "Source Serif 4", + "fullName": "Source Serif 4 Regular", + "postscriptName": "SourceSerif4-Regular", + "category": "serif", + "capHeight": 670, + "ascent": 1036, + "descent": -335, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 640 + } + }, + "variants": { + "200": { + "familyName": "Source Serif 4", + "fullName": "Source Serif 4 ExtraLight", + "postscriptName": "SourceSerif4-ExtraLight", + "category": "serif", + "capHeight": 670, + "ascent": 1036, + "descent": -335, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "300": { + "familyName": "Source Serif 4", + "fullName": "Source Serif 4 Light", + "postscriptName": "SourceSerif4-Light", + "category": "serif", + "capHeight": 670, + "ascent": 1036, + "descent": -335, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 476, + "subsets": { + "latin": { + "xWidthAvg": 476 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "500": { + "familyName": "Source Serif 4", + "fullName": "Source Serif 4 Medium", + "postscriptName": "SourceSerif4-Medium", + "category": "serif", + "capHeight": 670, + "ascent": 1036, + "descent": -335, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "600": { + "familyName": "Source Serif 4", + "fullName": "Source Serif 4 SemiBold", + "postscriptName": "SourceSerif4-SemiBold", + "category": "serif", + "capHeight": 670, + "ascent": 1036, + "descent": -335, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "700": { + "familyName": "Source Serif 4", + "fullName": "Source Serif 4 Bold", + "postscriptName": "SourceSerif4-Bold", + "category": "serif", + "capHeight": 670, + "ascent": 1036, + "descent": -335, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "800": { + "familyName": "Source Serif 4", + "fullName": "Source Serif 4 ExtraBold", + "postscriptName": "SourceSerif4-ExtraBold", + "category": "serif", + "capHeight": 670, + "ascent": 1036, + "descent": -335, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 497, + "subsets": { + "latin": { + "xWidthAvg": 497 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "900": { + "familyName": "Source Serif 4", + "fullName": "Source Serif 4 Black", + "postscriptName": "SourceSerif4-Black", + "category": "serif", + "capHeight": 670, + "ascent": 1036, + "descent": -335, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 501, + "subsets": { + "latin": { + "xWidthAvg": 501 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "regular": { + "familyName": "Source Serif 4", + "fullName": "Source Serif 4 Regular", + "postscriptName": "SourceSerif4-Regular", + "category": "serif", + "capHeight": 670, + "ascent": 1036, + "descent": -335, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "italic": { + "familyName": "Source Serif 4", + "fullName": "Source Serif 4 Italic", + "postscriptName": "SourceSerif4-Italic", + "category": "serif", + "capHeight": 670, + "ascent": 1036, + "descent": -335, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "900italic": { + "familyName": "Source Serif 4", + "fullName": "Source Serif 4 Black Italic", + "postscriptName": "SourceSerif4-BlackItalic", + "category": "serif", + "capHeight": 670, + "ascent": 1036, + "descent": -335, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "800italic": { + "familyName": "Source Serif 4", + "fullName": "Source Serif 4 ExtraBold Italic", + "postscriptName": "SourceSerif4-ExtraBoldItalic", + "category": "serif", + "capHeight": 670, + "ascent": 1036, + "descent": -335, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "700italic": { + "familyName": "Source Serif 4", + "fullName": "Source Serif 4 Bold Italic", + "postscriptName": "SourceSerif4-BoldItalic", + "category": "serif", + "capHeight": 670, + "ascent": 1036, + "descent": -335, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "600italic": { + "familyName": "Source Serif 4", + "fullName": "Source Serif 4 SemiBold Italic", + "postscriptName": "SourceSerif4-SemiBoldItalic", + "category": "serif", + "capHeight": 670, + "ascent": 1036, + "descent": -335, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "500italic": { + "familyName": "Source Serif 4", + "fullName": "Source Serif 4 Medium Italic", + "postscriptName": "SourceSerif4-MediumItalic", + "category": "serif", + "capHeight": 670, + "ascent": 1036, + "descent": -335, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "300italic": { + "familyName": "Source Serif 4", + "fullName": "Source Serif 4 Light Italic", + "postscriptName": "SourceSerif4-LightItalic", + "category": "serif", + "capHeight": 670, + "ascent": 1036, + "descent": -335, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 430, + "subsets": { + "latin": { + "xWidthAvg": 430 + }, + "thai": { + "xWidthAvg": 640 + } + } + }, + "200italic": { + "familyName": "Source Serif 4", + "fullName": "Source Serif 4 ExtraLight Italic", + "postscriptName": "SourceSerif4-ExtraLightItalic", + "category": "serif", + "capHeight": 670, + "ascent": 1036, + "descent": -335, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 423, + "subsets": { + "latin": { + "xWidthAvg": 423 + }, + "thai": { + "xWidthAvg": 640 + } + } + } + } + }, + "spaceGrotesk": { + "familyName": "Space Grotesk", + "fullName": "Space Grotesk Regular", + "postscriptName": "SpaceGrotesk-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 984, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 867 + } + }, + "variants": { + "300": { + "familyName": "Space Grotesk", + "fullName": "Space Grotesk Light", + "postscriptName": "SpaceGrotesk-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 984, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 849 + } + } + }, + "500": { + "familyName": "Space Grotesk", + "fullName": "Space Grotesk Medium", + "postscriptName": "SpaceGrotesk-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 984, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 889 + } + } + }, + "600": { + "familyName": "Space Grotesk", + "fullName": "Space Grotesk SemiBold", + "postscriptName": "SpaceGrotesk-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 984, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 899 + } + } + }, + "700": { + "familyName": "Space Grotesk", + "fullName": "Space Grotesk Bold", + "postscriptName": "SpaceGrotesk-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 984, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 910 + } + } + }, + "regular": { + "familyName": "Space Grotesk", + "fullName": "Space Grotesk Regular", + "postscriptName": "SpaceGrotesk-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 984, + "descent": -292, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 867 + } + } + } + } + }, + "spaceMono": { + "familyName": "Space Mono", + "fullName": "Space Mono Regular", + "postscriptName": "SpaceMono-Regular", + "category": "monospace", + "capHeight": 700, + "ascent": 1120, + "descent": -361, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 612, + "subsets": { + "latin": { + "xWidthAvg": 612 + }, + "thai": { + "xWidthAvg": 612 + } + }, + "variants": { + "700": { + "familyName": "Space Mono", + "fullName": "Space Mono Bold", + "postscriptName": "SpaceMono-Bold", + "category": "monospace", + "capHeight": 700, + "ascent": 1120, + "descent": -361, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 612, + "subsets": { + "latin": { + "xWidthAvg": 612 + }, + "thai": { + "xWidthAvg": 612 + } + } + }, + "regular": { + "familyName": "Space Mono", + "fullName": "Space Mono Regular", + "postscriptName": "SpaceMono-Regular", + "category": "monospace", + "capHeight": 700, + "ascent": 1120, + "descent": -361, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 612, + "subsets": { + "latin": { + "xWidthAvg": 612 + }, + "thai": { + "xWidthAvg": 612 + } + } + }, + "italic": { + "familyName": "Space Mono", + "fullName": "Space Mono Italic", + "postscriptName": "SpaceMono-Italic", + "category": "monospace", + "capHeight": 700, + "ascent": 1120, + "descent": -361, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 612, + "subsets": { + "latin": { + "xWidthAvg": 612 + }, + "thai": { + "xWidthAvg": 612 + } + } + }, + "700italic": { + "familyName": "Space Mono", + "fullName": "Space Mono Bold Italic", + "postscriptName": "SpaceMono-BoldItalic", + "category": "monospace", + "capHeight": 700, + "ascent": 1120, + "descent": -361, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 612, + "subsets": { + "latin": { + "xWidthAvg": 612 + }, + "thai": { + "xWidthAvg": 612 + } + } + } + } + }, + "specialElite": { + "familyName": "Special Elite", + "fullName": "Special Elite Regular", + "postscriptName": "SpecialElite-Regular", + "category": "display", + "capHeight": 713, + "ascent": 1440, + "descent": -608, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 528, + "xWidthAvg": 1070, + "subsets": { + "latin": { + "xWidthAvg": 1070 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Special Elite", + "fullName": "Special Elite Regular", + "postscriptName": "SpecialElite-Regular", + "category": "display", + "capHeight": 713, + "ascent": 1440, + "descent": -608, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 528, + "xWidthAvg": 1070, + "subsets": { + "latin": { + "xWidthAvg": 1070 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "spectral": { + "familyName": "Spectral", + "fullName": "Spectral Regular", + "postscriptName": "Spectral-Regular", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "200": { + "familyName": "Spectral", + "fullName": "Spectral ExtraLight", + "postscriptName": "Spectral-ExtraLight", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Spectral", + "fullName": "Spectral Light", + "postscriptName": "Spectral-Light", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Spectral", + "fullName": "Spectral Medium", + "postscriptName": "Spectral-Medium", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 451, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Spectral", + "fullName": "Spectral SemiBold", + "postscriptName": "Spectral-SemiBold", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 454, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Spectral", + "fullName": "Spectral Bold", + "postscriptName": "Spectral-Bold", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 456, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Spectral", + "fullName": "Spectral ExtraBold", + "postscriptName": "Spectral-ExtraBold", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 476, + "subsets": { + "latin": { + "xWidthAvg": 476 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Spectral", + "fullName": "Spectral Regular", + "postscriptName": "Spectral-Regular", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Spectral", + "fullName": "Spectral Italic", + "postscriptName": "Spectral-Italic", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 410, + "subsets": { + "latin": { + "xWidthAvg": 410 + }, + "thai": { + "xWidthAvg": 475 + } + } + }, + "800italic": { + "familyName": "Spectral", + "fullName": "Spectral ExtraBold Italic", + "postscriptName": "Spectral-ExtraBoldItalic", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700italic": { + "familyName": "Spectral", + "fullName": "Spectral Bold Italic", + "postscriptName": "Spectral-BoldItalic", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 456, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 490 + } + } + }, + "600italic": { + "familyName": "Spectral", + "fullName": "Spectral SemiBold Italic", + "postscriptName": "Spectral-SemiBoldItalic", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 454, + "xWidthAvg": 424, + "subsets": { + "latin": { + "xWidthAvg": 424 + }, + "thai": { + "xWidthAvg": 486 + } + } + }, + "500italic": { + "familyName": "Spectral", + "fullName": "Spectral Medium Italic", + "postscriptName": "Spectral-MediumItalic", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 452, + "xWidthAvg": 416, + "subsets": { + "latin": { + "xWidthAvg": 416 + }, + "thai": { + "xWidthAvg": 479 + } + } + }, + "300italic": { + "familyName": "Spectral", + "fullName": "Spectral Light Italic", + "postscriptName": "Spectral-LightItalic", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 489 + } + } + }, + "200italic": { + "familyName": "Spectral", + "fullName": "Spectral ExtraLight Italic", + "postscriptName": "Spectral-ExtraLightItalic", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 394, + "subsets": { + "latin": { + "xWidthAvg": 394 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "spectralSC": { + "familyName": "Spectral SC", + "fullName": "Spectral SC Regular", + "postscriptName": "SpectralSC-Regular", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "200": { + "familyName": "Spectral SC", + "fullName": "Spectral SC ExtraLight", + "postscriptName": "SpectralSC-ExtraLight", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Spectral SC", + "fullName": "Spectral SC Light", + "postscriptName": "SpectralSC-Light", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Spectral SC", + "fullName": "Spectral SC Medium", + "postscriptName": "SpectralSC-Medium", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 451, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Spectral SC", + "fullName": "Spectral SC SemiBold", + "postscriptName": "SpectralSC-SemiBold", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 454, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Spectral SC", + "fullName": "Spectral SC Bold", + "postscriptName": "SpectralSC-Bold", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 456, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Spectral SC", + "fullName": "Spectral SC ExtraBold", + "postscriptName": "SpectralSC-ExtraBold", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 476, + "subsets": { + "latin": { + "xWidthAvg": 476 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Spectral SC", + "fullName": "Spectral SC Regular", + "postscriptName": "SpectralSC-Regular", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Spectral SC", + "fullName": "Spectral SC Italic", + "postscriptName": "SpectralSC-Italic", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 410, + "subsets": { + "latin": { + "xWidthAvg": 410 + }, + "thai": { + "xWidthAvg": 475 + } + } + }, + "800italic": { + "familyName": "Spectral SC", + "fullName": "Spectral SC ExtraBold Italic", + "postscriptName": "SpectralSC-ExtraBoldItalic", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700italic": { + "familyName": "Spectral SC", + "fullName": "Spectral SC Bold Italic", + "postscriptName": "SpectralSC-BoldItalic", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 456, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 490 + } + } + }, + "600italic": { + "familyName": "Spectral SC", + "fullName": "Spectral SC SemiBold Italic", + "postscriptName": "SpectralSC-SemiBoldItalic", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 454, + "xWidthAvg": 424, + "subsets": { + "latin": { + "xWidthAvg": 424 + }, + "thai": { + "xWidthAvg": 486 + } + } + }, + "500italic": { + "familyName": "Spectral SC", + "fullName": "Spectral SC Medium Italic", + "postscriptName": "SpectralSC-MediumItalic", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 452, + "xWidthAvg": 416, + "subsets": { + "latin": { + "xWidthAvg": 416 + }, + "thai": { + "xWidthAvg": 479 + } + } + }, + "300italic": { + "familyName": "Spectral SC", + "fullName": "Spectral SC Light Italic", + "postscriptName": "SpectralSC-LightItalic", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 489 + } + } + }, + "200italic": { + "familyName": "Spectral SC", + "fullName": "Spectral SC ExtraLight Italic", + "postscriptName": "SpectralSC-ExtraLightItalic", + "category": "serif", + "capHeight": 660, + "ascent": 1059, + "descent": -463, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 450, + "xWidthAvg": 394, + "subsets": { + "latin": { + "xWidthAvg": 394 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "spicyRice": { + "familyName": "Spicy Rice", + "fullName": "Spicy Rice", + "postscriptName": "SpicyRice-Regular", + "category": "display", + "capHeight": 1481, + "ascent": 2091, + "descent": -733, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1208, + "xWidthAvg": 868, + "subsets": { + "latin": { + "xWidthAvg": 868 + }, + "thai": { + "xWidthAvg": 305 + } + }, + "variants": { + "regular": { + "familyName": "Spicy Rice", + "fullName": "Spicy Rice", + "postscriptName": "SpicyRice-Regular", + "category": "display", + "capHeight": 1481, + "ascent": 2091, + "descent": -733, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1208, + "xWidthAvg": 868, + "subsets": { + "latin": { + "xWidthAvg": 868 + }, + "thai": { + "xWidthAvg": 305 + } + } + } + } + }, + "spinnaker": { + "familyName": "Spinnaker", + "fullName": "Spinnaker", + "postscriptName": "Spinnaker-Regular", + "category": "sans-serif", + "capHeight": 1416, + "ascent": 1920, + "descent": -487, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1000, + "xWidthAvg": 998, + "subsets": { + "latin": { + "xWidthAvg": 998 + }, + "thai": { + "xWidthAvg": 1307 + } + }, + "variants": { + "regular": { + "familyName": "Spinnaker", + "fullName": "Spinnaker", + "postscriptName": "Spinnaker-Regular", + "category": "sans-serif", + "capHeight": 1416, + "ascent": 1920, + "descent": -487, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1000, + "xWidthAvg": 998, + "subsets": { + "latin": { + "xWidthAvg": 998 + }, + "thai": { + "xWidthAvg": 1307 + } + } + } + } + }, + "spirax": { + "familyName": "Spirax", + "fullName": "Spirax-Regular", + "postscriptName": "Spirax-Regular", + "category": "display", + "capHeight": 696, + "ascent": 947, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 463, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 204 + } + }, + "variants": { + "regular": { + "familyName": "Spirax", + "fullName": "Spirax-Regular", + "postscriptName": "Spirax-Regular", + "category": "display", + "capHeight": 696, + "ascent": 947, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 463, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 204 + } + } + } + } + }, + "splash": { + "familyName": "Splash", + "fullName": "Splash Regular", + "postscriptName": "Splash-Regular", + "category": "handwriting", + "capHeight": 700, + "ascent": 1050, + "descent": -580, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 400, + "subsets": { + "latin": { + "xWidthAvg": 400 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Splash", + "fullName": "Splash Regular", + "postscriptName": "Splash-Regular", + "category": "handwriting", + "capHeight": 700, + "ascent": 1050, + "descent": -580, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 400, + "subsets": { + "latin": { + "xWidthAvg": 400 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "splineSans": { + "familyName": "Spline Sans", + "fullName": "Spline Sans Regular", + "postscriptName": "SplineSans-Regular", + "category": "sans-serif", + "capHeight": 1454, + "ascent": 1927, + "descent": -473, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1091, + "xWidthAvg": 904, + "subsets": { + "latin": { + "xWidthAvg": 904 + }, + "thai": { + "xWidthAvg": 1643 + } + }, + "variants": { + "300": { + "familyName": "Spline Sans", + "fullName": "Spline Sans Light", + "postscriptName": "SplineSans-Light", + "category": "sans-serif", + "capHeight": 1454, + "ascent": 1927, + "descent": -473, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1091, + "xWidthAvg": 882, + "subsets": { + "latin": { + "xWidthAvg": 882 + }, + "thai": { + "xWidthAvg": 1643 + } + } + }, + "500": { + "familyName": "Spline Sans", + "fullName": "Spline Sans Medium", + "postscriptName": "SplineSans-Medium", + "category": "sans-serif", + "capHeight": 1454, + "ascent": 1927, + "descent": -473, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1091, + "xWidthAvg": 916, + "subsets": { + "latin": { + "xWidthAvg": 916 + }, + "thai": { + "xWidthAvg": 1643 + } + } + }, + "600": { + "familyName": "Spline Sans", + "fullName": "Spline Sans SemiBold", + "postscriptName": "SplineSans-SemiBold", + "category": "sans-serif", + "capHeight": 1454, + "ascent": 1927, + "descent": -473, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1091, + "xWidthAvg": 926, + "subsets": { + "latin": { + "xWidthAvg": 926 + }, + "thai": { + "xWidthAvg": 1643 + } + } + }, + "700": { + "familyName": "Spline Sans", + "fullName": "Spline Sans Bold", + "postscriptName": "SplineSans-Bold", + "category": "sans-serif", + "capHeight": 1454, + "ascent": 1927, + "descent": -473, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1091, + "xWidthAvg": 935, + "subsets": { + "latin": { + "xWidthAvg": 935 + }, + "thai": { + "xWidthAvg": 1643 + } + } + }, + "regular": { + "familyName": "Spline Sans", + "fullName": "Spline Sans Regular", + "postscriptName": "SplineSans-Regular", + "category": "sans-serif", + "capHeight": 1454, + "ascent": 1927, + "descent": -473, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1091, + "xWidthAvg": 904, + "subsets": { + "latin": { + "xWidthAvg": 904 + }, + "thai": { + "xWidthAvg": 1643 + } + } + } + } + }, + "splineSansMono": { + "familyName": "Spline Sans Mono", + "fullName": "Spline Sans Mono Regular", + "postscriptName": "SplineSansMono-Regular", + "category": "monospace", + "capHeight": 1454, + "ascent": 1927, + "descent": -473, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1091, + "xWidthAvg": 1200, + "subsets": { + "latin": { + "xWidthAvg": 1200 + }, + "thai": { + "xWidthAvg": 1200 + } + }, + "variants": { + "300": { + "familyName": "Spline Sans Mono", + "fullName": "Spline Sans Mono Light", + "postscriptName": "SplineSansMono-Light", + "category": "monospace", + "capHeight": 1454, + "ascent": 1927, + "descent": -473, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1091, + "xWidthAvg": 1200, + "subsets": { + "latin": { + "xWidthAvg": 1200 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "500": { + "familyName": "Spline Sans Mono", + "fullName": "Spline Sans Mono Medium", + "postscriptName": "SplineSansMono-Medium", + "category": "monospace", + "capHeight": 1454, + "ascent": 1927, + "descent": -473, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1091, + "xWidthAvg": 1200, + "subsets": { + "latin": { + "xWidthAvg": 1200 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "600": { + "familyName": "Spline Sans Mono", + "fullName": "Spline Sans Mono SemiBold", + "postscriptName": "SplineSansMono-SemiBold", + "category": "monospace", + "capHeight": 1454, + "ascent": 1927, + "descent": -473, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1091, + "xWidthAvg": 1200, + "subsets": { + "latin": { + "xWidthAvg": 1200 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "700": { + "familyName": "Spline Sans Mono", + "fullName": "Spline Sans Mono Bold", + "postscriptName": "SplineSansMono-Bold", + "category": "monospace", + "capHeight": 1454, + "ascent": 1927, + "descent": -473, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1091, + "xWidthAvg": 1200, + "subsets": { + "latin": { + "xWidthAvg": 1200 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "regular": { + "familyName": "Spline Sans Mono", + "fullName": "Spline Sans Mono Regular", + "postscriptName": "SplineSansMono-Regular", + "category": "monospace", + "capHeight": 1454, + "ascent": 1927, + "descent": -473, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1091, + "xWidthAvg": 1200, + "subsets": { + "latin": { + "xWidthAvg": 1200 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "italic": { + "familyName": "Spline Sans Mono", + "fullName": "Spline Sans Mono Italic", + "postscriptName": "SplineSansMono-Italic", + "category": "monospace", + "capHeight": 1454, + "ascent": 1927, + "descent": -473, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1091, + "xWidthAvg": 1200, + "subsets": { + "latin": { + "xWidthAvg": 1200 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "700italic": { + "familyName": "Spline Sans Mono", + "fullName": "Spline Sans Mono Bold Italic", + "postscriptName": "SplineSansMono-BoldItalic", + "category": "monospace", + "capHeight": 1454, + "ascent": 1927, + "descent": -473, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1091, + "xWidthAvg": 1200, + "subsets": { + "latin": { + "xWidthAvg": 1200 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "600italic": { + "familyName": "Spline Sans Mono", + "fullName": "Spline Sans Mono SemiBold Italic", + "postscriptName": "SplineSansMono-SemiBoldItalic", + "category": "monospace", + "capHeight": 1454, + "ascent": 1927, + "descent": -473, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1091, + "xWidthAvg": 1200, + "subsets": { + "latin": { + "xWidthAvg": 1200 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "500italic": { + "familyName": "Spline Sans Mono", + "fullName": "Spline Sans Mono Medium Italic", + "postscriptName": "SplineSansMono-MediumItalic", + "category": "monospace", + "capHeight": 1454, + "ascent": 1927, + "descent": -473, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1091, + "xWidthAvg": 1200, + "subsets": { + "latin": { + "xWidthAvg": 1200 + }, + "thai": { + "xWidthAvg": 1200 + } + } + }, + "300italic": { + "familyName": "Spline Sans Mono", + "fullName": "Spline Sans Mono Light Italic", + "postscriptName": "SplineSansMono-LightItalic", + "category": "monospace", + "capHeight": 1454, + "ascent": 1927, + "descent": -473, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1091, + "xWidthAvg": 1200, + "subsets": { + "latin": { + "xWidthAvg": 1200 + }, + "thai": { + "xWidthAvg": 1200 + } + } + } + } + }, + "squadaOne": { + "familyName": "Squada One", + "fullName": "Squada One", + "postscriptName": "SquadaOne-Regular", + "category": "display", + "capHeight": 647, + "ascent": 861, + "descent": -196, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 369, + "subsets": { + "latin": { + "xWidthAvg": 369 + }, + "thai": { + "xWidthAvg": 194 + } + }, + "variants": { + "regular": { + "familyName": "Squada One", + "fullName": "Squada One", + "postscriptName": "SquadaOne-Regular", + "category": "display", + "capHeight": 647, + "ascent": 861, + "descent": -196, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 369, + "subsets": { + "latin": { + "xWidthAvg": 369 + }, + "thai": { + "xWidthAvg": 194 + } + } + } + } + }, + "squarePeg": { + "familyName": "Square Peg", + "fullName": "Square Peg Regular", + "postscriptName": "SquarePeg-Regular", + "category": "handwriting", + "capHeight": 600, + "ascent": 920, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 260, + "xWidthAvg": 257, + "subsets": { + "latin": { + "xWidthAvg": 257 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Square Peg", + "fullName": "Square Peg Regular", + "postscriptName": "SquarePeg-Regular", + "category": "handwriting", + "capHeight": 600, + "ascent": 920, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 260, + "xWidthAvg": 257, + "subsets": { + "latin": { + "xWidthAvg": 257 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "sreeKrushnadevaraya": { + "familyName": "Sree Krushnadevaraya", + "fullName": "Sree Krushnadevaraya", + "postscriptName": "SreeKrushnadevaraya", + "category": "serif", + "capHeight": 408, + "ascent": 1105, + "descent": -378, + "lineGap": 0, + "unitsPerEm": 720, + "xHeight": 273, + "xWidthAvg": 286, + "subsets": { + "latin": { + "xWidthAvg": 286 + }, + "thai": { + "xWidthAvg": 880 + } + }, + "variants": { + "regular": { + "familyName": "Sree Krushnadevaraya", + "fullName": "Sree Krushnadevaraya", + "postscriptName": "SreeKrushnadevaraya", + "category": "serif", + "capHeight": 408, + "ascent": 1105, + "descent": -378, + "lineGap": 0, + "unitsPerEm": 720, + "xHeight": 273, + "xWidthAvg": 286, + "subsets": { + "latin": { + "xWidthAvg": 286 + }, + "thai": { + "xWidthAvg": 880 + } + } + } + } + }, + "sriracha": { + "familyName": "Sriracha", + "fullName": "Sriracha", + "postscriptName": "Sriracha-Regular", + "category": "handwriting", + "capHeight": 656, + "ascent": 1220, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 549 + } + }, + "variants": { + "regular": { + "familyName": "Sriracha", + "fullName": "Sriracha", + "postscriptName": "Sriracha-Regular", + "category": "handwriting", + "capHeight": 656, + "ascent": 1220, + "descent": -550, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 549 + } + } + } + } + }, + "srisakdi": { + "familyName": "Srisakdi", + "fullName": "Srisakdi Regular", + "postscriptName": "Srisakdi-Regular", + "category": "display", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 447 + } + }, + "variants": { + "700": { + "familyName": "Srisakdi", + "fullName": "Srisakdi Bold", + "postscriptName": "Srisakdi-Bold", + "category": "display", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 464 + } + } + }, + "regular": { + "familyName": "Srisakdi", + "fullName": "Srisakdi Regular", + "postscriptName": "Srisakdi-Regular", + "category": "display", + "capHeight": 700, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 447 + } + } + } + } + }, + "staatliches": { + "familyName": "Staatliches", + "fullName": "Staatliches Regular", + "postscriptName": "Staatliches-Regular", + "category": "display", + "capHeight": 696, + "ascent": 950, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 380, + "subsets": { + "latin": { + "xWidthAvg": 380 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Staatliches", + "fullName": "Staatliches Regular", + "postscriptName": "Staatliches-Regular", + "category": "display", + "capHeight": 696, + "ascent": 950, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 380, + "subsets": { + "latin": { + "xWidthAvg": 380 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "stalemate": { + "familyName": "Stalemate", + "fullName": "Stalemate", + "postscriptName": "Stalemate-Regular", + "category": "handwriting", + "capHeight": 1501, + "ascent": 1837, + "descent": -1165, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 539, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "Stalemate", + "fullName": "Stalemate", + "postscriptName": "Stalemate-Regular", + "category": "handwriting", + "capHeight": 1501, + "ascent": 1837, + "descent": -1165, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 539, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "stalinistOne": { + "familyName": "Stalinist One", + "fullName": "Stalinist One", + "postscriptName": "StalinistOne-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1037, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 888, + "subsets": { + "latin": { + "xWidthAvg": 888 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Stalinist One", + "fullName": "Stalinist One", + "postscriptName": "StalinistOne-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1037, + "descent": -439, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 530, + "xWidthAvg": 888, + "subsets": { + "latin": { + "xWidthAvg": 888 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "stardosStencil": { + "familyName": "Stardos Stencil", + "fullName": "Stardos Stencil Regular", + "postscriptName": "StardosStencil-Regular", + "category": "display", + "capHeight": 1421, + "ascent": 1994, + "descent": -831, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 981, + "xWidthAvg": 908, + "subsets": { + "latin": { + "xWidthAvg": 908 + }, + "thai": { + "xWidthAvg": 528 + } + }, + "variants": { + "700": { + "familyName": "Stardos Stencil", + "fullName": "Stardos Stencil Bold", + "postscriptName": "StardosStencil-Bold", + "category": "display", + "capHeight": 1421, + "ascent": 1994, + "descent": -831, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1005, + "xWidthAvg": 960, + "subsets": { + "latin": { + "xWidthAvg": 960 + }, + "thai": { + "xWidthAvg": 576 + } + } + }, + "regular": { + "familyName": "Stardos Stencil", + "fullName": "Stardos Stencil Regular", + "postscriptName": "StardosStencil-Regular", + "category": "display", + "capHeight": 1421, + "ascent": 1994, + "descent": -831, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 981, + "xWidthAvg": 908, + "subsets": { + "latin": { + "xWidthAvg": 908 + }, + "thai": { + "xWidthAvg": 528 + } + } + } + } + }, + "stick": { + "familyName": "Stick", + "fullName": "Stick Regular", + "postscriptName": "Stick-Regular", + "category": "sans-serif", + "capHeight": 715, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Stick", + "fullName": "Stick Regular", + "postscriptName": "Stick-Regular", + "category": "sans-serif", + "capHeight": 715, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "stickNoBills": { + "familyName": "Stick No Bills", + "fullName": "Stick No Bills Regular", + "postscriptName": "StickNoBills-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 940, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 374, + "subsets": { + "latin": { + "xWidthAvg": 374 + }, + "thai": { + "xWidthAvg": 631 + } + }, + "variants": { + "200": { + "familyName": "Stick No Bills", + "fullName": "Stick No Bills ExtraLight", + "postscriptName": "StickNoBills-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 940, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 358, + "subsets": { + "latin": { + "xWidthAvg": 358 + }, + "thai": { + "xWidthAvg": 631 + } + } + }, + "300": { + "familyName": "Stick No Bills", + "fullName": "Stick No Bills Light", + "postscriptName": "StickNoBills-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 940, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 366, + "subsets": { + "latin": { + "xWidthAvg": 366 + }, + "thai": { + "xWidthAvg": 631 + } + } + }, + "500": { + "familyName": "Stick No Bills", + "fullName": "Stick No Bills Medium", + "postscriptName": "StickNoBills-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 940, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 378, + "subsets": { + "latin": { + "xWidthAvg": 378 + }, + "thai": { + "xWidthAvg": 631 + } + } + }, + "600": { + "familyName": "Stick No Bills", + "fullName": "Stick No Bills SemiBold", + "postscriptName": "StickNoBills-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 940, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 385, + "subsets": { + "latin": { + "xWidthAvg": 385 + }, + "thai": { + "xWidthAvg": 631 + } + } + }, + "700": { + "familyName": "Stick No Bills", + "fullName": "Stick No Bills Bold", + "postscriptName": "StickNoBills-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 940, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 390, + "subsets": { + "latin": { + "xWidthAvg": 390 + }, + "thai": { + "xWidthAvg": 631 + } + } + }, + "800": { + "familyName": "Stick No Bills", + "fullName": "Stick No Bills ExtraBold", + "postscriptName": "StickNoBills-ExtraBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 940, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 398, + "subsets": { + "latin": { + "xWidthAvg": 398 + }, + "thai": { + "xWidthAvg": 631 + } + } + }, + "regular": { + "familyName": "Stick No Bills", + "fullName": "Stick No Bills Regular", + "postscriptName": "StickNoBills-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 940, + "descent": -312, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 374, + "subsets": { + "latin": { + "xWidthAvg": 374 + }, + "thai": { + "xWidthAvg": 631 + } + } + } + } + }, + "stintUltraCondensed": { + "familyName": "Stint Ultra Condensed", + "fullName": "Stint Ultra Condensed", + "postscriptName": "StintUltraCondensed-Regular", + "category": "serif", + "capHeight": 1374, + "ascent": 1829, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 952, + "xWidthAvg": 513, + "subsets": { + "latin": { + "xWidthAvg": 513 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "Stint Ultra Condensed", + "fullName": "Stint Ultra Condensed", + "postscriptName": "StintUltraCondensed-Regular", + "category": "serif", + "capHeight": 1374, + "ascent": 1829, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 952, + "xWidthAvg": 513, + "subsets": { + "latin": { + "xWidthAvg": 513 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "stintUltraExpanded": { + "familyName": "Stint Ultra Expanded", + "fullName": "Stint Ultra Expanded", + "postscriptName": "StintUltraExpanded-Regular", + "category": "serif", + "capHeight": 1374, + "ascent": 1853, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 952, + "xWidthAvg": 1218, + "subsets": { + "latin": { + "xWidthAvg": 1218 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "Stint Ultra Expanded", + "fullName": "Stint Ultra Expanded", + "postscriptName": "StintUltraExpanded-Regular", + "category": "serif", + "capHeight": 1374, + "ascent": 1853, + "descent": -483, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 952, + "xWidthAvg": 1218, + "subsets": { + "latin": { + "xWidthAvg": 1218 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "stoke": { + "familyName": "Stoke", + "fullName": "Stoke Regular", + "postscriptName": "Stoke-Regular", + "category": "serif", + "capHeight": 683, + "ascent": 2030, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 479, + "xWidthAvg": 1168, + "subsets": { + "latin": { + "xWidthAvg": 1168 + }, + "thai": { + "xWidthAvg": 1528 + } + }, + "variants": { + "300": { + "familyName": "Stoke", + "fullName": "Stoke Light", + "postscriptName": "Stoke-Light", + "category": "serif", + "capHeight": 665, + "ascent": 2030, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 371, + "xWidthAvg": 1158, + "subsets": { + "latin": { + "xWidthAvg": 1158 + }, + "thai": { + "xWidthAvg": 1528 + } + } + }, + "regular": { + "familyName": "Stoke", + "fullName": "Stoke Regular", + "postscriptName": "Stoke-Regular", + "category": "serif", + "capHeight": 683, + "ascent": 2030, + "descent": -530, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 479, + "xWidthAvg": 1168, + "subsets": { + "latin": { + "xWidthAvg": 1168 + }, + "thai": { + "xWidthAvg": 1528 + } + } + } + } + }, + "strait": { + "familyName": "Strait", + "fullName": "Strait Regular", + "postscriptName": "Strait-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 901, + "descent": -194, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 413, + "subsets": { + "latin": { + "xWidthAvg": 413 + }, + "thai": { + "xWidthAvg": 250 + } + }, + "variants": { + "regular": { + "familyName": "Strait", + "fullName": "Strait Regular", + "postscriptName": "Strait-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 901, + "descent": -194, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 413, + "subsets": { + "latin": { + "xWidthAvg": 413 + }, + "thai": { + "xWidthAvg": 250 + } + } + } + } + }, + "styleScript": { + "familyName": "Style Script", + "fullName": "Style Script Regular", + "postscriptName": "StyleScript-Regular", + "category": "handwriting", + "capHeight": 700, + "ascent": 1000, + "descent": -520, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 434, + "xWidthAvg": 299, + "subsets": { + "latin": { + "xWidthAvg": 299 + }, + "thai": { + "xWidthAvg": 190 + } + }, + "variants": { + "regular": { + "familyName": "Style Script", + "fullName": "Style Script Regular", + "postscriptName": "StyleScript-Regular", + "category": "handwriting", + "capHeight": 700, + "ascent": 1000, + "descent": -520, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 434, + "xWidthAvg": 299, + "subsets": { + "latin": { + "xWidthAvg": 299 + }, + "thai": { + "xWidthAvg": 190 + } + } + } + } + }, + "stylish": { + "familyName": "Stylish", + "fullName": "Stylish Regular", + "postscriptName": "Stylish-Regular", + "category": "sans-serif", + "capHeight": 600, + "ascent": 821, + "descent": -179, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 410, + "xWidthAvg": 396, + "subsets": { + "latin": { + "xWidthAvg": 396 + }, + "thai": { + "xWidthAvg": 864 + } + }, + "variants": { + "regular": { + "familyName": "Stylish", + "fullName": "Stylish Regular", + "postscriptName": "Stylish-Regular", + "category": "sans-serif", + "capHeight": 600, + "ascent": 821, + "descent": -179, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 410, + "xWidthAvg": 396, + "subsets": { + "latin": { + "xWidthAvg": 396 + }, + "thai": { + "xWidthAvg": 864 + } + } + } + } + }, + "sueEllenFrancisco": { + "familyName": "Sue Ellen Francisco", + "fullName": "Sue Ellen Francisco ", + "postscriptName": "SueEllenFrancisco", + "category": "handwriting", + "capHeight": 1085, + "ascent": 1362, + "descent": -634, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 439, + "xWidthAvg": 286, + "subsets": { + "latin": { + "xWidthAvg": 286 + }, + "thai": { + "xWidthAvg": 256 + } + }, + "variants": { + "regular": { + "familyName": "Sue Ellen Francisco", + "fullName": "Sue Ellen Francisco ", + "postscriptName": "SueEllenFrancisco", + "category": "handwriting", + "capHeight": 1085, + "ascent": 1362, + "descent": -634, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 439, + "xWidthAvg": 286, + "subsets": { + "latin": { + "xWidthAvg": 286 + }, + "thai": { + "xWidthAvg": 256 + } + } + } + } + }, + "suezOne": { + "familyName": "Suez One", + "fullName": "SuezOne-Regular", + "postscriptName": "SuezOne-Regular", + "category": "serif", + "capHeight": 674, + "ascent": 987, + "descent": -319, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 484 + } + }, + "variants": { + "regular": { + "familyName": "Suez One", + "fullName": "SuezOne-Regular", + "postscriptName": "SuezOne-Regular", + "category": "serif", + "capHeight": 674, + "ascent": 987, + "descent": -319, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 484 + } + } + } + } + }, + "sulphurPoint": { + "familyName": "Sulphur Point", + "fullName": "Sulphur Point Regular", + "postscriptName": "SulphurPoint-Regular", + "category": "sans-serif", + "capHeight": 665, + "ascent": 790, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 579 + } + }, + "variants": { + "300": { + "familyName": "Sulphur Point", + "fullName": "Sulphur Point Light", + "postscriptName": "SulphurPoint-Light", + "category": "sans-serif", + "capHeight": 665, + "ascent": 790, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 579 + } + } + }, + "700": { + "familyName": "Sulphur Point", + "fullName": "Sulphur Point Bold", + "postscriptName": "SulphurPoint-Bold", + "category": "sans-serif", + "capHeight": 665, + "ascent": 790, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 579 + } + } + }, + "regular": { + "familyName": "Sulphur Point", + "fullName": "Sulphur Point Regular", + "postscriptName": "SulphurPoint-Regular", + "category": "sans-serif", + "capHeight": 665, + "ascent": 790, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 579 + } + } + } + } + }, + "sumana": { + "familyName": "Sumana", + "fullName": "Sumana", + "postscriptName": "Sumana-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 1922, + "descent": -1005, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "700": { + "familyName": "Sumana", + "fullName": "Sumana Bold", + "postscriptName": "Sumana-Bold", + "category": "serif", + "capHeight": 700, + "ascent": 1922, + "descent": -1005, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Sumana", + "fullName": "Sumana", + "postscriptName": "Sumana-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 1922, + "descent": -1005, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "sunflower": { + "familyName": "Sunflower", + "fullName": "Sunflower Light", + "postscriptName": "Sunflower-Light", + "category": "sans-serif", + "capHeight": 692, + "ascent": 782, + "descent": -218, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 421, + "subsets": { + "latin": { + "xWidthAvg": 421 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "300": { + "familyName": "Sunflower", + "fullName": "Sunflower Light", + "postscriptName": "Sunflower-Light", + "category": "sans-serif", + "capHeight": 692, + "ascent": 782, + "descent": -218, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 421, + "subsets": { + "latin": { + "xWidthAvg": 421 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Sunflower", + "fullName": "Sunflower Medium", + "postscriptName": "Sunflower-Medium", + "category": "sans-serif", + "capHeight": 680, + "ascent": 782, + "descent": -218, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Sunflower", + "fullName": "Sunflower Bold", + "postscriptName": "Sunflower-Bold", + "category": "sans-serif", + "capHeight": 685, + "ascent": 782, + "descent": -218, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "sunshiney": { + "familyName": "Sunshiney", + "fullName": "Sunshiney Regular", + "postscriptName": "Sunshiney-Regular", + "category": "handwriting", + "capHeight": 759, + "ascent": 1019, + "descent": -306, + "lineGap": 27, + "unitsPerEm": 1024, + "xHeight": 391, + "xWidthAvg": 353, + "subsets": { + "latin": { + "xWidthAvg": 353 + }, + "thai": { + "xWidthAvg": 266 + } + }, + "variants": { + "regular": { + "familyName": "Sunshiney", + "fullName": "Sunshiney Regular", + "postscriptName": "Sunshiney-Regular", + "category": "handwriting", + "capHeight": 759, + "ascent": 1019, + "descent": -306, + "lineGap": 27, + "unitsPerEm": 1024, + "xHeight": 391, + "xWidthAvg": 353, + "subsets": { + "latin": { + "xWidthAvg": 353 + }, + "thai": { + "xWidthAvg": 266 + } + } + } + } + }, + "supermercadoOne": { + "familyName": "Supermercado One", + "fullName": "Supermercado Regular", + "postscriptName": "Supermercado-Regular", + "category": "display", + "capHeight": 1359, + "ascent": 1925, + "descent": -527, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1066, + "xWidthAvg": 898, + "subsets": { + "latin": { + "xWidthAvg": 898 + }, + "thai": { + "xWidthAvg": 472 + } + }, + "variants": { + "regular": { + "familyName": "Supermercado One", + "fullName": "Supermercado Regular", + "postscriptName": "Supermercado-Regular", + "category": "display", + "capHeight": 1359, + "ascent": 1925, + "descent": -527, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1066, + "xWidthAvg": 898, + "subsets": { + "latin": { + "xWidthAvg": 898 + }, + "thai": { + "xWidthAvg": 472 + } + } + } + } + }, + "sura": { + "familyName": "Sura", + "fullName": "Sura", + "postscriptName": "Sura-Regular", + "category": "serif", + "capHeight": 1464, + "ascent": 2359, + "descent": -872, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1022, + "xWidthAvg": 902, + "subsets": { + "latin": { + "xWidthAvg": 902 + }, + "thai": { + "xWidthAvg": 458 + } + }, + "variants": { + "700": { + "familyName": "Sura", + "fullName": "Sura Bold", + "postscriptName": "Sura-Bold", + "category": "serif", + "capHeight": 1468, + "ascent": 2359, + "descent": -872, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1027, + "xWidthAvg": 931, + "subsets": { + "latin": { + "xWidthAvg": 931 + }, + "thai": { + "xWidthAvg": 366 + } + } + }, + "regular": { + "familyName": "Sura", + "fullName": "Sura", + "postscriptName": "Sura-Regular", + "category": "serif", + "capHeight": 1464, + "ascent": 2359, + "descent": -872, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1022, + "xWidthAvg": 902, + "subsets": { + "latin": { + "xWidthAvg": 902 + }, + "thai": { + "xWidthAvg": 458 + } + } + } + } + }, + "suranna": { + "familyName": "Suranna", + "fullName": "Suranna", + "postscriptName": "Suranna", + "category": "serif", + "capHeight": 492, + "ascent": 1101, + "descent": -607, + "lineGap": 0, + "unitsPerEm": 780, + "xHeight": 319, + "xWidthAvg": 294, + "subsets": { + "latin": { + "xWidthAvg": 294 + }, + "thai": { + "xWidthAvg": 880 + } + }, + "variants": { + "regular": { + "familyName": "Suranna", + "fullName": "Suranna", + "postscriptName": "Suranna", + "category": "serif", + "capHeight": 492, + "ascent": 1101, + "descent": -607, + "lineGap": 0, + "unitsPerEm": 780, + "xHeight": 319, + "xWidthAvg": 294, + "subsets": { + "latin": { + "xWidthAvg": 294 + }, + "thai": { + "xWidthAvg": 880 + } + } + } + } + }, + "suravaram": { + "familyName": "Suravaram", + "fullName": "Suravaram", + "postscriptName": "Suravaram", + "category": "serif", + "capHeight": 482, + "ascent": 1295, + "descent": -794, + "lineGap": 0, + "unitsPerEm": 980, + "xHeight": 344, + "xWidthAvg": 350, + "subsets": { + "latin": { + "xWidthAvg": 350 + }, + "thai": { + "xWidthAvg": 886 + } + }, + "variants": { + "regular": { + "familyName": "Suravaram", + "fullName": "Suravaram", + "postscriptName": "Suravaram", + "category": "serif", + "capHeight": 482, + "ascent": 1295, + "descent": -794, + "lineGap": 0, + "unitsPerEm": 980, + "xHeight": 344, + "xWidthAvg": 350, + "subsets": { + "latin": { + "xWidthAvg": 350 + }, + "thai": { + "xWidthAvg": 886 + } + } + } + } + }, + "suwannaphum": { + "familyName": "Suwannaphum", + "fullName": "Suwannaphum Regular", + "postscriptName": "Suwannaphum-Regular", + "category": "serif", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 1001, + "subsets": { + "latin": { + "xWidthAvg": 1001 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "100": { + "familyName": "Suwannaphum", + "fullName": "Suwannaphum Thin", + "postscriptName": "Suwannaphum-Thin", + "category": "serif", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 987, + "subsets": { + "latin": { + "xWidthAvg": 987 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "300": { + "familyName": "Suwannaphum", + "fullName": "Suwannaphum Light", + "postscriptName": "Suwannaphum-Light", + "category": "serif", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 994, + "subsets": { + "latin": { + "xWidthAvg": 994 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "700": { + "familyName": "Suwannaphum", + "fullName": "Suwannaphum Bold", + "postscriptName": "Suwannaphum-Bold", + "category": "serif", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 1014, + "subsets": { + "latin": { + "xWidthAvg": 1014 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "900": { + "familyName": "Suwannaphum", + "fullName": "Suwannaphum Black", + "postscriptName": "Suwannaphum-Black", + "category": "serif", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 1022, + "subsets": { + "latin": { + "xWidthAvg": 1022 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "regular": { + "familyName": "Suwannaphum", + "fullName": "Suwannaphum Regular", + "postscriptName": "Suwannaphum-Regular", + "category": "serif", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 1001, + "subsets": { + "latin": { + "xWidthAvg": 1001 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "swankyAndMooMoo": { + "familyName": "Swanky and Moo Moo", + "fullName": "Swanky and Moo Moo", + "postscriptName": "SwankyandMooMoo", + "category": "handwriting", + "capHeight": 424, + "ascent": 995, + "descent": -507, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 341, + "xWidthAvg": 424, + "subsets": { + "latin": { + "xWidthAvg": 424 + }, + "thai": { + "xWidthAvg": 326 + } + }, + "variants": { + "regular": { + "familyName": "Swanky and Moo Moo", + "fullName": "Swanky and Moo Moo", + "postscriptName": "SwankyandMooMoo", + "category": "handwriting", + "capHeight": 424, + "ascent": 995, + "descent": -507, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 341, + "xWidthAvg": 424, + "subsets": { + "latin": { + "xWidthAvg": 424 + }, + "thai": { + "xWidthAvg": 326 + } + } + } + } + }, + "syncopate": { + "familyName": "Syncopate", + "fullName": "Syncopate Regular", + "postscriptName": "Syncopate-Regular", + "category": "sans-serif", + "capHeight": 1374, + "ascent": 1556, + "descent": -426, + "lineGap": 150, + "unitsPerEm": 2048, + "xHeight": 958, + "xWidthAvg": 1501, + "subsets": { + "latin": { + "xWidthAvg": 1501 + }, + "thai": { + "xWidthAvg": 2048 + } + }, + "variants": { + "700": { + "familyName": "Syncopate", + "fullName": "Syncopate Bold", + "postscriptName": "Syncopate-Bold", + "category": "sans-serif", + "capHeight": 1374, + "ascent": 1556, + "descent": -426, + "lineGap": 150, + "unitsPerEm": 2048, + "xHeight": 958, + "xWidthAvg": 1638, + "subsets": { + "latin": { + "xWidthAvg": 1638 + }, + "thai": { + "xWidthAvg": 2048 + } + } + }, + "regular": { + "familyName": "Syncopate", + "fullName": "Syncopate Regular", + "postscriptName": "Syncopate-Regular", + "category": "sans-serif", + "capHeight": 1374, + "ascent": 1556, + "descent": -426, + "lineGap": 150, + "unitsPerEm": 2048, + "xHeight": 958, + "xWidthAvg": 1501, + "subsets": { + "latin": { + "xWidthAvg": 1501 + }, + "thai": { + "xWidthAvg": 2048 + } + } + } + } + }, + "syne": { + "familyName": "Syne", + "fullName": "Syne Regular", + "postscriptName": "Syne-Regular", + "category": "sans-serif", + "capHeight": 650, + "ascent": 925, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 446 + } + }, + "variants": { + "500": { + "familyName": "Syne", + "fullName": "Syne Medium", + "postscriptName": "Syne-Medium", + "category": "sans-serif", + "capHeight": 650, + "ascent": 925, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 449 + } + } + }, + "600": { + "familyName": "Syne", + "fullName": "Syne SemiBold", + "postscriptName": "Syne-SemiBold", + "category": "sans-serif", + "capHeight": 650, + "ascent": 925, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 508, + "subsets": { + "latin": { + "xWidthAvg": 508 + }, + "thai": { + "xWidthAvg": 452 + } + } + }, + "700": { + "familyName": "Syne", + "fullName": "Syne Bold", + "postscriptName": "Syne-Bold", + "category": "sans-serif", + "capHeight": 650, + "ascent": 925, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 548, + "subsets": { + "latin": { + "xWidthAvg": 548 + }, + "thai": { + "xWidthAvg": 456 + } + } + }, + "800": { + "familyName": "Syne", + "fullName": "Syne ExtraBold", + "postscriptName": "Syne-ExtraBold", + "category": "sans-serif", + "capHeight": 650, + "ascent": 925, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 789, + "subsets": { + "latin": { + "xWidthAvg": 789 + }, + "thai": { + "xWidthAvg": 478 + } + } + }, + "regular": { + "familyName": "Syne", + "fullName": "Syne Regular", + "postscriptName": "Syne-Regular", + "category": "sans-serif", + "capHeight": 650, + "ascent": 925, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 446 + } + } + } + } + }, + "syneMono": { + "familyName": "Syne Mono", + "fullName": "Syne Mono Regular", + "postscriptName": "SyneMono-Regular", + "category": "monospace", + "capHeight": 650, + "ascent": 925, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 550, + "subsets": { + "latin": { + "xWidthAvg": 550 + }, + "thai": { + "xWidthAvg": 550 + } + }, + "variants": { + "regular": { + "familyName": "Syne Mono", + "fullName": "Syne Mono Regular", + "postscriptName": "SyneMono-Regular", + "category": "monospace", + "capHeight": 650, + "ascent": 925, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 550, + "subsets": { + "latin": { + "xWidthAvg": 550 + }, + "thai": { + "xWidthAvg": 550 + } + } + } + } + }, + "syneTactile": { + "familyName": "Syne Tactile", + "fullName": "Syne Tactile Regular", + "postscriptName": "SyneTactile-Regular", + "category": "display", + "capHeight": 650, + "ascent": 925, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 400, + "subsets": { + "latin": { + "xWidthAvg": 400 + }, + "thai": { + "xWidthAvg": 459 + } + }, + "variants": { + "regular": { + "familyName": "Syne Tactile", + "fullName": "Syne Tactile Regular", + "postscriptName": "SyneTactile-Regular", + "category": "display", + "capHeight": 650, + "ascent": 925, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 400, + "subsets": { + "latin": { + "xWidthAvg": 400 + }, + "thai": { + "xWidthAvg": 459 + } + } + } + } + }, + "tacOne": { + "familyName": "Tac One", + "fullName": "Tac One Regular", + "postscriptName": "TacOne-Regular", + "category": "sans-serif", + "capHeight": 554, + "ascent": 830, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 360, + "subsets": { + "latin": { + "xWidthAvg": 360 + }, + "thai": { + "xWidthAvg": 493 + } + }, + "variants": { + "regular": { + "familyName": "Tac One", + "fullName": "Tac One Regular", + "postscriptName": "TacOne-Regular", + "category": "sans-serif", + "capHeight": 554, + "ascent": 830, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 360, + "subsets": { + "latin": { + "xWidthAvg": 360 + }, + "thai": { + "xWidthAvg": 493 + } + } + } + } + }, + "tahoma": { + "familyName": "Tahoma", + "fullName": "Tahoma", + "postscriptName": "Tahoma", + "category": "sans-serif", + "capHeight": 1489, + "ascent": 2049, + "descent": -423, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1117, + "xWidthAvg": 917, + "subsets": { + "latin": { + "xWidthAvg": 917 + }, + "thai": { + "xWidthAvg": 1144 + } + }, + "variants": { + "700": { + "familyName": "Tahoma", + "fullName": "Tahoma Bold", + "postscriptName": "Tahoma-Bold", + "category": "sans-serif", + "capHeight": 1489, + "ascent": 2049, + "descent": -423, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1123, + "xWidthAvg": 1044, + "subsets": { + "latin": { + "xWidthAvg": 1044 + }, + "thai": { + "xWidthAvg": 1264 + } + } + }, + "regular": { + "familyName": "Tahoma", + "fullName": "Tahoma", + "postscriptName": "Tahoma", + "category": "sans-serif", + "capHeight": 1489, + "ascent": 2049, + "descent": -423, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1117, + "xWidthAvg": 917, + "subsets": { + "latin": { + "xWidthAvg": 917 + }, + "thai": { + "xWidthAvg": 1144 + } + } + } + } + }, + "taiHeritagePro": { + "familyName": "Tai Heritage Pro", + "fullName": "Tai Heritage Pro", + "postscriptName": "TaiHeritagePro", + "category": "serif", + "capHeight": 1700, + "ascent": 2700, + "descent": -1600, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1150, + "xWidthAvg": 849, + "subsets": { + "latin": { + "xWidthAvg": 849 + }, + "thai": { + "xWidthAvg": 1400 + } + }, + "variants": { + "700": { + "familyName": "Tai Heritage Pro", + "fullName": "Tai Heritage Pro Bold", + "postscriptName": "TaiHeritagePro-Bold", + "category": "serif", + "capHeight": 1700, + "ascent": 2700, + "descent": -1600, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1150, + "xWidthAvg": 931, + "subsets": { + "latin": { + "xWidthAvg": 931 + }, + "thai": { + "xWidthAvg": 1400 + } + } + }, + "regular": { + "familyName": "Tai Heritage Pro", + "fullName": "Tai Heritage Pro", + "postscriptName": "TaiHeritagePro", + "category": "serif", + "capHeight": 1700, + "ascent": 2700, + "descent": -1600, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1150, + "xWidthAvg": 849, + "subsets": { + "latin": { + "xWidthAvg": 849 + }, + "thai": { + "xWidthAvg": 1400 + } + } + } + } + }, + "tajawal": { + "familyName": "Tajawal", + "fullName": "Tajawal", + "postscriptName": "Tajawal-Regular", + "category": "sans-serif", + "capHeight": 633, + "ascent": 643, + "descent": -357, + "lineGap": 200, + "unitsPerEm": 1000, + "xHeight": 454, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 240 + } + }, + "variants": { + "200": { + "familyName": "Tajawal", + "fullName": "Tajawal ExtraLight", + "postscriptName": "Tajawal-ExtraLight", + "category": "sans-serif", + "capHeight": 633, + "ascent": 645, + "descent": -355, + "lineGap": 200, + "unitsPerEm": 1000, + "xHeight": 454, + "xWidthAvg": 394, + "subsets": { + "latin": { + "xWidthAvg": 394 + }, + "thai": { + "xWidthAvg": 213 + } + } + }, + "300": { + "familyName": "Tajawal", + "fullName": "Tajawal Light", + "postscriptName": "Tajawal-Light", + "category": "sans-serif", + "capHeight": 633, + "ascent": 645, + "descent": -355, + "lineGap": 200, + "unitsPerEm": 1000, + "xHeight": 454, + "xWidthAvg": 407, + "subsets": { + "latin": { + "xWidthAvg": 407 + }, + "thai": { + "xWidthAvg": 220 + } + } + }, + "500": { + "familyName": "Tajawal", + "fullName": "Tajawal-Medium", + "postscriptName": "Tajawal-Medium", + "category": "sans-serif", + "capHeight": 633, + "ascent": 643, + "descent": -357, + "lineGap": 200, + "unitsPerEm": 1000, + "xHeight": 454, + "xWidthAvg": 432, + "subsets": { + "latin": { + "xWidthAvg": 432 + }, + "thai": { + "xWidthAvg": 233 + } + } + }, + "700": { + "familyName": "Tajawal", + "fullName": "Tajawal-Bold", + "postscriptName": "Tajawal-Bold", + "category": "sans-serif", + "capHeight": 633, + "ascent": 643, + "descent": -357, + "lineGap": 200, + "unitsPerEm": 1000, + "xHeight": 454, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 240 + } + } + }, + "800": { + "familyName": "Tajawal", + "fullName": "Tajawal ExtraBold", + "postscriptName": "Tajawal-ExtraBold", + "category": "sans-serif", + "capHeight": 633, + "ascent": 643, + "descent": -357, + "lineGap": 200, + "unitsPerEm": 1000, + "xHeight": 454, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 247 + } + } + }, + "900": { + "familyName": "Tajawal", + "fullName": "Tajawal Black", + "postscriptName": "Tajawal-Black", + "category": "sans-serif", + "capHeight": 633, + "ascent": 643, + "descent": -357, + "lineGap": 200, + "unitsPerEm": 1000, + "xHeight": 454, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 253 + } + } + }, + "regular": { + "familyName": "Tajawal", + "fullName": "Tajawal", + "postscriptName": "Tajawal-Regular", + "category": "sans-serif", + "capHeight": 633, + "ascent": 643, + "descent": -357, + "lineGap": 200, + "unitsPerEm": 1000, + "xHeight": 454, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 240 + } + } + } + } + }, + "tangerine": { + "familyName": "Tangerine", + "fullName": "Tangerine Regular", + "postscriptName": "Tangerine-Regular", + "category": "handwriting", + "capHeight": 644, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 255, + "xWidthAvg": 237, + "subsets": { + "latin": { + "xWidthAvg": 237 + }, + "thai": { + "xWidthAvg": 150 + } + }, + "variants": { + "700": { + "familyName": "Tangerine", + "fullName": "Tangerine Bold", + "postscriptName": "Tangerine-Bold", + "category": "handwriting", + "capHeight": 644, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 256, + "xWidthAvg": 259, + "subsets": { + "latin": { + "xWidthAvg": 259 + }, + "thai": { + "xWidthAvg": 150 + } + } + }, + "regular": { + "familyName": "Tangerine", + "fullName": "Tangerine Regular", + "postscriptName": "Tangerine-Regular", + "category": "handwriting", + "capHeight": 644, + "ascent": 750, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 255, + "xWidthAvg": 237, + "subsets": { + "latin": { + "xWidthAvg": 237 + }, + "thai": { + "xWidthAvg": 150 + } + } + } + } + }, + "tapestry": { + "familyName": "Tapestry", + "fullName": "Tapestry Regular", + "postscriptName": "Tapestry-Regular", + "category": "handwriting", + "capHeight": 640, + "ascent": 950, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 454, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 463 + } + }, + "variants": { + "regular": { + "familyName": "Tapestry", + "fullName": "Tapestry Regular", + "postscriptName": "Tapestry-Regular", + "category": "handwriting", + "capHeight": 640, + "ascent": 950, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 454, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 463 + } + } + } + } + }, + "taprom": { + "familyName": "Taprom", + "fullName": "Taprom Regular", + "postscriptName": "Taprom-Regular", + "category": "display", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 755, + "subsets": { + "latin": { + "xWidthAvg": 755 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "Taprom", + "fullName": "Taprom Regular", + "postscriptName": "Taprom-Regular", + "category": "display", + "capHeight": 1462, + "ascent": 2500, + "descent": -1200, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1098, + "xWidthAvg": 755, + "subsets": { + "latin": { + "xWidthAvg": 755 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "tauri": { + "familyName": "Tauri", + "fullName": "Tauri-Regular", + "postscriptName": "TauriRegular", + "category": "sans-serif", + "capHeight": 1571, + "ascent": 2040, + "descent": -520, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1135, + "xWidthAvg": 978, + "subsets": { + "latin": { + "xWidthAvg": 978 + }, + "thai": { + "xWidthAvg": 2134 + } + }, + "variants": { + "regular": { + "familyName": "Tauri", + "fullName": "Tauri-Regular", + "postscriptName": "TauriRegular", + "category": "sans-serif", + "capHeight": 1571, + "ascent": 2040, + "descent": -520, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1135, + "xWidthAvg": 978, + "subsets": { + "latin": { + "xWidthAvg": 978 + }, + "thai": { + "xWidthAvg": 2134 + } + } + } + } + }, + "taviraj": { + "familyName": "Taviraj", + "fullName": "Taviraj Regular", + "postscriptName": "Taviraj-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 1172, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 556 + } + }, + "variants": { + "100": { + "familyName": "Taviraj", + "fullName": "Taviraj Thin", + "postscriptName": "Taviraj-Thin", + "category": "serif", + "capHeight": 700, + "ascent": 1172, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 413, + "subsets": { + "latin": { + "xWidthAvg": 413 + }, + "thai": { + "xWidthAvg": 510 + } + } + }, + "200": { + "familyName": "Taviraj", + "fullName": "Taviraj ExtraLight", + "postscriptName": "Taviraj-ExtraLight", + "category": "serif", + "capHeight": 700, + "ascent": 1172, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 430, + "subsets": { + "latin": { + "xWidthAvg": 430 + }, + "thai": { + "xWidthAvg": 525 + } + } + }, + "300": { + "familyName": "Taviraj", + "fullName": "Taviraj Light", + "postscriptName": "Taviraj-Light", + "category": "serif", + "capHeight": 700, + "ascent": 1172, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 541 + } + } + }, + "500": { + "familyName": "Taviraj", + "fullName": "Taviraj Medium", + "postscriptName": "Taviraj-Medium", + "category": "serif", + "capHeight": 700, + "ascent": 1172, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 572 + } + } + }, + "600": { + "familyName": "Taviraj", + "fullName": "Taviraj SemiBold", + "postscriptName": "Taviraj-SemiBold", + "category": "serif", + "capHeight": 700, + "ascent": 1172, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 595 + } + } + }, + "700": { + "familyName": "Taviraj", + "fullName": "Taviraj Bold", + "postscriptName": "Taviraj-Bold", + "category": "serif", + "capHeight": 700, + "ascent": 1172, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 539, + "subsets": { + "latin": { + "xWidthAvg": 539 + }, + "thai": { + "xWidthAvg": 619 + } + } + }, + "800": { + "familyName": "Taviraj", + "fullName": "Taviraj ExtraBold", + "postscriptName": "Taviraj-ExtraBold", + "category": "serif", + "capHeight": 700, + "ascent": 1172, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 548, + "subsets": { + "latin": { + "xWidthAvg": 548 + }, + "thai": { + "xWidthAvg": 627 + } + } + }, + "900": { + "familyName": "Taviraj", + "fullName": "Taviraj Black", + "postscriptName": "Taviraj-Black", + "category": "serif", + "capHeight": 700, + "ascent": 1172, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 557, + "subsets": { + "latin": { + "xWidthAvg": 557 + }, + "thai": { + "xWidthAvg": 635 + } + } + }, + "regular": { + "familyName": "Taviraj", + "fullName": "Taviraj Regular", + "postscriptName": "Taviraj-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 1172, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 556 + } + } + }, + "italic": { + "familyName": "Taviraj", + "fullName": "Taviraj Italic", + "postscriptName": "Taviraj-Italic", + "category": "serif", + "capHeight": 700, + "ascent": 1172, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 534 + } + } + }, + "900italic": { + "familyName": "Taviraj", + "fullName": "Taviraj Black Italic", + "postscriptName": "Taviraj-BlackItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1172, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 539, + "subsets": { + "latin": { + "xWidthAvg": 539 + }, + "thai": { + "xWidthAvg": 610 + } + } + }, + "800italic": { + "familyName": "Taviraj", + "fullName": "Taviraj ExtraBold Italic", + "postscriptName": "Taviraj-ExtraBoldItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1172, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 529, + "subsets": { + "latin": { + "xWidthAvg": 529 + }, + "thai": { + "xWidthAvg": 602 + } + } + }, + "700italic": { + "familyName": "Taviraj", + "fullName": "Taviraj Bold Italic", + "postscriptName": "Taviraj-BoldItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1172, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 521, + "subsets": { + "latin": { + "xWidthAvg": 521 + }, + "thai": { + "xWidthAvg": 594 + } + } + }, + "600italic": { + "familyName": "Taviraj", + "fullName": "Taviraj SemiBold Italic", + "postscriptName": "Taviraj-SemiBoldItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1172, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 572 + } + } + }, + "500italic": { + "familyName": "Taviraj", + "fullName": "Taviraj Medium Italic", + "postscriptName": "Taviraj-MediumItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1172, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 549 + } + } + }, + "300italic": { + "familyName": "Taviraj", + "fullName": "Taviraj Light Italic", + "postscriptName": "Taviraj-LightItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1172, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 519 + } + } + }, + "200italic": { + "familyName": "Taviraj", + "fullName": "Taviraj ExtraLight Italic", + "postscriptName": "Taviraj-ExtraLightItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1172, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 418, + "subsets": { + "latin": { + "xWidthAvg": 418 + }, + "thai": { + "xWidthAvg": 504 + } + } + }, + "100italic": { + "familyName": "Taviraj", + "fullName": "Taviraj Thin Italic", + "postscriptName": "Taviraj-ThinItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1172, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 400, + "subsets": { + "latin": { + "xWidthAvg": 400 + }, + "thai": { + "xWidthAvg": 490 + } + } + } + } + }, + "teachers": { + "familyName": "Teachers", + "fullName": "Teachers Regular", + "postscriptName": "Teachers-Regular", + "category": "sans-serif", + "capHeight": 680, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 501 + } + }, + "variants": { + "500": { + "familyName": "Teachers", + "fullName": "Teachers Medium", + "postscriptName": "Teachers-Medium", + "category": "sans-serif", + "capHeight": 680, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "600": { + "familyName": "Teachers", + "fullName": "Teachers SemiBold", + "postscriptName": "Teachers-SemiBold", + "category": "sans-serif", + "capHeight": 680, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Teachers", + "fullName": "Teachers Bold", + "postscriptName": "Teachers-Bold", + "category": "sans-serif", + "capHeight": 680, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Teachers", + "fullName": "Teachers ExtraBold", + "postscriptName": "Teachers-ExtraBold", + "category": "sans-serif", + "capHeight": 680, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Teachers", + "fullName": "Teachers Regular", + "postscriptName": "Teachers-Regular", + "category": "sans-serif", + "capHeight": 680, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "italic": { + "familyName": "Teachers", + "fullName": "Teachers Italic", + "postscriptName": "Teachers-Italic", + "category": "sans-serif", + "capHeight": 680, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "800italic": { + "familyName": "Teachers", + "fullName": "Teachers ExtraBold Italic", + "postscriptName": "Teachers-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 680, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700italic": { + "familyName": "Teachers", + "fullName": "Teachers Bold Italic", + "postscriptName": "Teachers-BoldItalic", + "category": "sans-serif", + "capHeight": 680, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600italic": { + "familyName": "Teachers", + "fullName": "Teachers SemiBold Italic", + "postscriptName": "Teachers-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 680, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500italic": { + "familyName": "Teachers", + "fullName": "Teachers Medium Italic", + "postscriptName": "Teachers-MediumItalic", + "category": "sans-serif", + "capHeight": 680, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 501 + } + } + } + } + }, + "teko": { + "familyName": "Teko", + "fullName": "Teko Regular", + "postscriptName": "Teko-Regular", + "category": "sans-serif", + "capHeight": 626, + "ascent": 958, + "descent": -475, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 292, + "subsets": { + "latin": { + "xWidthAvg": 292 + }, + "thai": { + "xWidthAvg": 751 + } + }, + "variants": { + "300": { + "familyName": "Teko", + "fullName": "Teko Light", + "postscriptName": "Teko-Light", + "category": "sans-serif", + "capHeight": 622, + "ascent": 958, + "descent": -475, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 266, + "subsets": { + "latin": { + "xWidthAvg": 266 + }, + "thai": { + "xWidthAvg": 750 + } + } + }, + "500": { + "familyName": "Teko", + "fullName": "Teko Medium", + "postscriptName": "Teko-Medium", + "category": "sans-serif", + "capHeight": 631, + "ascent": 958, + "descent": -475, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 321, + "subsets": { + "latin": { + "xWidthAvg": 321 + }, + "thai": { + "xWidthAvg": 753 + } + } + }, + "600": { + "familyName": "Teko", + "fullName": "Teko SemiBold", + "postscriptName": "Teko-SemiBold", + "category": "sans-serif", + "capHeight": 636, + "ascent": 958, + "descent": -475, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 354, + "subsets": { + "latin": { + "xWidthAvg": 354 + }, + "thai": { + "xWidthAvg": 754 + } + } + }, + "700": { + "familyName": "Teko", + "fullName": "Teko Bold", + "postscriptName": "Teko-Bold", + "category": "sans-serif", + "capHeight": 642, + "ascent": 958, + "descent": -475, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 486, + "xWidthAvg": 392, + "subsets": { + "latin": { + "xWidthAvg": 392 + }, + "thai": { + "xWidthAvg": 756 + } + } + }, + "regular": { + "familyName": "Teko", + "fullName": "Teko Regular", + "postscriptName": "Teko-Regular", + "category": "sans-serif", + "capHeight": 626, + "ascent": 958, + "descent": -475, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 292, + "subsets": { + "latin": { + "xWidthAvg": 292 + }, + "thai": { + "xWidthAvg": 751 + } + } + } + } + }, + "tektur": { + "familyName": "Tektur", + "fullName": "Tektur Regular", + "postscriptName": "Tektur-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1000, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 560, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 580 + } + }, + "variants": { + "500": { + "familyName": "Tektur", + "fullName": "Tektur Medium", + "postscriptName": "Tektur-Medium", + "category": "display", + "capHeight": 700, + "ascent": 1000, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 560, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 580 + } + } + }, + "600": { + "familyName": "Tektur", + "fullName": "Tektur SemiBold", + "postscriptName": "Tektur-SemiBold", + "category": "display", + "capHeight": 700, + "ascent": 1000, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 560, + "xWidthAvg": 496, + "subsets": { + "latin": { + "xWidthAvg": 496 + }, + "thai": { + "xWidthAvg": 580 + } + } + }, + "700": { + "familyName": "Tektur", + "fullName": "Tektur Bold", + "postscriptName": "Tektur-Bold", + "category": "display", + "capHeight": 700, + "ascent": 1000, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 560, + "xWidthAvg": 497, + "subsets": { + "latin": { + "xWidthAvg": 497 + }, + "thai": { + "xWidthAvg": 580 + } + } + }, + "800": { + "familyName": "Tektur", + "fullName": "Tektur ExtraBold", + "postscriptName": "Tektur-ExtraBold", + "category": "display", + "capHeight": 700, + "ascent": 1000, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 560, + "xWidthAvg": 499, + "subsets": { + "latin": { + "xWidthAvg": 499 + }, + "thai": { + "xWidthAvg": 580 + } + } + }, + "900": { + "familyName": "Tektur", + "fullName": "Tektur Black", + "postscriptName": "Tektur-Black", + "category": "display", + "capHeight": 700, + "ascent": 1000, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 560, + "xWidthAvg": 501, + "subsets": { + "latin": { + "xWidthAvg": 501 + }, + "thai": { + "xWidthAvg": 580 + } + } + }, + "regular": { + "familyName": "Tektur", + "fullName": "Tektur Regular", + "postscriptName": "Tektur-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1000, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 560, + "xWidthAvg": 492, + "subsets": { + "latin": { + "xWidthAvg": 492 + }, + "thai": { + "xWidthAvg": 580 + } + } + } + } + }, + "telex": { + "familyName": "Telex", + "fullName": "Telex Regular", + "postscriptName": "Telex-Regular", + "category": "sans-serif", + "capHeight": 708, + "ascent": 945, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 596 + } + }, + "variants": { + "regular": { + "familyName": "Telex", + "fullName": "Telex Regular", + "postscriptName": "Telex-Regular", + "category": "sans-serif", + "capHeight": 708, + "ascent": 945, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 514, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 596 + } + } + } + } + }, + "tenaliRamakrishna": { + "familyName": "Tenali Ramakrishna", + "fullName": "Tenali Ramakrishna", + "postscriptName": "TenaliRamakrishna", + "category": "sans-serif", + "capHeight": 367, + "ascent": 661, + "descent": -512, + "lineGap": 0, + "unitsPerEm": 750, + "xHeight": 268, + "xWidthAvg": 264, + "subsets": { + "latin": { + "xWidthAvg": 264 + }, + "thai": { + "xWidthAvg": 438 + } + }, + "variants": { + "regular": { + "familyName": "Tenali Ramakrishna", + "fullName": "Tenali Ramakrishna", + "postscriptName": "TenaliRamakrishna", + "category": "sans-serif", + "capHeight": 367, + "ascent": 661, + "descent": -512, + "lineGap": 0, + "unitsPerEm": 750, + "xHeight": 268, + "xWidthAvg": 264, + "subsets": { + "latin": { + "xWidthAvg": 264 + }, + "thai": { + "xWidthAvg": 438 + } + } + } + } + }, + "tenorSans": { + "familyName": "Tenor Sans", + "fullName": "Tenor Sans", + "postscriptName": "TenorSans", + "category": "sans-serif", + "capHeight": 700, + "ascent": 920, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 100 + } + }, + "variants": { + "regular": { + "familyName": "Tenor Sans", + "fullName": "Tenor Sans", + "postscriptName": "TenorSans", + "category": "sans-serif", + "capHeight": 700, + "ascent": 920, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 487, + "subsets": { + "latin": { + "xWidthAvg": 487 + }, + "thai": { + "xWidthAvg": 100 + } + } + } + } + }, + "textMeOne": { + "familyName": "Text Me One", + "fullName": "Text Me One", + "postscriptName": "TextMeOne-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 952, + "descent": -269, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 502, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 300 + } + }, + "variants": { + "regular": { + "familyName": "Text Me One", + "fullName": "Text Me One", + "postscriptName": "TextMeOne-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 952, + "descent": -269, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 502, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 300 + } + } + } + } + }, + "texturina": { + "familyName": "Texturina", + "fullName": "Texturina 12pt Regular", + "postscriptName": "Texturina12pt-Regular", + "category": "serif", + "capHeight": 704, + "ascent": 1260, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "100": { + "familyName": "Texturina", + "fullName": "Texturina 12pt Thin", + "postscriptName": "Texturina12pt-Thin", + "category": "serif", + "capHeight": 704, + "ascent": 1260, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200": { + "familyName": "Texturina", + "fullName": "Texturina 12pt ExtraLight", + "postscriptName": "Texturina12pt-ExtraLight", + "category": "serif", + "capHeight": 704, + "ascent": 1260, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Texturina", + "fullName": "Texturina 12pt Light", + "postscriptName": "Texturina12pt-Light", + "category": "serif", + "capHeight": 704, + "ascent": 1260, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Texturina", + "fullName": "Texturina 12pt Medium", + "postscriptName": "Texturina12pt-Medium", + "category": "serif", + "capHeight": 704, + "ascent": 1260, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Texturina", + "fullName": "Texturina 12pt SemiBold", + "postscriptName": "Texturina12pt-SemiBold", + "category": "serif", + "capHeight": 704, + "ascent": 1260, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Texturina", + "fullName": "Texturina 12pt Bold", + "postscriptName": "Texturina12pt-Bold", + "category": "serif", + "capHeight": 704, + "ascent": 1260, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Texturina", + "fullName": "Texturina 12pt ExtraBold", + "postscriptName": "Texturina12pt-ExtraBold", + "category": "serif", + "capHeight": 704, + "ascent": 1260, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "Texturina", + "fullName": "Texturina 12pt Black", + "postscriptName": "Texturina12pt-Black", + "category": "serif", + "capHeight": 704, + "ascent": 1260, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Texturina", + "fullName": "Texturina 12pt Regular", + "postscriptName": "Texturina12pt-Regular", + "category": "serif", + "capHeight": 704, + "ascent": 1260, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 451, + "subsets": { + "latin": { + "xWidthAvg": 451 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Texturina", + "fullName": "Texturina 12pt Italic", + "postscriptName": "Texturina12pt-Italic", + "category": "serif", + "capHeight": 704, + "ascent": 1260, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 408, + "subsets": { + "latin": { + "xWidthAvg": 408 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900italic": { + "familyName": "Texturina", + "fullName": "Texturina 12pt Black Italic", + "postscriptName": "Texturina12pt-BlackItalic", + "category": "serif", + "capHeight": 704, + "ascent": 1260, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 436, + "subsets": { + "latin": { + "xWidthAvg": 436 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800italic": { + "familyName": "Texturina", + "fullName": "Texturina 12pt ExtraBold Italic", + "postscriptName": "Texturina12pt-ExtraBoldItalic", + "category": "serif", + "capHeight": 704, + "ascent": 1260, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700italic": { + "familyName": "Texturina", + "fullName": "Texturina 12pt Bold Italic", + "postscriptName": "Texturina12pt-BoldItalic", + "category": "serif", + "capHeight": 704, + "ascent": 1260, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 424, + "subsets": { + "latin": { + "xWidthAvg": 424 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600italic": { + "familyName": "Texturina", + "fullName": "Texturina 12pt SemiBold Italic", + "postscriptName": "Texturina12pt-SemiBoldItalic", + "category": "serif", + "capHeight": 704, + "ascent": 1260, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 418, + "subsets": { + "latin": { + "xWidthAvg": 418 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500italic": { + "familyName": "Texturina", + "fullName": "Texturina 12pt Medium Italic", + "postscriptName": "Texturina12pt-MediumItalic", + "category": "serif", + "capHeight": 704, + "ascent": 1260, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300italic": { + "familyName": "Texturina", + "fullName": "Texturina 12pt Light Italic", + "postscriptName": "Texturina12pt-LightItalic", + "category": "serif", + "capHeight": 704, + "ascent": 1260, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 404, + "subsets": { + "latin": { + "xWidthAvg": 404 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200italic": { + "familyName": "Texturina", + "fullName": "Texturina 12pt ExtraLight Italic", + "postscriptName": "Texturina12pt-ExtraLightItalic", + "category": "serif", + "capHeight": 704, + "ascent": 1260, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 400, + "subsets": { + "latin": { + "xWidthAvg": 400 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "100italic": { + "familyName": "Texturina", + "fullName": "Texturina 12pt Thin Italic", + "postscriptName": "Texturina12pt-ThinItalic", + "category": "serif", + "capHeight": 704, + "ascent": 1260, + "descent": -300, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 396, + "subsets": { + "latin": { + "xWidthAvg": 396 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "thasadith": { + "familyName": "Thasadith", + "fullName": "Thasadith Regular", + "postscriptName": "Thasadith-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1005, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 395, + "subsets": { + "latin": { + "xWidthAvg": 395 + }, + "thai": { + "xWidthAvg": 483 + } + }, + "variants": { + "700": { + "familyName": "Thasadith", + "fullName": "Thasadith Bold", + "postscriptName": "Thasadith-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1005, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 515 + } + } + }, + "regular": { + "familyName": "Thasadith", + "fullName": "Thasadith Regular", + "postscriptName": "Thasadith-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1005, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 395, + "subsets": { + "latin": { + "xWidthAvg": 395 + }, + "thai": { + "xWidthAvg": 483 + } + } + }, + "italic": { + "familyName": "Thasadith", + "fullName": "Thasadith Italic", + "postscriptName": "Thasadith-Italic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1005, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 395, + "subsets": { + "latin": { + "xWidthAvg": 395 + }, + "thai": { + "xWidthAvg": 483 + } + } + }, + "700italic": { + "familyName": "Thasadith", + "fullName": "Thasadith Bold Italic", + "postscriptName": "Thasadith-BoldItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1005, + "descent": -295, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 516 + } + } + } + } + }, + "theGirlNextDoor": { + "familyName": "The Girl Next Door", + "fullName": "The Girl Next Door", + "postscriptName": "TheGirlNextDoor", + "category": "handwriting", + "capHeight": 627, + "ascent": 1139, + "descent": -748, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 519, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 346 + } + }, + "variants": { + "regular": { + "familyName": "The Girl Next Door", + "fullName": "The Girl Next Door", + "postscriptName": "TheGirlNextDoor", + "category": "handwriting", + "capHeight": 627, + "ascent": 1139, + "descent": -748, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 519, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 346 + } + } + } + } + }, + "theNautigal": { + "familyName": "The Nautigal", + "fullName": "The Nautigal Regular", + "postscriptName": "TheNautigal-Regular", + "category": "handwriting", + "capHeight": 600, + "ascent": 870, + "descent": -330, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 265, + "xWidthAvg": 251, + "subsets": { + "latin": { + "xWidthAvg": 251 + }, + "thai": { + "xWidthAvg": 518 + } + }, + "variants": { + "700": { + "familyName": "The Nautigal", + "fullName": "The Nautigal Bold", + "postscriptName": "TheNautigal-Bold", + "category": "handwriting", + "capHeight": 600, + "ascent": 870, + "descent": -330, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 265, + "xWidthAvg": 254, + "subsets": { + "latin": { + "xWidthAvg": 254 + }, + "thai": { + "xWidthAvg": 518 + } + } + }, + "regular": { + "familyName": "The Nautigal", + "fullName": "The Nautigal Regular", + "postscriptName": "TheNautigal-Regular", + "category": "handwriting", + "capHeight": 600, + "ascent": 870, + "descent": -330, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 265, + "xWidthAvg": 251, + "subsets": { + "latin": { + "xWidthAvg": 251 + }, + "thai": { + "xWidthAvg": 518 + } + } + } + } + }, + "tienne": { + "familyName": "Tienne", + "fullName": "Tienne Regular", + "postscriptName": "Tienne-Regular", + "category": "serif", + "capHeight": 1437, + "ascent": 2030, + "descent": -724, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 363, + "xWidthAvg": 1048, + "subsets": { + "latin": { + "xWidthAvg": 1048 + }, + "thai": { + "xWidthAvg": 531 + } + }, + "variants": { + "700": { + "familyName": "Tienne", + "fullName": "Tienne Bold", + "postscriptName": "Tienne-Bold", + "category": "serif", + "capHeight": 1413, + "ascent": 2030, + "descent": -724, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 483, + "xWidthAvg": 1092, + "subsets": { + "latin": { + "xWidthAvg": 1092 + }, + "thai": { + "xWidthAvg": 531 + } + } + }, + "900": { + "familyName": "Tienne", + "fullName": "Tienne Black", + "postscriptName": "Tienne-Black", + "category": "serif", + "capHeight": 1387, + "ascent": 2030, + "descent": -724, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 983, + "xWidthAvg": 1140, + "subsets": { + "latin": { + "xWidthAvg": 1140 + }, + "thai": { + "xWidthAvg": 532 + } + } + }, + "regular": { + "familyName": "Tienne", + "fullName": "Tienne Regular", + "postscriptName": "Tienne-Regular", + "category": "serif", + "capHeight": 1437, + "ascent": 2030, + "descent": -724, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 363, + "xWidthAvg": 1048, + "subsets": { + "latin": { + "xWidthAvg": 1048 + }, + "thai": { + "xWidthAvg": 531 + } + } + } + } + }, + "tillana": { + "familyName": "Tillana", + "fullName": "Tillana Regular", + "postscriptName": "Tillana-Regular", + "category": "display", + "capHeight": 732, + "ascent": 1158, + "descent": -484, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 750 + } + }, + "variants": { + "500": { + "familyName": "Tillana", + "fullName": "Tillana Medium", + "postscriptName": "Tillana-Medium", + "category": "display", + "capHeight": 738, + "ascent": 1158, + "descent": -484, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 552, + "xWidthAvg": 481, + "subsets": { + "latin": { + "xWidthAvg": 481 + }, + "thai": { + "xWidthAvg": 751 + } + } + }, + "600": { + "familyName": "Tillana", + "fullName": "Tillana SemiBold", + "postscriptName": "Tillana-SemiBold", + "category": "display", + "capHeight": 744, + "ascent": 1158, + "descent": -484, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 558, + "xWidthAvg": 522, + "subsets": { + "latin": { + "xWidthAvg": 522 + }, + "thai": { + "xWidthAvg": 753 + } + } + }, + "700": { + "familyName": "Tillana", + "fullName": "Tillana Bold", + "postscriptName": "Tillana-Bold", + "category": "display", + "capHeight": 751, + "ascent": 1158, + "descent": -484, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 566, + "xWidthAvg": 568, + "subsets": { + "latin": { + "xWidthAvg": 568 + }, + "thai": { + "xWidthAvg": 754 + } + } + }, + "800": { + "familyName": "Tillana", + "fullName": "Tillana ExtraBold", + "postscriptName": "Tillana-ExtraBold", + "category": "display", + "capHeight": 758, + "ascent": 1158, + "descent": -484, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 621, + "subsets": { + "latin": { + "xWidthAvg": 621 + }, + "thai": { + "xWidthAvg": 756 + } + } + }, + "regular": { + "familyName": "Tillana", + "fullName": "Tillana Regular", + "postscriptName": "Tillana-Regular", + "category": "display", + "capHeight": 732, + "ascent": 1158, + "descent": -484, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 546, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 750 + } + } + } + } + }, + "tiltNeon": { + "familyName": "Tilt Neon", + "fullName": "Tilt Neon Regular", + "postscriptName": "TiltNeon-Regular", + "category": "display", + "capHeight": 680, + "ascent": 990, + "descent": -272, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Tilt Neon", + "fullName": "Tilt Neon Regular", + "postscriptName": "TiltNeon-Regular", + "category": "display", + "capHeight": 680, + "ascent": 990, + "descent": -272, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "tiltPrism": { + "familyName": "Tilt Prism", + "fullName": "Tilt Prism Regular", + "postscriptName": "TiltPrism-Regular", + "category": "display", + "capHeight": 680, + "ascent": 990, + "descent": -272, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 496, + "subsets": { + "latin": { + "xWidthAvg": 496 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Tilt Prism", + "fullName": "Tilt Prism Regular", + "postscriptName": "TiltPrism-Regular", + "category": "display", + "capHeight": 680, + "ascent": 990, + "descent": -272, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 496, + "subsets": { + "latin": { + "xWidthAvg": 496 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "tiltWarp": { + "familyName": "Tilt Warp", + "fullName": "Tilt Warp Regular", + "postscriptName": "TiltWarp-Regular", + "category": "display", + "capHeight": 680, + "ascent": 990, + "descent": -272, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Tilt Warp", + "fullName": "Tilt Warp Regular", + "postscriptName": "TiltWarp-Regular", + "category": "display", + "capHeight": 680, + "ascent": 990, + "descent": -272, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "timesNewRoman": { + "familyName": "Times New Roman", + "fullName": "Times New Roman", + "postscriptName": "TimesNewRomanPSMT", + "category": "serif", + "capHeight": 1356, + "ascent": 1825, + "descent": -443, + "lineGap": 87, + "unitsPerEm": 2048, + "xHeight": 916, + "xWidthAvg": 832, + "subsets": { + "latin": { + "xWidthAvg": 832 + }, + "thai": { + "xWidthAvg": 1593 + } + }, + "variants": { + "700": { + "familyName": "Times New Roman", + "fullName": "Times New Roman Bold", + "postscriptName": "TimesNewRomanPS-BoldMT", + "category": "serif", + "capHeight": 1356, + "ascent": 1825, + "descent": -443, + "lineGap": 87, + "unitsPerEm": 2048, + "xHeight": 935, + "xWidthAvg": 886, + "subsets": { + "latin": { + "xWidthAvg": 886 + }, + "thai": { + "xWidthAvg": 1593 + } + } + }, + "regular": { + "familyName": "Times New Roman", + "fullName": "Times New Roman", + "postscriptName": "TimesNewRomanPSMT", + "category": "serif", + "capHeight": 1356, + "ascent": 1825, + "descent": -443, + "lineGap": 87, + "unitsPerEm": 2048, + "xHeight": 916, + "xWidthAvg": 832, + "subsets": { + "latin": { + "xWidthAvg": 832 + }, + "thai": { + "xWidthAvg": 1593 + } + } + }, + "italic": { + "familyName": "Times New Roman", + "fullName": "Times New Roman Italic", + "postscriptName": "TimesNewRomanPS-ItalicMT", + "category": "serif", + "capHeight": 1356, + "ascent": 1825, + "descent": -443, + "lineGap": 87, + "unitsPerEm": 2048, + "xHeight": 881, + "xWidthAvg": 836, + "subsets": { + "latin": { + "xWidthAvg": 836 + }, + "thai": { + "xWidthAvg": 1593 + } + } + }, + "700italic": { + "familyName": "Times New Roman", + "fullName": "Times New Roman Bold Italic", + "postscriptName": "TimesNewRomanPS-BoldItalicMT", + "category": "serif", + "capHeight": 1356, + "ascent": 1825, + "descent": -443, + "lineGap": 87, + "unitsPerEm": 2048, + "xHeight": 899, + "xWidthAvg": 857, + "subsets": { + "latin": { + "xWidthAvg": 857 + }, + "thai": { + "xWidthAvg": 1593 + } + } + } + } + }, + "timmana": { + "familyName": "Timmana", + "fullName": "Timmana", + "postscriptName": "Timmana", + "category": "sans-serif", + "capHeight": 454, + "ascent": 668, + "descent": -554, + "lineGap": 0, + "unitsPerEm": 750, + "xHeight": 354, + "xWidthAvg": 301, + "subsets": { + "latin": { + "xWidthAvg": 301 + }, + "thai": { + "xWidthAvg": 558 + } + }, + "variants": { + "regular": { + "familyName": "Timmana", + "fullName": "Timmana", + "postscriptName": "Timmana", + "category": "sans-serif", + "capHeight": 454, + "ascent": 668, + "descent": -554, + "lineGap": 0, + "unitsPerEm": 750, + "xHeight": 354, + "xWidthAvg": 301, + "subsets": { + "latin": { + "xWidthAvg": 301 + }, + "thai": { + "xWidthAvg": 558 + } + } + } + } + }, + "tinos": { + "familyName": "Tinos", + "fullName": "Tinos Regular", + "postscriptName": "Tinos-Regular", + "category": "serif", + "capHeight": 1341, + "ascent": 1825, + "descent": -443, + "lineGap": 87, + "unitsPerEm": 2048, + "xHeight": 940, + "xWidthAvg": 832, + "subsets": { + "latin": { + "xWidthAvg": 832 + }, + "thai": { + "xWidthAvg": 1593 + } + }, + "variants": { + "700": { + "familyName": "Tinos", + "fullName": "Tinos Bold", + "postscriptName": "Tinos-Bold", + "category": "serif", + "capHeight": 1341, + "ascent": 1825, + "descent": -443, + "lineGap": 87, + "unitsPerEm": 2048, + "xHeight": 940, + "xWidthAvg": 886, + "subsets": { + "latin": { + "xWidthAvg": 886 + }, + "thai": { + "xWidthAvg": 1593 + } + } + }, + "regular": { + "familyName": "Tinos", + "fullName": "Tinos Regular", + "postscriptName": "Tinos-Regular", + "category": "serif", + "capHeight": 1341, + "ascent": 1825, + "descent": -443, + "lineGap": 87, + "unitsPerEm": 2048, + "xHeight": 940, + "xWidthAvg": 832, + "subsets": { + "latin": { + "xWidthAvg": 832 + }, + "thai": { + "xWidthAvg": 1593 + } + } + }, + "italic": { + "familyName": "Tinos", + "fullName": "Tinos Italic", + "postscriptName": "Tinos-Italic", + "category": "serif", + "capHeight": 1341, + "ascent": 1825, + "descent": -443, + "lineGap": 87, + "unitsPerEm": 2048, + "xHeight": 940, + "xWidthAvg": 836, + "subsets": { + "latin": { + "xWidthAvg": 836 + }, + "thai": { + "xWidthAvg": 1593 + } + } + }, + "700italic": { + "familyName": "Tinos", + "fullName": "Tinos Bold Italic", + "postscriptName": "Tinos-BoldItalic", + "category": "serif", + "capHeight": 1341, + "ascent": 1825, + "descent": -443, + "lineGap": 87, + "unitsPerEm": 2048, + "xHeight": 941, + "xWidthAvg": 857, + "subsets": { + "latin": { + "xWidthAvg": 857 + }, + "thai": { + "xWidthAvg": 1593 + } + } + } + } + }, + "tiny5": { + "familyName": "Tiny5", + "fullName": "Tiny5 Regular", + "postscriptName": "Tiny5-Regular", + "category": "sans-serif", + "capHeight": 640, + "ascent": 896, + "descent": -256, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 512, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 768 + } + }, + "variants": { + "regular": { + "familyName": "Tiny5", + "fullName": "Tiny5 Regular", + "postscriptName": "Tiny5-Regular", + "category": "sans-serif", + "capHeight": 640, + "ascent": 896, + "descent": -256, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 512, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 768 + } + } + } + } + }, + "tiroBangla": { + "familyName": "Tiro Bangla", + "fullName": "Tiro Bangla Regular", + "postscriptName": "TiroBangla-Regular", + "category": "serif", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 330, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 464 + } + }, + "variants": { + "regular": { + "familyName": "Tiro Bangla", + "fullName": "Tiro Bangla Regular", + "postscriptName": "TiroBangla-Regular", + "category": "serif", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 330, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 464 + } + } + }, + "italic": { + "familyName": "Tiro Bangla", + "fullName": "Tiro Bangla Italic", + "postscriptName": "TiroBangla-Italic", + "category": "serif", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 330, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 464 + } + } + } + } + }, + "tiroDevanagariHindi": { + "familyName": "Tiro Devanagari Hindi", + "fullName": "Tiro Devanagari Hindi Regular", + "postscriptName": "TiroDevaHindi-Regular", + "category": "serif", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 330, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 464 + } + }, + "variants": { + "regular": { + "familyName": "Tiro Devanagari Hindi", + "fullName": "Tiro Devanagari Hindi Regular", + "postscriptName": "TiroDevaHindi-Regular", + "category": "serif", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 330, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 464 + } + } + }, + "italic": { + "familyName": "Tiro Devanagari Hindi", + "fullName": "Tiro Devanagari Hindi Italic", + "postscriptName": "TiroDevaHindi-Italic", + "category": "serif", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 330, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 464 + } + } + } + } + }, + "tiroDevanagariMarathi": { + "familyName": "Tiro Devanagari Marathi", + "fullName": "Tiro Devanagari Marathi Regular", + "postscriptName": "TiroDevaMarathi-Regular", + "category": "serif", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 330, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 464 + } + }, + "variants": { + "regular": { + "familyName": "Tiro Devanagari Marathi", + "fullName": "Tiro Devanagari Marathi Regular", + "postscriptName": "TiroDevaMarathi-Regular", + "category": "serif", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 330, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 464 + } + } + }, + "italic": { + "familyName": "Tiro Devanagari Marathi", + "fullName": "Tiro Devanagari Marathi Italic", + "postscriptName": "TiroDevaMarathi-Italic", + "category": "serif", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 330, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 464 + } + } + } + } + }, + "tiroDevanagariSanskrit": { + "familyName": "Tiro Devanagari Sanskrit", + "fullName": "Tiro Devanagari Sanskrit Regular", + "postscriptName": "TiroDevaSanskrit-Regular", + "category": "serif", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 330, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 464 + } + }, + "variants": { + "regular": { + "familyName": "Tiro Devanagari Sanskrit", + "fullName": "Tiro Devanagari Sanskrit Regular", + "postscriptName": "TiroDevaSanskrit-Regular", + "category": "serif", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 330, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 464 + } + } + }, + "italic": { + "familyName": "Tiro Devanagari Sanskrit", + "fullName": "Tiro Devanagari Sanskrit Italic", + "postscriptName": "TiroDevaSanskrit-Italic", + "category": "serif", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 330, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 464 + } + } + } + } + }, + "tiroGurmukhi": { + "familyName": "Tiro Gurmukhi", + "fullName": "Tiro Gurmukhi Regular", + "postscriptName": "TiroGurmukhi-Regular", + "category": "serif", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 464 + } + }, + "variants": { + "regular": { + "familyName": "Tiro Gurmukhi", + "fullName": "Tiro Gurmukhi Regular", + "postscriptName": "TiroGurmukhi-Regular", + "category": "serif", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 464 + } + } + }, + "italic": { + "familyName": "Tiro Gurmukhi", + "fullName": "Tiro Gurmukhi Italic", + "postscriptName": "TiroGurmukhi-Italic", + "category": "serif", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 464 + } + } + } + } + }, + "tiroKannada": { + "familyName": "Tiro Kannada", + "fullName": "Tiro Kannada Regular", + "postscriptName": "TiroKannada-Regular", + "category": "serif", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 794, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 464 + } + }, + "variants": { + "regular": { + "familyName": "Tiro Kannada", + "fullName": "Tiro Kannada Regular", + "postscriptName": "TiroKannada-Regular", + "category": "serif", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 794, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 464 + } + } + }, + "italic": { + "familyName": "Tiro Kannada", + "fullName": "Tiro Kannada Italic", + "postscriptName": "TiroKannada-Italic", + "category": "serif", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 794, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 464 + } + } + } + } + }, + "tiroTamil": { + "familyName": "Tiro Tamil", + "fullName": "Tiro Tamil Regular", + "postscriptName": "TiroTamil-Regular", + "category": "serif", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 436, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 464 + } + }, + "variants": { + "regular": { + "familyName": "Tiro Tamil", + "fullName": "Tiro Tamil Regular", + "postscriptName": "TiroTamil-Regular", + "category": "serif", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 436, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 464 + } + } + }, + "italic": { + "familyName": "Tiro Tamil", + "fullName": "Tiro Tamil Italic", + "postscriptName": "TiroTamil-Italic", + "category": "serif", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 436, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 464 + } + } + } + } + }, + "tiroTelugu": { + "familyName": "Tiro Telugu", + "fullName": "Tiro Telugu Regular", + "postscriptName": "TiroTelugu-Regular", + "category": "serif", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 794, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 464 + } + }, + "variants": { + "regular": { + "familyName": "Tiro Telugu", + "fullName": "Tiro Telugu Regular", + "postscriptName": "TiroTelugu-Regular", + "category": "serif", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 794, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 464 + } + } + }, + "italic": { + "familyName": "Tiro Telugu", + "fullName": "Tiro Telugu Italic", + "postscriptName": "TiroTelugu-Italic", + "category": "serif", + "capHeight": 699, + "ascent": 755, + "descent": -245, + "lineGap": 794, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 464 + } + } + } + } + }, + "titanOne": { + "familyName": "Titan One", + "fullName": "Titan One", + "postscriptName": "TitanOne", + "category": "display", + "capHeight": 710, + "ascent": 970, + "descent": -175, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 580, + "xWidthAvg": 544, + "subsets": { + "latin": { + "xWidthAvg": 544 + }, + "thai": { + "xWidthAvg": 300 + } + }, + "variants": { + "regular": { + "familyName": "Titan One", + "fullName": "Titan One", + "postscriptName": "TitanOne", + "category": "display", + "capHeight": 710, + "ascent": 970, + "descent": -175, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 580, + "xWidthAvg": 544, + "subsets": { + "latin": { + "xWidthAvg": 544 + }, + "thai": { + "xWidthAvg": 300 + } + } + } + } + }, + "titilliumWeb": { + "familyName": "Titillium Web", + "fullName": "Titillium Web Regular", + "postscriptName": "TitilliumWeb-Regular", + "category": "sans-serif", + "capHeight": 692, + "ascent": 1133, + "descent": -388, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 421, + "subsets": { + "latin": { + "xWidthAvg": 421 + }, + "thai": { + "xWidthAvg": 235 + } + }, + "variants": { + "200": { + "familyName": "Titillium Web", + "fullName": "Titillium Web ExtraLight", + "postscriptName": "TitilliumWeb-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1133, + "descent": -388, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 235 + } + } + }, + "300": { + "familyName": "Titillium Web", + "fullName": "Titillium Web Light", + "postscriptName": "TitilliumWeb-Light", + "category": "sans-serif", + "capHeight": 695, + "ascent": 1133, + "descent": -388, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 418, + "subsets": { + "latin": { + "xWidthAvg": 418 + }, + "thai": { + "xWidthAvg": 235 + } + } + }, + "600": { + "familyName": "Titillium Web", + "fullName": "Titillium Web SemiBold", + "postscriptName": "TitilliumWeb-SemiBold", + "category": "sans-serif", + "capHeight": 685, + "ascent": 1133, + "descent": -388, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 235 + } + } + }, + "700": { + "familyName": "Titillium Web", + "fullName": "Titillium Web Bold", + "postscriptName": "TitilliumWeb-Bold", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1133, + "descent": -388, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 235 + } + } + }, + "900": { + "familyName": "Titillium Web", + "fullName": "Titillium Web Black", + "postscriptName": "TitilliumWeb-Black", + "category": "sans-serif", + "capHeight": 670, + "ascent": 1133, + "descent": -388, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 505, + "xWidthAvg": 453, + "subsets": { + "latin": { + "xWidthAvg": 453 + }, + "thai": { + "xWidthAvg": 235 + } + } + }, + "regular": { + "familyName": "Titillium Web", + "fullName": "Titillium Web Regular", + "postscriptName": "TitilliumWeb-Regular", + "category": "sans-serif", + "capHeight": 692, + "ascent": 1133, + "descent": -388, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 421, + "subsets": { + "latin": { + "xWidthAvg": 421 + }, + "thai": { + "xWidthAvg": 235 + } + } + }, + "italic": { + "familyName": "Titillium Web", + "fullName": "Titillium Web Italic", + "postscriptName": "TitilliumWeb-Italic", + "category": "sans-serif", + "capHeight": 692, + "ascent": 1133, + "descent": -388, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 396, + "subsets": { + "latin": { + "xWidthAvg": 396 + }, + "thai": { + "xWidthAvg": 223 + } + } + }, + "700italic": { + "familyName": "Titillium Web", + "fullName": "Titillium Web Bold Italic", + "postscriptName": "TitilliumWeb-BoldItalic", + "category": "sans-serif", + "capHeight": 680, + "ascent": 1133, + "descent": -388, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 408, + "subsets": { + "latin": { + "xWidthAvg": 408 + }, + "thai": { + "xWidthAvg": 223 + } + } + }, + "600italic": { + "familyName": "Titillium Web", + "fullName": "Titillium Web SemiBold Italic", + "postscriptName": "TitilliumWeb-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 685, + "ascent": 1133, + "descent": -388, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 403, + "subsets": { + "latin": { + "xWidthAvg": 403 + }, + "thai": { + "xWidthAvg": 223 + } + } + }, + "300italic": { + "familyName": "Titillium Web", + "fullName": "Titillium Web Light Italic", + "postscriptName": "TitilliumWeb-LightItalic", + "category": "sans-serif", + "capHeight": 695, + "ascent": 1133, + "descent": -388, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 392, + "subsets": { + "latin": { + "xWidthAvg": 392 + }, + "thai": { + "xWidthAvg": 223 + } + } + }, + "200italic": { + "familyName": "Titillium Web", + "fullName": "Titillium Web ExtraLight Italic", + "postscriptName": "TitilliumWeb-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1133, + "descent": -388, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 387, + "subsets": { + "latin": { + "xWidthAvg": 387 + }, + "thai": { + "xWidthAvg": 223 + } + } + } + } + }, + "tomorrow": { + "familyName": "Tomorrow", + "fullName": "Tomorrow Regular", + "postscriptName": "Tomorrow-Regular", + "category": "sans-serif", + "capHeight": 737, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 694 + } + }, + "variants": { + "100": { + "familyName": "Tomorrow", + "fullName": "Tomorrow Thin", + "postscriptName": "Tomorrow-Thin", + "category": "sans-serif", + "capHeight": 737, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 681 + } + } + }, + "200": { + "familyName": "Tomorrow", + "fullName": "Tomorrow ExtraLight", + "postscriptName": "Tomorrow-ExtraLight", + "category": "sans-serif", + "capHeight": 737, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 683 + } + } + }, + "300": { + "familyName": "Tomorrow", + "fullName": "Tomorrow Light", + "postscriptName": "Tomorrow-Light", + "category": "sans-serif", + "capHeight": 737, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 687 + } + } + }, + "500": { + "familyName": "Tomorrow", + "fullName": "Tomorrow Medium", + "postscriptName": "Tomorrow-Medium", + "category": "sans-serif", + "capHeight": 737, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "600": { + "familyName": "Tomorrow", + "fullName": "Tomorrow SemiBold", + "postscriptName": "Tomorrow-SemiBold", + "category": "sans-serif", + "capHeight": 737, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 710 + } + } + }, + "700": { + "familyName": "Tomorrow", + "fullName": "Tomorrow Bold", + "postscriptName": "Tomorrow-Bold", + "category": "sans-serif", + "capHeight": 737, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 526, + "subsets": { + "latin": { + "xWidthAvg": 526 + }, + "thai": { + "xWidthAvg": 719 + } + } + }, + "800": { + "familyName": "Tomorrow", + "fullName": "Tomorrow ExtraBold", + "postscriptName": "Tomorrow-ExtraBold", + "category": "sans-serif", + "capHeight": 737, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 562, + "subsets": { + "latin": { + "xWidthAvg": 562 + }, + "thai": { + "xWidthAvg": 722 + } + } + }, + "900": { + "familyName": "Tomorrow", + "fullName": "Tomorrow Black", + "postscriptName": "Tomorrow-Black", + "category": "sans-serif", + "capHeight": 737, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 571, + "subsets": { + "latin": { + "xWidthAvg": 571 + }, + "thai": { + "xWidthAvg": 726 + } + } + }, + "regular": { + "familyName": "Tomorrow", + "fullName": "Tomorrow Regular", + "postscriptName": "Tomorrow-Regular", + "category": "sans-serif", + "capHeight": 737, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 694 + } + } + }, + "italic": { + "familyName": "Tomorrow", + "fullName": "Tomorrow Italic", + "postscriptName": "Tomorrow-Italic", + "category": "sans-serif", + "capHeight": 737, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 688 + } + } + }, + "900italic": { + "familyName": "Tomorrow", + "fullName": "Tomorrow Black Italic", + "postscriptName": "Tomorrow-BlackItalic", + "category": "sans-serif", + "capHeight": 737, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 571, + "subsets": { + "latin": { + "xWidthAvg": 571 + }, + "thai": { + "xWidthAvg": 726 + } + } + }, + "800italic": { + "familyName": "Tomorrow", + "fullName": "Tomorrow ExtraBold Italic", + "postscriptName": "Tomorrow-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 737, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 562, + "subsets": { + "latin": { + "xWidthAvg": 562 + }, + "thai": { + "xWidthAvg": 722 + } + } + }, + "700italic": { + "familyName": "Tomorrow", + "fullName": "Tomorrow Bold Italic", + "postscriptName": "Tomorrow-BoldItalic", + "category": "sans-serif", + "capHeight": 737, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 526, + "subsets": { + "latin": { + "xWidthAvg": 526 + }, + "thai": { + "xWidthAvg": 719 + } + } + }, + "600italic": { + "familyName": "Tomorrow", + "fullName": "Tomorrow SemiBold Italic", + "postscriptName": "Tomorrow-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 737, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 510, + "subsets": { + "latin": { + "xWidthAvg": 510 + }, + "thai": { + "xWidthAvg": 710 + } + } + }, + "500italic": { + "familyName": "Tomorrow", + "fullName": "Tomorrow Medium Italic", + "postscriptName": "Tomorrow-MediumItalic", + "category": "sans-serif", + "capHeight": 737, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 693 + } + } + }, + "300italic": { + "familyName": "Tomorrow", + "fullName": "Tomorrow Light Italic", + "postscriptName": "Tomorrow-LightItalic", + "category": "sans-serif", + "capHeight": 737, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 684 + } + } + }, + "200italic": { + "familyName": "Tomorrow", + "fullName": "Tomorrow ExtraLight Italic", + "postscriptName": "Tomorrow-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 737, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 457, + "subsets": { + "latin": { + "xWidthAvg": 457 + }, + "thai": { + "xWidthAvg": 681 + } + } + }, + "100italic": { + "familyName": "Tomorrow", + "fullName": "Tomorrow Thin Italic", + "postscriptName": "Tomorrow-ThinItalic", + "category": "sans-serif", + "capHeight": 737, + "ascent": 1000, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 679 + } + } + } + } + }, + "tourney": { + "familyName": "Tourney", + "fullName": "Tourney Regular", + "postscriptName": "Tourney-Regular", + "category": "display", + "capHeight": 1400, + "ascent": 1800, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 1061, + "subsets": { + "latin": { + "xWidthAvg": 1061 + }, + "thai": { + "xWidthAvg": 659 + } + }, + "variants": { + "100": { + "familyName": "Tourney", + "fullName": "Tourney Thin", + "postscriptName": "Tourney-Thin", + "category": "display", + "capHeight": 1400, + "ascent": 1800, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 1061, + "subsets": { + "latin": { + "xWidthAvg": 1061 + }, + "thai": { + "xWidthAvg": 649 + } + } + }, + "200": { + "familyName": "Tourney", + "fullName": "Tourney ExtraLight", + "postscriptName": "Tourney-ExtraLight", + "category": "display", + "capHeight": 1400, + "ascent": 1800, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 1061, + "subsets": { + "latin": { + "xWidthAvg": 1061 + }, + "thai": { + "xWidthAvg": 652 + } + } + }, + "300": { + "familyName": "Tourney", + "fullName": "Tourney Light", + "postscriptName": "Tourney-Light", + "category": "display", + "capHeight": 1400, + "ascent": 1800, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 1061, + "subsets": { + "latin": { + "xWidthAvg": 1061 + }, + "thai": { + "xWidthAvg": 656 + } + } + }, + "500": { + "familyName": "Tourney", + "fullName": "Tourney Medium", + "postscriptName": "Tourney-Medium", + "category": "display", + "capHeight": 1400, + "ascent": 1800, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 1061, + "subsets": { + "latin": { + "xWidthAvg": 1061 + }, + "thai": { + "xWidthAvg": 662 + } + } + }, + "600": { + "familyName": "Tourney", + "fullName": "Tourney SemiBold", + "postscriptName": "Tourney-SemiBold", + "category": "display", + "capHeight": 1400, + "ascent": 1800, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 1061, + "subsets": { + "latin": { + "xWidthAvg": 1061 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "700": { + "familyName": "Tourney", + "fullName": "Tourney Bold", + "postscriptName": "Tourney-Bold", + "category": "display", + "capHeight": 1400, + "ascent": 1800, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 1061, + "subsets": { + "latin": { + "xWidthAvg": 1061 + }, + "thai": { + "xWidthAvg": 669 + } + } + }, + "800": { + "familyName": "Tourney", + "fullName": "Tourney ExtraBold", + "postscriptName": "Tourney-ExtraBold", + "category": "display", + "capHeight": 1400, + "ascent": 1800, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 1061, + "subsets": { + "latin": { + "xWidthAvg": 1061 + }, + "thai": { + "xWidthAvg": 669 + } + } + }, + "900": { + "familyName": "Tourney", + "fullName": "Tourney Black", + "postscriptName": "Tourney-Black", + "category": "display", + "capHeight": 1400, + "ascent": 1800, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 1061, + "subsets": { + "latin": { + "xWidthAvg": 1061 + }, + "thai": { + "xWidthAvg": 669 + } + } + }, + "regular": { + "familyName": "Tourney", + "fullName": "Tourney Regular", + "postscriptName": "Tourney-Regular", + "category": "display", + "capHeight": 1400, + "ascent": 1800, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 1061, + "subsets": { + "latin": { + "xWidthAvg": 1061 + }, + "thai": { + "xWidthAvg": 659 + } + } + }, + "italic": { + "familyName": "Tourney", + "fullName": "Tourney Italic", + "postscriptName": "Tourney-Italic", + "category": "display", + "capHeight": 1400, + "ascent": 1800, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 1062, + "subsets": { + "latin": { + "xWidthAvg": 1062 + }, + "thai": { + "xWidthAvg": 659 + } + } + }, + "900italic": { + "familyName": "Tourney", + "fullName": "Tourney Black Italic", + "postscriptName": "Tourney-BlackItalic", + "category": "display", + "capHeight": 1400, + "ascent": 1800, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 1062, + "subsets": { + "latin": { + "xWidthAvg": 1062 + }, + "thai": { + "xWidthAvg": 669 + } + } + }, + "800italic": { + "familyName": "Tourney", + "fullName": "Tourney ExtraBold Italic", + "postscriptName": "Tourney-ExtraBoldItalic", + "category": "display", + "capHeight": 1400, + "ascent": 1800, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 1062, + "subsets": { + "latin": { + "xWidthAvg": 1062 + }, + "thai": { + "xWidthAvg": 669 + } + } + }, + "700italic": { + "familyName": "Tourney", + "fullName": "Tourney Bold Italic", + "postscriptName": "Tourney-BoldItalic", + "category": "display", + "capHeight": 1400, + "ascent": 1800, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 1062, + "subsets": { + "latin": { + "xWidthAvg": 1062 + }, + "thai": { + "xWidthAvg": 669 + } + } + }, + "600italic": { + "familyName": "Tourney", + "fullName": "Tourney SemiBold Italic", + "postscriptName": "Tourney-SemiBoldItalic", + "category": "display", + "capHeight": 1400, + "ascent": 1800, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 1062, + "subsets": { + "latin": { + "xWidthAvg": 1062 + }, + "thai": { + "xWidthAvg": 666 + } + } + }, + "500italic": { + "familyName": "Tourney", + "fullName": "Tourney Medium Italic", + "postscriptName": "Tourney-MediumItalic", + "category": "display", + "capHeight": 1400, + "ascent": 1800, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 1062, + "subsets": { + "latin": { + "xWidthAvg": 1062 + }, + "thai": { + "xWidthAvg": 662 + } + } + }, + "300italic": { + "familyName": "Tourney", + "fullName": "Tourney Light Italic", + "postscriptName": "Tourney-LightItalic", + "category": "display", + "capHeight": 1400, + "ascent": 1800, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 1062, + "subsets": { + "latin": { + "xWidthAvg": 1062 + }, + "thai": { + "xWidthAvg": 656 + } + } + }, + "200italic": { + "familyName": "Tourney", + "fullName": "Tourney ExtraLight Italic", + "postscriptName": "Tourney-ExtraLightItalic", + "category": "display", + "capHeight": 1400, + "ascent": 1800, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 1062, + "subsets": { + "latin": { + "xWidthAvg": 1062 + }, + "thai": { + "xWidthAvg": 652 + } + } + }, + "100italic": { + "familyName": "Tourney", + "fullName": "Tourney Thin Italic", + "postscriptName": "Tourney-ThinItalic", + "category": "display", + "capHeight": 1400, + "ascent": 1800, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1080, + "xWidthAvg": 1062, + "subsets": { + "latin": { + "xWidthAvg": 1062 + }, + "thai": { + "xWidthAvg": 649 + } + } + } + } + }, + "tradeWinds": { + "familyName": "Trade Winds", + "fullName": "Trade Winds", + "postscriptName": "TradeWinds", + "category": "display", + "capHeight": 814, + "ascent": 1019, + "descent": -469, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 576, + "xWidthAvg": 522, + "subsets": { + "latin": { + "xWidthAvg": 522 + }, + "thai": { + "xWidthAvg": 317 + } + }, + "variants": { + "regular": { + "familyName": "Trade Winds", + "fullName": "Trade Winds", + "postscriptName": "TradeWinds", + "category": "display", + "capHeight": 814, + "ascent": 1019, + "descent": -469, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 576, + "xWidthAvg": 522, + "subsets": { + "latin": { + "xWidthAvg": 522 + }, + "thai": { + "xWidthAvg": 317 + } + } + } + } + }, + "trainOne": { + "familyName": "Train One", + "fullName": "Train One Regular", + "postscriptName": "TrainOne-Regular", + "category": "display", + "capHeight": 780, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 557, + "xWidthAvg": 538, + "subsets": { + "latin": { + "xWidthAvg": 538 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Train One", + "fullName": "Train One Regular", + "postscriptName": "TrainOne-Regular", + "category": "display", + "capHeight": 780, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 557, + "xWidthAvg": 538, + "subsets": { + "latin": { + "xWidthAvg": 538 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "trebuchetMS": { + "familyName": "Trebuchet MS", + "fullName": "Trebuchet MS", + "postscriptName": "TrebuchetMS", + "category": "sans-serif", + "capHeight": 1465, + "ascent": 1923, + "descent": -455, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1071, + "xWidthAvg": 934, + "subsets": { + "latin": { + "xWidthAvg": 934 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "700": { + "familyName": "Trebuchet MS", + "fullName": "Trebuchet MS Bold", + "postscriptName": "TrebuchetMS-Bold", + "category": "sans-serif", + "capHeight": 1465, + "ascent": 1923, + "descent": -455, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1071, + "xWidthAvg": 976, + "subsets": { + "latin": { + "xWidthAvg": 976 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "regular": { + "familyName": "Trebuchet MS", + "fullName": "Trebuchet MS", + "postscriptName": "TrebuchetMS", + "category": "sans-serif", + "capHeight": 1465, + "ascent": 1923, + "descent": -455, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1071, + "xWidthAvg": 934, + "subsets": { + "latin": { + "xWidthAvg": 934 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "italic": { + "familyName": "Trebuchet MS", + "fullName": "Trebuchet MS Italic", + "postscriptName": "TrebuchetMS-Italic", + "category": "sans-serif", + "capHeight": 1465, + "ascent": 1923, + "descent": -455, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1071, + "xWidthAvg": 943, + "subsets": { + "latin": { + "xWidthAvg": 943 + }, + "thai": { + "xWidthAvg": 1024 + } + } + }, + "700italic": { + "familyName": "Trebuchet MS", + "fullName": "Trebuchet MS Bold Italic", + "postscriptName": "Trebuchet-BoldItalic", + "category": "sans-serif", + "capHeight": 1465, + "ascent": 1923, + "descent": -455, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1071, + "xWidthAvg": 993, + "subsets": { + "latin": { + "xWidthAvg": 993 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "trirong": { + "familyName": "Trirong", + "fullName": "Trirong Regular", + "postscriptName": "Trirong-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 1200, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 531 + } + }, + "variants": { + "100": { + "familyName": "Trirong", + "fullName": "Trirong Thin", + "postscriptName": "Trirong-Thin", + "category": "serif", + "capHeight": 700, + "ascent": 1200, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 436, + "subsets": { + "latin": { + "xWidthAvg": 436 + }, + "thai": { + "xWidthAvg": 487 + } + } + }, + "200": { + "familyName": "Trirong", + "fullName": "Trirong ExtraLight", + "postscriptName": "Trirong-ExtraLight", + "category": "serif", + "capHeight": 700, + "ascent": 1200, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 501 + } + } + }, + "300": { + "familyName": "Trirong", + "fullName": "Trirong Light", + "postscriptName": "Trirong-Light", + "category": "serif", + "capHeight": 700, + "ascent": 1200, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 517 + } + } + }, + "500": { + "familyName": "Trirong", + "fullName": "Trirong Medium", + "postscriptName": "Trirong-Medium", + "category": "serif", + "capHeight": 700, + "ascent": 1200, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 494, + "subsets": { + "latin": { + "xWidthAvg": 494 + }, + "thai": { + "xWidthAvg": 546 + } + } + }, + "600": { + "familyName": "Trirong", + "fullName": "Trirong SemiBold", + "postscriptName": "Trirong-SemiBold", + "category": "serif", + "capHeight": 700, + "ascent": 1200, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 508, + "subsets": { + "latin": { + "xWidthAvg": 508 + }, + "thai": { + "xWidthAvg": 561 + } + } + }, + "700": { + "familyName": "Trirong", + "fullName": "Trirong Bold", + "postscriptName": "Trirong-Bold", + "category": "serif", + "capHeight": 700, + "ascent": 1200, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 523, + "subsets": { + "latin": { + "xWidthAvg": 523 + }, + "thai": { + "xWidthAvg": 576 + } + } + }, + "800": { + "familyName": "Trirong", + "fullName": "Trirong ExtraBold", + "postscriptName": "Trirong-ExtraBold", + "category": "serif", + "capHeight": 700, + "ascent": 1200, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 538, + "subsets": { + "latin": { + "xWidthAvg": 538 + }, + "thai": { + "xWidthAvg": 591 + } + } + }, + "900": { + "familyName": "Trirong", + "fullName": "Trirong Black", + "postscriptName": "Trirong-Black", + "category": "serif", + "capHeight": 700, + "ascent": 1200, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 553, + "subsets": { + "latin": { + "xWidthAvg": 553 + }, + "thai": { + "xWidthAvg": 606 + } + } + }, + "regular": { + "familyName": "Trirong", + "fullName": "Trirong Regular", + "postscriptName": "Trirong-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 1200, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 531 + } + } + }, + "italic": { + "familyName": "Trirong", + "fullName": "Trirong Italic", + "postscriptName": "Trirong-Italic", + "category": "serif", + "capHeight": 700, + "ascent": 1200, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 510 + } + } + }, + "900italic": { + "familyName": "Trirong", + "fullName": "Trirong Black Italic", + "postscriptName": "Trirong-BlackItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1200, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 533, + "subsets": { + "latin": { + "xWidthAvg": 533 + }, + "thai": { + "xWidthAvg": 582 + } + } + }, + "800italic": { + "familyName": "Trirong", + "fullName": "Trirong ExtraBold Italic", + "postscriptName": "Trirong-ExtraBoldItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1200, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 519, + "subsets": { + "latin": { + "xWidthAvg": 519 + }, + "thai": { + "xWidthAvg": 567 + } + } + }, + "700italic": { + "familyName": "Trirong", + "fullName": "Trirong Bold Italic", + "postscriptName": "Trirong-BoldItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1200, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 552 + } + } + }, + "600italic": { + "familyName": "Trirong", + "fullName": "Trirong SemiBold Italic", + "postscriptName": "Trirong-SemiBoldItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1200, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 539 + } + } + }, + "500italic": { + "familyName": "Trirong", + "fullName": "Trirong Medium Italic", + "postscriptName": "Trirong-MediumItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1200, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 476, + "subsets": { + "latin": { + "xWidthAvg": 476 + }, + "thai": { + "xWidthAvg": 524 + } + } + }, + "300italic": { + "familyName": "Trirong", + "fullName": "Trirong Light Italic", + "postscriptName": "Trirong-LightItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1200, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 496 + } + } + }, + "200italic": { + "familyName": "Trirong", + "fullName": "Trirong ExtraLight Italic", + "postscriptName": "Trirong-ExtraLightItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1200, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 433, + "subsets": { + "latin": { + "xWidthAvg": 433 + }, + "thai": { + "xWidthAvg": 481 + } + } + }, + "100italic": { + "familyName": "Trirong", + "fullName": "Trirong Thin Italic", + "postscriptName": "Trirong-ThinItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1200, + "descent": -534, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 498, + "xWidthAvg": 418, + "subsets": { + "latin": { + "xWidthAvg": 418 + }, + "thai": { + "xWidthAvg": 468 + } + } + } + } + }, + "trispace": { + "familyName": "Trispace", + "fullName": "Trispace Regular", + "postscriptName": "Trispace-Regular", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1830, + "descent": -430, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Trispace", + "fullName": "Trispace Thin", + "postscriptName": "Trispace-Thin", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1830, + "descent": -430, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Trispace", + "fullName": "Trispace ExtraLight", + "postscriptName": "Trispace-ExtraLight", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1830, + "descent": -430, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Trispace", + "fullName": "Trispace Light", + "postscriptName": "Trispace-Light", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1830, + "descent": -430, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Trispace", + "fullName": "Trispace Medium", + "postscriptName": "Trispace-Medium", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1830, + "descent": -430, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Trispace", + "fullName": "Trispace SemiBold", + "postscriptName": "Trispace-SemiBold", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1830, + "descent": -430, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Trispace", + "fullName": "Trispace Bold", + "postscriptName": "Trispace-Bold", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1830, + "descent": -430, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "800": { + "familyName": "Trispace", + "fullName": "Trispace ExtraBold", + "postscriptName": "Trispace-ExtraBold", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1830, + "descent": -430, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Trispace", + "fullName": "Trispace Regular", + "postscriptName": "Trispace-Regular", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1830, + "descent": -430, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 1229, + "subsets": { + "latin": { + "xWidthAvg": 1229 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "trocchi": { + "familyName": "Trocchi", + "fullName": "Trocchi Regular", + "postscriptName": "Trocchi-Regular", + "category": "serif", + "capHeight": 1505, + "ascent": 2085, + "descent": -576, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1073, + "xWidthAvg": 1024, + "subsets": { + "latin": { + "xWidthAvg": 1024 + }, + "thai": { + "xWidthAvg": 1320 + } + }, + "variants": { + "regular": { + "familyName": "Trocchi", + "fullName": "Trocchi Regular", + "postscriptName": "Trocchi-Regular", + "category": "serif", + "capHeight": 1505, + "ascent": 2085, + "descent": -576, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1073, + "xWidthAvg": 1024, + "subsets": { + "latin": { + "xWidthAvg": 1024 + }, + "thai": { + "xWidthAvg": 1320 + } + } + } + } + }, + "trochut": { + "familyName": "Trochut", + "fullName": "Trochut", + "postscriptName": "Trochut", + "category": "display", + "capHeight": 690, + "ascent": 967, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 355, + "subsets": { + "latin": { + "xWidthAvg": 355 + }, + "thai": { + "xWidthAvg": 200 + } + }, + "variants": { + "700": { + "familyName": "Trochut", + "fullName": "Trochut Bold", + "postscriptName": "Trochut-Bold", + "category": "display", + "capHeight": 690, + "ascent": 967, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 411, + "subsets": { + "latin": { + "xWidthAvg": 411 + }, + "thai": { + "xWidthAvg": 200 + } + } + }, + "regular": { + "familyName": "Trochut", + "fullName": "Trochut", + "postscriptName": "Trochut", + "category": "display", + "capHeight": 690, + "ascent": 967, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 355, + "subsets": { + "latin": { + "xWidthAvg": 355 + }, + "thai": { + "xWidthAvg": 200 + } + } + }, + "italic": { + "familyName": "Trochut", + "fullName": "Trochut Italic", + "postscriptName": "Trochut-Italic", + "category": "display", + "capHeight": 690, + "ascent": 967, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 355, + "subsets": { + "latin": { + "xWidthAvg": 355 + }, + "thai": { + "xWidthAvg": 200 + } + } + } + } + }, + "truculenta": { + "familyName": "Truculenta", + "fullName": "Truculenta Regular", + "postscriptName": "Truculenta-Regular", + "category": "sans-serif", + "capHeight": 693, + "ascent": 1050, + "descent": -340, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 369, + "subsets": { + "latin": { + "xWidthAvg": 369 + }, + "thai": { + "xWidthAvg": 468 + } + }, + "variants": { + "100": { + "familyName": "Truculenta", + "fullName": "Truculenta Thin", + "postscriptName": "Truculenta-Thin", + "category": "sans-serif", + "capHeight": 693, + "ascent": 1050, + "descent": -340, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 370, + "subsets": { + "latin": { + "xWidthAvg": 370 + }, + "thai": { + "xWidthAvg": 468 + } + } + }, + "200": { + "familyName": "Truculenta", + "fullName": "Truculenta ExtraLight", + "postscriptName": "Truculenta-ExtraLight", + "category": "sans-serif", + "capHeight": 693, + "ascent": 1050, + "descent": -340, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 369, + "subsets": { + "latin": { + "xWidthAvg": 369 + }, + "thai": { + "xWidthAvg": 468 + } + } + }, + "300": { + "familyName": "Truculenta", + "fullName": "Truculenta Light", + "postscriptName": "Truculenta-Light", + "category": "sans-serif", + "capHeight": 693, + "ascent": 1050, + "descent": -340, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 369, + "subsets": { + "latin": { + "xWidthAvg": 369 + }, + "thai": { + "xWidthAvg": 468 + } + } + }, + "500": { + "familyName": "Truculenta", + "fullName": "Truculenta Medium", + "postscriptName": "Truculenta-Medium", + "category": "sans-serif", + "capHeight": 693, + "ascent": 1050, + "descent": -340, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 368, + "subsets": { + "latin": { + "xWidthAvg": 368 + }, + "thai": { + "xWidthAvg": 468 + } + } + }, + "600": { + "familyName": "Truculenta", + "fullName": "Truculenta SemiBold", + "postscriptName": "Truculenta-SemiBold", + "category": "sans-serif", + "capHeight": 693, + "ascent": 1050, + "descent": -340, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 367, + "subsets": { + "latin": { + "xWidthAvg": 367 + }, + "thai": { + "xWidthAvg": 468 + } + } + }, + "700": { + "familyName": "Truculenta", + "fullName": "Truculenta Bold", + "postscriptName": "Truculenta-Bold", + "category": "sans-serif", + "capHeight": 693, + "ascent": 1050, + "descent": -340, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 365, + "subsets": { + "latin": { + "xWidthAvg": 365 + }, + "thai": { + "xWidthAvg": 468 + } + } + }, + "800": { + "familyName": "Truculenta", + "fullName": "Truculenta ExtraBold", + "postscriptName": "Truculenta-ExtraBold", + "category": "sans-serif", + "capHeight": 693, + "ascent": 1050, + "descent": -340, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 364, + "subsets": { + "latin": { + "xWidthAvg": 364 + }, + "thai": { + "xWidthAvg": 468 + } + } + }, + "900": { + "familyName": "Truculenta", + "fullName": "Truculenta Black", + "postscriptName": "Truculenta-Black", + "category": "sans-serif", + "capHeight": 693, + "ascent": 1050, + "descent": -340, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 363, + "subsets": { + "latin": { + "xWidthAvg": 363 + }, + "thai": { + "xWidthAvg": 468 + } + } + }, + "regular": { + "familyName": "Truculenta", + "fullName": "Truculenta Regular", + "postscriptName": "Truculenta-Regular", + "category": "sans-serif", + "capHeight": 693, + "ascent": 1050, + "descent": -340, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 369, + "subsets": { + "latin": { + "xWidthAvg": 369 + }, + "thai": { + "xWidthAvg": 468 + } + } + } + } + }, + "trykker": { + "familyName": "Trykker", + "fullName": "Trykker Regular", + "postscriptName": "Trykker-Regular", + "category": "serif", + "capHeight": 1492, + "ascent": 2022, + "descent": -538, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1013, + "xWidthAvg": 998, + "subsets": { + "latin": { + "xWidthAvg": 998 + }, + "thai": { + "xWidthAvg": 532 + } + }, + "variants": { + "regular": { + "familyName": "Trykker", + "fullName": "Trykker Regular", + "postscriptName": "Trykker-Regular", + "category": "serif", + "capHeight": 1492, + "ascent": 2022, + "descent": -538, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1013, + "xWidthAvg": 998, + "subsets": { + "latin": { + "xWidthAvg": 998 + }, + "thai": { + "xWidthAvg": 532 + } + } + } + } + }, + "tsukimiRounded": { + "familyName": "Tsukimi Rounded", + "fullName": "Tsukimi Rounded Regular", + "postscriptName": "TsukimiRounded-Regular", + "category": "sans-serif", + "capHeight": 800, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 497, + "subsets": { + "latin": { + "xWidthAvg": 497 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "300": { + "familyName": "Tsukimi Rounded", + "fullName": "Tsukimi Rounded Light", + "postscriptName": "TsukimiRounded-Light", + "category": "sans-serif", + "capHeight": 800, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Tsukimi Rounded", + "fullName": "Tsukimi Rounded Medium", + "postscriptName": "TsukimiRounded-Medium", + "category": "sans-serif", + "capHeight": 800, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 508, + "subsets": { + "latin": { + "xWidthAvg": 508 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Tsukimi Rounded", + "fullName": "Tsukimi Rounded SemiBold", + "postscriptName": "TsukimiRounded-SemiBold", + "category": "sans-serif", + "capHeight": 800, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 520, + "subsets": { + "latin": { + "xWidthAvg": 520 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Tsukimi Rounded", + "fullName": "Tsukimi Rounded Bold", + "postscriptName": "TsukimiRounded-Bold", + "category": "sans-serif", + "capHeight": 800, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 531, + "subsets": { + "latin": { + "xWidthAvg": 531 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Tsukimi Rounded", + "fullName": "Tsukimi Rounded Regular", + "postscriptName": "TsukimiRounded-Regular", + "category": "sans-serif", + "capHeight": 800, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 497, + "subsets": { + "latin": { + "xWidthAvg": 497 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "tulpenOne": { + "familyName": "Tulpen One", + "fullName": "Tulpen One", + "postscriptName": "TulpenOne-Regular", + "category": "display", + "capHeight": 1393, + "ascent": 1767, + "descent": -465, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1018, + "xWidthAvg": 398, + "subsets": { + "latin": { + "xWidthAvg": 398 + }, + "thai": { + "xWidthAvg": 271 + } + }, + "variants": { + "regular": { + "familyName": "Tulpen One", + "fullName": "Tulpen One", + "postscriptName": "TulpenOne-Regular", + "category": "display", + "capHeight": 1393, + "ascent": 1767, + "descent": -465, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1018, + "xWidthAvg": 398, + "subsets": { + "latin": { + "xWidthAvg": 398 + }, + "thai": { + "xWidthAvg": 271 + } + } + } + } + }, + "turretRoad": { + "familyName": "Turret Road", + "fullName": "Turret Road Regular", + "postscriptName": "TurretRoad-Regular", + "category": "display", + "capHeight": 700, + "ascent": 850, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 579 + } + }, + "variants": { + "200": { + "familyName": "Turret Road", + "fullName": "Turret Road ExtraLight", + "postscriptName": "TurretRoad-ExtraLight", + "category": "display", + "capHeight": 700, + "ascent": 850, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 579 + } + } + }, + "300": { + "familyName": "Turret Road", + "fullName": "Turret Road Light", + "postscriptName": "TurretRoad-Light", + "category": "display", + "capHeight": 700, + "ascent": 850, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 579 + } + } + }, + "500": { + "familyName": "Turret Road", + "fullName": "Turret Road Medium", + "postscriptName": "TurretRoad-Medium", + "category": "display", + "capHeight": 700, + "ascent": 850, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 579 + } + } + }, + "700": { + "familyName": "Turret Road", + "fullName": "Turret Road Bold", + "postscriptName": "TurretRoad-Bold", + "category": "display", + "capHeight": 700, + "ascent": 850, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 579 + } + } + }, + "800": { + "familyName": "Turret Road", + "fullName": "Turret Road ExtraBold", + "postscriptName": "TurretRoad-ExtraBold", + "category": "display", + "capHeight": 700, + "ascent": 850, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 579 + } + } + }, + "regular": { + "familyName": "Turret Road", + "fullName": "Turret Road Regular", + "postscriptName": "TurretRoad-Regular", + "category": "display", + "capHeight": 700, + "ascent": 850, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 579 + } + } + } + } + }, + "twinkleStar": { + "familyName": "Twinkle Star", + "fullName": "Twinkle Star Regular", + "postscriptName": "TwinkleStar-Regular", + "category": "handwriting", + "capHeight": 705, + "ascent": 930, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 423, + "subsets": { + "latin": { + "xWidthAvg": 423 + }, + "thai": { + "xWidthAvg": 518 + } + }, + "variants": { + "regular": { + "familyName": "Twinkle Star", + "fullName": "Twinkle Star Regular", + "postscriptName": "TwinkleStar-Regular", + "category": "handwriting", + "capHeight": 705, + "ascent": 930, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 423, + "subsets": { + "latin": { + "xWidthAvg": 423 + }, + "thai": { + "xWidthAvg": 518 + } + } + } + } + }, + "ubuntu": { + "familyName": "Ubuntu", + "fullName": "Ubuntu Regular", + "postscriptName": "Ubuntu-Regular", + "category": "sans-serif", + "capHeight": 693, + "ascent": 932, + "descent": -189, + "lineGap": 28, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "300": { + "familyName": "Ubuntu", + "fullName": "Ubuntu Light", + "postscriptName": "Ubuntu-Light", + "category": "sans-serif", + "capHeight": 693, + "ascent": 932, + "descent": -189, + "lineGap": 28, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Ubuntu", + "fullName": "Ubuntu Medium", + "postscriptName": "Ubuntu-Medium", + "category": "sans-serif", + "capHeight": 693, + "ascent": 932, + "descent": -189, + "lineGap": 28, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Ubuntu", + "fullName": "Ubuntu Bold", + "postscriptName": "Ubuntu-Bold", + "category": "sans-serif", + "capHeight": 693, + "ascent": 932, + "descent": -189, + "lineGap": 28, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Ubuntu", + "fullName": "Ubuntu Regular", + "postscriptName": "Ubuntu-Regular", + "category": "sans-serif", + "capHeight": 693, + "ascent": 932, + "descent": -189, + "lineGap": 28, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Ubuntu", + "fullName": "Ubuntu Italic", + "postscriptName": "Ubuntu-Italic", + "category": "sans-serif", + "capHeight": 693, + "ascent": 932, + "descent": -189, + "lineGap": 28, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700italic": { + "familyName": "Ubuntu", + "fullName": "Ubuntu Bold Italic", + "postscriptName": "Ubuntu-BoldItalic", + "category": "sans-serif", + "capHeight": 693, + "ascent": 932, + "descent": -189, + "lineGap": 28, + "unitsPerEm": 1000, + "xHeight": 526, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500italic": { + "familyName": "Ubuntu", + "fullName": "Ubuntu Medium Italic", + "postscriptName": "Ubuntu-MediumItalic", + "category": "sans-serif", + "capHeight": 693, + "ascent": 932, + "descent": -189, + "lineGap": 28, + "unitsPerEm": 1000, + "xHeight": 523, + "xWidthAvg": 454, + "subsets": { + "latin": { + "xWidthAvg": 454 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300italic": { + "familyName": "Ubuntu", + "fullName": "Ubuntu Light Italic", + "postscriptName": "Ubuntu-LightItalic", + "category": "sans-serif", + "capHeight": 693, + "ascent": 932, + "descent": -189, + "lineGap": 28, + "unitsPerEm": 1000, + "xHeight": 517, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "ubuntuCondensed": { + "familyName": "Ubuntu Condensed", + "fullName": "Ubuntu Condensed", + "postscriptName": "UbuntuCondensed-Regular", + "category": "sans-serif", + "capHeight": 693, + "ascent": 932, + "descent": -189, + "lineGap": 28, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 370, + "subsets": { + "latin": { + "xWidthAvg": 370 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Ubuntu Condensed", + "fullName": "Ubuntu Condensed", + "postscriptName": "UbuntuCondensed-Regular", + "category": "sans-serif", + "capHeight": 693, + "ascent": 932, + "descent": -189, + "lineGap": 28, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 370, + "subsets": { + "latin": { + "xWidthAvg": 370 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "ubuntuMono": { + "familyName": "Ubuntu Mono", + "fullName": "Ubuntu Mono", + "postscriptName": "UbuntuMono-Regular", + "category": "monospace", + "capHeight": 693, + "ascent": 830, + "descent": -170, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "700": { + "familyName": "Ubuntu Mono", + "fullName": "Ubuntu Mono Bold", + "postscriptName": "UbuntuMono-Bold", + "category": "monospace", + "capHeight": 693, + "ascent": 830, + "descent": -170, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Ubuntu Mono", + "fullName": "Ubuntu Mono", + "postscriptName": "UbuntuMono-Regular", + "category": "monospace", + "capHeight": 693, + "ascent": 830, + "descent": -170, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Ubuntu Mono", + "fullName": "Ubuntu Mono Italic", + "postscriptName": "UbuntuMono-Italic", + "category": "monospace", + "capHeight": 693, + "ascent": 830, + "descent": -170, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700italic": { + "familyName": "Ubuntu Mono", + "fullName": "Ubuntu Mono Bold Italic", + "postscriptName": "UbuntuMono-BoldItalic", + "category": "monospace", + "capHeight": 693, + "ascent": 830, + "descent": -170, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "ubuntuSans": { + "familyName": "Ubuntu Sans", + "fullName": "Ubuntu Sans Regular", + "postscriptName": "UbuntuSans-Regular", + "category": "sans-serif", + "capHeight": 693, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 449, + "subsets": { + "latin": { + "xWidthAvg": 449 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "100": { + "familyName": "Ubuntu Sans", + "fullName": "Ubuntu Sans Thin", + "postscriptName": "UbuntuSans-Thin", + "category": "sans-serif", + "capHeight": 693, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 432, + "subsets": { + "latin": { + "xWidthAvg": 432 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200": { + "familyName": "Ubuntu Sans", + "fullName": "Ubuntu Sans ExtraLight", + "postscriptName": "UbuntuSans-ExtraLight", + "category": "sans-serif", + "capHeight": 693, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Ubuntu Sans", + "fullName": "Ubuntu Sans Light", + "postscriptName": "UbuntuSans-Light", + "category": "sans-serif", + "capHeight": 693, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Ubuntu Sans", + "fullName": "Ubuntu Sans Medium", + "postscriptName": "UbuntuSans-Medium", + "category": "sans-serif", + "capHeight": 693, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Ubuntu Sans", + "fullName": "Ubuntu Sans SemiBold", + "postscriptName": "UbuntuSans-SemiBold", + "category": "sans-serif", + "capHeight": 693, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 466, + "subsets": { + "latin": { + "xWidthAvg": 466 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Ubuntu Sans", + "fullName": "Ubuntu Sans Bold", + "postscriptName": "UbuntuSans-Bold", + "category": "sans-serif", + "capHeight": 693, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 472, + "subsets": { + "latin": { + "xWidthAvg": 472 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Ubuntu Sans", + "fullName": "Ubuntu Sans ExtraBold", + "postscriptName": "UbuntuSans-ExtraBold", + "category": "sans-serif", + "capHeight": 693, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Ubuntu Sans", + "fullName": "Ubuntu Sans Regular", + "postscriptName": "UbuntuSans-Regular", + "category": "sans-serif", + "capHeight": 693, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 449, + "subsets": { + "latin": { + "xWidthAvg": 449 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Ubuntu Sans", + "fullName": "Ubuntu Sans Italic", + "postscriptName": "UbuntuSans-Italic", + "category": "sans-serif", + "capHeight": 693, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800italic": { + "familyName": "Ubuntu Sans", + "fullName": "Ubuntu Sans ExtraBold Italic", + "postscriptName": "UbuntuSans-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 693, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700italic": { + "familyName": "Ubuntu Sans", + "fullName": "Ubuntu Sans Bold Italic", + "postscriptName": "UbuntuSans-BoldItalic", + "category": "sans-serif", + "capHeight": 693, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600italic": { + "familyName": "Ubuntu Sans", + "fullName": "Ubuntu Sans SemiBold Italic", + "postscriptName": "UbuntuSans-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 693, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500italic": { + "familyName": "Ubuntu Sans", + "fullName": "Ubuntu Sans Medium Italic", + "postscriptName": "UbuntuSans-MediumItalic", + "category": "sans-serif", + "capHeight": 693, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300italic": { + "familyName": "Ubuntu Sans", + "fullName": "Ubuntu Sans Light Italic", + "postscriptName": "UbuntuSans-LightItalic", + "category": "sans-serif", + "capHeight": 693, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200italic": { + "familyName": "Ubuntu Sans", + "fullName": "Ubuntu Sans ExtraLight Italic", + "postscriptName": "UbuntuSans-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 693, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 423, + "subsets": { + "latin": { + "xWidthAvg": 423 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "100italic": { + "familyName": "Ubuntu Sans", + "fullName": "Ubuntu Sans Thin Italic", + "postscriptName": "UbuntuSans-ThinItalic", + "category": "sans-serif", + "capHeight": 693, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 415, + "subsets": { + "latin": { + "xWidthAvg": 415 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "ubuntuSansMono": { + "familyName": "Ubuntu Sans Mono", + "fullName": "Ubuntu Sans Mono Regular", + "postscriptName": "UbuntuSansMono-Regular", + "category": "monospace", + "capHeight": 693, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 560, + "subsets": { + "latin": { + "xWidthAvg": 560 + }, + "thai": { + "xWidthAvg": 560 + } + }, + "variants": { + "500": { + "familyName": "Ubuntu Sans Mono", + "fullName": "Ubuntu Sans Mono Medium", + "postscriptName": "UbuntuSansMono-Medium", + "category": "monospace", + "capHeight": 693, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 560, + "subsets": { + "latin": { + "xWidthAvg": 560 + }, + "thai": { + "xWidthAvg": 560 + } + } + }, + "600": { + "familyName": "Ubuntu Sans Mono", + "fullName": "Ubuntu Sans Mono SemiBold", + "postscriptName": "UbuntuSansMono-SemiBold", + "category": "monospace", + "capHeight": 693, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 560, + "subsets": { + "latin": { + "xWidthAvg": 560 + }, + "thai": { + "xWidthAvg": 560 + } + } + }, + "700": { + "familyName": "Ubuntu Sans Mono", + "fullName": "Ubuntu Sans Mono Bold", + "postscriptName": "UbuntuSansMono-Bold", + "category": "monospace", + "capHeight": 693, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 560, + "subsets": { + "latin": { + "xWidthAvg": 560 + }, + "thai": { + "xWidthAvg": 560 + } + } + }, + "regular": { + "familyName": "Ubuntu Sans Mono", + "fullName": "Ubuntu Sans Mono Regular", + "postscriptName": "UbuntuSansMono-Regular", + "category": "monospace", + "capHeight": 693, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 560, + "subsets": { + "latin": { + "xWidthAvg": 560 + }, + "thai": { + "xWidthAvg": 560 + } + } + }, + "italic": { + "familyName": "Ubuntu Sans Mono", + "fullName": "Ubuntu Sans Mono Italic", + "postscriptName": "UbuntuSansMono-Italic", + "category": "monospace", + "capHeight": 693, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 560, + "subsets": { + "latin": { + "xWidthAvg": 560 + }, + "thai": { + "xWidthAvg": 560 + } + } + }, + "700italic": { + "familyName": "Ubuntu Sans Mono", + "fullName": "Ubuntu Sans Mono Bold Italic", + "postscriptName": "UbuntuSansMono-BoldItalic", + "category": "monospace", + "capHeight": 693, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 560, + "subsets": { + "latin": { + "xWidthAvg": 560 + }, + "thai": { + "xWidthAvg": 560 + } + } + }, + "600italic": { + "familyName": "Ubuntu Sans Mono", + "fullName": "Ubuntu Sans Mono SemiBold Italic", + "postscriptName": "UbuntuSansMono-SemiBoldItalic", + "category": "monospace", + "capHeight": 693, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 560, + "subsets": { + "latin": { + "xWidthAvg": 560 + }, + "thai": { + "xWidthAvg": 560 + } + } + }, + "500italic": { + "familyName": "Ubuntu Sans Mono", + "fullName": "Ubuntu Sans Mono Medium Italic", + "postscriptName": "UbuntuSansMono-MediumItalic", + "category": "monospace", + "capHeight": 693, + "ascent": 940, + "descent": -260, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 518, + "xWidthAvg": 560, + "subsets": { + "latin": { + "xWidthAvg": 560 + }, + "thai": { + "xWidthAvg": 560 + } + } + } + } + }, + "uchen": { + "familyName": "Uchen", + "fullName": "Uchen Regular", + "postscriptName": "Uchen-Regular", + "category": "serif", + "capHeight": 744, + "ascent": 1248, + "descent": -660, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 485, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 445 + } + }, + "variants": { + "regular": { + "familyName": "Uchen", + "fullName": "Uchen Regular", + "postscriptName": "Uchen-Regular", + "category": "serif", + "capHeight": 744, + "ascent": 1248, + "descent": -660, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 485, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 445 + } + } + } + } + }, + "ultra": { + "familyName": "Ultra", + "fullName": "Ultra Regular", + "postscriptName": "Ultra-Regular", + "category": "serif", + "capHeight": 1473, + "ascent": 2066, + "descent": -561, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1102, + "xWidthAvg": 1295, + "subsets": { + "latin": { + "xWidthAvg": 1295 + }, + "thai": { + "xWidthAvg": 2048 + } + }, + "variants": { + "regular": { + "familyName": "Ultra", + "fullName": "Ultra Regular", + "postscriptName": "Ultra-Regular", + "category": "serif", + "capHeight": 1473, + "ascent": 2066, + "descent": -561, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1102, + "xWidthAvg": 1295, + "subsets": { + "latin": { + "xWidthAvg": 1295 + }, + "thai": { + "xWidthAvg": 2048 + } + } + } + } + }, + "unbounded": { + "familyName": "Unbounded", + "fullName": "Unbounded Regular", + "postscriptName": "Unbounded-Regular", + "category": "sans-serif", + "capHeight": 750, + "ascent": 995, + "descent": -245, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 566, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 837 + } + }, + "variants": { + "200": { + "familyName": "Unbounded", + "fullName": "Unbounded ExtraLight", + "postscriptName": "Unbounded-ExtraLight", + "category": "sans-serif", + "capHeight": 750, + "ascent": 995, + "descent": -245, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 560, + "xWidthAvg": 567, + "subsets": { + "latin": { + "xWidthAvg": 567 + }, + "thai": { + "xWidthAvg": 810 + } + } + }, + "300": { + "familyName": "Unbounded", + "fullName": "Unbounded Light", + "postscriptName": "Unbounded-Light", + "category": "sans-serif", + "capHeight": 750, + "ascent": 995, + "descent": -245, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 563, + "xWidthAvg": 584, + "subsets": { + "latin": { + "xWidthAvg": 584 + }, + "thai": { + "xWidthAvg": 824 + } + } + }, + "500": { + "familyName": "Unbounded", + "fullName": "Unbounded Medium", + "postscriptName": "Unbounded-Medium", + "category": "sans-serif", + "capHeight": 750, + "ascent": 995, + "descent": -245, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 569, + "xWidthAvg": 617, + "subsets": { + "latin": { + "xWidthAvg": 617 + }, + "thai": { + "xWidthAvg": 849 + } + } + }, + "600": { + "familyName": "Unbounded", + "fullName": "Unbounded SemiBold", + "postscriptName": "Unbounded-SemiBold", + "category": "sans-serif", + "capHeight": 750, + "ascent": 995, + "descent": -245, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 570, + "xWidthAvg": 625, + "subsets": { + "latin": { + "xWidthAvg": 625 + }, + "thai": { + "xWidthAvg": 855 + } + } + }, + "700": { + "familyName": "Unbounded", + "fullName": "Unbounded Bold", + "postscriptName": "Unbounded-Bold", + "category": "sans-serif", + "capHeight": 750, + "ascent": 995, + "descent": -245, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 571, + "xWidthAvg": 633, + "subsets": { + "latin": { + "xWidthAvg": 633 + }, + "thai": { + "xWidthAvg": 860 + } + } + }, + "800": { + "familyName": "Unbounded", + "fullName": "Unbounded ExtraBold", + "postscriptName": "Unbounded-ExtraBold", + "category": "sans-serif", + "capHeight": 750, + "ascent": 995, + "descent": -245, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 573, + "xWidthAvg": 644, + "subsets": { + "latin": { + "xWidthAvg": 644 + }, + "thai": { + "xWidthAvg": 868 + } + } + }, + "900": { + "familyName": "Unbounded", + "fullName": "Unbounded Black", + "postscriptName": "Unbounded-Black", + "category": "sans-serif", + "capHeight": 750, + "ascent": 995, + "descent": -245, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 575, + "xWidthAvg": 655, + "subsets": { + "latin": { + "xWidthAvg": 655 + }, + "thai": { + "xWidthAvg": 876 + } + } + }, + "regular": { + "familyName": "Unbounded", + "fullName": "Unbounded Regular", + "postscriptName": "Unbounded-Regular", + "category": "sans-serif", + "capHeight": 750, + "ascent": 995, + "descent": -245, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 566, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 837 + } + } + } + } + }, + "uncialAntiqua": { + "familyName": "Uncial Antiqua", + "fullName": "Uncial Antiqua", + "postscriptName": "UncialAntiqua-Regular", + "category": "display", + "capHeight": 1841, + "ascent": 2019, + "descent": -676, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1079, + "xWidthAvg": 1170, + "subsets": { + "latin": { + "xWidthAvg": 1170 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "Uncial Antiqua", + "fullName": "Uncial Antiqua", + "postscriptName": "UncialAntiqua-Regular", + "category": "display", + "capHeight": 1841, + "ascent": 2019, + "descent": -676, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1079, + "xWidthAvg": 1170, + "subsets": { + "latin": { + "xWidthAvg": 1170 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "underdog": { + "familyName": "Underdog", + "fullName": "Underdog", + "postscriptName": "Underdog-Regular", + "category": "display", + "capHeight": 710, + "ascent": 909, + "descent": -247, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 320 + } + }, + "variants": { + "regular": { + "familyName": "Underdog", + "fullName": "Underdog", + "postscriptName": "Underdog-Regular", + "category": "display", + "capHeight": 710, + "ascent": 909, + "descent": -247, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 458, + "subsets": { + "latin": { + "xWidthAvg": 458 + }, + "thai": { + "xWidthAvg": 320 + } + } + } + } + }, + "unicaOne": { + "familyName": "Unica One", + "fullName": "Unica One Regular", + "postscriptName": "UnicaOne-Regular", + "category": "display", + "capHeight": 650, + "ascent": 917, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 650, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 230 + } + }, + "variants": { + "regular": { + "familyName": "Unica One", + "fullName": "Unica One Regular", + "postscriptName": "UnicaOne-Regular", + "category": "display", + "capHeight": 650, + "ascent": 917, + "descent": -265, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 650, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 230 + } + } + } + } + }, + "unifrakturCook": { + "familyName": "UnifrakturCook", + "fullName": "UnifrakturCook", + "postscriptName": "UnifrakturCook-Bold", + "category": "display", + "capHeight": 485, + "ascent": 2110, + "descent": -570, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 319, + "xWidthAvg": 780, + "subsets": { + "latin": { + "xWidthAvg": 780 + }, + "thai": { + "xWidthAvg": 2027 + } + }, + "variants": { + "700": { + "familyName": "UnifrakturCook", + "fullName": "UnifrakturCook", + "postscriptName": "UnifrakturCook-Bold", + "category": "display", + "capHeight": 485, + "ascent": 2110, + "descent": -570, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 319, + "xWidthAvg": 780, + "subsets": { + "latin": { + "xWidthAvg": 780 + }, + "thai": { + "xWidthAvg": 2027 + } + } + } + } + }, + "unifrakturMaguntia": { + "familyName": "UnifrakturMaguntia", + "fullName": "UnifrakturMaguntia", + "postscriptName": "UnifrakturMaguntia", + "category": "display", + "capHeight": 1409, + "ascent": 1607, + "descent": -513, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1095, + "xWidthAvg": 813, + "subsets": { + "latin": { + "xWidthAvg": 813 + }, + "thai": { + "xWidthAvg": 1524 + } + }, + "variants": { + "regular": { + "familyName": "UnifrakturMaguntia", + "fullName": "UnifrakturMaguntia", + "postscriptName": "UnifrakturMaguntia", + "category": "display", + "capHeight": 1409, + "ascent": 1607, + "descent": -513, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1095, + "xWidthAvg": 813, + "subsets": { + "latin": { + "xWidthAvg": 813 + }, + "thai": { + "xWidthAvg": 1524 + } + } + } + } + }, + "unkempt": { + "familyName": "Unkempt", + "fullName": "Unkempt Regular", + "postscriptName": "Unkempt-Regular", + "category": "display", + "capHeight": 753, + "ascent": 977, + "descent": -246, + "lineGap": 28, + "unitsPerEm": 1024, + "xHeight": 482, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 297 + } + }, + "variants": { + "700": { + "familyName": "Unkempt", + "fullName": "Unkempt Bold", + "postscriptName": "Unkempt-Bold", + "category": "display", + "capHeight": 752, + "ascent": 977, + "descent": -246, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 485, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 315 + } + } + }, + "regular": { + "familyName": "Unkempt", + "fullName": "Unkempt Regular", + "postscriptName": "Unkempt-Regular", + "category": "display", + "capHeight": 753, + "ascent": 977, + "descent": -246, + "lineGap": 28, + "unitsPerEm": 1024, + "xHeight": 482, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 297 + } + } + } + } + }, + "unlock": { + "familyName": "Unlock", + "fullName": "Unlock Regular", + "postscriptName": "Unlock-Regular", + "category": "display", + "capHeight": 635, + "ascent": 873, + "descent": -195, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 654 + } + }, + "variants": { + "regular": { + "familyName": "Unlock", + "fullName": "Unlock Regular", + "postscriptName": "Unlock-Regular", + "category": "display", + "capHeight": 635, + "ascent": 873, + "descent": -195, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 550, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 654 + } + } + } + } + }, + "unna": { + "familyName": "Unna", + "fullName": "Unna Regular", + "postscriptName": "Unna-Regular", + "category": "serif", + "capHeight": 597, + "ascent": 883, + "descent": -269, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 420, + "xWidthAvg": 402, + "subsets": { + "latin": { + "xWidthAvg": 402 + }, + "thai": { + "xWidthAvg": 488 + } + }, + "variants": { + "700": { + "familyName": "Unna", + "fullName": "Unna Bold", + "postscriptName": "Unna-Bold", + "category": "serif", + "capHeight": 597, + "ascent": 883, + "descent": -269, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 425, + "xWidthAvg": 413, + "subsets": { + "latin": { + "xWidthAvg": 413 + }, + "thai": { + "xWidthAvg": 488 + } + } + }, + "regular": { + "familyName": "Unna", + "fullName": "Unna Regular", + "postscriptName": "Unna-Regular", + "category": "serif", + "capHeight": 597, + "ascent": 883, + "descent": -269, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 420, + "xWidthAvg": 402, + "subsets": { + "latin": { + "xWidthAvg": 402 + }, + "thai": { + "xWidthAvg": 488 + } + } + }, + "italic": { + "familyName": "Unna", + "fullName": "Unna Italic", + "postscriptName": "Unna-Italic", + "category": "serif", + "capHeight": 597, + "ascent": 883, + "descent": -269, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 420, + "xWidthAvg": 385, + "subsets": { + "latin": { + "xWidthAvg": 385 + }, + "thai": { + "xWidthAvg": 488 + } + } + }, + "700italic": { + "familyName": "Unna", + "fullName": "Unna Bold Italic", + "postscriptName": "Unna-BoldItalic", + "category": "serif", + "capHeight": 597, + "ascent": 883, + "descent": -269, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 425, + "xWidthAvg": 404, + "subsets": { + "latin": { + "xWidthAvg": 404 + }, + "thai": { + "xWidthAvg": 488 + } + } + } + } + }, + "updock": { + "familyName": "Updock", + "fullName": "Updock Regular", + "postscriptName": "Updock-Regular", + "category": "handwriting", + "capHeight": 630, + "ascent": 900, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 350, + "xWidthAvg": 267, + "subsets": { + "latin": { + "xWidthAvg": 267 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Updock", + "fullName": "Updock Regular", + "postscriptName": "Updock-Regular", + "category": "handwriting", + "capHeight": 630, + "ascent": 900, + "descent": -350, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 350, + "xWidthAvg": 267, + "subsets": { + "latin": { + "xWidthAvg": 267 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "urbanist": { + "familyName": "Urbanist", + "fullName": "Urbanist Regular", + "postscriptName": "Urbanist-Regular", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 883, + "subsets": { + "latin": { + "xWidthAvg": 883 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "100": { + "familyName": "Urbanist", + "fullName": "Urbanist Thin", + "postscriptName": "Urbanist-Thin", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 855, + "subsets": { + "latin": { + "xWidthAvg": 855 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "200": { + "familyName": "Urbanist", + "fullName": "Urbanist ExtraLight", + "postscriptName": "Urbanist-ExtraLight", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 864, + "subsets": { + "latin": { + "xWidthAvg": 864 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "300": { + "familyName": "Urbanist", + "fullName": "Urbanist Light", + "postscriptName": "Urbanist-Light", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 871, + "subsets": { + "latin": { + "xWidthAvg": 871 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "500": { + "familyName": "Urbanist", + "fullName": "Urbanist Medium", + "postscriptName": "Urbanist-Medium", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 892, + "subsets": { + "latin": { + "xWidthAvg": 892 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "600": { + "familyName": "Urbanist", + "fullName": "Urbanist SemiBold", + "postscriptName": "Urbanist-SemiBold", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 906, + "subsets": { + "latin": { + "xWidthAvg": 906 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "Urbanist", + "fullName": "Urbanist Bold", + "postscriptName": "Urbanist-Bold", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 918, + "subsets": { + "latin": { + "xWidthAvg": 918 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "800": { + "familyName": "Urbanist", + "fullName": "Urbanist ExtraBold", + "postscriptName": "Urbanist-ExtraBold", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 929, + "subsets": { + "latin": { + "xWidthAvg": 929 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "900": { + "familyName": "Urbanist", + "fullName": "Urbanist Black", + "postscriptName": "Urbanist-Black", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 938, + "subsets": { + "latin": { + "xWidthAvg": 938 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Urbanist", + "fullName": "Urbanist Regular", + "postscriptName": "Urbanist-Regular", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 883, + "subsets": { + "latin": { + "xWidthAvg": 883 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "italic": { + "familyName": "Urbanist", + "fullName": "Urbanist Italic", + "postscriptName": "Urbanist-Italic", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 882, + "subsets": { + "latin": { + "xWidthAvg": 882 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "900italic": { + "familyName": "Urbanist", + "fullName": "Urbanist Black Italic", + "postscriptName": "Urbanist-BlackItalic", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 938, + "subsets": { + "latin": { + "xWidthAvg": 938 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "800italic": { + "familyName": "Urbanist", + "fullName": "Urbanist ExtraBold Italic", + "postscriptName": "Urbanist-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 929, + "subsets": { + "latin": { + "xWidthAvg": 929 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700italic": { + "familyName": "Urbanist", + "fullName": "Urbanist Bold Italic", + "postscriptName": "Urbanist-BoldItalic", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 918, + "subsets": { + "latin": { + "xWidthAvg": 918 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "600italic": { + "familyName": "Urbanist", + "fullName": "Urbanist SemiBold Italic", + "postscriptName": "Urbanist-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 906, + "subsets": { + "latin": { + "xWidthAvg": 906 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "500italic": { + "familyName": "Urbanist", + "fullName": "Urbanist Medium Italic", + "postscriptName": "Urbanist-MediumItalic", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 892, + "subsets": { + "latin": { + "xWidthAvg": 892 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "300italic": { + "familyName": "Urbanist", + "fullName": "Urbanist Light Italic", + "postscriptName": "Urbanist-LightItalic", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 871, + "subsets": { + "latin": { + "xWidthAvg": 871 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "200italic": { + "familyName": "Urbanist", + "fullName": "Urbanist ExtraLight Italic", + "postscriptName": "Urbanist-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 864, + "subsets": { + "latin": { + "xWidthAvg": 864 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "100italic": { + "familyName": "Urbanist", + "fullName": "Urbanist Thin Italic", + "postscriptName": "Urbanist-ThinItalic", + "category": "sans-serif", + "capHeight": 1400, + "ascent": 1900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 2000, + "xHeight": 1000, + "xWidthAvg": 855, + "subsets": { + "latin": { + "xWidthAvg": 855 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "vT323": { + "familyName": "VT323", + "fullName": "VT323 Regular", + "postscriptName": "VT323-Regular", + "category": "monospace", + "capHeight": 560, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 400, + "subsets": { + "latin": { + "xWidthAvg": 400 + }, + "thai": { + "xWidthAvg": 400 + } + }, + "variants": { + "regular": { + "familyName": "VT323", + "fullName": "VT323 Regular", + "postscriptName": "VT323-Regular", + "category": "monospace", + "capHeight": 560, + "ascent": 800, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 400, + "xWidthAvg": 400, + "subsets": { + "latin": { + "xWidthAvg": 400 + }, + "thai": { + "xWidthAvg": 400 + } + } + } + } + }, + "vampiroOne": { + "familyName": "Vampiro One", + "fullName": "Vampiro One", + "postscriptName": "VampiroOne-Regular", + "category": "display", + "capHeight": 705, + "ascent": 956, + "descent": -294, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 534, + "subsets": { + "latin": { + "xWidthAvg": 534 + }, + "thai": { + "xWidthAvg": 636 + } + }, + "variants": { + "regular": { + "familyName": "Vampiro One", + "fullName": "Vampiro One", + "postscriptName": "VampiroOne-Regular", + "category": "display", + "capHeight": 705, + "ascent": 956, + "descent": -294, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 534, + "xWidthAvg": 534, + "subsets": { + "latin": { + "xWidthAvg": 534 + }, + "thai": { + "xWidthAvg": 636 + } + } + } + } + }, + "varela": { + "familyName": "Varela", + "fullName": "Varela", + "postscriptName": "Varela", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1015, + "descent": -285, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 514 + } + }, + "variants": { + "regular": { + "familyName": "Varela", + "fullName": "Varela", + "postscriptName": "Varela", + "category": "sans-serif", + "capHeight": 698, + "ascent": 1015, + "descent": -285, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 479, + "subsets": { + "latin": { + "xWidthAvg": 479 + }, + "thai": { + "xWidthAvg": 514 + } + } + } + } + }, + "varelaRound": { + "familyName": "Varela Round", + "fullName": "Varela Round Regular", + "postscriptName": "VarelaRound-Regular", + "category": "sans-serif", + "capHeight": 698, + "ascent": 918, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 514 + } + }, + "variants": { + "regular": { + "familyName": "Varela Round", + "fullName": "Varela Round Regular", + "postscriptName": "VarelaRound-Regular", + "category": "sans-serif", + "capHeight": 698, + "ascent": 918, + "descent": -286, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 514 + } + } + } + } + }, + "varta": { + "familyName": "Varta", + "fullName": "Varta Regular", + "postscriptName": "Varta-Regular", + "category": "sans-serif", + "capHeight": 1346, + "ascent": 1902, + "descent": -1068, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 990, + "xWidthAvg": 853, + "subsets": { + "latin": { + "xWidthAvg": 853 + }, + "thai": { + "xWidthAvg": 1770 + } + }, + "variants": { + "300": { + "familyName": "Varta", + "fullName": "Varta Light", + "postscriptName": "Varta-Light", + "category": "sans-serif", + "capHeight": 1346, + "ascent": 1902, + "descent": -1068, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 990, + "xWidthAvg": 845, + "subsets": { + "latin": { + "xWidthAvg": 845 + }, + "thai": { + "xWidthAvg": 1770 + } + } + }, + "500": { + "familyName": "Varta", + "fullName": "Varta Medium", + "postscriptName": "Varta-Medium", + "category": "sans-serif", + "capHeight": 1346, + "ascent": 1902, + "descent": -1068, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 990, + "xWidthAvg": 861, + "subsets": { + "latin": { + "xWidthAvg": 861 + }, + "thai": { + "xWidthAvg": 1770 + } + } + }, + "600": { + "familyName": "Varta", + "fullName": "Varta SemiBold", + "postscriptName": "Varta-SemiBold", + "category": "sans-serif", + "capHeight": 1346, + "ascent": 1902, + "descent": -1068, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 990, + "xWidthAvg": 869, + "subsets": { + "latin": { + "xWidthAvg": 869 + }, + "thai": { + "xWidthAvg": 1770 + } + } + }, + "700": { + "familyName": "Varta", + "fullName": "Varta Bold", + "postscriptName": "Varta-Bold", + "category": "sans-serif", + "capHeight": 1346, + "ascent": 1902, + "descent": -1068, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 990, + "xWidthAvg": 877, + "subsets": { + "latin": { + "xWidthAvg": 877 + }, + "thai": { + "xWidthAvg": 1770 + } + } + }, + "regular": { + "familyName": "Varta", + "fullName": "Varta Regular", + "postscriptName": "Varta-Regular", + "category": "sans-serif", + "capHeight": 1346, + "ascent": 1902, + "descent": -1068, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 990, + "xWidthAvg": 853, + "subsets": { + "latin": { + "xWidthAvg": 853 + }, + "thai": { + "xWidthAvg": 1770 + } + } + } + } + }, + "vastShadow": { + "familyName": "Vast Shadow", + "fullName": "Vast Shadow Regular", + "postscriptName": "VastShadow-Regular", + "category": "serif", + "capHeight": 1245, + "ascent": 1875, + "descent": -685, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 965, + "xWidthAvg": 1416, + "subsets": { + "latin": { + "xWidthAvg": 1416 + }, + "thai": { + "xWidthAvg": 650 + } + }, + "variants": { + "regular": { + "familyName": "Vast Shadow", + "fullName": "Vast Shadow Regular", + "postscriptName": "VastShadow-Regular", + "category": "serif", + "capHeight": 1245, + "ascent": 1875, + "descent": -685, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 965, + "xWidthAvg": 1416, + "subsets": { + "latin": { + "xWidthAvg": 1416 + }, + "thai": { + "xWidthAvg": 650 + } + } + } + } + }, + "vazirmatn": { + "familyName": "Vazirmatn", + "fullName": "Vazirmatn Regular", + "postscriptName": "Vazirmatn-Regular", + "category": "sans-serif", + "capHeight": 1638, + "ascent": 2100, + "descent": -1100, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 919, + "subsets": { + "latin": { + "xWidthAvg": 919 + }, + "thai": { + "xWidthAvg": 908 + } + }, + "variants": { + "100": { + "familyName": "Vazirmatn", + "fullName": "Vazirmatn Thin", + "postscriptName": "Vazirmatn-Thin", + "category": "sans-serif", + "capHeight": 1638, + "ascent": 2100, + "descent": -1100, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 891, + "subsets": { + "latin": { + "xWidthAvg": 891 + }, + "thai": { + "xWidthAvg": 908 + } + } + }, + "200": { + "familyName": "Vazirmatn", + "fullName": "Vazirmatn ExtraLight", + "postscriptName": "Vazirmatn-ExtraLight", + "category": "sans-serif", + "capHeight": 1638, + "ascent": 2100, + "descent": -1100, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 905, + "subsets": { + "latin": { + "xWidthAvg": 905 + }, + "thai": { + "xWidthAvg": 908 + } + } + }, + "300": { + "familyName": "Vazirmatn", + "fullName": "Vazirmatn Light", + "postscriptName": "Vazirmatn-Light", + "category": "sans-serif", + "capHeight": 1638, + "ascent": 2100, + "descent": -1100, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 912, + "subsets": { + "latin": { + "xWidthAvg": 912 + }, + "thai": { + "xWidthAvg": 908 + } + } + }, + "500": { + "familyName": "Vazirmatn", + "fullName": "Vazirmatn Medium", + "postscriptName": "Vazirmatn-Medium", + "category": "sans-serif", + "capHeight": 1638, + "ascent": 2100, + "descent": -1100, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 924, + "subsets": { + "latin": { + "xWidthAvg": 924 + }, + "thai": { + "xWidthAvg": 908 + } + } + }, + "600": { + "familyName": "Vazirmatn", + "fullName": "Vazirmatn SemiBold", + "postscriptName": "Vazirmatn-SemiBold", + "category": "sans-serif", + "capHeight": 1638, + "ascent": 2100, + "descent": -1100, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 926, + "subsets": { + "latin": { + "xWidthAvg": 926 + }, + "thai": { + "xWidthAvg": 908 + } + } + }, + "700": { + "familyName": "Vazirmatn", + "fullName": "Vazirmatn Bold", + "postscriptName": "Vazirmatn-Bold", + "category": "sans-serif", + "capHeight": 1638, + "ascent": 2100, + "descent": -1100, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 928, + "subsets": { + "latin": { + "xWidthAvg": 928 + }, + "thai": { + "xWidthAvg": 908 + } + } + }, + "800": { + "familyName": "Vazirmatn", + "fullName": "Vazirmatn ExtraBold", + "postscriptName": "Vazirmatn-ExtraBold", + "category": "sans-serif", + "capHeight": 1638, + "ascent": 2100, + "descent": -1100, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 930, + "subsets": { + "latin": { + "xWidthAvg": 930 + }, + "thai": { + "xWidthAvg": 908 + } + } + }, + "900": { + "familyName": "Vazirmatn", + "fullName": "Vazirmatn Black", + "postscriptName": "Vazirmatn-Black", + "category": "sans-serif", + "capHeight": 1638, + "ascent": 2100, + "descent": -1100, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 932, + "subsets": { + "latin": { + "xWidthAvg": 932 + }, + "thai": { + "xWidthAvg": 908 + } + } + }, + "regular": { + "familyName": "Vazirmatn", + "fullName": "Vazirmatn Regular", + "postscriptName": "Vazirmatn-Regular", + "category": "sans-serif", + "capHeight": 1638, + "ascent": 2100, + "descent": -1100, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1082, + "xWidthAvg": 919, + "subsets": { + "latin": { + "xWidthAvg": 919 + }, + "thai": { + "xWidthAvg": 908 + } + } + } + } + }, + "verdana": { + "familyName": "Verdana", + "fullName": "Verdana", + "postscriptName": "Verdana", + "category": "sans-serif", + "capHeight": 1489, + "ascent": 2059, + "descent": -430, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1117, + "xWidthAvg": 1049, + "subsets": { + "latin": { + "xWidthAvg": 1049 + }, + "thai": { + "xWidthAvg": 2048 + } + }, + "variants": { + "700": { + "familyName": "Verdana", + "fullName": "Verdana Bold", + "postscriptName": "Verdana-Bold", + "category": "sans-serif", + "capHeight": 1489, + "ascent": 2059, + "descent": -430, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1123, + "xWidthAvg": 1170, + "subsets": { + "latin": { + "xWidthAvg": 1170 + }, + "thai": { + "xWidthAvg": 2048 + } + } + }, + "regular": { + "familyName": "Verdana", + "fullName": "Verdana", + "postscriptName": "Verdana", + "category": "sans-serif", + "capHeight": 1489, + "ascent": 2059, + "descent": -430, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1117, + "xWidthAvg": 1049, + "subsets": { + "latin": { + "xWidthAvg": 1049 + }, + "thai": { + "xWidthAvg": 2048 + } + } + }, + "italic": { + "familyName": "Verdana", + "fullName": "Verdana Italic", + "postscriptName": "Verdana-Italic", + "category": "sans-serif", + "capHeight": 1489, + "ascent": 2059, + "descent": -430, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1117, + "xWidthAvg": 1049, + "subsets": { + "latin": { + "xWidthAvg": 1049 + }, + "thai": { + "xWidthAvg": 2048 + } + } + }, + "700italic": { + "familyName": "Verdana", + "fullName": "Verdana Bold Italic", + "postscriptName": "Verdana-BoldItalic", + "category": "sans-serif", + "capHeight": 1489, + "ascent": 2059, + "descent": -430, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1123, + "xWidthAvg": 1170, + "subsets": { + "latin": { + "xWidthAvg": 1170 + }, + "thai": { + "xWidthAvg": 2048 + } + } + } + } + }, + "vesperLibre": { + "familyName": "Vesper Libre", + "fullName": "Vesper Libre", + "postscriptName": "VesperLibre-Regular", + "category": "serif", + "capHeight": 1384, + "ascent": 2330, + "descent": -1550, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 950, + "xWidthAvg": 890, + "subsets": { + "latin": { + "xWidthAvg": 890 + }, + "thai": { + "xWidthAvg": 1025 + } + }, + "variants": { + "500": { + "familyName": "Vesper Libre", + "fullName": "Vesper Libre Medium", + "postscriptName": "VesperLibre-Medium", + "category": "serif", + "capHeight": 1384, + "ascent": 2330, + "descent": -1550, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 950, + "xWidthAvg": 939, + "subsets": { + "latin": { + "xWidthAvg": 939 + }, + "thai": { + "xWidthAvg": 1025 + } + } + }, + "700": { + "familyName": "Vesper Libre", + "fullName": "Vesper Libre Bold", + "postscriptName": "VesperLibre-Bold", + "category": "serif", + "capHeight": 1384, + "ascent": 2330, + "descent": -1550, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 950, + "xWidthAvg": 969, + "subsets": { + "latin": { + "xWidthAvg": 969 + }, + "thai": { + "xWidthAvg": 1025 + } + } + }, + "900": { + "familyName": "Vesper Libre", + "fullName": "Vesper Libre Heavy", + "postscriptName": "VesperLibre-Heavy", + "category": "serif", + "capHeight": 1384, + "ascent": 2330, + "descent": -1550, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 950, + "xWidthAvg": 1017, + "subsets": { + "latin": { + "xWidthAvg": 1017 + }, + "thai": { + "xWidthAvg": 1025 + } + } + }, + "regular": { + "familyName": "Vesper Libre", + "fullName": "Vesper Libre", + "postscriptName": "VesperLibre-Regular", + "category": "serif", + "capHeight": 1384, + "ascent": 2330, + "descent": -1550, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 950, + "xWidthAvg": 890, + "subsets": { + "latin": { + "xWidthAvg": 890 + }, + "thai": { + "xWidthAvg": 1025 + } + } + } + } + }, + "viaodaLibre": { + "familyName": "Viaoda Libre", + "fullName": "Viaoda Libre Regular", + "postscriptName": "ViaodaLibre-Regular", + "category": "display", + "capHeight": 740, + "ascent": 1051, + "descent": -360, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 467, + "xWidthAvg": 388, + "subsets": { + "latin": { + "xWidthAvg": 388 + }, + "thai": { + "xWidthAvg": 706 + } + }, + "variants": { + "regular": { + "familyName": "Viaoda Libre", + "fullName": "Viaoda Libre Regular", + "postscriptName": "ViaodaLibre-Regular", + "category": "display", + "capHeight": 740, + "ascent": 1051, + "descent": -360, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 467, + "xWidthAvg": 388, + "subsets": { + "latin": { + "xWidthAvg": 388 + }, + "thai": { + "xWidthAvg": 706 + } + } + } + } + }, + "vibes": { + "familyName": "Vibes", + "fullName": "Vibes Regular", + "postscriptName": "Vibes-Regular", + "category": "display", + "capHeight": 38, + "ascent": 1105, + "descent": -680, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 366, + "subsets": { + "latin": { + "xWidthAvg": 366 + }, + "thai": { + "xWidthAvg": 893 + } + }, + "variants": { + "regular": { + "familyName": "Vibes", + "fullName": "Vibes Regular", + "postscriptName": "Vibes-Regular", + "category": "display", + "capHeight": 38, + "ascent": 1105, + "descent": -680, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 366, + "subsets": { + "latin": { + "xWidthAvg": 366 + }, + "thai": { + "xWidthAvg": 893 + } + } + } + } + }, + "vibur": { + "familyName": "Vibur", + "fullName": "Vibur", + "postscriptName": "Vibur", + "category": "handwriting", + "ascent": 1960, + "descent": -792, + "lineGap": 184, + "unitsPerEm": 2048, + "xWidthAvg": 742, + "subsets": { + "latin": { + "xWidthAvg": 742 + }, + "thai": { + "xWidthAvg": 797 + } + }, + "variants": { + "regular": { + "familyName": "Vibur", + "fullName": "Vibur", + "postscriptName": "Vibur", + "category": "handwriting", + "ascent": 1960, + "descent": -792, + "lineGap": 184, + "unitsPerEm": 2048, + "xWidthAvg": 742, + "subsets": { + "latin": { + "xWidthAvg": 742 + }, + "thai": { + "xWidthAvg": 797 + } + } + } + } + }, + "victorMono": { + "familyName": "Victor Mono", + "fullName": "Victor Mono Regular", + "postscriptName": "VictorMono-Regular", + "category": "monospace", + "capHeight": 800, + "ascent": 1100, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 618, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "100": { + "familyName": "Victor Mono", + "fullName": "Victor Mono Thin", + "postscriptName": "VictorMono-Thin", + "category": "monospace", + "capHeight": 800, + "ascent": 1100, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 618, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200": { + "familyName": "Victor Mono", + "fullName": "Victor Mono ExtraLight", + "postscriptName": "VictorMono-ExtraLight", + "category": "monospace", + "capHeight": 800, + "ascent": 1100, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 618, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300": { + "familyName": "Victor Mono", + "fullName": "Victor Mono Light", + "postscriptName": "VictorMono-Light", + "category": "monospace", + "capHeight": 800, + "ascent": 1100, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 618, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500": { + "familyName": "Victor Mono", + "fullName": "Victor Mono Medium", + "postscriptName": "VictorMono-Medium", + "category": "monospace", + "capHeight": 800, + "ascent": 1100, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 618, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600": { + "familyName": "Victor Mono", + "fullName": "Victor Mono SemiBold", + "postscriptName": "VictorMono-SemiBold", + "category": "monospace", + "capHeight": 800, + "ascent": 1100, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 618, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700": { + "familyName": "Victor Mono", + "fullName": "Victor Mono Bold", + "postscriptName": "VictorMono-Bold", + "category": "monospace", + "capHeight": 800, + "ascent": 1100, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 618, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Victor Mono", + "fullName": "Victor Mono Regular", + "postscriptName": "VictorMono-Regular", + "category": "monospace", + "capHeight": 800, + "ascent": 1100, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 618, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "italic": { + "familyName": "Victor Mono", + "fullName": "Victor Mono Italic", + "postscriptName": "VictorMono-Italic", + "category": "monospace", + "capHeight": 800, + "ascent": 1100, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 618, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "700italic": { + "familyName": "Victor Mono", + "fullName": "Victor Mono Bold Italic", + "postscriptName": "VictorMono-BoldItalic", + "category": "monospace", + "capHeight": 800, + "ascent": 1100, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 618, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "600italic": { + "familyName": "Victor Mono", + "fullName": "Victor Mono SemiBold Italic", + "postscriptName": "VictorMono-SemiBoldItalic", + "category": "monospace", + "capHeight": 800, + "ascent": 1100, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 618, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "500italic": { + "familyName": "Victor Mono", + "fullName": "Victor Mono Medium Italic", + "postscriptName": "VictorMono-MediumItalic", + "category": "monospace", + "capHeight": 800, + "ascent": 1100, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 618, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "300italic": { + "familyName": "Victor Mono", + "fullName": "Victor Mono Light Italic", + "postscriptName": "VictorMono-LightItalic", + "category": "monospace", + "capHeight": 800, + "ascent": 1100, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 618, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "200italic": { + "familyName": "Victor Mono", + "fullName": "Victor Mono ExtraLight Italic", + "postscriptName": "VictorMono-ExtraLightItalic", + "category": "monospace", + "capHeight": 800, + "ascent": 1100, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 618, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "100italic": { + "familyName": "Victor Mono", + "fullName": "Victor Mono Thin Italic", + "postscriptName": "VictorMono-ThinItalic", + "category": "monospace", + "capHeight": 800, + "ascent": 1100, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 618, + "xWidthAvg": 600, + "subsets": { + "latin": { + "xWidthAvg": 600 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "vidaloka": { + "familyName": "Vidaloka", + "fullName": "Vidaloka ", + "postscriptName": "Vidaloka-Regular", + "category": "serif", + "capHeight": 1427, + "ascent": 1927, + "descent": -560, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1004, + "xWidthAvg": 889, + "subsets": { + "latin": { + "xWidthAvg": 889 + }, + "thai": { + "xWidthAvg": 1008 + } + }, + "variants": { + "regular": { + "familyName": "Vidaloka", + "fullName": "Vidaloka ", + "postscriptName": "Vidaloka-Regular", + "category": "serif", + "capHeight": 1427, + "ascent": 1927, + "descent": -560, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1004, + "xWidthAvg": 889, + "subsets": { + "latin": { + "xWidthAvg": 889 + }, + "thai": { + "xWidthAvg": 1008 + } + } + } + } + }, + "viga": { + "familyName": "Viga", + "fullName": "Viga-Regular", + "postscriptName": "Viga-Regular", + "category": "sans-serif", + "capHeight": 712, + "ascent": 1015, + "descent": -329, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 571, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 483 + } + }, + "variants": { + "regular": { + "familyName": "Viga", + "fullName": "Viga-Regular", + "postscriptName": "Viga-Regular", + "category": "sans-serif", + "capHeight": 712, + "ascent": 1015, + "descent": -329, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 571, + "xWidthAvg": 452, + "subsets": { + "latin": { + "xWidthAvg": 452 + }, + "thai": { + "xWidthAvg": 483 + } + } + } + } + }, + "vinaSans": { + "familyName": "Vina Sans", + "fullName": "Vina Sans Regular", + "postscriptName": "VinaSans-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1045, + "descent": -170, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 361, + "subsets": { + "latin": { + "xWidthAvg": 361 + }, + "thai": { + "xWidthAvg": 810 + } + }, + "variants": { + "regular": { + "familyName": "Vina Sans", + "fullName": "Vina Sans Regular", + "postscriptName": "VinaSans-Regular", + "category": "display", + "capHeight": 700, + "ascent": 1045, + "descent": -170, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 361, + "subsets": { + "latin": { + "xWidthAvg": 361 + }, + "thai": { + "xWidthAvg": 810 + } + } + } + } + }, + "voces": { + "familyName": "Voces", + "fullName": "Voces Regular", + "postscriptName": "Voces-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1014, + "descent": -335, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 255 + } + }, + "variants": { + "regular": { + "familyName": "Voces", + "fullName": "Voces Regular", + "postscriptName": "Voces-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1014, + "descent": -335, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 520, + "xWidthAvg": 470, + "subsets": { + "latin": { + "xWidthAvg": 470 + }, + "thai": { + "xWidthAvg": 255 + } + } + } + } + }, + "volkhov": { + "familyName": "Volkhov", + "fullName": "Volkhov Regular", + "postscriptName": "Volkhov-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 971, + "descent": -319, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 252 + } + }, + "variants": { + "700": { + "familyName": "Volkhov", + "fullName": "Volkhov Bold", + "postscriptName": "Volkhov-Bold", + "category": "serif", + "capHeight": 700, + "ascent": 971, + "descent": -319, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 252 + } + } + }, + "regular": { + "familyName": "Volkhov", + "fullName": "Volkhov Regular", + "postscriptName": "Volkhov-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 971, + "descent": -319, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 486, + "subsets": { + "latin": { + "xWidthAvg": 486 + }, + "thai": { + "xWidthAvg": 252 + } + } + }, + "italic": { + "familyName": "Volkhov", + "fullName": "Volkhov Italic", + "postscriptName": "Volkhov-Italic", + "category": "serif", + "capHeight": 700, + "ascent": 971, + "descent": -319, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 507, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 252 + } + } + }, + "700italic": { + "familyName": "Volkhov", + "fullName": "Volkhov Bold Italic", + "postscriptName": "Volkhov-BoldItalic", + "category": "serif", + "capHeight": 700, + "ascent": 971, + "descent": -319, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 507, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 252 + } + } + } + } + }, + "vollkorn": { + "familyName": "Vollkorn", + "fullName": "Vollkorn Regular", + "postscriptName": "Vollkorn-Regular", + "category": "serif", + "capHeight": 676, + "ascent": 952, + "descent": -441, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 458, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 454 + } + }, + "variants": { + "500": { + "familyName": "Vollkorn", + "fullName": "Vollkorn Medium", + "postscriptName": "Vollkorn-Medium", + "category": "serif", + "capHeight": 676, + "ascent": 952, + "descent": -441, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 458, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 454 + } + } + }, + "600": { + "familyName": "Vollkorn", + "fullName": "Vollkorn SemiBold", + "postscriptName": "Vollkorn-SemiBold", + "category": "serif", + "capHeight": 676, + "ascent": 952, + "descent": -441, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 458, + "xWidthAvg": 460, + "subsets": { + "latin": { + "xWidthAvg": 460 + }, + "thai": { + "xWidthAvg": 454 + } + } + }, + "700": { + "familyName": "Vollkorn", + "fullName": "Vollkorn Bold", + "postscriptName": "Vollkorn-Bold", + "category": "serif", + "capHeight": 676, + "ascent": 952, + "descent": -441, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 458, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 454 + } + } + }, + "800": { + "familyName": "Vollkorn", + "fullName": "Vollkorn ExtraBold", + "postscriptName": "Vollkorn-ExtraBold", + "category": "serif", + "capHeight": 676, + "ascent": 952, + "descent": -441, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 458, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 454 + } + } + }, + "900": { + "familyName": "Vollkorn", + "fullName": "Vollkorn Black", + "postscriptName": "Vollkorn-Black", + "category": "serif", + "capHeight": 676, + "ascent": 952, + "descent": -441, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 458, + "xWidthAvg": 506, + "subsets": { + "latin": { + "xWidthAvg": 506 + }, + "thai": { + "xWidthAvg": 454 + } + } + }, + "regular": { + "familyName": "Vollkorn", + "fullName": "Vollkorn Regular", + "postscriptName": "Vollkorn-Regular", + "category": "serif", + "capHeight": 676, + "ascent": 952, + "descent": -441, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 458, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 454 + } + } + }, + "italic": { + "familyName": "Vollkorn", + "fullName": "Vollkorn Italic", + "postscriptName": "Vollkorn-Italic", + "category": "serif", + "capHeight": 676, + "ascent": 952, + "descent": -441, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 458, + "xWidthAvg": 381, + "subsets": { + "latin": { + "xWidthAvg": 381 + }, + "thai": { + "xWidthAvg": 453 + } + } + }, + "900italic": { + "familyName": "Vollkorn", + "fullName": "Vollkorn Black Italic", + "postscriptName": "Vollkorn-BlackItalic", + "category": "serif", + "capHeight": 676, + "ascent": 952, + "descent": -441, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 458, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 453 + } + } + }, + "800italic": { + "familyName": "Vollkorn", + "fullName": "Vollkorn ExtraBold Italic", + "postscriptName": "Vollkorn-ExtraBoldItalic", + "category": "serif", + "capHeight": 676, + "ascent": 952, + "descent": -441, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 458, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 453 + } + } + }, + "700italic": { + "familyName": "Vollkorn", + "fullName": "Vollkorn Bold Italic", + "postscriptName": "Vollkorn-BoldItalic", + "category": "serif", + "capHeight": 676, + "ascent": 952, + "descent": -441, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 458, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 453 + } + } + }, + "600italic": { + "familyName": "Vollkorn", + "fullName": "Vollkorn SemiBold Italic", + "postscriptName": "Vollkorn-SemiBoldItalic", + "category": "serif", + "capHeight": 676, + "ascent": 952, + "descent": -441, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 458, + "xWidthAvg": 416, + "subsets": { + "latin": { + "xWidthAvg": 416 + }, + "thai": { + "xWidthAvg": 453 + } + } + }, + "500italic": { + "familyName": "Vollkorn", + "fullName": "Vollkorn Medium Italic", + "postscriptName": "Vollkorn-MediumItalic", + "category": "serif", + "capHeight": 676, + "ascent": 952, + "descent": -441, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 458, + "xWidthAvg": 398, + "subsets": { + "latin": { + "xWidthAvg": 398 + }, + "thai": { + "xWidthAvg": 453 + } + } + } + } + }, + "vollkornSC": { + "familyName": "Vollkorn SC", + "fullName": "Vollkorn SC Regular", + "postscriptName": "VollkornSC-Regular", + "category": "serif", + "capHeight": 676, + "ascent": 952, + "descent": -441, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 458, + "xWidthAvg": 547, + "subsets": { + "latin": { + "xWidthAvg": 547 + }, + "thai": { + "xWidthAvg": 454 + } + }, + "variants": { + "600": { + "familyName": "Vollkorn SC", + "fullName": "Vollkorn SC SemiBold", + "postscriptName": "VollkornSC-SemiBold", + "category": "serif", + "capHeight": 676, + "ascent": 952, + "descent": -441, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 458, + "xWidthAvg": 555, + "subsets": { + "latin": { + "xWidthAvg": 555 + }, + "thai": { + "xWidthAvg": 454 + } + } + }, + "700": { + "familyName": "Vollkorn SC", + "fullName": "Vollkorn SC Bold", + "postscriptName": "VollkornSC-Bold", + "category": "serif", + "capHeight": 676, + "ascent": 952, + "descent": -441, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 458, + "xWidthAvg": 564, + "subsets": { + "latin": { + "xWidthAvg": 564 + }, + "thai": { + "xWidthAvg": 454 + } + } + }, + "900": { + "familyName": "Vollkorn SC", + "fullName": "Vollkorn SC Black", + "postscriptName": "VollkornSC-Black", + "category": "serif", + "capHeight": 676, + "ascent": 952, + "descent": -441, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 458, + "xWidthAvg": 578, + "subsets": { + "latin": { + "xWidthAvg": 578 + }, + "thai": { + "xWidthAvg": 454 + } + } + }, + "regular": { + "familyName": "Vollkorn SC", + "fullName": "Vollkorn SC Regular", + "postscriptName": "VollkornSC-Regular", + "category": "serif", + "capHeight": 676, + "ascent": 952, + "descent": -441, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 458, + "xWidthAvg": 547, + "subsets": { + "latin": { + "xWidthAvg": 547 + }, + "thai": { + "xWidthAvg": 454 + } + } + } + } + }, + "voltaire": { + "familyName": "Voltaire", + "fullName": "Voltaire Regular", + "postscriptName": "Voltaire-Regular", + "category": "sans-serif", + "capHeight": 1593, + "ascent": 2020, + "descent": -531, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1062, + "xWidthAvg": 741, + "subsets": { + "latin": { + "xWidthAvg": 741 + }, + "thai": { + "xWidthAvg": 1770 + } + }, + "variants": { + "regular": { + "familyName": "Voltaire", + "fullName": "Voltaire Regular", + "postscriptName": "Voltaire-Regular", + "category": "sans-serif", + "capHeight": 1593, + "ascent": 2020, + "descent": -531, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 1062, + "xWidthAvg": 741, + "subsets": { + "latin": { + "xWidthAvg": 741 + }, + "thai": { + "xWidthAvg": 1770 + } + } + } + } + }, + "vujahdayScript": { + "familyName": "Vujahday Script", + "fullName": "Vujahday Script Regular", + "postscriptName": "VujahdayScript-Regular", + "category": "handwriting", + "capHeight": 640, + "ascent": 950, + "descent": -410, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 360, + "xWidthAvg": 378, + "subsets": { + "latin": { + "xWidthAvg": 378 + }, + "thai": { + "xWidthAvg": 494 + } + }, + "variants": { + "regular": { + "familyName": "Vujahday Script", + "fullName": "Vujahday Script Regular", + "postscriptName": "VujahdayScript-Regular", + "category": "handwriting", + "capHeight": 640, + "ascent": 950, + "descent": -410, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 360, + "xWidthAvg": 378, + "subsets": { + "latin": { + "xWidthAvg": 378 + }, + "thai": { + "xWidthAvg": 494 + } + } + } + } + }, + "waitingForTheSunrise": { + "familyName": "Waiting for the Sunrise", + "fullName": "Waiting for the Sunrise", + "postscriptName": "WaitingfortheSunrise", + "category": "handwriting", + "capHeight": 755, + "ascent": 1146, + "descent": -547, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 570, + "xWidthAvg": 396, + "subsets": { + "latin": { + "xWidthAvg": 396 + }, + "thai": { + "xWidthAvg": 461 + } + }, + "variants": { + "regular": { + "familyName": "Waiting for the Sunrise", + "fullName": "Waiting for the Sunrise", + "postscriptName": "WaitingfortheSunrise", + "category": "handwriting", + "capHeight": 755, + "ascent": 1146, + "descent": -547, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 570, + "xWidthAvg": 396, + "subsets": { + "latin": { + "xWidthAvg": 396 + }, + "thai": { + "xWidthAvg": 461 + } + } + } + } + }, + "wallpoet": { + "familyName": "Wallpoet", + "fullName": "Wallpoet", + "postscriptName": "Wallpoet", + "category": "display", + "capHeight": 575, + "ascent": 806, + "descent": -196, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 615, + "subsets": { + "latin": { + "xWidthAvg": 615 + }, + "thai": { + "xWidthAvg": 1015 + } + }, + "variants": { + "regular": { + "familyName": "Wallpoet", + "fullName": "Wallpoet", + "postscriptName": "Wallpoet", + "category": "display", + "capHeight": 575, + "ascent": 806, + "descent": -196, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 615, + "subsets": { + "latin": { + "xWidthAvg": 615 + }, + "thai": { + "xWidthAvg": 1015 + } + } + } + } + }, + "walterTurncoat": { + "familyName": "Walter Turncoat", + "fullName": "Walter Turncoat Regular", + "postscriptName": "WalterTurncoat-Regular", + "category": "handwriting", + "capHeight": 752, + "ascent": 1078, + "descent": -323, + "lineGap": 29, + "unitsPerEm": 1024, + "xHeight": 559, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 328 + } + }, + "variants": { + "regular": { + "familyName": "Walter Turncoat", + "fullName": "Walter Turncoat Regular", + "postscriptName": "WalterTurncoat-Regular", + "category": "handwriting", + "capHeight": 752, + "ascent": 1078, + "descent": -323, + "lineGap": 29, + "unitsPerEm": 1024, + "xHeight": 559, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 328 + } + } + } + } + }, + "warnes": { + "familyName": "Warnes", + "fullName": "Warnes Regular", + "postscriptName": "Warnes-Regular", + "category": "display", + "capHeight": 710, + "ascent": 994, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 616, + "subsets": { + "latin": { + "xWidthAvg": 616 + }, + "thai": { + "xWidthAvg": 400 + } + }, + "variants": { + "regular": { + "familyName": "Warnes", + "fullName": "Warnes Regular", + "postscriptName": "Warnes-Regular", + "category": "display", + "capHeight": 710, + "ascent": 994, + "descent": -310, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 616, + "subsets": { + "latin": { + "xWidthAvg": 616 + }, + "thai": { + "xWidthAvg": 400 + } + } + } + } + }, + "waterBrush": { + "familyName": "Water Brush", + "fullName": "Water Brush Regular", + "postscriptName": "WaterBrush-Regular", + "category": "handwriting", + "capHeight": 750, + "ascent": 1000, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 375, + "xWidthAvg": 318, + "subsets": { + "latin": { + "xWidthAvg": 318 + }, + "thai": { + "xWidthAvg": 370 + } + }, + "variants": { + "regular": { + "familyName": "Water Brush", + "fullName": "Water Brush Regular", + "postscriptName": "WaterBrush-Regular", + "category": "handwriting", + "capHeight": 750, + "ascent": 1000, + "descent": -450, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 375, + "xWidthAvg": 318, + "subsets": { + "latin": { + "xWidthAvg": 318 + }, + "thai": { + "xWidthAvg": 370 + } + } + } + } + }, + "waterfall": { + "familyName": "Waterfall", + "fullName": "Waterfall Regular", + "postscriptName": "Waterfall-Regular", + "category": "handwriting", + "capHeight": 580, + "ascent": 880, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 215, + "xWidthAvg": 249, + "subsets": { + "latin": { + "xWidthAvg": 249 + }, + "thai": { + "xWidthAvg": 494 + } + }, + "variants": { + "regular": { + "familyName": "Waterfall", + "fullName": "Waterfall Regular", + "postscriptName": "Waterfall-Regular", + "category": "handwriting", + "capHeight": 580, + "ascent": 880, + "descent": -280, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 215, + "xWidthAvg": 249, + "subsets": { + "latin": { + "xWidthAvg": 249 + }, + "thai": { + "xWidthAvg": 494 + } + } + } + } + }, + "wavefont": { + "familyName": "Wavefont", + "fullName": "Wavefont Regular", + "postscriptName": "Wavefont-Regular", + "category": "display", + "capHeight": 0, + "ascent": 1200, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 100, + "subsets": { + "latin": { + "xWidthAvg": 100 + }, + "thai": { + "xWidthAvg": 100 + } + }, + "variants": { + "100": { + "familyName": "Wavefont", + "fullName": "Wavefont Thin", + "postscriptName": "Wavefont-Thin", + "category": "display", + "capHeight": 0, + "ascent": 1200, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 25, + "subsets": { + "latin": { + "xWidthAvg": 25 + }, + "thai": { + "xWidthAvg": 25 + } + } + }, + "200": { + "familyName": "Wavefont", + "fullName": "Wavefont ExtraLight", + "postscriptName": "Wavefont-ExtraLight", + "category": "display", + "capHeight": 0, + "ascent": 1200, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 50, + "subsets": { + "latin": { + "xWidthAvg": 50 + }, + "thai": { + "xWidthAvg": 50 + } + } + }, + "300": { + "familyName": "Wavefont", + "fullName": "Wavefont Light", + "postscriptName": "Wavefont-Light", + "category": "display", + "capHeight": 0, + "ascent": 1200, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 75, + "subsets": { + "latin": { + "xWidthAvg": 75 + }, + "thai": { + "xWidthAvg": 75 + } + } + }, + "500": { + "familyName": "Wavefont", + "fullName": "Wavefont Medium", + "postscriptName": "Wavefont-Medium", + "category": "display", + "capHeight": 0, + "ascent": 1200, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 125, + "subsets": { + "latin": { + "xWidthAvg": 125 + }, + "thai": { + "xWidthAvg": 125 + } + } + }, + "600": { + "familyName": "Wavefont", + "fullName": "Wavefont SemiBold", + "postscriptName": "Wavefont-SemiBold", + "category": "display", + "capHeight": 0, + "ascent": 1200, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 150, + "subsets": { + "latin": { + "xWidthAvg": 150 + }, + "thai": { + "xWidthAvg": 150 + } + } + }, + "700": { + "familyName": "Wavefont", + "fullName": "Wavefont Bold", + "postscriptName": "Wavefont-Bold", + "category": "display", + "capHeight": 0, + "ascent": 1200, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 175, + "subsets": { + "latin": { + "xWidthAvg": 175 + }, + "thai": { + "xWidthAvg": 175 + } + } + }, + "800": { + "familyName": "Wavefont", + "fullName": "Wavefont ExtraBold", + "postscriptName": "Wavefont-ExtraBold", + "category": "display", + "capHeight": 0, + "ascent": 1200, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 200, + "subsets": { + "latin": { + "xWidthAvg": 200 + }, + "thai": { + "xWidthAvg": 200 + } + } + }, + "900": { + "familyName": "Wavefont", + "fullName": "Wavefont Black", + "postscriptName": "Wavefont-Black", + "category": "display", + "capHeight": 0, + "ascent": 1200, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 225, + "subsets": { + "latin": { + "xWidthAvg": 225 + }, + "thai": { + "xWidthAvg": 225 + } + } + }, + "regular": { + "familyName": "Wavefont", + "fullName": "Wavefont Regular", + "postscriptName": "Wavefont-Regular", + "category": "display", + "capHeight": 0, + "ascent": 1200, + "descent": -200, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 0, + "xWidthAvg": 100, + "subsets": { + "latin": { + "xWidthAvg": 100 + }, + "thai": { + "xWidthAvg": 100 + } + } + } + } + }, + "wellfleet": { + "familyName": "Wellfleet", + "fullName": "Wellfleet", + "postscriptName": "Wellfleet-Regular", + "category": "serif", + "capHeight": 1535, + "ascent": 2020, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 747, + "xWidthAvg": 1030, + "subsets": { + "latin": { + "xWidthAvg": 1030 + }, + "thai": { + "xWidthAvg": 1877 + } + }, + "variants": { + "regular": { + "familyName": "Wellfleet", + "fullName": "Wellfleet", + "postscriptName": "Wellfleet-Regular", + "category": "serif", + "capHeight": 1535, + "ascent": 2020, + "descent": -540, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 747, + "xWidthAvg": 1030, + "subsets": { + "latin": { + "xWidthAvg": 1030 + }, + "thai": { + "xWidthAvg": 1877 + } + } + } + } + }, + "wendyOne": { + "familyName": "Wendy One", + "fullName": "Wendy One", + "postscriptName": "WendyOne-Regular", + "category": "sans-serif", + "capHeight": 606, + "ascent": 819, + "descent": -236, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 200 + } + }, + "variants": { + "regular": { + "familyName": "Wendy One", + "fullName": "Wendy One", + "postscriptName": "WendyOne-Regular", + "category": "sans-serif", + "capHeight": 606, + "ascent": 819, + "descent": -236, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 474, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 200 + } + } + } + } + }, + "whisper": { + "familyName": "Whisper", + "fullName": "Whisper Regular", + "postscriptName": "Whisper-Regular", + "category": "handwriting", + "capHeight": 620, + "ascent": 880, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 300, + "xWidthAvg": 305, + "subsets": { + "latin": { + "xWidthAvg": 305 + }, + "thai": { + "xWidthAvg": 370 + } + }, + "variants": { + "regular": { + "familyName": "Whisper", + "fullName": "Whisper Regular", + "postscriptName": "Whisper-Regular", + "category": "handwriting", + "capHeight": 620, + "ascent": 880, + "descent": -400, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 300, + "xWidthAvg": 305, + "subsets": { + "latin": { + "xWidthAvg": 305 + }, + "thai": { + "xWidthAvg": 370 + } + } + } + } + }, + "windSong": { + "familyName": "WindSong", + "fullName": "WindSong Regular", + "postscriptName": "WindSong-Regular", + "category": "handwriting", + "capHeight": 705, + "ascent": 890, + "descent": -515, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 268, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 495 + } + }, + "variants": { + "500": { + "familyName": "WindSong", + "fullName": "WindSong Medium", + "postscriptName": "WindSong-Medium", + "category": "handwriting", + "capHeight": 705, + "ascent": 890, + "descent": -515, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 268, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 495 + } + } + }, + "regular": { + "familyName": "WindSong", + "fullName": "WindSong Regular", + "postscriptName": "WindSong-Regular", + "category": "handwriting", + "capHeight": 705, + "ascent": 890, + "descent": -515, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 268, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 495 + } + } + } + } + }, + "wireOne": { + "familyName": "Wire One", + "fullName": "Wire One Regular", + "postscriptName": "WireOne-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 890, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 232, + "subsets": { + "latin": { + "xWidthAvg": 232 + }, + "thai": { + "xWidthAvg": 288 + } + }, + "variants": { + "regular": { + "familyName": "Wire One", + "fullName": "Wire One Regular", + "postscriptName": "WireOne-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 890, + "descent": -210, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 232, + "subsets": { + "latin": { + "xWidthAvg": 232 + }, + "thai": { + "xWidthAvg": 288 + } + } + } + } + }, + "wittgenstein": { + "familyName": "Wittgenstein", + "fullName": "Wittgenstein Regular", + "postscriptName": "Wittgenstein-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 1065, + "descent": -435, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 700 + } + }, + "variants": { + "500": { + "familyName": "Wittgenstein", + "fullName": "Wittgenstein Medium", + "postscriptName": "Wittgenstein-Medium", + "category": "serif", + "capHeight": 700, + "ascent": 1065, + "descent": -435, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 461, + "subsets": { + "latin": { + "xWidthAvg": 461 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "600": { + "familyName": "Wittgenstein", + "fullName": "Wittgenstein SemiBold", + "postscriptName": "Wittgenstein-SemiBold", + "category": "serif", + "capHeight": 700, + "ascent": 1065, + "descent": -435, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "700": { + "familyName": "Wittgenstein", + "fullName": "Wittgenstein Bold", + "postscriptName": "Wittgenstein-Bold", + "category": "serif", + "capHeight": 700, + "ascent": 1065, + "descent": -435, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "800": { + "familyName": "Wittgenstein", + "fullName": "Wittgenstein ExtraBold", + "postscriptName": "Wittgenstein-ExtraBold", + "category": "serif", + "capHeight": 700, + "ascent": 1065, + "descent": -435, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "900": { + "familyName": "Wittgenstein", + "fullName": "Wittgenstein Black", + "postscriptName": "Wittgenstein-Black", + "category": "serif", + "capHeight": 700, + "ascent": 1065, + "descent": -435, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 484, + "subsets": { + "latin": { + "xWidthAvg": 484 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "regular": { + "familyName": "Wittgenstein", + "fullName": "Wittgenstein Regular", + "postscriptName": "Wittgenstein-Regular", + "category": "serif", + "capHeight": 700, + "ascent": 1065, + "descent": -435, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "italic": { + "familyName": "Wittgenstein", + "fullName": "Wittgenstein Italic", + "postscriptName": "Wittgenstein-Italic", + "category": "serif", + "capHeight": 700, + "ascent": 1065, + "descent": -435, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 736 + } + } + }, + "900italic": { + "familyName": "Wittgenstein", + "fullName": "Wittgenstein Black Italic", + "postscriptName": "Wittgenstein-BlackItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1065, + "descent": -435, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 475, + "subsets": { + "latin": { + "xWidthAvg": 475 + }, + "thai": { + "xWidthAvg": 700 + } + } + }, + "800italic": { + "familyName": "Wittgenstein", + "fullName": "Wittgenstein ExtraBold Italic", + "postscriptName": "Wittgenstein-ExtraBoldItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1065, + "descent": -435, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 707 + } + } + }, + "700italic": { + "familyName": "Wittgenstein", + "fullName": "Wittgenstein Bold Italic", + "postscriptName": "Wittgenstein-BoldItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1065, + "descent": -435, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 714 + } + } + }, + "600italic": { + "familyName": "Wittgenstein", + "fullName": "Wittgenstein SemiBold Italic", + "postscriptName": "Wittgenstein-SemiBoldItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1065, + "descent": -435, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 722 + } + } + }, + "500italic": { + "familyName": "Wittgenstein", + "fullName": "Wittgenstein Medium Italic", + "postscriptName": "Wittgenstein-MediumItalic", + "category": "serif", + "capHeight": 700, + "ascent": 1065, + "descent": -435, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 729 + } + } + } + } + }, + "wixMadeforDisplay": { + "familyName": "Wix Madefor Display", + "fullName": "Wix Madefor Display Regular", + "postscriptName": "WixMadeforDisplay-Regular", + "category": "sans-serif", + "capHeight": 715, + "ascent": 1008, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "500": { + "familyName": "Wix Madefor Display", + "fullName": "Wix Madefor Display Medium", + "postscriptName": "WixMadeforDisplay-Medium", + "category": "sans-serif", + "capHeight": 715, + "ascent": 1008, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Wix Madefor Display", + "fullName": "Wix Madefor Display SemiBold", + "postscriptName": "WixMadeforDisplay-SemiBold", + "category": "sans-serif", + "capHeight": 715, + "ascent": 1008, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 478, + "subsets": { + "latin": { + "xWidthAvg": 478 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Wix Madefor Display", + "fullName": "Wix Madefor Display Bold", + "postscriptName": "WixMadeforDisplay-Bold", + "category": "sans-serif", + "capHeight": 715, + "ascent": 1008, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Wix Madefor Display", + "fullName": "Wix Madefor Display ExtraBold", + "postscriptName": "WixMadeforDisplay-ExtraBold", + "category": "sans-serif", + "capHeight": 715, + "ascent": 1008, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Wix Madefor Display", + "fullName": "Wix Madefor Display Regular", + "postscriptName": "WixMadeforDisplay-Regular", + "category": "sans-serif", + "capHeight": 715, + "ascent": 1008, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "wixMadeforText": { + "familyName": "Wix Madefor Text", + "fullName": "Wix Madefor Text Regular", + "postscriptName": "WixMadeforText-Regular", + "category": "sans-serif", + "capHeight": 715, + "ascent": 1008, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "500": { + "familyName": "Wix Madefor Text", + "fullName": "Wix Madefor Text Medium", + "postscriptName": "WixMadeforText-Medium", + "category": "sans-serif", + "capHeight": 715, + "ascent": 1008, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 497, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Wix Madefor Text", + "fullName": "Wix Madefor Text SemiBold", + "postscriptName": "WixMadeforText-SemiBold", + "category": "sans-serif", + "capHeight": 715, + "ascent": 1008, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 477, + "subsets": { + "latin": { + "xWidthAvg": 477 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Wix Madefor Text", + "fullName": "Wix Madefor Text Bold", + "postscriptName": "WixMadeforText-Bold", + "category": "sans-serif", + "capHeight": 715, + "ascent": 1008, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 503, + "xWidthAvg": 482, + "subsets": { + "latin": { + "xWidthAvg": 482 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Wix Madefor Text", + "fullName": "Wix Madefor Text ExtraBold", + "postscriptName": "WixMadeforText-ExtraBold", + "category": "sans-serif", + "capHeight": 715, + "ascent": 1008, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 490, + "subsets": { + "latin": { + "xWidthAvg": 490 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Wix Madefor Text", + "fullName": "Wix Madefor Text Regular", + "postscriptName": "WixMadeforText-Regular", + "category": "sans-serif", + "capHeight": 715, + "ascent": 1008, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 467, + "subsets": { + "latin": { + "xWidthAvg": 467 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Wix Madefor Text", + "fullName": "Wix Madefor Text Italic", + "postscriptName": "WixMadeforText-Italic", + "category": "sans-serif", + "capHeight": 715, + "ascent": 1008, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 492, + "xWidthAvg": 459, + "subsets": { + "latin": { + "xWidthAvg": 459 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800italic": { + "familyName": "Wix Madefor Text", + "fullName": "Wix Madefor Text ExtraBold Italic", + "postscriptName": "WixMadeforText-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 715, + "ascent": 1008, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 480, + "subsets": { + "latin": { + "xWidthAvg": 480 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700italic": { + "familyName": "Wix Madefor Text", + "fullName": "Wix Madefor Text Bold Italic", + "postscriptName": "WixMadeforText-BoldItalic", + "category": "sans-serif", + "capHeight": 715, + "ascent": 1008, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 503, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600italic": { + "familyName": "Wix Madefor Text", + "fullName": "Wix Madefor Text SemiBold Italic", + "postscriptName": "WixMadeforText-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 715, + "ascent": 1008, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500italic": { + "familyName": "Wix Madefor Text", + "fullName": "Wix Madefor Text Medium Italic", + "postscriptName": "WixMadeforText-MediumItalic", + "category": "sans-serif", + "capHeight": 715, + "ascent": 1008, + "descent": -252, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 497, + "xWidthAvg": 464, + "subsets": { + "latin": { + "xWidthAvg": 464 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "workSans": { + "familyName": "Work Sans", + "fullName": "Work Sans Regular", + "postscriptName": "WorkSans-Regular", + "category": "sans-serif", + "capHeight": 660, + "ascent": 930, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 499, + "subsets": { + "latin": { + "xWidthAvg": 499 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "100": { + "familyName": "Work Sans", + "fullName": "Work Sans Thin", + "postscriptName": "WorkSans-Thin", + "category": "sans-serif", + "capHeight": 660, + "ascent": 930, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 444, + "subsets": { + "latin": { + "xWidthAvg": 444 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200": { + "familyName": "Work Sans", + "fullName": "Work Sans ExtraLight", + "postscriptName": "WorkSans-ExtraLight", + "category": "sans-serif", + "capHeight": 660, + "ascent": 930, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Work Sans", + "fullName": "Work Sans Light", + "postscriptName": "WorkSans-Light", + "category": "sans-serif", + "capHeight": 660, + "ascent": 930, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Work Sans", + "fullName": "Work Sans Medium", + "postscriptName": "WorkSans-Medium", + "category": "sans-serif", + "capHeight": 660, + "ascent": 930, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Work Sans", + "fullName": "Work Sans SemiBold", + "postscriptName": "WorkSans-SemiBold", + "category": "sans-serif", + "capHeight": 660, + "ascent": 930, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 501, + "subsets": { + "latin": { + "xWidthAvg": 501 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Work Sans", + "fullName": "Work Sans Bold", + "postscriptName": "WorkSans-Bold", + "category": "sans-serif", + "capHeight": 660, + "ascent": 930, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800": { + "familyName": "Work Sans", + "fullName": "Work Sans ExtraBold", + "postscriptName": "WorkSans-ExtraBold", + "category": "sans-serif", + "capHeight": 660, + "ascent": 930, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 502, + "subsets": { + "latin": { + "xWidthAvg": 502 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900": { + "familyName": "Work Sans", + "fullName": "Work Sans Black", + "postscriptName": "WorkSans-Black", + "category": "sans-serif", + "capHeight": 660, + "ascent": 930, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 503, + "subsets": { + "latin": { + "xWidthAvg": 503 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Work Sans", + "fullName": "Work Sans Regular", + "postscriptName": "WorkSans-Regular", + "category": "sans-serif", + "capHeight": 660, + "ascent": 930, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 499, + "subsets": { + "latin": { + "xWidthAvg": 499 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Work Sans", + "fullName": "Work Sans Italic", + "postscriptName": "WorkSans-Italic", + "category": "sans-serif", + "capHeight": 660, + "ascent": 930, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 493, + "subsets": { + "latin": { + "xWidthAvg": 493 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "900italic": { + "familyName": "Work Sans", + "fullName": "Work Sans Black Italic", + "postscriptName": "WorkSans-BlackItalic", + "category": "sans-serif", + "capHeight": 660, + "ascent": 930, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 507, + "subsets": { + "latin": { + "xWidthAvg": 507 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "800italic": { + "familyName": "Work Sans", + "fullName": "Work Sans ExtraBold Italic", + "postscriptName": "WorkSans-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 660, + "ascent": 930, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 504, + "subsets": { + "latin": { + "xWidthAvg": 504 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700italic": { + "familyName": "Work Sans", + "fullName": "Work Sans Bold Italic", + "postscriptName": "WorkSans-BoldItalic", + "category": "sans-serif", + "capHeight": 660, + "ascent": 930, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 501, + "subsets": { + "latin": { + "xWidthAvg": 501 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600italic": { + "familyName": "Work Sans", + "fullName": "Work Sans SemiBold Italic", + "postscriptName": "WorkSans-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 660, + "ascent": 930, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500italic": { + "familyName": "Work Sans", + "fullName": "Work Sans Medium Italic", + "postscriptName": "WorkSans-MediumItalic", + "category": "sans-serif", + "capHeight": 660, + "ascent": 930, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 496, + "subsets": { + "latin": { + "xWidthAvg": 496 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300italic": { + "familyName": "Work Sans", + "fullName": "Work Sans Light Italic", + "postscriptName": "WorkSans-LightItalic", + "category": "sans-serif", + "capHeight": 660, + "ascent": 930, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "200italic": { + "familyName": "Work Sans", + "fullName": "Work Sans ExtraLight Italic", + "postscriptName": "WorkSans-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 660, + "ascent": 930, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 455, + "subsets": { + "latin": { + "xWidthAvg": 455 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "100italic": { + "familyName": "Work Sans", + "fullName": "Work Sans Thin Italic", + "postscriptName": "WorkSans-ThinItalic", + "category": "sans-serif", + "capHeight": 660, + "ascent": 930, + "descent": -243, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 446, + "subsets": { + "latin": { + "xWidthAvg": 446 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "workbench": { + "familyName": "Workbench", + "fullName": "Workbench Regular", + "postscriptName": "Workbench-Regular", + "category": "monospace", + "capHeight": 896, + "ascent": 896, + "descent": -128, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 640, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 512 + } + }, + "variants": { + "regular": { + "familyName": "Workbench", + "fullName": "Workbench Regular", + "postscriptName": "Workbench-Regular", + "category": "monospace", + "capHeight": 896, + "ascent": 896, + "descent": -128, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 640, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 512 + } + } + } + } + }, + "xanhMono": { + "familyName": "Xanh Mono", + "fullName": "Xanh Mono Regular", + "postscriptName": "XanhMono-Regular", + "category": "monospace", + "capHeight": 740, + "ascent": 970, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Xanh Mono", + "fullName": "Xanh Mono Regular", + "postscriptName": "XanhMono-Regular", + "category": "monospace", + "capHeight": 740, + "ascent": 970, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Xanh Mono", + "fullName": "Xanh Mono Italic", + "postscriptName": "XanhMono-Italic", + "category": "monospace", + "capHeight": 740, + "ascent": 970, + "descent": -220, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 540, + "xWidthAvg": 500, + "subsets": { + "latin": { + "xWidthAvg": 500 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "yaldevi": { + "familyName": "Yaldevi", + "fullName": "Yaldevi Regular", + "postscriptName": "Yaldevi-Regular", + "category": "sans-serif", + "capHeight": 769, + "ascent": 1060, + "descent": -256, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 570, + "xWidthAvg": 432, + "subsets": { + "latin": { + "xWidthAvg": 432 + }, + "thai": { + "xWidthAvg": 719 + } + }, + "variants": { + "200": { + "familyName": "Yaldevi", + "fullName": "Yaldevi ExtraLight", + "postscriptName": "Yaldevi-ExtraLight", + "category": "sans-serif", + "capHeight": 769, + "ascent": 1060, + "descent": -256, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 570, + "xWidthAvg": 420, + "subsets": { + "latin": { + "xWidthAvg": 420 + }, + "thai": { + "xWidthAvg": 719 + } + } + }, + "300": { + "familyName": "Yaldevi", + "fullName": "Yaldevi Light", + "postscriptName": "Yaldevi-Light", + "category": "sans-serif", + "capHeight": 769, + "ascent": 1060, + "descent": -256, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 570, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 719 + } + } + }, + "500": { + "familyName": "Yaldevi", + "fullName": "Yaldevi Medium", + "postscriptName": "Yaldevi-Medium", + "category": "sans-serif", + "capHeight": 769, + "ascent": 1060, + "descent": -256, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 570, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 719 + } + } + }, + "600": { + "familyName": "Yaldevi", + "fullName": "Yaldevi SemiBold", + "postscriptName": "Yaldevi-SemiBold", + "category": "sans-serif", + "capHeight": 769, + "ascent": 1060, + "descent": -256, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 570, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 719 + } + } + }, + "700": { + "familyName": "Yaldevi", + "fullName": "Yaldevi Bold", + "postscriptName": "Yaldevi-Bold", + "category": "sans-serif", + "capHeight": 769, + "ascent": 1060, + "descent": -256, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 570, + "xWidthAvg": 462, + "subsets": { + "latin": { + "xWidthAvg": 462 + }, + "thai": { + "xWidthAvg": 719 + } + } + }, + "regular": { + "familyName": "Yaldevi", + "fullName": "Yaldevi Regular", + "postscriptName": "Yaldevi-Regular", + "category": "sans-serif", + "capHeight": 769, + "ascent": 1060, + "descent": -256, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 570, + "xWidthAvg": 432, + "subsets": { + "latin": { + "xWidthAvg": 432 + }, + "thai": { + "xWidthAvg": 719 + } + } + } + } + }, + "yanoneKaffeesatz": { + "familyName": "Yanone Kaffeesatz", + "fullName": "Yanone Kaffeesatz Regular", + "postscriptName": "YanoneKaffeesatz-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 735, + "descent": -200, + "lineGap": 57, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 308, + "subsets": { + "latin": { + "xWidthAvg": 308 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "200": { + "familyName": "Yanone Kaffeesatz", + "fullName": "Yanone Kaffeesatz ExtraLight", + "postscriptName": "YanoneKaffeesatz-ExtraLight", + "category": "sans-serif", + "capHeight": 700, + "ascent": 735, + "descent": -200, + "lineGap": 57, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 334, + "subsets": { + "latin": { + "xWidthAvg": 334 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "300": { + "familyName": "Yanone Kaffeesatz", + "fullName": "Yanone Kaffeesatz Light", + "postscriptName": "YanoneKaffeesatz-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 735, + "descent": -200, + "lineGap": 57, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 324, + "subsets": { + "latin": { + "xWidthAvg": 324 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "500": { + "familyName": "Yanone Kaffeesatz", + "fullName": "Yanone Kaffeesatz Medium", + "postscriptName": "YanoneKaffeesatz-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 735, + "descent": -200, + "lineGap": 57, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 303, + "subsets": { + "latin": { + "xWidthAvg": 303 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "600": { + "familyName": "Yanone Kaffeesatz", + "fullName": "Yanone Kaffeesatz SemiBold", + "postscriptName": "YanoneKaffeesatz-SemiBold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 735, + "descent": -200, + "lineGap": 57, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 298, + "subsets": { + "latin": { + "xWidthAvg": 298 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "700": { + "familyName": "Yanone Kaffeesatz", + "fullName": "Yanone Kaffeesatz Bold", + "postscriptName": "YanoneKaffeesatz-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 735, + "descent": -200, + "lineGap": 57, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 293, + "subsets": { + "latin": { + "xWidthAvg": 293 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "regular": { + "familyName": "Yanone Kaffeesatz", + "fullName": "Yanone Kaffeesatz Regular", + "postscriptName": "YanoneKaffeesatz-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 735, + "descent": -200, + "lineGap": 57, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 308, + "subsets": { + "latin": { + "xWidthAvg": 308 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "yantramanav": { + "familyName": "Yantramanav", + "fullName": "Yantramanav Regular", + "postscriptName": "Yantramanav-Regular", + "category": "sans-serif", + "capHeight": 1279, + "ascent": 1923, + "descent": -733, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 986, + "xWidthAvg": 843, + "subsets": { + "latin": { + "xWidthAvg": 843 + }, + "thai": { + "xWidthAvg": 817 + } + }, + "variants": { + "100": { + "familyName": "Yantramanav", + "fullName": "Yantramanav Thin", + "postscriptName": "Yantramanav-Thin", + "category": "sans-serif", + "capHeight": 1279, + "ascent": 1923, + "descent": -733, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 986, + "xWidthAvg": 802, + "subsets": { + "latin": { + "xWidthAvg": 802 + }, + "thai": { + "xWidthAvg": 817 + } + } + }, + "300": { + "familyName": "Yantramanav", + "fullName": "Yantramanav Light", + "postscriptName": "Yantramanav-Light", + "category": "sans-serif", + "capHeight": 1279, + "ascent": 1923, + "descent": -733, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 986, + "xWidthAvg": 822, + "subsets": { + "latin": { + "xWidthAvg": 822 + }, + "thai": { + "xWidthAvg": 817 + } + } + }, + "500": { + "familyName": "Yantramanav", + "fullName": "Yantramanav Medium", + "postscriptName": "Yantramanav-Medium", + "category": "sans-serif", + "capHeight": 1279, + "ascent": 1923, + "descent": -733, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 986, + "xWidthAvg": 845, + "subsets": { + "latin": { + "xWidthAvg": 845 + }, + "thai": { + "xWidthAvg": 817 + } + } + }, + "700": { + "familyName": "Yantramanav", + "fullName": "Yantramanav Bold", + "postscriptName": "Yantramanav-Bold", + "category": "sans-serif", + "capHeight": 1279, + "ascent": 1923, + "descent": -733, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 986, + "xWidthAvg": 845, + "subsets": { + "latin": { + "xWidthAvg": 845 + }, + "thai": { + "xWidthAvg": 817 + } + } + }, + "900": { + "familyName": "Yantramanav", + "fullName": "Yantramanav Black", + "postscriptName": "Yantramanav-Black", + "category": "sans-serif", + "capHeight": 1279, + "ascent": 1923, + "descent": -733, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 986, + "xWidthAvg": 848, + "subsets": { + "latin": { + "xWidthAvg": 848 + }, + "thai": { + "xWidthAvg": 817 + } + } + }, + "regular": { + "familyName": "Yantramanav", + "fullName": "Yantramanav Regular", + "postscriptName": "Yantramanav-Regular", + "category": "sans-serif", + "capHeight": 1279, + "ascent": 1923, + "descent": -733, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 986, + "xWidthAvg": 843, + "subsets": { + "latin": { + "xWidthAvg": 843 + }, + "thai": { + "xWidthAvg": 817 + } + } + } + } + }, + "yarndings12": { + "familyName": "Yarndings 12", + "fullName": "Yarndings 12 Regular", + "postscriptName": "Yarndings12-Regular", + "category": "display", + "capHeight": 700, + "ascent": 910, + "descent": -130, + "lineGap": 0, + "unitsPerEm": 1040, + "xHeight": 500, + "xWidthAvg": 740, + "subsets": { + "latin": { + "xWidthAvg": 740 + }, + "thai": { + "xWidthAvg": 520 + } + }, + "variants": { + "regular": { + "familyName": "Yarndings 12", + "fullName": "Yarndings 12 Regular", + "postscriptName": "Yarndings12-Regular", + "category": "display", + "capHeight": 700, + "ascent": 910, + "descent": -130, + "lineGap": 0, + "unitsPerEm": 1040, + "xHeight": 500, + "xWidthAvg": 740, + "subsets": { + "latin": { + "xWidthAvg": 740 + }, + "thai": { + "xWidthAvg": 520 + } + } + } + } + }, + "yarndings12Charted": { + "familyName": "Yarndings 12 Charted", + "fullName": "Yarndings 12 Charted Regular", + "postscriptName": "Yarndings12Charted-Regular", + "category": "display", + "capHeight": 700, + "ascent": 910, + "descent": -130, + "lineGap": 0, + "unitsPerEm": 1040, + "xHeight": 500, + "xWidthAvg": 747, + "subsets": { + "latin": { + "xWidthAvg": 747 + }, + "thai": { + "xWidthAvg": 520 + } + }, + "variants": { + "regular": { + "familyName": "Yarndings 12 Charted", + "fullName": "Yarndings 12 Charted Regular", + "postscriptName": "Yarndings12Charted-Regular", + "category": "display", + "capHeight": 700, + "ascent": 910, + "descent": -130, + "lineGap": 0, + "unitsPerEm": 1040, + "xHeight": 500, + "xWidthAvg": 747, + "subsets": { + "latin": { + "xWidthAvg": 747 + }, + "thai": { + "xWidthAvg": 520 + } + } + } + } + }, + "yarndings20": { + "familyName": "Yarndings 20", + "fullName": "Yarndings 20 Regular", + "postscriptName": "Yarndings20-Regular", + "category": "display", + "capHeight": 700, + "ascent": 880, + "descent": -80, + "lineGap": 0, + "unitsPerEm": 960, + "xHeight": 500, + "xWidthAvg": 676, + "subsets": { + "latin": { + "xWidthAvg": 676 + }, + "thai": { + "xWidthAvg": 480 + } + }, + "variants": { + "regular": { + "familyName": "Yarndings 20", + "fullName": "Yarndings 20 Regular", + "postscriptName": "Yarndings20-Regular", + "category": "display", + "capHeight": 700, + "ascent": 880, + "descent": -80, + "lineGap": 0, + "unitsPerEm": 960, + "xHeight": 500, + "xWidthAvg": 676, + "subsets": { + "latin": { + "xWidthAvg": 676 + }, + "thai": { + "xWidthAvg": 480 + } + } + } + } + }, + "yarndings20Charted": { + "familyName": "Yarndings 20 Charted", + "fullName": "Yarndings 20 Charted Regular", + "postscriptName": "Yarndings20Charted-Regular", + "category": "display", + "capHeight": 700, + "ascent": 880, + "descent": -80, + "lineGap": 0, + "unitsPerEm": 960, + "xHeight": 500, + "xWidthAvg": 676, + "subsets": { + "latin": { + "xWidthAvg": 676 + }, + "thai": { + "xWidthAvg": 480 + } + }, + "variants": { + "regular": { + "familyName": "Yarndings 20 Charted", + "fullName": "Yarndings 20 Charted Regular", + "postscriptName": "Yarndings20Charted-Regular", + "category": "display", + "capHeight": 700, + "ascent": 880, + "descent": -80, + "lineGap": 0, + "unitsPerEm": 960, + "xHeight": 500, + "xWidthAvg": 676, + "subsets": { + "latin": { + "xWidthAvg": 676 + }, + "thai": { + "xWidthAvg": 480 + } + } + } + } + }, + "yatraOne": { + "familyName": "Yatra One", + "fullName": "Yatra One Regular", + "postscriptName": "YatraOne-Regular", + "category": "display", + "capHeight": 679, + "ascent": 991, + "descent": -487, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 497, + "subsets": { + "latin": { + "xWidthAvg": 497 + }, + "thai": { + "xWidthAvg": 756 + } + }, + "variants": { + "regular": { + "familyName": "Yatra One", + "fullName": "Yatra One Regular", + "postscriptName": "YatraOne-Regular", + "category": "display", + "capHeight": 679, + "ascent": 991, + "descent": -487, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 497, + "subsets": { + "latin": { + "xWidthAvg": 497 + }, + "thai": { + "xWidthAvg": 756 + } + } + } + } + }, + "yellowtail": { + "familyName": "Yellowtail", + "fullName": "Yellowtail Regular", + "postscriptName": "Yellowtail-Regular", + "category": "handwriting", + "ascent": 1990, + "descent": -617, + "lineGap": 184, + "unitsPerEm": 2048, + "xWidthAvg": 691, + "subsets": { + "latin": { + "xWidthAvg": 691 + }, + "thai": { + "xWidthAvg": 2048 + } + }, + "variants": { + "regular": { + "familyName": "Yellowtail", + "fullName": "Yellowtail Regular", + "postscriptName": "Yellowtail-Regular", + "category": "handwriting", + "ascent": 1990, + "descent": -617, + "lineGap": 184, + "unitsPerEm": 2048, + "xWidthAvg": 691, + "subsets": { + "latin": { + "xWidthAvg": 691 + }, + "thai": { + "xWidthAvg": 2048 + } + } + } + } + }, + "yeonSung": { + "familyName": "Yeon Sung", + "fullName": "Yeon Sung Regular", + "postscriptName": "YeonSung-Regular", + "category": "display", + "capHeight": 659, + "ascent": 800, + "descent": -200, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 446, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 900 + } + }, + "variants": { + "regular": { + "familyName": "Yeon Sung", + "fullName": "Yeon Sung Regular", + "postscriptName": "YeonSung-Regular", + "category": "display", + "capHeight": 659, + "ascent": 800, + "descent": -200, + "lineGap": 250, + "unitsPerEm": 1000, + "xHeight": 446, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 900 + } + } + } + } + }, + "yesevaOne": { + "familyName": "Yeseva One", + "fullName": "Yeseva One Regular", + "postscriptName": "YesevaOne-Regular", + "category": "display", + "capHeight": 700, + "ascent": 915, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 285 + } + }, + "variants": { + "regular": { + "familyName": "Yeseva One", + "fullName": "Yeseva One Regular", + "postscriptName": "YesevaOne-Regular", + "category": "display", + "capHeight": 700, + "ascent": 915, + "descent": -240, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 285 + } + } + } + } + }, + "yesteryear": { + "familyName": "Yesteryear", + "fullName": "Yesteryear", + "postscriptName": "Yesteryear-Regular", + "category": "handwriting", + "capHeight": 1581, + "ascent": 2001, + "descent": -1004, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 625, + "xWidthAvg": 688, + "subsets": { + "latin": { + "xWidthAvg": 688 + }, + "thai": { + "xWidthAvg": 461 + } + }, + "variants": { + "regular": { + "familyName": "Yesteryear", + "fullName": "Yesteryear", + "postscriptName": "Yesteryear-Regular", + "category": "handwriting", + "capHeight": 1581, + "ascent": 2001, + "descent": -1004, + "lineGap": 0, + "unitsPerEm": 2048, + "xHeight": 625, + "xWidthAvg": 688, + "subsets": { + "latin": { + "xWidthAvg": 688 + }, + "thai": { + "xWidthAvg": 461 + } + } + } + } + }, + "yomogi": { + "familyName": "Yomogi", + "fullName": "Yomogi Regular", + "postscriptName": "Yomogi-Regular", + "category": "handwriting", + "capHeight": 720, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 516, + "subsets": { + "latin": { + "xWidthAvg": 516 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Yomogi", + "fullName": "Yomogi Regular", + "postscriptName": "Yomogi-Regular", + "category": "handwriting", + "capHeight": 720, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 475, + "xWidthAvg": 516, + "subsets": { + "latin": { + "xWidthAvg": 516 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "youngSerif": { + "familyName": "Young Serif", + "fullName": "Young Serif Regular", + "postscriptName": "YoungSerif-Regular", + "category": "serif", + "capHeight": 750, + "ascent": 1046, + "descent": -366, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 511, + "subsets": { + "latin": { + "xWidthAvg": 511 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Young Serif", + "fullName": "Young Serif Regular", + "postscriptName": "YoungSerif-Regular", + "category": "serif", + "capHeight": 750, + "ascent": 1046, + "descent": -366, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 500, + "xWidthAvg": 511, + "subsets": { + "latin": { + "xWidthAvg": 511 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "yrsa": { + "familyName": "Yrsa", + "fullName": "Yrsa Regular", + "postscriptName": "Yrsa-Regular", + "category": "serif", + "capHeight": 568, + "ascent": 728, + "descent": -272, + "lineGap": 218, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 396, + "subsets": { + "latin": { + "xWidthAvg": 396 + }, + "thai": { + "xWidthAvg": 643 + } + }, + "variants": { + "300": { + "familyName": "Yrsa", + "fullName": "Yrsa Light", + "postscriptName": "Yrsa-Light", + "category": "serif", + "capHeight": 568, + "ascent": 728, + "descent": -272, + "lineGap": 218, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 393, + "subsets": { + "latin": { + "xWidthAvg": 393 + }, + "thai": { + "xWidthAvg": 643 + } + } + }, + "500": { + "familyName": "Yrsa", + "fullName": "Yrsa Medium", + "postscriptName": "Yrsa-Medium", + "category": "serif", + "capHeight": 568, + "ascent": 728, + "descent": -272, + "lineGap": 218, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 399, + "subsets": { + "latin": { + "xWidthAvg": 399 + }, + "thai": { + "xWidthAvg": 643 + } + } + }, + "600": { + "familyName": "Yrsa", + "fullName": "Yrsa SemiBold", + "postscriptName": "Yrsa-SemiBold", + "category": "serif", + "capHeight": 568, + "ascent": 728, + "descent": -272, + "lineGap": 218, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 643 + } + } + }, + "700": { + "familyName": "Yrsa", + "fullName": "Yrsa Bold", + "postscriptName": "Yrsa-Bold", + "category": "serif", + "capHeight": 568, + "ascent": 728, + "descent": -272, + "lineGap": 218, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 404, + "subsets": { + "latin": { + "xWidthAvg": 404 + }, + "thai": { + "xWidthAvg": 643 + } + } + }, + "regular": { + "familyName": "Yrsa", + "fullName": "Yrsa Regular", + "postscriptName": "Yrsa-Regular", + "category": "serif", + "capHeight": 568, + "ascent": 728, + "descent": -272, + "lineGap": 218, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 396, + "subsets": { + "latin": { + "xWidthAvg": 396 + }, + "thai": { + "xWidthAvg": 643 + } + } + }, + "italic": { + "familyName": "Yrsa", + "fullName": "Yrsa Italic", + "postscriptName": "Yrsa-Italic", + "category": "serif", + "capHeight": 568, + "ascent": 728, + "descent": -272, + "lineGap": 218, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 371, + "subsets": { + "latin": { + "xWidthAvg": 371 + }, + "thai": { + "xWidthAvg": 645 + } + } + }, + "700italic": { + "familyName": "Yrsa", + "fullName": "Yrsa Bold Italic", + "postscriptName": "Yrsa-BoldItalic", + "category": "serif", + "capHeight": 568, + "ascent": 728, + "descent": -272, + "lineGap": 218, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 395, + "subsets": { + "latin": { + "xWidthAvg": 395 + }, + "thai": { + "xWidthAvg": 645 + } + } + }, + "600italic": { + "familyName": "Yrsa", + "fullName": "Yrsa SemiBold Italic", + "postscriptName": "Yrsa-SemiBoldItalic", + "category": "serif", + "capHeight": 568, + "ascent": 728, + "descent": -272, + "lineGap": 218, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 387, + "subsets": { + "latin": { + "xWidthAvg": 387 + }, + "thai": { + "xWidthAvg": 645 + } + } + }, + "500italic": { + "familyName": "Yrsa", + "fullName": "Yrsa Medium Italic", + "postscriptName": "Yrsa-MediumItalic", + "category": "serif", + "capHeight": 568, + "ascent": 728, + "descent": -272, + "lineGap": 218, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 379, + "subsets": { + "latin": { + "xWidthAvg": 379 + }, + "thai": { + "xWidthAvg": 645 + } + } + }, + "300italic": { + "familyName": "Yrsa", + "fullName": "Yrsa Light Italic", + "postscriptName": "Yrsa-LightItalic", + "category": "serif", + "capHeight": 568, + "ascent": 728, + "descent": -272, + "lineGap": 218, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 363, + "subsets": { + "latin": { + "xWidthAvg": 363 + }, + "thai": { + "xWidthAvg": 645 + } + } + } + } + }, + "ysabeau": { + "familyName": "Ysabeau", + "fullName": "Ysabeau Regular", + "postscriptName": "Ysabeau-Regular", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 414, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 527 + } + }, + "variants": { + "100": { + "familyName": "Ysabeau", + "fullName": "Ysabeau Thin", + "postscriptName": "Ysabeau-Thin", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 408, + "xWidthAvg": 413, + "subsets": { + "latin": { + "xWidthAvg": 413 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "200": { + "familyName": "Ysabeau", + "fullName": "Ysabeau ExtraLight", + "postscriptName": "Ysabeau-ExtraLight", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 410, + "xWidthAvg": 415, + "subsets": { + "latin": { + "xWidthAvg": 415 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "300": { + "familyName": "Ysabeau", + "fullName": "Ysabeau Light", + "postscriptName": "Ysabeau-Light", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 418, + "subsets": { + "latin": { + "xWidthAvg": 418 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "500": { + "familyName": "Ysabeau", + "fullName": "Ysabeau Medium", + "postscriptName": "Ysabeau-Medium", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 421, + "subsets": { + "latin": { + "xWidthAvg": 421 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "600": { + "familyName": "Ysabeau", + "fullName": "Ysabeau SemiBold", + "postscriptName": "Ysabeau-SemiBold", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 418, + "xWidthAvg": 424, + "subsets": { + "latin": { + "xWidthAvg": 424 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "700": { + "familyName": "Ysabeau", + "fullName": "Ysabeau Bold", + "postscriptName": "Ysabeau-Bold", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 421, + "xWidthAvg": 427, + "subsets": { + "latin": { + "xWidthAvg": 427 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "800": { + "familyName": "Ysabeau", + "fullName": "Ysabeau ExtraBold", + "postscriptName": "Ysabeau-ExtraBold", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 424, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "900": { + "familyName": "Ysabeau", + "fullName": "Ysabeau Black", + "postscriptName": "Ysabeau-Black", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 427, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "regular": { + "familyName": "Ysabeau", + "fullName": "Ysabeau Regular", + "postscriptName": "Ysabeau-Regular", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 414, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "italic": { + "familyName": "Ysabeau", + "fullName": "Ysabeau Italic", + "postscriptName": "Ysabeau-Italic", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 414, + "xWidthAvg": 399, + "subsets": { + "latin": { + "xWidthAvg": 399 + }, + "thai": { + "xWidthAvg": 505 + } + } + }, + "900italic": { + "familyName": "Ysabeau", + "fullName": "Ysabeau Black Italic", + "postscriptName": "Ysabeau-BlackItalic", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 427, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 524 + } + } + }, + "800italic": { + "familyName": "Ysabeau", + "fullName": "Ysabeau ExtraBold Italic", + "postscriptName": "Ysabeau-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 424, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 520 + } + } + }, + "700italic": { + "familyName": "Ysabeau", + "fullName": "Ysabeau Bold Italic", + "postscriptName": "Ysabeau-BoldItalic", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 421, + "xWidthAvg": 408, + "subsets": { + "latin": { + "xWidthAvg": 408 + }, + "thai": { + "xWidthAvg": 517 + } + } + }, + "600italic": { + "familyName": "Ysabeau", + "fullName": "Ysabeau SemiBold Italic", + "postscriptName": "Ysabeau-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 418, + "xWidthAvg": 405, + "subsets": { + "latin": { + "xWidthAvg": 405 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "500italic": { + "familyName": "Ysabeau", + "fullName": "Ysabeau Medium Italic", + "postscriptName": "Ysabeau-MediumItalic", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 507 + } + } + }, + "300italic": { + "familyName": "Ysabeau", + "fullName": "Ysabeau Light Italic", + "postscriptName": "Ysabeau-LightItalic", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 397, + "subsets": { + "latin": { + "xWidthAvg": 397 + }, + "thai": { + "xWidthAvg": 502 + } + } + }, + "200italic": { + "familyName": "Ysabeau", + "fullName": "Ysabeau ExtraLight Italic", + "postscriptName": "Ysabeau-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 410, + "xWidthAvg": 393, + "subsets": { + "latin": { + "xWidthAvg": 393 + }, + "thai": { + "xWidthAvg": 498 + } + } + }, + "100italic": { + "familyName": "Ysabeau", + "fullName": "Ysabeau Thin Italic", + "postscriptName": "Ysabeau-ThinItalic", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 408, + "xWidthAvg": 390, + "subsets": { + "latin": { + "xWidthAvg": 390 + }, + "thai": { + "xWidthAvg": 494 + } + } + } + } + }, + "ysabeauInfant": { + "familyName": "Ysabeau Infant", + "fullName": "Ysabeau Infant Regular", + "postscriptName": "YsabeauInfant-Regular", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 414, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 527 + } + }, + "variants": { + "100": { + "familyName": "Ysabeau Infant", + "fullName": "Ysabeau Infant Thin", + "postscriptName": "YsabeauInfant-Thin", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 408, + "xWidthAvg": 421, + "subsets": { + "latin": { + "xWidthAvg": 421 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "200": { + "familyName": "Ysabeau Infant", + "fullName": "Ysabeau Infant ExtraLight", + "postscriptName": "YsabeauInfant-ExtraLight", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 410, + "xWidthAvg": 424, + "subsets": { + "latin": { + "xWidthAvg": 424 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "300": { + "familyName": "Ysabeau Infant", + "fullName": "Ysabeau Infant Light", + "postscriptName": "YsabeauInfant-Light", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 426, + "subsets": { + "latin": { + "xWidthAvg": 426 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "500": { + "familyName": "Ysabeau Infant", + "fullName": "Ysabeau Infant Medium", + "postscriptName": "YsabeauInfant-Medium", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "600": { + "familyName": "Ysabeau Infant", + "fullName": "Ysabeau Infant SemiBold", + "postscriptName": "YsabeauInfant-SemiBold", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 418, + "xWidthAvg": 432, + "subsets": { + "latin": { + "xWidthAvg": 432 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "700": { + "familyName": "Ysabeau Infant", + "fullName": "Ysabeau Infant Bold", + "postscriptName": "YsabeauInfant-Bold", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 421, + "xWidthAvg": 435, + "subsets": { + "latin": { + "xWidthAvg": 435 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "800": { + "familyName": "Ysabeau Infant", + "fullName": "Ysabeau Infant ExtraBold", + "postscriptName": "YsabeauInfant-ExtraBold", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 424, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "900": { + "familyName": "Ysabeau Infant", + "fullName": "Ysabeau Infant Black", + "postscriptName": "YsabeauInfant-Black", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 427, + "xWidthAvg": 456, + "subsets": { + "latin": { + "xWidthAvg": 456 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "regular": { + "familyName": "Ysabeau Infant", + "fullName": "Ysabeau Infant Regular", + "postscriptName": "YsabeauInfant-Regular", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 414, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "italic": { + "familyName": "Ysabeau Infant", + "fullName": "Ysabeau Infant Italic", + "postscriptName": "YsabeauInfant-Italic", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 414, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 505 + } + } + }, + "900italic": { + "familyName": "Ysabeau Infant", + "fullName": "Ysabeau Infant Black Italic", + "postscriptName": "YsabeauInfant-BlackItalic", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 427, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 524 + } + } + }, + "800italic": { + "familyName": "Ysabeau Infant", + "fullName": "Ysabeau Infant ExtraBold Italic", + "postscriptName": "YsabeauInfant-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 424, + "xWidthAvg": 429, + "subsets": { + "latin": { + "xWidthAvg": 429 + }, + "thai": { + "xWidthAvg": 520 + } + } + }, + "700italic": { + "familyName": "Ysabeau Infant", + "fullName": "Ysabeau Infant Bold Italic", + "postscriptName": "YsabeauInfant-BoldItalic", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 421, + "xWidthAvg": 410, + "subsets": { + "latin": { + "xWidthAvg": 410 + }, + "thai": { + "xWidthAvg": 517 + } + } + }, + "600italic": { + "familyName": "Ysabeau Infant", + "fullName": "Ysabeau Infant SemiBold Italic", + "postscriptName": "YsabeauInfant-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 418, + "xWidthAvg": 407, + "subsets": { + "latin": { + "xWidthAvg": 407 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "500italic": { + "familyName": "Ysabeau Infant", + "fullName": "Ysabeau Infant Medium Italic", + "postscriptName": "YsabeauInfant-MediumItalic", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 403, + "subsets": { + "latin": { + "xWidthAvg": 403 + }, + "thai": { + "xWidthAvg": 507 + } + } + }, + "300italic": { + "familyName": "Ysabeau Infant", + "fullName": "Ysabeau Infant Light Italic", + "postscriptName": "YsabeauInfant-LightItalic", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 399, + "subsets": { + "latin": { + "xWidthAvg": 399 + }, + "thai": { + "xWidthAvg": 502 + } + } + }, + "200italic": { + "familyName": "Ysabeau Infant", + "fullName": "Ysabeau Infant ExtraLight Italic", + "postscriptName": "YsabeauInfant-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 410, + "xWidthAvg": 395, + "subsets": { + "latin": { + "xWidthAvg": 395 + }, + "thai": { + "xWidthAvg": 498 + } + } + }, + "100italic": { + "familyName": "Ysabeau Infant", + "fullName": "Ysabeau Infant Thin Italic", + "postscriptName": "YsabeauInfant-ThinItalic", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 408, + "xWidthAvg": 392, + "subsets": { + "latin": { + "xWidthAvg": 392 + }, + "thai": { + "xWidthAvg": 494 + } + } + } + } + }, + "ysabeauOffice": { + "familyName": "Ysabeau Office", + "fullName": "Ysabeau Office Regular", + "postscriptName": "YsabeauOffice-Regular", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 414, + "xWidthAvg": 420, + "subsets": { + "latin": { + "xWidthAvg": 420 + }, + "thai": { + "xWidthAvg": 527 + } + }, + "variants": { + "100": { + "familyName": "Ysabeau Office", + "fullName": "Ysabeau Office Thin", + "postscriptName": "YsabeauOffice-Thin", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 408, + "xWidthAvg": 414, + "subsets": { + "latin": { + "xWidthAvg": 414 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "200": { + "familyName": "Ysabeau Office", + "fullName": "Ysabeau Office ExtraLight", + "postscriptName": "YsabeauOffice-ExtraLight", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 410, + "xWidthAvg": 416, + "subsets": { + "latin": { + "xWidthAvg": 416 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "300": { + "familyName": "Ysabeau Office", + "fullName": "Ysabeau Office Light", + "postscriptName": "YsabeauOffice-Light", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 419, + "subsets": { + "latin": { + "xWidthAvg": 419 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "500": { + "familyName": "Ysabeau Office", + "fullName": "Ysabeau Office Medium", + "postscriptName": "YsabeauOffice-Medium", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 422, + "subsets": { + "latin": { + "xWidthAvg": 422 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "600": { + "familyName": "Ysabeau Office", + "fullName": "Ysabeau Office SemiBold", + "postscriptName": "YsabeauOffice-SemiBold", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 418, + "xWidthAvg": 425, + "subsets": { + "latin": { + "xWidthAvg": 425 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "700": { + "familyName": "Ysabeau Office", + "fullName": "Ysabeau Office Bold", + "postscriptName": "YsabeauOffice-Bold", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 421, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "800": { + "familyName": "Ysabeau Office", + "fullName": "Ysabeau Office ExtraBold", + "postscriptName": "YsabeauOffice-ExtraBold", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 424, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "900": { + "familyName": "Ysabeau Office", + "fullName": "Ysabeau Office Black", + "postscriptName": "YsabeauOffice-Black", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 427, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "regular": { + "familyName": "Ysabeau Office", + "fullName": "Ysabeau Office Regular", + "postscriptName": "YsabeauOffice-Regular", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 414, + "xWidthAvg": 420, + "subsets": { + "latin": { + "xWidthAvg": 420 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "italic": { + "familyName": "Ysabeau Office", + "fullName": "Ysabeau Office Italic", + "postscriptName": "YsabeauOffice-Italic", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 414, + "xWidthAvg": 401, + "subsets": { + "latin": { + "xWidthAvg": 401 + }, + "thai": { + "xWidthAvg": 505 + } + } + }, + "900italic": { + "familyName": "Ysabeau Office", + "fullName": "Ysabeau Office Black Italic", + "postscriptName": "YsabeauOffice-BlackItalic", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 427, + "xWidthAvg": 449, + "subsets": { + "latin": { + "xWidthAvg": 449 + }, + "thai": { + "xWidthAvg": 524 + } + } + }, + "800italic": { + "familyName": "Ysabeau Office", + "fullName": "Ysabeau Office ExtraBold Italic", + "postscriptName": "YsabeauOffice-ExtraBoldItalic", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 424, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 520 + } + } + }, + "700italic": { + "familyName": "Ysabeau Office", + "fullName": "Ysabeau Office Bold Italic", + "postscriptName": "YsabeauOffice-BoldItalic", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 421, + "xWidthAvg": 410, + "subsets": { + "latin": { + "xWidthAvg": 410 + }, + "thai": { + "xWidthAvg": 517 + } + } + }, + "600italic": { + "familyName": "Ysabeau Office", + "fullName": "Ysabeau Office SemiBold Italic", + "postscriptName": "YsabeauOffice-SemiBoldItalic", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 418, + "xWidthAvg": 406, + "subsets": { + "latin": { + "xWidthAvg": 406 + }, + "thai": { + "xWidthAvg": 512 + } + } + }, + "500italic": { + "familyName": "Ysabeau Office", + "fullName": "Ysabeau Office Medium Italic", + "postscriptName": "YsabeauOffice-MediumItalic", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 403, + "subsets": { + "latin": { + "xWidthAvg": 403 + }, + "thai": { + "xWidthAvg": 507 + } + } + }, + "300italic": { + "familyName": "Ysabeau Office", + "fullName": "Ysabeau Office Light Italic", + "postscriptName": "YsabeauOffice-LightItalic", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 399, + "subsets": { + "latin": { + "xWidthAvg": 399 + }, + "thai": { + "xWidthAvg": 502 + } + } + }, + "200italic": { + "familyName": "Ysabeau Office", + "fullName": "Ysabeau Office ExtraLight Italic", + "postscriptName": "YsabeauOffice-ExtraLightItalic", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 410, + "xWidthAvg": 396, + "subsets": { + "latin": { + "xWidthAvg": 396 + }, + "thai": { + "xWidthAvg": 498 + } + } + }, + "100italic": { + "familyName": "Ysabeau Office", + "fullName": "Ysabeau Office Thin Italic", + "postscriptName": "YsabeauOffice-ThinItalic", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 408, + "xWidthAvg": 393, + "subsets": { + "latin": { + "xWidthAvg": 393 + }, + "thai": { + "xWidthAvg": 494 + } + } + } + } + }, + "ysabeauSC": { + "familyName": "Ysabeau SC", + "fullName": "Ysabeau SC Regular", + "postscriptName": "YsabeauSC-Regular", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 414, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 527 + } + }, + "variants": { + "100": { + "familyName": "Ysabeau SC", + "fullName": "Ysabeau SC Thin", + "postscriptName": "YsabeauSC-Thin", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 408, + "xWidthAvg": 463, + "subsets": { + "latin": { + "xWidthAvg": 463 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "200": { + "familyName": "Ysabeau SC", + "fullName": "Ysabeau SC ExtraLight", + "postscriptName": "YsabeauSC-ExtraLight", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 410, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "300": { + "familyName": "Ysabeau SC", + "fullName": "Ysabeau SC Light", + "postscriptName": "YsabeauSC-Light", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 413, + "xWidthAvg": 468, + "subsets": { + "latin": { + "xWidthAvg": 468 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "500": { + "familyName": "Ysabeau SC", + "fullName": "Ysabeau SC Medium", + "postscriptName": "YsabeauSC-Medium", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 416, + "xWidthAvg": 471, + "subsets": { + "latin": { + "xWidthAvg": 471 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "600": { + "familyName": "Ysabeau SC", + "fullName": "Ysabeau SC SemiBold", + "postscriptName": "YsabeauSC-SemiBold", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 418, + "xWidthAvg": 473, + "subsets": { + "latin": { + "xWidthAvg": 473 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "700": { + "familyName": "Ysabeau SC", + "fullName": "Ysabeau SC Bold", + "postscriptName": "YsabeauSC-Bold", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 421, + "xWidthAvg": 476, + "subsets": { + "latin": { + "xWidthAvg": 476 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "800": { + "familyName": "Ysabeau SC", + "fullName": "Ysabeau SC ExtraBold", + "postscriptName": "YsabeauSC-ExtraBold", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 424, + "xWidthAvg": 485, + "subsets": { + "latin": { + "xWidthAvg": 485 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "900": { + "familyName": "Ysabeau SC", + "fullName": "Ysabeau SC Black", + "postscriptName": "YsabeauSC-Black", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 427, + "xWidthAvg": 495, + "subsets": { + "latin": { + "xWidthAvg": 495 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "regular": { + "familyName": "Ysabeau SC", + "fullName": "Ysabeau SC Regular", + "postscriptName": "YsabeauSC-Regular", + "category": "sans-serif", + "capHeight": 658, + "ascent": 1054, + "descent": -289, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 414, + "xWidthAvg": 469, + "subsets": { + "latin": { + "xWidthAvg": 469 + }, + "thai": { + "xWidthAvg": 527 + } + } + } + } + }, + "yujiBoku": { + "familyName": "Yuji Boku", + "fullName": "Yuji Boku Regular", + "postscriptName": "YujiBoku-Regular", + "category": "serif", + "capHeight": 761, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 545, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Yuji Boku", + "fullName": "Yuji Boku Regular", + "postscriptName": "YujiBoku-Regular", + "category": "serif", + "capHeight": 761, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 545, + "xWidthAvg": 512, + "subsets": { + "latin": { + "xWidthAvg": 512 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "yujiHentaiganaAkari": { + "familyName": "Yuji Hentaigana Akari", + "fullName": "Yuji Hentaigana Akari Regular", + "postscriptName": "YujiHentaiganaAkari-Regular", + "category": "handwriting", + "capHeight": 761, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 545, + "xWidthAvg": 626, + "subsets": { + "latin": { + "xWidthAvg": 626 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Yuji Hentaigana Akari", + "fullName": "Yuji Hentaigana Akari Regular", + "postscriptName": "YujiHentaiganaAkari-Regular", + "category": "handwriting", + "capHeight": 761, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 545, + "xWidthAvg": 626, + "subsets": { + "latin": { + "xWidthAvg": 626 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "yujiHentaiganaAkebono": { + "familyName": "Yuji Hentaigana Akebono", + "fullName": "Yuji Hentaigana Akebono Regular", + "postscriptName": "YujiHentaiganaAkebono-Regular", + "category": "handwriting", + "capHeight": 761, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 545, + "xWidthAvg": 626, + "subsets": { + "latin": { + "xWidthAvg": 626 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Yuji Hentaigana Akebono", + "fullName": "Yuji Hentaigana Akebono Regular", + "postscriptName": "YujiHentaiganaAkebono-Regular", + "category": "handwriting", + "capHeight": 761, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 545, + "xWidthAvg": 626, + "subsets": { + "latin": { + "xWidthAvg": 626 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "yujiMai": { + "familyName": "Yuji Mai", + "fullName": "Yuji Mai Regular", + "postscriptName": "YujiMai-Regular", + "category": "serif", + "capHeight": 761, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 545, + "xWidthAvg": 534, + "subsets": { + "latin": { + "xWidthAvg": 534 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Yuji Mai", + "fullName": "Yuji Mai Regular", + "postscriptName": "YujiMai-Regular", + "category": "serif", + "capHeight": 761, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 545, + "xWidthAvg": 534, + "subsets": { + "latin": { + "xWidthAvg": 534 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "yujiSyuku": { + "familyName": "Yuji Syuku", + "fullName": "Yuji Syuku Regular", + "postscriptName": "YujiSyuku-Regular", + "category": "serif", + "capHeight": 761, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 545, + "xWidthAvg": 533, + "subsets": { + "latin": { + "xWidthAvg": 533 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Yuji Syuku", + "fullName": "Yuji Syuku Regular", + "postscriptName": "YujiSyuku-Regular", + "category": "serif", + "capHeight": 761, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 545, + "xWidthAvg": 533, + "subsets": { + "latin": { + "xWidthAvg": 533 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "yuseiMagic": { + "familyName": "Yusei Magic", + "fullName": "Yusei Magic Regular", + "postscriptName": "YuseiMagic-Regular", + "category": "sans-serif", + "capHeight": 760, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Yusei Magic", + "fullName": "Yusei Magic Regular", + "postscriptName": "YuseiMagic-Regular", + "category": "sans-serif", + "capHeight": 760, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 510, + "xWidthAvg": 498, + "subsets": { + "latin": { + "xWidthAvg": 498 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "zCOOLKuaiLe": { + "familyName": "ZCOOL KuaiLe", + "fullName": "ZCOOL KuaiLe Regular", + "postscriptName": "ZCOOLKuaiLe-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 880, + "descent": -120, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "ZCOOL KuaiLe", + "fullName": "ZCOOL KuaiLe Regular", + "postscriptName": "ZCOOLKuaiLe-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 880, + "descent": -120, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 512, + "xWidthAvg": 489, + "subsets": { + "latin": { + "xWidthAvg": 489 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "zCOOLQingKeHuangYou": { + "familyName": "ZCOOL QingKe HuangYou", + "fullName": "ZCOOL QingKe HuangYou Regular", + "postscriptName": "ZCOOLQingKeHuangYou-Regular", + "category": "sans-serif", + "capHeight": 710, + "ascent": 880, + "descent": -120, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 353, + "subsets": { + "latin": { + "xWidthAvg": 353 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "ZCOOL QingKe HuangYou", + "fullName": "ZCOOL QingKe HuangYou Regular", + "postscriptName": "ZCOOLQingKeHuangYou-Regular", + "category": "sans-serif", + "capHeight": 710, + "ascent": 880, + "descent": -120, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 485, + "xWidthAvg": 353, + "subsets": { + "latin": { + "xWidthAvg": 353 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "zCOOLXiaoWei": { + "familyName": "ZCOOL XiaoWei", + "fullName": "ZCOOL XiaoWei Regular", + "postscriptName": "ZCOOLXiaoWei-Regular", + "category": "sans-serif", + "capHeight": 660, + "ascent": 880, + "descent": -120, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 1024 + } + }, + "variants": { + "regular": { + "familyName": "ZCOOL XiaoWei", + "fullName": "ZCOOL XiaoWei Regular", + "postscriptName": "ZCOOLXiaoWei-Regular", + "category": "sans-serif", + "capHeight": 660, + "ascent": 880, + "descent": -120, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 470, + "xWidthAvg": 428, + "subsets": { + "latin": { + "xWidthAvg": 428 + }, + "thai": { + "xWidthAvg": 1024 + } + } + } + } + }, + "zain": { + "familyName": "Zain", + "fullName": "Zain Regular", + "postscriptName": "Zain-Regular", + "category": "sans-serif", + "capHeight": 556, + "ascent": 900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 368, + "xWidthAvg": 348, + "subsets": { + "latin": { + "xWidthAvg": 348 + }, + "thai": { + "xWidthAvg": 531 + } + }, + "variants": { + "200": { + "familyName": "Zain", + "fullName": "Zain ExtraLight", + "postscriptName": "Zain-ExtraLight", + "category": "sans-serif", + "capHeight": 556, + "ascent": 900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 360, + "xWidthAvg": 331, + "subsets": { + "latin": { + "xWidthAvg": 331 + }, + "thai": { + "xWidthAvg": 524 + } + } + }, + "300": { + "familyName": "Zain", + "fullName": "Zain Light", + "postscriptName": "Zain-Light", + "category": "sans-serif", + "capHeight": 556, + "ascent": 900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 360, + "xWidthAvg": 340, + "subsets": { + "latin": { + "xWidthAvg": 340 + }, + "thai": { + "xWidthAvg": 524 + } + } + }, + "700": { + "familyName": "Zain", + "fullName": "Zain Bold", + "postscriptName": "Zain-Bold", + "category": "sans-serif", + "capHeight": 556, + "ascent": 900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 376, + "xWidthAvg": 351, + "subsets": { + "latin": { + "xWidthAvg": 351 + }, + "thai": { + "xWidthAvg": 524 + } + } + }, + "800": { + "familyName": "Zain", + "fullName": "Zain ExtraBold", + "postscriptName": "Zain-ExtraBold", + "category": "sans-serif", + "capHeight": 556, + "ascent": 900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 382, + "xWidthAvg": 355, + "subsets": { + "latin": { + "xWidthAvg": 355 + }, + "thai": { + "xWidthAvg": 527 + } + } + }, + "900": { + "familyName": "Zain", + "fullName": "Zain Black", + "postscriptName": "Zain-Black", + "category": "sans-serif", + "capHeight": 556, + "ascent": 900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 386, + "xWidthAvg": 355, + "subsets": { + "latin": { + "xWidthAvg": 355 + }, + "thai": { + "xWidthAvg": 531 + } + } + }, + "regular": { + "familyName": "Zain", + "fullName": "Zain Regular", + "postscriptName": "Zain-Regular", + "category": "sans-serif", + "capHeight": 556, + "ascent": 900, + "descent": -500, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 368, + "xWidthAvg": 348, + "subsets": { + "latin": { + "xWidthAvg": 348 + }, + "thai": { + "xWidthAvg": 531 + } + } + } + } + }, + "zenAntique": { + "familyName": "Zen Antique", + "fullName": "Zen Antique Regular", + "postscriptName": "ZenAntique-Regular", + "category": "serif", + "capHeight": 726, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 473, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Zen Antique", + "fullName": "Zen Antique Regular", + "postscriptName": "ZenAntique-Regular", + "category": "serif", + "capHeight": 726, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 473, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "zenAntiqueSoft": { + "familyName": "Zen Antique Soft", + "fullName": "Zen Antique Soft Regular", + "postscriptName": "ZenAntiqueSoft-Regular", + "category": "serif", + "capHeight": 726, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 473, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Zen Antique Soft", + "fullName": "Zen Antique Soft Regular", + "postscriptName": "ZenAntiqueSoft-Regular", + "category": "serif", + "capHeight": 726, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 473, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "zenDots": { + "familyName": "Zen Dots", + "fullName": "Zen Dots Regular", + "postscriptName": "ZenDots-Regular", + "category": "display", + "capHeight": 715, + "ascent": 930, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 625, + "subsets": { + "latin": { + "xWidthAvg": 625 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Zen Dots", + "fullName": "Zen Dots Regular", + "postscriptName": "ZenDots-Regular", + "category": "display", + "capHeight": 715, + "ascent": 930, + "descent": -270, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 515, + "xWidthAvg": 625, + "subsets": { + "latin": { + "xWidthAvg": 625 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "zenKakuGothicAntique": { + "familyName": "Zen Kaku Gothic Antique", + "fullName": "Zen Kaku Gothic Antique Regular", + "postscriptName": "ZenKakuGothicAntique-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 479, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "300": { + "familyName": "Zen Kaku Gothic Antique", + "fullName": "Zen Kaku Gothic Antique Light", + "postscriptName": "ZenKakuGothicAntique-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "500": { + "familyName": "Zen Kaku Gothic Antique", + "fullName": "Zen Kaku Gothic Antique Medium", + "postscriptName": "ZenKakuGothicAntique-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "Zen Kaku Gothic Antique", + "fullName": "Zen Kaku Gothic Antique Bold", + "postscriptName": "ZenKakuGothicAntique-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "900": { + "familyName": "Zen Kaku Gothic Antique", + "fullName": "Zen Kaku Gothic Antique Black", + "postscriptName": "ZenKakuGothicAntique-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 482, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Zen Kaku Gothic Antique", + "fullName": "Zen Kaku Gothic Antique Regular", + "postscriptName": "ZenKakuGothicAntique-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 479, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "zenKakuGothicNew": { + "familyName": "Zen Kaku Gothic New", + "fullName": "Zen Kaku Gothic New Regular", + "postscriptName": "ZenKakuGothicNew-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 479, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "300": { + "familyName": "Zen Kaku Gothic New", + "fullName": "Zen Kaku Gothic New Light", + "postscriptName": "ZenKakuGothicNew-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "500": { + "familyName": "Zen Kaku Gothic New", + "fullName": "Zen Kaku Gothic New Medium", + "postscriptName": "ZenKakuGothicNew-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "Zen Kaku Gothic New", + "fullName": "Zen Kaku Gothic New Bold", + "postscriptName": "ZenKakuGothicNew-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "900": { + "familyName": "Zen Kaku Gothic New", + "fullName": "Zen Kaku Gothic New Black", + "postscriptName": "ZenKakuGothicNew-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 482, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Zen Kaku Gothic New", + "fullName": "Zen Kaku Gothic New Regular", + "postscriptName": "ZenKakuGothicNew-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 479, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "zenKurenaido": { + "familyName": "Zen Kurenaido", + "fullName": "Zen Kurenaido Regular", + "postscriptName": "ZenKurenaido-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 406, + "xWidthAvg": 404, + "subsets": { + "latin": { + "xWidthAvg": 404 + }, + "thai": { + "xWidthAvg": 600 + } + }, + "variants": { + "regular": { + "familyName": "Zen Kurenaido", + "fullName": "Zen Kurenaido Regular", + "postscriptName": "ZenKurenaido-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 406, + "xWidthAvg": 404, + "subsets": { + "latin": { + "xWidthAvg": 404 + }, + "thai": { + "xWidthAvg": 600 + } + } + } + } + }, + "zenLoop": { + "familyName": "Zen Loop", + "fullName": "Zen Loop Regular", + "postscriptName": "ZenLoop-Regular", + "category": "display", + "capHeight": 690, + "ascent": 850, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 477, + "xWidthAvg": 268, + "subsets": { + "latin": { + "xWidthAvg": 268 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Zen Loop", + "fullName": "Zen Loop Regular", + "postscriptName": "ZenLoop-Regular", + "category": "display", + "capHeight": 690, + "ascent": 850, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 477, + "xWidthAvg": 268, + "subsets": { + "latin": { + "xWidthAvg": 268 + }, + "thai": { + "xWidthAvg": 500 + } + } + }, + "italic": { + "familyName": "Zen Loop", + "fullName": "Zen Loop Italic", + "postscriptName": "ZenLoop-Italic", + "category": "display", + "capHeight": 690, + "ascent": 850, + "descent": -275, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 477, + "xWidthAvg": 270, + "subsets": { + "latin": { + "xWidthAvg": 270 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "zenMaruGothic": { + "familyName": "Zen Maru Gothic", + "fullName": "Zen Maru Gothic Regular", + "postscriptName": "ZenMaruGothic-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 479, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "300": { + "familyName": "Zen Maru Gothic", + "fullName": "Zen Maru Gothic Light", + "postscriptName": "ZenMaruGothic-Light", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 478, + "xWidthAvg": 440, + "subsets": { + "latin": { + "xWidthAvg": 440 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "500": { + "familyName": "Zen Maru Gothic", + "fullName": "Zen Maru Gothic Medium", + "postscriptName": "ZenMaruGothic-Medium", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 480, + "xWidthAvg": 445, + "subsets": { + "latin": { + "xWidthAvg": 445 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "Zen Maru Gothic", + "fullName": "Zen Maru Gothic Bold", + "postscriptName": "ZenMaruGothic-Bold", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 481, + "xWidthAvg": 447, + "subsets": { + "latin": { + "xWidthAvg": 447 + }, + "thai": { + "xWidthAvg": 851 + } + } + }, + "900": { + "familyName": "Zen Maru Gothic", + "fullName": "Zen Maru Gothic Black", + "postscriptName": "ZenMaruGothic-Black", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 482, + "xWidthAvg": 448, + "subsets": { + "latin": { + "xWidthAvg": 448 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "regular": { + "familyName": "Zen Maru Gothic", + "fullName": "Zen Maru Gothic Regular", + "postscriptName": "ZenMaruGothic-Regular", + "category": "sans-serif", + "capHeight": 700, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 479, + "xWidthAvg": 442, + "subsets": { + "latin": { + "xWidthAvg": 442 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "zenOldMincho": { + "familyName": "Zen Old Mincho", + "fullName": "Zen Old Mincho Regular", + "postscriptName": "ZenOldMincho-Regular", + "category": "serif", + "capHeight": 726, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 430, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "500": { + "familyName": "Zen Old Mincho", + "fullName": "Zen Old Mincho Medium", + "postscriptName": "ZenOldMincho-Medium", + "category": "serif", + "capHeight": 726, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 440, + "xWidthAvg": 450, + "subsets": { + "latin": { + "xWidthAvg": 450 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "600": { + "familyName": "Zen Old Mincho", + "fullName": "Zen Old Mincho SemiBold", + "postscriptName": "ZenOldMincho-SemiBold", + "category": "serif", + "capHeight": 726, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 453, + "xWidthAvg": 465, + "subsets": { + "latin": { + "xWidthAvg": 465 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "700": { + "familyName": "Zen Old Mincho", + "fullName": "Zen Old Mincho Bold", + "postscriptName": "ZenOldMincho-Bold", + "category": "serif", + "capHeight": 726, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 460, + "xWidthAvg": 474, + "subsets": { + "latin": { + "xWidthAvg": 474 + }, + "thai": { + "xWidthAvg": 1000 + } + } + }, + "900": { + "familyName": "Zen Old Mincho", + "fullName": "Zen Old Mincho Black", + "postscriptName": "ZenOldMincho-Black", + "category": "serif", + "capHeight": 726, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 473, + "xWidthAvg": 488, + "subsets": { + "latin": { + "xWidthAvg": 488 + }, + "thai": { + "xWidthAvg": 600 + } + } + }, + "regular": { + "familyName": "Zen Old Mincho", + "fullName": "Zen Old Mincho Regular", + "postscriptName": "ZenOldMincho-Regular", + "category": "serif", + "capHeight": 726, + "ascent": 1160, + "descent": -288, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 430, + "xWidthAvg": 438, + "subsets": { + "latin": { + "xWidthAvg": 438 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "zenTokyoZoo": { + "familyName": "Zen Tokyo Zoo", + "fullName": "Zen Tokyo Zoo Regular", + "postscriptName": "ZenTokyoZoo-Regular", + "category": "display", + "capHeight": 804, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 402, + "xWidthAvg": 383, + "subsets": { + "latin": { + "xWidthAvg": 383 + }, + "thai": { + "xWidthAvg": 500 + } + }, + "variants": { + "regular": { + "familyName": "Zen Tokyo Zoo", + "fullName": "Zen Tokyo Zoo Regular", + "postscriptName": "ZenTokyoZoo-Regular", + "category": "display", + "capHeight": 804, + "ascent": 950, + "descent": -250, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 402, + "xWidthAvg": 383, + "subsets": { + "latin": { + "xWidthAvg": 383 + }, + "thai": { + "xWidthAvg": 500 + } + } + } + } + }, + "zeyada": { + "familyName": "Zeyada", + "fullName": "Zeyada", + "postscriptName": "Zeyada", + "category": "handwriting", + "capHeight": 602, + "ascent": 934, + "descent": -680, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 312, + "xWidthAvg": 357, + "subsets": { + "latin": { + "xWidthAvg": 357 + }, + "thai": { + "xWidthAvg": 384 + } + }, + "variants": { + "regular": { + "familyName": "Zeyada", + "fullName": "Zeyada", + "postscriptName": "Zeyada", + "category": "handwriting", + "capHeight": 602, + "ascent": 934, + "descent": -680, + "lineGap": 0, + "unitsPerEm": 1024, + "xHeight": 312, + "xWidthAvg": 357, + "subsets": { + "latin": { + "xWidthAvg": 357 + }, + "thai": { + "xWidthAvg": 384 + } + } + } + } + }, + "zhiMangXing": { + "familyName": "Zhi Mang Xing", + "fullName": "Zhi Mang Xing Regular", + "postscriptName": "ZhiMangXing-Regular", + "category": "handwriting", + "capHeight": 750, + "ascent": 880, + "descent": -120, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 311, + "subsets": { + "latin": { + "xWidthAvg": 311 + }, + "thai": { + "xWidthAvg": 1000 + } + }, + "variants": { + "regular": { + "familyName": "Zhi Mang Xing", + "fullName": "Zhi Mang Xing Regular", + "postscriptName": "ZhiMangXing-Regular", + "category": "handwriting", + "capHeight": 750, + "ascent": 880, + "descent": -120, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 496, + "xWidthAvg": 311, + "subsets": { + "latin": { + "xWidthAvg": 311 + }, + "thai": { + "xWidthAvg": 1000 + } + } + } + } + }, + "zillaSlab": { + "familyName": "Zilla Slab", + "fullName": "Zilla Slab", + "postscriptName": "ZillaSlab-Regular", + "category": "serif", + "capHeight": 650, + "ascent": 944, + "descent": -256, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 445, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 712 + } + }, + "variants": { + "300": { + "familyName": "Zilla Slab", + "fullName": "Zilla Slab Light", + "postscriptName": "ZillaSlab-Light", + "category": "serif", + "capHeight": 650, + "ascent": 944, + "descent": -256, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 444, + "xWidthAvg": 431, + "subsets": { + "latin": { + "xWidthAvg": 431 + }, + "thai": { + "xWidthAvg": 712 + } + } + }, + "500": { + "familyName": "Zilla Slab", + "fullName": "Zilla Slab Medium", + "postscriptName": "ZillaSlab-Medium", + "category": "serif", + "capHeight": 650, + "ascent": 944, + "descent": -256, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 447, + "xWidthAvg": 436, + "subsets": { + "latin": { + "xWidthAvg": 436 + }, + "thai": { + "xWidthAvg": 712 + } + } + }, + "600": { + "familyName": "Zilla Slab", + "fullName": "Zilla Slab SemiBold", + "postscriptName": "ZillaSlab-SemiBold", + "category": "serif", + "capHeight": 650, + "ascent": 944, + "descent": -256, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 449, + "xWidthAvg": 439, + "subsets": { + "latin": { + "xWidthAvg": 439 + }, + "thai": { + "xWidthAvg": 712 + } + } + }, + "700": { + "familyName": "Zilla Slab", + "fullName": "Zilla Slab Bold", + "postscriptName": "ZillaSlab-Bold", + "category": "serif", + "capHeight": 650, + "ascent": 944, + "descent": -256, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 451, + "xWidthAvg": 443, + "subsets": { + "latin": { + "xWidthAvg": 443 + }, + "thai": { + "xWidthAvg": 712 + } + } + }, + "regular": { + "familyName": "Zilla Slab", + "fullName": "Zilla Slab", + "postscriptName": "ZillaSlab-Regular", + "category": "serif", + "capHeight": 650, + "ascent": 944, + "descent": -256, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 445, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 712 + } + } + }, + "italic": { + "familyName": "Zilla Slab", + "fullName": "Zilla Slab Italic", + "postscriptName": "ZillaSlab-Italic", + "category": "serif", + "capHeight": 650, + "ascent": 944, + "descent": -256, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 441, + "xWidthAvg": 407, + "subsets": { + "latin": { + "xWidthAvg": 407 + }, + "thai": { + "xWidthAvg": 712 + } + } + }, + "700italic": { + "familyName": "Zilla Slab", + "fullName": "Zilla Slab Bold Italic", + "postscriptName": "ZillaSlab-BoldItalic", + "category": "serif", + "capHeight": 650, + "ascent": 944, + "descent": -256, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 441, + "xWidthAvg": 412, + "subsets": { + "latin": { + "xWidthAvg": 412 + }, + "thai": { + "xWidthAvg": 712 + } + } + }, + "600italic": { + "familyName": "Zilla Slab", + "fullName": "Zilla Slab SemiBold Italic", + "postscriptName": "ZillaSlab-SemiBoldItalic", + "category": "serif", + "capHeight": 650, + "ascent": 944, + "descent": -256, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 441, + "xWidthAvg": 410, + "subsets": { + "latin": { + "xWidthAvg": 410 + }, + "thai": { + "xWidthAvg": 712 + } + } + }, + "500italic": { + "familyName": "Zilla Slab", + "fullName": "Zilla Slab Medium Italic", + "postscriptName": "ZillaSlab-MediumItalic", + "category": "serif", + "capHeight": 650, + "ascent": 944, + "descent": -256, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 441, + "xWidthAvg": 408, + "subsets": { + "latin": { + "xWidthAvg": 408 + }, + "thai": { + "xWidthAvg": 712 + } + } + }, + "300italic": { + "familyName": "Zilla Slab", + "fullName": "Zilla Slab Light Italic", + "postscriptName": "ZillaSlab-LightItalic", + "category": "serif", + "capHeight": 650, + "ascent": 944, + "descent": -256, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 441, + "xWidthAvg": 405, + "subsets": { + "latin": { + "xWidthAvg": 405 + }, + "thai": { + "xWidthAvg": 712 + } + } + } + } + }, + "zillaSlabHighlight": { + "familyName": "Zilla Slab Highlight", + "fullName": "Zilla Slab Highlight", + "postscriptName": "ZillaSlabHighlight-Regular", + "category": "serif", + "capHeight": 650, + "ascent": 944, + "descent": -256, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 445, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 528 + } + }, + "variants": { + "700": { + "familyName": "Zilla Slab Highlight", + "fullName": "Zilla Slab Highlight Bold", + "postscriptName": "ZillaSlabHighlight-Bold", + "category": "serif", + "capHeight": 650, + "ascent": 944, + "descent": -256, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 451, + "xWidthAvg": 441, + "subsets": { + "latin": { + "xWidthAvg": 441 + }, + "thai": { + "xWidthAvg": 712 + } + } + }, + "regular": { + "familyName": "Zilla Slab Highlight", + "fullName": "Zilla Slab Highlight", + "postscriptName": "ZillaSlabHighlight-Regular", + "category": "serif", + "capHeight": 650, + "ascent": 944, + "descent": -256, + "lineGap": 0, + "unitsPerEm": 1000, + "xHeight": 445, + "xWidthAvg": 434, + "subsets": { + "latin": { + "xWidthAvg": 434 + }, + "thai": { + "xWidthAvg": 528 + } + } + } + } + } +} \ No newline at end of file diff --git a/build/node_modules/next/dist/server/ci-info.js b/build/node_modules/next/dist/server/ci-info.js new file mode 100644 index 0000000..6d85355 --- /dev/null +++ b/build/node_modules/next/dist/server/ci-info.js @@ -0,0 +1,41 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + hasNextSupport: null, + isCI: null, + name: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + hasNextSupport: function() { + return hasNextSupport; + }, + isCI: function() { + return isCI; + }, + name: function() { + return name; + } +}); +const _ciinfo = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/ci-info")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const { isCI: _isCI, name: _name } = _ciinfo.default; +const isZeitNow = !!process.env.NOW_BUILDER; +const envStack = process.env.STACK; +const isHeroku = typeof envStack === 'string' && envStack.toLowerCase().includes('heroku'); +const isCI = isZeitNow || isHeroku || _isCI; +const name = isZeitNow ? 'ZEIT Now' : isHeroku ? 'Heroku' : _name; +const hasNextSupport = Boolean(isZeitNow); + +//# sourceMappingURL=ci-info.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/client-component-renderer-logger.js b/build/node_modules/next/dist/server/client-component-renderer-logger.js new file mode 100644 index 0000000..9cf08ad --- /dev/null +++ b/build/node_modules/next/dist/server/client-component-renderer-logger.js @@ -0,0 +1,70 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getClientComponentLoaderMetrics: null, + wrapClientComponentLoader: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getClientComponentLoaderMetrics: function() { + return getClientComponentLoaderMetrics; + }, + wrapClientComponentLoader: function() { + return wrapClientComponentLoader; + } +}); +// Combined load times for loading client components +let clientComponentLoadStart = 0; +let clientComponentLoadTimes = 0; +let clientComponentLoadCount = 0; +function wrapClientComponentLoader(ComponentMod) { + if (!('performance' in globalThis)) { + return ComponentMod.__next_app__; + } + return { + require: (...args)=>{ + const startTime = performance.now(); + if (clientComponentLoadStart === 0) { + clientComponentLoadStart = startTime; + } + try { + clientComponentLoadCount += 1; + return ComponentMod.__next_app__.require(...args); + } finally{ + clientComponentLoadTimes += performance.now() - startTime; + } + }, + loadChunk: (...args)=>{ + const startTime = performance.now(); + const result = ComponentMod.__next_app__.loadChunk(...args); + // Avoid wrapping `loadChunk`'s result in an extra promise in case something like React depends on its identity. + // We only need to know when it's settled. + result.finally(()=>{ + clientComponentLoadTimes += performance.now() - startTime; + }); + return result; + } + }; +} +function getClientComponentLoaderMetrics(options = {}) { + const metrics = clientComponentLoadStart === 0 ? undefined : { + clientComponentLoadStart, + clientComponentLoadTimes, + clientComponentLoadCount + }; + if (options.reset) { + clientComponentLoadStart = 0; + clientComponentLoadTimes = 0; + clientComponentLoadCount = 0; + } + return metrics; +} + +//# sourceMappingURL=client-component-renderer-logger.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/config-schema.js b/build/node_modules/next/dist/server/config-schema.js new file mode 100644 index 0000000..1885e34 --- /dev/null +++ b/build/node_modules/next/dist/server/config-schema.js @@ -0,0 +1,726 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + configSchema: null, + experimentalSchema: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + configSchema: function() { + return configSchema; + }, + experimentalSchema: function() { + return experimentalSchema; + } +}); +const _imageconfig = require("../shared/lib/image-config"); +const _zod = require("next/dist/compiled/zod"); +const _configshared = require("./config-shared"); +const _nexttest = require("../cli/next-test"); +// A custom zod schema for the SizeLimit type +const zSizeLimit = _zod.z.custom((val)=>{ + if (typeof val === 'number' || typeof val === 'string') { + return true; + } + return false; +}); +const zExportMap = _zod.z.record(_zod.z.string(), _zod.z.object({ + page: _zod.z.string(), + query: _zod.z.any(), + // private optional properties + _fallbackRouteParams: _zod.z.array(_zod.z.any()).optional(), + _isAppDir: _zod.z.boolean().optional(), + _isDynamicError: _zod.z.boolean().optional(), + _isRoutePPREnabled: _zod.z.boolean().optional(), + _allowEmptyStaticShell: _zod.z.boolean().optional() +})); +const zRouteHas = _zod.z.union([ + _zod.z.object({ + type: _zod.z.enum([ + 'header', + 'query', + 'cookie' + ]), + key: _zod.z.string(), + value: _zod.z.string().optional() + }), + _zod.z.object({ + type: _zod.z.literal('host'), + key: _zod.z.undefined().optional(), + value: _zod.z.string() + }) +]); +const zRewrite = _zod.z.object({ + source: _zod.z.string(), + destination: _zod.z.string(), + basePath: _zod.z.literal(false).optional(), + locale: _zod.z.literal(false).optional(), + has: _zod.z.array(zRouteHas).optional(), + missing: _zod.z.array(zRouteHas).optional(), + internal: _zod.z.boolean().optional() +}); +const zRedirect = _zod.z.object({ + source: _zod.z.string(), + destination: _zod.z.string(), + basePath: _zod.z.literal(false).optional(), + locale: _zod.z.literal(false).optional(), + has: _zod.z.array(zRouteHas).optional(), + missing: _zod.z.array(zRouteHas).optional(), + internal: _zod.z.boolean().optional() +}).and(_zod.z.union([ + _zod.z.object({ + statusCode: _zod.z.never().optional(), + permanent: _zod.z.boolean() + }), + _zod.z.object({ + statusCode: _zod.z.number(), + permanent: _zod.z.never().optional() + }) +])); +const zHeader = _zod.z.object({ + source: _zod.z.string(), + basePath: _zod.z.literal(false).optional(), + locale: _zod.z.literal(false).optional(), + headers: _zod.z.array(_zod.z.object({ + key: _zod.z.string(), + value: _zod.z.string() + })), + has: _zod.z.array(zRouteHas).optional(), + missing: _zod.z.array(zRouteHas).optional(), + internal: _zod.z.boolean().optional() +}); +const zTurbopackLoaderItem = _zod.z.union([ + _zod.z.string(), + _zod.z.strictObject({ + loader: _zod.z.string(), + // Any JSON value can be used as turbo loader options, so use z.any() here + options: _zod.z.record(_zod.z.string(), _zod.z.any()).optional() + }) +]); +const zTurbopackLoaderBuiltinCondition = _zod.z.union([ + _zod.z.literal('browser'), + _zod.z.literal('foreign'), + _zod.z.literal('development'), + _zod.z.literal('production'), + _zod.z.literal('node'), + _zod.z.literal('edge-light') +]); +const zTurbopackCondition = _zod.z.union([ + _zod.z.strictObject({ + all: _zod.z.lazy(()=>_zod.z.array(zTurbopackCondition)) + }), + _zod.z.strictObject({ + any: _zod.z.lazy(()=>_zod.z.array(zTurbopackCondition)) + }), + _zod.z.strictObject({ + not: _zod.z.lazy(()=>zTurbopackCondition) + }), + zTurbopackLoaderBuiltinCondition, + _zod.z.strictObject({ + path: _zod.z.union([ + _zod.z.string(), + _zod.z.instanceof(RegExp) + ]).optional(), + content: _zod.z.instanceof(RegExp).optional(), + query: _zod.z.union([ + _zod.z.string(), + _zod.z.instanceof(RegExp) + ]).optional(), + contentType: _zod.z.union([ + _zod.z.string(), + _zod.z.instanceof(RegExp) + ]).optional() + }) +]); +const zTurbopackModuleType = _zod.z.enum([ + 'asset', + 'ecmascript', + 'typescript', + 'css', + 'css-module', + 'wasm', + 'raw', + 'node', + 'bytes' +]); +const zTurbopackRuleConfigItem = _zod.z.strictObject({ + loaders: _zod.z.array(zTurbopackLoaderItem).optional(), + as: _zod.z.string().optional(), + condition: zTurbopackCondition.optional(), + type: zTurbopackModuleType.optional() +}); +const zTurbopackRuleConfigCollection = _zod.z.union([ + zTurbopackRuleConfigItem, + _zod.z.array(_zod.z.union([ + zTurbopackLoaderItem, + zTurbopackRuleConfigItem + ])) +]); +const zTurbopackConfig = _zod.z.strictObject({ + rules: _zod.z.record(_zod.z.string(), zTurbopackRuleConfigCollection).optional(), + resolveAlias: _zod.z.record(_zod.z.string(), _zod.z.union([ + _zod.z.string(), + _zod.z.array(_zod.z.string()), + _zod.z.record(_zod.z.string(), _zod.z.union([ + _zod.z.string(), + _zod.z.array(_zod.z.string()) + ])) + ])).optional(), + resolveExtensions: _zod.z.array(_zod.z.string()).optional(), + root: _zod.z.string().optional(), + debugIds: _zod.z.boolean().optional(), + ignoreIssue: _zod.z.array(_zod.z.object({ + path: _zod.z.union([ + _zod.z.string(), + _zod.z.instanceof(RegExp) + ]), + title: _zod.z.union([ + _zod.z.string(), + _zod.z.instanceof(RegExp) + ]).optional(), + description: _zod.z.union([ + _zod.z.string(), + _zod.z.instanceof(RegExp) + ]).optional() + })).optional() +}); +const experimentalSchema = { + useSkewCookie: _zod.z.boolean().optional(), + after: _zod.z.boolean().optional(), + appNavFailHandling: _zod.z.boolean().optional(), + appNewScrollHandler: _zod.z.boolean().optional(), + preloadEntriesOnStart: _zod.z.boolean().optional(), + allowedRevalidateHeaderKeys: _zod.z.array(_zod.z.string()).optional(), + staleTimes: _zod.z.object({ + dynamic: _zod.z.number().optional(), + static: _zod.z.number().gte(30).optional() + }).optional(), + cacheLife: _zod.z.record(_zod.z.object({ + stale: _zod.z.number().optional(), + revalidate: _zod.z.number().optional(), + expire: _zod.z.number().optional() + })).optional(), + cacheHandlers: _zod.z.record(_zod.z.string(), _zod.z.string().optional()).optional(), + clientRouterFilter: _zod.z.boolean().optional(), + clientRouterFilterRedirects: _zod.z.boolean().optional(), + clientRouterFilterAllowedRate: _zod.z.number().optional(), + cpus: _zod.z.number().optional(), + memoryBasedWorkersCount: _zod.z.boolean().optional(), + craCompat: _zod.z.boolean().optional(), + caseSensitiveRoutes: _zod.z.boolean().optional(), + clientParamParsingOrigins: _zod.z.array(_zod.z.string()).optional(), + cachedNavigations: _zod.z.boolean().optional(), + partialFallbacks: _zod.z.boolean().optional(), + dynamicOnHover: _zod.z.boolean().optional(), + optimisticRouting: _zod.z.boolean().optional(), + varyParams: _zod.z.boolean().optional(), + prefetchInlining: _zod.z.union([ + _zod.z.boolean(), + _zod.z.object({ + maxSize: _zod.z.number().optional(), + maxBundleSize: _zod.z.number().optional() + }) + ]).optional(), + disableOptimizedLoading: _zod.z.boolean().optional(), + disablePostcssPresetEnv: _zod.z.boolean().optional(), + cacheComponents: _zod.z.boolean().optional(), + inlineCss: _zod.z.boolean().optional(), + esmExternals: _zod.z.union([ + _zod.z.boolean(), + _zod.z.literal('loose') + ]).optional(), + serverActions: _zod.z.object({ + bodySizeLimit: zSizeLimit.optional(), + allowedOrigins: _zod.z.array(_zod.z.string()).optional() + }).optional(), + maxPostponedStateSize: zSizeLimit.optional(), + // The original type was Record + extensionAlias: _zod.z.record(_zod.z.string(), _zod.z.any()).optional(), + externalDir: _zod.z.boolean().optional(), + externalMiddlewareRewritesResolve: _zod.z.boolean().optional(), + externalProxyRewritesResolve: _zod.z.boolean().optional(), + exposeTestingApiInProductionBuild: _zod.z.boolean().optional(), + instantNavigationDevToolsToggle: _zod.z.boolean().optional(), + fallbackNodePolyfills: _zod.z.literal(false).optional(), + fetchCacheKeyPrefix: _zod.z.string().optional(), + forceSwcTransforms: _zod.z.boolean().optional(), + fullySpecified: _zod.z.boolean().optional(), + gzipSize: _zod.z.boolean().optional(), + imgOptConcurrency: _zod.z.number().int().optional().nullable(), + imgOptTimeoutInSeconds: _zod.z.number().int().optional(), + imgOptMaxInputPixels: _zod.z.number().int().optional(), + imgOptSequentialRead: _zod.z.boolean().optional().nullable(), + imgOptSkipMetadata: _zod.z.boolean().optional().nullable(), + isrFlushToDisk: _zod.z.boolean().optional(), + largePageDataBytes: _zod.z.number().optional(), + linkNoTouchStart: _zod.z.boolean().optional(), + manualClientBasePath: _zod.z.boolean().optional(), + middlewarePrefetch: _zod.z.enum([ + 'strict', + 'flexible' + ]).optional(), + proxyPrefetch: _zod.z.enum([ + 'strict', + 'flexible' + ]).optional(), + middlewareClientMaxBodySize: zSizeLimit.optional(), + proxyClientMaxBodySize: zSizeLimit.optional(), + multiZoneDraftMode: _zod.z.boolean().optional(), + cssChunking: _zod.z.union([ + _zod.z.boolean(), + _zod.z.literal('strict') + ]).optional(), + nextScriptWorkers: _zod.z.boolean().optional(), + // The critter option is unknown, use z.any() here + optimizeCss: _zod.z.union([ + _zod.z.boolean(), + _zod.z.any() + ]).optional(), + optimisticClientCache: _zod.z.boolean().optional(), + parallelServerCompiles: _zod.z.boolean().optional(), + parallelServerBuildTraces: _zod.z.boolean().optional(), + ppr: _zod.z.union([ + _zod.z.boolean(), + _zod.z.literal('incremental') + ]).readonly().optional(), + taint: _zod.z.boolean().optional(), + prerenderEarlyExit: _zod.z.boolean().optional(), + proxyTimeout: _zod.z.number().gte(0).optional(), + rootParams: _zod.z.boolean().optional(), + mcpServer: _zod.z.boolean().optional(), + removeUncaughtErrorAndRejectionListeners: _zod.z.boolean().optional(), + validateRSCRequestHeaders: _zod.z.boolean().optional(), + scrollRestoration: _zod.z.boolean().optional(), + sri: _zod.z.object({ + algorithm: _zod.z.enum([ + 'sha256', + 'sha384', + 'sha512' + ]).optional() + }).optional(), + swcPlugins: _zod.z// The specific swc plugin's option is unknown, use z.any() here + .array(_zod.z.tuple([ + _zod.z.string(), + _zod.z.record(_zod.z.string(), _zod.z.any()) + ])).optional(), + swcTraceProfiling: _zod.z.boolean().optional(), + // NonNullable['buildHttp'] + urlImports: _zod.z.any().optional(), + viewTransition: _zod.z.boolean().optional(), + workerThreads: _zod.z.boolean().optional(), + webVitalsAttribution: _zod.z.array(_zod.z.union([ + _zod.z.literal('CLS'), + _zod.z.literal('FCP'), + _zod.z.literal('FID'), + _zod.z.literal('INP'), + _zod.z.literal('LCP'), + _zod.z.literal('TTFB') + ])).optional(), + // This is partial set of mdx-rs transform options we support, aligned + // with next_core::next_config::MdxRsOptions. Ensure both types are kept in sync. + mdxRs: _zod.z.union([ + _zod.z.boolean(), + _zod.z.object({ + development: _zod.z.boolean().optional(), + jsxRuntime: _zod.z.string().optional(), + jsxImportSource: _zod.z.string().optional(), + providerImportSource: _zod.z.string().optional(), + mdxType: _zod.z.enum([ + 'gfm', + 'commonmark' + ]).optional() + }) + ]).optional(), + transitionIndicator: _zod.z.boolean().optional(), + gestureTransition: _zod.z.boolean().optional(), + typedRoutes: _zod.z.boolean().optional(), + webpackBuildWorker: _zod.z.boolean().optional(), + webpackMemoryOptimizations: _zod.z.boolean().optional(), + turbopackMemoryLimit: _zod.z.number().optional(), + turbopackPluginRuntimeStrategy: _zod.z.enum([ + 'workerThreads', + 'childProcesses' + ]).optional(), + turbopackMinify: _zod.z.boolean().optional(), + turbopackFileSystemCacheForDev: _zod.z.boolean().optional(), + turbopackFileSystemCacheForBuild: _zod.z.boolean().optional(), + turbopackSourceMaps: _zod.z.boolean().optional(), + turbopackInputSourceMaps: _zod.z.boolean().optional(), + turbopackTreeShaking: _zod.z.boolean().optional(), + turbopackRemoveUnusedImports: _zod.z.boolean().optional(), + turbopackRemoveUnusedExports: _zod.z.boolean().optional(), + turbopackScopeHoisting: _zod.z.boolean().optional(), + turbopackClientSideNestedAsyncChunking: _zod.z.boolean().optional(), + turbopackServerSideNestedAsyncChunking: _zod.z.boolean().optional(), + turbopackImportTypeBytes: _zod.z.boolean().optional(), + turbopackImportTypeText: _zod.z.boolean().optional(), + turbopackUseBuiltinBabel: _zod.z.boolean().optional(), + turbopackUseBuiltinSass: _zod.z.boolean().optional(), + turbopackModuleIds: _zod.z.enum([ + 'named', + 'deterministic' + ]).optional(), + turbopackInferModuleSideEffects: _zod.z.boolean().optional(), + turbopackServerFastRefresh: _zod.z.boolean().optional(), + optimizePackageImports: _zod.z.array(_zod.z.string()).optional(), + optimizeServerReact: _zod.z.boolean().optional(), + strictRouteTypes: _zod.z.boolean().optional(), + clientTraceMetadata: _zod.z.array(_zod.z.string()).optional(), + serverMinification: _zod.z.boolean().optional(), + serverSourceMaps: _zod.z.boolean().optional(), + useWasmBinary: _zod.z.boolean().optional(), + useLightningcss: _zod.z.boolean().optional(), + lightningCssFeatures: _zod.z.object({ + include: _zod.z.array(_zod.z.enum(_configshared.LIGHTNINGCSS_FEATURE_NAMES)).optional(), + exclude: _zod.z.array(_zod.z.enum(_configshared.LIGHTNINGCSS_FEATURE_NAMES)).optional() + }).optional(), + testProxy: _zod.z.boolean().optional(), + defaultTestRunner: _zod.z.enum(_nexttest.SUPPORTED_TEST_RUNNERS_LIST).optional(), + allowDevelopmentBuild: _zod.z.literal(true).optional(), + reactDebugChannel: _zod.z.boolean().optional(), + staticGenerationRetryCount: _zod.z.number().int().optional(), + staticGenerationMaxConcurrency: _zod.z.number().int().optional(), + staticGenerationMinPagesPerWorker: _zod.z.number().int().optional(), + typedEnv: _zod.z.boolean().optional(), + serverComponentsHmrCache: _zod.z.boolean().optional(), + authInterrupts: _zod.z.boolean().optional(), + useCache: _zod.z.boolean().optional(), + slowModuleDetection: _zod.z.object({ + buildTimeThresholdMs: _zod.z.number().int() + }).optional(), + globalNotFound: _zod.z.boolean().optional(), + browserDebugInfoInTerminal: _zod.z.union([ + _zod.z.boolean(), + _zod.z.enum([ + 'error', + 'warn', + 'verbose' + ]), + _zod.z.object({ + level: _zod.z.enum([ + 'error', + 'warn', + 'verbose' + ]).optional(), + depthLimit: _zod.z.number().int().positive().optional(), + edgeLimit: _zod.z.number().int().positive().optional(), + showSourceLocation: _zod.z.boolean().optional() + }) + ]).optional(), + lockDistDir: _zod.z.boolean().optional(), + hideLogsAfterAbort: _zod.z.boolean().optional(), + runtimeServerDeploymentId: _zod.z.boolean().optional(), + immutableAssetToken: _zod.z.string().optional(), + deferredEntries: _zod.z.array(_zod.z.string()).optional(), + onBeforeDeferredEntries: _zod.z.function().returns(_zod.z.promise(_zod.z.void())).optional(), + reportSystemEnvInlining: _zod.z.enum([ + 'warn', + 'error' + ]).optional() +}; +const configSchema = _zod.z.lazy(()=>_zod.z.strictObject({ + adapterPath: _zod.z.string().optional(), + allowedDevOrigins: _zod.z.array(_zod.z.string()).optional(), + assetPrefix: _zod.z.string().optional(), + basePath: _zod.z.string().optional(), + bundlePagesRouterDependencies: _zod.z.boolean().optional(), + cacheComponents: _zod.z.boolean().optional(), + cacheHandler: _zod.z.string().min(1).optional(), + cacheHandlers: _zod.z.record(_zod.z.string(), _zod.z.string().optional()).optional(), + cacheLife: _zod.z.record(_zod.z.object({ + stale: _zod.z.number().optional(), + revalidate: _zod.z.number().optional(), + expire: _zod.z.number().optional() + })).optional(), + cacheMaxMemorySize: _zod.z.number().optional(), + cleanDistDir: _zod.z.boolean().optional(), + compiler: _zod.z.strictObject({ + emotion: _zod.z.union([ + _zod.z.boolean(), + _zod.z.object({ + sourceMap: _zod.z.boolean().optional(), + autoLabel: _zod.z.union([ + _zod.z.literal('always'), + _zod.z.literal('dev-only'), + _zod.z.literal('never') + ]).optional(), + labelFormat: _zod.z.string().min(1).optional(), + importMap: _zod.z.record(_zod.z.string(), _zod.z.record(_zod.z.string(), _zod.z.object({ + canonicalImport: _zod.z.tuple([ + _zod.z.string(), + _zod.z.string() + ]).optional(), + styledBaseImport: _zod.z.tuple([ + _zod.z.string(), + _zod.z.string() + ]).optional() + }))).optional() + }) + ]).optional(), + reactRemoveProperties: _zod.z.union([ + _zod.z.boolean().optional(), + _zod.z.object({ + properties: _zod.z.array(_zod.z.string()).optional() + }) + ]).optional(), + relay: _zod.z.object({ + src: _zod.z.string(), + artifactDirectory: _zod.z.string().optional(), + language: _zod.z.enum([ + 'javascript', + 'typescript', + 'flow' + ]).optional(), + eagerEsModules: _zod.z.boolean().optional() + }).optional(), + removeConsole: _zod.z.union([ + _zod.z.boolean().optional(), + _zod.z.object({ + exclude: _zod.z.array(_zod.z.string()).min(1).optional() + }) + ]).optional(), + styledComponents: _zod.z.union([ + _zod.z.boolean().optional(), + _zod.z.object({ + displayName: _zod.z.boolean().optional(), + topLevelImportPaths: _zod.z.array(_zod.z.string()).optional(), + ssr: _zod.z.boolean().optional(), + fileName: _zod.z.boolean().optional(), + meaninglessFileNames: _zod.z.array(_zod.z.string()).optional(), + minify: _zod.z.boolean().optional(), + transpileTemplateLiterals: _zod.z.boolean().optional(), + namespace: _zod.z.string().min(1).optional(), + pure: _zod.z.boolean().optional(), + cssProp: _zod.z.boolean().optional() + }) + ]), + styledJsx: _zod.z.union([ + _zod.z.boolean().optional(), + _zod.z.object({ + useLightningcss: _zod.z.boolean().optional() + }) + ]), + define: _zod.z.record(_zod.z.string(), _zod.z.union([ + _zod.z.string(), + _zod.z.number(), + _zod.z.boolean() + ])).optional(), + defineServer: _zod.z.record(_zod.z.string(), _zod.z.union([ + _zod.z.string(), + _zod.z.number(), + _zod.z.boolean() + ])).optional(), + runAfterProductionCompile: _zod.z.function().returns(_zod.z.promise(_zod.z.void())).optional() + }).optional(), + compress: _zod.z.boolean().optional(), + configOrigin: _zod.z.string().optional(), + crossOrigin: _zod.z.union([ + _zod.z.literal('anonymous'), + _zod.z.literal('use-credentials') + ]).optional(), + deploymentId: _zod.z.string().optional(), + devIndicators: _zod.z.union([ + _zod.z.object({ + position: _zod.z.union([ + _zod.z.literal('bottom-left'), + _zod.z.literal('bottom-right'), + _zod.z.literal('top-left'), + _zod.z.literal('top-right') + ]).optional() + }), + _zod.z.literal(false) + ]).optional(), + distDir: _zod.z.string().min(1).optional(), + env: _zod.z.record(_zod.z.string(), _zod.z.union([ + _zod.z.string(), + _zod.z.undefined() + ])).optional(), + enablePrerenderSourceMaps: _zod.z.boolean().optional(), + excludeDefaultMomentLocales: _zod.z.boolean().optional(), + experimental: _zod.z.strictObject(experimentalSchema).optional(), + exportPathMap: _zod.z.function().args(zExportMap, _zod.z.object({ + dev: _zod.z.boolean(), + dir: _zod.z.string(), + outDir: _zod.z.string().nullable(), + distDir: _zod.z.string(), + buildId: _zod.z.string() + })).returns(_zod.z.union([ + zExportMap, + _zod.z.promise(zExportMap) + ])).optional(), + generateBuildId: _zod.z.function().args().returns(_zod.z.union([ + _zod.z.string(), + _zod.z.null(), + _zod.z.promise(_zod.z.union([ + _zod.z.string(), + _zod.z.null() + ])) + ])).optional(), + generateEtags: _zod.z.boolean().optional(), + headers: _zod.z.function().args().returns(_zod.z.promise(_zod.z.array(zHeader))).optional(), + htmlLimitedBots: _zod.z.instanceof(RegExp).optional(), + httpAgentOptions: _zod.z.strictObject({ + keepAlive: _zod.z.boolean().optional() + }).optional(), + i18n: _zod.z.strictObject({ + defaultLocale: _zod.z.string().min(1), + domains: _zod.z.array(_zod.z.strictObject({ + defaultLocale: _zod.z.string().min(1), + domain: _zod.z.string().min(1), + http: _zod.z.literal(true).optional(), + locales: _zod.z.array(_zod.z.string().min(1)).optional() + })).optional(), + localeDetection: _zod.z.literal(false).optional(), + locales: _zod.z.array(_zod.z.string().min(1)) + }).nullable().optional(), + images: _zod.z.strictObject({ + localPatterns: _zod.z.array(_zod.z.strictObject({ + pathname: _zod.z.string().optional(), + search: _zod.z.string().optional() + })).max(25).optional(), + remotePatterns: _zod.z.array(_zod.z.union([ + _zod.z.instanceof(URL), + _zod.z.strictObject({ + hostname: _zod.z.string(), + pathname: _zod.z.string().optional(), + port: _zod.z.string().max(5).optional(), + protocol: _zod.z.enum([ + 'http', + 'https' + ]).optional(), + search: _zod.z.string().optional() + }) + ])).max(50).optional(), + unoptimized: _zod.z.boolean().optional(), + customCacheHandler: _zod.z.boolean().optional(), + contentSecurityPolicy: _zod.z.string().optional(), + contentDispositionType: _zod.z.enum([ + 'inline', + 'attachment' + ]).optional(), + dangerouslyAllowSVG: _zod.z.boolean().optional(), + dangerouslyAllowLocalIP: _zod.z.boolean().optional(), + deviceSizes: _zod.z.array(_zod.z.number().int().gte(1).lte(10000)).max(25).optional(), + disableStaticImages: _zod.z.boolean().optional(), + domains: _zod.z.array(_zod.z.string()).max(50).optional(), + formats: _zod.z.array(_zod.z.enum([ + 'image/avif', + 'image/webp' + ])).max(4).optional(), + imageSizes: _zod.z.array(_zod.z.number().int().gte(1).lte(10000)).min(0).max(25).optional(), + loader: _zod.z.enum(_imageconfig.VALID_LOADERS).optional(), + loaderFile: _zod.z.string().optional(), + maximumDiskCacheSize: _zod.z.number().int().min(0).optional(), + maximumRedirects: _zod.z.number().int().min(0).max(20).optional(), + maximumResponseBody: _zod.z.number().int().min(1).max(Number.MAX_SAFE_INTEGER).optional(), + minimumCacheTTL: _zod.z.number().int().gte(0).optional(), + path: _zod.z.string().optional(), + qualities: _zod.z.array(_zod.z.number().int().gte(1).lte(100)).min(1).max(20).optional() + }).optional(), + logging: _zod.z.union([ + _zod.z.object({ + fetches: _zod.z.object({ + fullUrl: _zod.z.boolean().optional(), + hmrRefreshes: _zod.z.boolean().optional() + }).optional(), + incomingRequests: _zod.z.union([ + _zod.z.boolean(), + _zod.z.object({ + ignore: _zod.z.array(_zod.z.instanceof(RegExp)) + }) + ]).optional(), + serverFunctions: _zod.z.boolean().optional(), + browserToTerminal: _zod.z.union([ + _zod.z.boolean(), + _zod.z.enum([ + 'error', + 'warn' + ]) + ]).optional() + }), + _zod.z.literal(false) + ]).optional(), + modularizeImports: _zod.z.record(_zod.z.string(), _zod.z.object({ + transform: _zod.z.union([ + _zod.z.string(), + _zod.z.record(_zod.z.string(), _zod.z.string()) + ]), + preventFullImport: _zod.z.boolean().optional(), + skipDefaultConversion: _zod.z.boolean().optional() + })).optional(), + onDemandEntries: _zod.z.strictObject({ + maxInactiveAge: _zod.z.number().optional(), + pagesBufferLength: _zod.z.number().optional() + }).optional(), + output: _zod.z.enum([ + 'standalone', + 'export' + ]).optional(), + outputFileTracingRoot: _zod.z.string().optional(), + outputFileTracingExcludes: _zod.z.record(_zod.z.string(), _zod.z.array(_zod.z.string())).optional(), + outputFileTracingIncludes: _zod.z.record(_zod.z.string(), _zod.z.array(_zod.z.string())).optional(), + pageExtensions: _zod.z.array(_zod.z.string()).min(1).optional(), + poweredByHeader: _zod.z.boolean().optional(), + productionBrowserSourceMaps: _zod.z.boolean().optional(), + reactCompiler: _zod.z.union([ + _zod.z.boolean(), + _zod.z.object({ + compilationMode: _zod.z.enum([ + 'infer', + 'annotation', + 'all' + ]).optional(), + panicThreshold: _zod.z.enum([ + 'none', + 'critical_errors', + 'all_errors' + ]).optional() + }).optional() + ]), + reactProductionProfiling: _zod.z.boolean().optional(), + reactStrictMode: _zod.z.boolean().nullable().optional(), + reactMaxHeadersLength: _zod.z.number().nonnegative().int().optional(), + redirects: _zod.z.function().args().returns(_zod.z.promise(_zod.z.array(zRedirect))).optional(), + rewrites: _zod.z.function().args().returns(_zod.z.promise(_zod.z.union([ + _zod.z.array(zRewrite), + _zod.z.object({ + beforeFiles: _zod.z.array(zRewrite), + afterFiles: _zod.z.array(zRewrite), + fallback: _zod.z.array(zRewrite) + }) + ]))).optional(), + // sassOptions properties are unknown besides implementation, use z.any() here + sassOptions: _zod.z.object({ + implementation: _zod.z.string().optional() + }).catchall(_zod.z.any()).optional(), + serverExternalPackages: _zod.z.array(_zod.z.string()).optional(), + skipMiddlewareUrlNormalize: _zod.z.boolean().optional(), + skipProxyUrlNormalize: _zod.z.boolean().optional(), + skipTrailingSlashRedirect: _zod.z.boolean().optional(), + staticPageGenerationTimeout: _zod.z.number().optional(), + expireTime: _zod.z.number().optional(), + target: _zod.z.string().optional(), + trailingSlash: _zod.z.boolean().optional(), + transpilePackages: _zod.z.array(_zod.z.string()).optional(), + turbopack: zTurbopackConfig.optional(), + typescript: _zod.z.strictObject({ + ignoreBuildErrors: _zod.z.boolean().optional(), + tsconfigPath: _zod.z.string().min(1).optional() + }).optional(), + typedRoutes: _zod.z.boolean().optional(), + useFileSystemPublicRoutes: _zod.z.boolean().optional(), + // The webpack config type is unknown, use z.any() here + webpack: _zod.z.any().nullable().optional(), + watchOptions: _zod.z.strictObject({ + pollIntervalMs: _zod.z.number().positive().finite().optional() + }).optional() + })); + +//# sourceMappingURL=config-schema.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/config-shared.js b/build/node_modules/next/dist/server/config-shared.js new file mode 100644 index 0000000..56f3004 --- /dev/null +++ b/build/node_modules/next/dist/server/config-shared.js @@ -0,0 +1,369 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + DEFAULT_MAX_POSTPONED_STATE_SIZE: null, + LIGHTNINGCSS_FEATURE_NAMES: null, + defaultConfig: null, + getNextConfigRuntime: null, + normalizeConfig: null, + parseMaxPostponedStateSize: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + DEFAULT_MAX_POSTPONED_STATE_SIZE: function() { + return _sizelimit.DEFAULT_MAX_POSTPONED_STATE_SIZE; + }, + LIGHTNINGCSS_FEATURE_NAMES: function() { + return LIGHTNINGCSS_FEATURE_NAMES; + }, + defaultConfig: function() { + return defaultConfig; + }, + getNextConfigRuntime: function() { + return getNextConfigRuntime; + }, + normalizeConfig: function() { + return normalizeConfig; + }, + parseMaxPostponedStateSize: function() { + return _sizelimit.parseMaxPostponedStateSize; + } +}); +const _os = /*#__PURE__*/ _interop_require_default(require("os")); +const _imageconfig = require("../shared/lib/image-config"); +const _constants = require("../lib/constants"); +const _canaryonlyconfigerror = require("../shared/lib/errors/canary-only-config-error"); +const _sizelimit = require("../shared/lib/size-limit"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const LIGHTNINGCSS_FEATURE_NAMES = [ + // Individual features (bit 0–20) + 'nesting', + 'not-selector-list', + 'dir-selector', + 'lang-selector-list', + 'is-selector', + 'text-decoration-thickness-percent', + 'media-interval-syntax', + 'media-range-syntax', + 'custom-media-queries', + 'clamp-function', + 'color-function', + 'oklab-colors', + 'lab-colors', + 'p3-colors', + 'hex-alpha-colors', + 'space-separated-color-notation', + 'font-family-system-ui', + 'double-position-gradients', + 'vendor-prefixes', + 'logical-properties', + 'light-dark', + // Composite groups + 'selectors', + 'media-queries', + 'colors' +]; +const defaultConfig = Object.freeze({ + env: {}, + webpack: null, + typescript: { + ignoreBuildErrors: false, + tsconfigPath: undefined + }, + typedRoutes: false, + distDir: '.next', + cleanDistDir: true, + assetPrefix: '', + cacheHandler: process.env.NEXT_CACHE_HANDLER_PATH, + // default to 50MB limit + cacheMaxMemorySize: 50 * 1024 * 1024, + configOrigin: 'default', + useFileSystemPublicRoutes: true, + generateBuildId: ()=>null, + generateEtags: true, + pageExtensions: [ + 'tsx', + 'ts', + 'jsx', + 'js' + ], + poweredByHeader: true, + compress: true, + images: _imageconfig.imageConfigDefault, + devIndicators: { + position: 'bottom-left' + }, + onDemandEntries: { + maxInactiveAge: 60 * 1000, + pagesBufferLength: 5 + }, + basePath: '', + sassOptions: {}, + trailingSlash: false, + i18n: null, + productionBrowserSourceMaps: false, + excludeDefaultMomentLocales: true, + reactProductionProfiling: false, + reactStrictMode: null, + reactMaxHeadersLength: 6000, + httpAgentOptions: { + keepAlive: true + }, + logging: { + serverFunctions: true + }, + compiler: {}, + expireTime: process.env.NEXT_PRIVATE_CDN_CONSUMED_SWR_CACHE_CONTROL ? undefined : 31536000, + staticPageGenerationTimeout: 60, + output: !!process.env.NEXT_PRIVATE_STANDALONE ? 'standalone' : undefined, + modularizeImports: undefined, + outputFileTracingRoot: process.env.NEXT_PRIVATE_OUTPUT_TRACE_ROOT || '', + allowedDevOrigins: undefined, + // Will default to cacheComponents value. + enablePrerenderSourceMaps: undefined, + cacheComponents: false, + cacheLife: { + default: { + stale: undefined, + revalidate: 60 * 15, + expire: _constants.INFINITE_CACHE + }, + seconds: { + stale: 30, + revalidate: 1, + expire: 60 + }, + minutes: { + stale: 60 * 5, + revalidate: 60, + expire: 60 * 60 + }, + hours: { + stale: 60 * 5, + revalidate: 60 * 60, + expire: 60 * 60 * 24 + }, + days: { + stale: 60 * 5, + revalidate: 60 * 60 * 24, + expire: 60 * 60 * 24 * 7 + }, + weeks: { + stale: 60 * 5, + revalidate: 60 * 60 * 24 * 7, + expire: 60 * 60 * 24 * 30 + }, + max: { + stale: 60 * 5, + revalidate: 60 * 60 * 24 * 30, + expire: 60 * 60 * 24 * 365 + } + }, + cacheHandlers: { + default: process.env.NEXT_DEFAULT_CACHE_HANDLER_PATH, + remote: process.env.NEXT_REMOTE_CACHE_HANDLER_PATH, + static: process.env.NEXT_STATIC_CACHE_HANDLER_PATH + }, + adapterPath: process.env.NEXT_ADAPTER_PATH || undefined, + experimental: { + appNewScrollHandler: false, + useSkewCookie: false, + cssChunking: true, + multiZoneDraftMode: false, + appNavFailHandling: false, + prerenderEarlyExit: true, + serverMinification: true, + linkNoTouchStart: false, + caseSensitiveRoutes: false, + clientParamParsingOrigins: undefined, + cachedNavigations: false, + partialFallbacks: false, + dynamicOnHover: false, + varyParams: false, + prefetchInlining: false, + preloadEntriesOnStart: true, + clientRouterFilter: true, + clientRouterFilterRedirects: false, + fetchCacheKeyPrefix: '', + proxyPrefetch: 'flexible', + optimisticClientCache: true, + manualClientBasePath: false, + cpus: Math.max(1, (Number(process.env.CIRCLE_NODE_TOTAL) || (_os.default.cpus() || { + length: 1 + }).length) - 1), + memoryBasedWorkersCount: false, + imgOptConcurrency: null, + imgOptTimeoutInSeconds: 7, + imgOptMaxInputPixels: 268402689, + imgOptSequentialRead: null, + imgOptSkipMetadata: null, + isrFlushToDisk: true, + workerThreads: false, + proxyTimeout: undefined, + optimizeCss: false, + nextScriptWorkers: false, + scrollRestoration: false, + externalDir: false, + disableOptimizedLoading: false, + gzipSize: true, + craCompat: false, + esmExternals: true, + fullySpecified: false, + swcTraceProfiling: false, + forceSwcTransforms: false, + swcPlugins: undefined, + largePageDataBytes: 128 * 1000, + disablePostcssPresetEnv: undefined, + urlImports: undefined, + typedEnv: false, + clientTraceMetadata: undefined, + parallelServerCompiles: false, + parallelServerBuildTraces: false, + ppr: false, + authInterrupts: false, + webpackBuildWorker: undefined, + webpackMemoryOptimizations: false, + optimizeServerReact: true, + strictRouteTypes: false, + viewTransition: false, + removeUncaughtErrorAndRejectionListeners: false, + validateRSCRequestHeaders: !!(process.env.__NEXT_TEST_MODE || !(0, _canaryonlyconfigerror.isStableBuild)()), + staleTimes: { + dynamic: 0, + static: 300 + }, + allowDevelopmentBuild: undefined, + reactDebugChannel: true, + staticGenerationRetryCount: undefined, + serverComponentsHmrCache: true, + staticGenerationMaxConcurrency: 8, + staticGenerationMinPagesPerWorker: 25, + transitionIndicator: false, + gestureTransition: false, + inlineCss: false, + useCache: undefined, + slowModuleDetection: undefined, + globalNotFound: false, + browserDebugInfoInTerminal: 'warn', + lockDistDir: true, + proxyClientMaxBodySize: 10485760, + hideLogsAfterAbort: false, + mcpServer: true, + turbopackFileSystemCacheForDev: true, + turbopackFileSystemCacheForBuild: false, + turbopackInferModuleSideEffects: true, + turbopackPluginRuntimeStrategy: 'childProcesses' + }, + htmlLimitedBots: undefined, + bundlePagesRouterDependencies: false +}); +async function normalizeConfig(phase, config) { + if (typeof config === 'function') { + config = config(phase, { + defaultConfig + }); + } + // Support `new Promise` and `async () =>` as return values of the config export + return await config; +} +function getNextConfigRuntime(config) { + // This config filter is a breaking change, so only do it if experimental.runtimeServerDeploymentId is enabled + if (!config.experimental.runtimeServerDeploymentId) { + return config; + } + let ex = config.experimental; + let experimental = ex ? { + ppr: ex.ppr, + taint: ex.taint, + serverActions: ex.serverActions, + staleTimes: ex.staleTimes, + dynamicOnHover: ex.dynamicOnHover, + optimisticRouting: ex.optimisticRouting, + inlineCss: ex.inlineCss, + prefetchInlining: ex.prefetchInlining, + authInterrupts: ex.authInterrupts, + clientTraceMetadata: ex.clientTraceMetadata, + clientParamParsingOrigins: ex.clientParamParsingOrigins, + allowedRevalidateHeaderKeys: ex.allowedRevalidateHeaderKeys, + fetchCacheKeyPrefix: ex.fetchCacheKeyPrefix, + isrFlushToDisk: ex.isrFlushToDisk, + optimizeCss: ex.optimizeCss, + nextScriptWorkers: ex.nextScriptWorkers, + disableOptimizedLoading: ex.disableOptimizedLoading, + largePageDataBytes: ex.largePageDataBytes, + serverComponentsHmrCache: ex.serverComponentsHmrCache, + caseSensitiveRoutes: ex.caseSensitiveRoutes, + validateRSCRequestHeaders: ex.validateRSCRequestHeaders, + sri: ex.sri, + useSkewCookie: ex.useSkewCookie, + preloadEntriesOnStart: ex.preloadEntriesOnStart, + hideLogsAfterAbort: ex.hideLogsAfterAbort, + removeUncaughtErrorAndRejectionListeners: ex.removeUncaughtErrorAndRejectionListeners, + imgOptConcurrency: ex.imgOptConcurrency, + imgOptMaxInputPixels: ex.imgOptMaxInputPixels, + imgOptSequentialRead: ex.imgOptSequentialRead, + imgOptSkipMetadata: ex.imgOptSkipMetadata, + imgOptTimeoutInSeconds: ex.imgOptTimeoutInSeconds, + proxyClientMaxBodySize: ex.proxyClientMaxBodySize, + proxyTimeout: ex.proxyTimeout, + testProxy: ex.testProxy, + runtimeServerDeploymentId: ex.runtimeServerDeploymentId, + maxPostponedStateSize: ex.maxPostponedStateSize, + cachedNavigations: ex.cachedNavigations, + partialFallbacks: ex.partialFallbacks, + exposeTestingApiInProductionBuild: ex.exposeTestingApiInProductionBuild, + immutableAssetToken: ex.immutableAssetToken, + trustHostHeader: ex.trustHostHeader, + isExperimentalCompile: ex.isExperimentalCompile + } : {}; + let runtimeConfig = { + deploymentId: config.experimental.runtimeServerDeploymentId ? '' : config.deploymentId, + configFileName: undefined, + env: undefined, + distDir: config.distDir, + cacheComponents: config.cacheComponents, + htmlLimitedBots: config.htmlLimitedBots, + assetPrefix: config.assetPrefix, + output: config.output, + crossOrigin: config.crossOrigin, + trailingSlash: config.trailingSlash, + images: config.images, + reactMaxHeadersLength: config.reactMaxHeadersLength, + cacheLife: config.cacheLife, + basePath: config.basePath, + expireTime: config.expireTime, + generateEtags: config.generateEtags, + poweredByHeader: config.poweredByHeader, + cacheHandler: config.cacheHandler, + cacheHandlers: config.cacheHandlers, + // The full adapterPath might be non-deterministic across builds and doesn't + // actually matter at runtime, so replace it with a placeholder if it's set. + adapterPath: config.adapterPath ? '' : undefined, + cacheMaxMemorySize: config.cacheMaxMemorySize, + compress: config.compress, + i18n: config.i18n, + httpAgentOptions: config.httpAgentOptions, + skipProxyUrlNormalize: config.skipProxyUrlNormalize, + pageExtensions: config.pageExtensions, + useFileSystemPublicRoutes: config.useFileSystemPublicRoutes, + logging: config.logging, + experimental + }; + if (config.experimental.isExperimentalCompile) { + runtimeConfig.env = config.env; + } + return runtimeConfig; +} + +//# sourceMappingURL=config-shared.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/config-utils.js b/build/node_modules/next/dist/server/config-utils.js new file mode 100644 index 0000000..3d78f58 --- /dev/null +++ b/build/node_modules/next/dist/server/config-utils.js @@ -0,0 +1,185 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "loadWebpackHook", { + enumerable: true, + get: function() { + return loadWebpackHook; + } +}); +let installed = false; +function loadWebpackHook() { + if (installed) { + return; + } + installed = true; + require('../server/require-hook').addHookAliases([ + [ + 'webpack', + 'next/dist/compiled/webpack/webpack-lib' + ], + [ + 'webpack/package', + 'next/dist/compiled/webpack/package' + ], + [ + 'webpack/package.json', + 'next/dist/compiled/webpack/package' + ], + [ + 'webpack/lib/webpack', + 'next/dist/compiled/webpack/webpack-lib' + ], + [ + 'webpack/lib/webpack.js', + 'next/dist/compiled/webpack/webpack-lib' + ], + [ + 'webpack/lib/node/NodeEnvironmentPlugin', + 'next/dist/compiled/webpack/NodeEnvironmentPlugin' + ], + [ + 'webpack/lib/node/NodeEnvironmentPlugin.js', + 'next/dist/compiled/webpack/NodeEnvironmentPlugin' + ], + [ + 'webpack/lib/BasicEvaluatedExpression', + 'next/dist/compiled/webpack/BasicEvaluatedExpression' + ], + [ + 'webpack/lib/BasicEvaluatedExpression.js', + 'next/dist/compiled/webpack/BasicEvaluatedExpression' + ], + [ + 'webpack/lib/node/NodeTargetPlugin', + 'next/dist/compiled/webpack/NodeTargetPlugin' + ], + [ + 'webpack/lib/node/NodeTargetPlugin.js', + 'next/dist/compiled/webpack/NodeTargetPlugin' + ], + [ + 'webpack/lib/node/NodeTemplatePlugin', + 'next/dist/compiled/webpack/NodeTemplatePlugin' + ], + [ + 'webpack/lib/node/NodeTemplatePlugin.js', + 'next/dist/compiled/webpack/NodeTemplatePlugin' + ], + [ + 'webpack/lib/LibraryTemplatePlugin', + 'next/dist/compiled/webpack/LibraryTemplatePlugin' + ], + [ + 'webpack/lib/LibraryTemplatePlugin.js', + 'next/dist/compiled/webpack/LibraryTemplatePlugin' + ], + [ + 'webpack/lib/SingleEntryPlugin', + 'next/dist/compiled/webpack/SingleEntryPlugin' + ], + [ + 'webpack/lib/SingleEntryPlugin.js', + 'next/dist/compiled/webpack/SingleEntryPlugin' + ], + [ + 'webpack/lib/optimize/LimitChunkCountPlugin', + 'next/dist/compiled/webpack/LimitChunkCountPlugin' + ], + [ + 'webpack/lib/optimize/LimitChunkCountPlugin.js', + 'next/dist/compiled/webpack/LimitChunkCountPlugin' + ], + [ + 'webpack/lib/webworker/WebWorkerTemplatePlugin', + 'next/dist/compiled/webpack/WebWorkerTemplatePlugin' + ], + [ + 'webpack/lib/webworker/WebWorkerTemplatePlugin.js', + 'next/dist/compiled/webpack/WebWorkerTemplatePlugin' + ], + [ + 'webpack/lib/ExternalsPlugin', + 'next/dist/compiled/webpack/ExternalsPlugin' + ], + [ + 'webpack/lib/ExternalsPlugin.js', + 'next/dist/compiled/webpack/ExternalsPlugin' + ], + [ + 'webpack/lib/web/FetchCompileWasmTemplatePlugin', + 'next/dist/compiled/webpack/FetchCompileWasmTemplatePlugin' + ], + [ + 'webpack/lib/web/FetchCompileWasmTemplatePlugin.js', + 'next/dist/compiled/webpack/FetchCompileWasmTemplatePlugin' + ], + [ + 'webpack/lib/web/FetchCompileWasmPlugin', + 'next/dist/compiled/webpack/FetchCompileWasmPlugin' + ], + [ + 'webpack/lib/web/FetchCompileWasmPlugin.js', + 'next/dist/compiled/webpack/FetchCompileWasmPlugin' + ], + [ + 'webpack/lib/web/FetchCompileAsyncWasmPlugin', + 'next/dist/compiled/webpack/FetchCompileAsyncWasmPlugin' + ], + [ + 'webpack/lib/web/FetchCompileAsyncWasmPlugin.js', + 'next/dist/compiled/webpack/FetchCompileAsyncWasmPlugin' + ], + [ + 'webpack/lib/ModuleFilenameHelpers', + 'next/dist/compiled/webpack/ModuleFilenameHelpers' + ], + [ + 'webpack/lib/ModuleFilenameHelpers.js', + 'next/dist/compiled/webpack/ModuleFilenameHelpers' + ], + [ + 'webpack/lib/GraphHelpers', + 'next/dist/compiled/webpack/GraphHelpers' + ], + [ + 'webpack/lib/GraphHelpers.js', + 'next/dist/compiled/webpack/GraphHelpers' + ], + [ + 'webpack/lib/NormalModule', + 'next/dist/compiled/webpack/NormalModule' + ], + [ + 'webpack-sources', + 'next/dist/compiled/webpack/sources' + ], + [ + 'webpack-sources/lib', + 'next/dist/compiled/webpack/sources' + ], + [ + 'webpack-sources/lib/index', + 'next/dist/compiled/webpack/sources' + ], + [ + 'webpack-sources/lib/index.js', + 'next/dist/compiled/webpack/sources' + ], + [ + '@babel/runtime', + 'next/dist/compiled/@babel/runtime/package.json' + ], + [ + '@babel/runtime/package.json', + 'next/dist/compiled/@babel/runtime/package.json' + ] + ].map(// Use dynamic require.resolve to avoid statically analyzable since they're only for build time + ([request, replacement])=>[ + request, + require.resolve(replacement) + ])); +} + +//# sourceMappingURL=config-utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/config.js b/build/node_modules/next/dist/server/config.js new file mode 100644 index 0000000..e5dee9b --- /dev/null +++ b/build/node_modules/next/dist/server/config.js @@ -0,0 +1,1545 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + default: null, + normalizeConfig: null, + warnOptionHasBeenDeprecated: null, + warnOptionHasBeenMovedOutOfExperimental: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + default: function() { + return loadConfig; + }, + normalizeConfig: function() { + return _configshared.normalizeConfig; + }, + warnOptionHasBeenDeprecated: function() { + return warnOptionHasBeenDeprecated; + }, + warnOptionHasBeenMovedOutOfExperimental: function() { + return warnOptionHasBeenMovedOutOfExperimental; + } +}); +const _fs = require("fs"); +const _path = require("path"); +const _url = require("url"); +const _findup = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/find-up")); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("../build/output/log")); +const _ciinfo = /*#__PURE__*/ _interop_require_wildcard(require("../server/ci-info")); +const _constants = require("../shared/lib/constants"); +const _configshared = require("./config-shared"); +const _configutils = require("./config-utils"); +const _imageconfig = require("../shared/lib/image-config"); +const _env = require("@next/env"); +const _flushtelemetry = require("../telemetry/flush-telemetry"); +const _findroot = require("../lib/find-root"); +const _setuphttpagentenv = require("./setup-http-agent-env"); +const _pathhasprefix = require("../shared/lib/router/utils/path-has-prefix"); +const _matchremotepattern = require("../shared/lib/match-remote-pattern"); +const _transpileconfig = require("../build/next-config-ts/transpile-config"); +const _dset = require("../shared/lib/dset"); +const _zod = require("../shared/lib/zod"); +const _isbot = require("../shared/lib/router/utils/is-bot"); +const _findpagesdir = require("../lib/find-pages-dir"); +const _interopdefault = require("../lib/interop-default"); +const _hash = require("../shared/lib/hash"); +const _harddeprecatedconfigerror = require("../shared/lib/errors/hard-deprecated-config-error"); +const _nextinstanceerrorstate = require("./mcp/tools/next-instance-error-state"); +const _bundler = require("../lib/bundler"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +function normalizeNextConfigZodErrors(error) { + const warnings = []; + const fatalErrors = []; + const issues = (0, _zod.normalizeZodErrors)(error); + for (const { issue, message: originalMessage } of issues){ + let message = originalMessage; + let shouldExit = false; + if (issue.path[0] === 'images') { + // We exit the build when encountering an error in the images config + shouldExit = true; + } + if (issue.code === 'unrecognized_keys' && issue.path[0] === 'experimental') { + if (message.includes('turbopackPersistentCachingForBuild')) { + // We exit the build when encountering an error in the turbopackPersistentCaching config + shouldExit = true; + message += "\nUse 'experimental.turbopackFileSystemCacheForBuild' instead."; + message += '\nLearn more: https://nextjs.org/docs/app/api-reference/config/next-config-js/turbopackFileSystemCache'; + } else if (message.includes('turbopackPersistentCaching')) { + // We exit the build when encountering an error in the turbopackPersistentCaching config + shouldExit = true; + message += "\nUse 'experimental.turbopackFileSystemCacheForDev' instead."; + message += '\nLearn more: https://nextjs.org/docs/app/api-reference/config/next-config-js/turbopackFileSystemCache'; + } + } + if (shouldExit) { + fatalErrors.push(message); + } else { + warnings.push(message); + } + } + return [ + warnings, + fatalErrors + ]; +} +function warnOptionHasBeenDeprecated(config, nestedPropertyKey, reason, silent) { + let hasWarned = false; + if (!silent) { + let current = config; + let found = true; + const nestedPropertyKeys = nestedPropertyKey.split('.'); + for (const key of nestedPropertyKeys){ + if (current[key] !== undefined) { + current = current[key]; + } else { + found = false; + break; + } + } + if (found) { + _log.warnOnce(reason); + hasWarned = true; + } + } + return hasWarned; +} +function checkDeprecations(userConfig, configFileName, silent, dir) { + var _userConfig_images_domains, _userConfig_images, _userConfig_experimental; + warnOptionHasBeenDeprecated(userConfig, 'experimental.middlewarePrefetch', `\`experimental.middlewarePrefetch\` is deprecated. Please use \`experimental.proxyPrefetch\` instead in ${configFileName}.`, silent); + warnOptionHasBeenDeprecated(userConfig, 'experimental.middlewareClientMaxBodySize', `\`experimental.middlewareClientMaxBodySize\` is deprecated. Please use \`experimental.proxyClientMaxBodySize\` instead in ${configFileName}.`, silent); + warnOptionHasBeenDeprecated(userConfig, 'experimental.externalMiddlewareRewritesResolve', `\`experimental.externalMiddlewareRewritesResolve\` is deprecated. Please use \`experimental.externalProxyRewritesResolve\` instead in ${configFileName}.`, silent); + warnOptionHasBeenDeprecated(userConfig, 'skipMiddlewareUrlNormalize', `\`skipMiddlewareUrlNormalize\` is deprecated. Please use \`skipProxyUrlNormalize\` instead in ${configFileName}.`, silent); + warnOptionHasBeenDeprecated(userConfig, 'experimental.instrumentationHook', `\`experimental.instrumentationHook\` is no longer needed, because \`instrumentation.js\` is available by default. You can remove it from ${configFileName}.`, silent); + warnOptionHasBeenDeprecated(userConfig, 'experimental.after', `\`experimental.after\` is no longer needed, because \`after\` is available by default. You can remove it from ${configFileName}.`, silent); + warnOptionHasBeenDeprecated(userConfig, 'eslint', `\`eslint\` configuration in ${configFileName} is no longer supported. See more info here: https://nextjs.org/docs/app/api-reference/cli/next#next-lint-options`, silent); + if ((_userConfig_images = userConfig.images) == null ? void 0 : (_userConfig_images_domains = _userConfig_images.domains) == null ? void 0 : _userConfig_images_domains.length) { + warnOptionHasBeenDeprecated(userConfig, 'images.domains', `\`images.domains\` is deprecated in favor of \`images.remotePatterns\`. Please update ${configFileName} to protect your application from malicious users.`, silent); + } + // i18n deprecation for App Router + if (userConfig.i18n) { + const hasAppDir = Boolean((0, _findpagesdir.findDir)(dir, 'app')); + if (hasAppDir) { + warnOptionHasBeenDeprecated(userConfig, 'i18n', `i18n configuration in ${configFileName} is unsupported in App Router.\nLearn more about internationalization in App Router: https://nextjs.org/docs/app/building-your-application/routing/internationalization`, silent); + } + } + // browserDebugInfoInTerminal has moved to logging.browserToTerminal + if (((_userConfig_experimental = userConfig.experimental) == null ? void 0 : _userConfig_experimental.browserDebugInfoInTerminal) !== undefined) { + warnOptionHasBeenDeprecated(userConfig, 'experimental.browserDebugInfoInTerminal', `\`experimental.browserDebugInfoInTerminal\` has been moved to \`logging.browserToTerminal\`. Please update your ${configFileName} file accordingly.`, silent); + } +} +function warnOptionHasBeenMovedOutOfExperimental(config, oldExperimentalKey, newKey, configFileName, silent) { + if (config.experimental && oldExperimentalKey in config.experimental) { + if (!silent) { + _log.warn(`\`experimental.${oldExperimentalKey}\` has been moved to \`${newKey}\`. ` + `Please update your ${configFileName} file accordingly.`); + } + let current = config; + const newKeys = newKey.split('.'); + while(newKeys.length > 1){ + const key = newKeys.shift(); + current[key] = current[key] || {}; + current = current[key]; + } + ; + current[newKeys.shift()] = config.experimental[oldExperimentalKey]; + } + return config; +} +function warnCustomizedOption(config, key, defaultValue, customMessage, configFileName, silent) { + const segs = key.split('.'); + let current = config; + while(segs.length >= 1){ + const seg = segs.shift(); + if (!(seg in current)) { + return; + } + current = current[seg]; + } + if (!silent && current !== defaultValue) { + _log.warn(`The "${key}" option has been modified. ${customMessage ? customMessage + '. ' : ''}It should be removed from your ${configFileName}.`); + } +} +/** + * Assigns defaults to the user config and validates the config. + * + * @param dir - The directory of the project. + * @param userConfig - The user config. + * @param silent - Whether to suppress warnings. + * @returns The complete config. + */ function assignDefaultsAndValidate(dir, userConfig, silent, phase) { + var _result_experimental, _result_experimental1, _result_experimental_serverActions, _result_experimental2, _userConfig_experimental, _userConfig_experimental1, _userConfig_experimental2, _userConfig_experimental3, _userConfig_experimental4, _userConfig_experimental5, _userConfig_experimental6, _userConfig_experimental7, _userConfig_experimental8, _userConfig_experimental9, _userConfig_experimental10, _userConfig_experimental11, _userConfig_experimental12, _userConfig_experimental13, _userConfig_experimental14, _userConfig_experimental15, _result_experimental3, _result_turbopack, _result_turbopack1, _result_devIndicators, _result_experimental4; + const configFileName = userConfig.configFileName; + if (typeof userConfig.exportTrailingSlash !== 'undefined') { + if (!silent) { + _log.warn(`The "exportTrailingSlash" option has been renamed to "trailingSlash". Please update your ${configFileName}.`); + } + if (typeof userConfig.trailingSlash === 'undefined') { + userConfig.trailingSlash = userConfig.exportTrailingSlash; + } + delete userConfig.exportTrailingSlash; + } + const config = Object.keys(userConfig).reduce((currentConfig, key)=>{ + const value = userConfig[key]; + if (value === undefined || value === null) { + return currentConfig; + } + if (key === 'distDir') { + if (typeof value !== 'string') { + throw Object.defineProperty(new Error(`Specified distDir is not a string, found type "${typeof value}"`), "__NEXT_ERROR_CODE", { + value: "E206", + enumerable: false, + configurable: true + }); + } + const userDistDir = value.trim(); + // don't allow public as the distDir as this is a reserved folder for + // public files + if (userDistDir === 'public') { + throw Object.defineProperty(new Error(`The 'public' directory is reserved in Next.js and can not be set as the 'distDir'. https://nextjs.org/docs/messages/can-not-output-to-public`), "__NEXT_ERROR_CODE", { + value: "E221", + enumerable: false, + configurable: true + }); + } + // make sure distDir isn't an empty string as it can result in the provided + // directory being deleted in development mode + if (userDistDir.length === 0) { + throw Object.defineProperty(new Error(`Invalid distDir provided, distDir can not be an empty string. Please remove this config or set it to undefined`), "__NEXT_ERROR_CODE", { + value: "E391", + enumerable: false, + configurable: true + }); + } + } + if (key === 'pageExtensions') { + if (!Array.isArray(value)) { + throw Object.defineProperty(new Error(`Specified pageExtensions is not an array of strings, found "${value}". Please update this config or remove it.`), "__NEXT_ERROR_CODE", { + value: "E140", + enumerable: false, + configurable: true + }); + } + if (!value.length) { + throw Object.defineProperty(new Error(`Specified pageExtensions is an empty array. Please update it with the relevant extensions or remove it.`), "__NEXT_ERROR_CODE", { + value: "E43", + enumerable: false, + configurable: true + }); + } + value.forEach((ext)=>{ + if (typeof ext !== 'string') { + throw Object.defineProperty(new Error(`Specified pageExtensions is not an array of strings, found "${ext}" of type "${typeof ext}". Please update this config or remove it.`), "__NEXT_ERROR_CODE", { + value: "E108", + enumerable: false, + configurable: true + }); + } + }); + } + const defaultValue = _configshared.defaultConfig[key]; + if (!!value && value.constructor === Object && typeof defaultValue === 'object') { + currentConfig[key] = { + ...defaultValue, + ...Object.keys(value).reduce((c, k)=>{ + const v = value[k]; + if (v !== undefined && v !== null) { + c[k] = v; + } + return c; + }, {}) + }; + } else { + currentConfig[key] = value; + } + return currentConfig; + }, {}); + const result = { + ..._configshared.defaultConfig, + ...config, + experimental: { + ..._configshared.defaultConfig.experimental, + ...config.experimental + } + }; + // Normalize prefetchInlining: true | { maxSize?, maxBundleSize? } into a + // resolved object with concrete defaults, so consumers don't have to + // resolve the values themselves. + if (result.experimental.prefetchInlining) { + const raw = result.experimental.prefetchInlining; + const maxSize = typeof raw === 'object' ? raw.maxSize ?? 2048 : 2048; + const maxBundleSize = typeof raw === 'object' ? raw.maxBundleSize ?? 10240 : 10240; + result.experimental.prefetchInlining = { + // Clamp Infinity to a finite value so the config survives + // JSON.stringify (used by output: standalone). + maxSize: Number.isFinite(maxSize) ? maxSize : Number.MAX_SAFE_INTEGER, + maxBundleSize: Number.isFinite(maxBundleSize) ? maxBundleSize : Number.MAX_SAFE_INTEGER + }; + } + // ensure correct default is set for api-resolver revalidate handling + if (!result.experimental.trustHostHeader && _ciinfo.hasNextSupport) { + result.experimental.trustHostHeader = true; + } + // Normalize experimental.browserDebugInfoInTerminal to logging.browserToTerminal + if (result.logging !== false && ((_result_experimental = result.experimental) == null ? void 0 : _result_experimental.browserDebugInfoInTerminal) !== undefined) { + const loggingConfig = result.logging || {}; + if (!('browserToTerminal' in loggingConfig)) { + const expConfig = result.experimental.browserDebugInfoInTerminal; + // Convert object config to simple format (level or true) + const level = typeof expConfig === 'object' && expConfig !== null ? expConfig.level ?? true : expConfig; + // Map 'verbose' to true since browserToTerminal doesn't support 'verbose' + const normalizedValue = level === 'verbose' ? true : level; + result.logging = { + ...loggingConfig, + browserToTerminal: normalizedValue + }; + } + } + if (((_result_experimental1 = result.experimental) == null ? void 0 : _result_experimental1.allowDevelopmentBuild) && process.env.NODE_ENV !== 'development') { + throw Object.defineProperty(new Error(`The experimental.allowDevelopmentBuild option requires NODE_ENV to be explicitly set to 'development'.`), "__NEXT_ERROR_CODE", { + value: "E195", + enumerable: false, + configurable: true + }); + } + // Validate sassOptions.functions is not used with Turbopack + if (process.env.TURBOPACK && result.sassOptions && 'functions' in result.sassOptions) { + throw Object.defineProperty(new Error(`The "sassOptions.functions" option is not supported when using Turbopack. ` + `Custom Sass functions are only available with webpack. ` + `Please remove the "functions" property from your sassOptions in ${configFileName}.`), "__NEXT_ERROR_CODE", { + value: "E893", + enumerable: false, + configurable: true + }); + } + if (result.experimental.cachedNavigations && !result.cacheComponents) { + throw Object.defineProperty(new Error(`\`experimental.cachedNavigations\` requires \`cacheComponents\` to be enabled. Please update your ${configFileName} accordingly.`), "__NEXT_ERROR_CODE", { + value: "E1089", + enumerable: false, + configurable: true + }); + } + if (result.experimental.ppr) { + throw new _harddeprecatedconfigerror.HardDeprecatedConfigError(`\`experimental.ppr\` has been merged into \`cacheComponents\`. The Partial Prerendering feature is still available, but is now enabled via \`cacheComponents\`. Please update your ${configFileName} accordingly.`); + } + if (result.output === 'export') { + if (result.i18n) { + throw Object.defineProperty(new Error('Specified "i18n" cannot be used with "output: export". See more info here: https://nextjs.org/docs/messages/export-no-i18n'), "__NEXT_ERROR_CODE", { + value: "E493", + enumerable: false, + configurable: true + }); + } + if (!_ciinfo.hasNextSupport) { + if (result.rewrites) { + _log.warn('Specified "rewrites" will not automatically work with "output: export". See more info here: https://nextjs.org/docs/messages/export-no-custom-routes'); + } + if (result.redirects) { + _log.warn('Specified "redirects" will not automatically work with "output: export". See more info here: https://nextjs.org/docs/messages/export-no-custom-routes'); + } + if (result.headers) { + _log.warn('Specified "headers" will not automatically work with "output: export". See more info here: https://nextjs.org/docs/messages/export-no-custom-routes'); + } + } + } + if (typeof result.assetPrefix !== 'string') { + throw Object.defineProperty(new Error(`Specified assetPrefix is not a string, found type "${typeof result.assetPrefix}" https://nextjs.org/docs/messages/invalid-assetprefix`), "__NEXT_ERROR_CODE", { + value: "E68", + enumerable: false, + configurable: true + }); + } + if (typeof result.basePath !== 'string') { + throw Object.defineProperty(new Error(`Specified basePath is not a string, found type "${typeof result.basePath}"`), "__NEXT_ERROR_CODE", { + value: "E326", + enumerable: false, + configurable: true + }); + } + if (result.basePath !== '') { + if (result.basePath === '/') { + throw Object.defineProperty(new Error(`Specified basePath /. basePath has to be either an empty string or a path prefix"`), "__NEXT_ERROR_CODE", { + value: "E95", + enumerable: false, + configurable: true + }); + } + if (!result.basePath.startsWith('/')) { + throw Object.defineProperty(new Error(`Specified basePath has to start with a /, found "${result.basePath}"`), "__NEXT_ERROR_CODE", { + value: "E105", + enumerable: false, + configurable: true + }); + } + if (result.basePath !== '/') { + if (result.basePath.endsWith('/')) { + throw Object.defineProperty(new Error(`Specified basePath should not end with /, found "${result.basePath}"`), "__NEXT_ERROR_CODE", { + value: "E39", + enumerable: false, + configurable: true + }); + } + if (result.assetPrefix === '') { + result.assetPrefix = result.basePath; + } + } + } + if (result == null ? void 0 : result.images) { + const images = result.images; + if (typeof images !== 'object') { + throw Object.defineProperty(new Error(`Specified images should be an object received ${typeof images}.\nSee more info here: https://nextjs.org/docs/messages/invalid-images-config`), "__NEXT_ERROR_CODE", { + value: "E171", + enumerable: false, + configurable: true + }); + } + if (images.localPatterns) { + if (!Array.isArray(images.localPatterns)) { + throw Object.defineProperty(new Error(`Specified images.localPatterns should be an Array received ${typeof images.localPatterns}.\nSee more info here: https://nextjs.org/docs/messages/invalid-images-config`), "__NEXT_ERROR_CODE", { + value: "E118", + enumerable: false, + configurable: true + }); + } + // avoid double-pushing the same pattern if it already exists + const hasMatch = images.localPatterns.some((pattern)=>pattern.pathname === '/_next/static/media/**' && pattern.search === ''); + if (!hasMatch) { + // static import images are automatically allowed + images.localPatterns.push({ + pathname: '/_next/static/media/**', + search: '' + }); + } + } else { + // All paths are not allowed for a search query by default. + images.localPatterns = [ + { + pathname: '**', + search: '' + } + ]; + } + if (images.remotePatterns) { + var _config_assetPrefix; + if (!Array.isArray(images.remotePatterns)) { + throw Object.defineProperty(new Error(`Specified images.remotePatterns should be an Array received ${typeof images.remotePatterns}.\nSee more info here: https://nextjs.org/docs/messages/invalid-images-config`), "__NEXT_ERROR_CODE", { + value: "E27", + enumerable: false, + configurable: true + }); + } + // We must convert URL to RemotePattern since URL has a colon in the protocol + // and also has additional properties we want to filter out. Also, new URL() + // accepts any protocol so we need manual validation here. + images.remotePatterns = images.remotePatterns.map(({ protocol, hostname, port, pathname, search })=>{ + const proto = protocol == null ? void 0 : protocol.replace(/:$/, ''); + if (![ + 'http', + 'https', + undefined + ].includes(proto)) { + throw Object.defineProperty(new Error(`Specified images.remotePatterns must have protocol "http" or "https" received "${proto}".`), "__NEXT_ERROR_CODE", { + value: "E671", + enumerable: false, + configurable: true + }); + } + return { + protocol: proto, + hostname, + port, + pathname, + search + }; + }); + // static images are automatically prefixed with assetPrefix + // so we need to ensure _next/image allows downloading from + // this resource + if ((_config_assetPrefix = config.assetPrefix) == null ? void 0 : _config_assetPrefix.startsWith('http')) { + try { + const url = new URL(config.assetPrefix); + const hasMatchForAssetPrefix = images.remotePatterns.some((pattern)=>(0, _matchremotepattern.matchRemotePattern)(pattern, url)); + // avoid double-pushing the same pattern if it already can be matched + if (!hasMatchForAssetPrefix) { + images.remotePatterns.push({ + hostname: url.hostname, + protocol: url.protocol.replace(/:$/, ''), + port: url.port + }); + } + } catch (error) { + throw Object.defineProperty(new Error(`Invalid assetPrefix provided. Original error: ${error}`), "__NEXT_ERROR_CODE", { + value: "E343", + enumerable: false, + configurable: true + }); + } + } + } + if (images.domains) { + if (!Array.isArray(images.domains)) { + throw Object.defineProperty(new Error(`Specified images.domains should be an Array received ${typeof images.domains}.\nSee more info here: https://nextjs.org/docs/messages/invalid-images-config`), "__NEXT_ERROR_CODE", { + value: "E402", + enumerable: false, + configurable: true + }); + } + } + if (!images.loader) { + images.loader = 'default'; + } + if (images.loader !== 'default' && images.loader !== 'custom' && images.path === _imageconfig.imageConfigDefault.path) { + throw Object.defineProperty(new Error(`Specified images.loader property (${images.loader}) also requires images.path property to be assigned to a URL prefix.\nSee more info here: https://nextjs.org/docs/api-reference/next/legacy/image#loader-configuration`), "__NEXT_ERROR_CODE", { + value: "E228", + enumerable: false, + configurable: true + }); + } + if (images.path === _imageconfig.imageConfigDefault.path && result.basePath && !(0, _pathhasprefix.pathHasPrefix)(images.path, result.basePath)) { + images.path = `${result.basePath}${images.path}`; + } + // Append trailing slash for non-default loaders and when trailingSlash is set + if (images.path && !images.path.endsWith('/') && (images.loader !== 'default' || result.trailingSlash)) { + images.path += '/'; + } + if (images.loaderFile) { + if (images.loader !== 'default' && images.loader !== 'custom') { + throw Object.defineProperty(new Error(`Specified images.loader property (${images.loader}) cannot be used with images.loaderFile property. Please set images.loader to "custom".`), "__NEXT_ERROR_CODE", { + value: "E449", + enumerable: false, + configurable: true + }); + } + const absolutePath = (0, _path.join)(dir, images.loaderFile); + if (!(0, _fs.existsSync)(absolutePath)) { + throw Object.defineProperty(new Error(`Specified images.loaderFile does not exist at "${absolutePath}".`), "__NEXT_ERROR_CODE", { + value: "E461", + enumerable: false, + configurable: true + }); + } + images.loaderFile = absolutePath; + } + } + warnCustomizedOption(result, 'experimental.esmExternals', true, 'experimental.esmExternals is not recommended to be modified as it may disrupt module resolution', configFileName, silent); + warnOptionHasBeenMovedOutOfExperimental(result, 'bundlePagesExternals', 'bundlePagesRouterDependencies', configFileName, silent); + warnOptionHasBeenMovedOutOfExperimental(result, 'serverComponentsExternalPackages', 'serverExternalPackages', configFileName, silent); + warnOptionHasBeenMovedOutOfExperimental(result, 'relay', 'compiler.relay', configFileName, silent); + warnOptionHasBeenMovedOutOfExperimental(result, 'styledComponents', 'compiler.styledComponents', configFileName, silent); + warnOptionHasBeenMovedOutOfExperimental(result, 'emotion', 'compiler.emotion', configFileName, silent); + warnOptionHasBeenMovedOutOfExperimental(result, 'reactRemoveProperties', 'compiler.reactRemoveProperties', configFileName, silent); + warnOptionHasBeenMovedOutOfExperimental(result, 'removeConsole', 'compiler.removeConsole', configFileName, silent); + warnOptionHasBeenMovedOutOfExperimental(result, 'swrDelta', 'expireTime', configFileName, silent); + warnOptionHasBeenMovedOutOfExperimental(result, 'typedRoutes', 'typedRoutes', configFileName, silent); + warnOptionHasBeenMovedOutOfExperimental(result, 'outputFileTracingRoot', 'outputFileTracingRoot', configFileName, silent); + warnOptionHasBeenMovedOutOfExperimental(result, 'outputFileTracingIncludes', 'outputFileTracingIncludes', configFileName, silent); + warnOptionHasBeenMovedOutOfExperimental(result, 'outputFileTracingExcludes', 'outputFileTracingExcludes', configFileName, silent); + warnOptionHasBeenMovedOutOfExperimental(result, 'reactCompiler', 'reactCompiler', configFileName, silent); + warnOptionHasBeenMovedOutOfExperimental(result, 'enablePrerenderSourceMaps', 'enablePrerenderSourceMaps', configFileName, silent); + warnOptionHasBeenMovedOutOfExperimental(result, 'cacheComponents', 'cacheComponents', configFileName, silent); + warnOptionHasBeenMovedOutOfExperimental(result, 'cacheLife', 'cacheLife', configFileName, silent); + warnOptionHasBeenMovedOutOfExperimental(result, 'cacheHandlers', 'cacheHandlers', configFileName, silent); + warnOptionHasBeenMovedOutOfExperimental(result, 'adapterPath', 'adapterPath', configFileName, silent); + if (result.experimental.outputStandalone) { + if (!silent) { + _log.warn(`experimental.outputStandalone has been renamed to "output: 'standalone'", please move the config.`); + } + result.output = 'standalone'; + } + if (typeof ((_result_experimental2 = result.experimental) == null ? void 0 : (_result_experimental_serverActions = _result_experimental2.serverActions) == null ? void 0 : _result_experimental_serverActions.bodySizeLimit) !== 'undefined') { + const bytes = require('next/dist/compiled/bytes'); + const bodySizeLimit = result.experimental.serverActions.bodySizeLimit; + let value; + if (typeof bodySizeLimit === 'number') { + value = bodySizeLimit; + } else { + value = bytes.parse(bodySizeLimit); + } + if (value === null || isNaN(value) || value < 1) { + throw Object.defineProperty(new Error('Server Actions Size Limit must be a valid number or filesize format larger than 1MB: https://nextjs.org/docs/app/api-reference/next-config-js/serverActions#bodysizelimit'), "__NEXT_ERROR_CODE", { + value: "E100", + enumerable: false, + configurable: true + }); + } + } + // Throw if both Middleware and Proxy config are set. + if (((_userConfig_experimental = userConfig.experimental) == null ? void 0 : _userConfig_experimental.proxyClientMaxBodySize) !== undefined && ((_userConfig_experimental1 = userConfig.experimental) == null ? void 0 : _userConfig_experimental1.middlewareClientMaxBodySize) !== undefined) { + throw Object.defineProperty(new Error('Config options `experimental.proxyClientMaxBodySize` and `experimental.middlewareClientMaxBodySize` cannot be set at the same time. Please use `experimental.proxyClientMaxBodySize` instead.'), "__NEXT_ERROR_CODE", { + value: "E879", + enumerable: false, + configurable: true + }); + } + if (((_userConfig_experimental2 = userConfig.experimental) == null ? void 0 : _userConfig_experimental2.proxyPrefetch) !== undefined && ((_userConfig_experimental3 = userConfig.experimental) == null ? void 0 : _userConfig_experimental3.middlewarePrefetch) !== undefined) { + throw Object.defineProperty(new Error('Config options `experimental.proxyPrefetch` and `experimental.middlewarePrefetch` cannot be set at the same time. Please use `experimental.proxyPrefetch` instead.'), "__NEXT_ERROR_CODE", { + value: "E880", + enumerable: false, + configurable: true + }); + } + if (((_userConfig_experimental4 = userConfig.experimental) == null ? void 0 : _userConfig_experimental4.externalProxyRewritesResolve) !== undefined && ((_userConfig_experimental5 = userConfig.experimental) == null ? void 0 : _userConfig_experimental5.externalMiddlewareRewritesResolve) !== undefined) { + throw Object.defineProperty(new Error('Config options `experimental.externalProxyRewritesResolve` and `experimental.externalMiddlewareRewritesResolve` cannot be set at the same time. Please use `experimental.externalProxyRewritesResolve` instead.'), "__NEXT_ERROR_CODE", { + value: "E877", + enumerable: false, + configurable: true + }); + } + if (userConfig.skipProxyUrlNormalize !== undefined && userConfig.skipMiddlewareUrlNormalize !== undefined) { + throw Object.defineProperty(new Error('Config options `skipProxyUrlNormalize` and `skipMiddlewareUrlNormalize` cannot be set at the same time. Please use `skipProxyUrlNormalize` instead.'), "__NEXT_ERROR_CODE", { + value: "E878", + enumerable: false, + configurable: true + }); + } + // Map Proxy config to Middleware config as it is currently an alias. + if (((_userConfig_experimental6 = userConfig.experimental) == null ? void 0 : _userConfig_experimental6.proxyClientMaxBodySize) === undefined && ((_userConfig_experimental7 = userConfig.experimental) == null ? void 0 : _userConfig_experimental7.middlewareClientMaxBodySize) !== undefined) { + result.experimental.proxyClientMaxBodySize = userConfig.experimental.middlewareClientMaxBodySize; + } + if (((_userConfig_experimental8 = userConfig.experimental) == null ? void 0 : _userConfig_experimental8.proxyPrefetch) === undefined && ((_userConfig_experimental9 = userConfig.experimental) == null ? void 0 : _userConfig_experimental9.middlewarePrefetch) !== undefined) { + result.experimental.proxyPrefetch = userConfig.experimental.middlewarePrefetch; + } + if (((_userConfig_experimental10 = userConfig.experimental) == null ? void 0 : _userConfig_experimental10.externalProxyRewritesResolve) === undefined && ((_userConfig_experimental11 = userConfig.experimental) == null ? void 0 : _userConfig_experimental11.externalMiddlewareRewritesResolve) !== undefined) { + result.experimental.externalProxyRewritesResolve = userConfig.experimental.externalMiddlewareRewritesResolve; + } + if (userConfig.skipProxyUrlNormalize === undefined && userConfig.skipMiddlewareUrlNormalize !== undefined) { + result.skipProxyUrlNormalize = userConfig.skipMiddlewareUrlNormalize; + } + // Inverse case: when new name is set but not the old name, copy the value to the old name + // to avoid breaking change on resolved config object written to `.next/` + if (((_userConfig_experimental12 = userConfig.experimental) == null ? void 0 : _userConfig_experimental12.proxyPrefetch) !== undefined && ((_userConfig_experimental13 = userConfig.experimental) == null ? void 0 : _userConfig_experimental13.middlewarePrefetch) === undefined) { + result.experimental.middlewarePrefetch = userConfig.experimental.proxyPrefetch; + } + if (((_userConfig_experimental14 = userConfig.experimental) == null ? void 0 : _userConfig_experimental14.externalProxyRewritesResolve) !== undefined && ((_userConfig_experimental15 = userConfig.experimental) == null ? void 0 : _userConfig_experimental15.externalMiddlewareRewritesResolve) === undefined) { + result.experimental.externalMiddlewareRewritesResolve = userConfig.experimental.externalProxyRewritesResolve; + } + if (userConfig.skipProxyUrlNormalize !== undefined && userConfig.skipMiddlewareUrlNormalize === undefined) { + result.skipMiddlewareUrlNormalize = userConfig.skipProxyUrlNormalize; + } + // Normalize & validate experimental.proxyClientMaxBodySize + if (typeof ((_result_experimental3 = result.experimental) == null ? void 0 : _result_experimental3.proxyClientMaxBodySize) !== 'undefined') { + const proxyClientMaxBodySize = result.experimental.proxyClientMaxBodySize; + let normalizedValue; + if (typeof proxyClientMaxBodySize === 'string') { + const bytes = require('next/dist/compiled/bytes'); + normalizedValue = bytes.parse(proxyClientMaxBodySize); + } else if (typeof proxyClientMaxBodySize === 'number') { + normalizedValue = proxyClientMaxBodySize; + } else { + throw Object.defineProperty(new Error('Client Max Body Size must be a valid number (bytes) or filesize format string (e.g., "5mb")'), "__NEXT_ERROR_CODE", { + value: "E860", + enumerable: false, + configurable: true + }); + } + if (isNaN(normalizedValue) || normalizedValue < 1) { + throw Object.defineProperty(new Error('Client Max Body Size must be larger than 0 bytes'), "__NEXT_ERROR_CODE", { + value: "E861", + enumerable: false, + configurable: true + }); + } + // Store the normalized value as a number + result.experimental.proxyClientMaxBodySize = normalizedValue; + } + warnOptionHasBeenMovedOutOfExperimental(result, 'transpilePackages', 'transpilePackages', configFileName, silent); + warnOptionHasBeenMovedOutOfExperimental(result, 'skipMiddlewareUrlNormalize', 'skipMiddlewareUrlNormalize', configFileName, silent); + warnOptionHasBeenMovedOutOfExperimental(result, 'skipTrailingSlashRedirect', 'skipTrailingSlashRedirect', configFileName, silent); + if ((result == null ? void 0 : result.outputFileTracingRoot) && !(0, _path.isAbsolute)(result.outputFileTracingRoot)) { + result.outputFileTracingRoot = (0, _path.resolve)(result.outputFileTracingRoot); + if (!silent) { + _log.warn(`outputFileTracingRoot should be absolute, using: ${result.outputFileTracingRoot}`); + } + } + if ((result == null ? void 0 : (_result_turbopack = result.turbopack) == null ? void 0 : _result_turbopack.root) && !(0, _path.isAbsolute)(result.turbopack.root)) { + result.turbopack.root = (0, _path.resolve)(result.turbopack.root); + if (!silent) { + _log.warn(`turbopack.root should be absolute, using: ${result.turbopack.root}`); + } + } + if (result.experimental.runtimeServerDeploymentId == null && phase === _constants.PHASE_PRODUCTION_BUILD && _ciinfo.hasNextSupport && process.env.NEXT_DEPLOYMENT_ID) { + if (result.deploymentId != null && result.deploymentId !== process.env.NEXT_DEPLOYMENT_ID) { + throw Object.defineProperty(new Error(`The NEXT_DEPLOYMENT_ID environment variable value "${process.env.NEXT_DEPLOYMENT_ID}" does not match the provided deploymentId "${result.deploymentId}" in the config.`), "__NEXT_ERROR_CODE", { + value: "E971", + enumerable: false, + configurable: true + }); + } + result.experimental.runtimeServerDeploymentId = true; + } + // only leverage deploymentId + if (process.env.NEXT_DEPLOYMENT_ID) { + result.deploymentId = process.env.NEXT_DEPLOYMENT_ID; + } + // Only read process.env.__NEXT_IMMUTABLE_ASSET_TOKEN to make our testing setup easier. This is + // actually done by the adapter's modifyConfig + if (process.env.__NEXT_TEST_MODE && process.env.IS_TURBOPACK_TEST && result.deploymentId && process.env.__NEXT_IMMUTABLE_ASSET_TOKEN) { + result.experimental.immutableAssetToken = process.env.__NEXT_IMMUTABLE_ASSET_TOKEN; + } + const tracingRoot = result == null ? void 0 : result.outputFileTracingRoot; + const turbopackRoot = result == null ? void 0 : (_result_turbopack1 = result.turbopack) == null ? void 0 : _result_turbopack1.root; + // If both provided, validate they match. If not, use outputFileTracingRoot. + if (tracingRoot && turbopackRoot && tracingRoot !== turbopackRoot) { + _log.warn(`Both \`outputFileTracingRoot\` and \`turbopack.root\` are set, but they must have the same value.\n` + `Using \`outputFileTracingRoot\` value: ${tracingRoot}.`); + } + let rootDir = tracingRoot || turbopackRoot; + if (!rootDir) { + const { rootDir: foundRootDir, lockFiles } = (0, _findroot.findRootDirAndLockFiles)(dir); + rootDir = foundRootDir; + if (!silent) { + (0, _findroot.warnDuplicatedLockFiles)(lockFiles); + } + } + if (!rootDir) { + throw Object.defineProperty(new Error('Failed to find the root directory of the project. This is a bug in Next.js.'), "__NEXT_ERROR_CODE", { + value: "E782", + enumerable: false, + configurable: true + }); + } + // Ensure both properties are set to the same value + result.outputFileTracingRoot = rootDir; + (0, _dset.dset)(result, [ + 'turbopack', + 'root' + ], rootDir); + (0, _setuphttpagentenv.setHttpClientAndAgentOptions)(result || _configshared.defaultConfig); + if (result.i18n) { + const { i18n } = result; + const i18nType = typeof i18n; + if (i18nType !== 'object') { + throw Object.defineProperty(new Error(`Specified i18n should be an object received ${i18nType}.\nSee more info here: https://nextjs.org/docs/messages/invalid-i18n-config`), "__NEXT_ERROR_CODE", { + value: "E148", + enumerable: false, + configurable: true + }); + } + if (!Array.isArray(i18n.locales)) { + throw Object.defineProperty(new Error(`Specified i18n.locales should be an Array received ${typeof i18n.locales}.\nSee more info here: https://nextjs.org/docs/messages/invalid-i18n-config`), "__NEXT_ERROR_CODE", { + value: "E227", + enumerable: false, + configurable: true + }); + } + if (i18n.locales.length > 100 && !silent) { + _log.warn(`Received ${i18n.locales.length} i18n.locales items which exceeds the recommended max of 100.\nSee more info here: https://nextjs.org/docs/advanced-features/i18n-routing#how-does-this-work-with-static-generation`); + } + const defaultLocaleType = typeof i18n.defaultLocale; + if (!i18n.defaultLocale || defaultLocaleType !== 'string') { + throw Object.defineProperty(new Error(`Specified i18n.defaultLocale should be a string.\nSee more info here: https://nextjs.org/docs/messages/invalid-i18n-config`), "__NEXT_ERROR_CODE", { + value: "E441", + enumerable: false, + configurable: true + }); + } + if (typeof i18n.domains !== 'undefined' && !Array.isArray(i18n.domains)) { + throw Object.defineProperty(new Error(`Specified i18n.domains must be an array of domain objects e.g. [ { domain: 'example.fr', defaultLocale: 'fr', locales: ['fr'] } ] received ${typeof i18n.domains}.\nSee more info here: https://nextjs.org/docs/messages/invalid-i18n-config`), "__NEXT_ERROR_CODE", { + value: "E456", + enumerable: false, + configurable: true + }); + } + if (i18n.domains) { + const invalidDomainItems = i18n.domains.filter((item)=>{ + var _i18n_domains; + if (!item || typeof item !== 'object') return true; + if (!item.defaultLocale) return true; + if (!item.domain || typeof item.domain !== 'string') return true; + if (item.domain.includes(':')) { + console.warn(`i18n domain: "${item.domain}" is invalid it should be a valid domain without protocol (https://) or port (:3000) e.g. example.vercel.sh`); + return true; + } + const defaultLocaleDuplicate = (_i18n_domains = i18n.domains) == null ? void 0 : _i18n_domains.find((altItem)=>altItem.defaultLocale === item.defaultLocale && altItem.domain !== item.domain); + if (!silent && defaultLocaleDuplicate) { + console.warn(`Both ${item.domain} and ${defaultLocaleDuplicate.domain} configured the defaultLocale ${item.defaultLocale} but only one can. Change one item's default locale to continue`); + return true; + } + let hasInvalidLocale = false; + if (Array.isArray(item.locales)) { + for (const locale of item.locales){ + if (typeof locale !== 'string') hasInvalidLocale = true; + for (const domainItem of i18n.domains || []){ + if (domainItem === item) continue; + if (domainItem.locales && domainItem.locales.includes(locale)) { + console.warn(`Both ${item.domain} and ${domainItem.domain} configured the locale (${locale}) but only one can. Remove it from one i18n.domains config to continue`); + hasInvalidLocale = true; + break; + } + } + } + } + return hasInvalidLocale; + }); + if (invalidDomainItems.length > 0) { + throw Object.defineProperty(new Error(`Invalid i18n.domains values:\n${invalidDomainItems.map((item)=>JSON.stringify(item)).join('\n')}\n\ndomains value must follow format { domain: 'example.fr', defaultLocale: 'fr', locales: ['fr'] }.\nSee more info here: https://nextjs.org/docs/messages/invalid-i18n-config`), "__NEXT_ERROR_CODE", { + value: "E413", + enumerable: false, + configurable: true + }); + } + } + if (!Array.isArray(i18n.locales)) { + throw Object.defineProperty(new Error(`Specified i18n.locales must be an array of locale strings e.g. ["en-US", "nl-NL"] received ${typeof i18n.locales}.\nSee more info here: https://nextjs.org/docs/messages/invalid-i18n-config`), "__NEXT_ERROR_CODE", { + value: "E432", + enumerable: false, + configurable: true + }); + } + const invalidLocales = i18n.locales.filter((locale)=>typeof locale !== 'string'); + if (invalidLocales.length > 0) { + throw Object.defineProperty(new Error(`Specified i18n.locales contains invalid values (${invalidLocales.map(String).join(', ')}), locales must be valid locale tags provided as strings e.g. "en-US".\n` + `See here for list of valid language sub-tags: http://www.iana.org/assignments/language-subtag-registry/language-subtag-registry`), "__NEXT_ERROR_CODE", { + value: "E71", + enumerable: false, + configurable: true + }); + } + if (!i18n.locales.includes(i18n.defaultLocale)) { + throw Object.defineProperty(new Error(`Specified i18n.defaultLocale should be included in i18n.locales.\nSee more info here: https://nextjs.org/docs/messages/invalid-i18n-config`), "__NEXT_ERROR_CODE", { + value: "E515", + enumerable: false, + configurable: true + }); + } + const normalizedLocales = new Set(); + const duplicateLocales = new Set(); + i18n.locales.forEach((locale)=>{ + const localeLower = locale.toLowerCase(); + if (normalizedLocales.has(localeLower)) { + duplicateLocales.add(locale); + } + normalizedLocales.add(localeLower); + }); + if (duplicateLocales.size > 0) { + throw Object.defineProperty(new Error(`Specified i18n.locales contains the following duplicate locales:\n` + `${[ + ...duplicateLocales + ].join(', ')}\n` + `Each locale should be listed only once.\n` + `See more info here: https://nextjs.org/docs/messages/invalid-i18n-config`), "__NEXT_ERROR_CODE", { + value: "E471", + enumerable: false, + configurable: true + }); + } + // make sure default Locale is at the front + i18n.locales = [ + i18n.defaultLocale, + ...i18n.locales.filter((locale)=>locale !== i18n.defaultLocale) + ]; + const localeDetectionType = typeof i18n.localeDetection; + if (localeDetectionType !== 'boolean' && localeDetectionType !== 'undefined') { + throw Object.defineProperty(new Error(`Specified i18n.localeDetection should be undefined or a boolean received ${localeDetectionType}.\nSee more info here: https://nextjs.org/docs/messages/invalid-i18n-config`), "__NEXT_ERROR_CODE", { + value: "E439", + enumerable: false, + configurable: true + }); + } + } + if (result.devIndicators !== false && ((_result_devIndicators = result.devIndicators) == null ? void 0 : _result_devIndicators.position)) { + const { position } = result.devIndicators; + const allowedValues = [ + 'top-left', + 'top-right', + 'bottom-left', + 'bottom-right' + ]; + if (!allowedValues.includes(position)) { + throw Object.defineProperty(new Error(`Invalid "devIndicator.position" provided, expected one of ${allowedValues.join(', ')}, received ${position}`), "__NEXT_ERROR_CODE", { + value: "E643", + enumerable: false, + configurable: true + }); + } + } + if (result.cacheLife) { + var _defaultConfig_cacheLife, _defaultConfig_experimental_staleTimes, _defaultConfig_experimental; + result.cacheLife = { + ..._configshared.defaultConfig.cacheLife, + ...result.cacheLife + }; + const defaultDefault = (_defaultConfig_cacheLife = _configshared.defaultConfig.cacheLife) == null ? void 0 : _defaultConfig_cacheLife['default']; + if (!defaultDefault || defaultDefault.revalidate === undefined || defaultDefault.expire === undefined || !((_defaultConfig_experimental = _configshared.defaultConfig.experimental) == null ? void 0 : (_defaultConfig_experimental_staleTimes = _defaultConfig_experimental.staleTimes) == null ? void 0 : _defaultConfig_experimental_staleTimes.static)) { + throw Object.defineProperty(new Error('No default cacheLife profile.'), "__NEXT_ERROR_CODE", { + value: "E350", + enumerable: false, + configurable: true + }); + } + const defaultCacheLifeProfile = result.cacheLife['default']; + if (!defaultCacheLifeProfile) { + result.cacheLife['default'] = defaultDefault; + } else { + if (defaultCacheLifeProfile.stale === undefined) { + var _result_experimental_staleTimes, _defaultConfig_experimental_staleTimes1, _defaultConfig_experimental1; + const staticStaleTime = (_result_experimental_staleTimes = result.experimental.staleTimes) == null ? void 0 : _result_experimental_staleTimes.static; + defaultCacheLifeProfile.stale = staticStaleTime ?? ((_defaultConfig_experimental1 = _configshared.defaultConfig.experimental) == null ? void 0 : (_defaultConfig_experimental_staleTimes1 = _defaultConfig_experimental1.staleTimes) == null ? void 0 : _defaultConfig_experimental_staleTimes1.static); + } + if (defaultCacheLifeProfile.revalidate === undefined) { + defaultCacheLifeProfile.revalidate = defaultDefault.revalidate; + } + if (defaultCacheLifeProfile.expire === undefined) { + defaultCacheLifeProfile.expire = result.expireTime ?? defaultDefault.expire; + } + } + } + if (result.cacheHandlers) { + const allowedHandlerNameRegex = /[a-z-]/; + if (typeof result.cacheHandlers !== 'object') { + throw Object.defineProperty(new Error(`Invalid "cacheHandlers" provided, expected an object e.g. { default: '/my-handler.js' }, received ${JSON.stringify(result.cacheHandlers)}`), "__NEXT_ERROR_CODE", { + value: "E901", + enumerable: false, + configurable: true + }); + } + const handlerKeys = Object.keys(result.cacheHandlers); + const invalidHandlerItems = []; + for (const key of handlerKeys){ + if (key === 'private') { + invalidHandlerItems.push({ + key, + reason: 'The cache handler for "use cache: private" cannot be customized.' + }); + } else if (!allowedHandlerNameRegex.test(key)) { + invalidHandlerItems.push({ + key, + reason: 'key must only use characters a-z and -' + }); + } else { + const handlerPath = result.cacheHandlers[key]; + if (handlerPath && !(0, _fs.existsSync)(handlerPath)) { + invalidHandlerItems.push({ + key, + reason: `cache handler path provided does not exist, received ${handlerPath}` + }); + } + } + if (invalidHandlerItems.length) { + throw Object.defineProperty(new Error(`Invalid handler fields configured for "cacheHandlers":\n${invalidHandlerItems.map((item)=>`${key}: ${item.reason}`).join('\n')}`), "__NEXT_ERROR_CODE", { + value: "E902", + enumerable: false, + configurable: true + }); + } + } + } + const userProvidedModularizeImports = result.modularizeImports; + // Unfortunately these packages end up re-exporting 10600 modules, for example: https://unpkg.com/browse/@mui/icons-material@5.11.16/esm/index.js. + // Leveraging modularizeImports tremendously reduces compile times for these. + result.modularizeImports = { + ...userProvidedModularizeImports || {}, + // This is intentionally added after the user-provided modularizeImports config. + '@mui/icons-material': { + transform: '@mui/icons-material/{{member}}' + }, + lodash: { + transform: 'lodash/{{member}}' + } + }; + const userProvidedOptimizePackageImports = ((_result_experimental4 = result.experimental) == null ? void 0 : _result_experimental4.optimizePackageImports) || []; + result.experimental.optimizePackageImports = [ + ...new Set([ + ...userProvidedOptimizePackageImports, + 'lucide-react', + 'date-fns', + 'lodash-es', + 'ramda', + 'antd', + 'react-bootstrap', + 'ahooks', + '@ant-design/icons', + '@headlessui/react', + '@headlessui-float/react', + '@heroicons/react/20/solid', + '@heroicons/react/24/solid', + '@heroicons/react/24/outline', + '@visx/visx', + '@tremor/react', + 'rxjs', + '@mui/material', + '@mui/icons-material', + 'recharts', + 'react-use', + 'effect', + '@effect/schema', + '@effect/platform', + '@effect/platform-node', + '@effect/platform-browser', + '@effect/platform-bun', + '@effect/sql', + '@effect/sql-mssql', + '@effect/sql-mysql2', + '@effect/sql-pg', + '@effect/sql-sqlite-node', + '@effect/sql-sqlite-bun', + '@effect/sql-sqlite-wasm', + '@effect/sql-sqlite-react-native', + '@effect/rpc', + '@effect/rpc-http', + '@effect/typeclass', + '@effect/experimental', + '@effect/opentelemetry', + '@material-ui/core', + '@material-ui/icons', + '@tabler/icons-react', + 'mui-core', + // We don't support wildcard imports for these configs, e.g. `react-icons/*` + // so we need to add them manually. + // In the future, we should consider automatically detecting packages that + // need to be optimized. + 'react-icons/ai', + 'react-icons/bi', + 'react-icons/bs', + 'react-icons/cg', + 'react-icons/ci', + 'react-icons/di', + 'react-icons/fa', + 'react-icons/fa6', + 'react-icons/fc', + 'react-icons/fi', + 'react-icons/gi', + 'react-icons/go', + 'react-icons/gr', + 'react-icons/hi', + 'react-icons/hi2', + 'react-icons/im', + 'react-icons/io', + 'react-icons/io5', + 'react-icons/lia', + 'react-icons/lib', + 'react-icons/lu', + 'react-icons/md', + 'react-icons/pi', + 'react-icons/ri', + 'react-icons/rx', + 'react-icons/si', + 'react-icons/sl', + 'react-icons/tb', + 'react-icons/tfi', + 'react-icons/ti', + 'react-icons/vsc', + 'react-icons/wi' + ]) + ]; + if (!result.htmlLimitedBots) { + // @ts-expect-error: override the htmlLimitedBots with default string, type covert: RegExp -> string + result.htmlLimitedBots = _isbot.HTML_LIMITED_BOT_UA_RE_STRING; + } + if (typeof result.experimental.mcpServer === 'undefined' && process.env.__NEXT_EXPERIMENTAL_MCP_SERVER === 'true') { + result.experimental.mcpServer = true; + } + if (result.cacheComponents) { + // TODO: remove once we've finished migrating internally to cacheComponents. + result.experimental.ppr = true; + // Prerender sourcemaps are enabled by default when using cacheComponents, unless explicitly disabled. + if (result.enablePrerenderSourceMaps === undefined) { + result.enablePrerenderSourceMaps = true; + } + } + // "use cache" was originally implicitly enabled with the cacheComponents flag, so + // we transfer the value for cacheComponents to the explicit useCache flag to ensure + // backwards compatibility. + if (result.experimental.useCache === undefined) { + result.experimental.useCache = result.cacheComponents; + } + // Store the distDirRoot in the config before it is modified for development mode + ; + result.distDirRoot = result.distDir; + if (phase === _constants.PHASE_DEVELOPMENT_SERVER) { + result.distDir = (0, _path.join)(result.distDir, 'dev'); + } + return result; +} +async function applyModifyConfig(config, phase, silent) { + // we always call modify config and phase can be used to only + // modify for specific times + if (config.adapterPath) { + const adapterMod = (0, _interopdefault.interopDefault)(await import((0, _url.pathToFileURL)(require.resolve(config.adapterPath)).href)); + if (typeof adapterMod.modifyConfig === 'function') { + if (!silent) { + _log.info(`Applying modifyConfig from ${adapterMod.name}`); + } + config = await adapterMod.modifyConfig(config, { + phase, + nextVersion: "16.2.6" + }); + } + } + return config; +} +// Cache config with keys to handle multiple configurations (e.g., multi-zone) +const configCache = new Map(); +// Generate cache key based on parameters that affect config output +// We need a unique key for cache because there can be multiple values +function getCacheKey(phase, dir, customConfig, reactProductionProfiling, debugPrerender, pid) { + // The next.config.js is unique per project, so we can use the dir as the major key + // to generate the unique config key. Include PID to invalidate on server restart. + const keyData = JSON.stringify({ + dir, + phase, + hasCustomConfig: Boolean(customConfig), + reactProductionProfiling: Boolean(reactProductionProfiling), + debugPrerender: Boolean(debugPrerender), + pid: pid || 0 + }); + return (0, _hash.djb2Hash)(keyData).toString(36); +} +async function loadConfig(phase, dir, { customConfig, rawConfig, silent = true, reportExperimentalFeatures, reactProductionProfiling, debugPrerender, bundler } = {}) { + // Generate cache key based on parameters that affect config output + // Include process.pid to invalidate cache on server restart + const cacheKey = getCacheKey(phase, dir, customConfig, reactProductionProfiling, debugPrerender, process.pid); + // Check if we have a cached result + const cachedResult = configCache.get(cacheKey); + if (cachedResult) { + // Call the experimental features callback if provided + if (reportExperimentalFeatures) { + reportExperimentalFeatures(cachedResult.configuredExperimentalFeatures); + } + // Return raw config if requested and available + if (rawConfig && cachedResult.rawConfig) { + return cachedResult.rawConfig; + } + return cachedResult.config; + } else { + // Reset next.config errors before loading config + // This happens on every config load to ensure fresh validation + _nextinstanceerrorstate.NextInstanceErrorState.nextConfig = []; + } + // Original implementation continues below... + if (!process.env.__NEXT_PRIVATE_RENDER_WORKER) { + try { + (0, _configutils.loadWebpackHook)(); + } catch (err) { + // this can fail in standalone mode as the files + // aren't traced/included + if (!process.env.__NEXT_PRIVATE_STANDALONE_CONFIG) { + throw err; + } + } + } + if (process.env.__NEXT_PRIVATE_STANDALONE_CONFIG) { + // we don't apply assignDefaults or modifyConfig here as it + // has already been applied + const standaloneConfig = JSON.parse(process.env.__NEXT_PRIVATE_STANDALONE_CONFIG); + // Cache the standalone config + configCache.set(cacheKey, { + config: standaloneConfig, + rawConfig: standaloneConfig, + configuredExperimentalFeatures: [] + }); + return standaloneConfig; + } + const curLog = silent ? { + warn: ()=>{}, + info: ()=>{}, + error: ()=>{} + } : _log; + (0, _env.loadEnvConfig)(dir, phase === _constants.PHASE_DEVELOPMENT_SERVER, curLog); + let configFileName = 'next.config.js'; + const configuredExperimentalFeatures = []; + if (customConfig) { + // Check deprecation warnings on the custom config before merging with defaults + checkDeprecations(customConfig, configFileName, silent, dir); + const config = await applyModifyConfig(assignDefaultsAndValidate(dir, { + configOrigin: 'server', + configFileName, + ...customConfig + }, silent, phase), phase, silent); + // Cache the custom config result + configCache.set(cacheKey, { + config, + rawConfig: customConfig, + configuredExperimentalFeatures + }); + reportExperimentalFeatures == null ? void 0 : reportExperimentalFeatures(configuredExperimentalFeatures); + return config; + } + const path = await (0, _findup.default)(_constants.CONFIG_FILES, { + cwd: dir + }); + // If config file was found + if (path == null ? void 0 : path.length) { + var _userConfig_experimental, _userConfig_experimental1, _userConfig_experimental2, _userConfig_experimental3; + configFileName = (0, _path.basename)(path); + let userConfigModule; + try { + const envBefore = Object.assign({}, process.env); + // `import()` expects url-encoded strings, so the path must be properly + // escaped and (especially on Windows) absolute paths must pe prefixed + // with the `file://` protocol + if (process.env.__NEXT_TEST_MODE === 'jest') { + // dynamic import does not currently work inside of vm which + // jest relies on so we fall back to require for this case + // https://github.com/nodejs/node/issues/35889 + userConfigModule = require(path); + } else if (configFileName === 'next.config.ts') { + userConfigModule = await (0, _transpileconfig.transpileConfig)({ + nextConfigPath: path, + dir + }); + } else { + userConfigModule = await import((0, _url.pathToFileURL)(path).href); + } + const newEnv = {}; + for (const key of Object.keys(process.env)){ + if (envBefore[key] !== process.env[key]) { + newEnv[key] = process.env[key]; + } + } + (0, _env.updateInitialEnv)(newEnv); + if (rawConfig) { + // Cache the raw config + configCache.set(cacheKey, { + config: userConfigModule, + rawConfig: userConfigModule, + configuredExperimentalFeatures + }); + reportExperimentalFeatures == null ? void 0 : reportExperimentalFeatures(configuredExperimentalFeatures); + return userConfigModule; + } + } catch (err) { + // Capture the error for MCP tool reporting + _nextinstanceerrorstate.NextInstanceErrorState.nextConfig.push(err); + // TODO: Modify docs to add cases of failing next.config.ts transformation + curLog.error(`Failed to load ${configFileName}, see more info here https://nextjs.org/docs/messages/next-config-error`); + throw err; + } + const loadedConfig = Object.freeze(await (0, _configshared.normalizeConfig)(phase, (0, _interopdefault.interopDefault)(userConfigModule))); + if (loadedConfig.experimental) { + for (const name of Object.keys(loadedConfig.experimental)){ + const value = loadedConfig.experimental[name]; + if (name.startsWith('turbopack') && !process.env.TURBOPACK) { + continue; + } + addConfiguredExperimentalFeature(configuredExperimentalFeatures, name, value); + } + } + // Clone a new userConfig each time to avoid mutating the original + const userConfig = cloneObject(loadedConfig); + // Check deprecation warnings on the actual user config before merging with defaults + checkDeprecations(userConfig, configFileName, silent, dir); + // Always validate the config against schema in non minimal mode + if (!process.env.NEXT_MINIMAL && !silent) { + await validateConfigSchema(userConfig, configFileName, curLog.warn, (messages)=>{ + // Capture validation messages for MCP error reporting + if (messages.length > 0) { + const fullMessage = messages.join('\n'); + _nextinstanceerrorstate.NextInstanceErrorState.nextConfig.push(Object.defineProperty(new Error(fullMessage), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + })); + } + }); + } + if (userConfig.target && userConfig.target !== 'server') { + throw Object.defineProperty(new Error(`The "target" property is no longer supported in ${configFileName}.\n` + 'See more info here https://nextjs.org/docs/messages/deprecated-target-config'), "__NEXT_ERROR_CODE", { + value: "E1029", + enumerable: false, + configurable: true + }); + } + if (phase === _constants.PHASE_PRODUCTION_BUILD && bundler !== _bundler.Bundler.Turbopack && ((_userConfig_experimental = userConfig.experimental) == null ? void 0 : _userConfig_experimental.immutableAssetToken)) { + // Silently ignore that flag for Webpack/Rspack since the server code assumes that all files + // in `static/chunks` are always immutable without checking the manifest. + userConfig.experimental.immutableAssetToken = undefined; + } + if (reactProductionProfiling) { + userConfig.reactProductionProfiling = reactProductionProfiling; + } + if (((_userConfig_experimental1 = userConfig.experimental) == null ? void 0 : _userConfig_experimental1.lightningCssFeatures) && !((_userConfig_experimental2 = userConfig.experimental) == null ? void 0 : _userConfig_experimental2.useLightningcss) && bundler !== _bundler.Bundler.Turbopack) { + curLog.warn(`experimental.lightningCssFeatures is set but experimental.useLightningcss is not enabled. ` + `The lightningCssFeatures option has no effect without useLightningcss.`); + } + if ((_userConfig_experimental3 = userConfig.experimental) == null ? void 0 : _userConfig_experimental3.useLightningcss) { + var _css, _this, _userConfig_experimental4; + const { loadBindings } = require('../build/swc'); + const isLightningSupported = (_this = await loadBindings((_userConfig_experimental4 = userConfig.experimental) == null ? void 0 : _userConfig_experimental4.useWasmBinary)) == null ? void 0 : (_css = _this.css) == null ? void 0 : _css.lightning; + if (!isLightningSupported) { + curLog.warn(`experimental.useLightningcss is set, but the setting is disabled because next-swc/wasm does not support it yet.`); + userConfig.experimental.useLightningcss = false; + } + } + // serialize the regex config into string + if ((userConfig == null ? void 0 : userConfig.htmlLimitedBots) instanceof RegExp) { + // @ts-expect-error: override the htmlLimitedBots with default string, type covert: RegExp -> string + userConfig.htmlLimitedBots = userConfig.htmlLimitedBots.source; + } + enforceExperimentalFeatures(userConfig, { + isDefaultConfig: false, + configuredExperimentalFeatures, + debugPrerender, + phase + }); + const completeConfig = assignDefaultsAndValidate(dir, { + configOrigin: (0, _path.relative)(dir, path), + configFile: path, + configFileName, + ...userConfig + }, silent, phase); + const finalConfig = await applyModifyConfig(completeConfig, phase, silent); + // Cache the final result + configCache.set(cacheKey, { + config: finalConfig, + rawConfig: userConfigModule, + configuredExperimentalFeatures + }); + if (reportExperimentalFeatures) { + reportExperimentalFeatures(configuredExperimentalFeatures); + } + return finalConfig; + } else { + const configBaseName = (0, _path.basename)(_constants.CONFIG_FILES[0], (0, _path.extname)(_constants.CONFIG_FILES[0])); + const unsupportedConfig = _findup.default.sync([ + `${configBaseName}.cjs`, + `${configBaseName}.cts`, + // TODO: Remove `as any` once we bump @types/node to v22.10.0+ + ...process.features.typescript ? [] : [ + 'next.config.mts' + ], + `${configBaseName}.json`, + `${configBaseName}.jsx`, + `${configBaseName}.tsx` + ], { + cwd: dir + }); + if (unsupportedConfig == null ? void 0 : unsupportedConfig.length) { + throw Object.defineProperty(new Error(`Configuring Next.js via '${(0, _path.basename)(unsupportedConfig)}' is not supported. Please replace the file with 'next.config.js', 'next.config.mjs', or 'next.config.ts'.`), "__NEXT_ERROR_CODE", { + value: "E203", + enumerable: false, + configurable: true + }); + } + } + const clonedDefaultConfig = cloneObject(_configshared.defaultConfig); + enforceExperimentalFeatures(clonedDefaultConfig, { + isDefaultConfig: true, + configuredExperimentalFeatures, + debugPrerender, + phase + }); + // always call assignDefaults to ensure settings like + // reactRoot can be updated correctly even with no next.config.js + const completeConfig = assignDefaultsAndValidate(dir, { + ...clonedDefaultConfig, + configFileName + }, silent, phase); + (0, _setuphttpagentenv.setHttpClientAndAgentOptions)(completeConfig); + const finalConfig = await applyModifyConfig(completeConfig, phase, silent); + // Cache the default config result + configCache.set(cacheKey, { + config: finalConfig, + rawConfig: clonedDefaultConfig, + configuredExperimentalFeatures + }); + if (reportExperimentalFeatures) { + reportExperimentalFeatures(configuredExperimentalFeatures); + } + return finalConfig; +} +function enforceExperimentalFeatures(config, options) { + const { configuredExperimentalFeatures, debugPrerender, isDefaultConfig, phase } = options; + config.experimental ??= {}; + if (debugPrerender && (phase === _constants.PHASE_PRODUCTION_BUILD || phase === _constants.PHASE_EXPORT)) { + // TODO: This is not an experimental feature, but should be enabled alongside other prerender debugging features. + config.enablePrerenderSourceMaps = true; + setExperimentalFeatureForDebugPrerender(config.experimental, 'serverSourceMaps', true, configuredExperimentalFeatures); + setExperimentalFeatureForDebugPrerender(config.experimental, process.env.TURBOPACK ? 'turbopackMinify' : 'serverMinification', false, configuredExperimentalFeatures); + setExperimentalFeatureForDebugPrerender(config.experimental, 'prerenderEarlyExit', false, configuredExperimentalFeatures); + setExperimentalFeatureForDebugPrerender(config.experimental, 'allowDevelopmentBuild', true, configuredExperimentalFeatures); + } + // TODO: Remove this once we've made Cache Components the default. + if (process.env.__NEXT_CACHE_COMPONENTS === 'true' && // We do respect an explicit value in the user config. + (config.cacheComponents === undefined || isDefaultConfig && !config.cacheComponents)) { + config.cacheComponents = true; + } + // TODO: Remove this once cachedNavigations is the default. + if (process.env.__NEXT_EXPERIMENTAL_CACHED_NAVIGATIONS === 'true' && // We do respect an explicit value in the user config. + (config.experimental.cachedNavigations === undefined || isDefaultConfig && !config.experimental.cachedNavigations)) { + config.experimental.cachedNavigations = true; + if (configuredExperimentalFeatures) { + addConfiguredExperimentalFeature(configuredExperimentalFeatures, 'cachedNavigations', true, 'enabled by `__NEXT_EXPERIMENTAL_CACHED_NAVIGATIONS`'); + } + } + // TODO: Remove this once appNewScrollHandler is the default. + if (process.env.__NEXT_EXPERIMENTAL_APP_NEW_SCROLL_HANDLER === 'true' && // We do respect an explicit value in the user config. + (config.experimental.appNewScrollHandler === undefined || isDefaultConfig && !config.experimental.appNewScrollHandler)) { + config.experimental.appNewScrollHandler = true; + if (configuredExperimentalFeatures) { + addConfiguredExperimentalFeature(configuredExperimentalFeatures, 'appNewScrollHandler', true, 'enabled by `__NEXT_EXPERIMENTAL_APP_NEW_SCROLL_HANDLER`'); + } + } + // TODO: Remove this once strictRouteTypes is the default. + if (process.env.__NEXT_EXPERIMENTAL_STRICT_ROUTE_TYPES === 'true' && // We do respect an explicit value in the user config. + (config.experimental.strictRouteTypes === undefined || isDefaultConfig && !config.experimental.strictRouteTypes)) { + config.experimental.strictRouteTypes = true; + if (configuredExperimentalFeatures) { + addConfiguredExperimentalFeature(configuredExperimentalFeatures, 'strictRouteTypes', true, 'enabled by `__NEXT_EXPERIMENTAL_STRICT_ROUTE_TYPES`'); + } + } + if (process.env.__NEXT_EXPERIMENTAL_TRANSITION_INDICATOR === 'true' && // We do respect an explicit value in the user config. + (config.experimental.transitionIndicator === undefined || isDefaultConfig && !config.experimental.transitionIndicator)) { + config.experimental.transitionIndicator = true; + if (configuredExperimentalFeatures) { + addConfiguredExperimentalFeature(configuredExperimentalFeatures, 'transitionIndicator', true, 'enabled by `__NEXT_EXPERIMENTAL_TRANSITION_INDICATOR`'); + } + } + if (process.env.__NEXT_ENABLE_REACT_COMPILER === 'true' && // We do respect an explicit value in the user config. + (config.reactCompiler === undefined || isDefaultConfig && !config.reactCompiler)) { + config.reactCompiler = true; + // TODO: Report if we enable non-experimental features via env + } +} +function addConfiguredExperimentalFeature(configuredExperimentalFeatures, key, value, reason) { + if (value !== _configshared.defaultConfig.experimental[key]) { + configuredExperimentalFeatures.push({ + key, + value, + reason + }); + } +} +function setExperimentalFeatureForDebugPrerender(experimentalConfig, key, value, configuredExperimentalFeatures) { + if (experimentalConfig[key] !== value) { + experimentalConfig[key] = value; + if (configuredExperimentalFeatures) { + const action = value === true ? 'enabled' : value === false ? 'disabled' : 'set'; + const reason = `${action} by \`--debug-prerender\``; + addConfiguredExperimentalFeature(configuredExperimentalFeatures, key, value, reason); + } + } +} +function cloneObject(obj) { + // Primitives & null + if (obj === null || typeof obj !== 'object') { + return obj; + } + // RegExp → clone via constructor + if (obj instanceof RegExp) { + return new RegExp(obj.source, obj.flags); + } + // Function → just reuse the function reference + if (typeof obj === 'function') { + return obj; + } + // Arrays → map each element + if (Array.isArray(obj)) { + return obj.map(cloneObject); + } + // Detect non‑plain objects (class instances) + const proto = Object.getPrototypeOf(obj); + const isPlainObject = proto === Object.prototype || proto === null; + // If it's not a plain object, just return the original + if (!isPlainObject) { + return obj; + } + // Plain object → create a new object with the same prototype + // and copy all properties, cloning data properties and keeping + // accessor properties (getters/setters) as‑is. + const result = Object.create(proto); + for (const key of Reflect.ownKeys(obj)){ + const descriptor = Object.getOwnPropertyDescriptor(obj, key); + if (descriptor && (descriptor.get || descriptor.set)) { + // Accessor property → copy descriptor as‑is (get/set functions) + Object.defineProperty(result, key, descriptor); + } else { + // Data property → clone the value + result[key] = cloneObject(obj[key]); + } + } + return result; +} +async function validateConfigSchema(userConfig, configFileName, warn, onValidationMessages) { + // We only validate the config against schema in non minimal mode + const { configSchema } = require('./config-schema'); + const state = configSchema.safeParse(userConfig); + if (!state.success) { + const [warnings, fatalErrors] = normalizeNextConfigZodErrors(state.error); + const hasFatalErrors = fatalErrors.length > 0; + // Group warnings first + if (warnings.length > 0) { + const warningMessages = [ + `Invalid ${configFileName} options detected: ` + ]; + for (const error of warnings){ + warningMessages.push(` ${error.split('\n').join('\n ')}`); + } + warningMessages.push('See more info here: https://nextjs.org/docs/messages/invalid-next-config'); + // Call the callback with validation messages if provided + if (onValidationMessages) { + onValidationMessages(warningMessages); + } + for (const message of warningMessages){ + warn(message); + } + } + // Then throw hard errors + if (hasFatalErrors) { + await (0, _flushtelemetry.flushTelemetry)(); + const errorMessages = [ + `Fatal next config errors found in ${configFileName} that must be fixed:` + ]; + for (const error of fatalErrors){ + errorMessages.push(` ${error.split('\n').join('\n ')}`); + } + errorMessages.push('These configuration options are required or have been migrated. Please update your configuration.'); + errorMessages.push('See more info here: https://nextjs.org/docs/messages/invalid-next-config'); + // Call the callback with validation messages if provided + if (onValidationMessages) { + onValidationMessages(errorMessages); + } + const fullErrorMessage = errorMessages.join('\n'); + throw Object.defineProperty(new Error(fullErrorMessage), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + } +} + +//# sourceMappingURL=config.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/create-deduped-by-callsite-server-error-logger.js b/build/node_modules/next/dist/server/create-deduped-by-callsite-server-error-logger.js new file mode 100644 index 0000000..e252485 --- /dev/null +++ b/build/node_modules/next/dist/server/create-deduped-by-callsite-server-error-logger.js @@ -0,0 +1,96 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "createDedupedByCallsiteServerErrorLoggerDev", { + enumerable: true, + get: function() { + return createDedupedByCallsiteServerErrorLoggerDev; + } +}); +const _react = /*#__PURE__*/ _interop_require_wildcard(require("react")); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +const errorRef = { + current: null +}; +// React.cache is currently only available in canary/experimental React channels. +const cache = typeof _react.cache === 'function' ? _react.cache : (fn)=>fn; +// When Cache Components is enabled, we record these as errors so that they +// are captured by the dev overlay as it's more critical to fix these +// when enabled. +const logErrorOrWarn = process.env.__NEXT_CACHE_COMPONENTS ? console.error : console.warn; +// We don't want to dedupe across requests. +// The developer might've just attempted to fix the warning so we should warn again if it still happens. +const flushCurrentErrorIfNew = cache(// eslint-disable-next-line @typescript-eslint/no-unused-vars -- cache key +(key)=>{ + try { + logErrorOrWarn(errorRef.current); + } finally{ + errorRef.current = null; + } +}); +function createDedupedByCallsiteServerErrorLoggerDev(getMessage) { + return function logDedupedError(...args) { + const message = getMessage(...args); + if (process.env.NODE_ENV !== 'production') { + var _stack; + const callStackFrames = (_stack = new Error().stack) == null ? void 0 : _stack.split('\n'); + if (callStackFrames === undefined || callStackFrames.length < 4) { + logErrorOrWarn(message); + } else { + // Error: + // logDedupedError + // asyncApiBeingAccessedSynchronously + // + // TODO: This breaks if sourcemaps with ignore lists are enabled. + const key = callStackFrames[4]; + errorRef.current = message; + flushCurrentErrorIfNew(key); + } + } else { + logErrorOrWarn(message); + } + }; +} + +//# sourceMappingURL=create-deduped-by-callsite-server-error-logger.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/crypto-utils.js b/build/node_modules/next/dist/server/crypto-utils.js new file mode 100644 index 0000000..57e234f --- /dev/null +++ b/build/node_modules/next/dist/server/crypto-utils.js @@ -0,0 +1,70 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + decryptWithSecret: null, + encryptWithSecret: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + decryptWithSecret: function() { + return decryptWithSecret; + }, + encryptWithSecret: function() { + return encryptWithSecret; + } +}); +const _crypto = /*#__PURE__*/ _interop_require_default(require("crypto")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +// Background: +// https://security.stackexchange.com/questions/184305/why-would-i-ever-use-aes-256-cbc-if-aes-256-gcm-is-more-secure +const CIPHER_ALGORITHM = `aes-256-gcm`, CIPHER_KEY_LENGTH = 32, CIPHER_IV_LENGTH = 16, CIPHER_TAG_LENGTH = 16, CIPHER_SALT_LENGTH = 64; +const PBKDF2_ITERATIONS = 100000 // https://support.1password.com/pbkdf2/ +; +function encryptWithSecret(secret, data) { + const iv = _crypto.default.randomBytes(CIPHER_IV_LENGTH); + const salt = _crypto.default.randomBytes(CIPHER_SALT_LENGTH); + // https://nodejs.org/api/crypto.html#crypto_crypto_pbkdf2sync_password_salt_iterations_keylen_digest + const key = _crypto.default.pbkdf2Sync(secret, salt, PBKDF2_ITERATIONS, CIPHER_KEY_LENGTH, `sha512`); + const cipher = _crypto.default.createCipheriv(CIPHER_ALGORITHM, key, iv); + const encrypted = Buffer.concat([ + cipher.update(data, `utf8`), + cipher.final() + ]); + // https://nodejs.org/api/crypto.html#crypto_cipher_getauthtag + const tag = cipher.getAuthTag(); + return Buffer.concat([ + // Data as required by: + // Salt for Key: https://nodejs.org/api/crypto.html#crypto_crypto_pbkdf2sync_password_salt_iterations_keylen_digest + // IV: https://nodejs.org/api/crypto.html#crypto_class_decipher + // Tag: https://nodejs.org/api/crypto.html#crypto_decipher_setauthtag_buffer + salt, + iv, + tag, + encrypted + ]).toString(`hex`); +} +function decryptWithSecret(secret, encryptedData) { + const buffer = Buffer.from(encryptedData, `hex`); + const salt = buffer.slice(0, CIPHER_SALT_LENGTH); + const iv = buffer.slice(CIPHER_SALT_LENGTH, CIPHER_SALT_LENGTH + CIPHER_IV_LENGTH); + const tag = buffer.slice(CIPHER_SALT_LENGTH + CIPHER_IV_LENGTH, CIPHER_SALT_LENGTH + CIPHER_IV_LENGTH + CIPHER_TAG_LENGTH); + const encrypted = buffer.slice(CIPHER_SALT_LENGTH + CIPHER_IV_LENGTH + CIPHER_TAG_LENGTH); + // https://nodejs.org/api/crypto.html#crypto_crypto_pbkdf2sync_password_salt_iterations_keylen_digest + const key = _crypto.default.pbkdf2Sync(secret, salt, PBKDF2_ITERATIONS, CIPHER_KEY_LENGTH, `sha512`); + const decipher = _crypto.default.createDecipheriv(CIPHER_ALGORITHM, key, iv); + decipher.setAuthTag(tag); + return decipher.update(encrypted) + decipher.final(`utf8`); +} + +//# sourceMappingURL=crypto-utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/dev/browser-logs/file-logger.js b/build/node_modules/next/dist/server/dev/browser-logs/file-logger.js new file mode 100644 index 0000000..1a2a2ce --- /dev/null +++ b/build/node_modules/next/dist/server/dev/browser-logs/file-logger.js @@ -0,0 +1,186 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + FileLogger: null, + getFileLogger: null, + test__resetFileLogger: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + FileLogger: function() { + return FileLogger; + }, + getFileLogger: function() { + return getFileLogger; + }, + test__resetFileLogger: function() { + return test__resetFileLogger; + } +}); +const _fs = /*#__PURE__*/ _interop_require_default(require("fs")); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +class FileLogger { + initialize(distDir, mcpServerEnabled) { + this.logFilePath = _path.default.join(distDir, 'logs', `next-development.log`); + this.mcpServerEnabled = mcpServerEnabled; + if (this.isInitialized) { + return; + } + // Only initialize if mcpServer is enabled + if (!this.mcpServerEnabled) { + return; + } + try { + // Clean up the log file on each initialization + // ensure the directory exists + _fs.default.mkdirSync(_path.default.dirname(this.logFilePath), { + recursive: true + }); + _fs.default.writeFileSync(this.logFilePath, ''); + this.isInitialized = true; + } catch (error) { + console.error(error); + } + } + formatTimestamp() { + // Use performance.now() instead of Date.now() for avoid sync IO of cache components + const now = performance.now(); + const hours = Math.floor(now / 3600000).toString().padStart(2, '0'); + const minutes = Math.floor(now % 3600000 / 60000).toString().padStart(2, '0'); + const seconds = Math.floor(now % 60000 / 1000).toString().padStart(2, '0'); + const milliseconds = Math.floor(now % 1000).toString().padStart(3, '0'); + return `${hours}:${minutes}:${seconds}.${milliseconds}`; + } + formatLogEntry(entry) { + const { timestamp, source, level, message } = entry; + return JSON.stringify({ + timestamp, + source, + level, + message + }) + '\n'; + } + scheduleFlush() { + // Debounce the flush + if (this.flushTimer) { + clearTimeout(this.flushTimer); + this.flushTimer = null; + } + // Delay the log flush to ensure more logs can be batched together asynchronously + this.flushTimer = setTimeout(()=>{ + this.flush(); + }, 100); + } + getLogQueue() { + return this.logQueue; + } + flush() { + if (this.logQueue.length === 0) { + return; + } + // Only flush to disk if mcpServer is enabled + if (!this.mcpServerEnabled) { + this.logQueue.length = 0 // Clear the queue without GC overhead + ; + this.flushTimer = null; + return; + } + try { + // Ensure the directory exists before writing + const logDir = _path.default.dirname(this.logFilePath); + if (!_fs.default.existsSync(logDir)) { + _fs.default.mkdirSync(logDir, { + recursive: true + }); + } + const logsToWrite = this.logQueue.join(''); + // Writing logs to files synchronously to ensure they're written before returning + _fs.default.appendFileSync(this.logFilePath, logsToWrite); + this.logQueue.length = 0 // Clear the queue without GC overhead + ; + } catch (error) { + console.error('Failed to flush logs to file:', error); + } finally{ + this.flushTimer = null; + } + } + enqueueLog(formattedEntry) { + this.logQueue.push(formattedEntry); + // Cancel existing timer and start a new one to ensure all logs are flushed together + if (this.flushTimer) { + clearTimeout(this.flushTimer); + this.flushTimer = null; + } + this.scheduleFlush(); + } + log(source, level, message) { + // Don't log anything if mcpServer is disabled + if (!this.mcpServerEnabled) { + return; + } + if (!this.isInitialized) { + return; + } + const logEntry = { + timestamp: this.formatTimestamp(), + source, + level, + message + }; + const formattedEntry = this.formatLogEntry(logEntry); + this.enqueueLog(formattedEntry); + } + logServer(level, message) { + this.log('Server', level, message); + } + logBrowser(level, message) { + this.log('Browser', level, message); + } + // Force flush all queued logs immediately + forceFlush() { + if (this.flushTimer) { + clearTimeout(this.flushTimer); + this.flushTimer = null; + } + this.flush(); + } + // Cleanup method to flush logs on process exit + destroy() { + this.forceFlush(); + } + constructor(){ + this.logFilePath = ''; + this.isInitialized = false; + this.logQueue = []; + this.flushTimer = null; + this.mcpServerEnabled = false; + } +} +// Singleton instance +let fileLogger = null; +function getFileLogger() { + if (!fileLogger || process.env.NODE_ENV === 'test') { + fileLogger = new FileLogger(); + } + return fileLogger; +} +function test__resetFileLogger() { + if (fileLogger) { + fileLogger.destroy(); + } + fileLogger = null; +} + +//# sourceMappingURL=file-logger.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/dev/browser-logs/receive-logs.js b/build/node_modules/next/dist/server/dev/browser-logs/receive-logs.js new file mode 100644 index 0000000..5a4e22c --- /dev/null +++ b/build/node_modules/next/dist/server/dev/browser-logs/receive-logs.js @@ -0,0 +1,558 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + handleClientFileLogs: null, + handleLog: null, + receiveBrowserLogsTurbopack: null, + receiveBrowserLogsWebpack: null, + restoreUndefined: null, + stripFormatSpecifiers: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + handleClientFileLogs: function() { + return handleClientFileLogs; + }, + handleLog: function() { + return handleLog; + }, + receiveBrowserLogsTurbopack: function() { + return receiveBrowserLogsTurbopack; + }, + receiveBrowserLogsWebpack: function() { + return receiveBrowserLogsWebpack; + }, + restoreUndefined: function() { + return restoreUndefined; + }, + stripFormatSpecifiers: function() { + return stripFormatSpecifiers; + } +}); +const _picocolors = require("../../../lib/picocolors"); +const _util = /*#__PURE__*/ _interop_require_default(require("util")); +const _sourcemap = require("./source-map"); +const _forwardlogsshared = require("../../../next-devtools/shared/forward-logs-shared"); +const _console = require("../../../client/lib/console"); +const _filelogger = require("./file-logger"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function restoreUndefined(x) { + if (x === _forwardlogsshared.UNDEFINED_MARKER) return undefined; + if (Array.isArray(x)) return x.map(restoreUndefined); + if (x && typeof x === 'object') { + for(let k in x){ + x[k] = restoreUndefined(x[k]); + } + } + return x; +} +function cleanConsoleArgsForFileLogging(args) { + /** + * Use formatConsoleArgs to strip out background and color format specifiers + * and keep only the original string content for file logging + */ try { + return (0, _console.formatConsoleArgs)(args); + } catch { + // Fallback to simple string conversion if formatting fails + return args.map((arg)=>typeof arg === 'string' ? arg : _util.default.inspect(arg, { + depth: 2 + })).join(' '); + } +} +const methods = [ + 'log', + 'info', + 'warn', + 'debug', + 'table', + 'error', + 'assert', + 'dir', + 'dirxml', + 'group', + 'groupCollapsed', + 'groupEnd' +]; +const methodsToSkipInspect = new Set([ + 'table', + 'dir', + 'dirxml', + 'group', + 'groupCollapsed', + 'groupEnd' +]); +// we aren't overriding console, we're just making a (slightly convoluted) helper for replaying user console methods +const forwardConsole = { + ...console, + ...Object.fromEntries(methods.map((method)=>[ + method, + (...args)=>console[method](...args.map((arg)=>methodsToSkipInspect.has(method) || typeof arg !== 'object' || arg === null ? arg : _util.default.inspect(arg, { + depth: Infinity, + colors: true + }))) + ])) +}; +async function deserializeArgData(arg) { + try { + // we want undefined to be represented as it would be in the browser from the user's perspective (otherwise it would be stripped away/shown as null) + if (arg === _forwardlogsshared.UNDEFINED_MARKER) { + return restoreUndefined(arg); + } + return restoreUndefined(JSON.parse(arg)); + } catch { + return arg; + } +} +const colorError = (mapped, config)=>{ + const colorFn = (config == null ? void 0 : config.applyColor) === undefined || config.applyColor ? _picocolors.red : (x)=>x; + switch(mapped.kind){ + case 'mapped-stack': + case 'stack': + { + return ((config == null ? void 0 : config.prefix) ? colorFn(config == null ? void 0 : config.prefix) : '') + `\n${colorFn(mapped.stack)}`; + } + case 'with-frame-code': + { + return ((config == null ? void 0 : config.prefix) ? colorFn(config == null ? void 0 : config.prefix) : '') + `\n${colorFn(mapped.stack)}\n${mapped.frameCode}`; + } + // a more sophisticated version of this allows the user to config if they want ignored frames (but we need to be sure to source map them) + case 'all-ignored': + { + return (config == null ? void 0 : config.prefix) ? colorFn(config == null ? void 0 : config.prefix) : ''; + } + default: + {} + } + mapped; +}; +function processConsoleFormatStrings(args) { + /** + * this handles the case formatting is applied to the console log + * otherwise we will see the format specifier directly in the terminal output + */ if (args.length > 0 && typeof args[0] === 'string') { + const formatString = args[0]; + if (formatString.includes('%s') || formatString.includes('%d') || formatString.includes('%i') || formatString.includes('%f') || formatString.includes('%o') || formatString.includes('%O') || formatString.includes('%c')) { + try { + const formatted = _util.default.format(...args); + return [ + formatted + ]; + } catch { + return args; + } + } + } + return args; +} +function stripFormatSpecifiers(args) { + if (args.length === 0 || typeof args[0] !== 'string') return args; + const fmtIn = String(args[0]); + const rest = args.slice(1); + if (!fmtIn.includes('%')) return args; + let fmtOut = ''; + let argPtr = 0; + for(let i = 0; i < fmtIn.length; i++){ + if (fmtIn[i] !== '%') { + fmtOut += fmtIn[i]; + continue; + } + if (fmtIn[i + 1] === '%') { + fmtOut += '%'; + i++; + continue; + } + const token = fmtIn[++i]; + if (!token) { + fmtOut += '%'; + continue; + } + if ('csdifoOj'.includes(token) || token === 'O') { + if (argPtr < rest.length) { + if (token === 'c') { + argPtr++; + } else if (token === 'o' || token === 'O' || token === 'j') { + const obj = rest[argPtr++]; + fmtOut += _util.default.inspect(obj, { + depth: 2, + colors: false + }); + } else { + // string(...) is safe for remaining specifiers + fmtOut += String(rest[argPtr++]); + } + } + continue; + } + fmtOut += '%' + token; + } + const result = [ + fmtOut + ]; + if (argPtr < rest.length) { + result.push(...rest.slice(argPtr)); + } + return result; +} +async function prepareFormattedErrorArgs(entry, ctx, distDir) { + const mapped = await (0, _sourcemap.getSourceMappedStackFrames)(entry.stack, ctx, distDir); + return [ + colorError(mapped, { + prefix: entry.prefix + }) + ]; +} +async function prepareConsoleArgs(entry, ctx, distDir) { + const deserialized = await Promise.all(entry.args.map(async (arg)=>{ + if (arg.kind === 'arg') { + const data = await deserializeArgData(arg.data); + if (entry.method === 'warn' && typeof data === 'string') { + return (0, _picocolors.yellow)(data); + } + return data; + } + if (!arg.stack) return (0, _picocolors.red)(arg.prefix); + const mapped = await (0, _sourcemap.getSourceMappedStackFrames)(arg.stack, ctx, distDir); + return colorError(mapped, { + prefix: arg.prefix, + applyColor: false + }); + })); + return processConsoleFormatStrings(deserialized); +} +async function prepareConsoleErrorArgs(entry, ctx, distDir) { + const deserialized = await Promise.all(entry.args.map(async (arg)=>{ + if (arg.kind === 'arg') { + if (arg.isRejectionMessage) return (0, _picocolors.red)(arg.data); + return deserializeArgData(arg.data); + } + if (!arg.stack) return (0, _picocolors.red)(arg.prefix); + const mapped = await (0, _sourcemap.getSourceMappedStackFrames)(arg.stack, ctx, distDir); + return colorError(mapped, { + prefix: arg.prefix + }); + })); + const mappedStack = await (0, _sourcemap.getSourceMappedStackFrames)(entry.consoleErrorStack, ctx, distDir); + /** + * don't show the stack + codeblock when there are errors present, since: + * - it will look overwhelming to see 2 stacks and 2 code blocks + * - the user already knows where the console.error is at because we append the location + */ const location = (0, _sourcemap.getConsoleLocation)(mappedStack); + if (entry.args.some((a)=>a.kind === 'formatted-error-arg')) { + const result = stripFormatSpecifiers(deserialized); + if (location) { + result.push((0, _picocolors.dim)(`(${location})`)); + } + return result; + } + const result = [ + ...processConsoleFormatStrings(deserialized), + colorError(mappedStack) + ]; + if (location) { + result.push((0, _picocolors.dim)(`(${location})`)); + } + return result; +} +async function handleTable(entry, browserPrefix, ctx, distDir) { + const deserializedArgs = await Promise.all(entry.args.map(async (arg)=>{ + if (arg.kind === 'formatted-error-arg') { + return { + stack: arg.stack + }; + } + return deserializeArgData(arg.data); + })); + const location = await (async ()=>{ + if (!entry.consoleMethodStack) { + return; + } + const frames = await (0, _sourcemap.getSourceMappedStackFrames)(entry.consoleMethodStack, ctx, distDir); + return (0, _sourcemap.getConsoleLocation)(frames); + })(); + // we can't inline pass browser prefix, but it looks better multiline for table anyways + forwardConsole.log(browserPrefix); + forwardConsole.table(...deserializedArgs); + if (location) { + forwardConsole.log((0, _picocolors.dim)(`(${location})`)); + } +} +async function handleTrace(entry, browserPrefix, ctx, distDir) { + const deserializedArgs = await Promise.all(entry.args.map(async (arg)=>{ + if (arg.kind === 'formatted-error-arg') { + if (!arg.stack) return (0, _picocolors.red)(arg.prefix); + const mapped = await (0, _sourcemap.getSourceMappedStackFrames)(arg.stack, ctx, distDir); + return colorError(mapped, { + prefix: arg.prefix + }); + } + return deserializeArgData(arg.data); + })); + if (!entry.consoleMethodStack) { + forwardConsole.log(browserPrefix, ...deserializedArgs, '[Trace unavailable]'); + return; + } + // TODO(rob): refactor so we can re-use result and not re-run the entire source map to avoid trivial post processing + const [mapped, mappedIgnored] = await Promise.all([ + (0, _sourcemap.getSourceMappedStackFrames)(entry.consoleMethodStack, ctx, distDir, false), + (0, _sourcemap.getSourceMappedStackFrames)(entry.consoleMethodStack, ctx, distDir) + ]); + const location = (0, _sourcemap.getConsoleLocation)(mappedIgnored); + forwardConsole.log(browserPrefix, ...deserializedArgs, `\n${mapped.stack}`, ...location ? [ + `\n${(0, _picocolors.dim)(`(${location})`)}` + ] : []); +} +async function handleDir(entry, browserPrefix, ctx, distDir) { + const loggableEntry = await prepareConsoleArgs(entry, ctx, distDir); + const consoleMethod = forwardConsole[entry.method] || forwardConsole.log; + if (entry.consoleMethodStack) { + const mapped = await (0, _sourcemap.getSourceMappedStackFrames)(entry.consoleMethodStack, ctx, distDir); + const location = (0, _picocolors.dim)(`(${(0, _sourcemap.getConsoleLocation)(mapped)})`); + const originalWrite = process.stdout.write.bind(process.stdout); + let captured = ''; + process.stdout.write = (chunk)=>{ + captured += chunk; + return true; + }; + try { + consoleMethod(...loggableEntry); + } finally{ + process.stdout.write = originalWrite; + } + const preserved = captured.replace(/\r?\n$/, ''); + originalWrite(`${browserPrefix}${preserved} ${location}\n`); + return; + } + consoleMethod(browserPrefix, ...loggableEntry); +} +async function handleDefaultConsole(entry, browserPrefix, ctx, distDir, config, isServerLog) { + const consoleArgs = await prepareConsoleArgs(entry, ctx, distDir); + const withStackEntry = await (0, _sourcemap.withLocation)({ + original: consoleArgs, + stack: entry.consoleMethodStack || null + }, ctx, distDir, config); + const consoleMethod = forwardConsole[entry.method] || forwardConsole.log; + consoleMethod(browserPrefix, ...withStackEntry); + // Process enqueued logs and write to file + // Log to file with correct source based on context + const fileLogger = (0, _filelogger.getFileLogger)(); + // Use cleaned console args to strip out background and color format specifiers + const message = cleanConsoleArgsForFileLogging(consoleArgs); + if (isServerLog) { + fileLogger.logServer(entry.method.toUpperCase(), message); + } else { + fileLogger.logBrowser(entry.method.toUpperCase(), message); + } +} +// Log levels from most severe to least severe +// Lower index = more severe +const LOG_LEVEL_PRIORITY = { + error: 0, + warn: 1, + verbose: 2 +}; +// Map console methods to log levels +const METHOD_TO_LEVEL = { + error: 'error', + warn: 'warn', + info: 'verbose', + log: 'verbose', + debug: 'verbose', + table: 'verbose', + trace: 'verbose', + dir: 'verbose', + dirxml: 'verbose', + assert: 'error', + group: 'verbose', + groupCollapsed: 'verbose', + groupEnd: 'verbose' +}; +function shouldShowEntry(entry, config) { + // If config is false, don't show any entries + if (config === false) { + return false; + } + // Determine the effective minimum log level + const minLevel = typeof config === 'string' ? config : 'verbose' // true means show everything + ; + const minPriority = LOG_LEVEL_PRIORITY[minLevel]; + // formatted-error and any-logged-error are always treated as errors + if (entry.kind === 'formatted-error' || entry.kind === 'any-logged-error') { + return LOG_LEVEL_PRIORITY['error'] <= minPriority; + } + if (entry.kind === 'console') { + const entryLevel = METHOD_TO_LEVEL[entry.method] || 'log'; + return LOG_LEVEL_PRIORITY[entryLevel] <= minPriority; + } + return false; +} +async function handleLog(entries, ctx, distDir, config) { + // Determine the source based on the context + const isServerLog = ctx.isServer || ctx.isEdgeServer; + const browserPrefix = isServerLog ? (0, _picocolors.cyan)('[server]') : (0, _picocolors.cyan)('[browser]'); + const fileLogger = (0, _filelogger.getFileLogger)(); + for (const entry of entries){ + // Filter entries based on config mode + if (!shouldShowEntry(entry, config)) { + continue; + } + try { + switch(entry.kind){ + case 'console': + { + switch(entry.method){ + case 'table': + { + // timeout based abort on source mapping result + await handleTable(entry, browserPrefix, ctx, distDir); + break; + } + // ignore frames + case 'trace': + { + await handleTrace(entry, browserPrefix, ctx, distDir); + break; + } + case 'dir': + { + await handleDir(entry, browserPrefix, ctx, distDir); + break; + } + case 'dirxml': + { + // xml log thing maybe needs an impl + // fallthrough + } + case 'group': + case 'groupCollapsed': + case 'groupEnd': + { + // [browser] undefined (app/page.tsx:8:11) console.group + // fallthrough + } + case 'assert': + { + // check console assert + // fallthrough + } + case 'log': + case 'info': + case 'debug': + case 'error': + case 'warn': + { + await handleDefaultConsole(entry, browserPrefix, ctx, distDir, config, isServerLog); + break; + } + default: + { + entry; + } + } + break; + } + // any logged errors are anything that are logged as "red" in the browser but aren't only an Error (console.error, Promise.reject(100)) + case 'any-logged-error': + { + const consoleArgs = await prepareConsoleErrorArgs(entry, ctx, distDir); + forwardConsole.error(browserPrefix, ...consoleArgs); + // Process enqueued logs and write to file + fileLogger.logBrowser('ERROR', cleanConsoleArgsForFileLogging(consoleArgs)); + break; + } + // formatted error is an explicit error event (rejections, uncaught errors) + case 'formatted-error': + { + const formattedArgs = await prepareFormattedErrorArgs(entry, ctx, distDir); + forwardConsole.error(browserPrefix, ...formattedArgs); + // Process enqueued logs and write to file + fileLogger.logBrowser('ERROR', cleanConsoleArgsForFileLogging(formattedArgs)); + break; + } + default: + {} + } + } catch { + switch(entry.kind){ + case 'any-logged-error': + { + const consoleArgs = await prepareConsoleErrorArgs(entry, ctx, distDir); + forwardConsole.error(browserPrefix, ...consoleArgs); + // Process enqueued logs and write to file + fileLogger.logBrowser('ERROR', cleanConsoleArgsForFileLogging(consoleArgs)); + break; + } + case 'console': + { + const consoleMethod = forwardConsole[entry.method] || forwardConsole.log; + const consoleArgs = await prepareConsoleArgs(entry, ctx, distDir); + consoleMethod(browserPrefix, ...consoleArgs); + // Process enqueued logs and write to file + fileLogger.logBrowser('ERROR', cleanConsoleArgsForFileLogging(consoleArgs)); + break; + } + case 'formatted-error': + { + forwardConsole.error(browserPrefix, `${entry.prefix}\n`, entry.stack); + // Process enqueued logs and write to file + fileLogger.logBrowser('ERROR', cleanConsoleArgsForFileLogging([ + `${entry.prefix}\n${entry.stack}` + ])); + break; + } + default: + {} + } + } + } +} +async function receiveBrowserLogsWebpack(opts) { + const { entries, router, sourceType, clientStats, serverStats, edgeServerStats, rootDirectory, distDir } = opts; + const isAppDirectory = router === 'app'; + const isServer = sourceType === 'server'; + const isEdgeServer = sourceType === 'edge-server'; + const ctx = { + bundler: 'webpack', + isServer, + isEdgeServer, + isAppDirectory, + clientStats, + serverStats, + edgeServerStats, + rootDirectory + }; + await handleLog(entries, ctx, distDir, opts.config); +} +async function receiveBrowserLogsTurbopack(opts) { + const { entries, router, sourceType, project, projectPath, distDir } = opts; + const isAppDirectory = router === 'app'; + const isServer = sourceType === 'server'; + const isEdgeServer = sourceType === 'edge-server'; + const ctx = { + bundler: 'turbopack', + project, + projectPath, + isServer, + isEdgeServer, + isAppDirectory + }; + await handleLog(entries, ctx, distDir, opts.config); +} +async function handleClientFileLogs(logs) { + const fileLogger = (0, _filelogger.getFileLogger)(); + for (const log of logs){ + fileLogger.logBrowser(log.level, log.message); + } +} + +//# sourceMappingURL=receive-logs.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/dev/browser-logs/source-map.js b/build/node_modules/next/dist/server/dev/browser-logs/source-map.js new file mode 100644 index 0000000..90375f2 --- /dev/null +++ b/build/node_modules/next/dist/server/dev/browser-logs/source-map.js @@ -0,0 +1,222 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getConsoleLocation: null, + getSourceMappedStackFrames: null, + mapFramesUsingBundler: null, + withLocation: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getConsoleLocation: function() { + return getConsoleLocation; + }, + getSourceMappedStackFrames: function() { + return getSourceMappedStackFrames; + }, + mapFramesUsingBundler: function() { + return mapFramesUsingBundler; + }, + withLocation: function() { + return withLocation; + } +}); +const _middlewarewebpack = require("../middleware-webpack"); +const _middlewareturbopack = require("../middleware-turbopack"); +const _picocolors = require("../../../lib/picocolors"); +const _parsestack = require("../../lib/parse-stack"); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _lrucache = require("../../lib/lru-cache"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +async function mapFramesUsingBundler(frames, ctx) { + switch(ctx.bundler){ + case 'webpack': + { + const { isServer, isEdgeServer, isAppDirectory, clientStats, serverStats, edgeServerStats, rootDirectory } = ctx; + const res = await (0, _middlewarewebpack.getOriginalStackFrames)({ + isServer, + isEdgeServer, + isAppDirectory, + frames, + clientStats, + serverStats, + edgeServerStats, + rootDirectory + }); + return res; + } + case 'turbopack': + { + const { project, projectPath, isServer, isEdgeServer, isAppDirectory } = ctx; + const res = await (0, _middlewareturbopack.getOriginalStackFrames)({ + project, + projectPath, + frames, + isServer, + isEdgeServer, + isAppDirectory + }); + return res; + } + default: + { + return null; + } + } +} +// converts _next/static/chunks/... to file:///.next/static/chunks/... for parseStack +// todo: where does next dev overlay handle this case and re-use that logic +function preprocessStackTrace(stackTrace, distDir) { + return stackTrace.split('\n').map((line)=>{ + const match = line.match(/^(\s*at\s+.*?)\s+\(([^)]+)\)$/); + if (match) { + const [, prefix, location] = match; + if (location.startsWith('_next/static/') && distDir) { + const normalizedDistDir = distDir.replace(/\\/g, '/').replace(/\/$/, ''); + const absolutePath = normalizedDistDir + '/' + location.slice('_next/'.length); + const fileUrl = `file://${_path.default.resolve(absolutePath)}`; + return `${prefix} (${fileUrl})`; + } + } + return line; + }).join('\n'); +} +const cache = new _lrucache.LRUCache(25); +async function getSourceMappedStackFramesInternal(stackTrace, ctx, distDir, ignore = true) { + try { + var _filteredFrames_find; + const normalizedStack = preprocessStackTrace(stackTrace, distDir); + const frames = (0, _parsestack.parseStack)(normalizedStack, distDir); + if (frames.length === 0) { + return { + kind: 'stack', + stack: stackTrace + }; + } + const mappingResults = await mapFramesUsingBundler(frames, ctx); + const processedFrames = mappingResults.map((result, index)=>({ + result, + originalFrame: frames[index] + })).map(({ result, originalFrame })=>{ + var _originalStackFrame_file; + if (result.status === 'rejected') { + return { + kind: 'rejected', + frameText: formatStackFrame(originalFrame), + codeFrame: null + }; + } + const { originalStackFrame, originalCodeFrame } = result.value; + if ((originalStackFrame == null ? void 0 : originalStackFrame.ignored) && ignore) { + return { + kind: 'ignored' + }; + } + // should we apply this generally to dev overlay (dev overlay does not ignore chrome-extension://) + if (originalStackFrame == null ? void 0 : (_originalStackFrame_file = originalStackFrame.file) == null ? void 0 : _originalStackFrame_file.startsWith('chrome-extension://')) { + return { + kind: 'ignored' + }; + } + return { + kind: 'success', + // invariant: if result is not rejected and not ignored, then original stack frame exists + // verifiable by tracing `getOriginalStackFrame`. The invariant exists because of bad types + frameText: formatStackFrame(originalStackFrame), + codeFrame: originalCodeFrame + }; + }); + const allIgnored = processedFrames.every((frame)=>frame.kind === 'ignored'); + // we want to handle **all** ignored vs all/some rejected differently + // if all are ignored we should show no frames + // if all are rejected, we want to fallback to showing original stack frames + if (allIgnored) { + return { + kind: 'all-ignored' + }; + } + const filteredFrames = processedFrames.filter((frame)=>frame.kind !== 'ignored'); + if (filteredFrames.length === 0) { + return { + kind: 'stack', + stack: stackTrace + }; + } + const stackOutput = filteredFrames.map((frame)=>frame.frameText).join('\n'); + const firstFrameCode = (_filteredFrames_find = filteredFrames.find((frame)=>frame.codeFrame)) == null ? void 0 : _filteredFrames_find.codeFrame; + if (firstFrameCode) { + return { + kind: 'with-frame-code', + frameCode: firstFrameCode, + stack: stackOutput, + frames: filteredFrames + }; + } + // i don't think this a real case, but good for exhaustion + return { + kind: 'mapped-stack', + stack: stackOutput, + frames: filteredFrames + }; + } catch (error) { + return { + kind: 'stack', + stack: stackTrace + }; + } +} +async function getSourceMappedStackFrames(stackTrace, ctx, distDir, ignore = true) { + const cacheKey = `sm_${stackTrace}-${ctx.bundler}-${ctx.isAppDirectory}-${ctx.isEdgeServer}-${ctx.isServer}-${distDir}-${ignore}`; + const cacheItem = cache.get(cacheKey); + if (cacheItem) { + return cacheItem; + } + const result = await getSourceMappedStackFramesInternal(stackTrace, ctx, distDir, ignore); + cache.set(cacheKey, result); + return result; +} +function formatStackFrame(frame) { + const functionName = frame.methodName || ''; + const location = frame.file && frame.line1 ? `${frame.file}:${frame.line1}${frame.column1 ? `:${frame.column1}` : ''}` : frame.file || ''; + return ` at ${functionName} (${location})`; +} +const withLocation = async ({ original, stack }, ctx, distDir, _config)=>{ + if (!stack) { + return original; + } + const res = await getSourceMappedStackFrames(stack, ctx, distDir); + const location = getConsoleLocation(res); + if (!location) { + return original; + } + return [ + ...original, + (0, _picocolors.dim)(`(${location})`) + ]; +}; +const getConsoleLocation = (mapped)=>{ + if (mapped.kind !== 'mapped-stack' && mapped.kind !== 'with-frame-code') { + return null; + } + const first = mapped.frames.at(0); + if (!first) { + return null; + } + // we don't want to show the name of parent function (at thing in stack), just source location for minimal noise + const match = first.frameText.match(/\(([^)]+)\)/); + const locationText = match ? match[1] : first.frameText; + return locationText; +}; + +//# sourceMappingURL=source-map.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/dev/debug-channel.js b/build/node_modules/next/dist/server/dev/debug-channel.js new file mode 100644 index 0000000..04c2e25 --- /dev/null +++ b/build/node_modules/next/dist/server/dev/debug-channel.js @@ -0,0 +1,87 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + connectReactDebugChannel: null, + connectReactDebugChannelForHtmlRequest: null, + deleteReactDebugChannelForHtmlRequest: null, + setReactDebugChannelForHtmlRequest: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + connectReactDebugChannel: function() { + return connectReactDebugChannel; + }, + connectReactDebugChannelForHtmlRequest: function() { + return connectReactDebugChannelForHtmlRequest; + }, + deleteReactDebugChannelForHtmlRequest: function() { + return deleteReactDebugChannelForHtmlRequest; + }, + setReactDebugChannelForHtmlRequest: function() { + return setReactDebugChannelForHtmlRequest; + } +}); +const _nodewebstreamshelper = require("../stream-utils/node-web-streams-helper"); +const _hotreloadertypes = require("./hot-reloader-types"); +const reactDebugChannelsByHtmlRequestId = new Map(); +function connectReactDebugChannel(requestId, debugChannel, sendToClient) { + const reader = debugChannel.readable.pipeThrough(// We're sending the chunks in batches to reduce overhead in the browser. + (0, _nodewebstreamshelper.createBufferedTransformStream)({ + maxBufferByteLength: 128 * 1024 + })).getReader(); + const stop = ()=>{ + sendToClient({ + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.REACT_DEBUG_CHUNK, + requestId, + chunk: null + }); + }; + const onError = (err)=>{ + console.error(Object.defineProperty(new Error('React debug channel stream error', { + cause: err + }), "__NEXT_ERROR_CODE", { + value: "E810", + enumerable: false, + configurable: true + })); + stop(); + }; + const progress = (entry)=>{ + if (entry.done) { + stop(); + } else { + sendToClient({ + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.REACT_DEBUG_CHUNK, + requestId, + chunk: entry.value + }); + reader.read().then(progress, onError); + } + }; + reader.read().then(progress, onError); +} +function connectReactDebugChannelForHtmlRequest(htmlRequestId, sendToClient) { + const debugChannel = reactDebugChannelsByHtmlRequestId.get(htmlRequestId); + if (!debugChannel) { + return; + } + reactDebugChannelsByHtmlRequestId.delete(htmlRequestId); + connectReactDebugChannel(htmlRequestId, debugChannel, sendToClient); +} +function setReactDebugChannelForHtmlRequest(htmlRequestId, debugChannel) { + // TODO: Clean up after a timeout, in case the client never connects, e.g. + // when CURL'ing the page, or loading the page with JavaScript disabled etc. + reactDebugChannelsByHtmlRequestId.set(htmlRequestId, debugChannel); +} +function deleteReactDebugChannelForHtmlRequest(htmlRequestId) { + reactDebugChannelsByHtmlRequestId.delete(htmlRequestId); +} + +//# sourceMappingURL=debug-channel.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/dev/dev-indicator-server-state.js b/build/node_modules/next/dist/server/dev/dev-indicator-server-state.js new file mode 100644 index 0000000..56ce7d5 --- /dev/null +++ b/build/node_modules/next/dist/server/dev/dev-indicator-server-state.js @@ -0,0 +1,15 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "devIndicatorServerState", { + enumerable: true, + get: function() { + return devIndicatorServerState; + } +}); +const devIndicatorServerState = { + disabledUntil: 0 +}; + +//# sourceMappingURL=dev-indicator-server-state.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/dev/get-source-map-from-file.js b/build/node_modules/next/dist/server/dev/get-source-map-from-file.js new file mode 100644 index 0000000..f2aab1f --- /dev/null +++ b/build/node_modules/next/dist/server/dev/get-source-map-from-file.js @@ -0,0 +1,100 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getSourceMapFromFile", { + enumerable: true, + get: function() { + return getSourceMapFromFile; + } +}); +const _promises = /*#__PURE__*/ _interop_require_default(require("fs/promises")); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _url = /*#__PURE__*/ _interop_require_default(require("url")); +const _datauritobuffer = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/data-uri-to-buffer")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function getSourceMapUrl(fileContents) { + const regex = /\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/gm; + let match = null; + for(;;){ + let next = regex.exec(fileContents); + if (next == null) { + break; + } + match = next; + } + if (!(match && match[1])) { + return null; + } + return match[1].toString(); +} +async function getSourceMapFromFile(filename) { + filename = filename.startsWith('file://') ? _url.default.fileURLToPath(filename) : filename; + let fileContents; + try { + fileContents = await _promises.default.readFile(filename, 'utf-8'); + } catch (error) { + throw Object.defineProperty(new Error(`Failed to read file contents of ${filename}.`, { + cause: error + }), "__NEXT_ERROR_CODE", { + value: "E466", + enumerable: false, + configurable: true + }); + } + const sourceUrl = getSourceMapUrl(fileContents); + if (!sourceUrl) { + return undefined; + } + if (sourceUrl.startsWith('data:')) { + let buffer; + try { + buffer = (0, _datauritobuffer.default)(sourceUrl); + } catch (error) { + throw Object.defineProperty(new Error(`Failed to parse source map URL for ${filename}.`, { + cause: error + }), "__NEXT_ERROR_CODE", { + value: "E199", + enumerable: false, + configurable: true + }); + } + if (buffer.type !== 'application/json') { + throw Object.defineProperty(new Error(`Unknown source map type for ${filename}: ${buffer.typeFull}.`), "__NEXT_ERROR_CODE", { + value: "E113", + enumerable: false, + configurable: true + }); + } + try { + return JSON.parse(buffer.toString()); + } catch (error) { + throw Object.defineProperty(new Error(`Failed to parse source map for ${filename}.`, { + cause: error + }), "__NEXT_ERROR_CODE", { + value: "E318", + enumerable: false, + configurable: true + }); + } + } + const sourceMapFilename = _path.default.resolve(_path.default.dirname(filename), decodeURIComponent(sourceUrl)); + try { + const sourceMapContents = await _promises.default.readFile(sourceMapFilename, 'utf-8'); + return JSON.parse(sourceMapContents.toString()); + } catch (error) { + throw Object.defineProperty(new Error(`Failed to parse source map ${sourceMapFilename}.`, { + cause: error + }), "__NEXT_ERROR_CODE", { + value: "E220", + enumerable: false, + configurable: true + }); + } +} + +//# sourceMappingURL=get-source-map-from-file.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/dev/hot-middleware.js b/build/node_modules/next/dist/server/dev/hot-middleware.js new file mode 100644 index 0000000..ca34718 --- /dev/null +++ b/build/node_modules/next/dist/server/dev/hot-middleware.js @@ -0,0 +1,274 @@ +// Based on https://github.com/webpack-contrib/webpack-hot-middleware/blob/9708d781ae0e46179cf8ea1a94719de4679aaf53/middleware.js +// Included License below +// Copyright JS Foundation and other contributors +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// 'Software'), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "WebpackHotMiddleware", { + enumerable: true, + get: function() { + return WebpackHotMiddleware; + } +}); +const _utils = require("../../build/utils"); +const _hotreloadertypes = require("./hot-reloader-types"); +const _devindicatorserverstate = require("./dev-indicator-server-state"); +const _messages = require("./messages"); +function isMiddlewareStats(stats) { + for (const key of stats.compilation.entrypoints.keys()){ + if ((0, _utils.isMiddlewareFilename)(key)) { + return true; + } + } + return false; +} +function statsToJson(stats) { + if (!stats) return {}; + return stats.toJson({ + all: false, + errors: true, + hash: true, + warnings: true + }); +} +function getStatsForSyncEvent(clientStats, serverStats) { + if (!clientStats) return serverStats == null ? void 0 : serverStats.stats; + if (!serverStats) return clientStats == null ? void 0 : clientStats.stats; + // Prefer the server compiler stats if it has errors. + // Otherwise we may end up in a state where the client compilation is the latest but without errors. + // This causes the error overlay to not display the build error. + if (serverStats.stats.hasErrors()) { + return serverStats.stats; + } + // Return the latest stats + return serverStats.ts > clientStats.ts ? serverStats.stats : clientStats.stats; +} +class WebpackHotMiddleware { + constructor(compilers, versionInfo, devtoolsFrontendUrl, config, devToolsConfig){ + this.versionInfo = versionInfo; + this.devtoolsFrontendUrl = devtoolsFrontendUrl; + this.config = config; + this.devToolsConfig = devToolsConfig; + this.clientsWithoutHtmlRequestId = new Set(); + this.clientsByHtmlRequestId = new Map(); + this.closed = false; + this.clientLatestStats = null; + this.middlewareLatestStats = null; + this.serverLatestStats = null; + this.onClientInvalid = ()=>{ + var _this_serverLatestStats; + if (this.closed || ((_this_serverLatestStats = this.serverLatestStats) == null ? void 0 : _this_serverLatestStats.stats.hasErrors())) return; + this.publish({ + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.BUILDING + }); + }; + this.onClientDone = (statsResult)=>{ + var _this_serverLatestStats; + this.clientLatestStats = { + ts: Date.now(), + stats: statsResult + }; + if (this.closed || ((_this_serverLatestStats = this.serverLatestStats) == null ? void 0 : _this_serverLatestStats.stats.hasErrors())) return; + this.publishStats(statsResult); + }; + this.onServerInvalid = ()=>{ + var _this_serverLatestStats, _this_clientLatestStats; + if (!((_this_serverLatestStats = this.serverLatestStats) == null ? void 0 : _this_serverLatestStats.stats.hasErrors())) return; + this.serverLatestStats = null; + if ((_this_clientLatestStats = this.clientLatestStats) == null ? void 0 : _this_clientLatestStats.stats) { + this.publishStats(this.clientLatestStats.stats); + } + }; + this.onServerDone = (statsResult)=>{ + if (this.closed) return; + if (statsResult.hasErrors()) { + this.serverLatestStats = { + ts: Date.now(), + stats: statsResult + }; + this.publishStats(statsResult); + } + }; + this.onEdgeServerInvalid = ()=>{ + var _this_middlewareLatestStats, _this_clientLatestStats; + if (!((_this_middlewareLatestStats = this.middlewareLatestStats) == null ? void 0 : _this_middlewareLatestStats.stats.hasErrors())) return; + this.middlewareLatestStats = null; + if ((_this_clientLatestStats = this.clientLatestStats) == null ? void 0 : _this_clientLatestStats.stats) { + this.publishStats(this.clientLatestStats.stats); + } + }; + this.onEdgeServerDone = (statsResult)=>{ + if (this.closed) return; + if (!isMiddlewareStats(statsResult)) { + this.onServerInvalid(); + this.onServerDone(statsResult); + } + if (statsResult.hasErrors()) { + this.middlewareLatestStats = { + ts: Date.now(), + stats: statsResult + }; + this.publishStats(statsResult); + } + }; + this./** + * To sync we use the most recent stats but also we append middleware + * errors. This is because it is possible that middleware fails to compile + * and we still want to show the client overlay with the error while + * the error page should be rendered just fine. + */ onHMR = (client, htmlRequestId)=>{ + if (this.closed) return; + if (htmlRequestId) { + this.clientsByHtmlRequestId.set(htmlRequestId, client); + } else { + this.clientsWithoutHtmlRequestId.add(client); + } + client.addEventListener('close', ()=>{ + if (htmlRequestId) { + this.clientsByHtmlRequestId.delete(htmlRequestId); + } else { + this.clientsWithoutHtmlRequestId.delete(client); + } + }); + const syncStats = getStatsForSyncEvent(this.clientLatestStats, this.serverLatestStats); + if (syncStats) { + var _this_middlewareLatestStats; + const stats = statsToJson(syncStats); + const middlewareStats = statsToJson((_this_middlewareLatestStats = this.middlewareLatestStats) == null ? void 0 : _this_middlewareLatestStats.stats); + if (_devindicatorserverstate.devIndicatorServerState.disabledUntil < Date.now()) { + _devindicatorserverstate.devIndicatorServerState.disabledUntil = 0; + } + this.publish({ + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.SYNC, + hash: stats.hash, + errors: [ + ...stats.errors || [], + ...middlewareStats.errors || [] + ], + warnings: [ + ...stats.warnings || [], + ...middlewareStats.warnings || [] + ], + versionInfo: this.versionInfo, + debug: { + devtoolsFrontendUrl: this.devtoolsFrontendUrl + }, + devIndicator: _devindicatorserverstate.devIndicatorServerState, + devToolsConfig: this.devToolsConfig + }); + } + }; + this.publishStats = (statsResult)=>{ + const stats = statsResult.toJson({ + all: false, + hash: true, + warnings: true, + errors: true, + moduleTrace: true + }); + this.publish({ + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.BUILT, + hash: stats.hash, + warnings: stats.warnings || [], + errors: stats.errors || [] + }); + }; + this.getClient = (htmlRequestId)=>{ + return this.clientsByHtmlRequestId.get(htmlRequestId); + }; + this.publishToClient = (client, message)=>{ + if (this.closed) { + return; + } + const data = typeof message.type === 'number' ? (0, _messages.createBinaryHmrMessageData)(message) : JSON.stringify(message); + client.send(data); + }; + this.publish = (message)=>{ + if (this.closed) { + return; + } + for (const wsClient of [ + ...this.clientsWithoutHtmlRequestId, + ...this.clientsByHtmlRequestId.values() + ]){ + this.publishToClient(wsClient, message); + } + }; + this.publishToLegacyClients = (message)=>{ + if (this.closed) { + return; + } + // Clients with a request ID are inferred App Router clients. If Cache + // Components is not enabled, we consider those legacy clients. Pages + // Router clients are also considered legacy clients. TODO: Maybe mark + // clients as App Router / Pages Router clients explicitly, instead of + // inferring it from the presence of a request ID. + if (!this.config.cacheComponents) { + for (const wsClient of this.clientsByHtmlRequestId.values()){ + this.publishToClient(wsClient, message); + } + } + for (const wsClient of this.clientsWithoutHtmlRequestId){ + this.publishToClient(wsClient, message); + } + }; + this.close = ()=>{ + if (this.closed) { + return; + } + // Can't remove compiler plugins, so we just set a flag and noop if closed + // https://github.com/webpack/tapable/issues/32#issuecomment-350644466 + this.closed = true; + for (const wsClient of [ + ...this.clientsWithoutHtmlRequestId, + ...this.clientsByHtmlRequestId.values() + ]){ + // it's okay to not cleanly close these websocket connections, this is dev + wsClient.terminate(); + } + this.clientsWithoutHtmlRequestId.clear(); + this.clientsByHtmlRequestId.clear(); + }; + this.deleteClient = (client, htmlRequestId)=>{ + if (htmlRequestId) { + this.clientsByHtmlRequestId.delete(htmlRequestId); + } else { + this.clientsWithoutHtmlRequestId.delete(client); + } + }; + this.hasClients = ()=>{ + return this.clientsWithoutHtmlRequestId.size + this.clientsByHtmlRequestId.size > 0; + }; + this.getClientCount = ()=>{ + return this.clientsWithoutHtmlRequestId.size + this.clientsByHtmlRequestId.size; + }; + compilers[0].hooks.invalid.tap('webpack-hot-middleware', this.onClientInvalid); + compilers[0].hooks.done.tap('webpack-hot-middleware', this.onClientDone); + compilers[1].hooks.invalid.tap('webpack-hot-middleware', this.onServerInvalid); + compilers[1].hooks.done.tap('webpack-hot-middleware', this.onServerDone); + compilers[2].hooks.done.tap('webpack-hot-middleware', this.onEdgeServerDone); + compilers[2].hooks.invalid.tap('webpack-hot-middleware', this.onEdgeServerInvalid); + } + updateDevToolsConfig(newConfig) { + this.devToolsConfig = newConfig; + } +} + +//# sourceMappingURL=hot-middleware.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/dev/hot-reloader-rspack.js b/build/node_modules/next/dist/server/dev/hot-reloader-rspack.js new file mode 100644 index 0000000..a5d83a5 --- /dev/null +++ b/build/node_modules/next/dist/server/dev/hot-reloader-rspack.js @@ -0,0 +1,171 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, /** + * Rspack Persistent Cache Strategy for Next.js Development + * + * Rspack's persistent caching differs from Webpack in how it manages module graphs. + * While Webpack incrementally updates modules, Rspack operates on complete module + * graph snapshots for cache restoration. + * + * Problem: + * - Next.js dev server starts with no page modules in the initial entry points + * - When Rspack restores from persistent cache, it finds no modules and purges + * the entire module graph + * - Later page requests find no cached module information, preventing cache reuse + * + * Solution: + * - Track successfully built page entries after each compilation + * - Restore these entries on dev server restart to maintain module graph continuity + * - This ensures previously compiled pages can leverage persistent cache for faster builds + */ "default", { + enumerable: true, + get: function() { + return HotReloaderRspack; + } +}); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _promises = /*#__PURE__*/ _interop_require_default(require("fs/promises")); +const _crypto = require("crypto"); +const _hotreloaderwebpack = /*#__PURE__*/ _interop_require_default(require("./hot-reloader-webpack")); +const _ondemandentryhandler = require("./on-demand-entry-handler"); +const _constants = require("../../shared/lib/constants"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +class HotReloaderRspack extends _hotreloaderwebpack.default { + async afterCompile(multiCompiler) { + // Always initialize the fallback error watcher for Rspack. + // Rspack may restore/retain the previous build's error state, so without this + // a page that previously failed to build might not be rebuilt on the next request. + await super.buildFallbackError(); + const rspackStartSpan = this.hotReloaderSpan.traceChild('rspack-after-compile'); + await rspackStartSpan.traceAsyncFn(async ()=>{ + const hash = (0, _crypto.createHash)('sha1'); + multiCompiler.compilers.forEach((compiler)=>{ + const cache = compiler.options.cache; + if (typeof cache === 'object' && 'version' in cache && cache.version) { + hash.update(cache.version); + if (compiler.name === _constants.COMPILER_NAMES.client) { + this.isClientCacheEnabled = true; + } else if (compiler.name === _constants.COMPILER_NAMES.server) { + this.isServerCacheEnabled = true; + } else if (compiler.name === _constants.COMPILER_NAMES.edgeServer) { + this.isEdgeServerCacheEnabled = true; + } + } else { + hash.update('-'); + } + return undefined; + }); + this.builtEntriesCachePath = _path.default.join(this.distDir, 'cache', 'rspack', hash.digest('hex').substring(0, 16), 'built-entries.json'); + const hasBuiltEntriesCache = await _promises.default.access(this.builtEntriesCachePath).then(()=>true, ()=>false); + if (hasBuiltEntriesCache) { + try { + const builtEntries = JSON.parse(await _promises.default.readFile(this.builtEntriesCachePath, 'utf-8') || '{}'); + await Promise.all(Object.keys(builtEntries).map(async (entryKey)=>{ + const entryData = builtEntries[entryKey]; + const isEntry = entryData.type === _ondemandentryhandler.EntryTypes.ENTRY; + const isChildEntry = entryData.type === _ondemandentryhandler.EntryTypes.CHILD_ENTRY; + // Check if the page was removed or disposed and remove it + if (isEntry) { + const pageExists = !entryData.dispose && await _promises.default.access(entryData.absolutePagePath).then(()=>true, ()=>false); + if (!pageExists) { + delete builtEntries[entryKey]; + return; + } else if (!('hash' in builtEntries[entryKey]) || builtEntries[entryKey].hash !== await calculateFileHash(entryData.absolutePagePath)) { + delete builtEntries[entryKey]; + return; + } + } + // For child entries, if it has an entry file and it's gone, remove it + if (isChildEntry) { + if (entryData.absoluteEntryFilePath) { + const pageExists = !entryData.dispose && await _promises.default.access(entryData.absoluteEntryFilePath).then(()=>true, ()=>false); + if (!pageExists) { + delete builtEntries[entryKey]; + return; + } else { + if (!('hash' in builtEntries[entryKey]) || builtEntries[entryKey].hash !== await calculateFileHash(entryData.absoluteEntryFilePath)) { + delete builtEntries[entryKey]; + return; + } + } + } + } + })); + Object.assign((0, _ondemandentryhandler.getEntries)(multiCompiler.outputPath), builtEntries); + } catch (error) { + console.error('Rspack failed to read built entries cache: ', error); + } + } + }); + } + async ensurePage({ page, clientOnly, appPaths, definition, isApp, url }) { + await super.ensurePage({ + page, + clientOnly, + appPaths, + definition, + isApp, + url + }); + const entries = (0, _ondemandentryhandler.getEntries)(this.multiCompiler.outputPath); + const builtEntries = {}; + await Promise.all(Object.keys(entries).map(async (entryName)=>{ + const entry = entries[entryName]; + if (entry.status !== _ondemandentryhandler.BUILT) return; + const result = /^(client|server|edge-server)@(app|pages|root)@(.*)/g.exec(entryName); + const [, key /* pageType */ , , ] = result// this match should always happen + ; + if (key === 'client' && !this.isClientCacheEnabled) return; + if (key === 'server' && !this.isServerCacheEnabled) return; + if (key === 'edge-server' && !this.isEdgeServerCacheEnabled) return; + // TODO: Rspack does not store middleware entries in persistent cache, causing + // test/integration/middleware-src/test/index.test.ts to fail. This is a temporary + // workaround to skip middleware entry caching until Rspack properly supports it. + if (page === '/middleware') { + return; + } + let hash; + if (entry.type === _ondemandentryhandler.EntryTypes.ENTRY) { + hash = await calculateFileHash(entry.absolutePagePath); + } else if (entry.absoluteEntryFilePath) { + hash = await calculateFileHash(entry.absoluteEntryFilePath); + } + if (!hash) { + return; + } + builtEntries[entryName] = entry; + builtEntries[entryName].hash = hash; + })); + const hasBuitEntriesCache = await _promises.default.access(this.builtEntriesCachePath).then(()=>true, ()=>false); + try { + if (!hasBuitEntriesCache) { + await _promises.default.mkdir(_path.default.dirname(this.builtEntriesCachePath), { + recursive: true + }); + } + await _promises.default.writeFile(this.builtEntriesCachePath, JSON.stringify(builtEntries, null, 2)); + } catch (error) { + console.error('Rspack failed to write built entries cache: ', error); + } + } + constructor(...args){ + super(...args), this.isClientCacheEnabled = false, this.isServerCacheEnabled = false, this.isEdgeServerCacheEnabled = false; + } +} +async function calculateFileHash(filePath, algorithm = 'sha256') { + if (!await _promises.default.access(filePath).then(()=>true, ()=>false)) { + return; + } + const fileBuffer = await _promises.default.readFile(filePath); + const hash = (0, _crypto.createHash)(algorithm); + hash.update(fileBuffer); + return hash.digest('hex'); +} + +//# sourceMappingURL=hot-reloader-rspack.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/dev/hot-reloader-shared-utils.js b/build/node_modules/next/dist/server/dev/hot-reloader-shared-utils.js new file mode 100644 index 0000000..cb12156 --- /dev/null +++ b/build/node_modules/next/dist/server/dev/hot-reloader-shared-utils.js @@ -0,0 +1,56 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getVersionInfo: null, + matchNextPageBundleRequest: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getVersionInfo: function() { + return getVersionInfo; + }, + matchNextPageBundleRequest: function() { + return matchNextPageBundleRequest; + } +}); +const _pathmatch = require("../../shared/lib/router/utils/path-match"); +const _parseversioninfo = require("./parse-version-info"); +const matchNextPageBundleRequest = (0, _pathmatch.getPathMatch)('/_next/static/chunks/pages/:path*.js(\\.map|)'); +async function getVersionInfo() { + let installed = '0.0.0'; + try { + installed = require('next/package.json').version; + let res; + try { + // use NPM registry regardless user using Yarn + res = await fetch('https://registry.npmjs.org/-/package/next/dist-tags'); + } catch { + // ignore fetch errors + } + if (!res || !res.ok) return { + installed, + staleness: 'unknown' + }; + const { latest, canary } = await res.json(); + return (0, _parseversioninfo.parseVersionInfo)({ + installed, + latest, + canary + }); + } catch (e) { + console.error(e); + return { + installed, + staleness: 'unknown' + }; + } +} + +//# sourceMappingURL=hot-reloader-shared-utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/dev/hot-reloader-turbopack.js b/build/node_modules/next/dist/server/dev/hot-reloader-turbopack.js new file mode 100644 index 0000000..3eec722 --- /dev/null +++ b/build/node_modules/next/dist/server/dev/hot-reloader-turbopack.js @@ -0,0 +1,1480 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "createHotReloaderTurbopack", { + enumerable: true, + get: function() { + return createHotReloaderTurbopack; + } +}); +const _promises = require("fs/promises"); +const _inspector = /*#__PURE__*/ _interop_require_wildcard(require("inspector")); +const _path = require("path"); +const _url = require("url"); +const _ws = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/ws")); +const _store = require("../../build/output/store"); +const _hotreloadertypes = require("./hot-reloader-types"); +const _swc = require("../../build/swc"); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("../../build/output/log")); +const _constants = require("../../shared/lib/constants"); +const _middlewareturbopack = require("./middleware-turbopack"); +const _utils = require("../../shared/lib/utils"); +const _utils1 = require("../utils"); +const _requirecache = require("./require-cache"); +const _renderserver = require("../lib/render-server"); +const _denormalizepagepath = require("../../shared/lib/page-path/denormalize-page-path"); +const _trace = require("../../trace"); +const _turbopackutils = require("./turbopack-utils"); +const _setupdevbundler = require("../lib/router-utils/setup-dev-bundler"); +const _manifestloader = require("../../shared/lib/turbopack/manifest-loader"); +const _ondemandentryhandler = require("./on-demand-entry-handler"); +const _entrykey = require("../../shared/lib/turbopack/entry-key"); +const _messages = require("./messages"); +const _encryptionutilsserver = require("../app-render/encryption-utils-server"); +const _apppageroutedefinition = require("../route-definitions/app-page-route-definition"); +const _apppaths = require("../../shared/lib/router/utils/app-paths"); +const _entries = require("../../build/entries"); +const _ismetadataroute = require("../../lib/metadata/is-metadata-route"); +const _patcherrorinspect = require("../patch-error-inspect"); +const _getnexterrorfeedbackmiddleware = require("../../next-devtools/server/get-next-error-feedback-middleware"); +const _utils2 = require("../../shared/lib/turbopack/utils"); +const _getdevoverlayfontmiddleware = require("../../next-devtools/server/font/get-dev-overlay-font-middleware"); +const _devindicatorserverstate = require("./dev-indicator-server-state"); +const _devindicatormiddleware = require("../../next-devtools/server/dev-indicator-middleware"); +const _restartdevservermiddleware = require("../../next-devtools/server/restart-dev-server-middleware"); +const _compilationevents = require("../../shared/lib/turbopack/compilation-events"); +const _getsupportedbrowsers = require("../../build/get-supported-browsers"); +const _printbuilderrors = require("../../build/print-build-errors"); +const _receivelogs = require("./browser-logs/receive-logs"); +const _normalizepath = require("../../lib/normalize-path"); +const _devtoolsconfigmiddleware = require("../../next-devtools/server/devtools-config-middleware"); +const _attachnodejsdebuggermiddleware = require("../../next-devtools/server/attach-nodejs-debugger-middleware"); +const _debugchannel = require("./debug-channel"); +const _hotreloadersharedutils = require("./hot-reloader-shared-utils"); +const _getmcpmiddleware = require("../mcp/get-mcp-middleware"); +const _geterrors = require("../mcp/tools/get-errors"); +const _getpagemetadata = require("../mcp/tools/get-page-metadata"); +const _formaterrors = require("../mcp/tools/utils/format-errors"); +const _mcptelemetrytracker = require("../mcp/mcp-telemetry-tracker"); +const _filelogger = require("./browser-logs/file-logger"); +const _serializederrors = require("./serialized-errors"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +const wsServer = new _ws.default.Server({ + noServer: true +}); +const isTestMode = !!(process.env.NEXT_TEST_MODE || process.env.__NEXT_TEST_MODE || process.env.DEBUG); +const sessionId = Math.floor(Number.MAX_SAFE_INTEGER * Math.random()); +function setupServerHmr(project, { clear }) { + const serverHmrSubscriptions = new Map(); + /** + * Subscribe to HMR updates for a server chunk. + * @param chunkPath - Server chunk output path (e.g., "server/chunks/ssr/..._.js") + */ function subscribeToServerHmr(chunkPath) { + if (serverHmrSubscriptions.has(chunkPath)) { + return; + } + const subscription = project.hmrEvents(chunkPath, _swc.HmrTarget.Server); + serverHmrSubscriptions.set(chunkPath, subscription); + (async ()=>{ + // Skip initial state + await subscription.next(); + for await (const result of subscription){ + const update = result; + // Fully re-evaluate all chunks from disk. Clears the module cache and + // notifies browsers to refetch RSC. + if (update.type === 'restart') { + await clear(); + continue; + } + if (update.type !== 'partial') { + continue; + } + const instruction = update.instruction; + if (!instruction || instruction.type !== 'EcmascriptMergedUpdate') { + continue; + } + if (typeof __turbopack_server_hmr_apply__ === 'function') { + const applied = __turbopack_server_hmr_apply__(update); + if (!applied) { + await clear(); + } + } + } + })().catch(async (err)=>{ + console.error('[Server HMR] Subscription error:', err); + serverHmrSubscriptions.delete(chunkPath); + await clear(); + }); + } + // Listen to the Rust bindings update us on changing server HMR chunk paths + ; + (async ()=>{ + try { + const serverHmrChunkPaths = project.hmrChunkNamesSubscribe(_swc.HmrTarget.Server); + // Process chunk paths (both initial and subsequent updates) + for await (const data of serverHmrChunkPaths){ + const currentChunkPaths = new Set(data.chunkNames.filter((path)=>path.endsWith('.js'))); + // Clean up subscriptions for removed chunk paths (like when pages are deleted) + const chunkPathsToRemove = []; + for (const chunkPath of serverHmrSubscriptions.keys()){ + if (!currentChunkPaths.has(chunkPath)) { + chunkPathsToRemove.push(chunkPath); + } + } + for (const chunkPath of chunkPathsToRemove){ + var _subscription_return; + const subscription = serverHmrSubscriptions.get(chunkPath); + subscription == null ? void 0 : (_subscription_return = subscription.return) == null ? void 0 : _subscription_return.call(subscription); + serverHmrSubscriptions.delete(chunkPath); + } + // Subscribe to HMR events for new server chunks + for (const chunkPath of currentChunkPaths){ + if (!serverHmrSubscriptions.has(chunkPath)) { + subscribeToServerHmr(chunkPath); + } + } + } + } catch (err) { + console.error('[Server HMR Setup] Error in chunk path subscription:', err); + } + })(); + return serverHmrSubscriptions; +} +/** + * Replaces turbopack:///[project] with the specified project in the `source` field. + */ function rewriteTurbopackSources(projectRoot, sourceMap) { + if ('sections' in sourceMap) { + for (const section of sourceMap.sections){ + rewriteTurbopackSources(projectRoot, section.map); + } + } else { + for(let i = 0; i < sourceMap.sources.length; i++){ + sourceMap.sources[i] = (0, _url.pathToFileURL)((0, _path.join)(projectRoot, sourceMap.sources[i].replace(/turbopack:\/\/\/\[project\]/, ''))).toString(); + } + } +} +function getSourceMapFromTurbopack(project, projectRoot, sourceURL) { + let sourceMapJson = null; + try { + sourceMapJson = project.getSourceMapSync(sourceURL); + } catch (err) {} + if (sourceMapJson === null) { + return undefined; + } else { + const payload = JSON.parse(sourceMapJson); + // The sourcemap from Turbopack is not yet written to disk so its `sources` + // are not absolute paths yet. We need to rewrite them to be absolute paths. + rewriteTurbopackSources(projectRoot, payload); + return payload; + } +} +async function createHotReloaderTurbopack(opts, serverFields, distDir, resetFetch, lockfile, serverFastRefresh) { + var _opts_nextConfig_turbopack, _nextConfig_watchOptions, _opts_nextConfig_experimental; + const dev = true; + const buildId = 'development'; + const { nextConfig, dir: projectPath } = opts; + const bindings = (0, _swc.getBindingsSync)(); + // Turbopack requires native bindings and cannot run with WASM bindings. + // Detect this early and give a clear, actionable error message. + if (bindings.isWasm) { + throw Object.defineProperty(new Error(`Turbopack is not supported on this platform (${process.platform}/${process.arch}) because native bindings are not available. ` + `Only WebAssembly (WASM) bindings were loaded, and Turbopack requires native bindings.\n\n` + `To use Next.js on this platform, use Webpack instead:\n` + ` next dev --webpack\n\n` + `For more information, see: https://nextjs.org/docs/app/api-reference/turbopack#supported-platforms`), "__NEXT_ERROR_CODE", { + value: "E1049", + enumerable: false, + configurable: true + }); + } + // For the debugging purpose, check if createNext or equivalent next instance setup in test cases + // works correctly. Normally `run-test` hides output so only will be visible when `--debug` flag is used. + if (isTestMode) { + ; + require('console').log('Creating turbopack project', { + dir: projectPath, + testMode: isTestMode + }); + } + const hasRewrites = opts.fsChecker.rewrites.afterFiles.length > 0 || opts.fsChecker.rewrites.beforeFiles.length > 0 || opts.fsChecker.rewrites.fallback.length > 0; + const hotReloaderSpan = (0, _trace.trace)('hot-reloader', undefined, { + version: "16.2.6" + }); + // Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing + // of the current `next dev` invocation. + hotReloaderSpan.stop(); + // Initialize log monitor for file logging + // Enable logging by default in development mode + const mcpServerEnabled = !!nextConfig.experimental.mcpServer; + const fileLogger = (0, _filelogger.getFileLogger)(); + fileLogger.initialize(distDir, mcpServerEnabled); + const encryptionKey = await (0, _encryptionutilsserver.generateEncryptionKeyBase64)({ + isBuild: false, + distDir + }); + // TODO: Implement + let clientRouterFilters; + if (nextConfig.experimental.clientRouterFilter) { + // TODO this need to be set correctly for filesystem cache to work + } + const supportedBrowsers = (0, _getsupportedbrowsers.getSupportedBrowsers)(projectPath, dev); + const currentNodeJsVersion = process.versions.node; + const rootPath = ((_opts_nextConfig_turbopack = opts.nextConfig.turbopack) == null ? void 0 : _opts_nextConfig_turbopack.root) || opts.nextConfig.outputFileTracingRoot || projectPath; + const project = await bindings.turbo.createProject({ + rootPath, + projectPath: (0, _normalizepath.normalizePath)((0, _path.relative)(rootPath, projectPath) || '.'), + distDir, + nextConfig: opts.nextConfig, + watch: { + enable: dev, + pollIntervalMs: (_nextConfig_watchOptions = nextConfig.watchOptions) == null ? void 0 : _nextConfig_watchOptions.pollIntervalMs + }, + dev, + env: process.env, + defineEnv: (0, _swc.createDefineEnv)({ + isTurbopack: true, + clientRouterFilters, + config: nextConfig, + dev, + distDir, + projectPath, + fetchCacheKeyPrefix: opts.nextConfig.experimental.fetchCacheKeyPrefix, + hasRewrites, + // TODO: Implement + middlewareMatchers: undefined, + rewrites: opts.fsChecker.rewrites + }), + buildId, + encryptionKey, + previewProps: opts.fsChecker.previewProps, + browserslistQuery: supportedBrowsers.join(', '), + noMangling: false, + writeRoutesHashesManifest: false, + currentNodeJsVersion, + isPersistentCachingEnabled: (0, _utils2.isFileSystemCacheEnabledForDev)(opts.nextConfig), + nextVersion: "16.2.6", + serverHmr: serverFastRefresh + }, { + memoryLimit: (_opts_nextConfig_experimental = opts.nextConfig.experimental) == null ? void 0 : _opts_nextConfig_experimental.turbopackMemoryLimit, + isShortSession: false + }); + (0, _compilationevents.backgroundLogCompilationEvents)(project, { + eventTypes: [ + 'StartupCacheInvalidationEvent', + 'TimingEvent', + 'SlowFilesystemEvent', + 'TraceEvent' + ], + parentSpan: hotReloaderSpan + }); + (0, _patcherrorinspect.setBundlerFindSourceMapImplementation)(getSourceMapFromTurbopack.bind(null, project, projectPath)); + // Set up code frame renderer using native bindings + const { installCodeFrameSupport } = require('../lib/install-code-frame'); + installCodeFrameSupport(); + opts.onDevServerCleanup == null ? void 0 : opts.onDevServerCleanup.call(opts, async ()=>{ + (0, _patcherrorinspect.setBundlerFindSourceMapImplementation)(()=>undefined); + await project.onExit(); + await (lockfile == null ? void 0 : lockfile.unlock()); + }); + const entrypointsSubscription = project.entrypointsSubscribe(); + const currentWrittenEntrypoints = new Map(); + const currentEntrypoints = { + global: { + app: undefined, + document: undefined, + error: undefined, + middleware: undefined, + instrumentation: undefined + }, + page: new Map(), + app: new Map() + }; + const currentTopLevelIssues = new Map(); + const currentEntryIssues = new Map(); + const manifestLoader = new _manifestloader.TurbopackManifestLoader({ + buildId, + distDir, + encryptionKey, + dev: true, + sriEnabled: false + }); + // Dev specific + const changeSubscriptions = new Map(); + const serverPathState = new Map(); + const readyIds = new Set(); + let currentEntriesHandlingResolve; + let currentEntriesHandling = new Promise((resolve)=>currentEntriesHandlingResolve = resolve); + const assetMapper = new _turbopackutils.AssetMapper(); + // Deferred entries state management + const deferredEntriesConfig = nextConfig.experimental.deferredEntries; + const hasDeferredEntriesConfig = deferredEntriesConfig && deferredEntriesConfig.length > 0; + let onBeforeDeferredEntriesCalled = false; + let onBeforeDeferredEntriesPromise = null; + // Track non-deferred entries that are currently being built + const nonDeferredBuildingEntries = new Set(); + // Function to wait for all non-deferred entries to be built + async function waitForNonDeferredEntries() { + return new Promise((resolve)=>{ + const checkEntries = ()=>{ + // Check if there are any non-deferred entries that are still building + if (nonDeferredBuildingEntries.size === 0) { + resolve(); + } else { + // Check again after a short delay + setTimeout(checkEntries, 100); + } + }; + checkEntries(); + }); + } + // Function to handle deferred entry processing + async function processDeferredEntry() { + if (!hasDeferredEntriesConfig) return; + // Wait for all non-deferred entries to be built + await waitForNonDeferredEntries(); + // Call the onBeforeDeferredEntries callback once + if (!onBeforeDeferredEntriesCalled) { + onBeforeDeferredEntriesCalled = true; + if (nextConfig.experimental.onBeforeDeferredEntries) { + if (!onBeforeDeferredEntriesPromise) { + onBeforeDeferredEntriesPromise = nextConfig.experimental.onBeforeDeferredEntries(); + } + await onBeforeDeferredEntriesPromise; + } + } else if (onBeforeDeferredEntriesPromise) { + // Wait for any in-progress callback + await onBeforeDeferredEntriesPromise; + } + } + // Track whether HMR is pending - used to call callback once after HMR settles + let hmrPendingDeferredCallback = false; + // Debounced function to call onBeforeDeferredEntries after HMR + // This prevents rapid-fire calls when turbopack fires many update events + // Use 500ms debounce to ensure all rapid updates are batched together + const callOnBeforeDeferredEntriesAfterHMR = (0, _utils1.debounce)(()=>{ + // Only call if HMR triggered a need for the callback + if (hasDeferredEntriesConfig && hmrPendingDeferredCallback) { + hmrPendingDeferredCallback = false; + onBeforeDeferredEntriesCalled = true; + if (nextConfig.experimental.onBeforeDeferredEntries) { + onBeforeDeferredEntriesPromise = nextConfig.experimental.onBeforeDeferredEntries(); + } + } + }, 500); + function clearRequireCache(key, writtenEndpoint, { force } = {}) { + if (force) { + for (const { path, contentHash } of writtenEndpoint.serverPaths){ + // We ignore source maps + if (path.endsWith('.map')) continue; + const localKey = `${key}:${path}`; + serverPathState.set(localKey, contentHash); + serverPathState.set(path, contentHash); + } + } else { + // Figure out if the server files have changed + let hasChange = false; + for (const { path, contentHash } of writtenEndpoint.serverPaths){ + // We ignore source maps + if (path.endsWith('.map')) continue; + const localKey = `${key}:${path}`; + const localHash = serverPathState.get(localKey); + const globalHash = serverPathState.get(path); + if (localHash && localHash !== contentHash || globalHash && globalHash !== contentHash) { + hasChange = true; + serverPathState.set(localKey, contentHash); + serverPathState.set(path, contentHash); + } else { + if (!localHash) { + serverPathState.set(localKey, contentHash); + } + if (!globalHash) { + serverPathState.set(path, contentHash); + } + } + } + if (!hasChange) { + return false; + } + } + const serverPaths = writtenEndpoint.serverPaths.map(({ path: p })=>(0, _path.join)(distDir, p)); + const { type: entryType, page: entryPage } = (0, _entrykey.splitEntryKey)(key); + // Server HMR applies to App Router entries built with the Turbopack Node.js + // runtime: app pages and regular route handlers. Edge routes, Pages Router + // pages, middleware/instrumentation, and metadata routes (manifest.ts, + // robots.ts, sitemap.ts, icon.tsx, etc.) are excluded. Metadata routes are + // excluded because they serve HTTP responses directly and must re-execute + // on every request to pick up file changes; the in-place module update + // model of Server HMR does not apply to them. + const usesServerHmr = serverFastRefresh && entryType === 'app' && writtenEndpoint.type !== 'edge' && !(0, _ismetadataroute.isMetadataRoute)(entryPage); + const filesToDelete = []; + for (const file of serverPaths){ + (0, _renderserver.clearModuleContext)(file); + const relativePath = (0, _path.relative)(distDir, file); + if (// For Pages Router, edge routes, middleware, and manifest files: + // clear the sharedCache in evalManifest(), Node.js require.cache, + // and edge runtime module contexts. + force || !usesServerHmr || !(serverHmrSubscriptions == null ? void 0 : serverHmrSubscriptions.has(relativePath))) { + filesToDelete.push(file); + } + } + (0, _requirecache.deleteCache)(filesToDelete); + // Reset the fetch patch so patchFetch() can re-wrap on the next request. + if (serverPaths.length > 0) { + resetFetch(); + } + // Clear Turbopack's chunk-loading cache so chunks are re-required from disk on + // the next request. + // + // For App Router with server HMR, this is normally skipped as server HMR + // manages module updates in-place. However, it *is* required when force is `true` + // (like for .env file or tsconfig changes). + if ((!usesServerHmr || force) && typeof __next__clear_chunk_cache__ === 'function') { + __next__clear_chunk_cache__(); + } + return true; + } + const buildingIds = new Set(); + const startBuilding = (id, requestUrl, forceRebuild)=>{ + if (!forceRebuild && readyIds.has(id)) { + return ()=>{}; + } + if (buildingIds.size === 0) { + _store.store.setState({ + loading: true, + trigger: id, + url: requestUrl + }, true); + } + buildingIds.add(id); + return function finishBuilding() { + if (buildingIds.size === 0) { + return; + } + readyIds.add(id); + buildingIds.delete(id); + if (buildingIds.size === 0) { + hmrEventHappened = false; + _store.store.setState({ + loading: false + }, true); + } + }; + }; + let serverHmrSubscriptions; + let hmrEventHappened = false; + let hmrHash = 0; + const clientsWithoutHtmlRequestId = new Set(); + const clientsByHtmlRequestId = new Map(); + const cacheStatusesByHtmlRequestId = new Map(); + const clientStates = new WeakMap(); + function sendToClient(client, message) { + const data = typeof message.type === 'number' ? (0, _messages.createBinaryHmrMessageData)(message) : JSON.stringify(message); + client.send(data); + } + function sendEnqueuedMessages() { + for (const [, issueMap] of currentEntryIssues){ + if ([ + ...issueMap.values() + ].filter((i)=>i.severity !== 'warning').length > 0) { + // During compilation errors we want to delay the HMR events until errors are fixed + return; + } + } + for (const client of [ + ...clientsWithoutHtmlRequestId, + ...clientsByHtmlRequestId.values() + ]){ + const state = clientStates.get(client); + if (!state) { + continue; + } + for (const [, issueMap] of state.clientIssues){ + if ([ + ...issueMap.values() + ].filter((i)=>i.severity !== 'warning').length > 0) { + // During compilation errors we want to delay the HMR events until errors are fixed + return; + } + } + for (const message of state.messages.values()){ + sendToClient(client, message); + } + state.messages.clear(); + if (state.turbopackUpdates.length > 0) { + sendToClient(client, { + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.TURBOPACK_MESSAGE, + data: state.turbopackUpdates + }); + state.turbopackUpdates.length = 0; + } + } + } + const sendEnqueuedMessagesDebounce = (0, _utils1.debounce)(sendEnqueuedMessages, 2); + const sendHmr = (id, message)=>{ + for (const client of [ + ...clientsWithoutHtmlRequestId, + ...clientsByHtmlRequestId.values() + ]){ + var _clientStates_get; + (_clientStates_get = clientStates.get(client)) == null ? void 0 : _clientStates_get.messages.set(id, message); + } + hmrEventHappened = true; + sendEnqueuedMessagesDebounce(); + }; + function sendTurbopackMessage(payload) { + // TODO(PACK-2049): For some reason we end up emitting hundreds of issues messages on bigger apps, + // a lot of which are duplicates. + // They are currently not handled on the client at all, so might as well not send them for now. + payload.diagnostics = []; + payload.issues = []; + for (const client of [ + ...clientsWithoutHtmlRequestId, + ...clientsByHtmlRequestId.values() + ]){ + var _clientStates_get; + (_clientStates_get = clientStates.get(client)) == null ? void 0 : _clientStates_get.turbopackUpdates.push(payload); + } + hmrEventHappened = true; + sendEnqueuedMessagesDebounce(); + } + async function subscribeToClientChanges(key, includeIssues, endpoint, createMessage, onError) { + if (changeSubscriptions.has(key)) { + return; + } + const { side } = (0, _entrykey.splitEntryKey)(key); + const changedPromise = endpoint[`${side}Changed`](includeIssues); + changeSubscriptions.set(key, changedPromise); + try { + const changed = await changedPromise; + for await (const change of changed){ + (0, _utils2.processIssues)(currentEntryIssues, key, change, false, true); + // TODO: Get an actual content hash from Turbopack. + const message = await createMessage(change, String(++hmrHash)); + if (message) { + sendHmr(key, message); + } + } + } catch (e) { + changeSubscriptions.delete(key); + const payload = await (onError == null ? void 0 : onError(e)); + if (payload) { + sendHmr(key, payload); + } + return; + } + changeSubscriptions.delete(key); + } + async function unsubscribeFromClientChanges(key) { + const subscription = await changeSubscriptions.get(key); + if (subscription) { + await (subscription.return == null ? void 0 : subscription.return.call(subscription)); + changeSubscriptions.delete(key); + } + currentEntryIssues.delete(key); + } + async function subscribeToClientHmrEvents(client, id) { + const key = (0, _entrykey.getEntryKey)('assets', 'client', id); + if (!(0, _turbopackutils.hasEntrypointForKey)(currentEntrypoints, key, assetMapper)) { + // maybe throw an error / force the client to reload? + return; + } + const state = clientStates.get(client); + if (!state || state.subscriptions.has(id)) { + return; + } + const subscription = project.hmrEvents(id, _swc.HmrTarget.Client); + state.subscriptions.set(id, subscription); + // The subscription will always emit once, which is the initial + // computation. This is not a change, so swallow it. + try { + await subscription.next(); + for await (const data of subscription){ + (0, _utils2.processIssues)(state.clientIssues, key, data, false, true); + if (data.type !== 'issues') { + sendTurbopackMessage(data); + } + } + } catch (e) { + // The client might be using an HMR session from a previous server, tell them + // to fully reload the page to resolve the issue. We can't use + // `hotReloader.send` since that would force every connected client to + // reload, only this client is out of date. + const reloadMessage = { + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.RELOAD_PAGE, + data: `error in HMR event subscription for ${id}: ${e}` + }; + sendToClient(client, reloadMessage); + client.close(); + return; + } + } + function unsubscribeFromClientHmrEvents(client, id) { + const state = clientStates.get(client); + if (!state) { + return; + } + const subscription = state.subscriptions.get(id); + subscription == null ? void 0 : subscription.return(); + const key = (0, _entrykey.getEntryKey)('assets', 'client', id); + state.clientIssues.delete(key); + } + async function handleEntrypointsSubscription() { + for await (const entrypoints of entrypointsSubscription){ + if (!currentEntriesHandlingResolve) { + currentEntriesHandling = new Promise(// eslint-disable-next-line no-loop-func + (resolve)=>currentEntriesHandlingResolve = resolve); + } + // Always process issues/diagnostics, even if there are no entrypoints yet + (0, _turbopackutils.processTopLevelIssues)(currentTopLevelIssues, entrypoints); + // Certain crtical issues prevent any entrypoints from being constructed so return early + if (!('routes' in entrypoints)) { + (0, _printbuilderrors.printBuildErrors)(entrypoints, true); + currentEntriesHandlingResolve(); + currentEntriesHandlingResolve = undefined; + continue; + } + const routes = entrypoints.routes; + const existingRoutes = [ + ...currentEntrypoints.app.keys(), + ...currentEntrypoints.page.keys() + ]; + const newRoutes = [ + ...routes.keys() + ]; + const addedRoutes = newRoutes.filter((route)=>!currentEntrypoints.app.has(route) && !currentEntrypoints.page.has(route)); + const removedRoutes = existingRoutes.filter((route)=>!routes.has(route)); + await (0, _turbopackutils.handleEntrypoints)({ + entrypoints: entrypoints, + currentEntrypoints, + currentEntryIssues, + manifestLoader, + devRewrites: opts.fsChecker.rewrites, + productionRewrites: undefined, + logErrors: true, + dev: { + assetMapper, + changeSubscriptions, + clients: [ + ...clientsWithoutHtmlRequestId, + ...clientsByHtmlRequestId.values() + ], + clientStates, + serverFields, + hooks: { + handleWrittenEndpoint: (id, result, forceDeleteCache)=>{ + currentWrittenEntrypoints.set(id, result); + return clearRequireCache(id, result, { + force: forceDeleteCache + }); + }, + propagateServerField: _setupdevbundler.propagateServerField.bind(null, opts), + sendHmr, + startBuilding, + subscribeToChanges: subscribeToClientChanges, + unsubscribeFromChanges: unsubscribeFromClientChanges, + unsubscribeFromHmrEvents: unsubscribeFromClientHmrEvents + } + } + }); + // Reload matchers when the files have been compiled + await (0, _setupdevbundler.propagateServerField)(opts, 'reloadMatchers', undefined); + if (addedRoutes.length > 0 || removedRoutes.length > 0) { + // When the list of routes changes a new manifest should be fetched for Pages Router. + hotReloader.send({ + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.DEV_PAGES_MANIFEST_UPDATE, + data: [ + { + devPagesManifest: true + } + ] + }); + } + for (const route of addedRoutes){ + hotReloader.send({ + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.ADDED_PAGE, + data: [ + route + ] + }); + } + for (const route of removedRoutes){ + hotReloader.send({ + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.REMOVED_PAGE, + data: [ + route + ] + }); + } + currentEntriesHandlingResolve(); + currentEntriesHandlingResolve = undefined; + } + } + await (0, _promises.mkdir)((0, _path.join)(distDir, 'server'), { + recursive: true + }); + await (0, _promises.mkdir)((0, _path.join)(distDir, 'static', buildId), { + recursive: true + }); + await (0, _promises.writeFile)((0, _path.join)(distDir, 'package.json'), JSON.stringify({ + type: 'commonjs' + }, null, 2)); + const middlewares = [ + (0, _middlewareturbopack.getOverlayMiddleware)({ + project, + projectPath, + isSrcDir: opts.isSrcDir + }), + (0, _middlewareturbopack.getSourceMapMiddleware)(project), + (0, _getnexterrorfeedbackmiddleware.getNextErrorFeedbackMiddleware)(opts.telemetry), + (0, _getdevoverlayfontmiddleware.getDevOverlayFontMiddleware)(), + (0, _devindicatormiddleware.getDisableDevIndicatorMiddleware)(), + (0, _restartdevservermiddleware.getRestartDevServerMiddleware)({ + telemetry: opts.telemetry, + turbopackProject: project + }), + (0, _devtoolsconfigmiddleware.devToolsConfigMiddleware)({ + distDir, + sendUpdateSignal: (data)=>{ + hotReloader.send({ + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.DEVTOOLS_CONFIG, + data + }); + } + }), + (0, _attachnodejsdebuggermiddleware.getAttachNodejsDebuggerMiddleware)(), + ...nextConfig.experimental.mcpServer ? [ + (0, _getmcpmiddleware.getMcpMiddleware)({ + projectPath, + distDir, + nextConfig, + pagesDir: opts.pagesDir, + appDir: opts.appDir, + sendHmrMessage: (message)=>hotReloader.send(message), + getActiveConnectionCount: ()=>clientsWithoutHtmlRequestId.size + clientsByHtmlRequestId.size, + getDevServerUrl: ()=>process.env.__NEXT_PRIVATE_ORIGIN + }) + ] : [] + ]; + (0, _formaterrors.setStackFrameResolver)(async (request)=>{ + return (0, _middlewareturbopack.getOriginalStackFrames)({ + project, + projectPath, + isServer: request.isServer, + isEdgeServer: request.isEdgeServer, + isAppDirectory: request.isAppDirectory, + frames: request.frames + }); + }); + let versionInfoCached; + // This fetch, even though not awaited, is not kicked off eagerly because the first `fetch()` in + // Node.js adds roughly 20ms main-thread blocking to load the SSL certificate cache + // We don't want that blocking time to be in the hot path for the `ready in` logging. + // Instead, the fetch is kicked off lazily when the first `getVersionInfoCached()` is called. + const getVersionInfoCached = ()=>{ + if (!versionInfoCached) { + versionInfoCached = (0, _hotreloadersharedutils.getVersionInfo)(); + } + return versionInfoCached; + }; + let devtoolsFrontendUrl; + const inspectorURLRaw = _inspector.url(); + if (inspectorURLRaw !== undefined) { + const inspectorURL = new URL(inspectorURLRaw); + let debugInfo; + try { + const debugInfoList = await fetch(`http://${inspectorURL.host}/json/list`).then((res)=>res.json()); + debugInfo = debugInfoList[0]; + } catch {} + if (debugInfo) { + devtoolsFrontendUrl = debugInfo.devtoolsFrontendUrl; + } + } + const hotReloader = { + turbopackProject: project, + activeWebpackConfigs: undefined, + serverStats: null, + edgeServerStats: null, + async run (req, res, _parsedUrl) { + var _req_url; + // intercept page chunks request and ensure them with turbopack + if ((_req_url = req.url) == null ? void 0 : _req_url.startsWith('/_next/static/chunks/pages/')) { + const params = (0, _hotreloadersharedutils.matchNextPageBundleRequest)(req.url); + if (params) { + const decodedPagePath = `/${params.path.map((param)=>decodeURIComponent(param)).join('/')}`; + const denormalizedPagePath = (0, _denormalizepagepath.denormalizePagePath)(decodedPagePath); + await hotReloader.ensurePage({ + page: denormalizedPagePath, + clientOnly: false, + definition: undefined, + url: req.url + }).catch(console.error); + } + } + for (const middleware of middlewares){ + let calledNext = false; + await middleware(req, res, ()=>{ + calledNext = true; + }); + if (!calledNext) { + return { + finished: true + }; + } + } + // Request was not finished. + return { + finished: undefined + }; + }, + // TODO: Figure out if socket type can match the NextJsHotReloaderInterface + onHMR (req, socket, head, onUpgrade) { + wsServer.handleUpgrade(req, socket, head, (client)=>{ + const clientIssues = new Map(); + const subscriptions = new Map(); + const htmlRequestId = req.url ? new URL(req.url, 'http://n').searchParams.get('id') : null; + // Clients with a request ID are inferred App Router clients. If Cache + // Components is not enabled, we consider those legacy clients. Pages + // Router clients are also considered legacy clients. TODO: Maybe mark + // clients as App Router / Pages Router clients explicitly, instead of + // inferring it from the presence of a request ID. + if (htmlRequestId) { + clientsByHtmlRequestId.set(htmlRequestId, client); + const enableCacheComponents = nextConfig.cacheComponents; + if (enableCacheComponents) { + onUpgrade(client, { + isLegacyClient: false + }); + const cacheStatus = cacheStatusesByHtmlRequestId.get(htmlRequestId); + if (cacheStatus !== undefined) { + sendToClient(client, { + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.CACHE_INDICATOR, + state: cacheStatus + }); + cacheStatusesByHtmlRequestId.delete(htmlRequestId); + } + } else { + onUpgrade(client, { + isLegacyClient: true + }); + } + (0, _debugchannel.connectReactDebugChannelForHtmlRequest)(htmlRequestId, sendToClient.bind(null, client)); + (0, _serializederrors.sendSerializedErrorsToClientForHtmlRequest)(htmlRequestId, sendToClient.bind(null, client)); + } else { + clientsWithoutHtmlRequestId.add(client); + onUpgrade(client, { + isLegacyClient: true + }); + } + clientStates.set(client, { + clientIssues, + messages: new Map(), + turbopackUpdates: [], + subscriptions + }); + client.on('close', ()=>{ + // Remove active subscriptions + for (const subscription of subscriptions.values()){ + subscription.return == null ? void 0 : subscription.return.call(subscription); + } + clientStates.delete(client); + if (htmlRequestId) { + clientsByHtmlRequestId.delete(htmlRequestId); + (0, _debugchannel.deleteReactDebugChannelForHtmlRequest)(htmlRequestId); + } else { + clientsWithoutHtmlRequestId.delete(client); + } + }); + client.addEventListener('message', async ({ data })=>{ + const parsedData = JSON.parse(typeof data !== 'string' ? data.toString() : data); + // Next.js messages + switch(parsedData.event){ + case 'span-end': + { + hotReloaderSpan.manualTraceChild(parsedData.spanName, (0, _turbopackutils.msToNs)(parsedData.startTime), (0, _turbopackutils.msToNs)(parsedData.endTime), parsedData.attributes); + break; + } + case 'client-hmr-latency': + hotReloaderSpan.manualTraceChild(parsedData.event, (0, _turbopackutils.msToNs)(parsedData.startTime), (0, _turbopackutils.msToNs)(parsedData.endTime), { + updatedModules: parsedData.updatedModules, + page: parsedData.page, + isPageHidden: parsedData.isPageHidden + }); + break; + case 'client-error': + case 'client-warning': + case 'client-success': + case 'server-component-reload-page': + case 'client-reload-page': + case 'client-removed-page': + case 'client-full-reload': + const { hadRuntimeError, dependencyChain } = parsedData; + if (hadRuntimeError) { + _log.warn(_messages.FAST_REFRESH_RUNTIME_RELOAD); + } + if (Array.isArray(dependencyChain) && typeof dependencyChain[0] === 'string') { + const cleanedModulePath = dependencyChain[0].replace(/^\[project\]/, '.').replace(/ \[.*\] \(.*\)$/, ''); + _log.warn(`Fast Refresh had to perform a full reload when ${cleanedModulePath} changed. Read more: https://nextjs.org/docs/messages/fast-refresh-reload`); + } + break; + case 'client-added-page': + break; + case 'browser-logs': + { + const browserToTerminalConfig = nextConfig.logging && nextConfig.logging.browserToTerminal; + if (browserToTerminalConfig) { + await (0, _receivelogs.receiveBrowserLogsTurbopack)({ + entries: parsedData.entries, + router: parsedData.router, + sourceType: parsedData.sourceType, + project, + projectPath, + distDir, + config: browserToTerminalConfig + }); + } + break; + } + case 'client-file-logs': + { + // Always log to file regardless of terminal flag + await (0, _receivelogs.handleClientFileLogs)(parsedData.logs); + break; + } + case 'ping': + { + break; + } + case 'mcp-error-state-response': + { + (0, _geterrors.handleErrorStateResponse)(parsedData.requestId, parsedData.errorState, parsedData.url); + break; + } + case 'mcp-page-metadata-response': + { + (0, _getpagemetadata.handlePageMetadataResponse)(parsedData.requestId, parsedData.segmentTrieData, parsedData.url); + break; + } + default: + // Might be a Turbopack message... + if (!parsedData.type) { + throw Object.defineProperty(new Error(`unrecognized HMR message "${data}"`), "__NEXT_ERROR_CODE", { + value: "E155", + enumerable: false, + configurable: true + }); + } + } + // Turbopack messages + switch(parsedData.type){ + case 'turbopack-subscribe': + subscribeToClientHmrEvents(client, parsedData.path); + break; + case 'turbopack-unsubscribe': + unsubscribeFromClientHmrEvents(client, parsedData.path); + break; + default: + if (!parsedData.event) { + throw Object.defineProperty(new Error(`unrecognized Turbopack HMR message "${data}"`), "__NEXT_ERROR_CODE", { + value: "E492", + enumerable: false, + configurable: true + }); + } + } + }); + const turbopackConnectedMessage = { + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.TURBOPACK_CONNECTED, + data: { + sessionId + } + }; + sendToClient(client, turbopackConnectedMessage); + const errors = []; + for (const entryIssues of currentEntryIssues.values()){ + for (const issue of entryIssues.values()){ + if (issue.severity !== 'warning') { + errors.push({ + message: (0, _utils2.formatIssue)(issue) + }); + } else { + (0, _turbopackutils.printNonFatalIssue)(issue); + } + } + } + if (_devindicatorserverstate.devIndicatorServerState.disabledUntil < Date.now()) { + _devindicatorserverstate.devIndicatorServerState.disabledUntil = 0; + } + ; + (async function() { + const versionInfo = await getVersionInfoCached(); + const devToolsConfig = await (0, _devtoolsconfigmiddleware.getDevToolsConfig)(distDir); + const syncMessage = { + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.SYNC, + errors, + warnings: [], + hash: '', + versionInfo, + debug: { + devtoolsFrontendUrl + }, + devIndicator: _devindicatorserverstate.devIndicatorServerState, + devToolsConfig + }; + sendToClient(client, syncMessage); + })(); + }); + }, + send (action) { + const payload = JSON.stringify(action); + for (const client of [ + ...clientsWithoutHtmlRequestId, + ...clientsByHtmlRequestId.values() + ]){ + client.send(payload); + } + }, + sendToLegacyClients (action) { + const payload = JSON.stringify(action); + // Clients with a request ID are inferred App Router clients. If Cache + // Components is not enabled, we consider those legacy clients. Pages + // Router clients are also considered legacy clients. TODO: Maybe mark + // clients as App Router / Pages Router clients explicitly, instead of + // inferring it from the presence of a request ID. + if (!nextConfig.cacheComponents) { + for (const client of clientsByHtmlRequestId.values()){ + client.send(payload); + } + } + for (const client of clientsWithoutHtmlRequestId){ + client.send(payload); + } + }, + setCacheStatus (status, htmlRequestId) { + // Legacy clients don't have Cache Components. + const client = clientsByHtmlRequestId.get(htmlRequestId); + if (client !== undefined) { + sendToClient(client, { + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.CACHE_INDICATOR, + state: status + }); + } else { + // If the client is not connected, store the status so that we can send it + // when the client connects. + cacheStatusesByHtmlRequestId.set(htmlRequestId, status); + } + }, + setReactDebugChannel (debugChannel, htmlRequestId, requestId) { + const client = clientsByHtmlRequestId.get(htmlRequestId); + if (htmlRequestId === requestId) { + // The debug channel is for the HTML request. + if (client) { + // If the client is connected, we can connect the debug channel for + // the HTML request immediately. + (0, _debugchannel.connectReactDebugChannel)(htmlRequestId, debugChannel, sendToClient.bind(null, client)); + } else { + // Otherwise, we'll do that when the client connects and just store + // the debug channel. + (0, _debugchannel.setReactDebugChannelForHtmlRequest)(htmlRequestId, debugChannel); + } + } else if (client) { + // The debug channel is for a subsequent request (e.g. client-side + // navigation for server function call). If the client is not connected + // anymore, we don't need to connect the debug channel. + (0, _debugchannel.connectReactDebugChannel)(requestId, debugChannel, sendToClient.bind(null, client)); + } + }, + sendErrorsToBrowser (errorsRscStream, htmlRequestId) { + const client = clientsByHtmlRequestId.get(htmlRequestId); + if (client) { + // If the client is connected, we can send the errors immediately. + (0, _serializederrors.sendSerializedErrorsToClient)(errorsRscStream, sendToClient.bind(null, client)); + } else { + // Otherwise, store the errors stream so that we can send it when the + // client connects. + (0, _serializederrors.setErrorsRscStreamForHtmlRequest)(htmlRequestId, errorsRscStream); + } + }, + setHmrServerError (_error) { + // Not implemented yet. + }, + clearHmrServerError () { + // Not implemented yet. + }, + async start () {}, + async getCompilationErrors (page) { + const appEntryKey = (0, _entrykey.getEntryKey)('app', 'server', page); + const pagesEntryKey = (0, _entrykey.getEntryKey)('pages', 'server', page); + const topLevelIssues = currentTopLevelIssues.values(); + const thisEntryIssues = currentEntryIssues.get(appEntryKey) ?? currentEntryIssues.get(pagesEntryKey); + if (thisEntryIssues !== undefined && thisEntryIssues.size > 0) { + // If there is an error related to the requesting page we display it instead of the first error + return [ + ...topLevelIssues, + ...thisEntryIssues.values() + ].map((issue)=>{ + const formattedIssue = (0, _utils2.formatIssue)(issue); + if (issue.severity === 'warning') { + (0, _turbopackutils.printNonFatalIssue)(issue); + return null; + } else if ((0, _utils2.isWellKnownError)(issue)) { + _log.error(formattedIssue); + } + return Object.defineProperty(new Error(formattedIssue), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + }).filter((error)=>error !== null); + } + // Otherwise, return all errors across pages + const errors = []; + for (const issue of topLevelIssues){ + if (issue.severity !== 'warning') { + errors.push(Object.defineProperty(new Error((0, _utils2.formatIssue)(issue)), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + })); + } + } + for (const entryIssues of currentEntryIssues.values()){ + for (const issue of entryIssues.values()){ + if (issue.severity !== 'warning') { + const message = (0, _utils2.formatIssue)(issue); + errors.push(Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + })); + } else { + (0, _turbopackutils.printNonFatalIssue)(issue); + } + } + } + return errors; + }, + async invalidate ({ // .env files or tsconfig/jsconfig change + reloadAfterInvalidation }) { + if (reloadAfterInvalidation) { + for (const [key, entrypoint] of currentWrittenEntrypoints){ + clearRequireCache(key, entrypoint, { + force: true + }); + } + await (0, _renderserver.clearAllModuleContexts)(); + this.send({ + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.SERVER_COMPONENT_CHANGES, + hash: String(++hmrHash) + }); + } + }, + async buildFallbackError () { + // Not implemented yet. + }, + async ensurePage ({ page: inputPage, // Unused parameters + // clientOnly, + appPaths, definition, isApp, url: requestUrl }) { + // When there is no route definition this is an internal file not a route the user added. + // Middleware and instrumentation are handled in turbpack-utils.ts handleEntrypoints instead. + if (!definition) { + if (inputPage === '/middleware') return; + if (inputPage === '/src/middleware') return; + if (inputPage === '/instrumentation') return; + if (inputPage === '/src/instrumentation') return; + } + return hotReloaderSpan.traceChild('ensure-page', { + inputPage + }).traceAsyncFn(async ()=>{ + if (_constants.BLOCKED_PAGES.includes(inputPage) && inputPage !== '/_error') { + return; + } + await currentEntriesHandling; + // TODO We shouldn't look into the filesystem again. This should use the information from entrypoints + let routeDef = definition ?? await (0, _ondemandentryhandler.findPagePathData)(projectPath, inputPage, nextConfig.pageExtensions, opts.pagesDir, opts.appDir, !!nextConfig.experimental.globalNotFound); + // If the route is actually an app page route, then we should have access + // to the app route definition, and therefore, the appPaths from it. + if (!appPaths && definition && (0, _apppageroutedefinition.isAppPageRouteDefinition)(definition)) { + appPaths = definition.appPaths; + } + // Check if this is a deferred entry and wait for non-deferred entries first + if (hasDeferredEntriesConfig) { + const isDeferred = (0, _entries.isDeferredEntry)(routeDef.page, deferredEntriesConfig); + if (isDeferred) { + await processDeferredEntry(); + } else { + // Track non-deferred entry as building + nonDeferredBuildingEntries.add(routeDef.page); + } + } + let page = routeDef.page; + if (appPaths) { + const normalizedPage = (0, _apppaths.normalizeAppPath)(page); + // filter out paths that are not exact matches (e.g. catchall) + const matchingAppPaths = appPaths.filter((path)=>(0, _apppaths.normalizeAppPath)(path) === normalizedPage); + // the last item in the array is the root page, if there are parallel routes + page = matchingAppPaths[matchingAppPaths.length - 1]; + } + const pathname = (definition == null ? void 0 : definition.pathname) ?? inputPage; + if (page === '/_error') { + let finishBuilding = startBuilding(pathname, requestUrl, false); + try { + await (0, _turbopackutils.handlePagesErrorRoute)({ + currentEntryIssues, + entrypoints: currentEntrypoints, + manifestLoader, + devRewrites: opts.fsChecker.rewrites, + productionRewrites: undefined, + logErrors: true, + hooks: { + subscribeToChanges: subscribeToClientChanges, + handleWrittenEndpoint: (id, result, forceDeleteCache)=>{ + currentWrittenEntrypoints.set(id, result); + assetMapper.setPathsForKey(id, result.clientPaths); + return clearRequireCache(id, result, { + force: forceDeleteCache + }); + } + } + }); + } finally{ + finishBuilding(); + } + return; + } + const isInsideAppDir = routeDef.bundlePath.startsWith('app/'); + const isEntryMetadataRouteFile = (0, _ismetadataroute.isMetadataRouteFile)(routeDef.filename.replace(opts.appDir || '', ''), nextConfig.pageExtensions, true); + const normalizedAppPage = isEntryMetadataRouteFile ? (0, _turbopackutils.normalizedPageToTurbopackStructureRoute)(page, (0, _path.extname)(routeDef.filename)) : page; + const route = isInsideAppDir ? currentEntrypoints.app.get(normalizedAppPage) : currentEntrypoints.page.get(page); + if (!route) { + // TODO: why is this entry missing in turbopack? + if (page === '/middleware') return; + if (page === '/src/middleware') return; + if (page === '/proxy') return; + if (page === '/src/proxy') return; + if (page === '/instrumentation') return; + if (page === '/src/instrumentation') return; + throw new _utils.PageNotFoundError(`route not found ${page}`); + } + // We don't throw on ensureOpts.isApp === true for page-api + // since this can happen when app pages make + // api requests to page API routes. + if (isApp && route.type === 'page') { + throw Object.defineProperty(new Error(`mis-matched route type: isApp && page for ${page}`), "__NEXT_ERROR_CODE", { + value: "E373", + enumerable: false, + configurable: true + }); + } + const finishBuilding = startBuilding(pathname, requestUrl, false); + try { + await (0, _turbopackutils.handleRouteType)({ + dev, + page, + pathname, + route, + currentEntryIssues, + entrypoints: currentEntrypoints, + manifestLoader, + readyIds, + devRewrites: opts.fsChecker.rewrites, + productionRewrites: undefined, + logErrors: true, + hooks: { + subscribeToChanges: subscribeToClientChanges, + handleWrittenEndpoint: (id, result, forceDeleteCache)=>{ + currentWrittenEntrypoints.set(id, result); + assetMapper.setPathsForKey(id, result.clientPaths); + return clearRequireCache(id, result, { + force: forceDeleteCache + }); + } + } + }); + } finally{ + finishBuilding(); + // Remove non-deferred entry from building set + if (hasDeferredEntriesConfig) { + nonDeferredBuildingEntries.delete(routeDef.page); + } + } + }); + }, + close () { + // Report MCP telemetry if MCP server is enabled + (0, _mcptelemetrytracker.recordMcpTelemetry)(opts.telemetry); + for (const wsClient of [ + ...clientsWithoutHtmlRequestId, + ...clientsByHtmlRequestId.values() + ]){ + // it's okay to not cleanly close these websocket connections, this is dev + wsClient.terminate(); + } + clientsWithoutHtmlRequestId.clear(); + clientsByHtmlRequestId.clear(); + } + }; + handleEntrypointsSubscription().catch((err)=>{ + console.error(err); + process.exit(1); + }); + // Write empty manifests + await currentEntriesHandling; + await manifestLoader.writeManifests({ + devRewrites: opts.fsChecker.rewrites, + productionRewrites: undefined, + entrypoints: currentEntrypoints + }); + async function handleProjectUpdates() { + for await (const updateMessage of project.updateInfoSubscribe(30)){ + switch(updateMessage.updateType){ + case 'start': + { + hotReloader.send({ + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.BUILDING + }); + // Mark that HMR has started and we need to call the callback after it settles + // This ensures onBeforeDeferredEntries will be called again during HMR + if (hasDeferredEntriesConfig) { + hmrPendingDeferredCallback = true; + onBeforeDeferredEntriesCalled = false; + onBeforeDeferredEntriesPromise = null; + } + break; + } + case 'end': + { + sendEnqueuedMessages(); + function addToErrorsMap(errorsMap, issueMap) { + for (const [key, issue] of issueMap){ + if (issue.severity === 'warning') continue; + if (errorsMap.has(key)) continue; + const message = (0, _utils2.formatIssue)(issue); + errorsMap.set(key, { + message, + details: issue.detail ? (0, _utils2.renderStyledStringToErrorAnsi)(issue.detail) : undefined + }); + } + } + function addErrors(errorsMap, issues) { + for (const issueMap of issues.values()){ + addToErrorsMap(errorsMap, issueMap); + } + } + const errors = new Map(); + addToErrorsMap(errors, currentTopLevelIssues); + addErrors(errors, currentEntryIssues); + for (const client of [ + ...clientsWithoutHtmlRequestId, + ...clientsByHtmlRequestId.values() + ]){ + const state = clientStates.get(client); + if (!state) { + continue; + } + const clientErrors = new Map(errors); + addErrors(clientErrors, state.clientIssues); + sendToClient(client, { + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.BUILT, + hash: String(++hmrHash), + errors: [ + ...clientErrors.values() + ], + warnings: [] + }); + } + if (hmrEventHappened) { + const time = updateMessage.value.duration; + const timeMessage = time > 2000 ? `${Math.round(time / 100) / 10}s` : `${time}ms`; + _log.event(`Compiled in ${timeMessage}`); + hmrEventHappened = false; + } + // Call onBeforeDeferredEntries after compilation completes during HMR + // This ensures the callback is invoked even when non-deferred entries change + // Use debounced function to prevent rapid-fire calls from turbopack updates + if (hasDeferredEntriesConfig) { + callOnBeforeDeferredEntriesAfterHMR(); + } + break; + } + default: + } + } + } + handleProjectUpdates().catch((err)=>{ + console.error(err); + process.exit(1); + }); + if (serverFastRefresh) { + serverHmrSubscriptions = setupServerHmr(project, { + clear: async ()=>{ + // Clear Node's require cache of all Turbopack-built modules + const chunkPaths = [ + ...(serverHmrSubscriptions == null ? void 0 : serverHmrSubscriptions.keys()) ?? [] + ].map((chunkPath)=>(0, _path.join)(distDir, chunkPath)); + (0, _requirecache.deleteCache)(chunkPaths); + // Clear Turbopack's runtime caches + if (typeof __next__clear_chunk_cache__ === 'function') { + __next__clear_chunk_cache__(); + } + // Reset the server HMR handler registry. All server runtime chunks are + // cleared from require.cache above; when they're next required they'll + // re-register into this Map and reinstall the routing dispatcher. + ; + globalThis.__turbopack_server_hmr_handlers__ = new Map(); + // Clear all edge contexts + await (0, _renderserver.clearAllModuleContexts)(); + resetFetch(); + // Tell browsers to refetch RSC (soft refresh, not full page reload) + hotReloader.send({ + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.SERVER_COMPONENT_CHANGES, + hash: String(++hmrHash) + }); + } + }); + } + return hotReloader; +} + +//# sourceMappingURL=hot-reloader-turbopack.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/dev/hot-reloader-types.js b/build/node_modules/next/dist/server/dev/hot-reloader-types.js new file mode 100644 index 0000000..2b026cb --- /dev/null +++ b/build/node_modules/next/dist/server/dev/hot-reloader-types.js @@ -0,0 +1,58 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + HMR_MESSAGE_SENT_TO_BROWSER: null, + HMR_MESSAGE_SENT_TO_SERVER: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + HMR_MESSAGE_SENT_TO_BROWSER: function() { + return HMR_MESSAGE_SENT_TO_BROWSER; + }, + HMR_MESSAGE_SENT_TO_SERVER: function() { + return HMR_MESSAGE_SENT_TO_SERVER; + } +}); +var HMR_MESSAGE_SENT_TO_BROWSER = /*#__PURE__*/ function(HMR_MESSAGE_SENT_TO_BROWSER) { + // JSON messages: + HMR_MESSAGE_SENT_TO_BROWSER["ADDED_PAGE"] = "addedPage"; + HMR_MESSAGE_SENT_TO_BROWSER["REMOVED_PAGE"] = "removedPage"; + HMR_MESSAGE_SENT_TO_BROWSER["RELOAD_PAGE"] = "reloadPage"; + HMR_MESSAGE_SENT_TO_BROWSER["SERVER_COMPONENT_CHANGES"] = "serverComponentChanges"; + HMR_MESSAGE_SENT_TO_BROWSER["MIDDLEWARE_CHANGES"] = "middlewareChanges"; + HMR_MESSAGE_SENT_TO_BROWSER["CLIENT_CHANGES"] = "clientChanges"; + HMR_MESSAGE_SENT_TO_BROWSER["SERVER_ONLY_CHANGES"] = "serverOnlyChanges"; + HMR_MESSAGE_SENT_TO_BROWSER["SYNC"] = "sync"; + HMR_MESSAGE_SENT_TO_BROWSER["BUILT"] = "built"; + HMR_MESSAGE_SENT_TO_BROWSER["BUILDING"] = "building"; + HMR_MESSAGE_SENT_TO_BROWSER["DEV_PAGES_MANIFEST_UPDATE"] = "devPagesManifestUpdate"; + HMR_MESSAGE_SENT_TO_BROWSER["TURBOPACK_MESSAGE"] = "turbopack-message"; + HMR_MESSAGE_SENT_TO_BROWSER["SERVER_ERROR"] = "serverError"; + HMR_MESSAGE_SENT_TO_BROWSER["TURBOPACK_CONNECTED"] = "turbopack-connected"; + HMR_MESSAGE_SENT_TO_BROWSER["ISR_MANIFEST"] = "isrManifest"; + HMR_MESSAGE_SENT_TO_BROWSER["CACHE_INDICATOR"] = "cacheIndicator"; + HMR_MESSAGE_SENT_TO_BROWSER["DEV_INDICATOR"] = "devIndicator"; + HMR_MESSAGE_SENT_TO_BROWSER["DEVTOOLS_CONFIG"] = "devtoolsConfig"; + HMR_MESSAGE_SENT_TO_BROWSER["REQUEST_CURRENT_ERROR_STATE"] = "requestCurrentErrorState"; + HMR_MESSAGE_SENT_TO_BROWSER["REQUEST_PAGE_METADATA"] = "requestPageMetadata"; + // Binary messages: + HMR_MESSAGE_SENT_TO_BROWSER[HMR_MESSAGE_SENT_TO_BROWSER["REACT_DEBUG_CHUNK"] = 0] = "REACT_DEBUG_CHUNK"; + HMR_MESSAGE_SENT_TO_BROWSER[HMR_MESSAGE_SENT_TO_BROWSER["ERRORS_TO_SHOW_IN_BROWSER"] = 1] = "ERRORS_TO_SHOW_IN_BROWSER"; + return HMR_MESSAGE_SENT_TO_BROWSER; +}({}); +var HMR_MESSAGE_SENT_TO_SERVER = /*#__PURE__*/ function(HMR_MESSAGE_SENT_TO_SERVER) { + // JSON messages: + HMR_MESSAGE_SENT_TO_SERVER["MCP_ERROR_STATE_RESPONSE"] = "mcp-error-state-response"; + HMR_MESSAGE_SENT_TO_SERVER["MCP_PAGE_METADATA_RESPONSE"] = "mcp-page-metadata-response"; + HMR_MESSAGE_SENT_TO_SERVER["PING"] = "ping"; + return HMR_MESSAGE_SENT_TO_SERVER; +}({}); + +//# sourceMappingURL=hot-reloader-types.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/dev/hot-reloader-webpack.js b/build/node_modules/next/dist/server/dev/hot-reloader-webpack.js new file mode 100644 index 0000000..96c0e9c --- /dev/null +++ b/build/node_modules/next/dist/server/dev/hot-reloader-webpack.js @@ -0,0 +1,1386 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + default: null, + renderScriptError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + default: function() { + return HotReloaderWebpack; + }, + renderScriptError: function() { + return renderScriptError; + } +}); +const _webpack = require("next/dist/compiled/webpack/webpack"); +const _middlewarewebpack = require("./middleware-webpack"); +const _hotmiddleware = require("./hot-middleware"); +const _inspector = /*#__PURE__*/ _interop_require_wildcard(require("inspector")); +const _path = require("path"); +const _entries = require("../../build/entries"); +const _routediscovery = require("../../build/route-discovery"); +const _getstaticinfoincludinglayouts = require("../../build/get-static-info-including-layouts"); +const _output = require("../../build/output"); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("../../build/output/log")); +const _webpackconfig = /*#__PURE__*/ _interop_require_wildcard(require("../../build/webpack-config")); +const _constants = require("../../lib/constants"); +const _recursivedelete = require("../../lib/recursive-delete"); +const _constants1 = require("../../shared/lib/constants"); +const _findpagefile = require("../lib/find-page-file"); +const _ondemandentryhandler = require("./on-demand-entry-handler"); +const _denormalizepagepath = require("../../shared/lib/page-path/denormalize-page-path"); +const _normalizepathsep = require("../../shared/lib/page-path/normalize-path-sep"); +const _getroutefromentrypoint = /*#__PURE__*/ _interop_require_default(require("../get-route-from-entrypoint")); +const _utils = require("../../build/utils"); +const _utils1 = require("../../shared/lib/utils"); +const _trace = require("../../trace"); +const _iserror = require("../../lib/is-error"); +const _ws = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/ws")); +const _fs = require("fs"); +const _isapiroute = require("../../lib/is-api-route"); +const _nextrouteloader = require("../../build/webpack/loaders/next-route-loader"); +const _isinternalcomponent = require("../../lib/is-internal-component"); +const _routekind = require("../route-kind"); +const _hotreloadertypes = require("./hot-reloader-types"); +const _pagetypes = require("../../lib/page-types"); +const _messages = require("./messages"); +const _getnexterrorfeedbackmiddleware = require("../../next-devtools/server/get-next-error-feedback-middleware"); +const _getdevoverlayfontmiddleware = require("../../next-devtools/server/font/get-dev-overlay-font-middleware"); +const _devindicatormiddleware = require("../../next-devtools/server/dev-indicator-middleware"); +const _getwebpackbundler = /*#__PURE__*/ _interop_require_default(require("../../shared/lib/get-webpack-bundler")); +const _restartdevservermiddleware = require("../../next-devtools/server/restart-dev-server-middleware"); +const _cacheinvalidation = require("../../build/webpack/cache-invalidation"); +const _receivelogs = require("./browser-logs/receive-logs"); +const _devtoolsconfigmiddleware = require("../../next-devtools/server/devtools-config-middleware"); +const _attachnodejsdebuggermiddleware = require("../../next-devtools/server/attach-nodejs-debugger-middleware"); +const _invarianterror = require("../../shared/lib/invariant-error"); +const _debugchannel = require("./debug-channel"); +const _hotreloadersharedutils = require("./hot-reloader-shared-utils"); +const _getmcpmiddleware = require("../mcp/get-mcp-middleware"); +const _formaterrors = require("../mcp/tools/utils/format-errors"); +const _mcptelemetrytracker = require("../mcp/mcp-telemetry-tracker"); +const _filelogger = require("./browser-logs/file-logger"); +const _serializederrors = require("./serialized-errors"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +const MILLISECONDS_IN_NANOSECOND = BigInt(1000000); +function diff(a, b) { + return new Set([ + ...a + ].filter((v)=>!b.has(v))); +} +const wsServer = new _ws.default.Server({ + noServer: true +}); +async function renderScriptError(res, error, { verbose = true } = {}) { + // Asks CDNs and others to not to cache the errored page + res.setHeader('Cache-Control', 'no-cache, no-store, max-age=0, must-revalidate'); + if (error.code === 'ENOENT') { + return { + finished: undefined + }; + } + if (verbose) { + console.error(error.stack); + } + res.statusCode = 500; + res.end('500 - Internal Error'); + return { + finished: true + }; +} +function addCorsSupport(req, res) { + // Only rewrite CORS handling when URL matches a hot-reloader middleware + if (!req.url.startsWith('/__next')) { + return { + preflight: false + }; + } + if (!req.headers.origin) { + return { + preflight: false + }; + } + res.setHeader('Access-Control-Allow-Origin', req.headers.origin); + res.setHeader('Access-Control-Allow-Methods', 'OPTIONS, GET'); + // Based on https://github.com/primus/access-control/blob/4cf1bc0e54b086c91e6aa44fb14966fa5ef7549c/index.js#L158 + if (req.headers['access-control-request-headers']) { + res.setHeader('Access-Control-Allow-Headers', req.headers['access-control-request-headers']); + } + if (req.method === 'OPTIONS') { + res.writeHead(200); + res.end(); + return { + preflight: true + }; + } + return { + preflight: false + }; +} +// Iteratively look up the issuer till it ends up at the root +function findEntryModule(module1, compilation) { + for(;;){ + const issuer = compilation.moduleGraph.getIssuer(module1); + if (!issuer) return module1; + module1 = issuer; + } +} +function erroredPages(compilation) { + const failedPages = {}; + for (const error of compilation.errors){ + if (!error.module) { + continue; + } + const entryModule = findEntryModule(error.module, compilation); + const { name } = entryModule; + if (!name) { + continue; + } + // Only pages have to be reloaded + const enhancedName = (0, _getroutefromentrypoint.default)(name); + if (!enhancedName) { + continue; + } + if (!failedPages[enhancedName]) { + failedPages[enhancedName] = []; + } + failedPages[enhancedName].push(error); + } + return failedPages; +} +class HotReloaderWebpack { + constructor(dir, { config, isSrcDir, pagesDir, distDir, buildId, encryptionKey, previewProps, rewrites, appDir, telemetry, resetFetch, lockfile, onDevServerCleanup }){ + this.clientError = null; + this.serverError = null; + this.hmrServerError = null; + this.pagesMapping = {}; + this.versionInfo = { + staleness: 'unknown', + installed: '0.0.0' + }; + this.reloadAfterInvalidation = false; + this.cacheStatusesByRequestId = new Map(); + this.hasAppRouterEntrypoints = false; + this.hasPagesRouterEntrypoints = false; + this.buildId = buildId; + this.encryptionKey = encryptionKey; + this.dir = dir; + this.isSrcDir = isSrcDir; + this.middlewares = []; + this.pagesDir = pagesDir; + this.appDir = appDir; + this.distDir = distDir; + this.clientStats = null; + this.serverStats = null; + this.edgeServerStats = null; + this.serverPrevDocumentHash = null; + this.telemetry = telemetry; + this.resetFetch = resetFetch; + this.lockfile = lockfile; + this.config = config; + this.previewProps = previewProps; + this.rewrites = rewrites; + this.hotReloaderSpan = (0, _trace.trace)('hot-reloader', undefined, { + version: "16.2.6" + }); + // Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing + // of the current `next dev` invocation. + this.hotReloaderSpan.stop(); + // Initialize log monitor for file logging + // Enable logging by default in development mode + const mcpServerEnabled = !!config.experimental.mcpServer; + const fileLogger = (0, _filelogger.getFileLogger)(); + fileLogger.initialize(this.distDir, mcpServerEnabled); + onDevServerCleanup == null ? void 0 : onDevServerCleanup(async ()=>{ + await (lockfile == null ? void 0 : lockfile.unlock()); + }); + } + async run(req, res, parsedUrl) { + // Usually CORS support is not needed for the hot-reloader (this is dev only feature) + // With when the app runs for multi-zones support behind a proxy, + // the current page is trying to access this URL via assetPrefix. + // That's when the CORS support is needed. + const { preflight } = addCorsSupport(req, res); + if (preflight) { + return {}; + } + // When a request comes in that is a page bundle, e.g. /_next/static//pages/index.js + // we have to compile the page using on-demand-entries, this middleware will handle doing that + // by adding the page to on-demand-entries, waiting till it's done + // and then the bundle will be served like usual by the actual route in server/index.js + const handlePageBundleRequest = async (pageBundleRes, parsedPageBundleUrl)=>{ + const { pathname } = parsedPageBundleUrl; + if (!pathname) return {}; + const params = (0, _hotreloadersharedutils.matchNextPageBundleRequest)(pathname); + if (!params) return {}; + let decodedPagePath; + try { + decodedPagePath = `/${params.path.map((param)=>decodeURIComponent(param)).join('/')}`; + } catch (_) { + throw Object.defineProperty(new _utils1.DecodeError('failed to decode param'), "__NEXT_ERROR_CODE", { + value: "E528", + enumerable: false, + configurable: true + }); + } + const page = (0, _denormalizepagepath.denormalizePagePath)(decodedPagePath); + if (page === '/_error' || _constants1.BLOCKED_PAGES.indexOf(page) === -1) { + try { + await this.ensurePage({ + page, + clientOnly: true, + url: req.url + }); + } catch (error) { + return await renderScriptError(pageBundleRes, (0, _iserror.getProperError)(error)); + } + const errors = await this.getCompilationErrors(page); + if (errors.length > 0) { + return await renderScriptError(pageBundleRes, errors[0], { + verbose: false + }); + } + } + return {}; + }; + const { finished } = await handlePageBundleRequest(res, parsedUrl); + for (const middleware of this.middlewares){ + let calledNext = false; + await middleware(req, res, ()=>{ + calledNext = true; + }); + if (!calledNext) { + return { + finished: true + }; + } + } + return { + finished + }; + } + setHmrServerError(error) { + this.hmrServerError = error; + } + clearHmrServerError() { + if (this.hmrServerError) { + this.setHmrServerError(null); + this.send({ + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.RELOAD_PAGE, + data: 'clear hmr server error' + }); + } + } + async refreshServerComponents(hash) { + this.send({ + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.SERVER_COMPONENT_CHANGES, + hash + }); + } + onHMR(req, _socket, head, callback) { + wsServer.handleUpgrade(req, req.socket, head, (client)=>{ + var _this_onDemandEntries; + const htmlRequestId = req.url ? new URL(req.url, 'http://n').searchParams.get('id') : null; + if (!this.webpackHotMiddleware) { + throw Object.defineProperty(new _invarianterror.InvariantError('Did not start HotReloaderWebpack.'), "__NEXT_ERROR_CODE", { + value: "E804", + enumerable: false, + configurable: true + }); + } + this.webpackHotMiddleware.onHMR(client, htmlRequestId); + (_this_onDemandEntries = this.onDemandEntries) == null ? void 0 : _this_onDemandEntries.onHMR(client, ()=>this.hmrServerError); + const enableCacheComponents = this.config.cacheComponents; + // Clients with a request ID are inferred App Router clients. If Cache + // Components is not enabled, we consider those legacy clients. Pages + // Router clients are also considered legacy clients. TODO: Maybe mark + // clients as App Router / Pages Router clients explicitly, instead of + // inferring it from the presence of a request ID. + const isLegacyClient = !htmlRequestId || !enableCacheComponents; + callback(client, { + isLegacyClient + }); + client.addEventListener('message', async ({ data })=>{ + data = typeof data !== 'string' ? data.toString() : data; + try { + const payload = JSON.parse(data); + let traceChild; + switch(payload.event){ + case 'span-end': + { + traceChild = { + name: payload.spanName, + startTime: BigInt(Math.floor(payload.startTime)) * MILLISECONDS_IN_NANOSECOND, + attrs: payload.attributes, + endTime: BigInt(Math.floor(payload.endTime)) * MILLISECONDS_IN_NANOSECOND + }; + break; + } + case 'client-hmr-latency': + { + traceChild = { + name: payload.event, + startTime: BigInt(payload.startTime) * MILLISECONDS_IN_NANOSECOND, + endTime: BigInt(payload.endTime) * MILLISECONDS_IN_NANOSECOND, + attrs: { + updatedModules: payload.updatedModules.map((m)=>m.replace(`(${_constants.WEBPACK_LAYERS.appPagesBrowser})/`, '').replace(/^\.\//, '[project]/')), + page: payload.page, + isPageHidden: payload.isPageHidden + } + }; + break; + } + case 'client-reload-page': + case 'client-success': + { + traceChild = { + name: payload.event + }; + break; + } + case 'client-error': + { + traceChild = { + name: payload.event, + attrs: { + errorCount: payload.errorCount + } + }; + break; + } + case 'client-warning': + { + traceChild = { + name: payload.event, + attrs: { + warningCount: payload.warningCount + } + }; + break; + } + case 'client-removed-page': + case 'client-added-page': + { + traceChild = { + name: payload.event, + attrs: { + page: payload.page || '' + } + }; + break; + } + case 'client-full-reload': + { + const { event, stackTrace, hadRuntimeError } = payload; + traceChild = { + name: event, + attrs: { + stackTrace: stackTrace ?? '' + } + }; + if (hadRuntimeError) { + _log.warn(_messages.FAST_REFRESH_RUNTIME_RELOAD); + break; + } + let fileMessage = ''; + if (stackTrace) { + var _exec; + const file = (_exec = /Aborted because (.+) is not accepted/.exec(stackTrace)) == null ? void 0 : _exec[1]; + if (file) { + // `file` is filepath in `pages/` but it can be a webpack url. + // If it's a webpack loader URL, it will include the app-pages layer + if (file.startsWith(`(${_constants.WEBPACK_LAYERS.appPagesBrowser})/`)) { + const fileUrl = new URL(file, 'file://'); + const cwd = process.cwd(); + const modules = fileUrl.searchParams.getAll('modules').map((filepath)=>filepath.slice(cwd.length + 1)).filter((filepath)=>!filepath.startsWith('node_modules')); + if (modules.length > 0) { + fileMessage = ` when ${modules.join(', ')} changed`; + } + } else if (// Handle known webpack layers + file.startsWith(`(${_constants.WEBPACK_LAYERS.pagesDirBrowser})/`)) { + const cleanedFilePath = file.slice(`(${_constants.WEBPACK_LAYERS.pagesDirBrowser})/`.length); + fileMessage = ` when ${cleanedFilePath} changed`; + } else { + fileMessage = ` when ${file} changed`; + } + } + } + _log.warn(`Fast Refresh had to perform a full reload${fileMessage}. Read more: https://nextjs.org/docs/messages/fast-refresh-reload`); + break; + } + case 'browser-logs': + { + const browserToTerminalConfig = this.config.logging && this.config.logging.browserToTerminal; + if (browserToTerminalConfig) { + await (0, _receivelogs.receiveBrowserLogsWebpack)({ + entries: payload.entries, + router: payload.router, + sourceType: payload.sourceType, + clientStats: ()=>this.clientStats, + serverStats: ()=>this.serverStats, + edgeServerStats: ()=>this.edgeServerStats, + rootDirectory: this.dir, + distDir: this.distDir, + config: browserToTerminalConfig + }); + } + break; + } + case 'client-file-logs': + { + // Always log to file regardless of terminal flag + await (0, _receivelogs.handleClientFileLogs)(payload.logs); + break; + } + case 'ping': + { + break; + } + default: + { + break; + } + } + if (traceChild) { + this.hotReloaderSpan.manualTraceChild(traceChild.name, traceChild.startTime, traceChild.endTime, { + ...traceChild.attrs, + clientId: payload.id + }); + } + } catch (_) { + // invalid WebSocket message + } + }); + if (htmlRequestId) { + (0, _debugchannel.connectReactDebugChannelForHtmlRequest)(htmlRequestId, this.sendToClient.bind(this, client)); + (0, _serializederrors.sendSerializedErrorsToClientForHtmlRequest)(htmlRequestId, this.sendToClient.bind(this, client)); + if (enableCacheComponents) { + const status = this.cacheStatusesByRequestId.get(htmlRequestId); + if (status) { + this.sendToClient(client, { + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.CACHE_INDICATOR, + state: status + }); + this.cacheStatusesByRequestId.delete(htmlRequestId); + } + } + } + client.on('close', ()=>{ + var _this_webpackHotMiddleware; + (_this_webpackHotMiddleware = this.webpackHotMiddleware) == null ? void 0 : _this_webpackHotMiddleware.deleteClient(client, htmlRequestId); + if (htmlRequestId) { + (0, _debugchannel.deleteReactDebugChannelForHtmlRequest)(htmlRequestId); + } + }); + }); + } + async clean(span) { + return span.traceChild('clean').traceAsyncFn(()=>(0, _recursivedelete.recursiveDeleteSyncWithAsyncRetries)((0, _path.join)(this.dir, this.config.distDir), /^(cache|lock)/)); + } + async getWebpackConfig(span) { + const webpackConfigSpan = span.traceChild('get-webpack-config'); + const pageExtensions = this.config.pageExtensions; + return webpackConfigSpan.traceAsyncFn(async ()=>{ + const pagePaths = !this.pagesDir ? [] : await webpackConfigSpan.traceChild('get-page-paths').traceAsyncFn(()=>Promise.all([ + (0, _findpagefile.findPageFile)(this.pagesDir, '/_app', pageExtensions, false), + (0, _findpagefile.findPageFile)(this.pagesDir, '/_document', pageExtensions, false) + ])); + this.pagesMapping = await webpackConfigSpan.traceChild('create-pages-mapping').traceAsyncFn(()=>(0, _routediscovery.createPagesMapping)({ + isDev: true, + pageExtensions: this.config.pageExtensions, + pagesType: _pagetypes.PAGE_TYPES.PAGES, + pagePaths: pagePaths.filter((i)=>typeof i === 'string'), + pagesDir: this.pagesDir, + appDir: this.appDir, + appDirOnly: Boolean(this.appDir && !this.pagesDir) + })); + const entrypoints = await webpackConfigSpan.traceChild('create-entrypoints').traceAsyncFn(()=>(0, _entries.createEntrypoints)({ + appDir: this.appDir, + buildId: this.buildId, + config: this.config, + envFiles: [], + isDev: true, + pages: this.pagesMapping, + pagesDir: this.pagesDir, + previewMode: this.previewProps, + rootDir: this.dir, + pageExtensions: this.config.pageExtensions + })); + const commonWebpackOptions = { + dev: true, + buildId: this.buildId, + encryptionKey: this.encryptionKey, + config: this.config, + pagesDir: this.pagesDir, + rewrites: this.rewrites, + originalRewrites: this.config._originalRewrites, + originalRedirects: this.config._originalRedirects, + runWebpackSpan: this.hotReloaderSpan, + appDir: this.appDir, + previewProps: this.previewProps + }; + return webpackConfigSpan.traceChild('generate-webpack-config').traceAsyncFn(async ()=>{ + const info = await (0, _webpackconfig.loadProjectInfo)({ + dir: this.dir, + config: commonWebpackOptions.config, + dev: true + }); + return Promise.all([ + // order is important here + (0, _webpackconfig.default)(this.dir, { + ...commonWebpackOptions, + compilerType: _constants1.COMPILER_NAMES.client, + entrypoints: entrypoints.client, + ...info + }), + (0, _webpackconfig.default)(this.dir, { + ...commonWebpackOptions, + compilerType: _constants1.COMPILER_NAMES.server, + entrypoints: entrypoints.server, + ...info + }), + (0, _webpackconfig.default)(this.dir, { + ...commonWebpackOptions, + compilerType: _constants1.COMPILER_NAMES.edgeServer, + entrypoints: entrypoints.edgeServer, + ...info + }) + ]); + }); + }); + } + async buildFallbackError() { + if (this.fallbackWatcher) return; + const info = await (0, _webpackconfig.loadProjectInfo)({ + dir: this.dir, + config: this.config, + dev: true + }); + const fallbackConfig = await (0, _webpackconfig.default)(this.dir, { + previewProps: this.previewProps, + runWebpackSpan: this.hotReloaderSpan, + dev: true, + compilerType: _constants1.COMPILER_NAMES.client, + config: this.config, + buildId: this.buildId, + encryptionKey: this.encryptionKey, + appDir: this.appDir, + pagesDir: this.pagesDir, + rewrites: { + beforeFiles: [], + afterFiles: [], + fallback: [] + }, + originalRewrites: { + beforeFiles: [], + afterFiles: [], + fallback: [] + }, + originalRedirects: [], + isDevFallback: true, + entrypoints: (await (0, _entries.createEntrypoints)({ + appDir: this.appDir, + buildId: this.buildId, + config: this.config, + envFiles: [], + isDev: true, + pages: { + '/_app': 'next/dist/pages/_app', + '/_error': 'next/dist/pages/_error' + }, + pagesDir: this.pagesDir, + previewMode: this.previewProps, + rootDir: this.dir, + pageExtensions: this.config.pageExtensions + })).client, + ...info + }); + const fallbackCompiler = (0, _getwebpackbundler.default)()(fallbackConfig); + this.fallbackWatcher = await new Promise((resolve)=>{ + let bootedFallbackCompiler = false; + fallbackCompiler.watch(// @ts-ignore webpack supports an array of watchOptions when using a multiCompiler + fallbackConfig.watchOptions, // Errors are handled separately + (_err)=>{ + if (!bootedFallbackCompiler) { + bootedFallbackCompiler = true; + resolve(true); + } + }); + }); + } + async tracedGetVersionInfo(span) { + const versionInfoSpan = span.traceChild('get-version-info'); + return versionInfoSpan.traceAsyncFn(async ()=>(0, _hotreloadersharedutils.getVersionInfo)()); + } + async start() { + const startSpan = this.hotReloaderSpan.traceChild('start'); + startSpan.stop() // Stop immediately to create an artificial parent span + ; + this.versionInfo = await this.tracedGetVersionInfo(startSpan); + const inspectorURLRaw = _inspector.url(); + if (inspectorURLRaw !== undefined) { + const inspectorURL = new URL(inspectorURLRaw); + let debugInfo; + try { + const debugInfoList = await fetch(`http://${inspectorURL.host}/json/list`).then((res)=>res.json()); + debugInfo = debugInfoList[0]; + } catch {} + if (debugInfo) { + this.devtoolsFrontendUrl = debugInfo.devtoolsFrontendUrl; + } + } + await this.clean(startSpan); + // Ensure distDir exists before writing package.json + await _fs.promises.mkdir(this.distDir, { + recursive: true + }); + const initialDevToolsConfig = await (0, _devtoolsconfigmiddleware.getDevToolsConfig)(this.distDir); + const distPackageJsonPath = (0, _path.join)(this.distDir, 'package.json'); + // Ensure commonjs handling is used for files in the distDir (generally .next) + // Files outside of the distDir can be "type": "module" + await _fs.promises.writeFile(distPackageJsonPath, '{"type": "commonjs"}'); + this.activeWebpackConfigs = await this.getWebpackConfig(startSpan); + for (const config of this.activeWebpackConfigs){ + const defaultEntry = config.entry; + config.entry = async (...args)=>{ + var _this_multiCompiler; + const outputPath = ((_this_multiCompiler = this.multiCompiler) == null ? void 0 : _this_multiCompiler.outputPath) || ''; + const entries = (0, _ondemandentryhandler.getEntries)(outputPath); + // @ts-ignore entry is always a function + const entrypoints = await defaultEntry(...args); + const isClientCompilation = config.name === _constants1.COMPILER_NAMES.client; + const isNodeServerCompilation = config.name === _constants1.COMPILER_NAMES.server; + const isEdgeServerCompilation = config.name === _constants1.COMPILER_NAMES.edgeServer; + await Promise.all(Object.keys(entries).map(async (entryKey)=>{ + const entryData = entries[entryKey]; + const { bundlePath, dispose } = entryData; + const result = /^(client|server|edge-server)@(app|pages|root)@(.*)/g.exec(entryKey); + const [, key /* pageType */ , , page] = result// this match should always happen + ; + if (key === _constants1.COMPILER_NAMES.client && !isClientCompilation) return; + if (key === _constants1.COMPILER_NAMES.server && !isNodeServerCompilation) return; + if (key === _constants1.COMPILER_NAMES.edgeServer && !isEdgeServerCompilation) return; + const isEntry = entryData.type === _ondemandentryhandler.EntryTypes.ENTRY; + const isChildEntry = entryData.type === _ondemandentryhandler.EntryTypes.CHILD_ENTRY; + // Check if the page was removed or disposed and remove it + if (isEntry) { + const pageExists = !dispose && (0, _fs.existsSync)(entryData.absolutePagePath); + if (!pageExists) { + delete entries[entryKey]; + return; + } + } + // For child entries, if it has an entry file and it's gone, remove it + if (isChildEntry) { + if (entryData.absoluteEntryFilePath) { + const pageExists = !dispose && (0, _fs.existsSync)(entryData.absoluteEntryFilePath); + if (!pageExists) { + delete entries[entryKey]; + return; + } + } + } + // Ensure _error is considered a `pages` page. + if (page === '/_error') { + this.hasPagesRouterEntrypoints = true; + } + const hasAppDir = !!this.appDir; + const isAppPath = hasAppDir && bundlePath.startsWith('app/'); + const staticInfo = isEntry ? await (0, _getstaticinfoincludinglayouts.getStaticInfoIncludingLayouts)({ + isInsideAppDir: isAppPath, + pageExtensions: this.config.pageExtensions, + pageFilePath: entryData.absolutePagePath, + appDir: this.appDir, + config: this.config, + isDev: true, + page + }) : undefined; + const isServerComponent = isAppPath && (staticInfo == null ? void 0 : staticInfo.rsc) !== _constants1.RSC_MODULE_TYPES.client; + const pageType = entryData.bundlePath.startsWith('pages/') ? _pagetypes.PAGE_TYPES.PAGES : entryData.bundlePath.startsWith('app/') ? _pagetypes.PAGE_TYPES.APP : _pagetypes.PAGE_TYPES.ROOT; + if (pageType === 'pages') { + this.hasPagesRouterEntrypoints = true; + } + if (pageType === 'app') { + this.hasAppRouterEntrypoints = true; + } + const isInstrumentation = (0, _utils.isInstrumentationHookFile)(page) && pageType === _pagetypes.PAGE_TYPES.ROOT; + let pageRuntime = staticInfo == null ? void 0 : staticInfo.runtime; + (0, _entries.runDependingOnPageType)({ + page, + pageRuntime, + pageType, + onEdgeServer: ()=>{ + // TODO-APP: verify if child entry should support. + if (!isEdgeServerCompilation || !isEntry) return; + entries[entryKey].status = _ondemandentryhandler.BUILDING; + if (isInstrumentation) { + const normalizedBundlePath = bundlePath.replace('src/', ''); + entrypoints[normalizedBundlePath] = (0, _entries.finalizeEntrypoint)({ + compilerType: _constants1.COMPILER_NAMES.edgeServer, + name: normalizedBundlePath, + value: (0, _entries.getInstrumentationEntry)({ + absolutePagePath: entryData.absolutePagePath, + isEdgeServer: true, + isDev: true + }), + isServerComponent: true, + hasAppDir + }); + return; + } + const appDirLoader = isAppPath ? (0, _entries.getAppEntry)({ + name: bundlePath, + page, + appPaths: entryData.appPaths, + allNormalizedAppPaths: null, + pagePath: _path.posix.join(_constants.APP_DIR_ALIAS, (0, _path.relative)(this.appDir, entryData.absolutePagePath).replace(/\\/g, '/')), + appDir: this.appDir, + pageExtensions: this.config.pageExtensions, + rootDir: this.dir, + isDev: true, + tsconfigPath: this.config.typescript.tsconfigPath, + basePath: this.config.basePath, + assetPrefix: this.config.assetPrefix, + nextConfigOutput: this.config.output, + preferredRegion: staticInfo == null ? void 0 : staticInfo.preferredRegion, + middlewareConfig: Buffer.from(JSON.stringify((staticInfo == null ? void 0 : staticInfo.middleware) || {})).toString('base64'), + isGlobalNotFoundEnabled: this.config.experimental.globalNotFound ? true : undefined + }).import : undefined; + entrypoints[bundlePath] = (0, _entries.finalizeEntrypoint)({ + compilerType: _constants1.COMPILER_NAMES.edgeServer, + name: bundlePath, + value: (0, _entries.getEdgeServerEntry)({ + absolutePagePath: entryData.absolutePagePath, + rootDir: this.dir, + buildId: this.buildId, + bundlePath, + config: this.config, + isDev: true, + page, + pages: this.pagesMapping, + isServerComponent, + appDirLoader, + pagesType: isAppPath ? _pagetypes.PAGE_TYPES.APP : _pagetypes.PAGE_TYPES.PAGES, + preferredRegion: staticInfo == null ? void 0 : staticInfo.preferredRegion + }), + hasAppDir + }); + }, + onClient: ()=>{ + if (!isClientCompilation) return; + if (isChildEntry) { + entries[entryKey].status = _ondemandentryhandler.BUILDING; + entrypoints[bundlePath] = (0, _entries.finalizeEntrypoint)({ + name: bundlePath, + compilerType: _constants1.COMPILER_NAMES.client, + value: entryData.request, + hasAppDir + }); + } else { + entries[entryKey].status = _ondemandentryhandler.BUILDING; + entrypoints[bundlePath] = (0, _entries.finalizeEntrypoint)({ + name: bundlePath, + compilerType: _constants1.COMPILER_NAMES.client, + value: (0, _entries.getClientEntry)({ + absolutePagePath: entryData.absolutePagePath, + page + }), + hasAppDir + }); + } + }, + onServer: ()=>{ + // TODO-APP: verify if child entry should support. + if (!isNodeServerCompilation || !isEntry) return; + entries[entryKey].status = _ondemandentryhandler.BUILDING; + let relativeRequest = (0, _path.relative)(config.context, entryData.absolutePagePath); + if (!(0, _path.isAbsolute)(relativeRequest) && !relativeRequest.startsWith('../')) { + relativeRequest = `./${relativeRequest}`; + } + let value; + if (isInstrumentation) { + value = (0, _entries.getInstrumentationEntry)({ + absolutePagePath: entryData.absolutePagePath, + isEdgeServer: false, + isDev: true + }); + entrypoints[bundlePath] = (0, _entries.finalizeEntrypoint)({ + compilerType: _constants1.COMPILER_NAMES.server, + name: bundlePath, + isServerComponent: true, + value, + hasAppDir + }); + } else if ((0, _utils.isMiddlewareFile)(page)) { + value = (0, _entries.getEdgeServerEntry)({ + absolutePagePath: entryData.absolutePagePath, + rootDir: this.dir, + buildId: this.buildId, + bundlePath, + config: this.config, + isDev: true, + page, + pages: this.pagesMapping, + isServerComponent, + pagesType: _pagetypes.PAGE_TYPES.PAGES, + preferredRegion: staticInfo == null ? void 0 : staticInfo.preferredRegion + }); + } else if (isAppPath) { + // This path normalization is critical for webpack to resolve the next internals as entry. + const pagePath = entryData.absolutePagePath.startsWith((0, _path.dirname)(require.resolve('next/package.json'))) ? entryData.absolutePagePath : _path.posix.join(_constants.APP_DIR_ALIAS, (0, _path.relative)(this.appDir, entryData.absolutePagePath).replace(/\\/g, '/')); + value = (0, _entries.getAppEntry)({ + name: bundlePath, + page, + appPaths: entryData.appPaths, + allNormalizedAppPaths: null, + pagePath, + appDir: this.appDir, + pageExtensions: this.config.pageExtensions, + rootDir: this.dir, + isDev: true, + tsconfigPath: this.config.typescript.tsconfigPath, + basePath: this.config.basePath, + assetPrefix: this.config.assetPrefix, + nextConfigOutput: this.config.output, + preferredRegion: staticInfo == null ? void 0 : staticInfo.preferredRegion, + middlewareConfig: Buffer.from(JSON.stringify((staticInfo == null ? void 0 : staticInfo.middleware) || {})).toString('base64'), + isGlobalNotFoundEnabled: this.config.experimental.globalNotFound ? true : undefined + }); + } else if ((0, _isapiroute.isAPIRoute)(page)) { + value = (0, _nextrouteloader.getRouteLoaderEntry)({ + kind: _routekind.RouteKind.PAGES_API, + page, + absolutePagePath: relativeRequest, + preferredRegion: staticInfo == null ? void 0 : staticInfo.preferredRegion, + middlewareConfig: (staticInfo == null ? void 0 : staticInfo.middleware) || {} + }); + } else if (!(0, _utils.isMiddlewareFile)(page) && !(0, _isinternalcomponent.isInternalComponent)(relativeRequest) && !(0, _isinternalcomponent.isNonRoutePagesPage)(page) && !isInstrumentation) { + value = (0, _nextrouteloader.getRouteLoaderEntry)({ + kind: _routekind.RouteKind.PAGES, + page, + pages: this.pagesMapping, + absolutePagePath: relativeRequest, + preferredRegion: staticInfo == null ? void 0 : staticInfo.preferredRegion, + middlewareConfig: (staticInfo == null ? void 0 : staticInfo.middleware) ?? {} + }); + } else { + value = relativeRequest; + } + entrypoints[bundlePath] = (0, _entries.finalizeEntrypoint)({ + compilerType: _constants1.COMPILER_NAMES.server, + name: bundlePath, + isServerComponent, + value, + hasAppDir + }); + } + }); + })); + if (!this.hasPagesRouterEntrypoints) { + delete entrypoints[_constants1.CLIENT_STATIC_FILES_RUNTIME_MAIN]; + delete entrypoints['pages/_app']; + delete entrypoints['pages/_error']; + delete entrypoints['/_error']; + delete entrypoints['pages/_document']; + } + // Remove React Refresh entrypoint chunk as `app` doesn't require it. + if (!this.hasPagesRouterEntrypoints) { + delete entrypoints[_constants1.CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH]; + } + if (!this.hasAppRouterEntrypoints) { + delete entrypoints[_constants1.CLIENT_STATIC_FILES_RUNTIME_MAIN_APP]; + } + return entrypoints; + }; + } + // Enable building of client compilation before server compilation in development + // @ts-ignore webpack 5 + this.activeWebpackConfigs.parallelism = 1; + await Promise.all(Array.from((0, _webpackconfig.getCacheDirectories)(this.activeWebpackConfigs)).map(_cacheinvalidation.checkFileSystemCacheInvalidationAndCleanup)); + this.multiCompiler = (0, _getwebpackbundler.default)()(this.activeWebpackConfigs); + await this.afterCompile(this.multiCompiler); + // Copy over the filesystem so that it is shared between all compilers. + const inputFileSystem = this.multiCompiler.compilers[0].inputFileSystem; + for (const compiler of this.multiCompiler.compilers){ + compiler.inputFileSystem = inputFileSystem; + // This is set for the initial compile. After that Watching class in webpack adds it. + compiler.fsStartTime = Date.now(); + // Ensure NodeEnvironmentPlugin doesn't purge the inputFileSystem. Purging is handled in `done` below. + compiler.hooks.beforeRun.intercept({ + register (tapInfo) { + if (tapInfo.name === 'NodeEnvironmentPlugin') { + return null; + } + return tapInfo; + } + }); + } + this.multiCompiler.hooks.done.tap('NextjsHotReloader', ()=>{ + var _inputFileSystem_purge; + inputFileSystem == null ? void 0 : (_inputFileSystem_purge = inputFileSystem.purge) == null ? void 0 : _inputFileSystem_purge.call(inputFileSystem); + }); + (0, _output.watchCompilers)(this.multiCompiler.compilers[0], this.multiCompiler.compilers[1], this.multiCompiler.compilers[2]); + // Watch for changes to client/server page files so we can tell when just + // the server file changes and trigger a reload for GS(S)P pages + const changedClientPages = new Set(); + const changedServerPages = new Set(); + const changedEdgeServerPages = new Set(); + const changedServerComponentPages = new Set(); + const changedCSSImportPages = new Set(); + const prevClientPageHashes = new Map(); + const prevServerPageHashes = new Map(); + const prevEdgeServerPageHashes = new Map(); + const prevCSSImportModuleHashes = new Map(); + const pageExtensionRegex = new RegExp(`\\.(?:${this.config.pageExtensions.join('|')})$`); + const trackPageChanges = (pageHashMap, changedItems, serverComponentChangedItems)=>(stats)=>{ + try { + stats.entrypoints.forEach((entry, key)=>{ + if (key.startsWith('pages/') || key.startsWith('app/') || (0, _utils.isMiddlewareFilename)(key)) { + // TODO this doesn't handle on demand loaded chunks + entry.chunks.forEach((chunk)=>{ + if (chunk.id === key) { + const modsIterable = stats.chunkGraph.getChunkModulesIterable(chunk); + let hasCSSModuleChanges = false; + let chunksHash = new _webpack.StringXor(); + let chunksHashServerLayer = new _webpack.StringXor(); + modsIterable.forEach((mod)=>{ + if (mod.resource && mod.resource.replace(/\\/g, '/').includes(key) && // Shouldn't match CSS modules, etc. + pageExtensionRegex.test(mod.resource)) { + var _mod_buildInfo_rsc, _mod_buildInfo; + // use original source to calculate hash since mod.hash + // includes the source map in development which changes + // every time for both server and client so we calculate + // the hash without the source map for the page module + const hash = require('crypto').createHash('sha1').update(mod.originalSource().buffer()).digest().toString('hex'); + if (mod.layer === _constants.WEBPACK_LAYERS.reactServerComponents && (mod == null ? void 0 : (_mod_buildInfo = mod.buildInfo) == null ? void 0 : (_mod_buildInfo_rsc = _mod_buildInfo.rsc) == null ? void 0 : _mod_buildInfo_rsc.type) !== 'client') { + chunksHashServerLayer.add(hash); + } + chunksHash.add(hash); + } else { + var _mod_buildInfo_rsc1, _mod_buildInfo1; + // for non-pages we can use the module hash directly + const hash = stats.chunkGraph.getModuleHash(mod, chunk.runtime); + if (mod.layer === _constants.WEBPACK_LAYERS.reactServerComponents && (mod == null ? void 0 : (_mod_buildInfo1 = mod.buildInfo) == null ? void 0 : (_mod_buildInfo_rsc1 = _mod_buildInfo1.rsc) == null ? void 0 : _mod_buildInfo_rsc1.type) !== 'client') { + chunksHashServerLayer.add(hash); + } + chunksHash.add(hash); + // Both CSS import changes from server and client + // components are tracked. + if (key.startsWith('app/') && /\.(css|scss|sass)$/.test(mod.resource || '')) { + const resourceKey = mod.layer + ':' + mod.resource; + const prevHash = prevCSSImportModuleHashes.get(resourceKey); + if (prevHash && prevHash !== hash) { + hasCSSModuleChanges = true; + } + prevCSSImportModuleHashes.set(resourceKey, hash); + } + } + }); + const prevHash = pageHashMap.get(key); + const curHash = chunksHash.toString(); + if (prevHash && prevHash !== curHash) { + changedItems.add(key); + } + pageHashMap.set(key, curHash); + if (serverComponentChangedItems) { + const serverKey = _constants.WEBPACK_LAYERS.reactServerComponents + ':' + key; + const prevServerHash = pageHashMap.get(serverKey); + const curServerHash = chunksHashServerLayer.toString(); + if (prevServerHash && prevServerHash !== curServerHash) { + serverComponentChangedItems.add(key); + } + pageHashMap.set(serverKey, curServerHash); + } + if (hasCSSModuleChanges) { + changedCSSImportPages.add(key); + } + } + }); + } + }); + } catch (err) { + console.error(err); + } + }; + this.multiCompiler.compilers[0].hooks.emit.tap('NextjsHotReloaderForClient', trackPageChanges(prevClientPageHashes, changedClientPages)); + this.multiCompiler.compilers[1].hooks.emit.tap('NextjsHotReloaderForServer', trackPageChanges(prevServerPageHashes, changedServerPages, changedServerComponentPages)); + this.multiCompiler.compilers[2].hooks.emit.tap('NextjsHotReloaderForServer', trackPageChanges(prevEdgeServerPageHashes, changedEdgeServerPages, changedServerComponentPages)); + // This plugin watches for changes to _document.js and notifies the client side that it should reload the page + this.multiCompiler.compilers[1].hooks.failed.tap('NextjsHotReloaderForServer', (err)=>{ + this.serverError = err; + this.serverStats = null; + this.serverChunkNames = undefined; + }); + this.multiCompiler.compilers[2].hooks.done.tap('NextjsHotReloaderForServer', (stats)=>{ + this.serverError = null; + this.edgeServerStats = stats; + }); + this.multiCompiler.compilers[1].hooks.done.tap('NextjsHotReloaderForServer', (stats)=>{ + this.serverError = null; + this.serverStats = stats; + if (!this.pagesDir) { + return; + } + const { compilation } = stats; + // We only watch `_document` for changes on the server compilation + // the rest of the files will be triggered by the client compilation + const documentChunk = compilation.namedChunks.get('pages/_document'); + // If the document chunk can't be found we do nothing + if (!documentChunk) { + return; + } + // Initial value + if (this.serverPrevDocumentHash === null) { + this.serverPrevDocumentHash = documentChunk.hash || null; + return; + } + // If _document.js didn't change we don't trigger a reload. + if (documentChunk.hash === this.serverPrevDocumentHash) { + return; + } + // As document chunk will change if new app pages are joined, + // since react bundle is different it will effect the chunk hash. + // So we diff the chunk changes, if there's only new app page chunk joins, + // then we don't trigger a reload by checking pages/_document chunk change. + if (this.appDir) { + const chunkNames = new Set(compilation.namedChunks.keys()); + const diffChunkNames = (0, _utils.difference)(this.serverChunkNames || new Set(), chunkNames); + if (diffChunkNames.length === 0 || diffChunkNames.every((chunkName)=>chunkName.startsWith('app/'))) { + return; + } + this.serverChunkNames = chunkNames; + } + this.serverPrevDocumentHash = documentChunk.hash || null; + // Notify reload to reload the page, as _document.js was changed (different hash) + this.send({ + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.RELOAD_PAGE, + data: '_document has changed' + }); + }); + this.multiCompiler.hooks.done.tap('NextjsHotReloaderForServer', (stats)=>{ + const reloadAfterInvalidation = this.reloadAfterInvalidation; + this.reloadAfterInvalidation = false; + const serverOnlyChanges = (0, _utils.difference)(changedServerPages, changedClientPages); + const edgeServerOnlyChanges = (0, _utils.difference)(changedEdgeServerPages, changedClientPages); + const pageChanges = serverOnlyChanges.concat(edgeServerOnlyChanges).filter((key)=>key.startsWith('pages/')); + const middlewareChanges = [ + ...Array.from(changedEdgeServerPages), + ...Array.from(changedServerPages) + ].filter((name)=>(0, _utils.isMiddlewareFilename)(name)); + if (middlewareChanges.length > 0) { + this.send({ + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.MIDDLEWARE_CHANGES + }); + } + if (pageChanges.length > 0) { + this.send({ + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.SERVER_ONLY_CHANGES, + pages: serverOnlyChanges.map((pg)=>(0, _denormalizepagepath.denormalizePagePath)(pg.slice('pages'.length))) + }); + } + if (changedServerComponentPages.size || changedCSSImportPages.size || reloadAfterInvalidation) { + this.resetFetch(); + this.refreshServerComponents(stats.hash); + } + changedClientPages.clear(); + changedServerPages.clear(); + changedEdgeServerPages.clear(); + changedServerComponentPages.clear(); + changedCSSImportPages.clear(); + }); + this.multiCompiler.compilers[0].hooks.failed.tap('NextjsHotReloaderForClient', (err)=>{ + this.clientError = err; + this.clientStats = null; + }); + this.multiCompiler.compilers[0].hooks.done.tap('NextjsHotReloaderForClient', (stats)=>{ + this.clientError = null; + this.clientStats = stats; + const { compilation } = stats; + const chunkNames = new Set([ + ...compilation.namedChunks.keys() + ].filter((name)=>!!(0, _getroutefromentrypoint.default)(name))); + if (this.prevChunkNames) { + // detect chunks which have to be replaced with a new template + // e.g, pages/index.js <-> pages/_error.js + const addedPages = diff(chunkNames, this.prevChunkNames); + const removedPages = diff(this.prevChunkNames, chunkNames); + if (addedPages.size > 0) { + for (const addedPage of addedPages){ + const page = (0, _getroutefromentrypoint.default)(addedPage); + this.send({ + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.ADDED_PAGE, + data: [ + page + ] + }); + } + } + if (removedPages.size > 0) { + for (const removedPage of removedPages){ + const page = (0, _getroutefromentrypoint.default)(removedPage); + this.send({ + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.REMOVED_PAGE, + data: [ + page + ] + }); + } + } + } + this.prevChunkNames = chunkNames; + }); + this.webpackHotMiddleware = new _hotmiddleware.WebpackHotMiddleware(this.multiCompiler.compilers, this.versionInfo, this.devtoolsFrontendUrl, this.config, initialDevToolsConfig); + let booted = false; + this.watcher = await new Promise((resolve)=>{ + var _this_multiCompiler; + const watcher = (_this_multiCompiler = this.multiCompiler) == null ? void 0 : _this_multiCompiler.watch(// @ts-ignore webpack supports an array of watchOptions when using a multiCompiler + this.activeWebpackConfigs.map((config)=>config.watchOptions), // Errors are handled separately + (_err)=>{ + if (!booted) { + booted = true; + resolve(watcher); + } + }); + }); + this.onDemandEntries = (0, _ondemandentryhandler.onDemandEntryHandler)({ + hotReloader: this, + multiCompiler: this.multiCompiler, + pagesDir: this.pagesDir, + appDir: this.appDir, + rootDir: this.dir, + nextConfig: this.config, + ...this.config.onDemandEntries + }); + this.middlewares.push((0, _middlewarewebpack.getOverlayMiddleware)({ + rootDirectory: this.dir, + isSrcDir: this.isSrcDir, + clientStats: ()=>this.clientStats, + serverStats: ()=>this.serverStats, + edgeServerStats: ()=>this.edgeServerStats + }), (0, _middlewarewebpack.getSourceMapMiddleware)({ + clientStats: ()=>this.clientStats, + serverStats: ()=>this.serverStats, + edgeServerStats: ()=>this.edgeServerStats + }), (0, _getnexterrorfeedbackmiddleware.getNextErrorFeedbackMiddleware)(this.telemetry), (0, _getdevoverlayfontmiddleware.getDevOverlayFontMiddleware)(), (0, _devindicatormiddleware.getDisableDevIndicatorMiddleware)(), (0, _restartdevservermiddleware.getRestartDevServerMiddleware)({ + telemetry: this.telemetry, + webpackCacheDirectories: this.activeWebpackConfigs != null ? (0, _webpackconfig.getCacheDirectories)(this.activeWebpackConfigs) : undefined + }), (0, _devtoolsconfigmiddleware.devToolsConfigMiddleware)({ + distDir: this.distDir, + sendUpdateSignal: (data)=>{ + var // Update the in-memory devToolsConfig value + // which will be used for the next onHMR call. + _this_webpackHotMiddleware; + (_this_webpackHotMiddleware = this.webpackHotMiddleware) == null ? void 0 : _this_webpackHotMiddleware.updateDevToolsConfig(data); + this.send({ + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.DEVTOOLS_CONFIG, + data + }); + } + }), (0, _attachnodejsdebuggermiddleware.getAttachNodejsDebuggerMiddleware)(), ...this.config.experimental.mcpServer ? [ + (0, _getmcpmiddleware.getMcpMiddleware)({ + projectPath: this.dir, + distDir: this.distDir, + nextConfig: this.config, + pagesDir: this.pagesDir, + appDir: this.appDir, + sendHmrMessage: (message)=>this.send(message), + getActiveConnectionCount: ()=>{ + var _this_webpackHotMiddleware; + return ((_this_webpackHotMiddleware = this.webpackHotMiddleware) == null ? void 0 : _this_webpackHotMiddleware.getClientCount()) ?? 0; + }, + getDevServerUrl: ()=>process.env.__NEXT_PRIVATE_ORIGIN + }) + ] : []); + (0, _formaterrors.setStackFrameResolver)(async (request)=>{ + return (0, _middlewarewebpack.getOriginalStackFrames)({ + isServer: request.isServer, + isEdgeServer: request.isEdgeServer, + isAppDirectory: request.isAppDirectory, + frames: request.frames, + clientStats: ()=>this.clientStats, + serverStats: ()=>this.serverStats, + edgeServerStats: ()=>this.edgeServerStats, + rootDirectory: this.dir + }); + }); + } + async afterCompile(_multiCompiler) {} + invalidate({ reloadAfterInvalidation } = { + reloadAfterInvalidation: false + }) { + var _this_multiCompiler; + // Cache the `reloadAfterInvalidation` flag, and use it to reload the page when compilation is done + this.reloadAfterInvalidation = reloadAfterInvalidation; + const outputPath = (_this_multiCompiler = this.multiCompiler) == null ? void 0 : _this_multiCompiler.outputPath; + if (outputPath) { + var _getInvalidator; + (_getInvalidator = (0, _ondemandentryhandler.getInvalidator)(outputPath)) == null ? void 0 : _getInvalidator.invalidate(); + } + } + async getCompilationErrors(page) { + var _this_clientStats, _this_serverStats, _this_edgeServerStats; + const getErrors = ({ compilation })=>{ + var _failedPages_normalizedPage; + const failedPages = erroredPages(compilation); + const normalizedPage = (0, _normalizepathsep.normalizePathSep)(page); + // If there is an error related to the requesting page we display it instead of the first error + return ((_failedPages_normalizedPage = failedPages[normalizedPage]) == null ? void 0 : _failedPages_normalizedPage.length) > 0 ? failedPages[normalizedPage] : compilation.errors; + }; + if (this.clientError) { + return [ + this.clientError + ]; + } else if (this.serverError) { + return [ + this.serverError + ]; + } else if ((_this_clientStats = this.clientStats) == null ? void 0 : _this_clientStats.hasErrors()) { + return getErrors(this.clientStats); + } else if ((_this_serverStats = this.serverStats) == null ? void 0 : _this_serverStats.hasErrors()) { + return getErrors(this.serverStats); + } else if ((_this_edgeServerStats = this.edgeServerStats) == null ? void 0 : _this_edgeServerStats.hasErrors()) { + return getErrors(this.edgeServerStats); + } else { + return []; + } + } + send(message) { + this.webpackHotMiddleware.publish(message); + } + sendToClient(client, message) { + this.webpackHotMiddleware.publishToClient(client, message); + } + sendToLegacyClients(message) { + this.webpackHotMiddleware.publishToLegacyClients(message); + } + setCacheStatus(status, htmlRequestId) { + var _this_webpackHotMiddleware; + const client = (_this_webpackHotMiddleware = this.webpackHotMiddleware) == null ? void 0 : _this_webpackHotMiddleware.getClient(htmlRequestId); + if (client !== undefined) { + this.sendToClient(client, { + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.CACHE_INDICATOR, + state: status + }); + } else { + // If the client is not connected, store the status so that we can send it + // when the client connects. + this.cacheStatusesByRequestId.set(htmlRequestId, status); + } + } + setReactDebugChannel(debugChannel, htmlRequestId, requestId) { + var _this_webpackHotMiddleware; + const client = (_this_webpackHotMiddleware = this.webpackHotMiddleware) == null ? void 0 : _this_webpackHotMiddleware.getClient(htmlRequestId); + if (htmlRequestId === requestId) { + // The debug channel is for the HTML request. + if (client) { + // If the client is connected, we can connect the debug channel for + // the HTML request immediately. + (0, _debugchannel.connectReactDebugChannel)(htmlRequestId, debugChannel, this.sendToClient.bind(this, client)); + } else { + // Otherwise, we'll do that when the client connects and just store + // the debug channel. + (0, _debugchannel.setReactDebugChannelForHtmlRequest)(htmlRequestId, debugChannel); + } + } else if (client) { + // The debug channel is for a subsequent request (e.g. client-side + // navigation for server function call). If the client is not connected + // anymore, we don't need to connect the debug channel. + (0, _debugchannel.connectReactDebugChannel)(requestId, debugChannel, this.sendToClient.bind(this, client)); + } + } + sendErrorsToBrowser(errorsRscStream, htmlRequestId) { + var _this_webpackHotMiddleware; + const client = (_this_webpackHotMiddleware = this.webpackHotMiddleware) == null ? void 0 : _this_webpackHotMiddleware.getClient(htmlRequestId); + if (client) { + // If the client is connected, we can send the errors immediately. + (0, _serializederrors.sendSerializedErrorsToClient)(errorsRscStream, this.sendToClient.bind(this, client)); + } else { + // Otherwise, store the errors stream so that we can send it when the + // client connects. + (0, _serializederrors.setErrorsRscStreamForHtmlRequest)(htmlRequestId, errorsRscStream); + } + } + async ensurePage({ page, clientOnly, appPaths, definition, isApp, url }) { + return this.hotReloaderSpan.traceChild('ensure-page', { + inputPage: page + }).traceAsyncFn(async ()=>{ + var _this_onDemandEntries; + // Make sure we don't re-build or dispose prebuilt pages + if (page !== '/_error' && _constants1.BLOCKED_PAGES.indexOf(page) !== -1) { + return; + } + const error = clientOnly ? this.clientError : this.serverError || this.clientError; + if (error) { + throw error; + } + return (_this_onDemandEntries = this.onDemandEntries) == null ? void 0 : _this_onDemandEntries.ensurePage({ + page, + appPaths, + definition, + isApp, + url + }); + }); + } + close() { + var _this_webpackHotMiddleware; + // Report MCP telemetry if MCP server is enabled + (0, _mcptelemetrytracker.recordMcpTelemetry)(this.telemetry); + (_this_webpackHotMiddleware = this.webpackHotMiddleware) == null ? void 0 : _this_webpackHotMiddleware.close(); + } +} + +//# sourceMappingURL=hot-reloader-webpack.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/dev/log-requests.js b/build/node_modules/next/dist/server/dev/log-requests.js new file mode 100644 index 0000000..bbb2419 --- /dev/null +++ b/build/node_modules/next/dist/server/dev/log-requests.js @@ -0,0 +1,149 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + ignoreLoggingIncomingRequests: null, + logRequests: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + ignoreLoggingIncomingRequests: function() { + return ignoreLoggingIncomingRequests; + }, + logRequests: function() { + return logRequests; + } +}); +const _durationtostring = require("../../build/duration-to-string"); +const _picocolors = require("../../lib/picocolors"); +const _url = require("../../lib/url"); +const _requestmeta = require("../request-meta"); +const _serveractionlogger = require("./server-action-logger"); +function ignoreLoggingIncomingRequests(request, loggingConfig) { + var _loggingConfig_incomingRequests; + // If it's boolean use the boolean value + if (typeof (loggingConfig == null ? void 0 : loggingConfig.incomingRequests) === 'boolean') { + return !loggingConfig.incomingRequests; + } + // Any of the value on the chain is falsy, will not ignore the request. + const ignore = loggingConfig == null ? void 0 : (_loggingConfig_incomingRequests = loggingConfig.incomingRequests) == null ? void 0 : _loggingConfig_incomingRequests.ignore; + // If ignore is not set, don't ignore anything + if (!ignore) { + return false; + } + // If array of RegExp, ignore if any pattern matches + return ignore.some((pattern)=>pattern.test(request.url)); +} +function logRequests(request, response, loggingConfig, requestStartTime, requestEndTime, devRequestTimingMiddlewareStart, devRequestTimingMiddlewareEnd, devRequestTimingInternalsEnd, devGenerateStaticParamsDuration) { + if (!ignoreLoggingIncomingRequests(request, loggingConfig)) { + logIncomingRequests(request, requestStartTime, requestEndTime, response.statusCode, devRequestTimingMiddlewareStart, devRequestTimingMiddlewareEnd, devRequestTimingInternalsEnd, devGenerateStaticParamsDuration); + // Log server action after the request log + const serverActionLog = (0, _requestmeta.getRequestMeta)(request, 'devServerActionLog'); + if (serverActionLog) { + const argsStr = (0, _serveractionlogger.formatArgs)(serverActionLog.args); + process.stdout.write(` └─ ƒ ${serverActionLog.functionName}(${argsStr}) in ${serverActionLog.duration}ms ${(0, _picocolors.dim)(serverActionLog.location)}\n`); + (0, _requestmeta.removeRequestMeta)(request, 'devServerActionLog'); + } + } + if (request.fetchMetrics) { + for (const fetchMetric of request.fetchMetrics){ + logFetchMetric(fetchMetric, loggingConfig); + } + } +} +function logIncomingRequests(request, requestStartTime, requestEndTime, statusCode, devRequestTimingMiddlewareStart, devRequestTimingMiddlewareEnd, devRequestTimingInternalsEnd, devGenerateStaticParamsDuration) { + const isRSC = (0, _requestmeta.getRequestMeta)(request, 'isRSCRequest'); + const url = isRSC ? (0, _url.stripNextRscUnionQuery)(request.url) : request.url; + const statusCodeColor = statusCode < 200 ? _picocolors.white : statusCode < 300 ? _picocolors.green : statusCode < 400 ? _picocolors.blue : statusCode < 500 ? _picocolors.yellow : _picocolors.red; + const coloredStatus = statusCodeColor(statusCode.toString()); + const totalRequestTime = requestEndTime - requestStartTime; + const times = []; + let middlewareTime; + if (devRequestTimingMiddlewareStart && devRequestTimingMiddlewareEnd) { + middlewareTime = devRequestTimingMiddlewareEnd - devRequestTimingMiddlewareStart; + times.push([ + 'proxy.ts', + middlewareTime + ]); + } + if (devRequestTimingInternalsEnd) { + let frameworkTime = devRequestTimingInternalsEnd - requestStartTime; + /* Middleware runs during the internals so we have to subtract it from the framework time */ if (middlewareTime) { + frameworkTime -= middlewareTime; + } + // Insert as the first item to be rendered in the list + times.unshift([ + 'next.js', + frameworkTime + ]); + // Insert after compile, before render based on the execution order. + if (devGenerateStaticParamsDuration) { + // Pages Router getStaticPaths are technically "generate params" as well. + times.push([ + 'generate-params', + devGenerateStaticParamsDuration + ]); + } + times.push([ + 'application-code', + requestEndTime - devRequestTimingInternalsEnd + ]); + } + return writeLine(`${request.method} ${url} ${coloredStatus} in ${(0, _durationtostring.hrtimeBigIntDurationToString)(totalRequestTime)}${times.length > 0 ? (0, _picocolors.dim)(` (${times.map(([label, time])=>`${label}: ${(0, _durationtostring.hrtimeBigIntDurationToString)(time)}`).join(', ')})`) : ''}`); +} +function logFetchMetric(fetchMetric, loggingConfig) { + var _loggingConfig_fetches; + let { cacheReason, cacheStatus, cacheWarning, end, method, start, status, url } = fetchMetric; + if (cacheStatus === 'hmr' && !(loggingConfig == null ? void 0 : (_loggingConfig_fetches = loggingConfig.fetches) == null ? void 0 : _loggingConfig_fetches.hmrRefreshes)) { + // Cache hits during HMR refreshes are intentionally not logged, unless + // explicitly enabled in the logging config. + return; + } + if (loggingConfig == null ? void 0 : loggingConfig.fetches) { + if (url.length > 48 && !loggingConfig.fetches.fullUrl) { + url = truncateUrl(url); + } + writeLine((0, _picocolors.white)(`${method} ${url} ${status} in ${Math.round(end - start)}ms ${formatCacheStatus(cacheStatus)}`), 1); + if (cacheStatus === 'skip' || cacheStatus === 'miss') { + writeLine((0, _picocolors.gray)(`Cache ${cacheStatus === 'skip' ? 'skipped' : 'missed'} reason: (${(0, _picocolors.white)(cacheReason)})`), 2); + } + } else if (cacheWarning) { + // When logging for fetches is not enabled, we still want to print any + // associated warnings, so we print the request first to provide context. + writeLine((0, _picocolors.white)(`${method} ${url}`), 1); + } + if (cacheWarning) { + writeLine(`${(0, _picocolors.yellow)((0, _picocolors.bold)('⚠'))} ${(0, _picocolors.white)(cacheWarning)}`, 2); + } +} +function writeLine(text, indentationLevel = 0) { + process.stdout.write(` ${'│ '.repeat(indentationLevel)}${text}\n`); +} +function truncate(text, maxLength) { + return maxLength !== undefined && text.length > maxLength ? text.substring(0, maxLength) + '..' : text; +} +function truncateUrl(url) { + const { protocol, host, pathname, search } = new URL(url); + return protocol + '//' + truncate(host, 16) + truncate(pathname, 24) + truncate(search, 16); +} +function formatCacheStatus(cacheStatus) { + switch(cacheStatus){ + case 'hmr': + return (0, _picocolors.green)('(HMR cache)'); + case 'hit': + return (0, _picocolors.green)('(cache hit)'); + case 'miss': + case 'skip': + return (0, _picocolors.yellow)(`(cache ${cacheStatus})`); + default: + return cacheStatus; + } +} + +//# sourceMappingURL=log-requests.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/dev/messages.js b/build/node_modules/next/dist/server/dev/messages.js new file mode 100644 index 0000000..7127a16 --- /dev/null +++ b/build/node_modules/next/dist/server/dev/messages.js @@ -0,0 +1,74 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + FAST_REFRESH_RUNTIME_RELOAD: null, + createBinaryHmrMessageData: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + FAST_REFRESH_RUNTIME_RELOAD: function() { + return FAST_REFRESH_RUNTIME_RELOAD; + }, + createBinaryHmrMessageData: function() { + return createBinaryHmrMessageData; + } +}); +const _invarianterror = require("../../shared/lib/invariant-error"); +const _hotreloadertypes = require("./hot-reloader-types"); +const FAST_REFRESH_RUNTIME_RELOAD = 'Fast Refresh had to perform a full reload due to a runtime error.'; +const textEncoder = new TextEncoder(); +function createBinaryHmrMessageData(message) { + switch(message.type){ + case _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.ERRORS_TO_SHOW_IN_BROWSER: + { + const { serializedErrors } = message; + const totalLength = 1 + serializedErrors.length; + const data = new Uint8Array(totalLength); + const view = new DataView(data.buffer); + view.setUint8(0, _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.ERRORS_TO_SHOW_IN_BROWSER); + data.set(serializedErrors, 1); + return data; + } + case _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.REACT_DEBUG_CHUNK: + { + const { requestId, chunk } = message; + const requestIdBytes = textEncoder.encode(requestId); + const requestIdLength = requestIdBytes.length; + if (requestIdLength > 255) { + throw Object.defineProperty(new _invarianterror.InvariantError('Request ID is too long for the binary HMR message.'), "__NEXT_ERROR_CODE", { + value: "E805", + enumerable: false, + configurable: true + }); + } + const chunkLength = chunk ? chunk.length : 0; + const totalLength = 2 + requestIdLength + chunkLength; + const data = new Uint8Array(totalLength); + const view = new DataView(data.buffer); + view.setUint8(0, _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.REACT_DEBUG_CHUNK); + view.setUint8(1, requestIdLength); + textEncoder.encodeInto(requestId, data.subarray(2, 2 + requestIdLength)); + if (chunk) { + data.set(chunk, 2 + requestIdLength); + } + return data; + } + default: + { + throw Object.defineProperty(new _invarianterror.InvariantError(`Invalid binary HMR message of type ${message.type}`), "__NEXT_ERROR_CODE", { + value: "E809", + enumerable: false, + configurable: true + }); + } + } +} + +//# sourceMappingURL=messages.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/dev/middleware-turbopack.js b/build/node_modules/next/dist/server/dev/middleware-turbopack.js new file mode 100644 index 0000000..f31d34a --- /dev/null +++ b/build/node_modules/next/dist/server/dev/middleware-turbopack.js @@ -0,0 +1,403 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getOriginalStackFrames: null, + getOverlayMiddleware: null, + getSourceMapMiddleware: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getOriginalStackFrames: function() { + return getOriginalStackFrames; + }, + getOverlayMiddleware: function() { + return getOverlayMiddleware; + }, + getSourceMapMiddleware: function() { + return getSourceMapMiddleware; + } +}); +const _shared = require("../../next-devtools/server/shared"); +const _middlewareresponse = require("../../next-devtools/server/middleware-response"); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _launcheditor = require("../../next-devtools/server/launch-editor"); +const _sourcemap08 = require("next/dist/compiled/source-map08"); +const _sourcemaps = require("../lib/source-maps"); +const _nodemodule = require("node:module"); +const _nodeurl = require("node:url"); +const _nodeutil = require("node:util"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function shouldIgnorePath(modulePath) { + return modulePath.includes('node_modules') || // Only relevant for when Next.js is symlinked e.g. in the Next.js monorepo + modulePath.includes('next/dist') || modulePath.startsWith('node:'); +} +const currentSourcesByFile = new Map(); +/** + * @returns 1-based lines and 1-based columns + */ async function batchedTraceSource(project, frame) { + const file = frame.file ? decodeURIComponent(frame.file) : undefined; + if (!file) return; + // For node internals they cannot traced the actual source code with project.traceSource, + // we need an early return to indicate it's ignored to avoid the unknown scheme error from `project.traceSource`. + if (file.startsWith('node:')) { + return { + frame: { + file, + line1: frame.line ?? null, + column1: frame.column ?? null, + methodName: frame.methodName ?? '', + ignored: true, + arguments: [] + }, + source: null + }; + } + const currentDirectoryFileUrl = (0, _nodeurl.pathToFileURL)(process.cwd()).href; + const sourceFrame = await project.traceSource(frame, currentDirectoryFileUrl); + if (!sourceFrame) { + return { + frame: { + file, + line1: frame.line ?? null, + column1: frame.column ?? null, + methodName: frame.methodName ?? '', + ignored: shouldIgnorePath(file), + arguments: [] + }, + source: null + }; + } + let source = null; + const originalFile = sourceFrame.originalFile; + // Don't look up source for node_modules or internals. These can often be large bundled files. + const ignored = // Check the sourcemap's ignoreList (e.g. from 3rd party packages) + !!sourceFrame.isIgnored || shouldIgnorePath(originalFile ?? sourceFrame.file); + if (originalFile && !ignored) { + let sourcePromise = currentSourcesByFile.get(originalFile); + if (!sourcePromise) { + sourcePromise = project.getSourceForAsset(originalFile); + currentSourcesByFile.set(originalFile, sourcePromise); + setTimeout(()=>{ + // Cache file reads for 100ms, as frames will often reference the same + // files and can be large. + currentSourcesByFile.delete(originalFile); + }, 100); + } + source = await sourcePromise; + } + const ignorableFrame = { + file: sourceFrame.file, + line1: sourceFrame.line ?? null, + column1: sourceFrame.column ?? null, + methodName: // We ignore the sourcemapped name since it won't be the correct name. + // The callsite will point to the column of the variable name instead of the + // name of the enclosing function. + // TODO(NDX-531): Spy on prepareStackTrace to get the enclosing line number for method name mapping. + frame.methodName ?? '', + ignored, + arguments: [] + }; + return { + frame: ignorableFrame, + source + }; +} +function parseFile(fileParam) { + if (!fileParam) { + return undefined; + } + return (0, _sourcemaps.devirtualizeReactServerURL)(fileParam); +} +function createStackFrames(body) { + const { frames, isServer } = body; + return frames.map((frame)=>{ + const file = parseFile(frame.file); + if (!file) { + return undefined; + } + return { + file, + methodName: frame.methodName ?? '', + line: frame.line1 ?? undefined, + column: frame.column1 ?? undefined, + isServer + }; + }).filter((f)=>f !== undefined); +} +function createStackFrame(searchParams) { + const file = parseFile(searchParams.get('file')); + if (!file) { + return undefined; + } + return { + file, + methodName: searchParams.get('methodName') ?? '', + line: parseInt(searchParams.get('line1') ?? '0', 10) || undefined, + column: parseInt(searchParams.get('column1') ?? '0', 10) || undefined, + isServer: searchParams.get('isServer') === 'true' + }; +} +/** + * @returns 1-based lines and 1-based columns + */ async function nativeTraceSource(frame) { + const sourceURL = frame.file; + let sourceMapPayload; + try { + var _findSourceMap; + sourceMapPayload = (_findSourceMap = (0, _nodemodule.findSourceMap)(sourceURL)) == null ? void 0 : _findSourceMap.payload; + } catch (cause) { + throw Object.defineProperty(new Error(`${sourceURL}: Invalid source map. Only conformant source maps can be used to find the original code.`, { + cause + }), "__NEXT_ERROR_CODE", { + value: "E635", + enumerable: false, + configurable: true + }); + } + if (sourceMapPayload !== undefined) { + let consumer; + try { + consumer = await new _sourcemap08.SourceMapConsumer(sourceMapPayload); + } catch (cause) { + throw Object.defineProperty(new Error(`${sourceURL}: Invalid source map. Only conformant source maps can be used to find the original code.`, { + cause + }), "__NEXT_ERROR_CODE", { + value: "E635", + enumerable: false, + configurable: true + }); + } + let traced; + try { + const originalPosition = consumer.originalPositionFor({ + line: frame.line ?? 1, + // 0-based columns out requires 0-based columns in. + column: (frame.column ?? 1) - 1 + }); + if (originalPosition.source === null) { + traced = null; + } else { + const sourceContent = consumer.sourceContentFor(originalPosition.source, /* returnNullOnMissing */ true) ?? null; + traced = { + originalPosition, + sourceContent + }; + } + } finally{ + consumer.destroy(); + } + if (traced !== null) { + var // We ignore the sourcemapped name since it won't be the correct name. + // The callsite will point to the column of the variable name instead of the + // name of the enclosing function. + // TODO(NDX-531): Spy on prepareStackTrace to get the enclosing line number for method name mapping. + _frame_methodName_replace, _frame_methodName; + const { originalPosition, sourceContent } = traced; + const applicableSourceMap = (0, _sourcemaps.findApplicableSourceMapPayload)((frame.line ?? 1) - 1, (frame.column ?? 1) - 1, sourceMapPayload); + // TODO(veil): Upstream a method to sourcemap consumer that immediately says if a frame is ignored or not. + let ignored = false; + if (applicableSourceMap === undefined) { + console.error('No applicable source map found in sections for frame', frame); + } else { + var _applicableSourceMap_ignoreList; + // TODO: O(n^2). Consider moving `ignoreList` into a Set + const sourceIndex = applicableSourceMap.sources.indexOf(originalPosition.source); + ignored = ((_applicableSourceMap_ignoreList = applicableSourceMap.ignoreList) == null ? void 0 : _applicableSourceMap_ignoreList.includes(sourceIndex)) ?? // When sourcemap is not available, fallback to checking `frame.file`. + // e.g. In pages router, nextjs server code is not bundled into the page. + shouldIgnorePath(frame.file); + } + const originalStackFrame = { + methodName: ((_frame_methodName = frame.methodName) == null ? void 0 : (_frame_methodName_replace = _frame_methodName.replace('__WEBPACK_DEFAULT_EXPORT__', 'default')) == null ? void 0 : _frame_methodName_replace.replace('__webpack_exports__.', '')) || '', + file: originalPosition.source, + line1: originalPosition.line, + column1: originalPosition.column === null ? null : originalPosition.column + 1, + // TODO: c&p from async createOriginalStackFrame but why not frame.arguments? + arguments: [], + ignored + }; + return { + frame: originalStackFrame, + source: sourceContent + }; + } + } + return undefined; +} +async function createOriginalStackFrame(project, projectPath, frame) { + const traced = await nativeTraceSource(frame) ?? // TODO(veil): When would the bundler know more than native? + // If it's faster, try the bundler first and fall back to native later. + await batchedTraceSource(project, frame); + if (!traced) { + return null; + } + let normalizedStackFrameLocation = traced.frame.file; + if (normalizedStackFrameLocation !== null && normalizedStackFrameLocation.startsWith('file://')) { + normalizedStackFrameLocation = _path.default.relative(projectPath, (0, _nodeurl.fileURLToPath)(normalizedStackFrameLocation)); + } + /** undefined = not yet computed */ let originalCodeFrame; + const tracedFrame = traced.frame; + return { + originalStackFrame: { + arguments: tracedFrame.arguments, + file: normalizedStackFrameLocation, + line1: tracedFrame.line1, + column1: tracedFrame.column1, + ignored: tracedFrame.ignored, + methodName: tracedFrame.methodName + }, + get originalCodeFrame () { + if (originalCodeFrame === undefined) { + originalCodeFrame = (0, _shared.getOriginalCodeFrame)(tracedFrame, traced.source); + } + return originalCodeFrame; + } + }; +} +function getOverlayMiddleware({ project, projectPath, isSrcDir }) { + return async function(req, res, next) { + const { pathname, searchParams } = new URL(req.url, 'http://n'); + if (pathname === '/__nextjs_original-stack-frames') { + if (req.method !== 'POST') { + return _middlewareresponse.middlewareResponse.badRequest(res); + } + const body = await new Promise((resolve, reject)=>{ + let data = ''; + req.on('data', (chunk)=>{ + data += chunk; + }); + req.on('end', ()=>resolve(data)); + req.on('error', reject); + }); + const request = JSON.parse(body); + const result = await getOriginalStackFrames({ + project, + projectPath, + frames: request.frames, + isServer: request.isServer, + isEdgeServer: request.isEdgeServer, + isAppDirectory: request.isAppDirectory + }); + (0, _shared.ignoreListAnonymousStackFramesIfSandwiched)(result); + return _middlewareresponse.middlewareResponse.json(res, result); + } else if (pathname === '/__nextjs_launch-editor') { + const isAppRelativePath = searchParams.get('isAppRelativePath') === '1'; + let openEditorResult; + if (isAppRelativePath) { + const relativeFilePath = searchParams.get('file') || ''; + const appPath = _path.default.join('app', isSrcDir ? 'src' : '', relativeFilePath); + openEditorResult = await (0, _launcheditor.openFileInEditor)(appPath, 1, 1, projectPath); + } else { + const frame = createStackFrame(searchParams); + if (!frame) return _middlewareresponse.middlewareResponse.badRequest(res); + openEditorResult = await (0, _launcheditor.openFileInEditor)(frame.file, frame.line ?? 1, frame.column ?? 1, projectPath); + } + if (openEditorResult.error) { + return _middlewareresponse.middlewareResponse.internalServerError(res, openEditorResult.error); + } + if (!openEditorResult.found) { + return _middlewareresponse.middlewareResponse.notFound(res); + } + return _middlewareresponse.middlewareResponse.noContent(res); + } + return next(); + }; +} +function getSourceMapMiddleware(project) { + return async function(req, res, next) { + const { pathname, searchParams } = new URL(req.url, 'http://n'); + if (pathname !== '/__nextjs_source-map') { + return next(); + } + let filename = searchParams.get('filename'); + if (!filename) { + return _middlewareresponse.middlewareResponse.badRequest(res); + } + let nativeSourceMap; + try { + nativeSourceMap = (0, _nodemodule.findSourceMap)(filename); + } catch (cause) { + return _middlewareresponse.middlewareResponse.internalServerError(res, Object.defineProperty(new Error(`${filename}: Invalid source map. Only conformant source maps can be used to find the original code.`, { + cause + }), "__NEXT_ERROR_CODE", { + value: "E635", + enumerable: false, + configurable: true + })); + } + if (nativeSourceMap !== undefined) { + const sourceMapPayload = nativeSourceMap.payload; + return _middlewareresponse.middlewareResponse.json(res, sourceMapPayload); + } + try { + // Turbopack chunk filenames might be URL-encoded. + filename = decodeURI(filename); + } catch { + return _middlewareresponse.middlewareResponse.badRequest(res); + } + if (_path.default.isAbsolute(filename)) { + filename = (0, _nodeurl.pathToFileURL)(filename).href; + } + try { + const sourceMapString = await project.getSourceMap(filename); + if (sourceMapString) { + return _middlewareresponse.middlewareResponse.jsonString(res, sourceMapString); + } + } catch (cause) { + return _middlewareresponse.middlewareResponse.internalServerError(res, Object.defineProperty(new Error(`Failed to get source map for '${filename}'. This is a bug in Next.js`, { + cause + }), "__NEXT_ERROR_CODE", { + value: "E719", + enumerable: false, + configurable: true + })); + } + _middlewareresponse.middlewareResponse.noContent(res); + }; +} +async function getOriginalStackFrames({ project, projectPath, frames, isServer, isEdgeServer, isAppDirectory }) { + const stackFrames = createStackFrames({ + frames, + isServer, + isEdgeServer, + isAppDirectory + }); + return Promise.all(stackFrames.map(async (frame)=>{ + try { + const stackFrame = await createOriginalStackFrame(project, projectPath, frame); + if (stackFrame === null) { + return { + status: 'rejected', + reason: 'Failed to create original stack frame' + }; + } + const originalStackFrame = stackFrame.originalStackFrame; + return { + status: 'fulfilled', + value: { + originalStackFrame, + originalCodeFrame: (originalStackFrame == null ? void 0 : originalStackFrame.ignored) ?? true ? null : stackFrame.originalCodeFrame + } + }; + } catch (error) { + return { + status: 'rejected', + reason: (0, _nodeutil.inspect)(error, { + colors: false + }) + }; + } + })); +} + +//# sourceMappingURL=middleware-turbopack.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/dev/middleware-webpack.js b/build/node_modules/next/dist/server/dev/middleware-webpack.js new file mode 100644 index 0000000..7905f0d --- /dev/null +++ b/build/node_modules/next/dist/server/dev/middleware-webpack.js @@ -0,0 +1,483 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createOriginalStackFrame: null, + getIgnoredSources: null, + getOriginalStackFrames: null, + getOverlayMiddleware: null, + getSourceMapMiddleware: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createOriginalStackFrame: function() { + return createOriginalStackFrame; + }, + getIgnoredSources: function() { + return getIgnoredSources; + }, + getOriginalStackFrames: function() { + return getOriginalStackFrames; + }, + getOverlayMiddleware: function() { + return getOverlayMiddleware; + }, + getSourceMapMiddleware: function() { + return getSourceMapMiddleware; + } +}); +const _module = require("module"); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _url = require("url"); +const _sourcemap08 = require("next/dist/compiled/source-map08"); +const _getsourcemapfromfile = require("./get-source-map-from-file"); +const _sourcemaps = require("../lib/source-maps"); +const _launcheditor = require("../../next-devtools/server/launch-editor"); +const _shared = require("../../next-devtools/server/shared"); +const _middlewareresponse = require("../../next-devtools/server/middleware-response"); +const _webpackmodulepath = require("../../next-devtools/shared/webpack-module-path"); +const _util = require("util"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function shouldIgnoreSource(sourceURL) { + return sourceURL.includes('node_modules') || // Only relevant for when Next.js is symlinked e.g. in the Next.js monorepo + sourceURL.includes('next/dist') || sourceURL.startsWith('node:'); +} +function getModuleById(id, compilation) { + const { chunkGraph, modules } = compilation; + return [ + ...modules + ].find((module1)=>chunkGraph.getModuleId(module1) === id); +} +function findModuleNotFoundFromError(errorMessage) { + var _errorMessage_match; + return errorMessage == null ? void 0 : (_errorMessage_match = errorMessage.match(/'([^']+)' module/)) == null ? void 0 : _errorMessage_match[1]; +} +function getSourcePath(source) { + if (source.startsWith('file://')) { + return (0, _url.fileURLToPath)(source); + } + return source.replace(/^(webpack:\/\/\/|webpack:\/\/|webpack:\/\/_N_E\/)/, ''); +} +/** + * @returns 1-based lines and 0-based columns + */ async function findOriginalSourcePositionAndContent(sourceMap, position) { + let consumer; + try { + consumer = await new _sourcemap08.SourceMapConsumer(sourceMap); + } catch (cause) { + console.error(Object.defineProperty(new Error(`${sourceMap.file}: Invalid source map. Only conformant source maps can be used to find the original code.`, { + cause + }), "__NEXT_ERROR_CODE", { + value: "E635", + enumerable: false, + configurable: true + })); + return null; + } + try { + const sourcePosition = consumer.originalPositionFor({ + line: position.line1 ?? 1, + // 0-based columns out requires 0-based columns in. + column: (position.column1 ?? 1) - 1 + }); + if (!sourcePosition.source) { + return null; + } + const sourceContent = consumer.sourceContentFor(sourcePosition.source, /* returnNullOnMissing */ true) ?? null; + return { + sourcePosition, + sourceContent + }; + } finally{ + consumer.destroy(); + } +} +function getIgnoredSources(sourceMap) { + const ignoreList = new Set(sourceMap.ignoreList ?? []); + const moduleFilenames = (sourceMap == null ? void 0 : sourceMap.sources) ?? []; + for(let index = 0; index < moduleFilenames.length; index++){ + // bundlerFilePath case: webpack://./app/page.tsx + const webpackSourceURL = moduleFilenames[index]; + // Format the path to the normal file path + const formattedFilePath = (0, _webpackmodulepath.formatStackFrameFile)(webpackSourceURL); + if (shouldIgnoreSource(formattedFilePath)) { + ignoreList.add(index); + } + } + const ignoredSources = sourceMap.sources.map((source, index)=>{ + var _sourceMap_sourcesContent; + return { + url: source, + ignored: ignoreList.has(sourceMap.sources.indexOf(source)), + content: ((_sourceMap_sourcesContent = sourceMap.sourcesContent) == null ? void 0 : _sourceMap_sourcesContent[index]) ?? null + }; + }); + return ignoredSources; +} +function isIgnoredSource(source, sourcePosition) { + if (sourcePosition.source == null) { + return true; + } + for (const ignoredSource of source.ignoredSources){ + if (ignoredSource.ignored && ignoredSource.url === sourcePosition.source) { + return true; + } + } + return false; +} +function findOriginalSourcePositionAndContentFromCompilation(moduleId, importedModule, compilation) { + var _module_buildInfo_importLocByPath, _module_buildInfo; + const module1 = getModuleById(moduleId, compilation); + return (module1 == null ? void 0 : (_module_buildInfo = module1.buildInfo) == null ? void 0 : (_module_buildInfo_importLocByPath = _module_buildInfo.importLocByPath) == null ? void 0 : _module_buildInfo_importLocByPath.get(importedModule)) ?? null; +} +async function createOriginalStackFrame({ ignoredByDefault, source, rootDirectory, frame, errorMessage }) { + var // We ignore the sourcemapped name since it won't be the correct name. + // The callsite will point to the column of the variable name instead of the + // name of the enclosing function. + // TODO(NDX-531): Spy on prepareStackTrace to get the enclosing line number for method name mapping. + // default is not a valid identifier in JS so webpack uses a custom variable when it's an unnamed default export + // Resolve it back to `default` for the method name if the source position didn't have the method. + _frame_methodName_replace, _frame_methodName; + const moduleNotFound = findModuleNotFoundFromError(errorMessage); + const result = await (()=>{ + if (moduleNotFound) { + if (source.type === 'file') { + return undefined; + } + return findOriginalSourcePositionAndContentFromCompilation(source.moduleId, moduleNotFound, source.compilation); + } + return findOriginalSourcePositionAndContent(source.sourceMap, frame); + })(); + if (!result) { + return null; + } + const { sourcePosition, sourceContent } = result; + if (!sourcePosition.source) { + return null; + } + const ignored = ignoredByDefault || isIgnoredSource(source, sourcePosition) || // If the source file is externals, should be excluded even it's not ignored source. + // e.g. webpack://next/dist/.. needs to be ignored + shouldIgnoreSource(source.moduleURL); + const sourcePath = getSourcePath(// When sourcePosition.source is the loader path the modulePath is generally better. + (sourcePosition.source.includes('|') ? source.moduleURL : sourcePosition.source) || source.moduleURL); + const filePath = _path.default.resolve(rootDirectory, sourcePath); + const resolvedFilePath = _path.default.relative(rootDirectory, filePath); + const traced = { + file: resolvedFilePath, + line1: sourcePosition.line, + column1: sourcePosition.column === null ? null : sourcePosition.column + 1, + methodName: (_frame_methodName = frame.methodName) == null ? void 0 : (_frame_methodName_replace = _frame_methodName.replace('__WEBPACK_DEFAULT_EXPORT__', 'default')) == null ? void 0 : _frame_methodName_replace.replace('__webpack_exports__.', ''), + arguments: [], + ignored + }; + /** undefined = not yet computed */ let originalCodeFrame; + return { + originalStackFrame: traced, + get originalCodeFrame () { + if (originalCodeFrame === undefined) { + originalCodeFrame = (0, _shared.getOriginalCodeFrame)(traced, sourceContent); + } + return originalCodeFrame; + } + }; +} +async function getSourceMapFromCompilation(id, compilation) { + try { + const module1 = getModuleById(id, compilation); + if (!module1) { + return undefined; + } + // @ts-expect-error The types for `CodeGenerationResults.get` require a + // runtime to be passed as second argument, but apparently it also works + // without it. + const codeGenerationResult = compilation.codeGenerationResults.get(module1); + const source = codeGenerationResult == null ? void 0 : codeGenerationResult.sources.get('javascript'); + return (source == null ? void 0 : source.map()) ?? undefined; + } catch (err) { + console.error(`Failed to lookup module by ID ("${id}"):`, err); + return undefined; + } +} +async function getSource(frame, options) { + let sourceURL = frame.file ?? ''; + const { getCompilations } = options; + sourceURL = (0, _sourcemaps.devirtualizeReactServerURL)(sourceURL); + let nativeSourceMap; + try { + nativeSourceMap = (0, _module.findSourceMap)(sourceURL); + } catch (cause) { + throw Object.defineProperty(new Error(`${sourceURL}: Invalid source map. Only conformant source maps can be used to find the original code.`, { + cause + }), "__NEXT_ERROR_CODE", { + value: "E635", + enumerable: false, + configurable: true + }); + } + if (nativeSourceMap !== undefined) { + const sourceMapPayload = nativeSourceMap.payload; + return { + type: 'file', + sourceMap: (0, _sourcemaps.findApplicableSourceMapPayload)((frame.line1 ?? 1) - 1, (frame.column1 ?? 1) - 1, sourceMapPayload), + ignoredSources: getIgnoredSources(// @ts-expect-error -- TODO: Support IndexSourceMap + sourceMapPayload), + moduleURL: sourceURL + }; + } + if (_path.default.isAbsolute(sourceURL)) { + sourceURL = (0, _url.pathToFileURL)(sourceURL).href; + } + if (sourceURL.startsWith('file:')) { + const sourceMap = await (0, _getsourcemapfromfile.getSourceMapFromFile)(sourceURL); + return sourceMap ? { + type: 'file', + sourceMap, + ignoredSources: getIgnoredSources(sourceMap), + moduleURL: sourceURL + } : undefined; + } + // webpack-internal:///./src/hello.tsx => ./src/hello.tsx + // webpack://_N_E/./src/hello.tsx => ./src/hello.tsx + const moduleId = sourceURL.replace(/^(webpack-internal:\/\/\/|webpack:\/\/(_N_E\/)?)/, '').replace(/\?\d+$/, ''); + // (rsc)/./src/hello.tsx => ./src/hello.tsx + const moduleURL = moduleId.replace(/^(\(.*\)\/?)/, ''); + for (const compilation of getCompilations()){ + const sourceMap = await getSourceMapFromCompilation(moduleId, compilation); + if (sourceMap) { + const ignoredSources = getIgnoredSources(sourceMap); + return { + type: 'bundle', + sourceMap, + compilation, + moduleId, + moduleURL, + ignoredSources + }; + } + } + return undefined; +} +async function getOriginalStackFrames({ isServer, isEdgeServer, isAppDirectory, frames, clientStats, serverStats, edgeServerStats, rootDirectory }) { + const frameResponses = await Promise.all(frames.map((frame)=>getOriginalStackFrame({ + isServer, + isEdgeServer, + isAppDirectory, + frame, + clientStats, + serverStats, + edgeServerStats, + rootDirectory + }).then((value)=>{ + return { + status: 'fulfilled', + value + }; + }, (reason)=>{ + return { + status: 'rejected', + reason: (0, _util.inspect)(reason, { + colors: false + }) + }; + }))); + (0, _shared.ignoreListAnonymousStackFramesIfSandwiched)(frameResponses); + return frameResponses; +} +async function getOriginalStackFrame({ isServer, isEdgeServer, isAppDirectory, frame, clientStats, serverStats, edgeServerStats, rootDirectory }) { + const filename = frame.file ?? ''; + const source = await getSource(frame, { + getCompilations: ()=>{ + const compilations = []; + // Try Client Compilation first. In `pages` we leverage + // `isClientError` to check. In `app` it depends on if it's a server + // / client component and when the code throws. E.g. during HTML + // rendering it's the server/edge compilation. + if (!isEdgeServer && !isServer || isAppDirectory) { + var _clientStats; + const compilation = (_clientStats = clientStats()) == null ? void 0 : _clientStats.compilation; + if (compilation) { + compilations.push(compilation); + } + } + // Try Server Compilation. In `pages` this could be something + // imported in getServerSideProps/getStaticProps as the code for + // those is tree-shaken. In `app` this finds server components and + // code that was imported from a server component. It also covers + // when client component code throws during HTML rendering. + if (isServer || isAppDirectory) { + var _serverStats; + const compilation = (_serverStats = serverStats()) == null ? void 0 : _serverStats.compilation; + if (compilation) { + compilations.push(compilation); + } + } + // Try Edge Server Compilation. Both cases are the same as Server + // Compilation, main difference is that it covers `runtime: 'edge'` + // pages/app routes. + if (isEdgeServer || isAppDirectory) { + var _edgeServerStats; + const compilation = (_edgeServerStats = edgeServerStats()) == null ? void 0 : _edgeServerStats.compilation; + if (compilation) { + compilations.push(compilation); + } + } + return compilations; + } + }); + let defaultNormalizedStackFrameLocation = frame.file; + if (defaultNormalizedStackFrameLocation !== null && defaultNormalizedStackFrameLocation.startsWith('file://')) { + defaultNormalizedStackFrameLocation = _path.default.relative(rootDirectory, (0, _url.fileURLToPath)(defaultNormalizedStackFrameLocation)); + } + // This stack frame is used for the one that couldn't locate the source or source mapped frame + const defaultStackFrame = { + file: defaultNormalizedStackFrameLocation, + line1: frame.line1, + column1: frame.column1, + methodName: frame.methodName, + ignored: shouldIgnoreSource(filename), + arguments: [] + }; + if (!source) { + // return original stack frame with no source map + return { + originalStackFrame: defaultStackFrame, + originalCodeFrame: null + }; + } + defaultStackFrame.ignored ||= (0, _sourcemaps.sourceMapIgnoreListsEverything)(source.sourceMap); + const originalStackFrameResponse = await createOriginalStackFrame({ + ignoredByDefault: defaultStackFrame.ignored, + frame, + source, + rootDirectory + }); + if (!originalStackFrameResponse) { + return { + originalStackFrame: defaultStackFrame, + originalCodeFrame: null + }; + } + const originalStackFrame = originalStackFrameResponse.originalStackFrame; + return { + originalStackFrame, + originalCodeFrame: (originalStackFrame == null ? void 0 : originalStackFrame.ignored) ?? true ? null : originalStackFrameResponse.originalCodeFrame + }; +} +function getOverlayMiddleware(options) { + const { rootDirectory, isSrcDir, clientStats, serverStats, edgeServerStats } = options; + return async function(req, res, next) { + const { pathname, searchParams } = new URL(`http://n${req.url}`); + if (pathname === '/__nextjs_original-stack-frames') { + if (req.method !== 'POST') { + return _middlewareresponse.middlewareResponse.badRequest(res); + } + const body = await new Promise((resolve, reject)=>{ + let data = ''; + req.on('data', (chunk)=>{ + data += chunk; + }); + req.on('end', ()=>resolve(data)); + req.on('error', reject); + }); + try { + const { frames, isServer, isEdgeServer, isAppDirectory } = JSON.parse(body); + return _middlewareresponse.middlewareResponse.json(res, await getOriginalStackFrames({ + isServer, + isEdgeServer, + isAppDirectory, + frames, + clientStats, + serverStats, + edgeServerStats, + rootDirectory + })); + } catch (err) { + return _middlewareresponse.middlewareResponse.badRequest(res); + } + } else if (pathname === '/__nextjs_launch-editor') { + const frame = { + file: searchParams.get('file'), + methodName: searchParams.get('methodName'), + line1: parseInt(searchParams.get('line1') ?? '1', 10) || 1, + column1: parseInt(searchParams.get('column1') ?? '1', 10) || 1, + arguments: searchParams.getAll('arguments').filter(Boolean) + }; + if (!frame.file) return _middlewareresponse.middlewareResponse.badRequest(res); + let openEditorResult; + const isAppRelativePath = searchParams.get('isAppRelativePath') === '1'; + if (isAppRelativePath) { + const relativeFilePath = searchParams.get('file') || ''; + const appPath = _path.default.join('app', isSrcDir ? 'src' : '', relativeFilePath); + openEditorResult = await (0, _launcheditor.openFileInEditor)(appPath, 1, 1, rootDirectory); + } else { + // TODO: How do we differentiate layers and actual file paths with round brackets? + // frame files may start with their webpack layer, like (middleware)/middleware.js + const filePath = frame.file.replace(/^\([^)]+\)\//, ''); + openEditorResult = await (0, _launcheditor.openFileInEditor)(filePath, frame.line1, frame.column1 ?? 1, rootDirectory); + } + if (openEditorResult.error) { + console.error('Failed to launch editor:', openEditorResult.error); + return _middlewareresponse.middlewareResponse.internalServerError(res, openEditorResult.error); + } + if (!openEditorResult.found) { + return _middlewareresponse.middlewareResponse.notFound(res); + } + return _middlewareresponse.middlewareResponse.noContent(res); + } + return next(); + }; +} +function getSourceMapMiddleware(options) { + const { clientStats, serverStats, edgeServerStats } = options; + return async function(req, res, next) { + const { pathname, searchParams } = new URL(`http://n${req.url}`); + if (pathname !== '/__nextjs_source-map') { + return next(); + } + const filename = searchParams.get('filename'); + if (!filename) { + return _middlewareresponse.middlewareResponse.badRequest(res); + } + let source; + try { + source = await getSource({ + file: filename, + // Webpack doesn't use Index Source Maps + line1: null, + column1: null + }, { + getCompilations: ()=>{ + const compilations = []; + for (const stats of [ + clientStats(), + serverStats(), + edgeServerStats() + ]){ + if (stats == null ? void 0 : stats.compilation) { + compilations.push(stats.compilation); + } + } + return compilations; + } + }); + } catch (error) { + return _middlewareresponse.middlewareResponse.internalServerError(res, error); + } + if (!source) { + return _middlewareresponse.middlewareResponse.noContent(res); + } + return _middlewareresponse.middlewareResponse.json(res, source.sourceMap); + }; +} + +//# sourceMappingURL=middleware-webpack.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/dev/node-stack-frames.js b/build/node_modules/next/dist/server/dev/node-stack-frames.js new file mode 100644 index 0000000..b83c5ca --- /dev/null +++ b/build/node_modules/next/dist/server/dev/node-stack-frames.js @@ -0,0 +1,72 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getServerError", { + enumerable: true, + get: function() { + return getServerError; + } +}); +const _stacktraceparser = require("next/dist/compiled/stacktrace-parser"); +const _errorsource = require("../../shared/lib/error-source"); +function getFilesystemFrame(frame) { + const f = { + ...frame + }; + if (typeof f.file === 'string') { + if (// Posix: + f.file.startsWith('/') || // Win32: + /^[a-z]:\\/i.test(f.file) || // Win32 UNC: + f.file.startsWith('\\\\')) { + f.file = `file://${f.file}`; + } + } + return f; +} +function getServerError(error, type) { + if (error.name === 'TurbopackInternalError') { + // If this is an internal Turbopack error we shouldn't show internal details + // to the user. These are written to a log file instead. + const turbopackInternalError = Object.defineProperty(new Error('An unexpected Turbopack error occurred. Please see the output of `next dev` for more details.'), "__NEXT_ERROR_CODE", { + value: "E167", + enumerable: false, + configurable: true + }); + (0, _errorsource.decorateServerError)(turbopackInternalError, type); + return turbopackInternalError; + } + let n; + try { + throw Object.defineProperty(new Error(error.message), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } catch (e) { + n = e; + } + n.name = error.name; + try { + n.stack = `${n.toString()}\n${(0, _stacktraceparser.parse)(error.stack).map(getFilesystemFrame).map((f)=>{ + let str = ` at ${f.methodName}`; + if (f.file) { + let loc = f.file; + if (f.lineNumber) { + loc += `:${f.lineNumber}`; + if (f.column) { + loc += `:${f.column}`; + } + } + str += ` (${loc})`; + } + return str; + }).join('\n')}`; + } catch { + n.stack = error.stack; + } + (0, _errorsource.decorateServerError)(n, type); + return n; +} + +//# sourceMappingURL=node-stack-frames.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/dev/on-demand-entry-handler.js b/build/node_modules/next/dist/server/dev/on-demand-entry-handler.js new file mode 100644 index 0000000..1dd8cb9 --- /dev/null +++ b/build/node_modules/next/dist/server/dev/on-demand-entry-handler.js @@ -0,0 +1,773 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + ADDED: null, + BUILDING: null, + BUILT: null, + EntryTypes: null, + findPagePathData: null, + getEntries: null, + getEntryKey: null, + getInvalidator: null, + onDemandEntryHandler: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + ADDED: function() { + return ADDED; + }, + BUILDING: function() { + return BUILDING; + }, + BUILT: function() { + return BUILT; + }, + EntryTypes: function() { + return EntryTypes; + }, + findPagePathData: function() { + return findPagePathData; + }, + getEntries: function() { + return getEntries; + }, + getEntryKey: function() { + return getEntryKey; + }, + getInvalidator: function() { + return getInvalidator; + }, + onDemandEntryHandler: function() { + return onDemandEntryHandler; + } +}); +const _debug = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/debug")); +const _events = require("events"); +const _findpagefile = require("../lib/find-page-file"); +const _entries = require("../../build/entries"); +const _getstaticinfoincludinglayouts = require("../../build/get-static-info-including-layouts"); +const _path = require("path"); +const _normalizepathsep = require("../../shared/lib/page-path/normalize-path-sep"); +const _normalizepagepath = require("../../shared/lib/page-path/normalize-page-path"); +const _ensureleadingslash = require("../../shared/lib/page-path/ensure-leading-slash"); +const _removepagepathtail = require("../../shared/lib/page-path/remove-page-path-tail"); +const _output = require("../../build/output"); +const _getroutefromentrypoint = /*#__PURE__*/ _interop_require_default(require("../get-route-from-entrypoint")); +const _utils = require("../../build/utils"); +const _utils1 = require("../../shared/lib/utils"); +const _constants = require("../../shared/lib/constants"); +const _segment = require("../../shared/lib/segment"); +const _hotreloadertypes = require("./hot-reloader-types"); +const _apppageroutedefinition = require("../route-definitions/app-page-route-definition"); +const _scheduler = require("../../lib/scheduler"); +const _batcher = require("../../lib/batcher"); +const _apppaths = require("../../shared/lib/router/utils/app-paths"); +const _pagetypes = require("../../lib/page-types"); +const _flightdatahelpers = require("../../client/flight-data-helpers"); +const _geterrors = require("../mcp/tools/get-errors"); +const _getpagemetadata = require("../mcp/tools/get-page-metadata"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const debug = (0, _debug.default)('next:on-demand-entry-handler'); +/** + * Returns object keys with type inferred from the object key + */ const keys = Object.keys; +const COMPILER_KEYS = keys(_constants.COMPILER_INDEXES); +function treePathToEntrypoint(segmentPath, parentPath) { + const [parallelRouteKey, segment] = segmentPath; + // TODO-APP: modify this path to cover parallelRouteKey convention + const path = (parentPath ? parentPath + '/' : '') + (parallelRouteKey !== 'children' && !segment.startsWith('@') ? `@${parallelRouteKey}/` : '') + (segment === '' ? 'page' : segment); + // Last segment + if (segmentPath.length === 2) { + return path; + } + const childSegmentPath = (0, _flightdatahelpers.getNextFlightSegmentPath)(segmentPath); + return treePathToEntrypoint(childSegmentPath, path); +} +function convertDynamicParamTypeToSyntax(dynamicParamTypeShort, param) { + switch(dynamicParamTypeShort){ + case 'c': + case 'ci(..)(..)': + case 'ci(.)': + case 'ci(..)': + case 'ci(...)': + return `[...${param}]`; + case 'oc': + return `[[...${param}]]`; + case 'd': + case 'di(..)(..)': + case 'di(.)': + case 'di(..)': + case 'di(...)': + return `[${param}]`; + default: + throw Object.defineProperty(new Error('Unknown dynamic param type'), "__NEXT_ERROR_CODE", { + value: "E378", + enumerable: false, + configurable: true + }); + } +} +function getEntryKey(compilerType, pageBundleType, page) { + // TODO: handle the /children slot better + // this is a quick hack to handle when children is provided as children/page instead of /page + const pageKey = page.replace(/(@[^/]+)\/children/g, '$1'); + return `${compilerType}@${pageBundleType}@${pageKey}`; +} +function getPageBundleType(pageBundlePath) { + // Handle special case for /_error + if (pageBundlePath === '/_error') return _pagetypes.PAGE_TYPES.PAGES; + if ((0, _utils.isMiddlewareFilename)(pageBundlePath)) return _pagetypes.PAGE_TYPES.ROOT; + return pageBundlePath.startsWith('pages/') ? _pagetypes.PAGE_TYPES.PAGES : pageBundlePath.startsWith('app/') ? _pagetypes.PAGE_TYPES.APP : _pagetypes.PAGE_TYPES.ROOT; +} +function getEntrypointsFromTree(tree, isFirst, parentPath = []) { + const [segment, parallelRoutes] = tree; + const currentSegment = Array.isArray(segment) ? convertDynamicParamTypeToSyntax(segment[2], segment[0]) : segment; + const isPageSegment = currentSegment.startsWith(_segment.PAGE_SEGMENT_KEY); + const currentPath = [ + ...parentPath, + isPageSegment ? '' : currentSegment + ]; + if (!isFirst && isPageSegment) { + // TODO get rid of '' at the start of tree + return [ + treePathToEntrypoint(currentPath.slice(1)) + ]; + } + return Object.keys(parallelRoutes).reduce((paths, key)=>{ + const childTree = parallelRoutes[key]; + const childPages = getEntrypointsFromTree(childTree, false, [ + ...currentPath, + key + ]); + return [ + ...paths, + ...childPages + ]; + }, []); +} +const ADDED = Symbol('added'); +const BUILDING = Symbol('building'); +const BUILT = Symbol('built'); +var EntryTypes = /*#__PURE__*/ function(EntryTypes) { + EntryTypes[EntryTypes["ENTRY"] = 0] = "ENTRY"; + EntryTypes[EntryTypes["CHILD_ENTRY"] = 1] = "CHILD_ENTRY"; + return EntryTypes; +}({}); +const entriesMap = new Map(); +// remove /server from end of output for server compiler +const normalizeOutputPath = (dir)=>dir.replace(/[/\\]server$/, ''); +const getEntries = (dir)=>{ + dir = normalizeOutputPath(dir); + const entries = entriesMap.get(dir) || {}; + entriesMap.set(dir, entries); + return entries; +}; +const invalidators = new Map(); +const getInvalidator = (dir)=>{ + dir = normalizeOutputPath(dir); + return invalidators.get(dir); +}; +const doneCallbacks = new _events.EventEmitter(); +const lastClientAccessPages = [ + '' +]; +const lastServerAccessPagesForAppDir = [ + '' +]; +// Make sure only one invalidation happens at a time +// Otherwise, webpack hash gets changed and it'll force the client to reload. +class Invalidator { + constructor(multiCompiler){ + this.building = new Set(); + this.rebuildAgain = new Set(); + this.multiCompiler = multiCompiler; + } + shouldRebuildAll() { + return this.rebuildAgain.size > 0; + } + invalidate(compilerKeys = COMPILER_KEYS) { + for (const key of compilerKeys){ + var _this_multiCompiler_compilers_COMPILER_INDEXES_key_watching; + // If there's a current build is processing, we won't abort it by invalidating. + // (If aborted, it'll cause a client side hard reload) + // But let it to invalidate just after the completion. + // So, it can re-build the queued pages at once. + if (this.building.has(key)) { + this.rebuildAgain.add(key); + continue; + } + this.building.add(key); + (_this_multiCompiler_compilers_COMPILER_INDEXES_key_watching = this.multiCompiler.compilers[_constants.COMPILER_INDEXES[key]].watching) == null ? void 0 : _this_multiCompiler_compilers_COMPILER_INDEXES_key_watching.invalidate(); + } + } + startBuilding(compilerKey) { + this.building.add(compilerKey); + } + doneBuilding(compilerKeys = []) { + const rebuild = []; + for (const key of compilerKeys){ + this.building.delete(key); + if (this.rebuildAgain.has(key)) { + rebuild.push(key); + this.rebuildAgain.delete(key); + } + } + if (rebuild.length > 0) { + this.invalidate(rebuild); + } + } + willRebuild(compilerKey) { + return this.rebuildAgain.has(compilerKey); + } +} +function disposeInactiveEntries(entries, maxInactiveAge) { + Object.keys(entries).forEach((entryKey)=>{ + const entryData = entries[entryKey]; + const { lastActiveTime, status, dispose, bundlePath } = entryData; + // TODO-APP: implement disposing of CHILD_ENTRY + if (entryData.type === 1) { + return; + } + // For the root middleware and the instrumentation hook files, + // we don't dispose them periodically as it's needed for every request. + if ((0, _utils.isMiddlewareFilename)(bundlePath) || (0, _utils.isInstrumentationHookFilename)(bundlePath)) { + return; + } + if (dispose) // Skip pages already scheduled for disposing + return; + // This means this entry is currently building or just added + // We don't need to dispose those entries. + if (status !== BUILT) return; + // We should not build the last accessed page even we didn't get any pings + // Sometimes, it's possible our XHR ping to wait before completing other requests. + // In that case, we should not dispose the current viewing page + if (lastClientAccessPages.includes(entryKey) || lastServerAccessPagesForAppDir.includes(entryKey)) return; + if (lastActiveTime && Date.now() - lastActiveTime > maxInactiveAge) { + entries[entryKey].dispose = true; + } + }); +} +// Normalize both app paths and page paths +function tryToNormalizePagePath(page) { + try { + return (0, _normalizepagepath.normalizePagePath)(page); + } catch (err) { + console.error(err); + throw new _utils1.PageNotFoundError(page); + } +} +async function findPagePathData(rootDir, page, extensions, pagesDir, appDir, isGlobalNotFoundEnabled) { + const normalizedPagePath = tryToNormalizePagePath(page); + let pagePath = null; + const isInstrumentation = (0, _utils.isInstrumentationHookFile)(normalizedPagePath); + if ((0, _utils.isMiddlewareFile)(normalizedPagePath) || isInstrumentation) { + pagePath = await (0, _findpagefile.findPageFile)(rootDir, normalizedPagePath, extensions, false); + if (!pagePath) { + throw new _utils1.PageNotFoundError(normalizedPagePath); + } + const pageUrl = (0, _ensureleadingslash.ensureLeadingSlash)((0, _removepagepathtail.removePagePathTail)((0, _normalizepathsep.normalizePathSep)(pagePath), { + extensions + })); + let bundlePath = normalizedPagePath; + let pageKey = _path.posix.normalize(pageUrl); + if (isInstrumentation || (0, _utils.isMiddlewareFile)(normalizedPagePath)) { + bundlePath = bundlePath.replace('/src', ''); + pageKey = page.replace('/src', ''); + } + return { + filename: (0, _path.join)(rootDir, pagePath), + bundlePath: bundlePath.slice(1), + page: pageKey + }; + } + // Check appDir first falling back to pagesDir + if (appDir) { + if (page === _constants.UNDERSCORE_NOT_FOUND_ROUTE_ENTRY) { + // Load `global-not-found` when global-not-found is enabled. + // Prefer to load it when both `global-not-found` and root `not-found` present. + if (isGlobalNotFoundEnabled) { + const globalNotFoundPath = await (0, _findpagefile.findPageFile)(appDir, 'global-not-found', extensions, true); + if (globalNotFoundPath) { + return { + filename: (0, _path.join)(appDir, globalNotFoundPath), + bundlePath: `app${_constants.UNDERSCORE_NOT_FOUND_ROUTE_ENTRY}`, + page: _constants.UNDERSCORE_NOT_FOUND_ROUTE_ENTRY + }; + } + } else { + // Then if global-not-found.js doesn't exist then load not-found.js + const notFoundPath = await (0, _findpagefile.findPageFile)(appDir, 'not-found', extensions, true); + if (notFoundPath) { + return { + filename: (0, _path.join)(appDir, notFoundPath), + bundlePath: `app${_constants.UNDERSCORE_NOT_FOUND_ROUTE_ENTRY}`, + page: _constants.UNDERSCORE_NOT_FOUND_ROUTE_ENTRY + }; + } + } + // If they're not presented, then fallback to global-not-found + return { + filename: require.resolve('next/dist/client/components/builtin/global-not-found'), + bundlePath: `app${_constants.UNDERSCORE_NOT_FOUND_ROUTE_ENTRY}`, + page: _constants.UNDERSCORE_NOT_FOUND_ROUTE_ENTRY + }; + } + pagePath = await (0, _findpagefile.findPageFile)(appDir, normalizedPagePath, extensions, true); + if (pagePath) { + const pageUrl = (0, _ensureleadingslash.ensureLeadingSlash)((0, _removepagepathtail.removePagePathTail)((0, _normalizepathsep.normalizePathSep)(pagePath), { + keepIndex: true, + extensions + })); + return { + filename: (0, _path.join)(appDir, pagePath), + bundlePath: _path.posix.join('app', pageUrl), + page: _path.posix.normalize(pageUrl) + }; + } + } + if (!pagePath && pagesDir) { + pagePath = await (0, _findpagefile.findPageFile)(pagesDir, normalizedPagePath, extensions, false); + } + if (pagePath !== null && pagesDir) { + const pageUrl = (0, _ensureleadingslash.ensureLeadingSlash)((0, _removepagepathtail.removePagePathTail)((0, _normalizepathsep.normalizePathSep)(pagePath), { + extensions + })); + return { + filename: (0, _path.join)(pagesDir, pagePath), + bundlePath: _path.posix.join('pages', (0, _normalizepagepath.normalizePagePath)(pageUrl)), + page: _path.posix.normalize(pageUrl) + }; + } + if (page === '/_error') { + return { + filename: require.resolve('next/dist/pages/_error'), + bundlePath: page, + page: (0, _normalizepathsep.normalizePathSep)(page) + }; + } else { + throw new _utils1.PageNotFoundError(normalizedPagePath); + } +} +function onDemandEntryHandler({ hotReloader, maxInactiveAge, multiCompiler, nextConfig, pagesBufferLength, pagesDir, rootDir, appDir }) { + const hasAppDir = !!appDir; + let curInvalidator = getInvalidator(multiCompiler.outputPath); + const curEntries = getEntries(multiCompiler.outputPath); + if (!curInvalidator) { + curInvalidator = new Invalidator(multiCompiler); + invalidators.set(multiCompiler.outputPath, curInvalidator); + } + // Deferred entries state management + const deferredEntriesConfig = nextConfig.experimental.deferredEntries; + const hasDeferredEntriesConfig = deferredEntriesConfig && deferredEntriesConfig.length > 0; + let onBeforeDeferredEntriesCalled = false; + let onBeforeDeferredEntriesPromise = null; + // Function to wait for all non-deferred entries to be built + async function waitForNonDeferredEntries() { + return new Promise((resolve)=>{ + const checkEntries = ()=>{ + // Check if there are any non-deferred entries that are still building or added + const hasNonDeferredEntriesBuilding = Object.entries(curEntries).some(([, entry])=>{ + const entryData = entry; + if (entryData.type !== 0) return false; + const isDeferred = (0, _entries.isDeferredEntry)(entryData.absolutePagePath.replace(appDir || '', '').replace(pagesDir || '', '').replace(rootDir, ''), deferredEntriesConfig); + return !isDeferred && (entryData.status === ADDED || entryData.status === BUILDING); + }); + if (!hasNonDeferredEntriesBuilding) { + resolve(); + } else { + // Check again after a short delay + setTimeout(checkEntries, 100); + } + }; + checkEntries(); + }); + } + // Function to handle deferred entry processing + async function processDeferredEntry() { + if (!hasDeferredEntriesConfig) return; + // Wait for all non-deferred entries to be built + await waitForNonDeferredEntries(); + // Call the onBeforeDeferredEntries callback once + if (!onBeforeDeferredEntriesCalled) { + onBeforeDeferredEntriesCalled = true; + if (nextConfig.experimental.onBeforeDeferredEntries) { + debug('calling onBeforeDeferredEntries callback'); + if (!onBeforeDeferredEntriesPromise) { + onBeforeDeferredEntriesPromise = nextConfig.experimental.onBeforeDeferredEntries(); + } + await onBeforeDeferredEntriesPromise; + debug('onBeforeDeferredEntries callback completed'); + } + } else if (onBeforeDeferredEntriesPromise) { + // Wait for any in-progress callback + await onBeforeDeferredEntriesPromise; + } + } + const startBuilding = (compilation)=>{ + const compilationName = compilation.name; + curInvalidator.startBuilding(compilationName); + // Reset deferred entries state for this compilation cycle + // This ensures onBeforeDeferredEntries will be called again during HMR + onBeforeDeferredEntriesCalled = false; + onBeforeDeferredEntriesPromise = null; + }; + for (const compiler of multiCompiler.compilers){ + compiler.hooks.make.tap('NextJsOnDemandEntries', startBuilding); + } + function getPagePathsFromEntrypoints(type, entrypoints) { + const pagePaths = []; + for (const entrypoint of entrypoints.values()){ + const page = (0, _getroutefromentrypoint.default)(entrypoint.name, hasAppDir); + if (page) { + var _entrypoint_name; + const pageBundleType = ((_entrypoint_name = entrypoint.name) == null ? void 0 : _entrypoint_name.startsWith('app/')) ? _pagetypes.PAGE_TYPES.APP : _pagetypes.PAGE_TYPES.PAGES; + pagePaths.push(getEntryKey(type, pageBundleType, page)); + } else if ((0, _utils.isMiddlewareFilename)(entrypoint.name) || (0, _utils.isInstrumentationHookFilename)(entrypoint.name)) { + pagePaths.push(getEntryKey(type, _pagetypes.PAGE_TYPES.ROOT, `/${entrypoint.name}`)); + } + } + return pagePaths; + } + for (const compiler of multiCompiler.compilers){ + compiler.hooks.done.tap('NextJsOnDemandEntries', ()=>{ + var _getInvalidator; + return (_getInvalidator = getInvalidator(compiler.outputPath)) == null ? void 0 : _getInvalidator.doneBuilding([ + compiler.name + ]); + }); + } + multiCompiler.hooks.done.tap('NextJsOnDemandEntries', (multiStats)=>{ + var _getInvalidator; + const [clientStats, serverStats, edgeServerStats] = multiStats.stats; + const entryNames = [ + ...getPagePathsFromEntrypoints(_constants.COMPILER_NAMES.client, clientStats.compilation.entrypoints), + ...getPagePathsFromEntrypoints(_constants.COMPILER_NAMES.server, serverStats.compilation.entrypoints), + ...edgeServerStats ? getPagePathsFromEntrypoints(_constants.COMPILER_NAMES.edgeServer, edgeServerStats.compilation.entrypoints) : [] + ]; + for (const name of entryNames){ + const entry = curEntries[name]; + if (!entry) { + continue; + } + if (entry.status !== BUILDING) { + continue; + } + entry.status = BUILT; + doneCallbacks.emit(name); + } + (_getInvalidator = getInvalidator(multiCompiler.outputPath)) == null ? void 0 : _getInvalidator.doneBuilding([ + ...COMPILER_KEYS + ]); + // Call onBeforeDeferredEntries after compilation completes during HMR + // This ensures the callback is invoked even when non-deferred entries change + if (hasDeferredEntriesConfig && !onBeforeDeferredEntriesCalled) { + onBeforeDeferredEntriesCalled = true; + if (nextConfig.experimental.onBeforeDeferredEntries) { + debug('calling onBeforeDeferredEntries callback after HMR'); + onBeforeDeferredEntriesPromise = nextConfig.experimental.onBeforeDeferredEntries(); + } + } + }); + const pingIntervalTime = Math.max(1000, Math.min(5000, maxInactiveAge)); + setInterval(function() { + disposeInactiveEntries(curEntries, maxInactiveAge); + }, pingIntervalTime + 1000).unref(); + function handleAppDirPing(tree) { + const pages = getEntrypointsFromTree(tree, true); + for (const page of pages){ + for (const compilerType of [ + _constants.COMPILER_NAMES.client, + _constants.COMPILER_NAMES.server, + _constants.COMPILER_NAMES.edgeServer + ]){ + const entryKey = getEntryKey(compilerType, _pagetypes.PAGE_TYPES.APP, `/${page}`); + const entryInfo = curEntries[entryKey]; + // If there's no entry, it may have been invalidated and needs to be re-built. + if (!entryInfo) { + continue; + } + // We don't need to maintain active state of anything other than BUILT entries + if (entryInfo.status !== BUILT) continue; + // If there's an entryInfo + if (!lastServerAccessPagesForAppDir.includes(entryKey)) { + lastServerAccessPagesForAppDir.unshift(entryKey); + // Maintain the buffer max length + // TODO: verify that the current pageKey is not at the end of the array as multiple entrypoints can exist + if (lastServerAccessPagesForAppDir.length > pagesBufferLength) { + lastServerAccessPagesForAppDir.pop(); + } + } + entryInfo.lastActiveTime = Date.now(); + entryInfo.dispose = false; + } + } + } + function handlePing(pg) { + const page = (0, _normalizepathsep.normalizePathSep)(pg); + for (const compilerType of [ + _constants.COMPILER_NAMES.client, + _constants.COMPILER_NAMES.server, + _constants.COMPILER_NAMES.edgeServer + ]){ + const entryKey = getEntryKey(compilerType, _pagetypes.PAGE_TYPES.PAGES, page); + const entryInfo = curEntries[entryKey]; + // If there's no entry, it may have been invalidated and needs to be re-built. + if (!entryInfo) { + // if (page !== lastEntry) client pings, but there's no entry for page + if (compilerType === _constants.COMPILER_NAMES.client) { + return; + } + continue; + } + // We don't need to maintain active state of anything other than BUILT entries + if (entryInfo.status !== BUILT) continue; + // If there's an entryInfo + if (!lastClientAccessPages.includes(entryKey)) { + lastClientAccessPages.unshift(entryKey); + // Maintain the buffer max length + if (lastClientAccessPages.length > pagesBufferLength) { + lastClientAccessPages.pop(); + } + } + entryInfo.lastActiveTime = Date.now(); + entryInfo.dispose = false; + } + return; + } + async function ensurePageImpl({ page, appPaths, definition, isApp, url }) { + const stalledTime = 60; + const stalledEnsureTimeout = setTimeout(()=>{ + debug(`Ensuring ${page} has taken longer than ${stalledTime}s, if this continues to stall this may be a bug`); + }, stalledTime * 1000); + try { + let route; + if (definition) { + route = definition; + } else { + route = await findPagePathData(rootDir, page, nextConfig.pageExtensions, pagesDir, appDir, !!nextConfig.experimental.globalNotFound); + } + const isInsideAppDir = !!appDir && route.filename.startsWith(appDir); + // Check if this is a deferred entry and wait for non-deferred entries first + if (hasDeferredEntriesConfig) { + const isDeferred = (0, _entries.isDeferredEntry)(route.page, deferredEntriesConfig); + if (isDeferred) { + debug(`Page ${page} is a deferred entry, waiting for other entries`); + await processDeferredEntry(); + debug(`Deferred entry ${page} can now be processed`); + } + } + if (typeof isApp === 'boolean' && isApp !== isInsideAppDir) { + Error.stackTraceLimit = 15; + throw Object.defineProperty(new Error(`Ensure bailed, found path "${route.page}" does not match ensure type (${isApp ? 'app' : 'pages'})`), "__NEXT_ERROR_CODE", { + value: "E419", + enumerable: false, + configurable: true + }); + } + const pageBundleType = getPageBundleType(route.bundlePath); + const addEntry = (compilerType)=>{ + const entryKey = getEntryKey(compilerType, pageBundleType, route.page); + if (curEntries[entryKey] && // there can be an overlap in the entryKey for the instrumentation hook file and a page named the same + // this is a quick fix to support this scenario by overwriting the instrumentation hook entry, since we only use it one time + // any changes to the instrumentation hook file will require a restart of the dev server anyway + !(0, _utils.isInstrumentationHookFilename)(curEntries[entryKey].bundlePath)) { + curEntries[entryKey].dispose = false; + curEntries[entryKey].lastActiveTime = Date.now(); + if (curEntries[entryKey].status === BUILT) { + return { + entryKey, + newEntry: false, + shouldInvalidate: false + }; + } + return { + entryKey, + newEntry: false, + shouldInvalidate: true + }; + } + curEntries[entryKey] = { + type: 0, + appPaths, + absolutePagePath: route.filename, + request: route.filename, + bundlePath: route.bundlePath, + dispose: false, + lastActiveTime: Date.now(), + status: ADDED + }; + return { + entryKey: entryKey, + newEntry: true, + shouldInvalidate: true + }; + }; + const staticInfo = await (0, _getstaticinfoincludinglayouts.getStaticInfoIncludingLayouts)({ + page, + pageFilePath: route.filename, + isInsideAppDir, + pageExtensions: nextConfig.pageExtensions, + isDev: true, + config: nextConfig, + appDir + }); + const added = new Map(); + const isServerComponent = isInsideAppDir && staticInfo.rsc !== _constants.RSC_MODULE_TYPES.client; + let pageRuntime = staticInfo.runtime; + (0, _entries.runDependingOnPageType)({ + page: route.page, + pageRuntime, + pageType: pageBundleType, + onClient: ()=>{ + // Skip adding the client entry for app / Server Components. + if (isServerComponent || isInsideAppDir) { + return; + } + added.set(_constants.COMPILER_NAMES.client, addEntry(_constants.COMPILER_NAMES.client)); + }, + onServer: ()=>{ + added.set(_constants.COMPILER_NAMES.server, addEntry(_constants.COMPILER_NAMES.server)); + const edgeServerEntry = getEntryKey(_constants.COMPILER_NAMES.edgeServer, pageBundleType, route.page); + if (curEntries[edgeServerEntry] && !(0, _utils.isInstrumentationHookFile)(route.page)) { + // Runtime switched from edge to server + delete curEntries[edgeServerEntry]; + } + }, + onEdgeServer: ()=>{ + added.set(_constants.COMPILER_NAMES.edgeServer, addEntry(_constants.COMPILER_NAMES.edgeServer)); + const serverEntry = getEntryKey(_constants.COMPILER_NAMES.server, pageBundleType, route.page); + if (curEntries[serverEntry] && !(0, _utils.isInstrumentationHookFile)(route.page)) { + // Runtime switched from server to edge + delete curEntries[serverEntry]; + } + } + }); + const addedValues = [ + ...added.values() + ]; + const entriesThatShouldBeInvalidated = [ + ...added.entries() + ].filter(([, entry])=>entry.shouldInvalidate); + const hasNewEntry = addedValues.some((entry)=>entry.newEntry); + if (hasNewEntry) { + const routePage = isApp ? route.page : (0, _apppaths.normalizeAppPath)(route.page); + // If proxy file, remove the leading slash from "/proxy" to "proxy". + (0, _output.reportTrigger)((0, _utils.isMiddlewareFile)(routePage) ? routePage.slice(1) : routePage, url); + } + if (entriesThatShouldBeInvalidated.length > 0) { + const invalidatePromise = Promise.all(entriesThatShouldBeInvalidated.map(([compilerKey, { entryKey }])=>{ + return new Promise((resolve, reject)=>{ + doneCallbacks.once(entryKey, (err)=>{ + if (err) { + return reject(err); + } + // If the invalidation also triggers a rebuild, we need to + // wait for that additional build to prevent race conditions. + const needsRebuild = curInvalidator.willRebuild(compilerKey); + if (needsRebuild) { + doneCallbacks.once(entryKey, (rebuildErr)=>{ + if (rebuildErr) { + return reject(rebuildErr); + } + resolve(); + }); + } else { + resolve(); + } + }); + }); + })); + curInvalidator.invalidate([ + ...added.keys() + ]); + await invalidatePromise; + } + } finally{ + clearTimeout(stalledEnsureTimeout); + } + } + // Make sure that we won't have multiple invalidations ongoing concurrently. + const batcher = _batcher.Batcher.create({ + // The cache key here is composed of the elements that affect the + // compilation, namely, the page, whether it's client only, and whether + // it's an app page. This ensures that we don't have multiple compilations + // for the same page happening concurrently. + // + // We don't include the whole match because it contains match specific + // parameters (like route params) that would just bust this cache. Any + // details that would possibly bust the cache should be listed here. + cacheKeyFn: (options)=>JSON.stringify(options), + // Schedule the invocation of the ensurePageImpl function on the next tick. + schedulerFn: _scheduler.scheduleOnNextTick + }); + return { + async ensurePage ({ page, appPaths = null, definition, isApp, url }) { + // If the route is actually an app page route, then we should have access + // to the app route definition, and therefore, the appPaths from it. + if (!appPaths && definition && (0, _apppageroutedefinition.isAppPageRouteDefinition)(definition)) { + appPaths = definition.appPaths; + } + // Wrap the invocation of the ensurePageImpl function in the pending + // wrapper, which will ensure that we don't have multiple compilations + // for the same page happening concurrently. + return batcher.batch({ + page, + appPaths, + definition, + isApp + }, async ()=>{ + await ensurePageImpl({ + page, + appPaths, + definition, + isApp, + url + }); + }); + }, + onHMR (client, getHmrServerError) { + let bufferedHmrServerError = null; + client.addEventListener('close', ()=>{ + bufferedHmrServerError = null; + }); + client.addEventListener('message', ({ data })=>{ + try { + const error = getHmrServerError(); + // New error occurred: buffered error is flushed and new error occurred + if (!bufferedHmrServerError && error) { + hotReloader.send({ + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.SERVER_ERROR, + errorJSON: (0, _utils1.stringifyError)(error) + }); + bufferedHmrServerError = null; + } + const parsedData = JSON.parse(typeof data !== 'string' ? data.toString() : data); + if (parsedData.event === _hotreloadertypes.HMR_MESSAGE_SENT_TO_SERVER.PING) { + if (parsedData.appDirRoute) { + handleAppDirPing(parsedData.tree); + } else { + handlePing(parsedData.page); + } + } else if (parsedData.event === _hotreloadertypes.HMR_MESSAGE_SENT_TO_SERVER.MCP_ERROR_STATE_RESPONSE) { + (0, _geterrors.handleErrorStateResponse)(parsedData.requestId, parsedData.errorState, parsedData.url); + } else if (parsedData.event === _hotreloadertypes.HMR_MESSAGE_SENT_TO_SERVER.MCP_PAGE_METADATA_RESPONSE) { + (0, _getpagemetadata.handlePageMetadataResponse)(parsedData.requestId, parsedData.segmentTrieData, parsedData.url); + } + } catch {} + }); + } + }; +} + +//# sourceMappingURL=on-demand-entry-handler.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/dev/parse-version-info.js b/build/node_modules/next/dist/server/dev/parse-version-info.js new file mode 100644 index 0000000..93029f8 --- /dev/null +++ b/build/node_modules/next/dist/server/dev/parse-version-info.js @@ -0,0 +1,108 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "parseVersionInfo", { + enumerable: true, + get: function() { + return parseVersionInfo; + } +}); +const _semver = /*#__PURE__*/ _interop_require_wildcard(require("next/dist/compiled/semver")); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +function parseVersionInfo(o) { + const latest = _semver.parse(o.latest); + const canary = _semver.parse(o.canary); + const installedParsed = _semver.parse(o.installed); + const installed = o.installed; + if (installedParsed && latest && canary) { + if (installedParsed.major < latest.major) { + // Old major version + return { + staleness: 'stale-major', + expected: latest.raw, + installed + }; + } else if (installedParsed.prerelease[0] === 'canary' && _semver.lt(installedParsed, canary)) { + // Matching major, but old canary + return { + staleness: 'stale-prerelease', + expected: canary.raw, + installed + }; + } else if (!installedParsed.prerelease.length && _semver.lt(installedParsed, latest)) { + // Stable, but not the latest + if (installedParsed.minor === latest.minor) { + // Same major and minor, but not the latest patch + return { + staleness: 'stale-patch', + expected: latest.raw, + installed + }; + } + return { + staleness: 'stale-minor', + expected: latest.raw, + installed + }; + } else if (_semver.gt(installedParsed, latest) && installedParsed.version !== canary.version) { + // Newer major version + return { + staleness: 'newer-than-npm', + installed + }; + } else { + // Latest and greatest + return { + staleness: 'fresh', + installed + }; + } + } + return { + installed: (installedParsed == null ? void 0 : installedParsed.raw) ?? '0.0.0', + staleness: 'unknown' + }; +} + +//# sourceMappingURL=parse-version-info.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/dev/require-cache.js b/build/node_modules/next/dist/server/dev/require-cache.js new file mode 100644 index 0000000..7c66b0c --- /dev/null +++ b/build/node_modules/next/dist/server/dev/require-cache.js @@ -0,0 +1,79 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "deleteCache", { + enumerable: true, + get: function() { + return deleteCache; + } +}); +const _iserror = /*#__PURE__*/ _interop_require_default(require("../../lib/is-error")); +const _realpath = require("../../lib/realpath"); +const _loadmanifestexternal = require("../load-manifest.external"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +/** + * Batch delete modules from require.cache with a single scan. + * + * When deleting N modules, this performs ONE scan of require.cache + * instead of N scans, reducing complexity from O(N * C) to O(C + N) + * where C = size of require.cache. + */ function deleteFromRequireCache(filePaths) { + // Phase 1: Resolve all paths and collect modules to delete + const resolvedPaths = []; + const modsToDelete = new Set(); + for (let filePath of filePaths){ + try { + filePath = (0, _realpath.realpathSync)(filePath); + } catch (e) { + if ((0, _iserror.default)(e) && e.code !== 'ENOENT') throw e; + } + const mod = require.cache[filePath]; + if (mod) { + resolvedPaths.push(filePath); + modsToDelete.add(mod); + } + } + if (modsToDelete.size === 0) return; + // Phase 2: Single scan of require.cache to remove child references + const modules = Object.values(require.cache); + for(let m = 0; m < modules.length; m++){ + var _modules_m; + const children = (_modules_m = modules[m]) == null ? void 0 : _modules_m.children; + if (children && children.length) { + let len = children.length; + for(let i = 0; i < len; i++){ + if (modsToDelete.has(children[i])) { + children[i] = children[--len]; + i-- // re-check swapped element + ; + } + } + children.length = len; + } + } + // Phase 3: Clear parent references from children and delete cache entries + for (const mod of modsToDelete){ + const children = mod.children; + for(let i = 0; i < children.length; i++){ + if (children[i].parent === mod) { + children[i].parent = null; + } + } + } + for (const filePath of resolvedPaths){ + delete require.cache[filePath]; + } +} +function deleteCache(filePaths) { + for (const filePath of filePaths){ + (0, _loadmanifestexternal.clearManifestCache)(filePath); + } + deleteFromRequireCache(filePaths); +} + +//# sourceMappingURL=require-cache.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/dev/serialized-errors.js b/build/node_modules/next/dist/server/dev/serialized-errors.js new file mode 100644 index 0000000..d0aaf60 --- /dev/null +++ b/build/node_modules/next/dist/server/dev/serialized-errors.js @@ -0,0 +1,67 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + deleteErrorsRscStreamForHtmlRequest: null, + sendSerializedErrorsToClient: null, + sendSerializedErrorsToClientForHtmlRequest: null, + setErrorsRscStreamForHtmlRequest: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + deleteErrorsRscStreamForHtmlRequest: function() { + return deleteErrorsRscStreamForHtmlRequest; + }, + sendSerializedErrorsToClient: function() { + return sendSerializedErrorsToClient; + }, + sendSerializedErrorsToClientForHtmlRequest: function() { + return sendSerializedErrorsToClientForHtmlRequest; + }, + setErrorsRscStreamForHtmlRequest: function() { + return setErrorsRscStreamForHtmlRequest; + } +}); +const _nodewebstreamshelper = require("../stream-utils/node-web-streams-helper"); +const _hotreloadertypes = require("./hot-reloader-types"); +const errorsRscStreamsByHtmlRequestId = new Map(); +function sendSerializedErrorsToClient(errorsRscStream, sendToClient) { + (0, _nodewebstreamshelper.streamToUint8Array)(errorsRscStream).then((serializedErrors)=>{ + sendToClient({ + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.ERRORS_TO_SHOW_IN_BROWSER, + serializedErrors + }); + }, (err)=>{ + console.error(Object.defineProperty(new Error('Failed to serialize errors.', { + cause: err + }), "__NEXT_ERROR_CODE", { + value: "E948", + enumerable: false, + configurable: true + })); + }); +} +function sendSerializedErrorsToClientForHtmlRequest(htmlRequestId, sendToClient) { + const errorsRscStream = errorsRscStreamsByHtmlRequestId.get(htmlRequestId); + if (!errorsRscStream) { + return; + } + errorsRscStreamsByHtmlRequestId.delete(htmlRequestId); + sendSerializedErrorsToClient(errorsRscStream, sendToClient); +} +function setErrorsRscStreamForHtmlRequest(htmlRequestId, errorsRscStream) { + // TODO: Clean up after a timeout, in case the client never connects, e.g. + // when CURL'ing the page, or loading the page with JavaScript disabled etc. + errorsRscStreamsByHtmlRequestId.set(htmlRequestId, errorsRscStream); +} +function deleteErrorsRscStreamForHtmlRequest(htmlRequestId) { + errorsRscStreamsByHtmlRequestId.delete(htmlRequestId); +} + +//# sourceMappingURL=serialized-errors.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/dev/server-action-logger.js b/build/node_modules/next/dist/server/dev/server-action-logger.js new file mode 100644 index 0000000..2ffdcdc --- /dev/null +++ b/build/node_modules/next/dist/server/dev/server-action-logger.js @@ -0,0 +1,37 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "formatArgs", { + enumerable: true, + get: function() { + return formatArgs; + } +}); +const _safestablestringify = require("next/dist/compiled/safe-stable-stringify"); +// Configure stringify with reasonable limits for action logging +const stringify = (0, _safestablestringify.configure)({ + maximumDepth: 2, + maximumBreadth: 3 +}); +/** + * Format a single argument for display in server action logs. + */ function formatArg(arg) { + try { + return stringify(arg) ?? String(arg); + } catch { + // String(arg) can throw for temporary client references (e.g., class instances + // passed from client to server) because accessing .toString() on them throws + // "Cannot access toString on the server" + try { + return String(arg); + } catch { + return '[unserializable]'; + } + } +} +function formatArgs(args) { + return args.map((a)=>formatArg(a)).join(', '); +} + +//# sourceMappingURL=server-action-logger.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/dev/static-paths-worker.js b/build/node_modules/next/dist/server/dev/static-paths-worker.js new file mode 100644 index 0000000..55bbf6a --- /dev/null +++ b/build/node_modules/next/dist/server/dev/static-paths-worker.js @@ -0,0 +1,105 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "loadStaticPaths", { + enumerable: true, + get: function() { + return loadStaticPaths; + } +}); +require("../require-hook"); +require("../node-environment"); +const _appsegments = require("../../build/segment-config/app/app-segments"); +const _loadcomponents = require("../load-components"); +const _setuphttpagentenv = require("../setup-http-agent-env"); +const _checks = require("../route-modules/checks"); +const _ppr = require("../lib/experimental/ppr"); +const _invarianterror = require("../../shared/lib/invariant-error"); +const _collectrootparamkeys = require("../../build/segment-config/app/collect-root-param-keys"); +const _app = require("../../build/static-paths/app"); +const _pages = require("../../build/static-paths/pages"); +const _createincrementalcache = require("../../export/helpers/create-incremental-cache"); +const _app1 = require("../../shared/lib/router/routes/app"); +async function loadStaticPaths({ dir, distDir, pathname, config, httpAgentOptions, locales, defaultLocale, isAppPath, page, isrFlushToDisk, fetchCacheKeyPrefix, cacheMaxMemorySize, requestHeaders, cacheHandler, cacheHandlers, cacheLifeProfiles, nextConfigOutput, buildId, deploymentId, authInterrupts, sriEnabled }) { + // this needs to be initialized before loadComponents otherwise + // "use cache" could be missing it's cache handlers + await (0, _createincrementalcache.createIncrementalCache)({ + dir, + distDir, + cacheHandler, + cacheHandlers, + requestHeaders, + fetchCacheKeyPrefix, + flushToDisk: isrFlushToDisk, + cacheMaxMemorySize + }); + // update work memory runtime-config + (0, _setuphttpagentenv.setHttpClientAndAgentOptions)({ + httpAgentOptions + }); + const components = await (0, _loadcomponents.loadComponents)({ + distDir, + // In `pages/`, the page is the same as the pathname. + page: page || pathname, + isAppPath, + isDev: true, + sriEnabled, + needsManifestsForLegacyReasons: true + }); + if (isAppPath) { + const routeModule = components.routeModule; + const segments = await (0, _appsegments.collectSegments)(// We know this is an app page or app route module because we checked + // above that the page type is 'app'. + routeModule); + const route = (0, _app1.parseAppRoute)(pathname, true); + if (route.dynamicSegments.length === 0) { + throw Object.defineProperty(new _invarianterror.InvariantError(`Expected a dynamic route, but got a static route: ${pathname}`), "__NEXT_ERROR_CODE", { + value: "E930", + enumerable: false, + configurable: true + }); + } + const isRoutePPREnabled = (0, _checks.isAppPageRouteModule)(routeModule) && (0, _ppr.checkIsRoutePPREnabled)(config.pprConfig); + const rootParamKeys = (0, _collectrootparamkeys.collectRootParamKeys)(routeModule); + return (0, _app.buildAppStaticPaths)({ + dir, + page: pathname, + route, + cacheComponents: config.cacheComponents, + segments, + distDir, + requestHeaders, + cacheHandler, + cacheLifeProfiles, + isrFlushToDisk, + fetchCacheKeyPrefix, + cacheMaxMemorySize, + ComponentMod: components.ComponentMod, + nextConfigOutput, + isRoutePPREnabled, + partialFallbacksEnabled: config.partialFallbacks, + buildId, + deploymentId, + authInterrupts, + rootParamKeys + }); + } else if (!components.getStaticPaths) { + // We shouldn't get to this point since the worker should only be called for + // SSG pages with getStaticPaths. + throw Object.defineProperty(new _invarianterror.InvariantError(`Failed to load page with getStaticPaths for ${pathname}`), "__NEXT_ERROR_CODE", { + value: "E605", + enumerable: false, + configurable: true + }); + } + return (0, _pages.buildPagesStaticPaths)({ + page: pathname, + getStaticPaths: components.getStaticPaths, + configFileName: config.configFileName, + locales, + defaultLocale + }); +} + +//# sourceMappingURL=static-paths-worker.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/dev/turbopack-utils.js b/build/node_modules/next/dist/server/dev/turbopack-utils.js new file mode 100644 index 0000000..b8d2370 --- /dev/null +++ b/build/node_modules/next/dist/server/dev/turbopack-utils.js @@ -0,0 +1,687 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + AssetMapper: null, + addMetadataIdToRoute: null, + addRouteSuffix: null, + handleEntrypoints: null, + handlePagesErrorRoute: null, + handleRouteType: null, + hasEntrypointForKey: null, + msToNs: null, + normalizedPageToTurbopackStructureRoute: null, + printNonFatalIssue: null, + processTopLevelIssues: null, + removeRouteSuffix: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + AssetMapper: function() { + return AssetMapper; + }, + addMetadataIdToRoute: function() { + return addMetadataIdToRoute; + }, + addRouteSuffix: function() { + return addRouteSuffix; + }, + handleEntrypoints: function() { + return handleEntrypoints; + }, + handlePagesErrorRoute: function() { + return handlePagesErrorRoute; + }, + handleRouteType: function() { + return handleRouteType; + }, + hasEntrypointForKey: function() { + return hasEntrypointForKey; + }, + msToNs: function() { + return _compilationevents.msToNs; + }, + normalizedPageToTurbopackStructureRoute: function() { + return normalizedPageToTurbopackStructureRoute; + }, + printNonFatalIssue: function() { + return printNonFatalIssue; + }, + processTopLevelIssues: function() { + return processTopLevelIssues; + }, + removeRouteSuffix: function() { + return removeRouteSuffix; + } +}); +const _hotreloadertypes = require("./hot-reloader-types"); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("../../build/output/log")); +const _entrykey = require("../../shared/lib/turbopack/entry-key"); +const _ismetadataroute = require("../../lib/metadata/is-metadata-route"); +const _utils = require("../../shared/lib/turbopack/utils"); +const _constants = require("../../lib/constants"); +const _compilationevents = require("../../shared/lib/turbopack/compilation-events"); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +const onceErrorSet = new Set(); +/** + * Check if given issue is a warning to be display only once. + * This mimics behavior of get-page-static-info's warnOnce. + * @param issue + * @returns + */ function shouldEmitOnceWarning(issue) { + const { severity, title, stage } = issue; + if (severity === 'warning' && title.value === 'Invalid page configuration') { + if (onceErrorSet.has(issue)) { + return false; + } + onceErrorSet.add(issue); + } + if (severity === 'warning' && stage === 'config' && (0, _utils.renderStyledStringToErrorAnsi)(issue.title).includes("can't be external")) { + if (onceErrorSet.has(issue)) { + return false; + } + onceErrorSet.add(issue); + } + return true; +} +function printNonFatalIssue(issue) { + if ((0, _utils.isRelevantWarning)(issue) && shouldEmitOnceWarning(issue)) { + _log.warn((0, _utils.formatIssue)(issue)); + } +} +function processTopLevelIssues(currentTopLevelIssues, result) { + currentTopLevelIssues.clear(); + for (const issue of result.issues){ + const issueKey = (0, _utils.getIssueKey)(issue); + currentTopLevelIssues.set(issueKey, issue); + } +} +async function handleRouteType({ dev, page, pathname, route, currentEntryIssues, entrypoints, manifestLoader, readyIds, devRewrites, productionRewrites, hooks, logErrors }) { + switch(route.type){ + case 'page': + { + const clientKey = (0, _entrykey.getEntryKey)('pages', 'client', page); + const serverKey = (0, _entrykey.getEntryKey)('pages', 'server', page); + try { + // In the best case scenario, Turbopack chunks document, app, page separately in that order, + // so it can happen that the chunks of document change, but the chunks of app and page + // don't. We still need to reload the page chunks in that case though, otherwise the version + // of the document or app component export from the pages template is stale. + let documentOrAppChanged = false; + if (entrypoints.global.app) { + const key = (0, _entrykey.getEntryKey)('pages', 'server', '_app'); + const writtenEndpoint = await entrypoints.global.app.writeToDisk(); + documentOrAppChanged ||= (hooks == null ? void 0 : hooks.handleWrittenEndpoint(key, writtenEndpoint, false)) ?? false; + (0, _utils.processIssues)(currentEntryIssues, key, writtenEndpoint, false, logErrors); + } + await manifestLoader.loadBuildManifest('_app'); + await manifestLoader.loadPagesManifest('_app'); + if (entrypoints.global.document) { + const key = (0, _entrykey.getEntryKey)('pages', 'server', '_document'); + const writtenEndpoint = await entrypoints.global.document.writeToDisk(); + documentOrAppChanged ||= (hooks == null ? void 0 : hooks.handleWrittenEndpoint(key, writtenEndpoint, false)) ?? false; + (0, _utils.processIssues)(currentEntryIssues, key, writtenEndpoint, false, logErrors); + } + await manifestLoader.loadPagesManifest('_document'); + const writtenEndpoint = await route.htmlEndpoint.writeToDisk(); + hooks == null ? void 0 : hooks.handleWrittenEndpoint(serverKey, writtenEndpoint, documentOrAppChanged); + const type = writtenEndpoint == null ? void 0 : writtenEndpoint.type; + await manifestLoader.loadClientBuildManifest(page); + await manifestLoader.loadBuildManifest(page); + await manifestLoader.loadPagesManifest(page); + if (type === 'edge') { + await manifestLoader.loadMiddlewareManifest(page, 'pages'); + } else { + manifestLoader.deleteMiddlewareManifest(serverKey); + } + await manifestLoader.loadFontManifest('/_app', 'pages'); + await manifestLoader.loadFontManifest(page, 'pages'); + manifestLoader.writeManifests({ + devRewrites, + productionRewrites, + entrypoints + }); + (0, _utils.processIssues)(currentEntryIssues, serverKey, writtenEndpoint, false, logErrors); + } finally{ + if (dev) { + // TODO subscriptions should only be caused by the WebSocket connections + // otherwise we don't known when to unsubscribe and this leaking + hooks == null ? void 0 : hooks.subscribeToChanges(serverKey, false, route.dataEndpoint, ()=>{ + // Report the next compilation again + readyIds == null ? void 0 : readyIds.delete(pathname); + return { + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.SERVER_ONLY_CHANGES, + pages: [ + page + ] + }; + }, (e)=>{ + return { + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.RELOAD_PAGE, + data: `error in ${page} data subscription: ${e}` + }; + }); + hooks == null ? void 0 : hooks.subscribeToChanges(clientKey, false, route.htmlEndpoint, ()=>{ + return { + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.CLIENT_CHANGES + }; + }, (e)=>{ + return { + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.RELOAD_PAGE, + data: `error in ${page} html subscription: ${e}` + }; + }); + if (entrypoints.global.document) { + hooks == null ? void 0 : hooks.subscribeToChanges((0, _entrykey.getEntryKey)('pages', 'server', '_document'), false, entrypoints.global.document, ()=>{ + return { + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.RELOAD_PAGE, + data: '_document has changed (page route)' + }; + }, (e)=>{ + return { + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.RELOAD_PAGE, + data: `error in _document subscription (page route): ${e}` + }; + }); + } + } + } + break; + } + case 'page-api': + { + const key = (0, _entrykey.getEntryKey)('pages', 'server', page); + const writtenEndpoint = await route.endpoint.writeToDisk(); + hooks == null ? void 0 : hooks.handleWrittenEndpoint(key, writtenEndpoint, false); + const type = writtenEndpoint.type; + await manifestLoader.loadPagesManifest(page); + if (type === 'edge') { + await manifestLoader.loadMiddlewareManifest(page, 'pages'); + } else { + manifestLoader.deleteMiddlewareManifest(key); + } + manifestLoader.writeManifests({ + devRewrites, + productionRewrites, + entrypoints + }); + (0, _utils.processIssues)(currentEntryIssues, key, writtenEndpoint, true, logErrors); + break; + } + case 'app-page': + { + const key = (0, _entrykey.getEntryKey)('app', 'server', page); + const writtenEndpoint = await route.htmlEndpoint.writeToDisk(); + hooks == null ? void 0 : hooks.handleWrittenEndpoint(key, writtenEndpoint, false); + if (dev) { + // TODO subscriptions should only be caused by the WebSocket connections + // otherwise we don't known when to unsubscribe and this leaking + hooks == null ? void 0 : hooks.subscribeToChanges(key, true, route.rscEndpoint, (change, hash)=>{ + if (change.issues.some((issue)=>issue.severity === 'error')) { + // Ignore any updates that has errors + // There will be another update without errors eventually + return; + } + // Report the next compilation again + readyIds == null ? void 0 : readyIds.delete(pathname); + return { + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.SERVER_COMPONENT_CHANGES, + hash + }; + }, (e)=>{ + return { + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.RELOAD_PAGE, + data: `error in ${page} app-page subscription: ${e}` + }; + }); + } + const type = writtenEndpoint.type; + if (type === 'edge') { + manifestLoader.loadMiddlewareManifest(page, 'app'); + } else { + manifestLoader.deleteMiddlewareManifest(key); + } + manifestLoader.loadBuildManifest(page, 'app'); + manifestLoader.loadAppPathsManifest(page); + manifestLoader.loadActionManifest(page); + manifestLoader.loadFontManifest(page, 'app'); + manifestLoader.writeManifests({ + devRewrites, + productionRewrites, + entrypoints + }); + (0, _utils.processIssues)(currentEntryIssues, key, writtenEndpoint, dev, logErrors); + break; + } + case 'app-route': + { + const key = (0, _entrykey.getEntryKey)('app', 'server', page); + const writtenEndpoint = await route.endpoint.writeToDisk(); + hooks == null ? void 0 : hooks.handleWrittenEndpoint(key, writtenEndpoint, false); + const type = writtenEndpoint.type; + manifestLoader.loadAppPathsManifest(page); + if (type === 'edge') { + manifestLoader.loadMiddlewareManifest(page, 'app'); + } else { + manifestLoader.deleteMiddlewareManifest(key); + } + manifestLoader.writeManifests({ + devRewrites, + productionRewrites, + entrypoints + }); + (0, _utils.processIssues)(currentEntryIssues, key, writtenEndpoint, true, logErrors); + break; + } + default: + { + throw Object.defineProperty(new Error(`unknown route type ${route.type} for ${page}`), "__NEXT_ERROR_CODE", { + value: "E316", + enumerable: false, + configurable: true + }); + } + } +} +class AssetMapper { + /** + * Overrides asset paths for a key and updates the mapping from path to key. + * + * @param key + * @param assetPaths asset paths relative to the .next directory + */ setPathsForKey(key, assetPaths) { + this.delete(key); + const newAssetPaths = new Set(assetPaths); + this.entryMap.set(key, newAssetPaths); + for (const assetPath of newAssetPaths){ + let assetPathKeys = this.assetMap.get(assetPath); + if (!assetPathKeys) { + assetPathKeys = new Set(); + this.assetMap.set(assetPath, assetPathKeys); + } + assetPathKeys.add(key); + } + } + /** + * Deletes the key and any asset only referenced by this key. + * + * @param key + */ delete(key) { + for (const assetPath of this.getAssetPathsByKey(key)){ + const assetPathKeys = this.assetMap.get(assetPath); + assetPathKeys == null ? void 0 : assetPathKeys.delete(key); + if (!(assetPathKeys == null ? void 0 : assetPathKeys.size)) { + this.assetMap.delete(assetPath); + } + } + this.entryMap.delete(key); + } + getAssetPathsByKey(key) { + return Array.from(this.entryMap.get(key) ?? []); + } + getKeysByAsset(path) { + return Array.from(this.assetMap.get(path) ?? []); + } + keys() { + return this.entryMap.keys(); + } + constructor(){ + this.entryMap = new Map(); + this.assetMap = new Map(); + } +} +function hasEntrypointForKey(entrypoints, key, assetMapper) { + const { type, page } = (0, _entrykey.splitEntryKey)(key); + switch(type){ + case 'app': + return entrypoints.app.has(page); + case 'pages': + switch(page){ + case '_app': + return entrypoints.global.app != null; + case '_document': + return entrypoints.global.document != null; + case '_error': + return entrypoints.global.error != null; + default: + return entrypoints.page.has(page); + } + case 'root': + switch(page){ + case 'middleware': + return entrypoints.global.middleware != null; + case 'instrumentation': + return entrypoints.global.instrumentation != null; + default: + return false; + } + case 'assets': + if (!assetMapper) { + return false; + } + return assetMapper.getKeysByAsset(page).some((pageKey)=>hasEntrypointForKey(entrypoints, pageKey, assetMapper)); + default: + { + // validation that we covered all cases, this should never run. + const _ = type; + return false; + } + } +} +async function handleEntrypoints({ entrypoints, currentEntrypoints, currentEntryIssues, manifestLoader, devRewrites, logErrors, dev }) { + currentEntrypoints.global.app = entrypoints.pagesAppEndpoint; + currentEntrypoints.global.document = entrypoints.pagesDocumentEndpoint; + currentEntrypoints.global.error = entrypoints.pagesErrorEndpoint; + currentEntrypoints.global.instrumentation = entrypoints.instrumentation; + currentEntrypoints.page.clear(); + currentEntrypoints.app.clear(); + for (const [pathname, route] of entrypoints.routes){ + switch(route.type){ + case 'page': + case 'page-api': + currentEntrypoints.page.set(pathname, route); + break; + case 'app-page': + { + route.pages.forEach((page)=>{ + currentEntrypoints.app.set(page.originalName, { + type: 'app-page', + ...page + }); + }); + break; + } + case 'app-route': + { + currentEntrypoints.app.set(route.originalName, route); + break; + } + case 'conflict': + _log.info(`skipping ${pathname} (${route.type})`); + break; + default: + route; + } + } + if (dev) { + await handleEntrypointsDevCleanup({ + currentEntryIssues, + currentEntrypoints, + ...dev + }); + } + const { middleware, instrumentation } = entrypoints; + // We check for explicit true/false, since it's initialized to + // undefined during the first loop (middlewareChanges event is + // unnecessary during the first serve) + if (currentEntrypoints.global.middleware && !middleware) { + const key = (0, _entrykey.getEntryKey)('root', 'server', 'middleware'); + // Went from middleware to no middleware + await (dev == null ? void 0 : dev.hooks.unsubscribeFromChanges(key)); + currentEntryIssues.delete(key); + dev.hooks.sendHmr('middleware', { + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.MIDDLEWARE_CHANGES + }); + } else if (!currentEntrypoints.global.middleware && middleware) { + // Went from no middleware to middleware + dev.hooks.sendHmr('middleware', { + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.MIDDLEWARE_CHANGES + }); + } + currentEntrypoints.global.middleware = middleware; + if (instrumentation) { + const processInstrumentation = async (name, prop)=>{ + const prettyName = { + nodeJs: 'Node.js', + edge: 'Edge' + }; + const finishBuilding = dev.hooks.startBuilding(`instrumentation ${prettyName[prop]}`, undefined, true); + const key = (0, _entrykey.getEntryKey)('root', 'server', name); + const writtenEndpoint = await instrumentation[prop].writeToDisk(); + dev.hooks.handleWrittenEndpoint(key, writtenEndpoint, false); + (0, _utils.processIssues)(currentEntryIssues, key, writtenEndpoint, false, logErrors); + finishBuilding(); + }; + await processInstrumentation('instrumentation.nodeJs', 'nodeJs'); + await processInstrumentation('instrumentation.edge', 'edge'); + await manifestLoader.loadMiddlewareManifest('instrumentation', 'instrumentation'); + manifestLoader.writeManifests({ + devRewrites, + productionRewrites: undefined, + entrypoints: currentEntrypoints + }); + dev.serverFields.actualInstrumentationHookFile = '/instrumentation'; + await dev.hooks.propagateServerField('actualInstrumentationHookFile', dev.serverFields.actualInstrumentationHookFile); + } else { + dev.serverFields.actualInstrumentationHookFile = undefined; + await dev.hooks.propagateServerField('actualInstrumentationHookFile', dev.serverFields.actualInstrumentationHookFile); + } + if (middleware) { + const key = (0, _entrykey.getEntryKey)('root', 'server', 'middleware'); + const endpoint = middleware.endpoint; + const triggerName = middleware.isProxy ? _constants.PROXY_FILENAME : _constants.MIDDLEWARE_FILENAME; + async function processMiddleware() { + var _manifestLoader_getMiddlewareManifest; + const finishBuilding = dev.hooks.startBuilding(triggerName, undefined, true); + const writtenEndpoint = await endpoint.writeToDisk(); + dev.hooks.handleWrittenEndpoint(key, writtenEndpoint, false); + (0, _utils.processIssues)(currentEntryIssues, key, writtenEndpoint, false, logErrors); + await manifestLoader.loadMiddlewareManifest('middleware', 'middleware'); + const middlewareConfig = (_manifestLoader_getMiddlewareManifest = manifestLoader.getMiddlewareManifest(key)) == null ? void 0 : _manifestLoader_getMiddlewareManifest.middleware['/']; + if (dev && middlewareConfig) { + dev.serverFields.middleware = { + match: null, + page: '/', + matchers: middlewareConfig.matchers + }; + } + finishBuilding(); + } + await processMiddleware(); + if (dev) { + dev == null ? void 0 : dev.hooks.subscribeToChanges(key, false, endpoint, async ()=>{ + const finishBuilding = dev.hooks.startBuilding(triggerName, undefined, true); + await processMiddleware(); + await dev.hooks.propagateServerField('actualMiddlewareFile', dev.serverFields.actualMiddlewareFile); + await dev.hooks.propagateServerField('middleware', dev.serverFields.middleware); + manifestLoader.writeManifests({ + devRewrites, + productionRewrites: undefined, + entrypoints: currentEntrypoints + }); + finishBuilding == null ? void 0 : finishBuilding(); + return { + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.MIDDLEWARE_CHANGES + }; + }, ()=>{ + return { + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.MIDDLEWARE_CHANGES + }; + }); + } + } else { + manifestLoader.deleteMiddlewareManifest((0, _entrykey.getEntryKey)('root', 'server', 'middleware')); + dev.serverFields.actualMiddlewareFile = undefined; + dev.serverFields.middleware = undefined; + } + await dev.hooks.propagateServerField('actualMiddlewareFile', dev.serverFields.actualMiddlewareFile); + await dev.hooks.propagateServerField('middleware', dev.serverFields.middleware); +} +async function handleEntrypointsDevCleanup({ currentEntryIssues, currentEntrypoints, assetMapper, changeSubscriptions, clients, clientStates, hooks }) { + // this needs to be first as `hasEntrypointForKey` uses the `assetMapper` + for (const key of assetMapper.keys()){ + if (!hasEntrypointForKey(currentEntrypoints, key, assetMapper)) { + assetMapper.delete(key); + } + } + for (const key of changeSubscriptions.keys()){ + // middleware is handled separately + if (!hasEntrypointForKey(currentEntrypoints, key, assetMapper)) { + await hooks.unsubscribeFromChanges(key); + } + } + for (const [key] of currentEntryIssues){ + if (!hasEntrypointForKey(currentEntrypoints, key, assetMapper)) { + currentEntryIssues.delete(key); + } + } + for (const client of clients){ + const state = clientStates.get(client); + if (!state) { + continue; + } + for (const key of state.clientIssues.keys()){ + if (!hasEntrypointForKey(currentEntrypoints, key, assetMapper)) { + state.clientIssues.delete(key); + } + } + for (const id of state.subscriptions.keys()){ + if (!hasEntrypointForKey(currentEntrypoints, (0, _entrykey.getEntryKey)('assets', 'client', id), assetMapper)) { + hooks.unsubscribeFromHmrEvents(client, id); + } + } + } +} +async function handlePagesErrorRoute({ currentEntryIssues, entrypoints, manifestLoader, devRewrites, productionRewrites, logErrors, hooks }) { + if (entrypoints.global.app) { + const key = (0, _entrykey.getEntryKey)('pages', 'server', '_app'); + const writtenEndpoint = await entrypoints.global.app.writeToDisk(); + hooks.handleWrittenEndpoint(key, writtenEndpoint, false); + hooks.subscribeToChanges(key, false, entrypoints.global.app, ()=>{ + // There's a special case for this in `../client/page-bootstrap.ts`. + // https://github.com/vercel/next.js/blob/08d7a7e5189a835f5dcb82af026174e587575c0e/packages/next/src/client/page-bootstrap.ts#L69-L71 + return { + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.CLIENT_CHANGES + }; + }, ()=>{ + return { + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.RELOAD_PAGE, + data: '_app has changed (error route)' + }; + }); + (0, _utils.processIssues)(currentEntryIssues, key, writtenEndpoint, false, logErrors); + } + await manifestLoader.loadBuildManifest('_app'); + await manifestLoader.loadPagesManifest('_app'); + await manifestLoader.loadFontManifest('_app'); + if (entrypoints.global.document) { + const key = (0, _entrykey.getEntryKey)('pages', 'server', '_document'); + const writtenEndpoint = await entrypoints.global.document.writeToDisk(); + hooks.handleWrittenEndpoint(key, writtenEndpoint, false); + hooks.subscribeToChanges(key, false, entrypoints.global.document, ()=>{ + return { + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.RELOAD_PAGE, + data: '_document has changed (error route)' + }; + }, (e)=>{ + return { + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.RELOAD_PAGE, + data: `error in _document subscription (error route): ${e}` + }; + }); + (0, _utils.processIssues)(currentEntryIssues, key, writtenEndpoint, false, logErrors); + } + await manifestLoader.loadPagesManifest('_document'); + if (entrypoints.global.error) { + const key = (0, _entrykey.getEntryKey)('pages', 'server', '_error'); + const writtenEndpoint = await entrypoints.global.error.writeToDisk(); + hooks.handleWrittenEndpoint(key, writtenEndpoint, false); + hooks.subscribeToChanges(key, false, entrypoints.global.error, ()=>{ + // There's a special case for this in `../client/page-bootstrap.ts`. + // https://github.com/vercel/next.js/blob/08d7a7e5189a835f5dcb82af026174e587575c0e/packages/next/src/client/page-bootstrap.ts#L69-L71 + return { + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.CLIENT_CHANGES + }; + }, (e)=>{ + return { + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.RELOAD_PAGE, + data: `error in _error subscription: ${e}` + }; + }); + (0, _utils.processIssues)(currentEntryIssues, key, writtenEndpoint, false, logErrors); + } + await manifestLoader.loadClientBuildManifest('_error'); + await manifestLoader.loadBuildManifest('_error'); + await manifestLoader.loadPagesManifest('_error'); + await manifestLoader.loadFontManifest('_error'); + manifestLoader.writeManifests({ + devRewrites, + productionRewrites, + entrypoints + }); +} +function removeRouteSuffix(route) { + return route.replace(/\/route$/, ''); +} +function addRouteSuffix(route) { + return route + '/route'; +} +function addMetadataIdToRoute(route) { + return route + '/[__metadata_id__]'; +} +function normalizedPageToTurbopackStructureRoute(route, ext) { + let entrypointKey = route; + if ((0, _ismetadataroute.isMetadataRoute)(entrypointKey)) { + entrypointKey = entrypointKey.endsWith('/route') ? entrypointKey.slice(0, -'/route'.length) : entrypointKey; + if (ext) { + if (entrypointKey.endsWith('/[__metadata_id__]')) { + entrypointKey = entrypointKey.slice(0, -'/[__metadata_id__]'.length); + } + // After stripping [__metadata_id__], add .xml for dynamic sitemap routes + // to match the Turbopack entry key from normalize_metadata_route + if (entrypointKey.endsWith('/sitemap') && ext !== '.xml') { + entrypointKey = entrypointKey + '.xml'; + } + } + entrypointKey = entrypointKey + '/route'; + } + return entrypointKey; +} + +//# sourceMappingURL=turbopack-utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/dynamic-rendering-utils.js b/build/node_modules/next/dist/server/dynamic-rendering-utils.js new file mode 100644 index 0000000..a0d7faa --- /dev/null +++ b/build/node_modules/next/dist/server/dynamic-rendering-utils.js @@ -0,0 +1,108 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + delayUntilRuntimeStage: null, + getRuntimeStage: null, + isHangingPromiseRejectionError: null, + makeDevtoolsIOAwarePromise: null, + makeHangingPromise: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + delayUntilRuntimeStage: function() { + return delayUntilRuntimeStage; + }, + getRuntimeStage: function() { + return getRuntimeStage; + }, + isHangingPromiseRejectionError: function() { + return isHangingPromiseRejectionError; + }, + makeDevtoolsIOAwarePromise: function() { + return makeDevtoolsIOAwarePromise; + }, + makeHangingPromise: function() { + return makeHangingPromise; + } +}); +const _stagedrendering = require("./app-render/staged-rendering"); +function isHangingPromiseRejectionError(err) { + if (typeof err !== 'object' || err === null || !('digest' in err)) { + return false; + } + return err.digest === HANGING_PROMISE_REJECTION; +} +const HANGING_PROMISE_REJECTION = 'HANGING_PROMISE_REJECTION'; +class HangingPromiseRejectionError extends Error { + constructor(route, expression){ + super(`During prerendering, ${expression} rejects when the prerender is complete. Typically these errors are handled by React but if you move ${expression} to a different context by using \`setTimeout\`, \`after\`, or similar functions you may observe this error and you should handle it in that context. This occurred at route "${route}".`), this.route = route, this.expression = expression, this.digest = HANGING_PROMISE_REJECTION; + } +} +const abortListenersBySignal = new WeakMap(); +function makeHangingPromise(signal, route, expression) { + if (signal.aborted) { + return Promise.reject(new HangingPromiseRejectionError(route, expression)); + } else { + const hangingPromise = new Promise((_, reject)=>{ + const boundRejection = reject.bind(null, new HangingPromiseRejectionError(route, expression)); + let currentListeners = abortListenersBySignal.get(signal); + if (currentListeners) { + currentListeners.push(boundRejection); + } else { + const listeners = [ + boundRejection + ]; + abortListenersBySignal.set(signal, listeners); + signal.addEventListener('abort', ()=>{ + for(let i = 0; i < listeners.length; i++){ + listeners[i](); + } + }, { + once: true + }); + } + }); + // We are fine if no one actually awaits this promise. We shouldn't consider this an unhandled rejection so + // we attach a noop catch handler here to suppress this warning. If you actually await somewhere or construct + // your own promise out of it you'll need to ensure you handle the error when it rejects. + hangingPromise.catch(ignoreReject); + return hangingPromise; + } +} +function ignoreReject() {} +function makeDevtoolsIOAwarePromise(underlying, requestStore, stage) { + if (requestStore.stagedRendering) { + // We resolve each stage in a timeout, so React DevTools will pick this up as IO. + return requestStore.stagedRendering.delayUntilStage(stage, undefined, underlying); + } + // in React DevTools if we resolve in a setTimeout we will observe + // the promise resolution as something that can suspend a boundary or root. + return new Promise((resolve)=>{ + // Must use setTimeout to be considered IO React DevTools. setImmediate will not work. + setTimeout(()=>{ + resolve(underlying); + }, 0); + }); +} +function getRuntimeStage(stagedRendering) { + if (stagedRendering.currentStage === _stagedrendering.RenderStage.EarlyStatic || stagedRendering.currentStage === _stagedrendering.RenderStage.EarlyRuntime) { + return _stagedrendering.RenderStage.EarlyRuntime; + } + return _stagedrendering.RenderStage.Runtime; +} +function delayUntilRuntimeStage(prerenderStore, result) { + const { stagedRendering } = prerenderStore; + if (!stagedRendering) { + return result; + } + return stagedRendering.waitForStage(getRuntimeStage(stagedRendering)).then(()=>result); +} + +//# sourceMappingURL=dynamic-rendering-utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/font-utils.js b/build/node_modules/next/dist/server/font-utils.js new file mode 100644 index 0000000..9045171 --- /dev/null +++ b/build/node_modules/next/dist/server/font-utils.js @@ -0,0 +1,43 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "calculateSizeAdjustValues", { + enumerable: true, + get: function() { + return calculateSizeAdjustValues; + } +}); +const _constants = require("../shared/lib/constants"); +const capsizeFontsMetrics = require('next/dist/server/capsize-font-metrics.json'); +function formatName(str) { + return str.replace(/(?:^\w|[A-Z]|\b\w)/g, function(word, index) { + return index === 0 ? word.toLowerCase() : word.toUpperCase(); + }).replace(/\s+/g, ''); +} +function formatOverrideValue(val) { + return Math.abs(val * 100).toFixed(2); +} +function calculateSizeAdjustValues(fontName) { + const fontKey = formatName(fontName); + const fontMetrics = capsizeFontsMetrics[fontKey]; + let { category, ascent, descent, lineGap, unitsPerEm, xWidthAvg } = fontMetrics; + const mainFontAvgWidth = xWidthAvg / unitsPerEm; + const fallbackFont = category === 'serif' ? _constants.DEFAULT_SERIF_FONT : _constants.DEFAULT_SANS_SERIF_FONT; + const fallbackFontName = formatName(fallbackFont.name); + const fallbackFontMetrics = capsizeFontsMetrics[fallbackFontName]; + const fallbackFontAvgWidth = fallbackFontMetrics.xWidthAvg / fallbackFontMetrics.unitsPerEm; + let sizeAdjust = xWidthAvg ? mainFontAvgWidth / fallbackFontAvgWidth : 1; + ascent = formatOverrideValue(ascent / (unitsPerEm * sizeAdjust)); + descent = formatOverrideValue(descent / (unitsPerEm * sizeAdjust)); + lineGap = formatOverrideValue(lineGap / (unitsPerEm * sizeAdjust)); + return { + ascent, + descent, + lineGap, + fallbackFont: fallbackFont.name, + sizeAdjust: formatOverrideValue(sizeAdjust) + }; +} + +//# sourceMappingURL=font-utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/get-app-route-from-entrypoint.js b/build/node_modules/next/dist/server/get-app-route-from-entrypoint.js new file mode 100644 index 0000000..97f4cc2 --- /dev/null +++ b/build/node_modules/next/dist/server/get-app-route-from-entrypoint.js @@ -0,0 +1,30 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "default", { + enumerable: true, + get: function() { + return getAppRouteFromEntrypoint; + } +}); +const _matchbundle = /*#__PURE__*/ _interop_require_default(require("./match-bundle")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +// matches app/:path*.js +const APP_ROUTE_NAME_REGEX = /^app[/\\](.*)$/; +function getAppRouteFromEntrypoint(entryFile) { + const pagePath = (0, _matchbundle.default)(APP_ROUTE_NAME_REGEX, entryFile); + if (typeof pagePath === 'string' && !pagePath) { + return '/'; + } + if (!pagePath) { + return null; + } + return pagePath; +} + +//# sourceMappingURL=get-app-route-from-entrypoint.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/get-page-files.js b/build/node_modules/next/dist/server/get-page-files.js new file mode 100644 index 0000000..796eb72 --- /dev/null +++ b/build/node_modules/next/dist/server/get-page-files.js @@ -0,0 +1,23 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getPageFiles", { + enumerable: true, + get: function() { + return getPageFiles; + } +}); +const _denormalizepagepath = require("../shared/lib/page-path/denormalize-page-path"); +const _normalizepagepath = require("../shared/lib/page-path/normalize-page-path"); +function getPageFiles(buildManifest, page) { + const normalizedPage = (0, _denormalizepagepath.denormalizePagePath)((0, _normalizepagepath.normalizePagePath)(page)); + let files = buildManifest.pages[normalizedPage]; + if (!files) { + console.warn(`Could not find files for ${normalizedPage} in .next/build-manifest.json`); + return []; + } + return files; +} + +//# sourceMappingURL=get-page-files.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/get-route-from-entrypoint.js b/build/node_modules/next/dist/server/get-route-from-entrypoint.js new file mode 100644 index 0000000..16ba21b --- /dev/null +++ b/build/node_modules/next/dist/server/get-route-from-entrypoint.js @@ -0,0 +1,35 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "default", { + enumerable: true, + get: function() { + return getRouteFromEntrypoint; + } +}); +const _getapproutefromentrypoint = /*#__PURE__*/ _interop_require_default(require("./get-app-route-from-entrypoint")); +const _matchbundle = /*#__PURE__*/ _interop_require_default(require("./match-bundle")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +// matches pages/:page*.js +const SERVER_ROUTE_NAME_REGEX = /^pages[/\\](.*)$/; +// matches static/pages/:page*.js +const BROWSER_ROUTE_NAME_REGEX = /^static[/\\]pages[/\\](.*)$/; +function getRouteFromEntrypoint(entryFile, app) { + let pagePath = (0, _matchbundle.default)(SERVER_ROUTE_NAME_REGEX, entryFile); + if (pagePath) { + return pagePath; + } + if (app) { + pagePath = (0, _getapproutefromentrypoint.default)(entryFile); + if (pagePath) return pagePath; + } + // Potentially the passed item is a browser bundle so we try to match that also + return (0, _matchbundle.default)(BROWSER_ROUTE_NAME_REGEX, entryFile); +} + +//# sourceMappingURL=get-route-from-entrypoint.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/image-optimizer.js b/build/node_modules/next/dist/server/image-optimizer.js new file mode 100644 index 0000000..5961d5c --- /dev/null +++ b/build/node_modules/next/dist/server/image-optimizer.js @@ -0,0 +1,1240 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + ImageError: null, + ImageOptimizerCache: null, + detectContentType: null, + extractEtag: null, + fetchExternalImage: null, + fetchInternalImage: null, + getHash: null, + getImageEtag: null, + getImageSize: null, + getMaxAge: null, + getPreviouslyCachedImageOrNull: null, + getSharp: null, + imageOptimizer: null, + optimizeImage: null, + sendResponse: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + ImageError: function() { + return ImageError; + }, + ImageOptimizerCache: function() { + return ImageOptimizerCache; + }, + detectContentType: function() { + return detectContentType; + }, + extractEtag: function() { + return extractEtag; + }, + fetchExternalImage: function() { + return fetchExternalImage; + }, + fetchInternalImage: function() { + return fetchInternalImage; + }, + getHash: function() { + return getHash; + }, + getImageEtag: function() { + return getImageEtag; + }, + getImageSize: function() { + return getImageSize; + }, + getMaxAge: function() { + return getMaxAge; + }, + getPreviouslyCachedImageOrNull: function() { + return getPreviouslyCachedImageOrNull; + }, + getSharp: function() { + return getSharp; + }, + imageOptimizer: function() { + return imageOptimizer; + }, + optimizeImage: function() { + return optimizeImage; + }, + sendResponse: function() { + return sendResponse; + } +}); +const _crypto = require("crypto"); +const _fs = require("fs"); +const _accept = require("next/dist/compiled/@hapi/accept"); +const _contentdisposition = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/content-disposition")); +const _imagesize = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/image-size")); +const _detector = require("next/dist/compiled/image-detector/detector.js"); +const _isanimated = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/is-animated")); +const _path = require("path"); +const _url = /*#__PURE__*/ _interop_require_default(require("url")); +const _imageblursvg = require("../shared/lib/image-blur-svg"); +const _matchlocalpattern = require("../shared/lib/match-local-pattern"); +const _matchremotepattern = require("../shared/lib/match-remote-pattern"); +const _mockrequest = require("./lib/mock-request"); +const _responsecache = require("./response-cache"); +const _sendpayload = require("./send-payload"); +const _servestatic = require("./serve-static"); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("../build/output/log")); +const _iserror = /*#__PURE__*/ _interop_require_default(require("../lib/is-error")); +const _isprivateip = require("./is-private-ip"); +const _disklrucacheexternal = require("./lib/disk-lru-cache.external"); +const _url1 = require("../lib/url"); +const _invarianterror = require("../shared/lib/invariant-error"); +const _promises = require("dns/promises"); +const _net = require("net"); +const _dns = require("dns"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +const AVIF = 'image/avif'; +const WEBP = 'image/webp'; +const PNG = 'image/png'; +const JPEG = 'image/jpeg'; +const JXL = 'image/jxl'; +const JP2 = 'image/jp2'; +const HEIC = 'image/heic'; +const GIF = 'image/gif'; +const SVG = 'image/svg+xml'; +const ICO = 'image/x-icon'; +const ICNS = 'image/x-icns'; +const TIFF = 'image/tiff'; +const BMP = 'image/bmp'; +const PDF = 'application/pdf'; +const CACHE_VERSION = 4; +const ANIMATABLE_TYPES = [ + WEBP, + PNG, + GIF +]; +const BYPASS_TYPES = [ + SVG, + ICO, + ICNS, + BMP, + JXL, + HEIC +]; +const BLUR_IMG_SIZE = 8 // should match `next-image-loader` +; +const BLUR_QUALITY = 70 // should match `next-image-loader` +; +let _sharp; +async function initCacheEntries(cacheDir) { + const cacheKeys = await _fs.promises.readdir(cacheDir).catch(()=>[]); + const entries = []; + for (const cacheKey of cacheKeys){ + try { + const { expireAt, buffer } = await readFromCacheDir(cacheDir, cacheKey); + entries.push({ + key: cacheKey, + size: buffer.byteLength, + expireAt + }); + } catch { + // Skip entries that can't be read from disk + } + } + // Sort oldest-first so we can replay them chronologically into LRU + return entries.sort((a, b)=>a.expireAt - b.expireAt); +} +function getSharp(concurrency) { + if (_sharp) { + return _sharp; + } + try { + _sharp = require('sharp'); + if (_sharp && _sharp.concurrency() > 1) { + // Reducing concurrency should reduce the memory usage too. + // We more aggressively reduce in dev but also reduce in prod. + // https://sharp.pixelplumbing.com/api-utility#concurrency + const divisor = process.env.NODE_ENV === 'development' ? 4 : 2; + _sharp.concurrency(concurrency ?? Math.floor(Math.max(_sharp.concurrency() / divisor, 1))); + } + } catch (e) { + if ((0, _iserror.default)(e) && e.code === 'MODULE_NOT_FOUND') { + throw Object.defineProperty(new Error('Module `sharp` not found. Please run `npm install --cpu=wasm32 sharp` to install it.'), "__NEXT_ERROR_CODE", { + value: "E47", + enumerable: false, + configurable: true + }); + } + throw e; + } + return _sharp; +} +function getSupportedMimeType(options, accept = '') { + const mimeType = (0, _accept.mediaType)(accept, options); + return accept.includes(mimeType) ? mimeType : ''; +} +function getHash(items) { + const hash = (0, _crypto.createHash)('sha256'); + for (let item of items){ + if (typeof item === 'number') hash.update(String(item)); + else { + hash.update(item); + } + } + // See https://en.wikipedia.org/wiki/Base64#URL_applications + return hash.digest('base64url'); +} +function extractEtag(etag, imageBuffer) { + if (etag) { + // upstream etag needs to be base64url encoded due to weak etag signature + // as we store this in the cache-entry file name. + return Buffer.from(etag).toString('base64url'); + } + return getImageEtag(imageBuffer); +} +function getImageEtag(image) { + return getHash([ + image + ]); +} +async function writeToCacheDir(cacheDir, cacheKey, extension, maxAge, expireAt, buffer, etag, upstreamEtag) { + const dir = (0, _path.join)(/* turbopackIgnore: true */ cacheDir, cacheKey); + const filename = (0, _path.join)(/* turbopackIgnore: true */ dir, `${maxAge}.${expireAt}.${etag}.${upstreamEtag}.${extension}`); + await _fs.promises.rm(dir, { + recursive: true, + force: true + }).catch(()=>{}); + await _fs.promises.mkdir(dir, { + recursive: true + }); + await _fs.promises.writeFile(filename, buffer); +} +async function readFromCacheDir(cacheDir, cacheKey) { + const dir = (0, _path.join)(/* turbopackIgnore: true */ cacheDir, cacheKey); + const files = await _fs.promises.readdir(dir); + const file = files[0]; + if (!file) { + throw Object.defineProperty(new Error(`Invariant: cache entry "${cacheKey}" not found in dir "${cacheDir}"`), "__NEXT_ERROR_CODE", { + value: "E1069", + enumerable: false, + configurable: true + }); + } + const [maxAgeSt, expireAtSt, etag, upstreamEtag, extension] = file.split('.', 5); + const filePath = (0, _path.join)(/* turbopackIgnore: true */ dir, file); + const buffer = await _fs.promises.readFile(/* turbopackIgnore: true */ filePath); + const expireAt = Number(expireAtSt); + const maxAge = Number(maxAgeSt); + return { + maxAge, + expireAt, + etag, + upstreamEtag, + buffer, + extension + }; +} +async function deleteFromCacheDir(cacheDir, cacheKey) { + return _fs.promises.rm((0, _path.join)(/* turbopackIgnore: true */ cacheDir, cacheKey), { + recursive: true, + force: true + }).catch((err)=>{ + _log.error(`Failed to delete cache key ${cacheKey}`, err); + }); +} +async function detectContentType(buffer, skipMetadata, concurrency) { + if (buffer.byteLength === 0) { + return null; + } + if ([ + 0xff, + 0xd8, + 0xff + ].every((b, i)=>buffer[i] === b)) { + return JPEG; + } + if ([ + 0x89, + 0x50, + 0x4e, + 0x47, + 0x0d, + 0x0a, + 0x1a, + 0x0a + ].every((b, i)=>buffer[i] === b)) { + return PNG; + } + if ([ + 0x47, + 0x49, + 0x46, + 0x38 + ].every((b, i)=>buffer[i] === b)) { + return GIF; + } + if ([ + 0x52, + 0x49, + 0x46, + 0x46, + 0, + 0, + 0, + 0, + 0x57, + 0x45, + 0x42, + 0x50 + ].every((b, i)=>!b || buffer[i] === b)) { + return WEBP; + } + if ([ + 0x3c, + 0x3f, + 0x78, + 0x6d, + 0x6c + ].every((b, i)=>buffer[i] === b)) { + return SVG; + } + if ([ + 0x3c, + 0x73, + 0x76, + 0x67 + ].every((b, i)=>buffer[i] === b)) { + return SVG; + } + if ([ + 0, + 0, + 0, + 0, + 0x66, + 0x74, + 0x79, + 0x70, + 0x61, + 0x76, + 0x69, + 0x66 + ].every((b, i)=>!b || buffer[i] === b)) { + return AVIF; + } + if ([ + 0x00, + 0x00, + 0x01, + 0x00 + ].every((b, i)=>buffer[i] === b)) { + return ICO; + } + if ([ + 0x69, + 0x63, + 0x6e, + 0x73 + ].every((b, i)=>buffer[i] === b)) { + return ICNS; + } + if ([ + 0x49, + 0x49, + 0x2a, + 0x00 + ].every((b, i)=>buffer[i] === b)) { + return TIFF; + } + if ([ + 0x42, + 0x4d + ].every((b, i)=>buffer[i] === b)) { + return BMP; + } + if ([ + 0xff, + 0x0a + ].every((b, i)=>buffer[i] === b)) { + return JXL; + } + if ([ + 0x00, + 0x00, + 0x00, + 0x0c, + 0x4a, + 0x58, + 0x4c, + 0x20, + 0x0d, + 0x0a, + 0x87, + 0x0a + ].every((b, i)=>buffer[i] === b)) { + return JXL; + } + if ([ + 0, + 0, + 0, + 0, + 0x66, + 0x74, + 0x79, + 0x70, + 0x68, + 0x65, + 0x69, + 0x63 + ].every((b, i)=>!b || buffer[i] === b)) { + return HEIC; + } + if ([ + 0x25, + 0x50, + 0x44, + 0x46, + 0x2d + ].every((b, i)=>buffer[i] === b)) { + return PDF; + } + if ([ + 0x00, + 0x00, + 0x00, + 0x0c, + 0x6a, + 0x50, + 0x20, + 0x20, + 0x0d, + 0x0a, + 0x87, + 0x0a + ].every((b, i)=>buffer[i] === b)) { + return JP2; + } + let format; + format = (0, _detector.detector)(buffer); + if (!format && !skipMetadata) { + const sharp = getSharp(concurrency); + const meta = await sharp(buffer).metadata().catch((_)=>null); + format = meta == null ? void 0 : meta.format; + } + switch(format){ + case 'avif': + return AVIF; + case 'webp': + return WEBP; + case 'png': + return PNG; + case 'jpeg': + case 'jpg': + return JPEG; + case 'gif': + return GIF; + case 'svg': + return SVG; + case 'jxl': + case 'jxl-stream': + return JXL; + case 'jp2': + return JP2; + case 'tiff': + case 'tif': + return TIFF; + case 'pdf': + return PDF; + case 'bmp': + return BMP; + case 'ico': + return ICO; + case 'icns': + return ICNS; + case 'dcraw': + case 'dz': + case 'exr': + case 'fits': + case 'heif': + case 'input': + case 'magick': + case 'openslide': + case 'ppm': + case 'rad': + case 'raw': + case 'v': + case 'cur': + case 'dds': + case 'j2c': + case 'ktx': + case 'pnm': + case 'psd': + case 'tga': + case undefined: + default: + return null; + } +} +class ImageOptimizerCache { + static validateParams(req, query, nextConfig, isDev) { + var _nextConfig_images, _nextConfig_images1, _nextConfig_images2; + const imageData = nextConfig.images; + const { deviceSizes = [], imageSizes = [], domains = [], minimumCacheTTL = 14400, formats = [ + 'image/webp' + ] } = imageData; + const remotePatterns = ((_nextConfig_images = nextConfig.images) == null ? void 0 : _nextConfig_images.remotePatterns) || []; + const localPatterns = (_nextConfig_images1 = nextConfig.images) == null ? void 0 : _nextConfig_images1.localPatterns; + const qualities = (_nextConfig_images2 = nextConfig.images) == null ? void 0 : _nextConfig_images2.qualities; + const { url, w, q } = query; + let href; + if (domains.length > 0) { + _log.warnOnce('The "images.domains" configuration is deprecated. Please use "images.remotePatterns" configuration instead.'); + } + if (!url) { + return { + errorMessage: '"url" parameter is required' + }; + } else if (Array.isArray(url)) { + return { + errorMessage: '"url" parameter cannot be an array' + }; + } + if (url.length > 3072) { + return { + errorMessage: '"url" parameter is too long' + }; + } + if (url.startsWith('//')) { + return { + errorMessage: '"url" parameter cannot be a protocol-relative URL (//)' + }; + } + let isAbsolute; + if (url.startsWith('/')) { + var _parseUrl; + href = url; + isAbsolute = false; + if (/\/_next\/image($|\/)/.test(decodeURIComponent(((_parseUrl = (0, _url1.parseUrl)(url)) == null ? void 0 : _parseUrl.pathname) ?? ''))) { + return { + errorMessage: '"url" parameter cannot be recursive' + }; + } + if (!(0, _matchlocalpattern.hasLocalMatch)(localPatterns, url)) { + return { + errorMessage: '"url" parameter is not allowed' + }; + } + } else { + let hrefParsed; + try { + hrefParsed = new URL(url); + href = hrefParsed.toString(); + isAbsolute = true; + } catch (_error) { + return { + errorMessage: '"url" parameter is invalid' + }; + } + if (![ + 'http:', + 'https:' + ].includes(hrefParsed.protocol)) { + return { + errorMessage: '"url" parameter is invalid' + }; + } + if (!(0, _matchremotepattern.hasRemoteMatch)(domains, remotePatterns, hrefParsed)) { + return { + errorMessage: '"url" parameter is not allowed' + }; + } + } + if (!w) { + return { + errorMessage: '"w" parameter (width) is required' + }; + } else if (Array.isArray(w)) { + return { + errorMessage: '"w" parameter (width) cannot be an array' + }; + } else if (!/^[0-9]+$/.test(w)) { + return { + errorMessage: '"w" parameter (width) must be an integer greater than 0' + }; + } + if (!q) { + return { + errorMessage: '"q" parameter (quality) is required' + }; + } else if (Array.isArray(q)) { + return { + errorMessage: '"q" parameter (quality) cannot be an array' + }; + } else if (!/^[0-9]+$/.test(q)) { + return { + errorMessage: '"q" parameter (quality) must be an integer between 1 and 100' + }; + } + const width = parseInt(w, 10); + if (width <= 0 || isNaN(width)) { + return { + errorMessage: '"w" parameter (width) must be an integer greater than 0' + }; + } + const sizes = [ + ...deviceSizes || [], + ...imageSizes || [] + ]; + if (isDev) { + sizes.push(BLUR_IMG_SIZE); + } + const isValidSize = sizes.includes(width) || isDev && width <= BLUR_IMG_SIZE; + if (!isValidSize) { + return { + errorMessage: `"w" parameter (width) of ${width} is not allowed` + }; + } + const quality = parseInt(q, 10); + if (isNaN(quality) || quality < 1 || quality > 100) { + return { + errorMessage: '"q" parameter (quality) must be an integer between 1 and 100' + }; + } + if (qualities) { + if (isDev) { + qualities.push(BLUR_QUALITY); + } + if (!qualities.includes(quality)) { + return { + errorMessage: `"q" parameter (quality) of ${q} is not allowed` + }; + } + } + const mimeType = getSupportedMimeType(formats || [], req.headers['accept']); + const isStatic = url.startsWith(`${nextConfig.basePath || ''}/_next/static/media`); + return { + href, + sizes, + isAbsolute, + isStatic, + width, + quality, + mimeType, + minimumCacheTTL + }; + } + static getCacheKey({ href, width, quality, mimeType }) { + return getHash([ + CACHE_VERSION, + href, + width, + quality, + mimeType + ]); + } + constructor({ distDir, nextConfig, cacheHandler }){ + this.cacheDir = (0, _path.join)(/* turbopackIgnore: true */ distDir, 'cache', 'images'); + this.nextConfig = nextConfig; + this.cacheHandler = cacheHandler; + // Eagerly start LRU initialization for filesystem cache + if (!cacheHandler && nextConfig.images.maximumDiskCacheSize !== 0 && nextConfig.experimental.isrFlushToDisk) { + this.isDiskCacheEnabled = true; + this.cacheDiskLRU = (0, _disklrucacheexternal.getOrInitDiskLRU)(this.cacheDir, nextConfig.images.maximumDiskCacheSize, initCacheEntries, deleteFromCacheDir); + } + } + async get(cacheKey) { + // If a custom cache handler is provided, use it + if (this.cacheHandler) { + try { + const cacheData = await this.cacheHandler.get(cacheKey, { + kind: _responsecache.IncrementalCacheKind.IMAGE, + isFallback: false + }); + if (!(cacheData == null ? void 0 : cacheData.value)) { + return null; + } + if (cacheData.value.kind !== _responsecache.CachedRouteKind.IMAGE) { + return null; + } + const now = Date.now(); + const lastModified = cacheData.lastModified || now; + const revalidate = typeof cacheData.value.revalidate === 'number' ? cacheData.value.revalidate : this.nextConfig.images.minimumCacheTTL; + const revalidateAfter = Math.max(revalidate, this.nextConfig.images.minimumCacheTTL) * 1000 + lastModified; + const isStale = revalidateAfter < now; + return { + value: cacheData.value, + revalidateAfter, + cacheControl: { + revalidate, + expire: undefined + }, + isStale + }; + } catch (_) { + // failed to get from custom cache handler, treat as cache miss + } + return null; + } + // If the filesystem cache is disabled, return early + if (!this.isDiskCacheEnabled) { + return null; + } + // Fall back to filesystem cache + try { + const now = Date.now(); + const { maxAge, expireAt, etag, upstreamEtag, buffer, extension } = await readFromCacheDir(this.cacheDir, cacheKey); + // Promote entry in LRU (mark as recently used) + const lru = await this.cacheDiskLRU; + lru == null ? void 0 : lru.get(cacheKey); + return { + value: { + kind: _responsecache.CachedRouteKind.IMAGE, + etag, + buffer, + extension, + upstreamEtag + }, + revalidateAfter: Math.max(maxAge, this.nextConfig.images.minimumCacheTTL) * 1000 + Date.now(), + cacheControl: { + revalidate: maxAge, + expire: undefined + }, + isStale: now > expireAt + }; + } catch (_) { + // failed to read from cache dir, treat as cache miss + } + return null; + } + async set(cacheKey, value, { cacheControl }) { + if ((value == null ? void 0 : value.kind) !== _responsecache.CachedRouteKind.IMAGE) { + throw Object.defineProperty(new Error('invariant attempted to set non-image to image-cache'), "__NEXT_ERROR_CODE", { + value: "E366", + enumerable: false, + configurable: true + }); + } + const revalidate = cacheControl == null ? void 0 : cacheControl.revalidate; + if (typeof revalidate !== 'number') { + throw Object.defineProperty(new _invarianterror.InvariantError('revalidate must be a number for image-cache'), "__NEXT_ERROR_CODE", { + value: "E657", + enumerable: false, + configurable: true + }); + } + // If a custom cache handler is provided, use it + if (this.cacheHandler) { + try { + // Apply minimumCacheTTL at write time, similar to the implementation in the fallback filesystem cache + const effectiveRevalidate = Math.max(revalidate, this.nextConfig.images.minimumCacheTTL); + const valueWithRevalidate = { + ...value, + revalidate: effectiveRevalidate + }; + await this.cacheHandler.set(cacheKey, valueWithRevalidate, { + cacheControl: { + revalidate: effectiveRevalidate, + expire: cacheControl == null ? void 0 : cacheControl.expire + } + }); + } catch (err) { + _log.error(`Failed to write image to custom cache ${cacheKey}`, err); + } + return; + } + // If the filesystem cache is disabled, return early + if (!this.isDiskCacheEnabled) { + return; + } + // Fall back to filesystem cache + const expireAt = Math.max(revalidate, this.nextConfig.images.minimumCacheTTL) * 1000 + Date.now(); + try { + const lru = await this.cacheDiskLRU; + const success = lru == null ? void 0 : lru.set(cacheKey, value.buffer.byteLength); + if (success === false) { + throw Object.defineProperty(new Error(`image of size ${value.buffer.byteLength} could not be tracked by lru cache`), "__NEXT_ERROR_CODE", { + value: "E1070", + enumerable: false, + configurable: true + }); + } + await writeToCacheDir(this.cacheDir, cacheKey, value.extension, revalidate, expireAt, value.buffer, value.etag, value.upstreamEtag); + } catch (err) { + _log.error(`Failed to write image to cache ${cacheKey}`, err); + } + } +} +class ImageError extends Error { + constructor(statusCode, message){ + super(message); + // ensure an error status is used > 400 + if (statusCode >= 400) { + this.statusCode = statusCode; + } else { + this.statusCode = 500; + } + } +} +function parseCacheControl(str) { + const map = new Map(); + if (!str) { + return map; + } + for (let directive of str.split(',')){ + let [key, value] = directive.trim().split('=', 2); + key = key.toLowerCase(); + if (value) { + value = value.toLowerCase(); + } + map.set(key, value); + } + return map; +} +function getMaxAge(str) { + const map = parseCacheControl(str); + if (map) { + let age = map.get('s-maxage') || map.get('max-age') || ''; + if (age.startsWith('"') && age.endsWith('"')) { + age = age.slice(1, -1); + } + const n = parseInt(age, 10); + if (!isNaN(n)) { + return n; + } + } + return 0; +} +function getPreviouslyCachedImageOrNull(upstreamImage, previousCacheEntry) { + var _previousCacheEntry_value; + if ((previousCacheEntry == null ? void 0 : (_previousCacheEntry_value = previousCacheEntry.value) == null ? void 0 : _previousCacheEntry_value.kind) === 'IMAGE' && // Images that are SVGs, animated or failed the optimization previously end up using upstreamEtag as their etag as well, + // in these cases we want to trigger a new "optimization" attempt. + previousCacheEntry.value.upstreamEtag !== previousCacheEntry.value.etag && // and the upstream etag is the same as the previous cache entry's + upstreamImage.etag === previousCacheEntry.value.upstreamEtag) { + return previousCacheEntry.value; + } + return null; +} +async function optimizeImage({ buffer, contentType, quality, width, height, concurrency, limitInputPixels, sequentialRead, timeoutInSeconds }) { + const sharp = getSharp(concurrency); + const transformer = sharp(buffer, { + limitInputPixels, + sequentialRead: sequentialRead ?? undefined + }).timeout({ + seconds: timeoutInSeconds ?? 7 + }).rotate(); + if (height) { + transformer.resize(width, height); + } else { + transformer.resize(width, undefined, { + withoutEnlargement: true + }); + } + if (contentType === AVIF) { + transformer.avif({ + quality: Math.max(quality - 20, 1), + effort: 3 + }); + } else if (contentType === WEBP) { + transformer.webp({ + quality + }); + } else if (contentType === PNG) { + transformer.png({ + quality + }); + } else if (contentType === JPEG) { + transformer.jpeg({ + quality, + mozjpeg: true + }); + } + const optimizedBuffer = await transformer.toBuffer(); + return optimizedBuffer; +} +function isRedirect(statusCode) { + return [ + 301, + 302, + 303, + 307, + 308 + ].includes(statusCode); +} +async function fetchExternalImage(href, dangerouslyAllowLocalIP, maximumResponseBody, count = 3) { + if (!dangerouslyAllowLocalIP) { + const { hostname } = new URL(href); + let ips = [ + hostname + ]; + if (!(0, _net.isIP)(hostname)) { + const records = await (0, _promises.lookup)(hostname, { + family: 0, + all: true, + hints: _dns.ALL + }).catch((_)=>[ + { + address: hostname + } + ]); + ips = records.map((record)=>record.address); + } + const privateIps = ips.filter((ip)=>(0, _isprivateip.isPrivateIp)(ip)); + if (privateIps.length > 0) { + _log.error('upstream image', href, 'resolved to private ip', JSON.stringify(privateIps)); + throw Object.defineProperty(new ImageError(400, '"url" parameter is not allowed'), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + } + const res = await fetch(href, { + signal: AbortSignal.timeout(7000), + redirect: 'manual' + }).catch((err)=>err); + if (res instanceof Error) { + const err = res; + if (err.name === 'TimeoutError') { + _log.error('upstream image response timed out for', href); + throw Object.defineProperty(new ImageError(504, '"url" parameter is valid but upstream response timed out'), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + throw err; + } + const locationHeader = res.headers.get('Location'); + if (isRedirect(res.status) && locationHeader && URL.canParse(locationHeader, href)) { + if (count === 0) { + _log.error('upstream image response had too many redirects', href); + throw Object.defineProperty(new ImageError(508, '"url" parameter is valid but upstream response is invalid'), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + const redirect = new URL(locationHeader, href).href; + return fetchExternalImage(redirect, dangerouslyAllowLocalIP, maximumResponseBody, count - 1); + } + if (!res.ok) { + _log.error('upstream image response failed for', href, res.status); + throw Object.defineProperty(new ImageError(res.status, '"url" parameter is valid but upstream response is invalid'), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + if (!res.body) { + _log.error('upstream image response is empty for', href); + throw Object.defineProperty(new ImageError(400, '"url" parameter is valid but upstream response is invalid'), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + const chunks = []; + let totalSize = 0; + for await (const c of res.body){ + const chunk = Buffer.from(c); + totalSize += chunk.byteLength; + if (totalSize > maximumResponseBody) { + _log.error('upstream image response exceeded maximum size for', href, totalSize); + throw Object.defineProperty(new ImageError(413, '"url" parameter is valid but upstream response is invalid'), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + chunks.push(chunk); + } + const buffer = Buffer.concat(chunks); + const contentType = res.headers.get('Content-Type'); + const cacheControl = res.headers.get('Cache-Control'); + const etag = extractEtag(res.headers.get('ETag'), buffer); + return { + buffer, + contentType, + cacheControl, + etag + }; +} +async function fetchInternalImage(href, _req, _res, maximumResponseBody, handleRequest) { + try { + // Coerce HEAD to GET to avoid issues with the image optimizer + const method = !_req.method || _req.method === 'HEAD' ? 'GET' : _req.method; + const mocked = (0, _mockrequest.createRequestResponseMocks)({ + url: href, + method, + socket: _req.socket, + maximumResponseBody + }); + await handleRequest(mocked.req, mocked.res, _url.default.parse(href, true)); + await mocked.res.hasStreamed; + if (!mocked.res.statusCode) { + _log.error('image response failed for', href, mocked.res.statusCode); + throw Object.defineProperty(new ImageError(mocked.res.statusCode, '"url" parameter is valid but internal response is invalid'), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + if (mocked.res.buffers.length === 0) { + _log.error('internal image response is empty for', href); + throw Object.defineProperty(new ImageError(400, '"url" parameter is valid but internal response is invalid'), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + const buffer = Buffer.concat(mocked.res.buffers); + const contentType = mocked.res.getHeader('Content-Type'); + const cacheControl = mocked.res.getHeader('Cache-Control'); + const etag = extractEtag(mocked.res.getHeader('ETag'), buffer); + return { + buffer, + contentType, + cacheControl, + etag + }; + } catch (err) { + if (err instanceof ImageError) { + throw err; + } + if (err && typeof err === 'object' && 'code' in err && err.code === 'ERR_MAX_BODY_SIZE_EXCEEDED') { + _log.error('internal image response exceeded maximum size for', href); + throw Object.defineProperty(new ImageError(413, '"url" parameter is valid but internal response is invalid'), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + _log.error('upstream image response failed for', href, err); + throw Object.defineProperty(new ImageError(500, '"url" parameter is valid but upstream response is invalid'), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } +} +async function imageOptimizer(imageUpstream, paramsResult, nextConfig, opts) { + const { href, quality, width, mimeType } = paramsResult; + const { buffer: upstreamBuffer, etag: upstreamEtag } = imageUpstream; + const maxAge = Math.max(nextConfig.images.minimumCacheTTL, getMaxAge(imageUpstream.cacheControl)); + const upstreamType = await detectContentType(upstreamBuffer, nextConfig.experimental.imgOptSkipMetadata, nextConfig.experimental.imgOptConcurrency); + if (!upstreamType || !upstreamType.startsWith('image/') || upstreamType.includes(',')) { + if (!opts.silent) { + _log.error("The requested resource isn't a valid image for", href, 'received', upstreamType); + } + throw Object.defineProperty(new ImageError(400, "The requested resource isn't a valid image."), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + if (upstreamType.startsWith('image/svg') && !nextConfig.images.dangerouslyAllowSVG) { + if (!opts.silent) { + _log.error(`The requested resource "${href}" has type "${upstreamType}" but dangerouslyAllowSVG is disabled. Consider adding the "unoptimized" property to the .`); + } + throw Object.defineProperty(new ImageError(400, '"url" parameter is valid but image type is not allowed'), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + if (ANIMATABLE_TYPES.includes(upstreamType) && (0, _isanimated.default)(upstreamBuffer)) { + if (!opts.silent) { + _log.warnOnce(`The requested resource "${href}" is an animated image so it will not be optimized. Consider adding the "unoptimized" property to the .`); + } + return { + buffer: upstreamBuffer, + contentType: upstreamType, + maxAge, + etag: upstreamEtag, + upstreamEtag + }; + } + if (BYPASS_TYPES.includes(upstreamType)) { + return { + buffer: upstreamBuffer, + contentType: upstreamType, + maxAge, + etag: upstreamEtag, + upstreamEtag + }; + } + let contentType; + if (mimeType) { + contentType = mimeType; + } else if ((0, _servestatic.getExtension)(upstreamType) && upstreamType !== WEBP && upstreamType !== AVIF) { + contentType = upstreamType; + } else { + contentType = JPEG; + } + const previouslyCachedImage = getPreviouslyCachedImageOrNull(imageUpstream, opts.previousCacheEntry); + if (previouslyCachedImage) { + var _opts_previousCacheEntry_cacheControl, _opts_previousCacheEntry; + return { + buffer: previouslyCachedImage.buffer, + contentType, + maxAge: (opts == null ? void 0 : (_opts_previousCacheEntry = opts.previousCacheEntry) == null ? void 0 : (_opts_previousCacheEntry_cacheControl = _opts_previousCacheEntry.cacheControl) == null ? void 0 : _opts_previousCacheEntry_cacheControl.revalidate) || maxAge, + etag: previouslyCachedImage.etag, + upstreamEtag: previouslyCachedImage.upstreamEtag + }; + } + try { + let optimizedBuffer = await optimizeImage({ + buffer: upstreamBuffer, + contentType, + quality, + width, + concurrency: nextConfig.experimental.imgOptConcurrency, + limitInputPixels: nextConfig.experimental.imgOptMaxInputPixels, + sequentialRead: nextConfig.experimental.imgOptSequentialRead, + timeoutInSeconds: nextConfig.experimental.imgOptTimeoutInSeconds + }); + if (opts.isDev && width <= BLUR_IMG_SIZE && quality === BLUR_QUALITY) { + // During `next dev`, we don't want to generate blur placeholders with webpack + // because it can delay starting the dev server. Instead, `next-image-loader.js` + // will inline a special url to lazily generate the blur placeholder at request time. + const meta = await getImageSize(optimizedBuffer); + const blurOpts = { + blurWidth: meta.width, + blurHeight: meta.height, + blurDataURL: `data:${contentType};base64,${optimizedBuffer.toString('base64')}` + }; + optimizedBuffer = Buffer.from(unescape((0, _imageblursvg.getImageBlurSvg)(blurOpts))); + contentType = 'image/svg+xml'; + } + return { + buffer: optimizedBuffer, + contentType, + maxAge, + etag: getImageEtag(optimizedBuffer), + upstreamEtag + }; + } catch (error) { + if (upstreamType) { + // If we fail to optimize, fallback to the original image + return { + buffer: upstreamBuffer, + contentType: upstreamType, + maxAge: nextConfig.images.minimumCacheTTL, + etag: upstreamEtag, + upstreamEtag, + error + }; + } else { + throw Object.defineProperty(new ImageError(400, 'Unable to optimize image and unable to fallback to upstream image'), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + } +} +function getFileNameWithExtension(url, contentType) { + const [urlWithoutQueryParams] = url.split('?', 1); + const fileNameWithExtension = urlWithoutQueryParams.split('/').pop(); + if (!contentType || !fileNameWithExtension) { + return 'image.bin'; + } + const [fileName] = fileNameWithExtension.split('.', 1); + const extension = (0, _servestatic.getExtension)(contentType); + return `${fileName}.${extension}`; +} +function setResponseHeaders(req, res, url, etag, contentType, isStatic, xCache, imagesConfig, maxAge, isDev) { + res.setHeader('Vary', 'Accept'); + res.setHeader('Cache-Control', isStatic ? 'public, max-age=315360000, immutable' : `public, max-age=${isDev ? 0 : maxAge}, must-revalidate`); + if ((0, _sendpayload.sendEtagResponse)(req, res, etag)) { + // already called res.end() so we're finished + return { + finished: true + }; + } + if (contentType) { + res.setHeader('Content-Type', contentType); + } + const fileName = getFileNameWithExtension(url, contentType); + res.setHeader('Content-Disposition', (0, _contentdisposition.default)(fileName, { + type: imagesConfig.contentDispositionType + })); + res.setHeader('Content-Security-Policy', imagesConfig.contentSecurityPolicy); + res.setHeader('X-Nextjs-Cache', xCache); + return { + finished: false + }; +} +function sendResponse(req, res, url, extension, buffer, etag, isStatic, xCache, imagesConfig, maxAge, isDev) { + const contentType = (0, _servestatic.getContentType)(extension); + const result = setResponseHeaders(req, res, url, etag, contentType, isStatic, xCache, imagesConfig, maxAge, isDev); + if (!result.finished) { + res.setHeader('Content-Length', Buffer.byteLength(buffer)); + // A response body must not be sent for HEAD requests + if (req.method === 'HEAD') { + res.end(); + } else { + res.end(buffer); + } + } +} +async function getImageSize(buffer) { + const { width, height } = (0, _imagesize.default)(buffer); + return { + width, + height + }; +} + +//# sourceMappingURL=image-optimizer.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/instrumentation/types.js b/build/node_modules/next/dist/server/instrumentation/types.js new file mode 100644 index 0000000..f89b9cc --- /dev/null +++ b/build/node_modules/next/dist/server/instrumentation/types.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/instrumentation/utils.js b/build/node_modules/next/dist/server/instrumentation/utils.js new file mode 100644 index 0000000..a076822 --- /dev/null +++ b/build/node_modules/next/dist/server/instrumentation/utils.js @@ -0,0 +1,21 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getRevalidateReason", { + enumerable: true, + get: function() { + return getRevalidateReason; + } +}); +function getRevalidateReason(params) { + if (params.isOnDemandRevalidate) { + return 'on-demand'; + } + if (params.isStaticGeneration) { + return 'stale'; + } + return undefined; +} + +//# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/internal-utils.js b/build/node_modules/next/dist/server/internal-utils.js new file mode 100644 index 0000000..c5ae3ba --- /dev/null +++ b/build/node_modules/next/dist/server/internal-utils.js @@ -0,0 +1,39 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + stripInternalQueries: null, + stripInternalSearchParams: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + stripInternalQueries: function() { + return stripInternalQueries; + }, + stripInternalSearchParams: function() { + return stripInternalSearchParams; + } +}); +const _approuterheaders = require("../client/components/app-router-headers"); +const INTERNAL_QUERY_NAMES = [ + _approuterheaders.NEXT_RSC_UNION_QUERY +]; +function stripInternalQueries(query) { + for (const name of INTERNAL_QUERY_NAMES){ + delete query[name]; + } +} +function stripInternalSearchParams(url) { + const isStringUrl = typeof url === 'string'; + const instance = isStringUrl ? new URL(url) : url; + instance.searchParams.delete(_approuterheaders.NEXT_RSC_UNION_QUERY); + return isStringUrl ? instance.toString() : instance; +} + +//# sourceMappingURL=internal-utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/is-private-ip.js b/build/node_modules/next/dist/server/is-private-ip.js new file mode 100644 index 0000000..0cc0d76 --- /dev/null +++ b/build/node_modules/next/dist/server/is-private-ip.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "isPrivateIp", { + enumerable: true, + get: function() { + return isPrivateIp; + } +}); +const _ipaddr = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/ipaddr.js")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function isPrivateIp(ip) { + if (ip.startsWith('[') && ip.endsWith(']')) { + ip = ip.slice(1, -1); + } + if (!_ipaddr.default.isValid(ip)) { + return false; + } + try { + let addr = _ipaddr.default.parse(ip); + if (addr.kind() === 'ipv6' && addr.isIPv4MappedAddress()) { + addr = addr.toIPv4Address(); + } + const range = addr.range(); + return range !== 'unicast'; + } catch (e) { + return false; + } +} + +//# sourceMappingURL=is-private-ip.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/app-dir-module.js b/build/node_modules/next/dist/server/lib/app-dir-module.js new file mode 100644 index 0000000..7fadeba --- /dev/null +++ b/build/node_modules/next/dist/server/lib/app-dir-module.js @@ -0,0 +1,59 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getComponentTypeModule: null, + getLayoutOrPageModule: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getComponentTypeModule: function() { + return getComponentTypeModule; + }, + getLayoutOrPageModule: function() { + return getLayoutOrPageModule; + } +}); +const _segment = require("../../shared/lib/segment"); +async function getLayoutOrPageModule(loaderTree) { + const { layout, page, defaultPage } = loaderTree[2]; + const isLayout = typeof layout !== 'undefined'; + const isPage = typeof page !== 'undefined'; + const isDefaultPage = typeof defaultPage !== 'undefined' && loaderTree[0] === _segment.DEFAULT_SEGMENT_KEY; + let mod = undefined; + let modType = undefined; + let filePath = undefined; + if (isLayout) { + mod = await layout[0](); + modType = 'layout'; + filePath = layout[1]; + } else if (isPage) { + mod = await page[0](); + modType = 'page'; + filePath = page[1]; + } else if (isDefaultPage) { + mod = await defaultPage[0](); + modType = 'page'; + filePath = defaultPage[1]; + } + return { + mod, + modType, + filePath + }; +} +async function getComponentTypeModule(loaderTree, moduleType) { + const { [moduleType]: module1 } = loaderTree[2]; + if (typeof module1 !== 'undefined') { + return await module1[0](); + } + return undefined; +} + +//# sourceMappingURL=app-dir-module.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/app-info-log.js b/build/node_modules/next/dist/server/lib/app-info-log.js new file mode 100644 index 0000000..1877ed3 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/app-info-log.js @@ -0,0 +1,132 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getEnvInfo: null, + logExperimentalInfo: null, + logStartInfo: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getEnvInfo: function() { + return getEnvInfo; + }, + logExperimentalInfo: function() { + return logExperimentalInfo; + }, + logStartInfo: function() { + return logStartInfo; + } +}); +const _env = require("@next/env"); +const _inspector = /*#__PURE__*/ _interop_require_wildcard(require("inspector")); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("../../build/output/log")); +const _picocolors = require("../../lib/picocolors"); +const _configschema = require("../config-schema"); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +function logStartInfo({ networkUrl, appUrl, envInfo, logBundler }) { + let versionSuffix = ''; + const parts = []; + if (logBundler) { + if (process.env.TURBOPACK) { + parts.push('Turbopack'); + } else if (process.env.NEXT_RSPACK) { + parts.push('Rspack'); + } else { + parts.push('webpack'); + } + } + if (parts.length > 0) { + versionSuffix = ` (${parts.join(', ')})`; + } + _log.bootstrap(`${(0, _picocolors.bold)((0, _picocolors.purple)(`${_log.prefixes.ready} Next.js ${"16.2.6"}`))}${versionSuffix}`); + if (appUrl) { + _log.bootstrap(`- Local: ${appUrl}`); + } + if (networkUrl) { + _log.bootstrap(`- Network: ${networkUrl}`); + } + const inspectorUrl = _inspector.url(); + if (inspectorUrl) { + // Could also parse this port from the inspector URL. + // process.debugPort will always be defined even if the process is not being inspected. + // The full URL seems noisy as far as I can tell. + // Node.js will print the full URL anyway. + const debugPort = process.debugPort; + _log.bootstrap(`- Debugger port: ${debugPort}`); + } + if (envInfo == null ? void 0 : envInfo.length) _log.bootstrap(`- Environments: ${envInfo.join(', ')}`); +} +function logExperimentalInfo({ experimentalFeatures, cacheComponents }) { + if (cacheComponents) { + _log.bootstrap(`- Cache Components enabled`); + } + if (experimentalFeatures == null ? void 0 : experimentalFeatures.length) { + _log.bootstrap(`- Experiments (use with caution):`); + for (const exp of experimentalFeatures){ + const isValid = Object.prototype.hasOwnProperty.call(_configschema.experimentalSchema, exp.key); + if (isValid) { + const symbol = typeof exp.value === 'boolean' ? exp.value === true ? (0, _picocolors.bold)('✓') : (0, _picocolors.bold)('⨯') : '·'; + const suffix = typeof exp.value === 'number' || typeof exp.value === 'string' ? `: ${JSON.stringify(exp.value)}` : ''; + const reason = exp.reason ? ` (${exp.reason})` : ''; + _log.bootstrap(` ${symbol} ${exp.key}${suffix}${reason}`); + } else { + _log.bootstrap(` ? ${(0, _picocolors.strikethrough)(exp.key)} (invalid experimental key)`); + } + } + } + // New line after the bootstrap info + _log.info(''); +} +function getEnvInfo(dir) { + const { loadedEnvFiles } = (0, _env.loadEnvConfig)(dir, true, console, false); + return loadedEnvFiles.map((f)=>f.path); +} + +//# sourceMappingURL=app-info-log.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/async-callback-set.js b/build/node_modules/next/dist/server/lib/async-callback-set.js new file mode 100644 index 0000000..b6a35e5 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/async-callback-set.js @@ -0,0 +1,29 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "AsyncCallbackSet", { + enumerable: true, + get: function() { + return AsyncCallbackSet; + } +}); +class AsyncCallbackSet { + add(callback) { + this.callbacks.push(callback); + } + async runAll() { + if (!this.callbacks.length) { + return; + } + const callbacks = this.callbacks; + this.callbacks = []; + await Promise.allSettled(callbacks.map(// NOTE: wrapped in an async function to protect against synchronous exceptions + async (f)=>f())); + } + constructor(){ + this.callbacks = []; + } +} + +//# sourceMappingURL=async-callback-set.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/cache-control.js b/build/node_modules/next/dist/server/lib/cache-control.js new file mode 100644 index 0000000..506a8b9 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/cache-control.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getCacheControlHeader", { + enumerable: true, + get: function() { + return getCacheControlHeader; + } +}); +const _constants = require("../../lib/constants"); +function getCacheControlHeader({ revalidate, expire }) { + const swrHeader = typeof revalidate === 'number' && expire !== undefined && revalidate < expire ? `, stale-while-revalidate=${expire - revalidate}` : ''; + if (revalidate === 0) { + return 'private, no-cache, no-store, max-age=0, must-revalidate'; + } else if (typeof revalidate === 'number') { + return `s-maxage=${revalidate}${swrHeader}`; + } + return `s-maxage=${_constants.CACHE_ONE_YEAR_SECONDS}${swrHeader}`; +} + +//# sourceMappingURL=cache-control.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/cache-handlers/default.external.js b/build/node_modules/next/dist/server/lib/cache-handlers/default.external.js new file mode 100644 index 0000000..1021c55 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/cache-handlers/default.external.js @@ -0,0 +1,18 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, /** + * Used for edge runtime compatibility. + * + * @deprecated Use createDefaultCacheHandler instead. + */ "default", { + enumerable: true, + get: function() { + return _default1; + } +}); +const _default = require("./default"); +const _default1 = (0, _default.createDefaultCacheHandler)(50 * 1024 * 1024); + +//# sourceMappingURL=default.external.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/cache-handlers/default.js b/build/node_modules/next/dist/server/lib/cache-handlers/default.js new file mode 100644 index 0000000..3a15a22 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/cache-handlers/default.js @@ -0,0 +1,160 @@ +/** + * This is the default "use cache" handler it defaults to an in-memory store. + * In-memory caches are fragile and should not use stale-while-revalidate + * semantics on the caches because it's not worth warming up an entry that's + * likely going to get evicted before we get to use it anyway. However, we also + * don't want to reuse a stale entry for too long so stale entries should be + * considered expired/missing in such cache handlers. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "createDefaultCacheHandler", { + enumerable: true, + get: function() { + return createDefaultCacheHandler; + } +}); +const _lrucache = require("../lru-cache"); +const _tagsmanifestexternal = require("../incremental-cache/tags-manifest.external"); +function createDefaultCacheHandler(maxSize) { + // If the max size is 0, return a cache handler that doesn't cache anything, + // this avoids an unnecessary LRUCache instance and potential memory + // allocation. + if (maxSize === 0) { + return { + get: ()=>Promise.resolve(undefined), + set: ()=>Promise.resolve(), + refreshTags: ()=>Promise.resolve(), + getExpiration: ()=>Promise.resolve(0), + updateTags: ()=>Promise.resolve() + }; + } + const memoryCache = new _lrucache.LRUCache(maxSize, (entry)=>entry.size); + const pendingSets = new Map(); + const debug = process.env.NEXT_PRIVATE_DEBUG_CACHE ? console.debug.bind(console, 'DefaultCacheHandler:') : undefined; + return { + async get (cacheKey) { + const pendingPromise = pendingSets.get(cacheKey); + if (pendingPromise) { + debug == null ? void 0 : debug('get', cacheKey, 'pending'); + await pendingPromise; + } + const privateEntry = memoryCache.get(cacheKey); + if (!privateEntry) { + debug == null ? void 0 : debug('get', cacheKey, 'not found'); + return undefined; + } + const entry = privateEntry.entry; + if (performance.timeOrigin + performance.now() > entry.timestamp + entry.revalidate * 1000) { + // In-memory caches should expire after revalidate time because it is + // unlikely that a new entry will be able to be used before it is dropped + // from the cache. + debug == null ? void 0 : debug('get', cacheKey, 'expired'); + return undefined; + } + let revalidate = entry.revalidate; + if ((0, _tagsmanifestexternal.areTagsExpired)(entry.tags, entry.timestamp)) { + debug == null ? void 0 : debug('get', cacheKey, 'had expired tag'); + return undefined; + } + if ((0, _tagsmanifestexternal.areTagsStale)(entry.tags, entry.timestamp)) { + debug == null ? void 0 : debug('get', cacheKey, 'had stale tag'); + revalidate = -1; + } + const [returnStream, newSaved] = entry.value.tee(); + entry.value = newSaved; + debug == null ? void 0 : debug('get', cacheKey, 'found', { + tags: entry.tags, + timestamp: entry.timestamp, + expire: entry.expire, + revalidate + }); + return { + ...entry, + revalidate, + value: returnStream + }; + }, + async set (cacheKey, pendingEntry) { + debug == null ? void 0 : debug('set', cacheKey, 'start'); + let resolvePending = ()=>{}; + const pendingPromise = new Promise((resolve)=>{ + resolvePending = resolve; + }); + pendingSets.set(cacheKey, pendingPromise); + const entry = await pendingEntry; + let size = 0; + try { + const [value, clonedValue] = entry.value.tee(); + entry.value = value; + const reader = clonedValue.getReader(); + for(let chunk; !(chunk = await reader.read()).done;){ + size += Buffer.from(chunk.value).byteLength; + } + memoryCache.set(cacheKey, { + entry, + isErrored: false, + errorRetryCount: 0, + size + }); + debug == null ? void 0 : debug('set', cacheKey, 'done'); + } catch (err) { + // TODO: store partial buffer with error after we retry 3 times + debug == null ? void 0 : debug('set', cacheKey, 'failed', err); + } finally{ + resolvePending(); + pendingSets.delete(cacheKey); + } + }, + async refreshTags () { + // Nothing to do for an in-memory cache handler. + }, + async getExpiration (tags) { + const expirations = tags.map((tag)=>{ + const entry = _tagsmanifestexternal.tagsManifest.get(tag); + if (!entry) return 0; + // Return the most recent timestamp (either expired or stale) + return entry.expired || 0; + }); + const expiration = Math.max(...expirations, 0); + debug == null ? void 0 : debug('getExpiration', { + tags, + expiration + }); + return expiration; + }, + async updateTags (tags, durations) { + const now = Math.round(performance.timeOrigin + performance.now()); + debug == null ? void 0 : debug('updateTags', { + tags, + timestamp: now + }); + for (const tag of tags){ + // TODO: update file-system-cache? + const existingEntry = _tagsmanifestexternal.tagsManifest.get(tag) || {}; + if (durations) { + // Use provided durations directly + const updates = { + ...existingEntry + }; + // mark as stale immediately + updates.stale = now; + if (durations.expire !== undefined) { + updates.expired = now + durations.expire * 1000 // Convert seconds to ms + ; + } + _tagsmanifestexternal.tagsManifest.set(tag, updates); + } else { + // Update expired field for immediate expiration (default behavior when no durations provided) + _tagsmanifestexternal.tagsManifest.set(tag, { + ...existingEntry, + expired: now + }); + } + } + } + }; +} + +//# sourceMappingURL=default.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/cache-handlers/types.js b/build/node_modules/next/dist/server/lib/cache-handlers/types.js new file mode 100644 index 0000000..4705036 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/cache-handlers/types.js @@ -0,0 +1,8 @@ +/** + * A timestamp in milliseconds elapsed since the epoch + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/chrome-devtools-workspace.js b/build/node_modules/next/dist/server/lib/chrome-devtools-workspace.js new file mode 100644 index 0000000..7051977 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/chrome-devtools-workspace.js @@ -0,0 +1,116 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + handleChromeDevtoolsWorkspaceRequest: null, + isChromeDevtoolsWorkspaceUrl: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + handleChromeDevtoolsWorkspaceRequest: function() { + return handleChromeDevtoolsWorkspaceRequest; + }, + isChromeDevtoolsWorkspaceUrl: function() { + return isChromeDevtoolsWorkspaceUrl; + } +}); +const _crypto = require("crypto"); +const _fs = /*#__PURE__*/ _interop_require_wildcard(require("fs")); +const _path = /*#__PURE__*/ _interop_require_wildcard(require("path")); +const _cachedir = require("../cache-dir"); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +// Keep the uuid in memory as it should never change during the lifetime of the server. +let workspaceUUID = null; +function isChromeDevtoolsWorkspaceUrl(pathname) { + return pathname === '/.well-known/appspecific/com.chrome.devtools.json'; +} +async function handleChromeDevtoolsWorkspaceRequest(response, opts, config) { + response.setHeader('Content-Type', 'application/json'); + response.end(JSON.stringify(await getChromeDevtoolsWorkspace(opts.dir, config.distDir), null, 2)); +} +/** + * For https://developer.chrome.com/docs/devtools/workspaces + */ async function getChromeDevtoolsWorkspace(root, configDistDir) { + if (workspaceUUID === null) { + const distDir = _path.join(root, configDistDir); + const cacheBaseDir = (0, _cachedir.getStorageDirectory)(distDir); + if (cacheBaseDir === undefined) { + workspaceUUID = (0, _crypto.randomUUID)(); + } else { + const cachedUUIDPath = _path.join(cacheBaseDir, 'chrome-devtools-workspace-uuid'); + try { + workspaceUUID = await _fs.promises.readFile(cachedUUIDPath, 'utf8'); + } catch { + // TODO: Why does this need to be v4 and not v5? + // With v5 we could base it off of the `distDir` and `root` which would + // allow us to persist the workspace across .next wipes. + workspaceUUID = (0, _crypto.randomUUID)(); + try { + await _fs.promises.writeFile(cachedUUIDPath, workspaceUUID, 'utf8'); + } catch (cause) { + console.warn(Object.defineProperty(new Error('Failed to persist Chrome DevTools workspace UUID. The Chrome DevTools Workspace needs to be reconnected after the next page reload.', { + cause + }), "__NEXT_ERROR_CODE", { + value: "E708", + enumerable: false, + configurable: true + })); + } + } + } + } + return { + workspace: { + uuid: workspaceUUID, + root + } + }; +} + +//# sourceMappingURL=chrome-devtools-workspace.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/clone-response.js b/build/node_modules/next/dist/server/lib/clone-response.js new file mode 100644 index 0000000..e283e88 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/clone-response.js @@ -0,0 +1,77 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "cloneResponse", { + enumerable: true, + get: function() { + return cloneResponse; + } +}); +const noop = ()=>{}; +let registry; +if (globalThis.FinalizationRegistry) { + registry = new FinalizationRegistry((weakRef)=>{ + const stream = weakRef.deref(); + if (stream && !stream.locked) { + stream.cancel('Response object has been garbage collected').then(noop); + } + }); +} +function cloneResponse(original) { + // If the response has no body, then we can just return the original response + // twice because it's immutable. + if (!original.body) { + return [ + original, + original + ]; + } + const [body1, body2] = original.body.tee(); + const cloned1 = new Response(body1, { + status: original.status, + statusText: original.statusText, + headers: original.headers + }); + Object.defineProperty(cloned1, 'url', { + value: original.url, + // How the original response.url behaves + configurable: true, + enumerable: true, + writable: false + }); + const cloned2 = new Response(body2, { + status: original.status, + statusText: original.statusText, + headers: original.headers + }); + Object.defineProperty(cloned2, 'url', { + value: original.url, + // How the original response.url behaves + configurable: true, + enumerable: true, + writable: false + }); + // The Fetch Standard allows users to skip consuming the response body by + // relying on garbage collection to release connection resources. + // https://github.com/nodejs/undici?tab=readme-ov-file#garbage-collection + // + // To cancel the stream you then need to cancel both resulting branches. + // Teeing a stream will generally lock it for the duration, preventing other + // readers from locking it. + // https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream/tee + if (registry) { + if (cloned1.body) { + registry.register(cloned1, new WeakRef(cloned1.body)); + } + if (cloned2.body) { + registry.register(cloned2, new WeakRef(cloned2.body)); + } + } + return [ + cloned1, + cloned2 + ]; +} + +//# sourceMappingURL=clone-response.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/cpu-profile.js b/build/node_modules/next/dist/server/lib/cpu-profile.js new file mode 100644 index 0000000..ae946c9 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/cpu-profile.js @@ -0,0 +1,59 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "saveCpuProfile", { + enumerable: true, + get: function() { + return saveCpuProfile; + } +}); +const privateCpuProfileName = process.env.__NEXT_PRIVATE_CPU_PROFILE; +const isCpuProfileEnabled = process.env.NEXT_CPU_PROF || privateCpuProfileName; +const cpuProfileDir = process.env.NEXT_CPU_PROF_DIR; +let session = null; +let profileSaved = false; +if (isCpuProfileEnabled) { + const { Session } = require('inspector'); + session = new Session(); + session.connect(); + session.post('Profiler.enable'); + session.post('Profiler.start'); + process.on('exit', ()=>{ + saveCpuProfile(); + }); +} +function saveCpuProfile() { + if (!session || profileSaved || !isCpuProfileEnabled) { + return; + } + profileSaved = true; + const fs = require('fs'); + const path = require('path'); + session.post('Profiler.stop', (error, param)=>{ + if (error) { + console.error('Cannot generate CPU profiling:', error); + return; + } + const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19); + const baseName = privateCpuProfileName || 'cpu-profile'; + const filename = `${baseName}-${timestamp}.cpuprofile`; + let outputPath; + if (cpuProfileDir) { + if (!fs.existsSync(cpuProfileDir)) { + fs.mkdirSync(cpuProfileDir, { + recursive: true + }); + } + outputPath = path.join(cpuProfileDir, filename); + } else { + outputPath = `./${filename}`; + } + fs.writeFileSync(outputPath, JSON.stringify(param.profile)); + const { green } = require('../../lib/picocolors'); + console.log(`\n${green('CPU profile saved:')} ${outputPath}`); + console.log('Open in Chrome DevTools → Performance tab → Load profile'); + }); +} + +//# sourceMappingURL=cpu-profile.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/decode-query-path-parameter.js b/build/node_modules/next/dist/server/lib/decode-query-path-parameter.js new file mode 100644 index 0000000..0d3b771 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/decode-query-path-parameter.js @@ -0,0 +1,26 @@ +/** + * Decodes a query path parameter. + * + * @param value - The value to decode. + * @returns The decoded value. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "decodeQueryPathParameter", { + enumerable: true, + get: function() { + return decodeQueryPathParameter; + } +}); +function decodeQueryPathParameter(value) { + // When deployed to Vercel, the value may be encoded, so this attempts to + // decode it and returns the original value if it fails. + try { + return decodeURIComponent(value); + } catch { + return value; + } +} + +//# sourceMappingURL=decode-query-path-parameter.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/dedupe-fetch.js b/build/node_modules/next/dist/server/lib/dedupe-fetch.js new file mode 100644 index 0000000..0392cde --- /dev/null +++ b/build/node_modules/next/dist/server/lib/dedupe-fetch.js @@ -0,0 +1,163 @@ +/** + * Based on https://github.com/facebook/react/blob/d4e78c42a94be027b4dc7ed2659a5fddfbf9bd4e/packages/react/src/ReactFetch.js + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "createDedupeFetch", { + enumerable: true, + get: function() { + return createDedupeFetch; + } +}); +const _react = /*#__PURE__*/ _interop_require_wildcard(require("react")); +const _cloneresponse = require("./clone-response"); +const _invarianterror = require("../../shared/lib/invariant-error"); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +const simpleCacheKey = '["GET",[],null,"follow",null,null,null,null]' // generateCacheKey(new Request('https://blank')); +; +// Headers that should not affect deduplication +// traceparent and tracestate are used for distributed tracing and should not affect cache keys +const headersToExcludeInCacheKey = new Set([ + 'traceparent', + 'tracestate' +]); +function generateCacheKey(request) { + // We pick the fields that goes into the key used to dedupe requests. + // We don't include the `cache` field, because we end up using whatever + // caching resulted from the first request. + // Notably we currently don't consider non-standard (or future) options. + // This might not be safe. TODO: warn for non-standard extensions differing. + // IF YOU CHANGE THIS UPDATE THE simpleCacheKey ABOVE. + const filteredHeaders = Array.from(request.headers.entries()).filter(([key])=>!headersToExcludeInCacheKey.has(key.toLowerCase())); + return JSON.stringify([ + request.method, + filteredHeaders, + request.mode, + request.redirect, + request.credentials, + request.referrer, + request.referrerPolicy, + request.integrity + ]); +} +function createDedupeFetch(originalFetch) { + const getCacheEntries = _react.cache(// eslint-disable-next-line @typescript-eslint/no-unused-vars -- url is the cache key + (url)=>[]); + return function dedupeFetch(resource, options) { + if (options && options.signal) { + // If we're passed a signal, then we assume that + // someone else controls the lifetime of this object and opts out of + // caching. It's effectively the opt-out mechanism. + // Ideally we should be able to check this on the Request but + // it always gets initialized with its own signal so we don't + // know if it's supposed to override - unless we also override the + // Request constructor. + return originalFetch(resource, options); + } + // Normalize the Request + let url; + let cacheKey; + if (typeof resource === 'string' && !options) { + // Fast path. + cacheKey = simpleCacheKey; + url = resource; + } else { + // Normalize the request. + // if resource is not a string or a URL (its an instance of Request) + // then do not instantiate a new Request but instead + // reuse the request as to not disturb the body in the event it's a ReadableStream. + const request = typeof resource === 'string' || resource instanceof URL ? new Request(resource, options) : resource; + if (request.method !== 'GET' && request.method !== 'HEAD' || request.keepalive) { + // We currently don't dedupe requests that might have side-effects. Those + // have to be explicitly cached. We assume that the request doesn't have a + // body if it's GET or HEAD. + // keepalive gets treated the same as if you passed a custom cache signal. + return originalFetch(resource, options); + } + cacheKey = generateCacheKey(request); + url = request.url; + } + const cacheEntries = getCacheEntries(url); + for(let i = 0, j = cacheEntries.length; i < j; i += 1){ + const [key, promise] = cacheEntries[i]; + if (key === cacheKey) { + return promise.then(()=>{ + const response = cacheEntries[i][2]; + if (!response) throw Object.defineProperty(new _invarianterror.InvariantError('No cached response'), "__NEXT_ERROR_CODE", { + value: "E579", + enumerable: false, + configurable: true + }); + // We're cloning the response using this utility because there exists + // a bug in the undici library around response cloning. See the + // following pull request for more details: + // https://github.com/vercel/next.js/pull/73274 + const [cloned1, cloned2] = (0, _cloneresponse.cloneResponse)(response); + cacheEntries[i][2] = cloned2; + return cloned1; + }); + } + } + // We pass the original arguments here in case normalizing the Request + // doesn't include all the options in this environment. + const promise = originalFetch(resource, options); + const entry = [ + cacheKey, + promise, + null + ]; + cacheEntries.push(entry); + return promise.then((response)=>{ + // We're cloning the response using this utility because there exists + // a bug in the undici library around response cloning. See the + // following pull request for more details: + // https://github.com/vercel/next.js/pull/73274 + const [cloned1, cloned2] = (0, _cloneresponse.cloneResponse)(response); + entry[2] = cloned2; + return cloned1; + }); + }; +} + +//# sourceMappingURL=dedupe-fetch.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/dev-bundler-service.js b/build/node_modules/next/dist/server/lib/dev-bundler-service.js new file mode 100644 index 0000000..378eba3 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/dev-bundler-service.js @@ -0,0 +1,95 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "DevBundlerService", { + enumerable: true, + get: function() { + return DevBundlerService; + } +}); +const _lrucache = require("./lru-cache"); +const _mockrequest = require("./mock-request"); +const _hotreloadertypes = require("../dev/hot-reloader-types"); +class DevBundlerService { + constructor(bundler, handler){ + this.bundler = bundler; + this.handler = handler; + this.ensurePage = async (definition)=>{ + // TODO: remove after ensure is pulled out of server + return await this.bundler.hotReloader.ensurePage(definition); + }; + this.logErrorWithOriginalStack = this.bundler.logErrorWithOriginalStack.bind(this.bundler); + this.appIsrManifestInner = new _lrucache.LRUCache(8000, function length() { + return 16; + }); + const { hotReloader } = bundler; + this.close = hotReloader.close.bind(hotReloader); + this.setCacheStatus = hotReloader.setCacheStatus.bind(hotReloader); + this.setReactDebugChannel = hotReloader.setReactDebugChannel.bind(hotReloader); + this.sendErrorsToBrowser = hotReloader.sendErrorsToBrowser.bind(hotReloader); + } + async getFallbackErrorComponents(url) { + await this.bundler.hotReloader.buildFallbackError(); + // Build the error page to ensure the fallback is built too. + // TODO: See if this can be moved into hotReloader or removed. + await this.bundler.hotReloader.ensurePage({ + page: '/_error', + clientOnly: false, + definition: undefined, + url + }); + } + async getCompilationError(page) { + const errors = await this.bundler.hotReloader.getCompilationErrors(page); + if (!errors) return; + // Return the very first error we found. + return errors[0]; + } + async revalidate({ urlPath, headers, opts: revalidateOpts }) { + const mocked = (0, _mockrequest.createRequestResponseMocks)({ + url: urlPath, + headers + }); + await this.handler(mocked.req, mocked.res); + await mocked.res.hasStreamed; + if (mocked.res.getHeader('x-nextjs-cache') !== 'REVALIDATED' && mocked.res.statusCode !== 200 && !(mocked.res.statusCode === 404 && revalidateOpts.unstable_onlyGenerated)) { + throw Object.defineProperty(new Error(`Invalid response ${mocked.res.statusCode}`), "__NEXT_ERROR_CODE", { + value: "E175", + enumerable: false, + configurable: true + }); + } + return {}; + } + get appIsrManifest() { + const serializableManifest = {}; + for (const [key, value] of this.appIsrManifestInner){ + serializableManifest[key] = value; + } + return serializableManifest; + } + setIsrStatus(key, value) { + var // Only send the ISR manifest to legacy clients, i.e. Pages Router clients, + // or App Router clients that have Cache Components disabled. The ISR + // manifest is only used to inform the static indicator, which currently + // does not provide useful information if Cache Components is enabled due to + // its binary nature (i.e. it does not support showing info for partially + // static pages). + _this_bundler_hotReloader, _this_bundler; + if (value === undefined) { + this.appIsrManifestInner.remove(key); + } else { + this.appIsrManifestInner.set(key, value); + } + (_this_bundler = this.bundler) == null ? void 0 : (_this_bundler_hotReloader = _this_bundler.hotReloader) == null ? void 0 : _this_bundler_hotReloader.sendToLegacyClients({ + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.ISR_MANIFEST, + data: this.appIsrManifest + }); + } + sendHmrMessage(message) { + this.bundler.hotReloader.send(message); + } +} + +//# sourceMappingURL=dev-bundler-service.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/disk-lru-cache.external.js b/build/node_modules/next/dist/server/lib/disk-lru-cache.external.js new file mode 100644 index 0000000..fde1ef9 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/disk-lru-cache.external.js @@ -0,0 +1,57 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getOrInitDiskLRU: null, + resetDiskLRU: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getOrInitDiskLRU: function() { + return getOrInitDiskLRU; + }, + resetDiskLRU: function() { + return resetDiskLRU; + } +}); +const _fs = require("fs"); +const _lrucache = require("./lru-cache"); +/** + * Module-level LRU singleton for disk cache eviction. + * Initialized once on first `set()`, shared across all consumers. + * Once resolved, the promise stays resolved — subsequent calls just await the cached result. + */ let _diskLRUPromise = null; +async function getOrInitDiskLRU(cacheDir, maxDiskSize, readEntries, evictEntry) { + if (!_diskLRUPromise) { + _diskLRUPromise = (async ()=>{ + let maxSize = maxDiskSize; + if (typeof maxSize === 'undefined') { + // Ensure cacheDir exists before checking disk space + await _fs.promises.mkdir(cacheDir, { + recursive: true + }); + // Since config was not provided, default to 50% of available disk space + const { bavail, bsize } = await _fs.promises.statfs(cacheDir); + maxSize = Math.floor(bavail * bsize / 2); + } + const lru = new _lrucache.LRUCache(maxSize, (size)=>size, (cacheKey)=>evictEntry(cacheDir, cacheKey)); + const entries = await readEntries(cacheDir); + for (const entry of entries){ + lru.set(entry.key, entry.size); + } + return lru; + })(); + } + return _diskLRUPromise; +} +function resetDiskLRU() { + _diskLRUPromise = null; +} + +//# sourceMappingURL=disk-lru-cache.external.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/etag.js b/build/node_modules/next/dist/server/lib/etag.js new file mode 100644 index 0000000..2361133 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/etag.js @@ -0,0 +1,56 @@ +/** + * FNV-1a Hash implementation + * @author Travis Webb (tjwebb) + * + * Ported from https://github.com/tjwebb/fnv-plus/blob/master/index.js + * + * Simplified, optimized and add modified for 52 bit, which provides a larger hash space + * and still making use of Javascript's 53-bit integer space. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + fnv1a52: null, + generateETag: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + fnv1a52: function() { + return fnv1a52; + }, + generateETag: function() { + return generateETag; + } +}); +const fnv1a52 = (str)=>{ + const len = str.length; + let i = 0, t0 = 0, v0 = 0x2325, t1 = 0, v1 = 0x8422, t2 = 0, v2 = 0x9ce4, t3 = 0, v3 = 0xcbf2; + while(i < len){ + v0 ^= str.charCodeAt(i++); + t0 = v0 * 435; + t1 = v1 * 435; + t2 = v2 * 435; + t3 = v3 * 435; + t2 += v0 << 8; + t3 += v1 << 8; + t1 += t0 >>> 16; + v0 = t0 & 65535; + t2 += t1 >>> 16; + v1 = t1 & 65535; + v3 = t3 + (t2 >>> 16) & 65535; + v2 = t2 & 65535; + } + return (v3 & 15) * 281474976710656 + v2 * 4294967296 + v1 * 65536 + (v0 ^ v3 >> 4); +}; +const generateETag = (payload, weak = false)=>{ + const prefix = weak ? 'W/"' : '"'; + return prefix + fnv1a52(payload).toString(36) + payload.length.toString(36) + '"'; +}; + +//# sourceMappingURL=etag.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/experimental/create-env-definitions.js b/build/node_modules/next/dist/server/lib/experimental/create-env-definitions.js new file mode 100644 index 0000000..9477f54 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/experimental/create-env-definitions.js @@ -0,0 +1,48 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "createEnvDefinitions", { + enumerable: true, + get: function() { + return createEnvDefinitions; + } +}); +const _nodepath = require("node:path"); +const _promises = require("node:fs/promises"); +async function createEnvDefinitions({ distDir, loadedEnvFiles }) { + const envLines = []; + const seenKeys = new Set(); + // env files are in order of priority + for (const { path, env } of loadedEnvFiles){ + for(const key in env){ + if (!seenKeys.has(key)) { + envLines.push(` /** Loaded from \`${path}\` */`); + envLines.push(` ${key}?: string`); + seenKeys.add(key); + } + } + } + const envStr = envLines.join('\n'); + const definitionStr = `// Type definitions for Next.js environment variables +declare global { + namespace NodeJS { + interface ProcessEnv { +${envStr} + } + } +} +export {}`; + if (process.env.NODE_ENV === 'test') { + return definitionStr; + } + try { + // we expect the types directory to already exist + const envDtsPath = (0, _nodepath.join)(distDir, 'types', 'env.d.ts'); + await (0, _promises.writeFile)(envDtsPath, definitionStr, 'utf-8'); + } catch (e) { + console.error('Failed to write env.d.ts:', e); + } +} + +//# sourceMappingURL=create-env-definitions.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/experimental/ppr.js b/build/node_modules/next/dist/server/lib/experimental/ppr.js new file mode 100644 index 0000000..841a196 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/experimental/ppr.js @@ -0,0 +1,47 @@ +/** + * If set to `incremental`, only those leaf pages that export + * `experimental_ppr = true` will have partial prerendering enabled. If any + * page exports this value as `false` or does not export it at all will not + * have partial prerendering enabled. If set to a boolean, the options for + * `experimental_ppr` will be ignored. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + checkIsAppPPREnabled: null, + checkIsRoutePPREnabled: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + checkIsAppPPREnabled: function() { + return checkIsAppPPREnabled; + }, + checkIsRoutePPREnabled: function() { + return checkIsRoutePPREnabled; + } +}); +function checkIsAppPPREnabled(config) { + // If the config is undefined, partial prerendering is disabled. + if (typeof config === 'undefined') return false; + // If the config is a boolean, use it directly. + if (typeof config === 'boolean') return config; + // If the config is a string, it must be 'incremental' to enable partial + // prerendering. + if (config === 'incremental') return true; + return false; +} +function checkIsRoutePPREnabled(config) { + // If the config is undefined, partial prerendering is disabled. + if (typeof config === 'undefined') return false; + // If the config is a boolean, use it directly. + if (typeof config === 'boolean') return config; + return false; +} + +//# sourceMappingURL=ppr.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/find-page-file.js b/build/node_modules/next/dist/server/lib/find-page-file.js new file mode 100644 index 0000000..466e542 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/find-page-file.js @@ -0,0 +1,147 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createValidFileMatcher: null, + findPageFile: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createValidFileMatcher: function() { + return createValidFileMatcher; + }, + findPageFile: function() { + return findPageFile; + } +}); +const _fileexists = require("../../lib/file-exists"); +const _getpagepaths = require("../../shared/lib/page-path/get-page-paths"); +const _nonnullable = require("../../lib/non-nullable"); +const _path = require("path"); +const _fs = require("fs"); +const _log = require("../../build/output/log"); +const _picocolors = require("../../lib/picocolors"); +const _ismetadataroute = require("../../lib/metadata/is-metadata-route"); +const _escaperegexp = require("../../shared/lib/escape-regexp"); +async function isTrueCasePagePath(pagePath, pagesDir) { + const pageSegments = (0, _path.normalize)(pagePath).split(_path.sep).filter(Boolean); + const segmentExistsPromises = pageSegments.map(async (segment, i)=>{ + const segmentParentDir = (0, _path.join)(pagesDir, ...pageSegments.slice(0, i)); + const parentDirEntries = await _fs.promises.readdir(segmentParentDir); + return parentDirEntries.includes(segment); + }); + return (await Promise.all(segmentExistsPromises)).every(Boolean); +} +async function findPageFile(pagesDir, normalizedPagePath, pageExtensions, isAppDir) { + const pagePaths = (0, _getpagepaths.getPagePaths)(normalizedPagePath, pageExtensions, isAppDir); + const [existingPath, ...others] = (await Promise.all(pagePaths.map(async (path)=>{ + const filePath = (0, _path.join)(pagesDir, path); + try { + return await (0, _fileexists.fileExists)(filePath) ? path : null; + } catch (err) { + var _err_code; + if (!(err == null ? void 0 : (_err_code = err.code) == null ? void 0 : _err_code.includes('ENOTDIR'))) throw err; + } + return null; + }))).filter(_nonnullable.nonNullable); + if (!existingPath) { + return null; + } + if (!await isTrueCasePagePath(existingPath, pagesDir)) { + return null; + } + if (others.length > 0) { + (0, _log.warn)(`Duplicate page detected. ${(0, _picocolors.cyan)((0, _path.join)('pages', existingPath))} and ${(0, _picocolors.cyan)((0, _path.join)('pages', others[0]))} both resolve to ${(0, _picocolors.cyan)(normalizedPagePath)}.`); + } + return existingPath; +} +function createValidFileMatcher(pageExtensions, appDirPath) { + // Helper to create extension regex pattern + const extPattern = `(?:${pageExtensions.map((extension)=>(0, _escaperegexp.escapeStringRegexp)(extension)).join('|')})`; + // Pattern factory for "leaf" files that can appear at start of path or after separator + // e.g., 'page.tsx', '/path/page.tsx', '\\path\\route.js' + const createLeafPattern = (fileNames)=>{ + const names = fileNames.length === 1 ? fileNames[0] : `(${fileNames.join('|')})`; + return new RegExp(`(^${names}|[\\\\/]${names})\\.${extPattern}$`); + }; + // Pattern factory for root-only files (no path separator allowed) + const createRootOnlyPattern = (fileName)=>new RegExp(`^${fileName}\\.${extPattern}$`); + // All file matching patterns + const validExtensionFileRegex = new RegExp(`\\.${extPattern}$`); + const leafOnlyPageFileRegex = createLeafPattern([ + 'page', + 'route' + ]); + const leafOnlyRouteFileRegex = createLeafPattern([ + 'route' + ]); + const leafOnlyLayoutFileRegex = createLeafPattern([ + 'layout' + ]); + const leafOnlyDefaultFileRegex = createLeafPattern([ + 'default' + ]); + const rootNotFoundFileRegex = createRootOnlyPattern('not-found'); + /** TODO-METADATA: support other metadata routes + * regex for: + * + * /robots.txt| + * /sitemap.xml| + * /favicon.ico + * /manifest.json| + * /icon.png|jpg| + * /apple-touch-icon.png|jpg| + * + */ /** + * Match the file if it's a metadata route file, static: if the file is a static metadata file. + * It needs to be a file which doesn't match the custom metadata routes e.g. `app/robots.txt/route.js` + */ function isMetadataFile(filePath) { + const appDirRelativePath = appDirPath ? filePath.replace(appDirPath, '') : filePath; + return (0, _ismetadataroute.isMetadataRouteFile)(appDirRelativePath, pageExtensions, true); + } + // Determine if the file is leaf node page file or route file under layouts, + // 'page.' | 'route.' + function isAppRouterPage(filePath) { + return leafOnlyPageFileRegex.test(filePath) || isMetadataFile(filePath); + } + // Determine if the file is leaf node route file under app directory + function isAppRouterRoute(filePath) { + return leafOnlyRouteFileRegex.test(filePath); + } + function isAppLayoutPage(filePath) { + return leafOnlyLayoutFileRegex.test(filePath); + } + function isAppDefaultPage(filePath) { + return leafOnlyDefaultFileRegex.test(filePath); + } + function isPageFile(filePath) { + return validExtensionFileRegex.test(filePath) || isMetadataFile(filePath); + } + function isRootNotFound(filePath) { + if (!appDirPath) { + return false; + } + if (!filePath.startsWith(appDirPath + _path.sep)) { + return false; + } + const rest = filePath.slice(appDirPath.length + 1); + return rootNotFoundFileRegex.test(rest); + } + return { + isPageFile, + isAppRouterPage, + isAppRouterRoute, + isAppLayoutPage, + isAppDefaultPage, + isMetadataFile, + isRootNotFound + }; +} + +//# sourceMappingURL=find-page-file.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/fix-mojibake.js b/build/node_modules/next/dist/server/lib/fix-mojibake.js new file mode 100644 index 0000000..d973062 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/fix-mojibake.js @@ -0,0 +1,25 @@ +// x-matched-path header can be decoded incorrectly +// and should only be utf8 characters so this fixes +// incorrectly encoded values +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "fixMojibake", { + enumerable: true, + get: function() { + return fixMojibake; + } +}); +function fixMojibake(input) { + // Convert each character's char code to a byte + const bytes = new Uint8Array(input.length); + for(let i = 0; i < input.length; i++){ + bytes[i] = input.charCodeAt(i); + } + // Decode the bytes as proper UTF-8 + const decoder = new TextDecoder('utf-8'); + return decoder.decode(bytes); +} + +//# sourceMappingURL=fix-mojibake.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/format-hostname.js b/build/node_modules/next/dist/server/lib/format-hostname.js new file mode 100644 index 0000000..6ab8a51 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/format-hostname.js @@ -0,0 +1,16 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "formatHostname", { + enumerable: true, + get: function() { + return formatHostname; + } +}); +const _isipv6 = require("./is-ipv6"); +function formatHostname(hostname) { + return (0, _isipv6.isIPv6)(hostname) ? `[${hostname}]` : hostname; +} + +//# sourceMappingURL=format-hostname.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/i18n-provider.js b/build/node_modules/next/dist/server/lib/i18n-provider.js new file mode 100644 index 0000000..43517e5 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/i18n-provider.js @@ -0,0 +1,129 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "I18NProvider", { + enumerable: true, + get: function() { + return I18NProvider; + } +}); +const _requestmeta = require("../request-meta"); +class I18NProvider { + constructor(config){ + var _config_domains; + this.config = config; + if (!config.locales.length) { + throw Object.defineProperty(new Error('Invariant: No locales provided'), "__NEXT_ERROR_CODE", { + value: "E510", + enumerable: false, + configurable: true + }); + } + this.lowerCaseLocales = config.locales.map((locale)=>locale.toLowerCase()); + this.lowerCaseDomains = (_config_domains = config.domains) == null ? void 0 : _config_domains.map((domainLocale)=>{ + var _domainLocale_locales; + const domain = domainLocale.domain.toLowerCase(); + return { + defaultLocale: domainLocale.defaultLocale.toLowerCase(), + hostname: domain.split(':', 1)[0], + domain, + locales: (_domainLocale_locales = domainLocale.locales) == null ? void 0 : _domainLocale_locales.map((locale)=>locale.toLowerCase()), + http: domainLocale.http + }; + }); + } + /** + * Detects the domain locale from the hostname and the detected locale if + * provided. + * + * @param hostname The hostname to detect the domain locale from, this must be lowercased. + * @param detectedLocale The detected locale to use if the hostname does not match. + * @returns The domain locale if found, `undefined` otherwise. + */ detectDomainLocale(hostname, detectedLocale) { + if (!hostname || !this.lowerCaseDomains || !this.config.domains) return; + if (detectedLocale) detectedLocale = detectedLocale.toLowerCase(); + for(let i = 0; i < this.lowerCaseDomains.length; i++){ + var // Configuration validation ensures that the locale is not repeated in + // other domains locales. + _domainLocale_locales; + const domainLocale = this.lowerCaseDomains[i]; + if (// We assume that the hostname is already lowercased. + domainLocale.hostname === hostname || ((_domainLocale_locales = domainLocale.locales) == null ? void 0 : _domainLocale_locales.some((locale)=>locale === detectedLocale))) { + return this.config.domains[i]; + } + } + return; + } + /** + * Pulls the pre-computed locale and inference results from the query + * object. + * + * @param req the request object + * @param pathname the pathname that could contain a locale prefix + * @returns the locale analysis result + */ fromRequest(req, pathname) { + const detectedLocale = (0, _requestmeta.getRequestMeta)(req, 'locale'); + // If a locale was detected on the query, analyze the pathname to ensure + // that the locale matches. + if (detectedLocale) { + const analysis = this.analyze(pathname); + // If the analysis contained a locale we should validate it against the + // query and strip it from the pathname. + if (analysis.detectedLocale) { + if (analysis.detectedLocale !== detectedLocale) { + console.warn(`The detected locale does not match the locale in the query. Expected to find '${detectedLocale}' in '${pathname}' but found '${analysis.detectedLocale}'}`); + } + pathname = analysis.pathname; + } + } + return { + pathname, + detectedLocale, + inferredFromDefault: (0, _requestmeta.getRequestMeta)(req, 'localeInferredFromDefault') ?? false + }; + } + /** + * Analyzes the pathname for a locale and returns the pathname without it. + * + * @param pathname The pathname that could contain a locale prefix. + * @param options The options to use when matching the locale. + * @returns The matched locale and the pathname without the locale prefix + * (if any). + */ analyze(pathname, options = {}) { + let detectedLocale = options.defaultLocale; + // By default, we assume that the default locale was inferred if there was + // no detected locale. + let inferredFromDefault = typeof detectedLocale === 'string'; + // The first segment will be empty, because it has a leading `/`. If + // there is no further segment, there is no locale (or it's the default). + const segments = pathname.split('/', 2); + if (!segments[1]) return { + detectedLocale, + pathname, + inferredFromDefault + }; + // The second segment will contain the locale part if any. + const segment = segments[1].toLowerCase(); + // See if the segment matches one of the locales. If it doesn't, there is + // no locale (or it's the default). + const index = this.lowerCaseLocales.indexOf(segment); + if (index < 0) return { + detectedLocale, + pathname, + inferredFromDefault + }; + // Return the case-sensitive locale. + detectedLocale = this.config.locales[index]; + inferredFromDefault = false; + // Remove the `/${locale}` part of the pathname. + pathname = pathname.slice(detectedLocale.length + 1) || '/'; + return { + detectedLocale, + pathname, + inferredFromDefault + }; + } +} + +//# sourceMappingURL=i18n-provider.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/implicit-tags.js b/build/node_modules/next/dist/server/lib/implicit-tags.js new file mode 100644 index 0000000..30699c1 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/implicit-tags.js @@ -0,0 +1,77 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getImplicitTags", { + enumerable: true, + get: function() { + return getImplicitTags; + } +}); +const _constants = require("../../lib/constants"); +const _handlers = require("../use-cache/handlers"); +const _lazyresult = require("./lazy-result"); +const getDerivedTags = (pathname)=>{ + const derivedTags = [ + `/layout` + ]; + // we automatically add the current path segments as tags + // for revalidatePath handling + if (pathname.startsWith('/')) { + const pathnameParts = pathname.split('/'); + for(let i = 1; i < pathnameParts.length + 1; i++){ + let curPathname = pathnameParts.slice(0, i).join('/'); + if (curPathname) { + // all derived tags other than the page are layout tags + if (!curPathname.endsWith('/page') && !curPathname.endsWith('/route')) { + curPathname = `${curPathname}${!curPathname.endsWith('/') ? '/' : ''}layout`; + } + derivedTags.push(curPathname); + } + } + } + return derivedTags; +}; +/** + * Creates a map with lazy results that fetch the expiration value for the given + * tags and respective cache kind when they're awaited for the first time. + */ function createTagsExpirationsByCacheKind(tags) { + const expirationsByCacheKind = new Map(); + const cacheHandlers = (0, _handlers.getCacheHandlerEntries)(); + if (cacheHandlers) { + for (const [kind, cacheHandler] of cacheHandlers){ + if ('getExpiration' in cacheHandler) { + expirationsByCacheKind.set(kind, (0, _lazyresult.createLazyResult)(async ()=>cacheHandler.getExpiration(tags))); + } + } + } + return expirationsByCacheKind; +} +async function getImplicitTags(page, pathname, fallbackRouteParams) { + const tags = new Set(); + // Add the derived tags from the page. + const derivedTags = getDerivedTags(page); + for (let tag of derivedTags){ + tag = `${_constants.NEXT_CACHE_IMPLICIT_TAG_ID}${tag}`; + tags.add(tag); + } + // Add the tags from the pathname. If the route has unknown params, we don't + // want to add the pathname as a tag, as it will be invalid. + if (pathname && (!fallbackRouteParams || fallbackRouteParams.size === 0)) { + const tag = `${_constants.NEXT_CACHE_IMPLICIT_TAG_ID}${pathname}`; + tags.add(tag); + } + if (tags.has(`${_constants.NEXT_CACHE_IMPLICIT_TAG_ID}/`)) { + tags.add(`${_constants.NEXT_CACHE_IMPLICIT_TAG_ID}/index`); + } + if (tags.has(`${_constants.NEXT_CACHE_IMPLICIT_TAG_ID}/index`)) { + tags.add(`${_constants.NEXT_CACHE_IMPLICIT_TAG_ID}/`); + } + const tagsArray = Array.from(tags); + return { + tags: tagsArray, + expirationsByCacheKind: createTagsExpirationsByCacheKind(tagsArray) + }; +} + +//# sourceMappingURL=implicit-tags.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/incremental-cache/file-system-cache.js b/build/node_modules/next/dist/server/lib/incremental-cache/file-system-cache.js new file mode 100644 index 0000000..d926dfe --- /dev/null +++ b/build/node_modules/next/dist/server/lib/incremental-cache/file-system-cache.js @@ -0,0 +1,335 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "default", { + enumerable: true, + get: function() { + return FileSystemCache; + } +}); +const _responsecache = require("../../response-cache"); +const _path = /*#__PURE__*/ _interop_require_default(require("../../../shared/lib/isomorphic/path")); +const _constants = require("../../../lib/constants"); +const _tagsmanifestexternal = require("./tags-manifest.external"); +const _multifilewriter = require("../../../lib/multi-file-writer"); +const _memorycacheexternal = require("./memory-cache.external"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +class FileSystemCache { + static #_ = this.debug = !!process.env.NEXT_PRIVATE_DEBUG_CACHE; + constructor(ctx){ + this.fs = ctx.fs; + this.flushToDisk = ctx.flushToDisk; + this.serverDistDir = ctx.serverDistDir; + this.revalidatedTags = ctx.revalidatedTags; + if (ctx.maxMemoryCacheSize) { + if (!FileSystemCache.memoryCache) { + if (FileSystemCache.debug) { + console.log('FileSystemCache: using memory store for fetch cache'); + } + FileSystemCache.memoryCache = (0, _memorycacheexternal.getMemoryCache)(ctx.maxMemoryCacheSize); + } else if (FileSystemCache.debug) { + console.log('FileSystemCache: memory store already initialized'); + } + } else if (FileSystemCache.debug) { + console.log('FileSystemCache: not using memory store for fetch cache'); + } + } + resetRequestCache() {} + async revalidateTag(tags, durations) { + tags = typeof tags === 'string' ? [ + tags + ] : tags; + if (FileSystemCache.debug) { + console.log('FileSystemCache: revalidateTag', tags, durations); + } + if (tags.length === 0) { + return; + } + const now = Date.now(); + for (const tag of tags){ + const existingEntry = _tagsmanifestexternal.tagsManifest.get(tag) || {}; + if (durations) { + // Use provided durations directly + const updates = { + ...existingEntry + }; + // mark as stale immediately + updates.stale = now; + if (durations.expire !== undefined) { + updates.expired = now + durations.expire * 1000 // Convert seconds to ms + ; + } + _tagsmanifestexternal.tagsManifest.set(tag, updates); + } else { + // Update expired field for immediate expiration (default behavior when no durations provided) + _tagsmanifestexternal.tagsManifest.set(tag, { + ...existingEntry, + expired: now + }); + } + } + } + async get(...args) { + var _FileSystemCache_memoryCache, _data_value, _data_value1, _data_value2, _data_value3; + const [key, ctx] = args; + const { kind } = ctx; + let data = (_FileSystemCache_memoryCache = FileSystemCache.memoryCache) == null ? void 0 : _FileSystemCache_memoryCache.get(key); + if (FileSystemCache.debug) { + if (kind === _responsecache.IncrementalCacheKind.FETCH) { + console.log('FileSystemCache: get', key, ctx.tags, kind, !!data); + } else { + console.log('FileSystemCache: get', key, kind, !!data); + } + } + // let's check the disk for seed data + if (!data && process.env.NEXT_RUNTIME !== 'edge') { + try { + if (kind === _responsecache.IncrementalCacheKind.APP_ROUTE) { + const filePath = this.getFilePath(`${key}.body`, _responsecache.IncrementalCacheKind.APP_ROUTE); + const fileData = await this.fs.readFile(filePath); + const { mtime } = await this.fs.stat(filePath); + const meta = JSON.parse(await this.fs.readFile(filePath.replace(/\.body$/, _constants.NEXT_META_SUFFIX), 'utf8')); + data = { + lastModified: mtime.getTime(), + value: { + kind: _responsecache.CachedRouteKind.APP_ROUTE, + body: fileData, + headers: meta.headers, + status: meta.status + } + }; + } else { + const filePath = this.getFilePath(kind === _responsecache.IncrementalCacheKind.FETCH ? key : `${key}.html`, kind); + const fileData = await this.fs.readFile(filePath, 'utf8'); + const { mtime } = await this.fs.stat(filePath); + if (kind === _responsecache.IncrementalCacheKind.FETCH) { + var _data_value4; + const { tags, fetchIdx, fetchUrl } = ctx; + if (!this.flushToDisk) return null; + const lastModified = mtime.getTime(); + const parsedData = JSON.parse(fileData); + data = { + lastModified, + value: parsedData + }; + if (((_data_value4 = data.value) == null ? void 0 : _data_value4.kind) === _responsecache.CachedRouteKind.FETCH) { + var _data_value5; + const storedTags = (_data_value5 = data.value) == null ? void 0 : _data_value5.tags; + // update stored tags if a new one is being added + // TODO: remove this when we can send the tags + // via header on GET same as SET + if (!(tags == null ? void 0 : tags.every((tag)=>storedTags == null ? void 0 : storedTags.includes(tag)))) { + if (FileSystemCache.debug) { + console.log('FileSystemCache: tags vs storedTags mismatch', tags, storedTags); + } + await this.set(key, data.value, { + fetchCache: true, + tags, + fetchIdx, + fetchUrl + }); + } + } + } else if (kind === _responsecache.IncrementalCacheKind.APP_PAGE) { + // We try to load the metadata file, but if it fails, we don't + // error. We also don't load it if this is a fallback. + let meta; + try { + meta = JSON.parse(await this.fs.readFile(filePath.replace(/\.html$/, _constants.NEXT_META_SUFFIX), 'utf8')); + } catch {} + let maybeSegmentData; + if (meta == null ? void 0 : meta.segmentPaths) { + // Collect all the segment data for this page. + // TODO: To optimize file system reads, we should consider creating + // separate cache entries for each segment, rather than storing them + // all on the page's entry. Though the behavior is + // identical regardless. + const segmentData = new Map(); + maybeSegmentData = segmentData; + const segmentsDir = key + _constants.RSC_SEGMENTS_DIR_SUFFIX; + await Promise.all(meta.segmentPaths.map(async (segmentPath)=>{ + const segmentDataFilePath = this.getFilePath(segmentsDir + segmentPath + _constants.RSC_SEGMENT_SUFFIX, _responsecache.IncrementalCacheKind.APP_PAGE); + try { + segmentData.set(segmentPath, await this.fs.readFile(segmentDataFilePath)); + } catch { + // This shouldn't happen, but if for some reason we fail to + // load a segment from the filesystem, treat it the same as if + // the segment is dynamic and does not have a prefetch. + } + })); + } + let rscData; + if (!ctx.isFallback && (!ctx.isRoutePPREnabled || (meta == null ? void 0 : meta.postponed) == null)) { + rscData = await this.fs.readFile(this.getFilePath(`${key}${_constants.RSC_SUFFIX}`, _responsecache.IncrementalCacheKind.APP_PAGE)); + } + data = { + lastModified: mtime.getTime(), + value: { + kind: _responsecache.CachedRouteKind.APP_PAGE, + html: fileData, + rscData, + postponed: meta == null ? void 0 : meta.postponed, + headers: meta == null ? void 0 : meta.headers, + status: meta == null ? void 0 : meta.status, + segmentData: maybeSegmentData + } + }; + } else if (kind === _responsecache.IncrementalCacheKind.PAGES) { + let meta; + let pageData = {}; + if (!ctx.isFallback) { + pageData = JSON.parse(await this.fs.readFile(this.getFilePath(`${key}${_constants.NEXT_DATA_SUFFIX}`, _responsecache.IncrementalCacheKind.PAGES), 'utf8')); + } + data = { + lastModified: mtime.getTime(), + value: { + kind: _responsecache.CachedRouteKind.PAGES, + html: fileData, + pageData, + headers: meta == null ? void 0 : meta.headers, + status: meta == null ? void 0 : meta.status + } + }; + } else { + throw Object.defineProperty(new Error(`Invariant: Unexpected route kind ${kind} in file system cache.`), "__NEXT_ERROR_CODE", { + value: "E445", + enumerable: false, + configurable: true + }); + } + } + if (data) { + var _FileSystemCache_memoryCache1; + (_FileSystemCache_memoryCache1 = FileSystemCache.memoryCache) == null ? void 0 : _FileSystemCache_memoryCache1.set(key, data); + } + } catch { + return null; + } + } + if ((data == null ? void 0 : (_data_value = data.value) == null ? void 0 : _data_value.kind) === _responsecache.CachedRouteKind.APP_PAGE || (data == null ? void 0 : (_data_value1 = data.value) == null ? void 0 : _data_value1.kind) === _responsecache.CachedRouteKind.APP_ROUTE || (data == null ? void 0 : (_data_value2 = data.value) == null ? void 0 : _data_value2.kind) === _responsecache.CachedRouteKind.PAGES) { + var _data_value_headers; + const tagsHeader = (_data_value_headers = data.value.headers) == null ? void 0 : _data_value_headers[_constants.NEXT_CACHE_TAGS_HEADER]; + if (typeof tagsHeader === 'string') { + const cacheTags = tagsHeader.split(','); + // we trigger a blocking validation if an ISR page + // had a tag revalidated, if we want to be a background + // revalidation instead we return data.lastModified = -1 + if (cacheTags.length > 0 && (0, _tagsmanifestexternal.areTagsExpired)(cacheTags, data.lastModified)) { + if (FileSystemCache.debug) { + console.log('FileSystemCache: expired tags', cacheTags); + } + return null; + } + } + } else if ((data == null ? void 0 : (_data_value3 = data.value) == null ? void 0 : _data_value3.kind) === _responsecache.CachedRouteKind.FETCH) { + const combinedTags = ctx.kind === _responsecache.IncrementalCacheKind.FETCH ? [ + ...ctx.tags || [], + ...ctx.softTags || [] + ] : []; + // When revalidate tag is called we don't return stale data so it's + // updated right away. + if (combinedTags.some((tag)=>this.revalidatedTags.includes(tag))) { + if (FileSystemCache.debug) { + console.log('FileSystemCache: was revalidated', combinedTags); + } + return null; + } + if ((0, _tagsmanifestexternal.areTagsExpired)(combinedTags, data.lastModified)) { + if (FileSystemCache.debug) { + console.log('FileSystemCache: expired tags', combinedTags); + } + return null; + } + } + return data ?? null; + } + async set(key, data, ctx) { + var _FileSystemCache_memoryCache; + (_FileSystemCache_memoryCache = FileSystemCache.memoryCache) == null ? void 0 : _FileSystemCache_memoryCache.set(key, { + value: data, + lastModified: Date.now() + }); + if (FileSystemCache.debug) { + console.log('FileSystemCache: set', key); + } + if (!this.flushToDisk || !data) return; + // Create a new writer that will prepare to write all the files to disk + // after their containing directory is created. + const writer = new _multifilewriter.MultiFileWriter(this.fs); + if (data.kind === _responsecache.CachedRouteKind.APP_ROUTE) { + const filePath = this.getFilePath(`${key}.body`, _responsecache.IncrementalCacheKind.APP_ROUTE); + writer.append(filePath, data.body); + const meta = { + headers: data.headers, + status: data.status, + postponed: undefined, + segmentPaths: undefined, + prefetchHints: undefined + }; + writer.append(filePath.replace(/\.body$/, _constants.NEXT_META_SUFFIX), JSON.stringify(meta, null, 2)); + } else if (data.kind === _responsecache.CachedRouteKind.PAGES || data.kind === _responsecache.CachedRouteKind.APP_PAGE) { + const isAppPath = data.kind === _responsecache.CachedRouteKind.APP_PAGE; + const htmlPath = this.getFilePath(`${key}.html`, isAppPath ? _responsecache.IncrementalCacheKind.APP_PAGE : _responsecache.IncrementalCacheKind.PAGES); + writer.append(htmlPath, data.html); + // Fallbacks don't generate a data file. + if (!ctx.fetchCache && !ctx.isFallback && !ctx.isRoutePPREnabled) { + writer.append(this.getFilePath(`${key}${isAppPath ? _constants.RSC_SUFFIX : _constants.NEXT_DATA_SUFFIX}`, isAppPath ? _responsecache.IncrementalCacheKind.APP_PAGE : _responsecache.IncrementalCacheKind.PAGES), isAppPath ? data.rscData : JSON.stringify(data.pageData)); + } + if ((data == null ? void 0 : data.kind) === _responsecache.CachedRouteKind.APP_PAGE) { + let segmentPaths; + if (data.segmentData) { + segmentPaths = []; + const segmentsDir = htmlPath.replace(/\.html$/, _constants.RSC_SEGMENTS_DIR_SUFFIX); + for (const [segmentPath, buffer] of data.segmentData){ + segmentPaths.push(segmentPath); + const segmentDataFilePath = segmentsDir + segmentPath + _constants.RSC_SEGMENT_SUFFIX; + writer.append(segmentDataFilePath, buffer); + } + } + const meta = { + headers: data.headers, + status: data.status, + postponed: data.postponed, + segmentPaths, + prefetchHints: undefined + }; + writer.append(htmlPath.replace(/\.html$/, _constants.NEXT_META_SUFFIX), JSON.stringify(meta)); + } + } else if (data.kind === _responsecache.CachedRouteKind.FETCH) { + const filePath = this.getFilePath(key, _responsecache.IncrementalCacheKind.FETCH); + writer.append(filePath, JSON.stringify({ + ...data, + tags: ctx.fetchCache ? ctx.tags : [] + })); + } + // Wait for all FS operations to complete. + await writer.wait(); + } + getFilePath(pathname, kind) { + switch(kind){ + case _responsecache.IncrementalCacheKind.FETCH: + // we store in .next/cache/fetch-cache so it can be persisted + // across deploys + return _path.default.join(this.serverDistDir, '..', 'cache', 'fetch-cache', pathname); + case _responsecache.IncrementalCacheKind.PAGES: + return _path.default.join(this.serverDistDir, 'pages', pathname); + case _responsecache.IncrementalCacheKind.IMAGE: + case _responsecache.IncrementalCacheKind.APP_PAGE: + case _responsecache.IncrementalCacheKind.APP_ROUTE: + return _path.default.join(this.serverDistDir, 'app', pathname); + default: + throw Object.defineProperty(new Error(`Unexpected file path kind: ${kind}`), "__NEXT_ERROR_CODE", { + value: "E479", + enumerable: false, + configurable: true + }); + } + } +} + +//# sourceMappingURL=file-system-cache.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/incremental-cache/index.js b/build/node_modules/next/dist/server/lib/incremental-cache/index.js new file mode 100644 index 0000000..1f4d578 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/incremental-cache/index.js @@ -0,0 +1,501 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + CacheHandler: null, + IncrementalCache: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + CacheHandler: function() { + return CacheHandler; + }, + IncrementalCache: function() { + return IncrementalCache; + } +}); +const _responsecache = require("../../response-cache"); +const _filesystemcache = /*#__PURE__*/ _interop_require_default(require("./file-system-cache")); +const _normalizepagepath = require("../../../shared/lib/page-path/normalize-page-path"); +const _constants = require("../../../lib/constants"); +const _toroute = require("../to-route"); +const _sharedcachecontrolsexternal = require("./shared-cache-controls.external"); +const _workunitasyncstorageexternal = require("../../app-render/work-unit-async-storage.external"); +const _invarianterror = require("../../../shared/lib/invariant-error"); +const _serverutils = require("../../server-utils"); +const _workasyncstorageexternal = require("../../app-render/work-async-storage.external"); +const _detachedpromise = require("../../../lib/detached-promise"); +const _tagsmanifestexternal = require("./tags-manifest.external"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +class CacheHandler { + // eslint-disable-next-line + constructor(_ctx){} + async get(_cacheKey, _ctx) { + return {}; + } + async set(_cacheKey, _data, _ctx) {} + async revalidateTag(_tags, _durations) {} + resetRequestCache() {} +} +class IncrementalCache { + static #_ = this.debug = !!process.env.NEXT_PRIVATE_DEBUG_CACHE; + constructor({ fs, dev, flushToDisk, minimalMode, serverDistDir, requestHeaders, maxMemoryCacheSize, getPrerenderManifest, fetchCacheKeyPrefix, CurCacheHandler, allowedRevalidateHeaderKeys }){ + var _this_prerenderManifest_preview, _this_prerenderManifest; + this.locks = new Map(); + this.hasCustomCacheHandler = Boolean(CurCacheHandler); + const cacheHandlersSymbol = Symbol.for('@next/cache-handlers'); + const _globalThis = globalThis; + if (!CurCacheHandler) { + // if we have a global cache handler available leverage it + const globalCacheHandler = _globalThis[cacheHandlersSymbol]; + if (globalCacheHandler == null ? void 0 : globalCacheHandler.FetchCache) { + CurCacheHandler = globalCacheHandler.FetchCache; + if (IncrementalCache.debug) { + console.log('IncrementalCache: using global FetchCache cache handler'); + } + } else { + if (fs && serverDistDir) { + if (IncrementalCache.debug) { + console.log('IncrementalCache: using filesystem cache handler'); + } + CurCacheHandler = _filesystemcache.default; + } + } + } else if (IncrementalCache.debug) { + console.log('IncrementalCache: using custom cache handler', CurCacheHandler.name); + } + if (process.env.__NEXT_TEST_MAX_ISR_CACHE) { + // Allow cache size to be overridden for testing purposes + maxMemoryCacheSize = parseInt(process.env.__NEXT_TEST_MAX_ISR_CACHE, 10); + } + this.dev = dev; + this.disableForTestmode = process.env.NEXT_PRIVATE_TEST_PROXY === 'true'; + // this is a hack to avoid Webpack knowing this is equal to this.minimalMode + // because we replace this.minimalMode to true in production bundles. + const minimalModeKey = 'minimalMode'; + this[minimalModeKey] = minimalMode; + this.requestHeaders = requestHeaders; + this.allowedRevalidateHeaderKeys = allowedRevalidateHeaderKeys; + this.prerenderManifest = getPrerenderManifest(); + this.cacheControls = new _sharedcachecontrolsexternal.SharedCacheControls(this.prerenderManifest); + this.fetchCacheKeyPrefix = fetchCacheKeyPrefix; + let revalidatedTags = []; + if (requestHeaders[_constants.PRERENDER_REVALIDATE_HEADER] === ((_this_prerenderManifest = this.prerenderManifest) == null ? void 0 : (_this_prerenderManifest_preview = _this_prerenderManifest.preview) == null ? void 0 : _this_prerenderManifest_preview.previewModeId)) { + this.isOnDemandRevalidate = true; + } + if (minimalMode) { + var _this_prerenderManifest_preview1, _this_prerenderManifest1; + revalidatedTags = this.revalidatedTags = (0, _serverutils.getPreviouslyRevalidatedTags)(requestHeaders, (_this_prerenderManifest1 = this.prerenderManifest) == null ? void 0 : (_this_prerenderManifest_preview1 = _this_prerenderManifest1.preview) == null ? void 0 : _this_prerenderManifest_preview1.previewModeId); + } + if (CurCacheHandler) { + this.cacheHandler = new CurCacheHandler({ + dev, + fs, + flushToDisk, + serverDistDir, + revalidatedTags, + maxMemoryCacheSize, + _requestHeaders: requestHeaders, + fetchCacheKeyPrefix + }); + } + } + calculateRevalidate(pathname, fromTime, dev, isFallback) { + // in development we don't have a prerender-manifest + // and default to always revalidating to allow easier debugging + if (dev) return Math.floor(performance.timeOrigin + performance.now() - 1000); + const cacheControl = this.cacheControls.get((0, _toroute.toRoute)(pathname)); + // if an entry isn't present in routes we fallback to a default + // of revalidating after 1 second unless it's a fallback request. + const initialRevalidateSeconds = cacheControl ? cacheControl.revalidate : isFallback ? false : 1; + const revalidateAfter = typeof initialRevalidateSeconds === 'number' ? initialRevalidateSeconds * 1000 + fromTime : initialRevalidateSeconds; + return revalidateAfter; + } + _getPathname(pathname, fetchCache) { + return fetchCache ? pathname : (0, _normalizepagepath.normalizePagePath)(pathname); + } + resetRequestCache() { + var _this_cacheHandler_resetRequestCache, _this_cacheHandler; + (_this_cacheHandler = this.cacheHandler) == null ? void 0 : (_this_cacheHandler_resetRequestCache = _this_cacheHandler.resetRequestCache) == null ? void 0 : _this_cacheHandler_resetRequestCache.call(_this_cacheHandler); + } + async lock(cacheKey) { + // Wait for any existing lock on this cache key to be released + // This implements a simple queue-based locking mechanism + while(true){ + const lock = this.locks.get(cacheKey); + if (IncrementalCache.debug) { + console.log('IncrementalCache: lock get', cacheKey, !!lock); + } + // If no lock exists, we can proceed to acquire it + if (!lock) break; + // Wait for the existing lock to be released before trying again + await lock; + } + // Create a new detached promise that will represent this lock + // The resolve function (unlock) will be returned to the caller + const { resolve, promise } = new _detachedpromise.DetachedPromise(); + if (IncrementalCache.debug) { + console.log('IncrementalCache: successfully locked', cacheKey); + } + // Store the lock promise in the locks map + this.locks.set(cacheKey, promise); + return ()=>{ + // Resolve the promise to release the lock. + resolve(); + // Remove the lock from the map once it's released so that future gets + // can acquire the lock. + this.locks.delete(cacheKey); + }; + } + async revalidateTag(tags, durations) { + var _this_cacheHandler; + return (_this_cacheHandler = this.cacheHandler) == null ? void 0 : _this_cacheHandler.revalidateTag(tags, durations); + } + // x-ref: https://github.com/facebook/react/blob/2655c9354d8e1c54ba888444220f63e836925caa/packages/react/src/ReactFetch.js#L23 + async generateCacheKey(url, init = {}) { + // this should be bumped anytime a fix is made to cache entries + // that should bust the cache + const MAIN_KEY_PREFIX = 'v3'; + const bodyChunks = []; + const encoder = new TextEncoder(); + const decoder = new TextDecoder(); + if (init.body) { + // handle Uint8Array body + if (init.body instanceof Uint8Array) { + bodyChunks.push(decoder.decode(init.body)); + init._ogBody = init.body; + } else if (typeof init.body.getReader === 'function') { + const readableBody = init.body; + const chunks = []; + try { + await readableBody.pipeTo(new WritableStream({ + write (chunk) { + if (typeof chunk === 'string') { + chunks.push(encoder.encode(chunk)); + bodyChunks.push(chunk); + } else { + chunks.push(chunk); + bodyChunks.push(decoder.decode(chunk, { + stream: true + })); + } + } + })); + // Flush the decoder. + bodyChunks.push(decoder.decode()); + // Create a new buffer with all the chunks. + const length = chunks.reduce((total, arr)=>total + arr.length, 0); + const arrayBuffer = new Uint8Array(length); + // Push each of the chunks into the new array buffer. + let offset = 0; + for (const chunk of chunks){ + arrayBuffer.set(chunk, offset); + offset += chunk.length; + } + ; + init._ogBody = arrayBuffer; + } catch (err) { + console.error('Problem reading body', err); + } + } else if (typeof init.body.keys === 'function') { + const formData = init.body; + init._ogBody = init.body; + for (const key of new Set([ + ...formData.keys() + ])){ + const values = formData.getAll(key); + bodyChunks.push(`${key}=${(await Promise.all(values.map(async (val)=>{ + if (typeof val === 'string') { + return val; + } else { + return await val.text(); + } + }))).join(',')}`); + } + // handle blob body + } else if (typeof init.body.arrayBuffer === 'function') { + const blob = init.body; + const arrayBuffer = await blob.arrayBuffer(); + bodyChunks.push(await blob.text()); + init._ogBody = new Blob([ + arrayBuffer + ], { + type: blob.type + }); + } else if (typeof init.body === 'string') { + bodyChunks.push(init.body); + init._ogBody = init.body; + } + } + const headers = typeof (init.headers || {}).keys === 'function' ? Object.fromEntries(init.headers) : Object.assign({}, init.headers); + // w3c trace context headers can break request caching and deduplication + // so we remove them from the cache key + if ('traceparent' in headers) delete headers['traceparent']; + if ('tracestate' in headers) delete headers['tracestate']; + const cacheString = JSON.stringify([ + MAIN_KEY_PREFIX, + this.fetchCacheKeyPrefix || '', + url, + init.method, + headers, + init.mode, + init.redirect, + init.credentials, + init.referrer, + init.referrerPolicy, + init.integrity, + init.cache, + bodyChunks + ]); + if (process.env.NEXT_RUNTIME === 'edge') { + function bufferToHex(buffer) { + return Array.prototype.map.call(new Uint8Array(buffer), (b)=>b.toString(16).padStart(2, '0')).join(''); + } + const buffer = encoder.encode(cacheString); + return bufferToHex(await crypto.subtle.digest('SHA-256', buffer)); + } else { + const crypto1 = require('crypto'); + return crypto1.createHash('sha256').update(cacheString).digest('hex'); + } + } + async get(cacheKey, ctx) { + var _this_cacheHandler, _cacheData_value; + // Unlike other caches if we have a resume data cache, we use it even if + // testmode would normally disable it or if requestHeaders say 'no-cache'. + if (ctx.kind === _responsecache.IncrementalCacheKind.FETCH) { + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + const resumeDataCache = workUnitStore ? (0, _workunitasyncstorageexternal.getRenderResumeDataCache)(workUnitStore) : null; + if (resumeDataCache) { + const memoryCacheData = resumeDataCache.fetch.get(cacheKey); + if ((memoryCacheData == null ? void 0 : memoryCacheData.kind) === _responsecache.CachedRouteKind.FETCH) { + // Check if any tags were recently revalidated before returning RDC entry. + // When a server action calls updateTag(), the re-render should see fresh + // data instead of stale RDC data. + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + const combinedTags = [ + ...ctx.tags || [], + ...ctx.softTags || [] + ]; + const hasRevalidatedTag = combinedTags.some((tag)=>{ + var _this_revalidatedTags, _workStore_pendingRevalidatedTags; + return ((_this_revalidatedTags = this.revalidatedTags) == null ? void 0 : _this_revalidatedTags.includes(tag)) || (workStore == null ? void 0 : (_workStore_pendingRevalidatedTags = workStore.pendingRevalidatedTags) == null ? void 0 : _workStore_pendingRevalidatedTags.some((item)=>item.tag === tag)); + }); + if (hasRevalidatedTag) { + if (IncrementalCache.debug) { + console.log('IncrementalCache: rdc:revalidated-tag', cacheKey); + } + // Fall through to cacheHandler lookup + } else { + if (IncrementalCache.debug) { + console.log('IncrementalCache: rdc:hit', cacheKey); + } + return { + isStale: false, + value: memoryCacheData + }; + } + } else if (IncrementalCache.debug) { + console.log('IncrementalCache: rdc:miss', cacheKey); + } + } else { + if (IncrementalCache.debug) { + console.log('IncrementalCache: rdc:no-resume-data'); + } + } + } + // we don't leverage the prerender cache in dev mode + // so that getStaticProps is always called for easier debugging + if (this.disableForTestmode || this.dev && (ctx.kind !== _responsecache.IncrementalCacheKind.FETCH || this.requestHeaders['cache-control'] === 'no-cache')) { + return null; + } + cacheKey = this._getPathname(cacheKey, ctx.kind === _responsecache.IncrementalCacheKind.FETCH); + const cacheData = await ((_this_cacheHandler = this.cacheHandler) == null ? void 0 : _this_cacheHandler.get(cacheKey, ctx)); + if (ctx.kind === _responsecache.IncrementalCacheKind.FETCH) { + var _cacheData_value1; + if (!cacheData) { + return null; + } + if (((_cacheData_value1 = cacheData.value) == null ? void 0 : _cacheData_value1.kind) !== _responsecache.CachedRouteKind.FETCH) { + var _cacheData_value2; + throw Object.defineProperty(new _invarianterror.InvariantError(`Expected cached value for cache key ${JSON.stringify(cacheKey)} to be a "FETCH" kind, got ${JSON.stringify((_cacheData_value2 = cacheData.value) == null ? void 0 : _cacheData_value2.kind)} instead.`), "__NEXT_ERROR_CODE", { + value: "E653", + enumerable: false, + configurable: true + }); + } + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + const combinedTags = [ + ...ctx.tags || [], + ...ctx.softTags || [] + ]; + // if a tag was revalidated we don't return stale data + if (combinedTags.some((tag)=>{ + var _this_revalidatedTags, _workStore_pendingRevalidatedTags; + return ((_this_revalidatedTags = this.revalidatedTags) == null ? void 0 : _this_revalidatedTags.includes(tag)) || (workStore == null ? void 0 : (_workStore_pendingRevalidatedTags = workStore.pendingRevalidatedTags) == null ? void 0 : _workStore_pendingRevalidatedTags.some((item)=>item.tag === tag)); + })) { + if (IncrementalCache.debug) { + console.log('IncrementalCache: expired tag', cacheKey); + } + return null; + } + // As we're able to get the cache entry for this fetch, and the prerender + // resume data cache (RDC) is available, it must have been populated by a + // previous fetch, but was not yet present in the in-memory cache. This + // could be the case when performing multiple renders in parallel during + // build time where we de-duplicate the fetch calls. + // + // We add it to the RDC so that the next fetch call will be able to use it + // and it won't have to reach into the fetch cache implementation. + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workUnitStore) { + const prerenderResumeDataCache = (0, _workunitasyncstorageexternal.getPrerenderResumeDataCache)(workUnitStore); + if (prerenderResumeDataCache) { + if (IncrementalCache.debug) { + console.log('IncrementalCache: rdc:set', cacheKey); + } + prerenderResumeDataCache.fetch.set(cacheKey, cacheData.value); + } + } + const revalidate = ctx.revalidate || cacheData.value.revalidate; + const age = (performance.timeOrigin + performance.now() - (cacheData.lastModified || 0)) / 1000; + let isStale = age > revalidate; + const data = cacheData.value.data; + if ((0, _tagsmanifestexternal.areTagsExpired)(combinedTags, cacheData.lastModified)) { + return null; + } else if ((0, _tagsmanifestexternal.areTagsStale)(combinedTags, cacheData.lastModified)) { + isStale = true; + } + return { + isStale, + value: { + kind: _responsecache.CachedRouteKind.FETCH, + data, + revalidate + } + }; + } else if ((cacheData == null ? void 0 : (_cacheData_value = cacheData.value) == null ? void 0 : _cacheData_value.kind) === _responsecache.CachedRouteKind.FETCH) { + throw Object.defineProperty(new _invarianterror.InvariantError(`Expected cached value for cache key ${JSON.stringify(cacheKey)} not to be a ${JSON.stringify(ctx.kind)} kind, got "FETCH" instead.`), "__NEXT_ERROR_CODE", { + value: "E652", + enumerable: false, + configurable: true + }); + } + let entry = null; + const { isFallback } = ctx; + const cacheControl = this.cacheControls.get((0, _toroute.toRoute)(cacheKey)); + let isStale; + let revalidateAfter; + if ((cacheData == null ? void 0 : cacheData.lastModified) === -1) { + isStale = -1; + revalidateAfter = -1 * _constants.CACHE_ONE_YEAR_SECONDS * 1000; + } else { + var _cacheData_value3, _cacheData_value4; + const now = performance.timeOrigin + performance.now(); + const lastModified = (cacheData == null ? void 0 : cacheData.lastModified) || now; + revalidateAfter = this.calculateRevalidate(cacheKey, lastModified, this.dev ?? false, ctx.isFallback); + isStale = revalidateAfter !== false && revalidateAfter < now ? true : undefined; + // If the stale time couldn't be determined based on the revalidation + // time, we check if the tags are expired or stale. + if (isStale === undefined && ((cacheData == null ? void 0 : (_cacheData_value3 = cacheData.value) == null ? void 0 : _cacheData_value3.kind) === _responsecache.CachedRouteKind.APP_PAGE || (cacheData == null ? void 0 : (_cacheData_value4 = cacheData.value) == null ? void 0 : _cacheData_value4.kind) === _responsecache.CachedRouteKind.APP_ROUTE)) { + var _cacheData_value_headers; + const tagsHeader = (_cacheData_value_headers = cacheData.value.headers) == null ? void 0 : _cacheData_value_headers[_constants.NEXT_CACHE_TAGS_HEADER]; + if (typeof tagsHeader === 'string') { + const cacheTags = tagsHeader.split(','); + if (cacheTags.length > 0) { + if ((0, _tagsmanifestexternal.areTagsExpired)(cacheTags, lastModified)) { + isStale = -1; + } else if ((0, _tagsmanifestexternal.areTagsStale)(cacheTags, lastModified)) { + isStale = true; + } + } + } + } + } + if (cacheData) { + entry = { + isStale, + cacheControl, + revalidateAfter, + value: cacheData.value, + isFallback + }; + } + if (!cacheData && this.prerenderManifest.notFoundRoutes.includes(cacheKey)) { + // for the first hit after starting the server the cache + // may not have a way to save notFound: true so if + // the prerender-manifest marks this as notFound then we + // return that entry and trigger a cache set to give it a + // chance to update in-memory entries + entry = { + isStale, + value: null, + cacheControl, + revalidateAfter, + isFallback + }; + this.set(cacheKey, entry.value, { + ...ctx, + cacheControl + }); + } + return entry; + } + async set(pathname, data, ctx) { + // Even if we otherwise disable caching for testMode or if no fetchCache is + // configured we still always stash results in the resume data cache if one + // exists. This is because this is a transient in memory cache that + // populates caches ahead of a dynamic render in dev mode to allow the RSC + // debug info to have the right environment associated to it. + if ((data == null ? void 0 : data.kind) === _responsecache.CachedRouteKind.FETCH) { + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + const prerenderResumeDataCache = workUnitStore ? (0, _workunitasyncstorageexternal.getPrerenderResumeDataCache)(workUnitStore) : null; + if (prerenderResumeDataCache) { + if (IncrementalCache.debug) { + console.log('IncrementalCache: rdc:set', pathname); + } + prerenderResumeDataCache.fetch.set(pathname, data); + } + } + if (this.disableForTestmode || this.dev && !ctx.fetchCache) return; + pathname = this._getPathname(pathname, ctx.fetchCache); + // FetchCache has upper limit of 2MB per-entry currently + const itemSize = JSON.stringify(data).length; + if (ctx.fetchCache && itemSize > 2 * 1024 * 1024 && // We ignore the size limit when custom cache handler is being used, as it + // might not have this limit + !this.hasCustomCacheHandler && // We also ignore the size limit when it's an implicit build-time-only + // caching that the user isn't even aware of. + !ctx.isImplicitBuildTimeCache) { + const warningText = `Failed to set Next.js data cache for ${ctx.fetchUrl || pathname}, items over 2MB can not be cached (${itemSize} bytes)`; + if (this.dev) { + throw Object.defineProperty(new Error(warningText), "__NEXT_ERROR_CODE", { + value: "E1003", + enumerable: false, + configurable: true + }); + } + console.warn(warningText); + return; + } + try { + var _this_cacheHandler; + if (!ctx.fetchCache && ctx.cacheControl) { + this.cacheControls.set((0, _toroute.toRoute)(pathname), ctx.cacheControl); + } + await ((_this_cacheHandler = this.cacheHandler) == null ? void 0 : _this_cacheHandler.set(pathname, data, ctx)); + } catch (error) { + console.warn('Failed to update prerender cache for', pathname, error); + } + } +} + +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js b/build/node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js new file mode 100644 index 0000000..0837b2f --- /dev/null +++ b/build/node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js @@ -0,0 +1,57 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getMemoryCache", { + enumerable: true, + get: function() { + return getMemoryCache; + } +}); +const _types = require("../../response-cache/types"); +const _lrucache = require("../lru-cache"); +let memoryCache; +function getBufferSize(buffer) { + return (buffer == null ? void 0 : buffer.length) || 0; +} +function getSegmentDataSize(segmentData) { + if (!segmentData) { + return 0; + } + let size = 0; + for (const [segmentPath, buffer] of segmentData){ + size += segmentPath.length + getBufferSize(buffer); + } + return size; +} +function getMemoryCache(maxMemoryCacheSize) { + if (!memoryCache) { + memoryCache = new _lrucache.LRUCache(maxMemoryCacheSize, function length({ value }) { + var _JSON_stringify; + if (!value) { + return 25; + } else if (value.kind === _types.CachedRouteKind.REDIRECT) { + return JSON.stringify(value.props).length; + } else if (value.kind === _types.CachedRouteKind.IMAGE) { + throw Object.defineProperty(new Error('invariant image should not be incremental-cache'), "__NEXT_ERROR_CODE", { + value: "E501", + enumerable: false, + configurable: true + }); + } else if (value.kind === _types.CachedRouteKind.FETCH) { + return JSON.stringify(value.data || '').length; + } else if (value.kind === _types.CachedRouteKind.APP_ROUTE) { + return value.body.length; + } + // rough estimate of size of cache value + if (value.kind === _types.CachedRouteKind.APP_PAGE) { + var _value_postponed; + return Math.max(1, value.html.length + getBufferSize(value.rscData) + (((_value_postponed = value.postponed) == null ? void 0 : _value_postponed.length) || 0) + getSegmentDataSize(value.segmentData)); + } + return value.html.length + (((_JSON_stringify = JSON.stringify(value.pageData)) == null ? void 0 : _JSON_stringify.length) || 0); + }); + } + return memoryCache; +} + +//# sourceMappingURL=memory-cache.external.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js b/build/node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js new file mode 100644 index 0000000..97a657a --- /dev/null +++ b/build/node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js @@ -0,0 +1,73 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "SharedCacheControls", { + enumerable: true, + get: function() { + return SharedCacheControls; + } +}); +class SharedCacheControls { + static #_ = /** + * The in-memory cache of cache lives for routes. This cache is populated when + * the cache is updated with new cache lives. + */ this.cacheControls = new Map(); + constructor(/** + * The prerender manifest that contains the initial cache controls for + * routes. + */ prerenderManifest){ + this.prerenderManifest = prerenderManifest; + } + /** + * Try to get the cache control value for a route. This will first try to get + * the value from the in-memory cache. If the value is not present in the + * in-memory cache, it will be sourced from the prerender manifest. + * + * @param route the route to get the cache control for + * @returns the cache control for the route, or undefined if the values + * are not present in the in-memory cache or the prerender manifest + */ get(route) { + // This is a copy on write cache that is updated when the cache is updated. + // If the cache is never written to, then the values will be sourced from + // the prerender manifest. + let cacheControl = SharedCacheControls.cacheControls.get(route); + if (cacheControl) return cacheControl; + let prerenderData = this.prerenderManifest.routes[route]; + if (prerenderData) { + const { initialRevalidateSeconds, initialExpireSeconds } = prerenderData; + if (typeof initialRevalidateSeconds !== 'undefined') { + return { + revalidate: initialRevalidateSeconds, + expire: initialExpireSeconds + }; + } + } + const dynamicPrerenderData = this.prerenderManifest.dynamicRoutes[route]; + if (dynamicPrerenderData) { + const { fallbackRevalidate, fallbackExpire } = dynamicPrerenderData; + if (typeof fallbackRevalidate !== 'undefined') { + return { + revalidate: fallbackRevalidate, + expire: fallbackExpire + }; + } + } + return undefined; + } + /** + * Set the cache control for a route. + * + * @param route the route to set the cache control for + * @param cacheControl the cache control for the route + */ set(route, cacheControl) { + SharedCacheControls.cacheControls.set(route, cacheControl); + } + /** + * Clear the in-memory cache of cache controls for routes. + */ clear() { + SharedCacheControls.cacheControls.clear(); + } +} + +//# sourceMappingURL=shared-cache-controls.external.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js b/build/node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js new file mode 100644 index 0000000..8b1da41 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js @@ -0,0 +1,55 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + areTagsExpired: null, + areTagsStale: null, + tagsManifest: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + areTagsExpired: function() { + return areTagsExpired; + }, + areTagsStale: function() { + return areTagsStale; + }, + tagsManifest: function() { + return tagsManifest; + } +}); +const tagsManifest = new Map(); +const areTagsExpired = (tags, timestamp)=>{ + for (const tag of tags){ + const entry = tagsManifest.get(tag); + const expiredAt = entry == null ? void 0 : entry.expired; + if (typeof expiredAt === 'number') { + const now = Date.now(); + // For immediate expiration (expiredAt <= now) and tag was invalidated after entry was created + // OR for future expiration that has now passed (expiredAt > timestamp && expiredAt <= now) + const isImmediatelyExpired = expiredAt <= now && expiredAt > timestamp; + if (isImmediatelyExpired) { + return true; + } + } + } + return false; +}; +const areTagsStale = (tags, timestamp)=>{ + for (const tag of tags){ + const entry = tagsManifest.get(tag); + const staleAt = (entry == null ? void 0 : entry.stale) ?? 0; + if (typeof staleAt === 'number' && staleAt > timestamp) { + return true; + } + } + return false; +}; + +//# sourceMappingURL=tags-manifest.external.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/install-code-frame.js b/build/node_modules/next/dist/server/lib/install-code-frame.js new file mode 100644 index 0000000..5e4eb93 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/install-code-frame.js @@ -0,0 +1,22 @@ +/** + * Installs code frame rendering support by injecting the renderer into patch-error-inspect. + * This uses dependency injection to avoid hard dependencies on native bindings in runtime code. + * + * Should be called early in dev/build initialization, after native bindings are loaded. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "installCodeFrameSupport", { + enumerable: true, + get: function() { + return installCodeFrameSupport; + } +}); +function installCodeFrameSupport() { + const { setCodeFrameRenderer } = require('../patch-error-inspect'); + const { getOriginalCodeFrame } = require('../../next-devtools/server/shared'); + setCodeFrameRenderer(getOriginalCodeFrame); +} + +//# sourceMappingURL=install-code-frame.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/is-ipv6.js b/build/node_modules/next/dist/server/lib/is-ipv6.js new file mode 100644 index 0000000..80912f9 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/is-ipv6.js @@ -0,0 +1,41 @@ +// Regex from `node/lib/internal/net.js`: https://github.com/nodejs/node/blob/9fc57006c27564ed7f75eee090eca86786508f51/lib/internal/net.js#L19-L29 +// License included below: +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "isIPv6", { + enumerable: true, + get: function() { + return isIPv6; + } +}); +const v4Seg = '(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'; +const v4Str = `(${v4Seg}[.]){3}${v4Seg}`; +const v6Seg = '(?:[0-9a-fA-F]{1,4})'; +const IPv6Reg = new RegExp('^(' + `(?:${v6Seg}:){7}(?:${v6Seg}|:)|` + `(?:${v6Seg}:){6}(?:${v4Str}|:${v6Seg}|:)|` + `(?:${v6Seg}:){5}(?::${v4Str}|(:${v6Seg}){1,2}|:)|` + `(?:${v6Seg}:){4}(?:(:${v6Seg}){0,1}:${v4Str}|(:${v6Seg}){1,3}|:)|` + `(?:${v6Seg}:){3}(?:(:${v6Seg}){0,2}:${v4Str}|(:${v6Seg}){1,4}|:)|` + `(?:${v6Seg}:){2}(?:(:${v6Seg}){0,3}:${v4Str}|(:${v6Seg}){1,5}|:)|` + `(?:${v6Seg}:){1}(?:(:${v6Seg}){0,4}:${v4Str}|(:${v6Seg}){1,6}|:)|` + `(?::((?::${v6Seg}){0,5}:${v4Str}|(?::${v6Seg}){1,7}|:))` + ')(%[0-9a-zA-Z-.:]{1,})?$'); +function isIPv6(s) { + return IPv6Reg.test(s); +} + +//# sourceMappingURL=is-ipv6.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/is-rsc-request.js b/build/node_modules/next/dist/server/lib/is-rsc-request.js new file mode 100644 index 0000000..6a3ebc5 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/is-rsc-request.js @@ -0,0 +1,18 @@ +/** + * Normalizes the raw RSC header value. Only the literal string "1" is treated + * as a valid RSC request marker; malformed or repeated values are ignored. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "isRSCRequestHeader", { + enumerable: true, + get: function() { + return isRSCRequestHeader; + } +}); +function isRSCRequestHeader(value) { + return value === '1'; +} + +//# sourceMappingURL=is-rsc-request.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/lazy-result.js b/build/node_modules/next/dist/server/lib/lazy-result.js new file mode 100644 index 0000000..bb56128 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/lazy-result.js @@ -0,0 +1,46 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createLazyResult: null, + isResolvedLazyResult: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createLazyResult: function() { + return createLazyResult; + }, + isResolvedLazyResult: function() { + return isResolvedLazyResult; + } +}); +function createLazyResult(fn) { + let pendingResult; + const result = { + then (onfulfilled, onrejected) { + if (!pendingResult) { + pendingResult = Promise.resolve(fn()); + } + pendingResult.then((value)=>{ + result.value = value; + }).catch(()=>{ + // The externally awaited result will be rejected via `onrejected`. We + // don't need to handle it here. But we do want to avoid an unhandled + // rejection. + }); + return pendingResult.then(onfulfilled, onrejected); + } + }; + return result; +} +function isResolvedLazyResult(result) { + return result.hasOwnProperty('value'); +} + +//# sourceMappingURL=lazy-result.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/lru-cache.js b/build/node_modules/next/dist/server/lib/lru-cache.js new file mode 100644 index 0000000..88b1f80 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/lru-cache.js @@ -0,0 +1,191 @@ +/** + * Node in the doubly-linked list used for LRU tracking. + * Each node represents a cache entry with bidirectional pointers. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "LRUCache", { + enumerable: true, + get: function() { + return LRUCache; + } +}); +class LRUNode { + constructor(key, data, size){ + this.prev = null; + this.next = null; + this.key = key; + this.data = data; + this.size = size; + } +} +/** + * Sentinel node used for head/tail boundaries. + * These nodes don't contain actual cache data but simplify list operations. + */ class SentinelNode { + constructor(){ + this.prev = null; + this.next = null; + } +} +class LRUCache { + constructor(maxSize, calculateSize, onEvict){ + this.cache = new Map(); + this.totalSize = 0; + this.maxSize = maxSize; + this.calculateSize = calculateSize; + this.onEvict = onEvict; + // Create sentinel nodes to simplify doubly-linked list operations + // HEAD <-> TAIL (empty list) + this.head = new SentinelNode(); + this.tail = new SentinelNode(); + this.head.next = this.tail; + this.tail.prev = this.head; + } + /** + * Adds a node immediately after the head (marks as most recently used). + * Used when inserting new items or when an item is accessed. + * PRECONDITION: node must be disconnected (prev/next should be null) + */ addToHead(node) { + node.prev = this.head; + node.next = this.head.next; + // head.next is always non-null (points to tail or another node) + this.head.next.prev = node; + this.head.next = node; + } + /** + * Removes a node from its current position in the doubly-linked list. + * Updates the prev/next pointers of adjacent nodes to maintain list integrity. + * PRECONDITION: node must be connected (prev/next are non-null) + */ removeNode(node) { + // Connected nodes always have non-null prev/next + node.prev.next = node.next; + node.next.prev = node.prev; + } + /** + * Moves an existing node to the head position (marks as most recently used). + * This is the core LRU operation - accessed items become most recent. + */ moveToHead(node) { + this.removeNode(node); + this.addToHead(node); + } + /** + * Removes and returns the least recently used node (the one before tail). + * This is called during eviction when the cache exceeds capacity. + * PRECONDITION: cache is not empty (ensured by caller) + */ removeTail() { + const lastNode = this.tail.prev; + // tail.prev is always non-null and always LRUNode when cache is not empty + this.removeNode(lastNode); + return lastNode; + } + /** + * Sets a key-value pair in the cache. + * If the key exists, updates the value and moves to head. + * If new, adds at head and evicts from tail if necessary. + * + * Time Complexity: + * - O(1) for uniform item sizes + * - O(k) where k is the number of items evicted (can be O(N) for variable sizes) + */ set(key, value) { + const size = (this.calculateSize == null ? void 0 : this.calculateSize.call(this, value)) ?? 1; + if (size <= 0) { + throw Object.defineProperty(new Error(`LRUCache: calculateSize returned ${size}, but size must be > 0. ` + `Items with size 0 would never be evicted, causing unbounded cache growth.`), "__NEXT_ERROR_CODE", { + value: "E1045", + enumerable: false, + configurable: true + }); + } + if (size > this.maxSize) { + console.warn('Single item size exceeds maxSize'); + return false; + } + const existing = this.cache.get(key); + if (existing) { + // Update existing node: adjust size and move to head (most recent) + existing.data = value; + this.totalSize = this.totalSize - existing.size + size; + existing.size = size; + this.moveToHead(existing); + } else { + // Add new node at head (most recent position) + const newNode = new LRUNode(key, value, size); + this.cache.set(key, newNode); + this.addToHead(newNode); + this.totalSize += size; + } + // Evict least recently used items until under capacity + while(this.totalSize > this.maxSize && this.cache.size > 0){ + const tail = this.removeTail(); + this.cache.delete(tail.key); + this.totalSize -= tail.size; + this.onEvict == null ? void 0 : this.onEvict.call(this, tail.key, tail.data); + } + return true; + } + /** + * Checks if a key exists in the cache. + * This is a pure query operation - does NOT update LRU order. + * + * Time Complexity: O(1) + */ has(key) { + return this.cache.has(key); + } + /** + * Retrieves a value by key and marks it as most recently used. + * Moving to head maintains the LRU property for future evictions. + * + * Time Complexity: O(1) + */ get(key) { + const node = this.cache.get(key); + if (!node) return undefined; + // Mark as most recently used by moving to head + this.moveToHead(node); + return node.data; + } + /** + * Returns an iterator over the cache entries. The order is outputted in the + * order of most recently used to least recently used. + */ *[Symbol.iterator]() { + let current = this.head.next; + while(current && current !== this.tail){ + // Between head and tail, current is always LRUNode + const node = current; + yield [ + node.key, + node.data + ]; + current = current.next; + } + } + /** + * Removes a specific key from the cache. + * Updates both the hash map and doubly-linked list. + * + * Note: This is an explicit removal and does NOT trigger the `onEvict` + * callback. Use this for intentional deletions where eviction tracking + * is not needed. + * + * Time Complexity: O(1) + */ remove(key) { + const node = this.cache.get(key); + if (!node) return; + this.removeNode(node); + this.cache.delete(key); + this.totalSize -= node.size; + } + /** + * Returns the number of items in the cache. + */ get size() { + return this.cache.size; + } + /** + * Returns the current total size of all cached items. + * This uses the custom size calculation if provided. + */ get currentSize() { + return this.totalSize; + } +} + +//# sourceMappingURL=lru-cache.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/match-next-data-pathname.js b/build/node_modules/next/dist/server/lib/match-next-data-pathname.js new file mode 100644 index 0000000..f3fc2d1 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/match-next-data-pathname.js @@ -0,0 +1,18 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "matchNextDataPathname", { + enumerable: true, + get: function() { + return matchNextDataPathname; + } +}); +const _pathmatch = require("../../shared/lib/router/utils/path-match"); +const matcher = (0, _pathmatch.getPathMatch)('/_next/data/:path*'); +function matchNextDataPathname(pathname) { + if (typeof pathname !== 'string') return false; + return matcher(pathname); +} + +//# sourceMappingURL=match-next-data-pathname.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/mock-request.js b/build/node_modules/next/dist/server/lib/mock-request.js new file mode 100644 index 0000000..5d2cd31 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/mock-request.js @@ -0,0 +1,441 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + MockedRequest: null, + MockedResponse: null, + createRequestResponseMocks: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + MockedRequest: function() { + return MockedRequest; + }, + MockedResponse: function() { + return MockedResponse; + }, + createRequestResponseMocks: function() { + return createRequestResponseMocks; + } +}); +const _stream = /*#__PURE__*/ _interop_require_default(require("stream")); +const _utils = require("../web/utils"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +class MockedRequest extends _stream.default.Readable { + constructor({ url, headers, method, socket = null, readable }){ + super(), // This is hardcoded for now, but can be updated to be configurable if needed. + this.httpVersion = '1.0', this.httpVersionMajor = 1, this.httpVersionMinor = 0, // If we don't actually have a socket, we'll just use a mock one that + // always returns false for the `encrypted` property and undefined for the + // `remoteAddress` property. + this.socket = new Proxy({}, { + get: (_target, prop)=>{ + if (prop !== 'encrypted' && prop !== 'remoteAddress') { + throw Object.defineProperty(new Error('Method not implemented'), "__NEXT_ERROR_CODE", { + value: "E52", + enumerable: false, + configurable: true + }); + } + if (prop === 'remoteAddress') return undefined; + // For this mock request, always ensure we just respond with the encrypted + // set to false to ensure there's no odd leakages. + return false; + } + }); + this.url = url; + this.headers = headers; + this.method = method; + if (readable) { + this.bodyReadable = readable; + this.bodyReadable.on('end', ()=>this.emit('end')); + this.bodyReadable.on('close', ()=>this.emit('close')); + } + if (socket) { + this.socket = socket; + } + } + get headersDistinct() { + const headers = {}; + for (const [key, value] of Object.entries(this.headers)){ + if (!value) continue; + headers[key] = Array.isArray(value) ? value : [ + value + ]; + } + return headers; + } + _read(size) { + if (this.bodyReadable) { + return this.bodyReadable._read(size); + } else { + this.emit('end'); + this.emit('close'); + } + } + /** + * The `connection` property is just an alias for the `socket` property. + * + * @deprecated — since v13.0.0 - Use socket instead. + */ get connection() { + return this.socket; + } + // The following methods are not implemented as they are not used in the + // Next.js codebase. + get aborted() { + throw Object.defineProperty(new Error('Method not implemented'), "__NEXT_ERROR_CODE", { + value: "E52", + enumerable: false, + configurable: true + }); + } + get complete() { + throw Object.defineProperty(new Error('Method not implemented'), "__NEXT_ERROR_CODE", { + value: "E52", + enumerable: false, + configurable: true + }); + } + get trailers() { + throw Object.defineProperty(new Error('Method not implemented'), "__NEXT_ERROR_CODE", { + value: "E52", + enumerable: false, + configurable: true + }); + } + get trailersDistinct() { + throw Object.defineProperty(new Error('Method not implemented'), "__NEXT_ERROR_CODE", { + value: "E52", + enumerable: false, + configurable: true + }); + } + get rawTrailers() { + throw Object.defineProperty(new Error('Method not implemented'), "__NEXT_ERROR_CODE", { + value: "E52", + enumerable: false, + configurable: true + }); + } + get rawHeaders() { + throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { + value: "E41", + enumerable: false, + configurable: true + }); + } + setTimeout() { + throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { + value: "E41", + enumerable: false, + configurable: true + }); + } +} +class MockedResponse extends _stream.default.Writable { + constructor(res = {}){ + super(), this.statusMessage = '', this.finished = false, this.headersSent = false, /** + * A list of buffers that have been written to the response. + * + * @internal - used internally by Next.js + */ this.buffers = [], this.totalSize = 0; + this.statusCode = res.statusCode ?? 200; + this.socket = res.socket ?? null; + this.headers = res.headers ? (0, _utils.fromNodeOutgoingHttpHeaders)(res.headers) : new Headers(); + this.maximumResponseBody = res.maximumResponseBody; + this.headPromise = new Promise((resolve)=>{ + this.headPromiseResolve = resolve; + }); + // Attach listeners for the `finish`, `end`, and `error` events to the + // `MockedResponse` instance. + this.hasStreamed = new Promise((resolve, reject)=>{ + this.on('finish', ()=>resolve(true)); + this.on('end', ()=>resolve(true)); + this.on('error', (err)=>reject(err)); + }).then((val)=>{ + this.headPromiseResolve == null ? void 0 : this.headPromiseResolve.call(this); + return val; + }); + if (res.resWriter) { + this.resWriter = res.resWriter; + } + } + appendHeader(name, value) { + const values = Array.isArray(value) ? value : [ + value + ]; + for (const v of values){ + this.headers.append(name, v); + } + return this; + } + /** + * Returns true if the response has been sent, false otherwise. + * + * @internal - used internally by Next.js + */ get isSent() { + return this.finished || this.headersSent; + } + /** + * The `connection` property is just an alias for the `socket` property. + * + * @deprecated — since v13.0.0 - Use socket instead. + */ get connection() { + return this.socket; + } + write(chunk) { + if (this.resWriter) { + return this.resWriter(chunk); + } + const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk); + if (this.maximumResponseBody !== undefined) { + this.totalSize += buffer.byteLength; + if (this.totalSize > this.maximumResponseBody) { + const error = Object.defineProperty(new Error(`Response body exceeded maximum size of ${this.maximumResponseBody} bytes`), "__NEXT_ERROR_CODE", { + value: "E1143", + enumerable: false, + configurable: true + }); + error.code = 'ERR_MAX_BODY_SIZE_EXCEEDED'; + this.destroy(error); + return true; + } + } + this.buffers.push(buffer); + return true; + } + end() { + if (this.destroyed) { + return this; + } + this.finished = true; + return super.end(...arguments); + } + /** + * This method is a no-op because the `MockedResponse` instance is not + * actually connected to a socket. This method is not specified on the + * interface type for `ServerResponse` but is called by Node.js. + * + * @see https://github.com/nodejs/node/pull/7949 + */ _implicitHeader() {} + _write(chunk, _encoding, callback) { + this.write(chunk); + // According to Node.js documentation, the callback MUST be invoked to + // signal that the write completed successfully. If this callback is not + // invoked, the 'finish' event will not be emitted. + // + // https://nodejs.org/docs/latest-v16.x/api/stream.html#writable_writechunk-encoding-callback + // + // If the stream was destroyed due to an error, we should propagate it + if (this.destroyed && this.errored) { + callback(this.errored); + } else { + callback(); + } + } + writeHead(statusCode, statusMessage, headers) { + if (!headers && typeof statusMessage !== 'string') { + headers = statusMessage; + } else if (typeof statusMessage === 'string' && statusMessage.length > 0) { + this.statusMessage = statusMessage; + } + if (headers) { + // When headers have been set with response.setHeader(), they will be + // merged with any headers passed to response.writeHead(), with the + // headers passed to response.writeHead() given precedence. + // + // https://nodejs.org/api/http.html#responsewriteheadstatuscode-statusmessage-headers + // + // For this reason, we need to only call `set` to ensure that this will + // overwrite any existing headers. + if (Array.isArray(headers)) { + // headers may be an Array where the keys and values are in the same list. + // It is not a list of tuples. So, the even-numbered offsets are key + // values, and the odd-numbered offsets are the associated values. The + // array is in the same format as request.rawHeaders. + for(let i = 0; i < headers.length; i += 2){ + // The header key is always a string according to the spec. + this.setHeader(headers[i], headers[i + 1]); + } + } else { + for (const [key, value] of Object.entries(headers)){ + // Skip undefined values + if (typeof value === 'undefined') continue; + this.setHeader(key, value); + } + } + } + this.statusCode = statusCode; + this.headersSent = true; + this.headPromiseResolve == null ? void 0 : this.headPromiseResolve.call(this); + return this; + } + hasHeader(name) { + return this.headers.has(name); + } + getHeader(name) { + return this.headers.get(name) ?? undefined; + } + getHeaders() { + return (0, _utils.toNodeOutgoingHttpHeaders)(this.headers); + } + getHeaderNames() { + return Array.from(this.headers.keys()); + } + setHeader(name, value) { + if (Array.isArray(value)) { + // Because `set` here should override any existing values, we need to + // delete the existing values before setting the new ones via `append`. + this.headers.delete(name); + for (const v of value){ + this.headers.append(name, v); + } + } else if (typeof value === 'number') { + this.headers.set(name, value.toString()); + } else { + this.headers.set(name, value); + } + return this; + } + removeHeader(name) { + this.headers.delete(name); + } + flushHeaders() { + // This is a no-op because we don't actually have a socket to flush the + // headers to. + } + // The following methods are not implemented as they are not used in the + // Next.js codebase. + get strictContentLength() { + throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { + value: "E41", + enumerable: false, + configurable: true + }); + } + writeEarlyHints() { + throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { + value: "E41", + enumerable: false, + configurable: true + }); + } + get req() { + throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { + value: "E41", + enumerable: false, + configurable: true + }); + } + assignSocket() { + throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { + value: "E41", + enumerable: false, + configurable: true + }); + } + detachSocket() { + throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { + value: "E41", + enumerable: false, + configurable: true + }); + } + writeContinue() { + throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { + value: "E41", + enumerable: false, + configurable: true + }); + } + writeProcessing() { + throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { + value: "E41", + enumerable: false, + configurable: true + }); + } + get upgrading() { + throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { + value: "E41", + enumerable: false, + configurable: true + }); + } + get chunkedEncoding() { + throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { + value: "E41", + enumerable: false, + configurable: true + }); + } + get shouldKeepAlive() { + throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { + value: "E41", + enumerable: false, + configurable: true + }); + } + get useChunkedEncodingByDefault() { + throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { + value: "E41", + enumerable: false, + configurable: true + }); + } + get sendDate() { + throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { + value: "E41", + enumerable: false, + configurable: true + }); + } + setTimeout() { + throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { + value: "E41", + enumerable: false, + configurable: true + }); + } + addTrailers() { + throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { + value: "E41", + enumerable: false, + configurable: true + }); + } + setHeaders() { + throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { + value: "E41", + enumerable: false, + configurable: true + }); + } +} +function createRequestResponseMocks({ url, headers = {}, method = 'GET', bodyReadable, resWriter, socket = null, maximumResponseBody }) { + return { + req: new MockedRequest({ + url, + headers, + method, + socket, + readable: bodyReadable + }), + res: new MockedResponse({ + socket, + resWriter, + maximumResponseBody + }) + }; +} + +//# sourceMappingURL=mock-request.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/module-loader/module-loader.js b/build/node_modules/next/dist/server/lib/module-loader/module-loader.js new file mode 100644 index 0000000..f655863 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/module-loader/module-loader.js @@ -0,0 +1,8 @@ +/** + * Loads a given module for a given ID. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=module-loader.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/module-loader/node-module-loader.js b/build/node_modules/next/dist/server/lib/module-loader/node-module-loader.js new file mode 100644 index 0000000..7d5fe4b --- /dev/null +++ b/build/node_modules/next/dist/server/lib/module-loader/node-module-loader.js @@ -0,0 +1,25 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "NodeModuleLoader", { + enumerable: true, + get: function() { + return NodeModuleLoader; + } +}); +class NodeModuleLoader { + async load(id) { + if (process.env.NEXT_RUNTIME !== 'edge') { + // Need to `await` to cover the case that route is marked ESM modules by ESM escalation. + return await (process.env.NEXT_MINIMAL ? __non_webpack_require__(id) : require(id)); + } + throw Object.defineProperty(new Error('NodeModuleLoader is not supported in edge runtime.'), "__NEXT_ERROR_CODE", { + value: "E25", + enumerable: false, + configurable: true + }); + } +} + +//# sourceMappingURL=node-module-loader.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/module-loader/route-module-loader.js b/build/node_modules/next/dist/server/lib/module-loader/route-module-loader.js new file mode 100644 index 0000000..47301cd --- /dev/null +++ b/build/node_modules/next/dist/server/lib/module-loader/route-module-loader.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "RouteModuleLoader", { + enumerable: true, + get: function() { + return RouteModuleLoader; + } +}); +const _nodemoduleloader = require("./node-module-loader"); +class RouteModuleLoader { + static async load(id, loader = new _nodemoduleloader.NodeModuleLoader()) { + const module = await loader.load(id); + if ('routeModule' in module) { + return module.routeModule; + } + throw Object.defineProperty(new Error(`Module "${id}" does not export a routeModule.`), "__NEXT_ERROR_CODE", { + value: "E53", + enumerable: false, + configurable: true + }); + } +} + +//# sourceMappingURL=route-module-loader.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/node-fs-methods.js b/build/node_modules/next/dist/server/lib/node-fs-methods.js new file mode 100644 index 0000000..b19f416 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/node-fs-methods.js @@ -0,0 +1,28 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "nodeFs", { + enumerable: true, + get: function() { + return nodeFs; + } +}); +const _fs = /*#__PURE__*/ _interop_require_default(require("fs")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const nodeFs = { + existsSync: _fs.default.existsSync, + readFile: _fs.default.promises.readFile, + readFileSync: _fs.default.readFileSync, + writeFile: (f, d)=>_fs.default.promises.writeFile(f, d), + mkdir: (dir)=>_fs.default.promises.mkdir(dir, { + recursive: true + }), + stat: (f)=>_fs.default.promises.stat(f) +}; + +//# sourceMappingURL=node-fs-methods.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/parse-stack.js b/build/node_modules/next/dist/server/lib/parse-stack.js new file mode 100644 index 0000000..b628adc --- /dev/null +++ b/build/node_modules/next/dist/server/lib/parse-stack.js @@ -0,0 +1,46 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "parseStack", { + enumerable: true, + get: function() { + return parseStack; + } +}); +const _stacktraceparser = require("next/dist/compiled/stacktrace-parser"); +const regexNextStatic = /\/_next(\/static\/.+)/; +function parseStack(stack, distDir = process.env.__NEXT_DIST_DIR) { + if (!stack) return []; + // throw away eval information that stacktrace-parser doesn't support + // adapted from https://github.com/stacktracejs/error-stack-parser/blob/9f33c224b5d7b607755eb277f9d51fcdb7287e24/error-stack-parser.js#L59C33-L59C62 + stack = stack.split('\n').map((line)=>{ + if (line.includes('(eval ')) { + line = line.replace(/eval code/g, 'eval').replace(/\(eval at [^()]* \(/, '(file://').replace(/\),.*$/g, ')'); + } + return line; + }).join('\n'); + const frames = (0, _stacktraceparser.parse)(stack); + return frames.map((frame)=>{ + try { + const url = new URL(frame.file); + const res = regexNextStatic.exec(url.pathname); + if (res) { + var _distDir_replace; + const effectiveDistDir = distDir == null ? void 0 : (_distDir_replace = distDir.replace(/\\/g, '/')) == null ? void 0 : _distDir_replace.replace(/\/$/, ''); + if (effectiveDistDir) { + frame.file = 'file://' + effectiveDistDir.concat(res.pop()) + url.search; + } + } + } catch {} + return { + file: frame.file, + line1: frame.lineNumber, + column1: frame.column, + methodName: frame.methodName, + arguments: frame.arguments + }; + }); +} + +//# sourceMappingURL=parse-stack.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/patch-fetch.js b/build/node_modules/next/dist/server/lib/patch-fetch.js new file mode 100644 index 0000000..9a55811 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/patch-fetch.js @@ -0,0 +1,978 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + NEXT_PATCH_SYMBOL: null, + createPatchedFetcher: null, + patchFetch: null, + validateRevalidate: null, + validateTags: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + NEXT_PATCH_SYMBOL: function() { + return NEXT_PATCH_SYMBOL; + }, + createPatchedFetcher: function() { + return createPatchedFetcher; + }, + patchFetch: function() { + return patchFetch; + }, + validateRevalidate: function() { + return validateRevalidate; + }, + validateTags: function() { + return validateTags; + } +}); +const _constants = require("./trace/constants"); +const _tracer = require("./trace/tracer"); +const _constants1 = require("../../lib/constants"); +const _dynamicrendering = require("../app-render/dynamic-rendering"); +const _dynamicrenderingutils = require("../dynamic-rendering-utils"); +const _dedupefetch = require("./dedupe-fetch"); +const _workunitasyncstorageexternal = require("../app-render/work-unit-async-storage.external"); +const _responsecache = require("../response-cache"); +const _cloneresponse = require("./clone-response"); +const _stagedrendering = require("../app-render/staged-rendering"); +const isEdgeRuntime = process.env.NEXT_RUNTIME === 'edge'; +const NEXT_PATCH_SYMBOL = Symbol.for('next-patch'); +function isFetchPatched() { + return globalThis[NEXT_PATCH_SYMBOL] === true; +} +function validateRevalidate(revalidateVal, route) { + try { + let normalizedRevalidate = undefined; + if (revalidateVal === false) { + normalizedRevalidate = _constants1.INFINITE_CACHE; + } else if (typeof revalidateVal === 'number' && !isNaN(revalidateVal) && revalidateVal > -1) { + normalizedRevalidate = revalidateVal; + } else if (typeof revalidateVal !== 'undefined') { + throw Object.defineProperty(new Error(`Invalid revalidate value "${revalidateVal}" on "${route}", must be a non-negative number or false`), "__NEXT_ERROR_CODE", { + value: "E179", + enumerable: false, + configurable: true + }); + } + return normalizedRevalidate; + } catch (err) { + // handle client component error from attempting to check revalidate value + if (err instanceof Error && err.message.includes('Invalid revalidate')) { + throw err; + } + return undefined; + } +} +function validateTags(tags, description) { + const validTags = []; + const invalidTags = []; + for(let i = 0; i < tags.length; i++){ + const tag = tags[i]; + if (typeof tag !== 'string') { + invalidTags.push({ + tag, + reason: 'invalid type, must be a string' + }); + } else if (tag.length > _constants1.NEXT_CACHE_TAG_MAX_LENGTH) { + invalidTags.push({ + tag, + reason: `exceeded max length of ${_constants1.NEXT_CACHE_TAG_MAX_LENGTH}` + }); + } else { + validTags.push(tag); + } + if (validTags.length > _constants1.NEXT_CACHE_TAG_MAX_ITEMS) { + console.warn(`Warning: exceeded max tag count for ${description}, dropped tags:`, tags.slice(i).join(', ')); + break; + } + } + if (invalidTags.length > 0) { + console.warn(`Warning: invalid tags passed to ${description}: `); + for (const { tag, reason } of invalidTags){ + console.log(`tag: "${tag}" ${reason}`); + } + } + return validTags; +} +function trackFetchMetric(workStore, ctx) { + if (!workStore.shouldTrackFetchMetrics) { + return; + } + workStore.fetchMetrics ??= []; + workStore.fetchMetrics.push({ + ...ctx, + end: performance.timeOrigin + performance.now(), + idx: workStore.nextFetchId || 0 + }); +} +async function createCachedPrerenderResponse(res, cacheKey, incrementalCacheContext, incrementalCache, revalidate, handleUnlock) { + // We are prerendering at build time or revalidate time with cacheComponents so we + // need to buffer the response so we can guarantee it can be read in a + // microtask. + const bodyBuffer = await res.arrayBuffer(); + const fetchedData = { + headers: Object.fromEntries(res.headers.entries()), + body: Buffer.from(bodyBuffer).toString('base64'), + status: res.status, + url: res.url + }; + // We can skip setting the serverComponentsHmrCache because we aren't in dev + // mode. + if (incrementalCacheContext) { + await incrementalCache.set(cacheKey, { + kind: _responsecache.CachedRouteKind.FETCH, + data: fetchedData, + revalidate + }, incrementalCacheContext); + } + await handleUnlock(); + // We return a new Response to the caller. + return new Response(bodyBuffer, { + headers: res.headers, + status: res.status, + statusText: res.statusText + }); +} +async function createCachedDynamicResponse(workStore, res, cacheKey, incrementalCacheContext, incrementalCache, serverComponentsHmrCache, revalidate, input, handleUnlock, signal) { + // We're cloning the response using this utility because there exists a bug in + // the undici library around response cloning. See the following pull request + // for more details: https://github.com/vercel/next.js/pull/73274 + const [cloned1, cloned2] = (0, _cloneresponse.cloneResponse)(res); + // We are dynamically rendering including dev mode. We want to return the + // response to the caller as soon as possible because it might stream over a + // very long time. + const cacheSetPromise = cloned1.arrayBuffer().then(async (arrayBuffer)=>{ + const bodyBuffer = Buffer.from(arrayBuffer); + const fetchedData = { + headers: Object.fromEntries(cloned1.headers.entries()), + body: bodyBuffer.toString('base64'), + status: cloned1.status, + url: cloned1.url + }; + serverComponentsHmrCache == null ? void 0 : serverComponentsHmrCache.set(cacheKey, fetchedData); + if (incrementalCacheContext) { + await incrementalCache.set(cacheKey, { + kind: _responsecache.CachedRouteKind.FETCH, + data: fetchedData, + revalidate + }, incrementalCacheContext); + } + }).catch((error)=>{ + // Don't warn if the request was aborted intentionally. + if (!(signal == null ? void 0 : signal.aborted)) { + console.warn(`Failed to set fetch cache`, input, error); + } + }).finally(handleUnlock); + const pendingRevalidateKey = `cache-set-${cacheKey}`; + const pendingRevalidates = workStore.pendingRevalidates ??= {}; + let pendingRevalidatePromise = Promise.resolve(); + if (pendingRevalidateKey in pendingRevalidates) { + // There is already a pending revalidate entry that we need to await to + // avoid race conditions. + pendingRevalidatePromise = pendingRevalidates[pendingRevalidateKey]; + } + pendingRevalidates[pendingRevalidateKey] = pendingRevalidatePromise.then(()=>cacheSetPromise).finally(()=>{ + // If the pending revalidate is not present in the store, then we have + // nothing to delete. + if (!(pendingRevalidates == null ? void 0 : pendingRevalidates[pendingRevalidateKey])) { + return; + } + delete pendingRevalidates[pendingRevalidateKey]; + }); + return cloned2; +} +function createPatchedFetcher(originFetch, { workAsyncStorage, workUnitAsyncStorage }) { + // Create the patched fetch function. + const patched = async function fetch(input, init) { + var _init_method, _init_next; + let url; + try { + url = new URL(input instanceof Request ? input.url : input); + url.username = ''; + url.password = ''; + } catch { + // Error caused by malformed URL should be handled by native fetch + url = undefined; + } + const fetchUrl = (url == null ? void 0 : url.href) ?? ''; + const method = (init == null ? void 0 : (_init_method = init.method) == null ? void 0 : _init_method.toUpperCase()) || 'GET'; + // Do create a new span trace for internal fetches in the + // non-verbose mode. + const isInternal = (init == null ? void 0 : (_init_next = init.next) == null ? void 0 : _init_next.internal) === true; + const hideSpan = process.env.NEXT_OTEL_FETCH_DISABLED === '1'; + // We don't track fetch metrics for internal fetches + // so it's not critical that we have a start time, as it won't be recorded. + // This is to workaround a flaky issue where performance APIs might + // not be available and will require follow-up investigation. + const fetchStart = isInternal ? undefined : performance.timeOrigin + performance.now(); + const workStore = workAsyncStorage.getStore(); + const workUnitStore = workUnitAsyncStorage.getStore(); + let cacheSignal = workUnitStore ? (0, _workunitasyncstorageexternal.getCacheSignal)(workUnitStore) : null; + if (cacheSignal) { + cacheSignal.beginRead(); + } + const result = (0, _tracer.getTracer)().trace(isInternal ? _constants.NextNodeServerSpan.internalFetch : _constants.AppRenderSpan.fetch, { + hideSpan, + kind: _tracer.SpanKind.CLIENT, + spanName: [ + 'fetch', + method, + fetchUrl + ].filter(Boolean).join(' '), + attributes: { + 'http.url': fetchUrl, + 'http.method': method, + 'net.peer.name': url == null ? void 0 : url.hostname, + 'net.peer.port': (url == null ? void 0 : url.port) || undefined + } + }, async ()=>{ + var _getRequestMeta; + // If this is an internal fetch, we should not do any special treatment. + if (isInternal) { + return originFetch(input, init); + } + // If the workStore is not available, we can't do any + // special treatment of fetch, therefore fallback to the original + // fetch implementation. + if (!workStore) { + return originFetch(input, init); + } + // We should also fallback to the original fetch implementation if we + // are in draft mode, it does not constitute a static generation. + if (workStore.isDraftMode) { + return originFetch(input, init); + } + const isRequestInput = input && typeof input === 'object' && typeof input.method === 'string'; + const getRequestMeta = (field)=>{ + // If request input is present but init is not, retrieve from input first. + const value = init == null ? void 0 : init[field]; + return value || (isRequestInput ? input[field] : null); + }; + let finalRevalidate = undefined; + const getNextField = (field)=>{ + var _init_next, _init_next1, _input_next; + return typeof (init == null ? void 0 : (_init_next = init.next) == null ? void 0 : _init_next[field]) !== 'undefined' ? init == null ? void 0 : (_init_next1 = init.next) == null ? void 0 : _init_next1[field] : isRequestInput ? (_input_next = input.next) == null ? void 0 : _input_next[field] : undefined; + }; + // RequestInit doesn't keep extra fields e.g. next so it's + // only available if init is used separate + const originalFetchRevalidate = getNextField('revalidate'); + let currentFetchRevalidate = originalFetchRevalidate; + const tags = validateTags(getNextField('tags') || [], `fetch ${input.toString()}`); + let revalidateStore; + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-runtime': + // TODO: Stop accumulating tags in client prerender. (fallthrough) + case 'prerender-client': + case 'validation-client': + case 'prerender-ppr': + case 'prerender-legacy': + case 'cache': + case 'private-cache': + revalidateStore = workUnitStore; + break; + case 'request': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + if (revalidateStore) { + if (Array.isArray(tags)) { + // Collect tags onto parent caches or parent prerenders. + const collectedTags = revalidateStore.tags ?? (revalidateStore.tags = []); + for (const tag of tags){ + if (!collectedTags.includes(tag)) { + collectedTags.push(tag); + } + } + } + } + const implicitTags = workUnitStore == null ? void 0 : workUnitStore.implicitTags; + let pageFetchCacheMode = workStore.fetchCache; + if (workUnitStore) { + switch(workUnitStore.type){ + case 'unstable-cache': + // Inside unstable-cache we treat it the same as force-no-store on + // the page. + pageFetchCacheMode = 'force-no-store'; + break; + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-runtime': + case 'prerender-ppr': + case 'prerender-legacy': + case 'request': + case 'cache': + case 'private-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + const isUsingNoStore = !!workStore.isUnstableNoStore; + let currentFetchCacheConfig = getRequestMeta('cache'); + let cacheReason = ''; + let cacheWarning; + if (typeof currentFetchCacheConfig === 'string' && typeof currentFetchRevalidate !== 'undefined') { + // If the revalidate value conflicts with the cache value, we should warn the user and unset the conflicting values. + const isConflictingRevalidate = // revalidate: 0 and cache: force-cache + currentFetchCacheConfig === 'force-cache' && currentFetchRevalidate === 0 || // revalidate: >0 or revalidate: false and cache: no-store + currentFetchCacheConfig === 'no-store' && (currentFetchRevalidate > 0 || currentFetchRevalidate === false); + if (isConflictingRevalidate) { + cacheWarning = `Specified "cache: ${currentFetchCacheConfig}" and "revalidate: ${currentFetchRevalidate}", only one should be specified.`; + currentFetchCacheConfig = undefined; + currentFetchRevalidate = undefined; + } + } + const hasExplicitFetchCacheOptOut = // fetch config itself signals not to cache + currentFetchCacheConfig === 'no-cache' || currentFetchCacheConfig === 'no-store' || // the fetch isn't explicitly caching and the segment level cache config signals not to cache + // note: `pageFetchCacheMode` is also set by being in an unstable_cache context. + pageFetchCacheMode === 'force-no-store' || pageFetchCacheMode === 'only-no-store'; + // If no explicit fetch cache mode is set, but dynamic = `force-dynamic` is set, + // we shouldn't consider caching the fetch. This is because the `dynamic` cache + // is considered a "top-level" cache mode, whereas something like `fetchCache` is more + // fine-grained. Top-level modes are responsible for setting reasonable defaults for the + // other configurations. + const noFetchConfigAndForceDynamic = !pageFetchCacheMode && !currentFetchCacheConfig && !currentFetchRevalidate && workStore.forceDynamic; + if (// force-cache was specified without a revalidate value. We set the revalidate value to false + // which will signal the cache to not revalidate + currentFetchCacheConfig === 'force-cache' && typeof currentFetchRevalidate === 'undefined') { + currentFetchRevalidate = false; + } else if (hasExplicitFetchCacheOptOut || noFetchConfigAndForceDynamic) { + currentFetchRevalidate = 0; + } + if (currentFetchCacheConfig === 'no-cache' || currentFetchCacheConfig === 'no-store') { + cacheReason = `cache: ${currentFetchCacheConfig}`; + } + finalRevalidate = validateRevalidate(currentFetchRevalidate, workStore.route); + const _headers = getRequestMeta('headers'); + const initHeaders = typeof (_headers == null ? void 0 : _headers.get) === 'function' ? _headers : new Headers(_headers || {}); + const hasUnCacheableHeader = initHeaders.get('authorization') || initHeaders.get('cookie'); + const isUnCacheableMethod = ![ + 'get', + 'head' + ].includes(((_getRequestMeta = getRequestMeta('method')) == null ? void 0 : _getRequestMeta.toLowerCase()) || 'get'); + /** + * We automatically disable fetch caching under the following conditions: + * - Fetch cache configs are not set. Specifically: + * - A page fetch cache mode is not set (export const fetchCache=...) + * - A fetch cache mode is not set in the fetch call (fetch(url, { cache: ... })) + * or the fetch cache mode is set to 'default' + * - A fetch revalidate value is not set in the fetch call (fetch(url, { revalidate: ... })) + * - OR the fetch comes after a configuration that triggered dynamic rendering (e.g., reading cookies()) + * and the fetch was considered uncacheable (e.g., POST method or has authorization headers) + */ const hasNoExplicitCacheConfig = // eslint-disable-next-line eqeqeq + pageFetchCacheMode == undefined && // eslint-disable-next-line eqeqeq + (currentFetchCacheConfig == undefined || // when considering whether to opt into the default "no-cache" fetch semantics, + // a "default" cache config should be treated the same as no cache config + currentFetchCacheConfig === 'default') && // eslint-disable-next-line eqeqeq + currentFetchRevalidate == undefined; + let autoNoCache = Boolean((hasUnCacheableHeader || isUnCacheableMethod) && (revalidateStore == null ? void 0 : revalidateStore.revalidate) === 0); + let isImplicitBuildTimeCache = false; + if (!autoNoCache && hasNoExplicitCacheConfig) { + // We don't enable automatic no-cache behavior during build-time + // prerendering so that we can still leverage the fetch cache between + // export workers. + if (workStore.isBuildTimePrerendering) { + isImplicitBuildTimeCache = true; + } else { + autoNoCache = true; + } + } + // If we have no cache config, and we're in Dynamic I/O prerendering, + // it'll be a dynamic call. We don't have to issue that dynamic call. + if (hasNoExplicitCacheConfig && workUnitStore !== undefined) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-runtime': + // While we don't want to do caching in the client scope we know the + // fetch will be dynamic for cacheComponents so we may as well avoid the + // call here. (fallthrough) + case 'prerender-client': + if (cacheSignal) { + cacheSignal.endRead(); + cacheSignal = null; + } + return (0, _dynamicrenderingutils.makeHangingPromise)(workUnitStore.renderSignal, workStore.route, 'fetch()'); + case 'validation-client': + break; + case 'request': + if (process.env.NODE_ENV === 'development' && workUnitStore.stagedRendering) { + if (cacheSignal) { + cacheSignal.endRead(); + cacheSignal = null; + } + await workUnitStore.stagedRendering.waitForStage(_stagedrendering.RenderStage.Dynamic); + } + break; + case 'prerender-ppr': + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + switch(pageFetchCacheMode){ + case 'force-no-store': + { + cacheReason = 'fetchCache = force-no-store'; + break; + } + case 'only-no-store': + { + if (currentFetchCacheConfig === 'force-cache' || typeof finalRevalidate !== 'undefined' && finalRevalidate > 0) { + throw Object.defineProperty(new Error(`cache: 'force-cache' used on fetch for ${fetchUrl} with 'export const fetchCache = 'only-no-store'`), "__NEXT_ERROR_CODE", { + value: "E448", + enumerable: false, + configurable: true + }); + } + cacheReason = 'fetchCache = only-no-store'; + break; + } + case 'only-cache': + { + if (currentFetchCacheConfig === 'no-store') { + throw Object.defineProperty(new Error(`cache: 'no-store' used on fetch for ${fetchUrl} with 'export const fetchCache = 'only-cache'`), "__NEXT_ERROR_CODE", { + value: "E521", + enumerable: false, + configurable: true + }); + } + break; + } + case 'force-cache': + { + if (typeof currentFetchRevalidate === 'undefined' || currentFetchRevalidate === 0) { + cacheReason = 'fetchCache = force-cache'; + finalRevalidate = _constants1.INFINITE_CACHE; + } + break; + } + case 'default-cache': + case 'default-no-store': + case 'auto': + case undefined: + break; + default: + pageFetchCacheMode; + } + if (typeof finalRevalidate === 'undefined') { + if (pageFetchCacheMode === 'default-cache' && !isUsingNoStore) { + finalRevalidate = _constants1.INFINITE_CACHE; + cacheReason = 'fetchCache = default-cache'; + } else if (pageFetchCacheMode === 'default-no-store') { + finalRevalidate = 0; + cacheReason = 'fetchCache = default-no-store'; + } else if (isUsingNoStore) { + finalRevalidate = 0; + cacheReason = 'noStore call'; + } else if (autoNoCache) { + finalRevalidate = 0; + cacheReason = 'auto no cache'; + } else { + // TODO: should we consider this case an invariant? + cacheReason = 'auto cache'; + finalRevalidate = revalidateStore ? revalidateStore.revalidate : _constants1.INFINITE_CACHE; + } + } else if (!cacheReason) { + cacheReason = `revalidate: ${finalRevalidate}`; + } + if (// when force static is configured we don't bail from + // `revalidate: 0` values + !(workStore.forceStatic && finalRevalidate === 0) && // we don't consider autoNoCache to switch to dynamic for ISR + !autoNoCache && // If the revalidate value isn't currently set or the value is less + // than the current revalidate value, we should update the revalidate + // value. + revalidateStore && finalRevalidate < revalidateStore.revalidate) { + // If we were setting the revalidate value to 0, we should try to + // postpone instead first. + if (finalRevalidate === 0) { + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'prerender-runtime': + // If we're in an instant validation, a dynamic fetch won't + // have time to resolve during the validation prerender anyway, + // so we leave it hanging. This can cause false negatives in shared parents, + // but we accept that for now, because client data fetching is non-idiomatic. + // eslint-disable-next-line no-fallthrough + case 'validation-client': + if (cacheSignal) { + cacheSignal.endRead(); + cacheSignal = null; + } + return (0, _dynamicrenderingutils.makeHangingPromise)(workUnitStore.renderSignal, workStore.route, 'fetch()'); + case 'request': + if (process.env.NODE_ENV === 'development' && workUnitStore.stagedRendering) { + if (cacheSignal) { + cacheSignal.endRead(); + cacheSignal = null; + } + await workUnitStore.stagedRendering.waitForStage(_stagedrendering.RenderStage.Dynamic); + } + break; + case 'prerender-ppr': + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + (0, _dynamicrendering.markCurrentScopeAsDynamic)(workStore, workUnitStore, `revalidate: 0 fetch ${input} ${workStore.route}`); + } + // We only want to set the revalidate store's revalidate time if it + // was explicitly set for the fetch call, i.e. + // originalFetchRevalidate. + if (revalidateStore && originalFetchRevalidate === finalRevalidate) { + revalidateStore.revalidate = finalRevalidate; + } + } + const isCacheableRevalidate = typeof finalRevalidate === 'number' && finalRevalidate > 0; + let cacheKey; + const { incrementalCache } = workStore; + let isHmrRefresh = false; + let serverComponentsHmrCache; + if (workUnitStore) { + switch(workUnitStore.type){ + case 'request': + case 'cache': + case 'private-cache': + isHmrRefresh = workUnitStore.isHmrRefresh ?? false; + serverComponentsHmrCache = workUnitStore.serverComponentsHmrCache; + break; + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-runtime': + case 'prerender-ppr': + case 'prerender-legacy': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + if (incrementalCache && (isCacheableRevalidate || serverComponentsHmrCache)) { + try { + cacheKey = await incrementalCache.generateCacheKey(fetchUrl, isRequestInput ? input : init); + } catch (err) { + console.error(`Failed to generate cache key for`, input); + } + } + const fetchIdx = workStore.nextFetchId ?? 1; + workStore.nextFetchId = fetchIdx + 1; + let handleUnlock = ()=>{}; + const doOriginalFetch = async (isStale, cacheReasonOverride)=>{ + const requestInputFields = [ + 'cache', + 'credentials', + 'headers', + 'integrity', + 'keepalive', + 'method', + 'mode', + 'redirect', + 'referrer', + 'referrerPolicy', + 'window', + 'duplex', + // don't pass through signal when revalidating + ...isStale ? [] : [ + 'signal' + ] + ]; + if (isRequestInput) { + const reqInput = input; + const reqOptions = { + body: reqInput._ogBody || reqInput.body + }; + for (const field of requestInputFields){ + // @ts-expect-error custom fields + reqOptions[field] = reqInput[field]; + } + input = new Request(reqInput.url, reqOptions); + } else if (init) { + const { _ogBody, body, signal, ...otherInput } = init; + init = { + ...otherInput, + body: _ogBody || body, + signal: isStale ? undefined : signal + }; + } + // add metadata to init without editing the original + const clonedInit = { + ...init, + next: { + ...init == null ? void 0 : init.next, + fetchType: 'origin', + fetchIdx + } + }; + return originFetch(input, clonedInit).then(async (res)=>{ + if (!isStale && fetchStart) { + trackFetchMetric(workStore, { + start: fetchStart, + url: fetchUrl, + cacheReason: cacheReasonOverride || cacheReason, + cacheStatus: finalRevalidate === 0 || cacheReasonOverride ? 'skip' : 'miss', + cacheWarning, + status: res.status, + method: clonedInit.method || 'GET' + }); + } + if (res.status === 200 && incrementalCache && cacheKey && (isCacheableRevalidate || serverComponentsHmrCache)) { + const normalizedRevalidate = finalRevalidate >= _constants1.INFINITE_CACHE ? _constants1.CACHE_ONE_YEAR_SECONDS : finalRevalidate; + const incrementalCacheConfig = isCacheableRevalidate ? { + fetchCache: true, + fetchUrl, + fetchIdx, + tags, + isImplicitBuildTimeCache + } : undefined; + switch(workUnitStore == null ? void 0 : workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-runtime': + return createCachedPrerenderResponse(res, cacheKey, incrementalCacheConfig, incrementalCache, normalizedRevalidate, handleUnlock); + case 'request': + if (process.env.NODE_ENV === 'development' && workUnitStore.stagedRendering && workUnitStore.cacheSignal && isCacheableRevalidate) { + // We're filling caches for a staged render with an + // explicit cache config, so we need to wait for the + // response to finish instead of streaming. For HMR-only + // caching (no explicit revalidate), we fall through to + // createCachedDynamicResponse which handles streaming + // and abort gracefully. + return createCachedPrerenderResponse(res, cacheKey, incrementalCacheConfig, incrementalCache, normalizedRevalidate, handleUnlock); + } + // fallthrough + case 'prerender-ppr': + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + case undefined: + return createCachedDynamicResponse(workStore, res, cacheKey, incrementalCacheConfig, incrementalCache, serverComponentsHmrCache, normalizedRevalidate, input, handleUnlock, getRequestMeta('signal')); + default: + workUnitStore; + } + } + // we had response that we determined shouldn't be cached so we return it + // and don't cache it. This also needs to unlock the cache lock we acquired. + await handleUnlock(); + return res; + }).catch((error)=>{ + handleUnlock(); + throw error; + }); + }; + let cacheReasonOverride; + let isForegroundRevalidate = false; + let isHmrRefreshCache = false; + if (cacheKey && incrementalCache) { + let cachedFetchData; + if (isHmrRefresh && serverComponentsHmrCache) { + cachedFetchData = serverComponentsHmrCache.get(cacheKey); + isHmrRefreshCache = true; + } + if (isCacheableRevalidate && !cachedFetchData) { + handleUnlock = await incrementalCache.lock(cacheKey); + const entry = workStore.isOnDemandRevalidate ? null : await incrementalCache.get(cacheKey, { + kind: _responsecache.IncrementalCacheKind.FETCH, + revalidate: finalRevalidate, + fetchUrl, + fetchIdx, + tags, + softTags: implicitTags == null ? void 0 : implicitTags.tags + }); + if (hasNoExplicitCacheConfig && workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-runtime': + // We sometimes use the cache to dedupe fetches that do not + // specify a cache configuration. In these cases we want to + // make sure we still exclude them from prerenders if + // cacheComponents is on so we introduce an artificial task boundary + // here. + await getTimeoutBoundary(); + break; + case 'request': + if (process.env.NODE_ENV === 'development' && workUnitStore.stagedRendering) { + await workUnitStore.stagedRendering.waitForStage(_stagedrendering.RenderStage.Dynamic); + } + break; + case 'prerender-ppr': + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + if (entry) { + await handleUnlock(); + } else { + // in dev, incremental cache response will be null in case the browser adds `cache-control: no-cache` in the request headers + // TODO: it seems like we also hit this after revalidates in dev? + cacheReasonOverride = 'cache-control: no-cache (hard refresh)'; + } + if ((entry == null ? void 0 : entry.value) && entry.value.kind === _responsecache.CachedRouteKind.FETCH) { + // when stale and is revalidating we wait for fresh data + // so the revalidated entry has the updated data + if (workStore.isStaticGeneration && entry.isStale) { + isForegroundRevalidate = true; + } else { + if (entry.isStale) { + workStore.pendingRevalidates ??= {}; + if (!workStore.pendingRevalidates[cacheKey]) { + const pendingRevalidate = doOriginalFetch(true).then(async (response)=>({ + body: await response.arrayBuffer(), + headers: response.headers, + status: response.status, + statusText: response.statusText + })).finally(()=>{ + workStore.pendingRevalidates ??= {}; + delete workStore.pendingRevalidates[cacheKey || '']; + }); + // Attach the empty catch here so we don't get a "unhandled + // promise rejection" warning. + pendingRevalidate.catch(console.error); + workStore.pendingRevalidates[cacheKey] = pendingRevalidate; + } + } + cachedFetchData = entry.value.data; + } + } + } + if (cachedFetchData) { + if (fetchStart) { + trackFetchMetric(workStore, { + start: fetchStart, + url: fetchUrl, + cacheReason, + cacheStatus: isHmrRefreshCache ? 'hmr' : 'hit', + cacheWarning, + status: cachedFetchData.status || 200, + method: (init == null ? void 0 : init.method) || 'GET' + }); + } + const response = new Response(Buffer.from(cachedFetchData.body, 'base64'), { + headers: cachedFetchData.headers, + status: cachedFetchData.status + }); + Object.defineProperty(response, 'url', { + value: cachedFetchData.url + }); + return response; + } + } + if ((workStore.isStaticGeneration || process.env.NODE_ENV === 'development' && process.env.__NEXT_CACHE_COMPONENTS && workUnitStore && // eslint-disable-next-line no-restricted-syntax + workUnitStore.type === 'request' && workUnitStore.stagedRendering) && init && typeof init === 'object') { + const { cache } = init; + // Delete `cache` property as Cloudflare Workers will throw an error + if (isEdgeRuntime) delete init.cache; + if (cache === 'no-store') { + // If enabled, we should bail out of static generation. + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'prerender-runtime': + case 'validation-client': + if (cacheSignal) { + cacheSignal.endRead(); + cacheSignal = null; + } + return (0, _dynamicrenderingutils.makeHangingPromise)(workUnitStore.renderSignal, workStore.route, 'fetch()'); + case 'request': + if (process.env.NODE_ENV === 'development' && workUnitStore.stagedRendering) { + if (cacheSignal) { + cacheSignal.endRead(); + cacheSignal = null; + } + await workUnitStore.stagedRendering.waitForStage(_stagedrendering.RenderStage.Dynamic); + } + break; + case 'prerender-ppr': + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + (0, _dynamicrendering.markCurrentScopeAsDynamic)(workStore, workUnitStore, `no-store fetch ${input} ${workStore.route}`); + } + const hasNextConfig = 'next' in init; + const { next = {} } = init; + if (typeof next.revalidate === 'number' && revalidateStore && next.revalidate < revalidateStore.revalidate) { + if (next.revalidate === 0) { + // If enabled, we should bail out of static generation. + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'prerender-runtime': + case 'validation-client': + return (0, _dynamicrenderingutils.makeHangingPromise)(workUnitStore.renderSignal, workStore.route, 'fetch()'); + case 'request': + if (process.env.NODE_ENV === 'development' && workUnitStore.stagedRendering) { + await workUnitStore.stagedRendering.waitForStage(_stagedrendering.RenderStage.Dynamic); + } + break; + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'prerender-legacy': + case 'prerender-ppr': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + (0, _dynamicrendering.markCurrentScopeAsDynamic)(workStore, workUnitStore, `revalidate: 0 fetch ${input} ${workStore.route}`); + } + if (!workStore.forceStatic || next.revalidate !== 0) { + revalidateStore.revalidate = next.revalidate; + } + } + if (hasNextConfig) delete init.next; + } + // if we are revalidating the whole page via time or on-demand and + // the fetch cache entry is stale we should still de-dupe the + // origin hit if it's a cache-able entry + if (cacheKey && isForegroundRevalidate) { + const pendingRevalidateKey = cacheKey; + workStore.pendingRevalidates ??= {}; + let pendingRevalidate = workStore.pendingRevalidates[pendingRevalidateKey]; + if (pendingRevalidate) { + const revalidatedResult = await pendingRevalidate; + return new Response(revalidatedResult.body, { + headers: revalidatedResult.headers, + status: revalidatedResult.status, + statusText: revalidatedResult.statusText + }); + } + // We used to just resolve the Response and clone it however for + // static generation with cacheComponents we need the response to be able to + // be resolved in a microtask and cloning the response will never have + // a body that can resolve in a microtask in node (as observed through + // experimentation) So instead we await the body and then when it is + // available we construct manually cloned Response objects with the + // body as an ArrayBuffer. This will be resolvable in a microtask + // making it compatible with cacheComponents. + const pendingResponse = doOriginalFetch(true, cacheReasonOverride)// We're cloning the response using this utility because there + // exists a bug in the undici library around response cloning. + // See the following pull request for more details: + // https://github.com/vercel/next.js/pull/73274 + .then(_cloneresponse.cloneResponse); + pendingRevalidate = pendingResponse.then(async (responses)=>{ + const response = responses[0]; + return { + body: await response.arrayBuffer(), + headers: response.headers, + status: response.status, + statusText: response.statusText + }; + }).finally(()=>{ + var _workStore_pendingRevalidates; + // If the pending revalidate is not present in the store, then + // we have nothing to delete. + if (!((_workStore_pendingRevalidates = workStore.pendingRevalidates) == null ? void 0 : _workStore_pendingRevalidates[pendingRevalidateKey])) { + return; + } + delete workStore.pendingRevalidates[pendingRevalidateKey]; + }); + // Attach the empty catch here so we don't get a "unhandled promise + // rejection" warning + pendingRevalidate.catch(()=>{}); + workStore.pendingRevalidates[pendingRevalidateKey] = pendingRevalidate; + return pendingResponse.then((responses)=>responses[1]); + } else { + return doOriginalFetch(false, cacheReasonOverride); + } + }); + if (cacheSignal) { + try { + return await result; + } finally{ + if (cacheSignal) { + cacheSignal.endRead(); + } + } + } + return result; + }; + // Attach the necessary properties to the patched fetch function. + // We don't use this to determine if the fetch function has been patched, + // but for external consumers to determine if the fetch function has been + // patched. + patched.__nextPatched = true; + patched.__nextGetStaticStore = ()=>workAsyncStorage; + patched._nextOriginalFetch = originFetch; + globalThis[NEXT_PATCH_SYMBOL] = true; + // Assign the function name also as a name property, so that it's preserved + // even when mangling is enabled. + Object.defineProperty(patched, 'name', { + value: 'fetch', + writable: false + }); + return patched; +} +function patchFetch(options) { + // If we've already patched fetch, we should not patch it again. + if (isFetchPatched()) return; + // Grab the original fetch function. We'll attach this so we can use it in + // the patched fetch function. + const original = (0, _dedupefetch.createDedupeFetch)(globalThis.fetch); + // Set the global fetch to the patched fetch. + globalThis.fetch = createPatchedFetcher(original, options); +} +let currentTimeoutBoundary = null; +function getTimeoutBoundary() { + if (!currentTimeoutBoundary) { + currentTimeoutBoundary = new Promise((r)=>{ + setTimeout(()=>{ + currentTimeoutBoundary = null; + r(); + }, 0); + }); + } + return currentTimeoutBoundary; +} + +//# sourceMappingURL=patch-fetch.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/patch-set-header.js b/build/node_modules/next/dist/server/lib/patch-set-header.js new file mode 100644 index 0000000..16cdc47 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/patch-set-header.js @@ -0,0 +1,45 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "patchSetHeaderWithCookieSupport", { + enumerable: true, + get: function() { + return patchSetHeaderWithCookieSupport; + } +}); +const _requestmeta = require("../request-meta"); +const PATCHED_SET_HEADER = Symbol('next.patchSetHeaderWithCookieSupport'); +function patchSetHeaderWithCookieSupport(req, res) { + if (res[PATCHED_SET_HEADER]) { + return; + } + const setHeader = res.setHeader.bind(res); + Object.defineProperty(res, PATCHED_SET_HEADER, { + value: true + }); + res.setHeader = (name, value)=>{ + // When renders /_error after page is failed, it could attempt to set + // headers after headers. + if ('headersSent' in res && res.headersSent) { + return res; + } + if (name.toLowerCase() === 'set-cookie') { + const middlewareValue = (0, _requestmeta.getRequestMeta)(req, 'middlewareCookie'); + if (!middlewareValue || !Array.isArray(value) || !value.every((item, idx)=>item === middlewareValue[idx])) { + value = [ + // TODO: (wyattjoh) find out why this is called multiple times resulting in duplicate cookies being added + ...new Set([ + ...middlewareValue || [], + ...typeof value === 'string' ? [ + value + ] : Array.isArray(value) ? value : [] + ]) + ]; + } + } + return setHeader(name, value); + }; +} + +//# sourceMappingURL=patch-set-header.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/postponed-request-body.js b/build/node_modules/next/dist/server/lib/postponed-request-body.js new file mode 100644 index 0000000..41027be --- /dev/null +++ b/build/node_modules/next/dist/server/lib/postponed-request-body.js @@ -0,0 +1,64 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getMaxPostponedStateSize: null, + getPostponedStateExceededErrorMessage: null, + readBodyWithSizeLimit: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getMaxPostponedStateSize: function() { + return getMaxPostponedStateSize; + }, + getPostponedStateExceededErrorMessage: function() { + return getPostponedStateExceededErrorMessage; + }, + readBodyWithSizeLimit: function() { + return readBodyWithSizeLimit; + } +}); +const _sizelimit = require("../../shared/lib/size-limit"); +const INVALID_MAX_POSTPONED_STATE_SIZE_ERROR_MESSAGE = 'maxPostponedStateSize must be a valid number (bytes) or filesize format string (e.g., "5mb")'; +function getMaxPostponedStateSize(configuredMaxPostponedStateSize) { + const maxPostponedStateSize = configuredMaxPostponedStateSize ?? _sizelimit.DEFAULT_MAX_POSTPONED_STATE_SIZE; + const maxPostponedStateSizeBytes = (0, _sizelimit.parseMaxPostponedStateSize)(configuredMaxPostponedStateSize); + if (maxPostponedStateSizeBytes === undefined) { + throw Object.defineProperty(new Error(INVALID_MAX_POSTPONED_STATE_SIZE_ERROR_MESSAGE), "__NEXT_ERROR_CODE", { + value: "E977", + enumerable: false, + configurable: true + }); + } + return { + maxPostponedStateSize, + maxPostponedStateSizeBytes + }; +} +function getPostponedStateExceededErrorMessage(maxPostponedStateSize) { + return `Postponed state exceeded ${maxPostponedStateSize} limit. ` + `To configure the limit, see: https://nextjs.org/docs/app/api-reference/config/next-config-js/max-postponed-state-size`; +} +function toBuffer(chunk) { + return Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk); +} +async function readBodyWithSizeLimit(body, maxBodySizeBytes) { + const chunks = []; + let size = 0; + for await (const chunk of body){ + const buffer = toBuffer(chunk); + size += buffer.byteLength; + if (size > maxBodySizeBytes) { + return null; + } + chunks.push(buffer); + } + return Buffer.concat(chunks); +} + +//# sourceMappingURL=postponed-request-body.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/render-server.js b/build/node_modules/next/dist/server/lib/render-server.js new file mode 100644 index 0000000..21f8180 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/render-server.js @@ -0,0 +1,155 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + clearAllModuleContexts: null, + clearModuleContext: null, + getServerField: null, + initialize: null, + propagateServerField: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + clearAllModuleContexts: function() { + return clearAllModuleContexts; + }, + clearModuleContext: function() { + return clearModuleContext; + }, + getServerField: function() { + return getServerField; + }, + initialize: function() { + return initialize; + }, + propagateServerField: function() { + return propagateServerField; + } +}); +const _next = /*#__PURE__*/ _interop_require_default(require("../next")); +const _interopdefault = require("../../lib/interop-default"); +const _formatdynamicimportpath = require("../../lib/format-dynamic-import-path"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +let initializations = {}; +let sandboxContext; +if (process.env.NODE_ENV !== 'production') { + sandboxContext = require('../web/sandbox/context'); +} +function clearAllModuleContexts() { + return sandboxContext == null ? void 0 : sandboxContext.clearAllModuleContexts(); +} +function clearModuleContext(target) { + return sandboxContext == null ? void 0 : sandboxContext.clearModuleContext(target); +} +async function getServerField(dir, field) { + const initialization = await initializations[dir]; + if (!initialization) { + throw Object.defineProperty(new Error('Invariant cant propagate server field, no app initialized'), "__NEXT_ERROR_CODE", { + value: "E116", + enumerable: false, + configurable: true + }); + } + const { server } = initialization; + let wrappedServer = server['server']// NextServer.server is private + ; + return wrappedServer[field]; +} +async function propagateServerField(dir, field, value) { + const initialization = await initializations[dir]; + if (!initialization) { + throw Object.defineProperty(new Error('Invariant cant propagate server field, no app initialized'), "__NEXT_ERROR_CODE", { + value: "E116", + enumerable: false, + configurable: true + }); + } + const { server } = initialization; + let wrappedServer = server['server']; + const _field = field; + if (wrappedServer) { + if (typeof wrappedServer[_field] === 'function') { + // @ts-expect-error + await wrappedServer[_field].apply(wrappedServer, Array.isArray(value) ? value : []); + } else { + // @ts-expect-error + wrappedServer[_field] = value; + } + } +} +async function initializeImpl(opts) { + const type = process.env.__NEXT_PRIVATE_RENDER_WORKER; + if (type) { + process.title = 'next-render-worker-' + type; + } + let requestHandler; + let upgradeHandler; + const server = (0, _next.default)({ + ...opts, + hostname: opts.hostname || 'localhost', + customServer: false, + httpServer: opts.server, + port: opts.port + })// should return a NextServer when `customServer: false` + ; + // If we're in test mode and there's a debug cache entry handler available, + // then use it to wrap the request handler instead of using the default one. + if (process.env.__NEXT_TEST_MODE && process.env.NEXT_PRIVATE_DEBUG_CACHE_ENTRY_HANDLERS) { + // This mirrors the sole implementation of this over in: + // test/production/standalone-mode/required-server-files/cache-entry-handler.js + const createOnCacheEntryHandlers = (0, _interopdefault.interopDefault)(await import((0, _formatdynamicimportpath.formatDynamicImportPath)(opts.dir, process.env.NEXT_PRIVATE_DEBUG_CACHE_ENTRY_HANDLERS))); + // This is not to be used in any environment other than testing, as it is + // not memoized and is subject to constant change. + requestHandler = async (req, res, parsedUrl)=>{ + // Re re-create the entry handler for each request. This is not + // performant, and is only used in testing environments. + const { // TODO: remove onCacheEntry once onCacheEntryV2 is the default. + onCacheEntry, onCacheEntryV2 } = createOnCacheEntryHandlers(res); + // Get the request handler, using the entry handler as the metadata each + // request. + const handler = server.getRequestHandlerWithMetadata({ + // TODO: remove onCacheEntry once onCacheEntryV2 is the default. + onCacheEntry, + onCacheEntryV2 + }); + return handler(req, res, parsedUrl); + }; + upgradeHandler = server.getUpgradeHandler(); + } else { + requestHandler = server.getRequestHandler(); + upgradeHandler = server.getUpgradeHandler(); + } + await server.prepare(opts.serverFields); + return { + requestHandler, + upgradeHandler, + server, + closeUpgraded () { + var _opts_bundlerService; + (_opts_bundlerService = opts.bundlerService) == null ? void 0 : _opts_bundlerService.close(); + }, + distDir: opts.distDir, + experimentalFeatures: opts.experimentalFeatures, + cacheComponents: opts.cacheComponents + }; +} +async function initialize(opts) { + // if we already setup the server return as we only need to do + // this on first worker boot + if (initializations[opts.dir]) { + return initializations[opts.dir]; + } + return initializations[opts.dir] = initializeImpl(opts); +} + +//# sourceMappingURL=render-server.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/router-server.js b/build/node_modules/next/dist/server/lib/router-server.js new file mode 100644 index 0000000..5d9ca34 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/router-server.js @@ -0,0 +1,699 @@ +// this must come first as it includes require hooks +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "initialize", { + enumerable: true, + get: function() { + return initialize; + } +}); +require("../node-environment"); +require("../require-hook"); +const _url = /*#__PURE__*/ _interop_require_default(require("url")); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _config = /*#__PURE__*/ _interop_require_default(require("../config")); +const _servestatic = require("../serve-static"); +const _debug = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/debug")); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("../../build/output/log")); +const _utils = require("../../shared/lib/utils"); +const _findpagesdir = require("../../lib/find-pages-dir"); +const _filesystem = require("./router-utils/filesystem"); +const _proxyrequest = require("./router-utils/proxy-request"); +const _pipereadable = require("../pipe-readable"); +const _resolveroutes = require("./router-utils/resolve-routes"); +const _requestmeta = require("../request-meta"); +const _pathhasprefix = require("../../shared/lib/router/utils/path-has-prefix"); +const _removepathprefix = require("../../shared/lib/router/utils/remove-path-prefix"); +const _compression = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/compression")); +const _nextrequest = require("../web/spec-extension/adapters/next-request"); +const _ispostpone = require("./router-utils/is-postpone"); +const _parseurl = require("../../shared/lib/router/utils/parse-url"); +const _constants = require("../../shared/lib/constants"); +const _redirectstatuscode = require("../../client/components/redirect-status-code"); +const _devbundlerservice = require("./dev-bundler-service"); +const _trace = require("../../trace"); +const _ensureleadingslash = require("../../shared/lib/page-path/ensure-leading-slash"); +const _getnextpathnameinfo = require("../../shared/lib/router/utils/get-next-pathname-info"); +const _gethostname = require("../../shared/lib/get-hostname"); +const _detectdomainlocale = require("../../shared/lib/i18n/detect-domain-locale"); +const _mockrequest = require("./mock-request"); +const _hotreloadertypes = require("../dev/hot-reloader-types"); +const _normalizedassetprefix = require("../../shared/lib/normalized-asset-prefix"); +const _patchfetch = require("./patch-fetch"); +const _utils1 = require("./server-ipc/utils"); +const _blockcrosssitedev = require("./router-utils/block-cross-site-dev"); +const _shared = require("../../trace/shared"); +const _nofallbackerrorexternal = require("../../shared/lib/no-fallback-error.external"); +const _routerservercontext = require("./router-utils/router-server-context"); +const _chromedevtoolsworkspace = require("./chrome-devtools-workspace"); +const _configshared = require("../config-shared"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +const debug = (0, _debug.default)('next:router-server:main'); +const isNextFont = (pathname)=>pathname && /\/media\/[^/]+\.(woff|woff2|eot|ttf|otf)$/.test(pathname); +const requestHandlers = {}; +async function initialize(opts) { + var _development_bundler, _development_service, _development_service1, _development_service2, _development_service3, _development_service4, _development_bundler1; + if (!process.env.NODE_ENV) { + // @ts-ignore not readonly + process.env.NODE_ENV = opts.dev ? 'development' : 'production'; + } + let experimentalFeatures = []; + const config = await (0, _config.default)(opts.dev ? _constants.PHASE_DEVELOPMENT_SERVER : _constants.PHASE_PRODUCTION_SERVER, opts.dir, { + silent: false, + reportExperimentalFeatures (features) { + experimentalFeatures = features.toSorted(({ key: a }, { key: b })=>a.localeCompare(b)); + } + }); + let compress; + if ((config == null ? void 0 : config.compress) !== false) { + compress = (0, _compression.default)(); + } + const fsChecker = await (0, _filesystem.setupFsCheck)({ + dev: opts.dev, + dir: opts.dir, + config, + minimalMode: opts.minimalMode + }); + const renderServer = {}; + let development = undefined; + let originalFetch = globalThis.fetch; + if (opts.dev) { + var _developmentConfig_experimental; + const { Telemetry } = require('../../telemetry/storage'); + const telemetry = new Telemetry({ + distDir: _path.default.join(opts.dir, config.distDir) + }); + _shared.traceGlobals.set('telemetry', telemetry); + const { pagesDir, appDir } = (0, _findpagesdir.findPagesDir)(opts.dir); + const { setupDevBundler } = require('./router-utils/setup-dev-bundler'); + const resetFetch = ()=>{ + globalThis.fetch = originalFetch; + globalThis[_patchfetch.NEXT_PATCH_SYMBOL] = false; + }; + const setupDevBundlerSpan = opts.startServerSpan ? opts.startServerSpan.traceChild('setup-dev-bundler') : (0, _trace.trace)('setup-dev-bundler'); + // In development, it's always the complete config. + let developmentConfig = config; + // Resolve the effective serverFastRefresh value. + // Both default to enabled (true). CLI takes precedence over config. + const cliServerFastRefresh = opts.serverFastRefresh; + const configServerFastRefresh = (_developmentConfig_experimental = developmentConfig.experimental) == null ? void 0 : _developmentConfig_experimental.turbopackServerFastRefresh; + let effectiveServerFastRefresh; + if (cliServerFastRefresh !== undefined && configServerFastRefresh !== undefined && cliServerFastRefresh !== configServerFastRefresh) { + _log.warn(`The CLI flag "${cliServerFastRefresh === false ? '--no-server-fast-refresh' : '--server-fast-refresh'}" conflicts with "experimental.turbopackServerFastRefresh: ${configServerFastRefresh}" in your Next.js config. The CLI flag will take precedence.`); + effectiveServerFastRefresh = cliServerFastRefresh; + } else { + // Default to true when neither CLI nor config specifies a value. + effectiveServerFastRefresh = cliServerFastRefresh ?? configServerFastRefresh ?? true; + } + let developmentBundler = await setupDevBundlerSpan.traceAsyncFn(()=>setupDevBundler({ + // Passed here but the initialization of this object happens below, doing the initialization before the setupDev call breaks. + renderServer, + appDir, + pagesDir, + telemetry, + fsChecker, + dir: opts.dir, + nextConfig: developmentConfig, + isCustomServer: opts.customServer, + turbo: !!process.env.TURBOPACK, + port: opts.port, + onDevServerCleanup: opts.onDevServerCleanup, + resetFetch, + serverFastRefresh: effectiveServerFastRefresh + })); + let devBundlerService = new _devbundlerservice.DevBundlerService(developmentBundler, // The request handler is assigned below, this allows us to create a lazy + // reference to it. + (req, res)=>{ + return requestHandlers[opts.dir](req, res); + }); + development = { + bundler: developmentBundler, + service: devBundlerService, + config: developmentConfig + }; + } + renderServer.instance = require('./render-server'); + const requestHandlerImpl = async (req, res)=>{ + (0, _requestmeta.addRequestMeta)(req, 'relativeProjectDir', relativeProjectDir); + // internal headers should not be honored by the request handler + if (!process.env.NEXT_PRIVATE_TEST_HEADERS) { + (0, _utils1.filterInternalHeaders)(req.headers); + } + if (!opts.minimalMode && config.i18n && config.i18n.localeDetection !== false) { + var _this; + const urlParts = (req.url || '').split('?', 1); + let urlNoQuery = urlParts[0] || ''; + if (config.basePath) { + urlNoQuery = (0, _removepathprefix.removePathPrefix)(urlNoQuery, config.basePath); + } + const pathnameInfo = (0, _getnextpathnameinfo.getNextPathnameInfo)(urlNoQuery, { + nextConfig: config + }); + const domainLocale = (0, _detectdomainlocale.detectDomainLocale)(config.i18n.domains, (0, _gethostname.getHostname)({ + hostname: urlNoQuery + }, req.headers)); + const defaultLocale = (domainLocale == null ? void 0 : domainLocale.defaultLocale) || config.i18n.defaultLocale; + const { getLocaleRedirect } = require('../../shared/lib/i18n/get-locale-redirect'); + const parsedUrl = (0, _parseurl.parseUrl)((_this = req.url || '') == null ? void 0 : _this.replace(/^\/+/, '/')); + const redirect = getLocaleRedirect({ + defaultLocale, + domainLocale, + headers: req.headers, + nextConfig: config, + pathLocale: pathnameInfo.locale, + urlParsed: { + ...parsedUrl, + pathname: pathnameInfo.locale ? `/${pathnameInfo.locale}${urlNoQuery}` : urlNoQuery + } + }); + if (redirect) { + res.setHeader('Location', redirect); + res.statusCode = _redirectstatuscode.RedirectStatusCode.TemporaryRedirect; + res.end(redirect); + return; + } + } + if (compress) { + // @ts-expect-error not express req/res + compress(req, res, ()=>{}); + } + req.on('error', (_err)=>{ + // TODO: log socket errors? + }); + res.on('error', (_err)=>{ + // TODO: log socket errors? + }); + const invokedOutputs = new Set(); + async function invokeRender(parsedUrl, invokePath, handleIndex, additionalRequestMeta) { + var _fsChecker_getMiddlewareMatchers; + // invokeRender expects /api routes to not be locale prefixed + // so normalize here before continuing + if (config.i18n && (0, _removepathprefix.removePathPrefix)(invokePath, config.basePath).startsWith(`/${(0, _requestmeta.getRequestMeta)(req, 'locale')}/api`)) { + invokePath = fsChecker.handleLocale((0, _removepathprefix.removePathPrefix)(invokePath, config.basePath)).pathname; + } + if (req.headers['x-nextjs-data'] && ((_fsChecker_getMiddlewareMatchers = fsChecker.getMiddlewareMatchers()) == null ? void 0 : _fsChecker_getMiddlewareMatchers.length) && (0, _removepathprefix.removePathPrefix)(invokePath, config.basePath) === '/404') { + res.setHeader('x-nextjs-matched-path', parsedUrl.pathname || ''); + res.statusCode = 404; + res.setHeader('content-type', 'application/json'); + res.end('{}'); + return null; + } + if (!handlers) { + throw Object.defineProperty(new Error('Failed to initialize render server'), "__NEXT_ERROR_CODE", { + value: "E90", + enumerable: false, + configurable: true + }); + } + (0, _requestmeta.addRequestMeta)(req, 'invokePath', invokePath); + (0, _requestmeta.addRequestMeta)(req, 'invokeQuery', parsedUrl.query); + (0, _requestmeta.addRequestMeta)(req, 'middlewareInvoke', false); + for(const key in additionalRequestMeta || {}){ + (0, _requestmeta.addRequestMeta)(req, key, additionalRequestMeta[key]); + } + debug('invokeRender', req.url, req.headers); + try { + var _renderServer_instance; + const initResult = await (renderServer == null ? void 0 : (_renderServer_instance = renderServer.instance) == null ? void 0 : _renderServer_instance.initialize(renderServerOpts)); + try { + await (initResult == null ? void 0 : initResult.requestHandler(req, res)); + } catch (err) { + if (err instanceof _nofallbackerrorexternal.NoFallbackError) { + await handleRequest(handleIndex + 1); + return; + } + throw err; + } + return; + } catch (e) { + // If the client aborts before we can receive a response object (when + // the headers are flushed), then we can early exit without further + // processing. + if ((0, _pipereadable.isAbortError)(e)) { + return; + } + throw e; + } + } + const handleRequest = async (handleIndex)=>{ + var _development_bundler; + if (handleIndex > 5) { + throw Object.defineProperty(new Error(`Attempted to handle request too many times ${req.url}`), "__NEXT_ERROR_CODE", { + value: "E283", + enumerable: false, + configurable: true + }); + } + // handle hot-reloader first + if (development) { + if ((0, _blockcrosssitedev.blockCrossSiteDEV)(req, res, development.config.allowedDevOrigins, opts.hostname)) { + return; + } + const origUrl = req.url || '/'; + // both the basePath and assetPrefix need to be stripped from the URL + // so that the development bundler can find the correct file + if (config.basePath && (0, _pathhasprefix.pathHasPrefix)(origUrl, config.basePath)) { + req.url = (0, _removepathprefix.removePathPrefix)(origUrl, config.basePath); + } else if (config.assetPrefix && (0, _pathhasprefix.pathHasPrefix)(origUrl, config.assetPrefix)) { + req.url = (0, _removepathprefix.removePathPrefix)(origUrl, config.assetPrefix); + } + const parsedUrl = (0, _parseurl.parseUrl)(req.url || '/'); + const hotReloaderResult = await development.bundler.hotReloader.run(req, res, parsedUrl); + if (hotReloaderResult.finished) { + return hotReloaderResult; + } + req.url = origUrl; + } + const { finished, parsedUrl, statusCode, resHeaders, bodyStream, matchedOutput } = await resolveRoutes({ + req, + res, + isUpgradeReq: false, + signal: (0, _nextrequest.signalFromNodeResponse)(res), + invokedOutputs + }); + if (res.closed || res.finished) { + return; + } + if (development && (matchedOutput == null ? void 0 : matchedOutput.type) === 'devVirtualFsItem') { + const origUrl = req.url || '/'; + if (config.basePath && (0, _pathhasprefix.pathHasPrefix)(origUrl, config.basePath)) { + req.url = (0, _removepathprefix.removePathPrefix)(origUrl, config.basePath); + } else if (config.assetPrefix && (0, _pathhasprefix.pathHasPrefix)(origUrl, config.assetPrefix)) { + req.url = (0, _removepathprefix.removePathPrefix)(origUrl, config.assetPrefix); + } + if (resHeaders !== null) { + for (const key of Object.keys(resHeaders)){ + res.setHeader(key, resHeaders[key]); + } + } + const result = await development.bundler.requestHandler(req, res); + if (result.finished) { + return; + } + // TODO: throw invariant if we resolved to this but it wasn't handled? + req.url = origUrl; + } + debug('requestHandler!', req.url, { + matchedOutput, + statusCode, + resHeaders, + bodyStream: !!bodyStream, + parsedUrl: { + pathname: parsedUrl.pathname, + query: parsedUrl.query + }, + finished + }); + // apply any response headers from routing + if (resHeaders !== null) { + for (const key of Object.keys(resHeaders)){ + res.setHeader(key, resHeaders[key]); + } + } + // handle redirect + if (!bodyStream && statusCode && statusCode > 300 && statusCode < 400) { + const destination = _url.default.format(parsedUrl); + res.statusCode = statusCode; + res.setHeader('location', destination); + if (statusCode === _redirectstatuscode.RedirectStatusCode.PermanentRedirect) { + res.setHeader('Refresh', `0;url=${destination}`); + } + return res.end(destination); + } + // handle middleware body response + if (bodyStream) { + res.statusCode = statusCode || 200; + return await (0, _pipereadable.pipeToNodeResponse)(bodyStream, res); + } + if (finished && parsedUrl.protocol) { + var _getRequestMeta; + return await (0, _proxyrequest.proxyRequest)(req, res, parsedUrl, undefined, (_getRequestMeta = (0, _requestmeta.getRequestMeta)(req, 'clonableBody')) == null ? void 0 : _getRequestMeta.cloneBodyStream(), config.experimental.proxyTimeout); + } + if ((matchedOutput == null ? void 0 : matchedOutput.fsPath) && matchedOutput.itemPath) { + if (opts.dev && (fsChecker.appFiles.has(matchedOutput.itemPath) || fsChecker.pageFiles.has(matchedOutput.itemPath))) { + res.statusCode = 500; + const message = `A conflicting public file and page file was found for path ${matchedOutput.itemPath} https://nextjs.org/docs/messages/conflicting-public-file-page`; + await invokeRender(parsedUrl, '/_error', handleIndex, { + invokeStatus: 500, + invokeError: Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E212", + enumerable: false, + configurable: true + }) + }); + _log.error(message); + return; + } + if (!res.getHeader('cache-control') && matchedOutput.type === 'nextStaticFolder') { + if (opts.dev && !isNextFont(parsedUrl.pathname)) { + res.setHeader('Cache-Control', 'no-cache, must-revalidate'); + } else { + res.setHeader('Cache-Control', 'public, max-age=31536000, immutable'); + } + } + if (!(req.method === 'GET' || req.method === 'HEAD')) { + res.setHeader('Allow', [ + 'GET', + 'HEAD' + ]); + res.statusCode = 405; + return await invokeRender((0, _parseurl.parseUrl)('/405'), '/405', handleIndex, { + invokeStatus: 405 + }); + } + try { + return await (0, _servestatic.serveStatic)(req, res, matchedOutput.itemPath, { + root: matchedOutput.itemsRoot, + // Ensures that etags are not generated for static files when disabled. + etag: config.generateEtags + }); + } catch (err) { + /** + * Hardcoded every possible error status code that could be thrown by "serveStatic" method + * This is done by searching "this.error" inside "send" module's source code: + * https://github.com/pillarjs/send/blob/master/index.js + * https://github.com/pillarjs/send/blob/develop/index.js + */ const POSSIBLE_ERROR_CODE_FROM_SERVE_STATIC = new Set([ + // send module will throw 500 when header is already sent or fs.stat error happens + // https://github.com/pillarjs/send/blob/53f0ab476145670a9bdd3dc722ab2fdc8d358fc6/index.js#L392 + // Note: we will use Next.js built-in 500 page to handle 500 errors + // 500, + // send module will throw 404 when file is missing + // https://github.com/pillarjs/send/blob/53f0ab476145670a9bdd3dc722ab2fdc8d358fc6/index.js#L421 + // Note: we will use Next.js built-in 404 page to handle 404 errors + // 404, + // send module will throw 403 when redirecting to a directory without enabling directory listing + // https://github.com/pillarjs/send/blob/53f0ab476145670a9bdd3dc722ab2fdc8d358fc6/index.js#L484 + // Note: Next.js throws a different error (without status code) for directory listing + // 403, + // send module will throw 400 when fails to normalize the path + // https://github.com/pillarjs/send/blob/53f0ab476145670a9bdd3dc722ab2fdc8d358fc6/index.js#L520 + 400, + // send module will throw 412 with conditional GET request + // https://github.com/pillarjs/send/blob/53f0ab476145670a9bdd3dc722ab2fdc8d358fc6/index.js#L632 + 412, + // send module will throw 416 when range is not satisfiable + // https://github.com/pillarjs/send/blob/53f0ab476145670a9bdd3dc722ab2fdc8d358fc6/index.js#L669 + 416 + ]); + let validErrorStatus = POSSIBLE_ERROR_CODE_FROM_SERVE_STATIC.has(err.statusCode); + // normalize non-allowed status codes + if (!validErrorStatus) { + ; + err.statusCode = 400; + } + if (typeof err.statusCode === 'number') { + const invokePath = `/${err.statusCode}`; + const invokeStatus = err.statusCode; + res.statusCode = err.statusCode; + return await invokeRender((0, _parseurl.parseUrl)(invokePath), invokePath, handleIndex, { + invokeStatus + }); + } + throw err; + } + } + if (matchedOutput) { + invokedOutputs.add(matchedOutput.itemPath); + return await invokeRender(parsedUrl, parsedUrl.pathname || '/', handleIndex, { + invokeOutput: matchedOutput.itemPath + }); + } + // We want the original pathname without any basePath or proxy rewrites. + if (development && (0, _chromedevtoolsworkspace.isChromeDevtoolsWorkspaceUrl)(req.url)) { + await (0, _chromedevtoolsworkspace.handleChromeDevtoolsWorkspaceRequest)(res, opts, config); + return; + } + // 404 case + res.setHeader('Cache-Control', 'private, no-cache, no-store, max-age=0, must-revalidate'); + let realRequestPathname = parsedUrl.pathname ?? ''; + if (realRequestPathname) { + if (config.basePath) { + realRequestPathname = (0, _removepathprefix.removePathPrefix)(realRequestPathname, config.basePath); + } + if (config.assetPrefix) { + realRequestPathname = (0, _removepathprefix.removePathPrefix)(realRequestPathname, config.assetPrefix); + } + if (config.i18n) { + realRequestPathname = (0, _removepathprefix.removePathPrefix)(realRequestPathname, '/' + ((0, _requestmeta.getRequestMeta)(req, 'locale') ?? '')); + } + } + // For not found static assets, return plain text 404 instead of + // full HTML 404 pages to save bandwidth. + if (realRequestPathname.startsWith('/_next/static/')) { + res.statusCode = 404; + res.setHeader('Content-Type', 'text/plain; charset=utf-8'); + res.end('Not Found'); + return null; + } + // Short-circuit favicon.ico serving so that the 404 page doesn't get built as favicon is requested by the browser when loading any route. + if (opts.dev && !matchedOutput && parsedUrl.pathname === '/favicon.ico') { + res.statusCode = 404; + res.end(''); + return null; + } + const appNotFound = opts.dev ? development == null ? void 0 : (_development_bundler = development.bundler) == null ? void 0 : _development_bundler.serverFields.hasAppNotFound : await fsChecker.getItem(_constants.UNDERSCORE_NOT_FOUND_ROUTE); + res.statusCode = 404; + if (appNotFound) { + return await invokeRender(parsedUrl, _constants.UNDERSCORE_NOT_FOUND_ROUTE, handleIndex, { + invokeStatus: 404 + }); + } + await invokeRender(parsedUrl, '/404', handleIndex, { + invokeStatus: 404 + }); + }; + try { + await handleRequest(0); + } catch (err) { + try { + let invokePath = '/500'; + let invokeStatus = '500'; + if (err instanceof _utils.DecodeError) { + invokePath = '/400'; + invokeStatus = '400'; + } else { + console.error(err); + } + res.statusCode = Number(invokeStatus); + return await invokeRender((0, _parseurl.parseUrl)(invokePath), invokePath, 0, { + invokeStatus: res.statusCode + }); + } catch (err2) { + console.error(err2); + } + res.statusCode = 500; + res.end('Internal Server Error'); + } + }; + let requestHandler = requestHandlerImpl; + if (config.experimental.testProxy) { + // Intercept fetch and other testmode apis. + const { wrapRequestHandlerWorker, interceptTestApis } = // eslint-disable-next-line @next/internal/typechecked-require -- experimental/testmode is not built ins next/dist/esm + require('next/dist/experimental/testmode/server'); + requestHandler = wrapRequestHandlerWorker(requestHandler); + interceptTestApis(); + // We treat the intercepted fetch as "original" fetch that should be reset to during HMR. + originalFetch = globalThis.fetch; + } + requestHandlers[opts.dir] = requestHandler; + const renderServerOpts = { + port: opts.port, + dir: opts.dir, + hostname: opts.hostname, + minimalMode: opts.minimalMode, + dev: !!opts.dev, + server: opts.server, + serverFields: { + ...(development == null ? void 0 : (_development_bundler = development.bundler) == null ? void 0 : _development_bundler.serverFields) || {}, + setIsrStatus: development == null ? void 0 : (_development_service = development.service) == null ? void 0 : _development_service.setIsrStatus.bind(development == null ? void 0 : development.service) + }, + experimentalTestProxy: !!config.experimental.testProxy, + experimentalHttpsServer: !!opts.experimentalHttpsServer, + bundlerService: development == null ? void 0 : development.service, + startServerSpan: opts.startServerSpan, + quiet: opts.quiet, + onDevServerCleanup: opts.onDevServerCleanup, + distDir: config.distDir, + experimentalFeatures, + cacheComponents: config.cacheComponents + }; + renderServerOpts.serverFields.routerServerHandler = requestHandlerImpl; + // pre-initialize workers + const handlers = await renderServer.instance.initialize(renderServerOpts); + // this must come after initialize of render server since it's + // using initialized methods + if (!_routerservercontext.routerServerGlobal[_routerservercontext.RouterServerContextSymbol]) { + _routerservercontext.routerServerGlobal[_routerservercontext.RouterServerContextSymbol] = {}; + } + const relativeProjectDir = _path.default.relative(process.cwd(), opts.dir); + _routerservercontext.routerServerGlobal[_routerservercontext.RouterServerContextSymbol][relativeProjectDir] = { + nextConfig: (0, _configshared.getNextConfigRuntime)(config), + hostname: handlers.server.hostname, + revalidate: handlers.server.revalidate.bind(handlers.server), + render404: handlers.server.render404.bind(handlers.server), + experimentalTestProxy: renderServerOpts.experimentalTestProxy, + logErrorWithOriginalStack: opts.dev ? handlers.server.logErrorWithOriginalStack.bind(handlers.server) : (err)=>!opts.quiet && _log.error(err), + setCacheStatus: config.cacheComponents ? development == null ? void 0 : (_development_service1 = development.service) == null ? void 0 : _development_service1.setCacheStatus.bind(development == null ? void 0 : development.service) : undefined, + setIsrStatus: development == null ? void 0 : (_development_service2 = development.service) == null ? void 0 : _development_service2.setIsrStatus.bind(development == null ? void 0 : development.service), + setReactDebugChannel: (development == null ? void 0 : development.config.experimental.reactDebugChannel) ? development == null ? void 0 : (_development_service3 = development.service) == null ? void 0 : _development_service3.setReactDebugChannel.bind(development == null ? void 0 : development.service) : undefined, + sendErrorsToBrowser: development == null ? void 0 : (_development_service4 = development.service) == null ? void 0 : _development_service4.sendErrorsToBrowser.bind(development == null ? void 0 : development.service) + }; + const logError = async (type, err)=>{ + if ((0, _ispostpone.isPostpone)(err)) { + // React postpones that are unhandled might end up logged here but they're + // not really errors. They're just part of rendering. + return; + } + if (type === 'unhandledRejection') { + _log.error('unhandledRejection: ', err); + } else if (type === 'uncaughtException') { + _log.error('uncaughtException: ', err); + } + }; + process.on('uncaughtException', logError.bind(null, 'uncaughtException')); + process.on('unhandledRejection', logError.bind(null, 'unhandledRejection')); + const resolveRoutes = (0, _resolveroutes.getResolveRoutes)(fsChecker, config, opts, renderServer.instance, renderServerOpts, development == null ? void 0 : (_development_bundler1 = development.bundler) == null ? void 0 : _development_bundler1.ensureMiddleware); + const upgradeHandler = async (req, socket, head)=>{ + try { + req.on('error', (_err)=>{ + // TODO: log socket errors? + // console.error(_err); + }); + socket.on('error', (_err)=>{ + // TODO: log socket errors? + // console.error(_err); + }); + if (opts.dev && development && req.url) { + if ((0, _blockcrosssitedev.blockCrossSiteDEV)(req, socket, development.config.allowedDevOrigins, opts.hostname)) { + return; + } + const { basePath, assetPrefix } = config; + let hmrPrefix = basePath; + // assetPrefix overrides basePath for HMR path + if (assetPrefix) { + hmrPrefix = (0, _normalizedassetprefix.normalizedAssetPrefix)(assetPrefix); + if (URL.canParse(hmrPrefix)) { + // remove trailing slash from pathname + // return empty string if pathname is '/' + // to avoid conflicts with '/_next' below + hmrPrefix = new URL(hmrPrefix).pathname.replace(/\/$/, ''); + } + } + const isHMRRequest = req.url.startsWith((0, _ensureleadingslash.ensureLeadingSlash)(`${hmrPrefix}/_next/webpack-hmr`)); + // only handle HMR requests if the basePath in the request + // matches the basePath for the handler responding to the request + if (isHMRRequest) { + return development.bundler.hotReloader.onHMR(req, socket, head, (client, { isLegacyClient })=>{ + if (isLegacyClient) { + var _development_service; + // Only send the ISR manifest to legacy clients, i.e. Pages + // Router clients, or App Router clients that have Cache + // Components disabled. The ISR manifest is only used to inform + // the static indicator, which currently does not provide useful + // information if Cache Components is enabled due to its binary + // nature (i.e. it does not support showing info for partially + // static pages). + client.send(JSON.stringify({ + type: _hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.ISR_MANIFEST, + data: ((_development_service = development.service) == null ? void 0 : _development_service.appIsrManifest) || {} + })); + } + }); + } + } + const res = new _mockrequest.MockedResponse({ + resWriter: ()=>{ + throw Object.defineProperty(new Error('Invariant: did not expect response writer to be written to for upgrade request'), "__NEXT_ERROR_CODE", { + value: "E522", + enumerable: false, + configurable: true + }); + } + }); + const { finished, matchedOutput, parsedUrl, statusCode } = await resolveRoutes({ + req, + res, + isUpgradeReq: true, + signal: (0, _nextrequest.signalFromNodeResponse)(socket) + }); + // TODO: allow upgrade requests to pages/app paths? + // this was not previously supported + if (matchedOutput) { + return socket.end(); + } + if (finished && parsedUrl.protocol) { + if (!statusCode) { + return await (0, _proxyrequest.proxyRequest)(req, socket, parsedUrl, head); + } + return socket.end(); + } + // If there's no matched output, we don't handle the request as user's + // custom WS server may be listening on the same path. + } catch (err) { + console.error('Error handling upgrade request', err); + socket.end(); + } + }; + return { + requestHandler, + upgradeHandler, + server: handlers.server, + closeUpgraded () { + var _development_bundler_hotReloader, _development_bundler; + development == null ? void 0 : (_development_bundler = development.bundler) == null ? void 0 : (_development_bundler_hotReloader = _development_bundler.hotReloader) == null ? void 0 : _development_bundler_hotReloader.close(); + }, + distDir: config.distDir, + experimentalFeatures, + cacheComponents: config.cacheComponents + }; +} + +//# sourceMappingURL=router-server.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/router-utils/block-cross-site-dev.js b/build/node_modules/next/dist/server/lib/router-utils/block-cross-site-dev.js new file mode 100644 index 0000000..b197263 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/router-utils/block-cross-site-dev.js @@ -0,0 +1,110 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "blockCrossSiteDEV", { + enumerable: true, + get: function() { + return blockCrossSiteDEV; + } +}); +const _url = require("../../../lib/url"); +const _log = require("../../../build/output/log"); +const _csrfprotection = require("../../app-render/csrf-protection"); +const allowedDevOriginsDocs = 'https://nextjs.org/docs/app/api-reference/config/next-config-js/allowedDevOrigins'; +function getBlockedResourcePath(req) { + var _parseUrl; + return ((_parseUrl = (0, _url.parseUrl)(req.url ?? '')) == null ? void 0 : _parseUrl.pathname) ?? req.url ?? '/_next/*'; +} +function formatBlockedCrossSiteMessage(source, resourcePath) { + const lines = [ + `Blocked cross-origin request to Next.js dev resource ${resourcePath}${getBlockedSourceDescription(source)}.`, + 'Cross-origin access to Next.js dev resources is blocked by default for safety.' + ]; + // `source` has 3 meanings here: + // - `'null'`: browser explicitly sent `Origin: null` for an opaque/sandboxed origin + // - hostname string: we parsed an allowlistable host from Origin/Referer + // - `undefined` (and effectively empty string): the request did not include a usable host + if (source === 'null') { + lines.push('', 'This request came from a privacy-sensitive or opaque origin, so Next.js cannot determine which host to allow.', 'If you need it to succeed, load the dev server from a normal origin and add that host to "allowedDevOrigins".'); + } else if (source) { + lines.push('', 'To allow this host in development, add it to "allowedDevOrigins" in next.config.js and restart the dev server:', '', '// next.config.js', 'module.exports = {', ` allowedDevOrigins: ['${source}'],`, '}'); + } else { + lines.push('', 'This request did not include an allowlistable source host.', 'If you need it to succeed, make sure the browser sends an Origin or Referer from a host listed in "allowedDevOrigins".'); + } + lines.push('', `Read more: ${allowedDevOriginsDocs}`); + return lines.join('\n'); +} +function getBlockedSourceDescription(source) { + if (source === 'null') { + return ' from a privacy-sensitive or opaque origin'; + } + if (source) { + return ` from "${source}"`; + } + return ' from an unknown source'; +} +function blockRequest(req, res, source) { + (0, _log.warnOnce)(formatBlockedCrossSiteMessage(source, getBlockedResourcePath(req))); + if ('statusCode' in res) { + res.statusCode = 403; + } + res.end('Unauthorized'); + return true; +} +function parseHostnameFromHeader(header) { + const headerValue = Array.isArray(header) ? header[0] : header; + if (!headerValue || headerValue === 'null') { + return; + } + const parsedHeader = (0, _url.parseUrl)(headerValue); + return parsedHeader == null ? void 0 : parsedHeader.hostname.toLowerCase(); +} +function isInternalEndpoint(req) { + if (!req.url) return false; + try { + // TODO: We should standardize on a single prefix for this + const isMiddlewareRequest = req.url.includes('/__nextjs'); + const isInternalAsset = req.url.includes('/_next'); + // Static media requests are excluded, as they might be loaded via CSS and would fail + // CORS checks. + const isIgnoredRequest = req.url.includes('/_next/image') || req.url.includes('/_next/static/media'); + return !isIgnoredRequest && (isInternalAsset || isMiddlewareRequest); + } catch (err) { + return false; + } +} +const blockCrossSiteDEV = (req, res, allowedDevOrigins, hostname)=>{ + const allowedOrigins = [ + '*.localhost', + 'localhost', + ...allowedDevOrigins ?? [] + ]; + if (hostname) { + allowedOrigins.push(hostname); + } + // only process internal URLs/middleware + if (!isInternalEndpoint(req)) { + return false; + } + // block non-cors request from cross-site e.g. script tag on + // different host + if (req.headers['sec-fetch-mode'] === 'no-cors' && req.headers['sec-fetch-site'] === 'cross-site') { + // no-cors requests do not send an Origin header, so fall back to Referer + // when validating configured cross-site script loads. + const refererHostname = parseHostnameFromHeader(req.headers['referer']); + if (refererHostname && (0, _csrfprotection.isCsrfOriginAllowed)(refererHostname, allowedOrigins)) { + return false; + } + return blockRequest(req, res, refererHostname); + } + // ensure websocket requests are only fulfilled from allowed origin + const rawOrigin = req.headers['origin']; + const originHeader = Array.isArray(rawOrigin) ? rawOrigin[0] : rawOrigin; + const parsedOrigin = originHeader && originHeader !== 'null' ? (0, _url.parseUrl)(originHeader) : originHeader; + const originLowerCase = parsedOrigin === undefined || typeof parsedOrigin === 'string' ? parsedOrigin : parsedOrigin.hostname.toLowerCase(); + // Allow requests with no origin since those are just GET requests from same-site + return originLowerCase !== undefined && !(0, _csrfprotection.isCsrfOriginAllowed)(originLowerCase, allowedOrigins) && blockRequest(req, res, originLowerCase); +}; + +//# sourceMappingURL=block-cross-site-dev.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/router-utils/build-data-route.js b/build/node_modules/next/dist/server/lib/router-utils/build-data-route.js new file mode 100644 index 0000000..9c17b9b --- /dev/null +++ b/build/node_modules/next/dist/server/lib/router-utils/build-data-route.js @@ -0,0 +1,48 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "buildDataRoute", { + enumerable: true, + get: function() { + return buildDataRoute; + } +}); +const _path = /*#__PURE__*/ _interop_require_default(require("../../../shared/lib/isomorphic/path")); +const _normalizepagepath = require("../../../shared/lib/page-path/normalize-page-path"); +const _isdynamic = require("../../../shared/lib/router/utils/is-dynamic"); +const _routeregex = require("../../../shared/lib/router/utils/route-regex"); +const _loadcustomroutes = require("../../../lib/load-custom-routes"); +const _escaperegexp = require("../../../shared/lib/escape-regexp"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function buildDataRoute(page, buildId) { + const pagePath = (0, _normalizepagepath.normalizePagePath)(page); + const dataRoute = _path.default.posix.join('/_next/data', buildId, `${pagePath}.json`); + let dataRouteRegex; + let namedDataRouteRegex; + let routeKeys; + if ((0, _isdynamic.isDynamicRoute)(page)) { + const routeRegex = (0, _routeregex.getNamedRouteRegex)(dataRoute, { + prefixRouteKeys: true, + includeSuffix: true, + excludeOptionalTrailingSlash: true + }); + dataRouteRegex = (0, _loadcustomroutes.normalizeRouteRegex)(routeRegex.re.source); + namedDataRouteRegex = routeRegex.namedRegex; + routeKeys = routeRegex.routeKeys; + } else { + dataRouteRegex = (0, _loadcustomroutes.normalizeRouteRegex)(new RegExp(`^${_path.default.posix.join('/_next/data', (0, _escaperegexp.escapeStringRegexp)(buildId), `${pagePath}\\.json`)}$`).source); + } + return { + page, + routeKeys, + dataRouteRegex, + namedDataRouteRegex + }; +} + +//# sourceMappingURL=build-data-route.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.js b/build/node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.js new file mode 100644 index 0000000..4448239 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.js @@ -0,0 +1,50 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + SEGMENT_PATH_KEY: null, + buildPrefetchSegmentDataRoute: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + SEGMENT_PATH_KEY: function() { + return SEGMENT_PATH_KEY; + }, + buildPrefetchSegmentDataRoute: function() { + return buildPrefetchSegmentDataRoute; + } +}); +const _path = /*#__PURE__*/ _interop_require_default(require("../../../shared/lib/isomorphic/path")); +const _normalizepagepath = require("../../../shared/lib/page-path/normalize-page-path"); +const _routeregex = require("../../../shared/lib/router/utils/route-regex"); +const _constants = require("../../../lib/constants"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const SEGMENT_PATH_KEY = 'nextSegmentPath'; +function buildPrefetchSegmentDataRoute(page, segmentPath) { + const pagePath = (0, _normalizepagepath.normalizePagePath)(page); + const destination = _path.default.posix.join(`${pagePath}${_constants.RSC_SEGMENTS_DIR_SUFFIX}`, `${segmentPath}${_constants.RSC_SEGMENT_SUFFIX}`); + const { namedRegex, routeKeys } = (0, _routeregex.getNamedRouteRegex)(destination, { + prefixRouteKeys: true, + includePrefix: true, + includeSuffix: true, + excludeOptionalTrailingSlash: true, + backreferenceDuplicateKeys: true + }); + return { + destination, + source: namedRegex, + routeKeys + }; +} + +//# sourceMappingURL=build-prefetch-segment-data-route.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/router-utils/cache-life-type-utils.js b/build/node_modules/next/dist/server/lib/router-utils/cache-life-type-utils.js new file mode 100644 index 0000000..af698d6 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/router-utils/cache-life-type-utils.js @@ -0,0 +1,211 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + generateCacheLifeTypes: null, + writeCacheLifeTypes: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + generateCacheLifeTypes: function() { + return generateCacheLifeTypes; + }, + writeCacheLifeTypes: function() { + return writeCacheLifeTypes; + } +}); +const _fs = /*#__PURE__*/ _interop_require_default(require("fs")); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const MINUTE_IN_SECONDS = 60; +const HOUR_IN_SECONDS = MINUTE_IN_SECONDS * 60 // nevermind leap seconds +; +const DAY_IN_SECONDS = HOUR_IN_SECONDS * 24; +const WEEK_IN_SECONDS = DAY_IN_SECONDS * 7; +// Nevermind leap years, or you know, July +const MONTH_30_DAYS_IN_SECONDS = DAY_IN_SECONDS * 30; +function formatTimespan(seconds) { + if (seconds > 0) { + if (seconds === MONTH_30_DAYS_IN_SECONDS) { + return '1 month'; + } + if (seconds === WEEK_IN_SECONDS) { + return '1 week'; + } + if (seconds === DAY_IN_SECONDS) { + return '1 day'; + } + if (seconds === HOUR_IN_SECONDS) { + return '1 hour'; + } + if (seconds === MINUTE_IN_SECONDS) { + return '1 minute'; + } + if (seconds % MONTH_30_DAYS_IN_SECONDS === 0) { + return seconds / MONTH_30_DAYS_IN_SECONDS + ' months'; + } + if (seconds % 18144000 === 0) { + return seconds / 18144000 + ' months'; + } + if (seconds % WEEK_IN_SECONDS === 0) { + return seconds / WEEK_IN_SECONDS + ' weeks'; + } + if (seconds % DAY_IN_SECONDS === 0) { + return seconds / DAY_IN_SECONDS + ' days'; + } + if (seconds % HOUR_IN_SECONDS === 0) { + return seconds / HOUR_IN_SECONDS + ' hours'; + } + if (seconds % MINUTE_IN_SECONDS === 0) { + return seconds / MINUTE_IN_SECONDS + ' minutes'; + } + } + return seconds + ' seconds'; +} +function formatTimespanWithSeconds(seconds) { + if (seconds === undefined) { + return 'default'; + } + if (seconds >= 0xfffffffe) { + return 'never'; + } + const text = seconds + ' seconds'; + const descriptive = formatTimespan(seconds); + if (descriptive === text) { + return text; + } + return text + ' (' + descriptive + ')'; +} +function generateCacheLifeTypes(cacheLife) { + let overloads = ''; + const profileNames = Object.keys(cacheLife); + for(let i = 0; i < profileNames.length; i++){ + const profileName = profileNames[i]; + const profile = cacheLife[profileName]; + if (typeof profile !== 'object' || profile === null) { + continue; + } + let description = ''; + if (profile.stale === undefined) { + description += ` + * This cache may be stale on clients for the default stale time of the scope before checking with the server.`; + } else if (profile.stale >= 0xfffffffe) { + description += ` + * This cache may be stale on clients indefinitely before checking with the server.`; + } else { + description += ` + * This cache may be stale on clients for ${formatTimespan(profile.stale)} before checking with the server.`; + } + if (profile.revalidate !== undefined && profile.expire !== undefined && profile.revalidate >= profile.expire) { + description += ` + * This cache will expire after ${formatTimespan(profile.expire)}. The next request will recompute it.`; + } else { + if (profile.revalidate === undefined) { + description += ` + * It will inherit the default revalidate time of its scope since it does not define its own.`; + } else if (profile.revalidate >= 0xfffffffe) { + // Nothing to mention. + } else { + description += ` + * If the server receives a new request after ${formatTimespan(profile.revalidate)}, start revalidating new values in the background.`; + } + if (profile.expire === undefined) { + description += ` + * It will inherit the default expiration time of its scope since it does not define its own.`; + } else if (profile.expire >= 0xfffffffe) { + description += ` + * It lives for the maximum age of the server cache. If this entry has no traffic for a while, it may serve an old value the next request.`; + } else { + description += ` + * If this entry has no traffic for ${formatTimespan(profile.expire)} it will expire. The next request will recompute it.`; + } + } + overloads += ` + /** + * Cache this \`"use cache"\` for a timespan defined by the \`${JSON.stringify(profileName)}\` profile. + * \`\`\` + * stale: ${formatTimespanWithSeconds(profile.stale)} + * revalidate: ${formatTimespanWithSeconds(profile.revalidate)} + * expire: ${formatTimespanWithSeconds(profile.expire)} + * \`\`\` + * ${description} + */ + export function cacheLife(profile: ${JSON.stringify(profileName)}): void + `; + } + overloads += ` + /** + * Cache this \`"use cache"\` using a custom timespan. + * \`\`\` + * stale: ... // seconds + * revalidate: ... // seconds + * expire: ... // seconds + * \`\`\` + * + * This is similar to Cache-Control: max-age=\`stale\`,s-max-age=\`revalidate\`,stale-while-revalidate=\`expire-revalidate\` + * + * If a value is left out, the lowest of other cacheLife() calls or the default, is used instead. + */ + export function cacheLife(profile: { + /** + * This cache may be stale on clients for ... seconds before checking with the server. + */ + stale?: number, + /** + * If the server receives a new request after ... seconds, start revalidating new values in the background. + */ + revalidate?: number, + /** + * If this entry has no traffic for ... seconds it will expire. The next request will recompute it. + */ + expire?: number + }): void + `; + // Redefine the cacheLife() accepted arguments. + return `// Type definitions for Next.js cacheLife configs + +declare module 'next/cache' { + export { unstable_cache } from 'next/dist/server/web/spec-extension/unstable-cache' + export { + updateTag, + revalidateTag, + revalidatePath, + refresh, + } from 'next/dist/server/web/spec-extension/revalidate' + export { unstable_noStore } from 'next/dist/server/web/spec-extension/unstable-no-store' + + ${overloads} + + import { cacheTag } from 'next/dist/server/use-cache/cache-tag' + export { cacheTag } + + export const unstable_cacheTag: typeof cacheTag + export const unstable_cacheLife: typeof cacheLife +} +`; +} +function writeCacheLifeTypes(cacheLifeConfig, filePath) { + if (!cacheLifeConfig || Object.keys(cacheLifeConfig).length === 0) { + return; + } + const dirname = _path.default.dirname(filePath); + if (!_fs.default.existsSync(dirname)) { + _fs.default.mkdirSync(dirname, { + recursive: true + }); + } + const content = generateCacheLifeTypes(cacheLifeConfig); + _fs.default.writeFileSync(filePath, content); +} + +//# sourceMappingURL=cache-life-type-utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/router-utils/decode-path-params.js b/build/node_modules/next/dist/server/lib/router-utils/decode-path-params.js new file mode 100644 index 0000000..0bd903a --- /dev/null +++ b/build/node_modules/next/dist/server/lib/router-utils/decode-path-params.js @@ -0,0 +1,42 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "decodePathParams", { + enumerable: true, + get: function() { + return decodePathParams; + } +}); +const _escapepathdelimiters = /*#__PURE__*/ _interop_require_default(require("../../../shared/lib/router/utils/escape-path-delimiters")); +const _utils = require("../../../shared/lib/utils"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +/** + * We only encode path delimiters for path segments from + * getStaticPaths so we need to attempt decoding the URL + * to match against and only escape the path delimiters + * this allows non-ascii values to be handled e.g. + * Japanese characters. + * */ function decodePathParams(pathname) { + // TODO: investigate adding this handling for non-SSG + // pages so non-ascii names also work there. + return pathname.split('/').map((seg)=>{ + try { + seg = (0, _escapepathdelimiters.default)(decodeURIComponent(seg), true); + } catch (_) { + // An improperly encoded URL was provided + throw Object.defineProperty(new _utils.DecodeError('Failed to decode path param(s).'), "__NEXT_ERROR_CODE", { + value: "E539", + enumerable: false, + configurable: true + }); + } + return seg; + }).join('/'); +} + +//# sourceMappingURL=decode-path-params.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/router-utils/filesystem.js b/build/node_modules/next/dist/server/lib/router-utils/filesystem.js new file mode 100644 index 0000000..8a64765 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/router-utils/filesystem.js @@ -0,0 +1,591 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + buildCustomRoute: null, + setupFsCheck: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + buildCustomRoute: function() { + return buildCustomRoute; + }, + setupFsCheck: function() { + return setupFsCheck; + } +}); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _promises = /*#__PURE__*/ _interop_require_default(require("fs/promises")); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("../../../build/output/log")); +const _debug = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/debug")); +const _lrucache = require("../lru-cache"); +const _loadcustomroutes = /*#__PURE__*/ _interop_require_default(require("../../../lib/load-custom-routes")); +const _redirectstatus = require("../../../lib/redirect-status"); +const _fileexists = require("../../../lib/file-exists"); +const _recursivereaddir = require("../../../lib/recursive-readdir"); +const _utils = require("../../../shared/lib/router/utils"); +const _escaperegexp = require("../../../shared/lib/escape-regexp"); +const _pathmatch = require("../../../shared/lib/router/utils/path-match"); +const _routeregex = require("../../../shared/lib/router/utils/route-regex"); +const _routematcher = require("../../../shared/lib/router/utils/route-matcher"); +const _pathhasprefix = require("../../../shared/lib/router/utils/path-has-prefix"); +const _normalizelocalepath = require("../../../shared/lib/i18n/normalize-locale-path"); +const _removepathprefix = require("../../../shared/lib/router/utils/remove-path-prefix"); +const _middlewareroutematcher = require("../../../shared/lib/router/utils/middleware-route-matcher"); +const _constants = require("../../../shared/lib/constants"); +const _normalizepathsep = require("../../../shared/lib/page-path/normalize-path-sep"); +const _getmetadataroute = require("../../../lib/metadata/get-metadata-route"); +const _rsc = require("../../normalizers/request/rsc"); +const _encodeuripath = require("../../../shared/lib/encode-uri-path"); +const _ismetadataroute = require("../../../lib/metadata/is-metadata-route"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +const debug = (0, _debug.default)('next:router-server:filesystem'); +const buildCustomRoute = (type, item, basePath, caseSensitive)=>{ + const restrictedRedirectPaths = [ + '/_next' + ].map((p)=>basePath ? `${basePath}${p}` : p); + let builtRegex = ''; + const match = (0, _pathmatch.getPathMatch)(item.source, { + strict: true, + removeUnnamedParams: true, + regexModifier: (regex)=>{ + if (!item.internal) { + regex = (0, _redirectstatus.modifyRouteRegex)(regex, type === 'redirect' ? restrictedRedirectPaths : undefined); + } + builtRegex = regex; + return builtRegex; + }, + sensitive: caseSensitive + }); + return { + ...item, + regex: builtRegex, + ...type === 'rewrite' ? { + check: true + } : {}, + match + }; +}; +async function setupFsCheck(opts) { + const getItemsLru = !opts.dev ? new _lrucache.LRUCache(1024 * 1024, function length(value) { + if (!value) { + // Null entries (negative cache) still need a non-zero size for LRU eviction + return 1; + } + return (value.fsPath || '').length + value.itemPath.length + value.type.length; + }) : undefined; + // routes that have _next/data endpoints (SSG/SSP) + const nextDataRoutes = new Set(); + const publicFolderItems = new Set(); + const nextStaticFolderItems = new Set(); + const legacyStaticFolderItems = new Set(); + const appFiles = new Set(); + const pageFiles = new Set(); + // Map normalized path to the file path. This is essential + // for parallel and group routes as their original path + // cannot be restored from the request path. + // Example: + // [normalized-path] -> [file-path] + // /icon-.png -> .../app/@parallel/icon.png + // /icon-.png -> .../app/(group)/icon.png + // /icon.png -> .../app/icon.png + const staticMetadataFiles = new Map(); + let dynamicRoutes = []; + let middlewareMatcher = ()=>false; + const distDir = _path.default.join(opts.dir, opts.config.distDir); + const publicFolderPath = _path.default.join(opts.dir, 'public'); + const nextStaticFolderPath = _path.default.join(distDir, 'static'); + const legacyStaticFolderPath = _path.default.join(opts.dir, 'static'); + let customRoutes = { + redirects: [], + rewrites: { + beforeFiles: [], + afterFiles: [], + fallback: [] + }, + onMatchHeaders: [], + headers: [] + }; + let buildId = 'development'; + let previewProps; + if (!opts.dev) { + var _middlewareManifest_middleware_, _middlewareManifest_middleware; + const buildIdPath = _path.default.join(opts.dir, opts.config.distDir, _constants.BUILD_ID_FILE); + try { + buildId = await _promises.default.readFile(buildIdPath, 'utf8'); + } catch (err) { + if (err.code !== 'ENOENT') throw err; + throw Object.defineProperty(new Error(`Could not find a production build in the '${opts.config.distDir}' directory. Try building your app with 'next build' before starting the production server. https://nextjs.org/docs/messages/production-start-no-build-id`), "__NEXT_ERROR_CODE", { + value: "E427", + enumerable: false, + configurable: true + }); + } + try { + for (const file of (await (0, _recursivereaddir.recursiveReadDir)(publicFolderPath))){ + // Ensure filename is encoded and normalized. + publicFolderItems.add((0, _encodeuripath.encodeURIPath)((0, _normalizepathsep.normalizePathSep)(file))); + } + } catch (err) { + if (err.code !== 'ENOENT') { + throw err; + } + } + try { + for (const file of (await (0, _recursivereaddir.recursiveReadDir)(legacyStaticFolderPath))){ + // Ensure filename is encoded and normalized. + legacyStaticFolderItems.add((0, _encodeuripath.encodeURIPath)((0, _normalizepathsep.normalizePathSep)(file))); + } + _log.warn(`The static directory has been deprecated in favor of the public directory. https://nextjs.org/docs/messages/static-dir-deprecated`); + } catch (err) { + if (err.code !== 'ENOENT') { + throw err; + } + } + try { + for (const file of (await (0, _recursivereaddir.recursiveReadDir)(nextStaticFolderPath))){ + // Ensure filename is encoded and normalized. + nextStaticFolderItems.add(_path.default.posix.join('/_next/static', (0, _encodeuripath.encodeURIPath)((0, _normalizepathsep.normalizePathSep)(file)))); + } + } catch (err) { + if (opts.config.output !== 'standalone') throw err; + } + const routesManifestPath = _path.default.join(distDir, _constants.ROUTES_MANIFEST); + const prerenderManifestPath = _path.default.join(distDir, _constants.PRERENDER_MANIFEST); + const middlewareManifestPath = _path.default.join(distDir, 'server', _constants.MIDDLEWARE_MANIFEST); + const functionsConfigManifestPath = _path.default.join(distDir, 'server', _constants.FUNCTIONS_CONFIG_MANIFEST); + const pagesManifestPath = _path.default.join(distDir, 'server', _constants.PAGES_MANIFEST); + const appRoutesManifestPath = _path.default.join(distDir, _constants.APP_PATH_ROUTES_MANIFEST); + const routesManifest = JSON.parse(await _promises.default.readFile(routesManifestPath, 'utf8')); + previewProps = JSON.parse(await _promises.default.readFile(prerenderManifestPath, 'utf8')).preview; + const middlewareManifest = JSON.parse(await _promises.default.readFile(middlewareManifestPath, 'utf8').catch(()=>'{}')); + const functionsConfigManifest = JSON.parse(await _promises.default.readFile(functionsConfigManifestPath, 'utf8').catch(()=>'{}')); + const pagesManifest = JSON.parse(await _promises.default.readFile(pagesManifestPath, 'utf8')); + const appRoutesManifest = JSON.parse(await _promises.default.readFile(appRoutesManifestPath, 'utf8').catch(()=>'{}')); + for (const key of Object.keys(pagesManifest)){ + // ensure the non-locale version is in the set + if (opts.config.i18n) { + pageFiles.add((0, _normalizelocalepath.normalizeLocalePath)(key, opts.config.i18n.locales).pathname); + } else { + pageFiles.add(key); + } + } + for (const key of Object.keys(appRoutesManifest)){ + appFiles.add(appRoutesManifest[key]); + } + const escapedBuildId = (0, _escaperegexp.escapeStringRegexp)(buildId); + for (const route of routesManifest.dataRoutes){ + if ((0, _utils.isDynamicRoute)(route.page)) { + const routeRegex = (0, _routeregex.getNamedRouteRegex)(route.page, { + prefixRouteKeys: true + }); + dynamicRoutes.push({ + ...route, + regex: routeRegex.re.toString(), + namedRegex: routeRegex.namedRegex, + routeKeys: routeRegex.routeKeys, + match: (0, _routematcher.getRouteMatcher)({ + // TODO: fix this in the manifest itself, must also be fixed in + // upstream builder that relies on this + re: opts.config.i18n ? new RegExp(route.dataRouteRegex.replace(`/${escapedBuildId}/`, `/${escapedBuildId}/(?[^/]+?)/`)) : new RegExp(route.dataRouteRegex), + groups: routeRegex.groups + }) + }); + } + nextDataRoutes.add(route.page); + } + for (const route of routesManifest.dynamicRoutes){ + // If a route is marked as skipInternalRouting, it's not for the internal + // router, and instead has been added to support external routers. + if (route.skipInternalRouting) { + continue; + } + dynamicRoutes.push({ + ...route, + match: (0, _routematcher.getRouteMatcher)((0, _routeregex.getRouteRegex)(route.page)) + }); + } + if ((_middlewareManifest_middleware = middlewareManifest.middleware) == null ? void 0 : (_middlewareManifest_middleware_ = _middlewareManifest_middleware['/']) == null ? void 0 : _middlewareManifest_middleware_.matchers) { + var _middlewareManifest_middleware_1, _middlewareManifest_middleware1; + middlewareMatcher = (0, _middlewareroutematcher.getMiddlewareRouteMatcher)((_middlewareManifest_middleware1 = middlewareManifest.middleware) == null ? void 0 : (_middlewareManifest_middleware_1 = _middlewareManifest_middleware1['/']) == null ? void 0 : _middlewareManifest_middleware_1.matchers); + } else if (functionsConfigManifest == null ? void 0 : functionsConfigManifest.functions['/_middleware']) { + middlewareMatcher = (0, _middlewareroutematcher.getMiddlewareRouteMatcher)(functionsConfigManifest.functions['/_middleware'].matchers ?? [ + { + regexp: '.*', + originalSource: '/:path*' + } + ]); + } + customRoutes = { + redirects: routesManifest.redirects, + rewrites: routesManifest.rewrites ? Array.isArray(routesManifest.rewrites) ? { + beforeFiles: [], + afterFiles: routesManifest.rewrites, + fallback: [] + } : routesManifest.rewrites : { + beforeFiles: [], + afterFiles: [], + fallback: [] + }, + headers: routesManifest.headers, + onMatchHeaders: routesManifest.onMatchHeaders + }; + } else { + // dev handling + customRoutes = await (0, _loadcustomroutes.default)(opts.config); + previewProps = { + previewModeId: require('crypto').randomBytes(16).toString('hex'), + previewModeSigningKey: require('crypto').randomBytes(32).toString('hex'), + previewModeEncryptionKey: require('crypto').randomBytes(32).toString('hex') + }; + } + const headers = customRoutes.headers.map((item)=>buildCustomRoute('header', item, opts.config.basePath, opts.config.experimental.caseSensitiveRoutes)); + const onMatchHeaders = customRoutes.onMatchHeaders.map((item)=>buildCustomRoute('header', item, opts.config.basePath, opts.config.experimental.caseSensitiveRoutes)); + const redirects = customRoutes.redirects.map((item)=>buildCustomRoute('redirect', item, opts.config.basePath, opts.config.experimental.caseSensitiveRoutes)); + const rewrites = { + beforeFiles: customRoutes.rewrites.beforeFiles.map((item)=>buildCustomRoute('before_files_rewrite', item)), + afterFiles: customRoutes.rewrites.afterFiles.map((item)=>buildCustomRoute('rewrite', item, opts.config.basePath, opts.config.experimental.caseSensitiveRoutes)), + fallback: customRoutes.rewrites.fallback.map((item)=>buildCustomRoute('rewrite', item, opts.config.basePath, opts.config.experimental.caseSensitiveRoutes)) + }; + const { i18n } = opts.config; + const handleLocale = (pathname, locales)=>{ + let locale; + if (i18n) { + const i18nResult = (0, _normalizelocalepath.normalizeLocalePath)(pathname, locales || i18n.locales); + pathname = i18nResult.pathname; + locale = i18nResult.detectedLocale; + } + return { + locale, + pathname + }; + }; + debug('nextDataRoutes', nextDataRoutes); + debug('dynamicRoutes', dynamicRoutes); + debug('customRoutes', customRoutes); + debug('publicFolderItems', publicFolderItems); + debug('nextStaticFolderItems', nextStaticFolderItems); + debug('pageFiles', pageFiles); + debug('appFiles', appFiles); + let ensureFn; + const normalizers = { + // Because we can't know if the app directory is enabled or not at this + // stage, we assume that it is. + rsc: new _rsc.RSCPathnameNormalizer() + }; + return { + headers, + onMatchHeaders, + rewrites, + redirects, + buildId, + handleLocale, + appFiles, + pageFiles, + staticMetadataFiles, + dynamicRoutes, + nextDataRoutes, + exportPathMapRoutes: undefined, + devVirtualFsItems: new Set(), + previewProps, + middlewareMatcher: middlewareMatcher, + ensureCallback (fn) { + ensureFn = fn; + }, + async getItem (itemPath) { + const originalItemPath = itemPath; + const itemKey = originalItemPath; + const lruResult = getItemsLru == null ? void 0 : getItemsLru.get(itemKey); + if (lruResult) { + return lruResult; + } + const { basePath } = opts.config; + const hasBasePath = (0, _pathhasprefix.pathHasPrefix)(itemPath, basePath); + // Return null if path doesn't start with basePath + if (basePath && !hasBasePath) { + return null; + } + // Remove basePath if it exists. + if (basePath && hasBasePath) { + itemPath = (0, _removepathprefix.removePathPrefix)(itemPath, basePath) || '/'; + } + // Simulate minimal mode requests by normalizing RSC and postponed + // requests. + if (opts.minimalMode) { + if (normalizers.rsc.match(itemPath)) { + itemPath = normalizers.rsc.normalize(itemPath, true); + } + } + if (itemPath !== '/' && itemPath.endsWith('/')) { + itemPath = itemPath.substring(0, itemPath.length - 1); + } + let decodedItemPath = itemPath; + try { + decodedItemPath = decodeURIComponent(itemPath); + } catch {} + if (itemPath === '/_next/image') { + return { + itemPath, + type: 'nextImage' + }; + } + if (opts.dev && (0, _ismetadataroute.isMetadataRouteFile)(itemPath, [], false)) { + const fsPath = staticMetadataFiles.get(itemPath); + if (fsPath) { + return { + // "nextStaticFolder" sets Cache-Control "no-store" on dev. + type: 'nextStaticFolder', + fsPath, + itemPath: fsPath + }; + } + } + const itemsToCheck = [ + [ + this.devVirtualFsItems, + 'devVirtualFsItem' + ], + [ + nextStaticFolderItems, + 'nextStaticFolder' + ], + [ + legacyStaticFolderItems, + 'legacyStaticFolder' + ], + [ + publicFolderItems, + 'publicFolder' + ], + [ + appFiles, + 'appFile' + ], + [ + pageFiles, + 'pageFile' + ] + ]; + for (let [items, type] of itemsToCheck){ + let locale; + let curItemPath = itemPath; + let curDecodedItemPath = decodedItemPath; + const isDynamicOutput = type === 'pageFile' || type === 'appFile'; + if (i18n) { + var _i18n_domains; + const localeResult = handleLocale(itemPath, // legacy behavior allows visiting static assets under + // default locale but no other locale + isDynamicOutput ? undefined : [ + i18n == null ? void 0 : i18n.defaultLocale, + // default locales from domains need to be matched too + ...((_i18n_domains = i18n.domains) == null ? void 0 : _i18n_domains.map((item)=>item.defaultLocale)) || [] + ]); + if (localeResult.pathname !== curItemPath) { + curItemPath = localeResult.pathname; + locale = localeResult.locale; + try { + curDecodedItemPath = decodeURIComponent(curItemPath); + } catch {} + } + } + if (type === 'legacyStaticFolder') { + if (!(0, _pathhasprefix.pathHasPrefix)(curItemPath, '/static')) { + continue; + } + curItemPath = curItemPath.substring('/static'.length); + try { + curDecodedItemPath = decodeURIComponent(curItemPath); + } catch {} + } + if (type === 'nextStaticFolder' && !(0, _pathhasprefix.pathHasPrefix)(curItemPath, '/_next/static')) { + continue; + } + const nextDataPrefix = `/_next/data/${buildId}/`; + if (type === 'pageFile' && curItemPath.startsWith(nextDataPrefix) && curItemPath.endsWith('.json')) { + items = nextDataRoutes; + // remove _next/data/ prefix + curItemPath = curItemPath.substring(nextDataPrefix.length - 1); + // remove .json postfix + curItemPath = curItemPath.substring(0, curItemPath.length - '.json'.length); + const curLocaleResult = handleLocale(curItemPath); + curItemPath = curLocaleResult.pathname === '/index' ? '/' : curLocaleResult.pathname; + locale = curLocaleResult.locale; + try { + curDecodedItemPath = decodeURIComponent(curItemPath); + } catch {} + } + let matchedItem = items.has(curItemPath); + // check decoded variant as well + if (!matchedItem && !opts.dev) { + matchedItem = items.has(curDecodedItemPath); + if (matchedItem) curItemPath = curDecodedItemPath; + else { + // x-ref: https://github.com/vercel/next.js/issues/54008 + // There're cases that urls get decoded before requests, we should support both encoded and decoded ones. + // e.g. nginx could decode the proxy urls, the below ones should be treated as the same: + // decoded version: `/_next/static/chunks/pages/blog/[slug]-d4858831b91b69f6.js` + // encoded version: `/_next/static/chunks/pages/blog/%5Bslug%5D-d4858831b91b69f6.js` + try { + // encode the special characters in the path and retrieve again to determine if path exists. + const encodedCurItemPath = (0, _encodeuripath.encodeURIPath)(curItemPath); + matchedItem = items.has(encodedCurItemPath); + } catch {} + } + } + if (matchedItem || opts.dev) { + let fsPath; + let itemsRoot; + switch(type){ + case 'nextStaticFolder': + { + itemsRoot = nextStaticFolderPath; + curItemPath = curItemPath.substring('/_next/static'.length); + break; + } + case 'legacyStaticFolder': + { + itemsRoot = legacyStaticFolderPath; + break; + } + case 'publicFolder': + { + itemsRoot = publicFolderPath; + break; + } + case 'appFile': + case 'pageFile': + case 'nextImage': + case 'devVirtualFsItem': + { + break; + } + default: + { + ; + type; + } + } + if (itemsRoot && curItemPath) { + fsPath = _path.default.posix.join(itemsRoot, curItemPath); + } + // dynamically check fs in development so we don't + // have to wait on the watcher + if (!matchedItem && opts.dev) { + const isStaticAsset = [ + 'nextStaticFolder', + 'publicFolder', + 'legacyStaticFolder' + ].includes(type); + if (isStaticAsset && itemsRoot) { + let found = fsPath && await (0, _fileexists.fileExists)(fsPath, _fileexists.FileType.File); + if (!found) { + try { + // In dev, we ensure encoded paths match + // decoded paths on the filesystem so check + // that variation as well + const tempItemPath = decodeURIComponent(curItemPath); + fsPath = _path.default.posix.join(itemsRoot, tempItemPath); + found = await (0, _fileexists.fileExists)(fsPath, _fileexists.FileType.File); + } catch {} + if (!found) { + continue; + } + } + } else if (type === 'pageFile' || type === 'appFile') { + const isAppFile = type === 'appFile'; + // Attempt to ensure the page/app file is compiled and ready + if (ensureFn) { + const ensureItemPath = isAppFile ? (0, _getmetadataroute.normalizeMetadataRoute)(curItemPath) : curItemPath; + try { + await ensureFn({ + type, + itemPath: ensureItemPath + }); + } catch (error) { + continue; + } + } + } else { + continue; + } + } + // i18n locales aren't matched for app dir + if (type === 'appFile' && locale && locale !== (i18n == null ? void 0 : i18n.defaultLocale)) { + continue; + } + const itemResult = { + type, + fsPath, + locale, + itemsRoot, + itemPath: curItemPath + }; + getItemsLru == null ? void 0 : getItemsLru.set(itemKey, itemResult); + return itemResult; + } + } + getItemsLru == null ? void 0 : getItemsLru.set(itemKey, null); + return null; + }, + getDynamicRoutes () { + // this should include data routes + return this.dynamicRoutes; + }, + getMiddlewareMatchers () { + return this.middlewareMatcher; + } + }; +} + +//# sourceMappingURL=filesystem.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js b/build/node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js new file mode 100644 index 0000000..c0b36f2 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js @@ -0,0 +1,89 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + ensureInstrumentationRegistered: null, + getInstrumentationModule: null, + instrumentationOnRequestError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + ensureInstrumentationRegistered: function() { + return ensureInstrumentationRegistered; + }, + getInstrumentationModule: function() { + return getInstrumentationModule; + }, + instrumentationOnRequestError: function() { + return instrumentationOnRequestError; + } +}); +const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path")); +const _iserror = /*#__PURE__*/ _interop_require_default(require("../../../lib/is-error")); +const _constants = require("../../../lib/constants"); +const _interopdefault = require("../../../lib/interop-default"); +const _instrumentationnodeextensions = require("./instrumentation-node-extensions"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +let cachedInstrumentationModule; +async function getInstrumentationModule(projectDir, distDir) { + if (cachedInstrumentationModule) { + return cachedInstrumentationModule; + } + try { + cachedInstrumentationModule = (0, _interopdefault.interopDefault)(await require(_nodepath.default.join(projectDir, distDir, 'server', `${_constants.INSTRUMENTATION_HOOK_FILENAME}.js`))); + return cachedInstrumentationModule; + } catch (err) { + if ((0, _iserror.default)(err) && err.code !== 'ENOENT' && err.code !== 'MODULE_NOT_FOUND' && err.code !== 'ERR_MODULE_NOT_FOUND') { + throw err; + } + } +} +let instrumentationModulePromise = null; +async function registerInstrumentation(projectDir, distDir) { + // Ensure registerInstrumentation is not called in production build + if (process.env.NEXT_PHASE === 'phase-production-build') { + return; + } + if (!instrumentationModulePromise) { + instrumentationModulePromise = getInstrumentationModule(projectDir, distDir); + } + const instrumentation = await instrumentationModulePromise; + if (instrumentation == null ? void 0 : instrumentation.register) { + try { + await instrumentation.register(); + (0, _instrumentationnodeextensions.afterRegistration)(); + } catch (err) { + err.message = `An error occurred while loading instrumentation hook: ${err.message}`; + throw err; + } + } +} +async function instrumentationOnRequestError(projectDir, distDir, ...args) { + const instrumentation = await getInstrumentationModule(projectDir, distDir); + try { + var _instrumentation_onRequestError; + await (instrumentation == null ? void 0 : (_instrumentation_onRequestError = instrumentation.onRequestError) == null ? void 0 : _instrumentation_onRequestError.call(instrumentation, ...args)); + } catch (err) { + // Log the soft error and continue, since the original error has already been thrown + console.error('Error in instrumentation.onRequestError:', err); + } +} +let registerInstrumentationPromise = null; +function ensureInstrumentationRegistered(projectDir, distDir) { + if (!registerInstrumentationPromise) { + registerInstrumentationPromise = registerInstrumentation(projectDir, distDir); + } + return registerInstrumentationPromise; +} + +//# sourceMappingURL=instrumentation-globals.external.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/router-utils/instrumentation-node-extensions.js b/build/node_modules/next/dist/server/lib/router-utils/instrumentation-node-extensions.js new file mode 100644 index 0000000..31f79ab --- /dev/null +++ b/build/node_modules/next/dist/server/lib/router-utils/instrumentation-node-extensions.js @@ -0,0 +1,96 @@ +/** + * This extension augments opentelemetry after registration if applicable. + * This extension must only be loaded in Node environments. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "afterRegistration", { + enumerable: true, + get: function() { + return afterRegistration; + } +}); +const _workunitasyncstorageexternal = require("../../app-render/work-unit-async-storage.external"); +const _invarianterror = require("../../../shared/lib/invariant-error"); +const _clientandserverreferences = require("../../../lib/client-and-server-references"); +function afterRegistration() { + if (process.env.NEXT_RUNTIME === 'edge') { + throw Object.defineProperty(new _invarianterror.InvariantError('Node.js instrumentation extensions should not be loaded in the Edge runtime.'), "__NEXT_ERROR_CODE", { + value: "E775", + enumerable: false, + configurable: true + }); + } + extendTracerProviderForCacheComponents(); +} +// In theory we only want to enable this extension when cacheComponents is enabled +// however there are certain servers that might load instrumentation before nextConfig is available +// and so gating it on the config might lead to skipping this extension even when it is necessary. +// When cacheComponents is disabled this extension should be a no-op so we enable it universally. +// Additionally, soon, cacheComponents will be enabled always so this just pulls the extension forward in time +function extendTracerProviderForCacheComponents() { + let api; + // we want to allow users to use their own version of @opentelemetry/api if they + // want to, so we try to require it first, and if it fails we fall back to the + // version that is bundled with Next.js + // this is because @opentelemetry/api has to be synced with the version of + // @opentelemetry/tracing that is used, and we don't want to force users to use + // the version that is bundled with Next.js. + // the API is ~stable, so this should be fine + try { + api = require('@opentelemetry/api'); + } catch (err) { + api = require('next/dist/compiled/@opentelemetry/api'); + } + const provider = api.trace.getTracerProvider(); + // When Cache Components is enabled we need to instrument the tracer + // to exit the workUnitAsyncStorage context when generating spans. + const originalGetTracer = provider.getTracer.bind(provider); + provider.getTracer = (...args)=>{ + const tracer = originalGetTracer.apply(provider, args); + if (WeakTracers.has(tracer)) { + return tracer; + } + const originalStartSpan = tracer.startSpan; + tracer.startSpan = (...startSpanArgs)=>{ + return _workunitasyncstorageexternal.workUnitAsyncStorage.exit(()=>originalStartSpan.apply(tracer, startSpanArgs)); + }; + const originalStartActiveSpan = tracer.startActiveSpan; + // @ts-ignore TS doesn't recognize the overloads correctly + tracer.startActiveSpan = (...startActiveSpanArgs)=>{ + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (!workUnitStore) { + // @ts-ignore TS doesn't recognize the overloads correctly + return originalStartActiveSpan.apply(tracer, startActiveSpanArgs); + } + let fnIdx = 0; + if (startActiveSpanArgs.length === 2 && typeof startActiveSpanArgs[1] === 'function') { + fnIdx = 1; + } else if (startActiveSpanArgs.length === 3 && typeof startActiveSpanArgs[2] === 'function') { + fnIdx = 2; + } else if (startActiveSpanArgs.length > 3 && typeof startActiveSpanArgs[3] === 'function') { + fnIdx = 3; + } + if (fnIdx) { + const originalFn = startActiveSpanArgs[fnIdx]; + if ((0, _clientandserverreferences.isUseCacheFunction)(originalFn)) { + console.error('A Cache Function (`use cache`) was passed to startActiveSpan which means it will receive a Span argument with a possibly random ID on every invocation leading to cache misses. Provide a wrapping function around the Cache Function that does not forward the Span argument to avoid this issue.'); + } + startActiveSpanArgs[fnIdx] = withWorkUnitContext(workUnitStore, originalFn); + } + return _workunitasyncstorageexternal.workUnitAsyncStorage.exit(()=>{ + // @ts-ignore TS doesn't recognize the overloads correctly + return originalStartActiveSpan.apply(tracer, startActiveSpanArgs); + }); + }; + WeakTracers.add(tracer); + return tracer; + }; +} +const WeakTracers = new WeakSet(); +function withWorkUnitContext(workUnitStore, fn) { + return (...args)=>_workunitasyncstorageexternal.workUnitAsyncStorage.run(workUnitStore, fn, ...args); +} + +//# sourceMappingURL=instrumentation-node-extensions.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/router-utils/is-postpone.js b/build/node_modules/next/dist/server/lib/router-utils/is-postpone.js new file mode 100644 index 0000000..b621cfe --- /dev/null +++ b/build/node_modules/next/dist/server/lib/router-utils/is-postpone.js @@ -0,0 +1,16 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "isPostpone", { + enumerable: true, + get: function() { + return isPostpone; + } +}); +const REACT_POSTPONE_TYPE = Symbol.for('react.postpone'); +function isPostpone(error) { + return typeof error === 'object' && error !== null && error.$$typeof === REACT_POSTPONE_TYPE; +} + +//# sourceMappingURL=is-postpone.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/router-utils/proxy-request.js b/build/node_modules/next/dist/server/lib/router-utils/proxy-request.js new file mode 100644 index 0000000..de8549d --- /dev/null +++ b/build/node_modules/next/dist/server/lib/router-utils/proxy-request.js @@ -0,0 +1,118 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "proxyRequest", { + enumerable: true, + get: function() { + return proxyRequest; + } +}); +const _url = /*#__PURE__*/ _interop_require_default(require("url")); +const _serverrouteutils = require("../../server-route-utils"); +const _stream = require("stream"); +const _detachedpromise = require("../../../lib/detached-promise"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +async function proxyRequest(req, res, parsedUrl, upgradeHead, reqBody, proxyTimeout) { + const { query } = parsedUrl; + delete parsedUrl.query; + parsedUrl.search = (0, _serverrouteutils.stringifyQuery)(req, query); + const target = _url.default.format(parsedUrl); + const HttpProxy = require('next/dist/compiled/http-proxy'); + const proxy = new HttpProxy({ + target, + changeOrigin: true, + ignorePath: true, + ws: true, + // we limit proxy requests to 30s by default, in development + // we don't time out WebSocket requests to allow proxying + proxyTimeout: proxyTimeout === null ? undefined : proxyTimeout || 30000, + headers: { + 'x-forwarded-host': req.headers.host || '' + } + }); + let finished = false; + // http-proxy does not properly detect a client disconnect in newer + // versions of Node.js. This is caused because it only listens for the + // `aborted` event on the our request object, but it also fully reads + // and closes the request object. Node **will not** fire `aborted` when + // the request is already closed. Listening for `close` on our response + // object will detect the disconnect, and we can abort the proxy's + // connection. + proxy.on('proxyReq', (proxyReq)=>{ + res.on('close', ()=>proxyReq.destroy()); + }); + proxy.on('proxyRes', (proxyRes)=>{ + if (res.destroyed) { + proxyRes.destroy(); + } else { + res.on('close', ()=>proxyRes.destroy()); + } + }); + proxy.on('proxyRes', (proxyRes, innerReq, innerRes)=>{ + const cleanup = (err)=>{ + // cleanup event listeners to allow clean garbage collection + proxyRes.removeListener('error', cleanup); + proxyRes.removeListener('close', cleanup); + innerRes.removeListener('error', cleanup); + innerRes.removeListener('close', cleanup); + // destroy all source streams to propagate the caught event backward + innerReq.destroy(err); + proxyRes.destroy(err); + }; + proxyRes.once('error', cleanup); + proxyRes.once('close', cleanup); + innerRes.once('error', cleanup); + innerRes.once('close', cleanup); + }); + const detached = new _detachedpromise.DetachedPromise(); + proxy.on('error', (err)=>{ + console.error(`Failed to proxy ${target}`, err); + if (!finished) { + finished = true; + detached.reject(err); + if (!res.destroyed) { + if (!(res instanceof _stream.Duplex)) { + res.statusCode = 500; + } + res.end('Internal Server Error'); + } + } + }); + // If upgrade head is present or the response is a Duplex stream, treat as + // WebSocket request. + if (upgradeHead || res instanceof _stream.Duplex) { + proxy.on('proxyReqWs', (proxyReq)=>{ + proxyReq.on('close', ()=>{ + if (!finished) { + finished = true; + detached.resolve(true); + } + }); + }); + proxy.ws(req, res, upgradeHead); + detached.resolve(true); + } else { + proxy.on('proxyReq', (proxyReq)=>{ + proxyReq.on('close', ()=>{ + if (!finished) { + finished = true; + detached.resolve(true); + } + }); + }); + proxy.web(req, res, { + buffer: reqBody + }); + } + // When the proxy finishes proxying the request, shut down the proxy. + return detached.promise.finally(()=>{ + proxy.close(); + }); +} + +//# sourceMappingURL=proxy-request.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/router-utils/resolve-routes.js b/build/node_modules/next/dist/server/lib/router-utils/resolve-routes.js new file mode 100644 index 0000000..7e6dae7 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/router-utils/resolve-routes.js @@ -0,0 +1,643 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getResolveRoutes", { + enumerable: true, + get: function() { + return getResolveRoutes; + } +}); +const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path")); +const _debug = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/debug")); +const _bodystreams = require("../../body-streams"); +const _utils = require("../server-ipc/utils"); +const _serverrouteutils = require("../../server-route-utils"); +const _formathostname = require("../format-hostname"); +const _utils1 = require("../../web/utils"); +const _pipereadable = require("../../pipe-readable"); +const _gethostname = require("../../../shared/lib/get-hostname"); +const _redirectstatus = require("../../../lib/redirect-status"); +const _utils2 = require("../../../shared/lib/utils"); +const _relativizeurl = require("../../../shared/lib/router/utils/relativize-url"); +const _addpathprefix = require("../../../shared/lib/router/utils/add-path-prefix"); +const _pathhasprefix = require("../../../shared/lib/router/utils/path-has-prefix"); +const _parseurl = require("../../../shared/lib/router/utils/parse-url"); +const _detectdomainlocale = require("../../../shared/lib/i18n/detect-domain-locale"); +const _normalizelocalepath = require("../../../shared/lib/i18n/normalize-locale-path"); +const _removepathprefix = require("../../../shared/lib/router/utils/remove-path-prefix"); +const _nextdata = require("../../normalizers/request/next-data"); +const _basepath = require("../../normalizers/request/base-path"); +const _requestmeta = require("../../request-meta"); +const _isrscrequest = require("../is-rsc-request"); +const _preparedestination = require("../../../shared/lib/router/utils/prepare-destination"); +const _approuterheaders = require("../../../client/components/app-router-headers"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const debug = (0, _debug.default)('next:router-server:resolve-routes'); +function getResolveRoutes(fsChecker, config, opts, renderServer, renderServerOpts, ensureMiddleware) { + let clientHashes = undefined; + if (process.env.__NEXT_TEST_MODE && process.env.IS_TURBOPACK_TEST) { + try { + clientHashes = JSON.parse(require('fs').readFileSync(_nodepath.default.join(opts.dir, config.distDir, 'immutable-static-hashes.json'), 'utf8')); + } catch {} + } + let routes = null; + const calculateRoutes = ()=>{ + return [ + // _next/data with middleware handling + { + match: ()=>({}), + name: 'middleware_next_data' + }, + ...opts.minimalMode ? [] : fsChecker.headers, + ...opts.minimalMode ? [] : fsChecker.redirects, + // check middleware (using matchers) + { + match: ()=>({}), + name: 'middleware' + }, + ...opts.minimalMode ? [] : fsChecker.rewrites.beforeFiles, + // check middleware (using matchers) + { + match: ()=>({}), + name: 'before_files_end' + }, + // we check exact matches on fs before continuing to + // after files rewrites + { + match: ()=>({}), + name: 'check_fs' + }, + ...opts.minimalMode ? [] : fsChecker.rewrites.afterFiles, + // we always do the check: true handling before continuing to + // fallback rewrites + { + check: true, + match: ()=>({}), + name: 'after files check: true' + }, + ...opts.minimalMode ? [] : fsChecker.rewrites.fallback + ]; + }; + async function resolveRoutes({ req, res, isUpgradeReq, invokedOutputs }) { + var _req_socket, _req_headers_xforwardedproto; + let finished = false; + let resHeaders = {}; + let matchedOutput = null; + let parsedUrl = (0, _parseurl.parseUrl)(req.url || ''); + let didRewrite = false; + const urlParts = (req.url || '').split('?', 1); + const urlNoQuery = urlParts[0]; + // Refresh the routes every time in development mode, but only initialize them + // once in production. We don't need to recompute these every time unless the routes + // are changing like in development, and the performance can be costly. + if (!routes || opts.dev) { + routes = calculateRoutes(); + } + // this normalizes repeated slashes in the path e.g. hello//world -> + // hello/world or backslashes to forward slashes, this does not + // handle trailing slash as that is handled the same as a next.config.js + // redirect + if (urlNoQuery == null ? void 0 : urlNoQuery.match(/(\\|\/\/)/)) { + parsedUrl = (0, _parseurl.parseUrl)((0, _utils2.normalizeRepeatedSlashes)(req.url)); + return { + parsedUrl, + resHeaders, + finished: true, + statusCode: 308 + }; + } + // TODO: inherit this from higher up + const protocol = (req == null ? void 0 : (_req_socket = req.socket) == null ? void 0 : _req_socket.encrypted) || ((_req_headers_xforwardedproto = req.headers['x-forwarded-proto']) == null ? void 0 : _req_headers_xforwardedproto.includes('https')) ? 'https' : 'http'; + // When there are hostname and port we build an absolute URL + const initUrl = config.experimental.trustHostHeader ? `https://${req.headers.host || 'localhost'}${req.url}` : opts.port ? `${protocol}://${(0, _formathostname.formatHostname)(opts.hostname || 'localhost')}:${opts.port}${req.url}` : req.url || ''; + (0, _requestmeta.addRequestMeta)(req, 'initURL', initUrl); + (0, _requestmeta.addRequestMeta)(req, 'initQuery', { + ...parsedUrl.query + }); + (0, _requestmeta.addRequestMeta)(req, 'initProtocol', protocol); + if (!isUpgradeReq) { + const bodySizeLimit = config.experimental.proxyClientMaxBodySize; + (0, _requestmeta.addRequestMeta)(req, 'clonableBody', (0, _bodystreams.getCloneableBody)(req, bodySizeLimit)); + } + const maybeAddTrailingSlash = (pathname)=>{ + if (config.trailingSlash && !config.skipProxyUrlNormalize && !pathname.endsWith('/')) { + return `${pathname}/`; + } + return pathname; + }; + const setIsNextDataRequest = ()=>{ + (0, _requestmeta.addRequestMeta)(req, 'isNextDataReq', true); + req.headers['x-nextjs-data'] = '1'; + }; + let domainLocale; + let defaultLocale; + let initialLocaleResult = undefined; + if (config.i18n) { + var _parsedUrl_pathname; + const hadTrailingSlash = (_parsedUrl_pathname = parsedUrl.pathname) == null ? void 0 : _parsedUrl_pathname.endsWith('/'); + const hadBasePath = (0, _pathhasprefix.pathHasPrefix)(parsedUrl.pathname || '', config.basePath); + let normalizedPath = parsedUrl.pathname || '/'; + if (config.basePath && (0, _pathhasprefix.pathHasPrefix)(normalizedPath, config.basePath)) { + normalizedPath = (0, _removepathprefix.removePathPrefix)(normalizedPath, config.basePath); + } else if (config.assetPrefix && (0, _pathhasprefix.pathHasPrefix)(normalizedPath, config.assetPrefix)) { + normalizedPath = (0, _removepathprefix.removePathPrefix)(normalizedPath, config.assetPrefix); + } + initialLocaleResult = (0, _normalizelocalepath.normalizeLocalePath)(normalizedPath, config.i18n.locales); + domainLocale = (0, _detectdomainlocale.detectDomainLocale)(config.i18n.domains, (0, _gethostname.getHostname)(parsedUrl, req.headers)); + defaultLocale = (domainLocale == null ? void 0 : domainLocale.defaultLocale) || config.i18n.defaultLocale; + (0, _requestmeta.addRequestMeta)(req, 'defaultLocale', defaultLocale); + (0, _requestmeta.addRequestMeta)(req, 'locale', initialLocaleResult.detectedLocale || defaultLocale); + // ensure locale is present for resolving routes + if (!initialLocaleResult.detectedLocale && !initialLocaleResult.pathname.startsWith('/_next/')) { + parsedUrl.pathname = (0, _addpathprefix.addPathPrefix)(initialLocaleResult.pathname === '/' ? `/${defaultLocale}` : (0, _addpathprefix.addPathPrefix)(initialLocaleResult.pathname || '', `/${defaultLocale}`), hadBasePath ? config.basePath : ''); + if (hadTrailingSlash) { + parsedUrl.pathname = maybeAddTrailingSlash(parsedUrl.pathname); + } + } + } + const checkLocaleApi = (pathname)=>{ + if (config.i18n && pathname === urlNoQuery && (initialLocaleResult == null ? void 0 : initialLocaleResult.detectedLocale) && (0, _pathhasprefix.pathHasPrefix)(initialLocaleResult.pathname, '/api')) { + return true; + } + }; + async function checkTrue() { + const pathname = parsedUrl.pathname || '/'; + if (checkLocaleApi(pathname)) { + return; + } + if (!(invokedOutputs == null ? void 0 : invokedOutputs.has(pathname))) { + const output = await fsChecker.getItem(pathname); + if (output) { + if (config.useFileSystemPublicRoutes || didRewrite || output.type !== 'appFile' && output.type !== 'pageFile') { + return output; + } + } + } + const dynamicRoutes = fsChecker.getDynamicRoutes(); + let curPathname = parsedUrl.pathname; + if (config.basePath) { + if (!(0, _pathhasprefix.pathHasPrefix)(curPathname || '', config.basePath)) { + return; + } + curPathname = (curPathname == null ? void 0 : curPathname.substring(config.basePath.length)) || '/'; + } + const localeResult = fsChecker.handleLocale(curPathname || ''); + for (const route of dynamicRoutes){ + // when resolving fallback: false the + // render worker may return a no-fallback response + // which signals we need to continue resolving. + // TODO: optimize this to collect static paths + // to use at the routing layer + if (invokedOutputs == null ? void 0 : invokedOutputs.has(route.page)) { + continue; + } + const params = route.match(localeResult.pathname); + if (params) { + const pageOutput = await fsChecker.getItem((0, _addpathprefix.addPathPrefix)(route.page, config.basePath || '')); + // i18n locales aren't matched for app dir + if ((pageOutput == null ? void 0 : pageOutput.type) === 'appFile' && (initialLocaleResult == null ? void 0 : initialLocaleResult.detectedLocale)) { + continue; + } + if (pageOutput && (curPathname == null ? void 0 : curPathname.startsWith('/_next/data'))) { + setIsNextDataRequest(); + } + if (config.useFileSystemPublicRoutes || didRewrite) { + return pageOutput; + } + } + } + } + const normalizers = { + basePath: config.basePath && config.basePath !== '/' ? new _basepath.BasePathPathnameNormalizer(config.basePath) : undefined, + data: new _nextdata.NextDataPathnameNormalizer(fsChecker.buildId) + }; + async function handleRoute(route) { + let curPathname = parsedUrl.pathname || '/'; + if (config.i18n && route.internal) { + const hadTrailingSlash = curPathname.endsWith('/'); + if (config.basePath) { + curPathname = (0, _removepathprefix.removePathPrefix)(curPathname, config.basePath); + } + const hadBasePath = curPathname !== parsedUrl.pathname; + const localeResult = (0, _normalizelocalepath.normalizeLocalePath)(curPathname, config.i18n.locales); + const isDefaultLocale = localeResult.detectedLocale === defaultLocale; + if (isDefaultLocale) { + curPathname = localeResult.pathname === '/' && hadBasePath ? config.basePath : (0, _addpathprefix.addPathPrefix)(localeResult.pathname, hadBasePath ? config.basePath : ''); + } else if (hadBasePath) { + curPathname = curPathname === '/' ? config.basePath : (0, _addpathprefix.addPathPrefix)(curPathname, config.basePath); + } + if ((isDefaultLocale || hadBasePath) && hadTrailingSlash) { + curPathname = maybeAddTrailingSlash(curPathname); + } + } + let params = route.match(curPathname); + if ((route.has || route.missing) && params) { + const hasParams = (0, _preparedestination.matchHas)(req, parsedUrl.query, route.has, route.missing); + if (hasParams) { + Object.assign(params, hasParams); + } else { + params = false; + } + } + if (params) { + if (fsChecker.exportPathMapRoutes && route.name === 'before_files_end') { + for (const exportPathMapRoute of fsChecker.exportPathMapRoutes){ + const result = await handleRoute(exportPathMapRoute); + if (result) { + return result; + } + } + } + if (route.name === 'middleware_next_data' && parsedUrl.pathname) { + var _fsChecker_getMiddlewareMatchers; + if ((_fsChecker_getMiddlewareMatchers = fsChecker.getMiddlewareMatchers()) == null ? void 0 : _fsChecker_getMiddlewareMatchers.length) { + var _normalizers_basePath; + let normalized = parsedUrl.pathname; + // Remove the base path if it exists. + const hadBasePath = (_normalizers_basePath = normalizers.basePath) == null ? void 0 : _normalizers_basePath.match(parsedUrl.pathname); + if (hadBasePath && normalizers.basePath) { + normalized = normalizers.basePath.normalize(normalized, true); + } + const isNextDataPath = (0, _pathhasprefix.pathHasPrefix)(normalized, '/_next/data') && normalized.endsWith('.json'); + const hasCurrentBuildIdDataPath = normalizers.data.match(normalized); + let updated = false; + if (hasCurrentBuildIdDataPath) { + updated = true; + normalized = normalizers.data.normalize(normalized, true); + } + if (isNextDataPath) { + setIsNextDataRequest(); + } + if (config.i18n) { + const curLocaleResult = (0, _normalizelocalepath.normalizeLocalePath)(normalized, config.i18n.locales); + if (curLocaleResult.detectedLocale) { + (0, _requestmeta.addRequestMeta)(req, 'locale', curLocaleResult.detectedLocale); + } else if (defaultLocale && !curLocaleResult.pathname.startsWith('/_next/')) { + // Match normalized _next/data requests against the same + // locale-prefixed internal pathname shape used by direct page + // requests when the default locale was inferred. + normalized = (0, _addpathprefix.addPathPrefix)(curLocaleResult.pathname === '/' ? `/${defaultLocale}` : (0, _addpathprefix.addPathPrefix)(curLocaleResult.pathname || '', `/${defaultLocale}`)); + } + } + // If we updated the pathname, and it had a base path, re-add the + // base path. + if (updated) { + if (hadBasePath) { + normalized = normalized === '/' ? config.basePath : _nodepath.default.posix.join(config.basePath, normalized); + } + // Re-add the trailing slash (if required). + normalized = maybeAddTrailingSlash(normalized); + parsedUrl.pathname = normalized; + } + } + } + if (route.name === 'check_fs') { + const pathname = parsedUrl.pathname || '/'; + if ((invokedOutputs == null ? void 0 : invokedOutputs.has(pathname)) || checkLocaleApi(pathname)) { + return; + } + const output = await fsChecker.getItem(pathname); + if (output && !(config.i18n && (initialLocaleResult == null ? void 0 : initialLocaleResult.detectedLocale) && (0, _pathhasprefix.pathHasPrefix)(pathname, '/api'))) { + if (config.useFileSystemPublicRoutes || didRewrite || output.type !== 'appFile' && output.type !== 'pageFile') { + matchedOutput = output; + if (output.locale) { + (0, _requestmeta.addRequestMeta)(req, 'locale', output.locale); + } + if (process.env.__NEXT_TEST_MODE && process.env.IS_TURBOPACK_TEST && output.type === 'nextStaticFolder' && config.deploymentId) { + let useImmutableToken = config.experimental.immutableAssetToken && clientHashes[`static${decodeURI(output.itemPath)}`]; + const expectedToken = useImmutableToken ? config.experimental.immutableAssetToken : config.deploymentId; + if (parsedUrl.query.dpl !== expectedToken) { + console.error(`Invalid dpl query param: ${req.url}, expected: ${expectedToken}`); + return { + finished: true, + parsedUrl, + resHeaders, + matchedOutput: null + }; + } + } + return { + parsedUrl, + resHeaders, + finished: true, + matchedOutput + }; + } + } + } + if (!opts.minimalMode && route.name === 'middleware') { + const match = fsChecker.getMiddlewareMatchers(); + let maybeDecodedPathname = parsedUrl.pathname || '/'; + try { + maybeDecodedPathname = decodeURIComponent(maybeDecodedPathname); + } catch { + /* non-fatal we can't decode so can't match it */ } + if (// @ts-expect-error BaseNextRequest stuff + (match == null ? void 0 : match(parsedUrl.pathname, req, parsedUrl.query)) || (match == null ? void 0 : match(maybeDecodedPathname, // @ts-expect-error BaseNextRequest stuff + req, parsedUrl.query))) { + if (ensureMiddleware) { + await ensureMiddleware(req.url); + } + const serverResult = await (renderServer == null ? void 0 : renderServer.initialize(renderServerOpts)); + if (!serverResult) { + throw Object.defineProperty(new Error(`Failed to initialize render server "middleware"`), "__NEXT_ERROR_CODE", { + value: "E222", + enumerable: false, + configurable: true + }); + } + (0, _requestmeta.addRequestMeta)(req, 'invokePath', ''); + (0, _requestmeta.addRequestMeta)(req, 'invokeOutput', ''); + (0, _requestmeta.addRequestMeta)(req, 'invokeQuery', {}); + (0, _requestmeta.addRequestMeta)(req, 'middlewareInvoke', true); + if (opts.dev) { + (0, _requestmeta.addRequestMeta)(req, 'devRequestTimingMiddlewareStart', process.hrtime.bigint()); + } + debug('invoking middleware', req.url, req.headers); + let middlewareRes = undefined; + let bodyStream = undefined; + try { + try { + await serverResult.requestHandler(req, res, parsedUrl); + } catch (err) { + if (!('result' in err) || !('response' in err.result)) { + throw err; + } + middlewareRes = err.result.response; + res.statusCode = middlewareRes.status; + if (middlewareRes.body) { + bodyStream = middlewareRes.body; + } else if (middlewareRes.status) { + bodyStream = new ReadableStream({ + start (controller) { + controller.enqueue(''); + controller.close(); + } + }); + } + } finally{ + if (opts.dev) { + (0, _requestmeta.addRequestMeta)(req, 'devRequestTimingMiddlewareEnd', process.hrtime.bigint()); + } + } + } catch (e) { + // If the client aborts before we can receive a response object + // (when the headers are flushed), then we can early exit without + // further processing. + if ((0, _pipereadable.isAbortError)(e)) { + return { + parsedUrl, + resHeaders, + finished: true + }; + } + throw e; + } + if (res.closed || res.finished || !middlewareRes) { + return { + parsedUrl, + resHeaders, + finished: true + }; + } + const middlewareHeaders = (0, _utils1.toNodeOutgoingHttpHeaders)(middlewareRes.headers); + debug('middleware res', middlewareRes.status, middlewareHeaders); + if (middlewareHeaders['x-middleware-override-headers']) { + const overriddenHeaders = new Set(); + let overrideHeaders = middlewareHeaders['x-middleware-override-headers']; + if (typeof overrideHeaders === 'string') { + overrideHeaders = overrideHeaders.split(','); + } + for (const key of overrideHeaders){ + overriddenHeaders.add(key.trim()); + } + delete middlewareHeaders['x-middleware-override-headers']; + // Delete headers. + for (const key of Object.keys(req.headers)){ + if (!overriddenHeaders.has(key)) { + delete req.headers[key]; + } + } + // Update or add headers. + for (const key of overriddenHeaders.keys()){ + const valueKey = 'x-middleware-request-' + key; + const newValue = middlewareHeaders[valueKey]; + const oldValue = req.headers[key]; + if (oldValue !== newValue) { + req.headers[key] = newValue === null ? undefined : newValue; + } + delete middlewareHeaders[valueKey]; + } + } + if (!middlewareHeaders['x-middleware-rewrite'] && !middlewareHeaders['x-middleware-next'] && !middlewareHeaders['location']) { + middlewareHeaders['x-middleware-refresh'] = '1'; + } + delete middlewareHeaders['x-middleware-next']; + for (const [key, value] of Object.entries({ + ...(0, _utils.filterReqHeaders)(middlewareHeaders, _utils.ipcForbiddenHeaders) + })){ + if ([ + 'content-length', + 'x-middleware-rewrite', + 'x-middleware-redirect', + 'x-middleware-refresh' + ].includes(key)) { + continue; + } + // for set-cookie, the header shouldn't be added to the response + // as it's only needed for the request to the middleware function. + if (key === 'x-middleware-set-cookie') { + req.headers[key] = value; + continue; + } + if (value) { + resHeaders[key] = value; + req.headers[key] = value; + } + } + if (middlewareHeaders['x-middleware-rewrite']) { + const value = middlewareHeaders['x-middleware-rewrite']; + const destination = (0, _relativizeurl.getRelativeURL)(value, initUrl); + resHeaders['x-middleware-rewrite'] = destination; + parsedUrl = (0, _parseurl.parseUrl)(destination); + if (parsedUrl.protocol) { + return { + parsedUrl, + resHeaders, + finished: true + }; + } + if (config.i18n) { + const curLocaleResult = (0, _normalizelocalepath.normalizeLocalePath)(parsedUrl.pathname || '', config.i18n.locales); + if (curLocaleResult.detectedLocale) { + (0, _requestmeta.addRequestMeta)(req, 'locale', curLocaleResult.detectedLocale); + } + } + } + if (middlewareHeaders['location']) { + const value = middlewareHeaders['location']; + // Only process Location header as a redirect if it has a proper redirect status + // This prevents a Location header with non-redirect status from being treated as a redirect + const isRedirectStatus = _redirectstatus.allowedStatusCodes.has(middlewareRes.status); + if (isRedirectStatus) { + // Process as redirect: update parsedUrl and convert to relative URL + const rel = (0, _relativizeurl.getRelativeURL)(value, initUrl); + resHeaders['location'] = rel; + parsedUrl = (0, _parseurl.parseUrl)(rel); + return { + parsedUrl, + resHeaders, + finished: true, + statusCode: middlewareRes.status + }; + } else { + // Not a redirect: just pass through the Location header + resHeaders['location'] = value; + return { + parsedUrl, + resHeaders, + finished: true, + bodyStream, + statusCode: middlewareRes.status + }; + } + } + if (middlewareHeaders['x-middleware-refresh']) { + return { + parsedUrl, + resHeaders, + finished: true, + bodyStream, + statusCode: middlewareRes.status + }; + } + } + } + // handle redirect + if (('statusCode' in route || 'permanent' in route) && route.destination) { + const { parsedDestination } = (0, _preparedestination.prepareDestination)({ + appendParamsToQuery: false, + destination: route.destination, + params: params, + query: parsedUrl.query + }); + const { query } = parsedDestination; + delete parsedDestination.query; + parsedDestination.search = (0, _serverrouteutils.stringifyQuery)(req, query); + parsedDestination.pathname = (0, _utils2.normalizeRepeatedSlashes)(parsedDestination.pathname); + return { + finished: true, + parsedUrl: parsedDestination, + resHeaders: null, + statusCode: (0, _redirectstatus.getRedirectStatus)(route) + }; + } + // handle headers + if (route.headers) { + const hasParams = Object.keys(params).length > 0; + for (const header of route.headers){ + let { key, value } = header; + if (hasParams) { + key = (0, _preparedestination.compileNonPath)(key, params); + value = (0, _preparedestination.compileNonPath)(value, params); + } + if (key.toLowerCase() === 'set-cookie') { + if (!Array.isArray(resHeaders[key])) { + const val = resHeaders[key]; + resHeaders[key] = typeof val === 'string' ? [ + val + ] : []; + } + ; + resHeaders[key].push(value); + } else { + resHeaders[key] = value; + } + } + } + // handle rewrite + if (route.destination) { + var _config_experimental_clientParamParsingOrigins; + let rewriteParams = params; + const { parsedDestination } = (0, _preparedestination.prepareDestination)({ + appendParamsToQuery: true, + destination: route.destination, + params: rewriteParams, + query: parsedUrl.query + }); + // Check to see if this is a non-relative rewrite. If it is, we need + // to check to see if it's an allowed origin to receive the rewritten + // headers. + const parsedDestinationOrigin = parsedDestination.origin; + const isAllowedOrigin = parsedDestinationOrigin ? (_config_experimental_clientParamParsingOrigins = config.experimental.clientParamParsingOrigins) == null ? void 0 : _config_experimental_clientParamParsingOrigins.some((origin)=>new RegExp(origin).test(parsedDestinationOrigin)) : false; + // Set the rewrite headers only if this is a RSC request. + if ((0, _isrscrequest.isRSCRequestHeader)(req.headers[_approuterheaders.RSC_HEADER]) && (!parsedDestination.origin || isAllowedOrigin)) { + // We set the rewritten path and query headers on the response now + // that we know that the it's not an external rewrite. + if (parsedUrl.pathname !== parsedDestination.pathname) { + res.setHeader(_approuterheaders.NEXT_REWRITTEN_PATH_HEADER, parsedDestination.pathname); + } + if (parsedUrl.search !== parsedDestination.search) { + res.setHeader(_approuterheaders.NEXT_REWRITTEN_QUERY_HEADER, // remove the leading ? from the search + parsedDestination.search.slice(1)); + } + } + if (parsedDestination.protocol) { + return { + parsedUrl: parsedDestination, + resHeaders: null, + finished: true + }; + } + if (config.i18n) { + const curLocaleResult = (0, _normalizelocalepath.normalizeLocalePath)((0, _removepathprefix.removePathPrefix)(parsedDestination.pathname, config.basePath), config.i18n.locales); + if (curLocaleResult.detectedLocale) { + (0, _requestmeta.addRequestMeta)(req, 'locale', curLocaleResult.detectedLocale); + } + } + didRewrite = true; + parsedUrl.pathname = parsedDestination.pathname; + Object.assign(parsedUrl.query, parsedDestination.query); + } + // handle check: true + if (route.check) { + const output = await checkTrue(); + if (output) { + return { + parsedUrl, + resHeaders, + finished: true, + matchedOutput: output + }; + } + } + } + } + for (const route of routes){ + const result = await handleRoute(route); + if (result) { + if (result.matchedOutput) { + // handle onMatchHeaders + for (const onMatchHeaders of fsChecker.onMatchHeaders){ + await handleRoute(onMatchHeaders); + } + } + return result; + } + } + return { + finished, + parsedUrl, + resHeaders, + matchedOutput + }; + } + return resolveRoutes; +} + +//# sourceMappingURL=resolve-routes.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/router-utils/route-types-utils.js b/build/node_modules/next/dist/server/lib/router-utils/route-types-utils.js new file mode 100644 index 0000000..defdf80 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/router-utils/route-types-utils.js @@ -0,0 +1,286 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + convertCustomRouteSource: null, + createRouteTypesManifest: null, + extractRouteParams: null, + writeRouteTypesManifest: null, + writeValidatorFile: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + convertCustomRouteSource: function() { + return convertCustomRouteSource; + }, + createRouteTypesManifest: function() { + return createRouteTypesManifest; + }, + extractRouteParams: function() { + return extractRouteParams; + }, + writeRouteTypesManifest: function() { + return writeRouteTypesManifest; + }, + writeValidatorFile: function() { + return writeValidatorFile; + } +}); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _routeregex = require("../../../shared/lib/router/utils/route-regex"); +const _fs = /*#__PURE__*/ _interop_require_default(require("fs")); +const _typegen = require("./typegen"); +const _trytoparsepath = require("../../../lib/try-to-parse-path"); +const _interceptionroutes = require("../../../shared/lib/router/utils/interception-routes"); +const _entryconstants = require("../../../shared/lib/entry-constants"); +const _normalizepathsep = require("../../../shared/lib/page-path/normalize-path-sep"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function convertCustomRouteSource(source) { + const parseResult = (0, _trytoparsepath.tryToParsePath)(source); + if (parseResult.error || !parseResult.tokens) { + // Fallback to original source if parsing fails + return source.startsWith('/') ? [ + source + ] : [ + '/' + source + ]; + } + const possibleNormalizedRoutes = [ + '' + ]; + let slugCnt = 1; + function append(suffix) { + for(let i = 0; i < possibleNormalizedRoutes.length; i++){ + possibleNormalizedRoutes[i] += suffix; + } + } + function fork(suffix) { + const currentLength = possibleNormalizedRoutes.length; + for(let i = 0; i < currentLength; i++){ + possibleNormalizedRoutes.push(possibleNormalizedRoutes[i] + suffix); + } + } + for (const token of parseResult.tokens){ + if (typeof token === 'object') { + // Make sure the slug is always named. + const slug = token.name || (slugCnt++ === 1 ? 'slug' : `slug${slugCnt}`); + if (token.modifier === '*') { + append(`${token.prefix}[[...${slug}]]`); + } else if (token.modifier === '+') { + append(`${token.prefix}[...${slug}]`); + } else if (token.modifier === '') { + if (token.pattern === '[^\\/#\\?]+?') { + // A safe slug + append(`${token.prefix}[${slug}]`); + } else if (token.pattern === '.*') { + // An optional catch-all slug + append(`${token.prefix}[[...${slug}]]`); + } else if (token.pattern === '.+') { + // A catch-all slug + append(`${token.prefix}[...${slug}]`); + } else { + // Other regex patterns are not supported. Skip this route. + return []; + } + } else if (token.modifier === '?') { + if (/^[a-zA-Z0-9_/]*$/.test(token.pattern)) { + // An optional slug with plain text only, fork the route. + append(token.prefix); + fork(token.pattern); + } else { + // Optional modifier `?` and regex patterns are not supported. + return []; + } + } + } else if (typeof token === 'string') { + append(token); + } + } + // Ensure leading slash + return possibleNormalizedRoutes.map((route)=>route.startsWith('/') ? route : '/' + route); +} +function extractRouteParams(route) { + const regex = (0, _routeregex.getRouteRegex)(route); + return regex.groups; +} +/** + * Resolves an intercepting route to its canonical equivalent + * Example: /gallery/test/(..)photo/[id] -> /gallery/photo/[id] + */ function resolveInterceptingRoute(route) { + // Reuse centralized interception route normalization logic + try { + if (!(0, _interceptionroutes.isInterceptionRouteAppPath)(route)) return route; + const { interceptedRoute } = (0, _interceptionroutes.extractInterceptionRouteInformation)(route); + return interceptedRoute; + } catch { + // If parsing fails, fall back to the original route + return route; + } +} +async function createRouteTypesManifest({ dir, pageRoutes, appRoutes, appRouteHandlers, pageApiRoutes, layoutRoutes, slots, redirects, rewrites, validatorFilePath }) { + // Helper function to calculate the correct relative path + const getRelativePath = (filePath)=>{ + if (validatorFilePath) { + // For validator generation, calculate path relative to validator directory + return (0, _normalizepathsep.normalizePathSep)(_path.default.relative(_path.default.dirname(validatorFilePath), filePath)); + } + // For other uses, calculate path relative to project directory + return (0, _normalizepathsep.normalizePathSep)(_path.default.relative(dir, filePath)); + }; + const manifest = { + appRoutes: {}, + pageRoutes: {}, + layoutRoutes: {}, + appRouteHandlerRoutes: {}, + redirectRoutes: {}, + rewriteRoutes: {}, + appRouteHandlers: new Set(appRouteHandlers.map(({ filePath })=>getRelativePath(filePath))), + pageApiRoutes: new Set(pageApiRoutes.map(({ filePath })=>getRelativePath(filePath))), + appPagePaths: new Set(appRoutes.map(({ filePath })=>getRelativePath(filePath))), + pagesRouterPagePaths: new Set(pageRoutes.map(({ filePath })=>getRelativePath(filePath))), + layoutPaths: new Set(layoutRoutes.map(({ filePath })=>getRelativePath(filePath))), + filePathToRoute: new Map([ + ...appRoutes.map(({ route, filePath })=>[ + getRelativePath(filePath), + resolveInterceptingRoute(route) + ]), + ...layoutRoutes.map(({ route, filePath })=>[ + getRelativePath(filePath), + resolveInterceptingRoute(route) + ]), + ...appRouteHandlers.map(({ route, filePath })=>[ + getRelativePath(filePath), + resolveInterceptingRoute(route) + ]), + ...pageRoutes.map(({ route, filePath })=>[ + getRelativePath(filePath), + route + ]), + ...pageApiRoutes.map(({ route, filePath })=>[ + getRelativePath(filePath), + route + ]) + ]) + }; + // Process page routes + for (const { route, filePath } of pageRoutes){ + manifest.pageRoutes[route] = { + path: getRelativePath(filePath), + groups: extractRouteParams(route) + }; + } + // Process layout routes (exclude internal app error/not-found layouts) + for (const { route, filePath } of layoutRoutes){ + if (route === _entryconstants.UNDERSCORE_GLOBAL_ERROR_ROUTE || route === _entryconstants.UNDERSCORE_NOT_FOUND_ROUTE) continue; + // Use the resolved route (for interception routes, this gives us the canonical route) + const resolvedRoute = resolveInterceptingRoute(route); + if (!manifest.layoutRoutes[resolvedRoute]) { + manifest.layoutRoutes[resolvedRoute] = { + path: getRelativePath(filePath), + groups: extractRouteParams(resolvedRoute), + slots: [] + }; + } + } + // Process slots + for (const slot of slots){ + if (manifest.layoutRoutes[slot.parent]) { + manifest.layoutRoutes[slot.parent].slots.push(slot.name); + } + } + // Process app routes (exclude internal app routes) + for (const { route, filePath } of appRoutes){ + if (route === _entryconstants.UNDERSCORE_GLOBAL_ERROR_ROUTE || route === _entryconstants.UNDERSCORE_NOT_FOUND_ROUTE) continue; + // Don't include metadata routes or pages + if (!filePath.endsWith('page.ts') && !filePath.endsWith('page.tsx') && !filePath.endsWith('.mdx') && !filePath.endsWith('.md')) { + continue; + } + // Use the resolved route (for interception routes, this gives us the canonical route) + const resolvedRoute = resolveInterceptingRoute(route); + if (!manifest.appRoutes[resolvedRoute]) { + manifest.appRoutes[resolvedRoute] = { + path: getRelativePath(filePath), + groups: extractRouteParams(resolvedRoute) + }; + } + } + // Process app route handlers + for (const { route, filePath } of appRouteHandlers){ + // Use the resolved route (for interception routes, this gives us the canonical route) + const resolvedRoute = resolveInterceptingRoute(route); + if (!manifest.appRouteHandlerRoutes[resolvedRoute]) { + manifest.appRouteHandlerRoutes[resolvedRoute] = { + path: getRelativePath(filePath), + groups: extractRouteParams(resolvedRoute) + }; + } + } + // Process redirects + if (typeof redirects === 'function') { + const rd = await redirects(); + for (const item of rd){ + const possibleRoutes = convertCustomRouteSource(item.source); + for (const route of possibleRoutes){ + manifest.redirectRoutes[route] = { + path: route, + groups: extractRouteParams(route) + }; + } + } + } + // Process rewrites + if (typeof rewrites === 'function') { + const rw = await rewrites(); + const allSources = Array.isArray(rw) ? rw : [ + ...(rw == null ? void 0 : rw.beforeFiles) || [], + ...(rw == null ? void 0 : rw.afterFiles) || [], + ...(rw == null ? void 0 : rw.fallback) || [] + ]; + for (const item of allSources){ + const possibleRoutes = convertCustomRouteSource(item.source); + for (const route of possibleRoutes){ + manifest.rewriteRoutes[route] = { + path: route, + groups: extractRouteParams(route) + }; + } + } + } + return manifest; +} +async function writeRouteTypesManifest(manifest, filePath, config) { + const dirname = _path.default.dirname(filePath); + if (!_fs.default.existsSync(dirname)) { + await _fs.default.promises.mkdir(dirname, { + recursive: true + }); + } + // Write the main routes.d.ts file + await _fs.default.promises.writeFile(filePath, config.experimental.strictRouteTypes ? (0, _typegen.generateRouteTypesFileStrict)(manifest) : (0, _typegen.generateRouteTypesFile)(manifest)); + // Write the link.d.ts file if typedRoutes is enabled + if (config.typedRoutes === true) { + const linkTypesPath = _path.default.join(dirname, 'link.d.ts'); + await _fs.default.promises.writeFile(linkTypesPath, (0, _typegen.generateLinkTypesFile)(manifest)); + } +} +async function writeValidatorFile(manifest, filePath, strict) { + const dirname = _path.default.dirname(filePath); + if (!_fs.default.existsSync(dirname)) { + await _fs.default.promises.mkdir(dirname, { + recursive: true + }); + } + await _fs.default.promises.writeFile(filePath, strict ? (0, _typegen.generateValidatorFileStrict)(manifest) : (0, _typegen.generateValidatorFile)(manifest)); +} + +//# sourceMappingURL=route-types-utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/router-utils/router-server-context.js b/build/node_modules/next/dist/server/lib/router-utils/router-server-context.js new file mode 100644 index 0000000..4949014 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/router-utils/router-server-context.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + RouterServerContextSymbol: null, + routerServerGlobal: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + RouterServerContextSymbol: function() { + return RouterServerContextSymbol; + }, + routerServerGlobal: function() { + return routerServerGlobal; + } +}); +const RouterServerContextSymbol = Symbol.for('@next/router-server-methods'); +const routerServerGlobal = globalThis; + +//# sourceMappingURL=router-server-context.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/router-utils/typegen.js b/build/node_modules/next/dist/server/lib/router-utils/typegen.js new file mode 100644 index 0000000..deb61e8 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/router-utils/typegen.js @@ -0,0 +1,858 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + generateLinkTypesFile: null, + generateRouteTypesFile: null, + generateRouteTypesFileStrict: null, + generateValidatorFile: null, + generateValidatorFileStrict: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + generateLinkTypesFile: function() { + return generateLinkTypesFile; + }, + generateRouteTypesFile: function() { + return generateRouteTypesFile; + }, + generateRouteTypesFileStrict: function() { + return generateRouteTypesFileStrict; + }, + generateValidatorFile: function() { + return generateValidatorFile; + }, + generateValidatorFileStrict: function() { + return generateValidatorFileStrict; + } +}); +const _isdynamic = require("../../../shared/lib/router/utils/is-dynamic"); +function generateRouteTypes(routesManifest) { + const appRoutes = Object.keys(routesManifest.appRoutes).sort(); + const pageRoutes = Object.keys(routesManifest.pageRoutes).sort(); + const layoutRoutes = Object.keys(routesManifest.layoutRoutes).sort(); + const redirectRoutes = Object.keys(routesManifest.redirectRoutes).sort(); + const rewriteRoutes = Object.keys(routesManifest.rewriteRoutes).sort(); + let result = ''; + // Generate AppRoutes union type (pages only) + if (appRoutes.length > 0) { + result += `type AppRoutes = ${appRoutes.map((route)=>JSON.stringify(route)).join(' | ')}\n`; + } else { + result += 'type AppRoutes = never\n'; + } + // Generate AppRouteHandlerRoutes union type for route handlers + const appRouteHandlerRoutes = Object.keys(routesManifest.appRouteHandlerRoutes).sort(); + const hasAppRouteHandlers = appRouteHandlerRoutes.length > 0; + if (hasAppRouteHandlers) { + result += `type AppRouteHandlerRoutes = ${appRouteHandlerRoutes.map((route)=>JSON.stringify(route)).join(' | ')}\n`; + } + // Generate PageRoutes union type + if (pageRoutes.length > 0) { + result += `type PageRoutes = ${pageRoutes.map((route)=>JSON.stringify(route)).join(' | ')}\n`; + } else { + result += 'type PageRoutes = never\n'; + } + // Generate LayoutRoutes union type + if (layoutRoutes.length > 0) { + result += `type LayoutRoutes = ${layoutRoutes.map((route)=>JSON.stringify(route)).join(' | ')}\n`; + } else { + result += 'type LayoutRoutes = never\n'; + } + // Generate RedirectRoutes union type + if (redirectRoutes.length > 0) { + result += `type RedirectRoutes = ${redirectRoutes.map((route)=>JSON.stringify(route)).join(' | ')}\n`; + } else { + result += 'type RedirectRoutes = never\n'; + } + // Generate RewriteRoutes union type + if (rewriteRoutes.length > 0) { + result += `type RewriteRoutes = ${rewriteRoutes.map((route)=>JSON.stringify(route)).join(' | ')}\n`; + } else { + result += 'type RewriteRoutes = never\n'; + } + // Only include AppRouteHandlerRoutes in Routes union if there are actual route handlers + const routeUnionParts = [ + 'AppRoutes', + 'PageRoutes', + 'LayoutRoutes', + 'RedirectRoutes', + 'RewriteRoutes' + ]; + if (hasAppRouteHandlers) { + routeUnionParts.push('AppRouteHandlerRoutes'); + } + result += `type Routes = ${routeUnionParts.join(' | ')}\n`; + return result; +} +function generateParamTypes(routesManifest) { + const allRoutes = { + ...routesManifest.appRoutes, + ...routesManifest.appRouteHandlerRoutes, + ...routesManifest.pageRoutes, + ...routesManifest.layoutRoutes, + ...routesManifest.redirectRoutes, + ...routesManifest.rewriteRoutes + }; + let paramTypes = 'interface ParamMap {\n'; + // Sort routes deterministically for consistent output + const sortedRoutes = Object.entries(allRoutes).sort(([a], [b])=>a.localeCompare(b)); + for (const [route, routeInfo] of sortedRoutes){ + const { groups } = routeInfo; + // For static routes (no dynamic segments), we can produce an empty parameter map. + if (!(0, _isdynamic.isDynamicRoute)(route) || Object.keys(groups ?? {}).length === 0) { + paramTypes += ` ${JSON.stringify(route)}: {}\n`; + continue; + } + let paramType = '{'; + // Process each group based on its properties + for (const [key, group] of Object.entries(groups)){ + const escapedKey = JSON.stringify(key); + if (group.repeat) { + // Catch-all parameters + if (group.optional) { + paramType += ` ${escapedKey}?: string[];`; + } else { + paramType += ` ${escapedKey}: string[];`; + } + } else { + // Regular parameters + if (group.optional) { + paramType += ` ${escapedKey}?: string;`; + } else { + paramType += ` ${escapedKey}: string;`; + } + } + } + paramType += ' }'; + paramTypes += ` ${JSON.stringify(route)}: ${paramType}\n`; + } + paramTypes += '}\n'; + return paramTypes; +} +function generateLayoutSlotMap(routesManifest) { + let slotMap = 'interface LayoutSlotMap {\n'; + // Sort routes deterministically for consistent output + const sortedLayoutRoutes = Object.entries(routesManifest.layoutRoutes).sort(([a], [b])=>a.localeCompare(b)); + for (const [route, routeInfo] of sortedLayoutRoutes){ + if ('slots' in routeInfo) { + const slots = routeInfo.slots.sort(); + if (slots.length > 0) { + slotMap += ` ${JSON.stringify(route)}: ${slots.map((slot)=>JSON.stringify(slot)).join(' | ')}\n`; + } else { + slotMap += ` ${JSON.stringify(route)}: never\n`; + } + } else { + slotMap += ` ${JSON.stringify(route)}: never\n`; + } + } + slotMap += '}\n'; + return slotMap; +} +// Helper function to format routes to route types (matches the plugin logic exactly) +function formatRouteToRouteType(route) { + const isDynamic = (0, _isdynamic.isDynamicRoute)(route); + if (isDynamic) { + route = route.split('/').map((part)=>{ + if (part.startsWith('[') && part.endsWith(']')) { + if (part.startsWith('[...')) { + // /[...slug] + return `\${CatchAllSlug}`; + } else if (part.startsWith('[[...') && part.endsWith(']]')) { + // /[[...slug]] + return `\${OptionalCatchAllSlug}`; + } + // /[slug] + return `\${SafeSlug}`; + } + return part; + }).join('/'); + } + return { + isDynamic, + routeType: route + }; +} +// Helper function to serialize route types (matches the plugin logic exactly) +function serializeRouteTypes(routeTypes) { + // route collection is not deterministic, this makes the output of the file deterministic + return routeTypes.sort().map((route)=>`\n | \`${route}\``).join(''); +} +function generateLinkTypesFile(routesManifest) { + // Generate serialized static and dynamic routes for the internal namespace + // Build a unified set of routes across app/pages/redirect/rewrite as well as + // app route handlers and Pages Router API routes. + const allRoutesSet = new Set([ + ...Object.keys(routesManifest.appRoutes), + ...Object.keys(routesManifest.pageRoutes), + ...Object.keys(routesManifest.redirectRoutes), + ...Object.keys(routesManifest.rewriteRoutes), + // Allow linking to App Route Handlers (e.g. `/logout/route.ts`) + ...Object.keys(routesManifest.appRouteHandlerRoutes), + // Allow linking to Pages Router API routes (e.g. `/api/*`) + ...Array.from(routesManifest.pageApiRoutes) + ]); + const staticRouteTypes = []; + const dynamicRouteTypes = []; + // Process each route using the same logic as the plugin + for (const route of allRoutesSet){ + const { isDynamic, routeType } = formatRouteToRouteType(route); + if (isDynamic) { + dynamicRouteTypes.push(routeType); + } else { + staticRouteTypes.push(routeType); + } + } + const serializedStaticRouteTypes = serializeRouteTypes(staticRouteTypes); + const serializedDynamicRouteTypes = serializeRouteTypes(dynamicRouteTypes); + // If both StaticRoutes and DynamicRoutes are empty, fallback to type 'string & {}'. + const routeTypesFallback = !serializedStaticRouteTypes && !serializedDynamicRouteTypes ? 'string & {}' : ''; + return `// This file is generated automatically by Next.js +// Do not edit this file manually + +// Type definitions for Next.js routes + +/** + * Internal types used by the Next.js router and Link component. + * These types are not meant to be used directly. + * @internal + */ +declare namespace __next_route_internal_types__ { + type SearchOrHash = \`?\${string}\` | \`#\${string}\` + type WithProtocol = \`\${string}:\${string}\` + + type Suffix = '' | SearchOrHash + + type SafeSlug = S extends \`\${string}/\${string}\` + ? never + : S extends \`\${string}\${SearchOrHash}\` + ? never + : S extends '' + ? never + : S + + type CatchAllSlug = S extends \`\${string}\${SearchOrHash}\` + ? never + : S extends '' + ? never + : S + + type OptionalCatchAllSlug = + S extends \`\${string}\${SearchOrHash}\` ? never : S + + type StaticRoutes = ${serializedStaticRouteTypes || 'never'} + type DynamicRoutes = ${serializedDynamicRouteTypes || 'never'} + + type RouteImpl = ${routeTypesFallback || ` + ${// This keeps autocompletion working for static routes. + '| StaticRoutes'} + | SearchOrHash + | WithProtocol + | \`\${StaticRoutes}\${SearchOrHash}\` + | (T extends \`\${DynamicRoutes}\${Suffix}\` ? T : never) + `} +} + +declare module 'next' { + export { default } from 'next/types.js' + export * from 'next/types.js' + + export type Route = + __next_route_internal_types__.RouteImpl +} + +declare module 'next/link' { + export { useLinkStatus } from 'next/dist/client/link.js' + + import type { LinkProps as OriginalLinkProps } from 'next/dist/client/link.js' + import type { AnchorHTMLAttributes, DetailedHTMLProps } from 'react' + import type { UrlObject } from 'url' + + type LinkRestProps = Omit< + Omit< + DetailedHTMLProps< + AnchorHTMLAttributes, + HTMLAnchorElement + >, + keyof OriginalLinkProps + > & + OriginalLinkProps, + 'href' + > + + export type LinkProps = LinkRestProps & { + /** + * The path or URL to navigate to. This is the only required prop. It can also be an object. + * @see https://nextjs.org/docs/api-reference/next/link + */ + href: __next_route_internal_types__.RouteImpl | UrlObject + } + + export default function Link(props: LinkProps): JSX.Element +} + +declare module 'next/navigation' { + export * from 'next/dist/client/components/navigation.js' + + import type { NavigateOptions, AppRouterInstance as OriginalAppRouterInstance } from 'next/dist/shared/lib/app-router-context.shared-runtime.js' + import type { RedirectType } from 'next/dist/client/components/redirect-error.js' + + interface AppRouterInstance extends OriginalAppRouterInstance { + /** + * Navigate to the provided href. + * Pushes a new history entry. + */ + push(href: __next_route_internal_types__.RouteImpl, options?: NavigateOptions): void + /** + * Navigate to the provided href. + * Replaces the current history entry. + */ + replace(href: __next_route_internal_types__.RouteImpl, options?: NavigateOptions): void + /** + * Prefetch the provided href. + */ + prefetch(href: __next_route_internal_types__.RouteImpl): void + } + + export function useRouter(): AppRouterInstance; + + /** + * This function allows you to redirect the user to another URL. It can be used in + * [Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components), + * [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers), and + * [Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations). + * + * - In a Server Component, this will insert a meta tag to redirect the user to the target page. + * - In a Route Handler or Server Action, it will serve a 307/303 to the caller. + * - In a Server Action, type defaults to 'push' and 'replace' elsewhere. + * + * Read more: [Next.js Docs: redirect](https://nextjs.org/docs/app/api-reference/functions/redirect) + */ + export function redirect( + /** The URL to redirect to */ + url: __next_route_internal_types__.RouteImpl, + type?: RedirectType + ): never; + + /** + * This function allows you to redirect the user to another URL. It can be used in + * [Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components), + * [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers), and + * [Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations). + * + * - In a Server Component, this will insert a meta tag to redirect the user to the target page. + * - In a Route Handler or Server Action, it will serve a 308/303 to the caller. + * + * Read more: [Next.js Docs: redirect](https://nextjs.org/docs/app/api-reference/functions/redirect) + */ + export function permanentRedirect( + /** The URL to redirect to */ + url: __next_route_internal_types__.RouteImpl, + type?: RedirectType + ): never; +} + +declare module 'next/form' { + import type { FormProps as OriginalFormProps } from 'next/dist/client/form.js' + + type FormRestProps = Omit + + export type FormProps = { + /** + * \`action\` can be either a \`string\` or a function. + * - If \`action\` is a string, it will be interpreted as a path or URL to navigate to when the form is submitted. + * The path will be prefetched when the form becomes visible. + * - If \`action\` is a function, it will be called when the form is submitted. See the [React docs](https://react.dev/reference/react-dom/components/form#props) for more. + */ + action: __next_route_internal_types__.RouteImpl | ((formData: FormData) => void) + } & FormRestProps + + export default function Form(props: FormProps): JSX.Element +} +`; +} +function generateValidatorFile(routesManifest) { + const generateValidations = (paths, type, pathToRouteMap)=>paths.sort()// Only validate TypeScript files - JavaScript files have too many type inference limitations + .filter((filePath)=>filePath.endsWith('.ts') || filePath.endsWith('.tsx')).filter(// Don't include metadata routes or pages + // (e.g. /manifest.webmanifest) + (filePath)=>type !== 'AppPageConfig' || filePath.endsWith('page.ts') || filePath.endsWith('page.tsx')).map((filePath)=>{ + // Keep the file extension for TypeScript imports to support node16 module resolution + const importPath = filePath; + const route = pathToRouteMap == null ? void 0 : pathToRouteMap.get(filePath); + const typeWithRoute = route && (type === 'AppPageConfig' || type === 'LayoutConfig' || type === 'RouteHandlerConfig') ? `${type}<${JSON.stringify(route)}>` : type; + // NOTE: we previously used `satisfies` here, but it's not supported by TypeScript 4.8 and below. + // If we ever raise the TS minimum version, we can switch back. + return `// Validate ${filePath} +{ + type __IsExpected = Specific + const handler = {} as typeof import(${JSON.stringify(importPath.replace(/\.tsx?$/, '.js'))}) + type __Check = __IsExpected + // @ts-ignore + type __Unused = __Check +}`; + }).join('\n\n'); + // Use direct mappings from the manifest + // Generate validations for different route types + const appPageValidations = generateValidations(Array.from(routesManifest.appPagePaths).sort(), 'AppPageConfig', routesManifest.filePathToRoute); + const appRouteHandlerValidations = generateValidations(Array.from(routesManifest.appRouteHandlers).sort(), 'RouteHandlerConfig', routesManifest.filePathToRoute); + const pagesRouterPageValidations = generateValidations(Array.from(routesManifest.pagesRouterPagePaths).sort(), 'PagesPageConfig'); + const pagesApiRouteValidations = generateValidations(Array.from(routesManifest.pageApiRoutes).sort(), 'ApiRouteConfig'); + const layoutValidations = generateValidations(Array.from(routesManifest.layoutPaths).sort(), 'LayoutConfig', routesManifest.filePathToRoute); + const hasAppRouteHandlers = Object.keys(routesManifest.appRouteHandlerRoutes).length > 0; + // Build type definitions based on what's actually used + let typeDefinitions = ''; + if (appPageValidations) { + typeDefinitions += `type AppPageConfig = { + default: React.ComponentType<{ params: Promise } & any> | ((props: { params: Promise } & any) => React.ReactNode | Promise | never | void | Promise) + generateStaticParams?: (props: { params: ParamMap[Route] }) => Promise | any[] + generateMetadata?: ( + props: { params: Promise } & any, + parent: ResolvingMetadata + ) => Promise | any + generateViewport?: ( + props: { params: Promise } & any, + parent: ResolvingViewport + ) => Promise | any + metadata?: any + viewport?: any +} + +`; + } + if (pagesRouterPageValidations) { + typeDefinitions += `type PagesPageConfig = { + default: React.ComponentType | ((props: any) => React.ReactNode | Promise | never | void) + getStaticProps?: (context: any) => Promise | any + getStaticPaths?: (context: any) => Promise | any + getServerSideProps?: (context: any) => Promise | any + getInitialProps?: (context: any) => Promise | any + /** + * Segment configuration for legacy Pages Router pages. + * Validated at build-time by parsePagesSegmentConfig. + */ + config?: { + maxDuration?: number + runtime?: 'edge' | 'experimental-edge' | 'nodejs' | string // necessary unless config is exported as const + regions?: string[] + } +} + +`; + } + if (layoutValidations) { + typeDefinitions += `type LayoutConfig = { + default: React.ComponentType> | ((props: LayoutProps) => React.ReactNode | Promise | never | void | Promise) + generateStaticParams?: (props: { params: ParamMap[Route] }) => Promise | any[] + generateMetadata?: ( + props: { params: Promise } & any, + parent: ResolvingMetadata + ) => Promise | any + generateViewport?: ( + props: { params: Promise } & any, + parent: ResolvingViewport + ) => Promise | any + metadata?: any + viewport?: any +} + +`; + } + if (appRouteHandlerValidations) { + typeDefinitions += `type RouteHandlerConfig = { + GET?: (request: NextRequest, context: { params: Promise }) => Promise | Response | void + POST?: (request: NextRequest, context: { params: Promise }) => Promise | Response | void + PUT?: (request: NextRequest, context: { params: Promise }) => Promise | Response | void + PATCH?: (request: NextRequest, context: { params: Promise }) => Promise | Response | void + DELETE?: (request: NextRequest, context: { params: Promise }) => Promise | Response | void + HEAD?: (request: NextRequest, context: { params: Promise }) => Promise | Response | void + OPTIONS?: (request: NextRequest, context: { params: Promise }) => Promise | Response | void +} + +`; + } + if (pagesApiRouteValidations) { + typeDefinitions += `type ApiRouteConfig = { + default: (req: any, res: any) => ReturnType + config?: { + api?: { + bodyParser?: boolean | { sizeLimit?: number | string } + responseLimit?: string | number | boolean + externalResolver?: boolean + } + runtime?: 'edge' | 'experimental-edge' | 'nodejs' | string // necessary unless config is exported as const + maxDuration?: number + } +} + +`; + } + // Build import statement based on what's actually needed + const routeImports = []; + // Only import AppRoutes if there are app pages + if (appPageValidations) { + routeImports.push('AppRoutes'); + } + // Only import LayoutRoutes if there are layouts + if (layoutValidations) { + routeImports.push('LayoutRoutes'); + } + // Only import ParamMap if there are routes that use it + if (appPageValidations || layoutValidations || appRouteHandlerValidations) { + routeImports.push('ParamMap'); + } + if (hasAppRouteHandlers) { + routeImports.push('AppRouteHandlerRoutes'); + } + const routeImportStatement = routeImports.length > 0 ? `import type { ${routeImports.join(', ')} } from "./routes.js"` : ''; + const nextRequestImport = hasAppRouteHandlers ? "import type { NextRequest } from 'next/server.js'\n" : ''; + // Conditionally import types from next/types, merged into a single statement + const nextTypes = []; + if (pagesApiRouteValidations) { + nextTypes.push('NextApiHandler'); + } + if (appPageValidations || layoutValidations) { + nextTypes.push('ResolvingMetadata', 'ResolvingViewport'); + } + const nextTypesImport = nextTypes.length > 0 ? `import type { ${nextTypes.join(', ')} } from "next/types.js"\n` : ''; + return `// This file is generated automatically by Next.js +// Do not edit this file manually +// This file validates that all pages and layouts export the correct types + +${routeImportStatement} +${nextTypesImport}${nextRequestImport} +${typeDefinitions} +${appPageValidations} + +${appRouteHandlerValidations} + +${pagesRouterPageValidations} + +${pagesApiRouteValidations} + +${layoutValidations} +`; +} +function generateValidatorFileStrict(routesManifest) { + const generateValidations = (paths, type, pathToRouteMap)=>paths.sort()// Only validate TypeScript files - JavaScript files have too many type inference limitations + .filter((filePath)=>filePath.endsWith('.ts') || filePath.endsWith('.tsx')).filter(// Don't include metadata routes or pages + // (e.g. /manifest.webmanifest) + (filePath)=>type !== 'AppPageConfig' || filePath.endsWith('page.ts') || filePath.endsWith('page.tsx')).map((filePath)=>{ + // Keep the file extension for TypeScript imports to support node16 module resolution + const importPath = filePath; + const route = pathToRouteMap == null ? void 0 : pathToRouteMap.get(filePath); + const typeWithRoute = route && (type === 'AppPageConfig' || type === 'LayoutConfig' || type === 'RouteHandlerConfig') ? `${type}<${JSON.stringify(route)}>` : type; + return `// Validate ${filePath} +{ + const handler = {} as typeof import(${JSON.stringify(importPath.replace(/\.tsx?$/, '.js'))}) + handler satisfies ${typeWithRoute} +}`; + }).join('\n\n'); + // Use direct mappings from the manifest + // Generate validations for different route types + const appPageValidations = generateValidations(Array.from(routesManifest.appPagePaths).sort(), 'AppPageConfig', routesManifest.filePathToRoute); + const appRouteHandlerValidations = generateValidations(Array.from(routesManifest.appRouteHandlers).sort(), 'RouteHandlerConfig', routesManifest.filePathToRoute); + const pagesRouterPageValidations = generateValidations(Array.from(routesManifest.pagesRouterPagePaths).sort(), 'PagesPageConfig'); + const pagesApiRouteValidations = generateValidations(Array.from(routesManifest.pageApiRoutes).sort(), 'ApiRouteConfig'); + const layoutValidations = generateValidations(Array.from(routesManifest.layoutPaths).sort(), 'LayoutConfig', routesManifest.filePathToRoute); + const hasAppRouteHandlers = Object.keys(routesManifest.appRouteHandlerRoutes).length > 0; + // Build type definitions based on what's actually used + let typeDefinitions = ''; + if (appPageValidations) { + typeDefinitions += `type AppPageConfig = { + default: React.JSXElementConstructor> + generateStaticParams?: (props: { params: ParamMap[Route] }) => Promise | any[] + generateMetadata?: ( + props: PageProps, + parent: ResolvingMetadata + ) => Promise | any + generateViewport?: ( + props: PageProps, + parent: ResolvingViewport + ) => Promise | any + metadata?: any + viewport?: any +} + +`; + } + if (pagesRouterPageValidations) { + typeDefinitions += `type PagesPageConfig = { + default: React.ComponentType | ((props: any) => React.ReactNode | Promise | never | void) + getStaticProps?: (context: any) => Promise | any + getStaticPaths?: (context: any) => Promise | any + getServerSideProps?: (context: any) => Promise | any + getInitialProps?: (context: any) => Promise | any + /** + * Segment configuration for legacy Pages Router pages. + * Validated at build-time by parsePagesSegmentConfig. + */ + config?: { + maxDuration?: number + runtime?: 'edge' | 'experimental-edge' | 'nodejs' | string // necessary unless config is exported as const + regions?: string[] + } +} + +`; + } + if (layoutValidations) { + typeDefinitions += `type LayoutConfig = { + default: React.ComponentType> | ((props: LayoutProps) => React.ReactNode | Promise | never | void | Promise) + generateStaticParams?: (props: { params: ParamMap[Route] }) => Promise | any[] + generateMetadata?: ( + props: { params: Promise } & any, + parent: ResolvingMetadata + ) => Promise | any + generateViewport?: ( + props: { params: Promise } & any, + parent: ResolvingViewport + ) => Promise | any + metadata?: any + viewport?: any +} + +`; + } + if (appRouteHandlerValidations) { + typeDefinitions += `type RouteHandlerConfig = { + GET?: (request: NextRequest, context: { params: Promise }) => Promise | Response | void + POST?: (request: NextRequest, context: { params: Promise }) => Promise | Response | void + PUT?: (request: NextRequest, context: { params: Promise }) => Promise | Response | void + PATCH?: (request: NextRequest, context: { params: Promise }) => Promise | Response | void + DELETE?: (request: NextRequest, context: { params: Promise }) => Promise | Response | void + HEAD?: (request: NextRequest, context: { params: Promise }) => Promise | Response | void + OPTIONS?: (request: NextRequest, context: { params: Promise }) => Promise | Response | void +} + +`; + } + if (pagesApiRouteValidations) { + typeDefinitions += `type ApiRouteConfig = { + default: (req: any, res: any) => ReturnType + config?: { + api?: { + bodyParser?: boolean | { sizeLimit?: number | string } + responseLimit?: string | number | boolean + externalResolver?: boolean + } + runtime?: 'edge' | 'experimental-edge' | 'nodejs' | string // necessary unless config is exported as const + maxDuration?: number + } +} + +`; + } + // Build import statement based on what's actually needed + const routeImports = []; + // Only import AppRoutes if there are app pages + if (appPageValidations) { + routeImports.push('AppRoutes'); + } + // Only import LayoutRoutes if there are layouts + if (layoutValidations) { + routeImports.push('LayoutRoutes'); + } + // Only import ParamMap if there are routes that use it + if (appPageValidations || layoutValidations || appRouteHandlerValidations) { + routeImports.push('ParamMap'); + } + if (hasAppRouteHandlers) { + routeImports.push('AppRouteHandlerRoutes'); + } + const routeImportStatement = routeImports.length > 0 ? `import type { ${routeImports.join(', ')} } from "./routes.js"` : ''; + const nextRequestImport = hasAppRouteHandlers ? "import type { NextRequest } from 'next/server.js'\n" : ''; + // Conditionally import types from next/types, merged into a single statement + const nextTypes = []; + if (pagesApiRouteValidations) { + nextTypes.push('NextApiHandler'); + } + if (appPageValidations || layoutValidations) { + nextTypes.push('ResolvingMetadata', 'ResolvingViewport'); + } + const nextTypesImport = nextTypes.length > 0 ? `import type { ${nextTypes.join(', ')} } from "next/types.js"\n` : ''; + return `// This file is generated automatically by Next.js with experimental.strictRouteTypes +// Do not edit this file manually +// This file validates that all pages and layouts export the correct types + +${routeImportStatement} +${nextTypesImport}${nextRequestImport} +${typeDefinitions} +${appPageValidations} + +${appRouteHandlerValidations} + +${pagesRouterPageValidations} + +${pagesApiRouteValidations} + +${layoutValidations} +`; +} +function generateRouteTypesFile(routesManifest) { + const routeTypes = generateRouteTypes(routesManifest); + const paramTypes = generateParamTypes(routesManifest); + const layoutSlotMap = generateLayoutSlotMap(routesManifest); + const hasAppRouteHandlers = Object.keys(routesManifest.appRouteHandlerRoutes).length > 0; + // Build export statement based on what's actually generated + const routeExports = [ + 'AppRoutes', + 'PageRoutes', + 'LayoutRoutes', + 'RedirectRoutes', + 'RewriteRoutes', + 'ParamMap' + ]; + if (hasAppRouteHandlers) { + routeExports.push('AppRouteHandlerRoutes'); + } + const exportStatement = `export type { ${routeExports.join(', ')} }`; + const routeContextInterface = hasAppRouteHandlers ? ` + + /** + * Context for Next.js App Router route handlers + * @example + * \`\`\`tsx + * export async function GET(request: NextRequest, context: RouteContext<'/api/users/[id]'>) { + * const { id } = await context.params + * return Response.json({ id }) + * } + * \`\`\` + */ + interface RouteContext { + params: Promise + }` : ''; + return `// This file is generated automatically by Next.js +// Do not edit this file manually + +${routeTypes} + +${paramTypes} + +export type ParamsOf = ParamMap[Route] + +${layoutSlotMap} + +${exportStatement} + +declare global { + /** + * Props for Next.js App Router page components + * @example + * \`\`\`tsx + * export default function Page(props: PageProps<'/blog/[slug]'>) { + * const { slug } = await props.params + * return
    Blog post: {slug}
    + * } + * \`\`\` + */ + interface PageProps { + params: Promise + searchParams: Promise> + } + + /** + * Props for Next.js App Router layout components + * @example + * \`\`\`tsx + * export default function Layout(props: LayoutProps<'/dashboard'>) { + * return
    {props.children}
    + * } + * \`\`\` + */ + type LayoutProps = { + params: Promise + children: React.ReactNode + } & { + [K in LayoutSlotMap[LayoutRoute]]: React.ReactNode + }${routeContextInterface} +} +`; +} +function generateRouteTypesFileStrict(routesManifest) { + const routeTypes = generateRouteTypes(routesManifest); + const paramTypes = generateParamTypes(routesManifest); + const layoutSlotMap = generateLayoutSlotMap(routesManifest); + const hasAppRouteHandlers = Object.keys(routesManifest.appRouteHandlerRoutes).length > 0; + // Build export statement based on what's actually generated + const routeExports = [ + 'AppRoutes', + 'PageProps', + 'PageRoutes', + 'LayoutRoutes', + 'RedirectRoutes', + 'RewriteRoutes', + 'ParamMap' + ]; + if (hasAppRouteHandlers) { + routeExports.push('AppRouteHandlerRoutes'); + } + const exportStatement = `export type { ${routeExports.join(', ')} }`; + const routeContextInterface = hasAppRouteHandlers ? ` + + /** + * Context for Next.js App Router route handlers + * @example + * \`\`\`tsx + * export async function GET(request: NextRequest, context: RouteContext<'/api/users/[id]'>) { + * const { id } = await context.params + * return Response.json({ id }) + * } + * \`\`\` + */ + interface RouteContext { + params: Promise + }` : ''; + return `// This file is generated automatically by Next.js with experimental.strictRouteTypes +// Do not edit this file manually + +${routeTypes} + +${paramTypes} + +export type ParamsOf = ParamMap[Route] + +${layoutSlotMap} + +${exportStatement} + +declare global { + /** + * Props for Next.js App Router page components + * @example + * \`\`\`tsx + * export default function Page(props: PageProps<'/blog/[slug]'>) { + * const { slug } = await props.params + * return
    Blog post: {slug}
    + * } + * \`\`\` + */ + interface PageProps { + params: Promise + searchParams: Promise> + } + + /** + * Props for Next.js App Router layout components + * @example + * \`\`\`tsx + * export default function Layout(props: LayoutProps<'/dashboard'>) { + * return
    {props.children}
    + * } + * \`\`\` + */ + type LayoutProps = { + params: Promise + children: React.ReactNode + } & { + [K in LayoutSlotMap[LayoutRoute]]: React.ReactNode + }${routeContextInterface} +} +`; +} + +//# sourceMappingURL=typegen.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/router-utils/types.js b/build/node_modules/next/dist/server/lib/router-utils/types.js new file mode 100644 index 0000000..f89b9cc --- /dev/null +++ b/build/node_modules/next/dist/server/lib/router-utils/types.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/server-action-request-meta.js b/build/node_modules/next/dist/server/lib/server-action-request-meta.js new file mode 100644 index 0000000..425a231 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/server-action-request-meta.js @@ -0,0 +1,53 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getIsPossibleServerAction: null, + getServerActionRequestMetadata: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getIsPossibleServerAction: function() { + return getIsPossibleServerAction; + }, + getServerActionRequestMetadata: function() { + return getServerActionRequestMetadata; + } +}); +const _approuterheaders = require("../../client/components/app-router-headers"); +function getServerActionRequestMetadata(req) { + let actionId; + let contentType; + if (req.headers instanceof Headers) { + actionId = req.headers.get(_approuterheaders.ACTION_HEADER) ?? null; + contentType = req.headers.get('content-type'); + } else { + actionId = req.headers[_approuterheaders.ACTION_HEADER] ?? null; + contentType = req.headers['content-type'] ?? null; + } + // We don't actually support URL encoded actions, and the action handler will bail out if it sees one. + // But we still want it to flow through to the action handler, to prevent changes in behavior when a regular + // page component tries to handle a POST. + const isURLEncodedAction = Boolean(req.method === 'POST' && contentType === 'application/x-www-form-urlencoded'); + const isMultipartAction = Boolean(req.method === 'POST' && (contentType == null ? void 0 : contentType.startsWith('multipart/form-data'))); + const isFetchAction = Boolean(actionId !== undefined && typeof actionId === 'string' && req.method === 'POST'); + const isPossibleServerAction = Boolean(isFetchAction || isURLEncodedAction || isMultipartAction); + return { + actionId, + isURLEncodedAction, + isMultipartAction, + isFetchAction, + isPossibleServerAction + }; +} +function getIsPossibleServerAction(req) { + return getServerActionRequestMetadata(req).isPossibleServerAction; +} + +//# sourceMappingURL=server-action-request-meta.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/server-ipc/utils.js b/build/node_modules/next/dist/server/lib/server-ipc/utils.js new file mode 100644 index 0000000..bae5d92 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/server-ipc/utils.js @@ -0,0 +1,83 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + actionsForbiddenHeaders: null, + filterInternalHeaders: null, + filterReqHeaders: null, + ipcForbiddenHeaders: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + actionsForbiddenHeaders: function() { + return actionsForbiddenHeaders; + }, + filterInternalHeaders: function() { + return filterInternalHeaders; + }, + filterReqHeaders: function() { + return filterReqHeaders; + }, + ipcForbiddenHeaders: function() { + return ipcForbiddenHeaders; + } +}); +const ipcForbiddenHeaders = [ + 'accept-encoding', + 'keepalive', + 'keep-alive', + 'content-encoding', + 'transfer-encoding', + // https://github.com/nodejs/undici/issues/1470 + 'connection', + // marked as unsupported by undici: https://github.com/nodejs/undici/blob/c83b084879fa0bb8e0469d31ec61428ac68160d5/lib/core/request.js#L354 + 'expect' +]; +const actionsForbiddenHeaders = [ + ...ipcForbiddenHeaders, + 'content-length', + 'set-cookie' +]; +const filterReqHeaders = (headers, forbiddenHeaders)=>{ + // Some browsers are not matching spec and sending Content-Length: 0. This causes issues in undici + // https://github.com/nodejs/undici/issues/2046 + if (headers['content-length'] && headers['content-length'] === '0') { + delete headers['content-length']; + } + for (const [key, value] of Object.entries(headers)){ + if (forbiddenHeaders.includes(key) || !(Array.isArray(value) || typeof value === 'string')) { + delete headers[key]; + } + } + return headers; +}; +// These are headers that are only used internally and should +// not be honored from the external request +const INTERNAL_HEADERS = [ + 'x-middleware-rewrite', + 'x-middleware-redirect', + 'x-middleware-set-cookie', + 'x-middleware-skip', + 'x-middleware-override-headers', + 'x-middleware-next', + 'x-now-route-matches', + 'x-matched-path', + 'x-nextjs-data', + 'x-next-resume-state-length', + 'next-resume' +]; +const filterInternalHeaders = (headers)=>{ + for(const header in headers){ + if (INTERNAL_HEADERS.includes(header)) { + delete headers[header]; + } + } +}; + +//# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/source-maps.js b/build/node_modules/next/dist/server/lib/source-maps.js new file mode 100644 index 0000000..299ca3b --- /dev/null +++ b/build/node_modules/next/dist/server/lib/source-maps.js @@ -0,0 +1,196 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + devirtualizeReactServerURL: null, + filterStackFrameDEV: null, + findApplicableSourceMapPayload: null, + findSourceMapURLDEV: null, + ignoreListAnonymousStackFramesIfSandwiched: null, + sourceMapIgnoreListsEverything: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + devirtualizeReactServerURL: function() { + return devirtualizeReactServerURL; + }, + filterStackFrameDEV: function() { + return filterStackFrameDEV; + }, + findApplicableSourceMapPayload: function() { + return findApplicableSourceMapPayload; + }, + findSourceMapURLDEV: function() { + return findSourceMapURLDEV; + }, + ignoreListAnonymousStackFramesIfSandwiched: function() { + return ignoreListAnonymousStackFramesIfSandwiched; + }, + sourceMapIgnoreListsEverything: function() { + return sourceMapIgnoreListsEverything; + } +}); +const _lrucache = require("./lru-cache"); +function noSourceMap() { + return undefined; +} +// Edge runtime does not implement `module` +const findSourceMap = process.env.NEXT_RUNTIME === 'edge' ? noSourceMap : require('module').findSourceMap; +function sourceMapIgnoreListsEverything(sourceMap) { + return sourceMap.ignoreList !== undefined && sourceMap.sources.length === sourceMap.ignoreList.length; +} +function findApplicableSourceMapPayload(line0, column0, payload) { + if ('sections' in payload) { + if (payload.sections.length === 0) { + return undefined; + } + // Sections must not overlap and must be sorted: https://tc39.es/source-map/#section-object + // Therefore the last section that has an offset less than or equal to the frame is the applicable one. + const sections = payload.sections; + let left = 0; + let right = sections.length - 1; + let result = null; + while(left <= right){ + // fast Math.floor + const middle = ~~((left + right) / 2); + const section = sections[middle]; + const offset = section.offset; + if (offset.line < line0 || offset.line === line0 && offset.column <= column0) { + result = section; + left = middle + 1; + } else { + right = middle - 1; + } + } + return result === null ? undefined : result.map; + } else { + return payload; + } +} +const didWarnAboutInvalidSourceMapDEV = new Set(); +function filterStackFrameDEV(sourceURL, functionName, line1, column1) { + if (sourceURL === '') { + // The default implementation filters out stack frames + // but we want to retain them because current Server Components and + // built-in Components in parent stacks don't have source location. + // Filter out frames that show up in Promises to get good names in React's + // Server Request track until we come up with a better heuristic. + return functionName !== 'new Promise'; + } + if (sourceURL.startsWith('node:') || sourceURL.includes('node_modules')) { + return false; + } + try { + // Node.js loads source maps eagerly so this call is cheap. + // TODO: ESM sourcemaps are O(1) but CommonJS sourcemaps are O(Number of CJS modules). + // Make sure this doesn't adversely affect performance when CJS is used by Next.js. + const sourceMap = findSourceMap(sourceURL); + if (sourceMap === undefined) { + // No source map assoicated. + // TODO: Node.js types should reflect that `findSourceMap` can return `undefined`. + return true; + } + const sourceMapPayload = findApplicableSourceMapPayload(line1 - 1, column1 - 1, sourceMap.payload); + if (sourceMapPayload === undefined) { + // No source map section applicable to the frame. + return true; + } + return !sourceMapIgnoreListsEverything(sourceMapPayload); + } catch (cause) { + if (process.env.NODE_ENV !== 'production') { + // TODO: Share cache with patch-error-inspect + if (!didWarnAboutInvalidSourceMapDEV.has(sourceURL)) { + didWarnAboutInvalidSourceMapDEV.add(sourceURL); + // We should not log an actual error instance here because that will re-enter + // this codepath during error inspection and could lead to infinite recursion. + console.error(`${sourceURL}: Invalid source map. Only conformant source maps can be used to filter stack frames. Cause: ${cause}`); + } + } + return true; + } +} +const invalidSourceMap = Symbol('invalid-source-map'); +const sourceMapURLs = new _lrucache.LRUCache(512 * 1024 * 1024, (url)=>url === invalidSourceMap ? // so that we don't create a huge cache with empty source maps. + 8 * 1024 : url.length); +function findSourceMapURLDEV(scriptNameOrSourceURL) { + let sourceMapURL = sourceMapURLs.get(scriptNameOrSourceURL); + if (sourceMapURL === undefined) { + let sourceMapPayload; + try { + var _findSourceMap; + sourceMapPayload = (_findSourceMap = findSourceMap(scriptNameOrSourceURL)) == null ? void 0 : _findSourceMap.payload; + } catch (cause) { + console.error(`${scriptNameOrSourceURL}: Invalid source map. Only conformant source maps can be used to find the original code. Cause: ${cause}`); + } + if (sourceMapPayload === undefined) { + sourceMapURL = invalidSourceMap; + } else { + // TODO: Might be more efficient to extract the relevant section from Index Maps. + // Unclear if that search is worth the smaller payload we have to stringify. + const sourceMapJSON = JSON.stringify(sourceMapPayload); + const sourceMapURLData = Buffer.from(sourceMapJSON, 'utf8').toString('base64'); + sourceMapURL = `data:application/json;base64,${sourceMapURLData}`; + } + sourceMapURLs.set(scriptNameOrSourceURL, sourceMapURL); + } + return sourceMapURL === invalidSourceMap ? null : sourceMapURL; +} +function devirtualizeReactServerURL(sourceURL) { + if (sourceURL.startsWith('about://React/')) { + // about://React/Server/file://?42 => file:// + const envIdx = sourceURL.indexOf('/', 'about://React/'.length); + const suffixIdx = sourceURL.lastIndexOf('?'); + if (envIdx > -1 && suffixIdx > -1) { + return decodeURI(sourceURL.slice(envIdx + 1, suffixIdx)); + } + } + return sourceURL; +} +function isAnonymousFrameLikelyJSNative(methodName) { + // Anonymous frames can also be produced in React parent stacks either from + // host components or Server Components. We don't want to ignore those. + // This could hide user-space methods that are named like native JS methods but + // should you really do that? + return(// e.g. JSON.parse + methodName.startsWith('JSON.') || // E.g. Promise.withResolves + methodName.startsWith('Function.') || // various JS built-ins + methodName.startsWith('Promise.') || methodName.startsWith('Array.') || methodName.startsWith('Set.') || methodName.startsWith('Map.')); +} +function ignoreListAnonymousStackFramesIfSandwiched(frames, isAnonymousFrame, isIgnoredFrame, getMethodName, /** only passes frames for which `isAnonymousFrame` and their method is a native JS method or `isIgnoredFrame` return true */ ignoreFrame) { + for(let i = 1; i < frames.length; i++){ + const currentFrame = frames[i]; + if (!(isAnonymousFrame(currentFrame) && isAnonymousFrameLikelyJSNative(getMethodName(currentFrame)))) { + continue; + } + const previousFrameIsIgnored = isIgnoredFrame(frames[i - 1]); + if (previousFrameIsIgnored && i < frames.length - 1) { + let ignoreSandwich = false; + let j = i + 1; + for(j; j < frames.length; j++){ + const nextFrame = frames[j]; + const nextFrameIsAnonymous = isAnonymousFrame(nextFrame) && isAnonymousFrameLikelyJSNative(getMethodName(nextFrame)); + if (nextFrameIsAnonymous) { + continue; + } + const nextFrameIsIgnored = isIgnoredFrame(nextFrame); + if (nextFrameIsIgnored) { + ignoreSandwich = true; + break; + } + } + if (ignoreSandwich) { + for(i; i < j; i++){ + ignoreFrame(frames[i]); + } + } + } + } +} + +//# sourceMappingURL=source-maps.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/start-server.js b/build/node_modules/next/dist/server/lib/start-server.js new file mode 100644 index 0000000..3eacbf9 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/start-server.js @@ -0,0 +1,494 @@ +// Start CPU profile if it wasn't already started. +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getRequestHandlers: null, + startServer: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getRequestHandlers: function() { + return getRequestHandlers; + }, + startServer: function() { + return startServer; + } +}); +require("./cpu-profile"); +const _getnetworkhost = require("../../lib/get-network-host"); +require("../next"); +require("../require-hook"); +const _fs = /*#__PURE__*/ _interop_require_default(require("fs")); +const _v8 = /*#__PURE__*/ _interop_require_default(require("v8")); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _http = /*#__PURE__*/ _interop_require_default(require("http")); +const _https = /*#__PURE__*/ _interop_require_default(require("https")); +const _os = /*#__PURE__*/ _interop_require_default(require("os")); +const _child_process = require("child_process"); +const _watchpack = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/watchpack")); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("../../build/output/log")); +const _debug = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/debug")); +const _utils = require("./utils"); +const _formathostname = require("./format-hostname"); +const _routerserver = require("./router-server"); +const _constants = require("../../shared/lib/constants"); +const _appinfolog = require("./app-info-log"); +const _turbopackwarning = require("../../lib/turbopack-warning"); +const _trace = require("../../trace"); +const _isipv6 = require("./is-ipv6"); +const _asynccallbackset = require("./async-callback-set"); +const _durationtostring = require("../../build/duration-to-string"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +const debug = (0, _debug.default)('next:start-server'); +let startServerSpan; +/** + * Get the process ID (PID) of the process using the specified port + */ async function getProcessIdUsingPort(port) { + const timeoutMs = 250; + const processLookupController = new AbortController(); + const pidPromise = new Promise((resolve)=>{ + const handleError = (error)=>{ + debug('Failed to get process ID for port', port, error); + resolve(null); + }; + try { + // Use lsof on Unix-like systems (macOS, Linux) + if (process.platform !== 'win32') { + (0, _child_process.exec)(`lsof -ti:${port} -sTCP:LISTEN`, { + signal: processLookupController.signal + }, (error, stdout)=>{ + if (error) { + handleError(error); + return; + } + // `-sTCP` will ensure there's only one port, clean up output + const pid = stdout.trim(); + resolve(pid || null); + }); + } else { + // Use netstat on Windows + (0, _child_process.exec)(`netstat -ano | findstr /C:":${port} " | findstr LISTENING`, { + signal: processLookupController.signal + }, (error, stdout)=>{ + if (error) { + handleError(error); + return; + } + // Clean up output and extract PID + const cleanOutput = stdout.replace(/\s+/g, ' ').trim(); + if (cleanOutput) { + const lines = cleanOutput.split('\n'); + const firstLine = lines[0].trim(); + if (firstLine) { + const parts = firstLine.split(' '); + const pid = parts[parts.length - 1]; + resolve(pid || null); + } else { + resolve(null); + } + } else { + resolve(null); + } + }); + } + } catch (cause) { + handleError(Object.defineProperty(new Error('Unexpected error during process lookup', { + cause + }), "__NEXT_ERROR_CODE", { + value: "E713", + enumerable: false, + configurable: true + })); + } + }); + const timeoutId = setTimeout(()=>{ + processLookupController.abort(`PID detection timed out after ${timeoutMs}ms for port ${port}.`); + }, timeoutMs); + pidPromise.finally(()=>clearTimeout(timeoutId)); + return pidPromise; +} +async function getRequestHandlers({ dir, port, isDev, onDevServerCleanup, server, hostname, minimalMode, keepAliveTimeout, experimentalHttpsServer, serverFastRefresh, quiet }) { + return (0, _routerserver.initialize)({ + dir, + port, + hostname, + onDevServerCleanup, + dev: isDev, + minimalMode, + server, + keepAliveTimeout, + experimentalHttpsServer, + serverFastRefresh, + startServerSpan, + quiet + }); +} +async function startServer(serverOptions) { + const { dir, isDev, hostname, minimalMode, allowRetry, keepAliveTimeout, selfSignedCertificate, serverFastRefresh } = serverOptions; + let { port } = serverOptions; + process.title = `next-server (v${"16.2.6"})`; + let handlersReady = ()=>{}; + let handlersError = ()=>{}; + let handlersPromise = new Promise((resolve, reject)=>{ + handlersReady = resolve; + handlersError = reject; + }); + let requestHandler = async (req, res)=>{ + if (handlersPromise) { + await handlersPromise; + return requestHandler(req, res); + } + throw Object.defineProperty(new Error('Invariant request handler was not setup'), "__NEXT_ERROR_CODE", { + value: "E287", + enumerable: false, + configurable: true + }); + }; + let upgradeHandler = async (req, socket, head)=>{ + if (handlersPromise) { + await handlersPromise; + return upgradeHandler(req, socket, head); + } + throw Object.defineProperty(new Error('Invariant upgrade handler was not setup'), "__NEXT_ERROR_CODE", { + value: "E290", + enumerable: false, + configurable: true + }); + }; + let nextServer; + // setup server listener as fast as possible + if (selfSignedCertificate && !isDev) { + throw Object.defineProperty(new Error('Using a self signed certificate is only supported with `next dev`.'), "__NEXT_ERROR_CODE", { + value: "E128", + enumerable: false, + configurable: true + }); + } + async function requestListener(req, res) { + try { + if (handlersPromise) { + await handlersPromise; + handlersPromise = undefined; + } + await requestHandler(req, res); + } catch (err) { + res.statusCode = 500; + res.end('Internal Server Error'); + _log.error(`Failed to handle request for ${req.url}`); + console.error(err); + } finally{ + if (isDev) { + if (_v8.default.getHeapStatistics().used_heap_size > 0.8 * _v8.default.getHeapStatistics().heap_size_limit) { + _log.warn(`Server is approaching the used memory threshold, restarting...`); + (0, _trace.trace)('server-restart-close-to-memory-threshold', undefined, { + 'memory.heapSizeLimit': String(_v8.default.getHeapStatistics().heap_size_limit), + 'memory.heapUsed': String(_v8.default.getHeapStatistics().used_heap_size) + }).stop(); + await (0, _trace.flushAllTraces)(); + process.exit(_utils.RESTART_EXIT_CODE); + } + } + } + } + const server = selfSignedCertificate ? _https.default.createServer({ + key: _fs.default.readFileSync(selfSignedCertificate.key), + cert: _fs.default.readFileSync(selfSignedCertificate.cert) + }, requestListener) : _http.default.createServer(requestListener); + if (keepAliveTimeout) { + server.keepAliveTimeout = keepAliveTimeout; + } + server.on('upgrade', async (req, socket, head)=>{ + try { + await upgradeHandler(req, socket, head); + } catch (err) { + socket.destroy(); + _log.error(`Failed to handle request for ${req.url}`); + console.error(err); + } + }); + let portRetryCount = 0; + const originalPort = port; + server.on('error', (err)=>{ + if (allowRetry && port && isDev && err.code === 'EADDRINUSE' && portRetryCount < 10) { + port += 1; + portRetryCount += 1; + server.listen(port, hostname); + } else { + _log.error(`Failed to start server`); + console.error(err); + process.exit(1); + } + }); + let cleanupListeners = isDev ? new _asynccallbackset.AsyncCallbackSet() : undefined; + const distDir = await new Promise((resolve)=>{ + server.on('listening', async ()=>{ + const addr = server.address(); + const actualHostname = (0, _formathostname.formatHostname)(typeof addr === 'object' ? (addr == null ? void 0 : addr.address) || hostname || 'localhost' : addr); + const formattedHostname = !hostname || actualHostname === '0.0.0.0' ? 'localhost' : actualHostname === '[::]' ? '[::1]' : (0, _formathostname.formatHostname)(hostname); + port = typeof addr === 'object' ? (addr == null ? void 0 : addr.port) || port : port; + if (portRetryCount) { + const pid = await getProcessIdUsingPort(originalPort); + if (pid) { + _log.warn(`Port ${originalPort} is in use by process ${pid}, using available port ${port} instead.`); + } else { + _log.warn(`Port ${originalPort} is in use by an unknown process, using available port ${port} instead.`); + } + } + const networkHostname = hostname ?? (0, _getnetworkhost.getNetworkHost)((0, _isipv6.isIPv6)(actualHostname) ? 'IPv6' : 'IPv4'); + const protocol = selfSignedCertificate ? 'https' : 'http'; + const networkUrl = networkHostname ? `${protocol}://${(0, _formathostname.formatHostname)(networkHostname)}:${port}` : null; + const appUrl = `${protocol}://${formattedHostname}:${port}`; + // Store the selected port to: + // - expose it to render workers + // - re-use it for automatic dev server restarts with a randomly selected port + process.env.PORT = port + ''; + process.env.__NEXT_PRIVATE_ORIGIN = appUrl; + // Set experimental HTTPS flag for metadata resolution + if (selfSignedCertificate) { + process.env.__NEXT_EXPERIMENTAL_HTTPS = '1'; + } + // Get env info first (fast, doesn't require config) + const envInfo = isDev ? (0, _appinfolog.getEnvInfo)(dir) : undefined; + // Log basic startup info immediately (before loading config) + (0, _appinfolog.logStartInfo)({ + networkUrl, + appUrl, + envInfo, + logBundler: isDev + }); + // Calculate and log "Ready in X" before loading config + // so it reflects actual framework startup time. + // NEXT_PRIVATE_START_TIME is set by bin/next.ts or cli/next-start.ts. + const startTime = parseInt(process.env.NEXT_PRIVATE_START_TIME || '0', 10); + const endTime = Date.now(); + const startServerProcessDurationMs = startTime ? endTime - startTime : 0; + const formattedStartDuration = (0, _durationtostring.durationToString)(startServerProcessDurationMs / 1000); + _log.event(`Ready in ${formattedStartDuration}`); + try { + let cleanupStarted = false; + let closeUpgraded = null; + const cleanup = (signal)=>{ + if (cleanupStarted) { + // We can get duplicate signals, e.g. when `ctrl+c` is used in an + // interactive shell (i.e. bash, zsh), the shell will recursively + // send SIGINT to children. The parent `next-dev` process will also + // send us SIGINT. + return; + } + cleanupStarted = true; + (async ()=>{ + debug('start-server process cleanup'); + // first, stop accepting new connections and finish pending requests, + // because they might affect `nextServer.close()` (e.g. by scheduling an `after`) + await new Promise((res)=>{ + server.close((err)=>{ + if (err) console.error(err); + res(); + }); + if (isDev) { + server.closeAllConnections(); + closeUpgraded == null ? void 0 : closeUpgraded(); + } + }); + // now that no new requests can come in, clean up the rest + await Promise.all([ + nextServer == null ? void 0 : nextServer.close().catch(console.error), + cleanupListeners == null ? void 0 : cleanupListeners.runAll().catch(console.error) + ]); + // Flush any remaining traces to the trace file on shutdown + await (0, _trace.flushAllTraces)(); + // Flush telemetry if this is a dev server + if (isDev) { + try { + const { traceGlobals } = require('../../trace/shared'); + const telemetry = traceGlobals.get('telemetry'); + if (telemetry) { + // Use flushDetached to avoid blocking process exit + // Each process writes to a unique file (_events_${pid}.json) + // to avoid race conditions with the parent process + telemetry.flushDetached('dev', dir); + } + } catch (_) { + // Ignore telemetry errors during cleanup + } + } + debug('start-server process cleanup finished'); + // Exit with signal-based exit code (128 + signal number) so that + // Node.js treats this as a signal termination, not a normal exit. + // This avoids waiting for the debugger to disconnect. + switch(signal){ + case 'SIGINT': + process.exit(130); + break; + case 'SIGTERM': + process.exit(143); + break; + default: + // Make sure all handled signals have explicit exit codes. + // This is just a fallback to guard against unsound types. + signal; + process.exit(128); + } + })(); + }; + // Make sure commands gracefully respect termination signals (e.g. from Docker) + // Allow the graceful termination to be manually configurable + if (!process.env.NEXT_MANUAL_SIG_HANDLE) { + process.on('SIGINT', cleanup); + process.on('SIGTERM', cleanup); + } + // Now load config via getRequestHandlers (single loadConfig call) + const initResult = await getRequestHandlers({ + dir, + port, + isDev, + onDevServerCleanup: cleanupListeners ? cleanupListeners.add.bind(cleanupListeners) : undefined, + server, + hostname, + minimalMode, + keepAliveTimeout, + experimentalHttpsServer: !!selfSignedCertificate, + serverFastRefresh + }); + requestHandler = initResult.requestHandler; + upgradeHandler = initResult.upgradeHandler; + nextServer = initResult.server; + closeUpgraded = initResult.closeUpgraded; + // Log experimental features after config is loaded + if (isDev) { + (0, _appinfolog.logExperimentalInfo)({ + experimentalFeatures: initResult.experimentalFeatures, + cacheComponents: initResult.cacheComponents + }); + } + handlersReady(); + if (process.env.TURBOPACK && isDev) { + await (0, _turbopackwarning.validateTurboNextConfig)({ + dir: serverOptions.dir, + configPhase: _constants.PHASE_DEVELOPMENT_SERVER + }); + } + resolve(initResult.distDir); + } catch (err) { + // fatal error if we can't setup + handlersError(); + console.error(err); + process.exit(1); + } + }); + server.listen(port, hostname); + }); + if (isDev) { + function watchConfigFiles(dirToWatch, onChange) { + const wp = new _watchpack.default(); + wp.watch({ + files: _constants.CONFIG_FILES.map((file)=>_path.default.join(dirToWatch, file)) + }); + wp.on('change', onChange); + } + watchConfigFiles(dir, async (filename)=>{ + if (process.env.__NEXT_DISABLE_MEMORY_WATCHER) { + _log.info(`Detected change, manual restart required due to '__NEXT_DISABLE_MEMORY_WATCHER' usage`); + return; + } + _log.warn(`Found a change in ${_path.default.basename(filename)}. Restarting the server to apply the changes...`); + process.exit(_utils.RESTART_EXIT_CODE); + }); + } + return { + distDir + }; +} +if (process.env.NEXT_PRIVATE_WORKER && process.send) { + process.addListener('message', async (msg)=>{ + if (msg && typeof msg === 'object' && msg.nextWorkerOptions && process.send) { + let enabledFeaturesFromParent = {}; + if (process.env.NEXT_PRIVATE_ENABLED_FEATURES) { + const parsed = JSON.parse(process.env.NEXT_PRIVATE_ENABLED_FEATURES); + enabledFeaturesFromParent = Object.fromEntries(Object.entries(parsed).map(([key, value])=>[ + `feature.${key}`, + value + ])); + } + startServerSpan = (0, _trace.trace)('start-dev-server', undefined, { + cpus: String(_os.default.cpus().length), + platform: _os.default.platform(), + 'memory.freeMem': String(_os.default.freemem()), + 'memory.totalMem': String(_os.default.totalmem()), + 'memory.heapSizeLimit': String(_v8.default.getHeapStatistics().heap_size_limit), + ...enabledFeaturesFromParent + }); + (0, _trace.initializeTraceState)({ + ...(0, _trace.exportTraceState)(), + defaultParentSpanId: startServerSpan.getId() + }); + const result = await startServerSpan.traceAsyncFn(()=>startServer(msg.nextWorkerOptions)); + const memoryUsage = process.memoryUsage(); + startServerSpan.setAttribute('memory.rss', String(memoryUsage.rss)); + startServerSpan.setAttribute('memory.heapTotal', String(memoryUsage.heapTotal)); + startServerSpan.setAttribute('memory.heapUsed', String(memoryUsage.heapUsed)); + process.send({ + nextServerReady: true, + port: process.env.PORT, + distDir: result.distDir + }); + } + }); + process.send({ + nextWorkerReady: true + }); +} + +//# sourceMappingURL=start-server.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/streaming-metadata.js b/build/node_modules/next/dist/server/lib/streaming-metadata.js new file mode 100644 index 0000000..5ecd7de --- /dev/null +++ b/build/node_modules/next/dist/server/lib/streaming-metadata.js @@ -0,0 +1,38 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + isHtmlBotRequest: null, + shouldServeStreamingMetadata: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + isHtmlBotRequest: function() { + return isHtmlBotRequest; + }, + shouldServeStreamingMetadata: function() { + return shouldServeStreamingMetadata; + } +}); +const _isbot = require("../../shared/lib/router/utils/is-bot"); +function shouldServeStreamingMetadata(userAgent, htmlLimitedBots) { + const blockingMetadataUARegex = new RegExp(htmlLimitedBots || _isbot.HTML_LIMITED_BOT_UA_RE_STRING, 'i'); + // Only block metadata for HTML-limited bots + if (userAgent && blockingMetadataUARegex.test(userAgent)) { + return false; + } + return true; +} +function isHtmlBotRequest(req) { + const ua = req.headers['user-agent'] || ''; + const botType = (0, _isbot.getBotType)(ua); + return botType === 'html'; +} + +//# sourceMappingURL=streaming-metadata.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/to-route.js b/build/node_modules/next/dist/server/lib/to-route.js new file mode 100644 index 0000000..6299fbe --- /dev/null +++ b/build/node_modules/next/dist/server/lib/to-route.js @@ -0,0 +1,37 @@ +/** + * This transforms a URL pathname into a route. It removes any trailing slashes + * and the `/index` suffix. + * + * @param pathname - The URL path that needs to be optimized. + * @returns - The route + * + * @example + * // returns '/example' + * toRoute('/example/index/'); + * + * @example + * // returns '/example' + * toRoute('/example/'); + * + * @example + * // returns '/' + * toRoute('/index/'); + * + * @example + * // returns '/' + * toRoute('/'); + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "toRoute", { + enumerable: true, + get: function() { + return toRoute; + } +}); +function toRoute(pathname) { + return pathname.replace(/(?:\/index)?\/?$/, '') || '/'; +} + +//# sourceMappingURL=to-route.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/trace/constants.js b/build/node_modules/next/dist/server/lib/trace/constants.js new file mode 100644 index 0000000..c5b700b --- /dev/null +++ b/build/node_modules/next/dist/server/lib/trace/constants.js @@ -0,0 +1,203 @@ +/** + * Contains predefined constants for the trace span name in next/server. + * + * Currently, next/server/tracer is internal implementation only for tracking + * next.js's implementation only with known span names defined here. + **/ // eslint typescript has a bug with TS enums +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + AppRenderSpan: null, + AppRouteRouteHandlersSpan: null, + BaseServerSpan: null, + LoadComponentsSpan: null, + LogSpanAllowList: null, + MiddlewareSpan: null, + NextNodeServerSpan: null, + NextServerSpan: null, + NextVanillaSpanAllowlist: null, + NodeSpan: null, + RenderSpan: null, + ResolveMetadataSpan: null, + RouterSpan: null, + StartServerSpan: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + AppRenderSpan: function() { + return AppRenderSpan; + }, + AppRouteRouteHandlersSpan: function() { + return AppRouteRouteHandlersSpan; + }, + BaseServerSpan: function() { + return BaseServerSpan; + }, + LoadComponentsSpan: function() { + return LoadComponentsSpan; + }, + LogSpanAllowList: function() { + return LogSpanAllowList; + }, + MiddlewareSpan: function() { + return MiddlewareSpan; + }, + NextNodeServerSpan: function() { + return NextNodeServerSpan; + }, + NextServerSpan: function() { + return NextServerSpan; + }, + NextVanillaSpanAllowlist: function() { + return NextVanillaSpanAllowlist; + }, + NodeSpan: function() { + return NodeSpan; + }, + RenderSpan: function() { + return RenderSpan; + }, + ResolveMetadataSpan: function() { + return ResolveMetadataSpan; + }, + RouterSpan: function() { + return RouterSpan; + }, + StartServerSpan: function() { + return StartServerSpan; + } +}); +var BaseServerSpan = /*#__PURE__*/ function(BaseServerSpan) { + BaseServerSpan["handleRequest"] = "BaseServer.handleRequest"; + BaseServerSpan["run"] = "BaseServer.run"; + BaseServerSpan["pipe"] = "BaseServer.pipe"; + BaseServerSpan["getStaticHTML"] = "BaseServer.getStaticHTML"; + BaseServerSpan["render"] = "BaseServer.render"; + BaseServerSpan["renderToResponseWithComponents"] = "BaseServer.renderToResponseWithComponents"; + BaseServerSpan["renderToResponse"] = "BaseServer.renderToResponse"; + BaseServerSpan["renderToHTML"] = "BaseServer.renderToHTML"; + BaseServerSpan["renderError"] = "BaseServer.renderError"; + BaseServerSpan["renderErrorToResponse"] = "BaseServer.renderErrorToResponse"; + BaseServerSpan["renderErrorToHTML"] = "BaseServer.renderErrorToHTML"; + BaseServerSpan["render404"] = "BaseServer.render404"; + return BaseServerSpan; +}(BaseServerSpan || {}); +var LoadComponentsSpan = /*#__PURE__*/ function(LoadComponentsSpan) { + LoadComponentsSpan["loadDefaultErrorComponents"] = "LoadComponents.loadDefaultErrorComponents"; + LoadComponentsSpan["loadComponents"] = "LoadComponents.loadComponents"; + return LoadComponentsSpan; +}(LoadComponentsSpan || {}); +var NextServerSpan = /*#__PURE__*/ function(NextServerSpan) { + NextServerSpan["getRequestHandler"] = "NextServer.getRequestHandler"; + NextServerSpan["getRequestHandlerWithMetadata"] = "NextServer.getRequestHandlerWithMetadata"; + NextServerSpan["getServer"] = "NextServer.getServer"; + NextServerSpan["getServerRequestHandler"] = "NextServer.getServerRequestHandler"; + NextServerSpan["createServer"] = "createServer.createServer"; + return NextServerSpan; +}(NextServerSpan || {}); +var NextNodeServerSpan = /*#__PURE__*/ function(NextNodeServerSpan) { + NextNodeServerSpan["compression"] = "NextNodeServer.compression"; + NextNodeServerSpan["getBuildId"] = "NextNodeServer.getBuildId"; + NextNodeServerSpan["createComponentTree"] = "NextNodeServer.createComponentTree"; + NextNodeServerSpan["clientComponentLoading"] = "NextNodeServer.clientComponentLoading"; + NextNodeServerSpan["getLayoutOrPageModule"] = "NextNodeServer.getLayoutOrPageModule"; + NextNodeServerSpan["generateStaticRoutes"] = "NextNodeServer.generateStaticRoutes"; + NextNodeServerSpan["generateFsStaticRoutes"] = "NextNodeServer.generateFsStaticRoutes"; + NextNodeServerSpan["generatePublicRoutes"] = "NextNodeServer.generatePublicRoutes"; + NextNodeServerSpan["generateImageRoutes"] = "NextNodeServer.generateImageRoutes.route"; + NextNodeServerSpan["sendRenderResult"] = "NextNodeServer.sendRenderResult"; + NextNodeServerSpan["proxyRequest"] = "NextNodeServer.proxyRequest"; + NextNodeServerSpan["runApi"] = "NextNodeServer.runApi"; + NextNodeServerSpan["render"] = "NextNodeServer.render"; + NextNodeServerSpan["renderHTML"] = "NextNodeServer.renderHTML"; + NextNodeServerSpan["imageOptimizer"] = "NextNodeServer.imageOptimizer"; + NextNodeServerSpan["getPagePath"] = "NextNodeServer.getPagePath"; + NextNodeServerSpan["getRoutesManifest"] = "NextNodeServer.getRoutesManifest"; + NextNodeServerSpan["findPageComponents"] = "NextNodeServer.findPageComponents"; + NextNodeServerSpan["getFontManifest"] = "NextNodeServer.getFontManifest"; + NextNodeServerSpan["getServerComponentManifest"] = "NextNodeServer.getServerComponentManifest"; + NextNodeServerSpan["getRequestHandler"] = "NextNodeServer.getRequestHandler"; + NextNodeServerSpan["renderToHTML"] = "NextNodeServer.renderToHTML"; + NextNodeServerSpan["renderError"] = "NextNodeServer.renderError"; + NextNodeServerSpan["renderErrorToHTML"] = "NextNodeServer.renderErrorToHTML"; + NextNodeServerSpan["render404"] = "NextNodeServer.render404"; + NextNodeServerSpan["startResponse"] = "NextNodeServer.startResponse"; + // nested inner span, does not require parent scope name + NextNodeServerSpan["route"] = "route"; + NextNodeServerSpan["onProxyReq"] = "onProxyReq"; + NextNodeServerSpan["apiResolver"] = "apiResolver"; + NextNodeServerSpan["internalFetch"] = "internalFetch"; + return NextNodeServerSpan; +}(NextNodeServerSpan || {}); +var StartServerSpan = /*#__PURE__*/ function(StartServerSpan) { + StartServerSpan["startServer"] = "startServer.startServer"; + return StartServerSpan; +}(StartServerSpan || {}); +var RenderSpan = /*#__PURE__*/ function(RenderSpan) { + RenderSpan["getServerSideProps"] = "Render.getServerSideProps"; + RenderSpan["getStaticProps"] = "Render.getStaticProps"; + RenderSpan["renderToString"] = "Render.renderToString"; + RenderSpan["renderDocument"] = "Render.renderDocument"; + RenderSpan["createBodyResult"] = "Render.createBodyResult"; + return RenderSpan; +}(RenderSpan || {}); +var AppRenderSpan = /*#__PURE__*/ function(AppRenderSpan) { + AppRenderSpan["renderToString"] = "AppRender.renderToString"; + AppRenderSpan["renderToReadableStream"] = "AppRender.renderToReadableStream"; + AppRenderSpan["getBodyResult"] = "AppRender.getBodyResult"; + AppRenderSpan["fetch"] = "AppRender.fetch"; + return AppRenderSpan; +}(AppRenderSpan || {}); +var RouterSpan = /*#__PURE__*/ function(RouterSpan) { + RouterSpan["executeRoute"] = "Router.executeRoute"; + return RouterSpan; +}(RouterSpan || {}); +var NodeSpan = /*#__PURE__*/ function(NodeSpan) { + NodeSpan["runHandler"] = "Node.runHandler"; + return NodeSpan; +}(NodeSpan || {}); +var AppRouteRouteHandlersSpan = /*#__PURE__*/ function(AppRouteRouteHandlersSpan) { + AppRouteRouteHandlersSpan["runHandler"] = "AppRouteRouteHandlers.runHandler"; + return AppRouteRouteHandlersSpan; +}(AppRouteRouteHandlersSpan || {}); +var ResolveMetadataSpan = /*#__PURE__*/ function(ResolveMetadataSpan) { + ResolveMetadataSpan["generateMetadata"] = "ResolveMetadata.generateMetadata"; + ResolveMetadataSpan["generateViewport"] = "ResolveMetadata.generateViewport"; + return ResolveMetadataSpan; +}(ResolveMetadataSpan || {}); +var MiddlewareSpan = /*#__PURE__*/ function(MiddlewareSpan) { + MiddlewareSpan["execute"] = "Middleware.execute"; + return MiddlewareSpan; +}(MiddlewareSpan || {}); +const NextVanillaSpanAllowlist = new Set([ + "Middleware.execute", + "BaseServer.handleRequest", + "Render.getServerSideProps", + "Render.getStaticProps", + "AppRender.fetch", + "AppRender.getBodyResult", + "Render.renderDocument", + "Node.runHandler", + "AppRouteRouteHandlers.runHandler", + "ResolveMetadata.generateMetadata", + "ResolveMetadata.generateViewport", + "NextNodeServer.createComponentTree", + "NextNodeServer.findPageComponents", + "NextNodeServer.getLayoutOrPageModule", + "NextNodeServer.startResponse", + "NextNodeServer.clientComponentLoading" +]); +const LogSpanAllowList = new Set([ + "NextNodeServer.findPageComponents", + "NextNodeServer.createComponentTree", + "NextNodeServer.clientComponentLoading" +]); + +//# sourceMappingURL=constants.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/trace/tracer.js b/build/node_modules/next/dist/server/lib/trace/tracer.js new file mode 100644 index 0000000..9de215c --- /dev/null +++ b/build/node_modules/next/dist/server/lib/trace/tracer.js @@ -0,0 +1,280 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + BubbledError: null, + SpanKind: null, + SpanStatusCode: null, + getTracer: null, + isBubbledError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + BubbledError: function() { + return BubbledError; + }, + SpanKind: function() { + return SpanKind; + }, + SpanStatusCode: function() { + return SpanStatusCode; + }, + getTracer: function() { + return getTracer; + }, + isBubbledError: function() { + return isBubbledError; + } +}); +const _constants = require("./constants"); +const _isthenable = require("../../../shared/lib/is-thenable"); +const NEXT_OTEL_PERFORMANCE_PREFIX = process.env.NEXT_OTEL_PERFORMANCE_PREFIX; +let api; +// we want to allow users to use their own version of @opentelemetry/api if they +// want to, so we try to require it first, and if it fails we fall back to the +// version that is bundled with Next.js +// this is because @opentelemetry/api has to be synced with the version of +// @opentelemetry/tracing that is used, and we don't want to force users to use +// the version that is bundled with Next.js. +// the API is ~stable, so this should be fine +if (process.env.NEXT_RUNTIME === 'edge') { + api = require('@opentelemetry/api'); +} else { + try { + api = require('@opentelemetry/api'); + } catch (err) { + api = require('next/dist/compiled/@opentelemetry/api'); + } +} +const { context, propagation, trace, SpanStatusCode, SpanKind, ROOT_CONTEXT } = api; +class BubbledError extends Error { + constructor(bubble, result){ + super(), this.bubble = bubble, this.result = result; + } +} +function isBubbledError(error) { + if (typeof error !== 'object' || error === null) return false; + return error instanceof BubbledError; +} +const closeSpanWithError = (span, error)=>{ + if (isBubbledError(error) && error.bubble) { + span.setAttribute('next.bubble', true); + } else { + if (error) { + span.recordException(error); + span.setAttribute('error.type', error.name); + } + span.setStatus({ + code: SpanStatusCode.ERROR, + message: error == null ? void 0 : error.message + }); + } + span.end(); +}; +/** we use this map to propagate attributes from nested spans to the top span */ const rootSpanAttributesStore = new Map(); +const rootSpanIdKey = api.createContextKey('next.rootSpanId'); +let lastSpanId = 0; +const getSpanId = ()=>lastSpanId++; +const clientTraceDataSetter = { + set (carrier, key, value) { + carrier.push({ + key, + value + }); + } +}; +class NextTracerImpl { + /** + * Returns an instance to the trace with configured name. + * Since wrap / trace can be defined in any place prior to actual trace subscriber initialization, + * This should be lazily evaluated. + */ getTracerInstance() { + return trace.getTracer('next.js', '0.0.1'); + } + getContext() { + return context; + } + getTracePropagationData() { + const activeContext = context.active(); + const entries = []; + propagation.inject(activeContext, entries, clientTraceDataSetter); + return entries; + } + getActiveScopeSpan() { + return trace.getSpan(context == null ? void 0 : context.active()); + } + withPropagatedContext(carrier, fn, getter, force = false) { + const activeContext = context.active(); + if (force) { + const remoteContext = propagation.extract(ROOT_CONTEXT, carrier, getter); + if (trace.getSpanContext(remoteContext)) { + return context.with(remoteContext, fn); + } + // Preserve the current active span while still merging any extracted + // baggage/context values from the carrier. + const mergedContext = propagation.extract(activeContext, carrier, getter); + return context.with(mergedContext, fn); + } + if (trace.getSpanContext(activeContext)) { + // Active span is already set, too late to propagate. + return fn(); + } + const remoteContext = propagation.extract(activeContext, carrier, getter); + return context.with(remoteContext, fn); + } + trace(...args) { + const [type, fnOrOptions, fnOrEmpty] = args; + // coerce options form overload + const { fn, options } = typeof fnOrOptions === 'function' ? { + fn: fnOrOptions, + options: {} + } : { + fn: fnOrEmpty, + options: { + ...fnOrOptions + } + }; + const spanName = options.spanName ?? type; + if (!_constants.NextVanillaSpanAllowlist.has(type) && process.env.NEXT_OTEL_VERBOSE !== '1' || options.hideSpan) { + return fn(); + } + // Trying to get active scoped span to assign parent. If option specifies parent span manually, will try to use it. + let spanContext = this.getSpanContext((options == null ? void 0 : options.parentSpan) ?? this.getActiveScopeSpan()); + if (!spanContext) { + spanContext = (context == null ? void 0 : context.active()) ?? ROOT_CONTEXT; + } + // Check if there's already a root span in the store for this trace + // We are intentionally not checking whether there is an active context + // from outside of nextjs to ensure that we can provide the same level + // of telemetry when using a custom server + const existingRootSpanId = spanContext.getValue(rootSpanIdKey); + const isRootSpan = typeof existingRootSpanId !== 'number' || !rootSpanAttributesStore.has(existingRootSpanId); + const spanId = getSpanId(); + options.attributes = { + 'next.span_name': spanName, + 'next.span_type': type, + ...options.attributes + }; + return context.with(spanContext.setValue(rootSpanIdKey, spanId), ()=>this.getTracerInstance().startActiveSpan(spanName, options, (span)=>{ + let startTime; + if (NEXT_OTEL_PERFORMANCE_PREFIX && type && _constants.LogSpanAllowList.has(type)) { + startTime = 'performance' in globalThis && 'measure' in performance ? globalThis.performance.now() : undefined; + } + let cleanedUp = false; + const onCleanup = ()=>{ + if (cleanedUp) return; + cleanedUp = true; + rootSpanAttributesStore.delete(spanId); + if (startTime) { + performance.measure(`${NEXT_OTEL_PERFORMANCE_PREFIX}:next-${(type.split('.').pop() || '').replace(/[A-Z]/g, (match)=>'-' + match.toLowerCase())}`, { + start: startTime, + end: performance.now() + }); + } + }; + if (isRootSpan) { + rootSpanAttributesStore.set(spanId, new Map(Object.entries(options.attributes ?? {}))); + } + if (fn.length > 1) { + try { + return fn(span, (err)=>closeSpanWithError(span, err)); + } catch (err) { + closeSpanWithError(span, err); + throw err; + } finally{ + onCleanup(); + } + } + try { + const result = fn(span); + if ((0, _isthenable.isThenable)(result)) { + // If there's error make sure it throws + return result.then((res)=>{ + span.end(); + // Need to pass down the promise result, + // it could be react stream response with error { error, stream } + return res; + }).catch((err)=>{ + closeSpanWithError(span, err); + throw err; + }).finally(onCleanup); + } else { + span.end(); + onCleanup(); + } + return result; + } catch (err) { + closeSpanWithError(span, err); + onCleanup(); + throw err; + } + })); + } + wrap(...args) { + const tracer = this; + const [name, options, fn] = args.length === 3 ? args : [ + args[0], + {}, + args[1] + ]; + if (!_constants.NextVanillaSpanAllowlist.has(name) && process.env.NEXT_OTEL_VERBOSE !== '1') { + return fn; + } + return function() { + let optionsObj = options; + if (typeof optionsObj === 'function' && typeof fn === 'function') { + optionsObj = optionsObj.apply(this, arguments); + } + const lastArgId = arguments.length - 1; + const cb = arguments[lastArgId]; + if (typeof cb === 'function') { + const scopeBoundCb = tracer.getContext().bind(context.active(), cb); + return tracer.trace(name, optionsObj, (_span, done)=>{ + arguments[lastArgId] = function(err) { + done == null ? void 0 : done(err); + return scopeBoundCb.apply(this, arguments); + }; + return fn.apply(this, arguments); + }); + } else { + return tracer.trace(name, optionsObj, ()=>fn.apply(this, arguments)); + } + }; + } + startSpan(...args) { + const [type, options] = args; + const spanContext = this.getSpanContext((options == null ? void 0 : options.parentSpan) ?? this.getActiveScopeSpan()); + return this.getTracerInstance().startSpan(type, options, spanContext); + } + getSpanContext(parentSpan) { + const spanContext = parentSpan ? trace.setSpan(context.active(), parentSpan) : undefined; + return spanContext; + } + getRootSpanAttributes() { + const spanId = context.active().getValue(rootSpanIdKey); + return rootSpanAttributesStore.get(spanId); + } + setRootSpanAttribute(key, value) { + const spanId = context.active().getValue(rootSpanIdKey); + const attributes = rootSpanAttributesStore.get(spanId); + if (attributes && !attributes.has(key)) { + attributes.set(key, value); + } + } + withSpan(span, fn) { + const spanContext = trace.setSpan(context.active(), span); + return context.with(spanContext, fn); + } +} +const getTracer = (()=>{ + const tracer = new NextTracerImpl(); + return ()=>tracer; +})(); + +//# sourceMappingURL=tracer.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/trace/utils.js b/build/node_modules/next/dist/server/lib/trace/utils.js new file mode 100644 index 0000000..a9b7001 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/trace/utils.js @@ -0,0 +1,16 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getTracedMetadata", { + enumerable: true, + get: function() { + return getTracedMetadata; + } +}); +function getTracedMetadata(traceData, clientTraceMetadata) { + if (!clientTraceMetadata) return undefined; + return traceData.filter(({ key })=>clientTraceMetadata.includes(key)); +} + +//# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/types.js b/build/node_modules/next/dist/server/lib/types.js new file mode 100644 index 0000000..f89b9cc --- /dev/null +++ b/build/node_modules/next/dist/server/lib/types.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/utils.js b/build/node_modules/next/dist/server/lib/utils.js new file mode 100644 index 0000000..1542d96 --- /dev/null +++ b/build/node_modules/next/dist/server/lib/utils.js @@ -0,0 +1,278 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + RESTART_EXIT_CODE: null, + formatDebugAddress: null, + formatNodeOptions: null, + getFormattedNodeOptionsWithoutInspect: null, + getMaxOldSpaceSize: null, + getNodeDebugType: null, + getNodeOptionsArgs: null, + getParsedDebugAddress: null, + getParsedNodeOptions: null, + getParsedNodeOptionsWithoutInspect: null, + parseValidPositiveInteger: null, + printAndExit: null, + tokenizeArgs: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + RESTART_EXIT_CODE: function() { + return RESTART_EXIT_CODE; + }, + formatDebugAddress: function() { + return formatDebugAddress; + }, + formatNodeOptions: function() { + return formatNodeOptions; + }, + getFormattedNodeOptionsWithoutInspect: function() { + return getFormattedNodeOptionsWithoutInspect; + }, + getMaxOldSpaceSize: function() { + return getMaxOldSpaceSize; + }, + getNodeDebugType: function() { + return getNodeDebugType; + }, + getNodeOptionsArgs: function() { + return getNodeOptionsArgs; + }, + getParsedDebugAddress: function() { + return getParsedDebugAddress; + }, + getParsedNodeOptions: function() { + return getParsedNodeOptions; + }, + getParsedNodeOptionsWithoutInspect: function() { + return getParsedNodeOptionsWithoutInspect; + }, + parseValidPositiveInteger: function() { + return parseValidPositiveInteger; + }, + printAndExit: function() { + return printAndExit; + }, + tokenizeArgs: function() { + return tokenizeArgs; + } +}); +const _nodeutil = require("node:util"); +const _commander = require("next/dist/compiled/commander"); +function printAndExit(message, code = 1) { + if (code === 0) { + console.log(message); + } else { + console.error(message); + } + return process.exit(code); +} +const parseNodeArgs = (args)=>{ + const { values, tokens } = (0, _nodeutil.parseArgs)({ + args, + strict: false, + tokens: true + }); + // For the `NODE_OPTIONS`, we support arguments with values without the `=` + // sign. We need to parse them manually. + let orphan = null; + for(let i = 0; i < tokens.length; i++){ + const token = tokens[i]; + if (token.kind === 'option-terminator') { + break; + } + // When we encounter an option, if it's value is undefined, we should check + // to see if the following tokens are positional parameters. If they are, + // then the option is orphaned, and we can assign it. + if (token.kind === 'option') { + orphan = typeof token.value === 'undefined' ? token : null; + continue; + } + // If the token isn't a positional one, then we can't assign it to the found + // orphaned option. + if (token.kind !== 'positional') { + orphan = null; + continue; + } + // If we don't have an orphan, then we can skip this token. + if (!orphan) { + continue; + } + // If the token is a positional one, and it has a value, so add it to the + // values object. If it already exists, append it with a space. + if (orphan.name in values && typeof values[orphan.name] === 'string') { + values[orphan.name] += ` ${token.value}`; + } else { + values[orphan.name] = token.value; + } + } + return values; +}; +const tokenizeArgs = (input)=>{ + let args = []; + let isInString = false; + let willStartNewArg = true; + for(let i = 0; i < input.length; i++){ + let char = input[i]; + // Skip any escaped characters in strings. + if (char === '\\' && isInString) { + // Ensure we don't have an escape character at the end. + if (input.length === i + 1) { + throw Object.defineProperty(new Error('Invalid escape character at the end.'), "__NEXT_ERROR_CODE", { + value: "E168", + enumerable: false, + configurable: true + }); + } + // Skip the next character. + char = input[++i]; + } else if (char === ' ' && !isInString) { + willStartNewArg = true; + continue; + } else if (char === '"') { + isInString = !isInString; + continue; + } + // If we're starting a new argument, we should add it to the array. + if (willStartNewArg) { + args.push(char); + willStartNewArg = false; + } else { + args[args.length - 1] += char; + } + } + if (isInString) { + throw Object.defineProperty(new Error('Unterminated string'), "__NEXT_ERROR_CODE", { + value: "E208", + enumerable: false, + configurable: true + }); + } + return args; +}; +const getNodeOptionsArgs = ()=>{ + if (!process.env.NODE_OPTIONS) return []; + return tokenizeArgs(process.env.NODE_OPTIONS); +}; +const formatDebugAddress = ({ host, port })=>{ + if (host) return `${host}:${port}`; + return `${port}`; +}; +const getParsedDebugAddress = (address)=>{ + if (!address || typeof address !== 'string') { + return { + host: undefined, + port: 9229 + }; + } + // The address is in the form of `[host:]port`. Let's parse the address. + if (address.includes(':')) { + const [host, port] = address.split(':'); + return { + host, + port: parseInt(port, 10) + }; + } + return { + host: undefined, + port: parseInt(address, 10) + }; +}; +/** + * Node.js CLI flags that are not allowed in NODE_OPTIONS and must be + * passed as direct CLI arguments via execArgv. + * This set is the difference between all Node.js CLI flags and the ones **not** + * allowed in NODE_OPTIONS, as listed in the Node.js documentation: + * https://nodejs.org/api/cli.html#node_optionsoptions + * + * It is not exhaustive since not all options make sense for Next.js (e.g. --test) + */ const EXEC_ARGV_ONLY_OPTIONS = new Set([ + 'experimental-network-inspection', + 'experimental-storage-inspection', + 'experimental-worker-inspection', + 'experimental-inspector-network-resource' +]); +function formatArg(key, value) { + if (value === true) { + return `--${key}`; + } + if (value) { + return `--${key}=${// Values with spaces need to be quoted. We use JSON.stringify to + // also escape any nested quotes. + value.includes(' ') && !value.startsWith('"') ? JSON.stringify(value) : value}`; + } + return null; +} +function formatNodeOptions(args) { + const nodeOptionsParts = []; + const execArgv = []; + for (const [key, value] of Object.entries(args)){ + const formatted = formatArg(key, value); + if (formatted === null) continue; + if (EXEC_ARGV_ONLY_OPTIONS.has(key)) { + execArgv.push(formatted); + } else { + nodeOptionsParts.push(formatted); + } + } + return { + nodeOptions: nodeOptionsParts.join(' '), + execArgv + }; +} +function getParsedNodeOptions() { + const args = [ + ...process.execArgv, + ...getNodeOptionsArgs() + ]; + if (args.length === 0) return {}; + return parseNodeArgs(args); +} +function getParsedNodeOptionsWithoutInspect() { + const args = getNodeOptionsArgs(); + if (args.length === 0) return {}; + const parsed = parseNodeArgs(args); + // Remove inspect options. + delete parsed.inspect; + delete parsed['inspect-brk']; + delete parsed['inspect_brk']; + return parsed; +} +function getFormattedNodeOptionsWithoutInspect() { + const args = getParsedNodeOptionsWithoutInspect(); + if (Object.keys(args).length === 0) return ''; + return formatNodeOptions(args).nodeOptions; +} +function parseValidPositiveInteger(value) { + const parsedValue = parseInt(value, 10); + if (isNaN(parsedValue) || !isFinite(parsedValue) || parsedValue < 0) { + throw new _commander.InvalidArgumentError(`'${value}' is not a non-negative number.`); + } + return parsedValue; +} +const RESTART_EXIT_CODE = 77; +function getNodeDebugType(nodeOptions) { + if (nodeOptions.inspect) { + return 'inspect'; + } + if (nodeOptions['inspect-brk'] || nodeOptions['inspect_brk']) { + return 'inspect-brk'; + } +} +function getMaxOldSpaceSize() { + const args = getNodeOptionsArgs(); + if (args.length === 0) return; + const parsed = parseNodeArgs(args); + const size = parsed['max-old-space-size'] || parsed['max_old_space_size']; + if (!size || typeof size !== 'string') return; + return parseInt(size, 10); +} + +//# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/lib/worker-utils.js b/build/node_modules/next/dist/server/lib/worker-utils.js new file mode 100644 index 0000000..d3e636e --- /dev/null +++ b/build/node_modules/next/dist/server/lib/worker-utils.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getFreePort", { + enumerable: true, + get: function() { + return getFreePort; + } +}); +const _http = /*#__PURE__*/ _interop_require_default(require("http")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const getFreePort = async ()=>{ + return new Promise((resolve, reject)=>{ + const server = _http.default.createServer(()=>{}); + server.listen(0, ()=>{ + const address = server.address(); + server.close(); + if (address && typeof address === 'object') { + resolve(address.port); + } else { + reject(Object.defineProperty(new Error('invalid address from server: ' + (address == null ? void 0 : address.toString())), "__NEXT_ERROR_CODE", { + value: "E327", + enumerable: false, + configurable: true + })); + } + }); + }); +}; + +//# sourceMappingURL=worker-utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/load-components.js b/build/node_modules/next/dist/server/load-components.js new file mode 100644 index 0000000..a391899 --- /dev/null +++ b/build/node_modules/next/dist/server/load-components.js @@ -0,0 +1,179 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + evalManifestWithRetries: null, + loadComponents: null, + loadManifestWithRetries: null, + tryLoadManifestWithRetries: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + evalManifestWithRetries: function() { + return evalManifestWithRetries; + }, + loadComponents: function() { + return loadComponents; + }, + loadManifestWithRetries: function() { + return loadManifestWithRetries; + }, + tryLoadManifestWithRetries: function() { + return tryLoadManifestWithRetries; + } +}); +const _constants = require("../shared/lib/constants"); +const _path = require("path"); +const _require = require("./require"); +const _interopdefault = require("../lib/interop-default"); +const _tracer = require("./lib/trace/tracer"); +const _constants1 = require("./lib/trace/constants"); +const _loadmanifestexternal = require("./load-manifest.external"); +const _wait = require("../lib/wait"); +const _manifestssingleton = require("./app-render/manifests-singleton"); +const _normalizepagepath = require("../shared/lib/page-path/normalize-page-path"); +const _ismetadataroute = require("../lib/metadata/is-metadata-route"); +async function loadManifestWithRetries(manifestPath, attempts = 3) { + while(true){ + try { + return (0, _loadmanifestexternal.loadManifest)(manifestPath); + } catch (err) { + attempts--; + if (attempts <= 0) throw err; + await (0, _wait.wait)(100); + } + } +} +async function tryLoadManifestWithRetries(manifestPath, attempts = 3) { + try { + return await loadManifestWithRetries(manifestPath, attempts); + } catch (err) { + return undefined; + } +} +async function evalManifestWithRetries(manifestPath, attempts = 3) { + while(true){ + try { + return (0, _loadmanifestexternal.evalManifest)(manifestPath); + } catch (err) { + attempts--; + if (attempts <= 0) throw err; + await (0, _wait.wait)(100); + } + } +} +async function tryLoadClientReferenceManifest(manifestPath, entryName, attempts) { + try { + const context = await evalManifestWithRetries(manifestPath, attempts); + return context.__RSC_MANIFEST[entryName]; + } catch (err) { + return undefined; + } +} +async function loadComponentsImpl({ distDir, page, isAppPath, isDev, sriEnabled, // When route modules are used, which is the case for the server calls to loadComponents, it no longer needs manifest to be loaded here. +// Static generation still needs the manifests to be loaded here. +// In the future static generation will also use route modules, and we will remove this flag. +needsManifestsForLegacyReasons }) { + let DocumentMod = {}; + let AppMod = {}; + if (!isAppPath) { + ; + [DocumentMod, AppMod] = await Promise.all([ + (0, _require.requirePage)('/_document', distDir, false), + (0, _require.requirePage)('/_app', distDir, false) + ]); + } + if (needsManifestsForLegacyReasons) { + // In dev mode we retry loading a manifest file to handle a race condition + // that can occur while app and pages are compiling at the same time, and the + // build-manifest is still being written to disk while an app path is + // attempting to load. + const manifestLoadAttempts = isDev ? 3 : 1; + let reactLoadableManifestPath; + if (!process.env.TURBOPACK) { + reactLoadableManifestPath = (0, _path.join)(/* turbopackIgnore: true */ distDir, _constants.REACT_LOADABLE_MANIFEST); + } else if (isAppPath) { + reactLoadableManifestPath = (0, _path.join)(/* turbopackIgnore: true */ distDir, 'server', 'app', page, _constants.REACT_LOADABLE_MANIFEST); + } else { + reactLoadableManifestPath = (0, _path.join)(/* turbopackIgnore: true */ distDir, 'server', 'pages', (0, _normalizepagepath.normalizePagePath)(page), _constants.REACT_LOADABLE_MANIFEST); + } + // Make sure to avoid loading the manifest for static metadata routes for better performance. + const hasClientManifest = !(0, _ismetadataroute.isStaticMetadataRoute)(page); + // Load the manifest files first + // + // Loading page-specific manifests shouldn't throw an error if the manifest couldn't be found, so + // that the `requirePage` call below will throw the correct error in that case + // (a `PageNotFoundError`). + const [buildManifest, reactLoadableManifest, dynamicCssManifest, clientReferenceManifest, serverActionsManifest, subresourceIntegrityManifest] = await Promise.all([ + loadManifestWithRetries((0, _path.join)(/* turbopackIgnore: true */ distDir, _constants.BUILD_MANIFEST), manifestLoadAttempts), + tryLoadManifestWithRetries(reactLoadableManifestPath, manifestLoadAttempts), + // This manifest will only exist in Pages dir && Production && Webpack. + isAppPath || process.env.TURBOPACK ? undefined : loadManifestWithRetries((0, _path.join)(/* turbopackIgnore: true */ distDir, `${_constants.DYNAMIC_CSS_MANIFEST}.json`), manifestLoadAttempts).catch(()=>undefined), + isAppPath && hasClientManifest ? tryLoadClientReferenceManifest((0, _path.join)(/* turbopackIgnore: true */ distDir, 'server', 'app', page.replace(/%5F/g, '_') + '_' + _constants.CLIENT_REFERENCE_MANIFEST + '.js'), page.replace(/%5F/g, '_'), manifestLoadAttempts) : undefined, + isAppPath ? loadManifestWithRetries((0, _path.join)(/* turbopackIgnore: true */ distDir, 'server', _constants.SERVER_REFERENCE_MANIFEST + '.json'), manifestLoadAttempts).catch(()=>null) : null, + sriEnabled ? loadManifestWithRetries((0, _path.join)(/* turbopackIgnore: true */ distDir, 'server', _constants.SUBRESOURCE_INTEGRITY_MANIFEST + '.json')).catch(()=>undefined) : undefined + ]); + // Before requiring the actual page module, we have to set the reference + // manifests to our global store so Server Action's encryption util can access + // to them at the top level of the page module. + if (serverActionsManifest && clientReferenceManifest) { + (0, _manifestssingleton.setManifestsSingleton)({ + page, + clientReferenceManifest, + serverActionsManifest + }); + } + const ComponentMod = await (0, _require.requirePage)(page, distDir, isAppPath); + const Component = (0, _interopdefault.interopDefault)(ComponentMod); + const Document = (0, _interopdefault.interopDefault)(DocumentMod); + const App = (0, _interopdefault.interopDefault)(AppMod); + const { getServerSideProps, getStaticProps, getStaticPaths, routeModule } = ComponentMod; + return { + // @ts-expect-error this is indeed `{} || AppType` and not always `AppType` + App, + // @ts-expect-error this is indeed `{} || DocumentType` and not always `DocumentType` + Document, + Component, + buildManifest, + subresourceIntegrityManifest, + reactLoadableManifest: reactLoadableManifest || {}, + dynamicCssManifest, + pageConfig: ComponentMod.config || {}, + ComponentMod, + getServerSideProps, + getStaticProps, + getStaticPaths, + isAppPath, + page, + routeModule + }; + } else { + const ComponentMod = await (0, _require.requirePage)(page, distDir, isAppPath); + const Component = (0, _interopdefault.interopDefault)(ComponentMod); + const Document = (0, _interopdefault.interopDefault)(DocumentMod); + const App = (0, _interopdefault.interopDefault)(AppMod); + const { getServerSideProps, getStaticProps, getStaticPaths, routeModule } = ComponentMod; + return { + App, + Document, + Component, + pageConfig: ComponentMod.config || {}, + ComponentMod, + getServerSideProps, + getStaticProps, + getStaticPaths, + isAppPath, + page, + routeModule + }; // temporary `as any` to make TypeScript not fail so that the tests will run on the PR. + } +} +const loadComponents = (0, _tracer.getTracer)().wrap(_constants1.LoadComponentsSpan.loadComponents, loadComponentsImpl); + +//# sourceMappingURL=load-components.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/load-default-error-components.js b/build/node_modules/next/dist/server/load-default-error-components.js new file mode 100644 index 0000000..1555195 --- /dev/null +++ b/build/node_modules/next/dist/server/load-default-error-components.js @@ -0,0 +1,41 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "loadDefaultErrorComponents", { + enumerable: true, + get: function() { + return loadDefaultErrorComponents; + } +}); +const _constants = require("../shared/lib/constants"); +const _path = require("path"); +const _interopdefault = require("../lib/interop-default"); +const _tracer = require("./lib/trace/tracer"); +const _constants1 = require("./lib/trace/constants"); +const _loadcomponents = require("./load-components"); +async function loadDefaultErrorComponentsImpl(distDir) { + // eslint-disable-next-line @next/internal/typechecked-require -- Why not relative imports? + const Document = (0, _interopdefault.interopDefault)(require('next/dist/pages/_document')); + // eslint-disable-next-line @next/internal/typechecked-require -- Why not relative imports? + const AppMod = require('next/dist/pages/_app'); + const App = (0, _interopdefault.interopDefault)(AppMod); + // Load the compiled route module for this builtin error. + // TODO: (wyattjoh) replace this with just exporting the route module when the transition is complete + const ComponentMod = require('./route-modules/pages/builtin/_error'); + const Component = ComponentMod.routeModule.userland.default; + return { + App, + Document, + Component, + pageConfig: {}, + buildManifest: await (0, _loadcomponents.loadManifestWithRetries)((0, _path.join)(distDir, `fallback-${_constants.BUILD_MANIFEST}`)), + reactLoadableManifest: {}, + ComponentMod, + page: '/_error', + routeModule: ComponentMod.routeModule + }; +} +const loadDefaultErrorComponents = (0, _tracer.getTracer)().wrap(_constants1.LoadComponentsSpan.loadDefaultErrorComponents, loadDefaultErrorComponentsImpl); + +//# sourceMappingURL=load-default-error-components.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/load-manifest.external.js b/build/node_modules/next/dist/server/load-manifest.external.js new file mode 100644 index 0000000..40811b6 --- /dev/null +++ b/build/node_modules/next/dist/server/load-manifest.external.js @@ -0,0 +1,117 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + clearManifestCache: null, + evalManifest: null, + loadManifest: null, + loadManifestFromRelativePath: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + clearManifestCache: function() { + return clearManifestCache; + }, + evalManifest: function() { + return evalManifest; + }, + loadManifest: function() { + return loadManifest; + }, + loadManifestFromRelativePath: function() { + return loadManifestFromRelativePath; + } +}); +const _path = require("path"); +const _fs = require("fs"); +const _vm = require("vm"); +const _deepfreeze = require("../shared/lib/deep-freeze"); +const sharedCache = new Map(); +function loadManifest(path, shouldCache = true, cache = sharedCache, skipParse = false, handleMissing) { + const cached = shouldCache && cache.get(path); + if (cached) { + return cached; + } + let manifest; + if (handleMissing) { + try { + manifest = (0, _fs.readFileSync)(/* turbopackIgnore: true */ path, 'utf8'); + } catch (err) { + let result = {}; + cache.set(path, result); + return result; + } + } else { + manifest = (0, _fs.readFileSync)(/* turbopackIgnore: true */ path, 'utf8'); + } + if (!skipParse) { + manifest = JSON.parse(manifest); + // Freeze the manifest so it cannot be modified if we're caching it. + if (shouldCache) { + manifest = (0, _deepfreeze.deepFreeze)(manifest); + } + } + if (shouldCache) { + cache.set(path, manifest); + } + return manifest; +} +function evalManifest(path, shouldCache = true, cache = sharedCache, handleMissing) { + const cached = shouldCache && cache.get(path); + if (cached) { + return cached; + } + let content; + if (handleMissing) { + try { + content = (0, _fs.readFileSync)(/* turbopackIgnore: true */ path, 'utf8'); + } catch (err) { + let result = {}; + cache.set(path, result); + return result; + } + } else { + content = (0, _fs.readFileSync)(/* turbopackIgnore: true */ path, 'utf8'); + } + if (content.length === 0) { + throw Object.defineProperty(new Error('Manifest file is empty'), "__NEXT_ERROR_CODE", { + value: "E328", + enumerable: false, + configurable: true + }); + } + let contextObject = { + process: { + env: { + NEXT_DEPLOYMENT_ID: process.env.NEXT_DEPLOYMENT_ID + } + } + }; + (0, _vm.runInNewContext)(content, contextObject); + // Freeze the context object so it cannot be modified if we're caching it. + if (shouldCache) { + contextObject = (0, _deepfreeze.deepFreeze)(contextObject); + } + if (shouldCache) { + cache.set(path, contextObject); + } + return contextObject; +} +function loadManifestFromRelativePath({ projectDir, distDir, manifest, shouldCache, cache, skipParse, handleMissing, useEval }) { + const manifestPath = (0, _path.join)(/* turbopackIgnore: true */ projectDir, distDir, manifest); + if (useEval) { + return evalManifest(manifestPath, shouldCache, cache, handleMissing); + } + return loadManifest(manifestPath, shouldCache, cache, skipParse, handleMissing); +} +function clearManifestCache(path, cache = sharedCache) { + return cache.delete(path); +} + +//# sourceMappingURL=load-manifest.external.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/match-bundle.js b/build/node_modules/next/dist/server/match-bundle.js new file mode 100644 index 0000000..a9d5cf0 --- /dev/null +++ b/build/node_modules/next/dist/server/match-bundle.js @@ -0,0 +1,25 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "default", { + enumerable: true, + get: function() { + return matchBundle; + } +}); +const _getroutefromassetpath = /*#__PURE__*/ _interop_require_default(require("../shared/lib/router/utils/get-route-from-asset-path")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function matchBundle(regex, input) { + const result = regex.exec(input); + if (!result) { + return null; + } + return (0, _getroutefromassetpath.default)(`/${result[1]}`); +} + +//# sourceMappingURL=match-bundle.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/mcp/get-mcp-middleware.js b/build/node_modules/next/dist/server/mcp/get-mcp-middleware.js new file mode 100644 index 0000000..549395c --- /dev/null +++ b/build/node_modules/next/dist/server/mcp/get-mcp-middleware.js @@ -0,0 +1,49 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getMcpMiddleware", { + enumerable: true, + get: function() { + return getMcpMiddleware; + } +}); +const _getorcreatemcpserver = require("./get-or-create-mcp-server"); +const _parsebody = require("../api-utils/node/parse-body"); +const _streamableHttp = require("next/dist/compiled/@modelcontextprotocol/sdk/server/streamableHttp"); +function getMcpMiddleware(options) { + return async function(req, res, next) { + const { pathname } = new URL(req.url || '', 'http://n'); + if (!pathname.startsWith('/_next/mcp')) { + return next(); + } + const mcpServer = (0, _getorcreatemcpserver.getOrCreateMcpServer)(options); + const transport = new _streamableHttp.StreamableHTTPServerTransport({ + sessionIdGenerator: undefined + }); + try { + res.on('close', ()=>{ + transport.close(); + }); + await mcpServer.connect(transport); + const parsedBody = await (0, _parsebody.parseBody)(req, 1024 * 1024) // 1MB limit + ; + await transport.handleRequest(req, res, parsedBody); + } catch (error) { + if (!res.headersSent) { + res.statusCode = 500; + res.setHeader('Content-Type', 'application/json; charset=utf-8'); + res.end(JSON.stringify({ + jsonrpc: '2.0', + error: { + code: -32000, + message: 'Internal server error' + }, + id: null + })); + } + } + }; +} + +//# sourceMappingURL=get-mcp-middleware.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/mcp/get-or-create-mcp-server.js b/build/node_modules/next/dist/server/mcp/get-or-create-mcp-server.js new file mode 100644 index 0000000..200cdb4 --- /dev/null +++ b/build/node_modules/next/dist/server/mcp/get-or-create-mcp-server.js @@ -0,0 +1,41 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getOrCreateMcpServer", { + enumerable: true, + get: function() { + return getOrCreateMcpServer; + } +}); +const _mcp = require("next/dist/compiled/@modelcontextprotocol/sdk/server/mcp"); +const _getprojectmetadata = require("./tools/get-project-metadata"); +const _geterrors = require("./tools/get-errors"); +const _getpagemetadata = require("./tools/get-page-metadata"); +const _getlogs = require("./tools/get-logs"); +const _getserveractionbyid = require("./tools/get-server-action-by-id"); +const _getroutes = require("./tools/get-routes"); +let mcpServer; +const getOrCreateMcpServer = (options)=>{ + if (mcpServer) { + return mcpServer; + } + mcpServer = new _mcp.McpServer({ + name: 'Next.js MCP Server', + version: '0.2.0' + }); + (0, _getprojectmetadata.registerGetProjectMetadataTool)(mcpServer, options.projectPath, options.getDevServerUrl); + (0, _geterrors.registerGetErrorsTool)(mcpServer, options.sendHmrMessage, options.getActiveConnectionCount); + (0, _getpagemetadata.registerGetPageMetadataTool)(mcpServer, options.sendHmrMessage, options.getActiveConnectionCount); + (0, _getlogs.registerGetLogsTool)(mcpServer, options.distDir); + (0, _getserveractionbyid.registerGetActionByIdTool)(mcpServer, options.distDir); + (0, _getroutes.registerGetRoutesTool)(mcpServer, { + projectPath: options.projectPath, + nextConfig: options.nextConfig, + pagesDir: options.pagesDir, + appDir: options.appDir + }); + return mcpServer; +}; + +//# sourceMappingURL=get-or-create-mcp-server.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/mcp/mcp-telemetry-tracker.js b/build/node_modules/next/dist/server/mcp/mcp-telemetry-tracker.js new file mode 100644 index 0000000..bdb288a --- /dev/null +++ b/build/node_modules/next/dist/server/mcp/mcp-telemetry-tracker.js @@ -0,0 +1,82 @@ +/** + * Telemetry tracker for MCP tool call usage. + * Tracks invocation counts for each MCP tool to be reported via telemetry. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getMcpTelemetryUsage: null, + mcpTelemetryTracker: null, + recordMcpTelemetry: null, + resetMcpTelemetry: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getMcpTelemetryUsage: function() { + return getMcpTelemetryUsage; + }, + mcpTelemetryTracker: function() { + return mcpTelemetryTracker; + }, + recordMcpTelemetry: function() { + return recordMcpTelemetry; + }, + resetMcpTelemetry: function() { + return resetMcpTelemetry; + } +}); +class McpTelemetryTracker { + /** + * Record a tool call invocation + */ recordToolCall(toolName) { + const current = this.usageMap.get(toolName) || 0; + this.usageMap.set(toolName, current + 1); + } + /** + * Get all tool usages as an array + */ getUsages() { + return Array.from(this.usageMap.entries()).map(([featureName, count])=>({ + featureName, + invocationCount: count + })); + } + /** + * Reset all usage tracking + */ reset() { + this.usageMap.clear(); + } + /** + * Check if any tools have been called + */ hasUsage() { + return this.usageMap.size > 0; + } + constructor(){ + this.usageMap = new Map(); + } +} +const mcpTelemetryTracker = new McpTelemetryTracker(); +function getMcpTelemetryUsage() { + return mcpTelemetryTracker.getUsages(); +} +function resetMcpTelemetry() { + mcpTelemetryTracker.reset(); +} +function recordMcpTelemetry(telemetry) { + const mcpUsages = getMcpTelemetryUsage(); + if (mcpUsages.length === 0) { + return; + } + const { eventMcpToolUsage } = require('../../telemetry/events/build'); + const events = eventMcpToolUsage(mcpUsages); + for (const event of events){ + telemetry.record(event); + } +} + +//# sourceMappingURL=mcp-telemetry-tracker.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/mcp/tools/get-errors.js b/build/node_modules/next/dist/server/mcp/tools/get-errors.js new file mode 100644 index 0000000..c3cc35a --- /dev/null +++ b/build/node_modules/next/dist/server/mcp/tools/get-errors.js @@ -0,0 +1,114 @@ +/** + * MCP tool for retrieving error state from Next.js dev server. + * + * This tool provides comprehensive error reporting including: + * - Next.js global errors (e.g., next.config validation errors) + * - Browser runtime errors with source-mapped stack traces + * - Build errors from webpack/turbopack compilation + * + * For browser errors, it leverages the HMR infrastructure for server-to-browser communication. + * + * Flow: + * MCP client → server generates request ID → HMR message to browser → + * browser queries error overlay state → HMR response back → server performs source mapping → + * combined with global errors → formatted output. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + handleErrorStateResponse: null, + registerGetErrorsTool: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + handleErrorStateResponse: function() { + return handleErrorStateResponse; + }, + registerGetErrorsTool: function() { + return registerGetErrorsTool; + } +}); +const _hotreloadertypes = require("../../dev/hot-reloader-types"); +const _formaterrors = require("./utils/format-errors"); +const _browsercommunication = require("./utils/browser-communication"); +const _nextinstanceerrorstate = require("./next-instance-error-state"); +const _mcptelemetrytracker = require("../mcp-telemetry-tracker"); +function registerGetErrorsTool(server, sendHmrMessage, getActiveConnectionCount) { + server.registerTool('get_errors', { + description: 'Get the current error state from the Next.js dev server, including Next.js global errors (e.g., next.config validation), browser runtime errors, and build errors with source-mapped stack traces', + inputSchema: {} + }, async (_request)=>{ + // Track telemetry + _mcptelemetrytracker.mcpTelemetryTracker.recordToolCall('mcp/get_errors'); + try { + const connectionCount = getActiveConnectionCount(); + if (connectionCount === 0) { + return { + content: [ + { + type: 'text', + text: JSON.stringify({ + error: 'No browser sessions connected. Please open your application in a browser to retrieve error state.' + }) + } + ] + }; + } + const responses = await (0, _browsercommunication.createBrowserRequest)(_hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.REQUEST_CURRENT_ERROR_STATE, sendHmrMessage, getActiveConnectionCount, _browsercommunication.DEFAULT_BROWSER_REQUEST_TIMEOUT_MS); + // The error state for each route + // key is the route path, value is the error state + const routesErrorState = new Map(); + for (const response of responses){ + if (response.data) { + routesErrorState.set(response.url, response.data); + } + } + const hasRouteErrors = Array.from(routesErrorState.values()).some((state)=>state.errors.length > 0 || !!state.buildError); + const hasInstanceErrors = _nextinstanceerrorstate.NextInstanceErrorState.nextConfig.length > 0; + if (!hasRouteErrors && !hasInstanceErrors) { + return { + content: [ + { + type: 'text', + text: JSON.stringify({ + configErrors: [], + sessionErrors: [] + }) + } + ] + }; + } + const output = await (0, _formaterrors.formatErrors)(routesErrorState, _nextinstanceerrorstate.NextInstanceErrorState); + return { + content: [ + { + type: 'text', + text: JSON.stringify(output) + } + ] + }; + } catch (error) { + return { + content: [ + { + type: 'text', + text: JSON.stringify({ + error: error instanceof Error ? error.message : String(error) + }) + } + ] + }; + } + }); +} +function handleErrorStateResponse(requestId, errorState, url) { + (0, _browsercommunication.handleBrowserPageResponse)(requestId, errorState, url || ''); +} + +//# sourceMappingURL=get-errors.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/mcp/tools/get-logs.js b/build/node_modules/next/dist/server/mcp/tools/get-logs.js new file mode 100644 index 0000000..fa66e41 --- /dev/null +++ b/build/node_modules/next/dist/server/mcp/tools/get-logs.js @@ -0,0 +1,67 @@ +/** + * MCP tool for getting the path to the Next.js development log file. + * + * This tool returns the path to the {nextConfig.distDir}/logs/next-development.log file + * that contains browser console logs and other development information. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "registerGetLogsTool", { + enumerable: true, + get: function() { + return registerGetLogsTool; + } +}); +const _promises = require("fs/promises"); +const _path = require("path"); +const _mcptelemetrytracker = require("../mcp-telemetry-tracker"); +function registerGetLogsTool(server, distDir) { + server.registerTool('get_logs', { + description: 'Get the path to the Next.js development log file. Returns the file path so the agent can read the logs directly.' + }, async ()=>{ + // Track telemetry + _mcptelemetrytracker.mcpTelemetryTracker.recordToolCall('mcp/get_logs'); + try { + const logFilePath = (0, _path.join)(distDir, 'logs', 'next-development.log'); + // Check if the log file exists + try { + await (0, _promises.stat)(logFilePath); + } catch (error) { + return { + content: [ + { + type: 'text', + text: JSON.stringify({ + error: `Log file not found at ${logFilePath}.` + }) + } + ] + }; + } + return { + content: [ + { + type: 'text', + text: JSON.stringify({ + logFilePath + }) + } + ] + }; + } catch (error) { + return { + content: [ + { + type: 'text', + text: JSON.stringify({ + error: `Error getting log file path: ${error instanceof Error ? error.message : String(error)}` + }) + } + ] + }; + } + }); +} + +//# sourceMappingURL=get-logs.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/mcp/tools/get-page-metadata.js b/build/node_modules/next/dist/server/mcp/tools/get-page-metadata.js new file mode 100644 index 0000000..dac8dbb --- /dev/null +++ b/build/node_modules/next/dist/server/mcp/tools/get-page-metadata.js @@ -0,0 +1,188 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + handlePageMetadataResponse: null, + registerGetPageMetadataTool: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + handlePageMetadataResponse: function() { + return handlePageMetadataResponse; + }, + registerGetPageMetadataTool: function() { + return registerGetPageMetadataTool; + } +}); +const _hotreloadertypes = require("../../dev/hot-reloader-types"); +const _browsercommunication = require("./utils/browser-communication"); +const _mcptelemetrytracker = require("../mcp-telemetry-tracker"); +function registerGetPageMetadataTool(server, sendHmrMessage, getActiveConnectionCount) { + server.registerTool('get_page_metadata', { + description: 'Get runtime metadata about what contributes to the current page render from active browser sessions.', + inputSchema: {} + }, async (_request)=>{ + // Track telemetry + _mcptelemetrytracker.mcpTelemetryTracker.recordToolCall('mcp/get_page_metadata'); + try { + const connectionCount = getActiveConnectionCount(); + if (connectionCount === 0) { + return { + content: [ + { + type: 'text', + text: JSON.stringify({ + error: 'No browser sessions connected. Please open your application in a browser to retrieve page metadata.' + }) + } + ] + }; + } + const responses = await (0, _browsercommunication.createBrowserRequest)(_hotreloadertypes.HMR_MESSAGE_SENT_TO_BROWSER.REQUEST_PAGE_METADATA, sendHmrMessage, getActiveConnectionCount, _browsercommunication.DEFAULT_BROWSER_REQUEST_TIMEOUT_MS); + if (responses.length === 0) { + return { + content: [ + { + type: 'text', + text: JSON.stringify({ + sessions: [] + }) + } + ] + }; + } + const sessionMetadata = []; + for (const response of responses){ + if (response.data) { + // TODO: Add other metadata for the current page render here. Currently, we only have segment trie data. + const pageMetadata = convertSegmentTrieToPageMetadata(response.data); + sessionMetadata.push({ + url: response.url, + metadata: pageMetadata + }); + } + } + if (sessionMetadata.length === 0) { + return { + content: [ + { + type: 'text', + text: JSON.stringify({ + sessions: [] + }) + } + ] + }; + } + const output = formatPageMetadata(sessionMetadata); + return { + content: [ + { + type: 'text', + text: JSON.stringify(output) + } + ] + }; + } catch (error) { + return { + content: [ + { + type: 'text', + text: JSON.stringify({ + error: error instanceof Error ? error.message : String(error) + }) + } + ] + }; + } + }); +} +function handlePageMetadataResponse(requestId, segmentTrieData, url) { + (0, _browsercommunication.handleBrowserPageResponse)(requestId, segmentTrieData, url || ''); +} +function convertSegmentTrieToPageMetadata(data) { + const segments = []; + if (data.segmentTrie) { + // Traverse the trie and collect all segments + function traverseTrie(node) { + if (node.value) { + segments.push({ + type: node.value.type, + pagePath: node.value.pagePath, + boundaryType: node.value.boundaryType + }); + } + for (const childNode of Object.values(node.children)){ + if (childNode) { + traverseTrie(childNode); + } + } + } + traverseTrie(data.segmentTrie); + } + return { + segments, + routerType: data.routerType + }; +} +function formatPageMetadata(sessionMetadata) { + const sessions = []; + for (const { url, metadata } of sessionMetadata){ + let displayUrl = url; + try { + const urlObj = new URL(url); + displayUrl = urlObj.pathname + urlObj.search + urlObj.hash; + } catch { + // If URL parsing fails, use the original URL + } + // Ensure consistent output to avoid flaky tests + const sortedSegments = [ + ...metadata.segments + ].sort((a, b)=>{ + const typeOrder = (segment)=>{ + const type = segment.boundaryType || segment.type; + if (type === 'layout') return 0; + if (type.startsWith('boundary:')) return 1; + if (type === 'page') return 2; + return 3; + }; + const aOrder = typeOrder(a); + const bOrder = typeOrder(b); + if (aOrder !== bOrder) return aOrder - bOrder; + return a.pagePath.localeCompare(b.pagePath); + }); + const formattedSegments = []; + for (const segment of sortedSegments){ + const path = segment.pagePath; + const isBuiltin = path.startsWith('__next_builtin__'); + const type = segment.boundaryType || segment.type; + const isBoundary = type.startsWith('boundary:'); + let displayPath = path.replace(/@boundary$/, '').replace(/^__next_builtin__/, ''); + if (!isBuiltin && !displayPath.startsWith('app/')) { + displayPath = `app/${displayPath}`; + } + formattedSegments.push({ + path: displayPath, + type, + isBoundary, + isBuiltin + }); + } + sessions.push({ + url: displayUrl, + routerType: metadata.routerType, + segments: formattedSegments + }); + } + return { + sessions + }; +} + +//# sourceMappingURL=get-page-metadata.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/mcp/tools/get-project-metadata.js b/build/node_modules/next/dist/server/mcp/tools/get-project-metadata.js new file mode 100644 index 0000000..3c9aa99 --- /dev/null +++ b/build/node_modules/next/dist/server/mcp/tools/get-project-metadata.js @@ -0,0 +1,59 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "registerGetProjectMetadataTool", { + enumerable: true, + get: function() { + return registerGetProjectMetadataTool; + } +}); +const _mcptelemetrytracker = require("../mcp-telemetry-tracker"); +function registerGetProjectMetadataTool(server, projectPath, getDevServerUrl) { + server.registerTool('get_project_metadata', { + description: 'Returns the the metadata of this Next.js project, including project path, dev server URL, etc.', + inputSchema: {} + }, async (_request)=>{ + // Track telemetry + _mcptelemetrytracker.mcpTelemetryTracker.recordToolCall('mcp/get_project_metadata'); + try { + if (!projectPath) { + return { + content: [ + { + type: 'text', + text: JSON.stringify({ + error: 'Unable to determine the absolute path of the Next.js project.' + }) + } + ] + }; + } + const devServerUrl = getDevServerUrl(); + return { + content: [ + { + type: 'text', + text: JSON.stringify({ + projectPath, + devServerUrl + }) + } + ] + }; + } catch (error) { + return { + content: [ + { + type: 'text', + text: JSON.stringify({ + error: error instanceof Error ? error.message : String(error) + }) + } + ] + }; + } + }); +} + +//# sourceMappingURL=get-project-metadata.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/mcp/tools/get-routes.js b/build/node_modules/next/dist/server/mcp/tools/get-routes.js new file mode 100644 index 0000000..56e756b --- /dev/null +++ b/build/node_modules/next/dist/server/mcp/tools/get-routes.js @@ -0,0 +1,136 @@ +/** + * MCP tool for getting all routes that become entry points in a Next.js application. + * + * This tool discovers routes by scanning the filesystem directly. It finds all route + * files in the app/ and pages/ directories and converts them to route paths. + * + * Returns routes grouped by router type: + * - appRouter: App Router pages and route handlers + * - pagesRouter: Pages Router pages and API routes + * + * Dynamic route segments appear as [id], [slug], or [...slug] patterns. This tool + * does NOT expand getStaticParams - it only shows the route patterns as defined in + * the filesystem. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "registerGetRoutesTool", { + enumerable: true, + get: function() { + return registerGetRoutesTool; + } +}); +const _mcptelemetrytracker = require("../mcp-telemetry-tracker"); +const _routediscovery = require("../../../build/route-discovery"); +const _zod = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/zod")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function registerGetRoutesTool(server, options) { + server.registerTool('get_routes', { + description: 'Get all routes that will become entry points in the Next.js application by scanning the filesystem. Returns routes grouped by router type (appRouter, pagesRouter). Dynamic segments appear as [param] or [...slug] patterns. API routes are included in their respective routers (e.g., /api/* routes from pages/ are in pagesRouter). Optional parameter: routerType ("app" | "pages") - filter by specific router type, omit to get all routes.', + inputSchema: { + routerType: _zod.default.union([ + _zod.default.literal('app'), + _zod.default.literal('pages') + ]).optional() + } + }, async (request)=>{ + // Track telemetry + _mcptelemetrytracker.mcpTelemetryTracker.recordToolCall('mcp/get_routes'); + try { + const routerType = request.routerType === 'app' || request.routerType === 'pages' ? request.routerType : undefined; + const { projectPath, nextConfig, pagesDir, appDir } = options; + // Check if we have any directories to scan + if (!pagesDir && !appDir) { + return { + content: [ + { + type: 'text', + text: JSON.stringify({ + error: 'No pages or app directory found in the project.' + }) + } + ] + }; + } + const isSrcDir = pagesDir && pagesDir.includes('/src/') || appDir && appDir.includes('/src/'); + const commonOpts = { + pageExtensions: nextConfig.pageExtensions, + isDev: true, + baseDir: projectPath, + isSrcDir: !!isSrcDir + }; + // Discover app and pages routes independently so a failure in one + // router doesn't prevent the other from returning results. + let appRoutes = []; + let pageRoutes = []; + const wantApp = routerType !== 'pages' && appDir; + const wantPages = routerType !== 'app' && pagesDir; + const [appResult, pagesResult] = await Promise.all([ + wantApp ? (0, _routediscovery.discoverRoutes)({ + ...commonOpts, + appDir + }).catch(()=>null) : null, + wantPages ? (0, _routediscovery.discoverRoutes)({ + ...commonOpts, + pagesDir + }).catch(()=>null) : null + ]); + if (appResult) { + appRoutes = [ + ...appResult.appRoutes, + ...appResult.appRouteHandlers + ].map((r)=>r.route).sort(); + } + if (pagesResult) { + pageRoutes = [ + ...pagesResult.pageRoutes, + ...pagesResult.pageApiRoutes + ].map((r)=>r.route).sort(); + } + if (appRoutes.length === 0 && pageRoutes.length === 0) { + return { + content: [ + { + type: 'text', + text: JSON.stringify({ + appRouter: [], + pagesRouter: [] + }) + } + ] + }; + } + // Format the output with grouped routes + const output = { + appRouter: appRoutes.length > 0 ? appRoutes : undefined, + pagesRouter: pageRoutes.length > 0 ? pageRoutes : undefined + }; + return { + content: [ + { + type: 'text', + text: JSON.stringify(output, null, 2) + } + ] + }; + } catch (error) { + return { + content: [ + { + type: 'text', + text: JSON.stringify({ + error: error instanceof Error ? error.message : String(error) + }) + } + ] + }; + } + }); +} + +//# sourceMappingURL=get-routes.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/mcp/tools/get-server-action-by-id.js b/build/node_modules/next/dist/server/mcp/tools/get-server-action-by-id.js new file mode 100644 index 0000000..6d5fcb0 --- /dev/null +++ b/build/node_modules/next/dist/server/mcp/tools/get-server-action-by-id.js @@ -0,0 +1,121 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "registerGetActionByIdTool", { + enumerable: true, + get: function() { + return registerGetActionByIdTool; + } +}); +const _zod = require("next/dist/compiled/zod"); +const _fs = require("fs"); +const _path = require("path"); +const _mcptelemetrytracker = require("../mcp-telemetry-tracker"); +const INLINE_ACTION_PREFIX = '$$RSC_SERVER_ACTION_'; +function registerGetActionByIdTool(server, distDir) { + server.registerTool('get_server_action_by_id', { + description: 'Locates a Server Action by its ID in the server-reference-manifest.json. Returns the filename and export name for the action.', + inputSchema: { + actionId: _zod.z.string() + } + }, async (request)=>{ + // Track telemetry + _mcptelemetrytracker.mcpTelemetryTracker.recordToolCall('mcp/get_server_action_by_id'); + try { + const { actionId } = request; + if (!actionId) { + return { + content: [ + { + type: 'text', + text: JSON.stringify({ + error: 'actionId parameter is required' + }) + } + ] + }; + } + const manifestPath = (0, _path.join)(distDir, 'server', 'server-reference-manifest.json'); + let manifestContent; + try { + manifestContent = await _fs.promises.readFile(manifestPath, 'utf-8'); + } catch (error) { + return { + content: [ + { + type: 'text', + text: JSON.stringify({ + error: `Could not read server-reference-manifest.json at ${manifestPath}.` + }) + } + ] + }; + } + const manifest = JSON.parse(manifestContent); + // Search in node entries + if (manifest.node && manifest.node[actionId]) { + const entry = manifest.node[actionId]; + const isInlineAction = entry.exportedName.startsWith(INLINE_ACTION_PREFIX); + return { + content: [ + { + type: 'text', + text: JSON.stringify({ + actionId, + runtime: 'node', + filename: entry.filename, + functionName: isInlineAction ? 'inline server action' : entry.exportedName, + layer: entry.layer, + workers: entry.workers + }, null, 2) + } + ] + }; + } + // Search in edge entries + if (manifest.edge && manifest.edge[actionId]) { + const entry = manifest.edge[actionId]; + const isInlineAction = entry.exportedName.startsWith(INLINE_ACTION_PREFIX); + return { + content: [ + { + type: 'text', + text: JSON.stringify({ + actionId, + runtime: 'edge', + filename: entry.filename, + functionName: isInlineAction ? 'inline server action' : entry.exportedName, + layer: entry.layer, + workers: entry.workers + }, null, 2) + } + ] + }; + } + return { + content: [ + { + type: 'text', + text: JSON.stringify({ + error: `Action ID "${actionId}" not found in server-reference-manifest.json` + }) + } + ] + }; + } catch (error) { + return { + content: [ + { + type: 'text', + text: JSON.stringify({ + error: error instanceof Error ? error.message : String(error) + }) + } + ] + }; + } + }); +} + +//# sourceMappingURL=get-server-action-by-id.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/mcp/tools/next-instance-error-state.js b/build/node_modules/next/dist/server/mcp/tools/next-instance-error-state.js new file mode 100644 index 0000000..688abbd --- /dev/null +++ b/build/node_modules/next/dist/server/mcp/tools/next-instance-error-state.js @@ -0,0 +1,31 @@ +/** + * Global error state for Next.js instance-level errors that are not associated + * with a specific browser session or route. This state is exposed through the MCP server's `get_errors` + * tool as well. This covers the errors that are global to the Next.js instance, such as errors in next.config.js. + * + * + * ## Usage + * + * This state is directly manipulated by various parts of the Next.js dev server: + * + * // Reset the error state + * NextInstanceErrorState.[errorType] = [] + * + * // Capture an error for a specific error type + * NextInstanceErrorState.[errorType].push(err) + * + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "NextInstanceErrorState", { + enumerable: true, + get: function() { + return NextInstanceErrorState; + } +}); +const NextInstanceErrorState = { + nextConfig: [] +}; + +//# sourceMappingURL=next-instance-error-state.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/mcp/tools/utils/browser-communication.js b/build/node_modules/next/dist/server/mcp/tools/utils/browser-communication.js new file mode 100644 index 0000000..cd4a800 --- /dev/null +++ b/build/node_modules/next/dist/server/mcp/tools/utils/browser-communication.js @@ -0,0 +1,90 @@ +/** + * Shared utilities for MCP tools that communicate with the browser. + * This module provides a common infrastructure for request-response + * communication between MCP endpoints and browser sessions via HMR. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + DEFAULT_BROWSER_REQUEST_TIMEOUT_MS: null, + createBrowserRequest: null, + handleBrowserPageResponse: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + DEFAULT_BROWSER_REQUEST_TIMEOUT_MS: function() { + return DEFAULT_BROWSER_REQUEST_TIMEOUT_MS; + }, + createBrowserRequest: function() { + return createBrowserRequest; + }, + handleBrowserPageResponse: function() { + return handleBrowserPageResponse; + } +}); +const _nanoid = require("next/dist/compiled/nanoid"); +const DEFAULT_BROWSER_REQUEST_TIMEOUT_MS = 5000; +const pendingRequests = new Map(); +function createBrowserRequest(messageType, sendHmrMessage, getActiveConnectionCount, timeoutMs) { + const connectionCount = getActiveConnectionCount(); + if (connectionCount === 0) { + return Promise.resolve([]); + } + const requestId = `mcp-${messageType}-${(0, _nanoid.nanoid)()}`; + const responsePromise = new Promise((resolve, reject)=>{ + const timeout = setTimeout(()=>{ + const pending = pendingRequests.get(requestId); + if (pending && pending.responses.length > 0) { + resolve(pending.responses); + } else { + reject(Object.defineProperty(new Error(`Timeout waiting for response from frontend. The browser may not be responding to HMR messages.`), "__NEXT_ERROR_CODE", { + value: "E825", + enumerable: false, + configurable: true + })); + } + pendingRequests.delete(requestId); + }, timeoutMs); + pendingRequests.set(requestId, { + responses: [], + expectedCount: connectionCount, + resolve: resolve, + reject, + timeout + }); + }); + sendHmrMessage({ + type: messageType, + requestId + }); + return responsePromise; +} +function handleBrowserPageResponse(requestId, data, url) { + if (!url) { + throw Object.defineProperty(new Error('URL is required in MCP browser response. This is a bug in Next.js.'), "__NEXT_ERROR_CODE", { + value: "E824", + enumerable: false, + configurable: true + }); + } + const pending = pendingRequests.get(requestId); + if (pending) { + pending.responses.push({ + url, + data + }); + if (pending.responses.length >= pending.expectedCount) { + clearTimeout(pending.timeout); + pending.resolve(pending.responses); + pendingRequests.delete(requestId); + } + } +} + +//# sourceMappingURL=browser-communication.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/mcp/tools/utils/format-errors.js b/build/node_modules/next/dist/server/mcp/tools/utils/format-errors.js new file mode 100644 index 0000000..ef78121 --- /dev/null +++ b/build/node_modules/next/dist/server/mcp/tools/utils/format-errors.js @@ -0,0 +1,137 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + formatErrors: null, + setStackFrameResolver: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + formatErrors: function() { + return formatErrors; + }, + setStackFrameResolver: function() { + return setStackFrameResolver; + } +}); +const _errorsource = require("../../../../shared/lib/error-source"); +// Dependency injection for stack frame resolver +let stackFrameResolver; +function setStackFrameResolver(fn) { + stackFrameResolver = fn; +} +async function resolveStackFrames(request) { + if (!stackFrameResolver) { + throw Object.defineProperty(new Error('Stack frame resolver not initialized. This is a bug in Next.js.'), "__NEXT_ERROR_CODE", { + value: "E822", + enumerable: false, + configurable: true + }); + } + return stackFrameResolver(request); +} +const formatStackFrameToObject = (frame)=>{ + return { + file: frame.file || '', + methodName: frame.methodName || '', + line: frame.line1, + column: frame.column1 + }; +}; +const resolveErrorFrames = async (frames, context)=>{ + try { + const resolvedFrames = await resolveStackFrames({ + frames: frames.map((frame)=>({ + file: frame.file || null, + methodName: frame.methodName || '', + arguments: [], + line1: frame.line1 || null, + column1: frame.column1 || null + })), + isServer: context.isServer, + isEdgeServer: context.isEdgeServer, + isAppDirectory: context.isAppDirectory + }); + return resolvedFrames.filter((resolvedFrame)=>{ + var _resolvedFrame_value_originalStackFrame; + return !(resolvedFrame.status === 'fulfilled' && ((_resolvedFrame_value_originalStackFrame = resolvedFrame.value.originalStackFrame) == null ? void 0 : _resolvedFrame_value_originalStackFrame.ignored)); + }).map((resolvedFrame, j)=>resolvedFrame.status === 'fulfilled' && resolvedFrame.value.originalStackFrame ? formatStackFrameToObject(resolvedFrame.value.originalStackFrame) : formatStackFrameToObject(frames[j])); + } catch { + return frames.map(formatStackFrameToObject); + } +}; +async function formatRuntimeErrorsToObjects(errors, isAppDirectory) { + const formattedErrors = []; + for (const error of errors){ + var _error_error, _error_error1, _error_frames; + const errorName = ((_error_error = error.error) == null ? void 0 : _error_error.name) || 'Error'; + const errorMsg = ((_error_error1 = error.error) == null ? void 0 : _error_error1.message) || 'Unknown error'; + let stack = []; + if ((_error_frames = error.frames) == null ? void 0 : _error_frames.length) { + const errorSource = (0, _errorsource.getErrorSource)(error.error); + stack = await resolveErrorFrames(error.frames, { + isServer: errorSource === 'server', + isEdgeServer: errorSource === 'edge-server', + isAppDirectory + }); + } + formattedErrors.push({ + type: error.type, + errorName, + message: errorMsg, + stack + }); + } + return formattedErrors; +} +async function formatErrors(errorsByUrl, nextInstanceErrors = { + nextConfig: [] +}) { + const output = { + configErrors: [], + sessionErrors: [] + }; + // Format Next.js instance errors first (e.g., next.config.js errors) + for (const error of nextInstanceErrors.nextConfig){ + if (error instanceof Error) { + output.configErrors.push({ + name: error.name, + message: error.message, + stack: error.stack || null + }); + } else { + output.configErrors.push({ + name: 'Error', + message: String(error), + stack: null + }); + } + } + // Format browser session errors + for (const [url, overlayState] of errorsByUrl){ + const totalErrorCount = overlayState.errors.length + (overlayState.buildError ? 1 : 0); + if (totalErrorCount === 0) continue; + let displayUrl = url; + try { + const urlObj = new URL(url); + displayUrl = urlObj.pathname + urlObj.search + urlObj.hash; + } catch { + // If URL parsing fails, use the original URL + } + const runtimeErrors = await formatRuntimeErrorsToObjects(overlayState.errors, overlayState.routerType === 'app'); + output.sessionErrors.push({ + url: displayUrl, + buildError: overlayState.buildError || null, + runtimeErrors + }); + } + return output; +} + +//# sourceMappingURL=format-errors.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/next-server.js b/build/node_modules/next/dist/server/next-server.js new file mode 100644 index 0000000..e9e157e --- /dev/null +++ b/build/node_modules/next/dist/server/next-server.js @@ -0,0 +1,1429 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "default", { + enumerable: true, + get: function() { + return NextNodeServer; + } +}); +0 && __export(require("./base-server")); +require("./node-environment"); +require("./require-hook"); +require("./node-polyfill-crypto"); +const _utils = require("../shared/lib/utils"); +const _fs = /*#__PURE__*/ _interop_require_default(require("fs")); +const _path = require("path"); +const _routematcher = require("../shared/lib/router/utils/route-matcher"); +const _requestmeta = require("./request-meta"); +const _constants = require("../shared/lib/constants"); +const _findpagesdir = require("../lib/find-pages-dir"); +const _node = require("./base-http/node"); +const _sendpayload = require("./send-payload"); +const _parseurl = require("../shared/lib/router/utils/parse-url"); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("../build/output/log")); +const _baseserver = /*#__PURE__*/ _interop_require_default(_export_star(require("./base-server"), exports)); +const _require = require("./require"); +const _denormalizepagepath = require("../shared/lib/page-path/denormalize-page-path"); +const _normalizepagepath = require("../shared/lib/page-path/normalize-page-path"); +const _loadcomponents = require("./load-components"); +const _iserror = /*#__PURE__*/ _interop_require_wildcard(require("../lib/is-error")); +const _utils1 = require("./web/utils"); +const _middlewareroutematcher = require("../shared/lib/router/utils/middleware-route-matcher"); +const _env = require("@next/env"); +const _querystring = require("../shared/lib/router/utils/querystring"); +const _removetrailingslash = require("../shared/lib/router/utils/remove-trailing-slash"); +const _getnextpathnameinfo = require("../shared/lib/router/utils/get-next-pathname-info"); +const _bodystreams = require("./body-streams"); +const _apiutils = require("./api-utils"); +const _responsecache = /*#__PURE__*/ _interop_require_wildcard(require("./response-cache")); +const _incrementalcache = require("./lib/incremental-cache"); +const _apppaths = require("../shared/lib/router/utils/app-paths"); +const _setuphttpagentenv = require("./setup-http-agent-env"); +const _pagesapiroutematch = require("./route-matches/pages-api-route-match"); +const _tracer = require("./lib/trace/tracer"); +const _constants1 = require("./lib/trace/constants"); +const _nodefsmethods = require("./lib/node-fs-methods"); +const _routeregex = require("../shared/lib/router/utils/route-regex"); +const _pipereadable = require("./pipe-readable"); +const _mockrequest = require("./lib/mock-request"); +const _approuterheaders = require("../client/components/app-router-headers"); +const _nextrequest = require("./web/spec-extension/adapters/next-request"); +const _loadmanifestexternal = require("./load-manifest.external"); +const _modulerender = require("./route-modules/app-page/module.render"); +const _modulerender1 = require("./route-modules/pages/module.render"); +const _interopdefault = require("../lib/interop-default"); +const _formatdynamicimportpath = require("../lib/format-dynamic-import-path"); +const _isinterceptionrouterewrite = require("../lib/is-interception-route-rewrite"); +const _routekind = require("./route-kind"); +const _invarianterror = require("../shared/lib/invariant-error"); +const _awaiter = require("./after/awaiter"); +const _asynccallbackset = require("./lib/async-callback-set"); +const _handlers = require("./use-cache/handlers"); +const _staticenv = require("../lib/static-env"); +const _nodemoduleloader = require("./lib/module-loader/node-module-loader"); +const _nofallbackerrorexternal = require("../shared/lib/no-fallback-error.external"); +const _instrumentationglobalsexternal = require("./lib/router-utils/instrumentation-globals.external"); +const _routerservercontext = require("./lib/router-utils/router-server-context"); +const _globalbehaviors = require("./node-environment-extensions/global-behaviors"); +const _processerrorhandlers = require("./node-environment-extensions/process-error-handlers"); +function _export_star(from, to) { + Object.keys(from).forEach(function(k) { + if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) { + Object.defineProperty(to, k, { + enumerable: true, + get: function() { + return from[k]; + } + }); + } + }); + return from; +} +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +// For module that can be both CJS or ESM +const dynamicImportEsmDefault = process.env.NEXT_MINIMAL ? (id)=>import(/* webpackIgnore: true */ id).then((mod)=>mod.default || mod) : (id)=>import(id).then((mod)=>mod.default || mod); +const MiddlewareMatcherCache = new WeakMap(); +function getMiddlewareMatcher(info) { + const stored = MiddlewareMatcherCache.get(info); + if (stored) { + return stored; + } + if (!Array.isArray(info.matchers)) { + throw Object.defineProperty(new Error(`Invariant: invalid matchers for middleware ${JSON.stringify(info)}`), "__NEXT_ERROR_CODE", { + value: "E257", + enumerable: false, + configurable: true + }); + } + const matcher = (0, _middlewareroutematcher.getMiddlewareRouteMatcher)(info.matchers); + MiddlewareMatcherCache.set(info, matcher); + return matcher; +} +class NextNodeServer extends _baseserver.default { + constructor(options){ + var _options_conf_experimental_sri, _options_conf_experimental, _options_conf_experimental1; + // Initialize super class + super(options), this.cleanupListeners = new _asynccallbackset.AsyncCallbackSet(), this.handleNextImageRequest = async (req, res, parsedUrl)=>{ + if (!parsedUrl.pathname || !parsedUrl.pathname.startsWith('/_next/image')) { + return false; + } + // Ignore if its a middleware request + if ((0, _requestmeta.getRequestMeta)(req, 'middlewareInvoke')) { + return false; + } + if (this.minimalMode || this.nextConfig.output === 'export' || process.env.NEXT_MINIMAL) { + res.statusCode = 400; + res.body('Bad Request').send(); + return true; + // the `else` branch is needed for tree-shaking + } else { + const { ImageOptimizerCache } = require('./image-optimizer'); + // Load custom cache handler if configured and opt-in via images.customCacheHandler + // Cache the handler instance to preserve state across requests + if (!this.imageCacheHandler && this.nextConfig.images.customCacheHandler) { + const { cacheHandler } = this.nextConfig; + if (cacheHandler) { + const CacheHandler = (0, _interopdefault.interopDefault)(await dynamicImportEsmDefault((0, _formatdynamicimportpath.formatDynamicImportPath)(this.distDir, cacheHandler))); + this.imageCacheHandler = new CacheHandler({ + dev: !!this.dev, + flushToDisk: this.nextConfig.experimental.isrFlushToDisk, + serverDistDir: this.serverDistDir, + maxMemoryCacheSize: this.nextConfig.cacheMaxMemorySize, + revalidatedTags: [], + _requestHeaders: {} + }); + } + } + const imageOptimizerCache = new ImageOptimizerCache({ + distDir: this.distDir, + nextConfig: this.nextConfig, + cacheHandler: this.imageCacheHandler + }); + const { sendResponse, ImageError } = require('./image-optimizer'); + if (!this.imageResponseCache) { + throw Object.defineProperty(new Error('invariant image optimizer cache was not initialized'), "__NEXT_ERROR_CODE", { + value: "E160", + enumerable: false, + configurable: true + }); + } + const imagesConfig = this.nextConfig.images; + if (imagesConfig.loader !== 'default' || imagesConfig.unoptimized) { + await this.render404(req, res); + return true; + } + const paramsResult = ImageOptimizerCache.validateParams(req.originalRequest, parsedUrl.query, this.nextConfig, !!this.dev); + if ('errorMessage' in paramsResult) { + res.statusCode = 400; + res.body(paramsResult.errorMessage).send(); + return true; + } + const cacheKey = ImageOptimizerCache.getCacheKey(paramsResult); + try { + var _cacheEntry_value, _cacheEntry_cacheControl; + const { getExtension } = require('./serve-static'); + const cacheEntry = await this.imageResponseCache.get(cacheKey, async ({ previousCacheEntry })=>{ + const { buffer, contentType, maxAge, upstreamEtag, etag } = await this.imageOptimizer(req, res, paramsResult, previousCacheEntry); + return { + value: { + kind: _responsecache.CachedRouteKind.IMAGE, + buffer, + etag, + extension: getExtension(contentType), + upstreamEtag + }, + cacheControl: { + revalidate: maxAge, + expire: undefined + } + }; + }, { + routeKind: _routekind.RouteKind.IMAGE, + incrementalCache: imageOptimizerCache, + isFallback: false + }); + if ((cacheEntry == null ? void 0 : (_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) !== _responsecache.CachedRouteKind.IMAGE) { + throw Object.defineProperty(new Error('invariant did not get entry from image response cache'), "__NEXT_ERROR_CODE", { + value: "E518", + enumerable: false, + configurable: true + }); + } + sendResponse(req.originalRequest, res.originalResponse, paramsResult.href, cacheEntry.value.extension, cacheEntry.value.buffer, cacheEntry.value.etag, paramsResult.isStatic, cacheEntry.isMiss ? 'MISS' : cacheEntry.isStale ? 'STALE' : 'HIT', imagesConfig, ((_cacheEntry_cacheControl = cacheEntry.cacheControl) == null ? void 0 : _cacheEntry_cacheControl.revalidate) || 0, Boolean(this.dev)); + return true; + } catch (err) { + if (err instanceof ImageError) { + res.statusCode = err.statusCode; + res.body(err.message).send(); + return true; + } + throw err; + } + } + }, this.handleCatchallRenderRequest = async (req, res, parsedUrl)=>{ + let { pathname, query } = parsedUrl; + if (!pathname) { + throw Object.defineProperty(new Error('Invariant: pathname is undefined'), "__NEXT_ERROR_CODE", { + value: "E409", + enumerable: false, + configurable: true + }); + } + // When in minimal mode we do not bubble the fallback as the + // router-server is not present to handle the error + (0, _requestmeta.addRequestMeta)(req, 'bubbleNoFallback', this.minimalMode ? undefined : true); + // This is needed to expose render404 and nextConfig + // for environments without router-server + if (!_routerservercontext.routerServerGlobal[_routerservercontext.RouterServerContextSymbol]) { + _routerservercontext.routerServerGlobal[_routerservercontext.RouterServerContextSymbol] = {}; + } + const relativeProjectDir = (0, _path.relative)(process.cwd(), this.dir); + const existingServerContext = _routerservercontext.routerServerGlobal[_routerservercontext.RouterServerContextSymbol][relativeProjectDir]; + if (!existingServerContext) { + _routerservercontext.routerServerGlobal[_routerservercontext.RouterServerContextSymbol][relativeProjectDir] = { + render404: this.render404.bind(this) + }; + } + _routerservercontext.routerServerGlobal[_routerservercontext.RouterServerContextSymbol][relativeProjectDir].nextConfig = this.nextConfig; + _routerservercontext.routerServerGlobal[_routerservercontext.RouterServerContextSymbol][relativeProjectDir].isWrappedByNextServer = true; + try { + var _this_i18nProvider; + // next.js core assumes page path without trailing slash + pathname = (0, _removetrailingslash.removeTrailingSlash)(pathname); + const options = { + i18n: (_this_i18nProvider = this.i18nProvider) == null ? void 0 : _this_i18nProvider.fromRequest(req, pathname) + }; + const match = await this.matchers.match(pathname, options); + // If we don't have a match, try to render it anyways. + if (!match) { + await this.render(req, res, pathname, query, parsedUrl, true); + return true; + } + // Add the match to the request so we don't have to re-run the matcher + // for the same request. + (0, _requestmeta.addRequestMeta)(req, 'match', match); + // TODO-APP: move this to a route handler + const edgeFunctionsPages = this.getEdgeFunctionsPages(); + for (const edgeFunctionsPage of edgeFunctionsPages){ + // If the page doesn't match the edge function page, skip it. + if (edgeFunctionsPage !== match.definition.page) continue; + if (this.nextConfig.output === 'export') { + await this.render404(req, res, parsedUrl); + return true; + } + delete query[_approuterheaders.NEXT_RSC_UNION_QUERY]; + // If we handled the request, we can return early. + // For api routes edge runtime + try { + const handled = await this.runEdgeFunction({ + req, + res, + query, + params: match.params, + page: match.definition.page, + match, + appPaths: null + }); + if (handled) return true; + } catch (apiError) { + const silenceLog = false; + await this.instrumentationOnRequestError(apiError, req, { + routePath: match.definition.page, + routerKind: 'Pages Router', + routeType: 'route', + // Edge runtime does not support ISR + revalidateReason: undefined + }, silenceLog); + throw apiError; + } + } + // If the route was detected as being a Pages API route, then handle + // it. + // TODO: move this behavior into a route handler. + if ((0, _pagesapiroutematch.isPagesAPIRouteMatch)(match)) { + if (this.nextConfig.output === 'export') { + await this.render404(req, res, parsedUrl); + return true; + } + const handled = await this.handleApiRequest(req, res, query, match); + if (handled) return true; + } + await this.render(req, res, pathname, query, parsedUrl, true); + return true; + } catch (err) { + if (err instanceof _nofallbackerrorexternal.NoFallbackError) { + throw err; + } + try { + if (this.dev) { + const { formatServerError } = require('../lib/format-server-error'); + formatServerError(err); + this.logErrorWithOriginalStack(err); + } else { + this.logError(err); + } + res.statusCode = 500; + await this.renderError(err, req, res, pathname, query); + return true; + } catch {} + throw err; + } + }, this.handleCatchallMiddlewareRequest = async (req, res, parsed)=>{ + const isMiddlewareInvoke = (0, _requestmeta.getRequestMeta)(req, 'middlewareInvoke'); + if (!isMiddlewareInvoke) { + return false; + } + const handleFinished = ()=>{ + (0, _requestmeta.addRequestMeta)(req, 'middlewareInvoke', true); + res.body('').send(); + return true; + }; + const middleware = await this.getMiddleware(); + if (!middleware) { + return handleFinished(); + } + const initUrl = (0, _requestmeta.getRequestMeta)(req, 'initURL'); + const parsedUrl = (0, _parseurl.parseUrl)(initUrl); + const pathnameInfo = (0, _getnextpathnameinfo.getNextPathnameInfo)(parsedUrl.pathname, { + nextConfig: this.nextConfig, + i18nProvider: this.i18nProvider + }); + parsedUrl.pathname = pathnameInfo.pathname; + const normalizedPathname = (0, _removetrailingslash.removeTrailingSlash)(parsed.pathname || ''); + let maybeDecodedPathname = normalizedPathname; + try { + maybeDecodedPathname = decodeURIComponent(normalizedPathname); + } catch { + /* non-fatal we can't decode so can't match it */ } + if (!(middleware.match(normalizedPathname, req, parsedUrl.query) || middleware.match(maybeDecodedPathname, req, parsedUrl.query))) { + return handleFinished(); + } + let result; + let bubblingResult = false; + try { + await this.ensureMiddleware(req.url); + result = await this.runMiddleware({ + request: req, + response: res, + parsedUrl: parsedUrl, + parsed: parsed + }); + if ('response' in result) { + if (isMiddlewareInvoke) { + bubblingResult = true; + throw Object.defineProperty(new _tracer.BubbledError(true, result), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + for (const [key, value] of Object.entries((0, _utils1.toNodeOutgoingHttpHeaders)(result.response.headers))){ + if (key !== 'content-encoding' && value !== undefined) { + res.setHeader(key, value); + } + } + res.statusCode = result.response.status; + const { originalResponse } = res; + if (result.response.body) { + await (0, _pipereadable.pipeToNodeResponse)(result.response.body, originalResponse); + } else { + originalResponse.end(); + } + return true; + } + } catch (err) { + if (bubblingResult) { + throw err; + } + if ((0, _iserror.default)(err) && err.code === 'ENOENT') { + await this.render404(req, res, parsed); + return true; + } + if (err instanceof _utils.DecodeError) { + res.statusCode = 400; + await this.renderError(err, req, res, parsed.pathname || ''); + return true; + } + const error = (0, _iserror.getProperError)(err); + console.error(error); + res.statusCode = 500; + await this.renderError(error, req, res, parsed.pathname || ''); + return true; + } + return result.finished; + }; + (0, _globalbehaviors.installGlobalBehaviors)(this.nextConfig); + // Load prefetch hints from the build output. This must happen before + // any render to ensure segment inlining decisions are available. + this.renderOpts.prefetchHints = this.getPrefetchHints(); + const isDev = options.dev ?? false; + this.isDev = isDev; + this.sriEnabled = Boolean((_options_conf_experimental = options.conf.experimental) == null ? void 0 : (_options_conf_experimental_sri = _options_conf_experimental.sri) == null ? void 0 : _options_conf_experimental_sri.algorithm); + /** + * This sets environment variable to be used at the time of SSR by head.tsx. + * Using this from process.env allows targeting SSR by calling + * `process.env.__NEXT_OPTIMIZE_CSS`. + */ if (this.renderOpts.optimizeCss) { + process.env.__NEXT_OPTIMIZE_CSS = JSON.stringify(true); + } + if (this.renderOpts.nextScriptWorkers) { + process.env.__NEXT_SCRIPT_WORKERS = JSON.stringify(true); + } + if (!this.minimalMode) { + this.imageResponseCache = new _responsecache.default(this.minimalMode); + } + if (!options.dev && !this.minimalMode && this.nextConfig.experimental.preloadEntriesOnStart) { + this.unstable_preloadEntries(); + } + if (!options.dev) { + const { dynamicRoutes = [] } = this.getRoutesManifest() ?? {}; + this.dynamicRoutes = dynamicRoutes.map((r)=>{ + // TODO: can we just re-use the regex from the manifest? + const regex = (0, _routeregex.getRouteRegex)(r.page); + const match = (0, _routematcher.getRouteMatcher)(regex); + return { + match, + page: r.page, + re: regex.re + }; + }); + } + // ensure options are set when loadConfig isn't called + (0, _setuphttpagentenv.setHttpClientAndAgentOptions)(this.nextConfig); + // Intercept fetch and other testmode apis. + if (this.serverOptions.experimentalTestProxy) { + process.env.NEXT_PRIVATE_TEST_PROXY = 'true'; + const { interceptTestApis } = // eslint-disable-next-line @next/internal/typechecked-require -- experimental/testmode is not built ins next/dist/esm + require('next/dist/experimental/testmode/server'); + interceptTestApis(); + } + this.middlewareManifestPath = (0, _path.join)(/* turbopackIgnore: true */ this.serverDistDir, _constants.MIDDLEWARE_MANIFEST); + // This is just optimization to fire prepare as soon as possible. It will be + // properly awaited later. We add the catch here to ensure that it does not + // cause a unhandled promise rejection. The promise rejection will be + // handled later on via the `await` when the request handler is called. + if (!options.dev) { + this.prepare().catch((err)=>{ + console.error('Failed to prepare server', err); + }); + } + // when using compile mode static env isn't inlined so we + // need to populate in normal runtime env + if (this.renderOpts.isExperimentalCompile) { + // immutableAssetToken only works with Turbopack, and `isExperimentalCompile` isn't supported + // with that anyway, so we can assign immutableAssetToken to deploymentId here + (0, _staticenv.populateStaticEnv)(this.nextConfig, this.deploymentId || ''); + } + const shouldRemoveUncaughtErrorAndRejectionListeners = Boolean((_options_conf_experimental1 = options.conf.experimental) == null ? void 0 : _options_conf_experimental1.removeUncaughtErrorAndRejectionListeners); + (0, _processerrorhandlers.installProcessErrorHandlers)(shouldRemoveUncaughtErrorAndRejectionListeners); + } + async unstable_preloadEntries() { + // Ensure prepare process will be finished before preloading entries. + await this.prepare(); + const appPathsManifest = this.getAppPathsManifest(); + const pagesManifest = this.getPagesManifest(); + await this.loadCustomCacheHandlers(); + for (const page of Object.keys(pagesManifest || {})){ + try { + await (0, _loadcomponents.loadComponents)({ + distDir: this.distDir, + page, + isAppPath: false, + isDev: this.isDev, + sriEnabled: this.sriEnabled, + needsManifestsForLegacyReasons: false + }); + } catch (_err) { + // Intentionally ignored because this is a preload step. + } + } + for (const page of Object.keys(appPathsManifest || {})){ + try { + const { ComponentMod } = await (0, _loadcomponents.loadComponents)({ + distDir: this.distDir, + page, + isAppPath: true, + isDev: this.isDev, + sriEnabled: this.sriEnabled, + needsManifestsForLegacyReasons: false + }); + // we need to ensure fetch is patched before we require the page, + // otherwise if the fetch is patched by user code, we will be patching it + // too late and there won't be any caching behaviors + ComponentMod.patchFetch(); + } catch (_err) { + // Intentionally ignored because this is a preload step. + } + } + } + async handleUpgrade() { + // The web server does not support web sockets, it's only used for HMR in + // development. + } + async loadInstrumentationModule() { + if (!this.serverOptions.dev) { + try { + this.instrumentation = await (0, _instrumentationglobalsexternal.getInstrumentationModule)(this.dir, this.nextConfig.distDir); + } catch (err) { + if (err.code !== 'MODULE_NOT_FOUND') { + throw Object.defineProperty(new Error('An error occurred while loading the instrumentation hook', { + cause: err + }), "__NEXT_ERROR_CODE", { + value: "E92", + enumerable: false, + configurable: true + }); + } + } + } + return this.instrumentation; + } + async prepareImpl() { + await super.prepareImpl(); + await this.runInstrumentationHookIfAvailable(); + } + async runInstrumentationHookIfAvailable() { + await (0, _instrumentationglobalsexternal.ensureInstrumentationRegistered)(this.dir, this.nextConfig.distDir); + } + loadEnvConfig({ dev, forceReload }) { + (0, _env.loadEnvConfig)(this.dir, dev, _log, forceReload, forceReload ? (envFilePath)=>{ + _log.info(`Reload env: ${envFilePath}`); + } : undefined); + } + async loadCustomCacheHandlers() { + const { cacheMaxMemorySize, cacheHandlers } = this.nextConfig; + if (!cacheHandlers) return; + // If we've already initialized the cache handlers interface, don't do it + // again. + if (!(0, _handlers.initializeCacheHandlers)(cacheMaxMemorySize)) return; + for (const [kind, handler] of Object.entries(cacheHandlers)){ + if (!handler) continue; + (0, _handlers.setCacheHandler)(kind, (0, _interopdefault.interopDefault)(await dynamicImportEsmDefault((0, _formatdynamicimportpath.formatDynamicImportPath)(this.distDir, handler)))); + } + } + async getIncrementalCache({ requestHeaders }) { + const dev = !!this.dev; + let CacheHandler; + const { cacheHandler } = this.nextConfig; + if (cacheHandler) { + CacheHandler = (0, _interopdefault.interopDefault)(await dynamicImportEsmDefault((0, _formatdynamicimportpath.formatDynamicImportPath)(this.distDir, cacheHandler))); + } + await this.loadCustomCacheHandlers(); + // incremental-cache is request specific + // although can have shared caches in module scope + // per-cache handler + return new _incrementalcache.IncrementalCache({ + fs: this.getCacheFilesystem(), + dev, + requestHeaders, + allowedRevalidateHeaderKeys: this.nextConfig.experimental.allowedRevalidateHeaderKeys, + minimalMode: this.minimalMode, + serverDistDir: this.serverDistDir, + fetchCacheKeyPrefix: this.nextConfig.experimental.fetchCacheKeyPrefix, + maxMemoryCacheSize: this.nextConfig.cacheMaxMemorySize, + flushToDisk: !this.minimalMode && this.nextConfig.experimental.isrFlushToDisk, + getPrerenderManifest: ()=>this.getPrerenderManifest(), + CurCacheHandler: CacheHandler + }); + } + getPublicDir() { + return (0, _path.join)(/* turbopackIgnore: true */ this.dir, _constants.CLIENT_PUBLIC_FILES_PATH); + } + getHasStaticDir() { + return _fs.default.existsSync(/* turbopackIgnore: true */ (0, _path.join)(/* turbopackIgnore: true */ this.dir, 'static')); + } + getPagesManifest() { + return (0, _loadmanifestexternal.loadManifest)((0, _path.join)(/* turbopackIgnore: true */ this.serverDistDir, _constants.PAGES_MANIFEST)); + } + getAppPathsManifest() { + if (!this.enabledDirectories.app) return undefined; + return (0, _loadmanifestexternal.loadManifest)((0, _path.join)(/* turbopackIgnore: true */ this.serverDistDir, _constants.APP_PATHS_MANIFEST)); + } + getinterceptionRoutePatterns() { + if (!this.enabledDirectories.app) return []; + const routesManifest = this.getRoutesManifest(); + return (routesManifest == null ? void 0 : routesManifest.rewrites.beforeFiles.filter(_isinterceptionrouterewrite.isInterceptionRouteRewrite).map((rewrite)=>new RegExp(rewrite.regex))) ?? []; + } + async hasPage(pathname) { + var _this_nextConfig_i18n; + return !!(0, _require.getMaybePagePath)(pathname, this.distDir, (_this_nextConfig_i18n = this.nextConfig.i18n) == null ? void 0 : _this_nextConfig_i18n.locales, this.enabledDirectories.app); + } + getBuildId() { + const buildIdFile = (0, _path.join)(/* turbopackIgnore: true */ this.distDir, _constants.BUILD_ID_FILE); + try { + return _fs.default.readFileSync(/* turbopackIgnore: true */ buildIdFile, 'utf8').trim(); + } catch (err) { + if (err.code === 'ENOENT') { + throw Object.defineProperty(new Error(`Could not find a production build in the '${this.distDir}' directory. Try building your app with 'next build' before starting the production server. https://nextjs.org/docs/messages/production-start-no-build-id`), "__NEXT_ERROR_CODE", { + value: "E427", + enumerable: false, + configurable: true + }); + } + throw err; + } + } + getEnabledDirectories(dev) { + const dir = dev ? this.dir : this.serverDistDir; + return { + app: (0, _findpagesdir.findDir)(dir, 'app') ? true : false, + pages: (0, _findpagesdir.findDir)(dir, 'pages') ? true : false + }; + } + sendRenderResult(req, res, options) { + return (0, _sendpayload.sendRenderResult)({ + req: req.originalRequest, + res: res.originalResponse, + result: options.result, + generateEtags: options.generateEtags, + poweredByHeader: options.poweredByHeader, + cacheControl: options.cacheControl + }); + } + async runApi(req, res, query, match) { + const edgeFunctionsPages = this.getEdgeFunctionsPages(); + for (const edgeFunctionsPage of edgeFunctionsPages){ + if (edgeFunctionsPage === match.definition.pathname) { + const handledAsEdgeFunction = await this.runEdgeFunction({ + req, + res, + query, + params: match.params, + page: match.definition.pathname, + appPaths: null + }); + if (handledAsEdgeFunction) { + return true; + } + } + } + // The module supports minimal mode, load the minimal module. + // Restore original URL as the handler handles it's own parsing + const parsedInitUrl = (0, _parseurl.parseUrl)((0, _requestmeta.getRequestMeta)(req, 'initURL') || req.url); + req.url = `${parsedInitUrl.pathname}${parsedInitUrl.search || ''}`; + const loader = new _nodemoduleloader.NodeModuleLoader(); + const module = await loader.load(match.definition.filename); + (0, _requestmeta.addRequestMeta)(req.originalRequest, 'relativeProjectDir', (0, _path.relative)(process.cwd(), this.dir)); + (0, _requestmeta.addRequestMeta)(req.originalRequest, 'distDir', this.distDir); + await module.handler(req.originalRequest, res.originalResponse, { + waitUntil: this.getWaitUntil() + }); + return true; + } + async renderHTML(req, res, pathname, query, renderOpts) { + return (0, _tracer.getTracer)().trace(_constants1.NextNodeServerSpan.renderHTML, async ()=>this.renderHTMLImpl(req, res, pathname, query, renderOpts)); + } + async renderHTMLImpl(req, res, pathname, query, renderOpts) { + if (process.env.NEXT_MINIMAL) { + throw Object.defineProperty(new Error('Invariant: renderHTML should not be called in minimal mode'), "__NEXT_ERROR_CODE", { + value: "E472", + enumerable: false, + configurable: true + }); + // the `else` branch is needed for tree-shaking + } else { + // Due to the way we pass data by mutating `renderOpts`, we can't extend the + // object here but only updating its `nextFontManifest` field. + // https://github.com/vercel/next.js/blob/df7cbd904c3bd85f399d1ce90680c0ecf92d2752/packages/next/server/render.tsx#L947-L952 + renderOpts.nextFontManifest = this.nextFontManifest; + if (this.enabledDirectories.app && renderOpts.isAppPath) { + return (0, _modulerender.lazyRenderAppPage)(req, res, pathname, query, // This code path does not service revalidations for unknown param + // shells. As a result, we don't need to pass in the unknown params. + null, renderOpts, this.getServerComponentsHmrCache(), { + buildId: this.buildId, + deploymentId: this.deploymentId, + clientAssetToken: this.nextConfig.experimental.immutableAssetToken ?? this.deploymentId + }); + } else { + // TODO: re-enable this once we've refactored to use implicit matches + // throw new Error('Invariant: render should have used routeModule') + return (0, _modulerender1.lazyRenderPagesPage)(req.originalRequest, res.originalResponse, pathname, query, renderOpts, { + buildId: this.buildId, + deploymentId: this.deploymentId, + clientAssetToken: this.nextConfig.experimental.immutableAssetToken ?? this.deploymentId, + customServer: this.serverOptions.customServer || undefined + }, { + isFallback: false, + isDraftMode: renderOpts.isDraftMode, + developmentNotFoundSourcePage: (0, _requestmeta.getRequestMeta)(req, 'developmentNotFoundSourcePage') + }); + } + } + } + async imageOptimizer(req, res, paramsResult, previousCacheEntry) { + if (process.env.NEXT_MINIMAL) { + throw Object.defineProperty(new Error('invariant: imageOptimizer should not be called in minimal mode'), "__NEXT_ERROR_CODE", { + value: "E506", + enumerable: false, + configurable: true + }); + } else { + const { imageOptimizer, fetchExternalImage, fetchInternalImage } = require('./image-optimizer'); + const handleInternalReq = async (newReq, newRes)=>{ + if (newReq.url === req.url) { + throw Object.defineProperty(new Error(`Invariant attempted to optimize _next/image itself`), "__NEXT_ERROR_CODE", { + value: "E496", + enumerable: false, + configurable: true + }); + } + if (!this.routerServerHandler) { + throw Object.defineProperty(new Error(`Invariant missing routerServerHandler`), "__NEXT_ERROR_CODE", { + value: "E317", + enumerable: false, + configurable: true + }); + } + await this.routerServerHandler(newReq, newRes); + return; + }; + let { href } = paramsResult; + if (process.env.__NEXT_TEST_MODE && process.env.IS_TURBOPACK_TEST && !paramsResult.isAbsolute) { + // Forward the dpl query param from the original /_next/image request to the + // internal static file request so that the static file validation in + // resolve-routes.ts can verify it. + const dpl = typeof req.url === 'string' ? new URL(req.url, 'http://n').searchParams.get('dpl') : undefined; + if (dpl) { + href += `${href.includes('?') ? '&' : '?'}dpl=${dpl}`; + } + } + const imageUpstream = paramsResult.isAbsolute ? await fetchExternalImage(href, this.nextConfig.images.dangerouslyAllowLocalIP, this.nextConfig.images.maximumResponseBody, this.nextConfig.images.maximumRedirects) : await fetchInternalImage(href, req.originalRequest, res.originalResponse, this.nextConfig.images.maximumResponseBody, handleInternalReq); + return imageOptimizer(imageUpstream, paramsResult, this.nextConfig, { + isDev: this.dev, + previousCacheEntry + }); + } + } + getPagePath(pathname, locales) { + return (0, _require.getPagePath)(pathname, this.distDir, locales, this.enabledDirectories.app); + } + async renderPageComponent(ctx, bubbleNoFallback) { + const edgeFunctionsPages = this.getEdgeFunctionsPages() || []; + if (edgeFunctionsPages.length) { + const appPaths = this.getOriginalAppPaths(ctx.pathname); + const isAppPath = Array.isArray(appPaths); + let page = ctx.pathname; + if (isAppPath) { + // When it's an array, we need to pass all parallel routes to the loader. + page = appPaths[0]; + } + for (const edgeFunctionsPage of edgeFunctionsPages){ + if (edgeFunctionsPage === page) { + await this.runEdgeFunction({ + req: ctx.req, + res: ctx.res, + query: ctx.query, + params: ctx.renderOpts.params, + page, + appPaths + }); + return null; + } + } + } + return super.renderPageComponent(ctx, bubbleNoFallback); + } + async findPageComponents({ locale, page, query, params, isAppPath, url }) { + return (0, _tracer.getTracer)().trace(_constants1.NextNodeServerSpan.findPageComponents, { + spanName: 'resolve page components', + attributes: { + 'next.route': isAppPath ? (0, _apppaths.normalizeAppPath)(page) : page + } + }, ()=>this.findPageComponentsImpl({ + locale, + page, + query, + params, + isAppPath, + url + })); + } + async findPageComponentsImpl({ locale, page, query, params, isAppPath, url: _url }) { + const pagePaths = [ + page + ]; + if (locale) { + pagePaths.unshift(...pagePaths.map((path)=>`/${locale}${path === '/' ? '' : path}`)); + } + for (const pagePath of pagePaths){ + try { + const components = await (0, _loadcomponents.loadComponents)({ + distDir: this.distDir, + page: pagePath, + isAppPath, + isDev: this.isDev, + sriEnabled: this.sriEnabled, + needsManifestsForLegacyReasons: false + }); + if (locale && typeof components.Component === 'string' && !pagePath.startsWith(`/${locale}/`) && pagePath !== `/${locale}`) { + continue; + } + return { + components, + query: { + ...!this.renderOpts.isExperimentalCompile && components.getStaticProps ? {} : query, + // For appDir params is excluded. + ...(isAppPath ? {} : params) || {} + } + }; + } catch (err) { + // we should only not throw if we failed to find the page + // in the pages-manifest + if (!(err instanceof _utils.PageNotFoundError)) { + throw err; + } + } + } + return null; + } + getNextFontManifest() { + return (0, _loadmanifestexternal.loadManifest)((0, _path.join)(/* turbopackIgnore: true */ this.distDir, 'server', _constants.NEXT_FONT_MANIFEST + '.json')); + } + // Used in development only, overloaded in next-dev-server + logErrorWithOriginalStack(_err, _type) { + throw Object.defineProperty(new Error('Invariant: logErrorWithOriginalStack can only be called on the development server'), "__NEXT_ERROR_CODE", { + value: "E6", + enumerable: false, + configurable: true + }); + } + // Used in development only, overloaded in next-dev-server + async ensurePage(_opts) { + throw Object.defineProperty(new Error('Invariant: ensurePage can only be called on the development server'), "__NEXT_ERROR_CODE", { + value: "E291", + enumerable: false, + configurable: true + }); + } + /** + * Resolves `API` request, in development builds on demand + * @param req http request + * @param res http response + * @param pathname path of request + */ async handleApiRequest(req, res, query, match) { + return this.runApi(req, res, query, match); + } + getCacheFilesystem() { + return _nodefsmethods.nodeFs; + } + normalizeReq(req) { + return !(req instanceof _node.NodeNextRequest) ? new _node.NodeNextRequest(req) : req; + } + normalizeRes(res) { + return !(res instanceof _node.NodeNextResponse) ? new _node.NodeNextResponse(res) : res; + } + getRequestHandler() { + const handler = this.makeRequestHandler(); + if (this.serverOptions.experimentalTestProxy) { + const { wrapRequestHandlerNode } = // eslint-disable-next-line @next/internal/typechecked-require -- experimental/testmode is not built ins next/dist/esm + require('next/dist/experimental/testmode/server'); + return wrapRequestHandlerNode(handler); + } + return handler; + } + /** + * @internal - this method is internal to Next.js and should not be used directly by end-users + */ getRequestHandlerWithMetadata(meta) { + const handler = this.makeRequestHandler(); + return (req, res, parsedUrl)=>{ + (0, _requestmeta.setRequestMeta)(req, meta); + return handler(req, res, parsedUrl); + }; + } + makeRequestHandler() { + // This is just optimization to fire prepare as soon as possible. It will be + // properly awaited later. We add the catch here to ensure that it does not + // cause an unhandled promise rejection. The promise rejection will be + // handled later on via the `await` when the request handler is called. + this.prepare().catch((err)=>{ + console.error('Failed to prepare server', err); + }); + const handler = super.getRequestHandler(); + return (req, res, parsedUrl)=>handler(this.normalizeReq(req), this.normalizeRes(res), parsedUrl); + } + async revalidate({ urlPath, headers, opts }) { + const mocked = (0, _mockrequest.createRequestResponseMocks)({ + url: urlPath, + headers + }); + const handler = this.getRequestHandler(); + await handler(new _node.NodeNextRequest(mocked.req), new _node.NodeNextResponse(mocked.res)); + await mocked.res.hasStreamed; + if (mocked.res.getHeader('x-nextjs-cache') !== 'REVALIDATED' && mocked.res.statusCode !== 200 && !(mocked.res.statusCode === 404 && opts.unstable_onlyGenerated)) { + throw Object.defineProperty(new Error(`Invalid response ${mocked.res.statusCode}`), "__NEXT_ERROR_CODE", { + value: "E175", + enumerable: false, + configurable: true + }); + } + } + async render(req, res, pathname, query, parsedUrl, internal = false) { + return super.render(this.normalizeReq(req), this.normalizeRes(res), pathname, query, parsedUrl, internal); + } + async renderToHTML(req, res, pathname, query) { + return super.renderToHTML(this.normalizeReq(req), this.normalizeRes(res), pathname, query); + } + async renderErrorToResponseImpl(ctx, err) { + const { req, res, query } = ctx; + const is404 = res.statusCode === 404; + if (is404 && this.enabledDirectories.app) { + if (this.dev) { + await this.ensurePage({ + page: _constants.UNDERSCORE_NOT_FOUND_ROUTE_ENTRY, + clientOnly: false, + url: req.url + }).catch(()=>{}); + } + if (this.getEdgeFunctionsPages().includes(_constants.UNDERSCORE_NOT_FOUND_ROUTE_ENTRY)) { + await this.runEdgeFunction({ + req, + res, + query: query || {}, + params: {}, + page: _constants.UNDERSCORE_NOT_FOUND_ROUTE_ENTRY, + appPaths: null + }); + return null; + } + } + return super.renderErrorToResponseImpl(ctx, err); + } + async renderError(err, req, res, pathname, query, setHeaders) { + return super.renderError(err, this.normalizeReq(req), this.normalizeRes(res), pathname, query, setHeaders); + } + async renderErrorToHTML(err, req, res, pathname, query) { + return super.renderErrorToHTML(err, this.normalizeReq(req), this.normalizeRes(res), pathname, query); + } + async render404(req, res, parsedUrl, setHeaders) { + return super.render404(this.normalizeReq(req), this.normalizeRes(res), parsedUrl, setHeaders); + } + getMiddlewareManifest() { + if (this.minimalMode) { + return null; + } else { + const manifest = require(this.middlewareManifestPath); + return manifest; + } + } + /** Returns the middleware routing item if there is one. */ async getMiddleware() { + var _manifest_middleware; + const manifest = this.getMiddlewareManifest(); + const middleware = manifest == null ? void 0 : (_manifest_middleware = manifest.middleware) == null ? void 0 : _manifest_middleware['/']; + if (!middleware) { + const middlewareModule = await this.loadNodeMiddleware(); + if (middlewareModule) { + var _middlewareModule_config; + return { + match: (0, _middlewareroutematcher.getMiddlewareRouteMatcher)(((_middlewareModule_config = middlewareModule.config) == null ? void 0 : _middlewareModule_config.matchers) || [ + { + regexp: '.*', + originalSource: '/:path*' + } + ]), + page: '/' + }; + } + return; + } + return { + match: getMiddlewareMatcher(middleware), + page: '/' + }; + } + getEdgeFunctionsPages() { + const manifest = this.getMiddlewareManifest(); + if (!manifest) { + return []; + } + return Object.keys(manifest.functions); + } + /** + * Get information for the edge function located in the provided page + * folder. If the edge function info can't be found it will throw + * an error. + */ getEdgeFunctionInfo(params) { + const manifest = this.getMiddlewareManifest(); + if (!manifest) { + return null; + } + let foundPage; + try { + foundPage = (0, _denormalizepagepath.denormalizePagePath)((0, _normalizepagepath.normalizePagePath)(params.page)); + } catch (err) { + return null; + } + let pageInfo = params.middleware ? manifest.middleware[foundPage] : manifest.functions[foundPage]; + if (!pageInfo) { + if (!params.middleware) { + throw new _utils.PageNotFoundError(foundPage); + } + return null; + } + return { + name: pageInfo.name, + paths: pageInfo.files.map((file)=>(0, _path.join)(/* turbopackIgnore: true */ this.distDir, file)), + wasm: (pageInfo.wasm ?? []).map((binding)=>({ + ...binding, + filePath: (0, _path.join)(/* turbopackIgnore: true */ this.distDir, binding.filePath) + })), + assets: pageInfo.assets && pageInfo.assets.map((binding)=>{ + return { + ...binding, + filePath: (0, _path.join)(/* turbopackIgnore: true */ this.distDir, binding.filePath) + }; + }), + env: pageInfo.env + }; + } + async loadNodeMiddleware() { + if (!process.env.NEXT_MINIMAL) { + try { + var _functionsConfig_functions; + const functionsConfig = this.dev ? {} : require((0, _path.join)(/* turbopackIgnore: true */ this.distDir, 'server', _constants.FUNCTIONS_CONFIG_MANIFEST)); + if (this.dev || (functionsConfig == null ? void 0 : (_functionsConfig_functions = functionsConfig.functions) == null ? void 0 : _functionsConfig_functions['/_middleware'])) { + // if used with top level await, this will be a promise + return require((0, _path.join)(/* turbopackIgnore: true */ this.distDir, 'server', 'middleware.js')); + } + } catch (err) { + if ((0, _iserror.default)(err) && err.code !== 'ENOENT' && err.code !== 'MODULE_NOT_FOUND') { + throw err; + } + } + } + } + /** + * Checks if a middleware exists. This method is useful for the development + * server where we need to check the filesystem. Here we just check the + * middleware manifest. + */ async hasMiddleware(pathname) { + const info = this.getEdgeFunctionInfo({ + page: pathname, + middleware: true + }); + const nodeMiddleware = await this.loadNodeMiddleware(); + if (!info && nodeMiddleware) { + return true; + } + return Boolean(info && info.paths.length > 0); + } + /** + * A placeholder for a function to be defined in the development server. + * It will make sure that the root middleware or an edge function has been compiled + * so that we can run it. + */ async ensureMiddleware(_url) {} + async ensureEdgeFunction(_params) {} + /** + * This method gets all middleware matchers and execute them when the request + * matches. It will make sure that each middleware exists and is compiled and + * ready to be invoked. The development server will decorate it to add warns + * and errors with rich traces. + */ async runMiddleware(params) { + if (process.env.NEXT_MINIMAL) { + throw Object.defineProperty(new Error('invariant: runMiddleware should not be called in minimal mode'), "__NEXT_ERROR_CODE", { + value: "E276", + enumerable: false, + configurable: true + }); + } + // Middleware is skipped for on-demand revalidate requests + if ((0, _apiutils.checkIsOnDemandRevalidate)(params.request, this.renderOpts.previewProps).isOnDemandRevalidate) { + return { + response: new Response(null, { + headers: { + 'x-middleware-next': '1' + } + }) + }; + } + let url; + if (this.nextConfig.skipProxyUrlNormalize) { + url = (0, _requestmeta.getRequestMeta)(params.request, 'initURL'); + } else { + // For middleware to "fetch" we must always provide an absolute URL + const query = (0, _querystring.urlQueryToSearchParams)(params.parsed.query).toString(); + const locale = (0, _requestmeta.getRequestMeta)(params.request, 'locale'); + url = `${(0, _requestmeta.getRequestMeta)(params.request, 'initProtocol')}://${this.fetchHostname || 'localhost'}:${this.port}${locale ? `/${locale}` : ''}${params.parsed.pathname}${query ? `?${query}` : ''}`; + } + if (!url.startsWith('http')) { + throw Object.defineProperty(new Error('To use middleware you must provide a `hostname` and `port` to the Next.js Server'), "__NEXT_ERROR_CODE", { + value: "E35", + enumerable: false, + configurable: true + }); + } + const page = {}; + const middleware = await this.getMiddleware(); + if (!middleware) { + return { + finished: false + }; + } + if (!await this.hasMiddleware(middleware.page)) { + return { + finished: false + }; + } + await this.ensureMiddleware(params.request.url); + const middlewareInfo = this.getEdgeFunctionInfo({ + page: middleware.page, + middleware: true + }); + const method = (params.request.method || 'GET').toUpperCase(); + const requestData = { + headers: params.request.headers, + method, + nextConfig: { + basePath: this.nextConfig.basePath, + i18n: this.nextConfig.i18n, + trailingSlash: this.nextConfig.trailingSlash, + experimental: this.nextConfig.experimental + }, + url: url, + page, + body: method !== 'GET' && method !== 'HEAD' ? (0, _requestmeta.getRequestMeta)(params.request, 'clonableBody') : undefined, + signal: (0, _nextrequest.signalFromNodeResponse)(params.response.originalResponse), + waitUntil: this.getWaitUntil() + }; + let result; + // if no middleware info check for Node.js middleware + // this is not in the middleware-manifest as that historically + // has only included edge-functions, we need to do a breaking + // version bump for that manifest to write this info there if + // we decide we want to + if (!middlewareInfo) { + let middlewareModule; + middlewareModule = await this.loadNodeMiddleware(); + if (!middlewareModule) { + throw new _utils.MiddlewareNotFoundError(); + } + const adapterFn = middlewareModule.default || middlewareModule; + const hasRequestBody = ![ + 'HEAD', + 'GET' + ].includes(params.request.method) && Boolean(requestData.body); + try { + result = await adapterFn({ + handler: middlewareModule.proxy || middlewareModule.middleware || middlewareModule, + request: { + ...requestData, + body: hasRequestBody ? requestData.body.cloneBodyStream() : undefined + }, + page: 'middleware' + }); + } finally{ + if (hasRequestBody) { + await requestData.body.finalize(); + } + } + } else { + const { run } = require('./web/sandbox'); + result = await run({ + distDir: this.distDir, + name: middlewareInfo.name, + paths: middlewareInfo.paths, + edgeFunctionEntry: middlewareInfo, + request: requestData, + useCache: true, + onWarning: params.onWarning, + clientAssetToken: this.nextConfig.experimental.immutableAssetToken || this.deploymentId + }); + } + if (!this.dev) { + result.waitUntil.catch((error)=>{ + console.error(`Uncaught: middleware waitUntil errored`, error); + }); + } + if (!result) { + this.render404(params.request, params.response, params.parsed); + return { + finished: true + }; + } + // Split compound (comma-separated) set-cookie headers + if (result.response.headers.has('set-cookie')) { + const cookies = result.response.headers.getSetCookie().flatMap((maybeCompoundCookie)=>(0, _utils1.splitCookiesString)(maybeCompoundCookie)); + // Clear existing header(s) + result.response.headers.delete('set-cookie'); + // Append each cookie individually. + for (const cookie of cookies){ + result.response.headers.append('set-cookie', cookie); + } + // Add cookies to request meta. + (0, _requestmeta.addRequestMeta)(params.request, 'middlewareCookie', cookies); + } + return result; + } + getPrerenderManifest() { + if (this._cachedPreviewManifest) { + return this._cachedPreviewManifest; + } + this._cachedPreviewManifest = (0, _loadmanifestexternal.loadManifest)((0, _path.join)(/* turbopackIgnore: true */ this.distDir, _constants.PRERENDER_MANIFEST)); + return this._cachedPreviewManifest; + } + getPrefetchHints() { + if (this._cachedPrefetchHints) { + return this._cachedPrefetchHints; + } + this._cachedPrefetchHints = (0, _loadmanifestexternal.loadManifest)((0, _path.join)(/* turbopackIgnore: true */ this.distDir, _constants.SERVER_DIRECTORY, _constants.PREFETCH_HINTS), true, undefined, false, true // handleMissing: don't crash if the file doesn't exist + ) ?? {}; + return this._cachedPrefetchHints; + } + getRoutesManifest() { + return (0, _tracer.getTracer)().trace(_constants1.NextNodeServerSpan.getRoutesManifest, ()=>(0, _loadmanifestexternal.loadManifest)((0, _path.join)(/* turbopackIgnore: true */ this.distDir, _constants.ROUTES_MANIFEST))); + } + attachRequestMeta(req, parsedUrl, isUpgradeReq) { + var _req_headers_xforwardedproto; + // Injected in base-server.ts + const protocol = ((_req_headers_xforwardedproto = req.headers['x-forwarded-proto']) == null ? void 0 : _req_headers_xforwardedproto.includes('https')) ? 'https' : 'http'; + // When there are hostname and port we build an absolute URL + const initUrl = this.fetchHostname && this.port ? `${protocol}://${this.fetchHostname}:${this.port}${req.url}` : this.nextConfig.experimental.trustHostHeader ? `https://${req.headers.host || 'localhost'}${req.url}` : req.url; + (0, _requestmeta.addRequestMeta)(req, 'initURL', initUrl); + (0, _requestmeta.addRequestMeta)(req, 'initQuery', { + ...parsedUrl.query + }); + (0, _requestmeta.addRequestMeta)(req, 'initProtocol', protocol); + if (!isUpgradeReq) { + var _this_nextConfig_experimental; + const bodySizeLimit = (_this_nextConfig_experimental = this.nextConfig.experimental) == null ? void 0 : _this_nextConfig_experimental.proxyClientMaxBodySize; + (0, _requestmeta.addRequestMeta)(req, 'clonableBody', (0, _bodystreams.getCloneableBody)(req.originalRequest, bodySizeLimit)); + } + } + async runEdgeFunction(params) { + if (process.env.NEXT_MINIMAL) { + throw Object.defineProperty(new Error('Middleware is not supported in minimal mode. Please remove the `NEXT_MINIMAL` environment variable.'), "__NEXT_ERROR_CODE", { + value: "E58", + enumerable: false, + configurable: true + }); + } + let edgeInfo; + const { query, page, match } = params; + if (!match) await this.ensureEdgeFunction({ + page, + appPaths: params.appPaths, + url: params.req.url + }); + edgeInfo = this.getEdgeFunctionInfo({ + page, + middleware: false + }); + if (!edgeInfo) { + return null; + } + // For edge to "fetch" we must always provide an absolute URL + const isNextDataRequest = (0, _requestmeta.getRequestMeta)(params.req, 'isNextDataReq'); + const initialUrl = new URL((0, _requestmeta.getRequestMeta)(params.req, 'initURL') || '/', 'http://n'); + const queryString = (0, _querystring.urlQueryToSearchParams)({ + ...Object.fromEntries(initialUrl.searchParams), + ...query, + ...params.params + }).toString(); + if (isNextDataRequest) { + params.req.headers['x-nextjs-data'] = '1'; + } + initialUrl.search = queryString; + const url = initialUrl.toString(); + if (!url.startsWith('http')) { + throw Object.defineProperty(new Error('To use middleware you must provide a `hostname` and `port` to the Next.js Server'), "__NEXT_ERROR_CODE", { + value: "E35", + enumerable: false, + configurable: true + }); + } + const { run } = require('./web/sandbox'); + const result = await run({ + distDir: this.distDir, + name: edgeInfo.name, + paths: edgeInfo.paths, + edgeFunctionEntry: edgeInfo, + request: { + headers: params.req.headers, + method: params.req.method, + nextConfig: { + basePath: this.nextConfig.basePath, + i18n: this.nextConfig.i18n, + trailingSlash: this.nextConfig.trailingSlash + }, + url, + page: { + name: params.page, + ...params.params && { + params: params.params + } + }, + body: (0, _requestmeta.getRequestMeta)(params.req, 'clonableBody'), + signal: (0, _nextrequest.signalFromNodeResponse)(params.res.originalResponse), + waitUntil: this.getWaitUntil() + }, + useCache: true, + onError: params.onError, + onWarning: params.onWarning, + incrementalCache: globalThis.__incrementalCache || (0, _requestmeta.getRequestMeta)(params.req, 'incrementalCache'), + serverComponentsHmrCache: (0, _requestmeta.getRequestMeta)(params.req, 'serverComponentsHmrCache'), + clientAssetToken: this.nextConfig.experimental.immutableAssetToken || this.deploymentId + }); + if (result.fetchMetrics) { + params.req.fetchMetrics = result.fetchMetrics; + } + if (!params.res.statusCode || params.res.statusCode < 400) { + params.res.statusCode = result.response.status; + params.res.statusMessage = result.response.statusText; + } + // TODO: (wyattjoh) investigate improving this + result.response.headers.forEach((value, key)=>{ + // The append handling is special cased for `set-cookie`. + if (key.toLowerCase() === 'set-cookie') { + // TODO: (wyattjoh) replace with native response iteration when we can upgrade undici + for (const cookie of (0, _utils1.splitCookiesString)(value)){ + params.res.appendHeader(key, cookie); + } + } else { + params.res.appendHeader(key, value); + } + }); + const { originalResponse } = params.res; + if (result.response.body) { + await (0, _pipereadable.pipeToNodeResponse)(result.response.body, originalResponse); + } else { + originalResponse.end(); + } + return result; + } + get serverDistDir() { + if (this._serverDistDir) { + return this._serverDistDir; + } + const serverDistDir = (0, _path.join)(/* turbopackIgnore: true */ this.distDir, _constants.SERVER_DIRECTORY); + this._serverDistDir = serverDistDir; + return serverDistDir; + } + async getFallbackErrorComponents(_url) { + // Not implemented for production use cases, this is implemented on the + // development server. + return null; + } + async instrumentationOnRequestError(...args) { + await super.instrumentationOnRequestError(...args); + // For Node.js runtime production logs, in dev it will be overridden by next-dev-server + if (!this.dev) { + const [err, , , silenceLog] = args; + if (!silenceLog) { + this.logError(err); + } + } + } + onServerClose(listener) { + this.cleanupListeners.add(listener); + } + async close() { + await this.cleanupListeners.runAll(); + } + getInternalWaitUntil() { + this.internalWaitUntil ??= this.createInternalWaitUntil(); + return this.internalWaitUntil; + } + createInternalWaitUntil() { + if (this.minimalMode) { + throw Object.defineProperty(new _invarianterror.InvariantError('createInternalWaitUntil should never be called in minimal mode'), "__NEXT_ERROR_CODE", { + value: "E540", + enumerable: false, + configurable: true + }); + } + const awaiter = new _awaiter.AwaiterOnce({ + onError: console.error + }); + // TODO(after): warn if the process exits before these are awaited + this.onServerClose(()=>awaiter.awaiting()); + return awaiter.waitUntil; + } +} + +//# sourceMappingURL=next-server.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/next-typescript.js b/build/node_modules/next/dist/server/next-typescript.js new file mode 100644 index 0000000..c994955 --- /dev/null +++ b/build/node_modules/next/dist/server/next-typescript.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "createTSPlugin", { + enumerable: true, + get: function() { + return _typescript.createTSPlugin; + } +}); +const _typescript = require("./typescript"); + +//# sourceMappingURL=next-typescript.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/next.js b/build/node_modules/next/dist/server/next.js new file mode 100644 index 0000000..f850ba6 --- /dev/null +++ b/build/node_modules/next/dist/server/next.js @@ -0,0 +1,455 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + NextServer: null, + default: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + NextServer: function() { + return NextServer; + }, + // exports = module.exports + // Support `import next from 'next'` + default: function() { + return _default; + } +}); +require("./require-hook"); +require("./node-polyfill-crypto"); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("../build/output/log")); +const _config = /*#__PURE__*/ _interop_require_default(require("./config")); +const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path")); +const _constants = require("../lib/constants"); +const _constants1 = require("../shared/lib/constants"); +const _tracer = require("./lib/trace/tracer"); +const _constants2 = require("./lib/trace/constants"); +const _formaturl = require("../shared/lib/router/utils/format-url"); +const _asynccallbackset = require("./lib/async-callback-set"); +const _routerservercontext = require("./lib/router-utils/router-server-context"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +let ServerImpl; +const getServerImpl = async ()=>{ + if (ServerImpl === undefined) { + ServerImpl = (await Promise.resolve(require('./next-server'))).default; + } + return ServerImpl; +}; +const SYMBOL_LOAD_CONFIG = Symbol('next.load_config'); +class NextServer { + constructor(options){ + this.options = options; + } + get hostname() { + return this.options.hostname; + } + get port() { + return this.options.port; + } + getRequestHandler() { + return async (req, res, parsedUrl)=>{ + return (0, _tracer.getTracer)().trace(_constants2.NextServerSpan.getRequestHandler, async ()=>{ + const requestHandler = await this.getServerRequestHandler(); + return requestHandler(req, res, parsedUrl); + }); + }; + } + /** + * @internal - this method is internal to Next.js and should not be used + * directly by end-users, only used in testing + */ getRequestHandlerWithMetadata(meta) { + return async (req, res, parsedUrl)=>{ + return (0, _tracer.getTracer)().trace(_constants2.NextServerSpan.getRequestHandlerWithMetadata, async ()=>{ + const server = await this.getServer(); + const handler = server.getRequestHandlerWithMetadata(meta); + return handler(req, res, parsedUrl); + }); + }; + } + getUpgradeHandler() { + return async (req, socket, head)=>{ + const server = await this.getServer(); + // @ts-expect-error we mark this as protected so it + // causes an error here + return server.handleUpgrade.apply(server, [ + req, + socket, + head + ]); + }; + } + setAssetPrefix(assetPrefix) { + if (this.server) { + this.server.setAssetPrefix(assetPrefix); + } else { + this.preparedAssetPrefix = assetPrefix; + } + } + logError(...args) { + if (this.server) { + this.server.logError(...args); + } + } + async logErrorWithOriginalStack(err, type) { + const server = await this.getServer(); + // this is only available on dev server + if (server.logErrorWithOriginalStack) { + return server.logErrorWithOriginalStack(err, type); + } + } + async revalidate(...args) { + const server = await this.getServer(); + return server.revalidate(...args); + } + async render(...args) { + const server = await this.getServer(); + return server.render(...args); + } + async renderToHTML(...args) { + const server = await this.getServer(); + return server.renderToHTML(...args); + } + async renderError(...args) { + const server = await this.getServer(); + return server.renderError(...args); + } + async renderErrorToHTML(...args) { + const server = await this.getServer(); + return server.renderErrorToHTML(...args); + } + async render404(...args) { + const server = await this.getServer(); + return server.render404(...args); + } + async prepare(serverFields) { + const server = await this.getServer(); + if (serverFields) { + Object.assign(server, serverFields); + } + // We shouldn't prepare the server in production, + // because this code won't be executed when deployed + if (this.options.dev) { + await server.prepare(); + } + } + async close() { + if (this.server) { + await this.server.close(); + } + } + async createServer(options) { + let ServerImplementation; + if (options.dev) { + ServerImplementation = require('./dev/next-dev-server').default; + } else { + ServerImplementation = await getServerImpl(); + } + const server = new ServerImplementation(options); + return server; + } + async [SYMBOL_LOAD_CONFIG]() { + const dir = _nodepath.default.resolve(/* turbopackIgnore: true */ this.options.dir || '.'); + const config = await (0, _config.default)(this.options.dev ? _constants1.PHASE_DEVELOPMENT_SERVER : _constants1.PHASE_PRODUCTION_SERVER, dir, { + customConfig: this.options.conf, + silent: true + }); + // check serialized build config when available + if (!this.options.dev) { + try { + const serializedConfig = require(/* turbopackIgnore: true */ _nodepath.default.join(/* turbopackIgnore: true */ dir, config.distDir, _constants1.SERVER_FILES_MANIFEST + '.json')).config; + config.experimental.isExperimentalCompile = serializedConfig.experimental.isExperimentalCompile; + } catch (_) { + // if distDir is customized we don't know until we + // load the config so fallback to loading the config + // from next.config.js + } + } + return config; + } + async getServer() { + if (!this.serverPromise) { + this.serverPromise = this[SYMBOL_LOAD_CONFIG]().then(async (conf)=>{ + if (!this.options.dev) { + if (conf.output === 'standalone') { + if (!process.env.__NEXT_PRIVATE_STANDALONE_CONFIG) { + _log.warn(`"next start" does not work with "output: standalone" configuration. Use "node .next/standalone/server.js" instead.`); + } + } else if (conf.output === 'export') { + throw Object.defineProperty(new Error(`"next start" does not work with "output: export" configuration. Use "npx serve@latest out" instead.`), "__NEXT_ERROR_CODE", { + value: "E375", + enumerable: false, + configurable: true + }); + } + } + this.server = await this.createServer({ + ...this.options, + conf + }); + if (this.preparedAssetPrefix) { + this.server.setAssetPrefix(this.preparedAssetPrefix); + } + return this.server; + }); + } + return this.serverPromise; + } + async getServerRequestHandler() { + if (this.reqHandler) return this.reqHandler; + // Memoize request handler creation + if (!this.reqHandlerPromise) { + this.reqHandlerPromise = this.getServer().then((server)=>{ + this.reqHandler = (0, _tracer.getTracer)().wrap(_constants2.NextServerSpan.getServerRequestHandler, server.getRequestHandler().bind(server)); + delete this.reqHandlerPromise; + return this.reqHandler; + }); + } + return this.reqHandlerPromise; + } +} +/** The wrapper server used for `import next from "next" (in a custom server)` */ class NextCustomServer { + constructor(options){ + this.didWebSocketSetup = false; + this.options = options; + } + getInit() { + if (!this.init) { + throw Object.defineProperty(new Error('prepare() must be called before performing this operation'), "__NEXT_ERROR_CODE", { + value: "E355", + enumerable: false, + configurable: true + }); + } + return this.init; + } + get requestHandler() { + return this.getInit().requestHandler; + } + get upgradeHandler() { + return this.getInit().upgradeHandler; + } + get server() { + return this.getInit().server; + } + get hostname() { + return this.options.hostname; + } + get port() { + return this.options.port; + } + async prepare() { + if (this.options.dev) { + process.env.__NEXT_DEV_SERVER = '1'; + } + const { getRequestHandlers } = require('./lib/start-server'); + let onDevServerCleanup; + if (this.options.dev) { + this.cleanupListeners = new _asynccallbackset.AsyncCallbackSet(); + onDevServerCleanup = this.cleanupListeners.add.bind(this.cleanupListeners); + } + const initResult = await getRequestHandlers({ + dir: this.options.dir, + port: this.options.port || 3000, + isDev: !!this.options.dev, + onDevServerCleanup, + hostname: this.options.hostname || 'localhost', + minimalMode: this.options.minimalMode, + quiet: this.options.quiet + }); + this.init = initResult; + } + setupWebSocketHandler(customServer, _req) { + if (!this.didWebSocketSetup) { + var _req_socket; + this.didWebSocketSetup = true; + customServer = customServer || (_req == null ? void 0 : (_req_socket = _req.socket) == null ? void 0 : _req_socket.server); + if (customServer) { + customServer.on('upgrade', async (req, socket, head)=>{ + this.upgradeHandler(req, socket, head); + }); + } + } + } + getRequestHandler() { + return async (req, res, parsedUrl)=>{ + this.setupWebSocketHandler(this.options.httpServer, req); + if (parsedUrl) { + req.url = (0, _formaturl.formatUrl)(parsedUrl); + } + return this.requestHandler(req, res); + }; + } + async render(...args) { + let [req, res, pathname, query, parsedUrl] = args; + this.setupWebSocketHandler(this.options.httpServer, req); + if (!pathname.startsWith('/')) { + console.error(`Cannot render page with path "${pathname}"`); + pathname = `/${pathname}`; + } + pathname = pathname === '/index' ? '/' : pathname; + req.url = (0, _formaturl.formatUrl)({ + ...parsedUrl, + pathname, + query + }); + await this.requestHandler(req, res); + return; + } + setAssetPrefix(assetPrefix) { + var _routerServerGlobal_RouterServerContextSymbol_relativeProjectDir, _routerServerGlobal_RouterServerContextSymbol; + this.server.setAssetPrefix(assetPrefix); + // update the router-server nextConfig instance as + // this is the source of truth for "handler" in serverful + const relativeProjectDir = _nodepath.default.relative(process.cwd(), this.options.dir || ''); + if ((_routerServerGlobal_RouterServerContextSymbol = _routerservercontext.routerServerGlobal[_routerservercontext.RouterServerContextSymbol]) == null ? void 0 : (_routerServerGlobal_RouterServerContextSymbol_relativeProjectDir = _routerServerGlobal_RouterServerContextSymbol[relativeProjectDir]) == null ? void 0 : _routerServerGlobal_RouterServerContextSymbol_relativeProjectDir.nextConfig) { + _routerservercontext.routerServerGlobal[_routerservercontext.RouterServerContextSymbol][relativeProjectDir].nextConfig.assetPrefix = assetPrefix; + } + } + getUpgradeHandler() { + return this.server.getUpgradeHandler(); + } + logError(...args) { + this.server.logError(...args); + } + logErrorWithOriginalStack(err, type) { + return this.server.logErrorWithOriginalStack(err, type); + } + async revalidate(...args) { + return this.server.revalidate(...args); + } + async renderToHTML(...args) { + return this.server.renderToHTML(...args); + } + async renderError(...args) { + return this.server.renderError(...args); + } + async renderErrorToHTML(...args) { + return this.server.renderErrorToHTML(...args); + } + async render404(...args) { + return this.server.render404(...args); + } + async close() { + var _this_init, _this_cleanupListeners; + await Promise.allSettled([ + (_this_init = this.init) == null ? void 0 : _this_init.server.close(), + (_this_cleanupListeners = this.cleanupListeners) == null ? void 0 : _this_cleanupListeners.runAll() + ]); + } +} +// This file is used for when users run `require('next')` +function createServer(options) { + // next sets customServer to false when calling this function, in that case we don't want to modify the environment variables + const isCustomServer = (options == null ? void 0 : options.customServer) ?? true; + if (isCustomServer) { + const selectTurbopack = options && (options.turbo || options.turbopack || process.env.IS_TURBOPACK_TEST); + const selectWebpack = options && (options.webpack || process.env.IS_WEBPACK_TEST); + if (selectTurbopack && selectWebpack) { + throw Object.defineProperty(new Error('Pass either `webpack` or `turbopack`, not both.'), "__NEXT_ERROR_CODE", { + value: "E851", + enumerable: false, + configurable: true + }); + } + if (selectTurbopack || !selectWebpack) { + process.env.TURBOPACK ??= selectTurbopack ? '1' : 'auto'; + } + } else { + if (options && (options.webpack || options.turbo || options.turbopack)) { + throw Object.defineProperty(new Error('Only custom servers can pass `webpack`, `turbo`, or `turbopack`.'), "__NEXT_ERROR_CODE", { + value: "E852", + enumerable: false, + configurable: true + }); + } + } + // The package is used as a TypeScript plugin. + if (options && 'typescript' in options && 'version' in options.typescript) { + const pluginMod = require('./next-typescript'); + return pluginMod.createTSPlugin(options); + } + if (options == null) { + throw Object.defineProperty(new Error('The server has not been instantiated properly. https://nextjs.org/docs/messages/invalid-server-options'), "__NEXT_ERROR_CODE", { + value: "E75", + enumerable: false, + configurable: true + }); + } + if (!('isNextDevCommand' in options) && process.env.NODE_ENV && ![ + 'production', + 'development', + 'test' + ].includes(process.env.NODE_ENV)) { + _log.warn(_constants.NON_STANDARD_NODE_ENV); + } + if (options.dev && typeof options.dev !== 'boolean') { + console.warn("Warning: 'dev' is not a boolean which could introduce unexpected behavior. https://nextjs.org/docs/messages/invalid-server-options"); + } + // When the caller is a custom server (using next()). + if (options.customServer !== false) { + const dir = _nodepath.default.resolve(/* turbopackIgnore: true */ options.dir || '.'); + return new NextCustomServer({ + ...options, + dir + }); + } + // When the caller is Next.js internals (i.e. render worker, start server, etc) + return new NextServer(options); +} +// Support commonjs `require('next')` +module.exports = createServer; +const _default = createServer; + +//# sourceMappingURL=next.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/node-environment-baseline.js b/build/node_modules/next/dist/server/node-environment-baseline.js new file mode 100644 index 0000000..57c2d8e --- /dev/null +++ b/build/node_modules/next/dist/server/node-environment-baseline.js @@ -0,0 +1,25 @@ +// This file should be imported before any others. It sets up the environment +// for later imports to work properly. +// expose AsyncLocalStorage on global for react usage if it isn't already provided by the environment +"use strict"; +if (typeof globalThis.AsyncLocalStorage !== 'function') { + const { AsyncLocalStorage } = require('async_hooks'); + globalThis.AsyncLocalStorage = AsyncLocalStorage; +} +if (typeof globalThis.WebSocket !== 'function') { + Object.defineProperty(globalThis, 'WebSocket', { + configurable: true, + get () { + return require('next/dist/compiled/ws').WebSocket; + }, + set (value) { + Object.defineProperty(globalThis, 'WebSocket', { + configurable: true, + writable: true, + value + }); + } + }); +} + +//# sourceMappingURL=node-environment-baseline.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/node-environment-extensions/console-dim.external.js b/build/node_modules/next/dist/server/node-environment-extensions/console-dim.external.js new file mode 100644 index 0000000..e2b147a --- /dev/null +++ b/build/node_modules/next/dist/server/node-environment-extensions/console-dim.external.js @@ -0,0 +1,301 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "setAbortedLogsStyle", { + enumerable: true, + get: function() { + return setAbortedLogsStyle; + } +}); +const _nodeinspector = /*#__PURE__*/ _interop_require_wildcard(require("node:inspector")); +const _picocolors = require("../../lib/picocolors"); +const _consoleasyncstorageexternal = require("../app-render/console-async-storage.external"); +const _workunitasyncstorageexternal = require("../app-render/work-unit-async-storage.external"); +const _runtimereactsexternal = require("../runtime-reacts.external"); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +// eslint-disable-next-line @typescript-eslint/no-unused-vars -- we may use later and want parity with the HIDDEN_STYLE value +const DIMMED_STYLE = 'dimmed'; +const HIDDEN_STYLE = 'hidden'; +let currentAbortedLogsStyle = 'dimmed'; +function setAbortedLogsStyle(style) { + currentAbortedLogsStyle = style; +} +const isColorSupported = (0, _picocolors.dim)('test') !== 'test'; +// 50% opacity for dimmed text +const dimStyle = 'color: color(from currentColor xyz x y z / 0.5);'; +const reactBadgeFormat = '\x1b[0m\x1b[7m%c%s\x1b[0m%c '; +function dimmedConsoleArgs(...inputArgs) { + if (!isColorSupported) { + return inputArgs; + } + const newArgs = inputArgs.slice(0); + let template = ''; + let argumentsPointer = 0; + if (typeof inputArgs[0] === 'string') { + const originalTemplateString = inputArgs[0]; + // Remove the original template string from the args. + newArgs.splice(argumentsPointer, 1); + argumentsPointer += 1; + let i = 0; + if (originalTemplateString.startsWith(reactBadgeFormat)) { + i = reactBadgeFormat.length; + // for `format` we already moved the pointer earlier + // style, badge, reset style + argumentsPointer += 3; + template += reactBadgeFormat; + // React's badge reset styles, reapply dimming + template += '\x1b[2m%c'; + // argumentsPointer includes template + newArgs.splice(argumentsPointer - 1, 0, dimStyle); + // dim the badge + newArgs[0] += `;${dimStyle}`; + } + for(i; i < originalTemplateString.length; i++){ + const currentChar = originalTemplateString[i]; + if (currentChar !== '%') { + template += currentChar; + continue; + } + const nextChar = originalTemplateString[i + 1]; + ++i; + switch(nextChar){ + case 'f': + case 'O': + case 'o': + case 'd': + case 's': + case 'i': + case 'c': + ++argumentsPointer; + template += `%${nextChar}`; + break; + default: + template += `%${nextChar}`; + } + } + } + for(argumentsPointer; argumentsPointer < inputArgs.length; ++argumentsPointer){ + const arg = inputArgs[argumentsPointer]; + const argType = typeof arg; + if (argumentsPointer > 0) { + template += ' '; + } + switch(argType){ + case 'boolean': + case 'string': + template += '%s'; + break; + case 'bigint': + template += '%s'; + break; + case 'number': + if (arg % 0) { + template += '%f'; + } else { + template += '%d'; + } + break; + case 'object': + template += '%O'; + break; + case 'symbol': + case 'undefined': + case 'function': + template += '%s'; + break; + default: + // deopt to string for new, unknown types + template += '%s'; + } + } + template += '\x1b[22m'; + return [ + (0, _picocolors.dim)(`%c${template}`), + dimStyle, + ...newArgs + ]; +} +function convertToDimmedArgs(methodName, args) { + // When the Node.js inspector is open (e.g. --inspect), skip dimming entirely. + // Dimming wraps arguments in a format string which defeats inspector + // affordances such as collapsible objects and clickable/linkified stack + // traces. Ideally we would only skip dimming when a debugger frontend is + // actually attached, but Node.js does not expose a synchronous API for that. + // Detecting would require async polling of the /json/list HTTP endpoint. + if (_nodeinspector.url() !== undefined) { + return args; + } + switch(methodName){ + case 'dir': + case 'dirxml': + case 'group': + case 'groupCollapsed': + case 'groupEnd': + case 'table': + { + // These methods cannot be colorized because they don't take a formatting string. + return args; + } + case 'assert': + { + // assert takes formatting options as the second argument. + return [ + args[0] + ].concat(...dimmedConsoleArgs(args[1], ...args.slice(2))); + } + case 'error': + case 'debug': + case 'info': + case 'log': + case 'trace': + case 'warn': + return dimmedConsoleArgs(args[0], ...args.slice(1)); + default: + return methodName; + } +} +// Based on https://github.com/facebook/react/blob/28dc0776be2e1370fe217549d32aee2519f0cf05/packages/react-server/src/ReactFlightServer.js#L248 +function patchConsoleMethod(methodName) { + const descriptor = Object.getOwnPropertyDescriptor(console, methodName); + if (descriptor && (descriptor.configurable || descriptor.writable) && typeof descriptor.value === 'function') { + const originalMethod = descriptor.value; + const originalName = Object.getOwnPropertyDescriptor(originalMethod, 'name'); + const wrapperMethod = function(...args) { + var _getClientReact, _getServerReact; + const consoleStore = _consoleasyncstorageexternal.consoleAsyncStorage.getStore(); + // First we see if there is a cache signal for our current scope. If we're in a client render it'll + // come from the client React cacheSignal implementation. If we are in a server render it'll come from + // the server React cacheSignal implementation. Any particular console call will be in one, the other, or neither + // scope and these signals return null if you are out of scope so this can be called from a single global patch + // and still work properly. + const signal = ((_getClientReact = (0, _runtimereactsexternal.getClientReact)()) == null ? void 0 : _getClientReact.cacheSignal()) ?? ((_getServerReact = (0, _runtimereactsexternal.getServerReact)()) == null ? void 0 : _getServerReact.cacheSignal()); + if (signal) { + // We are in a React Server render and can consult the React cache signal to determine if logs + // are now dimmable. + if (signal.aborted) { + if (currentAbortedLogsStyle === HIDDEN_STYLE) { + return; + } + return applyWithDimming.call(this, consoleStore, originalMethod, methodName, args); + } else if ((consoleStore == null ? void 0 : consoleStore.dim) === true) { + return applyWithDimming.call(this, consoleStore, originalMethod, methodName, args); + } else { + return originalMethod.apply(this, args); + } + } + // We need to fall back to checking the work unit store for two reasons. + // 1. Client React does not yet implement cacheSignal (it always returns null) + // 2. route.ts files aren't rendered with React but do have prerender semantics + // TODO in the future we should be able to remove this once there is a runnable cache + // scope independent of actual React rendering. + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + switch(workUnitStore == null ? void 0 : workUnitStore.type){ + case 'prerender': + case 'prerender-runtime': + // These can be hit in a route handler. In the future we can use potential React.createCache API + // to create a cache scope for arbitrary computation and can move over to cacheSignal exclusively. + // fallthrough + case 'prerender-client': + case 'validation-client': + { + // This is a react-dom/server render and won't have a cacheSignal until React adds this for the client world. + const renderSignal = workUnitStore.renderSignal; + if (renderSignal.aborted) { + if (currentAbortedLogsStyle === HIDDEN_STYLE) { + return; + } + return applyWithDimming.call(this, consoleStore, originalMethod, methodName, args); + } + } + // intentional fallthrough + case 'prerender-legacy': + case 'prerender-ppr': + case 'cache': + case 'unstable-cache': + case 'private-cache': + case 'request': + case 'generate-static-params': + case undefined: + if ((consoleStore == null ? void 0 : consoleStore.dim) === true) { + return applyWithDimming.call(this, consoleStore, originalMethod, methodName, args); + } else { + return originalMethod.apply(this, args); + } + default: + workUnitStore; + } + }; + if (originalName) { + Object.defineProperty(wrapperMethod, 'name', originalName); + } + Object.defineProperty(console, methodName, { + value: wrapperMethod + }); + } +} +function applyWithDimming(consoleStore, method, methodName, args) { + if ((consoleStore == null ? void 0 : consoleStore.dim) === true) { + return method.apply(this, convertToDimmedArgs(methodName, args)); + } else { + return _consoleasyncstorageexternal.consoleAsyncStorage.run(DIMMED_STORE, method.bind(this, ...convertToDimmedArgs(methodName, args))); + } +} +const DIMMED_STORE = { + dim: true +}; +patchConsoleMethod('error'); +patchConsoleMethod('assert'); +patchConsoleMethod('debug'); +patchConsoleMethod('dir'); +patchConsoleMethod('dirxml'); +patchConsoleMethod('group'); +patchConsoleMethod('groupCollapsed'); +patchConsoleMethod('groupEnd'); +patchConsoleMethod('info'); +patchConsoleMethod('log'); +patchConsoleMethod('table'); +patchConsoleMethod('trace'); +patchConsoleMethod('warn'); + +//# sourceMappingURL=console-dim.external.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/node-environment-extensions/console-exit.js b/build/node_modules/next/dist/server/node-environment-extensions/console-exit.js new file mode 100644 index 0000000..185ebad --- /dev/null +++ b/build/node_modules/next/dist/server/node-environment-extensions/console-exit.js @@ -0,0 +1,49 @@ +/** + * Patches console methods to exit the workUnitAsyncStorage so that inside the host implementation + * sync IO can be called. This is relevant for example with runtimes that patch console methods to + * prepend a timestamp to the log output. + * + * Note that this will only exit for already installed patched console methods. If you further patch + * the console method after this and add any sync IO there it will trigger sync IO warnings while prerendering. + * + * This is a pragmatic concession because layering the patches if you install your own log implementation + * after they are installed is very tricky to do correctly because the order matters + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +const _workunitasyncstorageexternal = require("../app-render/work-unit-async-storage.external"); +function patchConsoleMethod(methodName) { + const descriptor = Object.getOwnPropertyDescriptor(console, methodName); + if (descriptor && (descriptor.configurable || descriptor.writable) && typeof descriptor.value === 'function') { + const originalMethod = descriptor.value; + const originalName = Object.getOwnPropertyDescriptor(originalMethod, 'name'); + let wrapperMethod = function(...args) { + return _workunitasyncstorageexternal.workUnitAsyncStorage.exit(()=>originalMethod.apply(console, args)); + }; + if (originalName) { + Object.defineProperty(wrapperMethod, 'name', originalName); + } + Object.defineProperty(console, methodName, { + value: wrapperMethod + }); + } +} +// We patch the same methods that React and our dev patch do. +// We may find other methods that could benefit from patching but if +// they exist we ought to consider patching them in all three places +patchConsoleMethod('error'); +patchConsoleMethod('assert'); +patchConsoleMethod('debug'); +patchConsoleMethod('dir'); +patchConsoleMethod('dirxml'); +patchConsoleMethod('group'); +patchConsoleMethod('groupCollapsed'); +patchConsoleMethod('groupEnd'); +patchConsoleMethod('info'); +patchConsoleMethod('log'); +patchConsoleMethod('table'); +patchConsoleMethod('trace'); +patchConsoleMethod('warn'); + +//# sourceMappingURL=console-exit.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/node-environment-extensions/console-file.js b/build/node_modules/next/dist/server/node-environment-extensions/console-file.js new file mode 100644 index 0000000..0096412 --- /dev/null +++ b/build/node_modules/next/dist/server/node-environment-extensions/console-file.js @@ -0,0 +1,56 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +const _consoleasyncstorageexternal = require("../app-render/console-async-storage.external"); +const _filelogger = require("../dev/browser-logs/file-logger"); +const _console = require("../../client/lib/console"); +// Based on https://github.com/facebook/react/blob/28dc0776be2e1370fe217549d32aee2519f0cf05/packages/react-server/src/ReactFlightServer.js#L248 +function patchConsoleMethodDEV(methodName) { + const descriptor = Object.getOwnPropertyDescriptor(console, methodName); + if (descriptor && (descriptor.configurable || descriptor.writable) && typeof descriptor.value === 'function') { + const originalMethod = descriptor.value; + const originalName = Object.getOwnPropertyDescriptor(originalMethod, 'name'); + const wrapperMethod = function(...args) { + const consoleStore = _consoleasyncstorageexternal.consoleAsyncStorage.getStore(); + if ((consoleStore == null ? void 0 : consoleStore.dim) === true) { + // In this context the log args are already dimmed. We use the console store + // to decide if this log is ignorable for reporting in our file logger. + return originalMethod.apply(this, args); + } else { + const ret = originalMethod.apply(this, args); + const fileLogger = (0, _filelogger.getFileLogger)(); + const message = (0, _console.formatConsoleArgs)(args); + // Strip ANSI escape codes for file logging + // eslint-disable-next-line no-control-regex + const ansiEscapeRegex = new RegExp('\u001b\\[[0-9;]*m', 'g'); + const cleanMessage = message.replace(ansiEscapeRegex, ''); + fileLogger.logServer(methodName.toUpperCase(), cleanMessage); + return ret; + } + }; + if (originalName) { + Object.defineProperty(wrapperMethod, 'name', originalName); + } + Object.defineProperty(console, methodName, { + value: wrapperMethod + }); + } +} +if (process.env.NODE_ENV === 'development') { + patchConsoleMethodDEV('error'); + patchConsoleMethodDEV('assert'); + patchConsoleMethodDEV('debug'); + patchConsoleMethodDEV('dir'); + patchConsoleMethodDEV('dirxml'); + patchConsoleMethodDEV('group'); + patchConsoleMethodDEV('groupCollapsed'); + patchConsoleMethodDEV('groupEnd'); + patchConsoleMethodDEV('info'); + patchConsoleMethodDEV('log'); + patchConsoleMethodDEV('table'); + patchConsoleMethodDEV('trace'); + patchConsoleMethodDEV('warn'); +} + +//# sourceMappingURL=console-file.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/node-environment-extensions/date.js b/build/node_modules/next/dist/server/node-environment-extensions/date.js new file mode 100644 index 0000000..b8ff756 --- /dev/null +++ b/build/node_modules/next/dist/server/node-environment-extensions/date.js @@ -0,0 +1,52 @@ +/** + * We extend `Date` during builds and revalidates to ensure that prerenders don't observe the clock as a source of IO + * When cacheComponents is enabled. The current time is a form of IO even though it resolves synchronously. When cacheComponents is + * enabled we need to ensure that clock time is excluded from prerenders unless it is cached. + * + * There is tension here because time is used for both output and introspection. While arbitrary we intend to reserve + * `Date` for output use cases and `performance` for introspection use cases. If you want to measure + * how long something takes use `performance.timeOrigin` and `performance.now()` rather than `Date.now()` for instance. + * + * The extensions here never error nor alter the underlying Date objects, strings, and numbers created and thus should be transparent to callers. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +const _ioutils = require("./io-utils"); +function createNow(originalNow) { + return ({ + now: function now() { + (0, _ioutils.io)('`Date.now()`', 'time'); + return originalNow(); + } + })['now'.slice()].bind(null); +} +function createDate(originalConstructor) { + const properties = Object.getOwnPropertyDescriptors(originalConstructor); + properties.now.value = createNow(originalConstructor.now); + const apply = Reflect.apply; + const construct = Reflect.construct; + const newConstructor = Object.defineProperties(// Ideally this should not minify the name. + function Date1() { + if (new.target === undefined) { + (0, _ioutils.io)('`Date()`', 'time'); + return apply(originalConstructor, undefined, arguments); + } + if (arguments.length === 0) { + (0, _ioutils.io)('`new Date()`', 'time'); + } + return construct(originalConstructor, arguments, new.target); + }, properties); + Object.defineProperty(originalConstructor.prototype, 'constructor', { + value: newConstructor + }); + return newConstructor; +} +try { + // eslint-disable-next-line no-native-reassign + Date = createDate(Date); +} catch { + console.error('Failed to install `Date` class extension. When using `cacheComponents`, APIs that read the current time will not correctly trigger dynamic behavior.'); +} + +//# sourceMappingURL=date.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/node-environment-extensions/error-inspect.js b/build/node_modules/next/dist/server/node-environment-extensions/error-inspect.js new file mode 100644 index 0000000..0ae3287 --- /dev/null +++ b/build/node_modules/next/dist/server/node-environment-extensions/error-inspect.js @@ -0,0 +1,8 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +const _patcherrorinspect = require("../patch-error-inspect"); +(0, _patcherrorinspect.patchErrorInspectNodeJS)(globalThis.Error); + +//# sourceMappingURL=error-inspect.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.js b/build/node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.js new file mode 100644 index 0000000..eeaa0ae --- /dev/null +++ b/build/node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.js @@ -0,0 +1,577 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + DANGEROUSLY_runPendingImmediatesAfterCurrentTask: null, + expectNoPendingImmediates: null, + unpatchedSetImmediate: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + DANGEROUSLY_runPendingImmediatesAfterCurrentTask: function() { + return DANGEROUSLY_runPendingImmediatesAfterCurrentTask; + }, + expectNoPendingImmediates: function() { + return expectNoPendingImmediates; + }, + unpatchedSetImmediate: function() { + return originalSetImmediate; + } +}); +const _nodeutil = require("node:util"); +const _invarianterror = require("../../shared/lib/invariant-error"); +const _asynclocalstorage = require("../app-render/async-local-storage"); +var ExecutionState = /*#__PURE__*/ function(ExecutionState) { + ExecutionState[ExecutionState["Waiting"] = 1] = "Waiting"; + ExecutionState[ExecutionState["Working"] = 2] = "Working"; + ExecutionState[ExecutionState["Finished"] = 3] = "Finished"; + ExecutionState[ExecutionState["Abandoned"] = 4] = "Abandoned"; + return ExecutionState; +}(ExecutionState || {}); +const FAST_SET_IMMEDIATE_ORIGINALS_KEY = Symbol.for('next.fast-set-immediate.originals'); +// Re-evaluations in dev should always use the same base/original functions. +const originals = globalThis[FAST_SET_IMMEDIATE_ORIGINALS_KEY] ?? (globalThis[FAST_SET_IMMEDIATE_ORIGINALS_KEY] = { + setImmediate: globalThis.setImmediate, + clearImmediate: globalThis.clearImmediate, + nextTick: process.nextTick +}); +let wasEnabledAtLeastOnce = false; +let pendingNextTicks = 0; +let currentExecution = null; +const originalSetImmediate = originals.setImmediate; +const originalClearImmediate = originals.clearImmediate; +const originalNextTick = originals.nextTick; +const originalSetImmediatePromisify = typeof originalSetImmediate === 'function' ? originalSetImmediate[_nodeutil.promisify.custom] : // and won't ever enable the patch, so this can be a dummy value +undefined; +function install() { + if (process.env.NEXT_RUNTIME === 'edge') { + // Nothing to patch. The exported functions all error if used in the edge runtime, + // so we're not going to violate any assumptions by not patching. + return; + } else { + debug == null ? void 0 : debug('installing fast setImmediate patch'); + const nodeTimers = require('node:timers'); + globalThis.setImmediate = nodeTimers.setImmediate = // Workaround for missing __promisify__ which is not a real property + patchedSetImmediate; + globalThis.clearImmediate = nodeTimers.clearImmediate = patchedClearImmediate; + const nodeTimersPromises = require('node:timers/promises'); + nodeTimersPromises.setImmediate = patchedSetImmediatePromise; + process.nextTick = patchedNextTick; + } +} +function DANGEROUSLY_runPendingImmediatesAfterCurrentTask() { + if (process.env.NEXT_RUNTIME === 'edge') { + throw Object.defineProperty(new _invarianterror.InvariantError('DANGEROUSLY_runPendingImmediatesAfterCurrentTask cannot be called in the edge runtime'), "__NEXT_ERROR_CODE", { + value: "E960", + enumerable: false, + configurable: true + }); + } else { + const execution = startCapturingImmediates(); + try { + scheduleWorkAfterNextTicksAndMicrotasks(execution); + } catch (err) { + // If this error comes from a bail() call, rethrow it. + if (execution.state === 4) { + throw err; + } + // Otherwise, bail out here. + bail(execution, Object.defineProperty(new _invarianterror.InvariantError('An unexpected error occurred while starting to capture immediates', { + cause: err + }), "__NEXT_ERROR_CODE", { + value: "E964", + enumerable: false, + configurable: true + })); + } + } +} +function expectNoPendingImmediates() { + if (process.env.NEXT_RUNTIME === 'edge') { + throw Object.defineProperty(new _invarianterror.InvariantError('expectNoPendingImmediates cannot be called in the edge runtime'), "__NEXT_ERROR_CODE", { + value: "E962", + enumerable: false, + configurable: true + }); + } else { + if (currentExecution !== null) { + bail(currentExecution, Object.defineProperty(new _invarianterror.InvariantError(`Expected all captured immediates to have been executed (state: ${ExecutionState[currentExecution.state]})`), "__NEXT_ERROR_CODE", { + value: "E958", + enumerable: false, + configurable: true + })); + } + } +} +/** + * Wait until all nextTicks and microtasks spawned from the current task are done, + * then execute any immediates that they queued. + * */ function scheduleWorkAfterNextTicksAndMicrotasks(execution) { + if (execution.state !== 1) { + throw Object.defineProperty(new _invarianterror.InvariantError(`scheduleWorkAfterTicksAndMicrotasks can only be called while waiting (state: ${ExecutionState[execution.state]})`), "__NEXT_ERROR_CODE", { + value: "E959", + enumerable: false, + configurable: true + }); + } + // We want to execute "fast immediates" after all the nextTicks and microtasks + // spawned from the current task are done. + // The ordering here is: + // + // 1. sync code + // 2. process.nextTick (scheduled from sync code, or from one of these nextTicks) + // 3. microtasks + // 4. process.nextTick (scheduled from microtasks, e.g. `queueMicrotask(() => process.nextTick(callback))`) + // + // We want to run to run in step 4, because that's the latest point before the next tick. + // However, there might also be other callbacks scheduled to run in that step. + // But importantly, they had to be scheduled using a `process.nextTick`, + // so we can detect them by checking if `pendingNextTicks > 0`. + // In that case, we'll just reschedule ourselves in the same way again to let them run first. + // (this process can theoretically repeat multiple times, hence the recursion). + queueMicrotask(()=>{ + // (note that this call won't increment `pendingNextTicks`, + // only the patched `process.nextTick` does that, so this won't loop infinitely) + originalNextTick(()=>{ + // We're now in a nextTick, which means that we're executing inside `processTicksAndRejections`: + // https://github.com/nodejs/node/blob/d546e7fd0bc3cbb4bcc2baae6f3aa44d2e81a413/lib/internal/process/task_queues.js#L84 + // All the work scheduled here will happen within that `processTicksAndRejections` loop. + // Reading the source of `processTicksAndRejections` can help understand the timing here -- + // All we're really doing is strategically pushing callbacks into the two queues + // (nextTicks and microtasks) that that function is currently looping over. + try { + if (execution.state === 4 || currentExecution !== execution) { + debug == null ? void 0 : debug(`scheduler :: the execution was abandoned`); + return; + } + if (pendingNextTicks > 0) { + // Other nextTicks have been scheduled. Let those run first, then try again -- + // we're simulating a event loop task, so all nextTicks should be exhausted before we execute. + debug == null ? void 0 : debug(`scheduler :: yielding to ${pendingNextTicks} nextTicks`); + return scheduleWorkAfterNextTicksAndMicrotasks(execution); + } + // There's no other nextTicks, we're the last one, so we're about to move on to the next task (likely a timer). + // Now, we can try and execute any queued immediates. + return performWork(execution); + } catch (err) { + // If this error comes from a bail() call, rethrow it. + // typescript can't tell that the state might've been mutated + // and the narrowing from above is no longer valid + const executionAfterWork = execution; + if (executionAfterWork.state === 4) { + throw err; + } + // Otherwise, bail out here (which will trigger an uncaught exception) + // Note that we're using the same microtask trick as `safelyRunNextTickCallback`. + queueMicrotask(()=>{ + bail(execution, Object.defineProperty(new _invarianterror.InvariantError('An unexpected error occurred while executing immediates', { + cause: err + }), "__NEXT_ERROR_CODE", { + value: "E955", + enumerable: false, + configurable: true + })); + }); + } + }); + }); +} +/** Execute one immediate, and schedule a check for more (in case there's others in the queue) */ function performWork(execution) { + if (execution.state === 4) { + return; + } + debug == null ? void 0 : debug(`scheduler :: performing work`); + if (execution.state !== 1) { + throw Object.defineProperty(new _invarianterror.InvariantError(`performWork can only be called while waiting (state: ${ExecutionState[execution.state]})`), "__NEXT_ERROR_CODE", { + value: "E956", + enumerable: false, + configurable: true + }); + } + execution.state = 2; + const queueItem = takeNextActiveQueueItem(execution); + if (queueItem === null) { + debug == null ? void 0 : debug(`scheduler :: no immediates queued, exiting`); + stopCapturingImmediates(execution); + return; + } + debug == null ? void 0 : debug(`scheduler :: executing queued immediate`); + const { immediateObject, callback, args } = queueItem; + immediateObject[INTERNALS].queueItem = null; + clearQueueItem(queueItem); + // Execute the immediate. + // If a sync error was thrown in the immediate, we want to trigger a `uncaughtException`. + // However, we're executing in a nextTick, and if a nextTick callback errors, + // It'll break out of `processTicksAndRejections` (note the lack of a `catch` block): + // https://github.com/nodejs/node/blob/d546e7fd0bc3cbb4bcc2baae6f3aa44d2e81a413/lib/internal/process/task_queues.js#L81-L97 + // Meaning that the event loop will stop executing nextTicks and move on to the next timer + // (or other phase of the event loop, but we expect to be running in a sequence of timers here). + // Then, the remaining ticks will run after that timer, since they're still in the queue. + // + // This would completely break the timing we're trying to achieve here -- + // The point of this patch is to execute immediates before the next timer! + // So, we need to work around this behavior. (both here and in our `process.nextTick` patch). + // + // We can sidestep this by catching the synchronous error and rethrowing it in a microtask. + // (NOTE: if we use `queueMicrotask`, it'll trigger `uncaughtException`, not `unhandledRejection`, + // because there's no promise being rejected.) + // + // This will make `uncaughtException` happen: + // - Before the next fast immediate (`scheduleWorkAfterNextTicksAndMicrotasks` also uses `queueMicrotask`). + // This is good, and matches usual observable behavior of immediates. + // - AFTER nextTicks scheduled from the immediate itself. + // This deviates from native setImmediate, which would call `uncaughtException` first, + // and skip ahead to the next task as explained above. + // + // This is technically an observable difference in behavior, but it seems niche enough that + // it shouldn't cause problems -- we don't expect user code to use `uncaughtException` for control flow, + // only error reporting, so subtly changing the timing shouldn't matter. + let didThrow = false; + let thrownValue = undefined; + queueMicrotask(()=>{ + if (didThrow) { + debug == null ? void 0 : debug('scheduler :: rethrowing sync error from immediate in microtask'); + throw thrownValue; + } + }); + try { + if (args !== null) { + callback.apply(null, args); + } else { + callback(); + } + } catch (err) { + // We'll rethrow the error in the microtask above. + didThrow = true; + thrownValue = err; + } + // Schedule the loop again in case there's more immediates after this one. + // Note that we can't just check if the queue is empty now, because new immediates + // might still be scheduled asynchronously, from an upcoming nextTick or microtask. + execution.state = 1; + scheduleWorkAfterNextTicksAndMicrotasks(execution); +} +function takeNextActiveQueueItem(execution) { + // Find the first (if any) queued immediate that wasn't cleared. + // We don't remove immediates from the array when they're cleared, + // so this requires some legwork to exclude (and possibly drop) cleared items. + const { queuedImmediates } = execution; + let firstActiveItem = null; + let firstActiveItemIndex = -1; + for(let i = 0; i < queuedImmediates.length; i++){ + const item = queuedImmediates[i]; + if (!item.isCleared) { + firstActiveItem = item; + firstActiveItemIndex = i; + break; + } + } + if (firstActiveItem === null) { + // We didn't find an active item. + // If the queue isn't empty, then it must only contain cleared items. Empty it. + if (queuedImmediates.length > 0) { + queuedImmediates.length = 0; + } + return null; + } + // Remove all items up to and including `nextActiveItemIndex` from the queue. + // (if it's not the first item, then it must be preceded by cleared items, which we want to drop anyway) + if (firstActiveItemIndex === 0) { + // Fast path - drop the first item + // (`splice` creates a result array for the removed items, so this is more efficient) + queuedImmediates.shift(); + } else { + queuedImmediates.splice(0, firstActiveItemIndex + 1); + } + return firstActiveItem; +} +function startCapturingImmediates() { + if (currentExecution !== null) { + bail(currentExecution, Object.defineProperty(new _invarianterror.InvariantError(`Cannot start capturing immediates again without finishing the previous task (state: ${ExecutionState[currentExecution.state]})`), "__NEXT_ERROR_CODE", { + value: "E954", + enumerable: false, + configurable: true + })); + } + wasEnabledAtLeastOnce = true; + const execution = { + state: 1, + queuedImmediates: [] + }; + currentExecution = execution; + return execution; +} +function stopCapturingImmediates(execution) { + if (execution.state === 4) { + return; + } + // This check enforces that we run performWork at least once before stopping + // to make sure that we've waited for all the nextTicks and microtasks + // that might've scheduled some immediates after sync code. + if (execution.state !== 2) { + throw Object.defineProperty(new _invarianterror.InvariantError(`Cannot stop capturing immediates before execution is finished (state: ${ExecutionState[execution.state]})`), "__NEXT_ERROR_CODE", { + value: "E957", + enumerable: false, + configurable: true + }); + } + execution.state = 3; + if (currentExecution === execution) { + currentExecution = null; + } +} +function bail(execution, error) { + // Reset the state as best we can to prevent further crashes. + // Otherwise, any subsequent call to `DANGEROUSLY_runPendingImmediatesAfterCurrentTask` + // would error, requiring a server restart to fix. + if (currentExecution === execution) { + currentExecution = null; + } + execution.state = 4; + // If we have any queued immediates, schedule them with native `setImmediate` and clear the queue. + // We don't want to skip running them altogether, because that could lead to + // e.g. hanging promises (for `new Promise((resolve) => setImmediate(resolve))`), + // but we're in an inconsistent state and can't run them as fast immediates, + // so this is the next best thing. + for (const queueItem of execution.queuedImmediates){ + if (queueItem.isCleared) { + continue; + } + scheduleQueuedImmediateAsNativeImmediate(queueItem); + } + execution.queuedImmediates.length = 0; + // Don't reset `pendingNextTicks` -- it will reset to 0 on its own as the nextTicks execute. + // If we set it to 0 here while we still have pending ticks, they'd decrement it below 0. + throw error; +} +function scheduleQueuedImmediateAsNativeImmediate(queueItem) { + const { callback, args, immediateObject } = queueItem; + const hasRef = immediateObject[INTERNALS].hasRef; + clearQueueItem(queueItem); + const nativeImmediate = args !== null ? originalSetImmediate(callback, ...args) : originalSetImmediate(callback); + if (!hasRef) { + nativeImmediate.unref(); + } + // Make our fake immediate object proxy all relevant operations + // (clearing, ref(), unref(), hasRef()) to the actual native immediate. + proxyQueuedImmediateToNativeImmediate(immediateObject, nativeImmediate); +} +function clearQueueItem(originalQueueItem) { + const queueItem = originalQueueItem; + queueItem.isCleared = true; + queueItem.callback = null; + queueItem.args = null; + queueItem.immediateObject = null; +} +function patchedNextTick() { + if (currentExecution === null) { + return originalNextTick.apply(null, // @ts-expect-error: this is valid, but typescript doesn't get it + arguments); + } + if (arguments.length === 0 || typeof arguments[0] !== 'function') { + // Let the original nextTick error for invalid arguments + // so that we don't have to mirror the error message. + originalNextTick.apply(null, // @ts-expect-error: explicitly passing arguments that we know are invalid + arguments); + // We expect the above call to throw. If it didn't, something's broken. + bail(currentExecution, Object.defineProperty(new _invarianterror.InvariantError('Expected process.nextTick to reject invalid arguments'), "__NEXT_ERROR_CODE", { + value: "E966", + enumerable: false, + configurable: true + })); + } + debug == null ? void 0 : debug(`scheduler :: process.nextTick called (previous pending: ${pendingNextTicks})`); + const callback = arguments[0]; + const args = arguments.length > 1 ? Array.prototype.slice.call(arguments, 1) : null; + pendingNextTicks += 1; + return originalNextTick(safelyRunNextTickCallback, callback, args); +} +function safelyRunNextTickCallback(callback, args) { + pendingNextTicks -= 1; + debug == null ? void 0 : debug(`scheduler :: process.nextTick executing (still pending: ${pendingNextTicks})`); + // Synchronous errors in nextTick break out of `processTicksAndRejections` and cause us + // to move on to the next timer without having executed the whole nextTick queue, + // which breaks our entire scheduling mechanism. See `performWork` for more details. + try { + if (args !== null) { + callback.apply(null, args); + } else { + callback(); + } + } catch (err) { + // We want to make sure `nextTick` is cheap, so unlike `performWork`, + // we only queue the microtask if an error actually occurs. + // This (observably) changes the timing of `uncaughtException` even more, + // because it'll run after microtasks queued from the nextTick, + // but hopefully this is niche enough to not affect any real world code. + queueMicrotask(()=>{ + debug == null ? void 0 : debug(`scheduler :: rethrowing sync error from nextTick in a microtask`); + throw err; + }); + } +} +function patchedSetImmediate() { + if (currentExecution === null) { + return originalSetImmediate.apply(null, // @ts-expect-error: this is valid, but typescript doesn't get it + arguments); + } + if (arguments.length === 0 || typeof arguments[0] !== 'function') { + // Let the original setImmediate error for invalid arguments + // so that we don't have to mirror the error message. + originalSetImmediate.apply(null, // @ts-expect-error: explicitly passing arguments that we know are invalid + arguments); + // We expect the above call to throw. If it didn't, something's broken. + bail(currentExecution, Object.defineProperty(new _invarianterror.InvariantError('Expected setImmediate to reject invalid arguments'), "__NEXT_ERROR_CODE", { + value: "E965", + enumerable: false, + configurable: true + })); + } + const callback = arguments[0]; + const args = arguments.length > 1 ? Array.prototype.slice.call(arguments, 1) : null; + // Normally, Node would capture and propagate the async context to the immediate. + // We'll be running it on our own queue, so we need to propagate it ourselves. + const callbackWithAsyncContext = (0, _asynclocalstorage.bindSnapshot)(callback); + const immediateObject = new NextImmediate(); + const queueItem = { + isCleared: false, + callback: callbackWithAsyncContext, + args, + immediateObject + }; + currentExecution.queuedImmediates.push(queueItem); + immediateObject[INTERNALS].queueItem = queueItem; + return immediateObject; +} +function patchedSetImmediatePromise(value, options) { + if (currentExecution === null) { + return originalSetImmediatePromisify(value, options); + } + return new Promise((resolve, reject)=>{ + // The abort signal makes the promise reject. + // If it is already aborted, we reject immediately. + const signal = options == null ? void 0 : options.signal; + if (signal && signal.aborted) { + return reject(signal.reason); + } + const immediate = patchedSetImmediate(resolve, value); + // Unref-ing only really has an observable effect if we bail out to a native immediate, + // but we do it for completeness + if ((options == null ? void 0 : options.ref) === false) { + immediate.unref(); + } + if (signal) { + signal.addEventListener('abort', ()=>{ + patchedClearImmediate(immediate); + reject(signal.reason); + }, { + once: true + }); + } + }); +} +patchedSetImmediate[_nodeutil.promisify.custom] = patchedSetImmediatePromise; +const patchedClearImmediate = (immediateObject)=>{ + // NOTE: we defensively check for patched immediates even if we're not + // currently capturing immediates, because the objects returned from + // the patched setImmediate can be kept around for arbitrarily long. + // As an optimization, we only do this if the patch was enabled at least once -- + // otherwise, no patched objects could've been created. + if (wasEnabledAtLeastOnce && immediateObject && typeof immediateObject === 'object' && INTERNALS in immediateObject) { + ; + immediateObject[Symbol.dispose](); + } else { + originalClearImmediate(immediateObject); + } +}; +//======================================================== +const INTERNALS = Symbol.for('next.Immediate.internals'); +function proxyQueuedImmediateToNativeImmediate(immediateObject, nativeImmediate) { + immediateObject[INTERNALS].hasRef = null; + immediateObject[INTERNALS].queueItem = null; + immediateObject[INTERNALS].nativeImmediate = nativeImmediate; +} +/** Implements a shim for the native `Immediate` class returned by `setImmediate` */ class NextImmediate { + hasRef() { + const internals = this[INTERNALS]; + if (internals.queueItem) { + return internals.hasRef; + } else if (internals.nativeImmediate) { + return internals.nativeImmediate.hasRef(); + } else { + // if we're no longer queued (cleared or executed), hasRef is always false + return false; + } + } + ref() { + const internals = this[INTERNALS]; + if (internals.queueItem) { + internals.hasRef = true; + } else if (internals.nativeImmediate) { + internals.nativeImmediate.ref(); + } + return this; + } + unref() { + const internals = this[INTERNALS]; + if (internals.queueItem) { + internals.hasRef = false; + } else if (internals.nativeImmediate) { + internals.nativeImmediate.unref(); + } + return this; + } + /** + * Node invokes `_onImmediate` when an immediate is executed: + * https://github.com/nodejs/node/blob/42d363205715ffa5a4a6d90f4be1311487053d65/lib/internal/timers.js#L504 + * It's visible on the public types, so we want to have it here for parity, but it's a noop. + * */ _onImmediate() {} + [Symbol.dispose]() { + // This is equivalent to `clearImmediate`. + const internals = this[INTERNALS]; + if (internals.queueItem) { + // this is still queued. drop it. + const queueItem = internals.queueItem; + internals.queueItem = null; + clearQueueItem(queueItem); + } else if (internals.nativeImmediate) { + internals.nativeImmediate[Symbol.dispose](); + } + } + constructor(){ + this[INTERNALS] = { + queueItem: null, + hasRef: true, + nativeImmediate: null + }; + } +} +// ========================================== +const debug = process.env.NEXT_DEBUG_IMMEDIATES !== '1' ? undefined : (...args)=>{ + if (process.env.NEXT_RUNTIME === 'edge') { + throw Object.defineProperty(new _invarianterror.InvariantError('Fast setImmediate is not available in the edge runtime.'), "__NEXT_ERROR_CODE", { + value: "E963", + enumerable: false, + configurable: true + }); + } else { + const { inspect } = require('node:util'); + const { writeFileSync } = require('node:fs'); + let logLine = args.map((arg)=>typeof arg === 'string' ? arg : inspect(arg, { + colors: true + })).join(' ') + '\n'; + logLine = '\x1B[2m' + logLine + '\x1B[22m' // styleText('dim', logLine) + ; + writeFileSync(process.stdout.fd, logLine); + } +}; +// ========================================== +install(); + +//# sourceMappingURL=fast-set-immediate.external.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/node-environment-extensions/global-behaviors.js b/build/node_modules/next/dist/server/node-environment-extensions/global-behaviors.js new file mode 100644 index 0000000..80f5595 --- /dev/null +++ b/build/node_modules/next/dist/server/node-environment-extensions/global-behaviors.js @@ -0,0 +1,33 @@ +/** + * Unlike most files in the node-environment-extensions folder this one is not + * an extension itself but it exposes a function to install config based global + * behaviors that should be loaded whenever a Node Server or Node Worker are created. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "installGlobalBehaviors", { + enumerable: true, + get: function() { + return installGlobalBehaviors; + } +}); +const _invarianterror = require("../../shared/lib/invariant-error"); +const _consoledimexternal = require("./console-dim.external"); +function installGlobalBehaviors(config) { + var _config_experimental; + if (process.env.NEXT_RUNTIME === 'edge') { + throw Object.defineProperty(new _invarianterror.InvariantError('Expected not to install Node.js global behaviors in the edge runtime.'), "__NEXT_ERROR_CODE", { + value: "E874", + enumerable: false, + configurable: true + }); + } + if (((_config_experimental = config.experimental) == null ? void 0 : _config_experimental.hideLogsAfterAbort) === true) { + (0, _consoledimexternal.setAbortedLogsStyle)('hidden'); + } else { + (0, _consoledimexternal.setAbortedLogsStyle)('dimmed'); + } +} + +//# sourceMappingURL=global-behaviors.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/node-environment-extensions/io-utils.js b/build/node_modules/next/dist/server/node-environment-extensions/io-utils.js new file mode 100644 index 0000000..a7d9280 --- /dev/null +++ b/build/node_modules/next/dist/server/node-environment-extensions/io-utils.js @@ -0,0 +1,195 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "io", { + enumerable: true, + get: function() { + return io; + } +}); +const _workasyncstorageexternal = require("../app-render/work-async-storage.external"); +const _workunitasyncstorageexternal = require("../app-render/work-unit-async-storage.external"); +const _dynamicrendering = require("../app-render/dynamic-rendering"); +const _invarianterror = require("../../shared/lib/invariant-error"); +const _stagedrendering = require("../app-render/staged-rendering"); +const _runtimereactsexternal = require("../runtime-reacts.external"); +function io(expression, type) { + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + if (!workUnitStore || !workStore) { + return; + } + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-runtime': + { + const prerenderSignal = workUnitStore.controller.signal; + if (prerenderSignal.aborted === false) { + // If the prerender signal is already aborted we don't need to construct + // any stacks because something else actually terminated the prerender. + let message; + switch(type){ + case 'time': + message = `Route "${workStore.route}" used ${expression} before accessing either uncached data (e.g. \`fetch()\`) or Request data (e.g. \`cookies()\`, \`headers()\`, \`connection()\`, and \`searchParams\`). Accessing the current time in a Server Component requires reading one of these data sources first. Alternatively, consider moving this expression into a Client Component or Cache Component. See more info here: https://nextjs.org/docs/messages/next-prerender-current-time`; + break; + case 'random': + message = `Route "${workStore.route}" used ${expression} before accessing either uncached data (e.g. \`fetch()\`) or Request data (e.g. \`cookies()\`, \`headers()\`, \`connection()\`, and \`searchParams\`). Accessing random values synchronously in a Server Component requires reading one of these data sources first. Alternatively, consider moving this expression into a Client Component or Cache Component. See more info here: https://nextjs.org/docs/messages/next-prerender-random`; + break; + case 'crypto': + message = `Route "${workStore.route}" used ${expression} before accessing either uncached data (e.g. \`fetch()\`) or Request data (e.g. \`cookies()\`, \`headers()\`, \`connection()\`, and \`searchParams\`). Accessing random cryptographic values synchronously in a Server Component requires reading one of these data sources first. Alternatively, consider moving this expression into a Client Component or Cache Component. See more info here: https://nextjs.org/docs/messages/next-prerender-crypto`; + break; + default: + throw Object.defineProperty(new _invarianterror.InvariantError('Unknown expression type in abortOnSynchronousPlatformIOAccess.'), "__NEXT_ERROR_CODE", { + value: "E526", + enumerable: false, + configurable: true + }); + } + (0, _dynamicrendering.abortOnSynchronousPlatformIOAccess)(workStore.route, expression, applyOwnerStack(Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + })), workUnitStore); + } + break; + } + case 'prerender-client': + { + const prerenderSignal = workUnitStore.controller.signal; + if (prerenderSignal.aborted === false) { + // If the prerender signal is already aborted we don't need to construct + // any stacks because something else actually terminated the prerender. + let message; + switch(type){ + case 'time': + message = `Route "${workStore.route}" used ${expression} inside a Client Component without a Suspense boundary above it. See more info here: https://nextjs.org/docs/messages/next-prerender-current-time-client`; + break; + case 'random': + message = `Route "${workStore.route}" used ${expression} inside a Client Component without a Suspense boundary above it. See more info here: https://nextjs.org/docs/messages/next-prerender-random-client`; + break; + case 'crypto': + message = `Route "${workStore.route}" used ${expression} inside a Client Component without a Suspense boundary above it. See more info here: https://nextjs.org/docs/messages/next-prerender-crypto-client`; + break; + default: + throw Object.defineProperty(new _invarianterror.InvariantError('Unknown expression type in abortOnSynchronousPlatformIOAccess.'), "__NEXT_ERROR_CODE", { + value: "E526", + enumerable: false, + configurable: true + }); + } + (0, _dynamicrendering.abortOnSynchronousPlatformIOAccess)(workStore.route, expression, applyOwnerStack(Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + })), workUnitStore); + } + break; + } + case 'request': + { + const stageController = workUnitStore.stagedRendering; + if (stageController && stageController.shouldTrackSyncInterrupt()) { + let message; + if (stageController.currentStage === _stagedrendering.RenderStage.Static || stageController.currentStage === _stagedrendering.RenderStage.EarlyStatic) { + switch(type){ + case 'time': + message = `Route "${workStore.route}" used ${expression} before accessing either uncached data (e.g. \`fetch()\`) or Request data (e.g. \`cookies()\`, \`headers()\`, \`connection()\`, and \`searchParams\`). Accessing the current time in a Server Component requires reading one of these data sources first. Alternatively, consider moving this expression into a Client Component or Cache Component. See more info here: https://nextjs.org/docs/messages/next-prerender-current-time`; + break; + case 'random': + message = `Route "${workStore.route}" used ${expression} before accessing either uncached data (e.g. \`fetch()\`) or Request data (e.g. \`cookies()\`, \`headers()\`, \`connection()\`, and \`searchParams\`). Accessing random values synchronously in a Server Component requires reading one of these data sources first. Alternatively, consider moving this expression into a Client Component or Cache Component. See more info here: https://nextjs.org/docs/messages/next-prerender-random`; + break; + case 'crypto': + message = `Route "${workStore.route}" used ${expression} before accessing either uncached data (e.g. \`fetch()\`) or Request data (e.g. \`cookies()\`, \`headers()\`, \`connection()\`, and \`searchParams\`). Accessing random cryptographic values synchronously in a Server Component requires reading one of these data sources first. Alternatively, consider moving this expression into a Client Component or Cache Component. See more info here: https://nextjs.org/docs/messages/next-prerender-crypto`; + break; + default: + throw Object.defineProperty(new _invarianterror.InvariantError('Unknown expression type in abortOnSynchronousPlatformIOAccess.'), "__NEXT_ERROR_CODE", { + value: "E526", + enumerable: false, + configurable: true + }); + } + } else { + // We're in the Runtime stage. + // We only error for Sync IO in the Runtime stage if the route has a runtime prefetch config. + // This check is implemented in `stageController.canSyncInterrupt()` -- + // if runtime prefetching isn't enabled, then we won't get here. + let accessStatement; + let additionalInfoLink; + switch(type){ + case 'time': + accessStatement = 'the current time'; + additionalInfoLink = 'https://nextjs.org/docs/messages/next-prerender-runtime-current-time'; + break; + case 'random': + accessStatement = 'random values synchronously'; + additionalInfoLink = 'https://nextjs.org/docs/messages/next-prerender-runtime-random'; + break; + case 'crypto': + accessStatement = 'random cryptographic values synchronously'; + additionalInfoLink = 'https://nextjs.org/docs/messages/next-prerender-runtime-crypto'; + break; + default: + throw Object.defineProperty(new _invarianterror.InvariantError('Unknown expression type in abortOnSynchronousPlatformIOAccess.'), "__NEXT_ERROR_CODE", { + value: "E526", + enumerable: false, + configurable: true + }); + } + message = `Route "${workStore.route}" used ${expression} before accessing either uncached data (e.g. \`fetch()\`) or awaiting \`connection()\`. When configured for Runtime prefetching, accessing ${accessStatement} in a Server Component requires reading one of these data sources first. Alternatively, consider moving this expression into a Client Component or Cache Component. See more info here: ${additionalInfoLink}`; + } + const syncIOError = applyOwnerStack(Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + })); + stageController.syncInterruptCurrentStageWithReason(syncIOError); + // A build-time validation render uses a 'request' store type, but may be abortable. + // If we're in the second, restarted render of the restart-on-cache miss flow, + // Sync IO is an error, and unlike dev, there's no need to continue the render past the sync IO, + // so we can abort it. + if (workUnitStore.controller && !workUnitStore.controller.signal.aborted) { + workUnitStore.controller.abort(syncIOError); + } + } + break; + } + case 'validation-client': + case 'prerender-ppr': + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } +} +function applyOwnerStack(error) { + // TODO: Instead of stitching the stacks here, we should log the original + // error as-is when it occurs, and let `patchErrorInspect` handle adding the + // owner stack, instead of logging it deferred in the `LogSafely` component + // via `throwIfDisallowedDynamic`. + if (process.env.NODE_ENV !== 'production') { + var _getClientReact_captureOwnerStack, _getClientReact, _getServerReact_captureOwnerStack, _getServerReact; + const ownerStack = ((_getClientReact = (0, _runtimereactsexternal.getClientReact)()) == null ? void 0 : (_getClientReact_captureOwnerStack = _getClientReact.captureOwnerStack) == null ? void 0 : _getClientReact_captureOwnerStack.call(_getClientReact)) ?? ((_getServerReact = (0, _runtimereactsexternal.getServerReact)()) == null ? void 0 : (_getServerReact_captureOwnerStack = _getServerReact.captureOwnerStack) == null ? void 0 : _getServerReact_captureOwnerStack.call(_getServerReact)); + if (ownerStack) { + let stack = ownerStack; + if (error.stack) { + const frames = []; + for (const frame of error.stack.split('\n').slice(1)){ + if (frame.includes('react_stack_bottom_frame')) { + break; + } + frames.push(frame); + } + stack = '\n' + frames.join('\n') + stack; + } + error.stack = error.name + ': ' + error.message + stack; + } + } + return error; +} + +//# sourceMappingURL=io-utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/node-environment-extensions/node-crypto.js b/build/node_modules/next/dist/server/node-environment-extensions/node-crypto.js new file mode 100644 index 0000000..8caa0a5 --- /dev/null +++ b/build/node_modules/next/dist/server/node-environment-extensions/node-crypto.js @@ -0,0 +1,103 @@ +/** + * We extend node:crypto APIs during builds and revalidates to ensure that prerenders don't observe random bytes + * When cacheComponents is enabled. Random bytes are a form of IO even if they resolve synchronously. When cacheComponents is + * enabled we need to ensure that random bytes are excluded from prerenders unless they are cached. + * + * + * The extensions here never error nor alter the underlying return values and thus should be transparent to callers. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +const _ioutils = require("./io-utils"); +if (process.env.NEXT_RUNTIME === 'edge') { +// nothing to patch +} else { + const nodeCrypto = require('node:crypto'); + // require('node:crypto').getRandomValues is an alias for + // crypto.getRandomValues which is extended in web-crypto.tsx + // require('node:crypto').randomUUID is not an alias for crypto.randomUUID + const randomUUIDExpression = "`require('node:crypto').randomUUID()`"; + try { + const _randomUUID = nodeCrypto.randomUUID; + nodeCrypto.randomUUID = function randomUUID() { + (0, _ioutils.io)(randomUUIDExpression, 'random'); + return _randomUUID.apply(this, arguments); + }; + } catch { + console.error(`Failed to install ${randomUUIDExpression} extension. When using \`cacheComponents\` calling this function will not correctly trigger dynamic behavior.`); + } + const randomBytesExpression = "`require('node:crypto').randomBytes(size)`"; + try { + const _randomBytes = nodeCrypto.randomBytes; + // @ts-expect-error -- TODO: tell TS the overloads are preserved + nodeCrypto.randomBytes = function randomBytes() { + if (typeof arguments[1] !== 'function') { + // randomBytes is sync if the second arg is undefined + (0, _ioutils.io)(randomBytesExpression, 'random'); + } + return _randomBytes.apply(this, arguments); + }; + } catch { + console.error(`Failed to install ${randomBytesExpression} extension. When using \`cacheComponents\` calling this function without a callback argument will not correctly trigger dynamic behavior.`); + } + const randomFillSyncExpression = "`require('node:crypto').randomFillSync(...)`"; + try { + const _randomFillSync = nodeCrypto.randomFillSync; + // @ts-expect-error -- TODO: tell TS the overloads are preserved + nodeCrypto.randomFillSync = function randomFillSync() { + (0, _ioutils.io)(randomFillSyncExpression, 'random'); + return _randomFillSync.apply(this, arguments); + }; + } catch { + console.error(`Failed to install ${randomFillSyncExpression} extension. When using \`cacheComponents\` calling this function will not correctly trigger dynamic behavior.`); + } + const randomIntExpression = "`require('node:crypto').randomInt(min, max)`"; + try { + const _randomInt = nodeCrypto.randomInt; + // @ts-expect-error -- TODO: tell TS the overloads are preserved + nodeCrypto.randomInt = function randomInt() { + if (typeof arguments[2] !== 'function') { + // randomInt is sync if the third arg is undefined + (0, _ioutils.io)(randomIntExpression, 'random'); + } + return _randomInt.apply(this, arguments); + }; + } catch { + console.error(`Failed to install ${randomBytesExpression} extension. When using \`cacheComponents\` calling this function without a callback argument will not correctly trigger dynamic behavior.`); + } + const generatePrimeSyncExpression = "`require('node:crypto').generatePrimeSync(...)`"; + try { + const _generatePrimeSync = nodeCrypto.generatePrimeSync; + // @ts-expect-error -- TODO: tell TS the overloads are preserved + nodeCrypto.generatePrimeSync = function generatePrimeSync() { + (0, _ioutils.io)(generatePrimeSyncExpression, 'random'); + return _generatePrimeSync.apply(this, arguments); + }; + } catch { + console.error(`Failed to install ${generatePrimeSyncExpression} extension. When using \`cacheComponents\` calling this function will not correctly trigger dynamic behavior.`); + } + const generateKeyPairSyncExpression = "`require('node:crypto').generateKeyPairSync(...)`"; + try { + const _generateKeyPairSync = nodeCrypto.generateKeyPairSync; + // @ts-expect-error -- TODO: tell TS the overloads are preserved + nodeCrypto.generateKeyPairSync = function generateKeyPairSync() { + (0, _ioutils.io)(generateKeyPairSyncExpression, 'random'); + return _generateKeyPairSync.apply(this, arguments); + }; + } catch { + console.error(`Failed to install ${generateKeyPairSyncExpression} extension. When using \`cacheComponents\` calling this function will not correctly trigger dynamic behavior.`); + } + const generateKeySyncExpression = "`require('node:crypto').generateKeySync(...)`"; + try { + const _generateKeySync = nodeCrypto.generateKeySync; + nodeCrypto.generateKeySync = function generateKeySync() { + (0, _ioutils.io)(generateKeySyncExpression, 'random'); + return _generateKeySync.apply(this, arguments); + }; + } catch { + console.error(`Failed to install ${generateKeySyncExpression} extension. When using \`cacheComponents\` calling this function will not correctly trigger dynamic behavior.`); + } +} + +//# sourceMappingURL=node-crypto.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/node-environment-extensions/process-error-handlers.js b/build/node_modules/next/dist/server/node-environment-extensions/process-error-handlers.js new file mode 100644 index 0000000..5130b9b --- /dev/null +++ b/build/node_modules/next/dist/server/node-environment-extensions/process-error-handlers.js @@ -0,0 +1,91 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "installProcessErrorHandlers", { + enumerable: true, + get: function() { + return installProcessErrorHandlers; + } +}); +const _ispostpone = require("../lib/router-utils/is-postpone"); +let _global = globalThis; +function installProcessErrorHandlers(shouldRemoveUncaughtErrorAndRejectionListeners) { + if (_global.nextInitializedProcessErrorHandlers) return; + _global.nextInitializedProcessErrorHandlers = true; + // The conventional wisdom of Node.js and other runtimes is to treat + // unhandled errors as fatal and exit the process. + // + // But Next.js is not a generic JS runtime — it's a specialized runtime for + // React Server Components. + // + // Many unhandled rejections are due to the late-awaiting pattern for + // prefetching data. In Next.js it's OK to call an async function without + // immediately awaiting it, to start the request as soon as possible + // without blocking unncessarily on the result. These can end up + // triggering an "unhandledRejection" if it later turns out that the + // data is not needed to render the page. Example: + // + // const promise = fetchData() + // const shouldShow = await checkCondition() + // if (shouldShow) { + // return + // } + // + // In this example, `fetchData` is called immediately to start the request + // as soon as possible, but if `shouldShow` is false, then it will be + // discarded without unwrapping its result. If it errors, it will trigger + // an "unhandledRejection" event. + // + // Ideally, we would suppress these rejections completely without warning, + // because we don't consider them real errors. (TODO: Currently we do warn.) + // + // But regardless of whether we do or don't warn, we definitely shouldn't + // crash the entire process. + // + // Even a "legit" unhandled error unrelated to prefetching shouldn't + // prevent the rest of the page from rendering. + // + // So, we're going to intentionally override the default error handling + // behavior of the outer JS runtime to be more forgiving + // Remove any existing "unhandledRejection" and "uncaughtException" handlers. + // This is gated behind an experimental flag until we've considered the impact + // in various deployment environments. It's possible this may always need to + // be configurable. + if (shouldRemoveUncaughtErrorAndRejectionListeners) { + process.removeAllListeners('uncaughtException'); + process.removeAllListeners('unhandledRejection'); + } + // Install a new handler to prevent the process from crashing. + process.on('unhandledRejection', (reason)=>{ + if ((0, _ispostpone.isPostpone)(reason)) { + // React postpones that are unhandled might end up logged here but they're + // not really errors. They're just part of rendering. + return; + } + // Immediately log the error. + // TODO: Ideally, if we knew that this error was triggered by application + // code, we would suppress it entirely without logging. We can't reliably + // detect all of these, but when cacheComponents is enabled, we could suppress + // at least some of them by waiting to log the error until after all in- + // progress renders have completed. Then, only log errors for which there + // was not a corresponding "rejectionHandled" event. + console.error(reason); + }); + process.on('rejectionHandled', ()=>{ + // TODO: See note in the unhandledRejection handler above. In the future, + // we may use the "rejectionHandled" event to de-queue an error from + // being logged. + }); + // Unhandled exceptions are errors triggered by non-async functions, so this + // is unrelated to the late-awaiting pattern. However, for similar reasons, + // we still shouldn't crash the process. Just log it. + process.on('uncaughtException', (reason)=>{ + if ((0, _ispostpone.isPostpone)(reason)) { + return; + } + console.error(reason); + }); +} + +//# sourceMappingURL=process-error-handlers.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/node-environment-extensions/random.js b/build/node_modules/next/dist/server/node-environment-extensions/random.js new file mode 100644 index 0000000..ed236a0 --- /dev/null +++ b/build/node_modules/next/dist/server/node-environment-extensions/random.js @@ -0,0 +1,28 @@ +/** + * We extend Math.random() during builds and revalidates to ensure that prerenders don't observe randomness + * When cacheComponents is enabled. randomness is a form of IO even though it resolves synchronously. When cacheComponents is + * enabled we need to ensure that randomness is excluded from prerenders. + * + * The extensions here never error nor alter the random generation itself and thus should be transparent to callers. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +const _ioutils = require("./io-utils"); +const expression = '`Math.random()`'; +try { + const _random = Math.random; + Math.random = (function random() { + (0, _ioutils.io)(expression, 'random'); + return _random.apply(null, arguments); + // We bind here to alter the `toString` printing to match `Math.random`'s native `toString`. + // eslint-disable-next-line no-extra-bind + }).bind(null); + Object.defineProperty(Math.random, 'name', { + value: 'random' + }); +} catch { + console.error(`Failed to install ${expression} extension. When using \`cacheComponents\` calling this function will not correctly trigger dynamic behavior.`); +} + +//# sourceMappingURL=random.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.js b/build/node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.js new file mode 100644 index 0000000..73193b5 --- /dev/null +++ b/build/node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.js @@ -0,0 +1,508 @@ +/** + * Manages unhandled rejection listeners to intelligently filter rejections + * from aborted prerenders when cache components are enabled. + * + * THE PROBLEM: + * When we abort prerenders we expect to find numerous unhandled promise rejections due to + * things like awaiting Request data like `headers()`. The rejections are fine and should + * not be construed as problematic so we need to avoid the appearance of a problem by + * omitting them from the logged output. + * + * THE STRATEGY: + * 1. Install a filtering unhandled rejection handler + * 2. Intercept process event methods to capture new handlers in our internal queue + * 3. For each rejection, check if it comes from an aborted prerender context + * 4. If yes, suppress it. If no, delegate to all handlers in our queue + * 5. This provides precise filtering without time-based windows + * + * This ensures we suppress noisy prerender-related rejections while preserving + * normal error logging for genuine unhandled rejections. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +const _workunitasyncstorageexternal = require("../app-render/work-unit-async-storage.external"); +const MODE = process.env.NEXT_UNHANDLED_REJECTION_FILTER; +let ENABLE_UHR_FILTER = true; +let UHR_FILTER_LOG_LEVEL = 'warn'; +switch(MODE){ + case 'silent': + UHR_FILTER_LOG_LEVEL = 'silent'; + break; + case 'debug': + UHR_FILTER_LOG_LEVEL = 'debug'; + break; + case 'false': + case 'disabled': + case '0': + ENABLE_UHR_FILTER = false; + break; + case '': + case undefined: + case 'enabled': + case 'true': + case '1': + break; + default: + if (typeof MODE === 'string') { + console.error(`NEXT_UNHANDLED_REJECTION_FILTER has an unrecognized value: ${JSON.stringify(MODE)}. Use "enabled", "disabled", "silent", or "debug", or omit the environment variable altogether`); + } +} +let debug; +let debugWithTrace; +let warn; +let warnWithTrace; +switch(UHR_FILTER_LOG_LEVEL){ + case 'debug': + debug = (message)=>console.log('[Next.js Unhandled Rejection Filter]: ' + message); + debugWithTrace = (message)=>{ + console.log(new DebugWithStack(message)); + }; + // Intentional fallthrough + case 'warn': + warn = (message)=>{ + console.warn('[Next.js Unhandled Rejection Filter]: ' + message); + }; + warnWithTrace = (message)=>{ + console.warn(new WarnWithStack(message)); + }; + break; + case 'silent': + default: +} +class DebugWithStack extends Error { + constructor(message){ + super(message); + this.name = '[Next.js Unhandled Rejection Filter]'; + } +} +class WarnWithStack extends Error { + constructor(message){ + super(message); + this.name = '[Next.js Unhandled Rejection Filter]'; + } +} +let didWarnUninstalled = false; +const warnUninstalledOnce = warn ? function warnUninstalledOnce(...args) { + if (!didWarnUninstalled) { + didWarnUninstalled = true; + warn(...args); + } +} : undefined; +// We use a global symbol to detect if the filter has already been installed. +// If two instances of this module are loaded, each captures the other's handler +// as an underlying listener, creating mutual recursion that overflows the stack. +// We error defensively rather than silently degrading. +const FILTER_INSTALLED_KEY = Symbol.for('next.unhandledRejectionFilter'); +let filterInstalled = false; +// We store the proxied listeners for unhandled rejections here. +let underlyingListeners = []; +// We store a unique pointer to each event listener registration to track +// details like whether the listener is a once listener. +let listenerMetadata = []; +// These methods are used to restore the original implementations when uninstalling the patch +let originalProcessAddListener; +let originalProcessRemoveListener; +let originalProcessOn; +let originalProcessOff; +let originalProcessPrependListener; +let originalProcessOnce; +let originalProcessPrependOnceListener; +let originalProcessRemoveAllListeners; +let originalProcessListeners; +// Some of these base methods call others and we don't want them to call the patched version so we +// need a way to synchronously disable the patch temporarily. +let bypassPatch = false; +// This patch ensures that if any patched methods end up calling other methods internally they will +// bypass the patch during their execution. This is important for removeAllListeners in particular +// because it calls removeListener internally and we want to ensure it actually clears the listeners +// from the process queue and not our private queue. +function patchWithoutReentrancy(original, patchedImpl) { + // Produce a function which has the correct name + const patched = { + [original.name]: function(...args) { + if (bypassPatch) { + return Reflect.apply(original, process, args); + } + const previousBypassPatch = bypassPatch; + bypassPatch = true; + try { + return Reflect.apply(patchedImpl, process, args); + } finally{ + bypassPatch = previousBypassPatch; + } + } + }[original.name]; + // Preserve the original toString behavior + Object.defineProperty(patched, 'toString', { + value: original.toString.bind(original), + writable: true, + configurable: true + }); + return patched; +} +const MACGUFFIN_EVENT = 'Next.UnhandledRejectionFilter.MacguffinEvent'; +/** + * Installs a filtering unhandled rejection handler that intelligently suppresses + * rejections from aborted prerender contexts. + * + * This should be called once during server startup to install the global filter. + */ function installUnhandledRejectionFilter() { + if (globalThis[FILTER_INSTALLED_KEY] || filterInstalled) { + // Already installed by another evaluation of this module in the same + // process (e.g., Jest's module system re-evaluating an already-loaded + // module). Safe to skip since the filter is already active. + return; + } + debug == null ? void 0 : debug('Installing Filter'); + // Capture existing handlers + underlyingListeners = Array.from(process.listeners('unhandledRejection')); + // We assume all existing handlers are not "once" + listenerMetadata = underlyingListeners.map((l)=>({ + listener: l, + once: false + })); + // Remove all existing handlers + process.removeAllListeners('unhandledRejection'); + // Install our filtering handler + process.addListener('unhandledRejection', filteringUnhandledRejectionHandler); + // Store the original process methods + originalProcessAddListener = process.addListener; + originalProcessRemoveListener = process.removeListener; + originalProcessOn = process.on; + originalProcessOff = process.off; + originalProcessPrependListener = process.prependListener; + originalProcessOnce = process.once; + originalProcessPrependOnceListener = process.prependOnceListener; + originalProcessRemoveAllListeners = process.removeAllListeners; + originalProcessListeners = process.listeners; + process.addListener = patchWithoutReentrancy(originalProcessAddListener, function(event, listener) { + if (event === 'unhandledRejection') { + debugWithTrace == null ? void 0 : debugWithTrace(`Appending 'unhandledRejection' listener with name \`${listener.name}\`.`); + // We add the listener to a dummy event in case it throws. We don't catch it intentionally + try { + originalProcessAddListener.call(process, MACGUFFIN_EVENT, listener); + } finally{ + // We clean up the added event + originalProcessRemoveAllListeners.call(process, MACGUFFIN_EVENT); + } + // Add new handlers to our internal queue instead of the process + underlyingListeners.push(listener); + listenerMetadata.push({ + listener, + once: false + }); + return process; + } + // For other events, use the original method + return originalProcessAddListener.call(process, event, listener); + }); + // Intercept process.removeListener (alias for process.off) + process.removeListener = patchWithoutReentrancy(originalProcessRemoveListener, function(event, listener) { + if (event === 'unhandledRejection') { + // Check if they're trying to remove our filtering handler + if (listener === filteringUnhandledRejectionHandler) { + warnUninstalledOnce == null ? void 0 : warnUninstalledOnce(`Uninstalling filter because \`process.removeListener('unhandledRejection', listener)\` was called with the filter listener. Uninstalling this filter is not recommended and will cause you to observe 'unhandledRejection' events related to intentionally aborted prerenders. + +You can silence warnings related to this behavior by running Next.js with \`NEXT_UNHANDLED_REJECTION_FILTER=silent\` environment variable. + +You can debug event listener operations by running Next.js with \`NEXT_UNHANDLED_REJECTION_FILTER=debug\` environment variable.`); + uninstallUnhandledRejectionFilter(); + return process; + } + debugWithTrace == null ? void 0 : debugWithTrace(`Removing 'unhandledRejection' listener with name \`${listener.name}\`.`); + // We remove the listener on a dummy event in case it throws. We don't catch it intentionally + originalProcessRemoveListener.call(process, MACGUFFIN_EVENT, listener); + const index = underlyingListeners.lastIndexOf(listener); + if (index > -1) { + debug == null ? void 0 : debug(`listener found index ${index} and removed.`); + underlyingListeners.splice(index, 1); + listenerMetadata.splice(index, 1); + } else { + debug == null ? void 0 : debug(`listener not found.`); + } + return process; + } + // For other events, use the original method + return originalProcessRemoveListener.call(process, event, listener); + }); + // If the process.on is referentially process.addListener then share the patched version as well + if (originalProcessOn === originalProcessAddListener) { + process.on = process.addListener; + } else { + process.on = patchWithoutReentrancy(originalProcessOn, function(event, listener) { + if (event === 'unhandledRejection') { + debugWithTrace == null ? void 0 : debugWithTrace(`Appending 'unhandledRejection' listener with name \`${listener.name}\`.`); + // We add the listener to a dummy event in case it throws. We don't catch it intentionally + try { + originalProcessOn.call(process, MACGUFFIN_EVENT, listener); + } finally{ + // We clean up the added event + originalProcessRemoveAllListeners.call(process, MACGUFFIN_EVENT); + } + // Add new handlers to our internal queue instead of the process + underlyingListeners.push(listener); + listenerMetadata.push({ + listener, + once: false + }); + return process; + } + // For other events, use the original method + return originalProcessOn.call(process, event, listener); + }); + } + // If the process.off is referentially process.addListener then share the patched version as well + if (originalProcessOff === originalProcessRemoveListener) { + process.off = process.removeListener; + } else { + process.off = patchWithoutReentrancy(originalProcessOff, function(event, listener) { + if (event === 'unhandledRejection') { + // Check if they're trying to remove our filtering handler + if (listener === filteringUnhandledRejectionHandler) { + warnUninstalledOnce == null ? void 0 : warnUninstalledOnce(`Uninstalling filter because \`process.off('unhandledRejection', listener)\` was called with the filter listener. Uninstalling this filter is not recommended and will cause you to observe 'unhandledRejection' events related to intentionally aborted prerenders. + +You can silence warnings related to this behavior by running Next.js with \`NEXT_UNHANDLED_REJECTION_FILTER=silent\` environment variable. + +You can debug event listener operations by running Next.js with \`NEXT_UNHANDLED_REJECTION_FILTER=debug\` environment variable.`); + uninstallUnhandledRejectionFilter(); + return process; + } + debugWithTrace == null ? void 0 : debugWithTrace(`Removing 'unhandledRejection' listener with name \`${listener.name}\`.`); + // We remove the listener on a dummy event in case it throws. We don't catch it intentionally + originalProcessOff.call(process, MACGUFFIN_EVENT, listener); + const index = underlyingListeners.lastIndexOf(listener); + if (index > -1) { + debug == null ? void 0 : debug(`listener found index ${index} and removed.`); + underlyingListeners.splice(index, 1); + listenerMetadata.splice(index, 1); + } else { + debug == null ? void 0 : debug(`listener not found.`); + } + return process; + } + // For other events, use the original method + return originalProcessOff.call(process, event, listener); + }); + } + // Intercept process.prependListener for handlers that should go first + process.prependListener = patchWithoutReentrancy(originalProcessPrependListener, function(event, listener) { + if (event === 'unhandledRejection') { + debugWithTrace == null ? void 0 : debugWithTrace(`(Prepending) Inserting 'unhandledRejection' listener with name \`${listener.name}\` immediately following the Next.js 'unhandledRejection' filter listener.`); + // We add the listener to a dummy event in case it throws. We don't catch it intentionally + try { + originalProcessPrependListener.call(process, MACGUFFIN_EVENT, listener); + } finally{ + // We clean up the added event + originalProcessRemoveAllListeners.call(process, MACGUFFIN_EVENT); + } + // Add new handlers to the beginning of our internal queue + underlyingListeners.unshift(listener); + listenerMetadata.unshift({ + listener, + once: false + }); + return process; + } + // For other events, use the original method + return originalProcessPrependListener.call(process, event, listener); + }); + // Intercept process.once for one-time handlers + process.once = patchWithoutReentrancy(originalProcessOnce, function(event, listener) { + if (event === 'unhandledRejection') { + debugWithTrace == null ? void 0 : debugWithTrace(`Appending 'unhandledRejection' once-listener with name \`${listener.name}\`.`); + // We add the listener to a dummy event in case it throws. We don't catch it intentionally + try { + originalProcessOnce.call(process, MACGUFFIN_EVENT, listener); + } finally{ + // We clean up the added event + originalProcessRemoveAllListeners.call(process, MACGUFFIN_EVENT); + } + underlyingListeners.push(listener); + listenerMetadata.push({ + listener: listener, + once: true + }); + return process; + } + // For other events, use the original method + return originalProcessOnce.call(process, event, listener); + }); + // Intercept process.prependOnceListener for one-time handlers that should go first + process.prependOnceListener = patchWithoutReentrancy(originalProcessPrependOnceListener, function(event, listener) { + if (event === 'unhandledRejection') { + debugWithTrace == null ? void 0 : debugWithTrace(`(Prepending) Inserting 'unhandledRejection' once-listener with name \`${listener.name}\` immediately following the Next.js 'unhandledRejection' filter listener.`); + // We add the listener to a dummy event in case it throws. We don't catch it intentionally + try { + originalProcessPrependOnceListener.call(process, MACGUFFIN_EVENT, listener); + } finally{ + // We clean up the added event + originalProcessRemoveAllListeners.call(process, MACGUFFIN_EVENT); + } + // Add to the beginning of our internal queue + underlyingListeners.unshift(listener); + listenerMetadata.unshift({ + listener: listener, + once: true + }); + return process; + } + // For other events, use the original method + return originalProcessPrependOnceListener.call(process, event, listener); + }); + // Intercept process.removeAllListeners + process.removeAllListeners = patchWithoutReentrancy(originalProcessRemoveAllListeners, function(event) { + if (event === 'unhandledRejection') { + // TODO add warning for this case once we stop importing this in test scopes automatically. Currently + // we pull this file in whenever build/utils.tsx is imported which is not the right layering. + // The extensions should be loaded from entrypoints like build/index or next-server + // warnRemoveAllOnce?.( + // `\`process.removeAllListeners('unhandledRejection')\` was called. Next.js maintains the first 'unhandledRejection' listener to filter out unnecessary rejection warnings caused by aborting prerenders early. It is not recommended that you uninstall this behavior, but if you want to you must you can acquire the listener with \`process.listeners('unhandledRejection')[0]\` and remove it with \`process.removeListener('unhandledRejection', listener)\`. + // You can silence warnings related to this behavior by running Next.js with \`NEXT_UNHANDLED_REJECTION_FILTER=silent\` environment variable. + // You can debug event listener operations by running Next.js with \`NEXT_UNHANDLED_REJECTION_FILTER=debug\` environment variable.` + // ) + debugWithTrace == null ? void 0 : debugWithTrace(`Removing all 'unhandledRejection' listeners except for the Next.js filter.`); + underlyingListeners.length = 0; + listenerMetadata.length = 0; + return process; + } + // For other specific events, use the original method + if (event !== undefined) { + return originalProcessRemoveAllListeners.call(process, event); + } + // If no event specified (removeAllListeners()), uninstall our patch completely + warnUninstalledOnce == null ? void 0 : warnUninstalledOnce(`Uninstalling filter because \`process.removeAllListeners()\` was called. Uninstalling this filter is not recommended and will cause you to observe 'unhandledRejection' events related to intentionally aborted prerenders. + +You can silence warnings related to this behavior by running Next.js with \`NEXT_UNHANDLED_REJECTION_FILTER=silent\` environment variable. + +You can debug event listener operations by running Next.js with \`NEXT_UNHANDLED_REJECTION_FILTER=debug\` environment variable.`); + uninstallUnhandledRejectionFilter(); + return originalProcessRemoveAllListeners.call(process); + }); + // Intercept process.listeners to return our internal handlers for unhandled rejection + process.listeners = patchWithoutReentrancy(originalProcessListeners, function(event) { + if (event === 'unhandledRejection') { + debugWithTrace == null ? void 0 : debugWithTrace(`Retrieving all 'unhandledRejection' listeners.`); + return [ + filteringUnhandledRejectionHandler, + ...underlyingListeners + ]; + } + return originalProcessListeners.call(process, event); + }); + filterInstalled = true; + globalThis[FILTER_INSTALLED_KEY] = true; +} +/** + * Uninstalls the unhandled rejection filter and restores original process methods. + * This is called when someone explicitly removes our filtering handler. + * @internal + */ function uninstallUnhandledRejectionFilter() { + if (!filterInstalled) { + warnWithTrace == null ? void 0 : warnWithTrace('Unexpected subsequent filter uninstallation. This is a bug in Next.js'); + return; + } + debug == null ? void 0 : debug('Uninstalling Filter'); + // Restore original process methods + process.on = originalProcessOn; + process.addListener = originalProcessAddListener; + process.once = originalProcessOnce; + process.prependListener = originalProcessPrependListener; + process.prependOnceListener = originalProcessPrependOnceListener; + process.removeListener = originalProcessRemoveListener; + process.off = originalProcessOff; + process.removeAllListeners = originalProcessRemoveAllListeners; + process.listeners = originalProcessListeners; + // Remove our filtering handler + process.removeListener('unhandledRejection', filteringUnhandledRejectionHandler); + // Re-register all the handlers that were in our internal queue + for (const meta of listenerMetadata){ + if (meta.once) { + process.once('unhandledRejection', meta.listener); + } else { + process.addListener('unhandledRejection', meta.listener); + } + } + // Reset state + filterInstalled = false; + underlyingListeners.length = 0; + listenerMetadata.length = 0; +} +/** + * The filtering handler that decides whether to suppress or delegate unhandled rejections. + */ let handlingRejection = false; +function filteringUnhandledRejectionHandler(reason, promise) { + if (handlingRejection) { + // An underlying listener synchronously re-emitted 'unhandledRejection'. + // Re-entering the listener loop would overflow the stack. + return; + } + const capturedListenerMetadata = Array.from(listenerMetadata); + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-runtime': + { + const signal = workUnitStore.renderSignal; + if (signal.aborted) { + // This unhandledRejection is from async work spawned in a now + // aborted prerender. We don't need to report this. + return; + } + break; + } + case 'prerender-ppr': + case 'prerender-legacy': + case 'request': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + // Not from an aborted prerender, delegate to original handlers + if (capturedListenerMetadata.length === 0) { + // We need to log something because the default behavior when there is + // no event handler installed is to trigger an Unhandled Exception. + // We don't do that here b/c we don't want to rely on this implicit default + // to kill the process since it can be disabled by installing a userland listener + // and you may also choose to run Next.js with args such that unhandled rejections + // do not automatically terminate the process. + console.error('Unhandled Rejection:', reason); + } else { + handlingRejection = true; + try { + for (const meta of capturedListenerMetadata){ + if (meta.once) { + // This is a once listener. we remove it from our set before we call it + const index = listenerMetadata.indexOf(meta); + if (index !== -1) { + underlyingListeners.splice(index, 1); + listenerMetadata.splice(index, 1); + } + } + const listener = meta.listener; + listener(reason, promise); + } + } catch (error) { + // If any handlers error we produce an Uncaught Exception + setImmediate(()=>{ + throw error; + }); + } finally{ + handlingRejection = false; + } + } +} +// Install the filter when this module is imported +if (ENABLE_UHR_FILTER) { + installUnhandledRejectionFilter(); +} + +//# sourceMappingURL=unhandled-rejection.external.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/node-environment-extensions/web-crypto.js b/build/node_modules/next/dist/server/node-environment-extensions/web-crypto.js new file mode 100644 index 0000000..6f00b75 --- /dev/null +++ b/build/node_modules/next/dist/server/node-environment-extensions/web-crypto.js @@ -0,0 +1,45 @@ +/** + * We extend Web Crypto APIs during builds and revalidates to ensure that prerenders don't observe random bytes + * When cacheComponents is enabled. Random bytes are a form of IO even if they resolve synchronously. When cacheComponents is + * enabled we need to ensure that random bytes are excluded from prerenders unless they are cached. + * + * + * The extensions here never error nor alter the underlying return values and thus should be transparent to callers. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +const _ioutils = require("./io-utils"); +let webCrypto; +if (process.env.NEXT_RUNTIME === 'edge') { + webCrypto = crypto; +} else { + if (typeof crypto === 'undefined') { + // @ts-expect-error -- TODO: Is this actually safe? + webCrypto = require('node:crypto').webcrypto; + } else { + webCrypto = crypto; + } +} +const getRandomValuesExpression = '`crypto.getRandomValues()`'; +try { + const _getRandomValues = webCrypto.getRandomValues; + webCrypto.getRandomValues = function getRandomValues() { + (0, _ioutils.io)(getRandomValuesExpression, 'crypto'); + return _getRandomValues.apply(webCrypto, arguments); + }; +} catch { + console.error(`Failed to install ${getRandomValuesExpression} extension. When using \`cacheComponents\` calling this function will not correctly trigger dynamic behavior.`); +} +const randomUUIDExpression = '`crypto.randomUUID()`'; +try { + const _randomUUID = webCrypto.randomUUID; + webCrypto.randomUUID = function randomUUID() { + (0, _ioutils.io)(randomUUIDExpression, 'crypto'); + return _randomUUID.apply(webCrypto, arguments); + }; +} catch { + console.error(`Failed to install ${getRandomValuesExpression} extension. When using \`cacheComponents\` calling this function will not correctly trigger dynamic behavior.`); +} + +//# sourceMappingURL=web-crypto.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/node-environment.js b/build/node_modules/next/dist/server/node-environment.js new file mode 100644 index 0000000..e8492da --- /dev/null +++ b/build/node_modules/next/dist/server/node-environment.js @@ -0,0 +1,19 @@ +// This file should be imported before any others. It sets up the environment +// for later imports to work properly. +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +require("./node-environment-baseline"); +require("./node-environment-extensions/error-inspect"); +require("./node-environment-extensions/console-file"); +require("./node-environment-extensions/console-exit"); +require("./node-environment-extensions/console-dim.external"); +require("./node-environment-extensions/unhandled-rejection.external"); +require("./node-environment-extensions/random"); +require("./node-environment-extensions/date"); +require("./node-environment-extensions/web-crypto"); +require("./node-environment-extensions/node-crypto"); +require("./node-environment-extensions/fast-set-immediate.external"); + +//# sourceMappingURL=node-environment.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/node-polyfill-crypto.js b/build/node_modules/next/dist/server/node-polyfill-crypto.js new file mode 100644 index 0000000..2b8e3f4 --- /dev/null +++ b/build/node_modules/next/dist/server/node-polyfill-crypto.js @@ -0,0 +1,21 @@ +// Polyfill crypto() in the Node.js environment +"use strict"; +if (!global.crypto) { + let webcrypto; + Object.defineProperty(global, 'crypto', { + enumerable: false, + configurable: true, + get () { + if (!webcrypto) { + // @ts-expect-error -- TODO: Is this actually safe? + webcrypto = require('node:crypto').webcrypto; + } + return webcrypto; + }, + set (value) { + webcrypto = value; + } + }); +} + +//# sourceMappingURL=node-polyfill-crypto.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/normalizers/absolute-filename-normalizer.js b/build/node_modules/next/dist/server/normalizers/absolute-filename-normalizer.js new file mode 100644 index 0000000..0c7d142 --- /dev/null +++ b/build/node_modules/next/dist/server/normalizers/absolute-filename-normalizer.js @@ -0,0 +1,33 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "AbsoluteFilenameNormalizer", { + enumerable: true, + get: function() { + return AbsoluteFilenameNormalizer; + } +}); +const _absolutepathtopage = require("../../shared/lib/page-path/absolute-path-to-page"); +class AbsoluteFilenameNormalizer { + /** + * + * @param dir the directory for which the files should be made relative to + * @param extensions the extensions the file could have + * @param keepIndex when `true` the trailing `/index` is _not_ removed + */ constructor(dir, extensions, pagesType){ + this.dir = dir; + this.extensions = extensions; + this.pagesType = pagesType; + } + normalize(filename) { + return (0, _absolutepathtopage.absolutePathToPage)(filename, { + extensions: this.extensions, + keepIndex: false, + dir: this.dir, + pagesType: this.pagesType + }); + } +} + +//# sourceMappingURL=absolute-filename-normalizer.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/normalizers/built/app/app-bundle-path-normalizer.js b/build/node_modules/next/dist/server/normalizers/built/app/app-bundle-path-normalizer.js new file mode 100644 index 0000000..3ef12f9 --- /dev/null +++ b/build/node_modules/next/dist/server/normalizers/built/app/app-bundle-path-normalizer.js @@ -0,0 +1,54 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + AppBundlePathNormalizer: null, + DevAppBundlePathNormalizer: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + AppBundlePathNormalizer: function() { + return AppBundlePathNormalizer; + }, + DevAppBundlePathNormalizer: function() { + return DevAppBundlePathNormalizer; + } +}); +const _normalizers = require("../../normalizers"); +const _prefixingnormalizer = require("../../prefixing-normalizer"); +const _normalizepagepath = require("../../../../shared/lib/page-path/normalize-page-path"); +const _underscorenormalizer = require("../../underscore-normalizer"); +class AppBundlePathNormalizer extends _prefixingnormalizer.PrefixingNormalizer { + constructor(){ + super('app'); + } + normalize(page) { + return super.normalize((0, _normalizepagepath.normalizePagePath)(page)); + } +} +class DevAppBundlePathNormalizer extends _normalizers.Normalizers { + constructor(pageNormalizer, isTurbopack){ + const normalizers = [ + // This should normalize the filename to a page. + pageNormalizer, + // Normalize the app page to a pathname. + new AppBundlePathNormalizer() + ]; + // %5F to _ replacement should only happen with Turbopack. + if (isTurbopack) { + normalizers.unshift(new _underscorenormalizer.UnderscoreNormalizer()); + } + super(normalizers); + } + normalize(filename) { + return super.normalize(filename); + } +} + +//# sourceMappingURL=app-bundle-path-normalizer.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/normalizers/built/app/app-filename-normalizer.js b/build/node_modules/next/dist/server/normalizers/built/app/app-filename-normalizer.js new file mode 100644 index 0000000..9685375 --- /dev/null +++ b/build/node_modules/next/dist/server/normalizers/built/app/app-filename-normalizer.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "AppFilenameNormalizer", { + enumerable: true, + get: function() { + return AppFilenameNormalizer; + } +}); +const _constants = require("../../../../shared/lib/constants"); +const _prefixingnormalizer = require("../../prefixing-normalizer"); +class AppFilenameNormalizer extends _prefixingnormalizer.PrefixingNormalizer { + constructor(distDir){ + super(distDir, _constants.SERVER_DIRECTORY); + } + normalize(manifestFilename) { + return super.normalize(manifestFilename); + } +} + +//# sourceMappingURL=app-filename-normalizer.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/normalizers/built/app/app-page-normalizer.js b/build/node_modules/next/dist/server/normalizers/built/app/app-page-normalizer.js new file mode 100644 index 0000000..88c9abb --- /dev/null +++ b/build/node_modules/next/dist/server/normalizers/built/app/app-page-normalizer.js @@ -0,0 +1,40 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "DevAppPageNormalizer", { + enumerable: true, + get: function() { + return DevAppPageNormalizer; + } +}); +const _pagetypes = require("../../../../lib/page-types"); +const _absolutefilenamenormalizer = require("../../absolute-filename-normalizer"); +const _normalizers = require("../../normalizers"); +/** + * DevAppPageNormalizer is a normalizer that is used to normalize a pathname + * to a page in the `app` directory. + */ class DevAppPageNormalizerInternal extends _absolutefilenamenormalizer.AbsoluteFilenameNormalizer { + constructor(appDir, extensions){ + super(appDir, extensions, _pagetypes.PAGE_TYPES.APP); + } +} +class DevAppPageNormalizer extends _normalizers.Normalizers { + constructor(appDir, extensions, _isTurbopack){ + const normalizer = new DevAppPageNormalizerInternal(appDir, extensions); + super(// %5F to _ replacement should only happen with Turbopack. + // TODO: enable when page matcher `/_` check is moved: https://github.com/vercel/next.js/blob/8eda00bf5999e43e8f0211bd72c981d5ce292e8b/packages/next/src/server/route-matcher-providers/dev/dev-app-route-route-matcher-provider.ts#L48 + // isTurbopack + // ? [ + // // The page should have the `%5F` characters replaced with `_` characters. + // new UnderscoreNormalizer(), + // normalizer, + // ] + // : [normalizer] + [ + normalizer + ]); + } +} + +//# sourceMappingURL=app-page-normalizer.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/normalizers/built/app/app-pathname-normalizer.js b/build/node_modules/next/dist/server/normalizers/built/app/app-pathname-normalizer.js new file mode 100644 index 0000000..f5b43e8 --- /dev/null +++ b/build/node_modules/next/dist/server/normalizers/built/app/app-pathname-normalizer.js @@ -0,0 +1,55 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + AppPathnameNormalizer: null, + DevAppPathnameNormalizer: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + AppPathnameNormalizer: function() { + return AppPathnameNormalizer; + }, + DevAppPathnameNormalizer: function() { + return DevAppPathnameNormalizer; + } +}); +const _apppaths = require("../../../../shared/lib/router/utils/app-paths"); +const _normalizers = require("../../normalizers"); +const _wrapnormalizerfn = require("../../wrap-normalizer-fn"); +const _underscorenormalizer = require("../../underscore-normalizer"); +class AppPathnameNormalizer extends _normalizers.Normalizers { + constructor(){ + super([ + // The pathname to match should have the trailing `/page` and other route + // group information stripped from it. + (0, _wrapnormalizerfn.wrapNormalizerFn)(_apppaths.normalizeAppPath), + // The page should have the `%5F` characters replaced with `_` characters. + new _underscorenormalizer.UnderscoreNormalizer() + ]); + } + normalize(page) { + return super.normalize(page); + } +} +class DevAppPathnameNormalizer extends _normalizers.Normalizers { + constructor(pageNormalizer){ + super([ + // This should normalize the filename to a page. + pageNormalizer, + // Normalize the app page to a pathname. + new AppPathnameNormalizer() + ]); + } + normalize(filename) { + return super.normalize(filename); + } +} + +//# sourceMappingURL=app-pathname-normalizer.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/normalizers/built/app/index.js b/build/node_modules/next/dist/server/normalizers/built/app/index.js new file mode 100644 index 0000000..a88cfe1 --- /dev/null +++ b/build/node_modules/next/dist/server/normalizers/built/app/index.js @@ -0,0 +1,42 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + AppNormalizers: null, + DevAppNormalizers: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + AppNormalizers: function() { + return AppNormalizers; + }, + DevAppNormalizers: function() { + return DevAppNormalizers; + } +}); +const _appbundlepathnormalizer = require("./app-bundle-path-normalizer"); +const _appfilenamenormalizer = require("./app-filename-normalizer"); +const _apppagenormalizer = require("./app-page-normalizer"); +const _apppathnamenormalizer = require("./app-pathname-normalizer"); +class AppNormalizers { + constructor(distDir){ + this.filename = new _appfilenamenormalizer.AppFilenameNormalizer(distDir); + this.pathname = new _apppathnamenormalizer.AppPathnameNormalizer(); + this.bundlePath = new _appbundlepathnormalizer.AppBundlePathNormalizer(); + } +} +class DevAppNormalizers { + constructor(appDir, extensions, isTurbopack){ + this.page = new _apppagenormalizer.DevAppPageNormalizer(appDir, extensions, isTurbopack); + this.pathname = new _apppathnamenormalizer.DevAppPathnameNormalizer(this.page); + this.bundlePath = new _appbundlepathnormalizer.DevAppBundlePathNormalizer(this.page, isTurbopack); + } +} + +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/normalizers/built/pages/index.js b/build/node_modules/next/dist/server/normalizers/built/pages/index.js new file mode 100644 index 0000000..28b5a85 --- /dev/null +++ b/build/node_modules/next/dist/server/normalizers/built/pages/index.js @@ -0,0 +1,44 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + DevPagesNormalizers: null, + PagesNormalizers: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + DevPagesNormalizers: function() { + return DevPagesNormalizers; + }, + PagesNormalizers: function() { + return PagesNormalizers; + } +}); +const _pagesbundlepathnormalizer = require("./pages-bundle-path-normalizer"); +const _pagesfilenamenormalizer = require("./pages-filename-normalizer"); +const _pagespagenormalizer = require("./pages-page-normalizer"); +const _pagespathnamenormalizer = require("./pages-pathname-normalizer"); +class PagesNormalizers { + constructor(distDir){ + this.filename = new _pagesfilenamenormalizer.PagesFilenameNormalizer(distDir); + this.bundlePath = new _pagesbundlepathnormalizer.PagesBundlePathNormalizer(); + // You'd think that we'd require a `pathname` normalizer here, but for + // `/pages` we have to handle i18n routes, which means that we need to + // analyze the page path to determine the locale prefix and it's locale. + } +} +class DevPagesNormalizers { + constructor(pagesDir, extensions){ + this.page = new _pagespagenormalizer.DevPagesPageNormalizer(pagesDir, extensions); + this.pathname = new _pagespathnamenormalizer.DevPagesPathnameNormalizer(pagesDir, extensions); + this.bundlePath = new _pagesbundlepathnormalizer.DevPagesBundlePathNormalizer(this.page); + } +} + +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/normalizers/built/pages/pages-bundle-path-normalizer.js b/build/node_modules/next/dist/server/normalizers/built/pages/pages-bundle-path-normalizer.js new file mode 100644 index 0000000..9ccc043 --- /dev/null +++ b/build/node_modules/next/dist/server/normalizers/built/pages/pages-bundle-path-normalizer.js @@ -0,0 +1,55 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + DevPagesBundlePathNormalizer: null, + PagesBundlePathNormalizer: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + DevPagesBundlePathNormalizer: function() { + return DevPagesBundlePathNormalizer; + }, + PagesBundlePathNormalizer: function() { + return PagesBundlePathNormalizer; + } +}); +const _normalizepagepath = require("../../../../shared/lib/page-path/normalize-page-path"); +const _normalizers = require("../../normalizers"); +const _prefixingnormalizer = require("../../prefixing-normalizer"); +const _wrapnormalizerfn = require("../../wrap-normalizer-fn"); +class PagesBundlePathNormalizer extends _normalizers.Normalizers { + constructor(){ + super([ + // The bundle path should have the trailing `/index` stripped from + // it. + (0, _wrapnormalizerfn.wrapNormalizerFn)(_normalizepagepath.normalizePagePath), + // The page should prefixed with `pages/`. + new _prefixingnormalizer.PrefixingNormalizer('pages') + ]); + } + normalize(page) { + return super.normalize(page); + } +} +class DevPagesBundlePathNormalizer extends _normalizers.Normalizers { + constructor(pagesNormalizer){ + super([ + // This should normalize the filename to a page. + pagesNormalizer, + // Normalize the app page to a pathname. + new PagesBundlePathNormalizer() + ]); + } + normalize(filename) { + return super.normalize(filename); + } +} + +//# sourceMappingURL=pages-bundle-path-normalizer.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/normalizers/built/pages/pages-filename-normalizer.js b/build/node_modules/next/dist/server/normalizers/built/pages/pages-filename-normalizer.js new file mode 100644 index 0000000..eed594d --- /dev/null +++ b/build/node_modules/next/dist/server/normalizers/built/pages/pages-filename-normalizer.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "PagesFilenameNormalizer", { + enumerable: true, + get: function() { + return PagesFilenameNormalizer; + } +}); +const _constants = require("../../../../shared/lib/constants"); +const _prefixingnormalizer = require("../../prefixing-normalizer"); +class PagesFilenameNormalizer extends _prefixingnormalizer.PrefixingNormalizer { + constructor(distDir){ + super(distDir, _constants.SERVER_DIRECTORY); + } + normalize(manifestFilename) { + return super.normalize(manifestFilename); + } +} + +//# sourceMappingURL=pages-filename-normalizer.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/normalizers/built/pages/pages-page-normalizer.js b/build/node_modules/next/dist/server/normalizers/built/pages/pages-page-normalizer.js new file mode 100644 index 0000000..c2dd355 --- /dev/null +++ b/build/node_modules/next/dist/server/normalizers/built/pages/pages-page-normalizer.js @@ -0,0 +1,19 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "DevPagesPageNormalizer", { + enumerable: true, + get: function() { + return DevPagesPageNormalizer; + } +}); +const _pagetypes = require("../../../../lib/page-types"); +const _absolutefilenamenormalizer = require("../../absolute-filename-normalizer"); +class DevPagesPageNormalizer extends _absolutefilenamenormalizer.AbsoluteFilenameNormalizer { + constructor(pagesDir, extensions){ + super(pagesDir, extensions, _pagetypes.PAGE_TYPES.PAGES); + } +} + +//# sourceMappingURL=pages-page-normalizer.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/normalizers/built/pages/pages-pathname-normalizer.js b/build/node_modules/next/dist/server/normalizers/built/pages/pages-pathname-normalizer.js new file mode 100644 index 0000000..3c3e79d --- /dev/null +++ b/build/node_modules/next/dist/server/normalizers/built/pages/pages-pathname-normalizer.js @@ -0,0 +1,19 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "DevPagesPathnameNormalizer", { + enumerable: true, + get: function() { + return DevPagesPathnameNormalizer; + } +}); +const _pagetypes = require("../../../../lib/page-types"); +const _absolutefilenamenormalizer = require("../../absolute-filename-normalizer"); +class DevPagesPathnameNormalizer extends _absolutefilenamenormalizer.AbsoluteFilenameNormalizer { + constructor(pagesDir, extensions){ + super(pagesDir, extensions, _pagetypes.PAGE_TYPES.PAGES); + } +} + +//# sourceMappingURL=pages-pathname-normalizer.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/normalizers/locale-route-normalizer.js b/build/node_modules/next/dist/server/normalizers/locale-route-normalizer.js new file mode 100644 index 0000000..8885c75 --- /dev/null +++ b/build/node_modules/next/dist/server/normalizers/locale-route-normalizer.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "LocaleRouteNormalizer", { + enumerable: true, + get: function() { + return LocaleRouteNormalizer; + } +}); +class LocaleRouteNormalizer { + constructor(provider){ + this.provider = provider; + } + /** + * Normalizes the pathname by removing the locale prefix if any. + * + * @param pathname The pathname to normalize. + * @returns The pathname without the locale prefix (if any). + */ normalize(pathname) { + const match = this.provider.analyze(pathname); + return match.pathname; + } +} + +//# sourceMappingURL=locale-route-normalizer.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/normalizers/normalizer.js b/build/node_modules/next/dist/server/normalizers/normalizer.js new file mode 100644 index 0000000..27d0d35 --- /dev/null +++ b/build/node_modules/next/dist/server/normalizers/normalizer.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=normalizer.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/normalizers/normalizers.js b/build/node_modules/next/dist/server/normalizers/normalizers.js new file mode 100644 index 0000000..d8f52c2 --- /dev/null +++ b/build/node_modules/next/dist/server/normalizers/normalizers.js @@ -0,0 +1,23 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "Normalizers", { + enumerable: true, + get: function() { + return Normalizers; + } +}); +class Normalizers { + constructor(normalizers = []){ + this.normalizers = normalizers; + } + push(normalizer) { + this.normalizers.push(normalizer); + } + normalize(pathname) { + return this.normalizers.reduce((normalized, normalizer)=>normalizer.normalize(normalized), pathname); + } +} + +//# sourceMappingURL=normalizers.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/normalizers/prefixing-normalizer.js b/build/node_modules/next/dist/server/normalizers/prefixing-normalizer.js new file mode 100644 index 0000000..26b7e8b --- /dev/null +++ b/build/node_modules/next/dist/server/normalizers/prefixing-normalizer.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "PrefixingNormalizer", { + enumerable: true, + get: function() { + return PrefixingNormalizer; + } +}); +const _path = /*#__PURE__*/ _interop_require_default(require("../../shared/lib/isomorphic/path")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +class PrefixingNormalizer { + constructor(...prefixes){ + this.prefix = _path.default.posix.join(...prefixes); + } + normalize(pathname) { + return _path.default.posix.join(this.prefix, pathname); + } +} + +//# sourceMappingURL=prefixing-normalizer.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/normalizers/request/base-path.js b/build/node_modules/next/dist/server/normalizers/request/base-path.js new file mode 100644 index 0000000..c4dd116 --- /dev/null +++ b/build/node_modules/next/dist/server/normalizers/request/base-path.js @@ -0,0 +1,25 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "BasePathPathnameNormalizer", { + enumerable: true, + get: function() { + return BasePathPathnameNormalizer; + } +}); +const _prefix = require("./prefix"); +class BasePathPathnameNormalizer extends _prefix.PrefixPathnameNormalizer { + constructor(basePath){ + if (!basePath || basePath === '/') { + throw Object.defineProperty(new Error('Invariant: basePath must be set and cannot be "/"'), "__NEXT_ERROR_CODE", { + value: "E154", + enumerable: false, + configurable: true + }); + } + super(basePath); + } +} + +//# sourceMappingURL=base-path.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/normalizers/request/next-data.js b/build/node_modules/next/dist/server/normalizers/request/next-data.js new file mode 100644 index 0000000..1cdb45c --- /dev/null +++ b/build/node_modules/next/dist/server/normalizers/request/next-data.js @@ -0,0 +1,38 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "NextDataPathnameNormalizer", { + enumerable: true, + get: function() { + return NextDataPathnameNormalizer; + } +}); +const _denormalizepagepath = require("../../../shared/lib/page-path/denormalize-page-path"); +const _prefix = require("./prefix"); +const _suffix = require("./suffix"); +class NextDataPathnameNormalizer { + constructor(buildID){ + this.suffix = new _suffix.SuffixPathnameNormalizer('.json'); + if (!buildID) { + throw Object.defineProperty(new Error('Invariant: buildID is required'), "__NEXT_ERROR_CODE", { + value: "E200", + enumerable: false, + configurable: true + }); + } + this.prefix = new _prefix.PrefixPathnameNormalizer(`/_next/data/${buildID}`); + } + match(pathname) { + return this.prefix.match(pathname) && this.suffix.match(pathname); + } + normalize(pathname, matched) { + // If we're not matched and we don't match, we don't need to normalize. + if (!matched && !this.match(pathname)) return pathname; + pathname = this.prefix.normalize(pathname, true); + pathname = this.suffix.normalize(pathname, true); + return (0, _denormalizepagepath.denormalizePagePath)(pathname); + } +} + +//# sourceMappingURL=next-data.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/normalizers/request/pathname-normalizer.js b/build/node_modules/next/dist/server/normalizers/request/pathname-normalizer.js new file mode 100644 index 0000000..68cb656 --- /dev/null +++ b/build/node_modules/next/dist/server/normalizers/request/pathname-normalizer.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=pathname-normalizer.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/normalizers/request/prefix.js b/build/node_modules/next/dist/server/normalizers/request/prefix.js new file mode 100644 index 0000000..481c766 --- /dev/null +++ b/build/node_modules/next/dist/server/normalizers/request/prefix.js @@ -0,0 +1,39 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "PrefixPathnameNormalizer", { + enumerable: true, + get: function() { + return PrefixPathnameNormalizer; + } +}); +class PrefixPathnameNormalizer { + constructor(prefix){ + this.prefix = prefix; + if (prefix.endsWith('/')) { + throw Object.defineProperty(new Error(`PrefixPathnameNormalizer: prefix "${prefix}" should not end with a slash`), "__NEXT_ERROR_CODE", { + value: "E219", + enumerable: false, + configurable: true + }); + } + } + match(pathname) { + // If the pathname doesn't start with the prefix, we don't match. + if (pathname !== this.prefix && !pathname.startsWith(this.prefix + '/')) { + return false; + } + return true; + } + normalize(pathname, matched) { + // If we're not matched and we don't match, we don't need to normalize. + if (!matched && !this.match(pathname)) return pathname; + if (pathname.length === this.prefix.length) { + return '/'; + } + return pathname.substring(this.prefix.length); + } +} + +//# sourceMappingURL=prefix.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/normalizers/request/rsc.js b/build/node_modules/next/dist/server/normalizers/request/rsc.js new file mode 100644 index 0000000..f9eefc6 --- /dev/null +++ b/build/node_modules/next/dist/server/normalizers/request/rsc.js @@ -0,0 +1,19 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "RSCPathnameNormalizer", { + enumerable: true, + get: function() { + return RSCPathnameNormalizer; + } +}); +const _constants = require("../../../lib/constants"); +const _suffix = require("./suffix"); +class RSCPathnameNormalizer extends _suffix.SuffixPathnameNormalizer { + constructor(){ + super(_constants.RSC_SUFFIX); + } +} + +//# sourceMappingURL=rsc.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.js b/build/node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.js new file mode 100644 index 0000000..514d374 --- /dev/null +++ b/build/node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.js @@ -0,0 +1,33 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "SegmentPrefixRSCPathnameNormalizer", { + enumerable: true, + get: function() { + return SegmentPrefixRSCPathnameNormalizer; + } +}); +const _constants = require("../../../lib/constants"); +const _escaperegexp = require("../../../shared/lib/escape-regexp"); +const PATTERN = new RegExp(`^(/.*)${(0, _escaperegexp.escapeStringRegexp)(_constants.RSC_SEGMENTS_DIR_SUFFIX)}(/.*)${(0, _escaperegexp.escapeStringRegexp)(_constants.RSC_SEGMENT_SUFFIX)}$`); +class SegmentPrefixRSCPathnameNormalizer { + match(pathname) { + return PATTERN.test(pathname); + } + extract(pathname) { + const match = pathname.match(PATTERN); + if (!match) return null; + return { + originalPathname: match[1], + segmentPath: match[2] + }; + } + normalize(pathname) { + const match = this.extract(pathname); + if (!match) return pathname; + return match.originalPathname; + } +} + +//# sourceMappingURL=segment-prefix-rsc.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/normalizers/request/suffix.js b/build/node_modules/next/dist/server/normalizers/request/suffix.js new file mode 100644 index 0000000..5cd6dac --- /dev/null +++ b/build/node_modules/next/dist/server/normalizers/request/suffix.js @@ -0,0 +1,27 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "SuffixPathnameNormalizer", { + enumerable: true, + get: function() { + return SuffixPathnameNormalizer; + } +}); +class SuffixPathnameNormalizer { + constructor(suffix){ + this.suffix = suffix; + } + match(pathname) { + // If the pathname doesn't end in the suffix, we don't match. + if (!pathname.endsWith(this.suffix)) return false; + return true; + } + normalize(pathname, matched) { + // If we're not matched and we don't match, we don't need to normalize. + if (!matched && !this.match(pathname)) return pathname; + return pathname.substring(0, pathname.length - this.suffix.length); + } +} + +//# sourceMappingURL=suffix.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/normalizers/underscore-normalizer.js b/build/node_modules/next/dist/server/normalizers/underscore-normalizer.js new file mode 100644 index 0000000..d799768 --- /dev/null +++ b/build/node_modules/next/dist/server/normalizers/underscore-normalizer.js @@ -0,0 +1,17 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "UnderscoreNormalizer", { + enumerable: true, + get: function() { + return UnderscoreNormalizer; + } +}); +class UnderscoreNormalizer { + normalize(pathname) { + return pathname.replace(/%5F/g, '_'); + } +} + +//# sourceMappingURL=underscore-normalizer.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/normalizers/wrap-normalizer-fn.js b/build/node_modules/next/dist/server/normalizers/wrap-normalizer-fn.js new file mode 100644 index 0000000..262af71 --- /dev/null +++ b/build/node_modules/next/dist/server/normalizers/wrap-normalizer-fn.js @@ -0,0 +1,17 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "wrapNormalizerFn", { + enumerable: true, + get: function() { + return wrapNormalizerFn; + } +}); +function wrapNormalizerFn(fn) { + return { + normalize: fn + }; +} + +//# sourceMappingURL=wrap-normalizer-fn.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/og/image-response.js b/build/node_modules/next/dist/server/og/image-response.js new file mode 100644 index 0000000..78b1ce9 --- /dev/null +++ b/build/node_modules/next/dist/server/og/image-response.js @@ -0,0 +1,53 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "ImageResponse", { + enumerable: true, + get: function() { + return ImageResponse; + } +}); +function importModule() { + return import(process.env.NEXT_RUNTIME === 'edge' ? 'next/dist/compiled/@vercel/og/index.edge.js' : 'next/dist/compiled/@vercel/og/index.node.js'); +} +class ImageResponse extends Response { + static #_ = this.displayName = 'ImageResponse'; + constructor(...args){ + const readable = new ReadableStream({ + async start (controller) { + const OGImageResponse = // So far we have to manually determine which build to use, + // as the auto resolving is not working + (await importModule()).ImageResponse; + const imageResponse = new OGImageResponse(...args); + if (!imageResponse.body) { + return controller.close(); + } + const reader = imageResponse.body.getReader(); + while(true){ + const { done, value } = await reader.read(); + if (done) { + return controller.close(); + } + controller.enqueue(value); + } + } + }); + const options = args[1] || {}; + const headers = new Headers({ + 'content-type': 'image/png', + 'cache-control': process.env.NODE_ENV === 'development' ? 'no-cache, no-store' : 'public, max-age=0, must-revalidate' + }); + if (options.headers) { + const newHeaders = new Headers(options.headers); + newHeaders.forEach((value, key)=>headers.set(key, value)); + } + super(readable, { + headers, + status: options.status, + statusText: options.statusText + }); + } +} + +//# sourceMappingURL=image-response.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/patch-error-inspect.js b/build/node_modules/next/dist/server/patch-error-inspect.js new file mode 100644 index 0000000..657d9ff --- /dev/null +++ b/build/node_modules/next/dist/server/patch-error-inspect.js @@ -0,0 +1,453 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + patchErrorInspectEdgeLite: null, + patchErrorInspectNodeJS: null, + setBundlerFindSourceMapImplementation: null, + setCodeFrameRenderer: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + patchErrorInspectEdgeLite: function() { + return patchErrorInspectEdgeLite; + }, + patchErrorInspectNodeJS: function() { + return patchErrorInspectNodeJS; + }, + setBundlerFindSourceMapImplementation: function() { + return setBundlerFindSourceMapImplementation; + }, + setCodeFrameRenderer: function() { + return setCodeFrameRenderer; + } +}); +const _module = require("module"); +const _path = /*#__PURE__*/ _interop_require_wildcard(require("path")); +const _url = /*#__PURE__*/ _interop_require_wildcard(require("url")); +const _sourcemap = require("next/dist/compiled/source-map"); +const _sourcemaps = require("./lib/source-maps"); +const _parsestack = require("./lib/parse-stack"); +const _workunitasyncstorageexternal = require("./app-render/work-unit-async-storage.external"); +const _picocolors = require("../lib/picocolors"); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +// Find a source map using the bundler's API. +// This is only a fallback for when Node.js fails to due to bugs e.g. https://github.com/nodejs/node/issues/52102 +// TODO: Remove once all supported Node.js versions are fixed. +// TODO(veil): Set from Webpack as well +let bundlerFindSourceMapPayload = ()=>undefined; +function setBundlerFindSourceMapImplementation(findSourceMapImplementation) { + bundlerFindSourceMapPayload = findSourceMapImplementation; +} +let codeFrameRenderer; +function setCodeFrameRenderer(renderer) { + codeFrameRenderer = renderer; +} +function getOriginalCodeFrame(frame, source, colors = process.stdout.isTTY) { + if (!codeFrameRenderer) { + // No renderer available - gracefully degrade + return null; + } + return codeFrameRenderer(frame, source, colors); +} +function frameToString(methodName, sourceURL, line1, column1) { + let sourceLocation = line1 !== null ? `:${line1}` : ''; + if (column1 !== null && sourceLocation !== '') { + sourceLocation += `:${column1}`; + } + let fileLocation; + if (sourceURL !== null && sourceURL.startsWith('file://') && URL.canParse(sourceURL)) { + // If not relative to CWD, the path is ambiguous to IDEs and clicking will prompt to select the file first. + // In a multi-app repo, this leads to potentially larger file names but will make clicking snappy. + // There's no tradeoff for the cases where `dir` in `next dev [dir]` is omitted + // since relative to cwd is both the shortest and snappiest. + fileLocation = _path.relative(process.cwd(), _url.fileURLToPath(sourceURL)); + } else if (sourceURL !== null && sourceURL.startsWith('/')) { + fileLocation = _path.relative(process.cwd(), sourceURL); + } else { + fileLocation = sourceURL; + } + return methodName ? ` at ${methodName} (${fileLocation}${sourceLocation})` : ` at ${fileLocation}${sourceLocation}`; +} +function computeErrorName(error) { + // TODO: Node.js seems to use a different algorithm + // class ReadonlyRequestCookiesError extends Error {}` would read `ReadonlyRequestCookiesError: [...]` + // in the stack i.e. seems like under certain conditions it favors the constructor name. + return error.name || 'Error'; +} +function prepareUnsourcemappedStackTrace(error, structuredStackTrace) { + const name = computeErrorName(error); + const message = error.message || ''; + let stack = name + ': ' + message; + for(let i = 0; i < structuredStackTrace.length; i++){ + stack += '\n at ' + structuredStackTrace[i].toString(); + } + return stack; +} +function shouldIgnoreListGeneratedFrame(file) { + return file.startsWith('node:') || file.includes('node_modules'); +} +function shouldIgnoreListOriginalFrame(file) { + return file.includes('node_modules'); +} +function createUnsourcemappedFrame(frame) { + return { + stack: { + file: frame.file, + line1: frame.line1, + column1: frame.column1, + methodName: frame.methodName, + arguments: frame.arguments, + ignored: shouldIgnoreListGeneratedFrame(frame.file) + }, + code: null + }; +} +function ignoreListAnonymousStackFramesIfSandwiched(sourceMappedFrames) { + return (0, _sourcemaps.ignoreListAnonymousStackFramesIfSandwiched)(sourceMappedFrames, (frame)=>frame.stack.file === '', (frame)=>frame.stack.ignored, (frame)=>frame.stack.methodName, (frame)=>{ + frame.stack.ignored = true; + }); +} +/** + * @param frame + * @param sourceMapCache + * @returns The original frame if not sourcemapped. + */ function getSourcemappedFrameIfPossible(frame, sourceMapCache, inspectOptions) { + var _frame_methodName_replace, _frame_methodName; + const sourceMapCacheEntry = sourceMapCache.get(frame.file); + let sourceMapConsumer; + let sourceMapPayload; + if (sourceMapCacheEntry === undefined) { + let sourceURL = frame.file; + // e.g. "/Users/foo/APP/.next/server/chunks/ssr/[root-of-the-server]__2934a0._.js" + // or "C:\Users\foo\APP\.next\server\chunks\ssr\[root-of-the-server]__2934a0._.js" + // will be keyed by Node.js as "file:///APP/.next/server/chunks/ssr/[root-of-the-server]__2934a0._.js". + // This is likely caused by `callsite.toString()` in `Error.prepareStackTrace converting file URLs to paths. + // + // But frame.file might also be "webpack-internal:///(rsc)/./app/bad-sourcemap/page.js" or + // "" or "node:internal/process/task_queues" here + if (_path.isAbsolute(frame.file)) { + sourceURL = _url.pathToFileURL(frame.file).toString(); + } + let maybeSourceMapPayload; + try { + const sourceMap = (0, _module.findSourceMap)(sourceURL); + maybeSourceMapPayload = sourceMap == null ? void 0 : sourceMap.payload; + } catch (cause) { + // We should not log an actual error instance here because that will re-enter + // this codepath during error inspection and could lead to infinite recursion. + console.error(`${sourceURL}: Invalid source map. Only conformant source maps can be used to find the original code. Cause: ${cause}`); + // If loading fails once, it'll fail every time. + // So set the cache to avoid duplicate errors. + sourceMapCache.set(frame.file, null); + // Don't even fall back to the bundler because it might be not as strict + // with regards to parsing and then we fail later once we consume the + // source map payload. + // This essentially avoids a redundant error where we fail here and then + // later on consumption because the bundler just handed back an invalid + // source map. + return createUnsourcemappedFrame(frame); + } + if (maybeSourceMapPayload === undefined) { + maybeSourceMapPayload = bundlerFindSourceMapPayload(sourceURL); + } + if (maybeSourceMapPayload === undefined) { + return createUnsourcemappedFrame(frame); + } + sourceMapPayload = maybeSourceMapPayload; + try { + // Pass the source map URL as the second parameter so that the consumer + // can resolve relative paths in the source map's `sources` array. This is + // a guess! Turbopack places .map files as siblings to the chunks so this + // is sufficient to compute relative paths but is actually wrong (the + // chunk and sourcemap have different content hashes). We are using the + // node API to read the sourcemap and it doesn't give us access to the + // URI. Devirtualize `about://React/Server/file:///path/to/chunk.js?4` to + // `file:///path/to/chunk.js` so that relative `sources` in the source map + // resolve against the real chunk URL, not the virtual one. + const sourceMapURL = (0, _sourcemaps.devirtualizeReactServerURL)(sourceURL) + '.map'; + sourceMapConsumer = new _sourcemap.SourceMapConsumer(sourceMapPayload, // @ts-expect-error: our typings don't include this parameter but it is here. + sourceMapURL); + } catch (cause) { + // We should not log an actual error instance here because that will re-enter + // this codepath during error inspection and could lead to infinite recursion. + console.error(`${sourceURL}: Invalid source map. Only conformant source maps can be used to find the original code. Cause: ${cause}`); + // If creating the consumer fails once, it'll fail every time. + // So set the cache to avoid duplicate errors. + sourceMapCache.set(frame.file, null); + return createUnsourcemappedFrame(frame); + } + sourceMapCache.set(frame.file, { + map: sourceMapConsumer, + payload: sourceMapPayload + }); + } else if (sourceMapCacheEntry === null) { + // We failed earlier getting the payload or consumer. + // Just return an unsourcemapped frame. + // Errors will already be logged. + return createUnsourcemappedFrame(frame); + } else { + sourceMapConsumer = sourceMapCacheEntry.map; + sourceMapPayload = sourceMapCacheEntry.payload; + } + const sourcePosition = sourceMapConsumer.originalPositionFor({ + column: (frame.column1 ?? 1) - 1, + line: frame.line1 ?? 1 + }); + const applicableSourceMap = (0, _sourcemaps.findApplicableSourceMapPayload)((frame.line1 ?? 1) - 1, (frame.column1 ?? 1) - 1, sourceMapPayload); + let ignored = applicableSourceMap !== undefined && (0, _sourcemaps.sourceMapIgnoreListsEverything)(applicableSourceMap); + if (sourcePosition.source === null) { + return { + stack: { + arguments: frame.arguments, + file: frame.file, + line1: frame.line1, + column1: frame.column1, + methodName: frame.methodName, + ignored: ignored || shouldIgnoreListGeneratedFrame(frame.file) + }, + code: null + }; + } + // TODO(veil): Upstream a method to sourcemap consumer that immediately says if a frame is ignored or not. + if (applicableSourceMap === undefined) { + console.error('No applicable source map found in sections for frame', frame); + } else if (!ignored && shouldIgnoreListOriginalFrame(sourcePosition.source)) { + // Externals may be libraries that don't ship ignoreLists. + // This is really taking control away from libraries. + // They should still ship `ignoreList` so that attached debuggers ignore-list their frames. + // TODO: Maybe only ignore library sourcemaps if `ignoreList` is absent? + // Though keep in mind that Turbopack omits empty `ignoreList`. + // So if we establish this convention, we should communicate it to the ecosystem. + ignored = true; + } else if (!ignored) { + var _applicableSourceMap_ignoreList; + // TODO: O(n^2). Consider moving `ignoreList` into a Set + const sourceIndex = applicableSourceMap.sources.indexOf(sourcePosition.source); + ignored = ((_applicableSourceMap_ignoreList = applicableSourceMap.ignoreList) == null ? void 0 : _applicableSourceMap_ignoreList.includes(sourceIndex)) ?? false; + } + const originalFrame = { + // We ignore the sourcemapped name since it won't be the correct name. + // The callsite will point to the column of the variable name instead of the + // name of the enclosing function. + // TODO(NDX-531): Spy on prepareStackTrace to get the enclosing line number for method name mapping. + methodName: (_frame_methodName = frame.methodName) == null ? void 0 : (_frame_methodName_replace = _frame_methodName.replace('__WEBPACK_DEFAULT_EXPORT__', 'default')) == null ? void 0 : _frame_methodName_replace.replace('__webpack_exports__.', ''), + file: sourcePosition.source, + line1: sourcePosition.line, + column1: sourcePosition.column + 1, + // TODO: c&p from async createOriginalStackFrame but why not frame.arguments? + arguments: [], + ignored + }; + /** undefined = not yet computed */ let codeFrame; + return { + stack: originalFrame, + get code () { + if (codeFrame === undefined) { + const sourceContent = sourceMapConsumer.sourceContentFor(sourcePosition.source, /* returnNullOnMissing */ true) ?? null; + codeFrame = getOriginalCodeFrame(originalFrame, sourceContent, inspectOptions.colors); + } + return codeFrame; + } + }; +} +function parseAndSourceMap(error, inspectOptions) { + const showIgnoreListed = process.env.__NEXT_SHOW_IGNORE_LISTED === 'true'; + // We overwrote Error.prepareStackTrace earlier so error.stack is not sourcemapped. + let unparsedStack = String(error.stack); + // We could just read it from `error.stack`. + // This works around cases where a 3rd party `Error.prepareStackTrace` implementation + // doesn't implement the name computation correctly. + const errorName = computeErrorName(error); + let idx = unparsedStack.indexOf('react_stack_bottom_frame'); + if (idx !== -1) { + idx = unparsedStack.lastIndexOf('\n', idx); + } else { + idx = unparsedStack.indexOf('react-stack-bottom-frame'); + if (idx !== -1) { + idx = unparsedStack.lastIndexOf('\n', idx); + } + } + if (idx !== -1 && !showIgnoreListed) { + // Cut off everything after the bottom frame since it'll be React internals. + unparsedStack = unparsedStack.slice(0, idx); + } + const unsourcemappedStack = (0, _parsestack.parseStack)(unparsedStack); + const sourceMapCache = new Map(); + const sourceMappedFrames = []; + let sourceFrame = null; + for (const frame of unsourcemappedStack){ + if (frame.file === null) { + sourceMappedFrames.push({ + code: null, + stack: { + file: frame.file, + line1: frame.line1, + column1: frame.column1, + methodName: frame.methodName, + arguments: frame.arguments, + ignored: false + } + }); + } else { + const sourcemappedFrame = getSourcemappedFrameIfPossible(// We narrowed this earlier by bailing if `frame.file` is null. + frame, sourceMapCache, inspectOptions); + sourceMappedFrames.push(sourcemappedFrame); + // We can determine the sourceframe here. + // anonymous frames won't have a sourceframe so we don't need to scan + // all stacks again to check if they are sandwiched between ignored frames. + if (sourceFrame === null && // TODO: Is this the right choice? + !sourcemappedFrame.stack.ignored && sourcemappedFrame.code !== null) { + sourceFrame = sourcemappedFrame.code; + } + } + } + ignoreListAnonymousStackFramesIfSandwiched(sourceMappedFrames); + let sourceMappedStack = ''; + for(let i = 0; i < sourceMappedFrames.length; i++){ + const frame = sourceMappedFrames[i]; + if (!frame.stack.ignored) { + sourceMappedStack += '\n' + frameToString(frame.stack.methodName, frame.stack.file, frame.stack.line1, frame.stack.column1); + } else if (showIgnoreListed) { + sourceMappedStack += '\n' + (0, _picocolors.dim)(frameToString(frame.stack.methodName, frame.stack.file, frame.stack.line1, frame.stack.column1)); + } + } + if (sourceMappedStack === '' && sourceMappedFrames.length > 0) { + // The `at` marker is important so that Node.js doesn't add square brackets + // around the stringified error i.e. this results in + // Error: message + // at + // instead of + // [Error: message + // at ] + sourceMappedStack = '\n at ' + (0, _picocolors.italic)('ignore-listed frames'); + } + return errorName + ': ' + error.message + sourceMappedStack + (sourceFrame !== null ? '\n' + sourceFrame : ''); +} +function sourceMapError(error, inspectOptions) { + // Setting an undefined `cause` would print `[cause]: undefined` + const options = error.cause !== undefined ? { + cause: error.cause + } : undefined; + // Create a new Error object with the source mapping applied and then use native + // Node.js formatting on the result. + const newError = error instanceof AggregateError ? Object.defineProperty(new AggregateError(error.errors, error.message, options), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }) : Object.defineProperty(new Error(error.message, options), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + // TODO: Ensure `class MyError extends Error {}` prints `MyError` as the name + newError.stack = parseAndSourceMap(error, inspectOptions); + for(const key in error){ + if (!Object.prototype.hasOwnProperty.call(newError, key)) { + // @ts-expect-error -- We're copying all enumerable properties. + // So they definitely exist on `this` and obviously have no type on `newError` (yet) + newError[key] = error[key]; + } + } + return newError; +} +function patchErrorInspectNodeJS(errorConstructor) { + const inspectSymbol = Symbol.for('nodejs.util.inspect.custom'); + errorConstructor.prepareStackTrace = prepareUnsourcemappedStackTrace; + // @ts-expect-error -- TODO upstream types + errorConstructor.prototype[inspectSymbol] = function(depth, inspectOptions, inspect) { + // avoid false-positive dynamic i/o warnings e.g. due to usage of `Math.random` in `source-map`. + return _workunitasyncstorageexternal.workUnitAsyncStorage.exit(()=>{ + const newError = sourceMapError(this, inspectOptions); + const originalCustomInspect = newError[inspectSymbol]; + // Prevent infinite recursion. + // { customInspect: false } would result in `error.cause` not using our inspect. + Object.defineProperty(newError, inspectSymbol, { + value: undefined, + enumerable: false, + writable: true + }); + try { + return inspect(newError, { + ...inspectOptions, + depth + }); + } finally{ + ; + newError[inspectSymbol] = originalCustomInspect; + } + }); + }; +} +function patchErrorInspectEdgeLite(errorConstructor) { + const inspectSymbol = Symbol.for('edge-runtime.inspect.custom'); + errorConstructor.prepareStackTrace = prepareUnsourcemappedStackTrace; + // @ts-expect-error -- TODO upstream types + errorConstructor.prototype[inspectSymbol] = function({ format }) { + // avoid false-positive dynamic i/o warnings e.g. due to usage of `Math.random` in `source-map`. + return _workunitasyncstorageexternal.workUnitAsyncStorage.exit(()=>{ + const newError = sourceMapError(this, {}); + const originalCustomInspect = newError[inspectSymbol]; + // Prevent infinite recursion. + Object.defineProperty(newError, inspectSymbol, { + value: undefined, + enumerable: false, + writable: true + }); + try { + return format(newError); + } finally{ + ; + newError[inspectSymbol] = originalCustomInspect; + } + }); + }; +} + +//# sourceMappingURL=patch-error-inspect.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/pipe-readable.js b/build/node_modules/next/dist/server/pipe-readable.js new file mode 100644 index 0000000..ad95ae2 --- /dev/null +++ b/build/node_modules/next/dist/server/pipe-readable.js @@ -0,0 +1,140 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + isAbortError: null, + pipeToNodeResponse: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + isAbortError: function() { + return isAbortError; + }, + pipeToNodeResponse: function() { + return pipeToNodeResponse; + } +}); +const _nextrequest = require("./web/spec-extension/adapters/next-request"); +const _detachedpromise = require("../lib/detached-promise"); +const _tracer = require("./lib/trace/tracer"); +const _constants = require("./lib/trace/constants"); +const _clientcomponentrendererlogger = require("./client-component-renderer-logger"); +function isAbortError(e) { + return (e == null ? void 0 : e.name) === 'AbortError' || (e == null ? void 0 : e.name) === _nextrequest.ResponseAbortedName; +} +function createWriterFromResponse(res, waitUntilForEnd) { + let started = false; + // Create a promise that will resolve once the response has drained. See + // https://nodejs.org/api/stream.html#stream_event_drain + let drained = new _detachedpromise.DetachedPromise(); + function onDrain() { + drained.resolve(); + } + res.on('drain', onDrain); + // If the finish event fires, it means we shouldn't block and wait for the + // drain event. + res.once('close', ()=>{ + res.off('drain', onDrain); + drained.resolve(); + }); + // Create a promise that will resolve once the response has finished. See + // https://nodejs.org/api/http.html#event-finish_1 + const finished = new _detachedpromise.DetachedPromise(); + res.once('finish', ()=>{ + finished.resolve(); + }); + // Create a writable stream that will write to the response. + return new WritableStream({ + write: async (chunk)=>{ + // You'd think we'd want to use `start` instead of placing this in `write` + // but this ensures that we don't actually flush the headers until we've + // started writing chunks. + if (!started) { + started = true; + if ('performance' in globalThis && process.env.NEXT_OTEL_PERFORMANCE_PREFIX) { + const metrics = (0, _clientcomponentrendererlogger.getClientComponentLoaderMetrics)(); + if (metrics) { + performance.measure(`${process.env.NEXT_OTEL_PERFORMANCE_PREFIX}:next-client-component-loading`, { + start: metrics.clientComponentLoadStart, + end: metrics.clientComponentLoadStart + metrics.clientComponentLoadTimes + }); + } + } + res.flushHeaders(); + (0, _tracer.getTracer)().trace(_constants.NextNodeServerSpan.startResponse, { + spanName: 'start response' + }, ()=>undefined); + } + try { + const ok = res.write(chunk); + // Added by the `compression` middleware, this is a function that will + // flush the partially-compressed response to the client. + if ('flush' in res && typeof res.flush === 'function') { + res.flush(); + } + // If the write returns false, it means there's some backpressure, so + // wait until it's streamed before continuing. + if (!ok) { + await drained.promise; + // Reset the drained promise so that we can wait for the next drain event. + drained = new _detachedpromise.DetachedPromise(); + } + } catch (err) { + res.end(); + throw Object.defineProperty(new Error('failed to write chunk to response', { + cause: err + }), "__NEXT_ERROR_CODE", { + value: "E321", + enumerable: false, + configurable: true + }); + } + }, + abort: (err)=>{ + if (res.writableFinished) return; + res.destroy(err); + }, + close: async ()=>{ + // if a waitUntil promise was passed, wait for it to resolve before + // ending the response. + if (waitUntilForEnd) { + await waitUntilForEnd; + } + if (res.writableFinished) return; + res.end(); + return finished.promise; + } + }); +} +async function pipeToNodeResponse(readable, res, waitUntilForEnd) { + try { + // If the response has already errored, then just return now. + const { errored, destroyed } = res; + if (errored || destroyed) return; + // Create a new AbortController so that we can abort the readable if the + // client disconnects. + const controller = (0, _nextrequest.createAbortController)(res); + const writer = createWriterFromResponse(res, waitUntilForEnd); + await readable.pipeTo(writer, { + signal: controller.signal + }); + } catch (err) { + // If this isn't related to an abort error, re-throw it. + if (isAbortError(err)) return; + throw Object.defineProperty(new Error('failed to pipe response', { + cause: err + }), "__NEXT_ERROR_CODE", { + value: "E180", + enumerable: false, + configurable: true + }); + } +} + +//# sourceMappingURL=pipe-readable.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/post-process.js b/build/node_modules/next/dist/server/post-process.js new file mode 100644 index 0000000..bff02e8 --- /dev/null +++ b/build/node_modules/next/dist/server/post-process.js @@ -0,0 +1,39 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "postProcessHTML", { + enumerable: true, + get: function() { + return postProcessHTML; + } +}); +const _nonnullable = require("../lib/non-nullable"); +async function postProcessHTML(content, renderOpts) { + const postProcessors = [ + process.env.NEXT_RUNTIME !== 'edge' && renderOpts.optimizeCss ? async (html)=>{ + // eslint-disable-next-line import/no-extraneous-dependencies + const Critters = require('critters'); + // @ts-expect-error -- interopRequireDefault + const cssOptimizer = new Critters({ + ssrMode: true, + reduceInlineStyles: false, + path: renderOpts.distDir, + publicPath: `${renderOpts.assetPrefix}/_next/`, + preload: 'media', + fonts: false, + logLevel: process.env.CRITTERS_LOG_LEVEL || (process.env.NODE_ENV === 'production' ? 'warn' : 'info'), + ...renderOpts.optimizeCss + }); + return await cssOptimizer.process(html); + } : null + ].filter(_nonnullable.nonNullable); + for (const postProcessor of postProcessors){ + if (postProcessor) { + content = await postProcessor(content); + } + } + return content; +} + +//# sourceMappingURL=post-process.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/render-result.js b/build/node_modules/next/dist/server/render-result.js new file mode 100644 index 0000000..b8bf0a7 --- /dev/null +++ b/build/node_modules/next/dist/server/render-result.js @@ -0,0 +1,204 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "default", { + enumerable: true, + get: function() { + return RenderResult; + } +}); +const _nodewebstreamshelper = require("./stream-utils/node-web-streams-helper"); +const _pipereadable = require("./pipe-readable"); +const _invarianterror = require("../shared/lib/invariant-error"); +class RenderResult { + static #_ = /** + * A render result that represents an empty response. This is used to + * represent a response that was not found or was already sent. + */ this.EMPTY = new RenderResult(null, { + metadata: {}, + contentType: null + }); + /** + * Creates a new RenderResult instance from a static response. + * + * @param value the static response value + * @param contentType the content type of the response + * @returns a new RenderResult instance + */ static fromStatic(value, contentType) { + return new RenderResult(value, { + metadata: {}, + contentType + }); + } + constructor(response, { contentType, waitUntil, metadata }){ + this.response = response; + this.contentType = contentType; + this.metadata = metadata; + this.waitUntil = waitUntil; + } + assignMetadata(metadata) { + Object.assign(this.metadata, metadata); + } + /** + * Returns true if the response is null. It can be null if the response was + * not found or was already sent. + */ get isNull() { + return this.response === null; + } + /** + * Returns false if the response is a string. It can be a string if the page + * was prerendered. If it's not, then it was generated dynamically. + */ get isDynamic() { + return typeof this.response !== 'string'; + } + toUnchunkedString(stream = false) { + if (this.response === null) { + // If the response is null, return an empty string. This behavior is + // intentional as we're now providing the `RenderResult.EMPTY` value. + return ''; + } + if (typeof this.response !== 'string') { + if (!stream) { + throw Object.defineProperty(new _invarianterror.InvariantError('dynamic responses cannot be unchunked. This is a bug in Next.js'), "__NEXT_ERROR_CODE", { + value: "E732", + enumerable: false, + configurable: true + }); + } + return (0, _nodewebstreamshelper.streamToString)(this.readable); + } + return this.response; + } + /** + * Returns a readable stream of the response. + */ get readable() { + if (this.response === null) { + // If the response is null, return an empty stream. This behavior is + // intentional as we're now providing the `RenderResult.EMPTY` value. + return new ReadableStream({ + start (controller) { + controller.close(); + } + }); + } + if (typeof this.response === 'string') { + return (0, _nodewebstreamshelper.streamFromString)(this.response); + } + if (Buffer.isBuffer(this.response)) { + return (0, _nodewebstreamshelper.streamFromBuffer)(this.response); + } + // If the response is an array of streams, then chain them together. + if (Array.isArray(this.response)) { + return (0, _nodewebstreamshelper.chainStreams)(...this.response); + } + return this.response; + } + /** + * Coerces the response to an array of streams. This will convert the response + * to an array of streams if it is not already one. + * + * @returns An array of streams + */ coerce() { + if (this.response === null) { + // If the response is null, return an empty stream. This behavior is + // intentional as we're now providing the `RenderResult.EMPTY` value. + return []; + } + if (typeof this.response === 'string') { + return [ + (0, _nodewebstreamshelper.streamFromString)(this.response) + ]; + } else if (Array.isArray(this.response)) { + return this.response; + } else if (Buffer.isBuffer(this.response)) { + return [ + (0, _nodewebstreamshelper.streamFromBuffer)(this.response) + ]; + } else { + return [ + this.response + ]; + } + } + /** + * Pipes the response through a transform stream. This converts the response + * to a single readable stream (chaining if needed) and pipes it through the + * provided transform. + * + * @param transform The transform stream to pipe through + */ pipeThrough(transform) { + this.response = this.readable.pipeThrough(transform); + } + /** + * Unshifts a new stream to the response. This will convert the response to an + * array of streams if it is not already one and will add the new stream to + * the start of the array. When this response is piped, all of the streams + * will be piped one after the other. + * + * @param readable The new stream to unshift + */ unshift(readable) { + // Coerce the response to an array of streams. + this.response = this.coerce(); + // Add the new stream to the start of the array. + this.response.unshift(readable); + } + /** + * Chains a new stream to the response. This will convert the response to an + * array of streams if it is not already one and will add the new stream to + * the end. When this response is piped, all of the streams will be piped + * one after the other. + * + * @param readable The new stream to chain + */ push(readable) { + // Coerce the response to an array of streams. + this.response = this.coerce(); + // Add the new stream to the end of the array. + this.response.push(readable); + } + /** + * Pipes the response to a writable stream. This will close/cancel the + * writable stream if an error is encountered. If this doesn't throw, then + * the writable stream will be closed or aborted. + * + * @param writable Writable stream to pipe the response to + */ async pipeTo(writable) { + try { + await this.readable.pipeTo(writable, { + // We want to close the writable stream ourselves so that we can wait + // for the waitUntil promise to resolve before closing it. If an error + // is encountered, we'll abort the writable stream if we swallowed the + // error. + preventClose: true + }); + // If there is a waitUntil promise, wait for it to resolve before + // closing the writable stream. + if (this.waitUntil) await this.waitUntil; + // Close the writable stream. + await writable.close(); + } catch (err) { + // If this is an abort error, we should abort the writable stream (as we + // took ownership of it when we started piping). We don't need to re-throw + // because we handled the error. + if ((0, _pipereadable.isAbortError)(err)) { + // Abort the writable stream if an error is encountered. + await writable.abort(err); + return; + } + // We're not aborting the writer here as when this method throws it's not + // clear as to how so the caller should assume it's their responsibility + // to clean up the writer. + throw err; + } + } + /** + * Pipes the response to a node response. This will close/cancel the node + * response if an error is encountered. + * + * @param res + */ async pipeToNodeResponse(res) { + await (0, _pipereadable.pipeToNodeResponse)(this.readable, res, this.waitUntil); + } +} + +//# sourceMappingURL=render-result.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/render.js b/build/node_modules/next/dist/server/render.js new file mode 100644 index 0000000..b55b181 --- /dev/null +++ b/build/node_modules/next/dist/server/render.js @@ -0,0 +1,1148 @@ +/* eslint-disable @next/internal/no-ambiguous-jsx -- Pages router doesn't use react-server */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + errorToJSON: null, + renderToHTML: null, + renderToHTMLImpl: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + errorToJSON: function() { + return errorToJSON; + }, + renderToHTML: function() { + return renderToHTML; + }, + renderToHTMLImpl: function() { + return renderToHTMLImpl; + } +}); +const _jsxruntime = require("react/jsx-runtime"); +const _apiutils = require("./api-utils"); +const _getcookieparser = require("./api-utils/get-cookie-parser"); +const _react = /*#__PURE__*/ _interop_require_default(require("react")); +const _ReactDOMServerPages = /*#__PURE__*/ _interop_require_default(require("next/dist/server/ReactDOMServerPages")); +const _styledjsx = require("styled-jsx"); +const _constants = require("../lib/constants"); +const _constants1 = require("../shared/lib/constants"); +const _isserializableprops = require("../lib/is-serializable-props"); +const _head = require("../shared/lib/head"); +const _headmanagercontextsharedruntime = require("../shared/lib/head-manager-context.shared-runtime"); +const _loadablesharedruntime = /*#__PURE__*/ _interop_require_default(require("../shared/lib/loadable.shared-runtime")); +const _loadablecontextsharedruntime = require("../shared/lib/loadable-context.shared-runtime"); +const _routercontextsharedruntime = require("../shared/lib/router-context.shared-runtime"); +const _isdynamic = require("../shared/lib/router/utils/is-dynamic"); +const _utils = require("../shared/lib/utils"); +const _htmlcontextsharedruntime = require("../shared/lib/html-context.shared-runtime"); +const _normalizepagepath = require("../shared/lib/page-path/normalize-page-path"); +const _denormalizepagepath = require("../shared/lib/page-path/denormalize-page-path"); +const _requestmeta = require("./request-meta"); +const _redirectstatus = require("../lib/redirect-status"); +const _renderresult = /*#__PURE__*/ _interop_require_default(require("./render-result")); +const _iserror = /*#__PURE__*/ _interop_require_default(require("../lib/is-error")); +const _nodewebstreamshelper = require("./stream-utils/node-web-streams-helper"); +const _imageconfigcontextsharedruntime = require("../shared/lib/image-config-context.shared-runtime"); +const _stripansi = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/strip-ansi")); +const _internalutils = require("./internal-utils"); +const _adapters = require("../shared/lib/router/adapters"); +const _approutercontextsharedruntime = require("../shared/lib/app-router-context.shared-runtime"); +const _hooksclientcontextsharedruntime = require("../shared/lib/hooks-client-context.shared-runtime"); +const _tracer = require("./lib/trace/tracer"); +const _constants2 = require("./lib/trace/constants"); +const _reflect = require("./web/spec-extension/adapters/reflect"); +const _cachecontrol = require("./lib/cache-control"); +const _errorsource = require("../shared/lib/error-source"); +const _getscriptnoncefromheader = require("./app-render/get-script-nonce-from-header"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +let tryGetPreviewData; +let warn; +let postProcessHTML; +const DOCTYPE = ''; +if (process.env.NEXT_RUNTIME !== 'edge') { + tryGetPreviewData = require('./api-utils/node/try-get-preview-data').tryGetPreviewData; + warn = require('../build/output/log').warn; + postProcessHTML = require('./post-process').postProcessHTML; +} else { + warn = console.warn.bind(console); + postProcessHTML = async (html)=>html; +} +function noRouter() { + const message = 'No router instance found. you should only use "next/router" inside the client side of your app. https://nextjs.org/docs/messages/no-router-instance'; + throw Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E1027", + enumerable: false, + configurable: true + }); +} +async function renderToString(element) { + const renderStream = await _ReactDOMServerPages.default.renderToReadableStream(element); + await renderStream.allReady; + return (0, _nodewebstreamshelper.streamToString)(renderStream); +} +class ServerRouter { + constructor(pathname, query, as, { isFallback }, isReady, basePath, locale, locales, defaultLocale, domainLocales, isPreview, isLocaleDomain){ + this.route = pathname.replace(/\/$/, '') || '/'; + this.pathname = pathname; + this.query = query; + this.asPath = as; + this.isFallback = isFallback; + this.basePath = basePath; + this.locale = locale; + this.locales = locales; + this.defaultLocale = defaultLocale; + this.isReady = isReady; + this.domainLocales = domainLocales; + this.isPreview = !!isPreview; + this.isLocaleDomain = !!isLocaleDomain; + } + push() { + noRouter(); + } + replace() { + noRouter(); + } + reload() { + noRouter(); + } + back() { + noRouter(); + } + forward() { + noRouter(); + } + prefetch() { + noRouter(); + } + beforePopState() { + noRouter(); + } +} +function enhanceComponents(options, App, Component) { + // For backwards compatibility + if (typeof options === 'function') { + return { + App, + Component: options(Component) + }; + } + return { + App: options.enhanceApp ? options.enhanceApp(App) : App, + Component: options.enhanceComponent ? options.enhanceComponent(Component) : Component + }; +} +function renderPageTree(App, Component, props) { + return /*#__PURE__*/ (0, _jsxruntime.jsx)(App, { + Component: Component, + ...props + }); +} +const invalidKeysMsg = (methodName, invalidKeys)=>{ + const docsPathname = `invalid-${methodName.toLocaleLowerCase()}-value`; + return `Additional keys were returned from \`${methodName}\`. Properties intended for your component must be nested under the \`props\` key, e.g.:` + `\n\n\treturn { props: { title: 'My Title', content: '...' } }` + `\n\nKeys that need to be moved: ${invalidKeys.join(', ')}.` + `\nRead more: https://nextjs.org/docs/messages/${docsPathname}`; +}; +function checkRedirectValues(redirect, req, method) { + const { destination, permanent, statusCode, basePath } = redirect; + let errors = []; + const hasStatusCode = typeof statusCode !== 'undefined'; + const hasPermanent = typeof permanent !== 'undefined'; + if (hasPermanent && hasStatusCode) { + errors.push(`\`permanent\` and \`statusCode\` can not both be provided`); + } else if (hasPermanent && typeof permanent !== 'boolean') { + errors.push(`\`permanent\` must be \`true\` or \`false\``); + } else if (hasStatusCode && !_redirectstatus.allowedStatusCodes.has(statusCode)) { + errors.push(`\`statusCode\` must undefined or one of ${[ + ..._redirectstatus.allowedStatusCodes + ].join(', ')}`); + } + const destinationType = typeof destination; + if (destinationType !== 'string') { + errors.push(`\`destination\` should be string but received ${destinationType}`); + } + const basePathType = typeof basePath; + if (basePathType !== 'undefined' && basePathType !== 'boolean') { + errors.push(`\`basePath\` should be undefined or a false, received ${basePathType}`); + } + if (errors.length > 0) { + throw Object.defineProperty(new Error(`Invalid redirect object returned from ${method} for ${req.url}\n` + errors.join(' and ') + '\n' + `See more info here: https://nextjs.org/docs/messages/invalid-redirect-gssp`), "__NEXT_ERROR_CODE", { + value: "E185", + enumerable: false, + configurable: true + }); + } +} +function errorToJSON(err) { + let source = 'server'; + if (process.env.NEXT_RUNTIME !== 'edge') { + source = (0, _errorsource.getErrorSource)(err) || 'server'; + } + return { + name: err.name, + source, + message: (0, _stripansi.default)(err.message), + stack: err.stack, + digest: err.digest + }; +} +function serializeError(dev, err) { + if (dev) { + return errorToJSON(err); + } + return { + name: 'Internal Server Error.', + message: '500 - Internal Server Error.', + statusCode: 500 + }; +} +function getSafariCacheBusterQueryString(req) { + if (process.env.__NEXT_DEV_SERVER) { + const userAgent = (req.headers['user-agent'] || '').toLowerCase(); + if (userAgent.includes('safari') && !userAgent.includes('chrome')) { + return `?ts=${Date.now()}`; + } + } + return ''; +} +async function renderToHTMLImpl(req, res, pathname, query, renderOpts, extra, sharedContext, renderContext) { + // Adds support for reading `cookies` in `getServerSideProps` when SSR. + (0, _apiutils.setLazyProp)({ + req: req + }, 'cookies', (0, _getcookieparser.getCookieParser)(req.headers)); + // cssCacheBuster is a workaround for a Safari bug + // (https://bugs.webkit.org/show_bug.cgi?id=187726) where preloaded CSS + // resources are cached and not re-fetched on HMR. It must only be applied + // to CSS and font assets — not to script tags — because the Turbopack + // runtime infers ASSET_SUFFIX from the executing script's query string and + // leaks it onto all static asset URLs (including images), causing + // next/image validation errors. + // See https://github.com/vercel/next.js/issues/92118. + const cssCacheBuster = getSafariCacheBusterQueryString(req); + const mutableAssetQueryString = sharedContext.deploymentId ? `?dpl=${sharedContext.deploymentId}` : ''; + const assetQueryString = sharedContext.clientAssetToken ? `?dpl=${sharedContext.clientAssetToken}` : ''; + // cssAssetQueryString is assetQueryString with the cacheBuster prepended. + // Use this for CSS and font URLs; use assetQueryString for script URLs. + const cssAssetQueryString = cssCacheBuster + (sharedContext.clientAssetToken ? `${cssCacheBuster ? '&' : '?'}dpl=${sharedContext.clientAssetToken}` : ''); + const metadata = {}; + // don't modify original query object + query = Object.assign({}, query); + const { err, pageConfig = {}, buildManifest, reactLoadableManifest, ErrorDebug, getStaticProps, getStaticPaths, getServerSideProps, isNextDataRequest, params, previewProps, basePath, images, runtime: globalRuntime, isExperimentalCompile, expireTime } = renderOpts; + const { App } = extra; + let Document = extra.Document; + let Component = renderOpts.Component; + const OriginComponent = Component; + const isFallback = renderContext.isFallback ?? false; + const notFoundSrcPage = renderContext.developmentNotFoundSourcePage; + // next internal queries should be stripped out + (0, _internalutils.stripInternalQueries)(query); + const isSSG = !!getStaticProps; + const isBuildTimeSSG = isSSG && renderOpts.isBuildTimePrerendering; + const defaultAppGetInitialProps = App.getInitialProps === App.origGetInitialProps; + const hasPageGetInitialProps = !!(Component == null ? void 0 : Component.getInitialProps); + const hasPageScripts = Component == null ? void 0 : Component.unstable_scriptLoader; + const pageIsDynamic = (0, _isdynamic.isDynamicRoute)(pathname); + const defaultErrorGetInitialProps = pathname === '/_error' && Component.getInitialProps === Component.origGetInitialProps; + if (renderOpts.isBuildTimePrerendering && hasPageGetInitialProps && !defaultErrorGetInitialProps) { + warn(`Detected getInitialProps on page '${pathname}'` + ` while running export. It's recommended to use getStaticProps` + ` which has a more correct behavior for static exporting.` + `\nRead more: https://nextjs.org/docs/messages/get-initial-props-export`); + } + let isAutoExport = !hasPageGetInitialProps && defaultAppGetInitialProps && !isSSG && !getServerSideProps; + // if we are running from experimental compile and the page + // would normally be automatically statically optimized + // ensure we set cache header so it's not rendered on-demand + // every request + if (isAutoExport && !process.env.__NEXT_DEV_SERVER && isExperimentalCompile) { + res.setHeader('Cache-Control', (0, _cachecontrol.getCacheControlHeader)({ + revalidate: false, + expire: expireTime + })); + isAutoExport = false; + } + if (hasPageGetInitialProps && isSSG) { + throw Object.defineProperty(new Error(_constants.SSG_GET_INITIAL_PROPS_CONFLICT + ` ${pathname}`), "__NEXT_ERROR_CODE", { + value: "E262", + enumerable: false, + configurable: true + }); + } + if (hasPageGetInitialProps && getServerSideProps) { + throw Object.defineProperty(new Error(_constants.SERVER_PROPS_GET_INIT_PROPS_CONFLICT + ` ${pathname}`), "__NEXT_ERROR_CODE", { + value: "E262", + enumerable: false, + configurable: true + }); + } + if (getServerSideProps && isSSG) { + throw Object.defineProperty(new Error(_constants.SERVER_PROPS_SSG_CONFLICT + ` ${pathname}`), "__NEXT_ERROR_CODE", { + value: "E262", + enumerable: false, + configurable: true + }); + } + if (getServerSideProps && renderOpts.nextConfigOutput === 'export') { + throw Object.defineProperty(new Error('getServerSideProps cannot be used with "output: export". See more info here: https://nextjs.org/docs/advanced-features/static-html-export'), "__NEXT_ERROR_CODE", { + value: "E369", + enumerable: false, + configurable: true + }); + } + if (getStaticPaths && !pageIsDynamic) { + throw Object.defineProperty(new Error(`getStaticPaths is only allowed for dynamic SSG pages and was found on '${pathname}'.` + `\nRead more: https://nextjs.org/docs/messages/non-dynamic-getstaticpaths-usage`), "__NEXT_ERROR_CODE", { + value: "E187", + enumerable: false, + configurable: true + }); + } + if (!!getStaticPaths && !isSSG) { + throw Object.defineProperty(new Error(`getStaticPaths was added without a getStaticProps in ${pathname}. Without getStaticProps, getStaticPaths does nothing`), "__NEXT_ERROR_CODE", { + value: "E447", + enumerable: false, + configurable: true + }); + } + if (isSSG && pageIsDynamic && !getStaticPaths) { + throw Object.defineProperty(new Error(`getStaticPaths is required for dynamic SSG pages and is missing for '${pathname}'.` + `\nRead more: https://nextjs.org/docs/messages/invalid-getstaticpaths-value`), "__NEXT_ERROR_CODE", { + value: "E255", + enumerable: false, + configurable: true + }); + } + let asPath = renderOpts.resolvedAsPath || req.url; + if (process.env.__NEXT_DEV_SERVER) { + const { isValidElementType } = require('next/dist/compiled/react-is'); + if (!isValidElementType(Component)) { + throw Object.defineProperty(new Error(`The default export is not a React Component in page: "${pathname}"`), "__NEXT_ERROR_CODE", { + value: "E286", + enumerable: false, + configurable: true + }); + } + if (!isValidElementType(App)) { + throw Object.defineProperty(new Error(`The default export is not a React Component in page: "/_app"`), "__NEXT_ERROR_CODE", { + value: "E464", + enumerable: false, + configurable: true + }); + } + if (!isValidElementType(Document)) { + throw Object.defineProperty(new Error(`The default export is not a React Component in page: "/_document"`), "__NEXT_ERROR_CODE", { + value: "E511", + enumerable: false, + configurable: true + }); + } + if (isAutoExport || isFallback) { + // remove query values except ones that will be set during export + query = {}; + asPath = `${pathname}${// ensure trailing slash is present for non-dynamic auto-export pages + req.url.endsWith('/') && pathname !== '/' && !pageIsDynamic ? '/' : ''}`; + req.url = pathname; + } + if (pathname === '/404' && (hasPageGetInitialProps || getServerSideProps)) { + throw Object.defineProperty(new Error(`\`pages/404\` ${_constants.STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR}`), "__NEXT_ERROR_CODE", { + value: "E134", + enumerable: false, + configurable: true + }); + } + if (_constants1.STATIC_STATUS_PAGES.includes(pathname) && (hasPageGetInitialProps || getServerSideProps)) { + throw Object.defineProperty(new Error(`\`pages${pathname}\` ${_constants.STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR}`), "__NEXT_ERROR_CODE", { + value: "E125", + enumerable: false, + configurable: true + }); + } + if (renderOpts == null ? void 0 : renderOpts.setIsrStatus) { + renderOpts.setIsrStatus(asPath, isSSG || isAutoExport); + } + } + for (const methodName of [ + 'getStaticProps', + 'getServerSideProps', + 'getStaticPaths' + ]){ + if (Component == null ? void 0 : Component[methodName]) { + throw Object.defineProperty(new Error(`page ${pathname} ${methodName} ${_constants.GSSP_COMPONENT_MEMBER_ERROR}`), "__NEXT_ERROR_CODE", { + value: "E417", + enumerable: false, + configurable: true + }); + } + } + await _loadablesharedruntime.default.preloadAll() // Make sure all dynamic imports are loaded + ; + let isPreview = undefined; + let previewData; + if ((isSSG || getServerSideProps) && !isFallback && process.env.NEXT_RUNTIME !== 'edge' && previewProps) { + // Reads of this are cached on the `req` object, so this should resolve + // instantly. There's no need to pass this data down from a previous + // invoke. + previewData = tryGetPreviewData(req, res, previewProps, !!renderOpts.multiZoneDraftMode); + isPreview = previewData !== false; + } + // url will always be set + const routerIsReady = !!(getServerSideProps || hasPageGetInitialProps || !defaultAppGetInitialProps && !isSSG || isExperimentalCompile); + const router = new ServerRouter(pathname, query, asPath, { + isFallback: isFallback + }, routerIsReady, basePath, renderOpts.locale, renderOpts.locales, renderOpts.defaultLocale, renderOpts.domainLocales, isPreview, (0, _requestmeta.getRequestMeta)(req, 'isLocaleDomain')); + const appRouter = (0, _adapters.adaptForAppRouterInstance)(router); + let scriptLoader = {}; + const jsxStyleRegistry = (0, _styledjsx.createStyleRegistry)(); + let head = (0, _head.defaultHead)(); + const reactLoadableModules = []; + let initialScripts = {}; + if (hasPageScripts) { + initialScripts.beforeInteractive = [].concat(hasPageScripts()).filter((script)=>script.props.strategy === 'beforeInteractive').map((script)=>script.props); + } + const csp = req.headers['content-security-policy'] || req.headers['content-security-policy-report-only']; + const nonce = typeof csp === 'string' ? (0, _getscriptnoncefromheader.getScriptNonceFromHeader)(csp) : undefined; + const AppContainer = ({ children })=>/*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.AppRouterContext.Provider, { + value: appRouter, + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.SearchParamsContext.Provider, { + value: (0, _adapters.adaptForSearchParams)(router), + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_adapters.PathnameContextProviderAdapter, { + router: router, + isAutoExport: isAutoExport, + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.PathParamsContext.Provider, { + value: (0, _adapters.adaptForPathParams)(router), + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_routercontextsharedruntime.RouterContext.Provider, { + value: router, + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_headmanagercontextsharedruntime.HeadManagerContext.Provider, { + value: { + updateHead: (state)=>{ + head = state; + }, + updateScripts: (scripts)=>{ + scriptLoader = scripts; + }, + scripts: initialScripts, + mountedInstances: new Set(), + nonce + }, + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_loadablecontextsharedruntime.LoadableContext.Provider, { + value: (moduleName)=>reactLoadableModules.push(moduleName), + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_styledjsx.StyleRegistry, { + registry: jsxStyleRegistry, + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_imageconfigcontextsharedruntime.ImageConfigContext.Provider, { + value: images, + children: children + }) + }) + }) + }) + }) + }) + }) + }) + }); + // The `useId` API uses the path indexes to generate an ID for each node. + // To guarantee the match of hydration, we need to ensure that the structure + // of wrapper nodes is isomorphic in server and client. + // TODO: With `enhanceApp` and `enhanceComponents` options, this approach may + // not be useful. + // https://github.com/facebook/react/pull/22644 + const Noop = ()=>null; + const AppContainerWithIsomorphicFiberStructure = ({ children })=>{ + return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, { + children: [ + /*#__PURE__*/ (0, _jsxruntime.jsx)(Noop, {}), + /*#__PURE__*/ (0, _jsxruntime.jsx)(AppContainer, { + children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, { + children: [ + children, + /*#__PURE__*/ (0, _jsxruntime.jsx)(Noop, {}) + ] + }) + }) + ] + }); + }; + const ctx = { + err, + req: isAutoExport ? undefined : req, + res: isAutoExport ? undefined : res, + pathname, + query, + asPath, + locale: renderOpts.locale, + locales: renderOpts.locales, + defaultLocale: renderOpts.defaultLocale, + AppTree: (props)=>{ + return /*#__PURE__*/ (0, _jsxruntime.jsx)(AppContainerWithIsomorphicFiberStructure, { + children: renderPageTree(App, OriginComponent, { + ...props, + router + }) + }); + }, + defaultGetInitialProps: async (docCtx, options = {})=>{ + const enhanceApp = (AppComp)=>{ + return (props)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(AppComp, { + ...props + }); + }; + const { html, head: renderPageHead } = await docCtx.renderPage({ + enhanceApp + }); + const styles = jsxStyleRegistry.styles({ + nonce: options.nonce || nonce + }); + jsxStyleRegistry.flush(); + return { + html, + head: renderPageHead, + styles + }; + } + }; + let props; + const nextExport = !isSSG && (renderOpts.isBuildTimePrerendering || process.env.__NEXT_DEV_SERVER && (isAutoExport || isFallback)); + const styledJsxInsertedHTML = ()=>{ + const styles = jsxStyleRegistry.styles(); + jsxStyleRegistry.flush(); + return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, { + children: styles + }); + }; + props = await (0, _utils.loadGetInitialProps)(App, { + AppTree: ctx.AppTree, + Component, + router, + ctx + }); + if ((isSSG || getServerSideProps) && isPreview) { + props.__N_PREVIEW = true; + } + if (isSSG) { + props[_constants1.STATIC_PROPS_ID] = true; + } + if (isSSG && !isFallback) { + let data; + try { + data = await (0, _tracer.getTracer)().trace(_constants2.RenderSpan.getStaticProps, { + spanName: `getStaticProps ${pathname}`, + attributes: { + 'next.route': pathname + } + }, ()=>getStaticProps({ + ...pageIsDynamic ? { + params + } : undefined, + ...isPreview ? { + draftMode: true, + preview: true, + previewData: previewData + } : undefined, + locales: [ + ...renderOpts.locales ?? [] + ], + locale: renderOpts.locale, + defaultLocale: renderOpts.defaultLocale, + revalidateReason: renderOpts.isOnDemandRevalidate ? 'on-demand' : isBuildTimeSSG ? 'build' : 'stale' + })); + } catch (staticPropsError) { + // remove not found error code to prevent triggering legacy + // 404 rendering + if (staticPropsError && staticPropsError.code === 'ENOENT') { + delete staticPropsError.code; + } + throw staticPropsError; + } + if (data == null) { + throw Object.defineProperty(new Error(_constants.GSP_NO_RETURNED_VALUE), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + const invalidKeys = Object.keys(data).filter((key)=>key !== 'revalidate' && key !== 'props' && key !== 'redirect' && key !== 'notFound'); + if (invalidKeys.includes('unstable_revalidate')) { + throw Object.defineProperty(new Error(_constants.UNSTABLE_REVALIDATE_RENAME_ERROR), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + if (invalidKeys.length) { + throw Object.defineProperty(new Error(invalidKeysMsg('getStaticProps', invalidKeys)), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + if (process.env.NODE_ENV !== 'production') { + if (typeof data.notFound !== 'undefined' && typeof data.redirect !== 'undefined') { + throw Object.defineProperty(new Error(`\`redirect\` and \`notFound\` can not both be returned from ${isSSG ? 'getStaticProps' : 'getServerSideProps'} at the same time. Page: ${pathname}\nSee more info here: https://nextjs.org/docs/messages/gssp-mixed-not-found-redirect`), "__NEXT_ERROR_CODE", { + value: "E454", + enumerable: false, + configurable: true + }); + } + } + if ('notFound' in data && data.notFound) { + if (pathname === '/404') { + throw Object.defineProperty(new Error(`The /404 page can not return notFound in "getStaticProps", please remove it to continue!`), "__NEXT_ERROR_CODE", { + value: "E121", + enumerable: false, + configurable: true + }); + } + metadata.isNotFound = true; + } + if ('redirect' in data && data.redirect && typeof data.redirect === 'object') { + checkRedirectValues(data.redirect, req, 'getStaticProps'); + if (isBuildTimeSSG) { + throw Object.defineProperty(new Error(`\`redirect\` can not be returned from getStaticProps during prerendering (${req.url})\n` + `See more info here: https://nextjs.org/docs/messages/gsp-redirect-during-prerender`), "__NEXT_ERROR_CODE", { + value: "E497", + enumerable: false, + configurable: true + }); + } + ; + data.props = { + __N_REDIRECT: data.redirect.destination, + __N_REDIRECT_STATUS: (0, _redirectstatus.getRedirectStatus)(data.redirect) + }; + if (typeof data.redirect.basePath !== 'undefined') { + ; + data.props.__N_REDIRECT_BASE_PATH = data.redirect.basePath; + } + metadata.isRedirect = true; + } + if ((process.env.__NEXT_DEV_SERVER || isBuildTimeSSG) && !metadata.isNotFound && !(0, _isserializableprops.isSerializableProps)(pathname, 'getStaticProps', data.props)) { + // this fn should throw an error instead of ever returning `false` + throw Object.defineProperty(new Error('invariant: getStaticProps did not return valid props. Please report this.'), "__NEXT_ERROR_CODE", { + value: "E129", + enumerable: false, + configurable: true + }); + } + let revalidate; + if ('revalidate' in data) { + if (data.revalidate && renderOpts.nextConfigOutput === 'export') { + throw Object.defineProperty(new Error('ISR cannot be used with "output: export". See more info here: https://nextjs.org/docs/advanced-features/static-html-export'), "__NEXT_ERROR_CODE", { + value: "E201", + enumerable: false, + configurable: true + }); + } + if (typeof data.revalidate === 'number') { + if (!Number.isInteger(data.revalidate)) { + throw Object.defineProperty(new Error(`A page's revalidate option must be seconds expressed as a natural number for ${req.url}. Mixed numbers, such as '${data.revalidate}', cannot be used.` + `\nTry changing the value to '${Math.ceil(data.revalidate)}' or using \`Math.ceil()\` if you're computing the value.`), "__NEXT_ERROR_CODE", { + value: "E438", + enumerable: false, + configurable: true + }); + } else if (data.revalidate <= 0) { + throw Object.defineProperty(new Error(`A page's revalidate option can not be less than or equal to zero for ${req.url}. A revalidate option of zero means to revalidate after _every_ request, and implies stale data cannot be tolerated.` + `\n\nTo never revalidate, you can set revalidate to \`false\` (only ran once at build-time).` + `\nTo revalidate as soon as possible, you can set the value to \`1\`.`), "__NEXT_ERROR_CODE", { + value: "E311", + enumerable: false, + configurable: true + }); + } else { + if (data.revalidate > 31536000) { + // if it's greater than a year for some reason error + console.warn(`Warning: A page's revalidate option was set to more than a year for ${req.url}. This may have been done in error.` + `\nTo only run getStaticProps at build-time and not revalidate at runtime, you can set \`revalidate\` to \`false\`!`); + } + revalidate = data.revalidate; + } + } else if (data.revalidate === true) { + // When enabled, revalidate after 1 second. This value is optimal for + // the most up-to-date page possible, but without a 1-to-1 + // request-refresh ratio. + revalidate = 1; + } else if (data.revalidate === false || typeof data.revalidate === 'undefined') { + // By default, we never revalidate. + revalidate = false; + } else { + throw Object.defineProperty(new Error(`A page's revalidate option must be seconds expressed as a natural number. Mixed numbers and strings cannot be used. Received '${JSON.stringify(data.revalidate)}' for ${req.url}`), "__NEXT_ERROR_CODE", { + value: "E161", + enumerable: false, + configurable: true + }); + } + } else { + // By default, we never revalidate. + revalidate = false; + } + props.pageProps = Object.assign({}, props.pageProps, 'props' in data ? data.props : undefined); + // pass up cache control and props for export + metadata.cacheControl = { + revalidate, + expire: undefined + }; + metadata.pageData = props; + // this must come after revalidate is added to renderResultMeta + if (metadata.isNotFound) { + return new _renderresult.default(null, { + metadata, + contentType: null + }); + } + } + if (getServerSideProps) { + props[_constants1.SERVER_PROPS_ID] = true; + } + if (getServerSideProps && !isFallback) { + let data; + let canAccessRes = true; + let resOrProxy = res; + let deferredContent = false; + if (process.env.NODE_ENV !== 'production') { + resOrProxy = new Proxy(res, { + get: function(obj, prop) { + if (!canAccessRes) { + const message = `You should not access 'res' after getServerSideProps resolves.` + `\nRead more: https://nextjs.org/docs/messages/gssp-no-mutating-res`; + if (deferredContent) { + throw Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E1028", + enumerable: false, + configurable: true + }); + } else { + warn(message); + } + } + if (typeof prop === 'symbol') { + return _reflect.ReflectAdapter.get(obj, prop, res); + } + return _reflect.ReflectAdapter.get(obj, prop, res); + } + }); + } + try { + data = await (0, _tracer.getTracer)().trace(_constants2.RenderSpan.getServerSideProps, { + spanName: `getServerSideProps ${pathname}`, + attributes: { + 'next.route': pathname + } + }, async ()=>getServerSideProps({ + req: req, + res: resOrProxy, + query, + resolvedUrl: renderOpts.resolvedUrl, + ...pageIsDynamic ? { + params + } : undefined, + ...previewData !== false ? { + draftMode: true, + preview: true, + previewData: previewData + } : undefined, + // We create a copy here to avoid having the types of + // `getServerSideProps` change. This ensures that users can't + // mutate this array and have it poison the reference. + locales: [ + ...renderOpts.locales ?? [] + ], + locale: renderOpts.locale, + defaultLocale: renderOpts.defaultLocale + })); + canAccessRes = false; + metadata.cacheControl = { + revalidate: 0, + expire: undefined + }; + } catch (serverSidePropsError) { + // remove not found error code to prevent triggering legacy + // 404 rendering + if ((0, _iserror.default)(serverSidePropsError) && serverSidePropsError.code === 'ENOENT') { + delete serverSidePropsError.code; + } + throw serverSidePropsError; + } + if (data == null) { + throw Object.defineProperty(new Error(_constants.GSSP_NO_RETURNED_VALUE), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + if (data.props instanceof Promise) { + deferredContent = true; + } + const invalidKeys = Object.keys(data).filter((key)=>key !== 'props' && key !== 'redirect' && key !== 'notFound'); + if (data.unstable_notFound) { + throw Object.defineProperty(new Error(`unstable_notFound has been renamed to notFound, please update the field to continue. Page: ${pathname}`), "__NEXT_ERROR_CODE", { + value: "E516", + enumerable: false, + configurable: true + }); + } + if (data.unstable_redirect) { + throw Object.defineProperty(new Error(`unstable_redirect has been renamed to redirect, please update the field to continue. Page: ${pathname}`), "__NEXT_ERROR_CODE", { + value: "E284", + enumerable: false, + configurable: true + }); + } + if (invalidKeys.length) { + throw Object.defineProperty(new Error(invalidKeysMsg('getServerSideProps', invalidKeys)), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + if ('notFound' in data && data.notFound) { + if (pathname === '/404') { + throw Object.defineProperty(new Error(`The /404 page can not return notFound in "getStaticProps", please remove it to continue!`), "__NEXT_ERROR_CODE", { + value: "E121", + enumerable: false, + configurable: true + }); + } + metadata.isNotFound = true; + return new _renderresult.default(null, { + metadata, + contentType: null + }); + } + if ('redirect' in data && typeof data.redirect === 'object') { + checkRedirectValues(data.redirect, req, 'getServerSideProps'); + data.props = { + __N_REDIRECT: data.redirect.destination, + __N_REDIRECT_STATUS: (0, _redirectstatus.getRedirectStatus)(data.redirect) + }; + if (typeof data.redirect.basePath !== 'undefined') { + ; + data.props.__N_REDIRECT_BASE_PATH = data.redirect.basePath; + } + metadata.isRedirect = true; + } + if (deferredContent) { + ; + data.props = await data.props; + } + if ((process.env.__NEXT_DEV_SERVER || isBuildTimeSSG) && !(0, _isserializableprops.isSerializableProps)(pathname, 'getServerSideProps', data.props)) { + // this fn should throw an error instead of ever returning `false` + throw Object.defineProperty(new Error('invariant: getServerSideProps did not return valid props. Please report this.'), "__NEXT_ERROR_CODE", { + value: "E31", + enumerable: false, + configurable: true + }); + } + props.pageProps = Object.assign({}, props.pageProps, data.props); + metadata.pageData = props; + } + if (!isSSG && // we only show this warning for legacy pages + !getServerSideProps && process.env.NODE_ENV !== 'production' && Object.keys((props == null ? void 0 : props.pageProps) || {}).includes('url')) { + console.warn(`The prop \`url\` is a reserved prop in Next.js for legacy reasons and will be overridden on page ${pathname}\n` + `See more info here: https://nextjs.org/docs/messages/reserved-page-prop`); + } + // Avoid rendering page un-necessarily for getServerSideProps data request + // and getServerSideProps/getStaticProps redirects + if (isNextDataRequest && !isSSG || metadata.isRedirect) { + return new _renderresult.default(JSON.stringify(props), { + metadata, + contentType: _constants.JSON_CONTENT_TYPE_HEADER + }); + } + // We don't call getStaticProps or getServerSideProps while generating + // the fallback so make sure to set pageProps to an empty object + if (isFallback) { + props.pageProps = {}; + } + // the response might be finished on the getInitialProps call + if ((0, _utils.isResSent)(res) && !isSSG) return _renderresult.default.EMPTY; + // we preload the buildManifest for auto-export dynamic pages + // to speed up hydrating query values + let filteredBuildManifest = buildManifest; + if (isAutoExport && pageIsDynamic) { + const page = (0, _denormalizepagepath.denormalizePagePath)((0, _normalizepagepath.normalizePagePath)(pathname)); + // This code would be much cleaner using `immer` and directly pushing into + // the result from `getPageFiles`, we could maybe consider that in the + // future. + if (page in filteredBuildManifest.pages) { + filteredBuildManifest = { + ...filteredBuildManifest, + pages: { + ...filteredBuildManifest.pages, + [page]: [ + ...filteredBuildManifest.pages[page], + ...filteredBuildManifest.lowPriorityFiles.filter((f)=>f.includes('_buildManifest')) + ] + }, + lowPriorityFiles: filteredBuildManifest.lowPriorityFiles.filter((f)=>!f.includes('_buildManifest')) + }; + } + } + const Body = ({ children })=>{ + return /*#__PURE__*/ (0, _jsxruntime.jsx)("div", { + id: "__next", + children: children + }); + }; + const renderDocument = async ()=>{ + // For `Document`, there are two cases that we don't support: + // 1. Using `Document.getInitialProps` in the Edge runtime. + // 2. Using the class component `Document` with concurrent features. + const BuiltinFunctionalDocument = Document[_constants1.NEXT_BUILTIN_DOCUMENT]; + if (process.env.NEXT_RUNTIME === 'edge' && Document.getInitialProps) { + // In the Edge runtime, `Document.getInitialProps` isn't supported. + // We throw an error here if it's customized. + if (BuiltinFunctionalDocument) { + Document = BuiltinFunctionalDocument; + } else { + throw Object.defineProperty(new Error('`getInitialProps` in Document component is not supported with the Edge Runtime.'), "__NEXT_ERROR_CODE", { + value: "E386", + enumerable: false, + configurable: true + }); + } + } + async function loadDocumentInitialProps(renderShell) { + const renderPage = async (options = {})=>{ + if (ctx.err && ErrorDebug) { + // Always start rendering the shell even if there's an error. + if (renderShell) { + renderShell(App, Component); + } + const html = await renderToString(/*#__PURE__*/ (0, _jsxruntime.jsx)(Body, { + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(ErrorDebug, {}) + })); + return { + html, + head + }; + } + if (process.env.__NEXT_DEV_SERVER && (props.router || props.Component)) { + throw Object.defineProperty(new Error(`'router' and 'Component' can not be returned in getInitialProps from _app.js https://nextjs.org/docs/messages/cant-override-next-props`), "__NEXT_ERROR_CODE", { + value: "E230", + enumerable: false, + configurable: true + }); + } + const { App: EnhancedApp, Component: EnhancedComponent } = enhanceComponents(options, App, Component); + const stream = await renderShell(EnhancedApp, EnhancedComponent); + await stream.allReady; + const html = await (0, _nodewebstreamshelper.streamToString)(stream); + return { + html, + head + }; + }; + const documentCtx = { + ...ctx, + renderPage + }; + const docProps = await (0, _utils.loadGetInitialProps)(Document, documentCtx); + // the response might be finished on the getInitialProps call + if ((0, _utils.isResSent)(res) && !isSSG) return null; + if (!docProps || typeof docProps.html !== 'string') { + const message = `"${(0, _utils.getDisplayName)(Document)}.getInitialProps()" should resolve to an object with a "html" prop set with a valid html string`; + throw Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E1039", + enumerable: false, + configurable: true + }); + } + return { + docProps, + documentCtx + }; + } + const renderContent = (_App, _Component)=>{ + const EnhancedApp = _App || App; + const EnhancedComponent = _Component || Component; + return ctx.err && ErrorDebug ? /*#__PURE__*/ (0, _jsxruntime.jsx)(Body, { + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(ErrorDebug, {}) + }) : /*#__PURE__*/ (0, _jsxruntime.jsx)(Body, { + children: /*#__PURE__*/ (0, _jsxruntime.jsx)(AppContainerWithIsomorphicFiberStructure, { + children: renderPageTree(EnhancedApp, EnhancedComponent, { + ...props, + router + }) + }) + }); + }; + // Always using react concurrent rendering mode with required react version 18.x + const renderShell = async (EnhancedApp, EnhancedComponent)=>{ + const content = renderContent(EnhancedApp, EnhancedComponent); + return await (0, _nodewebstreamshelper.renderToInitialFizzStream)({ + ReactDOMServer: _ReactDOMServerPages.default, + element: content + }); + }; + const hasDocumentGetInitialProps = process.env.NEXT_RUNTIME !== 'edge' && !!Document.getInitialProps; + // If it has getInitialProps, we will render the shell in `renderPage`. + // Otherwise we do it right now. + let documentInitialPropsRes; + let content; + if (hasDocumentGetInitialProps) { + documentInitialPropsRes = await loadDocumentInitialProps(renderShell); + if (documentInitialPropsRes === null) { + content = null; + } else { + const { docProps } = documentInitialPropsRes; + content = docProps.html; + } + } else { + documentInitialPropsRes = {}; + const stream = await renderShell(App, Component); + await stream.allReady; + content = await (0, _nodewebstreamshelper.streamToString)(stream); + } + // @ts-ignore: documentInitialPropsRes is set + const { docProps } = documentInitialPropsRes || {}; + const documentElement = (htmlProps)=>{ + if (process.env.NEXT_RUNTIME === 'edge') { + return Document(); + } else { + return /*#__PURE__*/ (0, _jsxruntime.jsx)(Document, { + ...htmlProps, + ...docProps + }); + } + }; + let styles; + if (hasDocumentGetInitialProps) { + styles = docProps.styles; + head = docProps.head; + } else { + styles = jsxStyleRegistry.styles(); + jsxStyleRegistry.flush(); + } + // Registry is now flushed; rawStyledJsxInsertedHTML will be empty. + const rawStyledJsxInsertedHTML = await renderToString(styledJsxInsertedHTML()); + if (content === null) { + return null; + } + const contentHTML = rawStyledJsxInsertedHTML + content; + return { + contentHTML, + documentElement, + head, + headTags: [], + styles + }; + }; + (0, _tracer.getTracer)().setRootSpanAttribute('next.route', renderOpts.page); + const documentResult = await (0, _tracer.getTracer)().trace(_constants2.RenderSpan.renderDocument, { + spanName: `render route (pages) ${renderOpts.page}`, + attributes: { + 'next.route': renderOpts.page + } + }, async ()=>renderDocument()); + if (!documentResult) { + return new _renderresult.default(null, { + metadata, + contentType: _constants.HTML_CONTENT_TYPE_HEADER + }); + } + const dynamicImportsIds = new Set(); + const dynamicImports = new Set(); + for (const mod of reactLoadableModules){ + const manifestItem = reactLoadableManifest[mod]; + if (manifestItem) { + dynamicImportsIds.add(manifestItem.id); + manifestItem.files.forEach((item)=>{ + dynamicImports.add(item); + }); + } + } + const docComponentsRendered = {}; + const { assetPrefix, defaultLocale, disableOptimizedLoading, domainLocales, locale, locales } = renderOpts; + const htmlProps = { + __NEXT_DATA__: { + props, + page: pathname, + query, + buildId: sharedContext.buildId, + assetPrefix: assetPrefix === '' ? undefined : assetPrefix, + nextExport: nextExport === true ? true : undefined, + autoExport: isAutoExport === true ? true : undefined, + isFallback, + isExperimentalCompile, + dynamicIds: dynamicImportsIds.size === 0 ? undefined : Array.from(dynamicImportsIds), + err: renderOpts.err ? serializeError(!!process.env.__NEXT_DEV_SERVER, renderOpts.err) : undefined, + gsp: !!getStaticProps ? true : undefined, + gssp: !!getServerSideProps ? true : undefined, + customServer: sharedContext.customServer, + gip: hasPageGetInitialProps ? true : undefined, + appGip: !defaultAppGetInitialProps ? true : undefined, + locale, + locales, + defaultLocale, + domainLocales, + isPreview: isPreview === true ? true : undefined, + notFoundSrcPage: notFoundSrcPage && process.env.__NEXT_DEV_SERVER ? notFoundSrcPage : undefined + }, + nonce, + buildManifest: filteredBuildManifest, + docComponentsRendered, + dangerousAsPath: router.asPath, + isDevelopment: !!process.env.__NEXT_DEV_SERVER, + deploymentId: sharedContext.deploymentId, + dynamicImports: Array.from(dynamicImports), + dynamicCssManifest: new Set(renderOpts.dynamicCssManifest || []), + assetPrefix, + // Only enabled in production as development mode has features relying on HMR (style injection for example) + unstable_runtimeJS: process.env.NODE_ENV === 'production' ? pageConfig.unstable_runtimeJS : undefined, + unstable_JsPreload: pageConfig.unstable_JsPreload, + assetQueryString, + cssAssetQueryString, + mutableAssetQueryString, + scriptLoader, + locale, + disableOptimizedLoading, + head: documentResult.head, + headTags: documentResult.headTags, + styles: documentResult.styles, + crossOrigin: renderOpts.crossOrigin, + optimizeCss: renderOpts.optimizeCss, + nextConfigOutput: renderOpts.nextConfigOutput, + nextScriptWorkers: renderOpts.nextScriptWorkers, + runtime: globalRuntime, + largePageDataBytes: renderOpts.largePageDataBytes, + nextFontManifest: renderOpts.nextFontManifest, + experimentalClientTraceMetadata: renderOpts.experimental.clientTraceMetadata + }; + const document = /*#__PURE__*/ (0, _jsxruntime.jsx)(_htmlcontextsharedruntime.HtmlContext.Provider, { + value: htmlProps, + children: documentResult.documentElement(htmlProps) + }); + const documentHTML = await (0, _tracer.getTracer)().trace(_constants2.RenderSpan.renderToString, async ()=>renderToString(document)); + if (process.env.NODE_ENV !== 'production') { + const nonRenderedComponents = []; + const expectedDocComponents = [ + 'Main', + 'Head', + 'NextScript', + 'Html' + ]; + for (const comp of expectedDocComponents){ + if (!docComponentsRendered[comp]) { + nonRenderedComponents.push(comp); + } + } + if (nonRenderedComponents.length) { + const missingComponentList = nonRenderedComponents.map((e)=>`<${e} />`).join(', '); + const plural = nonRenderedComponents.length !== 1 ? 's' : ''; + console.warn(`Your custom Document (pages/_document) did not render all the required subcomponent${plural}.\n` + `Missing component${plural}: ${missingComponentList}\n` + 'Read how to fix here: https://nextjs.org/docs/messages/missing-document-component'); + } + } + const [renderTargetPrefix, renderTargetSuffix] = documentHTML.split('', 2); + let prefix = ''; + if (!documentHTML.startsWith(DOCTYPE)) { + prefix += DOCTYPE; + } + prefix += renderTargetPrefix; + const content = prefix + documentResult.contentHTML + renderTargetSuffix; + const optimizedHtml = await postProcessHTML(content, renderOpts); + return new _renderresult.default(optimizedHtml, { + metadata, + contentType: _constants.HTML_CONTENT_TYPE_HEADER + }); +} +const renderToHTML = (req, res, pathname, query, renderOpts, sharedContext, renderContext)=>{ + return renderToHTMLImpl(req, res, pathname, query, renderOpts, renderOpts, sharedContext, renderContext); +}; + +//# sourceMappingURL=render.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/request-meta.js b/build/node_modules/next/dist/server/request-meta.js new file mode 100644 index 0000000..a06ec6b --- /dev/null +++ b/build/node_modules/next/dist/server/request-meta.js @@ -0,0 +1,55 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + NEXT_REQUEST_META: null, + addRequestMeta: null, + getRequestMeta: null, + removeRequestMeta: null, + setRequestMeta: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + NEXT_REQUEST_META: function() { + return NEXT_REQUEST_META; + }, + addRequestMeta: function() { + return addRequestMeta; + }, + getRequestMeta: function() { + return getRequestMeta; + }, + removeRequestMeta: function() { + return removeRequestMeta; + }, + setRequestMeta: function() { + return setRequestMeta; + } +}); +const NEXT_REQUEST_META = Symbol.for('NextInternalRequestMeta'); +function getRequestMeta(req, key) { + const meta = req[NEXT_REQUEST_META] || {}; + return typeof key === 'string' ? meta[key] : meta; +} +function setRequestMeta(req, meta) { + req[NEXT_REQUEST_META] = meta; + return meta; +} +function addRequestMeta(request, key, value) { + const meta = getRequestMeta(request); + meta[key] = value; + return setRequestMeta(request, meta); +} +function removeRequestMeta(request, key) { + const meta = getRequestMeta(request); + delete meta[key]; + return setRequestMeta(request, meta); +} + +//# sourceMappingURL=request-meta.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/request/connection.js b/build/node_modules/next/dist/server/request/connection.js new file mode 100644 index 0000000..f221ac0 --- /dev/null +++ b/build/node_modules/next/dist/server/request/connection.js @@ -0,0 +1,133 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "connection", { + enumerable: true, + get: function() { + return connection; + } +}); +const _workasyncstorageexternal = require("../app-render/work-async-storage.external"); +const _workunitasyncstorageexternal = require("../app-render/work-unit-async-storage.external"); +const _dynamicrendering = require("../app-render/dynamic-rendering"); +const _staticgenerationbailout = require("../../client/components/static-generation-bailout"); +const _dynamicrenderingutils = require("../dynamic-rendering-utils"); +const _utils = require("./utils"); +const _stagedrendering = require("../app-render/staged-rendering"); +const _invarianterror = require("../../shared/lib/invariant-error"); +function connection() { + const callingExpression = 'connection'; + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workStore) { + if (workUnitStore && workUnitStore.phase === 'after' && !(0, _utils.isRequestAPICallableInsideAfter)()) { + throw Object.defineProperty(new Error(`Route ${workStore.route} used \`connection()\` inside \`after()\`. The \`connection()\` function is used to indicate the subsequent code must only run when there is an actual Request, but \`after()\` executes after the request, so this function is not allowed in this scope. See more info here: https://nextjs.org/docs/canary/app/api-reference/functions/after`), "__NEXT_ERROR_CODE", { + value: "E827", + enumerable: false, + configurable: true + }); + } + if (workStore.forceStatic) { + // When using forceStatic, we override all other logic and always just + // return a resolving promise without tracking. + return Promise.resolve(undefined); + } + if (workStore.dynamicShouldError) { + throw Object.defineProperty(new _staticgenerationbailout.StaticGenBailoutError(`Route ${workStore.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`connection()\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`), "__NEXT_ERROR_CODE", { + value: "E847", + enumerable: false, + configurable: true + }); + } + if (workUnitStore) { + switch(workUnitStore.type){ + case 'cache': + { + const error = Object.defineProperty(new Error(`Route ${workStore.route} used \`connection()\` inside "use cache". The \`connection()\` function is used to indicate the subsequent code must only run when there is an actual request, but caches must be able to be produced before a request, so this function is not allowed in this scope. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`), "__NEXT_ERROR_CODE", { + value: "E841", + enumerable: false, + configurable: true + }); + Error.captureStackTrace(error, connection); + workStore.invalidDynamicUsageError ??= error; + throw error; + } + case 'private-cache': + { + // It might not be intuitive to throw for private caches as well, but + // we don't consider runtime prefetches as "actual requests" (in the + // navigation sense), despite allowing them to read cookies. + const error = Object.defineProperty(new Error(`Route ${workStore.route} used \`connection()\` inside "use cache: private". The \`connection()\` function is used to indicate the subsequent code must only run when there is an actual navigation request, but caches must be able to be produced before a navigation request, so this function is not allowed in this scope. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`), "__NEXT_ERROR_CODE", { + value: "E837", + enumerable: false, + configurable: true + }); + Error.captureStackTrace(error, connection); + workStore.invalidDynamicUsageError ??= error; + throw error; + } + case 'unstable-cache': + throw Object.defineProperty(new Error(`Route ${workStore.route} used \`connection()\` inside a function cached with \`unstable_cache()\`. The \`connection()\` function is used to indicate the subsequent code must only run when there is an actual Request, but caches must be able to be produced before a Request so this function is not allowed in this scope. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`), "__NEXT_ERROR_CODE", { + value: "E840", + enumerable: false, + configurable: true + }); + case 'generate-static-params': + throw Object.defineProperty(new Error(`Route ${workStore.route} used \`connection()\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`), "__NEXT_ERROR_CODE", { + value: "E1125", + enumerable: false, + configurable: true + }); + case 'prerender': + case 'prerender-client': + case 'prerender-runtime': + // We return a promise that never resolves to allow the prerender to + // stall at this point. + return (0, _dynamicrenderingutils.makeHangingPromise)(workUnitStore.renderSignal, workStore.route, '`connection()`'); + case 'validation-client': + { + // TODO(NAR-789): make this consistent with the actual browser behavior when we change it. + // Until then, erroring is fine. + const exportName = '`connection`'; + throw Object.defineProperty(new _invarianterror.InvariantError(`${exportName} must not be used within a Client Component. Next.js should be preventing ${exportName} from being included in Client Components statically, but did not in this case.`), "__NEXT_ERROR_CODE", { + value: "E1063", + enumerable: false, + configurable: true + }); + } + case 'prerender-ppr': + // We use React's postpone API to interrupt rendering here to create a + // dynamic hole + return (0, _dynamicrendering.postponeWithTracking)(workStore.route, 'connection', workUnitStore.dynamicTracking); + case 'prerender-legacy': + // We throw an error here to interrupt prerendering to mark the route + // as dynamic + return (0, _dynamicrendering.throwToInterruptStaticGeneration)('connection', workStore, workUnitStore); + case 'request': + (0, _dynamicrendering.trackDynamicDataInDynamicRender)(workUnitStore); + if (process.env.NODE_ENV === 'development') { + // Semantically we only need the dev tracking when running in `next dev` + // but since you would never use next dev with production NODE_ENV we use this + // as a proxy so we can statically exclude this code from production builds. + if (workUnitStore.asyncApiPromises) { + return workUnitStore.asyncApiPromises.connection; + } + return (0, _dynamicrenderingutils.makeDevtoolsIOAwarePromise)(undefined, workUnitStore, _stagedrendering.RenderStage.Dynamic); + } else if (workUnitStore.asyncApiPromises) { + return workUnitStore.asyncApiPromises.connection; + } else { + return Promise.resolve(undefined); + } + default: + workUnitStore; + } + } + } + // If we end up here, there was no work store or work unit store present. + // TODO(NAR-789): connection() is not currently statically prevented from being imported in client components, + // so we always error about a missing work unit store. + (0, _workunitasyncstorageexternal.throwForMissingRequestStore)(callingExpression); +} + +//# sourceMappingURL=connection.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/request/cookies.js b/build/node_modules/next/dist/server/request/cookies.js new file mode 100644 index 0000000..40f03a0 --- /dev/null +++ b/build/node_modules/next/dist/server/request/cookies.js @@ -0,0 +1,235 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "cookies", { + enumerable: true, + get: function() { + return cookies; + } +}); +const _requestcookies = require("../web/spec-extension/adapters/request-cookies"); +const _cookies = require("../web/spec-extension/cookies"); +const _workasyncstorageexternal = require("../app-render/work-async-storage.external"); +const _workunitasyncstorageexternal = require("../app-render/work-unit-async-storage.external"); +const _dynamicrendering = require("../app-render/dynamic-rendering"); +const _staticgenerationbailout = require("../../client/components/static-generation-bailout"); +const _dynamicrenderingutils = require("../dynamic-rendering-utils"); +const _creatededupedbycallsiteservererrorlogger = require("../create-deduped-by-callsite-server-error-logger"); +const _utils = require("./utils"); +const _invarianterror = require("../../shared/lib/invariant-error"); +const _stagedrendering = require("../app-render/staged-rendering"); +function cookies() { + const callingExpression = 'cookies'; + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workStore) { + if (workUnitStore && workUnitStore.phase === 'after' && !(0, _utils.isRequestAPICallableInsideAfter)()) { + throw Object.defineProperty(new Error(// TODO(after): clarify that this only applies to pages? + `Route ${workStore.route} used \`cookies()\` inside \`after()\`. This is not supported. If you need this data inside an \`after()\` callback, use \`cookies()\` outside of the callback. See more info here: https://nextjs.org/docs/canary/app/api-reference/functions/after`), "__NEXT_ERROR_CODE", { + value: "E843", + enumerable: false, + configurable: true + }); + } + if (workStore.forceStatic) { + // When using forceStatic we override all other logic and always just return an empty + // cookies object without tracking + const underlyingCookies = createEmptyCookies(); + return makeUntrackedCookies(underlyingCookies); + } + if (workStore.dynamicShouldError) { + throw Object.defineProperty(new _staticgenerationbailout.StaticGenBailoutError(`Route ${workStore.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`cookies()\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`), "__NEXT_ERROR_CODE", { + value: "E849", + enumerable: false, + configurable: true + }); + } + if (workUnitStore) { + switch(workUnitStore.type){ + case 'cache': + const error = Object.defineProperty(new Error(`Route ${workStore.route} used \`cookies()\` inside "use cache". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`cookies()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`), "__NEXT_ERROR_CODE", { + value: "E831", + enumerable: false, + configurable: true + }); + Error.captureStackTrace(error, cookies); + workStore.invalidDynamicUsageError ??= error; + throw error; + case 'unstable-cache': + throw Object.defineProperty(new Error(`Route ${workStore.route} used \`cookies()\` inside a function cached with \`unstable_cache()\`. Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`cookies()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`), "__NEXT_ERROR_CODE", { + value: "E846", + enumerable: false, + configurable: true + }); + case 'generate-static-params': + throw Object.defineProperty(new Error(`Route ${workStore.route} used \`cookies()\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`), "__NEXT_ERROR_CODE", { + value: "E1123", + enumerable: false, + configurable: true + }); + case 'prerender': + return makeHangingCookies(workStore, workUnitStore); + case 'prerender-client': + case 'validation-client': + const exportName = '`cookies`'; + throw Object.defineProperty(new _invarianterror.InvariantError(`${exportName} must not be used within a Client Component. Next.js should be preventing ${exportName} from being included in Client Components statically, but did not in this case.`), "__NEXT_ERROR_CODE", { + value: "E1037", + enumerable: false, + configurable: true + }); + case 'prerender-ppr': + // We need track dynamic access here eagerly to keep continuity with + // how cookies has worked in PPR without cacheComponents. + return (0, _dynamicrendering.postponeWithTracking)(workStore.route, callingExpression, workUnitStore.dynamicTracking); + case 'prerender-legacy': + // We track dynamic access here so we don't need to wrap the cookies + // in individual property access tracking. + return (0, _dynamicrendering.throwToInterruptStaticGeneration)(callingExpression, workStore, workUnitStore); + case 'prerender-runtime': + return (0, _dynamicrenderingutils.delayUntilRuntimeStage)(workUnitStore, makeUntrackedCookies(workUnitStore.cookies)); + case 'private-cache': + // Private caches are delayed until the runtime stage in use-cache-wrapper, + // so we don't need an additional delay here. + return makeUntrackedCookies(workUnitStore.cookies); + case 'request': + (0, _dynamicrendering.trackDynamicDataInDynamicRender)(workUnitStore); + let underlyingCookies; + if ((0, _requestcookies.areCookiesMutableInCurrentPhase)(workUnitStore)) { + // We can't conditionally return different types here based on the context. + // To avoid confusion, we always return the readonly type here. + underlyingCookies = workUnitStore.userspaceMutableCookies; + } else { + underlyingCookies = workUnitStore.cookies; + } + if (process.env.NODE_ENV === 'development') { + // Semantically we only need the dev tracking when running in `next dev` + // but since you would never use next dev with production NODE_ENV we use this + // as a proxy so we can statically exclude this code from production builds. + return makeUntrackedCookiesWithDevWarnings(workUnitStore, underlyingCookies, workStore == null ? void 0 : workStore.route); + } else if (workUnitStore.asyncApiPromises) { + const early = (0, _workunitasyncstorageexternal.isInEarlyRenderStage)(workUnitStore); + if (underlyingCookies === workUnitStore.mutableCookies) { + return early ? workUnitStore.asyncApiPromises.earlyMutableCookies : workUnitStore.asyncApiPromises.mutableCookies; + } else { + return early ? workUnitStore.asyncApiPromises.earlyCookies : workUnitStore.asyncApiPromises.cookies; + } + } else { + return makeUntrackedCookies(underlyingCookies); + } + default: + workUnitStore; + } + } + } + // If we end up here, there was no work store or work unit store present. + (0, _workunitasyncstorageexternal.throwForMissingRequestStore)(callingExpression); +} +function createEmptyCookies() { + return _requestcookies.RequestCookiesAdapter.seal(new _cookies.RequestCookies(new Headers({}))); +} +const CachedCookies = new WeakMap(); +function makeHangingCookies(workStore, prerenderStore) { + const cachedPromise = CachedCookies.get(prerenderStore); + if (cachedPromise) { + return cachedPromise; + } + const promise = (0, _dynamicrenderingutils.makeHangingPromise)(prerenderStore.renderSignal, workStore.route, '`cookies()`'); + CachedCookies.set(prerenderStore, promise); + return promise; +} +function makeUntrackedCookies(underlyingCookies) { + const cachedCookies = CachedCookies.get(underlyingCookies); + if (cachedCookies) { + return cachedCookies; + } + const promise = Promise.resolve(underlyingCookies); + CachedCookies.set(underlyingCookies, promise); + return promise; +} +function makeUntrackedCookiesWithDevWarnings(requestStore, underlyingCookies, route) { + if (requestStore.asyncApiPromises) { + const early = (0, _workunitasyncstorageexternal.isInEarlyRenderStage)(requestStore); + let promise; + if (underlyingCookies === requestStore.mutableCookies) { + promise = early ? requestStore.asyncApiPromises.earlyMutableCookies : requestStore.asyncApiPromises.mutableCookies; + } else if (underlyingCookies === requestStore.cookies) { + promise = early ? requestStore.asyncApiPromises.earlyCookies : requestStore.asyncApiPromises.cookies; + } else { + throw Object.defineProperty(new _invarianterror.InvariantError('Received an underlying cookies object that does not match either `cookies` or `mutableCookies`'), "__NEXT_ERROR_CODE", { + value: "E890", + enumerable: false, + configurable: true + }); + } + return instrumentCookiesPromiseWithDevWarnings(promise, route); + } + const cachedCookies = CachedCookies.get(underlyingCookies); + if (cachedCookies) { + return cachedCookies; + } + const promise = (0, _dynamicrenderingutils.makeDevtoolsIOAwarePromise)(underlyingCookies, requestStore, _stagedrendering.RenderStage.Runtime); + const proxiedPromise = instrumentCookiesPromiseWithDevWarnings(promise, route); + CachedCookies.set(underlyingCookies, proxiedPromise); + return proxiedPromise; +} +const warnForSyncAccess = (0, _creatededupedbycallsiteservererrorlogger.createDedupedByCallsiteServerErrorLoggerDev)(createCookiesAccessError); +function instrumentCookiesPromiseWithDevWarnings(promise, route) { + Object.defineProperties(promise, { + [Symbol.iterator]: replaceableWarningDescriptorForSymbolIterator(promise, route), + size: replaceableWarningDescriptor(promise, 'size', route), + get: replaceableWarningDescriptor(promise, 'get', route), + getAll: replaceableWarningDescriptor(promise, 'getAll', route), + has: replaceableWarningDescriptor(promise, 'has', route), + set: replaceableWarningDescriptor(promise, 'set', route), + delete: replaceableWarningDescriptor(promise, 'delete', route), + clear: replaceableWarningDescriptor(promise, 'clear', route), + toString: replaceableWarningDescriptor(promise, 'toString', route) + }); + return promise; +} +function replaceableWarningDescriptor(target, prop, route) { + return { + enumerable: false, + get () { + warnForSyncAccess(route, `\`cookies().${prop}\``); + return undefined; + }, + set (value) { + Object.defineProperty(target, prop, { + value, + writable: true, + configurable: true + }); + }, + configurable: true + }; +} +function replaceableWarningDescriptorForSymbolIterator(target, route) { + return { + enumerable: false, + get () { + warnForSyncAccess(route, '`...cookies()` or similar iteration'); + return undefined; + }, + set (value) { + Object.defineProperty(target, Symbol.iterator, { + value, + writable: true, + enumerable: true, + configurable: true + }); + }, + configurable: true + }; +} +function createCookiesAccessError(route, expression) { + const prefix = route ? `Route "${route}" ` : 'This route '; + return Object.defineProperty(new Error(`${prefix}used ${expression}. ` + `\`cookies()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. ` + `Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`), "__NEXT_ERROR_CODE", { + value: "E830", + enumerable: false, + configurable: true + }); +} + +//# sourceMappingURL=cookies.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/request/draft-mode.js b/build/node_modules/next/dist/server/request/draft-mode.js new file mode 100644 index 0000000..ae29b7c --- /dev/null +++ b/build/node_modules/next/dist/server/request/draft-mode.js @@ -0,0 +1,230 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "draftMode", { + enumerable: true, + get: function() { + return draftMode; + } +}); +const _workunitasyncstorageexternal = require("../app-render/work-unit-async-storage.external"); +const _workasyncstorageexternal = require("../app-render/work-async-storage.external"); +const _dynamicrendering = require("../app-render/dynamic-rendering"); +const _creatededupedbycallsiteservererrorlogger = require("../create-deduped-by-callsite-server-error-logger"); +const _staticgenerationbailout = require("../../client/components/static-generation-bailout"); +const _hooksservercontext = require("../../client/components/hooks-server-context"); +const _invarianterror = require("../../shared/lib/invariant-error"); +const _dynamicrenderingutils = require("../dynamic-rendering-utils"); +const _reflect = require("../web/spec-extension/adapters/reflect"); +function draftMode() { + const callingExpression = 'draftMode'; + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (!workStore || !workUnitStore) { + (0, _workunitasyncstorageexternal.throwForMissingRequestStore)(callingExpression); + } + switch(workUnitStore.type){ + case 'prerender-runtime': + // TODO(runtime-ppr): does it make sense to delay this? normally it's always microtasky + return (0, _dynamicrenderingutils.delayUntilRuntimeStage)(workUnitStore, createOrGetCachedDraftMode(workUnitStore.draftMode, workStore)); + case 'request': + return createOrGetCachedDraftMode(workUnitStore.draftMode, workStore); + case 'cache': + case 'private-cache': + case 'unstable-cache': + // Inside of `"use cache"` or `unstable_cache`, draft mode is available if + // the outmost work unit store is a request store (or a runtime prerender), + // and if draft mode is enabled. + const draftModeProvider = (0, _workunitasyncstorageexternal.getDraftModeProviderForCacheScope)(workStore, workUnitStore); + if (draftModeProvider) { + return createOrGetCachedDraftMode(draftModeProvider, workStore); + } + // Otherwise, we fall through to providing an empty draft mode. + // eslint-disable-next-line no-fallthrough + case 'prerender': + case 'prerender-ppr': + case 'prerender-legacy': + // Return empty draft mode + return createOrGetCachedDraftMode(null, workStore); + case 'prerender-client': + case 'validation-client': + { + const exportName = '`draftMode`'; + throw Object.defineProperty(new _invarianterror.InvariantError(`${exportName} must not be used within a Client Component. Next.js should be preventing ${exportName} from being included in Client Components statically, but did not in this case.`), "__NEXT_ERROR_CODE", { + value: "E1046", + enumerable: false, + configurable: true + }); + } + case 'generate-static-params': + throw Object.defineProperty(new Error(`Route ${workStore.route} used \`${callingExpression}()\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`), "__NEXT_ERROR_CODE", { + value: "E1132", + enumerable: false, + configurable: true + }); + default: + return workUnitStore; + } +} +function createOrGetCachedDraftMode(draftModeProvider, workStore) { + const cacheKey = draftModeProvider ?? NullDraftMode; + const cachedDraftMode = CachedDraftModes.get(cacheKey); + if (cachedDraftMode) { + return cachedDraftMode; + } + if (process.env.NODE_ENV === 'development' && !(workStore == null ? void 0 : workStore.isPrefetchRequest)) { + const route = workStore == null ? void 0 : workStore.route; + return createDraftModeWithDevWarnings(draftModeProvider, route); + } else { + return Promise.resolve(new DraftMode(draftModeProvider)); + } +} +const NullDraftMode = {}; +const CachedDraftModes = new WeakMap(); +function createDraftModeWithDevWarnings(underlyingProvider, route) { + const instance = new DraftMode(underlyingProvider); + const promise = Promise.resolve(instance); + const proxiedPromise = new Proxy(promise, { + get (target, prop, receiver) { + switch(prop){ + case 'isEnabled': + warnForSyncAccess(route, `\`draftMode().${prop}\``); + break; + case 'enable': + case 'disable': + { + warnForSyncAccess(route, `\`draftMode().${prop}()\``); + break; + } + default: + { + // We only warn for well-defined properties of the draftMode object. + } + } + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + }); + return proxiedPromise; +} +class DraftMode { + constructor(provider){ + this._provider = provider; + } + get isEnabled() { + if (this._provider !== null) { + return this._provider.isEnabled; + } + return false; + } + enable() { + // We have a store we want to track dynamic data access to ensure we + // don't statically generate routes that manipulate draft mode. + trackDynamicDraftMode('draftMode().enable()', this.enable); + if (this._provider !== null) { + this._provider.enable(); + } + } + disable() { + trackDynamicDraftMode('draftMode().disable()', this.disable); + if (this._provider !== null) { + this._provider.disable(); + } + } +} +const warnForSyncAccess = (0, _creatededupedbycallsiteservererrorlogger.createDedupedByCallsiteServerErrorLoggerDev)(createDraftModeAccessError); +function createDraftModeAccessError(route, expression) { + const prefix = route ? `Route "${route}" ` : 'This route '; + return Object.defineProperty(new Error(`${prefix}used ${expression}. ` + `\`draftMode()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. ` + `Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`), "__NEXT_ERROR_CODE", { + value: "E835", + enumerable: false, + configurable: true + }); +} +function trackDynamicDraftMode(expression, constructorOpt) { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workStore) { + // We have a store we want to track dynamic data access to ensure we + // don't statically generate routes that manipulate draft mode. + if ((workUnitStore == null ? void 0 : workUnitStore.phase) === 'after') { + throw Object.defineProperty(new Error(`Route ${workStore.route} used "${expression}" inside \`after()\`. The enabled status of \`draftMode()\` can be read inside \`after()\` but you cannot enable or disable \`draftMode()\`. See more info here: https://nextjs.org/docs/app/api-reference/functions/after`), "__NEXT_ERROR_CODE", { + value: "E845", + enumerable: false, + configurable: true + }); + } + if (workStore.dynamicShouldError) { + throw Object.defineProperty(new _staticgenerationbailout.StaticGenBailoutError(`Route ${workStore.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`${expression}\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`), "__NEXT_ERROR_CODE", { + value: "E553", + enumerable: false, + configurable: true + }); + } + if (workUnitStore) { + switch(workUnitStore.type){ + case 'cache': + case 'private-cache': + { + const error = Object.defineProperty(new Error(`Route ${workStore.route} used "${expression}" inside "use cache". The enabled status of \`draftMode()\` can be read in caches but you must not enable or disable \`draftMode()\` inside a cache. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`), "__NEXT_ERROR_CODE", { + value: "E829", + enumerable: false, + configurable: true + }); + Error.captureStackTrace(error, constructorOpt); + workStore.invalidDynamicUsageError ??= error; + throw error; + } + case 'unstable-cache': + throw Object.defineProperty(new Error(`Route ${workStore.route} used "${expression}" inside a function cached with \`unstable_cache()\`. The enabled status of \`draftMode()\` can be read in caches but you must not enable or disable \`draftMode()\` inside a cache. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`), "__NEXT_ERROR_CODE", { + value: "E844", + enumerable: false, + configurable: true + }); + case 'prerender': + case 'prerender-runtime': + { + const error = Object.defineProperty(new Error(`Route ${workStore.route} used ${expression} without first calling \`await connection()\`. See more info here: https://nextjs.org/docs/messages/next-prerender-sync-headers`), "__NEXT_ERROR_CODE", { + value: "E126", + enumerable: false, + configurable: true + }); + return (0, _dynamicrendering.abortAndThrowOnSynchronousRequestDataAccess)(workStore.route, expression, error, workUnitStore); + } + case 'prerender-client': + case 'validation-client': + const exportName = '`draftMode`'; + throw Object.defineProperty(new _invarianterror.InvariantError(`${exportName} must not be used within a Client Component. Next.js should be preventing ${exportName} from being included in Client Components statically, but did not in this case.`), "__NEXT_ERROR_CODE", { + value: "E1046", + enumerable: false, + configurable: true + }); + case 'prerender-ppr': + return (0, _dynamicrendering.postponeWithTracking)(workStore.route, expression, workUnitStore.dynamicTracking); + case 'prerender-legacy': + workUnitStore.revalidate = 0; + const err = Object.defineProperty(new _hooksservercontext.DynamicServerError(`Route ${workStore.route} couldn't be rendered statically because it used \`${expression}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`), "__NEXT_ERROR_CODE", { + value: "E558", + enumerable: false, + configurable: true + }); + workStore.dynamicUsageDescription = expression; + workStore.dynamicUsageStack = err.stack; + throw err; + case 'request': + (0, _dynamicrendering.trackDynamicDataInDynamicRender)(workUnitStore); + break; + case 'generate-static-params': + throw Object.defineProperty(new Error(`Route ${workStore.route} used \`${expression}\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`), "__NEXT_ERROR_CODE", { + value: "E1121", + enumerable: false, + configurable: true + }); + default: + workUnitStore; + } + } + } +} + +//# sourceMappingURL=draft-mode.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/request/fallback-params.js b/build/node_modules/next/dist/server/request/fallback-params.js new file mode 100644 index 0000000..fd4f843 --- /dev/null +++ b/build/node_modules/next/dist/server/request/fallback-params.js @@ -0,0 +1,95 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + buildDynamicSegmentPlaceholder: null, + createOpaqueFallbackRouteParams: null, + getFallbackRouteParams: null, + getPlaceholderFallbackRouteParams: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + buildDynamicSegmentPlaceholder: function() { + return buildDynamicSegmentPlaceholder; + }, + createOpaqueFallbackRouteParams: function() { + return createOpaqueFallbackRouteParams; + }, + getFallbackRouteParams: function() { + return getFallbackRouteParams; + }, + getPlaceholderFallbackRouteParams: function() { + return getPlaceholderFallbackRouteParams; + } +}); +const _utils = require("../../build/static-paths/utils"); +const _getshortdynamicparamtype = require("../app-render/get-short-dynamic-param-type"); +const _app = require("../../shared/lib/router/routes/app"); +const _extractpathnamerouteparamsegmentsfromloadertree = require("../../build/static-paths/app/extract-pathname-route-param-segments-from-loader-tree"); +const _getsegmentparam = require("../../shared/lib/router/utils/get-segment-param"); +function createOpaqueFallbackRouteParams(fallbackRouteParams) { + // If there are no fallback route params, we can return early. + if (fallbackRouteParams.length === 0) return null; + // As we're creating unique keys for each of the dynamic route params, we only + // need to generate a unique ID once per request because each of the keys will + // be also be unique. + const uniqueID = Math.random().toString(16).slice(2); + const keys = new Map(); + // Generate a unique key for the fallback route param, if this key is found + // in the static output, it represents a bug in cache components. + for (const { paramName, paramType } of fallbackRouteParams){ + keys.set(paramName, [ + `%%drp:${paramName}:${uniqueID}%%`, + _getshortdynamicparamtype.dynamicParamTypes[paramType] + ]); + } + return keys; +} +function buildDynamicSegmentPlaceholder(param) { + const { repeat, optional } = (0, _getsegmentparam.getParamProperties)(param.paramType); + if (optional) { + return `[[...${param.paramName}]]`; + } + if (repeat) { + return `[...${param.paramName}]`; + } + return `[${param.paramName}]`; +} +function getPlaceholderFallbackRouteParams(params, fallbackRouteParams) { + return fallbackRouteParams.filter((param)=>{ + const placeholder = buildDynamicSegmentPlaceholder(param); + const value = params == null ? void 0 : params[param.paramName]; + return value === placeholder || Array.isArray(value) && value.length === 1 && value[0] === placeholder; + }); +} +function getFallbackRouteParams(page, routeModule) { + const route = (0, _app.parseAppRoute)(page, true); + // Extract the pathname-contributing segments from the loader tree. This + // mirrors the logic in buildAppStaticPaths where we determine which segments + // actually contribute to the pathname. + const { pathnameRouteParamSegments, params } = (0, _extractpathnamerouteparamsegmentsfromloadertree.extractPathnameRouteParamSegmentsFromLoaderTree)(routeModule.userland.loaderTree, route); + // Create fallback route params for the pathname segments. + const fallbackRouteParams = pathnameRouteParamSegments.map(({ paramName, paramType })=>({ + paramName, + paramType + })); + // Resolve route params from the loader tree. This mutates the + // fallbackRouteParams array to add any route params that are + // unknown at request time. + // + // The page parameter contains placeholders like [slug], which helps + // resolveRouteParamsFromTree determine which params are unknown. + (0, _utils.resolveRouteParamsFromTree)(routeModule.userland.loaderTree, params, route, fallbackRouteParams // Will be mutated to add route params + ); + // Convert the fallback route params to an opaque format that can be safely + // used in the postponed state without exposing implementation details. + return createOpaqueFallbackRouteParams(fallbackRouteParams); +} + +//# sourceMappingURL=fallback-params.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/request/headers.js b/build/node_modules/next/dist/server/request/headers.js new file mode 100644 index 0000000..9d82c9e --- /dev/null +++ b/build/node_modules/next/dist/server/request/headers.js @@ -0,0 +1,229 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "headers", { + enumerable: true, + get: function() { + return headers; + } +}); +const _headers = require("../web/spec-extension/adapters/headers"); +const _workasyncstorageexternal = require("../app-render/work-async-storage.external"); +const _workunitasyncstorageexternal = require("../app-render/work-unit-async-storage.external"); +const _dynamicrendering = require("../app-render/dynamic-rendering"); +const _staticgenerationbailout = require("../../client/components/static-generation-bailout"); +const _dynamicrenderingutils = require("../dynamic-rendering-utils"); +const _creatededupedbycallsiteservererrorlogger = require("../create-deduped-by-callsite-server-error-logger"); +const _utils = require("./utils"); +const _invarianterror = require("../../shared/lib/invariant-error"); +const _stagedrendering = require("../app-render/staged-rendering"); +function headers() { + const callingExpression = 'headers'; + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workStore) { + if (workUnitStore && workUnitStore.phase === 'after' && !(0, _utils.isRequestAPICallableInsideAfter)()) { + throw Object.defineProperty(new Error(`Route ${workStore.route} used \`headers()\` inside \`after()\`. This is not supported. If you need this data inside an \`after()\` callback, use \`headers()\` outside of the callback. See more info here: https://nextjs.org/docs/canary/app/api-reference/functions/after`), "__NEXT_ERROR_CODE", { + value: "E839", + enumerable: false, + configurable: true + }); + } + if (workStore.forceStatic) { + // When using forceStatic we override all other logic and always just return an empty + // headers object without tracking + const underlyingHeaders = _headers.HeadersAdapter.seal(new Headers({})); + return makeUntrackedHeaders(underlyingHeaders); + } + if (workUnitStore) { + switch(workUnitStore.type){ + case 'cache': + { + const error = Object.defineProperty(new Error(`Route ${workStore.route} used \`headers()\` inside "use cache". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`headers()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`), "__NEXT_ERROR_CODE", { + value: "E833", + enumerable: false, + configurable: true + }); + Error.captureStackTrace(error, headers); + workStore.invalidDynamicUsageError ??= error; + throw error; + } + case 'unstable-cache': + throw Object.defineProperty(new Error(`Route ${workStore.route} used \`headers()\` inside a function cached with \`unstable_cache()\`. Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`headers()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`), "__NEXT_ERROR_CODE", { + value: "E838", + enumerable: false, + configurable: true + }); + case 'generate-static-params': + throw Object.defineProperty(new Error(`Route ${workStore.route} used \`headers()\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`), "__NEXT_ERROR_CODE", { + value: "E1134", + enumerable: false, + configurable: true + }); + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'private-cache': + case 'prerender-runtime': + case 'prerender-ppr': + case 'prerender-legacy': + case 'request': + break; + default: + workUnitStore; + } + } + if (workStore.dynamicShouldError) { + throw Object.defineProperty(new _staticgenerationbailout.StaticGenBailoutError(`Route ${workStore.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`headers()\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`), "__NEXT_ERROR_CODE", { + value: "E828", + enumerable: false, + configurable: true + }); + } + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + return makeHangingHeaders(workStore, workUnitStore); + case 'prerender-client': + case 'validation-client': + const exportName = '`headers`'; + throw Object.defineProperty(new _invarianterror.InvariantError(`${exportName} must not be used within a client component. Next.js should be preventing ${exportName} from being included in client components statically, but did not in this case.`), "__NEXT_ERROR_CODE", { + value: "E1017", + enumerable: false, + configurable: true + }); + case 'prerender-ppr': + // PPR Prerender (no cacheComponents) + // We are prerendering with PPR. We need track dynamic access here eagerly + // to keep continuity with how headers has worked in PPR without cacheComponents. + // TODO consider switching the semantic to throw on property access instead + return (0, _dynamicrendering.postponeWithTracking)(workStore.route, callingExpression, workUnitStore.dynamicTracking); + case 'prerender-legacy': + // Legacy Prerender + // We are in a legacy static generation mode while prerendering + // We track dynamic access here so we don't need to wrap the headers in + // individual property access tracking. + return (0, _dynamicrendering.throwToInterruptStaticGeneration)(callingExpression, workStore, workUnitStore); + case 'prerender-runtime': + return (0, _dynamicrenderingutils.delayUntilRuntimeStage)(workUnitStore, makeUntrackedHeaders(workUnitStore.headers)); + case 'private-cache': + // Private caches are delayed until the runtime stage in use-cache-wrapper, + // so we don't need an additional delay here. + return makeUntrackedHeaders(workUnitStore.headers); + case 'request': + (0, _dynamicrendering.trackDynamicDataInDynamicRender)(workUnitStore); + if (process.env.NODE_ENV === 'development') { + // Semantically we only need the dev tracking when running in `next dev` + // but since you would never use next dev with production NODE_ENV we use this + // as a proxy so we can statically exclude this code from production builds. + return makeUntrackedHeadersWithDevWarnings(workUnitStore.headers, workStore == null ? void 0 : workStore.route, workUnitStore); + } else if (workUnitStore.asyncApiPromises) { + return (0, _workunitasyncstorageexternal.isInEarlyRenderStage)(workUnitStore) ? workUnitStore.asyncApiPromises.earlyHeaders : workUnitStore.asyncApiPromises.headers; + } else { + return makeUntrackedHeaders(workUnitStore.headers); + } + break; + default: + workUnitStore; + } + } + } + // If we end up here, there was no work store or work unit store present. + (0, _workunitasyncstorageexternal.throwForMissingRequestStore)(callingExpression); +} +const CachedHeaders = new WeakMap(); +function makeHangingHeaders(workStore, prerenderStore) { + const cachedHeaders = CachedHeaders.get(prerenderStore); + if (cachedHeaders) { + return cachedHeaders; + } + const promise = (0, _dynamicrenderingutils.makeHangingPromise)(prerenderStore.renderSignal, workStore.route, '`headers()`'); + CachedHeaders.set(prerenderStore, promise); + return promise; +} +function makeUntrackedHeaders(underlyingHeaders) { + const cachedHeaders = CachedHeaders.get(underlyingHeaders); + if (cachedHeaders) { + return cachedHeaders; + } + const promise = Promise.resolve(underlyingHeaders); + CachedHeaders.set(underlyingHeaders, promise); + return promise; +} +function makeUntrackedHeadersWithDevWarnings(underlyingHeaders, route, requestStore) { + if (requestStore.asyncApiPromises) { + const promise = (0, _workunitasyncstorageexternal.isInEarlyRenderStage)(requestStore) ? requestStore.asyncApiPromises.earlyHeaders : requestStore.asyncApiPromises.headers; + return instrumentHeadersPromiseWithDevWarnings(promise, route); + } + const cachedHeaders = CachedHeaders.get(underlyingHeaders); + if (cachedHeaders) { + return cachedHeaders; + } + const promise = (0, _dynamicrenderingutils.makeDevtoolsIOAwarePromise)(underlyingHeaders, requestStore, _stagedrendering.RenderStage.Runtime); + const proxiedPromise = instrumentHeadersPromiseWithDevWarnings(promise, route); + CachedHeaders.set(underlyingHeaders, proxiedPromise); + return proxiedPromise; +} +const warnForSyncAccess = (0, _creatededupedbycallsiteservererrorlogger.createDedupedByCallsiteServerErrorLoggerDev)(createHeadersAccessError); +function instrumentHeadersPromiseWithDevWarnings(promise, route) { + Object.defineProperties(promise, { + [Symbol.iterator]: replaceableWarningDescriptorForSymbolIterator(promise, route), + append: replaceableWarningDescriptor(promise, 'append', route), + delete: replaceableWarningDescriptor(promise, 'delete', route), + get: replaceableWarningDescriptor(promise, 'get', route), + has: replaceableWarningDescriptor(promise, 'has', route), + set: replaceableWarningDescriptor(promise, 'set', route), + getSetCookie: replaceableWarningDescriptor(promise, 'getSetCookie', route), + forEach: replaceableWarningDescriptor(promise, 'forEach', route), + keys: replaceableWarningDescriptor(promise, 'keys', route), + values: replaceableWarningDescriptor(promise, 'values', route), + entries: replaceableWarningDescriptor(promise, 'entries', route) + }); + return promise; +} +function replaceableWarningDescriptor(target, prop, route) { + return { + enumerable: false, + get () { + warnForSyncAccess(route, `\`headers().${prop}\``); + return undefined; + }, + set (value) { + Object.defineProperty(target, prop, { + value, + writable: true, + configurable: true + }); + }, + configurable: true + }; +} +function replaceableWarningDescriptorForSymbolIterator(target, route) { + return { + enumerable: false, + get () { + warnForSyncAccess(route, '`...headers()` or similar iteration'); + return undefined; + }, + set (value) { + Object.defineProperty(target, Symbol.iterator, { + value, + writable: true, + enumerable: true, + configurable: true + }); + }, + configurable: true + }; +} +function createHeadersAccessError(route, expression) { + const prefix = route ? `Route "${route}" ` : 'This route '; + return Object.defineProperty(new Error(`${prefix}used ${expression}. ` + `\`headers()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. ` + `Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`), "__NEXT_ERROR_CODE", { + value: "E836", + enumerable: false, + configurable: true + }); +} + +//# sourceMappingURL=headers.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/request/params.js b/build/node_modules/next/dist/server/request/params.js new file mode 100644 index 0000000..f92b752 --- /dev/null +++ b/build/node_modules/next/dist/server/request/params.js @@ -0,0 +1,527 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createParamsFromClient: null, + createPrerenderParamsForClientSegment: null, + createServerParamsForMetadata: null, + createServerParamsForRoute: null, + createServerParamsForServerSegment: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createParamsFromClient: function() { + return createParamsFromClient; + }, + createPrerenderParamsForClientSegment: function() { + return createPrerenderParamsForClientSegment; + }, + createServerParamsForMetadata: function() { + return createServerParamsForMetadata; + }, + createServerParamsForRoute: function() { + return createServerParamsForRoute; + }, + createServerParamsForServerSegment: function() { + return createServerParamsForServerSegment; + } +}); +const _workasyncstorageexternal = require("../app-render/work-async-storage.external"); +const _varyparams = require("../app-render/vary-params"); +const _reflect = require("../web/spec-extension/adapters/reflect"); +const _dynamicrendering = require("../app-render/dynamic-rendering"); +const _workunitasyncstorageexternal = require("../app-render/work-unit-async-storage.external"); +const _invarianterror = require("../../shared/lib/invariant-error"); +const _reflectutils = require("../../shared/lib/utils/reflect-utils"); +const _dynamicrenderingutils = require("../dynamic-rendering-utils"); +const _creatededupedbycallsiteservererrorlogger = require("../create-deduped-by-callsite-server-error-logger"); +const _dynamicaccessasyncstorageexternal = require("../app-render/dynamic-access-async-storage.external"); +const _stagedrendering = require("../app-render/staged-rendering"); +function createParamsFromClient(underlyingParams) { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + if (!workStore) { + throw Object.defineProperty(new _invarianterror.InvariantError('Expected workStore to be initialized'), "__NEXT_ERROR_CODE", { + value: "E1068", + enumerable: false, + configurable: true + }); + } + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'prerender-ppr': + case 'prerender-legacy': + // Client params don't need additional vary tracking because by the + // time they reach the client, the access would have already been + // tracked by the server. + const varyParamsAccumulator = null; + return createStaticPrerenderParams(underlyingParams, null, workStore, workUnitStore, varyParamsAccumulator); + case 'validation-client': + return createClientParamsInInstantValidation(underlyingParams, workStore, workUnitStore.validationSamples); + case 'cache': + case 'private-cache': + case 'unstable-cache': + throw Object.defineProperty(new _invarianterror.InvariantError('createParamsFromClient should not be called in cache contexts.'), "__NEXT_ERROR_CODE", { + value: "E736", + enumerable: false, + configurable: true + }); + case 'prerender-runtime': + throw Object.defineProperty(new _invarianterror.InvariantError('createParamsFromClient should not be called in a runtime prerender.'), "__NEXT_ERROR_CODE", { + value: "E770", + enumerable: false, + configurable: true + }); + case 'generate-static-params': + throw Object.defineProperty(new _invarianterror.InvariantError('createParamsFromClient should not be called inside generateStaticParams.'), "__NEXT_ERROR_CODE", { + value: "E1122", + enumerable: false, + configurable: true + }); + case 'request': + if (process.env.NODE_ENV === 'development') { + // Semantically we only need the dev tracking when running in `next dev` + // but since you would never use next dev with production NODE_ENV we use this + // as a proxy so we can statically exclude this code from production builds. + const fallbackParams = workUnitStore.fallbackParams; + // Client params are not runtime prefetchable + const isRuntimePrefetchable = false; + return createRenderParamsInDev(underlyingParams, fallbackParams, workStore, workUnitStore, isRuntimePrefetchable); + } else if (workUnitStore.validationSamples) { + return createClientParamsInInstantValidation(underlyingParams, workStore, workUnitStore.validationSamples); + } else { + return createRenderParamsInProd(underlyingParams); + } + default: + workUnitStore; + } + } + (0, _workunitasyncstorageexternal.throwInvariantForMissingStore)(); +} +function createServerParamsForMetadata(underlyingParams, optionalCatchAllParamName, isRuntimePrefetchable) { + const metadataVaryParamsAccumulator = (0, _varyparams.getMetadataVaryParamsAccumulator)(); + return createServerParamsForServerSegment(underlyingParams, optionalCatchAllParamName, metadataVaryParamsAccumulator, isRuntimePrefetchable); +} +function createServerParamsForRoute(underlyingParams, varyParamsAccumulator = null) { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + if (!workStore) { + throw Object.defineProperty(new _invarianterror.InvariantError('Expected workStore to be initialized'), "__NEXT_ERROR_CODE", { + value: "E1068", + enumerable: false, + configurable: true + }); + } + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-ppr': + case 'prerender-legacy': + return createStaticPrerenderParams(underlyingParams, null, workStore, workUnitStore, varyParamsAccumulator); + case 'prerender-client': + case 'validation-client': + throw Object.defineProperty(new _invarianterror.InvariantError('createServerParamsForRoute should not be called in client contexts.'), "__NEXT_ERROR_CODE", { + value: "E1064", + enumerable: false, + configurable: true + }); + case 'cache': + case 'private-cache': + case 'unstable-cache': + throw Object.defineProperty(new _invarianterror.InvariantError('createServerParamsForRoute should not be called in cache contexts.'), "__NEXT_ERROR_CODE", { + value: "E738", + enumerable: false, + configurable: true + }); + case 'generate-static-params': + throw Object.defineProperty(new _invarianterror.InvariantError('createServerParamsForRoute should not be called inside generateStaticParams.'), "__NEXT_ERROR_CODE", { + value: "E1131", + enumerable: false, + configurable: true + }); + case 'prerender-runtime': + { + // Route params are not runtime prefetchable + const isRuntimePrefetchable = false; + return createRuntimePrerenderParams(underlyingParams, null, workUnitStore, varyParamsAccumulator, isRuntimePrefetchable); + } + case 'request': + if (process.env.NODE_ENV === 'development') { + // Semantically we only need the dev tracking when running in `next dev` + // but since you would never use next dev with production NODE_ENV we use this + // as a proxy so we can statically exclude this code from production builds. + const fallbackParams = workUnitStore.fallbackParams; + // Route params are not runtime prefetchable + const isRuntimePrefetchable = false; + return createRenderParamsInDev(underlyingParams, fallbackParams, workStore, workUnitStore, isRuntimePrefetchable); + } else { + return createRenderParamsInProd(underlyingParams); + } + default: + workUnitStore; + } + } + (0, _workunitasyncstorageexternal.throwInvariantForMissingStore)(); +} +function createServerParamsForServerSegment(underlyingParams, optionalCatchAllParamName, varyParamsAccumulator, isRuntimePrefetchable) { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + if (!workStore) { + throw Object.defineProperty(new _invarianterror.InvariantError('Expected workStore to be initialized'), "__NEXT_ERROR_CODE", { + value: "E1068", + enumerable: false, + configurable: true + }); + } + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'prerender-ppr': + case 'prerender-legacy': + return createStaticPrerenderParams(underlyingParams, optionalCatchAllParamName, workStore, workUnitStore, varyParamsAccumulator); + case 'validation-client': + throw Object.defineProperty(new _invarianterror.InvariantError('createServerParamsForServerSegment should not be called in client contexts.'), "__NEXT_ERROR_CODE", { + value: "E1101", + enumerable: false, + configurable: true + }); + case 'cache': + case 'private-cache': + case 'unstable-cache': + throw Object.defineProperty(new _invarianterror.InvariantError('createServerParamsForServerSegment should not be called in cache contexts.'), "__NEXT_ERROR_CODE", { + value: "E743", + enumerable: false, + configurable: true + }); + case 'generate-static-params': + throw Object.defineProperty(new _invarianterror.InvariantError('createServerParamsForServerSegment should not be called inside generateStaticParams.'), "__NEXT_ERROR_CODE", { + value: "E1120", + enumerable: false, + configurable: true + }); + case 'prerender-runtime': + return createRuntimePrerenderParams(underlyingParams, optionalCatchAllParamName, workUnitStore, varyParamsAccumulator, isRuntimePrefetchable); + case 'request': + if (process.env.NODE_ENV === 'development') { + // Semantically we only need the dev tracking when running in `next dev` + // but since you would never use next dev with production NODE_ENV we use this + // as a proxy so we can statically exclude this code from production builds. + const fallbackParams = workUnitStore.fallbackParams; + return createRenderParamsInDev(underlyingParams, fallbackParams, workStore, workUnitStore, isRuntimePrefetchable); + } else if (workUnitStore.asyncApiPromises && workUnitStore.validationSamples) { + return createServerParamsInInstantValidation(underlyingParams, workStore, workUnitStore.validationSamples, workUnitStore.asyncApiPromises, isRuntimePrefetchable); + } else if (workUnitStore.asyncApiPromises && hasFallbackRouteParams(underlyingParams, workUnitStore.fallbackParams)) { + return (isRuntimePrefetchable ? workUnitStore.asyncApiPromises.earlySharedParamsParent : workUnitStore.asyncApiPromises.sharedParamsParent).then(()=>underlyingParams); + } else { + return createRenderParamsInProd(underlyingParams); + } + default: + workUnitStore; + } + } + (0, _workunitasyncstorageexternal.throwInvariantForMissingStore)(); +} +function createPrerenderParamsForClientSegment(underlyingParams) { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + if (!workStore) { + throw Object.defineProperty(new _invarianterror.InvariantError('Missing workStore in createPrerenderParamsForClientSegment'), "__NEXT_ERROR_CODE", { + value: "E773", + enumerable: false, + configurable: true + }); + } + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + const fallbackParams = workUnitStore.fallbackRouteParams; + if (fallbackParams) { + for(let key in underlyingParams){ + if (fallbackParams.has(key)) { + // This params object has one or more fallback params, so we need + // to consider the awaiting of this params object "dynamic". Since + // we are in cacheComponents mode we encode this as a promise that never + // resolves. + return (0, _dynamicrenderingutils.makeHangingPromise)(workUnitStore.renderSignal, workStore.route, '`params`'); + } + } + } + break; + case 'validation-client': + throw Object.defineProperty(new _invarianterror.InvariantError('createPrerenderParamsForClientSegment should not be called in validation contexts.'), "__NEXT_ERROR_CODE", { + value: "E1099", + enumerable: false, + configurable: true + }); + break; + case 'cache': + case 'private-cache': + case 'unstable-cache': + throw Object.defineProperty(new _invarianterror.InvariantError('createPrerenderParamsForClientSegment should not be called in cache contexts.'), "__NEXT_ERROR_CODE", { + value: "E734", + enumerable: false, + configurable: true + }); + case 'generate-static-params': + throw Object.defineProperty(new _invarianterror.InvariantError('createPrerenderParamsForClientSegment should not be called inside generateStaticParams.'), "__NEXT_ERROR_CODE", { + value: "E1126", + enumerable: false, + configurable: true + }); + case 'prerender-ppr': + case 'prerender-legacy': + case 'prerender-runtime': + case 'request': + break; + default: + workUnitStore; + } + } + // We're prerendering in a mode that does not abort. We resolve the promise without + // any tracking because we're just transporting a value from server to client where the tracking + // will be applied. + return Promise.resolve(underlyingParams); +} +function createStaticPrerenderParams(underlyingParams, optionalCatchAllParamName, workStore, prerenderStore, varyParamsAccumulator) { + const underlyingParamsWithVarying = varyParamsAccumulator !== null ? (0, _varyparams.createVaryingParams)(varyParamsAccumulator, underlyingParams, optionalCatchAllParamName) : underlyingParams; + switch(prerenderStore.type){ + case 'prerender': + case 'prerender-client': + { + const fallbackParams = prerenderStore.fallbackRouteParams; + if (fallbackParams) { + for(const key in underlyingParams){ + if (fallbackParams.has(key)) { + // This params object has one or more fallback params, so we need + // to consider the awaiting of this params object "dynamic". Since + // we are in cacheComponents mode we encode this as a promise that never + // resolves. + return makeHangingParams(underlyingParamsWithVarying, workStore, prerenderStore); + } + } + } + break; + } + case 'prerender-ppr': + { + const fallbackParams = prerenderStore.fallbackRouteParams; + if (fallbackParams) { + for(const key in underlyingParams){ + if (fallbackParams.has(key)) { + return makeErroringParams(underlyingParamsWithVarying, fallbackParams, workStore, prerenderStore); + } + } + } + break; + } + case 'prerender-legacy': + break; + default: + prerenderStore; + } + return makeUntrackedParams(underlyingParamsWithVarying); +} +function createRuntimePrerenderParams(underlyingParams, optionalCatchAllParamName, workUnitStore, varyParamsAccumulator, isRuntimePrefetchable) { + const underlyingParamsWithVarying = varyParamsAccumulator !== null ? (0, _varyparams.createVaryingParams)(varyParamsAccumulator, underlyingParams, optionalCatchAllParamName) : underlyingParams; + const result = makeUntrackedParams(underlyingParamsWithVarying); + const { stagedRendering } = workUnitStore; + if (!stagedRendering) { + return result; + } + const stage = isRuntimePrefetchable ? _stagedrendering.RenderStage.EarlyRuntime : _stagedrendering.RenderStage.Runtime; + return stagedRendering.waitForStage(stage).then(()=>result); +} +function hasFallbackRouteParams(underlyingParams, fallbackParams) { + if (fallbackParams) { + for(let key in underlyingParams){ + if (fallbackParams.has(key)) { + return true; + } + } + } + return false; +} +function createServerParamsInInstantValidation(underlyingParams, workStore, validationSamples, asyncApiPromises, isRuntimePrefetchable) { + const { createExhaustiveParamsProxy } = require('../app-render/instant-validation/instant-samples'); + const declaredParams = new Set(Object.keys(validationSamples.params ?? {})); + const proxiedUnderlying = createExhaustiveParamsProxy(underlyingParams, declaredParams, workStore.route); + return (isRuntimePrefetchable ? asyncApiPromises.earlySharedParamsParent : asyncApiPromises.sharedParamsParent).then(()=>proxiedUnderlying); +} +function createClientParamsInInstantValidation(underlyingParams, workStore, validationSamples) { + const { createExhaustiveParamsProxy } = require('../app-render/instant-validation/instant-samples'); + const declaredParams = new Set(Object.keys((validationSamples == null ? void 0 : validationSamples.params) ?? {})); + const proxiedUnderlying = createExhaustiveParamsProxy(underlyingParams, declaredParams, workStore.route); + return Promise.resolve(proxiedUnderlying); +} +function createRenderParamsInProd(underlyingParams) { + return makeUntrackedParams(underlyingParams); +} +function createRenderParamsInDev(underlyingParams, fallbackParams, workStore, requestStore, isRuntimePrefetchable) { + return makeDynamicallyTrackedParamsWithDevWarnings(underlyingParams, hasFallbackRouteParams(underlyingParams, fallbackParams), workStore, requestStore, isRuntimePrefetchable); +} +const CachedParams = new WeakMap(); +const fallbackParamsProxyHandler = { + get: function get(target, prop, receiver) { + if (prop === 'then' || prop === 'catch' || prop === 'finally') { + const originalMethod = _reflect.ReflectAdapter.get(target, prop, receiver); + return ({ + [prop]: (...args)=>{ + const store = _dynamicaccessasyncstorageexternal.dynamicAccessAsyncStorage.getStore(); + if (store) { + store.abortController.abort(Object.defineProperty(new Error(`Accessed fallback \`params\` during prerendering.`), "__NEXT_ERROR_CODE", { + value: "E691", + enumerable: false, + configurable: true + })); + } + return new Proxy(originalMethod.apply(target, args), fallbackParamsProxyHandler); + } + })[prop]; + } + return _reflect.ReflectAdapter.get(target, prop, receiver); + } +}; +function makeHangingParams(underlyingParams, workStore, prerenderStore) { + const cachedParams = CachedParams.get(underlyingParams); + if (cachedParams) { + return cachedParams; + } + const promise = new Proxy((0, _dynamicrenderingutils.makeHangingPromise)(prerenderStore.renderSignal, workStore.route, '`params`'), fallbackParamsProxyHandler); + CachedParams.set(underlyingParams, promise); + return promise; +} +function makeErroringParams(underlyingParams, fallbackParams, workStore, prerenderStore) { + const cachedParams = CachedParams.get(underlyingParams); + if (cachedParams) { + return cachedParams; + } + const augmentedUnderlying = { + ...underlyingParams + }; + // We don't use makeResolvedReactPromise here because params + // supports copying with spread and we don't want to unnecessarily + // instrument the promise with spreadable properties of ReactPromise. + const promise = Promise.resolve(augmentedUnderlying); + CachedParams.set(underlyingParams, promise); + Object.keys(underlyingParams).forEach((prop)=>{ + if (_reflectutils.wellKnownProperties.has(prop)) { + // These properties cannot be shadowed because they need to be the + // true underlying value for Promises to work correctly at runtime + } else { + if (fallbackParams.has(prop)) { + Object.defineProperty(augmentedUnderlying, prop, { + get () { + const expression = (0, _reflectutils.describeStringPropertyAccess)('params', prop); + // In most dynamic APIs we also throw if `dynamic = "error"` however + // for params is only dynamic when we're generating a fallback shell + // and even when `dynamic = "error"` we still support generating dynamic + // fallback shells + // TODO remove this comment when cacheComponents is the default since there + // will be no `dynamic = "error"` + if (prerenderStore.type === 'prerender-ppr') { + // PPR Prerender (no cacheComponents) + (0, _dynamicrendering.postponeWithTracking)(workStore.route, expression, prerenderStore.dynamicTracking); + } else { + // Legacy Prerender + (0, _dynamicrendering.throwToInterruptStaticGeneration)(expression, workStore, prerenderStore); + } + }, + enumerable: true + }); + } + } + }); + return promise; +} +function makeUntrackedParams(underlyingParams) { + const cachedParams = CachedParams.get(underlyingParams); + if (cachedParams) { + return cachedParams; + } + const promise = Promise.resolve(underlyingParams); + CachedParams.set(underlyingParams, promise); + return promise; +} +function makeDynamicallyTrackedParamsWithDevWarnings(underlyingParams, hasFallbackParams, workStore, requestStore, isRuntimePrefetchable) { + if (requestStore.asyncApiPromises && hasFallbackParams) { + // We wrap each instance of params in a `new Promise()`, because deduping + // them across requests doesn't work anyway and this let us show each + // await a different set of values. This is important when all awaits + // are in third party which would otherwise track all the way to the + // internal params. + const sharedParamsParent = isRuntimePrefetchable ? requestStore.asyncApiPromises.earlySharedParamsParent : requestStore.asyncApiPromises.sharedParamsParent; + const promise = new Promise((resolve, reject)=>{ + sharedParamsParent.then(()=>resolve(underlyingParams), reject); + }); + // @ts-expect-error + promise.displayName = 'params'; + return instrumentParamsPromiseWithDevWarnings(underlyingParams, promise, workStore); + } + const cachedParams = CachedParams.get(underlyingParams); + if (cachedParams) { + return cachedParams; + } + // We don't use makeResolvedReactPromise here because params + // supports copying with spread and we don't want to unnecessarily + // instrument the promise with spreadable properties of ReactPromise. + const promise = hasFallbackParams ? (0, _dynamicrenderingutils.makeDevtoolsIOAwarePromise)(underlyingParams, requestStore, _stagedrendering.RenderStage.Runtime) : Promise.resolve(underlyingParams); + const proxiedPromise = instrumentParamsPromiseWithDevWarnings(underlyingParams, promise, workStore); + CachedParams.set(underlyingParams, proxiedPromise); + return proxiedPromise; +} +function instrumentParamsPromiseWithDevWarnings(underlyingParams, promise, workStore) { + // Track which properties we should warn for. + const proxiedProperties = new Set(); + Object.keys(underlyingParams).forEach((prop)=>{ + if (_reflectutils.wellKnownProperties.has(prop)) { + // These properties cannot be shadowed because they need to be the + // true underlying value for Promises to work correctly at runtime + } else { + proxiedProperties.add(prop); + } + }); + return new Proxy(promise, { + get (target, prop, receiver) { + if (typeof prop === 'string') { + if (// We are accessing a property that was proxied to the promise instance + proxiedProperties.has(prop)) { + const expression = (0, _reflectutils.describeStringPropertyAccess)('params', prop); + warnForSyncAccess(workStore.route, expression); + } + } + return _reflect.ReflectAdapter.get(target, prop, receiver); + }, + set (target, prop, value, receiver) { + if (typeof prop === 'string') { + proxiedProperties.delete(prop); + } + return _reflect.ReflectAdapter.set(target, prop, value, receiver); + }, + ownKeys (target) { + const expression = '`...params` or similar expression'; + warnForSyncAccess(workStore.route, expression); + return Reflect.ownKeys(target); + } + }); +} +const warnForSyncAccess = (0, _creatededupedbycallsiteservererrorlogger.createDedupedByCallsiteServerErrorLoggerDev)(createParamsAccessError); +function createParamsAccessError(route, expression) { + const prefix = route ? `Route "${route}" ` : 'This route '; + return Object.defineProperty(new Error(`${prefix}used ${expression}. ` + `\`params\` is a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. ` + `Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`), "__NEXT_ERROR_CODE", { + value: "E834", + enumerable: false, + configurable: true + }); +} + +//# sourceMappingURL=params.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/request/pathname.js b/build/node_modules/next/dist/server/request/pathname.js new file mode 100644 index 0000000..5e4e35d --- /dev/null +++ b/build/node_modules/next/dist/server/request/pathname.js @@ -0,0 +1,119 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "createServerPathnameForMetadata", { + enumerable: true, + get: function() { + return createServerPathnameForMetadata; + } +}); +const _workasyncstorageexternal = require("../app-render/work-async-storage.external"); +const _dynamicrendering = require("../app-render/dynamic-rendering"); +const _workunitasyncstorageexternal = require("../app-render/work-unit-async-storage.external"); +const _dynamicrenderingutils = require("../dynamic-rendering-utils"); +const _invarianterror = require("../../shared/lib/invariant-error"); +function createServerPathnameForMetadata(underlyingPathname) { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + if (!workStore) { + throw Object.defineProperty(new _invarianterror.InvariantError('Expected workStore to be initialized'), "__NEXT_ERROR_CODE", { + value: "E1068", + enumerable: false, + configurable: true + }); + } + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-ppr': + case 'prerender-legacy': + { + return createPrerenderPathname(underlyingPathname, workStore, workUnitStore); + } + case 'prerender-client': + case 'validation-client': + throw Object.defineProperty(new _invarianterror.InvariantError('createServerPathnameForMetadata should not be called in client contexts.'), "__NEXT_ERROR_CODE", { + value: "E1065", + enumerable: false, + configurable: true + }); + case 'cache': + case 'private-cache': + case 'unstable-cache': + throw Object.defineProperty(new _invarianterror.InvariantError('createServerPathnameForMetadata should not be called in cache contexts.'), "__NEXT_ERROR_CODE", { + value: "E740", + enumerable: false, + configurable: true + }); + case 'generate-static-params': + throw Object.defineProperty(new _invarianterror.InvariantError('createServerPathnameForMetadata should not be called inside generateStaticParams.'), "__NEXT_ERROR_CODE", { + value: "E1129", + enumerable: false, + configurable: true + }); + case 'prerender-runtime': + return (0, _dynamicrenderingutils.delayUntilRuntimeStage)(workUnitStore, createRenderPathname(underlyingPathname)); + case 'request': + return createRenderPathname(underlyingPathname); + default: + workUnitStore; + } + } + (0, _workunitasyncstorageexternal.throwInvariantForMissingStore)(); +} +function createPrerenderPathname(underlyingPathname, workStore, prerenderStore) { + switch(prerenderStore.type){ + case 'prerender': + { + const fallbackParams = prerenderStore.fallbackRouteParams; + if (fallbackParams && fallbackParams.size > 0) { + return (0, _dynamicrenderingutils.makeHangingPromise)(prerenderStore.renderSignal, workStore.route, '`pathname`'); + } + break; + } + case 'prerender-ppr': + { + const fallbackParams = prerenderStore.fallbackRouteParams; + if (fallbackParams && fallbackParams.size > 0) { + return makeErroringPathname(workStore, prerenderStore.dynamicTracking); + } + break; + } + case 'prerender-legacy': + break; + default: + prerenderStore; + } + // We don't have any fallback params so we have an entirely static safe params object + return Promise.resolve(underlyingPathname); +} +function makeErroringPathname(workStore, dynamicTracking) { + let reject = null; + const promise = new Promise((_, re)=>{ + reject = re; + }); + const originalThen = promise.then.bind(promise); + // We instrument .then so that we can generate a tracking event only if you actually + // await this promise, not just that it is created. + promise.then = (onfulfilled, onrejected)=>{ + if (reject) { + try { + (0, _dynamicrendering.postponeWithTracking)(workStore.route, 'metadata relative url resolving', dynamicTracking); + } catch (error) { + reject(error); + reject = null; + } + } + return originalThen(onfulfilled, onrejected); + }; + // We wrap in a noop proxy to trick the runtime into thinking it + // isn't a native promise (it's not really). This is so that awaiting + // the promise will call the `then` property triggering the lazy postpone + return new Proxy(promise, {}); +} +function createRenderPathname(underlyingPathname) { + return Promise.resolve(underlyingPathname); +} + +//# sourceMappingURL=pathname.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/request/root-params.js b/build/node_modules/next/dist/server/request/root-params.js new file mode 100644 index 0000000..0f3d7eb --- /dev/null +++ b/build/node_modules/next/dist/server/request/root-params.js @@ -0,0 +1,194 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getRootParam", { + enumerable: true, + get: function() { + return getRootParam; + } +}); +const _invarianterror = require("../../shared/lib/invariant-error"); +const _dynamicrendering = require("../app-render/dynamic-rendering"); +const _workasyncstorageexternal = require("../app-render/work-async-storage.external"); +const _workunitasyncstorageexternal = require("../app-render/work-unit-async-storage.external"); +const _dynamicrenderingutils = require("../dynamic-rendering-utils"); +const _reflectutils = require("../../shared/lib/utils/reflect-utils"); +const _actionasyncstorageexternal = require("../app-render/action-async-storage.external"); +const _varyparams = require("../app-render/vary-params"); +function getRootParam(paramName) { + const apiName = `\`import('next/root-params').${paramName}()\``; + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + if (!workStore) { + throw Object.defineProperty(new _invarianterror.InvariantError(`Missing workStore in ${apiName}`), "__NEXT_ERROR_CODE", { + value: "E1032", + enumerable: false, + configurable: true + }); + } + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (!workUnitStore) { + throw Object.defineProperty(new Error(`Route ${workStore.route} used ${apiName} outside of a Server Component. This is not allowed.`), "__NEXT_ERROR_CODE", { + value: "E1006", + enumerable: false, + configurable: true + }); + } + const actionStore = _actionasyncstorageexternal.actionAsyncStorage.getStore(); + if (actionStore) { + if (actionStore.isAppRoute) { + // TODO(root-params): add support for route handlers + throw Object.defineProperty(new Error(`Route ${workStore.route} used ${apiName} inside a Route Handler. Support for this API in Route Handlers is planned for a future version of Next.js.`), "__NEXT_ERROR_CODE", { + value: "E1043", + enumerable: false, + configurable: true + }); + } + if (actionStore.isAction && workUnitStore.phase === 'action') { + // Actions are not fundamentally tied to a route (even if they're always submitted from some page), + // so root params would be inconsistent if an action is called from multiple roots. + // Make sure we check if the phase is "action" - we should not error in the rerender + // after an action revalidates or updates cookies (which will still have `actionStore.isAction === true`) + throw Object.defineProperty(new Error(`${apiName} was used inside a Server Action. This is not supported. Functions from 'next/root-params' can only be called in the context of a route.`), "__NEXT_ERROR_CODE", { + value: "E1014", + enumerable: false, + configurable: true + }); + } + } + switch(workUnitStore.type){ + case 'unstable-cache': + { + throw Object.defineProperty(new Error(`Route ${workStore.route} used ${apiName} inside \`unstable_cache\`. This is not supported. Use \`"use cache"\` instead.`), "__NEXT_ERROR_CODE", { + value: "E1141", + enumerable: false, + configurable: true + }); + } + case 'cache': + { + if (!workUnitStore.rootParams) { + throw Object.defineProperty(new Error(`Route ${workStore.route} used ${apiName} inside \`"use cache"\` nested within \`unstable_cache\`. Root params are not available in this context.`), "__NEXT_ERROR_CODE", { + value: "E1140", + enumerable: false, + configurable: true + }); + } + workUnitStore.readRootParamNames.add(paramName); + return Promise.resolve(workUnitStore.rootParams[paramName]); + } + case 'prerender': + case 'prerender-ppr': + case 'prerender-legacy': + { + return createPrerenderRootParamPromise(paramName, workStore, workUnitStore, apiName); + } + case 'validation-client': + case 'prerender-client': + { + throw Object.defineProperty(new _invarianterror.InvariantError(`${apiName} must not be used within a client component. Next.js should be preventing ${apiName} from being included in client components statically, but did not in this case.`), "__NEXT_ERROR_CODE", { + value: "E1062", + enumerable: false, + configurable: true + }); + } + case 'request': + { + if (process.env.__NEXT_CACHE_COMPONENTS && workUnitStore.validationSamples) { + const { assertRootParamInSamples } = require('../app-render/instant-validation/instant-samples'); + // If we error, make sure we return a rejected promise instead of erroring synchronously. + try { + assertRootParamInSamples(workStore, workUnitStore.validationSamples.params, paramName); + } catch (err) { + return Promise.reject(err); + } + } + break; + } + case 'private-cache': + case 'prerender-runtime': + { + break; + } + case 'generate-static-params': + { + if (!(paramName in workUnitStore.rootParams)) { + throw Object.defineProperty(new Error(`Route ${workStore.route} used ${apiName} inside \`generateStaticParams\`, but the \`${paramName}\` parameter was not provided by a parent \`generateStaticParams\`. In \`generateStaticParams\`, root params are only available for segments nested below the segment that provides them.`), "__NEXT_ERROR_CODE", { + value: "E1142", + enumerable: false, + configurable: true + }); + } + break; + } + default: + { + workUnitStore; + } + } + (0, _varyparams.accumulateRootVaryParam)(paramName); + return Promise.resolve(workUnitStore.rootParams[paramName]); +} +function createPrerenderRootParamPromise(paramName, workStore, prerenderStore, apiName) { + switch(prerenderStore.type){ + case 'prerender': + case 'prerender-legacy': + case 'prerender-ppr': + default: + } + const underlyingParams = prerenderStore.rootParams; + switch(prerenderStore.type){ + case 'prerender': + { + // We are in a cacheComponents prerender. + // The param is a fallback, so it should be treated as dynamic. + if (prerenderStore.fallbackRouteParams && prerenderStore.fallbackRouteParams.has(paramName)) { + return (0, _dynamicrenderingutils.makeHangingPromise)(prerenderStore.renderSignal, workStore.route, apiName); + } + break; + } + case 'prerender-ppr': + { + // We aren't in a cacheComponents prerender, but the param is a fallback, + // so we need to make an erroring params object which will postpone/error if you access it + if (prerenderStore.fallbackRouteParams && prerenderStore.fallbackRouteParams.has(paramName)) { + return makeErroringRootParamPromise(paramName, workStore, prerenderStore, apiName); + } + break; + } + case 'prerender-legacy': + { + break; + } + default: + { + prerenderStore; + } + } + // If the param is not a fallback param, we just return the statically available value. + (0, _varyparams.accumulateRootVaryParam)(paramName); + return Promise.resolve(underlyingParams[paramName]); +} +/** Deliberately async -- we want to create a rejected promise, not error synchronously. */ async function makeErroringRootParamPromise(paramName, workStore, prerenderStore, apiName) { + const expression = (0, _reflectutils.describeStringPropertyAccess)(apiName, paramName); + // In most dynamic APIs, we also throw if `dynamic = "error"`. + // However, root params are only dynamic when we're generating a fallback shell, + // and even with `dynamic = "error"` we still support generating dynamic fallback shells. + // TODO: remove this comment when cacheComponents is the default since there will be no `dynamic = "error"` + switch(prerenderStore.type){ + case 'prerender-ppr': + { + return (0, _dynamicrendering.postponeWithTracking)(workStore.route, expression, prerenderStore.dynamicTracking); + } + case 'prerender-legacy': + { + return (0, _dynamicrendering.throwToInterruptStaticGeneration)(expression, workStore, prerenderStore); + } + default: + { + prerenderStore; + } + } +} + +//# sourceMappingURL=root-params.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/request/search-params.js b/build/node_modules/next/dist/server/request/search-params.js new file mode 100644 index 0000000..41a8c84 --- /dev/null +++ b/build/node_modules/next/dist/server/request/search-params.js @@ -0,0 +1,526 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createPrerenderSearchParamsForClientPage: null, + createSearchParamsFromClient: null, + createServerSearchParamsForMetadata: null, + createServerSearchParamsForServerPage: null, + makeErroringSearchParamsForUseCache: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createPrerenderSearchParamsForClientPage: function() { + return createPrerenderSearchParamsForClientPage; + }, + createSearchParamsFromClient: function() { + return createSearchParamsFromClient; + }, + createServerSearchParamsForMetadata: function() { + return createServerSearchParamsForMetadata; + }, + createServerSearchParamsForServerPage: function() { + return createServerSearchParamsForServerPage; + }, + makeErroringSearchParamsForUseCache: function() { + return makeErroringSearchParamsForUseCache; + } +}); +const _workasyncstorageexternal = require("../app-render/work-async-storage.external"); +const _varyparams = require("../app-render/vary-params"); +const _reflect = require("../web/spec-extension/adapters/reflect"); +const _dynamicrendering = require("../app-render/dynamic-rendering"); +const _workunitasyncstorageexternal = require("../app-render/work-unit-async-storage.external"); +const _invarianterror = require("../../shared/lib/invariant-error"); +const _dynamicrenderingutils = require("../dynamic-rendering-utils"); +const _creatededupedbycallsiteservererrorlogger = require("../create-deduped-by-callsite-server-error-logger"); +const _reflectutils = require("../../shared/lib/utils/reflect-utils"); +const _utils = require("./utils"); +const _stagedrendering = require("../app-render/staged-rendering"); +function createSearchParamsFromClient(underlyingSearchParams) { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + if (!workStore) { + throw Object.defineProperty(new _invarianterror.InvariantError('Expected workStore to be initialized'), "__NEXT_ERROR_CODE", { + value: "E1068", + enumerable: false, + configurable: true + }); + } + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'prerender-ppr': + case 'prerender-legacy': + return createStaticPrerenderSearchParams(workStore, workUnitStore); + case 'validation-client': + { + return createClientSearchParamsInValidation(underlyingSearchParams, workStore, workUnitStore); + } + case 'prerender-runtime': + throw Object.defineProperty(new _invarianterror.InvariantError('createSearchParamsFromClient should not be called in a runtime prerender.'), "__NEXT_ERROR_CODE", { + value: "E769", + enumerable: false, + configurable: true + }); + case 'cache': + case 'private-cache': + case 'unstable-cache': + throw Object.defineProperty(new _invarianterror.InvariantError('createSearchParamsFromClient should not be called in cache contexts.'), "__NEXT_ERROR_CODE", { + value: "E739", + enumerable: false, + configurable: true + }); + case 'generate-static-params': + throw Object.defineProperty(new _invarianterror.InvariantError('createSearchParamsFromClient should not be called inside generateStaticParams.'), "__NEXT_ERROR_CODE", { + value: "E1133", + enumerable: false, + configurable: true + }); + case 'request': + // Client searchParams are not runtime prefetchable + const isRuntimePrefetchable = false; + return createRenderSearchParams(underlyingSearchParams, workStore, workUnitStore, isRuntimePrefetchable); + default: + workUnitStore; + } + } + (0, _workunitasyncstorageexternal.throwInvariantForMissingStore)(); +} +function createServerSearchParamsForMetadata(underlyingSearchParams, isRuntimePrefetchable) { + const metadataVaryParamsAccumulator = (0, _varyparams.getMetadataVaryParamsAccumulator)(); + return createServerSearchParamsForServerPage(underlyingSearchParams, metadataVaryParamsAccumulator, isRuntimePrefetchable); +} +function createServerSearchParamsForServerPage(underlyingSearchParams, varyParamsAccumulator, isRuntimePrefetchable) { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + if (!workStore) { + throw Object.defineProperty(new _invarianterror.InvariantError('Expected workStore to be initialized'), "__NEXT_ERROR_CODE", { + value: "E1068", + enumerable: false, + configurable: true + }); + } + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'prerender-ppr': + case 'prerender-legacy': + return createStaticPrerenderSearchParams(workStore, workUnitStore); + case 'validation-client': + throw Object.defineProperty(new _invarianterror.InvariantError('createServerSearchParamsForServerPage should not be called in a client validation.'), "__NEXT_ERROR_CODE", { + value: "E1066", + enumerable: false, + configurable: true + }); + case 'cache': + case 'private-cache': + case 'unstable-cache': + throw Object.defineProperty(new _invarianterror.InvariantError('createServerSearchParamsForServerPage should not be called in cache contexts.'), "__NEXT_ERROR_CODE", { + value: "E747", + enumerable: false, + configurable: true + }); + case 'generate-static-params': + throw Object.defineProperty(new _invarianterror.InvariantError('createServerSearchParamsForServerPage should not be called inside generateStaticParams.'), "__NEXT_ERROR_CODE", { + value: "E1128", + enumerable: false, + configurable: true + }); + case 'prerender-runtime': + return createRuntimePrerenderSearchParams(underlyingSearchParams, workUnitStore, varyParamsAccumulator, isRuntimePrefetchable); + case 'request': + return createRenderSearchParams(underlyingSearchParams, workStore, workUnitStore, isRuntimePrefetchable); + default: + workUnitStore; + } + } + (0, _workunitasyncstorageexternal.throwInvariantForMissingStore)(); +} +function createPrerenderSearchParamsForClientPage() { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + if (!workStore) { + throw Object.defineProperty(new _invarianterror.InvariantError('Expected workStore to be initialized'), "__NEXT_ERROR_CODE", { + value: "E1068", + enumerable: false, + configurable: true + }); + } + if (workStore.forceStatic) { + // When using forceStatic we override all other logic and always just return an empty + // dictionary object. + return Promise.resolve({}); + } + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + // We're prerendering in a mode that aborts (cacheComponents) and should stall + // the promise to ensure the RSC side is considered dynamic + return (0, _dynamicrenderingutils.makeHangingPromise)(workUnitStore.renderSignal, workStore.route, '`searchParams`'); + case 'validation-client': + throw Object.defineProperty(new _invarianterror.InvariantError('createPrerenderSearchParamsForClientPage should not be called in a client validation.'), "__NEXT_ERROR_CODE", { + value: "E1061", + enumerable: false, + configurable: true + }); + case 'prerender-runtime': + throw Object.defineProperty(new _invarianterror.InvariantError('createPrerenderSearchParamsForClientPage should not be called in a runtime prerender.'), "__NEXT_ERROR_CODE", { + value: "E768", + enumerable: false, + configurable: true + }); + case 'cache': + case 'private-cache': + case 'unstable-cache': + throw Object.defineProperty(new _invarianterror.InvariantError('createPrerenderSearchParamsForClientPage should not be called in cache contexts.'), "__NEXT_ERROR_CODE", { + value: "E746", + enumerable: false, + configurable: true + }); + case 'generate-static-params': + throw Object.defineProperty(new _invarianterror.InvariantError('createPrerenderSearchParamsForClientPage should not be called inside generateStaticParams.'), "__NEXT_ERROR_CODE", { + value: "E1124", + enumerable: false, + configurable: true + }); + case 'prerender-ppr': + case 'prerender-legacy': + case 'request': + return Promise.resolve({}); + default: + workUnitStore; + } + } + (0, _workunitasyncstorageexternal.throwInvariantForMissingStore)(); +} +function createStaticPrerenderSearchParams(workStore, prerenderStore) { + if (workStore.forceStatic) { + // When using forceStatic we override all other logic and always just return an empty + // dictionary object. + return Promise.resolve({}); + } + switch(prerenderStore.type){ + case 'prerender': + case 'prerender-client': + // We are in a cacheComponents (PPR or otherwise) prerender + return makeHangingSearchParams(workStore, prerenderStore); + case 'prerender-ppr': + case 'prerender-legacy': + // We are in a legacy static generation and need to interrupt the + // prerender when search params are accessed. + return makeErroringSearchParams(workStore, prerenderStore); + default: + return prerenderStore; + } +} +function createRuntimePrerenderSearchParams(underlyingSearchParams, workUnitStore, varyParamsAccumulator, isRuntimePrefetchable) { + const underlyingSearchParamsWithVarying = varyParamsAccumulator !== null ? (0, _varyparams.createVaryingSearchParams)(varyParamsAccumulator, underlyingSearchParams) : underlyingSearchParams; + const result = makeUntrackedSearchParams(underlyingSearchParamsWithVarying); + const { stagedRendering } = workUnitStore; + if (!stagedRendering) { + return result; + } + const stage = isRuntimePrefetchable ? _stagedrendering.RenderStage.EarlyRuntime : _stagedrendering.RenderStage.Runtime; + return stagedRendering.waitForStage(stage).then(()=>result); +} +function createRenderSearchParams(underlyingSearchParams, workStore, requestStore, isRuntimePrefetchable) { + if (workStore.forceStatic) { + // When using forceStatic we override all other logic and always just return an empty + // dictionary object. + return Promise.resolve({}); + } else { + if (process.env.NODE_ENV === 'development') { + // Semantically we only need the dev tracking when running in `next dev` + // but since you would never use next dev with production NODE_ENV we use this + // as a proxy so we can statically exclude this code from production builds. + return makeUntrackedSearchParamsWithDevWarnings(underlyingSearchParams, workStore, requestStore, isRuntimePrefetchable); + } else if (requestStore.asyncApiPromises) { + if (requestStore.validationSamples) { + const { createExhaustiveSearchParamsProxy } = require('../app-render/instant-validation/instant-samples'); + const declaredKeys = new Set(Object.keys(requestStore.validationSamples.searchParams ?? {})); + underlyingSearchParams = createExhaustiveSearchParamsProxy(underlyingSearchParams, declaredKeys, workStore.route); + } + return (isRuntimePrefetchable ? requestStore.asyncApiPromises.earlySharedSearchParamsParent : requestStore.asyncApiPromises.sharedSearchParamsParent).then(()=>underlyingSearchParams); + } else { + return makeUntrackedSearchParams(underlyingSearchParams); + } + } +} +const CachedSearchParams = new WeakMap(); +const CachedSearchParamsForUseCache = new WeakMap(); +function makeHangingSearchParams(workStore, prerenderStore) { + const cachedSearchParams = CachedSearchParams.get(prerenderStore); + if (cachedSearchParams) { + return cachedSearchParams; + } + const promise = (0, _dynamicrenderingutils.makeHangingPromise)(prerenderStore.renderSignal, workStore.route, '`searchParams`'); + const proxiedPromise = new Proxy(promise, { + get (target, prop, receiver) { + if (Object.hasOwn(promise, prop)) { + // The promise has this property directly. we must return it. + // We know it isn't a dynamic access because it can only be something + // that was previously written to the promise and thus not an underlying searchParam value + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + switch(prop){ + case 'then': + { + const expression = '`await searchParams`, `searchParams.then`, or similar'; + (0, _dynamicrendering.annotateDynamicAccess)(expression, prerenderStore); + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + case 'status': + { + const expression = '`use(searchParams)`, `searchParams.status`, or similar'; + (0, _dynamicrendering.annotateDynamicAccess)(expression, prerenderStore); + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + default: + { + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + } + } + }); + CachedSearchParams.set(prerenderStore, proxiedPromise); + return proxiedPromise; +} +function makeErroringSearchParams(workStore, prerenderStore) { + const cachedSearchParams = CachedSearchParams.get(workStore); + if (cachedSearchParams) { + return cachedSearchParams; + } + const underlyingSearchParams = {}; + // For search params we don't construct a ReactPromise because we want to interrupt + // rendering on any property access that was not set from outside and so we only want + // to have properties like value and status if React sets them. + const promise = Promise.resolve(underlyingSearchParams); + const proxiedPromise = new Proxy(promise, { + get (target, prop, receiver) { + if (Object.hasOwn(promise, prop)) { + // The promise has this property directly. we must return it. + // We know it isn't a dynamic access because it can only be something + // that was previously written to the promise and thus not an underlying searchParam value + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + if (typeof prop === 'string' && prop === 'then') { + const expression = '`await searchParams`, `searchParams.then`, or similar'; + if (workStore.dynamicShouldError) { + (0, _utils.throwWithStaticGenerationBailoutErrorWithDynamicError)(workStore.route, expression); + } else if (prerenderStore.type === 'prerender-ppr') { + // PPR Prerender (no cacheComponents) + (0, _dynamicrendering.postponeWithTracking)(workStore.route, expression, prerenderStore.dynamicTracking); + } else { + // Legacy Prerender + (0, _dynamicrendering.throwToInterruptStaticGeneration)(expression, workStore, prerenderStore); + } + } + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + }); + CachedSearchParams.set(workStore, proxiedPromise); + return proxiedPromise; +} +function makeErroringSearchParamsForUseCache() { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + if (!workStore) { + throw Object.defineProperty(new _invarianterror.InvariantError('Expected workStore to be initialized'), "__NEXT_ERROR_CODE", { + value: "E1068", + enumerable: false, + configurable: true + }); + } + const cachedSearchParams = CachedSearchParamsForUseCache.get(workStore); + if (cachedSearchParams) { + return cachedSearchParams; + } + const promise = Promise.resolve({}); + const proxiedPromise = new Proxy(promise, { + get: function get(target, prop, receiver) { + if (Object.hasOwn(promise, prop)) { + // The promise has this property directly. we must return it. We know it + // isn't a dynamic access because it can only be something that was + // previously written to the promise and thus not an underlying + // searchParam value + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + if (typeof prop === 'string' && (prop === 'then' || !_reflectutils.wellKnownProperties.has(prop))) { + (0, _utils.throwForSearchParamsAccessInUseCache)(workStore, get); + } + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + }); + CachedSearchParamsForUseCache.set(workStore, proxiedPromise); + return proxiedPromise; +} +function makeUntrackedSearchParams(underlyingSearchParams) { + const cachedSearchParams = CachedSearchParams.get(underlyingSearchParams); + if (cachedSearchParams) { + return cachedSearchParams; + } + const promise = Promise.resolve(underlyingSearchParams); + CachedSearchParams.set(underlyingSearchParams, promise); + return promise; +} +function makeUntrackedSearchParamsWithDevWarnings(underlyingSearchParams, workStore, requestStore, isRuntimePrefetchable) { + if (requestStore.asyncApiPromises) { + // Do not cache the resulting promise. If we do, we'll only show the first "awaited at" + // across all segments that receive searchParams. + return makeUntrackedSearchParamsWithDevWarningsImpl(underlyingSearchParams, workStore, requestStore, isRuntimePrefetchable); + } else { + const cachedSearchParams = CachedSearchParams.get(underlyingSearchParams); + if (cachedSearchParams) { + return cachedSearchParams; + } + const promise = makeUntrackedSearchParamsWithDevWarningsImpl(underlyingSearchParams, workStore, requestStore, isRuntimePrefetchable); + CachedSearchParams.set(requestStore, promise); + return promise; + } +} +function makeUntrackedSearchParamsWithDevWarningsImpl(underlyingSearchParams, workStore, requestStore, isRuntimePrefetchable) { + const promiseInitialized = { + current: false + }; + const proxiedUnderlying = instrumentSearchParamsObjectWithDevWarnings(underlyingSearchParams, workStore, promiseInitialized); + let promise; + if (requestStore.asyncApiPromises) { + // We wrap each instance of searchParams in a `new Promise()`. + // This is important when all awaits are in third party which would otherwise + // track all the way to the internal params. + const sharedSearchParamsParent = isRuntimePrefetchable ? requestStore.asyncApiPromises.earlySharedSearchParamsParent : requestStore.asyncApiPromises.sharedSearchParamsParent; + promise = new Promise((resolve, reject)=>{ + sharedSearchParamsParent.then(()=>resolve(proxiedUnderlying), reject); + }); + // @ts-expect-error + promise.displayName = 'searchParams'; + } else { + promise = (0, _dynamicrenderingutils.makeDevtoolsIOAwarePromise)(proxiedUnderlying, requestStore, _stagedrendering.RenderStage.Runtime); + } + promise.then(()=>{ + promiseInitialized.current = true; + }, // If we're in staged rendering, this promise will reject if the render + // is aborted before it can reach the runtime stage. + // In that case, we have to prevent an unhandled rejection from the promise + // created by this `.then()` call. + // This does not affect the `promiseInitialized` logic above, + // because `proxiedUnderlying` will not be used to resolve the promise, + // so there's no risk of any of its properties being accessed and triggering + // an undesireable warning. + ignoreReject); + return instrumentSearchParamsPromiseWithDevWarnings(underlyingSearchParams, promise, workStore); +} +function ignoreReject() {} +function instrumentSearchParamsObjectWithDevWarnings(underlyingSearchParams, workStore, promiseInitialized) { + // We have an unfortunate sequence of events that requires this initialization logic. We want to instrument the underlying + // searchParams object to detect if you are accessing values in dev. This is used for warnings and for things like the static prerender + // indicator. However when we pass this proxy to our Promise.resolve() below the VM checks if the resolved value is a promise by looking + // at the `.then` property. To our dynamic tracking logic this is indistinguishable from a `then` searchParam and so we would normally trigger + // dynamic tracking. However we know that this .then is not real dynamic access, it's just how thenables resolve in sequence. So we introduce + // this initialization concept so we omit the dynamic check until after we've constructed our resolved promise. + return new Proxy(underlyingSearchParams, { + get (target, prop, receiver) { + if (typeof prop === 'string' && promiseInitialized.current) { + if (workStore.dynamicShouldError) { + const expression = (0, _reflectutils.describeStringPropertyAccess)('searchParams', prop); + (0, _utils.throwWithStaticGenerationBailoutErrorWithDynamicError)(workStore.route, expression); + } + } + return _reflect.ReflectAdapter.get(target, prop, receiver); + }, + has (target, prop) { + if (typeof prop === 'string') { + if (workStore.dynamicShouldError) { + const expression = (0, _reflectutils.describeHasCheckingStringProperty)('searchParams', prop); + (0, _utils.throwWithStaticGenerationBailoutErrorWithDynamicError)(workStore.route, expression); + } + } + return Reflect.has(target, prop); + }, + ownKeys (target) { + if (workStore.dynamicShouldError) { + const expression = '`{...searchParams}`, `Object.keys(searchParams)`, or similar'; + (0, _utils.throwWithStaticGenerationBailoutErrorWithDynamicError)(workStore.route, expression); + } + return Reflect.ownKeys(target); + } + }); +} +function instrumentSearchParamsPromiseWithDevWarnings(underlyingSearchParams, promise, workStore) { + // Track which properties we should warn for. + const proxiedProperties = new Set(); + Object.keys(underlyingSearchParams).forEach((prop)=>{ + if (_reflectutils.wellKnownProperties.has(prop)) { + // These properties cannot be shadowed because they need to be the + // true underlying value for Promises to work correctly at runtime + } else { + proxiedProperties.add(prop); + } + }); + return new Proxy(promise, { + get (target, prop, receiver) { + if (prop === 'then' && workStore.dynamicShouldError) { + const expression = '`searchParams.then`'; + (0, _utils.throwWithStaticGenerationBailoutErrorWithDynamicError)(workStore.route, expression); + } + if (typeof prop === 'string') { + if (!_reflectutils.wellKnownProperties.has(prop) && (proxiedProperties.has(prop) || // We are accessing a property that doesn't exist on the promise nor + // the underlying searchParams. + Reflect.has(target, prop) === false)) { + const expression = (0, _reflectutils.describeStringPropertyAccess)('searchParams', prop); + warnForSyncAccess(workStore.route, expression); + } + } + return _reflect.ReflectAdapter.get(target, prop, receiver); + }, + set (target, prop, value, receiver) { + if (typeof prop === 'string') { + proxiedProperties.delete(prop); + } + return Reflect.set(target, prop, value, receiver); + }, + has (target, prop) { + if (typeof prop === 'string') { + if (!_reflectutils.wellKnownProperties.has(prop) && (proxiedProperties.has(prop) || // We are accessing a property that doesn't exist on the promise nor + // the underlying searchParams. + Reflect.has(target, prop) === false)) { + const expression = (0, _reflectutils.describeHasCheckingStringProperty)('searchParams', prop); + warnForSyncAccess(workStore.route, expression); + } + } + return Reflect.has(target, prop); + }, + ownKeys (target) { + const expression = '`Object.keys(searchParams)` or similar'; + warnForSyncAccess(workStore.route, expression); + return Reflect.ownKeys(target); + } + }); +} +const warnForSyncAccess = (0, _creatededupedbycallsiteservererrorlogger.createDedupedByCallsiteServerErrorLoggerDev)(createSearchAccessError); +function createSearchAccessError(route, expression) { + const prefix = route ? `Route "${route}" ` : 'This route '; + return Object.defineProperty(new Error(`${prefix}used ${expression}. ` + `\`searchParams\` is a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. ` + `Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`), "__NEXT_ERROR_CODE", { + value: "E848", + enumerable: false, + configurable: true + }); +} +function createClientSearchParamsInValidation(underlyingSearchParams, workStore, workUnitStore) { + var _workUnitStore_validationSamples; + const { createExhaustiveSearchParamsProxy } = require('../app-render/instant-validation/instant-samples'); + const declaredKeys = new Set(Object.keys(((_workUnitStore_validationSamples = workUnitStore.validationSamples) == null ? void 0 : _workUnitStore_validationSamples.searchParams) ?? {})); + underlyingSearchParams = createExhaustiveSearchParamsProxy(underlyingSearchParams, declaredKeys, workStore.route); + return Promise.resolve(underlyingSearchParams); +} + +//# sourceMappingURL=search-params.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/request/utils.js b/build/node_modules/next/dist/server/request/utils.js new file mode 100644 index 0000000..493516f --- /dev/null +++ b/build/node_modules/next/dist/server/request/utils.js @@ -0,0 +1,51 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + isRequestAPICallableInsideAfter: null, + throwForSearchParamsAccessInUseCache: null, + throwWithStaticGenerationBailoutErrorWithDynamicError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + isRequestAPICallableInsideAfter: function() { + return isRequestAPICallableInsideAfter; + }, + throwForSearchParamsAccessInUseCache: function() { + return throwForSearchParamsAccessInUseCache; + }, + throwWithStaticGenerationBailoutErrorWithDynamicError: function() { + return throwWithStaticGenerationBailoutErrorWithDynamicError; + } +}); +const _staticgenerationbailout = require("../../client/components/static-generation-bailout"); +const _aftertaskasyncstorageexternal = require("../app-render/after-task-async-storage.external"); +function throwWithStaticGenerationBailoutErrorWithDynamicError(route, expression) { + throw Object.defineProperty(new _staticgenerationbailout.StaticGenBailoutError(`Route ${route} with \`dynamic = "error"\` couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`), "__NEXT_ERROR_CODE", { + value: "E543", + enumerable: false, + configurable: true + }); +} +function throwForSearchParamsAccessInUseCache(workStore, constructorOpt) { + const error = Object.defineProperty(new Error(`Route ${workStore.route} used \`searchParams\` inside "use cache". Accessing dynamic request data inside a cache scope is not supported. If you need some search params inside a cached function await \`searchParams\` outside of the cached function and pass only the required search params as arguments to the cached function. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`), "__NEXT_ERROR_CODE", { + value: "E842", + enumerable: false, + configurable: true + }); + Error.captureStackTrace(error, constructorOpt); + workStore.invalidDynamicUsageError ??= error; + throw error; +} +function isRequestAPICallableInsideAfter() { + const afterTaskStore = _aftertaskasyncstorageexternal.afterTaskAsyncStorage.getStore(); + return (afterTaskStore == null ? void 0 : afterTaskStore.rootTaskSpawnPhase) === 'action'; +} + +//# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/require-hook.js b/build/node_modules/next/dist/server/require-hook.js new file mode 100644 index 0000000..5e0fee2 --- /dev/null +++ b/build/node_modules/next/dist/server/require-hook.js @@ -0,0 +1,82 @@ +// Synchronously inject a require hook for webpack and webpack/. It's required to use the internal ncc webpack version. +// This is needed for userland plugins to attach to the same webpack instance as Next.js'. +// Individually compiled modules are as defined for the compilation in bundles/webpack/packages/*. +// This module will only be loaded once per process. +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + addHookAliases: null, + defaultOverrides: null, + hookPropertyMap: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + addHookAliases: function() { + return addHookAliases; + }, + defaultOverrides: function() { + return defaultOverrides; + }, + hookPropertyMap: function() { + return hookPropertyMap; + } +}); +const path = require('path'); +const mod = require('module'); +const originalRequire = mod.prototype.require; +const resolveFilename = // @ts-expect-error +mod._resolveFilename; +let resolve = process.env.NEXT_MINIMAL ? __non_webpack_require__.resolve : require.resolve; +const hookPropertyMap = new Map(); +const defaultOverrides = {}; +try { + Object.assign(defaultOverrides, { + 'styled-jsx': path.dirname(resolve('styled-jsx/package.json')), + 'styled-jsx/style': resolve('styled-jsx/style'), + 'styled-jsx/style.js': resolve('styled-jsx/style') + }); +} catch (_) {} +const toResolveMap = (map)=>{ + const resolveMap = []; + for (const [key, value] of Object.entries(map)){ + try { + resolveMap.push([ + key, + resolve(value) + ]); + } catch {} + } + return resolveMap; +}; +function addHookAliases(aliases = []) { + for (const [key, value] of aliases){ + hookPropertyMap.set(key, value); + } +} +addHookAliases(toResolveMap(defaultOverrides)); +// @ts-expect-error +mod._resolveFilename = (function(originalResolveFilename, requestMap, request, parent, isMain, options) { + const hookResolved = requestMap.get(request); + if (hookResolved) request = hookResolved; + return originalResolveFilename.call(mod, request, parent, isMain, options); +// We use `bind` here to avoid referencing outside variables to create potential memory leaks. +}).bind(null, resolveFilename, hookPropertyMap); +// @ts-expect-error +// This is a hack to make sure that if a user requires a Next.js module that wasn't bundled +// that needs to point to the rendering runtime version, it will point to the correct one. +// This can happen on `pages` when a user requires a dependency that uses next/image for example. +mod.prototype.require = function(request) { + if (request.endsWith('.shared-runtime')) { + return originalRequire.call(this, `next/dist/server/route-modules/pages/vendored/contexts/${path.basename(request, '.shared-runtime')}`); + } + return originalRequire.call(this, request); +}; + +//# sourceMappingURL=require-hook.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/require.js b/build/node_modules/next/dist/server/require.js new file mode 100644 index 0000000..6f4904a --- /dev/null +++ b/build/node_modules/next/dist/server/require.js @@ -0,0 +1,109 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getMaybePagePath: null, + getPagePath: null, + requirePage: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getMaybePagePath: function() { + return getMaybePagePath; + }, + getPagePath: function() { + return getPagePath; + }, + requirePage: function() { + return requirePage; + } +}); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _constants = require("../shared/lib/constants"); +const _normalizelocalepath = require("../shared/lib/i18n/normalize-locale-path"); +const _normalizepagepath = require("../shared/lib/page-path/normalize-page-path"); +const _denormalizepagepath = require("../shared/lib/page-path/denormalize-page-path"); +const _utils = require("../shared/lib/utils"); +const _lrucache = require("../server/lib/lru-cache"); +const _loadmanifestexternal = require("./load-manifest.external"); +const _fs = require("fs"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const isDev = process.env.NODE_ENV === 'development'; +const pagePathCache = !isDev ? new _lrucache.LRUCache(1000) : null; +function getMaybePagePath(page, distDir, locales, isAppPath) { + const cacheKey = `${page}:${distDir}:${locales}:${isAppPath}`; + let pagePath = pagePathCache == null ? void 0 : pagePathCache.get(cacheKey); + // If we have a cached path, we can return it directly. + if (pagePath) return pagePath; + const serverBuildPath = _path.default.join(/* turbopackIgnore: true */ distDir, _constants.SERVER_DIRECTORY); + let appPathsManifest; + if (isAppPath) { + appPathsManifest = (0, _loadmanifestexternal.loadManifest)(_path.default.join(/* turbopackIgnore: true */ serverBuildPath, _constants.APP_PATHS_MANIFEST), !isDev); + } + const pagesManifest = (0, _loadmanifestexternal.loadManifest)(_path.default.join(/* turbopackIgnore: true */ serverBuildPath, _constants.PAGES_MANIFEST), !isDev); + try { + page = (0, _denormalizepagepath.denormalizePagePath)((0, _normalizepagepath.normalizePagePath)(page)); + } catch (err) { + console.error(err); + throw new _utils.PageNotFoundError(page); + } + const checkManifest = (manifest)=>{ + let curPath = manifest[page]; + if (!manifest[curPath] && locales) { + const manifestNoLocales = {}; + for (const key of Object.keys(manifest)){ + manifestNoLocales[(0, _normalizelocalepath.normalizeLocalePath)(key, locales).pathname] = pagesManifest[key]; + } + curPath = manifestNoLocales[page]; + } + return curPath; + }; + if (appPathsManifest) { + pagePath = checkManifest(appPathsManifest); + } + if (!pagePath) { + pagePath = checkManifest(pagesManifest); + } + if (!pagePath) { + pagePathCache == null ? void 0 : pagePathCache.set(cacheKey, null); + return null; + } + // Handle absolute paths (e.g., built-in components) + if (_path.default.isAbsolute(pagePath)) { + // Use the absolute path as-is + pagePathCache == null ? void 0 : pagePathCache.set(cacheKey, pagePath); + return pagePath; + } + pagePath = _path.default.join(/* turbopackIgnore: true */ serverBuildPath, pagePath); + pagePathCache == null ? void 0 : pagePathCache.set(cacheKey, pagePath); + return pagePath; +} +function getPagePath(page, distDir, locales, isAppPath) { + const pagePath = getMaybePagePath(page, distDir, locales, isAppPath); + if (!pagePath) { + throw new _utils.PageNotFoundError(page); + } + return pagePath; +} +async function requirePage(page, distDir, isAppPath) { + const pagePath = getPagePath(page, distDir, undefined, isAppPath); + if (pagePath.endsWith('.html')) { + return _fs.promises.readFile(/* turbopackIgnore: true */ pagePath, 'utf8').catch((err)=>{ + throw new _utils.MissingStaticPage(page, err.message); + }); + } + const mod = process.env.NEXT_MINIMAL ? __non_webpack_require__(pagePath) : require(/* turbopackIgnore: true */ pagePath); + return mod; +} + +//# sourceMappingURL=require.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/response-cache/index.js b/build/node_modules/next/dist/server/response-cache/index.js new file mode 100644 index 0000000..452408c --- /dev/null +++ b/build/node_modules/next/dist/server/response-cache/index.js @@ -0,0 +1,311 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "default", { + enumerable: true, + get: function() { + return ResponseCache; + } +}); +0 && __export(require("./types")); +const _batcher = require("../../lib/batcher"); +const _lrucache = require("../lib/lru-cache"); +const _log = require("../../build/output/log"); +const _scheduler = require("../../lib/scheduler"); +const _utils = require("./utils"); +_export_star(require("./types"), exports); +function _export_star(from, to) { + Object.keys(from).forEach(function(k) { + if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) { + Object.defineProperty(to, k, { + enumerable: true, + get: function() { + return from[k]; + } + }); + } + }); + return from; +} +/** + * Parses an environment variable as a positive integer, returning the fallback + * if the value is missing, not a number, or not positive. + */ function parsePositiveInt(envValue, fallback) { + if (!envValue) return fallback; + const parsed = parseInt(envValue, 10); + return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback; +} +/** + * Default TTL (in milliseconds) for minimal mode response cache entries. + * Used for cache hit validation as a fallback for providers that don't + * send the x-invocation-id header yet. + * + * 10 seconds chosen because: + * - Long enough to dedupe rapid successive requests (e.g., page + data) + * - Short enough to not serve stale data across unrelated requests + * + * Can be configured via `NEXT_PRIVATE_RESPONSE_CACHE_TTL` environment variable. + */ const DEFAULT_TTL_MS = parsePositiveInt(process.env.NEXT_PRIVATE_RESPONSE_CACHE_TTL, 10000); +/** + * Default maximum number of entries in the response cache. + * Can be configured via `NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE` environment variable. + */ const DEFAULT_MAX_SIZE = parsePositiveInt(process.env.NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE, 150); +/** + * Separator used in compound cache keys to join pathname and invocationID. + * Using null byte (\0) since it cannot appear in valid URL paths or UUIDs. + */ const KEY_SEPARATOR = '\0'; +/** + * Sentinel value used for TTL-based cache entries (when invocationID is undefined). + * Chosen to be a clearly reserved marker for internal cache keys. + */ const TTL_SENTINEL = '__ttl_sentinel__'; +/** + * Creates a compound cache key from pathname and invocationID. + */ function createCacheKey(pathname, invocationID) { + return `${pathname}${KEY_SEPARATOR}${invocationID ?? TTL_SENTINEL}`; +} +/** + * Extracts the invocationID from a compound cache key. + * Returns undefined if the key used TTL_SENTINEL. + */ function extractInvocationID(compoundKey) { + const separatorIndex = compoundKey.lastIndexOf(KEY_SEPARATOR); + if (separatorIndex === -1) return undefined; + const invocationID = compoundKey.slice(separatorIndex + 1); + return invocationID === TTL_SENTINEL ? undefined : invocationID; +} +class ResponseCache { + constructor(minimal_mode, maxSize = DEFAULT_MAX_SIZE, ttl = DEFAULT_TTL_MS){ + this.getBatcher = _batcher.Batcher.create({ + // Ensure on-demand revalidate doesn't block normal requests, it should be + // safe to run an on-demand revalidate for the same key as a normal request. + cacheKeyFn: ({ key, isOnDemandRevalidate })=>`${key}-${isOnDemandRevalidate ? '1' : '0'}`, + // We wait to do any async work until after we've added our promise to + // `pendingResponses` to ensure that any any other calls will reuse the + // same promise until we've fully finished our work. + schedulerFn: _scheduler.scheduleOnNextTick + }); + this.revalidateBatcher = _batcher.Batcher.create({ + // We wait to do any async work until after we've added our promise to + // `pendingResponses` to ensure that any any other calls will reuse the + // same promise until we've fully finished our work. + schedulerFn: _scheduler.scheduleOnNextTick + }); + /** + * Set of invocation IDs that have had cache entries evicted. + * Used to detect when the cache size may be too small. + * Bounded to prevent memory growth. + */ this.evictedInvocationIDs = new Set(); + this.minimal_mode = minimal_mode; + this.maxSize = maxSize; + this.ttl = ttl; + // Create the LRU cache with eviction tracking + this.cache = new _lrucache.LRUCache(maxSize, undefined, (compoundKey)=>{ + const invocationID = extractInvocationID(compoundKey); + if (invocationID) { + // Bound to 100 entries to prevent unbounded memory growth. + // FIFO eviction is acceptable here because: + // 1. Invocations are short-lived (single request lifecycle), so older + // invocations are unlikely to still be active after 100 newer ones + // 2. This warning mechanism is best-effort for developer guidance— + // missing occasional eviction warnings doesn't affect correctness + // 3. If a long-running invocation is somehow evicted and then has + // another cache entry evicted, it will simply be re-added + if (this.evictedInvocationIDs.size >= 100) { + const first = this.evictedInvocationIDs.values().next().value; + if (first) this.evictedInvocationIDs.delete(first); + } + this.evictedInvocationIDs.add(invocationID); + } + }); + } + /** + * Gets the response cache entry for the given key. + * + * @param key - The key to get the response cache entry for. + * @param responseGenerator - The response generator to use to generate the response cache entry. + * @param context - The context for the get request. + * @returns The response cache entry. + */ async get(key, responseGenerator, context) { + // If there is no key for the cache, we can't possibly look this up in the + // cache so just return the result of the response generator. + if (!key) { + return responseGenerator({ + hasResolved: false, + previousCacheEntry: null + }); + } + // Check minimal mode cache before doing any other work. + if (this.minimal_mode) { + const cacheKey = createCacheKey(key, context.invocationID); + const cachedItem = this.cache.get(cacheKey); + if (cachedItem) { + // With invocationID: exact match found - always a hit + // With TTL mode: must check expiration + if (context.invocationID !== undefined) { + return (0, _utils.toResponseCacheEntry)(cachedItem.entry); + } + // TTL mode: check expiration + const now = Date.now(); + if (cachedItem.expiresAt > now) { + return (0, _utils.toResponseCacheEntry)(cachedItem.entry); + } + // TTL expired - clean up + this.cache.remove(cacheKey); + } + // Warn if this invocation had entries evicted - indicates cache may be too small. + if (context.invocationID && this.evictedInvocationIDs.has(context.invocationID)) { + (0, _log.warnOnce)(`Response cache entry was evicted for invocation ${context.invocationID}. ` + `Consider increasing NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE (current: ${this.maxSize}).`); + } + } + const { incrementalCache, isOnDemandRevalidate = false, isFallback = false, isRoutePPREnabled = false, isPrefetch = false, waitUntil, routeKind, invocationID } = context; + const response = await this.getBatcher.batch({ + key, + isOnDemandRevalidate + }, ({ resolve })=>{ + const promise = this.handleGet(key, responseGenerator, { + incrementalCache, + isOnDemandRevalidate, + isFallback, + isRoutePPREnabled, + isPrefetch, + routeKind, + invocationID + }, resolve); + // We need to ensure background revalidates are passed to waitUntil. + if (waitUntil) waitUntil(promise); + return promise; + }); + return (0, _utils.toResponseCacheEntry)(response); + } + /** + * Handles the get request for the response cache. + * + * @param key - The key to get the response cache entry for. + * @param responseGenerator - The response generator to use to generate the response cache entry. + * @param context - The context for the get request. + * @param resolve - The resolve function to use to resolve the response cache entry. + * @returns The response cache entry. + */ async handleGet(key, responseGenerator, context, resolve) { + let previousIncrementalCacheEntry = null; + let resolved = false; + try { + // Get the previous cache entry if not in minimal mode + previousIncrementalCacheEntry = !this.minimal_mode ? await context.incrementalCache.get(key, { + kind: (0, _utils.routeKindToIncrementalCacheKind)(context.routeKind), + isRoutePPREnabled: context.isRoutePPREnabled, + isFallback: context.isFallback + }) : null; + if (previousIncrementalCacheEntry && !context.isOnDemandRevalidate) { + resolve(previousIncrementalCacheEntry); + resolved = true; + if (!previousIncrementalCacheEntry.isStale || context.isPrefetch) { + // The cached value is still valid, so we don't need to update it yet. + return previousIncrementalCacheEntry; + } + } + // Revalidate the cache entry + const incrementalResponseCacheEntry = await this.revalidate(key, context.incrementalCache, context.isRoutePPREnabled, context.isFallback, responseGenerator, previousIncrementalCacheEntry, previousIncrementalCacheEntry !== null && !context.isOnDemandRevalidate, undefined, context.invocationID); + // Handle null response + if (!incrementalResponseCacheEntry) { + // Remove the cache item if it was set so we don't use it again. + if (this.minimal_mode) { + const cacheKey = createCacheKey(key, context.invocationID); + this.cache.remove(cacheKey); + } + return null; + } + // Resolve for on-demand revalidation or if not already resolved + if (context.isOnDemandRevalidate && !resolved) { + return incrementalResponseCacheEntry; + } + return incrementalResponseCacheEntry; + } catch (err) { + // If we've already resolved the cache entry, we can't reject as we + // already resolved the cache entry so log the error here. + if (resolved) { + console.error(err); + return null; + } + throw err; + } + } + /** + * Revalidates the cache entry for the given key. + * + * @param key - The key to revalidate the cache entry for. + * @param incrementalCache - The incremental cache to use to revalidate the cache entry. + * @param isRoutePPREnabled - Whether the route is PPR enabled. + * @param isFallback - Whether the route is a fallback. + * @param responseGenerator - The response generator to use to generate the response cache entry. + * @param previousIncrementalCacheEntry - The previous cache entry to use to revalidate the cache entry. + * @param hasResolved - Whether the response has been resolved. + * @param waitUntil - Optional function to register background work. + * @param invocationID - The invocation ID for cache key scoping. + * @returns The revalidated cache entry. + */ async revalidate(key, incrementalCache, isRoutePPREnabled, isFallback, responseGenerator, previousIncrementalCacheEntry, hasResolved, waitUntil, invocationID) { + return this.revalidateBatcher.batch(key, ()=>{ + const promise = this.handleRevalidate(key, incrementalCache, isRoutePPREnabled, isFallback, responseGenerator, previousIncrementalCacheEntry, hasResolved, invocationID); + // We need to ensure background revalidates are passed to waitUntil. + if (waitUntil) waitUntil(promise); + return promise; + }); + } + async handleRevalidate(key, incrementalCache, isRoutePPREnabled, isFallback, responseGenerator, previousIncrementalCacheEntry, hasResolved, invocationID) { + try { + // Generate the response cache entry using the response generator. + const responseCacheEntry = await responseGenerator({ + hasResolved, + previousCacheEntry: previousIncrementalCacheEntry, + isRevalidating: true + }); + if (!responseCacheEntry) { + return null; + } + // Convert the response cache entry to an incremental response cache entry. + const incrementalResponseCacheEntry = await (0, _utils.fromResponseCacheEntry)({ + ...responseCacheEntry, + isMiss: !previousIncrementalCacheEntry + }); + // We want to persist the result only if it has a cache control value + // defined. + if (incrementalResponseCacheEntry.cacheControl) { + if (this.minimal_mode) { + // Set TTL expiration for cache hit validation. Entries are validated + // by invocationID when available, with TTL as a fallback for providers + // that don't send x-invocation-id. Memory is managed by LRU eviction. + const cacheKey = createCacheKey(key, invocationID); + this.cache.set(cacheKey, { + entry: incrementalResponseCacheEntry, + expiresAt: Date.now() + this.ttl + }); + } else { + await incrementalCache.set(key, incrementalResponseCacheEntry.value, { + cacheControl: incrementalResponseCacheEntry.cacheControl, + isRoutePPREnabled, + isFallback + }); + } + } + return incrementalResponseCacheEntry; + } catch (err) { + // When a path is erroring we automatically re-set the existing cache + // with new revalidate and expire times to prevent non-stop retrying. + if (previousIncrementalCacheEntry == null ? void 0 : previousIncrementalCacheEntry.cacheControl) { + const revalidate = Math.min(Math.max(previousIncrementalCacheEntry.cacheControl.revalidate || 3, 3), 30); + const expire = previousIncrementalCacheEntry.cacheControl.expire === undefined ? undefined : Math.max(revalidate + 3, previousIncrementalCacheEntry.cacheControl.expire); + await incrementalCache.set(key, previousIncrementalCacheEntry.value, { + cacheControl: { + revalidate: revalidate, + expire: expire + }, + isRoutePPREnabled, + isFallback + }); + } + // We haven't resolved yet, so let's throw to indicate an error. + throw err; + } + } +} + +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/response-cache/types.js b/build/node_modules/next/dist/server/response-cache/types.js new file mode 100644 index 0000000..774f550 --- /dev/null +++ b/build/node_modules/next/dist/server/response-cache/types.js @@ -0,0 +1,41 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + CachedRouteKind: null, + IncrementalCacheKind: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + CachedRouteKind: function() { + return CachedRouteKind; + }, + IncrementalCacheKind: function() { + return IncrementalCacheKind; + } +}); +var CachedRouteKind = /*#__PURE__*/ function(CachedRouteKind) { + CachedRouteKind["APP_PAGE"] = "APP_PAGE"; + CachedRouteKind["APP_ROUTE"] = "APP_ROUTE"; + CachedRouteKind["PAGES"] = "PAGES"; + CachedRouteKind["FETCH"] = "FETCH"; + CachedRouteKind["REDIRECT"] = "REDIRECT"; + CachedRouteKind["IMAGE"] = "IMAGE"; + return CachedRouteKind; +}({}); +var IncrementalCacheKind = /*#__PURE__*/ function(IncrementalCacheKind) { + IncrementalCacheKind["APP_PAGE"] = "APP_PAGE"; + IncrementalCacheKind["APP_ROUTE"] = "APP_ROUTE"; + IncrementalCacheKind["PAGES"] = "PAGES"; + IncrementalCacheKind["FETCH"] = "FETCH"; + IncrementalCacheKind["IMAGE"] = "IMAGE"; + return IncrementalCacheKind; +}({}); + +//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/response-cache/utils.js b/build/node_modules/next/dist/server/response-cache/utils.js new file mode 100644 index 0000000..eb93e3f --- /dev/null +++ b/build/node_modules/next/dist/server/response-cache/utils.js @@ -0,0 +1,104 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + fromResponseCacheEntry: null, + routeKindToIncrementalCacheKind: null, + toResponseCacheEntry: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + fromResponseCacheEntry: function() { + return fromResponseCacheEntry; + }, + routeKindToIncrementalCacheKind: function() { + return routeKindToIncrementalCacheKind; + }, + toResponseCacheEntry: function() { + return toResponseCacheEntry; + } +}); +const _types = require("./types"); +const _renderresult = /*#__PURE__*/ _interop_require_default(require("../render-result")); +const _routekind = require("../route-kind"); +const _constants = require("../../lib/constants"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +async function fromResponseCacheEntry(cacheEntry) { + var _cacheEntry_value, _cacheEntry_value1; + return { + ...cacheEntry, + value: ((_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) === _types.CachedRouteKind.PAGES ? { + kind: _types.CachedRouteKind.PAGES, + html: await cacheEntry.value.html.toUnchunkedString(true), + pageData: cacheEntry.value.pageData, + headers: cacheEntry.value.headers, + status: cacheEntry.value.status + } : ((_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind) === _types.CachedRouteKind.APP_PAGE ? { + kind: _types.CachedRouteKind.APP_PAGE, + html: await cacheEntry.value.html.toUnchunkedString(true), + postponed: cacheEntry.value.postponed, + rscData: cacheEntry.value.rscData, + headers: cacheEntry.value.headers, + status: cacheEntry.value.status, + segmentData: cacheEntry.value.segmentData + } : cacheEntry.value + }; +} +async function toResponseCacheEntry(response) { + var _response_value, _response_value1; + if (!response) return null; + return { + isMiss: response.isMiss, + isStale: response.isStale, + cacheControl: response.cacheControl, + isFallback: response.isFallback, + value: ((_response_value = response.value) == null ? void 0 : _response_value.kind) === _types.CachedRouteKind.PAGES ? { + kind: _types.CachedRouteKind.PAGES, + html: _renderresult.default.fromStatic(response.value.html, _constants.HTML_CONTENT_TYPE_HEADER), + pageData: response.value.pageData, + headers: response.value.headers, + status: response.value.status + } : ((_response_value1 = response.value) == null ? void 0 : _response_value1.kind) === _types.CachedRouteKind.APP_PAGE ? { + kind: _types.CachedRouteKind.APP_PAGE, + html: _renderresult.default.fromStatic(response.value.html, _constants.HTML_CONTENT_TYPE_HEADER), + rscData: response.value.rscData, + headers: response.value.headers, + status: response.value.status, + postponed: response.value.postponed, + segmentData: response.value.segmentData + } : response.value + }; +} +function routeKindToIncrementalCacheKind(routeKind) { + switch(routeKind){ + case _routekind.RouteKind.PAGES: + return _types.IncrementalCacheKind.PAGES; + case _routekind.RouteKind.APP_PAGE: + return _types.IncrementalCacheKind.APP_PAGE; + case _routekind.RouteKind.IMAGE: + return _types.IncrementalCacheKind.IMAGE; + case _routekind.RouteKind.APP_ROUTE: + return _types.IncrementalCacheKind.APP_ROUTE; + case _routekind.RouteKind.PAGES_API: + // Pages Router API routes are not cached in the incremental cache. + throw Object.defineProperty(new Error(`Unexpected route kind ${routeKind}`), "__NEXT_ERROR_CODE", { + value: "E64", + enumerable: false, + configurable: true + }); + default: + return routeKind; + } +} + +//# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/response-cache/web.js b/build/node_modules/next/dist/server/response-cache/web.js new file mode 100644 index 0000000..d22f1c4 --- /dev/null +++ b/build/node_modules/next/dist/server/response-cache/web.js @@ -0,0 +1,101 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, /** + * In the web server, there is currently no incremental cache provided and we + * always SSR the page. + */ "default", { + enumerable: true, + get: function() { + return WebResponseCache; + } +}); +const _detachedpromise = require("../../lib/detached-promise"); +class WebResponseCache { + constructor(minimalMode){ + this.pendingResponses = new Map(); + // this is a hack to avoid Webpack knowing this is equal to this.minimalMode + // because we replace this.minimalMode to true in production bundles. + Object.assign(this, { + minimalMode + }); + } + get(key, responseGenerator, context) { + var _this_previousCacheItem; + // ensure on-demand revalidate doesn't block normal requests + const pendingResponseKey = key ? `${key}-${context.isOnDemandRevalidate ? '1' : '0'}` : null; + const pendingResponse = pendingResponseKey ? this.pendingResponses.get(pendingResponseKey) : null; + if (pendingResponse) { + return pendingResponse; + } + const { promise, resolve: resolver, reject: rejecter } = new _detachedpromise.DetachedPromise(); + if (pendingResponseKey) { + this.pendingResponses.set(pendingResponseKey, promise); + } + let hasResolved = false; + const resolve = (cacheEntry)=>{ + if (pendingResponseKey) { + // Ensure all reads from the cache get the latest value. + this.pendingResponses.set(pendingResponseKey, Promise.resolve(cacheEntry)); + } + if (!hasResolved) { + hasResolved = true; + resolver(cacheEntry); + } + }; + // we keep the previous cache entry around to leverage + // when the incremental cache is disabled in minimal mode + if (pendingResponseKey && this.minimalMode && ((_this_previousCacheItem = this.previousCacheItem) == null ? void 0 : _this_previousCacheItem.key) === pendingResponseKey && this.previousCacheItem.expiresAt > Date.now()) { + resolve(this.previousCacheItem.entry); + this.pendingResponses.delete(pendingResponseKey); + return promise; + } + // We wait to do any async work until after we've added our promise to + // `pendingResponses` to ensure that any any other calls will reuse the + // same promise until we've fully finished our work. + ; + (async ()=>{ + try { + const cacheEntry = await responseGenerator({ + hasResolved + }); + const resolveValue = cacheEntry === null ? null : { + ...cacheEntry, + isMiss: true + }; + // for on-demand revalidate wait to resolve until cache is set + if (!context.isOnDemandRevalidate) { + resolve(resolveValue); + } + if (key && cacheEntry && cacheEntry.cacheControl) { + this.previousCacheItem = { + key: pendingResponseKey || key, + entry: cacheEntry, + expiresAt: Date.now() + 1000 + }; + } else { + this.previousCacheItem = undefined; + } + if (context.isOnDemandRevalidate) { + resolve(resolveValue); + } + } catch (err) { + // while revalidating in the background we can't reject as + // we already resolved the cache entry so log the error here + if (hasResolved) { + console.error(err); + } else { + rejecter(err); + } + } finally{ + if (pendingResponseKey) { + this.pendingResponses.delete(pendingResponseKey); + } + } + })(); + return promise; + } +} + +//# sourceMappingURL=web.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/resume-data-cache/cache-store.js b/build/node_modules/next/dist/server/resume-data-cache/cache-store.js new file mode 100644 index 0000000..0d65539 --- /dev/null +++ b/build/node_modules/next/dist/server/resume-data-cache/cache-store.js @@ -0,0 +1,96 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + parseUseCacheCacheStore: null, + serializeUseCacheCacheStore: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + parseUseCacheCacheStore: function() { + return parseUseCacheCacheStore; + }, + serializeUseCacheCacheStore: function() { + return serializeUseCacheCacheStore; + } +}); +const _encryptionutils = require("../app-render/encryption-utils"); +const _constants = require("../use-cache/constants"); +function parseUseCacheCacheStore(entries) { + const store = new Map(); + for (const [key, { entry, hasExplicitRevalidate, hasExplicitExpire, readRootParamNames }] of entries){ + store.set(key, Promise.resolve({ + entry: { + // Create a ReadableStream from the Uint8Array + value: new ReadableStream({ + start (controller) { + // Enqueue the Uint8Array to the stream + controller.enqueue((0, _encryptionutils.stringToUint8Array)(atob(entry.value))); + // Close the stream + controller.close(); + } + }), + tags: entry.tags, + stale: entry.stale, + timestamp: entry.timestamp, + expire: entry.expire, + revalidate: entry.revalidate + }, + hasExplicitRevalidate, + hasExplicitExpire, + readRootParamNames: readRootParamNames ? new Set(readRootParamNames) : undefined + })); + } + return store; +} +async function serializeUseCacheCacheStore(entries, isCacheComponentsEnabled) { + return Promise.all(Array.from(entries).map(([key, value])=>{ + return value.then(async ({ entry, hasExplicitRevalidate, hasExplicitExpire, readRootParamNames })=>{ + if (isCacheComponentsEnabled && (entry.revalidate === 0 || entry.expire < _constants.DYNAMIC_EXPIRE)) { + // The entry was omitted from the prerender result, and subsequently + // does not need to be included in the serialized RDC. + return null; + } + const [left, right] = entry.value.tee(); + entry.value = right; + let binaryString = ''; + // We want to encode the value as a string, but we aren't sure if the + // value is a a stream of UTF-8 bytes or not, so let's just encode it + // as a string using base64. + for await (const chunk of left){ + binaryString += (0, _encryptionutils.arrayBufferToString)(chunk); + } + return [ + key, + { + entry: { + // Encode the value as a base64 string. + value: btoa(binaryString), + tags: entry.tags, + stale: entry.stale, + timestamp: entry.timestamp, + expire: entry.expire, + revalidate: entry.revalidate + }, + hasExplicitRevalidate, + hasExplicitExpire, + readRootParamNames: readRootParamNames ? [ + ...readRootParamNames + ] : undefined + } + ]; + }).catch(()=>{ + // Any failed cache writes should be ignored as to not discard the + // entire cache. + return null; + }); + })); +} + +//# sourceMappingURL=cache-store.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/resume-data-cache/resume-data-cache.js b/build/node_modules/next/dist/server/resume-data-cache/resume-data-cache.js new file mode 100644 index 0000000..1208436 --- /dev/null +++ b/build/node_modules/next/dist/server/resume-data-cache/resume-data-cache.js @@ -0,0 +1,124 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createPrerenderResumeDataCache: null, + createRenderResumeDataCache: null, + stringifyResumeDataCache: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createPrerenderResumeDataCache: function() { + return createPrerenderResumeDataCache; + }, + createRenderResumeDataCache: function() { + return createRenderResumeDataCache; + }, + stringifyResumeDataCache: function() { + return stringifyResumeDataCache; + } +}); +const _invarianterror = require("../../shared/lib/invariant-error"); +const _cachestore = require("./cache-store"); +async function stringifyResumeDataCache(resumeDataCache, isCacheComponentsEnabled) { + if (process.env.NEXT_RUNTIME === 'edge') { + throw Object.defineProperty(new _invarianterror.InvariantError('`stringifyResumeDataCache` should not be called in edge runtime.'), "__NEXT_ERROR_CODE", { + value: "E602", + enumerable: false, + configurable: true + }); + } else { + if (resumeDataCache.fetch.size === 0 && resumeDataCache.cache.size === 0) { + return 'null'; + } + const json = { + store: { + fetch: Object.fromEntries(Array.from(resumeDataCache.fetch.entries())), + cache: Object.fromEntries((await (0, _cachestore.serializeUseCacheCacheStore)(resumeDataCache.cache.entries(), isCacheComponentsEnabled)).filter((entry)=>entry !== null)), + encryptedBoundArgs: Object.fromEntries(Array.from(resumeDataCache.encryptedBoundArgs.entries())) + } + }; + // Compress the JSON string using zlib. As the data we already want to + // decompress is in memory, we use the synchronous deflateSync function. + const { deflateSync } = require('node:zlib'); + return deflateSync(JSON.stringify(json)).toString('base64'); + } +} +function createPrerenderResumeDataCache(source) { + if (source) { + return { + cache: new Map(source.cache), + fetch: new Map(source.fetch), + encryptedBoundArgs: new Map(source.encryptedBoundArgs), + decryptedBoundArgs: new Map(source.decryptedBoundArgs) + }; + } else { + return { + cache: new Map(), + fetch: new Map(), + encryptedBoundArgs: new Map(), + decryptedBoundArgs: new Map() + }; + } +} +function createRenderResumeDataCache(resumeDataCacheOrPersistedCache, maxPostponedStateSizeBytes) { + if (process.env.NEXT_RUNTIME === 'edge') { + throw Object.defineProperty(new _invarianterror.InvariantError('`createRenderResumeDataCache` should not be called in edge runtime.'), "__NEXT_ERROR_CODE", { + value: "E556", + enumerable: false, + configurable: true + }); + } else { + if (typeof resumeDataCacheOrPersistedCache !== 'string') { + // If the cache is already a prerender or render cache, we can return it + // directly. For the former, we're just performing a type change. + return resumeDataCacheOrPersistedCache; + } + if (resumeDataCacheOrPersistedCache === 'null') { + return { + cache: new Map(), + fetch: new Map(), + encryptedBoundArgs: new Map(), + decryptedBoundArgs: new Map() + }; + } + // This should be a compressed string. Let's decompress it using zlib. + // As the data we already want to decompress is in memory, we use the + // synchronous inflateSync function. + const { inflateSync } = require('node:zlib'); + // Limit decompressed size to prevent zipbomb attacks. This is 5x the + // configured maxPostponedStateSize, allowing reasonable compression + // ratios while preventing extreme decompression bombs. + // Default is 500MB (5x the default 100MB compressed limit). + const maxDecompressedSize = maxPostponedStateSizeBytes ? maxPostponedStateSizeBytes * 5 : 500 * 1024 * 1024; + let json; + try { + json = JSON.parse(inflateSync(Buffer.from(resumeDataCacheOrPersistedCache, 'base64'), { + maxOutputLength: maxDecompressedSize + }).toString('utf-8')); + } catch (err) { + if (err instanceof RangeError && err.code === 'ERR_BUFFER_TOO_LARGE') { + throw Object.defineProperty(new Error(`Decompressed resume data cache exceeded ${maxDecompressedSize} byte limit`), "__NEXT_ERROR_CODE", { + value: "E976", + enumerable: false, + configurable: true + }); + } + throw err; + } + return { + cache: (0, _cachestore.parseUseCacheCacheStore)(Object.entries(json.store.cache)), + fetch: new Map(Object.entries(json.store.fetch)), + encryptedBoundArgs: new Map(Object.entries(json.store.encryptedBoundArgs)), + decryptedBoundArgs: new Map() + }; + } +} + +//# sourceMappingURL=resume-data-cache.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/revalidation-utils.js b/build/node_modules/next/dist/server/revalidation-utils.js new file mode 100644 index 0000000..5f4cc5f --- /dev/null +++ b/build/node_modules/next/dist/server/revalidation-utils.js @@ -0,0 +1,157 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + executeRevalidates: null, + withExecuteRevalidates: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + executeRevalidates: function() { + return executeRevalidates; + }, + withExecuteRevalidates: function() { + return withExecuteRevalidates; + } +}); +const _handlers = require("./use-cache/handlers"); +async function withExecuteRevalidates(store, callback) { + if (!store) { + return callback(); + } + // If we executed any revalidates during the request, then we don't want to execute them again. + // save the state so we can check if anything changed after we're done running callbacks. + const savedRevalidationState = cloneRevalidationState(store); + try { + return await callback(); + } finally{ + // Check if we have any new revalidates, and if so, wait until they are all resolved. + const newRevalidates = diffRevalidationState(savedRevalidationState, cloneRevalidationState(store)); + await executeRevalidates(store, newRevalidates); + } +} +function cloneRevalidationState(store) { + return { + pendingRevalidatedTags: store.pendingRevalidatedTags ? [ + ...store.pendingRevalidatedTags + ] : [], + pendingRevalidates: { + ...store.pendingRevalidates + }, + pendingRevalidateWrites: store.pendingRevalidateWrites ? [ + ...store.pendingRevalidateWrites + ] : [] + }; +} +function diffRevalidationState(prev, curr) { + const prevTagsWithProfile = new Set(prev.pendingRevalidatedTags.map((item)=>{ + const profileKey = typeof item.profile === 'object' ? JSON.stringify(item.profile) : item.profile || ''; + return `${item.tag}:${profileKey}`; + })); + const prevRevalidateWrites = new Set(prev.pendingRevalidateWrites); + return { + pendingRevalidatedTags: curr.pendingRevalidatedTags.filter((item)=>{ + const profileKey = typeof item.profile === 'object' ? JSON.stringify(item.profile) : item.profile || ''; + return !prevTagsWithProfile.has(`${item.tag}:${profileKey}`); + }), + pendingRevalidates: Object.fromEntries(Object.entries(curr.pendingRevalidates).filter(([key])=>!(key in prev.pendingRevalidates))), + pendingRevalidateWrites: curr.pendingRevalidateWrites.filter((promise)=>!prevRevalidateWrites.has(promise)) + }; +} +async function revalidateTags(tagsWithProfile, incrementalCache, workStore) { + if (tagsWithProfile.length === 0) { + return; + } + const handlers = (0, _handlers.getCacheHandlers)(); + const promises = []; + // Group tags by profile for batch processing + const tagsByProfile = new Map(); + for (const item of tagsWithProfile){ + const profile = item.profile; + // Find existing profile by comparing values + let existingKey = undefined; + for (const [key] of tagsByProfile){ + if (typeof key === 'string' && typeof profile === 'string' && key === profile) { + existingKey = key; + break; + } + if (typeof key === 'object' && typeof profile === 'object' && JSON.stringify(key) === JSON.stringify(profile)) { + existingKey = key; + break; + } + if (key === profile) { + existingKey = key; + break; + } + } + const profileKey = existingKey || profile; + if (!tagsByProfile.has(profileKey)) { + tagsByProfile.set(profileKey, []); + } + tagsByProfile.get(profileKey).push(item.tag); + } + // Process each profile group + for (const [profile, tagsForProfile] of tagsByProfile){ + // Look up the cache profile from workStore if available + let durations; + if (profile) { + let cacheLife; + if (typeof profile === 'object') { + // Profile is already a cacheLife configuration object + cacheLife = profile; + } else if (typeof profile === 'string') { + var _workStore_cacheLifeProfiles; + // Profile is a string key, look it up in workStore + cacheLife = workStore == null ? void 0 : (_workStore_cacheLifeProfiles = workStore.cacheLifeProfiles) == null ? void 0 : _workStore_cacheLifeProfiles[profile]; + if (!cacheLife) { + throw Object.defineProperty(new Error(`Invalid profile provided "${profile}" must be configured under cacheLife in next.config or be "max"`), "__NEXT_ERROR_CODE", { + value: "E873", + enumerable: false, + configurable: true + }); + } + } + if (cacheLife) { + durations = { + expire: cacheLife.expire + }; + } + } + // If profile is not found and not 'max', durations will be undefined + // which will trigger immediate expiration in the cache handler + for (const handler of handlers || []){ + if (profile) { + promises.push(handler.updateTags == null ? void 0 : handler.updateTags.call(handler, tagsForProfile, durations)); + } else { + promises.push(handler.updateTags == null ? void 0 : handler.updateTags.call(handler, tagsForProfile)); + } + } + if (incrementalCache) { + promises.push(incrementalCache.revalidateTag(tagsForProfile, durations)); + } + } + await Promise.all(promises); +} +function executeRevalidates(workStore, state) { + const promises = []; + const pendingRevalidatedTags = (state == null ? void 0 : state.pendingRevalidatedTags) ?? workStore.pendingRevalidatedTags ?? []; + if (pendingRevalidatedTags.length > 0) { + promises.push(revalidateTags(pendingRevalidatedTags, workStore.incrementalCache, workStore)); + } + const pendingRevalidates = Object.values((state == null ? void 0 : state.pendingRevalidates) ?? workStore.pendingRevalidates ?? {}); + promises.push(...pendingRevalidates); + const pendingRevalidateWrites = (state == null ? void 0 : state.pendingRevalidateWrites) ?? workStore.pendingRevalidateWrites ?? []; + promises.push(...pendingRevalidateWrites); + if (promises.length === 0) { + return false; + } + return Promise.all(promises).then(()=>undefined); +} + +//# sourceMappingURL=revalidation-utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-definitions/app-page-route-definition.js b/build/node_modules/next/dist/server/route-definitions/app-page-route-definition.js new file mode 100644 index 0000000..90fee8f --- /dev/null +++ b/build/node_modules/next/dist/server/route-definitions/app-page-route-definition.js @@ -0,0 +1,16 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "isAppPageRouteDefinition", { + enumerable: true, + get: function() { + return isAppPageRouteDefinition; + } +}); +const _routekind = require("../route-kind"); +function isAppPageRouteDefinition(definition) { + return definition.kind === _routekind.RouteKind.APP_PAGE; +} + +//# sourceMappingURL=app-page-route-definition.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-definitions/app-route-route-definition.js b/build/node_modules/next/dist/server/route-definitions/app-route-route-definition.js new file mode 100644 index 0000000..892841d --- /dev/null +++ b/build/node_modules/next/dist/server/route-definitions/app-route-route-definition.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=app-route-route-definition.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-definitions/locale-route-definition.js b/build/node_modules/next/dist/server/route-definitions/locale-route-definition.js new file mode 100644 index 0000000..23737e0 --- /dev/null +++ b/build/node_modules/next/dist/server/route-definitions/locale-route-definition.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=locale-route-definition.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-definitions/pages-api-route-definition.js b/build/node_modules/next/dist/server/route-definitions/pages-api-route-definition.js new file mode 100644 index 0000000..5686a7a --- /dev/null +++ b/build/node_modules/next/dist/server/route-definitions/pages-api-route-definition.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=pages-api-route-definition.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-definitions/pages-route-definition.js b/build/node_modules/next/dist/server/route-definitions/pages-route-definition.js new file mode 100644 index 0000000..cb82943 --- /dev/null +++ b/build/node_modules/next/dist/server/route-definitions/pages-route-definition.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=pages-route-definition.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-definitions/route-definition.js b/build/node_modules/next/dist/server/route-definitions/route-definition.js new file mode 100644 index 0000000..873a6cd --- /dev/null +++ b/build/node_modules/next/dist/server/route-definitions/route-definition.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=route-definition.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-kind.js b/build/node_modules/next/dist/server/route-kind.js new file mode 100644 index 0000000..6a352c2 --- /dev/null +++ b/build/node_modules/next/dist/server/route-kind.js @@ -0,0 +1,32 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "RouteKind", { + enumerable: true, + get: function() { + return RouteKind; + } +}); +var RouteKind = /*#__PURE__*/ function(RouteKind) { + /** + * `PAGES` represents all the React pages that are under `pages/`. + */ RouteKind["PAGES"] = "PAGES"; + /** + * `PAGES_API` represents all the API routes under `pages/api/`. + */ RouteKind["PAGES_API"] = "PAGES_API"; + /** + * `APP_PAGE` represents all the React pages that are under `app/` with the + * filename of `page.{j,t}s{,x}`. + */ RouteKind["APP_PAGE"] = "APP_PAGE"; + /** + * `APP_ROUTE` represents all the API routes and metadata routes that are under `app/` with the + * filename of `route.{j,t}s{,x}`. + */ RouteKind["APP_ROUTE"] = "APP_ROUTE"; + /** + * `IMAGE` represents all the images that are generated by `next/image`. + */ RouteKind["IMAGE"] = "IMAGE"; + return RouteKind; +}({}); + +//# sourceMappingURL=route-kind.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matcher-managers/default-route-matcher-manager.js b/build/node_modules/next/dist/server/route-matcher-managers/default-route-matcher-manager.js new file mode 100644 index 0000000..92b5a23 --- /dev/null +++ b/build/node_modules/next/dist/server/route-matcher-managers/default-route-matcher-manager.js @@ -0,0 +1,239 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "DefaultRouteMatcherManager", { + enumerable: true, + get: function() { + return DefaultRouteMatcherManager; + } +}); +const _utils = require("../../shared/lib/router/utils"); +const _localeroutematcher = require("../route-matchers/locale-route-matcher"); +const _ensureleadingslash = require("../../shared/lib/page-path/ensure-leading-slash"); +const _detachedpromise = require("../../lib/detached-promise"); +class DefaultRouteMatcherManager { + /** + * When this value changes, it indicates that a change has been introduced + * that requires recompilation. + */ get compilationID() { + return this.providers.length; + } + async waitTillReady() { + if (this.waitTillReadyPromise) { + await this.waitTillReadyPromise; + delete this.waitTillReadyPromise; + } + } + async reload() { + const { promise, resolve, reject } = new _detachedpromise.DetachedPromise(); + this.waitTillReadyPromise = promise; + // Grab the compilation ID for this run, we'll verify it at the end to + // ensure that if any routes were added before reloading is finished that + // we error out. + const compilationID = this.compilationID; + try { + // Collect all the matchers from each provider. + const matchers = []; + // Get all the providers matchers. + const providersMatchers = await Promise.all(this.providers.map((provider)=>provider.matchers())); + // Use this to detect duplicate pathnames. + const all = new Map(); + const duplicates = {}; + for (const providerMatchers of providersMatchers){ + for (const matcher of providerMatchers){ + // Reset duplicated matches when reloading from pages conflicting state. + if (matcher.duplicated) delete matcher.duplicated; + // Test to see if the matcher being added is a duplicate. + const duplicate = all.get(matcher.definition.pathname); + if (duplicate) { + // This looks a little weird, but essentially if the pathname + // already exists in the duplicates map, then we got that array + // reference. Otherwise, we create a new array with the original + // duplicate first. Then we push the new matcher into the duplicate + // array, and reset it to the duplicates object (which may be a + // no-op if the pathname already existed in the duplicates object). + // Then we set the array of duplicates on both the original + // duplicate object and the new one, so we can keep them in sync. + // If a new duplicate is found, and it matches an existing pathname, + // the retrieval of the `other` will actually return the array + // reference used by all other duplicates. This is why ReadonlyArray + // is so important! Array's are always references! + const others = duplicates[matcher.definition.pathname] ?? [ + duplicate + ]; + others.push(matcher); + duplicates[matcher.definition.pathname] = others; + // Add duplicated details to each route. + duplicate.duplicated = others; + matcher.duplicated = others; + // TODO: see if we should error for duplicates in production? + } + matchers.push(matcher); + // Add the matcher's pathname to the set. + all.set(matcher.definition.pathname, matcher); + } + } + // Update the duplicate matchers. This is used in the development manager + // to warn about duplicates. + this.matchers.duplicates = duplicates; + // If the cache is the same as what we just parsed, we can exit now. We + // can tell by using the `===` which compares object identity, which for + // the manifest matchers, will return the same matcher each time. + if (this.previousMatchers.length === matchers.length && this.previousMatchers.every((cachedMatcher, index)=>cachedMatcher === matchers[index])) { + return; + } + this.previousMatchers = matchers; + // For matchers that are for static routes, filter them now. + this.matchers.static = matchers.filter((matcher)=>!matcher.isDynamic); + // For matchers that are for dynamic routes, filter them and sort them now. + const dynamic = matchers.filter((matcher)=>matcher.isDynamic); + // As `getSortedRoutes` only takes an array of strings, we need to create + // a map of the pathnames (used for sorting) and the matchers. When we + // have locales, there may be multiple matches for the same pathname. To + // handle this, we keep a map of all the indexes (in `reference`) and + // merge them in later. + const reference = new Map(); + const pathnames = new Array(); + for(let index = 0; index < dynamic.length; index++){ + // Grab the pathname from the definition. + const pathname = dynamic[index].definition.pathname; + // Grab the index in the dynamic array, push it into the reference. + const indexes = reference.get(pathname) ?? []; + indexes.push(index); + // If this is the first one set it. If it isn't, we don't need to + // because pushing above on the array will mutate the array already + // stored there because array's are always a reference! + if (indexes.length === 1) reference.set(pathname, indexes); + else continue; + pathnames.push(pathname); + } + // Sort the array of pathnames. + const sorted = (0, _utils.getSortedRoutes)(pathnames); + // For each of the sorted pathnames, iterate over them, grabbing the list + // of indexes and merging them back into the new `sortedDynamicMatchers` + // array. The order of the same matching pathname doesn't matter because + // they will have other matching characteristics (like the locale) that + // is considered. + const sortedDynamicMatchers = []; + for (const pathname of sorted){ + const indexes = reference.get(pathname); + if (!Array.isArray(indexes)) { + throw Object.defineProperty(new Error('Invariant: expected to find identity in indexes map'), "__NEXT_ERROR_CODE", { + value: "E271", + enumerable: false, + configurable: true + }); + } + const dynamicMatches = indexes.map((index)=>dynamic[index]); + sortedDynamicMatchers.push(...dynamicMatches); + } + this.matchers.dynamic = sortedDynamicMatchers; + // This means that there was a new matcher pushed while we were waiting + if (this.compilationID !== compilationID) { + throw Object.defineProperty(new Error('Invariant: expected compilation to finish before new matchers were added, possible missing await'), "__NEXT_ERROR_CODE", { + value: "E242", + enumerable: false, + configurable: true + }); + } + } catch (err) { + reject(err); + } finally{ + // The compilation ID matched, so mark the complication as finished. + this.lastCompilationID = compilationID; + resolve(); + } + } + push(provider) { + this.providers.push(provider); + } + async test(pathname, options) { + // See if there's a match for the pathname... + const match = await this.match(pathname, options); + // This default implementation only needs to check to see if there _was_ a + // match. The development matcher actually changes it's behavior by not + // recompiling the routes. + return match !== null; + } + async match(pathname, options) { + // "Iterate" over the match options. Once we found a single match, exit with + // it, otherwise return null below. If no match is found, the inner block + // won't be called. + for await (const match of this.matchAll(pathname, options)){ + return match; + } + return null; + } + /** + * This is a point for other managers to override to inject other checking + * behavior like duplicate route checking on a per-request basis. + * + * @param pathname the pathname to validate against + * @param matcher the matcher to validate/test with + * @returns the match if found + */ validate(pathname, matcher, options) { + var _options_i18n; + if (matcher instanceof _localeroutematcher.LocaleRouteMatcher) { + return matcher.match(pathname, options); + } + // If the locale was inferred from the default locale, then it will have + // already added a locale to the pathname. We need to remove it before + // matching because this matcher is not locale aware. + if ((_options_i18n = options.i18n) == null ? void 0 : _options_i18n.inferredFromDefault) { + return matcher.match(options.i18n.pathname); + } + return matcher.match(pathname); + } + async *matchAll(pathname, options) { + // Guard against the matcher manager from being run before it needs to be + // recompiled. This was preferred to re-running the compilation here because + // it should be re-ran only when it changes. If a match is attempted before + // this is done, it indicates that there is a case where a provider is added + // before it was recompiled (an error). We also don't want to affect request + // times. + if (this.lastCompilationID !== this.compilationID) { + throw Object.defineProperty(new Error('Invariant: expected routes to have been loaded before match'), "__NEXT_ERROR_CODE", { + value: "E235", + enumerable: false, + configurable: true + }); + } + // Ensure that path matching is done with a leading slash. + pathname = (0, _ensureleadingslash.ensureLeadingSlash)(pathname); + // If this pathname doesn't look like a dynamic route, and this pathname is + // listed in the normalized list of routes, then return it. This ensures + // that when a route like `/user/[id]` is encountered, it doesn't just match + // with the list of normalized routes. + if (!(0, _utils.isDynamicRoute)(pathname)) { + for (const matcher of this.matchers.static){ + const match = this.validate(pathname, matcher, options); + if (!match) continue; + yield match; + } + } + // If we should skip handling dynamic routes, exit now. + if (options == null ? void 0 : options.skipDynamic) return null; + // Loop over the dynamic matchers, yielding each match. + for (const matcher of this.matchers.dynamic){ + const match = this.validate(pathname, matcher, options); + if (!match) continue; + yield match; + } + // We tried direct matching against the pathname and against all the dynamic + // paths, so there was no match. + return null; + } + constructor(){ + this.providers = []; + this.matchers = { + static: [], + dynamic: [], + duplicates: {} + }; + this.lastCompilationID = this.compilationID; + this.previousMatchers = []; + } +} + +//# sourceMappingURL=default-route-matcher-manager.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matcher-managers/dev-route-matcher-manager.js b/build/node_modules/next/dist/server/route-matcher-managers/dev-route-matcher-manager.js new file mode 100644 index 0000000..8962cfe --- /dev/null +++ b/build/node_modules/next/dist/server/route-matcher-managers/dev-route-matcher-manager.js @@ -0,0 +1,120 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "DevRouteMatcherManager", { + enumerable: true, + get: function() { + return DevRouteMatcherManager; + } +}); +const _routekind = require("../route-kind"); +const _defaultroutematchermanager = require("./default-route-matcher-manager"); +const _path = /*#__PURE__*/ _interop_require_default(require("../../shared/lib/isomorphic/path")); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("../../build/output/log")); +const _picocolors = require("../../lib/picocolors"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +class DevRouteMatcherManager extends _defaultroutematchermanager.DefaultRouteMatcherManager { + constructor(production, ensurer, dir){ + super(), this.production = production, this.ensurer = ensurer, this.dir = dir; + } + async test(pathname, options) { + // Try to find a match within the developer routes. + const match = await super.match(pathname, options); + // Return if the match wasn't null. Unlike the implementation of `match` + // which uses `matchAll` here, this does not call `ensure` on the match + // found via the development matches. + return match !== null; + } + validate(pathname, matcher, options) { + const match = super.validate(pathname, matcher, options); + // If a match was found, check to see if there were any conflicting app or + // pages files. + // TODO: maybe expand this to _any_ duplicated routes instead? + if (match && matcher.duplicated && matcher.duplicated.some((duplicate)=>duplicate.definition.kind === _routekind.RouteKind.APP_PAGE || duplicate.definition.kind === _routekind.RouteKind.APP_ROUTE) && matcher.duplicated.some((duplicate)=>duplicate.definition.kind === _routekind.RouteKind.PAGES || duplicate.definition.kind === _routekind.RouteKind.PAGES_API)) { + return null; + } + return match; + } + async *matchAll(pathname, options) { + // Iterate over the development matches to see if one of them match the + // request path. + for await (const developmentMatch of super.matchAll(pathname, options)){ + // We're here, which means that we haven't seen this match yet, so we + // should try to ensure it and recompile the production matcher. + await this.ensurer.ensure(developmentMatch, pathname); + await this.production.reload(); + // Iterate over the production matches again, this time we should be able + // to match it against the production matcher unless there's an error. + for await (const productionMatch of this.production.matchAll(pathname, options)){ + yield productionMatch; + } + } + // We tried direct matching against the pathname and against all the dynamic + // paths, so there was no match. + return null; + } + async reload() { + // Compile the production routes again. + await this.production.reload(); + // Compile the development routes. + await super.reload(); + // Check for and warn of any duplicates. + for (const [pathname, matchers] of Object.entries(this.matchers.duplicates)){ + // We only want to warn about matchers resolving to the same path if their + // identities are different. + const identity = matchers[0].identity; + if (matchers.slice(1).some((matcher)=>matcher.identity !== identity)) { + continue; + } + _log.warn(`Duplicate page detected. ${matchers.map((matcher)=>(0, _picocolors.cyan)(_path.default.relative(this.dir, matcher.definition.filename))).join(' and ')} resolve to ${(0, _picocolors.cyan)(pathname)}`); + } + } +} + +//# sourceMappingURL=dev-route-matcher-manager.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.js b/build/node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.js new file mode 100644 index 0000000..bf4ad1a --- /dev/null +++ b/build/node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=route-matcher-manager.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matcher-providers/app-page-route-matcher-provider.js b/build/node_modules/next/dist/server/route-matcher-providers/app-page-route-matcher-provider.js new file mode 100644 index 0000000..3b8a6ab --- /dev/null +++ b/build/node_modules/next/dist/server/route-matcher-providers/app-page-route-matcher-provider.js @@ -0,0 +1,55 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "AppPageRouteMatcherProvider", { + enumerable: true, + get: function() { + return AppPageRouteMatcherProvider; + } +}); +const _isapppageroute = require("../../lib/is-app-page-route"); +const _constants = require("../../shared/lib/constants"); +const _app = require("../normalizers/built/app"); +const _routekind = require("../route-kind"); +const _apppageroutematcher = require("../route-matchers/app-page-route-matcher"); +const _manifestroutematcherprovider = require("./manifest-route-matcher-provider"); +class AppPageRouteMatcherProvider extends _manifestroutematcherprovider.ManifestRouteMatcherProvider { + constructor(distDir, manifestLoader){ + super(_constants.APP_PATHS_MANIFEST, manifestLoader); + this.normalizers = new _app.AppNormalizers(distDir); + } + async transform(manifest) { + // This matcher only matches app pages. + const pages = Object.keys(manifest).filter((page)=>(0, _isapppageroute.isAppPageRoute)(page)); + // Collect all the app paths for each page. This could include any parallel + // routes. + const allAppPaths = {}; + for (const page of pages){ + const pathname = this.normalizers.pathname.normalize(page); + if (pathname in allAppPaths) allAppPaths[pathname].push(page); + else allAppPaths[pathname] = [ + page + ]; + } + // Format the routes. + const matchers = []; + for (const [pathname, appPaths] of Object.entries(allAppPaths)){ + // TODO-APP: (wyattjoh) this is a hack right now, should be more deterministic + const page = appPaths[0]; + const filename = this.normalizers.filename.normalize(manifest[page]); + const bundlePath = this.normalizers.bundlePath.normalize(page); + matchers.push(new _apppageroutematcher.AppPageRouteMatcher({ + kind: _routekind.RouteKind.APP_PAGE, + pathname, + page, + bundlePath, + filename, + appPaths + })); + } + return matchers; + } +} + +//# sourceMappingURL=app-page-route-matcher-provider.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matcher-providers/app-route-route-matcher-provider.js b/build/node_modules/next/dist/server/route-matcher-providers/app-route-route-matcher-provider.js new file mode 100644 index 0000000..3900ecc --- /dev/null +++ b/build/node_modules/next/dist/server/route-matcher-providers/app-route-route-matcher-provider.js @@ -0,0 +1,43 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "AppRouteRouteMatcherProvider", { + enumerable: true, + get: function() { + return AppRouteRouteMatcherProvider; + } +}); +const _isapprouteroute = require("../../lib/is-app-route-route"); +const _constants = require("../../shared/lib/constants"); +const _routekind = require("../route-kind"); +const _approuteroutematcher = require("../route-matchers/app-route-route-matcher"); +const _manifestroutematcherprovider = require("./manifest-route-matcher-provider"); +const _app = require("../normalizers/built/app"); +class AppRouteRouteMatcherProvider extends _manifestroutematcherprovider.ManifestRouteMatcherProvider { + constructor(distDir, manifestLoader){ + super(_constants.APP_PATHS_MANIFEST, manifestLoader); + this.normalizers = new _app.AppNormalizers(distDir); + } + async transform(manifest) { + // This matcher only matches app routes. + const pages = Object.keys(manifest).filter((page)=>(0, _isapprouteroute.isAppRouteRoute)(page)); + // Format the routes. + const matchers = []; + for (const page of pages){ + const filename = this.normalizers.filename.normalize(manifest[page]); + const pathname = this.normalizers.pathname.normalize(page); + const bundlePath = this.normalizers.bundlePath.normalize(page); + matchers.push(new _approuteroutematcher.AppRouteRouteMatcher({ + kind: _routekind.RouteKind.APP_ROUTE, + pathname, + page, + bundlePath, + filename + })); + } + return matchers; + } +} + +//# sourceMappingURL=app-route-route-matcher-provider.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matcher-providers/dev/dev-app-page-route-matcher-provider.js b/build/node_modules/next/dist/server/route-matcher-providers/dev/dev-app-page-route-matcher-provider.js new file mode 100644 index 0000000..e656377 --- /dev/null +++ b/build/node_modules/next/dist/server/route-matcher-providers/dev/dev-app-page-route-matcher-provider.js @@ -0,0 +1,91 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "DevAppPageRouteMatcherProvider", { + enumerable: true, + get: function() { + return DevAppPageRouteMatcherProvider; + } +}); +const _apppageroutematcher = require("../../route-matchers/app-page-route-matcher"); +const _routekind = require("../../route-kind"); +const _filecacheroutematcherprovider = require("./file-cache-route-matcher-provider"); +const _app = require("../../normalizers/built/app"); +const _normalizecatchallroutes = require("../../../build/normalize-catchall-routes"); +const _apppaths = require("../../../shared/lib/router/utils/app-paths"); +class DevAppPageRouteMatcherProvider extends _filecacheroutematcherprovider.FileCacheRouteMatcherProvider { + constructor(appDir, extensions, reader, isTurbopack){ + super(appDir, reader); + this.normalizers = new _app.DevAppNormalizers(appDir, extensions, isTurbopack); + // Match any page file that ends with `/page.${extension}` or `/default.${extension}` under the app + // directory. + this.expression = new RegExp(`[/\\\\](page|default)\\.(?:${extensions.join('|')})$`); + this.isTurbopack = isTurbopack; + } + async transform(files) { + // Collect all the app paths for each page. This could include any parallel + // routes. + const cache = new Map(); + const routeFilenames = new Array(); + let appPaths = {}; + for (const filename of files){ + // If the file isn't a match for this matcher, then skip it. + if (!this.expression.test(filename)) continue; + let page = this.normalizers.page.normalize(filename); + // Validate that this is not an ignored page. + if (page.includes('/_')) continue; + // Turbopack uses the correct page name with the underscore normalized. + // TODO: Move implementation to packages/next/src/server/normalizers/built/app/app-page-normalizer.ts. + // The `includes('/_')` check above needs to be moved for that to work as otherwise `%5Fsegmentname` + // will result in `_segmentname` which hits that includes check and be skipped. + if (this.isTurbopack) { + page = page.replace(/%5F/g, '_'); + } + // This is a valid file that we want to create a matcher for. + routeFilenames.push(filename); + const pathname = this.normalizers.pathname.normalize(filename); + const bundlePath = this.normalizers.bundlePath.normalize(filename); + // Save the normalization results. + cache.set(filename, { + page, + pathname, + bundlePath + }); + if (pathname in appPaths) appPaths[pathname].push(page); + else appPaths[pathname] = [ + page + ]; + } + (0, _normalizecatchallroutes.normalizeCatchAllRoutes)(appPaths); + // Make sure to sort parallel routes to make the result deterministic. + appPaths = Object.fromEntries(Object.entries(appPaths).map(([k, v])=>[ + k, + v.sort(_apppaths.compareAppPaths) + ])); + const matchers = []; + for (const filename of routeFilenames){ + // Grab the cached values (and the appPaths). + const cached = cache.get(filename); + if (!cached) { + throw Object.defineProperty(new Error('Invariant: expected filename to exist in cache'), "__NEXT_ERROR_CODE", { + value: "E190", + enumerable: false, + configurable: true + }); + } + const { pathname, page, bundlePath } = cached; + matchers.push(new _apppageroutematcher.AppPageRouteMatcher({ + kind: _routekind.RouteKind.APP_PAGE, + pathname, + page, + bundlePath, + filename, + appPaths: appPaths[pathname] + })); + } + return matchers; + } +} + +//# sourceMappingURL=dev-app-page-route-matcher-provider.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matcher-providers/dev/dev-app-route-route-matcher-provider.js b/build/node_modules/next/dist/server/route-matcher-providers/dev/dev-app-route-route-matcher-provider.js new file mode 100644 index 0000000..73dd82b --- /dev/null +++ b/build/node_modules/next/dist/server/route-matcher-providers/dev/dev-app-route-route-matcher-provider.js @@ -0,0 +1,112 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "DevAppRouteRouteMatcherProvider", { + enumerable: true, + get: function() { + return DevAppRouteRouteMatcherProvider; + } +}); +const _approuteroutematcher = require("../../route-matchers/app-route-route-matcher"); +const _routekind = require("../../route-kind"); +const _filecacheroutematcherprovider = require("./file-cache-route-matcher-provider"); +const _isapprouteroute = require("../../../lib/is-app-route-route"); +const _app = require("../../normalizers/built/app"); +const _ismetadataroute = require("../../../lib/metadata/is-metadata-route"); +const _getmetadataroute = require("../../../lib/metadata/get-metadata-route"); +const _path = /*#__PURE__*/ _interop_require_default(require("../../../shared/lib/isomorphic/path")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +class DevAppRouteRouteMatcherProvider extends _filecacheroutematcherprovider.FileCacheRouteMatcherProvider { + constructor(appDir, extensions, reader, isTurbopack){ + super(appDir, reader); + this.appDir = appDir; + this.isTurbopack = isTurbopack; + this.normalizers = new _app.DevAppNormalizers(appDir, extensions, isTurbopack); + } + async transform(files) { + const matchers = []; + for (const filename of files){ + // Skip static metadata files as they are served from filesystem. + if ((0, _ismetadataroute.isStaticMetadataFile)(filename.replace(this.appDir, ''))) { + continue; + } + let page = this.normalizers.page.normalize(filename); + // If the file isn't a match for this matcher, then skip it. + if (!(0, _isapprouteroute.isAppRouteRoute)(page)) continue; + // Validate that this is not an ignored page. + if (page.includes('/_')) continue; + // Turbopack uses the correct page name with the underscore normalized. + // TODO: Move implementation to packages/next/src/server/normalizers/built/app/app-page-normalizer.ts. + // The `includes('/_')` check above needs to be moved for that to work as otherwise `%5Fsegmentname` + // will result in `_segmentname` which hits that includes check and be skipped. + if (this.isTurbopack) { + page = page.replace(/%5F/g, '_'); + } + const pathname = this.normalizers.pathname.normalize(filename); + const bundlePath = this.normalizers.bundlePath.normalize(filename); + const ext = _path.default.extname(filename).slice(1); + const isEntryMetadataRouteFile = (0, _ismetadataroute.isMetadataRouteFile)(filename.replace(this.appDir, ''), [ + ext + ], true); + if (isEntryMetadataRouteFile && !(0, _ismetadataroute.isStaticMetadataRoute)(page)) { + // Matching dynamic metadata routes. + // Add 2 possibilities for both single and multiple routes: + { + // single: + // /sitemap.ts -> /sitemap.xml/route + // /icon.ts -> /icon/route + // We'll map the filename before normalization: + // sitemap.ts -> sitemap.xml/route.ts + // icon.ts -> icon/route.ts + const metadataPage = (0, _getmetadataroute.normalizeMetadataPageToRoute)(page, false); + const metadataPathname = (0, _getmetadataroute.normalizeMetadataPageToRoute)(pathname, false); + const metadataBundlePath = (0, _getmetadataroute.normalizeMetadataPageToRoute)(bundlePath, false); + const matcher = new _approuteroutematcher.AppRouteRouteMatcher({ + kind: _routekind.RouteKind.APP_ROUTE, + page: metadataPage, + pathname: metadataPathname, + bundlePath: metadataBundlePath, + filename + }); + matchers.push(matcher); + } + { + // multiple: + // /sitemap.ts -> /sitemap/[__metadata_id__]/route + // /icon.ts -> /icon/[__metadata_id__]/route + // We'll map the filename before normalization: + // sitemap.ts -> sitemap.xml/[__metadata_id__].ts + // icon.ts -> icon/[__metadata_id__].ts + const metadataPage = (0, _getmetadataroute.normalizeMetadataPageToRoute)(page, true); + const metadataPathname = (0, _getmetadataroute.normalizeMetadataPageToRoute)(pathname, true); + const metadataBundlePath = (0, _getmetadataroute.normalizeMetadataPageToRoute)(bundlePath, true); + const matcher = new _approuteroutematcher.AppRouteRouteMatcher({ + kind: _routekind.RouteKind.APP_ROUTE, + page: metadataPage, + pathname: metadataPathname, + bundlePath: metadataBundlePath, + filename + }); + matchers.push(matcher); + } + } else { + // Normal app routes. + matchers.push(new _approuteroutematcher.AppRouteRouteMatcher({ + kind: _routekind.RouteKind.APP_ROUTE, + page, + pathname, + bundlePath, + filename + })); + } + } + return matchers; + } +} + +//# sourceMappingURL=dev-app-route-route-matcher-provider.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matcher-providers/dev/dev-pages-api-route-matcher-provider.js b/build/node_modules/next/dist/server/route-matcher-providers/dev/dev-pages-api-route-matcher-provider.js new file mode 100644 index 0000000..6c204a3 --- /dev/null +++ b/build/node_modules/next/dist/server/route-matcher-providers/dev/dev-pages-api-route-matcher-provider.js @@ -0,0 +1,77 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "DevPagesAPIRouteMatcherProvider", { + enumerable: true, + get: function() { + return DevPagesAPIRouteMatcherProvider; + } +}); +const _pagesapiroutematcher = require("../../route-matchers/pages-api-route-matcher"); +const _routekind = require("../../route-kind"); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _filecacheroutematcherprovider = require("./file-cache-route-matcher-provider"); +const _pages = require("../../normalizers/built/pages"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +class DevPagesAPIRouteMatcherProvider extends _filecacheroutematcherprovider.FileCacheRouteMatcherProvider { + constructor(pagesDir, extensions, reader, localeNormalizer){ + super(pagesDir, reader), this.pagesDir = pagesDir, this.extensions = extensions, this.localeNormalizer = localeNormalizer; + // Match any route file that ends with `/${filename}.${extension}` under the + // pages directory. + this.expression = new RegExp(`\\.(?:${extensions.join('|')})$`); + this.normalizers = new _pages.DevPagesNormalizers(pagesDir, extensions); + } + test(filename) { + // If the file does not end in the correct extension it's not a match. + if (!this.expression.test(filename)) return false; + // Pages API routes must exist in the pages directory with the `/api/` + // prefix. The pathnames being tested here though are the full filenames, + // so we need to include the pages directory. + // TODO: could path separator normalization be needed here? + if (filename.startsWith(_path.default.join(this.pagesDir, '/api/'))) return true; + for (const extension of this.extensions){ + // We can also match if we have `pages/api.${extension}`, so check to + // see if it's a match. + if (filename === _path.default.join(this.pagesDir, `api.${extension}`)) { + return true; + } + } + return false; + } + async transform(files) { + const matchers = []; + for (const filename of files){ + // If the file isn't a match for this matcher, then skip it. + if (!this.test(filename)) continue; + const pathname = this.normalizers.pathname.normalize(filename); + const page = this.normalizers.page.normalize(filename); + const bundlePath = this.normalizers.bundlePath.normalize(filename); + if (this.localeNormalizer) { + matchers.push(new _pagesapiroutematcher.PagesAPILocaleRouteMatcher({ + kind: _routekind.RouteKind.PAGES_API, + pathname, + page, + bundlePath, + filename, + i18n: {} + })); + } else { + matchers.push(new _pagesapiroutematcher.PagesAPIRouteMatcher({ + kind: _routekind.RouteKind.PAGES_API, + pathname, + page, + bundlePath, + filename + })); + } + } + return matchers; + } +} + +//# sourceMappingURL=dev-pages-api-route-matcher-provider.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matcher-providers/dev/dev-pages-route-matcher-provider.js b/build/node_modules/next/dist/server/route-matcher-providers/dev/dev-pages-route-matcher-provider.js new file mode 100644 index 0000000..54eaf43 --- /dev/null +++ b/build/node_modules/next/dist/server/route-matcher-providers/dev/dev-pages-route-matcher-provider.js @@ -0,0 +1,77 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "DevPagesRouteMatcherProvider", { + enumerable: true, + get: function() { + return DevPagesRouteMatcherProvider; + } +}); +const _pagesroutematcher = require("../../route-matchers/pages-route-matcher"); +const _routekind = require("../../route-kind"); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _filecacheroutematcherprovider = require("./file-cache-route-matcher-provider"); +const _pages = require("../../normalizers/built/pages"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +class DevPagesRouteMatcherProvider extends _filecacheroutematcherprovider.FileCacheRouteMatcherProvider { + constructor(pagesDir, extensions, reader, localeNormalizer){ + super(pagesDir, reader), this.pagesDir = pagesDir, this.extensions = extensions, this.localeNormalizer = localeNormalizer; + // Match any route file that ends with `/${filename}.${extension}` under the + // pages directory. + this.expression = new RegExp(`\\.(?:${extensions.join('|')})$`); + this.normalizers = new _pages.DevPagesNormalizers(pagesDir, extensions); + } + test(filename) { + // If the file does not end in the correct extension it's not a match. + if (!this.expression.test(filename)) return false; + // Pages routes must exist in the pages directory without the `/api/` + // prefix. The pathnames being tested here though are the full filenames, + // so we need to include the pages directory. + // TODO: could path separator normalization be needed here? + if (filename.startsWith(_path.default.join(this.pagesDir, '/api/'))) return false; + for (const extension of this.extensions){ + // We can also match if we have `pages/api.${extension}`, so check to + // see if it's a match. + if (filename === _path.default.join(this.pagesDir, `api.${extension}`)) { + return false; + } + } + return true; + } + async transform(files) { + const matchers = []; + for (const filename of files){ + // If the file isn't a match for this matcher, then skip it. + if (!this.test(filename)) continue; + const pathname = this.normalizers.pathname.normalize(filename); + const page = this.normalizers.page.normalize(filename); + const bundlePath = this.normalizers.bundlePath.normalize(filename); + if (this.localeNormalizer) { + matchers.push(new _pagesroutematcher.PagesLocaleRouteMatcher({ + kind: _routekind.RouteKind.PAGES, + pathname, + page, + bundlePath, + filename, + i18n: {} + })); + } else { + matchers.push(new _pagesroutematcher.PagesRouteMatcher({ + kind: _routekind.RouteKind.PAGES, + pathname, + page, + bundlePath, + filename + })); + } + } + return matchers; + } +} + +//# sourceMappingURL=dev-pages-route-matcher-provider.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matcher-providers/dev/file-cache-route-matcher-provider.js b/build/node_modules/next/dist/server/route-matcher-providers/dev/file-cache-route-matcher-provider.js new file mode 100644 index 0000000..d8880a8 --- /dev/null +++ b/build/node_modules/next/dist/server/route-matcher-providers/dev/file-cache-route-matcher-provider.js @@ -0,0 +1,28 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "FileCacheRouteMatcherProvider", { + enumerable: true, + get: function() { + return FileCacheRouteMatcherProvider; + } +}); +const _cachedroutematcherprovider = require("../helpers/cached-route-matcher-provider"); +class FileCacheRouteMatcherProvider extends _cachedroutematcherprovider.CachedRouteMatcherProvider { + constructor(dir, reader){ + super({ + load: async ()=>reader.read(dir), + compare: (left, right)=>{ + if (left.length !== right.length) return false; + // Assuming the file traversal order is deterministic... + for(let i = 0; i < left.length; i++){ + if (left[i] !== right[i]) return false; + } + return true; + } + }); + } +} + +//# sourceMappingURL=file-cache-route-matcher-provider.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matcher-providers/dev/helpers/file-reader/batched-file-reader.js b/build/node_modules/next/dist/server/route-matcher-providers/dev/helpers/file-reader/batched-file-reader.js new file mode 100644 index 0000000..dacb804 --- /dev/null +++ b/build/node_modules/next/dist/server/route-matcher-providers/dev/helpers/file-reader/batched-file-reader.js @@ -0,0 +1,106 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "BatchedFileReader", { + enumerable: true, + get: function() { + return BatchedFileReader; + } +}); +class BatchedFileReader { + constructor(reader){ + this.reader = reader; + } + schedule(callback) { + if (!this.schedulePromise) { + this.schedulePromise = Promise.resolve(); + } + this.schedulePromise.then(()=>{ + process.nextTick(callback); + }); + } + getOrCreateBatch() { + // If there is an existing batch and it's not completed, then reuse it. + if (this.batch && !this.batch.completed) { + return this.batch; + } + const batch = { + completed: false, + directories: [], + callbacks: [] + }; + this.batch = batch; + this.schedule(async ()=>{ + batch.completed = true; + if (batch.directories.length === 0) return; + // Collect all the results for each of the directories. If any error + // occurs, send the results back to the loaders. + let values; + try { + values = await this.load(batch.directories); + } catch (err) { + // Reject all the callbacks. + for (const { reject } of batch.callbacks){ + reject(err); + } + return; + } + // Loop over all the callbacks and send them their results. + for(let i = 0; i < batch.callbacks.length; i++){ + const value = values[i]; + if (value instanceof Error) { + batch.callbacks[i].reject(value); + } else { + batch.callbacks[i].resolve(value); + } + } + }); + return batch; + } + async load(directories) { + // Make a unique array of directories. This is what lets us de-duplicate + // loads for the same directory. + const unique = [ + ...new Set(directories) + ]; + const results = await Promise.all(unique.map(async (directory)=>{ + let files; + let error; + try { + files = await this.reader.read(directory); + } catch (err) { + if (err instanceof Error) error = err; + } + return { + directory, + files, + error + }; + })); + return directories.map((directory)=>{ + const found = results.find((result)=>result.directory === directory); + if (!found) return []; + if (found.files) return found.files; + if (found.error) return found.error; + return []; + }); + } + async read(dir) { + // Get or create a new file reading batch. + const batch = this.getOrCreateBatch(); + // Push this directory into the batch to resolve. + batch.directories.push(dir); + // Push the promise handles into the batch (under the same index) so it can + // be resolved later when it's scheduled. + const promise = new Promise((resolve, reject)=>{ + batch.callbacks.push({ + resolve, + reject + }); + }); + return promise; + } +} + +//# sourceMappingURL=batched-file-reader.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matcher-providers/dev/helpers/file-reader/default-file-reader.js b/build/node_modules/next/dist/server/route-matcher-providers/dev/helpers/file-reader/default-file-reader.js new file mode 100644 index 0000000..23b0e6f --- /dev/null +++ b/build/node_modules/next/dist/server/route-matcher-providers/dev/helpers/file-reader/default-file-reader.js @@ -0,0 +1,42 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "DefaultFileReader", { + enumerable: true, + get: function() { + return DefaultFileReader; + } +}); +const _recursivereaddir = require("../../../../../lib/recursive-readdir"); +class DefaultFileReader { + /** + * Creates a new file reader. + * + * @param pathnameFilter filter to ignore files with absolute pathnames, false to ignore + * @param ignoreFilter filter to ignore files and directories with absolute pathnames, false to ignore + * @param ignorePartFilter filter to ignore files and directories with the pathname part, false to ignore + */ constructor(options){ + this.options = options; + } + /** + * Reads all the files in the directory and its subdirectories following any + * symbolic links. + * + * @param dir the directory to read + * @returns a promise that resolves to the list of files + */ async read(dir) { + return (0, _recursivereaddir.recursiveReadDir)(dir, { + pathnameFilter: this.options.pathnameFilter, + ignorePartFilter: this.options.ignorePartFilter, + // We don't need to sort the results because we're not depending on the + // order of the results. + sortPathnames: false, + // We want absolute pathnames because we're going to be comparing them + // with other absolute pathnames. + relativePathnames: false + }); + } +} + +//# sourceMappingURL=default-file-reader.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matcher-providers/dev/helpers/file-reader/file-reader.js b/build/node_modules/next/dist/server/route-matcher-providers/dev/helpers/file-reader/file-reader.js new file mode 100644 index 0000000..a7f5c3f --- /dev/null +++ b/build/node_modules/next/dist/server/route-matcher-providers/dev/helpers/file-reader/file-reader.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=file-reader.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matcher-providers/helpers/cached-route-matcher-provider.js b/build/node_modules/next/dist/server/route-matcher-providers/helpers/cached-route-matcher-provider.js new file mode 100644 index 0000000..a80517f --- /dev/null +++ b/build/node_modules/next/dist/server/route-matcher-providers/helpers/cached-route-matcher-provider.js @@ -0,0 +1,30 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "CachedRouteMatcherProvider", { + enumerable: true, + get: function() { + return CachedRouteMatcherProvider; + } +}); +class CachedRouteMatcherProvider { + constructor(loader){ + this.loader = loader; + this.cached = []; + } + async matchers() { + const data = await this.loader.load(); + if (!data) return []; + // Return the cached matchers if the data has not changed. + if (this.data && this.loader.compare(this.data, data)) return this.cached; + this.data = data; + // Transform the manifest into matchers. + const matchers = await this.transform(data); + // Cache the matchers. + this.cached = matchers; + return matchers; + } +} + +//# sourceMappingURL=cached-route-matcher-provider.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matcher-providers/helpers/manifest-loaders/manifest-loader.js b/build/node_modules/next/dist/server/route-matcher-providers/helpers/manifest-loaders/manifest-loader.js new file mode 100644 index 0000000..000f716 --- /dev/null +++ b/build/node_modules/next/dist/server/route-matcher-providers/helpers/manifest-loaders/manifest-loader.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=manifest-loader.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matcher-providers/helpers/manifest-loaders/node-manifest-loader.js b/build/node_modules/next/dist/server/route-matcher-providers/helpers/manifest-loaders/node-manifest-loader.js new file mode 100644 index 0000000..0ad25d0 --- /dev/null +++ b/build/node_modules/next/dist/server/route-matcher-providers/helpers/manifest-loaders/node-manifest-loader.js @@ -0,0 +1,34 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "NodeManifestLoader", { + enumerable: true, + get: function() { + return NodeManifestLoader; + } +}); +const _constants = require("../../../../shared/lib/constants"); +const _path = /*#__PURE__*/ _interop_require_default(require("../../../../shared/lib/isomorphic/path")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +class NodeManifestLoader { + constructor(distDir){ + this.distDir = distDir; + } + static require(id) { + try { + return require(id); + } catch { + return null; + } + } + load(name) { + return NodeManifestLoader.require(_path.default.join(this.distDir, _constants.SERVER_DIRECTORY, name)); + } +} + +//# sourceMappingURL=node-manifest-loader.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matcher-providers/helpers/manifest-loaders/server-manifest-loader.js b/build/node_modules/next/dist/server/route-matcher-providers/helpers/manifest-loaders/server-manifest-loader.js new file mode 100644 index 0000000..b50fd00 --- /dev/null +++ b/build/node_modules/next/dist/server/route-matcher-providers/helpers/manifest-loaders/server-manifest-loader.js @@ -0,0 +1,20 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "ServerManifestLoader", { + enumerable: true, + get: function() { + return ServerManifestLoader; + } +}); +class ServerManifestLoader { + constructor(getter){ + this.getter = getter; + } + load(name) { + return this.getter(name); + } +} + +//# sourceMappingURL=server-manifest-loader.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matcher-providers/manifest-route-matcher-provider.js b/build/node_modules/next/dist/server/route-matcher-providers/manifest-route-matcher-provider.js new file mode 100644 index 0000000..4c2cbe7 --- /dev/null +++ b/build/node_modules/next/dist/server/route-matcher-providers/manifest-route-matcher-provider.js @@ -0,0 +1,21 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "ManifestRouteMatcherProvider", { + enumerable: true, + get: function() { + return ManifestRouteMatcherProvider; + } +}); +const _cachedroutematcherprovider = require("./helpers/cached-route-matcher-provider"); +class ManifestRouteMatcherProvider extends _cachedroutematcherprovider.CachedRouteMatcherProvider { + constructor(manifestName, manifestLoader){ + super({ + load: async ()=>manifestLoader.load(manifestName), + compare: (left, right)=>left === right + }); + } +} + +//# sourceMappingURL=manifest-route-matcher-provider.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matcher-providers/pages-api-route-matcher-provider.js b/build/node_modules/next/dist/server/route-matcher-providers/pages-api-route-matcher-provider.js new file mode 100644 index 0000000..5ed5a83 --- /dev/null +++ b/build/node_modules/next/dist/server/route-matcher-providers/pages-api-route-matcher-provider.js @@ -0,0 +1,55 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "PagesAPIRouteMatcherProvider", { + enumerable: true, + get: function() { + return PagesAPIRouteMatcherProvider; + } +}); +const _isapiroute = require("../../lib/is-api-route"); +const _constants = require("../../shared/lib/constants"); +const _routekind = require("../route-kind"); +const _pagesapiroutematcher = require("../route-matchers/pages-api-route-matcher"); +const _manifestroutematcherprovider = require("./manifest-route-matcher-provider"); +const _pages = require("../normalizers/built/pages"); +class PagesAPIRouteMatcherProvider extends _manifestroutematcherprovider.ManifestRouteMatcherProvider { + constructor(distDir, manifestLoader, i18nProvider){ + super(_constants.PAGES_MANIFEST, manifestLoader), this.i18nProvider = i18nProvider; + this.normalizers = new _pages.PagesNormalizers(distDir); + } + async transform(manifest) { + // This matcher is only for Pages API routes. + const pathnames = Object.keys(manifest).filter((pathname)=>(0, _isapiroute.isAPIRoute)(pathname)); + const matchers = []; + for (const page of pathnames){ + if (this.i18nProvider) { + // Match the locale on the page name, or default to the default locale. + const { detectedLocale, pathname } = this.i18nProvider.analyze(page); + matchers.push(new _pagesapiroutematcher.PagesAPILocaleRouteMatcher({ + kind: _routekind.RouteKind.PAGES_API, + pathname, + page, + bundlePath: this.normalizers.bundlePath.normalize(page), + filename: this.normalizers.filename.normalize(manifest[page]), + i18n: { + locale: detectedLocale + } + })); + } else { + matchers.push(new _pagesapiroutematcher.PagesAPIRouteMatcher({ + kind: _routekind.RouteKind.PAGES_API, + // In `pages/`, the page is the same as the pathname. + pathname: page, + page, + bundlePath: this.normalizers.bundlePath.normalize(page), + filename: this.normalizers.filename.normalize(manifest[page]) + })); + } + } + return matchers; + } +} + +//# sourceMappingURL=pages-api-route-matcher-provider.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matcher-providers/pages-route-matcher-provider.js b/build/node_modules/next/dist/server/route-matcher-providers/pages-route-matcher-provider.js new file mode 100644 index 0000000..11d7ded --- /dev/null +++ b/build/node_modules/next/dist/server/route-matcher-providers/pages-route-matcher-provider.js @@ -0,0 +1,64 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "PagesRouteMatcherProvider", { + enumerable: true, + get: function() { + return PagesRouteMatcherProvider; + } +}); +const _isapiroute = require("../../lib/is-api-route"); +const _constants = require("../../shared/lib/constants"); +const _routekind = require("../route-kind"); +const _pagesroutematcher = require("../route-matchers/pages-route-matcher"); +const _manifestroutematcherprovider = require("./manifest-route-matcher-provider"); +const _pages = require("../normalizers/built/pages"); +class PagesRouteMatcherProvider extends _manifestroutematcherprovider.ManifestRouteMatcherProvider { + constructor(distDir, manifestLoader, i18nProvider){ + super(_constants.PAGES_MANIFEST, manifestLoader), this.i18nProvider = i18nProvider; + this.normalizers = new _pages.PagesNormalizers(distDir); + } + async transform(manifest) { + // This matcher is only for Pages routes, not Pages API routes which are + // included in this manifest. + const pathnames = Object.keys(manifest).filter((pathname)=>!(0, _isapiroute.isAPIRoute)(pathname))// Remove any blocked pages (page that can't be routed to, like error or + // internal pages). + .filter((pathname)=>{ + var _this_i18nProvider; + const normalized = ((_this_i18nProvider = this.i18nProvider) == null ? void 0 : _this_i18nProvider.analyze(pathname).pathname) ?? pathname; + // Skip any blocked pages. + if (_constants.BLOCKED_PAGES.includes(normalized)) return false; + return true; + }); + const matchers = []; + for (const page of pathnames){ + if (this.i18nProvider) { + // Match the locale on the page name, or default to the default locale. + const { detectedLocale, pathname } = this.i18nProvider.analyze(page); + matchers.push(new _pagesroutematcher.PagesLocaleRouteMatcher({ + kind: _routekind.RouteKind.PAGES, + pathname, + page, + bundlePath: this.normalizers.bundlePath.normalize(page), + filename: this.normalizers.filename.normalize(manifest[page]), + i18n: { + locale: detectedLocale + } + })); + } else { + matchers.push(new _pagesroutematcher.PagesRouteMatcher({ + kind: _routekind.RouteKind.PAGES, + // In `pages/`, the page is the same as the pathname. + pathname: page, + page, + bundlePath: this.normalizers.bundlePath.normalize(page), + filename: this.normalizers.filename.normalize(manifest[page]) + })); + } + } + return matchers; + } +} + +//# sourceMappingURL=pages-route-matcher-provider.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.js b/build/node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.js new file mode 100644 index 0000000..c0d5e5c --- /dev/null +++ b/build/node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=route-matcher-provider.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matchers/app-page-route-matcher.js b/build/node_modules/next/dist/server/route-matchers/app-page-route-matcher.js new file mode 100644 index 0000000..f96c9cc --- /dev/null +++ b/build/node_modules/next/dist/server/route-matchers/app-page-route-matcher.js @@ -0,0 +1,18 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "AppPageRouteMatcher", { + enumerable: true, + get: function() { + return AppPageRouteMatcher; + } +}); +const _routematcher = require("./route-matcher"); +class AppPageRouteMatcher extends _routematcher.RouteMatcher { + get identity() { + return `${this.definition.pathname}?__nextPage=${this.definition.page}`; + } +} + +//# sourceMappingURL=app-page-route-matcher.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matchers/app-route-route-matcher.js b/build/node_modules/next/dist/server/route-matchers/app-route-route-matcher.js new file mode 100644 index 0000000..0b8bcfc --- /dev/null +++ b/build/node_modules/next/dist/server/route-matchers/app-route-route-matcher.js @@ -0,0 +1,15 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "AppRouteRouteMatcher", { + enumerable: true, + get: function() { + return AppRouteRouteMatcher; + } +}); +const _routematcher = require("./route-matcher"); +class AppRouteRouteMatcher extends _routematcher.RouteMatcher { +} + +//# sourceMappingURL=app-route-route-matcher.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matchers/locale-route-matcher.js b/build/node_modules/next/dist/server/route-matchers/locale-route-matcher.js new file mode 100644 index 0000000..e847de5 --- /dev/null +++ b/build/node_modules/next/dist/server/route-matchers/locale-route-matcher.js @@ -0,0 +1,68 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "LocaleRouteMatcher", { + enumerable: true, + get: function() { + return LocaleRouteMatcher; + } +}); +const _routematcher = require("./route-matcher"); +class LocaleRouteMatcher extends _routematcher.RouteMatcher { + /** + * Identity returns the identity part of the matcher. This is used to compare + * a unique matcher to another. This is also used when sorting dynamic routes, + * so it must contain the pathname part as well. + */ get identity() { + var _this_definition_i18n; + return `${this.definition.pathname}?__nextLocale=${(_this_definition_i18n = this.definition.i18n) == null ? void 0 : _this_definition_i18n.locale}`; + } + /** + * Match will attempt to match the given pathname against this route while + * also taking into account the locale information. + * + * @param pathname The pathname to match against. + * @param options The options to use when matching. + * @returns The match result, or `null` if there was no match. + */ match(pathname, options) { + var // If the options have a detected locale, then use that, otherwise use + // the route's locale. + _options_i18n, _this_definition_i18n; + // This is like the parent `match` method but instead this injects the + // additional `options` into the + const result = this.test(pathname, options); + if (!result) return null; + return { + definition: this.definition, + params: result.params, + detectedLocale: (options == null ? void 0 : (_options_i18n = options.i18n) == null ? void 0 : _options_i18n.detectedLocale) ?? ((_this_definition_i18n = this.definition.i18n) == null ? void 0 : _this_definition_i18n.locale) + }; + } + /** + * Test will attempt to match the given pathname against this route while + * also taking into account the locale information. + * + * @param pathname The pathname to match against. + * @param options The options to use when matching. + * @returns The match result, or `null` if there was no match. + */ test(pathname, options) { + // If this route has locale information and we have detected a locale, then + // we need to compare the detected locale to the route's locale. + if (this.definition.i18n && (options == null ? void 0 : options.i18n)) { + // If we have detected a locale and it does not match this route's locale, + // then this isn't a match! + if (this.definition.i18n.locale && options.i18n.detectedLocale && this.definition.i18n.locale !== options.i18n.detectedLocale) { + return null; + } + // Perform regular matching against the locale stripped pathname now, the + // locale information matches! + return super.test(options.i18n.pathname); + } + // If we don't have locale information, then we can just perform regular + // matching. + return super.test(pathname); + } +} + +//# sourceMappingURL=locale-route-matcher.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matchers/pages-api-route-matcher.js b/build/node_modules/next/dist/server/route-matchers/pages-api-route-matcher.js new file mode 100644 index 0000000..fa05b8f --- /dev/null +++ b/build/node_modules/next/dist/server/route-matchers/pages-api-route-matcher.js @@ -0,0 +1,30 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + PagesAPILocaleRouteMatcher: null, + PagesAPIRouteMatcher: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + PagesAPILocaleRouteMatcher: function() { + return PagesAPILocaleRouteMatcher; + }, + PagesAPIRouteMatcher: function() { + return PagesAPIRouteMatcher; + } +}); +const _localeroutematcher = require("./locale-route-matcher"); +const _routematcher = require("./route-matcher"); +class PagesAPIRouteMatcher extends _routematcher.RouteMatcher { +} +class PagesAPILocaleRouteMatcher extends _localeroutematcher.LocaleRouteMatcher { +} + +//# sourceMappingURL=pages-api-route-matcher.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matchers/pages-route-matcher.js b/build/node_modules/next/dist/server/route-matchers/pages-route-matcher.js new file mode 100644 index 0000000..e59a61d --- /dev/null +++ b/build/node_modules/next/dist/server/route-matchers/pages-route-matcher.js @@ -0,0 +1,30 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + PagesLocaleRouteMatcher: null, + PagesRouteMatcher: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + PagesLocaleRouteMatcher: function() { + return PagesLocaleRouteMatcher; + }, + PagesRouteMatcher: function() { + return PagesRouteMatcher; + } +}); +const _localeroutematcher = require("./locale-route-matcher"); +const _routematcher = require("./route-matcher"); +class PagesRouteMatcher extends _routematcher.RouteMatcher { +} +class PagesLocaleRouteMatcher extends _localeroutematcher.LocaleRouteMatcher { +} + +//# sourceMappingURL=pages-route-matcher.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matchers/route-matcher.js b/build/node_modules/next/dist/server/route-matchers/route-matcher.js new file mode 100644 index 0000000..4796728 --- /dev/null +++ b/build/node_modules/next/dist/server/route-matchers/route-matcher.js @@ -0,0 +1,54 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "RouteMatcher", { + enumerable: true, + get: function() { + return RouteMatcher; + } +}); +const _utils = require("../../shared/lib/router/utils"); +const _routematcher = require("../../shared/lib/router/utils/route-matcher"); +const _routeregex = require("../../shared/lib/router/utils/route-regex"); +class RouteMatcher { + constructor(definition){ + this.definition = definition; + if ((0, _utils.isDynamicRoute)(definition.pathname)) { + this.dynamic = (0, _routematcher.getRouteMatcher)((0, _routeregex.getRouteRegex)(definition.pathname)); + } + } + /** + * Identity returns the identity part of the matcher. This is used to compare + * a unique matcher to another. This is also used when sorting dynamic routes, + * so it must contain the pathname part. + */ get identity() { + return this.definition.pathname; + } + get isDynamic() { + return this.dynamic !== undefined; + } + match(pathname) { + const result = this.test(pathname); + if (!result) return null; + return { + definition: this.definition, + params: result.params + }; + } + test(pathname) { + if (this.dynamic) { + const params = this.dynamic(pathname); + if (!params) return null; + return { + params + }; + } + if (pathname === this.definition.pathname) { + return {}; + } + return null; + } +} + +//# sourceMappingURL=route-matcher.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matches/app-page-route-match.js b/build/node_modules/next/dist/server/route-matches/app-page-route-match.js new file mode 100644 index 0000000..8c1220c --- /dev/null +++ b/build/node_modules/next/dist/server/route-matches/app-page-route-match.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=app-page-route-match.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matches/app-route-route-match.js b/build/node_modules/next/dist/server/route-matches/app-route-route-match.js new file mode 100644 index 0000000..3b7590d --- /dev/null +++ b/build/node_modules/next/dist/server/route-matches/app-route-route-match.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=app-route-route-match.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matches/locale-route-match.js b/build/node_modules/next/dist/server/route-matches/locale-route-match.js new file mode 100644 index 0000000..7428821 --- /dev/null +++ b/build/node_modules/next/dist/server/route-matches/locale-route-match.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=locale-route-match.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matches/pages-api-route-match.js b/build/node_modules/next/dist/server/route-matches/pages-api-route-match.js new file mode 100644 index 0000000..6b10e37 --- /dev/null +++ b/build/node_modules/next/dist/server/route-matches/pages-api-route-match.js @@ -0,0 +1,16 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "isPagesAPIRouteMatch", { + enumerable: true, + get: function() { + return isPagesAPIRouteMatch; + } +}); +const _routekind = require("../route-kind"); +function isPagesAPIRouteMatch(match) { + return match.definition.kind === _routekind.RouteKind.PAGES_API; +} + +//# sourceMappingURL=pages-api-route-match.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matches/pages-route-match.js b/build/node_modules/next/dist/server/route-matches/pages-route-match.js new file mode 100644 index 0000000..576780c --- /dev/null +++ b/build/node_modules/next/dist/server/route-matches/pages-route-match.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=pages-route-match.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-matches/route-match.js b/build/node_modules/next/dist/server/route-matches/route-match.js new file mode 100644 index 0000000..36ddf21 --- /dev/null +++ b/build/node_modules/next/dist/server/route-matches/route-match.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=route-match.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/helpers/prerender-manifest-matcher.js b/build/node_modules/next/dist/server/route-modules/app-page/helpers/prerender-manifest-matcher.js new file mode 100644 index 0000000..f0e7ffb --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/helpers/prerender-manifest-matcher.js @@ -0,0 +1,51 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "PrerenderManifestMatcher", { + enumerable: true, + get: function() { + return PrerenderManifestMatcher; + } +}); +const _routematcher = require("../../../../shared/lib/router/utils/route-matcher"); +const _routeregex = require("../../../../shared/lib/router/utils/route-regex"); +class PrerenderManifestMatcher { + constructor(pathname, prerenderManifest){ + this.matchers = Object.entries(prerenderManifest.dynamicRoutes).filter(([source, route])=>{ + // If the pathname is a fallback source route, or the source route is + // the same as the pathname, then we should include it in the matchers. + return route.fallbackSourceRoute === pathname || source === pathname; + }).map(([source, route])=>({ + source, + route + })); + } + /** + * Match the pathname to the dynamic route. If no match is found, an error is + * thrown. + * + * @param pathname - The pathname to match. + * @returns The dynamic route that matches the pathname. + */ match(pathname) { + // Iterate over the matchers. They're already in the correct order of + // specificity as they were inserted into the prerender manifest that way + // and iterating over them with Object.entries guarantees that. + for (const matcher of this.matchers){ + // Lazily create the matcher, this is only done once per matcher. + if (!matcher.matcher) { + matcher.matcher = (0, _routematcher.getRouteMatcher)((0, _routeregex.getRouteRegex)(matcher.source)); + } + const match = matcher.matcher(pathname); + if (match) { + return { + source: matcher.source, + route: matcher.route + }; + } + } + return null; + } +} + +//# sourceMappingURL=prerender-manifest-matcher.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/module.compiled.js b/build/node_modules/next/dist/server/route-modules/app-page/module.compiled.js new file mode 100644 index 0000000..c4a8ce7 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/module.compiled.js @@ -0,0 +1,36 @@ +"use strict"; +if (process.env.NEXT_RUNTIME === 'edge') { + module.exports = require('next/dist/server/route-modules/app-page/module.js'); +} else { + if (process.env.__NEXT_EXPERIMENTAL_REACT) { + if (process.env.NODE_ENV === 'development') { + if (process.env.TURBOPACK) { + module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.dev.js'); + } else { + module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.dev.js'); + } + } else { + if (process.env.TURBOPACK) { + module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js'); + } else { + module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.prod.js'); + } + } + } else { + if (process.env.NODE_ENV === 'development') { + if (process.env.TURBOPACK) { + module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.dev.js'); + } else { + module.exports = require('next/dist/compiled/next-server/app-page.runtime.dev.js'); + } + } else { + if (process.env.TURBOPACK) { + module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.prod.js'); + } else { + module.exports = require('next/dist/compiled/next-server/app-page.runtime.prod.js'); + } + } + } +} + +//# sourceMappingURL=module.compiled.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/module.js b/build/node_modules/next/dist/server/route-modules/app-page/module.js new file mode 100644 index 0000000..a9726d6 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/module.js @@ -0,0 +1,162 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + AppPageRouteModule: null, + default: null, + renderToHTMLOrFlight: null, + vendored: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + AppPageRouteModule: function() { + return AppPageRouteModule; + }, + default: function() { + return _default; + }, + renderToHTMLOrFlight: function() { + return _apprender.renderToHTMLOrFlight; + }, + vendored: function() { + return vendored; + } +}); +const _requestmeta = require("../../request-meta"); +const _apprender = require("../../app-render/app-render"); +const _routemodule = require("../route-module"); +const _entrypoints = /*#__PURE__*/ _interop_require_wildcard(require("./vendored/contexts/entrypoints")); +const _prerendermanifestmatcher = require("./helpers/prerender-manifest-matcher"); +const _approuterheaders = require("../../../client/components/app-router-headers"); +const _interceptionroutes = require("../../../shared/lib/router/utils/interception-routes"); +const _rsc = require("../../normalizers/request/rsc"); +const _segmentprefixrsc = require("../../normalizers/request/segment-prefix-rsc"); +const _normalizerequesturl = require("./normalize-request-url"); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +let vendoredReactRSC; +let vendoredReactSSR; +// the vendored Reacts are loaded from their original source in the edge runtime +if (process.env.NEXT_RUNTIME !== 'edge') { + vendoredReactRSC = require('./vendored/rsc/entrypoints'); + vendoredReactSSR = require('./vendored/ssr/entrypoints'); + // In Node environments we need to access the correct React instance from external modules such + // as global patches. We register the loaded React instances here. + const { registerServerReact, registerClientReact } = require('../../runtime-reacts.external'); + registerServerReact(vendoredReactRSC.React); + registerClientReact(vendoredReactSSR.React); +} +class AppPageRouteModule extends _routemodule.RouteModule { + match(pathname, prerenderManifest) { + // Lazily create the matcher based on the provided prerender manifest. + let matcher = this.matchers.get(prerenderManifest); + if (!matcher) { + matcher = new _prerendermanifestmatcher.PrerenderManifestMatcher(this.definition.pathname, prerenderManifest); + this.matchers.set(prerenderManifest, matcher); + } + // Match the pathname to the dynamic route. + return matcher.match(pathname); + } + normalizeUrl(req, parsedUrl) { + if (this.normalizers.segmentPrefetchRSC.match(parsedUrl.pathname || '/')) { + const result = this.normalizers.segmentPrefetchRSC.extract(parsedUrl.pathname || '/'); + if (!result) return false; + const { originalPathname, segmentPath } = result; + parsedUrl.pathname = originalPathname; + // Mark the request as a router prefetch request. + req.headers[_approuterheaders.RSC_HEADER] = '1'; + req.headers[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER] = '1'; + req.headers[_approuterheaders.NEXT_ROUTER_SEGMENT_PREFETCH_HEADER] = segmentPath; + (0, _requestmeta.addRequestMeta)(req, 'isRSCRequest', true); + (0, _requestmeta.addRequestMeta)(req, 'isPrefetchRSCRequest', true); + (0, _requestmeta.addRequestMeta)(req, 'segmentPrefetchRSCRequest', segmentPath); + } else if (this.normalizers.rsc.match(parsedUrl.pathname || '/')) { + parsedUrl.pathname = this.normalizers.rsc.normalize(parsedUrl.pathname || '/', true); + // Mark the request as a RSC request. + req.headers[_approuterheaders.RSC_HEADER] = '1'; + (0, _requestmeta.addRequestMeta)(req, 'isRSCRequest', true); + } else { + super.normalizeUrl(req, parsedUrl); + } + (0, _normalizerequesturl.normalizeAppPageRequestUrl)(req, parsedUrl.pathname || '/'); + } + render(req, res, context) { + return (0, _apprender.renderToHTMLOrFlight)(req, res, context.page, context.query, context.fallbackRouteParams, context.renderOpts, context.serverComponentsHmrCache, context.sharedContext); + } + pathCouldBeIntercepted(resolvedPathname, interceptionRoutePatterns) { + return (0, _interceptionroutes.isInterceptionRouteAppPath)(resolvedPathname) || interceptionRoutePatterns.some((regexp)=>{ + return regexp.test(resolvedPathname); + }); + } + getVaryHeader(resolvedPathname, interceptionRoutePatterns) { + const baseVaryHeader = `${_approuterheaders.RSC_HEADER}, ${_approuterheaders.NEXT_ROUTER_STATE_TREE_HEADER}, ${_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER}, ${_approuterheaders.NEXT_ROUTER_SEGMENT_PREFETCH_HEADER}`; + if (this.pathCouldBeIntercepted(resolvedPathname, interceptionRoutePatterns)) { + // Interception route responses can vary based on the `Next-URL` header. + // We use the Vary header to signal this behavior to the client to properly cache the response. + return `${baseVaryHeader}, ${_approuterheaders.NEXT_URL}`; + } else { + // We don't need to include `Next-URL` in the Vary header for non-interception routes since it won't affect the response. + // We also set this header for pages to avoid caching issues when navigating between pages and app. + return baseVaryHeader; + } + } + constructor(...args){ + super(...args), this.matchers = new WeakMap(), this.normalizers = { + rsc: new _rsc.RSCPathnameNormalizer(), + segmentPrefetchRSC: new _segmentprefixrsc.SegmentPrefixRSCPathnameNormalizer() + }; + } +} +const vendored = { + 'react-rsc': vendoredReactRSC, + 'react-ssr': vendoredReactSSR, + contexts: _entrypoints +}; +const _default = AppPageRouteModule; + +//# sourceMappingURL=module.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/module.render.js b/build/node_modules/next/dist/server/route-modules/app-page/module.render.js new file mode 100644 index 0000000..23da6be --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/module.render.js @@ -0,0 +1,24 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "lazyRenderAppPage", { + enumerable: true, + get: function() { + return lazyRenderAppPage; + } +}); +const lazyRenderAppPage = (...args)=>{ + if (process.env.NEXT_MINIMAL) { + throw Object.defineProperty(new Error("Can't use lazyRenderAppPage in minimal mode"), "__NEXT_ERROR_CODE", { + value: "E256", + enumerable: false, + configurable: true + }); + } else { + const render = require('./module.compiled').renderToHTMLOrFlight; + return render(...args); + } +}; + +//# sourceMappingURL=module.render.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/normalize-request-url.js b/build/node_modules/next/dist/server/route-modules/app-page/normalize-request-url.js new file mode 100644 index 0000000..b11583a --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/normalize-request-url.js @@ -0,0 +1,25 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "normalizeAppPageRequestUrl", { + enumerable: true, + get: function() { + return normalizeAppPageRequestUrl; + } +}); +const _url = require("../../../lib/url"); +const _formaturl = require("../../../shared/lib/router/utils/format-url"); +function normalizeAppPageRequestUrl(req, pathname) { + if (!req.url) { + return; + } + const normalizedUrl = (0, _url.parseReqUrl)(req.url); + if (!normalizedUrl) { + return; + } + normalizedUrl.pathname = pathname; + req.url = (0, _formaturl.formatUrl)(normalizedUrl); +} + +//# sourceMappingURL=normalize-request-url.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/app-router-context.js b/build/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/app-router-context.js new file mode 100644 index 0000000..74fa662 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/app-router-context.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['contexts'].AppRouterContext; + +//# sourceMappingURL=app-router-context.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.js b/build/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.js new file mode 100644 index 0000000..7e21cb4 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.js @@ -0,0 +1,87 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + AppRouterContext: null, + HeadManagerContext: null, + HooksClientContext: null, + ImageConfigContext: null, + RouterContext: null, + ServerInsertedHtml: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + AppRouterContext: function() { + return _approutercontextsharedruntime; + }, + HeadManagerContext: function() { + return _headmanagercontextsharedruntime; + }, + HooksClientContext: function() { + return _hooksclientcontextsharedruntime; + }, + ImageConfigContext: function() { + return _imageconfigcontextsharedruntime; + }, + RouterContext: function() { + return _routercontextsharedruntime; + }, + ServerInsertedHtml: function() { + return _serverinsertedhtmlsharedruntime; + } +}); +const _headmanagercontextsharedruntime = /*#__PURE__*/ _interop_require_wildcard(require("../../../../../shared/lib/head-manager-context.shared-runtime")); +const _serverinsertedhtmlsharedruntime = /*#__PURE__*/ _interop_require_wildcard(require("../../../../../shared/lib/server-inserted-html.shared-runtime")); +const _approutercontextsharedruntime = /*#__PURE__*/ _interop_require_wildcard(require("../../../../../shared/lib/app-router-context.shared-runtime")); +const _hooksclientcontextsharedruntime = /*#__PURE__*/ _interop_require_wildcard(require("../../../../../shared/lib/hooks-client-context.shared-runtime")); +const _routercontextsharedruntime = /*#__PURE__*/ _interop_require_wildcard(require("../../../../../shared/lib/router-context.shared-runtime")); +const _imageconfigcontextsharedruntime = /*#__PURE__*/ _interop_require_wildcard(require("../../../../../shared/lib/image-config-context.shared-runtime")); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} + +//# sourceMappingURL=entrypoints.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/head-manager-context.js b/build/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/head-manager-context.js new file mode 100644 index 0000000..161d124 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/head-manager-context.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['contexts'].HeadManagerContext; + +//# sourceMappingURL=head-manager-context.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/hooks-client-context.js b/build/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/hooks-client-context.js new file mode 100644 index 0000000..8a86415 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/hooks-client-context.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['contexts'].HooksClientContext; + +//# sourceMappingURL=hooks-client-context.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/image-config-context.js b/build/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/image-config-context.js new file mode 100644 index 0000000..53255f9 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/image-config-context.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['contexts'].ImageConfigContext; + +//# sourceMappingURL=image-config-context.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/router-context.js b/build/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/router-context.js new file mode 100644 index 0000000..424b2ce --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/router-context.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['contexts'].RouterContext; + +//# sourceMappingURL=router-context.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/server-inserted-html.js b/build/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/server-inserted-html.js new file mode 100644 index 0000000..ebbbd2d --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/server-inserted-html.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['contexts'].ServerInsertedHtml; + +//# sourceMappingURL=server-inserted-html.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.js b/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.js new file mode 100644 index 0000000..a87b419 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.js @@ -0,0 +1,140 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + React: null, + ReactCompilerRuntime: null, + ReactDOM: null, + ReactJsxDevRuntime: null, + ReactJsxRuntime: null, + ReactServerDOMTurbopackServer: null, + ReactServerDOMTurbopackStatic: null, + ReactServerDOMWebpackServer: null, + ReactServerDOMWebpackStatic: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + React: function() { + return _react; + }, + ReactCompilerRuntime: function() { + return _compilerruntime; + }, + ReactDOM: function() { + return _reactdom; + }, + ReactJsxDevRuntime: function() { + return _jsxdevruntime; + }, + ReactJsxRuntime: function() { + return _jsxruntime; + }, + ReactServerDOMTurbopackServer: function() { + return ReactServerDOMTurbopackServer; + }, + ReactServerDOMTurbopackStatic: function() { + return ReactServerDOMTurbopackStatic; + }, + ReactServerDOMWebpackServer: function() { + return ReactServerDOMWebpackServer; + }, + ReactServerDOMWebpackStatic: function() { + return ReactServerDOMWebpackStatic; + } +}); +const _react = /*#__PURE__*/ _interop_require_wildcard(require("react")); +const _reactdom = /*#__PURE__*/ _interop_require_wildcard(require("react-dom")); +const _jsxdevruntime = /*#__PURE__*/ _interop_require_wildcard(require("react/jsx-dev-runtime")); +const _jsxruntime = /*#__PURE__*/ _interop_require_wildcard(require("react/jsx-runtime")); +const _compilerruntime = /*#__PURE__*/ _interop_require_wildcard(require("react/compiler-runtime")); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +function getAltProxyForBindingsDEV(type, pkg) { + if (process.env.NODE_ENV === 'development') { + const altType = type === 'Turbopack' ? 'Webpack' : 'Turbopack'; + const altPkg = pkg.replace(new RegExp(type, 'gi'), altType.toLowerCase()); + return new Proxy({}, { + get (_, prop) { + throw Object.defineProperty(new Error(`Expected to use ${type} bindings (${pkg}) for React but the current process is referencing '${prop}' from the ${altType} bindings (${altPkg}). This is likely a bug in our integration of the Next.js server runtime.`), "__NEXT_ERROR_CODE", { + value: "E253", + enumerable: false, + configurable: true + }); + } + }); + } +} +let ReactServerDOMTurbopackServer, ReactServerDOMWebpackServer; +let ReactServerDOMTurbopackStatic, ReactServerDOMWebpackStatic; +if (process.env.TURBOPACK) { + ReactServerDOMTurbopackServer = // @ts-expect-error -- TODO: Add types + // eslint-disable-next-line import/no-extraneous-dependencies + require('react-server-dom-turbopack/server'); + if (process.env.NODE_ENV === 'development') { + ReactServerDOMWebpackServer = getAltProxyForBindingsDEV('Turbopack', 'react-server-dom-turbopack/server'); + } + ReactServerDOMTurbopackStatic = // @ts-expect-error -- TODO: Add types + // eslint-disable-next-line import/no-extraneous-dependencies + require('react-server-dom-turbopack/static'); + if (process.env.NODE_ENV === 'development') { + ReactServerDOMWebpackStatic = getAltProxyForBindingsDEV('Turbopack', 'react-server-dom-turbopack/static'); + } +} else { + ReactServerDOMWebpackServer = // eslint-disable-next-line import/no-extraneous-dependencies + require('react-server-dom-webpack/server'); + if (process.env.NODE_ENV === 'development') { + ReactServerDOMTurbopackServer = getAltProxyForBindingsDEV('Webpack', 'react-server-dom-webpack/server'); + } + ReactServerDOMWebpackStatic = // eslint-disable-next-line import/no-extraneous-dependencies + require('react-server-dom-webpack/static'); + if (process.env.NODE_ENV === 'development') { + ReactServerDOMTurbopackStatic = getAltProxyForBindingsDEV('Webpack', 'react-server-dom-webpack/static'); + } +} + +//# sourceMappingURL=entrypoints.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-compiler-runtime.js b/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-compiler-runtime.js new file mode 100644 index 0000000..3753117 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-compiler-runtime.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['react-rsc'].ReactCompilerRuntime; + +//# sourceMappingURL=react-compiler-runtime.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-dom.js b/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-dom.js new file mode 100644 index 0000000..3ca430c --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-dom.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['react-rsc'].ReactDOM; + +//# sourceMappingURL=react-dom.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime.js b/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime.js new file mode 100644 index 0000000..4a4ed1e --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['react-rsc'].ReactJsxDevRuntime; + +//# sourceMappingURL=react-jsx-dev-runtime.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-runtime.js b/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-runtime.js new file mode 100644 index 0000000..dd61864 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-runtime.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['react-rsc'].ReactJsxRuntime; + +//# sourceMappingURL=react-jsx-runtime.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-turbopack-server.js b/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-turbopack-server.js new file mode 100644 index 0000000..024d96d --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-turbopack-server.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['react-rsc'].ReactServerDOMTurbopackServer; + +//# sourceMappingURL=react-server-dom-turbopack-server.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-turbopack-static.js b/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-turbopack-static.js new file mode 100644 index 0000000..927ff14 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-turbopack-static.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['react-rsc'].ReactServerDOMTurbopackStatic; + +//# sourceMappingURL=react-server-dom-turbopack-static.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server.js b/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server.js new file mode 100644 index 0000000..3173452 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['react-rsc'].ReactServerDOMWebpackServer; + +//# sourceMappingURL=react-server-dom-webpack-server.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-static.js b/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-static.js new file mode 100644 index 0000000..5e8a206 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-static.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['react-rsc'].ReactServerDOMWebpackStatic; + +//# sourceMappingURL=react-server-dom-webpack-static.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react.js b/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react.js new file mode 100644 index 0000000..6e789a3 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['react-rsc'].React; + +//# sourceMappingURL=react.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.js b/build/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.js new file mode 100644 index 0000000..72cf71e --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.js @@ -0,0 +1,125 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + React: null, + ReactCompilerRuntime: null, + ReactDOM: null, + ReactDOMServer: null, + ReactJsxDevRuntime: null, + ReactJsxRuntime: null, + ReactServerDOMTurbopackClient: null, + ReactServerDOMWebpackClient: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + React: function() { + return _react; + }, + ReactCompilerRuntime: function() { + return _compilerruntime; + }, + ReactDOM: function() { + return _reactdom; + }, + ReactDOMServer: function() { + return _server; + }, + ReactJsxDevRuntime: function() { + return _jsxdevruntime; + }, + ReactJsxRuntime: function() { + return _jsxruntime; + }, + ReactServerDOMTurbopackClient: function() { + return ReactServerDOMTurbopackClient; + }, + ReactServerDOMWebpackClient: function() { + return ReactServerDOMWebpackClient; + } +}); +const _react = /*#__PURE__*/ _interop_require_wildcard(require("react")); +const _reactdom = /*#__PURE__*/ _interop_require_wildcard(require("react-dom")); +const _jsxdevruntime = /*#__PURE__*/ _interop_require_wildcard(require("react/jsx-dev-runtime")); +const _jsxruntime = /*#__PURE__*/ _interop_require_wildcard(require("react/jsx-runtime")); +const _compilerruntime = /*#__PURE__*/ _interop_require_wildcard(require("react/compiler-runtime")); +const _server = /*#__PURE__*/ _interop_require_wildcard(require("react-dom/server")); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +function getAltProxyForBindingsDEV(type, pkg) { + if (process.env.NODE_ENV === 'development') { + const altType = type === 'Turbopack' ? 'Webpack' : 'Turbopack'; + const altPkg = pkg.replace(new RegExp(type, 'gi'), altType.toLowerCase()); + return new Proxy({}, { + get (_, prop) { + throw Object.defineProperty(new Error(`Expected to use ${type} bindings (${pkg}) for React but the current process is referencing '${prop}' from the ${altType} bindings (${altPkg}). This is likely a bug in our integration of the Next.js server runtime.`), "__NEXT_ERROR_CODE", { + value: "E253", + enumerable: false, + configurable: true + }); + } + }); + } +} +let ReactServerDOMTurbopackClient, ReactServerDOMWebpackClient; +if (process.env.TURBOPACK) { + ReactServerDOMTurbopackClient = // @ts-expect-error -- TODO: Add types + // eslint-disable-next-line import/no-extraneous-dependencies + require('react-server-dom-turbopack/client'); + if (process.env.NODE_ENV === 'development') { + ReactServerDOMWebpackClient = getAltProxyForBindingsDEV('Turbopack', 'react-server-dom-turbopack/client'); + } +} else { + ReactServerDOMWebpackClient = // eslint-disable-next-line import/no-extraneous-dependencies + require('react-server-dom-webpack/client'); + if (process.env.NODE_ENV === 'development') { + ReactServerDOMTurbopackClient = getAltProxyForBindingsDEV('Webpack', 'react-server-dom-webpack/client'); + } +} + +//# sourceMappingURL=entrypoints.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-compiler-runtime.js b/build/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-compiler-runtime.js new file mode 100644 index 0000000..9ea121b --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-compiler-runtime.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['react-ssr'].ReactCompilerRuntime; + +//# sourceMappingURL=react-compiler-runtime.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-dom-server.js b/build/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-dom-server.js new file mode 100644 index 0000000..e684bce --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-dom-server.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['react-ssr'].ReactDOMServer; + +//# sourceMappingURL=react-dom-server.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-dom.js b/build/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-dom.js new file mode 100644 index 0000000..9e49bcc --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-dom.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['react-ssr'].ReactDOM; + +//# sourceMappingURL=react-dom.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js b/build/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js new file mode 100644 index 0000000..494bdd7 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['react-ssr'].ReactJsxDevRuntime; + +//# sourceMappingURL=react-jsx-dev-runtime.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js b/build/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js new file mode 100644 index 0000000..c9633d0 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['react-ssr'].ReactJsxRuntime; + +//# sourceMappingURL=react-jsx-runtime.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-turbopack-client.js b/build/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-turbopack-client.js new file mode 100644 index 0000000..b3422ef --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-turbopack-client.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['react-ssr'].ReactServerDOMTurbopackClient; + +//# sourceMappingURL=react-server-dom-turbopack-client.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-webpack-client.js b/build/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-webpack-client.js new file mode 100644 index 0000000..3d47839 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-webpack-client.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['react-ssr'].ReactServerDOMWebpackClient; + +//# sourceMappingURL=react-server-dom-webpack-client.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js b/build/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js new file mode 100644 index 0000000..c22246f --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['react-ssr'].React; + +//# sourceMappingURL=react.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-route/helpers/auto-implement-methods.js b/build/node_modules/next/dist/server/route-modules/app-route/helpers/auto-implement-methods.js new file mode 100644 index 0000000..3f643a7 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-route/helpers/auto-implement-methods.js @@ -0,0 +1,85 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "autoImplementMethods", { + enumerable: true, + get: function() { + return autoImplementMethods; + } +}); +const _http = require("../../../web/http"); +const AUTOMATIC_ROUTE_METHODS = [ + 'HEAD', + 'OPTIONS' +]; +function handleMethodNotAllowedResponse() { + return new Response(null, { + status: 405 + }); +} +function autoImplementMethods(handlers) { + // Loop through all the HTTP methods to create the initial methods object. + // Each of the methods will be set to the 405 response handler. + const methods = _http.HTTP_METHODS.reduce((acc, method)=>({ + ...acc, + // If the userland module implements the method, then use it. Otherwise, + // use the 405 response handler. + [method]: handlers[method] ?? handleMethodNotAllowedResponse + }), {}); + // Get all the methods that could be automatically implemented that were not + // implemented by the userland module. + const implemented = new Set(_http.HTTP_METHODS.filter((method)=>handlers[method])); + const missing = AUTOMATIC_ROUTE_METHODS.filter((method)=>!implemented.has(method)); + // Loop over the missing methods to automatically implement them if we can. + for (const method of missing){ + // If the userland module doesn't implement the HEAD method, then + // we'll automatically implement it by calling the GET method (if it + // exists). + if (method === 'HEAD') { + if (handlers.GET) { + // Implement the HEAD method by calling the GET method. + methods.HEAD = handlers.GET; + // Mark it as implemented. + implemented.add('HEAD'); + } + continue; + } + // If OPTIONS is not provided then implement it. + if (method === 'OPTIONS') { + // TODO: check if HEAD is implemented, if so, use it to add more headers + // Get all the methods that were implemented by the userland module. + const allow = [ + 'OPTIONS', + ...implemented + ]; + // If the list of methods doesn't include HEAD, but it includes GET, then + // add HEAD as it's automatically implemented. + if (!implemented.has('HEAD') && implemented.has('GET')) { + allow.push('HEAD'); + } + // Sort and join the list with commas to create the `Allow` header. See: + // https://httpwg.org/specs/rfc9110.html#field.allow + const headers = { + Allow: allow.sort().join(', ') + }; + // Implement the OPTIONS method by returning a 204 response with the + // `Allow` header. + methods.OPTIONS = ()=>new Response(null, { + status: 204, + headers + }); + // Mark this method as implemented. + implemented.add('OPTIONS'); + continue; + } + throw Object.defineProperty(new Error(`Invariant: should handle all automatic implementable methods, got method: ${method}`), "__NEXT_ERROR_CODE", { + value: "E211", + enumerable: false, + configurable: true + }); + } + return methods; +} + +//# sourceMappingURL=auto-implement-methods.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-route/helpers/clean-url.js b/build/node_modules/next/dist/server/route-modules/app-route/helpers/clean-url.js new file mode 100644 index 0000000..2294ff8 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-route/helpers/clean-url.js @@ -0,0 +1,24 @@ +/** + * Cleans a URL by stripping the protocol, host, and search params. + * + * @param urlString the url to clean + * @returns the cleaned url + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "cleanURL", { + enumerable: true, + get: function() { + return cleanURL; + } +}); +function cleanURL(url) { + const u = new URL(url); + u.host = 'localhost:3000'; + u.search = ''; + u.protocol = 'http'; + return u; +} + +//# sourceMappingURL=clean-url.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-route/helpers/get-pathname-from-absolute-path.js b/build/node_modules/next/dist/server/route-modules/app-route/helpers/get-pathname-from-absolute-path.js new file mode 100644 index 0000000..99cdf0e --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-route/helpers/get-pathname-from-absolute-path.js @@ -0,0 +1,29 @@ +/** + * Get pathname from absolute path. + * + * @param absolutePath the absolute path + * @returns the pathname + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getPathnameFromAbsolutePath", { + enumerable: true, + get: function() { + return getPathnameFromAbsolutePath; + } +}); +function getPathnameFromAbsolutePath(absolutePath) { + // Remove prefix including app dir + let appDir = '/app/'; + if (!absolutePath.includes(appDir)) { + appDir = '\\app\\'; + } + const [, ...parts] = absolutePath.split(appDir); + const relativePath = appDir[0] + parts.join(appDir); + // remove extension + const pathname = relativePath.split('.').slice(0, -1).join('.'); + return pathname; +} + +//# sourceMappingURL=get-pathname-from-absolute-path.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-route/helpers/is-static-gen-enabled.js b/build/node_modules/next/dist/server/route-modules/app-route/helpers/is-static-gen-enabled.js new file mode 100644 index 0000000..3916106 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-route/helpers/is-static-gen-enabled.js @@ -0,0 +1,15 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "isStaticGenEnabled", { + enumerable: true, + get: function() { + return isStaticGenEnabled; + } +}); +function isStaticGenEnabled(mod) { + return mod.dynamic === 'force-static' || mod.dynamic === 'error' || mod.revalidate === false || mod.revalidate !== undefined && mod.revalidate > 0 || typeof mod.generateStaticParams == 'function'; +} + +//# sourceMappingURL=is-static-gen-enabled.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-route/helpers/parsed-url-query-to-params.js b/build/node_modules/next/dist/server/route-modules/app-route/helpers/parsed-url-query-to-params.js new file mode 100644 index 0000000..4d619e0 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-route/helpers/parsed-url-query-to-params.js @@ -0,0 +1,20 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "parsedUrlQueryToParams", { + enumerable: true, + get: function() { + return parsedUrlQueryToParams; + } +}); +function parsedUrlQueryToParams(query) { + const params = {}; + for (const [key, value] of Object.entries(query)){ + if (typeof value === 'undefined') continue; + params[key] = value; + } + return params; +} + +//# sourceMappingURL=parsed-url-query-to-params.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-route/module.compiled.js b/build/node_modules/next/dist/server/route-modules/app-route/module.compiled.js new file mode 100644 index 0000000..a14b6c0 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-route/module.compiled.js @@ -0,0 +1,36 @@ +"use strict"; +if (process.env.NEXT_RUNTIME === 'edge') { + module.exports = require('next/dist/server/route-modules/app-route/module.js'); +} else { + if (process.env.__NEXT_EXPERIMENTAL_REACT) { + if (process.env.NODE_ENV === 'development') { + if (process.env.TURBOPACK) { + module.exports = require('next/dist/compiled/next-server/app-route-turbo-experimental.runtime.dev.js'); + } else { + module.exports = require('next/dist/compiled/next-server/app-route-experimental.runtime.dev.js'); + } + } else { + if (process.env.TURBOPACK) { + module.exports = require('next/dist/compiled/next-server/app-route-turbo-experimental.runtime.prod.js'); + } else { + module.exports = require('next/dist/compiled/next-server/app-route-experimental.runtime.prod.js'); + } + } + } else { + if (process.env.NODE_ENV === 'development') { + if (process.env.TURBOPACK) { + module.exports = require('next/dist/compiled/next-server/app-route-turbo.runtime.dev.js'); + } else { + module.exports = require('next/dist/compiled/next-server/app-route.runtime.dev.js'); + } + } else { + if (process.env.TURBOPACK) { + module.exports = require('next/dist/compiled/next-server/app-route-turbo.runtime.prod.js'); + } else { + module.exports = require('next/dist/compiled/next-server/app-route.runtime.prod.js'); + } + } + } +} + +//# sourceMappingURL=module.compiled.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-route/module.js b/build/node_modules/next/dist/server/route-modules/app-route/module.js new file mode 100644 index 0000000..e78c033 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-route/module.js @@ -0,0 +1,915 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + AppRouteRouteModule: null, + WrappedNextRouterError: null, + default: null, + hasNonStaticMethods: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + AppRouteRouteModule: function() { + return AppRouteRouteModule; + }, + WrappedNextRouterError: function() { + return WrappedNextRouterError; + }, + default: function() { + return _default; + }, + hasNonStaticMethods: function() { + return hasNonStaticMethods; + } +}); +const _routemodule = require("../route-module"); +const _requeststore = require("../../async-storage/request-store"); +const _workstore = require("../../async-storage/work-store"); +const _http = require("../../web/http"); +const _implicittags = require("../../lib/implicit-tags"); +const _patchfetch = require("../../lib/patch-fetch"); +const _tracer = require("../../lib/trace/tracer"); +const _constants = require("../../lib/trace/constants"); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("../../../build/output/log")); +const _autoimplementmethods = require("./helpers/auto-implement-methods"); +const _requestcookies = require("../../web/spec-extension/adapters/request-cookies"); +const _headers = require("../../web/spec-extension/adapters/headers"); +const _parsedurlquerytoparams = require("./helpers/parsed-url-query-to-params"); +const _prospectiverenderutils = require("../../app-render/prospective-render-utils"); +const _hooksservercontext = /*#__PURE__*/ _interop_require_wildcard(require("../../../client/components/hooks-server-context")); +const _workasyncstorageexternal = require("../../app-render/work-async-storage.external"); +const _workunitasyncstorageexternal = require("../../app-render/work-unit-async-storage.external"); +const _actionasyncstorageexternal = require("../../app-render/action-async-storage.external"); +const _sharedmodules = /*#__PURE__*/ _interop_require_wildcard(require("./shared-modules")); +const _serveractionrequestmeta = require("../../lib/server-action-request-meta"); +const _cookies = require("next/dist/compiled/@edge-runtime/cookies"); +const _cleanurl = require("./helpers/clean-url"); +const _staticgenerationbailout = require("../../../client/components/static-generation-bailout"); +const _isstaticgenenabled = require("./helpers/is-static-gen-enabled"); +const _dynamicrendering = require("../../app-render/dynamic-rendering"); +const _reflect = require("../../web/spec-extension/adapters/reflect"); +const _cachesignal = require("../../app-render/cache-signal"); +const _scheduler = require("../../../lib/scheduler"); +const _params = require("../../request/params"); +const _redirect = require("../../../client/components/redirect"); +const _redirecterror = require("../../../client/components/redirect-error"); +const _httpaccessfallback = require("../../../client/components/http-access-fallback/http-access-fallback"); +const _redirectstatuscode = require("../../../client/components/redirect-status-code"); +const _constants1 = require("../../../lib/constants"); +const _revalidationutils = require("../../revalidation-utils"); +const _trackmoduleloadingexternal = require("../../app-render/module-loading/track-module-loading.external"); +const _invarianterror = require("../../../shared/lib/invariant-error"); +const _resumedatacache = require("../../resume-data-cache/resume-data-cache"); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +class WrappedNextRouterError { + constructor(error, headers){ + this.error = error; + this.headers = headers; + } +} +class AppRouteRouteModule extends _routemodule.RouteModule { + static #_ = this.sharedModules = _sharedmodules; + constructor({ userland, getUserland, definition, distDir, relativeProjectDir, resolvedPagePath, nextConfigOutput }){ + super({ + userland: userland, + definition, + distDir, + relativeProjectDir + }), /** + * A reference to the request async storage. + */ this.workUnitAsyncStorage = _workunitasyncstorageexternal.workUnitAsyncStorage, /** + * A reference to the static generation async storage. + */ this.workAsyncStorage = _workasyncstorageexternal.workAsyncStorage, /** + * An interface to call server hooks which interact with the underlying + * storage. + */ this.serverHooks = _hooksservercontext, /** + * A reference to the mutation related async storage, such as mutations of + * cookies. + */ this.actionAsyncStorage = _actionasyncstorageexternal.actionAsyncStorage; + this.resolvedPagePath = resolvedPagePath; + this.nextConfigOutput = nextConfigOutput; + this._getUserland = getUserland; + // Automatically implement some methods if they aren't implemented by the + // userland module. + this.methods = (0, _autoimplementmethods.autoImplementMethods)(userland); + // Get the non-static methods for this route. + this.hasNonStaticMethods = hasNonStaticMethods(userland); + // Get the dynamic property from the userland module. + this.dynamic = userland.dynamic; + if (this.nextConfigOutput === 'export') { + if (this.dynamic === 'force-dynamic') { + throw Object.defineProperty(new Error(`export const dynamic = "force-dynamic" on page "${definition.pathname}" cannot be used with "output: export". See more info here: https://nextjs.org/docs/advanced-features/static-html-export`), "__NEXT_ERROR_CODE", { + value: "E278", + enumerable: false, + configurable: true + }); + } else if (!(0, _isstaticgenenabled.isStaticGenEnabled)(this.userland) && this.userland['GET']) { + throw Object.defineProperty(new Error(`export const dynamic = "force-static"/export const revalidate not configured on route "${definition.pathname}" with "output: export". See more info here: https://nextjs.org/docs/advanced-features/static-html-export`), "__NEXT_ERROR_CODE", { + value: "E301", + enumerable: false, + configurable: true + }); + } else { + this.dynamic = 'error'; + } + } + // We only warn in development after here, so return if we're not in + // development. + if (process.env.NODE_ENV === 'development') { + // Print error in development if the exported handlers are in lowercase, only + // uppercase handlers are supported. + const lowercased = _http.HTTP_METHODS.map((method)=>method.toLowerCase()); + for (const method of lowercased){ + if (method in this.userland) { + _log.error(`Detected lowercase method '${method}' in '${this.resolvedPagePath}'. Export the uppercase '${method.toUpperCase()}' method name to fix this error.`); + } + } + // Print error if the module exports a default handler, they must use named + // exports for each HTTP method. + if ('default' in this.userland) { + _log.error(`Detected default export in '${this.resolvedPagePath}'. Export a named export for each HTTP method instead.`); + } + // If there is no methods exported by this module, then return a not found + // response. + if (!_http.HTTP_METHODS.some((method)=>method in this.userland)) { + _log.error(`No HTTP methods exported in '${this.resolvedPagePath}'. Export a named export for each HTTP method.`); + } + } + } + /** + * Resolves the handler function for the given method. + * + * @param method the requested method + * @returns the handler function for the given method + */ resolve(method) { + // Ensure that the requested method is a valid method (to prevent RCE's). + if (!(0, _http.isHTTPMethod)(method)) return ()=>new Response(null, { + status: 400 + }); + return (0, _autoimplementmethods.autoImplementMethods)(this.userland)[method]; + } + /** + * Like resolve(), but re-fetches the userland module on every call via the + * async getter. Only used in Turbopack dev mode, where server HMR disposes + * modules between requests. The async wrapper also unwraps async-module + * Promises produced by ESM-only serverExternalPackages. + */ async resolveWithGetter(method, getUserland) { + if (!(0, _http.isHTTPMethod)(method)) return ()=>new Response(null, { + status: 400 + }); + const userland = await getUserland(); + return (0, _autoimplementmethods.autoImplementMethods)(userland)[method]; + } + async do(handler, actionStore, workStore, // @TODO refactor to not take this argument but instead construct the RequestStore + // inside this function. Right now we get passed a RequestStore even when + // we're going to do a prerender. We should probably just split do up into prexecute and execute + requestStore, implicitTags, request, context) { + const isStaticGeneration = workStore.isStaticGeneration; + const cacheComponentsEnabled = !!context.renderOpts.cacheComponents; + // Patch the global fetch. + (0, _patchfetch.patchFetch)({ + workAsyncStorage: this.workAsyncStorage, + workUnitAsyncStorage: this.workUnitAsyncStorage + }); + const handlerContext = { + params: context.params ? (0, _params.createServerParamsForRoute)((0, _parsedurlquerytoparams.parsedUrlQueryToParams)(context.params)) : undefined + }; + const resolvePendingRevalidations = ()=>{ + const maybeRevalidatesPromise = (0, _revalidationutils.executeRevalidates)(workStore); + if (maybeRevalidatesPromise !== false) { + context.renderOpts.pendingWaitUntil = maybeRevalidatesPromise.finally(()=>{ + if (process.env.NEXT_PRIVATE_DEBUG_CACHE) { + console.log('pending revalidates promise finished for:', requestStore.url.pathname + requestStore.url.search); + } + }); + } + }; + let prerenderStore = null; + let res; + try { + if (isStaticGeneration) { + const userlandRevalidate = this.userland.revalidate; + const defaultRevalidate = // If the static generation store does not have a revalidate value + // set, then we should set it the revalidate value from the userland + // module or default to false. + userlandRevalidate === false || userlandRevalidate === undefined ? _constants1.INFINITE_CACHE : userlandRevalidate; + if (cacheComponentsEnabled) { + /** + * When we are attempting to statically prerender the GET handler of a route.ts module + * and cacheComponents is on we follow a similar pattern to rendering. + * + * We first run the handler letting caches fill. If something synchronously dynamic occurs + * during this prospective render then we can infer it will happen on every render and we + * just bail out of prerendering. + * + * Next we run the handler again and we check if we get a result back in a microtask. + * Next.js expects the return value to be a Response or a Thenable that resolves to a Response. + * Unfortunately Response's do not allow for accessing the response body synchronously or in + * a microtask so we need to allow one more task to unwrap the response body. This is a slightly + * different semantic than what we have when we render and it means that certain tasks can still + * execute before a prerender completes such as a carefully timed setImmediate. + * + * Functionally though IO should still take longer than the time it takes to unwrap the response body + * so our heuristic of excluding any IO should be preserved. + */ const prospectiveController = new AbortController(); + let prospectiveRenderIsDynamic = false; + const cacheSignal = new _cachesignal.CacheSignal(); + let dynamicTracking = (0, _dynamicrendering.createDynamicTrackingState)(undefined); + // TODO: Route handlers are never resumed, so it's counter-intuitive + // to use an RDC here. However, we need the data cache to store cached + // results in memory during the prospective prerender, so that they + // can be retrieved during the final prerender within microtasks. This + // is crucial when doing revalidations of a deployed route handler, + // where the default cache handler does not do any in-memory caching. + // We should replace the `prerenderResumeDataCache` and + // `renderResumeDataCache` with a single `dataCache` property that is + // conceptually not tied to resuming, and also avoids the unnecessary + // complexity of using a mutable and an immutable resume data cache. + const prerenderResumeDataCache = (0, _resumedatacache.createPrerenderResumeDataCache)(); + const prospectiveRoutePrerenderStore = prerenderStore = { + type: 'prerender', + phase: 'action', + // This replicates prior behavior where rootParams is empty in routes + // TODO we need to make this have the proper rootParams for this route + rootParams: {}, + fallbackRouteParams: null, + implicitTags, + renderSignal: prospectiveController.signal, + controller: prospectiveController, + cacheSignal, + // During prospective render we don't use a controller + // because we need to let all caches fill. + dynamicTracking, + allowEmptyStaticShell: false, + revalidate: defaultRevalidate, + expire: _constants1.INFINITE_CACHE, + stale: _constants1.INFINITE_CACHE, + tags: [ + ...implicitTags.tags + ], + prerenderResumeDataCache, + renderResumeDataCache: null, + hmrRefreshHash: undefined, + varyParamsAccumulator: null + }; + let prospectiveResult; + try { + prospectiveResult = this.workUnitAsyncStorage.run(prospectiveRoutePrerenderStore, handler, request, handlerContext); + } catch (err) { + if (prospectiveController.signal.aborted) { + // the route handler called an API which is always dynamic + // there is no need to try again + prospectiveRenderIsDynamic = true; + } else if (process.env.NEXT_DEBUG_BUILD || process.env.__NEXT_VERBOSE_LOGGING) { + (0, _prospectiverenderutils.printDebugThrownValueForProspectiveRender)(err, workStore.route, _prospectiverenderutils.Phase.ProspectiveRender); + } + } + if (typeof prospectiveResult === 'object' && prospectiveResult !== null && typeof prospectiveResult.then === 'function') { + // The handler returned a Thenable. We'll listen for rejections to determine + // if the route is erroring for dynamic reasons. + ; + prospectiveResult.then(()=>{}, (err)=>{ + if (prospectiveController.signal.aborted) { + // the route handler called an API which is always dynamic + // there is no need to try again + prospectiveRenderIsDynamic = true; + } else if (process.env.NEXT_DEBUG_BUILD) { + (0, _prospectiverenderutils.printDebugThrownValueForProspectiveRender)(err, workStore.route, _prospectiverenderutils.Phase.ProspectiveRender); + } + }); + } + (0, _trackmoduleloadingexternal.trackPendingModules)(cacheSignal); + await cacheSignal.cacheReady(); + if (prospectiveRenderIsDynamic) { + // the route handler called an API which is always dynamic + // there is no need to try again + const dynamicReason = (0, _dynamicrendering.getFirstDynamicReason)(dynamicTracking); + if (dynamicReason) { + throw Object.defineProperty(new _hooksservercontext.DynamicServerError(`Route ${workStore.route} couldn't be rendered statically because it used \`${dynamicReason}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`), "__NEXT_ERROR_CODE", { + value: "E558", + enumerable: false, + configurable: true + }); + } else { + console.error('Expected Next.js to keep track of reason for opting out of static rendering but one was not found. This is a bug in Next.js'); + throw Object.defineProperty(new _hooksservercontext.DynamicServerError(`Route ${workStore.route} couldn't be rendered statically because it used a dynamic API. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`), "__NEXT_ERROR_CODE", { + value: "E577", + enumerable: false, + configurable: true + }); + } + } + // TODO start passing this controller to the route handler. We should expose + // it so the handler to abort inflight requests and other operations if we abort + // the prerender. + const finalController = new AbortController(); + dynamicTracking = (0, _dynamicrendering.createDynamicTrackingState)(undefined); + const finalRoutePrerenderStore = prerenderStore = { + type: 'prerender', + phase: 'action', + rootParams: {}, + fallbackRouteParams: null, + implicitTags, + renderSignal: finalController.signal, + controller: finalController, + cacheSignal: null, + dynamicTracking, + allowEmptyStaticShell: false, + revalidate: defaultRevalidate, + expire: _constants1.INFINITE_CACHE, + stale: _constants1.INFINITE_CACHE, + tags: [ + ...implicitTags.tags + ], + prerenderResumeDataCache, + renderResumeDataCache: null, + hmrRefreshHash: undefined, + varyParamsAccumulator: null + }; + let responseHandled = false; + res = await new Promise((resolve, reject)=>{ + (0, _scheduler.scheduleImmediate)(async ()=>{ + try { + const result = await this.workUnitAsyncStorage.run(finalRoutePrerenderStore, handler, request, handlerContext); + if (responseHandled) { + // we already rejected in the followup task + return; + } else if (!(result instanceof Response)) { + // This is going to error but we let that happen below + resolve(result); + return; + } + responseHandled = true; + let bodyHandled = false; + result.arrayBuffer().then((body)=>{ + if (!bodyHandled) { + bodyHandled = true; + resolve(new Response(body, { + headers: result.headers, + status: result.status, + statusText: result.statusText + })); + } + }, reject); + (0, _scheduler.scheduleImmediate)(()=>{ + if (!bodyHandled) { + bodyHandled = true; + finalController.abort(); + reject(createCacheComponentsError(workStore.route)); + } + }); + } catch (err) { + reject(err); + } + }); + (0, _scheduler.scheduleImmediate)(()=>{ + if (!responseHandled) { + responseHandled = true; + finalController.abort(); + reject(createCacheComponentsError(workStore.route)); + } + }); + }); + if (finalController.signal.aborted) { + // We aborted from within the execution + throw createCacheComponentsError(workStore.route); + } else { + // We didn't abort during the execution. We can abort now as a matter of semantics + // though at the moment nothing actually consumes this signal so it won't halt any + // inflight work. + finalController.abort(); + } + } else { + prerenderStore = { + type: 'prerender-legacy', + phase: 'action', + rootParams: {}, + implicitTags, + revalidate: defaultRevalidate, + expire: _constants1.INFINITE_CACHE, + stale: _constants1.INFINITE_CACHE, + tags: [ + ...implicitTags.tags + ] + }; + res = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(prerenderStore, handler, request, handlerContext); + } + } else { + res = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, handler, request, handlerContext); + } + } catch (err) { + if ((0, _redirecterror.isRedirectError)(err)) { + const url = (0, _redirect.getURLFromRedirectError)(err); + if (!url) { + throw Object.defineProperty(new Error('Invariant: Unexpected redirect url format'), "__NEXT_ERROR_CODE", { + value: "E399", + enumerable: false, + configurable: true + }); + } + // We need to capture any headers that should be sent on + // the response. + const headers = new Headers({ + Location: url + }); + // Let's append any cookies that were added by the + // cookie API. + // TODO leaving the gate here b/c it indicates that we might not actually want to do this + // on every `do` call. During prerender there should be no mutableCookies because + (0, _requestcookies.appendMutableCookies)(headers, requestStore.mutableCookies); + resolvePendingRevalidations(); + // Return the redirect response. + return new Response(null, { + // If we're in an action, we want to use a 303 redirect as we don't + // want the POST request to follow the redirect, as it could result in + // erroneous re-submissions. + status: actionStore.isAction ? _redirectstatuscode.RedirectStatusCode.SeeOther : (0, _redirect.getRedirectStatusCodeFromError)(err), + headers + }); + } else if ((0, _httpaccessfallback.isHTTPAccessFallbackError)(err)) { + const httpStatus = (0, _httpaccessfallback.getAccessFallbackHTTPStatus)(err); + return new Response(null, { + status: httpStatus + }); + } + throw err; + } + // Validate that the response is a valid response object. + if (!(res instanceof Response)) { + var _res_constructor; + const invalidType = res === null ? 'null' : res === undefined ? 'undefined' : typeof res === 'object' ? ((_res_constructor = res.constructor) == null ? void 0 : _res_constructor.name) || 'object' : typeof res; + throw Object.defineProperty(new Error(`No response is returned from route handler '${this.resolvedPagePath}'. ` + `Expected a Response object but received '${invalidType}' (method: ${request.method}, url: ${requestStore.url.pathname}). ` + `Ensure you return a \`Response\` or a \`NextResponse\` in all branches of your handler.`), "__NEXT_ERROR_CODE", { + value: "E985", + enumerable: false, + configurable: true + }); + } + context.renderOpts.fetchMetrics = workStore.fetchMetrics; + resolvePendingRevalidations(); + if (prerenderStore) { + var _prerenderStore_tags; + context.renderOpts.collectedTags = (_prerenderStore_tags = prerenderStore.tags) == null ? void 0 : _prerenderStore_tags.join(','); + context.renderOpts.collectedRevalidate = prerenderStore.revalidate; + context.renderOpts.collectedExpire = prerenderStore.expire; + context.renderOpts.collectedStale = prerenderStore.stale; + } + // It's possible cookies were set in the handler, so we need + // to merge the modified cookies and the returned response + // here. + const headers = new Headers(res.headers); + if ((0, _requestcookies.appendMutableCookies)(headers, requestStore.mutableCookies)) { + return new Response(res.body, { + status: res.status, + statusText: res.statusText, + headers + }); + } + return res; + } + async handle(req, context) { + // Get the handler function for the given method. In Turbopack dev mode, + // use resolveWithGetter() to re-fetch the live userland on every request + // In all other modes, resolve() is synchronous. + const handler = this._getUserland ? await this.resolveWithGetter(req.method, this._getUserland) : this.resolve(req.method); + // Get the context for the static generation. + const staticGenerationContext = { + page: this.definition.page, + renderOpts: context.renderOpts, + buildId: context.sharedContext.buildId, + deploymentId: context.sharedContext.deploymentId, + previouslyRevalidatedTags: [] + }; + // Add the fetchCache option to the renderOpts. + staticGenerationContext.renderOpts.fetchCache = this.userland.fetchCache; + const actionStore = { + isAppRoute: true, + isAction: (0, _serveractionrequestmeta.getIsPossibleServerAction)(req) + }; + const implicitTags = await (0, _implicittags.getImplicitTags)(this.definition.page, req.nextUrl.pathname, // App Routes don't support unknown route params. + null); + const requestStore = (0, _requeststore.createRequestStoreForAPI)(req, req.nextUrl, implicitTags, undefined, context.previewProps); + const workStore = (0, _workstore.createWorkStore)(staticGenerationContext); + // Run the handler with the request AsyncLocalStorage to inject the helper + // support. We set this to `unknown` because the type is not known until + // runtime when we do a instanceof check below. + const response = await this.actionAsyncStorage.run(actionStore, ()=>this.workUnitAsyncStorage.run(requestStore, ()=>this.workAsyncStorage.run(workStore, async ()=>{ + // Check to see if we should bail out of static generation based on + // having non-static methods. + if (hasNonStaticMethods(this.userland)) { + if (workStore.isStaticGeneration) { + const err = Object.defineProperty(new _hooksservercontext.DynamicServerError('Route is configured with methods that cannot be statically generated.'), "__NEXT_ERROR_CODE", { + value: "E582", + enumerable: false, + configurable: true + }); + workStore.dynamicUsageDescription = err.message; + workStore.dynamicUsageStack = err.stack; + throw err; + } + } + // We assume we can pass the original request through however we may end up + // proxying it in certain circumstances based on execution type and configuration + let request = req; + // Update the static generation store based on the dynamic property. + const { dynamic } = this.userland; + switch(dynamic){ + case 'force-dynamic': + { + // Routes of generated paths should be dynamic + workStore.forceDynamic = true; + if (workStore.isStaticGeneration) { + const err = Object.defineProperty(new _hooksservercontext.DynamicServerError('Route is configured with dynamic = error which cannot be statically generated.'), "__NEXT_ERROR_CODE", { + value: "E703", + enumerable: false, + configurable: true + }); + workStore.dynamicUsageDescription = err.message; + workStore.dynamicUsageStack = err.stack; + throw err; + } + break; + } + case 'force-static': + // The dynamic property is set to force-static, so we should + // force the page to be static. + workStore.forceStatic = true; + // We also Proxy the request to replace dynamic data on the request + // with empty stubs to allow for safely executing as static + request = new Proxy(req, forceStaticRequestHandlers); + break; + case 'error': + // The dynamic property is set to error, so we should throw an + // error if the page is being statically generated. + workStore.dynamicShouldError = true; + if (workStore.isStaticGeneration) request = new Proxy(req, requireStaticRequestHandlers); + break; + case undefined: + case 'auto': + // We proxy `NextRequest` to track dynamic access, and + // potentially bail out of static generation. + request = proxyNextRequest(req, workStore); + break; + default: + dynamic; + } + const tracer = (0, _tracer.getTracer)(); + // Update the root span attribute for the route. + const { pathname } = this.definition; + tracer.setRootSpanAttribute('next.route', pathname); + return tracer.trace(_constants.AppRouteRouteHandlersSpan.runHandler, { + spanName: `executing api route (app) ${pathname}`, + attributes: { + 'next.route': pathname + } + }, async ()=>this.do(handler, actionStore, workStore, requestStore, implicitTags, request, context)); + }))); + // If the handler did't return a valid response, then return the internal + // error response. + if (!(response instanceof Response)) { + // TODO: validate the correct handling behavior, maybe log something? + return new Response(null, { + status: 500 + }); + } + if (response.headers.has('x-middleware-rewrite')) { + throw Object.defineProperty(new Error('NextResponse.rewrite() was used in a app route handler, this is not currently supported. Please remove the invocation to continue.'), "__NEXT_ERROR_CODE", { + value: "E374", + enumerable: false, + configurable: true + }); + } + if (response.headers.get('x-middleware-next') === '1') { + // TODO: move this error into the `NextResponse.next()` function. + throw Object.defineProperty(new Error('NextResponse.next() was used in a app route handler, this is not supported. See here for more info: https://nextjs.org/docs/messages/next-response-next-in-app-route-handler'), "__NEXT_ERROR_CODE", { + value: "E385", + enumerable: false, + configurable: true + }); + } + return response; + } +} +const _default = AppRouteRouteModule; +function hasNonStaticMethods(handlers) { + if (// Order these by how common they are to be used + handlers.POST || handlers.PUT || handlers.DELETE || handlers.PATCH || handlers.OPTIONS) { + return true; + } + return false; +} +// These symbols will be used to stash cached values on Proxied requests without requiring +// additional closures or storage such as WeakMaps. +const nextURLSymbol = Symbol('nextUrl'); +const requestCloneSymbol = Symbol('clone'); +const urlCloneSymbol = Symbol('clone'); +const searchParamsSymbol = Symbol('searchParams'); +const hrefSymbol = Symbol('href'); +const toStringSymbol = Symbol('toString'); +const headersSymbol = Symbol('headers'); +const cookiesSymbol = Symbol('cookies'); +/** + * The general technique with these proxy handlers is to prioritize keeping them static + * by stashing computed values on the Proxy itself. This is safe because the Proxy is + * inaccessible to the consumer since all operations are forwarded + */ const forceStaticRequestHandlers = { + get (target, prop, receiver) { + switch(prop){ + case 'headers': + return target[headersSymbol] || (target[headersSymbol] = _headers.HeadersAdapter.seal(new Headers({}))); + case 'cookies': + return target[cookiesSymbol] || (target[cookiesSymbol] = _requestcookies.RequestCookiesAdapter.seal(new _cookies.RequestCookies(new Headers({})))); + case 'nextUrl': + return target[nextURLSymbol] || (target[nextURLSymbol] = new Proxy(target.nextUrl, forceStaticNextUrlHandlers)); + case 'url': + // we don't need to separately cache this we can just read the nextUrl + // and return the href since we know it will have been stripped of any + // dynamic parts. We access via the receiver to trigger the get trap + return receiver.nextUrl.href; + case 'geo': + case 'ip': + return undefined; + case 'clone': + return target[requestCloneSymbol] || (target[requestCloneSymbol] = ()=>new Proxy(// This is vaguely unsafe but it's required since NextRequest does not implement + // clone. The reason we might expect this to work in this context is the Proxy will + // respond with static-amenable values anyway somewhat restoring the interface. + // @TODO we need to rethink NextRequest and NextURL because they are not sufficientlly + // sophisticated to adequately represent themselves in all contexts. A better approach is + // to probably embed the static generation logic into the class itself removing the need + // for any kind of proxying + target.clone(), forceStaticRequestHandlers)); + default: + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + } +}; +const forceStaticNextUrlHandlers = { + get (target, prop, receiver) { + switch(prop){ + // URL properties + case 'search': + return ''; + case 'searchParams': + return target[searchParamsSymbol] || (target[searchParamsSymbol] = new URLSearchParams()); + case 'href': + return target[hrefSymbol] || (target[hrefSymbol] = (0, _cleanurl.cleanURL)(target.href).href); + case 'toJSON': + case 'toString': + return target[toStringSymbol] || (target[toStringSymbol] = ()=>receiver.href); + // NextUrl properties + case 'url': + // Currently nextURL does not expose url but our Docs indicate that it is an available property + // I am forcing this to undefined here to avoid accidentally exposing a dynamic value later if + // the underlying nextURL ends up adding this property + return undefined; + case 'clone': + return target[urlCloneSymbol] || (target[urlCloneSymbol] = ()=>new Proxy(target.clone(), forceStaticNextUrlHandlers)); + default: + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + } +}; +function proxyNextRequest(request, workStore) { + const nextUrlHandlers = { + get (target, prop, receiver) { + switch(prop){ + case 'search': + case 'searchParams': + case 'url': + case 'href': + case 'toJSON': + case 'toString': + case 'origin': + { + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + trackDynamic(workStore, workUnitStore, `nextUrl.${prop}`); + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + case 'clone': + return target[urlCloneSymbol] || (target[urlCloneSymbol] = ()=>new Proxy(target.clone(), nextUrlHandlers)); + default: + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + } + }; + const nextRequestHandlers = { + get (target, prop) { + switch(prop){ + case 'nextUrl': + return target[nextURLSymbol] || (target[nextURLSymbol] = new Proxy(target.nextUrl, nextUrlHandlers)); + case 'headers': + case 'cookies': + case 'url': + case 'body': + case 'blob': + case 'json': + case 'text': + case 'arrayBuffer': + case 'formData': + { + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + trackDynamic(workStore, workUnitStore, `request.${prop}`); + // The receiver arg is intentionally the same as the target to fix an issue with + // edge runtime, where attempting to access internal slots with the wrong `this` context + // results in an error. + return _reflect.ReflectAdapter.get(target, prop, target); + } + case 'clone': + return target[requestCloneSymbol] || (target[requestCloneSymbol] = ()=>new Proxy(// This is vaguely unsafe but it's required since NextRequest does not implement + // clone. The reason we might expect this to work in this context is the Proxy will + // respond with static-amenable values anyway somewhat restoring the interface. + // @TODO we need to rethink NextRequest and NextURL because they are not sufficientlly + // sophisticated to adequately represent themselves in all contexts. A better approach is + // to probably embed the static generation logic into the class itself removing the need + // for any kind of proxying + target.clone(), nextRequestHandlers)); + default: + // The receiver arg is intentionally the same as the target to fix an issue with + // edge runtime, where attempting to access internal slots with the wrong `this` context + // results in an error. + return _reflect.ReflectAdapter.get(target, prop, target); + } + } + }; + return new Proxy(request, nextRequestHandlers); +} +const requireStaticRequestHandlers = { + get (target, prop, receiver) { + switch(prop){ + case 'nextUrl': + return target[nextURLSymbol] || (target[nextURLSymbol] = new Proxy(target.nextUrl, requireStaticNextUrlHandlers)); + case 'headers': + case 'cookies': + case 'url': + case 'body': + case 'blob': + case 'json': + case 'text': + case 'arrayBuffer': + case 'formData': + throw Object.defineProperty(new _staticgenerationbailout.StaticGenBailoutError(`Route ${target.nextUrl.pathname} with \`dynamic = "error"\` couldn't be rendered statically because it used \`request.${prop}\`.`), "__NEXT_ERROR_CODE", { + value: "E611", + enumerable: false, + configurable: true + }); + case 'clone': + return target[requestCloneSymbol] || (target[requestCloneSymbol] = ()=>new Proxy(// This is vaguely unsafe but it's required since NextRequest does not implement + // clone. The reason we might expect this to work in this context is the Proxy will + // respond with static-amenable values anyway somewhat restoring the interface. + // @TODO we need to rethink NextRequest and NextURL because they are not sufficientlly + // sophisticated to adequately represent themselves in all contexts. A better approach is + // to probably embed the static generation logic into the class itself removing the need + // for any kind of proxying + target.clone(), requireStaticRequestHandlers)); + default: + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + } +}; +const requireStaticNextUrlHandlers = { + get (target, prop, receiver) { + switch(prop){ + case 'search': + case 'searchParams': + case 'url': + case 'href': + case 'toJSON': + case 'toString': + case 'origin': + throw Object.defineProperty(new _staticgenerationbailout.StaticGenBailoutError(`Route ${target.pathname} with \`dynamic = "error"\` couldn't be rendered statically because it used \`nextUrl.${prop}\`.`), "__NEXT_ERROR_CODE", { + value: "E575", + enumerable: false, + configurable: true + }); + case 'clone': + return target[urlCloneSymbol] || (target[urlCloneSymbol] = ()=>new Proxy(target.clone(), requireStaticNextUrlHandlers)); + default: + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + } +}; +function createCacheComponentsError(route) { + return Object.defineProperty(new _hooksservercontext.DynamicServerError(`Route ${route} couldn't be rendered statically because it used IO that was not cached. See more info here: https://nextjs.org/docs/messages/cache-components`), "__NEXT_ERROR_CODE", { + value: "E727", + enumerable: false, + configurable: true + }); +} +function trackDynamic(store, workUnitStore, expression) { + if (store.dynamicShouldError) { + throw Object.defineProperty(new _staticgenerationbailout.StaticGenBailoutError(`Route ${store.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`${expression}\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`), "__NEXT_ERROR_CODE", { + value: "E553", + enumerable: false, + configurable: true + }); + } + if (workUnitStore) { + switch(workUnitStore.type){ + case 'cache': + case 'private-cache': + // TODO: Should we allow reading cookies and search params from the + // request for private caches in route handlers? + throw Object.defineProperty(new Error(`Route ${store.route} used "${expression}" inside "use cache". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use "${expression}" outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`), "__NEXT_ERROR_CODE", { + value: "E178", + enumerable: false, + configurable: true + }); + case 'unstable-cache': + throw Object.defineProperty(new Error(`Route ${store.route} used "${expression}" inside a function cached with "unstable_cache(...)". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use "${expression}" outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`), "__NEXT_ERROR_CODE", { + value: "E133", + enumerable: false, + configurable: true + }); + case 'prerender': + const error = Object.defineProperty(new Error(`Route ${store.route} used ${expression} without first calling \`await connection()\`. See more info here: https://nextjs.org/docs/messages/next-prerender-sync-request`), "__NEXT_ERROR_CODE", { + value: "E261", + enumerable: false, + configurable: true + }); + return (0, _dynamicrendering.abortAndThrowOnSynchronousRequestDataAccess)(store.route, expression, error, workUnitStore); + case 'prerender-client': + case 'validation-client': + throw Object.defineProperty(new _invarianterror.InvariantError('A client prerender store should not be used for a route handler.'), "__NEXT_ERROR_CODE", { + value: "E720", + enumerable: false, + configurable: true + }); + case 'prerender-runtime': + throw Object.defineProperty(new _invarianterror.InvariantError('A runtime prerender store should not be used for a route handler.'), "__NEXT_ERROR_CODE", { + value: "E767", + enumerable: false, + configurable: true + }); + case 'prerender-ppr': + return (0, _dynamicrendering.postponeWithTracking)(store.route, expression, workUnitStore.dynamicTracking); + case 'prerender-legacy': + workUnitStore.revalidate = 0; + const err = Object.defineProperty(new _hooksservercontext.DynamicServerError(`Route ${store.route} couldn't be rendered statically because it used \`${expression}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`), "__NEXT_ERROR_CODE", { + value: "E558", + enumerable: false, + configurable: true + }); + store.dynamicUsageDescription = expression; + store.dynamicUsageStack = err.stack; + throw err; + case 'request': + if (process.env.NODE_ENV !== 'production') { + // TODO: This is currently not really needed for route handlers, as it + // only controls the ISR status that's shown for pages. + workUnitStore.usedDynamic = true; + } + break; + case 'generate-static-params': + break; + default: + workUnitStore; + } + } +} + +//# sourceMappingURL=module.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/app-route/shared-modules.js b/build/node_modules/next/dist/server/route-modules/app-route/shared-modules.js new file mode 100644 index 0000000..6071963 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/app-route/shared-modules.js @@ -0,0 +1,56 @@ +// the name of the export has to be the camelCase version of the file name (without the extension) +// TODO: remove this. We need it because using notFound from next/navigation imports this file :( +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "appRouterContext", { + enumerable: true, + get: function() { + return _approutercontextsharedruntime; + } +}); +const _approutercontextsharedruntime = /*#__PURE__*/ _interop_require_wildcard(require("../../../shared/lib/app-router-context.shared-runtime")); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} + +//# sourceMappingURL=shared-modules.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/checks.js b/build/node_modules/next/dist/server/route-modules/checks.js new file mode 100644 index 0000000..cf72ace --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/checks.js @@ -0,0 +1,45 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + isAppPageRouteModule: null, + isAppRouteRouteModule: null, + isPagesAPIRouteModule: null, + isPagesRouteModule: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + isAppPageRouteModule: function() { + return isAppPageRouteModule; + }, + isAppRouteRouteModule: function() { + return isAppRouteRouteModule; + }, + isPagesAPIRouteModule: function() { + return isPagesAPIRouteModule; + }, + isPagesRouteModule: function() { + return isPagesRouteModule; + } +}); +const _routekind = require("../route-kind"); +function isAppRouteRouteModule(routeModule) { + return routeModule.definition.kind === _routekind.RouteKind.APP_ROUTE; +} +function isAppPageRouteModule(routeModule) { + return routeModule.definition.kind === _routekind.RouteKind.APP_PAGE; +} +function isPagesRouteModule(routeModule) { + return routeModule.definition.kind === _routekind.RouteKind.PAGES; +} +function isPagesAPIRouteModule(routeModule) { + return routeModule.definition.kind === _routekind.RouteKind.PAGES_API; +} + +//# sourceMappingURL=checks.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/pages-api/module.compiled.js b/build/node_modules/next/dist/server/route-modules/pages-api/module.compiled.js new file mode 100644 index 0000000..6c06fb7 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/pages-api/module.compiled.js @@ -0,0 +1,20 @@ +"use strict"; +if (process.env.NEXT_RUNTIME === 'edge') { + module.exports = require('next/dist/server/route-modules/pages-api/module.js'); +} else { + if (process.env.NODE_ENV === 'development') { + if (process.env.TURBOPACK) { + module.exports = require('next/dist/compiled/next-server/pages-api-turbo.runtime.dev.js'); + } else { + module.exports = require('next/dist/compiled/next-server/pages-api.runtime.dev.js'); + } + } else { + if (process.env.TURBOPACK) { + module.exports = require('next/dist/compiled/next-server/pages-api-turbo.runtime.prod.js'); + } else { + module.exports = require('next/dist/compiled/next-server/pages-api.runtime.prod.js'); + } + } +} + +//# sourceMappingURL=module.compiled.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/pages-api/module.js b/build/node_modules/next/dist/server/route-modules/pages-api/module.js new file mode 100644 index 0000000..654c3ae --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/pages-api/module.js @@ -0,0 +1,58 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + PagesAPIRouteModule: null, + default: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + PagesAPIRouteModule: function() { + return PagesAPIRouteModule; + }, + default: function() { + return _default; + } +}); +const _apiutils = require("../../api-utils"); +const _routemodule = require("../route-module"); +const _apiresolver = require("../../api-utils/node/api-resolver"); +class PagesAPIRouteModule extends _routemodule.RouteModule { + constructor(options){ + super(options); + if (typeof options.userland.default !== 'function') { + throw Object.defineProperty(new Error(`Page ${options.definition.page} does not export a default function.`), "__NEXT_ERROR_CODE", { + value: "E379", + enumerable: false, + configurable: true + }); + } + this.apiResolverWrapped = (0, _apiutils.wrapApiHandler)(options.definition.page, _apiresolver.apiResolver); + } + /** + * + * @param req the incoming server request + * @param res the outgoing server response + * @param context the context for the render + */ async render(req, res, context) { + const { apiResolverWrapped } = this; + await apiResolverWrapped(req, res, context.query, this.userland, { + ...context.previewProps, + trustHostHeader: context.trustHostHeader, + allowedRevalidateHeaderKeys: context.allowedRevalidateHeaderKeys, + hostname: context.hostname, + multiZoneDraftMode: context.multiZoneDraftMode, + dev: context.dev, + internalRevalidate: context.internalRevalidate + }, context.propagateError, context.dev, context.page, context.onError); + } +} +const _default = PagesAPIRouteModule; + +//# sourceMappingURL=module.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/pages/builtin/_error.js b/build/node_modules/next/dist/server/route-modules/pages/builtin/_error.js new file mode 100644 index 0000000..b2d0dcb --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/pages/builtin/_error.js @@ -0,0 +1,100 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + handler: null, + routeModule: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + handler: function() { + return handler; + }, + routeModule: function() { + return routeModule; + } +}); +const _app = /*#__PURE__*/ _interop_require_default(require("../../../../pages/_app")); +const _document = /*#__PURE__*/ _interop_require_default(require("../../../../pages/_document")); +const _routekind = require("../../../route-kind"); +const _error = /*#__PURE__*/ _interop_require_wildcard(require("../../../../pages/_error")); +const _module = /*#__PURE__*/ _interop_require_default(require("../module")); +const _pageshandler = require("../pages-handler"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +const routeModule = new _module.default({ + // TODO: add descriptor for internal error page + definition: { + kind: _routekind.RouteKind.PAGES, + page: '/_error', + pathname: '/_error', + filename: '', + bundlePath: '' + }, + distDir: process.env.__NEXT_RELATIVE_DIST_DIR || '', + relativeProjectDir: process.env.__NEXT_RELATIVE_PROJECT_DIR || '', + components: { + App: _app.default, + Document: _document.default + }, + userland: _error +}); +const handler = (0, _pageshandler.getHandler)({ + srcPage: '/_error', + routeModule, + userland: _error, + config: {}, + isFallbackError: true +}); + +//# sourceMappingURL=_error.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/pages/module.compiled.js b/build/node_modules/next/dist/server/route-modules/pages/module.compiled.js new file mode 100644 index 0000000..351c248 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/pages/module.compiled.js @@ -0,0 +1,20 @@ +"use strict"; +if (process.env.NEXT_RUNTIME === 'edge') { + module.exports = require('next/dist/server/route-modules/pages/module.js'); +} else { + if (process.env.NODE_ENV === 'development') { + if (process.env.TURBOPACK) { + module.exports = require('next/dist/compiled/next-server/pages-turbo.runtime.dev.js'); + } else { + module.exports = require('next/dist/compiled/next-server/pages.runtime.dev.js'); + } + } else { + if (process.env.TURBOPACK) { + module.exports = require('next/dist/compiled/next-server/pages-turbo.runtime.prod.js'); + } else { + module.exports = require('next/dist/compiled/next-server/pages.runtime.prod.js'); + } + } +} + +//# sourceMappingURL=module.compiled.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/pages/module.js b/build/node_modules/next/dist/server/route-modules/pages/module.js new file mode 100644 index 0000000..08da353 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/pages/module.js @@ -0,0 +1,92 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + PagesRouteModule: null, + default: null, + renderToHTML: null, + vendored: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + PagesRouteModule: function() { + return PagesRouteModule; + }, + default: function() { + return _default; + }, + renderToHTML: function() { + return _render.renderToHTML; + }, + vendored: function() { + return vendored; + } +}); +const _routemodule = require("../route-module"); +const _render = require("../../render"); +const _entrypoints = /*#__PURE__*/ _interop_require_wildcard(require("./vendored/contexts/entrypoints")); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +class PagesRouteModule extends _routemodule.RouteModule { + constructor(options){ + super(options); + this.components = options.components; + } + render(req, res, context) { + return (0, _render.renderToHTMLImpl)(req, res, context.page, context.query, context.renderOpts, { + App: this.components.App, + Document: this.components.Document + }, context.sharedContext, context.renderContext); + } +} +const vendored = { + contexts: _entrypoints +}; +const _default = PagesRouteModule; + +//# sourceMappingURL=module.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/pages/module.render.js b/build/node_modules/next/dist/server/route-modules/pages/module.render.js new file mode 100644 index 0000000..360551f --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/pages/module.render.js @@ -0,0 +1,24 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "lazyRenderPagesPage", { + enumerable: true, + get: function() { + return lazyRenderPagesPage; + } +}); +const lazyRenderPagesPage = (...args)=>{ + if (process.env.NEXT_MINIMAL) { + throw Object.defineProperty(new Error("Can't use lazyRenderPagesPage in minimal mode"), "__NEXT_ERROR_CODE", { + value: "E272", + enumerable: false, + configurable: true + }); + } else { + const render = require('./module.compiled').renderToHTML; + return render(...args); + } +}; + +//# sourceMappingURL=module.render.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/pages/pages-handler.js b/build/node_modules/next/dist/server/route-modules/pages/pages-handler.js new file mode 100644 index 0000000..5770ce0 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/pages/pages-handler.js @@ -0,0 +1,545 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getHandler", { + enumerable: true, + get: function() { + return getHandler; + } +}); +const _routekind = require("../../route-kind"); +const _constants = require("../../lib/trace/constants"); +const _tracer = require("../../lib/trace/tracer"); +const _formaturl = require("../../../shared/lib/router/utils/format-url"); +const _requestmeta = require("../../request-meta"); +const _interopdefault = require("../../app-render/interop-default"); +const _utils = require("../../instrumentation/utils"); +const _normalizedatapath = require("../../../shared/lib/page-path/normalize-data-path"); +const _responsecache = require("../../response-cache"); +const _cachecontrol = require("../../lib/cache-control"); +const _utils1 = require("../../../shared/lib/utils"); +const _redirectstatus = require("../../../lib/redirect-status"); +const _constants1 = require("../../../lib/constants"); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _sendpayload = require("../../send-payload"); +const _renderresult = /*#__PURE__*/ _interop_require_default(require("../../render-result")); +const _utils2 = require("../../response-cache/utils"); +const _nofallbackerrorexternal = require("../../../shared/lib/no-fallback-error.external"); +const _redirectstatuscode = require("../../../client/components/redirect-status-code"); +const _isbot = require("../../../shared/lib/router/utils/is-bot"); +const _addpathprefix = require("../../../shared/lib/router/utils/add-path-prefix"); +const _removetrailingslash = require("../../../shared/lib/router/utils/remove-trailing-slash"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const getHandler = ({ srcPage: originalSrcPage, config, userland, routeModule, isFallbackError, getStaticPaths, getStaticProps, getServerSideProps })=>{ + return async function handler(req, res, ctx) { + var _serverFilesManifest_config_experimental, _serverFilesManifest_config; + if (ctx.requestMeta) { + (0, _requestmeta.setRequestMeta)(req, ctx.requestMeta); + } + if (routeModule.isDev) { + (0, _requestmeta.addRequestMeta)(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint()); + } + let srcPage = originalSrcPage; + // turbopack doesn't normalize `/index` in the page name + // so we need to to process dynamic routes properly + // TODO: fix turbopack providing differing value from webpack + if (process.env.TURBOPACK) { + srcPage = srcPage.replace(/\/index$/, '') || '/'; + } else if (srcPage === '/index') { + // we always normalize /index specifically + srcPage = '/'; + } + const multiZoneDraftMode = process.env.__NEXT_MULTI_ZONE_DRAFT_MODE; + const prepareResult = await routeModule.prepare(req, res, { + srcPage, + multiZoneDraftMode + }); + if (!prepareResult) { + res.statusCode = 400; + res.end('Bad Request'); + ctx.waitUntil == null ? void 0 : ctx.waitUntil.call(ctx, Promise.resolve()); + return; + } + const isMinimalMode = Boolean((0, _requestmeta.getRequestMeta)(req, 'minimalMode')); + const render404 = async ()=>{ + // TODO: should route-module itself handle rendering the 404 + if (routerServerContext == null ? void 0 : routerServerContext.render404) { + await routerServerContext.render404(req, res, parsedUrl, false); + } else { + res.end('This page could not be found'); + } + }; + const { buildId, query, params, parsedUrl, originalQuery, originalPathname, buildManifest, fallbackBuildManifest, nextFontManifest, serverFilesManifest, reactLoadableManifest, prerenderManifest, isDraftMode, isOnDemandRevalidate, revalidateOnlyGenerated, locale, locales, defaultLocale, routerServerContext, nextConfig, resolvedPathname, encodedResolvedPathname, deploymentId, clientAssetToken } = prepareResult; + const isExperimentalCompile = serverFilesManifest == null ? void 0 : (_serverFilesManifest_config = serverFilesManifest.config) == null ? void 0 : (_serverFilesManifest_config_experimental = _serverFilesManifest_config.experimental) == null ? void 0 : _serverFilesManifest_config_experimental.isExperimentalCompile; + const hasServerProps = Boolean(getServerSideProps); + const hasStaticProps = Boolean(getStaticProps); + const hasStaticPaths = Boolean(getStaticPaths); + const hasGetInitialProps = Boolean((userland.default || userland).getInitialProps); + let cacheKey = null; + let isIsrFallback = false; + let isNextDataRequest = prepareResult.isNextDataRequest && (hasStaticProps || hasServerProps); + const is404Page = srcPage === '/404'; + const is500Page = srcPage === '/500'; + const isErrorPage = srcPage === '/_error'; + if (!routeModule.isDev && !isDraftMode && hasStaticProps) { + cacheKey = `${locale ? `/${locale}` : ''}${(srcPage === '/' || resolvedPathname === '/') && locale ? '' : resolvedPathname}`; + if (is404Page || is500Page || isErrorPage) { + cacheKey = `${locale ? `/${locale}` : ''}${srcPage}`; + } + // ensure /index and / is normalized to one key + cacheKey = cacheKey === '/index' ? '/' : cacheKey; + } + if (hasStaticPaths && !isDraftMode) { + const decodedPathname = (0, _removetrailingslash.removeTrailingSlash)(locale ? (0, _addpathprefix.addPathPrefix)(resolvedPathname, `/${locale}`) : resolvedPathname); + const isPrerendered = Boolean(prerenderManifest.routes[decodedPathname]) || prerenderManifest.notFoundRoutes.includes(decodedPathname); + const prerenderInfo = prerenderManifest.dynamicRoutes[srcPage]; + if (prerenderInfo) { + if (prerenderInfo.fallback === false && !isPrerendered) { + if (nextConfig.adapterPath) { + return await render404(); + } + throw new _nofallbackerrorexternal.NoFallbackError(); + } + if (typeof prerenderInfo.fallback === 'string' && !isPrerendered && !isNextDataRequest) { + isIsrFallback = true; + } + } + } + // When serving a bot request, we want to serve a blocking render and not + // the prerendered page. This ensures that the correct content is served + // to the bot in the head. + if (isIsrFallback && (0, _isbot.isBot)(req.headers['user-agent'] || '') || isMinimalMode) { + isIsrFallback = false; + } + const tracer = (0, _tracer.getTracer)(); + const activeSpan = tracer.getActiveScopeSpan(); + try { + var _parsedUrl_pathname; + const method = req.method || 'GET'; + const resolvedUrl = (0, _formaturl.formatUrl)({ + pathname: nextConfig.trailingSlash ? `${encodedResolvedPathname}${!encodedResolvedPathname.endsWith('/') && ((_parsedUrl_pathname = parsedUrl.pathname) == null ? void 0 : _parsedUrl_pathname.endsWith('/')) ? '/' : ''}` : (0, _removetrailingslash.removeTrailingSlash)(encodedResolvedPathname || '/'), + // make sure to only add query values from original URL + query: hasStaticProps ? {} : originalQuery + }); + let parentSpan; + const handleResponse = async (span)=>{ + const responseGenerator = async ({ previousCacheEntry })=>{ + var _previousCacheEntry_value; + const doRender = async ()=>{ + try { + var _nextConfig_i18n; + return await routeModule.render(req, res, { + query: hasStaticProps && !isExperimentalCompile ? { + ...params + } : { + ...query, + ...params + }, + params, + page: srcPage, + renderContext: { + isDraftMode, + isFallback: isIsrFallback, + developmentNotFoundSourcePage: (0, _requestmeta.getRequestMeta)(req, 'developmentNotFoundSourcePage') + }, + sharedContext: { + buildId, + customServer: Boolean(routerServerContext == null ? void 0 : routerServerContext.isCustomServer) || undefined, + deploymentId, + clientAssetToken + }, + renderOpts: { + params, + routeModule, + page: srcPage, + pageConfig: config || {}, + Component: (0, _interopdefault.interopDefault)(userland), + ComponentMod: userland, + getStaticProps, + getStaticPaths, + getServerSideProps, + supportsDynamicResponse: !hasStaticProps, + buildManifest: isFallbackError ? fallbackBuildManifest : buildManifest, + nextFontManifest, + reactLoadableManifest, + assetPrefix: nextConfig.assetPrefix, + previewProps: prerenderManifest.preview, + images: nextConfig.images, + nextConfigOutput: nextConfig.output, + optimizeCss: Boolean(nextConfig.experimental.optimizeCss), + nextScriptWorkers: Boolean(nextConfig.experimental.nextScriptWorkers), + domainLocales: (_nextConfig_i18n = nextConfig.i18n) == null ? void 0 : _nextConfig_i18n.domains, + crossOrigin: nextConfig.crossOrigin, + multiZoneDraftMode, + basePath: nextConfig.basePath, + disableOptimizedLoading: nextConfig.experimental.disableOptimizedLoading, + largePageDataBytes: nextConfig.experimental.largePageDataBytes, + isExperimentalCompile, + experimental: { + clientTraceMetadata: nextConfig.experimental.clientTraceMetadata || [] + }, + locale, + locales, + defaultLocale, + setIsrStatus: routerServerContext == null ? void 0 : routerServerContext.setIsrStatus, + isNextDataRequest: isNextDataRequest && (hasServerProps || hasStaticProps), + resolvedUrl, + // For getServerSideProps and getInitialProps we need to ensure we use the original URL + // and not the resolved URL to prevent a hydration mismatch on + // asPath + resolvedAsPath: hasServerProps || hasGetInitialProps ? (0, _formaturl.formatUrl)({ + // we use the original URL pathname less the _next/data prefix if + // present + pathname: isNextDataRequest ? (0, _normalizedatapath.normalizeDataPath)(originalPathname) : originalPathname, + query: originalQuery + }) : resolvedUrl, + isOnDemandRevalidate, + ErrorDebug: (0, _requestmeta.getRequestMeta)(req, 'PagesErrorDebug'), + err: (0, _requestmeta.getRequestMeta)(req, 'invokeError'), + // needed for experimental.optimizeCss feature + distDir: _path.default.join(/* turbopackIgnore: true */ process.cwd(), routeModule.relativeProjectDir, routeModule.distDir) + } + }).then((renderResult)=>{ + const { metadata } = renderResult; + let cacheControl = metadata.cacheControl; + if ('isNotFound' in metadata && metadata.isNotFound) { + return { + value: null, + cacheControl + }; + } + // Handle `isRedirect`. + if (metadata.isRedirect) { + return { + value: { + kind: _responsecache.CachedRouteKind.REDIRECT, + props: metadata.pageData ?? metadata.flightData + }, + cacheControl + }; + } + return { + value: { + kind: _responsecache.CachedRouteKind.PAGES, + html: renderResult, + pageData: renderResult.metadata.pageData, + headers: renderResult.metadata.headers, + status: renderResult.metadata.statusCode + }, + cacheControl + }; + }).finally(()=>{ + if (!span) return; + span.setAttributes({ + 'http.status_code': res.statusCode, + 'next.rsc': false + }); + const rootSpanAttributes = tracer.getRootSpanAttributes(); + // We were unable to get attributes, probably OTEL is not enabled + if (!rootSpanAttributes) { + return; + } + if (rootSpanAttributes.get('next.span_type') !== _constants.BaseServerSpan.handleRequest) { + console.warn(`Unexpected root span type '${rootSpanAttributes.get('next.span_type')}'. Please report this Next.js issue https://github.com/vercel/next.js`); + return; + } + const route = rootSpanAttributes.get('next.route'); + if (route) { + const name = `${method} ${route}`; + span.setAttributes({ + 'next.route': route, + 'http.route': route, + 'next.span_name': name + }); + span.updateName(name); + // Propagate http.route to the parent span if one exists + // (e.g. a platform-created HTTP span in adapter + // deployments). + if (parentSpan && parentSpan !== span) { + parentSpan.setAttribute('http.route', route); + parentSpan.updateName(name); + } + } else { + span.updateName(`${method} ${srcPage}`); + } + }); + } catch (err) { + // if this is a background revalidate we need to report + // the request error here as it won't be bubbled + if (previousCacheEntry == null ? void 0 : previousCacheEntry.isStale) { + const silenceLog = false; + await routeModule.onRequestError(req, err, { + routerKind: 'Pages Router', + routePath: srcPage, + routeType: 'render', + revalidateReason: (0, _utils.getRevalidateReason)({ + isStaticGeneration: hasStaticProps, + isOnDemandRevalidate + }) + }, silenceLog, routerServerContext); + } + throw err; + } + }; + // if we've already generated this page we no longer + // serve the fallback + if (previousCacheEntry) { + isIsrFallback = false; + } + if (isIsrFallback) { + const fallbackResponse = await routeModule.getResponseCache(req).get(routeModule.isDev ? null : locale ? `/${locale}${srcPage}` : srcPage, async ({ previousCacheEntry: previousFallbackCacheEntry = null })=>{ + if (!routeModule.isDev) { + return (0, _utils2.toResponseCacheEntry)(previousFallbackCacheEntry); + } + return doRender(); + }, { + routeKind: _routekind.RouteKind.PAGES, + isFallback: true, + isRoutePPREnabled: false, + isOnDemandRevalidate: false, + incrementalCache: await routeModule.getIncrementalCache(req, nextConfig, prerenderManifest, isMinimalMode), + waitUntil: ctx.waitUntil + }); + if (fallbackResponse) { + // Remove the cache control from the response to prevent it from being + // used in the surrounding cache. + delete fallbackResponse.cacheControl; + fallbackResponse.isMiss = true; + return fallbackResponse; + } + } + if (!isMinimalMode && isOnDemandRevalidate && revalidateOnlyGenerated && !previousCacheEntry) { + res.statusCode = 404; + // on-demand revalidate always sets this header + res.setHeader('x-nextjs-cache', 'REVALIDATED'); + res.end('This page could not be found'); + return null; + } + if (isIsrFallback && (previousCacheEntry == null ? void 0 : (_previousCacheEntry_value = previousCacheEntry.value) == null ? void 0 : _previousCacheEntry_value.kind) === _responsecache.CachedRouteKind.PAGES) { + return { + value: { + kind: _responsecache.CachedRouteKind.PAGES, + html: new _renderresult.default(Buffer.from(previousCacheEntry.value.html), { + contentType: _constants1.HTML_CONTENT_TYPE_HEADER, + metadata: { + statusCode: previousCacheEntry.value.status, + headers: previousCacheEntry.value.headers + } + }), + pageData: {}, + status: previousCacheEntry.value.status, + headers: previousCacheEntry.value.headers + }, + cacheControl: { + revalidate: 0, + expire: undefined + } + }; + } + return doRender(); + }; + const result = await routeModule.handleResponse({ + cacheKey, + req, + nextConfig, + routeKind: _routekind.RouteKind.PAGES, + isOnDemandRevalidate, + revalidateOnlyGenerated, + waitUntil: ctx.waitUntil, + responseGenerator: responseGenerator, + prerenderManifest, + isMinimalMode + }); + // if we got a cache hit this wasn't an ISR fallback + // but it wasn't generated during build so isn't in the + // prerender-manifest + if (isIsrFallback && !(result == null ? void 0 : result.isMiss)) { + isIsrFallback = false; + } + // response is finished is no cache entry + if (!result) { + return; + } + if (hasStaticProps && !isMinimalMode) { + res.setHeader('x-nextjs-cache', isOnDemandRevalidate ? 'REVALIDATED' : result.isMiss ? 'MISS' : result.isStale ? 'STALE' : 'HIT'); + } + let cacheControl; + if (!hasStaticProps || isIsrFallback) { + if (!res.getHeader('Cache-Control')) { + cacheControl = { + revalidate: 0, + expire: undefined + }; + } + } else if (is404Page) { + const notFoundRevalidate = (0, _requestmeta.getRequestMeta)(req, 'notFoundRevalidate'); + cacheControl = { + revalidate: typeof notFoundRevalidate === 'undefined' ? 0 : notFoundRevalidate, + expire: undefined + }; + } else if (is500Page) { + cacheControl = { + revalidate: 0, + expire: undefined + }; + } else if (result.cacheControl) { + // If the cache entry has a cache control with a revalidate value that's + // a number, use it. + if (typeof result.cacheControl.revalidate === 'number') { + var _result_cacheControl; + if (result.cacheControl.revalidate < 1) { + throw Object.defineProperty(new Error(`Invalid revalidate configuration provided: ${result.cacheControl.revalidate} < 1`), "__NEXT_ERROR_CODE", { + value: "E22", + enumerable: false, + configurable: true + }); + } + cacheControl = { + revalidate: result.cacheControl.revalidate, + expire: ((_result_cacheControl = result.cacheControl) == null ? void 0 : _result_cacheControl.expire) ?? nextConfig.expireTime + }; + } else { + // revalidate: false + cacheControl = { + revalidate: _constants1.CACHE_ONE_YEAR_SECONDS, + expire: undefined + }; + } + } + // If cache control is already set on the response we don't + // override it to allow users to customize it via next.config + if (cacheControl && !res.getHeader('Cache-Control')) { + res.setHeader('Cache-Control', (0, _cachecontrol.getCacheControlHeader)(cacheControl)); + } + // notFound: true case + if (!result.value) { + var _result_cacheControl1; + // add revalidate metadata before rendering 404 page + // so that we can use this as source of truth for the + // cache-control header instead of what the 404 page returns + // for the revalidate value + (0, _requestmeta.addRequestMeta)(req, 'notFoundRevalidate', (_result_cacheControl1 = result.cacheControl) == null ? void 0 : _result_cacheControl1.revalidate); + res.statusCode = 404; + if (isNextDataRequest) { + if (deploymentId) { + res.setHeader(_constants1.NEXT_NAV_DEPLOYMENT_ID_HEADER, deploymentId); + } + res.end('{"notFound":true}'); + return; + } + return await render404(); + } + if (result.value.kind === _responsecache.CachedRouteKind.REDIRECT) { + if (isNextDataRequest) { + if (deploymentId) { + res.setHeader(_constants1.NEXT_NAV_DEPLOYMENT_ID_HEADER, deploymentId); + } + res.setHeader('content-type', _constants1.JSON_CONTENT_TYPE_HEADER); + res.end(JSON.stringify(result.value.props)); + return; + } else { + const handleRedirect = (pageData)=>{ + const redirect = { + destination: pageData.pageProps.__N_REDIRECT, + statusCode: pageData.pageProps.__N_REDIRECT_STATUS, + basePath: pageData.pageProps.__N_REDIRECT_BASE_PATH + }; + const statusCode = (0, _redirectstatus.getRedirectStatus)(redirect); + const { basePath } = nextConfig; + if (basePath && redirect.basePath !== false && redirect.destination.startsWith('/')) { + redirect.destination = `${basePath}${redirect.destination}`; + } + if (redirect.destination.startsWith('/')) { + redirect.destination = (0, _utils1.normalizeRepeatedSlashes)(redirect.destination); + } + res.statusCode = statusCode; + res.setHeader('Location', redirect.destination); + if (statusCode === _redirectstatuscode.RedirectStatusCode.PermanentRedirect) { + res.setHeader('Refresh', `0;url=${redirect.destination}`); + } + res.end(redirect.destination); + }; + await handleRedirect(result.value.props); + return null; + } + } + if (result.value.kind !== _responsecache.CachedRouteKind.PAGES) { + throw Object.defineProperty(new Error(`Invariant: received non-pages cache entry in pages handler`), "__NEXT_ERROR_CODE", { + value: "E695", + enumerable: false, + configurable: true + }); + } + // In dev, we should not cache pages for any reason. + if (routeModule.isDev) { + res.setHeader('Cache-Control', 'no-cache, must-revalidate'); + } + // Draft mode should never be cached + if (isDraftMode) { + res.setHeader('Cache-Control', 'private, no-cache, no-store, max-age=0, must-revalidate'); + } + // when invoking _error before pages/500 we don't actually + // send the _error response + if ((0, _requestmeta.getRequestMeta)(req, 'customErrorRender') || isErrorPage && isMinimalMode && res.statusCode === 500) { + return null; + } + // Add deployment ID header for data requests + if (isNextDataRequest && !isErrorPage && !is500Page) { + if (deploymentId) { + res.setHeader(_constants1.NEXT_NAV_DEPLOYMENT_ID_HEADER, deploymentId); + } + } + await (0, _sendpayload.sendRenderResult)({ + req, + res, + // If we are rendering the error page it's not a data request + // anymore + result: isNextDataRequest && !isErrorPage && !is500Page ? new _renderresult.default(Buffer.from(JSON.stringify(result.value.pageData)), { + contentType: _constants1.JSON_CONTENT_TYPE_HEADER, + metadata: result.value.html.metadata + }) : result.value.html, + generateEtags: nextConfig.generateEtags, + poweredByHeader: nextConfig.poweredByHeader, + cacheControl: routeModule.isDev ? undefined : cacheControl + }); + }; + // TODO: activeSpan code path is for when wrapped by + // next-server can be removed when this is no longer used + if (activeSpan) { + await handleResponse(); + } else { + parentSpan = tracer.getActiveScopeSpan(); + await tracer.withPropagatedContext(req.headers, ()=>tracer.trace(_constants.BaseServerSpan.handleRequest, { + spanName: `${method} ${srcPage}`, + kind: _tracer.SpanKind.SERVER, + attributes: { + 'http.method': method, + 'http.target': req.url + } + }, handleResponse)); + } + } catch (err) { + if (!(err instanceof _nofallbackerrorexternal.NoFallbackError)) { + const silenceLog = false; + await routeModule.onRequestError(req, err, { + routerKind: 'Pages Router', + routePath: srcPage, + routeType: 'render', + revalidateReason: (0, _utils.getRevalidateReason)({ + isStaticGeneration: hasStaticProps, + isOnDemandRevalidate + }) + }, silenceLog, routerServerContext); + } + // rethrow so that we can handle serving error page + throw err; + } + }; +}; + +//# sourceMappingURL=pages-handler.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/app-router-context.js b/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/app-router-context.js new file mode 100644 index 0000000..74fa662 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/app-router-context.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['contexts'].AppRouterContext; + +//# sourceMappingURL=app-router-context.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.js b/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.js new file mode 100644 index 0000000..e179453 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.js @@ -0,0 +1,102 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + AppRouterContext: null, + HeadManagerContext: null, + HooksClientContext: null, + HtmlContext: null, + ImageConfigContext: null, + Loadable: null, + LoadableContext: null, + RouterContext: null, + ServerInsertedHtml: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + AppRouterContext: function() { + return _approutercontextsharedruntime; + }, + HeadManagerContext: function() { + return _headmanagercontextsharedruntime; + }, + HooksClientContext: function() { + return _hooksclientcontextsharedruntime; + }, + HtmlContext: function() { + return _htmlcontextsharedruntime; + }, + ImageConfigContext: function() { + return _imageconfigcontextsharedruntime; + }, + Loadable: function() { + return _loadablesharedruntime; + }, + LoadableContext: function() { + return _loadablecontextsharedruntime; + }, + RouterContext: function() { + return _routercontextsharedruntime; + }, + ServerInsertedHtml: function() { + return _serverinsertedhtmlsharedruntime; + } +}); +const _routercontextsharedruntime = /*#__PURE__*/ _interop_require_wildcard(require("../../../../../shared/lib/router-context.shared-runtime")); +const _loadablecontextsharedruntime = /*#__PURE__*/ _interop_require_wildcard(require("../../../../../shared/lib/loadable-context.shared-runtime")); +const _loadablesharedruntime = /*#__PURE__*/ _interop_require_wildcard(require("../../../../../shared/lib/loadable.shared-runtime")); +const _imageconfigcontextsharedruntime = /*#__PURE__*/ _interop_require_wildcard(require("../../../../../shared/lib/image-config-context.shared-runtime")); +const _htmlcontextsharedruntime = /*#__PURE__*/ _interop_require_wildcard(require("../../../../../shared/lib/html-context.shared-runtime")); +const _hooksclientcontextsharedruntime = /*#__PURE__*/ _interop_require_wildcard(require("../../../../../shared/lib/hooks-client-context.shared-runtime")); +const _headmanagercontextsharedruntime = /*#__PURE__*/ _interop_require_wildcard(require("../../../../../shared/lib/head-manager-context.shared-runtime")); +const _approutercontextsharedruntime = /*#__PURE__*/ _interop_require_wildcard(require("../../../../../shared/lib/app-router-context.shared-runtime")); +const _serverinsertedhtmlsharedruntime = /*#__PURE__*/ _interop_require_wildcard(require("../../../../../shared/lib/server-inserted-html.shared-runtime")); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} + +//# sourceMappingURL=entrypoints.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/head-manager-context.js b/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/head-manager-context.js new file mode 100644 index 0000000..161d124 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/head-manager-context.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['contexts'].HeadManagerContext; + +//# sourceMappingURL=head-manager-context.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/hooks-client-context.js b/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/hooks-client-context.js new file mode 100644 index 0000000..8a86415 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/hooks-client-context.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['contexts'].HooksClientContext; + +//# sourceMappingURL=hooks-client-context.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/html-context.js b/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/html-context.js new file mode 100644 index 0000000..358fbd0 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/html-context.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['contexts'].HtmlContext; + +//# sourceMappingURL=html-context.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/image-config-context.js b/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/image-config-context.js new file mode 100644 index 0000000..53255f9 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/image-config-context.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['contexts'].ImageConfigContext; + +//# sourceMappingURL=image-config-context.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/loadable-context.js b/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/loadable-context.js new file mode 100644 index 0000000..38bbdca --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/loadable-context.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['contexts'].LoadableContext; + +//# sourceMappingURL=loadable-context.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/loadable.js b/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/loadable.js new file mode 100644 index 0000000..0f02b18 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/loadable.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['contexts'].Loadable; + +//# sourceMappingURL=loadable.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/router-context.js b/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/router-context.js new file mode 100644 index 0000000..424b2ce --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/router-context.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['contexts'].RouterContext; + +//# sourceMappingURL=router-context.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/server-inserted-html.js b/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/server-inserted-html.js new file mode 100644 index 0000000..ebbbd2d --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/pages/vendored/contexts/server-inserted-html.js @@ -0,0 +1,4 @@ +"use strict"; +module.exports = require('../../module.compiled').vendored['contexts'].ServerInsertedHtml; + +//# sourceMappingURL=server-inserted-html.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/route-modules/route-module.js b/build/node_modules/next/dist/server/route-modules/route-module.js new file mode 100644 index 0000000..a6a70b6 --- /dev/null +++ b/build/node_modules/next/dist/server/route-modules/route-module.js @@ -0,0 +1,660 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "RouteModule", { + enumerable: true, + get: function() { + return RouteModule; + } +}); +require("../../build/adapter/setup-node-env.external"); +const _constants = require("../../shared/lib/constants"); +const _url = require("../../lib/url"); +const _normalizelocalepath = require("../../shared/lib/i18n/normalize-locale-path"); +const _utils = require("../../shared/lib/router/utils"); +const _removepathprefix = require("../../shared/lib/router/utils/remove-path-prefix"); +const _serverutils = require("../server-utils"); +const _detectdomainlocale = require("../../shared/lib/i18n/detect-domain-locale"); +const _gethostname = require("../../shared/lib/get-hostname"); +const _apiutils = require("../api-utils"); +const _normalizedatapath = require("../../shared/lib/page-path/normalize-data-path"); +const _pathhasprefix = require("../../shared/lib/router/utils/path-has-prefix"); +const _requestmeta = require("../request-meta"); +const _patchsetheader = require("../lib/patch-set-header"); +const _normalizepagepath = require("../../shared/lib/page-path/normalize-page-path"); +const _ismetadataroute = require("../../lib/metadata/is-metadata-route"); +const _incrementalcache = require("../lib/incremental-cache"); +const _handlers = require("../use-cache/handlers"); +const _interopdefault = require("../app-render/interop-default"); +const _routekind = require("../route-kind"); +const _responsecache = /*#__PURE__*/ _interop_require_default(require("../response-cache")); +const _apppaths = require("../../shared/lib/router/utils/app-paths"); +const _routerservercontext = require("../lib/router-utils/router-server-context"); +const _decodepathparams = require("../lib/router-utils/decode-path-params"); +const _removetrailingslash = require("../../shared/lib/router/utils/remove-trailing-slash"); +const _isinterceptionrouterewrite = require("../../lib/is-interception-route-rewrite"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const dynamicImportEsmDefault = (id)=>import(/* webpackIgnore: true */ /* turbopackIgnore: true */ id).then((mod)=>mod.default || mod); +class RouteModule { + constructor({ userland, definition, distDir, relativeProjectDir }){ + this.userland = userland; + this.definition = definition; + this.isDev = !!process.env.__NEXT_DEV_SERVER; + this.distDir = distDir; + this.relativeProjectDir = relativeProjectDir; + } + getRouterServerContext(req) { + var _routerServerGlobal_RouterServerContextSymbol; + const hostname = (0, _requestmeta.getRequestMeta)(req, 'hostname'); + const revalidate = (0, _requestmeta.getRequestMeta)(req, 'revalidate'); + const render404 = (0, _requestmeta.getRequestMeta)(req, 'render404'); + const relativeProjectDir = (0, _requestmeta.getRequestMeta)(req, 'relativeProjectDir') || this.relativeProjectDir; + const routerServerContext = (_routerServerGlobal_RouterServerContextSymbol = _routerservercontext.routerServerGlobal[_routerservercontext.RouterServerContextSymbol]) == null ? void 0 : _routerServerGlobal_RouterServerContextSymbol[relativeProjectDir]; + return { + ...routerServerContext, + ...hostname !== undefined ? { + hostname + } : {}, + ...revalidate !== undefined ? { + revalidate + } : {}, + ...render404 !== undefined ? { + render404 + } : {} + }; + } + normalizeUrl(_req, _parsedUrl) {} + async instrumentationOnRequestError(req, ...args) { + if (process.env.NEXT_RUNTIME === 'edge') { + const { getEdgeInstrumentationModule } = await import('../web/globals'); + const instrumentation = await getEdgeInstrumentationModule(); + if (instrumentation) { + await (instrumentation.onRequestError == null ? void 0 : instrumentation.onRequestError.call(instrumentation, ...args)); + } + } else { + const { join } = require('node:path'); + const absoluteProjectDir = join(/* turbopackIgnore: true */ process.cwd(), (0, _requestmeta.getRequestMeta)(req, 'relativeProjectDir') || this.relativeProjectDir); + const { instrumentationOnRequestError } = await import('../lib/router-utils/instrumentation-globals.external.js'); + return instrumentationOnRequestError(absoluteProjectDir, this.distDir, ...args); + } + } + loadManifests(srcPage, projectDir) { + let result; + if (process.env.NEXT_RUNTIME === 'edge') { + var _self___RSC_MANIFEST; + const { getEdgePreviewProps } = require('../web/get-edge-preview-props'); + const maybeJSONParse = (str)=>str ? JSON.parse(str) : undefined; + result = { + buildId: process.env.__NEXT_BUILD_ID || '', + buildManifest: self.__BUILD_MANIFEST, + fallbackBuildManifest: {}, + reactLoadableManifest: maybeJSONParse(self.__REACT_LOADABLE_MANIFEST), + nextFontManifest: maybeJSONParse(self.__NEXT_FONT_MANIFEST), + prerenderManifest: { + routes: {}, + dynamicRoutes: {}, + notFoundRoutes: [], + version: 4, + preview: getEdgePreviewProps() + }, + routesManifest: { + version: 4, + caseSensitive: Boolean(process.env.__NEXT_CASE_SENSITIVE_ROUTES), + basePath: process.env.__NEXT_BASE_PATH || '', + rewrites: process.env.__NEXT_REWRITES || { + beforeFiles: [], + afterFiles: [], + fallback: [] + }, + redirects: [], + headers: [], + onMatchHeaders: [], + i18n: process.env.__NEXT_I18N_CONFIG || undefined, + skipProxyUrlNormalize: Boolean(process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE) + }, + serverFilesManifest: self.__SERVER_FILES_MANIFEST, + clientReferenceManifest: (_self___RSC_MANIFEST = self.__RSC_MANIFEST) == null ? void 0 : _self___RSC_MANIFEST[srcPage], + serverActionsManifest: maybeJSONParse(self.__RSC_SERVER_MANIFEST), + subresourceIntegrityManifest: maybeJSONParse(self.__SUBRESOURCE_INTEGRITY_MANIFEST), + dynamicCssManifest: maybeJSONParse(self.__DYNAMIC_CSS_MANIFEST), + interceptionRoutePatterns: (maybeJSONParse(self.__INTERCEPTION_ROUTE_REWRITE_MANIFEST) ?? []).map((rewrite)=>new RegExp(rewrite.regex)) + }; + } else { + var _clientReferenceManifest___RSC_MANIFEST; + if (!projectDir) { + throw Object.defineProperty(new Error('Invariant: projectDir is required for node runtime'), "__NEXT_ERROR_CODE", { + value: "E718", + enumerable: false, + configurable: true + }); + } + const { loadManifestFromRelativePath } = require('../load-manifest.external'); + const normalizedPagePath = (0, _normalizepagepath.normalizePagePath)(srcPage); + const router = this.definition.kind === _routekind.RouteKind.PAGES || this.definition.kind === _routekind.RouteKind.PAGES_API ? 'pages' : 'app'; + const [routesManifest, prerenderManifest, buildManifest, fallbackBuildManifest, reactLoadableManifest, nextFontManifest, clientReferenceManifest, serverActionsManifest, subresourceIntegrityManifest, serverFilesManifest, buildId, dynamicCssManifest] = [ + loadManifestFromRelativePath({ + projectDir, + distDir: this.distDir, + manifest: _constants.ROUTES_MANIFEST, + shouldCache: !this.isDev + }), + loadManifestFromRelativePath({ + projectDir, + distDir: this.distDir, + manifest: _constants.PRERENDER_MANIFEST, + shouldCache: !this.isDev + }), + loadManifestFromRelativePath({ + projectDir, + distDir: this.distDir, + manifest: _constants.BUILD_MANIFEST, + shouldCache: !this.isDev + }), + srcPage === '/_error' ? loadManifestFromRelativePath({ + projectDir, + distDir: this.distDir, + manifest: `fallback-${_constants.BUILD_MANIFEST}`, + shouldCache: !this.isDev, + handleMissing: true + }) : {}, + loadManifestFromRelativePath({ + projectDir, + distDir: this.distDir, + manifest: process.env.TURBOPACK ? `server/${router === 'app' ? 'app' : 'pages'}${normalizedPagePath}/${_constants.REACT_LOADABLE_MANIFEST}` : _constants.REACT_LOADABLE_MANIFEST, + handleMissing: true, + shouldCache: !this.isDev + }), + loadManifestFromRelativePath({ + projectDir, + distDir: this.distDir, + manifest: `server/${_constants.NEXT_FONT_MANIFEST}.json`, + shouldCache: !this.isDev + }), + router === 'app' && !(0, _ismetadataroute.isStaticMetadataRoute)(srcPage) ? loadManifestFromRelativePath({ + distDir: this.distDir, + projectDir, + useEval: true, + handleMissing: true, + manifest: `server/app${srcPage.replace(/%5F/g, '_') + '_' + _constants.CLIENT_REFERENCE_MANIFEST}.js`, + shouldCache: !this.isDev + }) : undefined, + router === 'app' ? loadManifestFromRelativePath({ + distDir: this.distDir, + projectDir, + manifest: `server/${_constants.SERVER_REFERENCE_MANIFEST}.json`, + handleMissing: true, + shouldCache: !this.isDev + }) : {}, + loadManifestFromRelativePath({ + projectDir, + distDir: this.distDir, + manifest: `server/${_constants.SUBRESOURCE_INTEGRITY_MANIFEST}.json`, + handleMissing: true, + shouldCache: !this.isDev + }), + this.isDev ? undefined : loadManifestFromRelativePath({ + projectDir, + distDir: this.distDir, + shouldCache: true, + manifest: `${_constants.SERVER_FILES_MANIFEST}.json` + }), + this.isDev ? 'development' : loadManifestFromRelativePath({ + projectDir, + distDir: this.distDir, + manifest: _constants.BUILD_ID_FILE, + skipParse: true, + shouldCache: true + }), + loadManifestFromRelativePath({ + projectDir, + distDir: this.distDir, + manifest: _constants.DYNAMIC_CSS_MANIFEST, + shouldCache: !this.isDev, + handleMissing: true + }) + ]; + result = { + buildId, + buildManifest, + fallbackBuildManifest, + routesManifest, + nextFontManifest, + prerenderManifest, + serverFilesManifest, + reactLoadableManifest, + clientReferenceManifest: clientReferenceManifest == null ? void 0 : (_clientReferenceManifest___RSC_MANIFEST = clientReferenceManifest.__RSC_MANIFEST) == null ? void 0 : _clientReferenceManifest___RSC_MANIFEST[srcPage.replace(/%5F/g, '_')], + serverActionsManifest, + subresourceIntegrityManifest, + dynamicCssManifest, + interceptionRoutePatterns: routesManifest.rewrites.beforeFiles.filter(_isinterceptionrouterewrite.isInterceptionRouteRewrite).map((rewrite)=>new RegExp(rewrite.regex)) + }; + } + return result; + } + async loadCustomCacheHandlers(req, nextConfig) { + if (process.env.NEXT_RUNTIME !== 'edge') { + const { cacheMaxMemorySize, cacheHandlers } = nextConfig; + if (!cacheHandlers) return; + // If we've already initialized the cache handlers interface, don't do it + // again. + if (!(0, _handlers.initializeCacheHandlers)(cacheMaxMemorySize)) return; + for (const [kind, handler] of Object.entries(cacheHandlers)){ + if (!handler) continue; + const { formatDynamicImportPath } = require('../../lib/format-dynamic-import-path'); + const { join } = require('node:path'); + const absoluteProjectDir = join(/* turbopackIgnore: true */ process.cwd(), (0, _requestmeta.getRequestMeta)(req, 'relativeProjectDir') || this.relativeProjectDir); + (0, _handlers.setCacheHandler)(kind, (0, _interopdefault.interopDefault)(await dynamicImportEsmDefault(formatDynamicImportPath(`${absoluteProjectDir}/${this.distDir}`, handler)))); + } + } + } + async getIncrementalCache(req, nextConfig, prerenderManifest, isMinimalMode) { + if (process.env.NEXT_RUNTIME === 'edge') { + return globalThis.__incrementalCache; + } else { + let CacheHandler; + const { cacheHandler } = nextConfig; + if (cacheHandler) { + const { formatDynamicImportPath } = require('../../lib/format-dynamic-import-path'); + CacheHandler = (0, _interopdefault.interopDefault)(await dynamicImportEsmDefault(formatDynamicImportPath(this.distDir, cacheHandler))); + } + const { join } = require('node:path'); + const projectDir = join(/* turbopackIgnore: true */ process.cwd(), (0, _requestmeta.getRequestMeta)(req, 'relativeProjectDir') || this.relativeProjectDir); + await this.loadCustomCacheHandlers(req, nextConfig); + // incremental-cache is request specific + // although can have shared caches in module scope + // per-cache handler + const incrementalCache = new _incrementalcache.IncrementalCache({ + fs: require('../lib/node-fs-methods').nodeFs, + dev: this.isDev, + requestHeaders: req.headers, + allowedRevalidateHeaderKeys: nextConfig.experimental.allowedRevalidateHeaderKeys, + minimalMode: isMinimalMode, + serverDistDir: `${projectDir}/${this.distDir}/server`, + fetchCacheKeyPrefix: nextConfig.experimental.fetchCacheKeyPrefix, + maxMemoryCacheSize: nextConfig.cacheMaxMemorySize, + flushToDisk: !isMinimalMode && nextConfig.experimental.isrFlushToDisk, + getPrerenderManifest: ()=>prerenderManifest, + CurCacheHandler: CacheHandler + }); + globalThis.__incrementalCache = incrementalCache; + return incrementalCache; + } + } + async onRequestError(req, err, errorContext, silenceLog, routerServerContext) { + if (!silenceLog) { + if (routerServerContext == null ? void 0 : routerServerContext.logErrorWithOriginalStack) { + routerServerContext.logErrorWithOriginalStack(err, 'app-dir'); + } else { + console.error(err); + } + } + await this.instrumentationOnRequestError(req, err, { + path: req.url || '/', + headers: req.headers, + method: req.method || 'GET' + }, errorContext); + } + /** A more lightweight version of `prepare()` for only retrieving the config on edge */ getNextConfigEdge(req) { + var _nextConfig_experimental; + if (process.env.NEXT_RUNTIME !== 'edge') { + throw Object.defineProperty(new Error('Invariant: getNextConfigEdge must only be called in edge runtime'), "__NEXT_ERROR_CODE", { + value: "E968", + enumerable: false, + configurable: true + }); + } + let serverFilesManifest = self.__SERVER_FILES_MANIFEST; + const routerServerContext = this.getRouterServerContext(req); + const nextConfig = (routerServerContext == null ? void 0 : routerServerContext.nextConfig) || (serverFilesManifest == null ? void 0 : serverFilesManifest.config); + if (!nextConfig) { + throw Object.defineProperty(new Error("Invariant: nextConfig couldn't be loaded"), "__NEXT_ERROR_CODE", { + value: "E969", + enumerable: false, + configurable: true + }); + } + let deploymentId; + if ((_nextConfig_experimental = nextConfig.experimental) == null ? void 0 : _nextConfig_experimental.runtimeServerDeploymentId) { + if (!process.env.NEXT_DEPLOYMENT_ID) { + throw Object.defineProperty(new Error('process.env.NEXT_DEPLOYMENT_ID is missing but runtimeServerDeploymentId is enabled'), "__NEXT_ERROR_CODE", { + value: "E970", + enumerable: false, + configurable: true + }); + } + deploymentId = process.env.NEXT_DEPLOYMENT_ID; + } else { + deploymentId = nextConfig.deploymentId || ''; + } + return { + nextConfig, + deploymentId + }; + } + async prepare(req, res, { srcPage, multiZoneDraftMode }) { + var _req_headers_xforwardedproto, _nextConfig_experimental; + let absoluteProjectDir; + // edge runtime handles loading instrumentation at the edge adapter level + if (process.env.NEXT_RUNTIME !== 'edge') { + if (res) { + (0, _patchsetheader.patchSetHeaderWithCookieSupport)(req, res); + } + const { join, relative } = require('node:path'); + absoluteProjectDir = join(/* turbopackIgnore: true */ process.cwd(), (0, _requestmeta.getRequestMeta)(req, 'relativeProjectDir') || this.relativeProjectDir); + const absoluteDistDir = (0, _requestmeta.getRequestMeta)(req, 'distDir'); + if (absoluteDistDir) { + this.distDir = relative(absoluteProjectDir, absoluteDistDir); + } + const { ensureInstrumentationRegistered } = await import('../lib/router-utils/instrumentation-globals.external.js'); + // ensure instrumentation is registered and pass + // onRequestError below + ensureInstrumentationRegistered(absoluteProjectDir, this.distDir); + } + const manifests = this.loadManifests(srcPage, absoluteProjectDir); + const { routesManifest, prerenderManifest, serverFilesManifest } = manifests; + const { basePath, i18n, rewrites } = routesManifest; + const routerServerContext = this.getRouterServerContext(req); + const nextConfig = (routerServerContext == null ? void 0 : routerServerContext.nextConfig) || (serverFilesManifest == null ? void 0 : serverFilesManifest.config); + // Injected in base-server.ts + const protocol = ((_req_headers_xforwardedproto = req.headers['x-forwarded-proto']) == null ? void 0 : _req_headers_xforwardedproto.includes('https')) ? 'https' : 'http'; + // When there are hostname and port we build an absolute URL + if (!(0, _requestmeta.getRequestMeta)(req, 'initURL')) { + const initUrl = (serverFilesManifest == null ? void 0 : serverFilesManifest.config.experimental.trustHostHeader) ? `${protocol}://${req.headers.host || 'localhost'}${req.url}` : `${protocol}://${(routerServerContext == null ? void 0 : routerServerContext.hostname) || 'localhost'}${req.url}`; + (0, _requestmeta.addRequestMeta)(req, 'initURL', initUrl); + (0, _requestmeta.addRequestMeta)(req, 'initProtocol', protocol); + } + if (basePath) { + req.url = (0, _removepathprefix.removePathPrefix)(req.url || '/', basePath); + } + const parsedUrl = (0, _url.parseReqUrl)(req.url || '/'); + (0, _requestmeta.addRequestMeta)(req, 'initQuery', { + ...parsedUrl == null ? void 0 : parsedUrl.query + }); + // if we couldn't parse the URL we can't continue + if (!parsedUrl) { + return; + } + let isNextDataRequest = false; + if ((0, _pathhasprefix.pathHasPrefix)(parsedUrl.pathname || '/', '/_next/data')) { + isNextDataRequest = true; + parsedUrl.pathname = (0, _normalizedatapath.normalizeDataPath)(parsedUrl.pathname || '/'); + } + this.normalizeUrl(req, parsedUrl); + let originalPathname = parsedUrl.pathname || '/'; + const originalQuery = { + ...parsedUrl.query + }; + const pageIsDynamic = (0, _utils.isDynamicRoute)(srcPage); + let localeResult; + let detectedLocale; + if (i18n) { + localeResult = (0, _normalizelocalepath.normalizeLocalePath)(parsedUrl.pathname || '/', i18n.locales); + if (localeResult.detectedLocale) { + req.url = `${localeResult.pathname}${parsedUrl.search}`; + originalPathname = localeResult.pathname; + if (!detectedLocale) { + detectedLocale = localeResult.detectedLocale; + } + } + } + // Normalize the page path for route matching. The srcPage contains the + // internal page path (e.g., /app/[slug]/page), but route matchers expect + // the pathname format (e.g., /app/[slug]). + const normalizedSrcPage = (0, _apppaths.normalizeAppPath)(srcPage); + const serverUtils = (0, _serverutils.getServerUtils)({ + page: normalizedSrcPage, + i18n, + basePath, + rewrites, + pageIsDynamic, + trailingSlash: process.env.__NEXT_TRAILING_SLASH, + caseSensitive: Boolean(routesManifest.caseSensitive) + }); + const domainLocale = (0, _detectdomainlocale.detectDomainLocale)(i18n == null ? void 0 : i18n.domains, (0, _gethostname.getHostname)(parsedUrl, req.headers), detectedLocale); + if (Boolean(domainLocale)) { + (0, _requestmeta.addRequestMeta)(req, 'isLocaleDomain', Boolean(domainLocale)); + } + const defaultLocale = (0, _requestmeta.getRequestMeta)(req, 'defaultLocale') || (domainLocale == null ? void 0 : domainLocale.defaultLocale) || (i18n == null ? void 0 : i18n.defaultLocale); + // Ensure parsedUrl.pathname includes locale before processing + // rewrites or they won't match correctly. + if (defaultLocale && !detectedLocale) { + parsedUrl.pathname = `/${defaultLocale}${parsedUrl.pathname === '/' ? '' : parsedUrl.pathname}`; + } + const locale = (0, _requestmeta.getRequestMeta)(req, 'locale') || detectedLocale || defaultLocale; + // we apply rewrites against cloned URL so that we don't + // modify the original with the rewrite destination + const { rewriteParams, rewrittenParsedUrl } = serverUtils.handleRewrites(req, parsedUrl); + const rewriteParamKeys = Object.keys(rewriteParams); + Object.assign(parsedUrl.query, rewrittenParsedUrl.query); + // after processing rewrites we want to remove locale + // from parsedUrl pathname + if (i18n) { + parsedUrl.pathname = (0, _normalizelocalepath.normalizeLocalePath)(parsedUrl.pathname || '/', i18n.locales).pathname; + rewrittenParsedUrl.pathname = (0, _normalizelocalepath.normalizeLocalePath)(rewrittenParsedUrl.pathname || '/', i18n.locales).pathname; + } + let params = (0, _requestmeta.getRequestMeta)(req, 'params'); + // attempt parsing from pathname + if (!params && serverUtils.dynamicRouteMatcher) { + const paramsMatch = serverUtils.dynamicRouteMatcher((0, _normalizedatapath.normalizeDataPath)((rewrittenParsedUrl == null ? void 0 : rewrittenParsedUrl.pathname) || parsedUrl.pathname || '/')); + const paramsResult = serverUtils.normalizeDynamicRouteParams(paramsMatch || {}, true); + if (paramsResult.hasValidParams) { + params = paramsResult.params; + } + } + // Local "next start" expects the routing parsed query values + // to not be present in the URL although when deployed proxies + // will add query values from resolving the routes to pass to function. + // TODO: do we want to change expectations for "next start" + // to include these query values in the URL which affects asPath + // but would match deployed behavior, e.g. a rewrite from middleware + // that adds a query param would be in asPath as query but locally + // it won't be in the asPath but still available in the query object + const query = (0, _requestmeta.getRequestMeta)(req, 'query') || { + ...parsedUrl.query + }; + const routeParamKeys = new Set(); + const combinedParamKeys = []; + // We don't include rewriteParamKeys in the combinedParamKeys + // for app router since the searchParams is populated from the + // URL so we don't want to strip the rewrite params from the URL + // so that searchParams can include them. + if (this.definition.kind === _routekind.RouteKind.PAGES || this.definition.kind === _routekind.RouteKind.PAGES_API) { + for (const key of [ + ...rewriteParamKeys, + ...Object.keys(serverUtils.defaultRouteMatches || {}) + ]){ + // We only want to filter rewrite param keys from the URL + // if they are matches from the URL e.g. the key/value matches + // before and after applying the rewrites /:path for /hello and + // { path: 'hello' } but not for { path: 'another' } and /hello + // TODO: we should prefix rewrite param keys the same as we do + // for dynamic routes so we can identify them properly + const originalValue = Array.isArray(originalQuery[key]) ? originalQuery[key].join('') : originalQuery[key]; + const queryValue = Array.isArray(query[key]) ? query[key].join('') : query[key]; + if (!(key in originalQuery) || originalValue === queryValue) { + combinedParamKeys.push(key); + } + } + } + serverUtils.normalizeCdnUrl(req, combinedParamKeys); + // When Next is not hosted in a single process, upstream proxies will add query values for route params that were used to match the route. + // Outside of that environment, there is no reason to do any normalization to honor those query values. + if (!(routerServerContext == null ? void 0 : routerServerContext.isWrappedByNextServer)) { + serverUtils.normalizeQueryParams(query, routeParamKeys); + } else { + serverUtils.filterInternalQuery(query, []); + } + serverUtils.filterInternalQuery(originalQuery, combinedParamKeys); + if (pageIsDynamic) { + const queryResult = serverUtils.normalizeDynamicRouteParams(query, true); + const paramsResult = serverUtils.normalizeDynamicRouteParams(params || {}, true); + let paramsToInterpolate; + if (// if both query and params are valid but one + // provided more information and the query params + // were nxtP prefixed rely on that one + query && params && paramsResult.hasValidParams && queryResult.hasValidParams && routeParamKeys.size > 0 && Object.keys(paramsResult.params).length <= Object.keys(queryResult.params).length) { + paramsToInterpolate = queryResult.params; + params = Object.assign(queryResult.params); + } else { + paramsToInterpolate = paramsResult.hasValidParams && params ? params : queryResult.hasValidParams ? query : {}; + } + req.url = serverUtils.interpolateDynamicPath(req.url || '/', paramsToInterpolate); + parsedUrl.pathname = serverUtils.interpolateDynamicPath(parsedUrl.pathname || '/', paramsToInterpolate); + originalPathname = serverUtils.interpolateDynamicPath(originalPathname, paramsToInterpolate); + // try pulling from query if valid + if (!params) { + if (queryResult.hasValidParams) { + params = Object.assign({}, queryResult.params); + // If we pulled from query remove it so it's + // only in params + for(const key in serverUtils.defaultRouteMatches){ + delete query[key]; + } + } else { + // use final params from URL matching + const paramsMatch = serverUtils.dynamicRouteMatcher == null ? void 0 : serverUtils.dynamicRouteMatcher.call(serverUtils, (0, _normalizedatapath.normalizeDataPath)((localeResult == null ? void 0 : localeResult.pathname) || parsedUrl.pathname || '/')); + // we don't normalize these as they are allowed to be + // the literal slug matches here e.g. /blog/[slug] + // actually being requested + if (paramsMatch) { + params = Object.assign({}, paramsMatch); + } + } + } + } + // Remove any normalized params from the query if they + // weren't present as non-prefixed query key e.g. + // ?search=1&nxtPsearch=hello we don't delete search + for (const key of routeParamKeys){ + if (!(key in originalQuery)) { + delete query[key]; + // handle the case where there's collision and we + // normalized nxtPid=123 -> id=123 but user also + // sends id=456 as separate key + } else if (originalQuery[key] && query[key] && originalQuery[key] !== query[key]) { + query[key] = originalQuery[key]; + } + } + const { isOnDemandRevalidate, revalidateOnlyGenerated } = (0, _apiutils.checkIsOnDemandRevalidate)(req, prerenderManifest.preview); + let isDraftMode = false; + let previewData; + // preview data relies on non-edge utils + if (process.env.NEXT_RUNTIME !== 'edge' && res) { + const { tryGetPreviewData } = require('../api-utils/node/try-get-preview-data'); + previewData = tryGetPreviewData(req, res, prerenderManifest.preview, Boolean(multiZoneDraftMode)); + isDraftMode = previewData !== false; + } + if (!nextConfig) { + throw Object.defineProperty(new Error("Invariant: nextConfig couldn't be loaded"), "__NEXT_ERROR_CODE", { + value: "E969", + enumerable: false, + configurable: true + }); + } + if (process.env.NEXT_RUNTIME !== 'edge') { + const { installProcessErrorHandlers } = require('../node-environment-extensions/process-error-handlers'); + installProcessErrorHandlers(Boolean(nextConfig.experimental.removeUncaughtErrorAndRejectionListeners)); + } + let resolvedPathname = normalizedSrcPage; + if ((0, _utils.isDynamicRoute)(resolvedPathname) && params) { + resolvedPathname = serverUtils.interpolateDynamicPath(resolvedPathname, params); + } + if (resolvedPathname === '/index') { + resolvedPathname = '/'; + } + if (res && Boolean(req.headers['x-nextjs-data']) && (!res.statusCode || res.statusCode === 200)) { + res.setHeader('x-nextjs-matched-path', (0, _removetrailingslash.removeTrailingSlash)(`${locale ? `/${locale}` : ''}${normalizedSrcPage}`)); + } + const encodedResolvedPathname = resolvedPathname; + // we decode for cache key/manifest usage encoded is + // for URL building + try { + resolvedPathname = (0, _decodepathparams.decodePathParams)(resolvedPathname); + } catch (_) {} + resolvedPathname = (0, _removetrailingslash.removeTrailingSlash)(resolvedPathname); + (0, _requestmeta.addRequestMeta)(req, 'resolvedPathname', resolvedPathname); + let deploymentId; + if ((_nextConfig_experimental = nextConfig.experimental) == null ? void 0 : _nextConfig_experimental.runtimeServerDeploymentId) { + if (!process.env.NEXT_DEPLOYMENT_ID) { + throw Object.defineProperty(new Error('process.env.NEXT_DEPLOYMENT_ID is missing but runtimeServerDeploymentId is enabled'), "__NEXT_ERROR_CODE", { + value: "E970", + enumerable: false, + configurable: true + }); + } + deploymentId = process.env.NEXT_DEPLOYMENT_ID; + } else { + deploymentId = nextConfig.deploymentId || ''; + } + return { + query, + originalQuery, + originalPathname, + params, + parsedUrl, + locale, + isNextDataRequest, + locales: i18n == null ? void 0 : i18n.locales, + defaultLocale, + isDraftMode, + previewData, + pageIsDynamic, + resolvedPathname, + encodedResolvedPathname, + isOnDemandRevalidate, + revalidateOnlyGenerated, + ...manifests, + // loadManifest returns a readonly object, but we don't want to propagate that throughout the + // whole codebase (for now) + nextConfig: nextConfig, + routerServerContext, + deploymentId, + clientAssetToken: nextConfig.experimental.immutableAssetToken || deploymentId + }; + } + getResponseCache(req) { + if (!this.responseCache) { + const minimalMode = (0, _requestmeta.getRequestMeta)(req, 'minimalMode') ?? false; + this.responseCache = new _responsecache.default(minimalMode); + } + return this.responseCache; + } + async handleResponse({ req, nextConfig, cacheKey, routeKind, isFallback, prerenderManifest, isRoutePPREnabled, isOnDemandRevalidate, revalidateOnlyGenerated, responseGenerator, waitUntil, isMinimalMode }) { + const responseCache = this.getResponseCache(req); + const cacheEntry = await responseCache.get(cacheKey, responseGenerator, { + routeKind, + isFallback, + isRoutePPREnabled, + isOnDemandRevalidate, + isPrefetch: req.headers.purpose === 'prefetch', + // Use x-invocation-id header to scope the in-memory cache to a single + // revalidation request in minimal mode. + invocationID: req.headers['x-invocation-id'], + incrementalCache: await this.getIncrementalCache(req, nextConfig, prerenderManifest, isMinimalMode), + waitUntil + }); + if (!cacheEntry) { + if (cacheKey && // revalidate only generated can bail even if cacheKey is provided + !(isOnDemandRevalidate && revalidateOnlyGenerated)) { + // A cache entry might not be generated if a response is written + // in `getInitialProps` or `getServerSideProps`, but those shouldn't + // have a cache key. If we do have a cache key but we don't end up + // with a cache entry, then either Next.js or the application has a + // bug that needs fixing. + throw Object.defineProperty(new Error('invariant: cache entry required but not generated'), "__NEXT_ERROR_CODE", { + value: "E62", + enumerable: false, + configurable: true + }); + } + } + return cacheEntry; + } +} + +//# sourceMappingURL=route-module.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/runtime-reacts.external.js b/build/node_modules/next/dist/server/runtime-reacts.external.js new file mode 100644 index 0000000..6e99319 --- /dev/null +++ b/build/node_modules/next/dist/server/runtime-reacts.external.js @@ -0,0 +1,46 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getClientReact: null, + getServerReact: null, + registerClientReact: null, + registerServerReact: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getClientReact: function() { + return getClientReact; + }, + getServerReact: function() { + return getServerReact; + }, + registerClientReact: function() { + return registerClientReact; + }, + registerServerReact: function() { + return registerServerReact; + } +}); +let ClientReact = null; +function registerClientReact(react) { + ClientReact = react; +} +function getClientReact() { + return ClientReact; +} +let ServerReact = null; +function registerServerReact(react) { + ServerReact = react; +} +function getServerReact() { + return ServerReact; +} + +//# sourceMappingURL=runtime-reacts.external.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/send-payload.js b/build/node_modules/next/dist/server/send-payload.js new file mode 100644 index 0000000..dc844c8 --- /dev/null +++ b/build/node_modules/next/dist/server/send-payload.js @@ -0,0 +1,88 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + sendEtagResponse: null, + sendRenderResult: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + sendEtagResponse: function() { + return sendEtagResponse; + }, + sendRenderResult: function() { + return sendRenderResult; + } +}); +const _utils = require("../shared/lib/utils"); +const _etag = require("./lib/etag"); +const _fresh = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/fresh")); +const _cachecontrol = require("./lib/cache-control"); +const _constants = require("../lib/constants"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function sendEtagResponse(req, res, etag) { + if (etag) { + /** + * The server generating a 304 response MUST generate any of the + * following header fields that would have been sent in a 200 (OK) + * response to the same request: Cache-Control, Content-Location, Date, + * ETag, Expires, and Vary. https://tools.ietf.org/html/rfc7232#section-4.1 + */ res.setHeader('ETag', etag); + } + if ((0, _fresh.default)(req.headers, { + etag + })) { + res.statusCode = 304; + res.end(); + return true; + } + return false; +} +async function sendRenderResult({ req, res, result, generateEtags, poweredByHeader, cacheControl }) { + if ((0, _utils.isResSent)(res)) { + return; + } + if (poweredByHeader && result.contentType === _constants.HTML_CONTENT_TYPE_HEADER) { + res.setHeader('X-Powered-By', 'Next.js'); + } + // If cache control is already set on the response we don't + // override it to allow users to customize it via next.config + if (cacheControl && !res.getHeader('Cache-Control')) { + res.setHeader('Cache-Control', (0, _cachecontrol.getCacheControlHeader)(cacheControl)); + } + const payload = result.isDynamic ? null : result.toUnchunkedString(); + if (generateEtags && payload !== null) { + const etag = (0, _etag.generateETag)(payload); + if (sendEtagResponse(req, res, etag)) { + return; + } + } + if (!res.getHeader('Content-Type') && result.contentType) { + res.setHeader('Content-Type', result.contentType); + } + if (payload) { + res.setHeader('Content-Length', Buffer.byteLength(payload)); + } + if (req.method === 'HEAD') { + res.end(null); + return; + } + if (payload !== null) { + res.end(payload); + return; + } + // Pipe the render result to the response after we get a writer for it. + await result.pipeToNodeResponse(res); +} + +//# sourceMappingURL=send-payload.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/send-response.js b/build/node_modules/next/dist/server/send-response.js new file mode 100644 index 0000000..ad737fa --- /dev/null +++ b/build/node_modules/next/dist/server/send-response.js @@ -0,0 +1,70 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "sendResponse", { + enumerable: true, + get: function() { + return sendResponse; + } +}); +const _helpers = require("./base-http/helpers"); +const _pipereadable = require("./pipe-readable"); +const _utils = require("./web/utils"); +async function sendResponse(req, res, response, waitUntil) { + if (// The type check here ensures that `req` is correctly typed, and the + // environment variable check provides dead code elimination. + process.env.NEXT_RUNTIME !== 'edge' && (0, _helpers.isNodeNextResponse)(res)) { + var // Copy over the response headers. + _response_headers; + // Copy over the response status. + res.statusCode = response.status; + res.statusMessage = response.statusText; + // TODO: this is not spec-compliant behavior and we should not restrict + // headers that are allowed to appear many times. + // + // See: + // https://github.com/vercel/next.js/pull/70127 + const headersWithMultipleValuesAllowed = [ + // can add more headers to this list if needed + 'set-cookie', + 'www-authenticate', + 'proxy-authenticate', + 'vary' + ]; + (_response_headers = response.headers) == null ? void 0 : _response_headers.forEach((value, name)=>{ + // `x-middleware-set-cookie` is an internal header not needed for the response + if (name.toLowerCase() === 'x-middleware-set-cookie') { + return; + } + // The append handling is special cased for `set-cookie`. + if (name.toLowerCase() === 'set-cookie') { + // TODO: (wyattjoh) replace with native response iteration when we can upgrade undici + for (const cookie of (0, _utils.splitCookiesString)(value)){ + res.appendHeader(name, cookie); + } + } else { + // only append the header if it is either not present in the outbound response + // or if the header supports multiple values + const isHeaderPresent = typeof res.getHeader(name) !== 'undefined'; + if (headersWithMultipleValuesAllowed.includes(name.toLowerCase()) || !isHeaderPresent) { + res.appendHeader(name, value); + } + } + }); + /** + * The response can't be directly piped to the underlying response. The + * following is duplicated from the edge runtime handler. + * + * See packages/next/server/next-server.ts + */ const { originalResponse } = res; + // A response body must not be sent for HEAD requests. See https://httpwg.org/specs/rfc9110.html#HEAD + if (response.body && req.method !== 'HEAD') { + await (0, _pipereadable.pipeToNodeResponse)(response.body, originalResponse, waitUntil); + } else { + originalResponse.end(); + } + } +} + +//# sourceMappingURL=send-response.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/serve-static.js b/build/node_modules/next/dist/server/serve-static.js new file mode 100644 index 0000000..198a2c9 --- /dev/null +++ b/build/node_modules/next/dist/server/serve-static.js @@ -0,0 +1,66 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getContentType: null, + getExtension: null, + serveStatic: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getContentType: function() { + return getContentType; + }, + getExtension: function() { + return getExtension; + }, + serveStatic: function() { + return serveStatic; + } +}); +const _send = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/send")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +// TODO: Remove this once "send" has updated the "mime", or next.js use custom version of "mime" +// Although "mime" has already add avif in version 2.4.7, "send" is still using mime@1.6.0 +_send.default.mime.define({ + 'image/avif': [ + 'avif' + ], + 'image/x-icns': [ + 'icns' + ], + 'image/jxl': [ + 'jxl' + ], + 'image/heic': [ + 'heic' + ] +}); +function serveStatic(req, res, path, opts) { + return new Promise((resolve, reject)=>{ + (0, _send.default)(req, path, opts).on('directory', ()=>{ + // We don't allow directories to be read. + const err = Object.defineProperty(new Error('No directory access'), "__NEXT_ERROR_CODE", { + value: "E340", + enumerable: false, + configurable: true + }); + err.code = 'ENOENT'; + reject(err); + }).on('error', reject).pipe(res).on('finish', resolve); + }); +} +const getContentType = 'getType' in _send.default.mime ? (extWithoutDot)=>_send.default.mime.getType(extWithoutDot) : (extWithoutDot)=>_send.default.mime.lookup(extWithoutDot); +const getExtension = 'getExtension' in _send.default.mime ? (contentType)=>_send.default.mime.getExtension(contentType) : (contentType)=>_send.default.mime.extension(contentType); + +//# sourceMappingURL=serve-static.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/server-route-utils.js b/build/node_modules/next/dist/server/server-route-utils.js new file mode 100644 index 0000000..b1a2a2b --- /dev/null +++ b/build/node_modules/next/dist/server/server-route-utils.js @@ -0,0 +1,30 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "stringifyQuery", { + enumerable: true, + get: function() { + return stringifyQuery; + } +}); +const _requestmeta = require("./request-meta"); +const _querystring = require("querystring"); +const stringifyQuery = (req, query)=>{ + const initialQuery = (0, _requestmeta.getRequestMeta)(req, 'initQuery') || {}; + const initialQueryValues = Object.values(initialQuery); + return (0, _querystring.stringify)(query, undefined, undefined, { + encodeURIComponent (value) { + if (value in initialQuery || initialQueryValues.some((initialQueryVal)=>{ + // `value` always refers to a query value, even if it's nested in an array + return Array.isArray(initialQueryVal) ? initialQueryVal.includes(value) : initialQueryVal === value; + })) { + // Encode keys and values from initial query + return encodeURIComponent(value); + } + return value; + } + }); +}; + +//# sourceMappingURL=server-route-utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/server-utils.js b/build/node_modules/next/dist/server/server-utils.js new file mode 100644 index 0000000..f70a8a8 --- /dev/null +++ b/build/node_modules/next/dist/server/server-utils.js @@ -0,0 +1,340 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getPreviouslyRevalidatedTags: null, + getServerUtils: null, + interpolateDynamicPath: null, + normalizeCdnUrl: null, + normalizeDynamicRouteParams: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getPreviouslyRevalidatedTags: function() { + return getPreviouslyRevalidatedTags; + }, + getServerUtils: function() { + return getServerUtils; + }, + interpolateDynamicPath: function() { + return interpolateDynamicPath; + }, + normalizeCdnUrl: function() { + return normalizeCdnUrl; + }, + normalizeDynamicRouteParams: function() { + return normalizeDynamicRouteParams; + } +}); +const _normalizelocalepath = require("../shared/lib/i18n/normalize-locale-path"); +const _pathmatch = require("../shared/lib/router/utils/path-match"); +const _routeregex = require("../shared/lib/router/utils/route-regex"); +const _routematcher = require("../shared/lib/router/utils/route-matcher"); +const _preparedestination = require("../shared/lib/router/utils/prepare-destination"); +const _removetrailingslash = require("../shared/lib/router/utils/remove-trailing-slash"); +const _apppaths = require("../shared/lib/router/utils/app-paths"); +const _constants = require("../lib/constants"); +const _utils = require("./web/utils"); +const _decodequerypathparameter = require("./lib/decode-query-path-parameter"); +const _url = require("../lib/url"); +const _formaturl = require("../shared/lib/router/utils/format-url"); +function filterInternalQuery(query, paramKeys) { + // this is used to pass query information in rewrites + // but should not be exposed in final query + delete query['nextInternalLocale']; + for(const key in query){ + const isNextQueryPrefix = key !== _constants.NEXT_QUERY_PARAM_PREFIX && key.startsWith(_constants.NEXT_QUERY_PARAM_PREFIX); + const isNextInterceptionMarkerPrefix = key !== _constants.NEXT_INTERCEPTION_MARKER_PREFIX && key.startsWith(_constants.NEXT_INTERCEPTION_MARKER_PREFIX); + if (isNextQueryPrefix || isNextInterceptionMarkerPrefix || paramKeys.includes(key)) { + delete query[key]; + } + } +} +function normalizeCdnUrl(req, paramKeys) { + // make sure to normalize req.url from CDNs to strip dynamic and rewrite + // params from the query which are added during routing + const _parsedUrl = (0, _url.parseReqUrl)(req.url); + // we can't normalize if we can't parse + if (!_parsedUrl) { + return req.url; + } + delete _parsedUrl.search; + filterInternalQuery(_parsedUrl.query, paramKeys); + req.url = (0, _formaturl.formatUrl)(_parsedUrl); +} +function interpolateDynamicPath(pathname, params, defaultRouteRegex) { + if (!defaultRouteRegex) return pathname; + for (const param of Object.keys(defaultRouteRegex.groups)){ + const { optional, repeat } = defaultRouteRegex.groups[param]; + let builtParam = `[${repeat ? '...' : ''}${param}]`; + if (optional) { + builtParam = `[${builtParam}]`; + } + let paramValue; + const value = params[param]; + if (Array.isArray(value)) { + paramValue = value.map((v)=>v && encodeURIComponent(v)).join('/'); + } else if (value) { + paramValue = encodeURIComponent(value); + } else { + paramValue = ''; + } + if (paramValue || optional) { + pathname = pathname.replaceAll(builtParam, paramValue); + } + } + return pathname; +} +function normalizeDynamicRouteParams(query, defaultRouteRegex, defaultRouteMatches, ignoreMissingOptional) { + const isDefaultValueMatch = (candidateValue, defaultValue)=>{ + if (!candidateValue) { + return false; + } + let normalizedCandidateValue = (0, _apppaths.normalizeRscURL)(candidateValue); + for(let i = 0; i < 3; i++){ + if (normalizedCandidateValue === defaultValue) { + return true; + } + const decodedCandidateValue = (0, _decodequerypathparameter.decodeQueryPathParameter)(normalizedCandidateValue); + if (decodedCandidateValue === normalizedCandidateValue) { + break; + } + normalizedCandidateValue = decodedCandidateValue; + } + return false; + }; + let hasValidParams = true; + let params = {}; + for (const key of Object.keys(defaultRouteRegex.groups)){ + let value = query[key]; + if (typeof value === 'string') { + value = (0, _apppaths.normalizeRscURL)(value); + } else if (Array.isArray(value)) { + value = value.map(_apppaths.normalizeRscURL); + } + // if the value matches the default value we can't rely + // on the parsed params, this is used to signal if we need + // to parse x-now-route-matches or not + const defaultValue = defaultRouteMatches[key]; + const isOptional = defaultRouteRegex.groups[key].optional; + const isDefaultValue = Array.isArray(defaultValue) ? defaultValue.some((defaultVal)=>{ + return Array.isArray(value) ? value.some((val)=>isDefaultValueMatch(val, defaultVal)) : isDefaultValueMatch(value, defaultVal); + }) : Array.isArray(value) ? value.some((val)=>isDefaultValueMatch(val, defaultValue)) : isDefaultValueMatch(value, defaultValue); + if (isDefaultValue || typeof value === 'undefined' && !(isOptional && ignoreMissingOptional)) { + return { + params: {}, + hasValidParams: false + }; + } + // non-provided optional values should be undefined so normalize + // them to undefined + if (isOptional && (!value || Array.isArray(value) && value.length === 1 && // fallback optional catch-all SSG pages have + // [[...paramName]] for the root path on Vercel + (value[0] === 'index' || value[0] === `[[...${key}]]`) || value === 'index' || value === `[[...${key}]]`)) { + value = undefined; + delete query[key]; + } + // query values from the proxy aren't already split into arrays + // so make sure to normalize catch-all values + if (value && typeof value === 'string' && defaultRouteRegex.groups[key].repeat) { + value = value.split('/'); + } + if (value) { + params[key] = value; + } + } + return { + params, + hasValidParams + }; +} +function getServerUtils({ page, i18n, basePath, rewrites, pageIsDynamic, trailingSlash, caseSensitive }) { + let defaultRouteRegex; + let dynamicRouteMatcher; + let defaultRouteMatches; + if (pageIsDynamic) { + defaultRouteRegex = (0, _routeregex.getNamedRouteRegex)(page, { + prefixRouteKeys: false + }); + dynamicRouteMatcher = (0, _routematcher.getRouteMatcher)(defaultRouteRegex); + defaultRouteMatches = dynamicRouteMatcher(page); + } + function handleRewrites(req, parsedUrl) { + // Here we deep clone the parsedUrl to avoid mutating the original. We also + // cast this to a mutable type so we can mutate it within this scope. + const rewrittenParsedUrl = structuredClone(parsedUrl); + const rewriteParams = {}; + let fsPathname = rewrittenParsedUrl.pathname; + const matchesPage = ()=>{ + const fsPathnameNoSlash = (0, _removetrailingslash.removeTrailingSlash)(fsPathname || ''); + return fsPathnameNoSlash === (0, _removetrailingslash.removeTrailingSlash)(page) || (dynamicRouteMatcher == null ? void 0 : dynamicRouteMatcher(fsPathnameNoSlash)); + }; + const checkRewrite = (rewrite)=>{ + const matcher = (0, _pathmatch.getPathMatch)(rewrite.source + (trailingSlash ? '(/)?' : ''), { + removeUnnamedParams: true, + strict: true, + sensitive: !!caseSensitive + }); + if (!rewrittenParsedUrl.pathname) return false; + let params = matcher(rewrittenParsedUrl.pathname); + if ((rewrite.has || rewrite.missing) && params) { + const hasParams = (0, _preparedestination.matchHas)(req, rewrittenParsedUrl.query, rewrite.has, rewrite.missing); + if (hasParams) { + Object.assign(params, hasParams); + } else { + params = false; + } + } + if (params) { + const { parsedDestination, destQuery } = (0, _preparedestination.prepareDestination)({ + appendParamsToQuery: true, + destination: rewrite.destination, + params: params, + query: rewrittenParsedUrl.query + }); + // if the rewrite destination is external break rewrite chain + if (parsedDestination.protocol) { + return true; + } + Object.assign(rewriteParams, destQuery, params); + Object.assign(rewrittenParsedUrl.query, parsedDestination.query); + delete parsedDestination.query; + Object.assign(rewrittenParsedUrl, parsedDestination); + fsPathname = rewrittenParsedUrl.pathname; + if (!fsPathname) return false; + if (basePath) { + fsPathname = fsPathname.replace(new RegExp(`^${basePath}`), '') || '/'; + } + if (i18n) { + const result = (0, _normalizelocalepath.normalizeLocalePath)(fsPathname, i18n.locales); + fsPathname = result.pathname; + rewrittenParsedUrl.query.nextInternalLocale = result.detectedLocale || params.nextInternalLocale; + } + if (fsPathname === page) { + return true; + } + if (pageIsDynamic && dynamicRouteMatcher) { + const dynamicParams = dynamicRouteMatcher(fsPathname); + if (dynamicParams) { + rewrittenParsedUrl.query = { + ...rewrittenParsedUrl.query, + ...dynamicParams + }; + return true; + } + } + } + return false; + }; + for (const rewrite of rewrites.beforeFiles || []){ + checkRewrite(rewrite); + } + if (fsPathname !== page) { + let finished = false; + for (const rewrite of rewrites.afterFiles || []){ + finished = checkRewrite(rewrite); + if (finished) break; + } + if (!finished && !matchesPage()) { + for (const rewrite of rewrites.fallback || []){ + finished = checkRewrite(rewrite); + if (finished) break; + } + } + } + return { + rewriteParams, + rewrittenParsedUrl + }; + } + function getParamsFromRouteMatches(routeMatchesHeader) { + // If we don't have a default route regex, we can't get params from route + // matches + if (!defaultRouteRegex) return null; + const { groups, routeKeys } = defaultRouteRegex; + const matcher = (0, _routematcher.getRouteMatcher)({ + re: { + // Simulate a RegExp match from the \`req.url\` input + exec: (str)=>{ + // Normalize all the prefixed query params. + const obj = Object.fromEntries(new URLSearchParams(str)); + for (const [key, value] of Object.entries(obj)){ + const normalizedKey = (0, _utils.normalizeNextQueryParam)(key); + if (!normalizedKey) continue; + obj[normalizedKey] = value; + delete obj[key]; + } + // Use all the named route keys. + const result = {}; + for (const keyName of Object.keys(routeKeys)){ + const paramName = routeKeys[keyName]; + // If this param name is not a valid parameter name, then skip it. + if (!paramName) continue; + const group = groups[paramName]; + const value = obj[keyName]; + // When we're missing a required param, we can't match the route. + if (!group.optional && !value) return null; + result[group.pos] = value; + } + return result; + } + }, + groups + }); + const routeMatches = matcher(routeMatchesHeader); + if (!routeMatches) return null; + return routeMatches; + } + function normalizeQueryParams(query, routeParamKeys) { + // this is used to pass query information in rewrites + // but should not be exposed in final query + delete query['nextInternalLocale']; + for (const [key, value] of Object.entries(query)){ + const normalizedKey = (0, _utils.normalizeNextQueryParam)(key); + if (!normalizedKey) continue; + // Remove the prefixed key from the query params because we want + // to consume it for the dynamic route matcher. + delete query[key]; + routeParamKeys.add(normalizedKey); + if (typeof value === 'undefined') continue; + query[normalizedKey] = Array.isArray(value) ? value.map((v)=>(0, _decodequerypathparameter.decodeQueryPathParameter)(v)) : (0, _decodequerypathparameter.decodeQueryPathParameter)(value); + } + } + return { + handleRewrites, + defaultRouteRegex, + dynamicRouteMatcher, + defaultRouteMatches, + normalizeQueryParams, + getParamsFromRouteMatches, + /** + * Normalize dynamic route params. + * + * @param query - The query params to normalize. + * @param ignoreMissingOptional - Whether to ignore missing optional params. + * @returns The normalized params and whether they are valid. + */ normalizeDynamicRouteParams: (query, ignoreMissingOptional)=>{ + if (!defaultRouteRegex || !defaultRouteMatches) { + return { + params: {}, + hasValidParams: false + }; + } + return normalizeDynamicRouteParams(query, defaultRouteRegex, defaultRouteMatches, ignoreMissingOptional); + }, + normalizeCdnUrl: (req, paramKeys)=>normalizeCdnUrl(req, paramKeys), + interpolateDynamicPath: (pathname, params)=>interpolateDynamicPath(pathname, params, defaultRouteRegex), + filterInternalQuery: (query, paramKeys)=>filterInternalQuery(query, paramKeys) + }; +} +function getPreviouslyRevalidatedTags(headers, previewModeId) { + return typeof headers[_constants.NEXT_CACHE_REVALIDATED_TAGS_HEADER] === 'string' && headers[_constants.NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER] === previewModeId ? headers[_constants.NEXT_CACHE_REVALIDATED_TAGS_HEADER].split(',') : []; +} + +//# sourceMappingURL=server-utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/setup-http-agent-env.js b/build/node_modules/next/dist/server/setup-http-agent-env.js new file mode 100644 index 0000000..d8bd8a6 --- /dev/null +++ b/build/node_modules/next/dist/server/setup-http-agent-env.js @@ -0,0 +1,31 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "setHttpClientAndAgentOptions", { + enumerable: true, + get: function() { + return setHttpClientAndAgentOptions; + } +}); +const _http = require("http"); +const _https = require("https"); +function setHttpClientAndAgentOptions(config) { + if (globalThis.__NEXT_HTTP_AGENT) { + // We only need to assign once because we want + // to reuse the same agent for all requests. + return; + } + if (!config) { + throw Object.defineProperty(new Error('Expected config.httpAgentOptions to be an object'), "__NEXT_ERROR_CODE", { + value: "E204", + enumerable: false, + configurable: true + }); + } + globalThis.__NEXT_HTTP_AGENT_OPTIONS = config.httpAgentOptions; + globalThis.__NEXT_HTTP_AGENT = new _http.Agent(config.httpAgentOptions); + globalThis.__NEXT_HTTPS_AGENT = new _https.Agent(config.httpAgentOptions); +} + +//# sourceMappingURL=setup-http-agent-env.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/stream-utils/encoded-tags.js b/build/node_modules/next/dist/server/stream-utils/encoded-tags.js new file mode 100644 index 0000000..281b0ee --- /dev/null +++ b/build/node_modules/next/dist/server/stream-utils/encoded-tags.js @@ -0,0 +1,122 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "ENCODED_TAGS", { + enumerable: true, + get: function() { + return ENCODED_TAGS; + } +}); +const ENCODED_TAGS = { + // opening tags do not have the closing `>` since they can contain other attributes such as `` + OPENING: { + // + HEAD: new Uint8Array([ + 60, + 47, + 104, + 101, + 97, + 100, + 62 + ]), + // + BODY: new Uint8Array([ + 60, + 47, + 98, + 111, + 100, + 121, + 62 + ]), + // + HTML: new Uint8Array([ + 60, + 47, + 104, + 116, + 109, + 108, + 62 + ]), + // + BODY_AND_HTML: new Uint8Array([ + 60, + 47, + 98, + 111, + 100, + 121, + 62, + 60, + 47, + 104, + 116, + 109, + 108, + 62 + ]) + }, + META: { + // Only the match the prefix cause the suffix can be different wether it's xml compatible or not ">" or "/>" + // nextStream.pipeTo(writable, { + preventClose: true + })); + } + // We can omit the length check because we halted before the last stream and there + // is at least two streams so the lastStream here will always be defined + const lastStream = streams[i]; + promise = promise.then(()=>lastStream.pipeTo(writable)); + // Catch any errors from the streams and ignore them, they will be handled + // by whatever is consuming the readable stream. + promise.catch(voidCatch); + return readable; +} +function streamFromString(str) { + return new ReadableStream({ + start (controller) { + controller.enqueue(encoder.encode(str)); + controller.close(); + } + }); +} +function streamFromBuffer(chunk) { + return new ReadableStream({ + start (controller) { + controller.enqueue(chunk); + controller.close(); + } + }); +} +async function streamToChunks(stream) { + const reader = stream.getReader(); + const chunks = []; + while(true){ + const { done, value } = await reader.read(); + if (done) { + break; + } + chunks.push(value); + } + return chunks; +} +function concatUint8Arrays(chunks) { + const totalLength = chunks.reduce((sum, chunk)=>sum + chunk.length, 0); + const result = new Uint8Array(totalLength); + let offset = 0; + for (const chunk of chunks){ + result.set(chunk, offset); + offset += chunk.length; + } + return result; +} +async function streamToUint8Array(stream) { + return concatUint8Arrays(await streamToChunks(stream)); +} +async function streamToBuffer(stream) { + return Buffer.concat(await streamToChunks(stream)); +} +async function streamToString(stream, signal) { + const decoder = new TextDecoder('utf-8', { + fatal: true + }); + let string = ''; + for await (const chunk of stream){ + if (signal == null ? void 0 : signal.aborted) { + return string; + } + string += decoder.decode(chunk, { + stream: true + }); + } + string += decoder.decode(); + return string; +} +function createBufferedTransformStream(options = {}) { + const { maxBufferByteLength = Infinity } = options; + let bufferedChunks = []; + let bufferByteLength = 0; + let pending; + const flush = (controller)=>{ + try { + if (bufferedChunks.length === 0) { + return; + } + const chunk = new Uint8Array(bufferByteLength); + let copiedBytes = 0; + for(let i = 0; i < bufferedChunks.length; i++){ + const bufferedChunk = bufferedChunks[i]; + chunk.set(bufferedChunk, copiedBytes); + copiedBytes += bufferedChunk.byteLength; + } + // We just wrote all the buffered chunks so we need to reset the bufferedChunks array + // and our bufferByteLength to prepare for the next round of buffered chunks + bufferedChunks.length = 0; + bufferByteLength = 0; + controller.enqueue(chunk); + } catch { + // If an error occurs while enqueuing, it can't be due to this + // transformer. It's most likely caused by the controller having been + // errored (for example, if the stream was cancelled). + } + }; + const scheduleFlush = (controller)=>{ + if (pending) { + return; + } + const detached = new _detachedpromise.DetachedPromise(); + pending = detached; + (0, _scheduler.scheduleImmediate)(()=>{ + try { + flush(controller); + } finally{ + pending = undefined; + detached.resolve(); + } + }); + }; + return new TransformStream({ + transform (chunk, controller) { + // Combine the previous buffer with the new chunk. + bufferedChunks.push(chunk); + bufferByteLength += chunk.byteLength; + if (bufferByteLength >= maxBufferByteLength) { + flush(controller); + } else { + scheduleFlush(controller); + } + }, + flush () { + return pending == null ? void 0 : pending.promise; + } + }); +} +function renderToInitialFizzStream({ ReactDOMServer, element, streamOptions }) { + return (0, _tracer.getTracer)().trace(_constants.AppRenderSpan.renderToReadableStream, async ()=>ReactDOMServer.renderToReadableStream(element, streamOptions)); +} +function createMetadataTransformStream(insert) { + let chunkIndex = -1; + let isMarkRemoved = false; + return new TransformStream({ + async transform (chunk, controller) { + let iconMarkIndex = -1; + let closedHeadIndex = -1; + chunkIndex++; + if (isMarkRemoved) { + controller.enqueue(chunk); + return; + } + let iconMarkLength = 0; + // Only search for the closed head tag once + if (iconMarkIndex === -1) { + iconMarkIndex = (0, _uint8arrayhelpers.indexOfUint8Array)(chunk, _encodedtags.ENCODED_TAGS.META.ICON_MARK); + if (iconMarkIndex === -1) { + controller.enqueue(chunk); + return; + } else { + // When we found the `` or `>`, checking the next char to ensure we cover both cases. + iconMarkLength = _encodedtags.ENCODED_TAGS.META.ICON_MARK.length; + // Check if next char is /, this is for xml mode. + if (chunk[iconMarkIndex + iconMarkLength] === 47) { + iconMarkLength += 2; + } else { + // The last char is `>` + iconMarkLength++; + } + } + } + // Check if icon mark is inside tag in the first chunk. + if (chunkIndex === 0) { + closedHeadIndex = (0, _uint8arrayhelpers.indexOfUint8Array)(chunk, _encodedtags.ENCODED_TAGS.CLOSED.HEAD); + if (iconMarkIndex !== -1) { + // The mark icon is located in the 1st chunk before the head tag. + // We do not need to insert the script tag in this case because it's in the head. + // Just remove the icon mark from the chunk. + if (iconMarkIndex < closedHeadIndex) { + const replaced = new Uint8Array(chunk.length - iconMarkLength); + // Remove the icon mark from the chunk. + replaced.set(chunk.subarray(0, iconMarkIndex)); + replaced.set(chunk.subarray(iconMarkIndex + iconMarkLength), iconMarkIndex); + chunk = replaced; + } else { + // The icon mark is after the head tag, replace and insert the script tag at that position. + const insertion = await insert(); + const encodedInsertion = encoder.encode(insertion); + const insertionLength = encodedInsertion.length; + const replaced = new Uint8Array(chunk.length - iconMarkLength + insertionLength); + replaced.set(chunk.subarray(0, iconMarkIndex)); + replaced.set(encodedInsertion, iconMarkIndex); + replaced.set(chunk.subarray(iconMarkIndex + iconMarkLength), iconMarkIndex + insertionLength); + chunk = replaced; + } + isMarkRemoved = true; + } + // If there's no icon mark located, it will be handled later when if present in the following chunks. + } else { + // When it's appeared in the following chunks, we'll need to + // remove the mark and then insert the script tag at that position. + const insertion = await insert(); + const encodedInsertion = encoder.encode(insertion); + const insertionLength = encodedInsertion.length; + // Replace the icon mark with the hoist script or empty string. + const replaced = new Uint8Array(chunk.length - iconMarkLength + insertionLength); + // Set the first part of the chunk, before the icon mark. + replaced.set(chunk.subarray(0, iconMarkIndex)); + // Set the insertion after the icon mark. + replaced.set(encodedInsertion, iconMarkIndex); + // Set the rest of the chunk after the icon mark. + replaced.set(chunk.subarray(iconMarkIndex + iconMarkLength), iconMarkIndex + insertionLength); + chunk = replaced; + isMarkRemoved = true; + } + controller.enqueue(chunk); + } + }); +} +function createHeadInsertionTransformStream(insert) { + let inserted = false; + // We need to track if this transform saw any bytes because if it didn't + // we won't want to insert any server HTML at all + let hasBytes = false; + return new TransformStream({ + async transform (chunk, controller) { + hasBytes = true; + const insertion = await insert(); + if (inserted) { + if (insertion) { + const encodedInsertion = encoder.encode(insertion); + controller.enqueue(encodedInsertion); + } + controller.enqueue(chunk); + } else { + // TODO (@Ethan-Arrowood): Replace the generic `indexOfUint8Array` method with something finely tuned for the subset of things actually being checked for. + const index = (0, _uint8arrayhelpers.indexOfUint8Array)(chunk, _encodedtags.ENCODED_TAGS.CLOSED.HEAD); + // In fully static rendering or non PPR rendering cases: + // `/head>` will always be found in the chunk in first chunk rendering. + if (index !== -1) { + if (insertion) { + const encodedInsertion = encoder.encode(insertion); + // Get the total count of the bytes in the chunk and the insertion + // e.g. + // chunk = + // insertion = + // output = [ ] + const insertedHeadContent = new Uint8Array(chunk.length + encodedInsertion.length); + // Append the first part of the chunk, before the head tag + insertedHeadContent.set(chunk.slice(0, index)); + // Append the server inserted content + insertedHeadContent.set(encodedInsertion, index); + // Append the rest of the chunk + insertedHeadContent.set(chunk.slice(index), index + encodedInsertion.length); + controller.enqueue(insertedHeadContent); + } else { + controller.enqueue(chunk); + } + inserted = true; + } else { + // This will happens in PPR rendering during next start, when the page is partially rendered. + // When the page resumes, the head tag will be found in the middle of the chunk. + // Where we just need to append the insertion and chunk to the current stream. + // e.g. + // PPR-static: ... [ resume content ] + // PPR-resume: [ insertion ] [ rest content ] + if (insertion) { + controller.enqueue(encoder.encode(insertion)); + } + controller.enqueue(chunk); + inserted = true; + } + } + }, + async flush (controller) { + // Check before closing if there's anything remaining to insert. + if (hasBytes) { + const insertion = await insert(); + if (insertion) { + controller.enqueue(encoder.encode(insertion)); + } + } + } + }); +} +async function createClientResumeScriptInsertionTransformStream() { + const segmentPath = '/_full'; + const cacheBustingHeader = await (0, _cachebustingsearchparam.computeCacheBustingSearchParam)('1', '/_full', undefined, undefined // headers[NEXT_URL] + ); + const searchStr = `${_approuterheaders.NEXT_RSC_UNION_QUERY}=${cacheBustingHeader}`; + const NEXT_CLIENT_RESUME_SCRIPT = ``; + let didAlreadyInsert = false; + return new TransformStream({ + transform (chunk, controller) { + if (didAlreadyInsert) { + // Already inserted the script into the head. Pass through. + controller.enqueue(chunk); + return; + } + // TODO (@Ethan-Arrowood): Replace the generic `indexOfUint8Array` method with something finely tuned for the subset of things actually being checked for. + const headClosingTagIndex = (0, _uint8arrayhelpers.indexOfUint8Array)(chunk, _encodedtags.ENCODED_TAGS.CLOSED.HEAD); + if (headClosingTagIndex === -1) { + // In fully static rendering or non PPR rendering cases: + // `/head>` will always be found in the chunk in first chunk rendering. + controller.enqueue(chunk); + return; + } + const encodedInsertion = encoder.encode(NEXT_CLIENT_RESUME_SCRIPT); + // Get the total count of the bytes in the chunk and the insertion + // e.g. + // chunk = + // insertion = + // output = [ ] + const insertedHeadContent = new Uint8Array(chunk.length + encodedInsertion.length); + // Append the first part of the chunk, before the head tag + insertedHeadContent.set(chunk.slice(0, headClosingTagIndex)); + // Append the server inserted content + insertedHeadContent.set(encodedInsertion, headClosingTagIndex); + // Append the rest of the chunk + insertedHeadContent.set(chunk.slice(headClosingTagIndex), headClosingTagIndex + encodedInsertion.length); + controller.enqueue(insertedHeadContent); + didAlreadyInsert = true; + } + }); +} +async function createInstantTestScriptInsertionTransformStream(requestId) { + // Kick off a fetch for the static RSC payload. This is the hydration + // source for the locked static shell — same as the __NEXT_CLIENT_RESUME + // fetch used for fallback routes, but with NEXT_INSTANT_PREFETCH_HEADER + // so the server returns static-only data. + // + // The fetch promise is stored as self.__next_instant_test, which doubles + // as the feature flag (truthy = instant test mode). The client processes + // this as a fallback prerender payload for hydration. + const segmentPath = '/_full'; + const cacheBustingHeader = await (0, _cachebustingsearchparam.computeCacheBustingSearchParam)('1', segmentPath, undefined, undefined); + const searchStr = `${_approuterheaders.NEXT_RSC_UNION_QUERY}=${cacheBustingHeader}`; + // In dev mode, inject self.__next_r (request ID) so that HMR WebSocket + // and debug channel initialization don't crash. The static shell + // bypasses renderToFizzStream which normally injects this via + // bootstrapScriptContent. + const requestIdScript = requestId !== null ? `self.__next_r=${JSON.stringify(requestId)};` : ''; + const INSTANT_TEST_SCRIPT = ``; + let didAlreadyInsert = false; + return new TransformStream({ + transform (chunk, controller) { + if (didAlreadyInsert) { + // Already inserted the script into the head. Pass through. + controller.enqueue(chunk); + return; + } + // Find the opening ) + const headOpenIndex = (0, _uint8arrayhelpers.indexOfUint8Array)(chunk, _encodedtags.ENCODED_TAGS.OPENING.HEAD); + if (headOpenIndex === -1) { + controller.enqueue(chunk); + return; + } + // Find the closing > of the tag + const headCloseAngle = chunk.indexOf(62, headOpenIndex + _encodedtags.ENCODED_TAGS.OPENING.HEAD.length); + if (headCloseAngle === -1) { + controller.enqueue(chunk); + return; + } + const encodedInsertion = encoder.encode(INSTANT_TEST_SCRIPT); + const insertionPoint = headCloseAngle + 1; + // e.g. + // chunk = ... + // insertion = + // output = [ ] ... + const insertedHeadContent = new Uint8Array(chunk.length + encodedInsertion.length); + insertedHeadContent.set(chunk.slice(0, insertionPoint)); + insertedHeadContent.set(encodedInsertion, insertionPoint); + insertedHeadContent.set(chunk.slice(insertionPoint), insertionPoint + encodedInsertion.length); + controller.enqueue(insertedHeadContent); + didAlreadyInsert = true; + }, + flush (controller) { + // Append closing tags so the browser can parse the full document. + controller.enqueue(_encodedtags.ENCODED_TAGS.CLOSED.BODY_AND_HTML); + } + }); +} +// Suffix after main body content - scripts before , +// but wait for the major chunks to be enqueued. +function createDeferredSuffixStream(suffix) { + let flushed = false; + let pending; + const flush = (controller)=>{ + const detached = new _detachedpromise.DetachedPromise(); + pending = detached; + (0, _scheduler.scheduleImmediate)(()=>{ + try { + controller.enqueue(encoder.encode(suffix)); + } catch { + // If an error occurs while enqueuing it can't be due to this + // transformers fault. It's likely due to the controller being + // errored due to the stream being cancelled. + } finally{ + pending = undefined; + detached.resolve(); + } + }); + }; + return new TransformStream({ + transform (chunk, controller) { + controller.enqueue(chunk); + // If we've already flushed, we're done. + if (flushed) return; + // Schedule the flush to happen. + flushed = true; + flush(controller); + }, + flush (controller) { + if (pending) return pending.promise; + if (flushed) return; + // Flush now. + controller.enqueue(encoder.encode(suffix)); + } + }); +} +function createFlightDataInjectionTransformStream(stream, delayDataUntilFirstHtmlChunk) { + let htmlStreamFinished = false; + let pull = null; + let donePulling = false; + function startOrContinuePulling(controller) { + if (!pull) { + pull = startPulling(controller); + } + return pull; + } + async function startPulling(controller) { + const reader = stream.getReader(); + if (delayDataUntilFirstHtmlChunk) { + // NOTE: streaming flush + // We are buffering here for the inlined data stream because the + // "shell" stream might be chunkenized again by the underlying stream + // implementation, e.g. with a specific high-water mark. To ensure it's + // the safe timing to pipe the data stream, this extra tick is + // necessary. + // We don't start reading until we've left the current Task to ensure + // that it's inserted after flushing the shell. Note that this implementation + // might get stale if impl details of Fizz change in the future. + await (0, _scheduler.atLeastOneTask)(); + } + try { + while(true){ + const { done, value } = await reader.read(); + if (done) { + donePulling = true; + return; + } + // We want to prioritize HTML over RSC data. + // The SSR render is based on the same RSC stream, so when we get a new RSC chunk, + // we're likely to produce an HTML chunk as well, so give it a chance to flush first. + if (!delayDataUntilFirstHtmlChunk && !htmlStreamFinished) { + await (0, _scheduler.atLeastOneTask)(); + } + controller.enqueue(value); + } + } catch (err) { + controller.error(err); + } + } + return new TransformStream({ + start (controller) { + if (!delayDataUntilFirstHtmlChunk) { + startOrContinuePulling(controller); + } + }, + transform (chunk, controller) { + controller.enqueue(chunk); + // Start the streaming if it hasn't already been started yet. + if (delayDataUntilFirstHtmlChunk) { + startOrContinuePulling(controller); + } + }, + flush (controller) { + htmlStreamFinished = true; + if (donePulling) { + return; + } + return startOrContinuePulling(controller); + } + }); +} +const CLOSE_TAG = ''; +/** + * This transform stream moves the suffix to the end of the stream, so results + * like `` will be transformed to + * ``. + */ function createMoveSuffixStream() { + let foundSuffix = false; + return new TransformStream({ + transform (chunk, controller) { + if (foundSuffix) { + return controller.enqueue(chunk); + } + const index = (0, _uint8arrayhelpers.indexOfUint8Array)(chunk, _encodedtags.ENCODED_TAGS.CLOSED.BODY_AND_HTML); + if (index > -1) { + foundSuffix = true; + // If the whole chunk is the suffix, then don't write anything, it will + // be written in the flush. + if (chunk.length === _encodedtags.ENCODED_TAGS.CLOSED.BODY_AND_HTML.length) { + return; + } + // Write out the part before the suffix. + const before = chunk.slice(0, index); + controller.enqueue(before); + // In the case where the suffix is in the middle of the chunk, we need + // to split the chunk into two parts. + if (chunk.length > _encodedtags.ENCODED_TAGS.CLOSED.BODY_AND_HTML.length + index) { + // Write out the part after the suffix. + const after = chunk.slice(index + _encodedtags.ENCODED_TAGS.CLOSED.BODY_AND_HTML.length); + controller.enqueue(after); + } + } else { + controller.enqueue(chunk); + } + }, + flush (controller) { + // Even if we didn't find the suffix, the HTML is not valid if we don't + // add it, so insert it at the end. + controller.enqueue(_encodedtags.ENCODED_TAGS.CLOSED.BODY_AND_HTML); + } + }); +} +function createStripDocumentClosingTagsTransform() { + return new TransformStream({ + transform (chunk, controller) { + // We rely on the assumption that chunks will never break across a code unit. + // This is reasonable because we currently concat all of React's output from a single + // flush into one chunk before streaming it forward which means the chunk will represent + // a single coherent utf-8 string. This is not safe to use if we change our streaming to no + // longer do this large buffered chunk + if ((0, _uint8arrayhelpers.isEquivalentUint8Arrays)(chunk, _encodedtags.ENCODED_TAGS.CLOSED.BODY_AND_HTML) || (0, _uint8arrayhelpers.isEquivalentUint8Arrays)(chunk, _encodedtags.ENCODED_TAGS.CLOSED.BODY) || (0, _uint8arrayhelpers.isEquivalentUint8Arrays)(chunk, _encodedtags.ENCODED_TAGS.CLOSED.HTML)) { + // the entire chunk is the closing tags; return without enqueueing anything. + return; + } + // We assume these tags will go at together at the end of the document and that + // they won't appear anywhere else in the document. This is not really a safe assumption + // but until we revamp our streaming infra this is a performant way to string the tags + chunk = (0, _uint8arrayhelpers.removeFromUint8Array)(chunk, _encodedtags.ENCODED_TAGS.CLOSED.BODY); + chunk = (0, _uint8arrayhelpers.removeFromUint8Array)(chunk, _encodedtags.ENCODED_TAGS.CLOSED.HTML); + controller.enqueue(chunk); + } + }); +} +function createHtmlDataDplIdTransformStream(dplId) { + let didTransform = false; + return new TransformStream({ + transform (chunk, controller) { + if (didTransform) { + controller.enqueue(chunk); + return; + } + const htmlTagIndex = (0, _uint8arrayhelpers.indexOfUint8Array)(chunk, _encodedtags.ENCODED_TAGS.OPENING.HTML); + if (htmlTagIndex === -1) { + controller.enqueue(chunk); + return; + } + // Insert the data-dpl-id attribute right after " -1) { + foundHtml = true; + } + if (!foundBody && (0, _uint8arrayhelpers.indexOfUint8Array)(chunk, _encodedtags.ENCODED_TAGS.OPENING.BODY) > -1) { + foundBody = true; + } + controller.enqueue(chunk); + }, + flush (controller) { + const missingTags = []; + if (!foundHtml) missingTags.push('html'); + if (!foundBody) missingTags.push('body'); + if (!missingTags.length) return; + controller.enqueue(encoder.encode(` + + `)); + } + }); +} +function chainTransformers(readable, transformers) { + let stream = readable; + for (const transformer of transformers){ + if (!transformer) continue; + stream = stream.pipeThrough(transformer); + } + return stream; +} +async function continueFizzStream(renderStream, { suffix, inlinedDataStream, isStaticGeneration, deploymentId, getServerInsertedHTML, getServerInsertedMetadata, validateRootLayout }) { + // Suffix itself might contain close tags at the end, so we need to split it. + const suffixUnclosed = suffix ? suffix.split(CLOSE_TAG, 1)[0] : null; + if (isStaticGeneration) { + // If we're generating static HTML we need to wait for it to resolve before continuing. + await renderStream.allReady; + } else { + // Otherwise, we want to make sure Fizz is done with all microtasky work + // before we start pulling the stream and cause a flush. + await (0, _scheduler.waitAtLeastOneReactRenderTask)(); + } + return chainTransformers(renderStream, [ + // Buffer everything to avoid flushing too frequently + createBufferedTransformStream(), + // Insert data-dpl-id attribute on the html tag + deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null, + // Transform metadata + createMetadataTransformStream(getServerInsertedMetadata), + // Insert suffix content + suffixUnclosed != null && suffixUnclosed.length > 0 ? createDeferredSuffixStream(suffixUnclosed) : null, + // Insert the inlined data (Flight data, form state, etc.) stream into the HTML + inlinedDataStream ? createFlightDataInjectionTransformStream(inlinedDataStream, true) : null, + // Validate the root layout for missing html or body tags + validateRootLayout ? createRootLayoutValidatorStream() : null, + // Close tags should always be deferred to the end + createMoveSuffixStream(), + // Special head insertions + // TODO-APP: Insert server side html to end of head in app layout rendering, to avoid + // hydration errors. Remove this once it's ready to be handled by react itself. + createHeadInsertionTransformStream(getServerInsertedHTML) + ]); +} +async function continueDynamicPrerender(prerenderStream, { getServerInsertedHTML, getServerInsertedMetadata, deploymentId }) { + return chainTransformers(prerenderStream, [ + // Buffer everything to avoid flushing too frequently + createBufferedTransformStream(), + createStripDocumentClosingTagsTransform(), + // Insert data-dpl-id attribute on the html tag + deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null, + // Insert generated tags to head + createHeadInsertionTransformStream(getServerInsertedHTML), + // Transform metadata + createMetadataTransformStream(getServerInsertedMetadata) + ]); +} +async function continueStaticPrerender(prerenderStream, { inlinedDataStream, getServerInsertedHTML, getServerInsertedMetadata, deploymentId }) { + return chainTransformers(prerenderStream, [ + // Buffer everything to avoid flushing too frequently + createBufferedTransformStream(), + // Add build id comment to start of the HTML document (in export mode) + // Insert data-dpl-id attribute on the html tag + deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null, + // Insert generated tags to head + createHeadInsertionTransformStream(getServerInsertedHTML), + // Transform metadata + createMetadataTransformStream(getServerInsertedMetadata), + // Insert the inlined data (Flight data, form state, etc.) stream into the HTML + createFlightDataInjectionTransformStream(inlinedDataStream, true), + // Close tags should always be deferred to the end + createMoveSuffixStream() + ]); +} +async function continueStaticFallbackPrerender(prerenderStream, { inlinedDataStream, getServerInsertedHTML, getServerInsertedMetadata, deploymentId }) { + // Same as `continueStaticPrerender`, but also inserts an additional script + // to instruct the client to start fetching the hydration data as early + // as possible. + return chainTransformers(prerenderStream, [ + // Buffer everything to avoid flushing too frequently + createBufferedTransformStream(), + // Insert data-dpl-id attribute on the html tag + deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null, + // Insert generated tags to head + createHeadInsertionTransformStream(getServerInsertedHTML), + // Insert the client resume script into the head + await createClientResumeScriptInsertionTransformStream(), + // Transform metadata + createMetadataTransformStream(getServerInsertedMetadata), + // Insert the inlined data (Flight data, form state, etc.) stream into the HTML + createFlightDataInjectionTransformStream(inlinedDataStream, true), + // Close tags should always be deferred to the end + createMoveSuffixStream() + ]); +} +async function continueDynamicHTMLResume(renderStream, { delayDataUntilFirstHtmlChunk, inlinedDataStream, getServerInsertedHTML, getServerInsertedMetadata, deploymentId }) { + return chainTransformers(renderStream, [ + // Buffer everything to avoid flushing too frequently + createBufferedTransformStream(), + // Insert data-dpl-id attribute on the html tag + deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null, + // Insert generated tags to head + createHeadInsertionTransformStream(getServerInsertedHTML), + // Transform metadata + createMetadataTransformStream(getServerInsertedMetadata), + // Insert the inlined data (Flight data, form state, etc.) stream into the HTML + createFlightDataInjectionTransformStream(inlinedDataStream, delayDataUntilFirstHtmlChunk), + // Close tags should always be deferred to the end + createMoveSuffixStream() + ]); +} +function createDocumentClosingStream() { + return streamFromString(CLOSE_TAG); +} +function createRuntimePrefetchTransformStream(sentinel, isPartial, staleTime) { + const enc = new TextEncoder(); + // Search for: [] + // Replace with: [,] + const search = enc.encode(`[${sentinel}]`); + const first = search[0]; + const replace = enc.encode(`[${isPartial},${staleTime}]`); + const searchLen = search.length; + let currentChunk = null; + let found = false; + function processChunk(controller, nextChunk) { + if (found) { + if (nextChunk) { + controller.enqueue(nextChunk); + } + return; + } + if (currentChunk) { + // We can't search past the index that can contain a full match + let exclusiveUpperBound = currentChunk.length - (searchLen - 1); + if (nextChunk) { + // If we have any overflow bytes we can search up to the chunk's final byte + exclusiveUpperBound += Math.min(nextChunk.length, searchLen - 1); + } + if (exclusiveUpperBound < 1) { + // we can't match the current chunk. + controller.enqueue(currentChunk); + currentChunk = nextChunk // advance so we don't process this chunk again + ; + return; + } + let currentIndex = currentChunk.indexOf(first); + // check the current candidate match if it is within the bounds of our search space for the currentChunk + candidateLoop: while(-1 < currentIndex && currentIndex < exclusiveUpperBound){ + // We already know index 0 matches because we used indexOf to find the candidateIndex so we start at index 1 + let matchIndex = 1; + while(matchIndex < searchLen){ + const candidateIndex = currentIndex + matchIndex; + const candidateValue = candidateIndex < currentChunk.length ? currentChunk[candidateIndex] : nextChunk[candidateIndex - currentChunk.length]; + if (candidateValue !== search[matchIndex]) { + // No match, reset and continue the search from the next position + currentIndex = currentChunk.indexOf(first, currentIndex + 1); + continue candidateLoop; + } + matchIndex++; + } + // We found a complete match. currentIndex is our starting point to replace the value. + found = true; + // enqueue everything up to the match + controller.enqueue(currentChunk.subarray(0, currentIndex)); + // enqueue the replacement value + controller.enqueue(replace); + // If there are bytes in the currentChunk after the match enqueue them + if (currentIndex + searchLen < currentChunk.length) { + controller.enqueue(currentChunk.slice(currentIndex + searchLen)); + } + // If we have a next chunk we enqueue it now + if (nextChunk) { + // if replacement spills over to the next chunk we first exclude the replaced bytes + const overflowBytes = currentIndex + searchLen - currentChunk.length; + const truncatedChunk = overflowBytes > 0 ? nextChunk.subarray(overflowBytes) : nextChunk; + controller.enqueue(truncatedChunk); + } + // We are now in found mode and don't need to track currentChunk anymore + currentChunk = null; + return; + } + // No match found in this chunk, emit it and wait for the next one + controller.enqueue(currentChunk); + } + // Advance to the next chunk + currentChunk = nextChunk; + } + return new TransformStream({ + transform (chunk, controller) { + processChunk(controller, chunk); + }, + flush (controller) { + processChunk(controller, null); + } + }); +} + +//# sourceMappingURL=node-web-streams-helper.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/stream-utils/uint8array-helpers.js b/build/node_modules/next/dist/server/stream-utils/uint8array-helpers.js new file mode 100644 index 0000000..c0e0c0a --- /dev/null +++ b/build/node_modules/next/dist/server/stream-utils/uint8array-helpers.js @@ -0,0 +1,74 @@ +/** + * Find the starting index of Uint8Array `b` within Uint8Array `a`. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + indexOfUint8Array: null, + isEquivalentUint8Arrays: null, + removeFromUint8Array: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + indexOfUint8Array: function() { + return indexOfUint8Array; + }, + isEquivalentUint8Arrays: function() { + return isEquivalentUint8Arrays; + }, + removeFromUint8Array: function() { + return removeFromUint8Array; + } +}); +function indexOfUint8Array(a, b) { + if (b.length === 0) return 0; + if (a.length === 0 || b.length > a.length) return -1; + // Use Node's native implementation when available. + if (typeof Buffer !== 'undefined') { + const haystack = Buffer.isBuffer(a) ? a : Buffer.from(a.buffer, a.byteOffset, a.byteLength); + return haystack.indexOf(b); + } + // start iterating through `a` + for(let i = 0; i <= a.length - b.length; i++){ + let completeMatch = true; + // from index `i`, iterate through `b` and check for mismatch + for(let j = 0; j < b.length; j++){ + // if the values do not match, then this isn't a complete match, exit `b` iteration early and iterate to next index of `a`. + if (a[i + j] !== b[j]) { + completeMatch = false; + break; + } + } + if (completeMatch) { + return i; + } + } + return -1; +} +function isEquivalentUint8Arrays(a, b) { + if (a.length !== b.length) return false; + for(let i = 0; i < a.length; i++){ + if (a[i] !== b[i]) return false; + } + return true; +} +function removeFromUint8Array(a, b) { + const tagIndex = indexOfUint8Array(a, b); + if (tagIndex === 0) return a.subarray(b.length); + if (tagIndex > -1) { + const removed = new Uint8Array(a.length - b.length); + removed.set(a.subarray(0, tagIndex)); + removed.set(a.subarray(tagIndex + b.length), tagIndex); + return removed; + } else { + return a; + } +} + +//# sourceMappingURL=uint8array-helpers.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/typescript/constant.js b/build/node_modules/next/dist/server/typescript/constant.js new file mode 100644 index 0000000..c898f79 --- /dev/null +++ b/build/node_modules/next/dist/server/typescript/constant.js @@ -0,0 +1,98 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + ALLOWED_EXPORTS: null, + ALLOWED_LAYOUT_PROPS: null, + ALLOWED_PAGE_PROPS: null, + DISALLOWED_SERVER_REACT_APIS: null, + DISALLOWED_SERVER_REACT_DOM_APIS: null, + LEGACY_CONFIG_EXPORT: null, + NEXT_TS_ERRORS: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + ALLOWED_EXPORTS: function() { + return ALLOWED_EXPORTS; + }, + ALLOWED_LAYOUT_PROPS: function() { + return ALLOWED_LAYOUT_PROPS; + }, + ALLOWED_PAGE_PROPS: function() { + return ALLOWED_PAGE_PROPS; + }, + DISALLOWED_SERVER_REACT_APIS: function() { + return DISALLOWED_SERVER_REACT_APIS; + }, + DISALLOWED_SERVER_REACT_DOM_APIS: function() { + return DISALLOWED_SERVER_REACT_DOM_APIS; + }, + LEGACY_CONFIG_EXPORT: function() { + return LEGACY_CONFIG_EXPORT; + }, + NEXT_TS_ERRORS: function() { + return NEXT_TS_ERRORS; + } +}); +const NEXT_TS_ERRORS = { + INVALID_SERVER_API: 71001, + INVALID_ENTRY_EXPORT: 71002, + INVALID_OPTION_VALUE: 71003, + MISPLACED_ENTRY_DIRECTIVE: 71004, + INVALID_PAGE_PROP: 71005, + INVALID_CONFIG_OPTION: 71006, + INVALID_CLIENT_ENTRY_PROP: 71007, + INVALID_METADATA_EXPORT: 71008, + INVALID_ERROR_COMPONENT: 71009, + INVALID_ENTRY_DIRECTIVE: 71010, + INVALID_SERVER_ENTRY_RETURN: 71011 +}; +const ALLOWED_EXPORTS = [ + 'config', + 'generateStaticParams', + 'metadata', + 'generateMetadata', + 'viewport', + 'generateViewport' +]; +const LEGACY_CONFIG_EXPORT = 'config'; +const DISALLOWED_SERVER_REACT_APIS = [ + 'useState', + 'useEffect', + 'useEffectEvent', + 'useLayoutEffect', + 'useDeferredValue', + 'useImperativeHandle', + 'useInsertionEffect', + 'useReducer', + 'useRef', + 'useSyncExternalStore', + 'useTransition', + 'Component', + 'PureComponent', + 'createContext', + 'createFactory', + 'experimental_useOptimistic', + 'useOptimistic', + 'useActionState' +]; +const DISALLOWED_SERVER_REACT_DOM_APIS = [ + 'useFormStatus', + 'useFormState' +]; +const ALLOWED_PAGE_PROPS = [ + 'params', + 'searchParams' +]; +const ALLOWED_LAYOUT_PROPS = [ + 'params', + 'children' +]; + +//# sourceMappingURL=constant.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/typescript/index.js b/build/node_modules/next/dist/server/typescript/index.js new file mode 100644 index 0000000..3d11502 --- /dev/null +++ b/build/node_modules/next/dist/server/typescript/index.js @@ -0,0 +1,199 @@ +/** + * This is a TypeScript language service plugin for Next.js app directory, + * it provides the following features: + * + * - Warns about disallowed React APIs in server components. + * - Warns about disallowed layout and page exports. + * - Autocompletion for entry configurations. + * - Hover hint and docs for entry configurations. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "createTSPlugin", { + enumerable: true, + get: function() { + return createTSPlugin; + } +}); +const _utils = require("./utils"); +const _constant = require("./constant"); +const _config = /*#__PURE__*/ _interop_require_default(require("./rules/config")); +const _server = /*#__PURE__*/ _interop_require_default(require("./rules/server")); +const _entry = /*#__PURE__*/ _interop_require_default(require("./rules/entry")); +const _clientboundary = /*#__PURE__*/ _interop_require_default(require("./rules/client-boundary")); +const _serverboundary = /*#__PURE__*/ _interop_require_default(require("./rules/server-boundary")); +const _metadata = /*#__PURE__*/ _interop_require_default(require("./rules/metadata")); +const _error = /*#__PURE__*/ _interop_require_default(require("./rules/error")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const createTSPlugin = ({ typescript: ts })=>{ + function create(info) { + // Get plugin options + // config is the plugin options from the user's tsconfig.json + // e.g. { "plugins": [{ "name": "next", "enabled": true }] } + // config will be { "name": "next", "enabled": true } + // The default user config is { "name": "next" } + const isPluginEnabled = info.config.enabled ?? true; + if (!isPluginEnabled) { + return info.languageService; + } + (0, _utils.init)({ + ts, + info + }); + // Set up decorator object + const proxy = Object.create(null); + for (let k of Object.keys(info.languageService)){ + const x = info.languageService[k]; + // @ts-expect-error - JS runtime trickery which is tricky to type tersely + proxy[k] = (...args)=>x.apply(info.languageService, args); + } + // Auto completion + proxy.getCompletionsAtPosition = (fileName, position, options)=>{ + let prior = info.languageService.getCompletionsAtPosition(fileName, position, options) || { + isGlobalCompletion: false, + isMemberCompletion: false, + isNewIdentifierLocation: false, + entries: [] + }; + if (!(0, _utils.isAppEntryFile)(fileName)) return prior; + // If it's a server entry. + const entryInfo = (0, _utils.getEntryInfo)(fileName); + if (!entryInfo.client) { + // Remove specified entries from completion list + prior.entries = _server.default.filterCompletionsAtPosition(prior.entries); + } + // Add auto completions for export configs. + _config.default.addCompletionsAtPosition(fileName, position, prior); + const source = (0, _utils.getSource)(fileName); + if (!source) return prior; + ts.forEachChild(source, (node)=>{ + // Auto completion for default export function's props. + if ((0, _utils.isPositionInsideNode)(position, node) && (0, _utils.isDefaultFunctionExport)(node)) { + prior.entries.push(..._entry.default.getCompletionsAtPosition(fileName, node, position)); + } + }); + return prior; + }; + // Show auto completion details + proxy.getCompletionEntryDetails = (fileName, position, entryName, formatOptions, source, preferences, data)=>{ + const entryCompletionEntryDetails = _config.default.getCompletionEntryDetails(entryName, data, fileName); + if (entryCompletionEntryDetails) return entryCompletionEntryDetails; + return info.languageService.getCompletionEntryDetails(fileName, position, entryName, formatOptions, source, preferences, data); + }; + // Quick info + proxy.getQuickInfoAtPosition = (fileName, position)=>{ + const prior = info.languageService.getQuickInfoAtPosition(fileName, position); + if (!(0, _utils.isAppEntryFile)(fileName)) return prior; + // Remove type suggestions for disallowed APIs in server components. + const entryInfo = (0, _utils.getEntryInfo)(fileName); + if (!entryInfo.client) { + const definitions = info.languageService.getDefinitionAtPosition(fileName, position); + if (definitions && _server.default.hasDisallowedReactAPIDefinition(definitions)) { + return; + } + } + const overridden = _config.default.getQuickInfoAtPosition(fileName, position); + if (overridden) return overridden; + return prior; + }; + // Show errors for disallowed imports + proxy.getSemanticDiagnostics = (fileName)=>{ + const prior = info.languageService.getSemanticDiagnostics(fileName); + const source = (0, _utils.getSource)(fileName); + if (!source) return prior; + let isClientEntry = false; + let isServerEntry = false; + const isAppEntry = (0, _utils.isAppEntryFile)(fileName); + try { + const entryInfo = (0, _utils.getEntryInfo)(fileName, true); + isClientEntry = entryInfo.client; + isServerEntry = entryInfo.server; + } catch (e) { + prior.push({ + file: source, + category: ts.DiagnosticCategory.Error, + code: _constant.NEXT_TS_ERRORS.MISPLACED_ENTRY_DIRECTIVE, + ...e + }); + isClientEntry = false; + isServerEntry = false; + } + if ((0, _utils.isInsideApp)(fileName)) { + const errorDiagnostic = _error.default.getSemanticDiagnostics(source, isClientEntry); + prior.push(...errorDiagnostic); + } + ts.forEachChild(source, (node)=>{ + var _node_modifiers, _node_modifiers1; + if (ts.isImportDeclaration(node)) { + // import ... + if (isAppEntry) { + if (!isClientEntry || isServerEntry) { + // Check if it has valid imports in the server layer + const diagnostics = _server.default.getSemanticDiagnosticsForImportDeclaration(source, node); + prior.push(...diagnostics); + } + } + } else if (ts.isVariableStatement(node) && ((_node_modifiers = node.modifiers) == null ? void 0 : _node_modifiers.some((m)=>m.kind === ts.SyntaxKind.ExportKeyword))) { + // export const ... + if (isAppEntry) { + // Check if it has correct option exports + const diagnostics = _config.default.getSemanticDiagnosticsForExportVariableStatement(source, node); + const metadataDiagnostics = isClientEntry ? _metadata.default.client.getSemanticDiagnosticsForExportVariableStatement(fileName, node) : _metadata.default.server.getSemanticDiagnosticsForExportVariableStatement(fileName, node); + prior.push(...diagnostics, ...metadataDiagnostics); + } + if (isClientEntry) { + prior.push(..._clientboundary.default.getSemanticDiagnosticsForExportVariableStatement(source, node)); + } + if (isServerEntry) { + prior.push(..._serverboundary.default.getSemanticDiagnosticsForExportVariableStatement(source, node)); + } + } else if ((0, _utils.isDefaultFunctionExport)(node)) { + // export default function ... + if (isAppEntry) { + const diagnostics = _entry.default.getSemanticDiagnostics(fileName, source, node); + prior.push(...diagnostics); + } + if (isClientEntry) { + prior.push(..._clientboundary.default.getSemanticDiagnosticsForFunctionExport(source, node)); + } + if (isServerEntry) { + prior.push(..._serverboundary.default.getSemanticDiagnosticsForFunctionExport(source, node)); + } + } else if (ts.isFunctionDeclaration(node) && ((_node_modifiers1 = node.modifiers) == null ? void 0 : _node_modifiers1.some((m)=>m.kind === ts.SyntaxKind.ExportKeyword))) { + // export function ... + if (isAppEntry) { + const metadataDiagnostics = isClientEntry ? _metadata.default.client.getSemanticDiagnosticsForExportVariableStatement(fileName, node) : _metadata.default.server.getSemanticDiagnosticsForExportVariableStatement(fileName, node); + prior.push(...metadataDiagnostics); + } + if (isClientEntry) { + prior.push(..._clientboundary.default.getSemanticDiagnosticsForFunctionExport(source, node)); + } + if (isServerEntry) { + prior.push(..._serverboundary.default.getSemanticDiagnosticsForFunctionExport(source, node)); + } + } else if (ts.isExportDeclaration(node)) { + // export { ... } + if (isAppEntry) { + const metadataDiagnostics = isClientEntry ? _metadata.default.client.getSemanticDiagnosticsForExportDeclaration(fileName, node) : _metadata.default.server.getSemanticDiagnosticsForExportDeclaration(fileName, node); + prior.push(...metadataDiagnostics); + } + if (isServerEntry) { + prior.push(..._serverboundary.default.getSemanticDiagnosticsForExportDeclaration(source, node)); + } + } + }); + return prior; + }; + return proxy; + } + return { + create + }; +}; + +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/typescript/rules/client-boundary.js b/build/node_modules/next/dist/server/typescript/rules/client-boundary.js new file mode 100644 index 0000000..0f95d6a --- /dev/null +++ b/build/node_modules/next/dist/server/typescript/rules/client-boundary.js @@ -0,0 +1,97 @@ +// This module provides intellisense for all components that has the `"use client"` directive. +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "default", { + enumerable: true, + get: function() { + return _default; + } +}); +const _constant = require("../constant"); +const _utils = require("../utils"); +const clientBoundary = { + getSemanticDiagnosticsForExportVariableStatement (source, node) { + const ts = (0, _utils.getTs)(); + const diagnostics = []; + if (ts.isVariableDeclarationList(node.declarationList)) { + for (const declaration of node.declarationList.declarations){ + const initializer = declaration.initializer; + if (initializer && ts.isArrowFunction(initializer)) { + diagnostics.push(...clientBoundary.getSemanticDiagnosticsForFunctionExport(source, initializer)); + } + } + } + return diagnostics; + }, + getSemanticDiagnosticsForFunctionExport (source, node) { + var _node_parameters; + const ts = (0, _utils.getTs)(); + const typeChecker = (0, _utils.getTypeChecker)(); + if (!typeChecker) return []; + const diagnostics = []; + const isErrorFile = /[\\/]error\.tsx?$/.test(source.fileName); + const isGlobalErrorFile = /[\\/]global-error\.tsx?$/.test(source.fileName); + const props = (_node_parameters = node.parameters) == null ? void 0 : _node_parameters[0]; + if (props) { + var _propsType_symbol_getDeclarations, _propsType_symbol; + const propsType = typeChecker.getTypeAtLocation(props); + const typeNode = (_propsType_symbol = propsType.symbol) == null ? void 0 : (_propsType_symbol_getDeclarations = _propsType_symbol.getDeclarations()) == null ? void 0 : _propsType_symbol_getDeclarations[0]; + if (typeNode && ts.isTypeLiteralNode(typeNode)) { + for (const member of typeNode.members){ + if (ts.isPropertySignature(member)) { + const propName = member.name.getText(); + const propType = member.type; + if (propType) { + var _propTypeInfo_symbol_getDeclarations, _propTypeInfo_symbol; + const propTypeInfo = typeChecker.getTypeAtLocation(propType); + const typeDeclarationNode = (_propTypeInfo_symbol = propTypeInfo.symbol) == null ? void 0 : (_propTypeInfo_symbol_getDeclarations = _propTypeInfo_symbol.getDeclarations()) == null ? void 0 : _propTypeInfo_symbol_getDeclarations[0]; + if (typeDeclarationNode) { + if (ts.isFunctionTypeNode(typeDeclarationNode) || // someFunc(): void + ts.isMethodSignature(typeDeclarationNode)) { + // By convention, props named "action" can accept functions since we + // assume these are Server Actions. Structurally, there's no + // difference between a Server Action and a normal function until + // TypeScript exposes directives in the type of a function. This + // will miss accidentally passing normal functions but a false + // negative is better than a false positive given how frequent the + // false-positive would be. + const maybeServerAction = propName === 'action' || /.+Action$/.test(propName); + // There's a special case for the error file that the `reset` prop + // is allowed to be a function: + // https://github.com/vercel/next.js/issues/46573 + const isErrorReset = (isErrorFile || isGlobalErrorFile) && propName === 'reset'; + if (!maybeServerAction && !isErrorReset) { + diagnostics.push({ + file: source, + category: ts.DiagnosticCategory.Warning, + code: _constant.NEXT_TS_ERRORS.INVALID_CLIENT_ENTRY_PROP, + messageText: `Props must be serializable for components in the "use client" entry file. ` + `"${propName}" is a function that's not a Server Action. ` + `Rename "${propName}" either to "action" or have its name end with "Action" e.g. "${propName}Action" to indicate it is a Server Action.`, + start: propType.getStart(), + length: propType.getWidth() + }); + } + } else if (// Show warning for not serializable props. + ts.isConstructorTypeNode(typeDeclarationNode) || ts.isClassDeclaration(typeDeclarationNode)) { + diagnostics.push({ + file: source, + category: ts.DiagnosticCategory.Warning, + code: _constant.NEXT_TS_ERRORS.INVALID_CLIENT_ENTRY_PROP, + messageText: `Props must be serializable for components in the "use client" entry file, "${propName}" is invalid.`, + start: propType.getStart(), + length: propType.getWidth() + }); + } + } + } + } + } + } + } + return diagnostics; + } +}; +const _default = clientBoundary; + +//# sourceMappingURL=client-boundary.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/typescript/rules/config.js b/build/node_modules/next/dist/server/typescript/rules/config.js new file mode 100644 index 0000000..d30579e --- /dev/null +++ b/build/node_modules/next/dist/server/typescript/rules/config.js @@ -0,0 +1,512 @@ +// This module provides intellisense for page and layout's exported configs. +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "default", { + enumerable: true, + get: function() { + return _default; + } +}); +const _utils = require("../utils"); +const _constant = require("../constant"); +const API_DOCS = { + dynamic: { + description: 'The `dynamic` option provides a few ways to opt in or out of dynamic behavior.', + options: { + '"auto"': "Heuristic to cache as much as possible but doesn't prevent any component to opt-in to dynamic behavior.", + '"force-dynamic"': 'This disables all caching of fetches and always revalidates. (This is equivalent to `getServerSideProps`.)', + '"error"': 'This errors if any dynamic Hooks or fetches are used. (This is equivalent to `getStaticProps`.)', + '"force-static"': 'This forces caching of all fetches and returns empty values from `cookies`, `headers` and `useSearchParams`.' + }, + link: 'https://nextjs.org/docs/app/api-reference/file-conventions/route-segment-config#dynamic' + }, + fetchCache: { + description: "The `fetchCache` option controls how Next.js statically caches fetches. By default it statically caches fetches reachable before any dynamic Hooks are used, and it doesn't cache fetches that are discovered after that.", + options: { + '"force-no-store"': "This lets you intentionally opt-out of all caching of data. This option forces all fetches to be refetched every request even if the `cache: 'force-cache'` option is passed to `fetch()`.", + '"only-no-store"': "This lets you enforce that all data opts out of caching. This option makes `fetch()` reject with an error if `cache: 'force-cache'` is provided. It also changes the default to `no-store`.", + '"default-no-store"': "Allows any explicit `cache` option to be passed to `fetch()` but if `'default'`, or no option, is provided then it defaults to `'no-store'`. This means that even fetches before a dynamic Hook are considered dynamic.", + '"auto"': "This is the default option. It caches any fetches with the default `cache` option provided, that happened before a dynamic Hook is used and don't cache any such fetches if they're issued after a dynamic Hook.", + '"default-cache"': "Allows any explicit `cache` option to be passed to `fetch()` but if `'default'`, or no option, is provided then it defaults to `'force-cache'`. This means that even fetches before a dynamic Hook are considered dynamic.", + '"only-cache"': "This lets you enforce that all data opts into caching. This option makes `fetch()` reject with an error if `cache: 'force-cache'` is provided. It also changes the default to `force-cache`. This error can be discovered early during static builds - or dynamically during Edge rendering.", + '"force-cache"': "This lets you intentionally opt-in to all caching of data. This option forces all fetches to be cache even if the `cache: 'no-store'` option is passed to `fetch()`." + }, + link: 'https://nextjs.org/docs/app/api-reference/file-conventions/route-segment-config#fetchcache' + }, + preferredRegion: { + description: 'Specify the perferred region that this layout or page should be deployed to. If the region option is not specified, it inherits the option from the nearest parent layout. The root defaults to `"auto"`.\n\nYou can also specify a region, such as "iad1", or an array of regions, such as `["iad1", "sfo1"]`.', + options: { + '"auto"': 'Next.js will first deploy to the `"home"` region. Then if it doesn\'t detect any waterfall requests after a few requests, it can upgrade that route, to be deployed globally. If it detects any waterfall requests after that, it can eventually downgrade back to `"home`".', + '"global"': 'Prefer deploying globally.', + '"home"': 'Prefer deploying to the Home region.' + }, + link: 'https://nextjs.org/docs/app/api-reference/file-conventions/route-segment-config#preferredregion', + isValid: (value)=>{ + try { + const parsed = JSON.parse(value); + return typeof parsed === 'string' || Array.isArray(parsed) && !parsed.some((v)=>typeof v !== 'string'); + } catch (err) { + return false; + } + }, + getHint: (value)=>{ + if (value === 'auto') return `Automatically chosen by Next.js.`; + if (value === 'global') return `Prefer deploying globally.`; + if (value === 'home') return `Prefer deploying to the Home region.`; + if (Array.isArray(value)) return `Deploy to regions: ${value.join(', ')}.`; + if (typeof value === 'string') return `Deploy to region: ${value}.`; + } + }, + revalidate: { + description: "The `revalidate` option sets the default revalidation time for that layout or page. Note that it doesn't override the value specify by each `fetch()`.", + type: 'mixed', + options: { + false: 'This is the default and changes the fetch cache to indefinitely cache anything that uses force-cache or is fetched before a dynamic Hook/fetch.', + 0: 'Specifying `0` implies that this layout or page should never be static.', + 30: 'Set the revalidation time to `30` seconds. The value can be `0` or any positive number.' + }, + link: 'https://nextjs.org/docs/app/api-reference/file-conventions/route-segment-config#revalidate', + isValid: (value)=>{ + return value === 'false' || Number(value.replace(/_/g, '')) >= 0; + }, + getHint: (value)=>{ + return `Set the default revalidation time to \`${value}\` seconds.`; + } + }, + dynamicParams: { + description: '`dynamicParams` replaces the `fallback` option of `getStaticPaths`. It controls whether we allow `dynamicParams` beyond the generated static params from `generateStaticParams`.', + options: { + true: 'Allow rendering dynamic params that are not generated by `generateStaticParams`.', + false: 'Disallow rendering dynamic params that are not generated by `generateStaticParams`.' + }, + link: 'https://nextjs.org/docs/app/api-reference/file-conventions/route-segment-config#dynamicparams', + isValid: (value)=>{ + return value === 'true' || value === 'false'; + } + }, + runtime: { + description: 'The `runtime` option controls the preferred runtime to render this route.', + options: { + '"nodejs"': 'Prefer the Node.js runtime.', + '"edge"': 'Prefer the Edge runtime.', + '"experimental-edge"': `@deprecated\n\nThis option is no longer experimental. Use \`edge\` instead.` + }, + link: 'https://nextjs.org/docs/app/api-reference/file-conventions/route-segment-config#runtime' + }, + metadata: { + description: 'Next.js Metadata configurations', + link: 'https://nextjs.org/docs/app/building-your-application/optimizing/metadata', + insertText: 'metadata: Metadata = {};' + }, + generateMetadata: { + description: 'Next.js generateMetadata configurations', + link: 'https://nextjs.org/docs/app/api-reference/functions/generate-metadata', + insertText: 'generateMetadata = (): Metadata => { return {} };' + }, + maxDuration: { + description: '`maxDuration` allows you to set max default execution time for your function. If it is not specified, the default value is dependent on your deployment platform and plan.', + link: 'https://nextjs.org/docs/app/api-reference/file-conventions/route-segment-config#maxduration' + }, + unstable_instant: { + description: `Specifies the default prefetching behavior for this segment. This configuration is currently under development and will change.`, + link: '(docs coming soon)', + type: 'object | false', + // TODO: ideally, we'd validate the config object somehow, but this is difficult to do + // with the way this plugin is currently structured. + // For now, since we don't provide an `options` here, we won't do any validation in + // `getSemanticDiagnosticsForExportVariableStatement` below, and only provide hover a tooltip + autocomplete. + insertText: 'unstable_instant = { prefetch: "static" };' + }, + unstable_dynamicStaleTime: { + description: `Controls how long the client-side router cache retains dynamic page data (in seconds). Pages only — not allowed in layouts. Cannot be combined with \`unstable_instant\`.`, + link: '(docs coming soon)', + type: 'number', + isValid: (value)=>{ + return Number(value.replace(/_/g, '')) >= 0; + }, + getHint: (value)=>{ + return `Set the dynamic stale time to \`${value}\` seconds.`; + } + } +}; +function visitEntryConfig(fileName, position, callback) { + const source = (0, _utils.getSource)(fileName); + if (source) { + const ts = (0, _utils.getTs)(); + ts.forEachChild(source, function visit(node) { + // Covered by this node + if ((0, _utils.isPositionInsideNode)(position, node)) { + var _node_modifiers; + // Export variable + if (ts.isVariableStatement(node) && ((_node_modifiers = node.modifiers) == null ? void 0 : _node_modifiers.some((m)=>m.kind === ts.SyntaxKind.ExportKeyword))) { + if (ts.isVariableDeclarationList(node.declarationList)) { + for (const declaration of node.declarationList.declarations){ + if ((0, _utils.isPositionInsideNode)(position, declaration)) { + // `export const ... = ...` + const text = declaration.name.getText(); + callback(text, declaration); + } + } + } + } + } + }); + } +} +function createAutoCompletionOptionName(sort, name) { + const ts = (0, _utils.getTs)(); + return { + name, + insertText: API_DOCS[name].insertText, + sortText: '!' + sort, + kind: ts.ScriptElementKind.constElement, + kindModifiers: ts.ScriptElementKindModifier.exportedModifier, + labelDetails: { + description: `Next.js ${name} option` + }, + data: { + exportName: name, + moduleSpecifier: 'next/typescript/entry_option_name' + } + }; +} +function createAutoCompletionOptionValue(sort, name, apiName) { + const ts = (0, _utils.getTs)(); + const isString = name.startsWith('"'); + return { + name, + insertText: (0, _utils.removeStringQuotes)(name), + sortText: '' + sort, + kind: isString ? ts.ScriptElementKind.string : ts.ScriptElementKind.unknown, + kindModifiers: ts.ScriptElementKindModifier.none, + labelDetails: { + description: `Next.js ${apiName} option` + }, + data: { + exportName: apiName, + moduleSpecifier: 'next/typescript/entry_option_value' + } + }; +} +function getAPIDescription(api) { + return API_DOCS[api].description + '\n\n' + Object.entries(API_DOCS[api].options || {}).map(([key, value])=>`- \`${key}\`: ${value}`).join('\n'); +} +const config = { + // Auto completion for entry exported configs. + addCompletionsAtPosition (fileName, position, prior) { + visitEntryConfig(fileName, position, (entryConfig, declaration)=>{ + if (!API_DOCS[entryConfig]) { + if ((0, _utils.isPositionInsideNode)(position, declaration.name)) { + prior.entries.push(...Object.keys(API_DOCS).map((name, index)=>{ + return createAutoCompletionOptionName(index, name); + })); + } + return; + } + prior.entries.push(...Object.keys(API_DOCS[entryConfig].options || {}).map((name, index)=>{ + return createAutoCompletionOptionValue(index, name, entryConfig); + })); + }); + }, + // Show docs when hovering on the exported configs. + getQuickInfoAtPosition (fileName, position) { + const ts = (0, _utils.getTs)(); + let overridden; + visitEntryConfig(fileName, position, (entryConfig, declaration)=>{ + if (!API_DOCS[entryConfig]) return; + const name = declaration.name; + const value = declaration.initializer; + const docsLink = { + kind: 'text', + text: `\n\nRead more about the "${entryConfig}" option: ` + API_DOCS[entryConfig].link + }; + // When the value is a flexible type (like a function), also compute its + // inferred type so we can surface it alongside the docs. This is useful + // even when the value is considered invalid by the config validation, + // as long as it's not a direct literal export. + let displayParts = []; + const typeChecker = (0, _utils.getTypeChecker)(); + const isString = !!value && ts.isStringLiteral(value); + const isFunctionValue = !!value && !isString && (ts.isArrowFunction(value) || ts.isFunctionExpression(value) || ts.isFunctionDeclaration(value)); + if (typeChecker && value && isFunctionValue) { + try { + // If we're hovering the config identifier, ask for the type at the + // identifier; otherwise, ask at the value node. This makes sure + // highlighting `generateMetadata` itself also shows the inferred type. + const typeTarget = (0, _utils.isPositionInsideNode)(position, name) ? name : value; + const type = typeChecker.getTypeAtLocation(typeTarget); + if (type) { + const typeString = typeChecker.typeToString(type, typeTarget); + if (typeString) { + displayParts = [ + { + text: typeString, + kind: 'typeName' + } + ]; + } + } + } catch { + // If type checking fails, continue without type info. + } + } + // For non-function values (like literals), hovering the value should show + // option-specific docs. For function-valued configs (e.g. `generateMetadata`), + // we let TypeScript handle hover anywhere in the initializer except for the + // export identifier itself. + if (value && !isFunctionValue && (0, _utils.isPositionInsideNode)(position, value)) { + var _API_DOCS_entryConfig_isValid, _API_DOCS_entryConfig, _API_DOCS_entryConfig_options; + // Hovering the value of the config + const text = (0, _utils.removeStringQuotes)(value.getText()); + const key = isString ? `"${text}"` : text; + const isValid = API_DOCS[entryConfig].isValid ? (_API_DOCS_entryConfig_isValid = (_API_DOCS_entryConfig = API_DOCS[entryConfig]).isValid) == null ? void 0 : _API_DOCS_entryConfig_isValid.call(_API_DOCS_entryConfig, key) : !!((_API_DOCS_entryConfig_options = API_DOCS[entryConfig].options) == null ? void 0 : _API_DOCS_entryConfig_options[key]); + if (isValid) { + var _API_DOCS_entryConfig_options1, _API_DOCS_entryConfig_getHint, _API_DOCS_entryConfig1; + overridden = { + kind: ts.ScriptElementKind.enumElement, + kindModifiers: ts.ScriptElementKindModifier.none, + textSpan: { + start: value.getStart(), + length: value.getWidth() + }, + displayParts: [], + documentation: [ + { + kind: 'text', + text: ((_API_DOCS_entryConfig_options1 = API_DOCS[entryConfig].options) == null ? void 0 : _API_DOCS_entryConfig_options1[key]) || ((_API_DOCS_entryConfig_getHint = (_API_DOCS_entryConfig1 = API_DOCS[entryConfig]).getHint) == null ? void 0 : _API_DOCS_entryConfig_getHint.call(_API_DOCS_entryConfig1, key)) || '' + }, + docsLink + ] + }; + } else { + // Wrong value: still show the docs link, and when available, the + // inferred type for non-literal (i.e. non-direct) exports. + overridden = { + kind: ts.ScriptElementKind.enumElement, + kindModifiers: ts.ScriptElementKindModifier.none, + textSpan: { + start: value.getStart(), + length: value.getWidth() + }, + displayParts, + documentation: [ + docsLink + ] + }; + } + } else { + // For function-valued configs, if we're hovering anywhere within the + // initializer (including `async`, parameters, or the body) but not on + // the export identifier itself, don't override TypeScript's default + // hover. We only want to override when hovering the config identifier + // (e.g. `generateMetadata`), not arbitrary tokens within the function. + if (isFunctionValue && (0, _utils.isPositionInsideNode)(position, value) && // hover is somewhere within the function initializer + !(0, _utils.isPositionInsideNode)(position, name) // ...but not on the export identifier itself + ) { + return; + } + // Hovers the name of the config + overridden = { + kind: ts.ScriptElementKind.enumElement, + kindModifiers: ts.ScriptElementKindModifier.none, + textSpan: { + start: name.getStart(), + length: name.getWidth() + }, + displayParts, + documentation: [ + { + kind: 'text', + text: getAPIDescription(entryConfig) + }, + docsLink + ] + }; + } + }); + return overridden; + }, + // Show details on the side when auto completing. + getCompletionEntryDetails (entryName, data, fileName) { + const ts = (0, _utils.getTs)(); + if (data && data.moduleSpecifier && data.moduleSpecifier.startsWith('next/typescript')) { + let content = ''; + if (data.moduleSpecifier === 'next/typescript/entry_option_name') { + content = getAPIDescription(entryName); + } else { + const options = API_DOCS[data.exportName].options; + if (!options) return; + content = options[entryName]; + } + if (entryName === 'metadata' || entryName === 'generateMetadata') { + const sourceFile = (0, _utils.getSource)(fileName); + let start = 0; + let foundMetadataImport = false; + if (sourceFile) { + const visitor = (node)=>{ + // Check for top directive + if (ts.isExpressionStatement(node) && ts.isStringLiteral(node.expression) && node.expression.getStart() === 0) { + const text = node.expression.text; + if (text.startsWith('use ')) { + start = node.end + 1; + return node // Continue traversal + ; + } + } + // Check for Metadata import + if (ts.isImportDeclaration(node) && (node.moduleSpecifier.getText() === '"next"' || node.moduleSpecifier.getText() === "'next'")) { + var _node_importClause; + const namedImports = (_node_importClause = node.importClause) == null ? void 0 : _node_importClause.namedBindings; + if (namedImports && ts.isNamedImports(namedImports)) { + foundMetadataImport = namedImports.elements.some((element)=>{ + var _element_propertyName; + const name = element.name.getText(); + const propertyName = (_element_propertyName = element.propertyName) == null ? void 0 : _element_propertyName.getText(); + return name === 'Metadata' || propertyName === 'Metadata'; + }); + if (foundMetadataImport) { + return; // Stop traversal + } + } + } + return node; + }; + for (const statement of sourceFile.statements){ + if (foundMetadataImport) break; + ts.visitNode(statement, visitor); + } + } + return { + name: entryName, + kind: ts.ScriptElementKind.enumElement, + kindModifiers: ts.ScriptElementKindModifier.none, + displayParts: [], + codeActions: foundMetadataImport ? undefined : [ + { + description: `Import type 'Metadata' from module 'next'`, + changes: [ + { + fileName, + textChanges: [ + { + span: { + start, + length: 0 + }, + newText: `import type { Metadata } from 'next';\n` + } + ] + } + ] + } + ], + documentation: [ + { + kind: 'text', + text: content + } + ] + }; + } + return { + name: entryName, + kind: ts.ScriptElementKind.enumElement, + kindModifiers: ts.ScriptElementKindModifier.none, + displayParts: [], + documentation: [ + { + kind: 'text', + text: content + } + ] + }; + } + }, + // Show errors for invalid export fields. + getSemanticDiagnosticsForExportVariableStatement (source, node) { + const ts = (0, _utils.getTs)(); + const diagnostics = []; + // Check if it has correct option exports + if (ts.isVariableDeclarationList(node.declarationList)) { + for (const declaration of node.declarationList.declarations){ + const name = declaration.name; + if (ts.isIdentifier(name)) { + if (!_constant.ALLOWED_EXPORTS.includes(name.text) && !API_DOCS[name.text]) { + diagnostics.push({ + file: source, + category: ts.DiagnosticCategory.Error, + code: _constant.NEXT_TS_ERRORS.INVALID_ENTRY_EXPORT, + messageText: `"${name.text}" is not a valid Next.js entry export value.`, + start: name.getStart(), + length: name.getWidth() + }); + } else if (API_DOCS[name.text]) { + // Check if the value is valid + const value = declaration.initializer; + const options = API_DOCS[name.text].options; + if (value && options) { + let displayedValue = ''; + let errorMessage = ''; + let isInvalid = false; + if (ts.isStringLiteral(value) || ts.isNoSubstitutionTemplateLiteral(value)) { + var _API_DOCS_name_text_isValid, _API_DOCS_name_text; + const val = '"' + (0, _utils.removeStringQuotes)(value.getText()) + '"'; + const allowedValues = Object.keys(options).filter((v)=>/^['"]/.test(v)); + if (!allowedValues.includes(val) && !((_API_DOCS_name_text_isValid = (_API_DOCS_name_text = API_DOCS[name.text]).isValid) == null ? void 0 : _API_DOCS_name_text_isValid.call(_API_DOCS_name_text, val))) { + isInvalid = true; + displayedValue = val; + } + } else if (ts.isNumericLiteral(value) || ts.isPrefixUnaryExpression(value) && ts.isMinusToken(value.operator) && (ts.isNumericLiteral(value.operand.kind) || ts.isIdentifier(value.operand.kind) && value.operand.kind.getText() === 'Infinity') || ts.isIdentifier(value) && value.getText() === 'Infinity') { + var _API_DOCS_name_text_isValid1, _API_DOCS_name_text1; + const v = value.getText(); + if (!((_API_DOCS_name_text_isValid1 = (_API_DOCS_name_text1 = API_DOCS[name.text]).isValid) == null ? void 0 : _API_DOCS_name_text_isValid1.call(_API_DOCS_name_text1, v))) { + isInvalid = true; + displayedValue = v; + } + } else if (value.kind === ts.SyntaxKind.TrueKeyword || value.kind === ts.SyntaxKind.FalseKeyword) { + var _API_DOCS_name_text_isValid2, _API_DOCS_name_text2; + const v = value.getText(); + if (!((_API_DOCS_name_text_isValid2 = (_API_DOCS_name_text2 = API_DOCS[name.text]).isValid) == null ? void 0 : _API_DOCS_name_text_isValid2.call(_API_DOCS_name_text2, v))) { + isInvalid = true; + displayedValue = v; + } + } else if (ts.isArrayLiteralExpression(value)) { + var _API_DOCS_name_text_isValid3, _API_DOCS_name_text3; + const v = value.getText(); + if (!((_API_DOCS_name_text_isValid3 = (_API_DOCS_name_text3 = API_DOCS[name.text]).isValid) == null ? void 0 : _API_DOCS_name_text_isValid3.call(_API_DOCS_name_text3, JSON.stringify(value.elements.map((e)=>e.getText()))))) { + isInvalid = true; + displayedValue = v; + } + } else if (// Other literals + ts.isBigIntLiteral(value) || ts.isObjectLiteralExpression(value) || ts.isRegularExpressionLiteral(value) || ts.isPrefixUnaryExpression(value)) { + isInvalid = true; + displayedValue = value.getText(); + } else { + // Not a literal, error because it's not statically analyzable + isInvalid = true; + displayedValue = value.getText(); + errorMessage = `"${displayedValue}" is not a valid value for the "${name.text}" option. The configuration must be statically analyzable.`; + } + if (isInvalid) { + diagnostics.push({ + file: source, + category: ts.DiagnosticCategory.Error, + code: _constant.NEXT_TS_ERRORS.INVALID_OPTION_VALUE, + messageText: errorMessage || `"${displayedValue}" is not a valid value for the "${name.text}" option.`, + start: value.getStart(), + length: value.getWidth() + }); + } + } + } + } + } + } + return diagnostics; + } +}; +const _default = config; + +//# sourceMappingURL=config.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/typescript/rules/entry.js b/build/node_modules/next/dist/server/typescript/rules/entry.js new file mode 100644 index 0000000..ad74944 --- /dev/null +++ b/build/node_modules/next/dist/server/typescript/rules/entry.js @@ -0,0 +1,149 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "default", { + enumerable: true, + get: function() { + return _default; + } +}); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _fs = /*#__PURE__*/ _interop_require_default(require("fs")); +const _constant = require("../constant"); +const _utils = require("../utils"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const entry = { + // Give auto completion for the component's props + getCompletionsAtPosition (fileName, node, position) { + var _node_parameters; + const ts = (0, _utils.getTs)(); + const entries = []; + // Default export function might not accept parameters + const paramNode = (_node_parameters = node.parameters) == null ? void 0 : _node_parameters[0]; + if (paramNode && (0, _utils.isPositionInsideNode)(position, paramNode)) { + const props = paramNode == null ? void 0 : paramNode.name; + if (props && ts.isObjectBindingPattern(props)) { + let validProps = []; + let validPropsWithType = []; + let type; + if ((0, _utils.isPageFile)(fileName)) { + // For page entries (page.js), it can only have `params` and `searchParams` + // as the prop names. + validProps = _constant.ALLOWED_PAGE_PROPS; + validPropsWithType = _constant.ALLOWED_PAGE_PROPS; + type = 'page'; + } else { + // For layout entires, check if it has any named slots. + const currentDir = _path.default.dirname(fileName); + const items = _fs.default.readdirSync(currentDir, { + withFileTypes: true + }); + const slots = []; + for (const item of items){ + if (item.isDirectory() && item.name.startsWith('@')) { + slots.push(item.name.slice(1)); + } + } + validProps = _constant.ALLOWED_LAYOUT_PROPS.concat(slots); + validPropsWithType = _constant.ALLOWED_LAYOUT_PROPS.concat(slots.map((s)=>`${s}: React.ReactNode`)); + type = 'layout'; + } + // Auto completion for props + for (const element of props.elements){ + if ((0, _utils.isPositionInsideNode)(position, element)) { + const nameNode = element.propertyName || element.name; + if ((0, _utils.isPositionInsideNode)(position, nameNode)) { + for (const name of validProps){ + entries.push({ + name, + insertText: name, + sortText: '_' + name, + kind: ts.ScriptElementKind.memberVariableElement, + kindModifiers: ts.ScriptElementKindModifier.none, + labelDetails: { + description: `Next.js ${type} prop` + } + }); + } + } + break; + } + } + // Auto completion for types + if (paramNode.type && ts.isTypeLiteralNode(paramNode.type)) { + for (const member of paramNode.type.members){ + if ((0, _utils.isPositionInsideNode)(position, member)) { + for (const name of validPropsWithType){ + entries.push({ + name, + insertText: name, + sortText: '_' + name, + kind: ts.ScriptElementKind.memberVariableElement, + kindModifiers: ts.ScriptElementKindModifier.none, + labelDetails: { + description: `Next.js ${type} prop type` + } + }); + } + break; + } + } + } + } + } + return entries; + }, + // Give error diagnostics for the component + getSemanticDiagnostics (fileName, source, node) { + var _node_parameters_, _node_parameters; + const ts = (0, _utils.getTs)(); + let validProps = []; + let type; + if ((0, _utils.isPageFile)(fileName)) { + // For page entries (page.js), it can only have `params` and `searchParams` + // as the prop names. + validProps = _constant.ALLOWED_PAGE_PROPS; + type = 'page'; + } else { + // For layout entires, check if it has any named slots. + const currentDir = _path.default.dirname(fileName); + const items = _fs.default.readdirSync(currentDir, { + withFileTypes: true + }); + const slots = []; + for (const item of items){ + if (item.isDirectory() && item.name.startsWith('@')) { + slots.push(item.name.slice(1)); + } + } + validProps = _constant.ALLOWED_LAYOUT_PROPS.concat(slots); + type = 'layout'; + } + const diagnostics = []; + const props = (_node_parameters = node.parameters) == null ? void 0 : (_node_parameters_ = _node_parameters[0]) == null ? void 0 : _node_parameters_.name; + if (props && ts.isObjectBindingPattern(props)) { + for (const prop of props.elements){ + const propName = (prop.propertyName || prop.name).getText(); + if (!validProps.includes(propName)) { + diagnostics.push({ + file: source, + category: ts.DiagnosticCategory.Error, + code: _constant.NEXT_TS_ERRORS.INVALID_PAGE_PROP, + messageText: `"${propName}" is not a valid ${type} prop.`, + start: prop.getStart(), + length: prop.getWidth() + }); + } + } + } + return diagnostics; + } +}; +const _default = entry; + +//# sourceMappingURL=entry.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/typescript/rules/error.js b/build/node_modules/next/dist/server/typescript/rules/error.js new file mode 100644 index 0000000..372d6e3 --- /dev/null +++ b/build/node_modules/next/dist/server/typescript/rules/error.js @@ -0,0 +1,38 @@ +// This module provides intellisense for all components that has the `"use client"` directive. +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "default", { + enumerable: true, + get: function() { + return _default; + } +}); +const _constant = require("../constant"); +const _utils = require("../utils"); +const errorEntry = { + getSemanticDiagnostics (source, isClientEntry) { + const isErrorFile = /[\\/]error\.tsx?$/.test(source.fileName); + const isGlobalErrorFile = /[\\/]global-error\.tsx?$/.test(source.fileName); + if (!isErrorFile && !isGlobalErrorFile) return []; + const ts = (0, _utils.getTs)(); + if (!isClientEntry) { + // Error components must be Client Components + return [ + { + file: source, + category: ts.DiagnosticCategory.Error, + code: _constant.NEXT_TS_ERRORS.INVALID_ERROR_COMPONENT, + messageText: `Error Components must be Client Components, please add the "use client" directive: https://nextjs.org/docs/app/api-reference/file-conventions/error`, + start: 0, + length: source.text.length + } + ]; + } + return []; + } +}; +const _default = errorEntry; + +//# sourceMappingURL=error.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/typescript/rules/metadata.js b/build/node_modules/next/dist/server/typescript/rules/metadata.js new file mode 100644 index 0000000..921cf3e --- /dev/null +++ b/build/node_modules/next/dist/server/typescript/rules/metadata.js @@ -0,0 +1,234 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "default", { + enumerable: true, + get: function() { + return _default; + } +}); +const _constant = require("../constant"); +const _utils = require("../utils"); +const metadata = { + client: { + getSemanticDiagnosticsForExportVariableStatement (fileName, node) { + const source = (0, _utils.getSource)(fileName); + const ts = (0, _utils.getTs)(); + // It is not allowed to export `metadata` or `generateMetadata` in client entry + if (ts.isFunctionDeclaration(node)) { + var _node_name; + if (((_node_name = node.name) == null ? void 0 : _node_name.getText()) === 'generateMetadata') { + return [ + { + file: source, + category: ts.DiagnosticCategory.Error, + code: _constant.NEXT_TS_ERRORS.INVALID_METADATA_EXPORT, + messageText: `The Next.js 'generateMetadata' API is not allowed in a Client Component.`, + start: node.name.getStart(), + length: node.name.getWidth() + } + ]; + } + } else { + for (const declaration of node.declarationList.declarations){ + const name = declaration.name.getText(); + if (name === 'metadata') { + return [ + { + file: source, + category: ts.DiagnosticCategory.Error, + code: _constant.NEXT_TS_ERRORS.INVALID_METADATA_EXPORT, + messageText: `The Next.js 'metadata' API is not allowed in a Client Component.`, + start: declaration.name.getStart(), + length: declaration.name.getWidth() + } + ]; + } + } + } + return []; + }, + getSemanticDiagnosticsForExportDeclaration (fileName, node) { + const ts = (0, _utils.getTs)(); + const source = (0, _utils.getSource)(fileName); + const diagnostics = []; + const exportClause = node.exportClause; + if (exportClause && ts.isNamedExports(exportClause)) { + for (const e of exportClause.elements){ + if ([ + 'generateMetadata', + 'metadata' + ].includes(e.name.getText())) { + diagnostics.push({ + file: source, + category: ts.DiagnosticCategory.Error, + code: _constant.NEXT_TS_ERRORS.INVALID_METADATA_EXPORT, + messageText: `The Next.js '${e.name.getText()}' API is not allowed in a Client Component.`, + start: e.name.getStart(), + length: e.name.getWidth() + }); + } + } + } + return diagnostics; + } + }, + server: { + getSemanticDiagnosticsForExportVariableStatement (fileName, node) { + const source = (0, _utils.getSource)(fileName); + const ts = (0, _utils.getTs)(); + if (ts.isFunctionDeclaration(node)) { + var _node_name; + if (((_node_name = node.name) == null ? void 0 : _node_name.getText()) === 'generateMetadata') { + var _node_modifiers; + if (hasType(node)) { + return []; + } + const isAsync = (_node_modifiers = node.modifiers) == null ? void 0 : _node_modifiers.some((m)=>m.kind === ts.SyntaxKind.AsyncKeyword); + return [ + { + file: source, + category: ts.DiagnosticCategory.Warning, + code: _constant.NEXT_TS_ERRORS.INVALID_METADATA_EXPORT, + messageText: `The Next.js "generateMetadata" export should have a return type of ${isAsync ? '"Promise"' : '"Metadata"'} from "next".`, + start: node.name.getStart(), + length: node.name.getWidth() + } + ]; + } + } else { + for (const declaration of node.declarationList.declarations){ + if (hasType(declaration)) { + return []; + } + const name = declaration.name.getText(); + if (name === 'metadata') { + return [ + { + file: source, + category: ts.DiagnosticCategory.Warning, + code: _constant.NEXT_TS_ERRORS.INVALID_METADATA_EXPORT, + messageText: `The Next.js "metadata" export should be type of "Metadata" from "next".`, + start: declaration.name.getStart(), + length: declaration.name.getWidth() + } + ]; + } + if (name === 'generateMetadata') { + // Check if it's a function expression or arrow function + if (declaration.initializer && (ts.isFunctionExpression(declaration.initializer) || ts.isArrowFunction(declaration.initializer))) { + var _declaration_initializer_modifiers; + const isAsync = (_declaration_initializer_modifiers = declaration.initializer.modifiers) == null ? void 0 : _declaration_initializer_modifiers.some((m)=>m.kind === ts.SyntaxKind.AsyncKeyword); + return [ + { + file: source, + category: ts.DiagnosticCategory.Warning, + code: _constant.NEXT_TS_ERRORS.INVALID_METADATA_EXPORT, + messageText: `The Next.js "generateMetadata" export should have a return type of ${isAsync ? '"Promise"' : '"Metadata"'} from "next".`, + start: declaration.name.getStart(), + length: declaration.name.getWidth() + } + ]; + } + } + } + } + return []; + }, + getSemanticDiagnosticsForExportDeclaration (fileName, node) { + const typeChecker = (0, _utils.getTypeChecker)(); + if (!typeChecker) { + return []; + } + const ts = (0, _utils.getTs)(); + const source = (0, _utils.getSource)(fileName); + const diagnostics = []; + const exportClause = node.exportClause; + if (!node.isTypeOnly && exportClause && ts.isNamedExports(exportClause)) { + for (const e of exportClause.elements){ + if (e.isTypeOnly) { + continue; + } + const exportName = e.name.getText(); + if (exportName !== 'metadata' && exportName !== 'generateMetadata') { + continue; + } + const symbol = typeChecker.getSymbolAtLocation(e.name); + if (!symbol) { + continue; + } + const originalSymbol = typeChecker.getAliasedSymbol(symbol); + const declarations = originalSymbol.getDeclarations(); + if (!declarations) { + continue; + } + const declaration = declarations[0]; + if (hasType(declaration)) { + continue; + } + if (exportName === 'generateMetadata') { + let isAsync = false; + // async function() {} + if (ts.isFunctionDeclaration(declaration)) { + var _declaration_modifiers; + isAsync = ((_declaration_modifiers = declaration.modifiers) == null ? void 0 : _declaration_modifiers.some((m)=>m.kind === ts.SyntaxKind.AsyncKeyword)) ?? false; + } + // foo = async function() {} + // foo = async () => {} + if (ts.isVariableDeclaration(declaration) && declaration.initializer) { + const initializer = declaration.initializer; + const isFunction = ts.isArrowFunction(initializer) || ts.isFunctionExpression(initializer); + if (isFunction) { + var _initializer_modifiers; + isAsync = ((_initializer_modifiers = initializer.modifiers) == null ? void 0 : _initializer_modifiers.some((m)=>m.kind === ts.SyntaxKind.AsyncKeyword)) ?? false; + } + } + diagnostics.push({ + file: source, + category: ts.DiagnosticCategory.Warning, + code: _constant.NEXT_TS_ERRORS.INVALID_METADATA_EXPORT, + messageText: `The Next.js "generateMetadata" export should have a return type of ${isAsync ? '"Promise"' : '"Metadata"'} from "next".`, + start: e.name.getStart(), + length: e.name.getWidth() + }); + } else { + diagnostics.push({ + file: source, + category: ts.DiagnosticCategory.Warning, + code: _constant.NEXT_TS_ERRORS.INVALID_METADATA_EXPORT, + messageText: `The Next.js "metadata" export should be type of "Metadata" from "next".`, + start: e.name.getStart(), + length: e.name.getWidth() + }); + } + } + } + return diagnostics; + } + } +}; +function hasType(node) { + const ts = (0, _utils.getTs)(); + if (!ts.isVariableDeclaration(node) && !ts.isFunctionDeclaration(node) && !ts.isArrowFunction(node) && !ts.isFunctionExpression(node)) { + return false; + } + // For function declarations, expressions, and arrow functions, check if they have return type + if (ts.isFunctionDeclaration(node) || ts.isFunctionExpression(node) || ts.isArrowFunction(node)) { + return !!node.type; + } + // For variable declarations + if (!node.name) return false; + const name = node.name.getText(); + if (name === 'generateMetadata') { + // If it's a function expression or arrow function, check if it has return type + if (node.initializer && (ts.isFunctionExpression(node.initializer) || ts.isArrowFunction(node.initializer))) { + return !!node.initializer.type; + } + } + // For all other cases, check if the node has a type annotation + return !!node.type; +} +const _default = metadata; + +//# sourceMappingURL=metadata.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/typescript/rules/server-boundary.js b/build/node_modules/next/dist/server/typescript/rules/server-boundary.js new file mode 100644 index 0000000..6884b0b --- /dev/null +++ b/build/node_modules/next/dist/server/typescript/rules/server-boundary.js @@ -0,0 +1,115 @@ +// This module provides intellisense for all exports from `"use server"` directive. +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "default", { + enumerable: true, + get: function() { + return _default; + } +}); +const _constant = require("../constant"); +const _utils = require("../utils"); +// Check if the type is `Promise`. +function isPromiseType(type, typeChecker) { + const typeReferenceType = type; + if (!typeReferenceType.target) return false; + // target should be Promise or Promise<...> + if (!/^Promise(<.+>)?$/.test(typeChecker.typeToString(typeReferenceType.target))) { + return false; + } + return true; +} +function isFunctionReturningPromise(node, typeChecker, ts) { + const type = typeChecker.getTypeAtLocation(node); + const signatures = typeChecker.getSignaturesOfType(type, ts.SignatureKind.Call); + let isPromise = true; + if (signatures.length) { + for (const signature of signatures){ + const returnType = signature.getReturnType(); + if (returnType.isUnion()) { + for (const t of returnType.types){ + if (!isPromiseType(t, typeChecker)) { + isPromise = false; + break; + } + } + } else { + isPromise = isPromiseType(returnType, typeChecker); + } + } + } else { + isPromise = false; + } + return isPromise; +} +const serverBoundary = { + getSemanticDiagnosticsForExportDeclaration (source, node) { + const ts = (0, _utils.getTs)(); + const typeChecker = (0, _utils.getTypeChecker)(); + if (!typeChecker) return []; + const diagnostics = []; + const exportClause = node.exportClause; + if (!node.isTypeOnly && exportClause && ts.isNamedExports(exportClause)) { + for (const e of exportClause.elements){ + if (e.isTypeOnly) { + continue; + } + if (!isFunctionReturningPromise(e, typeChecker, ts)) { + diagnostics.push({ + file: source, + category: ts.DiagnosticCategory.Error, + code: _constant.NEXT_TS_ERRORS.INVALID_SERVER_ENTRY_RETURN, + messageText: `The "use server" file can only export async functions.`, + start: e.getStart(), + length: e.getWidth() + }); + } + } + } + return diagnostics; + }, + getSemanticDiagnosticsForExportVariableStatement (source, node) { + const ts = (0, _utils.getTs)(); + const diagnostics = []; + if (ts.isVariableDeclarationList(node.declarationList)) { + for (const declaration of node.declarationList.declarations){ + const initializer = declaration.initializer; + if (initializer && (ts.isArrowFunction(initializer) || ts.isFunctionDeclaration(initializer) || ts.isFunctionExpression(initializer) || ts.isCallExpression(initializer) || ts.isIdentifier(initializer))) { + diagnostics.push(...serverBoundary.getSemanticDiagnosticsForFunctionExport(source, initializer)); + } else { + diagnostics.push({ + file: source, + category: ts.DiagnosticCategory.Error, + code: _constant.NEXT_TS_ERRORS.INVALID_SERVER_ENTRY_RETURN, + messageText: `The "use server" file can only export async functions.`, + start: declaration.getStart(), + length: declaration.getWidth() + }); + } + } + } + return diagnostics; + }, + getSemanticDiagnosticsForFunctionExport (source, node) { + const ts = (0, _utils.getTs)(); + const typeChecker = (0, _utils.getTypeChecker)(); + if (!typeChecker) return []; + const diagnostics = []; + if (!isFunctionReturningPromise(node, typeChecker, ts)) { + diagnostics.push({ + file: source, + category: ts.DiagnosticCategory.Error, + code: _constant.NEXT_TS_ERRORS.INVALID_SERVER_ENTRY_RETURN, + messageText: `The "use server" file can only export async functions. Add "async" to the function declaration or return a Promise.`, + start: node.getStart(), + length: node.getWidth() + }); + } + return diagnostics; + } +}; +const _default = serverBoundary; + +//# sourceMappingURL=server-boundary.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/typescript/rules/server.js b/build/node_modules/next/dist/server/typescript/rules/server.js new file mode 100644 index 0000000..bca5eaf --- /dev/null +++ b/build/node_modules/next/dist/server/typescript/rules/server.js @@ -0,0 +1,79 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "default", { + enumerable: true, + get: function() { + return _default; + } +}); +const _constant = require("../constant"); +const _utils = require("../utils"); +const serverLayer = { + // On the server layer we need to filter out some invalid completion results. + filterCompletionsAtPosition (entries) { + return entries.filter((e)=>{ + // Remove disallowed React APIs. + if (_constant.DISALLOWED_SERVER_REACT_APIS.includes(e.name) && e.source === 'react') { + return false; + } + return true; + }); + }, + // Filter out quick info for some React APIs. + hasDisallowedReactAPIDefinition (definitions) { + return definitions == null ? void 0 : definitions.some((d)=>_constant.DISALLOWED_SERVER_REACT_APIS.includes(d.name) && d.containerName === 'React'); + }, + // Give errors about disallowed imports such as `useState`. + getSemanticDiagnosticsForImportDeclaration (source, node) { + const ts = (0, _utils.getTs)(); + const diagnostics = []; + const importPath = node.moduleSpecifier.getText(source); + const importClause = node.importClause; + const namedBindings = importClause == null ? void 0 : importClause.namedBindings; + if (importClause) { + if (/^['"]react['"]$/.test(importPath)) { + // Check if it imports "useState" + if (namedBindings && ts.isNamedImports(namedBindings)) { + const elements = namedBindings.elements; + for (const element of elements){ + const name = element.name.getText(source); + if (_constant.DISALLOWED_SERVER_REACT_APIS.includes(name)) { + diagnostics.push({ + file: source, + category: ts.DiagnosticCategory.Error, + code: _constant.NEXT_TS_ERRORS.INVALID_SERVER_API, + messageText: `"${name}" is not allowed in Server Components.`, + start: element.name.getStart(), + length: element.name.getWidth() + }); + } + } + } + } else if (/^['"]react-dom['"]$/.test(importPath)) { + // Check if it imports "useFormState" + if (namedBindings && ts.isNamedImports(namedBindings)) { + const elements = namedBindings.elements; + for (const element of elements){ + const name = element.name.getText(source); + if (_constant.DISALLOWED_SERVER_REACT_DOM_APIS.includes(name)) { + diagnostics.push({ + file: source, + category: ts.DiagnosticCategory.Error, + code: _constant.NEXT_TS_ERRORS.INVALID_SERVER_API, + messageText: `"${name}" is not allowed in Server Components.`, + start: element.name.getStart(), + length: element.name.getWidth() + }); + } + } + } + } + } + return diagnostics; + } +}; +const _default = serverLayer; + +//# sourceMappingURL=server.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/typescript/utils.js b/build/node_modules/next/dist/server/typescript/utils.js new file mode 100644 index 0000000..25b9f81 --- /dev/null +++ b/build/node_modules/next/dist/server/typescript/utils.js @@ -0,0 +1,212 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getEntryInfo: null, + getInfo: null, + getSource: null, + getTs: null, + getTypeChecker: null, + init: null, + isAppEntryFile: null, + isDefaultFunctionExport: null, + isInsideApp: null, + isPageFile: null, + isPositionInsideNode: null, + log: null, + removeStringQuotes: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getEntryInfo: function() { + return getEntryInfo; + }, + getInfo: function() { + return getInfo; + }, + getSource: function() { + return getSource; + }, + getTs: function() { + return getTs; + }, + getTypeChecker: function() { + return getTypeChecker; + }, + init: function() { + return init; + }, + isAppEntryFile: function() { + return isAppEntryFile; + }, + isDefaultFunctionExport: function() { + return isDefaultFunctionExport; + }, + isInsideApp: function() { + return isInsideApp; + }, + isPageFile: function() { + return isPageFile; + }, + isPositionInsideNode: function() { + return isPositionInsideNode; + }, + log: function() { + return log; + }, + removeStringQuotes: function() { + return removeStringQuotes; + } +}); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +let ts; +let info; +let appDirRegExp; +function log(message) { + info.project.projectService.logger.info('[next] ' + message); +} +function init(opts) { + const projectDir = opts.info.project.getCurrentDirectory(); + ts = opts.ts; + info = opts.info; + appDirRegExp = new RegExp('^' + (projectDir + '(/src)?/app').replace(/[\\/]/g, '[\\/]')); + log('Initialized Next.js TypeScript plugin: ' + projectDir); +} +function getTs() { + return ts; +} +function getInfo() { + return info; +} +function getTypeChecker() { + const program = info.languageService.getProgram(); + if (!program) { + log('Failed to get program while while running getTypeChecker.'); + return; + } + const typeChecker = program.getTypeChecker(); + if (!typeChecker) { + log('Failed to get type checker while running getTypeChecker.'); + return; + } + return typeChecker; +} +function getSource(fileName) { + const program = info.languageService.getProgram(); + if (!program) { + log('Failed to get program while running getSource for: ' + fileName); + return; + } + const sourceFile = program.getSourceFile(fileName); + if (!sourceFile) { + log('Failed to get source file while running getSource for: ' + fileName); + return; + } + return sourceFile; +} +function removeStringQuotes(str) { + return str.replace(/^['"`]|['"`]$/g, ''); +} +const isPositionInsideNode = (position, node)=>{ + const start = node.getFullStart(); + return start <= position && position <= node.getFullWidth() + start; +}; +const isDefaultFunctionExport = (node)=>{ + if (ts.isFunctionDeclaration(node)) { + let hasExportKeyword = false; + let hasDefaultKeyword = false; + if (node.modifiers) { + for (const modifier of node.modifiers){ + if (modifier.kind === ts.SyntaxKind.ExportKeyword) { + hasExportKeyword = true; + } else if (modifier.kind === ts.SyntaxKind.DefaultKeyword) { + hasDefaultKeyword = true; + } + } + } + // `export default function` + if (hasExportKeyword && hasDefaultKeyword) { + return true; + } + } + return false; +}; +const isInsideApp = (filePath)=>{ + return appDirRegExp.test(filePath); +}; +const isAppEntryFile = (filePath)=>{ + return appDirRegExp.test(filePath) && /^(page|layout)\.(mjs|js|jsx|ts|tsx)$/.test(_path.default.basename(filePath)); +}; +const isPageFile = (filePath)=>{ + return appDirRegExp.test(filePath) && /^page\.(mjs|js|jsx|ts|tsx)$/.test(_path.default.basename(filePath)); +}; +function getEntryInfo(fileName, throwOnInvalidDirective) { + const source = getSource(fileName); + if (source) { + let isDirective = true; + let isClientEntry = false; + let isServerEntry = false; + ts.forEachChild(source, (node)=>{ + if (ts.isExpressionStatement(node) && ts.isStringLiteral(node.expression)) { + if (node.expression.text === 'use client') { + if (isDirective) { + isClientEntry = true; + } else { + if (throwOnInvalidDirective) { + const e = { + messageText: 'The `"use client"` directive must be put at the top of the file.', + start: node.expression.getStart(), + length: node.expression.getWidth() + }; + throw e; + } + } + } else if (node.expression.text === 'use server') { + if (isDirective) { + isServerEntry = true; + } else { + if (throwOnInvalidDirective) { + const e = { + messageText: 'The `"use server"` directive must be put at the top of the file.', + start: node.expression.getStart(), + length: node.expression.getWidth() + }; + throw e; + } + } + } + if (isClientEntry && isServerEntry) { + const e = { + messageText: 'Cannot use both "use client" and "use server" directives in the same file.', + start: node.expression.getStart(), + length: node.expression.getWidth() + }; + throw e; + } + } else { + isDirective = false; + } + }); + return { + client: isClientEntry, + server: isServerEntry + }; + } + return { + client: false, + server: false + }; +} + +//# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/use-cache/cache-life.js b/build/node_modules/next/dist/server/use-cache/cache-life.js new file mode 100644 index 0000000..4410344 --- /dev/null +++ b/build/node_modules/next/dist/server/use-cache/cache-life.js @@ -0,0 +1,163 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "cacheLife", { + enumerable: true, + get: function() { + return cacheLife; + } +}); +const _invarianterror = require("../../shared/lib/invariant-error"); +const _workasyncstorageexternal = require("../app-render/work-async-storage.external"); +const _workunitasyncstorageexternal = require("../app-render/work-unit-async-storage.external"); +function validateCacheLife(profile) { + if (profile.stale !== undefined) { + if (profile.stale === false) { + throw Object.defineProperty(new Error('Pass `Infinity` instead of `false` if you want to cache on the client forever ' + 'without checking with the server.'), "__NEXT_ERROR_CODE", { + value: "E407", + enumerable: false, + configurable: true + }); + } else if (typeof profile.stale !== 'number') { + throw Object.defineProperty(new Error('The stale option must be a number of seconds.'), "__NEXT_ERROR_CODE", { + value: "E308", + enumerable: false, + configurable: true + }); + } + } + if (profile.revalidate !== undefined) { + if (profile.revalidate === false) { + throw Object.defineProperty(new Error('Pass `Infinity` instead of `false` if you do not want to revalidate by time.'), "__NEXT_ERROR_CODE", { + value: "E104", + enumerable: false, + configurable: true + }); + } else if (typeof profile.revalidate !== 'number') { + throw Object.defineProperty(new Error('The revalidate option must be a number of seconds.'), "__NEXT_ERROR_CODE", { + value: "E233", + enumerable: false, + configurable: true + }); + } + } + if (profile.expire !== undefined) { + if (profile.expire === false) { + throw Object.defineProperty(new Error('Pass `Infinity` instead of `false` if you want to cache on the server forever ' + 'without checking with the origin.'), "__NEXT_ERROR_CODE", { + value: "E658", + enumerable: false, + configurable: true + }); + } else if (typeof profile.expire !== 'number') { + throw Object.defineProperty(new Error('The expire option must be a number of seconds.'), "__NEXT_ERROR_CODE", { + value: "E3", + enumerable: false, + configurable: true + }); + } + } + if (profile.revalidate !== undefined && profile.expire !== undefined) { + if (profile.revalidate > profile.expire) { + throw Object.defineProperty(new Error('If providing both the revalidate and expire options, ' + 'the expire option must be greater than the revalidate option. ' + 'The expire option indicates how many seconds from the start ' + 'until it can no longer be used.'), "__NEXT_ERROR_CODE", { + value: "E656", + enumerable: false, + configurable: true + }); + } + } +} +function cacheLife(profile) { + if (!process.env.__NEXT_USE_CACHE) { + throw Object.defineProperty(new Error('`cacheLife()` is only available with the `cacheComponents` config.'), "__NEXT_ERROR_CODE", { + value: "E887", + enumerable: false, + configurable: true + }); + } + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + switch(workUnitStore == null ? void 0 : workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-runtime': + case 'prerender-ppr': + case 'prerender-legacy': + case 'request': + case 'unstable-cache': + case 'generate-static-params': + case undefined: + throw Object.defineProperty(new Error('`cacheLife()` can only be called inside a "use cache" function.'), "__NEXT_ERROR_CODE", { + value: "E818", + enumerable: false, + configurable: true + }); + case 'cache': + case 'private-cache': + break; + default: + workUnitStore; + } + if (typeof profile === 'string') { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + if (!workStore) { + throw Object.defineProperty(new Error('`cacheLife()` can only be called during App Router rendering at the moment.'), "__NEXT_ERROR_CODE", { + value: "E820", + enumerable: false, + configurable: true + }); + } + if (!workStore.cacheLifeProfiles) { + throw Object.defineProperty(new _invarianterror.InvariantError('`cacheLifeProfiles` should always be provided.'), "__NEXT_ERROR_CODE", { + value: "E817", + enumerable: false, + configurable: true + }); + } + // TODO: This should be globally available and not require an AsyncLocalStorage. + const configuredProfile = workStore.cacheLifeProfiles[profile]; + if (configuredProfile === undefined) { + if (workStore.cacheLifeProfiles[profile.trim()]) { + throw Object.defineProperty(new Error(`Unknown \`cacheLife()\` profile "${profile}" is not configured in next.config.js\n` + `Did you mean "${profile.trim()}" without the spaces?`), "__NEXT_ERROR_CODE", { + value: "E816", + enumerable: false, + configurable: true + }); + } + throw Object.defineProperty(new Error(`Unknown \`cacheLife()\` profile "${profile}" is not configured in next.config.js\n` + 'module.exports = {\n' + ' cacheLife: {\n' + ` "${profile}": ...\n` + ' }\n' + '}'), "__NEXT_ERROR_CODE", { + value: "E888", + enumerable: false, + configurable: true + }); + } + profile = configuredProfile; + } else if (typeof profile !== 'object' || profile === null || Array.isArray(profile)) { + throw Object.defineProperty(new Error('Invalid `cacheLife()` option. Either pass a profile name or object.'), "__NEXT_ERROR_CODE", { + value: "E814", + enumerable: false, + configurable: true + }); + } else { + validateCacheLife(profile); + } + if (profile.revalidate !== undefined) { + // Track the explicit revalidate time. + if (workUnitStore.explicitRevalidate === undefined || workUnitStore.explicitRevalidate > profile.revalidate) { + workUnitStore.explicitRevalidate = profile.revalidate; + } + } + if (profile.expire !== undefined) { + // Track the explicit expire time. + if (workUnitStore.explicitExpire === undefined || workUnitStore.explicitExpire > profile.expire) { + workUnitStore.explicitExpire = profile.expire; + } + } + if (profile.stale !== undefined) { + // Track the explicit stale time. + if (workUnitStore.explicitStale === undefined || workUnitStore.explicitStale > profile.stale) { + workUnitStore.explicitStale = profile.stale; + } + } +} + +//# sourceMappingURL=cache-life.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/use-cache/cache-tag.js b/build/node_modules/next/dist/server/use-cache/cache-tag.js new file mode 100644 index 0000000..a0a6fc3 --- /dev/null +++ b/build/node_modules/next/dist/server/use-cache/cache-tag.js @@ -0,0 +1,52 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "cacheTag", { + enumerable: true, + get: function() { + return cacheTag; + } +}); +const _workunitasyncstorageexternal = require("../app-render/work-unit-async-storage.external"); +const _patchfetch = require("../lib/patch-fetch"); +function cacheTag(...tags) { + if (!process.env.__NEXT_USE_CACHE) { + throw Object.defineProperty(new Error('`cacheTag()` is only available with the `cacheComponents` config.'), "__NEXT_ERROR_CODE", { + value: "E886", + enumerable: false, + configurable: true + }); + } + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + switch(workUnitStore == null ? void 0 : workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-runtime': + case 'prerender-ppr': + case 'prerender-legacy': + case 'request': + case 'unstable-cache': + case 'generate-static-params': + case undefined: + throw Object.defineProperty(new Error('`cacheTag()` can only be called inside a "use cache" function.'), "__NEXT_ERROR_CODE", { + value: "E819", + enumerable: false, + configurable: true + }); + case 'cache': + case 'private-cache': + break; + default: + workUnitStore; + } + const validTags = (0, _patchfetch.validateTags)(tags, '`cacheTag()`'); + if (!workUnitStore.tags) { + workUnitStore.tags = validTags; + } else { + workUnitStore.tags.push(...validTags); + } +} + +//# sourceMappingURL=cache-tag.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/use-cache/constants.js b/build/node_modules/next/dist/server/use-cache/constants.js new file mode 100644 index 0000000..1b7fcd1 --- /dev/null +++ b/build/node_modules/next/dist/server/use-cache/constants.js @@ -0,0 +1,28 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + DYNAMIC_EXPIRE: null, + RUNTIME_PREFETCH_DYNAMIC_STALE: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + DYNAMIC_EXPIRE: function() { + return DYNAMIC_EXPIRE; + }, + RUNTIME_PREFETCH_DYNAMIC_STALE: function() { + return RUNTIME_PREFETCH_DYNAMIC_STALE; + } +}); +const DYNAMIC_EXPIRE = 300 // 5 minutes +; +const RUNTIME_PREFETCH_DYNAMIC_STALE = 30 // 30 seconds +; + +//# sourceMappingURL=constants.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/use-cache/handlers.js b/build/node_modules/next/dist/server/use-cache/handlers.js new file mode 100644 index 0000000..b354188 --- /dev/null +++ b/build/node_modules/next/dist/server/use-cache/handlers.js @@ -0,0 +1,121 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getCacheHandler: null, + getCacheHandlerEntries: null, + getCacheHandlers: null, + initializeCacheHandlers: null, + setCacheHandler: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getCacheHandler: function() { + return getCacheHandler; + }, + getCacheHandlerEntries: function() { + return getCacheHandlerEntries; + }, + getCacheHandlers: function() { + return getCacheHandlers; + }, + initializeCacheHandlers: function() { + return initializeCacheHandlers; + }, + setCacheHandler: function() { + return setCacheHandler; + } +}); +const _default = require("../lib/cache-handlers/default"); +const debug = process.env.NEXT_PRIVATE_DEBUG_CACHE ? (message, ...args)=>{ + console.log(`use-cache: ${message}`, ...args); +} : undefined; +const handlersSymbol = Symbol.for('@next/cache-handlers'); +const handlersMapSymbol = Symbol.for('@next/cache-handlers-map'); +const handlersSetSymbol = Symbol.for('@next/cache-handlers-set'); +/** + * The reference to the cache handlers. We store the cache handlers on the + * global object so that we can access the same instance across different + * boundaries (such as different copies of the same module). + */ const reference = globalThis; +function initializeCacheHandlers(cacheMaxMemorySize) { + // If the cache handlers have already been initialized, don't do it again. + if (reference[handlersMapSymbol]) { + debug == null ? void 0 : debug('cache handlers already initialized'); + return false; + } + debug == null ? void 0 : debug('initializing cache handlers'); + reference[handlersMapSymbol] = new Map(); + // Initialize the cache from the symbol contents first. + if (reference[handlersSymbol]) { + let fallback; + if (reference[handlersSymbol].DefaultCache) { + debug == null ? void 0 : debug('setting "default" cache handler from symbol'); + fallback = reference[handlersSymbol].DefaultCache; + } else { + debug == null ? void 0 : debug('setting "default" cache handler from default'); + fallback = (0, _default.createDefaultCacheHandler)(cacheMaxMemorySize); + } + reference[handlersMapSymbol].set('default', fallback); + if (reference[handlersSymbol].RemoteCache) { + debug == null ? void 0 : debug('setting "remote" cache handler from symbol'); + reference[handlersMapSymbol].set('remote', reference[handlersSymbol].RemoteCache); + } else { + debug == null ? void 0 : debug('setting "remote" cache handler from default'); + reference[handlersMapSymbol].set('remote', fallback); + } + } else { + const handler = (0, _default.createDefaultCacheHandler)(cacheMaxMemorySize); + debug == null ? void 0 : debug('setting "default" cache handler from default'); + reference[handlersMapSymbol].set('default', handler); + debug == null ? void 0 : debug('setting "remote" cache handler from default'); + reference[handlersMapSymbol].set('remote', handler); + } + // Create a set of the cache handlers. + reference[handlersSetSymbol] = new Set(reference[handlersMapSymbol].values()); + return true; +} +function getCacheHandler(kind) { + // This should never be called before initializeCacheHandlers. + if (!reference[handlersMapSymbol]) { + throw Object.defineProperty(new Error('Cache handlers not initialized'), "__NEXT_ERROR_CODE", { + value: "E649", + enumerable: false, + configurable: true + }); + } + return reference[handlersMapSymbol].get(kind); +} +function getCacheHandlers() { + if (!reference[handlersSetSymbol]) { + return undefined; + } + return reference[handlersSetSymbol].values(); +} +function getCacheHandlerEntries() { + if (!reference[handlersMapSymbol]) { + return undefined; + } + return reference[handlersMapSymbol].entries(); +} +function setCacheHandler(kind, cacheHandler) { + // This should never be called before initializeCacheHandlers. + if (!reference[handlersMapSymbol] || !reference[handlersSetSymbol]) { + throw Object.defineProperty(new Error('Cache handlers not initialized'), "__NEXT_ERROR_CODE", { + value: "E649", + enumerable: false, + configurable: true + }); + } + debug == null ? void 0 : debug('setting cache handler for "%s"', kind); + reference[handlersMapSymbol].set(kind, cacheHandler); + reference[handlersSetSymbol].add(cacheHandler); +} + +//# sourceMappingURL=handlers.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/use-cache/use-cache-errors.js b/build/node_modules/next/dist/server/use-cache/use-cache-errors.js new file mode 100644 index 0000000..bb14cfb --- /dev/null +++ b/build/node_modules/next/dist/server/use-cache/use-cache-errors.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + UseCacheTimeoutError: null, + isUseCacheTimeoutError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + UseCacheTimeoutError: function() { + return UseCacheTimeoutError; + }, + isUseCacheTimeoutError: function() { + return isUseCacheTimeoutError; + } +}); +const USE_CACHE_TIMEOUT_ERROR_CODE = 'USE_CACHE_TIMEOUT'; +class UseCacheTimeoutError extends Error { + constructor(){ + super('Filling a cache during prerender timed out, likely because request-specific arguments such as params, searchParams, cookies() or dynamic data were used inside "use cache".'), this.digest = USE_CACHE_TIMEOUT_ERROR_CODE; + } +} +function isUseCacheTimeoutError(err) { + if (typeof err !== 'object' || err === null || !('digest' in err) || typeof err.digest !== 'string') { + return false; + } + return err.digest === USE_CACHE_TIMEOUT_ERROR_CODE; +} + +//# sourceMappingURL=use-cache-errors.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/use-cache/use-cache-wrapper.js b/build/node_modules/next/dist/server/use-cache/use-cache-wrapper.js new file mode 100644 index 0000000..f49bfc3 --- /dev/null +++ b/build/node_modules/next/dist/server/use-cache/use-cache-wrapper.js @@ -0,0 +1,1588 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "cache", { + enumerable: true, + get: function() { + return cache; + } +}); +const _server = require("react-server-dom-webpack/server"); +const _client = require("react-server-dom-webpack/client"); +const _static = require("react-server-dom-webpack/static"); +const _workasyncstorageexternal = require("../app-render/work-async-storage.external"); +const _workunitasyncstorageexternal = require("../app-render/work-unit-async-storage.external"); +const _dynamicrenderingutils = require("../dynamic-rendering-utils"); +const _manifestssingleton = require("../app-render/manifests-singleton"); +const _encryption = require("../app-render/encryption"); +const _invarianterror = require("../../shared/lib/invariant-error"); +const _createerrorhandler = require("../app-render/create-error-handler"); +const _constants = require("./constants"); +const _constants1 = require("../../lib/constants"); +const _handlers = require("./handlers"); +const _usecacheerrors = require("./use-cache-errors"); +const _dynamicrendering = require("../app-render/dynamic-rendering"); +const _searchparams = require("../request/search-params"); +const _lazyresult = require("../lib/lazy-result"); +const _dynamicaccessasyncstorageexternal = require("../app-render/dynamic-access-async-storage.external"); +const _stagedrendering = require("../app-render/staged-rendering"); +const _log = /*#__PURE__*/ _interop_require_wildcard(require("../../build/output/log")); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +const isEdgeRuntime = process.env.NEXT_RUNTIME === 'edge'; +const debug = process.env.NEXT_PRIVATE_DEBUG_CACHE ? console.debug.bind(console, 'use-cache:') : undefined; +const filterStackFrame = process.env.NODE_ENV !== 'production' ? require('../lib/source-maps').filterStackFrameDEV : undefined; +const findSourceMapURL = process.env.NODE_ENV !== 'production' ? require('../lib/source-maps').findSourceMapURLDEV : undefined; +const nestedCacheZeroRevalidateErrorMessage = `A "use cache" with zero \`revalidate\` is nested inside another "use cache" ` + `that has no explicit \`cacheLife\`, which is not allowed during ` + `prerendering. Add \`cacheLife()\` to the outer \`"use cache"\` to choose ` + `whether it should be prerendered (with non-zero \`revalidate\`) or remain ` + `dynamic (with zero \`revalidate\`). Read more: ` + `https://nextjs.org/docs/messages/nested-use-cache-no-explicit-cachelife`; +const nestedCacheShortExpireErrorMessage = `A "use cache" with short \`expire\` (under 5 minutes) is nested inside ` + `another "use cache" that has no explicit \`cacheLife\`, which is not ` + `allowed during prerendering. Add \`cacheLife()\` to the outer \`"use cache"\` ` + `to choose whether it should be prerendered (with longer \`expire\`) or remain ` + `dynamic (with short \`expire\`). Read more: ` + `https://nextjs.org/docs/messages/nested-use-cache-no-explicit-cachelife`; +// Tracks which root params each cache function has historically read. Used to +// compute the specific cache key upfront on subsequent invocations. In-memory +// only — after server restart, the coarse-key redirect entry in the cache +// handler provides fallback. +const knownRootParamsByFunctionId = new Map(); +function addKnownRootParamNames(id, names) { + const existing = knownRootParamsByFunctionId.get(id); + if (existing) { + for (const name of names){ + existing.add(name); + } + return existing; + } + const created = new Set(names); + knownRootParamsByFunctionId.set(id, created); + return created; +} +function computeRootParamsCacheKeySuffix(rootParams, paramNames) { + if (paramNames.size === 0) { + return ''; + } + return JSON.stringify([ + ...paramNames + ].sort().map((paramName)=>[ + paramName, + rootParams[paramName] + ])); +} +function saveToResumeDataCache(prerenderResumeDataCache, serializedCacheKey, pendingCacheResult) { + if (!prerenderResumeDataCache) { + return pendingCacheResult; + } + const split = clonePendingCacheResult(pendingCacheResult); + const savedCacheResult = getNthCacheResult(split, 0); + const rdcResult = getNthCacheResult(split, 1); + // The RDC is per-page and root params are fixed within a page, so we always + // use the coarse key (without root param suffix). Unlike the cache handler, + // the RDC doesn't need root-param-specific keys for isolation. + prerenderResumeDataCache.cache.set(serializedCacheKey, rdcResult); + return savedCacheResult; +} +function saveToCacheHandler(cacheHandler, workStore, id, serializedCacheKey, savedCacheResult, rootParams) { + const pendingCoarseEntry = savedCacheResult.then((collectedResult)=>{ + const { entry: fullEntry, readRootParamNames } = collectedResult; + // Use the combined set (union of all historically observed reads) for both + // the specific key and the redirect entry's tags. The read path computes + // cacheHandlerKey from this same union (knownRootParamsByFunctionId), so + // the write path must use the identical set to land on the same specific + // key. If we used only the current invocation's reads, a function that + // conditionally reads different root params across invocations would + // scatter entries across different specific keys, making previous entries + // unreachable from the read path's union-based lookup. + const rootParamNames = readRootParamNames ? addKnownRootParamNames(id, readRootParamNames) : knownRootParamsByFunctionId.get(id); + if (rootParamNames && rootParamNames.size > 0 && rootParams) { + const specificKey = serializedCacheKey + computeRootParamsCacheKeySuffix(rootParams, rootParamNames); + const specificSetPromise = cacheHandler.set(specificKey, Promise.resolve(fullEntry)); + workStore.pendingRevalidateWrites ??= []; + workStore.pendingRevalidateWrites.push(specificSetPromise); + // Return a redirect entry for the coarse key. On a cold server (empty + // knownRootParamsByFunctionId), this entry's tags tell us which root + // params to include in the specific key for the follow-up lookup. + const rootParamTags = [ + ...rootParamNames + ].map((paramName)=>_constants1.NEXT_CACHE_ROOT_PARAM_TAG_ID + paramName); + return { + value: new ReadableStream({ + start (controller) { + // Single byte so the entry has non-zero size in LRU caches. + controller.enqueue(new Uint8Array([ + 0 + ])); + controller.close(); + } + }), + tags: [ + ...fullEntry.tags, + ...rootParamTags + ], + stale: fullEntry.stale, + timestamp: fullEntry.timestamp, + expire: fullEntry.expire, + revalidate: fullEntry.revalidate + }; + } + return fullEntry; + }); + const promise = cacheHandler.set(serializedCacheKey, pendingCoarseEntry); + workStore.pendingRevalidateWrites ??= []; + workStore.pendingRevalidateWrites.push(promise); +} +function generateCacheEntry(workStore, cacheContext, clientReferenceManifest, encodedArguments, fn, timeoutError) { + // We need to run this inside a clean AsyncLocalStorage snapshot so that the cache + // generation cannot read anything from the context we're currently executing which + // might include request specific things like cookies() inside a React.cache(). + // Note: It is important that we await at least once before this because it lets us + // pop out of any stack specific contexts as well - aka "Sync" Local Storage. + return workStore.runInCleanSnapshot(generateCacheEntryWithRestoredWorkStore, workStore, cacheContext, clientReferenceManifest, encodedArguments, fn, timeoutError); +} +function generateCacheEntryWithRestoredWorkStore(workStore, cacheContext, clientReferenceManifest, encodedArguments, fn, timeoutError) { + // Since we cleared the AsyncLocalStorage we need to restore the workStore. + // Note: We explicitly don't restore the RequestStore nor the PrerenderStore. + // We don't want any request specific information leaking an we don't want to create a + // bloated fake request mock for every cache call. So any feature that currently lives + // in RequestStore but should be available to Caches need to move to WorkStore. + // PrerenderStore is not needed inside the cache scope because the outer most one will + // be the one to report its result to the outer Prerender. + return _workasyncstorageexternal.workAsyncStorage.run(workStore, generateCacheEntryWithCacheContext, workStore, cacheContext, clientReferenceManifest, encodedArguments, fn, timeoutError); +} +function createUseCacheStore(workStore, cacheContext, defaultCacheLife) { + if (cacheContext.kind === 'private') { + const outerWorkUnitStore = cacheContext.outerWorkUnitStore; + return { + type: 'private-cache', + phase: 'render', + implicitTags: outerWorkUnitStore == null ? void 0 : outerWorkUnitStore.implicitTags, + revalidate: defaultCacheLife.revalidate, + expire: defaultCacheLife.expire, + stale: defaultCacheLife.stale, + explicitRevalidate: undefined, + explicitExpire: undefined, + explicitStale: undefined, + tags: null, + hmrRefreshHash: (0, _workunitasyncstorageexternal.getHmrRefreshHash)(outerWorkUnitStore), + isHmrRefresh: (0, _workunitasyncstorageexternal.isHmrRefresh)(outerWorkUnitStore), + serverComponentsHmrCache: (0, _workunitasyncstorageexternal.getServerComponentsHmrCache)(outerWorkUnitStore), + forceRevalidate: shouldForceRevalidate(workStore, outerWorkUnitStore), + draftMode: (0, _workunitasyncstorageexternal.getDraftModeProviderForCacheScope)(workStore, outerWorkUnitStore), + rootParams: outerWorkUnitStore.rootParams, + headers: outerWorkUnitStore.headers, + cookies: outerWorkUnitStore.cookies + }; + } else { + let useCacheOrRequestStore; + const outerWorkUnitStore = cacheContext.outerWorkUnitStore; + switch(outerWorkUnitStore.type){ + case 'cache': + case 'private-cache': + case 'request': + useCacheOrRequestStore = outerWorkUnitStore; + break; + case 'prerender-runtime': + case 'prerender': + case 'prerender-ppr': + case 'prerender-legacy': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + outerWorkUnitStore; + } + return { + type: 'cache', + phase: 'render', + implicitTags: outerWorkUnitStore.implicitTags, + revalidate: defaultCacheLife.revalidate, + expire: defaultCacheLife.expire, + stale: defaultCacheLife.stale, + explicitRevalidate: undefined, + explicitExpire: undefined, + explicitStale: undefined, + tags: null, + hmrRefreshHash: (0, _workunitasyncstorageexternal.getHmrRefreshHash)(outerWorkUnitStore), + isHmrRefresh: (useCacheOrRequestStore == null ? void 0 : useCacheOrRequestStore.isHmrRefresh) ?? false, + serverComponentsHmrCache: useCacheOrRequestStore == null ? void 0 : useCacheOrRequestStore.serverComponentsHmrCache, + forceRevalidate: shouldForceRevalidate(workStore, outerWorkUnitStore), + draftMode: (0, _workunitasyncstorageexternal.getDraftModeProviderForCacheScope)(workStore, outerWorkUnitStore), + rootParams: outerWorkUnitStore.rootParams, + readRootParamNames: new Set() + }; + } +} +function assertDefaultCacheLife(defaultCacheLife) { + if (!defaultCacheLife || defaultCacheLife.revalidate == null || defaultCacheLife.expire == null || defaultCacheLife.stale == null) { + throw Object.defineProperty(new _invarianterror.InvariantError('A default cacheLife profile must always be provided.'), "__NEXT_ERROR_CODE", { + value: "E750", + enumerable: false, + configurable: true + }); + } +} +function generateCacheEntryWithCacheContext(workStore, cacheContext, clientReferenceManifest, encodedArguments, fn, timeoutError) { + if (!workStore.cacheLifeProfiles) { + throw Object.defineProperty(new _invarianterror.InvariantError('cacheLifeProfiles should always be provided.'), "__NEXT_ERROR_CODE", { + value: "E748", + enumerable: false, + configurable: true + }); + } + const defaultCacheLife = workStore.cacheLifeProfiles['default']; + assertDefaultCacheLife(defaultCacheLife); + // Initialize the Store for this Cache entry. + const cacheStore = createUseCacheStore(workStore, cacheContext, defaultCacheLife); + return _workunitasyncstorageexternal.workUnitAsyncStorage.run(cacheStore, ()=>_dynamicaccessasyncstorageexternal.dynamicAccessAsyncStorage.run({ + abortController: new AbortController() + }, generateCacheEntryImpl, workStore, cacheContext, cacheStore, clientReferenceManifest, encodedArguments, fn, timeoutError)); +} +function propagateCacheLifeAndTagsToRevalidateStore(revalidateStore, entry) { + const outerTags = revalidateStore.tags ??= []; + for (const tag of entry.tags){ + if (!outerTags.includes(tag)) { + outerTags.push(tag); + } + } + if (revalidateStore.stale > entry.stale) { + revalidateStore.stale = entry.stale; + } + if (revalidateStore.revalidate > entry.revalidate) { + revalidateStore.revalidate = entry.revalidate; + } + if (revalidateStore.expire > entry.expire) { + revalidateStore.expire = entry.expire; + } +} +function propagateCacheStaleTimeToRequestStore(requestStore, entry) { + if (requestStore.stale !== undefined && requestStore.stale > entry.stale) { + requestStore.stale = entry.stale; + } +} +function propagateCacheEntryMetadata(cacheContext, entry, readRootParamNames) { + if (cacheContext.kind === 'private') { + switch(cacheContext.outerWorkUnitStore.type){ + case 'prerender-runtime': + case 'private-cache': + propagateCacheLifeAndTagsToRevalidateStore(cacheContext.outerWorkUnitStore, entry); + break; + case 'request': + propagateCacheStaleTimeToRequestStore(cacheContext.outerWorkUnitStore, entry); + break; + case undefined: + break; + default: + cacheContext.outerWorkUnitStore; + } + } else { + switch(cacheContext.outerWorkUnitStore.type){ + case 'cache': + if (readRootParamNames) { + for (const paramName of readRootParamNames){ + cacheContext.outerWorkUnitStore.readRootParamNames.add(paramName); + } + } + // fallthrough + case 'private-cache': + case 'prerender': + case 'prerender-runtime': + case 'prerender-ppr': + case 'prerender-legacy': + propagateCacheLifeAndTagsToRevalidateStore(cacheContext.outerWorkUnitStore, entry); + break; + case 'request': + propagateCacheStaleTimeToRequestStore(cacheContext.outerWorkUnitStore, entry); + break; + case 'unstable-cache': + case 'generate-static-params': + break; + default: + cacheContext.outerWorkUnitStore; + } + } +} +/** + * Conditionally propagates cache life, tags, and root param names to the outer + * context. During prerenders (`prerender` / `prerender-runtime`) and dev + * cache-filling requests, propagation is deferred because the entry might be + * omitted from the final prerender due to short expire/stale times. If omitted, + * it should not affect the prerender. The final decision happens when the entry + * is read from the resume data cache in the final render phase — at that point + * `propagateCacheEntryMetadata` is called unconditionally (after the omission + * checks have already filtered out short-lived entries). + * + * Note: Root param names are only propagated when the outer context is a + * `cache` store (i.e. an enclosing `"use cache"` function), which is never + * deferred. For prerender contexts, root param names are tracked separately + * via `addKnownRootParamNames` in the resume data cache read path. + */ function maybePropagateCacheEntryMetadata(cacheContext, entry, readRootParamNames) { + const outerWorkUnitStore = cacheContext.outerWorkUnitStore; + switch(outerWorkUnitStore.type){ + case 'prerender': + case 'prerender-runtime': + { + break; + } + case 'request': + { + if (process.env.NODE_ENV === 'development' && outerWorkUnitStore.cacheSignal) { + break; + } + // fallthrough + } + case 'private-cache': + case 'cache': + case 'unstable-cache': + case 'prerender-legacy': + case 'prerender-ppr': + { + propagateCacheEntryMetadata(cacheContext, entry, readRootParamNames); + break; + } + case 'generate-static-params': + break; + default: + { + outerWorkUnitStore; + } + } +} +async function collectResult(savedStream, workStore, cacheContext, innerCacheStore, startTime, errors) { + // We create a buffered stream that collects all chunks until the end to + // ensure that RSC has finished rendering and therefore we have collected + // all tags. In the future the RSC API might allow for the equivalent of + // the allReady Promise that exists on SSR streams. + // + // If something errored or rejected anywhere in the render, we close + // the stream as errored. This lets a CacheHandler choose to save the + // partial result up until that point for future hits for a while to avoid + // unnecessary retries or not to retry. We use the end of the stream for + // this to avoid another complicated side-channel. A receiver has to consider + // that the stream might also error for other reasons anyway such as losing + // connection. + const buffer = []; + const reader = savedStream.getReader(); + try { + for(let entry; !(entry = await reader.read()).done;){ + buffer.push(entry.value); + } + } catch (error) { + errors.push(error); + } + let idx = 0; + const bufferStream = new ReadableStream({ + pull (controller) { + if (workStore.invalidDynamicUsageError) { + controller.error(workStore.invalidDynamicUsageError); + } else if (idx < buffer.length) { + controller.enqueue(buffer[idx++]); + } else if (errors.length > 0) { + // TODO: Should we use AggregateError here? + controller.error(errors[0]); + } else { + controller.close(); + } + } + }); + const collectedTags = innerCacheStore.tags; + // If cacheLife() was used to set an explicit revalidate time we use that. + // Otherwise, we use the lowest of all inner fetch()/unstable_cache() or nested "use cache". + // If they're lower than our default. + const collectedRevalidate = innerCacheStore.explicitRevalidate !== undefined ? innerCacheStore.explicitRevalidate : innerCacheStore.revalidate; + const collectedExpire = innerCacheStore.explicitExpire !== undefined ? innerCacheStore.explicitExpire : innerCacheStore.expire; + const collectedStale = innerCacheStore.explicitStale !== undefined ? innerCacheStore.explicitStale : innerCacheStore.stale; + const entry = { + value: bufferStream, + timestamp: startTime, + revalidate: collectedRevalidate, + expire: collectedExpire, + stale: collectedStale, + tags: collectedTags === null ? [] : collectedTags + }; + if (!cacheContext.skipPropagation) { + maybePropagateCacheEntryMetadata(cacheContext, entry, innerCacheStore.type === 'cache' ? innerCacheStore.readRootParamNames : undefined); + const cacheSignal = (0, _workunitasyncstorageexternal.getCacheSignal)(cacheContext.outerWorkUnitStore); + if (cacheSignal) { + cacheSignal.endRead(); + } + } + return { + entry, + hasExplicitRevalidate: innerCacheStore.explicitRevalidate !== undefined, + hasExplicitExpire: innerCacheStore.explicitExpire !== undefined, + readRootParamNames: innerCacheStore.type === 'cache' ? innerCacheStore.readRootParamNames : undefined + }; +} +async function generateCacheEntryImpl(workStore, cacheContext, innerCacheStore, clientReferenceManifest, encodedArguments, fn, timeoutError) { + const temporaryReferences = (0, _server.createTemporaryReferenceSet)(); + const outerWorkUnitStore = cacheContext.outerWorkUnitStore; + const [, , args] = typeof encodedArguments === 'string' ? await (0, _server.decodeReply)(encodedArguments, (0, _manifestssingleton.getServerModuleMap)(), { + temporaryReferences + }) : await (0, _server.decodeReplyFromAsyncIterable)({ + async *[Symbol.asyncIterator] () { + for (const entry of encodedArguments){ + yield entry; + } + switch(outerWorkUnitStore.type){ + case 'prerender-runtime': + case 'prerender': + // The encoded arguments might contain hanging promises. In + // this case we don't want to reject with "Error: Connection + // closed.", so we intentionally keep the iterable alive. This + // is similar to the halting trick that we do while rendering. + await new Promise((resolve)=>{ + if (outerWorkUnitStore.renderSignal.aborted) { + resolve(); + } else { + outerWorkUnitStore.renderSignal.addEventListener('abort', ()=>resolve(), { + once: true + }); + } + }); + break; + case 'prerender-ppr': + case 'prerender-legacy': + case 'request': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + outerWorkUnitStore; + } + } + }, (0, _manifestssingleton.getServerModuleMap)(), { + temporaryReferences + }); + // Track the timestamp when we started computing the result. + const startTime = performance.timeOrigin + performance.now(); + // Invoke the inner function to load a new result. We delay the invocation + // though, until React awaits the promise so that React's request store (ALS) + // is available when the function is invoked. This allows us, for example, to + // capture logs so that we can later replay them. + const resultPromise = (0, _lazyresult.createLazyResult)(fn.bind(null, ...args)); + let errors = []; + // In the "Cache" environment, we only need to make sure that the error + // digests are handled correctly. Error formatting and reporting is not + // necessary here; the errors are encoded in the stream, and will be reported + // in the "Server" environment. + const handleError = (0, _createerrorhandler.createReactServerErrorHandler)(process.env.NODE_ENV === 'development', workStore.isBuildTimePrerendering ?? false, workStore.reactServerErrorsByDigest, (error)=>{ + // In production, we log the original error here. It gets a digest that + // can be used to associate the error with the obfuscated error that might + // be logged if the error is caught. In development, we prefer logging the + // transported error in the server environment. It's not obfuscated and + // also includes the (dev-only) environment name. + if (process.env.NODE_ENV === 'production') { + _log.error(error); + } + errors.push(error); + }); + let stream; + switch(outerWorkUnitStore.type){ + case 'prerender-runtime': + case 'prerender': + var _dynamicAccessAsyncStorage_getStore; + const timeoutAbortController = new AbortController(); + // If we're prerendering, we give you 50 seconds to fill a cache entry. + // Otherwise we assume you stalled on hanging input and de-opt. This needs + // to be lower than just the general timeout of 60 seconds. + const timer = setTimeout(()=>{ + workStore.invalidDynamicUsageError = timeoutError; + timeoutAbortController.abort(timeoutError); + }, 50000); + const dynamicAccessAbortSignal = (_dynamicAccessAsyncStorage_getStore = _dynamicaccessasyncstorageexternal.dynamicAccessAsyncStorage.getStore()) == null ? void 0 : _dynamicAccessAsyncStorage_getStore.abortController.signal; + const abortSignal = dynamicAccessAbortSignal ? AbortSignal.any([ + dynamicAccessAbortSignal, + outerWorkUnitStore.renderSignal, + timeoutAbortController.signal + ]) : timeoutAbortController.signal; + const { prelude } = await (0, _static.prerender)(resultPromise, clientReferenceManifest.clientModules, { + environmentName: 'Cache', + filterStackFrame, + signal: abortSignal, + temporaryReferences, + onError (error) { + if (abortSignal.aborted && abortSignal.reason === error) { + return undefined; + } + return handleError(error); + } + }); + clearTimeout(timer); + if (timeoutAbortController.signal.aborted) { + // When the timeout is reached we always error the stream. Even for + // fallback shell prerenders we don't want to return a hanging promise, + // which would allow the function to become a dynamic hole. Because that + // would mean that a non-empty shell could be generated which would be + // subject to revalidation, and we don't want to create long + // revalidation times. + stream = new ReadableStream({ + start (controller) { + controller.error(timeoutAbortController.signal.reason); + } + }); + } else if (dynamicAccessAbortSignal == null ? void 0 : dynamicAccessAbortSignal.aborted) { + // If the prerender is aborted because of dynamic access (e.g. reading + // fallback params), we return a hanging promise. This essentially makes + // the "use cache" function dynamic. + const hangingPromise = (0, _dynamicrenderingutils.makeHangingPromise)(outerWorkUnitStore.renderSignal, workStore.route, 'dynamic "use cache"'); + if (outerWorkUnitStore.cacheSignal) { + outerWorkUnitStore.cacheSignal.endRead(); + } + return { + type: 'prerender-dynamic', + hangingPromise + }; + } else { + stream = prelude; + } + break; + case 'request': + // If we're filling caches for a staged render, make sure that + // it takes at least a task, so we'll always notice a cache miss between stages. + // + // TODO(restart-on-cache-miss): This is suboptimal. + // Ideally we wouldn't need to restart for microtasky caches, + // but the current logic for omitting short-lived caches only works correctly + // if we do a second render, so that's the best we can do until we refactor that. + if (process.env.NODE_ENV === 'development' && outerWorkUnitStore.cacheSignal) { + await new Promise((resolve)=>setTimeout(resolve)); + } + // fallthrough + case 'prerender-ppr': + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + stream = (0, _server.renderToReadableStream)(resultPromise, clientReferenceManifest.clientModules, { + environmentName: 'Cache', + filterStackFrame, + temporaryReferences, + onError: handleError + }); + break; + default: + return outerWorkUnitStore; + } + const [returnStream, savedStream] = stream.tee(); + const pendingCacheResult = collectResult(savedStream, workStore, cacheContext, innerCacheStore, startTime, errors); + if (process.env.NODE_ENV === 'development') { + // Name the stream for React DevTools. + // @ts-expect-error + returnStream.name = 'use cache'; + } + return { + type: 'cached', + // Return the stream as we're creating it. This means that if it ends up + // erroring we cannot return a stale-if-error version but it allows + // streaming back the result earlier. + stream: returnStream, + pendingCacheResult + }; +} +function cloneCacheEntry(entry) { + const [streamA, streamB] = entry.value.tee(); + entry.value = streamA; + const clonedEntry = { + value: streamB, + timestamp: entry.timestamp, + revalidate: entry.revalidate, + expire: entry.expire, + stale: entry.stale, + tags: entry.tags + }; + return [ + entry, + clonedEntry + ]; +} +function cloneCacheResult(result) { + const [entryA, entryB] = cloneCacheEntry(result.entry); + return [ + { + entry: entryA, + hasExplicitRevalidate: result.hasExplicitRevalidate, + hasExplicitExpire: result.hasExplicitExpire, + readRootParamNames: result.readRootParamNames + }, + { + entry: entryB, + hasExplicitRevalidate: result.hasExplicitRevalidate, + hasExplicitExpire: result.hasExplicitExpire, + readRootParamNames: result.readRootParamNames + } + ]; +} +async function clonePendingCacheResult(pendingCacheResult) { + const result = await pendingCacheResult; + return cloneCacheResult(result); +} +async function getNthCacheResult(split, i) { + return (await split)[i]; +} +async function encodeFormData(formData) { + let result = ''; + for (let [key, value] of formData){ + // We don't need this key to be serializable but from a security perspective it should not be + // possible to generate a string that looks the same from a different structure. To ensure this + // we need a delimeter between fields but just using a delimeter is not enough since a string + // might contain that delimeter. We use the length of each field as the delimeter to avoid + // escaping the values. + result += key.length.toString(16) + ':' + key; + let stringValue; + if (typeof value === 'string') { + stringValue = value; + } else { + // The FormData might contain binary data that is not valid UTF-8 so this cache + // key may generate a UCS-2 string. Passing this to another service needs to be + // aware that the key might not be compatible. + const arrayBuffer = await value.arrayBuffer(); + if (arrayBuffer.byteLength % 2 === 0) { + stringValue = String.fromCodePoint(...new Uint16Array(arrayBuffer)); + } else { + stringValue = String.fromCodePoint(...new Uint16Array(arrayBuffer, 0, (arrayBuffer.byteLength - 1) / 2)) + String.fromCodePoint(new Uint8Array(arrayBuffer, arrayBuffer.byteLength - 1, 1)[0]); + } + } + result += stringValue.length.toString(16) + ':' + stringValue; + } + return result; +} +function createTrackedReadableStream(stream, cacheSignal) { + const reader = stream.getReader(); + return new ReadableStream({ + async pull (controller) { + const { done, value } = await reader.read(); + if (done) { + controller.close(); + cacheSignal.endRead(); + } else { + controller.enqueue(value); + } + } + }); +} +async function cache(kind, id, boundArgsLength, originalFn, args) { + var _workUnitStore_implicitTags; + const isPrivate = kind === 'private'; + // Private caches are currently only stored in the Resume Data Cache (RDC), + // and not in cache handlers. + const cacheHandler = isPrivate ? undefined : (0, _handlers.getCacheHandler)(kind); + if (!isPrivate && !cacheHandler) { + throw Object.defineProperty(new Error('Unknown cache handler: ' + kind), "__NEXT_ERROR_CODE", { + value: "E248", + enumerable: false, + configurable: true + }); + } + const timeoutError = new _usecacheerrors.UseCacheTimeoutError(); + Error.captureStackTrace(timeoutError, cache); + const wrapAsInvalidDynamicUsageError = (error, workStore)=>{ + Error.captureStackTrace(error, cache); + workStore.invalidDynamicUsageError ??= error; + return error; + }; + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + if (workStore === undefined) { + throw Object.defineProperty(new Error('"use cache" cannot be used outside of App Router. Expected a WorkStore.'), "__NEXT_ERROR_CODE", { + value: "E279", + enumerable: false, + configurable: true + }); + } + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workUnitStore === undefined) { + throw Object.defineProperty(new _invarianterror.InvariantError('"use cache" cannot be used outside of App Router. Expected a WorkUnitStore.'), "__NEXT_ERROR_CODE", { + value: "E1135", + enumerable: false, + configurable: true + }); + } + const name = originalFn.name; + let fn = originalFn; + let cacheContext; + if (isPrivate) { + const expression = '"use cache: private"'; + switch(workUnitStore.type){ + // "use cache: private" is dynamic in prerendering contexts. + case 'prerender': + return (0, _dynamicrenderingutils.makeHangingPromise)(workUnitStore.renderSignal, workStore.route, expression); + case 'prerender-ppr': + return (0, _dynamicrendering.postponeWithTracking)(workStore.route, expression, workUnitStore.dynamicTracking); + case 'prerender-legacy': + return (0, _dynamicrendering.throwToInterruptStaticGeneration)(expression, workStore, workUnitStore); + case 'prerender-client': + case 'validation-client': + throw Object.defineProperty(new _invarianterror.InvariantError(`${expression} must not be used within a client component. Next.js should be preventing ${expression} from being allowed in client components statically, but did not in this case.`), "__NEXT_ERROR_CODE", { + value: "E1020", + enumerable: false, + configurable: true + }); + case 'unstable-cache': + { + throw wrapAsInvalidDynamicUsageError(Object.defineProperty(new Error(// TODO: Add a link to an error documentation page when we have one. + `${expression} must not be used within \`unstable_cache()\`.`), "__NEXT_ERROR_CODE", { + value: "E1016", + enumerable: false, + configurable: true + }), workStore); + } + case 'cache': + { + throw wrapAsInvalidDynamicUsageError(Object.defineProperty(new Error(// TODO: Add a link to an error documentation page when we have one. + `${expression} must not be used within "use cache". It can only be nested inside of another ${expression}.`), "__NEXT_ERROR_CODE", { + value: "E1001", + enumerable: false, + configurable: true + }), workStore); + } + case 'request': + case 'prerender-runtime': + case 'private-cache': + cacheContext = { + kind: 'private', + outerWorkUnitStore: workUnitStore, + skipPropagation: false + }; + break; + case 'generate-static-params': + throw wrapAsInvalidDynamicUsageError(Object.defineProperty(new Error(// TODO: Add a link to an error documentation page when we have one. + `${expression} cannot be used outside of a request context.`), "__NEXT_ERROR_CODE", { + value: "E1008", + enumerable: false, + configurable: true + }), workStore); + default: + workUnitStore; + // This is dead code, but without throwing an error here, TypeScript + // will assume that cacheContext is used before being assigned. + throw Object.defineProperty(new _invarianterror.InvariantError(`Unexpected work unit store.`), "__NEXT_ERROR_CODE", { + value: "E737", + enumerable: false, + configurable: true + }); + } + } else { + switch(workUnitStore.type){ + case 'prerender-client': + case 'validation-client': + const expression = '"use cache"'; + throw Object.defineProperty(new _invarianterror.InvariantError(`${expression} must not be used within a client component. Next.js should be preventing ${expression} from being allowed in client components statically, but did not in this case.`), "__NEXT_ERROR_CODE", { + value: "E1038", + enumerable: false, + configurable: true + }); + case 'prerender': + case 'prerender-runtime': + case 'prerender-ppr': + case 'prerender-legacy': + case 'request': + case 'cache': + case 'private-cache': + // TODO: We should probably forbid nesting "use cache" inside + // unstable_cache. (fallthrough) + case 'unstable-cache': + case 'generate-static-params': + cacheContext = { + kind: 'public', + outerWorkUnitStore: workUnitStore, + skipPropagation: false + }; + break; + default: + workUnitStore; + // This is dead code, but without throwing an error here, TypeScript + // will assume that cacheContext is used before being assigned. + throw Object.defineProperty(new _invarianterror.InvariantError(`Unexpected work unit store.`), "__NEXT_ERROR_CODE", { + value: "E737", + enumerable: false, + configurable: true + }); + } + } + // Get the clientReferenceManifest while we're still in the outer Context. + // In case getClientReferenceManifestSingleton is implemented using AsyncLocalStorage. + const clientReferenceManifest = (0, _manifestssingleton.getClientReferenceManifest)(); + // Because the Action ID is not yet unique per implementation of that Action we can't + // safely reuse the results across builds yet. In the meantime we add the buildId to the + // arguments as a seed to ensure they're not reused. Remove this once Action IDs hash + // the implementation. + const buildId = workStore.deploymentId || workStore.buildId; + // In dev mode, when the HMR refresh hash is set, we include it in the + // cache key. This ensures that cache entries are not reused when server + // components have been edited. This is a very coarse approach. But it's + // also only a temporary solution until Action IDs are unique per + // implementation. Remove this once Action IDs hash the implementation. + const hmrRefreshHash = (0, _workunitasyncstorageexternal.getHmrRefreshHash)(workUnitStore); + const hangingInputAbortSignal = (0, _dynamicrendering.createHangingInputAbortSignal)(workUnitStore); + if (cacheContext.kind === 'private') { + const { outerWorkUnitStore } = cacheContext; + switch(outerWorkUnitStore.type){ + case 'prerender-runtime': + { + // In a runtime prerender, we have to make sure that APIs that would hang during a static prerender + // are resolved with a delay, in the appropriate runtime stage. Private caches read from + // Segments not using runtime prefetch resolve at EarlyRuntime, + // while runtime-prefetchable segments resolve at Runtime. + const stagedRendering = outerWorkUnitStore.stagedRendering; + if (stagedRendering) { + await stagedRendering.waitForStage((0, _dynamicrenderingutils.getRuntimeStage)(stagedRendering)); + } + break; + } + case 'request': + { + if (process.env.NODE_ENV === 'development') { + // Similar to runtime prerenders, private caches should not resolve in the static stage + // of a dev request, so we delay them. We pick the appropriate runtime stage based on + // whether we're in the early or late stages. + const stagedRendering = outerWorkUnitStore.stagedRendering; + const stage = stagedRendering ? (0, _dynamicrenderingutils.getRuntimeStage)(stagedRendering) : _stagedrendering.RenderStage.Runtime; + await (0, _dynamicrenderingutils.makeDevtoolsIOAwarePromise)(undefined, outerWorkUnitStore, stage); + } + break; + } + case 'private-cache': + break; + default: + { + outerWorkUnitStore; + } + } + } + let isPageOrLayoutSegmentFunction = false; + // For page and layout segment functions (i.e. the page/layout component, + // or generateMetadata/generateViewport), the cache function is + // overwritten, which allows us to apply special handling for params and + // searchParams. For pages and layouts we're using the outer params prop, + // and not the inner one that was serialized/deserialized. While it's not + // generally true for "use cache" args, in the case of `params` the inner + // and outer object are essentially equivalent, so this is safe to do + // (including fallback params that are hanging promises). It allows us to + // avoid waiting for the timeout, when prerendering a fallback shell of a + // cached page or layout that awaits params. + if (isPageSegmentFunction(args)) { + isPageOrLayoutSegmentFunction = true; + const [{ params: outerParams, searchParams: outerSearchParams }, ...otherOuterArgs] = args; + const props = { + params: outerParams + }; + if (isPrivate) { + // Private caches allow accessing search params. We need to include + // them in the serialized args and when generating the cache key. + props.searchParams = outerSearchParams; + } + args = [ + props, + ...otherOuterArgs + ]; + fn = ({ + [name]: async ({ params: _innerParams, searchParams: innerSearchParams }, ...otherInnerArgs)=>originalFn.apply(null, [ + { + params: outerParams, + searchParams: innerSearchParams ?? // For public caches, search params are omitted from the cache + // key (and the serialized args) to avoid mismatches between + // prerendering and resuming a cached page that does not + // access search params. This is also the reason why we're not + // using a hanging promise for search params. For cached pages + // that do access them, which is an invalid dynamic usage, we + // need to ensure that an error is shown. + (0, _searchparams.makeErroringSearchParamsForUseCache)() + }, + ...otherInnerArgs + ]) + })[name]; + } else if (isLayoutSegmentFunction(args)) { + isPageOrLayoutSegmentFunction = true; + const [{ params: outerParams, $$isLayout, ...outerSlots }, ...otherOuterArgs] = args; + // Overwrite the props to omit $$isLayout. Note that slots are only + // passed to the layout component (if any are defined), and not to + // generateMetadata nor generateViewport. For those functions, + // outerSlots/innerSlots is an empty object, which is fine because we're + // just spreading it into the props. + args = [ + { + params: outerParams, + ...outerSlots + }, + ...otherOuterArgs + ]; + fn = ({ + [name]: async ({ params: _innerParams, ...innerSlots }, ...otherInnerArgs)=>originalFn.apply(null, [ + { + params: outerParams, + ...innerSlots + }, + ...otherInnerArgs + ]) + })[name]; + } + if (boundArgsLength > 0) { + if (args.length === 0) { + throw Object.defineProperty(new _invarianterror.InvariantError(`Expected the "use cache" function ${JSON.stringify(fn.name)} to receive its encrypted bound arguments as the first argument.`), "__NEXT_ERROR_CODE", { + value: "E524", + enumerable: false, + configurable: true + }); + } + const encryptedBoundArgs = args.shift(); + const boundArgs = await (0, _encryption.decryptActionBoundArgs)(id, encryptedBoundArgs); + if (!Array.isArray(boundArgs)) { + throw Object.defineProperty(new _invarianterror.InvariantError(`Expected the bound arguments of "use cache" function ${JSON.stringify(fn.name)} to deserialize into an array, got ${typeof boundArgs} instead.`), "__NEXT_ERROR_CODE", { + value: "E581", + enumerable: false, + configurable: true + }); + } + if (boundArgsLength !== boundArgs.length) { + throw Object.defineProperty(new _invarianterror.InvariantError(`Expected the "use cache" function ${JSON.stringify(fn.name)} to receive ${boundArgsLength} bound arguments, got ${boundArgs.length} instead.`), "__NEXT_ERROR_CODE", { + value: "E559", + enumerable: false, + configurable: true + }); + } + args.unshift(boundArgs); + } + const temporaryReferences = (0, _client.createTemporaryReferenceSet)(); + // For private caches, which are allowed to read cookies, we still don't + // need to include the cookies in the cache key. This is because we don't + // store the cache entries in a cache handler, but only in the Resume Data + // Cache (RDC). Private caches are only used during dynamic requests and + // runtime prefetches. For dynamic requests, the RDC is immutable, so it + // does not include any private caches. For runtime prefetches, the RDC is + // mutable, but only lives as long as the request, so the key does not + // need to include cookies. + const cacheKeyParts = hmrRefreshHash ? [ + buildId, + id, + args, + hmrRefreshHash + ] : [ + buildId, + id, + args + ]; + const encodeCacheKeyParts = ()=>(0, _client.encodeReply)(cacheKeyParts, { + temporaryReferences, + signal: hangingInputAbortSignal + }); + let encodedCacheKeyParts; + switch(workUnitStore.type){ + case 'prerender-runtime': + // We're currently only using `dynamicAccessAsyncStorage` for params, + // which are always available in a runtime prerender, so they will never hang, + // effectively making the tracking below a no-op. + // However, a runtime prerender shares a lot of the semantics with a static prerender, + // and might need to follow this codepath in the future + // if we start using `dynamicAccessAsyncStorage` for other APIs. + // + // fallthrough + case 'prerender': + if (!isPageOrLayoutSegmentFunction) { + // If the "use cache" function is not a page or layout segment + // function, we need to track dynamic access already when encoding + // the arguments. If params are passed explicitly into a "use cache" + // function (as opposed to receiving them automatically in a page or + // layout), we assume that the params are also accessed. This allows + // us to abort early, and treat the function as dynamic, instead of + // waiting for the timeout to be reached. + const dynamicAccessAbortController = new AbortController(); + encodedCacheKeyParts = await _dynamicaccessasyncstorageexternal.dynamicAccessAsyncStorage.run({ + abortController: dynamicAccessAbortController + }, encodeCacheKeyParts); + if (dynamicAccessAbortController.signal.aborted) { + return (0, _dynamicrenderingutils.makeHangingPromise)(workUnitStore.renderSignal, workStore.route, 'dynamic "use cache"'); + } + break; + } + // fallthrough + case 'prerender-ppr': + case 'prerender-legacy': + case 'request': + // TODO(restart-on-cache-miss): We need to handle params/searchParams on page components. + // the promises will be tasky, so `encodeCacheKeyParts` will not resolve in the static stage. + // We have not started a cache read at this point, so we might just miss the cache completely. + // fallthrough + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + case undefined: + encodedCacheKeyParts = await encodeCacheKeyParts(); + break; + default: + return workUnitStore; + } + const serializedCacheKey = typeof encodedCacheKeyParts === 'string' ? // Convert it to an ArrayBuffer if it wants to. + encodedCacheKeyParts : await encodeFormData(encodedCacheKeyParts); + // If we already know which root params this function reads, include them in + // the cache handler key for a direct hit (skipping the redirect entry). + // rootParams is undefined when nested inside unstable_cache. + const rootParams = workUnitStore.rootParams; + const knownRootParamNames = knownRootParamsByFunctionId.get(id); + let cacheHandlerKey = knownRootParamNames && rootParams ? serializedCacheKey + computeRootParamsCacheKeySuffix(rootParams, knownRootParamNames) : serializedCacheKey; + let stream = undefined; + // Get an immutable and mutable versions of the resume data cache. + const prerenderResumeDataCache = (0, _workunitasyncstorageexternal.getPrerenderResumeDataCache)(workUnitStore); + const renderResumeDataCache = (0, _workunitasyncstorageexternal.getRenderResumeDataCache)(workUnitStore); + const implicitTags = ((_workUnitStore_implicitTags = workUnitStore.implicitTags) == null ? void 0 : _workUnitStore_implicitTags.tags) ?? []; + if (renderResumeDataCache) { + const cacheSignal = (0, _workunitasyncstorageexternal.getCacheSignal)(workUnitStore); + if (cacheSignal) { + cacheSignal.beginRead(); + } + const rdcEntry = renderResumeDataCache.cache.get(serializedCacheKey); + if (rdcEntry !== undefined) { + let rdcResult = await rdcEntry; + // Check if the RDC entry should be discarded due to recently revalidated + // tags. When a server action calls updateTag(), the re-render should see + // fresh data instead of stale RDC data. + if (rdcResult !== undefined) { + if (rdcResult.entry.tags.some((tag)=>isRecentlyRevalidatedTag(tag, workStore)) || implicitTags.some((tag)=>isRecentlyRevalidatedTag(tag, workStore))) { + debug == null ? void 0 : debug('discarding RDC entry due to recently revalidated tags', serializedCacheKey); + rdcResult = undefined; + } + } + if (rdcResult !== undefined) { + if (rdcResult.entry.revalidate === 0 || rdcResult.entry.expire < _constants.DYNAMIC_EXPIRE) { + switch(workUnitStore.type){ + case 'prerender': + // In a Dynamic I/O prerender, if the cache entry has + // revalidate: 0 or if the expire time is under 5 minutes, + // then we consider this cache entry dynamic as it's not worth + // generating static pages for such data. It's better to leave + // a dynamic hole that can be filled in during the resume with + // a potentially cached entry. + if (rdcResult.entry.revalidate === 0) { + if (rdcResult.hasExplicitRevalidate === false) { + throw wrapAsInvalidDynamicUsageError(Object.defineProperty(new Error(nestedCacheZeroRevalidateErrorMessage), "__NEXT_ERROR_CODE", { + value: "E1000", + enumerable: false, + configurable: true + }), workStore); + } + debug == null ? void 0 : debug('omitting entry', serializedCacheKey, 'from static shell due to revalidate: 0'); + } else { + if (rdcResult.hasExplicitExpire === false) { + throw wrapAsInvalidDynamicUsageError(Object.defineProperty(new Error(nestedCacheShortExpireErrorMessage), "__NEXT_ERROR_CODE", { + value: "E1009", + enumerable: false, + configurable: true + }), workStore); + } + debug == null ? void 0 : debug('omitting entry', serializedCacheKey, 'from static shell due to short expire value:', rdcResult.entry.expire); + } + if (cacheSignal) { + cacheSignal.endRead(); + } + return (0, _dynamicrenderingutils.makeHangingPromise)(workUnitStore.renderSignal, workStore.route, 'dynamic "use cache"'); + case 'prerender-runtime': + { + // In the final phase of a runtime prerender, we have to make + // sure that APIs that would hang during a static prerender + // are resolved with a delay, in the appropriate runtime stage. + const stagedRendering = workUnitStore.stagedRendering; + if (stagedRendering) { + await stagedRendering.waitForStage((0, _dynamicrenderingutils.getRuntimeStage)(stagedRendering)); + } + break; + } + case 'request': + { + if (process.env.NODE_ENV === 'development') { + if (rdcResult.entry.revalidate === 0 && rdcResult.hasExplicitRevalidate === false) { + throw wrapAsInvalidDynamicUsageError(Object.defineProperty(new Error(nestedCacheZeroRevalidateErrorMessage), "__NEXT_ERROR_CODE", { + value: "E1000", + enumerable: false, + configurable: true + }), workStore); + } + if (rdcResult.entry.expire < _constants.DYNAMIC_EXPIRE && rdcResult.hasExplicitExpire === false) { + throw wrapAsInvalidDynamicUsageError(Object.defineProperty(new Error(nestedCacheShortExpireErrorMessage), "__NEXT_ERROR_CODE", { + value: "E1009", + enumerable: false, + configurable: true + }), workStore); + } + // We delay the cache here so that it doesn't resolve in the static task -- + // in a regular static prerender, it'd be a hanging promise, and we need to reflect that, + // so it has to resolve later. + // TODO(restart-on-cache-miss): Optimize this to avoid unnecessary restarts. + // We don't end the cache read here, so this will always appear as a cache miss in the static stage, + // and thus will cause a restart even if all caches are filled. + const stagedRendering = workUnitStore.stagedRendering; + const stage = stagedRendering ? (0, _dynamicrenderingutils.getRuntimeStage)(stagedRendering) : _stagedrendering.RenderStage.Runtime; + await (0, _dynamicrenderingutils.makeDevtoolsIOAwarePromise)(undefined, workUnitStore, stage); + } + break; + } + case 'prerender-ppr': + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + if (rdcResult.entry.stale < _constants.RUNTIME_PREFETCH_DYNAMIC_STALE) { + switch(workUnitStore.type){ + case 'prerender-runtime': + // In a runtime prerender, if the cache entry will become + // stale in less then 30 seconds, we consider this cache entry + // dynamic as it's not worth prefetching. It's better to leave + // a dynamic hole that can be filled during the navigation. + debug == null ? void 0 : debug('omitting entry', serializedCacheKey, 'from runtime shell due to short stale value:', rdcResult.entry.stale); + if (cacheSignal) { + cacheSignal.endRead(); + } + return (0, _dynamicrenderingutils.makeHangingPromise)(workUnitStore.renderSignal, workStore.route, 'dynamic "use cache"'); + case 'request': + { + if (process.env.NODE_ENV === 'development') { + // We delay the cache here so that it doesn't resolve in the runtime phase -- + // in a regular runtime prerender, it'd be a hanging promise, and we need to reflect that, + // so it has to resolve later. + // TODO(restart-on-cache-miss): Optimize this to avoid unnecessary restarts. + // We don't end the cache read here, so this will always appear as a cache miss in the runtime stage, + // and thus will cause a restart even if all caches are filled. + await (0, _dynamicrenderingutils.makeDevtoolsIOAwarePromise)(undefined, workUnitStore, _stagedrendering.RenderStage.Dynamic); + } + break; + } + case 'prerender': + case 'prerender-ppr': + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + } + if (rdcResult !== undefined) { + debug == null ? void 0 : debug('Resume Data Cache entry found', serializedCacheKey); + if (prerenderResumeDataCache) { + prerenderResumeDataCache.cache.set(serializedCacheKey, rdcEntry); + } + if (rdcResult.readRootParamNames && rdcResult.readRootParamNames.size > 0) { + addKnownRootParamNames(id, rdcResult.readRootParamNames); + } + // We want to make sure we only propagate cache life & tags if the + // entry was *not* omitted from the prerender. So we only do this + // after the above early returns. + propagateCacheEntryMetadata(cacheContext, rdcResult.entry, rdcResult.readRootParamNames); + const [streamA, streamB] = rdcResult.entry.value.tee(); + rdcResult.entry.value = streamB; + if (cacheSignal) { + // When we have a cacheSignal we need to block on reading the cache + // entry before ending the read. + stream = createTrackedReadableStream(streamA, cacheSignal); + } else { + stream = streamA; + } + } else { + // Entry was discarded (e.g. due to recently revalidated tags) + debug == null ? void 0 : debug('Resume Data Cache entry discarded', serializedCacheKey); + if (cacheSignal) { + cacheSignal.endRead(); + } + } + } else { + debug == null ? void 0 : debug('Resume Data Cache entry not found', serializedCacheKey); + if (cacheSignal) { + cacheSignal.endRead(); + } + switch(workUnitStore.type){ + case 'prerender': + // If `allowEmptyStaticShell` is true, and thus a prefilled resume + // data cache was provided, then a cache miss means that params were + // part of the cache key. In this case, we can make this cache + // function a dynamic hole in the shell (or produce an empty shell if + // there's no parent suspense boundary). Currently, this also includes + // layouts and pages that don't read params, which will be improved + // when we implement NAR-136. Otherwise, we assume that if params are + // passed explicitly into a "use cache" function, that the params are + // also accessed. This allows us to abort early, and treat the + // function as dynamic, instead of waiting for the timeout to be + // reached. Compared to the instrumentation-based params bailout we do + // here, this also covers the case where params are transformed with + // an async function, before being passed into the "use cache" + // function, which escapes the instrumentation. + if (workUnitStore.allowEmptyStaticShell) { + return (0, _dynamicrenderingutils.makeHangingPromise)(workUnitStore.renderSignal, workStore.route, 'dynamic "use cache"'); + } + break; + case 'prerender-runtime': + case 'prerender-ppr': + case 'prerender-legacy': + case 'request': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + } + if (stream === undefined) { + const cacheSignal = (0, _workunitasyncstorageexternal.getCacheSignal)(workUnitStore); + if (cacheSignal) { + // Either the cache handler or the generation can be using I/O at this point. + // We need to track when they start and when they complete. + cacheSignal.beginRead(); + } + const lazyRefreshTags = workStore.refreshTagsByCacheKind.get(kind); + if (lazyRefreshTags && !(0, _lazyresult.isResolvedLazyResult)(lazyRefreshTags)) { + await lazyRefreshTags; + } + let entry; + // We ignore existing cache entries when force revalidating. + if (cacheHandler && !shouldForceRevalidate(workStore, workUnitStore)) { + entry = await cacheHandler.get(cacheHandlerKey, implicitTags); + // Check if this is a redirect entry (coarse key → specific key). Redirect + // entries have private tags encoding the root param names (one tag per + // param name, prefixed with _N_RP_). + if (entry && rootParams) { + const paramNames = new Set(); + for (const tag of entry.tags){ + if (tag.startsWith(_constants1.NEXT_CACHE_ROOT_PARAM_TAG_ID)) { + paramNames.add(tag.slice(_constants1.NEXT_CACHE_ROOT_PARAM_TAG_ID.length)); + } + } + if (paramNames.size > 0) { + addKnownRootParamNames(id, paramNames); + cacheHandlerKey = serializedCacheKey + computeRootParamsCacheKeySuffix(rootParams, paramNames); + entry = await cacheHandler.get(cacheHandlerKey, implicitTags); + } + } + } + if (entry) { + let implicitTagsExpiration = 0; + if (workUnitStore.implicitTags) { + const lazyExpiration = workUnitStore.implicitTags.expirationsByCacheKind.get(kind); + if (lazyExpiration) { + const expiration = (0, _lazyresult.isResolvedLazyResult)(lazyExpiration) ? lazyExpiration.value : await lazyExpiration; + // If a cache handler returns an expiration time of Infinity, it + // signals to Next.js that it handles checking cache entries for + // staleness based on the expiration of the implicit tags passed + // into the `get` method. In this case, we keep the default of 0, + // which means that the implicit tags are not considered expired. + if (expiration < Infinity) { + implicitTagsExpiration = expiration; + } + } + } + if (shouldDiscardCacheEntry(entry, workStore, workUnitStore, implicitTags, implicitTagsExpiration)) { + debug == null ? void 0 : debug('discarding expired entry', cacheHandlerKey); + entry = undefined; + } + } + const currentTime = performance.timeOrigin + performance.now(); + if (entry !== undefined && (entry.revalidate === 0 || entry.expire < _constants.DYNAMIC_EXPIRE)) { + switch(workUnitStore.type){ + case 'prerender': + // In a Dynamic I/O prerender, if the cache entry has revalidate: + // 0 or if the expire time is under 5 minutes, then we consider + // this cache entry dynamic as it's not worth generating static + // pages for such data. It's better to leave a dynamic hole that + // can be filled in during the resume with a potentially cached + // entry. + if (entry.revalidate === 0) { + debug == null ? void 0 : debug('omitting entry', cacheHandlerKey, 'from static shell due to revalidate: 0'); + } else { + debug == null ? void 0 : debug('omitting entry', cacheHandlerKey, 'from static shell due to short expire value:', entry.expire); + } + if (cacheSignal) { + cacheSignal.endRead(); + } + return (0, _dynamicrenderingutils.makeHangingPromise)(workUnitStore.renderSignal, workStore.route, 'dynamic "use cache"'); + case 'request': + { + if (process.env.NODE_ENV === 'development') { + // We delay the cache here so that it doesn't resolve in the static task -- + // in a regular static prerender, it'd be a hanging promise, and we need to reflect that, + // so it has to resolve later. + // TODO(restart-on-cache-miss): Optimize this to avoid unnecessary restarts. + // We don't end the cache read here, so this will always appear as a cache miss in the static stage, + // and thus will cause a restart even if all caches are filled. + const stagedRendering = workUnitStore.stagedRendering; + const stage = stagedRendering ? (0, _dynamicrenderingutils.getRuntimeStage)(stagedRendering) : _stagedrendering.RenderStage.Runtime; + await (0, _dynamicrenderingutils.makeDevtoolsIOAwarePromise)(undefined, workUnitStore, stage); + } + break; + } + case 'prerender-runtime': + case 'prerender-ppr': + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + if (entry === undefined || currentTime > entry.timestamp + entry.expire * 1000 || workStore.isStaticGeneration && currentTime > entry.timestamp + entry.revalidate * 1000) { + // Miss. Generate a new result. + // If the cache entry is stale and we're prerendering, we don't want to use the + // stale entry since it would unnecessarily need to shorten the lifetime of the + // prerender. We're not time constrained here so we can re-generated it now. + // We need to run this inside a clean AsyncLocalStorage snapshot so that the cache + // generation cannot read anything from the context we're currently executing which + // might include request specific things like cookies() inside a React.cache(). + // Note: It is important that we await at least once before this because it lets us + // pop out of any stack specific contexts as well - aka "Sync" Local Storage. + if (entry) { + if (currentTime > entry.timestamp + entry.expire * 1000) { + debug == null ? void 0 : debug('entry is expired', cacheHandlerKey); + } + if (workStore.isStaticGeneration && currentTime > entry.timestamp + entry.revalidate * 1000) { + debug == null ? void 0 : debug('static generation, entry is stale', cacheHandlerKey); + } + } + const result = await generateCacheEntry(workStore, cacheContext, clientReferenceManifest, encodedCacheKeyParts, fn, timeoutError); + if (result.type === 'prerender-dynamic') { + return result.hangingPromise; + } + const { stream: newStream, pendingCacheResult } = result; + // When draft mode is enabled, we must not save the cache entry. + if (!workStore.isDraftMode) { + const savedCacheResult = saveToResumeDataCache(prerenderResumeDataCache, serializedCacheKey, pendingCacheResult); + if (cacheHandler) { + saveToCacheHandler(cacheHandler, workStore, id, serializedCacheKey, savedCacheResult, rootParams); + } + } + stream = newStream; + } else { + // If we have an entry at this point, this can't be a private cache + // entry. + if (cacheContext.kind === 'private') { + throw Object.defineProperty(new _invarianterror.InvariantError(`A private cache entry must not be retrieved from the cache handler.`), "__NEXT_ERROR_CODE", { + value: "E749", + enumerable: false, + configurable: true + }); + } + maybePropagateCacheEntryMetadata(cacheContext, entry, knownRootParamsByFunctionId.get(id)); + // We want to return this stream, even if it's stale. + stream = entry.value; + // If we have a resume data cache, we need to clone the entry and add it + // to the resume data cache. + if (prerenderResumeDataCache) { + const [entryLeft, entryRight] = cloneCacheEntry(entry); + if (cacheSignal) { + stream = createTrackedReadableStream(entryLeft.value, cacheSignal); + } else { + stream = entryLeft.value; + } + // The RDC is per-page and root params are fixed within a page, so we + // always use the coarse key (without root param suffix). + prerenderResumeDataCache.cache.set(serializedCacheKey, Promise.resolve({ + entry: entryRight, + // For pre-existing entries from cache handlers we don't know + // whether they had explicit cache life values or not. But we only + // need this information during prerendering when we produce new + // entries, where the cache life of an inner cache may be propagated + // to the outer one. In that case we use the RDC. So it's safe to + // set this to undefined here. + hasExplicitRevalidate: undefined, + hasExplicitExpire: undefined, + readRootParamNames: knownRootParamNames + })); + } else { + // If we're not regenerating we need to signal that we've finished + // putting the entry into the cache scope at this point. Otherwise we do + // that inside generateCacheEntry. + cacheSignal == null ? void 0 : cacheSignal.endRead(); + } + if (currentTime > entry.timestamp + entry.revalidate * 1000) { + // If this is stale, and we're not in a prerender (i.e. this is + // dynamic render), then we should warm up the cache with a fresh + // revalidated entry. + const result = await generateCacheEntry(workStore, // The background revalidation preserves the outer store for reading + // (e.g. implicitTags) but skips propagation of cache life and tags + // back to the outer scope. + { + kind: cacheContext.kind, + outerWorkUnitStore: cacheContext.outerWorkUnitStore, + skipPropagation: true + }, clientReferenceManifest, encodedCacheKeyParts, fn, timeoutError); + if (result.type === 'cached') { + const { stream: ignoredStream, pendingCacheResult } = result; + const savedCacheResult = saveToResumeDataCache(prerenderResumeDataCache, serializedCacheKey, pendingCacheResult); + if (cacheHandler) { + saveToCacheHandler(cacheHandler, workStore, id, serializedCacheKey, savedCacheResult, rootParams); + } + await ignoredStream.cancel(); + } + } + } + } + // Logs are replayed even if it's a hit - to ensure we see them on the client eventually. + // If we didn't then the client wouldn't see the logs if it was seeded from a prewarm that + // never made it to the client. However, this also means that you see logs even when the + // cached function isn't actually re-executed. We should instead ensure prewarms always + // make it to the client. Another issue is that this will cause double logging in the + // server terminal. Once while generating the cache entry and once when replaying it on + // the server, which is required to pick it up for replaying again on the client. + const replayConsoleLogs = true; + const serverConsumerManifest = { + // moduleLoading must be null because we don't want to trigger preloads of ClientReferences + // to be added to the consumer. Instead, we'll wait for any ClientReference to be emitted + // which themselves will handle the preloading. + moduleLoading: null, + moduleMap: isEdgeRuntime ? clientReferenceManifest.edgeRscModuleMapping : clientReferenceManifest.rscModuleMapping, + serverModuleMap: (0, _manifestssingleton.getServerModuleMap)() + }; + return (0, _client.createFromReadableStream)(stream, { + findSourceMapURL, + serverConsumerManifest, + temporaryReferences, + replayConsoleLogs, + environmentName: 'Cache' + }); +} +/** + * Returns `true` if the `'use cache'` function is the page component itself, + * or `generateMetadata`/`generateViewport` in a page file. + */ function isPageSegmentFunction(args) { + const [maybeProps] = args; + return maybeProps !== null && typeof maybeProps === 'object' && maybeProps.$$isPage === true; +} +/** + * Returns `true` if the `'use cache'` function is the layout component itself, + * or `generateMetadata`/`generateViewport` in a layout file. + */ function isLayoutSegmentFunction(args) { + const [maybeProps] = args; + return maybeProps !== null && typeof maybeProps === 'object' && maybeProps.$$isLayout === true; +} +function shouldForceRevalidate(workStore, workUnitStore) { + if (workStore.isOnDemandRevalidate || workStore.isDraftMode) { + return true; + } + if (process.env.__NEXT_DEV_SERVER) { + switch(workUnitStore.type){ + case 'request': + return workUnitStore.headers.get('cache-control') === 'no-cache'; + case 'cache': + case 'private-cache': + return workUnitStore.forceRevalidate; + case 'prerender-runtime': + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-ppr': + case 'prerender-legacy': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + return false; +} +function shouldDiscardCacheEntry(entry, workStore, workUnitStore, implicitTags, implicitTagsExpiration) { + // If the cache entry was created before any of the implicit tags were + // revalidated last, we need to discard it. + if (entry.timestamp <= implicitTagsExpiration) { + debug == null ? void 0 : debug('entry was created at', entry.timestamp, 'before implicit tags were revalidated at', implicitTagsExpiration); + return true; + } + // During prerendering, we ignore recently revalidated tags. In dev mode, we + // can assume that the dynamic dev rendering will have discarded and recreated + // the affected cache entries, and we don't want to discard those again during + // the prerender validation. During build-time prerendering, there will never + // be any pending revalidated tags. + switch(workUnitStore.type){ + case 'prerender': + return false; + case 'prerender-runtime': + case 'prerender-client': + case 'validation-client': + case 'prerender-ppr': + case 'prerender-legacy': + case 'request': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } + // If the cache entry contains revalidated tags that the cache handler might + // not know about yet, we need to discard it. + if (entry.tags.some((tag)=>isRecentlyRevalidatedTag(tag, workStore))) { + return true; + } + // Finally, if any of the implicit tags have been revalidated recently, we + // also need to discard the cache entry. + if (implicitTags.some((tag)=>isRecentlyRevalidatedTag(tag, workStore))) { + return true; + } + return false; +} +function isRecentlyRevalidatedTag(tag, workStore) { + const { previouslyRevalidatedTags, pendingRevalidatedTags } = workStore; + // Was the tag previously revalidated (e.g. by a redirecting server action)? + if (previouslyRevalidatedTags.includes(tag)) { + debug == null ? void 0 : debug('tag', tag, 'was previously revalidated'); + return true; + } + // It could also have been revalidated by the currently running server action. + // In this case the revalidation might not have been fully propagated by a + // remote cache handler yet, so we read it from the pending tags in the work + // store. + if (pendingRevalidatedTags == null ? void 0 : pendingRevalidatedTags.some((item)=>item.tag === tag)) { + debug == null ? void 0 : debug('tag', tag, 'was just revalidated'); + return true; + } + return false; +} + +//# sourceMappingURL=use-cache-wrapper.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/utils.js b/build/node_modules/next/dist/server/utils.js new file mode 100644 index 0000000..de37d20 --- /dev/null +++ b/build/node_modules/next/dist/server/utils.js @@ -0,0 +1,73 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + debounce: null, + isBlockedPage: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + debounce: function() { + return debounce; + }, + isBlockedPage: function() { + return isBlockedPage; + } +}); +const _constants = require("../shared/lib/constants"); +function isBlockedPage(page) { + return _constants.BLOCKED_PAGES.includes(page); +} +function debounce(fn, ms, maxWait = Infinity) { + let timeoutId; + // The time the debouncing function was first called during this debounce queue. + let startTime = 0; + // The time the debouncing function was last called. + let lastCall = 0; + // The arguments and this context of the last call to the debouncing function. + let args, context; + // A helper used to that either invokes the debounced function, or + // reschedules the timer if a more recent call was made. + function run() { + const now = Date.now(); + const diff = lastCall + ms - now; + // If the diff is non-positive, then we've waited at least `ms` + // milliseconds since the last call. Or if we've waited for longer than the + // max wait time, we must call the debounced function. + if (diff <= 0 || startTime + maxWait >= now) { + // It's important to clear the timeout id before invoking the debounced + // function, in case the function calls the debouncing function again. + timeoutId = undefined; + fn.apply(context, args); + } else { + // Else, a new call was made after the original timer was scheduled. We + // didn't clear the timeout (doing so is very slow), so now we need to + // reschedule the timer for the time difference. + timeoutId = setTimeout(run, diff); + } + } + return function(...passedArgs) { + // The arguments and this context of the most recent call are saved so the + // debounced function can be invoked with them later. + args = passedArgs; + context = this; + // Instead of constantly clearing and scheduling a timer, we record the + // time of the last call. If a second call comes in before the timer fires, + // then we'll reschedule in the run function. Doing this is considerably + // faster. + lastCall = Date.now(); + // Only schedule a new timer if we're not currently waiting. + if (timeoutId === undefined) { + startTime = lastCall; + timeoutId = setTimeout(run, ms); + } + }; +} + +//# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/adapter.js b/build/node_modules/next/dist/server/web/adapter.js new file mode 100644 index 0000000..00c17a4 --- /dev/null +++ b/build/node_modules/next/dist/server/web/adapter.js @@ -0,0 +1,395 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + NextRequestHint: null, + adapter: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + NextRequestHint: function() { + return NextRequestHint; + }, + adapter: function() { + return adapter; + } +}); +const _error = require("./error"); +const _utils = require("./utils"); +const _fetchevent = require("./spec-extension/fetch-event"); +const _request = require("./spec-extension/request"); +const _response = require("./spec-extension/response"); +const _relativizeurl = require("../../shared/lib/router/utils/relativize-url"); +const _nexturl = require("./next-url"); +const _internalutils = require("../internal-utils"); +const _apppaths = require("../../shared/lib/router/utils/app-paths"); +const _approuterheaders = require("../../client/components/app-router-headers"); +const _globals = require("./globals"); +const _requeststore = require("../async-storage/request-store"); +const _workunitasyncstorageexternal = require("../app-render/work-unit-async-storage.external"); +const _workstore = require("../async-storage/work-store"); +const _workasyncstorageexternal = require("../app-render/work-async-storage.external"); +const _tracer = require("../lib/trace/tracer"); +const _constants = require("../lib/trace/constants"); +const _webonclose = require("./web-on-close"); +const _getedgepreviewprops = require("./get-edge-preview-props"); +const _builtinrequestcontext = require("../after/builtin-request-context"); +const _implicittags = require("../lib/implicit-tags"); +const _isrscrequest = require("../lib/is-rsc-request"); +const _requestmeta = require("../request-meta"); +class NextRequestHint extends _request.NextRequest { + constructor(params){ + super(params.input, params.init); + this.sourcePage = params.page; + } + get request() { + throw Object.defineProperty(new _error.PageSignatureError({ + page: this.sourcePage + }), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + respondWith() { + throw Object.defineProperty(new _error.PageSignatureError({ + page: this.sourcePage + }), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + waitUntil() { + throw Object.defineProperty(new _error.PageSignatureError({ + page: this.sourcePage + }), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } +} +const headersGetter = { + keys: (headers)=>Array.from(headers.keys()), + get: (headers, key)=>headers.get(key) ?? undefined +}; +let propagator = (request, fn)=>{ + const tracer = (0, _tracer.getTracer)(); + return tracer.withPropagatedContext(request.headers, fn, headersGetter); +}; +let testApisIntercepted = false; +function ensureTestApisIntercepted() { + if (!testApisIntercepted) { + testApisIntercepted = true; + if (process.env.NEXT_PRIVATE_TEST_PROXY === 'true') { + const { interceptTestApis, wrapRequestHandler } = // eslint-disable-next-line @next/internal/typechecked-require -- experimental/testmode is not built ins next/dist/esm + require('next/dist/experimental/testmode/server-edge'); + interceptTestApis(); + propagator = wrapRequestHandler(propagator); + } + } +} +async function adapter(params) { + var _getBuiltinRequestContext; + ensureTestApisIntercepted(); + await (0, _globals.ensureInstrumentationRegistered)(); + // TODO-APP: use explicit marker for this + const isEdgeRendering = typeof globalThis.__BUILD_MANIFEST !== 'undefined'; + params.request.url = (0, _apppaths.normalizeRscURL)(params.request.url); + const requestURL = params.bypassNextUrl ? new URL(params.request.url) : new _nexturl.NextURL(params.request.url, { + headers: params.request.headers, + nextConfig: params.request.nextConfig + }); + // Iterator uses an index to keep track of the current iteration. Because of deleting and appending below we can't just use the iterator. + // Instead we use the keys before iteration. + const keys = [ + ...requestURL.searchParams.keys() + ]; + for (const key of keys){ + const value = requestURL.searchParams.getAll(key); + const normalizedKey = (0, _utils.normalizeNextQueryParam)(key); + if (normalizedKey) { + requestURL.searchParams.delete(normalizedKey); + for (const val of value){ + requestURL.searchParams.append(normalizedKey, val); + } + requestURL.searchParams.delete(key); + } + } + // Ensure users only see page requests, never data requests. + let buildId = process.env.__NEXT_BUILD_ID || ''; + if ('buildId' in requestURL) { + buildId = requestURL.buildId || ''; + requestURL.buildId = ''; + } + let deploymentId = process.env.NEXT_DEPLOYMENT_ID; + const requestHeaders = (0, _utils.fromNodeOutgoingHttpHeaders)(params.request.headers); + const isNextDataRequest = requestHeaders.has('x-nextjs-data'); + const isRSCRequest = (0, _isrscrequest.isRSCRequestHeader)(requestHeaders.get(_approuterheaders.RSC_HEADER)); + if (isNextDataRequest && requestURL.pathname === '/index') { + requestURL.pathname = '/'; + } + const flightHeaders = new Map(); + // Headers should only be stripped for middleware + if (!isEdgeRendering && !process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE) { + for (const header of _approuterheaders.FLIGHT_HEADERS){ + const value = requestHeaders.get(header); + if (value !== null) { + flightHeaders.set(header, value); + requestHeaders.delete(header); + } + } + } + const normalizeURL = process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE ? new URL(params.request.url) : requestURL; + const rscHash = normalizeURL.searchParams.get(_approuterheaders.NEXT_RSC_UNION_QUERY); + const request = new NextRequestHint({ + page: params.page, + // Strip internal query parameters off the request. + input: process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE ? normalizeURL.toString() : (0, _internalutils.stripInternalSearchParams)(normalizeURL).toString(), + init: { + body: params.request.body, + headers: requestHeaders, + method: params.request.method, + nextConfig: params.request.nextConfig, + signal: params.request.signal + } + }); + if (params.request.requestMeta) { + (0, _requestmeta.setRequestMeta)(request, params.request.requestMeta); + } + /** + * This allows to identify the request as a data request. The user doesn't + * need to know about this property neither use it. We add it for testing + * purposes. + */ if (isNextDataRequest) { + Object.defineProperty(request, '__isData', { + enumerable: false, + value: true + }); + } + if (// If we are inside of the next start sandbox + // leverage the shared instance if not we need + // to create a fresh cache instance each time + !globalThis.__incrementalCacheShared && params.IncrementalCache) { + ; + globalThis.__incrementalCache = new params.IncrementalCache({ + CurCacheHandler: params.incrementalCacheHandler, + minimalMode: process.env.NODE_ENV !== 'development', + fetchCacheKeyPrefix: process.env.__NEXT_FETCH_CACHE_KEY_PREFIX, + dev: process.env.NODE_ENV === 'development', + requestHeaders: params.request.headers, + getPrerenderManifest: ()=>{ + return { + version: -1, + routes: {}, + dynamicRoutes: {}, + notFoundRoutes: [], + preview: (0, _getedgepreviewprops.getEdgePreviewProps)() + }; + } + }); + } + // if we're in an edge runtime sandbox, we should use the waitUntil + // that we receive from the enclosing NextServer + const outerWaitUntil = params.request.waitUntil ?? ((_getBuiltinRequestContext = (0, _builtinrequestcontext.getBuiltinRequestContext)()) == null ? void 0 : _getBuiltinRequestContext.waitUntil); + const event = new _fetchevent.NextFetchEvent({ + request, + page: params.page, + context: outerWaitUntil ? { + waitUntil: outerWaitUntil + } : undefined + }); + let response; + let cookiesFromResponse; + response = await propagator(request, ()=>{ + // we only care to make async storage available for middleware + const isMiddleware = params.page === '/middleware' || params.page === '/src/middleware' || params.page === '/proxy' || params.page === '/src/proxy'; + if (isMiddleware) { + // if we're in an edge function, we only get a subset of `nextConfig` (no `experimental`), + // so we have to inject it via DefinePlugin. + // in `next start` this will be passed normally (see `NextNodeServer.runMiddleware`). + const waitUntil = event.waitUntil.bind(event); + const closeController = new _webonclose.CloseController(); + return (0, _tracer.getTracer)().trace(_constants.MiddlewareSpan.execute, { + spanName: `middleware ${request.method}`, + attributes: { + 'http.target': request.nextUrl.pathname, + 'http.method': request.method + } + }, async ()=>{ + try { + var _params_request_nextConfig_experimental, _params_request_nextConfig, _params_request_nextConfig_experimental1, _params_request_nextConfig1; + const onUpdateCookies = (cookies)=>{ + cookiesFromResponse = cookies; + }; + const previewProps = (0, _getedgepreviewprops.getEdgePreviewProps)(); + const page = '/' // Fake Work + ; + const fallbackRouteParams = null; + const implicitTags = await (0, _implicittags.getImplicitTags)(page, request.nextUrl.pathname, fallbackRouteParams); + const requestStore = (0, _requeststore.createRequestStoreForAPI)(request, request.nextUrl, implicitTags, onUpdateCookies, previewProps); + const workStore = (0, _workstore.createWorkStore)({ + page, + renderOpts: { + cacheLifeProfiles: (_params_request_nextConfig = params.request.nextConfig) == null ? void 0 : (_params_request_nextConfig_experimental = _params_request_nextConfig.experimental) == null ? void 0 : _params_request_nextConfig_experimental.cacheLife, + cacheComponents: false, + experimental: { + isRoutePPREnabled: false, + authInterrupts: !!((_params_request_nextConfig1 = params.request.nextConfig) == null ? void 0 : (_params_request_nextConfig_experimental1 = _params_request_nextConfig1.experimental) == null ? void 0 : _params_request_nextConfig_experimental1.authInterrupts) + }, + supportsDynamicResponse: true, + waitUntil, + onClose: closeController.onClose.bind(closeController), + onAfterTaskError: undefined + }, + isPrefetchRequest: request.headers.get(_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER) === '1', + buildId: buildId ?? '', + deploymentId: deploymentId ?? '', + previouslyRevalidatedTags: [] + }); + return await _workasyncstorageexternal.workAsyncStorage.run(workStore, ()=>_workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, params.handler, request, event)); + } finally{ + // middleware cannot stream, so we can consider the response closed + // as soon as the handler returns. + // we can delay running it until a bit later -- + // if it's needed, we'll have a `waitUntil` lock anyway. + setTimeout(()=>{ + closeController.dispatchClose(); + }, 0); + } + }); + } + return params.handler(request, event); + }); + // check if response is a Response object + if (response && !(response instanceof Response)) { + throw Object.defineProperty(new TypeError('Expected an instance of Response to be returned'), "__NEXT_ERROR_CODE", { + value: "E567", + enumerable: false, + configurable: true + }); + } + if (response && cookiesFromResponse) { + response.headers.set('set-cookie', cookiesFromResponse); + } + /** + * For rewrites we must always include the locale in the final pathname + * so we re-create the NextURL forcing it to include it when the it is + * an internal rewrite. Also we make sure the outgoing rewrite URL is + * a data URL if the request was a data request. + */ const rewrite = response == null ? void 0 : response.headers.get('x-middleware-rewrite'); + if (response && rewrite && (isRSCRequest || !isEdgeRendering)) { + var _params_request_nextConfig_experimental_clientParamParsingOrigins, _params_request_nextConfig_experimental, _params_request_nextConfig; + const destination = new _nexturl.NextURL(rewrite, { + forceLocale: true, + headers: params.request.headers, + nextConfig: params.request.nextConfig + }); + if (!process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE && !isEdgeRendering) { + if (destination.host === request.nextUrl.host) { + destination.buildId = buildId || destination.buildId; + response.headers.set('x-middleware-rewrite', String(destination)); + } + } + /** + * When the request is a data request we must show if there was a rewrite + * with an internal header so the client knows which component to load + * from the data request. + */ const { url: relativeDestination, isRelative } = (0, _relativizeurl.parseRelativeURL)(destination.toString(), requestURL.toString()); + if (!isEdgeRendering && isNextDataRequest && // if the rewrite is external and external rewrite + // resolving config is enabled don't add this header + // so the upstream app can set it instead + !(process.env.__NEXT_EXTERNAL_MIDDLEWARE_REWRITE_RESOLVE && relativeDestination.match(/http(s)?:\/\//))) { + response.headers.set('x-nextjs-rewrite', relativeDestination); + } + // Check to see if this is a non-relative rewrite. If it is, we need + // to check to see if it's an allowed origin to receive the rewritten + // headers. + const isAllowedOrigin = !isRelative ? (_params_request_nextConfig = params.request.nextConfig) == null ? void 0 : (_params_request_nextConfig_experimental = _params_request_nextConfig.experimental) == null ? void 0 : (_params_request_nextConfig_experimental_clientParamParsingOrigins = _params_request_nextConfig_experimental.clientParamParsingOrigins) == null ? void 0 : _params_request_nextConfig_experimental_clientParamParsingOrigins.some((origin)=>new RegExp(origin).test(destination.origin)) : false; + // If this is an RSC request, and the pathname or search has changed, and + // this isn't an external rewrite, we need to set the rewritten pathname and + // query headers. + if (isRSCRequest && (isRelative || isAllowedOrigin)) { + if (requestURL.pathname !== destination.pathname) { + response.headers.set(_approuterheaders.NEXT_REWRITTEN_PATH_HEADER, destination.pathname); + } + if (requestURL.search !== destination.search) { + response.headers.set(_approuterheaders.NEXT_REWRITTEN_QUERY_HEADER, // remove the leading ? from the search string + destination.search.slice(1)); + } + } + } + /** + * Always forward the `_rsc` search parameter to the rewritten URL for RSC requests, + * unless it's already present. This is necessary to ensure that RSC hash validation + * works correctly after a rewrite. For internal rewrites, the server can validate the + * RSC hash using the original URL, so forwarding the `_rsc` parameter is less critical. + * However, for external rewrites (where the request is proxied to another Next.js server), + * the external server does not have access to the original URL or its search parameters. + * In these cases, forwarding the `_rsc` parameter is essential so that the external server + * can perform the correct RSC hash validation. + */ if (response && rewrite && isRSCRequest && rscHash) { + const rewriteURL = new URL(rewrite); + if (!rewriteURL.searchParams.has(_approuterheaders.NEXT_RSC_UNION_QUERY)) { + rewriteURL.searchParams.set(_approuterheaders.NEXT_RSC_UNION_QUERY, rscHash); + response.headers.set('x-middleware-rewrite', rewriteURL.toString()); + } + } + /** + * For redirects we will not include the locale in case when it is the + * default and we must also make sure the outgoing URL is a data one if + * the incoming request was a data request. + */ const redirect = response == null ? void 0 : response.headers.get('Location'); + if (response && redirect && !isEdgeRendering) { + const redirectURL = new _nexturl.NextURL(redirect, { + forceLocale: false, + headers: params.request.headers, + nextConfig: params.request.nextConfig + }); + /** + * Responses created from redirects have immutable headers so we have + * to clone the response to be able to modify it. + */ response = new Response(response.body, response); + if (!process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE) { + if (redirectURL.host === requestURL.host) { + redirectURL.buildId = buildId || redirectURL.buildId; + response.headers.set('Location', (0, _relativizeurl.getRelativeURL)(redirectURL, requestURL)); + } + } + /** + * When the request is a data request we can't use the location header as + * it may end up with CORS error. Instead we map to an internal header so + * the client knows the destination. + */ if (isNextDataRequest) { + response.headers.delete('Location'); + response.headers.set('x-nextjs-redirect', (0, _relativizeurl.getRelativeURL)(redirectURL.toString(), requestURL.toString())); + } + } + const finalResponse = response ? response : _response.NextResponse.next(); + // Flight headers are not overridable / removable so they are applied at the end. + const middlewareOverrideHeaders = finalResponse.headers.get('x-middleware-override-headers'); + const overwrittenHeaders = []; + if (middlewareOverrideHeaders) { + for (const [key, value] of flightHeaders){ + finalResponse.headers.set(`x-middleware-request-${key}`, value); + overwrittenHeaders.push(key); + } + if (overwrittenHeaders.length > 0) { + finalResponse.headers.set('x-middleware-override-headers', middlewareOverrideHeaders + ',' + overwrittenHeaders.join(',')); + } + } + return { + response: finalResponse, + waitUntil: (0, _fetchevent.getWaitUntilPromiseFromEvent)(event) ?? Promise.resolve(), + fetchMetrics: request.fetchMetrics + }; +} + +//# sourceMappingURL=adapter.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/edge-route-module-wrapper.js b/build/node_modules/next/dist/server/web/edge-route-module-wrapper.js new file mode 100644 index 0000000..4d2f69b --- /dev/null +++ b/build/node_modules/next/dist/server/web/edge-route-module-wrapper.js @@ -0,0 +1,124 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "EdgeRouteModuleWrapper", { + enumerable: true, + get: function() { + return EdgeRouteModuleWrapper; + } +}); +require("./globals"); +const _adapter = require("./adapter"); +const _incrementalcache = require("../lib/incremental-cache"); +const _handlers = require("../use-cache/handlers"); +const _routematcher = require("../route-matchers/route-matcher"); +const _internaledgewaituntil = require("./internal-edge-wait-until"); +const _serverutils = require("../server-utils"); +const _querystring = require("../../shared/lib/router/utils/querystring"); +const _webonclose = require("./web-on-close"); +const _getedgepreviewprops = require("./get-edge-preview-props"); +const _web = require("../../server/base-http/web"); +class EdgeRouteModuleWrapper { + /** + * The constructor is wrapped with private to ensure that it can only be + * constructed by the static wrap method. + * + * @param routeModule the route module to wrap + */ constructor(routeModule, cacheHandlers){ + this.routeModule = routeModule; + this.cacheHandlers = cacheHandlers; + // TODO: (wyattjoh) possibly allow the module to define it's own matcher + this.matcher = new _routematcher.RouteMatcher(routeModule.definition); + } + /** + * This will wrap a module with the EdgeModuleWrapper and return a function + * that can be used as a handler for the edge runtime. + * + * @param module the module to wrap + * @param options any options that should be passed to the adapter and + * override the ones passed from the runtime + * @returns a function that can be used as a handler for the edge runtime + */ static wrap(routeModule, options) { + // Create the module wrapper. + const wrapper = new EdgeRouteModuleWrapper(routeModule, options.cacheHandlers ?? {}); + // Return the wrapping function. + return (opts)=>{ + return (0, _adapter.adapter)({ + ...opts, + IncrementalCache: _incrementalcache.IncrementalCache, + incrementalCacheHandler: options.incrementalCacheHandler, + // Bind the handler method to the wrapper so it still has context. + handler: wrapper.handler.bind(wrapper), + page: options.page + }); + }; + } + async handler(request, evt) { + const utils = (0, _serverutils.getServerUtils)({ + pageIsDynamic: this.matcher.isDynamic, + page: this.matcher.definition.pathname, + basePath: request.nextUrl.basePath, + // We don't need the `handleRewrite` util, so can just pass an empty object + rewrites: {}, + // only used for rewrites, so setting an arbitrary default value here + caseSensitive: false + }); + const { nextConfig } = this.routeModule.getNextConfigEdge(new _web.WebNextRequest(request)); + (0, _handlers.initializeCacheHandlers)(nextConfig.cacheMaxMemorySize); + for (const [kind, cacheHandler] of Object.entries(this.cacheHandlers)){ + (0, _handlers.setCacheHandler)(kind, cacheHandler); + } + const { params } = utils.normalizeDynamicRouteParams((0, _querystring.searchParamsToUrlQuery)(request.nextUrl.searchParams), false); + const waitUntil = evt.waitUntil.bind(evt); + const closeController = new _webonclose.CloseController(); + const previewProps = (0, _getedgepreviewprops.getEdgePreviewProps)(); + // Create the context for the handler. This contains the params from the + // match (if any). + const context = { + params, + previewProps, + renderOpts: { + supportsDynamicResponse: true, + waitUntil, + onClose: closeController.onClose.bind(closeController), + onAfterTaskError: undefined, + cacheComponents: !!process.env.__NEXT_CACHE_COMPONENTS, + experimental: { + authInterrupts: !!process.env.__NEXT_EXPERIMENTAL_AUTH_INTERRUPTS + }, + cacheLifeProfiles: nextConfig.cacheLife + }, + sharedContext: { + buildId: '', + deploymentId: '' + } + }; + // Get the response from the handler. + let res = await this.routeModule.handle(request, context); + const waitUntilPromises = [ + (0, _internaledgewaituntil.internal_getCurrentFunctionWaitUntil)() + ]; + if (context.renderOpts.pendingWaitUntil) { + waitUntilPromises.push(context.renderOpts.pendingWaitUntil); + } + evt.waitUntil(Promise.all(waitUntilPromises)); + if (!res.body) { + // we can delay running it until a bit later -- + // if it's needed, we'll have a `waitUntil` lock anyway. + setTimeout(()=>closeController.dispatchClose(), 0); + } else { + // NOTE: if this is a streaming response, onClose may be called later, + // so we can't rely on `closeController.listeners` -- it might be 0 at this point. + const trackedBody = (0, _webonclose.trackStreamConsumed)(res.body, ()=>closeController.dispatchClose()); + res = new Response(trackedBody, { + status: res.status, + statusText: res.statusText, + headers: res.headers + }); + } + return res; + } +} + +//# sourceMappingURL=edge-route-module-wrapper.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/error.js b/build/node_modules/next/dist/server/web/error.js new file mode 100644 index 0000000..0c6e60f --- /dev/null +++ b/build/node_modules/next/dist/server/web/error.js @@ -0,0 +1,54 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + PageSignatureError: null, + RemovedPageError: null, + RemovedUAError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + PageSignatureError: function() { + return PageSignatureError; + }, + RemovedPageError: function() { + return RemovedPageError; + }, + RemovedUAError: function() { + return RemovedUAError; + } +}); +class PageSignatureError extends Error { + constructor({ page }){ + super(`The middleware "${page}" accepts an async API directly with the form: + + export function middleware(request, event) { + return NextResponse.redirect('/new-location') + } + + Read more: https://nextjs.org/docs/messages/middleware-new-signature + `); + } +} +class RemovedPageError extends Error { + constructor(){ + super(`The request.page has been deprecated in favour of \`URLPattern\`. + Read more: https://nextjs.org/docs/messages/middleware-request-page + `); + } +} +class RemovedUAError extends Error { + constructor(){ + super(`The request.ua has been removed in favour of \`userAgent\` function. + Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent + `); + } +} + +//# sourceMappingURL=error.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/exports/index.js b/build/node_modules/next/dist/server/web/exports/index.js new file mode 100644 index 0000000..63c6828 --- /dev/null +++ b/build/node_modules/next/dist/server/web/exports/index.js @@ -0,0 +1,56 @@ +// Alias index file of next/server for edge runtime for tree-shaking purpose +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + ImageResponse: null, + NextRequest: null, + NextResponse: null, + URLPattern: null, + after: null, + connection: null, + userAgent: null, + userAgentFromString: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + ImageResponse: function() { + return _imageresponse.ImageResponse; + }, + NextRequest: function() { + return _request.NextRequest; + }, + NextResponse: function() { + return _response.NextResponse; + }, + URLPattern: function() { + return _urlpattern.URLPattern; + }, + after: function() { + return _after.after; + }, + connection: function() { + return _connection.connection; + }, + userAgent: function() { + return _useragent.userAgent; + }, + userAgentFromString: function() { + return _useragent.userAgentFromString; + } +}); +const _imageresponse = require("../spec-extension/image-response"); +const _request = require("../spec-extension/request"); +const _response = require("../spec-extension/response"); +const _useragent = require("../spec-extension/user-agent"); +const _urlpattern = require("../spec-extension/url-pattern"); +const _after = require("../../after"); +const _connection = require("../../request/connection"); + +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/get-edge-preview-props.js b/build/node_modules/next/dist/server/web/get-edge-preview-props.js new file mode 100644 index 0000000..85c4148 --- /dev/null +++ b/build/node_modules/next/dist/server/web/get-edge-preview-props.js @@ -0,0 +1,23 @@ +/** + * In edge runtime, these props directly accessed from environment variables. + * - local: env vars will be injected through edge-runtime as runtime env vars + * - deployment: env vars will be replaced by edge build pipeline + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getEdgePreviewProps", { + enumerable: true, + get: function() { + return getEdgePreviewProps; + } +}); +function getEdgePreviewProps() { + return { + previewModeId: process.env.__NEXT_PREVIEW_MODE_ID || '', + previewModeSigningKey: process.env.__NEXT_PREVIEW_MODE_SIGNING_KEY || '', + previewModeEncryptionKey: process.env.__NEXT_PREVIEW_MODE_ENCRYPTION_KEY || '' + }; +} + +//# sourceMappingURL=get-edge-preview-props.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/globals.js b/build/node_modules/next/dist/server/web/globals.js new file mode 100644 index 0000000..ae5e8d0 --- /dev/null +++ b/build/node_modules/next/dist/server/web/globals.js @@ -0,0 +1,128 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + edgeInstrumentationOnRequestError: null, + ensureInstrumentationRegistered: null, + getEdgeInstrumentationModule: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + edgeInstrumentationOnRequestError: function() { + return edgeInstrumentationOnRequestError; + }, + ensureInstrumentationRegistered: function() { + return ensureInstrumentationRegistered; + }, + getEdgeInstrumentationModule: function() { + return getEdgeInstrumentationModule; + } +}); +async function getEdgeInstrumentationModule() { + const instrumentation = '_ENTRIES' in globalThis && _ENTRIES.middleware_instrumentation && await _ENTRIES.middleware_instrumentation; + return instrumentation; +} +let instrumentationModulePromise = null; +async function registerInstrumentation() { + // Ensure registerInstrumentation is not called in production build + if (process.env.NEXT_PHASE === 'phase-production-build') return; + if (!instrumentationModulePromise) { + instrumentationModulePromise = getEdgeInstrumentationModule(); + } + const instrumentation = await instrumentationModulePromise; + if (instrumentation == null ? void 0 : instrumentation.register) { + try { + await instrumentation.register(); + } catch (err) { + err.message = `An error occurred while loading instrumentation hook: ${err.message}`; + throw err; + } + } +} +async function edgeInstrumentationOnRequestError(...args) { + const instrumentation = await getEdgeInstrumentationModule(); + try { + var _instrumentation_onRequestError; + await (instrumentation == null ? void 0 : (_instrumentation_onRequestError = instrumentation.onRequestError) == null ? void 0 : _instrumentation_onRequestError.call(instrumentation, ...args)); + } catch (err) { + // Log the soft error and continue, since the original error has already been thrown + console.error('Error in instrumentation.onRequestError:', err); + } +} +let registerInstrumentationPromise = null; +function ensureInstrumentationRegistered() { + if (!registerInstrumentationPromise) { + registerInstrumentationPromise = registerInstrumentation(); + } + return registerInstrumentationPromise; +} +function getUnsupportedModuleErrorMessage(module1) { + // warning: if you change these messages, you must adjust how dev-overlay's middleware detects modules not found + return `The edge runtime does not support Node.js '${module1}' module. +Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`; +} +function __import_unsupported(moduleName) { + const proxy = new Proxy(function() {}, { + get (_obj, prop) { + if (prop === 'then') { + return {}; + } + throw Object.defineProperty(new Error(getUnsupportedModuleErrorMessage(moduleName)), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + }, + construct () { + throw Object.defineProperty(new Error(getUnsupportedModuleErrorMessage(moduleName)), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + }, + apply (_target, _this, args) { + if (typeof args[0] === 'function') { + return args[0](proxy); + } + throw Object.defineProperty(new Error(getUnsupportedModuleErrorMessage(moduleName)), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + }); + return new Proxy({}, { + get: ()=>proxy + }); +} +function enhanceGlobals() { + if (process.env.NEXT_RUNTIME !== 'edge') { + return; + } + // The condition is true when the "process" module is provided + if (process !== global.process) { + // prefer local process but global.process has correct "env" + process.env = global.process.env; + global.process = process; + } + // to allow building code that import but does not use node.js modules, + // webpack will expect this function to exist in global scope + try { + Object.defineProperty(globalThis, '__import_unsupported', { + value: __import_unsupported, + enumerable: false, + configurable: false + }); + } catch {} + // Eagerly fire instrumentation hook to make the startup faster. + void ensureInstrumentationRegistered(); +} +enhanceGlobals(); + +//# sourceMappingURL=globals.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/http.js b/build/node_modules/next/dist/server/web/http.js new file mode 100644 index 0000000..652972a --- /dev/null +++ b/build/node_modules/next/dist/server/web/http.js @@ -0,0 +1,39 @@ +/** + * List of valid HTTP methods that can be implemented by Next.js's Custom App + * Routes. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + HTTP_METHODS: null, + isHTTPMethod: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + HTTP_METHODS: function() { + return HTTP_METHODS; + }, + isHTTPMethod: function() { + return isHTTPMethod; + } +}); +const HTTP_METHODS = [ + 'GET', + 'HEAD', + 'OPTIONS', + 'POST', + 'PUT', + 'DELETE', + 'PATCH' +]; +function isHTTPMethod(maybeMethod) { + return HTTP_METHODS.includes(maybeMethod); +} + +//# sourceMappingURL=http.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/internal-edge-wait-until.js b/build/node_modules/next/dist/server/web/internal-edge-wait-until.js new file mode 100644 index 0000000..226781e --- /dev/null +++ b/build/node_modules/next/dist/server/web/internal-edge-wait-until.js @@ -0,0 +1,64 @@ +// An internal module to expose the "waitUntil" API to Edge SSR and Edge Route Handler functions. +// This is highly experimental and subject to change. +// We still need a global key to bypass Webpack's layering of modules. +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + internal_getCurrentFunctionWaitUntil: null, + internal_runWithWaitUntil: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + internal_getCurrentFunctionWaitUntil: function() { + return internal_getCurrentFunctionWaitUntil; + }, + internal_runWithWaitUntil: function() { + return internal_runWithWaitUntil; + } +}); +const GLOBAL_KEY = Symbol.for('__next_internal_waitUntil__'); +const state = // @ts-ignore +globalThis[GLOBAL_KEY] || // @ts-ignore +(globalThis[GLOBAL_KEY] = { + waitUntilCounter: 0, + waitUntilResolve: undefined, + waitUntilPromise: null +}); +// No matter how many concurrent requests are being handled, we want to make sure +// that the final promise is only resolved once all of the waitUntil promises have +// settled. +function resolveOnePromise() { + state.waitUntilCounter--; + if (state.waitUntilCounter === 0) { + state.waitUntilResolve(); + state.waitUntilPromise = null; + } +} +function internal_getCurrentFunctionWaitUntil() { + return state.waitUntilPromise; +} +function internal_runWithWaitUntil(fn) { + const result = fn(); + if (result && typeof result === 'object' && 'then' in result && 'finally' in result && typeof result.then === 'function' && typeof result.finally === 'function') { + if (!state.waitUntilCounter) { + // Create the promise for the next batch of waitUntil calls. + state.waitUntilPromise = new Promise((resolve)=>{ + state.waitUntilResolve = resolve; + }); + } + state.waitUntilCounter++; + return result.finally(()=>{ + resolveOnePromise(); + }); + } + return result; +} + +//# sourceMappingURL=internal-edge-wait-until.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/next-url.js b/build/node_modules/next/dist/server/web/next-url.js new file mode 100644 index 0000000..dbba7e3 --- /dev/null +++ b/build/node_modules/next/dist/server/web/next-url.js @@ -0,0 +1,199 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "NextURL", { + enumerable: true, + get: function() { + return NextURL; + } +}); +const _detectdomainlocale = require("../../shared/lib/i18n/detect-domain-locale"); +const _formatnextpathnameinfo = require("../../shared/lib/router/utils/format-next-pathname-info"); +const _gethostname = require("../../shared/lib/get-hostname"); +const _getnextpathnameinfo = require("../../shared/lib/router/utils/get-next-pathname-info"); +const REGEX_LOCALHOST_HOSTNAME = /^(?:127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|\[::1\]|localhost)$/; +function parseURL(url, base) { + const parsed = new URL(String(url), base && String(base)); + if (REGEX_LOCALHOST_HOSTNAME.test(parsed.hostname)) { + parsed.hostname = 'localhost'; + } + return parsed; +} +const Internal = Symbol('NextURLInternal'); +class NextURL { + constructor(input, baseOrOpts, opts){ + let base; + let options; + if (typeof baseOrOpts === 'object' && 'pathname' in baseOrOpts || typeof baseOrOpts === 'string') { + base = baseOrOpts; + options = opts || {}; + } else { + options = opts || baseOrOpts || {}; + } + this[Internal] = { + url: parseURL(input, base ?? options.base), + options: options, + basePath: '' + }; + this.analyze(); + } + analyze() { + var _this_Internal_options_nextConfig_i18n, _this_Internal_options_nextConfig, _this_Internal_domainLocale, _this_Internal_options_nextConfig_i18n1, _this_Internal_options_nextConfig1; + const info = (0, _getnextpathnameinfo.getNextPathnameInfo)(this[Internal].url.pathname, { + nextConfig: this[Internal].options.nextConfig, + parseData: !process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE, + i18nProvider: this[Internal].options.i18nProvider + }); + const hostname = (0, _gethostname.getHostname)(this[Internal].url, this[Internal].options.headers); + this[Internal].domainLocale = this[Internal].options.i18nProvider ? this[Internal].options.i18nProvider.detectDomainLocale(hostname) : (0, _detectdomainlocale.detectDomainLocale)((_this_Internal_options_nextConfig = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n = _this_Internal_options_nextConfig.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n.domains, hostname); + const defaultLocale = ((_this_Internal_domainLocale = this[Internal].domainLocale) == null ? void 0 : _this_Internal_domainLocale.defaultLocale) || ((_this_Internal_options_nextConfig1 = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n1 = _this_Internal_options_nextConfig1.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n1.defaultLocale); + this[Internal].url.pathname = info.pathname; + this[Internal].defaultLocale = defaultLocale; + this[Internal].basePath = info.basePath ?? ''; + this[Internal].buildId = info.buildId; + this[Internal].locale = info.locale ?? defaultLocale; + this[Internal].trailingSlash = info.trailingSlash; + } + formatPathname() { + return (0, _formatnextpathnameinfo.formatNextPathnameInfo)({ + basePath: this[Internal].basePath, + buildId: this[Internal].buildId, + defaultLocale: !this[Internal].options.forceLocale ? this[Internal].defaultLocale : undefined, + locale: this[Internal].locale, + pathname: this[Internal].url.pathname, + trailingSlash: this[Internal].trailingSlash + }); + } + formatSearch() { + return this[Internal].url.search; + } + get buildId() { + return this[Internal].buildId; + } + set buildId(buildId) { + this[Internal].buildId = buildId; + } + get locale() { + return this[Internal].locale ?? ''; + } + set locale(locale) { + var _this_Internal_options_nextConfig_i18n, _this_Internal_options_nextConfig; + if (!this[Internal].locale || !((_this_Internal_options_nextConfig = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n = _this_Internal_options_nextConfig.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n.locales.includes(locale))) { + throw Object.defineProperty(new TypeError(`The NextURL configuration includes no locale "${locale}"`), "__NEXT_ERROR_CODE", { + value: "E597", + enumerable: false, + configurable: true + }); + } + this[Internal].locale = locale; + } + get defaultLocale() { + return this[Internal].defaultLocale; + } + get domainLocale() { + return this[Internal].domainLocale; + } + get searchParams() { + return this[Internal].url.searchParams; + } + get host() { + return this[Internal].url.host; + } + set host(value) { + this[Internal].url.host = value; + } + get hostname() { + return this[Internal].url.hostname; + } + set hostname(value) { + this[Internal].url.hostname = value; + } + get port() { + return this[Internal].url.port; + } + set port(value) { + this[Internal].url.port = value; + } + get protocol() { + return this[Internal].url.protocol; + } + set protocol(value) { + this[Internal].url.protocol = value; + } + get href() { + const pathname = this.formatPathname(); + const search = this.formatSearch(); + return `${this.protocol}//${this.host}${pathname}${search}${this.hash}`; + } + set href(url) { + this[Internal].url = parseURL(url); + this.analyze(); + } + get origin() { + return this[Internal].url.origin; + } + get pathname() { + return this[Internal].url.pathname; + } + set pathname(value) { + this[Internal].url.pathname = value; + } + get hash() { + return this[Internal].url.hash; + } + set hash(value) { + this[Internal].url.hash = value; + } + get search() { + return this[Internal].url.search; + } + set search(value) { + this[Internal].url.search = value; + } + get password() { + return this[Internal].url.password; + } + set password(value) { + this[Internal].url.password = value; + } + get username() { + return this[Internal].url.username; + } + set username(value) { + this[Internal].url.username = value; + } + get basePath() { + return this[Internal].basePath; + } + set basePath(value) { + this[Internal].basePath = value.startsWith('/') ? value : `/${value}`; + } + toString() { + return this.href; + } + toJSON() { + return this.href; + } + [Symbol.for('edge-runtime.inspect.custom')]() { + return { + href: this.href, + origin: this.origin, + protocol: this.protocol, + username: this.username, + password: this.password, + host: this.host, + hostname: this.hostname, + port: this.port, + pathname: this.pathname, + search: this.search, + searchParams: this.searchParams, + hash: this.hash + }; + } + clone() { + return new NextURL(String(this), this[Internal].options); + } +} + +//# sourceMappingURL=next-url.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/sandbox/context.js b/build/node_modules/next/dist/server/web/sandbox/context.js new file mode 100644 index 0000000..cc301c5 --- /dev/null +++ b/build/node_modules/next/dist/server/web/sandbox/context.js @@ -0,0 +1,462 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + clearAllModuleContexts: null, + clearModuleContext: null, + edgeSandboxNextRequestContext: null, + getModuleContext: null, + requestStore: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + clearAllModuleContexts: function() { + return clearAllModuleContexts; + }, + clearModuleContext: function() { + return clearModuleContext; + }, + edgeSandboxNextRequestContext: function() { + return edgeSandboxNextRequestContext; + }, + getModuleContext: function() { + return getModuleContext; + }, + requestStore: function() { + return requestStore; + } +}); +const _async_hooks = require("async_hooks"); +const _constants = require("../../../shared/lib/constants"); +const _edgeruntime = require("next/dist/compiled/edge-runtime"); +const _fs = require("fs"); +const _utils = require("../utils"); +const _pick = require("../../../lib/pick"); +const _fetchinlineassets = require("./fetch-inline-assets"); +const _vm = require("vm"); +const _nodebuffer = /*#__PURE__*/ _interop_require_default(require("node:buffer")); +const _nodeevents = /*#__PURE__*/ _interop_require_default(require("node:events")); +const _nodeassert = /*#__PURE__*/ _interop_require_default(require("node:assert")); +const _nodeutil = /*#__PURE__*/ _interop_require_default(require("node:util")); +const _nodeasync_hooks = /*#__PURE__*/ _interop_require_default(require("node:async_hooks")); +const _resourcemanagers = require("./resource-managers"); +const _builtinrequestcontext = require("../../after/builtin-request-context"); +const _patcherrorinspect = require("../../patch-error-inspect"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +let getServerError; +let decorateServerError; +if (process.env.NODE_ENV === 'development') { + getServerError = require('../../dev/node-stack-frames').getServerError; + decorateServerError = require('../../../shared/lib/error-source').decorateServerError; +} else { + getServerError = (error)=>error; + decorateServerError = ()=>{}; +} +/** + * A Map of cached module contexts indexed by the module name. It allows + * to have a different cache scoped per module name or depending on the + * provided module key on creation. + */ const moduleContexts = new Map(); +const pendingModuleCaches = new Map(); +async function clearAllModuleContexts() { + _resourcemanagers.intervalsManager.removeAll(); + _resourcemanagers.timeoutsManager.removeAll(); + moduleContexts.clear(); + pendingModuleCaches.clear(); +} +async function clearModuleContext(path) { + _resourcemanagers.intervalsManager.removeAll(); + _resourcemanagers.timeoutsManager.removeAll(); + const handleContext = (key, cache, context)=>{ + if (cache == null ? void 0 : cache.paths.has(path)) { + context.delete(key); + } + }; + for (const [key, cache] of moduleContexts){ + handleContext(key, cache, moduleContexts); + } + for (const [key, cache] of pendingModuleCaches){ + handleContext(key, await cache, pendingModuleCaches); + } +} +async function loadWasm(wasm) { + const modules = {}; + await Promise.all(wasm.map(async (binding)=>{ + const module1 = await WebAssembly.compile(// @ts-expect-error - Argument of type 'Buffer' is not assignable to parameter of type 'BufferSource'. + await _fs.promises.readFile(binding.filePath)); + modules[binding.name] = module1; + })); + return modules; +} +function buildEnvironmentVariablesFrom(injectedEnvironments) { + let env = Object.fromEntries([ + ...Object.entries(process.env), + ...Object.entries(injectedEnvironments), + [ + 'NEXT_RUNTIME', + 'edge' + ] + ]); + return env; +} +function throwUnsupportedAPIError(name) { + const error = Object.defineProperty(new Error(`A Node.js API is used (${name}) which is not supported in the Edge Runtime. +Learn more: https://nextjs.org/docs/api-reference/edge-runtime`), "__NEXT_ERROR_CODE", { + value: "E97", + enumerable: false, + configurable: true + }); + decorateServerError(error, _constants.COMPILER_NAMES.edgeServer); + throw error; +} +function createProcessPolyfill(env) { + const processPolyfill = { + env: buildEnvironmentVariablesFrom(env) + }; + const overriddenValue = {}; + for (const key of Object.keys(process)){ + if (key === 'env') continue; + Object.defineProperty(processPolyfill, key, { + get () { + if (overriddenValue[key] !== undefined) { + return overriddenValue[key]; + } + if (typeof process[key] === 'function') { + return ()=>throwUnsupportedAPIError(`process.${key}`); + } + return undefined; + }, + set (value) { + overriddenValue[key] = value; + }, + enumerable: false + }); + } + return processPolyfill; +} +function addStub(context, name) { + Object.defineProperty(context, name, { + get () { + return function() { + throwUnsupportedAPIError(name); + }; + }, + enumerable: false + }); +} +function getDecorateUnhandledError(runtime) { + const EdgeRuntimeError = runtime.evaluate(`Error`); + return (error)=>{ + if (error instanceof EdgeRuntimeError) { + decorateServerError(error, _constants.COMPILER_NAMES.edgeServer); + } + }; +} +function getDecorateUnhandledRejection(runtime) { + const EdgeRuntimeError = runtime.evaluate(`Error`); + return (rejected)=>{ + if (rejected.reason instanceof EdgeRuntimeError) { + decorateServerError(rejected.reason, _constants.COMPILER_NAMES.edgeServer); + } + }; +} +const NativeModuleMap = (()=>{ + const mods = { + 'node:buffer': (0, _pick.pick)(_nodebuffer.default, [ + 'constants', + 'kMaxLength', + 'kStringMaxLength', + 'Buffer', + 'SlowBuffer' + ]), + 'node:events': (0, _pick.pick)(_nodeevents.default, [ + 'EventEmitter', + 'captureRejectionSymbol', + 'defaultMaxListeners', + 'errorMonitor', + 'listenerCount', + 'on', + 'once' + ]), + 'node:async_hooks': (0, _pick.pick)(_nodeasync_hooks.default, [ + 'AsyncLocalStorage', + 'AsyncResource' + ]), + 'node:assert': (0, _pick.pick)(_nodeassert.default, [ + 'AssertionError', + 'deepEqual', + 'deepStrictEqual', + 'doesNotMatch', + 'doesNotReject', + 'doesNotThrow', + 'equal', + 'fail', + 'ifError', + 'match', + 'notDeepEqual', + 'notDeepStrictEqual', + 'notEqual', + 'notStrictEqual', + 'ok', + 'rejects', + 'strict', + 'strictEqual', + 'throws' + ]), + 'node:util': (0, _pick.pick)(_nodeutil.default, [ + '_extend', + 'callbackify', + 'format', + 'inherits', + 'promisify', + 'types' + ]) + }; + return new Map(Object.entries(mods)); +})(); +const requestStore = new _async_hooks.AsyncLocalStorage(); +const edgeSandboxNextRequestContext = (0, _builtinrequestcontext.createLocalRequestContext)(); +/** + * Create a module cache specific for the provided parameters. It includes + * a runtime context, require cache and paths cache. + */ async function createModuleContext(options) { + const warnedEvals = new Set(); + const warnedWasmCodegens = new Set(); + const { edgeFunctionEntry } = options; + const wasm = await loadWasm(edgeFunctionEntry.wasm ?? []); + const runtime = new _edgeruntime.EdgeRuntime({ + codeGeneration: process.env.NODE_ENV !== 'production' ? { + strings: true, + wasm: true + } : undefined, + extend: (context)=>{ + context.process = createProcessPolyfill(edgeFunctionEntry.env); + Object.defineProperty(context, 'require', { + enumerable: false, + value: (id)=>{ + const value = NativeModuleMap.get(id); + if (!value) { + throw Object.defineProperty(new TypeError('Native module not found: ' + id), "__NEXT_ERROR_CODE", { + value: "E546", + enumerable: false, + configurable: true + }); + } + return value; + } + }); + if (process.env.NODE_ENV !== 'production') { + context.__next_log_error__ = function(err) { + options.onError(err); + }; + } + context.__next_eval__ = function __next_eval__(fn) { + const key = fn.toString(); + if (!warnedEvals.has(key)) { + const warning = getServerError(Object.defineProperty(new Error(`Dynamic Code Evaluation (e. g. 'eval', 'new Function') not allowed in Edge Runtime +Learn More: https://nextjs.org/docs/messages/edge-dynamic-code-evaluation`), "__NEXT_ERROR_CODE", { + value: "E149", + enumerable: false, + configurable: true + }), _constants.COMPILER_NAMES.edgeServer); + warning.name = 'DynamicCodeEvaluationWarning'; + Error.captureStackTrace(warning, __next_eval__); + warnedEvals.add(key); + options.onWarning(warning); + } + return fn(); + }; + context.__next_webassembly_compile__ = function __next_webassembly_compile__(fn) { + const key = fn.toString(); + if (!warnedWasmCodegens.has(key)) { + const warning = getServerError(Object.defineProperty(new Error(`Dynamic WASM code generation (e. g. 'WebAssembly.compile') not allowed in Edge Runtime. +Learn More: https://nextjs.org/docs/messages/edge-dynamic-code-evaluation`), "__NEXT_ERROR_CODE", { + value: "E184", + enumerable: false, + configurable: true + }), _constants.COMPILER_NAMES.edgeServer); + warning.name = 'DynamicWasmCodeGenerationWarning'; + Error.captureStackTrace(warning, __next_webassembly_compile__); + warnedWasmCodegens.add(key); + options.onWarning(warning); + } + return fn(); + }; + context.__next_webassembly_instantiate__ = async function __next_webassembly_instantiate__(fn) { + const result = await fn(); + // If a buffer is given, WebAssembly.instantiate returns an object + // containing both a module and an instance while it returns only an + // instance if a WASM module is given. Utilize the fact to determine + // if the WASM code generation happens. + // + // https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiate#primary_overload_%E2%80%94_taking_wasm_binary_code + const instantiatedFromBuffer = result.hasOwnProperty('module'); + const key = fn.toString(); + if (instantiatedFromBuffer && !warnedWasmCodegens.has(key)) { + const warning = getServerError(Object.defineProperty(new Error(`Dynamic WASM code generation ('WebAssembly.instantiate' with a buffer parameter) not allowed in Edge Runtime. +Learn More: https://nextjs.org/docs/messages/edge-dynamic-code-evaluation`), "__NEXT_ERROR_CODE", { + value: "E40", + enumerable: false, + configurable: true + }), _constants.COMPILER_NAMES.edgeServer); + warning.name = 'DynamicWasmCodeGenerationWarning'; + Error.captureStackTrace(warning, __next_webassembly_instantiate__); + warnedWasmCodegens.add(key); + options.onWarning(warning); + } + return result; + }; + const __fetch = context.fetch; + context.fetch = async (input, init = {})=>{ + const callingError = Object.defineProperty(new Error('[internal]'), "__NEXT_ERROR_CODE", { + value: "E5", + enumerable: false, + configurable: true + }); + const assetResponse = await (0, _fetchinlineassets.fetchInlineAsset)({ + input, + assets: options.edgeFunctionEntry.assets, + distDir: options.distDir, + context + }); + if (assetResponse) { + return assetResponse; + } + init.headers = new Headers(init.headers ?? {}); + if (!init.headers.has('user-agent')) { + init.headers.set(`user-agent`, `Next.js Middleware`); + } + const response = typeof input === 'object' && 'url' in input ? __fetch(input.url, { + ...(0, _pick.pick)(input, [ + 'method', + 'body', + 'cache', + 'credentials', + 'integrity', + 'keepalive', + 'mode', + 'redirect', + 'referrer', + 'referrerPolicy', + 'signal' + ]), + ...init, + headers: { + ...Object.fromEntries(input.headers), + ...Object.fromEntries(init.headers) + } + }) : __fetch(String(input), init); + return await response.catch((err)=>{ + callingError.message = err.message; + err.stack = callingError.stack; + throw err; + }); + }; + const __Request = context.Request; + context.Request = class extends __Request { + constructor(input, init){ + const url = typeof input !== 'string' && 'url' in input ? input.url : String(input); + if (typeof input === 'string') { + (0, _utils.validateURL)(url); + super(input, init); + } else { + super(input, init); + (0, _utils.validateURL)(url); + } + this.next = init == null ? void 0 : init.next; + } + }; + const __redirect = context.Response.redirect.bind(context.Response); + context.Response.redirect = (...args)=>{ + (0, _utils.validateURL)(args[0]); + return __redirect(...args); + }; + for (const name of _constants.EDGE_UNSUPPORTED_NODE_APIS){ + addStub(context, name); + } + Object.assign(context, wasm); + context.performance = performance; + context.AsyncLocalStorage = _async_hooks.AsyncLocalStorage; + // @ts-ignore the timeouts have weird types in the edge runtime + context.setInterval = (...args)=>_resourcemanagers.intervalsManager.add(args); + // @ts-ignore the timeouts have weird types in the edge runtime + context.clearInterval = (interval)=>_resourcemanagers.intervalsManager.remove(interval); + // @ts-ignore the timeouts have weird types in the edge runtime + context.setTimeout = (...args)=>_resourcemanagers.timeoutsManager.add(args); + // @ts-ignore the timeouts have weird types in the edge runtime + context.clearTimeout = (timeout)=>_resourcemanagers.timeoutsManager.remove(timeout); + // Duplicated from packages/next/src/server/after/builtin-request-context.ts + // because we need to use the sandboxed `Symbol.for`, not the one from the outside + const NEXT_REQUEST_CONTEXT_SYMBOL = context.Symbol.for('@next/request-context'); + Object.defineProperty(context, NEXT_REQUEST_CONTEXT_SYMBOL, { + enumerable: false, + value: edgeSandboxNextRequestContext + }); + return context; + } + }); + const decorateUnhandledError = getDecorateUnhandledError(runtime); + runtime.context.addEventListener('error', decorateUnhandledError); + const decorateUnhandledRejection = getDecorateUnhandledRejection(runtime); + runtime.context.addEventListener('unhandledrejection', decorateUnhandledRejection); + (0, _patcherrorinspect.patchErrorInspectEdgeLite)(runtime.context.Error); + // An Error from within the Edge Runtime could also bubble up into the Node.js process. + // For example, uncaught errors are handled in the Node.js runtime. + (0, _patcherrorinspect.patchErrorInspectNodeJS)(runtime.context.Error); + return { + runtime, + paths: new Map(), + warnedEvals: new Set() + }; +} +function getModuleContextShared(options) { + let deferredModuleContext = pendingModuleCaches.get(options.moduleName); + if (!deferredModuleContext) { + deferredModuleContext = createModuleContext(options); + pendingModuleCaches.set(options.moduleName, deferredModuleContext); + } + return deferredModuleContext; +} +async function getModuleContext(options) { + let lazyModuleContext; + if (options.useCache) { + lazyModuleContext = moduleContexts.get(options.moduleName) || await getModuleContextShared(options); + } + if (!lazyModuleContext) { + lazyModuleContext = await createModuleContext(options); + moduleContexts.set(options.moduleName, lazyModuleContext); + } + const moduleContext = lazyModuleContext; + const evaluateInContext = (filepath)=>{ + if (!moduleContext.paths.has(filepath)) { + const content = (0, _fs.readFileSync)(filepath, 'utf-8'); + try { + (0, _vm.runInContext)(content, moduleContext.runtime.context, { + filename: filepath + }); + moduleContext.paths.set(filepath, content); + } catch (error) { + if (options.useCache) { + moduleContext == null ? void 0 : moduleContext.paths.delete(filepath); + } + throw error; + } + } + }; + return { + ...moduleContext, + evaluateInContext + }; +} + +//# sourceMappingURL=context.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/sandbox/fetch-inline-assets.js b/build/node_modules/next/dist/server/web/sandbox/fetch-inline-assets.js new file mode 100644 index 0000000..1bcacd0 --- /dev/null +++ b/build/node_modules/next/dist/server/web/sandbox/fetch-inline-assets.js @@ -0,0 +1,35 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "fetchInlineAsset", { + enumerable: true, + get: function() { + return fetchInlineAsset; + } +}); +const _fs = require("fs"); +const _bodystreams = require("../../body-streams"); +const _path = require("path"); +async function fetchInlineAsset(options) { + const inputString = String(options.input); + if (!inputString.startsWith('blob:')) { + return; + } + const name = inputString.replace('blob:', ''); + const asset = options.assets ? options.assets.find((x)=>x.name === name) : { + name, + filePath: name + }; + if (!asset) { + return; + } + const filePath = (0, _path.resolve)(options.distDir, asset.filePath); + const fileIsReadable = await _fs.promises.access(filePath).then(()=>true, ()=>false); + if (fileIsReadable) { + const readStream = (0, _fs.createReadStream)(filePath); + return new options.context.Response((0, _bodystreams.requestToBodyStream)(options.context, Uint8Array, readStream)); + } +} + +//# sourceMappingURL=fetch-inline-assets.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/sandbox/index.js b/build/node_modules/next/dist/server/web/sandbox/index.js new file mode 100644 index 0000000..7d8aaca --- /dev/null +++ b/build/node_modules/next/dist/server/web/sandbox/index.js @@ -0,0 +1,28 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "clearModuleContext", { + enumerable: true, + get: function() { + return _context.clearModuleContext; + } +}); +0 && __export(require("./sandbox")); +_export_star(require("./sandbox"), exports); +const _context = require("./context"); +function _export_star(from, to) { + Object.keys(from).forEach(function(k) { + if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) { + Object.defineProperty(to, k, { + enumerable: true, + get: function() { + return from[k]; + } + }); + } + }); + return from; +} + +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/sandbox/resource-managers.js b/build/node_modules/next/dist/server/web/sandbox/resource-managers.js new file mode 100644 index 0000000..7fbd100 --- /dev/null +++ b/build/node_modules/next/dist/server/web/sandbox/resource-managers.js @@ -0,0 +1,88 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + intervalsManager: null, + timeoutsManager: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + intervalsManager: function() { + return intervalsManager; + }, + timeoutsManager: function() { + return timeoutsManager; + } +}); +class ResourceManager { + add(resourceArgs) { + const resource = this.create(resourceArgs); + this.resources.push(resource); + return resource; + } + remove(resource) { + this.resources = this.resources.filter((r)=>r !== resource); + this.destroy(resource); + } + removeAll() { + this.resources.forEach(this.destroy); + this.resources = []; + } + constructor(){ + this.resources = []; + } +} +class IntervalsManager extends ResourceManager { + create(args) { + // TODO: use the edge runtime provided `setInterval` instead + return webSetIntervalPolyfill(...args); + } + destroy(interval) { + clearInterval(interval); + } +} +class TimeoutsManager extends ResourceManager { + create(args) { + // TODO: use the edge runtime provided `setTimeout` instead + return webSetTimeoutPolyfill(...args); + } + destroy(timeout) { + clearTimeout(timeout); + } +} +function webSetIntervalPolyfill(callback, ms, ...args) { + return setInterval(()=>{ + // node's `setInterval` sets `this` to the `Timeout` instance it returned, + // but web `setInterval` always sets `this` to `window` + // see: https://developer.mozilla.org/en-US/docs/Web/API/Window/setInterval#the_this_problem + return callback.apply(globalThis, args); + }, ms)[Symbol.toPrimitive](); +} +function webSetTimeoutPolyfill(callback, ms, ...args) { + const wrappedCallback = ()=>{ + try { + // node's `setTimeout` sets `this` to the `Timeout` instance it returned, + // but web `setTimeout` always sets `this` to `window` + // see: https://developer.mozilla.org/en-US/docs/Web/API/Window/setTimeout#the_this_problem + return callback.apply(globalThis, args); + } finally{ + // On certain older node versions (<20.16.0, <22.4.0), + // a `setTimeout` whose Timeout was converted to a primitive will leak. + // See: https://github.com/nodejs/node/issues/53335 + // We can work around this by explicitly calling `clearTimeout` after the callback runs. + clearTimeout(timeout); + } + }; + const timeout = setTimeout(wrappedCallback, ms); + return timeout[Symbol.toPrimitive](); +} +const intervalsManager = new IntervalsManager(); +const timeoutsManager = new TimeoutsManager(); + +//# sourceMappingURL=resource-managers.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/sandbox/sandbox.js b/build/node_modules/next/dist/server/web/sandbox/sandbox.js new file mode 100644 index 0000000..1e38391 --- /dev/null +++ b/build/node_modules/next/dist/server/web/sandbox/sandbox.js @@ -0,0 +1,137 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + ErrorSource: null, + getRuntimeContext: null, + run: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + ErrorSource: function() { + return ErrorSource; + }, + getRuntimeContext: function() { + return getRuntimeContext; + }, + run: function() { + return run; + } +}); +const _context = require("./context"); +const _bodystreams = require("../../body-streams"); +const _builtinrequestcontext = require("../../after/builtin-request-context"); +const _routerservercontext = require("../../lib/router-utils/router-server-context"); +const ErrorSource = Symbol('SandboxError'); +const FORBIDDEN_HEADERS = [ + 'content-length', + 'content-encoding', + 'transfer-encoding' +]; +/** + * Decorates the runner function making sure all errors it can produce are + * tagged with `edge-server` so they can properly be rendered in dev. + */ function withTaggedErrors(fn) { + if (process.env.NODE_ENV === 'development') { + const { getServerError } = require('../../dev/node-stack-frames'); + return (params)=>fn(params).then((result)=>{ + var _result_waitUntil; + return { + ...result, + waitUntil: result == null ? void 0 : (_result_waitUntil = result.waitUntil) == null ? void 0 : _result_waitUntil.catch((error)=>{ + // TODO: used COMPILER_NAMES.edgeServer instead. Verify that it does not increase the runtime size. + throw getServerError(error, 'edge-server'); + }) + }; + }).catch((error)=>{ + // TODO: used COMPILER_NAMES.edgeServer instead + throw getServerError(error, 'edge-server'); + }); + } + return fn; +} +async function getRuntimeContext(params) { + const { runtime, evaluateInContext } = await (0, _context.getModuleContext)({ + moduleName: params.name, + onWarning: params.onWarning ?? (()=>{}), + onError: params.onError ?? (()=>{}), + useCache: params.useCache !== false, + edgeFunctionEntry: params.edgeFunctionEntry, + distDir: params.distDir + }); + if (params.incrementalCache) { + runtime.context.globalThis.__incrementalCacheShared = true; + runtime.context.globalThis.__incrementalCache = params.incrementalCache; + } + // expose router server context for access to dev handlers like + // logErrorWithOriginalStack + ; + runtime.context.globalThis[_routerservercontext.RouterServerContextSymbol] = _routerservercontext.routerServerGlobal[_routerservercontext.RouterServerContextSymbol]; + if (params.serverComponentsHmrCache) { + runtime.context.globalThis.__serverComponentsHmrCache = params.serverComponentsHmrCache; + } + if (params.clientAssetToken) { + runtime.context.globalThis.NEXT_CLIENT_ASSET_SUFFIX = params.clientAssetToken ? `?dpl=${params.clientAssetToken}` : ''; + } + for (const paramPath of params.paths){ + evaluateInContext(paramPath); + } + return runtime; +} +const run = withTaggedErrors(async function runWithTaggedErrors(params) { + var _params_request_body; + const runtime = await getRuntimeContext(params); + const edgeFunction = (await runtime.context._ENTRIES[`middleware_${params.name}`]).default; + const cloned = ![ + 'HEAD', + 'GET' + ].includes(params.request.method) ? (_params_request_body = params.request.body) == null ? void 0 : _params_request_body.cloneBodyStream() : undefined; + const KUint8Array = runtime.evaluate('Uint8Array'); + const urlInstance = new URL(params.request.url); + params.request.url = urlInstance.toString(); + const headers = new Headers(); + for (const [key, value] of Object.entries(params.request.headers)){ + headers.set(key, (value == null ? void 0 : value.toString()) ?? ''); + } + try { + let result = undefined; + const builtinRequestCtx = { + ...(0, _builtinrequestcontext.getBuiltinRequestContext)(), + // FIXME(after): + // arguably, this is an abuse of "@next/request-context" -- + // it'd make more sense to simply forward its existing value into the sandbox (in `createModuleContext`) + // but here we're using it to just pass in `waitUntil` regardless if we were running in this context or not. + waitUntil: params.request.waitUntil + }; + await _context.edgeSandboxNextRequestContext.run(builtinRequestCtx, ()=>_context.requestStore.run({ + headers + }, async ()=>{ + result = await edgeFunction({ + request: { + ...params.request, + body: cloned && (0, _bodystreams.requestToBodyStream)(runtime.context, KUint8Array, cloned) + } + }); + for (const headerName of FORBIDDEN_HEADERS){ + result.response.headers.delete(headerName); + } + })); + if (!result) throw Object.defineProperty(new Error('Edge function did not return a response'), "__NEXT_ERROR_CODE", { + value: "E332", + enumerable: false, + configurable: true + }); + return result; + } finally{ + var _params_request_body1; + await ((_params_request_body1 = params.request.body) == null ? void 0 : _params_request_body1.finalize()); + } +}); + +//# sourceMappingURL=sandbox.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/spec-extension/adapters/headers.js b/build/node_modules/next/dist/server/web/spec-extension/adapters/headers.js new file mode 100644 index 0000000..64d9d3a --- /dev/null +++ b/build/node_modules/next/dist/server/web/spec-extension/adapters/headers.js @@ -0,0 +1,192 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + HeadersAdapter: null, + ReadonlyHeadersError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + HeadersAdapter: function() { + return HeadersAdapter; + }, + ReadonlyHeadersError: function() { + return ReadonlyHeadersError; + } +}); +const _reflect = require("./reflect"); +class ReadonlyHeadersError extends Error { + constructor(){ + super('Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers'); + } + static callable() { + throw new ReadonlyHeadersError(); + } +} +class HeadersAdapter extends Headers { + constructor(headers){ + // We've already overridden the methods that would be called, so we're just + // calling the super constructor to ensure that the instanceof check works. + super(); + this.headers = new Proxy(headers, { + get (target, prop, receiver) { + // Because this is just an object, we expect that all "get" operations + // are for properties. If it's a "get" for a symbol, we'll just return + // the symbol. + if (typeof prop === 'symbol') { + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + const lowercased = prop.toLowerCase(); + // Let's find the original casing of the key. This assumes that there is + // no mixed case keys (e.g. "Content-Type" and "content-type") in the + // headers object. + const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased); + // If the original casing doesn't exist, return undefined. + if (typeof original === 'undefined') return; + // If the original casing exists, return the value. + return _reflect.ReflectAdapter.get(target, original, receiver); + }, + set (target, prop, value, receiver) { + if (typeof prop === 'symbol') { + return _reflect.ReflectAdapter.set(target, prop, value, receiver); + } + const lowercased = prop.toLowerCase(); + // Let's find the original casing of the key. This assumes that there is + // no mixed case keys (e.g. "Content-Type" and "content-type") in the + // headers object. + const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased); + // If the original casing doesn't exist, use the prop as the key. + return _reflect.ReflectAdapter.set(target, original ?? prop, value, receiver); + }, + has (target, prop) { + if (typeof prop === 'symbol') return _reflect.ReflectAdapter.has(target, prop); + const lowercased = prop.toLowerCase(); + // Let's find the original casing of the key. This assumes that there is + // no mixed case keys (e.g. "Content-Type" and "content-type") in the + // headers object. + const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased); + // If the original casing doesn't exist, return false. + if (typeof original === 'undefined') return false; + // If the original casing exists, return true. + return _reflect.ReflectAdapter.has(target, original); + }, + deleteProperty (target, prop) { + if (typeof prop === 'symbol') return _reflect.ReflectAdapter.deleteProperty(target, prop); + const lowercased = prop.toLowerCase(); + // Let's find the original casing of the key. This assumes that there is + // no mixed case keys (e.g. "Content-Type" and "content-type") in the + // headers object. + const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased); + // If the original casing doesn't exist, return true. + if (typeof original === 'undefined') return true; + // If the original casing exists, delete the property. + return _reflect.ReflectAdapter.deleteProperty(target, original); + } + }); + } + /** + * Seals a Headers instance to prevent modification by throwing an error when + * any mutating method is called. + */ static seal(headers) { + return new Proxy(headers, { + get (target, prop, receiver) { + switch(prop){ + case 'append': + case 'delete': + case 'set': + return ReadonlyHeadersError.callable; + default: + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + } + }); + } + /** + * Merges a header value into a string. This stores multiple values as an + * array, so we need to merge them into a string. + * + * @param value a header value + * @returns a merged header value (a string) + */ merge(value) { + if (Array.isArray(value)) return value.join(', '); + return value; + } + /** + * Creates a Headers instance from a plain object or a Headers instance. + * + * @param headers a plain object or a Headers instance + * @returns a headers instance + */ static from(headers) { + if (headers instanceof Headers) return headers; + return new HeadersAdapter(headers); + } + append(name, value) { + const existing = this.headers[name]; + if (typeof existing === 'string') { + this.headers[name] = [ + existing, + value + ]; + } else if (Array.isArray(existing)) { + existing.push(value); + } else { + this.headers[name] = value; + } + } + delete(name) { + delete this.headers[name]; + } + get(name) { + const value = this.headers[name]; + if (typeof value !== 'undefined') return this.merge(value); + return null; + } + has(name) { + return typeof this.headers[name] !== 'undefined'; + } + set(name, value) { + this.headers[name] = value; + } + forEach(callbackfn, thisArg) { + for (const [name, value] of this.entries()){ + callbackfn.call(thisArg, value, name, this); + } + } + *entries() { + for (const key of Object.keys(this.headers)){ + const name = key.toLowerCase(); + // We assert here that this is a string because we got it from the + // Object.keys() call above. + const value = this.get(name); + yield [ + name, + value + ]; + } + } + *keys() { + for (const key of Object.keys(this.headers)){ + const name = key.toLowerCase(); + yield name; + } + } + *values() { + for (const key of Object.keys(this.headers)){ + // We assert here that this is a string because we got it from the + // Object.keys() call above. + const value = this.get(key); + yield value; + } + } + [Symbol.iterator]() { + return this.entries(); + } +} + +//# sourceMappingURL=headers.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/spec-extension/adapters/next-request.js b/build/node_modules/next/dist/server/web/spec-extension/adapters/next-request.js new file mode 100644 index 0000000..5c27a83 --- /dev/null +++ b/build/node_modules/next/dist/server/web/spec-extension/adapters/next-request.js @@ -0,0 +1,142 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + NextRequestAdapter: null, + ResponseAborted: null, + ResponseAbortedName: null, + createAbortController: null, + signalFromNodeResponse: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + NextRequestAdapter: function() { + return NextRequestAdapter; + }, + ResponseAborted: function() { + return ResponseAborted; + }, + ResponseAbortedName: function() { + return ResponseAbortedName; + }, + createAbortController: function() { + return createAbortController; + }, + signalFromNodeResponse: function() { + return signalFromNodeResponse; + } +}); +const _requestmeta = require("../../../request-meta"); +const _utils = require("../../utils"); +const _request = require("../request"); +const _helpers = require("../../../base-http/helpers"); +const ResponseAbortedName = 'ResponseAborted'; +class ResponseAborted extends Error { + constructor(...args){ + super(...args), this.name = ResponseAbortedName; + } +} +function createAbortController(response) { + const controller = new AbortController(); + // If `finish` fires first, then `res.end()` has been called and the close is + // just us finishing the stream on our side. If `close` fires first, then we + // know the client disconnected before we finished. + response.once('close', ()=>{ + if (response.writableFinished) return; + controller.abort(new ResponseAborted()); + }); + return controller; +} +function signalFromNodeResponse(response) { + const { errored, destroyed } = response; + if (errored || destroyed) { + return AbortSignal.abort(errored ?? new ResponseAborted()); + } + const { signal } = createAbortController(response); + return signal; +} +class NextRequestAdapter { + static fromBaseNextRequest(request, signal) { + if (// The type check here ensures that `req` is correctly typed, and the + // environment variable check provides dead code elimination. + process.env.NEXT_RUNTIME === 'edge' && (0, _helpers.isWebNextRequest)(request)) { + return NextRequestAdapter.fromWebNextRequest(request); + } else if (// The type check here ensures that `req` is correctly typed, and the + // environment variable check provides dead code elimination. + process.env.NEXT_RUNTIME !== 'edge' && (0, _helpers.isNodeNextRequest)(request)) { + return NextRequestAdapter.fromNodeNextRequest(request, signal); + } else { + throw Object.defineProperty(new Error('Invariant: Unsupported NextRequest type'), "__NEXT_ERROR_CODE", { + value: "E345", + enumerable: false, + configurable: true + }); + } + } + static fromNodeNextRequest(request, signal) { + // HEAD and GET requests can not have a body. + let body = null; + if (request.method !== 'GET' && request.method !== 'HEAD' && request.body) { + // @ts-expect-error - this is handled by undici, when streams/web land use it instead + body = request.body; + } + let url; + if (request.url.startsWith('http')) { + url = new URL(request.url); + } else { + // Grab the full URL from the request metadata. + const base = (0, _requestmeta.getRequestMeta)(request, 'initURL'); + if (!base || !base.startsWith('http')) { + // Because the URL construction relies on the fact that the URL provided + // is absolute, we need to provide a base URL. We can't use the request + // URL because it's relative, so we use a dummy URL instead. + url = new URL(request.url, 'http://n'); + } else { + url = new URL(request.url, base); + } + } + return new _request.NextRequest(url, { + method: request.method, + headers: (0, _utils.fromNodeOutgoingHttpHeaders)(request.headers), + duplex: 'half', + signal, + // geo + // ip + // nextConfig + // body can not be passed if request was aborted + // or we get a Request body was disturbed error + ...signal.aborted ? {} : { + body + } + }); + } + static fromWebNextRequest(request) { + // HEAD and GET requests can not have a body. + let body = null; + if (request.method !== 'GET' && request.method !== 'HEAD') { + body = request.body; + } + return new _request.NextRequest(request.url, { + method: request.method, + headers: (0, _utils.fromNodeOutgoingHttpHeaders)(request.headers), + duplex: 'half', + signal: request.request.signal, + // geo + // ip + // nextConfig + // body can not be passed if request was aborted + // or we get a Request body was disturbed error + ...request.request.signal.aborted ? {} : { + body + } + }); + } +} + +//# sourceMappingURL=next-request.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/spec-extension/adapters/reflect.js b/build/node_modules/next/dist/server/web/spec-extension/adapters/reflect.js new file mode 100644 index 0000000..146f063 --- /dev/null +++ b/build/node_modules/next/dist/server/web/spec-extension/adapters/reflect.js @@ -0,0 +1,30 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "ReflectAdapter", { + enumerable: true, + get: function() { + return ReflectAdapter; + } +}); +class ReflectAdapter { + static get(target, prop, receiver) { + const value = Reflect.get(target, prop, receiver); + if (typeof value === 'function') { + return value.bind(target); + } + return value; + } + static set(target, prop, value, receiver) { + return Reflect.set(target, prop, value, receiver); + } + static has(target, prop) { + return Reflect.has(target, prop); + } + static deleteProperty(target, prop) { + return Reflect.deleteProperty(target, prop); + } +} + +//# sourceMappingURL=reflect.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.js b/build/node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.js new file mode 100644 index 0000000..15feea7 --- /dev/null +++ b/build/node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.js @@ -0,0 +1,211 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + MutableRequestCookiesAdapter: null, + ReadonlyRequestCookiesError: null, + RequestCookiesAdapter: null, + appendMutableCookies: null, + areCookiesMutableInCurrentPhase: null, + createCookiesWithMutableAccessCheck: null, + getModifiedCookieValues: null, + responseCookiesToRequestCookies: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + MutableRequestCookiesAdapter: function() { + return MutableRequestCookiesAdapter; + }, + ReadonlyRequestCookiesError: function() { + return ReadonlyRequestCookiesError; + }, + RequestCookiesAdapter: function() { + return RequestCookiesAdapter; + }, + appendMutableCookies: function() { + return appendMutableCookies; + }, + areCookiesMutableInCurrentPhase: function() { + return areCookiesMutableInCurrentPhase; + }, + createCookiesWithMutableAccessCheck: function() { + return createCookiesWithMutableAccessCheck; + }, + getModifiedCookieValues: function() { + return getModifiedCookieValues; + }, + responseCookiesToRequestCookies: function() { + return responseCookiesToRequestCookies; + } +}); +const _cookies = require("../cookies"); +const _reflect = require("./reflect"); +const _workasyncstorageexternal = require("../../../app-render/work-async-storage.external"); +const _actionrevalidationkind = require("../../../../shared/lib/action-revalidation-kind"); +class ReadonlyRequestCookiesError extends Error { + constructor(){ + super('Cookies can only be modified in a Server Action or Route Handler. Read more: https://nextjs.org/docs/app/api-reference/functions/cookies#options'); + } + static callable() { + throw new ReadonlyRequestCookiesError(); + } +} +class RequestCookiesAdapter { + static seal(cookies) { + return new Proxy(cookies, { + get (target, prop, receiver) { + switch(prop){ + case 'clear': + case 'delete': + case 'set': + return ReadonlyRequestCookiesError.callable; + default: + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + } + }); + } +} +const SYMBOL_MODIFY_COOKIE_VALUES = Symbol.for('next.mutated.cookies'); +function getModifiedCookieValues(cookies) { + const modified = cookies[SYMBOL_MODIFY_COOKIE_VALUES]; + if (!modified || !Array.isArray(modified) || modified.length === 0) { + return []; + } + return modified; +} +function appendMutableCookies(headers, mutableCookies) { + const modifiedCookieValues = getModifiedCookieValues(mutableCookies); + if (modifiedCookieValues.length === 0) { + return false; + } + // Return a new response that extends the response with + // the modified cookies as fallbacks. `res` cookies + // will still take precedence. + const resCookies = new _cookies.ResponseCookies(headers); + const returnedCookies = resCookies.getAll(); + // Set the modified cookies as fallbacks. + for (const cookie of modifiedCookieValues){ + resCookies.set(cookie); + } + // Set the original cookies as the final values. + for (const cookie of returnedCookies){ + resCookies.set(cookie); + } + return true; +} +class MutableRequestCookiesAdapter { + static wrap(cookies, onUpdateCookies) { + const responseCookies = new _cookies.ResponseCookies(new Headers()); + for (const cookie of cookies.getAll()){ + responseCookies.set(cookie); + } + let modifiedValues = []; + const modifiedCookies = new Set(); + const updateResponseCookies = ()=>{ + // TODO-APP: change method of getting workStore + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + if (workStore) { + workStore.pathWasRevalidated = _actionrevalidationkind.ActionDidRevalidateStaticAndDynamic; + } + const allCookies = responseCookies.getAll(); + modifiedValues = allCookies.filter((c)=>modifiedCookies.has(c.name)); + if (onUpdateCookies) { + const serializedCookies = []; + for (const cookie of modifiedValues){ + const tempCookies = new _cookies.ResponseCookies(new Headers()); + tempCookies.set(cookie); + serializedCookies.push(tempCookies.toString()); + } + onUpdateCookies(serializedCookies); + } + }; + const wrappedCookies = new Proxy(responseCookies, { + get (target, prop, receiver) { + switch(prop){ + // A special symbol to get the modified cookie values + case SYMBOL_MODIFY_COOKIE_VALUES: + return modifiedValues; + // TODO: Throw error if trying to set a cookie after the response + // headers have been set. + case 'delete': + return function(...args) { + modifiedCookies.add(typeof args[0] === 'string' ? args[0] : args[0].name); + try { + target.delete(...args); + return wrappedCookies; + } finally{ + updateResponseCookies(); + } + }; + case 'set': + return function(...args) { + modifiedCookies.add(typeof args[0] === 'string' ? args[0] : args[0].name); + try { + target.set(...args); + return wrappedCookies; + } finally{ + updateResponseCookies(); + } + }; + default: + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + } + }); + return wrappedCookies; + } +} +function createCookiesWithMutableAccessCheck(requestStore) { + const wrappedCookies = new Proxy(requestStore.mutableCookies, { + get (target, prop, receiver) { + switch(prop){ + case 'delete': + return function(...args) { + ensureCookiesAreStillMutable(requestStore, 'cookies().delete'); + target.delete(...args); + return wrappedCookies; + }; + case 'set': + return function(...args) { + ensureCookiesAreStillMutable(requestStore, 'cookies().set'); + target.set(...args); + return wrappedCookies; + }; + default: + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + } + }); + return wrappedCookies; +} +function areCookiesMutableInCurrentPhase(requestStore) { + return requestStore.phase === 'action'; +} +/** Ensure that cookies() starts throwing on mutation + * if we changed phases and can no longer mutate. + * + * This can happen when going: + * 'render' -> 'after' + * 'action' -> 'render' + * */ function ensureCookiesAreStillMutable(requestStore, _callingExpression) { + if (!areCookiesMutableInCurrentPhase(requestStore)) { + // TODO: maybe we can give a more precise error message based on callingExpression? + throw new ReadonlyRequestCookiesError(); + } +} +function responseCookiesToRequestCookies(responseCookies) { + const requestCookies = new _cookies.RequestCookies(new Headers()); + for (const cookie of responseCookies.getAll()){ + requestCookies.set(cookie); + } + return requestCookies; +} + +//# sourceMappingURL=request-cookies.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/spec-extension/cookies.js b/build/node_modules/next/dist/server/web/spec-extension/cookies.js new file mode 100644 index 0000000..5c31222 --- /dev/null +++ b/build/node_modules/next/dist/server/web/spec-extension/cookies.js @@ -0,0 +1,29 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + RequestCookies: null, + ResponseCookies: null, + stringifyCookie: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + RequestCookies: function() { + return _cookies.RequestCookies; + }, + ResponseCookies: function() { + return _cookies.ResponseCookies; + }, + stringifyCookie: function() { + return _cookies.stringifyCookie; + } +}); +const _cookies = require("next/dist/compiled/@edge-runtime/cookies"); + +//# sourceMappingURL=cookies.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/spec-extension/fetch-event.js b/build/node_modules/next/dist/server/web/spec-extension/fetch-event.js new file mode 100644 index 0000000..013873f --- /dev/null +++ b/build/node_modules/next/dist/server/web/spec-extension/fetch-event.js @@ -0,0 +1,98 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + NextFetchEvent: null, + getWaitUntilPromiseFromEvent: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + NextFetchEvent: function() { + return NextFetchEvent; + }, + getWaitUntilPromiseFromEvent: function() { + return getWaitUntilPromiseFromEvent; + } +}); +const _error = require("../error"); +const responseSymbol = Symbol('response'); +const passThroughSymbol = Symbol('passThrough'); +const waitUntilSymbol = Symbol('waitUntil'); +class FetchEvent { + constructor(_request, waitUntil){ + this[passThroughSymbol] = false; + this[waitUntilSymbol] = waitUntil ? { + kind: 'external', + function: waitUntil + } : { + kind: 'internal', + promises: [] + }; + } + // TODO: is this dead code? NextFetchEvent never lets this get called + respondWith(response) { + if (!this[responseSymbol]) { + this[responseSymbol] = Promise.resolve(response); + } + } + // TODO: is this dead code? passThroughSymbol is unused + passThroughOnException() { + this[passThroughSymbol] = true; + } + waitUntil(promise) { + if (this[waitUntilSymbol].kind === 'external') { + // if we received an external waitUntil, we delegate to it + // TODO(after): this will make us not go through `getServerError(error, 'edge-server')` in `sandbox` + const waitUntil = this[waitUntilSymbol].function; + return waitUntil(promise); + } else { + // if we didn't receive an external waitUntil, we make it work on our own + // (and expect the caller to do something with the promises) + this[waitUntilSymbol].promises.push(promise); + } + } +} +function getWaitUntilPromiseFromEvent(event) { + return event[waitUntilSymbol].kind === 'internal' ? Promise.all(event[waitUntilSymbol].promises).then(()=>{}) : undefined; +} +class NextFetchEvent extends FetchEvent { + constructor(params){ + var _params_context; + super(params.request, (_params_context = params.context) == null ? void 0 : _params_context.waitUntil); + this.sourcePage = params.page; + } + /** + * @deprecated The `request` is now the first parameter and the API is now async. + * + * Read more: https://nextjs.org/docs/messages/middleware-new-signature + */ get request() { + throw Object.defineProperty(new _error.PageSignatureError({ + page: this.sourcePage + }), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + /** + * @deprecated Using `respondWith` is no longer needed. + * + * Read more: https://nextjs.org/docs/messages/middleware-new-signature + */ respondWith() { + throw Object.defineProperty(new _error.PageSignatureError({ + page: this.sourcePage + }), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } +} + +//# sourceMappingURL=fetch-event.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/spec-extension/image-response.js b/build/node_modules/next/dist/server/web/spec-extension/image-response.js new file mode 100644 index 0000000..13f3f9e --- /dev/null +++ b/build/node_modules/next/dist/server/web/spec-extension/image-response.js @@ -0,0 +1,22 @@ +/** + * @deprecated ImageResponse moved from "next/server" to "next/og" since Next.js 14, please import from "next/og" instead. + * Migration with codemods: https://nextjs.org/docs/app/building-your-application/upgrading/codemods#next-og-import + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "ImageResponse", { + enumerable: true, + get: function() { + return ImageResponse; + } +}); +function ImageResponse() { + throw Object.defineProperty(new Error('ImageResponse moved from "next/server" to "next/og" since Next.js 14, please import from "next/og" instead'), "__NEXT_ERROR_CODE", { + value: "E183", + enumerable: false, + configurable: true + }); +} + +//# sourceMappingURL=image-response.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/spec-extension/request.js b/build/node_modules/next/dist/server/web/spec-extension/request.js new file mode 100644 index 0000000..3dc1ce5 --- /dev/null +++ b/build/node_modules/next/dist/server/web/spec-extension/request.js @@ -0,0 +1,99 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + INTERNALS: null, + NextRequest: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + INTERNALS: function() { + return INTERNALS; + }, + NextRequest: function() { + return NextRequest; + } +}); +const _nexturl = require("../next-url"); +const _utils = require("../utils"); +const _error = require("../error"); +const _cookies = require("./cookies"); +const INTERNALS = Symbol('internal request'); +class NextRequest extends Request { + constructor(input, init = {}){ + const url = typeof input !== 'string' && 'url' in input ? input.url : String(input); + (0, _utils.validateURL)(url); + // node Request instance requires duplex option when a body + // is present or it errors, we don't handle this for + // Request being passed in since it would have already + // errored if this wasn't configured + if (process.env.NEXT_RUNTIME !== 'edge') { + if (init.body && init.duplex !== 'half') { + init.duplex = 'half'; + } + } + if (input instanceof Request) super(input, init); + else super(url, init); + const nextUrl = new _nexturl.NextURL(url, { + headers: (0, _utils.toNodeOutgoingHttpHeaders)(this.headers), + nextConfig: init.nextConfig + }); + this[INTERNALS] = { + cookies: new _cookies.RequestCookies(this.headers), + nextUrl, + url: process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE ? url : nextUrl.toString() + }; + } + [Symbol.for('edge-runtime.inspect.custom')]() { + return { + cookies: this.cookies, + nextUrl: this.nextUrl, + url: this.url, + // rest of props come from Request + bodyUsed: this.bodyUsed, + cache: this.cache, + credentials: this.credentials, + destination: this.destination, + headers: Object.fromEntries(this.headers), + integrity: this.integrity, + keepalive: this.keepalive, + method: this.method, + mode: this.mode, + redirect: this.redirect, + referrer: this.referrer, + referrerPolicy: this.referrerPolicy, + signal: this.signal + }; + } + get cookies() { + return this[INTERNALS].cookies; + } + get nextUrl() { + return this[INTERNALS].nextUrl; + } + /** + * @deprecated + * `page` has been deprecated in favour of `URLPattern`. + * Read more: https://nextjs.org/docs/messages/middleware-request-page + */ get page() { + throw new _error.RemovedPageError(); + } + /** + * @deprecated + * `ua` has been removed in favour of \`userAgent\` function. + * Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent + */ get ua() { + throw new _error.RemovedUAError(); + } + get url() { + return this[INTERNALS].url; + } +} + +//# sourceMappingURL=request.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/spec-extension/response.js b/build/node_modules/next/dist/server/web/spec-extension/response.js new file mode 100644 index 0000000..f5fc8e1 --- /dev/null +++ b/build/node_modules/next/dist/server/web/spec-extension/response.js @@ -0,0 +1,136 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "NextResponse", { + enumerable: true, + get: function() { + return NextResponse; + } +}); +const _cookies = require("../../web/spec-extension/cookies"); +const _nexturl = require("../next-url"); +const _utils = require("../utils"); +const _reflect = require("./adapters/reflect"); +const _cookies1 = require("./cookies"); +const INTERNALS = Symbol('internal response'); +const REDIRECTS = new Set([ + 301, + 302, + 303, + 307, + 308 +]); +function handleMiddlewareField(init, headers) { + var _init_request; + if (init == null ? void 0 : (_init_request = init.request) == null ? void 0 : _init_request.headers) { + if (!(init.request.headers instanceof Headers)) { + throw Object.defineProperty(new Error('request.headers must be an instance of Headers'), "__NEXT_ERROR_CODE", { + value: "E119", + enumerable: false, + configurable: true + }); + } + const keys = []; + for (const [key, value] of init.request.headers){ + headers.set('x-middleware-request-' + key, value); + keys.push(key); + } + headers.set('x-middleware-override-headers', keys.join(',')); + } +} +class NextResponse extends Response { + constructor(body, init = {}){ + super(body, init); + const headers = this.headers; + const cookies = new _cookies1.ResponseCookies(headers); + const cookiesProxy = new Proxy(cookies, { + get (target, prop, receiver) { + switch(prop){ + case 'delete': + case 'set': + { + return (...args)=>{ + const result = Reflect.apply(target[prop], target, args); + const newHeaders = new Headers(headers); + if (result instanceof _cookies1.ResponseCookies) { + headers.set('x-middleware-set-cookie', result.getAll().map((cookie)=>(0, _cookies.stringifyCookie)(cookie)).join(',')); + } + handleMiddlewareField(init, newHeaders); + return result; + }; + } + default: + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + } + }); + this[INTERNALS] = { + cookies: cookiesProxy, + url: init.url ? new _nexturl.NextURL(init.url, { + headers: (0, _utils.toNodeOutgoingHttpHeaders)(headers), + nextConfig: init.nextConfig + }) : undefined + }; + } + [Symbol.for('edge-runtime.inspect.custom')]() { + return { + cookies: this.cookies, + url: this.url, + // rest of props come from Response + body: this.body, + bodyUsed: this.bodyUsed, + headers: Object.fromEntries(this.headers), + ok: this.ok, + redirected: this.redirected, + status: this.status, + statusText: this.statusText, + type: this.type + }; + } + get cookies() { + return this[INTERNALS].cookies; + } + static json(body, init) { + const response = Response.json(body, init); + return new NextResponse(response.body, response); + } + static redirect(url, init) { + const status = typeof init === 'number' ? init : (init == null ? void 0 : init.status) ?? 307; + if (!REDIRECTS.has(status)) { + throw Object.defineProperty(new RangeError('Failed to execute "redirect" on "response": Invalid status code'), "__NEXT_ERROR_CODE", { + value: "E529", + enumerable: false, + configurable: true + }); + } + const initObj = typeof init === 'object' ? init : {}; + const headers = new Headers(initObj == null ? void 0 : initObj.headers); + headers.set('Location', (0, _utils.validateURL)(url)); + return new NextResponse(null, { + ...initObj, + headers, + status + }); + } + static rewrite(destination, init) { + const headers = new Headers(init == null ? void 0 : init.headers); + headers.set('x-middleware-rewrite', (0, _utils.validateURL)(destination)); + handleMiddlewareField(init, headers); + return new NextResponse(null, { + ...init, + headers + }); + } + static next(init) { + const headers = new Headers(init == null ? void 0 : init.headers); + headers.set('x-middleware-next', '1'); + handleMiddlewareField(init, headers); + return new NextResponse(null, { + ...init, + headers + }); + } +} + +//# sourceMappingURL=response.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/spec-extension/revalidate.js b/build/node_modules/next/dist/server/web/spec-extension/revalidate.js new file mode 100644 index 0000000..86f0a12 --- /dev/null +++ b/build/node_modules/next/dist/server/web/spec-extension/revalidate.js @@ -0,0 +1,214 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + refresh: null, + revalidatePath: null, + revalidateTag: null, + updateTag: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + refresh: function() { + return refresh; + }, + revalidatePath: function() { + return revalidatePath; + }, + revalidateTag: function() { + return revalidateTag; + }, + updateTag: function() { + return updateTag; + } +}); +const _dynamicrendering = require("../../app-render/dynamic-rendering"); +const _utils = require("../../../shared/lib/router/utils"); +const _constants = require("../../../lib/constants"); +const _workasyncstorageexternal = require("../../app-render/work-async-storage.external"); +const _workunitasyncstorageexternal = require("../../app-render/work-unit-async-storage.external"); +const _hooksservercontext = require("../../../client/components/hooks-server-context"); +const _invarianterror = require("../../../shared/lib/invariant-error"); +const _actionrevalidationkind = require("../../../shared/lib/action-revalidation-kind"); +const _removetrailingslash = require("../../../shared/lib/router/utils/remove-trailing-slash"); +function revalidateTag(tag, profile) { + if (!profile) { + console.warn('"revalidateTag" without the second argument is now deprecated, add second argument of "max" or use "updateTag". See more info here: https://nextjs.org/docs/messages/revalidate-tag-single-arg'); + } + return revalidate([ + tag + ], `revalidateTag ${tag}`, profile); +} +function updateTag(tag) { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + // TODO: change this after investigating why phase: 'action' is + // set for route handlers + if (!workStore || workStore.page.endsWith('/route')) { + throw Object.defineProperty(new Error('updateTag can only be called from within a Server Action. ' + 'To invalidate cache tags in Route Handlers or other contexts, use revalidateTag instead. ' + 'See more info here: https://nextjs.org/docs/app/api-reference/functions/updateTag'), "__NEXT_ERROR_CODE", { + value: "E872", + enumerable: false, + configurable: true + }); + } + // updateTag uses immediate expiration (no profile) without deprecation warning + return revalidate([ + tag + ], `updateTag ${tag}`, undefined); +} +function refresh() { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (!workStore || workStore.page.endsWith('/route') || (workUnitStore == null ? void 0 : workUnitStore.phase) !== 'action') { + throw Object.defineProperty(new Error('refresh can only be called from within a Server Action. ' + 'See more info here: https://nextjs.org/docs/app/api-reference/functions/refresh'), "__NEXT_ERROR_CODE", { + value: "E870", + enumerable: false, + configurable: true + }); + } + if (workStore) { + // The Server Action version of refresh() only revalidates the dynamic data + // on the client. It doesn't affect cached data. + workStore.pathWasRevalidated = _actionrevalidationkind.ActionDidRevalidateDynamicOnly; + } +} +function revalidatePath(originalPath, type) { + if (originalPath.length > _constants.NEXT_CACHE_SOFT_TAG_MAX_LENGTH) { + console.warn(`Warning: revalidatePath received "${originalPath}" which exceeded max length of ${_constants.NEXT_CACHE_SOFT_TAG_MAX_LENGTH}. See more info here https://nextjs.org/docs/app/api-reference/functions/revalidatePath`); + return; + } + let normalizedPath = `${_constants.NEXT_CACHE_IMPLICIT_TAG_ID}${(0, _removetrailingslash.removeTrailingSlash)(originalPath)}`; + if (type) { + normalizedPath += `${normalizedPath.endsWith('/') ? '' : '/'}${type}`; + } else if ((0, _utils.isDynamicRoute)(originalPath)) { + console.warn(`Warning: a dynamic page path "${originalPath}" was passed to "revalidatePath", but the "type" parameter is missing. This has no effect by default, see more info here https://nextjs.org/docs/app/api-reference/functions/revalidatePath`); + } + const tags = [ + normalizedPath + ]; + if (normalizedPath === `${_constants.NEXT_CACHE_IMPLICIT_TAG_ID}/`) { + tags.push(`${_constants.NEXT_CACHE_IMPLICIT_TAG_ID}/index`); + } else if (normalizedPath === `${_constants.NEXT_CACHE_IMPLICIT_TAG_ID}/index`) { + tags.push(`${_constants.NEXT_CACHE_IMPLICIT_TAG_ID}/`); + } + return revalidate(tags, `revalidatePath ${originalPath}`); +} +function revalidate(tags, expression, profile) { + var _store_cacheLifeProfiles; + const store = _workasyncstorageexternal.workAsyncStorage.getStore(); + if (!store || !store.incrementalCache) { + throw Object.defineProperty(new Error(`Invariant: static generation store missing in ${expression}`), "__NEXT_ERROR_CODE", { + value: "E263", + enumerable: false, + configurable: true + }); + } + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workUnitStore) { + if (workUnitStore.phase === 'render') { + throw Object.defineProperty(new Error(`Route ${store.route} used "${expression}" during render which is unsupported. To ensure revalidation is performed consistently it must always happen outside of renders and cached functions. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`), "__NEXT_ERROR_CODE", { + value: "E7", + enumerable: false, + configurable: true + }); + } + switch(workUnitStore.type){ + case 'cache': + case 'private-cache': + throw Object.defineProperty(new Error(`Route ${store.route} used "${expression}" inside a "use cache" which is unsupported. To ensure revalidation is performed consistently it must always happen outside of renders and cached functions. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`), "__NEXT_ERROR_CODE", { + value: "E181", + enumerable: false, + configurable: true + }); + case 'unstable-cache': + throw Object.defineProperty(new Error(`Route ${store.route} used "${expression}" inside a function cached with "unstable_cache(...)" which is unsupported. To ensure revalidation is performed consistently it must always happen outside of renders and cached functions. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`), "__NEXT_ERROR_CODE", { + value: "E306", + enumerable: false, + configurable: true + }); + case 'generate-static-params': + throw Object.defineProperty(new Error(`Route ${store.route} used "${expression}" inside \`generateStaticParams\` which is unsupported. To ensure revalidation is performed consistently it must always happen outside of renders and cached functions. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`), "__NEXT_ERROR_CODE", { + value: "E1127", + enumerable: false, + configurable: true + }); + case 'prerender': + case 'prerender-runtime': + // cacheComponents Prerender + const error = Object.defineProperty(new Error(`Route ${store.route} used ${expression} without first calling \`await connection()\`.`), "__NEXT_ERROR_CODE", { + value: "E406", + enumerable: false, + configurable: true + }); + return (0, _dynamicrendering.abortAndThrowOnSynchronousRequestDataAccess)(store.route, expression, error, workUnitStore); + case 'prerender-client': + case 'validation-client': + throw Object.defineProperty(new _invarianterror.InvariantError(`${expression} must not be used within a client component. Next.js should be preventing ${expression} from being included in client components statically, but did not in this case.`), "__NEXT_ERROR_CODE", { + value: "E693", + enumerable: false, + configurable: true + }); + case 'prerender-ppr': + return (0, _dynamicrendering.postponeWithTracking)(store.route, expression, workUnitStore.dynamicTracking); + case 'prerender-legacy': + workUnitStore.revalidate = 0; + const err = Object.defineProperty(new _hooksservercontext.DynamicServerError(`Route ${store.route} couldn't be rendered statically because it used \`${expression}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`), "__NEXT_ERROR_CODE", { + value: "E558", + enumerable: false, + configurable: true + }); + store.dynamicUsageDescription = expression; + store.dynamicUsageStack = err.stack; + throw err; + case 'request': + if (process.env.NODE_ENV !== 'production') { + // TODO: This is most likely incorrect. It would lead to the ISR + // status being flipped when revalidating a static page with a server + // action. + workUnitStore.usedDynamic = true; + // TODO(restart-on-cache-miss): we should do a sync IO error here in dev + // to match prerender behavior + } + break; + default: + workUnitStore; + } + } + if (!store.pendingRevalidatedTags) { + store.pendingRevalidatedTags = []; + } + for (const tag of tags){ + const existingIndex = store.pendingRevalidatedTags.findIndex((item)=>{ + if (item.tag !== tag) return false; + // Compare profiles: both strings, both objects, or both undefined + if (typeof item.profile === 'string' && typeof profile === 'string') { + return item.profile === profile; + } + if (typeof item.profile === 'object' && typeof profile === 'object') { + return JSON.stringify(item.profile) === JSON.stringify(profile); + } + return item.profile === profile; + }); + if (existingIndex === -1) { + store.pendingRevalidatedTags.push({ + tag, + profile + }); + } + } + // if profile is provided and this is a stale-while-revalidate + // update we do not mark the path as revalidated so that server + // actions don't pull their own writes + const cacheLife = profile && typeof profile === 'object' ? profile : profile && typeof profile === 'string' && (store == null ? void 0 : (_store_cacheLifeProfiles = store.cacheLifeProfiles) == null ? void 0 : _store_cacheLifeProfiles[profile]) ? store.cacheLifeProfiles[profile] : undefined; + if (!profile || (cacheLife == null ? void 0 : cacheLife.expire) === 0) { + // TODO: only revalidate if the path matches + store.pathWasRevalidated = _actionrevalidationkind.ActionDidRevalidateStaticAndDynamic; + } +} + +//# sourceMappingURL=revalidate.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/spec-extension/unstable-cache.js b/build/node_modules/next/dist/server/web/spec-extension/unstable-cache.js new file mode 100644 index 0000000..1de7a9c --- /dev/null +++ b/build/node_modules/next/dist/server/web/spec-extension/unstable-cache.js @@ -0,0 +1,289 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "unstable_cache", { + enumerable: true, + get: function() { + return unstable_cache; + } +}); +const _constants = require("../../../lib/constants"); +const _patchfetch = require("../../lib/patch-fetch"); +const _workasyncstorageexternal = require("../../app-render/work-async-storage.external"); +const _workunitasyncstorageexternal = require("../../app-render/work-unit-async-storage.external"); +const _responsecache = require("../../response-cache"); +let noStoreFetchIdx = 0; +async function cacheNewResult(result, incrementalCache, cacheKey, tags, revalidate, fetchIdx, fetchUrl) { + await incrementalCache.set(cacheKey, { + kind: _responsecache.CachedRouteKind.FETCH, + data: { + headers: {}, + // TODO: handle non-JSON values? + body: JSON.stringify(result), + status: 200, + url: '' + }, + revalidate: typeof revalidate !== 'number' ? _constants.CACHE_ONE_YEAR_SECONDS : revalidate + }, { + fetchCache: true, + tags, + fetchIdx, + fetchUrl + }); + return; +} +function unstable_cache(cb, keyParts, options = {}) { + if (options.revalidate === 0) { + throw Object.defineProperty(new Error(`Invariant revalidate: 0 can not be passed to unstable_cache(), must be "false" or "> 0" ${cb.toString()}`), "__NEXT_ERROR_CODE", { + value: "E57", + enumerable: false, + configurable: true + }); + } + // Validate the tags provided are valid + const tags = options.tags ? (0, _patchfetch.validateTags)(options.tags, `unstable_cache ${cb.toString()}`) : []; + // Validate the revalidate options + (0, _patchfetch.validateRevalidate)(options.revalidate, `unstable_cache ${cb.name || cb.toString()}`); + // Stash the fixed part of the key at construction time. The invocation key will combine + // the fixed key with the arguments when actually called + // @TODO if cb.toString() is long we should hash it + // @TODO come up with a collision-free way to combine keyParts + // @TODO consider validating the keyParts are all strings. TS can't provide runtime guarantees + // and the error produced by accidentally using something that cannot be safely coerced is likely + // hard to debug + const fixedKey = `${cb.toString()}-${Array.isArray(keyParts) && keyParts.join(',')}`; + const cachedCb = async (...args)=>{ + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + // We must be able to find the incremental cache otherwise we throw + const maybeIncrementalCache = (workStore == null ? void 0 : workStore.incrementalCache) || globalThis.__incrementalCache; + if (!maybeIncrementalCache) { + throw Object.defineProperty(new Error(`Invariant: incrementalCache missing in unstable_cache ${cb.toString()}`), "__NEXT_ERROR_CODE", { + value: "E469", + enumerable: false, + configurable: true + }); + } + const incrementalCache = maybeIncrementalCache; + const cacheSignal = workUnitStore ? (0, _workunitasyncstorageexternal.getCacheSignal)(workUnitStore) : null; + if (cacheSignal) { + cacheSignal.beginRead(); + } + try { + // If there's no request store, we aren't in a request (or we're not in + // app router) and if there's no static generation store, we aren't in app + // router. Default to an empty pathname and search params when there's no + // request store or static generation store available. + const fetchUrlPrefix = workStore && workUnitStore ? getFetchUrlPrefix(workStore, workUnitStore) : ''; + // Construct the complete cache key for this function invocation + // @TODO stringify is likely not safe here. We will coerce undefined to null which will make + // the keyspace smaller than the execution space + const invocationKey = `${fixedKey}-${JSON.stringify(args)}`; + const cacheKey = await incrementalCache.generateCacheKey(invocationKey); + // $urlWithPath,$sortedQueryStringKeys,$hashOfEveryThingElse + const fetchUrl = `unstable_cache ${fetchUrlPrefix} ${cb.name ? ` ${cb.name}` : cacheKey}`; + const fetchIdx = (workStore ? workStore.nextFetchId : noStoreFetchIdx) ?? 1; + const implicitTags = workUnitStore == null ? void 0 : workUnitStore.implicitTags; + const innerCacheStore = { + type: 'unstable-cache', + phase: 'render', + implicitTags, + draftMode: workUnitStore && workStore && (0, _workunitasyncstorageexternal.getDraftModeProviderForCacheScope)(workStore, workUnitStore), + rootParams: undefined + }; + if (workStore) { + workStore.nextFetchId = fetchIdx + 1; + // We are in an App Router context. We try to return the cached entry if it exists and is valid + // If the entry is fresh we return it. If the entry is stale we return it but revalidate the entry in + // the background. If the entry is missing or invalid we generate a new entry and return it. + let isNestedUnstableCache = false; + if (workUnitStore) { + switch(workUnitStore.type){ + case 'cache': + case 'private-cache': + case 'prerender': + case 'prerender-runtime': + case 'prerender-ppr': + case 'prerender-legacy': + // We update the store's revalidate property if the option.revalidate is a higher precedence + // options.revalidate === undefined doesn't affect timing. + // options.revalidate === false doesn't shrink timing. it stays at the maximum. + if (typeof options.revalidate === 'number') { + if (workUnitStore.revalidate < options.revalidate) { + // The store is already revalidating on a shorter time interval, leave it alone + } else { + workUnitStore.revalidate = options.revalidate; + } + } + // We need to accumulate the tags for this invocation within the store + const collectedTags = workUnitStore.tags; + if (collectedTags === null) { + workUnitStore.tags = tags.slice(); + } else { + for (const tag of tags){ + // @TODO refactor tags to be a set to avoid this O(n) lookup + if (!collectedTags.includes(tag)) { + collectedTags.push(tag); + } + } + } + break; + case 'unstable-cache': + isNestedUnstableCache = true; + break; + case 'prerender-client': + case 'validation-client': + case 'request': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + if (// when we are nested inside of other unstable_cache's + // we should bypass cache similar to fetches + !isNestedUnstableCache && workStore.fetchCache !== 'force-no-store' && !workStore.isOnDemandRevalidate && !incrementalCache.isOnDemandRevalidate && !workStore.isDraftMode) { + // We attempt to get the current cache entry from the incremental cache. + const cacheEntry = await incrementalCache.get(cacheKey, { + kind: _responsecache.IncrementalCacheKind.FETCH, + revalidate: options.revalidate, + tags, + softTags: implicitTags == null ? void 0 : implicitTags.tags, + fetchIdx, + fetchUrl + }); + if (cacheEntry && cacheEntry.value) { + // The entry exists and has a value + if (cacheEntry.value.kind !== _responsecache.CachedRouteKind.FETCH) { + // The entry is invalid and we need a special warning + // @TODO why do we warn this way? Should this just be an error? How are these errors surfaced + // so bugs can be reported + // @TODO the invocation key can have sensitive data in it. we should not log this entire object + console.error(`Invariant invalid cacheEntry returned for ${invocationKey}`); + // will fall through to generating a new cache entry below + } else { + // We have a valid cache entry so we will be returning it. We also check to see if we need + // to background revalidate it by checking if it is stale. + const cachedResponse = cacheEntry.value.data.body !== undefined ? JSON.parse(cacheEntry.value.data.body) : undefined; + if (cacheEntry.isStale) { + if (!workStore.pendingRevalidates) { + workStore.pendingRevalidates = {}; + } + // Check if there's already a pending revalidation to avoid duplicate work + if (!workStore.pendingRevalidates[invocationKey]) { + // Create the revalidation promise + const revalidationPromise = _workunitasyncstorageexternal.workUnitAsyncStorage.run(innerCacheStore, cb, ...args).then(async (result)=>{ + await cacheNewResult(result, incrementalCache, cacheKey, tags, options.revalidate, fetchIdx, fetchUrl); + return result; + }).catch((err)=>{ + // @TODO This error handling seems wrong. We swallow the error? + console.error(`revalidating cache with key: ${invocationKey}`, err); + // Return the stale value on error for foreground revalidation + return cachedResponse; + }); + // Attach the empty catch here so we don't get a "unhandled promise + // rejection" warning. (Behavior is matched with patch-fetch) + if (workStore.isStaticGeneration) { + revalidationPromise.catch(()=>{}); + } + workStore.pendingRevalidates[invocationKey] = revalidationPromise; + } + // Check if we need to do foreground revalidation + if (workStore.isStaticGeneration) { + // When the page is revalidating and the cache entry is stale, + // we need to wait for fresh data (blocking revalidate) + return workStore.pendingRevalidates[invocationKey]; + } + // Otherwise, we're doing background revalidation - return stale immediately + } + // We had a valid cache entry so we return it here + return cachedResponse; + } + } + } + // If we got this far then we had an invalid cache entry and need to generate a new one + const result = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(innerCacheStore, cb, ...args); + if (!workStore.isDraftMode) { + if (!workStore.pendingRevalidates) { + workStore.pendingRevalidates = {}; + } + // We need to push the cache result promise to pending + // revalidates otherwise it won't be awaited and is just + // dangling + workStore.pendingRevalidates[invocationKey] = cacheNewResult(result, incrementalCache, cacheKey, tags, options.revalidate, fetchIdx, fetchUrl); + } + return result; + } else { + noStoreFetchIdx += 1; + // We are in Pages Router or were called outside of a render. We don't have a store + // so we just call the callback directly when it needs to run. + // If the entry is fresh we return it. If the entry is stale we return it but revalidate the entry in + // the background. If the entry is missing or invalid we generate a new entry and return it. + if (!incrementalCache.isOnDemandRevalidate) { + // We aren't doing an on demand revalidation so we check use the cache if valid + const cacheEntry = await incrementalCache.get(cacheKey, { + kind: _responsecache.IncrementalCacheKind.FETCH, + revalidate: options.revalidate, + tags, + fetchIdx, + fetchUrl, + softTags: implicitTags == null ? void 0 : implicitTags.tags + }); + if (cacheEntry && cacheEntry.value) { + // The entry exists and has a value + if (cacheEntry.value.kind !== _responsecache.CachedRouteKind.FETCH) { + // The entry is invalid and we need a special warning + // @TODO why do we warn this way? Should this just be an error? How are these errors surfaced + // so bugs can be reported + console.error(`Invariant invalid cacheEntry returned for ${invocationKey}`); + // will fall through to generating a new cache entry below + } else if (!cacheEntry.isStale) { + // We have a valid cache entry and it is fresh so we return it + return cacheEntry.value.data.body !== undefined ? JSON.parse(cacheEntry.value.data.body) : undefined; + } + } + } + // If we got this far then we had an invalid cache entry and need to generate a new one + const result = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(innerCacheStore, cb, ...args); + // we need to wait setting the new cache result here as + // we don't have pending revalidates on workStore to + // push to and we can't have a dangling promise + await cacheNewResult(result, incrementalCache, cacheKey, tags, options.revalidate, fetchIdx, fetchUrl); + return result; + } + } finally{ + if (cacheSignal) { + cacheSignal.endRead(); + } + } + }; + // TODO: once AsyncLocalStorage.run() returns the correct types this override will no longer be necessary + return cachedCb; +} +function getFetchUrlPrefix(workStore, workUnitStore) { + switch(workUnitStore.type){ + case 'request': + const pathname = workUnitStore.url.pathname; + const searchParams = new URLSearchParams(workUnitStore.url.search); + const sortedSearch = [ + ...searchParams.keys() + ].sort((a, b)=>a.localeCompare(b)).map((key)=>`${key}=${searchParams.get(key)}`).join('&'); + return `${pathname}${sortedSearch.length ? '?' : ''}${sortedSearch}`; + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-runtime': + case 'prerender-ppr': + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + return workStore.route; + default: + return workUnitStore; + } +} + +//# sourceMappingURL=unstable-cache.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/spec-extension/unstable-no-store.js b/build/node_modules/next/dist/server/web/spec-extension/unstable-no-store.js new file mode 100644 index 0000000..240720f --- /dev/null +++ b/build/node_modules/next/dist/server/web/spec-extension/unstable-no-store.js @@ -0,0 +1,51 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "unstable_noStore", { + enumerable: true, + get: function() { + return unstable_noStore; + } +}); +const _workasyncstorageexternal = require("../../app-render/work-async-storage.external"); +const _workunitasyncstorageexternal = require("../../app-render/work-unit-async-storage.external"); +const _dynamicrendering = require("../../app-render/dynamic-rendering"); +function unstable_noStore() { + const callingExpression = 'unstable_noStore()'; + const store = _workasyncstorageexternal.workAsyncStorage.getStore(); + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (!store) { + // This generally implies we are being called in Pages router. We should probably not support + // unstable_noStore in contexts outside of `react-server` condition but since we historically + // have not errored here previously, we maintain that behavior for now. + return; + } else if (store.forceStatic) { + return; + } else { + store.isUnstableNoStore = true; + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-runtime': + // unstable_noStore() is a noop in Dynamic I/O. + return; + case 'prerender-ppr': + case 'prerender-legacy': + case 'request': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'generate-static-params': + break; + default: + workUnitStore; + } + } + (0, _dynamicrendering.markCurrentScopeAsDynamic)(store, workUnitStore, callingExpression); + } +} + +//# sourceMappingURL=unstable-no-store.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/spec-extension/url-pattern.js b/build/node_modules/next/dist/server/web/spec-extension/url-pattern.js new file mode 100644 index 0000000..b57732e --- /dev/null +++ b/build/node_modules/next/dist/server/web/spec-extension/url-pattern.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "URLPattern", { + enumerable: true, + get: function() { + return GlobalURLPattern; + } +}); +const GlobalURLPattern = // @ts-expect-error: URLPattern is not available in Node.js +typeof URLPattern === 'undefined' ? undefined : URLPattern; + +//# sourceMappingURL=url-pattern.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/spec-extension/user-agent.js b/build/node_modules/next/dist/server/web/spec-extension/user-agent.js new file mode 100644 index 0000000..673179d --- /dev/null +++ b/build/node_modules/next/dist/server/web/spec-extension/user-agent.js @@ -0,0 +1,46 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + isBot: null, + userAgent: null, + userAgentFromString: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + isBot: function() { + return isBot; + }, + userAgent: function() { + return userAgent; + }, + userAgentFromString: function() { + return userAgentFromString; + } +}); +const _uaparserjs = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/ua-parser-js")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function isBot(input) { + return /Googlebot|Mediapartners-Google|AdsBot-Google|googleweblight|Storebot-Google|Google-PageRenderer|Google-InspectionTool|Bingbot|BingPreview|Slurp|DuckDuckBot|baiduspider|yandex|sogou|LinkedInBot|bitlybot|tumblr|vkShare|quora link preview|facebookexternalhit|facebookcatalog|Twitterbot|applebot|redditbot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|ia_archiver|GPTBot/i.test(input); +} +function userAgentFromString(input) { + return { + ...(0, _uaparserjs.default)(input), + isBot: input === undefined ? false : isBot(input) + }; +} +function userAgent({ headers }) { + return userAgentFromString(headers.get('user-agent') || undefined); +} + +//# sourceMappingURL=user-agent.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/types.js b/build/node_modules/next/dist/server/web/types.js new file mode 100644 index 0000000..f89b9cc --- /dev/null +++ b/build/node_modules/next/dist/server/web/types.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/utils.js b/build/node_modules/next/dist/server/web/utils.js new file mode 100644 index 0000000..3a59400 --- /dev/null +++ b/build/node_modules/next/dist/server/web/utils.js @@ -0,0 +1,151 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + fromNodeOutgoingHttpHeaders: null, + normalizeNextQueryParam: null, + splitCookiesString: null, + toNodeOutgoingHttpHeaders: null, + validateURL: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + fromNodeOutgoingHttpHeaders: function() { + return fromNodeOutgoingHttpHeaders; + }, + normalizeNextQueryParam: function() { + return normalizeNextQueryParam; + }, + splitCookiesString: function() { + return splitCookiesString; + }, + toNodeOutgoingHttpHeaders: function() { + return toNodeOutgoingHttpHeaders; + }, + validateURL: function() { + return validateURL; + } +}); +const _constants = require("../../lib/constants"); +function fromNodeOutgoingHttpHeaders(nodeHeaders) { + const headers = new Headers(); + for (let [key, value] of Object.entries(nodeHeaders)){ + const values = Array.isArray(value) ? value : [ + value + ]; + for (let v of values){ + if (typeof v === 'undefined') continue; + if (typeof v === 'number') { + v = v.toString(); + } + headers.append(key, v); + } + } + return headers; +} +function splitCookiesString(cookiesString) { + var cookiesStrings = []; + var pos = 0; + var start; + var ch; + var lastComma; + var nextStart; + var cookiesSeparatorFound; + function skipWhitespace() { + while(pos < cookiesString.length && /\s/.test(cookiesString.charAt(pos))){ + pos += 1; + } + return pos < cookiesString.length; + } + function notSpecialChar() { + ch = cookiesString.charAt(pos); + return ch !== '=' && ch !== ';' && ch !== ','; + } + while(pos < cookiesString.length){ + start = pos; + cookiesSeparatorFound = false; + while(skipWhitespace()){ + ch = cookiesString.charAt(pos); + if (ch === ',') { + // ',' is a cookie separator if we have later first '=', not ';' or ',' + lastComma = pos; + pos += 1; + skipWhitespace(); + nextStart = pos; + while(pos < cookiesString.length && notSpecialChar()){ + pos += 1; + } + // currently special character + if (pos < cookiesString.length && cookiesString.charAt(pos) === '=') { + // we found cookies separator + cookiesSeparatorFound = true; + // pos is inside the next cookie, so back up and return it. + pos = nextStart; + cookiesStrings.push(cookiesString.substring(start, lastComma)); + start = pos; + } else { + // in param ',' or param separator ';', + // we continue from that comma + pos = lastComma + 1; + } + } else { + pos += 1; + } + } + if (!cookiesSeparatorFound || pos >= cookiesString.length) { + cookiesStrings.push(cookiesString.substring(start, cookiesString.length)); + } + } + return cookiesStrings; +} +function toNodeOutgoingHttpHeaders(headers) { + const nodeHeaders = {}; + const cookies = []; + if (headers) { + for (const [key, value] of headers.entries()){ + if (key.toLowerCase() === 'set-cookie') { + // We may have gotten a comma joined string of cookies, or multiple + // set-cookie headers. We need to merge them into one header array + // to represent all the cookies. + cookies.push(...splitCookiesString(value)); + nodeHeaders[key] = cookies.length === 1 ? cookies[0] : cookies; + } else { + nodeHeaders[key] = value; + } + } + } + return nodeHeaders; +} +function validateURL(url) { + try { + return String(new URL(String(url))); + } catch (error) { + throw Object.defineProperty(new Error(`URL is malformed "${String(url)}". Please use only absolute URLs - https://nextjs.org/docs/messages/middleware-relative-urls`, { + cause: error + }), "__NEXT_ERROR_CODE", { + value: "E61", + enumerable: false, + configurable: true + }); + } +} +function normalizeNextQueryParam(key) { + const prefixes = [ + _constants.NEXT_QUERY_PARAM_PREFIX, + _constants.NEXT_INTERCEPTION_MARKER_PREFIX + ]; + for (const prefix of prefixes){ + if (key !== prefix && key.startsWith(prefix)) { + return key.substring(prefix.length); + } + } + return null; +} + +//# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/server/web/web-on-close.js b/build/node_modules/next/dist/server/web/web-on-close.js new file mode 100644 index 0000000..0d9581d --- /dev/null +++ b/build/node_modules/next/dist/server/web/web-on-close.js @@ -0,0 +1,87 @@ +/** Monitor when the consumer finishes reading the response body. +that's as close as we can get to `res.on('close')` using web APIs. +*/ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + CloseController: null, + trackBodyConsumed: null, + trackStreamConsumed: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + CloseController: function() { + return CloseController; + }, + trackBodyConsumed: function() { + return trackBodyConsumed; + }, + trackStreamConsumed: function() { + return trackStreamConsumed; + } +}); +function trackBodyConsumed(body, onEnd) { + if (typeof body === 'string') { + const generator = async function* generate() { + const encoder = new TextEncoder(); + yield encoder.encode(body); + onEnd(); + }; + // @ts-expect-error BodyInit typings doesn't seem to include AsyncIterables even though it's supported in practice + return generator(); + } else { + return trackStreamConsumed(body, onEnd); + } +} +function trackStreamConsumed(stream, onEnd) { + // NOTE: This function must handle `stream` being aborted or cancelled, + // so it can't just be this: + // + // return stream.pipeThrough(new TransformStream({ flush() { onEnd() } })) + // + // because that doesn't handle cancellations. + // (and cancellation handling via `Transformer.cancel` is only available in node >20) + const dest = new TransformStream(); + const runOnEnd = ()=>onEnd(); + stream.pipeTo(dest.writable).then(runOnEnd, runOnEnd); + return dest.readable; +} +class CloseController { + onClose(callback) { + if (this.isClosed) { + throw Object.defineProperty(new Error('Cannot subscribe to a closed CloseController'), "__NEXT_ERROR_CODE", { + value: "E365", + enumerable: false, + configurable: true + }); + } + this.target.addEventListener('close', callback); + this.listeners++; + } + dispatchClose() { + if (this.isClosed) { + throw Object.defineProperty(new Error('Cannot close a CloseController multiple times'), "__NEXT_ERROR_CODE", { + value: "E229", + enumerable: false, + configurable: true + }); + } + if (this.listeners > 0) { + this.target.dispatchEvent(new Event('close')); + } + this.isClosed = true; + } + constructor(){ + this.target = new EventTarget(); + this.listeners = 0; + this.isClosed = false; + } +} + +//# sourceMappingURL=web-on-close.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/action-revalidation-kind.js b/build/node_modules/next/dist/shared/lib/action-revalidation-kind.js new file mode 100644 index 0000000..c6b5715 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/action-revalidation-kind.js @@ -0,0 +1,31 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + ActionDidNotRevalidate: null, + ActionDidRevalidateDynamicOnly: null, + ActionDidRevalidateStaticAndDynamic: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + ActionDidNotRevalidate: function() { + return ActionDidNotRevalidate; + }, + ActionDidRevalidateDynamicOnly: function() { + return ActionDidRevalidateDynamicOnly; + }, + ActionDidRevalidateStaticAndDynamic: function() { + return ActionDidRevalidateStaticAndDynamic; + } +}); +const ActionDidNotRevalidate = 0; +const ActionDidRevalidateStaticAndDynamic = 1; +const ActionDidRevalidateDynamicOnly = 2; + +//# sourceMappingURL=action-revalidation-kind.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js b/build/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js new file mode 100644 index 0000000..b9fa390 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js @@ -0,0 +1,50 @@ +'use client'; +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + AppRouterContext: null, + GlobalLayoutRouterContext: null, + LayoutRouterContext: null, + MissingSlotContext: null, + TemplateContext: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + AppRouterContext: function() { + return AppRouterContext; + }, + GlobalLayoutRouterContext: function() { + return GlobalLayoutRouterContext; + }, + LayoutRouterContext: function() { + return LayoutRouterContext; + }, + MissingSlotContext: function() { + return MissingSlotContext; + }, + TemplateContext: function() { + return TemplateContext; + } +}); +const _interop_require_default = require("@swc/helpers/_/_interop_require_default"); +const _react = /*#__PURE__*/ _interop_require_default._(require("react")); +const AppRouterContext = _react.default.createContext(null); +const LayoutRouterContext = _react.default.createContext(null); +const GlobalLayoutRouterContext = _react.default.createContext(null); +const TemplateContext = _react.default.createContext(null); +if (process.env.NODE_ENV !== 'production') { + AppRouterContext.displayName = 'AppRouterContext'; + LayoutRouterContext.displayName = 'LayoutRouterContext'; + GlobalLayoutRouterContext.displayName = 'GlobalLayoutRouterContext'; + TemplateContext.displayName = 'TemplateContext'; +} +const MissingSlotContext = _react.default.createContext(new Set()); + +//# sourceMappingURL=app-router-context.shared-runtime.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/app-router-types.js b/build/node_modules/next/dist/shared/lib/app-router-types.js new file mode 100644 index 0000000..ad94925 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/app-router-types.js @@ -0,0 +1,46 @@ +/** + * App Router types - Client-safe types for the Next.js App Router + * + * This file contains type definitions that can be safely imported + * by both client-side and server-side code without circular dependencies. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "PrefetchHint", { + enumerable: true, + get: function() { + return PrefetchHint; + } +}); +var PrefetchHint = /*#__PURE__*/ function(PrefetchHint) { + // This segment has a runtime prefetch enabled (via unstable_instant with + // prefetch: 'runtime'). Per-segment only, does not propagate to ancestors. + PrefetchHint[PrefetchHint["HasRuntimePrefetch"] = 1] = "HasRuntimePrefetch"; + // This segment or one of its descendants has an instant config defined + // (any truthy unstable_instant, regardless of prefetch mode). Propagates + // upward so the root segment reflects the entire subtree. + PrefetchHint[PrefetchHint["SubtreeHasInstant"] = 2] = "SubtreeHasInstant"; + // This segment itself has a loading.tsx boundary. + PrefetchHint[PrefetchHint["SegmentHasLoadingBoundary"] = 4] = "SegmentHasLoadingBoundary"; + // A descendant segment (but not this one) has a loading.tsx boundary. + // Propagates upward so the root reflects the entire subtree. + PrefetchHint[PrefetchHint["SubtreeHasLoadingBoundary"] = 8] = "SubtreeHasLoadingBoundary"; + // This segment is the root layout of the application. + PrefetchHint[PrefetchHint["IsRootLayout"] = 16] = "IsRootLayout"; + // This segment's response includes its parent's data inlined into it. + // Set at build time by the segment size measurement pass. + PrefetchHint[PrefetchHint["ParentInlinedIntoSelf"] = 32] = "ParentInlinedIntoSelf"; + // This segment's data is inlined into one of its children — don't fetch + // it separately. Set at build time by the segment size measurement pass. + PrefetchHint[PrefetchHint["InlinedIntoChild"] = 64] = "InlinedIntoChild"; + // On a __PAGE__: this page's response includes the head (metadata/viewport) + // at the end of its SegmentPrefetch[] array. + PrefetchHint[PrefetchHint["HeadInlinedIntoSelf"] = 128] = "HeadInlinedIntoSelf"; + // On the root hint node: the head was NOT inlined into any page — fetch + // it separately. Absence of this bit means the head is bundled into a page. + PrefetchHint[PrefetchHint["HeadOutlined"] = 256] = "HeadOutlined"; + return PrefetchHint; +}({}); + +//# sourceMappingURL=app-router-types.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/constants.js b/build/node_modules/next/dist/shared/lib/constants.js new file mode 100644 index 0000000..b7e6c23 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/constants.js @@ -0,0 +1,448 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + APP_CLIENT_INTERNALS: null, + APP_PATHS_MANIFEST: null, + APP_PATH_ROUTES_MANIFEST: null, + AdapterOutputType: null, + BARREL_OPTIMIZATION_PREFIX: null, + BLOCKED_PAGES: null, + BUILD_ID_FILE: null, + BUILD_MANIFEST: null, + CLIENT_PUBLIC_FILES_PATH: null, + CLIENT_REFERENCE_MANIFEST: null, + CLIENT_STATIC_FILES_PATH: null, + CLIENT_STATIC_FILES_RUNTIME_MAIN: null, + CLIENT_STATIC_FILES_RUNTIME_MAIN_APP: null, + CLIENT_STATIC_FILES_RUNTIME_POLYFILLS: null, + CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL: null, + CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH: null, + CLIENT_STATIC_FILES_RUNTIME_WEBPACK: null, + COMPILER_INDEXES: null, + COMPILER_NAMES: null, + CONFIG_FILES: null, + DEFAULT_RUNTIME_WEBPACK: null, + DEFAULT_SANS_SERIF_FONT: null, + DEFAULT_SERIF_FONT: null, + DEV_CLIENT_MIDDLEWARE_MANIFEST: null, + DEV_CLIENT_PAGES_MANIFEST: null, + DYNAMIC_CSS_MANIFEST: null, + EDGE_RUNTIME_WEBPACK: null, + EDGE_UNSUPPORTED_NODE_APIS: null, + EXPORT_DETAIL: null, + EXPORT_MARKER: null, + FUNCTIONS_CONFIG_MANIFEST: null, + IMAGES_MANIFEST: null, + INTERCEPTION_ROUTE_REWRITE_MANIFEST: null, + MIDDLEWARE_BUILD_MANIFEST: null, + MIDDLEWARE_MANIFEST: null, + MIDDLEWARE_REACT_LOADABLE_MANIFEST: null, + MODERN_BROWSERSLIST_TARGET: null, + NEXT_BUILTIN_DOCUMENT: null, + NEXT_FONT_MANIFEST: null, + PAGES_MANIFEST: null, + PHASE_ANALYZE: null, + PHASE_DEVELOPMENT_SERVER: null, + PHASE_EXPORT: null, + PHASE_INFO: null, + PHASE_PRODUCTION_BUILD: null, + PHASE_PRODUCTION_SERVER: null, + PHASE_TEST: null, + PREFETCH_HINTS: null, + PRERENDER_MANIFEST: null, + REACT_LOADABLE_MANIFEST: null, + ROUTES_MANIFEST: null, + RSC_MODULE_TYPES: null, + SERVER_DIRECTORY: null, + SERVER_FILES_MANIFEST: null, + SERVER_PROPS_ID: null, + SERVER_REFERENCE_MANIFEST: null, + STATIC_PROPS_ID: null, + STATIC_STATUS_PAGES: null, + STRING_LITERAL_DROP_BUNDLE: null, + SUBRESOURCE_INTEGRITY_MANIFEST: null, + SYSTEM_ENTRYPOINTS: null, + TRACE_OUTPUT_VERSION: null, + TURBOPACK_CLIENT_BUILD_MANIFEST: null, + TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST: null, + TURBO_TRACE_DEFAULT_MEMORY_LIMIT: null, + UNDERSCORE_GLOBAL_ERROR_ROUTE: null, + UNDERSCORE_GLOBAL_ERROR_ROUTE_ENTRY: null, + UNDERSCORE_NOT_FOUND_ROUTE: null, + UNDERSCORE_NOT_FOUND_ROUTE_ENTRY: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + APP_CLIENT_INTERNALS: function() { + return APP_CLIENT_INTERNALS; + }, + APP_PATHS_MANIFEST: function() { + return APP_PATHS_MANIFEST; + }, + APP_PATH_ROUTES_MANIFEST: function() { + return APP_PATH_ROUTES_MANIFEST; + }, + AdapterOutputType: function() { + return AdapterOutputType; + }, + BARREL_OPTIMIZATION_PREFIX: function() { + return BARREL_OPTIMIZATION_PREFIX; + }, + BLOCKED_PAGES: function() { + return BLOCKED_PAGES; + }, + BUILD_ID_FILE: function() { + return BUILD_ID_FILE; + }, + BUILD_MANIFEST: function() { + return BUILD_MANIFEST; + }, + CLIENT_PUBLIC_FILES_PATH: function() { + return CLIENT_PUBLIC_FILES_PATH; + }, + CLIENT_REFERENCE_MANIFEST: function() { + return CLIENT_REFERENCE_MANIFEST; + }, + CLIENT_STATIC_FILES_PATH: function() { + return CLIENT_STATIC_FILES_PATH; + }, + CLIENT_STATIC_FILES_RUNTIME_MAIN: function() { + return CLIENT_STATIC_FILES_RUNTIME_MAIN; + }, + CLIENT_STATIC_FILES_RUNTIME_MAIN_APP: function() { + return CLIENT_STATIC_FILES_RUNTIME_MAIN_APP; + }, + CLIENT_STATIC_FILES_RUNTIME_POLYFILLS: function() { + return CLIENT_STATIC_FILES_RUNTIME_POLYFILLS; + }, + CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL: function() { + return CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL; + }, + CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH: function() { + return CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH; + }, + CLIENT_STATIC_FILES_RUNTIME_WEBPACK: function() { + return CLIENT_STATIC_FILES_RUNTIME_WEBPACK; + }, + COMPILER_INDEXES: function() { + return COMPILER_INDEXES; + }, + COMPILER_NAMES: function() { + return COMPILER_NAMES; + }, + CONFIG_FILES: function() { + return CONFIG_FILES; + }, + DEFAULT_RUNTIME_WEBPACK: function() { + return DEFAULT_RUNTIME_WEBPACK; + }, + DEFAULT_SANS_SERIF_FONT: function() { + return DEFAULT_SANS_SERIF_FONT; + }, + DEFAULT_SERIF_FONT: function() { + return DEFAULT_SERIF_FONT; + }, + DEV_CLIENT_MIDDLEWARE_MANIFEST: function() { + return DEV_CLIENT_MIDDLEWARE_MANIFEST; + }, + DEV_CLIENT_PAGES_MANIFEST: function() { + return DEV_CLIENT_PAGES_MANIFEST; + }, + DYNAMIC_CSS_MANIFEST: function() { + return DYNAMIC_CSS_MANIFEST; + }, + EDGE_RUNTIME_WEBPACK: function() { + return EDGE_RUNTIME_WEBPACK; + }, + EDGE_UNSUPPORTED_NODE_APIS: function() { + return EDGE_UNSUPPORTED_NODE_APIS; + }, + EXPORT_DETAIL: function() { + return EXPORT_DETAIL; + }, + EXPORT_MARKER: function() { + return EXPORT_MARKER; + }, + FUNCTIONS_CONFIG_MANIFEST: function() { + return FUNCTIONS_CONFIG_MANIFEST; + }, + IMAGES_MANIFEST: function() { + return IMAGES_MANIFEST; + }, + INTERCEPTION_ROUTE_REWRITE_MANIFEST: function() { + return INTERCEPTION_ROUTE_REWRITE_MANIFEST; + }, + MIDDLEWARE_BUILD_MANIFEST: function() { + return MIDDLEWARE_BUILD_MANIFEST; + }, + MIDDLEWARE_MANIFEST: function() { + return MIDDLEWARE_MANIFEST; + }, + MIDDLEWARE_REACT_LOADABLE_MANIFEST: function() { + return MIDDLEWARE_REACT_LOADABLE_MANIFEST; + }, + MODERN_BROWSERSLIST_TARGET: function() { + return _modernbrowserslisttarget.default; + }, + NEXT_BUILTIN_DOCUMENT: function() { + return NEXT_BUILTIN_DOCUMENT; + }, + NEXT_FONT_MANIFEST: function() { + return NEXT_FONT_MANIFEST; + }, + PAGES_MANIFEST: function() { + return PAGES_MANIFEST; + }, + PHASE_ANALYZE: function() { + return PHASE_ANALYZE; + }, + PHASE_DEVELOPMENT_SERVER: function() { + return PHASE_DEVELOPMENT_SERVER; + }, + PHASE_EXPORT: function() { + return PHASE_EXPORT; + }, + PHASE_INFO: function() { + return PHASE_INFO; + }, + PHASE_PRODUCTION_BUILD: function() { + return PHASE_PRODUCTION_BUILD; + }, + PHASE_PRODUCTION_SERVER: function() { + return PHASE_PRODUCTION_SERVER; + }, + PHASE_TEST: function() { + return PHASE_TEST; + }, + PREFETCH_HINTS: function() { + return PREFETCH_HINTS; + }, + PRERENDER_MANIFEST: function() { + return PRERENDER_MANIFEST; + }, + REACT_LOADABLE_MANIFEST: function() { + return REACT_LOADABLE_MANIFEST; + }, + ROUTES_MANIFEST: function() { + return ROUTES_MANIFEST; + }, + RSC_MODULE_TYPES: function() { + return RSC_MODULE_TYPES; + }, + SERVER_DIRECTORY: function() { + return SERVER_DIRECTORY; + }, + SERVER_FILES_MANIFEST: function() { + return SERVER_FILES_MANIFEST; + }, + SERVER_PROPS_ID: function() { + return SERVER_PROPS_ID; + }, + SERVER_REFERENCE_MANIFEST: function() { + return SERVER_REFERENCE_MANIFEST; + }, + STATIC_PROPS_ID: function() { + return STATIC_PROPS_ID; + }, + STATIC_STATUS_PAGES: function() { + return STATIC_STATUS_PAGES; + }, + STRING_LITERAL_DROP_BUNDLE: function() { + return STRING_LITERAL_DROP_BUNDLE; + }, + SUBRESOURCE_INTEGRITY_MANIFEST: function() { + return SUBRESOURCE_INTEGRITY_MANIFEST; + }, + SYSTEM_ENTRYPOINTS: function() { + return SYSTEM_ENTRYPOINTS; + }, + TRACE_OUTPUT_VERSION: function() { + return TRACE_OUTPUT_VERSION; + }, + TURBOPACK_CLIENT_BUILD_MANIFEST: function() { + return TURBOPACK_CLIENT_BUILD_MANIFEST; + }, + TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST: function() { + return TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST; + }, + TURBO_TRACE_DEFAULT_MEMORY_LIMIT: function() { + return TURBO_TRACE_DEFAULT_MEMORY_LIMIT; + }, + UNDERSCORE_GLOBAL_ERROR_ROUTE: function() { + return _entryconstants.UNDERSCORE_GLOBAL_ERROR_ROUTE; + }, + UNDERSCORE_GLOBAL_ERROR_ROUTE_ENTRY: function() { + return _entryconstants.UNDERSCORE_GLOBAL_ERROR_ROUTE_ENTRY; + }, + UNDERSCORE_NOT_FOUND_ROUTE: function() { + return _entryconstants.UNDERSCORE_NOT_FOUND_ROUTE; + }, + UNDERSCORE_NOT_FOUND_ROUTE_ENTRY: function() { + return _entryconstants.UNDERSCORE_NOT_FOUND_ROUTE_ENTRY; + } +}); +const _interop_require_default = require("@swc/helpers/_/_interop_require_default"); +const _modernbrowserslisttarget = /*#__PURE__*/ _interop_require_default._(require("./modern-browserslist-target")); +const _entryconstants = require("./entry-constants"); +const COMPILER_NAMES = { + client: 'client', + server: 'server', + edgeServer: 'edge-server' +}; +const COMPILER_INDEXES = { + [COMPILER_NAMES.client]: 0, + [COMPILER_NAMES.server]: 1, + [COMPILER_NAMES.edgeServer]: 2 +}; +var AdapterOutputType = /*#__PURE__*/ function(AdapterOutputType) { + /** + * `PAGES` represents all the React pages that are under `pages/`. + */ AdapterOutputType["PAGES"] = "PAGES"; + /** + * `PAGES_API` represents all the API routes under `pages/api/`. + */ AdapterOutputType["PAGES_API"] = "PAGES_API"; + /** + * `APP_PAGE` represents all the React pages that are under `app/` with the + * filename of `page.{j,t}s{,x}`. + */ AdapterOutputType["APP_PAGE"] = "APP_PAGE"; + /** + * `APP_ROUTE` represents all the API routes and metadata routes that are under `app/` with the + * filename of `route.{j,t}s{,x}`. + */ AdapterOutputType["APP_ROUTE"] = "APP_ROUTE"; + /** + * `PRERENDER` represents an ISR enabled route that might + * have a seeded cache entry or fallback generated during build + */ AdapterOutputType["PRERENDER"] = "PRERENDER"; + /** + * `STATIC_FILE` represents a static file (ie /_next/static) + */ AdapterOutputType["STATIC_FILE"] = "STATIC_FILE"; + /** + * `MIDDLEWARE` represents the middleware output if present + */ AdapterOutputType["MIDDLEWARE"] = "MIDDLEWARE"; + return AdapterOutputType; +}({}); +const PHASE_EXPORT = 'phase-export'; +const PHASE_ANALYZE = 'phase-analyze'; +const PHASE_PRODUCTION_BUILD = 'phase-production-build'; +const PHASE_PRODUCTION_SERVER = 'phase-production-server'; +const PHASE_DEVELOPMENT_SERVER = 'phase-development-server'; +const PHASE_TEST = 'phase-test'; +const PHASE_INFO = 'phase-info'; +const PAGES_MANIFEST = 'pages-manifest.json'; +const APP_PATHS_MANIFEST = 'app-paths-manifest.json'; +const APP_PATH_ROUTES_MANIFEST = 'app-path-routes-manifest.json'; +const BUILD_MANIFEST = 'build-manifest.json'; +const FUNCTIONS_CONFIG_MANIFEST = 'functions-config-manifest.json'; +const SUBRESOURCE_INTEGRITY_MANIFEST = 'subresource-integrity-manifest'; +const NEXT_FONT_MANIFEST = 'next-font-manifest'; +const EXPORT_MARKER = 'export-marker.json'; +const EXPORT_DETAIL = 'export-detail.json'; +const PRERENDER_MANIFEST = 'prerender-manifest.json'; +const PREFETCH_HINTS = 'prefetch-hints.json'; +const ROUTES_MANIFEST = 'routes-manifest.json'; +const IMAGES_MANIFEST = 'images-manifest.json'; +const SERVER_FILES_MANIFEST = 'required-server-files'; +const DEV_CLIENT_PAGES_MANIFEST = '_devPagesManifest.json'; +const MIDDLEWARE_MANIFEST = 'middleware-manifest.json'; +const TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST = '_clientMiddlewareManifest.js'; +const TURBOPACK_CLIENT_BUILD_MANIFEST = 'client-build-manifest.json'; +const DEV_CLIENT_MIDDLEWARE_MANIFEST = '_devMiddlewareManifest.json'; +const REACT_LOADABLE_MANIFEST = 'react-loadable-manifest.json'; +const SERVER_DIRECTORY = 'server'; +const CONFIG_FILES = [ + 'next.config.js', + 'next.config.mjs', + 'next.config.ts', + // process.features can be undefined on Edge runtime + // TODO: Remove `as any` once we bump @types/node to v22.10.0+ + ...process?.features?.typescript ? [ + 'next.config.mts' + ] : [] +]; +const BUILD_ID_FILE = 'BUILD_ID'; +const BLOCKED_PAGES = [ + '/_document', + '/_app', + '/_error' +]; +const CLIENT_PUBLIC_FILES_PATH = 'public'; +const CLIENT_STATIC_FILES_PATH = 'static'; +const STRING_LITERAL_DROP_BUNDLE = '__NEXT_DROP_CLIENT_FILE__'; +const NEXT_BUILTIN_DOCUMENT = '__NEXT_BUILTIN_DOCUMENT__'; +const BARREL_OPTIMIZATION_PREFIX = '__barrel_optimize__'; +const CLIENT_REFERENCE_MANIFEST = 'client-reference-manifest'; +const SERVER_REFERENCE_MANIFEST = 'server-reference-manifest'; +const MIDDLEWARE_BUILD_MANIFEST = 'middleware-build-manifest'; +const MIDDLEWARE_REACT_LOADABLE_MANIFEST = 'middleware-react-loadable-manifest'; +const INTERCEPTION_ROUTE_REWRITE_MANIFEST = 'interception-route-rewrite-manifest'; +const DYNAMIC_CSS_MANIFEST = 'dynamic-css-manifest'; +const CLIENT_STATIC_FILES_RUNTIME_MAIN = `main`; +const CLIENT_STATIC_FILES_RUNTIME_MAIN_APP = `${CLIENT_STATIC_FILES_RUNTIME_MAIN}-app`; +const APP_CLIENT_INTERNALS = 'app-pages-internals'; +const CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH = `react-refresh`; +const CLIENT_STATIC_FILES_RUNTIME_WEBPACK = `webpack`; +const CLIENT_STATIC_FILES_RUNTIME_POLYFILLS = 'polyfills'; +const CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL = Symbol(CLIENT_STATIC_FILES_RUNTIME_POLYFILLS); +const DEFAULT_RUNTIME_WEBPACK = 'webpack-runtime'; +const EDGE_RUNTIME_WEBPACK = 'edge-runtime-webpack'; +const STATIC_PROPS_ID = '__N_SSG'; +const SERVER_PROPS_ID = '__N_SSP'; +const DEFAULT_SERIF_FONT = { + name: 'Times New Roman', + xAvgCharWidth: 821, + azAvgWidth: 854.3953488372093, + unitsPerEm: 2048 +}; +const DEFAULT_SANS_SERIF_FONT = { + name: 'Arial', + xAvgCharWidth: 904, + azAvgWidth: 934.5116279069767, + unitsPerEm: 2048 +}; +const STATIC_STATUS_PAGES = [ + '/500' +]; +const TRACE_OUTPUT_VERSION = 1; +const TURBO_TRACE_DEFAULT_MEMORY_LIMIT = 6000; +const RSC_MODULE_TYPES = { + client: 'client', + server: 'server' +}; +const EDGE_UNSUPPORTED_NODE_APIS = [ + 'clearImmediate', + 'setImmediate', + 'BroadcastChannel', + 'ByteLengthQueuingStrategy', + 'CompressionStream', + 'CountQueuingStrategy', + 'DecompressionStream', + 'DomException', + 'MessageChannel', + 'MessageEvent', + 'MessagePort', + 'ReadableByteStreamController', + 'ReadableStreamBYOBRequest', + 'ReadableStreamDefaultController', + 'TransformStreamDefaultController', + 'WritableStreamDefaultController' +]; +const SYSTEM_ENTRYPOINTS = new Set([ + CLIENT_STATIC_FILES_RUNTIME_MAIN, + CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH, + CLIENT_STATIC_FILES_RUNTIME_MAIN_APP +]); + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=constants.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/deep-freeze.js b/build/node_modules/next/dist/shared/lib/deep-freeze.js new file mode 100644 index 0000000..27022af --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/deep-freeze.js @@ -0,0 +1,30 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "deepFreeze", { + enumerable: true, + get: function() { + return deepFreeze; + } +}); +function deepFreeze(obj) { + // If the object is already frozen, there's no need to freeze it again. + if (Object.isFrozen(obj)) return obj; + // An array is an object, but we also want to freeze each element in the array + // as well. + if (Array.isArray(obj)) { + for (const item of obj){ + if (!item || typeof item !== 'object') continue; + deepFreeze(item); + } + return Object.freeze(obj); + } + for (const value of Object.values(obj)){ + if (!value || typeof value !== 'object') continue; + deepFreeze(value); + } + return Object.freeze(obj); +} + +//# sourceMappingURL=deep-freeze.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/deployment-id.js b/build/node_modules/next/dist/shared/lib/deployment-id.js new file mode 100644 index 0000000..e04e86c --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/deployment-id.js @@ -0,0 +1,63 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getAssetToken: null, + getAssetTokenQuery: null, + getDeploymentId: null, + getDeploymentIdQuery: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getAssetToken: function() { + return getAssetToken; + }, + getAssetTokenQuery: function() { + return getAssetTokenQuery; + }, + getDeploymentId: function() { + return getDeploymentId; + }, + getDeploymentIdQuery: function() { + return getDeploymentIdQuery; + } +}); +let deploymentId; +if (typeof window !== 'undefined') { + deploymentId = document.documentElement.dataset.dplId; + // Immediately remove the attribute to prevent hydration errors (the dplId was inserted into the + // HTML only), React isn't aware of it at all. + delete document.documentElement.dataset.dplId; +} else { + // Client side: replaced with globalThis.NEXT_DEPLOYMENT_ID + // Server side: left as is or replaced with a string or replaced with false + deploymentId = process.env.NEXT_DEPLOYMENT_ID || undefined; +} +function getDeploymentId() { + return deploymentId; +} +function getDeploymentIdQuery(ampersand = false) { + let id = getDeploymentId(); + if (id) { + return `${ampersand ? '&' : '?'}dpl=${id}`; + } + return ''; +} +function getAssetToken() { + return process.env.NEXT_IMMUTABLE_ASSET_TOKEN || process.env.NEXT_DEPLOYMENT_ID; +} +function getAssetTokenQuery(ampersand = false) { + let id = getAssetToken(); + if (id) { + return `${ampersand ? '&' : '?'}dpl=${id}`; + } + return ''; +} + +//# sourceMappingURL=deployment-id.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/dset.js b/build/node_modules/next/dist/shared/lib/dset.js new file mode 100644 index 0000000..dc0e781 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/dset.js @@ -0,0 +1,34 @@ +/* +The MIT License (MIT) + +Copyright (c) Luke Edwards (lukeed.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ // This file is based on https://github.com/lukeed/dset/blob/v3.1.3/src/index.js +// It's been edited for the needs of this script +// See the LICENSE at the top of the file +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "dset", { + enumerable: true, + get: function() { + return dset; + } +}); +function dset(obj, keys, val) { + keys.split && (keys = keys.split('.')); + var i = 0, l = keys.length, t = obj, x, k; + while(i < l){ + k = keys[i++]; + if (k === '__proto__' || k === 'constructor' || k === 'prototype') break; + t = t[k] = i === l ? val : typeof (x = t[k]) === typeof keys ? x : keys[i] * 0 !== 0 || !!~('' + keys[i]).indexOf('.') ? {} : []; + } +} + +//# sourceMappingURL=dset.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/encode-uri-path.js b/build/node_modules/next/dist/shared/lib/encode-uri-path.js new file mode 100644 index 0000000..d42d282 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/encode-uri-path.js @@ -0,0 +1,15 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "encodeURIPath", { + enumerable: true, + get: function() { + return encodeURIPath; + } +}); +function encodeURIPath(file) { + return file.split('/').map((p)=>encodeURIComponent(p)).join('/'); +} + +//# sourceMappingURL=encode-uri-path.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/entry-constants.js b/build/node_modules/next/dist/shared/lib/entry-constants.js new file mode 100644 index 0000000..b6d461a --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/entry-constants.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + UNDERSCORE_GLOBAL_ERROR_ROUTE: null, + UNDERSCORE_GLOBAL_ERROR_ROUTE_ENTRY: null, + UNDERSCORE_NOT_FOUND_ROUTE: null, + UNDERSCORE_NOT_FOUND_ROUTE_ENTRY: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + UNDERSCORE_GLOBAL_ERROR_ROUTE: function() { + return UNDERSCORE_GLOBAL_ERROR_ROUTE; + }, + UNDERSCORE_GLOBAL_ERROR_ROUTE_ENTRY: function() { + return UNDERSCORE_GLOBAL_ERROR_ROUTE_ENTRY; + }, + UNDERSCORE_NOT_FOUND_ROUTE: function() { + return UNDERSCORE_NOT_FOUND_ROUTE; + }, + UNDERSCORE_NOT_FOUND_ROUTE_ENTRY: function() { + return UNDERSCORE_NOT_FOUND_ROUTE_ENTRY; + } +}); +const UNDERSCORE_NOT_FOUND_ROUTE = '/_not-found'; +const UNDERSCORE_NOT_FOUND_ROUTE_ENTRY = `${UNDERSCORE_NOT_FOUND_ROUTE}/page`; +const UNDERSCORE_GLOBAL_ERROR_ROUTE = '/_global-error'; +const UNDERSCORE_GLOBAL_ERROR_ROUTE_ENTRY = `${UNDERSCORE_GLOBAL_ERROR_ROUTE}/page`; + +//# sourceMappingURL=entry-constants.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/error-source.js b/build/node_modules/next/dist/shared/lib/error-source.js new file mode 100644 index 0000000..4aa059c --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/error-source.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + decorateServerError: null, + getErrorSource: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + decorateServerError: function() { + return decorateServerError; + }, + getErrorSource: function() { + return getErrorSource; + } +}); +const symbolError = Symbol.for('NextjsError'); +function getErrorSource(error) { + return error[symbolError] || null; +} +function decorateServerError(error, type) { + Object.defineProperty(error, symbolError, { + writable: false, + enumerable: false, + configurable: false, + value: type + }); +} + +//# sourceMappingURL=error-source.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/errors/canary-only-config-error.js b/build/node_modules/next/dist/shared/lib/errors/canary-only-config-error.js new file mode 100644 index 0000000..fa319f8 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/errors/canary-only-config-error.js @@ -0,0 +1,39 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + CanaryOnlyConfigError: null, + isStableBuild: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + CanaryOnlyConfigError: function() { + return CanaryOnlyConfigError; + }, + isStableBuild: function() { + return isStableBuild; + } +}); +function isStableBuild() { + return !"16.2.6"?.includes('canary') && !process.env.__NEXT_TEST_MODE && !process.env.NEXT_PRIVATE_LOCAL_DEV; +} +class CanaryOnlyConfigError extends Error { + constructor(arg){ + if (typeof arg === 'object' && 'feature' in arg) { + super(`The experimental feature "${arg.feature}" can only be enabled when using the latest canary version of Next.js.`); + } else { + super(arg); + } + // This error is meant to interrupt the server start/build process + // but the stack trace isn't meaningful, as it points to internal code. + this.stack = undefined; + } +} + +//# sourceMappingURL=canary-only-config-error.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/errors/code-frame.js b/build/node_modules/next/dist/shared/lib/errors/code-frame.js new file mode 100644 index 0000000..fd6d0e2 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/errors/code-frame.js @@ -0,0 +1,20 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "codeFrameColumns", { + enumerable: true, + get: function() { + return codeFrameColumns; + } +}); +const _swc = require("../../../build/swc"); +function codeFrameColumns(file, location, options = {}) { + // Default to the terminal width + if (options.maxWidth === undefined) { + options.maxWidth = process.stdout.columns; + } + return (0, _swc.getBindingsSync)().codeFrameColumns(file, location, options); +} + +//# sourceMappingURL=code-frame.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/errors/constants.js b/build/node_modules/next/dist/shared/lib/errors/constants.js new file mode 100644 index 0000000..e13ef7f --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/errors/constants.js @@ -0,0 +1,19 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "MISSING_ROOT_TAGS_ERROR", { + enumerable: true, + get: function() { + return MISSING_ROOT_TAGS_ERROR; + } +}); +const MISSING_ROOT_TAGS_ERROR = 'NEXT_MISSING_ROOT_TAGS'; + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=constants.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/errors/empty-generate-static-params-error.js b/build/node_modules/next/dist/shared/lib/errors/empty-generate-static-params-error.js new file mode 100644 index 0000000..eaa22ac --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/errors/empty-generate-static-params-error.js @@ -0,0 +1,24 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "throwEmptyGenerateStaticParamsError", { + enumerable: true, + get: function() { + return throwEmptyGenerateStaticParamsError; + } +}); +function throwEmptyGenerateStaticParamsError() { + const error = Object.defineProperty(new Error('When using Cache Components, all `generateStaticParams` functions must return at least one result. ' + 'This is to ensure that we can perform build-time validation that there is no other dynamic accesses that would cause a runtime error.\n\n' + 'Learn more: https://nextjs.org/docs/messages/empty-generate-static-params'), "__NEXT_ERROR_CODE", { + value: "E898", + enumerable: false, + configurable: true + }); + error.name = 'EmptyGenerateStaticParamsError'; + // This error is meant to interrupt the server start/build process + // but the stack trace isn't meaningful, as it points to internal code. + error.stack = undefined; + throw error; +} + +//# sourceMappingURL=empty-generate-static-params-error.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/errors/hard-deprecated-config-error.js b/build/node_modules/next/dist/shared/lib/errors/hard-deprecated-config-error.js new file mode 100644 index 0000000..a4a7f12 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/errors/hard-deprecated-config-error.js @@ -0,0 +1,20 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "HardDeprecatedConfigError", { + enumerable: true, + get: function() { + return HardDeprecatedConfigError; + } +}); +class HardDeprecatedConfigError extends Error { + constructor(message){ + super(message); + // This error is meant to interrupt the server start/build process + // but the stack trace isn't meaningful, as it points to internal code. + this.stack = undefined; + } +} + +//# sourceMappingURL=hard-deprecated-config-error.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/escape-regexp.js b/build/node_modules/next/dist/shared/lib/escape-regexp.js new file mode 100644 index 0000000..e208e2a --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/escape-regexp.js @@ -0,0 +1,22 @@ +// regexp is based on https://github.com/sindresorhus/escape-string-regexp +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "escapeStringRegexp", { + enumerable: true, + get: function() { + return escapeStringRegexp; + } +}); +const reHasRegExp = /[|\\{}()[\]^$+*?.-]/; +const reReplaceRegExp = /[|\\{}()[\]^$+*?.-]/g; +function escapeStringRegexp(str) { + // see also: https://github.com/lodash/lodash/blob/2da024c3b4f9947a48517639de7560457cd4ec6c/escapeRegExp.js#L23 + if (reHasRegExp.test(str)) { + return str.replace(reReplaceRegExp, '\\$&'); + } + return str; +} + +//# sourceMappingURL=escape-regexp.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/get-hostname.js b/build/node_modules/next/dist/shared/lib/get-hostname.js new file mode 100644 index 0000000..9511b82 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/get-hostname.js @@ -0,0 +1,23 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getHostname", { + enumerable: true, + get: function() { + return getHostname; + } +}); +function getHostname(parsed, headers) { + // Get the hostname from the headers if it exists, otherwise use the parsed + // hostname. + let hostname; + if (headers?.host && !Array.isArray(headers.host)) { + hostname = headers.host.toString().split(':', 1)[0]; + } else if (parsed.hostname) { + hostname = parsed.hostname; + } else return; + return hostname.toLowerCase(); +} + +//# sourceMappingURL=get-hostname.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/hash.js b/build/node_modules/next/dist/shared/lib/hash.js new file mode 100644 index 0000000..7d806fb --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/hash.js @@ -0,0 +1,42 @@ +// http://www.cse.yorku.ca/~oz/hash.html +// More specifically, 32-bit hash via djbxor +// (ref: https://gist.github.com/eplawless/52813b1d8ad9af510d85?permalink_comment_id=3367765#gistcomment-3367765) +// This is due to number type differences between rust for turbopack to js number types, +// where rust does not have easy way to repreesnt js's 53-bit float number type for the matching +// overflow behavior. This is more `correct` in terms of having canonical hash across different runtime / implementation +// as can gaurantee determinstic output from 32bit hash. +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + djb2Hash: null, + hexHash: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + djb2Hash: function() { + return djb2Hash; + }, + hexHash: function() { + return hexHash; + } +}); +function djb2Hash(str) { + let hash = 5381; + for(let i = 0; i < str.length; i++){ + const char = str.charCodeAt(i); + hash = (hash << 5) + hash + char & 0xffffffff; + } + return hash >>> 0; +} +function hexHash(str) { + return djb2Hash(str).toString(36).slice(0, 5); +} + +//# sourceMappingURL=hash.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js b/build/node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js new file mode 100644 index 0000000..ba50b23 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js @@ -0,0 +1,18 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "HeadManagerContext", { + enumerable: true, + get: function() { + return HeadManagerContext; + } +}); +const _interop_require_default = require("@swc/helpers/_/_interop_require_default"); +const _react = /*#__PURE__*/ _interop_require_default._(require("react")); +const HeadManagerContext = _react.default.createContext({}); +if (process.env.NODE_ENV !== 'production') { + HeadManagerContext.displayName = 'HeadManagerContext'; +} + +//# sourceMappingURL=head-manager-context.shared-runtime.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/head.js b/build/node_modules/next/dist/shared/lib/head.js new file mode 100644 index 0000000..040badd --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/head.js @@ -0,0 +1,163 @@ +'use client'; +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + default: null, + defaultHead: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + default: function() { + return _default; + }, + defaultHead: function() { + return defaultHead; + } +}); +const _interop_require_default = require("@swc/helpers/_/_interop_require_default"); +const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard"); +const _jsxruntime = require("react/jsx-runtime"); +const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react")); +const _sideeffect = /*#__PURE__*/ _interop_require_default._(require("./side-effect")); +const _headmanagercontextsharedruntime = require("./head-manager-context.shared-runtime"); +const _warnonce = require("./utils/warn-once"); +function defaultHead() { + const head = [ + /*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + charSet: "utf-8" + }, "charset"), + /*#__PURE__*/ (0, _jsxruntime.jsx)("meta", { + name: "viewport", + content: "width=device-width" + }, "viewport") + ]; + return head; +} +function onlyReactElement(list, child) { + // React children can be "string" or "number" in this case we ignore them for backwards compat + if (typeof child === 'string' || typeof child === 'number') { + return list; + } + // Adds support for React.Fragment + if (child.type === _react.default.Fragment) { + return list.concat(// @ts-expect-error @types/react does not remove fragments but this could also return ReactPortal[] + _react.default.Children.toArray(child.props.children).reduce(// @ts-expect-error @types/react does not remove fragments but this could also return ReactPortal[] + (fragmentList, fragmentChild)=>{ + if (typeof fragmentChild === 'string' || typeof fragmentChild === 'number') { + return fragmentList; + } + return fragmentList.concat(fragmentChild); + }, [])); + } + return list.concat(child); +} +const METATYPES = [ + 'name', + 'httpEquiv', + 'charSet', + 'itemProp' +]; +/* + returns a function for filtering head child elements + which shouldn't be duplicated, like + Also adds support for deduplicated `key` properties +*/ function unique() { + const keys = new Set(); + const tags = new Set(); + const metaTypes = new Set(); + const metaCategories = {}; + return (h)=>{ + let isUnique = true; + let hasKey = false; + if (h.key && typeof h.key !== 'number' && h.key.indexOf('$') > 0) { + hasKey = true; + const key = h.key.slice(h.key.indexOf('$') + 1); + if (keys.has(key)) { + isUnique = false; + } else { + keys.add(key); + } + } + // eslint-disable-next-line default-case + switch(h.type){ + case 'title': + case 'base': + if (tags.has(h.type)) { + isUnique = false; + } else { + tags.add(h.type); + } + break; + case 'meta': + for(let i = 0, len = METATYPES.length; i < len; i++){ + const metatype = METATYPES[i]; + if (!h.props.hasOwnProperty(metatype)) continue; + if (metatype === 'charSet') { + if (metaTypes.has(metatype)) { + isUnique = false; + } else { + metaTypes.add(metatype); + } + } else { + const category = h.props[metatype]; + const categories = metaCategories[metatype] || new Set(); + if ((metatype !== 'name' || !hasKey) && categories.has(category)) { + isUnique = false; + } else { + categories.add(category); + metaCategories[metatype] = categories; + } + } + } + break; + } + return isUnique; + }; +} +/** + * + * @param headChildrenElements List of children of <Head> + */ function reduceComponents(headChildrenElements) { + return headChildrenElements.reduce(onlyReactElement, []).reverse().concat(defaultHead().reverse()).filter(unique()).reverse().map((c, i)=>{ + const key = c.key || i; + if (process.env.NODE_ENV === 'development') { + // omit JSON-LD structured data snippets from the warning + if (c.type === 'script' && c.props['type'] !== 'application/ld+json') { + const srcMessage = c.props['src'] ? `<script> tag with src="${c.props['src']}"` : `inline <script>`; + (0, _warnonce.warnOnce)(`Do not add <script> tags using next/head (see ${srcMessage}). Use next/script instead. \nSee more info here: https://nextjs.org/docs/messages/no-script-tags-in-head-component`); + } else if (c.type === 'link' && c.props['rel'] === 'stylesheet') { + (0, _warnonce.warnOnce)(`Do not add stylesheets using next/head (see <link rel="stylesheet"> tag with href="${c.props['href']}"). Use Document instead. \nSee more info here: https://nextjs.org/docs/messages/no-stylesheets-in-head-component`); + } + } + return /*#__PURE__*/ _react.default.cloneElement(c, { + key + }); + }); +} +/** + * This component injects elements to `<head>` of your page. + * To avoid duplicated `tags` in `<head>` you can use the `key` property, which will make sure every tag is only rendered once. + */ function Head({ children }) { + const headManager = (0, _react.useContext)(_headmanagercontextsharedruntime.HeadManagerContext); + return /*#__PURE__*/ (0, _jsxruntime.jsx)(_sideeffect.default, { + reduceComponentsToState: reduceComponents, + headManager: headManager, + children: children + }); +} +const _default = Head; + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=head.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js b/build/node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js new file mode 100644 index 0000000..0f49907 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js @@ -0,0 +1,60 @@ +'use client'; +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + NavigationPromisesContext: null, + PathParamsContext: null, + PathnameContext: null, + ReadonlyURLSearchParams: null, + SearchParamsContext: null, + createDevToolsInstrumentedPromise: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + NavigationPromisesContext: function() { + return NavigationPromisesContext; + }, + PathParamsContext: function() { + return PathParamsContext; + }, + PathnameContext: function() { + return PathnameContext; + }, + ReadonlyURLSearchParams: function() { + return _readonlyurlsearchparams.ReadonlyURLSearchParams; + }, + SearchParamsContext: function() { + return SearchParamsContext; + }, + createDevToolsInstrumentedPromise: function() { + return createDevToolsInstrumentedPromise; + } +}); +const _react = require("react"); +const _readonlyurlsearchparams = require("../../client/components/readonly-url-search-params"); +const SearchParamsContext = (0, _react.createContext)(null); +const PathnameContext = (0, _react.createContext)(null); +const PathParamsContext = (0, _react.createContext)(null); +const NavigationPromisesContext = (0, _react.createContext)(null); +function createDevToolsInstrumentedPromise(displayName, value) { + const promise = Promise.resolve(value); + promise.status = 'fulfilled'; + promise.value = value; + promise.displayName = `${displayName} (SSR)`; + return promise; +} +if (process.env.NODE_ENV !== 'production') { + SearchParamsContext.displayName = 'SearchParamsContext'; + PathnameContext.displayName = 'PathnameContext'; + PathParamsContext.displayName = 'PathParamsContext'; + NavigationPromisesContext.displayName = 'NavigationPromisesContext'; +} + +//# sourceMappingURL=hooks-client-context.shared-runtime.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/html-context.shared-runtime.js b/build/node_modules/next/dist/shared/lib/html-context.shared-runtime.js new file mode 100644 index 0000000..bd3b41a --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/html-context.shared-runtime.js @@ -0,0 +1,40 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + HtmlContext: null, + useHtmlContext: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + HtmlContext: function() { + return HtmlContext; + }, + useHtmlContext: function() { + return useHtmlContext; + } +}); +const _react = require("react"); +const HtmlContext = (0, _react.createContext)(undefined); +if (process.env.NODE_ENV !== 'production') { + HtmlContext.displayName = 'HtmlContext'; +} +function useHtmlContext() { + const context = (0, _react.useContext)(HtmlContext); + if (!context) { + throw Object.defineProperty(new Error(`<Html> should not be imported outside of pages/_document.\n` + 'Read more: https://nextjs.org/docs/messages/no-document-import-in-page'), "__NEXT_ERROR_CODE", { + value: "E67", + enumerable: false, + configurable: true + }); + } + return context; +} + +//# sourceMappingURL=html-context.shared-runtime.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/htmlescape.js b/build/node_modules/next/dist/shared/lib/htmlescape.js new file mode 100644 index 0000000..fb161c5 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/htmlescape.js @@ -0,0 +1,52 @@ +// This utility is based on https://github.com/zertosh/htmlescape +// License: https://github.com/zertosh/htmlescape/blob/0527ca7156a524d256101bb310a9f970f63078ad/LICENSE +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + ESCAPE_REGEX: null, + htmlEscapeAttributeString: null, + htmlEscapeJsonString: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + ESCAPE_REGEX: function() { + return ESCAPE_REGEX; + }, + htmlEscapeAttributeString: function() { + return htmlEscapeAttributeString; + }, + htmlEscapeJsonString: function() { + return htmlEscapeJsonString; + } +}); +const ESCAPE_LOOKUP = { + '&': '\\u0026', + '>': '\\u003e', + '<': '\\u003c', + '\u2028': '\\u2028', + '\u2029': '\\u2029' +}; +const ESCAPE_REGEX = /[&><\u2028\u2029]/g; +const ATTRIBUTE_ESCAPE_LOOKUP = { + '&': '&', + '"': '"', + "'": ''', + '<': '<', + '>': '>' +}; +const ATTRIBUTE_ESCAPE_REGEX = /[&"'<>]/g; +function htmlEscapeJsonString(str) { + return str.replace(ESCAPE_REGEX, (match)=>ESCAPE_LOOKUP[match]); +} +function htmlEscapeAttributeString(str) { + return str.replace(ATTRIBUTE_ESCAPE_REGEX, (match)=>ATTRIBUTE_ESCAPE_LOOKUP[match]); +} + +//# sourceMappingURL=htmlescape.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/i18n/detect-domain-locale.js b/build/node_modules/next/dist/shared/lib/i18n/detect-domain-locale.js new file mode 100644 index 0000000..67071ed --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/i18n/detect-domain-locale.js @@ -0,0 +1,25 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "detectDomainLocale", { + enumerable: true, + get: function() { + return detectDomainLocale; + } +}); +function detectDomainLocale(domainItems, hostname, detectedLocale) { + if (!domainItems) return; + if (detectedLocale) { + detectedLocale = detectedLocale.toLowerCase(); + } + for (const item of domainItems){ + // remove port if present + const domainHostname = item.domain?.split(':', 1)[0].toLowerCase(); + if (hostname === domainHostname || detectedLocale === item.defaultLocale.toLowerCase() || item.locales?.some((locale)=>locale.toLowerCase() === detectedLocale)) { + return item; + } + } +} + +//# sourceMappingURL=detect-domain-locale.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/i18n/get-locale-redirect.js b/build/node_modules/next/dist/shared/lib/i18n/get-locale-redirect.js new file mode 100644 index 0000000..8ddd1f4 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/i18n/get-locale-redirect.js @@ -0,0 +1,59 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getLocaleRedirect", { + enumerable: true, + get: function() { + return getLocaleRedirect; + } +}); +const _acceptheader = require("../../../server/accept-header"); +const _denormalizepagepath = require("../page-path/denormalize-page-path"); +const _detectdomainlocale = require("./detect-domain-locale"); +const _formaturl = require("../router/utils/format-url"); +const _getcookieparser = require("../../../server/api-utils/get-cookie-parser"); +function getLocaleFromCookie(i18n, headers = {}) { + const nextLocale = (0, _getcookieparser.getCookieParser)(headers || {})()?.NEXT_LOCALE?.toLowerCase(); + return nextLocale ? i18n.locales.find((locale)=>nextLocale === locale.toLowerCase()) : undefined; +} +function detectLocale({ i18n, headers, domainLocale, preferredLocale, pathLocale }) { + return pathLocale || domainLocale?.defaultLocale || getLocaleFromCookie(i18n, headers) || preferredLocale || i18n.defaultLocale; +} +function getAcceptPreferredLocale(i18n, headers) { + if (headers?.['accept-language'] && !Array.isArray(headers['accept-language'])) { + try { + return (0, _acceptheader.acceptLanguage)(headers['accept-language'], i18n.locales); + } catch (err) {} + } +} +function getLocaleRedirect({ defaultLocale, domainLocale, pathLocale, headers, nextConfig, urlParsed }) { + if (nextConfig.i18n && nextConfig.i18n.localeDetection !== false && (0, _denormalizepagepath.denormalizePagePath)(urlParsed.pathname) === '/') { + const preferredLocale = getAcceptPreferredLocale(nextConfig.i18n, headers); + const detectedLocale = detectLocale({ + i18n: nextConfig.i18n, + preferredLocale, + headers, + pathLocale, + domainLocale + }); + const preferredDomain = (0, _detectdomainlocale.detectDomainLocale)(nextConfig.i18n.domains, undefined, preferredLocale); + if (domainLocale && preferredDomain) { + const isPDomain = preferredDomain.domain === domainLocale.domain; + const isPLocale = preferredDomain.defaultLocale === preferredLocale; + if (!isPDomain || !isPLocale) { + const scheme = `http${preferredDomain.http ? '' : 's'}`; + const rlocale = isPLocale ? '' : preferredLocale; + return `${scheme}://${preferredDomain.domain}/${rlocale}`; + } + } + if (detectedLocale.toLowerCase() !== defaultLocale.toLowerCase()) { + return (0, _formaturl.formatUrl)({ + ...urlParsed, + pathname: `${nextConfig.basePath || ''}/${detectedLocale}${nextConfig.trailingSlash ? '/' : ''}` + }); + } + } +} + +//# sourceMappingURL=get-locale-redirect.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js b/build/node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js new file mode 100644 index 0000000..2c120c5 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js @@ -0,0 +1,54 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "normalizeLocalePath", { + enumerable: true, + get: function() { + return normalizeLocalePath; + } +}); +/** + * A cache of lowercased locales for each list of locales. This is stored as a + * WeakMap so if the locales are garbage collected, the cache entry will be + * removed as well. + */ const cache = new WeakMap(); +function normalizeLocalePath(pathname, locales) { + // If locales is undefined, return the pathname as is. + if (!locales) return { + pathname + }; + // Get the cached lowercased locales or create a new cache entry. + let lowercasedLocales = cache.get(locales); + if (!lowercasedLocales) { + lowercasedLocales = locales.map((locale)=>locale.toLowerCase()); + cache.set(locales, lowercasedLocales); + } + let detectedLocale; + // The first segment will be empty, because it has a leading `/`. If + // there is no further segment, there is no locale (or it's the default). + const segments = pathname.split('/', 2); + // If there's no second segment (ie, the pathname is just `/`), there's no + // locale. + if (!segments[1]) return { + pathname + }; + // The second segment will contain the locale part if any. + const segment = segments[1].toLowerCase(); + // See if the segment matches one of the locales. If it doesn't, there is + // no locale (or it's the default). + const index = lowercasedLocales.indexOf(segment); + if (index < 0) return { + pathname + }; + // Return the case-sensitive locale. + detectedLocale = locales[index]; + // Remove the `/${locale}` part of the pathname. + pathname = pathname.slice(detectedLocale.length + 1) || '/'; + return { + pathname, + detectedLocale + }; +} + +//# sourceMappingURL=normalize-locale-path.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/image-blur-svg.js b/build/node_modules/next/dist/shared/lib/image-blur-svg.js new file mode 100644 index 0000000..1263883 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/image-blur-svg.js @@ -0,0 +1,22 @@ +/** + * A shared function, used on both client and server, to generate a SVG blur placeholder. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getImageBlurSvg", { + enumerable: true, + get: function() { + return getImageBlurSvg; + } +}); +function getImageBlurSvg({ widthInt, heightInt, blurWidth, blurHeight, blurDataURL, objectFit }) { + const std = 20; + const svgWidth = blurWidth ? blurWidth * 40 : widthInt; + const svgHeight = blurHeight ? blurHeight * 40 : heightInt; + const viewBox = svgWidth && svgHeight ? `viewBox='0 0 ${svgWidth} ${svgHeight}'` : ''; + const preserveAspectRatio = viewBox ? 'none' : objectFit === 'contain' ? 'xMidYMid' : objectFit === 'cover' ? 'xMidYMid slice' : 'none'; + return `%3Csvg xmlns='http://www.w3.org/2000/svg' ${viewBox}%3E%3Cfilter id='b' color-interpolation-filters='sRGB'%3E%3CfeGaussianBlur stdDeviation='${std}'/%3E%3CfeColorMatrix values='1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100 -1' result='s'/%3E%3CfeFlood x='0' y='0' width='100%25' height='100%25'/%3E%3CfeComposite operator='out' in='s'/%3E%3CfeComposite in2='SourceGraphic'/%3E%3CfeGaussianBlur stdDeviation='${std}'/%3E%3C/filter%3E%3Cimage width='100%25' height='100%25' x='0' y='0' preserveAspectRatio='${preserveAspectRatio}' style='filter: url(%23b);' href='${blurDataURL}'/%3E%3C/svg%3E`; +} + +//# sourceMappingURL=image-blur-svg.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js b/build/node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js new file mode 100644 index 0000000..649f904 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js @@ -0,0 +1,19 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "ImageConfigContext", { + enumerable: true, + get: function() { + return ImageConfigContext; + } +}); +const _interop_require_default = require("@swc/helpers/_/_interop_require_default"); +const _react = /*#__PURE__*/ _interop_require_default._(require("react")); +const _imageconfig = require("./image-config"); +const ImageConfigContext = _react.default.createContext(_imageconfig.imageConfigDefault); +if (process.env.NODE_ENV !== 'production') { + ImageConfigContext.displayName = 'ImageConfigContext'; +} + +//# sourceMappingURL=image-config-context.shared-runtime.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/image-config.js b/build/node_modules/next/dist/shared/lib/image-config.js new file mode 100644 index 0000000..534abb1 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/image-config.js @@ -0,0 +1,77 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + VALID_LOADERS: null, + imageConfigDefault: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + VALID_LOADERS: function() { + return VALID_LOADERS; + }, + imageConfigDefault: function() { + return imageConfigDefault; + } +}); +const VALID_LOADERS = [ + 'default', + 'imgix', + 'cloudinary', + 'akamai', + 'custom' +]; +const imageConfigDefault = { + deviceSizes: [ + 640, + 750, + 828, + 1080, + 1200, + 1920, + 2048, + 3840 + ], + imageSizes: [ + 32, + 48, + 64, + 96, + 128, + 256, + 384 + ], + path: '/_next/image', + loader: 'default', + loaderFile: '', + /** + * @deprecated Use `remotePatterns` instead to protect your application from malicious users. + */ domains: [], + disableStaticImages: false, + minimumCacheTTL: 14400, + formats: [ + 'image/webp' + ], + maximumDiskCacheSize: undefined, + maximumRedirects: 3, + maximumResponseBody: 50000000, + dangerouslyAllowLocalIP: false, + dangerouslyAllowSVG: false, + contentSecurityPolicy: `script-src 'none'; frame-src 'none'; sandbox;`, + contentDispositionType: 'attachment', + localPatterns: undefined, + remotePatterns: [], + qualities: [ + 75 + ], + unoptimized: false, + customCacheHandler: false +}; + +//# sourceMappingURL=image-config.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/invariant-error.js b/build/node_modules/next/dist/shared/lib/invariant-error.js new file mode 100644 index 0000000..b4180b5 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/invariant-error.js @@ -0,0 +1,18 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "InvariantError", { + enumerable: true, + get: function() { + return InvariantError; + } +}); +class InvariantError extends Error { + constructor(message, options){ + super(`Invariant: ${message.endsWith('.') ? message : message + '.'} This is a bug in Next.js.`, options); + this.name = 'InvariantError'; + } +} + +//# sourceMappingURL=invariant-error.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/is-plain-object.js b/build/node_modules/next/dist/shared/lib/is-plain-object.js new file mode 100644 index 0000000..3ea90e2 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/is-plain-object.js @@ -0,0 +1,42 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getObjectClassLabel: null, + isPlainObject: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getObjectClassLabel: function() { + return getObjectClassLabel; + }, + isPlainObject: function() { + return isPlainObject; + } +}); +function getObjectClassLabel(value) { + return Object.prototype.toString.call(value); +} +function isPlainObject(value) { + if (getObjectClassLabel(value) !== '[object Object]') { + return false; + } + const prototype = Object.getPrototypeOf(value); + /** + * this used to be previously: + * + * `return prototype === null || prototype === Object.prototype` + * + * but Edge Runtime expose Object from vm, being that kind of type-checking wrongly fail. + * + * It was changed to the current implementation since it's resilient to serialization. + */ return prototype === null || prototype.hasOwnProperty('isPrototypeOf'); +} + +//# sourceMappingURL=is-plain-object.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/is-thenable.js b/build/node_modules/next/dist/shared/lib/is-thenable.js new file mode 100644 index 0000000..0273fda --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/is-thenable.js @@ -0,0 +1,20 @@ +/** + * Check to see if a value is Thenable. + * + * @param promise the maybe-thenable value + * @returns true if the value is thenable + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "isThenable", { + enumerable: true, + get: function() { + return isThenable; + } +}); +function isThenable(promise) { + return promise !== null && typeof promise === 'object' && 'then' in promise && typeof promise.then === 'function'; +} + +//# sourceMappingURL=is-thenable.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/isomorphic/path.js b/build/node_modules/next/dist/shared/lib/isomorphic/path.js new file mode 100644 index 0000000..c8576c7 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/isomorphic/path.js @@ -0,0 +1,14 @@ +/** + * This module is for next.js server internal usage of path module. + * It will use native path module for nodejs runtime. + * It will use path-browserify polyfill for edge runtime. + */ "use strict"; +let path; +if (process.env.NEXT_RUNTIME === 'edge') { + path = require('next/dist/compiled/path-browserify'); +} else { + path = require('path'); +} +module.exports = path; + +//# sourceMappingURL=path.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js b/build/node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js new file mode 100644 index 0000000..9a0cd67 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js @@ -0,0 +1,37 @@ +// This has to be a shared module which is shared between client component error boundary and dynamic component +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + BailoutToCSRError: null, + isBailoutToCSRError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + BailoutToCSRError: function() { + return BailoutToCSRError; + }, + isBailoutToCSRError: function() { + return isBailoutToCSRError; + } +}); +const BAILOUT_TO_CSR = 'BAILOUT_TO_CLIENT_SIDE_RENDERING'; +class BailoutToCSRError extends Error { + constructor(reason){ + super(`Bail out to client-side rendering: ${reason}`), this.reason = reason, this.digest = BAILOUT_TO_CSR; + } +} +function isBailoutToCSRError(err) { + if (typeof err !== 'object' || err === null || !('digest' in err)) { + return false; + } + return err.digest === BAILOUT_TO_CSR; +} + +//# sourceMappingURL=bailout-to-csr.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/loadable-context.shared-runtime.js b/build/node_modules/next/dist/shared/lib/loadable-context.shared-runtime.js new file mode 100644 index 0000000..c469e20 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/loadable-context.shared-runtime.js @@ -0,0 +1,19 @@ +'use client'; +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "LoadableContext", { + enumerable: true, + get: function() { + return LoadableContext; + } +}); +const _interop_require_default = require("@swc/helpers/_/_interop_require_default"); +const _react = /*#__PURE__*/ _interop_require_default._(require("react")); +const LoadableContext = _react.default.createContext(null); +if (process.env.NODE_ENV !== 'production') { + LoadableContext.displayName = 'LoadableContext'; +} + +//# sourceMappingURL=loadable-context.shared-runtime.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/loadable.shared-runtime.js b/build/node_modules/next/dist/shared/lib/loadable.shared-runtime.js new file mode 100644 index 0000000..6dc1a1b --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/loadable.shared-runtime.js @@ -0,0 +1,246 @@ +// TODO: Remove use of `any` type. +/** +@copyright (c) 2017-present James Kyle <me@thejameskyle.com> + MIT License + Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE +*/ // https://github.com/jamiebuilds/react-loadable/blob/v5.5.0/src/index.js +// Modified to be compatible with webpack 4 / Next.js +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "default", { + enumerable: true, + get: function() { + return _default; + } +}); +const _interop_require_default = require("@swc/helpers/_/_interop_require_default"); +const _react = /*#__PURE__*/ _interop_require_default._(require("react")); +const _loadablecontextsharedruntime = require("./loadable-context.shared-runtime"); +function resolve(obj) { + return obj && obj.default ? obj.default : obj; +} +const ALL_INITIALIZERS = []; +const READY_INITIALIZERS = []; +let initialized = false; +function load(loader) { + let promise = loader(); + let state = { + loading: true, + loaded: null, + error: null + }; + state.promise = promise.then((loaded)=>{ + state.loading = false; + state.loaded = loaded; + return loaded; + }).catch((err)=>{ + state.loading = false; + state.error = err; + throw err; + }); + return state; +} +function createLoadableComponent(loadFn, options) { + let opts = Object.assign({ + loader: null, + loading: null, + delay: 200, + timeout: null, + webpack: null, + modules: null + }, options); + /** @type LoadableSubscription */ let subscription = null; + function init() { + if (!subscription) { + const sub = new LoadableSubscription(loadFn, opts); + subscription = { + getCurrentValue: sub.getCurrentValue.bind(sub), + subscribe: sub.subscribe.bind(sub), + retry: sub.retry.bind(sub), + promise: sub.promise.bind(sub) + }; + } + return subscription.promise(); + } + // Server only + if (typeof window === 'undefined') { + ALL_INITIALIZERS.push(init); + } + // Client only + if (!initialized && typeof window !== 'undefined') { + // require.resolveWeak check is needed for environments that don't have it available like Jest + const moduleIds = opts.webpack && typeof require.resolveWeak === 'function' ? opts.webpack() : opts.modules; + if (moduleIds) { + READY_INITIALIZERS.push((ids)=>{ + for (const moduleId of moduleIds){ + if (ids.includes(moduleId)) { + return init(); + } + } + }); + } + } + function useLoadableModule() { + init(); + const context = _react.default.useContext(_loadablecontextsharedruntime.LoadableContext); + if (context && Array.isArray(opts.modules)) { + opts.modules.forEach((moduleName)=>{ + context(moduleName); + }); + } + } + function LoadableComponent(props, ref) { + useLoadableModule(); + const state = _react.default.useSyncExternalStore(subscription.subscribe, subscription.getCurrentValue, subscription.getCurrentValue); + _react.default.useImperativeHandle(ref, ()=>({ + retry: subscription.retry + }), []); + return _react.default.useMemo(()=>{ + if (state.loading || state.error) { + return /*#__PURE__*/ _react.default.createElement(opts.loading, { + isLoading: state.loading, + pastDelay: state.pastDelay, + timedOut: state.timedOut, + error: state.error, + retry: subscription.retry + }); + } else if (state.loaded) { + return /*#__PURE__*/ _react.default.createElement(resolve(state.loaded), props); + } else { + return null; + } + }, [ + props, + state + ]); + } + LoadableComponent.preload = ()=>init(); + LoadableComponent.displayName = 'LoadableComponent'; + return /*#__PURE__*/ _react.default.forwardRef(LoadableComponent); +} +class LoadableSubscription { + constructor(loadFn, opts){ + this._loadFn = loadFn; + this._opts = opts; + this._callbacks = new Set(); + this._delay = null; + this._timeout = null; + this.retry(); + } + promise() { + return this._res.promise; + } + retry() { + this._clearTimeouts(); + this._res = this._loadFn(this._opts.loader); + this._state = { + pastDelay: false, + timedOut: false + }; + const { _res: res, _opts: opts } = this; + if (res.loading) { + if (typeof opts.delay === 'number') { + if (opts.delay === 0) { + this._state.pastDelay = true; + } else { + this._delay = setTimeout(()=>{ + this._update({ + pastDelay: true + }); + }, opts.delay); + } + } + if (typeof opts.timeout === 'number') { + this._timeout = setTimeout(()=>{ + this._update({ + timedOut: true + }); + }, opts.timeout); + } + } + this._res.promise.then(()=>{ + this._update({}); + this._clearTimeouts(); + }).catch((_err)=>{ + this._update({}); + this._clearTimeouts(); + }); + this._update({}); + } + _update(partial) { + this._state = { + ...this._state, + error: this._res.error, + loaded: this._res.loaded, + loading: this._res.loading, + ...partial + }; + this._callbacks.forEach((callback)=>callback()); + } + _clearTimeouts() { + clearTimeout(this._delay); + clearTimeout(this._timeout); + } + getCurrentValue() { + return this._state; + } + subscribe(callback) { + this._callbacks.add(callback); + return ()=>{ + this._callbacks.delete(callback); + }; + } +} +function Loadable(opts) { + return createLoadableComponent(load, opts); +} +function flushInitializers(initializers, ids) { + let promises = []; + while(initializers.length){ + let init = initializers.pop(); + promises.push(init(ids)); + } + return Promise.all(promises).then(()=>{ + if (initializers.length) { + return flushInitializers(initializers, ids); + } + }); +} +Loadable.preloadAll = ()=>{ + return new Promise((resolveInitializers, reject)=>{ + flushInitializers(ALL_INITIALIZERS).then(resolveInitializers, reject); + }); +}; +Loadable.preloadReady = (ids = [])=>{ + return new Promise((resolvePreload)=>{ + const res = ()=>{ + initialized = true; + return resolvePreload(); + }; + // We always will resolve, errors should be handled within loading UIs. + flushInitializers(READY_INITIALIZERS, ids).then(res, res); + }); +}; +if (typeof window !== 'undefined') { + window.__NEXT_PRELOADREADY = Loadable.preloadReady; +} +const _default = Loadable; + +//# sourceMappingURL=loadable.shared-runtime.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/match-local-pattern.js b/build/node_modules/next/dist/shared/lib/match-local-pattern.js new file mode 100644 index 0000000..daab491 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/match-local-pattern.js @@ -0,0 +1,46 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + hasLocalMatch: null, + matchLocalPattern: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + hasLocalMatch: function() { + return hasLocalMatch; + }, + matchLocalPattern: function() { + return matchLocalPattern; + } +}); +const _picomatch = require("next/dist/compiled/picomatch"); +function matchLocalPattern(pattern, url) { + if (pattern.search !== undefined) { + if (pattern.search !== url.search) { + return false; + } + } + if (!(0, _picomatch.makeRe)(pattern.pathname ?? '**', { + dot: true + }).test(url.pathname)) { + return false; + } + return true; +} +function hasLocalMatch(localPatterns, urlPathAndQuery) { + if (!localPatterns) { + // if the user didn't define "localPatterns", we allow all local images + return true; + } + const url = new URL(urlPathAndQuery, 'http://n'); + return localPatterns.some((p)=>matchLocalPattern(p, url)); +} + +//# sourceMappingURL=match-local-pattern.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/match-remote-pattern.js b/build/node_modules/next/dist/shared/lib/match-remote-pattern.js new file mode 100644 index 0000000..e272245 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/match-remote-pattern.js @@ -0,0 +1,63 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + hasRemoteMatch: null, + matchRemotePattern: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + hasRemoteMatch: function() { + return hasRemoteMatch; + }, + matchRemotePattern: function() { + return matchRemotePattern; + } +}); +const _picomatch = require("next/dist/compiled/picomatch"); +function matchRemotePattern(pattern, url) { + if (pattern.protocol !== undefined) { + if (pattern.protocol.replace(/:$/, '') !== url.protocol.replace(/:$/, '')) { + return false; + } + } + if (pattern.port !== undefined) { + if (pattern.port !== url.port) { + return false; + } + } + if (pattern.hostname === undefined) { + throw Object.defineProperty(new Error(`Pattern should define hostname but found\n${JSON.stringify(pattern)}`), "__NEXT_ERROR_CODE", { + value: "E410", + enumerable: false, + configurable: true + }); + } else { + if (!(0, _picomatch.makeRe)(pattern.hostname).test(url.hostname)) { + return false; + } + } + if (pattern.search !== undefined) { + if (pattern.search !== url.search) { + return false; + } + } + // Should be the same as writeImagesManifest() + if (!(0, _picomatch.makeRe)(pattern.pathname ?? '**', { + dot: true + }).test(url.pathname)) { + return false; + } + return true; +} +function hasRemoteMatch(domains, remotePatterns, url) { + return domains.some((domain)=>url.hostname === domain) || remotePatterns.some((p)=>matchRemotePattern(p, url)); +} + +//# sourceMappingURL=match-remote-pattern.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/modern-browserslist-target.js b/build/node_modules/next/dist/shared/lib/modern-browserslist-target.js new file mode 100644 index 0000000..3841ccf --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/modern-browserslist-target.js @@ -0,0 +1,15 @@ +// Note: This file is JS because it's used by the taskfile-swc.js file, which is JS. +// Keep file changes in sync with the corresponding `.d.ts` files. +/** + * These are the minimum browser versions that we consider "modern" and thus compile for by default. + * This list was generated using `pnpm browserslist "baseline widely available"` on 2025-10-01. + */ "use strict"; +const MODERN_BROWSERSLIST_TARGET = [ + 'chrome 111', + 'edge 111', + 'firefox 111', + 'safari 16.4' +]; +module.exports = MODERN_BROWSERSLIST_TARGET; + +//# sourceMappingURL=modern-browserslist-target.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/no-fallback-error.external.js b/build/node_modules/next/dist/shared/lib/no-fallback-error.external.js new file mode 100644 index 0000000..66ac9a0 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/no-fallback-error.external.js @@ -0,0 +1,18 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "NoFallbackError", { + enumerable: true, + get: function() { + return NoFallbackError; + } +}); +class NoFallbackError extends Error { + constructor(){ + super(); + this.message = 'Internal: NoFallbackError'; + } +} + +//# sourceMappingURL=no-fallback-error.external.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/normalized-asset-prefix.js b/build/node_modules/next/dist/shared/lib/normalized-asset-prefix.js new file mode 100644 index 0000000..c976f55 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/normalized-asset-prefix.js @@ -0,0 +1,28 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "normalizedAssetPrefix", { + enumerable: true, + get: function() { + return normalizedAssetPrefix; + } +}); +function normalizedAssetPrefix(assetPrefix) { + // remove all leading slashes and trailing slashes + const escapedAssetPrefix = assetPrefix?.replace(/^\/+|\/+$/g, '') || false; + // if an assetPrefix was '/', we return empty string + // because it could be an unnecessary trailing slash + if (!escapedAssetPrefix) { + return ''; + } + if (URL.canParse(escapedAssetPrefix)) { + const url = new URL(escapedAssetPrefix).toString(); + return url.endsWith('/') ? url.slice(0, -1) : url; + } + // assuming assetPrefix here is a pathname-style, + // restore the leading slash + return `/${escapedAssetPrefix}`; +} + +//# sourceMappingURL=normalized-asset-prefix.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/page-path/absolute-path-to-page.js b/build/node_modules/next/dist/shared/lib/page-path/absolute-path-to-page.js new file mode 100644 index 0000000..84cab6a --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/page-path/absolute-path-to-page.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "absolutePathToPage", { + enumerable: true, + get: function() { + return absolutePathToPage; + } +}); +const _interop_require_default = require("@swc/helpers/_/_interop_require_default"); +const _ensureleadingslash = require("./ensure-leading-slash"); +const _normalizepathsep = require("./normalize-path-sep"); +const _path = /*#__PURE__*/ _interop_require_default._(require("../isomorphic/path")); +const _removepagepathtail = require("./remove-page-path-tail"); +const _getmetadataroute = require("../../../lib/metadata/get-metadata-route"); +function absolutePathToPage(pagePath, options) { + const isAppDir = options.pagesType === 'app'; + const page = (0, _removepagepathtail.removePagePathTail)((0, _normalizepathsep.normalizePathSep)((0, _ensureleadingslash.ensureLeadingSlash)(_path.default.relative(options.dir, pagePath))), { + extensions: options.extensions, + keepIndex: options.keepIndex + }); + return isAppDir ? (0, _getmetadataroute.normalizeMetadataRoute)(page) : page; +} + +//# sourceMappingURL=absolute-path-to-page.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js b/build/node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js new file mode 100644 index 0000000..ad5ec62 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js @@ -0,0 +1,18 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "denormalizePagePath", { + enumerable: true, + get: function() { + return denormalizePagePath; + } +}); +const _utils = require("../router/utils"); +const _normalizepathsep = require("./normalize-path-sep"); +function denormalizePagePath(page) { + let _page = (0, _normalizepathsep.normalizePathSep)(page); + return _page.startsWith('/index/') && !(0, _utils.isDynamicRoute)(_page) ? _page.slice(6) : _page !== '/index' ? _page : '/'; +} + +//# sourceMappingURL=denormalize-page-path.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js b/build/node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js new file mode 100644 index 0000000..6c4733d --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js @@ -0,0 +1,18 @@ +/** + * For a given page path, this function ensures that there is a leading slash. + * If there is not a leading slash, one is added, otherwise it is noop. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "ensureLeadingSlash", { + enumerable: true, + get: function() { + return ensureLeadingSlash; + } +}); +function ensureLeadingSlash(path) { + return path.startsWith('/') ? path : `/${path}`; +} + +//# sourceMappingURL=ensure-leading-slash.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/page-path/get-page-paths.js b/build/node_modules/next/dist/shared/lib/page-path/get-page-paths.js new file mode 100644 index 0000000..b2c1134 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/page-path/get-page-paths.js @@ -0,0 +1,40 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getPagePaths", { + enumerable: true, + get: function() { + return getPagePaths; + } +}); +const _interop_require_default = require("@swc/helpers/_/_interop_require_default"); +const _denormalizepagepath = require("./denormalize-page-path"); +const _path = /*#__PURE__*/ _interop_require_default._(require("../isomorphic/path")); +function getPagePaths(normalizedPagePath, extensions, isAppDir) { + const page = (0, _denormalizepagepath.denormalizePagePath)(normalizedPagePath); + let prefixes; + if (isAppDir) { + prefixes = [ + page + ]; + } else if (normalizedPagePath.endsWith('/index')) { + prefixes = [ + _path.default.join(page, 'index') + ]; + } else { + prefixes = [ + page, + _path.default.join(page, 'index') + ]; + } + const paths = []; + for (const extension of extensions){ + for (const prefix of prefixes){ + paths.push(`${prefix}.${extension}`); + } + } + return paths; +} + +//# sourceMappingURL=get-page-paths.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/page-path/normalize-data-path.js b/build/node_modules/next/dist/shared/lib/page-path/normalize-data-path.js new file mode 100644 index 0000000..047433b --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/page-path/normalize-data-path.js @@ -0,0 +1,23 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "normalizeDataPath", { + enumerable: true, + get: function() { + return normalizeDataPath; + } +}); +const _pathhasprefix = require("../router/utils/path-has-prefix"); +function normalizeDataPath(pathname) { + if (!(0, _pathhasprefix.pathHasPrefix)(pathname || '/', '/_next/data')) { + return pathname; + } + pathname = pathname.replace(/\/_next\/data\/[^/]{1,}/, '').replace(/\.json$/, ''); + if (pathname === '/index') { + return '/'; + } + return pathname; +} + +//# sourceMappingURL=normalize-data-path.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/page-path/normalize-page-path.js b/build/node_modules/next/dist/shared/lib/page-path/normalize-page-path.js new file mode 100644 index 0000000..2f41059 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/page-path/normalize-page-path.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "normalizePagePath", { + enumerable: true, + get: function() { + return normalizePagePath; + } +}); +const _ensureleadingslash = require("./ensure-leading-slash"); +const _utils = require("../router/utils"); +const _utils1 = require("../utils"); +function normalizePagePath(page) { + const normalized = /^\/index(\/|$)/.test(page) && !(0, _utils.isDynamicRoute)(page) ? `/index${page}` : page === '/' ? '/index' : (0, _ensureleadingslash.ensureLeadingSlash)(page); + if (process.env.NEXT_RUNTIME !== 'edge') { + const { posix } = require('path'); + const resolvedPage = posix.normalize(normalized); + if (resolvedPage !== normalized) { + throw new _utils1.NormalizeError(`Requested and resolved page mismatch: ${normalized} ${resolvedPage}`); + } + } + return normalized; +} + +//# sourceMappingURL=normalize-page-path.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js b/build/node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js new file mode 100644 index 0000000..2d04072 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js @@ -0,0 +1,19 @@ +/** + * For a given page path, this function ensures that there is no backslash + * escaping slashes in the path. Example: + * - `foo\/bar\/baz` -> `foo/bar/baz` + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "normalizePathSep", { + enumerable: true, + get: function() { + return normalizePathSep; + } +}); +function normalizePathSep(path) { + return path.replace(/\\/g, '/'); +} + +//# sourceMappingURL=normalize-path-sep.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/page-path/remove-page-path-tail.js b/build/node_modules/next/dist/shared/lib/page-path/remove-page-path-tail.js new file mode 100644 index 0000000..f875c83 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/page-path/remove-page-path-tail.js @@ -0,0 +1,20 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "removePagePathTail", { + enumerable: true, + get: function() { + return removePagePathTail; + } +}); +const _normalizepathsep = require("./normalize-path-sep"); +function removePagePathTail(pagePath, options) { + pagePath = (0, _normalizepathsep.normalizePathSep)(pagePath).replace(new RegExp(`\\.+(?:${options.extensions.join('|')})$`), ''); + if (options.keepIndex !== true) { + pagePath = pagePath.replace(/\/index$/, '') || '/'; + } + return pagePath; +} + +//# sourceMappingURL=remove-page-path-tail.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/promise-with-resolvers.js b/build/node_modules/next/dist/shared/lib/promise-with-resolvers.js new file mode 100644 index 0000000..cfb3179 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/promise-with-resolvers.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "createPromiseWithResolvers", { + enumerable: true, + get: function() { + return createPromiseWithResolvers; + } +}); +function createPromiseWithResolvers() { + // Shim of Stage 4 Promise.withResolvers proposal + let resolve; + let reject; + const promise = new Promise((res, rej)=>{ + resolve = res; + reject = rej; + }); + return { + resolve: resolve, + reject: reject, + promise + }; +} + +//# sourceMappingURL=promise-with-resolvers.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router-context.shared-runtime.js b/build/node_modules/next/dist/shared/lib/router-context.shared-runtime.js new file mode 100644 index 0000000..fa861be --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router-context.shared-runtime.js @@ -0,0 +1,18 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "RouterContext", { + enumerable: true, + get: function() { + return RouterContext; + } +}); +const _interop_require_default = require("@swc/helpers/_/_interop_require_default"); +const _react = /*#__PURE__*/ _interop_require_default._(require("react")); +const RouterContext = _react.default.createContext(null); +if (process.env.NODE_ENV !== 'production') { + RouterContext.displayName = 'RouterContext'; +} + +//# sourceMappingURL=router-context.shared-runtime.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/adapters.js b/build/node_modules/next/dist/shared/lib/router/adapters.js new file mode 100644 index 0000000..4110453 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/adapters.js @@ -0,0 +1,136 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + PathnameContextProviderAdapter: null, + adaptForAppRouterInstance: null, + adaptForPathParams: null, + adaptForSearchParams: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + PathnameContextProviderAdapter: function() { + return PathnameContextProviderAdapter; + }, + adaptForAppRouterInstance: function() { + return adaptForAppRouterInstance; + }, + adaptForPathParams: function() { + return adaptForPathParams; + }, + adaptForSearchParams: function() { + return adaptForSearchParams; + } +}); +const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard"); +const _jsxruntime = require("react/jsx-runtime"); +const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react")); +const _hooksclientcontextsharedruntime = require("../hooks-client-context.shared-runtime"); +const _utils = require("./utils"); +const _aspathtosearchparams = require("./utils/as-path-to-search-params"); +const _routeregex = require("./utils/route-regex"); +function adaptForAppRouterInstance(pagesRouter) { + return { + back () { + pagesRouter.back(); + }, + forward () { + pagesRouter.forward(); + }, + refresh () { + pagesRouter.reload(); + }, + hmrRefresh () {}, + push (href, { scroll } = {}) { + void pagesRouter.push(href, undefined, { + scroll + }); + }, + replace (href, { scroll } = {}) { + void pagesRouter.replace(href, undefined, { + scroll + }); + }, + prefetch (href) { + void pagesRouter.prefetch(href); + } + }; +} +function adaptForSearchParams(router) { + if (!router.isReady || !router.query) { + return new URLSearchParams(); + } + return (0, _aspathtosearchparams.asPathToSearchParams)(router.asPath); +} +function adaptForPathParams(router) { + if (!router.isReady || !router.query) { + return null; + } + const pathParams = {}; + const routeRegex = (0, _routeregex.getRouteRegex)(router.pathname); + const keys = Object.keys(routeRegex.groups); + for (const key of keys){ + pathParams[key] = router.query[key]; + } + return pathParams; +} +function PathnameContextProviderAdapter({ children, router, ...props }) { + const ref = (0, _react.useRef)(props.isAutoExport); + const value = (0, _react.useMemo)(()=>{ + // isAutoExport is only ever `true` on the first render from the server, + // so reset it to `false` after we read it for the first time as `true`. If + // we don't use the value, then we don't need it. + const isAutoExport = ref.current; + if (isAutoExport) { + ref.current = false; + } + // When the route is a dynamic route, we need to do more processing to + // determine if we need to stop showing the pathname. + if ((0, _utils.isDynamicRoute)(router.pathname)) { + // When the router is rendering the fallback page, it can't possibly know + // the path, so return `null` here. Read more about fallback pages over + // at: + // https://nextjs.org/docs/api-reference/data-fetching/get-static-paths#fallback-pages + if (router.isFallback) { + return null; + } + // When `isAutoExport` is true, meaning this is a page page has been + // automatically statically optimized, and the router is not ready, then + // we can't know the pathname yet. Read more about automatic static + // optimization at: + // https://nextjs.org/docs/advanced-features/automatic-static-optimization + if (isAutoExport && !router.isReady) { + return null; + } + } + // The `router.asPath` contains the pathname seen by the browser (including + // any query strings), so it should have that stripped. Read more about the + // `asPath` option over at: + // https://nextjs.org/docs/api-reference/next/router#router-object + let url; + try { + url = new URL(router.asPath, 'http://f'); + } catch (_) { + // fallback to / for invalid asPath values e.g. // + return '/'; + } + return url.pathname; + }, [ + router.asPath, + router.isFallback, + router.isReady, + router.pathname + ]); + return /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.PathnameContext.Provider, { + value: value, + children: children + }); +} + +//# sourceMappingURL=adapters.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/routes/app.js b/build/node_modules/next/dist/shared/lib/router/routes/app.js new file mode 100644 index 0000000..8e9abb9 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/routes/app.js @@ -0,0 +1,134 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + isInterceptionAppRoute: null, + isNormalizedAppRoute: null, + parseAppRoute: null, + parseAppRouteSegment: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + isInterceptionAppRoute: function() { + return isInterceptionAppRoute; + }, + isNormalizedAppRoute: function() { + return isNormalizedAppRoute; + }, + parseAppRoute: function() { + return parseAppRoute; + }, + parseAppRouteSegment: function() { + return parseAppRouteSegment; + } +}); +const _invarianterror = require("../../invariant-error"); +const _getsegmentparam = require("../utils/get-segment-param"); +const _interceptionroutes = require("../utils/interception-routes"); +function normalizeEncodedDynamicPlaceholder(segment) { + if (!/%5b|%5d/i.test(segment)) { + return segment; + } + try { + const decodedSegment = decodeURIComponent(segment); + return (0, _getsegmentparam.getSegmentParam)(decodedSegment) ? decodedSegment : segment; + } catch { + return segment; + } +} +function parseAppRouteSegment(segment) { + if (segment === '') { + return null; + } + // Check if the segment starts with an interception marker + const interceptionMarker = _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m)); + const param = (0, _getsegmentparam.getSegmentParam)(segment); + if (param) { + return { + type: 'dynamic', + name: segment, + param, + interceptionMarker + }; + } else if (segment.startsWith('(') && segment.endsWith(')')) { + return { + type: 'route-group', + name: segment, + interceptionMarker + }; + } else if (segment.startsWith('@')) { + return { + type: 'parallel-route', + name: segment, + interceptionMarker + }; + } else { + return { + type: 'static', + name: segment, + interceptionMarker + }; + } +} +function isNormalizedAppRoute(route) { + return route.normalized; +} +function isInterceptionAppRoute(route) { + return route.interceptionMarker !== undefined && route.interceptingRoute !== undefined && route.interceptedRoute !== undefined; +} +function parseAppRoute(pathname, normalized) { + const pathnameSegments = pathname.split('/').filter(Boolean); + // Build segments array with static and dynamic segments + const segments = []; + // Parse if this is an interception route. + let interceptionMarker; + let interceptingRoute; + let interceptedRoute; + for (const segment of pathnameSegments){ + const normalizedSegment = normalizeEncodedDynamicPlaceholder(segment); + // Parse the segment into an AppSegment. + const appSegment = parseAppRouteSegment(normalizedSegment); + if (!appSegment) { + continue; + } + if (normalized && (appSegment.type === 'route-group' || appSegment.type === 'parallel-route')) { + throw Object.defineProperty(new _invarianterror.InvariantError(`${pathname} is being parsed as a normalized route, but it has a route group or parallel route segment.`), "__NEXT_ERROR_CODE", { + value: "E923", + enumerable: false, + configurable: true + }); + } + segments.push(appSegment); + if (appSegment.interceptionMarker) { + const parts = pathname.split(appSegment.interceptionMarker); + if (parts.length !== 2) { + throw Object.defineProperty(new Error(`Invalid interception route: ${pathname}`), "__NEXT_ERROR_CODE", { + value: "E924", + enumerable: false, + configurable: true + }); + } + interceptingRoute = normalized ? parseAppRoute(parts[0], true) : parseAppRoute(parts[0], false); + interceptedRoute = normalized ? parseAppRoute(parts[1], true) : parseAppRoute(parts[1], false); + interceptionMarker = appSegment.interceptionMarker; + } + } + const dynamicSegments = segments.filter((segment)=>segment.type === 'dynamic'); + return { + normalized, + pathname, + segments, + dynamicSegments, + interceptionMarker, + interceptingRoute, + interceptedRoute + }; +} + +//# sourceMappingURL=app.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/add-locale.js b/build/node_modules/next/dist/shared/lib/router/utils/add-locale.js new file mode 100644 index 0000000..23a05b9 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/add-locale.js @@ -0,0 +1,28 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "addLocale", { + enumerable: true, + get: function() { + return addLocale; + } +}); +const _addpathprefix = require("./add-path-prefix"); +const _pathhasprefix = require("./path-has-prefix"); +function addLocale(path, locale, defaultLocale, ignorePrefix) { + // If no locale was given or the locale is the default locale, we don't need + // to prefix the path. + if (!locale || locale === defaultLocale) return path; + const lower = path.toLowerCase(); + // If the path is an API path or the path already has the locale prefix, we + // don't need to prefix the path. + if (!ignorePrefix) { + if ((0, _pathhasprefix.pathHasPrefix)(lower, '/api')) return path; + if ((0, _pathhasprefix.pathHasPrefix)(lower, `/${locale.toLowerCase()}`)) return path; + } + // Add the locale prefix to the path. + return (0, _addpathprefix.addPathPrefix)(path, `/${locale}`); +} + +//# sourceMappingURL=add-locale.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js b/build/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js new file mode 100644 index 0000000..03517d9 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js @@ -0,0 +1,20 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "addPathPrefix", { + enumerable: true, + get: function() { + return addPathPrefix; + } +}); +const _parsepath = require("./parse-path"); +function addPathPrefix(path, prefix) { + if (!path.startsWith('/') || !prefix) { + return path; + } + const { pathname, query, hash } = (0, _parsepath.parsePath)(path); + return `${prefix}${pathname}${query}${hash}`; +} + +//# sourceMappingURL=add-path-prefix.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js b/build/node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js new file mode 100644 index 0000000..a946497 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js @@ -0,0 +1,20 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "addPathSuffix", { + enumerable: true, + get: function() { + return addPathSuffix; + } +}); +const _parsepath = require("./parse-path"); +function addPathSuffix(path, suffix) { + if (!path.startsWith('/') || !suffix) { + return path; + } + const { pathname, query, hash } = (0, _parsepath.parsePath)(path); + return `${pathname}${suffix}${query}${hash}`; +} + +//# sourceMappingURL=add-path-suffix.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/app-paths.js b/build/node_modules/next/dist/shared/lib/router/utils/app-paths.js new file mode 100644 index 0000000..4e7b1f0 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/app-paths.js @@ -0,0 +1,62 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + compareAppPaths: null, + normalizeAppPath: null, + normalizeRscURL: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + compareAppPaths: function() { + return compareAppPaths; + }, + normalizeAppPath: function() { + return normalizeAppPath; + }, + normalizeRscURL: function() { + return normalizeRscURL; + } +}); +const _ensureleadingslash = require("../../page-path/ensure-leading-slash"); +const _segment = require("../../segment"); +function normalizeAppPath(route) { + return (0, _ensureleadingslash.ensureLeadingSlash)(route.split('/').reduce((pathname, segment, index, segments)=>{ + // Empty segments are ignored. + if (!segment) { + return pathname; + } + // Groups are ignored. + if ((0, _segment.isGroupSegment)(segment)) { + return pathname; + } + // Parallel segments are ignored. + if (segment[0] === '@') { + return pathname; + } + // The last segment (if it's a leaf) should be ignored. + if ((segment === 'page' || segment === 'route') && index === segments.length - 1) { + return pathname; + } + return `${pathname}/${segment}`; + }, '')); +} +function compareAppPaths(a, b) { + const aHasSlot = a.includes('/@'); + const bHasSlot = b.includes('/@'); + if (aHasSlot && !bHasSlot) return -1; + if (!aHasSlot && bHasSlot) return 1; + return a.localeCompare(b); +} +function normalizeRscURL(url) { + return url.replace(/\.rsc($|\?)/, // $1 ensures `?` is preserved + '$1'); +} + +//# sourceMappingURL=app-paths.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/as-path-to-search-params.js b/build/node_modules/next/dist/shared/lib/router/utils/as-path-to-search-params.js new file mode 100644 index 0000000..80d01c2 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/as-path-to-search-params.js @@ -0,0 +1,17 @@ +// Convert router.asPath to a URLSearchParams object +// example: /dynamic/[slug]?foo=bar -> { foo: 'bar' } +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "asPathToSearchParams", { + enumerable: true, + get: function() { + return asPathToSearchParams; + } +}); +function asPathToSearchParams(asPath) { + return new URL(asPath, 'http://n').searchParams; +} + +//# sourceMappingURL=as-path-to-search-params.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/cache-busting-search-param.js b/build/node_modules/next/dist/shared/lib/router/utils/cache-busting-search-param.js new file mode 100644 index 0000000..56f48aa --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/cache-busting-search-param.js @@ -0,0 +1,70 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + computeCacheBustingSearchParam: null, + computeLegacyCacheBustingSearchParam: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + computeCacheBustingSearchParam: function() { + return computeCacheBustingSearchParam; + }, + computeLegacyCacheBustingSearchParam: function() { + return computeLegacyCacheBustingSearchParam; + } +}); +const _hash = require("../../hash"); +const CACHE_BUSTING_SEARCH_PARAM_DIGEST_BYTES = 12; +const textEncoder = new TextEncoder(); +function encodeCacheBustingSearchParam(bytes) { + let binary = ''; + for(let i = 0; i < bytes.length; i++){ + binary += String.fromCharCode(bytes[i]); + } + return btoa(binary).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); +} +function normalizeCacheBustingInput(value) { + if (value === undefined) { + return '0'; + } + return Array.isArray(value) ? value.join(',') : value; +} +function createCacheBustingSearchParamInput(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader) { + if ((prefetchHeader === undefined || prefetchHeader === '0') && segmentPrefetchHeader === undefined && stateTreeHeader === undefined && nextUrlHeader === undefined) { + return null; + } + return [ + prefetchHeader ?? '0', + normalizeCacheBustingInput(segmentPrefetchHeader), + normalizeCacheBustingInput(stateTreeHeader), + normalizeCacheBustingInput(nextUrlHeader) + ].join(','); +} +async function computeCacheBustingSearchParamFromInput(input) { + // Truncate SHA-256 to 96 bits to keep `_rsc` compact + const digest = await globalThis.crypto.subtle.digest('SHA-256', textEncoder.encode(input)); + return encodeCacheBustingSearchParam(new Uint8Array(digest).subarray(0, CACHE_BUSTING_SEARCH_PARAM_DIGEST_BYTES)); +} +async function computeCacheBustingSearchParam(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader) { + const input = createCacheBustingSearchParamInput(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader); + if (input === null) { + return ''; + } + return computeCacheBustingSearchParamFromInput(input); +} +function computeLegacyCacheBustingSearchParam(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader) { + const input = createCacheBustingSearchParamInput(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader); + if (input === null) { + return ''; + } + return (0, _hash.hexHash)(input); +} + +//# sourceMappingURL=cache-busting-search-param.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/escape-path-delimiters.js b/build/node_modules/next/dist/shared/lib/router/utils/escape-path-delimiters.js new file mode 100644 index 0000000..a11eb8e --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/escape-path-delimiters.js @@ -0,0 +1,16 @@ +// escape delimiters used by path-to-regexp +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "default", { + enumerable: true, + get: function() { + return escapePathDelimiters; + } +}); +function escapePathDelimiters(segment, escapeEncoded) { + return segment.replace(new RegExp(`([/#?]${escapeEncoded ? '|%(2f|23|3f|5c)' : ''})`, 'gi'), (char)=>encodeURIComponent(char)); +} + +//# sourceMappingURL=escape-path-delimiters.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js b/build/node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js new file mode 100644 index 0000000..b5cd1c9 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js @@ -0,0 +1,27 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "formatNextPathnameInfo", { + enumerable: true, + get: function() { + return formatNextPathnameInfo; + } +}); +const _removetrailingslash = require("./remove-trailing-slash"); +const _addpathprefix = require("./add-path-prefix"); +const _addpathsuffix = require("./add-path-suffix"); +const _addlocale = require("./add-locale"); +function formatNextPathnameInfo(info) { + let pathname = (0, _addlocale.addLocale)(info.pathname, info.locale, info.buildId ? undefined : info.defaultLocale, info.ignorePrefix); + if (info.buildId || !info.trailingSlash) { + pathname = (0, _removetrailingslash.removeTrailingSlash)(pathname); + } + if (info.buildId) { + pathname = (0, _addpathsuffix.addPathSuffix)((0, _addpathprefix.addPathPrefix)(pathname, `/_next/data/${info.buildId}`), info.pathname === '/' ? 'index.json' : '.json'); + } + pathname = (0, _addpathprefix.addPathPrefix)(pathname, info.basePath); + return !info.buildId && info.trailingSlash ? !pathname.endsWith('/') ? (0, _addpathsuffix.addPathSuffix)(pathname, '/') : pathname : (0, _removetrailingslash.removeTrailingSlash)(pathname); +} + +//# sourceMappingURL=format-next-pathname-info.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/format-url.js b/build/node_modules/next/dist/shared/lib/router/utils/format-url.js new file mode 100644 index 0000000..820095f --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/format-url.js @@ -0,0 +1,111 @@ +// Format function modified from nodejs +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + formatUrl: null, + formatWithValidation: null, + urlObjectKeys: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + formatUrl: function() { + return formatUrl; + }, + formatWithValidation: function() { + return formatWithValidation; + }, + urlObjectKeys: function() { + return urlObjectKeys; + } +}); +const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard"); +const _querystring = /*#__PURE__*/ _interop_require_wildcard._(require("./querystring")); +const slashedProtocols = /https?|ftp|gopher|file/; +function formatUrl(urlObj) { + let { auth, hostname } = urlObj; + let protocol = urlObj.protocol || ''; + let pathname = urlObj.pathname || ''; + let hash = urlObj.hash || ''; + let query = urlObj.query || ''; + let host = false; + auth = auth ? encodeURIComponent(auth).replace(/%3A/i, ':') + '@' : ''; + if (urlObj.host) { + host = auth + urlObj.host; + } else if (hostname) { + host = auth + (~hostname.indexOf(':') ? `[${hostname}]` : hostname); + if (urlObj.port) { + host += ':' + urlObj.port; + } + } + if (query && typeof query === 'object') { + query = String(_querystring.urlQueryToSearchParams(query)); + } + let search = urlObj.search || query && `?${query}` || ''; + if (protocol && !protocol.endsWith(':')) protocol += ':'; + if (urlObj.slashes || (!protocol || slashedProtocols.test(protocol)) && host !== false) { + host = '//' + (host || ''); + if (pathname && pathname[0] !== '/') pathname = '/' + pathname; + } else if (!host) { + host = ''; + } + if (hash && hash[0] !== '#') hash = '#' + hash; + if (search && search[0] !== '?') search = '?' + search; + pathname = pathname.replace(/[?#]/g, encodeURIComponent); + search = search.replace('#', '%23'); + return `${protocol}${host}${pathname}${search}${hash}`; +} +const urlObjectKeys = [ + 'auth', + 'hash', + 'host', + 'hostname', + 'href', + 'path', + 'pathname', + 'port', + 'protocol', + 'query', + 'search', + 'slashes' +]; +function formatWithValidation(url) { + if (process.env.NODE_ENV === 'development') { + if (url !== null && typeof url === 'object') { + Object.keys(url).forEach((key)=>{ + if (!urlObjectKeys.includes(key)) { + console.warn(`Unknown key passed via urlObject into url.format: ${key}`); + } + }); + } + } + return formatUrl(url); +} + +//# sourceMappingURL=format-url.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/get-dynamic-param.js b/build/node_modules/next/dist/shared/lib/router/utils/get-dynamic-param.js new file mode 100644 index 0000000..e2847d2 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/get-dynamic-param.js @@ -0,0 +1,174 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + PARAMETER_PATTERN: null, + getDynamicParam: null, + interpolateParallelRouteParams: null, + parseMatchedParameter: null, + parseParameter: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + PARAMETER_PATTERN: function() { + return PARAMETER_PATTERN; + }, + getDynamicParam: function() { + return getDynamicParam; + }, + interpolateParallelRouteParams: function() { + return interpolateParallelRouteParams; + }, + parseMatchedParameter: function() { + return parseMatchedParameter; + }, + parseParameter: function() { + return parseParameter; + } +}); +const _invarianterror = require("../../invariant-error"); +const _parseloadertree = require("./parse-loader-tree"); +const _app = require("../routes/app"); +const _resolveparamvalue = require("./resolve-param-value"); +/** + * Gets the value of a param from the params object. This correctly handles the + * case where the param is a fallback route param and encodes the resulting + * value. + * + * @param interpolatedParams - The params object. + * @param segmentKey - The key of the segment. + * @param fallbackRouteParams - The fallback route params. + * @returns The value of the param. + */ function getParamValue(interpolatedParams, segmentKey, fallbackRouteParams) { + let value = interpolatedParams[segmentKey]; + if (fallbackRouteParams?.has(segmentKey)) { + // We know that the fallback route params has the segment key because we + // checked that above. + const [searchValue] = fallbackRouteParams.get(segmentKey); + value = searchValue; + } else if (Array.isArray(value)) { + value = value.map((i)=>encodeURIComponent(i)); + } else if (typeof value === 'string') { + value = encodeURIComponent(value); + } + return value; +} +function interpolateParallelRouteParams(loaderTree, params, pagePath, fallbackRouteParams) { + const interpolated = structuredClone(params); + // Stack-based traversal with depth tracking + const stack = [ + { + tree: loaderTree, + depth: 0 + } + ]; + // Parse the route from the provided page path. + const route = (0, _app.parseAppRoute)(pagePath, true); + while(stack.length > 0){ + const { tree, depth } = stack.pop(); + const { segment, parallelRoutes } = (0, _parseloadertree.parseLoaderTree)(tree); + const appSegment = (0, _app.parseAppRouteSegment)(segment); + if (appSegment?.type === 'dynamic' && !interpolated.hasOwnProperty(appSegment.param.paramName) && // If the param is in the fallback route params, we don't need to + // interpolate it because it's already marked as being unknown. + !fallbackRouteParams?.has(appSegment.param.paramName)) { + const { paramName, paramType } = appSegment.param; + const paramValue = (0, _resolveparamvalue.resolveParamValue)(paramName, paramType, depth, route, interpolated); + if (paramValue !== undefined) { + interpolated[paramName] = paramValue; + } else if (paramType !== 'optional-catchall') { + throw Object.defineProperty(new _invarianterror.InvariantError(`Could not resolve param value for segment: ${paramName}`), "__NEXT_ERROR_CODE", { + value: "E932", + enumerable: false, + configurable: true + }); + } + } + // Calculate next depth - increment if this is not a route group and not empty + let nextDepth = depth; + if (appSegment && appSegment.type !== 'route-group' && appSegment.type !== 'parallel-route') { + nextDepth++; + } + // Add all parallel routes to the stack for processing + for (const parallelRoute of Object.values(parallelRoutes)){ + stack.push({ + tree: parallelRoute, + depth: nextDepth + }); + } + } + return interpolated; +} +function getDynamicParam(interpolatedParams, segmentKey, dynamicParamType, fallbackRouteParams, staticSiblings) { + let value = getParamValue(interpolatedParams, segmentKey, fallbackRouteParams); + // handle the case where an optional catchall does not have a value, + // e.g. `/dashboard/[[...slug]]` when requesting `/dashboard` + if (!value || value.length === 0) { + if (dynamicParamType === 'oc') { + return { + param: segmentKey, + value: null, + type: dynamicParamType, + treeSegment: [ + segmentKey, + '', + dynamicParamType, + staticSiblings + ] + }; + } + throw Object.defineProperty(new _invarianterror.InvariantError(`Missing value for segment key: "${segmentKey}" with dynamic param type: ${dynamicParamType}`), "__NEXT_ERROR_CODE", { + value: "E864", + enumerable: false, + configurable: true + }); + } + const paramCacheKey = Array.isArray(value) ? value.join('/') : value; + return { + param: segmentKey, + // The value that is passed to user code. + value, + // The value that is rendered in the router tree. + // TODO: If the number of static siblings exceeds some threshold (e.g., + // dozens or hundreds), consider sending a Bloom filter instead of the full + // array to reduce payload size. The client would then use the Bloom filter + // to check membership with a small false positive rate. + treeSegment: [ + segmentKey, + paramCacheKey, + dynamicParamType, + staticSiblings + ], + type: dynamicParamType + }; +} +const PARAMETER_PATTERN = /^([^[]*)\[((?:\[[^\]]*\])|[^\]]+)\](.*)$/; +function parseParameter(param) { + const match = param.match(PARAMETER_PATTERN); + if (!match) { + return parseMatchedParameter(param); + } + return parseMatchedParameter(match[2]); +} +function parseMatchedParameter(param) { + const optional = param.startsWith('[') && param.endsWith(']'); + if (optional) { + param = param.slice(1, -1); + } + const repeat = param.startsWith('...'); + if (repeat) { + param = param.slice(3); + } + return { + key: param, + repeat, + optional + }; +} + +//# sourceMappingURL=get-dynamic-param.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js b/build/node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js new file mode 100644 index 0000000..fb0d7e4 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js @@ -0,0 +1,52 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getNextPathnameInfo", { + enumerable: true, + get: function() { + return getNextPathnameInfo; + } +}); +const _normalizelocalepath = require("../../i18n/normalize-locale-path"); +const _removepathprefix = require("./remove-path-prefix"); +const _pathhasprefix = require("./path-has-prefix"); +function getNextPathnameInfo(pathname, options) { + const { basePath, i18n, trailingSlash } = options.nextConfig ?? {}; + const info = { + pathname, + trailingSlash: pathname !== '/' ? pathname.endsWith('/') : trailingSlash + }; + if (basePath && (0, _pathhasprefix.pathHasPrefix)(info.pathname, basePath)) { + info.pathname = (0, _removepathprefix.removePathPrefix)(info.pathname, basePath); + info.basePath = basePath; + } + let pathnameNoDataPrefix = info.pathname; + if (info.pathname.startsWith('/_next/data/') && info.pathname.endsWith('.json')) { + const paths = info.pathname.replace(/^\/_next\/data\//, '').replace(/\.json$/, '').split('/'); + const buildId = paths[0]; + info.buildId = buildId; + pathnameNoDataPrefix = paths[1] !== 'index' ? `/${paths.slice(1).join('/')}` : '/'; + // update pathname with normalized if enabled although + // we use normalized to populate locale info still + if (options.parseData === true) { + info.pathname = pathnameNoDataPrefix; + } + } + // If provided, use the locale route normalizer to detect the locale instead + // of the function below. + if (i18n) { + let result = options.i18nProvider ? options.i18nProvider.analyze(info.pathname) : (0, _normalizelocalepath.normalizeLocalePath)(info.pathname, i18n.locales); + info.locale = result.detectedLocale; + info.pathname = result.pathname ?? info.pathname; + if (!result.detectedLocale && info.buildId) { + result = options.i18nProvider ? options.i18nProvider.analyze(pathnameNoDataPrefix) : (0, _normalizelocalepath.normalizeLocalePath)(pathnameNoDataPrefix, i18n.locales); + if (result.detectedLocale) { + info.locale = result.detectedLocale; + } + } + } + return info; +} + +//# sourceMappingURL=get-next-pathname-info.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/get-route-from-asset-path.js b/build/node_modules/next/dist/shared/lib/router/utils/get-route-from-asset-path.js new file mode 100644 index 0000000..1563892 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/get-route-from-asset-path.js @@ -0,0 +1,25 @@ +// Translate a pages asset path (relative from a common prefix) back into its logical route +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, // "asset path" being its javascript file, data file, prerendered html,... +"default", { + enumerable: true, + get: function() { + return getRouteFromAssetPath; + } +}); +const _isdynamic = require("./is-dynamic"); +function getRouteFromAssetPath(assetPath, ext = '') { + assetPath = assetPath.replace(/\\/g, '/'); + assetPath = ext && assetPath.endsWith(ext) ? assetPath.slice(0, -ext.length) : assetPath; + if (assetPath.startsWith('/index/') && !(0, _isdynamic.isDynamicRoute)(assetPath)) { + assetPath = assetPath.slice(6); + } else if (assetPath === '/index') { + assetPath = '/'; + } + return assetPath; +} + +//# sourceMappingURL=get-route-from-asset-path.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/get-segment-param.js b/build/node_modules/next/dist/shared/lib/router/utils/get-segment-param.js new file mode 100644 index 0000000..d3ad699 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/get-segment-param.js @@ -0,0 +1,90 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getParamProperties: null, + getSegmentParam: null, + isCatchAll: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getParamProperties: function() { + return getParamProperties; + }, + getSegmentParam: function() { + return getSegmentParam; + }, + isCatchAll: function() { + return isCatchAll; + } +}); +const _interceptionroutes = require("./interception-routes"); +function getSegmentParam(segment) { + const interceptionMarker = _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.find((marker)=>segment.startsWith(marker)); + // if an interception marker is part of the path segment, we need to jump ahead + // to the relevant portion for param parsing + if (interceptionMarker) { + segment = segment.slice(interceptionMarker.length); + } + if (segment.startsWith('[[...') && segment.endsWith(']]')) { + return { + // TODO-APP: Optional catchall does not currently work with parallel routes, + // so for now aren't handling a potential interception marker. + paramType: 'optional-catchall', + paramName: segment.slice(5, -2) + }; + } + if (segment.startsWith('[...') && segment.endsWith(']')) { + return { + paramType: interceptionMarker ? `catchall-intercepted-${interceptionMarker}` : 'catchall', + paramName: segment.slice(4, -1) + }; + } + if (segment.startsWith('[') && segment.endsWith(']')) { + return { + paramType: interceptionMarker ? `dynamic-intercepted-${interceptionMarker}` : 'dynamic', + paramName: segment.slice(1, -1) + }; + } + return null; +} +function isCatchAll(type) { + return type === 'catchall' || type === 'catchall-intercepted-(..)(..)' || type === 'catchall-intercepted-(.)' || type === 'catchall-intercepted-(..)' || type === 'catchall-intercepted-(...)' || type === 'optional-catchall'; +} +function getParamProperties(paramType) { + let repeat = false; + let optional = false; + switch(paramType){ + case 'catchall': + case 'catchall-intercepted-(..)(..)': + case 'catchall-intercepted-(.)': + case 'catchall-intercepted-(..)': + case 'catchall-intercepted-(...)': + repeat = true; + break; + case 'optional-catchall': + repeat = true; + optional = true; + break; + case 'dynamic': + case 'dynamic-intercepted-(..)(..)': + case 'dynamic-intercepted-(.)': + case 'dynamic-intercepted-(..)': + case 'dynamic-intercepted-(...)': + break; + default: + paramType; + } + return { + repeat, + optional + }; +} + +//# sourceMappingURL=get-segment-param.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/html-bots.js b/build/node_modules/next/dist/shared/lib/router/utils/html-bots.js new file mode 100644 index 0000000..54a41f4 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/html-bots.js @@ -0,0 +1,17 @@ +// This regex contains the bots that we need to do a blocking render for and can't safely stream the response +// due to how they parse the DOM. For example, they might explicitly check for metadata in the `head` tag, so we can't stream metadata tags after the `head` was sent. +// Note: The pattern [\w-]+-Google captures all Google crawlers with "-Google" suffix (e.g., Mediapartners-Google, AdsBot-Google, Storebot-Google) +// as well as crawlers starting with "Google-" (e.g., Google-PageRenderer, Google-InspectionTool) +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "HTML_LIMITED_BOT_UA_RE", { + enumerable: true, + get: function() { + return HTML_LIMITED_BOT_UA_RE; + } +}); +const HTML_LIMITED_BOT_UA_RE = /[\w-]+-Google|Google-[\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight/i; + +//# sourceMappingURL=html-bots.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/index.js b/build/node_modules/next/dist/shared/lib/router/utils/index.js new file mode 100644 index 0000000..42ad00c --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/index.js @@ -0,0 +1,30 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getSortedRouteObjects: null, + getSortedRoutes: null, + isDynamicRoute: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getSortedRouteObjects: function() { + return _sortedroutes.getSortedRouteObjects; + }, + getSortedRoutes: function() { + return _sortedroutes.getSortedRoutes; + }, + isDynamicRoute: function() { + return _isdynamic.isDynamicRoute; + } +}); +const _sortedroutes = require("./sorted-routes"); +const _isdynamic = require("./is-dynamic"); + +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/interception-prefix-from-param-type.js b/build/node_modules/next/dist/shared/lib/router/utils/interception-prefix-from-param-type.js new file mode 100644 index 0000000..df11076 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/interception-prefix-from-param-type.js @@ -0,0 +1,33 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "interceptionPrefixFromParamType", { + enumerable: true, + get: function() { + return interceptionPrefixFromParamType; + } +}); +function interceptionPrefixFromParamType(paramType) { + switch(paramType){ + case 'catchall-intercepted-(..)(..)': + case 'dynamic-intercepted-(..)(..)': + return '(..)(..)'; + case 'catchall-intercepted-(.)': + case 'dynamic-intercepted-(.)': + return '(.)'; + case 'catchall-intercepted-(..)': + case 'dynamic-intercepted-(..)': + return '(..)'; + case 'catchall-intercepted-(...)': + case 'dynamic-intercepted-(...)': + return '(...)'; + case 'catchall': + case 'dynamic': + case 'optional-catchall': + default: + return null; + } +} + +//# sourceMappingURL=interception-prefix-from-param-type.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/interception-routes.js b/build/node_modules/next/dist/shared/lib/router/utils/interception-routes.js new file mode 100644 index 0000000..597d80f --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/interception-routes.js @@ -0,0 +1,108 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + INTERCEPTION_ROUTE_MARKERS: null, + extractInterceptionRouteInformation: null, + isInterceptionRouteAppPath: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + INTERCEPTION_ROUTE_MARKERS: function() { + return INTERCEPTION_ROUTE_MARKERS; + }, + extractInterceptionRouteInformation: function() { + return extractInterceptionRouteInformation; + }, + isInterceptionRouteAppPath: function() { + return isInterceptionRouteAppPath; + } +}); +const _apppaths = require("./app-paths"); +const INTERCEPTION_ROUTE_MARKERS = [ + '(..)(..)', + '(.)', + '(..)', + '(...)' +]; +function isInterceptionRouteAppPath(path) { + // TODO-APP: add more serious validation + return path.split('/').find((segment)=>INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m))) !== undefined; +} +function extractInterceptionRouteInformation(path) { + let interceptingRoute; + let marker; + let interceptedRoute; + for (const segment of path.split('/')){ + marker = INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m)); + if (marker) { + ; + [interceptingRoute, interceptedRoute] = path.split(marker, 2); + break; + } + } + if (!interceptingRoute || !marker || !interceptedRoute) { + throw Object.defineProperty(new Error(`Invalid interception route: ${path}. Must be in the format /<intercepting route>/(..|...|..)(..)/<intercepted route>`), "__NEXT_ERROR_CODE", { + value: "E269", + enumerable: false, + configurable: true + }); + } + interceptingRoute = (0, _apppaths.normalizeAppPath)(interceptingRoute) // normalize the path, e.g. /(blog)/feed -> /feed + ; + switch(marker){ + case '(.)': + // (.) indicates that we should match with sibling routes, so we just need to append the intercepted route to the intercepting route + if (interceptingRoute === '/') { + interceptedRoute = `/${interceptedRoute}`; + } else { + interceptedRoute = interceptingRoute + '/' + interceptedRoute; + } + break; + case '(..)': + // (..) indicates that we should match at one level up, so we need to remove the last segment of the intercepting route + if (interceptingRoute === '/') { + throw Object.defineProperty(new Error(`Invalid interception route: ${path}. Cannot use (..) marker at the root level, use (.) instead.`), "__NEXT_ERROR_CODE", { + value: "E207", + enumerable: false, + configurable: true + }); + } + interceptedRoute = interceptingRoute.split('/').slice(0, -1).concat(interceptedRoute).join('/'); + break; + case '(...)': + // (...) will match the route segment in the root directory, so we need to use the root directory to prepend the intercepted route + interceptedRoute = '/' + interceptedRoute; + break; + case '(..)(..)': + // (..)(..) indicates that we should match at two levels up, so we need to remove the last two segments of the intercepting route + const splitInterceptingRoute = interceptingRoute.split('/'); + if (splitInterceptingRoute.length <= 2) { + throw Object.defineProperty(new Error(`Invalid interception route: ${path}. Cannot use (..)(..) marker at the root level or one level up.`), "__NEXT_ERROR_CODE", { + value: "E486", + enumerable: false, + configurable: true + }); + } + interceptedRoute = splitInterceptingRoute.slice(0, -2).concat(interceptedRoute).join('/'); + break; + default: + throw Object.defineProperty(new Error('Invariant: unexpected marker'), "__NEXT_ERROR_CODE", { + value: "E112", + enumerable: false, + configurable: true + }); + } + return { + interceptingRoute, + interceptedRoute + }; +} + +//# sourceMappingURL=interception-routes.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/is-bot.js b/build/node_modules/next/dist/shared/lib/router/utils/is-bot.js new file mode 100644 index 0000000..309bb78 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/is-bot.js @@ -0,0 +1,57 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + HTML_LIMITED_BOT_UA_RE: null, + HTML_LIMITED_BOT_UA_RE_STRING: null, + getBotType: null, + isBot: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + HTML_LIMITED_BOT_UA_RE: function() { + return _htmlbots.HTML_LIMITED_BOT_UA_RE; + }, + HTML_LIMITED_BOT_UA_RE_STRING: function() { + return HTML_LIMITED_BOT_UA_RE_STRING; + }, + getBotType: function() { + return getBotType; + }, + isBot: function() { + return isBot; + } +}); +const _htmlbots = require("./html-bots"); +// Bot crawler that will spin up a headless browser and execute JS. +// Only the main Googlebot search crawler executes JavaScript, not other Google crawlers. +// x-ref: https://developers.google.com/search/docs/crawling-indexing/google-common-crawlers +// This regex specifically matches "Googlebot" but NOT "Mediapartners-Google", "AdsBot-Google", etc. +const HEADLESS_BROWSER_BOT_UA_RE = /Googlebot(?!-)|Googlebot$/i; +const HTML_LIMITED_BOT_UA_RE_STRING = _htmlbots.HTML_LIMITED_BOT_UA_RE.source; +function isDomBotUA(userAgent) { + return HEADLESS_BROWSER_BOT_UA_RE.test(userAgent); +} +function isHtmlLimitedBotUA(userAgent) { + return _htmlbots.HTML_LIMITED_BOT_UA_RE.test(userAgent); +} +function isBot(userAgent) { + return isDomBotUA(userAgent) || isHtmlLimitedBotUA(userAgent); +} +function getBotType(userAgent) { + if (isDomBotUA(userAgent)) { + return 'dom'; + } + if (isHtmlLimitedBotUA(userAgent)) { + return 'html'; + } + return undefined; +} + +//# sourceMappingURL=is-bot.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/is-dynamic.js b/build/node_modules/next/dist/shared/lib/router/utils/is-dynamic.js new file mode 100644 index 0000000..77effe8 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/is-dynamic.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "isDynamicRoute", { + enumerable: true, + get: function() { + return isDynamicRoute; + } +}); +const _interceptionroutes = require("./interception-routes"); +// Identify /.*[param].*/ in route string +const TEST_ROUTE = /\/[^/]*\[[^/]+\][^/]*(?=\/|$)/; +// Identify /[param]/ in route string +const TEST_STRICT_ROUTE = /\/\[[^/]+\](?=\/|$)/; +function isDynamicRoute(route, strict = true) { + if ((0, _interceptionroutes.isInterceptionRouteAppPath)(route)) { + route = (0, _interceptionroutes.extractInterceptionRouteInformation)(route).interceptedRoute; + } + if (strict) { + return TEST_STRICT_ROUTE.test(route); + } + return TEST_ROUTE.test(route); +} + +//# sourceMappingURL=is-dynamic.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.js b/build/node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.js new file mode 100644 index 0000000..285f4d2 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.js @@ -0,0 +1,31 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getMiddlewareRouteMatcher", { + enumerable: true, + get: function() { + return getMiddlewareRouteMatcher; + } +}); +const _preparedestination = require("./prepare-destination"); +function getMiddlewareRouteMatcher(matchers) { + return (pathname, req, query)=>{ + for (const matcher of matchers){ + const routeMatch = new RegExp(matcher.regexp).exec(pathname); + if (!routeMatch) { + continue; + } + if (matcher.has || matcher.missing) { + const hasParams = (0, _preparedestination.matchHas)(req, query, matcher.has, matcher.missing); + if (!hasParams) { + continue; + } + } + return true; + } + return false; + }; +} + +//# sourceMappingURL=middleware-route-matcher.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/parse-loader-tree.js b/build/node_modules/next/dist/shared/lib/router/utils/parse-loader-tree.js new file mode 100644 index 0000000..5930502 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/parse-loader-tree.js @@ -0,0 +1,30 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "parseLoaderTree", { + enumerable: true, + get: function() { + return parseLoaderTree; + } +}); +const _segment = require("../../segment"); +function parseLoaderTree(tree) { + const [segment, parallelRoutes, modules, staticSiblings] = tree; + const { layout, template } = modules; + let { page } = modules; + // a __DEFAULT__ segment means that this route didn't match any of the + // segments in the route, so we should use the default page + page = segment === _segment.DEFAULT_SEGMENT_KEY ? modules.defaultPage : page; + const conventionPath = layout?.[1] || template?.[1] || page?.[1]; + return { + page, + segment, + modules, + /* it can be either layout / template / page */ conventionPath, + parallelRoutes, + staticSiblings + }; +} + +//# sourceMappingURL=parse-loader-tree.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/parse-path.js b/build/node_modules/next/dist/shared/lib/router/utils/parse-path.js new file mode 100644 index 0000000..f8230d4 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/parse-path.js @@ -0,0 +1,33 @@ +/** + * Given a path this function will find the pathname, query and hash and return + * them. This is useful to parse full paths on the client side. + * @param path A path to parse e.g. /foo/bar?id=1#hash + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "parsePath", { + enumerable: true, + get: function() { + return parsePath; + } +}); +function parsePath(path) { + const hashIndex = path.indexOf('#'); + const queryIndex = path.indexOf('?'); + const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex); + if (hasQuery || hashIndex > -1) { + return { + pathname: path.substring(0, hasQuery ? queryIndex : hashIndex), + query: hasQuery ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined) : '', + hash: hashIndex > -1 ? path.slice(hashIndex) : '' + }; + } + return { + pathname: path, + query: '', + hash: '' + }; +} + +//# sourceMappingURL=parse-path.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js b/build/node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js new file mode 100644 index 0000000..01cbfdf --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js @@ -0,0 +1,43 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "parseRelativeUrl", { + enumerable: true, + get: function() { + return parseRelativeUrl; + } +}); +const _utils = require("../../utils"); +const _querystring = require("./querystring"); +function parseRelativeUrl(url, base, parseQuery = true) { + const globalBase = new URL(typeof window === 'undefined' ? 'http://n' : (0, _utils.getLocationOrigin)()); + const resolvedBase = base ? new URL(base, globalBase) : url.startsWith('.') ? new URL(typeof window === 'undefined' ? 'http://n' : window.location.href) : globalBase; + const { pathname, searchParams, search, hash, href, origin } = url.startsWith('/') ? // See https://nodejs.org/api/http.html#messageurl + // Not using `origin` to support other protocols + new URL(`${resolvedBase.protocol}//${resolvedBase.host}${url}`) : new URL(url, resolvedBase); + if (origin !== globalBase.origin) { + throw Object.defineProperty(new Error(`invariant: invalid relative URL, router received ${url}`), "__NEXT_ERROR_CODE", { + value: "E159", + enumerable: false, + configurable: true + }); + } + return { + auth: null, + host: null, + hostname: null, + pathname, + port: null, + protocol: null, + query: parseQuery ? (0, _querystring.searchParamsToUrlQuery)(searchParams) : undefined, + search, + hash, + href: href.slice(origin.length), + // We don't know for relative URLs at this point since we set a custom, internal + // base that isn't surfaced to users. + slashes: null + }; +} + +//# sourceMappingURL=parse-relative-url.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/parse-url.js b/build/node_modules/next/dist/shared/lib/router/utils/parse-url.js new file mode 100644 index 0000000..47c9516 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/parse-url.js @@ -0,0 +1,38 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "parseUrl", { + enumerable: true, + get: function() { + return parseUrl; + } +}); +const _querystring = require("./querystring"); +const _parserelativeurl = require("./parse-relative-url"); +function parseUrl(url) { + if (url.startsWith('/')) { + return (0, _parserelativeurl.parseRelativeUrl)(url); + } + const parsedURL = new URL(url); + const username = parsedURL.username; + const password = parsedURL.password; + const auth = username ? password ? `${username}:${password}` : username : null; + const pathname = parsedURL.pathname; + const search = parsedURL.search; + return { + auth, + hash: parsedURL.hash, + hostname: parsedURL.hostname, + href: parsedURL.href, + pathname, + port: parsedURL.port, + protocol: parsedURL.protocol, + query: (0, _querystring.searchParamsToUrlQuery)(parsedURL.searchParams), + search, + origin: parsedURL.origin, + slashes: parsedURL.href.slice(parsedURL.protocol.length, parsedURL.protocol.length + 2) === '//' + }; +} + +//# sourceMappingURL=parse-url.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js b/build/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js new file mode 100644 index 0000000..48faa49 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js @@ -0,0 +1,20 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "pathHasPrefix", { + enumerable: true, + get: function() { + return pathHasPrefix; + } +}); +const _parsepath = require("./parse-path"); +function pathHasPrefix(path, prefix) { + if (typeof path !== 'string') { + return false; + } + const { pathname } = (0, _parsepath.parsePath)(path); + return pathname === prefix || pathname.startsWith(prefix + '/'); +} + +//# sourceMappingURL=path-has-prefix.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/path-match.js b/build/node_modules/next/dist/shared/lib/router/utils/path-match.js new file mode 100644 index 0000000..52db44b --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/path-match.js @@ -0,0 +1,49 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getPathMatch", { + enumerable: true, + get: function() { + return getPathMatch; + } +}); +const _pathtoregexp = require("next/dist/compiled/path-to-regexp"); +function getPathMatch(path, options) { + const keys = []; + const regexp = (0, _pathtoregexp.pathToRegexp)(path, keys, { + delimiter: '/', + sensitive: typeof options?.sensitive === 'boolean' ? options.sensitive : false, + strict: options?.strict + }); + const matcher = (0, _pathtoregexp.regexpToFunction)(options?.regexModifier ? new RegExp(options.regexModifier(regexp.source), regexp.flags) : regexp, keys); + /** + * A matcher function that will check if a given pathname matches the path + * given in the builder function. When the path does not match it will return + * `false` but if it does it will return an object with the matched params + * merged with the params provided in the second argument. + */ return (pathname, params)=>{ + // If no pathname is provided it's not a match. + if (typeof pathname !== 'string') return false; + const match = matcher(pathname); + // If the path did not match `false` will be returned. + if (!match) return false; + /** + * If unnamed params are not allowed they must be removed from + * the matched parameters. path-to-regexp uses "string" for named and + * "number" for unnamed parameters. + */ if (options?.removeUnnamedParams) { + for (const key of keys){ + if (typeof key.name === 'number') { + delete match.params[key.name]; + } + } + } + return { + ...params, + ...match.params + }; + }; +} + +//# sourceMappingURL=path-match.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/prepare-destination.js b/build/node_modules/next/dist/shared/lib/router/utils/prepare-destination.js new file mode 100644 index 0000000..670b9b1 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/prepare-destination.js @@ -0,0 +1,292 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + compileNonPath: null, + matchHas: null, + parseDestination: null, + prepareDestination: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + compileNonPath: function() { + return compileNonPath; + }, + matchHas: function() { + return matchHas; + }, + parseDestination: function() { + return parseDestination; + }, + prepareDestination: function() { + return prepareDestination; + } +}); +const _escaperegexp = require("../../escape-regexp"); +const _parseurl = require("./parse-url"); +const _interceptionroutes = require("./interception-routes"); +const _getcookieparser = require("../../../../server/api-utils/get-cookie-parser"); +const _routematchutils = require("./route-match-utils"); +/** + * Ensure only a-zA-Z are used for param names for proper interpolating + * with path-to-regexp + */ function getSafeParamName(paramName) { + let newParamName = ''; + for(let i = 0; i < paramName.length; i++){ + const charCode = paramName.charCodeAt(i); + if (charCode > 64 && charCode < 91 || // A-Z + charCode > 96 && charCode < 123 // a-z + ) { + newParamName += paramName[i]; + } + } + return newParamName; +} +function escapeSegment(str, segmentName) { + return str.replace(new RegExp(`:${(0, _escaperegexp.escapeStringRegexp)(segmentName)}`, 'g'), `__ESC_COLON_${segmentName}`); +} +function unescapeSegments(str) { + return str.replace(/__ESC_COLON_/gi, ':'); +} +function matchHas(req, query, has = [], missing = []) { + const params = {}; + const hasMatch = (hasItem)=>{ + let value; + let key = hasItem.key; + switch(hasItem.type){ + case 'header': + { + key = key.toLowerCase(); + value = req.headers[key]; + break; + } + case 'cookie': + { + if ('cookies' in req) { + value = req.cookies[hasItem.key]; + } else { + const cookies = (0, _getcookieparser.getCookieParser)(req.headers)(); + value = cookies[hasItem.key]; + } + break; + } + case 'query': + { + value = query[key]; + break; + } + case 'host': + { + const { host } = req?.headers || {}; + // remove port from host if present + const hostname = host?.split(':', 1)[0].toLowerCase(); + value = hostname; + break; + } + default: + { + break; + } + } + if (!hasItem.value && value) { + params[getSafeParamName(key)] = value; + return true; + } else if (value) { + const matcher = new RegExp(`^${hasItem.value}$`); + const matches = Array.isArray(value) ? value.slice(-1)[0].match(matcher) : value.match(matcher); + if (matches) { + if (Array.isArray(matches)) { + if (matches.groups) { + Object.keys(matches.groups).forEach((groupKey)=>{ + params[groupKey] = matches.groups[groupKey]; + }); + } else if (hasItem.type === 'host' && matches[0]) { + params.host = matches[0]; + } + } + return true; + } + } + return false; + }; + const allMatch = has.every((item)=>hasMatch(item)) && !missing.some((item)=>hasMatch(item)); + if (allMatch) { + return params; + } + return false; +} +function compileNonPath(value, params) { + if (!value.includes(':')) { + return value; + } + for (const key of Object.keys(params)){ + if (value.includes(`:${key}`)) { + value = value.replace(new RegExp(`:${key}\\*`, 'g'), `:${key}--ESCAPED_PARAM_ASTERISKS`).replace(new RegExp(`:${key}\\?`, 'g'), `:${key}--ESCAPED_PARAM_QUESTION`).replace(new RegExp(`:${key}\\+`, 'g'), `:${key}--ESCAPED_PARAM_PLUS`).replace(new RegExp(`:${key}(?!\\w)`, 'g'), `--ESCAPED_PARAM_COLON${key}`); + } + } + value = value.replace(/(:|\*|\?|\+|\(|\)|\{|\})/g, '\\$1').replace(/--ESCAPED_PARAM_PLUS/g, '+').replace(/--ESCAPED_PARAM_COLON/g, ':').replace(/--ESCAPED_PARAM_QUESTION/g, '?').replace(/--ESCAPED_PARAM_ASTERISKS/g, '*'); + // the value needs to start with a forward-slash to be compiled + // correctly + return (0, _routematchutils.safeCompile)(`/${value}`, { + validate: false + })(params).slice(1); +} +function parseDestination(args) { + let escaped = args.destination; + for (const param of Object.keys({ + ...args.params, + ...args.query + })){ + if (!param) continue; + escaped = escapeSegment(escaped, param); + } + const parsed = (0, _parseurl.parseUrl)(escaped); + let pathname = parsed.pathname; + if (pathname) { + pathname = unescapeSegments(pathname); + } + let href = parsed.href; + if (href) { + href = unescapeSegments(href); + } + let hostname = parsed.hostname; + if (hostname) { + hostname = unescapeSegments(hostname); + } + let hash = parsed.hash; + if (hash) { + hash = unescapeSegments(hash); + } + let search = parsed.search; + if (search) { + search = unescapeSegments(search); + } + let origin = parsed.origin; + if (origin) { + origin = unescapeSegments(origin); + } + return { + ...parsed, + pathname, + hostname, + href, + hash, + search, + origin + }; +} +function prepareDestination(args) { + const parsedDestination = parseDestination(args); + const { hostname: destHostname, query: destQuery, search: destSearch } = parsedDestination; + // The following code assumes that the pathname here includes the hash if it's + // present. + let destPath = parsedDestination.pathname; + if (parsedDestination.hash) { + destPath = `${destPath}${parsedDestination.hash}`; + } + const destParams = []; + const destPathParamKeys = []; + (0, _routematchutils.safePathToRegexp)(destPath, destPathParamKeys); + for (const key of destPathParamKeys){ + destParams.push(key.name); + } + if (destHostname) { + const destHostnameParamKeys = []; + (0, _routematchutils.safePathToRegexp)(destHostname, destHostnameParamKeys); + for (const key of destHostnameParamKeys){ + destParams.push(key.name); + } + } + const destPathCompiler = (0, _routematchutils.safeCompile)(destPath, // we don't validate while compiling the destination since we should + // have already validated before we got to this point and validating + // breaks compiling destinations with named pattern params from the source + // e.g. /something:hello(.*) -> /another/:hello is broken with validation + // since compile validation is meant for reversing and not for inserting + // params from a separate path-regex into another + { + validate: false + }); + let destHostnameCompiler; + if (destHostname) { + destHostnameCompiler = (0, _routematchutils.safeCompile)(destHostname, { + validate: false + }); + } + // update any params in query values + for (const [key, strOrArray] of Object.entries(destQuery)){ + // the value needs to start with a forward-slash to be compiled + // correctly + if (Array.isArray(strOrArray)) { + destQuery[key] = strOrArray.map((value)=>compileNonPath(unescapeSegments(value), args.params)); + } else if (typeof strOrArray === 'string') { + destQuery[key] = compileNonPath(unescapeSegments(strOrArray), args.params); + } + } + // add path params to query if it's not a redirect and not + // already defined in destination query or path + let paramKeys = Object.keys(args.params).filter((name)=>name !== 'nextInternalLocale'); + if (args.appendParamsToQuery && !paramKeys.some((key)=>destParams.includes(key))) { + for (const key of paramKeys){ + if (!(key in destQuery)) { + destQuery[key] = args.params[key]; + } + } + } + let newUrl; + // The compiler also that the interception route marker is an unnamed param, hence '0', + // so we need to add it to the params object. + if ((0, _interceptionroutes.isInterceptionRouteAppPath)(destPath)) { + for (const segment of destPath.split('/')){ + const marker = _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m)); + if (marker) { + if (marker === '(..)(..)') { + args.params['0'] = '(..)'; + args.params['1'] = '(..)'; + } else { + args.params['0'] = marker; + } + break; + } + } + } + try { + newUrl = destPathCompiler(args.params); + const [pathname, hash] = newUrl.split('#', 2); + if (destHostnameCompiler) { + parsedDestination.hostname = destHostnameCompiler(args.params); + } + parsedDestination.pathname = pathname; + parsedDestination.hash = `${hash ? '#' : ''}${hash || ''}`; + parsedDestination.search = destSearch ? compileNonPath(destSearch, args.params) : ''; + } catch (err) { + if (err.message.match(/Expected .*? to not repeat, but got an array/)) { + throw Object.defineProperty(new Error(`To use a multi-match in the destination you must add \`*\` at the end of the param name to signify it should repeat. https://nextjs.org/docs/messages/invalid-multi-match`), "__NEXT_ERROR_CODE", { + value: "E329", + enumerable: false, + configurable: true + }); + } + throw err; + } + // Query merge order lowest priority to highest + // 1. initial URL query values + // 2. path segment values + // 3. destination specified query values + parsedDestination.query = { + ...args.query, + ...parsedDestination.query + }; + return { + newUrl, + destQuery, + parsedDestination + }; +} + +//# sourceMappingURL=prepare-destination.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/querystring.js b/build/node_modules/next/dist/shared/lib/router/utils/querystring.js new file mode 100644 index 0000000..2f5bf51 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/querystring.js @@ -0,0 +1,79 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + assign: null, + searchParamsToUrlQuery: null, + urlQueryToSearchParams: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + assign: function() { + return assign; + }, + searchParamsToUrlQuery: function() { + return searchParamsToUrlQuery; + }, + urlQueryToSearchParams: function() { + return urlQueryToSearchParams; + } +}); +function searchParamsToUrlQuery(searchParams) { + const query = {}; + for (const [key, value] of searchParams.entries()){ + const existing = query[key]; + if (typeof existing === 'undefined') { + query[key] = value; + } else if (Array.isArray(existing)) { + existing.push(value); + } else { + query[key] = [ + existing, + value + ]; + } + } + return query; +} +function stringifyUrlQueryParam(param) { + if (typeof param === 'string') { + return param; + } + if (typeof param === 'number' && !isNaN(param) || typeof param === 'boolean') { + return String(param); + } else { + return ''; + } +} +function urlQueryToSearchParams(query) { + const searchParams = new URLSearchParams(); + for (const [key, value] of Object.entries(query)){ + if (Array.isArray(value)) { + for (const item of value){ + searchParams.append(key, stringifyUrlQueryParam(item)); + } + } else { + searchParams.set(key, stringifyUrlQueryParam(value)); + } + } + return searchParams; +} +function assign(target, ...searchParamsList) { + for (const searchParams of searchParamsList){ + for (const key of searchParams.keys()){ + target.delete(key); + } + for (const [key, value] of searchParams.entries()){ + target.append(key, value); + } + } + return target; +} + +//# sourceMappingURL=querystring.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/relativize-url.js b/build/node_modules/next/dist/shared/lib/router/utils/relativize-url.js new file mode 100644 index 0000000..8c9be37 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/relativize-url.js @@ -0,0 +1,40 @@ +/** + * The result of parsing a URL relative to a base URL. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getRelativeURL: null, + parseRelativeURL: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getRelativeURL: function() { + return getRelativeURL; + }, + parseRelativeURL: function() { + return parseRelativeURL; + } +}); +function parseRelativeURL(url, base) { + const baseURL = typeof base === 'string' ? new URL(base) : base; + const relative = new URL(url, base); + // The URL is relative if the origin is the same as the base URL. + const isRelative = relative.origin === baseURL.origin; + return { + url: isRelative ? relative.toString().slice(baseURL.origin.length) : relative.toString(), + isRelative + }; +} +function getRelativeURL(url, base) { + const relative = parseRelativeURL(url, base); + return relative.url; +} + +//# sourceMappingURL=relativize-url.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js b/build/node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js new file mode 100644 index 0000000..4ee056f --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js @@ -0,0 +1,39 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "removePathPrefix", { + enumerable: true, + get: function() { + return removePathPrefix; + } +}); +const _pathhasprefix = require("./path-has-prefix"); +function removePathPrefix(path, prefix) { + // If the path doesn't start with the prefix we can return it as is. This + // protects us from situations where the prefix is a substring of the path + // prefix such as: + // + // For prefix: /blog + // + // /blog -> true + // /blog/ -> true + // /blog/1 -> true + // /blogging -> false + // /blogging/ -> false + // /blogging/1 -> false + if (!(0, _pathhasprefix.pathHasPrefix)(path, prefix)) { + return path; + } + // Remove the prefix from the path via slicing. + const withoutPrefix = path.slice(prefix.length); + // If the path without the prefix starts with a `/` we can return it as is. + if (withoutPrefix.startsWith('/')) { + return withoutPrefix; + } + // If the path without the prefix doesn't start with a `/` we need to add it + // back to the path to make sure it's a valid path. + return `/${withoutPrefix}`; +} + +//# sourceMappingURL=remove-path-prefix.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js b/build/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js new file mode 100644 index 0000000..16081ec --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js @@ -0,0 +1,21 @@ +/** + * Removes the trailing slash for a given route or page path. Preserves the + * root page. Examples: + * - `/foo/bar/` -> `/foo/bar` + * - `/foo/bar` -> `/foo/bar` + * - `/` -> `/` + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "removeTrailingSlash", { + enumerable: true, + get: function() { + return removeTrailingSlash; + } +}); +function removeTrailingSlash(route) { + return route.replace(/\/$/, '') || '/'; +} + +//# sourceMappingURL=remove-trailing-slash.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/resolve-param-value.js b/build/node_modules/next/dist/shared/lib/router/utils/resolve-param-value.js new file mode 100644 index 0000000..6c634f3 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/resolve-param-value.js @@ -0,0 +1,116 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "resolveParamValue", { + enumerable: true, + get: function() { + return resolveParamValue; + } +}); +const _invarianterror = require("../../invariant-error"); +const _interceptionprefixfromparamtype = require("./interception-prefix-from-param-type"); +/** + * Extracts the param value from a path segment, handling interception markers + * based on the expected param type. + * + * @param pathSegment - The path segment to extract the value from + * @param params - The current params object for resolving dynamic param references + * @param paramType - The expected param type which may include interception marker info + * @returns The extracted param value + */ function getParamValueFromSegment(pathSegment, params, paramType) { + // If the segment is dynamic, resolve it from the params object + if (pathSegment.type === 'dynamic') { + return params[pathSegment.param.paramName]; + } + // If the paramType indicates this is an intercepted param, strip the marker + // that matches the interception marker in the param type + const interceptionPrefix = (0, _interceptionprefixfromparamtype.interceptionPrefixFromParamType)(paramType); + if (interceptionPrefix === pathSegment.interceptionMarker) { + return pathSegment.name.replace(pathSegment.interceptionMarker, ''); + } + // For static segments, use the name + return pathSegment.name; +} +function resolveParamValue(paramName, paramType, depth, route, params) { + switch(paramType){ + case 'catchall': + case 'optional-catchall': + case 'catchall-intercepted-(..)(..)': + case 'catchall-intercepted-(.)': + case 'catchall-intercepted-(..)': + case 'catchall-intercepted-(...)': + // For catchall routes, derive from pathname using depth to determine + // which segments to use + const processedSegments = []; + // Process segments to handle any embedded dynamic params + for(let index = depth; index < route.segments.length; index++){ + const pathSegment = route.segments[index]; + if (pathSegment.type === 'static') { + let value = pathSegment.name; + // For intercepted catch-all params, strip the marker from the first segment + const interceptionPrefix = (0, _interceptionprefixfromparamtype.interceptionPrefixFromParamType)(paramType); + if (interceptionPrefix && index === depth && interceptionPrefix === pathSegment.interceptionMarker) { + // Strip the interception marker from the value + value = value.replace(pathSegment.interceptionMarker, ''); + } + processedSegments.push(value); + } else { + // If the segment is a param placeholder, check if we have its value + if (!params.hasOwnProperty(pathSegment.param.paramName)) { + // If the segment is an optional catchall, we can break out of the + // loop because it's optional! + if (pathSegment.param.paramType === 'optional-catchall') { + break; + } + // Unknown param placeholder in pathname - can't derive full value + return undefined; + } + // If the segment matches a param, use the param value + // We don't encode values here as that's handled during retrieval. + const paramValue = params[pathSegment.param.paramName]; + if (Array.isArray(paramValue)) { + processedSegments.push(...paramValue); + } else { + processedSegments.push(paramValue); + } + } + } + if (processedSegments.length > 0) { + return processedSegments; + } else if (paramType === 'optional-catchall') { + return undefined; + } else { + // We shouldn't be able to match a catchall segment without any path + // segments if it's not an optional catchall + throw Object.defineProperty(new _invarianterror.InvariantError(`Unexpected empty path segments match for a route "${route.pathname}" with param "${paramName}" of type "${paramType}"`), "__NEXT_ERROR_CODE", { + value: "E931", + enumerable: false, + configurable: true + }); + } + case 'dynamic': + case 'dynamic-intercepted-(..)(..)': + case 'dynamic-intercepted-(.)': + case 'dynamic-intercepted-(..)': + case 'dynamic-intercepted-(...)': + // For regular dynamic parameters, take the segment at this depth + if (depth < route.segments.length) { + const pathSegment = route.segments[depth]; + // Check if the segment at this depth is a placeholder for an unknown param + if (pathSegment.type === 'dynamic' && !params.hasOwnProperty(pathSegment.param.paramName)) { + // The segment is a placeholder like [category] and we don't have the value + return undefined; + } + // If the segment matches a param, use the param value from params object + // Otherwise it's a static segment, just use it directly + // We don't encode values here as that's handled during retrieval + return getParamValueFromSegment(pathSegment, params, paramType); + } + return undefined; + default: + paramType; + } +} + +//# sourceMappingURL=resolve-param-value.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/route-match-utils.js b/build/node_modules/next/dist/shared/lib/router/utils/route-match-utils.js new file mode 100644 index 0000000..b04f744 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/route-match-utils.js @@ -0,0 +1,113 @@ +/** + * Client-safe utilities for route matching that don't import server-side + * utilities to avoid bundling issues with Turbopack + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + safeCompile: null, + safePathToRegexp: null, + safeRegexpToFunction: null, + safeRouteMatcher: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + safeCompile: function() { + return safeCompile; + }, + safePathToRegexp: function() { + return safePathToRegexp; + }, + safeRegexpToFunction: function() { + return safeRegexpToFunction; + }, + safeRouteMatcher: function() { + return safeRouteMatcher; + } +}); +const _pathtoregexp = require("next/dist/compiled/path-to-regexp"); +const _routepatternnormalizer = require("../../../../lib/route-pattern-normalizer"); +function safePathToRegexp(route, keys, options) { + if (typeof route !== 'string') { + return (0, _pathtoregexp.pathToRegexp)(route, keys, options); + } + // Check if normalization is needed and cache the result + const needsNormalization = (0, _routepatternnormalizer.hasAdjacentParameterIssues)(route); + const routeToUse = needsNormalization ? (0, _routepatternnormalizer.normalizeAdjacentParameters)(route) : route; + try { + return (0, _pathtoregexp.pathToRegexp)(routeToUse, keys, options); + } catch (error) { + // Only try normalization if we haven't already normalized + if (!needsNormalization) { + try { + const normalizedRoute = (0, _routepatternnormalizer.normalizeAdjacentParameters)(route); + return (0, _pathtoregexp.pathToRegexp)(normalizedRoute, keys, options); + } catch (retryError) { + // If that doesn't work, fall back to original error + throw error; + } + } + throw error; + } +} +function safeCompile(route, options) { + // Check if normalization is needed and cache the result + const needsNormalization = (0, _routepatternnormalizer.hasAdjacentParameterIssues)(route); + const routeToUse = needsNormalization ? (0, _routepatternnormalizer.normalizeAdjacentParameters)(route) : route; + try { + const compiler = (0, _pathtoregexp.compile)(routeToUse, options); + // If we normalized the route, wrap the compiler to strip separators from output + // The normalization inserts _NEXTSEP_ as a literal string in the pattern to satisfy + // path-to-regexp validation, but we don't want it in the final compiled URL + if (needsNormalization) { + return (params)=>{ + return (0, _routepatternnormalizer.stripNormalizedSeparators)(compiler(params)); + }; + } + return compiler; + } catch (error) { + // Only try normalization if we haven't already normalized + if (!needsNormalization) { + try { + const normalizedRoute = (0, _routepatternnormalizer.normalizeAdjacentParameters)(route); + const compiler = (0, _pathtoregexp.compile)(normalizedRoute, options); + // Wrap the compiler to strip separators from output + return (params)=>{ + return (0, _routepatternnormalizer.stripNormalizedSeparators)(compiler(params)); + }; + } catch (retryError) { + // If that doesn't work, fall back to original error + throw error; + } + } + throw error; + } +} +function safeRegexpToFunction(regexp, keys) { + const originalMatcher = (0, _pathtoregexp.regexpToFunction)(regexp, keys || []); + return (pathname)=>{ + const result = originalMatcher(pathname); + if (!result) return false; + // Clean parameters before returning + return { + ...result, + params: (0, _routepatternnormalizer.stripParameterSeparators)(result.params) + }; + }; +} +function safeRouteMatcher(matcherFn) { + return (pathname)=>{ + const result = matcherFn(pathname); + if (!result) return false; + // Clean parameters before returning + return (0, _routepatternnormalizer.stripParameterSeparators)(result); + }; +} + +//# sourceMappingURL=route-match-utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/route-matcher.js b/build/node_modules/next/dist/shared/lib/router/utils/route-matcher.js new file mode 100644 index 0000000..8263fb4 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/route-matcher.js @@ -0,0 +1,45 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getRouteMatcher", { + enumerable: true, + get: function() { + return getRouteMatcher; + } +}); +const _utils = require("../../utils"); +const _routematchutils = require("./route-match-utils"); +function getRouteMatcher({ re, groups }) { + const rawMatcher = (pathname)=>{ + const routeMatch = re.exec(pathname); + if (!routeMatch) return false; + const decode = (param)=>{ + try { + return decodeURIComponent(param); + } catch { + throw Object.defineProperty(new _utils.DecodeError('failed to decode param'), "__NEXT_ERROR_CODE", { + value: "E528", + enumerable: false, + configurable: true + }); + } + }; + const params = {}; + for (const [key, group] of Object.entries(groups)){ + const match = routeMatch[group.pos]; + if (match !== undefined) { + if (group.repeat) { + params[key] = match.split('/').map((entry)=>decode(entry)); + } else { + params[key] = decode(match); + } + } + } + return params; + }; + // Wrap with safe matcher to handle parameter cleaning + return (0, _routematchutils.safeRouteMatcher)(rawMatcher); +} + +//# sourceMappingURL=route-matcher.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/route-regex.js b/build/node_modules/next/dist/shared/lib/router/utils/route-regex.js new file mode 100644 index 0000000..174032e --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/route-regex.js @@ -0,0 +1,256 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getNamedMiddlewareRegex: null, + getNamedRouteRegex: null, + getRouteRegex: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getNamedMiddlewareRegex: function() { + return getNamedMiddlewareRegex; + }, + getNamedRouteRegex: function() { + return getNamedRouteRegex; + }, + getRouteRegex: function() { + return getRouteRegex; + } +}); +const _constants = require("../../../../lib/constants"); +const _interceptionroutes = require("./interception-routes"); +const _escaperegexp = require("../../escape-regexp"); +const _removetrailingslash = require("./remove-trailing-slash"); +const _getdynamicparam = require("./get-dynamic-param"); +function getParametrizedRoute(route, includeSuffix, includePrefix) { + const groups = {}; + let groupIndex = 1; + const segments = []; + for (const segment of (0, _removetrailingslash.removeTrailingSlash)(route).slice(1).split('/')){ + const markerMatch = _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m)); + const paramMatches = segment.match(_getdynamicparam.PARAMETER_PATTERN) // Check for parameters + ; + if (markerMatch && paramMatches && paramMatches[2]) { + const { key, optional, repeat } = (0, _getdynamicparam.parseMatchedParameter)(paramMatches[2]); + groups[key] = { + pos: groupIndex++, + repeat, + optional + }; + segments.push(`/${(0, _escaperegexp.escapeStringRegexp)(markerMatch)}([^/]+?)`); + } else if (paramMatches && paramMatches[2]) { + const { key, repeat, optional } = (0, _getdynamicparam.parseMatchedParameter)(paramMatches[2]); + groups[key] = { + pos: groupIndex++, + repeat, + optional + }; + if (includePrefix && paramMatches[1]) { + segments.push(`/${(0, _escaperegexp.escapeStringRegexp)(paramMatches[1])}`); + } + let s = repeat ? optional ? '(?:/(.+?))?' : '/(.+?)' : '/([^/]+?)'; + // Remove the leading slash if includePrefix already added it. + if (includePrefix && paramMatches[1]) { + s = s.substring(1); + } + segments.push(s); + } else { + segments.push(`/${(0, _escaperegexp.escapeStringRegexp)(segment)}`); + } + // If there's a suffix, add it to the segments if it's enabled. + if (includeSuffix && paramMatches && paramMatches[3]) { + segments.push((0, _escaperegexp.escapeStringRegexp)(paramMatches[3])); + } + } + return { + parameterizedRoute: segments.join(''), + groups + }; +} +function getRouteRegex(normalizedRoute, { includeSuffix = false, includePrefix = false, excludeOptionalTrailingSlash = false } = {}) { + const { parameterizedRoute, groups } = getParametrizedRoute(normalizedRoute, includeSuffix, includePrefix); + let re = parameterizedRoute; + if (!excludeOptionalTrailingSlash) { + re += '(?:/)?'; + } + return { + re: new RegExp(`^${re}$`), + groups: groups + }; +} +/** + * Builds a function to generate a minimal routeKey using only a-z and minimal + * number of characters. + */ function buildGetSafeRouteKey() { + let i = 0; + return ()=>{ + let routeKey = ''; + let j = ++i; + while(j > 0){ + routeKey += String.fromCharCode(97 + (j - 1) % 26); + j = Math.floor((j - 1) / 26); + } + return routeKey; + }; +} +function getSafeKeyFromSegment({ interceptionMarker, getSafeRouteKey, segment, routeKeys, keyPrefix, backreferenceDuplicateKeys }) { + const { key, optional, repeat } = (0, _getdynamicparam.parseMatchedParameter)(segment); + // replace any non-word characters since they can break + // the named regex + let cleanedKey = key.replace(/\W/g, ''); + if (keyPrefix) { + cleanedKey = `${keyPrefix}${cleanedKey}`; + } + let invalidKey = false; + // check if the key is still invalid and fallback to using a known + // safe key + if (cleanedKey.length === 0 || cleanedKey.length > 30) { + invalidKey = true; + } + if (!isNaN(parseInt(cleanedKey.slice(0, 1)))) { + invalidKey = true; + } + if (invalidKey) { + cleanedKey = getSafeRouteKey(); + } + const duplicateKey = cleanedKey in routeKeys; + if (keyPrefix) { + routeKeys[cleanedKey] = `${keyPrefix}${key}`; + } else { + routeKeys[cleanedKey] = key; + } + // if the segment has an interception marker, make sure that's part of the regex pattern + // this is to ensure that the route with the interception marker doesn't incorrectly match + // the non-intercepted route (ie /app/(.)[username] should not match /app/[username]) + const interceptionPrefix = interceptionMarker ? (0, _escaperegexp.escapeStringRegexp)(interceptionMarker) : ''; + let pattern; + if (duplicateKey && backreferenceDuplicateKeys) { + // Use a backreference to the key to ensure that the key is the same value + // in each of the placeholders. + pattern = `\\k<${cleanedKey}>`; + } else if (repeat) { + pattern = `(?<${cleanedKey}>.+?)`; + } else { + pattern = `(?<${cleanedKey}>[^/]+?)`; + } + return { + key, + pattern: optional ? `(?:/${interceptionPrefix}${pattern})?` : `/${interceptionPrefix}${pattern}`, + cleanedKey: cleanedKey, + optional, + repeat + }; +} +function getNamedParametrizedRoute(route, prefixRouteKeys, includeSuffix, includePrefix, backreferenceDuplicateKeys, reference = { + names: {}, + intercepted: {} +}) { + const getSafeRouteKey = buildGetSafeRouteKey(); + const routeKeys = {}; + const segments = []; + const inverseParts = []; + // Ensure we don't mutate the original reference object. + reference = structuredClone(reference); + for (const segment of (0, _removetrailingslash.removeTrailingSlash)(route).slice(1).split('/')){ + const hasInterceptionMarker = _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.some((m)=>segment.startsWith(m)); + const paramMatches = segment.match(_getdynamicparam.PARAMETER_PATTERN) // Check for parameters + ; + const interceptionMarker = hasInterceptionMarker ? paramMatches?.[1] : undefined; + let keyPrefix; + if (interceptionMarker && paramMatches?.[2]) { + keyPrefix = prefixRouteKeys ? _constants.NEXT_INTERCEPTION_MARKER_PREFIX : undefined; + reference.intercepted[paramMatches[2]] = interceptionMarker; + } else if (paramMatches?.[2] && reference.intercepted[paramMatches[2]]) { + keyPrefix = prefixRouteKeys ? _constants.NEXT_INTERCEPTION_MARKER_PREFIX : undefined; + } else { + keyPrefix = prefixRouteKeys ? _constants.NEXT_QUERY_PARAM_PREFIX : undefined; + } + if (interceptionMarker && paramMatches && paramMatches[2]) { + // If there's an interception marker, add it to the segments. + const { key, pattern, cleanedKey, repeat, optional } = getSafeKeyFromSegment({ + getSafeRouteKey, + interceptionMarker, + segment: paramMatches[2], + routeKeys, + keyPrefix, + backreferenceDuplicateKeys + }); + segments.push(pattern); + inverseParts.push(`/${paramMatches[1]}:${reference.names[key] ?? cleanedKey}${repeat ? optional ? '*' : '+' : ''}`); + reference.names[key] ??= cleanedKey; + } else if (paramMatches && paramMatches[2]) { + // If there's a prefix, add it to the segments if it's enabled. + if (includePrefix && paramMatches[1]) { + segments.push(`/${(0, _escaperegexp.escapeStringRegexp)(paramMatches[1])}`); + inverseParts.push(`/${paramMatches[1]}`); + } + const { key, pattern, cleanedKey, repeat, optional } = getSafeKeyFromSegment({ + getSafeRouteKey, + segment: paramMatches[2], + routeKeys, + keyPrefix, + backreferenceDuplicateKeys + }); + // Remove the leading slash if includePrefix already added it. + let s = pattern; + if (includePrefix && paramMatches[1]) { + s = s.substring(1); + } + segments.push(s); + inverseParts.push(`/:${reference.names[key] ?? cleanedKey}${repeat ? optional ? '*' : '+' : ''}`); + reference.names[key] ??= cleanedKey; + } else { + segments.push(`/${(0, _escaperegexp.escapeStringRegexp)(segment)}`); + inverseParts.push(`/${segment}`); + } + // If there's a suffix, add it to the segments if it's enabled. + if (includeSuffix && paramMatches && paramMatches[3]) { + segments.push((0, _escaperegexp.escapeStringRegexp)(paramMatches[3])); + inverseParts.push(paramMatches[3]); + } + } + return { + namedParameterizedRoute: segments.join(''), + routeKeys, + pathToRegexpPattern: inverseParts.join(''), + reference + }; +} +function getNamedRouteRegex(normalizedRoute, options) { + const result = getNamedParametrizedRoute(normalizedRoute, options.prefixRouteKeys, options.includeSuffix ?? false, options.includePrefix ?? false, options.backreferenceDuplicateKeys ?? false, options.reference); + let namedRegex = result.namedParameterizedRoute; + if (!options.excludeOptionalTrailingSlash) { + namedRegex += '(?:/)?'; + } + return { + ...getRouteRegex(normalizedRoute, options), + namedRegex: `^${namedRegex}$`, + routeKeys: result.routeKeys, + pathToRegexpPattern: result.pathToRegexpPattern, + reference: result.reference + }; +} +function getNamedMiddlewareRegex(normalizedRoute, options) { + const { parameterizedRoute } = getParametrizedRoute(normalizedRoute, false, false); + const { catchAll = true } = options; + if (parameterizedRoute === '/') { + let catchAllRegex = catchAll ? '.*' : ''; + return { + namedRegex: `^/${catchAllRegex}$` + }; + } + const { namedParameterizedRoute } = getNamedParametrizedRoute(normalizedRoute, false, false, false, false, undefined); + let catchAllGroupedRegex = catchAll ? '(?:(/.*)?)' : ''; + return { + namedRegex: `^${namedParameterizedRoute}${catchAllGroupedRegex}$` + }; +} + +//# sourceMappingURL=route-regex.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/router/utils/sorted-routes.js b/build/node_modules/next/dist/shared/lib/router/utils/sorted-routes.js new file mode 100644 index 0000000..2033612 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/router/utils/sorted-routes.js @@ -0,0 +1,244 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getSortedRouteObjects: null, + getSortedRoutes: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getSortedRouteObjects: function() { + return getSortedRouteObjects; + }, + getSortedRoutes: function() { + return getSortedRoutes; + } +}); +class UrlNode { + insert(urlPath) { + this._insert(urlPath.split('/').filter(Boolean), [], false); + } + smoosh() { + return this._smoosh(); + } + _smoosh(prefix = '/') { + const childrenPaths = [ + ...this.children.keys() + ].sort(); + if (this.slugName !== null) { + childrenPaths.splice(childrenPaths.indexOf('[]'), 1); + } + if (this.restSlugName !== null) { + childrenPaths.splice(childrenPaths.indexOf('[...]'), 1); + } + if (this.optionalRestSlugName !== null) { + childrenPaths.splice(childrenPaths.indexOf('[[...]]'), 1); + } + const routes = childrenPaths.map((c)=>this.children.get(c)._smoosh(`${prefix}${c}/`)).reduce((prev, curr)=>[ + ...prev, + ...curr + ], []); + if (this.slugName !== null) { + routes.push(...this.children.get('[]')._smoosh(`${prefix}[${this.slugName}]/`)); + } + if (!this.placeholder) { + const r = prefix === '/' ? '/' : prefix.slice(0, -1); + if (this.optionalRestSlugName != null) { + throw Object.defineProperty(new Error(`You cannot define a route with the same specificity as a optional catch-all route ("${r}" and "${r}[[...${this.optionalRestSlugName}]]").`), "__NEXT_ERROR_CODE", { + value: "E458", + enumerable: false, + configurable: true + }); + } + routes.unshift(r); + } + if (this.restSlugName !== null) { + routes.push(...this.children.get('[...]')._smoosh(`${prefix}[...${this.restSlugName}]/`)); + } + if (this.optionalRestSlugName !== null) { + routes.push(...this.children.get('[[...]]')._smoosh(`${prefix}[[...${this.optionalRestSlugName}]]/`)); + } + return routes; + } + _insert(urlPaths, slugNames, isCatchAll) { + if (urlPaths.length === 0) { + this.placeholder = false; + return; + } + if (isCatchAll) { + throw Object.defineProperty(new Error(`Catch-all must be the last part of the URL.`), "__NEXT_ERROR_CODE", { + value: "E392", + enumerable: false, + configurable: true + }); + } + // The next segment in the urlPaths list + let nextSegment = urlPaths[0]; + // Check if the segment matches `[something]` + if (nextSegment.startsWith('[') && nextSegment.endsWith(']')) { + // Strip `[` and `]`, leaving only `something` + let segmentName = nextSegment.slice(1, -1); + let isOptional = false; + if (segmentName.startsWith('[') && segmentName.endsWith(']')) { + // Strip optional `[` and `]`, leaving only `something` + segmentName = segmentName.slice(1, -1); + isOptional = true; + } + if (segmentName.startsWith('…')) { + throw Object.defineProperty(new Error(`Detected a three-dot character ('…') at ('${segmentName}'). Did you mean ('...')?`), "__NEXT_ERROR_CODE", { + value: "E147", + enumerable: false, + configurable: true + }); + } + if (segmentName.startsWith('...')) { + // Strip `...`, leaving only `something` + segmentName = segmentName.substring(3); + isCatchAll = true; + } + if (segmentName.startsWith('[') || segmentName.endsWith(']')) { + throw Object.defineProperty(new Error(`Segment names may not start or end with extra brackets ('${segmentName}').`), "__NEXT_ERROR_CODE", { + value: "E421", + enumerable: false, + configurable: true + }); + } + if (segmentName.startsWith('.')) { + throw Object.defineProperty(new Error(`Segment names may not start with erroneous periods ('${segmentName}').`), "__NEXT_ERROR_CODE", { + value: "E288", + enumerable: false, + configurable: true + }); + } + function handleSlug(previousSlug, nextSlug) { + if (previousSlug !== null) { + // If the specific segment already has a slug but the slug is not `something` + // This prevents collisions like: + // pages/[post]/index.js + // pages/[id]/index.js + // Because currently multiple dynamic params on the same segment level are not supported + if (previousSlug !== nextSlug) { + // TODO: This error seems to be confusing for users, needs an error link, the description can be based on above comment. + throw Object.defineProperty(new Error(`You cannot use different slug names for the same dynamic path ('${previousSlug}' !== '${nextSlug}').`), "__NEXT_ERROR_CODE", { + value: "E337", + enumerable: false, + configurable: true + }); + } + } + slugNames.forEach((slug)=>{ + if (slug === nextSlug) { + throw Object.defineProperty(new Error(`You cannot have the same slug name "${nextSlug}" repeat within a single dynamic path`), "__NEXT_ERROR_CODE", { + value: "E247", + enumerable: false, + configurable: true + }); + } + if (slug.replace(/\W/g, '') === nextSegment.replace(/\W/g, '')) { + throw Object.defineProperty(new Error(`You cannot have the slug names "${slug}" and "${nextSlug}" differ only by non-word symbols within a single dynamic path`), "__NEXT_ERROR_CODE", { + value: "E499", + enumerable: false, + configurable: true + }); + } + }); + slugNames.push(nextSlug); + } + if (isCatchAll) { + if (isOptional) { + if (this.restSlugName != null) { + throw Object.defineProperty(new Error(`You cannot use both an required and optional catch-all route at the same level ("[...${this.restSlugName}]" and "${urlPaths[0]}" ).`), "__NEXT_ERROR_CODE", { + value: "E299", + enumerable: false, + configurable: true + }); + } + handleSlug(this.optionalRestSlugName, segmentName); + // slugName is kept as it can only be one particular slugName + this.optionalRestSlugName = segmentName; + // nextSegment is overwritten to [[...]] so that it can later be sorted specifically + nextSegment = '[[...]]'; + } else { + if (this.optionalRestSlugName != null) { + throw Object.defineProperty(new Error(`You cannot use both an optional and required catch-all route at the same level ("[[...${this.optionalRestSlugName}]]" and "${urlPaths[0]}").`), "__NEXT_ERROR_CODE", { + value: "E300", + enumerable: false, + configurable: true + }); + } + handleSlug(this.restSlugName, segmentName); + // slugName is kept as it can only be one particular slugName + this.restSlugName = segmentName; + // nextSegment is overwritten to [...] so that it can later be sorted specifically + nextSegment = '[...]'; + } + } else { + if (isOptional) { + throw Object.defineProperty(new Error(`Optional route parameters are not yet supported ("${urlPaths[0]}").`), "__NEXT_ERROR_CODE", { + value: "E435", + enumerable: false, + configurable: true + }); + } + handleSlug(this.slugName, segmentName); + // slugName is kept as it can only be one particular slugName + this.slugName = segmentName; + // nextSegment is overwritten to [] so that it can later be sorted specifically + nextSegment = '[]'; + } + } + // If this UrlNode doesn't have the nextSegment yet we create a new child UrlNode + if (!this.children.has(nextSegment)) { + this.children.set(nextSegment, new UrlNode()); + } + this.children.get(nextSegment)._insert(urlPaths.slice(1), slugNames, isCatchAll); + } + constructor(){ + this.placeholder = true; + this.children = new Map(); + this.slugName = null; + this.restSlugName = null; + this.optionalRestSlugName = null; + } +} +function getSortedRoutes(normalizedPages) { + // First the UrlNode is created, and every UrlNode can have only 1 dynamic segment + // Eg you can't have pages/[post]/abc.js and pages/[hello]/something-else.js + // Only 1 dynamic segment per nesting level + // So in the case that is test/integration/dynamic-routing it'll be this: + // pages/[post]/comments.js + // pages/blog/[post]/comment/[id].js + // Both are fine because `pages/[post]` and `pages/blog` are on the same level + // So in this case `UrlNode` created here has `this.slugName === 'post'` + // And since your PR passed through `slugName` as an array basically it'd including it in too many possibilities + // Instead what has to be passed through is the upwards path's dynamic names + const root = new UrlNode(); + // Here the `root` gets injected multiple paths, and insert will break them up into sublevels + normalizedPages.forEach((pagePath)=>root.insert(pagePath)); + // Smoosh will then sort those sublevels up to the point where you get the correct route definition priority + return root.smoosh(); +} +function getSortedRouteObjects(objects, getter) { + // We're assuming here that all the pathnames are unique, that way we can + // sort the list and use the index as the key. + const indexes = {}; + const pathnames = []; + for(let i = 0; i < objects.length; i++){ + const pathname = getter(objects[i]); + indexes[pathname] = i; + pathnames[i] = pathname; + } + // Sort the pathnames. + const sorted = getSortedRoutes(pathnames); + // Map the sorted pathnames back to the original objects using the new sorted + // index. + return sorted.map((pathname)=>objects[indexes[pathname]]); +} + +//# sourceMappingURL=sorted-routes.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.js b/build/node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.js new file mode 100644 index 0000000..71505fc --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.js @@ -0,0 +1,99 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + HEAD_REQUEST_KEY: null, + ROOT_SEGMENT_REQUEST_KEY: null, + appendSegmentRequestKeyPart: null, + convertSegmentPathToStaticExportFilename: null, + createSegmentRequestKeyPart: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + HEAD_REQUEST_KEY: function() { + return HEAD_REQUEST_KEY; + }, + ROOT_SEGMENT_REQUEST_KEY: function() { + return ROOT_SEGMENT_REQUEST_KEY; + }, + appendSegmentRequestKeyPart: function() { + return appendSegmentRequestKeyPart; + }, + convertSegmentPathToStaticExportFilename: function() { + return convertSegmentPathToStaticExportFilename; + }, + createSegmentRequestKeyPart: function() { + return createSegmentRequestKeyPart; + } +}); +const _segment = require("../segment"); +const ROOT_SEGMENT_REQUEST_KEY = ''; +const HEAD_REQUEST_KEY = '/_head'; +function createSegmentRequestKeyPart(segment) { + if (typeof segment === 'string') { + if (segment.startsWith(_segment.PAGE_SEGMENT_KEY)) { + // The Flight Router State type sometimes includes the search params in + // the page segment. However, the Segment Cache tracks this as a separate + // key. So, we strip the search params here, and then add them back when + // the cache entry is turned back into a FlightRouterState. This is an + // unfortunate consequence of the FlightRouteState being used both as a + // transport type and as a cache key; we'll address this once more of the + // Segment Cache implementation has settled. + // TODO: We should hoist the search params out of the FlightRouterState + // type entirely, This is our plan for dynamic route params, too. + return _segment.PAGE_SEGMENT_KEY; + } + const safeName = // TODO: FlightRouterState encodes Not Found routes as "/_not-found". + // But params typically don't include the leading slash. We should use + // a different encoding to avoid this special case. + segment === '/_not-found' ? '_not-found' : encodeToFilesystemAndURLSafeString(segment); + // Since this is not a dynamic segment, it's fully encoded. It does not + // need to be "hydrated" with a param value. + return safeName; + } + const name = segment[0]; + const paramType = segment[2]; + const safeName = encodeToFilesystemAndURLSafeString(name); + const encodedName = '$' + paramType + '$' + safeName; + return encodedName; +} +function appendSegmentRequestKeyPart(parentRequestKey, parallelRouteKey, childRequestKeyPart) { + // Aside from being filesystem safe, segment keys are also designed so that + // each segment and parallel route creates its own subdirectory. Roughly in + // the same shape as the source app directory. This is mostly just for easier + // debugging (you can open up the build folder and navigate the output); if + // we wanted to do we could just use a flat structure. + // Omit the parallel route key for children, since this is the most + // common case. Saves some bytes (and it's what the app directory does). + const slotKey = parallelRouteKey === 'children' ? childRequestKeyPart : `@${encodeToFilesystemAndURLSafeString(parallelRouteKey)}/${childRequestKeyPart}`; + return parentRequestKey + '/' + slotKey; +} +// Define a regex pattern to match the most common characters found in a route +// param. It excludes anything that might not be cross-platform filesystem +// compatible, like |. It does not need to be precise because the fallback is to +// just base64url-encode the whole parameter, which is fine; we just don't do it +// by default for compactness, and for easier debugging. +const simpleParamValueRegex = /^[a-zA-Z0-9\-_@]+$/; +function encodeToFilesystemAndURLSafeString(value) { + if (simpleParamValueRegex.test(value)) { + return value; + } + // If there are any unsafe characters, base64url-encode the entire value. + // We also add a ! prefix so it doesn't collide with the simple case. + const base64url = btoa(value).replace(/\+/g, '-') // Replace '+' with '-' + .replace(/\//g, '_') // Replace '/' with '_' + .replace(/=+$/, '') // Remove trailing '=' + ; + return '!' + base64url; +} +function convertSegmentPathToStaticExportFilename(segmentPath) { + return `__next${segmentPath.replace(/\//g, '.')}.txt`; +} + +//# sourceMappingURL=segment-value-encoding.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/segment-cache/vary-params-decoding.js b/build/node_modules/next/dist/shared/lib/segment-cache/vary-params-decoding.js new file mode 100644 index 0000000..9c7566c --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/segment-cache/vary-params-decoding.js @@ -0,0 +1,32 @@ +/** + * Vary Params Decoding + * + * This module is shared between server and client. + */ "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "readVaryParams", { + enumerable: true, + get: function() { + return readVaryParams; + } +}); +function readVaryParams(thenable) { + // Attach a no-op listener to force Flight to synchronously resolve the + // thenable. When a thenable arrives from the Flight stream, it may be in an + // intermediate 'resolved_model' state (data received but not unwrapped). + // Calling .then() triggers Flight to transition it to 'fulfilled', making + // the value available synchronously. React uses this same optimization + // internally to avoid unnecessary microtasks. + thenable.then(noop); + // If the thenable is still not 'fulfilled' after calling .then(), the server + // failed to resolve it before the stream ended. Treat as unknown. + if (thenable.status !== 'fulfilled') { + return null; + } + return thenable.value; +} +const noop = ()=>{}; + +//# sourceMappingURL=vary-params-decoding.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/segment.js b/build/node_modules/next/dist/shared/lib/segment.js new file mode 100644 index 0000000..ade011f --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/segment.js @@ -0,0 +1,102 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + DEFAULT_SEGMENT_KEY: null, + NOT_FOUND_SEGMENT_KEY: null, + PAGE_SEGMENT_KEY: null, + addSearchParamsIfPageSegment: null, + computeSelectedLayoutSegment: null, + getSegmentValue: null, + getSelectedLayoutSegmentPath: null, + isGroupSegment: null, + isParallelRouteSegment: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + DEFAULT_SEGMENT_KEY: function() { + return DEFAULT_SEGMENT_KEY; + }, + NOT_FOUND_SEGMENT_KEY: function() { + return NOT_FOUND_SEGMENT_KEY; + }, + PAGE_SEGMENT_KEY: function() { + return PAGE_SEGMENT_KEY; + }, + addSearchParamsIfPageSegment: function() { + return addSearchParamsIfPageSegment; + }, + computeSelectedLayoutSegment: function() { + return computeSelectedLayoutSegment; + }, + getSegmentValue: function() { + return getSegmentValue; + }, + getSelectedLayoutSegmentPath: function() { + return getSelectedLayoutSegmentPath; + }, + isGroupSegment: function() { + return isGroupSegment; + }, + isParallelRouteSegment: function() { + return isParallelRouteSegment; + } +}); +function getSegmentValue(segment) { + return Array.isArray(segment) ? segment[1] : segment; +} +function isGroupSegment(segment) { + // Use array[0] for performant purpose + return segment[0] === '(' && segment.endsWith(')'); +} +function isParallelRouteSegment(segment) { + return segment.startsWith('@') && segment !== '@children'; +} +function addSearchParamsIfPageSegment(segment, searchParams) { + const isPageSegment = segment.includes(PAGE_SEGMENT_KEY); + if (isPageSegment) { + const stringifiedQuery = JSON.stringify(searchParams); + return stringifiedQuery !== '{}' ? PAGE_SEGMENT_KEY + '?' + stringifiedQuery : PAGE_SEGMENT_KEY; + } + return segment; +} +function computeSelectedLayoutSegment(segments, parallelRouteKey) { + if (!segments || segments.length === 0) { + return null; + } + // For 'children', use first segment; for other parallel routes, use last segment + const rawSegment = parallelRouteKey === 'children' ? segments[0] : segments[segments.length - 1]; + // If the default slot is showing, return null since it's not technically "selected" (it's a fallback) + // Returning an internal value like `__DEFAULT__` would be confusing + return rawSegment === DEFAULT_SEGMENT_KEY ? null : rawSegment; +} +function getSelectedLayoutSegmentPath(tree, parallelRouteKey, first = true, segmentPath = []) { + let node; + if (first) { + // Use the provided parallel route key on the first parallel route + node = tree[1][parallelRouteKey]; + } else { + // After first parallel route prefer children, if there's no children pick the first parallel route. + const parallelRoutes = tree[1]; + node = parallelRoutes.children ?? Object.values(parallelRoutes)[0]; + } + if (!node) return segmentPath; + const segment = node[0]; + let segmentValue = getSegmentValue(segment); + if (!segmentValue || segmentValue.startsWith(PAGE_SEGMENT_KEY)) { + return segmentPath; + } + segmentPath.push(segmentValue); + return getSelectedLayoutSegmentPath(node, parallelRouteKey, false, segmentPath); +} +const PAGE_SEGMENT_KEY = '__PAGE__'; +const DEFAULT_SEGMENT_KEY = '__DEFAULT__'; +const NOT_FOUND_SEGMENT_KEY = '/_not-found'; + +//# sourceMappingURL=segment.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.js b/build/node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.js new file mode 100644 index 0000000..747713f --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.js @@ -0,0 +1,35 @@ +'use client'; +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + ServerInsertedHTMLContext: null, + useServerInsertedHTML: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + ServerInsertedHTMLContext: function() { + return ServerInsertedHTMLContext; + }, + useServerInsertedHTML: function() { + return useServerInsertedHTML; + } +}); +const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard"); +const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react")); +const ServerInsertedHTMLContext = /*#__PURE__*/ _react.default.createContext(null); +function useServerInsertedHTML(callback) { + const addInsertedServerHTMLCallback = (0, _react.useContext)(ServerInsertedHTMLContext); + // Should have no effects on client where there's no flush effects provider + if (addInsertedServerHTMLCallback) { + addInsertedServerHTMLCallback(callback); + } +} + +//# sourceMappingURL=server-inserted-html.shared-runtime.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/server-reference-info.js b/build/node_modules/next/dist/shared/lib/server-reference-info.js new file mode 100644 index 0000000..837eab8 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/server-reference-info.js @@ -0,0 +1,56 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + extractInfoFromServerReferenceId: null, + omitUnusedArgs: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + extractInfoFromServerReferenceId: function() { + return extractInfoFromServerReferenceId; + }, + omitUnusedArgs: function() { + return omitUnusedArgs; + } +}); +function extractInfoFromServerReferenceId(id) { + const infoByte = parseInt(id.slice(0, 2), 16); + const typeBit = infoByte >> 7 & 0x1; + const argMask = infoByte >> 1 & 0x3f; + const restArgs = infoByte & 0x1; + const usedArgs = Array(6); + for(let index = 0; index < 6; index++){ + const bitPosition = 5 - index; + const bit = argMask >> bitPosition & 0x1; + usedArgs[index] = bit === 1; + } + return { + type: typeBit === 1 ? 'use-cache' : 'server-action', + usedArgs: usedArgs, + hasRestArgs: restArgs === 1 + }; +} +function omitUnusedArgs(args, info) { + const filteredArgs = new Array(args.length); + let length = 0; + for(let index = 0; index < args.length; index++){ + if (index < 6 && info.usedArgs[index] || // This assumes that the server reference info byte has the restArgs bit + // set to 1 if there are more than 6 args. + index >= 6 && info.hasRestArgs) { + filteredArgs[index] = args[index]; + length = index + 1; + } + } + // Trim trailing unused args from the array. + filteredArgs.length = length; + return filteredArgs; +} + +//# sourceMappingURL=server-reference-info.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/side-effect.js b/build/node_modules/next/dist/shared/lib/side-effect.js new file mode 100644 index 0000000..126a4f2 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/side-effect.js @@ -0,0 +1,63 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "default", { + enumerable: true, + get: function() { + return SideEffect; + } +}); +const _react = require("react"); +const isServer = typeof window === 'undefined'; +const useClientOnlyLayoutEffect = isServer ? ()=>{} : _react.useLayoutEffect; +const useClientOnlyEffect = isServer ? ()=>{} : _react.useEffect; +function SideEffect(props) { + const { headManager, reduceComponentsToState } = props; + function emitChange() { + if (headManager && headManager.mountedInstances) { + const headElements = _react.Children.toArray(Array.from(headManager.mountedInstances).filter(Boolean)); + headManager.updateHead(reduceComponentsToState(headElements)); + } + } + if (isServer) { + headManager?.mountedInstances?.add(props.children); + emitChange(); + } + useClientOnlyLayoutEffect(()=>{ + headManager?.mountedInstances?.add(props.children); + return ()=>{ + headManager?.mountedInstances?.delete(props.children); + }; + }); + // We need to call `updateHead` method whenever the `SideEffect` is trigger in all + // life-cycles: mount, update, unmount. However, if there are multiple `SideEffect`s + // being rendered, we only trigger the method from the last one. + // This is ensured by keeping the last unflushed `updateHead` in the `_pendingUpdate` + // singleton in the layout effect pass, and actually trigger it in the effect pass. + useClientOnlyLayoutEffect(()=>{ + if (headManager) { + headManager._pendingUpdate = emitChange; + } + return ()=>{ + if (headManager) { + headManager._pendingUpdate = emitChange; + } + }; + }); + useClientOnlyEffect(()=>{ + if (headManager && headManager._pendingUpdate) { + headManager._pendingUpdate(); + headManager._pendingUpdate = null; + } + return ()=>{ + if (headManager && headManager._pendingUpdate) { + headManager._pendingUpdate(); + headManager._pendingUpdate = null; + } + }; + }); + return null; +} + +//# sourceMappingURL=side-effect.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/size-limit.js b/build/node_modules/next/dist/shared/lib/size-limit.js new file mode 100644 index 0000000..c47220f --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/size-limit.js @@ -0,0 +1,40 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + DEFAULT_MAX_POSTPONED_STATE_SIZE: null, + parseMaxPostponedStateSize: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + DEFAULT_MAX_POSTPONED_STATE_SIZE: function() { + return DEFAULT_MAX_POSTPONED_STATE_SIZE; + }, + parseMaxPostponedStateSize: function() { + return parseMaxPostponedStateSize; + } +}); +const DEFAULT_MAX_POSTPONED_STATE_SIZE = '100 MB'; +// 100MB in bytes. Not using the parseSizeLimit for performance as parseMaxPostponedStateSize is in the hot path for rendering. +const DEFAULT_MAX_POSTPONED_STATE_SIZE_BYTES = 104857600; +function parseSizeLimit(size) { + const bytes = require('next/dist/compiled/bytes').parse(size); + if (bytes === null || isNaN(bytes) || bytes < 1) { + return undefined; + } + return bytes; +} +function parseMaxPostponedStateSize(size) { + if (!size) { + return DEFAULT_MAX_POSTPONED_STATE_SIZE_BYTES; + } + return parseSizeLimit(size); +} + +//# sourceMappingURL=size-limit.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/turbopack/internal-error.js b/build/node_modules/next/dist/shared/lib/turbopack/internal-error.js new file mode 100644 index 0000000..4212b60 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/turbopack/internal-error.js @@ -0,0 +1,53 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + TurbopackInternalError: null, + throwTurbopackInternalError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + TurbopackInternalError: function() { + return TurbopackInternalError; + }, + throwTurbopackInternalError: function() { + return throwTurbopackInternalError; + } +}); +const _events = require("../../../telemetry/events"); +const _shared = require("../../../trace/shared"); +class TurbopackInternalError extends Error { + constructor({ message, anonymizedLocation }){ + super(message), this.name = 'TurbopackInternalError', // Manually set this as this isn't statically determinable + this.__NEXT_ERROR_CODE = 'TurbopackInternalError'; + this.location = anonymizedLocation; + } +} +function throwTurbopackInternalError(conversionError, opts) { + if (conversionError != null) { + // Somehow napi failed to convert `opts` to a JS object??? Just give up and throw that instead. + throw Object.defineProperty(new Error('NAPI type conversion error in throwTurbopackInternalError', { + cause: conversionError + }), "__NEXT_ERROR_CODE", { + value: "E723", + enumerable: false, + configurable: true + }); + } + const err = new TurbopackInternalError(opts); + const telemetry = _shared.traceGlobals.get('telemetry'); + if (telemetry) { + telemetry.record((0, _events.eventErrorThrown)(err, opts.anonymizedLocation)); + } else { + console.error('Expected `telemetry` to be set in globals'); + } + throw err; +} + +//# sourceMappingURL=internal-error.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/utils.js b/build/node_modules/next/dist/shared/lib/utils.js new file mode 100644 index 0000000..11e1cce --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/utils.js @@ -0,0 +1,207 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + DecodeError: null, + MiddlewareNotFoundError: null, + MissingStaticPage: null, + NormalizeError: null, + PageNotFoundError: null, + SP: null, + ST: null, + WEB_VITALS: null, + execOnce: null, + getDisplayName: null, + getLocationOrigin: null, + getURL: null, + isAbsoluteUrl: null, + isResSent: null, + loadGetInitialProps: null, + normalizeRepeatedSlashes: null, + stringifyError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + DecodeError: function() { + return DecodeError; + }, + MiddlewareNotFoundError: function() { + return MiddlewareNotFoundError; + }, + MissingStaticPage: function() { + return MissingStaticPage; + }, + NormalizeError: function() { + return NormalizeError; + }, + PageNotFoundError: function() { + return PageNotFoundError; + }, + SP: function() { + return SP; + }, + ST: function() { + return ST; + }, + WEB_VITALS: function() { + return WEB_VITALS; + }, + execOnce: function() { + return execOnce; + }, + getDisplayName: function() { + return getDisplayName; + }, + getLocationOrigin: function() { + return getLocationOrigin; + }, + getURL: function() { + return getURL; + }, + isAbsoluteUrl: function() { + return isAbsoluteUrl; + }, + isResSent: function() { + return isResSent; + }, + loadGetInitialProps: function() { + return loadGetInitialProps; + }, + normalizeRepeatedSlashes: function() { + return normalizeRepeatedSlashes; + }, + stringifyError: function() { + return stringifyError; + } +}); +const WEB_VITALS = [ + 'CLS', + 'FCP', + 'FID', + 'INP', + 'LCP', + 'TTFB' +]; +function execOnce(fn) { + let used = false; + let result; + return (...args)=>{ + if (!used) { + used = true; + result = fn(...args); + } + return result; + }; +} +// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1 +// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3 +const ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\d+\-.]*?:/; +const isAbsoluteUrl = (url)=>ABSOLUTE_URL_REGEX.test(url); +function getLocationOrigin() { + const { protocol, hostname, port } = window.location; + return `${protocol}//${hostname}${port ? ':' + port : ''}`; +} +function getURL() { + const { href } = window.location; + const origin = getLocationOrigin(); + return href.substring(origin.length); +} +function getDisplayName(Component) { + return typeof Component === 'string' ? Component : Component.displayName || Component.name || 'Unknown'; +} +function isResSent(res) { + return res.finished || res.headersSent; +} +function normalizeRepeatedSlashes(url) { + const urlParts = url.split('?'); + const urlNoQuery = urlParts[0]; + return urlNoQuery// first we replace any non-encoded backslashes with forward + // then normalize repeated forward slashes + .replace(/\\/g, '/').replace(/\/\/+/g, '/') + (urlParts[1] ? `?${urlParts.slice(1).join('?')}` : ''); +} +async function loadGetInitialProps(App, ctx) { + if (process.env.NODE_ENV !== 'production') { + if (App.prototype?.getInitialProps) { + const message = `"${getDisplayName(App)}.getInitialProps()" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.`; + throw Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E1035", + enumerable: false, + configurable: true + }); + } + } + // when called from _app `ctx` is nested in `ctx` + const res = ctx.res || ctx.ctx && ctx.ctx.res; + if (!App.getInitialProps) { + if (ctx.ctx && ctx.Component) { + // @ts-ignore pageProps default + return { + pageProps: await loadGetInitialProps(ctx.Component, ctx.ctx) + }; + } + return {}; + } + const props = await App.getInitialProps(ctx); + if (res && isResSent(res)) { + return props; + } + if (!props) { + const message = `"${getDisplayName(App)}.getInitialProps()" should resolve to an object. But found "${props}" instead.`; + throw Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E1025", + enumerable: false, + configurable: true + }); + } + if (process.env.NODE_ENV !== 'production') { + if (Object.keys(props).length === 0 && !ctx.ctx) { + console.warn(`${getDisplayName(App)} returned an empty object from \`getInitialProps\`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps`); + } + } + return props; +} +const SP = typeof performance !== 'undefined'; +const ST = SP && [ + 'mark', + 'measure', + 'getEntriesByName' +].every((method)=>typeof performance[method] === 'function'); +class DecodeError extends Error { +} +class NormalizeError extends Error { +} +class PageNotFoundError extends Error { + constructor(page){ + super(); + this.code = 'ENOENT'; + this.name = 'PageNotFoundError'; + this.message = `Cannot find module for page: ${page}`; + } +} +class MissingStaticPage extends Error { + constructor(page, message){ + super(); + this.message = `Failed to load static file for page: ${page} ${message}`; + } +} +class MiddlewareNotFoundError extends Error { + constructor(){ + super(); + this.code = 'ENOENT'; + this.message = `Cannot find the middleware module`; + } +} +function stringifyError(error) { + return JSON.stringify({ + message: error.message, + stack: error.stack + }); +} + +//# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/utils/reflect-utils.js b/build/node_modules/next/dist/shared/lib/utils/reflect-utils.js new file mode 100644 index 0000000..375c4c7 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/utils/reflect-utils.js @@ -0,0 +1,69 @@ +// This regex will have fast negatives meaning valid identifiers may not pass +// this test. However this is only used during static generation to provide hints +// about why a page bailed out of some or all prerendering and we can use bracket notation +// for example while `ಠ_ಠ` is a valid identifier it's ok to print `searchParams['ಠ_ಠ']` +// even if this would have been fine too `searchParams.ಠ_ಠ` +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + describeHasCheckingStringProperty: null, + describeStringPropertyAccess: null, + wellKnownProperties: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + describeHasCheckingStringProperty: function() { + return describeHasCheckingStringProperty; + }, + describeStringPropertyAccess: function() { + return describeStringPropertyAccess; + }, + wellKnownProperties: function() { + return wellKnownProperties; + } +}); +const isDefinitelyAValidIdentifier = /^[A-Za-z_$][A-Za-z0-9_$]*$/; +function describeStringPropertyAccess(target, prop) { + if (isDefinitelyAValidIdentifier.test(prop)) { + return `\`${target}.${prop}\``; + } + return `\`${target}[${JSON.stringify(prop)}]\``; +} +function describeHasCheckingStringProperty(target, prop) { + const stringifiedProp = JSON.stringify(prop); + return `\`Reflect.has(${target}, ${stringifiedProp})\`, \`${stringifiedProp} in ${target}\`, or similar`; +} +const wellKnownProperties = new Set([ + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'toString', + 'valueOf', + 'toLocaleString', + // Promise prototype + 'then', + 'catch', + 'finally', + // React Promise extension + 'status', + // 'value', + // 'error', + // React introspection + 'displayName', + '_debugInfo', + // Common tested properties + 'toJSON', + '$$typeof', + '__esModule', + // Tested by flight when checking for iterables + '@@iterator' +]); + +//# sourceMappingURL=reflect-utils.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/utils/warn-once.js b/build/node_modules/next/dist/shared/lib/utils/warn-once.js new file mode 100644 index 0000000..88ee101 --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/utils/warn-once.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "warnOnce", { + enumerable: true, + get: function() { + return warnOnce; + } +}); +let warnOnce = (_)=>{}; +if (process.env.NODE_ENV !== 'production') { + const warnings = new Set(); + warnOnce = (msg)=>{ + if (!warnings.has(msg)) { + console.warn(msg); + } + warnings.add(msg); + }; +} + +//# sourceMappingURL=warn-once.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/shared/lib/zod.js b/build/node_modules/next/dist/shared/lib/zod.js new file mode 100644 index 0000000..9a2dbfd --- /dev/null +++ b/build/node_modules/next/dist/shared/lib/zod.js @@ -0,0 +1,101 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + formatZodError: null, + normalizeZodErrors: null, + reportZodError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + formatZodError: function() { + return formatZodError; + }, + normalizeZodErrors: function() { + return normalizeZodErrors; + }, + reportZodError: function() { + return reportZodError; + } +}); +const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard"); +const _zod = require("next/dist/compiled/zod"); +const _zodvalidationerror = require("next/dist/compiled/zod-validation-error"); +const _log = /*#__PURE__*/ _interop_require_wildcard._(require("../../build/output/log")); +function processZodErrorMessage(issue) { + let message = issue.message; + let path; + if (issue.path.length > 0) { + if (issue.path.length === 1) { + const identifier = issue.path[0]; + if (typeof identifier === 'number') { + // The first identifier inside path is a number + path = `index ${identifier}`; + } else { + path = `"${identifier}"`; + } + } else { + // joined path to be shown in the error message + path = `"${issue.path.reduce((acc, cur)=>{ + if (typeof cur === 'number') { + // array index + return `${acc}[${cur}]`; + } + if (cur.includes('"')) { + // escape quotes + return `${acc}["${cur.replaceAll('"', '\\"')}"]`; + } + // dot notation + const separator = acc.length === 0 ? '' : '.'; + return acc + separator + cur; + }, '')}"`; + } + } else { + path = ''; + } + if (issue.code === 'invalid_type' && issue.received === _zod.ZodParsedType.undefined) { + // Missing key in object. + return `${path} is missing, expected ${issue.expected}`; + } + if (issue.code === 'invalid_enum_value') { + // Remove "Invalid enum value" prefix from zod default error message + return `Expected ${_zod.util.joinValues(issue.options)}, received '${issue.received}' at ${path}`; + } + return message + (path ? ` at ${path}` : ''); +} +function normalizeZodErrors(error) { + return error.issues.flatMap((issue)=>{ + const issues = [ + { + issue, + message: processZodErrorMessage(issue) + } + ]; + if ('unionErrors' in issue) { + for (const unionError of issue.unionErrors){ + issues.push(...normalizeZodErrors(unionError)); + } + } + return issues; + }); +} +function formatZodError(prefix, error) { + return Object.defineProperty(new Error((0, _zodvalidationerror.fromZodError)(error, { + prefix: prefix + }).toString()), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); +} +function reportZodError(prefix, error) { + _log.error(formatZodError(prefix, error).message); +} + +//# sourceMappingURL=zod.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/telemetry/anonymous-meta.js b/build/node_modules/next/dist/telemetry/anonymous-meta.js new file mode 100644 index 0000000..55c790c --- /dev/null +++ b/build/node_modules/next/dist/telemetry/anonymous-meta.js @@ -0,0 +1,89 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getAnonymousMeta", { + enumerable: true, + get: function() { + return getAnonymousMeta; + } +}); +const _isdocker = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/is-docker")); +const _iswsl = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/is-wsl")); +const _os = /*#__PURE__*/ _interop_require_default(require("os")); +const _ciinfo = /*#__PURE__*/ _interop_require_wildcard(require("../server/ci-info")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +let traits; +function getAnonymousMeta() { + if (traits) { + return traits; + } + const cpus = _os.default.cpus() || []; + const { NOW_REGION } = process.env; + traits = { + // Software information + systemPlatform: _os.default.platform(), + systemRelease: _os.default.release(), + systemArchitecture: _os.default.arch(), + // Machine information + cpuCount: cpus.length, + cpuModel: cpus.length ? cpus[0].model : null, + cpuSpeed: cpus.length ? cpus[0].speed : null, + memoryInMb: Math.trunc(_os.default.totalmem() / Math.pow(1024, 2)), + // Environment information + isDocker: (0, _isdocker.default)(), + isNowDev: NOW_REGION === 'dev1', + isWsl: _iswsl.default, + isCI: _ciinfo.isCI, + ciName: _ciinfo.isCI && _ciinfo.name || null, + nextVersion: "16.2.6" + }; + return traits; +} + +//# sourceMappingURL=anonymous-meta.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/telemetry/detached-flush.js b/build/node_modules/next/dist/telemetry/detached-flush.js new file mode 100644 index 0000000..352fd0b --- /dev/null +++ b/build/node_modules/next/dist/telemetry/detached-flush.js @@ -0,0 +1,56 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +const _fs = /*#__PURE__*/ _interop_require_default(require("fs")); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _storage = require("./storage"); +const _config = /*#__PURE__*/ _interop_require_default(require("../server/config")); +const _getprojectdir = require("../lib/get-project-dir"); +const _constants = require("../shared/lib/constants"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +(async ()=>{ + const args = [ + ...process.argv + ]; + const eventsFile = args.pop(); + let dir = args.pop(); + const mode = args.pop(); + if (!dir || mode !== 'dev') { + throw Object.defineProperty(new Error(`Invalid flags should be run as node detached-flush dev ./path-to/project [eventsFile]`), "__NEXT_ERROR_CODE", { + value: "E908", + enumerable: false, + configurable: true + }); + } + dir = (0, _getprojectdir.getProjectDir)(dir); + const config = await (0, _config.default)(_constants.PHASE_DEVELOPMENT_SERVER, dir); + const distDir = _path.default.join(dir, config.distDir || '.next'); + // Support both old format (no eventsFile arg) and new format (with eventsFile arg) + const eventsPath = _path.default.join(distDir, eventsFile && !eventsFile.includes('/') ? eventsFile : '_events.json'); + let events; + try { + events = JSON.parse(_fs.default.readFileSync(eventsPath, 'utf8')); + } catch (err) { + if (err.code === 'ENOENT') { + // no events to process we can exit now + process.exit(0); + } + throw err; + } + const telemetry = new _storage.Telemetry({ + distDir + }); + await telemetry.record(events); + await telemetry.flush(); + // finished flushing events clean-up + _fs.default.unlinkSync(eventsPath); +// Don't call process.exit() here - let Node.js exit naturally after +// all pending work completes (e.g., setTimeout in debug telemetry) +})(); + +//# sourceMappingURL=detached-flush.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/telemetry/events/build.js b/build/node_modules/next/dist/telemetry/events/build.js new file mode 100644 index 0000000..ea0617f --- /dev/null +++ b/build/node_modules/next/dist/telemetry/events/build.js @@ -0,0 +1,174 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + ERROR_THROWN_EVENT: null, + EVENT_BUILD_FEATURE_USAGE: null, + EVENT_MCP_TOOL_USAGE: null, + EVENT_NAME_PACKAGE_USED_IN_GET_SERVER_SIDE_PROPS: null, + eventAnalyzeCompleted: null, + eventBuildCompleted: null, + eventBuildFailed: null, + eventBuildFeatureUsage: null, + eventBuildOptimize: null, + eventErrorThrown: null, + eventLintCheckCompleted: null, + eventMcpToolUsage: null, + eventPackageUsedInGetServerSideProps: null, + eventTypeCheckCompleted: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + ERROR_THROWN_EVENT: function() { + return ERROR_THROWN_EVENT; + }, + EVENT_BUILD_FEATURE_USAGE: function() { + return EVENT_BUILD_FEATURE_USAGE; + }, + EVENT_MCP_TOOL_USAGE: function() { + return EVENT_MCP_TOOL_USAGE; + }, + EVENT_NAME_PACKAGE_USED_IN_GET_SERVER_SIDE_PROPS: function() { + return EVENT_NAME_PACKAGE_USED_IN_GET_SERVER_SIDE_PROPS; + }, + eventAnalyzeCompleted: function() { + return eventAnalyzeCompleted; + }, + eventBuildCompleted: function() { + return eventBuildCompleted; + }, + eventBuildFailed: function() { + return eventBuildFailed; + }, + eventBuildFeatureUsage: function() { + return eventBuildFeatureUsage; + }, + eventBuildOptimize: function() { + return eventBuildOptimize; + }, + eventErrorThrown: function() { + return eventErrorThrown; + }, + eventLintCheckCompleted: function() { + return eventLintCheckCompleted; + }, + eventMcpToolUsage: function() { + return eventMcpToolUsage; + }, + eventPackageUsedInGetServerSideProps: function() { + return eventPackageUsedInGetServerSideProps; + }, + eventTypeCheckCompleted: function() { + return eventTypeCheckCompleted; + } +}); +const _errortelemetryutils = require("../../lib/error-telemetry-utils"); +const REGEXP_DIRECTORY_DUNDER = /[\\/]__[^\\/]+(?<![\\/]__(?:tests|mocks))__[\\/]/i; +const REGEXP_DIRECTORY_TESTS = /[\\/]__(tests|mocks)__[\\/]/i; +const REGEXP_FILE_TEST = /\.(?:spec|test)\.[^.]+$/i; +const EVENT_TYPE_CHECK_COMPLETED = 'NEXT_TYPE_CHECK_COMPLETED'; +function eventTypeCheckCompleted(event) { + return { + eventName: EVENT_TYPE_CHECK_COMPLETED, + payload: event + }; +} +const EVENT_LINT_CHECK_COMPLETED = 'NEXT_LINT_CHECK_COMPLETED'; +function eventLintCheckCompleted(event) { + return { + eventName: EVENT_LINT_CHECK_COMPLETED, + payload: event + }; +} +const EVENT_ANALYZE_COMPLETED = 'NEXT_ANALYZE_COMPLETED'; +function eventAnalyzeCompleted(event) { + return { + eventName: EVENT_ANALYZE_COMPLETED, + payload: event + }; +} +const EVENT_BUILD_COMPLETED = 'NEXT_BUILD_COMPLETED'; +function eventBuildCompleted(pagePaths, event) { + return { + eventName: EVENT_BUILD_COMPLETED, + payload: { + ...event, + totalPageCount: pagePaths.length, + hasDunderPages: pagePaths.some((path)=>REGEXP_DIRECTORY_DUNDER.test(path)), + hasTestPages: pagePaths.some((path)=>REGEXP_DIRECTORY_TESTS.test(path) || REGEXP_FILE_TEST.test(path)), + totalAppPagesCount: event.totalAppPagesCount + } + }; +} +const EVENT_BUILD_FAILED = 'NEXT_BUILD_FAILED'; +function eventBuildFailed(event) { + return { + eventName: EVENT_BUILD_FAILED, + payload: event + }; +} +const EVENT_BUILD_OPTIMIZED = 'NEXT_BUILD_OPTIMIZED'; +function eventBuildOptimize(pagePaths, event) { + return { + eventName: EVENT_BUILD_OPTIMIZED, + payload: { + ...event, + totalPageCount: pagePaths.length, + hasDunderPages: pagePaths.some((path)=>REGEXP_DIRECTORY_DUNDER.test(path)), + hasTestPages: pagePaths.some((path)=>REGEXP_DIRECTORY_TESTS.test(path) || REGEXP_FILE_TEST.test(path)), + totalAppPagesCount: event.totalAppPagesCount, + staticAppPagesCount: event.staticAppPagesCount, + serverAppPagesCount: event.serverAppPagesCount, + edgeRuntimeAppCount: event.edgeRuntimeAppCount, + edgeRuntimePagesCount: event.edgeRuntimePagesCount, + isRspack: process.env.NEXT_RSPACK !== undefined + } + }; +} +const EVENT_BUILD_FEATURE_USAGE = 'NEXT_BUILD_FEATURE_USAGE'; +function eventBuildFeatureUsage(usages) { + return usages.map(({ featureName, invocationCount })=>({ + eventName: EVENT_BUILD_FEATURE_USAGE, + payload: { + featureName, + invocationCount + } + })); +} +const EVENT_NAME_PACKAGE_USED_IN_GET_SERVER_SIDE_PROPS = 'NEXT_PACKAGE_USED_IN_GET_SERVER_SIDE_PROPS'; +function eventPackageUsedInGetServerSideProps(packagesUsedInServerSideProps) { + return packagesUsedInServerSideProps.map((packageName)=>({ + eventName: EVENT_NAME_PACKAGE_USED_IN_GET_SERVER_SIDE_PROPS, + payload: { + package: packageName + } + })); +} +const EVENT_MCP_TOOL_USAGE = 'NEXT_MCP_TOOL_USAGE'; +function eventMcpToolUsage(usages) { + return usages.map(({ featureName, invocationCount })=>({ + eventName: EVENT_MCP_TOOL_USAGE, + payload: { + toolName: featureName, + invocationCount + } + })); +} +const ERROR_THROWN_EVENT = 'NEXT_ERROR_THROWN'; +function eventErrorThrown(error, anonymizedLocation) { + return { + eventName: ERROR_THROWN_EVENT, + payload: { + errorCode: (0, _errortelemetryutils.extractNextErrorCode)(error) || 'Unknown', + location: anonymizedLocation + } + }; +} + +//# sourceMappingURL=build.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/telemetry/events/index.js b/build/node_modules/next/dist/telemetry/events/index.js new file mode 100644 index 0000000..aa2ef70 --- /dev/null +++ b/build/node_modules/next/dist/telemetry/events/index.js @@ -0,0 +1,41 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + EVENT_MCP_TOOL_USAGE: null, + eventMcpToolUsage: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + EVENT_MCP_TOOL_USAGE: function() { + return _build.EVENT_MCP_TOOL_USAGE; + }, + eventMcpToolUsage: function() { + return _build.eventMcpToolUsage; + } +}); +0 && __export(require("./version")) && __export(require("./build")) && __export(require("./plugins")); +_export_star(require("./version"), exports); +const _build = _export_star(require("./build"), exports); +_export_star(require("./plugins"), exports); +function _export_star(from, to) { + Object.keys(from).forEach(function(k) { + if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) { + Object.defineProperty(to, k, { + enumerable: true, + get: function() { + return from[k]; + } + }); + } + }); + return from; +} + +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/telemetry/events/plugins.js b/build/node_modules/next/dist/telemetry/events/plugins.js new file mode 100644 index 0000000..63e1041 --- /dev/null +++ b/build/node_modules/next/dist/telemetry/events/plugins.js @@ -0,0 +1,51 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "eventNextPlugins", { + enumerable: true, + get: function() { + return eventNextPlugins; + } +}); +const _findup = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/find-up")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const EVENT_PLUGIN_PRESENT = 'NEXT_PACKAGE_DETECTED'; +async function eventNextPlugins(dir) { + try { + const packageJsonPath = await (0, _findup.default)('package.json', { + cwd: dir + }); + if (!packageJsonPath) { + return []; + } + const { dependencies = {}, devDependencies = {} } = require(packageJsonPath); + const deps = { + ...devDependencies, + ...dependencies + }; + return Object.keys(deps).reduce((events, plugin)=>{ + const version = deps[plugin]; + // Don't add deps without a version set + if (!version) { + return events; + } + events.push({ + eventName: EVENT_PLUGIN_PRESENT, + payload: { + packageName: plugin, + packageVersion: version + } + }); + return events; + }, []); + } catch (_) { + return []; + } +} + +//# sourceMappingURL=plugins.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/telemetry/events/swc-load-failure.js b/build/node_modules/next/dist/telemetry/events/swc-load-failure.js new file mode 100644 index 0000000..21f8b18 --- /dev/null +++ b/build/node_modules/next/dist/telemetry/events/swc-load-failure.js @@ -0,0 +1,55 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "eventSwcLoadFailure", { + enumerable: true, + get: function() { + return eventSwcLoadFailure; + } +}); +const _shared = require("../../trace/shared"); +const _packagejson = require("next/package.json"); +const EVENT_PLUGIN_PRESENT = 'NEXT_SWC_LOAD_FAILURE'; +async function eventSwcLoadFailure(event) { + const telemetry = _shared.traceGlobals.get('telemetry'); + // can't continue if telemetry isn't set + if (!telemetry) return; + let glibcVersion; + let installedSwcPackages; + try { + var _process_report; + // @ts-ignore + glibcVersion = (_process_report = process.report) == null ? void 0 : _process_report.getReport().header.glibcVersionRuntime; + } catch {} + try { + const pkgNames = Object.keys(_packagejson.optionalDependencies || {}).filter((pkg)=>pkg.startsWith('@next/swc')); + const installedPkgs = []; + for (const pkg of pkgNames){ + try { + const { version } = require(`${pkg}/package.json`); + installedPkgs.push(`${pkg}@${version}`); + } catch {} + } + if (installedPkgs.length > 0) { + installedSwcPackages = installedPkgs.sort().join(','); + } + } catch {} + telemetry.record({ + eventName: EVENT_PLUGIN_PRESENT, + payload: { + nextVersion: "16.2.6", + glibcVersion, + installedSwcPackages, + arch: process.arch, + platform: process.platform, + nodeVersion: process.versions.node, + wasm: event == null ? void 0 : event.wasm, + nativeBindingsErrorCode: event == null ? void 0 : event.nativeBindingsErrorCode + } + }); + // ensure this event is flushed before process exits + await telemetry.flush(); +} + +//# sourceMappingURL=swc-load-failure.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/telemetry/events/version.js b/build/node_modules/next/dist/telemetry/events/version.js new file mode 100644 index 0000000..656fc44 --- /dev/null +++ b/build/node_modules/next/dist/telemetry/events/version.js @@ -0,0 +1,66 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "eventCliSession", { + enumerable: true, + get: function() { + return eventCliSession; + } +}); +const EVENT_VERSION = 'NEXT_CLI_SESSION_STARTED'; +function eventCliSession(nextConfig, event) { + var _nextConfig_experimental_staleTimes, _nextConfig_experimental_staleTimes1, _nextConfig_reactCompiler, _nextConfig_reactCompiler1; + // This should be an invariant, if it fails our build tooling is broken. + if (typeof "16.2.6" !== 'string') { + return []; + } + const { images, i18n } = nextConfig || {}; + const payload = { + nextVersion: "16.2.6", + nodeVersion: process.version, + cliCommand: event.cliCommand, + isSrcDir: event.isSrcDir, + hasNowJson: event.hasNowJson, + isCustomServer: event.isCustomServer, + hasNextConfig: nextConfig.configOrigin !== 'default', + buildTarget: 'default', + hasWebpackConfig: typeof (nextConfig == null ? void 0 : nextConfig.webpack) === 'function', + hasBabelConfig: false, + imageEnabled: !!images, + imageFutureEnabled: !!images, + basePathEnabled: !!(nextConfig == null ? void 0 : nextConfig.basePath), + i18nEnabled: !!i18n, + locales: (i18n == null ? void 0 : i18n.locales) ? i18n.locales.join(',') : null, + localeDomainsCount: (i18n == null ? void 0 : i18n.domains) ? i18n.domains.length : null, + localeDetectionEnabled: !i18n ? null : i18n.localeDetection !== false, + imageDomainsCount: (images == null ? void 0 : images.domains) ? images.domains.length : null, + imageRemotePatternsCount: (images == null ? void 0 : images.remotePatterns) ? images.remotePatterns.length : null, + imageLocalPatternsCount: (images == null ? void 0 : images.localPatterns) ? images.localPatterns.length : null, + imageSizes: (images == null ? void 0 : images.imageSizes) ? images.imageSizes.join(',') : null, + imageQualities: (images == null ? void 0 : images.qualities) ? images.qualities.join(',') : null, + imageLoader: images == null ? void 0 : images.loader, + imageFormats: (images == null ? void 0 : images.formats) ? images.formats.join(',') : null, + nextConfigOutput: (nextConfig == null ? void 0 : nextConfig.output) || null, + trailingSlashEnabled: !!(nextConfig == null ? void 0 : nextConfig.trailingSlash), + reactStrictMode: !!(nextConfig == null ? void 0 : nextConfig.reactStrictMode), + webpackVersion: event.webpackVersion || null, + turboFlag: event.turboFlag || false, + isRspack: process.env.NEXT_RSPACK !== undefined, + appDir: event.appDir, + pagesDir: event.pagesDir, + staticStaleTime: ((_nextConfig_experimental_staleTimes = nextConfig.experimental.staleTimes) == null ? void 0 : _nextConfig_experimental_staleTimes.static) ?? null, + dynamicStaleTime: ((_nextConfig_experimental_staleTimes1 = nextConfig.experimental.staleTimes) == null ? void 0 : _nextConfig_experimental_staleTimes1.dynamic) ?? null, + reactCompiler: Boolean(nextConfig.reactCompiler), + reactCompilerCompilationMode: typeof nextConfig.reactCompiler !== 'boolean' ? ((_nextConfig_reactCompiler = nextConfig.reactCompiler) == null ? void 0 : _nextConfig_reactCompiler.compilationMode) ?? null : null, + reactCompilerPanicThreshold: typeof nextConfig.reactCompiler !== 'boolean' ? ((_nextConfig_reactCompiler1 = nextConfig.reactCompiler) == null ? void 0 : _nextConfig_reactCompiler1.panicThreshold) ?? null : null + }; + return [ + { + eventName: EVENT_VERSION, + payload + } + ]; +} + +//# sourceMappingURL=version.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/telemetry/flush-telemetry.js b/build/node_modules/next/dist/telemetry/flush-telemetry.js new file mode 100644 index 0000000..b971445 --- /dev/null +++ b/build/node_modules/next/dist/telemetry/flush-telemetry.js @@ -0,0 +1,19 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "flushTelemetry", { + enumerable: true, + get: function() { + return flushTelemetry; + } +}); +const _shared = require("../trace/shared"); +async function flushTelemetry() { + let telemetry = _shared.traceGlobals.get('telemetry'); + if (telemetry) { + await telemetry.flush(); + } +} + +//# sourceMappingURL=flush-telemetry.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/telemetry/post-telemetry-payload.js b/build/node_modules/next/dist/telemetry/post-telemetry-payload.js new file mode 100644 index 0000000..9d41bad --- /dev/null +++ b/build/node_modules/next/dist/telemetry/post-telemetry-payload.js @@ -0,0 +1,48 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "postNextTelemetryPayload", { + enumerable: true, + get: function() { + return postNextTelemetryPayload; + } +}); +const _asyncretry = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/async-retry")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function postNextTelemetryPayload(payload, signal) { + if (!signal && 'timeout' in AbortSignal) { + signal = AbortSignal.timeout(5000); + } + return (0, _asyncretry.default)(()=>fetch('https://telemetry.nextjs.org/api/v1/record', { + method: 'POST', + body: JSON.stringify(payload), + headers: { + 'content-type': 'application/json' + }, + signal + }).then((res)=>{ + if (!res.ok) { + const err = Object.defineProperty(new Error(res.statusText), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + err.response = res; + throw err; + } + }), { + minTimeout: 500, + retries: 1, + factor: 1 + }).catch(()=>{ + // We swallow errors when telemetry cannot be sent + })// Ensure promise is voided + .then(()=>{}, ()=>{}); +} + +//# sourceMappingURL=post-telemetry-payload.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/telemetry/project-id.js b/build/node_modules/next/dist/telemetry/project-id.js new file mode 100644 index 0000000..1671238 --- /dev/null +++ b/build/node_modules/next/dist/telemetry/project-id.js @@ -0,0 +1,48 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getRawProjectId", { + enumerable: true, + get: function() { + return getRawProjectId; + } +}); +const _child_process = require("child_process"); +// Q: Why does Next.js need a project ID? Why is it looking at my git remote? +// A: +// Next.js' telemetry is and always will be completely anonymous. Because of +// this, we need a way to differentiate different projects to track feature +// usage accurately. For example, to prevent a feature from appearing to be +// constantly `used` and then `unused` when switching between local projects. +// To reiterate, +// we **never** can read your actual git remote. The value is hashed one-way +// with random salt data, making it impossible for us to reverse or try to +// guess the remote by re-computing hashes. +async function _getProjectIdByGit() { + try { + let resolve, reject; + const promise = new Promise((res, rej)=>{ + resolve = res; + reject = rej; + }); + (0, _child_process.exec)(`git config --local --get remote.origin.url`, { + timeout: 1000, + windowsHide: true + }, (error, stdout)=>{ + if (error) { + reject(error); + return; + } + resolve(stdout); + }); + return String(await promise).trim(); + } catch (_) { + return null; + } +} +async function getRawProjectId() { + return await _getProjectIdByGit() || process.env.REPOSITORY_URL || process.cwd(); +} + +//# sourceMappingURL=project-id.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/telemetry/storage.js b/build/node_modules/next/dist/telemetry/storage.js new file mode 100644 index 0000000..07994b1 --- /dev/null +++ b/build/node_modules/next/dist/telemetry/storage.js @@ -0,0 +1,301 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "Telemetry", { + enumerable: true, + get: function() { + return Telemetry; + } +}); +const _picocolors = require("../lib/picocolors"); +const _conf = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/conf")); +const _crypto = require("crypto"); +const _isdocker = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/is-docker")); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _anonymousmeta = require("./anonymous-meta"); +const _ciinfo = /*#__PURE__*/ _interop_require_wildcard(require("../server/ci-info")); +const _posttelemetrypayload = require("./post-telemetry-payload"); +const _projectid = require("./project-id"); +const _ponyfill = require("next/dist/compiled/@edge-runtime/ponyfill"); +const _fs = /*#__PURE__*/ _interop_require_default(require("fs")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +// This is the key that stores whether or not telemetry is enabled or disabled. +const TELEMETRY_KEY_ENABLED = 'telemetry.enabled'; +// This is the key that specifies when the user was informed about anonymous +// telemetry collection. +const TELEMETRY_KEY_NOTIFY_DATE = 'telemetry.notifiedAt'; +// This is a quasi-persistent identifier used to dedupe recurring events. It's +// generated from random data and completely anonymous. +const TELEMETRY_KEY_ID = `telemetry.anonymousId`; +// This is the cryptographic salt that is included within every hashed value. +// This salt value is never sent to us, ensuring privacy and the one-way nature +// of the hash (prevents dictionary lookups of pre-computed hashes). +// See the `oneWayHash` function. +const TELEMETRY_KEY_SALT = `telemetry.salt`; +function getStorageDirectory(distDir) { + const isLikelyEphemeral = _ciinfo.isCI || (0, _isdocker.default)(); + if (isLikelyEphemeral) { + return _path.default.join(distDir, 'cache'); + } + return undefined; +} +class Telemetry { + constructor({ distDir }){ + this.notify = ()=>{ + if (this.isDisabled || !this.conf) { + return; + } + // The end-user has already been notified about our telemetry integration. We + // don't need to constantly annoy them about it. + // We will re-inform users about the telemetry if significant changes are + // ever made. + if (this.conf.get(TELEMETRY_KEY_NOTIFY_DATE, '')) { + return; + } + this.conf.set(TELEMETRY_KEY_NOTIFY_DATE, Date.now().toString()); + console.log(`${(0, _picocolors.magenta)((0, _picocolors.bold)('Attention'))}: Next.js now collects completely anonymous telemetry regarding usage.`); + console.log(`This information is used to shape Next.js' roadmap and prioritize features.`); + console.log(`You can learn more, including how to opt-out if you'd not like to participate in this anonymous program, by visiting the following URL:`); + console.log((0, _picocolors.cyan)('https://nextjs.org/telemetry')); + console.log(); + }; + this.setEnabled = (_enabled)=>{ + const enabled = !!_enabled; + this.conf && this.conf.set(TELEMETRY_KEY_ENABLED, enabled); + return this.conf && this.conf.path; + }; + this.oneWayHash = (payload)=>{ + const hash = (0, _crypto.createHash)('sha256'); + // Always prepend the payload value with salt. This ensures the hash is truly + // one-way. + hash.update(this.salt); + // Update is an append operation, not a replacement. The salt from the prior + // update is still present! + hash.update(payload); + return hash.digest('hex'); + }; + this.record = (_events, deferred)=>{ + const prom = (deferred ? // flushDetached we can skip starting the initial + // submitRecord which will then be cancelled + new Promise((resolve)=>resolve({ + isFulfilled: true, + isRejected: false, + value: _events + })) : this.submitRecord(_events)).then((value)=>({ + isFulfilled: true, + isRejected: false, + value + })).catch((reason)=>({ + isFulfilled: false, + isRejected: true, + reason + }))// Acts as `Promise#finally` because `catch` transforms the error + .then((res)=>{ + // Clean up the event to prevent unbounded `Set` growth + if (!deferred) { + this.queue.delete(prom); + } + return res; + }); + prom._events = Array.isArray(_events) ? _events : [ + _events + ]; + prom._controller = prom._controller; + // Track this `Promise` so we can flush pending events + this.queue.add(prom); + return prom; + }; + this.flush = async ()=>{ + return Promise.all(this.queue).catch(()=>null); + }; + // writes current events to disk and spawns separate + // detached process to submit the records without blocking + // the main process from exiting + this.flushDetached = (mode, dir)=>{ + const allEvents = []; + this.queue.forEach((item)=>{ + try { + var _item__controller; + (_item__controller = item._controller) == null ? void 0 : _item__controller.abort(); + allEvents.push(...item._events); + } catch (_) { + // if we fail to abort ignore this event + } + }); + if (allEvents.length === 0) { + // No events to flush + return; + } + _fs.default.mkdirSync(this.distDir, { + recursive: true + }); + // Use unique filename per process to avoid race conditions between parent/child + const eventsFile = `_events_${process.pid}.json`; + _fs.default.writeFileSync(_path.default.join(this.distDir, eventsFile), JSON.stringify(allEvents)); + // Note: cross-spawn is not used here as it causes + // a new command window to appear when we don't want it to + const child_process = require('child_process'); + // we use spawnSync when debugging to ensure logs are piped + // correctly to stdout/stderr + const spawn = this.NEXT_TELEMETRY_DEBUG ? child_process.spawnSync : child_process.spawn; + spawn(process.execPath, [ + require.resolve('./detached-flush'), + mode, + dir, + eventsFile + ], { + detached: !this.NEXT_TELEMETRY_DEBUG, + windowsHide: true, + shell: false, + ...this.NEXT_TELEMETRY_DEBUG ? { + stdio: 'inherit' + } : {} + }); + }; + this.submitRecord = async (_events)=>{ + let events; + if (Array.isArray(_events)) { + events = _events; + } else { + events = [ + _events + ]; + } + if (events.length < 1) { + return Promise.resolve(); + } + if (this.NEXT_TELEMETRY_DEBUG) { + // Return a promise that resolves after logging to ensure the output + // is captured before the process exits (e.g., during flushDetached) + return new Promise((resolve)=>{ + setTimeout(()=>{ + // Print to standard error to simplify selecting the output + events.forEach(({ eventName, payload })=>console.error(`[telemetry] ` + JSON.stringify({ + eventName, + payload + }, null, 2))); + resolve(undefined); + }, 100); + }); + } + // Skip recording telemetry if the feature is disabled + if (this.isDisabled) { + return Promise.resolve(); + } + const postController = new _ponyfill.AbortController(); + const res = (0, _posttelemetrypayload.postNextTelemetryPayload)({ + context: { + anonymousId: this.anonymousId, + projectId: await this.getProjectId(), + sessionId: this.sessionId + }, + meta: (0, _anonymousmeta.getAnonymousMeta)(), + events: events.map(({ eventName, payload })=>({ + eventName, + fields: payload + })) + }, postController.signal); + res._controller = postController; + return res; + }; + // Read in the constructor so that .env can be loaded before reading + const { NEXT_TELEMETRY_DISABLED, NEXT_TELEMETRY_DEBUG } = process.env; + this.NEXT_TELEMETRY_DISABLED = NEXT_TELEMETRY_DISABLED; + this.NEXT_TELEMETRY_DEBUG = NEXT_TELEMETRY_DEBUG; + this.distDir = distDir; + const storageDirectory = getStorageDirectory(distDir); + try { + // `conf` incorrectly throws a permission error during initialization + // instead of waiting for first use. We need to handle it, otherwise the + // process may crash. + this.conf = new _conf.default({ + projectName: 'nextjs', + cwd: storageDirectory + }); + } catch (_) { + this.conf = null; + } + this.sessionId = (0, _crypto.randomBytes)(32).toString('hex'); + this.queue = new Set(); + this.notify(); + } + get anonymousId() { + const val = this.conf && this.conf.get(TELEMETRY_KEY_ID); + if (val) { + return val; + } + const generated = (0, _crypto.randomBytes)(32).toString('hex'); + this.conf && this.conf.set(TELEMETRY_KEY_ID, generated); + return generated; + } + get salt() { + const val = this.conf && this.conf.get(TELEMETRY_KEY_SALT); + if (val) { + return val; + } + const generated = (0, _crypto.randomBytes)(16).toString('hex'); + this.conf && this.conf.set(TELEMETRY_KEY_SALT, generated); + return generated; + } + get isDisabled() { + if (!!this.NEXT_TELEMETRY_DISABLED || !this.conf) { + return true; + } + return this.conf.get(TELEMETRY_KEY_ENABLED, true) === false; + } + get isEnabled() { + return !this.NEXT_TELEMETRY_DISABLED && !!this.conf && this.conf.get(TELEMETRY_KEY_ENABLED, true) !== false; + } + async getProjectId() { + this.loadProjectId = this.loadProjectId || (0, _projectid.getRawProjectId)(); + return this.oneWayHash(await this.loadProjectId); + } +} + +//# sourceMappingURL=storage.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/trace/index.js b/build/node_modules/next/dist/trace/index.js new file mode 100644 index 0000000..09c3f59 --- /dev/null +++ b/build/node_modules/next/dist/trace/index.js @@ -0,0 +1,58 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + Span: null, + SpanStatus: null, + exportTraceState: null, + flushAllTraces: null, + getTraceEvents: null, + hrtimeToEpochNanoseconds: null, + initializeTraceState: null, + recordTraceEvents: null, + setGlobal: null, + trace: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + Span: function() { + return _trace.Span; + }, + SpanStatus: function() { + return _trace.SpanStatus; + }, + exportTraceState: function() { + return _trace.exportTraceState; + }, + flushAllTraces: function() { + return _trace.flushAllTraces; + }, + getTraceEvents: function() { + return _trace.getTraceEvents; + }, + hrtimeToEpochNanoseconds: function() { + return _trace.hrtimeToEpochNanoseconds; + }, + initializeTraceState: function() { + return _trace.initializeTraceState; + }, + recordTraceEvents: function() { + return _trace.recordTraceEvents; + }, + setGlobal: function() { + return _shared.setGlobal; + }, + trace: function() { + return _trace.trace; + } +}); +const _trace = require("./trace"); +const _shared = require("./shared"); + +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/trace/report/index.js b/build/node_modules/next/dist/trace/report/index.js new file mode 100644 index 0000000..d7434dc --- /dev/null +++ b/build/node_modules/next/dist/trace/report/index.js @@ -0,0 +1,37 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "reporter", { + enumerable: true, + get: function() { + return reporter; + } +}); +const _totelemetry = /*#__PURE__*/ _interop_require_default(require("./to-telemetry")); +const _tojson = /*#__PURE__*/ _interop_require_default(require("./to-json")); +const _tojsonbuild = /*#__PURE__*/ _interop_require_default(require("./to-json-build")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +class MultiReporter { + constructor(reporters){ + this.reporters = []; + this.reporters = reporters; + } + async flushAll(opts) { + await Promise.all(this.reporters.map((reporter)=>reporter.flushAll(opts))); + } + report(event) { + this.reporters.forEach((reporter)=>reporter.report(event)); + } +} +const reporter = new MultiReporter([ + _tojson.default, + _tojsonbuild.default, + _totelemetry.default +]); + +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/trace/report/to-json-build.js b/build/node_modules/next/dist/trace/report/to-json-build.js new file mode 100644 index 0000000..ce42778 --- /dev/null +++ b/build/node_modules/next/dist/trace/report/to-json-build.js @@ -0,0 +1,40 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "default", { + enumerable: true, + get: function() { + return _default; + } +}); +const _shared = require("../shared"); +const _constants = require("../../shared/lib/constants"); +const _tojson = require("./to-json"); +const allowlistedEvents = new Set([ + 'next-build', + 'run-turbopack', + 'run-webpack', + 'run-typescript', + 'run-eslint', + 'static-check', + 'collect-build-traces', + 'static-generation', + 'output-export-full-static-export', + 'adapter-handle-build-complete', + 'output-standalone', + 'telemetry-flush', + 'turbopack-build-events', + 'turbopack-persistence', + 'turbopack-compaction' +]); +const _default = (0, _tojson.createJsonReporter)({ + filename: 'trace-build', + sizeLimit: Infinity, + filter: (event)=>{ + const phase = _shared.traceGlobals.get('phase'); + return phase === _constants.PHASE_PRODUCTION_BUILD && allowlistedEvents.has(event.name); + } +}); + +//# sourceMappingURL=to-json-build.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/trace/report/to-json.js b/build/node_modules/next/dist/trace/report/to-json.js new file mode 100644 index 0000000..b79a462 --- /dev/null +++ b/build/node_modules/next/dist/trace/report/to-json.js @@ -0,0 +1,165 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + batcher: null, + createJsonReporter: null, + default: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + batcher: function() { + return batcher; + }, + createJsonReporter: function() { + return createJsonReporter; + }, + default: function() { + return _default; + } +}); +const _shared = require("../shared"); +const _fs = /*#__PURE__*/ _interop_require_default(require("fs")); +const _path = /*#__PURE__*/ _interop_require_default(require("path")); +const _constants = require("../../shared/lib/constants"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function batcher(reportEvents) { + const events = []; + // Promise queue to ensure events are always sent on flushAll + const queue = new Set(); + return { + flushAll: async ()=>{ + await Promise.all(queue); + if (events.length > 0) { + await reportEvents(events); + events.length = 0; + } + }, + report: (event)=>{ + events.push(event); + if (events.length > 100) { + const evts = events.slice(); + events.length = 0; + const report = reportEvents(evts); + queue.add(report); + report.then(()=>queue.delete(report)); + } + } + }; +} +const writeStreamOptions = { + flags: 'a', + encoding: 'utf8' +}; +class RotatingWriteStream { + constructor(file, sizeLimit){ + this.file = file; + this.size = 0; + this.sizeLimit = sizeLimit; + this.createWriteStream(); + } + createWriteStream() { + this.writeStream = _fs.default.createWriteStream(this.file, writeStreamOptions); + } + // Recreate the file + async rotate() { + await this.end(); + try { + _fs.default.unlinkSync(this.file); + } catch (err) { + // It's fine if the file does not exist yet + if (err.code !== 'ENOENT') { + throw err; + } + } + this.size = 0; + this.createWriteStream(); + this.rotatePromise = undefined; + } + async write(data) { + if (this.rotatePromise) await this.rotatePromise; + this.size += data.length; + if (this.size > this.sizeLimit) { + await (this.rotatePromise = this.rotate()); + } + if (!this.writeStream.write(data, 'utf8')) { + if (this.drainPromise === undefined) { + this.drainPromise = new Promise((resolve, _reject)=>{ + this.writeStream.once('drain', ()=>{ + this.drainPromise = undefined; + resolve(); + }); + }); + } + await this.drainPromise; + } + } + end() { + return new Promise((resolve)=>{ + this.writeStream.end(resolve); + }); + } +} +function createJsonReporter(options) { + let writeStream; + let batch; + function report(event) { + if (options.filter && !options.filter(event)) { + return; + } + const distDir = _shared.traceGlobals.get('distDir'); + const phase = _shared.traceGlobals.get('phase'); + if (!distDir || !phase) { + return; + } + if (!batch) { + batch = batcher(async (events)=>{ + if (!writeStream) { + await _fs.default.promises.mkdir(distDir, { + recursive: true + }); + const file = _path.default.join(distDir, options.filename); + const limit = typeof options.sizeLimit === 'function' ? options.sizeLimit(phase) : options.sizeLimit; + writeStream = new RotatingWriteStream(file, limit); + } + const eventsJson = JSON.stringify(events); + try { + await writeStream.write(eventsJson + '\n'); + } catch (err) { + console.log(err); + } + }); + } + batch.report({ + ...event, + traceId: _shared.traceId + }); + } + return { + flushAll: (opts)=>batch ? batch.flushAll().then(()=>{ + const phase = _shared.traceGlobals.get('phase'); + // Only end writeStream when manually flushing in production + if ((opts == null ? void 0 : opts.end) || phase !== _constants.PHASE_DEVELOPMENT_SERVER) { + return writeStream.end(); + } + }) : undefined, + report + }; +} +const _default = createJsonReporter({ + filename: 'trace', + sizeLimit: (phase)=>// Development is limited to 50MB, production is unlimited + phase === _constants.PHASE_DEVELOPMENT_SERVER ? 52428800 : Infinity +}); + +//# sourceMappingURL=to-json.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/trace/report/to-telemetry.js b/build/node_modules/next/dist/trace/report/to-telemetry.js new file mode 100644 index 0000000..473cf0d --- /dev/null +++ b/build/node_modules/next/dist/trace/report/to-telemetry.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "default", { + enumerable: true, + get: function() { + return _default; + } +}); +const _shared = require("../shared"); +const TRACE_EVENT_ACCESSLIST = new Map(Object.entries({ + 'webpack-invalidated': 'WEBPACK_INVALIDATED' +})); +const reportToTelemetry = ({ name, duration })=>{ + const eventName = TRACE_EVENT_ACCESSLIST.get(name); + if (!eventName) { + return; + } + const telemetry = _shared.traceGlobals.get('telemetry'); + if (!telemetry) { + return; + } + telemetry.record({ + eventName, + payload: { + durationInMicroseconds: duration + } + }); +}; +const _default = { + flushAll: ()=>{}, + report: reportToTelemetry +}; + +//# sourceMappingURL=to-telemetry.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/trace/shared.js b/build/node_modules/next/dist/trace/shared.js new file mode 100644 index 0000000..8429825 --- /dev/null +++ b/build/node_modules/next/dist/trace/shared.js @@ -0,0 +1,39 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + setGlobal: null, + traceGlobals: null, + traceId: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + setGlobal: function() { + return setGlobal; + }, + traceGlobals: function() { + return traceGlobals; + }, + traceId: function() { + return traceId; + } +}); +const _nodecrypto = require("node:crypto"); +let _traceGlobals = global._traceGlobals; +if (!_traceGlobals) { + _traceGlobals = new Map(); +} +global._traceGlobals = _traceGlobals; +const traceGlobals = _traceGlobals; +const setGlobal = (key, val)=>{ + traceGlobals.set(key, val); +}; +const traceId = process.env.TRACE_ID || process.env.NEXT_PRIVATE_TRACE_ID || (0, _nodecrypto.randomBytes)(8).toString('hex'); + +//# sourceMappingURL=shared.js.map \ No newline at end of file diff --git a/build/node_modules/next/dist/trace/trace.js b/build/node_modules/next/dist/trace/trace.js new file mode 100644 index 0000000..6304a8c --- /dev/null +++ b/build/node_modules/next/dist/trace/trace.js @@ -0,0 +1,211 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + Span: null, + SpanStatus: null, + clearTraceEvents: null, + exportTraceState: null, + flushAllTraces: null, + getTraceEvents: null, + hrtimeToEpochNanoseconds: null, + initializeTraceState: null, + recordTraceEvents: null, + trace: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + Span: function() { + return Span; + }, + SpanStatus: function() { + return SpanStatus; + }, + clearTraceEvents: function() { + return clearTraceEvents; + }, + exportTraceState: function() { + return exportTraceState; + }, + flushAllTraces: function() { + return flushAllTraces; + }, + getTraceEvents: function() { + return getTraceEvents; + }, + hrtimeToEpochNanoseconds: function() { + return hrtimeToEpochNanoseconds; + }, + initializeTraceState: function() { + return initializeTraceState; + }, + recordTraceEvents: function() { + return recordTraceEvents; + }, + trace: function() { + return trace; + } +}); +const _report = require("./report"); +const NUM_OF_MICROSEC_IN_NANOSEC = BigInt('1000'); +const NUM_OF_MILLISEC_IN_NANOSEC = BigInt('1000000'); +let count = 0; +const getId = ()=>{ + count++; + return count; +}; +let defaultParentSpanId; +let shouldSaveTraceEvents; +let savedTraceEvents = []; +const RECORD_SPAN_THRESHOLD_MS = parseInt(process.env.NEXT_TRACE_SPAN_THRESHOLD_MS ?? '-1'); +var SpanStatus = /*#__PURE__*/ function(SpanStatus) { + SpanStatus["Started"] = "started"; + SpanStatus["Stopped"] = "stopped"; + return SpanStatus; +}({}); +class Span { + constructor({ name, parentId, attrs, startTime }){ + this.name = name; + this.parentId = parentId ?? defaultParentSpanId; + this.attrs = attrs ? { + ...attrs + } : {}; + this.status = "started"; + this.id = getId(); + this._start = startTime || process.hrtime.bigint(); + // hrtime cannot be used to reconstruct tracing span's actual start time + // since it does not have relation to clock time: + // `These times are relative to an arbitrary time in the past, and not related to the time of day and therefore not subject to clock drift` + // https://nodejs.org/api/process.html#processhrtimetime + // Capturing current datetime as additional metadata for external reconstruction. + this.now = Date.now(); + } + // Durations are reported as microseconds. This gives 1000x the precision + // of something like Date.now(), which reports in milliseconds. + // Additionally, ~285 years can be safely represented as microseconds as + // a float64 in both JSON and JavaScript. + stop(stopTime) { + if (this.status === "stopped") { + // Don't report the same span twice. + // TODO: In the future this should throw as `.stop()` shouldn't be called multiple times. + return; + } + const end = stopTime || process.hrtime.bigint(); + const duration = (end - this._start) / NUM_OF_MICROSEC_IN_NANOSEC; + this.status = "stopped"; + if (duration > Number.MAX_SAFE_INTEGER) { + throw Object.defineProperty(new Error(`Duration is too long to express as float64: ${duration}`), "__NEXT_ERROR_CODE", { + value: "E1030", + enumerable: false, + configurable: true + }); + } + const timestamp = this._start / NUM_OF_MICROSEC_IN_NANOSEC; + const traceEvent = { + name: this.name, + duration: Number(duration), + timestamp: Number(timestamp), + id: this.id, + parentId: this.parentId, + tags: this.attrs, + startTime: this.now + }; + if (duration > RECORD_SPAN_THRESHOLD_MS * 1000) { + _report.reporter.report(traceEvent); + if (shouldSaveTraceEvents) { + savedTraceEvents.push(traceEvent); + } + } + } + traceChild(name, attrs) { + return new Span({ + name, + parentId: this.id, + attrs + }); + } + manualTraceChild(name, // Start time in nanoseconds since epoch. + startTime, // Stop time in nanoseconds since epoch. + stopTime, attrs) { + // We need to convert the time info to the same base as hrtime since that is used usually. + const correction = process.hrtime.bigint() - BigInt(Date.now()) * NUM_OF_MILLISEC_IN_NANOSEC; + const span = new Span({ + name, + parentId: this.id, + attrs, + startTime: startTime ? startTime + correction : process.hrtime.bigint() + }); + span.stop(stopTime ? stopTime + correction : process.hrtime.bigint()); + } + getId() { + return this.id; + } + setAttribute(key, value) { + this.attrs[key] = value; + } + traceFn(fn) { + try { + return fn(this); + } catch (e) { + this.attrs['failed'] = true; + throw e; + } finally{ + this.stop(); + } + } + async traceAsyncFn(fn) { + try { + return await fn(this); + } catch (e) { + this.attrs['failed'] = true; + throw e; + } finally{ + this.stop(); + } + } +} +const trace = (name, parentId, attrs)=>{ + return new Span({ + name, + parentId, + attrs + }); +}; +const flushAllTraces = (opts)=>_report.reporter.flushAll(opts); +const exportTraceState = ()=>({ + defaultParentSpanId, + lastId: count, + shouldSaveTraceEvents + }); +const initializeTraceState = (state)=>{ + count = state.lastId; + defaultParentSpanId = state.defaultParentSpanId; + shouldSaveTraceEvents = state.shouldSaveTraceEvents; +}; +function getTraceEvents() { + return savedTraceEvents; +} +function recordTraceEvents(events) { + for (const traceEvent of events){ + _report.reporter.report(traceEvent); + if (traceEvent.id > count) { + count = traceEvent.id + 1; + } + } + if (shouldSaveTraceEvents) { + savedTraceEvents.push(...events); + } +} +const clearTraceEvents = ()=>savedTraceEvents = []; +function hrtimeToEpochNanoseconds(hrtimeValue) { + const offset = BigInt(Date.now()) * NUM_OF_MILLISEC_IN_NANOSEC - process.hrtime.bigint(); + return hrtimeValue + offset; +} + +//# sourceMappingURL=trace.js.map \ No newline at end of file diff --git a/build/node_modules/next/package.json b/build/node_modules/next/package.json new file mode 100644 index 0000000..45fefa5 --- /dev/null +++ b/build/node_modules/next/package.json @@ -0,0 +1,378 @@ +{ + "name": "next", + "version": "16.2.6", + "description": "The React Framework", + "main": "./dist/server/next.js", + "license": "MIT", + "repository": "vercel/next.js", + "bugs": "https://github.com/vercel/next.js/issues", + "homepage": "https://nextjs.org", + "types": "index.d.ts", + "files": [ + "dist", + "app.js", + "app.d.ts", + "babel.js", + "babel.d.ts", + "client.js", + "client.d.ts", + "compat", + "cache.js", + "cache.d.ts", + "constants.js", + "constants.d.ts", + "document.js", + "document.d.ts", + "dynamic.js", + "dynamic.d.ts", + "error.js", + "error.d.ts", + "future", + "legacy", + "script.js", + "script.d.ts", + "server.js", + "server.d.ts", + "head.js", + "head.d.ts", + "image.js", + "image.d.ts", + "link.js", + "link.d.ts", + "form.js", + "form.d.ts", + "router.js", + "router.d.ts", + "jest.js", + "jest.d.ts", + "og.js", + "og.d.ts", + "root-params.js", + "root-params.d.ts", + "types.d.ts", + "types.js", + "index.d.ts", + "types/global.d.ts", + "types/compiled.d.ts", + "image-types/global.d.ts", + "navigation-types/navigation.d.ts", + "navigation-types/compat/navigation.d.ts", + "font", + "navigation.js", + "navigation.d.ts", + "headers.js", + "headers.d.ts", + "navigation-types", + "web-vitals.js", + "web-vitals.d.ts", + "experimental/testing/server.js", + "experimental/testing/server.d.ts", + "experimental/testmode/playwright.js", + "experimental/testmode/playwright.d.ts", + "experimental/testmode/playwright/msw.js", + "experimental/testmode/playwright/msw.d.ts", + "experimental/testmode/proxy.js", + "experimental/testmode/proxy.d.ts" + ], + "bin": { + "next": "./dist/bin/next" + }, + "scripts": { + "dev": "cross-env NEXT_SERVER_NO_MANGLE=1 taskr", + "build": "taskr release", + "prepublishOnly": "cd ../../ && turbo run build", + "types": "tsc --project tsconfig.build.json --declaration --emitDeclarationOnly --stripInternal --declarationDir dist", + "typescript": "tsec --noEmit", + "ncc-compiled": "taskr ncc", + "storybook": "BROWSER=none storybook dev -p 6006", + "build-storybook": "storybook build", + "test-storybook": "test-storybook" + }, + "taskr": { + "requires": [ + "./taskfile-webpack.js", + "./taskfile-ncc.js", + "./taskfile-swc.js", + "./taskfile-watch.js" + ] + }, + "dependencies": { + "@next/env": "16.2.6", + "@swc/helpers": "0.5.15", + "baseline-browser-mapping": "^2.9.19", + "caniuse-lite": "^1.0.30001579", + "postcss": "8.4.31", + "styled-jsx": "5.1.6" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.51.1", + "babel-plugin-react-compiler": "*", + "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "babel-plugin-react-compiler": { + "optional": true + }, + "sass": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + } + }, + "optionalDependencies": { + "sharp": "^0.34.5", + "@next/swc-darwin-arm64": "16.2.6", + "@next/swc-darwin-x64": "16.2.6", + "@next/swc-linux-arm64-gnu": "16.2.6", + "@next/swc-linux-arm64-musl": "16.2.6", + "@next/swc-linux-x64-gnu": "16.2.6", + "@next/swc-linux-x64-musl": "16.2.6", + "@next/swc-win32-arm64-msvc": "16.2.6", + "@next/swc-win32-x64-msvc": "16.2.6" + }, + "devDependencies": { + "@babel/core": "7.26.10", + "@babel/eslint-parser": "7.24.6", + "@babel/generator": "7.27.0", + "@babel/plugin-syntax-bigint": "7.8.3", + "@babel/plugin-syntax-dynamic-import": "7.8.3", + "@babel/plugin-syntax-import-attributes": "7.26.0", + "@babel/plugin-syntax-jsx": "7.25.9", + "@babel/plugin-syntax-typescript": "7.25.4", + "@babel/plugin-transform-class-properties": "7.25.9", + "@babel/plugin-transform-export-namespace-from": "7.25.9", + "@babel/plugin-transform-modules-commonjs": "7.26.3", + "@babel/plugin-transform-numeric-separator": "7.25.9", + "@babel/plugin-transform-object-rest-spread": "7.25.9", + "@babel/plugin-transform-runtime": "7.26.10", + "@babel/preset-env": "7.26.9", + "@babel/preset-react": "7.26.3", + "@babel/preset-typescript": "7.27.0", + "@babel/runtime": "7.27.0", + "@babel/traverse": "7.27.0", + "@babel/types": "7.27.0", + "@base-ui-components/react": "1.0.0-beta.2", + "@capsizecss/metrics": "3.4.0", + "@edge-runtime/cookies": "6.0.0", + "@edge-runtime/ponyfill": "4.0.0", + "@edge-runtime/primitives": "6.0.0", + "@hapi/accept": "5.0.2", + "@jest/transform": "29.5.0", + "@jest/types": "29.5.0", + "@modelcontextprotocol/sdk": "1.18.1", + "@mswjs/interceptors": "0.23.0", + "@napi-rs/triples": "1.2.0", + "@next/font": "16.2.6", + "@next/polyfill-module": "16.2.6", + "@next/polyfill-nomodule": "16.2.6", + "@next/react-refresh-utils": "16.2.6", + "@next/swc": "16.2.6", + "@opentelemetry/api": "1.6.0", + "@playwright/test": "1.58.2", + "@rspack/core": "1.6.7", + "@storybook/addon-a11y": "8.6.0", + "@storybook/addon-essentials": "8.6.0", + "@storybook/addon-interactions": "8.6.0", + "@storybook/addon-webpack5-compiler-swc": "3.0.0", + "@storybook/blocks": "8.6.0", + "@storybook/react": "8.6.0", + "@storybook/react-webpack5": "8.6.0", + "@storybook/test": "8.6.0", + "@storybook/test-runner": "0.21.0", + "@swc/core": "1.11.24", + "@swc/types": "0.1.7", + "@taskr/clear": "1.1.0", + "@taskr/esnext": "1.1.0", + "@types/babel__code-frame": "7.0.6", + "@types/babel__core": "7.20.5", + "@types/babel__generator": "7.27.0", + "@types/babel__template": "7.4.4", + "@types/babel__traverse": "7.20.7", + "@types/bytes": "3.1.1", + "@types/ci-info": "2.0.0", + "@types/compression": "0.0.36", + "@types/content-disposition": "0.5.4", + "@types/content-type": "1.1.3", + "@types/cookie": "0.3.3", + "@types/cross-spawn": "6.0.0", + "@types/debug": "4.1.5", + "@types/express-serve-static-core": "4.17.33", + "@types/fresh": "0.5.0", + "@types/glob": "7.1.1", + "@types/jsonwebtoken": "9.0.0", + "@types/lodash": "4.14.198", + "@types/lodash.curry": "4.1.6", + "@types/path-to-regexp": "1.7.0", + "@types/picomatch": "2.3.3", + "@types/platform": "1.3.4", + "@types/react": "19.0.8", + "@types/react-dom": "19.0.3", + "@types/react-is": "18.2.4", + "@types/semver": "7.3.1", + "@types/send": "0.14.4", + "@types/serve-handler": "6.1.4", + "@types/shell-quote": "1.7.1", + "@types/text-table": "0.2.1", + "@types/ua-parser-js": "0.7.36", + "@types/webpack-sources1": "npm:@types/webpack-sources@0.1.5", + "@types/ws": "8.2.0", + "@vercel/ncc": "0.34.0", + "@vercel/nft": "0.27.1", + "@vercel/routing-utils": "5.2.0", + "@vercel/turbopack-ecmascript-runtime": "*", + "acorn": "8.14.0", + "anser": "1.4.9", + "arg": "4.1.0", + "assert": "2.0.0", + "async-retry": "1.2.3", + "async-sema": "3.0.0", + "axe-playwright": "2.0.3", + "babel-loader": "10.0.0", + "babel-plugin-react-compiler": "0.0.0-experimental-1371fcb-20260227", + "babel-plugin-transform-define": "2.0.0", + "babel-plugin-transform-react-remove-prop-types": "0.4.24", + "browserify-zlib": "0.2.0", + "browserslist": "4.28.1", + "buffer": "5.6.0", + "busboy": "1.6.0", + "bytes": "3.1.1", + "ci-info": "watson/ci-info#f43f6a1cefff47fb361c88cf4b943fdbcaafe540", + "cli-select": "1.1.2", + "client-only": "0.0.1", + "commander": "12.1.0", + "comment-json": "3.0.3", + "compression": "1.7.4", + "conf": "5.0.0", + "constants-browserify": "1.0.0", + "content-disposition": "0.5.3", + "content-type": "1.0.4", + "cookie": "0.4.1", + "cross-env": "6.0.3", + "cross-spawn": "7.0.3", + "crypto-browserify": "3.12.0", + "css-loader": "7.1.2", + "css.escape": "1.5.1", + "cssnano-preset-default": "7.0.6", + "data-uri-to-buffer": "3.0.1", + "debug": "4.1.1", + "devalue": "2.0.1", + "domain-browser": "4.19.0", + "edge-runtime": "4.0.1", + "events": "3.3.0", + "find-up": "4.1.0", + "fresh": "0.5.2", + "glob": "7.1.7", + "gzip-size": "5.1.1", + "http-proxy": "1.18.1", + "http-proxy-agent": "5.0.0", + "https-browserify": "1.0.0", + "https-proxy-agent": "5.0.1", + "icss-utils": "5.1.0", + "ignore-loader": "0.1.2", + "image-size": "1.2.1", + "ipaddr.js": "2.2.0", + "is-docker": "2.0.0", + "is-wsl": "2.2.0", + "jest-worker": "27.5.1", + "json5": "2.2.3", + "jsonwebtoken": "9.0.0", + "loader-runner": "4.3.0", + "loader-utils2": "npm:loader-utils@2.0.4", + "loader-utils3": "npm:loader-utils@3.1.3", + "lodash.curry": "4.1.1", + "mini-css-extract-plugin": "2.4.4", + "msw": "2.3.0", + "nanoid": "3.1.32", + "native-url": "0.3.4", + "neo-async": "2.6.1", + "node-html-parser": "5.3.3", + "ora": "4.0.4", + "os-browserify": "0.3.0", + "p-limit": "3.1.0", + "p-queue": "6.6.2", + "path-browserify": "1.0.1", + "path-to-regexp": "6.3.0", + "picomatch": "4.0.1", + "postcss-flexbugs-fixes": "5.0.2", + "postcss-modules-extract-imports": "3.0.0", + "postcss-modules-local-by-default": "4.2.0", + "postcss-modules-scope": "3.0.0", + "postcss-modules-values": "4.0.0", + "postcss-preset-env": "7.4.3", + "postcss-safe-parser": "6.0.0", + "postcss-scss": "4.0.3", + "postcss-value-parser": "4.2.0", + "process": "0.11.10", + "punycode": "2.1.1", + "querystring-es3": "0.2.1", + "raw-body": "2.4.1", + "react-refresh": "0.12.0", + "recast": "0.23.11", + "regenerator-runtime": "0.13.4", + "safe-stable-stringify": "2.5.0", + "sass-loader": "16.0.5", + "schema-utils2": "npm:schema-utils@2.7.1", + "schema-utils3": "npm:schema-utils@3.0.0", + "semver": "7.3.2", + "send": "0.18.0", + "serve-handler": "6.1.6", + "server-only": "0.0.1", + "setimmediate": "1.0.5", + "shell-quote": "1.7.3", + "source-map": "0.6.1", + "source-map-loader": "5.0.0", + "source-map08": "npm:source-map@0.8.0-beta.0", + "stacktrace-parser": "0.1.10", + "storybook": "8.6.0", + "stream-browserify": "3.0.0", + "stream-http": "3.1.1", + "strict-event-emitter": "0.5.0", + "string-hash": "1.1.3", + "string_decoder": "1.3.0", + "strip-ansi": "6.0.0", + "style-loader": "4.0.0", + "superstruct": "1.0.3", + "tar": "7.5.11", + "taskr": "1.1.0", + "terser": "5.27.0", + "terser-webpack-plugin": "5.3.9", + "text-table": "0.2.0", + "timers-browserify": "2.0.12", + "tty-browserify": "0.0.1", + "typescript": "5.9.2", + "ua-parser-js": "1.0.35", + "unistore": "3.4.1", + "util": "0.12.4", + "vm-browserify": "1.1.2", + "watchpack": "2.4.0", + "web-vitals": "4.2.1", + "webpack": "5.98.0", + "webpack-sources1": "npm:webpack-sources@1.4.3", + "webpack-sources3": "npm:webpack-sources@3.2.3", + "ws": "8.2.3", + "zod": "3.25.76", + "zod-validation-error": "3.4.0" + }, + "keywords": [ + "react", + "framework", + "nextjs", + "web", + "server", + "node", + "front-end", + "backend", + "cli", + "vercel" + ], + "engines": { + "node": ">=20.9.0" + } +} \ No newline at end of file diff --git a/build/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js b/build/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js new file mode 100644 index 0000000..d5cb282 --- /dev/null +++ b/build/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js @@ -0,0 +1,6603 @@ +/** + * @license React + * react-dom-server-legacy.browser.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/* + + + JS Implementation of MurmurHash3 (r136) (as of May 20, 2011) + + Copyright (c) 2011 Gary Court + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +*/ +"use strict"; +var React = require("react"), + ReactDOM = require("react-dom"); +function formatProdErrorMessage(code) { + var url = "https://react.dev/errors/" + code; + if (1 < arguments.length) { + url += "?args[]=" + encodeURIComponent(arguments[1]); + for (var i = 2; i < arguments.length; i++) + url += "&args[]=" + encodeURIComponent(arguments[i]); + } + return ( + "Minified React error #" + + code + + "; visit " + + url + + " for the full message or use the non-minified dev environment for full errors and additional helpful warnings." + ); +} +var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), + REACT_PORTAL_TYPE = Symbol.for("react.portal"), + REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), + REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), + REACT_PROFILER_TYPE = Symbol.for("react.profiler"), + REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), + REACT_CONTEXT_TYPE = Symbol.for("react.context"), + REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), + REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), + REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), + REACT_MEMO_TYPE = Symbol.for("react.memo"), + REACT_LAZY_TYPE = Symbol.for("react.lazy"), + REACT_SCOPE_TYPE = Symbol.for("react.scope"), + REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), + REACT_LEGACY_HIDDEN_TYPE = Symbol.for("react.legacy_hidden"), + REACT_MEMO_CACHE_SENTINEL = Symbol.for("react.memo_cache_sentinel"), + REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"), + MAYBE_ITERATOR_SYMBOL = Symbol.iterator; +function getIteratorFn(maybeIterable) { + if (null === maybeIterable || "object" !== typeof maybeIterable) return null; + maybeIterable = + (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) || + maybeIterable["@@iterator"]; + return "function" === typeof maybeIterable ? maybeIterable : null; +} +var isArrayImpl = Array.isArray; +function murmurhash3_32_gc(key, seed) { + var remainder = key.length & 3; + var bytes = key.length - remainder; + var h1 = seed; + for (seed = 0; seed < bytes; ) { + var k1 = + (key.charCodeAt(seed) & 255) | + ((key.charCodeAt(++seed) & 255) << 8) | + ((key.charCodeAt(++seed) & 255) << 16) | + ((key.charCodeAt(++seed) & 255) << 24); + ++seed; + k1 = + (3432918353 * (k1 & 65535) + + (((3432918353 * (k1 >>> 16)) & 65535) << 16)) & + 4294967295; + k1 = (k1 << 15) | (k1 >>> 17); + k1 = + (461845907 * (k1 & 65535) + (((461845907 * (k1 >>> 16)) & 65535) << 16)) & + 4294967295; + h1 ^= k1; + h1 = (h1 << 13) | (h1 >>> 19); + h1 = (5 * (h1 & 65535) + (((5 * (h1 >>> 16)) & 65535) << 16)) & 4294967295; + h1 = (h1 & 65535) + 27492 + ((((h1 >>> 16) + 58964) & 65535) << 16); + } + k1 = 0; + switch (remainder) { + case 3: + k1 ^= (key.charCodeAt(seed + 2) & 255) << 16; + case 2: + k1 ^= (key.charCodeAt(seed + 1) & 255) << 8; + case 1: + (k1 ^= key.charCodeAt(seed) & 255), + (k1 = + (3432918353 * (k1 & 65535) + + (((3432918353 * (k1 >>> 16)) & 65535) << 16)) & + 4294967295), + (k1 = (k1 << 15) | (k1 >>> 17)), + (h1 ^= + (461845907 * (k1 & 65535) + + (((461845907 * (k1 >>> 16)) & 65535) << 16)) & + 4294967295); + } + h1 ^= key.length; + h1 ^= h1 >>> 16; + h1 = + (2246822507 * (h1 & 65535) + (((2246822507 * (h1 >>> 16)) & 65535) << 16)) & + 4294967295; + h1 ^= h1 >>> 13; + h1 = + (3266489909 * (h1 & 65535) + (((3266489909 * (h1 >>> 16)) & 65535) << 16)) & + 4294967295; + return (h1 ^ (h1 >>> 16)) >>> 0; +} +var assign = Object.assign, + hasOwnProperty = Object.prototype.hasOwnProperty, + VALID_ATTRIBUTE_NAME_REGEX = RegExp( + "^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$" + ), + illegalAttributeNameCache = {}, + validatedAttributeNameCache = {}; +function isAttributeNameSafe(attributeName) { + if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) + return !0; + if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1; + if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) + return (validatedAttributeNameCache[attributeName] = !0); + illegalAttributeNameCache[attributeName] = !0; + return !1; +} +var unitlessNumbers = new Set( + "animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split( + " " + ) + ), + aliases = new Map([ + ["acceptCharset", "accept-charset"], + ["htmlFor", "for"], + ["httpEquiv", "http-equiv"], + ["crossOrigin", "crossorigin"], + ["accentHeight", "accent-height"], + ["alignmentBaseline", "alignment-baseline"], + ["arabicForm", "arabic-form"], + ["baselineShift", "baseline-shift"], + ["capHeight", "cap-height"], + ["clipPath", "clip-path"], + ["clipRule", "clip-rule"], + ["colorInterpolation", "color-interpolation"], + ["colorInterpolationFilters", "color-interpolation-filters"], + ["colorProfile", "color-profile"], + ["colorRendering", "color-rendering"], + ["dominantBaseline", "dominant-baseline"], + ["enableBackground", "enable-background"], + ["fillOpacity", "fill-opacity"], + ["fillRule", "fill-rule"], + ["floodColor", "flood-color"], + ["floodOpacity", "flood-opacity"], + ["fontFamily", "font-family"], + ["fontSize", "font-size"], + ["fontSizeAdjust", "font-size-adjust"], + ["fontStretch", "font-stretch"], + ["fontStyle", "font-style"], + ["fontVariant", "font-variant"], + ["fontWeight", "font-weight"], + ["glyphName", "glyph-name"], + ["glyphOrientationHorizontal", "glyph-orientation-horizontal"], + ["glyphOrientationVertical", "glyph-orientation-vertical"], + ["horizAdvX", "horiz-adv-x"], + ["horizOriginX", "horiz-origin-x"], + ["imageRendering", "image-rendering"], + ["letterSpacing", "letter-spacing"], + ["lightingColor", "lighting-color"], + ["markerEnd", "marker-end"], + ["markerMid", "marker-mid"], + ["markerStart", "marker-start"], + ["overlinePosition", "overline-position"], + ["overlineThickness", "overline-thickness"], + ["paintOrder", "paint-order"], + ["panose-1", "panose-1"], + ["pointerEvents", "pointer-events"], + ["renderingIntent", "rendering-intent"], + ["shapeRendering", "shape-rendering"], + ["stopColor", "stop-color"], + ["stopOpacity", "stop-opacity"], + ["strikethroughPosition", "strikethrough-position"], + ["strikethroughThickness", "strikethrough-thickness"], + ["strokeDasharray", "stroke-dasharray"], + ["strokeDashoffset", "stroke-dashoffset"], + ["strokeLinecap", "stroke-linecap"], + ["strokeLinejoin", "stroke-linejoin"], + ["strokeMiterlimit", "stroke-miterlimit"], + ["strokeOpacity", "stroke-opacity"], + ["strokeWidth", "stroke-width"], + ["textAnchor", "text-anchor"], + ["textDecoration", "text-decoration"], + ["textRendering", "text-rendering"], + ["transformOrigin", "transform-origin"], + ["underlinePosition", "underline-position"], + ["underlineThickness", "underline-thickness"], + ["unicodeBidi", "unicode-bidi"], + ["unicodeRange", "unicode-range"], + ["unitsPerEm", "units-per-em"], + ["vAlphabetic", "v-alphabetic"], + ["vHanging", "v-hanging"], + ["vIdeographic", "v-ideographic"], + ["vMathematical", "v-mathematical"], + ["vectorEffect", "vector-effect"], + ["vertAdvY", "vert-adv-y"], + ["vertOriginX", "vert-origin-x"], + ["vertOriginY", "vert-origin-y"], + ["wordSpacing", "word-spacing"], + ["writingMode", "writing-mode"], + ["xmlnsXlink", "xmlns:xlink"], + ["xHeight", "x-height"] + ]), + matchHtmlRegExp = /["'&<>]/; +function escapeTextForBrowser(text) { + if ( + "boolean" === typeof text || + "number" === typeof text || + "bigint" === typeof text + ) + return "" + text; + text = "" + text; + var match = matchHtmlRegExp.exec(text); + if (match) { + var html = "", + index, + lastIndex = 0; + for (index = match.index; index < text.length; index++) { + switch (text.charCodeAt(index)) { + case 34: + match = """; + break; + case 38: + match = "&"; + break; + case 39: + match = "'"; + break; + case 60: + match = "<"; + break; + case 62: + match = ">"; + break; + default: + continue; + } + lastIndex !== index && (html += text.slice(lastIndex, index)); + lastIndex = index + 1; + html += match; + } + text = lastIndex !== index ? html + text.slice(lastIndex, index) : html; + } + return text; +} +var uppercasePattern = /([A-Z])/g, + msPattern = /^ms-/, + isJavaScriptProtocol = + /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i; +function sanitizeURL(url) { + return isJavaScriptProtocol.test("" + url) + ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')" + : url; +} +var ReactSharedInternals = + React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, + ReactDOMSharedInternals = + ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, + sharedNotPendingObject = { + pending: !1, + data: null, + method: null, + action: null + }, + previousDispatcher = ReactDOMSharedInternals.d; +ReactDOMSharedInternals.d = { + f: previousDispatcher.f, + r: previousDispatcher.r, + D: prefetchDNS, + C: preconnect, + L: preload, + m: preloadModule, + X: preinitScript, + S: preinitStyle, + M: preinitModuleScript +}; +var PRELOAD_NO_CREDS = [], + currentlyFlushingRenderState = null, + scriptRegex = /(<\/|<)(s)(cript)/gi; +function scriptReplacer(match, prefix, s, suffix) { + return "" + prefix + ("s" === s ? "\\u0073" : "\\u0053") + suffix; +} +function createResumableState( + identifierPrefix, + externalRuntimeConfig, + bootstrapScriptContent, + bootstrapScripts, + bootstrapModules +) { + return { + idPrefix: void 0 === identifierPrefix ? "" : identifierPrefix, + nextFormID: 0, + streamingFormat: 0, + bootstrapScriptContent: bootstrapScriptContent, + bootstrapScripts: bootstrapScripts, + bootstrapModules: bootstrapModules, + instructions: 0, + hasBody: !1, + hasHtml: !1, + unknownResources: {}, + dnsResources: {}, + connectResources: { default: {}, anonymous: {}, credentials: {} }, + imageResources: {}, + styleResources: {}, + scriptResources: {}, + moduleUnknownResources: {}, + moduleScriptResources: {} + }; +} +function createFormatContext( + insertionMode, + selectedValue, + tagScope, + viewTransition +) { + return { + insertionMode: insertionMode, + selectedValue: selectedValue, + tagScope: tagScope, + viewTransition: viewTransition + }; +} +function getChildFormatContext(parentContext, type, props) { + var subtreeScope = parentContext.tagScope & -25; + switch (type) { + case "noscript": + return createFormatContext(2, null, subtreeScope | 1, null); + case "select": + return createFormatContext( + 2, + null != props.value ? props.value : props.defaultValue, + subtreeScope, + null + ); + case "svg": + return createFormatContext(4, null, subtreeScope, null); + case "picture": + return createFormatContext(2, null, subtreeScope | 2, null); + case "math": + return createFormatContext(5, null, subtreeScope, null); + case "foreignObject": + return createFormatContext(2, null, subtreeScope, null); + case "table": + return createFormatContext(6, null, subtreeScope, null); + case "thead": + case "tbody": + case "tfoot": + return createFormatContext(7, null, subtreeScope, null); + case "colgroup": + return createFormatContext(9, null, subtreeScope, null); + case "tr": + return createFormatContext(8, null, subtreeScope, null); + case "head": + if (2 > parentContext.insertionMode) + return createFormatContext(3, null, subtreeScope, null); + break; + case "html": + if (0 === parentContext.insertionMode) + return createFormatContext(1, null, subtreeScope, null); + } + return 6 <= parentContext.insertionMode || 2 > parentContext.insertionMode + ? createFormatContext(2, null, subtreeScope, null) + : parentContext.tagScope !== subtreeScope + ? createFormatContext( + parentContext.insertionMode, + parentContext.selectedValue, + subtreeScope, + null + ) + : parentContext; +} +function getSuspenseViewTransition(parentViewTransition) { + return null === parentViewTransition + ? null + : { + update: parentViewTransition.update, + enter: "none", + exit: "none", + share: parentViewTransition.update, + name: parentViewTransition.autoName, + autoName: parentViewTransition.autoName, + nameIdx: 0 + }; +} +function getSuspenseFallbackFormatContext(resumableState, parentContext) { + parentContext.tagScope & 32 && (resumableState.instructions |= 128); + return createFormatContext( + parentContext.insertionMode, + parentContext.selectedValue, + parentContext.tagScope | 12, + getSuspenseViewTransition(parentContext.viewTransition) + ); +} +function getSuspenseContentFormatContext(resumableState, parentContext) { + resumableState = getSuspenseViewTransition(parentContext.viewTransition); + var subtreeScope = parentContext.tagScope | 16; + null !== resumableState && + "none" !== resumableState.share && + (subtreeScope |= 64); + return createFormatContext( + parentContext.insertionMode, + parentContext.selectedValue, + subtreeScope, + resumableState + ); +} +var styleNameCache = new Map(); +function pushStyleAttribute(target, style) { + if ("object" !== typeof style) throw Error(formatProdErrorMessage(62)); + var isFirst = !0, + styleName; + for (styleName in style) + if (hasOwnProperty.call(style, styleName)) { + var styleValue = style[styleName]; + if ( + null != styleValue && + "boolean" !== typeof styleValue && + "" !== styleValue + ) { + if (0 === styleName.indexOf("--")) { + var nameChunk = escapeTextForBrowser(styleName); + styleValue = escapeTextForBrowser(("" + styleValue).trim()); + } else + (nameChunk = styleNameCache.get(styleName)), + void 0 === nameChunk && + ((nameChunk = escapeTextForBrowser( + styleName + .replace(uppercasePattern, "-$1") + .toLowerCase() + .replace(msPattern, "-ms-") + )), + styleNameCache.set(styleName, nameChunk)), + (styleValue = + "number" === typeof styleValue + ? 0 === styleValue || unitlessNumbers.has(styleName) + ? "" + styleValue + : styleValue + "px" + : escapeTextForBrowser(("" + styleValue).trim())); + isFirst + ? ((isFirst = !1), + target.push(' style="', nameChunk, ":", styleValue)) + : target.push(";", nameChunk, ":", styleValue); + } + } + isFirst || target.push('"'); +} +function pushBooleanAttribute(target, name, value) { + value && + "function" !== typeof value && + "symbol" !== typeof value && + target.push(" ", name, '=""'); +} +function pushStringAttribute(target, name, value) { + "function" !== typeof value && + "symbol" !== typeof value && + "boolean" !== typeof value && + target.push(" ", name, '="', escapeTextForBrowser(value), '"'); +} +var actionJavaScriptURL = escapeTextForBrowser( + "javascript:throw new Error('React form unexpectedly submitted.')" +); +function pushAdditionalFormField(value, key) { + this.push('<input type="hidden"'); + validateAdditionalFormField(value); + pushStringAttribute(this, "name", key); + pushStringAttribute(this, "value", value); + this.push("/>"); +} +function validateAdditionalFormField(value) { + if ("string" !== typeof value) throw Error(formatProdErrorMessage(480)); +} +function getCustomFormFields(resumableState, formAction) { + if ("function" === typeof formAction.$$FORM_ACTION) { + var id = resumableState.nextFormID++; + resumableState = resumableState.idPrefix + id; + try { + var customFields = formAction.$$FORM_ACTION(resumableState); + if (customFields) { + var formData = customFields.data; + null != formData && formData.forEach(validateAdditionalFormField); + } + return customFields; + } catch (x) { + if ("object" === typeof x && null !== x && "function" === typeof x.then) + throw x; + } + } + return null; +} +function pushFormActionAttribute( + target, + resumableState, + renderState, + formAction, + formEncType, + formMethod, + formTarget, + name +) { + var formData = null; + if ("function" === typeof formAction) { + var customFields = getCustomFormFields(resumableState, formAction); + null !== customFields + ? ((name = customFields.name), + (formAction = customFields.action || ""), + (formEncType = customFields.encType), + (formMethod = customFields.method), + (formTarget = customFields.target), + (formData = customFields.data)) + : (target.push(" ", "formAction", '="', actionJavaScriptURL, '"'), + (formTarget = formMethod = formEncType = formAction = name = null), + injectFormReplayingRuntime(resumableState, renderState)); + } + null != name && pushAttribute(target, "name", name); + null != formAction && pushAttribute(target, "formAction", formAction); + null != formEncType && pushAttribute(target, "formEncType", formEncType); + null != formMethod && pushAttribute(target, "formMethod", formMethod); + null != formTarget && pushAttribute(target, "formTarget", formTarget); + return formData; +} +function pushAttribute(target, name, value) { + switch (name) { + case "className": + pushStringAttribute(target, "class", value); + break; + case "tabIndex": + pushStringAttribute(target, "tabindex", value); + break; + case "dir": + case "role": + case "viewBox": + case "width": + case "height": + pushStringAttribute(target, name, value); + break; + case "style": + pushStyleAttribute(target, value); + break; + case "src": + case "href": + if ("" === value) break; + case "action": + case "formAction": + if ( + null == value || + "function" === typeof value || + "symbol" === typeof value || + "boolean" === typeof value + ) + break; + value = sanitizeURL("" + value); + target.push(" ", name, '="', escapeTextForBrowser(value), '"'); + break; + case "defaultValue": + case "defaultChecked": + case "innerHTML": + case "suppressContentEditableWarning": + case "suppressHydrationWarning": + case "ref": + break; + case "autoFocus": + case "multiple": + case "muted": + pushBooleanAttribute(target, name.toLowerCase(), value); + break; + case "xlinkHref": + if ( + "function" === typeof value || + "symbol" === typeof value || + "boolean" === typeof value + ) + break; + value = sanitizeURL("" + value); + target.push(" ", "xlink:href", '="', escapeTextForBrowser(value), '"'); + break; + case "contentEditable": + case "spellCheck": + case "draggable": + case "value": + case "autoReverse": + case "externalResourcesRequired": + case "focusable": + case "preserveAlpha": + "function" !== typeof value && + "symbol" !== typeof value && + target.push(" ", name, '="', escapeTextForBrowser(value), '"'); + break; + case "inert": + case "allowFullScreen": + case "async": + case "autoPlay": + case "controls": + case "default": + case "defer": + case "disabled": + case "disablePictureInPicture": + case "disableRemotePlayback": + case "formNoValidate": + case "hidden": + case "loop": + case "noModule": + case "noValidate": + case "open": + case "playsInline": + case "readOnly": + case "required": + case "reversed": + case "scoped": + case "seamless": + case "itemScope": + value && + "function" !== typeof value && + "symbol" !== typeof value && + target.push(" ", name, '=""'); + break; + case "capture": + case "download": + !0 === value + ? target.push(" ", name, '=""') + : !1 !== value && + "function" !== typeof value && + "symbol" !== typeof value && + target.push(" ", name, '="', escapeTextForBrowser(value), '"'); + break; + case "cols": + case "rows": + case "size": + case "span": + "function" !== typeof value && + "symbol" !== typeof value && + !isNaN(value) && + 1 <= value && + target.push(" ", name, '="', escapeTextForBrowser(value), '"'); + break; + case "rowSpan": + case "start": + "function" === typeof value || + "symbol" === typeof value || + isNaN(value) || + target.push(" ", name, '="', escapeTextForBrowser(value), '"'); + break; + case "xlinkActuate": + pushStringAttribute(target, "xlink:actuate", value); + break; + case "xlinkArcrole": + pushStringAttribute(target, "xlink:arcrole", value); + break; + case "xlinkRole": + pushStringAttribute(target, "xlink:role", value); + break; + case "xlinkShow": + pushStringAttribute(target, "xlink:show", value); + break; + case "xlinkTitle": + pushStringAttribute(target, "xlink:title", value); + break; + case "xlinkType": + pushStringAttribute(target, "xlink:type", value); + break; + case "xmlBase": + pushStringAttribute(target, "xml:base", value); + break; + case "xmlLang": + pushStringAttribute(target, "xml:lang", value); + break; + case "xmlSpace": + pushStringAttribute(target, "xml:space", value); + break; + default: + if ( + !(2 < name.length) || + ("o" !== name[0] && "O" !== name[0]) || + ("n" !== name[1] && "N" !== name[1]) + ) + if (((name = aliases.get(name) || name), isAttributeNameSafe(name))) { + switch (typeof value) { + case "function": + case "symbol": + return; + case "boolean": + var prefix$8 = name.toLowerCase().slice(0, 5); + if ("data-" !== prefix$8 && "aria-" !== prefix$8) return; + } + target.push(" ", name, '="', escapeTextForBrowser(value), '"'); + } + } +} +function pushInnerHTML(target, innerHTML, children) { + if (null != innerHTML) { + if (null != children) throw Error(formatProdErrorMessage(60)); + if ("object" !== typeof innerHTML || !("__html" in innerHTML)) + throw Error(formatProdErrorMessage(61)); + innerHTML = innerHTML.__html; + null !== innerHTML && void 0 !== innerHTML && target.push("" + innerHTML); + } +} +function flattenOptionChildren(children) { + var content = ""; + React.Children.forEach(children, function (child) { + null != child && (content += child); + }); + return content; +} +function injectFormReplayingRuntime(resumableState, renderState) { + if (0 === (resumableState.instructions & 16)) { + resumableState.instructions |= 16; + var preamble = renderState.preamble, + bootstrapChunks = renderState.bootstrapChunks; + (preamble.htmlChunks || preamble.headChunks) && 0 === bootstrapChunks.length + ? (bootstrapChunks.push(renderState.startInlineScript), + pushCompletedShellIdAttribute(bootstrapChunks, resumableState), + bootstrapChunks.push( + ">", + 'addEventListener("submit",function(a){if(!a.defaultPrevented){var c=a.target,d=a.submitter,e=c.action,b=d;if(d){var f=d.getAttribute("formAction");null!=f&&(e=f,b=null)}"javascript:throw new Error(\'React form unexpectedly submitted.\')"===e&&(a.preventDefault(),b?(a=document.createElement("input"),a.name=b.name,a.value=b.value,b.parentNode.insertBefore(a,b),b=new FormData(c),a.parentNode.removeChild(a)):b=new FormData(c),a=c.ownerDocument||c,(a.$$reactFormReplay=a.$$reactFormReplay||[]).push(c,d,b))}});', + "\x3c/script>" + )) + : bootstrapChunks.unshift( + renderState.startInlineScript, + ">", + 'addEventListener("submit",function(a){if(!a.defaultPrevented){var c=a.target,d=a.submitter,e=c.action,b=d;if(d){var f=d.getAttribute("formAction");null!=f&&(e=f,b=null)}"javascript:throw new Error(\'React form unexpectedly submitted.\')"===e&&(a.preventDefault(),b?(a=document.createElement("input"),a.name=b.name,a.value=b.value,b.parentNode.insertBefore(a,b),b=new FormData(c),a.parentNode.removeChild(a)):b=new FormData(c),a=c.ownerDocument||c,(a.$$reactFormReplay=a.$$reactFormReplay||[]).push(c,d,b))}});', + "\x3c/script>" + ); + } +} +function pushLinkImpl(target, props) { + target.push(startChunkForTag("link")); + for (var propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + case "dangerouslySetInnerHTML": + throw Error(formatProdErrorMessage(399, "link")); + default: + pushAttribute(target, propKey, propValue); + } + } + target.push("/>"); + return null; +} +var styleRegex = /(<\/|<)(s)(tyle)/gi; +function styleReplacer(match, prefix, s, suffix) { + return "" + prefix + ("s" === s ? "\\73 " : "\\53 ") + suffix; +} +function pushSelfClosing(target, props, tag) { + target.push(startChunkForTag(tag)); + for (var propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + case "dangerouslySetInnerHTML": + throw Error(formatProdErrorMessage(399, tag)); + default: + pushAttribute(target, propKey, propValue); + } + } + target.push("/>"); + return null; +} +function pushTitleImpl(target, props) { + target.push(startChunkForTag("title")); + var children = null, + innerHTML = null, + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + children = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(">"); + props = Array.isArray(children) + ? 2 > children.length + ? children[0] + : null + : children; + "function" !== typeof props && + "symbol" !== typeof props && + null !== props && + void 0 !== props && + target.push(escapeTextForBrowser("" + props)); + pushInnerHTML(target, innerHTML, children); + target.push(endChunkForTag("title")); + return null; +} +function pushScriptImpl(target, props) { + target.push(startChunkForTag("script")); + var children = null, + innerHTML = null, + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + children = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(">"); + pushInnerHTML(target, innerHTML, children); + "string" === typeof children && + target.push(("" + children).replace(scriptRegex, scriptReplacer)); + target.push(endChunkForTag("script")); + return null; +} +function pushStartSingletonElement(target, props, tag) { + target.push(startChunkForTag(tag)); + var innerHTML = (tag = null), + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + tag = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(">"); + pushInnerHTML(target, innerHTML, tag); + return tag; +} +function pushStartGenericElement(target, props, tag) { + target.push(startChunkForTag(tag)); + var innerHTML = (tag = null), + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + tag = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(">"); + pushInnerHTML(target, innerHTML, tag); + return "string" === typeof tag + ? (target.push(escapeTextForBrowser(tag)), null) + : tag; +} +var VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/, + validatedTagCache = new Map(); +function startChunkForTag(tag) { + var tagStartChunk = validatedTagCache.get(tag); + if (void 0 === tagStartChunk) { + if (!VALID_TAG_REGEX.test(tag)) + throw Error(formatProdErrorMessage(65, tag)); + tagStartChunk = "<" + tag; + validatedTagCache.set(tag, tagStartChunk); + } + return tagStartChunk; +} +function pushStartInstance( + target$jscomp$0, + type, + props, + resumableState, + renderState, + preambleState, + hoistableState, + formatContext, + textEmbedded +) { + switch (type) { + case "div": + case "span": + case "svg": + case "path": + break; + case "a": + target$jscomp$0.push(startChunkForTag("a")); + var children = null, + innerHTML = null, + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + children = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + case "href": + "" === propValue + ? pushStringAttribute(target$jscomp$0, "href", "") + : pushAttribute(target$jscomp$0, propKey, propValue); + break; + default: + pushAttribute(target$jscomp$0, propKey, propValue); + } + } + target$jscomp$0.push(">"); + pushInnerHTML(target$jscomp$0, innerHTML, children); + if ("string" === typeof children) { + target$jscomp$0.push(escapeTextForBrowser(children)); + var JSCompiler_inline_result = null; + } else JSCompiler_inline_result = children; + return JSCompiler_inline_result; + case "g": + case "p": + case "li": + break; + case "select": + target$jscomp$0.push(startChunkForTag("select")); + var children$jscomp$0 = null, + innerHTML$jscomp$0 = null, + propKey$jscomp$0; + for (propKey$jscomp$0 in props) + if (hasOwnProperty.call(props, propKey$jscomp$0)) { + var propValue$jscomp$0 = props[propKey$jscomp$0]; + if (null != propValue$jscomp$0) + switch (propKey$jscomp$0) { + case "children": + children$jscomp$0 = propValue$jscomp$0; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$0 = propValue$jscomp$0; + break; + case "defaultValue": + case "value": + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$0, + propValue$jscomp$0 + ); + } + } + target$jscomp$0.push(">"); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$0, children$jscomp$0); + return children$jscomp$0; + case "option": + var selectedValue = formatContext.selectedValue; + target$jscomp$0.push(startChunkForTag("option")); + var children$jscomp$1 = null, + value = null, + selected = null, + innerHTML$jscomp$1 = null, + propKey$jscomp$1; + for (propKey$jscomp$1 in props) + if (hasOwnProperty.call(props, propKey$jscomp$1)) { + var propValue$jscomp$1 = props[propKey$jscomp$1]; + if (null != propValue$jscomp$1) + switch (propKey$jscomp$1) { + case "children": + children$jscomp$1 = propValue$jscomp$1; + break; + case "selected": + selected = propValue$jscomp$1; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$1 = propValue$jscomp$1; + break; + case "value": + value = propValue$jscomp$1; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$1, + propValue$jscomp$1 + ); + } + } + if (null != selectedValue) { + var stringValue = + null !== value + ? "" + value + : flattenOptionChildren(children$jscomp$1); + if (isArrayImpl(selectedValue)) + for (var i = 0; i < selectedValue.length; i++) { + if ("" + selectedValue[i] === stringValue) { + target$jscomp$0.push(' selected=""'); + break; + } + } + else + "" + selectedValue === stringValue && + target$jscomp$0.push(' selected=""'); + } else selected && target$jscomp$0.push(' selected=""'); + target$jscomp$0.push(">"); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$1, children$jscomp$1); + return children$jscomp$1; + case "textarea": + target$jscomp$0.push(startChunkForTag("textarea")); + var value$jscomp$0 = null, + defaultValue = null, + children$jscomp$2 = null, + propKey$jscomp$2; + for (propKey$jscomp$2 in props) + if (hasOwnProperty.call(props, propKey$jscomp$2)) { + var propValue$jscomp$2 = props[propKey$jscomp$2]; + if (null != propValue$jscomp$2) + switch (propKey$jscomp$2) { + case "children": + children$jscomp$2 = propValue$jscomp$2; + break; + case "value": + value$jscomp$0 = propValue$jscomp$2; + break; + case "defaultValue": + defaultValue = propValue$jscomp$2; + break; + case "dangerouslySetInnerHTML": + throw Error(formatProdErrorMessage(91)); + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$2, + propValue$jscomp$2 + ); + } + } + null === value$jscomp$0 && + null !== defaultValue && + (value$jscomp$0 = defaultValue); + target$jscomp$0.push(">"); + if (null != children$jscomp$2) { + if (null != value$jscomp$0) throw Error(formatProdErrorMessage(92)); + if (isArrayImpl(children$jscomp$2)) { + if (1 < children$jscomp$2.length) + throw Error(formatProdErrorMessage(93)); + value$jscomp$0 = "" + children$jscomp$2[0]; + } + value$jscomp$0 = "" + children$jscomp$2; + } + "string" === typeof value$jscomp$0 && + "\n" === value$jscomp$0[0] && + target$jscomp$0.push("\n"); + null !== value$jscomp$0 && + target$jscomp$0.push(escapeTextForBrowser("" + value$jscomp$0)); + return null; + case "input": + target$jscomp$0.push(startChunkForTag("input")); + var name = null, + formAction = null, + formEncType = null, + formMethod = null, + formTarget = null, + value$jscomp$1 = null, + defaultValue$jscomp$0 = null, + checked = null, + defaultChecked = null, + propKey$jscomp$3; + for (propKey$jscomp$3 in props) + if (hasOwnProperty.call(props, propKey$jscomp$3)) { + var propValue$jscomp$3 = props[propKey$jscomp$3]; + if (null != propValue$jscomp$3) + switch (propKey$jscomp$3) { + case "children": + case "dangerouslySetInnerHTML": + throw Error(formatProdErrorMessage(399, "input")); + case "name": + name = propValue$jscomp$3; + break; + case "formAction": + formAction = propValue$jscomp$3; + break; + case "formEncType": + formEncType = propValue$jscomp$3; + break; + case "formMethod": + formMethod = propValue$jscomp$3; + break; + case "formTarget": + formTarget = propValue$jscomp$3; + break; + case "defaultChecked": + defaultChecked = propValue$jscomp$3; + break; + case "defaultValue": + defaultValue$jscomp$0 = propValue$jscomp$3; + break; + case "checked": + checked = propValue$jscomp$3; + break; + case "value": + value$jscomp$1 = propValue$jscomp$3; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$3, + propValue$jscomp$3 + ); + } + } + var formData = pushFormActionAttribute( + target$jscomp$0, + resumableState, + renderState, + formAction, + formEncType, + formMethod, + formTarget, + name + ); + null !== checked + ? pushBooleanAttribute(target$jscomp$0, "checked", checked) + : null !== defaultChecked && + pushBooleanAttribute(target$jscomp$0, "checked", defaultChecked); + null !== value$jscomp$1 + ? pushAttribute(target$jscomp$0, "value", value$jscomp$1) + : null !== defaultValue$jscomp$0 && + pushAttribute(target$jscomp$0, "value", defaultValue$jscomp$0); + target$jscomp$0.push("/>"); + null != formData && + formData.forEach(pushAdditionalFormField, target$jscomp$0); + return null; + case "button": + target$jscomp$0.push(startChunkForTag("button")); + var children$jscomp$3 = null, + innerHTML$jscomp$2 = null, + name$jscomp$0 = null, + formAction$jscomp$0 = null, + formEncType$jscomp$0 = null, + formMethod$jscomp$0 = null, + formTarget$jscomp$0 = null, + propKey$jscomp$4; + for (propKey$jscomp$4 in props) + if (hasOwnProperty.call(props, propKey$jscomp$4)) { + var propValue$jscomp$4 = props[propKey$jscomp$4]; + if (null != propValue$jscomp$4) + switch (propKey$jscomp$4) { + case "children": + children$jscomp$3 = propValue$jscomp$4; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$2 = propValue$jscomp$4; + break; + case "name": + name$jscomp$0 = propValue$jscomp$4; + break; + case "formAction": + formAction$jscomp$0 = propValue$jscomp$4; + break; + case "formEncType": + formEncType$jscomp$0 = propValue$jscomp$4; + break; + case "formMethod": + formMethod$jscomp$0 = propValue$jscomp$4; + break; + case "formTarget": + formTarget$jscomp$0 = propValue$jscomp$4; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$4, + propValue$jscomp$4 + ); + } + } + var formData$jscomp$0 = pushFormActionAttribute( + target$jscomp$0, + resumableState, + renderState, + formAction$jscomp$0, + formEncType$jscomp$0, + formMethod$jscomp$0, + formTarget$jscomp$0, + name$jscomp$0 + ); + target$jscomp$0.push(">"); + null != formData$jscomp$0 && + formData$jscomp$0.forEach(pushAdditionalFormField, target$jscomp$0); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$2, children$jscomp$3); + if ("string" === typeof children$jscomp$3) { + target$jscomp$0.push(escapeTextForBrowser(children$jscomp$3)); + var JSCompiler_inline_result$jscomp$0 = null; + } else JSCompiler_inline_result$jscomp$0 = children$jscomp$3; + return JSCompiler_inline_result$jscomp$0; + case "form": + target$jscomp$0.push(startChunkForTag("form")); + var children$jscomp$4 = null, + innerHTML$jscomp$3 = null, + formAction$jscomp$1 = null, + formEncType$jscomp$1 = null, + formMethod$jscomp$1 = null, + formTarget$jscomp$1 = null, + propKey$jscomp$5; + for (propKey$jscomp$5 in props) + if (hasOwnProperty.call(props, propKey$jscomp$5)) { + var propValue$jscomp$5 = props[propKey$jscomp$5]; + if (null != propValue$jscomp$5) + switch (propKey$jscomp$5) { + case "children": + children$jscomp$4 = propValue$jscomp$5; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$3 = propValue$jscomp$5; + break; + case "action": + formAction$jscomp$1 = propValue$jscomp$5; + break; + case "encType": + formEncType$jscomp$1 = propValue$jscomp$5; + break; + case "method": + formMethod$jscomp$1 = propValue$jscomp$5; + break; + case "target": + formTarget$jscomp$1 = propValue$jscomp$5; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$5, + propValue$jscomp$5 + ); + } + } + var formData$jscomp$1 = null, + formActionName = null; + if ("function" === typeof formAction$jscomp$1) { + var customFields = getCustomFormFields( + resumableState, + formAction$jscomp$1 + ); + null !== customFields + ? ((formAction$jscomp$1 = customFields.action || ""), + (formEncType$jscomp$1 = customFields.encType), + (formMethod$jscomp$1 = customFields.method), + (formTarget$jscomp$1 = customFields.target), + (formData$jscomp$1 = customFields.data), + (formActionName = customFields.name)) + : (target$jscomp$0.push( + " ", + "action", + '="', + actionJavaScriptURL, + '"' + ), + (formTarget$jscomp$1 = + formMethod$jscomp$1 = + formEncType$jscomp$1 = + formAction$jscomp$1 = + null), + injectFormReplayingRuntime(resumableState, renderState)); + } + null != formAction$jscomp$1 && + pushAttribute(target$jscomp$0, "action", formAction$jscomp$1); + null != formEncType$jscomp$1 && + pushAttribute(target$jscomp$0, "encType", formEncType$jscomp$1); + null != formMethod$jscomp$1 && + pushAttribute(target$jscomp$0, "method", formMethod$jscomp$1); + null != formTarget$jscomp$1 && + pushAttribute(target$jscomp$0, "target", formTarget$jscomp$1); + target$jscomp$0.push(">"); + null !== formActionName && + (target$jscomp$0.push('<input type="hidden"'), + pushStringAttribute(target$jscomp$0, "name", formActionName), + target$jscomp$0.push("/>"), + null != formData$jscomp$1 && + formData$jscomp$1.forEach(pushAdditionalFormField, target$jscomp$0)); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$3, children$jscomp$4); + if ("string" === typeof children$jscomp$4) { + target$jscomp$0.push(escapeTextForBrowser(children$jscomp$4)); + var JSCompiler_inline_result$jscomp$1 = null; + } else JSCompiler_inline_result$jscomp$1 = children$jscomp$4; + return JSCompiler_inline_result$jscomp$1; + case "menuitem": + target$jscomp$0.push(startChunkForTag("menuitem")); + for (var propKey$jscomp$6 in props) + if (hasOwnProperty.call(props, propKey$jscomp$6)) { + var propValue$jscomp$6 = props[propKey$jscomp$6]; + if (null != propValue$jscomp$6) + switch (propKey$jscomp$6) { + case "children": + case "dangerouslySetInnerHTML": + throw Error(formatProdErrorMessage(400)); + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$6, + propValue$jscomp$6 + ); + } + } + target$jscomp$0.push(">"); + return null; + case "object": + target$jscomp$0.push(startChunkForTag("object")); + var children$jscomp$5 = null, + innerHTML$jscomp$4 = null, + propKey$jscomp$7; + for (propKey$jscomp$7 in props) + if (hasOwnProperty.call(props, propKey$jscomp$7)) { + var propValue$jscomp$7 = props[propKey$jscomp$7]; + if (null != propValue$jscomp$7) + switch (propKey$jscomp$7) { + case "children": + children$jscomp$5 = propValue$jscomp$7; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$4 = propValue$jscomp$7; + break; + case "data": + var sanitizedValue = sanitizeURL("" + propValue$jscomp$7); + if ("" === sanitizedValue) break; + target$jscomp$0.push( + " ", + "data", + '="', + escapeTextForBrowser(sanitizedValue), + '"' + ); + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$7, + propValue$jscomp$7 + ); + } + } + target$jscomp$0.push(">"); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$4, children$jscomp$5); + if ("string" === typeof children$jscomp$5) { + target$jscomp$0.push(escapeTextForBrowser(children$jscomp$5)); + var JSCompiler_inline_result$jscomp$2 = null; + } else JSCompiler_inline_result$jscomp$2 = children$jscomp$5; + return JSCompiler_inline_result$jscomp$2; + case "title": + var noscriptTagInScope = formatContext.tagScope & 1, + isFallback = formatContext.tagScope & 4; + if ( + 4 === formatContext.insertionMode || + noscriptTagInScope || + null != props.itemProp + ) + var JSCompiler_inline_result$jscomp$3 = pushTitleImpl( + target$jscomp$0, + props + ); + else + isFallback + ? (JSCompiler_inline_result$jscomp$3 = null) + : (pushTitleImpl(renderState.hoistableChunks, props), + (JSCompiler_inline_result$jscomp$3 = void 0)); + return JSCompiler_inline_result$jscomp$3; + case "link": + var noscriptTagInScope$jscomp$0 = formatContext.tagScope & 1, + isFallback$jscomp$0 = formatContext.tagScope & 4, + rel = props.rel, + href = props.href, + precedence = props.precedence; + if ( + 4 === formatContext.insertionMode || + noscriptTagInScope$jscomp$0 || + null != props.itemProp || + "string" !== typeof rel || + "string" !== typeof href || + "" === href + ) { + pushLinkImpl(target$jscomp$0, props); + var JSCompiler_inline_result$jscomp$4 = null; + } else if ("stylesheet" === props.rel) + if ( + "string" !== typeof precedence || + null != props.disabled || + props.onLoad || + props.onError + ) + JSCompiler_inline_result$jscomp$4 = pushLinkImpl( + target$jscomp$0, + props + ); + else { + var styleQueue = renderState.styles.get(precedence), + resourceState = resumableState.styleResources.hasOwnProperty(href) + ? resumableState.styleResources[href] + : void 0; + if (null !== resourceState) { + resumableState.styleResources[href] = null; + styleQueue || + ((styleQueue = { + precedence: escapeTextForBrowser(precedence), + rules: [], + hrefs: [], + sheets: new Map() + }), + renderState.styles.set(precedence, styleQueue)); + var resource = { + state: 0, + props: assign({}, props, { + "data-precedence": props.precedence, + precedence: null + }) + }; + if (resourceState) { + 2 === resourceState.length && + adoptPreloadCredentials(resource.props, resourceState); + var preloadResource = renderState.preloads.stylesheets.get(href); + preloadResource && 0 < preloadResource.length + ? (preloadResource.length = 0) + : (resource.state = 1); + } + styleQueue.sheets.set(href, resource); + hoistableState && hoistableState.stylesheets.add(resource); + } else if (styleQueue) { + var resource$9 = styleQueue.sheets.get(href); + resource$9 && + hoistableState && + hoistableState.stylesheets.add(resource$9); + } + textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"); + JSCompiler_inline_result$jscomp$4 = null; + } + else + props.onLoad || props.onError + ? (JSCompiler_inline_result$jscomp$4 = pushLinkImpl( + target$jscomp$0, + props + )) + : (textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"), + (JSCompiler_inline_result$jscomp$4 = isFallback$jscomp$0 + ? null + : pushLinkImpl(renderState.hoistableChunks, props))); + return JSCompiler_inline_result$jscomp$4; + case "script": + var noscriptTagInScope$jscomp$1 = formatContext.tagScope & 1, + asyncProp = props.async; + if ( + "string" !== typeof props.src || + !props.src || + !asyncProp || + "function" === typeof asyncProp || + "symbol" === typeof asyncProp || + props.onLoad || + props.onError || + 4 === formatContext.insertionMode || + noscriptTagInScope$jscomp$1 || + null != props.itemProp + ) + var JSCompiler_inline_result$jscomp$5 = pushScriptImpl( + target$jscomp$0, + props + ); + else { + var key = props.src; + if ("module" === props.type) { + var resources = resumableState.moduleScriptResources; + var preloads = renderState.preloads.moduleScripts; + } else + (resources = resumableState.scriptResources), + (preloads = renderState.preloads.scripts); + var resourceState$jscomp$0 = resources.hasOwnProperty(key) + ? resources[key] + : void 0; + if (null !== resourceState$jscomp$0) { + resources[key] = null; + var scriptProps = props; + if (resourceState$jscomp$0) { + 2 === resourceState$jscomp$0.length && + ((scriptProps = assign({}, props)), + adoptPreloadCredentials(scriptProps, resourceState$jscomp$0)); + var preloadResource$jscomp$0 = preloads.get(key); + preloadResource$jscomp$0 && (preloadResource$jscomp$0.length = 0); + } + var resource$jscomp$0 = []; + renderState.scripts.add(resource$jscomp$0); + pushScriptImpl(resource$jscomp$0, scriptProps); + } + textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"); + JSCompiler_inline_result$jscomp$5 = null; + } + return JSCompiler_inline_result$jscomp$5; + case "style": + var noscriptTagInScope$jscomp$2 = formatContext.tagScope & 1, + precedence$jscomp$0 = props.precedence, + href$jscomp$0 = props.href, + nonce = props.nonce; + if ( + 4 === formatContext.insertionMode || + noscriptTagInScope$jscomp$2 || + null != props.itemProp || + "string" !== typeof precedence$jscomp$0 || + "string" !== typeof href$jscomp$0 || + "" === href$jscomp$0 + ) { + target$jscomp$0.push(startChunkForTag("style")); + var children$jscomp$6 = null, + innerHTML$jscomp$5 = null, + propKey$jscomp$8; + for (propKey$jscomp$8 in props) + if (hasOwnProperty.call(props, propKey$jscomp$8)) { + var propValue$jscomp$8 = props[propKey$jscomp$8]; + if (null != propValue$jscomp$8) + switch (propKey$jscomp$8) { + case "children": + children$jscomp$6 = propValue$jscomp$8; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$5 = propValue$jscomp$8; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$8, + propValue$jscomp$8 + ); + } + } + target$jscomp$0.push(">"); + var child = Array.isArray(children$jscomp$6) + ? 2 > children$jscomp$6.length + ? children$jscomp$6[0] + : null + : children$jscomp$6; + "function" !== typeof child && + "symbol" !== typeof child && + null !== child && + void 0 !== child && + target$jscomp$0.push(("" + child).replace(styleRegex, styleReplacer)); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$5, children$jscomp$6); + target$jscomp$0.push(endChunkForTag("style")); + var JSCompiler_inline_result$jscomp$6 = null; + } else { + var styleQueue$jscomp$0 = renderState.styles.get(precedence$jscomp$0); + if ( + null !== + (resumableState.styleResources.hasOwnProperty(href$jscomp$0) + ? resumableState.styleResources[href$jscomp$0] + : void 0) + ) { + resumableState.styleResources[href$jscomp$0] = null; + styleQueue$jscomp$0 || + ((styleQueue$jscomp$0 = { + precedence: escapeTextForBrowser(precedence$jscomp$0), + rules: [], + hrefs: [], + sheets: new Map() + }), + renderState.styles.set(precedence$jscomp$0, styleQueue$jscomp$0)); + var nonceStyle = renderState.nonce.style; + if (!nonceStyle || nonceStyle === nonce) { + styleQueue$jscomp$0.hrefs.push(escapeTextForBrowser(href$jscomp$0)); + var target = styleQueue$jscomp$0.rules, + children$jscomp$7 = null, + innerHTML$jscomp$6 = null, + propKey$jscomp$9; + for (propKey$jscomp$9 in props) + if (hasOwnProperty.call(props, propKey$jscomp$9)) { + var propValue$jscomp$9 = props[propKey$jscomp$9]; + if (null != propValue$jscomp$9) + switch (propKey$jscomp$9) { + case "children": + children$jscomp$7 = propValue$jscomp$9; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$6 = propValue$jscomp$9; + } + } + var child$jscomp$0 = Array.isArray(children$jscomp$7) + ? 2 > children$jscomp$7.length + ? children$jscomp$7[0] + : null + : children$jscomp$7; + "function" !== typeof child$jscomp$0 && + "symbol" !== typeof child$jscomp$0 && + null !== child$jscomp$0 && + void 0 !== child$jscomp$0 && + target.push( + ("" + child$jscomp$0).replace(styleRegex, styleReplacer) + ); + pushInnerHTML(target, innerHTML$jscomp$6, children$jscomp$7); + } + } + styleQueue$jscomp$0 && + hoistableState && + hoistableState.styles.add(styleQueue$jscomp$0); + textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"); + JSCompiler_inline_result$jscomp$6 = void 0; + } + return JSCompiler_inline_result$jscomp$6; + case "meta": + var noscriptTagInScope$jscomp$3 = formatContext.tagScope & 1, + isFallback$jscomp$1 = formatContext.tagScope & 4; + if ( + 4 === formatContext.insertionMode || + noscriptTagInScope$jscomp$3 || + null != props.itemProp + ) + var JSCompiler_inline_result$jscomp$7 = pushSelfClosing( + target$jscomp$0, + props, + "meta" + ); + else + textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"), + (JSCompiler_inline_result$jscomp$7 = isFallback$jscomp$1 + ? null + : "string" === typeof props.charSet + ? pushSelfClosing(renderState.charsetChunks, props, "meta") + : "viewport" === props.name + ? pushSelfClosing(renderState.viewportChunks, props, "meta") + : pushSelfClosing(renderState.hoistableChunks, props, "meta")); + return JSCompiler_inline_result$jscomp$7; + case "listing": + case "pre": + target$jscomp$0.push(startChunkForTag(type)); + var children$jscomp$8 = null, + innerHTML$jscomp$7 = null, + propKey$jscomp$10; + for (propKey$jscomp$10 in props) + if (hasOwnProperty.call(props, propKey$jscomp$10)) { + var propValue$jscomp$10 = props[propKey$jscomp$10]; + if (null != propValue$jscomp$10) + switch (propKey$jscomp$10) { + case "children": + children$jscomp$8 = propValue$jscomp$10; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$7 = propValue$jscomp$10; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$10, + propValue$jscomp$10 + ); + } + } + target$jscomp$0.push(">"); + if (null != innerHTML$jscomp$7) { + if (null != children$jscomp$8) throw Error(formatProdErrorMessage(60)); + if ( + "object" !== typeof innerHTML$jscomp$7 || + !("__html" in innerHTML$jscomp$7) + ) + throw Error(formatProdErrorMessage(61)); + var html = innerHTML$jscomp$7.__html; + null !== html && + void 0 !== html && + ("string" === typeof html && 0 < html.length && "\n" === html[0] + ? target$jscomp$0.push("\n", html) + : target$jscomp$0.push("" + html)); + } + "string" === typeof children$jscomp$8 && + "\n" === children$jscomp$8[0] && + target$jscomp$0.push("\n"); + return children$jscomp$8; + case "img": + var pictureOrNoScriptTagInScope = formatContext.tagScope & 3, + src = props.src, + srcSet = props.srcSet; + if ( + !( + "lazy" === props.loading || + (!src && !srcSet) || + ("string" !== typeof src && null != src) || + ("string" !== typeof srcSet && null != srcSet) || + "low" === props.fetchPriority || + pictureOrNoScriptTagInScope + ) && + ("string" !== typeof src || + ":" !== src[4] || + ("d" !== src[0] && "D" !== src[0]) || + ("a" !== src[1] && "A" !== src[1]) || + ("t" !== src[2] && "T" !== src[2]) || + ("a" !== src[3] && "A" !== src[3])) && + ("string" !== typeof srcSet || + ":" !== srcSet[4] || + ("d" !== srcSet[0] && "D" !== srcSet[0]) || + ("a" !== srcSet[1] && "A" !== srcSet[1]) || + ("t" !== srcSet[2] && "T" !== srcSet[2]) || + ("a" !== srcSet[3] && "A" !== srcSet[3])) + ) { + null !== hoistableState && + formatContext.tagScope & 64 && + (hoistableState.suspenseyImages = !0); + var sizes = "string" === typeof props.sizes ? props.sizes : void 0, + key$jscomp$0 = srcSet ? srcSet + "\n" + (sizes || "") : src, + promotablePreloads = renderState.preloads.images, + resource$jscomp$1 = promotablePreloads.get(key$jscomp$0); + if (resource$jscomp$1) { + if ( + "high" === props.fetchPriority || + 10 > renderState.highImagePreloads.size + ) + promotablePreloads.delete(key$jscomp$0), + renderState.highImagePreloads.add(resource$jscomp$1); + } else if ( + !resumableState.imageResources.hasOwnProperty(key$jscomp$0) + ) { + resumableState.imageResources[key$jscomp$0] = PRELOAD_NO_CREDS; + var input = props.crossOrigin; + var JSCompiler_inline_result$jscomp$8 = + "string" === typeof input + ? "use-credentials" === input + ? input + : "" + : void 0; + var headers = renderState.headers, + header; + headers && + 0 < headers.remainingCapacity && + "string" !== typeof props.srcSet && + ("high" === props.fetchPriority || + 500 > headers.highImagePreloads.length) && + ((header = getPreloadAsHeader(src, "image", { + imageSrcSet: props.srcSet, + imageSizes: props.sizes, + crossOrigin: JSCompiler_inline_result$jscomp$8, + integrity: props.integrity, + nonce: props.nonce, + type: props.type, + fetchPriority: props.fetchPriority, + referrerPolicy: props.refererPolicy + })), + 0 <= (headers.remainingCapacity -= header.length + 2)) + ? ((renderState.resets.image[key$jscomp$0] = PRELOAD_NO_CREDS), + headers.highImagePreloads && (headers.highImagePreloads += ", "), + (headers.highImagePreloads += header)) + : ((resource$jscomp$1 = []), + pushLinkImpl(resource$jscomp$1, { + rel: "preload", + as: "image", + href: srcSet ? void 0 : src, + imageSrcSet: srcSet, + imageSizes: sizes, + crossOrigin: JSCompiler_inline_result$jscomp$8, + integrity: props.integrity, + type: props.type, + fetchPriority: props.fetchPriority, + referrerPolicy: props.referrerPolicy + }), + "high" === props.fetchPriority || + 10 > renderState.highImagePreloads.size + ? renderState.highImagePreloads.add(resource$jscomp$1) + : (renderState.bulkPreloads.add(resource$jscomp$1), + promotablePreloads.set(key$jscomp$0, resource$jscomp$1))); + } + } + return pushSelfClosing(target$jscomp$0, props, "img"); + case "base": + case "area": + case "br": + case "col": + case "embed": + case "hr": + case "keygen": + case "param": + case "source": + case "track": + case "wbr": + return pushSelfClosing(target$jscomp$0, props, type); + case "annotation-xml": + case "color-profile": + case "font-face": + case "font-face-src": + case "font-face-uri": + case "font-face-format": + case "font-face-name": + case "missing-glyph": + break; + case "head": + if (2 > formatContext.insertionMode) { + var preamble = preambleState || renderState.preamble; + if (preamble.headChunks) + throw Error(formatProdErrorMessage(545, "`<head>`")); + null !== preambleState && target$jscomp$0.push("\x3c!--head--\x3e"); + preamble.headChunks = []; + var JSCompiler_inline_result$jscomp$9 = pushStartSingletonElement( + preamble.headChunks, + props, + "head" + ); + } else + JSCompiler_inline_result$jscomp$9 = pushStartGenericElement( + target$jscomp$0, + props, + "head" + ); + return JSCompiler_inline_result$jscomp$9; + case "body": + if (2 > formatContext.insertionMode) { + var preamble$jscomp$0 = preambleState || renderState.preamble; + if (preamble$jscomp$0.bodyChunks) + throw Error(formatProdErrorMessage(545, "`<body>`")); + null !== preambleState && target$jscomp$0.push("\x3c!--body--\x3e"); + preamble$jscomp$0.bodyChunks = []; + var JSCompiler_inline_result$jscomp$10 = pushStartSingletonElement( + preamble$jscomp$0.bodyChunks, + props, + "body" + ); + } else + JSCompiler_inline_result$jscomp$10 = pushStartGenericElement( + target$jscomp$0, + props, + "body" + ); + return JSCompiler_inline_result$jscomp$10; + case "html": + if (0 === formatContext.insertionMode) { + var preamble$jscomp$1 = preambleState || renderState.preamble; + if (preamble$jscomp$1.htmlChunks) + throw Error(formatProdErrorMessage(545, "`<html>`")); + null !== preambleState && target$jscomp$0.push("\x3c!--html--\x3e"); + preamble$jscomp$1.htmlChunks = [""]; + var JSCompiler_inline_result$jscomp$11 = pushStartSingletonElement( + preamble$jscomp$1.htmlChunks, + props, + "html" + ); + } else + JSCompiler_inline_result$jscomp$11 = pushStartGenericElement( + target$jscomp$0, + props, + "html" + ); + return JSCompiler_inline_result$jscomp$11; + default: + if (-1 !== type.indexOf("-")) { + target$jscomp$0.push(startChunkForTag(type)); + var children$jscomp$9 = null, + innerHTML$jscomp$8 = null, + propKey$jscomp$11; + for (propKey$jscomp$11 in props) + if (hasOwnProperty.call(props, propKey$jscomp$11)) { + var propValue$jscomp$11 = props[propKey$jscomp$11]; + if (null != propValue$jscomp$11) { + var attributeName = propKey$jscomp$11; + switch (propKey$jscomp$11) { + case "children": + children$jscomp$9 = propValue$jscomp$11; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$8 = propValue$jscomp$11; + break; + case "style": + pushStyleAttribute(target$jscomp$0, propValue$jscomp$11); + break; + case "suppressContentEditableWarning": + case "suppressHydrationWarning": + case "ref": + break; + case "className": + attributeName = "class"; + default: + if ( + isAttributeNameSafe(propKey$jscomp$11) && + "function" !== typeof propValue$jscomp$11 && + "symbol" !== typeof propValue$jscomp$11 && + !1 !== propValue$jscomp$11 + ) { + if (!0 === propValue$jscomp$11) propValue$jscomp$11 = ""; + else if ("object" === typeof propValue$jscomp$11) continue; + target$jscomp$0.push( + " ", + attributeName, + '="', + escapeTextForBrowser(propValue$jscomp$11), + '"' + ); + } + } + } + } + target$jscomp$0.push(">"); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$8, children$jscomp$9); + return children$jscomp$9; + } + } + return pushStartGenericElement(target$jscomp$0, props, type); +} +var endTagCache = new Map(); +function endChunkForTag(tag) { + var chunk = endTagCache.get(tag); + void 0 === chunk && ((chunk = "</" + tag + ">"), endTagCache.set(tag, chunk)); + return chunk; +} +function hoistPreambleState(renderState, preambleState) { + renderState = renderState.preamble; + null === renderState.htmlChunks && + preambleState.htmlChunks && + (renderState.htmlChunks = preambleState.htmlChunks); + null === renderState.headChunks && + preambleState.headChunks && + (renderState.headChunks = preambleState.headChunks); + null === renderState.bodyChunks && + preambleState.bodyChunks && + (renderState.bodyChunks = preambleState.bodyChunks); +} +function writeBootstrap(destination, renderState) { + renderState = renderState.bootstrapChunks; + for (var i = 0; i < renderState.length - 1; i++) + destination.push(renderState[i]); + return i < renderState.length + ? ((i = renderState[i]), (renderState.length = 0), destination.push(i)) + : !0; +} +function writeStartPendingSuspenseBoundary(destination, renderState, id) { + destination.push('\x3c!--$?--\x3e<template id="'); + if (null === id) throw Error(formatProdErrorMessage(395)); + destination.push(renderState.boundaryPrefix); + renderState = id.toString(16); + destination.push(renderState); + return destination.push('"></template>'); +} +function writeStartSegment(destination, renderState, formatContext, id) { + switch (formatContext.insertionMode) { + case 0: + case 1: + case 3: + case 2: + return ( + destination.push('<div hidden id="'), + destination.push(renderState.segmentPrefix), + (renderState = id.toString(16)), + destination.push(renderState), + destination.push('">') + ); + case 4: + return ( + destination.push('<svg aria-hidden="true" style="display:none" id="'), + destination.push(renderState.segmentPrefix), + (renderState = id.toString(16)), + destination.push(renderState), + destination.push('">') + ); + case 5: + return ( + destination.push('<math aria-hidden="true" style="display:none" id="'), + destination.push(renderState.segmentPrefix), + (renderState = id.toString(16)), + destination.push(renderState), + destination.push('">') + ); + case 6: + return ( + destination.push('<table hidden id="'), + destination.push(renderState.segmentPrefix), + (renderState = id.toString(16)), + destination.push(renderState), + destination.push('">') + ); + case 7: + return ( + destination.push('<table hidden><tbody id="'), + destination.push(renderState.segmentPrefix), + (renderState = id.toString(16)), + destination.push(renderState), + destination.push('">') + ); + case 8: + return ( + destination.push('<table hidden><tr id="'), + destination.push(renderState.segmentPrefix), + (renderState = id.toString(16)), + destination.push(renderState), + destination.push('">') + ); + case 9: + return ( + destination.push('<table hidden><colgroup id="'), + destination.push(renderState.segmentPrefix), + (renderState = id.toString(16)), + destination.push(renderState), + destination.push('">') + ); + default: + throw Error(formatProdErrorMessage(397)); + } +} +function writeEndSegment(destination, formatContext) { + switch (formatContext.insertionMode) { + case 0: + case 1: + case 3: + case 2: + return destination.push("</div>"); + case 4: + return destination.push("</svg>"); + case 5: + return destination.push("</math>"); + case 6: + return destination.push("</table>"); + case 7: + return destination.push("</tbody></table>"); + case 8: + return destination.push("</tr></table>"); + case 9: + return destination.push("</colgroup></table>"); + default: + throw Error(formatProdErrorMessage(397)); + } +} +var regexForJSStringsInInstructionScripts = /[<\u2028\u2029]/g; +function escapeJSStringsForInstructionScripts(input) { + return JSON.stringify(input).replace( + regexForJSStringsInInstructionScripts, + function (match) { + switch (match) { + case "<": + return "\\u003c"; + case "\u2028": + return "\\u2028"; + case "\u2029": + return "\\u2029"; + default: + throw Error( + "escapeJSStringsForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React" + ); + } + } + ); +} +var regexForJSStringsInScripts = /[&><\u2028\u2029]/g; +function escapeJSObjectForInstructionScripts(input) { + return JSON.stringify(input).replace( + regexForJSStringsInScripts, + function (match) { + switch (match) { + case "&": + return "\\u0026"; + case ">": + return "\\u003e"; + case "<": + return "\\u003c"; + case "\u2028": + return "\\u2028"; + case "\u2029": + return "\\u2029"; + default: + throw Error( + "escapeJSObjectForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React" + ); + } + } + ); +} +var currentlyRenderingBoundaryHasStylesToHoist = !1, + destinationHasCapacity = !0; +function flushStyleTagsLateForBoundary(styleQueue) { + var rules = styleQueue.rules, + hrefs = styleQueue.hrefs, + i = 0; + if (hrefs.length) { + this.push(currentlyFlushingRenderState.startInlineStyle); + this.push(' media="not all" data-precedence="'); + this.push(styleQueue.precedence); + for (this.push('" data-href="'); i < hrefs.length - 1; i++) + this.push(hrefs[i]), this.push(" "); + this.push(hrefs[i]); + this.push('">'); + for (i = 0; i < rules.length; i++) this.push(rules[i]); + destinationHasCapacity = this.push("</style>"); + currentlyRenderingBoundaryHasStylesToHoist = !0; + rules.length = 0; + hrefs.length = 0; + } +} +function hasStylesToHoist(stylesheet) { + return 2 !== stylesheet.state + ? (currentlyRenderingBoundaryHasStylesToHoist = !0) + : !1; +} +function writeHoistablesForBoundary(destination, hoistableState, renderState) { + currentlyRenderingBoundaryHasStylesToHoist = !1; + destinationHasCapacity = !0; + currentlyFlushingRenderState = renderState; + hoistableState.styles.forEach(flushStyleTagsLateForBoundary, destination); + currentlyFlushingRenderState = null; + hoistableState.stylesheets.forEach(hasStylesToHoist); + currentlyRenderingBoundaryHasStylesToHoist && + (renderState.stylesToHoist = !0); + return destinationHasCapacity; +} +function flushResource(resource) { + for (var i = 0; i < resource.length; i++) this.push(resource[i]); + resource.length = 0; +} +var stylesheetFlushingQueue = []; +function flushStyleInPreamble(stylesheet) { + pushLinkImpl(stylesheetFlushingQueue, stylesheet.props); + for (var i = 0; i < stylesheetFlushingQueue.length; i++) + this.push(stylesheetFlushingQueue[i]); + stylesheetFlushingQueue.length = 0; + stylesheet.state = 2; +} +function flushStylesInPreamble(styleQueue) { + var hasStylesheets = 0 < styleQueue.sheets.size; + styleQueue.sheets.forEach(flushStyleInPreamble, this); + styleQueue.sheets.clear(); + var rules = styleQueue.rules, + hrefs = styleQueue.hrefs; + if (!hasStylesheets || hrefs.length) { + this.push(currentlyFlushingRenderState.startInlineStyle); + this.push(' data-precedence="'); + this.push(styleQueue.precedence); + styleQueue = 0; + if (hrefs.length) { + for ( + this.push('" data-href="'); + styleQueue < hrefs.length - 1; + styleQueue++ + ) + this.push(hrefs[styleQueue]), this.push(" "); + this.push(hrefs[styleQueue]); + } + this.push('">'); + for (styleQueue = 0; styleQueue < rules.length; styleQueue++) + this.push(rules[styleQueue]); + this.push("</style>"); + rules.length = 0; + hrefs.length = 0; + } +} +function preloadLateStyle(stylesheet) { + if (0 === stylesheet.state) { + stylesheet.state = 1; + var props = stylesheet.props; + pushLinkImpl(stylesheetFlushingQueue, { + rel: "preload", + as: "style", + href: stylesheet.props.href, + crossOrigin: props.crossOrigin, + fetchPriority: props.fetchPriority, + integrity: props.integrity, + media: props.media, + hrefLang: props.hrefLang, + referrerPolicy: props.referrerPolicy + }); + for ( + stylesheet = 0; + stylesheet < stylesheetFlushingQueue.length; + stylesheet++ + ) + this.push(stylesheetFlushingQueue[stylesheet]); + stylesheetFlushingQueue.length = 0; + } +} +function preloadLateStyles(styleQueue) { + styleQueue.sheets.forEach(preloadLateStyle, this); + styleQueue.sheets.clear(); +} +function pushCompletedShellIdAttribute(target, resumableState) { + 0 === (resumableState.instructions & 32) && + ((resumableState.instructions |= 32), + target.push( + ' id="', + escapeTextForBrowser("_" + resumableState.idPrefix + "R_"), + '"' + )); +} +function writeStyleResourceDependenciesInJS(destination, hoistableState) { + destination.push("["); + var nextArrayOpenBrackChunk = "["; + hoistableState.stylesheets.forEach(function (resource) { + if (2 !== resource.state) + if (3 === resource.state) + destination.push(nextArrayOpenBrackChunk), + (resource = escapeJSObjectForInstructionScripts( + "" + resource.props.href + )), + destination.push(resource), + destination.push("]"), + (nextArrayOpenBrackChunk = ",["); + else { + destination.push(nextArrayOpenBrackChunk); + var precedence = resource.props["data-precedence"], + props = resource.props, + coercedHref = sanitizeURL("" + resource.props.href); + coercedHref = escapeJSObjectForInstructionScripts(coercedHref); + destination.push(coercedHref); + precedence = "" + precedence; + destination.push(","); + precedence = escapeJSObjectForInstructionScripts(precedence); + destination.push(precedence); + for (var propKey in props) + if ( + hasOwnProperty.call(props, propKey) && + ((precedence = props[propKey]), null != precedence) + ) + switch (propKey) { + case "href": + case "rel": + case "precedence": + case "data-precedence": + break; + case "children": + case "dangerouslySetInnerHTML": + throw Error(formatProdErrorMessage(399, "link")); + default: + writeStyleResourceAttributeInJS( + destination, + propKey, + precedence + ); + } + destination.push("]"); + nextArrayOpenBrackChunk = ",["; + resource.state = 3; + } + }); + destination.push("]"); +} +function writeStyleResourceAttributeInJS(destination, name, value) { + var attributeName = name.toLowerCase(); + switch (typeof value) { + case "function": + case "symbol": + return; + } + switch (name) { + case "innerHTML": + case "dangerouslySetInnerHTML": + case "suppressContentEditableWarning": + case "suppressHydrationWarning": + case "style": + case "ref": + return; + case "className": + attributeName = "class"; + name = "" + value; + break; + case "hidden": + if (!1 === value) return; + name = ""; + break; + case "src": + case "href": + value = sanitizeURL(value); + name = "" + value; + break; + default: + if ( + (2 < name.length && + ("o" === name[0] || "O" === name[0]) && + ("n" === name[1] || "N" === name[1])) || + !isAttributeNameSafe(name) + ) + return; + name = "" + value; + } + destination.push(","); + attributeName = escapeJSObjectForInstructionScripts(attributeName); + destination.push(attributeName); + destination.push(","); + attributeName = escapeJSObjectForInstructionScripts(name); + destination.push(attributeName); +} +function createHoistableState() { + return { styles: new Set(), stylesheets: new Set(), suspenseyImages: !1 }; +} +function prefetchDNS(href) { + var request = currentRequest ? currentRequest : null; + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if ("string" === typeof href && href) { + if (!resumableState.dnsResources.hasOwnProperty(href)) { + resumableState.dnsResources[href] = null; + resumableState = renderState.headers; + var header, JSCompiler_temp; + if ( + (JSCompiler_temp = + resumableState && 0 < resumableState.remainingCapacity) + ) + JSCompiler_temp = + ((header = + "<" + + ("" + href).replace( + regexForHrefInLinkHeaderURLContext, + escapeHrefForLinkHeaderURLContextReplacer + ) + + ">; rel=dns-prefetch"), + 0 <= (resumableState.remainingCapacity -= header.length + 2)); + JSCompiler_temp + ? ((renderState.resets.dns[href] = null), + resumableState.preconnects && (resumableState.preconnects += ", "), + (resumableState.preconnects += header)) + : ((header = []), + pushLinkImpl(header, { href: href, rel: "dns-prefetch" }), + renderState.preconnects.add(header)); + } + enqueueFlush(request); + } + } else previousDispatcher.D(href); +} +function preconnect(href, crossOrigin) { + var request = currentRequest ? currentRequest : null; + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if ("string" === typeof href && href) { + var bucket = + "use-credentials" === crossOrigin + ? "credentials" + : "string" === typeof crossOrigin + ? "anonymous" + : "default"; + if (!resumableState.connectResources[bucket].hasOwnProperty(href)) { + resumableState.connectResources[bucket][href] = null; + resumableState = renderState.headers; + var header, JSCompiler_temp; + if ( + (JSCompiler_temp = + resumableState && 0 < resumableState.remainingCapacity) + ) { + JSCompiler_temp = + "<" + + ("" + href).replace( + regexForHrefInLinkHeaderURLContext, + escapeHrefForLinkHeaderURLContextReplacer + ) + + ">; rel=preconnect"; + if ("string" === typeof crossOrigin) { + var escapedCrossOrigin = ("" + crossOrigin).replace( + regexForLinkHeaderQuotedParamValueContext, + escapeStringForLinkHeaderQuotedParamValueContextReplacer + ); + JSCompiler_temp += '; crossorigin="' + escapedCrossOrigin + '"'; + } + JSCompiler_temp = + ((header = JSCompiler_temp), + 0 <= (resumableState.remainingCapacity -= header.length + 2)); + } + JSCompiler_temp + ? ((renderState.resets.connect[bucket][href] = null), + resumableState.preconnects && (resumableState.preconnects += ", "), + (resumableState.preconnects += header)) + : ((bucket = []), + pushLinkImpl(bucket, { + rel: "preconnect", + href: href, + crossOrigin: crossOrigin + }), + renderState.preconnects.add(bucket)); + } + enqueueFlush(request); + } + } else previousDispatcher.C(href, crossOrigin); +} +function preload(href, as, options) { + var request = currentRequest ? currentRequest : null; + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if (as && href) { + switch (as) { + case "image": + if (options) { + var imageSrcSet = options.imageSrcSet; + var imageSizes = options.imageSizes; + var fetchPriority = options.fetchPriority; + } + var key = imageSrcSet + ? imageSrcSet + "\n" + (imageSizes || "") + : href; + if (resumableState.imageResources.hasOwnProperty(key)) return; + resumableState.imageResources[key] = PRELOAD_NO_CREDS; + resumableState = renderState.headers; + var header; + resumableState && + 0 < resumableState.remainingCapacity && + "string" !== typeof imageSrcSet && + "high" === fetchPriority && + ((header = getPreloadAsHeader(href, as, options)), + 0 <= (resumableState.remainingCapacity -= header.length + 2)) + ? ((renderState.resets.image[key] = PRELOAD_NO_CREDS), + resumableState.highImagePreloads && + (resumableState.highImagePreloads += ", "), + (resumableState.highImagePreloads += header)) + : ((resumableState = []), + pushLinkImpl( + resumableState, + assign( + { rel: "preload", href: imageSrcSet ? void 0 : href, as: as }, + options + ) + ), + "high" === fetchPriority + ? renderState.highImagePreloads.add(resumableState) + : (renderState.bulkPreloads.add(resumableState), + renderState.preloads.images.set(key, resumableState))); + break; + case "style": + if (resumableState.styleResources.hasOwnProperty(href)) return; + imageSrcSet = []; + pushLinkImpl( + imageSrcSet, + assign({ rel: "preload", href: href, as: as }, options) + ); + resumableState.styleResources[href] = + !options || + ("string" !== typeof options.crossOrigin && + "string" !== typeof options.integrity) + ? PRELOAD_NO_CREDS + : [options.crossOrigin, options.integrity]; + renderState.preloads.stylesheets.set(href, imageSrcSet); + renderState.bulkPreloads.add(imageSrcSet); + break; + case "script": + if (resumableState.scriptResources.hasOwnProperty(href)) return; + imageSrcSet = []; + renderState.preloads.scripts.set(href, imageSrcSet); + renderState.bulkPreloads.add(imageSrcSet); + pushLinkImpl( + imageSrcSet, + assign({ rel: "preload", href: href, as: as }, options) + ); + resumableState.scriptResources[href] = + !options || + ("string" !== typeof options.crossOrigin && + "string" !== typeof options.integrity) + ? PRELOAD_NO_CREDS + : [options.crossOrigin, options.integrity]; + break; + default: + if (resumableState.unknownResources.hasOwnProperty(as)) { + if ( + ((imageSrcSet = resumableState.unknownResources[as]), + imageSrcSet.hasOwnProperty(href)) + ) + return; + } else + (imageSrcSet = {}), + (resumableState.unknownResources[as] = imageSrcSet); + imageSrcSet[href] = PRELOAD_NO_CREDS; + if ( + (resumableState = renderState.headers) && + 0 < resumableState.remainingCapacity && + "font" === as && + ((key = getPreloadAsHeader(href, as, options)), + 0 <= (resumableState.remainingCapacity -= key.length + 2)) + ) + (renderState.resets.font[href] = PRELOAD_NO_CREDS), + resumableState.fontPreloads && + (resumableState.fontPreloads += ", "), + (resumableState.fontPreloads += key); + else + switch ( + ((resumableState = []), + (href = assign({ rel: "preload", href: href, as: as }, options)), + pushLinkImpl(resumableState, href), + as) + ) { + case "font": + renderState.fontPreloads.add(resumableState); + break; + default: + renderState.bulkPreloads.add(resumableState); + } + } + enqueueFlush(request); + } + } else previousDispatcher.L(href, as, options); +} +function preloadModule(href, options) { + var request = currentRequest ? currentRequest : null; + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if (href) { + var as = + options && "string" === typeof options.as ? options.as : "script"; + switch (as) { + case "script": + if (resumableState.moduleScriptResources.hasOwnProperty(href)) return; + as = []; + resumableState.moduleScriptResources[href] = + !options || + ("string" !== typeof options.crossOrigin && + "string" !== typeof options.integrity) + ? PRELOAD_NO_CREDS + : [options.crossOrigin, options.integrity]; + renderState.preloads.moduleScripts.set(href, as); + break; + default: + if (resumableState.moduleUnknownResources.hasOwnProperty(as)) { + var resources = resumableState.unknownResources[as]; + if (resources.hasOwnProperty(href)) return; + } else + (resources = {}), + (resumableState.moduleUnknownResources[as] = resources); + as = []; + resources[href] = PRELOAD_NO_CREDS; + } + pushLinkImpl(as, assign({ rel: "modulepreload", href: href }, options)); + renderState.bulkPreloads.add(as); + enqueueFlush(request); + } + } else previousDispatcher.m(href, options); +} +function preinitStyle(href, precedence, options) { + var request = currentRequest ? currentRequest : null; + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if (href) { + precedence = precedence || "default"; + var styleQueue = renderState.styles.get(precedence), + resourceState = resumableState.styleResources.hasOwnProperty(href) + ? resumableState.styleResources[href] + : void 0; + null !== resourceState && + ((resumableState.styleResources[href] = null), + styleQueue || + ((styleQueue = { + precedence: escapeTextForBrowser(precedence), + rules: [], + hrefs: [], + sheets: new Map() + }), + renderState.styles.set(precedence, styleQueue)), + (precedence = { + state: 0, + props: assign( + { rel: "stylesheet", href: href, "data-precedence": precedence }, + options + ) + }), + resourceState && + (2 === resourceState.length && + adoptPreloadCredentials(precedence.props, resourceState), + (renderState = renderState.preloads.stylesheets.get(href)) && + 0 < renderState.length + ? (renderState.length = 0) + : (precedence.state = 1)), + styleQueue.sheets.set(href, precedence), + enqueueFlush(request)); + } + } else previousDispatcher.S(href, precedence, options); +} +function preinitScript(src, options) { + var request = currentRequest ? currentRequest : null; + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if (src) { + var resourceState = resumableState.scriptResources.hasOwnProperty(src) + ? resumableState.scriptResources[src] + : void 0; + null !== resourceState && + ((resumableState.scriptResources[src] = null), + (options = assign({ src: src, async: !0 }, options)), + resourceState && + (2 === resourceState.length && + adoptPreloadCredentials(options, resourceState), + (src = renderState.preloads.scripts.get(src))) && + (src.length = 0), + (src = []), + renderState.scripts.add(src), + pushScriptImpl(src, options), + enqueueFlush(request)); + } + } else previousDispatcher.X(src, options); +} +function preinitModuleScript(src, options) { + var request = currentRequest ? currentRequest : null; + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if (src) { + var resourceState = resumableState.moduleScriptResources.hasOwnProperty( + src + ) + ? resumableState.moduleScriptResources[src] + : void 0; + null !== resourceState && + ((resumableState.moduleScriptResources[src] = null), + (options = assign({ src: src, type: "module", async: !0 }, options)), + resourceState && + (2 === resourceState.length && + adoptPreloadCredentials(options, resourceState), + (src = renderState.preloads.moduleScripts.get(src))) && + (src.length = 0), + (src = []), + renderState.scripts.add(src), + pushScriptImpl(src, options), + enqueueFlush(request)); + } + } else previousDispatcher.M(src, options); +} +function adoptPreloadCredentials(target, preloadState) { + null == target.crossOrigin && (target.crossOrigin = preloadState[0]); + null == target.integrity && (target.integrity = preloadState[1]); +} +function getPreloadAsHeader(href, as, params) { + href = ("" + href).replace( + regexForHrefInLinkHeaderURLContext, + escapeHrefForLinkHeaderURLContextReplacer + ); + as = ("" + as).replace( + regexForLinkHeaderQuotedParamValueContext, + escapeStringForLinkHeaderQuotedParamValueContextReplacer + ); + as = "<" + href + '>; rel=preload; as="' + as + '"'; + for (var paramName in params) + hasOwnProperty.call(params, paramName) && + ((href = params[paramName]), + "string" === typeof href && + (as += + "; " + + paramName.toLowerCase() + + '="' + + ("" + href).replace( + regexForLinkHeaderQuotedParamValueContext, + escapeStringForLinkHeaderQuotedParamValueContextReplacer + ) + + '"')); + return as; +} +var regexForHrefInLinkHeaderURLContext = /[<>\r\n]/g; +function escapeHrefForLinkHeaderURLContextReplacer(match) { + switch (match) { + case "<": + return "%3C"; + case ">": + return "%3E"; + case "\n": + return "%0A"; + case "\r": + return "%0D"; + default: + throw Error( + "escapeLinkHrefForHeaderContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React" + ); + } +} +var regexForLinkHeaderQuotedParamValueContext = /["';,\r\n]/g; +function escapeStringForLinkHeaderQuotedParamValueContextReplacer(match) { + switch (match) { + case '"': + return "%22"; + case "'": + return "%27"; + case ";": + return "%3B"; + case ",": + return "%2C"; + case "\n": + return "%0A"; + case "\r": + return "%0D"; + default: + throw Error( + "escapeStringForLinkHeaderQuotedParamValueContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React" + ); + } +} +function hoistStyleQueueDependency(styleQueue) { + this.styles.add(styleQueue); +} +function hoistStylesheetDependency(stylesheet) { + this.stylesheets.add(stylesheet); +} +function hoistHoistables(parentState, childState) { + childState.styles.forEach(hoistStyleQueueDependency, parentState); + childState.stylesheets.forEach(hoistStylesheetDependency, parentState); + childState.suspenseyImages && (parentState.suspenseyImages = !0); +} +function createRenderState(resumableState, generateStaticMarkup) { + var idPrefix = resumableState.idPrefix, + bootstrapChunks = [], + bootstrapScriptContent = resumableState.bootstrapScriptContent, + bootstrapScripts = resumableState.bootstrapScripts, + bootstrapModules = resumableState.bootstrapModules; + void 0 !== bootstrapScriptContent && + (bootstrapChunks.push("<script"), + pushCompletedShellIdAttribute(bootstrapChunks, resumableState), + bootstrapChunks.push( + ">", + ("" + bootstrapScriptContent).replace(scriptRegex, scriptReplacer), + "\x3c/script>" + )); + bootstrapScriptContent = idPrefix + "P:"; + var JSCompiler_object_inline_segmentPrefix_1673 = idPrefix + "S:"; + idPrefix += "B:"; + var JSCompiler_object_inline_preconnects_1687 = new Set(), + JSCompiler_object_inline_fontPreloads_1688 = new Set(), + JSCompiler_object_inline_highImagePreloads_1689 = new Set(), + JSCompiler_object_inline_styles_1690 = new Map(), + JSCompiler_object_inline_bootstrapScripts_1691 = new Set(), + JSCompiler_object_inline_scripts_1692 = new Set(), + JSCompiler_object_inline_bulkPreloads_1693 = new Set(), + JSCompiler_object_inline_preloads_1694 = { + images: new Map(), + stylesheets: new Map(), + scripts: new Map(), + moduleScripts: new Map() + }; + if (void 0 !== bootstrapScripts) + for (var i = 0; i < bootstrapScripts.length; i++) { + var scriptConfig = bootstrapScripts[i], + src, + crossOrigin = void 0, + integrity = void 0, + props = { + rel: "preload", + as: "script", + fetchPriority: "low", + nonce: void 0 + }; + "string" === typeof scriptConfig + ? (props.href = src = scriptConfig) + : ((props.href = src = scriptConfig.src), + (props.integrity = integrity = + "string" === typeof scriptConfig.integrity + ? scriptConfig.integrity + : void 0), + (props.crossOrigin = crossOrigin = + "string" === typeof scriptConfig || null == scriptConfig.crossOrigin + ? void 0 + : "use-credentials" === scriptConfig.crossOrigin + ? "use-credentials" + : "")); + scriptConfig = resumableState; + var href = src; + scriptConfig.scriptResources[href] = null; + scriptConfig.moduleScriptResources[href] = null; + scriptConfig = []; + pushLinkImpl(scriptConfig, props); + JSCompiler_object_inline_bootstrapScripts_1691.add(scriptConfig); + bootstrapChunks.push('<script src="', escapeTextForBrowser(src), '"'); + "string" === typeof integrity && + bootstrapChunks.push( + ' integrity="', + escapeTextForBrowser(integrity), + '"' + ); + "string" === typeof crossOrigin && + bootstrapChunks.push( + ' crossorigin="', + escapeTextForBrowser(crossOrigin), + '"' + ); + pushCompletedShellIdAttribute(bootstrapChunks, resumableState); + bootstrapChunks.push(' async="">\x3c/script>'); + } + if (void 0 !== bootstrapModules) + for ( + bootstrapScripts = 0; + bootstrapScripts < bootstrapModules.length; + bootstrapScripts++ + ) + (props = bootstrapModules[bootstrapScripts]), + (crossOrigin = src = void 0), + (integrity = { + rel: "modulepreload", + fetchPriority: "low", + nonce: void 0 + }), + "string" === typeof props + ? (integrity.href = i = props) + : ((integrity.href = i = props.src), + (integrity.integrity = crossOrigin = + "string" === typeof props.integrity ? props.integrity : void 0), + (integrity.crossOrigin = src = + "string" === typeof props || null == props.crossOrigin + ? void 0 + : "use-credentials" === props.crossOrigin + ? "use-credentials" + : "")), + (props = resumableState), + (scriptConfig = i), + (props.scriptResources[scriptConfig] = null), + (props.moduleScriptResources[scriptConfig] = null), + (props = []), + pushLinkImpl(props, integrity), + JSCompiler_object_inline_bootstrapScripts_1691.add(props), + bootstrapChunks.push( + '<script type="module" src="', + escapeTextForBrowser(i), + '"' + ), + "string" === typeof crossOrigin && + bootstrapChunks.push( + ' integrity="', + escapeTextForBrowser(crossOrigin), + '"' + ), + "string" === typeof src && + bootstrapChunks.push( + ' crossorigin="', + escapeTextForBrowser(src), + '"' + ), + pushCompletedShellIdAttribute(bootstrapChunks, resumableState), + bootstrapChunks.push(' async="">\x3c/script>'); + return { + placeholderPrefix: bootstrapScriptContent, + segmentPrefix: JSCompiler_object_inline_segmentPrefix_1673, + boundaryPrefix: idPrefix, + startInlineScript: "<script", + startInlineStyle: "<style", + preamble: { htmlChunks: null, headChunks: null, bodyChunks: null }, + externalRuntimeScript: null, + bootstrapChunks: bootstrapChunks, + importMapChunks: [], + onHeaders: void 0, + headers: null, + resets: { + font: {}, + dns: {}, + connect: { default: {}, anonymous: {}, credentials: {} }, + image: {}, + style: {} + }, + charsetChunks: [], + viewportChunks: [], + hoistableChunks: [], + preconnects: JSCompiler_object_inline_preconnects_1687, + fontPreloads: JSCompiler_object_inline_fontPreloads_1688, + highImagePreloads: JSCompiler_object_inline_highImagePreloads_1689, + styles: JSCompiler_object_inline_styles_1690, + bootstrapScripts: JSCompiler_object_inline_bootstrapScripts_1691, + scripts: JSCompiler_object_inline_scripts_1692, + bulkPreloads: JSCompiler_object_inline_bulkPreloads_1693, + preloads: JSCompiler_object_inline_preloads_1694, + nonce: { script: void 0, style: void 0 }, + stylesToHoist: !1, + generateStaticMarkup: generateStaticMarkup + }; +} +function pushTextInstance(target, text, renderState, textEmbedded) { + if (renderState.generateStaticMarkup) + return target.push(escapeTextForBrowser(text)), !1; + "" === text + ? (target = textEmbedded) + : (textEmbedded && target.push("\x3c!-- --\x3e"), + target.push(escapeTextForBrowser(text)), + (target = !0)); + return target; +} +function pushSegmentFinale(target, renderState, lastPushedText, textEmbedded) { + renderState.generateStaticMarkup || + (lastPushedText && textEmbedded && target.push("\x3c!-- --\x3e")); +} +var bind = Function.prototype.bind, + REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"); +function getComponentNameFromType(type) { + if (null == type) return null; + if ("function" === typeof type) + return type.$$typeof === REACT_CLIENT_REFERENCE + ? null + : type.displayName || type.name || null; + if ("string" === typeof type) return type; + switch (type) { + case REACT_FRAGMENT_TYPE: + return "Fragment"; + case REACT_PROFILER_TYPE: + return "Profiler"; + case REACT_STRICT_MODE_TYPE: + return "StrictMode"; + case REACT_SUSPENSE_TYPE: + return "Suspense"; + case REACT_SUSPENSE_LIST_TYPE: + return "SuspenseList"; + case REACT_ACTIVITY_TYPE: + return "Activity"; + } + if ("object" === typeof type) + switch (type.$$typeof) { + case REACT_PORTAL_TYPE: + return "Portal"; + case REACT_CONTEXT_TYPE: + return type.displayName || "Context"; + case REACT_CONSUMER_TYPE: + return (type._context.displayName || "Context") + ".Consumer"; + case REACT_FORWARD_REF_TYPE: + var innerType = type.render; + type = type.displayName; + type || + ((type = innerType.displayName || innerType.name || ""), + (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef")); + return type; + case REACT_MEMO_TYPE: + return ( + (innerType = type.displayName || null), + null !== innerType + ? innerType + : getComponentNameFromType(type.type) || "Memo" + ); + case REACT_LAZY_TYPE: + innerType = type._payload; + type = type._init; + try { + return getComponentNameFromType(type(innerType)); + } catch (x) {} + } + return null; +} +var emptyContextObject = {}, + currentActiveSnapshot = null; +function popToNearestCommonAncestor(prev, next) { + if (prev !== next) { + prev.context._currentValue2 = prev.parentValue; + prev = prev.parent; + var parentNext = next.parent; + if (null === prev) { + if (null !== parentNext) throw Error(formatProdErrorMessage(401)); + } else { + if (null === parentNext) throw Error(formatProdErrorMessage(401)); + popToNearestCommonAncestor(prev, parentNext); + } + next.context._currentValue2 = next.value; + } +} +function popAllPrevious(prev) { + prev.context._currentValue2 = prev.parentValue; + prev = prev.parent; + null !== prev && popAllPrevious(prev); +} +function pushAllNext(next) { + var parentNext = next.parent; + null !== parentNext && pushAllNext(parentNext); + next.context._currentValue2 = next.value; +} +function popPreviousToCommonLevel(prev, next) { + prev.context._currentValue2 = prev.parentValue; + prev = prev.parent; + if (null === prev) throw Error(formatProdErrorMessage(402)); + prev.depth === next.depth + ? popToNearestCommonAncestor(prev, next) + : popPreviousToCommonLevel(prev, next); +} +function popNextToCommonLevel(prev, next) { + var parentNext = next.parent; + if (null === parentNext) throw Error(formatProdErrorMessage(402)); + prev.depth === parentNext.depth + ? popToNearestCommonAncestor(prev, parentNext) + : popNextToCommonLevel(prev, parentNext); + next.context._currentValue2 = next.value; +} +function switchContext(newSnapshot) { + var prev = currentActiveSnapshot; + prev !== newSnapshot && + (null === prev + ? pushAllNext(newSnapshot) + : null === newSnapshot + ? popAllPrevious(prev) + : prev.depth === newSnapshot.depth + ? popToNearestCommonAncestor(prev, newSnapshot) + : prev.depth > newSnapshot.depth + ? popPreviousToCommonLevel(prev, newSnapshot) + : popNextToCommonLevel(prev, newSnapshot), + (currentActiveSnapshot = newSnapshot)); +} +var classComponentUpdater = { + enqueueSetState: function (inst, payload) { + inst = inst._reactInternals; + null !== inst.queue && inst.queue.push(payload); + }, + enqueueReplaceState: function (inst, payload) { + inst = inst._reactInternals; + inst.replace = !0; + inst.queue = [payload]; + }, + enqueueForceUpdate: function () {} + }, + emptyTreeContext = { id: 1, overflow: "" }; +function pushTreeContext(baseContext, totalChildren, index) { + var baseIdWithLeadingBit = baseContext.id; + baseContext = baseContext.overflow; + var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1; + baseIdWithLeadingBit &= ~(1 << baseLength); + index += 1; + var length = 32 - clz32(totalChildren) + baseLength; + if (30 < length) { + var numberOfOverflowBits = baseLength - (baseLength % 5); + length = ( + baseIdWithLeadingBit & + ((1 << numberOfOverflowBits) - 1) + ).toString(32); + baseIdWithLeadingBit >>= numberOfOverflowBits; + baseLength -= numberOfOverflowBits; + return { + id: + (1 << (32 - clz32(totalChildren) + baseLength)) | + (index << baseLength) | + baseIdWithLeadingBit, + overflow: length + baseContext + }; + } + return { + id: (1 << length) | (index << baseLength) | baseIdWithLeadingBit, + overflow: baseContext + }; +} +var clz32 = Math.clz32 ? Math.clz32 : clz32Fallback, + log = Math.log, + LN2 = Math.LN2; +function clz32Fallback(x) { + x >>>= 0; + return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0; +} +function noop() {} +var SuspenseException = Error(formatProdErrorMessage(460)); +function trackUsedThenable(thenableState, thenable, index) { + index = thenableState[index]; + void 0 === index + ? thenableState.push(thenable) + : index !== thenable && (thenable.then(noop, noop), (thenable = index)); + switch (thenable.status) { + case "fulfilled": + return thenable.value; + case "rejected": + throw thenable.reason; + default: + "string" === typeof thenable.status + ? thenable.then(noop, noop) + : ((thenableState = thenable), + (thenableState.status = "pending"), + thenableState.then( + function (fulfilledValue) { + if ("pending" === thenable.status) { + var fulfilledThenable = thenable; + fulfilledThenable.status = "fulfilled"; + fulfilledThenable.value = fulfilledValue; + } + }, + function (error) { + if ("pending" === thenable.status) { + var rejectedThenable = thenable; + rejectedThenable.status = "rejected"; + rejectedThenable.reason = error; + } + } + )); + switch (thenable.status) { + case "fulfilled": + return thenable.value; + case "rejected": + throw thenable.reason; + } + suspendedThenable = thenable; + throw SuspenseException; + } +} +var suspendedThenable = null; +function getSuspendedThenable() { + if (null === suspendedThenable) throw Error(formatProdErrorMessage(459)); + var thenable = suspendedThenable; + suspendedThenable = null; + return thenable; +} +function is(x, y) { + return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y); +} +var objectIs = "function" === typeof Object.is ? Object.is : is, + currentlyRenderingComponent = null, + currentlyRenderingTask = null, + currentlyRenderingRequest = null, + currentlyRenderingKeyPath = null, + firstWorkInProgressHook = null, + workInProgressHook = null, + isReRender = !1, + didScheduleRenderPhaseUpdate = !1, + localIdCounter = 0, + actionStateCounter = 0, + actionStateMatchingIndex = -1, + thenableIndexCounter = 0, + thenableState = null, + renderPhaseUpdates = null, + numberOfReRenders = 0; +function resolveCurrentlyRenderingComponent() { + if (null === currentlyRenderingComponent) + throw Error(formatProdErrorMessage(321)); + return currentlyRenderingComponent; +} +function createHook() { + if (0 < numberOfReRenders) throw Error(formatProdErrorMessage(312)); + return { memoizedState: null, queue: null, next: null }; +} +function createWorkInProgressHook() { + null === workInProgressHook + ? null === firstWorkInProgressHook + ? ((isReRender = !1), + (firstWorkInProgressHook = workInProgressHook = createHook())) + : ((isReRender = !0), (workInProgressHook = firstWorkInProgressHook)) + : null === workInProgressHook.next + ? ((isReRender = !1), + (workInProgressHook = workInProgressHook.next = createHook())) + : ((isReRender = !0), (workInProgressHook = workInProgressHook.next)); + return workInProgressHook; +} +function getThenableStateAfterSuspending() { + var state = thenableState; + thenableState = null; + return state; +} +function resetHooksState() { + currentlyRenderingKeyPath = + currentlyRenderingRequest = + currentlyRenderingTask = + currentlyRenderingComponent = + null; + didScheduleRenderPhaseUpdate = !1; + firstWorkInProgressHook = null; + numberOfReRenders = 0; + workInProgressHook = renderPhaseUpdates = null; +} +function basicStateReducer(state, action) { + return "function" === typeof action ? action(state) : action; +} +function useReducer(reducer, initialArg, init) { + currentlyRenderingComponent = resolveCurrentlyRenderingComponent(); + workInProgressHook = createWorkInProgressHook(); + if (isReRender) { + var queue = workInProgressHook.queue; + initialArg = queue.dispatch; + if ( + null !== renderPhaseUpdates && + ((init = renderPhaseUpdates.get(queue)), void 0 !== init) + ) { + renderPhaseUpdates.delete(queue); + queue = workInProgressHook.memoizedState; + do (queue = reducer(queue, init.action)), (init = init.next); + while (null !== init); + workInProgressHook.memoizedState = queue; + return [queue, initialArg]; + } + return [workInProgressHook.memoizedState, initialArg]; + } + reducer = + reducer === basicStateReducer + ? "function" === typeof initialArg + ? initialArg() + : initialArg + : void 0 !== init + ? init(initialArg) + : initialArg; + workInProgressHook.memoizedState = reducer; + reducer = workInProgressHook.queue = { last: null, dispatch: null }; + reducer = reducer.dispatch = dispatchAction.bind( + null, + currentlyRenderingComponent, + reducer + ); + return [workInProgressHook.memoizedState, reducer]; +} +function useMemo(nextCreate, deps) { + currentlyRenderingComponent = resolveCurrentlyRenderingComponent(); + workInProgressHook = createWorkInProgressHook(); + deps = void 0 === deps ? null : deps; + if (null !== workInProgressHook) { + var prevState = workInProgressHook.memoizedState; + if (null !== prevState && null !== deps) { + var prevDeps = prevState[1]; + a: if (null === prevDeps) prevDeps = !1; + else { + for (var i = 0; i < prevDeps.length && i < deps.length; i++) + if (!objectIs(deps[i], prevDeps[i])) { + prevDeps = !1; + break a; + } + prevDeps = !0; + } + if (prevDeps) return prevState[0]; + } + } + nextCreate = nextCreate(); + workInProgressHook.memoizedState = [nextCreate, deps]; + return nextCreate; +} +function dispatchAction(componentIdentity, queue, action) { + if (25 <= numberOfReRenders) throw Error(formatProdErrorMessage(301)); + if (componentIdentity === currentlyRenderingComponent) + if ( + ((didScheduleRenderPhaseUpdate = !0), + (componentIdentity = { action: action, next: null }), + null === renderPhaseUpdates && (renderPhaseUpdates = new Map()), + (action = renderPhaseUpdates.get(queue)), + void 0 === action) + ) + renderPhaseUpdates.set(queue, componentIdentity); + else { + for (queue = action; null !== queue.next; ) queue = queue.next; + queue.next = componentIdentity; + } +} +function throwOnUseEffectEventCall() { + throw Error(formatProdErrorMessage(440)); +} +function unsupportedStartTransition() { + throw Error(formatProdErrorMessage(394)); +} +function unsupportedSetOptimisticState() { + throw Error(formatProdErrorMessage(479)); +} +function useActionState(action, initialState, permalink) { + resolveCurrentlyRenderingComponent(); + var actionStateHookIndex = actionStateCounter++, + request = currentlyRenderingRequest; + if ("function" === typeof action.$$FORM_ACTION) { + var nextPostbackStateKey = null, + componentKeyPath = currentlyRenderingKeyPath; + request = request.formState; + var isSignatureEqual = action.$$IS_SIGNATURE_EQUAL; + if (null !== request && "function" === typeof isSignatureEqual) { + var postbackKey = request[1]; + isSignatureEqual.call(action, request[2], request[3]) && + ((nextPostbackStateKey = + void 0 !== permalink + ? "p" + permalink + : "k" + + murmurhash3_32_gc( + JSON.stringify([componentKeyPath, null, actionStateHookIndex]), + 0 + )), + postbackKey === nextPostbackStateKey && + ((actionStateMatchingIndex = actionStateHookIndex), + (initialState = request[0]))); + } + var boundAction = action.bind(null, initialState); + action = function (payload) { + boundAction(payload); + }; + "function" === typeof boundAction.$$FORM_ACTION && + (action.$$FORM_ACTION = function (prefix) { + prefix = boundAction.$$FORM_ACTION(prefix); + void 0 !== permalink && + ((permalink += ""), (prefix.action = permalink)); + var formData = prefix.data; + formData && + (null === nextPostbackStateKey && + (nextPostbackStateKey = + void 0 !== permalink + ? "p" + permalink + : "k" + + murmurhash3_32_gc( + JSON.stringify([ + componentKeyPath, + null, + actionStateHookIndex + ]), + 0 + )), + formData.append("$ACTION_KEY", nextPostbackStateKey)); + return prefix; + }); + return [initialState, action, !1]; + } + var boundAction$22 = action.bind(null, initialState); + return [ + initialState, + function (payload) { + boundAction$22(payload); + }, + !1 + ]; +} +function unwrapThenable(thenable) { + var index = thenableIndexCounter; + thenableIndexCounter += 1; + null === thenableState && (thenableState = []); + return trackUsedThenable(thenableState, thenable, index); +} +function unsupportedRefresh() { + throw Error(formatProdErrorMessage(393)); +} +var HooksDispatcher = { + readContext: function (context) { + return context._currentValue2; + }, + use: function (usable) { + if (null !== usable && "object" === typeof usable) { + if ("function" === typeof usable.then) return unwrapThenable(usable); + if (usable.$$typeof === REACT_CONTEXT_TYPE) + return usable._currentValue2; + } + throw Error(formatProdErrorMessage(438, String(usable))); + }, + useContext: function (context) { + resolveCurrentlyRenderingComponent(); + return context._currentValue2; + }, + useMemo: useMemo, + useReducer: useReducer, + useRef: function (initialValue) { + currentlyRenderingComponent = resolveCurrentlyRenderingComponent(); + workInProgressHook = createWorkInProgressHook(); + var previousRef = workInProgressHook.memoizedState; + return null === previousRef + ? ((initialValue = { current: initialValue }), + (workInProgressHook.memoizedState = initialValue)) + : previousRef; + }, + useState: function (initialState) { + return useReducer(basicStateReducer, initialState); + }, + useInsertionEffect: noop, + useLayoutEffect: noop, + useCallback: function (callback, deps) { + return useMemo(function () { + return callback; + }, deps); + }, + useImperativeHandle: noop, + useEffect: noop, + useDebugValue: noop, + useDeferredValue: function (value, initialValue) { + resolveCurrentlyRenderingComponent(); + return void 0 !== initialValue ? initialValue : value; + }, + useTransition: function () { + resolveCurrentlyRenderingComponent(); + return [!1, unsupportedStartTransition]; + }, + useId: function () { + var JSCompiler_inline_result = currentlyRenderingTask.treeContext; + var overflow = JSCompiler_inline_result.overflow; + JSCompiler_inline_result = JSCompiler_inline_result.id; + JSCompiler_inline_result = + ( + JSCompiler_inline_result & + ~(1 << (32 - clz32(JSCompiler_inline_result) - 1)) + ).toString(32) + overflow; + var resumableState = currentResumableState; + if (null === resumableState) throw Error(formatProdErrorMessage(404)); + overflow = localIdCounter++; + JSCompiler_inline_result = + "_" + resumableState.idPrefix + "R_" + JSCompiler_inline_result; + 0 < overflow && (JSCompiler_inline_result += "H" + overflow.toString(32)); + return JSCompiler_inline_result + "_"; + }, + useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) { + if (void 0 === getServerSnapshot) + throw Error(formatProdErrorMessage(407)); + return getServerSnapshot(); + }, + useOptimistic: function (passthrough) { + resolveCurrentlyRenderingComponent(); + return [passthrough, unsupportedSetOptimisticState]; + }, + useActionState: useActionState, + useFormState: useActionState, + useHostTransitionStatus: function () { + resolveCurrentlyRenderingComponent(); + return sharedNotPendingObject; + }, + useMemoCache: function (size) { + for (var data = Array(size), i = 0; i < size; i++) + data[i] = REACT_MEMO_CACHE_SENTINEL; + return data; + }, + useCacheRefresh: function () { + return unsupportedRefresh; + }, + useEffectEvent: function () { + return throwOnUseEffectEventCall; + } + }, + currentResumableState = null, + DefaultAsyncDispatcher = { + getCacheForType: function () { + throw Error(formatProdErrorMessage(248)); + }, + cacheSignal: function () { + throw Error(formatProdErrorMessage(248)); + } + }, + prefix, + suffix; +function describeBuiltInComponentFrame(name) { + if (void 0 === prefix) + try { + throw Error(); + } catch (x) { + var match = x.stack.trim().match(/\n( *(at )?)/); + prefix = (match && match[1]) || ""; + suffix = + -1 < x.stack.indexOf("\n at") + ? " (<anonymous>)" + : -1 < x.stack.indexOf("@") + ? "@unknown:0:0" + : ""; + } + return "\n" + prefix + name + suffix; +} +var reentry = !1; +function describeNativeComponentFrame(fn, construct) { + if (!fn || reentry) return ""; + reentry = !0; + var previousPrepareStackTrace = Error.prepareStackTrace; + Error.prepareStackTrace = void 0; + try { + var RunInRootFrame = { + DetermineComponentFrameRoot: function () { + try { + if (construct) { + var Fake = function () { + throw Error(); + }; + Object.defineProperty(Fake.prototype, "props", { + set: function () { + throw Error(); + } + }); + if ("object" === typeof Reflect && Reflect.construct) { + try { + Reflect.construct(Fake, []); + } catch (x) { + var control = x; + } + Reflect.construct(fn, [], Fake); + } else { + try { + Fake.call(); + } catch (x$24) { + control = x$24; + } + fn.call(Fake.prototype); + } + } else { + try { + throw Error(); + } catch (x$25) { + control = x$25; + } + (Fake = fn()) && + "function" === typeof Fake.catch && + Fake.catch(function () {}); + } + } catch (sample) { + if (sample && control && "string" === typeof sample.stack) + return [sample.stack, control.stack]; + } + return [null, null]; + } + }; + RunInRootFrame.DetermineComponentFrameRoot.displayName = + "DetermineComponentFrameRoot"; + var namePropDescriptor = Object.getOwnPropertyDescriptor( + RunInRootFrame.DetermineComponentFrameRoot, + "name" + ); + namePropDescriptor && + namePropDescriptor.configurable && + Object.defineProperty( + RunInRootFrame.DetermineComponentFrameRoot, + "name", + { value: "DetermineComponentFrameRoot" } + ); + var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(), + sampleStack = _RunInRootFrame$Deter[0], + controlStack = _RunInRootFrame$Deter[1]; + if (sampleStack && controlStack) { + var sampleLines = sampleStack.split("\n"), + controlLines = controlStack.split("\n"); + for ( + namePropDescriptor = RunInRootFrame = 0; + RunInRootFrame < sampleLines.length && + !sampleLines[RunInRootFrame].includes("DetermineComponentFrameRoot"); + + ) + RunInRootFrame++; + for ( + ; + namePropDescriptor < controlLines.length && + !controlLines[namePropDescriptor].includes( + "DetermineComponentFrameRoot" + ); + + ) + namePropDescriptor++; + if ( + RunInRootFrame === sampleLines.length || + namePropDescriptor === controlLines.length + ) + for ( + RunInRootFrame = sampleLines.length - 1, + namePropDescriptor = controlLines.length - 1; + 1 <= RunInRootFrame && + 0 <= namePropDescriptor && + sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]; + + ) + namePropDescriptor--; + for ( + ; + 1 <= RunInRootFrame && 0 <= namePropDescriptor; + RunInRootFrame--, namePropDescriptor-- + ) + if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) { + if (1 !== RunInRootFrame || 1 !== namePropDescriptor) { + do + if ( + (RunInRootFrame--, + namePropDescriptor--, + 0 > namePropDescriptor || + sampleLines[RunInRootFrame] !== + controlLines[namePropDescriptor]) + ) { + var frame = + "\n" + + sampleLines[RunInRootFrame].replace(" at new ", " at "); + fn.displayName && + frame.includes("<anonymous>") && + (frame = frame.replace("<anonymous>", fn.displayName)); + return frame; + } + while (1 <= RunInRootFrame && 0 <= namePropDescriptor); + } + break; + } + } + } finally { + (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace); + } + return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : "") + ? describeBuiltInComponentFrame(previousPrepareStackTrace) + : ""; +} +function describeComponentStackByType(type) { + if ("string" === typeof type) return describeBuiltInComponentFrame(type); + if ("function" === typeof type) + return type.prototype && type.prototype.isReactComponent + ? describeNativeComponentFrame(type, !0) + : describeNativeComponentFrame(type, !1); + if ("object" === typeof type && null !== type) { + switch (type.$$typeof) { + case REACT_FORWARD_REF_TYPE: + return describeNativeComponentFrame(type.render, !1); + case REACT_MEMO_TYPE: + return describeNativeComponentFrame(type.type, !1); + case REACT_LAZY_TYPE: + var lazyComponent = type, + payload = lazyComponent._payload; + lazyComponent = lazyComponent._init; + try { + type = lazyComponent(payload); + } catch (x) { + return describeBuiltInComponentFrame("Lazy"); + } + return describeComponentStackByType(type); + } + if ("string" === typeof type.name) { + a: { + payload = type.name; + lazyComponent = type.env; + var location = type.debugLocation; + if ( + null != location && + ((type = Error.prepareStackTrace), + (Error.prepareStackTrace = void 0), + (location = location.stack), + (Error.prepareStackTrace = type), + location.startsWith("Error: react-stack-top-frame\n") && + (location = location.slice(29)), + (type = location.indexOf("\n")), + -1 !== type && (location = location.slice(type + 1)), + (type = location.indexOf("react_stack_bottom_frame")), + -1 !== type && (type = location.lastIndexOf("\n", type)), + (type = -1 !== type ? (location = location.slice(0, type)) : ""), + (location = type.lastIndexOf("\n")), + (type = -1 === location ? type : type.slice(location + 1)), + -1 !== type.indexOf(payload)) + ) { + payload = "\n" + type; + break a; + } + payload = describeBuiltInComponentFrame( + payload + (lazyComponent ? " [" + lazyComponent + "]" : "") + ); + } + return payload; + } + } + switch (type) { + case REACT_SUSPENSE_LIST_TYPE: + return describeBuiltInComponentFrame("SuspenseList"); + case REACT_SUSPENSE_TYPE: + return describeBuiltInComponentFrame("Suspense"); + } + return ""; +} +function isEligibleForOutlining(request, boundary) { + return (500 < boundary.byteSize || !1) && null === boundary.contentPreamble; +} +function defaultErrorHandler(error) { + if ( + "object" === typeof error && + null !== error && + "string" === typeof error.environmentName + ) { + var JSCompiler_inline_result = error.environmentName; + error = [error].slice(0); + "string" === typeof error[0] + ? error.splice( + 0, + 1, + "[%s] " + error[0], + " " + JSCompiler_inline_result + " " + ) + : error.splice(0, 0, "[%s]", " " + JSCompiler_inline_result + " "); + error.unshift(console); + JSCompiler_inline_result = bind.apply(console.error, error); + JSCompiler_inline_result(); + } else console.error(error); + return null; +} +function RequestInstance( + resumableState, + renderState, + rootFormatContext, + progressiveChunkSize, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone, + formState +) { + var abortSet = new Set(); + this.destination = null; + this.flushScheduled = !1; + this.resumableState = resumableState; + this.renderState = renderState; + this.rootFormatContext = rootFormatContext; + this.progressiveChunkSize = + void 0 === progressiveChunkSize ? 12800 : progressiveChunkSize; + this.status = 10; + this.fatalError = null; + this.pendingRootTasks = this.allPendingTasks = this.nextSegmentId = 0; + this.completedPreambleSegments = this.completedRootSegment = null; + this.byteSize = 0; + this.abortableTasks = abortSet; + this.pingedTasks = []; + this.clientRenderedBoundaries = []; + this.completedBoundaries = []; + this.partialBoundaries = []; + this.trackedPostpones = null; + this.onError = void 0 === onError ? defaultErrorHandler : onError; + this.onPostpone = void 0 === onPostpone ? noop : onPostpone; + this.onAllReady = void 0 === onAllReady ? noop : onAllReady; + this.onShellReady = void 0 === onShellReady ? noop : onShellReady; + this.onShellError = void 0 === onShellError ? noop : onShellError; + this.onFatalError = void 0 === onFatalError ? noop : onFatalError; + this.formState = void 0 === formState ? null : formState; +} +function createRequest( + children, + resumableState, + renderState, + rootFormatContext, + progressiveChunkSize, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone, + formState +) { + resumableState = new RequestInstance( + resumableState, + renderState, + rootFormatContext, + progressiveChunkSize, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone, + formState + ); + renderState = createPendingSegment( + resumableState, + 0, + null, + rootFormatContext, + !1, + !1 + ); + renderState.parentFlushed = !0; + children = createRenderTask( + resumableState, + null, + children, + -1, + null, + renderState, + null, + null, + resumableState.abortableTasks, + null, + rootFormatContext, + null, + emptyTreeContext, + null, + null + ); + pushComponentStack(children); + resumableState.pingedTasks.push(children); + return resumableState; +} +var currentRequest = null; +function pingTask(request, task) { + request.pingedTasks.push(task); + 1 === request.pingedTasks.length && + ((request.flushScheduled = null !== request.destination), + performWork(request)); +} +function createSuspenseBoundary( + request, + row, + fallbackAbortableTasks, + contentPreamble, + fallbackPreamble +) { + fallbackAbortableTasks = { + status: 0, + rootSegmentID: -1, + parentFlushed: !1, + pendingTasks: 0, + row: row, + completedSegments: [], + byteSize: 0, + fallbackAbortableTasks: fallbackAbortableTasks, + errorDigest: null, + contentState: createHoistableState(), + fallbackState: createHoistableState(), + contentPreamble: contentPreamble, + fallbackPreamble: fallbackPreamble, + trackedContentKeyPath: null, + trackedFallbackNode: null + }; + null !== row && + (row.pendingTasks++, + (contentPreamble = row.boundaries), + null !== contentPreamble && + (request.allPendingTasks++, + fallbackAbortableTasks.pendingTasks++, + contentPreamble.push(fallbackAbortableTasks)), + (request = row.inheritedHoistables), + null !== request && + hoistHoistables(fallbackAbortableTasks.contentState, request)); + return fallbackAbortableTasks; +} +function createRenderTask( + request, + thenableState, + node, + childIndex, + blockedBoundary, + blockedSegment, + blockedPreamble, + hoistableState, + abortSet, + keyPath, + formatContext, + context, + treeContext, + row, + componentStack +) { + request.allPendingTasks++; + null === blockedBoundary + ? request.pendingRootTasks++ + : blockedBoundary.pendingTasks++; + null !== row && row.pendingTasks++; + var task = { + replay: null, + node: node, + childIndex: childIndex, + ping: function () { + return pingTask(request, task); + }, + blockedBoundary: blockedBoundary, + blockedSegment: blockedSegment, + blockedPreamble: blockedPreamble, + hoistableState: hoistableState, + abortSet: abortSet, + keyPath: keyPath, + formatContext: formatContext, + context: context, + treeContext: treeContext, + row: row, + componentStack: componentStack, + thenableState: thenableState + }; + abortSet.add(task); + return task; +} +function createReplayTask( + request, + thenableState, + replay, + node, + childIndex, + blockedBoundary, + hoistableState, + abortSet, + keyPath, + formatContext, + context, + treeContext, + row, + componentStack +) { + request.allPendingTasks++; + null === blockedBoundary + ? request.pendingRootTasks++ + : blockedBoundary.pendingTasks++; + null !== row && row.pendingTasks++; + replay.pendingTasks++; + var task = { + replay: replay, + node: node, + childIndex: childIndex, + ping: function () { + return pingTask(request, task); + }, + blockedBoundary: blockedBoundary, + blockedSegment: null, + blockedPreamble: null, + hoistableState: hoistableState, + abortSet: abortSet, + keyPath: keyPath, + formatContext: formatContext, + context: context, + treeContext: treeContext, + row: row, + componentStack: componentStack, + thenableState: thenableState + }; + abortSet.add(task); + return task; +} +function createPendingSegment( + request, + index, + boundary, + parentFormatContext, + lastPushedText, + textEmbedded +) { + return { + status: 0, + parentFlushed: !1, + id: -1, + index: index, + chunks: [], + children: [], + preambleChildren: [], + parentFormatContext: parentFormatContext, + boundary: boundary, + lastPushedText: lastPushedText, + textEmbedded: textEmbedded + }; +} +function pushComponentStack(task) { + var node = task.node; + if ("object" === typeof node && null !== node) + switch (node.$$typeof) { + case REACT_ELEMENT_TYPE: + task.componentStack = { parent: task.componentStack, type: node.type }; + } +} +function replaceSuspenseComponentStackWithSuspenseFallbackStack( + componentStack +) { + return null === componentStack + ? null + : { parent: componentStack.parent, type: "Suspense Fallback" }; +} +function getThrownInfo(node$jscomp$0) { + var errorInfo = {}; + node$jscomp$0 && + Object.defineProperty(errorInfo, "componentStack", { + configurable: !0, + enumerable: !0, + get: function () { + try { + var info = "", + node = node$jscomp$0; + do + (info += describeComponentStackByType(node.type)), + (node = node.parent); + while (node); + var JSCompiler_inline_result = info; + } catch (x) { + JSCompiler_inline_result = + "\nError generating stack: " + x.message + "\n" + x.stack; + } + Object.defineProperty(errorInfo, "componentStack", { + value: JSCompiler_inline_result + }); + return JSCompiler_inline_result; + } + }); + return errorInfo; +} +function logRecoverableError(request, error, errorInfo) { + request = request.onError; + error = request(error, errorInfo); + if (null == error || "string" === typeof error) return error; +} +function fatalError(request, error) { + var onShellError = request.onShellError, + onFatalError = request.onFatalError; + onShellError(error); + onFatalError(error); + null !== request.destination + ? ((request.status = 14), request.destination.destroy(error)) + : ((request.status = 13), (request.fatalError = error)); +} +function finishSuspenseListRow(request, row) { + unblockSuspenseListRow(request, row.next, row.hoistables); +} +function unblockSuspenseListRow(request, unblockedRow, inheritedHoistables) { + for (; null !== unblockedRow; ) { + null !== inheritedHoistables && + (hoistHoistables(unblockedRow.hoistables, inheritedHoistables), + (unblockedRow.inheritedHoistables = inheritedHoistables)); + var unblockedBoundaries = unblockedRow.boundaries; + if (null !== unblockedBoundaries) { + unblockedRow.boundaries = null; + for (var i = 0; i < unblockedBoundaries.length; i++) { + var unblockedBoundary = unblockedBoundaries[i]; + null !== inheritedHoistables && + hoistHoistables(unblockedBoundary.contentState, inheritedHoistables); + finishedTask(request, unblockedBoundary, null, null); + } + } + unblockedRow.pendingTasks--; + if (0 < unblockedRow.pendingTasks) break; + inheritedHoistables = unblockedRow.hoistables; + unblockedRow = unblockedRow.next; + } +} +function tryToResolveTogetherRow(request, togetherRow) { + var boundaries = togetherRow.boundaries; + if (null !== boundaries && togetherRow.pendingTasks === boundaries.length) { + for (var allCompleteAndInlinable = !0, i = 0; i < boundaries.length; i++) { + var rowBoundary = boundaries[i]; + if ( + 1 !== rowBoundary.pendingTasks || + rowBoundary.parentFlushed || + isEligibleForOutlining(request, rowBoundary) + ) { + allCompleteAndInlinable = !1; + break; + } + } + allCompleteAndInlinable && + unblockSuspenseListRow(request, togetherRow, togetherRow.hoistables); + } +} +function createSuspenseListRow(previousRow) { + var newRow = { + pendingTasks: 1, + boundaries: null, + hoistables: createHoistableState(), + inheritedHoistables: null, + together: !1, + next: null + }; + null !== previousRow && + 0 < previousRow.pendingTasks && + (newRow.pendingTasks++, + (newRow.boundaries = []), + (previousRow.next = newRow)); + return newRow; +} +function renderSuspenseListRows(request, task, keyPath, rows, revealOrder) { + var prevKeyPath = task.keyPath, + prevTreeContext = task.treeContext, + prevRow = task.row; + task.keyPath = keyPath; + keyPath = rows.length; + var previousSuspenseListRow = null; + if (null !== task.replay) { + var resumeSlots = task.replay.slots; + if (null !== resumeSlots && "object" === typeof resumeSlots) + for (var n = 0; n < keyPath; n++) { + var i = + "backwards" !== revealOrder && + "unstable_legacy-backwards" !== revealOrder + ? n + : keyPath - 1 - n, + node = rows[i]; + task.row = previousSuspenseListRow = createSuspenseListRow( + previousSuspenseListRow + ); + task.treeContext = pushTreeContext(prevTreeContext, keyPath, i); + var resumeSegmentID = resumeSlots[i]; + "number" === typeof resumeSegmentID + ? (resumeNode(request, task, resumeSegmentID, node, i), + delete resumeSlots[i]) + : renderNode(request, task, node, i); + 0 === --previousSuspenseListRow.pendingTasks && + finishSuspenseListRow(request, previousSuspenseListRow); + } + else + for (resumeSlots = 0; resumeSlots < keyPath; resumeSlots++) + (n = + "backwards" !== revealOrder && + "unstable_legacy-backwards" !== revealOrder + ? resumeSlots + : keyPath - 1 - resumeSlots), + (i = rows[n]), + (task.row = previousSuspenseListRow = + createSuspenseListRow(previousSuspenseListRow)), + (task.treeContext = pushTreeContext(prevTreeContext, keyPath, n)), + renderNode(request, task, i, n), + 0 === --previousSuspenseListRow.pendingTasks && + finishSuspenseListRow(request, previousSuspenseListRow); + } else if ( + "backwards" !== revealOrder && + "unstable_legacy-backwards" !== revealOrder + ) + for (revealOrder = 0; revealOrder < keyPath; revealOrder++) + (resumeSlots = rows[revealOrder]), + (task.row = previousSuspenseListRow = + createSuspenseListRow(previousSuspenseListRow)), + (task.treeContext = pushTreeContext( + prevTreeContext, + keyPath, + revealOrder + )), + renderNode(request, task, resumeSlots, revealOrder), + 0 === --previousSuspenseListRow.pendingTasks && + finishSuspenseListRow(request, previousSuspenseListRow); + else { + revealOrder = task.blockedSegment; + resumeSlots = revealOrder.children.length; + n = revealOrder.chunks.length; + for (i = keyPath - 1; 0 <= i; i--) { + node = rows[i]; + task.row = previousSuspenseListRow = createSuspenseListRow( + previousSuspenseListRow + ); + task.treeContext = pushTreeContext(prevTreeContext, keyPath, i); + resumeSegmentID = createPendingSegment( + request, + n, + null, + task.formatContext, + 0 === i ? revealOrder.lastPushedText : !0, + !0 + ); + revealOrder.children.splice(resumeSlots, 0, resumeSegmentID); + task.blockedSegment = resumeSegmentID; + try { + renderNode(request, task, node, i), + pushSegmentFinale( + resumeSegmentID.chunks, + request.renderState, + resumeSegmentID.lastPushedText, + resumeSegmentID.textEmbedded + ), + (resumeSegmentID.status = 1), + 0 === --previousSuspenseListRow.pendingTasks && + finishSuspenseListRow(request, previousSuspenseListRow); + } catch (thrownValue) { + throw ( + ((resumeSegmentID.status = 12 === request.status ? 3 : 4), + thrownValue) + ); + } + } + task.blockedSegment = revealOrder; + revealOrder.lastPushedText = !1; + } + null !== prevRow && + null !== previousSuspenseListRow && + 0 < previousSuspenseListRow.pendingTasks && + (prevRow.pendingTasks++, (previousSuspenseListRow.next = prevRow)); + task.treeContext = prevTreeContext; + task.row = prevRow; + task.keyPath = prevKeyPath; +} +function renderWithHooks(request, task, keyPath, Component, props, secondArg) { + var prevThenableState = task.thenableState; + task.thenableState = null; + currentlyRenderingComponent = {}; + currentlyRenderingTask = task; + currentlyRenderingRequest = request; + currentlyRenderingKeyPath = keyPath; + actionStateCounter = localIdCounter = 0; + actionStateMatchingIndex = -1; + thenableIndexCounter = 0; + thenableState = prevThenableState; + for (request = Component(props, secondArg); didScheduleRenderPhaseUpdate; ) + (didScheduleRenderPhaseUpdate = !1), + (actionStateCounter = localIdCounter = 0), + (actionStateMatchingIndex = -1), + (thenableIndexCounter = 0), + (numberOfReRenders += 1), + (workInProgressHook = null), + (request = Component(props, secondArg)); + resetHooksState(); + return request; +} +function finishFunctionComponent( + request, + task, + keyPath, + children, + hasId, + actionStateCount, + actionStateMatchingIndex +) { + var didEmitActionStateMarkers = !1; + if (0 !== actionStateCount && null !== request.formState) { + var segment = task.blockedSegment; + if (null !== segment) { + didEmitActionStateMarkers = !0; + segment = segment.chunks; + for (var i = 0; i < actionStateCount; i++) + i === actionStateMatchingIndex + ? segment.push("\x3c!--F!--\x3e") + : segment.push("\x3c!--F--\x3e"); + } + } + actionStateCount = task.keyPath; + task.keyPath = keyPath; + hasId + ? ((keyPath = task.treeContext), + (task.treeContext = pushTreeContext(keyPath, 1, 0)), + renderNode(request, task, children, -1), + (task.treeContext = keyPath)) + : didEmitActionStateMarkers + ? renderNode(request, task, children, -1) + : renderNodeDestructive(request, task, children, -1); + task.keyPath = actionStateCount; +} +function renderElement(request, task, keyPath, type, props, ref) { + if ("function" === typeof type) + if (type.prototype && type.prototype.isReactComponent) { + var newProps = props; + if ("ref" in props) { + newProps = {}; + for (var propName in props) + "ref" !== propName && (newProps[propName] = props[propName]); + } + var defaultProps = type.defaultProps; + if (defaultProps) { + newProps === props && (newProps = assign({}, newProps, props)); + for (var propName$43 in defaultProps) + void 0 === newProps[propName$43] && + (newProps[propName$43] = defaultProps[propName$43]); + } + props = newProps; + newProps = emptyContextObject; + defaultProps = type.contextType; + "object" === typeof defaultProps && + null !== defaultProps && + (newProps = defaultProps._currentValue2); + newProps = new type(props, newProps); + var initialState = void 0 !== newProps.state ? newProps.state : null; + newProps.updater = classComponentUpdater; + newProps.props = props; + newProps.state = initialState; + defaultProps = { queue: [], replace: !1 }; + newProps._reactInternals = defaultProps; + ref = type.contextType; + newProps.context = + "object" === typeof ref && null !== ref + ? ref._currentValue2 + : emptyContextObject; + ref = type.getDerivedStateFromProps; + "function" === typeof ref && + ((ref = ref(props, initialState)), + (initialState = + null === ref || void 0 === ref + ? initialState + : assign({}, initialState, ref)), + (newProps.state = initialState)); + if ( + "function" !== typeof type.getDerivedStateFromProps && + "function" !== typeof newProps.getSnapshotBeforeUpdate && + ("function" === typeof newProps.UNSAFE_componentWillMount || + "function" === typeof newProps.componentWillMount) + ) + if ( + ((type = newProps.state), + "function" === typeof newProps.componentWillMount && + newProps.componentWillMount(), + "function" === typeof newProps.UNSAFE_componentWillMount && + newProps.UNSAFE_componentWillMount(), + type !== newProps.state && + classComponentUpdater.enqueueReplaceState( + newProps, + newProps.state, + null + ), + null !== defaultProps.queue && 0 < defaultProps.queue.length) + ) + if ( + ((type = defaultProps.queue), + (ref = defaultProps.replace), + (defaultProps.queue = null), + (defaultProps.replace = !1), + ref && 1 === type.length) + ) + newProps.state = type[0]; + else { + defaultProps = ref ? type[0] : newProps.state; + initialState = !0; + for (ref = ref ? 1 : 0; ref < type.length; ref++) + (propName$43 = type[ref]), + (propName$43 = + "function" === typeof propName$43 + ? propName$43.call(newProps, defaultProps, props, void 0) + : propName$43), + null != propName$43 && + (initialState + ? ((initialState = !1), + (defaultProps = assign({}, defaultProps, propName$43))) + : assign(defaultProps, propName$43)); + newProps.state = defaultProps; + } + else defaultProps.queue = null; + type = newProps.render(); + if (12 === request.status) throw null; + props = task.keyPath; + task.keyPath = keyPath; + renderNodeDestructive(request, task, type, -1); + task.keyPath = props; + } else { + type = renderWithHooks(request, task, keyPath, type, props, void 0); + if (12 === request.status) throw null; + finishFunctionComponent( + request, + task, + keyPath, + type, + 0 !== localIdCounter, + actionStateCounter, + actionStateMatchingIndex + ); + } + else if ("string" === typeof type) + if (((newProps = task.blockedSegment), null === newProps)) + (newProps = props.children), + (defaultProps = task.formatContext), + (initialState = task.keyPath), + (task.formatContext = getChildFormatContext(defaultProps, type, props)), + (task.keyPath = keyPath), + renderNode(request, task, newProps, -1), + (task.formatContext = defaultProps), + (task.keyPath = initialState); + else { + initialState = pushStartInstance( + newProps.chunks, + type, + props, + request.resumableState, + request.renderState, + task.blockedPreamble, + task.hoistableState, + task.formatContext, + newProps.lastPushedText + ); + newProps.lastPushedText = !1; + defaultProps = task.formatContext; + ref = task.keyPath; + task.keyPath = keyPath; + if ( + 3 === + (task.formatContext = getChildFormatContext(defaultProps, type, props)) + .insertionMode + ) { + keyPath = createPendingSegment( + request, + 0, + null, + task.formatContext, + !1, + !1 + ); + newProps.preambleChildren.push(keyPath); + task.blockedSegment = keyPath; + try { + (keyPath.status = 6), + renderNode(request, task, initialState, -1), + pushSegmentFinale( + keyPath.chunks, + request.renderState, + keyPath.lastPushedText, + keyPath.textEmbedded + ), + (keyPath.status = 1); + } finally { + task.blockedSegment = newProps; + } + } else renderNode(request, task, initialState, -1); + task.formatContext = defaultProps; + task.keyPath = ref; + a: { + task = newProps.chunks; + request = request.resumableState; + switch (type) { + case "title": + case "style": + case "script": + case "area": + case "base": + case "br": + case "col": + case "embed": + case "hr": + case "img": + case "input": + case "keygen": + case "link": + case "meta": + case "param": + case "source": + case "track": + case "wbr": + break a; + case "body": + if (1 >= defaultProps.insertionMode) { + request.hasBody = !0; + break a; + } + break; + case "html": + if (0 === defaultProps.insertionMode) { + request.hasHtml = !0; + break a; + } + break; + case "head": + if (1 >= defaultProps.insertionMode) break a; + } + task.push(endChunkForTag(type)); + } + newProps.lastPushedText = !1; + } + else { + switch (type) { + case REACT_LEGACY_HIDDEN_TYPE: + case REACT_STRICT_MODE_TYPE: + case REACT_PROFILER_TYPE: + case REACT_FRAGMENT_TYPE: + type = task.keyPath; + task.keyPath = keyPath; + renderNodeDestructive(request, task, props.children, -1); + task.keyPath = type; + return; + case REACT_ACTIVITY_TYPE: + type = task.blockedSegment; + null === type + ? "hidden" !== props.mode && + ((type = task.keyPath), + (task.keyPath = keyPath), + renderNode(request, task, props.children, -1), + (task.keyPath = type)) + : "hidden" !== props.mode && + (request.renderState.generateStaticMarkup || + type.chunks.push("\x3c!--&--\x3e"), + (type.lastPushedText = !1), + (newProps = task.keyPath), + (task.keyPath = keyPath), + renderNode(request, task, props.children, -1), + (task.keyPath = newProps), + request.renderState.generateStaticMarkup || + type.chunks.push("\x3c!--/&--\x3e"), + (type.lastPushedText = !1)); + return; + case REACT_SUSPENSE_LIST_TYPE: + a: { + type = props.children; + props = props.revealOrder; + if ( + "forwards" === props || + "backwards" === props || + "unstable_legacy-backwards" === props + ) { + if (isArrayImpl(type)) { + renderSuspenseListRows(request, task, keyPath, type, props); + break a; + } + if ((newProps = getIteratorFn(type))) + if ((newProps = newProps.call(type))) { + defaultProps = newProps.next(); + if (!defaultProps.done) { + do defaultProps = newProps.next(); + while (!defaultProps.done); + renderSuspenseListRows(request, task, keyPath, type, props); + } + break a; + } + } + "together" === props + ? ((props = task.keyPath), + (newProps = task.row), + (defaultProps = task.row = createSuspenseListRow(null)), + (defaultProps.boundaries = []), + (defaultProps.together = !0), + (task.keyPath = keyPath), + renderNodeDestructive(request, task, type, -1), + 0 === --defaultProps.pendingTasks && + finishSuspenseListRow(request, defaultProps), + (task.keyPath = props), + (task.row = newProps), + null !== newProps && + 0 < defaultProps.pendingTasks && + (newProps.pendingTasks++, (defaultProps.next = newProps))) + : ((props = task.keyPath), + (task.keyPath = keyPath), + renderNodeDestructive(request, task, type, -1), + (task.keyPath = props)); + } + return; + case REACT_VIEW_TRANSITION_TYPE: + case REACT_SCOPE_TYPE: + throw Error(formatProdErrorMessage(343)); + case REACT_SUSPENSE_TYPE: + a: if (null !== task.replay) { + type = task.keyPath; + newProps = task.formatContext; + defaultProps = task.row; + task.keyPath = keyPath; + task.formatContext = getSuspenseContentFormatContext( + request.resumableState, + newProps + ); + task.row = null; + keyPath = props.children; + try { + renderNode(request, task, keyPath, -1); + } finally { + (task.keyPath = type), + (task.formatContext = newProps), + (task.row = defaultProps); + } + } else { + type = task.keyPath; + ref = task.formatContext; + var prevRow = task.row, + parentBoundary = task.blockedBoundary; + propName$43 = task.blockedPreamble; + var parentHoistableState = task.hoistableState; + propName = task.blockedSegment; + var fallback = props.fallback; + props = props.children; + var fallbackAbortSet = new Set(); + var newBoundary = createSuspenseBoundary( + request, + task.row, + fallbackAbortSet, + null, + null + ); + null !== request.trackedPostpones && + (newBoundary.trackedContentKeyPath = keyPath); + var boundarySegment = createPendingSegment( + request, + propName.chunks.length, + newBoundary, + task.formatContext, + !1, + !1 + ); + propName.children.push(boundarySegment); + propName.lastPushedText = !1; + var contentRootSegment = createPendingSegment( + request, + 0, + null, + task.formatContext, + !1, + !1 + ); + contentRootSegment.parentFlushed = !0; + if (null !== request.trackedPostpones) { + newProps = task.componentStack; + defaultProps = [keyPath[0], "Suspense Fallback", keyPath[2]]; + initialState = [defaultProps[1], defaultProps[2], [], null]; + request.trackedPostpones.workingMap.set(defaultProps, initialState); + newBoundary.trackedFallbackNode = initialState; + task.blockedSegment = boundarySegment; + task.blockedPreamble = newBoundary.fallbackPreamble; + task.keyPath = defaultProps; + task.formatContext = getSuspenseFallbackFormatContext( + request.resumableState, + ref + ); + task.componentStack = + replaceSuspenseComponentStackWithSuspenseFallbackStack(newProps); + boundarySegment.status = 6; + try { + renderNode(request, task, fallback, -1), + pushSegmentFinale( + boundarySegment.chunks, + request.renderState, + boundarySegment.lastPushedText, + boundarySegment.textEmbedded + ), + (boundarySegment.status = 1); + } catch (thrownValue) { + throw ( + ((boundarySegment.status = 12 === request.status ? 3 : 4), + thrownValue) + ); + } finally { + (task.blockedSegment = propName), + (task.blockedPreamble = propName$43), + (task.keyPath = type), + (task.formatContext = ref); + } + task = createRenderTask( + request, + null, + props, + -1, + newBoundary, + contentRootSegment, + newBoundary.contentPreamble, + newBoundary.contentState, + task.abortSet, + keyPath, + getSuspenseContentFormatContext( + request.resumableState, + task.formatContext + ), + task.context, + task.treeContext, + null, + newProps + ); + pushComponentStack(task); + request.pingedTasks.push(task); + } else { + task.blockedBoundary = newBoundary; + task.blockedPreamble = newBoundary.contentPreamble; + task.hoistableState = newBoundary.contentState; + task.blockedSegment = contentRootSegment; + task.keyPath = keyPath; + task.formatContext = getSuspenseContentFormatContext( + request.resumableState, + ref + ); + task.row = null; + contentRootSegment.status = 6; + try { + if ( + (renderNode(request, task, props, -1), + pushSegmentFinale( + contentRootSegment.chunks, + request.renderState, + contentRootSegment.lastPushedText, + contentRootSegment.textEmbedded + ), + (contentRootSegment.status = 1), + queueCompletedSegment(newBoundary, contentRootSegment), + 0 === newBoundary.pendingTasks && 0 === newBoundary.status) + ) { + if ( + ((newBoundary.status = 1), + !isEligibleForOutlining(request, newBoundary)) + ) { + null !== prevRow && + 0 === --prevRow.pendingTasks && + finishSuspenseListRow(request, prevRow); + 0 === request.pendingRootTasks && + task.blockedPreamble && + preparePreamble(request); + break a; + } + } else + null !== prevRow && + prevRow.together && + tryToResolveTogetherRow(request, prevRow); + } catch (thrownValue$30) { + (newBoundary.status = 4), + 12 === request.status + ? ((contentRootSegment.status = 3), + (newProps = request.fatalError)) + : ((contentRootSegment.status = 4), + (newProps = thrownValue$30)), + (defaultProps = getThrownInfo(task.componentStack)), + (initialState = logRecoverableError( + request, + newProps, + defaultProps + )), + (newBoundary.errorDigest = initialState), + untrackBoundary(request, newBoundary); + } finally { + (task.blockedBoundary = parentBoundary), + (task.blockedPreamble = propName$43), + (task.hoistableState = parentHoistableState), + (task.blockedSegment = propName), + (task.keyPath = type), + (task.formatContext = ref), + (task.row = prevRow); + } + task = createRenderTask( + request, + null, + fallback, + -1, + parentBoundary, + boundarySegment, + newBoundary.fallbackPreamble, + newBoundary.fallbackState, + fallbackAbortSet, + [keyPath[0], "Suspense Fallback", keyPath[2]], + getSuspenseFallbackFormatContext( + request.resumableState, + task.formatContext + ), + task.context, + task.treeContext, + task.row, + replaceSuspenseComponentStackWithSuspenseFallbackStack( + task.componentStack + ) + ); + pushComponentStack(task); + request.pingedTasks.push(task); + } + } + return; + } + if ("object" === typeof type && null !== type) + switch (type.$$typeof) { + case REACT_FORWARD_REF_TYPE: + if ("ref" in props) + for (fallback in ((newProps = {}), props)) + "ref" !== fallback && (newProps[fallback] = props[fallback]); + else newProps = props; + type = renderWithHooks( + request, + task, + keyPath, + type.render, + newProps, + ref + ); + finishFunctionComponent( + request, + task, + keyPath, + type, + 0 !== localIdCounter, + actionStateCounter, + actionStateMatchingIndex + ); + return; + case REACT_MEMO_TYPE: + renderElement(request, task, keyPath, type.type, props, ref); + return; + case REACT_CONTEXT_TYPE: + defaultProps = props.children; + newProps = task.keyPath; + props = props.value; + initialState = type._currentValue2; + type._currentValue2 = props; + ref = currentActiveSnapshot; + currentActiveSnapshot = type = { + parent: ref, + depth: null === ref ? 0 : ref.depth + 1, + context: type, + parentValue: initialState, + value: props + }; + task.context = type; + task.keyPath = keyPath; + renderNodeDestructive(request, task, defaultProps, -1); + request = currentActiveSnapshot; + if (null === request) throw Error(formatProdErrorMessage(403)); + request.context._currentValue2 = request.parentValue; + request = currentActiveSnapshot = request.parent; + task.context = request; + task.keyPath = newProps; + return; + case REACT_CONSUMER_TYPE: + props = props.children; + type = props(type._context._currentValue2); + props = task.keyPath; + task.keyPath = keyPath; + renderNodeDestructive(request, task, type, -1); + task.keyPath = props; + return; + case REACT_LAZY_TYPE: + newProps = type._init; + type = newProps(type._payload); + if (12 === request.status) throw null; + renderElement(request, task, keyPath, type, props, ref); + return; + } + throw Error( + formatProdErrorMessage(130, null == type ? type : typeof type, "") + ); + } +} +function resumeNode(request, task, segmentId, node, childIndex) { + var prevReplay = task.replay, + blockedBoundary = task.blockedBoundary, + resumedSegment = createPendingSegment( + request, + 0, + null, + task.formatContext, + !1, + !1 + ); + resumedSegment.id = segmentId; + resumedSegment.parentFlushed = !0; + try { + (task.replay = null), + (task.blockedSegment = resumedSegment), + renderNode(request, task, node, childIndex), + (resumedSegment.status = 1), + null === blockedBoundary + ? (request.completedRootSegment = resumedSegment) + : (queueCompletedSegment(blockedBoundary, resumedSegment), + blockedBoundary.parentFlushed && + request.partialBoundaries.push(blockedBoundary)); + } finally { + (task.replay = prevReplay), (task.blockedSegment = null); + } +} +function renderNodeDestructive(request, task, node, childIndex) { + null !== task.replay && "number" === typeof task.replay.slots + ? resumeNode(request, task, task.replay.slots, node, childIndex) + : ((task.node = node), + (task.childIndex = childIndex), + (node = task.componentStack), + pushComponentStack(task), + retryNode(request, task), + (task.componentStack = node)); +} +function retryNode(request, task) { + var node = task.node, + childIndex = task.childIndex; + if (null !== node) { + if ("object" === typeof node) { + switch (node.$$typeof) { + case REACT_ELEMENT_TYPE: + var type = node.type, + key = node.key, + props = node.props; + node = props.ref; + var ref = void 0 !== node ? node : null, + name = getComponentNameFromType(type), + keyOrIndex = + null == key ? (-1 === childIndex ? 0 : childIndex) : key; + key = [task.keyPath, name, keyOrIndex]; + if (null !== task.replay) + a: { + var replay = task.replay; + childIndex = replay.nodes; + for (node = 0; node < childIndex.length; node++) { + var node$jscomp$0 = childIndex[node]; + if (keyOrIndex === node$jscomp$0[1]) { + if (4 === node$jscomp$0.length) { + if (null !== name && name !== node$jscomp$0[0]) + throw Error( + formatProdErrorMessage(490, node$jscomp$0[0], name) + ); + var childNodes = node$jscomp$0[2]; + name = node$jscomp$0[3]; + keyOrIndex = task.node; + task.replay = { + nodes: childNodes, + slots: name, + pendingTasks: 1 + }; + try { + renderElement(request, task, key, type, props, ref); + if ( + 1 === task.replay.pendingTasks && + 0 < task.replay.nodes.length + ) + throw Error(formatProdErrorMessage(488)); + task.replay.pendingTasks--; + } catch (x) { + if ( + "object" === typeof x && + null !== x && + (x === SuspenseException || + "function" === typeof x.then) + ) + throw ( + (task.node === keyOrIndex + ? (task.replay = replay) + : childIndex.splice(node, 1), + x) + ); + task.replay.pendingTasks--; + props = getThrownInfo(task.componentStack); + key = request; + request = task.blockedBoundary; + type = x; + props = logRecoverableError(key, type, props); + abortRemainingReplayNodes( + key, + request, + childNodes, + name, + type, + props + ); + } + task.replay = replay; + } else { + if (type !== REACT_SUSPENSE_TYPE) + throw Error( + formatProdErrorMessage( + 490, + "Suspense", + getComponentNameFromType(type) || "Unknown" + ) + ); + b: { + replay = void 0; + type = node$jscomp$0[5]; + ref = node$jscomp$0[2]; + name = node$jscomp$0[3]; + keyOrIndex = + null === node$jscomp$0[4] ? [] : node$jscomp$0[4][2]; + node$jscomp$0 = + null === node$jscomp$0[4] ? null : node$jscomp$0[4][3]; + var prevKeyPath = task.keyPath, + prevContext = task.formatContext, + prevRow = task.row, + previousReplaySet = task.replay, + parentBoundary = task.blockedBoundary, + parentHoistableState = task.hoistableState, + content = props.children, + fallback = props.fallback, + fallbackAbortSet = new Set(); + props = createSuspenseBoundary( + request, + task.row, + fallbackAbortSet, + null, + null + ); + props.parentFlushed = !0; + props.rootSegmentID = type; + task.blockedBoundary = props; + task.hoistableState = props.contentState; + task.keyPath = key; + task.formatContext = getSuspenseContentFormatContext( + request.resumableState, + prevContext + ); + task.row = null; + task.replay = { + nodes: ref, + slots: name, + pendingTasks: 1 + }; + try { + renderNode(request, task, content, -1); + if ( + 1 === task.replay.pendingTasks && + 0 < task.replay.nodes.length + ) + throw Error(formatProdErrorMessage(488)); + task.replay.pendingTasks--; + if (0 === props.pendingTasks && 0 === props.status) { + props.status = 1; + request.completedBoundaries.push(props); + break b; + } + } catch (error) { + (props.status = 4), + (childNodes = getThrownInfo(task.componentStack)), + (replay = logRecoverableError( + request, + error, + childNodes + )), + (props.errorDigest = replay), + task.replay.pendingTasks--, + request.clientRenderedBoundaries.push(props); + } finally { + (task.blockedBoundary = parentBoundary), + (task.hoistableState = parentHoistableState), + (task.replay = previousReplaySet), + (task.keyPath = prevKeyPath), + (task.formatContext = prevContext), + (task.row = prevRow); + } + childNodes = createReplayTask( + request, + null, + { + nodes: keyOrIndex, + slots: node$jscomp$0, + pendingTasks: 0 + }, + fallback, + -1, + parentBoundary, + props.fallbackState, + fallbackAbortSet, + [key[0], "Suspense Fallback", key[2]], + getSuspenseFallbackFormatContext( + request.resumableState, + task.formatContext + ), + task.context, + task.treeContext, + task.row, + replaceSuspenseComponentStackWithSuspenseFallbackStack( + task.componentStack + ) + ); + pushComponentStack(childNodes); + request.pingedTasks.push(childNodes); + } + } + childIndex.splice(node, 1); + break a; + } + } + } + else renderElement(request, task, key, type, props, ref); + return; + case REACT_PORTAL_TYPE: + throw Error(formatProdErrorMessage(257)); + case REACT_LAZY_TYPE: + childNodes = node._init; + node = childNodes(node._payload); + if (12 === request.status) throw null; + renderNodeDestructive(request, task, node, childIndex); + return; + } + if (isArrayImpl(node)) { + renderChildrenArray(request, task, node, childIndex); + return; + } + if ((childNodes = getIteratorFn(node))) + if ((childNodes = childNodes.call(node))) { + node = childNodes.next(); + if (!node.done) { + props = []; + do props.push(node.value), (node = childNodes.next()); + while (!node.done); + renderChildrenArray(request, task, props, childIndex); + } + return; + } + if ("function" === typeof node.then) + return ( + (task.thenableState = null), + renderNodeDestructive(request, task, unwrapThenable(node), childIndex) + ); + if (node.$$typeof === REACT_CONTEXT_TYPE) + return renderNodeDestructive( + request, + task, + node._currentValue2, + childIndex + ); + childIndex = Object.prototype.toString.call(node); + throw Error( + formatProdErrorMessage( + 31, + "[object Object]" === childIndex + ? "object with keys {" + Object.keys(node).join(", ") + "}" + : childIndex + ) + ); + } + if ("string" === typeof node) + (childIndex = task.blockedSegment), + null !== childIndex && + (childIndex.lastPushedText = pushTextInstance( + childIndex.chunks, + node, + request.renderState, + childIndex.lastPushedText + )); + else if ("number" === typeof node || "bigint" === typeof node) + (childIndex = task.blockedSegment), + null !== childIndex && + (childIndex.lastPushedText = pushTextInstance( + childIndex.chunks, + "" + node, + request.renderState, + childIndex.lastPushedText + )); + } +} +function renderChildrenArray(request, task, children, childIndex) { + var prevKeyPath = task.keyPath; + if ( + -1 !== childIndex && + ((task.keyPath = [task.keyPath, "Fragment", childIndex]), + null !== task.replay) + ) { + for ( + var replay = task.replay, replayNodes = replay.nodes, j = 0; + j < replayNodes.length; + j++ + ) { + var node = replayNodes[j]; + if (node[1] === childIndex) { + childIndex = node[2]; + node = node[3]; + task.replay = { nodes: childIndex, slots: node, pendingTasks: 1 }; + try { + renderChildrenArray(request, task, children, -1); + if (1 === task.replay.pendingTasks && 0 < task.replay.nodes.length) + throw Error(formatProdErrorMessage(488)); + task.replay.pendingTasks--; + } catch (x) { + if ( + "object" === typeof x && + null !== x && + (x === SuspenseException || "function" === typeof x.then) + ) + throw x; + task.replay.pendingTasks--; + children = getThrownInfo(task.componentStack); + var boundary = task.blockedBoundary, + error = x; + children = logRecoverableError(request, error, children); + abortRemainingReplayNodes( + request, + boundary, + childIndex, + node, + error, + children + ); + } + task.replay = replay; + replayNodes.splice(j, 1); + break; + } + } + task.keyPath = prevKeyPath; + return; + } + replay = task.treeContext; + replayNodes = children.length; + if ( + null !== task.replay && + ((j = task.replay.slots), null !== j && "object" === typeof j) + ) { + for (childIndex = 0; childIndex < replayNodes; childIndex++) + (node = children[childIndex]), + (task.treeContext = pushTreeContext(replay, replayNodes, childIndex)), + (boundary = j[childIndex]), + "number" === typeof boundary + ? (resumeNode(request, task, boundary, node, childIndex), + delete j[childIndex]) + : renderNode(request, task, node, childIndex); + task.treeContext = replay; + task.keyPath = prevKeyPath; + return; + } + for (j = 0; j < replayNodes; j++) + (childIndex = children[j]), + (task.treeContext = pushTreeContext(replay, replayNodes, j)), + renderNode(request, task, childIndex, j); + task.treeContext = replay; + task.keyPath = prevKeyPath; +} +function trackPostponedBoundary(request, trackedPostpones, boundary) { + boundary.status = 5; + boundary.rootSegmentID = request.nextSegmentId++; + request = boundary.trackedContentKeyPath; + if (null === request) throw Error(formatProdErrorMessage(486)); + var fallbackReplayNode = boundary.trackedFallbackNode, + children = [], + boundaryNode = trackedPostpones.workingMap.get(request); + if (void 0 === boundaryNode) + return ( + (boundary = [ + request[1], + request[2], + children, + null, + fallbackReplayNode, + boundary.rootSegmentID + ]), + trackedPostpones.workingMap.set(request, boundary), + addToReplayParent(boundary, request[0], trackedPostpones), + boundary + ); + boundaryNode[4] = fallbackReplayNode; + boundaryNode[5] = boundary.rootSegmentID; + return boundaryNode; +} +function trackPostpone(request, trackedPostpones, task, segment) { + segment.status = 5; + var keyPath = task.keyPath, + boundary = task.blockedBoundary; + if (null === boundary) + (segment.id = request.nextSegmentId++), + (trackedPostpones.rootSlots = segment.id), + null !== request.completedRootSegment && + (request.completedRootSegment.status = 5); + else { + if (null !== boundary && 0 === boundary.status) { + var boundaryNode = trackPostponedBoundary( + request, + trackedPostpones, + boundary + ); + if ( + boundary.trackedContentKeyPath === keyPath && + -1 === task.childIndex + ) { + -1 === segment.id && + (segment.id = segment.parentFlushed + ? boundary.rootSegmentID + : request.nextSegmentId++); + boundaryNode[3] = segment.id; + return; + } + } + -1 === segment.id && + (segment.id = + segment.parentFlushed && null !== boundary + ? boundary.rootSegmentID + : request.nextSegmentId++); + if (-1 === task.childIndex) + null === keyPath + ? (trackedPostpones.rootSlots = segment.id) + : ((task = trackedPostpones.workingMap.get(keyPath)), + void 0 === task + ? ((task = [keyPath[1], keyPath[2], [], segment.id]), + addToReplayParent(task, keyPath[0], trackedPostpones)) + : (task[3] = segment.id)); + else { + if (null === keyPath) + if (((request = trackedPostpones.rootSlots), null === request)) + request = trackedPostpones.rootSlots = {}; + else { + if ("number" === typeof request) + throw Error(formatProdErrorMessage(491)); + } + else if ( + ((boundary = trackedPostpones.workingMap), + (boundaryNode = boundary.get(keyPath)), + void 0 === boundaryNode) + ) + (request = {}), + (boundaryNode = [keyPath[1], keyPath[2], [], request]), + boundary.set(keyPath, boundaryNode), + addToReplayParent(boundaryNode, keyPath[0], trackedPostpones); + else if (((request = boundaryNode[3]), null === request)) + request = boundaryNode[3] = {}; + else if ("number" === typeof request) + throw Error(formatProdErrorMessage(491)); + request[task.childIndex] = segment.id; + } + } +} +function untrackBoundary(request, boundary) { + request = request.trackedPostpones; + null !== request && + ((boundary = boundary.trackedContentKeyPath), + null !== boundary && + ((boundary = request.workingMap.get(boundary)), + void 0 !== boundary && + ((boundary.length = 4), (boundary[2] = []), (boundary[3] = null)))); +} +function spawnNewSuspendedReplayTask(request, task, thenableState) { + return createReplayTask( + request, + thenableState, + task.replay, + task.node, + task.childIndex, + task.blockedBoundary, + task.hoistableState, + task.abortSet, + task.keyPath, + task.formatContext, + task.context, + task.treeContext, + task.row, + task.componentStack + ); +} +function spawnNewSuspendedRenderTask(request, task, thenableState) { + var segment = task.blockedSegment, + newSegment = createPendingSegment( + request, + segment.chunks.length, + null, + task.formatContext, + segment.lastPushedText, + !0 + ); + segment.children.push(newSegment); + segment.lastPushedText = !1; + return createRenderTask( + request, + thenableState, + task.node, + task.childIndex, + task.blockedBoundary, + newSegment, + task.blockedPreamble, + task.hoistableState, + task.abortSet, + task.keyPath, + task.formatContext, + task.context, + task.treeContext, + task.row, + task.componentStack + ); +} +function renderNode(request, task, node, childIndex) { + var previousFormatContext = task.formatContext, + previousContext = task.context, + previousKeyPath = task.keyPath, + previousTreeContext = task.treeContext, + previousComponentStack = task.componentStack, + segment = task.blockedSegment; + if (null === segment) { + segment = task.replay; + try { + return renderNodeDestructive(request, task, node, childIndex); + } catch (thrownValue) { + if ( + (resetHooksState(), + (node = + thrownValue === SuspenseException + ? getSuspendedThenable() + : thrownValue), + 12 !== request.status && "object" === typeof node && null !== node) + ) { + if ("function" === typeof node.then) { + childIndex = + thrownValue === SuspenseException + ? getThenableStateAfterSuspending() + : null; + request = spawnNewSuspendedReplayTask(request, task, childIndex).ping; + node.then(request, request); + task.formatContext = previousFormatContext; + task.context = previousContext; + task.keyPath = previousKeyPath; + task.treeContext = previousTreeContext; + task.componentStack = previousComponentStack; + task.replay = segment; + switchContext(previousContext); + return; + } + if ("Maximum call stack size exceeded" === node.message) { + node = + thrownValue === SuspenseException + ? getThenableStateAfterSuspending() + : null; + node = spawnNewSuspendedReplayTask(request, task, node); + request.pingedTasks.push(node); + task.formatContext = previousFormatContext; + task.context = previousContext; + task.keyPath = previousKeyPath; + task.treeContext = previousTreeContext; + task.componentStack = previousComponentStack; + task.replay = segment; + switchContext(previousContext); + return; + } + } + } + } else { + var childrenLength = segment.children.length, + chunkLength = segment.chunks.length; + try { + return renderNodeDestructive(request, task, node, childIndex); + } catch (thrownValue$62) { + if ( + (resetHooksState(), + (segment.children.length = childrenLength), + (segment.chunks.length = chunkLength), + (node = + thrownValue$62 === SuspenseException + ? getSuspendedThenable() + : thrownValue$62), + 12 !== request.status && "object" === typeof node && null !== node) + ) { + if ("function" === typeof node.then) { + segment = node; + node = + thrownValue$62 === SuspenseException + ? getThenableStateAfterSuspending() + : null; + request = spawnNewSuspendedRenderTask(request, task, node).ping; + segment.then(request, request); + task.formatContext = previousFormatContext; + task.context = previousContext; + task.keyPath = previousKeyPath; + task.treeContext = previousTreeContext; + task.componentStack = previousComponentStack; + switchContext(previousContext); + return; + } + if ("Maximum call stack size exceeded" === node.message) { + segment = + thrownValue$62 === SuspenseException + ? getThenableStateAfterSuspending() + : null; + segment = spawnNewSuspendedRenderTask(request, task, segment); + request.pingedTasks.push(segment); + task.formatContext = previousFormatContext; + task.context = previousContext; + task.keyPath = previousKeyPath; + task.treeContext = previousTreeContext; + task.componentStack = previousComponentStack; + switchContext(previousContext); + return; + } + } + } + } + task.formatContext = previousFormatContext; + task.context = previousContext; + task.keyPath = previousKeyPath; + task.treeContext = previousTreeContext; + switchContext(previousContext); + throw node; +} +function abortTaskSoft(task) { + var boundary = task.blockedBoundary, + segment = task.blockedSegment; + null !== segment && + ((segment.status = 3), finishedTask(this, boundary, task.row, segment)); +} +function abortRemainingReplayNodes( + request$jscomp$0, + boundary, + nodes, + slots, + error, + errorDigest$jscomp$0 +) { + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + if (4 === node.length) + abortRemainingReplayNodes( + request$jscomp$0, + boundary, + node[2], + node[3], + error, + errorDigest$jscomp$0 + ); + else { + node = node[5]; + var request = request$jscomp$0, + errorDigest = errorDigest$jscomp$0, + resumedBoundary = createSuspenseBoundary( + request, + null, + new Set(), + null, + null + ); + resumedBoundary.parentFlushed = !0; + resumedBoundary.rootSegmentID = node; + resumedBoundary.status = 4; + resumedBoundary.errorDigest = errorDigest; + resumedBoundary.parentFlushed && + request.clientRenderedBoundaries.push(resumedBoundary); + } + } + nodes.length = 0; + if (null !== slots) { + if (null === boundary) throw Error(formatProdErrorMessage(487)); + 4 !== boundary.status && + ((boundary.status = 4), + (boundary.errorDigest = errorDigest$jscomp$0), + boundary.parentFlushed && + request$jscomp$0.clientRenderedBoundaries.push(boundary)); + if ("object" === typeof slots) for (var index in slots) delete slots[index]; + } +} +function abortTask(task, request, error) { + var boundary = task.blockedBoundary, + segment = task.blockedSegment; + if (null !== segment) { + if (6 === segment.status) return; + segment.status = 3; + } + var errorInfo = getThrownInfo(task.componentStack); + if (null === boundary) { + if (13 !== request.status && 14 !== request.status) { + boundary = task.replay; + if (null === boundary) { + null !== request.trackedPostpones && null !== segment + ? ((boundary = request.trackedPostpones), + logRecoverableError(request, error, errorInfo), + trackPostpone(request, boundary, task, segment), + finishedTask(request, null, task.row, segment)) + : (logRecoverableError(request, error, errorInfo), + fatalError(request, error)); + return; + } + boundary.pendingTasks--; + 0 === boundary.pendingTasks && + 0 < boundary.nodes.length && + ((segment = logRecoverableError(request, error, errorInfo)), + abortRemainingReplayNodes( + request, + null, + boundary.nodes, + boundary.slots, + error, + segment + )); + request.pendingRootTasks--; + 0 === request.pendingRootTasks && completeShell(request); + } + } else { + var trackedPostpones$63 = request.trackedPostpones; + if (4 !== boundary.status) { + if (null !== trackedPostpones$63 && null !== segment) + return ( + logRecoverableError(request, error, errorInfo), + trackPostpone(request, trackedPostpones$63, task, segment), + boundary.fallbackAbortableTasks.forEach(function (fallbackTask) { + return abortTask(fallbackTask, request, error); + }), + boundary.fallbackAbortableTasks.clear(), + finishedTask(request, boundary, task.row, segment) + ); + boundary.status = 4; + segment = logRecoverableError(request, error, errorInfo); + boundary.status = 4; + boundary.errorDigest = segment; + untrackBoundary(request, boundary); + boundary.parentFlushed && request.clientRenderedBoundaries.push(boundary); + } + boundary.pendingTasks--; + segment = boundary.row; + null !== segment && + 0 === --segment.pendingTasks && + finishSuspenseListRow(request, segment); + boundary.fallbackAbortableTasks.forEach(function (fallbackTask) { + return abortTask(fallbackTask, request, error); + }); + boundary.fallbackAbortableTasks.clear(); + } + task = task.row; + null !== task && + 0 === --task.pendingTasks && + finishSuspenseListRow(request, task); + request.allPendingTasks--; + 0 === request.allPendingTasks && completeAll(request); +} +function safelyEmitEarlyPreloads(request, shellComplete) { + try { + var renderState = request.renderState, + onHeaders = renderState.onHeaders; + if (onHeaders) { + var headers = renderState.headers; + if (headers) { + renderState.headers = null; + var linkHeader = headers.preconnects; + headers.fontPreloads && + (linkHeader && (linkHeader += ", "), + (linkHeader += headers.fontPreloads)); + headers.highImagePreloads && + (linkHeader && (linkHeader += ", "), + (linkHeader += headers.highImagePreloads)); + if (!shellComplete) { + var queueIter = renderState.styles.values(), + queueStep = queueIter.next(); + b: for ( + ; + 0 < headers.remainingCapacity && !queueStep.done; + queueStep = queueIter.next() + ) + for ( + var sheetIter = queueStep.value.sheets.values(), + sheetStep = sheetIter.next(); + 0 < headers.remainingCapacity && !sheetStep.done; + sheetStep = sheetIter.next() + ) { + var sheet = sheetStep.value, + props = sheet.props, + key = props.href, + props$jscomp$0 = sheet.props, + header = getPreloadAsHeader(props$jscomp$0.href, "style", { + crossOrigin: props$jscomp$0.crossOrigin, + integrity: props$jscomp$0.integrity, + nonce: props$jscomp$0.nonce, + type: props$jscomp$0.type, + fetchPriority: props$jscomp$0.fetchPriority, + referrerPolicy: props$jscomp$0.referrerPolicy, + media: props$jscomp$0.media + }); + if (0 <= (headers.remainingCapacity -= header.length + 2)) + (renderState.resets.style[key] = PRELOAD_NO_CREDS), + linkHeader && (linkHeader += ", "), + (linkHeader += header), + (renderState.resets.style[key] = + "string" === typeof props.crossOrigin || + "string" === typeof props.integrity + ? [props.crossOrigin, props.integrity] + : PRELOAD_NO_CREDS); + else break b; + } + } + linkHeader ? onHeaders({ Link: linkHeader }) : onHeaders({}); + } + } + } catch (error) { + logRecoverableError(request, error, {}); + } +} +function completeShell(request) { + null === request.trackedPostpones && safelyEmitEarlyPreloads(request, !0); + null === request.trackedPostpones && preparePreamble(request); + request.onShellError = noop; + request = request.onShellReady; + request(); +} +function completeAll(request) { + safelyEmitEarlyPreloads( + request, + null === request.trackedPostpones + ? !0 + : null === request.completedRootSegment || + 5 !== request.completedRootSegment.status + ); + preparePreamble(request); + request = request.onAllReady; + request(); +} +function queueCompletedSegment(boundary, segment) { + if ( + 0 === segment.chunks.length && + 1 === segment.children.length && + null === segment.children[0].boundary && + -1 === segment.children[0].id + ) { + var childSegment = segment.children[0]; + childSegment.id = segment.id; + childSegment.parentFlushed = !0; + (1 !== childSegment.status && + 3 !== childSegment.status && + 4 !== childSegment.status) || + queueCompletedSegment(boundary, childSegment); + } else boundary.completedSegments.push(segment); +} +function finishedTask(request, boundary, row, segment) { + null !== row && + (0 === --row.pendingTasks + ? finishSuspenseListRow(request, row) + : row.together && tryToResolveTogetherRow(request, row)); + request.allPendingTasks--; + if (null === boundary) { + if (null !== segment && segment.parentFlushed) { + if (null !== request.completedRootSegment) + throw Error(formatProdErrorMessage(389)); + request.completedRootSegment = segment; + } + request.pendingRootTasks--; + 0 === request.pendingRootTasks && completeShell(request); + } else if ((boundary.pendingTasks--, 4 !== boundary.status)) + if (0 === boundary.pendingTasks) + if ( + (0 === boundary.status && (boundary.status = 1), + null !== segment && + segment.parentFlushed && + (1 === segment.status || 3 === segment.status) && + queueCompletedSegment(boundary, segment), + boundary.parentFlushed && request.completedBoundaries.push(boundary), + 1 === boundary.status) + ) + (row = boundary.row), + null !== row && + hoistHoistables(row.hoistables, boundary.contentState), + isEligibleForOutlining(request, boundary) || + (boundary.fallbackAbortableTasks.forEach(abortTaskSoft, request), + boundary.fallbackAbortableTasks.clear(), + null !== row && + 0 === --row.pendingTasks && + finishSuspenseListRow(request, row)), + 0 === request.pendingRootTasks && + null === request.trackedPostpones && + null !== boundary.contentPreamble && + preparePreamble(request); + else { + if ( + 5 === boundary.status && + ((boundary = boundary.row), null !== boundary) + ) { + if (null !== request.trackedPostpones) { + row = request.trackedPostpones; + var postponedRow = boundary.next; + if ( + null !== postponedRow && + ((segment = postponedRow.boundaries), null !== segment) + ) + for ( + postponedRow.boundaries = null, postponedRow = 0; + postponedRow < segment.length; + postponedRow++ + ) { + var postponedBoundary = segment[postponedRow]; + trackPostponedBoundary(request, row, postponedBoundary); + finishedTask(request, postponedBoundary, null, null); + } + } + 0 === --boundary.pendingTasks && + finishSuspenseListRow(request, boundary); + } + } + else + null === segment || + !segment.parentFlushed || + (1 !== segment.status && 3 !== segment.status) || + (queueCompletedSegment(boundary, segment), + 1 === boundary.completedSegments.length && + boundary.parentFlushed && + request.partialBoundaries.push(boundary)), + (boundary = boundary.row), + null !== boundary && + boundary.together && + tryToResolveTogetherRow(request, boundary); + 0 === request.allPendingTasks && completeAll(request); +} +function performWork(request$jscomp$2) { + if (14 !== request$jscomp$2.status && 13 !== request$jscomp$2.status) { + var prevContext = currentActiveSnapshot, + prevDispatcher = ReactSharedInternals.H; + ReactSharedInternals.H = HooksDispatcher; + var prevAsyncDispatcher = ReactSharedInternals.A; + ReactSharedInternals.A = DefaultAsyncDispatcher; + var prevRequest = currentRequest; + currentRequest = request$jscomp$2; + var prevResumableState = currentResumableState; + currentResumableState = request$jscomp$2.resumableState; + try { + var pingedTasks = request$jscomp$2.pingedTasks, + i; + for (i = 0; i < pingedTasks.length; i++) { + var task = pingedTasks[i], + request = request$jscomp$2, + segment = task.blockedSegment; + if (null === segment) { + var request$jscomp$0 = request; + if (0 !== task.replay.pendingTasks) { + switchContext(task.context); + try { + "number" === typeof task.replay.slots + ? resumeNode( + request$jscomp$0, + task, + task.replay.slots, + task.node, + task.childIndex + ) + : retryNode(request$jscomp$0, task); + if ( + 1 === task.replay.pendingTasks && + 0 < task.replay.nodes.length + ) + throw Error(formatProdErrorMessage(488)); + task.replay.pendingTasks--; + task.abortSet.delete(task); + finishedTask( + request$jscomp$0, + task.blockedBoundary, + task.row, + null + ); + } catch (thrownValue) { + resetHooksState(); + var x = + thrownValue === SuspenseException + ? getSuspendedThenable() + : thrownValue; + if ( + "object" === typeof x && + null !== x && + "function" === typeof x.then + ) { + var ping = task.ping; + x.then(ping, ping); + task.thenableState = + thrownValue === SuspenseException + ? getThenableStateAfterSuspending() + : null; + } else { + task.replay.pendingTasks--; + task.abortSet.delete(task); + var errorInfo = getThrownInfo(task.componentStack); + request = void 0; + var request$jscomp$1 = request$jscomp$0, + boundary = task.blockedBoundary, + error$jscomp$0 = + 12 === request$jscomp$0.status + ? request$jscomp$0.fatalError + : x, + replayNodes = task.replay.nodes, + resumeSlots = task.replay.slots; + request = logRecoverableError( + request$jscomp$1, + error$jscomp$0, + errorInfo + ); + abortRemainingReplayNodes( + request$jscomp$1, + boundary, + replayNodes, + resumeSlots, + error$jscomp$0, + request + ); + request$jscomp$0.pendingRootTasks--; + 0 === request$jscomp$0.pendingRootTasks && + completeShell(request$jscomp$0); + request$jscomp$0.allPendingTasks--; + 0 === request$jscomp$0.allPendingTasks && + completeAll(request$jscomp$0); + } + } finally { + } + } + } else if ( + ((request$jscomp$0 = void 0), + (request$jscomp$1 = segment), + 0 === request$jscomp$1.status) + ) { + request$jscomp$1.status = 6; + switchContext(task.context); + var childrenLength = request$jscomp$1.children.length, + chunkLength = request$jscomp$1.chunks.length; + try { + retryNode(request, task), + pushSegmentFinale( + request$jscomp$1.chunks, + request.renderState, + request$jscomp$1.lastPushedText, + request$jscomp$1.textEmbedded + ), + task.abortSet.delete(task), + (request$jscomp$1.status = 1), + finishedTask( + request, + task.blockedBoundary, + task.row, + request$jscomp$1 + ); + } catch (thrownValue) { + resetHooksState(); + request$jscomp$1.children.length = childrenLength; + request$jscomp$1.chunks.length = chunkLength; + var x$jscomp$0 = + thrownValue === SuspenseException + ? getSuspendedThenable() + : 12 === request.status + ? request.fatalError + : thrownValue; + if (12 === request.status && null !== request.trackedPostpones) { + var trackedPostpones = request.trackedPostpones, + thrownInfo = getThrownInfo(task.componentStack); + task.abortSet.delete(task); + logRecoverableError(request, x$jscomp$0, thrownInfo); + trackPostpone(request, trackedPostpones, task, request$jscomp$1); + finishedTask( + request, + task.blockedBoundary, + task.row, + request$jscomp$1 + ); + } else if ( + "object" === typeof x$jscomp$0 && + null !== x$jscomp$0 && + "function" === typeof x$jscomp$0.then + ) { + request$jscomp$1.status = 0; + task.thenableState = + thrownValue === SuspenseException + ? getThenableStateAfterSuspending() + : null; + var ping$jscomp$0 = task.ping; + x$jscomp$0.then(ping$jscomp$0, ping$jscomp$0); + } else { + var errorInfo$jscomp$0 = getThrownInfo(task.componentStack); + task.abortSet.delete(task); + request$jscomp$1.status = 4; + var boundary$jscomp$0 = task.blockedBoundary, + row = task.row; + null !== row && + 0 === --row.pendingTasks && + finishSuspenseListRow(request, row); + request.allPendingTasks--; + request$jscomp$0 = logRecoverableError( + request, + x$jscomp$0, + errorInfo$jscomp$0 + ); + if (null === boundary$jscomp$0) fatalError(request, x$jscomp$0); + else if ( + (boundary$jscomp$0.pendingTasks--, + 4 !== boundary$jscomp$0.status) + ) { + boundary$jscomp$0.status = 4; + boundary$jscomp$0.errorDigest = request$jscomp$0; + untrackBoundary(request, boundary$jscomp$0); + var boundaryRow = boundary$jscomp$0.row; + null !== boundaryRow && + 0 === --boundaryRow.pendingTasks && + finishSuspenseListRow(request, boundaryRow); + boundary$jscomp$0.parentFlushed && + request.clientRenderedBoundaries.push(boundary$jscomp$0); + 0 === request.pendingRootTasks && + null === request.trackedPostpones && + null !== boundary$jscomp$0.contentPreamble && + preparePreamble(request); + } + 0 === request.allPendingTasks && completeAll(request); + } + } finally { + } + } + } + pingedTasks.splice(0, i); + null !== request$jscomp$2.destination && + flushCompletedQueues(request$jscomp$2, request$jscomp$2.destination); + } catch (error) { + logRecoverableError(request$jscomp$2, error, {}), + fatalError(request$jscomp$2, error); + } finally { + (currentResumableState = prevResumableState), + (ReactSharedInternals.H = prevDispatcher), + (ReactSharedInternals.A = prevAsyncDispatcher), + prevDispatcher === HooksDispatcher && switchContext(prevContext), + (currentRequest = prevRequest); + } + } +} +function preparePreambleFromSubtree( + request, + segment, + collectedPreambleSegments +) { + segment.preambleChildren.length && + collectedPreambleSegments.push(segment.preambleChildren); + for (var pendingPreambles = !1, i = 0; i < segment.children.length; i++) + pendingPreambles = + preparePreambleFromSegment( + request, + segment.children[i], + collectedPreambleSegments + ) || pendingPreambles; + return pendingPreambles; +} +function preparePreambleFromSegment( + request, + segment, + collectedPreambleSegments +) { + var boundary = segment.boundary; + if (null === boundary) + return preparePreambleFromSubtree( + request, + segment, + collectedPreambleSegments + ); + var preamble = boundary.contentPreamble, + fallbackPreamble = boundary.fallbackPreamble; + if (null === preamble || null === fallbackPreamble) return !1; + switch (boundary.status) { + case 1: + hoistPreambleState(request.renderState, preamble); + request.byteSize += boundary.byteSize; + segment = boundary.completedSegments[0]; + if (!segment) throw Error(formatProdErrorMessage(391)); + return preparePreambleFromSubtree( + request, + segment, + collectedPreambleSegments + ); + case 5: + if (null !== request.trackedPostpones) return !0; + case 4: + if (1 === segment.status) + return ( + hoistPreambleState(request.renderState, fallbackPreamble), + preparePreambleFromSubtree( + request, + segment, + collectedPreambleSegments + ) + ); + default: + return !0; + } +} +function preparePreamble(request) { + if ( + request.completedRootSegment && + null === request.completedPreambleSegments + ) { + var collectedPreambleSegments = [], + originalRequestByteSize = request.byteSize, + hasPendingPreambles = preparePreambleFromSegment( + request, + request.completedRootSegment, + collectedPreambleSegments + ), + preamble = request.renderState.preamble; + !1 === hasPendingPreambles || (preamble.headChunks && preamble.bodyChunks) + ? (request.completedPreambleSegments = collectedPreambleSegments) + : (request.byteSize = originalRequestByteSize); + } +} +function flushSubtree(request, destination, segment, hoistableState) { + segment.parentFlushed = !0; + switch (segment.status) { + case 0: + segment.id = request.nextSegmentId++; + case 5: + return ( + (hoistableState = segment.id), + (segment.lastPushedText = !1), + (segment.textEmbedded = !1), + (request = request.renderState), + destination.push('<template id="'), + destination.push(request.placeholderPrefix), + (request = hoistableState.toString(16)), + destination.push(request), + destination.push('"></template>') + ); + case 1: + segment.status = 2; + var r = !0, + chunks = segment.chunks, + chunkIdx = 0; + segment = segment.children; + for (var childIdx = 0; childIdx < segment.length; childIdx++) { + for (r = segment[childIdx]; chunkIdx < r.index; chunkIdx++) + destination.push(chunks[chunkIdx]); + r = flushSegment(request, destination, r, hoistableState); + } + for (; chunkIdx < chunks.length - 1; chunkIdx++) + destination.push(chunks[chunkIdx]); + chunkIdx < chunks.length && (r = destination.push(chunks[chunkIdx])); + return r; + case 3: + return !0; + default: + throw Error(formatProdErrorMessage(390)); + } +} +var flushedByteSize = 0; +function flushSegment(request, destination, segment, hoistableState) { + var boundary = segment.boundary; + if (null === boundary) + return flushSubtree(request, destination, segment, hoistableState); + boundary.parentFlushed = !0; + if (4 === boundary.status) { + var row = boundary.row; + null !== row && + 0 === --row.pendingTasks && + finishSuspenseListRow(request, row); + request.renderState.generateStaticMarkup || + ((boundary = boundary.errorDigest), + destination.push("\x3c!--$!--\x3e"), + destination.push("<template"), + boundary && + (destination.push(' data-dgst="'), + (boundary = escapeTextForBrowser(boundary)), + destination.push(boundary), + destination.push('"')), + destination.push("></template>")); + flushSubtree(request, destination, segment, hoistableState); + request = request.renderState.generateStaticMarkup + ? !0 + : destination.push("\x3c!--/$--\x3e"); + return request; + } + if (1 !== boundary.status) + return ( + 0 === boundary.status && + (boundary.rootSegmentID = request.nextSegmentId++), + 0 < boundary.completedSegments.length && + request.partialBoundaries.push(boundary), + writeStartPendingSuspenseBoundary( + destination, + request.renderState, + boundary.rootSegmentID + ), + hoistableState && hoistHoistables(hoistableState, boundary.fallbackState), + flushSubtree(request, destination, segment, hoistableState), + destination.push("\x3c!--/$--\x3e") + ); + if ( + !flushingPartialBoundaries && + isEligibleForOutlining(request, boundary) && + flushedByteSize + boundary.byteSize > request.progressiveChunkSize + ) + return ( + (boundary.rootSegmentID = request.nextSegmentId++), + request.completedBoundaries.push(boundary), + writeStartPendingSuspenseBoundary( + destination, + request.renderState, + boundary.rootSegmentID + ), + flushSubtree(request, destination, segment, hoistableState), + destination.push("\x3c!--/$--\x3e") + ); + flushedByteSize += boundary.byteSize; + hoistableState && hoistHoistables(hoistableState, boundary.contentState); + segment = boundary.row; + null !== segment && + isEligibleForOutlining(request, boundary) && + 0 === --segment.pendingTasks && + finishSuspenseListRow(request, segment); + request.renderState.generateStaticMarkup || + destination.push("\x3c!--$--\x3e"); + segment = boundary.completedSegments; + if (1 !== segment.length) throw Error(formatProdErrorMessage(391)); + flushSegment(request, destination, segment[0], hoistableState); + request = request.renderState.generateStaticMarkup + ? !0 + : destination.push("\x3c!--/$--\x3e"); + return request; +} +function flushSegmentContainer(request, destination, segment, hoistableState) { + writeStartSegment( + destination, + request.renderState, + segment.parentFormatContext, + segment.id + ); + flushSegment(request, destination, segment, hoistableState); + return writeEndSegment(destination, segment.parentFormatContext); +} +function flushCompletedBoundary(request, destination, boundary) { + flushedByteSize = boundary.byteSize; + for ( + var completedSegments = boundary.completedSegments, i = 0; + i < completedSegments.length; + i++ + ) + flushPartiallyCompletedSegment( + request, + destination, + boundary, + completedSegments[i] + ); + completedSegments.length = 0; + completedSegments = boundary.row; + null !== completedSegments && + isEligibleForOutlining(request, boundary) && + 0 === --completedSegments.pendingTasks && + finishSuspenseListRow(request, completedSegments); + writeHoistablesForBoundary( + destination, + boundary.contentState, + request.renderState + ); + completedSegments = request.resumableState; + request = request.renderState; + i = boundary.rootSegmentID; + boundary = boundary.contentState; + var requiresStyleInsertion = request.stylesToHoist; + request.stylesToHoist = !1; + destination.push(request.startInlineScript); + destination.push(">"); + requiresStyleInsertion + ? (0 === (completedSegments.instructions & 4) && + ((completedSegments.instructions |= 4), + destination.push( + '$RX=function(b,c,d,e,f){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data="$!",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),f&&(a.cstck=f),b._reactRetry&&b._reactRetry())};' + )), + 0 === (completedSegments.instructions & 2) && + ((completedSegments.instructions |= 2), + destination.push( + '$RB=[];$RV=function(a){$RT=performance.now();for(var b=0;b<a.length;b+=2){var c=a[b],e=a[b+1];null!==e.parentNode&&e.parentNode.removeChild(e);var f=c.parentNode;if(f){var g=c.previousSibling,h=0;do{if(c&&8===c.nodeType){var d=c.data;if("/$"===d||"/&"===d)if(0===h)break;else h--;else"$"!==d&&"$?"!==d&&"$~"!==d&&"$!"!==d&&"&"!==d||h++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;e.firstChild;)f.insertBefore(e.firstChild,c);g.data="$";g._reactRetry&&requestAnimationFrame(g._reactRetry)}}a.length=0};\n$RC=function(a,b){if(b=document.getElementById(b))(a=document.getElementById(a))?(a.previousSibling.data="$~",$RB.push(a,b),2===$RB.length&&("number"!==typeof $RT?requestAnimationFrame($RV.bind(null,$RB)):(a=performance.now(),setTimeout($RV.bind(null,$RB),2300>a&&2E3<a?2300-a:$RT+300-a)))):b.parentNode.removeChild(b)};' + )), + 0 === (completedSegments.instructions & 8) + ? ((completedSegments.instructions |= 8), + destination.push( + '$RM=new Map;$RR=function(n,w,p){function u(q){this._p=null;q()}for(var r=new Map,t=document,h,b,e=t.querySelectorAll("link[data-precedence],style[data-precedence]"),v=[],k=0;b=e[k++];)"not all"===b.getAttribute("media")?v.push(b):("LINK"===b.tagName&&$RM.set(b.getAttribute("href"),b),r.set(b.dataset.precedence,h=b));e=0;b=[];var l,a;for(k=!0;;){if(k){var f=p[e++];if(!f){k=!1;e=0;continue}var c=!1,m=0;var d=f[m++];if(a=$RM.get(d)){var g=a._p;c=!0}else{a=t.createElement("link");a.href=d;a.rel=\n"stylesheet";for(a.dataset.precedence=l=f[m++];g=f[m++];)a.setAttribute(g,f[m++]);g=a._p=new Promise(function(q,x){a.onload=u.bind(a,q);a.onerror=u.bind(a,x)});$RM.set(d,a)}d=a.getAttribute("media");!g||d&&!matchMedia(d).matches||b.push(g);if(c)continue}else{a=v[e++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=r.get(l)||h;c===h&&(h=a);r.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=t.head,c.insertBefore(a,c.firstChild))}if(p=document.getElementById(n))p.previousSibling.data=\n"$~";Promise.all(b).then($RC.bind(null,n,w),$RX.bind(null,n,"CSS failed to load"))};$RR("' + )) + : destination.push('$RR("')) + : (0 === (completedSegments.instructions & 2) && + ((completedSegments.instructions |= 2), + destination.push( + '$RB=[];$RV=function(a){$RT=performance.now();for(var b=0;b<a.length;b+=2){var c=a[b],e=a[b+1];null!==e.parentNode&&e.parentNode.removeChild(e);var f=c.parentNode;if(f){var g=c.previousSibling,h=0;do{if(c&&8===c.nodeType){var d=c.data;if("/$"===d||"/&"===d)if(0===h)break;else h--;else"$"!==d&&"$?"!==d&&"$~"!==d&&"$!"!==d&&"&"!==d||h++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;e.firstChild;)f.insertBefore(e.firstChild,c);g.data="$";g._reactRetry&&requestAnimationFrame(g._reactRetry)}}a.length=0};\n$RC=function(a,b){if(b=document.getElementById(b))(a=document.getElementById(a))?(a.previousSibling.data="$~",$RB.push(a,b),2===$RB.length&&("number"!==typeof $RT?requestAnimationFrame($RV.bind(null,$RB)):(a=performance.now(),setTimeout($RV.bind(null,$RB),2300>a&&2E3<a?2300-a:$RT+300-a)))):b.parentNode.removeChild(b)};' + )), + destination.push('$RC("')); + completedSegments = i.toString(16); + destination.push(request.boundaryPrefix); + destination.push(completedSegments); + destination.push('","'); + destination.push(request.segmentPrefix); + destination.push(completedSegments); + requiresStyleInsertion + ? (destination.push('",'), + writeStyleResourceDependenciesInJS(destination, boundary)) + : destination.push('"'); + boundary = destination.push(")\x3c/script>"); + return writeBootstrap(destination, request) && boundary; +} +function flushPartiallyCompletedSegment( + request, + destination, + boundary, + segment +) { + if (2 === segment.status) return !0; + var hoistableState = boundary.contentState, + segmentID = segment.id; + if (-1 === segmentID) { + if (-1 === (segment.id = boundary.rootSegmentID)) + throw Error(formatProdErrorMessage(392)); + return flushSegmentContainer(request, destination, segment, hoistableState); + } + if (segmentID === boundary.rootSegmentID) + return flushSegmentContainer(request, destination, segment, hoistableState); + flushSegmentContainer(request, destination, segment, hoistableState); + boundary = request.resumableState; + request = request.renderState; + destination.push(request.startInlineScript); + destination.push(">"); + 0 === (boundary.instructions & 1) + ? ((boundary.instructions |= 1), + destination.push( + '$RS=function(a,b){a=document.getElementById(a);b=document.getElementById(b);for(a.parentNode.removeChild(a);a.firstChild;)b.parentNode.insertBefore(a.firstChild,b);b.parentNode.removeChild(b)};$RS("' + )) + : destination.push('$RS("'); + destination.push(request.segmentPrefix); + segmentID = segmentID.toString(16); + destination.push(segmentID); + destination.push('","'); + destination.push(request.placeholderPrefix); + destination.push(segmentID); + destination = destination.push('")\x3c/script>'); + return destination; +} +var flushingPartialBoundaries = !1; +function flushCompletedQueues(request, destination) { + try { + if (!(0 < request.pendingRootTasks)) { + var i, + completedRootSegment = request.completedRootSegment; + if (null !== completedRootSegment) { + if (5 === completedRootSegment.status) return; + var completedPreambleSegments = request.completedPreambleSegments; + if (null === completedPreambleSegments) return; + flushedByteSize = request.byteSize; + var resumableState = request.resumableState, + renderState = request.renderState, + preamble = renderState.preamble, + htmlChunks = preamble.htmlChunks, + headChunks = preamble.headChunks, + i$jscomp$0; + if (htmlChunks) { + for (i$jscomp$0 = 0; i$jscomp$0 < htmlChunks.length; i$jscomp$0++) + destination.push(htmlChunks[i$jscomp$0]); + if (headChunks) + for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++) + destination.push(headChunks[i$jscomp$0]); + else { + var chunk = startChunkForTag("head"); + destination.push(chunk); + destination.push(">"); + } + } else if (headChunks) + for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++) + destination.push(headChunks[i$jscomp$0]); + var charsetChunks = renderState.charsetChunks; + for (i$jscomp$0 = 0; i$jscomp$0 < charsetChunks.length; i$jscomp$0++) + destination.push(charsetChunks[i$jscomp$0]); + charsetChunks.length = 0; + renderState.preconnects.forEach(flushResource, destination); + renderState.preconnects.clear(); + var viewportChunks = renderState.viewportChunks; + for (i$jscomp$0 = 0; i$jscomp$0 < viewportChunks.length; i$jscomp$0++) + destination.push(viewportChunks[i$jscomp$0]); + viewportChunks.length = 0; + renderState.fontPreloads.forEach(flushResource, destination); + renderState.fontPreloads.clear(); + renderState.highImagePreloads.forEach(flushResource, destination); + renderState.highImagePreloads.clear(); + currentlyFlushingRenderState = renderState; + renderState.styles.forEach(flushStylesInPreamble, destination); + currentlyFlushingRenderState = null; + var importMapChunks = renderState.importMapChunks; + for (i$jscomp$0 = 0; i$jscomp$0 < importMapChunks.length; i$jscomp$0++) + destination.push(importMapChunks[i$jscomp$0]); + importMapChunks.length = 0; + renderState.bootstrapScripts.forEach(flushResource, destination); + renderState.scripts.forEach(flushResource, destination); + renderState.scripts.clear(); + renderState.bulkPreloads.forEach(flushResource, destination); + renderState.bulkPreloads.clear(); + resumableState.instructions |= 32; + var hoistableChunks = renderState.hoistableChunks; + for (i$jscomp$0 = 0; i$jscomp$0 < hoistableChunks.length; i$jscomp$0++) + destination.push(hoistableChunks[i$jscomp$0]); + for ( + resumableState = hoistableChunks.length = 0; + resumableState < completedPreambleSegments.length; + resumableState++ + ) { + var segments = completedPreambleSegments[resumableState]; + for (renderState = 0; renderState < segments.length; renderState++) + flushSegment(request, destination, segments[renderState], null); + } + var preamble$jscomp$0 = request.renderState.preamble, + headChunks$jscomp$0 = preamble$jscomp$0.headChunks; + if (preamble$jscomp$0.htmlChunks || headChunks$jscomp$0) { + var chunk$jscomp$0 = endChunkForTag("head"); + destination.push(chunk$jscomp$0); + } + var bodyChunks = preamble$jscomp$0.bodyChunks; + if (bodyChunks) + for ( + completedPreambleSegments = 0; + completedPreambleSegments < bodyChunks.length; + completedPreambleSegments++ + ) + destination.push(bodyChunks[completedPreambleSegments]); + flushSegment(request, destination, completedRootSegment, null); + request.completedRootSegment = null; + var renderState$jscomp$0 = request.renderState; + if ( + 0 !== request.allPendingTasks || + 0 !== request.clientRenderedBoundaries.length || + 0 !== request.completedBoundaries.length || + (null !== request.trackedPostpones && + (0 !== request.trackedPostpones.rootNodes.length || + null !== request.trackedPostpones.rootSlots)) + ) { + var resumableState$jscomp$0 = request.resumableState; + if (0 === (resumableState$jscomp$0.instructions & 64)) { + resumableState$jscomp$0.instructions |= 64; + destination.push(renderState$jscomp$0.startInlineScript); + if (0 === (resumableState$jscomp$0.instructions & 32)) { + resumableState$jscomp$0.instructions |= 32; + var shellId = "_" + resumableState$jscomp$0.idPrefix + "R_"; + destination.push(' id="'); + var chunk$jscomp$1 = escapeTextForBrowser(shellId); + destination.push(chunk$jscomp$1); + destination.push('"'); + } + destination.push(">"); + destination.push( + "requestAnimationFrame(function(){$RT=performance.now()});" + ); + destination.push("\x3c/script>"); + } + } + writeBootstrap(destination, renderState$jscomp$0); + } + var renderState$jscomp$1 = request.renderState; + completedRootSegment = 0; + var viewportChunks$jscomp$0 = renderState$jscomp$1.viewportChunks; + for ( + completedRootSegment = 0; + completedRootSegment < viewportChunks$jscomp$0.length; + completedRootSegment++ + ) + destination.push(viewportChunks$jscomp$0[completedRootSegment]); + viewportChunks$jscomp$0.length = 0; + renderState$jscomp$1.preconnects.forEach(flushResource, destination); + renderState$jscomp$1.preconnects.clear(); + renderState$jscomp$1.fontPreloads.forEach(flushResource, destination); + renderState$jscomp$1.fontPreloads.clear(); + renderState$jscomp$1.highImagePreloads.forEach( + flushResource, + destination + ); + renderState$jscomp$1.highImagePreloads.clear(); + renderState$jscomp$1.styles.forEach(preloadLateStyles, destination); + renderState$jscomp$1.scripts.forEach(flushResource, destination); + renderState$jscomp$1.scripts.clear(); + renderState$jscomp$1.bulkPreloads.forEach(flushResource, destination); + renderState$jscomp$1.bulkPreloads.clear(); + var hoistableChunks$jscomp$0 = renderState$jscomp$1.hoistableChunks; + for ( + completedRootSegment = 0; + completedRootSegment < hoistableChunks$jscomp$0.length; + completedRootSegment++ + ) + destination.push(hoistableChunks$jscomp$0[completedRootSegment]); + hoistableChunks$jscomp$0.length = 0; + var clientRenderedBoundaries = request.clientRenderedBoundaries; + for (i = 0; i < clientRenderedBoundaries.length; i++) { + var boundary = clientRenderedBoundaries[i]; + renderState$jscomp$1 = destination; + var resumableState$jscomp$1 = request.resumableState, + renderState$jscomp$2 = request.renderState, + id = boundary.rootSegmentID, + errorDigest = boundary.errorDigest; + renderState$jscomp$1.push(renderState$jscomp$2.startInlineScript); + renderState$jscomp$1.push(">"); + 0 === (resumableState$jscomp$1.instructions & 4) + ? ((resumableState$jscomp$1.instructions |= 4), + renderState$jscomp$1.push( + '$RX=function(b,c,d,e,f){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data="$!",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),f&&(a.cstck=f),b._reactRetry&&b._reactRetry())};;$RX("' + )) + : renderState$jscomp$1.push('$RX("'); + renderState$jscomp$1.push(renderState$jscomp$2.boundaryPrefix); + var chunk$jscomp$2 = id.toString(16); + renderState$jscomp$1.push(chunk$jscomp$2); + renderState$jscomp$1.push('"'); + if (errorDigest) { + renderState$jscomp$1.push(","); + var chunk$jscomp$3 = escapeJSStringsForInstructionScripts( + errorDigest || "" + ); + renderState$jscomp$1.push(chunk$jscomp$3); + } + var JSCompiler_inline_result = + renderState$jscomp$1.push(")\x3c/script>"); + if (!JSCompiler_inline_result) { + request.destination = null; + i++; + clientRenderedBoundaries.splice(0, i); + return; + } + } + clientRenderedBoundaries.splice(0, i); + var completedBoundaries = request.completedBoundaries; + for (i = 0; i < completedBoundaries.length; i++) + if ( + !flushCompletedBoundary(request, destination, completedBoundaries[i]) + ) { + request.destination = null; + i++; + completedBoundaries.splice(0, i); + return; + } + completedBoundaries.splice(0, i); + flushingPartialBoundaries = !0; + var partialBoundaries = request.partialBoundaries; + for (i = 0; i < partialBoundaries.length; i++) { + var boundary$69 = partialBoundaries[i]; + a: { + clientRenderedBoundaries = request; + boundary = destination; + flushedByteSize = boundary$69.byteSize; + var completedSegments = boundary$69.completedSegments; + for ( + JSCompiler_inline_result = 0; + JSCompiler_inline_result < completedSegments.length; + JSCompiler_inline_result++ + ) + if ( + !flushPartiallyCompletedSegment( + clientRenderedBoundaries, + boundary, + boundary$69, + completedSegments[JSCompiler_inline_result] + ) + ) { + JSCompiler_inline_result++; + completedSegments.splice(0, JSCompiler_inline_result); + var JSCompiler_inline_result$jscomp$0 = !1; + break a; + } + completedSegments.splice(0, JSCompiler_inline_result); + var row = boundary$69.row; + null !== row && + row.together && + 1 === boundary$69.pendingTasks && + (1 === row.pendingTasks + ? unblockSuspenseListRow( + clientRenderedBoundaries, + row, + row.hoistables + ) + : row.pendingTasks--); + JSCompiler_inline_result$jscomp$0 = writeHoistablesForBoundary( + boundary, + boundary$69.contentState, + clientRenderedBoundaries.renderState + ); + } + if (!JSCompiler_inline_result$jscomp$0) { + request.destination = null; + i++; + partialBoundaries.splice(0, i); + return; + } + } + partialBoundaries.splice(0, i); + flushingPartialBoundaries = !1; + var largeBoundaries = request.completedBoundaries; + for (i = 0; i < largeBoundaries.length; i++) + if (!flushCompletedBoundary(request, destination, largeBoundaries[i])) { + request.destination = null; + i++; + largeBoundaries.splice(0, i); + return; + } + largeBoundaries.splice(0, i); + } + } finally { + (flushingPartialBoundaries = !1), + 0 === request.allPendingTasks && + 0 === request.clientRenderedBoundaries.length && + 0 === request.completedBoundaries.length && + ((request.flushScheduled = !1), + (i = request.resumableState), + i.hasBody && + ((partialBoundaries = endChunkForTag("body")), + destination.push(partialBoundaries)), + i.hasHtml && ((i = endChunkForTag("html")), destination.push(i)), + (request.status = 14), + destination.push(null), + (request.destination = null)); + } +} +function enqueueFlush(request) { + if ( + !1 === request.flushScheduled && + 0 === request.pingedTasks.length && + null !== request.destination + ) { + request.flushScheduled = !0; + var destination = request.destination; + destination + ? flushCompletedQueues(request, destination) + : (request.flushScheduled = !1); + } +} +function startFlowing(request, destination) { + if (13 === request.status) + (request.status = 14), destination.destroy(request.fatalError); + else if (14 !== request.status && null === request.destination) { + request.destination = destination; + try { + flushCompletedQueues(request, destination); + } catch (error) { + logRecoverableError(request, error, {}), fatalError(request, error); + } + } +} +function abort(request, reason) { + if (11 === request.status || 10 === request.status) request.status = 12; + try { + var abortableTasks = request.abortableTasks; + if (0 < abortableTasks.size) { + var error = + void 0 === reason + ? Error(formatProdErrorMessage(432)) + : "object" === typeof reason && + null !== reason && + "function" === typeof reason.then + ? Error(formatProdErrorMessage(530)) + : reason; + request.fatalError = error; + abortableTasks.forEach(function (task) { + return abortTask(task, request, error); + }); + abortableTasks.clear(); + } + null !== request.destination && + flushCompletedQueues(request, request.destination); + } catch (error$71) { + logRecoverableError(request, error$71, {}), fatalError(request, error$71); + } +} +function addToReplayParent(node, parentKeyPath, trackedPostpones) { + if (null === parentKeyPath) trackedPostpones.rootNodes.push(node); + else { + var workingMap = trackedPostpones.workingMap, + parentNode = workingMap.get(parentKeyPath); + void 0 === parentNode && + ((parentNode = [parentKeyPath[1], parentKeyPath[2], [], null]), + workingMap.set(parentKeyPath, parentNode), + addToReplayParent(parentNode, parentKeyPath[0], trackedPostpones)); + parentNode[2].push(node); + } +} +function onError() {} +function renderToStringImpl( + children, + options, + generateStaticMarkup, + abortReason +) { + var didFatal = !1, + fatalError = null, + result = "", + readyToStream = !1; + options = createResumableState(options ? options.identifierPrefix : void 0); + children = createRequest( + children, + options, + createRenderState(options, generateStaticMarkup), + createFormatContext(0, null, 0, null), + Infinity, + onError, + void 0, + function () { + readyToStream = !0; + }, + void 0, + void 0, + void 0 + ); + children.flushScheduled = null !== children.destination; + performWork(children); + 10 === children.status && (children.status = 11); + null === children.trackedPostpones && + safelyEmitEarlyPreloads(children, 0 === children.pendingRootTasks); + abort(children, abortReason); + startFlowing(children, { + push: function (chunk) { + null !== chunk && (result += chunk); + return !0; + }, + destroy: function (error) { + didFatal = !0; + fatalError = error; + } + }); + if (didFatal && fatalError !== abortReason) throw fatalError; + if (!readyToStream) throw Error(formatProdErrorMessage(426)); + return result; +} +exports.renderToStaticMarkup = function (children, options) { + return renderToStringImpl( + children, + options, + !0, + 'The server used "renderToStaticMarkup" which does not support Suspense. If you intended to have the server wait for the suspended component please switch to "renderToReadableStream" which supports Suspense on the server' + ); +}; +exports.renderToString = function (children, options) { + return renderToStringImpl( + children, + options, + !1, + 'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToReadableStream" which supports Suspense on the server' + ); +}; +exports.version = "19.2.4"; diff --git a/build/node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js b/build/node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js new file mode 100644 index 0000000..5cbbffd --- /dev/null +++ b/build/node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js @@ -0,0 +1,6692 @@ +/** + * @license React + * react-dom-server-legacy.node.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/* + + + JS Implementation of MurmurHash3 (r136) (as of May 20, 2011) + + Copyright (c) 2011 Gary Court + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +*/ +"use strict"; +var React = require("react"), + ReactDOM = require("react-dom"), + REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), + REACT_PORTAL_TYPE = Symbol.for("react.portal"), + REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), + REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), + REACT_PROFILER_TYPE = Symbol.for("react.profiler"), + REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), + REACT_CONTEXT_TYPE = Symbol.for("react.context"), + REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), + REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), + REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), + REACT_MEMO_TYPE = Symbol.for("react.memo"), + REACT_LAZY_TYPE = Symbol.for("react.lazy"), + REACT_SCOPE_TYPE = Symbol.for("react.scope"), + REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), + REACT_LEGACY_HIDDEN_TYPE = Symbol.for("react.legacy_hidden"), + REACT_MEMO_CACHE_SENTINEL = Symbol.for("react.memo_cache_sentinel"), + REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"), + MAYBE_ITERATOR_SYMBOL = Symbol.iterator; +function getIteratorFn(maybeIterable) { + if (null === maybeIterable || "object" !== typeof maybeIterable) return null; + maybeIterable = + (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) || + maybeIterable["@@iterator"]; + return "function" === typeof maybeIterable ? maybeIterable : null; +} +var isArrayImpl = Array.isArray; +function murmurhash3_32_gc(key, seed) { + var remainder = key.length & 3; + var bytes = key.length - remainder; + var h1 = seed; + for (seed = 0; seed < bytes; ) { + var k1 = + (key.charCodeAt(seed) & 255) | + ((key.charCodeAt(++seed) & 255) << 8) | + ((key.charCodeAt(++seed) & 255) << 16) | + ((key.charCodeAt(++seed) & 255) << 24); + ++seed; + k1 = + (3432918353 * (k1 & 65535) + + (((3432918353 * (k1 >>> 16)) & 65535) << 16)) & + 4294967295; + k1 = (k1 << 15) | (k1 >>> 17); + k1 = + (461845907 * (k1 & 65535) + (((461845907 * (k1 >>> 16)) & 65535) << 16)) & + 4294967295; + h1 ^= k1; + h1 = (h1 << 13) | (h1 >>> 19); + h1 = (5 * (h1 & 65535) + (((5 * (h1 >>> 16)) & 65535) << 16)) & 4294967295; + h1 = (h1 & 65535) + 27492 + ((((h1 >>> 16) + 58964) & 65535) << 16); + } + k1 = 0; + switch (remainder) { + case 3: + k1 ^= (key.charCodeAt(seed + 2) & 255) << 16; + case 2: + k1 ^= (key.charCodeAt(seed + 1) & 255) << 8; + case 1: + (k1 ^= key.charCodeAt(seed) & 255), + (k1 = + (3432918353 * (k1 & 65535) + + (((3432918353 * (k1 >>> 16)) & 65535) << 16)) & + 4294967295), + (k1 = (k1 << 15) | (k1 >>> 17)), + (h1 ^= + (461845907 * (k1 & 65535) + + (((461845907 * (k1 >>> 16)) & 65535) << 16)) & + 4294967295); + } + h1 ^= key.length; + h1 ^= h1 >>> 16; + h1 = + (2246822507 * (h1 & 65535) + (((2246822507 * (h1 >>> 16)) & 65535) << 16)) & + 4294967295; + h1 ^= h1 >>> 13; + h1 = + (3266489909 * (h1 & 65535) + (((3266489909 * (h1 >>> 16)) & 65535) << 16)) & + 4294967295; + return (h1 ^ (h1 >>> 16)) >>> 0; +} +var assign = Object.assign, + hasOwnProperty = Object.prototype.hasOwnProperty, + VALID_ATTRIBUTE_NAME_REGEX = RegExp( + "^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$" + ), + illegalAttributeNameCache = {}, + validatedAttributeNameCache = {}; +function isAttributeNameSafe(attributeName) { + if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) + return !0; + if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1; + if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) + return (validatedAttributeNameCache[attributeName] = !0); + illegalAttributeNameCache[attributeName] = !0; + return !1; +} +var unitlessNumbers = new Set( + "animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split( + " " + ) + ), + aliases = new Map([ + ["acceptCharset", "accept-charset"], + ["htmlFor", "for"], + ["httpEquiv", "http-equiv"], + ["crossOrigin", "crossorigin"], + ["accentHeight", "accent-height"], + ["alignmentBaseline", "alignment-baseline"], + ["arabicForm", "arabic-form"], + ["baselineShift", "baseline-shift"], + ["capHeight", "cap-height"], + ["clipPath", "clip-path"], + ["clipRule", "clip-rule"], + ["colorInterpolation", "color-interpolation"], + ["colorInterpolationFilters", "color-interpolation-filters"], + ["colorProfile", "color-profile"], + ["colorRendering", "color-rendering"], + ["dominantBaseline", "dominant-baseline"], + ["enableBackground", "enable-background"], + ["fillOpacity", "fill-opacity"], + ["fillRule", "fill-rule"], + ["floodColor", "flood-color"], + ["floodOpacity", "flood-opacity"], + ["fontFamily", "font-family"], + ["fontSize", "font-size"], + ["fontSizeAdjust", "font-size-adjust"], + ["fontStretch", "font-stretch"], + ["fontStyle", "font-style"], + ["fontVariant", "font-variant"], + ["fontWeight", "font-weight"], + ["glyphName", "glyph-name"], + ["glyphOrientationHorizontal", "glyph-orientation-horizontal"], + ["glyphOrientationVertical", "glyph-orientation-vertical"], + ["horizAdvX", "horiz-adv-x"], + ["horizOriginX", "horiz-origin-x"], + ["imageRendering", "image-rendering"], + ["letterSpacing", "letter-spacing"], + ["lightingColor", "lighting-color"], + ["markerEnd", "marker-end"], + ["markerMid", "marker-mid"], + ["markerStart", "marker-start"], + ["overlinePosition", "overline-position"], + ["overlineThickness", "overline-thickness"], + ["paintOrder", "paint-order"], + ["panose-1", "panose-1"], + ["pointerEvents", "pointer-events"], + ["renderingIntent", "rendering-intent"], + ["shapeRendering", "shape-rendering"], + ["stopColor", "stop-color"], + ["stopOpacity", "stop-opacity"], + ["strikethroughPosition", "strikethrough-position"], + ["strikethroughThickness", "strikethrough-thickness"], + ["strokeDasharray", "stroke-dasharray"], + ["strokeDashoffset", "stroke-dashoffset"], + ["strokeLinecap", "stroke-linecap"], + ["strokeLinejoin", "stroke-linejoin"], + ["strokeMiterlimit", "stroke-miterlimit"], + ["strokeOpacity", "stroke-opacity"], + ["strokeWidth", "stroke-width"], + ["textAnchor", "text-anchor"], + ["textDecoration", "text-decoration"], + ["textRendering", "text-rendering"], + ["transformOrigin", "transform-origin"], + ["underlinePosition", "underline-position"], + ["underlineThickness", "underline-thickness"], + ["unicodeBidi", "unicode-bidi"], + ["unicodeRange", "unicode-range"], + ["unitsPerEm", "units-per-em"], + ["vAlphabetic", "v-alphabetic"], + ["vHanging", "v-hanging"], + ["vIdeographic", "v-ideographic"], + ["vMathematical", "v-mathematical"], + ["vectorEffect", "vector-effect"], + ["vertAdvY", "vert-adv-y"], + ["vertOriginX", "vert-origin-x"], + ["vertOriginY", "vert-origin-y"], + ["wordSpacing", "word-spacing"], + ["writingMode", "writing-mode"], + ["xmlnsXlink", "xmlns:xlink"], + ["xHeight", "x-height"] + ]), + matchHtmlRegExp = /["'&<>]/; +function escapeTextForBrowser(text) { + if ( + "boolean" === typeof text || + "number" === typeof text || + "bigint" === typeof text + ) + return "" + text; + text = "" + text; + var match = matchHtmlRegExp.exec(text); + if (match) { + var html = "", + index, + lastIndex = 0; + for (index = match.index; index < text.length; index++) { + switch (text.charCodeAt(index)) { + case 34: + match = """; + break; + case 38: + match = "&"; + break; + case 39: + match = "'"; + break; + case 60: + match = "<"; + break; + case 62: + match = ">"; + break; + default: + continue; + } + lastIndex !== index && (html += text.slice(lastIndex, index)); + lastIndex = index + 1; + html += match; + } + text = lastIndex !== index ? html + text.slice(lastIndex, index) : html; + } + return text; +} +var uppercasePattern = /([A-Z])/g, + msPattern = /^ms-/, + isJavaScriptProtocol = + /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i; +function sanitizeURL(url) { + return isJavaScriptProtocol.test("" + url) + ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')" + : url; +} +var ReactSharedInternals = + React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, + ReactDOMSharedInternals = + ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, + sharedNotPendingObject = { + pending: !1, + data: null, + method: null, + action: null + }, + previousDispatcher = ReactDOMSharedInternals.d; +ReactDOMSharedInternals.d = { + f: previousDispatcher.f, + r: previousDispatcher.r, + D: prefetchDNS, + C: preconnect, + L: preload, + m: preloadModule, + X: preinitScript, + S: preinitStyle, + M: preinitModuleScript +}; +var PRELOAD_NO_CREDS = [], + currentlyFlushingRenderState = null, + scriptRegex = /(<\/|<)(s)(cript)/gi; +function scriptReplacer(match, prefix, s, suffix) { + return "" + prefix + ("s" === s ? "\\u0073" : "\\u0053") + suffix; +} +function createResumableState( + identifierPrefix, + externalRuntimeConfig, + bootstrapScriptContent, + bootstrapScripts, + bootstrapModules +) { + return { + idPrefix: void 0 === identifierPrefix ? "" : identifierPrefix, + nextFormID: 0, + streamingFormat: 0, + bootstrapScriptContent: bootstrapScriptContent, + bootstrapScripts: bootstrapScripts, + bootstrapModules: bootstrapModules, + instructions: 0, + hasBody: !1, + hasHtml: !1, + unknownResources: {}, + dnsResources: {}, + connectResources: { default: {}, anonymous: {}, credentials: {} }, + imageResources: {}, + styleResources: {}, + scriptResources: {}, + moduleUnknownResources: {}, + moduleScriptResources: {} + }; +} +function createFormatContext( + insertionMode, + selectedValue, + tagScope, + viewTransition +) { + return { + insertionMode: insertionMode, + selectedValue: selectedValue, + tagScope: tagScope, + viewTransition: viewTransition + }; +} +function getChildFormatContext(parentContext, type, props) { + var subtreeScope = parentContext.tagScope & -25; + switch (type) { + case "noscript": + return createFormatContext(2, null, subtreeScope | 1, null); + case "select": + return createFormatContext( + 2, + null != props.value ? props.value : props.defaultValue, + subtreeScope, + null + ); + case "svg": + return createFormatContext(4, null, subtreeScope, null); + case "picture": + return createFormatContext(2, null, subtreeScope | 2, null); + case "math": + return createFormatContext(5, null, subtreeScope, null); + case "foreignObject": + return createFormatContext(2, null, subtreeScope, null); + case "table": + return createFormatContext(6, null, subtreeScope, null); + case "thead": + case "tbody": + case "tfoot": + return createFormatContext(7, null, subtreeScope, null); + case "colgroup": + return createFormatContext(9, null, subtreeScope, null); + case "tr": + return createFormatContext(8, null, subtreeScope, null); + case "head": + if (2 > parentContext.insertionMode) + return createFormatContext(3, null, subtreeScope, null); + break; + case "html": + if (0 === parentContext.insertionMode) + return createFormatContext(1, null, subtreeScope, null); + } + return 6 <= parentContext.insertionMode || 2 > parentContext.insertionMode + ? createFormatContext(2, null, subtreeScope, null) + : parentContext.tagScope !== subtreeScope + ? createFormatContext( + parentContext.insertionMode, + parentContext.selectedValue, + subtreeScope, + null + ) + : parentContext; +} +function getSuspenseViewTransition(parentViewTransition) { + return null === parentViewTransition + ? null + : { + update: parentViewTransition.update, + enter: "none", + exit: "none", + share: parentViewTransition.update, + name: parentViewTransition.autoName, + autoName: parentViewTransition.autoName, + nameIdx: 0 + }; +} +function getSuspenseFallbackFormatContext(resumableState, parentContext) { + parentContext.tagScope & 32 && (resumableState.instructions |= 128); + return createFormatContext( + parentContext.insertionMode, + parentContext.selectedValue, + parentContext.tagScope | 12, + getSuspenseViewTransition(parentContext.viewTransition) + ); +} +function getSuspenseContentFormatContext(resumableState, parentContext) { + resumableState = getSuspenseViewTransition(parentContext.viewTransition); + var subtreeScope = parentContext.tagScope | 16; + null !== resumableState && + "none" !== resumableState.share && + (subtreeScope |= 64); + return createFormatContext( + parentContext.insertionMode, + parentContext.selectedValue, + subtreeScope, + resumableState + ); +} +var styleNameCache = new Map(); +function pushStyleAttribute(target, style) { + if ("object" !== typeof style) + throw Error( + "The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX." + ); + var isFirst = !0, + styleName; + for (styleName in style) + if (hasOwnProperty.call(style, styleName)) { + var styleValue = style[styleName]; + if ( + null != styleValue && + "boolean" !== typeof styleValue && + "" !== styleValue + ) { + if (0 === styleName.indexOf("--")) { + var nameChunk = escapeTextForBrowser(styleName); + styleValue = escapeTextForBrowser(("" + styleValue).trim()); + } else + (nameChunk = styleNameCache.get(styleName)), + void 0 === nameChunk && + ((nameChunk = escapeTextForBrowser( + styleName + .replace(uppercasePattern, "-$1") + .toLowerCase() + .replace(msPattern, "-ms-") + )), + styleNameCache.set(styleName, nameChunk)), + (styleValue = + "number" === typeof styleValue + ? 0 === styleValue || unitlessNumbers.has(styleName) + ? "" + styleValue + : styleValue + "px" + : escapeTextForBrowser(("" + styleValue).trim())); + isFirst + ? ((isFirst = !1), + target.push(' style="', nameChunk, ":", styleValue)) + : target.push(";", nameChunk, ":", styleValue); + } + } + isFirst || target.push('"'); +} +function pushBooleanAttribute(target, name, value) { + value && + "function" !== typeof value && + "symbol" !== typeof value && + target.push(" ", name, '=""'); +} +function pushStringAttribute(target, name, value) { + "function" !== typeof value && + "symbol" !== typeof value && + "boolean" !== typeof value && + target.push(" ", name, '="', escapeTextForBrowser(value), '"'); +} +var actionJavaScriptURL = escapeTextForBrowser( + "javascript:throw new Error('React form unexpectedly submitted.')" +); +function pushAdditionalFormField(value, key) { + this.push('<input type="hidden"'); + validateAdditionalFormField(value); + pushStringAttribute(this, "name", key); + pushStringAttribute(this, "value", value); + this.push("/>"); +} +function validateAdditionalFormField(value) { + if ("string" !== typeof value) + throw Error( + "File/Blob fields are not yet supported in progressive forms. Will fallback to client hydration." + ); +} +function getCustomFormFields(resumableState, formAction) { + if ("function" === typeof formAction.$$FORM_ACTION) { + var id = resumableState.nextFormID++; + resumableState = resumableState.idPrefix + id; + try { + var customFields = formAction.$$FORM_ACTION(resumableState); + if (customFields) { + var formData = customFields.data; + null != formData && formData.forEach(validateAdditionalFormField); + } + return customFields; + } catch (x) { + if ("object" === typeof x && null !== x && "function" === typeof x.then) + throw x; + } + } + return null; +} +function pushFormActionAttribute( + target, + resumableState, + renderState, + formAction, + formEncType, + formMethod, + formTarget, + name +) { + var formData = null; + if ("function" === typeof formAction) { + var customFields = getCustomFormFields(resumableState, formAction); + null !== customFields + ? ((name = customFields.name), + (formAction = customFields.action || ""), + (formEncType = customFields.encType), + (formMethod = customFields.method), + (formTarget = customFields.target), + (formData = customFields.data)) + : (target.push(" ", "formAction", '="', actionJavaScriptURL, '"'), + (formTarget = formMethod = formEncType = formAction = name = null), + injectFormReplayingRuntime(resumableState, renderState)); + } + null != name && pushAttribute(target, "name", name); + null != formAction && pushAttribute(target, "formAction", formAction); + null != formEncType && pushAttribute(target, "formEncType", formEncType); + null != formMethod && pushAttribute(target, "formMethod", formMethod); + null != formTarget && pushAttribute(target, "formTarget", formTarget); + return formData; +} +function pushAttribute(target, name, value) { + switch (name) { + case "className": + pushStringAttribute(target, "class", value); + break; + case "tabIndex": + pushStringAttribute(target, "tabindex", value); + break; + case "dir": + case "role": + case "viewBox": + case "width": + case "height": + pushStringAttribute(target, name, value); + break; + case "style": + pushStyleAttribute(target, value); + break; + case "src": + case "href": + if ("" === value) break; + case "action": + case "formAction": + if ( + null == value || + "function" === typeof value || + "symbol" === typeof value || + "boolean" === typeof value + ) + break; + value = sanitizeURL("" + value); + target.push(" ", name, '="', escapeTextForBrowser(value), '"'); + break; + case "defaultValue": + case "defaultChecked": + case "innerHTML": + case "suppressContentEditableWarning": + case "suppressHydrationWarning": + case "ref": + break; + case "autoFocus": + case "multiple": + case "muted": + pushBooleanAttribute(target, name.toLowerCase(), value); + break; + case "xlinkHref": + if ( + "function" === typeof value || + "symbol" === typeof value || + "boolean" === typeof value + ) + break; + value = sanitizeURL("" + value); + target.push(" ", "xlink:href", '="', escapeTextForBrowser(value), '"'); + break; + case "contentEditable": + case "spellCheck": + case "draggable": + case "value": + case "autoReverse": + case "externalResourcesRequired": + case "focusable": + case "preserveAlpha": + "function" !== typeof value && + "symbol" !== typeof value && + target.push(" ", name, '="', escapeTextForBrowser(value), '"'); + break; + case "inert": + case "allowFullScreen": + case "async": + case "autoPlay": + case "controls": + case "default": + case "defer": + case "disabled": + case "disablePictureInPicture": + case "disableRemotePlayback": + case "formNoValidate": + case "hidden": + case "loop": + case "noModule": + case "noValidate": + case "open": + case "playsInline": + case "readOnly": + case "required": + case "reversed": + case "scoped": + case "seamless": + case "itemScope": + value && + "function" !== typeof value && + "symbol" !== typeof value && + target.push(" ", name, '=""'); + break; + case "capture": + case "download": + !0 === value + ? target.push(" ", name, '=""') + : !1 !== value && + "function" !== typeof value && + "symbol" !== typeof value && + target.push(" ", name, '="', escapeTextForBrowser(value), '"'); + break; + case "cols": + case "rows": + case "size": + case "span": + "function" !== typeof value && + "symbol" !== typeof value && + !isNaN(value) && + 1 <= value && + target.push(" ", name, '="', escapeTextForBrowser(value), '"'); + break; + case "rowSpan": + case "start": + "function" === typeof value || + "symbol" === typeof value || + isNaN(value) || + target.push(" ", name, '="', escapeTextForBrowser(value), '"'); + break; + case "xlinkActuate": + pushStringAttribute(target, "xlink:actuate", value); + break; + case "xlinkArcrole": + pushStringAttribute(target, "xlink:arcrole", value); + break; + case "xlinkRole": + pushStringAttribute(target, "xlink:role", value); + break; + case "xlinkShow": + pushStringAttribute(target, "xlink:show", value); + break; + case "xlinkTitle": + pushStringAttribute(target, "xlink:title", value); + break; + case "xlinkType": + pushStringAttribute(target, "xlink:type", value); + break; + case "xmlBase": + pushStringAttribute(target, "xml:base", value); + break; + case "xmlLang": + pushStringAttribute(target, "xml:lang", value); + break; + case "xmlSpace": + pushStringAttribute(target, "xml:space", value); + break; + default: + if ( + !(2 < name.length) || + ("o" !== name[0] && "O" !== name[0]) || + ("n" !== name[1] && "N" !== name[1]) + ) + if (((name = aliases.get(name) || name), isAttributeNameSafe(name))) { + switch (typeof value) { + case "function": + case "symbol": + return; + case "boolean": + var prefix$8 = name.toLowerCase().slice(0, 5); + if ("data-" !== prefix$8 && "aria-" !== prefix$8) return; + } + target.push(" ", name, '="', escapeTextForBrowser(value), '"'); + } + } +} +function pushInnerHTML(target, innerHTML, children) { + if (null != innerHTML) { + if (null != children) + throw Error( + "Can only set one of `children` or `props.dangerouslySetInnerHTML`." + ); + if ("object" !== typeof innerHTML || !("__html" in innerHTML)) + throw Error( + "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information." + ); + innerHTML = innerHTML.__html; + null !== innerHTML && void 0 !== innerHTML && target.push("" + innerHTML); + } +} +function flattenOptionChildren(children) { + var content = ""; + React.Children.forEach(children, function (child) { + null != child && (content += child); + }); + return content; +} +function injectFormReplayingRuntime(resumableState, renderState) { + if (0 === (resumableState.instructions & 16)) { + resumableState.instructions |= 16; + var preamble = renderState.preamble, + bootstrapChunks = renderState.bootstrapChunks; + (preamble.htmlChunks || preamble.headChunks) && 0 === bootstrapChunks.length + ? (bootstrapChunks.push(renderState.startInlineScript), + pushCompletedShellIdAttribute(bootstrapChunks, resumableState), + bootstrapChunks.push( + ">", + 'addEventListener("submit",function(a){if(!a.defaultPrevented){var c=a.target,d=a.submitter,e=c.action,b=d;if(d){var f=d.getAttribute("formAction");null!=f&&(e=f,b=null)}"javascript:throw new Error(\'React form unexpectedly submitted.\')"===e&&(a.preventDefault(),b?(a=document.createElement("input"),a.name=b.name,a.value=b.value,b.parentNode.insertBefore(a,b),b=new FormData(c),a.parentNode.removeChild(a)):b=new FormData(c),a=c.ownerDocument||c,(a.$$reactFormReplay=a.$$reactFormReplay||[]).push(c,d,b))}});', + "\x3c/script>" + )) + : bootstrapChunks.unshift( + renderState.startInlineScript, + ">", + 'addEventListener("submit",function(a){if(!a.defaultPrevented){var c=a.target,d=a.submitter,e=c.action,b=d;if(d){var f=d.getAttribute("formAction");null!=f&&(e=f,b=null)}"javascript:throw new Error(\'React form unexpectedly submitted.\')"===e&&(a.preventDefault(),b?(a=document.createElement("input"),a.name=b.name,a.value=b.value,b.parentNode.insertBefore(a,b),b=new FormData(c),a.parentNode.removeChild(a)):b=new FormData(c),a=c.ownerDocument||c,(a.$$reactFormReplay=a.$$reactFormReplay||[]).push(c,d,b))}});', + "\x3c/script>" + ); + } +} +function pushLinkImpl(target, props) { + target.push(startChunkForTag("link")); + for (var propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + case "dangerouslySetInnerHTML": + throw Error( + "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`." + ); + default: + pushAttribute(target, propKey, propValue); + } + } + target.push("/>"); + return null; +} +var styleRegex = /(<\/|<)(s)(tyle)/gi; +function styleReplacer(match, prefix, s, suffix) { + return "" + prefix + ("s" === s ? "\\73 " : "\\53 ") + suffix; +} +function pushSelfClosing(target, props, tag) { + target.push(startChunkForTag(tag)); + for (var propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + case "dangerouslySetInnerHTML": + throw Error( + tag + + " is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`." + ); + default: + pushAttribute(target, propKey, propValue); + } + } + target.push("/>"); + return null; +} +function pushTitleImpl(target, props) { + target.push(startChunkForTag("title")); + var children = null, + innerHTML = null, + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + children = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(">"); + props = Array.isArray(children) + ? 2 > children.length + ? children[0] + : null + : children; + "function" !== typeof props && + "symbol" !== typeof props && + null !== props && + void 0 !== props && + target.push(escapeTextForBrowser("" + props)); + pushInnerHTML(target, innerHTML, children); + target.push(endChunkForTag("title")); + return null; +} +function pushScriptImpl(target, props) { + target.push(startChunkForTag("script")); + var children = null, + innerHTML = null, + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + children = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(">"); + pushInnerHTML(target, innerHTML, children); + "string" === typeof children && + target.push(("" + children).replace(scriptRegex, scriptReplacer)); + target.push(endChunkForTag("script")); + return null; +} +function pushStartSingletonElement(target, props, tag) { + target.push(startChunkForTag(tag)); + var innerHTML = (tag = null), + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + tag = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(">"); + pushInnerHTML(target, innerHTML, tag); + return tag; +} +function pushStartGenericElement(target, props, tag) { + target.push(startChunkForTag(tag)); + var innerHTML = (tag = null), + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + tag = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(">"); + pushInnerHTML(target, innerHTML, tag); + return "string" === typeof tag + ? (target.push(escapeTextForBrowser(tag)), null) + : tag; +} +var VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/, + validatedTagCache = new Map(); +function startChunkForTag(tag) { + var tagStartChunk = validatedTagCache.get(tag); + if (void 0 === tagStartChunk) { + if (!VALID_TAG_REGEX.test(tag)) throw Error("Invalid tag: " + tag); + tagStartChunk = "<" + tag; + validatedTagCache.set(tag, tagStartChunk); + } + return tagStartChunk; +} +function pushStartInstance( + target$jscomp$0, + type, + props, + resumableState, + renderState, + preambleState, + hoistableState, + formatContext, + textEmbedded +) { + switch (type) { + case "div": + case "span": + case "svg": + case "path": + break; + case "a": + target$jscomp$0.push(startChunkForTag("a")); + var children = null, + innerHTML = null, + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + children = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + case "href": + "" === propValue + ? pushStringAttribute(target$jscomp$0, "href", "") + : pushAttribute(target$jscomp$0, propKey, propValue); + break; + default: + pushAttribute(target$jscomp$0, propKey, propValue); + } + } + target$jscomp$0.push(">"); + pushInnerHTML(target$jscomp$0, innerHTML, children); + if ("string" === typeof children) { + target$jscomp$0.push(escapeTextForBrowser(children)); + var JSCompiler_inline_result = null; + } else JSCompiler_inline_result = children; + return JSCompiler_inline_result; + case "g": + case "p": + case "li": + break; + case "select": + target$jscomp$0.push(startChunkForTag("select")); + var children$jscomp$0 = null, + innerHTML$jscomp$0 = null, + propKey$jscomp$0; + for (propKey$jscomp$0 in props) + if (hasOwnProperty.call(props, propKey$jscomp$0)) { + var propValue$jscomp$0 = props[propKey$jscomp$0]; + if (null != propValue$jscomp$0) + switch (propKey$jscomp$0) { + case "children": + children$jscomp$0 = propValue$jscomp$0; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$0 = propValue$jscomp$0; + break; + case "defaultValue": + case "value": + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$0, + propValue$jscomp$0 + ); + } + } + target$jscomp$0.push(">"); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$0, children$jscomp$0); + return children$jscomp$0; + case "option": + var selectedValue = formatContext.selectedValue; + target$jscomp$0.push(startChunkForTag("option")); + var children$jscomp$1 = null, + value = null, + selected = null, + innerHTML$jscomp$1 = null, + propKey$jscomp$1; + for (propKey$jscomp$1 in props) + if (hasOwnProperty.call(props, propKey$jscomp$1)) { + var propValue$jscomp$1 = props[propKey$jscomp$1]; + if (null != propValue$jscomp$1) + switch (propKey$jscomp$1) { + case "children": + children$jscomp$1 = propValue$jscomp$1; + break; + case "selected": + selected = propValue$jscomp$1; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$1 = propValue$jscomp$1; + break; + case "value": + value = propValue$jscomp$1; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$1, + propValue$jscomp$1 + ); + } + } + if (null != selectedValue) { + var stringValue = + null !== value + ? "" + value + : flattenOptionChildren(children$jscomp$1); + if (isArrayImpl(selectedValue)) + for (var i = 0; i < selectedValue.length; i++) { + if ("" + selectedValue[i] === stringValue) { + target$jscomp$0.push(' selected=""'); + break; + } + } + else + "" + selectedValue === stringValue && + target$jscomp$0.push(' selected=""'); + } else selected && target$jscomp$0.push(' selected=""'); + target$jscomp$0.push(">"); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$1, children$jscomp$1); + return children$jscomp$1; + case "textarea": + target$jscomp$0.push(startChunkForTag("textarea")); + var value$jscomp$0 = null, + defaultValue = null, + children$jscomp$2 = null, + propKey$jscomp$2; + for (propKey$jscomp$2 in props) + if (hasOwnProperty.call(props, propKey$jscomp$2)) { + var propValue$jscomp$2 = props[propKey$jscomp$2]; + if (null != propValue$jscomp$2) + switch (propKey$jscomp$2) { + case "children": + children$jscomp$2 = propValue$jscomp$2; + break; + case "value": + value$jscomp$0 = propValue$jscomp$2; + break; + case "defaultValue": + defaultValue = propValue$jscomp$2; + break; + case "dangerouslySetInnerHTML": + throw Error( + "`dangerouslySetInnerHTML` does not make sense on <textarea>." + ); + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$2, + propValue$jscomp$2 + ); + } + } + null === value$jscomp$0 && + null !== defaultValue && + (value$jscomp$0 = defaultValue); + target$jscomp$0.push(">"); + if (null != children$jscomp$2) { + if (null != value$jscomp$0) + throw Error( + "If you supply `defaultValue` on a <textarea>, do not pass children." + ); + if (isArrayImpl(children$jscomp$2)) { + if (1 < children$jscomp$2.length) + throw Error("<textarea> can only have at most one child."); + value$jscomp$0 = "" + children$jscomp$2[0]; + } + value$jscomp$0 = "" + children$jscomp$2; + } + "string" === typeof value$jscomp$0 && + "\n" === value$jscomp$0[0] && + target$jscomp$0.push("\n"); + null !== value$jscomp$0 && + target$jscomp$0.push(escapeTextForBrowser("" + value$jscomp$0)); + return null; + case "input": + target$jscomp$0.push(startChunkForTag("input")); + var name = null, + formAction = null, + formEncType = null, + formMethod = null, + formTarget = null, + value$jscomp$1 = null, + defaultValue$jscomp$0 = null, + checked = null, + defaultChecked = null, + propKey$jscomp$3; + for (propKey$jscomp$3 in props) + if (hasOwnProperty.call(props, propKey$jscomp$3)) { + var propValue$jscomp$3 = props[propKey$jscomp$3]; + if (null != propValue$jscomp$3) + switch (propKey$jscomp$3) { + case "children": + case "dangerouslySetInnerHTML": + throw Error( + "input is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`." + ); + case "name": + name = propValue$jscomp$3; + break; + case "formAction": + formAction = propValue$jscomp$3; + break; + case "formEncType": + formEncType = propValue$jscomp$3; + break; + case "formMethod": + formMethod = propValue$jscomp$3; + break; + case "formTarget": + formTarget = propValue$jscomp$3; + break; + case "defaultChecked": + defaultChecked = propValue$jscomp$3; + break; + case "defaultValue": + defaultValue$jscomp$0 = propValue$jscomp$3; + break; + case "checked": + checked = propValue$jscomp$3; + break; + case "value": + value$jscomp$1 = propValue$jscomp$3; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$3, + propValue$jscomp$3 + ); + } + } + var formData = pushFormActionAttribute( + target$jscomp$0, + resumableState, + renderState, + formAction, + formEncType, + formMethod, + formTarget, + name + ); + null !== checked + ? pushBooleanAttribute(target$jscomp$0, "checked", checked) + : null !== defaultChecked && + pushBooleanAttribute(target$jscomp$0, "checked", defaultChecked); + null !== value$jscomp$1 + ? pushAttribute(target$jscomp$0, "value", value$jscomp$1) + : null !== defaultValue$jscomp$0 && + pushAttribute(target$jscomp$0, "value", defaultValue$jscomp$0); + target$jscomp$0.push("/>"); + null != formData && + formData.forEach(pushAdditionalFormField, target$jscomp$0); + return null; + case "button": + target$jscomp$0.push(startChunkForTag("button")); + var children$jscomp$3 = null, + innerHTML$jscomp$2 = null, + name$jscomp$0 = null, + formAction$jscomp$0 = null, + formEncType$jscomp$0 = null, + formMethod$jscomp$0 = null, + formTarget$jscomp$0 = null, + propKey$jscomp$4; + for (propKey$jscomp$4 in props) + if (hasOwnProperty.call(props, propKey$jscomp$4)) { + var propValue$jscomp$4 = props[propKey$jscomp$4]; + if (null != propValue$jscomp$4) + switch (propKey$jscomp$4) { + case "children": + children$jscomp$3 = propValue$jscomp$4; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$2 = propValue$jscomp$4; + break; + case "name": + name$jscomp$0 = propValue$jscomp$4; + break; + case "formAction": + formAction$jscomp$0 = propValue$jscomp$4; + break; + case "formEncType": + formEncType$jscomp$0 = propValue$jscomp$4; + break; + case "formMethod": + formMethod$jscomp$0 = propValue$jscomp$4; + break; + case "formTarget": + formTarget$jscomp$0 = propValue$jscomp$4; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$4, + propValue$jscomp$4 + ); + } + } + var formData$jscomp$0 = pushFormActionAttribute( + target$jscomp$0, + resumableState, + renderState, + formAction$jscomp$0, + formEncType$jscomp$0, + formMethod$jscomp$0, + formTarget$jscomp$0, + name$jscomp$0 + ); + target$jscomp$0.push(">"); + null != formData$jscomp$0 && + formData$jscomp$0.forEach(pushAdditionalFormField, target$jscomp$0); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$2, children$jscomp$3); + if ("string" === typeof children$jscomp$3) { + target$jscomp$0.push(escapeTextForBrowser(children$jscomp$3)); + var JSCompiler_inline_result$jscomp$0 = null; + } else JSCompiler_inline_result$jscomp$0 = children$jscomp$3; + return JSCompiler_inline_result$jscomp$0; + case "form": + target$jscomp$0.push(startChunkForTag("form")); + var children$jscomp$4 = null, + innerHTML$jscomp$3 = null, + formAction$jscomp$1 = null, + formEncType$jscomp$1 = null, + formMethod$jscomp$1 = null, + formTarget$jscomp$1 = null, + propKey$jscomp$5; + for (propKey$jscomp$5 in props) + if (hasOwnProperty.call(props, propKey$jscomp$5)) { + var propValue$jscomp$5 = props[propKey$jscomp$5]; + if (null != propValue$jscomp$5) + switch (propKey$jscomp$5) { + case "children": + children$jscomp$4 = propValue$jscomp$5; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$3 = propValue$jscomp$5; + break; + case "action": + formAction$jscomp$1 = propValue$jscomp$5; + break; + case "encType": + formEncType$jscomp$1 = propValue$jscomp$5; + break; + case "method": + formMethod$jscomp$1 = propValue$jscomp$5; + break; + case "target": + formTarget$jscomp$1 = propValue$jscomp$5; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$5, + propValue$jscomp$5 + ); + } + } + var formData$jscomp$1 = null, + formActionName = null; + if ("function" === typeof formAction$jscomp$1) { + var customFields = getCustomFormFields( + resumableState, + formAction$jscomp$1 + ); + null !== customFields + ? ((formAction$jscomp$1 = customFields.action || ""), + (formEncType$jscomp$1 = customFields.encType), + (formMethod$jscomp$1 = customFields.method), + (formTarget$jscomp$1 = customFields.target), + (formData$jscomp$1 = customFields.data), + (formActionName = customFields.name)) + : (target$jscomp$0.push( + " ", + "action", + '="', + actionJavaScriptURL, + '"' + ), + (formTarget$jscomp$1 = + formMethod$jscomp$1 = + formEncType$jscomp$1 = + formAction$jscomp$1 = + null), + injectFormReplayingRuntime(resumableState, renderState)); + } + null != formAction$jscomp$1 && + pushAttribute(target$jscomp$0, "action", formAction$jscomp$1); + null != formEncType$jscomp$1 && + pushAttribute(target$jscomp$0, "encType", formEncType$jscomp$1); + null != formMethod$jscomp$1 && + pushAttribute(target$jscomp$0, "method", formMethod$jscomp$1); + null != formTarget$jscomp$1 && + pushAttribute(target$jscomp$0, "target", formTarget$jscomp$1); + target$jscomp$0.push(">"); + null !== formActionName && + (target$jscomp$0.push('<input type="hidden"'), + pushStringAttribute(target$jscomp$0, "name", formActionName), + target$jscomp$0.push("/>"), + null != formData$jscomp$1 && + formData$jscomp$1.forEach(pushAdditionalFormField, target$jscomp$0)); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$3, children$jscomp$4); + if ("string" === typeof children$jscomp$4) { + target$jscomp$0.push(escapeTextForBrowser(children$jscomp$4)); + var JSCompiler_inline_result$jscomp$1 = null; + } else JSCompiler_inline_result$jscomp$1 = children$jscomp$4; + return JSCompiler_inline_result$jscomp$1; + case "menuitem": + target$jscomp$0.push(startChunkForTag("menuitem")); + for (var propKey$jscomp$6 in props) + if (hasOwnProperty.call(props, propKey$jscomp$6)) { + var propValue$jscomp$6 = props[propKey$jscomp$6]; + if (null != propValue$jscomp$6) + switch (propKey$jscomp$6) { + case "children": + case "dangerouslySetInnerHTML": + throw Error( + "menuitems cannot have `children` nor `dangerouslySetInnerHTML`." + ); + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$6, + propValue$jscomp$6 + ); + } + } + target$jscomp$0.push(">"); + return null; + case "object": + target$jscomp$0.push(startChunkForTag("object")); + var children$jscomp$5 = null, + innerHTML$jscomp$4 = null, + propKey$jscomp$7; + for (propKey$jscomp$7 in props) + if (hasOwnProperty.call(props, propKey$jscomp$7)) { + var propValue$jscomp$7 = props[propKey$jscomp$7]; + if (null != propValue$jscomp$7) + switch (propKey$jscomp$7) { + case "children": + children$jscomp$5 = propValue$jscomp$7; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$4 = propValue$jscomp$7; + break; + case "data": + var sanitizedValue = sanitizeURL("" + propValue$jscomp$7); + if ("" === sanitizedValue) break; + target$jscomp$0.push( + " ", + "data", + '="', + escapeTextForBrowser(sanitizedValue), + '"' + ); + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$7, + propValue$jscomp$7 + ); + } + } + target$jscomp$0.push(">"); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$4, children$jscomp$5); + if ("string" === typeof children$jscomp$5) { + target$jscomp$0.push(escapeTextForBrowser(children$jscomp$5)); + var JSCompiler_inline_result$jscomp$2 = null; + } else JSCompiler_inline_result$jscomp$2 = children$jscomp$5; + return JSCompiler_inline_result$jscomp$2; + case "title": + var noscriptTagInScope = formatContext.tagScope & 1, + isFallback = formatContext.tagScope & 4; + if ( + 4 === formatContext.insertionMode || + noscriptTagInScope || + null != props.itemProp + ) + var JSCompiler_inline_result$jscomp$3 = pushTitleImpl( + target$jscomp$0, + props + ); + else + isFallback + ? (JSCompiler_inline_result$jscomp$3 = null) + : (pushTitleImpl(renderState.hoistableChunks, props), + (JSCompiler_inline_result$jscomp$3 = void 0)); + return JSCompiler_inline_result$jscomp$3; + case "link": + var noscriptTagInScope$jscomp$0 = formatContext.tagScope & 1, + isFallback$jscomp$0 = formatContext.tagScope & 4, + rel = props.rel, + href = props.href, + precedence = props.precedence; + if ( + 4 === formatContext.insertionMode || + noscriptTagInScope$jscomp$0 || + null != props.itemProp || + "string" !== typeof rel || + "string" !== typeof href || + "" === href + ) { + pushLinkImpl(target$jscomp$0, props); + var JSCompiler_inline_result$jscomp$4 = null; + } else if ("stylesheet" === props.rel) + if ( + "string" !== typeof precedence || + null != props.disabled || + props.onLoad || + props.onError + ) + JSCompiler_inline_result$jscomp$4 = pushLinkImpl( + target$jscomp$0, + props + ); + else { + var styleQueue = renderState.styles.get(precedence), + resourceState = resumableState.styleResources.hasOwnProperty(href) + ? resumableState.styleResources[href] + : void 0; + if (null !== resourceState) { + resumableState.styleResources[href] = null; + styleQueue || + ((styleQueue = { + precedence: escapeTextForBrowser(precedence), + rules: [], + hrefs: [], + sheets: new Map() + }), + renderState.styles.set(precedence, styleQueue)); + var resource = { + state: 0, + props: assign({}, props, { + "data-precedence": props.precedence, + precedence: null + }) + }; + if (resourceState) { + 2 === resourceState.length && + adoptPreloadCredentials(resource.props, resourceState); + var preloadResource = renderState.preloads.stylesheets.get(href); + preloadResource && 0 < preloadResource.length + ? (preloadResource.length = 0) + : (resource.state = 1); + } + styleQueue.sheets.set(href, resource); + hoistableState && hoistableState.stylesheets.add(resource); + } else if (styleQueue) { + var resource$9 = styleQueue.sheets.get(href); + resource$9 && + hoistableState && + hoistableState.stylesheets.add(resource$9); + } + textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"); + JSCompiler_inline_result$jscomp$4 = null; + } + else + props.onLoad || props.onError + ? (JSCompiler_inline_result$jscomp$4 = pushLinkImpl( + target$jscomp$0, + props + )) + : (textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"), + (JSCompiler_inline_result$jscomp$4 = isFallback$jscomp$0 + ? null + : pushLinkImpl(renderState.hoistableChunks, props))); + return JSCompiler_inline_result$jscomp$4; + case "script": + var noscriptTagInScope$jscomp$1 = formatContext.tagScope & 1, + asyncProp = props.async; + if ( + "string" !== typeof props.src || + !props.src || + !asyncProp || + "function" === typeof asyncProp || + "symbol" === typeof asyncProp || + props.onLoad || + props.onError || + 4 === formatContext.insertionMode || + noscriptTagInScope$jscomp$1 || + null != props.itemProp + ) + var JSCompiler_inline_result$jscomp$5 = pushScriptImpl( + target$jscomp$0, + props + ); + else { + var key = props.src; + if ("module" === props.type) { + var resources = resumableState.moduleScriptResources; + var preloads = renderState.preloads.moduleScripts; + } else + (resources = resumableState.scriptResources), + (preloads = renderState.preloads.scripts); + var resourceState$jscomp$0 = resources.hasOwnProperty(key) + ? resources[key] + : void 0; + if (null !== resourceState$jscomp$0) { + resources[key] = null; + var scriptProps = props; + if (resourceState$jscomp$0) { + 2 === resourceState$jscomp$0.length && + ((scriptProps = assign({}, props)), + adoptPreloadCredentials(scriptProps, resourceState$jscomp$0)); + var preloadResource$jscomp$0 = preloads.get(key); + preloadResource$jscomp$0 && (preloadResource$jscomp$0.length = 0); + } + var resource$jscomp$0 = []; + renderState.scripts.add(resource$jscomp$0); + pushScriptImpl(resource$jscomp$0, scriptProps); + } + textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"); + JSCompiler_inline_result$jscomp$5 = null; + } + return JSCompiler_inline_result$jscomp$5; + case "style": + var noscriptTagInScope$jscomp$2 = formatContext.tagScope & 1, + precedence$jscomp$0 = props.precedence, + href$jscomp$0 = props.href, + nonce = props.nonce; + if ( + 4 === formatContext.insertionMode || + noscriptTagInScope$jscomp$2 || + null != props.itemProp || + "string" !== typeof precedence$jscomp$0 || + "string" !== typeof href$jscomp$0 || + "" === href$jscomp$0 + ) { + target$jscomp$0.push(startChunkForTag("style")); + var children$jscomp$6 = null, + innerHTML$jscomp$5 = null, + propKey$jscomp$8; + for (propKey$jscomp$8 in props) + if (hasOwnProperty.call(props, propKey$jscomp$8)) { + var propValue$jscomp$8 = props[propKey$jscomp$8]; + if (null != propValue$jscomp$8) + switch (propKey$jscomp$8) { + case "children": + children$jscomp$6 = propValue$jscomp$8; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$5 = propValue$jscomp$8; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$8, + propValue$jscomp$8 + ); + } + } + target$jscomp$0.push(">"); + var child = Array.isArray(children$jscomp$6) + ? 2 > children$jscomp$6.length + ? children$jscomp$6[0] + : null + : children$jscomp$6; + "function" !== typeof child && + "symbol" !== typeof child && + null !== child && + void 0 !== child && + target$jscomp$0.push(("" + child).replace(styleRegex, styleReplacer)); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$5, children$jscomp$6); + target$jscomp$0.push(endChunkForTag("style")); + var JSCompiler_inline_result$jscomp$6 = null; + } else { + var styleQueue$jscomp$0 = renderState.styles.get(precedence$jscomp$0); + if ( + null !== + (resumableState.styleResources.hasOwnProperty(href$jscomp$0) + ? resumableState.styleResources[href$jscomp$0] + : void 0) + ) { + resumableState.styleResources[href$jscomp$0] = null; + styleQueue$jscomp$0 || + ((styleQueue$jscomp$0 = { + precedence: escapeTextForBrowser(precedence$jscomp$0), + rules: [], + hrefs: [], + sheets: new Map() + }), + renderState.styles.set(precedence$jscomp$0, styleQueue$jscomp$0)); + var nonceStyle = renderState.nonce.style; + if (!nonceStyle || nonceStyle === nonce) { + styleQueue$jscomp$0.hrefs.push(escapeTextForBrowser(href$jscomp$0)); + var target = styleQueue$jscomp$0.rules, + children$jscomp$7 = null, + innerHTML$jscomp$6 = null, + propKey$jscomp$9; + for (propKey$jscomp$9 in props) + if (hasOwnProperty.call(props, propKey$jscomp$9)) { + var propValue$jscomp$9 = props[propKey$jscomp$9]; + if (null != propValue$jscomp$9) + switch (propKey$jscomp$9) { + case "children": + children$jscomp$7 = propValue$jscomp$9; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$6 = propValue$jscomp$9; + } + } + var child$jscomp$0 = Array.isArray(children$jscomp$7) + ? 2 > children$jscomp$7.length + ? children$jscomp$7[0] + : null + : children$jscomp$7; + "function" !== typeof child$jscomp$0 && + "symbol" !== typeof child$jscomp$0 && + null !== child$jscomp$0 && + void 0 !== child$jscomp$0 && + target.push( + ("" + child$jscomp$0).replace(styleRegex, styleReplacer) + ); + pushInnerHTML(target, innerHTML$jscomp$6, children$jscomp$7); + } + } + styleQueue$jscomp$0 && + hoistableState && + hoistableState.styles.add(styleQueue$jscomp$0); + textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"); + JSCompiler_inline_result$jscomp$6 = void 0; + } + return JSCompiler_inline_result$jscomp$6; + case "meta": + var noscriptTagInScope$jscomp$3 = formatContext.tagScope & 1, + isFallback$jscomp$1 = formatContext.tagScope & 4; + if ( + 4 === formatContext.insertionMode || + noscriptTagInScope$jscomp$3 || + null != props.itemProp + ) + var JSCompiler_inline_result$jscomp$7 = pushSelfClosing( + target$jscomp$0, + props, + "meta" + ); + else + textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"), + (JSCompiler_inline_result$jscomp$7 = isFallback$jscomp$1 + ? null + : "string" === typeof props.charSet + ? pushSelfClosing(renderState.charsetChunks, props, "meta") + : "viewport" === props.name + ? pushSelfClosing(renderState.viewportChunks, props, "meta") + : pushSelfClosing(renderState.hoistableChunks, props, "meta")); + return JSCompiler_inline_result$jscomp$7; + case "listing": + case "pre": + target$jscomp$0.push(startChunkForTag(type)); + var children$jscomp$8 = null, + innerHTML$jscomp$7 = null, + propKey$jscomp$10; + for (propKey$jscomp$10 in props) + if (hasOwnProperty.call(props, propKey$jscomp$10)) { + var propValue$jscomp$10 = props[propKey$jscomp$10]; + if (null != propValue$jscomp$10) + switch (propKey$jscomp$10) { + case "children": + children$jscomp$8 = propValue$jscomp$10; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$7 = propValue$jscomp$10; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$10, + propValue$jscomp$10 + ); + } + } + target$jscomp$0.push(">"); + if (null != innerHTML$jscomp$7) { + if (null != children$jscomp$8) + throw Error( + "Can only set one of `children` or `props.dangerouslySetInnerHTML`." + ); + if ( + "object" !== typeof innerHTML$jscomp$7 || + !("__html" in innerHTML$jscomp$7) + ) + throw Error( + "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information." + ); + var html = innerHTML$jscomp$7.__html; + null !== html && + void 0 !== html && + ("string" === typeof html && 0 < html.length && "\n" === html[0] + ? target$jscomp$0.push("\n", html) + : target$jscomp$0.push("" + html)); + } + "string" === typeof children$jscomp$8 && + "\n" === children$jscomp$8[0] && + target$jscomp$0.push("\n"); + return children$jscomp$8; + case "img": + var pictureOrNoScriptTagInScope = formatContext.tagScope & 3, + src = props.src, + srcSet = props.srcSet; + if ( + !( + "lazy" === props.loading || + (!src && !srcSet) || + ("string" !== typeof src && null != src) || + ("string" !== typeof srcSet && null != srcSet) || + "low" === props.fetchPriority || + pictureOrNoScriptTagInScope + ) && + ("string" !== typeof src || + ":" !== src[4] || + ("d" !== src[0] && "D" !== src[0]) || + ("a" !== src[1] && "A" !== src[1]) || + ("t" !== src[2] && "T" !== src[2]) || + ("a" !== src[3] && "A" !== src[3])) && + ("string" !== typeof srcSet || + ":" !== srcSet[4] || + ("d" !== srcSet[0] && "D" !== srcSet[0]) || + ("a" !== srcSet[1] && "A" !== srcSet[1]) || + ("t" !== srcSet[2] && "T" !== srcSet[2]) || + ("a" !== srcSet[3] && "A" !== srcSet[3])) + ) { + null !== hoistableState && + formatContext.tagScope & 64 && + (hoistableState.suspenseyImages = !0); + var sizes = "string" === typeof props.sizes ? props.sizes : void 0, + key$jscomp$0 = srcSet ? srcSet + "\n" + (sizes || "") : src, + promotablePreloads = renderState.preloads.images, + resource$jscomp$1 = promotablePreloads.get(key$jscomp$0); + if (resource$jscomp$1) { + if ( + "high" === props.fetchPriority || + 10 > renderState.highImagePreloads.size + ) + promotablePreloads.delete(key$jscomp$0), + renderState.highImagePreloads.add(resource$jscomp$1); + } else if ( + !resumableState.imageResources.hasOwnProperty(key$jscomp$0) + ) { + resumableState.imageResources[key$jscomp$0] = PRELOAD_NO_CREDS; + var input = props.crossOrigin; + var JSCompiler_inline_result$jscomp$8 = + "string" === typeof input + ? "use-credentials" === input + ? input + : "" + : void 0; + var headers = renderState.headers, + header; + headers && + 0 < headers.remainingCapacity && + "string" !== typeof props.srcSet && + ("high" === props.fetchPriority || + 500 > headers.highImagePreloads.length) && + ((header = getPreloadAsHeader(src, "image", { + imageSrcSet: props.srcSet, + imageSizes: props.sizes, + crossOrigin: JSCompiler_inline_result$jscomp$8, + integrity: props.integrity, + nonce: props.nonce, + type: props.type, + fetchPriority: props.fetchPriority, + referrerPolicy: props.refererPolicy + })), + 0 <= (headers.remainingCapacity -= header.length + 2)) + ? ((renderState.resets.image[key$jscomp$0] = PRELOAD_NO_CREDS), + headers.highImagePreloads && (headers.highImagePreloads += ", "), + (headers.highImagePreloads += header)) + : ((resource$jscomp$1 = []), + pushLinkImpl(resource$jscomp$1, { + rel: "preload", + as: "image", + href: srcSet ? void 0 : src, + imageSrcSet: srcSet, + imageSizes: sizes, + crossOrigin: JSCompiler_inline_result$jscomp$8, + integrity: props.integrity, + type: props.type, + fetchPriority: props.fetchPriority, + referrerPolicy: props.referrerPolicy + }), + "high" === props.fetchPriority || + 10 > renderState.highImagePreloads.size + ? renderState.highImagePreloads.add(resource$jscomp$1) + : (renderState.bulkPreloads.add(resource$jscomp$1), + promotablePreloads.set(key$jscomp$0, resource$jscomp$1))); + } + } + return pushSelfClosing(target$jscomp$0, props, "img"); + case "base": + case "area": + case "br": + case "col": + case "embed": + case "hr": + case "keygen": + case "param": + case "source": + case "track": + case "wbr": + return pushSelfClosing(target$jscomp$0, props, type); + case "annotation-xml": + case "color-profile": + case "font-face": + case "font-face-src": + case "font-face-uri": + case "font-face-format": + case "font-face-name": + case "missing-glyph": + break; + case "head": + if (2 > formatContext.insertionMode) { + var preamble = preambleState || renderState.preamble; + if (preamble.headChunks) + throw Error("The `<head>` tag may only be rendered once."); + null !== preambleState && target$jscomp$0.push("\x3c!--head--\x3e"); + preamble.headChunks = []; + var JSCompiler_inline_result$jscomp$9 = pushStartSingletonElement( + preamble.headChunks, + props, + "head" + ); + } else + JSCompiler_inline_result$jscomp$9 = pushStartGenericElement( + target$jscomp$0, + props, + "head" + ); + return JSCompiler_inline_result$jscomp$9; + case "body": + if (2 > formatContext.insertionMode) { + var preamble$jscomp$0 = preambleState || renderState.preamble; + if (preamble$jscomp$0.bodyChunks) + throw Error("The `<body>` tag may only be rendered once."); + null !== preambleState && target$jscomp$0.push("\x3c!--body--\x3e"); + preamble$jscomp$0.bodyChunks = []; + var JSCompiler_inline_result$jscomp$10 = pushStartSingletonElement( + preamble$jscomp$0.bodyChunks, + props, + "body" + ); + } else + JSCompiler_inline_result$jscomp$10 = pushStartGenericElement( + target$jscomp$0, + props, + "body" + ); + return JSCompiler_inline_result$jscomp$10; + case "html": + if (0 === formatContext.insertionMode) { + var preamble$jscomp$1 = preambleState || renderState.preamble; + if (preamble$jscomp$1.htmlChunks) + throw Error("The `<html>` tag may only be rendered once."); + null !== preambleState && target$jscomp$0.push("\x3c!--html--\x3e"); + preamble$jscomp$1.htmlChunks = [""]; + var JSCompiler_inline_result$jscomp$11 = pushStartSingletonElement( + preamble$jscomp$1.htmlChunks, + props, + "html" + ); + } else + JSCompiler_inline_result$jscomp$11 = pushStartGenericElement( + target$jscomp$0, + props, + "html" + ); + return JSCompiler_inline_result$jscomp$11; + default: + if (-1 !== type.indexOf("-")) { + target$jscomp$0.push(startChunkForTag(type)); + var children$jscomp$9 = null, + innerHTML$jscomp$8 = null, + propKey$jscomp$11; + for (propKey$jscomp$11 in props) + if (hasOwnProperty.call(props, propKey$jscomp$11)) { + var propValue$jscomp$11 = props[propKey$jscomp$11]; + if (null != propValue$jscomp$11) { + var attributeName = propKey$jscomp$11; + switch (propKey$jscomp$11) { + case "children": + children$jscomp$9 = propValue$jscomp$11; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$8 = propValue$jscomp$11; + break; + case "style": + pushStyleAttribute(target$jscomp$0, propValue$jscomp$11); + break; + case "suppressContentEditableWarning": + case "suppressHydrationWarning": + case "ref": + break; + case "className": + attributeName = "class"; + default: + if ( + isAttributeNameSafe(propKey$jscomp$11) && + "function" !== typeof propValue$jscomp$11 && + "symbol" !== typeof propValue$jscomp$11 && + !1 !== propValue$jscomp$11 + ) { + if (!0 === propValue$jscomp$11) propValue$jscomp$11 = ""; + else if ("object" === typeof propValue$jscomp$11) continue; + target$jscomp$0.push( + " ", + attributeName, + '="', + escapeTextForBrowser(propValue$jscomp$11), + '"' + ); + } + } + } + } + target$jscomp$0.push(">"); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$8, children$jscomp$9); + return children$jscomp$9; + } + } + return pushStartGenericElement(target$jscomp$0, props, type); +} +var endTagCache = new Map(); +function endChunkForTag(tag) { + var chunk = endTagCache.get(tag); + void 0 === chunk && ((chunk = "</" + tag + ">"), endTagCache.set(tag, chunk)); + return chunk; +} +function hoistPreambleState(renderState, preambleState) { + renderState = renderState.preamble; + null === renderState.htmlChunks && + preambleState.htmlChunks && + (renderState.htmlChunks = preambleState.htmlChunks); + null === renderState.headChunks && + preambleState.headChunks && + (renderState.headChunks = preambleState.headChunks); + null === renderState.bodyChunks && + preambleState.bodyChunks && + (renderState.bodyChunks = preambleState.bodyChunks); +} +function writeBootstrap(destination, renderState) { + renderState = renderState.bootstrapChunks; + for (var i = 0; i < renderState.length - 1; i++) + destination.push(renderState[i]); + return i < renderState.length + ? ((i = renderState[i]), (renderState.length = 0), destination.push(i)) + : !0; +} +function writeStartPendingSuspenseBoundary(destination, renderState, id) { + destination.push('\x3c!--$?--\x3e<template id="'); + if (null === id) + throw Error( + "An ID must have been assigned before we can complete the boundary." + ); + destination.push(renderState.boundaryPrefix); + renderState = id.toString(16); + destination.push(renderState); + return destination.push('"></template>'); +} +function writeStartSegment(destination, renderState, formatContext, id) { + switch (formatContext.insertionMode) { + case 0: + case 1: + case 3: + case 2: + return ( + destination.push('<div hidden id="'), + destination.push(renderState.segmentPrefix), + (renderState = id.toString(16)), + destination.push(renderState), + destination.push('">') + ); + case 4: + return ( + destination.push('<svg aria-hidden="true" style="display:none" id="'), + destination.push(renderState.segmentPrefix), + (renderState = id.toString(16)), + destination.push(renderState), + destination.push('">') + ); + case 5: + return ( + destination.push('<math aria-hidden="true" style="display:none" id="'), + destination.push(renderState.segmentPrefix), + (renderState = id.toString(16)), + destination.push(renderState), + destination.push('">') + ); + case 6: + return ( + destination.push('<table hidden id="'), + destination.push(renderState.segmentPrefix), + (renderState = id.toString(16)), + destination.push(renderState), + destination.push('">') + ); + case 7: + return ( + destination.push('<table hidden><tbody id="'), + destination.push(renderState.segmentPrefix), + (renderState = id.toString(16)), + destination.push(renderState), + destination.push('">') + ); + case 8: + return ( + destination.push('<table hidden><tr id="'), + destination.push(renderState.segmentPrefix), + (renderState = id.toString(16)), + destination.push(renderState), + destination.push('">') + ); + case 9: + return ( + destination.push('<table hidden><colgroup id="'), + destination.push(renderState.segmentPrefix), + (renderState = id.toString(16)), + destination.push(renderState), + destination.push('">') + ); + default: + throw Error("Unknown insertion mode. This is a bug in React."); + } +} +function writeEndSegment(destination, formatContext) { + switch (formatContext.insertionMode) { + case 0: + case 1: + case 3: + case 2: + return destination.push("</div>"); + case 4: + return destination.push("</svg>"); + case 5: + return destination.push("</math>"); + case 6: + return destination.push("</table>"); + case 7: + return destination.push("</tbody></table>"); + case 8: + return destination.push("</tr></table>"); + case 9: + return destination.push("</colgroup></table>"); + default: + throw Error("Unknown insertion mode. This is a bug in React."); + } +} +var regexForJSStringsInInstructionScripts = /[<\u2028\u2029]/g; +function escapeJSStringsForInstructionScripts(input) { + return JSON.stringify(input).replace( + regexForJSStringsInInstructionScripts, + function (match) { + switch (match) { + case "<": + return "\\u003c"; + case "\u2028": + return "\\u2028"; + case "\u2029": + return "\\u2029"; + default: + throw Error( + "escapeJSStringsForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React" + ); + } + } + ); +} +var regexForJSStringsInScripts = /[&><\u2028\u2029]/g; +function escapeJSObjectForInstructionScripts(input) { + return JSON.stringify(input).replace( + regexForJSStringsInScripts, + function (match) { + switch (match) { + case "&": + return "\\u0026"; + case ">": + return "\\u003e"; + case "<": + return "\\u003c"; + case "\u2028": + return "\\u2028"; + case "\u2029": + return "\\u2029"; + default: + throw Error( + "escapeJSObjectForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React" + ); + } + } + ); +} +var currentlyRenderingBoundaryHasStylesToHoist = !1, + destinationHasCapacity = !0; +function flushStyleTagsLateForBoundary(styleQueue) { + var rules = styleQueue.rules, + hrefs = styleQueue.hrefs, + i = 0; + if (hrefs.length) { + this.push(currentlyFlushingRenderState.startInlineStyle); + this.push(' media="not all" data-precedence="'); + this.push(styleQueue.precedence); + for (this.push('" data-href="'); i < hrefs.length - 1; i++) + this.push(hrefs[i]), this.push(" "); + this.push(hrefs[i]); + this.push('">'); + for (i = 0; i < rules.length; i++) this.push(rules[i]); + destinationHasCapacity = this.push("</style>"); + currentlyRenderingBoundaryHasStylesToHoist = !0; + rules.length = 0; + hrefs.length = 0; + } +} +function hasStylesToHoist(stylesheet) { + return 2 !== stylesheet.state + ? (currentlyRenderingBoundaryHasStylesToHoist = !0) + : !1; +} +function writeHoistablesForBoundary(destination, hoistableState, renderState) { + currentlyRenderingBoundaryHasStylesToHoist = !1; + destinationHasCapacity = !0; + currentlyFlushingRenderState = renderState; + hoistableState.styles.forEach(flushStyleTagsLateForBoundary, destination); + currentlyFlushingRenderState = null; + hoistableState.stylesheets.forEach(hasStylesToHoist); + currentlyRenderingBoundaryHasStylesToHoist && + (renderState.stylesToHoist = !0); + return destinationHasCapacity; +} +function flushResource(resource) { + for (var i = 0; i < resource.length; i++) this.push(resource[i]); + resource.length = 0; +} +var stylesheetFlushingQueue = []; +function flushStyleInPreamble(stylesheet) { + pushLinkImpl(stylesheetFlushingQueue, stylesheet.props); + for (var i = 0; i < stylesheetFlushingQueue.length; i++) + this.push(stylesheetFlushingQueue[i]); + stylesheetFlushingQueue.length = 0; + stylesheet.state = 2; +} +function flushStylesInPreamble(styleQueue) { + var hasStylesheets = 0 < styleQueue.sheets.size; + styleQueue.sheets.forEach(flushStyleInPreamble, this); + styleQueue.sheets.clear(); + var rules = styleQueue.rules, + hrefs = styleQueue.hrefs; + if (!hasStylesheets || hrefs.length) { + this.push(currentlyFlushingRenderState.startInlineStyle); + this.push(' data-precedence="'); + this.push(styleQueue.precedence); + styleQueue = 0; + if (hrefs.length) { + for ( + this.push('" data-href="'); + styleQueue < hrefs.length - 1; + styleQueue++ + ) + this.push(hrefs[styleQueue]), this.push(" "); + this.push(hrefs[styleQueue]); + } + this.push('">'); + for (styleQueue = 0; styleQueue < rules.length; styleQueue++) + this.push(rules[styleQueue]); + this.push("</style>"); + rules.length = 0; + hrefs.length = 0; + } +} +function preloadLateStyle(stylesheet) { + if (0 === stylesheet.state) { + stylesheet.state = 1; + var props = stylesheet.props; + pushLinkImpl(stylesheetFlushingQueue, { + rel: "preload", + as: "style", + href: stylesheet.props.href, + crossOrigin: props.crossOrigin, + fetchPriority: props.fetchPriority, + integrity: props.integrity, + media: props.media, + hrefLang: props.hrefLang, + referrerPolicy: props.referrerPolicy + }); + for ( + stylesheet = 0; + stylesheet < stylesheetFlushingQueue.length; + stylesheet++ + ) + this.push(stylesheetFlushingQueue[stylesheet]); + stylesheetFlushingQueue.length = 0; + } +} +function preloadLateStyles(styleQueue) { + styleQueue.sheets.forEach(preloadLateStyle, this); + styleQueue.sheets.clear(); +} +function pushCompletedShellIdAttribute(target, resumableState) { + 0 === (resumableState.instructions & 32) && + ((resumableState.instructions |= 32), + target.push( + ' id="', + escapeTextForBrowser("_" + resumableState.idPrefix + "R_"), + '"' + )); +} +function writeStyleResourceDependenciesInJS(destination, hoistableState) { + destination.push("["); + var nextArrayOpenBrackChunk = "["; + hoistableState.stylesheets.forEach(function (resource) { + if (2 !== resource.state) + if (3 === resource.state) + destination.push(nextArrayOpenBrackChunk), + (resource = escapeJSObjectForInstructionScripts( + "" + resource.props.href + )), + destination.push(resource), + destination.push("]"), + (nextArrayOpenBrackChunk = ",["); + else { + destination.push(nextArrayOpenBrackChunk); + var precedence = resource.props["data-precedence"], + props = resource.props, + coercedHref = sanitizeURL("" + resource.props.href); + coercedHref = escapeJSObjectForInstructionScripts(coercedHref); + destination.push(coercedHref); + precedence = "" + precedence; + destination.push(","); + precedence = escapeJSObjectForInstructionScripts(precedence); + destination.push(precedence); + for (var propKey in props) + if ( + hasOwnProperty.call(props, propKey) && + ((precedence = props[propKey]), null != precedence) + ) + switch (propKey) { + case "href": + case "rel": + case "precedence": + case "data-precedence": + break; + case "children": + case "dangerouslySetInnerHTML": + throw Error( + "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`." + ); + default: + writeStyleResourceAttributeInJS( + destination, + propKey, + precedence + ); + } + destination.push("]"); + nextArrayOpenBrackChunk = ",["; + resource.state = 3; + } + }); + destination.push("]"); +} +function writeStyleResourceAttributeInJS(destination, name, value) { + var attributeName = name.toLowerCase(); + switch (typeof value) { + case "function": + case "symbol": + return; + } + switch (name) { + case "innerHTML": + case "dangerouslySetInnerHTML": + case "suppressContentEditableWarning": + case "suppressHydrationWarning": + case "style": + case "ref": + return; + case "className": + attributeName = "class"; + name = "" + value; + break; + case "hidden": + if (!1 === value) return; + name = ""; + break; + case "src": + case "href": + value = sanitizeURL(value); + name = "" + value; + break; + default: + if ( + (2 < name.length && + ("o" === name[0] || "O" === name[0]) && + ("n" === name[1] || "N" === name[1])) || + !isAttributeNameSafe(name) + ) + return; + name = "" + value; + } + destination.push(","); + attributeName = escapeJSObjectForInstructionScripts(attributeName); + destination.push(attributeName); + destination.push(","); + attributeName = escapeJSObjectForInstructionScripts(name); + destination.push(attributeName); +} +function createHoistableState() { + return { styles: new Set(), stylesheets: new Set(), suspenseyImages: !1 }; +} +function prefetchDNS(href) { + var request = currentRequest ? currentRequest : null; + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if ("string" === typeof href && href) { + if (!resumableState.dnsResources.hasOwnProperty(href)) { + resumableState.dnsResources[href] = null; + resumableState = renderState.headers; + var header, JSCompiler_temp; + if ( + (JSCompiler_temp = + resumableState && 0 < resumableState.remainingCapacity) + ) + JSCompiler_temp = + ((header = + "<" + + ("" + href).replace( + regexForHrefInLinkHeaderURLContext, + escapeHrefForLinkHeaderURLContextReplacer + ) + + ">; rel=dns-prefetch"), + 0 <= (resumableState.remainingCapacity -= header.length + 2)); + JSCompiler_temp + ? ((renderState.resets.dns[href] = null), + resumableState.preconnects && (resumableState.preconnects += ", "), + (resumableState.preconnects += header)) + : ((header = []), + pushLinkImpl(header, { href: href, rel: "dns-prefetch" }), + renderState.preconnects.add(header)); + } + enqueueFlush(request); + } + } else previousDispatcher.D(href); +} +function preconnect(href, crossOrigin) { + var request = currentRequest ? currentRequest : null; + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if ("string" === typeof href && href) { + var bucket = + "use-credentials" === crossOrigin + ? "credentials" + : "string" === typeof crossOrigin + ? "anonymous" + : "default"; + if (!resumableState.connectResources[bucket].hasOwnProperty(href)) { + resumableState.connectResources[bucket][href] = null; + resumableState = renderState.headers; + var header, JSCompiler_temp; + if ( + (JSCompiler_temp = + resumableState && 0 < resumableState.remainingCapacity) + ) { + JSCompiler_temp = + "<" + + ("" + href).replace( + regexForHrefInLinkHeaderURLContext, + escapeHrefForLinkHeaderURLContextReplacer + ) + + ">; rel=preconnect"; + if ("string" === typeof crossOrigin) { + var escapedCrossOrigin = ("" + crossOrigin).replace( + regexForLinkHeaderQuotedParamValueContext, + escapeStringForLinkHeaderQuotedParamValueContextReplacer + ); + JSCompiler_temp += '; crossorigin="' + escapedCrossOrigin + '"'; + } + JSCompiler_temp = + ((header = JSCompiler_temp), + 0 <= (resumableState.remainingCapacity -= header.length + 2)); + } + JSCompiler_temp + ? ((renderState.resets.connect[bucket][href] = null), + resumableState.preconnects && (resumableState.preconnects += ", "), + (resumableState.preconnects += header)) + : ((bucket = []), + pushLinkImpl(bucket, { + rel: "preconnect", + href: href, + crossOrigin: crossOrigin + }), + renderState.preconnects.add(bucket)); + } + enqueueFlush(request); + } + } else previousDispatcher.C(href, crossOrigin); +} +function preload(href, as, options) { + var request = currentRequest ? currentRequest : null; + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if (as && href) { + switch (as) { + case "image": + if (options) { + var imageSrcSet = options.imageSrcSet; + var imageSizes = options.imageSizes; + var fetchPriority = options.fetchPriority; + } + var key = imageSrcSet + ? imageSrcSet + "\n" + (imageSizes || "") + : href; + if (resumableState.imageResources.hasOwnProperty(key)) return; + resumableState.imageResources[key] = PRELOAD_NO_CREDS; + resumableState = renderState.headers; + var header; + resumableState && + 0 < resumableState.remainingCapacity && + "string" !== typeof imageSrcSet && + "high" === fetchPriority && + ((header = getPreloadAsHeader(href, as, options)), + 0 <= (resumableState.remainingCapacity -= header.length + 2)) + ? ((renderState.resets.image[key] = PRELOAD_NO_CREDS), + resumableState.highImagePreloads && + (resumableState.highImagePreloads += ", "), + (resumableState.highImagePreloads += header)) + : ((resumableState = []), + pushLinkImpl( + resumableState, + assign( + { rel: "preload", href: imageSrcSet ? void 0 : href, as: as }, + options + ) + ), + "high" === fetchPriority + ? renderState.highImagePreloads.add(resumableState) + : (renderState.bulkPreloads.add(resumableState), + renderState.preloads.images.set(key, resumableState))); + break; + case "style": + if (resumableState.styleResources.hasOwnProperty(href)) return; + imageSrcSet = []; + pushLinkImpl( + imageSrcSet, + assign({ rel: "preload", href: href, as: as }, options) + ); + resumableState.styleResources[href] = + !options || + ("string" !== typeof options.crossOrigin && + "string" !== typeof options.integrity) + ? PRELOAD_NO_CREDS + : [options.crossOrigin, options.integrity]; + renderState.preloads.stylesheets.set(href, imageSrcSet); + renderState.bulkPreloads.add(imageSrcSet); + break; + case "script": + if (resumableState.scriptResources.hasOwnProperty(href)) return; + imageSrcSet = []; + renderState.preloads.scripts.set(href, imageSrcSet); + renderState.bulkPreloads.add(imageSrcSet); + pushLinkImpl( + imageSrcSet, + assign({ rel: "preload", href: href, as: as }, options) + ); + resumableState.scriptResources[href] = + !options || + ("string" !== typeof options.crossOrigin && + "string" !== typeof options.integrity) + ? PRELOAD_NO_CREDS + : [options.crossOrigin, options.integrity]; + break; + default: + if (resumableState.unknownResources.hasOwnProperty(as)) { + if ( + ((imageSrcSet = resumableState.unknownResources[as]), + imageSrcSet.hasOwnProperty(href)) + ) + return; + } else + (imageSrcSet = {}), + (resumableState.unknownResources[as] = imageSrcSet); + imageSrcSet[href] = PRELOAD_NO_CREDS; + if ( + (resumableState = renderState.headers) && + 0 < resumableState.remainingCapacity && + "font" === as && + ((key = getPreloadAsHeader(href, as, options)), + 0 <= (resumableState.remainingCapacity -= key.length + 2)) + ) + (renderState.resets.font[href] = PRELOAD_NO_CREDS), + resumableState.fontPreloads && + (resumableState.fontPreloads += ", "), + (resumableState.fontPreloads += key); + else + switch ( + ((resumableState = []), + (href = assign({ rel: "preload", href: href, as: as }, options)), + pushLinkImpl(resumableState, href), + as) + ) { + case "font": + renderState.fontPreloads.add(resumableState); + break; + default: + renderState.bulkPreloads.add(resumableState); + } + } + enqueueFlush(request); + } + } else previousDispatcher.L(href, as, options); +} +function preloadModule(href, options) { + var request = currentRequest ? currentRequest : null; + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if (href) { + var as = + options && "string" === typeof options.as ? options.as : "script"; + switch (as) { + case "script": + if (resumableState.moduleScriptResources.hasOwnProperty(href)) return; + as = []; + resumableState.moduleScriptResources[href] = + !options || + ("string" !== typeof options.crossOrigin && + "string" !== typeof options.integrity) + ? PRELOAD_NO_CREDS + : [options.crossOrigin, options.integrity]; + renderState.preloads.moduleScripts.set(href, as); + break; + default: + if (resumableState.moduleUnknownResources.hasOwnProperty(as)) { + var resources = resumableState.unknownResources[as]; + if (resources.hasOwnProperty(href)) return; + } else + (resources = {}), + (resumableState.moduleUnknownResources[as] = resources); + as = []; + resources[href] = PRELOAD_NO_CREDS; + } + pushLinkImpl(as, assign({ rel: "modulepreload", href: href }, options)); + renderState.bulkPreloads.add(as); + enqueueFlush(request); + } + } else previousDispatcher.m(href, options); +} +function preinitStyle(href, precedence, options) { + var request = currentRequest ? currentRequest : null; + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if (href) { + precedence = precedence || "default"; + var styleQueue = renderState.styles.get(precedence), + resourceState = resumableState.styleResources.hasOwnProperty(href) + ? resumableState.styleResources[href] + : void 0; + null !== resourceState && + ((resumableState.styleResources[href] = null), + styleQueue || + ((styleQueue = { + precedence: escapeTextForBrowser(precedence), + rules: [], + hrefs: [], + sheets: new Map() + }), + renderState.styles.set(precedence, styleQueue)), + (precedence = { + state: 0, + props: assign( + { rel: "stylesheet", href: href, "data-precedence": precedence }, + options + ) + }), + resourceState && + (2 === resourceState.length && + adoptPreloadCredentials(precedence.props, resourceState), + (renderState = renderState.preloads.stylesheets.get(href)) && + 0 < renderState.length + ? (renderState.length = 0) + : (precedence.state = 1)), + styleQueue.sheets.set(href, precedence), + enqueueFlush(request)); + } + } else previousDispatcher.S(href, precedence, options); +} +function preinitScript(src, options) { + var request = currentRequest ? currentRequest : null; + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if (src) { + var resourceState = resumableState.scriptResources.hasOwnProperty(src) + ? resumableState.scriptResources[src] + : void 0; + null !== resourceState && + ((resumableState.scriptResources[src] = null), + (options = assign({ src: src, async: !0 }, options)), + resourceState && + (2 === resourceState.length && + adoptPreloadCredentials(options, resourceState), + (src = renderState.preloads.scripts.get(src))) && + (src.length = 0), + (src = []), + renderState.scripts.add(src), + pushScriptImpl(src, options), + enqueueFlush(request)); + } + } else previousDispatcher.X(src, options); +} +function preinitModuleScript(src, options) { + var request = currentRequest ? currentRequest : null; + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if (src) { + var resourceState = resumableState.moduleScriptResources.hasOwnProperty( + src + ) + ? resumableState.moduleScriptResources[src] + : void 0; + null !== resourceState && + ((resumableState.moduleScriptResources[src] = null), + (options = assign({ src: src, type: "module", async: !0 }, options)), + resourceState && + (2 === resourceState.length && + adoptPreloadCredentials(options, resourceState), + (src = renderState.preloads.moduleScripts.get(src))) && + (src.length = 0), + (src = []), + renderState.scripts.add(src), + pushScriptImpl(src, options), + enqueueFlush(request)); + } + } else previousDispatcher.M(src, options); +} +function adoptPreloadCredentials(target, preloadState) { + null == target.crossOrigin && (target.crossOrigin = preloadState[0]); + null == target.integrity && (target.integrity = preloadState[1]); +} +function getPreloadAsHeader(href, as, params) { + href = ("" + href).replace( + regexForHrefInLinkHeaderURLContext, + escapeHrefForLinkHeaderURLContextReplacer + ); + as = ("" + as).replace( + regexForLinkHeaderQuotedParamValueContext, + escapeStringForLinkHeaderQuotedParamValueContextReplacer + ); + as = "<" + href + '>; rel=preload; as="' + as + '"'; + for (var paramName in params) + hasOwnProperty.call(params, paramName) && + ((href = params[paramName]), + "string" === typeof href && + (as += + "; " + + paramName.toLowerCase() + + '="' + + ("" + href).replace( + regexForLinkHeaderQuotedParamValueContext, + escapeStringForLinkHeaderQuotedParamValueContextReplacer + ) + + '"')); + return as; +} +var regexForHrefInLinkHeaderURLContext = /[<>\r\n]/g; +function escapeHrefForLinkHeaderURLContextReplacer(match) { + switch (match) { + case "<": + return "%3C"; + case ">": + return "%3E"; + case "\n": + return "%0A"; + case "\r": + return "%0D"; + default: + throw Error( + "escapeLinkHrefForHeaderContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React" + ); + } +} +var regexForLinkHeaderQuotedParamValueContext = /["';,\r\n]/g; +function escapeStringForLinkHeaderQuotedParamValueContextReplacer(match) { + switch (match) { + case '"': + return "%22"; + case "'": + return "%27"; + case ";": + return "%3B"; + case ",": + return "%2C"; + case "\n": + return "%0A"; + case "\r": + return "%0D"; + default: + throw Error( + "escapeStringForLinkHeaderQuotedParamValueContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React" + ); + } +} +function hoistStyleQueueDependency(styleQueue) { + this.styles.add(styleQueue); +} +function hoistStylesheetDependency(stylesheet) { + this.stylesheets.add(stylesheet); +} +function hoistHoistables(parentState, childState) { + childState.styles.forEach(hoistStyleQueueDependency, parentState); + childState.stylesheets.forEach(hoistStylesheetDependency, parentState); + childState.suspenseyImages && (parentState.suspenseyImages = !0); +} +function createRenderState(resumableState, generateStaticMarkup) { + var idPrefix = resumableState.idPrefix, + bootstrapChunks = [], + bootstrapScriptContent = resumableState.bootstrapScriptContent, + bootstrapScripts = resumableState.bootstrapScripts, + bootstrapModules = resumableState.bootstrapModules; + void 0 !== bootstrapScriptContent && + (bootstrapChunks.push("<script"), + pushCompletedShellIdAttribute(bootstrapChunks, resumableState), + bootstrapChunks.push( + ">", + ("" + bootstrapScriptContent).replace(scriptRegex, scriptReplacer), + "\x3c/script>" + )); + bootstrapScriptContent = idPrefix + "P:"; + var JSCompiler_object_inline_segmentPrefix_1673 = idPrefix + "S:"; + idPrefix += "B:"; + var JSCompiler_object_inline_preconnects_1687 = new Set(), + JSCompiler_object_inline_fontPreloads_1688 = new Set(), + JSCompiler_object_inline_highImagePreloads_1689 = new Set(), + JSCompiler_object_inline_styles_1690 = new Map(), + JSCompiler_object_inline_bootstrapScripts_1691 = new Set(), + JSCompiler_object_inline_scripts_1692 = new Set(), + JSCompiler_object_inline_bulkPreloads_1693 = new Set(), + JSCompiler_object_inline_preloads_1694 = { + images: new Map(), + stylesheets: new Map(), + scripts: new Map(), + moduleScripts: new Map() + }; + if (void 0 !== bootstrapScripts) + for (var i = 0; i < bootstrapScripts.length; i++) { + var scriptConfig = bootstrapScripts[i], + src, + crossOrigin = void 0, + integrity = void 0, + props = { + rel: "preload", + as: "script", + fetchPriority: "low", + nonce: void 0 + }; + "string" === typeof scriptConfig + ? (props.href = src = scriptConfig) + : ((props.href = src = scriptConfig.src), + (props.integrity = integrity = + "string" === typeof scriptConfig.integrity + ? scriptConfig.integrity + : void 0), + (props.crossOrigin = crossOrigin = + "string" === typeof scriptConfig || null == scriptConfig.crossOrigin + ? void 0 + : "use-credentials" === scriptConfig.crossOrigin + ? "use-credentials" + : "")); + scriptConfig = resumableState; + var href = src; + scriptConfig.scriptResources[href] = null; + scriptConfig.moduleScriptResources[href] = null; + scriptConfig = []; + pushLinkImpl(scriptConfig, props); + JSCompiler_object_inline_bootstrapScripts_1691.add(scriptConfig); + bootstrapChunks.push('<script src="', escapeTextForBrowser(src), '"'); + "string" === typeof integrity && + bootstrapChunks.push( + ' integrity="', + escapeTextForBrowser(integrity), + '"' + ); + "string" === typeof crossOrigin && + bootstrapChunks.push( + ' crossorigin="', + escapeTextForBrowser(crossOrigin), + '"' + ); + pushCompletedShellIdAttribute(bootstrapChunks, resumableState); + bootstrapChunks.push(' async="">\x3c/script>'); + } + if (void 0 !== bootstrapModules) + for ( + bootstrapScripts = 0; + bootstrapScripts < bootstrapModules.length; + bootstrapScripts++ + ) + (props = bootstrapModules[bootstrapScripts]), + (crossOrigin = src = void 0), + (integrity = { + rel: "modulepreload", + fetchPriority: "low", + nonce: void 0 + }), + "string" === typeof props + ? (integrity.href = i = props) + : ((integrity.href = i = props.src), + (integrity.integrity = crossOrigin = + "string" === typeof props.integrity ? props.integrity : void 0), + (integrity.crossOrigin = src = + "string" === typeof props || null == props.crossOrigin + ? void 0 + : "use-credentials" === props.crossOrigin + ? "use-credentials" + : "")), + (props = resumableState), + (scriptConfig = i), + (props.scriptResources[scriptConfig] = null), + (props.moduleScriptResources[scriptConfig] = null), + (props = []), + pushLinkImpl(props, integrity), + JSCompiler_object_inline_bootstrapScripts_1691.add(props), + bootstrapChunks.push( + '<script type="module" src="', + escapeTextForBrowser(i), + '"' + ), + "string" === typeof crossOrigin && + bootstrapChunks.push( + ' integrity="', + escapeTextForBrowser(crossOrigin), + '"' + ), + "string" === typeof src && + bootstrapChunks.push( + ' crossorigin="', + escapeTextForBrowser(src), + '"' + ), + pushCompletedShellIdAttribute(bootstrapChunks, resumableState), + bootstrapChunks.push(' async="">\x3c/script>'); + return { + placeholderPrefix: bootstrapScriptContent, + segmentPrefix: JSCompiler_object_inline_segmentPrefix_1673, + boundaryPrefix: idPrefix, + startInlineScript: "<script", + startInlineStyle: "<style", + preamble: { htmlChunks: null, headChunks: null, bodyChunks: null }, + externalRuntimeScript: null, + bootstrapChunks: bootstrapChunks, + importMapChunks: [], + onHeaders: void 0, + headers: null, + resets: { + font: {}, + dns: {}, + connect: { default: {}, anonymous: {}, credentials: {} }, + image: {}, + style: {} + }, + charsetChunks: [], + viewportChunks: [], + hoistableChunks: [], + preconnects: JSCompiler_object_inline_preconnects_1687, + fontPreloads: JSCompiler_object_inline_fontPreloads_1688, + highImagePreloads: JSCompiler_object_inline_highImagePreloads_1689, + styles: JSCompiler_object_inline_styles_1690, + bootstrapScripts: JSCompiler_object_inline_bootstrapScripts_1691, + scripts: JSCompiler_object_inline_scripts_1692, + bulkPreloads: JSCompiler_object_inline_bulkPreloads_1693, + preloads: JSCompiler_object_inline_preloads_1694, + nonce: { script: void 0, style: void 0 }, + stylesToHoist: !1, + generateStaticMarkup: generateStaticMarkup + }; +} +function pushTextInstance(target, text, renderState, textEmbedded) { + if (renderState.generateStaticMarkup) + return target.push(escapeTextForBrowser(text)), !1; + "" === text + ? (target = textEmbedded) + : (textEmbedded && target.push("\x3c!-- --\x3e"), + target.push(escapeTextForBrowser(text)), + (target = !0)); + return target; +} +function pushSegmentFinale(target, renderState, lastPushedText, textEmbedded) { + renderState.generateStaticMarkup || + (lastPushedText && textEmbedded && target.push("\x3c!-- --\x3e")); +} +var bind = Function.prototype.bind, + REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"); +function getComponentNameFromType(type) { + if (null == type) return null; + if ("function" === typeof type) + return type.$$typeof === REACT_CLIENT_REFERENCE + ? null + : type.displayName || type.name || null; + if ("string" === typeof type) return type; + switch (type) { + case REACT_FRAGMENT_TYPE: + return "Fragment"; + case REACT_PROFILER_TYPE: + return "Profiler"; + case REACT_STRICT_MODE_TYPE: + return "StrictMode"; + case REACT_SUSPENSE_TYPE: + return "Suspense"; + case REACT_SUSPENSE_LIST_TYPE: + return "SuspenseList"; + case REACT_ACTIVITY_TYPE: + return "Activity"; + } + if ("object" === typeof type) + switch (type.$$typeof) { + case REACT_PORTAL_TYPE: + return "Portal"; + case REACT_CONTEXT_TYPE: + return type.displayName || "Context"; + case REACT_CONSUMER_TYPE: + return (type._context.displayName || "Context") + ".Consumer"; + case REACT_FORWARD_REF_TYPE: + var innerType = type.render; + type = type.displayName; + type || + ((type = innerType.displayName || innerType.name || ""), + (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef")); + return type; + case REACT_MEMO_TYPE: + return ( + (innerType = type.displayName || null), + null !== innerType + ? innerType + : getComponentNameFromType(type.type) || "Memo" + ); + case REACT_LAZY_TYPE: + innerType = type._payload; + type = type._init; + try { + return getComponentNameFromType(type(innerType)); + } catch (x) {} + } + return null; +} +var emptyContextObject = {}, + currentActiveSnapshot = null; +function popToNearestCommonAncestor(prev, next) { + if (prev !== next) { + prev.context._currentValue2 = prev.parentValue; + prev = prev.parent; + var parentNext = next.parent; + if (null === prev) { + if (null !== parentNext) + throw Error( + "The stacks must reach the root at the same time. This is a bug in React." + ); + } else { + if (null === parentNext) + throw Error( + "The stacks must reach the root at the same time. This is a bug in React." + ); + popToNearestCommonAncestor(prev, parentNext); + } + next.context._currentValue2 = next.value; + } +} +function popAllPrevious(prev) { + prev.context._currentValue2 = prev.parentValue; + prev = prev.parent; + null !== prev && popAllPrevious(prev); +} +function pushAllNext(next) { + var parentNext = next.parent; + null !== parentNext && pushAllNext(parentNext); + next.context._currentValue2 = next.value; +} +function popPreviousToCommonLevel(prev, next) { + prev.context._currentValue2 = prev.parentValue; + prev = prev.parent; + if (null === prev) + throw Error( + "The depth must equal at least at zero before reaching the root. This is a bug in React." + ); + prev.depth === next.depth + ? popToNearestCommonAncestor(prev, next) + : popPreviousToCommonLevel(prev, next); +} +function popNextToCommonLevel(prev, next) { + var parentNext = next.parent; + if (null === parentNext) + throw Error( + "The depth must equal at least at zero before reaching the root. This is a bug in React." + ); + prev.depth === parentNext.depth + ? popToNearestCommonAncestor(prev, parentNext) + : popNextToCommonLevel(prev, parentNext); + next.context._currentValue2 = next.value; +} +function switchContext(newSnapshot) { + var prev = currentActiveSnapshot; + prev !== newSnapshot && + (null === prev + ? pushAllNext(newSnapshot) + : null === newSnapshot + ? popAllPrevious(prev) + : prev.depth === newSnapshot.depth + ? popToNearestCommonAncestor(prev, newSnapshot) + : prev.depth > newSnapshot.depth + ? popPreviousToCommonLevel(prev, newSnapshot) + : popNextToCommonLevel(prev, newSnapshot), + (currentActiveSnapshot = newSnapshot)); +} +var classComponentUpdater = { + enqueueSetState: function (inst, payload) { + inst = inst._reactInternals; + null !== inst.queue && inst.queue.push(payload); + }, + enqueueReplaceState: function (inst, payload) { + inst = inst._reactInternals; + inst.replace = !0; + inst.queue = [payload]; + }, + enqueueForceUpdate: function () {} + }, + emptyTreeContext = { id: 1, overflow: "" }; +function pushTreeContext(baseContext, totalChildren, index) { + var baseIdWithLeadingBit = baseContext.id; + baseContext = baseContext.overflow; + var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1; + baseIdWithLeadingBit &= ~(1 << baseLength); + index += 1; + var length = 32 - clz32(totalChildren) + baseLength; + if (30 < length) { + var numberOfOverflowBits = baseLength - (baseLength % 5); + length = ( + baseIdWithLeadingBit & + ((1 << numberOfOverflowBits) - 1) + ).toString(32); + baseIdWithLeadingBit >>= numberOfOverflowBits; + baseLength -= numberOfOverflowBits; + return { + id: + (1 << (32 - clz32(totalChildren) + baseLength)) | + (index << baseLength) | + baseIdWithLeadingBit, + overflow: length + baseContext + }; + } + return { + id: (1 << length) | (index << baseLength) | baseIdWithLeadingBit, + overflow: baseContext + }; +} +var clz32 = Math.clz32 ? Math.clz32 : clz32Fallback, + log = Math.log, + LN2 = Math.LN2; +function clz32Fallback(x) { + x >>>= 0; + return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0; +} +function noop() {} +var SuspenseException = Error( + "Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`." +); +function trackUsedThenable(thenableState, thenable, index) { + index = thenableState[index]; + void 0 === index + ? thenableState.push(thenable) + : index !== thenable && (thenable.then(noop, noop), (thenable = index)); + switch (thenable.status) { + case "fulfilled": + return thenable.value; + case "rejected": + throw thenable.reason; + default: + "string" === typeof thenable.status + ? thenable.then(noop, noop) + : ((thenableState = thenable), + (thenableState.status = "pending"), + thenableState.then( + function (fulfilledValue) { + if ("pending" === thenable.status) { + var fulfilledThenable = thenable; + fulfilledThenable.status = "fulfilled"; + fulfilledThenable.value = fulfilledValue; + } + }, + function (error) { + if ("pending" === thenable.status) { + var rejectedThenable = thenable; + rejectedThenable.status = "rejected"; + rejectedThenable.reason = error; + } + } + )); + switch (thenable.status) { + case "fulfilled": + return thenable.value; + case "rejected": + throw thenable.reason; + } + suspendedThenable = thenable; + throw SuspenseException; + } +} +var suspendedThenable = null; +function getSuspendedThenable() { + if (null === suspendedThenable) + throw Error( + "Expected a suspended thenable. This is a bug in React. Please file an issue." + ); + var thenable = suspendedThenable; + suspendedThenable = null; + return thenable; +} +function is(x, y) { + return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y); +} +var objectIs = "function" === typeof Object.is ? Object.is : is, + currentlyRenderingComponent = null, + currentlyRenderingTask = null, + currentlyRenderingRequest = null, + currentlyRenderingKeyPath = null, + firstWorkInProgressHook = null, + workInProgressHook = null, + isReRender = !1, + didScheduleRenderPhaseUpdate = !1, + localIdCounter = 0, + actionStateCounter = 0, + actionStateMatchingIndex = -1, + thenableIndexCounter = 0, + thenableState = null, + renderPhaseUpdates = null, + numberOfReRenders = 0; +function resolveCurrentlyRenderingComponent() { + if (null === currentlyRenderingComponent) + throw Error( + "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem." + ); + return currentlyRenderingComponent; +} +function createHook() { + if (0 < numberOfReRenders) + throw Error("Rendered more hooks than during the previous render"); + return { memoizedState: null, queue: null, next: null }; +} +function createWorkInProgressHook() { + null === workInProgressHook + ? null === firstWorkInProgressHook + ? ((isReRender = !1), + (firstWorkInProgressHook = workInProgressHook = createHook())) + : ((isReRender = !0), (workInProgressHook = firstWorkInProgressHook)) + : null === workInProgressHook.next + ? ((isReRender = !1), + (workInProgressHook = workInProgressHook.next = createHook())) + : ((isReRender = !0), (workInProgressHook = workInProgressHook.next)); + return workInProgressHook; +} +function getThenableStateAfterSuspending() { + var state = thenableState; + thenableState = null; + return state; +} +function resetHooksState() { + currentlyRenderingKeyPath = + currentlyRenderingRequest = + currentlyRenderingTask = + currentlyRenderingComponent = + null; + didScheduleRenderPhaseUpdate = !1; + firstWorkInProgressHook = null; + numberOfReRenders = 0; + workInProgressHook = renderPhaseUpdates = null; +} +function basicStateReducer(state, action) { + return "function" === typeof action ? action(state) : action; +} +function useReducer(reducer, initialArg, init) { + currentlyRenderingComponent = resolveCurrentlyRenderingComponent(); + workInProgressHook = createWorkInProgressHook(); + if (isReRender) { + var queue = workInProgressHook.queue; + initialArg = queue.dispatch; + if ( + null !== renderPhaseUpdates && + ((init = renderPhaseUpdates.get(queue)), void 0 !== init) + ) { + renderPhaseUpdates.delete(queue); + queue = workInProgressHook.memoizedState; + do (queue = reducer(queue, init.action)), (init = init.next); + while (null !== init); + workInProgressHook.memoizedState = queue; + return [queue, initialArg]; + } + return [workInProgressHook.memoizedState, initialArg]; + } + reducer = + reducer === basicStateReducer + ? "function" === typeof initialArg + ? initialArg() + : initialArg + : void 0 !== init + ? init(initialArg) + : initialArg; + workInProgressHook.memoizedState = reducer; + reducer = workInProgressHook.queue = { last: null, dispatch: null }; + reducer = reducer.dispatch = dispatchAction.bind( + null, + currentlyRenderingComponent, + reducer + ); + return [workInProgressHook.memoizedState, reducer]; +} +function useMemo(nextCreate, deps) { + currentlyRenderingComponent = resolveCurrentlyRenderingComponent(); + workInProgressHook = createWorkInProgressHook(); + deps = void 0 === deps ? null : deps; + if (null !== workInProgressHook) { + var prevState = workInProgressHook.memoizedState; + if (null !== prevState && null !== deps) { + var prevDeps = prevState[1]; + a: if (null === prevDeps) prevDeps = !1; + else { + for (var i = 0; i < prevDeps.length && i < deps.length; i++) + if (!objectIs(deps[i], prevDeps[i])) { + prevDeps = !1; + break a; + } + prevDeps = !0; + } + if (prevDeps) return prevState[0]; + } + } + nextCreate = nextCreate(); + workInProgressHook.memoizedState = [nextCreate, deps]; + return nextCreate; +} +function dispatchAction(componentIdentity, queue, action) { + if (25 <= numberOfReRenders) + throw Error( + "Too many re-renders. React limits the number of renders to prevent an infinite loop." + ); + if (componentIdentity === currentlyRenderingComponent) + if ( + ((didScheduleRenderPhaseUpdate = !0), + (componentIdentity = { action: action, next: null }), + null === renderPhaseUpdates && (renderPhaseUpdates = new Map()), + (action = renderPhaseUpdates.get(queue)), + void 0 === action) + ) + renderPhaseUpdates.set(queue, componentIdentity); + else { + for (queue = action; null !== queue.next; ) queue = queue.next; + queue.next = componentIdentity; + } +} +function throwOnUseEffectEventCall() { + throw Error( + "A function wrapped in useEffectEvent can't be called during rendering." + ); +} +function unsupportedStartTransition() { + throw Error("startTransition cannot be called during server rendering."); +} +function unsupportedSetOptimisticState() { + throw Error("Cannot update optimistic state while rendering."); +} +function useActionState(action, initialState, permalink) { + resolveCurrentlyRenderingComponent(); + var actionStateHookIndex = actionStateCounter++, + request = currentlyRenderingRequest; + if ("function" === typeof action.$$FORM_ACTION) { + var nextPostbackStateKey = null, + componentKeyPath = currentlyRenderingKeyPath; + request = request.formState; + var isSignatureEqual = action.$$IS_SIGNATURE_EQUAL; + if (null !== request && "function" === typeof isSignatureEqual) { + var postbackKey = request[1]; + isSignatureEqual.call(action, request[2], request[3]) && + ((nextPostbackStateKey = + void 0 !== permalink + ? "p" + permalink + : "k" + + murmurhash3_32_gc( + JSON.stringify([componentKeyPath, null, actionStateHookIndex]), + 0 + )), + postbackKey === nextPostbackStateKey && + ((actionStateMatchingIndex = actionStateHookIndex), + (initialState = request[0]))); + } + var boundAction = action.bind(null, initialState); + action = function (payload) { + boundAction(payload); + }; + "function" === typeof boundAction.$$FORM_ACTION && + (action.$$FORM_ACTION = function (prefix) { + prefix = boundAction.$$FORM_ACTION(prefix); + void 0 !== permalink && + ((permalink += ""), (prefix.action = permalink)); + var formData = prefix.data; + formData && + (null === nextPostbackStateKey && + (nextPostbackStateKey = + void 0 !== permalink + ? "p" + permalink + : "k" + + murmurhash3_32_gc( + JSON.stringify([ + componentKeyPath, + null, + actionStateHookIndex + ]), + 0 + )), + formData.append("$ACTION_KEY", nextPostbackStateKey)); + return prefix; + }); + return [initialState, action, !1]; + } + var boundAction$22 = action.bind(null, initialState); + return [ + initialState, + function (payload) { + boundAction$22(payload); + }, + !1 + ]; +} +function unwrapThenable(thenable) { + var index = thenableIndexCounter; + thenableIndexCounter += 1; + null === thenableState && (thenableState = []); + return trackUsedThenable(thenableState, thenable, index); +} +function unsupportedRefresh() { + throw Error("Cache cannot be refreshed during server rendering."); +} +var HooksDispatcher = { + readContext: function (context) { + return context._currentValue2; + }, + use: function (usable) { + if (null !== usable && "object" === typeof usable) { + if ("function" === typeof usable.then) return unwrapThenable(usable); + if (usable.$$typeof === REACT_CONTEXT_TYPE) + return usable._currentValue2; + } + throw Error("An unsupported type was passed to use(): " + String(usable)); + }, + useContext: function (context) { + resolveCurrentlyRenderingComponent(); + return context._currentValue2; + }, + useMemo: useMemo, + useReducer: useReducer, + useRef: function (initialValue) { + currentlyRenderingComponent = resolveCurrentlyRenderingComponent(); + workInProgressHook = createWorkInProgressHook(); + var previousRef = workInProgressHook.memoizedState; + return null === previousRef + ? ((initialValue = { current: initialValue }), + (workInProgressHook.memoizedState = initialValue)) + : previousRef; + }, + useState: function (initialState) { + return useReducer(basicStateReducer, initialState); + }, + useInsertionEffect: noop, + useLayoutEffect: noop, + useCallback: function (callback, deps) { + return useMemo(function () { + return callback; + }, deps); + }, + useImperativeHandle: noop, + useEffect: noop, + useDebugValue: noop, + useDeferredValue: function (value, initialValue) { + resolveCurrentlyRenderingComponent(); + return void 0 !== initialValue ? initialValue : value; + }, + useTransition: function () { + resolveCurrentlyRenderingComponent(); + return [!1, unsupportedStartTransition]; + }, + useId: function () { + var JSCompiler_inline_result = currentlyRenderingTask.treeContext; + var overflow = JSCompiler_inline_result.overflow; + JSCompiler_inline_result = JSCompiler_inline_result.id; + JSCompiler_inline_result = + ( + JSCompiler_inline_result & + ~(1 << (32 - clz32(JSCompiler_inline_result) - 1)) + ).toString(32) + overflow; + var resumableState = currentResumableState; + if (null === resumableState) + throw Error( + "Invalid hook call. Hooks can only be called inside of the body of a function component." + ); + overflow = localIdCounter++; + JSCompiler_inline_result = + "_" + resumableState.idPrefix + "R_" + JSCompiler_inline_result; + 0 < overflow && (JSCompiler_inline_result += "H" + overflow.toString(32)); + return JSCompiler_inline_result + "_"; + }, + useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) { + if (void 0 === getServerSnapshot) + throw Error( + "Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering." + ); + return getServerSnapshot(); + }, + useOptimistic: function (passthrough) { + resolveCurrentlyRenderingComponent(); + return [passthrough, unsupportedSetOptimisticState]; + }, + useActionState: useActionState, + useFormState: useActionState, + useHostTransitionStatus: function () { + resolveCurrentlyRenderingComponent(); + return sharedNotPendingObject; + }, + useMemoCache: function (size) { + for (var data = Array(size), i = 0; i < size; i++) + data[i] = REACT_MEMO_CACHE_SENTINEL; + return data; + }, + useCacheRefresh: function () { + return unsupportedRefresh; + }, + useEffectEvent: function () { + return throwOnUseEffectEventCall; + } + }, + currentResumableState = null, + DefaultAsyncDispatcher = { + getCacheForType: function () { + throw Error("Not implemented."); + }, + cacheSignal: function () { + throw Error("Not implemented."); + } + }, + prefix, + suffix; +function describeBuiltInComponentFrame(name) { + if (void 0 === prefix) + try { + throw Error(); + } catch (x) { + var match = x.stack.trim().match(/\n( *(at )?)/); + prefix = (match && match[1]) || ""; + suffix = + -1 < x.stack.indexOf("\n at") + ? " (<anonymous>)" + : -1 < x.stack.indexOf("@") + ? "@unknown:0:0" + : ""; + } + return "\n" + prefix + name + suffix; +} +var reentry = !1; +function describeNativeComponentFrame(fn, construct) { + if (!fn || reentry) return ""; + reentry = !0; + var previousPrepareStackTrace = Error.prepareStackTrace; + Error.prepareStackTrace = void 0; + try { + var RunInRootFrame = { + DetermineComponentFrameRoot: function () { + try { + if (construct) { + var Fake = function () { + throw Error(); + }; + Object.defineProperty(Fake.prototype, "props", { + set: function () { + throw Error(); + } + }); + if ("object" === typeof Reflect && Reflect.construct) { + try { + Reflect.construct(Fake, []); + } catch (x) { + var control = x; + } + Reflect.construct(fn, [], Fake); + } else { + try { + Fake.call(); + } catch (x$24) { + control = x$24; + } + fn.call(Fake.prototype); + } + } else { + try { + throw Error(); + } catch (x$25) { + control = x$25; + } + (Fake = fn()) && + "function" === typeof Fake.catch && + Fake.catch(function () {}); + } + } catch (sample) { + if (sample && control && "string" === typeof sample.stack) + return [sample.stack, control.stack]; + } + return [null, null]; + } + }; + RunInRootFrame.DetermineComponentFrameRoot.displayName = + "DetermineComponentFrameRoot"; + var namePropDescriptor = Object.getOwnPropertyDescriptor( + RunInRootFrame.DetermineComponentFrameRoot, + "name" + ); + namePropDescriptor && + namePropDescriptor.configurable && + Object.defineProperty( + RunInRootFrame.DetermineComponentFrameRoot, + "name", + { value: "DetermineComponentFrameRoot" } + ); + var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(), + sampleStack = _RunInRootFrame$Deter[0], + controlStack = _RunInRootFrame$Deter[1]; + if (sampleStack && controlStack) { + var sampleLines = sampleStack.split("\n"), + controlLines = controlStack.split("\n"); + for ( + namePropDescriptor = RunInRootFrame = 0; + RunInRootFrame < sampleLines.length && + !sampleLines[RunInRootFrame].includes("DetermineComponentFrameRoot"); + + ) + RunInRootFrame++; + for ( + ; + namePropDescriptor < controlLines.length && + !controlLines[namePropDescriptor].includes( + "DetermineComponentFrameRoot" + ); + + ) + namePropDescriptor++; + if ( + RunInRootFrame === sampleLines.length || + namePropDescriptor === controlLines.length + ) + for ( + RunInRootFrame = sampleLines.length - 1, + namePropDescriptor = controlLines.length - 1; + 1 <= RunInRootFrame && + 0 <= namePropDescriptor && + sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]; + + ) + namePropDescriptor--; + for ( + ; + 1 <= RunInRootFrame && 0 <= namePropDescriptor; + RunInRootFrame--, namePropDescriptor-- + ) + if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) { + if (1 !== RunInRootFrame || 1 !== namePropDescriptor) { + do + if ( + (RunInRootFrame--, + namePropDescriptor--, + 0 > namePropDescriptor || + sampleLines[RunInRootFrame] !== + controlLines[namePropDescriptor]) + ) { + var frame = + "\n" + + sampleLines[RunInRootFrame].replace(" at new ", " at "); + fn.displayName && + frame.includes("<anonymous>") && + (frame = frame.replace("<anonymous>", fn.displayName)); + return frame; + } + while (1 <= RunInRootFrame && 0 <= namePropDescriptor); + } + break; + } + } + } finally { + (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace); + } + return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : "") + ? describeBuiltInComponentFrame(previousPrepareStackTrace) + : ""; +} +function describeComponentStackByType(type) { + if ("string" === typeof type) return describeBuiltInComponentFrame(type); + if ("function" === typeof type) + return type.prototype && type.prototype.isReactComponent + ? describeNativeComponentFrame(type, !0) + : describeNativeComponentFrame(type, !1); + if ("object" === typeof type && null !== type) { + switch (type.$$typeof) { + case REACT_FORWARD_REF_TYPE: + return describeNativeComponentFrame(type.render, !1); + case REACT_MEMO_TYPE: + return describeNativeComponentFrame(type.type, !1); + case REACT_LAZY_TYPE: + var lazyComponent = type, + payload = lazyComponent._payload; + lazyComponent = lazyComponent._init; + try { + type = lazyComponent(payload); + } catch (x) { + return describeBuiltInComponentFrame("Lazy"); + } + return describeComponentStackByType(type); + } + if ("string" === typeof type.name) { + a: { + payload = type.name; + lazyComponent = type.env; + var location = type.debugLocation; + if ( + null != location && + ((type = Error.prepareStackTrace), + (Error.prepareStackTrace = void 0), + (location = location.stack), + (Error.prepareStackTrace = type), + location.startsWith("Error: react-stack-top-frame\n") && + (location = location.slice(29)), + (type = location.indexOf("\n")), + -1 !== type && (location = location.slice(type + 1)), + (type = location.indexOf("react_stack_bottom_frame")), + -1 !== type && (type = location.lastIndexOf("\n", type)), + (type = -1 !== type ? (location = location.slice(0, type)) : ""), + (location = type.lastIndexOf("\n")), + (type = -1 === location ? type : type.slice(location + 1)), + -1 !== type.indexOf(payload)) + ) { + payload = "\n" + type; + break a; + } + payload = describeBuiltInComponentFrame( + payload + (lazyComponent ? " [" + lazyComponent + "]" : "") + ); + } + return payload; + } + } + switch (type) { + case REACT_SUSPENSE_LIST_TYPE: + return describeBuiltInComponentFrame("SuspenseList"); + case REACT_SUSPENSE_TYPE: + return describeBuiltInComponentFrame("Suspense"); + } + return ""; +} +function isEligibleForOutlining(request, boundary) { + return (500 < boundary.byteSize || !1) && null === boundary.contentPreamble; +} +function defaultErrorHandler(error) { + if ( + "object" === typeof error && + null !== error && + "string" === typeof error.environmentName + ) { + var JSCompiler_inline_result = error.environmentName; + error = [error].slice(0); + "string" === typeof error[0] + ? error.splice( + 0, + 1, + "[%s] " + error[0], + " " + JSCompiler_inline_result + " " + ) + : error.splice(0, 0, "[%s]", " " + JSCompiler_inline_result + " "); + error.unshift(console); + JSCompiler_inline_result = bind.apply(console.error, error); + JSCompiler_inline_result(); + } else console.error(error); + return null; +} +function RequestInstance( + resumableState, + renderState, + rootFormatContext, + progressiveChunkSize, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone, + formState +) { + var abortSet = new Set(); + this.destination = null; + this.flushScheduled = !1; + this.resumableState = resumableState; + this.renderState = renderState; + this.rootFormatContext = rootFormatContext; + this.progressiveChunkSize = + void 0 === progressiveChunkSize ? 12800 : progressiveChunkSize; + this.status = 10; + this.fatalError = null; + this.pendingRootTasks = this.allPendingTasks = this.nextSegmentId = 0; + this.completedPreambleSegments = this.completedRootSegment = null; + this.byteSize = 0; + this.abortableTasks = abortSet; + this.pingedTasks = []; + this.clientRenderedBoundaries = []; + this.completedBoundaries = []; + this.partialBoundaries = []; + this.trackedPostpones = null; + this.onError = void 0 === onError ? defaultErrorHandler : onError; + this.onPostpone = void 0 === onPostpone ? noop : onPostpone; + this.onAllReady = void 0 === onAllReady ? noop : onAllReady; + this.onShellReady = void 0 === onShellReady ? noop : onShellReady; + this.onShellError = void 0 === onShellError ? noop : onShellError; + this.onFatalError = void 0 === onFatalError ? noop : onFatalError; + this.formState = void 0 === formState ? null : formState; +} +function createRequest( + children, + resumableState, + renderState, + rootFormatContext, + progressiveChunkSize, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone, + formState +) { + resumableState = new RequestInstance( + resumableState, + renderState, + rootFormatContext, + progressiveChunkSize, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone, + formState + ); + renderState = createPendingSegment( + resumableState, + 0, + null, + rootFormatContext, + !1, + !1 + ); + renderState.parentFlushed = !0; + children = createRenderTask( + resumableState, + null, + children, + -1, + null, + renderState, + null, + null, + resumableState.abortableTasks, + null, + rootFormatContext, + null, + emptyTreeContext, + null, + null + ); + pushComponentStack(children); + resumableState.pingedTasks.push(children); + return resumableState; +} +var currentRequest = null; +function pingTask(request, task) { + request.pingedTasks.push(task); + 1 === request.pingedTasks.length && + ((request.flushScheduled = null !== request.destination), + performWork(request)); +} +function createSuspenseBoundary( + request, + row, + fallbackAbortableTasks, + contentPreamble, + fallbackPreamble +) { + fallbackAbortableTasks = { + status: 0, + rootSegmentID: -1, + parentFlushed: !1, + pendingTasks: 0, + row: row, + completedSegments: [], + byteSize: 0, + fallbackAbortableTasks: fallbackAbortableTasks, + errorDigest: null, + contentState: createHoistableState(), + fallbackState: createHoistableState(), + contentPreamble: contentPreamble, + fallbackPreamble: fallbackPreamble, + trackedContentKeyPath: null, + trackedFallbackNode: null + }; + null !== row && + (row.pendingTasks++, + (contentPreamble = row.boundaries), + null !== contentPreamble && + (request.allPendingTasks++, + fallbackAbortableTasks.pendingTasks++, + contentPreamble.push(fallbackAbortableTasks)), + (request = row.inheritedHoistables), + null !== request && + hoistHoistables(fallbackAbortableTasks.contentState, request)); + return fallbackAbortableTasks; +} +function createRenderTask( + request, + thenableState, + node, + childIndex, + blockedBoundary, + blockedSegment, + blockedPreamble, + hoistableState, + abortSet, + keyPath, + formatContext, + context, + treeContext, + row, + componentStack +) { + request.allPendingTasks++; + null === blockedBoundary + ? request.pendingRootTasks++ + : blockedBoundary.pendingTasks++; + null !== row && row.pendingTasks++; + var task = { + replay: null, + node: node, + childIndex: childIndex, + ping: function () { + return pingTask(request, task); + }, + blockedBoundary: blockedBoundary, + blockedSegment: blockedSegment, + blockedPreamble: blockedPreamble, + hoistableState: hoistableState, + abortSet: abortSet, + keyPath: keyPath, + formatContext: formatContext, + context: context, + treeContext: treeContext, + row: row, + componentStack: componentStack, + thenableState: thenableState + }; + abortSet.add(task); + return task; +} +function createReplayTask( + request, + thenableState, + replay, + node, + childIndex, + blockedBoundary, + hoistableState, + abortSet, + keyPath, + formatContext, + context, + treeContext, + row, + componentStack +) { + request.allPendingTasks++; + null === blockedBoundary + ? request.pendingRootTasks++ + : blockedBoundary.pendingTasks++; + null !== row && row.pendingTasks++; + replay.pendingTasks++; + var task = { + replay: replay, + node: node, + childIndex: childIndex, + ping: function () { + return pingTask(request, task); + }, + blockedBoundary: blockedBoundary, + blockedSegment: null, + blockedPreamble: null, + hoistableState: hoistableState, + abortSet: abortSet, + keyPath: keyPath, + formatContext: formatContext, + context: context, + treeContext: treeContext, + row: row, + componentStack: componentStack, + thenableState: thenableState + }; + abortSet.add(task); + return task; +} +function createPendingSegment( + request, + index, + boundary, + parentFormatContext, + lastPushedText, + textEmbedded +) { + return { + status: 0, + parentFlushed: !1, + id: -1, + index: index, + chunks: [], + children: [], + preambleChildren: [], + parentFormatContext: parentFormatContext, + boundary: boundary, + lastPushedText: lastPushedText, + textEmbedded: textEmbedded + }; +} +function pushComponentStack(task) { + var node = task.node; + if ("object" === typeof node && null !== node) + switch (node.$$typeof) { + case REACT_ELEMENT_TYPE: + task.componentStack = { parent: task.componentStack, type: node.type }; + } +} +function replaceSuspenseComponentStackWithSuspenseFallbackStack( + componentStack +) { + return null === componentStack + ? null + : { parent: componentStack.parent, type: "Suspense Fallback" }; +} +function getThrownInfo(node$jscomp$0) { + var errorInfo = {}; + node$jscomp$0 && + Object.defineProperty(errorInfo, "componentStack", { + configurable: !0, + enumerable: !0, + get: function () { + try { + var info = "", + node = node$jscomp$0; + do + (info += describeComponentStackByType(node.type)), + (node = node.parent); + while (node); + var JSCompiler_inline_result = info; + } catch (x) { + JSCompiler_inline_result = + "\nError generating stack: " + x.message + "\n" + x.stack; + } + Object.defineProperty(errorInfo, "componentStack", { + value: JSCompiler_inline_result + }); + return JSCompiler_inline_result; + } + }); + return errorInfo; +} +function logRecoverableError(request, error, errorInfo) { + request = request.onError; + error = request(error, errorInfo); + if (null == error || "string" === typeof error) return error; +} +function fatalError(request, error) { + var onShellError = request.onShellError, + onFatalError = request.onFatalError; + onShellError(error); + onFatalError(error); + null !== request.destination + ? ((request.status = 14), request.destination.destroy(error)) + : ((request.status = 13), (request.fatalError = error)); +} +function finishSuspenseListRow(request, row) { + unblockSuspenseListRow(request, row.next, row.hoistables); +} +function unblockSuspenseListRow(request, unblockedRow, inheritedHoistables) { + for (; null !== unblockedRow; ) { + null !== inheritedHoistables && + (hoistHoistables(unblockedRow.hoistables, inheritedHoistables), + (unblockedRow.inheritedHoistables = inheritedHoistables)); + var unblockedBoundaries = unblockedRow.boundaries; + if (null !== unblockedBoundaries) { + unblockedRow.boundaries = null; + for (var i = 0; i < unblockedBoundaries.length; i++) { + var unblockedBoundary = unblockedBoundaries[i]; + null !== inheritedHoistables && + hoistHoistables(unblockedBoundary.contentState, inheritedHoistables); + finishedTask(request, unblockedBoundary, null, null); + } + } + unblockedRow.pendingTasks--; + if (0 < unblockedRow.pendingTasks) break; + inheritedHoistables = unblockedRow.hoistables; + unblockedRow = unblockedRow.next; + } +} +function tryToResolveTogetherRow(request, togetherRow) { + var boundaries = togetherRow.boundaries; + if (null !== boundaries && togetherRow.pendingTasks === boundaries.length) { + for (var allCompleteAndInlinable = !0, i = 0; i < boundaries.length; i++) { + var rowBoundary = boundaries[i]; + if ( + 1 !== rowBoundary.pendingTasks || + rowBoundary.parentFlushed || + isEligibleForOutlining(request, rowBoundary) + ) { + allCompleteAndInlinable = !1; + break; + } + } + allCompleteAndInlinable && + unblockSuspenseListRow(request, togetherRow, togetherRow.hoistables); + } +} +function createSuspenseListRow(previousRow) { + var newRow = { + pendingTasks: 1, + boundaries: null, + hoistables: createHoistableState(), + inheritedHoistables: null, + together: !1, + next: null + }; + null !== previousRow && + 0 < previousRow.pendingTasks && + (newRow.pendingTasks++, + (newRow.boundaries = []), + (previousRow.next = newRow)); + return newRow; +} +function renderSuspenseListRows(request, task, keyPath, rows, revealOrder) { + var prevKeyPath = task.keyPath, + prevTreeContext = task.treeContext, + prevRow = task.row; + task.keyPath = keyPath; + keyPath = rows.length; + var previousSuspenseListRow = null; + if (null !== task.replay) { + var resumeSlots = task.replay.slots; + if (null !== resumeSlots && "object" === typeof resumeSlots) + for (var n = 0; n < keyPath; n++) { + var i = + "backwards" !== revealOrder && + "unstable_legacy-backwards" !== revealOrder + ? n + : keyPath - 1 - n, + node = rows[i]; + task.row = previousSuspenseListRow = createSuspenseListRow( + previousSuspenseListRow + ); + task.treeContext = pushTreeContext(prevTreeContext, keyPath, i); + var resumeSegmentID = resumeSlots[i]; + "number" === typeof resumeSegmentID + ? (resumeNode(request, task, resumeSegmentID, node, i), + delete resumeSlots[i]) + : renderNode(request, task, node, i); + 0 === --previousSuspenseListRow.pendingTasks && + finishSuspenseListRow(request, previousSuspenseListRow); + } + else + for (resumeSlots = 0; resumeSlots < keyPath; resumeSlots++) + (n = + "backwards" !== revealOrder && + "unstable_legacy-backwards" !== revealOrder + ? resumeSlots + : keyPath - 1 - resumeSlots), + (i = rows[n]), + (task.row = previousSuspenseListRow = + createSuspenseListRow(previousSuspenseListRow)), + (task.treeContext = pushTreeContext(prevTreeContext, keyPath, n)), + renderNode(request, task, i, n), + 0 === --previousSuspenseListRow.pendingTasks && + finishSuspenseListRow(request, previousSuspenseListRow); + } else if ( + "backwards" !== revealOrder && + "unstable_legacy-backwards" !== revealOrder + ) + for (revealOrder = 0; revealOrder < keyPath; revealOrder++) + (resumeSlots = rows[revealOrder]), + (task.row = previousSuspenseListRow = + createSuspenseListRow(previousSuspenseListRow)), + (task.treeContext = pushTreeContext( + prevTreeContext, + keyPath, + revealOrder + )), + renderNode(request, task, resumeSlots, revealOrder), + 0 === --previousSuspenseListRow.pendingTasks && + finishSuspenseListRow(request, previousSuspenseListRow); + else { + revealOrder = task.blockedSegment; + resumeSlots = revealOrder.children.length; + n = revealOrder.chunks.length; + for (i = keyPath - 1; 0 <= i; i--) { + node = rows[i]; + task.row = previousSuspenseListRow = createSuspenseListRow( + previousSuspenseListRow + ); + task.treeContext = pushTreeContext(prevTreeContext, keyPath, i); + resumeSegmentID = createPendingSegment( + request, + n, + null, + task.formatContext, + 0 === i ? revealOrder.lastPushedText : !0, + !0 + ); + revealOrder.children.splice(resumeSlots, 0, resumeSegmentID); + task.blockedSegment = resumeSegmentID; + try { + renderNode(request, task, node, i), + pushSegmentFinale( + resumeSegmentID.chunks, + request.renderState, + resumeSegmentID.lastPushedText, + resumeSegmentID.textEmbedded + ), + (resumeSegmentID.status = 1), + 0 === --previousSuspenseListRow.pendingTasks && + finishSuspenseListRow(request, previousSuspenseListRow); + } catch (thrownValue) { + throw ( + ((resumeSegmentID.status = 12 === request.status ? 3 : 4), + thrownValue) + ); + } + } + task.blockedSegment = revealOrder; + revealOrder.lastPushedText = !1; + } + null !== prevRow && + null !== previousSuspenseListRow && + 0 < previousSuspenseListRow.pendingTasks && + (prevRow.pendingTasks++, (previousSuspenseListRow.next = prevRow)); + task.treeContext = prevTreeContext; + task.row = prevRow; + task.keyPath = prevKeyPath; +} +function renderWithHooks(request, task, keyPath, Component, props, secondArg) { + var prevThenableState = task.thenableState; + task.thenableState = null; + currentlyRenderingComponent = {}; + currentlyRenderingTask = task; + currentlyRenderingRequest = request; + currentlyRenderingKeyPath = keyPath; + actionStateCounter = localIdCounter = 0; + actionStateMatchingIndex = -1; + thenableIndexCounter = 0; + thenableState = prevThenableState; + for (request = Component(props, secondArg); didScheduleRenderPhaseUpdate; ) + (didScheduleRenderPhaseUpdate = !1), + (actionStateCounter = localIdCounter = 0), + (actionStateMatchingIndex = -1), + (thenableIndexCounter = 0), + (numberOfReRenders += 1), + (workInProgressHook = null), + (request = Component(props, secondArg)); + resetHooksState(); + return request; +} +function finishFunctionComponent( + request, + task, + keyPath, + children, + hasId, + actionStateCount, + actionStateMatchingIndex +) { + var didEmitActionStateMarkers = !1; + if (0 !== actionStateCount && null !== request.formState) { + var segment = task.blockedSegment; + if (null !== segment) { + didEmitActionStateMarkers = !0; + segment = segment.chunks; + for (var i = 0; i < actionStateCount; i++) + i === actionStateMatchingIndex + ? segment.push("\x3c!--F!--\x3e") + : segment.push("\x3c!--F--\x3e"); + } + } + actionStateCount = task.keyPath; + task.keyPath = keyPath; + hasId + ? ((keyPath = task.treeContext), + (task.treeContext = pushTreeContext(keyPath, 1, 0)), + renderNode(request, task, children, -1), + (task.treeContext = keyPath)) + : didEmitActionStateMarkers + ? renderNode(request, task, children, -1) + : renderNodeDestructive(request, task, children, -1); + task.keyPath = actionStateCount; +} +function renderElement(request, task, keyPath, type, props, ref) { + if ("function" === typeof type) + if (type.prototype && type.prototype.isReactComponent) { + var newProps = props; + if ("ref" in props) { + newProps = {}; + for (var propName in props) + "ref" !== propName && (newProps[propName] = props[propName]); + } + var defaultProps = type.defaultProps; + if (defaultProps) { + newProps === props && (newProps = assign({}, newProps, props)); + for (var propName$43 in defaultProps) + void 0 === newProps[propName$43] && + (newProps[propName$43] = defaultProps[propName$43]); + } + props = newProps; + newProps = emptyContextObject; + defaultProps = type.contextType; + "object" === typeof defaultProps && + null !== defaultProps && + (newProps = defaultProps._currentValue2); + newProps = new type(props, newProps); + var initialState = void 0 !== newProps.state ? newProps.state : null; + newProps.updater = classComponentUpdater; + newProps.props = props; + newProps.state = initialState; + defaultProps = { queue: [], replace: !1 }; + newProps._reactInternals = defaultProps; + ref = type.contextType; + newProps.context = + "object" === typeof ref && null !== ref + ? ref._currentValue2 + : emptyContextObject; + ref = type.getDerivedStateFromProps; + "function" === typeof ref && + ((ref = ref(props, initialState)), + (initialState = + null === ref || void 0 === ref + ? initialState + : assign({}, initialState, ref)), + (newProps.state = initialState)); + if ( + "function" !== typeof type.getDerivedStateFromProps && + "function" !== typeof newProps.getSnapshotBeforeUpdate && + ("function" === typeof newProps.UNSAFE_componentWillMount || + "function" === typeof newProps.componentWillMount) + ) + if ( + ((type = newProps.state), + "function" === typeof newProps.componentWillMount && + newProps.componentWillMount(), + "function" === typeof newProps.UNSAFE_componentWillMount && + newProps.UNSAFE_componentWillMount(), + type !== newProps.state && + classComponentUpdater.enqueueReplaceState( + newProps, + newProps.state, + null + ), + null !== defaultProps.queue && 0 < defaultProps.queue.length) + ) + if ( + ((type = defaultProps.queue), + (ref = defaultProps.replace), + (defaultProps.queue = null), + (defaultProps.replace = !1), + ref && 1 === type.length) + ) + newProps.state = type[0]; + else { + defaultProps = ref ? type[0] : newProps.state; + initialState = !0; + for (ref = ref ? 1 : 0; ref < type.length; ref++) + (propName$43 = type[ref]), + (propName$43 = + "function" === typeof propName$43 + ? propName$43.call(newProps, defaultProps, props, void 0) + : propName$43), + null != propName$43 && + (initialState + ? ((initialState = !1), + (defaultProps = assign({}, defaultProps, propName$43))) + : assign(defaultProps, propName$43)); + newProps.state = defaultProps; + } + else defaultProps.queue = null; + type = newProps.render(); + if (12 === request.status) throw null; + props = task.keyPath; + task.keyPath = keyPath; + renderNodeDestructive(request, task, type, -1); + task.keyPath = props; + } else { + type = renderWithHooks(request, task, keyPath, type, props, void 0); + if (12 === request.status) throw null; + finishFunctionComponent( + request, + task, + keyPath, + type, + 0 !== localIdCounter, + actionStateCounter, + actionStateMatchingIndex + ); + } + else if ("string" === typeof type) + if (((newProps = task.blockedSegment), null === newProps)) + (newProps = props.children), + (defaultProps = task.formatContext), + (initialState = task.keyPath), + (task.formatContext = getChildFormatContext(defaultProps, type, props)), + (task.keyPath = keyPath), + renderNode(request, task, newProps, -1), + (task.formatContext = defaultProps), + (task.keyPath = initialState); + else { + initialState = pushStartInstance( + newProps.chunks, + type, + props, + request.resumableState, + request.renderState, + task.blockedPreamble, + task.hoistableState, + task.formatContext, + newProps.lastPushedText + ); + newProps.lastPushedText = !1; + defaultProps = task.formatContext; + ref = task.keyPath; + task.keyPath = keyPath; + if ( + 3 === + (task.formatContext = getChildFormatContext(defaultProps, type, props)) + .insertionMode + ) { + keyPath = createPendingSegment( + request, + 0, + null, + task.formatContext, + !1, + !1 + ); + newProps.preambleChildren.push(keyPath); + task.blockedSegment = keyPath; + try { + (keyPath.status = 6), + renderNode(request, task, initialState, -1), + pushSegmentFinale( + keyPath.chunks, + request.renderState, + keyPath.lastPushedText, + keyPath.textEmbedded + ), + (keyPath.status = 1); + } finally { + task.blockedSegment = newProps; + } + } else renderNode(request, task, initialState, -1); + task.formatContext = defaultProps; + task.keyPath = ref; + a: { + task = newProps.chunks; + request = request.resumableState; + switch (type) { + case "title": + case "style": + case "script": + case "area": + case "base": + case "br": + case "col": + case "embed": + case "hr": + case "img": + case "input": + case "keygen": + case "link": + case "meta": + case "param": + case "source": + case "track": + case "wbr": + break a; + case "body": + if (1 >= defaultProps.insertionMode) { + request.hasBody = !0; + break a; + } + break; + case "html": + if (0 === defaultProps.insertionMode) { + request.hasHtml = !0; + break a; + } + break; + case "head": + if (1 >= defaultProps.insertionMode) break a; + } + task.push(endChunkForTag(type)); + } + newProps.lastPushedText = !1; + } + else { + switch (type) { + case REACT_LEGACY_HIDDEN_TYPE: + case REACT_STRICT_MODE_TYPE: + case REACT_PROFILER_TYPE: + case REACT_FRAGMENT_TYPE: + type = task.keyPath; + task.keyPath = keyPath; + renderNodeDestructive(request, task, props.children, -1); + task.keyPath = type; + return; + case REACT_ACTIVITY_TYPE: + type = task.blockedSegment; + null === type + ? "hidden" !== props.mode && + ((type = task.keyPath), + (task.keyPath = keyPath), + renderNode(request, task, props.children, -1), + (task.keyPath = type)) + : "hidden" !== props.mode && + (request.renderState.generateStaticMarkup || + type.chunks.push("\x3c!--&--\x3e"), + (type.lastPushedText = !1), + (newProps = task.keyPath), + (task.keyPath = keyPath), + renderNode(request, task, props.children, -1), + (task.keyPath = newProps), + request.renderState.generateStaticMarkup || + type.chunks.push("\x3c!--/&--\x3e"), + (type.lastPushedText = !1)); + return; + case REACT_SUSPENSE_LIST_TYPE: + a: { + type = props.children; + props = props.revealOrder; + if ( + "forwards" === props || + "backwards" === props || + "unstable_legacy-backwards" === props + ) { + if (isArrayImpl(type)) { + renderSuspenseListRows(request, task, keyPath, type, props); + break a; + } + if ((newProps = getIteratorFn(type))) + if ((newProps = newProps.call(type))) { + defaultProps = newProps.next(); + if (!defaultProps.done) { + do defaultProps = newProps.next(); + while (!defaultProps.done); + renderSuspenseListRows(request, task, keyPath, type, props); + } + break a; + } + } + "together" === props + ? ((props = task.keyPath), + (newProps = task.row), + (defaultProps = task.row = createSuspenseListRow(null)), + (defaultProps.boundaries = []), + (defaultProps.together = !0), + (task.keyPath = keyPath), + renderNodeDestructive(request, task, type, -1), + 0 === --defaultProps.pendingTasks && + finishSuspenseListRow(request, defaultProps), + (task.keyPath = props), + (task.row = newProps), + null !== newProps && + 0 < defaultProps.pendingTasks && + (newProps.pendingTasks++, (defaultProps.next = newProps))) + : ((props = task.keyPath), + (task.keyPath = keyPath), + renderNodeDestructive(request, task, type, -1), + (task.keyPath = props)); + } + return; + case REACT_VIEW_TRANSITION_TYPE: + case REACT_SCOPE_TYPE: + throw Error("ReactDOMServer does not yet support scope components."); + case REACT_SUSPENSE_TYPE: + a: if (null !== task.replay) { + type = task.keyPath; + newProps = task.formatContext; + defaultProps = task.row; + task.keyPath = keyPath; + task.formatContext = getSuspenseContentFormatContext( + request.resumableState, + newProps + ); + task.row = null; + keyPath = props.children; + try { + renderNode(request, task, keyPath, -1); + } finally { + (task.keyPath = type), + (task.formatContext = newProps), + (task.row = defaultProps); + } + } else { + type = task.keyPath; + ref = task.formatContext; + var prevRow = task.row, + parentBoundary = task.blockedBoundary; + propName$43 = task.blockedPreamble; + var parentHoistableState = task.hoistableState; + propName = task.blockedSegment; + var fallback = props.fallback; + props = props.children; + var fallbackAbortSet = new Set(); + var newBoundary = createSuspenseBoundary( + request, + task.row, + fallbackAbortSet, + null, + null + ); + null !== request.trackedPostpones && + (newBoundary.trackedContentKeyPath = keyPath); + var boundarySegment = createPendingSegment( + request, + propName.chunks.length, + newBoundary, + task.formatContext, + !1, + !1 + ); + propName.children.push(boundarySegment); + propName.lastPushedText = !1; + var contentRootSegment = createPendingSegment( + request, + 0, + null, + task.formatContext, + !1, + !1 + ); + contentRootSegment.parentFlushed = !0; + if (null !== request.trackedPostpones) { + newProps = task.componentStack; + defaultProps = [keyPath[0], "Suspense Fallback", keyPath[2]]; + initialState = [defaultProps[1], defaultProps[2], [], null]; + request.trackedPostpones.workingMap.set(defaultProps, initialState); + newBoundary.trackedFallbackNode = initialState; + task.blockedSegment = boundarySegment; + task.blockedPreamble = newBoundary.fallbackPreamble; + task.keyPath = defaultProps; + task.formatContext = getSuspenseFallbackFormatContext( + request.resumableState, + ref + ); + task.componentStack = + replaceSuspenseComponentStackWithSuspenseFallbackStack(newProps); + boundarySegment.status = 6; + try { + renderNode(request, task, fallback, -1), + pushSegmentFinale( + boundarySegment.chunks, + request.renderState, + boundarySegment.lastPushedText, + boundarySegment.textEmbedded + ), + (boundarySegment.status = 1); + } catch (thrownValue) { + throw ( + ((boundarySegment.status = 12 === request.status ? 3 : 4), + thrownValue) + ); + } finally { + (task.blockedSegment = propName), + (task.blockedPreamble = propName$43), + (task.keyPath = type), + (task.formatContext = ref); + } + task = createRenderTask( + request, + null, + props, + -1, + newBoundary, + contentRootSegment, + newBoundary.contentPreamble, + newBoundary.contentState, + task.abortSet, + keyPath, + getSuspenseContentFormatContext( + request.resumableState, + task.formatContext + ), + task.context, + task.treeContext, + null, + newProps + ); + pushComponentStack(task); + request.pingedTasks.push(task); + } else { + task.blockedBoundary = newBoundary; + task.blockedPreamble = newBoundary.contentPreamble; + task.hoistableState = newBoundary.contentState; + task.blockedSegment = contentRootSegment; + task.keyPath = keyPath; + task.formatContext = getSuspenseContentFormatContext( + request.resumableState, + ref + ); + task.row = null; + contentRootSegment.status = 6; + try { + if ( + (renderNode(request, task, props, -1), + pushSegmentFinale( + contentRootSegment.chunks, + request.renderState, + contentRootSegment.lastPushedText, + contentRootSegment.textEmbedded + ), + (contentRootSegment.status = 1), + queueCompletedSegment(newBoundary, contentRootSegment), + 0 === newBoundary.pendingTasks && 0 === newBoundary.status) + ) { + if ( + ((newBoundary.status = 1), + !isEligibleForOutlining(request, newBoundary)) + ) { + null !== prevRow && + 0 === --prevRow.pendingTasks && + finishSuspenseListRow(request, prevRow); + 0 === request.pendingRootTasks && + task.blockedPreamble && + preparePreamble(request); + break a; + } + } else + null !== prevRow && + prevRow.together && + tryToResolveTogetherRow(request, prevRow); + } catch (thrownValue$30) { + (newBoundary.status = 4), + 12 === request.status + ? ((contentRootSegment.status = 3), + (newProps = request.fatalError)) + : ((contentRootSegment.status = 4), + (newProps = thrownValue$30)), + (defaultProps = getThrownInfo(task.componentStack)), + (initialState = logRecoverableError( + request, + newProps, + defaultProps + )), + (newBoundary.errorDigest = initialState), + untrackBoundary(request, newBoundary); + } finally { + (task.blockedBoundary = parentBoundary), + (task.blockedPreamble = propName$43), + (task.hoistableState = parentHoistableState), + (task.blockedSegment = propName), + (task.keyPath = type), + (task.formatContext = ref), + (task.row = prevRow); + } + task = createRenderTask( + request, + null, + fallback, + -1, + parentBoundary, + boundarySegment, + newBoundary.fallbackPreamble, + newBoundary.fallbackState, + fallbackAbortSet, + [keyPath[0], "Suspense Fallback", keyPath[2]], + getSuspenseFallbackFormatContext( + request.resumableState, + task.formatContext + ), + task.context, + task.treeContext, + task.row, + replaceSuspenseComponentStackWithSuspenseFallbackStack( + task.componentStack + ) + ); + pushComponentStack(task); + request.pingedTasks.push(task); + } + } + return; + } + if ("object" === typeof type && null !== type) + switch (type.$$typeof) { + case REACT_FORWARD_REF_TYPE: + if ("ref" in props) + for (fallback in ((newProps = {}), props)) + "ref" !== fallback && (newProps[fallback] = props[fallback]); + else newProps = props; + type = renderWithHooks( + request, + task, + keyPath, + type.render, + newProps, + ref + ); + finishFunctionComponent( + request, + task, + keyPath, + type, + 0 !== localIdCounter, + actionStateCounter, + actionStateMatchingIndex + ); + return; + case REACT_MEMO_TYPE: + renderElement(request, task, keyPath, type.type, props, ref); + return; + case REACT_CONTEXT_TYPE: + defaultProps = props.children; + newProps = task.keyPath; + props = props.value; + initialState = type._currentValue2; + type._currentValue2 = props; + ref = currentActiveSnapshot; + currentActiveSnapshot = type = { + parent: ref, + depth: null === ref ? 0 : ref.depth + 1, + context: type, + parentValue: initialState, + value: props + }; + task.context = type; + task.keyPath = keyPath; + renderNodeDestructive(request, task, defaultProps, -1); + request = currentActiveSnapshot; + if (null === request) + throw Error( + "Tried to pop a Context at the root of the app. This is a bug in React." + ); + request.context._currentValue2 = request.parentValue; + request = currentActiveSnapshot = request.parent; + task.context = request; + task.keyPath = newProps; + return; + case REACT_CONSUMER_TYPE: + props = props.children; + type = props(type._context._currentValue2); + props = task.keyPath; + task.keyPath = keyPath; + renderNodeDestructive(request, task, type, -1); + task.keyPath = props; + return; + case REACT_LAZY_TYPE: + newProps = type._init; + type = newProps(type._payload); + if (12 === request.status) throw null; + renderElement(request, task, keyPath, type, props, ref); + return; + } + throw Error( + "Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: " + + ((null == type ? type : typeof type) + ".") + ); + } +} +function resumeNode(request, task, segmentId, node, childIndex) { + var prevReplay = task.replay, + blockedBoundary = task.blockedBoundary, + resumedSegment = createPendingSegment( + request, + 0, + null, + task.formatContext, + !1, + !1 + ); + resumedSegment.id = segmentId; + resumedSegment.parentFlushed = !0; + try { + (task.replay = null), + (task.blockedSegment = resumedSegment), + renderNode(request, task, node, childIndex), + (resumedSegment.status = 1), + null === blockedBoundary + ? (request.completedRootSegment = resumedSegment) + : (queueCompletedSegment(blockedBoundary, resumedSegment), + blockedBoundary.parentFlushed && + request.partialBoundaries.push(blockedBoundary)); + } finally { + (task.replay = prevReplay), (task.blockedSegment = null); + } +} +function renderNodeDestructive(request, task, node, childIndex) { + null !== task.replay && "number" === typeof task.replay.slots + ? resumeNode(request, task, task.replay.slots, node, childIndex) + : ((task.node = node), + (task.childIndex = childIndex), + (node = task.componentStack), + pushComponentStack(task), + retryNode(request, task), + (task.componentStack = node)); +} +function retryNode(request, task) { + var node = task.node, + childIndex = task.childIndex; + if (null !== node) { + if ("object" === typeof node) { + switch (node.$$typeof) { + case REACT_ELEMENT_TYPE: + var type = node.type, + key = node.key, + props = node.props; + node = props.ref; + var ref = void 0 !== node ? node : null, + name = getComponentNameFromType(type), + keyOrIndex = + null == key ? (-1 === childIndex ? 0 : childIndex) : key; + key = [task.keyPath, name, keyOrIndex]; + if (null !== task.replay) + a: { + var replay = task.replay; + childIndex = replay.nodes; + for (node = 0; node < childIndex.length; node++) { + var node$jscomp$0 = childIndex[node]; + if (keyOrIndex === node$jscomp$0[1]) { + if (4 === node$jscomp$0.length) { + if (null !== name && name !== node$jscomp$0[0]) + throw Error( + "Expected the resume to render <" + + node$jscomp$0[0] + + "> in this slot but instead it rendered <" + + name + + ">. The tree doesn't match so React will fallback to client rendering." + ); + var childNodes = node$jscomp$0[2]; + name = node$jscomp$0[3]; + keyOrIndex = task.node; + task.replay = { + nodes: childNodes, + slots: name, + pendingTasks: 1 + }; + try { + renderElement(request, task, key, type, props, ref); + if ( + 1 === task.replay.pendingTasks && + 0 < task.replay.nodes.length + ) + throw Error( + "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering." + ); + task.replay.pendingTasks--; + } catch (x) { + if ( + "object" === typeof x && + null !== x && + (x === SuspenseException || + "function" === typeof x.then) + ) + throw ( + (task.node === keyOrIndex + ? (task.replay = replay) + : childIndex.splice(node, 1), + x) + ); + task.replay.pendingTasks--; + props = getThrownInfo(task.componentStack); + key = request; + request = task.blockedBoundary; + type = x; + props = logRecoverableError(key, type, props); + abortRemainingReplayNodes( + key, + request, + childNodes, + name, + type, + props + ); + } + task.replay = replay; + } else { + if (type !== REACT_SUSPENSE_TYPE) + throw Error( + "Expected the resume to render <Suspense> in this slot but instead it rendered <" + + (getComponentNameFromType(type) || "Unknown") + + ">. The tree doesn't match so React will fallback to client rendering." + ); + b: { + replay = void 0; + type = node$jscomp$0[5]; + ref = node$jscomp$0[2]; + name = node$jscomp$0[3]; + keyOrIndex = + null === node$jscomp$0[4] ? [] : node$jscomp$0[4][2]; + node$jscomp$0 = + null === node$jscomp$0[4] ? null : node$jscomp$0[4][3]; + var prevKeyPath = task.keyPath, + prevContext = task.formatContext, + prevRow = task.row, + previousReplaySet = task.replay, + parentBoundary = task.blockedBoundary, + parentHoistableState = task.hoistableState, + content = props.children, + fallback = props.fallback, + fallbackAbortSet = new Set(); + props = createSuspenseBoundary( + request, + task.row, + fallbackAbortSet, + null, + null + ); + props.parentFlushed = !0; + props.rootSegmentID = type; + task.blockedBoundary = props; + task.hoistableState = props.contentState; + task.keyPath = key; + task.formatContext = getSuspenseContentFormatContext( + request.resumableState, + prevContext + ); + task.row = null; + task.replay = { + nodes: ref, + slots: name, + pendingTasks: 1 + }; + try { + renderNode(request, task, content, -1); + if ( + 1 === task.replay.pendingTasks && + 0 < task.replay.nodes.length + ) + throw Error( + "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering." + ); + task.replay.pendingTasks--; + if (0 === props.pendingTasks && 0 === props.status) { + props.status = 1; + request.completedBoundaries.push(props); + break b; + } + } catch (error) { + (props.status = 4), + (childNodes = getThrownInfo(task.componentStack)), + (replay = logRecoverableError( + request, + error, + childNodes + )), + (props.errorDigest = replay), + task.replay.pendingTasks--, + request.clientRenderedBoundaries.push(props); + } finally { + (task.blockedBoundary = parentBoundary), + (task.hoistableState = parentHoistableState), + (task.replay = previousReplaySet), + (task.keyPath = prevKeyPath), + (task.formatContext = prevContext), + (task.row = prevRow); + } + childNodes = createReplayTask( + request, + null, + { + nodes: keyOrIndex, + slots: node$jscomp$0, + pendingTasks: 0 + }, + fallback, + -1, + parentBoundary, + props.fallbackState, + fallbackAbortSet, + [key[0], "Suspense Fallback", key[2]], + getSuspenseFallbackFormatContext( + request.resumableState, + task.formatContext + ), + task.context, + task.treeContext, + task.row, + replaceSuspenseComponentStackWithSuspenseFallbackStack( + task.componentStack + ) + ); + pushComponentStack(childNodes); + request.pingedTasks.push(childNodes); + } + } + childIndex.splice(node, 1); + break a; + } + } + } + else renderElement(request, task, key, type, props, ref); + return; + case REACT_PORTAL_TYPE: + throw Error( + "Portals are not currently supported by the server renderer. Render them conditionally so that they only appear on the client render." + ); + case REACT_LAZY_TYPE: + childNodes = node._init; + node = childNodes(node._payload); + if (12 === request.status) throw null; + renderNodeDestructive(request, task, node, childIndex); + return; + } + if (isArrayImpl(node)) { + renderChildrenArray(request, task, node, childIndex); + return; + } + if ((childNodes = getIteratorFn(node))) + if ((childNodes = childNodes.call(node))) { + node = childNodes.next(); + if (!node.done) { + props = []; + do props.push(node.value), (node = childNodes.next()); + while (!node.done); + renderChildrenArray(request, task, props, childIndex); + } + return; + } + if ("function" === typeof node.then) + return ( + (task.thenableState = null), + renderNodeDestructive(request, task, unwrapThenable(node), childIndex) + ); + if (node.$$typeof === REACT_CONTEXT_TYPE) + return renderNodeDestructive( + request, + task, + node._currentValue2, + childIndex + ); + childIndex = Object.prototype.toString.call(node); + throw Error( + "Objects are not valid as a React child (found: " + + ("[object Object]" === childIndex + ? "object with keys {" + Object.keys(node).join(", ") + "}" + : childIndex) + + "). If you meant to render a collection of children, use an array instead." + ); + } + if ("string" === typeof node) + (childIndex = task.blockedSegment), + null !== childIndex && + (childIndex.lastPushedText = pushTextInstance( + childIndex.chunks, + node, + request.renderState, + childIndex.lastPushedText + )); + else if ("number" === typeof node || "bigint" === typeof node) + (childIndex = task.blockedSegment), + null !== childIndex && + (childIndex.lastPushedText = pushTextInstance( + childIndex.chunks, + "" + node, + request.renderState, + childIndex.lastPushedText + )); + } +} +function renderChildrenArray(request, task, children, childIndex) { + var prevKeyPath = task.keyPath; + if ( + -1 !== childIndex && + ((task.keyPath = [task.keyPath, "Fragment", childIndex]), + null !== task.replay) + ) { + for ( + var replay = task.replay, replayNodes = replay.nodes, j = 0; + j < replayNodes.length; + j++ + ) { + var node = replayNodes[j]; + if (node[1] === childIndex) { + childIndex = node[2]; + node = node[3]; + task.replay = { nodes: childIndex, slots: node, pendingTasks: 1 }; + try { + renderChildrenArray(request, task, children, -1); + if (1 === task.replay.pendingTasks && 0 < task.replay.nodes.length) + throw Error( + "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering." + ); + task.replay.pendingTasks--; + } catch (x) { + if ( + "object" === typeof x && + null !== x && + (x === SuspenseException || "function" === typeof x.then) + ) + throw x; + task.replay.pendingTasks--; + children = getThrownInfo(task.componentStack); + var boundary = task.blockedBoundary, + error = x; + children = logRecoverableError(request, error, children); + abortRemainingReplayNodes( + request, + boundary, + childIndex, + node, + error, + children + ); + } + task.replay = replay; + replayNodes.splice(j, 1); + break; + } + } + task.keyPath = prevKeyPath; + return; + } + replay = task.treeContext; + replayNodes = children.length; + if ( + null !== task.replay && + ((j = task.replay.slots), null !== j && "object" === typeof j) + ) { + for (childIndex = 0; childIndex < replayNodes; childIndex++) + (node = children[childIndex]), + (task.treeContext = pushTreeContext(replay, replayNodes, childIndex)), + (boundary = j[childIndex]), + "number" === typeof boundary + ? (resumeNode(request, task, boundary, node, childIndex), + delete j[childIndex]) + : renderNode(request, task, node, childIndex); + task.treeContext = replay; + task.keyPath = prevKeyPath; + return; + } + for (j = 0; j < replayNodes; j++) + (childIndex = children[j]), + (task.treeContext = pushTreeContext(replay, replayNodes, j)), + renderNode(request, task, childIndex, j); + task.treeContext = replay; + task.keyPath = prevKeyPath; +} +function trackPostponedBoundary(request, trackedPostpones, boundary) { + boundary.status = 5; + boundary.rootSegmentID = request.nextSegmentId++; + request = boundary.trackedContentKeyPath; + if (null === request) + throw Error( + "It should not be possible to postpone at the root. This is a bug in React." + ); + var fallbackReplayNode = boundary.trackedFallbackNode, + children = [], + boundaryNode = trackedPostpones.workingMap.get(request); + if (void 0 === boundaryNode) + return ( + (boundary = [ + request[1], + request[2], + children, + null, + fallbackReplayNode, + boundary.rootSegmentID + ]), + trackedPostpones.workingMap.set(request, boundary), + addToReplayParent(boundary, request[0], trackedPostpones), + boundary + ); + boundaryNode[4] = fallbackReplayNode; + boundaryNode[5] = boundary.rootSegmentID; + return boundaryNode; +} +function trackPostpone(request, trackedPostpones, task, segment) { + segment.status = 5; + var keyPath = task.keyPath, + boundary = task.blockedBoundary; + if (null === boundary) + (segment.id = request.nextSegmentId++), + (trackedPostpones.rootSlots = segment.id), + null !== request.completedRootSegment && + (request.completedRootSegment.status = 5); + else { + if (null !== boundary && 0 === boundary.status) { + var boundaryNode = trackPostponedBoundary( + request, + trackedPostpones, + boundary + ); + if ( + boundary.trackedContentKeyPath === keyPath && + -1 === task.childIndex + ) { + -1 === segment.id && + (segment.id = segment.parentFlushed + ? boundary.rootSegmentID + : request.nextSegmentId++); + boundaryNode[3] = segment.id; + return; + } + } + -1 === segment.id && + (segment.id = + segment.parentFlushed && null !== boundary + ? boundary.rootSegmentID + : request.nextSegmentId++); + if (-1 === task.childIndex) + null === keyPath + ? (trackedPostpones.rootSlots = segment.id) + : ((task = trackedPostpones.workingMap.get(keyPath)), + void 0 === task + ? ((task = [keyPath[1], keyPath[2], [], segment.id]), + addToReplayParent(task, keyPath[0], trackedPostpones)) + : (task[3] = segment.id)); + else { + if (null === keyPath) + if (((request = trackedPostpones.rootSlots), null === request)) + request = trackedPostpones.rootSlots = {}; + else { + if ("number" === typeof request) + throw Error( + "It should not be possible to postpone both at the root of an element as well as a slot below. This is a bug in React." + ); + } + else if ( + ((boundary = trackedPostpones.workingMap), + (boundaryNode = boundary.get(keyPath)), + void 0 === boundaryNode) + ) + (request = {}), + (boundaryNode = [keyPath[1], keyPath[2], [], request]), + boundary.set(keyPath, boundaryNode), + addToReplayParent(boundaryNode, keyPath[0], trackedPostpones); + else if (((request = boundaryNode[3]), null === request)) + request = boundaryNode[3] = {}; + else if ("number" === typeof request) + throw Error( + "It should not be possible to postpone both at the root of an element as well as a slot below. This is a bug in React." + ); + request[task.childIndex] = segment.id; + } + } +} +function untrackBoundary(request, boundary) { + request = request.trackedPostpones; + null !== request && + ((boundary = boundary.trackedContentKeyPath), + null !== boundary && + ((boundary = request.workingMap.get(boundary)), + void 0 !== boundary && + ((boundary.length = 4), (boundary[2] = []), (boundary[3] = null)))); +} +function spawnNewSuspendedReplayTask(request, task, thenableState) { + return createReplayTask( + request, + thenableState, + task.replay, + task.node, + task.childIndex, + task.blockedBoundary, + task.hoistableState, + task.abortSet, + task.keyPath, + task.formatContext, + task.context, + task.treeContext, + task.row, + task.componentStack + ); +} +function spawnNewSuspendedRenderTask(request, task, thenableState) { + var segment = task.blockedSegment, + newSegment = createPendingSegment( + request, + segment.chunks.length, + null, + task.formatContext, + segment.lastPushedText, + !0 + ); + segment.children.push(newSegment); + segment.lastPushedText = !1; + return createRenderTask( + request, + thenableState, + task.node, + task.childIndex, + task.blockedBoundary, + newSegment, + task.blockedPreamble, + task.hoistableState, + task.abortSet, + task.keyPath, + task.formatContext, + task.context, + task.treeContext, + task.row, + task.componentStack + ); +} +function renderNode(request, task, node, childIndex) { + var previousFormatContext = task.formatContext, + previousContext = task.context, + previousKeyPath = task.keyPath, + previousTreeContext = task.treeContext, + previousComponentStack = task.componentStack, + segment = task.blockedSegment; + if (null === segment) { + segment = task.replay; + try { + return renderNodeDestructive(request, task, node, childIndex); + } catch (thrownValue) { + if ( + (resetHooksState(), + (node = + thrownValue === SuspenseException + ? getSuspendedThenable() + : thrownValue), + 12 !== request.status && "object" === typeof node && null !== node) + ) { + if ("function" === typeof node.then) { + childIndex = + thrownValue === SuspenseException + ? getThenableStateAfterSuspending() + : null; + request = spawnNewSuspendedReplayTask(request, task, childIndex).ping; + node.then(request, request); + task.formatContext = previousFormatContext; + task.context = previousContext; + task.keyPath = previousKeyPath; + task.treeContext = previousTreeContext; + task.componentStack = previousComponentStack; + task.replay = segment; + switchContext(previousContext); + return; + } + if ("Maximum call stack size exceeded" === node.message) { + node = + thrownValue === SuspenseException + ? getThenableStateAfterSuspending() + : null; + node = spawnNewSuspendedReplayTask(request, task, node); + request.pingedTasks.push(node); + task.formatContext = previousFormatContext; + task.context = previousContext; + task.keyPath = previousKeyPath; + task.treeContext = previousTreeContext; + task.componentStack = previousComponentStack; + task.replay = segment; + switchContext(previousContext); + return; + } + } + } + } else { + var childrenLength = segment.children.length, + chunkLength = segment.chunks.length; + try { + return renderNodeDestructive(request, task, node, childIndex); + } catch (thrownValue$62) { + if ( + (resetHooksState(), + (segment.children.length = childrenLength), + (segment.chunks.length = chunkLength), + (node = + thrownValue$62 === SuspenseException + ? getSuspendedThenable() + : thrownValue$62), + 12 !== request.status && "object" === typeof node && null !== node) + ) { + if ("function" === typeof node.then) { + segment = node; + node = + thrownValue$62 === SuspenseException + ? getThenableStateAfterSuspending() + : null; + request = spawnNewSuspendedRenderTask(request, task, node).ping; + segment.then(request, request); + task.formatContext = previousFormatContext; + task.context = previousContext; + task.keyPath = previousKeyPath; + task.treeContext = previousTreeContext; + task.componentStack = previousComponentStack; + switchContext(previousContext); + return; + } + if ("Maximum call stack size exceeded" === node.message) { + segment = + thrownValue$62 === SuspenseException + ? getThenableStateAfterSuspending() + : null; + segment = spawnNewSuspendedRenderTask(request, task, segment); + request.pingedTasks.push(segment); + task.formatContext = previousFormatContext; + task.context = previousContext; + task.keyPath = previousKeyPath; + task.treeContext = previousTreeContext; + task.componentStack = previousComponentStack; + switchContext(previousContext); + return; + } + } + } + } + task.formatContext = previousFormatContext; + task.context = previousContext; + task.keyPath = previousKeyPath; + task.treeContext = previousTreeContext; + switchContext(previousContext); + throw node; +} +function abortTaskSoft(task) { + var boundary = task.blockedBoundary, + segment = task.blockedSegment; + null !== segment && + ((segment.status = 3), finishedTask(this, boundary, task.row, segment)); +} +function abortRemainingReplayNodes( + request$jscomp$0, + boundary, + nodes, + slots, + error, + errorDigest$jscomp$0 +) { + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + if (4 === node.length) + abortRemainingReplayNodes( + request$jscomp$0, + boundary, + node[2], + node[3], + error, + errorDigest$jscomp$0 + ); + else { + node = node[5]; + var request = request$jscomp$0, + errorDigest = errorDigest$jscomp$0, + resumedBoundary = createSuspenseBoundary( + request, + null, + new Set(), + null, + null + ); + resumedBoundary.parentFlushed = !0; + resumedBoundary.rootSegmentID = node; + resumedBoundary.status = 4; + resumedBoundary.errorDigest = errorDigest; + resumedBoundary.parentFlushed && + request.clientRenderedBoundaries.push(resumedBoundary); + } + } + nodes.length = 0; + if (null !== slots) { + if (null === boundary) + throw Error( + "We should not have any resumable nodes in the shell. This is a bug in React." + ); + 4 !== boundary.status && + ((boundary.status = 4), + (boundary.errorDigest = errorDigest$jscomp$0), + boundary.parentFlushed && + request$jscomp$0.clientRenderedBoundaries.push(boundary)); + if ("object" === typeof slots) for (var index in slots) delete slots[index]; + } +} +function abortTask(task, request, error) { + var boundary = task.blockedBoundary, + segment = task.blockedSegment; + if (null !== segment) { + if (6 === segment.status) return; + segment.status = 3; + } + var errorInfo = getThrownInfo(task.componentStack); + if (null === boundary) { + if (13 !== request.status && 14 !== request.status) { + boundary = task.replay; + if (null === boundary) { + null !== request.trackedPostpones && null !== segment + ? ((boundary = request.trackedPostpones), + logRecoverableError(request, error, errorInfo), + trackPostpone(request, boundary, task, segment), + finishedTask(request, null, task.row, segment)) + : (logRecoverableError(request, error, errorInfo), + fatalError(request, error)); + return; + } + boundary.pendingTasks--; + 0 === boundary.pendingTasks && + 0 < boundary.nodes.length && + ((segment = logRecoverableError(request, error, errorInfo)), + abortRemainingReplayNodes( + request, + null, + boundary.nodes, + boundary.slots, + error, + segment + )); + request.pendingRootTasks--; + 0 === request.pendingRootTasks && completeShell(request); + } + } else { + var trackedPostpones$63 = request.trackedPostpones; + if (4 !== boundary.status) { + if (null !== trackedPostpones$63 && null !== segment) + return ( + logRecoverableError(request, error, errorInfo), + trackPostpone(request, trackedPostpones$63, task, segment), + boundary.fallbackAbortableTasks.forEach(function (fallbackTask) { + return abortTask(fallbackTask, request, error); + }), + boundary.fallbackAbortableTasks.clear(), + finishedTask(request, boundary, task.row, segment) + ); + boundary.status = 4; + segment = logRecoverableError(request, error, errorInfo); + boundary.status = 4; + boundary.errorDigest = segment; + untrackBoundary(request, boundary); + boundary.parentFlushed && request.clientRenderedBoundaries.push(boundary); + } + boundary.pendingTasks--; + segment = boundary.row; + null !== segment && + 0 === --segment.pendingTasks && + finishSuspenseListRow(request, segment); + boundary.fallbackAbortableTasks.forEach(function (fallbackTask) { + return abortTask(fallbackTask, request, error); + }); + boundary.fallbackAbortableTasks.clear(); + } + task = task.row; + null !== task && + 0 === --task.pendingTasks && + finishSuspenseListRow(request, task); + request.allPendingTasks--; + 0 === request.allPendingTasks && completeAll(request); +} +function safelyEmitEarlyPreloads(request, shellComplete) { + try { + var renderState = request.renderState, + onHeaders = renderState.onHeaders; + if (onHeaders) { + var headers = renderState.headers; + if (headers) { + renderState.headers = null; + var linkHeader = headers.preconnects; + headers.fontPreloads && + (linkHeader && (linkHeader += ", "), + (linkHeader += headers.fontPreloads)); + headers.highImagePreloads && + (linkHeader && (linkHeader += ", "), + (linkHeader += headers.highImagePreloads)); + if (!shellComplete) { + var queueIter = renderState.styles.values(), + queueStep = queueIter.next(); + b: for ( + ; + 0 < headers.remainingCapacity && !queueStep.done; + queueStep = queueIter.next() + ) + for ( + var sheetIter = queueStep.value.sheets.values(), + sheetStep = sheetIter.next(); + 0 < headers.remainingCapacity && !sheetStep.done; + sheetStep = sheetIter.next() + ) { + var sheet = sheetStep.value, + props = sheet.props, + key = props.href, + props$jscomp$0 = sheet.props, + header = getPreloadAsHeader(props$jscomp$0.href, "style", { + crossOrigin: props$jscomp$0.crossOrigin, + integrity: props$jscomp$0.integrity, + nonce: props$jscomp$0.nonce, + type: props$jscomp$0.type, + fetchPriority: props$jscomp$0.fetchPriority, + referrerPolicy: props$jscomp$0.referrerPolicy, + media: props$jscomp$0.media + }); + if (0 <= (headers.remainingCapacity -= header.length + 2)) + (renderState.resets.style[key] = PRELOAD_NO_CREDS), + linkHeader && (linkHeader += ", "), + (linkHeader += header), + (renderState.resets.style[key] = + "string" === typeof props.crossOrigin || + "string" === typeof props.integrity + ? [props.crossOrigin, props.integrity] + : PRELOAD_NO_CREDS); + else break b; + } + } + linkHeader ? onHeaders({ Link: linkHeader }) : onHeaders({}); + } + } + } catch (error) { + logRecoverableError(request, error, {}); + } +} +function completeShell(request) { + null === request.trackedPostpones && safelyEmitEarlyPreloads(request, !0); + null === request.trackedPostpones && preparePreamble(request); + request.onShellError = noop; + request = request.onShellReady; + request(); +} +function completeAll(request) { + safelyEmitEarlyPreloads( + request, + null === request.trackedPostpones + ? !0 + : null === request.completedRootSegment || + 5 !== request.completedRootSegment.status + ); + preparePreamble(request); + request = request.onAllReady; + request(); +} +function queueCompletedSegment(boundary, segment) { + if ( + 0 === segment.chunks.length && + 1 === segment.children.length && + null === segment.children[0].boundary && + -1 === segment.children[0].id + ) { + var childSegment = segment.children[0]; + childSegment.id = segment.id; + childSegment.parentFlushed = !0; + (1 !== childSegment.status && + 3 !== childSegment.status && + 4 !== childSegment.status) || + queueCompletedSegment(boundary, childSegment); + } else boundary.completedSegments.push(segment); +} +function finishedTask(request, boundary, row, segment) { + null !== row && + (0 === --row.pendingTasks + ? finishSuspenseListRow(request, row) + : row.together && tryToResolveTogetherRow(request, row)); + request.allPendingTasks--; + if (null === boundary) { + if (null !== segment && segment.parentFlushed) { + if (null !== request.completedRootSegment) + throw Error( + "There can only be one root segment. This is a bug in React." + ); + request.completedRootSegment = segment; + } + request.pendingRootTasks--; + 0 === request.pendingRootTasks && completeShell(request); + } else if ((boundary.pendingTasks--, 4 !== boundary.status)) + if (0 === boundary.pendingTasks) + if ( + (0 === boundary.status && (boundary.status = 1), + null !== segment && + segment.parentFlushed && + (1 === segment.status || 3 === segment.status) && + queueCompletedSegment(boundary, segment), + boundary.parentFlushed && request.completedBoundaries.push(boundary), + 1 === boundary.status) + ) + (row = boundary.row), + null !== row && + hoistHoistables(row.hoistables, boundary.contentState), + isEligibleForOutlining(request, boundary) || + (boundary.fallbackAbortableTasks.forEach(abortTaskSoft, request), + boundary.fallbackAbortableTasks.clear(), + null !== row && + 0 === --row.pendingTasks && + finishSuspenseListRow(request, row)), + 0 === request.pendingRootTasks && + null === request.trackedPostpones && + null !== boundary.contentPreamble && + preparePreamble(request); + else { + if ( + 5 === boundary.status && + ((boundary = boundary.row), null !== boundary) + ) { + if (null !== request.trackedPostpones) { + row = request.trackedPostpones; + var postponedRow = boundary.next; + if ( + null !== postponedRow && + ((segment = postponedRow.boundaries), null !== segment) + ) + for ( + postponedRow.boundaries = null, postponedRow = 0; + postponedRow < segment.length; + postponedRow++ + ) { + var postponedBoundary = segment[postponedRow]; + trackPostponedBoundary(request, row, postponedBoundary); + finishedTask(request, postponedBoundary, null, null); + } + } + 0 === --boundary.pendingTasks && + finishSuspenseListRow(request, boundary); + } + } + else + null === segment || + !segment.parentFlushed || + (1 !== segment.status && 3 !== segment.status) || + (queueCompletedSegment(boundary, segment), + 1 === boundary.completedSegments.length && + boundary.parentFlushed && + request.partialBoundaries.push(boundary)), + (boundary = boundary.row), + null !== boundary && + boundary.together && + tryToResolveTogetherRow(request, boundary); + 0 === request.allPendingTasks && completeAll(request); +} +function performWork(request$jscomp$2) { + if (14 !== request$jscomp$2.status && 13 !== request$jscomp$2.status) { + var prevContext = currentActiveSnapshot, + prevDispatcher = ReactSharedInternals.H; + ReactSharedInternals.H = HooksDispatcher; + var prevAsyncDispatcher = ReactSharedInternals.A; + ReactSharedInternals.A = DefaultAsyncDispatcher; + var prevRequest = currentRequest; + currentRequest = request$jscomp$2; + var prevResumableState = currentResumableState; + currentResumableState = request$jscomp$2.resumableState; + try { + var pingedTasks = request$jscomp$2.pingedTasks, + i; + for (i = 0; i < pingedTasks.length; i++) { + var task = pingedTasks[i], + request = request$jscomp$2, + segment = task.blockedSegment; + if (null === segment) { + var request$jscomp$0 = request; + if (0 !== task.replay.pendingTasks) { + switchContext(task.context); + try { + "number" === typeof task.replay.slots + ? resumeNode( + request$jscomp$0, + task, + task.replay.slots, + task.node, + task.childIndex + ) + : retryNode(request$jscomp$0, task); + if ( + 1 === task.replay.pendingTasks && + 0 < task.replay.nodes.length + ) + throw Error( + "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering." + ); + task.replay.pendingTasks--; + task.abortSet.delete(task); + finishedTask( + request$jscomp$0, + task.blockedBoundary, + task.row, + null + ); + } catch (thrownValue) { + resetHooksState(); + var x = + thrownValue === SuspenseException + ? getSuspendedThenable() + : thrownValue; + if ( + "object" === typeof x && + null !== x && + "function" === typeof x.then + ) { + var ping = task.ping; + x.then(ping, ping); + task.thenableState = + thrownValue === SuspenseException + ? getThenableStateAfterSuspending() + : null; + } else { + task.replay.pendingTasks--; + task.abortSet.delete(task); + var errorInfo = getThrownInfo(task.componentStack); + request = void 0; + var request$jscomp$1 = request$jscomp$0, + boundary = task.blockedBoundary, + error$jscomp$0 = + 12 === request$jscomp$0.status + ? request$jscomp$0.fatalError + : x, + replayNodes = task.replay.nodes, + resumeSlots = task.replay.slots; + request = logRecoverableError( + request$jscomp$1, + error$jscomp$0, + errorInfo + ); + abortRemainingReplayNodes( + request$jscomp$1, + boundary, + replayNodes, + resumeSlots, + error$jscomp$0, + request + ); + request$jscomp$0.pendingRootTasks--; + 0 === request$jscomp$0.pendingRootTasks && + completeShell(request$jscomp$0); + request$jscomp$0.allPendingTasks--; + 0 === request$jscomp$0.allPendingTasks && + completeAll(request$jscomp$0); + } + } finally { + } + } + } else if ( + ((request$jscomp$0 = void 0), + (request$jscomp$1 = segment), + 0 === request$jscomp$1.status) + ) { + request$jscomp$1.status = 6; + switchContext(task.context); + var childrenLength = request$jscomp$1.children.length, + chunkLength = request$jscomp$1.chunks.length; + try { + retryNode(request, task), + pushSegmentFinale( + request$jscomp$1.chunks, + request.renderState, + request$jscomp$1.lastPushedText, + request$jscomp$1.textEmbedded + ), + task.abortSet.delete(task), + (request$jscomp$1.status = 1), + finishedTask( + request, + task.blockedBoundary, + task.row, + request$jscomp$1 + ); + } catch (thrownValue) { + resetHooksState(); + request$jscomp$1.children.length = childrenLength; + request$jscomp$1.chunks.length = chunkLength; + var x$jscomp$0 = + thrownValue === SuspenseException + ? getSuspendedThenable() + : 12 === request.status + ? request.fatalError + : thrownValue; + if (12 === request.status && null !== request.trackedPostpones) { + var trackedPostpones = request.trackedPostpones, + thrownInfo = getThrownInfo(task.componentStack); + task.abortSet.delete(task); + logRecoverableError(request, x$jscomp$0, thrownInfo); + trackPostpone(request, trackedPostpones, task, request$jscomp$1); + finishedTask( + request, + task.blockedBoundary, + task.row, + request$jscomp$1 + ); + } else if ( + "object" === typeof x$jscomp$0 && + null !== x$jscomp$0 && + "function" === typeof x$jscomp$0.then + ) { + request$jscomp$1.status = 0; + task.thenableState = + thrownValue === SuspenseException + ? getThenableStateAfterSuspending() + : null; + var ping$jscomp$0 = task.ping; + x$jscomp$0.then(ping$jscomp$0, ping$jscomp$0); + } else { + var errorInfo$jscomp$0 = getThrownInfo(task.componentStack); + task.abortSet.delete(task); + request$jscomp$1.status = 4; + var boundary$jscomp$0 = task.blockedBoundary, + row = task.row; + null !== row && + 0 === --row.pendingTasks && + finishSuspenseListRow(request, row); + request.allPendingTasks--; + request$jscomp$0 = logRecoverableError( + request, + x$jscomp$0, + errorInfo$jscomp$0 + ); + if (null === boundary$jscomp$0) fatalError(request, x$jscomp$0); + else if ( + (boundary$jscomp$0.pendingTasks--, + 4 !== boundary$jscomp$0.status) + ) { + boundary$jscomp$0.status = 4; + boundary$jscomp$0.errorDigest = request$jscomp$0; + untrackBoundary(request, boundary$jscomp$0); + var boundaryRow = boundary$jscomp$0.row; + null !== boundaryRow && + 0 === --boundaryRow.pendingTasks && + finishSuspenseListRow(request, boundaryRow); + boundary$jscomp$0.parentFlushed && + request.clientRenderedBoundaries.push(boundary$jscomp$0); + 0 === request.pendingRootTasks && + null === request.trackedPostpones && + null !== boundary$jscomp$0.contentPreamble && + preparePreamble(request); + } + 0 === request.allPendingTasks && completeAll(request); + } + } finally { + } + } + } + pingedTasks.splice(0, i); + null !== request$jscomp$2.destination && + flushCompletedQueues(request$jscomp$2, request$jscomp$2.destination); + } catch (error) { + logRecoverableError(request$jscomp$2, error, {}), + fatalError(request$jscomp$2, error); + } finally { + (currentResumableState = prevResumableState), + (ReactSharedInternals.H = prevDispatcher), + (ReactSharedInternals.A = prevAsyncDispatcher), + prevDispatcher === HooksDispatcher && switchContext(prevContext), + (currentRequest = prevRequest); + } + } +} +function preparePreambleFromSubtree( + request, + segment, + collectedPreambleSegments +) { + segment.preambleChildren.length && + collectedPreambleSegments.push(segment.preambleChildren); + for (var pendingPreambles = !1, i = 0; i < segment.children.length; i++) + pendingPreambles = + preparePreambleFromSegment( + request, + segment.children[i], + collectedPreambleSegments + ) || pendingPreambles; + return pendingPreambles; +} +function preparePreambleFromSegment( + request, + segment, + collectedPreambleSegments +) { + var boundary = segment.boundary; + if (null === boundary) + return preparePreambleFromSubtree( + request, + segment, + collectedPreambleSegments + ); + var preamble = boundary.contentPreamble, + fallbackPreamble = boundary.fallbackPreamble; + if (null === preamble || null === fallbackPreamble) return !1; + switch (boundary.status) { + case 1: + hoistPreambleState(request.renderState, preamble); + request.byteSize += boundary.byteSize; + segment = boundary.completedSegments[0]; + if (!segment) + throw Error( + "A previously unvisited boundary must have exactly one root segment. This is a bug in React." + ); + return preparePreambleFromSubtree( + request, + segment, + collectedPreambleSegments + ); + case 5: + if (null !== request.trackedPostpones) return !0; + case 4: + if (1 === segment.status) + return ( + hoistPreambleState(request.renderState, fallbackPreamble), + preparePreambleFromSubtree( + request, + segment, + collectedPreambleSegments + ) + ); + default: + return !0; + } +} +function preparePreamble(request) { + if ( + request.completedRootSegment && + null === request.completedPreambleSegments + ) { + var collectedPreambleSegments = [], + originalRequestByteSize = request.byteSize, + hasPendingPreambles = preparePreambleFromSegment( + request, + request.completedRootSegment, + collectedPreambleSegments + ), + preamble = request.renderState.preamble; + !1 === hasPendingPreambles || (preamble.headChunks && preamble.bodyChunks) + ? (request.completedPreambleSegments = collectedPreambleSegments) + : (request.byteSize = originalRequestByteSize); + } +} +function flushSubtree(request, destination, segment, hoistableState) { + segment.parentFlushed = !0; + switch (segment.status) { + case 0: + segment.id = request.nextSegmentId++; + case 5: + return ( + (hoistableState = segment.id), + (segment.lastPushedText = !1), + (segment.textEmbedded = !1), + (request = request.renderState), + destination.push('<template id="'), + destination.push(request.placeholderPrefix), + (request = hoistableState.toString(16)), + destination.push(request), + destination.push('"></template>') + ); + case 1: + segment.status = 2; + var r = !0, + chunks = segment.chunks, + chunkIdx = 0; + segment = segment.children; + for (var childIdx = 0; childIdx < segment.length; childIdx++) { + for (r = segment[childIdx]; chunkIdx < r.index; chunkIdx++) + destination.push(chunks[chunkIdx]); + r = flushSegment(request, destination, r, hoistableState); + } + for (; chunkIdx < chunks.length - 1; chunkIdx++) + destination.push(chunks[chunkIdx]); + chunkIdx < chunks.length && (r = destination.push(chunks[chunkIdx])); + return r; + case 3: + return !0; + default: + throw Error( + "Aborted, errored or already flushed boundaries should not be flushed again. This is a bug in React." + ); + } +} +var flushedByteSize = 0; +function flushSegment(request, destination, segment, hoistableState) { + var boundary = segment.boundary; + if (null === boundary) + return flushSubtree(request, destination, segment, hoistableState); + boundary.parentFlushed = !0; + if (4 === boundary.status) { + var row = boundary.row; + null !== row && + 0 === --row.pendingTasks && + finishSuspenseListRow(request, row); + request.renderState.generateStaticMarkup || + ((boundary = boundary.errorDigest), + destination.push("\x3c!--$!--\x3e"), + destination.push("<template"), + boundary && + (destination.push(' data-dgst="'), + (boundary = escapeTextForBrowser(boundary)), + destination.push(boundary), + destination.push('"')), + destination.push("></template>")); + flushSubtree(request, destination, segment, hoistableState); + request = request.renderState.generateStaticMarkup + ? !0 + : destination.push("\x3c!--/$--\x3e"); + return request; + } + if (1 !== boundary.status) + return ( + 0 === boundary.status && + (boundary.rootSegmentID = request.nextSegmentId++), + 0 < boundary.completedSegments.length && + request.partialBoundaries.push(boundary), + writeStartPendingSuspenseBoundary( + destination, + request.renderState, + boundary.rootSegmentID + ), + hoistableState && hoistHoistables(hoistableState, boundary.fallbackState), + flushSubtree(request, destination, segment, hoistableState), + destination.push("\x3c!--/$--\x3e") + ); + if ( + !flushingPartialBoundaries && + isEligibleForOutlining(request, boundary) && + flushedByteSize + boundary.byteSize > request.progressiveChunkSize + ) + return ( + (boundary.rootSegmentID = request.nextSegmentId++), + request.completedBoundaries.push(boundary), + writeStartPendingSuspenseBoundary( + destination, + request.renderState, + boundary.rootSegmentID + ), + flushSubtree(request, destination, segment, hoistableState), + destination.push("\x3c!--/$--\x3e") + ); + flushedByteSize += boundary.byteSize; + hoistableState && hoistHoistables(hoistableState, boundary.contentState); + segment = boundary.row; + null !== segment && + isEligibleForOutlining(request, boundary) && + 0 === --segment.pendingTasks && + finishSuspenseListRow(request, segment); + request.renderState.generateStaticMarkup || + destination.push("\x3c!--$--\x3e"); + segment = boundary.completedSegments; + if (1 !== segment.length) + throw Error( + "A previously unvisited boundary must have exactly one root segment. This is a bug in React." + ); + flushSegment(request, destination, segment[0], hoistableState); + request = request.renderState.generateStaticMarkup + ? !0 + : destination.push("\x3c!--/$--\x3e"); + return request; +} +function flushSegmentContainer(request, destination, segment, hoistableState) { + writeStartSegment( + destination, + request.renderState, + segment.parentFormatContext, + segment.id + ); + flushSegment(request, destination, segment, hoistableState); + return writeEndSegment(destination, segment.parentFormatContext); +} +function flushCompletedBoundary(request, destination, boundary) { + flushedByteSize = boundary.byteSize; + for ( + var completedSegments = boundary.completedSegments, i = 0; + i < completedSegments.length; + i++ + ) + flushPartiallyCompletedSegment( + request, + destination, + boundary, + completedSegments[i] + ); + completedSegments.length = 0; + completedSegments = boundary.row; + null !== completedSegments && + isEligibleForOutlining(request, boundary) && + 0 === --completedSegments.pendingTasks && + finishSuspenseListRow(request, completedSegments); + writeHoistablesForBoundary( + destination, + boundary.contentState, + request.renderState + ); + completedSegments = request.resumableState; + request = request.renderState; + i = boundary.rootSegmentID; + boundary = boundary.contentState; + var requiresStyleInsertion = request.stylesToHoist; + request.stylesToHoist = !1; + destination.push(request.startInlineScript); + destination.push(">"); + requiresStyleInsertion + ? (0 === (completedSegments.instructions & 4) && + ((completedSegments.instructions |= 4), + destination.push( + '$RX=function(b,c,d,e,f){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data="$!",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),f&&(a.cstck=f),b._reactRetry&&b._reactRetry())};' + )), + 0 === (completedSegments.instructions & 2) && + ((completedSegments.instructions |= 2), + destination.push( + '$RB=[];$RV=function(a){$RT=performance.now();for(var b=0;b<a.length;b+=2){var c=a[b],e=a[b+1];null!==e.parentNode&&e.parentNode.removeChild(e);var f=c.parentNode;if(f){var g=c.previousSibling,h=0;do{if(c&&8===c.nodeType){var d=c.data;if("/$"===d||"/&"===d)if(0===h)break;else h--;else"$"!==d&&"$?"!==d&&"$~"!==d&&"$!"!==d&&"&"!==d||h++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;e.firstChild;)f.insertBefore(e.firstChild,c);g.data="$";g._reactRetry&&requestAnimationFrame(g._reactRetry)}}a.length=0};\n$RC=function(a,b){if(b=document.getElementById(b))(a=document.getElementById(a))?(a.previousSibling.data="$~",$RB.push(a,b),2===$RB.length&&("number"!==typeof $RT?requestAnimationFrame($RV.bind(null,$RB)):(a=performance.now(),setTimeout($RV.bind(null,$RB),2300>a&&2E3<a?2300-a:$RT+300-a)))):b.parentNode.removeChild(b)};' + )), + 0 === (completedSegments.instructions & 8) + ? ((completedSegments.instructions |= 8), + destination.push( + '$RM=new Map;$RR=function(n,w,p){function u(q){this._p=null;q()}for(var r=new Map,t=document,h,b,e=t.querySelectorAll("link[data-precedence],style[data-precedence]"),v=[],k=0;b=e[k++];)"not all"===b.getAttribute("media")?v.push(b):("LINK"===b.tagName&&$RM.set(b.getAttribute("href"),b),r.set(b.dataset.precedence,h=b));e=0;b=[];var l,a;for(k=!0;;){if(k){var f=p[e++];if(!f){k=!1;e=0;continue}var c=!1,m=0;var d=f[m++];if(a=$RM.get(d)){var g=a._p;c=!0}else{a=t.createElement("link");a.href=d;a.rel=\n"stylesheet";for(a.dataset.precedence=l=f[m++];g=f[m++];)a.setAttribute(g,f[m++]);g=a._p=new Promise(function(q,x){a.onload=u.bind(a,q);a.onerror=u.bind(a,x)});$RM.set(d,a)}d=a.getAttribute("media");!g||d&&!matchMedia(d).matches||b.push(g);if(c)continue}else{a=v[e++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=r.get(l)||h;c===h&&(h=a);r.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=t.head,c.insertBefore(a,c.firstChild))}if(p=document.getElementById(n))p.previousSibling.data=\n"$~";Promise.all(b).then($RC.bind(null,n,w),$RX.bind(null,n,"CSS failed to load"))};$RR("' + )) + : destination.push('$RR("')) + : (0 === (completedSegments.instructions & 2) && + ((completedSegments.instructions |= 2), + destination.push( + '$RB=[];$RV=function(a){$RT=performance.now();for(var b=0;b<a.length;b+=2){var c=a[b],e=a[b+1];null!==e.parentNode&&e.parentNode.removeChild(e);var f=c.parentNode;if(f){var g=c.previousSibling,h=0;do{if(c&&8===c.nodeType){var d=c.data;if("/$"===d||"/&"===d)if(0===h)break;else h--;else"$"!==d&&"$?"!==d&&"$~"!==d&&"$!"!==d&&"&"!==d||h++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;e.firstChild;)f.insertBefore(e.firstChild,c);g.data="$";g._reactRetry&&requestAnimationFrame(g._reactRetry)}}a.length=0};\n$RC=function(a,b){if(b=document.getElementById(b))(a=document.getElementById(a))?(a.previousSibling.data="$~",$RB.push(a,b),2===$RB.length&&("number"!==typeof $RT?requestAnimationFrame($RV.bind(null,$RB)):(a=performance.now(),setTimeout($RV.bind(null,$RB),2300>a&&2E3<a?2300-a:$RT+300-a)))):b.parentNode.removeChild(b)};' + )), + destination.push('$RC("')); + completedSegments = i.toString(16); + destination.push(request.boundaryPrefix); + destination.push(completedSegments); + destination.push('","'); + destination.push(request.segmentPrefix); + destination.push(completedSegments); + requiresStyleInsertion + ? (destination.push('",'), + writeStyleResourceDependenciesInJS(destination, boundary)) + : destination.push('"'); + boundary = destination.push(")\x3c/script>"); + return writeBootstrap(destination, request) && boundary; +} +function flushPartiallyCompletedSegment( + request, + destination, + boundary, + segment +) { + if (2 === segment.status) return !0; + var hoistableState = boundary.contentState, + segmentID = segment.id; + if (-1 === segmentID) { + if (-1 === (segment.id = boundary.rootSegmentID)) + throw Error( + "A root segment ID must have been assigned by now. This is a bug in React." + ); + return flushSegmentContainer(request, destination, segment, hoistableState); + } + if (segmentID === boundary.rootSegmentID) + return flushSegmentContainer(request, destination, segment, hoistableState); + flushSegmentContainer(request, destination, segment, hoistableState); + boundary = request.resumableState; + request = request.renderState; + destination.push(request.startInlineScript); + destination.push(">"); + 0 === (boundary.instructions & 1) + ? ((boundary.instructions |= 1), + destination.push( + '$RS=function(a,b){a=document.getElementById(a);b=document.getElementById(b);for(a.parentNode.removeChild(a);a.firstChild;)b.parentNode.insertBefore(a.firstChild,b);b.parentNode.removeChild(b)};$RS("' + )) + : destination.push('$RS("'); + destination.push(request.segmentPrefix); + segmentID = segmentID.toString(16); + destination.push(segmentID); + destination.push('","'); + destination.push(request.placeholderPrefix); + destination.push(segmentID); + destination = destination.push('")\x3c/script>'); + return destination; +} +var flushingPartialBoundaries = !1; +function flushCompletedQueues(request, destination) { + try { + if (!(0 < request.pendingRootTasks)) { + var i, + completedRootSegment = request.completedRootSegment; + if (null !== completedRootSegment) { + if (5 === completedRootSegment.status) return; + var completedPreambleSegments = request.completedPreambleSegments; + if (null === completedPreambleSegments) return; + flushedByteSize = request.byteSize; + var resumableState = request.resumableState, + renderState = request.renderState, + preamble = renderState.preamble, + htmlChunks = preamble.htmlChunks, + headChunks = preamble.headChunks, + i$jscomp$0; + if (htmlChunks) { + for (i$jscomp$0 = 0; i$jscomp$0 < htmlChunks.length; i$jscomp$0++) + destination.push(htmlChunks[i$jscomp$0]); + if (headChunks) + for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++) + destination.push(headChunks[i$jscomp$0]); + else { + var chunk = startChunkForTag("head"); + destination.push(chunk); + destination.push(">"); + } + } else if (headChunks) + for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++) + destination.push(headChunks[i$jscomp$0]); + var charsetChunks = renderState.charsetChunks; + for (i$jscomp$0 = 0; i$jscomp$0 < charsetChunks.length; i$jscomp$0++) + destination.push(charsetChunks[i$jscomp$0]); + charsetChunks.length = 0; + renderState.preconnects.forEach(flushResource, destination); + renderState.preconnects.clear(); + var viewportChunks = renderState.viewportChunks; + for (i$jscomp$0 = 0; i$jscomp$0 < viewportChunks.length; i$jscomp$0++) + destination.push(viewportChunks[i$jscomp$0]); + viewportChunks.length = 0; + renderState.fontPreloads.forEach(flushResource, destination); + renderState.fontPreloads.clear(); + renderState.highImagePreloads.forEach(flushResource, destination); + renderState.highImagePreloads.clear(); + currentlyFlushingRenderState = renderState; + renderState.styles.forEach(flushStylesInPreamble, destination); + currentlyFlushingRenderState = null; + var importMapChunks = renderState.importMapChunks; + for (i$jscomp$0 = 0; i$jscomp$0 < importMapChunks.length; i$jscomp$0++) + destination.push(importMapChunks[i$jscomp$0]); + importMapChunks.length = 0; + renderState.bootstrapScripts.forEach(flushResource, destination); + renderState.scripts.forEach(flushResource, destination); + renderState.scripts.clear(); + renderState.bulkPreloads.forEach(flushResource, destination); + renderState.bulkPreloads.clear(); + resumableState.instructions |= 32; + var hoistableChunks = renderState.hoistableChunks; + for (i$jscomp$0 = 0; i$jscomp$0 < hoistableChunks.length; i$jscomp$0++) + destination.push(hoistableChunks[i$jscomp$0]); + for ( + resumableState = hoistableChunks.length = 0; + resumableState < completedPreambleSegments.length; + resumableState++ + ) { + var segments = completedPreambleSegments[resumableState]; + for (renderState = 0; renderState < segments.length; renderState++) + flushSegment(request, destination, segments[renderState], null); + } + var preamble$jscomp$0 = request.renderState.preamble, + headChunks$jscomp$0 = preamble$jscomp$0.headChunks; + if (preamble$jscomp$0.htmlChunks || headChunks$jscomp$0) { + var chunk$jscomp$0 = endChunkForTag("head"); + destination.push(chunk$jscomp$0); + } + var bodyChunks = preamble$jscomp$0.bodyChunks; + if (bodyChunks) + for ( + completedPreambleSegments = 0; + completedPreambleSegments < bodyChunks.length; + completedPreambleSegments++ + ) + destination.push(bodyChunks[completedPreambleSegments]); + flushSegment(request, destination, completedRootSegment, null); + request.completedRootSegment = null; + var renderState$jscomp$0 = request.renderState; + if ( + 0 !== request.allPendingTasks || + 0 !== request.clientRenderedBoundaries.length || + 0 !== request.completedBoundaries.length || + (null !== request.trackedPostpones && + (0 !== request.trackedPostpones.rootNodes.length || + null !== request.trackedPostpones.rootSlots)) + ) { + var resumableState$jscomp$0 = request.resumableState; + if (0 === (resumableState$jscomp$0.instructions & 64)) { + resumableState$jscomp$0.instructions |= 64; + destination.push(renderState$jscomp$0.startInlineScript); + if (0 === (resumableState$jscomp$0.instructions & 32)) { + resumableState$jscomp$0.instructions |= 32; + var shellId = "_" + resumableState$jscomp$0.idPrefix + "R_"; + destination.push(' id="'); + var chunk$jscomp$1 = escapeTextForBrowser(shellId); + destination.push(chunk$jscomp$1); + destination.push('"'); + } + destination.push(">"); + destination.push( + "requestAnimationFrame(function(){$RT=performance.now()});" + ); + destination.push("\x3c/script>"); + } + } + writeBootstrap(destination, renderState$jscomp$0); + } + var renderState$jscomp$1 = request.renderState; + completedRootSegment = 0; + var viewportChunks$jscomp$0 = renderState$jscomp$1.viewportChunks; + for ( + completedRootSegment = 0; + completedRootSegment < viewportChunks$jscomp$0.length; + completedRootSegment++ + ) + destination.push(viewportChunks$jscomp$0[completedRootSegment]); + viewportChunks$jscomp$0.length = 0; + renderState$jscomp$1.preconnects.forEach(flushResource, destination); + renderState$jscomp$1.preconnects.clear(); + renderState$jscomp$1.fontPreloads.forEach(flushResource, destination); + renderState$jscomp$1.fontPreloads.clear(); + renderState$jscomp$1.highImagePreloads.forEach( + flushResource, + destination + ); + renderState$jscomp$1.highImagePreloads.clear(); + renderState$jscomp$1.styles.forEach(preloadLateStyles, destination); + renderState$jscomp$1.scripts.forEach(flushResource, destination); + renderState$jscomp$1.scripts.clear(); + renderState$jscomp$1.bulkPreloads.forEach(flushResource, destination); + renderState$jscomp$1.bulkPreloads.clear(); + var hoistableChunks$jscomp$0 = renderState$jscomp$1.hoistableChunks; + for ( + completedRootSegment = 0; + completedRootSegment < hoistableChunks$jscomp$0.length; + completedRootSegment++ + ) + destination.push(hoistableChunks$jscomp$0[completedRootSegment]); + hoistableChunks$jscomp$0.length = 0; + var clientRenderedBoundaries = request.clientRenderedBoundaries; + for (i = 0; i < clientRenderedBoundaries.length; i++) { + var boundary = clientRenderedBoundaries[i]; + renderState$jscomp$1 = destination; + var resumableState$jscomp$1 = request.resumableState, + renderState$jscomp$2 = request.renderState, + id = boundary.rootSegmentID, + errorDigest = boundary.errorDigest; + renderState$jscomp$1.push(renderState$jscomp$2.startInlineScript); + renderState$jscomp$1.push(">"); + 0 === (resumableState$jscomp$1.instructions & 4) + ? ((resumableState$jscomp$1.instructions |= 4), + renderState$jscomp$1.push( + '$RX=function(b,c,d,e,f){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data="$!",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),f&&(a.cstck=f),b._reactRetry&&b._reactRetry())};;$RX("' + )) + : renderState$jscomp$1.push('$RX("'); + renderState$jscomp$1.push(renderState$jscomp$2.boundaryPrefix); + var chunk$jscomp$2 = id.toString(16); + renderState$jscomp$1.push(chunk$jscomp$2); + renderState$jscomp$1.push('"'); + if (errorDigest) { + renderState$jscomp$1.push(","); + var chunk$jscomp$3 = escapeJSStringsForInstructionScripts( + errorDigest || "" + ); + renderState$jscomp$1.push(chunk$jscomp$3); + } + var JSCompiler_inline_result = + renderState$jscomp$1.push(")\x3c/script>"); + if (!JSCompiler_inline_result) { + request.destination = null; + i++; + clientRenderedBoundaries.splice(0, i); + return; + } + } + clientRenderedBoundaries.splice(0, i); + var completedBoundaries = request.completedBoundaries; + for (i = 0; i < completedBoundaries.length; i++) + if ( + !flushCompletedBoundary(request, destination, completedBoundaries[i]) + ) { + request.destination = null; + i++; + completedBoundaries.splice(0, i); + return; + } + completedBoundaries.splice(0, i); + flushingPartialBoundaries = !0; + var partialBoundaries = request.partialBoundaries; + for (i = 0; i < partialBoundaries.length; i++) { + var boundary$69 = partialBoundaries[i]; + a: { + clientRenderedBoundaries = request; + boundary = destination; + flushedByteSize = boundary$69.byteSize; + var completedSegments = boundary$69.completedSegments; + for ( + JSCompiler_inline_result = 0; + JSCompiler_inline_result < completedSegments.length; + JSCompiler_inline_result++ + ) + if ( + !flushPartiallyCompletedSegment( + clientRenderedBoundaries, + boundary, + boundary$69, + completedSegments[JSCompiler_inline_result] + ) + ) { + JSCompiler_inline_result++; + completedSegments.splice(0, JSCompiler_inline_result); + var JSCompiler_inline_result$jscomp$0 = !1; + break a; + } + completedSegments.splice(0, JSCompiler_inline_result); + var row = boundary$69.row; + null !== row && + row.together && + 1 === boundary$69.pendingTasks && + (1 === row.pendingTasks + ? unblockSuspenseListRow( + clientRenderedBoundaries, + row, + row.hoistables + ) + : row.pendingTasks--); + JSCompiler_inline_result$jscomp$0 = writeHoistablesForBoundary( + boundary, + boundary$69.contentState, + clientRenderedBoundaries.renderState + ); + } + if (!JSCompiler_inline_result$jscomp$0) { + request.destination = null; + i++; + partialBoundaries.splice(0, i); + return; + } + } + partialBoundaries.splice(0, i); + flushingPartialBoundaries = !1; + var largeBoundaries = request.completedBoundaries; + for (i = 0; i < largeBoundaries.length; i++) + if (!flushCompletedBoundary(request, destination, largeBoundaries[i])) { + request.destination = null; + i++; + largeBoundaries.splice(0, i); + return; + } + largeBoundaries.splice(0, i); + } + } finally { + (flushingPartialBoundaries = !1), + 0 === request.allPendingTasks && + 0 === request.clientRenderedBoundaries.length && + 0 === request.completedBoundaries.length && + ((request.flushScheduled = !1), + (i = request.resumableState), + i.hasBody && + ((partialBoundaries = endChunkForTag("body")), + destination.push(partialBoundaries)), + i.hasHtml && ((i = endChunkForTag("html")), destination.push(i)), + (request.status = 14), + destination.push(null), + (request.destination = null)); + } +} +function enqueueFlush(request) { + if ( + !1 === request.flushScheduled && + 0 === request.pingedTasks.length && + null !== request.destination + ) { + request.flushScheduled = !0; + var destination = request.destination; + destination + ? flushCompletedQueues(request, destination) + : (request.flushScheduled = !1); + } +} +function startFlowing(request, destination) { + if (13 === request.status) + (request.status = 14), destination.destroy(request.fatalError); + else if (14 !== request.status && null === request.destination) { + request.destination = destination; + try { + flushCompletedQueues(request, destination); + } catch (error) { + logRecoverableError(request, error, {}), fatalError(request, error); + } + } +} +function abort(request, reason) { + if (11 === request.status || 10 === request.status) request.status = 12; + try { + var abortableTasks = request.abortableTasks; + if (0 < abortableTasks.size) { + var error = + void 0 === reason + ? Error("The render was aborted by the server without a reason.") + : "object" === typeof reason && + null !== reason && + "function" === typeof reason.then + ? Error("The render was aborted by the server with a promise.") + : reason; + request.fatalError = error; + abortableTasks.forEach(function (task) { + return abortTask(task, request, error); + }); + abortableTasks.clear(); + } + null !== request.destination && + flushCompletedQueues(request, request.destination); + } catch (error$71) { + logRecoverableError(request, error$71, {}), fatalError(request, error$71); + } +} +function addToReplayParent(node, parentKeyPath, trackedPostpones) { + if (null === parentKeyPath) trackedPostpones.rootNodes.push(node); + else { + var workingMap = trackedPostpones.workingMap, + parentNode = workingMap.get(parentKeyPath); + void 0 === parentNode && + ((parentNode = [parentKeyPath[1], parentKeyPath[2], [], null]), + workingMap.set(parentKeyPath, parentNode), + addToReplayParent(parentNode, parentKeyPath[0], trackedPostpones)); + parentNode[2].push(node); + } +} +function onError() {} +function renderToStringImpl( + children, + options, + generateStaticMarkup, + abortReason +) { + var didFatal = !1, + fatalError = null, + result = "", + readyToStream = !1; + options = createResumableState(options ? options.identifierPrefix : void 0); + children = createRequest( + children, + options, + createRenderState(options, generateStaticMarkup), + createFormatContext(0, null, 0, null), + Infinity, + onError, + void 0, + function () { + readyToStream = !0; + }, + void 0, + void 0, + void 0 + ); + children.flushScheduled = null !== children.destination; + performWork(children); + 10 === children.status && (children.status = 11); + null === children.trackedPostpones && + safelyEmitEarlyPreloads(children, 0 === children.pendingRootTasks); + abort(children, abortReason); + startFlowing(children, { + push: function (chunk) { + null !== chunk && (result += chunk); + return !0; + }, + destroy: function (error) { + didFatal = !0; + fatalError = error; + } + }); + if (didFatal && fatalError !== abortReason) throw fatalError; + if (!readyToStream) + throw Error( + "A component suspended while responding to synchronous input. This will cause the UI to be replaced with a loading indicator. To fix, updates that suspend should be wrapped with startTransition." + ); + return result; +} +exports.renderToStaticMarkup = function (children, options) { + return renderToStringImpl( + children, + options, + !0, + 'The server used "renderToStaticMarkup" which does not support Suspense. If you intended to have the server wait for the suspended component please switch to "renderToPipeableStream" which supports Suspense on the server' + ); +}; +exports.renderToString = function (children, options) { + return renderToStringImpl( + children, + options, + !1, + 'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToPipeableStream" which supports Suspense on the server' + ); +}; +exports.version = "19.2.4"; diff --git a/build/node_modules/react-dom/cjs/react-dom-server.browser.production.js b/build/node_modules/react-dom/cjs/react-dom-server.browser.production.js new file mode 100644 index 0000000..976fec3 --- /dev/null +++ b/build/node_modules/react-dom/cjs/react-dom-server.browser.production.js @@ -0,0 +1,7410 @@ +/** + * @license React + * react-dom-server.browser.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/* + + + JS Implementation of MurmurHash3 (r136) (as of May 20, 2011) + + Copyright (c) 2011 Gary Court + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +*/ +"use strict"; +var React = require("react"), + ReactDOM = require("react-dom"); +function formatProdErrorMessage(code) { + var url = "https://react.dev/errors/" + code; + if (1 < arguments.length) { + url += "?args[]=" + encodeURIComponent(arguments[1]); + for (var i = 2; i < arguments.length; i++) + url += "&args[]=" + encodeURIComponent(arguments[i]); + } + return ( + "Minified React error #" + + code + + "; visit " + + url + + " for the full message or use the non-minified dev environment for full errors and additional helpful warnings." + ); +} +var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), + REACT_PORTAL_TYPE = Symbol.for("react.portal"), + REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), + REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), + REACT_PROFILER_TYPE = Symbol.for("react.profiler"), + REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), + REACT_CONTEXT_TYPE = Symbol.for("react.context"), + REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), + REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), + REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), + REACT_MEMO_TYPE = Symbol.for("react.memo"), + REACT_LAZY_TYPE = Symbol.for("react.lazy"), + REACT_SCOPE_TYPE = Symbol.for("react.scope"), + REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), + REACT_LEGACY_HIDDEN_TYPE = Symbol.for("react.legacy_hidden"), + REACT_MEMO_CACHE_SENTINEL = Symbol.for("react.memo_cache_sentinel"), + REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"), + MAYBE_ITERATOR_SYMBOL = Symbol.iterator; +function getIteratorFn(maybeIterable) { + if (null === maybeIterable || "object" !== typeof maybeIterable) return null; + maybeIterable = + (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) || + maybeIterable["@@iterator"]; + return "function" === typeof maybeIterable ? maybeIterable : null; +} +var isArrayImpl = Array.isArray; +function murmurhash3_32_gc(key, seed) { + var remainder = key.length & 3; + var bytes = key.length - remainder; + var h1 = seed; + for (seed = 0; seed < bytes; ) { + var k1 = + (key.charCodeAt(seed) & 255) | + ((key.charCodeAt(++seed) & 255) << 8) | + ((key.charCodeAt(++seed) & 255) << 16) | + ((key.charCodeAt(++seed) & 255) << 24); + ++seed; + k1 = + (3432918353 * (k1 & 65535) + + (((3432918353 * (k1 >>> 16)) & 65535) << 16)) & + 4294967295; + k1 = (k1 << 15) | (k1 >>> 17); + k1 = + (461845907 * (k1 & 65535) + (((461845907 * (k1 >>> 16)) & 65535) << 16)) & + 4294967295; + h1 ^= k1; + h1 = (h1 << 13) | (h1 >>> 19); + h1 = (5 * (h1 & 65535) + (((5 * (h1 >>> 16)) & 65535) << 16)) & 4294967295; + h1 = (h1 & 65535) + 27492 + ((((h1 >>> 16) + 58964) & 65535) << 16); + } + k1 = 0; + switch (remainder) { + case 3: + k1 ^= (key.charCodeAt(seed + 2) & 255) << 16; + case 2: + k1 ^= (key.charCodeAt(seed + 1) & 255) << 8; + case 1: + (k1 ^= key.charCodeAt(seed) & 255), + (k1 = + (3432918353 * (k1 & 65535) + + (((3432918353 * (k1 >>> 16)) & 65535) << 16)) & + 4294967295), + (k1 = (k1 << 15) | (k1 >>> 17)), + (h1 ^= + (461845907 * (k1 & 65535) + + (((461845907 * (k1 >>> 16)) & 65535) << 16)) & + 4294967295); + } + h1 ^= key.length; + h1 ^= h1 >>> 16; + h1 = + (2246822507 * (h1 & 65535) + (((2246822507 * (h1 >>> 16)) & 65535) << 16)) & + 4294967295; + h1 ^= h1 >>> 13; + h1 = + (3266489909 * (h1 & 65535) + (((3266489909 * (h1 >>> 16)) & 65535) << 16)) & + 4294967295; + return (h1 ^ (h1 >>> 16)) >>> 0; +} +var channel = new MessageChannel(), + taskQueue = []; +channel.port1.onmessage = function () { + var task = taskQueue.shift(); + task && task(); +}; +function scheduleWork(callback) { + taskQueue.push(callback); + channel.port2.postMessage(null); +} +function handleErrorInNextTick(error) { + setTimeout(function () { + throw error; + }); +} +var LocalPromise = Promise, + scheduleMicrotask = + "function" === typeof queueMicrotask + ? queueMicrotask + : function (callback) { + LocalPromise.resolve(null) + .then(callback) + .catch(handleErrorInNextTick); + }, + currentView = null, + writtenBytes = 0; +function writeChunk(destination, chunk) { + if (0 !== chunk.byteLength) + if (2048 < chunk.byteLength) + 0 < writtenBytes && + (destination.enqueue( + new Uint8Array(currentView.buffer, 0, writtenBytes) + ), + (currentView = new Uint8Array(2048)), + (writtenBytes = 0)), + destination.enqueue(chunk); + else { + var allowableBytes = currentView.length - writtenBytes; + allowableBytes < chunk.byteLength && + (0 === allowableBytes + ? destination.enqueue(currentView) + : (currentView.set(chunk.subarray(0, allowableBytes), writtenBytes), + destination.enqueue(currentView), + (chunk = chunk.subarray(allowableBytes))), + (currentView = new Uint8Array(2048)), + (writtenBytes = 0)); + currentView.set(chunk, writtenBytes); + writtenBytes += chunk.byteLength; + } +} +function writeChunkAndReturn(destination, chunk) { + writeChunk(destination, chunk); + return !0; +} +function completeWriting(destination) { + currentView && + 0 < writtenBytes && + (destination.enqueue(new Uint8Array(currentView.buffer, 0, writtenBytes)), + (currentView = null), + (writtenBytes = 0)); +} +var textEncoder = new TextEncoder(); +function stringToChunk(content) { + return textEncoder.encode(content); +} +function stringToPrecomputedChunk(content) { + return textEncoder.encode(content); +} +function byteLengthOfChunk(chunk) { + return chunk.byteLength; +} +function closeWithError(destination, error) { + "function" === typeof destination.error + ? destination.error(error) + : destination.close(); +} +var assign = Object.assign, + hasOwnProperty = Object.prototype.hasOwnProperty, + VALID_ATTRIBUTE_NAME_REGEX = RegExp( + "^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$" + ), + illegalAttributeNameCache = {}, + validatedAttributeNameCache = {}; +function isAttributeNameSafe(attributeName) { + if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) + return !0; + if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1; + if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) + return (validatedAttributeNameCache[attributeName] = !0); + illegalAttributeNameCache[attributeName] = !0; + return !1; +} +var unitlessNumbers = new Set( + "animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split( + " " + ) + ), + aliases = new Map([ + ["acceptCharset", "accept-charset"], + ["htmlFor", "for"], + ["httpEquiv", "http-equiv"], + ["crossOrigin", "crossorigin"], + ["accentHeight", "accent-height"], + ["alignmentBaseline", "alignment-baseline"], + ["arabicForm", "arabic-form"], + ["baselineShift", "baseline-shift"], + ["capHeight", "cap-height"], + ["clipPath", "clip-path"], + ["clipRule", "clip-rule"], + ["colorInterpolation", "color-interpolation"], + ["colorInterpolationFilters", "color-interpolation-filters"], + ["colorProfile", "color-profile"], + ["colorRendering", "color-rendering"], + ["dominantBaseline", "dominant-baseline"], + ["enableBackground", "enable-background"], + ["fillOpacity", "fill-opacity"], + ["fillRule", "fill-rule"], + ["floodColor", "flood-color"], + ["floodOpacity", "flood-opacity"], + ["fontFamily", "font-family"], + ["fontSize", "font-size"], + ["fontSizeAdjust", "font-size-adjust"], + ["fontStretch", "font-stretch"], + ["fontStyle", "font-style"], + ["fontVariant", "font-variant"], + ["fontWeight", "font-weight"], + ["glyphName", "glyph-name"], + ["glyphOrientationHorizontal", "glyph-orientation-horizontal"], + ["glyphOrientationVertical", "glyph-orientation-vertical"], + ["horizAdvX", "horiz-adv-x"], + ["horizOriginX", "horiz-origin-x"], + ["imageRendering", "image-rendering"], + ["letterSpacing", "letter-spacing"], + ["lightingColor", "lighting-color"], + ["markerEnd", "marker-end"], + ["markerMid", "marker-mid"], + ["markerStart", "marker-start"], + ["overlinePosition", "overline-position"], + ["overlineThickness", "overline-thickness"], + ["paintOrder", "paint-order"], + ["panose-1", "panose-1"], + ["pointerEvents", "pointer-events"], + ["renderingIntent", "rendering-intent"], + ["shapeRendering", "shape-rendering"], + ["stopColor", "stop-color"], + ["stopOpacity", "stop-opacity"], + ["strikethroughPosition", "strikethrough-position"], + ["strikethroughThickness", "strikethrough-thickness"], + ["strokeDasharray", "stroke-dasharray"], + ["strokeDashoffset", "stroke-dashoffset"], + ["strokeLinecap", "stroke-linecap"], + ["strokeLinejoin", "stroke-linejoin"], + ["strokeMiterlimit", "stroke-miterlimit"], + ["strokeOpacity", "stroke-opacity"], + ["strokeWidth", "stroke-width"], + ["textAnchor", "text-anchor"], + ["textDecoration", "text-decoration"], + ["textRendering", "text-rendering"], + ["transformOrigin", "transform-origin"], + ["underlinePosition", "underline-position"], + ["underlineThickness", "underline-thickness"], + ["unicodeBidi", "unicode-bidi"], + ["unicodeRange", "unicode-range"], + ["unitsPerEm", "units-per-em"], + ["vAlphabetic", "v-alphabetic"], + ["vHanging", "v-hanging"], + ["vIdeographic", "v-ideographic"], + ["vMathematical", "v-mathematical"], + ["vectorEffect", "vector-effect"], + ["vertAdvY", "vert-adv-y"], + ["vertOriginX", "vert-origin-x"], + ["vertOriginY", "vert-origin-y"], + ["wordSpacing", "word-spacing"], + ["writingMode", "writing-mode"], + ["xmlnsXlink", "xmlns:xlink"], + ["xHeight", "x-height"] + ]), + matchHtmlRegExp = /["'&<>]/; +function escapeTextForBrowser(text) { + if ( + "boolean" === typeof text || + "number" === typeof text || + "bigint" === typeof text + ) + return "" + text; + text = "" + text; + var match = matchHtmlRegExp.exec(text); + if (match) { + var html = "", + index, + lastIndex = 0; + for (index = match.index; index < text.length; index++) { + switch (text.charCodeAt(index)) { + case 34: + match = """; + break; + case 38: + match = "&"; + break; + case 39: + match = "'"; + break; + case 60: + match = "<"; + break; + case 62: + match = ">"; + break; + default: + continue; + } + lastIndex !== index && (html += text.slice(lastIndex, index)); + lastIndex = index + 1; + html += match; + } + text = lastIndex !== index ? html + text.slice(lastIndex, index) : html; + } + return text; +} +var uppercasePattern = /([A-Z])/g, + msPattern = /^ms-/, + isJavaScriptProtocol = + /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i; +function sanitizeURL(url) { + return isJavaScriptProtocol.test("" + url) + ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')" + : url; +} +var ReactSharedInternals = + React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, + ReactDOMSharedInternals = + ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, + sharedNotPendingObject = { + pending: !1, + data: null, + method: null, + action: null + }, + previousDispatcher = ReactDOMSharedInternals.d; +ReactDOMSharedInternals.d = { + f: previousDispatcher.f, + r: previousDispatcher.r, + D: prefetchDNS, + C: preconnect, + L: preload, + m: preloadModule, + X: preinitScript, + S: preinitStyle, + M: preinitModuleScript +}; +var PRELOAD_NO_CREDS = [], + currentlyFlushingRenderState = null; +stringToPrecomputedChunk('"></template>'); +var startInlineScript = stringToPrecomputedChunk("<script"), + endInlineScript = stringToPrecomputedChunk("\x3c/script>"), + startScriptSrc = stringToPrecomputedChunk('<script src="'), + startModuleSrc = stringToPrecomputedChunk('<script type="module" src="'), + scriptNonce = stringToPrecomputedChunk(' nonce="'), + scriptIntegirty = stringToPrecomputedChunk(' integrity="'), + scriptCrossOrigin = stringToPrecomputedChunk(' crossorigin="'), + endAsyncScript = stringToPrecomputedChunk(' async="">\x3c/script>'), + startInlineStyle = stringToPrecomputedChunk("<style"), + scriptRegex = /(<\/|<)(s)(cript)/gi; +function scriptReplacer(match, prefix, s, suffix) { + return "" + prefix + ("s" === s ? "\\u0073" : "\\u0053") + suffix; +} +var importMapScriptStart = stringToPrecomputedChunk( + '<script type="importmap">' + ), + importMapScriptEnd = stringToPrecomputedChunk("\x3c/script>"); +function createRenderState( + resumableState, + nonce, + externalRuntimeConfig, + importMap, + onHeaders, + maxHeadersLength +) { + externalRuntimeConfig = + "string" === typeof nonce ? nonce : nonce && nonce.script; + var inlineScriptWithNonce = + void 0 === externalRuntimeConfig + ? startInlineScript + : stringToPrecomputedChunk( + '<script nonce="' + + escapeTextForBrowser(externalRuntimeConfig) + + '"' + ), + nonceStyle = "string" === typeof nonce ? void 0 : nonce && nonce.style, + inlineStyleWithNonce = + void 0 === nonceStyle + ? startInlineStyle + : stringToPrecomputedChunk( + '<style nonce="' + escapeTextForBrowser(nonceStyle) + '"' + ), + idPrefix = resumableState.idPrefix, + bootstrapChunks = [], + bootstrapScriptContent = resumableState.bootstrapScriptContent, + bootstrapScripts = resumableState.bootstrapScripts, + bootstrapModules = resumableState.bootstrapModules; + void 0 !== bootstrapScriptContent && + (bootstrapChunks.push(inlineScriptWithNonce), + pushCompletedShellIdAttribute(bootstrapChunks, resumableState), + bootstrapChunks.push( + endOfStartTag, + stringToChunk( + ("" + bootstrapScriptContent).replace(scriptRegex, scriptReplacer) + ), + endInlineScript + )); + bootstrapScriptContent = []; + void 0 !== importMap && + (bootstrapScriptContent.push(importMapScriptStart), + bootstrapScriptContent.push( + stringToChunk( + ("" + JSON.stringify(importMap)).replace(scriptRegex, scriptReplacer) + ) + ), + bootstrapScriptContent.push(importMapScriptEnd)); + importMap = onHeaders + ? { + preconnects: "", + fontPreloads: "", + highImagePreloads: "", + remainingCapacity: + 2 + ("number" === typeof maxHeadersLength ? maxHeadersLength : 2e3) + } + : null; + onHeaders = { + placeholderPrefix: stringToPrecomputedChunk(idPrefix + "P:"), + segmentPrefix: stringToPrecomputedChunk(idPrefix + "S:"), + boundaryPrefix: stringToPrecomputedChunk(idPrefix + "B:"), + startInlineScript: inlineScriptWithNonce, + startInlineStyle: inlineStyleWithNonce, + preamble: createPreambleState(), + externalRuntimeScript: null, + bootstrapChunks: bootstrapChunks, + importMapChunks: bootstrapScriptContent, + onHeaders: onHeaders, + headers: importMap, + resets: { + font: {}, + dns: {}, + connect: { default: {}, anonymous: {}, credentials: {} }, + image: {}, + style: {} + }, + charsetChunks: [], + viewportChunks: [], + hoistableChunks: [], + preconnects: new Set(), + fontPreloads: new Set(), + highImagePreloads: new Set(), + styles: new Map(), + bootstrapScripts: new Set(), + scripts: new Set(), + bulkPreloads: new Set(), + preloads: { + images: new Map(), + stylesheets: new Map(), + scripts: new Map(), + moduleScripts: new Map() + }, + nonce: { script: externalRuntimeConfig, style: nonceStyle }, + hoistableState: null, + stylesToHoist: !1 + }; + if (void 0 !== bootstrapScripts) + for (importMap = 0; importMap < bootstrapScripts.length; importMap++) + (idPrefix = bootstrapScripts[importMap]), + (nonceStyle = inlineScriptWithNonce = void 0), + (inlineStyleWithNonce = { + rel: "preload", + as: "script", + fetchPriority: "low", + nonce: nonce + }), + "string" === typeof idPrefix + ? (inlineStyleWithNonce.href = maxHeadersLength = idPrefix) + : ((inlineStyleWithNonce.href = maxHeadersLength = idPrefix.src), + (inlineStyleWithNonce.integrity = nonceStyle = + "string" === typeof idPrefix.integrity + ? idPrefix.integrity + : void 0), + (inlineStyleWithNonce.crossOrigin = inlineScriptWithNonce = + "string" === typeof idPrefix || null == idPrefix.crossOrigin + ? void 0 + : "use-credentials" === idPrefix.crossOrigin + ? "use-credentials" + : "")), + (idPrefix = resumableState), + (bootstrapScriptContent = maxHeadersLength), + (idPrefix.scriptResources[bootstrapScriptContent] = null), + (idPrefix.moduleScriptResources[bootstrapScriptContent] = null), + (idPrefix = []), + pushLinkImpl(idPrefix, inlineStyleWithNonce), + onHeaders.bootstrapScripts.add(idPrefix), + bootstrapChunks.push( + startScriptSrc, + stringToChunk(escapeTextForBrowser(maxHeadersLength)), + attributeEnd + ), + externalRuntimeConfig && + bootstrapChunks.push( + scriptNonce, + stringToChunk(escapeTextForBrowser(externalRuntimeConfig)), + attributeEnd + ), + "string" === typeof nonceStyle && + bootstrapChunks.push( + scriptIntegirty, + stringToChunk(escapeTextForBrowser(nonceStyle)), + attributeEnd + ), + "string" === typeof inlineScriptWithNonce && + bootstrapChunks.push( + scriptCrossOrigin, + stringToChunk(escapeTextForBrowser(inlineScriptWithNonce)), + attributeEnd + ), + pushCompletedShellIdAttribute(bootstrapChunks, resumableState), + bootstrapChunks.push(endAsyncScript); + if (void 0 !== bootstrapModules) + for (nonce = 0; nonce < bootstrapModules.length; nonce++) + (nonceStyle = bootstrapModules[nonce]), + (maxHeadersLength = importMap = void 0), + (inlineScriptWithNonce = { + rel: "modulepreload", + fetchPriority: "low", + nonce: externalRuntimeConfig + }), + "string" === typeof nonceStyle + ? (inlineScriptWithNonce.href = bootstrapScripts = nonceStyle) + : ((inlineScriptWithNonce.href = bootstrapScripts = nonceStyle.src), + (inlineScriptWithNonce.integrity = maxHeadersLength = + "string" === typeof nonceStyle.integrity + ? nonceStyle.integrity + : void 0), + (inlineScriptWithNonce.crossOrigin = importMap = + "string" === typeof nonceStyle || null == nonceStyle.crossOrigin + ? void 0 + : "use-credentials" === nonceStyle.crossOrigin + ? "use-credentials" + : "")), + (nonceStyle = resumableState), + (inlineStyleWithNonce = bootstrapScripts), + (nonceStyle.scriptResources[inlineStyleWithNonce] = null), + (nonceStyle.moduleScriptResources[inlineStyleWithNonce] = null), + (nonceStyle = []), + pushLinkImpl(nonceStyle, inlineScriptWithNonce), + onHeaders.bootstrapScripts.add(nonceStyle), + bootstrapChunks.push( + startModuleSrc, + stringToChunk(escapeTextForBrowser(bootstrapScripts)), + attributeEnd + ), + externalRuntimeConfig && + bootstrapChunks.push( + scriptNonce, + stringToChunk(escapeTextForBrowser(externalRuntimeConfig)), + attributeEnd + ), + "string" === typeof maxHeadersLength && + bootstrapChunks.push( + scriptIntegirty, + stringToChunk(escapeTextForBrowser(maxHeadersLength)), + attributeEnd + ), + "string" === typeof importMap && + bootstrapChunks.push( + scriptCrossOrigin, + stringToChunk(escapeTextForBrowser(importMap)), + attributeEnd + ), + pushCompletedShellIdAttribute(bootstrapChunks, resumableState), + bootstrapChunks.push(endAsyncScript); + return onHeaders; +} +function createResumableState( + identifierPrefix, + externalRuntimeConfig, + bootstrapScriptContent, + bootstrapScripts, + bootstrapModules +) { + return { + idPrefix: void 0 === identifierPrefix ? "" : identifierPrefix, + nextFormID: 0, + streamingFormat: 0, + bootstrapScriptContent: bootstrapScriptContent, + bootstrapScripts: bootstrapScripts, + bootstrapModules: bootstrapModules, + instructions: 0, + hasBody: !1, + hasHtml: !1, + unknownResources: {}, + dnsResources: {}, + connectResources: { default: {}, anonymous: {}, credentials: {} }, + imageResources: {}, + styleResources: {}, + scriptResources: {}, + moduleUnknownResources: {}, + moduleScriptResources: {} + }; +} +function createPreambleState() { + return { htmlChunks: null, headChunks: null, bodyChunks: null }; +} +function createFormatContext( + insertionMode, + selectedValue, + tagScope, + viewTransition +) { + return { + insertionMode: insertionMode, + selectedValue: selectedValue, + tagScope: tagScope, + viewTransition: viewTransition + }; +} +function createRootFormatContext(namespaceURI) { + return createFormatContext( + "http://www.w3.org/2000/svg" === namespaceURI + ? 4 + : "http://www.w3.org/1998/Math/MathML" === namespaceURI + ? 5 + : 0, + null, + 0, + null + ); +} +function getChildFormatContext(parentContext, type, props) { + var subtreeScope = parentContext.tagScope & -25; + switch (type) { + case "noscript": + return createFormatContext(2, null, subtreeScope | 1, null); + case "select": + return createFormatContext( + 2, + null != props.value ? props.value : props.defaultValue, + subtreeScope, + null + ); + case "svg": + return createFormatContext(4, null, subtreeScope, null); + case "picture": + return createFormatContext(2, null, subtreeScope | 2, null); + case "math": + return createFormatContext(5, null, subtreeScope, null); + case "foreignObject": + return createFormatContext(2, null, subtreeScope, null); + case "table": + return createFormatContext(6, null, subtreeScope, null); + case "thead": + case "tbody": + case "tfoot": + return createFormatContext(7, null, subtreeScope, null); + case "colgroup": + return createFormatContext(9, null, subtreeScope, null); + case "tr": + return createFormatContext(8, null, subtreeScope, null); + case "head": + if (2 > parentContext.insertionMode) + return createFormatContext(3, null, subtreeScope, null); + break; + case "html": + if (0 === parentContext.insertionMode) + return createFormatContext(1, null, subtreeScope, null); + } + return 6 <= parentContext.insertionMode || 2 > parentContext.insertionMode + ? createFormatContext(2, null, subtreeScope, null) + : parentContext.tagScope !== subtreeScope + ? createFormatContext( + parentContext.insertionMode, + parentContext.selectedValue, + subtreeScope, + null + ) + : parentContext; +} +function getSuspenseViewTransition(parentViewTransition) { + return null === parentViewTransition + ? null + : { + update: parentViewTransition.update, + enter: "none", + exit: "none", + share: parentViewTransition.update, + name: parentViewTransition.autoName, + autoName: parentViewTransition.autoName, + nameIdx: 0 + }; +} +function getSuspenseFallbackFormatContext(resumableState, parentContext) { + parentContext.tagScope & 32 && (resumableState.instructions |= 128); + return createFormatContext( + parentContext.insertionMode, + parentContext.selectedValue, + parentContext.tagScope | 12, + getSuspenseViewTransition(parentContext.viewTransition) + ); +} +function getSuspenseContentFormatContext(resumableState, parentContext) { + resumableState = getSuspenseViewTransition(parentContext.viewTransition); + var subtreeScope = parentContext.tagScope | 16; + null !== resumableState && + "none" !== resumableState.share && + (subtreeScope |= 64); + return createFormatContext( + parentContext.insertionMode, + parentContext.selectedValue, + subtreeScope, + resumableState + ); +} +var textSeparator = stringToPrecomputedChunk("\x3c!-- --\x3e"); +function pushTextInstance(target, text, renderState, textEmbedded) { + if ("" === text) return textEmbedded; + textEmbedded && target.push(textSeparator); + target.push(stringToChunk(escapeTextForBrowser(text))); + return !0; +} +var styleNameCache = new Map(), + styleAttributeStart = stringToPrecomputedChunk(' style="'), + styleAssign = stringToPrecomputedChunk(":"), + styleSeparator = stringToPrecomputedChunk(";"); +function pushStyleAttribute(target, style) { + if ("object" !== typeof style) throw Error(formatProdErrorMessage(62)); + var isFirst = !0, + styleName; + for (styleName in style) + if (hasOwnProperty.call(style, styleName)) { + var styleValue = style[styleName]; + if ( + null != styleValue && + "boolean" !== typeof styleValue && + "" !== styleValue + ) { + if (0 === styleName.indexOf("--")) { + var nameChunk = stringToChunk(escapeTextForBrowser(styleName)); + styleValue = stringToChunk( + escapeTextForBrowser(("" + styleValue).trim()) + ); + } else + (nameChunk = styleNameCache.get(styleName)), + void 0 === nameChunk && + ((nameChunk = stringToPrecomputedChunk( + escapeTextForBrowser( + styleName + .replace(uppercasePattern, "-$1") + .toLowerCase() + .replace(msPattern, "-ms-") + ) + )), + styleNameCache.set(styleName, nameChunk)), + (styleValue = + "number" === typeof styleValue + ? 0 === styleValue || unitlessNumbers.has(styleName) + ? stringToChunk("" + styleValue) + : stringToChunk(styleValue + "px") + : stringToChunk( + escapeTextForBrowser(("" + styleValue).trim()) + )); + isFirst + ? ((isFirst = !1), + target.push( + styleAttributeStart, + nameChunk, + styleAssign, + styleValue + )) + : target.push(styleSeparator, nameChunk, styleAssign, styleValue); + } + } + isFirst || target.push(attributeEnd); +} +var attributeSeparator = stringToPrecomputedChunk(" "), + attributeAssign = stringToPrecomputedChunk('="'), + attributeEnd = stringToPrecomputedChunk('"'), + attributeEmptyString = stringToPrecomputedChunk('=""'); +function pushBooleanAttribute(target, name, value) { + value && + "function" !== typeof value && + "symbol" !== typeof value && + target.push(attributeSeparator, stringToChunk(name), attributeEmptyString); +} +function pushStringAttribute(target, name, value) { + "function" !== typeof value && + "symbol" !== typeof value && + "boolean" !== typeof value && + target.push( + attributeSeparator, + stringToChunk(name), + attributeAssign, + stringToChunk(escapeTextForBrowser(value)), + attributeEnd + ); +} +var actionJavaScriptURL = stringToPrecomputedChunk( + escapeTextForBrowser( + "javascript:throw new Error('React form unexpectedly submitted.')" + ) + ), + startHiddenInputChunk = stringToPrecomputedChunk('<input type="hidden"'); +function pushAdditionalFormField(value, key) { + this.push(startHiddenInputChunk); + validateAdditionalFormField(value); + pushStringAttribute(this, "name", key); + pushStringAttribute(this, "value", value); + this.push(endOfStartTagSelfClosing); +} +function validateAdditionalFormField(value) { + if ("string" !== typeof value) throw Error(formatProdErrorMessage(480)); +} +function getCustomFormFields(resumableState, formAction) { + if ("function" === typeof formAction.$$FORM_ACTION) { + var id = resumableState.nextFormID++; + resumableState = resumableState.idPrefix + id; + try { + var customFields = formAction.$$FORM_ACTION(resumableState); + if (customFields) { + var formData = customFields.data; + null != formData && formData.forEach(validateAdditionalFormField); + } + return customFields; + } catch (x) { + if ("object" === typeof x && null !== x && "function" === typeof x.then) + throw x; + } + } + return null; +} +function pushFormActionAttribute( + target, + resumableState, + renderState, + formAction, + formEncType, + formMethod, + formTarget, + name +) { + var formData = null; + if ("function" === typeof formAction) { + var customFields = getCustomFormFields(resumableState, formAction); + null !== customFields + ? ((name = customFields.name), + (formAction = customFields.action || ""), + (formEncType = customFields.encType), + (formMethod = customFields.method), + (formTarget = customFields.target), + (formData = customFields.data)) + : (target.push( + attributeSeparator, + stringToChunk("formAction"), + attributeAssign, + actionJavaScriptURL, + attributeEnd + ), + (formTarget = formMethod = formEncType = formAction = name = null), + injectFormReplayingRuntime(resumableState, renderState)); + } + null != name && pushAttribute(target, "name", name); + null != formAction && pushAttribute(target, "formAction", formAction); + null != formEncType && pushAttribute(target, "formEncType", formEncType); + null != formMethod && pushAttribute(target, "formMethod", formMethod); + null != formTarget && pushAttribute(target, "formTarget", formTarget); + return formData; +} +function pushAttribute(target, name, value) { + switch (name) { + case "className": + pushStringAttribute(target, "class", value); + break; + case "tabIndex": + pushStringAttribute(target, "tabindex", value); + break; + case "dir": + case "role": + case "viewBox": + case "width": + case "height": + pushStringAttribute(target, name, value); + break; + case "style": + pushStyleAttribute(target, value); + break; + case "src": + case "href": + if ("" === value) break; + case "action": + case "formAction": + if ( + null == value || + "function" === typeof value || + "symbol" === typeof value || + "boolean" === typeof value + ) + break; + value = sanitizeURL("" + value); + target.push( + attributeSeparator, + stringToChunk(name), + attributeAssign, + stringToChunk(escapeTextForBrowser(value)), + attributeEnd + ); + break; + case "defaultValue": + case "defaultChecked": + case "innerHTML": + case "suppressContentEditableWarning": + case "suppressHydrationWarning": + case "ref": + break; + case "autoFocus": + case "multiple": + case "muted": + pushBooleanAttribute(target, name.toLowerCase(), value); + break; + case "xlinkHref": + if ( + "function" === typeof value || + "symbol" === typeof value || + "boolean" === typeof value + ) + break; + value = sanitizeURL("" + value); + target.push( + attributeSeparator, + stringToChunk("xlink:href"), + attributeAssign, + stringToChunk(escapeTextForBrowser(value)), + attributeEnd + ); + break; + case "contentEditable": + case "spellCheck": + case "draggable": + case "value": + case "autoReverse": + case "externalResourcesRequired": + case "focusable": + case "preserveAlpha": + "function" !== typeof value && + "symbol" !== typeof value && + target.push( + attributeSeparator, + stringToChunk(name), + attributeAssign, + stringToChunk(escapeTextForBrowser(value)), + attributeEnd + ); + break; + case "inert": + case "allowFullScreen": + case "async": + case "autoPlay": + case "controls": + case "default": + case "defer": + case "disabled": + case "disablePictureInPicture": + case "disableRemotePlayback": + case "formNoValidate": + case "hidden": + case "loop": + case "noModule": + case "noValidate": + case "open": + case "playsInline": + case "readOnly": + case "required": + case "reversed": + case "scoped": + case "seamless": + case "itemScope": + value && + "function" !== typeof value && + "symbol" !== typeof value && + target.push( + attributeSeparator, + stringToChunk(name), + attributeEmptyString + ); + break; + case "capture": + case "download": + !0 === value + ? target.push( + attributeSeparator, + stringToChunk(name), + attributeEmptyString + ) + : !1 !== value && + "function" !== typeof value && + "symbol" !== typeof value && + target.push( + attributeSeparator, + stringToChunk(name), + attributeAssign, + stringToChunk(escapeTextForBrowser(value)), + attributeEnd + ); + break; + case "cols": + case "rows": + case "size": + case "span": + "function" !== typeof value && + "symbol" !== typeof value && + !isNaN(value) && + 1 <= value && + target.push( + attributeSeparator, + stringToChunk(name), + attributeAssign, + stringToChunk(escapeTextForBrowser(value)), + attributeEnd + ); + break; + case "rowSpan": + case "start": + "function" === typeof value || + "symbol" === typeof value || + isNaN(value) || + target.push( + attributeSeparator, + stringToChunk(name), + attributeAssign, + stringToChunk(escapeTextForBrowser(value)), + attributeEnd + ); + break; + case "xlinkActuate": + pushStringAttribute(target, "xlink:actuate", value); + break; + case "xlinkArcrole": + pushStringAttribute(target, "xlink:arcrole", value); + break; + case "xlinkRole": + pushStringAttribute(target, "xlink:role", value); + break; + case "xlinkShow": + pushStringAttribute(target, "xlink:show", value); + break; + case "xlinkTitle": + pushStringAttribute(target, "xlink:title", value); + break; + case "xlinkType": + pushStringAttribute(target, "xlink:type", value); + break; + case "xmlBase": + pushStringAttribute(target, "xml:base", value); + break; + case "xmlLang": + pushStringAttribute(target, "xml:lang", value); + break; + case "xmlSpace": + pushStringAttribute(target, "xml:space", value); + break; + default: + if ( + !(2 < name.length) || + ("o" !== name[0] && "O" !== name[0]) || + ("n" !== name[1] && "N" !== name[1]) + ) + if (((name = aliases.get(name) || name), isAttributeNameSafe(name))) { + switch (typeof value) { + case "function": + case "symbol": + return; + case "boolean": + var prefix$8 = name.toLowerCase().slice(0, 5); + if ("data-" !== prefix$8 && "aria-" !== prefix$8) return; + } + target.push( + attributeSeparator, + stringToChunk(name), + attributeAssign, + stringToChunk(escapeTextForBrowser(value)), + attributeEnd + ); + } + } +} +var endOfStartTag = stringToPrecomputedChunk(">"), + endOfStartTagSelfClosing = stringToPrecomputedChunk("/>"); +function pushInnerHTML(target, innerHTML, children) { + if (null != innerHTML) { + if (null != children) throw Error(formatProdErrorMessage(60)); + if ("object" !== typeof innerHTML || !("__html" in innerHTML)) + throw Error(formatProdErrorMessage(61)); + innerHTML = innerHTML.__html; + null !== innerHTML && + void 0 !== innerHTML && + target.push(stringToChunk("" + innerHTML)); + } +} +function flattenOptionChildren(children) { + var content = ""; + React.Children.forEach(children, function (child) { + null != child && (content += child); + }); + return content; +} +var selectedMarkerAttribute = stringToPrecomputedChunk(' selected=""'), + formReplayingRuntimeScript = stringToPrecomputedChunk( + 'addEventListener("submit",function(a){if(!a.defaultPrevented){var c=a.target,d=a.submitter,e=c.action,b=d;if(d){var f=d.getAttribute("formAction");null!=f&&(e=f,b=null)}"javascript:throw new Error(\'React form unexpectedly submitted.\')"===e&&(a.preventDefault(),b?(a=document.createElement("input"),a.name=b.name,a.value=b.value,b.parentNode.insertBefore(a,b),b=new FormData(c),a.parentNode.removeChild(a)):b=new FormData(c),a=c.ownerDocument||c,(a.$$reactFormReplay=a.$$reactFormReplay||[]).push(c,d,b))}});' + ); +function injectFormReplayingRuntime(resumableState, renderState) { + if (0 === (resumableState.instructions & 16)) { + resumableState.instructions |= 16; + var preamble = renderState.preamble, + bootstrapChunks = renderState.bootstrapChunks; + (preamble.htmlChunks || preamble.headChunks) && 0 === bootstrapChunks.length + ? (bootstrapChunks.push(renderState.startInlineScript), + pushCompletedShellIdAttribute(bootstrapChunks, resumableState), + bootstrapChunks.push( + endOfStartTag, + formReplayingRuntimeScript, + endInlineScript + )) + : bootstrapChunks.unshift( + renderState.startInlineScript, + endOfStartTag, + formReplayingRuntimeScript, + endInlineScript + ); + } +} +var formStateMarkerIsMatching = stringToPrecomputedChunk("\x3c!--F!--\x3e"), + formStateMarkerIsNotMatching = stringToPrecomputedChunk("\x3c!--F--\x3e"); +function pushLinkImpl(target, props) { + target.push(startChunkForTag("link")); + for (var propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + case "dangerouslySetInnerHTML": + throw Error(formatProdErrorMessage(399, "link")); + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(endOfStartTagSelfClosing); + return null; +} +var styleRegex = /(<\/|<)(s)(tyle)/gi; +function styleReplacer(match, prefix, s, suffix) { + return "" + prefix + ("s" === s ? "\\73 " : "\\53 ") + suffix; +} +function pushSelfClosing(target, props, tag) { + target.push(startChunkForTag(tag)); + for (var propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + case "dangerouslySetInnerHTML": + throw Error(formatProdErrorMessage(399, tag)); + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(endOfStartTagSelfClosing); + return null; +} +function pushTitleImpl(target, props) { + target.push(startChunkForTag("title")); + var children = null, + innerHTML = null, + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + children = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(endOfStartTag); + props = Array.isArray(children) + ? 2 > children.length + ? children[0] + : null + : children; + "function" !== typeof props && + "symbol" !== typeof props && + null !== props && + void 0 !== props && + target.push(stringToChunk(escapeTextForBrowser("" + props))); + pushInnerHTML(target, innerHTML, children); + target.push(endChunkForTag("title")); + return null; +} +var headPreambleContributionChunk = + stringToPrecomputedChunk("\x3c!--head--\x3e"), + bodyPreambleContributionChunk = stringToPrecomputedChunk("\x3c!--body--\x3e"), + htmlPreambleContributionChunk = stringToPrecomputedChunk("\x3c!--html--\x3e"); +function pushScriptImpl(target, props) { + target.push(startChunkForTag("script")); + var children = null, + innerHTML = null, + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + children = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(endOfStartTag); + pushInnerHTML(target, innerHTML, children); + "string" === typeof children && + target.push( + stringToChunk(("" + children).replace(scriptRegex, scriptReplacer)) + ); + target.push(endChunkForTag("script")); + return null; +} +function pushStartSingletonElement(target, props, tag) { + target.push(startChunkForTag(tag)); + var innerHTML = (tag = null), + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + tag = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(endOfStartTag); + pushInnerHTML(target, innerHTML, tag); + return tag; +} +function pushStartGenericElement(target, props, tag) { + target.push(startChunkForTag(tag)); + var innerHTML = (tag = null), + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + tag = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(endOfStartTag); + pushInnerHTML(target, innerHTML, tag); + return "string" === typeof tag + ? (target.push(stringToChunk(escapeTextForBrowser(tag))), null) + : tag; +} +var leadingNewline = stringToPrecomputedChunk("\n"), + VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/, + validatedTagCache = new Map(); +function startChunkForTag(tag) { + var tagStartChunk = validatedTagCache.get(tag); + if (void 0 === tagStartChunk) { + if (!VALID_TAG_REGEX.test(tag)) + throw Error(formatProdErrorMessage(65, tag)); + tagStartChunk = stringToPrecomputedChunk("<" + tag); + validatedTagCache.set(tag, tagStartChunk); + } + return tagStartChunk; +} +var doctypeChunk = stringToPrecomputedChunk("<!DOCTYPE html>"); +function pushStartInstance( + target$jscomp$0, + type, + props, + resumableState, + renderState, + preambleState, + hoistableState, + formatContext, + textEmbedded +) { + switch (type) { + case "div": + case "span": + case "svg": + case "path": + break; + case "a": + target$jscomp$0.push(startChunkForTag("a")); + var children = null, + innerHTML = null, + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + children = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + case "href": + "" === propValue + ? pushStringAttribute(target$jscomp$0, "href", "") + : pushAttribute(target$jscomp$0, propKey, propValue); + break; + default: + pushAttribute(target$jscomp$0, propKey, propValue); + } + } + target$jscomp$0.push(endOfStartTag); + pushInnerHTML(target$jscomp$0, innerHTML, children); + if ("string" === typeof children) { + target$jscomp$0.push(stringToChunk(escapeTextForBrowser(children))); + var JSCompiler_inline_result = null; + } else JSCompiler_inline_result = children; + return JSCompiler_inline_result; + case "g": + case "p": + case "li": + break; + case "select": + target$jscomp$0.push(startChunkForTag("select")); + var children$jscomp$0 = null, + innerHTML$jscomp$0 = null, + propKey$jscomp$0; + for (propKey$jscomp$0 in props) + if (hasOwnProperty.call(props, propKey$jscomp$0)) { + var propValue$jscomp$0 = props[propKey$jscomp$0]; + if (null != propValue$jscomp$0) + switch (propKey$jscomp$0) { + case "children": + children$jscomp$0 = propValue$jscomp$0; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$0 = propValue$jscomp$0; + break; + case "defaultValue": + case "value": + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$0, + propValue$jscomp$0 + ); + } + } + target$jscomp$0.push(endOfStartTag); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$0, children$jscomp$0); + return children$jscomp$0; + case "option": + var selectedValue = formatContext.selectedValue; + target$jscomp$0.push(startChunkForTag("option")); + var children$jscomp$1 = null, + value = null, + selected = null, + innerHTML$jscomp$1 = null, + propKey$jscomp$1; + for (propKey$jscomp$1 in props) + if (hasOwnProperty.call(props, propKey$jscomp$1)) { + var propValue$jscomp$1 = props[propKey$jscomp$1]; + if (null != propValue$jscomp$1) + switch (propKey$jscomp$1) { + case "children": + children$jscomp$1 = propValue$jscomp$1; + break; + case "selected": + selected = propValue$jscomp$1; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$1 = propValue$jscomp$1; + break; + case "value": + value = propValue$jscomp$1; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$1, + propValue$jscomp$1 + ); + } + } + if (null != selectedValue) { + var stringValue = + null !== value + ? "" + value + : flattenOptionChildren(children$jscomp$1); + if (isArrayImpl(selectedValue)) + for (var i = 0; i < selectedValue.length; i++) { + if ("" + selectedValue[i] === stringValue) { + target$jscomp$0.push(selectedMarkerAttribute); + break; + } + } + else + "" + selectedValue === stringValue && + target$jscomp$0.push(selectedMarkerAttribute); + } else selected && target$jscomp$0.push(selectedMarkerAttribute); + target$jscomp$0.push(endOfStartTag); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$1, children$jscomp$1); + return children$jscomp$1; + case "textarea": + target$jscomp$0.push(startChunkForTag("textarea")); + var value$jscomp$0 = null, + defaultValue = null, + children$jscomp$2 = null, + propKey$jscomp$2; + for (propKey$jscomp$2 in props) + if (hasOwnProperty.call(props, propKey$jscomp$2)) { + var propValue$jscomp$2 = props[propKey$jscomp$2]; + if (null != propValue$jscomp$2) + switch (propKey$jscomp$2) { + case "children": + children$jscomp$2 = propValue$jscomp$2; + break; + case "value": + value$jscomp$0 = propValue$jscomp$2; + break; + case "defaultValue": + defaultValue = propValue$jscomp$2; + break; + case "dangerouslySetInnerHTML": + throw Error(formatProdErrorMessage(91)); + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$2, + propValue$jscomp$2 + ); + } + } + null === value$jscomp$0 && + null !== defaultValue && + (value$jscomp$0 = defaultValue); + target$jscomp$0.push(endOfStartTag); + if (null != children$jscomp$2) { + if (null != value$jscomp$0) throw Error(formatProdErrorMessage(92)); + if (isArrayImpl(children$jscomp$2)) { + if (1 < children$jscomp$2.length) + throw Error(formatProdErrorMessage(93)); + value$jscomp$0 = "" + children$jscomp$2[0]; + } + value$jscomp$0 = "" + children$jscomp$2; + } + "string" === typeof value$jscomp$0 && + "\n" === value$jscomp$0[0] && + target$jscomp$0.push(leadingNewline); + null !== value$jscomp$0 && + target$jscomp$0.push( + stringToChunk(escapeTextForBrowser("" + value$jscomp$0)) + ); + return null; + case "input": + target$jscomp$0.push(startChunkForTag("input")); + var name = null, + formAction = null, + formEncType = null, + formMethod = null, + formTarget = null, + value$jscomp$1 = null, + defaultValue$jscomp$0 = null, + checked = null, + defaultChecked = null, + propKey$jscomp$3; + for (propKey$jscomp$3 in props) + if (hasOwnProperty.call(props, propKey$jscomp$3)) { + var propValue$jscomp$3 = props[propKey$jscomp$3]; + if (null != propValue$jscomp$3) + switch (propKey$jscomp$3) { + case "children": + case "dangerouslySetInnerHTML": + throw Error(formatProdErrorMessage(399, "input")); + case "name": + name = propValue$jscomp$3; + break; + case "formAction": + formAction = propValue$jscomp$3; + break; + case "formEncType": + formEncType = propValue$jscomp$3; + break; + case "formMethod": + formMethod = propValue$jscomp$3; + break; + case "formTarget": + formTarget = propValue$jscomp$3; + break; + case "defaultChecked": + defaultChecked = propValue$jscomp$3; + break; + case "defaultValue": + defaultValue$jscomp$0 = propValue$jscomp$3; + break; + case "checked": + checked = propValue$jscomp$3; + break; + case "value": + value$jscomp$1 = propValue$jscomp$3; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$3, + propValue$jscomp$3 + ); + } + } + var formData = pushFormActionAttribute( + target$jscomp$0, + resumableState, + renderState, + formAction, + formEncType, + formMethod, + formTarget, + name + ); + null !== checked + ? pushBooleanAttribute(target$jscomp$0, "checked", checked) + : null !== defaultChecked && + pushBooleanAttribute(target$jscomp$0, "checked", defaultChecked); + null !== value$jscomp$1 + ? pushAttribute(target$jscomp$0, "value", value$jscomp$1) + : null !== defaultValue$jscomp$0 && + pushAttribute(target$jscomp$0, "value", defaultValue$jscomp$0); + target$jscomp$0.push(endOfStartTagSelfClosing); + null != formData && + formData.forEach(pushAdditionalFormField, target$jscomp$0); + return null; + case "button": + target$jscomp$0.push(startChunkForTag("button")); + var children$jscomp$3 = null, + innerHTML$jscomp$2 = null, + name$jscomp$0 = null, + formAction$jscomp$0 = null, + formEncType$jscomp$0 = null, + formMethod$jscomp$0 = null, + formTarget$jscomp$0 = null, + propKey$jscomp$4; + for (propKey$jscomp$4 in props) + if (hasOwnProperty.call(props, propKey$jscomp$4)) { + var propValue$jscomp$4 = props[propKey$jscomp$4]; + if (null != propValue$jscomp$4) + switch (propKey$jscomp$4) { + case "children": + children$jscomp$3 = propValue$jscomp$4; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$2 = propValue$jscomp$4; + break; + case "name": + name$jscomp$0 = propValue$jscomp$4; + break; + case "formAction": + formAction$jscomp$0 = propValue$jscomp$4; + break; + case "formEncType": + formEncType$jscomp$0 = propValue$jscomp$4; + break; + case "formMethod": + formMethod$jscomp$0 = propValue$jscomp$4; + break; + case "formTarget": + formTarget$jscomp$0 = propValue$jscomp$4; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$4, + propValue$jscomp$4 + ); + } + } + var formData$jscomp$0 = pushFormActionAttribute( + target$jscomp$0, + resumableState, + renderState, + formAction$jscomp$0, + formEncType$jscomp$0, + formMethod$jscomp$0, + formTarget$jscomp$0, + name$jscomp$0 + ); + target$jscomp$0.push(endOfStartTag); + null != formData$jscomp$0 && + formData$jscomp$0.forEach(pushAdditionalFormField, target$jscomp$0); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$2, children$jscomp$3); + if ("string" === typeof children$jscomp$3) { + target$jscomp$0.push( + stringToChunk(escapeTextForBrowser(children$jscomp$3)) + ); + var JSCompiler_inline_result$jscomp$0 = null; + } else JSCompiler_inline_result$jscomp$0 = children$jscomp$3; + return JSCompiler_inline_result$jscomp$0; + case "form": + target$jscomp$0.push(startChunkForTag("form")); + var children$jscomp$4 = null, + innerHTML$jscomp$3 = null, + formAction$jscomp$1 = null, + formEncType$jscomp$1 = null, + formMethod$jscomp$1 = null, + formTarget$jscomp$1 = null, + propKey$jscomp$5; + for (propKey$jscomp$5 in props) + if (hasOwnProperty.call(props, propKey$jscomp$5)) { + var propValue$jscomp$5 = props[propKey$jscomp$5]; + if (null != propValue$jscomp$5) + switch (propKey$jscomp$5) { + case "children": + children$jscomp$4 = propValue$jscomp$5; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$3 = propValue$jscomp$5; + break; + case "action": + formAction$jscomp$1 = propValue$jscomp$5; + break; + case "encType": + formEncType$jscomp$1 = propValue$jscomp$5; + break; + case "method": + formMethod$jscomp$1 = propValue$jscomp$5; + break; + case "target": + formTarget$jscomp$1 = propValue$jscomp$5; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$5, + propValue$jscomp$5 + ); + } + } + var formData$jscomp$1 = null, + formActionName = null; + if ("function" === typeof formAction$jscomp$1) { + var customFields = getCustomFormFields( + resumableState, + formAction$jscomp$1 + ); + null !== customFields + ? ((formAction$jscomp$1 = customFields.action || ""), + (formEncType$jscomp$1 = customFields.encType), + (formMethod$jscomp$1 = customFields.method), + (formTarget$jscomp$1 = customFields.target), + (formData$jscomp$1 = customFields.data), + (formActionName = customFields.name)) + : (target$jscomp$0.push( + attributeSeparator, + stringToChunk("action"), + attributeAssign, + actionJavaScriptURL, + attributeEnd + ), + (formTarget$jscomp$1 = + formMethod$jscomp$1 = + formEncType$jscomp$1 = + formAction$jscomp$1 = + null), + injectFormReplayingRuntime(resumableState, renderState)); + } + null != formAction$jscomp$1 && + pushAttribute(target$jscomp$0, "action", formAction$jscomp$1); + null != formEncType$jscomp$1 && + pushAttribute(target$jscomp$0, "encType", formEncType$jscomp$1); + null != formMethod$jscomp$1 && + pushAttribute(target$jscomp$0, "method", formMethod$jscomp$1); + null != formTarget$jscomp$1 && + pushAttribute(target$jscomp$0, "target", formTarget$jscomp$1); + target$jscomp$0.push(endOfStartTag); + null !== formActionName && + (target$jscomp$0.push(startHiddenInputChunk), + pushStringAttribute(target$jscomp$0, "name", formActionName), + target$jscomp$0.push(endOfStartTagSelfClosing), + null != formData$jscomp$1 && + formData$jscomp$1.forEach(pushAdditionalFormField, target$jscomp$0)); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$3, children$jscomp$4); + if ("string" === typeof children$jscomp$4) { + target$jscomp$0.push( + stringToChunk(escapeTextForBrowser(children$jscomp$4)) + ); + var JSCompiler_inline_result$jscomp$1 = null; + } else JSCompiler_inline_result$jscomp$1 = children$jscomp$4; + return JSCompiler_inline_result$jscomp$1; + case "menuitem": + target$jscomp$0.push(startChunkForTag("menuitem")); + for (var propKey$jscomp$6 in props) + if (hasOwnProperty.call(props, propKey$jscomp$6)) { + var propValue$jscomp$6 = props[propKey$jscomp$6]; + if (null != propValue$jscomp$6) + switch (propKey$jscomp$6) { + case "children": + case "dangerouslySetInnerHTML": + throw Error(formatProdErrorMessage(400)); + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$6, + propValue$jscomp$6 + ); + } + } + target$jscomp$0.push(endOfStartTag); + return null; + case "object": + target$jscomp$0.push(startChunkForTag("object")); + var children$jscomp$5 = null, + innerHTML$jscomp$4 = null, + propKey$jscomp$7; + for (propKey$jscomp$7 in props) + if (hasOwnProperty.call(props, propKey$jscomp$7)) { + var propValue$jscomp$7 = props[propKey$jscomp$7]; + if (null != propValue$jscomp$7) + switch (propKey$jscomp$7) { + case "children": + children$jscomp$5 = propValue$jscomp$7; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$4 = propValue$jscomp$7; + break; + case "data": + var sanitizedValue = sanitizeURL("" + propValue$jscomp$7); + if ("" === sanitizedValue) break; + target$jscomp$0.push( + attributeSeparator, + stringToChunk("data"), + attributeAssign, + stringToChunk(escapeTextForBrowser(sanitizedValue)), + attributeEnd + ); + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$7, + propValue$jscomp$7 + ); + } + } + target$jscomp$0.push(endOfStartTag); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$4, children$jscomp$5); + if ("string" === typeof children$jscomp$5) { + target$jscomp$0.push( + stringToChunk(escapeTextForBrowser(children$jscomp$5)) + ); + var JSCompiler_inline_result$jscomp$2 = null; + } else JSCompiler_inline_result$jscomp$2 = children$jscomp$5; + return JSCompiler_inline_result$jscomp$2; + case "title": + var noscriptTagInScope = formatContext.tagScope & 1, + isFallback = formatContext.tagScope & 4; + if ( + 4 === formatContext.insertionMode || + noscriptTagInScope || + null != props.itemProp + ) + var JSCompiler_inline_result$jscomp$3 = pushTitleImpl( + target$jscomp$0, + props + ); + else + isFallback + ? (JSCompiler_inline_result$jscomp$3 = null) + : (pushTitleImpl(renderState.hoistableChunks, props), + (JSCompiler_inline_result$jscomp$3 = void 0)); + return JSCompiler_inline_result$jscomp$3; + case "link": + var noscriptTagInScope$jscomp$0 = formatContext.tagScope & 1, + isFallback$jscomp$0 = formatContext.tagScope & 4, + rel = props.rel, + href = props.href, + precedence = props.precedence; + if ( + 4 === formatContext.insertionMode || + noscriptTagInScope$jscomp$0 || + null != props.itemProp || + "string" !== typeof rel || + "string" !== typeof href || + "" === href + ) { + pushLinkImpl(target$jscomp$0, props); + var JSCompiler_inline_result$jscomp$4 = null; + } else if ("stylesheet" === props.rel) + if ( + "string" !== typeof precedence || + null != props.disabled || + props.onLoad || + props.onError + ) + JSCompiler_inline_result$jscomp$4 = pushLinkImpl( + target$jscomp$0, + props + ); + else { + var styleQueue = renderState.styles.get(precedence), + resourceState = resumableState.styleResources.hasOwnProperty(href) + ? resumableState.styleResources[href] + : void 0; + if (null !== resourceState) { + resumableState.styleResources[href] = null; + styleQueue || + ((styleQueue = { + precedence: stringToChunk(escapeTextForBrowser(precedence)), + rules: [], + hrefs: [], + sheets: new Map() + }), + renderState.styles.set(precedence, styleQueue)); + var resource = { + state: 0, + props: assign({}, props, { + "data-precedence": props.precedence, + precedence: null + }) + }; + if (resourceState) { + 2 === resourceState.length && + adoptPreloadCredentials(resource.props, resourceState); + var preloadResource = renderState.preloads.stylesheets.get(href); + preloadResource && 0 < preloadResource.length + ? (preloadResource.length = 0) + : (resource.state = 1); + } + styleQueue.sheets.set(href, resource); + hoistableState && hoistableState.stylesheets.add(resource); + } else if (styleQueue) { + var resource$9 = styleQueue.sheets.get(href); + resource$9 && + hoistableState && + hoistableState.stylesheets.add(resource$9); + } + textEmbedded && target$jscomp$0.push(textSeparator); + JSCompiler_inline_result$jscomp$4 = null; + } + else + props.onLoad || props.onError + ? (JSCompiler_inline_result$jscomp$4 = pushLinkImpl( + target$jscomp$0, + props + )) + : (textEmbedded && target$jscomp$0.push(textSeparator), + (JSCompiler_inline_result$jscomp$4 = isFallback$jscomp$0 + ? null + : pushLinkImpl(renderState.hoistableChunks, props))); + return JSCompiler_inline_result$jscomp$4; + case "script": + var noscriptTagInScope$jscomp$1 = formatContext.tagScope & 1, + asyncProp = props.async; + if ( + "string" !== typeof props.src || + !props.src || + !asyncProp || + "function" === typeof asyncProp || + "symbol" === typeof asyncProp || + props.onLoad || + props.onError || + 4 === formatContext.insertionMode || + noscriptTagInScope$jscomp$1 || + null != props.itemProp + ) + var JSCompiler_inline_result$jscomp$5 = pushScriptImpl( + target$jscomp$0, + props + ); + else { + var key = props.src; + if ("module" === props.type) { + var resources = resumableState.moduleScriptResources; + var preloads = renderState.preloads.moduleScripts; + } else + (resources = resumableState.scriptResources), + (preloads = renderState.preloads.scripts); + var resourceState$jscomp$0 = resources.hasOwnProperty(key) + ? resources[key] + : void 0; + if (null !== resourceState$jscomp$0) { + resources[key] = null; + var scriptProps = props; + if (resourceState$jscomp$0) { + 2 === resourceState$jscomp$0.length && + ((scriptProps = assign({}, props)), + adoptPreloadCredentials(scriptProps, resourceState$jscomp$0)); + var preloadResource$jscomp$0 = preloads.get(key); + preloadResource$jscomp$0 && (preloadResource$jscomp$0.length = 0); + } + var resource$jscomp$0 = []; + renderState.scripts.add(resource$jscomp$0); + pushScriptImpl(resource$jscomp$0, scriptProps); + } + textEmbedded && target$jscomp$0.push(textSeparator); + JSCompiler_inline_result$jscomp$5 = null; + } + return JSCompiler_inline_result$jscomp$5; + case "style": + var noscriptTagInScope$jscomp$2 = formatContext.tagScope & 1, + precedence$jscomp$0 = props.precedence, + href$jscomp$0 = props.href, + nonce = props.nonce; + if ( + 4 === formatContext.insertionMode || + noscriptTagInScope$jscomp$2 || + null != props.itemProp || + "string" !== typeof precedence$jscomp$0 || + "string" !== typeof href$jscomp$0 || + "" === href$jscomp$0 + ) { + target$jscomp$0.push(startChunkForTag("style")); + var children$jscomp$6 = null, + innerHTML$jscomp$5 = null, + propKey$jscomp$8; + for (propKey$jscomp$8 in props) + if (hasOwnProperty.call(props, propKey$jscomp$8)) { + var propValue$jscomp$8 = props[propKey$jscomp$8]; + if (null != propValue$jscomp$8) + switch (propKey$jscomp$8) { + case "children": + children$jscomp$6 = propValue$jscomp$8; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$5 = propValue$jscomp$8; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$8, + propValue$jscomp$8 + ); + } + } + target$jscomp$0.push(endOfStartTag); + var child = Array.isArray(children$jscomp$6) + ? 2 > children$jscomp$6.length + ? children$jscomp$6[0] + : null + : children$jscomp$6; + "function" !== typeof child && + "symbol" !== typeof child && + null !== child && + void 0 !== child && + target$jscomp$0.push( + stringToChunk(("" + child).replace(styleRegex, styleReplacer)) + ); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$5, children$jscomp$6); + target$jscomp$0.push(endChunkForTag("style")); + var JSCompiler_inline_result$jscomp$6 = null; + } else { + var styleQueue$jscomp$0 = renderState.styles.get(precedence$jscomp$0); + if ( + null !== + (resumableState.styleResources.hasOwnProperty(href$jscomp$0) + ? resumableState.styleResources[href$jscomp$0] + : void 0) + ) { + resumableState.styleResources[href$jscomp$0] = null; + styleQueue$jscomp$0 || + ((styleQueue$jscomp$0 = { + precedence: stringToChunk( + escapeTextForBrowser(precedence$jscomp$0) + ), + rules: [], + hrefs: [], + sheets: new Map() + }), + renderState.styles.set(precedence$jscomp$0, styleQueue$jscomp$0)); + var nonceStyle = renderState.nonce.style; + if (!nonceStyle || nonceStyle === nonce) { + styleQueue$jscomp$0.hrefs.push( + stringToChunk(escapeTextForBrowser(href$jscomp$0)) + ); + var target = styleQueue$jscomp$0.rules, + children$jscomp$7 = null, + innerHTML$jscomp$6 = null, + propKey$jscomp$9; + for (propKey$jscomp$9 in props) + if (hasOwnProperty.call(props, propKey$jscomp$9)) { + var propValue$jscomp$9 = props[propKey$jscomp$9]; + if (null != propValue$jscomp$9) + switch (propKey$jscomp$9) { + case "children": + children$jscomp$7 = propValue$jscomp$9; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$6 = propValue$jscomp$9; + } + } + var child$jscomp$0 = Array.isArray(children$jscomp$7) + ? 2 > children$jscomp$7.length + ? children$jscomp$7[0] + : null + : children$jscomp$7; + "function" !== typeof child$jscomp$0 && + "symbol" !== typeof child$jscomp$0 && + null !== child$jscomp$0 && + void 0 !== child$jscomp$0 && + target.push( + stringToChunk( + ("" + child$jscomp$0).replace(styleRegex, styleReplacer) + ) + ); + pushInnerHTML(target, innerHTML$jscomp$6, children$jscomp$7); + } + } + styleQueue$jscomp$0 && + hoistableState && + hoistableState.styles.add(styleQueue$jscomp$0); + textEmbedded && target$jscomp$0.push(textSeparator); + JSCompiler_inline_result$jscomp$6 = void 0; + } + return JSCompiler_inline_result$jscomp$6; + case "meta": + var noscriptTagInScope$jscomp$3 = formatContext.tagScope & 1, + isFallback$jscomp$1 = formatContext.tagScope & 4; + if ( + 4 === formatContext.insertionMode || + noscriptTagInScope$jscomp$3 || + null != props.itemProp + ) + var JSCompiler_inline_result$jscomp$7 = pushSelfClosing( + target$jscomp$0, + props, + "meta" + ); + else + textEmbedded && target$jscomp$0.push(textSeparator), + (JSCompiler_inline_result$jscomp$7 = isFallback$jscomp$1 + ? null + : "string" === typeof props.charSet + ? pushSelfClosing(renderState.charsetChunks, props, "meta") + : "viewport" === props.name + ? pushSelfClosing(renderState.viewportChunks, props, "meta") + : pushSelfClosing(renderState.hoistableChunks, props, "meta")); + return JSCompiler_inline_result$jscomp$7; + case "listing": + case "pre": + target$jscomp$0.push(startChunkForTag(type)); + var children$jscomp$8 = null, + innerHTML$jscomp$7 = null, + propKey$jscomp$10; + for (propKey$jscomp$10 in props) + if (hasOwnProperty.call(props, propKey$jscomp$10)) { + var propValue$jscomp$10 = props[propKey$jscomp$10]; + if (null != propValue$jscomp$10) + switch (propKey$jscomp$10) { + case "children": + children$jscomp$8 = propValue$jscomp$10; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$7 = propValue$jscomp$10; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$10, + propValue$jscomp$10 + ); + } + } + target$jscomp$0.push(endOfStartTag); + if (null != innerHTML$jscomp$7) { + if (null != children$jscomp$8) throw Error(formatProdErrorMessage(60)); + if ( + "object" !== typeof innerHTML$jscomp$7 || + !("__html" in innerHTML$jscomp$7) + ) + throw Error(formatProdErrorMessage(61)); + var html = innerHTML$jscomp$7.__html; + null !== html && + void 0 !== html && + ("string" === typeof html && 0 < html.length && "\n" === html[0] + ? target$jscomp$0.push(leadingNewline, stringToChunk(html)) + : target$jscomp$0.push(stringToChunk("" + html))); + } + "string" === typeof children$jscomp$8 && + "\n" === children$jscomp$8[0] && + target$jscomp$0.push(leadingNewline); + return children$jscomp$8; + case "img": + var pictureOrNoScriptTagInScope = formatContext.tagScope & 3, + src = props.src, + srcSet = props.srcSet; + if ( + !( + "lazy" === props.loading || + (!src && !srcSet) || + ("string" !== typeof src && null != src) || + ("string" !== typeof srcSet && null != srcSet) || + "low" === props.fetchPriority || + pictureOrNoScriptTagInScope + ) && + ("string" !== typeof src || + ":" !== src[4] || + ("d" !== src[0] && "D" !== src[0]) || + ("a" !== src[1] && "A" !== src[1]) || + ("t" !== src[2] && "T" !== src[2]) || + ("a" !== src[3] && "A" !== src[3])) && + ("string" !== typeof srcSet || + ":" !== srcSet[4] || + ("d" !== srcSet[0] && "D" !== srcSet[0]) || + ("a" !== srcSet[1] && "A" !== srcSet[1]) || + ("t" !== srcSet[2] && "T" !== srcSet[2]) || + ("a" !== srcSet[3] && "A" !== srcSet[3])) + ) { + null !== hoistableState && + formatContext.tagScope & 64 && + (hoistableState.suspenseyImages = !0); + var sizes = "string" === typeof props.sizes ? props.sizes : void 0, + key$jscomp$0 = srcSet ? srcSet + "\n" + (sizes || "") : src, + promotablePreloads = renderState.preloads.images, + resource$jscomp$1 = promotablePreloads.get(key$jscomp$0); + if (resource$jscomp$1) { + if ( + "high" === props.fetchPriority || + 10 > renderState.highImagePreloads.size + ) + promotablePreloads.delete(key$jscomp$0), + renderState.highImagePreloads.add(resource$jscomp$1); + } else if ( + !resumableState.imageResources.hasOwnProperty(key$jscomp$0) + ) { + resumableState.imageResources[key$jscomp$0] = PRELOAD_NO_CREDS; + var input = props.crossOrigin; + var JSCompiler_inline_result$jscomp$8 = + "string" === typeof input + ? "use-credentials" === input + ? input + : "" + : void 0; + var headers = renderState.headers, + header; + headers && + 0 < headers.remainingCapacity && + "string" !== typeof props.srcSet && + ("high" === props.fetchPriority || + 500 > headers.highImagePreloads.length) && + ((header = getPreloadAsHeader(src, "image", { + imageSrcSet: props.srcSet, + imageSizes: props.sizes, + crossOrigin: JSCompiler_inline_result$jscomp$8, + integrity: props.integrity, + nonce: props.nonce, + type: props.type, + fetchPriority: props.fetchPriority, + referrerPolicy: props.refererPolicy + })), + 0 <= (headers.remainingCapacity -= header.length + 2)) + ? ((renderState.resets.image[key$jscomp$0] = PRELOAD_NO_CREDS), + headers.highImagePreloads && (headers.highImagePreloads += ", "), + (headers.highImagePreloads += header)) + : ((resource$jscomp$1 = []), + pushLinkImpl(resource$jscomp$1, { + rel: "preload", + as: "image", + href: srcSet ? void 0 : src, + imageSrcSet: srcSet, + imageSizes: sizes, + crossOrigin: JSCompiler_inline_result$jscomp$8, + integrity: props.integrity, + type: props.type, + fetchPriority: props.fetchPriority, + referrerPolicy: props.referrerPolicy + }), + "high" === props.fetchPriority || + 10 > renderState.highImagePreloads.size + ? renderState.highImagePreloads.add(resource$jscomp$1) + : (renderState.bulkPreloads.add(resource$jscomp$1), + promotablePreloads.set(key$jscomp$0, resource$jscomp$1))); + } + } + return pushSelfClosing(target$jscomp$0, props, "img"); + case "base": + case "area": + case "br": + case "col": + case "embed": + case "hr": + case "keygen": + case "param": + case "source": + case "track": + case "wbr": + return pushSelfClosing(target$jscomp$0, props, type); + case "annotation-xml": + case "color-profile": + case "font-face": + case "font-face-src": + case "font-face-uri": + case "font-face-format": + case "font-face-name": + case "missing-glyph": + break; + case "head": + if (2 > formatContext.insertionMode) { + var preamble = preambleState || renderState.preamble; + if (preamble.headChunks) + throw Error(formatProdErrorMessage(545, "`<head>`")); + null !== preambleState && + target$jscomp$0.push(headPreambleContributionChunk); + preamble.headChunks = []; + var JSCompiler_inline_result$jscomp$9 = pushStartSingletonElement( + preamble.headChunks, + props, + "head" + ); + } else + JSCompiler_inline_result$jscomp$9 = pushStartGenericElement( + target$jscomp$0, + props, + "head" + ); + return JSCompiler_inline_result$jscomp$9; + case "body": + if (2 > formatContext.insertionMode) { + var preamble$jscomp$0 = preambleState || renderState.preamble; + if (preamble$jscomp$0.bodyChunks) + throw Error(formatProdErrorMessage(545, "`<body>`")); + null !== preambleState && + target$jscomp$0.push(bodyPreambleContributionChunk); + preamble$jscomp$0.bodyChunks = []; + var JSCompiler_inline_result$jscomp$10 = pushStartSingletonElement( + preamble$jscomp$0.bodyChunks, + props, + "body" + ); + } else + JSCompiler_inline_result$jscomp$10 = pushStartGenericElement( + target$jscomp$0, + props, + "body" + ); + return JSCompiler_inline_result$jscomp$10; + case "html": + if (0 === formatContext.insertionMode) { + var preamble$jscomp$1 = preambleState || renderState.preamble; + if (preamble$jscomp$1.htmlChunks) + throw Error(formatProdErrorMessage(545, "`<html>`")); + null !== preambleState && + target$jscomp$0.push(htmlPreambleContributionChunk); + preamble$jscomp$1.htmlChunks = [doctypeChunk]; + var JSCompiler_inline_result$jscomp$11 = pushStartSingletonElement( + preamble$jscomp$1.htmlChunks, + props, + "html" + ); + } else + JSCompiler_inline_result$jscomp$11 = pushStartGenericElement( + target$jscomp$0, + props, + "html" + ); + return JSCompiler_inline_result$jscomp$11; + default: + if (-1 !== type.indexOf("-")) { + target$jscomp$0.push(startChunkForTag(type)); + var children$jscomp$9 = null, + innerHTML$jscomp$8 = null, + propKey$jscomp$11; + for (propKey$jscomp$11 in props) + if (hasOwnProperty.call(props, propKey$jscomp$11)) { + var propValue$jscomp$11 = props[propKey$jscomp$11]; + if (null != propValue$jscomp$11) { + var attributeName = propKey$jscomp$11; + switch (propKey$jscomp$11) { + case "children": + children$jscomp$9 = propValue$jscomp$11; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$8 = propValue$jscomp$11; + break; + case "style": + pushStyleAttribute(target$jscomp$0, propValue$jscomp$11); + break; + case "suppressContentEditableWarning": + case "suppressHydrationWarning": + case "ref": + break; + case "className": + attributeName = "class"; + default: + if ( + isAttributeNameSafe(propKey$jscomp$11) && + "function" !== typeof propValue$jscomp$11 && + "symbol" !== typeof propValue$jscomp$11 && + !1 !== propValue$jscomp$11 + ) { + if (!0 === propValue$jscomp$11) propValue$jscomp$11 = ""; + else if ("object" === typeof propValue$jscomp$11) continue; + target$jscomp$0.push( + attributeSeparator, + stringToChunk(attributeName), + attributeAssign, + stringToChunk(escapeTextForBrowser(propValue$jscomp$11)), + attributeEnd + ); + } + } + } + } + target$jscomp$0.push(endOfStartTag); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$8, children$jscomp$9); + return children$jscomp$9; + } + } + return pushStartGenericElement(target$jscomp$0, props, type); +} +var endTagCache = new Map(); +function endChunkForTag(tag) { + var chunk = endTagCache.get(tag); + void 0 === chunk && + ((chunk = stringToPrecomputedChunk("</" + tag + ">")), + endTagCache.set(tag, chunk)); + return chunk; +} +function hoistPreambleState(renderState, preambleState) { + renderState = renderState.preamble; + null === renderState.htmlChunks && + preambleState.htmlChunks && + (renderState.htmlChunks = preambleState.htmlChunks); + null === renderState.headChunks && + preambleState.headChunks && + (renderState.headChunks = preambleState.headChunks); + null === renderState.bodyChunks && + preambleState.bodyChunks && + (renderState.bodyChunks = preambleState.bodyChunks); +} +function writeBootstrap(destination, renderState) { + renderState = renderState.bootstrapChunks; + for (var i = 0; i < renderState.length - 1; i++) + writeChunk(destination, renderState[i]); + return i < renderState.length + ? ((i = renderState[i]), + (renderState.length = 0), + writeChunkAndReturn(destination, i)) + : !0; +} +var shellTimeRuntimeScript = stringToPrecomputedChunk( + "requestAnimationFrame(function(){$RT=performance.now()});" + ), + placeholder1 = stringToPrecomputedChunk('<template id="'), + placeholder2 = stringToPrecomputedChunk('"></template>'), + startActivityBoundary = stringToPrecomputedChunk("\x3c!--&--\x3e"), + endActivityBoundary = stringToPrecomputedChunk("\x3c!--/&--\x3e"), + startCompletedSuspenseBoundary = stringToPrecomputedChunk("\x3c!--$--\x3e"), + startPendingSuspenseBoundary1 = stringToPrecomputedChunk( + '\x3c!--$?--\x3e<template id="' + ), + startPendingSuspenseBoundary2 = stringToPrecomputedChunk('"></template>'), + startClientRenderedSuspenseBoundary = + stringToPrecomputedChunk("\x3c!--$!--\x3e"), + endSuspenseBoundary = stringToPrecomputedChunk("\x3c!--/$--\x3e"), + clientRenderedSuspenseBoundaryError1 = stringToPrecomputedChunk("<template"), + clientRenderedSuspenseBoundaryErrorAttrInterstitial = + stringToPrecomputedChunk('"'), + clientRenderedSuspenseBoundaryError1A = + stringToPrecomputedChunk(' data-dgst="'); +stringToPrecomputedChunk(' data-msg="'); +stringToPrecomputedChunk(' data-stck="'); +stringToPrecomputedChunk(' data-cstck="'); +var clientRenderedSuspenseBoundaryError2 = + stringToPrecomputedChunk("></template>"); +function writeStartPendingSuspenseBoundary(destination, renderState, id) { + writeChunk(destination, startPendingSuspenseBoundary1); + if (null === id) throw Error(formatProdErrorMessage(395)); + writeChunk(destination, renderState.boundaryPrefix); + writeChunk(destination, stringToChunk(id.toString(16))); + return writeChunkAndReturn(destination, startPendingSuspenseBoundary2); +} +var startSegmentHTML = stringToPrecomputedChunk('<div hidden id="'), + startSegmentHTML2 = stringToPrecomputedChunk('">'), + endSegmentHTML = stringToPrecomputedChunk("</div>"), + startSegmentSVG = stringToPrecomputedChunk( + '<svg aria-hidden="true" style="display:none" id="' + ), + startSegmentSVG2 = stringToPrecomputedChunk('">'), + endSegmentSVG = stringToPrecomputedChunk("</svg>"), + startSegmentMathML = stringToPrecomputedChunk( + '<math aria-hidden="true" style="display:none" id="' + ), + startSegmentMathML2 = stringToPrecomputedChunk('">'), + endSegmentMathML = stringToPrecomputedChunk("</math>"), + startSegmentTable = stringToPrecomputedChunk('<table hidden id="'), + startSegmentTable2 = stringToPrecomputedChunk('">'), + endSegmentTable = stringToPrecomputedChunk("</table>"), + startSegmentTableBody = stringToPrecomputedChunk('<table hidden><tbody id="'), + startSegmentTableBody2 = stringToPrecomputedChunk('">'), + endSegmentTableBody = stringToPrecomputedChunk("</tbody></table>"), + startSegmentTableRow = stringToPrecomputedChunk('<table hidden><tr id="'), + startSegmentTableRow2 = stringToPrecomputedChunk('">'), + endSegmentTableRow = stringToPrecomputedChunk("</tr></table>"), + startSegmentColGroup = stringToPrecomputedChunk( + '<table hidden><colgroup id="' + ), + startSegmentColGroup2 = stringToPrecomputedChunk('">'), + endSegmentColGroup = stringToPrecomputedChunk("</colgroup></table>"); +function writeStartSegment(destination, renderState, formatContext, id) { + switch (formatContext.insertionMode) { + case 0: + case 1: + case 3: + case 2: + return ( + writeChunk(destination, startSegmentHTML), + writeChunk(destination, renderState.segmentPrefix), + writeChunk(destination, stringToChunk(id.toString(16))), + writeChunkAndReturn(destination, startSegmentHTML2) + ); + case 4: + return ( + writeChunk(destination, startSegmentSVG), + writeChunk(destination, renderState.segmentPrefix), + writeChunk(destination, stringToChunk(id.toString(16))), + writeChunkAndReturn(destination, startSegmentSVG2) + ); + case 5: + return ( + writeChunk(destination, startSegmentMathML), + writeChunk(destination, renderState.segmentPrefix), + writeChunk(destination, stringToChunk(id.toString(16))), + writeChunkAndReturn(destination, startSegmentMathML2) + ); + case 6: + return ( + writeChunk(destination, startSegmentTable), + writeChunk(destination, renderState.segmentPrefix), + writeChunk(destination, stringToChunk(id.toString(16))), + writeChunkAndReturn(destination, startSegmentTable2) + ); + case 7: + return ( + writeChunk(destination, startSegmentTableBody), + writeChunk(destination, renderState.segmentPrefix), + writeChunk(destination, stringToChunk(id.toString(16))), + writeChunkAndReturn(destination, startSegmentTableBody2) + ); + case 8: + return ( + writeChunk(destination, startSegmentTableRow), + writeChunk(destination, renderState.segmentPrefix), + writeChunk(destination, stringToChunk(id.toString(16))), + writeChunkAndReturn(destination, startSegmentTableRow2) + ); + case 9: + return ( + writeChunk(destination, startSegmentColGroup), + writeChunk(destination, renderState.segmentPrefix), + writeChunk(destination, stringToChunk(id.toString(16))), + writeChunkAndReturn(destination, startSegmentColGroup2) + ); + default: + throw Error(formatProdErrorMessage(397)); + } +} +function writeEndSegment(destination, formatContext) { + switch (formatContext.insertionMode) { + case 0: + case 1: + case 3: + case 2: + return writeChunkAndReturn(destination, endSegmentHTML); + case 4: + return writeChunkAndReturn(destination, endSegmentSVG); + case 5: + return writeChunkAndReturn(destination, endSegmentMathML); + case 6: + return writeChunkAndReturn(destination, endSegmentTable); + case 7: + return writeChunkAndReturn(destination, endSegmentTableBody); + case 8: + return writeChunkAndReturn(destination, endSegmentTableRow); + case 9: + return writeChunkAndReturn(destination, endSegmentColGroup); + default: + throw Error(formatProdErrorMessage(397)); + } +} +var completeSegmentScript1Full = stringToPrecomputedChunk( + '$RS=function(a,b){a=document.getElementById(a);b=document.getElementById(b);for(a.parentNode.removeChild(a);a.firstChild;)b.parentNode.insertBefore(a.firstChild,b);b.parentNode.removeChild(b)};$RS("' + ), + completeSegmentScript1Partial = stringToPrecomputedChunk('$RS("'), + completeSegmentScript2 = stringToPrecomputedChunk('","'), + completeSegmentScriptEnd = stringToPrecomputedChunk('")\x3c/script>'); +stringToPrecomputedChunk('<template data-rsi="" data-sid="'); +stringToPrecomputedChunk('" data-pid="'); +var completeBoundaryScriptFunctionOnly = stringToPrecomputedChunk( + '$RB=[];$RV=function(a){$RT=performance.now();for(var b=0;b<a.length;b+=2){var c=a[b],e=a[b+1];null!==e.parentNode&&e.parentNode.removeChild(e);var f=c.parentNode;if(f){var g=c.previousSibling,h=0;do{if(c&&8===c.nodeType){var d=c.data;if("/$"===d||"/&"===d)if(0===h)break;else h--;else"$"!==d&&"$?"!==d&&"$~"!==d&&"$!"!==d&&"&"!==d||h++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;e.firstChild;)f.insertBefore(e.firstChild,c);g.data="$";g._reactRetry&&requestAnimationFrame(g._reactRetry)}}a.length=0};\n$RC=function(a,b){if(b=document.getElementById(b))(a=document.getElementById(a))?(a.previousSibling.data="$~",$RB.push(a,b),2===$RB.length&&("number"!==typeof $RT?requestAnimationFrame($RV.bind(null,$RB)):(a=performance.now(),setTimeout($RV.bind(null,$RB),2300>a&&2E3<a?2300-a:$RT+300-a)))):b.parentNode.removeChild(b)};' +); +stringToChunk( + '$RV=function(A,g){function k(a,b){var e=a.getAttribute(b);e&&(b=a.style,l.push(a,b.viewTransitionName,b.viewTransitionClass),"auto"!==e&&(b.viewTransitionClass=e),(a=a.getAttribute("vt-name"))||(a="_T_"+K++ +"_"),b.viewTransitionName=a,B=!0)}var B=!1,K=0,l=[];try{var f=document.__reactViewTransition;if(f){f.finished.finally($RV.bind(null,g));return}var m=new Map;for(f=1;f<g.length;f+=2)for(var h=g[f].querySelectorAll("[vt-share]"),d=0;d<h.length;d++){var c=h[d];m.set(c.getAttribute("vt-name"),c)}var u=[];for(h=0;h<g.length;h+=2){var C=g[h],x=C.parentNode;if(x){var v=x.getBoundingClientRect();if(v.left||v.top||v.width||v.height){c=C;for(f=0;c;){if(8===c.nodeType){var r=c.data;if("/$"===r)if(0===f)break;else f--;else"$"!==r&&"$?"!==r&&"$~"!==r&&"$!"!==r||f++}else if(1===c.nodeType){d=c;var D=d.getAttribute("vt-name"),y=m.get(D);k(d,y?"vt-share":"vt-exit");y&&(k(y,"vt-share"),m.set(D,null));var E=d.querySelectorAll("[vt-share]");for(d=0;d<E.length;d++){var F=E[d],G=F.getAttribute("vt-name"),\nH=m.get(G);H&&(k(F,"vt-share"),k(H,"vt-share"),m.set(G,null))}}c=c.nextSibling}for(var I=g[h+1],t=I.firstElementChild;t;)null!==m.get(t.getAttribute("vt-name"))&&k(t,"vt-enter"),t=t.nextElementSibling;c=x;do for(var n=c.firstElementChild;n;){var J=n.getAttribute("vt-update");J&&"none"!==J&&!l.includes(n)&&k(n,"vt-update");n=n.nextElementSibling}while((c=c.parentNode)&&1===c.nodeType&&"none"!==c.getAttribute("vt-update"));u.push.apply(u,I.querySelectorAll(\'img[src]:not([loading="lazy"])\'))}}}if(B){var z=\ndocument.__reactViewTransition=document.startViewTransition({update:function(){A(g);for(var a=[document.documentElement.clientHeight,document.fonts.ready],b={},e=0;e<u.length;b={g:b.g},e++)if(b.g=u[e],!b.g.complete){var p=b.g.getBoundingClientRect();0<p.bottom&&0<p.right&&p.top<window.innerHeight&&p.left<window.innerWidth&&(p=new Promise(function(w){return function(q){w.g.addEventListener("load",q);w.g.addEventListener("error",q)}}(b)),a.push(p))}return Promise.race([Promise.all(a),new Promise(function(w){var q=\nperformance.now();setTimeout(w,2300>q&&2E3<q?2300-q:500)})])},types:[]});z.ready.finally(function(){for(var a=l.length-3;0<=a;a-=3){var b=l[a],e=b.style;e.viewTransitionName=l[a+1];e.viewTransitionClass=l[a+1];""===b.getAttribute("style")&&b.removeAttribute("style")}});z.finished.finally(function(){document.__reactViewTransition===z&&(document.__reactViewTransition=null)});$RB=[];return}}catch(a){}A(g)}.bind(null,$RV);' +); +var completeBoundaryScript1Partial = stringToPrecomputedChunk('$RC("'), + completeBoundaryWithStylesScript1FullPartial = stringToPrecomputedChunk( + '$RM=new Map;$RR=function(n,w,p){function u(q){this._p=null;q()}for(var r=new Map,t=document,h,b,e=t.querySelectorAll("link[data-precedence],style[data-precedence]"),v=[],k=0;b=e[k++];)"not all"===b.getAttribute("media")?v.push(b):("LINK"===b.tagName&&$RM.set(b.getAttribute("href"),b),r.set(b.dataset.precedence,h=b));e=0;b=[];var l,a;for(k=!0;;){if(k){var f=p[e++];if(!f){k=!1;e=0;continue}var c=!1,m=0;var d=f[m++];if(a=$RM.get(d)){var g=a._p;c=!0}else{a=t.createElement("link");a.href=d;a.rel=\n"stylesheet";for(a.dataset.precedence=l=f[m++];g=f[m++];)a.setAttribute(g,f[m++]);g=a._p=new Promise(function(q,x){a.onload=u.bind(a,q);a.onerror=u.bind(a,x)});$RM.set(d,a)}d=a.getAttribute("media");!g||d&&!matchMedia(d).matches||b.push(g);if(c)continue}else{a=v[e++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=r.get(l)||h;c===h&&(h=a);r.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=t.head,c.insertBefore(a,c.firstChild))}if(p=document.getElementById(n))p.previousSibling.data=\n"$~";Promise.all(b).then($RC.bind(null,n,w),$RX.bind(null,n,"CSS failed to load"))};$RR("' + ), + completeBoundaryWithStylesScript1Partial = stringToPrecomputedChunk('$RR("'), + completeBoundaryScript2 = stringToPrecomputedChunk('","'), + completeBoundaryScript3a = stringToPrecomputedChunk('",'), + completeBoundaryScript3b = stringToPrecomputedChunk('"'), + completeBoundaryScriptEnd = stringToPrecomputedChunk(")\x3c/script>"); +stringToPrecomputedChunk('<template data-rci="" data-bid="'); +stringToPrecomputedChunk('<template data-rri="" data-bid="'); +stringToPrecomputedChunk('" data-sid="'); +stringToPrecomputedChunk('" data-sty="'); +var clientRenderScriptFunctionOnly = stringToPrecomputedChunk( + '$RX=function(b,c,d,e,f){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data="$!",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),f&&(a.cstck=f),b._reactRetry&&b._reactRetry())};' + ), + clientRenderScript1Full = stringToPrecomputedChunk( + '$RX=function(b,c,d,e,f){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data="$!",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),f&&(a.cstck=f),b._reactRetry&&b._reactRetry())};;$RX("' + ), + clientRenderScript1Partial = stringToPrecomputedChunk('$RX("'), + clientRenderScript1A = stringToPrecomputedChunk('"'), + clientRenderErrorScriptArgInterstitial = stringToPrecomputedChunk(","), + clientRenderScriptEnd = stringToPrecomputedChunk(")\x3c/script>"); +stringToPrecomputedChunk('<template data-rxi="" data-bid="'); +stringToPrecomputedChunk('" data-dgst="'); +stringToPrecomputedChunk('" data-msg="'); +stringToPrecomputedChunk('" data-stck="'); +stringToPrecomputedChunk('" data-cstck="'); +var regexForJSStringsInInstructionScripts = /[<\u2028\u2029]/g; +function escapeJSStringsForInstructionScripts(input) { + return JSON.stringify(input).replace( + regexForJSStringsInInstructionScripts, + function (match) { + switch (match) { + case "<": + return "\\u003c"; + case "\u2028": + return "\\u2028"; + case "\u2029": + return "\\u2029"; + default: + throw Error( + "escapeJSStringsForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React" + ); + } + } + ); +} +var regexForJSStringsInScripts = /[&><\u2028\u2029]/g; +function escapeJSObjectForInstructionScripts(input) { + return JSON.stringify(input).replace( + regexForJSStringsInScripts, + function (match) { + switch (match) { + case "&": + return "\\u0026"; + case ">": + return "\\u003e"; + case "<": + return "\\u003c"; + case "\u2028": + return "\\u2028"; + case "\u2029": + return "\\u2029"; + default: + throw Error( + "escapeJSObjectForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React" + ); + } + } + ); +} +var lateStyleTagResourceOpen1 = stringToPrecomputedChunk( + ' media="not all" data-precedence="' + ), + lateStyleTagResourceOpen2 = stringToPrecomputedChunk('" data-href="'), + lateStyleTagResourceOpen3 = stringToPrecomputedChunk('">'), + lateStyleTagTemplateClose = stringToPrecomputedChunk("</style>"), + currentlyRenderingBoundaryHasStylesToHoist = !1, + destinationHasCapacity = !0; +function flushStyleTagsLateForBoundary(styleQueue) { + var rules = styleQueue.rules, + hrefs = styleQueue.hrefs, + i = 0; + if (hrefs.length) { + writeChunk(this, currentlyFlushingRenderState.startInlineStyle); + writeChunk(this, lateStyleTagResourceOpen1); + writeChunk(this, styleQueue.precedence); + for (writeChunk(this, lateStyleTagResourceOpen2); i < hrefs.length - 1; i++) + writeChunk(this, hrefs[i]), writeChunk(this, spaceSeparator); + writeChunk(this, hrefs[i]); + writeChunk(this, lateStyleTagResourceOpen3); + for (i = 0; i < rules.length; i++) writeChunk(this, rules[i]); + destinationHasCapacity = writeChunkAndReturn( + this, + lateStyleTagTemplateClose + ); + currentlyRenderingBoundaryHasStylesToHoist = !0; + rules.length = 0; + hrefs.length = 0; + } +} +function hasStylesToHoist(stylesheet) { + return 2 !== stylesheet.state + ? (currentlyRenderingBoundaryHasStylesToHoist = !0) + : !1; +} +function writeHoistablesForBoundary(destination, hoistableState, renderState) { + currentlyRenderingBoundaryHasStylesToHoist = !1; + destinationHasCapacity = !0; + currentlyFlushingRenderState = renderState; + hoistableState.styles.forEach(flushStyleTagsLateForBoundary, destination); + currentlyFlushingRenderState = null; + hoistableState.stylesheets.forEach(hasStylesToHoist); + currentlyRenderingBoundaryHasStylesToHoist && + (renderState.stylesToHoist = !0); + return destinationHasCapacity; +} +function flushResource(resource) { + for (var i = 0; i < resource.length; i++) writeChunk(this, resource[i]); + resource.length = 0; +} +var stylesheetFlushingQueue = []; +function flushStyleInPreamble(stylesheet) { + pushLinkImpl(stylesheetFlushingQueue, stylesheet.props); + for (var i = 0; i < stylesheetFlushingQueue.length; i++) + writeChunk(this, stylesheetFlushingQueue[i]); + stylesheetFlushingQueue.length = 0; + stylesheet.state = 2; +} +var styleTagResourceOpen1 = stringToPrecomputedChunk(' data-precedence="'), + styleTagResourceOpen2 = stringToPrecomputedChunk('" data-href="'), + spaceSeparator = stringToPrecomputedChunk(" "), + styleTagResourceOpen3 = stringToPrecomputedChunk('">'), + styleTagResourceClose = stringToPrecomputedChunk("</style>"); +function flushStylesInPreamble(styleQueue) { + var hasStylesheets = 0 < styleQueue.sheets.size; + styleQueue.sheets.forEach(flushStyleInPreamble, this); + styleQueue.sheets.clear(); + var rules = styleQueue.rules, + hrefs = styleQueue.hrefs; + if (!hasStylesheets || hrefs.length) { + writeChunk(this, currentlyFlushingRenderState.startInlineStyle); + writeChunk(this, styleTagResourceOpen1); + writeChunk(this, styleQueue.precedence); + styleQueue = 0; + if (hrefs.length) { + for ( + writeChunk(this, styleTagResourceOpen2); + styleQueue < hrefs.length - 1; + styleQueue++ + ) + writeChunk(this, hrefs[styleQueue]), writeChunk(this, spaceSeparator); + writeChunk(this, hrefs[styleQueue]); + } + writeChunk(this, styleTagResourceOpen3); + for (styleQueue = 0; styleQueue < rules.length; styleQueue++) + writeChunk(this, rules[styleQueue]); + writeChunk(this, styleTagResourceClose); + rules.length = 0; + hrefs.length = 0; + } +} +function preloadLateStyle(stylesheet) { + if (0 === stylesheet.state) { + stylesheet.state = 1; + var props = stylesheet.props; + pushLinkImpl(stylesheetFlushingQueue, { + rel: "preload", + as: "style", + href: stylesheet.props.href, + crossOrigin: props.crossOrigin, + fetchPriority: props.fetchPriority, + integrity: props.integrity, + media: props.media, + hrefLang: props.hrefLang, + referrerPolicy: props.referrerPolicy + }); + for ( + stylesheet = 0; + stylesheet < stylesheetFlushingQueue.length; + stylesheet++ + ) + writeChunk(this, stylesheetFlushingQueue[stylesheet]); + stylesheetFlushingQueue.length = 0; + } +} +function preloadLateStyles(styleQueue) { + styleQueue.sheets.forEach(preloadLateStyle, this); + styleQueue.sheets.clear(); +} +stringToPrecomputedChunk('<link rel="expect" href="#'); +stringToPrecomputedChunk('" blocking="render"/>'); +var completedShellIdAttributeStart = stringToPrecomputedChunk(' id="'); +function pushCompletedShellIdAttribute(target, resumableState) { + 0 === (resumableState.instructions & 32) && + ((resumableState.instructions |= 32), + target.push( + completedShellIdAttributeStart, + stringToChunk(escapeTextForBrowser("_" + resumableState.idPrefix + "R_")), + attributeEnd + )); +} +var arrayFirstOpenBracket = stringToPrecomputedChunk("["), + arraySubsequentOpenBracket = stringToPrecomputedChunk(",["), + arrayInterstitial = stringToPrecomputedChunk(","), + arrayCloseBracket = stringToPrecomputedChunk("]"); +function writeStyleResourceDependenciesInJS(destination, hoistableState) { + writeChunk(destination, arrayFirstOpenBracket); + var nextArrayOpenBrackChunk = arrayFirstOpenBracket; + hoistableState.stylesheets.forEach(function (resource) { + if (2 !== resource.state) + if (3 === resource.state) + writeChunk(destination, nextArrayOpenBrackChunk), + writeChunk( + destination, + stringToChunk( + escapeJSObjectForInstructionScripts("" + resource.props.href) + ) + ), + writeChunk(destination, arrayCloseBracket), + (nextArrayOpenBrackChunk = arraySubsequentOpenBracket); + else { + writeChunk(destination, nextArrayOpenBrackChunk); + var precedence = resource.props["data-precedence"], + props = resource.props, + coercedHref = sanitizeURL("" + resource.props.href); + writeChunk( + destination, + stringToChunk(escapeJSObjectForInstructionScripts(coercedHref)) + ); + precedence = "" + precedence; + writeChunk(destination, arrayInterstitial); + writeChunk( + destination, + stringToChunk(escapeJSObjectForInstructionScripts(precedence)) + ); + for (var propKey in props) + if ( + hasOwnProperty.call(props, propKey) && + ((precedence = props[propKey]), null != precedence) + ) + switch (propKey) { + case "href": + case "rel": + case "precedence": + case "data-precedence": + break; + case "children": + case "dangerouslySetInnerHTML": + throw Error(formatProdErrorMessage(399, "link")); + default: + writeStyleResourceAttributeInJS( + destination, + propKey, + precedence + ); + } + writeChunk(destination, arrayCloseBracket); + nextArrayOpenBrackChunk = arraySubsequentOpenBracket; + resource.state = 3; + } + }); + writeChunk(destination, arrayCloseBracket); +} +function writeStyleResourceAttributeInJS(destination, name, value) { + var attributeName = name.toLowerCase(); + switch (typeof value) { + case "function": + case "symbol": + return; + } + switch (name) { + case "innerHTML": + case "dangerouslySetInnerHTML": + case "suppressContentEditableWarning": + case "suppressHydrationWarning": + case "style": + case "ref": + return; + case "className": + attributeName = "class"; + name = "" + value; + break; + case "hidden": + if (!1 === value) return; + name = ""; + break; + case "src": + case "href": + value = sanitizeURL(value); + name = "" + value; + break; + default: + if ( + (2 < name.length && + ("o" === name[0] || "O" === name[0]) && + ("n" === name[1] || "N" === name[1])) || + !isAttributeNameSafe(name) + ) + return; + name = "" + value; + } + writeChunk(destination, arrayInterstitial); + writeChunk( + destination, + stringToChunk(escapeJSObjectForInstructionScripts(attributeName)) + ); + writeChunk(destination, arrayInterstitial); + writeChunk( + destination, + stringToChunk(escapeJSObjectForInstructionScripts(name)) + ); +} +function createHoistableState() { + return { styles: new Set(), stylesheets: new Set(), suspenseyImages: !1 }; +} +function prefetchDNS(href) { + var request = currentRequest ? currentRequest : null; + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if ("string" === typeof href && href) { + if (!resumableState.dnsResources.hasOwnProperty(href)) { + resumableState.dnsResources[href] = null; + resumableState = renderState.headers; + var header, JSCompiler_temp; + if ( + (JSCompiler_temp = + resumableState && 0 < resumableState.remainingCapacity) + ) + JSCompiler_temp = + ((header = + "<" + + ("" + href).replace( + regexForHrefInLinkHeaderURLContext, + escapeHrefForLinkHeaderURLContextReplacer + ) + + ">; rel=dns-prefetch"), + 0 <= (resumableState.remainingCapacity -= header.length + 2)); + JSCompiler_temp + ? ((renderState.resets.dns[href] = null), + resumableState.preconnects && (resumableState.preconnects += ", "), + (resumableState.preconnects += header)) + : ((header = []), + pushLinkImpl(header, { href: href, rel: "dns-prefetch" }), + renderState.preconnects.add(header)); + } + enqueueFlush(request); + } + } else previousDispatcher.D(href); +} +function preconnect(href, crossOrigin) { + var request = currentRequest ? currentRequest : null; + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if ("string" === typeof href && href) { + var bucket = + "use-credentials" === crossOrigin + ? "credentials" + : "string" === typeof crossOrigin + ? "anonymous" + : "default"; + if (!resumableState.connectResources[bucket].hasOwnProperty(href)) { + resumableState.connectResources[bucket][href] = null; + resumableState = renderState.headers; + var header, JSCompiler_temp; + if ( + (JSCompiler_temp = + resumableState && 0 < resumableState.remainingCapacity) + ) { + JSCompiler_temp = + "<" + + ("" + href).replace( + regexForHrefInLinkHeaderURLContext, + escapeHrefForLinkHeaderURLContextReplacer + ) + + ">; rel=preconnect"; + if ("string" === typeof crossOrigin) { + var escapedCrossOrigin = ("" + crossOrigin).replace( + regexForLinkHeaderQuotedParamValueContext, + escapeStringForLinkHeaderQuotedParamValueContextReplacer + ); + JSCompiler_temp += '; crossorigin="' + escapedCrossOrigin + '"'; + } + JSCompiler_temp = + ((header = JSCompiler_temp), + 0 <= (resumableState.remainingCapacity -= header.length + 2)); + } + JSCompiler_temp + ? ((renderState.resets.connect[bucket][href] = null), + resumableState.preconnects && (resumableState.preconnects += ", "), + (resumableState.preconnects += header)) + : ((bucket = []), + pushLinkImpl(bucket, { + rel: "preconnect", + href: href, + crossOrigin: crossOrigin + }), + renderState.preconnects.add(bucket)); + } + enqueueFlush(request); + } + } else previousDispatcher.C(href, crossOrigin); +} +function preload(href, as, options) { + var request = currentRequest ? currentRequest : null; + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if (as && href) { + switch (as) { + case "image": + if (options) { + var imageSrcSet = options.imageSrcSet; + var imageSizes = options.imageSizes; + var fetchPriority = options.fetchPriority; + } + var key = imageSrcSet + ? imageSrcSet + "\n" + (imageSizes || "") + : href; + if (resumableState.imageResources.hasOwnProperty(key)) return; + resumableState.imageResources[key] = PRELOAD_NO_CREDS; + resumableState = renderState.headers; + var header; + resumableState && + 0 < resumableState.remainingCapacity && + "string" !== typeof imageSrcSet && + "high" === fetchPriority && + ((header = getPreloadAsHeader(href, as, options)), + 0 <= (resumableState.remainingCapacity -= header.length + 2)) + ? ((renderState.resets.image[key] = PRELOAD_NO_CREDS), + resumableState.highImagePreloads && + (resumableState.highImagePreloads += ", "), + (resumableState.highImagePreloads += header)) + : ((resumableState = []), + pushLinkImpl( + resumableState, + assign( + { rel: "preload", href: imageSrcSet ? void 0 : href, as: as }, + options + ) + ), + "high" === fetchPriority + ? renderState.highImagePreloads.add(resumableState) + : (renderState.bulkPreloads.add(resumableState), + renderState.preloads.images.set(key, resumableState))); + break; + case "style": + if (resumableState.styleResources.hasOwnProperty(href)) return; + imageSrcSet = []; + pushLinkImpl( + imageSrcSet, + assign({ rel: "preload", href: href, as: as }, options) + ); + resumableState.styleResources[href] = + !options || + ("string" !== typeof options.crossOrigin && + "string" !== typeof options.integrity) + ? PRELOAD_NO_CREDS + : [options.crossOrigin, options.integrity]; + renderState.preloads.stylesheets.set(href, imageSrcSet); + renderState.bulkPreloads.add(imageSrcSet); + break; + case "script": + if (resumableState.scriptResources.hasOwnProperty(href)) return; + imageSrcSet = []; + renderState.preloads.scripts.set(href, imageSrcSet); + renderState.bulkPreloads.add(imageSrcSet); + pushLinkImpl( + imageSrcSet, + assign({ rel: "preload", href: href, as: as }, options) + ); + resumableState.scriptResources[href] = + !options || + ("string" !== typeof options.crossOrigin && + "string" !== typeof options.integrity) + ? PRELOAD_NO_CREDS + : [options.crossOrigin, options.integrity]; + break; + default: + if (resumableState.unknownResources.hasOwnProperty(as)) { + if ( + ((imageSrcSet = resumableState.unknownResources[as]), + imageSrcSet.hasOwnProperty(href)) + ) + return; + } else + (imageSrcSet = {}), + (resumableState.unknownResources[as] = imageSrcSet); + imageSrcSet[href] = PRELOAD_NO_CREDS; + if ( + (resumableState = renderState.headers) && + 0 < resumableState.remainingCapacity && + "font" === as && + ((key = getPreloadAsHeader(href, as, options)), + 0 <= (resumableState.remainingCapacity -= key.length + 2)) + ) + (renderState.resets.font[href] = PRELOAD_NO_CREDS), + resumableState.fontPreloads && + (resumableState.fontPreloads += ", "), + (resumableState.fontPreloads += key); + else + switch ( + ((resumableState = []), + (href = assign({ rel: "preload", href: href, as: as }, options)), + pushLinkImpl(resumableState, href), + as) + ) { + case "font": + renderState.fontPreloads.add(resumableState); + break; + default: + renderState.bulkPreloads.add(resumableState); + } + } + enqueueFlush(request); + } + } else previousDispatcher.L(href, as, options); +} +function preloadModule(href, options) { + var request = currentRequest ? currentRequest : null; + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if (href) { + var as = + options && "string" === typeof options.as ? options.as : "script"; + switch (as) { + case "script": + if (resumableState.moduleScriptResources.hasOwnProperty(href)) return; + as = []; + resumableState.moduleScriptResources[href] = + !options || + ("string" !== typeof options.crossOrigin && + "string" !== typeof options.integrity) + ? PRELOAD_NO_CREDS + : [options.crossOrigin, options.integrity]; + renderState.preloads.moduleScripts.set(href, as); + break; + default: + if (resumableState.moduleUnknownResources.hasOwnProperty(as)) { + var resources = resumableState.unknownResources[as]; + if (resources.hasOwnProperty(href)) return; + } else + (resources = {}), + (resumableState.moduleUnknownResources[as] = resources); + as = []; + resources[href] = PRELOAD_NO_CREDS; + } + pushLinkImpl(as, assign({ rel: "modulepreload", href: href }, options)); + renderState.bulkPreloads.add(as); + enqueueFlush(request); + } + } else previousDispatcher.m(href, options); +} +function preinitStyle(href, precedence, options) { + var request = currentRequest ? currentRequest : null; + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if (href) { + precedence = precedence || "default"; + var styleQueue = renderState.styles.get(precedence), + resourceState = resumableState.styleResources.hasOwnProperty(href) + ? resumableState.styleResources[href] + : void 0; + null !== resourceState && + ((resumableState.styleResources[href] = null), + styleQueue || + ((styleQueue = { + precedence: stringToChunk(escapeTextForBrowser(precedence)), + rules: [], + hrefs: [], + sheets: new Map() + }), + renderState.styles.set(precedence, styleQueue)), + (precedence = { + state: 0, + props: assign( + { rel: "stylesheet", href: href, "data-precedence": precedence }, + options + ) + }), + resourceState && + (2 === resourceState.length && + adoptPreloadCredentials(precedence.props, resourceState), + (renderState = renderState.preloads.stylesheets.get(href)) && + 0 < renderState.length + ? (renderState.length = 0) + : (precedence.state = 1)), + styleQueue.sheets.set(href, precedence), + enqueueFlush(request)); + } + } else previousDispatcher.S(href, precedence, options); +} +function preinitScript(src, options) { + var request = currentRequest ? currentRequest : null; + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if (src) { + var resourceState = resumableState.scriptResources.hasOwnProperty(src) + ? resumableState.scriptResources[src] + : void 0; + null !== resourceState && + ((resumableState.scriptResources[src] = null), + (options = assign({ src: src, async: !0 }, options)), + resourceState && + (2 === resourceState.length && + adoptPreloadCredentials(options, resourceState), + (src = renderState.preloads.scripts.get(src))) && + (src.length = 0), + (src = []), + renderState.scripts.add(src), + pushScriptImpl(src, options), + enqueueFlush(request)); + } + } else previousDispatcher.X(src, options); +} +function preinitModuleScript(src, options) { + var request = currentRequest ? currentRequest : null; + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if (src) { + var resourceState = resumableState.moduleScriptResources.hasOwnProperty( + src + ) + ? resumableState.moduleScriptResources[src] + : void 0; + null !== resourceState && + ((resumableState.moduleScriptResources[src] = null), + (options = assign({ src: src, type: "module", async: !0 }, options)), + resourceState && + (2 === resourceState.length && + adoptPreloadCredentials(options, resourceState), + (src = renderState.preloads.moduleScripts.get(src))) && + (src.length = 0), + (src = []), + renderState.scripts.add(src), + pushScriptImpl(src, options), + enqueueFlush(request)); + } + } else previousDispatcher.M(src, options); +} +function adoptPreloadCredentials(target, preloadState) { + null == target.crossOrigin && (target.crossOrigin = preloadState[0]); + null == target.integrity && (target.integrity = preloadState[1]); +} +function getPreloadAsHeader(href, as, params) { + href = ("" + href).replace( + regexForHrefInLinkHeaderURLContext, + escapeHrefForLinkHeaderURLContextReplacer + ); + as = ("" + as).replace( + regexForLinkHeaderQuotedParamValueContext, + escapeStringForLinkHeaderQuotedParamValueContextReplacer + ); + as = "<" + href + '>; rel=preload; as="' + as + '"'; + for (var paramName in params) + hasOwnProperty.call(params, paramName) && + ((href = params[paramName]), + "string" === typeof href && + (as += + "; " + + paramName.toLowerCase() + + '="' + + ("" + href).replace( + regexForLinkHeaderQuotedParamValueContext, + escapeStringForLinkHeaderQuotedParamValueContextReplacer + ) + + '"')); + return as; +} +var regexForHrefInLinkHeaderURLContext = /[<>\r\n]/g; +function escapeHrefForLinkHeaderURLContextReplacer(match) { + switch (match) { + case "<": + return "%3C"; + case ">": + return "%3E"; + case "\n": + return "%0A"; + case "\r": + return "%0D"; + default: + throw Error( + "escapeLinkHrefForHeaderContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React" + ); + } +} +var regexForLinkHeaderQuotedParamValueContext = /["';,\r\n]/g; +function escapeStringForLinkHeaderQuotedParamValueContextReplacer(match) { + switch (match) { + case '"': + return "%22"; + case "'": + return "%27"; + case ";": + return "%3B"; + case ",": + return "%2C"; + case "\n": + return "%0A"; + case "\r": + return "%0D"; + default: + throw Error( + "escapeStringForLinkHeaderQuotedParamValueContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React" + ); + } +} +function hoistStyleQueueDependency(styleQueue) { + this.styles.add(styleQueue); +} +function hoistStylesheetDependency(stylesheet) { + this.stylesheets.add(stylesheet); +} +function hoistHoistables(parentState, childState) { + childState.styles.forEach(hoistStyleQueueDependency, parentState); + childState.stylesheets.forEach(hoistStylesheetDependency, parentState); + childState.suspenseyImages && (parentState.suspenseyImages = !0); +} +function hasSuspenseyContent(hoistableState) { + return 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages; +} +var bind = Function.prototype.bind, + REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"); +function getComponentNameFromType(type) { + if (null == type) return null; + if ("function" === typeof type) + return type.$$typeof === REACT_CLIENT_REFERENCE + ? null + : type.displayName || type.name || null; + if ("string" === typeof type) return type; + switch (type) { + case REACT_FRAGMENT_TYPE: + return "Fragment"; + case REACT_PROFILER_TYPE: + return "Profiler"; + case REACT_STRICT_MODE_TYPE: + return "StrictMode"; + case REACT_SUSPENSE_TYPE: + return "Suspense"; + case REACT_SUSPENSE_LIST_TYPE: + return "SuspenseList"; + case REACT_ACTIVITY_TYPE: + return "Activity"; + } + if ("object" === typeof type) + switch (type.$$typeof) { + case REACT_PORTAL_TYPE: + return "Portal"; + case REACT_CONTEXT_TYPE: + return type.displayName || "Context"; + case REACT_CONSUMER_TYPE: + return (type._context.displayName || "Context") + ".Consumer"; + case REACT_FORWARD_REF_TYPE: + var innerType = type.render; + type = type.displayName; + type || + ((type = innerType.displayName || innerType.name || ""), + (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef")); + return type; + case REACT_MEMO_TYPE: + return ( + (innerType = type.displayName || null), + null !== innerType + ? innerType + : getComponentNameFromType(type.type) || "Memo" + ); + case REACT_LAZY_TYPE: + innerType = type._payload; + type = type._init; + try { + return getComponentNameFromType(type(innerType)); + } catch (x) {} + } + return null; +} +var emptyContextObject = {}, + currentActiveSnapshot = null; +function popToNearestCommonAncestor(prev, next) { + if (prev !== next) { + prev.context._currentValue = prev.parentValue; + prev = prev.parent; + var parentNext = next.parent; + if (null === prev) { + if (null !== parentNext) throw Error(formatProdErrorMessage(401)); + } else { + if (null === parentNext) throw Error(formatProdErrorMessage(401)); + popToNearestCommonAncestor(prev, parentNext); + } + next.context._currentValue = next.value; + } +} +function popAllPrevious(prev) { + prev.context._currentValue = prev.parentValue; + prev = prev.parent; + null !== prev && popAllPrevious(prev); +} +function pushAllNext(next) { + var parentNext = next.parent; + null !== parentNext && pushAllNext(parentNext); + next.context._currentValue = next.value; +} +function popPreviousToCommonLevel(prev, next) { + prev.context._currentValue = prev.parentValue; + prev = prev.parent; + if (null === prev) throw Error(formatProdErrorMessage(402)); + prev.depth === next.depth + ? popToNearestCommonAncestor(prev, next) + : popPreviousToCommonLevel(prev, next); +} +function popNextToCommonLevel(prev, next) { + var parentNext = next.parent; + if (null === parentNext) throw Error(formatProdErrorMessage(402)); + prev.depth === parentNext.depth + ? popToNearestCommonAncestor(prev, parentNext) + : popNextToCommonLevel(prev, parentNext); + next.context._currentValue = next.value; +} +function switchContext(newSnapshot) { + var prev = currentActiveSnapshot; + prev !== newSnapshot && + (null === prev + ? pushAllNext(newSnapshot) + : null === newSnapshot + ? popAllPrevious(prev) + : prev.depth === newSnapshot.depth + ? popToNearestCommonAncestor(prev, newSnapshot) + : prev.depth > newSnapshot.depth + ? popPreviousToCommonLevel(prev, newSnapshot) + : popNextToCommonLevel(prev, newSnapshot), + (currentActiveSnapshot = newSnapshot)); +} +var classComponentUpdater = { + enqueueSetState: function (inst, payload) { + inst = inst._reactInternals; + null !== inst.queue && inst.queue.push(payload); + }, + enqueueReplaceState: function (inst, payload) { + inst = inst._reactInternals; + inst.replace = !0; + inst.queue = [payload]; + }, + enqueueForceUpdate: function () {} + }, + emptyTreeContext = { id: 1, overflow: "" }; +function pushTreeContext(baseContext, totalChildren, index) { + var baseIdWithLeadingBit = baseContext.id; + baseContext = baseContext.overflow; + var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1; + baseIdWithLeadingBit &= ~(1 << baseLength); + index += 1; + var length = 32 - clz32(totalChildren) + baseLength; + if (30 < length) { + var numberOfOverflowBits = baseLength - (baseLength % 5); + length = ( + baseIdWithLeadingBit & + ((1 << numberOfOverflowBits) - 1) + ).toString(32); + baseIdWithLeadingBit >>= numberOfOverflowBits; + baseLength -= numberOfOverflowBits; + return { + id: + (1 << (32 - clz32(totalChildren) + baseLength)) | + (index << baseLength) | + baseIdWithLeadingBit, + overflow: length + baseContext + }; + } + return { + id: (1 << length) | (index << baseLength) | baseIdWithLeadingBit, + overflow: baseContext + }; +} +var clz32 = Math.clz32 ? Math.clz32 : clz32Fallback, + log = Math.log, + LN2 = Math.LN2; +function clz32Fallback(x) { + x >>>= 0; + return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0; +} +function noop() {} +var SuspenseException = Error(formatProdErrorMessage(460)); +function trackUsedThenable(thenableState, thenable, index) { + index = thenableState[index]; + void 0 === index + ? thenableState.push(thenable) + : index !== thenable && (thenable.then(noop, noop), (thenable = index)); + switch (thenable.status) { + case "fulfilled": + return thenable.value; + case "rejected": + throw thenable.reason; + default: + "string" === typeof thenable.status + ? thenable.then(noop, noop) + : ((thenableState = thenable), + (thenableState.status = "pending"), + thenableState.then( + function (fulfilledValue) { + if ("pending" === thenable.status) { + var fulfilledThenable = thenable; + fulfilledThenable.status = "fulfilled"; + fulfilledThenable.value = fulfilledValue; + } + }, + function (error) { + if ("pending" === thenable.status) { + var rejectedThenable = thenable; + rejectedThenable.status = "rejected"; + rejectedThenable.reason = error; + } + } + )); + switch (thenable.status) { + case "fulfilled": + return thenable.value; + case "rejected": + throw thenable.reason; + } + suspendedThenable = thenable; + throw SuspenseException; + } +} +var suspendedThenable = null; +function getSuspendedThenable() { + if (null === suspendedThenable) throw Error(formatProdErrorMessage(459)); + var thenable = suspendedThenable; + suspendedThenable = null; + return thenable; +} +function is(x, y) { + return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y); +} +var objectIs = "function" === typeof Object.is ? Object.is : is, + currentlyRenderingComponent = null, + currentlyRenderingTask = null, + currentlyRenderingRequest = null, + currentlyRenderingKeyPath = null, + firstWorkInProgressHook = null, + workInProgressHook = null, + isReRender = !1, + didScheduleRenderPhaseUpdate = !1, + localIdCounter = 0, + actionStateCounter = 0, + actionStateMatchingIndex = -1, + thenableIndexCounter = 0, + thenableState = null, + renderPhaseUpdates = null, + numberOfReRenders = 0; +function resolveCurrentlyRenderingComponent() { + if (null === currentlyRenderingComponent) + throw Error(formatProdErrorMessage(321)); + return currentlyRenderingComponent; +} +function createHook() { + if (0 < numberOfReRenders) throw Error(formatProdErrorMessage(312)); + return { memoizedState: null, queue: null, next: null }; +} +function createWorkInProgressHook() { + null === workInProgressHook + ? null === firstWorkInProgressHook + ? ((isReRender = !1), + (firstWorkInProgressHook = workInProgressHook = createHook())) + : ((isReRender = !0), (workInProgressHook = firstWorkInProgressHook)) + : null === workInProgressHook.next + ? ((isReRender = !1), + (workInProgressHook = workInProgressHook.next = createHook())) + : ((isReRender = !0), (workInProgressHook = workInProgressHook.next)); + return workInProgressHook; +} +function getThenableStateAfterSuspending() { + var state = thenableState; + thenableState = null; + return state; +} +function resetHooksState() { + currentlyRenderingKeyPath = + currentlyRenderingRequest = + currentlyRenderingTask = + currentlyRenderingComponent = + null; + didScheduleRenderPhaseUpdate = !1; + firstWorkInProgressHook = null; + numberOfReRenders = 0; + workInProgressHook = renderPhaseUpdates = null; +} +function basicStateReducer(state, action) { + return "function" === typeof action ? action(state) : action; +} +function useReducer(reducer, initialArg, init) { + currentlyRenderingComponent = resolveCurrentlyRenderingComponent(); + workInProgressHook = createWorkInProgressHook(); + if (isReRender) { + var queue = workInProgressHook.queue; + initialArg = queue.dispatch; + if ( + null !== renderPhaseUpdates && + ((init = renderPhaseUpdates.get(queue)), void 0 !== init) + ) { + renderPhaseUpdates.delete(queue); + queue = workInProgressHook.memoizedState; + do (queue = reducer(queue, init.action)), (init = init.next); + while (null !== init); + workInProgressHook.memoizedState = queue; + return [queue, initialArg]; + } + return [workInProgressHook.memoizedState, initialArg]; + } + reducer = + reducer === basicStateReducer + ? "function" === typeof initialArg + ? initialArg() + : initialArg + : void 0 !== init + ? init(initialArg) + : initialArg; + workInProgressHook.memoizedState = reducer; + reducer = workInProgressHook.queue = { last: null, dispatch: null }; + reducer = reducer.dispatch = dispatchAction.bind( + null, + currentlyRenderingComponent, + reducer + ); + return [workInProgressHook.memoizedState, reducer]; +} +function useMemo(nextCreate, deps) { + currentlyRenderingComponent = resolveCurrentlyRenderingComponent(); + workInProgressHook = createWorkInProgressHook(); + deps = void 0 === deps ? null : deps; + if (null !== workInProgressHook) { + var prevState = workInProgressHook.memoizedState; + if (null !== prevState && null !== deps) { + var prevDeps = prevState[1]; + a: if (null === prevDeps) prevDeps = !1; + else { + for (var i = 0; i < prevDeps.length && i < deps.length; i++) + if (!objectIs(deps[i], prevDeps[i])) { + prevDeps = !1; + break a; + } + prevDeps = !0; + } + if (prevDeps) return prevState[0]; + } + } + nextCreate = nextCreate(); + workInProgressHook.memoizedState = [nextCreate, deps]; + return nextCreate; +} +function dispatchAction(componentIdentity, queue, action) { + if (25 <= numberOfReRenders) throw Error(formatProdErrorMessage(301)); + if (componentIdentity === currentlyRenderingComponent) + if ( + ((didScheduleRenderPhaseUpdate = !0), + (componentIdentity = { action: action, next: null }), + null === renderPhaseUpdates && (renderPhaseUpdates = new Map()), + (action = renderPhaseUpdates.get(queue)), + void 0 === action) + ) + renderPhaseUpdates.set(queue, componentIdentity); + else { + for (queue = action; null !== queue.next; ) queue = queue.next; + queue.next = componentIdentity; + } +} +function throwOnUseEffectEventCall() { + throw Error(formatProdErrorMessage(440)); +} +function unsupportedStartTransition() { + throw Error(formatProdErrorMessage(394)); +} +function unsupportedSetOptimisticState() { + throw Error(formatProdErrorMessage(479)); +} +function useActionState(action, initialState, permalink) { + resolveCurrentlyRenderingComponent(); + var actionStateHookIndex = actionStateCounter++, + request = currentlyRenderingRequest; + if ("function" === typeof action.$$FORM_ACTION) { + var nextPostbackStateKey = null, + componentKeyPath = currentlyRenderingKeyPath; + request = request.formState; + var isSignatureEqual = action.$$IS_SIGNATURE_EQUAL; + if (null !== request && "function" === typeof isSignatureEqual) { + var postbackKey = request[1]; + isSignatureEqual.call(action, request[2], request[3]) && + ((nextPostbackStateKey = + void 0 !== permalink + ? "p" + permalink + : "k" + + murmurhash3_32_gc( + JSON.stringify([componentKeyPath, null, actionStateHookIndex]), + 0 + )), + postbackKey === nextPostbackStateKey && + ((actionStateMatchingIndex = actionStateHookIndex), + (initialState = request[0]))); + } + var boundAction = action.bind(null, initialState); + action = function (payload) { + boundAction(payload); + }; + "function" === typeof boundAction.$$FORM_ACTION && + (action.$$FORM_ACTION = function (prefix) { + prefix = boundAction.$$FORM_ACTION(prefix); + void 0 !== permalink && + ((permalink += ""), (prefix.action = permalink)); + var formData = prefix.data; + formData && + (null === nextPostbackStateKey && + (nextPostbackStateKey = + void 0 !== permalink + ? "p" + permalink + : "k" + + murmurhash3_32_gc( + JSON.stringify([ + componentKeyPath, + null, + actionStateHookIndex + ]), + 0 + )), + formData.append("$ACTION_KEY", nextPostbackStateKey)); + return prefix; + }); + return [initialState, action, !1]; + } + var boundAction$22 = action.bind(null, initialState); + return [ + initialState, + function (payload) { + boundAction$22(payload); + }, + !1 + ]; +} +function unwrapThenable(thenable) { + var index = thenableIndexCounter; + thenableIndexCounter += 1; + null === thenableState && (thenableState = []); + return trackUsedThenable(thenableState, thenable, index); +} +function unsupportedRefresh() { + throw Error(formatProdErrorMessage(393)); +} +var HooksDispatcher = { + readContext: function (context) { + return context._currentValue; + }, + use: function (usable) { + if (null !== usable && "object" === typeof usable) { + if ("function" === typeof usable.then) return unwrapThenable(usable); + if (usable.$$typeof === REACT_CONTEXT_TYPE) return usable._currentValue; + } + throw Error(formatProdErrorMessage(438, String(usable))); + }, + useContext: function (context) { + resolveCurrentlyRenderingComponent(); + return context._currentValue; + }, + useMemo: useMemo, + useReducer: useReducer, + useRef: function (initialValue) { + currentlyRenderingComponent = resolveCurrentlyRenderingComponent(); + workInProgressHook = createWorkInProgressHook(); + var previousRef = workInProgressHook.memoizedState; + return null === previousRef + ? ((initialValue = { current: initialValue }), + (workInProgressHook.memoizedState = initialValue)) + : previousRef; + }, + useState: function (initialState) { + return useReducer(basicStateReducer, initialState); + }, + useInsertionEffect: noop, + useLayoutEffect: noop, + useCallback: function (callback, deps) { + return useMemo(function () { + return callback; + }, deps); + }, + useImperativeHandle: noop, + useEffect: noop, + useDebugValue: noop, + useDeferredValue: function (value, initialValue) { + resolveCurrentlyRenderingComponent(); + return void 0 !== initialValue ? initialValue : value; + }, + useTransition: function () { + resolveCurrentlyRenderingComponent(); + return [!1, unsupportedStartTransition]; + }, + useId: function () { + var JSCompiler_inline_result = currentlyRenderingTask.treeContext; + var overflow = JSCompiler_inline_result.overflow; + JSCompiler_inline_result = JSCompiler_inline_result.id; + JSCompiler_inline_result = + ( + JSCompiler_inline_result & + ~(1 << (32 - clz32(JSCompiler_inline_result) - 1)) + ).toString(32) + overflow; + var resumableState = currentResumableState; + if (null === resumableState) throw Error(formatProdErrorMessage(404)); + overflow = localIdCounter++; + JSCompiler_inline_result = + "_" + resumableState.idPrefix + "R_" + JSCompiler_inline_result; + 0 < overflow && (JSCompiler_inline_result += "H" + overflow.toString(32)); + return JSCompiler_inline_result + "_"; + }, + useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) { + if (void 0 === getServerSnapshot) + throw Error(formatProdErrorMessage(407)); + return getServerSnapshot(); + }, + useOptimistic: function (passthrough) { + resolveCurrentlyRenderingComponent(); + return [passthrough, unsupportedSetOptimisticState]; + }, + useActionState: useActionState, + useFormState: useActionState, + useHostTransitionStatus: function () { + resolveCurrentlyRenderingComponent(); + return sharedNotPendingObject; + }, + useMemoCache: function (size) { + for (var data = Array(size), i = 0; i < size; i++) + data[i] = REACT_MEMO_CACHE_SENTINEL; + return data; + }, + useCacheRefresh: function () { + return unsupportedRefresh; + }, + useEffectEvent: function () { + return throwOnUseEffectEventCall; + } + }, + currentResumableState = null, + DefaultAsyncDispatcher = { + getCacheForType: function () { + throw Error(formatProdErrorMessage(248)); + }, + cacheSignal: function () { + throw Error(formatProdErrorMessage(248)); + } + }, + prefix, + suffix; +function describeBuiltInComponentFrame(name) { + if (void 0 === prefix) + try { + throw Error(); + } catch (x) { + var match = x.stack.trim().match(/\n( *(at )?)/); + prefix = (match && match[1]) || ""; + suffix = + -1 < x.stack.indexOf("\n at") + ? " (<anonymous>)" + : -1 < x.stack.indexOf("@") + ? "@unknown:0:0" + : ""; + } + return "\n" + prefix + name + suffix; +} +var reentry = !1; +function describeNativeComponentFrame(fn, construct) { + if (!fn || reentry) return ""; + reentry = !0; + var previousPrepareStackTrace = Error.prepareStackTrace; + Error.prepareStackTrace = void 0; + try { + var RunInRootFrame = { + DetermineComponentFrameRoot: function () { + try { + if (construct) { + var Fake = function () { + throw Error(); + }; + Object.defineProperty(Fake.prototype, "props", { + set: function () { + throw Error(); + } + }); + if ("object" === typeof Reflect && Reflect.construct) { + try { + Reflect.construct(Fake, []); + } catch (x) { + var control = x; + } + Reflect.construct(fn, [], Fake); + } else { + try { + Fake.call(); + } catch (x$24) { + control = x$24; + } + fn.call(Fake.prototype); + } + } else { + try { + throw Error(); + } catch (x$25) { + control = x$25; + } + (Fake = fn()) && + "function" === typeof Fake.catch && + Fake.catch(function () {}); + } + } catch (sample) { + if (sample && control && "string" === typeof sample.stack) + return [sample.stack, control.stack]; + } + return [null, null]; + } + }; + RunInRootFrame.DetermineComponentFrameRoot.displayName = + "DetermineComponentFrameRoot"; + var namePropDescriptor = Object.getOwnPropertyDescriptor( + RunInRootFrame.DetermineComponentFrameRoot, + "name" + ); + namePropDescriptor && + namePropDescriptor.configurable && + Object.defineProperty( + RunInRootFrame.DetermineComponentFrameRoot, + "name", + { value: "DetermineComponentFrameRoot" } + ); + var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(), + sampleStack = _RunInRootFrame$Deter[0], + controlStack = _RunInRootFrame$Deter[1]; + if (sampleStack && controlStack) { + var sampleLines = sampleStack.split("\n"), + controlLines = controlStack.split("\n"); + for ( + namePropDescriptor = RunInRootFrame = 0; + RunInRootFrame < sampleLines.length && + !sampleLines[RunInRootFrame].includes("DetermineComponentFrameRoot"); + + ) + RunInRootFrame++; + for ( + ; + namePropDescriptor < controlLines.length && + !controlLines[namePropDescriptor].includes( + "DetermineComponentFrameRoot" + ); + + ) + namePropDescriptor++; + if ( + RunInRootFrame === sampleLines.length || + namePropDescriptor === controlLines.length + ) + for ( + RunInRootFrame = sampleLines.length - 1, + namePropDescriptor = controlLines.length - 1; + 1 <= RunInRootFrame && + 0 <= namePropDescriptor && + sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]; + + ) + namePropDescriptor--; + for ( + ; + 1 <= RunInRootFrame && 0 <= namePropDescriptor; + RunInRootFrame--, namePropDescriptor-- + ) + if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) { + if (1 !== RunInRootFrame || 1 !== namePropDescriptor) { + do + if ( + (RunInRootFrame--, + namePropDescriptor--, + 0 > namePropDescriptor || + sampleLines[RunInRootFrame] !== + controlLines[namePropDescriptor]) + ) { + var frame = + "\n" + + sampleLines[RunInRootFrame].replace(" at new ", " at "); + fn.displayName && + frame.includes("<anonymous>") && + (frame = frame.replace("<anonymous>", fn.displayName)); + return frame; + } + while (1 <= RunInRootFrame && 0 <= namePropDescriptor); + } + break; + } + } + } finally { + (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace); + } + return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : "") + ? describeBuiltInComponentFrame(previousPrepareStackTrace) + : ""; +} +function describeComponentStackByType(type) { + if ("string" === typeof type) return describeBuiltInComponentFrame(type); + if ("function" === typeof type) + return type.prototype && type.prototype.isReactComponent + ? describeNativeComponentFrame(type, !0) + : describeNativeComponentFrame(type, !1); + if ("object" === typeof type && null !== type) { + switch (type.$$typeof) { + case REACT_FORWARD_REF_TYPE: + return describeNativeComponentFrame(type.render, !1); + case REACT_MEMO_TYPE: + return describeNativeComponentFrame(type.type, !1); + case REACT_LAZY_TYPE: + var lazyComponent = type, + payload = lazyComponent._payload; + lazyComponent = lazyComponent._init; + try { + type = lazyComponent(payload); + } catch (x) { + return describeBuiltInComponentFrame("Lazy"); + } + return describeComponentStackByType(type); + } + if ("string" === typeof type.name) { + a: { + payload = type.name; + lazyComponent = type.env; + var location = type.debugLocation; + if ( + null != location && + ((type = Error.prepareStackTrace), + (Error.prepareStackTrace = void 0), + (location = location.stack), + (Error.prepareStackTrace = type), + location.startsWith("Error: react-stack-top-frame\n") && + (location = location.slice(29)), + (type = location.indexOf("\n")), + -1 !== type && (location = location.slice(type + 1)), + (type = location.indexOf("react_stack_bottom_frame")), + -1 !== type && (type = location.lastIndexOf("\n", type)), + (type = -1 !== type ? (location = location.slice(0, type)) : ""), + (location = type.lastIndexOf("\n")), + (type = -1 === location ? type : type.slice(location + 1)), + -1 !== type.indexOf(payload)) + ) { + payload = "\n" + type; + break a; + } + payload = describeBuiltInComponentFrame( + payload + (lazyComponent ? " [" + lazyComponent + "]" : "") + ); + } + return payload; + } + } + switch (type) { + case REACT_SUSPENSE_LIST_TYPE: + return describeBuiltInComponentFrame("SuspenseList"); + case REACT_SUSPENSE_TYPE: + return describeBuiltInComponentFrame("Suspense"); + } + return ""; +} +function isEligibleForOutlining(request, boundary) { + return ( + (500 < boundary.byteSize || hasSuspenseyContent(boundary.contentState)) && + null === boundary.contentPreamble + ); +} +function defaultErrorHandler(error) { + if ( + "object" === typeof error && + null !== error && + "string" === typeof error.environmentName + ) { + var JSCompiler_inline_result = error.environmentName; + error = [error].slice(0); + "string" === typeof error[0] + ? error.splice( + 0, + 1, + "%c%s%c " + error[0], + "background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px", + " " + JSCompiler_inline_result + " ", + "" + ) + : error.splice( + 0, + 0, + "%c%s%c", + "background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px", + " " + JSCompiler_inline_result + " ", + "" + ); + error.unshift(console); + JSCompiler_inline_result = bind.apply(console.error, error); + JSCompiler_inline_result(); + } else console.error(error); + return null; +} +function RequestInstance( + resumableState, + renderState, + rootFormatContext, + progressiveChunkSize, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone, + formState +) { + var abortSet = new Set(); + this.destination = null; + this.flushScheduled = !1; + this.resumableState = resumableState; + this.renderState = renderState; + this.rootFormatContext = rootFormatContext; + this.progressiveChunkSize = + void 0 === progressiveChunkSize ? 12800 : progressiveChunkSize; + this.status = 10; + this.fatalError = null; + this.pendingRootTasks = this.allPendingTasks = this.nextSegmentId = 0; + this.completedPreambleSegments = this.completedRootSegment = null; + this.byteSize = 0; + this.abortableTasks = abortSet; + this.pingedTasks = []; + this.clientRenderedBoundaries = []; + this.completedBoundaries = []; + this.partialBoundaries = []; + this.trackedPostpones = null; + this.onError = void 0 === onError ? defaultErrorHandler : onError; + this.onPostpone = void 0 === onPostpone ? noop : onPostpone; + this.onAllReady = void 0 === onAllReady ? noop : onAllReady; + this.onShellReady = void 0 === onShellReady ? noop : onShellReady; + this.onShellError = void 0 === onShellError ? noop : onShellError; + this.onFatalError = void 0 === onFatalError ? noop : onFatalError; + this.formState = void 0 === formState ? null : formState; +} +function createRequest( + children, + resumableState, + renderState, + rootFormatContext, + progressiveChunkSize, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone, + formState +) { + resumableState = new RequestInstance( + resumableState, + renderState, + rootFormatContext, + progressiveChunkSize, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone, + formState + ); + renderState = createPendingSegment( + resumableState, + 0, + null, + rootFormatContext, + !1, + !1 + ); + renderState.parentFlushed = !0; + children = createRenderTask( + resumableState, + null, + children, + -1, + null, + renderState, + null, + null, + resumableState.abortableTasks, + null, + rootFormatContext, + null, + emptyTreeContext, + null, + null + ); + pushComponentStack(children); + resumableState.pingedTasks.push(children); + return resumableState; +} +function createPrerenderRequest( + children, + resumableState, + renderState, + rootFormatContext, + progressiveChunkSize, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone +) { + children = createRequest( + children, + resumableState, + renderState, + rootFormatContext, + progressiveChunkSize, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone, + void 0 + ); + children.trackedPostpones = { + workingMap: new Map(), + rootNodes: [], + rootSlots: null + }; + return children; +} +function resumeRequest( + children, + postponedState, + renderState, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone +) { + renderState = new RequestInstance( + postponedState.resumableState, + renderState, + postponedState.rootFormatContext, + postponedState.progressiveChunkSize, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone, + null + ); + renderState.nextSegmentId = postponedState.nextSegmentId; + if ("number" === typeof postponedState.replaySlots) + return ( + (onError = createPendingSegment( + renderState, + 0, + null, + postponedState.rootFormatContext, + !1, + !1 + )), + (onError.parentFlushed = !0), + (children = createRenderTask( + renderState, + null, + children, + -1, + null, + onError, + null, + null, + renderState.abortableTasks, + null, + postponedState.rootFormatContext, + null, + emptyTreeContext, + null, + null + )), + pushComponentStack(children), + renderState.pingedTasks.push(children), + renderState + ); + children = createReplayTask( + renderState, + null, + { + nodes: postponedState.replayNodes, + slots: postponedState.replaySlots, + pendingTasks: 0 + }, + children, + -1, + null, + null, + renderState.abortableTasks, + null, + postponedState.rootFormatContext, + null, + emptyTreeContext, + null, + null + ); + pushComponentStack(children); + renderState.pingedTasks.push(children); + return renderState; +} +function resumeAndPrerenderRequest( + children, + postponedState, + renderState, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone +) { + children = resumeRequest( + children, + postponedState, + renderState, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone + ); + children.trackedPostpones = { + workingMap: new Map(), + rootNodes: [], + rootSlots: null + }; + return children; +} +var currentRequest = null; +function pingTask(request, task) { + request.pingedTasks.push(task); + 1 === request.pingedTasks.length && + ((request.flushScheduled = null !== request.destination), + null !== request.trackedPostpones || 10 === request.status + ? scheduleMicrotask(function () { + return performWork(request); + }) + : scheduleWork(function () { + return performWork(request); + })); +} +function createSuspenseBoundary( + request, + row, + fallbackAbortableTasks, + contentPreamble, + fallbackPreamble +) { + fallbackAbortableTasks = { + status: 0, + rootSegmentID: -1, + parentFlushed: !1, + pendingTasks: 0, + row: row, + completedSegments: [], + byteSize: 0, + fallbackAbortableTasks: fallbackAbortableTasks, + errorDigest: null, + contentState: createHoistableState(), + fallbackState: createHoistableState(), + contentPreamble: contentPreamble, + fallbackPreamble: fallbackPreamble, + trackedContentKeyPath: null, + trackedFallbackNode: null + }; + null !== row && + (row.pendingTasks++, + (contentPreamble = row.boundaries), + null !== contentPreamble && + (request.allPendingTasks++, + fallbackAbortableTasks.pendingTasks++, + contentPreamble.push(fallbackAbortableTasks)), + (request = row.inheritedHoistables), + null !== request && + hoistHoistables(fallbackAbortableTasks.contentState, request)); + return fallbackAbortableTasks; +} +function createRenderTask( + request, + thenableState, + node, + childIndex, + blockedBoundary, + blockedSegment, + blockedPreamble, + hoistableState, + abortSet, + keyPath, + formatContext, + context, + treeContext, + row, + componentStack +) { + request.allPendingTasks++; + null === blockedBoundary + ? request.pendingRootTasks++ + : blockedBoundary.pendingTasks++; + null !== row && row.pendingTasks++; + var task = { + replay: null, + node: node, + childIndex: childIndex, + ping: function () { + return pingTask(request, task); + }, + blockedBoundary: blockedBoundary, + blockedSegment: blockedSegment, + blockedPreamble: blockedPreamble, + hoistableState: hoistableState, + abortSet: abortSet, + keyPath: keyPath, + formatContext: formatContext, + context: context, + treeContext: treeContext, + row: row, + componentStack: componentStack, + thenableState: thenableState + }; + abortSet.add(task); + return task; +} +function createReplayTask( + request, + thenableState, + replay, + node, + childIndex, + blockedBoundary, + hoistableState, + abortSet, + keyPath, + formatContext, + context, + treeContext, + row, + componentStack +) { + request.allPendingTasks++; + null === blockedBoundary + ? request.pendingRootTasks++ + : blockedBoundary.pendingTasks++; + null !== row && row.pendingTasks++; + replay.pendingTasks++; + var task = { + replay: replay, + node: node, + childIndex: childIndex, + ping: function () { + return pingTask(request, task); + }, + blockedBoundary: blockedBoundary, + blockedSegment: null, + blockedPreamble: null, + hoistableState: hoistableState, + abortSet: abortSet, + keyPath: keyPath, + formatContext: formatContext, + context: context, + treeContext: treeContext, + row: row, + componentStack: componentStack, + thenableState: thenableState + }; + abortSet.add(task); + return task; +} +function createPendingSegment( + request, + index, + boundary, + parentFormatContext, + lastPushedText, + textEmbedded +) { + return { + status: 0, + parentFlushed: !1, + id: -1, + index: index, + chunks: [], + children: [], + preambleChildren: [], + parentFormatContext: parentFormatContext, + boundary: boundary, + lastPushedText: lastPushedText, + textEmbedded: textEmbedded + }; +} +function pushComponentStack(task) { + var node = task.node; + if ("object" === typeof node && null !== node) + switch (node.$$typeof) { + case REACT_ELEMENT_TYPE: + task.componentStack = { parent: task.componentStack, type: node.type }; + } +} +function replaceSuspenseComponentStackWithSuspenseFallbackStack( + componentStack +) { + return null === componentStack + ? null + : { parent: componentStack.parent, type: "Suspense Fallback" }; +} +function getThrownInfo(node$jscomp$0) { + var errorInfo = {}; + node$jscomp$0 && + Object.defineProperty(errorInfo, "componentStack", { + configurable: !0, + enumerable: !0, + get: function () { + try { + var info = "", + node = node$jscomp$0; + do + (info += describeComponentStackByType(node.type)), + (node = node.parent); + while (node); + var JSCompiler_inline_result = info; + } catch (x) { + JSCompiler_inline_result = + "\nError generating stack: " + x.message + "\n" + x.stack; + } + Object.defineProperty(errorInfo, "componentStack", { + value: JSCompiler_inline_result + }); + return JSCompiler_inline_result; + } + }); + return errorInfo; +} +function logRecoverableError(request, error, errorInfo) { + request = request.onError; + error = request(error, errorInfo); + if (null == error || "string" === typeof error) return error; +} +function fatalError(request, error) { + var onShellError = request.onShellError, + onFatalError = request.onFatalError; + onShellError(error); + onFatalError(error); + null !== request.destination + ? ((request.status = 14), closeWithError(request.destination, error)) + : ((request.status = 13), (request.fatalError = error)); +} +function finishSuspenseListRow(request, row) { + unblockSuspenseListRow(request, row.next, row.hoistables); +} +function unblockSuspenseListRow(request, unblockedRow, inheritedHoistables) { + for (; null !== unblockedRow; ) { + null !== inheritedHoistables && + (hoistHoistables(unblockedRow.hoistables, inheritedHoistables), + (unblockedRow.inheritedHoistables = inheritedHoistables)); + var unblockedBoundaries = unblockedRow.boundaries; + if (null !== unblockedBoundaries) { + unblockedRow.boundaries = null; + for (var i = 0; i < unblockedBoundaries.length; i++) { + var unblockedBoundary = unblockedBoundaries[i]; + null !== inheritedHoistables && + hoistHoistables(unblockedBoundary.contentState, inheritedHoistables); + finishedTask(request, unblockedBoundary, null, null); + } + } + unblockedRow.pendingTasks--; + if (0 < unblockedRow.pendingTasks) break; + inheritedHoistables = unblockedRow.hoistables; + unblockedRow = unblockedRow.next; + } +} +function tryToResolveTogetherRow(request, togetherRow) { + var boundaries = togetherRow.boundaries; + if (null !== boundaries && togetherRow.pendingTasks === boundaries.length) { + for (var allCompleteAndInlinable = !0, i = 0; i < boundaries.length; i++) { + var rowBoundary = boundaries[i]; + if ( + 1 !== rowBoundary.pendingTasks || + rowBoundary.parentFlushed || + isEligibleForOutlining(request, rowBoundary) + ) { + allCompleteAndInlinable = !1; + break; + } + } + allCompleteAndInlinable && + unblockSuspenseListRow(request, togetherRow, togetherRow.hoistables); + } +} +function createSuspenseListRow(previousRow) { + var newRow = { + pendingTasks: 1, + boundaries: null, + hoistables: createHoistableState(), + inheritedHoistables: null, + together: !1, + next: null + }; + null !== previousRow && + 0 < previousRow.pendingTasks && + (newRow.pendingTasks++, + (newRow.boundaries = []), + (previousRow.next = newRow)); + return newRow; +} +function renderSuspenseListRows(request, task, keyPath, rows, revealOrder) { + var prevKeyPath = task.keyPath, + prevTreeContext = task.treeContext, + prevRow = task.row; + task.keyPath = keyPath; + keyPath = rows.length; + var previousSuspenseListRow = null; + if (null !== task.replay) { + var resumeSlots = task.replay.slots; + if (null !== resumeSlots && "object" === typeof resumeSlots) + for (var n = 0; n < keyPath; n++) { + var i = + "backwards" !== revealOrder && + "unstable_legacy-backwards" !== revealOrder + ? n + : keyPath - 1 - n, + node = rows[i]; + task.row = previousSuspenseListRow = createSuspenseListRow( + previousSuspenseListRow + ); + task.treeContext = pushTreeContext(prevTreeContext, keyPath, i); + var resumeSegmentID = resumeSlots[i]; + "number" === typeof resumeSegmentID + ? (resumeNode(request, task, resumeSegmentID, node, i), + delete resumeSlots[i]) + : renderNode(request, task, node, i); + 0 === --previousSuspenseListRow.pendingTasks && + finishSuspenseListRow(request, previousSuspenseListRow); + } + else + for (resumeSlots = 0; resumeSlots < keyPath; resumeSlots++) + (n = + "backwards" !== revealOrder && + "unstable_legacy-backwards" !== revealOrder + ? resumeSlots + : keyPath - 1 - resumeSlots), + (i = rows[n]), + (task.row = previousSuspenseListRow = + createSuspenseListRow(previousSuspenseListRow)), + (task.treeContext = pushTreeContext(prevTreeContext, keyPath, n)), + renderNode(request, task, i, n), + 0 === --previousSuspenseListRow.pendingTasks && + finishSuspenseListRow(request, previousSuspenseListRow); + } else if ( + "backwards" !== revealOrder && + "unstable_legacy-backwards" !== revealOrder + ) + for (revealOrder = 0; revealOrder < keyPath; revealOrder++) + (resumeSlots = rows[revealOrder]), + (task.row = previousSuspenseListRow = + createSuspenseListRow(previousSuspenseListRow)), + (task.treeContext = pushTreeContext( + prevTreeContext, + keyPath, + revealOrder + )), + renderNode(request, task, resumeSlots, revealOrder), + 0 === --previousSuspenseListRow.pendingTasks && + finishSuspenseListRow(request, previousSuspenseListRow); + else { + revealOrder = task.blockedSegment; + resumeSlots = revealOrder.children.length; + n = revealOrder.chunks.length; + for (i = keyPath - 1; 0 <= i; i--) { + node = rows[i]; + task.row = previousSuspenseListRow = createSuspenseListRow( + previousSuspenseListRow + ); + task.treeContext = pushTreeContext(prevTreeContext, keyPath, i); + resumeSegmentID = createPendingSegment( + request, + n, + null, + task.formatContext, + 0 === i ? revealOrder.lastPushedText : !0, + !0 + ); + revealOrder.children.splice(resumeSlots, 0, resumeSegmentID); + task.blockedSegment = resumeSegmentID; + try { + renderNode(request, task, node, i), + resumeSegmentID.lastPushedText && + resumeSegmentID.textEmbedded && + resumeSegmentID.chunks.push(textSeparator), + (resumeSegmentID.status = 1), + finishedSegment(request, task.blockedBoundary, resumeSegmentID), + 0 === --previousSuspenseListRow.pendingTasks && + finishSuspenseListRow(request, previousSuspenseListRow); + } catch (thrownValue) { + throw ( + ((resumeSegmentID.status = 12 === request.status ? 3 : 4), + thrownValue) + ); + } + } + task.blockedSegment = revealOrder; + revealOrder.lastPushedText = !1; + } + null !== prevRow && + null !== previousSuspenseListRow && + 0 < previousSuspenseListRow.pendingTasks && + (prevRow.pendingTasks++, (previousSuspenseListRow.next = prevRow)); + task.treeContext = prevTreeContext; + task.row = prevRow; + task.keyPath = prevKeyPath; +} +function renderWithHooks(request, task, keyPath, Component, props, secondArg) { + var prevThenableState = task.thenableState; + task.thenableState = null; + currentlyRenderingComponent = {}; + currentlyRenderingTask = task; + currentlyRenderingRequest = request; + currentlyRenderingKeyPath = keyPath; + actionStateCounter = localIdCounter = 0; + actionStateMatchingIndex = -1; + thenableIndexCounter = 0; + thenableState = prevThenableState; + for (request = Component(props, secondArg); didScheduleRenderPhaseUpdate; ) + (didScheduleRenderPhaseUpdate = !1), + (actionStateCounter = localIdCounter = 0), + (actionStateMatchingIndex = -1), + (thenableIndexCounter = 0), + (numberOfReRenders += 1), + (workInProgressHook = null), + (request = Component(props, secondArg)); + resetHooksState(); + return request; +} +function finishFunctionComponent( + request, + task, + keyPath, + children, + hasId, + actionStateCount, + actionStateMatchingIndex +) { + var didEmitActionStateMarkers = !1; + if (0 !== actionStateCount && null !== request.formState) { + var segment = task.blockedSegment; + if (null !== segment) { + didEmitActionStateMarkers = !0; + segment = segment.chunks; + for (var i = 0; i < actionStateCount; i++) + i === actionStateMatchingIndex + ? segment.push(formStateMarkerIsMatching) + : segment.push(formStateMarkerIsNotMatching); + } + } + actionStateCount = task.keyPath; + task.keyPath = keyPath; + hasId + ? ((keyPath = task.treeContext), + (task.treeContext = pushTreeContext(keyPath, 1, 0)), + renderNode(request, task, children, -1), + (task.treeContext = keyPath)) + : didEmitActionStateMarkers + ? renderNode(request, task, children, -1) + : renderNodeDestructive(request, task, children, -1); + task.keyPath = actionStateCount; +} +function renderElement(request, task, keyPath, type, props, ref) { + if ("function" === typeof type) + if (type.prototype && type.prototype.isReactComponent) { + var newProps = props; + if ("ref" in props) { + newProps = {}; + for (var propName in props) + "ref" !== propName && (newProps[propName] = props[propName]); + } + var defaultProps = type.defaultProps; + if (defaultProps) { + newProps === props && (newProps = assign({}, newProps, props)); + for (var propName$44 in defaultProps) + void 0 === newProps[propName$44] && + (newProps[propName$44] = defaultProps[propName$44]); + } + props = newProps; + newProps = emptyContextObject; + defaultProps = type.contextType; + "object" === typeof defaultProps && + null !== defaultProps && + (newProps = defaultProps._currentValue); + newProps = new type(props, newProps); + var initialState = void 0 !== newProps.state ? newProps.state : null; + newProps.updater = classComponentUpdater; + newProps.props = props; + newProps.state = initialState; + defaultProps = { queue: [], replace: !1 }; + newProps._reactInternals = defaultProps; + ref = type.contextType; + newProps.context = + "object" === typeof ref && null !== ref + ? ref._currentValue + : emptyContextObject; + ref = type.getDerivedStateFromProps; + "function" === typeof ref && + ((ref = ref(props, initialState)), + (initialState = + null === ref || void 0 === ref + ? initialState + : assign({}, initialState, ref)), + (newProps.state = initialState)); + if ( + "function" !== typeof type.getDerivedStateFromProps && + "function" !== typeof newProps.getSnapshotBeforeUpdate && + ("function" === typeof newProps.UNSAFE_componentWillMount || + "function" === typeof newProps.componentWillMount) + ) + if ( + ((type = newProps.state), + "function" === typeof newProps.componentWillMount && + newProps.componentWillMount(), + "function" === typeof newProps.UNSAFE_componentWillMount && + newProps.UNSAFE_componentWillMount(), + type !== newProps.state && + classComponentUpdater.enqueueReplaceState( + newProps, + newProps.state, + null + ), + null !== defaultProps.queue && 0 < defaultProps.queue.length) + ) + if ( + ((type = defaultProps.queue), + (ref = defaultProps.replace), + (defaultProps.queue = null), + (defaultProps.replace = !1), + ref && 1 === type.length) + ) + newProps.state = type[0]; + else { + defaultProps = ref ? type[0] : newProps.state; + initialState = !0; + for (ref = ref ? 1 : 0; ref < type.length; ref++) + (propName$44 = type[ref]), + (propName$44 = + "function" === typeof propName$44 + ? propName$44.call(newProps, defaultProps, props, void 0) + : propName$44), + null != propName$44 && + (initialState + ? ((initialState = !1), + (defaultProps = assign({}, defaultProps, propName$44))) + : assign(defaultProps, propName$44)); + newProps.state = defaultProps; + } + else defaultProps.queue = null; + type = newProps.render(); + if (12 === request.status) throw null; + props = task.keyPath; + task.keyPath = keyPath; + renderNodeDestructive(request, task, type, -1); + task.keyPath = props; + } else { + type = renderWithHooks(request, task, keyPath, type, props, void 0); + if (12 === request.status) throw null; + finishFunctionComponent( + request, + task, + keyPath, + type, + 0 !== localIdCounter, + actionStateCounter, + actionStateMatchingIndex + ); + } + else if ("string" === typeof type) + if (((newProps = task.blockedSegment), null === newProps)) + (newProps = props.children), + (defaultProps = task.formatContext), + (initialState = task.keyPath), + (task.formatContext = getChildFormatContext(defaultProps, type, props)), + (task.keyPath = keyPath), + renderNode(request, task, newProps, -1), + (task.formatContext = defaultProps), + (task.keyPath = initialState); + else { + initialState = pushStartInstance( + newProps.chunks, + type, + props, + request.resumableState, + request.renderState, + task.blockedPreamble, + task.hoistableState, + task.formatContext, + newProps.lastPushedText + ); + newProps.lastPushedText = !1; + defaultProps = task.formatContext; + ref = task.keyPath; + task.keyPath = keyPath; + if ( + 3 === + (task.formatContext = getChildFormatContext(defaultProps, type, props)) + .insertionMode + ) { + keyPath = createPendingSegment( + request, + 0, + null, + task.formatContext, + !1, + !1 + ); + newProps.preambleChildren.push(keyPath); + task.blockedSegment = keyPath; + try { + (keyPath.status = 6), + renderNode(request, task, initialState, -1), + keyPath.lastPushedText && + keyPath.textEmbedded && + keyPath.chunks.push(textSeparator), + (keyPath.status = 1), + finishedSegment(request, task.blockedBoundary, keyPath); + } finally { + task.blockedSegment = newProps; + } + } else renderNode(request, task, initialState, -1); + task.formatContext = defaultProps; + task.keyPath = ref; + a: { + task = newProps.chunks; + request = request.resumableState; + switch (type) { + case "title": + case "style": + case "script": + case "area": + case "base": + case "br": + case "col": + case "embed": + case "hr": + case "img": + case "input": + case "keygen": + case "link": + case "meta": + case "param": + case "source": + case "track": + case "wbr": + break a; + case "body": + if (1 >= defaultProps.insertionMode) { + request.hasBody = !0; + break a; + } + break; + case "html": + if (0 === defaultProps.insertionMode) { + request.hasHtml = !0; + break a; + } + break; + case "head": + if (1 >= defaultProps.insertionMode) break a; + } + task.push(endChunkForTag(type)); + } + newProps.lastPushedText = !1; + } + else { + switch (type) { + case REACT_LEGACY_HIDDEN_TYPE: + case REACT_STRICT_MODE_TYPE: + case REACT_PROFILER_TYPE: + case REACT_FRAGMENT_TYPE: + type = task.keyPath; + task.keyPath = keyPath; + renderNodeDestructive(request, task, props.children, -1); + task.keyPath = type; + return; + case REACT_ACTIVITY_TYPE: + type = task.blockedSegment; + null === type + ? "hidden" !== props.mode && + ((type = task.keyPath), + (task.keyPath = keyPath), + renderNode(request, task, props.children, -1), + (task.keyPath = type)) + : "hidden" !== props.mode && + (type.chunks.push(startActivityBoundary), + (type.lastPushedText = !1), + (newProps = task.keyPath), + (task.keyPath = keyPath), + renderNode(request, task, props.children, -1), + (task.keyPath = newProps), + type.chunks.push(endActivityBoundary), + (type.lastPushedText = !1)); + return; + case REACT_SUSPENSE_LIST_TYPE: + a: { + type = props.children; + props = props.revealOrder; + if ( + "forwards" === props || + "backwards" === props || + "unstable_legacy-backwards" === props + ) { + if (isArrayImpl(type)) { + renderSuspenseListRows(request, task, keyPath, type, props); + break a; + } + if ((newProps = getIteratorFn(type))) + if ((newProps = newProps.call(type))) { + defaultProps = newProps.next(); + if (!defaultProps.done) { + do defaultProps = newProps.next(); + while (!defaultProps.done); + renderSuspenseListRows(request, task, keyPath, type, props); + } + break a; + } + } + "together" === props + ? ((props = task.keyPath), + (newProps = task.row), + (defaultProps = task.row = createSuspenseListRow(null)), + (defaultProps.boundaries = []), + (defaultProps.together = !0), + (task.keyPath = keyPath), + renderNodeDestructive(request, task, type, -1), + 0 === --defaultProps.pendingTasks && + finishSuspenseListRow(request, defaultProps), + (task.keyPath = props), + (task.row = newProps), + null !== newProps && + 0 < defaultProps.pendingTasks && + (newProps.pendingTasks++, (defaultProps.next = newProps))) + : ((props = task.keyPath), + (task.keyPath = keyPath), + renderNodeDestructive(request, task, type, -1), + (task.keyPath = props)); + } + return; + case REACT_VIEW_TRANSITION_TYPE: + case REACT_SCOPE_TYPE: + throw Error(formatProdErrorMessage(343)); + case REACT_SUSPENSE_TYPE: + a: if (null !== task.replay) { + type = task.keyPath; + newProps = task.formatContext; + defaultProps = task.row; + task.keyPath = keyPath; + task.formatContext = getSuspenseContentFormatContext( + request.resumableState, + newProps + ); + task.row = null; + keyPath = props.children; + try { + renderNode(request, task, keyPath, -1); + } finally { + (task.keyPath = type), + (task.formatContext = newProps), + (task.row = defaultProps); + } + } else { + type = task.keyPath; + ref = task.formatContext; + var prevRow = task.row; + propName$44 = task.blockedBoundary; + propName = task.blockedPreamble; + var parentHoistableState = task.hoistableState, + parentSegment = task.blockedSegment, + fallback = props.fallback; + props = props.children; + var fallbackAbortSet = new Set(); + var newBoundary = + 2 > task.formatContext.insertionMode + ? createSuspenseBoundary( + request, + task.row, + fallbackAbortSet, + createPreambleState(), + createPreambleState() + ) + : createSuspenseBoundary( + request, + task.row, + fallbackAbortSet, + null, + null + ); + null !== request.trackedPostpones && + (newBoundary.trackedContentKeyPath = keyPath); + var boundarySegment = createPendingSegment( + request, + parentSegment.chunks.length, + newBoundary, + task.formatContext, + !1, + !1 + ); + parentSegment.children.push(boundarySegment); + parentSegment.lastPushedText = !1; + var contentRootSegment = createPendingSegment( + request, + 0, + null, + task.formatContext, + !1, + !1 + ); + contentRootSegment.parentFlushed = !0; + if (null !== request.trackedPostpones) { + newProps = task.componentStack; + defaultProps = [keyPath[0], "Suspense Fallback", keyPath[2]]; + initialState = [defaultProps[1], defaultProps[2], [], null]; + request.trackedPostpones.workingMap.set(defaultProps, initialState); + newBoundary.trackedFallbackNode = initialState; + task.blockedSegment = boundarySegment; + task.blockedPreamble = newBoundary.fallbackPreamble; + task.keyPath = defaultProps; + task.formatContext = getSuspenseFallbackFormatContext( + request.resumableState, + ref + ); + task.componentStack = + replaceSuspenseComponentStackWithSuspenseFallbackStack(newProps); + boundarySegment.status = 6; + try { + renderNode(request, task, fallback, -1), + boundarySegment.lastPushedText && + boundarySegment.textEmbedded && + boundarySegment.chunks.push(textSeparator), + (boundarySegment.status = 1), + finishedSegment(request, propName$44, boundarySegment); + } catch (thrownValue) { + throw ( + ((boundarySegment.status = 12 === request.status ? 3 : 4), + thrownValue) + ); + } finally { + (task.blockedSegment = parentSegment), + (task.blockedPreamble = propName), + (task.keyPath = type), + (task.formatContext = ref); + } + task = createRenderTask( + request, + null, + props, + -1, + newBoundary, + contentRootSegment, + newBoundary.contentPreamble, + newBoundary.contentState, + task.abortSet, + keyPath, + getSuspenseContentFormatContext( + request.resumableState, + task.formatContext + ), + task.context, + task.treeContext, + null, + newProps + ); + pushComponentStack(task); + request.pingedTasks.push(task); + } else { + task.blockedBoundary = newBoundary; + task.blockedPreamble = newBoundary.contentPreamble; + task.hoistableState = newBoundary.contentState; + task.blockedSegment = contentRootSegment; + task.keyPath = keyPath; + task.formatContext = getSuspenseContentFormatContext( + request.resumableState, + ref + ); + task.row = null; + contentRootSegment.status = 6; + try { + if ( + (renderNode(request, task, props, -1), + contentRootSegment.lastPushedText && + contentRootSegment.textEmbedded && + contentRootSegment.chunks.push(textSeparator), + (contentRootSegment.status = 1), + finishedSegment(request, newBoundary, contentRootSegment), + queueCompletedSegment(newBoundary, contentRootSegment), + 0 === newBoundary.pendingTasks && 0 === newBoundary.status) + ) { + if ( + ((newBoundary.status = 1), + !isEligibleForOutlining(request, newBoundary)) + ) { + null !== prevRow && + 0 === --prevRow.pendingTasks && + finishSuspenseListRow(request, prevRow); + 0 === request.pendingRootTasks && + task.blockedPreamble && + preparePreamble(request); + break a; + } + } else + null !== prevRow && + prevRow.together && + tryToResolveTogetherRow(request, prevRow); + } catch (thrownValue$31) { + (newBoundary.status = 4), + 12 === request.status + ? ((contentRootSegment.status = 3), + (newProps = request.fatalError)) + : ((contentRootSegment.status = 4), + (newProps = thrownValue$31)), + (defaultProps = getThrownInfo(task.componentStack)), + (initialState = logRecoverableError( + request, + newProps, + defaultProps + )), + (newBoundary.errorDigest = initialState), + untrackBoundary(request, newBoundary); + } finally { + (task.blockedBoundary = propName$44), + (task.blockedPreamble = propName), + (task.hoistableState = parentHoistableState), + (task.blockedSegment = parentSegment), + (task.keyPath = type), + (task.formatContext = ref), + (task.row = prevRow); + } + task = createRenderTask( + request, + null, + fallback, + -1, + propName$44, + boundarySegment, + newBoundary.fallbackPreamble, + newBoundary.fallbackState, + fallbackAbortSet, + [keyPath[0], "Suspense Fallback", keyPath[2]], + getSuspenseFallbackFormatContext( + request.resumableState, + task.formatContext + ), + task.context, + task.treeContext, + task.row, + replaceSuspenseComponentStackWithSuspenseFallbackStack( + task.componentStack + ) + ); + pushComponentStack(task); + request.pingedTasks.push(task); + } + } + return; + } + if ("object" === typeof type && null !== type) + switch (type.$$typeof) { + case REACT_FORWARD_REF_TYPE: + if ("ref" in props) + for (parentSegment in ((newProps = {}), props)) + "ref" !== parentSegment && + (newProps[parentSegment] = props[parentSegment]); + else newProps = props; + type = renderWithHooks( + request, + task, + keyPath, + type.render, + newProps, + ref + ); + finishFunctionComponent( + request, + task, + keyPath, + type, + 0 !== localIdCounter, + actionStateCounter, + actionStateMatchingIndex + ); + return; + case REACT_MEMO_TYPE: + renderElement(request, task, keyPath, type.type, props, ref); + return; + case REACT_CONTEXT_TYPE: + defaultProps = props.children; + newProps = task.keyPath; + props = props.value; + initialState = type._currentValue; + type._currentValue = props; + ref = currentActiveSnapshot; + currentActiveSnapshot = type = { + parent: ref, + depth: null === ref ? 0 : ref.depth + 1, + context: type, + parentValue: initialState, + value: props + }; + task.context = type; + task.keyPath = keyPath; + renderNodeDestructive(request, task, defaultProps, -1); + request = currentActiveSnapshot; + if (null === request) throw Error(formatProdErrorMessage(403)); + request.context._currentValue = request.parentValue; + request = currentActiveSnapshot = request.parent; + task.context = request; + task.keyPath = newProps; + return; + case REACT_CONSUMER_TYPE: + props = props.children; + type = props(type._context._currentValue); + props = task.keyPath; + task.keyPath = keyPath; + renderNodeDestructive(request, task, type, -1); + task.keyPath = props; + return; + case REACT_LAZY_TYPE: + newProps = type._init; + type = newProps(type._payload); + if (12 === request.status) throw null; + renderElement(request, task, keyPath, type, props, ref); + return; + } + throw Error( + formatProdErrorMessage(130, null == type ? type : typeof type, "") + ); + } +} +function resumeNode(request, task, segmentId, node, childIndex) { + var prevReplay = task.replay, + blockedBoundary = task.blockedBoundary, + resumedSegment = createPendingSegment( + request, + 0, + null, + task.formatContext, + !1, + !1 + ); + resumedSegment.id = segmentId; + resumedSegment.parentFlushed = !0; + try { + (task.replay = null), + (task.blockedSegment = resumedSegment), + renderNode(request, task, node, childIndex), + (resumedSegment.status = 1), + finishedSegment(request, blockedBoundary, resumedSegment), + null === blockedBoundary + ? (request.completedRootSegment = resumedSegment) + : (queueCompletedSegment(blockedBoundary, resumedSegment), + blockedBoundary.parentFlushed && + request.partialBoundaries.push(blockedBoundary)); + } finally { + (task.replay = prevReplay), (task.blockedSegment = null); + } +} +function renderNodeDestructive(request, task, node, childIndex) { + null !== task.replay && "number" === typeof task.replay.slots + ? resumeNode(request, task, task.replay.slots, node, childIndex) + : ((task.node = node), + (task.childIndex = childIndex), + (node = task.componentStack), + pushComponentStack(task), + retryNode(request, task), + (task.componentStack = node)); +} +function retryNode(request, task) { + var node = task.node, + childIndex = task.childIndex; + if (null !== node) { + if ("object" === typeof node) { + switch (node.$$typeof) { + case REACT_ELEMENT_TYPE: + var type = node.type, + key = node.key, + props = node.props; + node = props.ref; + var ref = void 0 !== node ? node : null, + name = getComponentNameFromType(type), + keyOrIndex = + null == key ? (-1 === childIndex ? 0 : childIndex) : key; + key = [task.keyPath, name, keyOrIndex]; + if (null !== task.replay) + a: { + var replay = task.replay; + childIndex = replay.nodes; + for (node = 0; node < childIndex.length; node++) { + var node$jscomp$0 = childIndex[node]; + if (keyOrIndex === node$jscomp$0[1]) { + if (4 === node$jscomp$0.length) { + if (null !== name && name !== node$jscomp$0[0]) + throw Error( + formatProdErrorMessage(490, node$jscomp$0[0], name) + ); + var childNodes = node$jscomp$0[2]; + name = node$jscomp$0[3]; + keyOrIndex = task.node; + task.replay = { + nodes: childNodes, + slots: name, + pendingTasks: 1 + }; + try { + renderElement(request, task, key, type, props, ref); + if ( + 1 === task.replay.pendingTasks && + 0 < task.replay.nodes.length + ) + throw Error(formatProdErrorMessage(488)); + task.replay.pendingTasks--; + } catch (x) { + if ( + "object" === typeof x && + null !== x && + (x === SuspenseException || + "function" === typeof x.then) + ) + throw ( + (task.node === keyOrIndex + ? (task.replay = replay) + : childIndex.splice(node, 1), + x) + ); + task.replay.pendingTasks--; + props = getThrownInfo(task.componentStack); + key = request; + request = task.blockedBoundary; + type = x; + props = logRecoverableError(key, type, props); + abortRemainingReplayNodes( + key, + request, + childNodes, + name, + type, + props + ); + } + task.replay = replay; + } else { + if (type !== REACT_SUSPENSE_TYPE) + throw Error( + formatProdErrorMessage( + 490, + "Suspense", + getComponentNameFromType(type) || "Unknown" + ) + ); + b: { + replay = void 0; + type = node$jscomp$0[5]; + ref = node$jscomp$0[2]; + name = node$jscomp$0[3]; + keyOrIndex = + null === node$jscomp$0[4] ? [] : node$jscomp$0[4][2]; + node$jscomp$0 = + null === node$jscomp$0[4] ? null : node$jscomp$0[4][3]; + var prevKeyPath = task.keyPath, + prevContext = task.formatContext, + prevRow = task.row, + previousReplaySet = task.replay, + parentBoundary = task.blockedBoundary, + parentHoistableState = task.hoistableState, + content = props.children, + fallback = props.fallback, + fallbackAbortSet = new Set(); + props = + 2 > task.formatContext.insertionMode + ? createSuspenseBoundary( + request, + task.row, + fallbackAbortSet, + createPreambleState(), + createPreambleState() + ) + : createSuspenseBoundary( + request, + task.row, + fallbackAbortSet, + null, + null + ); + props.parentFlushed = !0; + props.rootSegmentID = type; + task.blockedBoundary = props; + task.hoistableState = props.contentState; + task.keyPath = key; + task.formatContext = getSuspenseContentFormatContext( + request.resumableState, + prevContext + ); + task.row = null; + task.replay = { + nodes: ref, + slots: name, + pendingTasks: 1 + }; + try { + renderNode(request, task, content, -1); + if ( + 1 === task.replay.pendingTasks && + 0 < task.replay.nodes.length + ) + throw Error(formatProdErrorMessage(488)); + task.replay.pendingTasks--; + if (0 === props.pendingTasks && 0 === props.status) { + props.status = 1; + request.completedBoundaries.push(props); + break b; + } + } catch (error) { + (props.status = 4), + (childNodes = getThrownInfo(task.componentStack)), + (replay = logRecoverableError( + request, + error, + childNodes + )), + (props.errorDigest = replay), + task.replay.pendingTasks--, + request.clientRenderedBoundaries.push(props); + } finally { + (task.blockedBoundary = parentBoundary), + (task.hoistableState = parentHoistableState), + (task.replay = previousReplaySet), + (task.keyPath = prevKeyPath), + (task.formatContext = prevContext), + (task.row = prevRow); + } + childNodes = createReplayTask( + request, + null, + { + nodes: keyOrIndex, + slots: node$jscomp$0, + pendingTasks: 0 + }, + fallback, + -1, + parentBoundary, + props.fallbackState, + fallbackAbortSet, + [key[0], "Suspense Fallback", key[2]], + getSuspenseFallbackFormatContext( + request.resumableState, + task.formatContext + ), + task.context, + task.treeContext, + task.row, + replaceSuspenseComponentStackWithSuspenseFallbackStack( + task.componentStack + ) + ); + pushComponentStack(childNodes); + request.pingedTasks.push(childNodes); + } + } + childIndex.splice(node, 1); + break a; + } + } + } + else renderElement(request, task, key, type, props, ref); + return; + case REACT_PORTAL_TYPE: + throw Error(formatProdErrorMessage(257)); + case REACT_LAZY_TYPE: + childNodes = node._init; + node = childNodes(node._payload); + if (12 === request.status) throw null; + renderNodeDestructive(request, task, node, childIndex); + return; + } + if (isArrayImpl(node)) { + renderChildrenArray(request, task, node, childIndex); + return; + } + if ((childNodes = getIteratorFn(node))) + if ((childNodes = childNodes.call(node))) { + node = childNodes.next(); + if (!node.done) { + props = []; + do props.push(node.value), (node = childNodes.next()); + while (!node.done); + renderChildrenArray(request, task, props, childIndex); + } + return; + } + if ("function" === typeof node.then) + return ( + (task.thenableState = null), + renderNodeDestructive(request, task, unwrapThenable(node), childIndex) + ); + if (node.$$typeof === REACT_CONTEXT_TYPE) + return renderNodeDestructive( + request, + task, + node._currentValue, + childIndex + ); + childIndex = Object.prototype.toString.call(node); + throw Error( + formatProdErrorMessage( + 31, + "[object Object]" === childIndex + ? "object with keys {" + Object.keys(node).join(", ") + "}" + : childIndex + ) + ); + } + if ("string" === typeof node) + (childIndex = task.blockedSegment), + null !== childIndex && + (childIndex.lastPushedText = pushTextInstance( + childIndex.chunks, + node, + request.renderState, + childIndex.lastPushedText + )); + else if ("number" === typeof node || "bigint" === typeof node) + (childIndex = task.blockedSegment), + null !== childIndex && + (childIndex.lastPushedText = pushTextInstance( + childIndex.chunks, + "" + node, + request.renderState, + childIndex.lastPushedText + )); + } +} +function renderChildrenArray(request, task, children, childIndex) { + var prevKeyPath = task.keyPath; + if ( + -1 !== childIndex && + ((task.keyPath = [task.keyPath, "Fragment", childIndex]), + null !== task.replay) + ) { + for ( + var replay = task.replay, replayNodes = replay.nodes, j = 0; + j < replayNodes.length; + j++ + ) { + var node = replayNodes[j]; + if (node[1] === childIndex) { + childIndex = node[2]; + node = node[3]; + task.replay = { nodes: childIndex, slots: node, pendingTasks: 1 }; + try { + renderChildrenArray(request, task, children, -1); + if (1 === task.replay.pendingTasks && 0 < task.replay.nodes.length) + throw Error(formatProdErrorMessage(488)); + task.replay.pendingTasks--; + } catch (x) { + if ( + "object" === typeof x && + null !== x && + (x === SuspenseException || "function" === typeof x.then) + ) + throw x; + task.replay.pendingTasks--; + children = getThrownInfo(task.componentStack); + var boundary = task.blockedBoundary, + error = x; + children = logRecoverableError(request, error, children); + abortRemainingReplayNodes( + request, + boundary, + childIndex, + node, + error, + children + ); + } + task.replay = replay; + replayNodes.splice(j, 1); + break; + } + } + task.keyPath = prevKeyPath; + return; + } + replay = task.treeContext; + replayNodes = children.length; + if ( + null !== task.replay && + ((j = task.replay.slots), null !== j && "object" === typeof j) + ) { + for (childIndex = 0; childIndex < replayNodes; childIndex++) + (node = children[childIndex]), + (task.treeContext = pushTreeContext(replay, replayNodes, childIndex)), + (boundary = j[childIndex]), + "number" === typeof boundary + ? (resumeNode(request, task, boundary, node, childIndex), + delete j[childIndex]) + : renderNode(request, task, node, childIndex); + task.treeContext = replay; + task.keyPath = prevKeyPath; + return; + } + for (j = 0; j < replayNodes; j++) + (childIndex = children[j]), + (task.treeContext = pushTreeContext(replay, replayNodes, j)), + renderNode(request, task, childIndex, j); + task.treeContext = replay; + task.keyPath = prevKeyPath; +} +function trackPostponedBoundary(request, trackedPostpones, boundary) { + boundary.status = 5; + boundary.rootSegmentID = request.nextSegmentId++; + request = boundary.trackedContentKeyPath; + if (null === request) throw Error(formatProdErrorMessage(486)); + var fallbackReplayNode = boundary.trackedFallbackNode, + children = [], + boundaryNode = trackedPostpones.workingMap.get(request); + if (void 0 === boundaryNode) + return ( + (boundary = [ + request[1], + request[2], + children, + null, + fallbackReplayNode, + boundary.rootSegmentID + ]), + trackedPostpones.workingMap.set(request, boundary), + addToReplayParent(boundary, request[0], trackedPostpones), + boundary + ); + boundaryNode[4] = fallbackReplayNode; + boundaryNode[5] = boundary.rootSegmentID; + return boundaryNode; +} +function trackPostpone(request, trackedPostpones, task, segment) { + segment.status = 5; + var keyPath = task.keyPath, + boundary = task.blockedBoundary; + if (null === boundary) + (segment.id = request.nextSegmentId++), + (trackedPostpones.rootSlots = segment.id), + null !== request.completedRootSegment && + (request.completedRootSegment.status = 5); + else { + if (null !== boundary && 0 === boundary.status) { + var boundaryNode = trackPostponedBoundary( + request, + trackedPostpones, + boundary + ); + if ( + boundary.trackedContentKeyPath === keyPath && + -1 === task.childIndex + ) { + -1 === segment.id && + (segment.id = segment.parentFlushed + ? boundary.rootSegmentID + : request.nextSegmentId++); + boundaryNode[3] = segment.id; + return; + } + } + -1 === segment.id && + (segment.id = + segment.parentFlushed && null !== boundary + ? boundary.rootSegmentID + : request.nextSegmentId++); + if (-1 === task.childIndex) + null === keyPath + ? (trackedPostpones.rootSlots = segment.id) + : ((task = trackedPostpones.workingMap.get(keyPath)), + void 0 === task + ? ((task = [keyPath[1], keyPath[2], [], segment.id]), + addToReplayParent(task, keyPath[0], trackedPostpones)) + : (task[3] = segment.id)); + else { + if (null === keyPath) + if (((request = trackedPostpones.rootSlots), null === request)) + request = trackedPostpones.rootSlots = {}; + else { + if ("number" === typeof request) + throw Error(formatProdErrorMessage(491)); + } + else if ( + ((boundary = trackedPostpones.workingMap), + (boundaryNode = boundary.get(keyPath)), + void 0 === boundaryNode) + ) + (request = {}), + (boundaryNode = [keyPath[1], keyPath[2], [], request]), + boundary.set(keyPath, boundaryNode), + addToReplayParent(boundaryNode, keyPath[0], trackedPostpones); + else if (((request = boundaryNode[3]), null === request)) + request = boundaryNode[3] = {}; + else if ("number" === typeof request) + throw Error(formatProdErrorMessage(491)); + request[task.childIndex] = segment.id; + } + } +} +function untrackBoundary(request, boundary) { + request = request.trackedPostpones; + null !== request && + ((boundary = boundary.trackedContentKeyPath), + null !== boundary && + ((boundary = request.workingMap.get(boundary)), + void 0 !== boundary && + ((boundary.length = 4), (boundary[2] = []), (boundary[3] = null)))); +} +function spawnNewSuspendedReplayTask(request, task, thenableState) { + return createReplayTask( + request, + thenableState, + task.replay, + task.node, + task.childIndex, + task.blockedBoundary, + task.hoistableState, + task.abortSet, + task.keyPath, + task.formatContext, + task.context, + task.treeContext, + task.row, + task.componentStack + ); +} +function spawnNewSuspendedRenderTask(request, task, thenableState) { + var segment = task.blockedSegment, + newSegment = createPendingSegment( + request, + segment.chunks.length, + null, + task.formatContext, + segment.lastPushedText, + !0 + ); + segment.children.push(newSegment); + segment.lastPushedText = !1; + return createRenderTask( + request, + thenableState, + task.node, + task.childIndex, + task.blockedBoundary, + newSegment, + task.blockedPreamble, + task.hoistableState, + task.abortSet, + task.keyPath, + task.formatContext, + task.context, + task.treeContext, + task.row, + task.componentStack + ); +} +function renderNode(request, task, node, childIndex) { + var previousFormatContext = task.formatContext, + previousContext = task.context, + previousKeyPath = task.keyPath, + previousTreeContext = task.treeContext, + previousComponentStack = task.componentStack, + segment = task.blockedSegment; + if (null === segment) { + segment = task.replay; + try { + return renderNodeDestructive(request, task, node, childIndex); + } catch (thrownValue) { + if ( + (resetHooksState(), + (node = + thrownValue === SuspenseException + ? getSuspendedThenable() + : thrownValue), + 12 !== request.status && "object" === typeof node && null !== node) + ) { + if ("function" === typeof node.then) { + childIndex = + thrownValue === SuspenseException + ? getThenableStateAfterSuspending() + : null; + request = spawnNewSuspendedReplayTask(request, task, childIndex).ping; + node.then(request, request); + task.formatContext = previousFormatContext; + task.context = previousContext; + task.keyPath = previousKeyPath; + task.treeContext = previousTreeContext; + task.componentStack = previousComponentStack; + task.replay = segment; + switchContext(previousContext); + return; + } + if ("Maximum call stack size exceeded" === node.message) { + node = + thrownValue === SuspenseException + ? getThenableStateAfterSuspending() + : null; + node = spawnNewSuspendedReplayTask(request, task, node); + request.pingedTasks.push(node); + task.formatContext = previousFormatContext; + task.context = previousContext; + task.keyPath = previousKeyPath; + task.treeContext = previousTreeContext; + task.componentStack = previousComponentStack; + task.replay = segment; + switchContext(previousContext); + return; + } + } + } + } else { + var childrenLength = segment.children.length, + chunkLength = segment.chunks.length; + try { + return renderNodeDestructive(request, task, node, childIndex); + } catch (thrownValue$63) { + if ( + (resetHooksState(), + (segment.children.length = childrenLength), + (segment.chunks.length = chunkLength), + (node = + thrownValue$63 === SuspenseException + ? getSuspendedThenable() + : thrownValue$63), + 12 !== request.status && "object" === typeof node && null !== node) + ) { + if ("function" === typeof node.then) { + segment = node; + node = + thrownValue$63 === SuspenseException + ? getThenableStateAfterSuspending() + : null; + request = spawnNewSuspendedRenderTask(request, task, node).ping; + segment.then(request, request); + task.formatContext = previousFormatContext; + task.context = previousContext; + task.keyPath = previousKeyPath; + task.treeContext = previousTreeContext; + task.componentStack = previousComponentStack; + switchContext(previousContext); + return; + } + if ("Maximum call stack size exceeded" === node.message) { + segment = + thrownValue$63 === SuspenseException + ? getThenableStateAfterSuspending() + : null; + segment = spawnNewSuspendedRenderTask(request, task, segment); + request.pingedTasks.push(segment); + task.formatContext = previousFormatContext; + task.context = previousContext; + task.keyPath = previousKeyPath; + task.treeContext = previousTreeContext; + task.componentStack = previousComponentStack; + switchContext(previousContext); + return; + } + } + } + } + task.formatContext = previousFormatContext; + task.context = previousContext; + task.keyPath = previousKeyPath; + task.treeContext = previousTreeContext; + switchContext(previousContext); + throw node; +} +function abortTaskSoft(task) { + var boundary = task.blockedBoundary, + segment = task.blockedSegment; + null !== segment && + ((segment.status = 3), finishedTask(this, boundary, task.row, segment)); +} +function abortRemainingReplayNodes( + request$jscomp$0, + boundary, + nodes, + slots, + error, + errorDigest$jscomp$0 +) { + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + if (4 === node.length) + abortRemainingReplayNodes( + request$jscomp$0, + boundary, + node[2], + node[3], + error, + errorDigest$jscomp$0 + ); + else { + node = node[5]; + var request = request$jscomp$0, + errorDigest = errorDigest$jscomp$0, + resumedBoundary = createSuspenseBoundary( + request, + null, + new Set(), + null, + null + ); + resumedBoundary.parentFlushed = !0; + resumedBoundary.rootSegmentID = node; + resumedBoundary.status = 4; + resumedBoundary.errorDigest = errorDigest; + resumedBoundary.parentFlushed && + request.clientRenderedBoundaries.push(resumedBoundary); + } + } + nodes.length = 0; + if (null !== slots) { + if (null === boundary) throw Error(formatProdErrorMessage(487)); + 4 !== boundary.status && + ((boundary.status = 4), + (boundary.errorDigest = errorDigest$jscomp$0), + boundary.parentFlushed && + request$jscomp$0.clientRenderedBoundaries.push(boundary)); + if ("object" === typeof slots) for (var index in slots) delete slots[index]; + } +} +function abortTask(task, request, error) { + var boundary = task.blockedBoundary, + segment = task.blockedSegment; + if (null !== segment) { + if (6 === segment.status) return; + segment.status = 3; + } + var errorInfo = getThrownInfo(task.componentStack); + if (null === boundary) { + if (13 !== request.status && 14 !== request.status) { + boundary = task.replay; + if (null === boundary) { + null !== request.trackedPostpones && null !== segment + ? ((boundary = request.trackedPostpones), + logRecoverableError(request, error, errorInfo), + trackPostpone(request, boundary, task, segment), + finishedTask(request, null, task.row, segment)) + : (logRecoverableError(request, error, errorInfo), + fatalError(request, error)); + return; + } + boundary.pendingTasks--; + 0 === boundary.pendingTasks && + 0 < boundary.nodes.length && + ((segment = logRecoverableError(request, error, errorInfo)), + abortRemainingReplayNodes( + request, + null, + boundary.nodes, + boundary.slots, + error, + segment + )); + request.pendingRootTasks--; + 0 === request.pendingRootTasks && completeShell(request); + } + } else { + var trackedPostpones$64 = request.trackedPostpones; + if (4 !== boundary.status) { + if (null !== trackedPostpones$64 && null !== segment) + return ( + logRecoverableError(request, error, errorInfo), + trackPostpone(request, trackedPostpones$64, task, segment), + boundary.fallbackAbortableTasks.forEach(function (fallbackTask) { + return abortTask(fallbackTask, request, error); + }), + boundary.fallbackAbortableTasks.clear(), + finishedTask(request, boundary, task.row, segment) + ); + boundary.status = 4; + segment = logRecoverableError(request, error, errorInfo); + boundary.status = 4; + boundary.errorDigest = segment; + untrackBoundary(request, boundary); + boundary.parentFlushed && request.clientRenderedBoundaries.push(boundary); + } + boundary.pendingTasks--; + segment = boundary.row; + null !== segment && + 0 === --segment.pendingTasks && + finishSuspenseListRow(request, segment); + boundary.fallbackAbortableTasks.forEach(function (fallbackTask) { + return abortTask(fallbackTask, request, error); + }); + boundary.fallbackAbortableTasks.clear(); + } + task = task.row; + null !== task && + 0 === --task.pendingTasks && + finishSuspenseListRow(request, task); + request.allPendingTasks--; + 0 === request.allPendingTasks && completeAll(request); +} +function safelyEmitEarlyPreloads(request, shellComplete) { + try { + var renderState = request.renderState, + onHeaders = renderState.onHeaders; + if (onHeaders) { + var headers = renderState.headers; + if (headers) { + renderState.headers = null; + var linkHeader = headers.preconnects; + headers.fontPreloads && + (linkHeader && (linkHeader += ", "), + (linkHeader += headers.fontPreloads)); + headers.highImagePreloads && + (linkHeader && (linkHeader += ", "), + (linkHeader += headers.highImagePreloads)); + if (!shellComplete) { + var queueIter = renderState.styles.values(), + queueStep = queueIter.next(); + b: for ( + ; + 0 < headers.remainingCapacity && !queueStep.done; + queueStep = queueIter.next() + ) + for ( + var sheetIter = queueStep.value.sheets.values(), + sheetStep = sheetIter.next(); + 0 < headers.remainingCapacity && !sheetStep.done; + sheetStep = sheetIter.next() + ) { + var sheet = sheetStep.value, + props = sheet.props, + key = props.href, + props$jscomp$0 = sheet.props, + header = getPreloadAsHeader(props$jscomp$0.href, "style", { + crossOrigin: props$jscomp$0.crossOrigin, + integrity: props$jscomp$0.integrity, + nonce: props$jscomp$0.nonce, + type: props$jscomp$0.type, + fetchPriority: props$jscomp$0.fetchPriority, + referrerPolicy: props$jscomp$0.referrerPolicy, + media: props$jscomp$0.media + }); + if (0 <= (headers.remainingCapacity -= header.length + 2)) + (renderState.resets.style[key] = PRELOAD_NO_CREDS), + linkHeader && (linkHeader += ", "), + (linkHeader += header), + (renderState.resets.style[key] = + "string" === typeof props.crossOrigin || + "string" === typeof props.integrity + ? [props.crossOrigin, props.integrity] + : PRELOAD_NO_CREDS); + else break b; + } + } + linkHeader ? onHeaders({ Link: linkHeader }) : onHeaders({}); + } + } + } catch (error) { + logRecoverableError(request, error, {}); + } +} +function completeShell(request) { + null === request.trackedPostpones && safelyEmitEarlyPreloads(request, !0); + null === request.trackedPostpones && preparePreamble(request); + request.onShellError = noop; + request = request.onShellReady; + request(); +} +function completeAll(request) { + safelyEmitEarlyPreloads( + request, + null === request.trackedPostpones + ? !0 + : null === request.completedRootSegment || + 5 !== request.completedRootSegment.status + ); + preparePreamble(request); + request = request.onAllReady; + request(); +} +function queueCompletedSegment(boundary, segment) { + if ( + 0 === segment.chunks.length && + 1 === segment.children.length && + null === segment.children[0].boundary && + -1 === segment.children[0].id + ) { + var childSegment = segment.children[0]; + childSegment.id = segment.id; + childSegment.parentFlushed = !0; + (1 !== childSegment.status && + 3 !== childSegment.status && + 4 !== childSegment.status) || + queueCompletedSegment(boundary, childSegment); + } else boundary.completedSegments.push(segment); +} +function finishedSegment(request, boundary, segment) { + if (null !== byteLengthOfChunk) { + segment = segment.chunks; + for (var segmentByteSize = 0, i = 0; i < segment.length; i++) + segmentByteSize += segment[i].byteLength; + null === boundary + ? (request.byteSize += segmentByteSize) + : (boundary.byteSize += segmentByteSize); + } +} +function finishedTask(request, boundary, row, segment) { + null !== row && + (0 === --row.pendingTasks + ? finishSuspenseListRow(request, row) + : row.together && tryToResolveTogetherRow(request, row)); + request.allPendingTasks--; + if (null === boundary) { + if (null !== segment && segment.parentFlushed) { + if (null !== request.completedRootSegment) + throw Error(formatProdErrorMessage(389)); + request.completedRootSegment = segment; + } + request.pendingRootTasks--; + 0 === request.pendingRootTasks && completeShell(request); + } else if ((boundary.pendingTasks--, 4 !== boundary.status)) + if (0 === boundary.pendingTasks) + if ( + (0 === boundary.status && (boundary.status = 1), + null !== segment && + segment.parentFlushed && + (1 === segment.status || 3 === segment.status) && + queueCompletedSegment(boundary, segment), + boundary.parentFlushed && request.completedBoundaries.push(boundary), + 1 === boundary.status) + ) + (row = boundary.row), + null !== row && + hoistHoistables(row.hoistables, boundary.contentState), + isEligibleForOutlining(request, boundary) || + (boundary.fallbackAbortableTasks.forEach(abortTaskSoft, request), + boundary.fallbackAbortableTasks.clear(), + null !== row && + 0 === --row.pendingTasks && + finishSuspenseListRow(request, row)), + 0 === request.pendingRootTasks && + null === request.trackedPostpones && + null !== boundary.contentPreamble && + preparePreamble(request); + else { + if ( + 5 === boundary.status && + ((boundary = boundary.row), null !== boundary) + ) { + if (null !== request.trackedPostpones) { + row = request.trackedPostpones; + var postponedRow = boundary.next; + if ( + null !== postponedRow && + ((segment = postponedRow.boundaries), null !== segment) + ) + for ( + postponedRow.boundaries = null, postponedRow = 0; + postponedRow < segment.length; + postponedRow++ + ) { + var postponedBoundary = segment[postponedRow]; + trackPostponedBoundary(request, row, postponedBoundary); + finishedTask(request, postponedBoundary, null, null); + } + } + 0 === --boundary.pendingTasks && + finishSuspenseListRow(request, boundary); + } + } + else + null === segment || + !segment.parentFlushed || + (1 !== segment.status && 3 !== segment.status) || + (queueCompletedSegment(boundary, segment), + 1 === boundary.completedSegments.length && + boundary.parentFlushed && + request.partialBoundaries.push(boundary)), + (boundary = boundary.row), + null !== boundary && + boundary.together && + tryToResolveTogetherRow(request, boundary); + 0 === request.allPendingTasks && completeAll(request); +} +function performWork(request$jscomp$2) { + if (14 !== request$jscomp$2.status && 13 !== request$jscomp$2.status) { + var prevContext = currentActiveSnapshot, + prevDispatcher = ReactSharedInternals.H; + ReactSharedInternals.H = HooksDispatcher; + var prevAsyncDispatcher = ReactSharedInternals.A; + ReactSharedInternals.A = DefaultAsyncDispatcher; + var prevRequest = currentRequest; + currentRequest = request$jscomp$2; + var prevResumableState = currentResumableState; + currentResumableState = request$jscomp$2.resumableState; + try { + var pingedTasks = request$jscomp$2.pingedTasks, + i; + for (i = 0; i < pingedTasks.length; i++) { + var task = pingedTasks[i], + request = request$jscomp$2, + segment = task.blockedSegment; + if (null === segment) { + var request$jscomp$0 = request; + if (0 !== task.replay.pendingTasks) { + switchContext(task.context); + try { + "number" === typeof task.replay.slots + ? resumeNode( + request$jscomp$0, + task, + task.replay.slots, + task.node, + task.childIndex + ) + : retryNode(request$jscomp$0, task); + if ( + 1 === task.replay.pendingTasks && + 0 < task.replay.nodes.length + ) + throw Error(formatProdErrorMessage(488)); + task.replay.pendingTasks--; + task.abortSet.delete(task); + finishedTask( + request$jscomp$0, + task.blockedBoundary, + task.row, + null + ); + } catch (thrownValue) { + resetHooksState(); + var x = + thrownValue === SuspenseException + ? getSuspendedThenable() + : thrownValue; + if ( + "object" === typeof x && + null !== x && + "function" === typeof x.then + ) { + var ping = task.ping; + x.then(ping, ping); + task.thenableState = + thrownValue === SuspenseException + ? getThenableStateAfterSuspending() + : null; + } else { + task.replay.pendingTasks--; + task.abortSet.delete(task); + var errorInfo = getThrownInfo(task.componentStack); + request = void 0; + var request$jscomp$1 = request$jscomp$0, + boundary = task.blockedBoundary, + error$jscomp$0 = + 12 === request$jscomp$0.status + ? request$jscomp$0.fatalError + : x, + replayNodes = task.replay.nodes, + resumeSlots = task.replay.slots; + request = logRecoverableError( + request$jscomp$1, + error$jscomp$0, + errorInfo + ); + abortRemainingReplayNodes( + request$jscomp$1, + boundary, + replayNodes, + resumeSlots, + error$jscomp$0, + request + ); + request$jscomp$0.pendingRootTasks--; + 0 === request$jscomp$0.pendingRootTasks && + completeShell(request$jscomp$0); + request$jscomp$0.allPendingTasks--; + 0 === request$jscomp$0.allPendingTasks && + completeAll(request$jscomp$0); + } + } finally { + } + } + } else if ( + ((request$jscomp$0 = void 0), + (request$jscomp$1 = segment), + 0 === request$jscomp$1.status) + ) { + request$jscomp$1.status = 6; + switchContext(task.context); + var childrenLength = request$jscomp$1.children.length, + chunkLength = request$jscomp$1.chunks.length; + try { + retryNode(request, task), + request$jscomp$1.lastPushedText && + request$jscomp$1.textEmbedded && + request$jscomp$1.chunks.push(textSeparator), + task.abortSet.delete(task), + (request$jscomp$1.status = 1), + finishedSegment(request, task.blockedBoundary, request$jscomp$1), + finishedTask( + request, + task.blockedBoundary, + task.row, + request$jscomp$1 + ); + } catch (thrownValue) { + resetHooksState(); + request$jscomp$1.children.length = childrenLength; + request$jscomp$1.chunks.length = chunkLength; + var x$jscomp$0 = + thrownValue === SuspenseException + ? getSuspendedThenable() + : 12 === request.status + ? request.fatalError + : thrownValue; + if (12 === request.status && null !== request.trackedPostpones) { + var trackedPostpones = request.trackedPostpones, + thrownInfo = getThrownInfo(task.componentStack); + task.abortSet.delete(task); + logRecoverableError(request, x$jscomp$0, thrownInfo); + trackPostpone(request, trackedPostpones, task, request$jscomp$1); + finishedTask( + request, + task.blockedBoundary, + task.row, + request$jscomp$1 + ); + } else if ( + "object" === typeof x$jscomp$0 && + null !== x$jscomp$0 && + "function" === typeof x$jscomp$0.then + ) { + request$jscomp$1.status = 0; + task.thenableState = + thrownValue === SuspenseException + ? getThenableStateAfterSuspending() + : null; + var ping$jscomp$0 = task.ping; + x$jscomp$0.then(ping$jscomp$0, ping$jscomp$0); + } else { + var errorInfo$jscomp$0 = getThrownInfo(task.componentStack); + task.abortSet.delete(task); + request$jscomp$1.status = 4; + var boundary$jscomp$0 = task.blockedBoundary, + row = task.row; + null !== row && + 0 === --row.pendingTasks && + finishSuspenseListRow(request, row); + request.allPendingTasks--; + request$jscomp$0 = logRecoverableError( + request, + x$jscomp$0, + errorInfo$jscomp$0 + ); + if (null === boundary$jscomp$0) fatalError(request, x$jscomp$0); + else if ( + (boundary$jscomp$0.pendingTasks--, + 4 !== boundary$jscomp$0.status) + ) { + boundary$jscomp$0.status = 4; + boundary$jscomp$0.errorDigest = request$jscomp$0; + untrackBoundary(request, boundary$jscomp$0); + var boundaryRow = boundary$jscomp$0.row; + null !== boundaryRow && + 0 === --boundaryRow.pendingTasks && + finishSuspenseListRow(request, boundaryRow); + boundary$jscomp$0.parentFlushed && + request.clientRenderedBoundaries.push(boundary$jscomp$0); + 0 === request.pendingRootTasks && + null === request.trackedPostpones && + null !== boundary$jscomp$0.contentPreamble && + preparePreamble(request); + } + 0 === request.allPendingTasks && completeAll(request); + } + } finally { + } + } + } + pingedTasks.splice(0, i); + null !== request$jscomp$2.destination && + flushCompletedQueues(request$jscomp$2, request$jscomp$2.destination); + } catch (error) { + logRecoverableError(request$jscomp$2, error, {}), + fatalError(request$jscomp$2, error); + } finally { + (currentResumableState = prevResumableState), + (ReactSharedInternals.H = prevDispatcher), + (ReactSharedInternals.A = prevAsyncDispatcher), + prevDispatcher === HooksDispatcher && switchContext(prevContext), + (currentRequest = prevRequest); + } + } +} +function preparePreambleFromSubtree( + request, + segment, + collectedPreambleSegments +) { + segment.preambleChildren.length && + collectedPreambleSegments.push(segment.preambleChildren); + for (var pendingPreambles = !1, i = 0; i < segment.children.length; i++) + pendingPreambles = + preparePreambleFromSegment( + request, + segment.children[i], + collectedPreambleSegments + ) || pendingPreambles; + return pendingPreambles; +} +function preparePreambleFromSegment( + request, + segment, + collectedPreambleSegments +) { + var boundary = segment.boundary; + if (null === boundary) + return preparePreambleFromSubtree( + request, + segment, + collectedPreambleSegments + ); + var preamble = boundary.contentPreamble, + fallbackPreamble = boundary.fallbackPreamble; + if (null === preamble || null === fallbackPreamble) return !1; + switch (boundary.status) { + case 1: + hoistPreambleState(request.renderState, preamble); + request.byteSize += boundary.byteSize; + segment = boundary.completedSegments[0]; + if (!segment) throw Error(formatProdErrorMessage(391)); + return preparePreambleFromSubtree( + request, + segment, + collectedPreambleSegments + ); + case 5: + if (null !== request.trackedPostpones) return !0; + case 4: + if (1 === segment.status) + return ( + hoistPreambleState(request.renderState, fallbackPreamble), + preparePreambleFromSubtree( + request, + segment, + collectedPreambleSegments + ) + ); + default: + return !0; + } +} +function preparePreamble(request) { + if ( + request.completedRootSegment && + null === request.completedPreambleSegments + ) { + var collectedPreambleSegments = [], + originalRequestByteSize = request.byteSize, + hasPendingPreambles = preparePreambleFromSegment( + request, + request.completedRootSegment, + collectedPreambleSegments + ), + preamble = request.renderState.preamble; + !1 === hasPendingPreambles || (preamble.headChunks && preamble.bodyChunks) + ? (request.completedPreambleSegments = collectedPreambleSegments) + : (request.byteSize = originalRequestByteSize); + } +} +function flushSubtree(request, destination, segment, hoistableState) { + segment.parentFlushed = !0; + switch (segment.status) { + case 0: + segment.id = request.nextSegmentId++; + case 5: + return ( + (hoistableState = segment.id), + (segment.lastPushedText = !1), + (segment.textEmbedded = !1), + (request = request.renderState), + writeChunk(destination, placeholder1), + writeChunk(destination, request.placeholderPrefix), + (request = stringToChunk(hoistableState.toString(16))), + writeChunk(destination, request), + writeChunkAndReturn(destination, placeholder2) + ); + case 1: + segment.status = 2; + var r = !0, + chunks = segment.chunks, + chunkIdx = 0; + segment = segment.children; + for (var childIdx = 0; childIdx < segment.length; childIdx++) { + for (r = segment[childIdx]; chunkIdx < r.index; chunkIdx++) + writeChunk(destination, chunks[chunkIdx]); + r = flushSegment(request, destination, r, hoistableState); + } + for (; chunkIdx < chunks.length - 1; chunkIdx++) + writeChunk(destination, chunks[chunkIdx]); + chunkIdx < chunks.length && + (r = writeChunkAndReturn(destination, chunks[chunkIdx])); + return r; + case 3: + return !0; + default: + throw Error(formatProdErrorMessage(390)); + } +} +var flushedByteSize = 0; +function flushSegment(request, destination, segment, hoistableState) { + var boundary = segment.boundary; + if (null === boundary) + return flushSubtree(request, destination, segment, hoistableState); + boundary.parentFlushed = !0; + if (4 === boundary.status) { + var row = boundary.row; + null !== row && + 0 === --row.pendingTasks && + finishSuspenseListRow(request, row); + boundary = boundary.errorDigest; + writeChunkAndReturn(destination, startClientRenderedSuspenseBoundary); + writeChunk(destination, clientRenderedSuspenseBoundaryError1); + boundary && + (writeChunk(destination, clientRenderedSuspenseBoundaryError1A), + writeChunk(destination, stringToChunk(escapeTextForBrowser(boundary))), + writeChunk( + destination, + clientRenderedSuspenseBoundaryErrorAttrInterstitial + )); + writeChunkAndReturn(destination, clientRenderedSuspenseBoundaryError2); + flushSubtree(request, destination, segment, hoistableState); + } else if (1 !== boundary.status) + 0 === boundary.status && (boundary.rootSegmentID = request.nextSegmentId++), + 0 < boundary.completedSegments.length && + request.partialBoundaries.push(boundary), + writeStartPendingSuspenseBoundary( + destination, + request.renderState, + boundary.rootSegmentID + ), + hoistableState && hoistHoistables(hoistableState, boundary.fallbackState), + flushSubtree(request, destination, segment, hoistableState); + else if ( + !flushingPartialBoundaries && + isEligibleForOutlining(request, boundary) && + (flushedByteSize + boundary.byteSize > request.progressiveChunkSize || + hasSuspenseyContent(boundary.contentState)) + ) + (boundary.rootSegmentID = request.nextSegmentId++), + request.completedBoundaries.push(boundary), + writeStartPendingSuspenseBoundary( + destination, + request.renderState, + boundary.rootSegmentID + ), + flushSubtree(request, destination, segment, hoistableState); + else { + flushedByteSize += boundary.byteSize; + hoistableState && hoistHoistables(hoistableState, boundary.contentState); + segment = boundary.row; + null !== segment && + isEligibleForOutlining(request, boundary) && + 0 === --segment.pendingTasks && + finishSuspenseListRow(request, segment); + writeChunkAndReturn(destination, startCompletedSuspenseBoundary); + segment = boundary.completedSegments; + if (1 !== segment.length) throw Error(formatProdErrorMessage(391)); + flushSegment(request, destination, segment[0], hoistableState); + } + return writeChunkAndReturn(destination, endSuspenseBoundary); +} +function flushSegmentContainer(request, destination, segment, hoistableState) { + writeStartSegment( + destination, + request.renderState, + segment.parentFormatContext, + segment.id + ); + flushSegment(request, destination, segment, hoistableState); + return writeEndSegment(destination, segment.parentFormatContext); +} +function flushCompletedBoundary(request, destination, boundary) { + flushedByteSize = boundary.byteSize; + for ( + var completedSegments = boundary.completedSegments, i = 0; + i < completedSegments.length; + i++ + ) + flushPartiallyCompletedSegment( + request, + destination, + boundary, + completedSegments[i] + ); + completedSegments.length = 0; + completedSegments = boundary.row; + null !== completedSegments && + isEligibleForOutlining(request, boundary) && + 0 === --completedSegments.pendingTasks && + finishSuspenseListRow(request, completedSegments); + writeHoistablesForBoundary( + destination, + boundary.contentState, + request.renderState + ); + completedSegments = request.resumableState; + request = request.renderState; + i = boundary.rootSegmentID; + boundary = boundary.contentState; + var requiresStyleInsertion = request.stylesToHoist; + request.stylesToHoist = !1; + writeChunk(destination, request.startInlineScript); + writeChunk(destination, endOfStartTag); + requiresStyleInsertion + ? (0 === (completedSegments.instructions & 4) && + ((completedSegments.instructions |= 4), + writeChunk(destination, clientRenderScriptFunctionOnly)), + 0 === (completedSegments.instructions & 2) && + ((completedSegments.instructions |= 2), + writeChunk(destination, completeBoundaryScriptFunctionOnly)), + 0 === (completedSegments.instructions & 8) + ? ((completedSegments.instructions |= 8), + writeChunk(destination, completeBoundaryWithStylesScript1FullPartial)) + : writeChunk(destination, completeBoundaryWithStylesScript1Partial)) + : (0 === (completedSegments.instructions & 2) && + ((completedSegments.instructions |= 2), + writeChunk(destination, completeBoundaryScriptFunctionOnly)), + writeChunk(destination, completeBoundaryScript1Partial)); + completedSegments = stringToChunk(i.toString(16)); + writeChunk(destination, request.boundaryPrefix); + writeChunk(destination, completedSegments); + writeChunk(destination, completeBoundaryScript2); + writeChunk(destination, request.segmentPrefix); + writeChunk(destination, completedSegments); + requiresStyleInsertion + ? (writeChunk(destination, completeBoundaryScript3a), + writeStyleResourceDependenciesInJS(destination, boundary)) + : writeChunk(destination, completeBoundaryScript3b); + boundary = writeChunkAndReturn(destination, completeBoundaryScriptEnd); + return writeBootstrap(destination, request) && boundary; +} +function flushPartiallyCompletedSegment( + request, + destination, + boundary, + segment +) { + if (2 === segment.status) return !0; + var hoistableState = boundary.contentState, + segmentID = segment.id; + if (-1 === segmentID) { + if (-1 === (segment.id = boundary.rootSegmentID)) + throw Error(formatProdErrorMessage(392)); + return flushSegmentContainer(request, destination, segment, hoistableState); + } + if (segmentID === boundary.rootSegmentID) + return flushSegmentContainer(request, destination, segment, hoistableState); + flushSegmentContainer(request, destination, segment, hoistableState); + boundary = request.resumableState; + request = request.renderState; + writeChunk(destination, request.startInlineScript); + writeChunk(destination, endOfStartTag); + 0 === (boundary.instructions & 1) + ? ((boundary.instructions |= 1), + writeChunk(destination, completeSegmentScript1Full)) + : writeChunk(destination, completeSegmentScript1Partial); + writeChunk(destination, request.segmentPrefix); + segmentID = stringToChunk(segmentID.toString(16)); + writeChunk(destination, segmentID); + writeChunk(destination, completeSegmentScript2); + writeChunk(destination, request.placeholderPrefix); + writeChunk(destination, segmentID); + destination = writeChunkAndReturn(destination, completeSegmentScriptEnd); + return destination; +} +var flushingPartialBoundaries = !1; +function flushCompletedQueues(request, destination) { + currentView = new Uint8Array(2048); + writtenBytes = 0; + try { + if (!(0 < request.pendingRootTasks)) { + var i, + completedRootSegment = request.completedRootSegment; + if (null !== completedRootSegment) { + if (5 === completedRootSegment.status) return; + var completedPreambleSegments = request.completedPreambleSegments; + if (null === completedPreambleSegments) return; + flushedByteSize = request.byteSize; + var resumableState = request.resumableState, + renderState = request.renderState, + preamble = renderState.preamble, + htmlChunks = preamble.htmlChunks, + headChunks = preamble.headChunks, + i$jscomp$0; + if (htmlChunks) { + for (i$jscomp$0 = 0; i$jscomp$0 < htmlChunks.length; i$jscomp$0++) + writeChunk(destination, htmlChunks[i$jscomp$0]); + if (headChunks) + for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++) + writeChunk(destination, headChunks[i$jscomp$0]); + else + writeChunk(destination, startChunkForTag("head")), + writeChunk(destination, endOfStartTag); + } else if (headChunks) + for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++) + writeChunk(destination, headChunks[i$jscomp$0]); + var charsetChunks = renderState.charsetChunks; + for (i$jscomp$0 = 0; i$jscomp$0 < charsetChunks.length; i$jscomp$0++) + writeChunk(destination, charsetChunks[i$jscomp$0]); + charsetChunks.length = 0; + renderState.preconnects.forEach(flushResource, destination); + renderState.preconnects.clear(); + var viewportChunks = renderState.viewportChunks; + for (i$jscomp$0 = 0; i$jscomp$0 < viewportChunks.length; i$jscomp$0++) + writeChunk(destination, viewportChunks[i$jscomp$0]); + viewportChunks.length = 0; + renderState.fontPreloads.forEach(flushResource, destination); + renderState.fontPreloads.clear(); + renderState.highImagePreloads.forEach(flushResource, destination); + renderState.highImagePreloads.clear(); + currentlyFlushingRenderState = renderState; + renderState.styles.forEach(flushStylesInPreamble, destination); + currentlyFlushingRenderState = null; + var importMapChunks = renderState.importMapChunks; + for (i$jscomp$0 = 0; i$jscomp$0 < importMapChunks.length; i$jscomp$0++) + writeChunk(destination, importMapChunks[i$jscomp$0]); + importMapChunks.length = 0; + renderState.bootstrapScripts.forEach(flushResource, destination); + renderState.scripts.forEach(flushResource, destination); + renderState.scripts.clear(); + renderState.bulkPreloads.forEach(flushResource, destination); + renderState.bulkPreloads.clear(); + htmlChunks || headChunks || (resumableState.instructions |= 32); + var hoistableChunks = renderState.hoistableChunks; + for (i$jscomp$0 = 0; i$jscomp$0 < hoistableChunks.length; i$jscomp$0++) + writeChunk(destination, hoistableChunks[i$jscomp$0]); + for ( + resumableState = hoistableChunks.length = 0; + resumableState < completedPreambleSegments.length; + resumableState++ + ) { + var segments = completedPreambleSegments[resumableState]; + for (renderState = 0; renderState < segments.length; renderState++) + flushSegment(request, destination, segments[renderState], null); + } + var preamble$jscomp$0 = request.renderState.preamble, + headChunks$jscomp$0 = preamble$jscomp$0.headChunks; + (preamble$jscomp$0.htmlChunks || headChunks$jscomp$0) && + writeChunk(destination, endChunkForTag("head")); + var bodyChunks = preamble$jscomp$0.bodyChunks; + if (bodyChunks) + for ( + completedPreambleSegments = 0; + completedPreambleSegments < bodyChunks.length; + completedPreambleSegments++ + ) + writeChunk(destination, bodyChunks[completedPreambleSegments]); + flushSegment(request, destination, completedRootSegment, null); + request.completedRootSegment = null; + var renderState$jscomp$0 = request.renderState; + if ( + 0 !== request.allPendingTasks || + 0 !== request.clientRenderedBoundaries.length || + 0 !== request.completedBoundaries.length || + (null !== request.trackedPostpones && + (0 !== request.trackedPostpones.rootNodes.length || + null !== request.trackedPostpones.rootSlots)) + ) { + var resumableState$jscomp$0 = request.resumableState; + if (0 === (resumableState$jscomp$0.instructions & 64)) { + resumableState$jscomp$0.instructions |= 64; + writeChunk(destination, renderState$jscomp$0.startInlineScript); + if (0 === (resumableState$jscomp$0.instructions & 32)) { + resumableState$jscomp$0.instructions |= 32; + var shellId = "_" + resumableState$jscomp$0.idPrefix + "R_"; + writeChunk(destination, completedShellIdAttributeStart); + writeChunk( + destination, + stringToChunk(escapeTextForBrowser(shellId)) + ); + writeChunk(destination, attributeEnd); + } + writeChunk(destination, endOfStartTag); + writeChunk(destination, shellTimeRuntimeScript); + writeChunkAndReturn(destination, endInlineScript); + } + } + writeBootstrap(destination, renderState$jscomp$0); + } + var renderState$jscomp$1 = request.renderState; + completedRootSegment = 0; + var viewportChunks$jscomp$0 = renderState$jscomp$1.viewportChunks; + for ( + completedRootSegment = 0; + completedRootSegment < viewportChunks$jscomp$0.length; + completedRootSegment++ + ) + writeChunk(destination, viewportChunks$jscomp$0[completedRootSegment]); + viewportChunks$jscomp$0.length = 0; + renderState$jscomp$1.preconnects.forEach(flushResource, destination); + renderState$jscomp$1.preconnects.clear(); + renderState$jscomp$1.fontPreloads.forEach(flushResource, destination); + renderState$jscomp$1.fontPreloads.clear(); + renderState$jscomp$1.highImagePreloads.forEach( + flushResource, + destination + ); + renderState$jscomp$1.highImagePreloads.clear(); + renderState$jscomp$1.styles.forEach(preloadLateStyles, destination); + renderState$jscomp$1.scripts.forEach(flushResource, destination); + renderState$jscomp$1.scripts.clear(); + renderState$jscomp$1.bulkPreloads.forEach(flushResource, destination); + renderState$jscomp$1.bulkPreloads.clear(); + var hoistableChunks$jscomp$0 = renderState$jscomp$1.hoistableChunks; + for ( + completedRootSegment = 0; + completedRootSegment < hoistableChunks$jscomp$0.length; + completedRootSegment++ + ) + writeChunk(destination, hoistableChunks$jscomp$0[completedRootSegment]); + hoistableChunks$jscomp$0.length = 0; + var clientRenderedBoundaries = request.clientRenderedBoundaries; + for (i = 0; i < clientRenderedBoundaries.length; i++) { + var boundary = clientRenderedBoundaries[i]; + renderState$jscomp$1 = destination; + var resumableState$jscomp$1 = request.resumableState, + renderState$jscomp$2 = request.renderState, + id = boundary.rootSegmentID, + errorDigest = boundary.errorDigest; + writeChunk( + renderState$jscomp$1, + renderState$jscomp$2.startInlineScript + ); + writeChunk(renderState$jscomp$1, endOfStartTag); + 0 === (resumableState$jscomp$1.instructions & 4) + ? ((resumableState$jscomp$1.instructions |= 4), + writeChunk(renderState$jscomp$1, clientRenderScript1Full)) + : writeChunk(renderState$jscomp$1, clientRenderScript1Partial); + writeChunk(renderState$jscomp$1, renderState$jscomp$2.boundaryPrefix); + writeChunk(renderState$jscomp$1, stringToChunk(id.toString(16))); + writeChunk(renderState$jscomp$1, clientRenderScript1A); + errorDigest && + (writeChunk( + renderState$jscomp$1, + clientRenderErrorScriptArgInterstitial + ), + writeChunk( + renderState$jscomp$1, + stringToChunk( + escapeJSStringsForInstructionScripts(errorDigest || "") + ) + )); + var JSCompiler_inline_result = writeChunkAndReturn( + renderState$jscomp$1, + clientRenderScriptEnd + ); + if (!JSCompiler_inline_result) { + request.destination = null; + i++; + clientRenderedBoundaries.splice(0, i); + return; + } + } + clientRenderedBoundaries.splice(0, i); + var completedBoundaries = request.completedBoundaries; + for (i = 0; i < completedBoundaries.length; i++) + if ( + !flushCompletedBoundary(request, destination, completedBoundaries[i]) + ) { + request.destination = null; + i++; + completedBoundaries.splice(0, i); + return; + } + completedBoundaries.splice(0, i); + completeWriting(destination); + currentView = new Uint8Array(2048); + writtenBytes = 0; + flushingPartialBoundaries = !0; + var partialBoundaries = request.partialBoundaries; + for (i = 0; i < partialBoundaries.length; i++) { + var boundary$70 = partialBoundaries[i]; + a: { + clientRenderedBoundaries = request; + boundary = destination; + flushedByteSize = boundary$70.byteSize; + var completedSegments = boundary$70.completedSegments; + for ( + JSCompiler_inline_result = 0; + JSCompiler_inline_result < completedSegments.length; + JSCompiler_inline_result++ + ) + if ( + !flushPartiallyCompletedSegment( + clientRenderedBoundaries, + boundary, + boundary$70, + completedSegments[JSCompiler_inline_result] + ) + ) { + JSCompiler_inline_result++; + completedSegments.splice(0, JSCompiler_inline_result); + var JSCompiler_inline_result$jscomp$0 = !1; + break a; + } + completedSegments.splice(0, JSCompiler_inline_result); + var row = boundary$70.row; + null !== row && + row.together && + 1 === boundary$70.pendingTasks && + (1 === row.pendingTasks + ? unblockSuspenseListRow( + clientRenderedBoundaries, + row, + row.hoistables + ) + : row.pendingTasks--); + JSCompiler_inline_result$jscomp$0 = writeHoistablesForBoundary( + boundary, + boundary$70.contentState, + clientRenderedBoundaries.renderState + ); + } + if (!JSCompiler_inline_result$jscomp$0) { + request.destination = null; + i++; + partialBoundaries.splice(0, i); + return; + } + } + partialBoundaries.splice(0, i); + flushingPartialBoundaries = !1; + var largeBoundaries = request.completedBoundaries; + for (i = 0; i < largeBoundaries.length; i++) + if (!flushCompletedBoundary(request, destination, largeBoundaries[i])) { + request.destination = null; + i++; + largeBoundaries.splice(0, i); + return; + } + largeBoundaries.splice(0, i); + } + } finally { + (flushingPartialBoundaries = !1), + 0 === request.allPendingTasks && + 0 === request.clientRenderedBoundaries.length && + 0 === request.completedBoundaries.length + ? ((request.flushScheduled = !1), + (i = request.resumableState), + i.hasBody && writeChunk(destination, endChunkForTag("body")), + i.hasHtml && writeChunk(destination, endChunkForTag("html")), + completeWriting(destination), + (request.status = 14), + destination.close(), + (request.destination = null)) + : completeWriting(destination); + } +} +function startWork(request) { + request.flushScheduled = null !== request.destination; + scheduleMicrotask(function () { + return performWork(request); + }); + scheduleWork(function () { + 10 === request.status && (request.status = 11); + null === request.trackedPostpones && + safelyEmitEarlyPreloads(request, 0 === request.pendingRootTasks); + }); +} +function enqueueFlush(request) { + !1 === request.flushScheduled && + 0 === request.pingedTasks.length && + null !== request.destination && + ((request.flushScheduled = !0), + scheduleWork(function () { + var destination = request.destination; + destination + ? flushCompletedQueues(request, destination) + : (request.flushScheduled = !1); + })); +} +function startFlowing(request, destination) { + if (13 === request.status) + (request.status = 14), closeWithError(destination, request.fatalError); + else if (14 !== request.status && null === request.destination) { + request.destination = destination; + try { + flushCompletedQueues(request, destination); + } catch (error) { + logRecoverableError(request, error, {}), fatalError(request, error); + } + } +} +function abort(request, reason) { + if (11 === request.status || 10 === request.status) request.status = 12; + try { + var abortableTasks = request.abortableTasks; + if (0 < abortableTasks.size) { + var error = + void 0 === reason + ? Error(formatProdErrorMessage(432)) + : "object" === typeof reason && + null !== reason && + "function" === typeof reason.then + ? Error(formatProdErrorMessage(530)) + : reason; + request.fatalError = error; + abortableTasks.forEach(function (task) { + return abortTask(task, request, error); + }); + abortableTasks.clear(); + } + null !== request.destination && + flushCompletedQueues(request, request.destination); + } catch (error$72) { + logRecoverableError(request, error$72, {}), fatalError(request, error$72); + } +} +function addToReplayParent(node, parentKeyPath, trackedPostpones) { + if (null === parentKeyPath) trackedPostpones.rootNodes.push(node); + else { + var workingMap = trackedPostpones.workingMap, + parentNode = workingMap.get(parentKeyPath); + void 0 === parentNode && + ((parentNode = [parentKeyPath[1], parentKeyPath[2], [], null]), + workingMap.set(parentKeyPath, parentNode), + addToReplayParent(parentNode, parentKeyPath[0], trackedPostpones)); + parentNode[2].push(node); + } +} +function getPostponedState(request) { + var trackedPostpones = request.trackedPostpones; + if ( + null === trackedPostpones || + (0 === trackedPostpones.rootNodes.length && + null === trackedPostpones.rootSlots) + ) + return (request.trackedPostpones = null); + if ( + null === request.completedRootSegment || + (5 !== request.completedRootSegment.status && + null !== request.completedPreambleSegments) + ) { + var nextSegmentId = request.nextSegmentId; + var replaySlots = trackedPostpones.rootSlots; + var resumableState = request.resumableState; + resumableState.bootstrapScriptContent = void 0; + resumableState.bootstrapScripts = void 0; + resumableState.bootstrapModules = void 0; + } else { + nextSegmentId = 0; + replaySlots = -1; + resumableState = request.resumableState; + var renderState = request.renderState; + resumableState.nextFormID = 0; + resumableState.hasBody = !1; + resumableState.hasHtml = !1; + resumableState.unknownResources = { font: renderState.resets.font }; + resumableState.dnsResources = renderState.resets.dns; + resumableState.connectResources = renderState.resets.connect; + resumableState.imageResources = renderState.resets.image; + resumableState.styleResources = renderState.resets.style; + resumableState.scriptResources = {}; + resumableState.moduleUnknownResources = {}; + resumableState.moduleScriptResources = {}; + resumableState.instructions = 0; + } + return { + nextSegmentId: nextSegmentId, + rootFormatContext: request.rootFormatContext, + progressiveChunkSize: request.progressiveChunkSize, + resumableState: request.resumableState, + replayNodes: trackedPostpones.rootNodes, + replaySlots: replaySlots + }; +} +function ensureCorrectIsomorphicReactVersion() { + var isomorphicReactPackageVersion = React.version; + if ("19.2.4" !== isomorphicReactPackageVersion) + throw Error( + formatProdErrorMessage( + 527, + isomorphicReactPackageVersion, + "19.2.4" + ) + ); +} +ensureCorrectIsomorphicReactVersion(); +ensureCorrectIsomorphicReactVersion(); +exports.prerender = function (children, options) { + return new Promise(function (resolve, reject) { + var onHeaders = options ? options.onHeaders : void 0, + onHeadersImpl; + onHeaders && + (onHeadersImpl = function (headersDescriptor) { + onHeaders(new Headers(headersDescriptor)); + }); + var resources = createResumableState( + options ? options.identifierPrefix : void 0, + options ? options.unstable_externalRuntimeSrc : void 0, + options ? options.bootstrapScriptContent : void 0, + options ? options.bootstrapScripts : void 0, + options ? options.bootstrapModules : void 0 + ), + request = createPrerenderRequest( + children, + resources, + createRenderState( + resources, + void 0, + options ? options.unstable_externalRuntimeSrc : void 0, + options ? options.importMap : void 0, + onHeadersImpl, + options ? options.maxHeadersLength : void 0 + ), + createRootFormatContext(options ? options.namespaceURI : void 0), + options ? options.progressiveChunkSize : void 0, + options ? options.onError : void 0, + function () { + var stream = new ReadableStream( + { + type: "bytes", + pull: function (controller) { + startFlowing(request, controller); + }, + cancel: function (reason) { + request.destination = null; + abort(request, reason); + } + }, + { highWaterMark: 0 } + ); + stream = { postponed: getPostponedState(request), prelude: stream }; + resolve(stream); + }, + void 0, + void 0, + reject, + options ? options.onPostpone : void 0 + ); + if (options && options.signal) { + var signal = options.signal; + if (signal.aborted) abort(request, signal.reason); + else { + var listener = function () { + abort(request, signal.reason); + signal.removeEventListener("abort", listener); + }; + signal.addEventListener("abort", listener); + } + } + startWork(request); + }); +}; +exports.renderToReadableStream = function (children, options) { + return new Promise(function (resolve, reject) { + var onFatalError, + onAllReady, + allReady = new Promise(function (res, rej) { + onAllReady = res; + onFatalError = rej; + }), + onHeaders = options ? options.onHeaders : void 0, + onHeadersImpl; + onHeaders && + (onHeadersImpl = function (headersDescriptor) { + onHeaders(new Headers(headersDescriptor)); + }); + var resumableState = createResumableState( + options ? options.identifierPrefix : void 0, + options ? options.unstable_externalRuntimeSrc : void 0, + options ? options.bootstrapScriptContent : void 0, + options ? options.bootstrapScripts : void 0, + options ? options.bootstrapModules : void 0 + ), + request = createRequest( + children, + resumableState, + createRenderState( + resumableState, + options ? options.nonce : void 0, + options ? options.unstable_externalRuntimeSrc : void 0, + options ? options.importMap : void 0, + onHeadersImpl, + options ? options.maxHeadersLength : void 0 + ), + createRootFormatContext(options ? options.namespaceURI : void 0), + options ? options.progressiveChunkSize : void 0, + options ? options.onError : void 0, + onAllReady, + function () { + var stream = new ReadableStream( + { + type: "bytes", + pull: function (controller) { + startFlowing(request, controller); + }, + cancel: function (reason) { + request.destination = null; + abort(request, reason); + } + }, + { highWaterMark: 0 } + ); + stream.allReady = allReady; + resolve(stream); + }, + function (error) { + allReady.catch(function () {}); + reject(error); + }, + onFatalError, + options ? options.onPostpone : void 0, + options ? options.formState : void 0 + ); + if (options && options.signal) { + var signal = options.signal; + if (signal.aborted) abort(request, signal.reason); + else { + var listener = function () { + abort(request, signal.reason); + signal.removeEventListener("abort", listener); + }; + signal.addEventListener("abort", listener); + } + } + startWork(request); + }); +}; +exports.resume = function (children, postponedState, options) { + return new Promise(function (resolve, reject) { + var onFatalError, + onAllReady, + allReady = new Promise(function (res, rej) { + onAllReady = res; + onFatalError = rej; + }), + request = resumeRequest( + children, + postponedState, + createRenderState( + postponedState.resumableState, + options ? options.nonce : void 0, + void 0, + void 0, + void 0, + void 0 + ), + options ? options.onError : void 0, + onAllReady, + function () { + var stream = new ReadableStream( + { + type: "bytes", + pull: function (controller) { + startFlowing(request, controller); + }, + cancel: function (reason) { + request.destination = null; + abort(request, reason); + } + }, + { highWaterMark: 0 } + ); + stream.allReady = allReady; + resolve(stream); + }, + function (error) { + allReady.catch(function () {}); + reject(error); + }, + onFatalError, + options ? options.onPostpone : void 0 + ); + if (options && options.signal) { + var signal = options.signal; + if (signal.aborted) abort(request, signal.reason); + else { + var listener = function () { + abort(request, signal.reason); + signal.removeEventListener("abort", listener); + }; + signal.addEventListener("abort", listener); + } + } + startWork(request); + }); +}; +exports.resumeAndPrerender = function (children, postponedState, options) { + return new Promise(function (resolve, reject) { + var request = resumeAndPrerenderRequest( + children, + postponedState, + createRenderState( + postponedState.resumableState, + void 0, + void 0, + void 0, + void 0, + void 0 + ), + options ? options.onError : void 0, + function () { + var stream = new ReadableStream( + { + type: "bytes", + pull: function (controller) { + startFlowing(request, controller); + }, + cancel: function (reason) { + request.destination = null; + abort(request, reason); + } + }, + { highWaterMark: 0 } + ); + stream = { postponed: getPostponedState(request), prelude: stream }; + resolve(stream); + }, + void 0, + void 0, + reject, + options ? options.onPostpone : void 0 + ); + if (options && options.signal) { + var signal = options.signal; + if (signal.aborted) abort(request, signal.reason); + else { + var listener = function () { + abort(request, signal.reason); + signal.removeEventListener("abort", listener); + }; + signal.addEventListener("abort", listener); + } + } + startWork(request); + }); +}; +exports.version = "19.2.4"; diff --git a/build/node_modules/react-dom/cjs/react-dom-server.edge.production.js b/build/node_modules/react-dom/cjs/react-dom-server.edge.production.js new file mode 100644 index 0000000..9f755e8 --- /dev/null +++ b/build/node_modules/react-dom/cjs/react-dom-server.edge.production.js @@ -0,0 +1,7512 @@ +/** + * @license React + * react-dom-server.edge.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/* + + + JS Implementation of MurmurHash3 (r136) (as of May 20, 2011) + + Copyright (c) 2011 Gary Court + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +*/ +"use strict"; +var React = require("react"), + ReactDOM = require("react-dom"), + REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), + REACT_PORTAL_TYPE = Symbol.for("react.portal"), + REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), + REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), + REACT_PROFILER_TYPE = Symbol.for("react.profiler"), + REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), + REACT_CONTEXT_TYPE = Symbol.for("react.context"), + REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), + REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), + REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), + REACT_MEMO_TYPE = Symbol.for("react.memo"), + REACT_LAZY_TYPE = Symbol.for("react.lazy"), + REACT_SCOPE_TYPE = Symbol.for("react.scope"), + REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), + REACT_LEGACY_HIDDEN_TYPE = Symbol.for("react.legacy_hidden"), + REACT_MEMO_CACHE_SENTINEL = Symbol.for("react.memo_cache_sentinel"), + REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"), + MAYBE_ITERATOR_SYMBOL = Symbol.iterator; +function getIteratorFn(maybeIterable) { + if (null === maybeIterable || "object" !== typeof maybeIterable) return null; + maybeIterable = + (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) || + maybeIterable["@@iterator"]; + return "function" === typeof maybeIterable ? maybeIterable : null; +} +var isArrayImpl = Array.isArray; +function murmurhash3_32_gc(key, seed) { + var remainder = key.length & 3; + var bytes = key.length - remainder; + var h1 = seed; + for (seed = 0; seed < bytes; ) { + var k1 = + (key.charCodeAt(seed) & 255) | + ((key.charCodeAt(++seed) & 255) << 8) | + ((key.charCodeAt(++seed) & 255) << 16) | + ((key.charCodeAt(++seed) & 255) << 24); + ++seed; + k1 = + (3432918353 * (k1 & 65535) + + (((3432918353 * (k1 >>> 16)) & 65535) << 16)) & + 4294967295; + k1 = (k1 << 15) | (k1 >>> 17); + k1 = + (461845907 * (k1 & 65535) + (((461845907 * (k1 >>> 16)) & 65535) << 16)) & + 4294967295; + h1 ^= k1; + h1 = (h1 << 13) | (h1 >>> 19); + h1 = (5 * (h1 & 65535) + (((5 * (h1 >>> 16)) & 65535) << 16)) & 4294967295; + h1 = (h1 & 65535) + 27492 + ((((h1 >>> 16) + 58964) & 65535) << 16); + } + k1 = 0; + switch (remainder) { + case 3: + k1 ^= (key.charCodeAt(seed + 2) & 255) << 16; + case 2: + k1 ^= (key.charCodeAt(seed + 1) & 255) << 8; + case 1: + (k1 ^= key.charCodeAt(seed) & 255), + (k1 = + (3432918353 * (k1 & 65535) + + (((3432918353 * (k1 >>> 16)) & 65535) << 16)) & + 4294967295), + (k1 = (k1 << 15) | (k1 >>> 17)), + (h1 ^= + (461845907 * (k1 & 65535) + + (((461845907 * (k1 >>> 16)) & 65535) << 16)) & + 4294967295); + } + h1 ^= key.length; + h1 ^= h1 >>> 16; + h1 = + (2246822507 * (h1 & 65535) + (((2246822507 * (h1 >>> 16)) & 65535) << 16)) & + 4294967295; + h1 ^= h1 >>> 13; + h1 = + (3266489909 * (h1 & 65535) + (((3266489909 * (h1 >>> 16)) & 65535) << 16)) & + 4294967295; + return (h1 ^ (h1 >>> 16)) >>> 0; +} +function handleErrorInNextTick(error) { + setTimeout(function () { + throw error; + }); +} +var LocalPromise = Promise, + scheduleMicrotask = + "function" === typeof queueMicrotask + ? queueMicrotask + : function (callback) { + LocalPromise.resolve(null) + .then(callback) + .catch(handleErrorInNextTick); + }, + currentView = null, + writtenBytes = 0; +function writeChunk(destination, chunk) { + if (0 !== chunk.byteLength) + if (2048 < chunk.byteLength) + 0 < writtenBytes && + (destination.enqueue( + new Uint8Array(currentView.buffer, 0, writtenBytes) + ), + (currentView = new Uint8Array(2048)), + (writtenBytes = 0)), + destination.enqueue(chunk); + else { + var allowableBytes = currentView.length - writtenBytes; + allowableBytes < chunk.byteLength && + (0 === allowableBytes + ? destination.enqueue(currentView) + : (currentView.set(chunk.subarray(0, allowableBytes), writtenBytes), + destination.enqueue(currentView), + (chunk = chunk.subarray(allowableBytes))), + (currentView = new Uint8Array(2048)), + (writtenBytes = 0)); + currentView.set(chunk, writtenBytes); + writtenBytes += chunk.byteLength; + } +} +function writeChunkAndReturn(destination, chunk) { + writeChunk(destination, chunk); + return !0; +} +function completeWriting(destination) { + currentView && + 0 < writtenBytes && + (destination.enqueue(new Uint8Array(currentView.buffer, 0, writtenBytes)), + (currentView = null), + (writtenBytes = 0)); +} +var textEncoder = new TextEncoder(); +function stringToChunk(content) { + return textEncoder.encode(content); +} +function stringToPrecomputedChunk(content) { + return textEncoder.encode(content); +} +function byteLengthOfChunk(chunk) { + return chunk.byteLength; +} +function closeWithError(destination, error) { + "function" === typeof destination.error + ? destination.error(error) + : destination.close(); +} +var assign = Object.assign, + hasOwnProperty = Object.prototype.hasOwnProperty, + VALID_ATTRIBUTE_NAME_REGEX = RegExp( + "^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$" + ), + illegalAttributeNameCache = {}, + validatedAttributeNameCache = {}; +function isAttributeNameSafe(attributeName) { + if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) + return !0; + if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1; + if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) + return (validatedAttributeNameCache[attributeName] = !0); + illegalAttributeNameCache[attributeName] = !0; + return !1; +} +var unitlessNumbers = new Set( + "animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split( + " " + ) + ), + aliases = new Map([ + ["acceptCharset", "accept-charset"], + ["htmlFor", "for"], + ["httpEquiv", "http-equiv"], + ["crossOrigin", "crossorigin"], + ["accentHeight", "accent-height"], + ["alignmentBaseline", "alignment-baseline"], + ["arabicForm", "arabic-form"], + ["baselineShift", "baseline-shift"], + ["capHeight", "cap-height"], + ["clipPath", "clip-path"], + ["clipRule", "clip-rule"], + ["colorInterpolation", "color-interpolation"], + ["colorInterpolationFilters", "color-interpolation-filters"], + ["colorProfile", "color-profile"], + ["colorRendering", "color-rendering"], + ["dominantBaseline", "dominant-baseline"], + ["enableBackground", "enable-background"], + ["fillOpacity", "fill-opacity"], + ["fillRule", "fill-rule"], + ["floodColor", "flood-color"], + ["floodOpacity", "flood-opacity"], + ["fontFamily", "font-family"], + ["fontSize", "font-size"], + ["fontSizeAdjust", "font-size-adjust"], + ["fontStretch", "font-stretch"], + ["fontStyle", "font-style"], + ["fontVariant", "font-variant"], + ["fontWeight", "font-weight"], + ["glyphName", "glyph-name"], + ["glyphOrientationHorizontal", "glyph-orientation-horizontal"], + ["glyphOrientationVertical", "glyph-orientation-vertical"], + ["horizAdvX", "horiz-adv-x"], + ["horizOriginX", "horiz-origin-x"], + ["imageRendering", "image-rendering"], + ["letterSpacing", "letter-spacing"], + ["lightingColor", "lighting-color"], + ["markerEnd", "marker-end"], + ["markerMid", "marker-mid"], + ["markerStart", "marker-start"], + ["overlinePosition", "overline-position"], + ["overlineThickness", "overline-thickness"], + ["paintOrder", "paint-order"], + ["panose-1", "panose-1"], + ["pointerEvents", "pointer-events"], + ["renderingIntent", "rendering-intent"], + ["shapeRendering", "shape-rendering"], + ["stopColor", "stop-color"], + ["stopOpacity", "stop-opacity"], + ["strikethroughPosition", "strikethrough-position"], + ["strikethroughThickness", "strikethrough-thickness"], + ["strokeDasharray", "stroke-dasharray"], + ["strokeDashoffset", "stroke-dashoffset"], + ["strokeLinecap", "stroke-linecap"], + ["strokeLinejoin", "stroke-linejoin"], + ["strokeMiterlimit", "stroke-miterlimit"], + ["strokeOpacity", "stroke-opacity"], + ["strokeWidth", "stroke-width"], + ["textAnchor", "text-anchor"], + ["textDecoration", "text-decoration"], + ["textRendering", "text-rendering"], + ["transformOrigin", "transform-origin"], + ["underlinePosition", "underline-position"], + ["underlineThickness", "underline-thickness"], + ["unicodeBidi", "unicode-bidi"], + ["unicodeRange", "unicode-range"], + ["unitsPerEm", "units-per-em"], + ["vAlphabetic", "v-alphabetic"], + ["vHanging", "v-hanging"], + ["vIdeographic", "v-ideographic"], + ["vMathematical", "v-mathematical"], + ["vectorEffect", "vector-effect"], + ["vertAdvY", "vert-adv-y"], + ["vertOriginX", "vert-origin-x"], + ["vertOriginY", "vert-origin-y"], + ["wordSpacing", "word-spacing"], + ["writingMode", "writing-mode"], + ["xmlnsXlink", "xmlns:xlink"], + ["xHeight", "x-height"] + ]), + matchHtmlRegExp = /["'&<>]/; +function escapeTextForBrowser(text) { + if ( + "boolean" === typeof text || + "number" === typeof text || + "bigint" === typeof text + ) + return "" + text; + text = "" + text; + var match = matchHtmlRegExp.exec(text); + if (match) { + var html = "", + index, + lastIndex = 0; + for (index = match.index; index < text.length; index++) { + switch (text.charCodeAt(index)) { + case 34: + match = """; + break; + case 38: + match = "&"; + break; + case 39: + match = "'"; + break; + case 60: + match = "<"; + break; + case 62: + match = ">"; + break; + default: + continue; + } + lastIndex !== index && (html += text.slice(lastIndex, index)); + lastIndex = index + 1; + html += match; + } + text = lastIndex !== index ? html + text.slice(lastIndex, index) : html; + } + return text; +} +var uppercasePattern = /([A-Z])/g, + msPattern = /^ms-/, + isJavaScriptProtocol = + /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i; +function sanitizeURL(url) { + return isJavaScriptProtocol.test("" + url) + ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')" + : url; +} +var ReactSharedInternals = + React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, + ReactDOMSharedInternals = + ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, + sharedNotPendingObject = { + pending: !1, + data: null, + method: null, + action: null + }, + previousDispatcher = ReactDOMSharedInternals.d; +ReactDOMSharedInternals.d = { + f: previousDispatcher.f, + r: previousDispatcher.r, + D: prefetchDNS, + C: preconnect, + L: preload, + m: preloadModule, + X: preinitScript, + S: preinitStyle, + M: preinitModuleScript +}; +var PRELOAD_NO_CREDS = [], + currentlyFlushingRenderState = null; +stringToPrecomputedChunk('"></template>'); +var startInlineScript = stringToPrecomputedChunk("<script"), + endInlineScript = stringToPrecomputedChunk("\x3c/script>"), + startScriptSrc = stringToPrecomputedChunk('<script src="'), + startModuleSrc = stringToPrecomputedChunk('<script type="module" src="'), + scriptNonce = stringToPrecomputedChunk(' nonce="'), + scriptIntegirty = stringToPrecomputedChunk(' integrity="'), + scriptCrossOrigin = stringToPrecomputedChunk(' crossorigin="'), + endAsyncScript = stringToPrecomputedChunk(' async="">\x3c/script>'), + startInlineStyle = stringToPrecomputedChunk("<style"), + scriptRegex = /(<\/|<)(s)(cript)/gi; +function scriptReplacer(match, prefix, s, suffix) { + return "" + prefix + ("s" === s ? "\\u0073" : "\\u0053") + suffix; +} +var importMapScriptStart = stringToPrecomputedChunk( + '<script type="importmap">' + ), + importMapScriptEnd = stringToPrecomputedChunk("\x3c/script>"); +function createRenderState( + resumableState, + nonce, + externalRuntimeConfig, + importMap, + onHeaders, + maxHeadersLength +) { + externalRuntimeConfig = + "string" === typeof nonce ? nonce : nonce && nonce.script; + var inlineScriptWithNonce = + void 0 === externalRuntimeConfig + ? startInlineScript + : stringToPrecomputedChunk( + '<script nonce="' + + escapeTextForBrowser(externalRuntimeConfig) + + '"' + ), + nonceStyle = "string" === typeof nonce ? void 0 : nonce && nonce.style, + inlineStyleWithNonce = + void 0 === nonceStyle + ? startInlineStyle + : stringToPrecomputedChunk( + '<style nonce="' + escapeTextForBrowser(nonceStyle) + '"' + ), + idPrefix = resumableState.idPrefix, + bootstrapChunks = [], + bootstrapScriptContent = resumableState.bootstrapScriptContent, + bootstrapScripts = resumableState.bootstrapScripts, + bootstrapModules = resumableState.bootstrapModules; + void 0 !== bootstrapScriptContent && + (bootstrapChunks.push(inlineScriptWithNonce), + pushCompletedShellIdAttribute(bootstrapChunks, resumableState), + bootstrapChunks.push( + endOfStartTag, + stringToChunk( + ("" + bootstrapScriptContent).replace(scriptRegex, scriptReplacer) + ), + endInlineScript + )); + bootstrapScriptContent = []; + void 0 !== importMap && + (bootstrapScriptContent.push(importMapScriptStart), + bootstrapScriptContent.push( + stringToChunk( + ("" + JSON.stringify(importMap)).replace(scriptRegex, scriptReplacer) + ) + ), + bootstrapScriptContent.push(importMapScriptEnd)); + importMap = onHeaders + ? { + preconnects: "", + fontPreloads: "", + highImagePreloads: "", + remainingCapacity: + 2 + ("number" === typeof maxHeadersLength ? maxHeadersLength : 2e3) + } + : null; + onHeaders = { + placeholderPrefix: stringToPrecomputedChunk(idPrefix + "P:"), + segmentPrefix: stringToPrecomputedChunk(idPrefix + "S:"), + boundaryPrefix: stringToPrecomputedChunk(idPrefix + "B:"), + startInlineScript: inlineScriptWithNonce, + startInlineStyle: inlineStyleWithNonce, + preamble: createPreambleState(), + externalRuntimeScript: null, + bootstrapChunks: bootstrapChunks, + importMapChunks: bootstrapScriptContent, + onHeaders: onHeaders, + headers: importMap, + resets: { + font: {}, + dns: {}, + connect: { default: {}, anonymous: {}, credentials: {} }, + image: {}, + style: {} + }, + charsetChunks: [], + viewportChunks: [], + hoistableChunks: [], + preconnects: new Set(), + fontPreloads: new Set(), + highImagePreloads: new Set(), + styles: new Map(), + bootstrapScripts: new Set(), + scripts: new Set(), + bulkPreloads: new Set(), + preloads: { + images: new Map(), + stylesheets: new Map(), + scripts: new Map(), + moduleScripts: new Map() + }, + nonce: { script: externalRuntimeConfig, style: nonceStyle }, + hoistableState: null, + stylesToHoist: !1 + }; + if (void 0 !== bootstrapScripts) + for (importMap = 0; importMap < bootstrapScripts.length; importMap++) + (idPrefix = bootstrapScripts[importMap]), + (nonceStyle = inlineScriptWithNonce = void 0), + (inlineStyleWithNonce = { + rel: "preload", + as: "script", + fetchPriority: "low", + nonce: nonce + }), + "string" === typeof idPrefix + ? (inlineStyleWithNonce.href = maxHeadersLength = idPrefix) + : ((inlineStyleWithNonce.href = maxHeadersLength = idPrefix.src), + (inlineStyleWithNonce.integrity = nonceStyle = + "string" === typeof idPrefix.integrity + ? idPrefix.integrity + : void 0), + (inlineStyleWithNonce.crossOrigin = inlineScriptWithNonce = + "string" === typeof idPrefix || null == idPrefix.crossOrigin + ? void 0 + : "use-credentials" === idPrefix.crossOrigin + ? "use-credentials" + : "")), + (idPrefix = resumableState), + (bootstrapScriptContent = maxHeadersLength), + (idPrefix.scriptResources[bootstrapScriptContent] = null), + (idPrefix.moduleScriptResources[bootstrapScriptContent] = null), + (idPrefix = []), + pushLinkImpl(idPrefix, inlineStyleWithNonce), + onHeaders.bootstrapScripts.add(idPrefix), + bootstrapChunks.push( + startScriptSrc, + stringToChunk(escapeTextForBrowser(maxHeadersLength)), + attributeEnd + ), + externalRuntimeConfig && + bootstrapChunks.push( + scriptNonce, + stringToChunk(escapeTextForBrowser(externalRuntimeConfig)), + attributeEnd + ), + "string" === typeof nonceStyle && + bootstrapChunks.push( + scriptIntegirty, + stringToChunk(escapeTextForBrowser(nonceStyle)), + attributeEnd + ), + "string" === typeof inlineScriptWithNonce && + bootstrapChunks.push( + scriptCrossOrigin, + stringToChunk(escapeTextForBrowser(inlineScriptWithNonce)), + attributeEnd + ), + pushCompletedShellIdAttribute(bootstrapChunks, resumableState), + bootstrapChunks.push(endAsyncScript); + if (void 0 !== bootstrapModules) + for (nonce = 0; nonce < bootstrapModules.length; nonce++) + (nonceStyle = bootstrapModules[nonce]), + (maxHeadersLength = importMap = void 0), + (inlineScriptWithNonce = { + rel: "modulepreload", + fetchPriority: "low", + nonce: externalRuntimeConfig + }), + "string" === typeof nonceStyle + ? (inlineScriptWithNonce.href = bootstrapScripts = nonceStyle) + : ((inlineScriptWithNonce.href = bootstrapScripts = nonceStyle.src), + (inlineScriptWithNonce.integrity = maxHeadersLength = + "string" === typeof nonceStyle.integrity + ? nonceStyle.integrity + : void 0), + (inlineScriptWithNonce.crossOrigin = importMap = + "string" === typeof nonceStyle || null == nonceStyle.crossOrigin + ? void 0 + : "use-credentials" === nonceStyle.crossOrigin + ? "use-credentials" + : "")), + (nonceStyle = resumableState), + (inlineStyleWithNonce = bootstrapScripts), + (nonceStyle.scriptResources[inlineStyleWithNonce] = null), + (nonceStyle.moduleScriptResources[inlineStyleWithNonce] = null), + (nonceStyle = []), + pushLinkImpl(nonceStyle, inlineScriptWithNonce), + onHeaders.bootstrapScripts.add(nonceStyle), + bootstrapChunks.push( + startModuleSrc, + stringToChunk(escapeTextForBrowser(bootstrapScripts)), + attributeEnd + ), + externalRuntimeConfig && + bootstrapChunks.push( + scriptNonce, + stringToChunk(escapeTextForBrowser(externalRuntimeConfig)), + attributeEnd + ), + "string" === typeof maxHeadersLength && + bootstrapChunks.push( + scriptIntegirty, + stringToChunk(escapeTextForBrowser(maxHeadersLength)), + attributeEnd + ), + "string" === typeof importMap && + bootstrapChunks.push( + scriptCrossOrigin, + stringToChunk(escapeTextForBrowser(importMap)), + attributeEnd + ), + pushCompletedShellIdAttribute(bootstrapChunks, resumableState), + bootstrapChunks.push(endAsyncScript); + return onHeaders; +} +function createResumableState( + identifierPrefix, + externalRuntimeConfig, + bootstrapScriptContent, + bootstrapScripts, + bootstrapModules +) { + return { + idPrefix: void 0 === identifierPrefix ? "" : identifierPrefix, + nextFormID: 0, + streamingFormat: 0, + bootstrapScriptContent: bootstrapScriptContent, + bootstrapScripts: bootstrapScripts, + bootstrapModules: bootstrapModules, + instructions: 0, + hasBody: !1, + hasHtml: !1, + unknownResources: {}, + dnsResources: {}, + connectResources: { default: {}, anonymous: {}, credentials: {} }, + imageResources: {}, + styleResources: {}, + scriptResources: {}, + moduleUnknownResources: {}, + moduleScriptResources: {} + }; +} +function createPreambleState() { + return { htmlChunks: null, headChunks: null, bodyChunks: null }; +} +function createFormatContext( + insertionMode, + selectedValue, + tagScope, + viewTransition +) { + return { + insertionMode: insertionMode, + selectedValue: selectedValue, + tagScope: tagScope, + viewTransition: viewTransition + }; +} +function createRootFormatContext(namespaceURI) { + return createFormatContext( + "http://www.w3.org/2000/svg" === namespaceURI + ? 4 + : "http://www.w3.org/1998/Math/MathML" === namespaceURI + ? 5 + : 0, + null, + 0, + null + ); +} +function getChildFormatContext(parentContext, type, props) { + var subtreeScope = parentContext.tagScope & -25; + switch (type) { + case "noscript": + return createFormatContext(2, null, subtreeScope | 1, null); + case "select": + return createFormatContext( + 2, + null != props.value ? props.value : props.defaultValue, + subtreeScope, + null + ); + case "svg": + return createFormatContext(4, null, subtreeScope, null); + case "picture": + return createFormatContext(2, null, subtreeScope | 2, null); + case "math": + return createFormatContext(5, null, subtreeScope, null); + case "foreignObject": + return createFormatContext(2, null, subtreeScope, null); + case "table": + return createFormatContext(6, null, subtreeScope, null); + case "thead": + case "tbody": + case "tfoot": + return createFormatContext(7, null, subtreeScope, null); + case "colgroup": + return createFormatContext(9, null, subtreeScope, null); + case "tr": + return createFormatContext(8, null, subtreeScope, null); + case "head": + if (2 > parentContext.insertionMode) + return createFormatContext(3, null, subtreeScope, null); + break; + case "html": + if (0 === parentContext.insertionMode) + return createFormatContext(1, null, subtreeScope, null); + } + return 6 <= parentContext.insertionMode || 2 > parentContext.insertionMode + ? createFormatContext(2, null, subtreeScope, null) + : parentContext.tagScope !== subtreeScope + ? createFormatContext( + parentContext.insertionMode, + parentContext.selectedValue, + subtreeScope, + null + ) + : parentContext; +} +function getSuspenseViewTransition(parentViewTransition) { + return null === parentViewTransition + ? null + : { + update: parentViewTransition.update, + enter: "none", + exit: "none", + share: parentViewTransition.update, + name: parentViewTransition.autoName, + autoName: parentViewTransition.autoName, + nameIdx: 0 + }; +} +function getSuspenseFallbackFormatContext(resumableState, parentContext) { + parentContext.tagScope & 32 && (resumableState.instructions |= 128); + return createFormatContext( + parentContext.insertionMode, + parentContext.selectedValue, + parentContext.tagScope | 12, + getSuspenseViewTransition(parentContext.viewTransition) + ); +} +function getSuspenseContentFormatContext(resumableState, parentContext) { + resumableState = getSuspenseViewTransition(parentContext.viewTransition); + var subtreeScope = parentContext.tagScope | 16; + null !== resumableState && + "none" !== resumableState.share && + (subtreeScope |= 64); + return createFormatContext( + parentContext.insertionMode, + parentContext.selectedValue, + subtreeScope, + resumableState + ); +} +var textSeparator = stringToPrecomputedChunk("\x3c!-- --\x3e"); +function pushTextInstance(target, text, renderState, textEmbedded) { + if ("" === text) return textEmbedded; + textEmbedded && target.push(textSeparator); + target.push(stringToChunk(escapeTextForBrowser(text))); + return !0; +} +var styleNameCache = new Map(), + styleAttributeStart = stringToPrecomputedChunk(' style="'), + styleAssign = stringToPrecomputedChunk(":"), + styleSeparator = stringToPrecomputedChunk(";"); +function pushStyleAttribute(target, style) { + if ("object" !== typeof style) + throw Error( + "The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX." + ); + var isFirst = !0, + styleName; + for (styleName in style) + if (hasOwnProperty.call(style, styleName)) { + var styleValue = style[styleName]; + if ( + null != styleValue && + "boolean" !== typeof styleValue && + "" !== styleValue + ) { + if (0 === styleName.indexOf("--")) { + var nameChunk = stringToChunk(escapeTextForBrowser(styleName)); + styleValue = stringToChunk( + escapeTextForBrowser(("" + styleValue).trim()) + ); + } else + (nameChunk = styleNameCache.get(styleName)), + void 0 === nameChunk && + ((nameChunk = stringToPrecomputedChunk( + escapeTextForBrowser( + styleName + .replace(uppercasePattern, "-$1") + .toLowerCase() + .replace(msPattern, "-ms-") + ) + )), + styleNameCache.set(styleName, nameChunk)), + (styleValue = + "number" === typeof styleValue + ? 0 === styleValue || unitlessNumbers.has(styleName) + ? stringToChunk("" + styleValue) + : stringToChunk(styleValue + "px") + : stringToChunk( + escapeTextForBrowser(("" + styleValue).trim()) + )); + isFirst + ? ((isFirst = !1), + target.push( + styleAttributeStart, + nameChunk, + styleAssign, + styleValue + )) + : target.push(styleSeparator, nameChunk, styleAssign, styleValue); + } + } + isFirst || target.push(attributeEnd); +} +var attributeSeparator = stringToPrecomputedChunk(" "), + attributeAssign = stringToPrecomputedChunk('="'), + attributeEnd = stringToPrecomputedChunk('"'), + attributeEmptyString = stringToPrecomputedChunk('=""'); +function pushBooleanAttribute(target, name, value) { + value && + "function" !== typeof value && + "symbol" !== typeof value && + target.push(attributeSeparator, stringToChunk(name), attributeEmptyString); +} +function pushStringAttribute(target, name, value) { + "function" !== typeof value && + "symbol" !== typeof value && + "boolean" !== typeof value && + target.push( + attributeSeparator, + stringToChunk(name), + attributeAssign, + stringToChunk(escapeTextForBrowser(value)), + attributeEnd + ); +} +var actionJavaScriptURL = stringToPrecomputedChunk( + escapeTextForBrowser( + "javascript:throw new Error('React form unexpectedly submitted.')" + ) + ), + startHiddenInputChunk = stringToPrecomputedChunk('<input type="hidden"'); +function pushAdditionalFormField(value, key) { + this.push(startHiddenInputChunk); + validateAdditionalFormField(value); + pushStringAttribute(this, "name", key); + pushStringAttribute(this, "value", value); + this.push(endOfStartTagSelfClosing); +} +function validateAdditionalFormField(value) { + if ("string" !== typeof value) + throw Error( + "File/Blob fields are not yet supported in progressive forms. Will fallback to client hydration." + ); +} +function getCustomFormFields(resumableState, formAction) { + if ("function" === typeof formAction.$$FORM_ACTION) { + var id = resumableState.nextFormID++; + resumableState = resumableState.idPrefix + id; + try { + var customFields = formAction.$$FORM_ACTION(resumableState); + if (customFields) { + var formData = customFields.data; + null != formData && formData.forEach(validateAdditionalFormField); + } + return customFields; + } catch (x) { + if ("object" === typeof x && null !== x && "function" === typeof x.then) + throw x; + } + } + return null; +} +function pushFormActionAttribute( + target, + resumableState, + renderState, + formAction, + formEncType, + formMethod, + formTarget, + name +) { + var formData = null; + if ("function" === typeof formAction) { + var customFields = getCustomFormFields(resumableState, formAction); + null !== customFields + ? ((name = customFields.name), + (formAction = customFields.action || ""), + (formEncType = customFields.encType), + (formMethod = customFields.method), + (formTarget = customFields.target), + (formData = customFields.data)) + : (target.push( + attributeSeparator, + stringToChunk("formAction"), + attributeAssign, + actionJavaScriptURL, + attributeEnd + ), + (formTarget = formMethod = formEncType = formAction = name = null), + injectFormReplayingRuntime(resumableState, renderState)); + } + null != name && pushAttribute(target, "name", name); + null != formAction && pushAttribute(target, "formAction", formAction); + null != formEncType && pushAttribute(target, "formEncType", formEncType); + null != formMethod && pushAttribute(target, "formMethod", formMethod); + null != formTarget && pushAttribute(target, "formTarget", formTarget); + return formData; +} +function pushAttribute(target, name, value) { + switch (name) { + case "className": + pushStringAttribute(target, "class", value); + break; + case "tabIndex": + pushStringAttribute(target, "tabindex", value); + break; + case "dir": + case "role": + case "viewBox": + case "width": + case "height": + pushStringAttribute(target, name, value); + break; + case "style": + pushStyleAttribute(target, value); + break; + case "src": + case "href": + if ("" === value) break; + case "action": + case "formAction": + if ( + null == value || + "function" === typeof value || + "symbol" === typeof value || + "boolean" === typeof value + ) + break; + value = sanitizeURL("" + value); + target.push( + attributeSeparator, + stringToChunk(name), + attributeAssign, + stringToChunk(escapeTextForBrowser(value)), + attributeEnd + ); + break; + case "defaultValue": + case "defaultChecked": + case "innerHTML": + case "suppressContentEditableWarning": + case "suppressHydrationWarning": + case "ref": + break; + case "autoFocus": + case "multiple": + case "muted": + pushBooleanAttribute(target, name.toLowerCase(), value); + break; + case "xlinkHref": + if ( + "function" === typeof value || + "symbol" === typeof value || + "boolean" === typeof value + ) + break; + value = sanitizeURL("" + value); + target.push( + attributeSeparator, + stringToChunk("xlink:href"), + attributeAssign, + stringToChunk(escapeTextForBrowser(value)), + attributeEnd + ); + break; + case "contentEditable": + case "spellCheck": + case "draggable": + case "value": + case "autoReverse": + case "externalResourcesRequired": + case "focusable": + case "preserveAlpha": + "function" !== typeof value && + "symbol" !== typeof value && + target.push( + attributeSeparator, + stringToChunk(name), + attributeAssign, + stringToChunk(escapeTextForBrowser(value)), + attributeEnd + ); + break; + case "inert": + case "allowFullScreen": + case "async": + case "autoPlay": + case "controls": + case "default": + case "defer": + case "disabled": + case "disablePictureInPicture": + case "disableRemotePlayback": + case "formNoValidate": + case "hidden": + case "loop": + case "noModule": + case "noValidate": + case "open": + case "playsInline": + case "readOnly": + case "required": + case "reversed": + case "scoped": + case "seamless": + case "itemScope": + value && + "function" !== typeof value && + "symbol" !== typeof value && + target.push( + attributeSeparator, + stringToChunk(name), + attributeEmptyString + ); + break; + case "capture": + case "download": + !0 === value + ? target.push( + attributeSeparator, + stringToChunk(name), + attributeEmptyString + ) + : !1 !== value && + "function" !== typeof value && + "symbol" !== typeof value && + target.push( + attributeSeparator, + stringToChunk(name), + attributeAssign, + stringToChunk(escapeTextForBrowser(value)), + attributeEnd + ); + break; + case "cols": + case "rows": + case "size": + case "span": + "function" !== typeof value && + "symbol" !== typeof value && + !isNaN(value) && + 1 <= value && + target.push( + attributeSeparator, + stringToChunk(name), + attributeAssign, + stringToChunk(escapeTextForBrowser(value)), + attributeEnd + ); + break; + case "rowSpan": + case "start": + "function" === typeof value || + "symbol" === typeof value || + isNaN(value) || + target.push( + attributeSeparator, + stringToChunk(name), + attributeAssign, + stringToChunk(escapeTextForBrowser(value)), + attributeEnd + ); + break; + case "xlinkActuate": + pushStringAttribute(target, "xlink:actuate", value); + break; + case "xlinkArcrole": + pushStringAttribute(target, "xlink:arcrole", value); + break; + case "xlinkRole": + pushStringAttribute(target, "xlink:role", value); + break; + case "xlinkShow": + pushStringAttribute(target, "xlink:show", value); + break; + case "xlinkTitle": + pushStringAttribute(target, "xlink:title", value); + break; + case "xlinkType": + pushStringAttribute(target, "xlink:type", value); + break; + case "xmlBase": + pushStringAttribute(target, "xml:base", value); + break; + case "xmlLang": + pushStringAttribute(target, "xml:lang", value); + break; + case "xmlSpace": + pushStringAttribute(target, "xml:space", value); + break; + default: + if ( + !(2 < name.length) || + ("o" !== name[0] && "O" !== name[0]) || + ("n" !== name[1] && "N" !== name[1]) + ) + if (((name = aliases.get(name) || name), isAttributeNameSafe(name))) { + switch (typeof value) { + case "function": + case "symbol": + return; + case "boolean": + var prefix$8 = name.toLowerCase().slice(0, 5); + if ("data-" !== prefix$8 && "aria-" !== prefix$8) return; + } + target.push( + attributeSeparator, + stringToChunk(name), + attributeAssign, + stringToChunk(escapeTextForBrowser(value)), + attributeEnd + ); + } + } +} +var endOfStartTag = stringToPrecomputedChunk(">"), + endOfStartTagSelfClosing = stringToPrecomputedChunk("/>"); +function pushInnerHTML(target, innerHTML, children) { + if (null != innerHTML) { + if (null != children) + throw Error( + "Can only set one of `children` or `props.dangerouslySetInnerHTML`." + ); + if ("object" !== typeof innerHTML || !("__html" in innerHTML)) + throw Error( + "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information." + ); + innerHTML = innerHTML.__html; + null !== innerHTML && + void 0 !== innerHTML && + target.push(stringToChunk("" + innerHTML)); + } +} +function flattenOptionChildren(children) { + var content = ""; + React.Children.forEach(children, function (child) { + null != child && (content += child); + }); + return content; +} +var selectedMarkerAttribute = stringToPrecomputedChunk(' selected=""'), + formReplayingRuntimeScript = stringToPrecomputedChunk( + 'addEventListener("submit",function(a){if(!a.defaultPrevented){var c=a.target,d=a.submitter,e=c.action,b=d;if(d){var f=d.getAttribute("formAction");null!=f&&(e=f,b=null)}"javascript:throw new Error(\'React form unexpectedly submitted.\')"===e&&(a.preventDefault(),b?(a=document.createElement("input"),a.name=b.name,a.value=b.value,b.parentNode.insertBefore(a,b),b=new FormData(c),a.parentNode.removeChild(a)):b=new FormData(c),a=c.ownerDocument||c,(a.$$reactFormReplay=a.$$reactFormReplay||[]).push(c,d,b))}});' + ); +function injectFormReplayingRuntime(resumableState, renderState) { + if (0 === (resumableState.instructions & 16)) { + resumableState.instructions |= 16; + var preamble = renderState.preamble, + bootstrapChunks = renderState.bootstrapChunks; + (preamble.htmlChunks || preamble.headChunks) && 0 === bootstrapChunks.length + ? (bootstrapChunks.push(renderState.startInlineScript), + pushCompletedShellIdAttribute(bootstrapChunks, resumableState), + bootstrapChunks.push( + endOfStartTag, + formReplayingRuntimeScript, + endInlineScript + )) + : bootstrapChunks.unshift( + renderState.startInlineScript, + endOfStartTag, + formReplayingRuntimeScript, + endInlineScript + ); + } +} +var formStateMarkerIsMatching = stringToPrecomputedChunk("\x3c!--F!--\x3e"), + formStateMarkerIsNotMatching = stringToPrecomputedChunk("\x3c!--F--\x3e"); +function pushLinkImpl(target, props) { + target.push(startChunkForTag("link")); + for (var propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + case "dangerouslySetInnerHTML": + throw Error( + "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`." + ); + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(endOfStartTagSelfClosing); + return null; +} +var styleRegex = /(<\/|<)(s)(tyle)/gi; +function styleReplacer(match, prefix, s, suffix) { + return "" + prefix + ("s" === s ? "\\73 " : "\\53 ") + suffix; +} +function pushSelfClosing(target, props, tag) { + target.push(startChunkForTag(tag)); + for (var propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + case "dangerouslySetInnerHTML": + throw Error( + tag + + " is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`." + ); + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(endOfStartTagSelfClosing); + return null; +} +function pushTitleImpl(target, props) { + target.push(startChunkForTag("title")); + var children = null, + innerHTML = null, + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + children = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(endOfStartTag); + props = Array.isArray(children) + ? 2 > children.length + ? children[0] + : null + : children; + "function" !== typeof props && + "symbol" !== typeof props && + null !== props && + void 0 !== props && + target.push(stringToChunk(escapeTextForBrowser("" + props))); + pushInnerHTML(target, innerHTML, children); + target.push(endChunkForTag("title")); + return null; +} +var headPreambleContributionChunk = + stringToPrecomputedChunk("\x3c!--head--\x3e"), + bodyPreambleContributionChunk = stringToPrecomputedChunk("\x3c!--body--\x3e"), + htmlPreambleContributionChunk = stringToPrecomputedChunk("\x3c!--html--\x3e"); +function pushScriptImpl(target, props) { + target.push(startChunkForTag("script")); + var children = null, + innerHTML = null, + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + children = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(endOfStartTag); + pushInnerHTML(target, innerHTML, children); + "string" === typeof children && + target.push( + stringToChunk(("" + children).replace(scriptRegex, scriptReplacer)) + ); + target.push(endChunkForTag("script")); + return null; +} +function pushStartSingletonElement(target, props, tag) { + target.push(startChunkForTag(tag)); + var innerHTML = (tag = null), + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + tag = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(endOfStartTag); + pushInnerHTML(target, innerHTML, tag); + return tag; +} +function pushStartGenericElement(target, props, tag) { + target.push(startChunkForTag(tag)); + var innerHTML = (tag = null), + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + tag = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(endOfStartTag); + pushInnerHTML(target, innerHTML, tag); + return "string" === typeof tag + ? (target.push(stringToChunk(escapeTextForBrowser(tag))), null) + : tag; +} +var leadingNewline = stringToPrecomputedChunk("\n"), + VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/, + validatedTagCache = new Map(); +function startChunkForTag(tag) { + var tagStartChunk = validatedTagCache.get(tag); + if (void 0 === tagStartChunk) { + if (!VALID_TAG_REGEX.test(tag)) throw Error("Invalid tag: " + tag); + tagStartChunk = stringToPrecomputedChunk("<" + tag); + validatedTagCache.set(tag, tagStartChunk); + } + return tagStartChunk; +} +var doctypeChunk = stringToPrecomputedChunk("<!DOCTYPE html>"); +function pushStartInstance( + target$jscomp$0, + type, + props, + resumableState, + renderState, + preambleState, + hoistableState, + formatContext, + textEmbedded +) { + switch (type) { + case "div": + case "span": + case "svg": + case "path": + break; + case "a": + target$jscomp$0.push(startChunkForTag("a")); + var children = null, + innerHTML = null, + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + children = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + case "href": + "" === propValue + ? pushStringAttribute(target$jscomp$0, "href", "") + : pushAttribute(target$jscomp$0, propKey, propValue); + break; + default: + pushAttribute(target$jscomp$0, propKey, propValue); + } + } + target$jscomp$0.push(endOfStartTag); + pushInnerHTML(target$jscomp$0, innerHTML, children); + if ("string" === typeof children) { + target$jscomp$0.push(stringToChunk(escapeTextForBrowser(children))); + var JSCompiler_inline_result = null; + } else JSCompiler_inline_result = children; + return JSCompiler_inline_result; + case "g": + case "p": + case "li": + break; + case "select": + target$jscomp$0.push(startChunkForTag("select")); + var children$jscomp$0 = null, + innerHTML$jscomp$0 = null, + propKey$jscomp$0; + for (propKey$jscomp$0 in props) + if (hasOwnProperty.call(props, propKey$jscomp$0)) { + var propValue$jscomp$0 = props[propKey$jscomp$0]; + if (null != propValue$jscomp$0) + switch (propKey$jscomp$0) { + case "children": + children$jscomp$0 = propValue$jscomp$0; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$0 = propValue$jscomp$0; + break; + case "defaultValue": + case "value": + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$0, + propValue$jscomp$0 + ); + } + } + target$jscomp$0.push(endOfStartTag); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$0, children$jscomp$0); + return children$jscomp$0; + case "option": + var selectedValue = formatContext.selectedValue; + target$jscomp$0.push(startChunkForTag("option")); + var children$jscomp$1 = null, + value = null, + selected = null, + innerHTML$jscomp$1 = null, + propKey$jscomp$1; + for (propKey$jscomp$1 in props) + if (hasOwnProperty.call(props, propKey$jscomp$1)) { + var propValue$jscomp$1 = props[propKey$jscomp$1]; + if (null != propValue$jscomp$1) + switch (propKey$jscomp$1) { + case "children": + children$jscomp$1 = propValue$jscomp$1; + break; + case "selected": + selected = propValue$jscomp$1; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$1 = propValue$jscomp$1; + break; + case "value": + value = propValue$jscomp$1; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$1, + propValue$jscomp$1 + ); + } + } + if (null != selectedValue) { + var stringValue = + null !== value + ? "" + value + : flattenOptionChildren(children$jscomp$1); + if (isArrayImpl(selectedValue)) + for (var i = 0; i < selectedValue.length; i++) { + if ("" + selectedValue[i] === stringValue) { + target$jscomp$0.push(selectedMarkerAttribute); + break; + } + } + else + "" + selectedValue === stringValue && + target$jscomp$0.push(selectedMarkerAttribute); + } else selected && target$jscomp$0.push(selectedMarkerAttribute); + target$jscomp$0.push(endOfStartTag); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$1, children$jscomp$1); + return children$jscomp$1; + case "textarea": + target$jscomp$0.push(startChunkForTag("textarea")); + var value$jscomp$0 = null, + defaultValue = null, + children$jscomp$2 = null, + propKey$jscomp$2; + for (propKey$jscomp$2 in props) + if (hasOwnProperty.call(props, propKey$jscomp$2)) { + var propValue$jscomp$2 = props[propKey$jscomp$2]; + if (null != propValue$jscomp$2) + switch (propKey$jscomp$2) { + case "children": + children$jscomp$2 = propValue$jscomp$2; + break; + case "value": + value$jscomp$0 = propValue$jscomp$2; + break; + case "defaultValue": + defaultValue = propValue$jscomp$2; + break; + case "dangerouslySetInnerHTML": + throw Error( + "`dangerouslySetInnerHTML` does not make sense on <textarea>." + ); + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$2, + propValue$jscomp$2 + ); + } + } + null === value$jscomp$0 && + null !== defaultValue && + (value$jscomp$0 = defaultValue); + target$jscomp$0.push(endOfStartTag); + if (null != children$jscomp$2) { + if (null != value$jscomp$0) + throw Error( + "If you supply `defaultValue` on a <textarea>, do not pass children." + ); + if (isArrayImpl(children$jscomp$2)) { + if (1 < children$jscomp$2.length) + throw Error("<textarea> can only have at most one child."); + value$jscomp$0 = "" + children$jscomp$2[0]; + } + value$jscomp$0 = "" + children$jscomp$2; + } + "string" === typeof value$jscomp$0 && + "\n" === value$jscomp$0[0] && + target$jscomp$0.push(leadingNewline); + null !== value$jscomp$0 && + target$jscomp$0.push( + stringToChunk(escapeTextForBrowser("" + value$jscomp$0)) + ); + return null; + case "input": + target$jscomp$0.push(startChunkForTag("input")); + var name = null, + formAction = null, + formEncType = null, + formMethod = null, + formTarget = null, + value$jscomp$1 = null, + defaultValue$jscomp$0 = null, + checked = null, + defaultChecked = null, + propKey$jscomp$3; + for (propKey$jscomp$3 in props) + if (hasOwnProperty.call(props, propKey$jscomp$3)) { + var propValue$jscomp$3 = props[propKey$jscomp$3]; + if (null != propValue$jscomp$3) + switch (propKey$jscomp$3) { + case "children": + case "dangerouslySetInnerHTML": + throw Error( + "input is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`." + ); + case "name": + name = propValue$jscomp$3; + break; + case "formAction": + formAction = propValue$jscomp$3; + break; + case "formEncType": + formEncType = propValue$jscomp$3; + break; + case "formMethod": + formMethod = propValue$jscomp$3; + break; + case "formTarget": + formTarget = propValue$jscomp$3; + break; + case "defaultChecked": + defaultChecked = propValue$jscomp$3; + break; + case "defaultValue": + defaultValue$jscomp$0 = propValue$jscomp$3; + break; + case "checked": + checked = propValue$jscomp$3; + break; + case "value": + value$jscomp$1 = propValue$jscomp$3; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$3, + propValue$jscomp$3 + ); + } + } + var formData = pushFormActionAttribute( + target$jscomp$0, + resumableState, + renderState, + formAction, + formEncType, + formMethod, + formTarget, + name + ); + null !== checked + ? pushBooleanAttribute(target$jscomp$0, "checked", checked) + : null !== defaultChecked && + pushBooleanAttribute(target$jscomp$0, "checked", defaultChecked); + null !== value$jscomp$1 + ? pushAttribute(target$jscomp$0, "value", value$jscomp$1) + : null !== defaultValue$jscomp$0 && + pushAttribute(target$jscomp$0, "value", defaultValue$jscomp$0); + target$jscomp$0.push(endOfStartTagSelfClosing); + null != formData && + formData.forEach(pushAdditionalFormField, target$jscomp$0); + return null; + case "button": + target$jscomp$0.push(startChunkForTag("button")); + var children$jscomp$3 = null, + innerHTML$jscomp$2 = null, + name$jscomp$0 = null, + formAction$jscomp$0 = null, + formEncType$jscomp$0 = null, + formMethod$jscomp$0 = null, + formTarget$jscomp$0 = null, + propKey$jscomp$4; + for (propKey$jscomp$4 in props) + if (hasOwnProperty.call(props, propKey$jscomp$4)) { + var propValue$jscomp$4 = props[propKey$jscomp$4]; + if (null != propValue$jscomp$4) + switch (propKey$jscomp$4) { + case "children": + children$jscomp$3 = propValue$jscomp$4; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$2 = propValue$jscomp$4; + break; + case "name": + name$jscomp$0 = propValue$jscomp$4; + break; + case "formAction": + formAction$jscomp$0 = propValue$jscomp$4; + break; + case "formEncType": + formEncType$jscomp$0 = propValue$jscomp$4; + break; + case "formMethod": + formMethod$jscomp$0 = propValue$jscomp$4; + break; + case "formTarget": + formTarget$jscomp$0 = propValue$jscomp$4; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$4, + propValue$jscomp$4 + ); + } + } + var formData$jscomp$0 = pushFormActionAttribute( + target$jscomp$0, + resumableState, + renderState, + formAction$jscomp$0, + formEncType$jscomp$0, + formMethod$jscomp$0, + formTarget$jscomp$0, + name$jscomp$0 + ); + target$jscomp$0.push(endOfStartTag); + null != formData$jscomp$0 && + formData$jscomp$0.forEach(pushAdditionalFormField, target$jscomp$0); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$2, children$jscomp$3); + if ("string" === typeof children$jscomp$3) { + target$jscomp$0.push( + stringToChunk(escapeTextForBrowser(children$jscomp$3)) + ); + var JSCompiler_inline_result$jscomp$0 = null; + } else JSCompiler_inline_result$jscomp$0 = children$jscomp$3; + return JSCompiler_inline_result$jscomp$0; + case "form": + target$jscomp$0.push(startChunkForTag("form")); + var children$jscomp$4 = null, + innerHTML$jscomp$3 = null, + formAction$jscomp$1 = null, + formEncType$jscomp$1 = null, + formMethod$jscomp$1 = null, + formTarget$jscomp$1 = null, + propKey$jscomp$5; + for (propKey$jscomp$5 in props) + if (hasOwnProperty.call(props, propKey$jscomp$5)) { + var propValue$jscomp$5 = props[propKey$jscomp$5]; + if (null != propValue$jscomp$5) + switch (propKey$jscomp$5) { + case "children": + children$jscomp$4 = propValue$jscomp$5; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$3 = propValue$jscomp$5; + break; + case "action": + formAction$jscomp$1 = propValue$jscomp$5; + break; + case "encType": + formEncType$jscomp$1 = propValue$jscomp$5; + break; + case "method": + formMethod$jscomp$1 = propValue$jscomp$5; + break; + case "target": + formTarget$jscomp$1 = propValue$jscomp$5; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$5, + propValue$jscomp$5 + ); + } + } + var formData$jscomp$1 = null, + formActionName = null; + if ("function" === typeof formAction$jscomp$1) { + var customFields = getCustomFormFields( + resumableState, + formAction$jscomp$1 + ); + null !== customFields + ? ((formAction$jscomp$1 = customFields.action || ""), + (formEncType$jscomp$1 = customFields.encType), + (formMethod$jscomp$1 = customFields.method), + (formTarget$jscomp$1 = customFields.target), + (formData$jscomp$1 = customFields.data), + (formActionName = customFields.name)) + : (target$jscomp$0.push( + attributeSeparator, + stringToChunk("action"), + attributeAssign, + actionJavaScriptURL, + attributeEnd + ), + (formTarget$jscomp$1 = + formMethod$jscomp$1 = + formEncType$jscomp$1 = + formAction$jscomp$1 = + null), + injectFormReplayingRuntime(resumableState, renderState)); + } + null != formAction$jscomp$1 && + pushAttribute(target$jscomp$0, "action", formAction$jscomp$1); + null != formEncType$jscomp$1 && + pushAttribute(target$jscomp$0, "encType", formEncType$jscomp$1); + null != formMethod$jscomp$1 && + pushAttribute(target$jscomp$0, "method", formMethod$jscomp$1); + null != formTarget$jscomp$1 && + pushAttribute(target$jscomp$0, "target", formTarget$jscomp$1); + target$jscomp$0.push(endOfStartTag); + null !== formActionName && + (target$jscomp$0.push(startHiddenInputChunk), + pushStringAttribute(target$jscomp$0, "name", formActionName), + target$jscomp$0.push(endOfStartTagSelfClosing), + null != formData$jscomp$1 && + formData$jscomp$1.forEach(pushAdditionalFormField, target$jscomp$0)); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$3, children$jscomp$4); + if ("string" === typeof children$jscomp$4) { + target$jscomp$0.push( + stringToChunk(escapeTextForBrowser(children$jscomp$4)) + ); + var JSCompiler_inline_result$jscomp$1 = null; + } else JSCompiler_inline_result$jscomp$1 = children$jscomp$4; + return JSCompiler_inline_result$jscomp$1; + case "menuitem": + target$jscomp$0.push(startChunkForTag("menuitem")); + for (var propKey$jscomp$6 in props) + if (hasOwnProperty.call(props, propKey$jscomp$6)) { + var propValue$jscomp$6 = props[propKey$jscomp$6]; + if (null != propValue$jscomp$6) + switch (propKey$jscomp$6) { + case "children": + case "dangerouslySetInnerHTML": + throw Error( + "menuitems cannot have `children` nor `dangerouslySetInnerHTML`." + ); + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$6, + propValue$jscomp$6 + ); + } + } + target$jscomp$0.push(endOfStartTag); + return null; + case "object": + target$jscomp$0.push(startChunkForTag("object")); + var children$jscomp$5 = null, + innerHTML$jscomp$4 = null, + propKey$jscomp$7; + for (propKey$jscomp$7 in props) + if (hasOwnProperty.call(props, propKey$jscomp$7)) { + var propValue$jscomp$7 = props[propKey$jscomp$7]; + if (null != propValue$jscomp$7) + switch (propKey$jscomp$7) { + case "children": + children$jscomp$5 = propValue$jscomp$7; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$4 = propValue$jscomp$7; + break; + case "data": + var sanitizedValue = sanitizeURL("" + propValue$jscomp$7); + if ("" === sanitizedValue) break; + target$jscomp$0.push( + attributeSeparator, + stringToChunk("data"), + attributeAssign, + stringToChunk(escapeTextForBrowser(sanitizedValue)), + attributeEnd + ); + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$7, + propValue$jscomp$7 + ); + } + } + target$jscomp$0.push(endOfStartTag); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$4, children$jscomp$5); + if ("string" === typeof children$jscomp$5) { + target$jscomp$0.push( + stringToChunk(escapeTextForBrowser(children$jscomp$5)) + ); + var JSCompiler_inline_result$jscomp$2 = null; + } else JSCompiler_inline_result$jscomp$2 = children$jscomp$5; + return JSCompiler_inline_result$jscomp$2; + case "title": + var noscriptTagInScope = formatContext.tagScope & 1, + isFallback = formatContext.tagScope & 4; + if ( + 4 === formatContext.insertionMode || + noscriptTagInScope || + null != props.itemProp + ) + var JSCompiler_inline_result$jscomp$3 = pushTitleImpl( + target$jscomp$0, + props + ); + else + isFallback + ? (JSCompiler_inline_result$jscomp$3 = null) + : (pushTitleImpl(renderState.hoistableChunks, props), + (JSCompiler_inline_result$jscomp$3 = void 0)); + return JSCompiler_inline_result$jscomp$3; + case "link": + var noscriptTagInScope$jscomp$0 = formatContext.tagScope & 1, + isFallback$jscomp$0 = formatContext.tagScope & 4, + rel = props.rel, + href = props.href, + precedence = props.precedence; + if ( + 4 === formatContext.insertionMode || + noscriptTagInScope$jscomp$0 || + null != props.itemProp || + "string" !== typeof rel || + "string" !== typeof href || + "" === href + ) { + pushLinkImpl(target$jscomp$0, props); + var JSCompiler_inline_result$jscomp$4 = null; + } else if ("stylesheet" === props.rel) + if ( + "string" !== typeof precedence || + null != props.disabled || + props.onLoad || + props.onError + ) + JSCompiler_inline_result$jscomp$4 = pushLinkImpl( + target$jscomp$0, + props + ); + else { + var styleQueue = renderState.styles.get(precedence), + resourceState = resumableState.styleResources.hasOwnProperty(href) + ? resumableState.styleResources[href] + : void 0; + if (null !== resourceState) { + resumableState.styleResources[href] = null; + styleQueue || + ((styleQueue = { + precedence: stringToChunk(escapeTextForBrowser(precedence)), + rules: [], + hrefs: [], + sheets: new Map() + }), + renderState.styles.set(precedence, styleQueue)); + var resource = { + state: 0, + props: assign({}, props, { + "data-precedence": props.precedence, + precedence: null + }) + }; + if (resourceState) { + 2 === resourceState.length && + adoptPreloadCredentials(resource.props, resourceState); + var preloadResource = renderState.preloads.stylesheets.get(href); + preloadResource && 0 < preloadResource.length + ? (preloadResource.length = 0) + : (resource.state = 1); + } + styleQueue.sheets.set(href, resource); + hoistableState && hoistableState.stylesheets.add(resource); + } else if (styleQueue) { + var resource$9 = styleQueue.sheets.get(href); + resource$9 && + hoistableState && + hoistableState.stylesheets.add(resource$9); + } + textEmbedded && target$jscomp$0.push(textSeparator); + JSCompiler_inline_result$jscomp$4 = null; + } + else + props.onLoad || props.onError + ? (JSCompiler_inline_result$jscomp$4 = pushLinkImpl( + target$jscomp$0, + props + )) + : (textEmbedded && target$jscomp$0.push(textSeparator), + (JSCompiler_inline_result$jscomp$4 = isFallback$jscomp$0 + ? null + : pushLinkImpl(renderState.hoistableChunks, props))); + return JSCompiler_inline_result$jscomp$4; + case "script": + var noscriptTagInScope$jscomp$1 = formatContext.tagScope & 1, + asyncProp = props.async; + if ( + "string" !== typeof props.src || + !props.src || + !asyncProp || + "function" === typeof asyncProp || + "symbol" === typeof asyncProp || + props.onLoad || + props.onError || + 4 === formatContext.insertionMode || + noscriptTagInScope$jscomp$1 || + null != props.itemProp + ) + var JSCompiler_inline_result$jscomp$5 = pushScriptImpl( + target$jscomp$0, + props + ); + else { + var key = props.src; + if ("module" === props.type) { + var resources = resumableState.moduleScriptResources; + var preloads = renderState.preloads.moduleScripts; + } else + (resources = resumableState.scriptResources), + (preloads = renderState.preloads.scripts); + var resourceState$jscomp$0 = resources.hasOwnProperty(key) + ? resources[key] + : void 0; + if (null !== resourceState$jscomp$0) { + resources[key] = null; + var scriptProps = props; + if (resourceState$jscomp$0) { + 2 === resourceState$jscomp$0.length && + ((scriptProps = assign({}, props)), + adoptPreloadCredentials(scriptProps, resourceState$jscomp$0)); + var preloadResource$jscomp$0 = preloads.get(key); + preloadResource$jscomp$0 && (preloadResource$jscomp$0.length = 0); + } + var resource$jscomp$0 = []; + renderState.scripts.add(resource$jscomp$0); + pushScriptImpl(resource$jscomp$0, scriptProps); + } + textEmbedded && target$jscomp$0.push(textSeparator); + JSCompiler_inline_result$jscomp$5 = null; + } + return JSCompiler_inline_result$jscomp$5; + case "style": + var noscriptTagInScope$jscomp$2 = formatContext.tagScope & 1, + precedence$jscomp$0 = props.precedence, + href$jscomp$0 = props.href, + nonce = props.nonce; + if ( + 4 === formatContext.insertionMode || + noscriptTagInScope$jscomp$2 || + null != props.itemProp || + "string" !== typeof precedence$jscomp$0 || + "string" !== typeof href$jscomp$0 || + "" === href$jscomp$0 + ) { + target$jscomp$0.push(startChunkForTag("style")); + var children$jscomp$6 = null, + innerHTML$jscomp$5 = null, + propKey$jscomp$8; + for (propKey$jscomp$8 in props) + if (hasOwnProperty.call(props, propKey$jscomp$8)) { + var propValue$jscomp$8 = props[propKey$jscomp$8]; + if (null != propValue$jscomp$8) + switch (propKey$jscomp$8) { + case "children": + children$jscomp$6 = propValue$jscomp$8; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$5 = propValue$jscomp$8; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$8, + propValue$jscomp$8 + ); + } + } + target$jscomp$0.push(endOfStartTag); + var child = Array.isArray(children$jscomp$6) + ? 2 > children$jscomp$6.length + ? children$jscomp$6[0] + : null + : children$jscomp$6; + "function" !== typeof child && + "symbol" !== typeof child && + null !== child && + void 0 !== child && + target$jscomp$0.push( + stringToChunk(("" + child).replace(styleRegex, styleReplacer)) + ); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$5, children$jscomp$6); + target$jscomp$0.push(endChunkForTag("style")); + var JSCompiler_inline_result$jscomp$6 = null; + } else { + var styleQueue$jscomp$0 = renderState.styles.get(precedence$jscomp$0); + if ( + null !== + (resumableState.styleResources.hasOwnProperty(href$jscomp$0) + ? resumableState.styleResources[href$jscomp$0] + : void 0) + ) { + resumableState.styleResources[href$jscomp$0] = null; + styleQueue$jscomp$0 || + ((styleQueue$jscomp$0 = { + precedence: stringToChunk( + escapeTextForBrowser(precedence$jscomp$0) + ), + rules: [], + hrefs: [], + sheets: new Map() + }), + renderState.styles.set(precedence$jscomp$0, styleQueue$jscomp$0)); + var nonceStyle = renderState.nonce.style; + if (!nonceStyle || nonceStyle === nonce) { + styleQueue$jscomp$0.hrefs.push( + stringToChunk(escapeTextForBrowser(href$jscomp$0)) + ); + var target = styleQueue$jscomp$0.rules, + children$jscomp$7 = null, + innerHTML$jscomp$6 = null, + propKey$jscomp$9; + for (propKey$jscomp$9 in props) + if (hasOwnProperty.call(props, propKey$jscomp$9)) { + var propValue$jscomp$9 = props[propKey$jscomp$9]; + if (null != propValue$jscomp$9) + switch (propKey$jscomp$9) { + case "children": + children$jscomp$7 = propValue$jscomp$9; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$6 = propValue$jscomp$9; + } + } + var child$jscomp$0 = Array.isArray(children$jscomp$7) + ? 2 > children$jscomp$7.length + ? children$jscomp$7[0] + : null + : children$jscomp$7; + "function" !== typeof child$jscomp$0 && + "symbol" !== typeof child$jscomp$0 && + null !== child$jscomp$0 && + void 0 !== child$jscomp$0 && + target.push( + stringToChunk( + ("" + child$jscomp$0).replace(styleRegex, styleReplacer) + ) + ); + pushInnerHTML(target, innerHTML$jscomp$6, children$jscomp$7); + } + } + styleQueue$jscomp$0 && + hoistableState && + hoistableState.styles.add(styleQueue$jscomp$0); + textEmbedded && target$jscomp$0.push(textSeparator); + JSCompiler_inline_result$jscomp$6 = void 0; + } + return JSCompiler_inline_result$jscomp$6; + case "meta": + var noscriptTagInScope$jscomp$3 = formatContext.tagScope & 1, + isFallback$jscomp$1 = formatContext.tagScope & 4; + if ( + 4 === formatContext.insertionMode || + noscriptTagInScope$jscomp$3 || + null != props.itemProp + ) + var JSCompiler_inline_result$jscomp$7 = pushSelfClosing( + target$jscomp$0, + props, + "meta" + ); + else + textEmbedded && target$jscomp$0.push(textSeparator), + (JSCompiler_inline_result$jscomp$7 = isFallback$jscomp$1 + ? null + : "string" === typeof props.charSet + ? pushSelfClosing(renderState.charsetChunks, props, "meta") + : "viewport" === props.name + ? pushSelfClosing(renderState.viewportChunks, props, "meta") + : pushSelfClosing(renderState.hoistableChunks, props, "meta")); + return JSCompiler_inline_result$jscomp$7; + case "listing": + case "pre": + target$jscomp$0.push(startChunkForTag(type)); + var children$jscomp$8 = null, + innerHTML$jscomp$7 = null, + propKey$jscomp$10; + for (propKey$jscomp$10 in props) + if (hasOwnProperty.call(props, propKey$jscomp$10)) { + var propValue$jscomp$10 = props[propKey$jscomp$10]; + if (null != propValue$jscomp$10) + switch (propKey$jscomp$10) { + case "children": + children$jscomp$8 = propValue$jscomp$10; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$7 = propValue$jscomp$10; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$10, + propValue$jscomp$10 + ); + } + } + target$jscomp$0.push(endOfStartTag); + if (null != innerHTML$jscomp$7) { + if (null != children$jscomp$8) + throw Error( + "Can only set one of `children` or `props.dangerouslySetInnerHTML`." + ); + if ( + "object" !== typeof innerHTML$jscomp$7 || + !("__html" in innerHTML$jscomp$7) + ) + throw Error( + "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information." + ); + var html = innerHTML$jscomp$7.__html; + null !== html && + void 0 !== html && + ("string" === typeof html && 0 < html.length && "\n" === html[0] + ? target$jscomp$0.push(leadingNewline, stringToChunk(html)) + : target$jscomp$0.push(stringToChunk("" + html))); + } + "string" === typeof children$jscomp$8 && + "\n" === children$jscomp$8[0] && + target$jscomp$0.push(leadingNewline); + return children$jscomp$8; + case "img": + var pictureOrNoScriptTagInScope = formatContext.tagScope & 3, + src = props.src, + srcSet = props.srcSet; + if ( + !( + "lazy" === props.loading || + (!src && !srcSet) || + ("string" !== typeof src && null != src) || + ("string" !== typeof srcSet && null != srcSet) || + "low" === props.fetchPriority || + pictureOrNoScriptTagInScope + ) && + ("string" !== typeof src || + ":" !== src[4] || + ("d" !== src[0] && "D" !== src[0]) || + ("a" !== src[1] && "A" !== src[1]) || + ("t" !== src[2] && "T" !== src[2]) || + ("a" !== src[3] && "A" !== src[3])) && + ("string" !== typeof srcSet || + ":" !== srcSet[4] || + ("d" !== srcSet[0] && "D" !== srcSet[0]) || + ("a" !== srcSet[1] && "A" !== srcSet[1]) || + ("t" !== srcSet[2] && "T" !== srcSet[2]) || + ("a" !== srcSet[3] && "A" !== srcSet[3])) + ) { + null !== hoistableState && + formatContext.tagScope & 64 && + (hoistableState.suspenseyImages = !0); + var sizes = "string" === typeof props.sizes ? props.sizes : void 0, + key$jscomp$0 = srcSet ? srcSet + "\n" + (sizes || "") : src, + promotablePreloads = renderState.preloads.images, + resource$jscomp$1 = promotablePreloads.get(key$jscomp$0); + if (resource$jscomp$1) { + if ( + "high" === props.fetchPriority || + 10 > renderState.highImagePreloads.size + ) + promotablePreloads.delete(key$jscomp$0), + renderState.highImagePreloads.add(resource$jscomp$1); + } else if ( + !resumableState.imageResources.hasOwnProperty(key$jscomp$0) + ) { + resumableState.imageResources[key$jscomp$0] = PRELOAD_NO_CREDS; + var input = props.crossOrigin; + var JSCompiler_inline_result$jscomp$8 = + "string" === typeof input + ? "use-credentials" === input + ? input + : "" + : void 0; + var headers = renderState.headers, + header; + headers && + 0 < headers.remainingCapacity && + "string" !== typeof props.srcSet && + ("high" === props.fetchPriority || + 500 > headers.highImagePreloads.length) && + ((header = getPreloadAsHeader(src, "image", { + imageSrcSet: props.srcSet, + imageSizes: props.sizes, + crossOrigin: JSCompiler_inline_result$jscomp$8, + integrity: props.integrity, + nonce: props.nonce, + type: props.type, + fetchPriority: props.fetchPriority, + referrerPolicy: props.refererPolicy + })), + 0 <= (headers.remainingCapacity -= header.length + 2)) + ? ((renderState.resets.image[key$jscomp$0] = PRELOAD_NO_CREDS), + headers.highImagePreloads && (headers.highImagePreloads += ", "), + (headers.highImagePreloads += header)) + : ((resource$jscomp$1 = []), + pushLinkImpl(resource$jscomp$1, { + rel: "preload", + as: "image", + href: srcSet ? void 0 : src, + imageSrcSet: srcSet, + imageSizes: sizes, + crossOrigin: JSCompiler_inline_result$jscomp$8, + integrity: props.integrity, + type: props.type, + fetchPriority: props.fetchPriority, + referrerPolicy: props.referrerPolicy + }), + "high" === props.fetchPriority || + 10 > renderState.highImagePreloads.size + ? renderState.highImagePreloads.add(resource$jscomp$1) + : (renderState.bulkPreloads.add(resource$jscomp$1), + promotablePreloads.set(key$jscomp$0, resource$jscomp$1))); + } + } + return pushSelfClosing(target$jscomp$0, props, "img"); + case "base": + case "area": + case "br": + case "col": + case "embed": + case "hr": + case "keygen": + case "param": + case "source": + case "track": + case "wbr": + return pushSelfClosing(target$jscomp$0, props, type); + case "annotation-xml": + case "color-profile": + case "font-face": + case "font-face-src": + case "font-face-uri": + case "font-face-format": + case "font-face-name": + case "missing-glyph": + break; + case "head": + if (2 > formatContext.insertionMode) { + var preamble = preambleState || renderState.preamble; + if (preamble.headChunks) + throw Error("The `<head>` tag may only be rendered once."); + null !== preambleState && + target$jscomp$0.push(headPreambleContributionChunk); + preamble.headChunks = []; + var JSCompiler_inline_result$jscomp$9 = pushStartSingletonElement( + preamble.headChunks, + props, + "head" + ); + } else + JSCompiler_inline_result$jscomp$9 = pushStartGenericElement( + target$jscomp$0, + props, + "head" + ); + return JSCompiler_inline_result$jscomp$9; + case "body": + if (2 > formatContext.insertionMode) { + var preamble$jscomp$0 = preambleState || renderState.preamble; + if (preamble$jscomp$0.bodyChunks) + throw Error("The `<body>` tag may only be rendered once."); + null !== preambleState && + target$jscomp$0.push(bodyPreambleContributionChunk); + preamble$jscomp$0.bodyChunks = []; + var JSCompiler_inline_result$jscomp$10 = pushStartSingletonElement( + preamble$jscomp$0.bodyChunks, + props, + "body" + ); + } else + JSCompiler_inline_result$jscomp$10 = pushStartGenericElement( + target$jscomp$0, + props, + "body" + ); + return JSCompiler_inline_result$jscomp$10; + case "html": + if (0 === formatContext.insertionMode) { + var preamble$jscomp$1 = preambleState || renderState.preamble; + if (preamble$jscomp$1.htmlChunks) + throw Error("The `<html>` tag may only be rendered once."); + null !== preambleState && + target$jscomp$0.push(htmlPreambleContributionChunk); + preamble$jscomp$1.htmlChunks = [doctypeChunk]; + var JSCompiler_inline_result$jscomp$11 = pushStartSingletonElement( + preamble$jscomp$1.htmlChunks, + props, + "html" + ); + } else + JSCompiler_inline_result$jscomp$11 = pushStartGenericElement( + target$jscomp$0, + props, + "html" + ); + return JSCompiler_inline_result$jscomp$11; + default: + if (-1 !== type.indexOf("-")) { + target$jscomp$0.push(startChunkForTag(type)); + var children$jscomp$9 = null, + innerHTML$jscomp$8 = null, + propKey$jscomp$11; + for (propKey$jscomp$11 in props) + if (hasOwnProperty.call(props, propKey$jscomp$11)) { + var propValue$jscomp$11 = props[propKey$jscomp$11]; + if (null != propValue$jscomp$11) { + var attributeName = propKey$jscomp$11; + switch (propKey$jscomp$11) { + case "children": + children$jscomp$9 = propValue$jscomp$11; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$8 = propValue$jscomp$11; + break; + case "style": + pushStyleAttribute(target$jscomp$0, propValue$jscomp$11); + break; + case "suppressContentEditableWarning": + case "suppressHydrationWarning": + case "ref": + break; + case "className": + attributeName = "class"; + default: + if ( + isAttributeNameSafe(propKey$jscomp$11) && + "function" !== typeof propValue$jscomp$11 && + "symbol" !== typeof propValue$jscomp$11 && + !1 !== propValue$jscomp$11 + ) { + if (!0 === propValue$jscomp$11) propValue$jscomp$11 = ""; + else if ("object" === typeof propValue$jscomp$11) continue; + target$jscomp$0.push( + attributeSeparator, + stringToChunk(attributeName), + attributeAssign, + stringToChunk(escapeTextForBrowser(propValue$jscomp$11)), + attributeEnd + ); + } + } + } + } + target$jscomp$0.push(endOfStartTag); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$8, children$jscomp$9); + return children$jscomp$9; + } + } + return pushStartGenericElement(target$jscomp$0, props, type); +} +var endTagCache = new Map(); +function endChunkForTag(tag) { + var chunk = endTagCache.get(tag); + void 0 === chunk && + ((chunk = stringToPrecomputedChunk("</" + tag + ">")), + endTagCache.set(tag, chunk)); + return chunk; +} +function hoistPreambleState(renderState, preambleState) { + renderState = renderState.preamble; + null === renderState.htmlChunks && + preambleState.htmlChunks && + (renderState.htmlChunks = preambleState.htmlChunks); + null === renderState.headChunks && + preambleState.headChunks && + (renderState.headChunks = preambleState.headChunks); + null === renderState.bodyChunks && + preambleState.bodyChunks && + (renderState.bodyChunks = preambleState.bodyChunks); +} +function writeBootstrap(destination, renderState) { + renderState = renderState.bootstrapChunks; + for (var i = 0; i < renderState.length - 1; i++) + writeChunk(destination, renderState[i]); + return i < renderState.length + ? ((i = renderState[i]), + (renderState.length = 0), + writeChunkAndReturn(destination, i)) + : !0; +} +var shellTimeRuntimeScript = stringToPrecomputedChunk( + "requestAnimationFrame(function(){$RT=performance.now()});" + ), + placeholder1 = stringToPrecomputedChunk('<template id="'), + placeholder2 = stringToPrecomputedChunk('"></template>'), + startActivityBoundary = stringToPrecomputedChunk("\x3c!--&--\x3e"), + endActivityBoundary = stringToPrecomputedChunk("\x3c!--/&--\x3e"), + startCompletedSuspenseBoundary = stringToPrecomputedChunk("\x3c!--$--\x3e"), + startPendingSuspenseBoundary1 = stringToPrecomputedChunk( + '\x3c!--$?--\x3e<template id="' + ), + startPendingSuspenseBoundary2 = stringToPrecomputedChunk('"></template>'), + startClientRenderedSuspenseBoundary = + stringToPrecomputedChunk("\x3c!--$!--\x3e"), + endSuspenseBoundary = stringToPrecomputedChunk("\x3c!--/$--\x3e"), + clientRenderedSuspenseBoundaryError1 = stringToPrecomputedChunk("<template"), + clientRenderedSuspenseBoundaryErrorAttrInterstitial = + stringToPrecomputedChunk('"'), + clientRenderedSuspenseBoundaryError1A = + stringToPrecomputedChunk(' data-dgst="'); +stringToPrecomputedChunk(' data-msg="'); +stringToPrecomputedChunk(' data-stck="'); +stringToPrecomputedChunk(' data-cstck="'); +var clientRenderedSuspenseBoundaryError2 = + stringToPrecomputedChunk("></template>"); +function writeStartPendingSuspenseBoundary(destination, renderState, id) { + writeChunk(destination, startPendingSuspenseBoundary1); + if (null === id) + throw Error( + "An ID must have been assigned before we can complete the boundary." + ); + writeChunk(destination, renderState.boundaryPrefix); + writeChunk(destination, stringToChunk(id.toString(16))); + return writeChunkAndReturn(destination, startPendingSuspenseBoundary2); +} +var startSegmentHTML = stringToPrecomputedChunk('<div hidden id="'), + startSegmentHTML2 = stringToPrecomputedChunk('">'), + endSegmentHTML = stringToPrecomputedChunk("</div>"), + startSegmentSVG = stringToPrecomputedChunk( + '<svg aria-hidden="true" style="display:none" id="' + ), + startSegmentSVG2 = stringToPrecomputedChunk('">'), + endSegmentSVG = stringToPrecomputedChunk("</svg>"), + startSegmentMathML = stringToPrecomputedChunk( + '<math aria-hidden="true" style="display:none" id="' + ), + startSegmentMathML2 = stringToPrecomputedChunk('">'), + endSegmentMathML = stringToPrecomputedChunk("</math>"), + startSegmentTable = stringToPrecomputedChunk('<table hidden id="'), + startSegmentTable2 = stringToPrecomputedChunk('">'), + endSegmentTable = stringToPrecomputedChunk("</table>"), + startSegmentTableBody = stringToPrecomputedChunk('<table hidden><tbody id="'), + startSegmentTableBody2 = stringToPrecomputedChunk('">'), + endSegmentTableBody = stringToPrecomputedChunk("</tbody></table>"), + startSegmentTableRow = stringToPrecomputedChunk('<table hidden><tr id="'), + startSegmentTableRow2 = stringToPrecomputedChunk('">'), + endSegmentTableRow = stringToPrecomputedChunk("</tr></table>"), + startSegmentColGroup = stringToPrecomputedChunk( + '<table hidden><colgroup id="' + ), + startSegmentColGroup2 = stringToPrecomputedChunk('">'), + endSegmentColGroup = stringToPrecomputedChunk("</colgroup></table>"); +function writeStartSegment(destination, renderState, formatContext, id) { + switch (formatContext.insertionMode) { + case 0: + case 1: + case 3: + case 2: + return ( + writeChunk(destination, startSegmentHTML), + writeChunk(destination, renderState.segmentPrefix), + writeChunk(destination, stringToChunk(id.toString(16))), + writeChunkAndReturn(destination, startSegmentHTML2) + ); + case 4: + return ( + writeChunk(destination, startSegmentSVG), + writeChunk(destination, renderState.segmentPrefix), + writeChunk(destination, stringToChunk(id.toString(16))), + writeChunkAndReturn(destination, startSegmentSVG2) + ); + case 5: + return ( + writeChunk(destination, startSegmentMathML), + writeChunk(destination, renderState.segmentPrefix), + writeChunk(destination, stringToChunk(id.toString(16))), + writeChunkAndReturn(destination, startSegmentMathML2) + ); + case 6: + return ( + writeChunk(destination, startSegmentTable), + writeChunk(destination, renderState.segmentPrefix), + writeChunk(destination, stringToChunk(id.toString(16))), + writeChunkAndReturn(destination, startSegmentTable2) + ); + case 7: + return ( + writeChunk(destination, startSegmentTableBody), + writeChunk(destination, renderState.segmentPrefix), + writeChunk(destination, stringToChunk(id.toString(16))), + writeChunkAndReturn(destination, startSegmentTableBody2) + ); + case 8: + return ( + writeChunk(destination, startSegmentTableRow), + writeChunk(destination, renderState.segmentPrefix), + writeChunk(destination, stringToChunk(id.toString(16))), + writeChunkAndReturn(destination, startSegmentTableRow2) + ); + case 9: + return ( + writeChunk(destination, startSegmentColGroup), + writeChunk(destination, renderState.segmentPrefix), + writeChunk(destination, stringToChunk(id.toString(16))), + writeChunkAndReturn(destination, startSegmentColGroup2) + ); + default: + throw Error("Unknown insertion mode. This is a bug in React."); + } +} +function writeEndSegment(destination, formatContext) { + switch (formatContext.insertionMode) { + case 0: + case 1: + case 3: + case 2: + return writeChunkAndReturn(destination, endSegmentHTML); + case 4: + return writeChunkAndReturn(destination, endSegmentSVG); + case 5: + return writeChunkAndReturn(destination, endSegmentMathML); + case 6: + return writeChunkAndReturn(destination, endSegmentTable); + case 7: + return writeChunkAndReturn(destination, endSegmentTableBody); + case 8: + return writeChunkAndReturn(destination, endSegmentTableRow); + case 9: + return writeChunkAndReturn(destination, endSegmentColGroup); + default: + throw Error("Unknown insertion mode. This is a bug in React."); + } +} +var completeSegmentScript1Full = stringToPrecomputedChunk( + '$RS=function(a,b){a=document.getElementById(a);b=document.getElementById(b);for(a.parentNode.removeChild(a);a.firstChild;)b.parentNode.insertBefore(a.firstChild,b);b.parentNode.removeChild(b)};$RS("' + ), + completeSegmentScript1Partial = stringToPrecomputedChunk('$RS("'), + completeSegmentScript2 = stringToPrecomputedChunk('","'), + completeSegmentScriptEnd = stringToPrecomputedChunk('")\x3c/script>'); +stringToPrecomputedChunk('<template data-rsi="" data-sid="'); +stringToPrecomputedChunk('" data-pid="'); +var completeBoundaryScriptFunctionOnly = stringToPrecomputedChunk( + '$RB=[];$RV=function(a){$RT=performance.now();for(var b=0;b<a.length;b+=2){var c=a[b],e=a[b+1];null!==e.parentNode&&e.parentNode.removeChild(e);var f=c.parentNode;if(f){var g=c.previousSibling,h=0;do{if(c&&8===c.nodeType){var d=c.data;if("/$"===d||"/&"===d)if(0===h)break;else h--;else"$"!==d&&"$?"!==d&&"$~"!==d&&"$!"!==d&&"&"!==d||h++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;e.firstChild;)f.insertBefore(e.firstChild,c);g.data="$";g._reactRetry&&requestAnimationFrame(g._reactRetry)}}a.length=0};\n$RC=function(a,b){if(b=document.getElementById(b))(a=document.getElementById(a))?(a.previousSibling.data="$~",$RB.push(a,b),2===$RB.length&&("number"!==typeof $RT?requestAnimationFrame($RV.bind(null,$RB)):(a=performance.now(),setTimeout($RV.bind(null,$RB),2300>a&&2E3<a?2300-a:$RT+300-a)))):b.parentNode.removeChild(b)};' +); +stringToChunk( + '$RV=function(A,g){function k(a,b){var e=a.getAttribute(b);e&&(b=a.style,l.push(a,b.viewTransitionName,b.viewTransitionClass),"auto"!==e&&(b.viewTransitionClass=e),(a=a.getAttribute("vt-name"))||(a="_T_"+K++ +"_"),b.viewTransitionName=a,B=!0)}var B=!1,K=0,l=[];try{var f=document.__reactViewTransition;if(f){f.finished.finally($RV.bind(null,g));return}var m=new Map;for(f=1;f<g.length;f+=2)for(var h=g[f].querySelectorAll("[vt-share]"),d=0;d<h.length;d++){var c=h[d];m.set(c.getAttribute("vt-name"),c)}var u=[];for(h=0;h<g.length;h+=2){var C=g[h],x=C.parentNode;if(x){var v=x.getBoundingClientRect();if(v.left||v.top||v.width||v.height){c=C;for(f=0;c;){if(8===c.nodeType){var r=c.data;if("/$"===r)if(0===f)break;else f--;else"$"!==r&&"$?"!==r&&"$~"!==r&&"$!"!==r||f++}else if(1===c.nodeType){d=c;var D=d.getAttribute("vt-name"),y=m.get(D);k(d,y?"vt-share":"vt-exit");y&&(k(y,"vt-share"),m.set(D,null));var E=d.querySelectorAll("[vt-share]");for(d=0;d<E.length;d++){var F=E[d],G=F.getAttribute("vt-name"),\nH=m.get(G);H&&(k(F,"vt-share"),k(H,"vt-share"),m.set(G,null))}}c=c.nextSibling}for(var I=g[h+1],t=I.firstElementChild;t;)null!==m.get(t.getAttribute("vt-name"))&&k(t,"vt-enter"),t=t.nextElementSibling;c=x;do for(var n=c.firstElementChild;n;){var J=n.getAttribute("vt-update");J&&"none"!==J&&!l.includes(n)&&k(n,"vt-update");n=n.nextElementSibling}while((c=c.parentNode)&&1===c.nodeType&&"none"!==c.getAttribute("vt-update"));u.push.apply(u,I.querySelectorAll(\'img[src]:not([loading="lazy"])\'))}}}if(B){var z=\ndocument.__reactViewTransition=document.startViewTransition({update:function(){A(g);for(var a=[document.documentElement.clientHeight,document.fonts.ready],b={},e=0;e<u.length;b={g:b.g},e++)if(b.g=u[e],!b.g.complete){var p=b.g.getBoundingClientRect();0<p.bottom&&0<p.right&&p.top<window.innerHeight&&p.left<window.innerWidth&&(p=new Promise(function(w){return function(q){w.g.addEventListener("load",q);w.g.addEventListener("error",q)}}(b)),a.push(p))}return Promise.race([Promise.all(a),new Promise(function(w){var q=\nperformance.now();setTimeout(w,2300>q&&2E3<q?2300-q:500)})])},types:[]});z.ready.finally(function(){for(var a=l.length-3;0<=a;a-=3){var b=l[a],e=b.style;e.viewTransitionName=l[a+1];e.viewTransitionClass=l[a+1];""===b.getAttribute("style")&&b.removeAttribute("style")}});z.finished.finally(function(){document.__reactViewTransition===z&&(document.__reactViewTransition=null)});$RB=[];return}}catch(a){}A(g)}.bind(null,$RV);' +); +var completeBoundaryScript1Partial = stringToPrecomputedChunk('$RC("'), + completeBoundaryWithStylesScript1FullPartial = stringToPrecomputedChunk( + '$RM=new Map;$RR=function(n,w,p){function u(q){this._p=null;q()}for(var r=new Map,t=document,h,b,e=t.querySelectorAll("link[data-precedence],style[data-precedence]"),v=[],k=0;b=e[k++];)"not all"===b.getAttribute("media")?v.push(b):("LINK"===b.tagName&&$RM.set(b.getAttribute("href"),b),r.set(b.dataset.precedence,h=b));e=0;b=[];var l,a;for(k=!0;;){if(k){var f=p[e++];if(!f){k=!1;e=0;continue}var c=!1,m=0;var d=f[m++];if(a=$RM.get(d)){var g=a._p;c=!0}else{a=t.createElement("link");a.href=d;a.rel=\n"stylesheet";for(a.dataset.precedence=l=f[m++];g=f[m++];)a.setAttribute(g,f[m++]);g=a._p=new Promise(function(q,x){a.onload=u.bind(a,q);a.onerror=u.bind(a,x)});$RM.set(d,a)}d=a.getAttribute("media");!g||d&&!matchMedia(d).matches||b.push(g);if(c)continue}else{a=v[e++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=r.get(l)||h;c===h&&(h=a);r.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=t.head,c.insertBefore(a,c.firstChild))}if(p=document.getElementById(n))p.previousSibling.data=\n"$~";Promise.all(b).then($RC.bind(null,n,w),$RX.bind(null,n,"CSS failed to load"))};$RR("' + ), + completeBoundaryWithStylesScript1Partial = stringToPrecomputedChunk('$RR("'), + completeBoundaryScript2 = stringToPrecomputedChunk('","'), + completeBoundaryScript3a = stringToPrecomputedChunk('",'), + completeBoundaryScript3b = stringToPrecomputedChunk('"'), + completeBoundaryScriptEnd = stringToPrecomputedChunk(")\x3c/script>"); +stringToPrecomputedChunk('<template data-rci="" data-bid="'); +stringToPrecomputedChunk('<template data-rri="" data-bid="'); +stringToPrecomputedChunk('" data-sid="'); +stringToPrecomputedChunk('" data-sty="'); +var clientRenderScriptFunctionOnly = stringToPrecomputedChunk( + '$RX=function(b,c,d,e,f){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data="$!",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),f&&(a.cstck=f),b._reactRetry&&b._reactRetry())};' + ), + clientRenderScript1Full = stringToPrecomputedChunk( + '$RX=function(b,c,d,e,f){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data="$!",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),f&&(a.cstck=f),b._reactRetry&&b._reactRetry())};;$RX("' + ), + clientRenderScript1Partial = stringToPrecomputedChunk('$RX("'), + clientRenderScript1A = stringToPrecomputedChunk('"'), + clientRenderErrorScriptArgInterstitial = stringToPrecomputedChunk(","), + clientRenderScriptEnd = stringToPrecomputedChunk(")\x3c/script>"); +stringToPrecomputedChunk('<template data-rxi="" data-bid="'); +stringToPrecomputedChunk('" data-dgst="'); +stringToPrecomputedChunk('" data-msg="'); +stringToPrecomputedChunk('" data-stck="'); +stringToPrecomputedChunk('" data-cstck="'); +var regexForJSStringsInInstructionScripts = /[<\u2028\u2029]/g; +function escapeJSStringsForInstructionScripts(input) { + return JSON.stringify(input).replace( + regexForJSStringsInInstructionScripts, + function (match) { + switch (match) { + case "<": + return "\\u003c"; + case "\u2028": + return "\\u2028"; + case "\u2029": + return "\\u2029"; + default: + throw Error( + "escapeJSStringsForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React" + ); + } + } + ); +} +var regexForJSStringsInScripts = /[&><\u2028\u2029]/g; +function escapeJSObjectForInstructionScripts(input) { + return JSON.stringify(input).replace( + regexForJSStringsInScripts, + function (match) { + switch (match) { + case "&": + return "\\u0026"; + case ">": + return "\\u003e"; + case "<": + return "\\u003c"; + case "\u2028": + return "\\u2028"; + case "\u2029": + return "\\u2029"; + default: + throw Error( + "escapeJSObjectForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React" + ); + } + } + ); +} +var lateStyleTagResourceOpen1 = stringToPrecomputedChunk( + ' media="not all" data-precedence="' + ), + lateStyleTagResourceOpen2 = stringToPrecomputedChunk('" data-href="'), + lateStyleTagResourceOpen3 = stringToPrecomputedChunk('">'), + lateStyleTagTemplateClose = stringToPrecomputedChunk("</style>"), + currentlyRenderingBoundaryHasStylesToHoist = !1, + destinationHasCapacity = !0; +function flushStyleTagsLateForBoundary(styleQueue) { + var rules = styleQueue.rules, + hrefs = styleQueue.hrefs, + i = 0; + if (hrefs.length) { + writeChunk(this, currentlyFlushingRenderState.startInlineStyle); + writeChunk(this, lateStyleTagResourceOpen1); + writeChunk(this, styleQueue.precedence); + for (writeChunk(this, lateStyleTagResourceOpen2); i < hrefs.length - 1; i++) + writeChunk(this, hrefs[i]), writeChunk(this, spaceSeparator); + writeChunk(this, hrefs[i]); + writeChunk(this, lateStyleTagResourceOpen3); + for (i = 0; i < rules.length; i++) writeChunk(this, rules[i]); + destinationHasCapacity = writeChunkAndReturn( + this, + lateStyleTagTemplateClose + ); + currentlyRenderingBoundaryHasStylesToHoist = !0; + rules.length = 0; + hrefs.length = 0; + } +} +function hasStylesToHoist(stylesheet) { + return 2 !== stylesheet.state + ? (currentlyRenderingBoundaryHasStylesToHoist = !0) + : !1; +} +function writeHoistablesForBoundary(destination, hoistableState, renderState) { + currentlyRenderingBoundaryHasStylesToHoist = !1; + destinationHasCapacity = !0; + currentlyFlushingRenderState = renderState; + hoistableState.styles.forEach(flushStyleTagsLateForBoundary, destination); + currentlyFlushingRenderState = null; + hoistableState.stylesheets.forEach(hasStylesToHoist); + currentlyRenderingBoundaryHasStylesToHoist && + (renderState.stylesToHoist = !0); + return destinationHasCapacity; +} +function flushResource(resource) { + for (var i = 0; i < resource.length; i++) writeChunk(this, resource[i]); + resource.length = 0; +} +var stylesheetFlushingQueue = []; +function flushStyleInPreamble(stylesheet) { + pushLinkImpl(stylesheetFlushingQueue, stylesheet.props); + for (var i = 0; i < stylesheetFlushingQueue.length; i++) + writeChunk(this, stylesheetFlushingQueue[i]); + stylesheetFlushingQueue.length = 0; + stylesheet.state = 2; +} +var styleTagResourceOpen1 = stringToPrecomputedChunk(' data-precedence="'), + styleTagResourceOpen2 = stringToPrecomputedChunk('" data-href="'), + spaceSeparator = stringToPrecomputedChunk(" "), + styleTagResourceOpen3 = stringToPrecomputedChunk('">'), + styleTagResourceClose = stringToPrecomputedChunk("</style>"); +function flushStylesInPreamble(styleQueue) { + var hasStylesheets = 0 < styleQueue.sheets.size; + styleQueue.sheets.forEach(flushStyleInPreamble, this); + styleQueue.sheets.clear(); + var rules = styleQueue.rules, + hrefs = styleQueue.hrefs; + if (!hasStylesheets || hrefs.length) { + writeChunk(this, currentlyFlushingRenderState.startInlineStyle); + writeChunk(this, styleTagResourceOpen1); + writeChunk(this, styleQueue.precedence); + styleQueue = 0; + if (hrefs.length) { + for ( + writeChunk(this, styleTagResourceOpen2); + styleQueue < hrefs.length - 1; + styleQueue++ + ) + writeChunk(this, hrefs[styleQueue]), writeChunk(this, spaceSeparator); + writeChunk(this, hrefs[styleQueue]); + } + writeChunk(this, styleTagResourceOpen3); + for (styleQueue = 0; styleQueue < rules.length; styleQueue++) + writeChunk(this, rules[styleQueue]); + writeChunk(this, styleTagResourceClose); + rules.length = 0; + hrefs.length = 0; + } +} +function preloadLateStyle(stylesheet) { + if (0 === stylesheet.state) { + stylesheet.state = 1; + var props = stylesheet.props; + pushLinkImpl(stylesheetFlushingQueue, { + rel: "preload", + as: "style", + href: stylesheet.props.href, + crossOrigin: props.crossOrigin, + fetchPriority: props.fetchPriority, + integrity: props.integrity, + media: props.media, + hrefLang: props.hrefLang, + referrerPolicy: props.referrerPolicy + }); + for ( + stylesheet = 0; + stylesheet < stylesheetFlushingQueue.length; + stylesheet++ + ) + writeChunk(this, stylesheetFlushingQueue[stylesheet]); + stylesheetFlushingQueue.length = 0; + } +} +function preloadLateStyles(styleQueue) { + styleQueue.sheets.forEach(preloadLateStyle, this); + styleQueue.sheets.clear(); +} +stringToPrecomputedChunk('<link rel="expect" href="#'); +stringToPrecomputedChunk('" blocking="render"/>'); +var completedShellIdAttributeStart = stringToPrecomputedChunk(' id="'); +function pushCompletedShellIdAttribute(target, resumableState) { + 0 === (resumableState.instructions & 32) && + ((resumableState.instructions |= 32), + target.push( + completedShellIdAttributeStart, + stringToChunk(escapeTextForBrowser("_" + resumableState.idPrefix + "R_")), + attributeEnd + )); +} +var arrayFirstOpenBracket = stringToPrecomputedChunk("["), + arraySubsequentOpenBracket = stringToPrecomputedChunk(",["), + arrayInterstitial = stringToPrecomputedChunk(","), + arrayCloseBracket = stringToPrecomputedChunk("]"); +function writeStyleResourceDependenciesInJS(destination, hoistableState) { + writeChunk(destination, arrayFirstOpenBracket); + var nextArrayOpenBrackChunk = arrayFirstOpenBracket; + hoistableState.stylesheets.forEach(function (resource) { + if (2 !== resource.state) + if (3 === resource.state) + writeChunk(destination, nextArrayOpenBrackChunk), + writeChunk( + destination, + stringToChunk( + escapeJSObjectForInstructionScripts("" + resource.props.href) + ) + ), + writeChunk(destination, arrayCloseBracket), + (nextArrayOpenBrackChunk = arraySubsequentOpenBracket); + else { + writeChunk(destination, nextArrayOpenBrackChunk); + var precedence = resource.props["data-precedence"], + props = resource.props, + coercedHref = sanitizeURL("" + resource.props.href); + writeChunk( + destination, + stringToChunk(escapeJSObjectForInstructionScripts(coercedHref)) + ); + precedence = "" + precedence; + writeChunk(destination, arrayInterstitial); + writeChunk( + destination, + stringToChunk(escapeJSObjectForInstructionScripts(precedence)) + ); + for (var propKey in props) + if ( + hasOwnProperty.call(props, propKey) && + ((precedence = props[propKey]), null != precedence) + ) + switch (propKey) { + case "href": + case "rel": + case "precedence": + case "data-precedence": + break; + case "children": + case "dangerouslySetInnerHTML": + throw Error( + "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`." + ); + default: + writeStyleResourceAttributeInJS( + destination, + propKey, + precedence + ); + } + writeChunk(destination, arrayCloseBracket); + nextArrayOpenBrackChunk = arraySubsequentOpenBracket; + resource.state = 3; + } + }); + writeChunk(destination, arrayCloseBracket); +} +function writeStyleResourceAttributeInJS(destination, name, value) { + var attributeName = name.toLowerCase(); + switch (typeof value) { + case "function": + case "symbol": + return; + } + switch (name) { + case "innerHTML": + case "dangerouslySetInnerHTML": + case "suppressContentEditableWarning": + case "suppressHydrationWarning": + case "style": + case "ref": + return; + case "className": + attributeName = "class"; + name = "" + value; + break; + case "hidden": + if (!1 === value) return; + name = ""; + break; + case "src": + case "href": + value = sanitizeURL(value); + name = "" + value; + break; + default: + if ( + (2 < name.length && + ("o" === name[0] || "O" === name[0]) && + ("n" === name[1] || "N" === name[1])) || + !isAttributeNameSafe(name) + ) + return; + name = "" + value; + } + writeChunk(destination, arrayInterstitial); + writeChunk( + destination, + stringToChunk(escapeJSObjectForInstructionScripts(attributeName)) + ); + writeChunk(destination, arrayInterstitial); + writeChunk( + destination, + stringToChunk(escapeJSObjectForInstructionScripts(name)) + ); +} +function createHoistableState() { + return { styles: new Set(), stylesheets: new Set(), suspenseyImages: !1 }; +} +function prefetchDNS(href) { + var request = resolveRequest(); + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if ("string" === typeof href && href) { + if (!resumableState.dnsResources.hasOwnProperty(href)) { + resumableState.dnsResources[href] = null; + resumableState = renderState.headers; + var header, JSCompiler_temp; + if ( + (JSCompiler_temp = + resumableState && 0 < resumableState.remainingCapacity) + ) + JSCompiler_temp = + ((header = + "<" + + ("" + href).replace( + regexForHrefInLinkHeaderURLContext, + escapeHrefForLinkHeaderURLContextReplacer + ) + + ">; rel=dns-prefetch"), + 0 <= (resumableState.remainingCapacity -= header.length + 2)); + JSCompiler_temp + ? ((renderState.resets.dns[href] = null), + resumableState.preconnects && (resumableState.preconnects += ", "), + (resumableState.preconnects += header)) + : ((header = []), + pushLinkImpl(header, { href: href, rel: "dns-prefetch" }), + renderState.preconnects.add(header)); + } + enqueueFlush(request); + } + } else previousDispatcher.D(href); +} +function preconnect(href, crossOrigin) { + var request = resolveRequest(); + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if ("string" === typeof href && href) { + var bucket = + "use-credentials" === crossOrigin + ? "credentials" + : "string" === typeof crossOrigin + ? "anonymous" + : "default"; + if (!resumableState.connectResources[bucket].hasOwnProperty(href)) { + resumableState.connectResources[bucket][href] = null; + resumableState = renderState.headers; + var header, JSCompiler_temp; + if ( + (JSCompiler_temp = + resumableState && 0 < resumableState.remainingCapacity) + ) { + JSCompiler_temp = + "<" + + ("" + href).replace( + regexForHrefInLinkHeaderURLContext, + escapeHrefForLinkHeaderURLContextReplacer + ) + + ">; rel=preconnect"; + if ("string" === typeof crossOrigin) { + var escapedCrossOrigin = ("" + crossOrigin).replace( + regexForLinkHeaderQuotedParamValueContext, + escapeStringForLinkHeaderQuotedParamValueContextReplacer + ); + JSCompiler_temp += '; crossorigin="' + escapedCrossOrigin + '"'; + } + JSCompiler_temp = + ((header = JSCompiler_temp), + 0 <= (resumableState.remainingCapacity -= header.length + 2)); + } + JSCompiler_temp + ? ((renderState.resets.connect[bucket][href] = null), + resumableState.preconnects && (resumableState.preconnects += ", "), + (resumableState.preconnects += header)) + : ((bucket = []), + pushLinkImpl(bucket, { + rel: "preconnect", + href: href, + crossOrigin: crossOrigin + }), + renderState.preconnects.add(bucket)); + } + enqueueFlush(request); + } + } else previousDispatcher.C(href, crossOrigin); +} +function preload(href, as, options) { + var request = resolveRequest(); + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if (as && href) { + switch (as) { + case "image": + if (options) { + var imageSrcSet = options.imageSrcSet; + var imageSizes = options.imageSizes; + var fetchPriority = options.fetchPriority; + } + var key = imageSrcSet + ? imageSrcSet + "\n" + (imageSizes || "") + : href; + if (resumableState.imageResources.hasOwnProperty(key)) return; + resumableState.imageResources[key] = PRELOAD_NO_CREDS; + resumableState = renderState.headers; + var header; + resumableState && + 0 < resumableState.remainingCapacity && + "string" !== typeof imageSrcSet && + "high" === fetchPriority && + ((header = getPreloadAsHeader(href, as, options)), + 0 <= (resumableState.remainingCapacity -= header.length + 2)) + ? ((renderState.resets.image[key] = PRELOAD_NO_CREDS), + resumableState.highImagePreloads && + (resumableState.highImagePreloads += ", "), + (resumableState.highImagePreloads += header)) + : ((resumableState = []), + pushLinkImpl( + resumableState, + assign( + { rel: "preload", href: imageSrcSet ? void 0 : href, as: as }, + options + ) + ), + "high" === fetchPriority + ? renderState.highImagePreloads.add(resumableState) + : (renderState.bulkPreloads.add(resumableState), + renderState.preloads.images.set(key, resumableState))); + break; + case "style": + if (resumableState.styleResources.hasOwnProperty(href)) return; + imageSrcSet = []; + pushLinkImpl( + imageSrcSet, + assign({ rel: "preload", href: href, as: as }, options) + ); + resumableState.styleResources[href] = + !options || + ("string" !== typeof options.crossOrigin && + "string" !== typeof options.integrity) + ? PRELOAD_NO_CREDS + : [options.crossOrigin, options.integrity]; + renderState.preloads.stylesheets.set(href, imageSrcSet); + renderState.bulkPreloads.add(imageSrcSet); + break; + case "script": + if (resumableState.scriptResources.hasOwnProperty(href)) return; + imageSrcSet = []; + renderState.preloads.scripts.set(href, imageSrcSet); + renderState.bulkPreloads.add(imageSrcSet); + pushLinkImpl( + imageSrcSet, + assign({ rel: "preload", href: href, as: as }, options) + ); + resumableState.scriptResources[href] = + !options || + ("string" !== typeof options.crossOrigin && + "string" !== typeof options.integrity) + ? PRELOAD_NO_CREDS + : [options.crossOrigin, options.integrity]; + break; + default: + if (resumableState.unknownResources.hasOwnProperty(as)) { + if ( + ((imageSrcSet = resumableState.unknownResources[as]), + imageSrcSet.hasOwnProperty(href)) + ) + return; + } else + (imageSrcSet = {}), + (resumableState.unknownResources[as] = imageSrcSet); + imageSrcSet[href] = PRELOAD_NO_CREDS; + if ( + (resumableState = renderState.headers) && + 0 < resumableState.remainingCapacity && + "font" === as && + ((key = getPreloadAsHeader(href, as, options)), + 0 <= (resumableState.remainingCapacity -= key.length + 2)) + ) + (renderState.resets.font[href] = PRELOAD_NO_CREDS), + resumableState.fontPreloads && + (resumableState.fontPreloads += ", "), + (resumableState.fontPreloads += key); + else + switch ( + ((resumableState = []), + (href = assign({ rel: "preload", href: href, as: as }, options)), + pushLinkImpl(resumableState, href), + as) + ) { + case "font": + renderState.fontPreloads.add(resumableState); + break; + default: + renderState.bulkPreloads.add(resumableState); + } + } + enqueueFlush(request); + } + } else previousDispatcher.L(href, as, options); +} +function preloadModule(href, options) { + var request = resolveRequest(); + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if (href) { + var as = + options && "string" === typeof options.as ? options.as : "script"; + switch (as) { + case "script": + if (resumableState.moduleScriptResources.hasOwnProperty(href)) return; + as = []; + resumableState.moduleScriptResources[href] = + !options || + ("string" !== typeof options.crossOrigin && + "string" !== typeof options.integrity) + ? PRELOAD_NO_CREDS + : [options.crossOrigin, options.integrity]; + renderState.preloads.moduleScripts.set(href, as); + break; + default: + if (resumableState.moduleUnknownResources.hasOwnProperty(as)) { + var resources = resumableState.unknownResources[as]; + if (resources.hasOwnProperty(href)) return; + } else + (resources = {}), + (resumableState.moduleUnknownResources[as] = resources); + as = []; + resources[href] = PRELOAD_NO_CREDS; + } + pushLinkImpl(as, assign({ rel: "modulepreload", href: href }, options)); + renderState.bulkPreloads.add(as); + enqueueFlush(request); + } + } else previousDispatcher.m(href, options); +} +function preinitStyle(href, precedence, options) { + var request = resolveRequest(); + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if (href) { + precedence = precedence || "default"; + var styleQueue = renderState.styles.get(precedence), + resourceState = resumableState.styleResources.hasOwnProperty(href) + ? resumableState.styleResources[href] + : void 0; + null !== resourceState && + ((resumableState.styleResources[href] = null), + styleQueue || + ((styleQueue = { + precedence: stringToChunk(escapeTextForBrowser(precedence)), + rules: [], + hrefs: [], + sheets: new Map() + }), + renderState.styles.set(precedence, styleQueue)), + (precedence = { + state: 0, + props: assign( + { rel: "stylesheet", href: href, "data-precedence": precedence }, + options + ) + }), + resourceState && + (2 === resourceState.length && + adoptPreloadCredentials(precedence.props, resourceState), + (renderState = renderState.preloads.stylesheets.get(href)) && + 0 < renderState.length + ? (renderState.length = 0) + : (precedence.state = 1)), + styleQueue.sheets.set(href, precedence), + enqueueFlush(request)); + } + } else previousDispatcher.S(href, precedence, options); +} +function preinitScript(src, options) { + var request = resolveRequest(); + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if (src) { + var resourceState = resumableState.scriptResources.hasOwnProperty(src) + ? resumableState.scriptResources[src] + : void 0; + null !== resourceState && + ((resumableState.scriptResources[src] = null), + (options = assign({ src: src, async: !0 }, options)), + resourceState && + (2 === resourceState.length && + adoptPreloadCredentials(options, resourceState), + (src = renderState.preloads.scripts.get(src))) && + (src.length = 0), + (src = []), + renderState.scripts.add(src), + pushScriptImpl(src, options), + enqueueFlush(request)); + } + } else previousDispatcher.X(src, options); +} +function preinitModuleScript(src, options) { + var request = resolveRequest(); + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if (src) { + var resourceState = resumableState.moduleScriptResources.hasOwnProperty( + src + ) + ? resumableState.moduleScriptResources[src] + : void 0; + null !== resourceState && + ((resumableState.moduleScriptResources[src] = null), + (options = assign({ src: src, type: "module", async: !0 }, options)), + resourceState && + (2 === resourceState.length && + adoptPreloadCredentials(options, resourceState), + (src = renderState.preloads.moduleScripts.get(src))) && + (src.length = 0), + (src = []), + renderState.scripts.add(src), + pushScriptImpl(src, options), + enqueueFlush(request)); + } + } else previousDispatcher.M(src, options); +} +function adoptPreloadCredentials(target, preloadState) { + null == target.crossOrigin && (target.crossOrigin = preloadState[0]); + null == target.integrity && (target.integrity = preloadState[1]); +} +function getPreloadAsHeader(href, as, params) { + href = ("" + href).replace( + regexForHrefInLinkHeaderURLContext, + escapeHrefForLinkHeaderURLContextReplacer + ); + as = ("" + as).replace( + regexForLinkHeaderQuotedParamValueContext, + escapeStringForLinkHeaderQuotedParamValueContextReplacer + ); + as = "<" + href + '>; rel=preload; as="' + as + '"'; + for (var paramName in params) + hasOwnProperty.call(params, paramName) && + ((href = params[paramName]), + "string" === typeof href && + (as += + "; " + + paramName.toLowerCase() + + '="' + + ("" + href).replace( + regexForLinkHeaderQuotedParamValueContext, + escapeStringForLinkHeaderQuotedParamValueContextReplacer + ) + + '"')); + return as; +} +var regexForHrefInLinkHeaderURLContext = /[<>\r\n]/g; +function escapeHrefForLinkHeaderURLContextReplacer(match) { + switch (match) { + case "<": + return "%3C"; + case ">": + return "%3E"; + case "\n": + return "%0A"; + case "\r": + return "%0D"; + default: + throw Error( + "escapeLinkHrefForHeaderContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React" + ); + } +} +var regexForLinkHeaderQuotedParamValueContext = /["';,\r\n]/g; +function escapeStringForLinkHeaderQuotedParamValueContextReplacer(match) { + switch (match) { + case '"': + return "%22"; + case "'": + return "%27"; + case ";": + return "%3B"; + case ",": + return "%2C"; + case "\n": + return "%0A"; + case "\r": + return "%0D"; + default: + throw Error( + "escapeStringForLinkHeaderQuotedParamValueContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React" + ); + } +} +function hoistStyleQueueDependency(styleQueue) { + this.styles.add(styleQueue); +} +function hoistStylesheetDependency(stylesheet) { + this.stylesheets.add(stylesheet); +} +function hoistHoistables(parentState, childState) { + childState.styles.forEach(hoistStyleQueueDependency, parentState); + childState.stylesheets.forEach(hoistStylesheetDependency, parentState); + childState.suspenseyImages && (parentState.suspenseyImages = !0); +} +function hasSuspenseyContent(hoistableState) { + return 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages; +} +var bind = Function.prototype.bind, + supportsRequestStorage = "function" === typeof AsyncLocalStorage, + requestStorage = supportsRequestStorage ? new AsyncLocalStorage() : null, + REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"); +function getComponentNameFromType(type) { + if (null == type) return null; + if ("function" === typeof type) + return type.$$typeof === REACT_CLIENT_REFERENCE + ? null + : type.displayName || type.name || null; + if ("string" === typeof type) return type; + switch (type) { + case REACT_FRAGMENT_TYPE: + return "Fragment"; + case REACT_PROFILER_TYPE: + return "Profiler"; + case REACT_STRICT_MODE_TYPE: + return "StrictMode"; + case REACT_SUSPENSE_TYPE: + return "Suspense"; + case REACT_SUSPENSE_LIST_TYPE: + return "SuspenseList"; + case REACT_ACTIVITY_TYPE: + return "Activity"; + } + if ("object" === typeof type) + switch (type.$$typeof) { + case REACT_PORTAL_TYPE: + return "Portal"; + case REACT_CONTEXT_TYPE: + return type.displayName || "Context"; + case REACT_CONSUMER_TYPE: + return (type._context.displayName || "Context") + ".Consumer"; + case REACT_FORWARD_REF_TYPE: + var innerType = type.render; + type = type.displayName; + type || + ((type = innerType.displayName || innerType.name || ""), + (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef")); + return type; + case REACT_MEMO_TYPE: + return ( + (innerType = type.displayName || null), + null !== innerType + ? innerType + : getComponentNameFromType(type.type) || "Memo" + ); + case REACT_LAZY_TYPE: + innerType = type._payload; + type = type._init; + try { + return getComponentNameFromType(type(innerType)); + } catch (x) {} + } + return null; +} +var emptyContextObject = {}, + currentActiveSnapshot = null; +function popToNearestCommonAncestor(prev, next) { + if (prev !== next) { + prev.context._currentValue = prev.parentValue; + prev = prev.parent; + var parentNext = next.parent; + if (null === prev) { + if (null !== parentNext) + throw Error( + "The stacks must reach the root at the same time. This is a bug in React." + ); + } else { + if (null === parentNext) + throw Error( + "The stacks must reach the root at the same time. This is a bug in React." + ); + popToNearestCommonAncestor(prev, parentNext); + } + next.context._currentValue = next.value; + } +} +function popAllPrevious(prev) { + prev.context._currentValue = prev.parentValue; + prev = prev.parent; + null !== prev && popAllPrevious(prev); +} +function pushAllNext(next) { + var parentNext = next.parent; + null !== parentNext && pushAllNext(parentNext); + next.context._currentValue = next.value; +} +function popPreviousToCommonLevel(prev, next) { + prev.context._currentValue = prev.parentValue; + prev = prev.parent; + if (null === prev) + throw Error( + "The depth must equal at least at zero before reaching the root. This is a bug in React." + ); + prev.depth === next.depth + ? popToNearestCommonAncestor(prev, next) + : popPreviousToCommonLevel(prev, next); +} +function popNextToCommonLevel(prev, next) { + var parentNext = next.parent; + if (null === parentNext) + throw Error( + "The depth must equal at least at zero before reaching the root. This is a bug in React." + ); + prev.depth === parentNext.depth + ? popToNearestCommonAncestor(prev, parentNext) + : popNextToCommonLevel(prev, parentNext); + next.context._currentValue = next.value; +} +function switchContext(newSnapshot) { + var prev = currentActiveSnapshot; + prev !== newSnapshot && + (null === prev + ? pushAllNext(newSnapshot) + : null === newSnapshot + ? popAllPrevious(prev) + : prev.depth === newSnapshot.depth + ? popToNearestCommonAncestor(prev, newSnapshot) + : prev.depth > newSnapshot.depth + ? popPreviousToCommonLevel(prev, newSnapshot) + : popNextToCommonLevel(prev, newSnapshot), + (currentActiveSnapshot = newSnapshot)); +} +var classComponentUpdater = { + enqueueSetState: function (inst, payload) { + inst = inst._reactInternals; + null !== inst.queue && inst.queue.push(payload); + }, + enqueueReplaceState: function (inst, payload) { + inst = inst._reactInternals; + inst.replace = !0; + inst.queue = [payload]; + }, + enqueueForceUpdate: function () {} + }, + emptyTreeContext = { id: 1, overflow: "" }; +function pushTreeContext(baseContext, totalChildren, index) { + var baseIdWithLeadingBit = baseContext.id; + baseContext = baseContext.overflow; + var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1; + baseIdWithLeadingBit &= ~(1 << baseLength); + index += 1; + var length = 32 - clz32(totalChildren) + baseLength; + if (30 < length) { + var numberOfOverflowBits = baseLength - (baseLength % 5); + length = ( + baseIdWithLeadingBit & + ((1 << numberOfOverflowBits) - 1) + ).toString(32); + baseIdWithLeadingBit >>= numberOfOverflowBits; + baseLength -= numberOfOverflowBits; + return { + id: + (1 << (32 - clz32(totalChildren) + baseLength)) | + (index << baseLength) | + baseIdWithLeadingBit, + overflow: length + baseContext + }; + } + return { + id: (1 << length) | (index << baseLength) | baseIdWithLeadingBit, + overflow: baseContext + }; +} +var clz32 = Math.clz32 ? Math.clz32 : clz32Fallback, + log = Math.log, + LN2 = Math.LN2; +function clz32Fallback(x) { + x >>>= 0; + return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0; +} +function noop() {} +var SuspenseException = Error( + "Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`." +); +function trackUsedThenable(thenableState, thenable, index) { + index = thenableState[index]; + void 0 === index + ? thenableState.push(thenable) + : index !== thenable && (thenable.then(noop, noop), (thenable = index)); + switch (thenable.status) { + case "fulfilled": + return thenable.value; + case "rejected": + throw thenable.reason; + default: + "string" === typeof thenable.status + ? thenable.then(noop, noop) + : ((thenableState = thenable), + (thenableState.status = "pending"), + thenableState.then( + function (fulfilledValue) { + if ("pending" === thenable.status) { + var fulfilledThenable = thenable; + fulfilledThenable.status = "fulfilled"; + fulfilledThenable.value = fulfilledValue; + } + }, + function (error) { + if ("pending" === thenable.status) { + var rejectedThenable = thenable; + rejectedThenable.status = "rejected"; + rejectedThenable.reason = error; + } + } + )); + switch (thenable.status) { + case "fulfilled": + return thenable.value; + case "rejected": + throw thenable.reason; + } + suspendedThenable = thenable; + throw SuspenseException; + } +} +var suspendedThenable = null; +function getSuspendedThenable() { + if (null === suspendedThenable) + throw Error( + "Expected a suspended thenable. This is a bug in React. Please file an issue." + ); + var thenable = suspendedThenable; + suspendedThenable = null; + return thenable; +} +function is(x, y) { + return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y); +} +var objectIs = "function" === typeof Object.is ? Object.is : is, + currentlyRenderingComponent = null, + currentlyRenderingTask = null, + currentlyRenderingRequest = null, + currentlyRenderingKeyPath = null, + firstWorkInProgressHook = null, + workInProgressHook = null, + isReRender = !1, + didScheduleRenderPhaseUpdate = !1, + localIdCounter = 0, + actionStateCounter = 0, + actionStateMatchingIndex = -1, + thenableIndexCounter = 0, + thenableState = null, + renderPhaseUpdates = null, + numberOfReRenders = 0; +function resolveCurrentlyRenderingComponent() { + if (null === currentlyRenderingComponent) + throw Error( + "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem." + ); + return currentlyRenderingComponent; +} +function createHook() { + if (0 < numberOfReRenders) + throw Error("Rendered more hooks than during the previous render"); + return { memoizedState: null, queue: null, next: null }; +} +function createWorkInProgressHook() { + null === workInProgressHook + ? null === firstWorkInProgressHook + ? ((isReRender = !1), + (firstWorkInProgressHook = workInProgressHook = createHook())) + : ((isReRender = !0), (workInProgressHook = firstWorkInProgressHook)) + : null === workInProgressHook.next + ? ((isReRender = !1), + (workInProgressHook = workInProgressHook.next = createHook())) + : ((isReRender = !0), (workInProgressHook = workInProgressHook.next)); + return workInProgressHook; +} +function getThenableStateAfterSuspending() { + var state = thenableState; + thenableState = null; + return state; +} +function resetHooksState() { + currentlyRenderingKeyPath = + currentlyRenderingRequest = + currentlyRenderingTask = + currentlyRenderingComponent = + null; + didScheduleRenderPhaseUpdate = !1; + firstWorkInProgressHook = null; + numberOfReRenders = 0; + workInProgressHook = renderPhaseUpdates = null; +} +function basicStateReducer(state, action) { + return "function" === typeof action ? action(state) : action; +} +function useReducer(reducer, initialArg, init) { + currentlyRenderingComponent = resolveCurrentlyRenderingComponent(); + workInProgressHook = createWorkInProgressHook(); + if (isReRender) { + var queue = workInProgressHook.queue; + initialArg = queue.dispatch; + if ( + null !== renderPhaseUpdates && + ((init = renderPhaseUpdates.get(queue)), void 0 !== init) + ) { + renderPhaseUpdates.delete(queue); + queue = workInProgressHook.memoizedState; + do (queue = reducer(queue, init.action)), (init = init.next); + while (null !== init); + workInProgressHook.memoizedState = queue; + return [queue, initialArg]; + } + return [workInProgressHook.memoizedState, initialArg]; + } + reducer = + reducer === basicStateReducer + ? "function" === typeof initialArg + ? initialArg() + : initialArg + : void 0 !== init + ? init(initialArg) + : initialArg; + workInProgressHook.memoizedState = reducer; + reducer = workInProgressHook.queue = { last: null, dispatch: null }; + reducer = reducer.dispatch = dispatchAction.bind( + null, + currentlyRenderingComponent, + reducer + ); + return [workInProgressHook.memoizedState, reducer]; +} +function useMemo(nextCreate, deps) { + currentlyRenderingComponent = resolveCurrentlyRenderingComponent(); + workInProgressHook = createWorkInProgressHook(); + deps = void 0 === deps ? null : deps; + if (null !== workInProgressHook) { + var prevState = workInProgressHook.memoizedState; + if (null !== prevState && null !== deps) { + var prevDeps = prevState[1]; + a: if (null === prevDeps) prevDeps = !1; + else { + for (var i = 0; i < prevDeps.length && i < deps.length; i++) + if (!objectIs(deps[i], prevDeps[i])) { + prevDeps = !1; + break a; + } + prevDeps = !0; + } + if (prevDeps) return prevState[0]; + } + } + nextCreate = nextCreate(); + workInProgressHook.memoizedState = [nextCreate, deps]; + return nextCreate; +} +function dispatchAction(componentIdentity, queue, action) { + if (25 <= numberOfReRenders) + throw Error( + "Too many re-renders. React limits the number of renders to prevent an infinite loop." + ); + if (componentIdentity === currentlyRenderingComponent) + if ( + ((didScheduleRenderPhaseUpdate = !0), + (componentIdentity = { action: action, next: null }), + null === renderPhaseUpdates && (renderPhaseUpdates = new Map()), + (action = renderPhaseUpdates.get(queue)), + void 0 === action) + ) + renderPhaseUpdates.set(queue, componentIdentity); + else { + for (queue = action; null !== queue.next; ) queue = queue.next; + queue.next = componentIdentity; + } +} +function throwOnUseEffectEventCall() { + throw Error( + "A function wrapped in useEffectEvent can't be called during rendering." + ); +} +function unsupportedStartTransition() { + throw Error("startTransition cannot be called during server rendering."); +} +function unsupportedSetOptimisticState() { + throw Error("Cannot update optimistic state while rendering."); +} +function useActionState(action, initialState, permalink) { + resolveCurrentlyRenderingComponent(); + var actionStateHookIndex = actionStateCounter++, + request = currentlyRenderingRequest; + if ("function" === typeof action.$$FORM_ACTION) { + var nextPostbackStateKey = null, + componentKeyPath = currentlyRenderingKeyPath; + request = request.formState; + var isSignatureEqual = action.$$IS_SIGNATURE_EQUAL; + if (null !== request && "function" === typeof isSignatureEqual) { + var postbackKey = request[1]; + isSignatureEqual.call(action, request[2], request[3]) && + ((nextPostbackStateKey = + void 0 !== permalink + ? "p" + permalink + : "k" + + murmurhash3_32_gc( + JSON.stringify([componentKeyPath, null, actionStateHookIndex]), + 0 + )), + postbackKey === nextPostbackStateKey && + ((actionStateMatchingIndex = actionStateHookIndex), + (initialState = request[0]))); + } + var boundAction = action.bind(null, initialState); + action = function (payload) { + boundAction(payload); + }; + "function" === typeof boundAction.$$FORM_ACTION && + (action.$$FORM_ACTION = function (prefix) { + prefix = boundAction.$$FORM_ACTION(prefix); + void 0 !== permalink && + ((permalink += ""), (prefix.action = permalink)); + var formData = prefix.data; + formData && + (null === nextPostbackStateKey && + (nextPostbackStateKey = + void 0 !== permalink + ? "p" + permalink + : "k" + + murmurhash3_32_gc( + JSON.stringify([ + componentKeyPath, + null, + actionStateHookIndex + ]), + 0 + )), + formData.append("$ACTION_KEY", nextPostbackStateKey)); + return prefix; + }); + return [initialState, action, !1]; + } + var boundAction$22 = action.bind(null, initialState); + return [ + initialState, + function (payload) { + boundAction$22(payload); + }, + !1 + ]; +} +function unwrapThenable(thenable) { + var index = thenableIndexCounter; + thenableIndexCounter += 1; + null === thenableState && (thenableState = []); + return trackUsedThenable(thenableState, thenable, index); +} +function unsupportedRefresh() { + throw Error("Cache cannot be refreshed during server rendering."); +} +var HooksDispatcher = { + readContext: function (context) { + return context._currentValue; + }, + use: function (usable) { + if (null !== usable && "object" === typeof usable) { + if ("function" === typeof usable.then) return unwrapThenable(usable); + if (usable.$$typeof === REACT_CONTEXT_TYPE) return usable._currentValue; + } + throw Error("An unsupported type was passed to use(): " + String(usable)); + }, + useContext: function (context) { + resolveCurrentlyRenderingComponent(); + return context._currentValue; + }, + useMemo: useMemo, + useReducer: useReducer, + useRef: function (initialValue) { + currentlyRenderingComponent = resolveCurrentlyRenderingComponent(); + workInProgressHook = createWorkInProgressHook(); + var previousRef = workInProgressHook.memoizedState; + return null === previousRef + ? ((initialValue = { current: initialValue }), + (workInProgressHook.memoizedState = initialValue)) + : previousRef; + }, + useState: function (initialState) { + return useReducer(basicStateReducer, initialState); + }, + useInsertionEffect: noop, + useLayoutEffect: noop, + useCallback: function (callback, deps) { + return useMemo(function () { + return callback; + }, deps); + }, + useImperativeHandle: noop, + useEffect: noop, + useDebugValue: noop, + useDeferredValue: function (value, initialValue) { + resolveCurrentlyRenderingComponent(); + return void 0 !== initialValue ? initialValue : value; + }, + useTransition: function () { + resolveCurrentlyRenderingComponent(); + return [!1, unsupportedStartTransition]; + }, + useId: function () { + var JSCompiler_inline_result = currentlyRenderingTask.treeContext; + var overflow = JSCompiler_inline_result.overflow; + JSCompiler_inline_result = JSCompiler_inline_result.id; + JSCompiler_inline_result = + ( + JSCompiler_inline_result & + ~(1 << (32 - clz32(JSCompiler_inline_result) - 1)) + ).toString(32) + overflow; + var resumableState = currentResumableState; + if (null === resumableState) + throw Error( + "Invalid hook call. Hooks can only be called inside of the body of a function component." + ); + overflow = localIdCounter++; + JSCompiler_inline_result = + "_" + resumableState.idPrefix + "R_" + JSCompiler_inline_result; + 0 < overflow && (JSCompiler_inline_result += "H" + overflow.toString(32)); + return JSCompiler_inline_result + "_"; + }, + useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) { + if (void 0 === getServerSnapshot) + throw Error( + "Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering." + ); + return getServerSnapshot(); + }, + useOptimistic: function (passthrough) { + resolveCurrentlyRenderingComponent(); + return [passthrough, unsupportedSetOptimisticState]; + }, + useActionState: useActionState, + useFormState: useActionState, + useHostTransitionStatus: function () { + resolveCurrentlyRenderingComponent(); + return sharedNotPendingObject; + }, + useMemoCache: function (size) { + for (var data = Array(size), i = 0; i < size; i++) + data[i] = REACT_MEMO_CACHE_SENTINEL; + return data; + }, + useCacheRefresh: function () { + return unsupportedRefresh; + }, + useEffectEvent: function () { + return throwOnUseEffectEventCall; + } + }, + currentResumableState = null, + DefaultAsyncDispatcher = { + getCacheForType: function () { + throw Error("Not implemented."); + }, + cacheSignal: function () { + throw Error("Not implemented."); + } + }; +function prepareStackTrace(error, structuredStackTrace) { + error = (error.name || "Error") + ": " + (error.message || ""); + for (var i = 0; i < structuredStackTrace.length; i++) + error += "\n at " + structuredStackTrace[i].toString(); + return error; +} +var prefix, suffix; +function describeBuiltInComponentFrame(name) { + if (void 0 === prefix) + try { + throw Error(); + } catch (x) { + var match = x.stack.trim().match(/\n( *(at )?)/); + prefix = (match && match[1]) || ""; + suffix = + -1 < x.stack.indexOf("\n at") + ? " (<anonymous>)" + : -1 < x.stack.indexOf("@") + ? "@unknown:0:0" + : ""; + } + return "\n" + prefix + name + suffix; +} +var reentry = !1; +function describeNativeComponentFrame(fn, construct) { + if (!fn || reentry) return ""; + reentry = !0; + var previousPrepareStackTrace = Error.prepareStackTrace; + Error.prepareStackTrace = prepareStackTrace; + try { + var RunInRootFrame = { + DetermineComponentFrameRoot: function () { + try { + if (construct) { + var Fake = function () { + throw Error(); + }; + Object.defineProperty(Fake.prototype, "props", { + set: function () { + throw Error(); + } + }); + if ("object" === typeof Reflect && Reflect.construct) { + try { + Reflect.construct(Fake, []); + } catch (x) { + var control = x; + } + Reflect.construct(fn, [], Fake); + } else { + try { + Fake.call(); + } catch (x$24) { + control = x$24; + } + fn.call(Fake.prototype); + } + } else { + try { + throw Error(); + } catch (x$25) { + control = x$25; + } + (Fake = fn()) && + "function" === typeof Fake.catch && + Fake.catch(function () {}); + } + } catch (sample) { + if (sample && control && "string" === typeof sample.stack) + return [sample.stack, control.stack]; + } + return [null, null]; + } + }; + RunInRootFrame.DetermineComponentFrameRoot.displayName = + "DetermineComponentFrameRoot"; + var namePropDescriptor = Object.getOwnPropertyDescriptor( + RunInRootFrame.DetermineComponentFrameRoot, + "name" + ); + namePropDescriptor && + namePropDescriptor.configurable && + Object.defineProperty( + RunInRootFrame.DetermineComponentFrameRoot, + "name", + { value: "DetermineComponentFrameRoot" } + ); + var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(), + sampleStack = _RunInRootFrame$Deter[0], + controlStack = _RunInRootFrame$Deter[1]; + if (sampleStack && controlStack) { + var sampleLines = sampleStack.split("\n"), + controlLines = controlStack.split("\n"); + for ( + namePropDescriptor = RunInRootFrame = 0; + RunInRootFrame < sampleLines.length && + !sampleLines[RunInRootFrame].includes("DetermineComponentFrameRoot"); + + ) + RunInRootFrame++; + for ( + ; + namePropDescriptor < controlLines.length && + !controlLines[namePropDescriptor].includes( + "DetermineComponentFrameRoot" + ); + + ) + namePropDescriptor++; + if ( + RunInRootFrame === sampleLines.length || + namePropDescriptor === controlLines.length + ) + for ( + RunInRootFrame = sampleLines.length - 1, + namePropDescriptor = controlLines.length - 1; + 1 <= RunInRootFrame && + 0 <= namePropDescriptor && + sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]; + + ) + namePropDescriptor--; + for ( + ; + 1 <= RunInRootFrame && 0 <= namePropDescriptor; + RunInRootFrame--, namePropDescriptor-- + ) + if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) { + if (1 !== RunInRootFrame || 1 !== namePropDescriptor) { + do + if ( + (RunInRootFrame--, + namePropDescriptor--, + 0 > namePropDescriptor || + sampleLines[RunInRootFrame] !== + controlLines[namePropDescriptor]) + ) { + var frame = + "\n" + + sampleLines[RunInRootFrame].replace(" at new ", " at "); + fn.displayName && + frame.includes("<anonymous>") && + (frame = frame.replace("<anonymous>", fn.displayName)); + return frame; + } + while (1 <= RunInRootFrame && 0 <= namePropDescriptor); + } + break; + } + } + } finally { + (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace); + } + return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : "") + ? describeBuiltInComponentFrame(previousPrepareStackTrace) + : ""; +} +function describeComponentStackByType(type) { + if ("string" === typeof type) return describeBuiltInComponentFrame(type); + if ("function" === typeof type) + return type.prototype && type.prototype.isReactComponent + ? describeNativeComponentFrame(type, !0) + : describeNativeComponentFrame(type, !1); + if ("object" === typeof type && null !== type) { + switch (type.$$typeof) { + case REACT_FORWARD_REF_TYPE: + return describeNativeComponentFrame(type.render, !1); + case REACT_MEMO_TYPE: + return describeNativeComponentFrame(type.type, !1); + case REACT_LAZY_TYPE: + var lazyComponent = type, + payload = lazyComponent._payload; + lazyComponent = lazyComponent._init; + try { + type = lazyComponent(payload); + } catch (x) { + return describeBuiltInComponentFrame("Lazy"); + } + return describeComponentStackByType(type); + } + if ("string" === typeof type.name) { + a: { + payload = type.name; + lazyComponent = type.env; + var location = type.debugLocation; + if ( + null != location && + ((type = Error.prepareStackTrace), + (Error.prepareStackTrace = prepareStackTrace), + (location = location.stack), + (Error.prepareStackTrace = type), + location.startsWith("Error: react-stack-top-frame\n") && + (location = location.slice(29)), + (type = location.indexOf("\n")), + -1 !== type && (location = location.slice(type + 1)), + (type = location.indexOf("react_stack_bottom_frame")), + -1 !== type && (type = location.lastIndexOf("\n", type)), + (type = -1 !== type ? (location = location.slice(0, type)) : ""), + (location = type.lastIndexOf("\n")), + (type = -1 === location ? type : type.slice(location + 1)), + -1 !== type.indexOf(payload)) + ) { + payload = "\n" + type; + break a; + } + payload = describeBuiltInComponentFrame( + payload + (lazyComponent ? " [" + lazyComponent + "]" : "") + ); + } + return payload; + } + } + switch (type) { + case REACT_SUSPENSE_LIST_TYPE: + return describeBuiltInComponentFrame("SuspenseList"); + case REACT_SUSPENSE_TYPE: + return describeBuiltInComponentFrame("Suspense"); + } + return ""; +} +function isEligibleForOutlining(request, boundary) { + return ( + (500 < boundary.byteSize || hasSuspenseyContent(boundary.contentState)) && + null === boundary.contentPreamble + ); +} +function defaultErrorHandler(error) { + if ( + "object" === typeof error && + null !== error && + "string" === typeof error.environmentName + ) { + var JSCompiler_inline_result = error.environmentName; + error = [error].slice(0); + "string" === typeof error[0] + ? error.splice( + 0, + 1, + "\u001b[0m\u001b[7m%c%s\u001b[0m%c " + error[0], + "background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px", + " " + JSCompiler_inline_result + " ", + "" + ) + : error.splice( + 0, + 0, + "\u001b[0m\u001b[7m%c%s\u001b[0m%c", + "background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px", + " " + JSCompiler_inline_result + " ", + "" + ); + error.unshift(console); + JSCompiler_inline_result = bind.apply(console.error, error); + JSCompiler_inline_result(); + } else console.error(error); + return null; +} +function RequestInstance( + resumableState, + renderState, + rootFormatContext, + progressiveChunkSize, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone, + formState +) { + var abortSet = new Set(); + this.destination = null; + this.flushScheduled = !1; + this.resumableState = resumableState; + this.renderState = renderState; + this.rootFormatContext = rootFormatContext; + this.progressiveChunkSize = + void 0 === progressiveChunkSize ? 12800 : progressiveChunkSize; + this.status = 10; + this.fatalError = null; + this.pendingRootTasks = this.allPendingTasks = this.nextSegmentId = 0; + this.completedPreambleSegments = this.completedRootSegment = null; + this.byteSize = 0; + this.abortableTasks = abortSet; + this.pingedTasks = []; + this.clientRenderedBoundaries = []; + this.completedBoundaries = []; + this.partialBoundaries = []; + this.trackedPostpones = null; + this.onError = void 0 === onError ? defaultErrorHandler : onError; + this.onPostpone = void 0 === onPostpone ? noop : onPostpone; + this.onAllReady = void 0 === onAllReady ? noop : onAllReady; + this.onShellReady = void 0 === onShellReady ? noop : onShellReady; + this.onShellError = void 0 === onShellError ? noop : onShellError; + this.onFatalError = void 0 === onFatalError ? noop : onFatalError; + this.formState = void 0 === formState ? null : formState; +} +function createRequest( + children, + resumableState, + renderState, + rootFormatContext, + progressiveChunkSize, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone, + formState +) { + resumableState = new RequestInstance( + resumableState, + renderState, + rootFormatContext, + progressiveChunkSize, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone, + formState + ); + renderState = createPendingSegment( + resumableState, + 0, + null, + rootFormatContext, + !1, + !1 + ); + renderState.parentFlushed = !0; + children = createRenderTask( + resumableState, + null, + children, + -1, + null, + renderState, + null, + null, + resumableState.abortableTasks, + null, + rootFormatContext, + null, + emptyTreeContext, + null, + null + ); + pushComponentStack(children); + resumableState.pingedTasks.push(children); + return resumableState; +} +function createPrerenderRequest( + children, + resumableState, + renderState, + rootFormatContext, + progressiveChunkSize, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone +) { + children = createRequest( + children, + resumableState, + renderState, + rootFormatContext, + progressiveChunkSize, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone, + void 0 + ); + children.trackedPostpones = { + workingMap: new Map(), + rootNodes: [], + rootSlots: null + }; + return children; +} +function resumeRequest( + children, + postponedState, + renderState, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone +) { + renderState = new RequestInstance( + postponedState.resumableState, + renderState, + postponedState.rootFormatContext, + postponedState.progressiveChunkSize, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone, + null + ); + renderState.nextSegmentId = postponedState.nextSegmentId; + if ("number" === typeof postponedState.replaySlots) + return ( + (onError = createPendingSegment( + renderState, + 0, + null, + postponedState.rootFormatContext, + !1, + !1 + )), + (onError.parentFlushed = !0), + (children = createRenderTask( + renderState, + null, + children, + -1, + null, + onError, + null, + null, + renderState.abortableTasks, + null, + postponedState.rootFormatContext, + null, + emptyTreeContext, + null, + null + )), + pushComponentStack(children), + renderState.pingedTasks.push(children), + renderState + ); + children = createReplayTask( + renderState, + null, + { + nodes: postponedState.replayNodes, + slots: postponedState.replaySlots, + pendingTasks: 0 + }, + children, + -1, + null, + null, + renderState.abortableTasks, + null, + postponedState.rootFormatContext, + null, + emptyTreeContext, + null, + null + ); + pushComponentStack(children); + renderState.pingedTasks.push(children); + return renderState; +} +function resumeAndPrerenderRequest( + children, + postponedState, + renderState, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone +) { + children = resumeRequest( + children, + postponedState, + renderState, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone + ); + children.trackedPostpones = { + workingMap: new Map(), + rootNodes: [], + rootSlots: null + }; + return children; +} +var currentRequest = null; +function resolveRequest() { + if (currentRequest) return currentRequest; + if (supportsRequestStorage) { + var store = requestStorage.getStore(); + if (store) return store; + } + return null; +} +function pingTask(request, task) { + request.pingedTasks.push(task); + 1 === request.pingedTasks.length && + ((request.flushScheduled = null !== request.destination), + null !== request.trackedPostpones || 10 === request.status + ? scheduleMicrotask(function () { + return performWork(request); + }) + : setTimeout(function () { + return performWork(request); + }, 0)); +} +function createSuspenseBoundary( + request, + row, + fallbackAbortableTasks, + contentPreamble, + fallbackPreamble +) { + fallbackAbortableTasks = { + status: 0, + rootSegmentID: -1, + parentFlushed: !1, + pendingTasks: 0, + row: row, + completedSegments: [], + byteSize: 0, + fallbackAbortableTasks: fallbackAbortableTasks, + errorDigest: null, + contentState: createHoistableState(), + fallbackState: createHoistableState(), + contentPreamble: contentPreamble, + fallbackPreamble: fallbackPreamble, + trackedContentKeyPath: null, + trackedFallbackNode: null + }; + null !== row && + (row.pendingTasks++, + (contentPreamble = row.boundaries), + null !== contentPreamble && + (request.allPendingTasks++, + fallbackAbortableTasks.pendingTasks++, + contentPreamble.push(fallbackAbortableTasks)), + (request = row.inheritedHoistables), + null !== request && + hoistHoistables(fallbackAbortableTasks.contentState, request)); + return fallbackAbortableTasks; +} +function createRenderTask( + request, + thenableState, + node, + childIndex, + blockedBoundary, + blockedSegment, + blockedPreamble, + hoistableState, + abortSet, + keyPath, + formatContext, + context, + treeContext, + row, + componentStack +) { + request.allPendingTasks++; + null === blockedBoundary + ? request.pendingRootTasks++ + : blockedBoundary.pendingTasks++; + null !== row && row.pendingTasks++; + var task = { + replay: null, + node: node, + childIndex: childIndex, + ping: function () { + return pingTask(request, task); + }, + blockedBoundary: blockedBoundary, + blockedSegment: blockedSegment, + blockedPreamble: blockedPreamble, + hoistableState: hoistableState, + abortSet: abortSet, + keyPath: keyPath, + formatContext: formatContext, + context: context, + treeContext: treeContext, + row: row, + componentStack: componentStack, + thenableState: thenableState + }; + abortSet.add(task); + return task; +} +function createReplayTask( + request, + thenableState, + replay, + node, + childIndex, + blockedBoundary, + hoistableState, + abortSet, + keyPath, + formatContext, + context, + treeContext, + row, + componentStack +) { + request.allPendingTasks++; + null === blockedBoundary + ? request.pendingRootTasks++ + : blockedBoundary.pendingTasks++; + null !== row && row.pendingTasks++; + replay.pendingTasks++; + var task = { + replay: replay, + node: node, + childIndex: childIndex, + ping: function () { + return pingTask(request, task); + }, + blockedBoundary: blockedBoundary, + blockedSegment: null, + blockedPreamble: null, + hoistableState: hoistableState, + abortSet: abortSet, + keyPath: keyPath, + formatContext: formatContext, + context: context, + treeContext: treeContext, + row: row, + componentStack: componentStack, + thenableState: thenableState + }; + abortSet.add(task); + return task; +} +function createPendingSegment( + request, + index, + boundary, + parentFormatContext, + lastPushedText, + textEmbedded +) { + return { + status: 0, + parentFlushed: !1, + id: -1, + index: index, + chunks: [], + children: [], + preambleChildren: [], + parentFormatContext: parentFormatContext, + boundary: boundary, + lastPushedText: lastPushedText, + textEmbedded: textEmbedded + }; +} +function pushComponentStack(task) { + var node = task.node; + if ("object" === typeof node && null !== node) + switch (node.$$typeof) { + case REACT_ELEMENT_TYPE: + task.componentStack = { parent: task.componentStack, type: node.type }; + } +} +function replaceSuspenseComponentStackWithSuspenseFallbackStack( + componentStack +) { + return null === componentStack + ? null + : { parent: componentStack.parent, type: "Suspense Fallback" }; +} +function getThrownInfo(node$jscomp$0) { + var errorInfo = {}; + node$jscomp$0 && + Object.defineProperty(errorInfo, "componentStack", { + configurable: !0, + enumerable: !0, + get: function () { + try { + var info = "", + node = node$jscomp$0; + do + (info += describeComponentStackByType(node.type)), + (node = node.parent); + while (node); + var JSCompiler_inline_result = info; + } catch (x) { + JSCompiler_inline_result = + "\nError generating stack: " + x.message + "\n" + x.stack; + } + Object.defineProperty(errorInfo, "componentStack", { + value: JSCompiler_inline_result + }); + return JSCompiler_inline_result; + } + }); + return errorInfo; +} +function logRecoverableError(request, error, errorInfo) { + request = request.onError; + error = request(error, errorInfo); + if (null == error || "string" === typeof error) return error; +} +function fatalError(request, error) { + var onShellError = request.onShellError, + onFatalError = request.onFatalError; + onShellError(error); + onFatalError(error); + null !== request.destination + ? ((request.status = 14), closeWithError(request.destination, error)) + : ((request.status = 13), (request.fatalError = error)); +} +function finishSuspenseListRow(request, row) { + unblockSuspenseListRow(request, row.next, row.hoistables); +} +function unblockSuspenseListRow(request, unblockedRow, inheritedHoistables) { + for (; null !== unblockedRow; ) { + null !== inheritedHoistables && + (hoistHoistables(unblockedRow.hoistables, inheritedHoistables), + (unblockedRow.inheritedHoistables = inheritedHoistables)); + var unblockedBoundaries = unblockedRow.boundaries; + if (null !== unblockedBoundaries) { + unblockedRow.boundaries = null; + for (var i = 0; i < unblockedBoundaries.length; i++) { + var unblockedBoundary = unblockedBoundaries[i]; + null !== inheritedHoistables && + hoistHoistables(unblockedBoundary.contentState, inheritedHoistables); + finishedTask(request, unblockedBoundary, null, null); + } + } + unblockedRow.pendingTasks--; + if (0 < unblockedRow.pendingTasks) break; + inheritedHoistables = unblockedRow.hoistables; + unblockedRow = unblockedRow.next; + } +} +function tryToResolveTogetherRow(request, togetherRow) { + var boundaries = togetherRow.boundaries; + if (null !== boundaries && togetherRow.pendingTasks === boundaries.length) { + for (var allCompleteAndInlinable = !0, i = 0; i < boundaries.length; i++) { + var rowBoundary = boundaries[i]; + if ( + 1 !== rowBoundary.pendingTasks || + rowBoundary.parentFlushed || + isEligibleForOutlining(request, rowBoundary) + ) { + allCompleteAndInlinable = !1; + break; + } + } + allCompleteAndInlinable && + unblockSuspenseListRow(request, togetherRow, togetherRow.hoistables); + } +} +function createSuspenseListRow(previousRow) { + var newRow = { + pendingTasks: 1, + boundaries: null, + hoistables: createHoistableState(), + inheritedHoistables: null, + together: !1, + next: null + }; + null !== previousRow && + 0 < previousRow.pendingTasks && + (newRow.pendingTasks++, + (newRow.boundaries = []), + (previousRow.next = newRow)); + return newRow; +} +function renderSuspenseListRows(request, task, keyPath, rows, revealOrder) { + var prevKeyPath = task.keyPath, + prevTreeContext = task.treeContext, + prevRow = task.row; + task.keyPath = keyPath; + keyPath = rows.length; + var previousSuspenseListRow = null; + if (null !== task.replay) { + var resumeSlots = task.replay.slots; + if (null !== resumeSlots && "object" === typeof resumeSlots) + for (var n = 0; n < keyPath; n++) { + var i = + "backwards" !== revealOrder && + "unstable_legacy-backwards" !== revealOrder + ? n + : keyPath - 1 - n, + node = rows[i]; + task.row = previousSuspenseListRow = createSuspenseListRow( + previousSuspenseListRow + ); + task.treeContext = pushTreeContext(prevTreeContext, keyPath, i); + var resumeSegmentID = resumeSlots[i]; + "number" === typeof resumeSegmentID + ? (resumeNode(request, task, resumeSegmentID, node, i), + delete resumeSlots[i]) + : renderNode(request, task, node, i); + 0 === --previousSuspenseListRow.pendingTasks && + finishSuspenseListRow(request, previousSuspenseListRow); + } + else + for (resumeSlots = 0; resumeSlots < keyPath; resumeSlots++) + (n = + "backwards" !== revealOrder && + "unstable_legacy-backwards" !== revealOrder + ? resumeSlots + : keyPath - 1 - resumeSlots), + (i = rows[n]), + (task.row = previousSuspenseListRow = + createSuspenseListRow(previousSuspenseListRow)), + (task.treeContext = pushTreeContext(prevTreeContext, keyPath, n)), + renderNode(request, task, i, n), + 0 === --previousSuspenseListRow.pendingTasks && + finishSuspenseListRow(request, previousSuspenseListRow); + } else if ( + "backwards" !== revealOrder && + "unstable_legacy-backwards" !== revealOrder + ) + for (revealOrder = 0; revealOrder < keyPath; revealOrder++) + (resumeSlots = rows[revealOrder]), + (task.row = previousSuspenseListRow = + createSuspenseListRow(previousSuspenseListRow)), + (task.treeContext = pushTreeContext( + prevTreeContext, + keyPath, + revealOrder + )), + renderNode(request, task, resumeSlots, revealOrder), + 0 === --previousSuspenseListRow.pendingTasks && + finishSuspenseListRow(request, previousSuspenseListRow); + else { + revealOrder = task.blockedSegment; + resumeSlots = revealOrder.children.length; + n = revealOrder.chunks.length; + for (i = keyPath - 1; 0 <= i; i--) { + node = rows[i]; + task.row = previousSuspenseListRow = createSuspenseListRow( + previousSuspenseListRow + ); + task.treeContext = pushTreeContext(prevTreeContext, keyPath, i); + resumeSegmentID = createPendingSegment( + request, + n, + null, + task.formatContext, + 0 === i ? revealOrder.lastPushedText : !0, + !0 + ); + revealOrder.children.splice(resumeSlots, 0, resumeSegmentID); + task.blockedSegment = resumeSegmentID; + try { + renderNode(request, task, node, i), + resumeSegmentID.lastPushedText && + resumeSegmentID.textEmbedded && + resumeSegmentID.chunks.push(textSeparator), + (resumeSegmentID.status = 1), + finishedSegment(request, task.blockedBoundary, resumeSegmentID), + 0 === --previousSuspenseListRow.pendingTasks && + finishSuspenseListRow(request, previousSuspenseListRow); + } catch (thrownValue) { + throw ( + ((resumeSegmentID.status = 12 === request.status ? 3 : 4), + thrownValue) + ); + } + } + task.blockedSegment = revealOrder; + revealOrder.lastPushedText = !1; + } + null !== prevRow && + null !== previousSuspenseListRow && + 0 < previousSuspenseListRow.pendingTasks && + (prevRow.pendingTasks++, (previousSuspenseListRow.next = prevRow)); + task.treeContext = prevTreeContext; + task.row = prevRow; + task.keyPath = prevKeyPath; +} +function renderWithHooks(request, task, keyPath, Component, props, secondArg) { + var prevThenableState = task.thenableState; + task.thenableState = null; + currentlyRenderingComponent = {}; + currentlyRenderingTask = task; + currentlyRenderingRequest = request; + currentlyRenderingKeyPath = keyPath; + actionStateCounter = localIdCounter = 0; + actionStateMatchingIndex = -1; + thenableIndexCounter = 0; + thenableState = prevThenableState; + for (request = Component(props, secondArg); didScheduleRenderPhaseUpdate; ) + (didScheduleRenderPhaseUpdate = !1), + (actionStateCounter = localIdCounter = 0), + (actionStateMatchingIndex = -1), + (thenableIndexCounter = 0), + (numberOfReRenders += 1), + (workInProgressHook = null), + (request = Component(props, secondArg)); + resetHooksState(); + return request; +} +function finishFunctionComponent( + request, + task, + keyPath, + children, + hasId, + actionStateCount, + actionStateMatchingIndex +) { + var didEmitActionStateMarkers = !1; + if (0 !== actionStateCount && null !== request.formState) { + var segment = task.blockedSegment; + if (null !== segment) { + didEmitActionStateMarkers = !0; + segment = segment.chunks; + for (var i = 0; i < actionStateCount; i++) + i === actionStateMatchingIndex + ? segment.push(formStateMarkerIsMatching) + : segment.push(formStateMarkerIsNotMatching); + } + } + actionStateCount = task.keyPath; + task.keyPath = keyPath; + hasId + ? ((keyPath = task.treeContext), + (task.treeContext = pushTreeContext(keyPath, 1, 0)), + renderNode(request, task, children, -1), + (task.treeContext = keyPath)) + : didEmitActionStateMarkers + ? renderNode(request, task, children, -1) + : renderNodeDestructive(request, task, children, -1); + task.keyPath = actionStateCount; +} +function renderElement(request, task, keyPath, type, props, ref) { + if ("function" === typeof type) + if (type.prototype && type.prototype.isReactComponent) { + var newProps = props; + if ("ref" in props) { + newProps = {}; + for (var propName in props) + "ref" !== propName && (newProps[propName] = props[propName]); + } + var defaultProps = type.defaultProps; + if (defaultProps) { + newProps === props && (newProps = assign({}, newProps, props)); + for (var propName$44 in defaultProps) + void 0 === newProps[propName$44] && + (newProps[propName$44] = defaultProps[propName$44]); + } + props = newProps; + newProps = emptyContextObject; + defaultProps = type.contextType; + "object" === typeof defaultProps && + null !== defaultProps && + (newProps = defaultProps._currentValue); + newProps = new type(props, newProps); + var initialState = void 0 !== newProps.state ? newProps.state : null; + newProps.updater = classComponentUpdater; + newProps.props = props; + newProps.state = initialState; + defaultProps = { queue: [], replace: !1 }; + newProps._reactInternals = defaultProps; + ref = type.contextType; + newProps.context = + "object" === typeof ref && null !== ref + ? ref._currentValue + : emptyContextObject; + ref = type.getDerivedStateFromProps; + "function" === typeof ref && + ((ref = ref(props, initialState)), + (initialState = + null === ref || void 0 === ref + ? initialState + : assign({}, initialState, ref)), + (newProps.state = initialState)); + if ( + "function" !== typeof type.getDerivedStateFromProps && + "function" !== typeof newProps.getSnapshotBeforeUpdate && + ("function" === typeof newProps.UNSAFE_componentWillMount || + "function" === typeof newProps.componentWillMount) + ) + if ( + ((type = newProps.state), + "function" === typeof newProps.componentWillMount && + newProps.componentWillMount(), + "function" === typeof newProps.UNSAFE_componentWillMount && + newProps.UNSAFE_componentWillMount(), + type !== newProps.state && + classComponentUpdater.enqueueReplaceState( + newProps, + newProps.state, + null + ), + null !== defaultProps.queue && 0 < defaultProps.queue.length) + ) + if ( + ((type = defaultProps.queue), + (ref = defaultProps.replace), + (defaultProps.queue = null), + (defaultProps.replace = !1), + ref && 1 === type.length) + ) + newProps.state = type[0]; + else { + defaultProps = ref ? type[0] : newProps.state; + initialState = !0; + for (ref = ref ? 1 : 0; ref < type.length; ref++) + (propName$44 = type[ref]), + (propName$44 = + "function" === typeof propName$44 + ? propName$44.call(newProps, defaultProps, props, void 0) + : propName$44), + null != propName$44 && + (initialState + ? ((initialState = !1), + (defaultProps = assign({}, defaultProps, propName$44))) + : assign(defaultProps, propName$44)); + newProps.state = defaultProps; + } + else defaultProps.queue = null; + type = newProps.render(); + if (12 === request.status) throw null; + props = task.keyPath; + task.keyPath = keyPath; + renderNodeDestructive(request, task, type, -1); + task.keyPath = props; + } else { + type = renderWithHooks(request, task, keyPath, type, props, void 0); + if (12 === request.status) throw null; + finishFunctionComponent( + request, + task, + keyPath, + type, + 0 !== localIdCounter, + actionStateCounter, + actionStateMatchingIndex + ); + } + else if ("string" === typeof type) + if (((newProps = task.blockedSegment), null === newProps)) + (newProps = props.children), + (defaultProps = task.formatContext), + (initialState = task.keyPath), + (task.formatContext = getChildFormatContext(defaultProps, type, props)), + (task.keyPath = keyPath), + renderNode(request, task, newProps, -1), + (task.formatContext = defaultProps), + (task.keyPath = initialState); + else { + initialState = pushStartInstance( + newProps.chunks, + type, + props, + request.resumableState, + request.renderState, + task.blockedPreamble, + task.hoistableState, + task.formatContext, + newProps.lastPushedText + ); + newProps.lastPushedText = !1; + defaultProps = task.formatContext; + ref = task.keyPath; + task.keyPath = keyPath; + if ( + 3 === + (task.formatContext = getChildFormatContext(defaultProps, type, props)) + .insertionMode + ) { + keyPath = createPendingSegment( + request, + 0, + null, + task.formatContext, + !1, + !1 + ); + newProps.preambleChildren.push(keyPath); + task.blockedSegment = keyPath; + try { + (keyPath.status = 6), + renderNode(request, task, initialState, -1), + keyPath.lastPushedText && + keyPath.textEmbedded && + keyPath.chunks.push(textSeparator), + (keyPath.status = 1), + finishedSegment(request, task.blockedBoundary, keyPath); + } finally { + task.blockedSegment = newProps; + } + } else renderNode(request, task, initialState, -1); + task.formatContext = defaultProps; + task.keyPath = ref; + a: { + task = newProps.chunks; + request = request.resumableState; + switch (type) { + case "title": + case "style": + case "script": + case "area": + case "base": + case "br": + case "col": + case "embed": + case "hr": + case "img": + case "input": + case "keygen": + case "link": + case "meta": + case "param": + case "source": + case "track": + case "wbr": + break a; + case "body": + if (1 >= defaultProps.insertionMode) { + request.hasBody = !0; + break a; + } + break; + case "html": + if (0 === defaultProps.insertionMode) { + request.hasHtml = !0; + break a; + } + break; + case "head": + if (1 >= defaultProps.insertionMode) break a; + } + task.push(endChunkForTag(type)); + } + newProps.lastPushedText = !1; + } + else { + switch (type) { + case REACT_LEGACY_HIDDEN_TYPE: + case REACT_STRICT_MODE_TYPE: + case REACT_PROFILER_TYPE: + case REACT_FRAGMENT_TYPE: + type = task.keyPath; + task.keyPath = keyPath; + renderNodeDestructive(request, task, props.children, -1); + task.keyPath = type; + return; + case REACT_ACTIVITY_TYPE: + type = task.blockedSegment; + null === type + ? "hidden" !== props.mode && + ((type = task.keyPath), + (task.keyPath = keyPath), + renderNode(request, task, props.children, -1), + (task.keyPath = type)) + : "hidden" !== props.mode && + (type.chunks.push(startActivityBoundary), + (type.lastPushedText = !1), + (newProps = task.keyPath), + (task.keyPath = keyPath), + renderNode(request, task, props.children, -1), + (task.keyPath = newProps), + type.chunks.push(endActivityBoundary), + (type.lastPushedText = !1)); + return; + case REACT_SUSPENSE_LIST_TYPE: + a: { + type = props.children; + props = props.revealOrder; + if ( + "forwards" === props || + "backwards" === props || + "unstable_legacy-backwards" === props + ) { + if (isArrayImpl(type)) { + renderSuspenseListRows(request, task, keyPath, type, props); + break a; + } + if ((newProps = getIteratorFn(type))) + if ((newProps = newProps.call(type))) { + defaultProps = newProps.next(); + if (!defaultProps.done) { + do defaultProps = newProps.next(); + while (!defaultProps.done); + renderSuspenseListRows(request, task, keyPath, type, props); + } + break a; + } + } + "together" === props + ? ((props = task.keyPath), + (newProps = task.row), + (defaultProps = task.row = createSuspenseListRow(null)), + (defaultProps.boundaries = []), + (defaultProps.together = !0), + (task.keyPath = keyPath), + renderNodeDestructive(request, task, type, -1), + 0 === --defaultProps.pendingTasks && + finishSuspenseListRow(request, defaultProps), + (task.keyPath = props), + (task.row = newProps), + null !== newProps && + 0 < defaultProps.pendingTasks && + (newProps.pendingTasks++, (defaultProps.next = newProps))) + : ((props = task.keyPath), + (task.keyPath = keyPath), + renderNodeDestructive(request, task, type, -1), + (task.keyPath = props)); + } + return; + case REACT_VIEW_TRANSITION_TYPE: + case REACT_SCOPE_TYPE: + throw Error("ReactDOMServer does not yet support scope components."); + case REACT_SUSPENSE_TYPE: + a: if (null !== task.replay) { + type = task.keyPath; + newProps = task.formatContext; + defaultProps = task.row; + task.keyPath = keyPath; + task.formatContext = getSuspenseContentFormatContext( + request.resumableState, + newProps + ); + task.row = null; + keyPath = props.children; + try { + renderNode(request, task, keyPath, -1); + } finally { + (task.keyPath = type), + (task.formatContext = newProps), + (task.row = defaultProps); + } + } else { + type = task.keyPath; + ref = task.formatContext; + var prevRow = task.row; + propName$44 = task.blockedBoundary; + propName = task.blockedPreamble; + var parentHoistableState = task.hoistableState, + parentSegment = task.blockedSegment, + fallback = props.fallback; + props = props.children; + var fallbackAbortSet = new Set(); + var newBoundary = + 2 > task.formatContext.insertionMode + ? createSuspenseBoundary( + request, + task.row, + fallbackAbortSet, + createPreambleState(), + createPreambleState() + ) + : createSuspenseBoundary( + request, + task.row, + fallbackAbortSet, + null, + null + ); + null !== request.trackedPostpones && + (newBoundary.trackedContentKeyPath = keyPath); + var boundarySegment = createPendingSegment( + request, + parentSegment.chunks.length, + newBoundary, + task.formatContext, + !1, + !1 + ); + parentSegment.children.push(boundarySegment); + parentSegment.lastPushedText = !1; + var contentRootSegment = createPendingSegment( + request, + 0, + null, + task.formatContext, + !1, + !1 + ); + contentRootSegment.parentFlushed = !0; + if (null !== request.trackedPostpones) { + newProps = task.componentStack; + defaultProps = [keyPath[0], "Suspense Fallback", keyPath[2]]; + initialState = [defaultProps[1], defaultProps[2], [], null]; + request.trackedPostpones.workingMap.set(defaultProps, initialState); + newBoundary.trackedFallbackNode = initialState; + task.blockedSegment = boundarySegment; + task.blockedPreamble = newBoundary.fallbackPreamble; + task.keyPath = defaultProps; + task.formatContext = getSuspenseFallbackFormatContext( + request.resumableState, + ref + ); + task.componentStack = + replaceSuspenseComponentStackWithSuspenseFallbackStack(newProps); + boundarySegment.status = 6; + try { + renderNode(request, task, fallback, -1), + boundarySegment.lastPushedText && + boundarySegment.textEmbedded && + boundarySegment.chunks.push(textSeparator), + (boundarySegment.status = 1), + finishedSegment(request, propName$44, boundarySegment); + } catch (thrownValue) { + throw ( + ((boundarySegment.status = 12 === request.status ? 3 : 4), + thrownValue) + ); + } finally { + (task.blockedSegment = parentSegment), + (task.blockedPreamble = propName), + (task.keyPath = type), + (task.formatContext = ref); + } + task = createRenderTask( + request, + null, + props, + -1, + newBoundary, + contentRootSegment, + newBoundary.contentPreamble, + newBoundary.contentState, + task.abortSet, + keyPath, + getSuspenseContentFormatContext( + request.resumableState, + task.formatContext + ), + task.context, + task.treeContext, + null, + newProps + ); + pushComponentStack(task); + request.pingedTasks.push(task); + } else { + task.blockedBoundary = newBoundary; + task.blockedPreamble = newBoundary.contentPreamble; + task.hoistableState = newBoundary.contentState; + task.blockedSegment = contentRootSegment; + task.keyPath = keyPath; + task.formatContext = getSuspenseContentFormatContext( + request.resumableState, + ref + ); + task.row = null; + contentRootSegment.status = 6; + try { + if ( + (renderNode(request, task, props, -1), + contentRootSegment.lastPushedText && + contentRootSegment.textEmbedded && + contentRootSegment.chunks.push(textSeparator), + (contentRootSegment.status = 1), + finishedSegment(request, newBoundary, contentRootSegment), + queueCompletedSegment(newBoundary, contentRootSegment), + 0 === newBoundary.pendingTasks && 0 === newBoundary.status) + ) { + if ( + ((newBoundary.status = 1), + !isEligibleForOutlining(request, newBoundary)) + ) { + null !== prevRow && + 0 === --prevRow.pendingTasks && + finishSuspenseListRow(request, prevRow); + 0 === request.pendingRootTasks && + task.blockedPreamble && + preparePreamble(request); + break a; + } + } else + null !== prevRow && + prevRow.together && + tryToResolveTogetherRow(request, prevRow); + } catch (thrownValue$31) { + (newBoundary.status = 4), + 12 === request.status + ? ((contentRootSegment.status = 3), + (newProps = request.fatalError)) + : ((contentRootSegment.status = 4), + (newProps = thrownValue$31)), + (defaultProps = getThrownInfo(task.componentStack)), + (initialState = logRecoverableError( + request, + newProps, + defaultProps + )), + (newBoundary.errorDigest = initialState), + untrackBoundary(request, newBoundary); + } finally { + (task.blockedBoundary = propName$44), + (task.blockedPreamble = propName), + (task.hoistableState = parentHoistableState), + (task.blockedSegment = parentSegment), + (task.keyPath = type), + (task.formatContext = ref), + (task.row = prevRow); + } + task = createRenderTask( + request, + null, + fallback, + -1, + propName$44, + boundarySegment, + newBoundary.fallbackPreamble, + newBoundary.fallbackState, + fallbackAbortSet, + [keyPath[0], "Suspense Fallback", keyPath[2]], + getSuspenseFallbackFormatContext( + request.resumableState, + task.formatContext + ), + task.context, + task.treeContext, + task.row, + replaceSuspenseComponentStackWithSuspenseFallbackStack( + task.componentStack + ) + ); + pushComponentStack(task); + request.pingedTasks.push(task); + } + } + return; + } + if ("object" === typeof type && null !== type) + switch (type.$$typeof) { + case REACT_FORWARD_REF_TYPE: + if ("ref" in props) + for (parentSegment in ((newProps = {}), props)) + "ref" !== parentSegment && + (newProps[parentSegment] = props[parentSegment]); + else newProps = props; + type = renderWithHooks( + request, + task, + keyPath, + type.render, + newProps, + ref + ); + finishFunctionComponent( + request, + task, + keyPath, + type, + 0 !== localIdCounter, + actionStateCounter, + actionStateMatchingIndex + ); + return; + case REACT_MEMO_TYPE: + renderElement(request, task, keyPath, type.type, props, ref); + return; + case REACT_CONTEXT_TYPE: + defaultProps = props.children; + newProps = task.keyPath; + props = props.value; + initialState = type._currentValue; + type._currentValue = props; + ref = currentActiveSnapshot; + currentActiveSnapshot = type = { + parent: ref, + depth: null === ref ? 0 : ref.depth + 1, + context: type, + parentValue: initialState, + value: props + }; + task.context = type; + task.keyPath = keyPath; + renderNodeDestructive(request, task, defaultProps, -1); + request = currentActiveSnapshot; + if (null === request) + throw Error( + "Tried to pop a Context at the root of the app. This is a bug in React." + ); + request.context._currentValue = request.parentValue; + request = currentActiveSnapshot = request.parent; + task.context = request; + task.keyPath = newProps; + return; + case REACT_CONSUMER_TYPE: + props = props.children; + type = props(type._context._currentValue); + props = task.keyPath; + task.keyPath = keyPath; + renderNodeDestructive(request, task, type, -1); + task.keyPath = props; + return; + case REACT_LAZY_TYPE: + newProps = type._init; + type = newProps(type._payload); + if (12 === request.status) throw null; + renderElement(request, task, keyPath, type, props, ref); + return; + } + throw Error( + "Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: " + + ((null == type ? type : typeof type) + ".") + ); + } +} +function resumeNode(request, task, segmentId, node, childIndex) { + var prevReplay = task.replay, + blockedBoundary = task.blockedBoundary, + resumedSegment = createPendingSegment( + request, + 0, + null, + task.formatContext, + !1, + !1 + ); + resumedSegment.id = segmentId; + resumedSegment.parentFlushed = !0; + try { + (task.replay = null), + (task.blockedSegment = resumedSegment), + renderNode(request, task, node, childIndex), + (resumedSegment.status = 1), + finishedSegment(request, blockedBoundary, resumedSegment), + null === blockedBoundary + ? (request.completedRootSegment = resumedSegment) + : (queueCompletedSegment(blockedBoundary, resumedSegment), + blockedBoundary.parentFlushed && + request.partialBoundaries.push(blockedBoundary)); + } finally { + (task.replay = prevReplay), (task.blockedSegment = null); + } +} +function renderNodeDestructive(request, task, node, childIndex) { + null !== task.replay && "number" === typeof task.replay.slots + ? resumeNode(request, task, task.replay.slots, node, childIndex) + : ((task.node = node), + (task.childIndex = childIndex), + (node = task.componentStack), + pushComponentStack(task), + retryNode(request, task), + (task.componentStack = node)); +} +function retryNode(request, task) { + var node = task.node, + childIndex = task.childIndex; + if (null !== node) { + if ("object" === typeof node) { + switch (node.$$typeof) { + case REACT_ELEMENT_TYPE: + var type = node.type, + key = node.key, + props = node.props; + node = props.ref; + var ref = void 0 !== node ? node : null, + name = getComponentNameFromType(type), + keyOrIndex = + null == key ? (-1 === childIndex ? 0 : childIndex) : key; + key = [task.keyPath, name, keyOrIndex]; + if (null !== task.replay) + a: { + var replay = task.replay; + childIndex = replay.nodes; + for (node = 0; node < childIndex.length; node++) { + var node$jscomp$0 = childIndex[node]; + if (keyOrIndex === node$jscomp$0[1]) { + if (4 === node$jscomp$0.length) { + if (null !== name && name !== node$jscomp$0[0]) + throw Error( + "Expected the resume to render <" + + node$jscomp$0[0] + + "> in this slot but instead it rendered <" + + name + + ">. The tree doesn't match so React will fallback to client rendering." + ); + var childNodes = node$jscomp$0[2]; + name = node$jscomp$0[3]; + keyOrIndex = task.node; + task.replay = { + nodes: childNodes, + slots: name, + pendingTasks: 1 + }; + try { + renderElement(request, task, key, type, props, ref); + if ( + 1 === task.replay.pendingTasks && + 0 < task.replay.nodes.length + ) + throw Error( + "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering." + ); + task.replay.pendingTasks--; + } catch (x) { + if ( + "object" === typeof x && + null !== x && + (x === SuspenseException || + "function" === typeof x.then) + ) + throw ( + (task.node === keyOrIndex + ? (task.replay = replay) + : childIndex.splice(node, 1), + x) + ); + task.replay.pendingTasks--; + props = getThrownInfo(task.componentStack); + key = request; + request = task.blockedBoundary; + type = x; + props = logRecoverableError(key, type, props); + abortRemainingReplayNodes( + key, + request, + childNodes, + name, + type, + props + ); + } + task.replay = replay; + } else { + if (type !== REACT_SUSPENSE_TYPE) + throw Error( + "Expected the resume to render <Suspense> in this slot but instead it rendered <" + + (getComponentNameFromType(type) || "Unknown") + + ">. The tree doesn't match so React will fallback to client rendering." + ); + b: { + replay = void 0; + type = node$jscomp$0[5]; + ref = node$jscomp$0[2]; + name = node$jscomp$0[3]; + keyOrIndex = + null === node$jscomp$0[4] ? [] : node$jscomp$0[4][2]; + node$jscomp$0 = + null === node$jscomp$0[4] ? null : node$jscomp$0[4][3]; + var prevKeyPath = task.keyPath, + prevContext = task.formatContext, + prevRow = task.row, + previousReplaySet = task.replay, + parentBoundary = task.blockedBoundary, + parentHoistableState = task.hoistableState, + content = props.children, + fallback = props.fallback, + fallbackAbortSet = new Set(); + props = + 2 > task.formatContext.insertionMode + ? createSuspenseBoundary( + request, + task.row, + fallbackAbortSet, + createPreambleState(), + createPreambleState() + ) + : createSuspenseBoundary( + request, + task.row, + fallbackAbortSet, + null, + null + ); + props.parentFlushed = !0; + props.rootSegmentID = type; + task.blockedBoundary = props; + task.hoistableState = props.contentState; + task.keyPath = key; + task.formatContext = getSuspenseContentFormatContext( + request.resumableState, + prevContext + ); + task.row = null; + task.replay = { + nodes: ref, + slots: name, + pendingTasks: 1 + }; + try { + renderNode(request, task, content, -1); + if ( + 1 === task.replay.pendingTasks && + 0 < task.replay.nodes.length + ) + throw Error( + "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering." + ); + task.replay.pendingTasks--; + if (0 === props.pendingTasks && 0 === props.status) { + props.status = 1; + request.completedBoundaries.push(props); + break b; + } + } catch (error) { + (props.status = 4), + (childNodes = getThrownInfo(task.componentStack)), + (replay = logRecoverableError( + request, + error, + childNodes + )), + (props.errorDigest = replay), + task.replay.pendingTasks--, + request.clientRenderedBoundaries.push(props); + } finally { + (task.blockedBoundary = parentBoundary), + (task.hoistableState = parentHoistableState), + (task.replay = previousReplaySet), + (task.keyPath = prevKeyPath), + (task.formatContext = prevContext), + (task.row = prevRow); + } + childNodes = createReplayTask( + request, + null, + { + nodes: keyOrIndex, + slots: node$jscomp$0, + pendingTasks: 0 + }, + fallback, + -1, + parentBoundary, + props.fallbackState, + fallbackAbortSet, + [key[0], "Suspense Fallback", key[2]], + getSuspenseFallbackFormatContext( + request.resumableState, + task.formatContext + ), + task.context, + task.treeContext, + task.row, + replaceSuspenseComponentStackWithSuspenseFallbackStack( + task.componentStack + ) + ); + pushComponentStack(childNodes); + request.pingedTasks.push(childNodes); + } + } + childIndex.splice(node, 1); + break a; + } + } + } + else renderElement(request, task, key, type, props, ref); + return; + case REACT_PORTAL_TYPE: + throw Error( + "Portals are not currently supported by the server renderer. Render them conditionally so that they only appear on the client render." + ); + case REACT_LAZY_TYPE: + childNodes = node._init; + node = childNodes(node._payload); + if (12 === request.status) throw null; + renderNodeDestructive(request, task, node, childIndex); + return; + } + if (isArrayImpl(node)) { + renderChildrenArray(request, task, node, childIndex); + return; + } + if ((childNodes = getIteratorFn(node))) + if ((childNodes = childNodes.call(node))) { + node = childNodes.next(); + if (!node.done) { + props = []; + do props.push(node.value), (node = childNodes.next()); + while (!node.done); + renderChildrenArray(request, task, props, childIndex); + } + return; + } + if ("function" === typeof node.then) + return ( + (task.thenableState = null), + renderNodeDestructive(request, task, unwrapThenable(node), childIndex) + ); + if (node.$$typeof === REACT_CONTEXT_TYPE) + return renderNodeDestructive( + request, + task, + node._currentValue, + childIndex + ); + childIndex = Object.prototype.toString.call(node); + throw Error( + "Objects are not valid as a React child (found: " + + ("[object Object]" === childIndex + ? "object with keys {" + Object.keys(node).join(", ") + "}" + : childIndex) + + "). If you meant to render a collection of children, use an array instead." + ); + } + if ("string" === typeof node) + (childIndex = task.blockedSegment), + null !== childIndex && + (childIndex.lastPushedText = pushTextInstance( + childIndex.chunks, + node, + request.renderState, + childIndex.lastPushedText + )); + else if ("number" === typeof node || "bigint" === typeof node) + (childIndex = task.blockedSegment), + null !== childIndex && + (childIndex.lastPushedText = pushTextInstance( + childIndex.chunks, + "" + node, + request.renderState, + childIndex.lastPushedText + )); + } +} +function renderChildrenArray(request, task, children, childIndex) { + var prevKeyPath = task.keyPath; + if ( + -1 !== childIndex && + ((task.keyPath = [task.keyPath, "Fragment", childIndex]), + null !== task.replay) + ) { + for ( + var replay = task.replay, replayNodes = replay.nodes, j = 0; + j < replayNodes.length; + j++ + ) { + var node = replayNodes[j]; + if (node[1] === childIndex) { + childIndex = node[2]; + node = node[3]; + task.replay = { nodes: childIndex, slots: node, pendingTasks: 1 }; + try { + renderChildrenArray(request, task, children, -1); + if (1 === task.replay.pendingTasks && 0 < task.replay.nodes.length) + throw Error( + "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering." + ); + task.replay.pendingTasks--; + } catch (x) { + if ( + "object" === typeof x && + null !== x && + (x === SuspenseException || "function" === typeof x.then) + ) + throw x; + task.replay.pendingTasks--; + children = getThrownInfo(task.componentStack); + var boundary = task.blockedBoundary, + error = x; + children = logRecoverableError(request, error, children); + abortRemainingReplayNodes( + request, + boundary, + childIndex, + node, + error, + children + ); + } + task.replay = replay; + replayNodes.splice(j, 1); + break; + } + } + task.keyPath = prevKeyPath; + return; + } + replay = task.treeContext; + replayNodes = children.length; + if ( + null !== task.replay && + ((j = task.replay.slots), null !== j && "object" === typeof j) + ) { + for (childIndex = 0; childIndex < replayNodes; childIndex++) + (node = children[childIndex]), + (task.treeContext = pushTreeContext(replay, replayNodes, childIndex)), + (boundary = j[childIndex]), + "number" === typeof boundary + ? (resumeNode(request, task, boundary, node, childIndex), + delete j[childIndex]) + : renderNode(request, task, node, childIndex); + task.treeContext = replay; + task.keyPath = prevKeyPath; + return; + } + for (j = 0; j < replayNodes; j++) + (childIndex = children[j]), + (task.treeContext = pushTreeContext(replay, replayNodes, j)), + renderNode(request, task, childIndex, j); + task.treeContext = replay; + task.keyPath = prevKeyPath; +} +function trackPostponedBoundary(request, trackedPostpones, boundary) { + boundary.status = 5; + boundary.rootSegmentID = request.nextSegmentId++; + request = boundary.trackedContentKeyPath; + if (null === request) + throw Error( + "It should not be possible to postpone at the root. This is a bug in React." + ); + var fallbackReplayNode = boundary.trackedFallbackNode, + children = [], + boundaryNode = trackedPostpones.workingMap.get(request); + if (void 0 === boundaryNode) + return ( + (boundary = [ + request[1], + request[2], + children, + null, + fallbackReplayNode, + boundary.rootSegmentID + ]), + trackedPostpones.workingMap.set(request, boundary), + addToReplayParent(boundary, request[0], trackedPostpones), + boundary + ); + boundaryNode[4] = fallbackReplayNode; + boundaryNode[5] = boundary.rootSegmentID; + return boundaryNode; +} +function trackPostpone(request, trackedPostpones, task, segment) { + segment.status = 5; + var keyPath = task.keyPath, + boundary = task.blockedBoundary; + if (null === boundary) + (segment.id = request.nextSegmentId++), + (trackedPostpones.rootSlots = segment.id), + null !== request.completedRootSegment && + (request.completedRootSegment.status = 5); + else { + if (null !== boundary && 0 === boundary.status) { + var boundaryNode = trackPostponedBoundary( + request, + trackedPostpones, + boundary + ); + if ( + boundary.trackedContentKeyPath === keyPath && + -1 === task.childIndex + ) { + -1 === segment.id && + (segment.id = segment.parentFlushed + ? boundary.rootSegmentID + : request.nextSegmentId++); + boundaryNode[3] = segment.id; + return; + } + } + -1 === segment.id && + (segment.id = + segment.parentFlushed && null !== boundary + ? boundary.rootSegmentID + : request.nextSegmentId++); + if (-1 === task.childIndex) + null === keyPath + ? (trackedPostpones.rootSlots = segment.id) + : ((task = trackedPostpones.workingMap.get(keyPath)), + void 0 === task + ? ((task = [keyPath[1], keyPath[2], [], segment.id]), + addToReplayParent(task, keyPath[0], trackedPostpones)) + : (task[3] = segment.id)); + else { + if (null === keyPath) + if (((request = trackedPostpones.rootSlots), null === request)) + request = trackedPostpones.rootSlots = {}; + else { + if ("number" === typeof request) + throw Error( + "It should not be possible to postpone both at the root of an element as well as a slot below. This is a bug in React." + ); + } + else if ( + ((boundary = trackedPostpones.workingMap), + (boundaryNode = boundary.get(keyPath)), + void 0 === boundaryNode) + ) + (request = {}), + (boundaryNode = [keyPath[1], keyPath[2], [], request]), + boundary.set(keyPath, boundaryNode), + addToReplayParent(boundaryNode, keyPath[0], trackedPostpones); + else if (((request = boundaryNode[3]), null === request)) + request = boundaryNode[3] = {}; + else if ("number" === typeof request) + throw Error( + "It should not be possible to postpone both at the root of an element as well as a slot below. This is a bug in React." + ); + request[task.childIndex] = segment.id; + } + } +} +function untrackBoundary(request, boundary) { + request = request.trackedPostpones; + null !== request && + ((boundary = boundary.trackedContentKeyPath), + null !== boundary && + ((boundary = request.workingMap.get(boundary)), + void 0 !== boundary && + ((boundary.length = 4), (boundary[2] = []), (boundary[3] = null)))); +} +function spawnNewSuspendedReplayTask(request, task, thenableState) { + return createReplayTask( + request, + thenableState, + task.replay, + task.node, + task.childIndex, + task.blockedBoundary, + task.hoistableState, + task.abortSet, + task.keyPath, + task.formatContext, + task.context, + task.treeContext, + task.row, + task.componentStack + ); +} +function spawnNewSuspendedRenderTask(request, task, thenableState) { + var segment = task.blockedSegment, + newSegment = createPendingSegment( + request, + segment.chunks.length, + null, + task.formatContext, + segment.lastPushedText, + !0 + ); + segment.children.push(newSegment); + segment.lastPushedText = !1; + return createRenderTask( + request, + thenableState, + task.node, + task.childIndex, + task.blockedBoundary, + newSegment, + task.blockedPreamble, + task.hoistableState, + task.abortSet, + task.keyPath, + task.formatContext, + task.context, + task.treeContext, + task.row, + task.componentStack + ); +} +function renderNode(request, task, node, childIndex) { + var previousFormatContext = task.formatContext, + previousContext = task.context, + previousKeyPath = task.keyPath, + previousTreeContext = task.treeContext, + previousComponentStack = task.componentStack, + segment = task.blockedSegment; + if (null === segment) { + segment = task.replay; + try { + return renderNodeDestructive(request, task, node, childIndex); + } catch (thrownValue) { + if ( + (resetHooksState(), + (node = + thrownValue === SuspenseException + ? getSuspendedThenable() + : thrownValue), + 12 !== request.status && "object" === typeof node && null !== node) + ) { + if ("function" === typeof node.then) { + childIndex = + thrownValue === SuspenseException + ? getThenableStateAfterSuspending() + : null; + request = spawnNewSuspendedReplayTask(request, task, childIndex).ping; + node.then(request, request); + task.formatContext = previousFormatContext; + task.context = previousContext; + task.keyPath = previousKeyPath; + task.treeContext = previousTreeContext; + task.componentStack = previousComponentStack; + task.replay = segment; + switchContext(previousContext); + return; + } + if ("Maximum call stack size exceeded" === node.message) { + node = + thrownValue === SuspenseException + ? getThenableStateAfterSuspending() + : null; + node = spawnNewSuspendedReplayTask(request, task, node); + request.pingedTasks.push(node); + task.formatContext = previousFormatContext; + task.context = previousContext; + task.keyPath = previousKeyPath; + task.treeContext = previousTreeContext; + task.componentStack = previousComponentStack; + task.replay = segment; + switchContext(previousContext); + return; + } + } + } + } else { + var childrenLength = segment.children.length, + chunkLength = segment.chunks.length; + try { + return renderNodeDestructive(request, task, node, childIndex); + } catch (thrownValue$63) { + if ( + (resetHooksState(), + (segment.children.length = childrenLength), + (segment.chunks.length = chunkLength), + (node = + thrownValue$63 === SuspenseException + ? getSuspendedThenable() + : thrownValue$63), + 12 !== request.status && "object" === typeof node && null !== node) + ) { + if ("function" === typeof node.then) { + segment = node; + node = + thrownValue$63 === SuspenseException + ? getThenableStateAfterSuspending() + : null; + request = spawnNewSuspendedRenderTask(request, task, node).ping; + segment.then(request, request); + task.formatContext = previousFormatContext; + task.context = previousContext; + task.keyPath = previousKeyPath; + task.treeContext = previousTreeContext; + task.componentStack = previousComponentStack; + switchContext(previousContext); + return; + } + if ("Maximum call stack size exceeded" === node.message) { + segment = + thrownValue$63 === SuspenseException + ? getThenableStateAfterSuspending() + : null; + segment = spawnNewSuspendedRenderTask(request, task, segment); + request.pingedTasks.push(segment); + task.formatContext = previousFormatContext; + task.context = previousContext; + task.keyPath = previousKeyPath; + task.treeContext = previousTreeContext; + task.componentStack = previousComponentStack; + switchContext(previousContext); + return; + } + } + } + } + task.formatContext = previousFormatContext; + task.context = previousContext; + task.keyPath = previousKeyPath; + task.treeContext = previousTreeContext; + switchContext(previousContext); + throw node; +} +function abortTaskSoft(task) { + var boundary = task.blockedBoundary, + segment = task.blockedSegment; + null !== segment && + ((segment.status = 3), finishedTask(this, boundary, task.row, segment)); +} +function abortRemainingReplayNodes( + request$jscomp$0, + boundary, + nodes, + slots, + error, + errorDigest$jscomp$0 +) { + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + if (4 === node.length) + abortRemainingReplayNodes( + request$jscomp$0, + boundary, + node[2], + node[3], + error, + errorDigest$jscomp$0 + ); + else { + node = node[5]; + var request = request$jscomp$0, + errorDigest = errorDigest$jscomp$0, + resumedBoundary = createSuspenseBoundary( + request, + null, + new Set(), + null, + null + ); + resumedBoundary.parentFlushed = !0; + resumedBoundary.rootSegmentID = node; + resumedBoundary.status = 4; + resumedBoundary.errorDigest = errorDigest; + resumedBoundary.parentFlushed && + request.clientRenderedBoundaries.push(resumedBoundary); + } + } + nodes.length = 0; + if (null !== slots) { + if (null === boundary) + throw Error( + "We should not have any resumable nodes in the shell. This is a bug in React." + ); + 4 !== boundary.status && + ((boundary.status = 4), + (boundary.errorDigest = errorDigest$jscomp$0), + boundary.parentFlushed && + request$jscomp$0.clientRenderedBoundaries.push(boundary)); + if ("object" === typeof slots) for (var index in slots) delete slots[index]; + } +} +function abortTask(task, request, error) { + var boundary = task.blockedBoundary, + segment = task.blockedSegment; + if (null !== segment) { + if (6 === segment.status) return; + segment.status = 3; + } + var errorInfo = getThrownInfo(task.componentStack); + if (null === boundary) { + if (13 !== request.status && 14 !== request.status) { + boundary = task.replay; + if (null === boundary) { + null !== request.trackedPostpones && null !== segment + ? ((boundary = request.trackedPostpones), + logRecoverableError(request, error, errorInfo), + trackPostpone(request, boundary, task, segment), + finishedTask(request, null, task.row, segment)) + : (logRecoverableError(request, error, errorInfo), + fatalError(request, error)); + return; + } + boundary.pendingTasks--; + 0 === boundary.pendingTasks && + 0 < boundary.nodes.length && + ((segment = logRecoverableError(request, error, errorInfo)), + abortRemainingReplayNodes( + request, + null, + boundary.nodes, + boundary.slots, + error, + segment + )); + request.pendingRootTasks--; + 0 === request.pendingRootTasks && completeShell(request); + } + } else { + var trackedPostpones$64 = request.trackedPostpones; + if (4 !== boundary.status) { + if (null !== trackedPostpones$64 && null !== segment) + return ( + logRecoverableError(request, error, errorInfo), + trackPostpone(request, trackedPostpones$64, task, segment), + boundary.fallbackAbortableTasks.forEach(function (fallbackTask) { + return abortTask(fallbackTask, request, error); + }), + boundary.fallbackAbortableTasks.clear(), + finishedTask(request, boundary, task.row, segment) + ); + boundary.status = 4; + segment = logRecoverableError(request, error, errorInfo); + boundary.status = 4; + boundary.errorDigest = segment; + untrackBoundary(request, boundary); + boundary.parentFlushed && request.clientRenderedBoundaries.push(boundary); + } + boundary.pendingTasks--; + segment = boundary.row; + null !== segment && + 0 === --segment.pendingTasks && + finishSuspenseListRow(request, segment); + boundary.fallbackAbortableTasks.forEach(function (fallbackTask) { + return abortTask(fallbackTask, request, error); + }); + boundary.fallbackAbortableTasks.clear(); + } + task = task.row; + null !== task && + 0 === --task.pendingTasks && + finishSuspenseListRow(request, task); + request.allPendingTasks--; + 0 === request.allPendingTasks && completeAll(request); +} +function safelyEmitEarlyPreloads(request, shellComplete) { + try { + var renderState = request.renderState, + onHeaders = renderState.onHeaders; + if (onHeaders) { + var headers = renderState.headers; + if (headers) { + renderState.headers = null; + var linkHeader = headers.preconnects; + headers.fontPreloads && + (linkHeader && (linkHeader += ", "), + (linkHeader += headers.fontPreloads)); + headers.highImagePreloads && + (linkHeader && (linkHeader += ", "), + (linkHeader += headers.highImagePreloads)); + if (!shellComplete) { + var queueIter = renderState.styles.values(), + queueStep = queueIter.next(); + b: for ( + ; + 0 < headers.remainingCapacity && !queueStep.done; + queueStep = queueIter.next() + ) + for ( + var sheetIter = queueStep.value.sheets.values(), + sheetStep = sheetIter.next(); + 0 < headers.remainingCapacity && !sheetStep.done; + sheetStep = sheetIter.next() + ) { + var sheet = sheetStep.value, + props = sheet.props, + key = props.href, + props$jscomp$0 = sheet.props, + header = getPreloadAsHeader(props$jscomp$0.href, "style", { + crossOrigin: props$jscomp$0.crossOrigin, + integrity: props$jscomp$0.integrity, + nonce: props$jscomp$0.nonce, + type: props$jscomp$0.type, + fetchPriority: props$jscomp$0.fetchPriority, + referrerPolicy: props$jscomp$0.referrerPolicy, + media: props$jscomp$0.media + }); + if (0 <= (headers.remainingCapacity -= header.length + 2)) + (renderState.resets.style[key] = PRELOAD_NO_CREDS), + linkHeader && (linkHeader += ", "), + (linkHeader += header), + (renderState.resets.style[key] = + "string" === typeof props.crossOrigin || + "string" === typeof props.integrity + ? [props.crossOrigin, props.integrity] + : PRELOAD_NO_CREDS); + else break b; + } + } + linkHeader ? onHeaders({ Link: linkHeader }) : onHeaders({}); + } + } + } catch (error) { + logRecoverableError(request, error, {}); + } +} +function completeShell(request) { + null === request.trackedPostpones && safelyEmitEarlyPreloads(request, !0); + null === request.trackedPostpones && preparePreamble(request); + request.onShellError = noop; + request = request.onShellReady; + request(); +} +function completeAll(request) { + safelyEmitEarlyPreloads( + request, + null === request.trackedPostpones + ? !0 + : null === request.completedRootSegment || + 5 !== request.completedRootSegment.status + ); + preparePreamble(request); + request = request.onAllReady; + request(); +} +function queueCompletedSegment(boundary, segment) { + if ( + 0 === segment.chunks.length && + 1 === segment.children.length && + null === segment.children[0].boundary && + -1 === segment.children[0].id + ) { + var childSegment = segment.children[0]; + childSegment.id = segment.id; + childSegment.parentFlushed = !0; + (1 !== childSegment.status && + 3 !== childSegment.status && + 4 !== childSegment.status) || + queueCompletedSegment(boundary, childSegment); + } else boundary.completedSegments.push(segment); +} +function finishedSegment(request, boundary, segment) { + if (null !== byteLengthOfChunk) { + segment = segment.chunks; + for (var segmentByteSize = 0, i = 0; i < segment.length; i++) + segmentByteSize += segment[i].byteLength; + null === boundary + ? (request.byteSize += segmentByteSize) + : (boundary.byteSize += segmentByteSize); + } +} +function finishedTask(request, boundary, row, segment) { + null !== row && + (0 === --row.pendingTasks + ? finishSuspenseListRow(request, row) + : row.together && tryToResolveTogetherRow(request, row)); + request.allPendingTasks--; + if (null === boundary) { + if (null !== segment && segment.parentFlushed) { + if (null !== request.completedRootSegment) + throw Error( + "There can only be one root segment. This is a bug in React." + ); + request.completedRootSegment = segment; + } + request.pendingRootTasks--; + 0 === request.pendingRootTasks && completeShell(request); + } else if ((boundary.pendingTasks--, 4 !== boundary.status)) + if (0 === boundary.pendingTasks) + if ( + (0 === boundary.status && (boundary.status = 1), + null !== segment && + segment.parentFlushed && + (1 === segment.status || 3 === segment.status) && + queueCompletedSegment(boundary, segment), + boundary.parentFlushed && request.completedBoundaries.push(boundary), + 1 === boundary.status) + ) + (row = boundary.row), + null !== row && + hoistHoistables(row.hoistables, boundary.contentState), + isEligibleForOutlining(request, boundary) || + (boundary.fallbackAbortableTasks.forEach(abortTaskSoft, request), + boundary.fallbackAbortableTasks.clear(), + null !== row && + 0 === --row.pendingTasks && + finishSuspenseListRow(request, row)), + 0 === request.pendingRootTasks && + null === request.trackedPostpones && + null !== boundary.contentPreamble && + preparePreamble(request); + else { + if ( + 5 === boundary.status && + ((boundary = boundary.row), null !== boundary) + ) { + if (null !== request.trackedPostpones) { + row = request.trackedPostpones; + var postponedRow = boundary.next; + if ( + null !== postponedRow && + ((segment = postponedRow.boundaries), null !== segment) + ) + for ( + postponedRow.boundaries = null, postponedRow = 0; + postponedRow < segment.length; + postponedRow++ + ) { + var postponedBoundary = segment[postponedRow]; + trackPostponedBoundary(request, row, postponedBoundary); + finishedTask(request, postponedBoundary, null, null); + } + } + 0 === --boundary.pendingTasks && + finishSuspenseListRow(request, boundary); + } + } + else + null === segment || + !segment.parentFlushed || + (1 !== segment.status && 3 !== segment.status) || + (queueCompletedSegment(boundary, segment), + 1 === boundary.completedSegments.length && + boundary.parentFlushed && + request.partialBoundaries.push(boundary)), + (boundary = boundary.row), + null !== boundary && + boundary.together && + tryToResolveTogetherRow(request, boundary); + 0 === request.allPendingTasks && completeAll(request); +} +function performWork(request$jscomp$2) { + if (14 !== request$jscomp$2.status && 13 !== request$jscomp$2.status) { + var prevContext = currentActiveSnapshot, + prevDispatcher = ReactSharedInternals.H; + ReactSharedInternals.H = HooksDispatcher; + var prevAsyncDispatcher = ReactSharedInternals.A; + ReactSharedInternals.A = DefaultAsyncDispatcher; + var prevRequest = currentRequest; + currentRequest = request$jscomp$2; + var prevResumableState = currentResumableState; + currentResumableState = request$jscomp$2.resumableState; + try { + var pingedTasks = request$jscomp$2.pingedTasks, + i; + for (i = 0; i < pingedTasks.length; i++) { + var task = pingedTasks[i], + request = request$jscomp$2, + segment = task.blockedSegment; + if (null === segment) { + var request$jscomp$0 = request; + if (0 !== task.replay.pendingTasks) { + switchContext(task.context); + try { + "number" === typeof task.replay.slots + ? resumeNode( + request$jscomp$0, + task, + task.replay.slots, + task.node, + task.childIndex + ) + : retryNode(request$jscomp$0, task); + if ( + 1 === task.replay.pendingTasks && + 0 < task.replay.nodes.length + ) + throw Error( + "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering." + ); + task.replay.pendingTasks--; + task.abortSet.delete(task); + finishedTask( + request$jscomp$0, + task.blockedBoundary, + task.row, + null + ); + } catch (thrownValue) { + resetHooksState(); + var x = + thrownValue === SuspenseException + ? getSuspendedThenable() + : thrownValue; + if ( + "object" === typeof x && + null !== x && + "function" === typeof x.then + ) { + var ping = task.ping; + x.then(ping, ping); + task.thenableState = + thrownValue === SuspenseException + ? getThenableStateAfterSuspending() + : null; + } else { + task.replay.pendingTasks--; + task.abortSet.delete(task); + var errorInfo = getThrownInfo(task.componentStack); + request = void 0; + var request$jscomp$1 = request$jscomp$0, + boundary = task.blockedBoundary, + error$jscomp$0 = + 12 === request$jscomp$0.status + ? request$jscomp$0.fatalError + : x, + replayNodes = task.replay.nodes, + resumeSlots = task.replay.slots; + request = logRecoverableError( + request$jscomp$1, + error$jscomp$0, + errorInfo + ); + abortRemainingReplayNodes( + request$jscomp$1, + boundary, + replayNodes, + resumeSlots, + error$jscomp$0, + request + ); + request$jscomp$0.pendingRootTasks--; + 0 === request$jscomp$0.pendingRootTasks && + completeShell(request$jscomp$0); + request$jscomp$0.allPendingTasks--; + 0 === request$jscomp$0.allPendingTasks && + completeAll(request$jscomp$0); + } + } finally { + } + } + } else if ( + ((request$jscomp$0 = void 0), + (request$jscomp$1 = segment), + 0 === request$jscomp$1.status) + ) { + request$jscomp$1.status = 6; + switchContext(task.context); + var childrenLength = request$jscomp$1.children.length, + chunkLength = request$jscomp$1.chunks.length; + try { + retryNode(request, task), + request$jscomp$1.lastPushedText && + request$jscomp$1.textEmbedded && + request$jscomp$1.chunks.push(textSeparator), + task.abortSet.delete(task), + (request$jscomp$1.status = 1), + finishedSegment(request, task.blockedBoundary, request$jscomp$1), + finishedTask( + request, + task.blockedBoundary, + task.row, + request$jscomp$1 + ); + } catch (thrownValue) { + resetHooksState(); + request$jscomp$1.children.length = childrenLength; + request$jscomp$1.chunks.length = chunkLength; + var x$jscomp$0 = + thrownValue === SuspenseException + ? getSuspendedThenable() + : 12 === request.status + ? request.fatalError + : thrownValue; + if (12 === request.status && null !== request.trackedPostpones) { + var trackedPostpones = request.trackedPostpones, + thrownInfo = getThrownInfo(task.componentStack); + task.abortSet.delete(task); + logRecoverableError(request, x$jscomp$0, thrownInfo); + trackPostpone(request, trackedPostpones, task, request$jscomp$1); + finishedTask( + request, + task.blockedBoundary, + task.row, + request$jscomp$1 + ); + } else if ( + "object" === typeof x$jscomp$0 && + null !== x$jscomp$0 && + "function" === typeof x$jscomp$0.then + ) { + request$jscomp$1.status = 0; + task.thenableState = + thrownValue === SuspenseException + ? getThenableStateAfterSuspending() + : null; + var ping$jscomp$0 = task.ping; + x$jscomp$0.then(ping$jscomp$0, ping$jscomp$0); + } else { + var errorInfo$jscomp$0 = getThrownInfo(task.componentStack); + task.abortSet.delete(task); + request$jscomp$1.status = 4; + var boundary$jscomp$0 = task.blockedBoundary, + row = task.row; + null !== row && + 0 === --row.pendingTasks && + finishSuspenseListRow(request, row); + request.allPendingTasks--; + request$jscomp$0 = logRecoverableError( + request, + x$jscomp$0, + errorInfo$jscomp$0 + ); + if (null === boundary$jscomp$0) fatalError(request, x$jscomp$0); + else if ( + (boundary$jscomp$0.pendingTasks--, + 4 !== boundary$jscomp$0.status) + ) { + boundary$jscomp$0.status = 4; + boundary$jscomp$0.errorDigest = request$jscomp$0; + untrackBoundary(request, boundary$jscomp$0); + var boundaryRow = boundary$jscomp$0.row; + null !== boundaryRow && + 0 === --boundaryRow.pendingTasks && + finishSuspenseListRow(request, boundaryRow); + boundary$jscomp$0.parentFlushed && + request.clientRenderedBoundaries.push(boundary$jscomp$0); + 0 === request.pendingRootTasks && + null === request.trackedPostpones && + null !== boundary$jscomp$0.contentPreamble && + preparePreamble(request); + } + 0 === request.allPendingTasks && completeAll(request); + } + } finally { + } + } + } + pingedTasks.splice(0, i); + null !== request$jscomp$2.destination && + flushCompletedQueues(request$jscomp$2, request$jscomp$2.destination); + } catch (error) { + logRecoverableError(request$jscomp$2, error, {}), + fatalError(request$jscomp$2, error); + } finally { + (currentResumableState = prevResumableState), + (ReactSharedInternals.H = prevDispatcher), + (ReactSharedInternals.A = prevAsyncDispatcher), + prevDispatcher === HooksDispatcher && switchContext(prevContext), + (currentRequest = prevRequest); + } + } +} +function preparePreambleFromSubtree( + request, + segment, + collectedPreambleSegments +) { + segment.preambleChildren.length && + collectedPreambleSegments.push(segment.preambleChildren); + for (var pendingPreambles = !1, i = 0; i < segment.children.length; i++) + pendingPreambles = + preparePreambleFromSegment( + request, + segment.children[i], + collectedPreambleSegments + ) || pendingPreambles; + return pendingPreambles; +} +function preparePreambleFromSegment( + request, + segment, + collectedPreambleSegments +) { + var boundary = segment.boundary; + if (null === boundary) + return preparePreambleFromSubtree( + request, + segment, + collectedPreambleSegments + ); + var preamble = boundary.contentPreamble, + fallbackPreamble = boundary.fallbackPreamble; + if (null === preamble || null === fallbackPreamble) return !1; + switch (boundary.status) { + case 1: + hoistPreambleState(request.renderState, preamble); + request.byteSize += boundary.byteSize; + segment = boundary.completedSegments[0]; + if (!segment) + throw Error( + "A previously unvisited boundary must have exactly one root segment. This is a bug in React." + ); + return preparePreambleFromSubtree( + request, + segment, + collectedPreambleSegments + ); + case 5: + if (null !== request.trackedPostpones) return !0; + case 4: + if (1 === segment.status) + return ( + hoistPreambleState(request.renderState, fallbackPreamble), + preparePreambleFromSubtree( + request, + segment, + collectedPreambleSegments + ) + ); + default: + return !0; + } +} +function preparePreamble(request) { + if ( + request.completedRootSegment && + null === request.completedPreambleSegments + ) { + var collectedPreambleSegments = [], + originalRequestByteSize = request.byteSize, + hasPendingPreambles = preparePreambleFromSegment( + request, + request.completedRootSegment, + collectedPreambleSegments + ), + preamble = request.renderState.preamble; + !1 === hasPendingPreambles || (preamble.headChunks && preamble.bodyChunks) + ? (request.completedPreambleSegments = collectedPreambleSegments) + : (request.byteSize = originalRequestByteSize); + } +} +function flushSubtree(request, destination, segment, hoistableState) { + segment.parentFlushed = !0; + switch (segment.status) { + case 0: + segment.id = request.nextSegmentId++; + case 5: + return ( + (hoistableState = segment.id), + (segment.lastPushedText = !1), + (segment.textEmbedded = !1), + (request = request.renderState), + writeChunk(destination, placeholder1), + writeChunk(destination, request.placeholderPrefix), + (request = stringToChunk(hoistableState.toString(16))), + writeChunk(destination, request), + writeChunkAndReturn(destination, placeholder2) + ); + case 1: + segment.status = 2; + var r = !0, + chunks = segment.chunks, + chunkIdx = 0; + segment = segment.children; + for (var childIdx = 0; childIdx < segment.length; childIdx++) { + for (r = segment[childIdx]; chunkIdx < r.index; chunkIdx++) + writeChunk(destination, chunks[chunkIdx]); + r = flushSegment(request, destination, r, hoistableState); + } + for (; chunkIdx < chunks.length - 1; chunkIdx++) + writeChunk(destination, chunks[chunkIdx]); + chunkIdx < chunks.length && + (r = writeChunkAndReturn(destination, chunks[chunkIdx])); + return r; + case 3: + return !0; + default: + throw Error( + "Aborted, errored or already flushed boundaries should not be flushed again. This is a bug in React." + ); + } +} +var flushedByteSize = 0; +function flushSegment(request, destination, segment, hoistableState) { + var boundary = segment.boundary; + if (null === boundary) + return flushSubtree(request, destination, segment, hoistableState); + boundary.parentFlushed = !0; + if (4 === boundary.status) { + var row = boundary.row; + null !== row && + 0 === --row.pendingTasks && + finishSuspenseListRow(request, row); + boundary = boundary.errorDigest; + writeChunkAndReturn(destination, startClientRenderedSuspenseBoundary); + writeChunk(destination, clientRenderedSuspenseBoundaryError1); + boundary && + (writeChunk(destination, clientRenderedSuspenseBoundaryError1A), + writeChunk(destination, stringToChunk(escapeTextForBrowser(boundary))), + writeChunk( + destination, + clientRenderedSuspenseBoundaryErrorAttrInterstitial + )); + writeChunkAndReturn(destination, clientRenderedSuspenseBoundaryError2); + flushSubtree(request, destination, segment, hoistableState); + } else if (1 !== boundary.status) + 0 === boundary.status && (boundary.rootSegmentID = request.nextSegmentId++), + 0 < boundary.completedSegments.length && + request.partialBoundaries.push(boundary), + writeStartPendingSuspenseBoundary( + destination, + request.renderState, + boundary.rootSegmentID + ), + hoistableState && hoistHoistables(hoistableState, boundary.fallbackState), + flushSubtree(request, destination, segment, hoistableState); + else if ( + !flushingPartialBoundaries && + isEligibleForOutlining(request, boundary) && + (flushedByteSize + boundary.byteSize > request.progressiveChunkSize || + hasSuspenseyContent(boundary.contentState)) + ) + (boundary.rootSegmentID = request.nextSegmentId++), + request.completedBoundaries.push(boundary), + writeStartPendingSuspenseBoundary( + destination, + request.renderState, + boundary.rootSegmentID + ), + flushSubtree(request, destination, segment, hoistableState); + else { + flushedByteSize += boundary.byteSize; + hoistableState && hoistHoistables(hoistableState, boundary.contentState); + segment = boundary.row; + null !== segment && + isEligibleForOutlining(request, boundary) && + 0 === --segment.pendingTasks && + finishSuspenseListRow(request, segment); + writeChunkAndReturn(destination, startCompletedSuspenseBoundary); + segment = boundary.completedSegments; + if (1 !== segment.length) + throw Error( + "A previously unvisited boundary must have exactly one root segment. This is a bug in React." + ); + flushSegment(request, destination, segment[0], hoistableState); + } + return writeChunkAndReturn(destination, endSuspenseBoundary); +} +function flushSegmentContainer(request, destination, segment, hoistableState) { + writeStartSegment( + destination, + request.renderState, + segment.parentFormatContext, + segment.id + ); + flushSegment(request, destination, segment, hoistableState); + return writeEndSegment(destination, segment.parentFormatContext); +} +function flushCompletedBoundary(request, destination, boundary) { + flushedByteSize = boundary.byteSize; + for ( + var completedSegments = boundary.completedSegments, i = 0; + i < completedSegments.length; + i++ + ) + flushPartiallyCompletedSegment( + request, + destination, + boundary, + completedSegments[i] + ); + completedSegments.length = 0; + completedSegments = boundary.row; + null !== completedSegments && + isEligibleForOutlining(request, boundary) && + 0 === --completedSegments.pendingTasks && + finishSuspenseListRow(request, completedSegments); + writeHoistablesForBoundary( + destination, + boundary.contentState, + request.renderState + ); + completedSegments = request.resumableState; + request = request.renderState; + i = boundary.rootSegmentID; + boundary = boundary.contentState; + var requiresStyleInsertion = request.stylesToHoist; + request.stylesToHoist = !1; + writeChunk(destination, request.startInlineScript); + writeChunk(destination, endOfStartTag); + requiresStyleInsertion + ? (0 === (completedSegments.instructions & 4) && + ((completedSegments.instructions |= 4), + writeChunk(destination, clientRenderScriptFunctionOnly)), + 0 === (completedSegments.instructions & 2) && + ((completedSegments.instructions |= 2), + writeChunk(destination, completeBoundaryScriptFunctionOnly)), + 0 === (completedSegments.instructions & 8) + ? ((completedSegments.instructions |= 8), + writeChunk(destination, completeBoundaryWithStylesScript1FullPartial)) + : writeChunk(destination, completeBoundaryWithStylesScript1Partial)) + : (0 === (completedSegments.instructions & 2) && + ((completedSegments.instructions |= 2), + writeChunk(destination, completeBoundaryScriptFunctionOnly)), + writeChunk(destination, completeBoundaryScript1Partial)); + completedSegments = stringToChunk(i.toString(16)); + writeChunk(destination, request.boundaryPrefix); + writeChunk(destination, completedSegments); + writeChunk(destination, completeBoundaryScript2); + writeChunk(destination, request.segmentPrefix); + writeChunk(destination, completedSegments); + requiresStyleInsertion + ? (writeChunk(destination, completeBoundaryScript3a), + writeStyleResourceDependenciesInJS(destination, boundary)) + : writeChunk(destination, completeBoundaryScript3b); + boundary = writeChunkAndReturn(destination, completeBoundaryScriptEnd); + return writeBootstrap(destination, request) && boundary; +} +function flushPartiallyCompletedSegment( + request, + destination, + boundary, + segment +) { + if (2 === segment.status) return !0; + var hoistableState = boundary.contentState, + segmentID = segment.id; + if (-1 === segmentID) { + if (-1 === (segment.id = boundary.rootSegmentID)) + throw Error( + "A root segment ID must have been assigned by now. This is a bug in React." + ); + return flushSegmentContainer(request, destination, segment, hoistableState); + } + if (segmentID === boundary.rootSegmentID) + return flushSegmentContainer(request, destination, segment, hoistableState); + flushSegmentContainer(request, destination, segment, hoistableState); + boundary = request.resumableState; + request = request.renderState; + writeChunk(destination, request.startInlineScript); + writeChunk(destination, endOfStartTag); + 0 === (boundary.instructions & 1) + ? ((boundary.instructions |= 1), + writeChunk(destination, completeSegmentScript1Full)) + : writeChunk(destination, completeSegmentScript1Partial); + writeChunk(destination, request.segmentPrefix); + segmentID = stringToChunk(segmentID.toString(16)); + writeChunk(destination, segmentID); + writeChunk(destination, completeSegmentScript2); + writeChunk(destination, request.placeholderPrefix); + writeChunk(destination, segmentID); + destination = writeChunkAndReturn(destination, completeSegmentScriptEnd); + return destination; +} +var flushingPartialBoundaries = !1; +function flushCompletedQueues(request, destination) { + currentView = new Uint8Array(2048); + writtenBytes = 0; + try { + if (!(0 < request.pendingRootTasks)) { + var i, + completedRootSegment = request.completedRootSegment; + if (null !== completedRootSegment) { + if (5 === completedRootSegment.status) return; + var completedPreambleSegments = request.completedPreambleSegments; + if (null === completedPreambleSegments) return; + flushedByteSize = request.byteSize; + var resumableState = request.resumableState, + renderState = request.renderState, + preamble = renderState.preamble, + htmlChunks = preamble.htmlChunks, + headChunks = preamble.headChunks, + i$jscomp$0; + if (htmlChunks) { + for (i$jscomp$0 = 0; i$jscomp$0 < htmlChunks.length; i$jscomp$0++) + writeChunk(destination, htmlChunks[i$jscomp$0]); + if (headChunks) + for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++) + writeChunk(destination, headChunks[i$jscomp$0]); + else + writeChunk(destination, startChunkForTag("head")), + writeChunk(destination, endOfStartTag); + } else if (headChunks) + for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++) + writeChunk(destination, headChunks[i$jscomp$0]); + var charsetChunks = renderState.charsetChunks; + for (i$jscomp$0 = 0; i$jscomp$0 < charsetChunks.length; i$jscomp$0++) + writeChunk(destination, charsetChunks[i$jscomp$0]); + charsetChunks.length = 0; + renderState.preconnects.forEach(flushResource, destination); + renderState.preconnects.clear(); + var viewportChunks = renderState.viewportChunks; + for (i$jscomp$0 = 0; i$jscomp$0 < viewportChunks.length; i$jscomp$0++) + writeChunk(destination, viewportChunks[i$jscomp$0]); + viewportChunks.length = 0; + renderState.fontPreloads.forEach(flushResource, destination); + renderState.fontPreloads.clear(); + renderState.highImagePreloads.forEach(flushResource, destination); + renderState.highImagePreloads.clear(); + currentlyFlushingRenderState = renderState; + renderState.styles.forEach(flushStylesInPreamble, destination); + currentlyFlushingRenderState = null; + var importMapChunks = renderState.importMapChunks; + for (i$jscomp$0 = 0; i$jscomp$0 < importMapChunks.length; i$jscomp$0++) + writeChunk(destination, importMapChunks[i$jscomp$0]); + importMapChunks.length = 0; + renderState.bootstrapScripts.forEach(flushResource, destination); + renderState.scripts.forEach(flushResource, destination); + renderState.scripts.clear(); + renderState.bulkPreloads.forEach(flushResource, destination); + renderState.bulkPreloads.clear(); + htmlChunks || headChunks || (resumableState.instructions |= 32); + var hoistableChunks = renderState.hoistableChunks; + for (i$jscomp$0 = 0; i$jscomp$0 < hoistableChunks.length; i$jscomp$0++) + writeChunk(destination, hoistableChunks[i$jscomp$0]); + for ( + resumableState = hoistableChunks.length = 0; + resumableState < completedPreambleSegments.length; + resumableState++ + ) { + var segments = completedPreambleSegments[resumableState]; + for (renderState = 0; renderState < segments.length; renderState++) + flushSegment(request, destination, segments[renderState], null); + } + var preamble$jscomp$0 = request.renderState.preamble, + headChunks$jscomp$0 = preamble$jscomp$0.headChunks; + (preamble$jscomp$0.htmlChunks || headChunks$jscomp$0) && + writeChunk(destination, endChunkForTag("head")); + var bodyChunks = preamble$jscomp$0.bodyChunks; + if (bodyChunks) + for ( + completedPreambleSegments = 0; + completedPreambleSegments < bodyChunks.length; + completedPreambleSegments++ + ) + writeChunk(destination, bodyChunks[completedPreambleSegments]); + flushSegment(request, destination, completedRootSegment, null); + request.completedRootSegment = null; + var renderState$jscomp$0 = request.renderState; + if ( + 0 !== request.allPendingTasks || + 0 !== request.clientRenderedBoundaries.length || + 0 !== request.completedBoundaries.length || + (null !== request.trackedPostpones && + (0 !== request.trackedPostpones.rootNodes.length || + null !== request.trackedPostpones.rootSlots)) + ) { + var resumableState$jscomp$0 = request.resumableState; + if (0 === (resumableState$jscomp$0.instructions & 64)) { + resumableState$jscomp$0.instructions |= 64; + writeChunk(destination, renderState$jscomp$0.startInlineScript); + if (0 === (resumableState$jscomp$0.instructions & 32)) { + resumableState$jscomp$0.instructions |= 32; + var shellId = "_" + resumableState$jscomp$0.idPrefix + "R_"; + writeChunk(destination, completedShellIdAttributeStart); + writeChunk( + destination, + stringToChunk(escapeTextForBrowser(shellId)) + ); + writeChunk(destination, attributeEnd); + } + writeChunk(destination, endOfStartTag); + writeChunk(destination, shellTimeRuntimeScript); + writeChunkAndReturn(destination, endInlineScript); + } + } + writeBootstrap(destination, renderState$jscomp$0); + } + var renderState$jscomp$1 = request.renderState; + completedRootSegment = 0; + var viewportChunks$jscomp$0 = renderState$jscomp$1.viewportChunks; + for ( + completedRootSegment = 0; + completedRootSegment < viewportChunks$jscomp$0.length; + completedRootSegment++ + ) + writeChunk(destination, viewportChunks$jscomp$0[completedRootSegment]); + viewportChunks$jscomp$0.length = 0; + renderState$jscomp$1.preconnects.forEach(flushResource, destination); + renderState$jscomp$1.preconnects.clear(); + renderState$jscomp$1.fontPreloads.forEach(flushResource, destination); + renderState$jscomp$1.fontPreloads.clear(); + renderState$jscomp$1.highImagePreloads.forEach( + flushResource, + destination + ); + renderState$jscomp$1.highImagePreloads.clear(); + renderState$jscomp$1.styles.forEach(preloadLateStyles, destination); + renderState$jscomp$1.scripts.forEach(flushResource, destination); + renderState$jscomp$1.scripts.clear(); + renderState$jscomp$1.bulkPreloads.forEach(flushResource, destination); + renderState$jscomp$1.bulkPreloads.clear(); + var hoistableChunks$jscomp$0 = renderState$jscomp$1.hoistableChunks; + for ( + completedRootSegment = 0; + completedRootSegment < hoistableChunks$jscomp$0.length; + completedRootSegment++ + ) + writeChunk(destination, hoistableChunks$jscomp$0[completedRootSegment]); + hoistableChunks$jscomp$0.length = 0; + var clientRenderedBoundaries = request.clientRenderedBoundaries; + for (i = 0; i < clientRenderedBoundaries.length; i++) { + var boundary = clientRenderedBoundaries[i]; + renderState$jscomp$1 = destination; + var resumableState$jscomp$1 = request.resumableState, + renderState$jscomp$2 = request.renderState, + id = boundary.rootSegmentID, + errorDigest = boundary.errorDigest; + writeChunk( + renderState$jscomp$1, + renderState$jscomp$2.startInlineScript + ); + writeChunk(renderState$jscomp$1, endOfStartTag); + 0 === (resumableState$jscomp$1.instructions & 4) + ? ((resumableState$jscomp$1.instructions |= 4), + writeChunk(renderState$jscomp$1, clientRenderScript1Full)) + : writeChunk(renderState$jscomp$1, clientRenderScript1Partial); + writeChunk(renderState$jscomp$1, renderState$jscomp$2.boundaryPrefix); + writeChunk(renderState$jscomp$1, stringToChunk(id.toString(16))); + writeChunk(renderState$jscomp$1, clientRenderScript1A); + errorDigest && + (writeChunk( + renderState$jscomp$1, + clientRenderErrorScriptArgInterstitial + ), + writeChunk( + renderState$jscomp$1, + stringToChunk( + escapeJSStringsForInstructionScripts(errorDigest || "") + ) + )); + var JSCompiler_inline_result = writeChunkAndReturn( + renderState$jscomp$1, + clientRenderScriptEnd + ); + if (!JSCompiler_inline_result) { + request.destination = null; + i++; + clientRenderedBoundaries.splice(0, i); + return; + } + } + clientRenderedBoundaries.splice(0, i); + var completedBoundaries = request.completedBoundaries; + for (i = 0; i < completedBoundaries.length; i++) + if ( + !flushCompletedBoundary(request, destination, completedBoundaries[i]) + ) { + request.destination = null; + i++; + completedBoundaries.splice(0, i); + return; + } + completedBoundaries.splice(0, i); + completeWriting(destination); + currentView = new Uint8Array(2048); + writtenBytes = 0; + flushingPartialBoundaries = !0; + var partialBoundaries = request.partialBoundaries; + for (i = 0; i < partialBoundaries.length; i++) { + var boundary$70 = partialBoundaries[i]; + a: { + clientRenderedBoundaries = request; + boundary = destination; + flushedByteSize = boundary$70.byteSize; + var completedSegments = boundary$70.completedSegments; + for ( + JSCompiler_inline_result = 0; + JSCompiler_inline_result < completedSegments.length; + JSCompiler_inline_result++ + ) + if ( + !flushPartiallyCompletedSegment( + clientRenderedBoundaries, + boundary, + boundary$70, + completedSegments[JSCompiler_inline_result] + ) + ) { + JSCompiler_inline_result++; + completedSegments.splice(0, JSCompiler_inline_result); + var JSCompiler_inline_result$jscomp$0 = !1; + break a; + } + completedSegments.splice(0, JSCompiler_inline_result); + var row = boundary$70.row; + null !== row && + row.together && + 1 === boundary$70.pendingTasks && + (1 === row.pendingTasks + ? unblockSuspenseListRow( + clientRenderedBoundaries, + row, + row.hoistables + ) + : row.pendingTasks--); + JSCompiler_inline_result$jscomp$0 = writeHoistablesForBoundary( + boundary, + boundary$70.contentState, + clientRenderedBoundaries.renderState + ); + } + if (!JSCompiler_inline_result$jscomp$0) { + request.destination = null; + i++; + partialBoundaries.splice(0, i); + return; + } + } + partialBoundaries.splice(0, i); + flushingPartialBoundaries = !1; + var largeBoundaries = request.completedBoundaries; + for (i = 0; i < largeBoundaries.length; i++) + if (!flushCompletedBoundary(request, destination, largeBoundaries[i])) { + request.destination = null; + i++; + largeBoundaries.splice(0, i); + return; + } + largeBoundaries.splice(0, i); + } + } finally { + (flushingPartialBoundaries = !1), + 0 === request.allPendingTasks && + 0 === request.clientRenderedBoundaries.length && + 0 === request.completedBoundaries.length + ? ((request.flushScheduled = !1), + (i = request.resumableState), + i.hasBody && writeChunk(destination, endChunkForTag("body")), + i.hasHtml && writeChunk(destination, endChunkForTag("html")), + completeWriting(destination), + (request.status = 14), + destination.close(), + (request.destination = null)) + : completeWriting(destination); + } +} +function startWork(request) { + request.flushScheduled = null !== request.destination; + supportsRequestStorage + ? scheduleMicrotask(function () { + return requestStorage.run(request, performWork, request); + }) + : scheduleMicrotask(function () { + return performWork(request); + }); + setTimeout(function () { + 10 === request.status && (request.status = 11); + null === request.trackedPostpones && + (supportsRequestStorage + ? requestStorage.run( + request, + enqueueEarlyPreloadsAfterInitialWork, + request + ) + : enqueueEarlyPreloadsAfterInitialWork(request)); + }, 0); +} +function enqueueEarlyPreloadsAfterInitialWork(request) { + safelyEmitEarlyPreloads(request, 0 === request.pendingRootTasks); +} +function enqueueFlush(request) { + !1 === request.flushScheduled && + 0 === request.pingedTasks.length && + null !== request.destination && + ((request.flushScheduled = !0), + setTimeout(function () { + var destination = request.destination; + destination + ? flushCompletedQueues(request, destination) + : (request.flushScheduled = !1); + }, 0)); +} +function startFlowing(request, destination) { + if (13 === request.status) + (request.status = 14), closeWithError(destination, request.fatalError); + else if (14 !== request.status && null === request.destination) { + request.destination = destination; + try { + flushCompletedQueues(request, destination); + } catch (error) { + logRecoverableError(request, error, {}), fatalError(request, error); + } + } +} +function abort(request, reason) { + if (11 === request.status || 10 === request.status) request.status = 12; + try { + var abortableTasks = request.abortableTasks; + if (0 < abortableTasks.size) { + var error = + void 0 === reason + ? Error("The render was aborted by the server without a reason.") + : "object" === typeof reason && + null !== reason && + "function" === typeof reason.then + ? Error("The render was aborted by the server with a promise.") + : reason; + request.fatalError = error; + abortableTasks.forEach(function (task) { + return abortTask(task, request, error); + }); + abortableTasks.clear(); + } + null !== request.destination && + flushCompletedQueues(request, request.destination); + } catch (error$72) { + logRecoverableError(request, error$72, {}), fatalError(request, error$72); + } +} +function addToReplayParent(node, parentKeyPath, trackedPostpones) { + if (null === parentKeyPath) trackedPostpones.rootNodes.push(node); + else { + var workingMap = trackedPostpones.workingMap, + parentNode = workingMap.get(parentKeyPath); + void 0 === parentNode && + ((parentNode = [parentKeyPath[1], parentKeyPath[2], [], null]), + workingMap.set(parentKeyPath, parentNode), + addToReplayParent(parentNode, parentKeyPath[0], trackedPostpones)); + parentNode[2].push(node); + } +} +function getPostponedState(request) { + var trackedPostpones = request.trackedPostpones; + if ( + null === trackedPostpones || + (0 === trackedPostpones.rootNodes.length && + null === trackedPostpones.rootSlots) + ) + return (request.trackedPostpones = null); + if ( + null === request.completedRootSegment || + (5 !== request.completedRootSegment.status && + null !== request.completedPreambleSegments) + ) { + var nextSegmentId = request.nextSegmentId; + var replaySlots = trackedPostpones.rootSlots; + var resumableState = request.resumableState; + resumableState.bootstrapScriptContent = void 0; + resumableState.bootstrapScripts = void 0; + resumableState.bootstrapModules = void 0; + } else { + nextSegmentId = 0; + replaySlots = -1; + resumableState = request.resumableState; + var renderState = request.renderState; + resumableState.nextFormID = 0; + resumableState.hasBody = !1; + resumableState.hasHtml = !1; + resumableState.unknownResources = { font: renderState.resets.font }; + resumableState.dnsResources = renderState.resets.dns; + resumableState.connectResources = renderState.resets.connect; + resumableState.imageResources = renderState.resets.image; + resumableState.styleResources = renderState.resets.style; + resumableState.scriptResources = {}; + resumableState.moduleUnknownResources = {}; + resumableState.moduleScriptResources = {}; + resumableState.instructions = 0; + } + return { + nextSegmentId: nextSegmentId, + rootFormatContext: request.rootFormatContext, + progressiveChunkSize: request.progressiveChunkSize, + resumableState: request.resumableState, + replayNodes: trackedPostpones.rootNodes, + replaySlots: replaySlots + }; +} +function ensureCorrectIsomorphicReactVersion() { + var isomorphicReactPackageVersion = React.version; + if ("19.2.4" !== isomorphicReactPackageVersion) + throw Error( + 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + + (isomorphicReactPackageVersion + + "\n - react-dom: 19.2.4\nLearn more: https://react.dev/warnings/version-mismatch") + ); +} +ensureCorrectIsomorphicReactVersion(); +ensureCorrectIsomorphicReactVersion(); +exports.prerender = function (children, options) { + return new Promise(function (resolve, reject) { + var onHeaders = options ? options.onHeaders : void 0, + onHeadersImpl; + onHeaders && + (onHeadersImpl = function (headersDescriptor) { + onHeaders(new Headers(headersDescriptor)); + }); + var resources = createResumableState( + options ? options.identifierPrefix : void 0, + options ? options.unstable_externalRuntimeSrc : void 0, + options ? options.bootstrapScriptContent : void 0, + options ? options.bootstrapScripts : void 0, + options ? options.bootstrapModules : void 0 + ), + request = createPrerenderRequest( + children, + resources, + createRenderState( + resources, + void 0, + options ? options.unstable_externalRuntimeSrc : void 0, + options ? options.importMap : void 0, + onHeadersImpl, + options ? options.maxHeadersLength : void 0 + ), + createRootFormatContext(options ? options.namespaceURI : void 0), + options ? options.progressiveChunkSize : void 0, + options ? options.onError : void 0, + function () { + var stream = new ReadableStream( + { + type: "bytes", + pull: function (controller) { + startFlowing(request, controller); + }, + cancel: function (reason) { + request.destination = null; + abort(request, reason); + } + }, + { highWaterMark: 0 } + ); + stream = { postponed: getPostponedState(request), prelude: stream }; + resolve(stream); + }, + void 0, + void 0, + reject, + options ? options.onPostpone : void 0 + ); + if (options && options.signal) { + var signal = options.signal; + if (signal.aborted) abort(request, signal.reason); + else { + var listener = function () { + abort(request, signal.reason); + signal.removeEventListener("abort", listener); + }; + signal.addEventListener("abort", listener); + } + } + startWork(request); + }); +}; +exports.renderToReadableStream = function (children, options) { + return new Promise(function (resolve, reject) { + var onFatalError, + onAllReady, + allReady = new Promise(function (res, rej) { + onAllReady = res; + onFatalError = rej; + }), + onHeaders = options ? options.onHeaders : void 0, + onHeadersImpl; + onHeaders && + (onHeadersImpl = function (headersDescriptor) { + onHeaders(new Headers(headersDescriptor)); + }); + var resumableState = createResumableState( + options ? options.identifierPrefix : void 0, + options ? options.unstable_externalRuntimeSrc : void 0, + options ? options.bootstrapScriptContent : void 0, + options ? options.bootstrapScripts : void 0, + options ? options.bootstrapModules : void 0 + ), + request = createRequest( + children, + resumableState, + createRenderState( + resumableState, + options ? options.nonce : void 0, + options ? options.unstable_externalRuntimeSrc : void 0, + options ? options.importMap : void 0, + onHeadersImpl, + options ? options.maxHeadersLength : void 0 + ), + createRootFormatContext(options ? options.namespaceURI : void 0), + options ? options.progressiveChunkSize : void 0, + options ? options.onError : void 0, + onAllReady, + function () { + var stream = new ReadableStream( + { + type: "bytes", + pull: function (controller) { + startFlowing(request, controller); + }, + cancel: function (reason) { + request.destination = null; + abort(request, reason); + } + }, + { highWaterMark: 0 } + ); + stream.allReady = allReady; + resolve(stream); + }, + function (error) { + allReady.catch(function () {}); + reject(error); + }, + onFatalError, + options ? options.onPostpone : void 0, + options ? options.formState : void 0 + ); + if (options && options.signal) { + var signal = options.signal; + if (signal.aborted) abort(request, signal.reason); + else { + var listener = function () { + abort(request, signal.reason); + signal.removeEventListener("abort", listener); + }; + signal.addEventListener("abort", listener); + } + } + startWork(request); + }); +}; +exports.resume = function (children, postponedState, options) { + return new Promise(function (resolve, reject) { + var onFatalError, + onAllReady, + allReady = new Promise(function (res, rej) { + onAllReady = res; + onFatalError = rej; + }), + request = resumeRequest( + children, + postponedState, + createRenderState( + postponedState.resumableState, + options ? options.nonce : void 0, + void 0, + void 0, + void 0, + void 0 + ), + options ? options.onError : void 0, + onAllReady, + function () { + var stream = new ReadableStream( + { + type: "bytes", + pull: function (controller) { + startFlowing(request, controller); + }, + cancel: function (reason) { + request.destination = null; + abort(request, reason); + } + }, + { highWaterMark: 0 } + ); + stream.allReady = allReady; + resolve(stream); + }, + function (error) { + allReady.catch(function () {}); + reject(error); + }, + onFatalError, + options ? options.onPostpone : void 0 + ); + if (options && options.signal) { + var signal = options.signal; + if (signal.aborted) abort(request, signal.reason); + else { + var listener = function () { + abort(request, signal.reason); + signal.removeEventListener("abort", listener); + }; + signal.addEventListener("abort", listener); + } + } + startWork(request); + }); +}; +exports.resumeAndPrerender = function (children, postponedState, options) { + return new Promise(function (resolve, reject) { + var request = resumeAndPrerenderRequest( + children, + postponedState, + createRenderState( + postponedState.resumableState, + void 0, + void 0, + void 0, + void 0, + void 0 + ), + options ? options.onError : void 0, + function () { + var stream = new ReadableStream( + { + type: "bytes", + pull: function (controller) { + startFlowing(request, controller); + }, + cancel: function (reason) { + request.destination = null; + abort(request, reason); + } + }, + { highWaterMark: 0 } + ); + stream = { postponed: getPostponedState(request), prelude: stream }; + resolve(stream); + }, + void 0, + void 0, + reject, + options ? options.onPostpone : void 0 + ); + if (options && options.signal) { + var signal = options.signal; + if (signal.aborted) abort(request, signal.reason); + else { + var listener = function () { + abort(request, signal.reason); + signal.removeEventListener("abort", listener); + }; + signal.addEventListener("abort", listener); + } + } + startWork(request); + }); +}; +exports.version = "19.2.4"; diff --git a/build/node_modules/react-dom/cjs/react-dom-server.node.production.js b/build/node_modules/react-dom/cjs/react-dom-server.node.production.js new file mode 100644 index 0000000..65d1872 --- /dev/null +++ b/build/node_modules/react-dom/cjs/react-dom-server.node.production.js @@ -0,0 +1,7707 @@ +/** + * @license React + * react-dom-server.node.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; +var util = require("util"), + crypto = require("crypto"), + async_hooks = require("async_hooks"), + React = require("react"), + ReactDOM = require("react-dom"), + stream = require("stream"), + REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), + REACT_PORTAL_TYPE = Symbol.for("react.portal"), + REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), + REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), + REACT_PROFILER_TYPE = Symbol.for("react.profiler"), + REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), + REACT_CONTEXT_TYPE = Symbol.for("react.context"), + REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), + REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), + REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), + REACT_MEMO_TYPE = Symbol.for("react.memo"), + REACT_LAZY_TYPE = Symbol.for("react.lazy"), + REACT_SCOPE_TYPE = Symbol.for("react.scope"), + REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), + REACT_LEGACY_HIDDEN_TYPE = Symbol.for("react.legacy_hidden"), + REACT_MEMO_CACHE_SENTINEL = Symbol.for("react.memo_cache_sentinel"), + REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"), + MAYBE_ITERATOR_SYMBOL = Symbol.iterator; +function getIteratorFn(maybeIterable) { + if (null === maybeIterable || "object" !== typeof maybeIterable) return null; + maybeIterable = + (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) || + maybeIterable["@@iterator"]; + return "function" === typeof maybeIterable ? maybeIterable : null; +} +var isArrayImpl = Array.isArray, + scheduleMicrotask = queueMicrotask; +function flushBuffered(destination) { + "function" === typeof destination.flush && destination.flush(); +} +var currentView = null, + writtenBytes = 0, + destinationHasCapacity$1 = !0; +function writeChunk(destination, chunk) { + if ("string" === typeof chunk) { + if (0 !== chunk.length) + if (2048 < 3 * chunk.length) + 0 < writtenBytes && + (writeToDestination( + destination, + currentView.subarray(0, writtenBytes) + ), + (currentView = new Uint8Array(2048)), + (writtenBytes = 0)), + writeToDestination(destination, chunk); + else { + var target = currentView; + 0 < writtenBytes && (target = currentView.subarray(writtenBytes)); + target = textEncoder.encodeInto(chunk, target); + var read = target.read; + writtenBytes += target.written; + read < chunk.length && + (writeToDestination( + destination, + currentView.subarray(0, writtenBytes) + ), + (currentView = new Uint8Array(2048)), + (writtenBytes = textEncoder.encodeInto( + chunk.slice(read), + currentView + ).written)); + 2048 === writtenBytes && + (writeToDestination(destination, currentView), + (currentView = new Uint8Array(2048)), + (writtenBytes = 0)); + } + } else + 0 !== chunk.byteLength && + (2048 < chunk.byteLength + ? (0 < writtenBytes && + (writeToDestination( + destination, + currentView.subarray(0, writtenBytes) + ), + (currentView = new Uint8Array(2048)), + (writtenBytes = 0)), + writeToDestination(destination, chunk)) + : ((target = currentView.length - writtenBytes), + target < chunk.byteLength && + (0 === target + ? writeToDestination(destination, currentView) + : (currentView.set(chunk.subarray(0, target), writtenBytes), + (writtenBytes += target), + writeToDestination(destination, currentView), + (chunk = chunk.subarray(target))), + (currentView = new Uint8Array(2048)), + (writtenBytes = 0)), + currentView.set(chunk, writtenBytes), + (writtenBytes += chunk.byteLength), + 2048 === writtenBytes && + (writeToDestination(destination, currentView), + (currentView = new Uint8Array(2048)), + (writtenBytes = 0)))); +} +function writeToDestination(destination, view) { + destination = destination.write(view); + destinationHasCapacity$1 = destinationHasCapacity$1 && destination; +} +function writeChunkAndReturn(destination, chunk) { + writeChunk(destination, chunk); + return destinationHasCapacity$1; +} +function completeWriting(destination) { + currentView && + 0 < writtenBytes && + destination.write(currentView.subarray(0, writtenBytes)); + currentView = null; + writtenBytes = 0; + destinationHasCapacity$1 = !0; +} +var textEncoder = new util.TextEncoder(); +function stringToPrecomputedChunk(content) { + return textEncoder.encode(content); +} +function byteLengthOfChunk(chunk) { + return "string" === typeof chunk + ? Buffer.byteLength(chunk, "utf8") + : chunk.byteLength; +} +var assign = Object.assign, + hasOwnProperty = Object.prototype.hasOwnProperty, + VALID_ATTRIBUTE_NAME_REGEX = RegExp( + "^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$" + ), + illegalAttributeNameCache = {}, + validatedAttributeNameCache = {}; +function isAttributeNameSafe(attributeName) { + if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) + return !0; + if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1; + if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) + return (validatedAttributeNameCache[attributeName] = !0); + illegalAttributeNameCache[attributeName] = !0; + return !1; +} +var unitlessNumbers = new Set( + "animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split( + " " + ) + ), + aliases = new Map([ + ["acceptCharset", "accept-charset"], + ["htmlFor", "for"], + ["httpEquiv", "http-equiv"], + ["crossOrigin", "crossorigin"], + ["accentHeight", "accent-height"], + ["alignmentBaseline", "alignment-baseline"], + ["arabicForm", "arabic-form"], + ["baselineShift", "baseline-shift"], + ["capHeight", "cap-height"], + ["clipPath", "clip-path"], + ["clipRule", "clip-rule"], + ["colorInterpolation", "color-interpolation"], + ["colorInterpolationFilters", "color-interpolation-filters"], + ["colorProfile", "color-profile"], + ["colorRendering", "color-rendering"], + ["dominantBaseline", "dominant-baseline"], + ["enableBackground", "enable-background"], + ["fillOpacity", "fill-opacity"], + ["fillRule", "fill-rule"], + ["floodColor", "flood-color"], + ["floodOpacity", "flood-opacity"], + ["fontFamily", "font-family"], + ["fontSize", "font-size"], + ["fontSizeAdjust", "font-size-adjust"], + ["fontStretch", "font-stretch"], + ["fontStyle", "font-style"], + ["fontVariant", "font-variant"], + ["fontWeight", "font-weight"], + ["glyphName", "glyph-name"], + ["glyphOrientationHorizontal", "glyph-orientation-horizontal"], + ["glyphOrientationVertical", "glyph-orientation-vertical"], + ["horizAdvX", "horiz-adv-x"], + ["horizOriginX", "horiz-origin-x"], + ["imageRendering", "image-rendering"], + ["letterSpacing", "letter-spacing"], + ["lightingColor", "lighting-color"], + ["markerEnd", "marker-end"], + ["markerMid", "marker-mid"], + ["markerStart", "marker-start"], + ["overlinePosition", "overline-position"], + ["overlineThickness", "overline-thickness"], + ["paintOrder", "paint-order"], + ["panose-1", "panose-1"], + ["pointerEvents", "pointer-events"], + ["renderingIntent", "rendering-intent"], + ["shapeRendering", "shape-rendering"], + ["stopColor", "stop-color"], + ["stopOpacity", "stop-opacity"], + ["strikethroughPosition", "strikethrough-position"], + ["strikethroughThickness", "strikethrough-thickness"], + ["strokeDasharray", "stroke-dasharray"], + ["strokeDashoffset", "stroke-dashoffset"], + ["strokeLinecap", "stroke-linecap"], + ["strokeLinejoin", "stroke-linejoin"], + ["strokeMiterlimit", "stroke-miterlimit"], + ["strokeOpacity", "stroke-opacity"], + ["strokeWidth", "stroke-width"], + ["textAnchor", "text-anchor"], + ["textDecoration", "text-decoration"], + ["textRendering", "text-rendering"], + ["transformOrigin", "transform-origin"], + ["underlinePosition", "underline-position"], + ["underlineThickness", "underline-thickness"], + ["unicodeBidi", "unicode-bidi"], + ["unicodeRange", "unicode-range"], + ["unitsPerEm", "units-per-em"], + ["vAlphabetic", "v-alphabetic"], + ["vHanging", "v-hanging"], + ["vIdeographic", "v-ideographic"], + ["vMathematical", "v-mathematical"], + ["vectorEffect", "vector-effect"], + ["vertAdvY", "vert-adv-y"], + ["vertOriginX", "vert-origin-x"], + ["vertOriginY", "vert-origin-y"], + ["wordSpacing", "word-spacing"], + ["writingMode", "writing-mode"], + ["xmlnsXlink", "xmlns:xlink"], + ["xHeight", "x-height"] + ]), + matchHtmlRegExp = /["'&<>]/; +function escapeTextForBrowser(text) { + if ( + "boolean" === typeof text || + "number" === typeof text || + "bigint" === typeof text + ) + return "" + text; + text = "" + text; + var match = matchHtmlRegExp.exec(text); + if (match) { + var html = "", + index, + lastIndex = 0; + for (index = match.index; index < text.length; index++) { + switch (text.charCodeAt(index)) { + case 34: + match = """; + break; + case 38: + match = "&"; + break; + case 39: + match = "'"; + break; + case 60: + match = "<"; + break; + case 62: + match = ">"; + break; + default: + continue; + } + lastIndex !== index && (html += text.slice(lastIndex, index)); + lastIndex = index + 1; + html += match; + } + text = lastIndex !== index ? html + text.slice(lastIndex, index) : html; + } + return text; +} +var uppercasePattern = /([A-Z])/g, + msPattern = /^ms-/, + isJavaScriptProtocol = + /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i; +function sanitizeURL(url) { + return isJavaScriptProtocol.test("" + url) + ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')" + : url; +} +var ReactSharedInternals = + React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, + ReactDOMSharedInternals = + ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, + sharedNotPendingObject = { + pending: !1, + data: null, + method: null, + action: null + }, + previousDispatcher = ReactDOMSharedInternals.d; +ReactDOMSharedInternals.d = { + f: previousDispatcher.f, + r: previousDispatcher.r, + D: prefetchDNS, + C: preconnect, + L: preload, + m: preloadModule, + X: preinitScript, + S: preinitStyle, + M: preinitModuleScript +}; +var PRELOAD_NO_CREDS = [], + currentlyFlushingRenderState = null; +stringToPrecomputedChunk('"></template>'); +var startInlineScript = stringToPrecomputedChunk("<script"), + endInlineScript = stringToPrecomputedChunk("\x3c/script>"), + startScriptSrc = stringToPrecomputedChunk('<script src="'), + startModuleSrc = stringToPrecomputedChunk('<script type="module" src="'), + scriptNonce = stringToPrecomputedChunk(' nonce="'), + scriptIntegirty = stringToPrecomputedChunk(' integrity="'), + scriptCrossOrigin = stringToPrecomputedChunk(' crossorigin="'), + endAsyncScript = stringToPrecomputedChunk(' async="">\x3c/script>'), + startInlineStyle = stringToPrecomputedChunk("<style"), + scriptRegex = /(<\/|<)(s)(cript)/gi; +function scriptReplacer(match, prefix, s, suffix) { + return "" + prefix + ("s" === s ? "\\u0073" : "\\u0053") + suffix; +} +var importMapScriptStart = stringToPrecomputedChunk( + '<script type="importmap">' + ), + importMapScriptEnd = stringToPrecomputedChunk("\x3c/script>"); +function createRenderState( + resumableState, + nonce, + externalRuntimeConfig, + importMap, + onHeaders, + maxHeadersLength +) { + externalRuntimeConfig = + "string" === typeof nonce ? nonce : nonce && nonce.script; + var inlineScriptWithNonce = + void 0 === externalRuntimeConfig + ? startInlineScript + : stringToPrecomputedChunk( + '<script nonce="' + + escapeTextForBrowser(externalRuntimeConfig) + + '"' + ), + nonceStyle = "string" === typeof nonce ? void 0 : nonce && nonce.style, + inlineStyleWithNonce = + void 0 === nonceStyle + ? startInlineStyle + : stringToPrecomputedChunk( + '<style nonce="' + escapeTextForBrowser(nonceStyle) + '"' + ), + idPrefix = resumableState.idPrefix, + bootstrapChunks = [], + bootstrapScriptContent = resumableState.bootstrapScriptContent, + bootstrapScripts = resumableState.bootstrapScripts, + bootstrapModules = resumableState.bootstrapModules; + void 0 !== bootstrapScriptContent && + (bootstrapChunks.push(inlineScriptWithNonce), + pushCompletedShellIdAttribute(bootstrapChunks, resumableState), + bootstrapChunks.push( + endOfStartTag, + ("" + bootstrapScriptContent).replace(scriptRegex, scriptReplacer), + endInlineScript + )); + bootstrapScriptContent = []; + void 0 !== importMap && + (bootstrapScriptContent.push(importMapScriptStart), + bootstrapScriptContent.push( + ("" + JSON.stringify(importMap)).replace(scriptRegex, scriptReplacer) + ), + bootstrapScriptContent.push(importMapScriptEnd)); + importMap = onHeaders + ? { + preconnects: "", + fontPreloads: "", + highImagePreloads: "", + remainingCapacity: + 2 + ("number" === typeof maxHeadersLength ? maxHeadersLength : 2e3) + } + : null; + onHeaders = { + placeholderPrefix: stringToPrecomputedChunk(idPrefix + "P:"), + segmentPrefix: stringToPrecomputedChunk(idPrefix + "S:"), + boundaryPrefix: stringToPrecomputedChunk(idPrefix + "B:"), + startInlineScript: inlineScriptWithNonce, + startInlineStyle: inlineStyleWithNonce, + preamble: createPreambleState(), + externalRuntimeScript: null, + bootstrapChunks: bootstrapChunks, + importMapChunks: bootstrapScriptContent, + onHeaders: onHeaders, + headers: importMap, + resets: { + font: {}, + dns: {}, + connect: { default: {}, anonymous: {}, credentials: {} }, + image: {}, + style: {} + }, + charsetChunks: [], + viewportChunks: [], + hoistableChunks: [], + preconnects: new Set(), + fontPreloads: new Set(), + highImagePreloads: new Set(), + styles: new Map(), + bootstrapScripts: new Set(), + scripts: new Set(), + bulkPreloads: new Set(), + preloads: { + images: new Map(), + stylesheets: new Map(), + scripts: new Map(), + moduleScripts: new Map() + }, + nonce: { script: externalRuntimeConfig, style: nonceStyle }, + hoistableState: null, + stylesToHoist: !1 + }; + if (void 0 !== bootstrapScripts) + for (importMap = 0; importMap < bootstrapScripts.length; importMap++) + (idPrefix = bootstrapScripts[importMap]), + (nonceStyle = inlineScriptWithNonce = void 0), + (inlineStyleWithNonce = { + rel: "preload", + as: "script", + fetchPriority: "low", + nonce: nonce + }), + "string" === typeof idPrefix + ? (inlineStyleWithNonce.href = maxHeadersLength = idPrefix) + : ((inlineStyleWithNonce.href = maxHeadersLength = idPrefix.src), + (inlineStyleWithNonce.integrity = nonceStyle = + "string" === typeof idPrefix.integrity + ? idPrefix.integrity + : void 0), + (inlineStyleWithNonce.crossOrigin = inlineScriptWithNonce = + "string" === typeof idPrefix || null == idPrefix.crossOrigin + ? void 0 + : "use-credentials" === idPrefix.crossOrigin + ? "use-credentials" + : "")), + (idPrefix = resumableState), + (bootstrapScriptContent = maxHeadersLength), + (idPrefix.scriptResources[bootstrapScriptContent] = null), + (idPrefix.moduleScriptResources[bootstrapScriptContent] = null), + (idPrefix = []), + pushLinkImpl(idPrefix, inlineStyleWithNonce), + onHeaders.bootstrapScripts.add(idPrefix), + bootstrapChunks.push( + startScriptSrc, + escapeTextForBrowser(maxHeadersLength), + attributeEnd + ), + externalRuntimeConfig && + bootstrapChunks.push( + scriptNonce, + escapeTextForBrowser(externalRuntimeConfig), + attributeEnd + ), + "string" === typeof nonceStyle && + bootstrapChunks.push( + scriptIntegirty, + escapeTextForBrowser(nonceStyle), + attributeEnd + ), + "string" === typeof inlineScriptWithNonce && + bootstrapChunks.push( + scriptCrossOrigin, + escapeTextForBrowser(inlineScriptWithNonce), + attributeEnd + ), + pushCompletedShellIdAttribute(bootstrapChunks, resumableState), + bootstrapChunks.push(endAsyncScript); + if (void 0 !== bootstrapModules) + for (nonce = 0; nonce < bootstrapModules.length; nonce++) + (nonceStyle = bootstrapModules[nonce]), + (maxHeadersLength = importMap = void 0), + (inlineScriptWithNonce = { + rel: "modulepreload", + fetchPriority: "low", + nonce: externalRuntimeConfig + }), + "string" === typeof nonceStyle + ? (inlineScriptWithNonce.href = bootstrapScripts = nonceStyle) + : ((inlineScriptWithNonce.href = bootstrapScripts = nonceStyle.src), + (inlineScriptWithNonce.integrity = maxHeadersLength = + "string" === typeof nonceStyle.integrity + ? nonceStyle.integrity + : void 0), + (inlineScriptWithNonce.crossOrigin = importMap = + "string" === typeof nonceStyle || null == nonceStyle.crossOrigin + ? void 0 + : "use-credentials" === nonceStyle.crossOrigin + ? "use-credentials" + : "")), + (nonceStyle = resumableState), + (inlineStyleWithNonce = bootstrapScripts), + (nonceStyle.scriptResources[inlineStyleWithNonce] = null), + (nonceStyle.moduleScriptResources[inlineStyleWithNonce] = null), + (nonceStyle = []), + pushLinkImpl(nonceStyle, inlineScriptWithNonce), + onHeaders.bootstrapScripts.add(nonceStyle), + bootstrapChunks.push( + startModuleSrc, + escapeTextForBrowser(bootstrapScripts), + attributeEnd + ), + externalRuntimeConfig && + bootstrapChunks.push( + scriptNonce, + escapeTextForBrowser(externalRuntimeConfig), + attributeEnd + ), + "string" === typeof maxHeadersLength && + bootstrapChunks.push( + scriptIntegirty, + escapeTextForBrowser(maxHeadersLength), + attributeEnd + ), + "string" === typeof importMap && + bootstrapChunks.push( + scriptCrossOrigin, + escapeTextForBrowser(importMap), + attributeEnd + ), + pushCompletedShellIdAttribute(bootstrapChunks, resumableState), + bootstrapChunks.push(endAsyncScript); + return onHeaders; +} +function createResumableState( + identifierPrefix, + externalRuntimeConfig, + bootstrapScriptContent, + bootstrapScripts, + bootstrapModules +) { + return { + idPrefix: void 0 === identifierPrefix ? "" : identifierPrefix, + nextFormID: 0, + streamingFormat: 0, + bootstrapScriptContent: bootstrapScriptContent, + bootstrapScripts: bootstrapScripts, + bootstrapModules: bootstrapModules, + instructions: 0, + hasBody: !1, + hasHtml: !1, + unknownResources: {}, + dnsResources: {}, + connectResources: { default: {}, anonymous: {}, credentials: {} }, + imageResources: {}, + styleResources: {}, + scriptResources: {}, + moduleUnknownResources: {}, + moduleScriptResources: {} + }; +} +function createPreambleState() { + return { htmlChunks: null, headChunks: null, bodyChunks: null }; +} +function createFormatContext( + insertionMode, + selectedValue, + tagScope, + viewTransition +) { + return { + insertionMode: insertionMode, + selectedValue: selectedValue, + tagScope: tagScope, + viewTransition: viewTransition + }; +} +function createRootFormatContext(namespaceURI) { + return createFormatContext( + "http://www.w3.org/2000/svg" === namespaceURI + ? 4 + : "http://www.w3.org/1998/Math/MathML" === namespaceURI + ? 5 + : 0, + null, + 0, + null + ); +} +function getChildFormatContext(parentContext, type, props) { + var subtreeScope = parentContext.tagScope & -25; + switch (type) { + case "noscript": + return createFormatContext(2, null, subtreeScope | 1, null); + case "select": + return createFormatContext( + 2, + null != props.value ? props.value : props.defaultValue, + subtreeScope, + null + ); + case "svg": + return createFormatContext(4, null, subtreeScope, null); + case "picture": + return createFormatContext(2, null, subtreeScope | 2, null); + case "math": + return createFormatContext(5, null, subtreeScope, null); + case "foreignObject": + return createFormatContext(2, null, subtreeScope, null); + case "table": + return createFormatContext(6, null, subtreeScope, null); + case "thead": + case "tbody": + case "tfoot": + return createFormatContext(7, null, subtreeScope, null); + case "colgroup": + return createFormatContext(9, null, subtreeScope, null); + case "tr": + return createFormatContext(8, null, subtreeScope, null); + case "head": + if (2 > parentContext.insertionMode) + return createFormatContext(3, null, subtreeScope, null); + break; + case "html": + if (0 === parentContext.insertionMode) + return createFormatContext(1, null, subtreeScope, null); + } + return 6 <= parentContext.insertionMode || 2 > parentContext.insertionMode + ? createFormatContext(2, null, subtreeScope, null) + : parentContext.tagScope !== subtreeScope + ? createFormatContext( + parentContext.insertionMode, + parentContext.selectedValue, + subtreeScope, + null + ) + : parentContext; +} +function getSuspenseViewTransition(parentViewTransition) { + return null === parentViewTransition + ? null + : { + update: parentViewTransition.update, + enter: "none", + exit: "none", + share: parentViewTransition.update, + name: parentViewTransition.autoName, + autoName: parentViewTransition.autoName, + nameIdx: 0 + }; +} +function getSuspenseFallbackFormatContext(resumableState, parentContext) { + parentContext.tagScope & 32 && (resumableState.instructions |= 128); + return createFormatContext( + parentContext.insertionMode, + parentContext.selectedValue, + parentContext.tagScope | 12, + getSuspenseViewTransition(parentContext.viewTransition) + ); +} +function getSuspenseContentFormatContext(resumableState, parentContext) { + resumableState = getSuspenseViewTransition(parentContext.viewTransition); + var subtreeScope = parentContext.tagScope | 16; + null !== resumableState && + "none" !== resumableState.share && + (subtreeScope |= 64); + return createFormatContext( + parentContext.insertionMode, + parentContext.selectedValue, + subtreeScope, + resumableState + ); +} +var textSeparator = stringToPrecomputedChunk("\x3c!-- --\x3e"); +function pushTextInstance(target, text, renderState, textEmbedded) { + if ("" === text) return textEmbedded; + textEmbedded && target.push(textSeparator); + target.push(escapeTextForBrowser(text)); + return !0; +} +var styleNameCache = new Map(), + styleAttributeStart = stringToPrecomputedChunk(' style="'), + styleAssign = stringToPrecomputedChunk(":"), + styleSeparator = stringToPrecomputedChunk(";"); +function pushStyleAttribute(target, style) { + if ("object" !== typeof style) + throw Error( + "The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX." + ); + var isFirst = !0, + styleName; + for (styleName in style) + if (hasOwnProperty.call(style, styleName)) { + var styleValue = style[styleName]; + if ( + null != styleValue && + "boolean" !== typeof styleValue && + "" !== styleValue + ) { + if (0 === styleName.indexOf("--")) { + var nameChunk = escapeTextForBrowser(styleName); + styleValue = escapeTextForBrowser(("" + styleValue).trim()); + } else + (nameChunk = styleNameCache.get(styleName)), + void 0 === nameChunk && + ((nameChunk = stringToPrecomputedChunk( + escapeTextForBrowser( + styleName + .replace(uppercasePattern, "-$1") + .toLowerCase() + .replace(msPattern, "-ms-") + ) + )), + styleNameCache.set(styleName, nameChunk)), + (styleValue = + "number" === typeof styleValue + ? 0 === styleValue || unitlessNumbers.has(styleName) + ? "" + styleValue + : styleValue + "px" + : escapeTextForBrowser(("" + styleValue).trim())); + isFirst + ? ((isFirst = !1), + target.push( + styleAttributeStart, + nameChunk, + styleAssign, + styleValue + )) + : target.push(styleSeparator, nameChunk, styleAssign, styleValue); + } + } + isFirst || target.push(attributeEnd); +} +var attributeSeparator = stringToPrecomputedChunk(" "), + attributeAssign = stringToPrecomputedChunk('="'), + attributeEnd = stringToPrecomputedChunk('"'), + attributeEmptyString = stringToPrecomputedChunk('=""'); +function pushBooleanAttribute(target, name, value) { + value && + "function" !== typeof value && + "symbol" !== typeof value && + target.push(attributeSeparator, name, attributeEmptyString); +} +function pushStringAttribute(target, name, value) { + "function" !== typeof value && + "symbol" !== typeof value && + "boolean" !== typeof value && + target.push( + attributeSeparator, + name, + attributeAssign, + escapeTextForBrowser(value), + attributeEnd + ); +} +var actionJavaScriptURL = stringToPrecomputedChunk( + escapeTextForBrowser( + "javascript:throw new Error('React form unexpectedly submitted.')" + ) + ), + startHiddenInputChunk = stringToPrecomputedChunk('<input type="hidden"'); +function pushAdditionalFormField(value, key) { + this.push(startHiddenInputChunk); + validateAdditionalFormField(value); + pushStringAttribute(this, "name", key); + pushStringAttribute(this, "value", value); + this.push(endOfStartTagSelfClosing); +} +function validateAdditionalFormField(value) { + if ("string" !== typeof value) + throw Error( + "File/Blob fields are not yet supported in progressive forms. Will fallback to client hydration." + ); +} +function getCustomFormFields(resumableState, formAction) { + if ("function" === typeof formAction.$$FORM_ACTION) { + var id = resumableState.nextFormID++; + resumableState = resumableState.idPrefix + id; + try { + var customFields = formAction.$$FORM_ACTION(resumableState); + if (customFields) { + var formData = customFields.data; + null != formData && formData.forEach(validateAdditionalFormField); + } + return customFields; + } catch (x) { + if ("object" === typeof x && null !== x && "function" === typeof x.then) + throw x; + } + } + return null; +} +function pushFormActionAttribute( + target, + resumableState, + renderState, + formAction, + formEncType, + formMethod, + formTarget, + name +) { + var formData = null; + if ("function" === typeof formAction) { + var customFields = getCustomFormFields(resumableState, formAction); + null !== customFields + ? ((name = customFields.name), + (formAction = customFields.action || ""), + (formEncType = customFields.encType), + (formMethod = customFields.method), + (formTarget = customFields.target), + (formData = customFields.data)) + : (target.push( + attributeSeparator, + "formAction", + attributeAssign, + actionJavaScriptURL, + attributeEnd + ), + (formTarget = formMethod = formEncType = formAction = name = null), + injectFormReplayingRuntime(resumableState, renderState)); + } + null != name && pushAttribute(target, "name", name); + null != formAction && pushAttribute(target, "formAction", formAction); + null != formEncType && pushAttribute(target, "formEncType", formEncType); + null != formMethod && pushAttribute(target, "formMethod", formMethod); + null != formTarget && pushAttribute(target, "formTarget", formTarget); + return formData; +} +function pushAttribute(target, name, value) { + switch (name) { + case "className": + pushStringAttribute(target, "class", value); + break; + case "tabIndex": + pushStringAttribute(target, "tabindex", value); + break; + case "dir": + case "role": + case "viewBox": + case "width": + case "height": + pushStringAttribute(target, name, value); + break; + case "style": + pushStyleAttribute(target, value); + break; + case "src": + case "href": + if ("" === value) break; + case "action": + case "formAction": + if ( + null == value || + "function" === typeof value || + "symbol" === typeof value || + "boolean" === typeof value + ) + break; + value = sanitizeURL("" + value); + target.push( + attributeSeparator, + name, + attributeAssign, + escapeTextForBrowser(value), + attributeEnd + ); + break; + case "defaultValue": + case "defaultChecked": + case "innerHTML": + case "suppressContentEditableWarning": + case "suppressHydrationWarning": + case "ref": + break; + case "autoFocus": + case "multiple": + case "muted": + pushBooleanAttribute(target, name.toLowerCase(), value); + break; + case "xlinkHref": + if ( + "function" === typeof value || + "symbol" === typeof value || + "boolean" === typeof value + ) + break; + value = sanitizeURL("" + value); + target.push( + attributeSeparator, + "xlink:href", + attributeAssign, + escapeTextForBrowser(value), + attributeEnd + ); + break; + case "contentEditable": + case "spellCheck": + case "draggable": + case "value": + case "autoReverse": + case "externalResourcesRequired": + case "focusable": + case "preserveAlpha": + "function" !== typeof value && + "symbol" !== typeof value && + target.push( + attributeSeparator, + name, + attributeAssign, + escapeTextForBrowser(value), + attributeEnd + ); + break; + case "inert": + case "allowFullScreen": + case "async": + case "autoPlay": + case "controls": + case "default": + case "defer": + case "disabled": + case "disablePictureInPicture": + case "disableRemotePlayback": + case "formNoValidate": + case "hidden": + case "loop": + case "noModule": + case "noValidate": + case "open": + case "playsInline": + case "readOnly": + case "required": + case "reversed": + case "scoped": + case "seamless": + case "itemScope": + value && + "function" !== typeof value && + "symbol" !== typeof value && + target.push(attributeSeparator, name, attributeEmptyString); + break; + case "capture": + case "download": + !0 === value + ? target.push(attributeSeparator, name, attributeEmptyString) + : !1 !== value && + "function" !== typeof value && + "symbol" !== typeof value && + target.push( + attributeSeparator, + name, + attributeAssign, + escapeTextForBrowser(value), + attributeEnd + ); + break; + case "cols": + case "rows": + case "size": + case "span": + "function" !== typeof value && + "symbol" !== typeof value && + !isNaN(value) && + 1 <= value && + target.push( + attributeSeparator, + name, + attributeAssign, + escapeTextForBrowser(value), + attributeEnd + ); + break; + case "rowSpan": + case "start": + "function" === typeof value || + "symbol" === typeof value || + isNaN(value) || + target.push( + attributeSeparator, + name, + attributeAssign, + escapeTextForBrowser(value), + attributeEnd + ); + break; + case "xlinkActuate": + pushStringAttribute(target, "xlink:actuate", value); + break; + case "xlinkArcrole": + pushStringAttribute(target, "xlink:arcrole", value); + break; + case "xlinkRole": + pushStringAttribute(target, "xlink:role", value); + break; + case "xlinkShow": + pushStringAttribute(target, "xlink:show", value); + break; + case "xlinkTitle": + pushStringAttribute(target, "xlink:title", value); + break; + case "xlinkType": + pushStringAttribute(target, "xlink:type", value); + break; + case "xmlBase": + pushStringAttribute(target, "xml:base", value); + break; + case "xmlLang": + pushStringAttribute(target, "xml:lang", value); + break; + case "xmlSpace": + pushStringAttribute(target, "xml:space", value); + break; + default: + if ( + !(2 < name.length) || + ("o" !== name[0] && "O" !== name[0]) || + ("n" !== name[1] && "N" !== name[1]) + ) + if (((name = aliases.get(name) || name), isAttributeNameSafe(name))) { + switch (typeof value) { + case "function": + case "symbol": + return; + case "boolean": + var prefix$8 = name.toLowerCase().slice(0, 5); + if ("data-" !== prefix$8 && "aria-" !== prefix$8) return; + } + target.push( + attributeSeparator, + name, + attributeAssign, + escapeTextForBrowser(value), + attributeEnd + ); + } + } +} +var endOfStartTag = stringToPrecomputedChunk(">"), + endOfStartTagSelfClosing = stringToPrecomputedChunk("/>"); +function pushInnerHTML(target, innerHTML, children) { + if (null != innerHTML) { + if (null != children) + throw Error( + "Can only set one of `children` or `props.dangerouslySetInnerHTML`." + ); + if ("object" !== typeof innerHTML || !("__html" in innerHTML)) + throw Error( + "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information." + ); + innerHTML = innerHTML.__html; + null !== innerHTML && void 0 !== innerHTML && target.push("" + innerHTML); + } +} +function flattenOptionChildren(children) { + var content = ""; + React.Children.forEach(children, function (child) { + null != child && (content += child); + }); + return content; +} +var selectedMarkerAttribute = stringToPrecomputedChunk(' selected=""'), + formReplayingRuntimeScript = stringToPrecomputedChunk( + 'addEventListener("submit",function(a){if(!a.defaultPrevented){var c=a.target,d=a.submitter,e=c.action,b=d;if(d){var f=d.getAttribute("formAction");null!=f&&(e=f,b=null)}"javascript:throw new Error(\'React form unexpectedly submitted.\')"===e&&(a.preventDefault(),b?(a=document.createElement("input"),a.name=b.name,a.value=b.value,b.parentNode.insertBefore(a,b),b=new FormData(c),a.parentNode.removeChild(a)):b=new FormData(c),a=c.ownerDocument||c,(a.$$reactFormReplay=a.$$reactFormReplay||[]).push(c,d,b))}});' + ); +function injectFormReplayingRuntime(resumableState, renderState) { + if (0 === (resumableState.instructions & 16)) { + resumableState.instructions |= 16; + var preamble = renderState.preamble, + bootstrapChunks = renderState.bootstrapChunks; + (preamble.htmlChunks || preamble.headChunks) && 0 === bootstrapChunks.length + ? (bootstrapChunks.push(renderState.startInlineScript), + pushCompletedShellIdAttribute(bootstrapChunks, resumableState), + bootstrapChunks.push( + endOfStartTag, + formReplayingRuntimeScript, + endInlineScript + )) + : bootstrapChunks.unshift( + renderState.startInlineScript, + endOfStartTag, + formReplayingRuntimeScript, + endInlineScript + ); + } +} +var formStateMarkerIsMatching = stringToPrecomputedChunk("\x3c!--F!--\x3e"), + formStateMarkerIsNotMatching = stringToPrecomputedChunk("\x3c!--F--\x3e"); +function pushLinkImpl(target, props) { + target.push(startChunkForTag("link")); + for (var propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + case "dangerouslySetInnerHTML": + throw Error( + "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`." + ); + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(endOfStartTagSelfClosing); + return null; +} +var styleRegex = /(<\/|<)(s)(tyle)/gi; +function styleReplacer(match, prefix, s, suffix) { + return "" + prefix + ("s" === s ? "\\73 " : "\\53 ") + suffix; +} +function pushSelfClosing(target, props, tag) { + target.push(startChunkForTag(tag)); + for (var propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + case "dangerouslySetInnerHTML": + throw Error( + tag + + " is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`." + ); + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(endOfStartTagSelfClosing); + return null; +} +function pushTitleImpl(target, props) { + target.push(startChunkForTag("title")); + var children = null, + innerHTML = null, + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + children = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(endOfStartTag); + props = Array.isArray(children) + ? 2 > children.length + ? children[0] + : null + : children; + "function" !== typeof props && + "symbol" !== typeof props && + null !== props && + void 0 !== props && + target.push(escapeTextForBrowser("" + props)); + pushInnerHTML(target, innerHTML, children); + target.push(endChunkForTag("title")); + return null; +} +var headPreambleContributionChunk = + stringToPrecomputedChunk("\x3c!--head--\x3e"), + bodyPreambleContributionChunk = stringToPrecomputedChunk("\x3c!--body--\x3e"), + htmlPreambleContributionChunk = stringToPrecomputedChunk("\x3c!--html--\x3e"); +function pushScriptImpl(target, props) { + target.push(startChunkForTag("script")); + var children = null, + innerHTML = null, + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + children = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(endOfStartTag); + pushInnerHTML(target, innerHTML, children); + "string" === typeof children && + target.push(("" + children).replace(scriptRegex, scriptReplacer)); + target.push(endChunkForTag("script")); + return null; +} +function pushStartSingletonElement(target, props, tag) { + target.push(startChunkForTag(tag)); + var innerHTML = (tag = null), + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + tag = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(endOfStartTag); + pushInnerHTML(target, innerHTML, tag); + return tag; +} +function pushStartGenericElement(target, props, tag) { + target.push(startChunkForTag(tag)); + var innerHTML = (tag = null), + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + tag = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(endOfStartTag); + pushInnerHTML(target, innerHTML, tag); + return "string" === typeof tag + ? (target.push(escapeTextForBrowser(tag)), null) + : tag; +} +var leadingNewline = stringToPrecomputedChunk("\n"), + VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/, + validatedTagCache = new Map(); +function startChunkForTag(tag) { + var tagStartChunk = validatedTagCache.get(tag); + if (void 0 === tagStartChunk) { + if (!VALID_TAG_REGEX.test(tag)) throw Error("Invalid tag: " + tag); + tagStartChunk = stringToPrecomputedChunk("<" + tag); + validatedTagCache.set(tag, tagStartChunk); + } + return tagStartChunk; +} +var doctypeChunk = stringToPrecomputedChunk("<!DOCTYPE html>"); +function pushStartInstance( + target$jscomp$0, + type, + props, + resumableState, + renderState, + preambleState, + hoistableState, + formatContext, + textEmbedded +) { + switch (type) { + case "div": + case "span": + case "svg": + case "path": + break; + case "a": + target$jscomp$0.push(startChunkForTag("a")); + var children = null, + innerHTML = null, + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + children = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + case "href": + "" === propValue + ? pushStringAttribute(target$jscomp$0, "href", "") + : pushAttribute(target$jscomp$0, propKey, propValue); + break; + default: + pushAttribute(target$jscomp$0, propKey, propValue); + } + } + target$jscomp$0.push(endOfStartTag); + pushInnerHTML(target$jscomp$0, innerHTML, children); + if ("string" === typeof children) { + target$jscomp$0.push(escapeTextForBrowser(children)); + var JSCompiler_inline_result = null; + } else JSCompiler_inline_result = children; + return JSCompiler_inline_result; + case "g": + case "p": + case "li": + break; + case "select": + target$jscomp$0.push(startChunkForTag("select")); + var children$jscomp$0 = null, + innerHTML$jscomp$0 = null, + propKey$jscomp$0; + for (propKey$jscomp$0 in props) + if (hasOwnProperty.call(props, propKey$jscomp$0)) { + var propValue$jscomp$0 = props[propKey$jscomp$0]; + if (null != propValue$jscomp$0) + switch (propKey$jscomp$0) { + case "children": + children$jscomp$0 = propValue$jscomp$0; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$0 = propValue$jscomp$0; + break; + case "defaultValue": + case "value": + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$0, + propValue$jscomp$0 + ); + } + } + target$jscomp$0.push(endOfStartTag); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$0, children$jscomp$0); + return children$jscomp$0; + case "option": + var selectedValue = formatContext.selectedValue; + target$jscomp$0.push(startChunkForTag("option")); + var children$jscomp$1 = null, + value = null, + selected = null, + innerHTML$jscomp$1 = null, + propKey$jscomp$1; + for (propKey$jscomp$1 in props) + if (hasOwnProperty.call(props, propKey$jscomp$1)) { + var propValue$jscomp$1 = props[propKey$jscomp$1]; + if (null != propValue$jscomp$1) + switch (propKey$jscomp$1) { + case "children": + children$jscomp$1 = propValue$jscomp$1; + break; + case "selected": + selected = propValue$jscomp$1; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$1 = propValue$jscomp$1; + break; + case "value": + value = propValue$jscomp$1; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$1, + propValue$jscomp$1 + ); + } + } + if (null != selectedValue) { + var stringValue = + null !== value + ? "" + value + : flattenOptionChildren(children$jscomp$1); + if (isArrayImpl(selectedValue)) + for (var i = 0; i < selectedValue.length; i++) { + if ("" + selectedValue[i] === stringValue) { + target$jscomp$0.push(selectedMarkerAttribute); + break; + } + } + else + "" + selectedValue === stringValue && + target$jscomp$0.push(selectedMarkerAttribute); + } else selected && target$jscomp$0.push(selectedMarkerAttribute); + target$jscomp$0.push(endOfStartTag); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$1, children$jscomp$1); + return children$jscomp$1; + case "textarea": + target$jscomp$0.push(startChunkForTag("textarea")); + var value$jscomp$0 = null, + defaultValue = null, + children$jscomp$2 = null, + propKey$jscomp$2; + for (propKey$jscomp$2 in props) + if (hasOwnProperty.call(props, propKey$jscomp$2)) { + var propValue$jscomp$2 = props[propKey$jscomp$2]; + if (null != propValue$jscomp$2) + switch (propKey$jscomp$2) { + case "children": + children$jscomp$2 = propValue$jscomp$2; + break; + case "value": + value$jscomp$0 = propValue$jscomp$2; + break; + case "defaultValue": + defaultValue = propValue$jscomp$2; + break; + case "dangerouslySetInnerHTML": + throw Error( + "`dangerouslySetInnerHTML` does not make sense on <textarea>." + ); + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$2, + propValue$jscomp$2 + ); + } + } + null === value$jscomp$0 && + null !== defaultValue && + (value$jscomp$0 = defaultValue); + target$jscomp$0.push(endOfStartTag); + if (null != children$jscomp$2) { + if (null != value$jscomp$0) + throw Error( + "If you supply `defaultValue` on a <textarea>, do not pass children." + ); + if (isArrayImpl(children$jscomp$2)) { + if (1 < children$jscomp$2.length) + throw Error("<textarea> can only have at most one child."); + value$jscomp$0 = "" + children$jscomp$2[0]; + } + value$jscomp$0 = "" + children$jscomp$2; + } + "string" === typeof value$jscomp$0 && + "\n" === value$jscomp$0[0] && + target$jscomp$0.push(leadingNewline); + null !== value$jscomp$0 && + target$jscomp$0.push(escapeTextForBrowser("" + value$jscomp$0)); + return null; + case "input": + target$jscomp$0.push(startChunkForTag("input")); + var name = null, + formAction = null, + formEncType = null, + formMethod = null, + formTarget = null, + value$jscomp$1 = null, + defaultValue$jscomp$0 = null, + checked = null, + defaultChecked = null, + propKey$jscomp$3; + for (propKey$jscomp$3 in props) + if (hasOwnProperty.call(props, propKey$jscomp$3)) { + var propValue$jscomp$3 = props[propKey$jscomp$3]; + if (null != propValue$jscomp$3) + switch (propKey$jscomp$3) { + case "children": + case "dangerouslySetInnerHTML": + throw Error( + "input is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`." + ); + case "name": + name = propValue$jscomp$3; + break; + case "formAction": + formAction = propValue$jscomp$3; + break; + case "formEncType": + formEncType = propValue$jscomp$3; + break; + case "formMethod": + formMethod = propValue$jscomp$3; + break; + case "formTarget": + formTarget = propValue$jscomp$3; + break; + case "defaultChecked": + defaultChecked = propValue$jscomp$3; + break; + case "defaultValue": + defaultValue$jscomp$0 = propValue$jscomp$3; + break; + case "checked": + checked = propValue$jscomp$3; + break; + case "value": + value$jscomp$1 = propValue$jscomp$3; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$3, + propValue$jscomp$3 + ); + } + } + var formData = pushFormActionAttribute( + target$jscomp$0, + resumableState, + renderState, + formAction, + formEncType, + formMethod, + formTarget, + name + ); + null !== checked + ? pushBooleanAttribute(target$jscomp$0, "checked", checked) + : null !== defaultChecked && + pushBooleanAttribute(target$jscomp$0, "checked", defaultChecked); + null !== value$jscomp$1 + ? pushAttribute(target$jscomp$0, "value", value$jscomp$1) + : null !== defaultValue$jscomp$0 && + pushAttribute(target$jscomp$0, "value", defaultValue$jscomp$0); + target$jscomp$0.push(endOfStartTagSelfClosing); + null != formData && + formData.forEach(pushAdditionalFormField, target$jscomp$0); + return null; + case "button": + target$jscomp$0.push(startChunkForTag("button")); + var children$jscomp$3 = null, + innerHTML$jscomp$2 = null, + name$jscomp$0 = null, + formAction$jscomp$0 = null, + formEncType$jscomp$0 = null, + formMethod$jscomp$0 = null, + formTarget$jscomp$0 = null, + propKey$jscomp$4; + for (propKey$jscomp$4 in props) + if (hasOwnProperty.call(props, propKey$jscomp$4)) { + var propValue$jscomp$4 = props[propKey$jscomp$4]; + if (null != propValue$jscomp$4) + switch (propKey$jscomp$4) { + case "children": + children$jscomp$3 = propValue$jscomp$4; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$2 = propValue$jscomp$4; + break; + case "name": + name$jscomp$0 = propValue$jscomp$4; + break; + case "formAction": + formAction$jscomp$0 = propValue$jscomp$4; + break; + case "formEncType": + formEncType$jscomp$0 = propValue$jscomp$4; + break; + case "formMethod": + formMethod$jscomp$0 = propValue$jscomp$4; + break; + case "formTarget": + formTarget$jscomp$0 = propValue$jscomp$4; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$4, + propValue$jscomp$4 + ); + } + } + var formData$jscomp$0 = pushFormActionAttribute( + target$jscomp$0, + resumableState, + renderState, + formAction$jscomp$0, + formEncType$jscomp$0, + formMethod$jscomp$0, + formTarget$jscomp$0, + name$jscomp$0 + ); + target$jscomp$0.push(endOfStartTag); + null != formData$jscomp$0 && + formData$jscomp$0.forEach(pushAdditionalFormField, target$jscomp$0); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$2, children$jscomp$3); + if ("string" === typeof children$jscomp$3) { + target$jscomp$0.push(escapeTextForBrowser(children$jscomp$3)); + var JSCompiler_inline_result$jscomp$0 = null; + } else JSCompiler_inline_result$jscomp$0 = children$jscomp$3; + return JSCompiler_inline_result$jscomp$0; + case "form": + target$jscomp$0.push(startChunkForTag("form")); + var children$jscomp$4 = null, + innerHTML$jscomp$3 = null, + formAction$jscomp$1 = null, + formEncType$jscomp$1 = null, + formMethod$jscomp$1 = null, + formTarget$jscomp$1 = null, + propKey$jscomp$5; + for (propKey$jscomp$5 in props) + if (hasOwnProperty.call(props, propKey$jscomp$5)) { + var propValue$jscomp$5 = props[propKey$jscomp$5]; + if (null != propValue$jscomp$5) + switch (propKey$jscomp$5) { + case "children": + children$jscomp$4 = propValue$jscomp$5; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$3 = propValue$jscomp$5; + break; + case "action": + formAction$jscomp$1 = propValue$jscomp$5; + break; + case "encType": + formEncType$jscomp$1 = propValue$jscomp$5; + break; + case "method": + formMethod$jscomp$1 = propValue$jscomp$5; + break; + case "target": + formTarget$jscomp$1 = propValue$jscomp$5; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$5, + propValue$jscomp$5 + ); + } + } + var formData$jscomp$1 = null, + formActionName = null; + if ("function" === typeof formAction$jscomp$1) { + var customFields = getCustomFormFields( + resumableState, + formAction$jscomp$1 + ); + null !== customFields + ? ((formAction$jscomp$1 = customFields.action || ""), + (formEncType$jscomp$1 = customFields.encType), + (formMethod$jscomp$1 = customFields.method), + (formTarget$jscomp$1 = customFields.target), + (formData$jscomp$1 = customFields.data), + (formActionName = customFields.name)) + : (target$jscomp$0.push( + attributeSeparator, + "action", + attributeAssign, + actionJavaScriptURL, + attributeEnd + ), + (formTarget$jscomp$1 = + formMethod$jscomp$1 = + formEncType$jscomp$1 = + formAction$jscomp$1 = + null), + injectFormReplayingRuntime(resumableState, renderState)); + } + null != formAction$jscomp$1 && + pushAttribute(target$jscomp$0, "action", formAction$jscomp$1); + null != formEncType$jscomp$1 && + pushAttribute(target$jscomp$0, "encType", formEncType$jscomp$1); + null != formMethod$jscomp$1 && + pushAttribute(target$jscomp$0, "method", formMethod$jscomp$1); + null != formTarget$jscomp$1 && + pushAttribute(target$jscomp$0, "target", formTarget$jscomp$1); + target$jscomp$0.push(endOfStartTag); + null !== formActionName && + (target$jscomp$0.push(startHiddenInputChunk), + pushStringAttribute(target$jscomp$0, "name", formActionName), + target$jscomp$0.push(endOfStartTagSelfClosing), + null != formData$jscomp$1 && + formData$jscomp$1.forEach(pushAdditionalFormField, target$jscomp$0)); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$3, children$jscomp$4); + if ("string" === typeof children$jscomp$4) { + target$jscomp$0.push(escapeTextForBrowser(children$jscomp$4)); + var JSCompiler_inline_result$jscomp$1 = null; + } else JSCompiler_inline_result$jscomp$1 = children$jscomp$4; + return JSCompiler_inline_result$jscomp$1; + case "menuitem": + target$jscomp$0.push(startChunkForTag("menuitem")); + for (var propKey$jscomp$6 in props) + if (hasOwnProperty.call(props, propKey$jscomp$6)) { + var propValue$jscomp$6 = props[propKey$jscomp$6]; + if (null != propValue$jscomp$6) + switch (propKey$jscomp$6) { + case "children": + case "dangerouslySetInnerHTML": + throw Error( + "menuitems cannot have `children` nor `dangerouslySetInnerHTML`." + ); + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$6, + propValue$jscomp$6 + ); + } + } + target$jscomp$0.push(endOfStartTag); + return null; + case "object": + target$jscomp$0.push(startChunkForTag("object")); + var children$jscomp$5 = null, + innerHTML$jscomp$4 = null, + propKey$jscomp$7; + for (propKey$jscomp$7 in props) + if (hasOwnProperty.call(props, propKey$jscomp$7)) { + var propValue$jscomp$7 = props[propKey$jscomp$7]; + if (null != propValue$jscomp$7) + switch (propKey$jscomp$7) { + case "children": + children$jscomp$5 = propValue$jscomp$7; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$4 = propValue$jscomp$7; + break; + case "data": + var sanitizedValue = sanitizeURL("" + propValue$jscomp$7); + if ("" === sanitizedValue) break; + target$jscomp$0.push( + attributeSeparator, + "data", + attributeAssign, + escapeTextForBrowser(sanitizedValue), + attributeEnd + ); + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$7, + propValue$jscomp$7 + ); + } + } + target$jscomp$0.push(endOfStartTag); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$4, children$jscomp$5); + if ("string" === typeof children$jscomp$5) { + target$jscomp$0.push(escapeTextForBrowser(children$jscomp$5)); + var JSCompiler_inline_result$jscomp$2 = null; + } else JSCompiler_inline_result$jscomp$2 = children$jscomp$5; + return JSCompiler_inline_result$jscomp$2; + case "title": + var noscriptTagInScope = formatContext.tagScope & 1, + isFallback = formatContext.tagScope & 4; + if ( + 4 === formatContext.insertionMode || + noscriptTagInScope || + null != props.itemProp + ) + var JSCompiler_inline_result$jscomp$3 = pushTitleImpl( + target$jscomp$0, + props + ); + else + isFallback + ? (JSCompiler_inline_result$jscomp$3 = null) + : (pushTitleImpl(renderState.hoistableChunks, props), + (JSCompiler_inline_result$jscomp$3 = void 0)); + return JSCompiler_inline_result$jscomp$3; + case "link": + var noscriptTagInScope$jscomp$0 = formatContext.tagScope & 1, + isFallback$jscomp$0 = formatContext.tagScope & 4, + rel = props.rel, + href = props.href, + precedence = props.precedence; + if ( + 4 === formatContext.insertionMode || + noscriptTagInScope$jscomp$0 || + null != props.itemProp || + "string" !== typeof rel || + "string" !== typeof href || + "" === href + ) { + pushLinkImpl(target$jscomp$0, props); + var JSCompiler_inline_result$jscomp$4 = null; + } else if ("stylesheet" === props.rel) + if ( + "string" !== typeof precedence || + null != props.disabled || + props.onLoad || + props.onError + ) + JSCompiler_inline_result$jscomp$4 = pushLinkImpl( + target$jscomp$0, + props + ); + else { + var styleQueue = renderState.styles.get(precedence), + resourceState = resumableState.styleResources.hasOwnProperty(href) + ? resumableState.styleResources[href] + : void 0; + if (null !== resourceState) { + resumableState.styleResources[href] = null; + styleQueue || + ((styleQueue = { + precedence: escapeTextForBrowser(precedence), + rules: [], + hrefs: [], + sheets: new Map() + }), + renderState.styles.set(precedence, styleQueue)); + var resource = { + state: 0, + props: assign({}, props, { + "data-precedence": props.precedence, + precedence: null + }) + }; + if (resourceState) { + 2 === resourceState.length && + adoptPreloadCredentials(resource.props, resourceState); + var preloadResource = renderState.preloads.stylesheets.get(href); + preloadResource && 0 < preloadResource.length + ? (preloadResource.length = 0) + : (resource.state = 1); + } + styleQueue.sheets.set(href, resource); + hoistableState && hoistableState.stylesheets.add(resource); + } else if (styleQueue) { + var resource$9 = styleQueue.sheets.get(href); + resource$9 && + hoistableState && + hoistableState.stylesheets.add(resource$9); + } + textEmbedded && target$jscomp$0.push(textSeparator); + JSCompiler_inline_result$jscomp$4 = null; + } + else + props.onLoad || props.onError + ? (JSCompiler_inline_result$jscomp$4 = pushLinkImpl( + target$jscomp$0, + props + )) + : (textEmbedded && target$jscomp$0.push(textSeparator), + (JSCompiler_inline_result$jscomp$4 = isFallback$jscomp$0 + ? null + : pushLinkImpl(renderState.hoistableChunks, props))); + return JSCompiler_inline_result$jscomp$4; + case "script": + var noscriptTagInScope$jscomp$1 = formatContext.tagScope & 1, + asyncProp = props.async; + if ( + "string" !== typeof props.src || + !props.src || + !asyncProp || + "function" === typeof asyncProp || + "symbol" === typeof asyncProp || + props.onLoad || + props.onError || + 4 === formatContext.insertionMode || + noscriptTagInScope$jscomp$1 || + null != props.itemProp + ) + var JSCompiler_inline_result$jscomp$5 = pushScriptImpl( + target$jscomp$0, + props + ); + else { + var key = props.src; + if ("module" === props.type) { + var resources = resumableState.moduleScriptResources; + var preloads = renderState.preloads.moduleScripts; + } else + (resources = resumableState.scriptResources), + (preloads = renderState.preloads.scripts); + var resourceState$jscomp$0 = resources.hasOwnProperty(key) + ? resources[key] + : void 0; + if (null !== resourceState$jscomp$0) { + resources[key] = null; + var scriptProps = props; + if (resourceState$jscomp$0) { + 2 === resourceState$jscomp$0.length && + ((scriptProps = assign({}, props)), + adoptPreloadCredentials(scriptProps, resourceState$jscomp$0)); + var preloadResource$jscomp$0 = preloads.get(key); + preloadResource$jscomp$0 && (preloadResource$jscomp$0.length = 0); + } + var resource$jscomp$0 = []; + renderState.scripts.add(resource$jscomp$0); + pushScriptImpl(resource$jscomp$0, scriptProps); + } + textEmbedded && target$jscomp$0.push(textSeparator); + JSCompiler_inline_result$jscomp$5 = null; + } + return JSCompiler_inline_result$jscomp$5; + case "style": + var noscriptTagInScope$jscomp$2 = formatContext.tagScope & 1, + precedence$jscomp$0 = props.precedence, + href$jscomp$0 = props.href, + nonce = props.nonce; + if ( + 4 === formatContext.insertionMode || + noscriptTagInScope$jscomp$2 || + null != props.itemProp || + "string" !== typeof precedence$jscomp$0 || + "string" !== typeof href$jscomp$0 || + "" === href$jscomp$0 + ) { + target$jscomp$0.push(startChunkForTag("style")); + var children$jscomp$6 = null, + innerHTML$jscomp$5 = null, + propKey$jscomp$8; + for (propKey$jscomp$8 in props) + if (hasOwnProperty.call(props, propKey$jscomp$8)) { + var propValue$jscomp$8 = props[propKey$jscomp$8]; + if (null != propValue$jscomp$8) + switch (propKey$jscomp$8) { + case "children": + children$jscomp$6 = propValue$jscomp$8; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$5 = propValue$jscomp$8; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$8, + propValue$jscomp$8 + ); + } + } + target$jscomp$0.push(endOfStartTag); + var child = Array.isArray(children$jscomp$6) + ? 2 > children$jscomp$6.length + ? children$jscomp$6[0] + : null + : children$jscomp$6; + "function" !== typeof child && + "symbol" !== typeof child && + null !== child && + void 0 !== child && + target$jscomp$0.push(("" + child).replace(styleRegex, styleReplacer)); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$5, children$jscomp$6); + target$jscomp$0.push(endChunkForTag("style")); + var JSCompiler_inline_result$jscomp$6 = null; + } else { + var styleQueue$jscomp$0 = renderState.styles.get(precedence$jscomp$0); + if ( + null !== + (resumableState.styleResources.hasOwnProperty(href$jscomp$0) + ? resumableState.styleResources[href$jscomp$0] + : void 0) + ) { + resumableState.styleResources[href$jscomp$0] = null; + styleQueue$jscomp$0 || + ((styleQueue$jscomp$0 = { + precedence: escapeTextForBrowser(precedence$jscomp$0), + rules: [], + hrefs: [], + sheets: new Map() + }), + renderState.styles.set(precedence$jscomp$0, styleQueue$jscomp$0)); + var nonceStyle = renderState.nonce.style; + if (!nonceStyle || nonceStyle === nonce) { + styleQueue$jscomp$0.hrefs.push(escapeTextForBrowser(href$jscomp$0)); + var target = styleQueue$jscomp$0.rules, + children$jscomp$7 = null, + innerHTML$jscomp$6 = null, + propKey$jscomp$9; + for (propKey$jscomp$9 in props) + if (hasOwnProperty.call(props, propKey$jscomp$9)) { + var propValue$jscomp$9 = props[propKey$jscomp$9]; + if (null != propValue$jscomp$9) + switch (propKey$jscomp$9) { + case "children": + children$jscomp$7 = propValue$jscomp$9; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$6 = propValue$jscomp$9; + } + } + var child$jscomp$0 = Array.isArray(children$jscomp$7) + ? 2 > children$jscomp$7.length + ? children$jscomp$7[0] + : null + : children$jscomp$7; + "function" !== typeof child$jscomp$0 && + "symbol" !== typeof child$jscomp$0 && + null !== child$jscomp$0 && + void 0 !== child$jscomp$0 && + target.push( + ("" + child$jscomp$0).replace(styleRegex, styleReplacer) + ); + pushInnerHTML(target, innerHTML$jscomp$6, children$jscomp$7); + } + } + styleQueue$jscomp$0 && + hoistableState && + hoistableState.styles.add(styleQueue$jscomp$0); + textEmbedded && target$jscomp$0.push(textSeparator); + JSCompiler_inline_result$jscomp$6 = void 0; + } + return JSCompiler_inline_result$jscomp$6; + case "meta": + var noscriptTagInScope$jscomp$3 = formatContext.tagScope & 1, + isFallback$jscomp$1 = formatContext.tagScope & 4; + if ( + 4 === formatContext.insertionMode || + noscriptTagInScope$jscomp$3 || + null != props.itemProp + ) + var JSCompiler_inline_result$jscomp$7 = pushSelfClosing( + target$jscomp$0, + props, + "meta" + ); + else + textEmbedded && target$jscomp$0.push(textSeparator), + (JSCompiler_inline_result$jscomp$7 = isFallback$jscomp$1 + ? null + : "string" === typeof props.charSet + ? pushSelfClosing(renderState.charsetChunks, props, "meta") + : "viewport" === props.name + ? pushSelfClosing(renderState.viewportChunks, props, "meta") + : pushSelfClosing(renderState.hoistableChunks, props, "meta")); + return JSCompiler_inline_result$jscomp$7; + case "listing": + case "pre": + target$jscomp$0.push(startChunkForTag(type)); + var children$jscomp$8 = null, + innerHTML$jscomp$7 = null, + propKey$jscomp$10; + for (propKey$jscomp$10 in props) + if (hasOwnProperty.call(props, propKey$jscomp$10)) { + var propValue$jscomp$10 = props[propKey$jscomp$10]; + if (null != propValue$jscomp$10) + switch (propKey$jscomp$10) { + case "children": + children$jscomp$8 = propValue$jscomp$10; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$7 = propValue$jscomp$10; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$10, + propValue$jscomp$10 + ); + } + } + target$jscomp$0.push(endOfStartTag); + if (null != innerHTML$jscomp$7) { + if (null != children$jscomp$8) + throw Error( + "Can only set one of `children` or `props.dangerouslySetInnerHTML`." + ); + if ( + "object" !== typeof innerHTML$jscomp$7 || + !("__html" in innerHTML$jscomp$7) + ) + throw Error( + "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information." + ); + var html = innerHTML$jscomp$7.__html; + null !== html && + void 0 !== html && + ("string" === typeof html && 0 < html.length && "\n" === html[0] + ? target$jscomp$0.push(leadingNewline, html) + : target$jscomp$0.push("" + html)); + } + "string" === typeof children$jscomp$8 && + "\n" === children$jscomp$8[0] && + target$jscomp$0.push(leadingNewline); + return children$jscomp$8; + case "img": + var pictureOrNoScriptTagInScope = formatContext.tagScope & 3, + src = props.src, + srcSet = props.srcSet; + if ( + !( + "lazy" === props.loading || + (!src && !srcSet) || + ("string" !== typeof src && null != src) || + ("string" !== typeof srcSet && null != srcSet) || + "low" === props.fetchPriority || + pictureOrNoScriptTagInScope + ) && + ("string" !== typeof src || + ":" !== src[4] || + ("d" !== src[0] && "D" !== src[0]) || + ("a" !== src[1] && "A" !== src[1]) || + ("t" !== src[2] && "T" !== src[2]) || + ("a" !== src[3] && "A" !== src[3])) && + ("string" !== typeof srcSet || + ":" !== srcSet[4] || + ("d" !== srcSet[0] && "D" !== srcSet[0]) || + ("a" !== srcSet[1] && "A" !== srcSet[1]) || + ("t" !== srcSet[2] && "T" !== srcSet[2]) || + ("a" !== srcSet[3] && "A" !== srcSet[3])) + ) { + null !== hoistableState && + formatContext.tagScope & 64 && + (hoistableState.suspenseyImages = !0); + var sizes = "string" === typeof props.sizes ? props.sizes : void 0, + key$jscomp$0 = srcSet ? srcSet + "\n" + (sizes || "") : src, + promotablePreloads = renderState.preloads.images, + resource$jscomp$1 = promotablePreloads.get(key$jscomp$0); + if (resource$jscomp$1) { + if ( + "high" === props.fetchPriority || + 10 > renderState.highImagePreloads.size + ) + promotablePreloads.delete(key$jscomp$0), + renderState.highImagePreloads.add(resource$jscomp$1); + } else if ( + !resumableState.imageResources.hasOwnProperty(key$jscomp$0) + ) { + resumableState.imageResources[key$jscomp$0] = PRELOAD_NO_CREDS; + var input = props.crossOrigin; + var JSCompiler_inline_result$jscomp$8 = + "string" === typeof input + ? "use-credentials" === input + ? input + : "" + : void 0; + var headers = renderState.headers, + header; + headers && + 0 < headers.remainingCapacity && + "string" !== typeof props.srcSet && + ("high" === props.fetchPriority || + 500 > headers.highImagePreloads.length) && + ((header = getPreloadAsHeader(src, "image", { + imageSrcSet: props.srcSet, + imageSizes: props.sizes, + crossOrigin: JSCompiler_inline_result$jscomp$8, + integrity: props.integrity, + nonce: props.nonce, + type: props.type, + fetchPriority: props.fetchPriority, + referrerPolicy: props.refererPolicy + })), + 0 <= (headers.remainingCapacity -= header.length + 2)) + ? ((renderState.resets.image[key$jscomp$0] = PRELOAD_NO_CREDS), + headers.highImagePreloads && (headers.highImagePreloads += ", "), + (headers.highImagePreloads += header)) + : ((resource$jscomp$1 = []), + pushLinkImpl(resource$jscomp$1, { + rel: "preload", + as: "image", + href: srcSet ? void 0 : src, + imageSrcSet: srcSet, + imageSizes: sizes, + crossOrigin: JSCompiler_inline_result$jscomp$8, + integrity: props.integrity, + type: props.type, + fetchPriority: props.fetchPriority, + referrerPolicy: props.referrerPolicy + }), + "high" === props.fetchPriority || + 10 > renderState.highImagePreloads.size + ? renderState.highImagePreloads.add(resource$jscomp$1) + : (renderState.bulkPreloads.add(resource$jscomp$1), + promotablePreloads.set(key$jscomp$0, resource$jscomp$1))); + } + } + return pushSelfClosing(target$jscomp$0, props, "img"); + case "base": + case "area": + case "br": + case "col": + case "embed": + case "hr": + case "keygen": + case "param": + case "source": + case "track": + case "wbr": + return pushSelfClosing(target$jscomp$0, props, type); + case "annotation-xml": + case "color-profile": + case "font-face": + case "font-face-src": + case "font-face-uri": + case "font-face-format": + case "font-face-name": + case "missing-glyph": + break; + case "head": + if (2 > formatContext.insertionMode) { + var preamble = preambleState || renderState.preamble; + if (preamble.headChunks) + throw Error("The `<head>` tag may only be rendered once."); + null !== preambleState && + target$jscomp$0.push(headPreambleContributionChunk); + preamble.headChunks = []; + var JSCompiler_inline_result$jscomp$9 = pushStartSingletonElement( + preamble.headChunks, + props, + "head" + ); + } else + JSCompiler_inline_result$jscomp$9 = pushStartGenericElement( + target$jscomp$0, + props, + "head" + ); + return JSCompiler_inline_result$jscomp$9; + case "body": + if (2 > formatContext.insertionMode) { + var preamble$jscomp$0 = preambleState || renderState.preamble; + if (preamble$jscomp$0.bodyChunks) + throw Error("The `<body>` tag may only be rendered once."); + null !== preambleState && + target$jscomp$0.push(bodyPreambleContributionChunk); + preamble$jscomp$0.bodyChunks = []; + var JSCompiler_inline_result$jscomp$10 = pushStartSingletonElement( + preamble$jscomp$0.bodyChunks, + props, + "body" + ); + } else + JSCompiler_inline_result$jscomp$10 = pushStartGenericElement( + target$jscomp$0, + props, + "body" + ); + return JSCompiler_inline_result$jscomp$10; + case "html": + if (0 === formatContext.insertionMode) { + var preamble$jscomp$1 = preambleState || renderState.preamble; + if (preamble$jscomp$1.htmlChunks) + throw Error("The `<html>` tag may only be rendered once."); + null !== preambleState && + target$jscomp$0.push(htmlPreambleContributionChunk); + preamble$jscomp$1.htmlChunks = [doctypeChunk]; + var JSCompiler_inline_result$jscomp$11 = pushStartSingletonElement( + preamble$jscomp$1.htmlChunks, + props, + "html" + ); + } else + JSCompiler_inline_result$jscomp$11 = pushStartGenericElement( + target$jscomp$0, + props, + "html" + ); + return JSCompiler_inline_result$jscomp$11; + default: + if (-1 !== type.indexOf("-")) { + target$jscomp$0.push(startChunkForTag(type)); + var children$jscomp$9 = null, + innerHTML$jscomp$8 = null, + propKey$jscomp$11; + for (propKey$jscomp$11 in props) + if (hasOwnProperty.call(props, propKey$jscomp$11)) { + var propValue$jscomp$11 = props[propKey$jscomp$11]; + if (null != propValue$jscomp$11) { + var attributeName = propKey$jscomp$11; + switch (propKey$jscomp$11) { + case "children": + children$jscomp$9 = propValue$jscomp$11; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$8 = propValue$jscomp$11; + break; + case "style": + pushStyleAttribute(target$jscomp$0, propValue$jscomp$11); + break; + case "suppressContentEditableWarning": + case "suppressHydrationWarning": + case "ref": + break; + case "className": + attributeName = "class"; + default: + if ( + isAttributeNameSafe(propKey$jscomp$11) && + "function" !== typeof propValue$jscomp$11 && + "symbol" !== typeof propValue$jscomp$11 && + !1 !== propValue$jscomp$11 + ) { + if (!0 === propValue$jscomp$11) propValue$jscomp$11 = ""; + else if ("object" === typeof propValue$jscomp$11) continue; + target$jscomp$0.push( + attributeSeparator, + attributeName, + attributeAssign, + escapeTextForBrowser(propValue$jscomp$11), + attributeEnd + ); + } + } + } + } + target$jscomp$0.push(endOfStartTag); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$8, children$jscomp$9); + return children$jscomp$9; + } + } + return pushStartGenericElement(target$jscomp$0, props, type); +} +var endTagCache = new Map(); +function endChunkForTag(tag) { + var chunk = endTagCache.get(tag); + void 0 === chunk && + ((chunk = stringToPrecomputedChunk("</" + tag + ">")), + endTagCache.set(tag, chunk)); + return chunk; +} +function hoistPreambleState(renderState, preambleState) { + renderState = renderState.preamble; + null === renderState.htmlChunks && + preambleState.htmlChunks && + (renderState.htmlChunks = preambleState.htmlChunks); + null === renderState.headChunks && + preambleState.headChunks && + (renderState.headChunks = preambleState.headChunks); + null === renderState.bodyChunks && + preambleState.bodyChunks && + (renderState.bodyChunks = preambleState.bodyChunks); +} +function writeBootstrap(destination, renderState) { + renderState = renderState.bootstrapChunks; + for (var i = 0; i < renderState.length - 1; i++) + writeChunk(destination, renderState[i]); + return i < renderState.length + ? ((i = renderState[i]), + (renderState.length = 0), + writeChunkAndReturn(destination, i)) + : !0; +} +var shellTimeRuntimeScript = stringToPrecomputedChunk( + "requestAnimationFrame(function(){$RT=performance.now()});" + ), + placeholder1 = stringToPrecomputedChunk('<template id="'), + placeholder2 = stringToPrecomputedChunk('"></template>'), + startActivityBoundary = stringToPrecomputedChunk("\x3c!--&--\x3e"), + endActivityBoundary = stringToPrecomputedChunk("\x3c!--/&--\x3e"), + startCompletedSuspenseBoundary = stringToPrecomputedChunk("\x3c!--$--\x3e"), + startPendingSuspenseBoundary1 = stringToPrecomputedChunk( + '\x3c!--$?--\x3e<template id="' + ), + startPendingSuspenseBoundary2 = stringToPrecomputedChunk('"></template>'), + startClientRenderedSuspenseBoundary = + stringToPrecomputedChunk("\x3c!--$!--\x3e"), + endSuspenseBoundary = stringToPrecomputedChunk("\x3c!--/$--\x3e"), + clientRenderedSuspenseBoundaryError1 = stringToPrecomputedChunk("<template"), + clientRenderedSuspenseBoundaryErrorAttrInterstitial = + stringToPrecomputedChunk('"'), + clientRenderedSuspenseBoundaryError1A = + stringToPrecomputedChunk(' data-dgst="'); +stringToPrecomputedChunk(' data-msg="'); +stringToPrecomputedChunk(' data-stck="'); +stringToPrecomputedChunk(' data-cstck="'); +var clientRenderedSuspenseBoundaryError2 = + stringToPrecomputedChunk("></template>"); +function writeStartPendingSuspenseBoundary(destination, renderState, id) { + writeChunk(destination, startPendingSuspenseBoundary1); + if (null === id) + throw Error( + "An ID must have been assigned before we can complete the boundary." + ); + writeChunk(destination, renderState.boundaryPrefix); + writeChunk(destination, id.toString(16)); + return writeChunkAndReturn(destination, startPendingSuspenseBoundary2); +} +var startSegmentHTML = stringToPrecomputedChunk('<div hidden id="'), + startSegmentHTML2 = stringToPrecomputedChunk('">'), + endSegmentHTML = stringToPrecomputedChunk("</div>"), + startSegmentSVG = stringToPrecomputedChunk( + '<svg aria-hidden="true" style="display:none" id="' + ), + startSegmentSVG2 = stringToPrecomputedChunk('">'), + endSegmentSVG = stringToPrecomputedChunk("</svg>"), + startSegmentMathML = stringToPrecomputedChunk( + '<math aria-hidden="true" style="display:none" id="' + ), + startSegmentMathML2 = stringToPrecomputedChunk('">'), + endSegmentMathML = stringToPrecomputedChunk("</math>"), + startSegmentTable = stringToPrecomputedChunk('<table hidden id="'), + startSegmentTable2 = stringToPrecomputedChunk('">'), + endSegmentTable = stringToPrecomputedChunk("</table>"), + startSegmentTableBody = stringToPrecomputedChunk('<table hidden><tbody id="'), + startSegmentTableBody2 = stringToPrecomputedChunk('">'), + endSegmentTableBody = stringToPrecomputedChunk("</tbody></table>"), + startSegmentTableRow = stringToPrecomputedChunk('<table hidden><tr id="'), + startSegmentTableRow2 = stringToPrecomputedChunk('">'), + endSegmentTableRow = stringToPrecomputedChunk("</tr></table>"), + startSegmentColGroup = stringToPrecomputedChunk( + '<table hidden><colgroup id="' + ), + startSegmentColGroup2 = stringToPrecomputedChunk('">'), + endSegmentColGroup = stringToPrecomputedChunk("</colgroup></table>"); +function writeStartSegment(destination, renderState, formatContext, id) { + switch (formatContext.insertionMode) { + case 0: + case 1: + case 3: + case 2: + return ( + writeChunk(destination, startSegmentHTML), + writeChunk(destination, renderState.segmentPrefix), + writeChunk(destination, id.toString(16)), + writeChunkAndReturn(destination, startSegmentHTML2) + ); + case 4: + return ( + writeChunk(destination, startSegmentSVG), + writeChunk(destination, renderState.segmentPrefix), + writeChunk(destination, id.toString(16)), + writeChunkAndReturn(destination, startSegmentSVG2) + ); + case 5: + return ( + writeChunk(destination, startSegmentMathML), + writeChunk(destination, renderState.segmentPrefix), + writeChunk(destination, id.toString(16)), + writeChunkAndReturn(destination, startSegmentMathML2) + ); + case 6: + return ( + writeChunk(destination, startSegmentTable), + writeChunk(destination, renderState.segmentPrefix), + writeChunk(destination, id.toString(16)), + writeChunkAndReturn(destination, startSegmentTable2) + ); + case 7: + return ( + writeChunk(destination, startSegmentTableBody), + writeChunk(destination, renderState.segmentPrefix), + writeChunk(destination, id.toString(16)), + writeChunkAndReturn(destination, startSegmentTableBody2) + ); + case 8: + return ( + writeChunk(destination, startSegmentTableRow), + writeChunk(destination, renderState.segmentPrefix), + writeChunk(destination, id.toString(16)), + writeChunkAndReturn(destination, startSegmentTableRow2) + ); + case 9: + return ( + writeChunk(destination, startSegmentColGroup), + writeChunk(destination, renderState.segmentPrefix), + writeChunk(destination, id.toString(16)), + writeChunkAndReturn(destination, startSegmentColGroup2) + ); + default: + throw Error("Unknown insertion mode. This is a bug in React."); + } +} +function writeEndSegment(destination, formatContext) { + switch (formatContext.insertionMode) { + case 0: + case 1: + case 3: + case 2: + return writeChunkAndReturn(destination, endSegmentHTML); + case 4: + return writeChunkAndReturn(destination, endSegmentSVG); + case 5: + return writeChunkAndReturn(destination, endSegmentMathML); + case 6: + return writeChunkAndReturn(destination, endSegmentTable); + case 7: + return writeChunkAndReturn(destination, endSegmentTableBody); + case 8: + return writeChunkAndReturn(destination, endSegmentTableRow); + case 9: + return writeChunkAndReturn(destination, endSegmentColGroup); + default: + throw Error("Unknown insertion mode. This is a bug in React."); + } +} +var completeSegmentScript1Full = stringToPrecomputedChunk( + '$RS=function(a,b){a=document.getElementById(a);b=document.getElementById(b);for(a.parentNode.removeChild(a);a.firstChild;)b.parentNode.insertBefore(a.firstChild,b);b.parentNode.removeChild(b)};$RS("' + ), + completeSegmentScript1Partial = stringToPrecomputedChunk('$RS("'), + completeSegmentScript2 = stringToPrecomputedChunk('","'), + completeSegmentScriptEnd = stringToPrecomputedChunk('")\x3c/script>'); +stringToPrecomputedChunk('<template data-rsi="" data-sid="'); +stringToPrecomputedChunk('" data-pid="'); +var completeBoundaryScriptFunctionOnly = stringToPrecomputedChunk( + '$RB=[];$RV=function(a){$RT=performance.now();for(var b=0;b<a.length;b+=2){var c=a[b],e=a[b+1];null!==e.parentNode&&e.parentNode.removeChild(e);var f=c.parentNode;if(f){var g=c.previousSibling,h=0;do{if(c&&8===c.nodeType){var d=c.data;if("/$"===d||"/&"===d)if(0===h)break;else h--;else"$"!==d&&"$?"!==d&&"$~"!==d&&"$!"!==d&&"&"!==d||h++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;e.firstChild;)f.insertBefore(e.firstChild,c);g.data="$";g._reactRetry&&requestAnimationFrame(g._reactRetry)}}a.length=0};\n$RC=function(a,b){if(b=document.getElementById(b))(a=document.getElementById(a))?(a.previousSibling.data="$~",$RB.push(a,b),2===$RB.length&&("number"!==typeof $RT?requestAnimationFrame($RV.bind(null,$RB)):(a=performance.now(),setTimeout($RV.bind(null,$RB),2300>a&&2E3<a?2300-a:$RT+300-a)))):b.parentNode.removeChild(b)};' + ), + completeBoundaryScript1Partial = stringToPrecomputedChunk('$RC("'), + completeBoundaryWithStylesScript1FullPartial = stringToPrecomputedChunk( + '$RM=new Map;$RR=function(n,w,p){function u(q){this._p=null;q()}for(var r=new Map,t=document,h,b,e=t.querySelectorAll("link[data-precedence],style[data-precedence]"),v=[],k=0;b=e[k++];)"not all"===b.getAttribute("media")?v.push(b):("LINK"===b.tagName&&$RM.set(b.getAttribute("href"),b),r.set(b.dataset.precedence,h=b));e=0;b=[];var l,a;for(k=!0;;){if(k){var f=p[e++];if(!f){k=!1;e=0;continue}var c=!1,m=0;var d=f[m++];if(a=$RM.get(d)){var g=a._p;c=!0}else{a=t.createElement("link");a.href=d;a.rel=\n"stylesheet";for(a.dataset.precedence=l=f[m++];g=f[m++];)a.setAttribute(g,f[m++]);g=a._p=new Promise(function(q,x){a.onload=u.bind(a,q);a.onerror=u.bind(a,x)});$RM.set(d,a)}d=a.getAttribute("media");!g||d&&!matchMedia(d).matches||b.push(g);if(c)continue}else{a=v[e++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=r.get(l)||h;c===h&&(h=a);r.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=t.head,c.insertBefore(a,c.firstChild))}if(p=document.getElementById(n))p.previousSibling.data=\n"$~";Promise.all(b).then($RC.bind(null,n,w),$RX.bind(null,n,"CSS failed to load"))};$RR("' + ), + completeBoundaryWithStylesScript1Partial = stringToPrecomputedChunk('$RR("'), + completeBoundaryScript2 = stringToPrecomputedChunk('","'), + completeBoundaryScript3a = stringToPrecomputedChunk('",'), + completeBoundaryScript3b = stringToPrecomputedChunk('"'), + completeBoundaryScriptEnd = stringToPrecomputedChunk(")\x3c/script>"); +stringToPrecomputedChunk('<template data-rci="" data-bid="'); +stringToPrecomputedChunk('<template data-rri="" data-bid="'); +stringToPrecomputedChunk('" data-sid="'); +stringToPrecomputedChunk('" data-sty="'); +var clientRenderScriptFunctionOnly = stringToPrecomputedChunk( + '$RX=function(b,c,d,e,f){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data="$!",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),f&&(a.cstck=f),b._reactRetry&&b._reactRetry())};' + ), + clientRenderScript1Full = stringToPrecomputedChunk( + '$RX=function(b,c,d,e,f){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data="$!",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),f&&(a.cstck=f),b._reactRetry&&b._reactRetry())};;$RX("' + ), + clientRenderScript1Partial = stringToPrecomputedChunk('$RX("'), + clientRenderScript1A = stringToPrecomputedChunk('"'), + clientRenderErrorScriptArgInterstitial = stringToPrecomputedChunk(","), + clientRenderScriptEnd = stringToPrecomputedChunk(")\x3c/script>"); +stringToPrecomputedChunk('<template data-rxi="" data-bid="'); +stringToPrecomputedChunk('" data-dgst="'); +stringToPrecomputedChunk('" data-msg="'); +stringToPrecomputedChunk('" data-stck="'); +stringToPrecomputedChunk('" data-cstck="'); +var regexForJSStringsInInstructionScripts = /[<\u2028\u2029]/g; +function escapeJSStringsForInstructionScripts(input) { + return JSON.stringify(input).replace( + regexForJSStringsInInstructionScripts, + function (match) { + switch (match) { + case "<": + return "\\u003c"; + case "\u2028": + return "\\u2028"; + case "\u2029": + return "\\u2029"; + default: + throw Error( + "escapeJSStringsForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React" + ); + } + } + ); +} +var regexForJSStringsInScripts = /[&><\u2028\u2029]/g; +function escapeJSObjectForInstructionScripts(input) { + return JSON.stringify(input).replace( + regexForJSStringsInScripts, + function (match) { + switch (match) { + case "&": + return "\\u0026"; + case ">": + return "\\u003e"; + case "<": + return "\\u003c"; + case "\u2028": + return "\\u2028"; + case "\u2029": + return "\\u2029"; + default: + throw Error( + "escapeJSObjectForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React" + ); + } + } + ); +} +var lateStyleTagResourceOpen1 = stringToPrecomputedChunk( + ' media="not all" data-precedence="' + ), + lateStyleTagResourceOpen2 = stringToPrecomputedChunk('" data-href="'), + lateStyleTagResourceOpen3 = stringToPrecomputedChunk('">'), + lateStyleTagTemplateClose = stringToPrecomputedChunk("</style>"), + currentlyRenderingBoundaryHasStylesToHoist = !1, + destinationHasCapacity = !0; +function flushStyleTagsLateForBoundary(styleQueue) { + var rules = styleQueue.rules, + hrefs = styleQueue.hrefs, + i = 0; + if (hrefs.length) { + writeChunk(this, currentlyFlushingRenderState.startInlineStyle); + writeChunk(this, lateStyleTagResourceOpen1); + writeChunk(this, styleQueue.precedence); + for (writeChunk(this, lateStyleTagResourceOpen2); i < hrefs.length - 1; i++) + writeChunk(this, hrefs[i]), writeChunk(this, spaceSeparator); + writeChunk(this, hrefs[i]); + writeChunk(this, lateStyleTagResourceOpen3); + for (i = 0; i < rules.length; i++) writeChunk(this, rules[i]); + destinationHasCapacity = writeChunkAndReturn( + this, + lateStyleTagTemplateClose + ); + currentlyRenderingBoundaryHasStylesToHoist = !0; + rules.length = 0; + hrefs.length = 0; + } +} +function hasStylesToHoist(stylesheet) { + return 2 !== stylesheet.state + ? (currentlyRenderingBoundaryHasStylesToHoist = !0) + : !1; +} +function writeHoistablesForBoundary(destination, hoistableState, renderState) { + currentlyRenderingBoundaryHasStylesToHoist = !1; + destinationHasCapacity = !0; + currentlyFlushingRenderState = renderState; + hoistableState.styles.forEach(flushStyleTagsLateForBoundary, destination); + currentlyFlushingRenderState = null; + hoistableState.stylesheets.forEach(hasStylesToHoist); + currentlyRenderingBoundaryHasStylesToHoist && + (renderState.stylesToHoist = !0); + return destinationHasCapacity; +} +function flushResource(resource) { + for (var i = 0; i < resource.length; i++) writeChunk(this, resource[i]); + resource.length = 0; +} +var stylesheetFlushingQueue = []; +function flushStyleInPreamble(stylesheet) { + pushLinkImpl(stylesheetFlushingQueue, stylesheet.props); + for (var i = 0; i < stylesheetFlushingQueue.length; i++) + writeChunk(this, stylesheetFlushingQueue[i]); + stylesheetFlushingQueue.length = 0; + stylesheet.state = 2; +} +var styleTagResourceOpen1 = stringToPrecomputedChunk(' data-precedence="'), + styleTagResourceOpen2 = stringToPrecomputedChunk('" data-href="'), + spaceSeparator = stringToPrecomputedChunk(" "), + styleTagResourceOpen3 = stringToPrecomputedChunk('">'), + styleTagResourceClose = stringToPrecomputedChunk("</style>"); +function flushStylesInPreamble(styleQueue) { + var hasStylesheets = 0 < styleQueue.sheets.size; + styleQueue.sheets.forEach(flushStyleInPreamble, this); + styleQueue.sheets.clear(); + var rules = styleQueue.rules, + hrefs = styleQueue.hrefs; + if (!hasStylesheets || hrefs.length) { + writeChunk(this, currentlyFlushingRenderState.startInlineStyle); + writeChunk(this, styleTagResourceOpen1); + writeChunk(this, styleQueue.precedence); + styleQueue = 0; + if (hrefs.length) { + for ( + writeChunk(this, styleTagResourceOpen2); + styleQueue < hrefs.length - 1; + styleQueue++ + ) + writeChunk(this, hrefs[styleQueue]), writeChunk(this, spaceSeparator); + writeChunk(this, hrefs[styleQueue]); + } + writeChunk(this, styleTagResourceOpen3); + for (styleQueue = 0; styleQueue < rules.length; styleQueue++) + writeChunk(this, rules[styleQueue]); + writeChunk(this, styleTagResourceClose); + rules.length = 0; + hrefs.length = 0; + } +} +function preloadLateStyle(stylesheet) { + if (0 === stylesheet.state) { + stylesheet.state = 1; + var props = stylesheet.props; + pushLinkImpl(stylesheetFlushingQueue, { + rel: "preload", + as: "style", + href: stylesheet.props.href, + crossOrigin: props.crossOrigin, + fetchPriority: props.fetchPriority, + integrity: props.integrity, + media: props.media, + hrefLang: props.hrefLang, + referrerPolicy: props.referrerPolicy + }); + for ( + stylesheet = 0; + stylesheet < stylesheetFlushingQueue.length; + stylesheet++ + ) + writeChunk(this, stylesheetFlushingQueue[stylesheet]); + stylesheetFlushingQueue.length = 0; + } +} +function preloadLateStyles(styleQueue) { + styleQueue.sheets.forEach(preloadLateStyle, this); + styleQueue.sheets.clear(); +} +stringToPrecomputedChunk('<link rel="expect" href="#'); +stringToPrecomputedChunk('" blocking="render"/>'); +var completedShellIdAttributeStart = stringToPrecomputedChunk(' id="'); +function pushCompletedShellIdAttribute(target, resumableState) { + 0 === (resumableState.instructions & 32) && + ((resumableState.instructions |= 32), + target.push( + completedShellIdAttributeStart, + escapeTextForBrowser("_" + resumableState.idPrefix + "R_"), + attributeEnd + )); +} +var arrayFirstOpenBracket = stringToPrecomputedChunk("["), + arraySubsequentOpenBracket = stringToPrecomputedChunk(",["), + arrayInterstitial = stringToPrecomputedChunk(","), + arrayCloseBracket = stringToPrecomputedChunk("]"); +function writeStyleResourceDependenciesInJS(destination, hoistableState) { + writeChunk(destination, arrayFirstOpenBracket); + var nextArrayOpenBrackChunk = arrayFirstOpenBracket; + hoistableState.stylesheets.forEach(function (resource) { + if (2 !== resource.state) + if (3 === resource.state) + writeChunk(destination, nextArrayOpenBrackChunk), + writeChunk( + destination, + escapeJSObjectForInstructionScripts("" + resource.props.href) + ), + writeChunk(destination, arrayCloseBracket), + (nextArrayOpenBrackChunk = arraySubsequentOpenBracket); + else { + writeChunk(destination, nextArrayOpenBrackChunk); + var precedence = resource.props["data-precedence"], + props = resource.props, + coercedHref = sanitizeURL("" + resource.props.href); + writeChunk( + destination, + escapeJSObjectForInstructionScripts(coercedHref) + ); + precedence = "" + precedence; + writeChunk(destination, arrayInterstitial); + writeChunk( + destination, + escapeJSObjectForInstructionScripts(precedence) + ); + for (var propKey in props) + if ( + hasOwnProperty.call(props, propKey) && + ((precedence = props[propKey]), null != precedence) + ) + switch (propKey) { + case "href": + case "rel": + case "precedence": + case "data-precedence": + break; + case "children": + case "dangerouslySetInnerHTML": + throw Error( + "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`." + ); + default: + writeStyleResourceAttributeInJS( + destination, + propKey, + precedence + ); + } + writeChunk(destination, arrayCloseBracket); + nextArrayOpenBrackChunk = arraySubsequentOpenBracket; + resource.state = 3; + } + }); + writeChunk(destination, arrayCloseBracket); +} +function writeStyleResourceAttributeInJS(destination, name, value) { + var attributeName = name.toLowerCase(); + switch (typeof value) { + case "function": + case "symbol": + return; + } + switch (name) { + case "innerHTML": + case "dangerouslySetInnerHTML": + case "suppressContentEditableWarning": + case "suppressHydrationWarning": + case "style": + case "ref": + return; + case "className": + attributeName = "class"; + name = "" + value; + break; + case "hidden": + if (!1 === value) return; + name = ""; + break; + case "src": + case "href": + value = sanitizeURL(value); + name = "" + value; + break; + default: + if ( + (2 < name.length && + ("o" === name[0] || "O" === name[0]) && + ("n" === name[1] || "N" === name[1])) || + !isAttributeNameSafe(name) + ) + return; + name = "" + value; + } + writeChunk(destination, arrayInterstitial); + writeChunk(destination, escapeJSObjectForInstructionScripts(attributeName)); + writeChunk(destination, arrayInterstitial); + writeChunk(destination, escapeJSObjectForInstructionScripts(name)); +} +function createHoistableState() { + return { styles: new Set(), stylesheets: new Set(), suspenseyImages: !1 }; +} +function prefetchDNS(href) { + var request = resolveRequest(); + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if ("string" === typeof href && href) { + if (!resumableState.dnsResources.hasOwnProperty(href)) { + resumableState.dnsResources[href] = null; + resumableState = renderState.headers; + var header, JSCompiler_temp; + if ( + (JSCompiler_temp = + resumableState && 0 < resumableState.remainingCapacity) + ) + JSCompiler_temp = + ((header = + "<" + + ("" + href).replace( + regexForHrefInLinkHeaderURLContext, + escapeHrefForLinkHeaderURLContextReplacer + ) + + ">; rel=dns-prefetch"), + 0 <= (resumableState.remainingCapacity -= header.length + 2)); + JSCompiler_temp + ? ((renderState.resets.dns[href] = null), + resumableState.preconnects && (resumableState.preconnects += ", "), + (resumableState.preconnects += header)) + : ((header = []), + pushLinkImpl(header, { href: href, rel: "dns-prefetch" }), + renderState.preconnects.add(header)); + } + enqueueFlush(request); + } + } else previousDispatcher.D(href); +} +function preconnect(href, crossOrigin) { + var request = resolveRequest(); + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if ("string" === typeof href && href) { + var bucket = + "use-credentials" === crossOrigin + ? "credentials" + : "string" === typeof crossOrigin + ? "anonymous" + : "default"; + if (!resumableState.connectResources[bucket].hasOwnProperty(href)) { + resumableState.connectResources[bucket][href] = null; + resumableState = renderState.headers; + var header, JSCompiler_temp; + if ( + (JSCompiler_temp = + resumableState && 0 < resumableState.remainingCapacity) + ) { + JSCompiler_temp = + "<" + + ("" + href).replace( + regexForHrefInLinkHeaderURLContext, + escapeHrefForLinkHeaderURLContextReplacer + ) + + ">; rel=preconnect"; + if ("string" === typeof crossOrigin) { + var escapedCrossOrigin = ("" + crossOrigin).replace( + regexForLinkHeaderQuotedParamValueContext, + escapeStringForLinkHeaderQuotedParamValueContextReplacer + ); + JSCompiler_temp += '; crossorigin="' + escapedCrossOrigin + '"'; + } + JSCompiler_temp = + ((header = JSCompiler_temp), + 0 <= (resumableState.remainingCapacity -= header.length + 2)); + } + JSCompiler_temp + ? ((renderState.resets.connect[bucket][href] = null), + resumableState.preconnects && (resumableState.preconnects += ", "), + (resumableState.preconnects += header)) + : ((bucket = []), + pushLinkImpl(bucket, { + rel: "preconnect", + href: href, + crossOrigin: crossOrigin + }), + renderState.preconnects.add(bucket)); + } + enqueueFlush(request); + } + } else previousDispatcher.C(href, crossOrigin); +} +function preload(href, as, options) { + var request = resolveRequest(); + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if (as && href) { + switch (as) { + case "image": + if (options) { + var imageSrcSet = options.imageSrcSet; + var imageSizes = options.imageSizes; + var fetchPriority = options.fetchPriority; + } + var key = imageSrcSet + ? imageSrcSet + "\n" + (imageSizes || "") + : href; + if (resumableState.imageResources.hasOwnProperty(key)) return; + resumableState.imageResources[key] = PRELOAD_NO_CREDS; + resumableState = renderState.headers; + var header; + resumableState && + 0 < resumableState.remainingCapacity && + "string" !== typeof imageSrcSet && + "high" === fetchPriority && + ((header = getPreloadAsHeader(href, as, options)), + 0 <= (resumableState.remainingCapacity -= header.length + 2)) + ? ((renderState.resets.image[key] = PRELOAD_NO_CREDS), + resumableState.highImagePreloads && + (resumableState.highImagePreloads += ", "), + (resumableState.highImagePreloads += header)) + : ((resumableState = []), + pushLinkImpl( + resumableState, + assign( + { rel: "preload", href: imageSrcSet ? void 0 : href, as: as }, + options + ) + ), + "high" === fetchPriority + ? renderState.highImagePreloads.add(resumableState) + : (renderState.bulkPreloads.add(resumableState), + renderState.preloads.images.set(key, resumableState))); + break; + case "style": + if (resumableState.styleResources.hasOwnProperty(href)) return; + imageSrcSet = []; + pushLinkImpl( + imageSrcSet, + assign({ rel: "preload", href: href, as: as }, options) + ); + resumableState.styleResources[href] = + !options || + ("string" !== typeof options.crossOrigin && + "string" !== typeof options.integrity) + ? PRELOAD_NO_CREDS + : [options.crossOrigin, options.integrity]; + renderState.preloads.stylesheets.set(href, imageSrcSet); + renderState.bulkPreloads.add(imageSrcSet); + break; + case "script": + if (resumableState.scriptResources.hasOwnProperty(href)) return; + imageSrcSet = []; + renderState.preloads.scripts.set(href, imageSrcSet); + renderState.bulkPreloads.add(imageSrcSet); + pushLinkImpl( + imageSrcSet, + assign({ rel: "preload", href: href, as: as }, options) + ); + resumableState.scriptResources[href] = + !options || + ("string" !== typeof options.crossOrigin && + "string" !== typeof options.integrity) + ? PRELOAD_NO_CREDS + : [options.crossOrigin, options.integrity]; + break; + default: + if (resumableState.unknownResources.hasOwnProperty(as)) { + if ( + ((imageSrcSet = resumableState.unknownResources[as]), + imageSrcSet.hasOwnProperty(href)) + ) + return; + } else + (imageSrcSet = {}), + (resumableState.unknownResources[as] = imageSrcSet); + imageSrcSet[href] = PRELOAD_NO_CREDS; + if ( + (resumableState = renderState.headers) && + 0 < resumableState.remainingCapacity && + "font" === as && + ((key = getPreloadAsHeader(href, as, options)), + 0 <= (resumableState.remainingCapacity -= key.length + 2)) + ) + (renderState.resets.font[href] = PRELOAD_NO_CREDS), + resumableState.fontPreloads && + (resumableState.fontPreloads += ", "), + (resumableState.fontPreloads += key); + else + switch ( + ((resumableState = []), + (href = assign({ rel: "preload", href: href, as: as }, options)), + pushLinkImpl(resumableState, href), + as) + ) { + case "font": + renderState.fontPreloads.add(resumableState); + break; + default: + renderState.bulkPreloads.add(resumableState); + } + } + enqueueFlush(request); + } + } else previousDispatcher.L(href, as, options); +} +function preloadModule(href, options) { + var request = resolveRequest(); + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if (href) { + var as = + options && "string" === typeof options.as ? options.as : "script"; + switch (as) { + case "script": + if (resumableState.moduleScriptResources.hasOwnProperty(href)) return; + as = []; + resumableState.moduleScriptResources[href] = + !options || + ("string" !== typeof options.crossOrigin && + "string" !== typeof options.integrity) + ? PRELOAD_NO_CREDS + : [options.crossOrigin, options.integrity]; + renderState.preloads.moduleScripts.set(href, as); + break; + default: + if (resumableState.moduleUnknownResources.hasOwnProperty(as)) { + var resources = resumableState.unknownResources[as]; + if (resources.hasOwnProperty(href)) return; + } else + (resources = {}), + (resumableState.moduleUnknownResources[as] = resources); + as = []; + resources[href] = PRELOAD_NO_CREDS; + } + pushLinkImpl(as, assign({ rel: "modulepreload", href: href }, options)); + renderState.bulkPreloads.add(as); + enqueueFlush(request); + } + } else previousDispatcher.m(href, options); +} +function preinitStyle(href, precedence, options) { + var request = resolveRequest(); + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if (href) { + precedence = precedence || "default"; + var styleQueue = renderState.styles.get(precedence), + resourceState = resumableState.styleResources.hasOwnProperty(href) + ? resumableState.styleResources[href] + : void 0; + null !== resourceState && + ((resumableState.styleResources[href] = null), + styleQueue || + ((styleQueue = { + precedence: escapeTextForBrowser(precedence), + rules: [], + hrefs: [], + sheets: new Map() + }), + renderState.styles.set(precedence, styleQueue)), + (precedence = { + state: 0, + props: assign( + { rel: "stylesheet", href: href, "data-precedence": precedence }, + options + ) + }), + resourceState && + (2 === resourceState.length && + adoptPreloadCredentials(precedence.props, resourceState), + (renderState = renderState.preloads.stylesheets.get(href)) && + 0 < renderState.length + ? (renderState.length = 0) + : (precedence.state = 1)), + styleQueue.sheets.set(href, precedence), + enqueueFlush(request)); + } + } else previousDispatcher.S(href, precedence, options); +} +function preinitScript(src, options) { + var request = resolveRequest(); + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if (src) { + var resourceState = resumableState.scriptResources.hasOwnProperty(src) + ? resumableState.scriptResources[src] + : void 0; + null !== resourceState && + ((resumableState.scriptResources[src] = null), + (options = assign({ src: src, async: !0 }, options)), + resourceState && + (2 === resourceState.length && + adoptPreloadCredentials(options, resourceState), + (src = renderState.preloads.scripts.get(src))) && + (src.length = 0), + (src = []), + renderState.scripts.add(src), + pushScriptImpl(src, options), + enqueueFlush(request)); + } + } else previousDispatcher.X(src, options); +} +function preinitModuleScript(src, options) { + var request = resolveRequest(); + if (request) { + var resumableState = request.resumableState, + renderState = request.renderState; + if (src) { + var resourceState = resumableState.moduleScriptResources.hasOwnProperty( + src + ) + ? resumableState.moduleScriptResources[src] + : void 0; + null !== resourceState && + ((resumableState.moduleScriptResources[src] = null), + (options = assign({ src: src, type: "module", async: !0 }, options)), + resourceState && + (2 === resourceState.length && + adoptPreloadCredentials(options, resourceState), + (src = renderState.preloads.moduleScripts.get(src))) && + (src.length = 0), + (src = []), + renderState.scripts.add(src), + pushScriptImpl(src, options), + enqueueFlush(request)); + } + } else previousDispatcher.M(src, options); +} +function adoptPreloadCredentials(target, preloadState) { + null == target.crossOrigin && (target.crossOrigin = preloadState[0]); + null == target.integrity && (target.integrity = preloadState[1]); +} +function getPreloadAsHeader(href, as, params) { + href = ("" + href).replace( + regexForHrefInLinkHeaderURLContext, + escapeHrefForLinkHeaderURLContextReplacer + ); + as = ("" + as).replace( + regexForLinkHeaderQuotedParamValueContext, + escapeStringForLinkHeaderQuotedParamValueContextReplacer + ); + as = "<" + href + '>; rel=preload; as="' + as + '"'; + for (var paramName in params) + hasOwnProperty.call(params, paramName) && + ((href = params[paramName]), + "string" === typeof href && + (as += + "; " + + paramName.toLowerCase() + + '="' + + ("" + href).replace( + regexForLinkHeaderQuotedParamValueContext, + escapeStringForLinkHeaderQuotedParamValueContextReplacer + ) + + '"')); + return as; +} +var regexForHrefInLinkHeaderURLContext = /[<>\r\n]/g; +function escapeHrefForLinkHeaderURLContextReplacer(match) { + switch (match) { + case "<": + return "%3C"; + case ">": + return "%3E"; + case "\n": + return "%0A"; + case "\r": + return "%0D"; + default: + throw Error( + "escapeLinkHrefForHeaderContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React" + ); + } +} +var regexForLinkHeaderQuotedParamValueContext = /["';,\r\n]/g; +function escapeStringForLinkHeaderQuotedParamValueContextReplacer(match) { + switch (match) { + case '"': + return "%22"; + case "'": + return "%27"; + case ";": + return "%3B"; + case ",": + return "%2C"; + case "\n": + return "%0A"; + case "\r": + return "%0D"; + default: + throw Error( + "escapeStringForLinkHeaderQuotedParamValueContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React" + ); + } +} +function hoistStyleQueueDependency(styleQueue) { + this.styles.add(styleQueue); +} +function hoistStylesheetDependency(stylesheet) { + this.stylesheets.add(stylesheet); +} +function hoistHoistables(parentState, childState) { + childState.styles.forEach(hoistStyleQueueDependency, parentState); + childState.stylesheets.forEach(hoistStylesheetDependency, parentState); + childState.suspenseyImages && (parentState.suspenseyImages = !0); +} +function hasSuspenseyContent(hoistableState) { + return 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages; +} +var bind = Function.prototype.bind, + requestStorage = new async_hooks.AsyncLocalStorage(), + REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"); +function getComponentNameFromType(type) { + if (null == type) return null; + if ("function" === typeof type) + return type.$$typeof === REACT_CLIENT_REFERENCE + ? null + : type.displayName || type.name || null; + if ("string" === typeof type) return type; + switch (type) { + case REACT_FRAGMENT_TYPE: + return "Fragment"; + case REACT_PROFILER_TYPE: + return "Profiler"; + case REACT_STRICT_MODE_TYPE: + return "StrictMode"; + case REACT_SUSPENSE_TYPE: + return "Suspense"; + case REACT_SUSPENSE_LIST_TYPE: + return "SuspenseList"; + case REACT_ACTIVITY_TYPE: + return "Activity"; + } + if ("object" === typeof type) + switch (type.$$typeof) { + case REACT_PORTAL_TYPE: + return "Portal"; + case REACT_CONTEXT_TYPE: + return type.displayName || "Context"; + case REACT_CONSUMER_TYPE: + return (type._context.displayName || "Context") + ".Consumer"; + case REACT_FORWARD_REF_TYPE: + var innerType = type.render; + type = type.displayName; + type || + ((type = innerType.displayName || innerType.name || ""), + (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef")); + return type; + case REACT_MEMO_TYPE: + return ( + (innerType = type.displayName || null), + null !== innerType + ? innerType + : getComponentNameFromType(type.type) || "Memo" + ); + case REACT_LAZY_TYPE: + innerType = type._payload; + type = type._init; + try { + return getComponentNameFromType(type(innerType)); + } catch (x) {} + } + return null; +} +var emptyContextObject = {}, + currentActiveSnapshot = null; +function popToNearestCommonAncestor(prev, next) { + if (prev !== next) { + prev.context._currentValue = prev.parentValue; + prev = prev.parent; + var parentNext = next.parent; + if (null === prev) { + if (null !== parentNext) + throw Error( + "The stacks must reach the root at the same time. This is a bug in React." + ); + } else { + if (null === parentNext) + throw Error( + "The stacks must reach the root at the same time. This is a bug in React." + ); + popToNearestCommonAncestor(prev, parentNext); + } + next.context._currentValue = next.value; + } +} +function popAllPrevious(prev) { + prev.context._currentValue = prev.parentValue; + prev = prev.parent; + null !== prev && popAllPrevious(prev); +} +function pushAllNext(next) { + var parentNext = next.parent; + null !== parentNext && pushAllNext(parentNext); + next.context._currentValue = next.value; +} +function popPreviousToCommonLevel(prev, next) { + prev.context._currentValue = prev.parentValue; + prev = prev.parent; + if (null === prev) + throw Error( + "The depth must equal at least at zero before reaching the root. This is a bug in React." + ); + prev.depth === next.depth + ? popToNearestCommonAncestor(prev, next) + : popPreviousToCommonLevel(prev, next); +} +function popNextToCommonLevel(prev, next) { + var parentNext = next.parent; + if (null === parentNext) + throw Error( + "The depth must equal at least at zero before reaching the root. This is a bug in React." + ); + prev.depth === parentNext.depth + ? popToNearestCommonAncestor(prev, parentNext) + : popNextToCommonLevel(prev, parentNext); + next.context._currentValue = next.value; +} +function switchContext(newSnapshot) { + var prev = currentActiveSnapshot; + prev !== newSnapshot && + (null === prev + ? pushAllNext(newSnapshot) + : null === newSnapshot + ? popAllPrevious(prev) + : prev.depth === newSnapshot.depth + ? popToNearestCommonAncestor(prev, newSnapshot) + : prev.depth > newSnapshot.depth + ? popPreviousToCommonLevel(prev, newSnapshot) + : popNextToCommonLevel(prev, newSnapshot), + (currentActiveSnapshot = newSnapshot)); +} +var classComponentUpdater = { + enqueueSetState: function (inst, payload) { + inst = inst._reactInternals; + null !== inst.queue && inst.queue.push(payload); + }, + enqueueReplaceState: function (inst, payload) { + inst = inst._reactInternals; + inst.replace = !0; + inst.queue = [payload]; + }, + enqueueForceUpdate: function () {} + }, + emptyTreeContext = { id: 1, overflow: "" }; +function pushTreeContext(baseContext, totalChildren, index) { + var baseIdWithLeadingBit = baseContext.id; + baseContext = baseContext.overflow; + var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1; + baseIdWithLeadingBit &= ~(1 << baseLength); + index += 1; + var length = 32 - clz32(totalChildren) + baseLength; + if (30 < length) { + var numberOfOverflowBits = baseLength - (baseLength % 5); + length = ( + baseIdWithLeadingBit & + ((1 << numberOfOverflowBits) - 1) + ).toString(32); + baseIdWithLeadingBit >>= numberOfOverflowBits; + baseLength -= numberOfOverflowBits; + return { + id: + (1 << (32 - clz32(totalChildren) + baseLength)) | + (index << baseLength) | + baseIdWithLeadingBit, + overflow: length + baseContext + }; + } + return { + id: (1 << length) | (index << baseLength) | baseIdWithLeadingBit, + overflow: baseContext + }; +} +var clz32 = Math.clz32 ? Math.clz32 : clz32Fallback, + log = Math.log, + LN2 = Math.LN2; +function clz32Fallback(x) { + x >>>= 0; + return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0; +} +function noop() {} +var SuspenseException = Error( + "Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`." +); +function trackUsedThenable(thenableState, thenable, index) { + index = thenableState[index]; + void 0 === index + ? thenableState.push(thenable) + : index !== thenable && (thenable.then(noop, noop), (thenable = index)); + switch (thenable.status) { + case "fulfilled": + return thenable.value; + case "rejected": + throw thenable.reason; + default: + "string" === typeof thenable.status + ? thenable.then(noop, noop) + : ((thenableState = thenable), + (thenableState.status = "pending"), + thenableState.then( + function (fulfilledValue) { + if ("pending" === thenable.status) { + var fulfilledThenable = thenable; + fulfilledThenable.status = "fulfilled"; + fulfilledThenable.value = fulfilledValue; + } + }, + function (error) { + if ("pending" === thenable.status) { + var rejectedThenable = thenable; + rejectedThenable.status = "rejected"; + rejectedThenable.reason = error; + } + } + )); + switch (thenable.status) { + case "fulfilled": + return thenable.value; + case "rejected": + throw thenable.reason; + } + suspendedThenable = thenable; + throw SuspenseException; + } +} +var suspendedThenable = null; +function getSuspendedThenable() { + if (null === suspendedThenable) + throw Error( + "Expected a suspended thenable. This is a bug in React. Please file an issue." + ); + var thenable = suspendedThenable; + suspendedThenable = null; + return thenable; +} +function is(x, y) { + return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y); +} +var objectIs = "function" === typeof Object.is ? Object.is : is, + currentlyRenderingComponent = null, + currentlyRenderingTask = null, + currentlyRenderingRequest = null, + currentlyRenderingKeyPath = null, + firstWorkInProgressHook = null, + workInProgressHook = null, + isReRender = !1, + didScheduleRenderPhaseUpdate = !1, + localIdCounter = 0, + actionStateCounter = 0, + actionStateMatchingIndex = -1, + thenableIndexCounter = 0, + thenableState = null, + renderPhaseUpdates = null, + numberOfReRenders = 0; +function resolveCurrentlyRenderingComponent() { + if (null === currentlyRenderingComponent) + throw Error( + "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem." + ); + return currentlyRenderingComponent; +} +function createHook() { + if (0 < numberOfReRenders) + throw Error("Rendered more hooks than during the previous render"); + return { memoizedState: null, queue: null, next: null }; +} +function createWorkInProgressHook() { + null === workInProgressHook + ? null === firstWorkInProgressHook + ? ((isReRender = !1), + (firstWorkInProgressHook = workInProgressHook = createHook())) + : ((isReRender = !0), (workInProgressHook = firstWorkInProgressHook)) + : null === workInProgressHook.next + ? ((isReRender = !1), + (workInProgressHook = workInProgressHook.next = createHook())) + : ((isReRender = !0), (workInProgressHook = workInProgressHook.next)); + return workInProgressHook; +} +function getThenableStateAfterSuspending() { + var state = thenableState; + thenableState = null; + return state; +} +function resetHooksState() { + currentlyRenderingKeyPath = + currentlyRenderingRequest = + currentlyRenderingTask = + currentlyRenderingComponent = + null; + didScheduleRenderPhaseUpdate = !1; + firstWorkInProgressHook = null; + numberOfReRenders = 0; + workInProgressHook = renderPhaseUpdates = null; +} +function basicStateReducer(state, action) { + return "function" === typeof action ? action(state) : action; +} +function useReducer(reducer, initialArg, init) { + currentlyRenderingComponent = resolveCurrentlyRenderingComponent(); + workInProgressHook = createWorkInProgressHook(); + if (isReRender) { + var queue = workInProgressHook.queue; + initialArg = queue.dispatch; + if ( + null !== renderPhaseUpdates && + ((init = renderPhaseUpdates.get(queue)), void 0 !== init) + ) { + renderPhaseUpdates.delete(queue); + queue = workInProgressHook.memoizedState; + do (queue = reducer(queue, init.action)), (init = init.next); + while (null !== init); + workInProgressHook.memoizedState = queue; + return [queue, initialArg]; + } + return [workInProgressHook.memoizedState, initialArg]; + } + reducer = + reducer === basicStateReducer + ? "function" === typeof initialArg + ? initialArg() + : initialArg + : void 0 !== init + ? init(initialArg) + : initialArg; + workInProgressHook.memoizedState = reducer; + reducer = workInProgressHook.queue = { last: null, dispatch: null }; + reducer = reducer.dispatch = dispatchAction.bind( + null, + currentlyRenderingComponent, + reducer + ); + return [workInProgressHook.memoizedState, reducer]; +} +function useMemo(nextCreate, deps) { + currentlyRenderingComponent = resolveCurrentlyRenderingComponent(); + workInProgressHook = createWorkInProgressHook(); + deps = void 0 === deps ? null : deps; + if (null !== workInProgressHook) { + var prevState = workInProgressHook.memoizedState; + if (null !== prevState && null !== deps) { + var prevDeps = prevState[1]; + a: if (null === prevDeps) prevDeps = !1; + else { + for (var i = 0; i < prevDeps.length && i < deps.length; i++) + if (!objectIs(deps[i], prevDeps[i])) { + prevDeps = !1; + break a; + } + prevDeps = !0; + } + if (prevDeps) return prevState[0]; + } + } + nextCreate = nextCreate(); + workInProgressHook.memoizedState = [nextCreate, deps]; + return nextCreate; +} +function dispatchAction(componentIdentity, queue, action) { + if (25 <= numberOfReRenders) + throw Error( + "Too many re-renders. React limits the number of renders to prevent an infinite loop." + ); + if (componentIdentity === currentlyRenderingComponent) + if ( + ((didScheduleRenderPhaseUpdate = !0), + (componentIdentity = { action: action, next: null }), + null === renderPhaseUpdates && (renderPhaseUpdates = new Map()), + (action = renderPhaseUpdates.get(queue)), + void 0 === action) + ) + renderPhaseUpdates.set(queue, componentIdentity); + else { + for (queue = action; null !== queue.next; ) queue = queue.next; + queue.next = componentIdentity; + } +} +function throwOnUseEffectEventCall() { + throw Error( + "A function wrapped in useEffectEvent can't be called during rendering." + ); +} +function unsupportedStartTransition() { + throw Error("startTransition cannot be called during server rendering."); +} +function unsupportedSetOptimisticState() { + throw Error("Cannot update optimistic state while rendering."); +} +function createPostbackActionStateKey(permalink, componentKeyPath, hookIndex) { + if (void 0 !== permalink) return "p" + permalink; + permalink = JSON.stringify([componentKeyPath, null, hookIndex]); + componentKeyPath = crypto.createHash("md5"); + componentKeyPath.update(permalink); + return "k" + componentKeyPath.digest("hex"); +} +function useActionState(action, initialState, permalink) { + resolveCurrentlyRenderingComponent(); + var actionStateHookIndex = actionStateCounter++, + request = currentlyRenderingRequest; + if ("function" === typeof action.$$FORM_ACTION) { + var nextPostbackStateKey = null, + componentKeyPath = currentlyRenderingKeyPath; + request = request.formState; + var isSignatureEqual = action.$$IS_SIGNATURE_EQUAL; + if (null !== request && "function" === typeof isSignatureEqual) { + var postbackKey = request[1]; + isSignatureEqual.call(action, request[2], request[3]) && + ((nextPostbackStateKey = createPostbackActionStateKey( + permalink, + componentKeyPath, + actionStateHookIndex + )), + postbackKey === nextPostbackStateKey && + ((actionStateMatchingIndex = actionStateHookIndex), + (initialState = request[0]))); + } + var boundAction = action.bind(null, initialState); + action = function (payload) { + boundAction(payload); + }; + "function" === typeof boundAction.$$FORM_ACTION && + (action.$$FORM_ACTION = function (prefix) { + prefix = boundAction.$$FORM_ACTION(prefix); + void 0 !== permalink && + ((permalink += ""), (prefix.action = permalink)); + var formData = prefix.data; + formData && + (null === nextPostbackStateKey && + (nextPostbackStateKey = createPostbackActionStateKey( + permalink, + componentKeyPath, + actionStateHookIndex + )), + formData.append("$ACTION_KEY", nextPostbackStateKey)); + return prefix; + }); + return [initialState, action, !1]; + } + var boundAction$22 = action.bind(null, initialState); + return [ + initialState, + function (payload) { + boundAction$22(payload); + }, + !1 + ]; +} +function unwrapThenable(thenable) { + var index = thenableIndexCounter; + thenableIndexCounter += 1; + null === thenableState && (thenableState = []); + return trackUsedThenable(thenableState, thenable, index); +} +function unsupportedRefresh() { + throw Error("Cache cannot be refreshed during server rendering."); +} +var HooksDispatcher = { + readContext: function (context) { + return context._currentValue; + }, + use: function (usable) { + if (null !== usable && "object" === typeof usable) { + if ("function" === typeof usable.then) return unwrapThenable(usable); + if (usable.$$typeof === REACT_CONTEXT_TYPE) return usable._currentValue; + } + throw Error("An unsupported type was passed to use(): " + String(usable)); + }, + useContext: function (context) { + resolveCurrentlyRenderingComponent(); + return context._currentValue; + }, + useMemo: useMemo, + useReducer: useReducer, + useRef: function (initialValue) { + currentlyRenderingComponent = resolveCurrentlyRenderingComponent(); + workInProgressHook = createWorkInProgressHook(); + var previousRef = workInProgressHook.memoizedState; + return null === previousRef + ? ((initialValue = { current: initialValue }), + (workInProgressHook.memoizedState = initialValue)) + : previousRef; + }, + useState: function (initialState) { + return useReducer(basicStateReducer, initialState); + }, + useInsertionEffect: noop, + useLayoutEffect: noop, + useCallback: function (callback, deps) { + return useMemo(function () { + return callback; + }, deps); + }, + useImperativeHandle: noop, + useEffect: noop, + useDebugValue: noop, + useDeferredValue: function (value, initialValue) { + resolveCurrentlyRenderingComponent(); + return void 0 !== initialValue ? initialValue : value; + }, + useTransition: function () { + resolveCurrentlyRenderingComponent(); + return [!1, unsupportedStartTransition]; + }, + useId: function () { + var JSCompiler_inline_result = currentlyRenderingTask.treeContext; + var overflow = JSCompiler_inline_result.overflow; + JSCompiler_inline_result = JSCompiler_inline_result.id; + JSCompiler_inline_result = + ( + JSCompiler_inline_result & + ~(1 << (32 - clz32(JSCompiler_inline_result) - 1)) + ).toString(32) + overflow; + var resumableState = currentResumableState; + if (null === resumableState) + throw Error( + "Invalid hook call. Hooks can only be called inside of the body of a function component." + ); + overflow = localIdCounter++; + JSCompiler_inline_result = + "_" + resumableState.idPrefix + "R_" + JSCompiler_inline_result; + 0 < overflow && (JSCompiler_inline_result += "H" + overflow.toString(32)); + return JSCompiler_inline_result + "_"; + }, + useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) { + if (void 0 === getServerSnapshot) + throw Error( + "Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering." + ); + return getServerSnapshot(); + }, + useOptimistic: function (passthrough) { + resolveCurrentlyRenderingComponent(); + return [passthrough, unsupportedSetOptimisticState]; + }, + useActionState: useActionState, + useFormState: useActionState, + useHostTransitionStatus: function () { + resolveCurrentlyRenderingComponent(); + return sharedNotPendingObject; + }, + useMemoCache: function (size) { + for (var data = Array(size), i = 0; i < size; i++) + data[i] = REACT_MEMO_CACHE_SENTINEL; + return data; + }, + useCacheRefresh: function () { + return unsupportedRefresh; + }, + useEffectEvent: function () { + return throwOnUseEffectEventCall; + } + }, + currentResumableState = null, + DefaultAsyncDispatcher = { + getCacheForType: function () { + throw Error("Not implemented."); + }, + cacheSignal: function () { + throw Error("Not implemented."); + } + }; +function prepareStackTrace(error, structuredStackTrace) { + error = (error.name || "Error") + ": " + (error.message || ""); + for (var i = 0; i < structuredStackTrace.length; i++) + error += "\n at " + structuredStackTrace[i].toString(); + return error; +} +var prefix, suffix; +function describeBuiltInComponentFrame(name) { + if (void 0 === prefix) + try { + throw Error(); + } catch (x) { + var match = x.stack.trim().match(/\n( *(at )?)/); + prefix = (match && match[1]) || ""; + suffix = + -1 < x.stack.indexOf("\n at") + ? " (<anonymous>)" + : -1 < x.stack.indexOf("@") + ? "@unknown:0:0" + : ""; + } + return "\n" + prefix + name + suffix; +} +var reentry = !1; +function describeNativeComponentFrame(fn, construct) { + if (!fn || reentry) return ""; + reentry = !0; + var previousPrepareStackTrace = Error.prepareStackTrace; + Error.prepareStackTrace = prepareStackTrace; + try { + var RunInRootFrame = { + DetermineComponentFrameRoot: function () { + try { + if (construct) { + var Fake = function () { + throw Error(); + }; + Object.defineProperty(Fake.prototype, "props", { + set: function () { + throw Error(); + } + }); + if ("object" === typeof Reflect && Reflect.construct) { + try { + Reflect.construct(Fake, []); + } catch (x) { + var control = x; + } + Reflect.construct(fn, [], Fake); + } else { + try { + Fake.call(); + } catch (x$24) { + control = x$24; + } + fn.call(Fake.prototype); + } + } else { + try { + throw Error(); + } catch (x$25) { + control = x$25; + } + (Fake = fn()) && + "function" === typeof Fake.catch && + Fake.catch(function () {}); + } + } catch (sample) { + if (sample && control && "string" === typeof sample.stack) + return [sample.stack, control.stack]; + } + return [null, null]; + } + }; + RunInRootFrame.DetermineComponentFrameRoot.displayName = + "DetermineComponentFrameRoot"; + var namePropDescriptor = Object.getOwnPropertyDescriptor( + RunInRootFrame.DetermineComponentFrameRoot, + "name" + ); + namePropDescriptor && + namePropDescriptor.configurable && + Object.defineProperty( + RunInRootFrame.DetermineComponentFrameRoot, + "name", + { value: "DetermineComponentFrameRoot" } + ); + var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(), + sampleStack = _RunInRootFrame$Deter[0], + controlStack = _RunInRootFrame$Deter[1]; + if (sampleStack && controlStack) { + var sampleLines = sampleStack.split("\n"), + controlLines = controlStack.split("\n"); + for ( + namePropDescriptor = RunInRootFrame = 0; + RunInRootFrame < sampleLines.length && + !sampleLines[RunInRootFrame].includes("DetermineComponentFrameRoot"); + + ) + RunInRootFrame++; + for ( + ; + namePropDescriptor < controlLines.length && + !controlLines[namePropDescriptor].includes( + "DetermineComponentFrameRoot" + ); + + ) + namePropDescriptor++; + if ( + RunInRootFrame === sampleLines.length || + namePropDescriptor === controlLines.length + ) + for ( + RunInRootFrame = sampleLines.length - 1, + namePropDescriptor = controlLines.length - 1; + 1 <= RunInRootFrame && + 0 <= namePropDescriptor && + sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]; + + ) + namePropDescriptor--; + for ( + ; + 1 <= RunInRootFrame && 0 <= namePropDescriptor; + RunInRootFrame--, namePropDescriptor-- + ) + if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) { + if (1 !== RunInRootFrame || 1 !== namePropDescriptor) { + do + if ( + (RunInRootFrame--, + namePropDescriptor--, + 0 > namePropDescriptor || + sampleLines[RunInRootFrame] !== + controlLines[namePropDescriptor]) + ) { + var frame = + "\n" + + sampleLines[RunInRootFrame].replace(" at new ", " at "); + fn.displayName && + frame.includes("<anonymous>") && + (frame = frame.replace("<anonymous>", fn.displayName)); + return frame; + } + while (1 <= RunInRootFrame && 0 <= namePropDescriptor); + } + break; + } + } + } finally { + (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace); + } + return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : "") + ? describeBuiltInComponentFrame(previousPrepareStackTrace) + : ""; +} +function describeComponentStackByType(type) { + if ("string" === typeof type) return describeBuiltInComponentFrame(type); + if ("function" === typeof type) + return type.prototype && type.prototype.isReactComponent + ? describeNativeComponentFrame(type, !0) + : describeNativeComponentFrame(type, !1); + if ("object" === typeof type && null !== type) { + switch (type.$$typeof) { + case REACT_FORWARD_REF_TYPE: + return describeNativeComponentFrame(type.render, !1); + case REACT_MEMO_TYPE: + return describeNativeComponentFrame(type.type, !1); + case REACT_LAZY_TYPE: + var lazyComponent = type, + payload = lazyComponent._payload; + lazyComponent = lazyComponent._init; + try { + type = lazyComponent(payload); + } catch (x) { + return describeBuiltInComponentFrame("Lazy"); + } + return describeComponentStackByType(type); + } + if ("string" === typeof type.name) { + a: { + payload = type.name; + lazyComponent = type.env; + var location = type.debugLocation; + if ( + null != location && + ((type = Error.prepareStackTrace), + (Error.prepareStackTrace = prepareStackTrace), + (location = location.stack), + (Error.prepareStackTrace = type), + location.startsWith("Error: react-stack-top-frame\n") && + (location = location.slice(29)), + (type = location.indexOf("\n")), + -1 !== type && (location = location.slice(type + 1)), + (type = location.indexOf("react_stack_bottom_frame")), + -1 !== type && (type = location.lastIndexOf("\n", type)), + (type = -1 !== type ? (location = location.slice(0, type)) : ""), + (location = type.lastIndexOf("\n")), + (type = -1 === location ? type : type.slice(location + 1)), + -1 !== type.indexOf(payload)) + ) { + payload = "\n" + type; + break a; + } + payload = describeBuiltInComponentFrame( + payload + (lazyComponent ? " [" + lazyComponent + "]" : "") + ); + } + return payload; + } + } + switch (type) { + case REACT_SUSPENSE_LIST_TYPE: + return describeBuiltInComponentFrame("SuspenseList"); + case REACT_SUSPENSE_TYPE: + return describeBuiltInComponentFrame("Suspense"); + } + return ""; +} +function isEligibleForOutlining(request, boundary) { + return ( + (500 < boundary.byteSize || hasSuspenseyContent(boundary.contentState)) && + null === boundary.contentPreamble + ); +} +function defaultErrorHandler(error) { + if ( + "object" === typeof error && + null !== error && + "string" === typeof error.environmentName + ) { + var JSCompiler_inline_result = error.environmentName; + error = [error].slice(0); + "string" === typeof error[0] + ? error.splice( + 0, + 1, + "\u001b[0m\u001b[7m%c%s\u001b[0m%c " + error[0], + "background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px", + " " + JSCompiler_inline_result + " ", + "" + ) + : error.splice( + 0, + 0, + "\u001b[0m\u001b[7m%c%s\u001b[0m%c", + "background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px", + " " + JSCompiler_inline_result + " ", + "" + ); + error.unshift(console); + JSCompiler_inline_result = bind.apply(console.error, error); + JSCompiler_inline_result(); + } else console.error(error); + return null; +} +function RequestInstance( + resumableState, + renderState, + rootFormatContext, + progressiveChunkSize, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone, + formState +) { + var abortSet = new Set(); + this.destination = null; + this.flushScheduled = !1; + this.resumableState = resumableState; + this.renderState = renderState; + this.rootFormatContext = rootFormatContext; + this.progressiveChunkSize = + void 0 === progressiveChunkSize ? 12800 : progressiveChunkSize; + this.status = 10; + this.fatalError = null; + this.pendingRootTasks = this.allPendingTasks = this.nextSegmentId = 0; + this.completedPreambleSegments = this.completedRootSegment = null; + this.byteSize = 0; + this.abortableTasks = abortSet; + this.pingedTasks = []; + this.clientRenderedBoundaries = []; + this.completedBoundaries = []; + this.partialBoundaries = []; + this.trackedPostpones = null; + this.onError = void 0 === onError ? defaultErrorHandler : onError; + this.onPostpone = void 0 === onPostpone ? noop : onPostpone; + this.onAllReady = void 0 === onAllReady ? noop : onAllReady; + this.onShellReady = void 0 === onShellReady ? noop : onShellReady; + this.onShellError = void 0 === onShellError ? noop : onShellError; + this.onFatalError = void 0 === onFatalError ? noop : onFatalError; + this.formState = void 0 === formState ? null : formState; +} +function createRequest( + children, + resumableState, + renderState, + rootFormatContext, + progressiveChunkSize, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone, + formState +) { + resumableState = new RequestInstance( + resumableState, + renderState, + rootFormatContext, + progressiveChunkSize, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone, + formState + ); + renderState = createPendingSegment( + resumableState, + 0, + null, + rootFormatContext, + !1, + !1 + ); + renderState.parentFlushed = !0; + children = createRenderTask( + resumableState, + null, + children, + -1, + null, + renderState, + null, + null, + resumableState.abortableTasks, + null, + rootFormatContext, + null, + emptyTreeContext, + null, + null + ); + pushComponentStack(children); + resumableState.pingedTasks.push(children); + return resumableState; +} +function createPrerenderRequest( + children, + resumableState, + renderState, + rootFormatContext, + progressiveChunkSize, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone +) { + children = createRequest( + children, + resumableState, + renderState, + rootFormatContext, + progressiveChunkSize, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone, + void 0 + ); + children.trackedPostpones = { + workingMap: new Map(), + rootNodes: [], + rootSlots: null + }; + return children; +} +function resumeRequest( + children, + postponedState, + renderState, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone +) { + renderState = new RequestInstance( + postponedState.resumableState, + renderState, + postponedState.rootFormatContext, + postponedState.progressiveChunkSize, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone, + null + ); + renderState.nextSegmentId = postponedState.nextSegmentId; + if ("number" === typeof postponedState.replaySlots) + return ( + (onError = createPendingSegment( + renderState, + 0, + null, + postponedState.rootFormatContext, + !1, + !1 + )), + (onError.parentFlushed = !0), + (children = createRenderTask( + renderState, + null, + children, + -1, + null, + onError, + null, + null, + renderState.abortableTasks, + null, + postponedState.rootFormatContext, + null, + emptyTreeContext, + null, + null + )), + pushComponentStack(children), + renderState.pingedTasks.push(children), + renderState + ); + children = createReplayTask( + renderState, + null, + { + nodes: postponedState.replayNodes, + slots: postponedState.replaySlots, + pendingTasks: 0 + }, + children, + -1, + null, + null, + renderState.abortableTasks, + null, + postponedState.rootFormatContext, + null, + emptyTreeContext, + null, + null + ); + pushComponentStack(children); + renderState.pingedTasks.push(children); + return renderState; +} +function resumeAndPrerenderRequest( + children, + postponedState, + renderState, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone +) { + children = resumeRequest( + children, + postponedState, + renderState, + onError, + onAllReady, + onShellReady, + onShellError, + onFatalError, + onPostpone + ); + children.trackedPostpones = { + workingMap: new Map(), + rootNodes: [], + rootSlots: null + }; + return children; +} +var currentRequest = null; +function resolveRequest() { + if (currentRequest) return currentRequest; + var store = requestStorage.getStore(); + return store ? store : null; +} +function pingTask(request, task) { + request.pingedTasks.push(task); + 1 === request.pingedTasks.length && + ((request.flushScheduled = null !== request.destination), + null !== request.trackedPostpones || 10 === request.status + ? scheduleMicrotask(function () { + return performWork(request); + }) + : setImmediate(function () { + return performWork(request); + })); +} +function createSuspenseBoundary( + request, + row, + fallbackAbortableTasks, + contentPreamble, + fallbackPreamble +) { + fallbackAbortableTasks = { + status: 0, + rootSegmentID: -1, + parentFlushed: !1, + pendingTasks: 0, + row: row, + completedSegments: [], + byteSize: 0, + fallbackAbortableTasks: fallbackAbortableTasks, + errorDigest: null, + contentState: createHoistableState(), + fallbackState: createHoistableState(), + contentPreamble: contentPreamble, + fallbackPreamble: fallbackPreamble, + trackedContentKeyPath: null, + trackedFallbackNode: null + }; + null !== row && + (row.pendingTasks++, + (contentPreamble = row.boundaries), + null !== contentPreamble && + (request.allPendingTasks++, + fallbackAbortableTasks.pendingTasks++, + contentPreamble.push(fallbackAbortableTasks)), + (request = row.inheritedHoistables), + null !== request && + hoistHoistables(fallbackAbortableTasks.contentState, request)); + return fallbackAbortableTasks; +} +function createRenderTask( + request, + thenableState, + node, + childIndex, + blockedBoundary, + blockedSegment, + blockedPreamble, + hoistableState, + abortSet, + keyPath, + formatContext, + context, + treeContext, + row, + componentStack +) { + request.allPendingTasks++; + null === blockedBoundary + ? request.pendingRootTasks++ + : blockedBoundary.pendingTasks++; + null !== row && row.pendingTasks++; + var task = { + replay: null, + node: node, + childIndex: childIndex, + ping: function () { + return pingTask(request, task); + }, + blockedBoundary: blockedBoundary, + blockedSegment: blockedSegment, + blockedPreamble: blockedPreamble, + hoistableState: hoistableState, + abortSet: abortSet, + keyPath: keyPath, + formatContext: formatContext, + context: context, + treeContext: treeContext, + row: row, + componentStack: componentStack, + thenableState: thenableState + }; + abortSet.add(task); + return task; +} +function createReplayTask( + request, + thenableState, + replay, + node, + childIndex, + blockedBoundary, + hoistableState, + abortSet, + keyPath, + formatContext, + context, + treeContext, + row, + componentStack +) { + request.allPendingTasks++; + null === blockedBoundary + ? request.pendingRootTasks++ + : blockedBoundary.pendingTasks++; + null !== row && row.pendingTasks++; + replay.pendingTasks++; + var task = { + replay: replay, + node: node, + childIndex: childIndex, + ping: function () { + return pingTask(request, task); + }, + blockedBoundary: blockedBoundary, + blockedSegment: null, + blockedPreamble: null, + hoistableState: hoistableState, + abortSet: abortSet, + keyPath: keyPath, + formatContext: formatContext, + context: context, + treeContext: treeContext, + row: row, + componentStack: componentStack, + thenableState: thenableState + }; + abortSet.add(task); + return task; +} +function createPendingSegment( + request, + index, + boundary, + parentFormatContext, + lastPushedText, + textEmbedded +) { + return { + status: 0, + parentFlushed: !1, + id: -1, + index: index, + chunks: [], + children: [], + preambleChildren: [], + parentFormatContext: parentFormatContext, + boundary: boundary, + lastPushedText: lastPushedText, + textEmbedded: textEmbedded + }; +} +function pushComponentStack(task) { + var node = task.node; + if ("object" === typeof node && null !== node) + switch (node.$$typeof) { + case REACT_ELEMENT_TYPE: + task.componentStack = { parent: task.componentStack, type: node.type }; + } +} +function replaceSuspenseComponentStackWithSuspenseFallbackStack( + componentStack +) { + return null === componentStack + ? null + : { parent: componentStack.parent, type: "Suspense Fallback" }; +} +function getThrownInfo(node$jscomp$0) { + var errorInfo = {}; + node$jscomp$0 && + Object.defineProperty(errorInfo, "componentStack", { + configurable: !0, + enumerable: !0, + get: function () { + try { + var info = "", + node = node$jscomp$0; + do + (info += describeComponentStackByType(node.type)), + (node = node.parent); + while (node); + var JSCompiler_inline_result = info; + } catch (x) { + JSCompiler_inline_result = + "\nError generating stack: " + x.message + "\n" + x.stack; + } + Object.defineProperty(errorInfo, "componentStack", { + value: JSCompiler_inline_result + }); + return JSCompiler_inline_result; + } + }); + return errorInfo; +} +function logRecoverableError(request, error, errorInfo) { + request = request.onError; + error = request(error, errorInfo); + if (null == error || "string" === typeof error) return error; +} +function fatalError(request, error) { + var onShellError = request.onShellError, + onFatalError = request.onFatalError; + onShellError(error); + onFatalError(error); + null !== request.destination + ? ((request.status = 14), request.destination.destroy(error)) + : ((request.status = 13), (request.fatalError = error)); +} +function finishSuspenseListRow(request, row) { + unblockSuspenseListRow(request, row.next, row.hoistables); +} +function unblockSuspenseListRow(request, unblockedRow, inheritedHoistables) { + for (; null !== unblockedRow; ) { + null !== inheritedHoistables && + (hoistHoistables(unblockedRow.hoistables, inheritedHoistables), + (unblockedRow.inheritedHoistables = inheritedHoistables)); + var unblockedBoundaries = unblockedRow.boundaries; + if (null !== unblockedBoundaries) { + unblockedRow.boundaries = null; + for (var i = 0; i < unblockedBoundaries.length; i++) { + var unblockedBoundary = unblockedBoundaries[i]; + null !== inheritedHoistables && + hoistHoistables(unblockedBoundary.contentState, inheritedHoistables); + finishedTask(request, unblockedBoundary, null, null); + } + } + unblockedRow.pendingTasks--; + if (0 < unblockedRow.pendingTasks) break; + inheritedHoistables = unblockedRow.hoistables; + unblockedRow = unblockedRow.next; + } +} +function tryToResolveTogetherRow(request, togetherRow) { + var boundaries = togetherRow.boundaries; + if (null !== boundaries && togetherRow.pendingTasks === boundaries.length) { + for (var allCompleteAndInlinable = !0, i = 0; i < boundaries.length; i++) { + var rowBoundary = boundaries[i]; + if ( + 1 !== rowBoundary.pendingTasks || + rowBoundary.parentFlushed || + isEligibleForOutlining(request, rowBoundary) + ) { + allCompleteAndInlinable = !1; + break; + } + } + allCompleteAndInlinable && + unblockSuspenseListRow(request, togetherRow, togetherRow.hoistables); + } +} +function createSuspenseListRow(previousRow) { + var newRow = { + pendingTasks: 1, + boundaries: null, + hoistables: createHoistableState(), + inheritedHoistables: null, + together: !1, + next: null + }; + null !== previousRow && + 0 < previousRow.pendingTasks && + (newRow.pendingTasks++, + (newRow.boundaries = []), + (previousRow.next = newRow)); + return newRow; +} +function renderSuspenseListRows(request, task, keyPath, rows, revealOrder) { + var prevKeyPath = task.keyPath, + prevTreeContext = task.treeContext, + prevRow = task.row; + task.keyPath = keyPath; + keyPath = rows.length; + var previousSuspenseListRow = null; + if (null !== task.replay) { + var resumeSlots = task.replay.slots; + if (null !== resumeSlots && "object" === typeof resumeSlots) + for (var n = 0; n < keyPath; n++) { + var i = + "backwards" !== revealOrder && + "unstable_legacy-backwards" !== revealOrder + ? n + : keyPath - 1 - n, + node = rows[i]; + task.row = previousSuspenseListRow = createSuspenseListRow( + previousSuspenseListRow + ); + task.treeContext = pushTreeContext(prevTreeContext, keyPath, i); + var resumeSegmentID = resumeSlots[i]; + "number" === typeof resumeSegmentID + ? (resumeNode(request, task, resumeSegmentID, node, i), + delete resumeSlots[i]) + : renderNode(request, task, node, i); + 0 === --previousSuspenseListRow.pendingTasks && + finishSuspenseListRow(request, previousSuspenseListRow); + } + else + for (resumeSlots = 0; resumeSlots < keyPath; resumeSlots++) + (n = + "backwards" !== revealOrder && + "unstable_legacy-backwards" !== revealOrder + ? resumeSlots + : keyPath - 1 - resumeSlots), + (i = rows[n]), + (task.row = previousSuspenseListRow = + createSuspenseListRow(previousSuspenseListRow)), + (task.treeContext = pushTreeContext(prevTreeContext, keyPath, n)), + renderNode(request, task, i, n), + 0 === --previousSuspenseListRow.pendingTasks && + finishSuspenseListRow(request, previousSuspenseListRow); + } else if ( + "backwards" !== revealOrder && + "unstable_legacy-backwards" !== revealOrder + ) + for (revealOrder = 0; revealOrder < keyPath; revealOrder++) + (resumeSlots = rows[revealOrder]), + (task.row = previousSuspenseListRow = + createSuspenseListRow(previousSuspenseListRow)), + (task.treeContext = pushTreeContext( + prevTreeContext, + keyPath, + revealOrder + )), + renderNode(request, task, resumeSlots, revealOrder), + 0 === --previousSuspenseListRow.pendingTasks && + finishSuspenseListRow(request, previousSuspenseListRow); + else { + revealOrder = task.blockedSegment; + resumeSlots = revealOrder.children.length; + n = revealOrder.chunks.length; + for (i = keyPath - 1; 0 <= i; i--) { + node = rows[i]; + task.row = previousSuspenseListRow = createSuspenseListRow( + previousSuspenseListRow + ); + task.treeContext = pushTreeContext(prevTreeContext, keyPath, i); + resumeSegmentID = createPendingSegment( + request, + n, + null, + task.formatContext, + 0 === i ? revealOrder.lastPushedText : !0, + !0 + ); + revealOrder.children.splice(resumeSlots, 0, resumeSegmentID); + task.blockedSegment = resumeSegmentID; + try { + renderNode(request, task, node, i), + resumeSegmentID.lastPushedText && + resumeSegmentID.textEmbedded && + resumeSegmentID.chunks.push(textSeparator), + (resumeSegmentID.status = 1), + finishedSegment(request, task.blockedBoundary, resumeSegmentID), + 0 === --previousSuspenseListRow.pendingTasks && + finishSuspenseListRow(request, previousSuspenseListRow); + } catch (thrownValue) { + throw ( + ((resumeSegmentID.status = 12 === request.status ? 3 : 4), + thrownValue) + ); + } + } + task.blockedSegment = revealOrder; + revealOrder.lastPushedText = !1; + } + null !== prevRow && + null !== previousSuspenseListRow && + 0 < previousSuspenseListRow.pendingTasks && + (prevRow.pendingTasks++, (previousSuspenseListRow.next = prevRow)); + task.treeContext = prevTreeContext; + task.row = prevRow; + task.keyPath = prevKeyPath; +} +function renderWithHooks(request, task, keyPath, Component, props, secondArg) { + var prevThenableState = task.thenableState; + task.thenableState = null; + currentlyRenderingComponent = {}; + currentlyRenderingTask = task; + currentlyRenderingRequest = request; + currentlyRenderingKeyPath = keyPath; + actionStateCounter = localIdCounter = 0; + actionStateMatchingIndex = -1; + thenableIndexCounter = 0; + thenableState = prevThenableState; + for (request = Component(props, secondArg); didScheduleRenderPhaseUpdate; ) + (didScheduleRenderPhaseUpdate = !1), + (actionStateCounter = localIdCounter = 0), + (actionStateMatchingIndex = -1), + (thenableIndexCounter = 0), + (numberOfReRenders += 1), + (workInProgressHook = null), + (request = Component(props, secondArg)); + resetHooksState(); + return request; +} +function finishFunctionComponent( + request, + task, + keyPath, + children, + hasId, + actionStateCount, + actionStateMatchingIndex +) { + var didEmitActionStateMarkers = !1; + if (0 !== actionStateCount && null !== request.formState) { + var segment = task.blockedSegment; + if (null !== segment) { + didEmitActionStateMarkers = !0; + segment = segment.chunks; + for (var i = 0; i < actionStateCount; i++) + i === actionStateMatchingIndex + ? segment.push(formStateMarkerIsMatching) + : segment.push(formStateMarkerIsNotMatching); + } + } + actionStateCount = task.keyPath; + task.keyPath = keyPath; + hasId + ? ((keyPath = task.treeContext), + (task.treeContext = pushTreeContext(keyPath, 1, 0)), + renderNode(request, task, children, -1), + (task.treeContext = keyPath)) + : didEmitActionStateMarkers + ? renderNode(request, task, children, -1) + : renderNodeDestructive(request, task, children, -1); + task.keyPath = actionStateCount; +} +function renderElement(request, task, keyPath, type, props, ref) { + if ("function" === typeof type) + if (type.prototype && type.prototype.isReactComponent) { + var newProps = props; + if ("ref" in props) { + newProps = {}; + for (var propName in props) + "ref" !== propName && (newProps[propName] = props[propName]); + } + var defaultProps = type.defaultProps; + if (defaultProps) { + newProps === props && (newProps = assign({}, newProps, props)); + for (var propName$44 in defaultProps) + void 0 === newProps[propName$44] && + (newProps[propName$44] = defaultProps[propName$44]); + } + props = newProps; + newProps = emptyContextObject; + defaultProps = type.contextType; + "object" === typeof defaultProps && + null !== defaultProps && + (newProps = defaultProps._currentValue); + newProps = new type(props, newProps); + var initialState = void 0 !== newProps.state ? newProps.state : null; + newProps.updater = classComponentUpdater; + newProps.props = props; + newProps.state = initialState; + defaultProps = { queue: [], replace: !1 }; + newProps._reactInternals = defaultProps; + ref = type.contextType; + newProps.context = + "object" === typeof ref && null !== ref + ? ref._currentValue + : emptyContextObject; + ref = type.getDerivedStateFromProps; + "function" === typeof ref && + ((ref = ref(props, initialState)), + (initialState = + null === ref || void 0 === ref + ? initialState + : assign({}, initialState, ref)), + (newProps.state = initialState)); + if ( + "function" !== typeof type.getDerivedStateFromProps && + "function" !== typeof newProps.getSnapshotBeforeUpdate && + ("function" === typeof newProps.UNSAFE_componentWillMount || + "function" === typeof newProps.componentWillMount) + ) + if ( + ((type = newProps.state), + "function" === typeof newProps.componentWillMount && + newProps.componentWillMount(), + "function" === typeof newProps.UNSAFE_componentWillMount && + newProps.UNSAFE_componentWillMount(), + type !== newProps.state && + classComponentUpdater.enqueueReplaceState( + newProps, + newProps.state, + null + ), + null !== defaultProps.queue && 0 < defaultProps.queue.length) + ) + if ( + ((type = defaultProps.queue), + (ref = defaultProps.replace), + (defaultProps.queue = null), + (defaultProps.replace = !1), + ref && 1 === type.length) + ) + newProps.state = type[0]; + else { + defaultProps = ref ? type[0] : newProps.state; + initialState = !0; + for (ref = ref ? 1 : 0; ref < type.length; ref++) + (propName$44 = type[ref]), + (propName$44 = + "function" === typeof propName$44 + ? propName$44.call(newProps, defaultProps, props, void 0) + : propName$44), + null != propName$44 && + (initialState + ? ((initialState = !1), + (defaultProps = assign({}, defaultProps, propName$44))) + : assign(defaultProps, propName$44)); + newProps.state = defaultProps; + } + else defaultProps.queue = null; + type = newProps.render(); + if (12 === request.status) throw null; + props = task.keyPath; + task.keyPath = keyPath; + renderNodeDestructive(request, task, type, -1); + task.keyPath = props; + } else { + type = renderWithHooks(request, task, keyPath, type, props, void 0); + if (12 === request.status) throw null; + finishFunctionComponent( + request, + task, + keyPath, + type, + 0 !== localIdCounter, + actionStateCounter, + actionStateMatchingIndex + ); + } + else if ("string" === typeof type) + if (((newProps = task.blockedSegment), null === newProps)) + (newProps = props.children), + (defaultProps = task.formatContext), + (initialState = task.keyPath), + (task.formatContext = getChildFormatContext(defaultProps, type, props)), + (task.keyPath = keyPath), + renderNode(request, task, newProps, -1), + (task.formatContext = defaultProps), + (task.keyPath = initialState); + else { + initialState = pushStartInstance( + newProps.chunks, + type, + props, + request.resumableState, + request.renderState, + task.blockedPreamble, + task.hoistableState, + task.formatContext, + newProps.lastPushedText + ); + newProps.lastPushedText = !1; + defaultProps = task.formatContext; + ref = task.keyPath; + task.keyPath = keyPath; + if ( + 3 === + (task.formatContext = getChildFormatContext(defaultProps, type, props)) + .insertionMode + ) { + keyPath = createPendingSegment( + request, + 0, + null, + task.formatContext, + !1, + !1 + ); + newProps.preambleChildren.push(keyPath); + task.blockedSegment = keyPath; + try { + (keyPath.status = 6), + renderNode(request, task, initialState, -1), + keyPath.lastPushedText && + keyPath.textEmbedded && + keyPath.chunks.push(textSeparator), + (keyPath.status = 1), + finishedSegment(request, task.blockedBoundary, keyPath); + } finally { + task.blockedSegment = newProps; + } + } else renderNode(request, task, initialState, -1); + task.formatContext = defaultProps; + task.keyPath = ref; + a: { + task = newProps.chunks; + request = request.resumableState; + switch (type) { + case "title": + case "style": + case "script": + case "area": + case "base": + case "br": + case "col": + case "embed": + case "hr": + case "img": + case "input": + case "keygen": + case "link": + case "meta": + case "param": + case "source": + case "track": + case "wbr": + break a; + case "body": + if (1 >= defaultProps.insertionMode) { + request.hasBody = !0; + break a; + } + break; + case "html": + if (0 === defaultProps.insertionMode) { + request.hasHtml = !0; + break a; + } + break; + case "head": + if (1 >= defaultProps.insertionMode) break a; + } + task.push(endChunkForTag(type)); + } + newProps.lastPushedText = !1; + } + else { + switch (type) { + case REACT_LEGACY_HIDDEN_TYPE: + case REACT_STRICT_MODE_TYPE: + case REACT_PROFILER_TYPE: + case REACT_FRAGMENT_TYPE: + type = task.keyPath; + task.keyPath = keyPath; + renderNodeDestructive(request, task, props.children, -1); + task.keyPath = type; + return; + case REACT_ACTIVITY_TYPE: + type = task.blockedSegment; + null === type + ? "hidden" !== props.mode && + ((type = task.keyPath), + (task.keyPath = keyPath), + renderNode(request, task, props.children, -1), + (task.keyPath = type)) + : "hidden" !== props.mode && + (type.chunks.push(startActivityBoundary), + (type.lastPushedText = !1), + (newProps = task.keyPath), + (task.keyPath = keyPath), + renderNode(request, task, props.children, -1), + (task.keyPath = newProps), + type.chunks.push(endActivityBoundary), + (type.lastPushedText = !1)); + return; + case REACT_SUSPENSE_LIST_TYPE: + a: { + type = props.children; + props = props.revealOrder; + if ( + "forwards" === props || + "backwards" === props || + "unstable_legacy-backwards" === props + ) { + if (isArrayImpl(type)) { + renderSuspenseListRows(request, task, keyPath, type, props); + break a; + } + if ((newProps = getIteratorFn(type))) + if ((newProps = newProps.call(type))) { + defaultProps = newProps.next(); + if (!defaultProps.done) { + do defaultProps = newProps.next(); + while (!defaultProps.done); + renderSuspenseListRows(request, task, keyPath, type, props); + } + break a; + } + } + "together" === props + ? ((props = task.keyPath), + (newProps = task.row), + (defaultProps = task.row = createSuspenseListRow(null)), + (defaultProps.boundaries = []), + (defaultProps.together = !0), + (task.keyPath = keyPath), + renderNodeDestructive(request, task, type, -1), + 0 === --defaultProps.pendingTasks && + finishSuspenseListRow(request, defaultProps), + (task.keyPath = props), + (task.row = newProps), + null !== newProps && + 0 < defaultProps.pendingTasks && + (newProps.pendingTasks++, (defaultProps.next = newProps))) + : ((props = task.keyPath), + (task.keyPath = keyPath), + renderNodeDestructive(request, task, type, -1), + (task.keyPath = props)); + } + return; + case REACT_VIEW_TRANSITION_TYPE: + case REACT_SCOPE_TYPE: + throw Error("ReactDOMServer does not yet support scope components."); + case REACT_SUSPENSE_TYPE: + a: if (null !== task.replay) { + type = task.keyPath; + newProps = task.formatContext; + defaultProps = task.row; + task.keyPath = keyPath; + task.formatContext = getSuspenseContentFormatContext( + request.resumableState, + newProps + ); + task.row = null; + keyPath = props.children; + try { + renderNode(request, task, keyPath, -1); + } finally { + (task.keyPath = type), + (task.formatContext = newProps), + (task.row = defaultProps); + } + } else { + type = task.keyPath; + ref = task.formatContext; + var prevRow = task.row; + propName$44 = task.blockedBoundary; + propName = task.blockedPreamble; + var parentHoistableState = task.hoistableState, + parentSegment = task.blockedSegment, + fallback = props.fallback; + props = props.children; + var fallbackAbortSet = new Set(); + var newBoundary = + 2 > task.formatContext.insertionMode + ? createSuspenseBoundary( + request, + task.row, + fallbackAbortSet, + createPreambleState(), + createPreambleState() + ) + : createSuspenseBoundary( + request, + task.row, + fallbackAbortSet, + null, + null + ); + null !== request.trackedPostpones && + (newBoundary.trackedContentKeyPath = keyPath); + var boundarySegment = createPendingSegment( + request, + parentSegment.chunks.length, + newBoundary, + task.formatContext, + !1, + !1 + ); + parentSegment.children.push(boundarySegment); + parentSegment.lastPushedText = !1; + var contentRootSegment = createPendingSegment( + request, + 0, + null, + task.formatContext, + !1, + !1 + ); + contentRootSegment.parentFlushed = !0; + if (null !== request.trackedPostpones) { + newProps = task.componentStack; + defaultProps = [keyPath[0], "Suspense Fallback", keyPath[2]]; + initialState = [defaultProps[1], defaultProps[2], [], null]; + request.trackedPostpones.workingMap.set(defaultProps, initialState); + newBoundary.trackedFallbackNode = initialState; + task.blockedSegment = boundarySegment; + task.blockedPreamble = newBoundary.fallbackPreamble; + task.keyPath = defaultProps; + task.formatContext = getSuspenseFallbackFormatContext( + request.resumableState, + ref + ); + task.componentStack = + replaceSuspenseComponentStackWithSuspenseFallbackStack(newProps); + boundarySegment.status = 6; + try { + renderNode(request, task, fallback, -1), + boundarySegment.lastPushedText && + boundarySegment.textEmbedded && + boundarySegment.chunks.push(textSeparator), + (boundarySegment.status = 1), + finishedSegment(request, propName$44, boundarySegment); + } catch (thrownValue) { + throw ( + ((boundarySegment.status = 12 === request.status ? 3 : 4), + thrownValue) + ); + } finally { + (task.blockedSegment = parentSegment), + (task.blockedPreamble = propName), + (task.keyPath = type), + (task.formatContext = ref); + } + task = createRenderTask( + request, + null, + props, + -1, + newBoundary, + contentRootSegment, + newBoundary.contentPreamble, + newBoundary.contentState, + task.abortSet, + keyPath, + getSuspenseContentFormatContext( + request.resumableState, + task.formatContext + ), + task.context, + task.treeContext, + null, + newProps + ); + pushComponentStack(task); + request.pingedTasks.push(task); + } else { + task.blockedBoundary = newBoundary; + task.blockedPreamble = newBoundary.contentPreamble; + task.hoistableState = newBoundary.contentState; + task.blockedSegment = contentRootSegment; + task.keyPath = keyPath; + task.formatContext = getSuspenseContentFormatContext( + request.resumableState, + ref + ); + task.row = null; + contentRootSegment.status = 6; + try { + if ( + (renderNode(request, task, props, -1), + contentRootSegment.lastPushedText && + contentRootSegment.textEmbedded && + contentRootSegment.chunks.push(textSeparator), + (contentRootSegment.status = 1), + finishedSegment(request, newBoundary, contentRootSegment), + queueCompletedSegment(newBoundary, contentRootSegment), + 0 === newBoundary.pendingTasks && 0 === newBoundary.status) + ) { + if ( + ((newBoundary.status = 1), + !isEligibleForOutlining(request, newBoundary)) + ) { + null !== prevRow && + 0 === --prevRow.pendingTasks && + finishSuspenseListRow(request, prevRow); + 0 === request.pendingRootTasks && + task.blockedPreamble && + preparePreamble(request); + break a; + } + } else + null !== prevRow && + prevRow.together && + tryToResolveTogetherRow(request, prevRow); + } catch (thrownValue$31) { + (newBoundary.status = 4), + 12 === request.status + ? ((contentRootSegment.status = 3), + (newProps = request.fatalError)) + : ((contentRootSegment.status = 4), + (newProps = thrownValue$31)), + (defaultProps = getThrownInfo(task.componentStack)), + (initialState = logRecoverableError( + request, + newProps, + defaultProps + )), + (newBoundary.errorDigest = initialState), + untrackBoundary(request, newBoundary); + } finally { + (task.blockedBoundary = propName$44), + (task.blockedPreamble = propName), + (task.hoistableState = parentHoistableState), + (task.blockedSegment = parentSegment), + (task.keyPath = type), + (task.formatContext = ref), + (task.row = prevRow); + } + task = createRenderTask( + request, + null, + fallback, + -1, + propName$44, + boundarySegment, + newBoundary.fallbackPreamble, + newBoundary.fallbackState, + fallbackAbortSet, + [keyPath[0], "Suspense Fallback", keyPath[2]], + getSuspenseFallbackFormatContext( + request.resumableState, + task.formatContext + ), + task.context, + task.treeContext, + task.row, + replaceSuspenseComponentStackWithSuspenseFallbackStack( + task.componentStack + ) + ); + pushComponentStack(task); + request.pingedTasks.push(task); + } + } + return; + } + if ("object" === typeof type && null !== type) + switch (type.$$typeof) { + case REACT_FORWARD_REF_TYPE: + if ("ref" in props) + for (parentSegment in ((newProps = {}), props)) + "ref" !== parentSegment && + (newProps[parentSegment] = props[parentSegment]); + else newProps = props; + type = renderWithHooks( + request, + task, + keyPath, + type.render, + newProps, + ref + ); + finishFunctionComponent( + request, + task, + keyPath, + type, + 0 !== localIdCounter, + actionStateCounter, + actionStateMatchingIndex + ); + return; + case REACT_MEMO_TYPE: + renderElement(request, task, keyPath, type.type, props, ref); + return; + case REACT_CONTEXT_TYPE: + defaultProps = props.children; + newProps = task.keyPath; + props = props.value; + initialState = type._currentValue; + type._currentValue = props; + ref = currentActiveSnapshot; + currentActiveSnapshot = type = { + parent: ref, + depth: null === ref ? 0 : ref.depth + 1, + context: type, + parentValue: initialState, + value: props + }; + task.context = type; + task.keyPath = keyPath; + renderNodeDestructive(request, task, defaultProps, -1); + request = currentActiveSnapshot; + if (null === request) + throw Error( + "Tried to pop a Context at the root of the app. This is a bug in React." + ); + request.context._currentValue = request.parentValue; + request = currentActiveSnapshot = request.parent; + task.context = request; + task.keyPath = newProps; + return; + case REACT_CONSUMER_TYPE: + props = props.children; + type = props(type._context._currentValue); + props = task.keyPath; + task.keyPath = keyPath; + renderNodeDestructive(request, task, type, -1); + task.keyPath = props; + return; + case REACT_LAZY_TYPE: + newProps = type._init; + type = newProps(type._payload); + if (12 === request.status) throw null; + renderElement(request, task, keyPath, type, props, ref); + return; + } + throw Error( + "Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: " + + ((null == type ? type : typeof type) + ".") + ); + } +} +function resumeNode(request, task, segmentId, node, childIndex) { + var prevReplay = task.replay, + blockedBoundary = task.blockedBoundary, + resumedSegment = createPendingSegment( + request, + 0, + null, + task.formatContext, + !1, + !1 + ); + resumedSegment.id = segmentId; + resumedSegment.parentFlushed = !0; + try { + (task.replay = null), + (task.blockedSegment = resumedSegment), + renderNode(request, task, node, childIndex), + (resumedSegment.status = 1), + finishedSegment(request, blockedBoundary, resumedSegment), + null === blockedBoundary + ? (request.completedRootSegment = resumedSegment) + : (queueCompletedSegment(blockedBoundary, resumedSegment), + blockedBoundary.parentFlushed && + request.partialBoundaries.push(blockedBoundary)); + } finally { + (task.replay = prevReplay), (task.blockedSegment = null); + } +} +function renderNodeDestructive(request, task, node, childIndex) { + null !== task.replay && "number" === typeof task.replay.slots + ? resumeNode(request, task, task.replay.slots, node, childIndex) + : ((task.node = node), + (task.childIndex = childIndex), + (node = task.componentStack), + pushComponentStack(task), + retryNode(request, task), + (task.componentStack = node)); +} +function retryNode(request, task) { + var node = task.node, + childIndex = task.childIndex; + if (null !== node) { + if ("object" === typeof node) { + switch (node.$$typeof) { + case REACT_ELEMENT_TYPE: + var type = node.type, + key = node.key, + props = node.props; + node = props.ref; + var ref = void 0 !== node ? node : null, + name = getComponentNameFromType(type), + keyOrIndex = + null == key ? (-1 === childIndex ? 0 : childIndex) : key; + key = [task.keyPath, name, keyOrIndex]; + if (null !== task.replay) + a: { + var replay = task.replay; + childIndex = replay.nodes; + for (node = 0; node < childIndex.length; node++) { + var node$jscomp$0 = childIndex[node]; + if (keyOrIndex === node$jscomp$0[1]) { + if (4 === node$jscomp$0.length) { + if (null !== name && name !== node$jscomp$0[0]) + throw Error( + "Expected the resume to render <" + + node$jscomp$0[0] + + "> in this slot but instead it rendered <" + + name + + ">. The tree doesn't match so React will fallback to client rendering." + ); + var childNodes = node$jscomp$0[2]; + name = node$jscomp$0[3]; + keyOrIndex = task.node; + task.replay = { + nodes: childNodes, + slots: name, + pendingTasks: 1 + }; + try { + renderElement(request, task, key, type, props, ref); + if ( + 1 === task.replay.pendingTasks && + 0 < task.replay.nodes.length + ) + throw Error( + "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering." + ); + task.replay.pendingTasks--; + } catch (x) { + if ( + "object" === typeof x && + null !== x && + (x === SuspenseException || + "function" === typeof x.then) + ) + throw ( + (task.node === keyOrIndex + ? (task.replay = replay) + : childIndex.splice(node, 1), + x) + ); + task.replay.pendingTasks--; + props = getThrownInfo(task.componentStack); + key = request; + request = task.blockedBoundary; + type = x; + props = logRecoverableError(key, type, props); + abortRemainingReplayNodes( + key, + request, + childNodes, + name, + type, + props + ); + } + task.replay = replay; + } else { + if (type !== REACT_SUSPENSE_TYPE) + throw Error( + "Expected the resume to render <Suspense> in this slot but instead it rendered <" + + (getComponentNameFromType(type) || "Unknown") + + ">. The tree doesn't match so React will fallback to client rendering." + ); + b: { + replay = void 0; + type = node$jscomp$0[5]; + ref = node$jscomp$0[2]; + name = node$jscomp$0[3]; + keyOrIndex = + null === node$jscomp$0[4] ? [] : node$jscomp$0[4][2]; + node$jscomp$0 = + null === node$jscomp$0[4] ? null : node$jscomp$0[4][3]; + var prevKeyPath = task.keyPath, + prevContext = task.formatContext, + prevRow = task.row, + previousReplaySet = task.replay, + parentBoundary = task.blockedBoundary, + parentHoistableState = task.hoistableState, + content = props.children, + fallback = props.fallback, + fallbackAbortSet = new Set(); + props = + 2 > task.formatContext.insertionMode + ? createSuspenseBoundary( + request, + task.row, + fallbackAbortSet, + createPreambleState(), + createPreambleState() + ) + : createSuspenseBoundary( + request, + task.row, + fallbackAbortSet, + null, + null + ); + props.parentFlushed = !0; + props.rootSegmentID = type; + task.blockedBoundary = props; + task.hoistableState = props.contentState; + task.keyPath = key; + task.formatContext = getSuspenseContentFormatContext( + request.resumableState, + prevContext + ); + task.row = null; + task.replay = { + nodes: ref, + slots: name, + pendingTasks: 1 + }; + try { + renderNode(request, task, content, -1); + if ( + 1 === task.replay.pendingTasks && + 0 < task.replay.nodes.length + ) + throw Error( + "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering." + ); + task.replay.pendingTasks--; + if (0 === props.pendingTasks && 0 === props.status) { + props.status = 1; + request.completedBoundaries.push(props); + break b; + } + } catch (error) { + (props.status = 4), + (childNodes = getThrownInfo(task.componentStack)), + (replay = logRecoverableError( + request, + error, + childNodes + )), + (props.errorDigest = replay), + task.replay.pendingTasks--, + request.clientRenderedBoundaries.push(props); + } finally { + (task.blockedBoundary = parentBoundary), + (task.hoistableState = parentHoistableState), + (task.replay = previousReplaySet), + (task.keyPath = prevKeyPath), + (task.formatContext = prevContext), + (task.row = prevRow); + } + childNodes = createReplayTask( + request, + null, + { + nodes: keyOrIndex, + slots: node$jscomp$0, + pendingTasks: 0 + }, + fallback, + -1, + parentBoundary, + props.fallbackState, + fallbackAbortSet, + [key[0], "Suspense Fallback", key[2]], + getSuspenseFallbackFormatContext( + request.resumableState, + task.formatContext + ), + task.context, + task.treeContext, + task.row, + replaceSuspenseComponentStackWithSuspenseFallbackStack( + task.componentStack + ) + ); + pushComponentStack(childNodes); + request.pingedTasks.push(childNodes); + } + } + childIndex.splice(node, 1); + break a; + } + } + } + else renderElement(request, task, key, type, props, ref); + return; + case REACT_PORTAL_TYPE: + throw Error( + "Portals are not currently supported by the server renderer. Render them conditionally so that they only appear on the client render." + ); + case REACT_LAZY_TYPE: + childNodes = node._init; + node = childNodes(node._payload); + if (12 === request.status) throw null; + renderNodeDestructive(request, task, node, childIndex); + return; + } + if (isArrayImpl(node)) { + renderChildrenArray(request, task, node, childIndex); + return; + } + if ((childNodes = getIteratorFn(node))) + if ((childNodes = childNodes.call(node))) { + node = childNodes.next(); + if (!node.done) { + props = []; + do props.push(node.value), (node = childNodes.next()); + while (!node.done); + renderChildrenArray(request, task, props, childIndex); + } + return; + } + if ("function" === typeof node.then) + return ( + (task.thenableState = null), + renderNodeDestructive(request, task, unwrapThenable(node), childIndex) + ); + if (node.$$typeof === REACT_CONTEXT_TYPE) + return renderNodeDestructive( + request, + task, + node._currentValue, + childIndex + ); + childIndex = Object.prototype.toString.call(node); + throw Error( + "Objects are not valid as a React child (found: " + + ("[object Object]" === childIndex + ? "object with keys {" + Object.keys(node).join(", ") + "}" + : childIndex) + + "). If you meant to render a collection of children, use an array instead." + ); + } + if ("string" === typeof node) + (childIndex = task.blockedSegment), + null !== childIndex && + (childIndex.lastPushedText = pushTextInstance( + childIndex.chunks, + node, + request.renderState, + childIndex.lastPushedText + )); + else if ("number" === typeof node || "bigint" === typeof node) + (childIndex = task.blockedSegment), + null !== childIndex && + (childIndex.lastPushedText = pushTextInstance( + childIndex.chunks, + "" + node, + request.renderState, + childIndex.lastPushedText + )); + } +} +function renderChildrenArray(request, task, children, childIndex) { + var prevKeyPath = task.keyPath; + if ( + -1 !== childIndex && + ((task.keyPath = [task.keyPath, "Fragment", childIndex]), + null !== task.replay) + ) { + for ( + var replay = task.replay, replayNodes = replay.nodes, j = 0; + j < replayNodes.length; + j++ + ) { + var node = replayNodes[j]; + if (node[1] === childIndex) { + childIndex = node[2]; + node = node[3]; + task.replay = { nodes: childIndex, slots: node, pendingTasks: 1 }; + try { + renderChildrenArray(request, task, children, -1); + if (1 === task.replay.pendingTasks && 0 < task.replay.nodes.length) + throw Error( + "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering." + ); + task.replay.pendingTasks--; + } catch (x) { + if ( + "object" === typeof x && + null !== x && + (x === SuspenseException || "function" === typeof x.then) + ) + throw x; + task.replay.pendingTasks--; + children = getThrownInfo(task.componentStack); + var boundary = task.blockedBoundary, + error = x; + children = logRecoverableError(request, error, children); + abortRemainingReplayNodes( + request, + boundary, + childIndex, + node, + error, + children + ); + } + task.replay = replay; + replayNodes.splice(j, 1); + break; + } + } + task.keyPath = prevKeyPath; + return; + } + replay = task.treeContext; + replayNodes = children.length; + if ( + null !== task.replay && + ((j = task.replay.slots), null !== j && "object" === typeof j) + ) { + for (childIndex = 0; childIndex < replayNodes; childIndex++) + (node = children[childIndex]), + (task.treeContext = pushTreeContext(replay, replayNodes, childIndex)), + (boundary = j[childIndex]), + "number" === typeof boundary + ? (resumeNode(request, task, boundary, node, childIndex), + delete j[childIndex]) + : renderNode(request, task, node, childIndex); + task.treeContext = replay; + task.keyPath = prevKeyPath; + return; + } + for (j = 0; j < replayNodes; j++) + (childIndex = children[j]), + (task.treeContext = pushTreeContext(replay, replayNodes, j)), + renderNode(request, task, childIndex, j); + task.treeContext = replay; + task.keyPath = prevKeyPath; +} +function trackPostponedBoundary(request, trackedPostpones, boundary) { + boundary.status = 5; + boundary.rootSegmentID = request.nextSegmentId++; + request = boundary.trackedContentKeyPath; + if (null === request) + throw Error( + "It should not be possible to postpone at the root. This is a bug in React." + ); + var fallbackReplayNode = boundary.trackedFallbackNode, + children = [], + boundaryNode = trackedPostpones.workingMap.get(request); + if (void 0 === boundaryNode) + return ( + (boundary = [ + request[1], + request[2], + children, + null, + fallbackReplayNode, + boundary.rootSegmentID + ]), + trackedPostpones.workingMap.set(request, boundary), + addToReplayParent(boundary, request[0], trackedPostpones), + boundary + ); + boundaryNode[4] = fallbackReplayNode; + boundaryNode[5] = boundary.rootSegmentID; + return boundaryNode; +} +function trackPostpone(request, trackedPostpones, task, segment) { + segment.status = 5; + var keyPath = task.keyPath, + boundary = task.blockedBoundary; + if (null === boundary) + (segment.id = request.nextSegmentId++), + (trackedPostpones.rootSlots = segment.id), + null !== request.completedRootSegment && + (request.completedRootSegment.status = 5); + else { + if (null !== boundary && 0 === boundary.status) { + var boundaryNode = trackPostponedBoundary( + request, + trackedPostpones, + boundary + ); + if ( + boundary.trackedContentKeyPath === keyPath && + -1 === task.childIndex + ) { + -1 === segment.id && + (segment.id = segment.parentFlushed + ? boundary.rootSegmentID + : request.nextSegmentId++); + boundaryNode[3] = segment.id; + return; + } + } + -1 === segment.id && + (segment.id = + segment.parentFlushed && null !== boundary + ? boundary.rootSegmentID + : request.nextSegmentId++); + if (-1 === task.childIndex) + null === keyPath + ? (trackedPostpones.rootSlots = segment.id) + : ((task = trackedPostpones.workingMap.get(keyPath)), + void 0 === task + ? ((task = [keyPath[1], keyPath[2], [], segment.id]), + addToReplayParent(task, keyPath[0], trackedPostpones)) + : (task[3] = segment.id)); + else { + if (null === keyPath) + if (((request = trackedPostpones.rootSlots), null === request)) + request = trackedPostpones.rootSlots = {}; + else { + if ("number" === typeof request) + throw Error( + "It should not be possible to postpone both at the root of an element as well as a slot below. This is a bug in React." + ); + } + else if ( + ((boundary = trackedPostpones.workingMap), + (boundaryNode = boundary.get(keyPath)), + void 0 === boundaryNode) + ) + (request = {}), + (boundaryNode = [keyPath[1], keyPath[2], [], request]), + boundary.set(keyPath, boundaryNode), + addToReplayParent(boundaryNode, keyPath[0], trackedPostpones); + else if (((request = boundaryNode[3]), null === request)) + request = boundaryNode[3] = {}; + else if ("number" === typeof request) + throw Error( + "It should not be possible to postpone both at the root of an element as well as a slot below. This is a bug in React." + ); + request[task.childIndex] = segment.id; + } + } +} +function untrackBoundary(request, boundary) { + request = request.trackedPostpones; + null !== request && + ((boundary = boundary.trackedContentKeyPath), + null !== boundary && + ((boundary = request.workingMap.get(boundary)), + void 0 !== boundary && + ((boundary.length = 4), (boundary[2] = []), (boundary[3] = null)))); +} +function spawnNewSuspendedReplayTask(request, task, thenableState) { + return createReplayTask( + request, + thenableState, + task.replay, + task.node, + task.childIndex, + task.blockedBoundary, + task.hoistableState, + task.abortSet, + task.keyPath, + task.formatContext, + task.context, + task.treeContext, + task.row, + task.componentStack + ); +} +function spawnNewSuspendedRenderTask(request, task, thenableState) { + var segment = task.blockedSegment, + newSegment = createPendingSegment( + request, + segment.chunks.length, + null, + task.formatContext, + segment.lastPushedText, + !0 + ); + segment.children.push(newSegment); + segment.lastPushedText = !1; + return createRenderTask( + request, + thenableState, + task.node, + task.childIndex, + task.blockedBoundary, + newSegment, + task.blockedPreamble, + task.hoistableState, + task.abortSet, + task.keyPath, + task.formatContext, + task.context, + task.treeContext, + task.row, + task.componentStack + ); +} +function renderNode(request, task, node, childIndex) { + var previousFormatContext = task.formatContext, + previousContext = task.context, + previousKeyPath = task.keyPath, + previousTreeContext = task.treeContext, + previousComponentStack = task.componentStack, + segment = task.blockedSegment; + if (null === segment) { + segment = task.replay; + try { + return renderNodeDestructive(request, task, node, childIndex); + } catch (thrownValue) { + if ( + (resetHooksState(), + (node = + thrownValue === SuspenseException + ? getSuspendedThenable() + : thrownValue), + 12 !== request.status && "object" === typeof node && null !== node) + ) { + if ("function" === typeof node.then) { + childIndex = + thrownValue === SuspenseException + ? getThenableStateAfterSuspending() + : null; + request = spawnNewSuspendedReplayTask(request, task, childIndex).ping; + node.then(request, request); + task.formatContext = previousFormatContext; + task.context = previousContext; + task.keyPath = previousKeyPath; + task.treeContext = previousTreeContext; + task.componentStack = previousComponentStack; + task.replay = segment; + switchContext(previousContext); + return; + } + if ("Maximum call stack size exceeded" === node.message) { + node = + thrownValue === SuspenseException + ? getThenableStateAfterSuspending() + : null; + node = spawnNewSuspendedReplayTask(request, task, node); + request.pingedTasks.push(node); + task.formatContext = previousFormatContext; + task.context = previousContext; + task.keyPath = previousKeyPath; + task.treeContext = previousTreeContext; + task.componentStack = previousComponentStack; + task.replay = segment; + switchContext(previousContext); + return; + } + } + } + } else { + var childrenLength = segment.children.length, + chunkLength = segment.chunks.length; + try { + return renderNodeDestructive(request, task, node, childIndex); + } catch (thrownValue$63) { + if ( + (resetHooksState(), + (segment.children.length = childrenLength), + (segment.chunks.length = chunkLength), + (node = + thrownValue$63 === SuspenseException + ? getSuspendedThenable() + : thrownValue$63), + 12 !== request.status && "object" === typeof node && null !== node) + ) { + if ("function" === typeof node.then) { + segment = node; + node = + thrownValue$63 === SuspenseException + ? getThenableStateAfterSuspending() + : null; + request = spawnNewSuspendedRenderTask(request, task, node).ping; + segment.then(request, request); + task.formatContext = previousFormatContext; + task.context = previousContext; + task.keyPath = previousKeyPath; + task.treeContext = previousTreeContext; + task.componentStack = previousComponentStack; + switchContext(previousContext); + return; + } + if ("Maximum call stack size exceeded" === node.message) { + segment = + thrownValue$63 === SuspenseException + ? getThenableStateAfterSuspending() + : null; + segment = spawnNewSuspendedRenderTask(request, task, segment); + request.pingedTasks.push(segment); + task.formatContext = previousFormatContext; + task.context = previousContext; + task.keyPath = previousKeyPath; + task.treeContext = previousTreeContext; + task.componentStack = previousComponentStack; + switchContext(previousContext); + return; + } + } + } + } + task.formatContext = previousFormatContext; + task.context = previousContext; + task.keyPath = previousKeyPath; + task.treeContext = previousTreeContext; + switchContext(previousContext); + throw node; +} +function abortTaskSoft(task) { + var boundary = task.blockedBoundary, + segment = task.blockedSegment; + null !== segment && + ((segment.status = 3), finishedTask(this, boundary, task.row, segment)); +} +function abortRemainingReplayNodes( + request$jscomp$0, + boundary, + nodes, + slots, + error, + errorDigest$jscomp$0 +) { + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + if (4 === node.length) + abortRemainingReplayNodes( + request$jscomp$0, + boundary, + node[2], + node[3], + error, + errorDigest$jscomp$0 + ); + else { + node = node[5]; + var request = request$jscomp$0, + errorDigest = errorDigest$jscomp$0, + resumedBoundary = createSuspenseBoundary( + request, + null, + new Set(), + null, + null + ); + resumedBoundary.parentFlushed = !0; + resumedBoundary.rootSegmentID = node; + resumedBoundary.status = 4; + resumedBoundary.errorDigest = errorDigest; + resumedBoundary.parentFlushed && + request.clientRenderedBoundaries.push(resumedBoundary); + } + } + nodes.length = 0; + if (null !== slots) { + if (null === boundary) + throw Error( + "We should not have any resumable nodes in the shell. This is a bug in React." + ); + 4 !== boundary.status && + ((boundary.status = 4), + (boundary.errorDigest = errorDigest$jscomp$0), + boundary.parentFlushed && + request$jscomp$0.clientRenderedBoundaries.push(boundary)); + if ("object" === typeof slots) for (var index in slots) delete slots[index]; + } +} +function abortTask(task, request, error) { + var boundary = task.blockedBoundary, + segment = task.blockedSegment; + if (null !== segment) { + if (6 === segment.status) return; + segment.status = 3; + } + var errorInfo = getThrownInfo(task.componentStack); + if (null === boundary) { + if (13 !== request.status && 14 !== request.status) { + boundary = task.replay; + if (null === boundary) { + null !== request.trackedPostpones && null !== segment + ? ((boundary = request.trackedPostpones), + logRecoverableError(request, error, errorInfo), + trackPostpone(request, boundary, task, segment), + finishedTask(request, null, task.row, segment)) + : (logRecoverableError(request, error, errorInfo), + fatalError(request, error)); + return; + } + boundary.pendingTasks--; + 0 === boundary.pendingTasks && + 0 < boundary.nodes.length && + ((segment = logRecoverableError(request, error, errorInfo)), + abortRemainingReplayNodes( + request, + null, + boundary.nodes, + boundary.slots, + error, + segment + )); + request.pendingRootTasks--; + 0 === request.pendingRootTasks && completeShell(request); + } + } else { + var trackedPostpones$64 = request.trackedPostpones; + if (4 !== boundary.status) { + if (null !== trackedPostpones$64 && null !== segment) + return ( + logRecoverableError(request, error, errorInfo), + trackPostpone(request, trackedPostpones$64, task, segment), + boundary.fallbackAbortableTasks.forEach(function (fallbackTask) { + return abortTask(fallbackTask, request, error); + }), + boundary.fallbackAbortableTasks.clear(), + finishedTask(request, boundary, task.row, segment) + ); + boundary.status = 4; + segment = logRecoverableError(request, error, errorInfo); + boundary.status = 4; + boundary.errorDigest = segment; + untrackBoundary(request, boundary); + boundary.parentFlushed && request.clientRenderedBoundaries.push(boundary); + } + boundary.pendingTasks--; + segment = boundary.row; + null !== segment && + 0 === --segment.pendingTasks && + finishSuspenseListRow(request, segment); + boundary.fallbackAbortableTasks.forEach(function (fallbackTask) { + return abortTask(fallbackTask, request, error); + }); + boundary.fallbackAbortableTasks.clear(); + } + task = task.row; + null !== task && + 0 === --task.pendingTasks && + finishSuspenseListRow(request, task); + request.allPendingTasks--; + 0 === request.allPendingTasks && completeAll(request); +} +function safelyEmitEarlyPreloads(request, shellComplete) { + try { + var renderState = request.renderState, + onHeaders = renderState.onHeaders; + if (onHeaders) { + var headers = renderState.headers; + if (headers) { + renderState.headers = null; + var linkHeader = headers.preconnects; + headers.fontPreloads && + (linkHeader && (linkHeader += ", "), + (linkHeader += headers.fontPreloads)); + headers.highImagePreloads && + (linkHeader && (linkHeader += ", "), + (linkHeader += headers.highImagePreloads)); + if (!shellComplete) { + var queueIter = renderState.styles.values(), + queueStep = queueIter.next(); + b: for ( + ; + 0 < headers.remainingCapacity && !queueStep.done; + queueStep = queueIter.next() + ) + for ( + var sheetIter = queueStep.value.sheets.values(), + sheetStep = sheetIter.next(); + 0 < headers.remainingCapacity && !sheetStep.done; + sheetStep = sheetIter.next() + ) { + var sheet = sheetStep.value, + props = sheet.props, + key = props.href, + props$jscomp$0 = sheet.props, + header = getPreloadAsHeader(props$jscomp$0.href, "style", { + crossOrigin: props$jscomp$0.crossOrigin, + integrity: props$jscomp$0.integrity, + nonce: props$jscomp$0.nonce, + type: props$jscomp$0.type, + fetchPriority: props$jscomp$0.fetchPriority, + referrerPolicy: props$jscomp$0.referrerPolicy, + media: props$jscomp$0.media + }); + if (0 <= (headers.remainingCapacity -= header.length + 2)) + (renderState.resets.style[key] = PRELOAD_NO_CREDS), + linkHeader && (linkHeader += ", "), + (linkHeader += header), + (renderState.resets.style[key] = + "string" === typeof props.crossOrigin || + "string" === typeof props.integrity + ? [props.crossOrigin, props.integrity] + : PRELOAD_NO_CREDS); + else break b; + } + } + linkHeader ? onHeaders({ Link: linkHeader }) : onHeaders({}); + } + } + } catch (error) { + logRecoverableError(request, error, {}); + } +} +function completeShell(request) { + null === request.trackedPostpones && safelyEmitEarlyPreloads(request, !0); + null === request.trackedPostpones && preparePreamble(request); + request.onShellError = noop; + request = request.onShellReady; + request(); +} +function completeAll(request) { + safelyEmitEarlyPreloads( + request, + null === request.trackedPostpones + ? !0 + : null === request.completedRootSegment || + 5 !== request.completedRootSegment.status + ); + preparePreamble(request); + request = request.onAllReady; + request(); +} +function queueCompletedSegment(boundary, segment) { + if ( + 0 === segment.chunks.length && + 1 === segment.children.length && + null === segment.children[0].boundary && + -1 === segment.children[0].id + ) { + var childSegment = segment.children[0]; + childSegment.id = segment.id; + childSegment.parentFlushed = !0; + (1 !== childSegment.status && + 3 !== childSegment.status && + 4 !== childSegment.status) || + queueCompletedSegment(boundary, childSegment); + } else boundary.completedSegments.push(segment); +} +function finishedSegment(request, boundary, segment) { + if (null !== byteLengthOfChunk) { + segment = segment.chunks; + for (var segmentByteSize = 0, i = 0; i < segment.length; i++) + segmentByteSize += byteLengthOfChunk(segment[i]); + null === boundary + ? (request.byteSize += segmentByteSize) + : (boundary.byteSize += segmentByteSize); + } +} +function finishedTask(request, boundary, row, segment) { + null !== row && + (0 === --row.pendingTasks + ? finishSuspenseListRow(request, row) + : row.together && tryToResolveTogetherRow(request, row)); + request.allPendingTasks--; + if (null === boundary) { + if (null !== segment && segment.parentFlushed) { + if (null !== request.completedRootSegment) + throw Error( + "There can only be one root segment. This is a bug in React." + ); + request.completedRootSegment = segment; + } + request.pendingRootTasks--; + 0 === request.pendingRootTasks && completeShell(request); + } else if ((boundary.pendingTasks--, 4 !== boundary.status)) + if (0 === boundary.pendingTasks) + if ( + (0 === boundary.status && (boundary.status = 1), + null !== segment && + segment.parentFlushed && + (1 === segment.status || 3 === segment.status) && + queueCompletedSegment(boundary, segment), + boundary.parentFlushed && request.completedBoundaries.push(boundary), + 1 === boundary.status) + ) + (row = boundary.row), + null !== row && + hoistHoistables(row.hoistables, boundary.contentState), + isEligibleForOutlining(request, boundary) || + (boundary.fallbackAbortableTasks.forEach(abortTaskSoft, request), + boundary.fallbackAbortableTasks.clear(), + null !== row && + 0 === --row.pendingTasks && + finishSuspenseListRow(request, row)), + 0 === request.pendingRootTasks && + null === request.trackedPostpones && + null !== boundary.contentPreamble && + preparePreamble(request); + else { + if ( + 5 === boundary.status && + ((boundary = boundary.row), null !== boundary) + ) { + if (null !== request.trackedPostpones) { + row = request.trackedPostpones; + var postponedRow = boundary.next; + if ( + null !== postponedRow && + ((segment = postponedRow.boundaries), null !== segment) + ) + for ( + postponedRow.boundaries = null, postponedRow = 0; + postponedRow < segment.length; + postponedRow++ + ) { + var postponedBoundary = segment[postponedRow]; + trackPostponedBoundary(request, row, postponedBoundary); + finishedTask(request, postponedBoundary, null, null); + } + } + 0 === --boundary.pendingTasks && + finishSuspenseListRow(request, boundary); + } + } + else + null === segment || + !segment.parentFlushed || + (1 !== segment.status && 3 !== segment.status) || + (queueCompletedSegment(boundary, segment), + 1 === boundary.completedSegments.length && + boundary.parentFlushed && + request.partialBoundaries.push(boundary)), + (boundary = boundary.row), + null !== boundary && + boundary.together && + tryToResolveTogetherRow(request, boundary); + 0 === request.allPendingTasks && completeAll(request); +} +function performWork(request$jscomp$2) { + if (14 !== request$jscomp$2.status && 13 !== request$jscomp$2.status) { + var prevContext = currentActiveSnapshot, + prevDispatcher = ReactSharedInternals.H; + ReactSharedInternals.H = HooksDispatcher; + var prevAsyncDispatcher = ReactSharedInternals.A; + ReactSharedInternals.A = DefaultAsyncDispatcher; + var prevRequest = currentRequest; + currentRequest = request$jscomp$2; + var prevResumableState = currentResumableState; + currentResumableState = request$jscomp$2.resumableState; + try { + var pingedTasks = request$jscomp$2.pingedTasks, + i; + for (i = 0; i < pingedTasks.length; i++) { + var task = pingedTasks[i], + request = request$jscomp$2, + segment = task.blockedSegment; + if (null === segment) { + var request$jscomp$0 = request; + if (0 !== task.replay.pendingTasks) { + switchContext(task.context); + try { + "number" === typeof task.replay.slots + ? resumeNode( + request$jscomp$0, + task, + task.replay.slots, + task.node, + task.childIndex + ) + : retryNode(request$jscomp$0, task); + if ( + 1 === task.replay.pendingTasks && + 0 < task.replay.nodes.length + ) + throw Error( + "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering." + ); + task.replay.pendingTasks--; + task.abortSet.delete(task); + finishedTask( + request$jscomp$0, + task.blockedBoundary, + task.row, + null + ); + } catch (thrownValue) { + resetHooksState(); + var x = + thrownValue === SuspenseException + ? getSuspendedThenable() + : thrownValue; + if ( + "object" === typeof x && + null !== x && + "function" === typeof x.then + ) { + var ping = task.ping; + x.then(ping, ping); + task.thenableState = + thrownValue === SuspenseException + ? getThenableStateAfterSuspending() + : null; + } else { + task.replay.pendingTasks--; + task.abortSet.delete(task); + var errorInfo = getThrownInfo(task.componentStack); + request = void 0; + var request$jscomp$1 = request$jscomp$0, + boundary = task.blockedBoundary, + error$jscomp$0 = + 12 === request$jscomp$0.status + ? request$jscomp$0.fatalError + : x, + replayNodes = task.replay.nodes, + resumeSlots = task.replay.slots; + request = logRecoverableError( + request$jscomp$1, + error$jscomp$0, + errorInfo + ); + abortRemainingReplayNodes( + request$jscomp$1, + boundary, + replayNodes, + resumeSlots, + error$jscomp$0, + request + ); + request$jscomp$0.pendingRootTasks--; + 0 === request$jscomp$0.pendingRootTasks && + completeShell(request$jscomp$0); + request$jscomp$0.allPendingTasks--; + 0 === request$jscomp$0.allPendingTasks && + completeAll(request$jscomp$0); + } + } finally { + } + } + } else if ( + ((request$jscomp$0 = void 0), + (request$jscomp$1 = segment), + 0 === request$jscomp$1.status) + ) { + request$jscomp$1.status = 6; + switchContext(task.context); + var childrenLength = request$jscomp$1.children.length, + chunkLength = request$jscomp$1.chunks.length; + try { + retryNode(request, task), + request$jscomp$1.lastPushedText && + request$jscomp$1.textEmbedded && + request$jscomp$1.chunks.push(textSeparator), + task.abortSet.delete(task), + (request$jscomp$1.status = 1), + finishedSegment(request, task.blockedBoundary, request$jscomp$1), + finishedTask( + request, + task.blockedBoundary, + task.row, + request$jscomp$1 + ); + } catch (thrownValue) { + resetHooksState(); + request$jscomp$1.children.length = childrenLength; + request$jscomp$1.chunks.length = chunkLength; + var x$jscomp$0 = + thrownValue === SuspenseException + ? getSuspendedThenable() + : 12 === request.status + ? request.fatalError + : thrownValue; + if (12 === request.status && null !== request.trackedPostpones) { + var trackedPostpones = request.trackedPostpones, + thrownInfo = getThrownInfo(task.componentStack); + task.abortSet.delete(task); + logRecoverableError(request, x$jscomp$0, thrownInfo); + trackPostpone(request, trackedPostpones, task, request$jscomp$1); + finishedTask( + request, + task.blockedBoundary, + task.row, + request$jscomp$1 + ); + } else if ( + "object" === typeof x$jscomp$0 && + null !== x$jscomp$0 && + "function" === typeof x$jscomp$0.then + ) { + request$jscomp$1.status = 0; + task.thenableState = + thrownValue === SuspenseException + ? getThenableStateAfterSuspending() + : null; + var ping$jscomp$0 = task.ping; + x$jscomp$0.then(ping$jscomp$0, ping$jscomp$0); + } else { + var errorInfo$jscomp$0 = getThrownInfo(task.componentStack); + task.abortSet.delete(task); + request$jscomp$1.status = 4; + var boundary$jscomp$0 = task.blockedBoundary, + row = task.row; + null !== row && + 0 === --row.pendingTasks && + finishSuspenseListRow(request, row); + request.allPendingTasks--; + request$jscomp$0 = logRecoverableError( + request, + x$jscomp$0, + errorInfo$jscomp$0 + ); + if (null === boundary$jscomp$0) fatalError(request, x$jscomp$0); + else if ( + (boundary$jscomp$0.pendingTasks--, + 4 !== boundary$jscomp$0.status) + ) { + boundary$jscomp$0.status = 4; + boundary$jscomp$0.errorDigest = request$jscomp$0; + untrackBoundary(request, boundary$jscomp$0); + var boundaryRow = boundary$jscomp$0.row; + null !== boundaryRow && + 0 === --boundaryRow.pendingTasks && + finishSuspenseListRow(request, boundaryRow); + boundary$jscomp$0.parentFlushed && + request.clientRenderedBoundaries.push(boundary$jscomp$0); + 0 === request.pendingRootTasks && + null === request.trackedPostpones && + null !== boundary$jscomp$0.contentPreamble && + preparePreamble(request); + } + 0 === request.allPendingTasks && completeAll(request); + } + } finally { + } + } + } + pingedTasks.splice(0, i); + null !== request$jscomp$2.destination && + flushCompletedQueues(request$jscomp$2, request$jscomp$2.destination); + } catch (error) { + logRecoverableError(request$jscomp$2, error, {}), + fatalError(request$jscomp$2, error); + } finally { + (currentResumableState = prevResumableState), + (ReactSharedInternals.H = prevDispatcher), + (ReactSharedInternals.A = prevAsyncDispatcher), + prevDispatcher === HooksDispatcher && switchContext(prevContext), + (currentRequest = prevRequest); + } + } +} +function preparePreambleFromSubtree( + request, + segment, + collectedPreambleSegments +) { + segment.preambleChildren.length && + collectedPreambleSegments.push(segment.preambleChildren); + for (var pendingPreambles = !1, i = 0; i < segment.children.length; i++) + pendingPreambles = + preparePreambleFromSegment( + request, + segment.children[i], + collectedPreambleSegments + ) || pendingPreambles; + return pendingPreambles; +} +function preparePreambleFromSegment( + request, + segment, + collectedPreambleSegments +) { + var boundary = segment.boundary; + if (null === boundary) + return preparePreambleFromSubtree( + request, + segment, + collectedPreambleSegments + ); + var preamble = boundary.contentPreamble, + fallbackPreamble = boundary.fallbackPreamble; + if (null === preamble || null === fallbackPreamble) return !1; + switch (boundary.status) { + case 1: + hoistPreambleState(request.renderState, preamble); + request.byteSize += boundary.byteSize; + segment = boundary.completedSegments[0]; + if (!segment) + throw Error( + "A previously unvisited boundary must have exactly one root segment. This is a bug in React." + ); + return preparePreambleFromSubtree( + request, + segment, + collectedPreambleSegments + ); + case 5: + if (null !== request.trackedPostpones) return !0; + case 4: + if (1 === segment.status) + return ( + hoistPreambleState(request.renderState, fallbackPreamble), + preparePreambleFromSubtree( + request, + segment, + collectedPreambleSegments + ) + ); + default: + return !0; + } +} +function preparePreamble(request) { + if ( + request.completedRootSegment && + null === request.completedPreambleSegments + ) { + var collectedPreambleSegments = [], + originalRequestByteSize = request.byteSize, + hasPendingPreambles = preparePreambleFromSegment( + request, + request.completedRootSegment, + collectedPreambleSegments + ), + preamble = request.renderState.preamble; + !1 === hasPendingPreambles || (preamble.headChunks && preamble.bodyChunks) + ? (request.completedPreambleSegments = collectedPreambleSegments) + : (request.byteSize = originalRequestByteSize); + } +} +function flushSubtree(request, destination, segment, hoistableState) { + segment.parentFlushed = !0; + switch (segment.status) { + case 0: + segment.id = request.nextSegmentId++; + case 5: + return ( + (hoistableState = segment.id), + (segment.lastPushedText = !1), + (segment.textEmbedded = !1), + (request = request.renderState), + writeChunk(destination, placeholder1), + writeChunk(destination, request.placeholderPrefix), + (request = hoistableState.toString(16)), + writeChunk(destination, request), + writeChunkAndReturn(destination, placeholder2) + ); + case 1: + segment.status = 2; + var r = !0, + chunks = segment.chunks, + chunkIdx = 0; + segment = segment.children; + for (var childIdx = 0; childIdx < segment.length; childIdx++) { + for (r = segment[childIdx]; chunkIdx < r.index; chunkIdx++) + writeChunk(destination, chunks[chunkIdx]); + r = flushSegment(request, destination, r, hoistableState); + } + for (; chunkIdx < chunks.length - 1; chunkIdx++) + writeChunk(destination, chunks[chunkIdx]); + chunkIdx < chunks.length && + (r = writeChunkAndReturn(destination, chunks[chunkIdx])); + return r; + case 3: + return !0; + default: + throw Error( + "Aborted, errored or already flushed boundaries should not be flushed again. This is a bug in React." + ); + } +} +var flushedByteSize = 0; +function flushSegment(request, destination, segment, hoistableState) { + var boundary = segment.boundary; + if (null === boundary) + return flushSubtree(request, destination, segment, hoistableState); + boundary.parentFlushed = !0; + if (4 === boundary.status) { + var row = boundary.row; + null !== row && + 0 === --row.pendingTasks && + finishSuspenseListRow(request, row); + boundary = boundary.errorDigest; + writeChunkAndReturn(destination, startClientRenderedSuspenseBoundary); + writeChunk(destination, clientRenderedSuspenseBoundaryError1); + boundary && + (writeChunk(destination, clientRenderedSuspenseBoundaryError1A), + writeChunk(destination, escapeTextForBrowser(boundary)), + writeChunk( + destination, + clientRenderedSuspenseBoundaryErrorAttrInterstitial + )); + writeChunkAndReturn(destination, clientRenderedSuspenseBoundaryError2); + flushSubtree(request, destination, segment, hoistableState); + } else if (1 !== boundary.status) + 0 === boundary.status && (boundary.rootSegmentID = request.nextSegmentId++), + 0 < boundary.completedSegments.length && + request.partialBoundaries.push(boundary), + writeStartPendingSuspenseBoundary( + destination, + request.renderState, + boundary.rootSegmentID + ), + hoistableState && hoistHoistables(hoistableState, boundary.fallbackState), + flushSubtree(request, destination, segment, hoistableState); + else if ( + !flushingPartialBoundaries && + isEligibleForOutlining(request, boundary) && + (flushedByteSize + boundary.byteSize > request.progressiveChunkSize || + hasSuspenseyContent(boundary.contentState)) + ) + (boundary.rootSegmentID = request.nextSegmentId++), + request.completedBoundaries.push(boundary), + writeStartPendingSuspenseBoundary( + destination, + request.renderState, + boundary.rootSegmentID + ), + flushSubtree(request, destination, segment, hoistableState); + else { + flushedByteSize += boundary.byteSize; + hoistableState && hoistHoistables(hoistableState, boundary.contentState); + segment = boundary.row; + null !== segment && + isEligibleForOutlining(request, boundary) && + 0 === --segment.pendingTasks && + finishSuspenseListRow(request, segment); + writeChunkAndReturn(destination, startCompletedSuspenseBoundary); + segment = boundary.completedSegments; + if (1 !== segment.length) + throw Error( + "A previously unvisited boundary must have exactly one root segment. This is a bug in React." + ); + flushSegment(request, destination, segment[0], hoistableState); + } + return writeChunkAndReturn(destination, endSuspenseBoundary); +} +function flushSegmentContainer(request, destination, segment, hoistableState) { + writeStartSegment( + destination, + request.renderState, + segment.parentFormatContext, + segment.id + ); + flushSegment(request, destination, segment, hoistableState); + return writeEndSegment(destination, segment.parentFormatContext); +} +function flushCompletedBoundary(request, destination, boundary) { + flushedByteSize = boundary.byteSize; + for ( + var completedSegments = boundary.completedSegments, i = 0; + i < completedSegments.length; + i++ + ) + flushPartiallyCompletedSegment( + request, + destination, + boundary, + completedSegments[i] + ); + completedSegments.length = 0; + completedSegments = boundary.row; + null !== completedSegments && + isEligibleForOutlining(request, boundary) && + 0 === --completedSegments.pendingTasks && + finishSuspenseListRow(request, completedSegments); + writeHoistablesForBoundary( + destination, + boundary.contentState, + request.renderState + ); + completedSegments = request.resumableState; + request = request.renderState; + i = boundary.rootSegmentID; + boundary = boundary.contentState; + var requiresStyleInsertion = request.stylesToHoist; + request.stylesToHoist = !1; + writeChunk(destination, request.startInlineScript); + writeChunk(destination, endOfStartTag); + requiresStyleInsertion + ? (0 === (completedSegments.instructions & 4) && + ((completedSegments.instructions |= 4), + writeChunk(destination, clientRenderScriptFunctionOnly)), + 0 === (completedSegments.instructions & 2) && + ((completedSegments.instructions |= 2), + writeChunk(destination, completeBoundaryScriptFunctionOnly)), + 0 === (completedSegments.instructions & 8) + ? ((completedSegments.instructions |= 8), + writeChunk(destination, completeBoundaryWithStylesScript1FullPartial)) + : writeChunk(destination, completeBoundaryWithStylesScript1Partial)) + : (0 === (completedSegments.instructions & 2) && + ((completedSegments.instructions |= 2), + writeChunk(destination, completeBoundaryScriptFunctionOnly)), + writeChunk(destination, completeBoundaryScript1Partial)); + completedSegments = i.toString(16); + writeChunk(destination, request.boundaryPrefix); + writeChunk(destination, completedSegments); + writeChunk(destination, completeBoundaryScript2); + writeChunk(destination, request.segmentPrefix); + writeChunk(destination, completedSegments); + requiresStyleInsertion + ? (writeChunk(destination, completeBoundaryScript3a), + writeStyleResourceDependenciesInJS(destination, boundary)) + : writeChunk(destination, completeBoundaryScript3b); + boundary = writeChunkAndReturn(destination, completeBoundaryScriptEnd); + return writeBootstrap(destination, request) && boundary; +} +function flushPartiallyCompletedSegment( + request, + destination, + boundary, + segment +) { + if (2 === segment.status) return !0; + var hoistableState = boundary.contentState, + segmentID = segment.id; + if (-1 === segmentID) { + if (-1 === (segment.id = boundary.rootSegmentID)) + throw Error( + "A root segment ID must have been assigned by now. This is a bug in React." + ); + return flushSegmentContainer(request, destination, segment, hoistableState); + } + if (segmentID === boundary.rootSegmentID) + return flushSegmentContainer(request, destination, segment, hoistableState); + flushSegmentContainer(request, destination, segment, hoistableState); + boundary = request.resumableState; + request = request.renderState; + writeChunk(destination, request.startInlineScript); + writeChunk(destination, endOfStartTag); + 0 === (boundary.instructions & 1) + ? ((boundary.instructions |= 1), + writeChunk(destination, completeSegmentScript1Full)) + : writeChunk(destination, completeSegmentScript1Partial); + writeChunk(destination, request.segmentPrefix); + segmentID = segmentID.toString(16); + writeChunk(destination, segmentID); + writeChunk(destination, completeSegmentScript2); + writeChunk(destination, request.placeholderPrefix); + writeChunk(destination, segmentID); + destination = writeChunkAndReturn(destination, completeSegmentScriptEnd); + return destination; +} +var flushingPartialBoundaries = !1; +function flushCompletedQueues(request, destination) { + currentView = new Uint8Array(2048); + writtenBytes = 0; + destinationHasCapacity$1 = !0; + try { + if (!(0 < request.pendingRootTasks)) { + var i, + completedRootSegment = request.completedRootSegment; + if (null !== completedRootSegment) { + if (5 === completedRootSegment.status) return; + var completedPreambleSegments = request.completedPreambleSegments; + if (null === completedPreambleSegments) return; + flushedByteSize = request.byteSize; + var resumableState = request.resumableState, + renderState = request.renderState, + preamble = renderState.preamble, + htmlChunks = preamble.htmlChunks, + headChunks = preamble.headChunks, + i$jscomp$0; + if (htmlChunks) { + for (i$jscomp$0 = 0; i$jscomp$0 < htmlChunks.length; i$jscomp$0++) + writeChunk(destination, htmlChunks[i$jscomp$0]); + if (headChunks) + for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++) + writeChunk(destination, headChunks[i$jscomp$0]); + else + writeChunk(destination, startChunkForTag("head")), + writeChunk(destination, endOfStartTag); + } else if (headChunks) + for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++) + writeChunk(destination, headChunks[i$jscomp$0]); + var charsetChunks = renderState.charsetChunks; + for (i$jscomp$0 = 0; i$jscomp$0 < charsetChunks.length; i$jscomp$0++) + writeChunk(destination, charsetChunks[i$jscomp$0]); + charsetChunks.length = 0; + renderState.preconnects.forEach(flushResource, destination); + renderState.preconnects.clear(); + var viewportChunks = renderState.viewportChunks; + for (i$jscomp$0 = 0; i$jscomp$0 < viewportChunks.length; i$jscomp$0++) + writeChunk(destination, viewportChunks[i$jscomp$0]); + viewportChunks.length = 0; + renderState.fontPreloads.forEach(flushResource, destination); + renderState.fontPreloads.clear(); + renderState.highImagePreloads.forEach(flushResource, destination); + renderState.highImagePreloads.clear(); + currentlyFlushingRenderState = renderState; + renderState.styles.forEach(flushStylesInPreamble, destination); + currentlyFlushingRenderState = null; + var importMapChunks = renderState.importMapChunks; + for (i$jscomp$0 = 0; i$jscomp$0 < importMapChunks.length; i$jscomp$0++) + writeChunk(destination, importMapChunks[i$jscomp$0]); + importMapChunks.length = 0; + renderState.bootstrapScripts.forEach(flushResource, destination); + renderState.scripts.forEach(flushResource, destination); + renderState.scripts.clear(); + renderState.bulkPreloads.forEach(flushResource, destination); + renderState.bulkPreloads.clear(); + htmlChunks || headChunks || (resumableState.instructions |= 32); + var hoistableChunks = renderState.hoistableChunks; + for (i$jscomp$0 = 0; i$jscomp$0 < hoistableChunks.length; i$jscomp$0++) + writeChunk(destination, hoistableChunks[i$jscomp$0]); + for ( + resumableState = hoistableChunks.length = 0; + resumableState < completedPreambleSegments.length; + resumableState++ + ) { + var segments = completedPreambleSegments[resumableState]; + for (renderState = 0; renderState < segments.length; renderState++) + flushSegment(request, destination, segments[renderState], null); + } + var preamble$jscomp$0 = request.renderState.preamble, + headChunks$jscomp$0 = preamble$jscomp$0.headChunks; + (preamble$jscomp$0.htmlChunks || headChunks$jscomp$0) && + writeChunk(destination, endChunkForTag("head")); + var bodyChunks = preamble$jscomp$0.bodyChunks; + if (bodyChunks) + for ( + completedPreambleSegments = 0; + completedPreambleSegments < bodyChunks.length; + completedPreambleSegments++ + ) + writeChunk(destination, bodyChunks[completedPreambleSegments]); + flushSegment(request, destination, completedRootSegment, null); + request.completedRootSegment = null; + var renderState$jscomp$0 = request.renderState; + if ( + 0 !== request.allPendingTasks || + 0 !== request.clientRenderedBoundaries.length || + 0 !== request.completedBoundaries.length || + (null !== request.trackedPostpones && + (0 !== request.trackedPostpones.rootNodes.length || + null !== request.trackedPostpones.rootSlots)) + ) { + var resumableState$jscomp$0 = request.resumableState; + if (0 === (resumableState$jscomp$0.instructions & 64)) { + resumableState$jscomp$0.instructions |= 64; + writeChunk(destination, renderState$jscomp$0.startInlineScript); + if (0 === (resumableState$jscomp$0.instructions & 32)) { + resumableState$jscomp$0.instructions |= 32; + var shellId = "_" + resumableState$jscomp$0.idPrefix + "R_"; + writeChunk(destination, completedShellIdAttributeStart); + writeChunk(destination, escapeTextForBrowser(shellId)); + writeChunk(destination, attributeEnd); + } + writeChunk(destination, endOfStartTag); + writeChunk(destination, shellTimeRuntimeScript); + writeChunkAndReturn(destination, endInlineScript); + } + } + writeBootstrap(destination, renderState$jscomp$0); + } + var renderState$jscomp$1 = request.renderState; + completedRootSegment = 0; + var viewportChunks$jscomp$0 = renderState$jscomp$1.viewportChunks; + for ( + completedRootSegment = 0; + completedRootSegment < viewportChunks$jscomp$0.length; + completedRootSegment++ + ) + writeChunk(destination, viewportChunks$jscomp$0[completedRootSegment]); + viewportChunks$jscomp$0.length = 0; + renderState$jscomp$1.preconnects.forEach(flushResource, destination); + renderState$jscomp$1.preconnects.clear(); + renderState$jscomp$1.fontPreloads.forEach(flushResource, destination); + renderState$jscomp$1.fontPreloads.clear(); + renderState$jscomp$1.highImagePreloads.forEach( + flushResource, + destination + ); + renderState$jscomp$1.highImagePreloads.clear(); + renderState$jscomp$1.styles.forEach(preloadLateStyles, destination); + renderState$jscomp$1.scripts.forEach(flushResource, destination); + renderState$jscomp$1.scripts.clear(); + renderState$jscomp$1.bulkPreloads.forEach(flushResource, destination); + renderState$jscomp$1.bulkPreloads.clear(); + var hoistableChunks$jscomp$0 = renderState$jscomp$1.hoistableChunks; + for ( + completedRootSegment = 0; + completedRootSegment < hoistableChunks$jscomp$0.length; + completedRootSegment++ + ) + writeChunk(destination, hoistableChunks$jscomp$0[completedRootSegment]); + hoistableChunks$jscomp$0.length = 0; + var clientRenderedBoundaries = request.clientRenderedBoundaries; + for (i = 0; i < clientRenderedBoundaries.length; i++) { + var boundary = clientRenderedBoundaries[i]; + renderState$jscomp$1 = destination; + var resumableState$jscomp$1 = request.resumableState, + renderState$jscomp$2 = request.renderState, + id = boundary.rootSegmentID, + errorDigest = boundary.errorDigest; + writeChunk( + renderState$jscomp$1, + renderState$jscomp$2.startInlineScript + ); + writeChunk(renderState$jscomp$1, endOfStartTag); + 0 === (resumableState$jscomp$1.instructions & 4) + ? ((resumableState$jscomp$1.instructions |= 4), + writeChunk(renderState$jscomp$1, clientRenderScript1Full)) + : writeChunk(renderState$jscomp$1, clientRenderScript1Partial); + writeChunk(renderState$jscomp$1, renderState$jscomp$2.boundaryPrefix); + writeChunk(renderState$jscomp$1, id.toString(16)); + writeChunk(renderState$jscomp$1, clientRenderScript1A); + errorDigest && + (writeChunk( + renderState$jscomp$1, + clientRenderErrorScriptArgInterstitial + ), + writeChunk( + renderState$jscomp$1, + escapeJSStringsForInstructionScripts(errorDigest || "") + )); + var JSCompiler_inline_result = writeChunkAndReturn( + renderState$jscomp$1, + clientRenderScriptEnd + ); + if (!JSCompiler_inline_result) { + request.destination = null; + i++; + clientRenderedBoundaries.splice(0, i); + return; + } + } + clientRenderedBoundaries.splice(0, i); + var completedBoundaries = request.completedBoundaries; + for (i = 0; i < completedBoundaries.length; i++) + if ( + !flushCompletedBoundary(request, destination, completedBoundaries[i]) + ) { + request.destination = null; + i++; + completedBoundaries.splice(0, i); + return; + } + completedBoundaries.splice(0, i); + completeWriting(destination); + currentView = new Uint8Array(2048); + writtenBytes = 0; + flushingPartialBoundaries = destinationHasCapacity$1 = !0; + var partialBoundaries = request.partialBoundaries; + for (i = 0; i < partialBoundaries.length; i++) { + var boundary$70 = partialBoundaries[i]; + a: { + clientRenderedBoundaries = request; + boundary = destination; + flushedByteSize = boundary$70.byteSize; + var completedSegments = boundary$70.completedSegments; + for ( + JSCompiler_inline_result = 0; + JSCompiler_inline_result < completedSegments.length; + JSCompiler_inline_result++ + ) + if ( + !flushPartiallyCompletedSegment( + clientRenderedBoundaries, + boundary, + boundary$70, + completedSegments[JSCompiler_inline_result] + ) + ) { + JSCompiler_inline_result++; + completedSegments.splice(0, JSCompiler_inline_result); + var JSCompiler_inline_result$jscomp$0 = !1; + break a; + } + completedSegments.splice(0, JSCompiler_inline_result); + var row = boundary$70.row; + null !== row && + row.together && + 1 === boundary$70.pendingTasks && + (1 === row.pendingTasks + ? unblockSuspenseListRow( + clientRenderedBoundaries, + row, + row.hoistables + ) + : row.pendingTasks--); + JSCompiler_inline_result$jscomp$0 = writeHoistablesForBoundary( + boundary, + boundary$70.contentState, + clientRenderedBoundaries.renderState + ); + } + if (!JSCompiler_inline_result$jscomp$0) { + request.destination = null; + i++; + partialBoundaries.splice(0, i); + return; + } + } + partialBoundaries.splice(0, i); + flushingPartialBoundaries = !1; + var largeBoundaries = request.completedBoundaries; + for (i = 0; i < largeBoundaries.length; i++) + if (!flushCompletedBoundary(request, destination, largeBoundaries[i])) { + request.destination = null; + i++; + largeBoundaries.splice(0, i); + return; + } + largeBoundaries.splice(0, i); + } + } finally { + (flushingPartialBoundaries = !1), + 0 === request.allPendingTasks && + 0 === request.clientRenderedBoundaries.length && + 0 === request.completedBoundaries.length + ? ((request.flushScheduled = !1), + (i = request.resumableState), + i.hasBody && writeChunk(destination, endChunkForTag("body")), + i.hasHtml && writeChunk(destination, endChunkForTag("html")), + completeWriting(destination), + flushBuffered(destination), + (request.status = 14), + destination.end(), + (request.destination = null)) + : (completeWriting(destination), flushBuffered(destination)); + } +} +function startWork(request) { + request.flushScheduled = null !== request.destination; + scheduleMicrotask(function () { + return requestStorage.run(request, performWork, request); + }); + setImmediate(function () { + 10 === request.status && (request.status = 11); + null === request.trackedPostpones && + requestStorage.run( + request, + enqueueEarlyPreloadsAfterInitialWork, + request + ); + }); +} +function enqueueEarlyPreloadsAfterInitialWork(request) { + safelyEmitEarlyPreloads(request, 0 === request.pendingRootTasks); +} +function enqueueFlush(request) { + !1 === request.flushScheduled && + 0 === request.pingedTasks.length && + null !== request.destination && + ((request.flushScheduled = !0), + setImmediate(function () { + var destination = request.destination; + destination + ? flushCompletedQueues(request, destination) + : (request.flushScheduled = !1); + })); +} +function startFlowing(request, destination) { + if (13 === request.status) + (request.status = 14), destination.destroy(request.fatalError); + else if (14 !== request.status && null === request.destination) { + request.destination = destination; + try { + flushCompletedQueues(request, destination); + } catch (error) { + logRecoverableError(request, error, {}), fatalError(request, error); + } + } +} +function abort(request, reason) { + if (11 === request.status || 10 === request.status) request.status = 12; + try { + var abortableTasks = request.abortableTasks; + if (0 < abortableTasks.size) { + var error = + void 0 === reason + ? Error("The render was aborted by the server without a reason.") + : "object" === typeof reason && + null !== reason && + "function" === typeof reason.then + ? Error("The render was aborted by the server with a promise.") + : reason; + request.fatalError = error; + abortableTasks.forEach(function (task) { + return abortTask(task, request, error); + }); + abortableTasks.clear(); + } + null !== request.destination && + flushCompletedQueues(request, request.destination); + } catch (error$72) { + logRecoverableError(request, error$72, {}), fatalError(request, error$72); + } +} +function addToReplayParent(node, parentKeyPath, trackedPostpones) { + if (null === parentKeyPath) trackedPostpones.rootNodes.push(node); + else { + var workingMap = trackedPostpones.workingMap, + parentNode = workingMap.get(parentKeyPath); + void 0 === parentNode && + ((parentNode = [parentKeyPath[1], parentKeyPath[2], [], null]), + workingMap.set(parentKeyPath, parentNode), + addToReplayParent(parentNode, parentKeyPath[0], trackedPostpones)); + parentNode[2].push(node); + } +} +function getPostponedState(request) { + var trackedPostpones = request.trackedPostpones; + if ( + null === trackedPostpones || + (0 === trackedPostpones.rootNodes.length && + null === trackedPostpones.rootSlots) + ) + return (request.trackedPostpones = null); + if ( + null === request.completedRootSegment || + (5 !== request.completedRootSegment.status && + null !== request.completedPreambleSegments) + ) { + var nextSegmentId = request.nextSegmentId; + var replaySlots = trackedPostpones.rootSlots; + var resumableState = request.resumableState; + resumableState.bootstrapScriptContent = void 0; + resumableState.bootstrapScripts = void 0; + resumableState.bootstrapModules = void 0; + } else { + nextSegmentId = 0; + replaySlots = -1; + resumableState = request.resumableState; + var renderState = request.renderState; + resumableState.nextFormID = 0; + resumableState.hasBody = !1; + resumableState.hasHtml = !1; + resumableState.unknownResources = { font: renderState.resets.font }; + resumableState.dnsResources = renderState.resets.dns; + resumableState.connectResources = renderState.resets.connect; + resumableState.imageResources = renderState.resets.image; + resumableState.styleResources = renderState.resets.style; + resumableState.scriptResources = {}; + resumableState.moduleUnknownResources = {}; + resumableState.moduleScriptResources = {}; + resumableState.instructions = 0; + } + return { + nextSegmentId: nextSegmentId, + rootFormatContext: request.rootFormatContext, + progressiveChunkSize: request.progressiveChunkSize, + resumableState: request.resumableState, + replayNodes: trackedPostpones.rootNodes, + replaySlots: replaySlots + }; +} +function ensureCorrectIsomorphicReactVersion() { + var isomorphicReactPackageVersion = React.version; + if ("19.2.4" !== isomorphicReactPackageVersion) + throw Error( + 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + + (isomorphicReactPackageVersion + + "\n - react-dom: 19.2.4\nLearn more: https://react.dev/warnings/version-mismatch") + ); +} +ensureCorrectIsomorphicReactVersion(); +function createDrainHandler(destination, request) { + return function () { + return startFlowing(request, destination); + }; +} +function createCancelHandler(request, reason) { + return function () { + request.destination = null; + abort(request, Error(reason)); + }; +} +function createRequestImpl(children, options) { + var resumableState = createResumableState( + options ? options.identifierPrefix : void 0, + options ? options.unstable_externalRuntimeSrc : void 0, + options ? options.bootstrapScriptContent : void 0, + options ? options.bootstrapScripts : void 0, + options ? options.bootstrapModules : void 0 + ); + return createRequest( + children, + resumableState, + createRenderState( + resumableState, + options ? options.nonce : void 0, + options ? options.unstable_externalRuntimeSrc : void 0, + options ? options.importMap : void 0, + options ? options.onHeaders : void 0, + options ? options.maxHeadersLength : void 0 + ), + createRootFormatContext(options ? options.namespaceURI : void 0), + options ? options.progressiveChunkSize : void 0, + options ? options.onError : void 0, + options ? options.onAllReady : void 0, + options ? options.onShellReady : void 0, + options ? options.onShellError : void 0, + void 0, + options ? options.onPostpone : void 0, + options ? options.formState : void 0 + ); +} +function createFakeWritableFromReadableStreamController$1(controller) { + return { + write: function (chunk) { + "string" === typeof chunk && (chunk = textEncoder.encode(chunk)); + controller.enqueue(chunk); + return !0; + }, + end: function () { + controller.close(); + }, + destroy: function (error) { + "function" === typeof controller.error + ? controller.error(error) + : controller.close(); + } + }; +} +function resumeRequestImpl(children, postponedState, options) { + return resumeRequest( + children, + postponedState, + createRenderState( + postponedState.resumableState, + options ? options.nonce : void 0, + void 0, + void 0, + void 0, + void 0 + ), + options ? options.onError : void 0, + options ? options.onAllReady : void 0, + options ? options.onShellReady : void 0, + options ? options.onShellError : void 0, + void 0, + options ? options.onPostpone : void 0 + ); +} +ensureCorrectIsomorphicReactVersion(); +function createFakeWritableFromReadableStreamController(controller) { + return { + write: function (chunk) { + "string" === typeof chunk && (chunk = textEncoder.encode(chunk)); + controller.enqueue(chunk); + return !0; + }, + end: function () { + controller.close(); + }, + destroy: function (error) { + "function" === typeof controller.error + ? controller.error(error) + : controller.close(); + } + }; +} +function createFakeWritableFromReadable(readable) { + return { + write: function (chunk) { + return readable.push(chunk); + }, + end: function () { + readable.push(null); + }, + destroy: function (error) { + readable.destroy(error); + } + }; +} +exports.prerender = function (children, options) { + return new Promise(function (resolve, reject) { + var onHeaders = options ? options.onHeaders : void 0, + onHeadersImpl; + onHeaders && + (onHeadersImpl = function (headersDescriptor) { + onHeaders(new Headers(headersDescriptor)); + }); + var resources = createResumableState( + options ? options.identifierPrefix : void 0, + options ? options.unstable_externalRuntimeSrc : void 0, + options ? options.bootstrapScriptContent : void 0, + options ? options.bootstrapScripts : void 0, + options ? options.bootstrapModules : void 0 + ), + request = createPrerenderRequest( + children, + resources, + createRenderState( + resources, + void 0, + options ? options.unstable_externalRuntimeSrc : void 0, + options ? options.importMap : void 0, + onHeadersImpl, + options ? options.maxHeadersLength : void 0 + ), + createRootFormatContext(options ? options.namespaceURI : void 0), + options ? options.progressiveChunkSize : void 0, + options ? options.onError : void 0, + function () { + var writable, + stream = new ReadableStream( + { + type: "bytes", + start: function (controller) { + writable = + createFakeWritableFromReadableStreamController(controller); + }, + pull: function () { + startFlowing(request, writable); + }, + cancel: function (reason) { + request.destination = null; + abort(request, reason); + } + }, + { highWaterMark: 0 } + ); + stream = { postponed: getPostponedState(request), prelude: stream }; + resolve(stream); + }, + void 0, + void 0, + reject, + options ? options.onPostpone : void 0 + ); + if (options && options.signal) { + var signal = options.signal; + if (signal.aborted) abort(request, signal.reason); + else { + var listener = function () { + abort(request, signal.reason); + signal.removeEventListener("abort", listener); + }; + signal.addEventListener("abort", listener); + } + } + startWork(request); + }); +}; +exports.prerenderToNodeStream = function (children, options) { + return new Promise(function (resolve, reject) { + var resumableState = createResumableState( + options ? options.identifierPrefix : void 0, + options ? options.unstable_externalRuntimeSrc : void 0, + options ? options.bootstrapScriptContent : void 0, + options ? options.bootstrapScripts : void 0, + options ? options.bootstrapModules : void 0 + ), + request = createPrerenderRequest( + children, + resumableState, + createRenderState( + resumableState, + void 0, + options ? options.unstable_externalRuntimeSrc : void 0, + options ? options.importMap : void 0, + options ? options.onHeaders : void 0, + options ? options.maxHeadersLength : void 0 + ), + createRootFormatContext(options ? options.namespaceURI : void 0), + options ? options.progressiveChunkSize : void 0, + options ? options.onError : void 0, + function () { + var readable = new stream.Readable({ + read: function () { + startFlowing(request, writable); + } + }), + writable = createFakeWritableFromReadable(readable); + readable = { + postponed: getPostponedState(request), + prelude: readable + }; + resolve(readable); + }, + void 0, + void 0, + reject, + options ? options.onPostpone : void 0 + ); + if (options && options.signal) { + var signal = options.signal; + if (signal.aborted) abort(request, signal.reason); + else { + var listener = function () { + abort(request, signal.reason); + signal.removeEventListener("abort", listener); + }; + signal.addEventListener("abort", listener); + } + } + startWork(request); + }); +}; +exports.renderToPipeableStream = function (children, options) { + var request = createRequestImpl(children, options), + hasStartedFlowing = !1; + startWork(request); + return { + pipe: function (destination) { + if (hasStartedFlowing) + throw Error( + "React currently only supports piping to one writable stream." + ); + hasStartedFlowing = !0; + safelyEmitEarlyPreloads( + request, + null === request.trackedPostpones + ? 0 === request.pendingRootTasks + : null === request.completedRootSegment + ? 0 === request.pendingRootTasks + : 5 !== request.completedRootSegment.status + ); + startFlowing(request, destination); + destination.on("drain", createDrainHandler(destination, request)); + destination.on( + "error", + createCancelHandler( + request, + "The destination stream errored while writing data." + ) + ); + destination.on( + "close", + createCancelHandler(request, "The destination stream closed early.") + ); + return destination; + }, + abort: function (reason) { + abort(request, reason); + } + }; +}; +exports.renderToReadableStream = function (children, options) { + return new Promise(function (resolve, reject) { + var onFatalError, + onAllReady, + allReady = new Promise(function (res, rej) { + onAllReady = res; + onFatalError = rej; + }), + onHeaders = options ? options.onHeaders : void 0, + onHeadersImpl; + onHeaders && + (onHeadersImpl = function (headersDescriptor) { + onHeaders(new Headers(headersDescriptor)); + }); + var resumableState = createResumableState( + options ? options.identifierPrefix : void 0, + options ? options.unstable_externalRuntimeSrc : void 0, + options ? options.bootstrapScriptContent : void 0, + options ? options.bootstrapScripts : void 0, + options ? options.bootstrapModules : void 0 + ), + request = createRequest( + children, + resumableState, + createRenderState( + resumableState, + options ? options.nonce : void 0, + options ? options.unstable_externalRuntimeSrc : void 0, + options ? options.importMap : void 0, + onHeadersImpl, + options ? options.maxHeadersLength : void 0 + ), + createRootFormatContext(options ? options.namespaceURI : void 0), + options ? options.progressiveChunkSize : void 0, + options ? options.onError : void 0, + onAllReady, + function () { + var writable, + stream = new ReadableStream( + { + type: "bytes", + start: function (controller) { + writable = + createFakeWritableFromReadableStreamController$1( + controller + ); + }, + pull: function () { + startFlowing(request, writable); + }, + cancel: function (reason) { + request.destination = null; + abort(request, reason); + } + }, + { highWaterMark: 0 } + ); + stream.allReady = allReady; + resolve(stream); + }, + function (error) { + allReady.catch(function () {}); + reject(error); + }, + onFatalError, + options ? options.onPostpone : void 0, + options ? options.formState : void 0 + ); + if (options && options.signal) { + var signal = options.signal; + if (signal.aborted) abort(request, signal.reason); + else { + var listener = function () { + abort(request, signal.reason); + signal.removeEventListener("abort", listener); + }; + signal.addEventListener("abort", listener); + } + } + startWork(request); + }); +}; +exports.resume = function (children, postponedState, options) { + return new Promise(function (resolve, reject) { + var onFatalError, + onAllReady, + allReady = new Promise(function (res, rej) { + onAllReady = res; + onFatalError = rej; + }), + request = resumeRequest( + children, + postponedState, + createRenderState( + postponedState.resumableState, + options ? options.nonce : void 0, + void 0, + void 0, + void 0, + void 0 + ), + options ? options.onError : void 0, + onAllReady, + function () { + var writable, + stream = new ReadableStream( + { + type: "bytes", + start: function (controller) { + writable = + createFakeWritableFromReadableStreamController$1( + controller + ); + }, + pull: function () { + startFlowing(request, writable); + }, + cancel: function (reason) { + request.destination = null; + abort(request, reason); + } + }, + { highWaterMark: 0 } + ); + stream.allReady = allReady; + resolve(stream); + }, + function (error) { + allReady.catch(function () {}); + reject(error); + }, + onFatalError, + options ? options.onPostpone : void 0 + ); + if (options && options.signal) { + var signal = options.signal; + if (signal.aborted) abort(request, signal.reason); + else { + var listener = function () { + abort(request, signal.reason); + signal.removeEventListener("abort", listener); + }; + signal.addEventListener("abort", listener); + } + } + startWork(request); + }); +}; +exports.resumeAndPrerender = function (children, postponedState, options) { + return new Promise(function (resolve, reject) { + var request = resumeAndPrerenderRequest( + children, + postponedState, + createRenderState( + postponedState.resumableState, + void 0, + void 0, + void 0, + void 0, + void 0 + ), + options ? options.onError : void 0, + function () { + var writable, + stream = new ReadableStream( + { + type: "bytes", + start: function (controller) { + writable = + createFakeWritableFromReadableStreamController(controller); + }, + pull: function () { + startFlowing(request, writable); + }, + cancel: function (reason) { + request.destination = null; + abort(request, reason); + } + }, + { highWaterMark: 0 } + ); + stream = { postponed: getPostponedState(request), prelude: stream }; + resolve(stream); + }, + void 0, + void 0, + reject, + options ? options.onPostpone : void 0 + ); + if (options && options.signal) { + var signal = options.signal; + if (signal.aborted) abort(request, signal.reason); + else { + var listener = function () { + abort(request, signal.reason); + signal.removeEventListener("abort", listener); + }; + signal.addEventListener("abort", listener); + } + } + startWork(request); + }); +}; +exports.resumeAndPrerenderToNodeStream = function ( + children, + postponedState, + options +) { + return new Promise(function (resolve, reject) { + var request = resumeAndPrerenderRequest( + children, + postponedState, + createRenderState( + postponedState.resumableState, + void 0, + void 0, + void 0, + void 0, + void 0 + ), + options ? options.onError : void 0, + function () { + var readable = new stream.Readable({ + read: function () { + startFlowing(request, writable); + } + }), + writable = createFakeWritableFromReadable(readable); + readable = { postponed: getPostponedState(request), prelude: readable }; + resolve(readable); + }, + void 0, + void 0, + reject, + options ? options.onPostpone : void 0 + ); + if (options && options.signal) { + var signal = options.signal; + if (signal.aborted) abort(request, signal.reason); + else { + var listener = function () { + abort(request, signal.reason); + signal.removeEventListener("abort", listener); + }; + signal.addEventListener("abort", listener); + } + } + startWork(request); + }); +}; +exports.resumeToPipeableStream = function (children, postponedState, options) { + var request = resumeRequestImpl(children, postponedState, options), + hasStartedFlowing = !1; + startWork(request); + return { + pipe: function (destination) { + if (hasStartedFlowing) + throw Error( + "React currently only supports piping to one writable stream." + ); + hasStartedFlowing = !0; + startFlowing(request, destination); + destination.on("drain", createDrainHandler(destination, request)); + destination.on( + "error", + createCancelHandler( + request, + "The destination stream errored while writing data." + ) + ); + destination.on( + "close", + createCancelHandler(request, "The destination stream closed early.") + ); + return destination; + }, + abort: function (reason) { + abort(request, reason); + } + }; +}; +exports.version = "19.2.4"; diff --git a/build/node_modules/react-dom/cjs/react-dom.production.js b/build/node_modules/react-dom/cjs/react-dom.production.js new file mode 100644 index 0000000..a349735 --- /dev/null +++ b/build/node_modules/react-dom/cjs/react-dom.production.js @@ -0,0 +1,210 @@ +/** + * @license React + * react-dom.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; +var React = require("react"); +function formatProdErrorMessage(code) { + var url = "https://react.dev/errors/" + code; + if (1 < arguments.length) { + url += "?args[]=" + encodeURIComponent(arguments[1]); + for (var i = 2; i < arguments.length; i++) + url += "&args[]=" + encodeURIComponent(arguments[i]); + } + return ( + "Minified React error #" + + code + + "; visit " + + url + + " for the full message or use the non-minified dev environment for full errors and additional helpful warnings." + ); +} +function noop() {} +var Internals = { + d: { + f: noop, + r: function () { + throw Error(formatProdErrorMessage(522)); + }, + D: noop, + C: noop, + L: noop, + m: noop, + X: noop, + S: noop, + M: noop + }, + p: 0, + findDOMNode: null + }, + REACT_PORTAL_TYPE = Symbol.for("react.portal"); +function createPortal$1(children, containerInfo, implementation) { + var key = + 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null; + return { + $$typeof: REACT_PORTAL_TYPE, + key: null == key ? null : "" + key, + children: children, + containerInfo: containerInfo, + implementation: implementation + }; +} +var ReactSharedInternals = + React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; +function getCrossOriginStringAs(as, input) { + if ("font" === as) return ""; + if ("string" === typeof input) + return "use-credentials" === input ? input : ""; +} +exports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = + Internals; +exports.createPortal = function (children, container) { + var key = + 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null; + if ( + !container || + (1 !== container.nodeType && + 9 !== container.nodeType && + 11 !== container.nodeType) + ) + throw Error(formatProdErrorMessage(299)); + return createPortal$1(children, container, null, key); +}; +exports.flushSync = function (fn) { + var previousTransition = ReactSharedInternals.T, + previousUpdatePriority = Internals.p; + try { + if (((ReactSharedInternals.T = null), (Internals.p = 2), fn)) return fn(); + } finally { + (ReactSharedInternals.T = previousTransition), + (Internals.p = previousUpdatePriority), + Internals.d.f(); + } +}; +exports.preconnect = function (href, options) { + "string" === typeof href && + (options + ? ((options = options.crossOrigin), + (options = + "string" === typeof options + ? "use-credentials" === options + ? options + : "" + : void 0)) + : (options = null), + Internals.d.C(href, options)); +}; +exports.prefetchDNS = function (href) { + "string" === typeof href && Internals.d.D(href); +}; +exports.preinit = function (href, options) { + if ("string" === typeof href && options && "string" === typeof options.as) { + var as = options.as, + crossOrigin = getCrossOriginStringAs(as, options.crossOrigin), + integrity = + "string" === typeof options.integrity ? options.integrity : void 0, + fetchPriority = + "string" === typeof options.fetchPriority + ? options.fetchPriority + : void 0; + "style" === as + ? Internals.d.S( + href, + "string" === typeof options.precedence ? options.precedence : void 0, + { + crossOrigin: crossOrigin, + integrity: integrity, + fetchPriority: fetchPriority + } + ) + : "script" === as && + Internals.d.X(href, { + crossOrigin: crossOrigin, + integrity: integrity, + fetchPriority: fetchPriority, + nonce: "string" === typeof options.nonce ? options.nonce : void 0 + }); + } +}; +exports.preinitModule = function (href, options) { + if ("string" === typeof href) + if ("object" === typeof options && null !== options) { + if (null == options.as || "script" === options.as) { + var crossOrigin = getCrossOriginStringAs( + options.as, + options.crossOrigin + ); + Internals.d.M(href, { + crossOrigin: crossOrigin, + integrity: + "string" === typeof options.integrity ? options.integrity : void 0, + nonce: "string" === typeof options.nonce ? options.nonce : void 0 + }); + } + } else null == options && Internals.d.M(href); +}; +exports.preload = function (href, options) { + if ( + "string" === typeof href && + "object" === typeof options && + null !== options && + "string" === typeof options.as + ) { + var as = options.as, + crossOrigin = getCrossOriginStringAs(as, options.crossOrigin); + Internals.d.L(href, as, { + crossOrigin: crossOrigin, + integrity: + "string" === typeof options.integrity ? options.integrity : void 0, + nonce: "string" === typeof options.nonce ? options.nonce : void 0, + type: "string" === typeof options.type ? options.type : void 0, + fetchPriority: + "string" === typeof options.fetchPriority + ? options.fetchPriority + : void 0, + referrerPolicy: + "string" === typeof options.referrerPolicy + ? options.referrerPolicy + : void 0, + imageSrcSet: + "string" === typeof options.imageSrcSet ? options.imageSrcSet : void 0, + imageSizes: + "string" === typeof options.imageSizes ? options.imageSizes : void 0, + media: "string" === typeof options.media ? options.media : void 0 + }); + } +}; +exports.preloadModule = function (href, options) { + if ("string" === typeof href) + if (options) { + var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin); + Internals.d.m(href, { + as: + "string" === typeof options.as && "script" !== options.as + ? options.as + : void 0, + crossOrigin: crossOrigin, + integrity: + "string" === typeof options.integrity ? options.integrity : void 0 + }); + } else Internals.d.m(href); +}; +exports.requestFormReset = function (form) { + Internals.d.r(form); +}; +exports.unstable_batchedUpdates = function (fn, a) { + return fn(a); +}; +exports.useFormState = function (action, initialState, permalink) { + return ReactSharedInternals.H.useFormState(action, initialState, permalink); +}; +exports.useFormStatus = function () { + return ReactSharedInternals.H.useHostTransitionStatus(); +}; +exports.version = "19.2.4"; diff --git a/build/node_modules/react-dom/index.js b/build/node_modules/react-dom/index.js new file mode 100644 index 0000000..973f373 --- /dev/null +++ b/build/node_modules/react-dom/index.js @@ -0,0 +1,38 @@ +'use strict'; + +function checkDCE() { + /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */ + if ( + typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' || + typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function' + ) { + return; + } + if (process.env.NODE_ENV !== 'production') { + // This branch is unreachable because this function is only called + // in production, but the condition is true only in development. + // Therefore if the branch is still here, dead code elimination wasn't + // properly applied. + // Don't change the message. React DevTools relies on it. Also make sure + // this message doesn't occur elsewhere in this function, or it will cause + // a false positive. + throw new Error('^_^'); + } + try { + // Verify that the code above has been dead code eliminated (DCE'd). + __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE); + } catch (err) { + // DevTools shouldn't crash React, no matter what. + // We should still report in case we break this code. + console.error(err); + } +} + +if (process.env.NODE_ENV === 'production') { + // DCE check should happen before ReactDOM bundle executes so that + // DevTools can report bad minification during injection. + checkDCE(); + module.exports = require('./cjs/react-dom.production.js'); +} else { + module.exports = require('./cjs/react-dom.development.js'); +} diff --git a/build/node_modules/react-dom/package.json b/build/node_modules/react-dom/package.json new file mode 100644 index 0000000..2399835 --- /dev/null +++ b/build/node_modules/react-dom/package.json @@ -0,0 +1,117 @@ +{ + "name": "react-dom", + "version": "19.2.4", + "description": "React package for working with the DOM.", + "main": "index.js", + "repository": { + "type": "git", + "url": "https://github.com/facebook/react.git", + "directory": "packages/react-dom" + }, + "keywords": [ + "react" + ], + "license": "MIT", + "bugs": { + "url": "https://github.com/facebook/react/issues" + }, + "homepage": "https://react.dev/", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.4" + }, + "files": [ + "LICENSE", + "README.md", + "client.js", + "client.react-server.js", + "index.js", + "profiling.js", + "profiling.react-server.js", + "react-dom.react-server.js", + "server.browser.js", + "server.bun.js", + "server.edge.js", + "server.js", + "server.node.js", + "server.react-server.js", + "static.browser.js", + "static.edge.js", + "static.js", + "static.node.js", + "static.react-server.js", + "test-utils.js", + "cjs/" + ], + "exports": { + ".": { + "react-server": "./react-dom.react-server.js", + "default": "./index.js" + }, + "./client": { + "react-server": "./client.react-server.js", + "default": "./client.js" + }, + "./server": { + "react-server": "./server.react-server.js", + "workerd": "./server.edge.js", + "bun": "./server.bun.js", + "deno": "./server.browser.js", + "worker": "./server.browser.js", + "node": "./server.node.js", + "edge-light": "./server.edge.js", + "browser": "./server.browser.js", + "default": "./server.node.js" + }, + "./server.browser": { + "react-server": "./server.react-server.js", + "default": "./server.browser.js" + }, + "./server.bun": { + "react-server": "./server.react-server.js", + "default": "./server.bun.js" + }, + "./server.edge": { + "react-server": "./server.react-server.js", + "default": "./server.edge.js" + }, + "./server.node": { + "react-server": "./server.react-server.js", + "default": "./server.node.js" + }, + "./static": { + "react-server": "./static.react-server.js", + "workerd": "./static.edge.js", + "deno": "./static.browser.js", + "worker": "./static.browser.js", + "node": "./static.node.js", + "edge-light": "./static.edge.js", + "browser": "./static.browser.js", + "default": "./static.node.js" + }, + "./static.browser": { + "react-server": "./static.react-server.js", + "default": "./static.browser.js" + }, + "./static.edge": { + "react-server": "./static.react-server.js", + "default": "./static.edge.js" + }, + "./static.node": { + "react-server": "./static.react-server.js", + "default": "./static.node.js" + }, + "./profiling": { + "react-server": "./profiling.react-server.js", + "default": "./profiling.js" + }, + "./test-utils": "./test-utils.js", + "./package.json": "./package.json" + }, + "browser": { + "./server.js": "./server.browser.js", + "./static.js": "./static.browser.js" + } +} \ No newline at end of file diff --git a/build/node_modules/react-dom/server.browser.js b/build/node_modules/react-dom/server.browser.js new file mode 100644 index 0000000..4d80665 --- /dev/null +++ b/build/node_modules/react-dom/server.browser.js @@ -0,0 +1,16 @@ +'use strict'; + +var l, s; +if (process.env.NODE_ENV === 'production') { + l = require('./cjs/react-dom-server-legacy.browser.production.js'); + s = require('./cjs/react-dom-server.browser.production.js'); +} else { + l = require('./cjs/react-dom-server-legacy.browser.development.js'); + s = require('./cjs/react-dom-server.browser.development.js'); +} + +exports.version = l.version; +exports.renderToString = l.renderToString; +exports.renderToStaticMarkup = l.renderToStaticMarkup; +exports.renderToReadableStream = s.renderToReadableStream; +exports.resume = s.resume; diff --git a/build/node_modules/react-dom/server.edge.js b/build/node_modules/react-dom/server.edge.js new file mode 100644 index 0000000..cc05ed6 --- /dev/null +++ b/build/node_modules/react-dom/server.edge.js @@ -0,0 +1,17 @@ +'use strict'; + +var b; +var l; +if (process.env.NODE_ENV === 'production') { + b = require('./cjs/react-dom-server.edge.production.js'); + l = require('./cjs/react-dom-server-legacy.browser.production.js'); +} else { + b = require('./cjs/react-dom-server.edge.development.js'); + l = require('./cjs/react-dom-server-legacy.browser.development.js'); +} + +exports.version = b.version; +exports.renderToReadableStream = b.renderToReadableStream; +exports.renderToString = l.renderToString; +exports.renderToStaticMarkup = l.renderToStaticMarkup; +exports.resume = b.resume; diff --git a/build/node_modules/react-dom/server.node.js b/build/node_modules/react-dom/server.node.js new file mode 100644 index 0000000..3feeac2 --- /dev/null +++ b/build/node_modules/react-dom/server.node.js @@ -0,0 +1,18 @@ +'use strict'; + +var l, s; +if (process.env.NODE_ENV === 'production') { + l = require('./cjs/react-dom-server-legacy.node.production.js'); + s = require('./cjs/react-dom-server.node.production.js'); +} else { + l = require('./cjs/react-dom-server-legacy.node.development.js'); + s = require('./cjs/react-dom-server.node.development.js'); +} + +exports.version = l.version; +exports.renderToString = l.renderToString; +exports.renderToStaticMarkup = l.renderToStaticMarkup; +exports.renderToPipeableStream = s.renderToPipeableStream; +exports.renderToReadableStream = s.renderToReadableStream; +exports.resumeToPipeableStream = s.resumeToPipeableStream; +exports.resume = s.resume; diff --git a/build/node_modules/react-dom/static.node.js b/build/node_modules/react-dom/static.node.js new file mode 100644 index 0000000..24fc9cb --- /dev/null +++ b/build/node_modules/react-dom/static.node.js @@ -0,0 +1,14 @@ +'use strict'; + +var s; +if (process.env.NODE_ENV === 'production') { + s = require('./cjs/react-dom-server.node.production.js'); +} else { + s = require('./cjs/react-dom-server.node.development.js'); +} + +exports.version = s.version; +exports.prerenderToNodeStream = s.prerenderToNodeStream; +exports.prerender = s.prerender; +exports.resumeAndPrerenderToNodeStream = s.resumeAndPrerenderToNodeStream; +exports.resumeAndPrerender = s.resumeAndPrerender; diff --git a/build/node_modules/react/cjs/react-compiler-runtime.production.js b/build/node_modules/react/cjs/react-compiler-runtime.production.js new file mode 100644 index 0000000..4d5ade3 --- /dev/null +++ b/build/node_modules/react/cjs/react-compiler-runtime.production.js @@ -0,0 +1,16 @@ +/** + * @license React + * react-compiler-runtime.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; +var ReactSharedInternals = + require("react").__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; +exports.c = function (size) { + return ReactSharedInternals.H.useMemoCache(size); +}; diff --git a/build/node_modules/react/cjs/react-jsx-dev-runtime.production.js b/build/node_modules/react/cjs/react-jsx-dev-runtime.production.js new file mode 100644 index 0000000..22ad886 --- /dev/null +++ b/build/node_modules/react/cjs/react-jsx-dev-runtime.production.js @@ -0,0 +1,14 @@ +/** + * @license React + * react-jsx-dev-runtime.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; +var REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"); +exports.Fragment = REACT_FRAGMENT_TYPE; +exports.jsxDEV = void 0; diff --git a/build/node_modules/react/cjs/react-jsx-runtime.production.js b/build/node_modules/react/cjs/react-jsx-runtime.production.js new file mode 100644 index 0000000..12d6088 --- /dev/null +++ b/build/node_modules/react/cjs/react-jsx-runtime.production.js @@ -0,0 +1,34 @@ +/** + * @license React + * react-jsx-runtime.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; +var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), + REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"); +function jsxProd(type, config, maybeKey) { + var key = null; + void 0 !== maybeKey && (key = "" + maybeKey); + void 0 !== config.key && (key = "" + config.key); + if ("key" in config) { + maybeKey = {}; + for (var propName in config) + "key" !== propName && (maybeKey[propName] = config[propName]); + } else maybeKey = config; + config = maybeKey.ref; + return { + $$typeof: REACT_ELEMENT_TYPE, + type: type, + key: key, + ref: void 0 !== config ? config : null, + props: maybeKey + }; +} +exports.Fragment = REACT_FRAGMENT_TYPE; +exports.jsx = jsxProd; +exports.jsxs = jsxProd; diff --git a/build/node_modules/react/cjs/react.development.js b/build/node_modules/react/cjs/react.development.js new file mode 100644 index 0000000..8c026f9 --- /dev/null +++ b/build/node_modules/react/cjs/react.development.js @@ -0,0 +1,1284 @@ +/** + * @license React + * react.development.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; +"production" !== process.env.NODE_ENV && + (function () { + function defineDeprecationWarning(methodName, info) { + Object.defineProperty(Component.prototype, methodName, { + get: function () { + console.warn( + "%s(...) is deprecated in plain JavaScript React classes. %s", + info[0], + info[1] + ); + } + }); + } + function getIteratorFn(maybeIterable) { + if (null === maybeIterable || "object" !== typeof maybeIterable) + return null; + maybeIterable = + (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) || + maybeIterable["@@iterator"]; + return "function" === typeof maybeIterable ? maybeIterable : null; + } + function warnNoop(publicInstance, callerName) { + publicInstance = + ((publicInstance = publicInstance.constructor) && + (publicInstance.displayName || publicInstance.name)) || + "ReactClass"; + var warningKey = publicInstance + "." + callerName; + didWarnStateUpdateForUnmountedComponent[warningKey] || + (console.error( + "Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.", + callerName, + publicInstance + ), + (didWarnStateUpdateForUnmountedComponent[warningKey] = !0)); + } + function Component(props, context, updater) { + this.props = props; + this.context = context; + this.refs = emptyObject; + this.updater = updater || ReactNoopUpdateQueue; + } + function ComponentDummy() {} + function PureComponent(props, context, updater) { + this.props = props; + this.context = context; + this.refs = emptyObject; + this.updater = updater || ReactNoopUpdateQueue; + } + function noop() {} + function testStringCoercion(value) { + return "" + value; + } + function checkKeyStringCoercion(value) { + try { + testStringCoercion(value); + var JSCompiler_inline_result = !1; + } catch (e) { + JSCompiler_inline_result = !0; + } + if (JSCompiler_inline_result) { + JSCompiler_inline_result = console; + var JSCompiler_temp_const = JSCompiler_inline_result.error; + var JSCompiler_inline_result$jscomp$0 = + ("function" === typeof Symbol && + Symbol.toStringTag && + value[Symbol.toStringTag]) || + value.constructor.name || + "Object"; + JSCompiler_temp_const.call( + JSCompiler_inline_result, + "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", + JSCompiler_inline_result$jscomp$0 + ); + return testStringCoercion(value); + } + } + function getComponentNameFromType(type) { + if (null == type) return null; + if ("function" === typeof type) + return type.$$typeof === REACT_CLIENT_REFERENCE + ? null + : type.displayName || type.name || null; + if ("string" === typeof type) return type; + switch (type) { + case REACT_FRAGMENT_TYPE: + return "Fragment"; + case REACT_PROFILER_TYPE: + return "Profiler"; + case REACT_STRICT_MODE_TYPE: + return "StrictMode"; + case REACT_SUSPENSE_TYPE: + return "Suspense"; + case REACT_SUSPENSE_LIST_TYPE: + return "SuspenseList"; + case REACT_ACTIVITY_TYPE: + return "Activity"; + } + if ("object" === typeof type) + switch ( + ("number" === typeof type.tag && + console.error( + "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue." + ), + type.$$typeof) + ) { + case REACT_PORTAL_TYPE: + return "Portal"; + case REACT_CONTEXT_TYPE: + return type.displayName || "Context"; + case REACT_CONSUMER_TYPE: + return (type._context.displayName || "Context") + ".Consumer"; + case REACT_FORWARD_REF_TYPE: + var innerType = type.render; + type = type.displayName; + type || + ((type = innerType.displayName || innerType.name || ""), + (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef")); + return type; + case REACT_MEMO_TYPE: + return ( + (innerType = type.displayName || null), + null !== innerType + ? innerType + : getComponentNameFromType(type.type) || "Memo" + ); + case REACT_LAZY_TYPE: + innerType = type._payload; + type = type._init; + try { + return getComponentNameFromType(type(innerType)); + } catch (x) {} + } + return null; + } + function getTaskName(type) { + if (type === REACT_FRAGMENT_TYPE) return "<>"; + if ( + "object" === typeof type && + null !== type && + type.$$typeof === REACT_LAZY_TYPE + ) + return "<...>"; + try { + var name = getComponentNameFromType(type); + return name ? "<" + name + ">" : "<...>"; + } catch (x) { + return "<...>"; + } + } + function getOwner() { + var dispatcher = ReactSharedInternals.A; + return null === dispatcher ? null : dispatcher.getOwner(); + } + function UnknownOwner() { + return Error("react-stack-top-frame"); + } + function hasValidKey(config) { + if (hasOwnProperty.call(config, "key")) { + var getter = Object.getOwnPropertyDescriptor(config, "key").get; + if (getter && getter.isReactWarning) return !1; + } + return void 0 !== config.key; + } + function defineKeyPropWarningGetter(props, displayName) { + function warnAboutAccessingKey() { + specialPropKeyWarningShown || + ((specialPropKeyWarningShown = !0), + console.error( + "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", + displayName + )); + } + warnAboutAccessingKey.isReactWarning = !0; + Object.defineProperty(props, "key", { + get: warnAboutAccessingKey, + configurable: !0 + }); + } + function elementRefGetterWithDeprecationWarning() { + var componentName = getComponentNameFromType(this.type); + didWarnAboutElementRef[componentName] || + ((didWarnAboutElementRef[componentName] = !0), + console.error( + "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release." + )); + componentName = this.props.ref; + return void 0 !== componentName ? componentName : null; + } + function ReactElement(type, key, props, owner, debugStack, debugTask) { + var refProp = props.ref; + type = { + $$typeof: REACT_ELEMENT_TYPE, + type: type, + key: key, + props: props, + _owner: owner + }; + null !== (void 0 !== refProp ? refProp : null) + ? Object.defineProperty(type, "ref", { + enumerable: !1, + get: elementRefGetterWithDeprecationWarning + }) + : Object.defineProperty(type, "ref", { enumerable: !1, value: null }); + type._store = {}; + Object.defineProperty(type._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: 0 + }); + Object.defineProperty(type, "_debugInfo", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + Object.defineProperty(type, "_debugStack", { + configurable: !1, + enumerable: !1, + writable: !0, + value: debugStack + }); + Object.defineProperty(type, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: debugTask + }); + Object.freeze && (Object.freeze(type.props), Object.freeze(type)); + return type; + } + function cloneAndReplaceKey(oldElement, newKey) { + newKey = ReactElement( + oldElement.type, + newKey, + oldElement.props, + oldElement._owner, + oldElement._debugStack, + oldElement._debugTask + ); + oldElement._store && + (newKey._store.validated = oldElement._store.validated); + return newKey; + } + function validateChildKeys(node) { + isValidElement(node) + ? node._store && (node._store.validated = 1) + : "object" === typeof node && + null !== node && + node.$$typeof === REACT_LAZY_TYPE && + ("fulfilled" === node._payload.status + ? isValidElement(node._payload.value) && + node._payload.value._store && + (node._payload.value._store.validated = 1) + : node._store && (node._store.validated = 1)); + } + function isValidElement(object) { + return ( + "object" === typeof object && + null !== object && + object.$$typeof === REACT_ELEMENT_TYPE + ); + } + function escape(key) { + var escaperLookup = { "=": "=0", ":": "=2" }; + return ( + "$" + + key.replace(/[=:]/g, function (match) { + return escaperLookup[match]; + }) + ); + } + function getElementKey(element, index) { + return "object" === typeof element && + null !== element && + null != element.key + ? (checkKeyStringCoercion(element.key), escape("" + element.key)) + : index.toString(36); + } + function resolveThenable(thenable) { + switch (thenable.status) { + case "fulfilled": + return thenable.value; + case "rejected": + throw thenable.reason; + default: + switch ( + ("string" === typeof thenable.status + ? thenable.then(noop, noop) + : ((thenable.status = "pending"), + thenable.then( + function (fulfilledValue) { + "pending" === thenable.status && + ((thenable.status = "fulfilled"), + (thenable.value = fulfilledValue)); + }, + function (error) { + "pending" === thenable.status && + ((thenable.status = "rejected"), + (thenable.reason = error)); + } + )), + thenable.status) + ) { + case "fulfilled": + return thenable.value; + case "rejected": + throw thenable.reason; + } + } + throw thenable; + } + function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) { + var type = typeof children; + if ("undefined" === type || "boolean" === type) children = null; + var invokeCallback = !1; + if (null === children) invokeCallback = !0; + else + switch (type) { + case "bigint": + case "string": + case "number": + invokeCallback = !0; + break; + case "object": + switch (children.$$typeof) { + case REACT_ELEMENT_TYPE: + case REACT_PORTAL_TYPE: + invokeCallback = !0; + break; + case REACT_LAZY_TYPE: + return ( + (invokeCallback = children._init), + mapIntoArray( + invokeCallback(children._payload), + array, + escapedPrefix, + nameSoFar, + callback + ) + ); + } + } + if (invokeCallback) { + invokeCallback = children; + callback = callback(invokeCallback); + var childKey = + "" === nameSoFar ? "." + getElementKey(invokeCallback, 0) : nameSoFar; + isArrayImpl(callback) + ? ((escapedPrefix = ""), + null != childKey && + (escapedPrefix = + childKey.replace(userProvidedKeyEscapeRegex, "$&/") + "/"), + mapIntoArray(callback, array, escapedPrefix, "", function (c) { + return c; + })) + : null != callback && + (isValidElement(callback) && + (null != callback.key && + ((invokeCallback && invokeCallback.key === callback.key) || + checkKeyStringCoercion(callback.key)), + (escapedPrefix = cloneAndReplaceKey( + callback, + escapedPrefix + + (null == callback.key || + (invokeCallback && invokeCallback.key === callback.key) + ? "" + : ("" + callback.key).replace( + userProvidedKeyEscapeRegex, + "$&/" + ) + "/") + + childKey + )), + "" !== nameSoFar && + null != invokeCallback && + isValidElement(invokeCallback) && + null == invokeCallback.key && + invokeCallback._store && + !invokeCallback._store.validated && + (escapedPrefix._store.validated = 2), + (callback = escapedPrefix)), + array.push(callback)); + return 1; + } + invokeCallback = 0; + childKey = "" === nameSoFar ? "." : nameSoFar + ":"; + if (isArrayImpl(children)) + for (var i = 0; i < children.length; i++) + (nameSoFar = children[i]), + (type = childKey + getElementKey(nameSoFar, i)), + (invokeCallback += mapIntoArray( + nameSoFar, + array, + escapedPrefix, + type, + callback + )); + else if (((i = getIteratorFn(children)), "function" === typeof i)) + for ( + i === children.entries && + (didWarnAboutMaps || + console.warn( + "Using Maps as children is not supported. Use an array of keyed ReactElements instead." + ), + (didWarnAboutMaps = !0)), + children = i.call(children), + i = 0; + !(nameSoFar = children.next()).done; + + ) + (nameSoFar = nameSoFar.value), + (type = childKey + getElementKey(nameSoFar, i++)), + (invokeCallback += mapIntoArray( + nameSoFar, + array, + escapedPrefix, + type, + callback + )); + else if ("object" === type) { + if ("function" === typeof children.then) + return mapIntoArray( + resolveThenable(children), + array, + escapedPrefix, + nameSoFar, + callback + ); + array = String(children); + throw Error( + "Objects are not valid as a React child (found: " + + ("[object Object]" === array + ? "object with keys {" + Object.keys(children).join(", ") + "}" + : array) + + "). If you meant to render a collection of children, use an array instead." + ); + } + return invokeCallback; + } + function mapChildren(children, func, context) { + if (null == children) return children; + var result = [], + count = 0; + mapIntoArray(children, result, "", "", function (child) { + return func.call(context, child, count++); + }); + return result; + } + function lazyInitializer(payload) { + if (-1 === payload._status) { + var ioInfo = payload._ioInfo; + null != ioInfo && (ioInfo.start = ioInfo.end = performance.now()); + ioInfo = payload._result; + var thenable = ioInfo(); + thenable.then( + function (moduleObject) { + if (0 === payload._status || -1 === payload._status) { + payload._status = 1; + payload._result = moduleObject; + var _ioInfo = payload._ioInfo; + null != _ioInfo && (_ioInfo.end = performance.now()); + void 0 === thenable.status && + ((thenable.status = "fulfilled"), + (thenable.value = moduleObject)); + } + }, + function (error) { + if (0 === payload._status || -1 === payload._status) { + payload._status = 2; + payload._result = error; + var _ioInfo2 = payload._ioInfo; + null != _ioInfo2 && (_ioInfo2.end = performance.now()); + void 0 === thenable.status && + ((thenable.status = "rejected"), (thenable.reason = error)); + } + } + ); + ioInfo = payload._ioInfo; + if (null != ioInfo) { + ioInfo.value = thenable; + var displayName = thenable.displayName; + "string" === typeof displayName && (ioInfo.name = displayName); + } + -1 === payload._status && + ((payload._status = 0), (payload._result = thenable)); + } + if (1 === payload._status) + return ( + (ioInfo = payload._result), + void 0 === ioInfo && + console.error( + "lazy: Expected the result of a dynamic import() call. Instead received: %s\n\nYour code should look like: \n const MyComponent = lazy(() => import('./MyComponent'))\n\nDid you accidentally put curly braces around the import?", + ioInfo + ), + "default" in ioInfo || + console.error( + "lazy: Expected the result of a dynamic import() call. Instead received: %s\n\nYour code should look like: \n const MyComponent = lazy(() => import('./MyComponent'))", + ioInfo + ), + ioInfo.default + ); + throw payload._result; + } + function resolveDispatcher() { + var dispatcher = ReactSharedInternals.H; + null === dispatcher && + console.error( + "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem." + ); + return dispatcher; + } + function releaseAsyncTransition() { + ReactSharedInternals.asyncTransitions--; + } + function enqueueTask(task) { + if (null === enqueueTaskImpl) + try { + var requireString = ("require" + Math.random()).slice(0, 7); + enqueueTaskImpl = (module && module[requireString]).call( + module, + "timers" + ).setImmediate; + } catch (_err) { + enqueueTaskImpl = function (callback) { + !1 === didWarnAboutMessageChannel && + ((didWarnAboutMessageChannel = !0), + "undefined" === typeof MessageChannel && + console.error( + "This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning." + )); + var channel = new MessageChannel(); + channel.port1.onmessage = callback; + channel.port2.postMessage(void 0); + }; + } + return enqueueTaskImpl(task); + } + function aggregateErrors(errors) { + return 1 < errors.length && "function" === typeof AggregateError + ? new AggregateError(errors) + : errors[0]; + } + function popActScope(prevActQueue, prevActScopeDepth) { + prevActScopeDepth !== actScopeDepth - 1 && + console.error( + "You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. " + ); + actScopeDepth = prevActScopeDepth; + } + function recursivelyFlushAsyncActWork(returnValue, resolve, reject) { + var queue = ReactSharedInternals.actQueue; + if (null !== queue) + if (0 !== queue.length) + try { + flushActQueue(queue); + enqueueTask(function () { + return recursivelyFlushAsyncActWork(returnValue, resolve, reject); + }); + return; + } catch (error) { + ReactSharedInternals.thrownErrors.push(error); + } + else ReactSharedInternals.actQueue = null; + 0 < ReactSharedInternals.thrownErrors.length + ? ((queue = aggregateErrors(ReactSharedInternals.thrownErrors)), + (ReactSharedInternals.thrownErrors.length = 0), + reject(queue)) + : resolve(returnValue); + } + function flushActQueue(queue) { + if (!isFlushing) { + isFlushing = !0; + var i = 0; + try { + for (; i < queue.length; i++) { + var callback = queue[i]; + do { + ReactSharedInternals.didUsePromise = !1; + var continuation = callback(!1); + if (null !== continuation) { + if (ReactSharedInternals.didUsePromise) { + queue[i] = callback; + queue.splice(0, i); + return; + } + callback = continuation; + } else break; + } while (1); + } + queue.length = 0; + } catch (error) { + queue.splice(0, i + 1), ReactSharedInternals.thrownErrors.push(error); + } finally { + isFlushing = !1; + } + } + } + "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && + "function" === + typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && + __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); + var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), + REACT_PORTAL_TYPE = Symbol.for("react.portal"), + REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), + REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), + REACT_PROFILER_TYPE = Symbol.for("react.profiler"), + REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), + REACT_CONTEXT_TYPE = Symbol.for("react.context"), + REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), + REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), + REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), + REACT_MEMO_TYPE = Symbol.for("react.memo"), + REACT_LAZY_TYPE = Symbol.for("react.lazy"), + REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), + MAYBE_ITERATOR_SYMBOL = Symbol.iterator, + didWarnStateUpdateForUnmountedComponent = {}, + ReactNoopUpdateQueue = { + isMounted: function () { + return !1; + }, + enqueueForceUpdate: function (publicInstance) { + warnNoop(publicInstance, "forceUpdate"); + }, + enqueueReplaceState: function (publicInstance) { + warnNoop(publicInstance, "replaceState"); + }, + enqueueSetState: function (publicInstance) { + warnNoop(publicInstance, "setState"); + } + }, + assign = Object.assign, + emptyObject = {}; + Object.freeze(emptyObject); + Component.prototype.isReactComponent = {}; + Component.prototype.setState = function (partialState, callback) { + if ( + "object" !== typeof partialState && + "function" !== typeof partialState && + null != partialState + ) + throw Error( + "takes an object of state variables to update or a function which returns an object of state variables." + ); + this.updater.enqueueSetState(this, partialState, callback, "setState"); + }; + Component.prototype.forceUpdate = function (callback) { + this.updater.enqueueForceUpdate(this, callback, "forceUpdate"); + }; + var deprecatedAPIs = { + isMounted: [ + "isMounted", + "Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks." + ], + replaceState: [ + "replaceState", + "Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236)." + ] + }; + for (fnName in deprecatedAPIs) + deprecatedAPIs.hasOwnProperty(fnName) && + defineDeprecationWarning(fnName, deprecatedAPIs[fnName]); + ComponentDummy.prototype = Component.prototype; + deprecatedAPIs = PureComponent.prototype = new ComponentDummy(); + deprecatedAPIs.constructor = PureComponent; + assign(deprecatedAPIs, Component.prototype); + deprecatedAPIs.isPureReactComponent = !0; + var isArrayImpl = Array.isArray, + REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), + ReactSharedInternals = { + H: null, + A: null, + T: null, + S: null, + actQueue: null, + asyncTransitions: 0, + isBatchingLegacy: !1, + didScheduleLegacyUpdate: !1, + didUsePromise: !1, + thrownErrors: [], + getCurrentStack: null, + recentlyCreatedOwnerStacks: 0 + }, + hasOwnProperty = Object.prototype.hasOwnProperty, + createTask = console.createTask + ? console.createTask + : function () { + return null; + }; + deprecatedAPIs = { + react_stack_bottom_frame: function (callStackForError) { + return callStackForError(); + } + }; + var specialPropKeyWarningShown, didWarnAboutOldJSXRuntime; + var didWarnAboutElementRef = {}; + var unknownOwnerDebugStack = deprecatedAPIs.react_stack_bottom_frame.bind( + deprecatedAPIs, + UnknownOwner + )(); + var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner)); + var didWarnAboutMaps = !1, + userProvidedKeyEscapeRegex = /\/+/g, + reportGlobalError = + "function" === typeof reportError + ? reportError + : function (error) { + if ( + "object" === typeof window && + "function" === typeof window.ErrorEvent + ) { + var event = new window.ErrorEvent("error", { + bubbles: !0, + cancelable: !0, + message: + "object" === typeof error && + null !== error && + "string" === typeof error.message + ? String(error.message) + : String(error), + error: error + }); + if (!window.dispatchEvent(event)) return; + } else if ( + "object" === typeof process && + "function" === typeof process.emit + ) { + process.emit("uncaughtException", error); + return; + } + console.error(error); + }, + didWarnAboutMessageChannel = !1, + enqueueTaskImpl = null, + actScopeDepth = 0, + didWarnNoAwaitAct = !1, + isFlushing = !1, + queueSeveralMicrotasks = + "function" === typeof queueMicrotask + ? function (callback) { + queueMicrotask(function () { + return queueMicrotask(callback); + }); + } + : enqueueTask; + deprecatedAPIs = Object.freeze({ + __proto__: null, + c: function (size) { + return resolveDispatcher().useMemoCache(size); + } + }); + var fnName = { + map: mapChildren, + forEach: function (children, forEachFunc, forEachContext) { + mapChildren( + children, + function () { + forEachFunc.apply(this, arguments); + }, + forEachContext + ); + }, + count: function (children) { + var n = 0; + mapChildren(children, function () { + n++; + }); + return n; + }, + toArray: function (children) { + return ( + mapChildren(children, function (child) { + return child; + }) || [] + ); + }, + only: function (children) { + if (!isValidElement(children)) + throw Error( + "React.Children.only expected to receive a single React element child." + ); + return children; + } + }; + exports.Activity = REACT_ACTIVITY_TYPE; + exports.Children = fnName; + exports.Component = Component; + exports.Fragment = REACT_FRAGMENT_TYPE; + exports.Profiler = REACT_PROFILER_TYPE; + exports.PureComponent = PureComponent; + exports.StrictMode = REACT_STRICT_MODE_TYPE; + exports.Suspense = REACT_SUSPENSE_TYPE; + exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = + ReactSharedInternals; + exports.__COMPILER_RUNTIME = deprecatedAPIs; + exports.act = function (callback) { + var prevActQueue = ReactSharedInternals.actQueue, + prevActScopeDepth = actScopeDepth; + actScopeDepth++; + var queue = (ReactSharedInternals.actQueue = + null !== prevActQueue ? prevActQueue : []), + didAwaitActCall = !1; + try { + var result = callback(); + } catch (error) { + ReactSharedInternals.thrownErrors.push(error); + } + if (0 < ReactSharedInternals.thrownErrors.length) + throw ( + (popActScope(prevActQueue, prevActScopeDepth), + (callback = aggregateErrors(ReactSharedInternals.thrownErrors)), + (ReactSharedInternals.thrownErrors.length = 0), + callback) + ); + if ( + null !== result && + "object" === typeof result && + "function" === typeof result.then + ) { + var thenable = result; + queueSeveralMicrotasks(function () { + didAwaitActCall || + didWarnNoAwaitAct || + ((didWarnNoAwaitAct = !0), + console.error( + "You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);" + )); + }); + return { + then: function (resolve, reject) { + didAwaitActCall = !0; + thenable.then( + function (returnValue) { + popActScope(prevActQueue, prevActScopeDepth); + if (0 === prevActScopeDepth) { + try { + flushActQueue(queue), + enqueueTask(function () { + return recursivelyFlushAsyncActWork( + returnValue, + resolve, + reject + ); + }); + } catch (error$0) { + ReactSharedInternals.thrownErrors.push(error$0); + } + if (0 < ReactSharedInternals.thrownErrors.length) { + var _thrownError = aggregateErrors( + ReactSharedInternals.thrownErrors + ); + ReactSharedInternals.thrownErrors.length = 0; + reject(_thrownError); + } + } else resolve(returnValue); + }, + function (error) { + popActScope(prevActQueue, prevActScopeDepth); + 0 < ReactSharedInternals.thrownErrors.length + ? ((error = aggregateErrors( + ReactSharedInternals.thrownErrors + )), + (ReactSharedInternals.thrownErrors.length = 0), + reject(error)) + : reject(error); + } + ); + } + }; + } + var returnValue$jscomp$0 = result; + popActScope(prevActQueue, prevActScopeDepth); + 0 === prevActScopeDepth && + (flushActQueue(queue), + 0 !== queue.length && + queueSeveralMicrotasks(function () { + didAwaitActCall || + didWarnNoAwaitAct || + ((didWarnNoAwaitAct = !0), + console.error( + "A component suspended inside an `act` scope, but the `act` call was not awaited. When testing React components that depend on asynchronous data, you must await the result:\n\nawait act(() => ...)" + )); + }), + (ReactSharedInternals.actQueue = null)); + if (0 < ReactSharedInternals.thrownErrors.length) + throw ( + ((callback = aggregateErrors(ReactSharedInternals.thrownErrors)), + (ReactSharedInternals.thrownErrors.length = 0), + callback) + ); + return { + then: function (resolve, reject) { + didAwaitActCall = !0; + 0 === prevActScopeDepth + ? ((ReactSharedInternals.actQueue = queue), + enqueueTask(function () { + return recursivelyFlushAsyncActWork( + returnValue$jscomp$0, + resolve, + reject + ); + })) + : resolve(returnValue$jscomp$0); + } + }; + }; + exports.cache = function (fn) { + return function () { + return fn.apply(null, arguments); + }; + }; + exports.cacheSignal = function () { + return null; + }; + exports.captureOwnerStack = function () { + var getCurrentStack = ReactSharedInternals.getCurrentStack; + return null === getCurrentStack ? null : getCurrentStack(); + }; + exports.cloneElement = function (element, config, children) { + if (null === element || void 0 === element) + throw Error( + "The argument must be a React element, but you passed " + + element + + "." + ); + var props = assign({}, element.props), + key = element.key, + owner = element._owner; + if (null != config) { + var JSCompiler_inline_result; + a: { + if ( + hasOwnProperty.call(config, "ref") && + (JSCompiler_inline_result = Object.getOwnPropertyDescriptor( + config, + "ref" + ).get) && + JSCompiler_inline_result.isReactWarning + ) { + JSCompiler_inline_result = !1; + break a; + } + JSCompiler_inline_result = void 0 !== config.ref; + } + JSCompiler_inline_result && (owner = getOwner()); + hasValidKey(config) && + (checkKeyStringCoercion(config.key), (key = "" + config.key)); + for (propName in config) + !hasOwnProperty.call(config, propName) || + "key" === propName || + "__self" === propName || + "__source" === propName || + ("ref" === propName && void 0 === config.ref) || + (props[propName] = config[propName]); + } + var propName = arguments.length - 2; + if (1 === propName) props.children = children; + else if (1 < propName) { + JSCompiler_inline_result = Array(propName); + for (var i = 0; i < propName; i++) + JSCompiler_inline_result[i] = arguments[i + 2]; + props.children = JSCompiler_inline_result; + } + props = ReactElement( + element.type, + key, + props, + owner, + element._debugStack, + element._debugTask + ); + for (key = 2; key < arguments.length; key++) + validateChildKeys(arguments[key]); + return props; + }; + exports.createContext = function (defaultValue) { + defaultValue = { + $$typeof: REACT_CONTEXT_TYPE, + _currentValue: defaultValue, + _currentValue2: defaultValue, + _threadCount: 0, + Provider: null, + Consumer: null + }; + defaultValue.Provider = defaultValue; + defaultValue.Consumer = { + $$typeof: REACT_CONSUMER_TYPE, + _context: defaultValue + }; + defaultValue._currentRenderer = null; + defaultValue._currentRenderer2 = null; + return defaultValue; + }; + exports.createElement = function (type, config, children) { + for (var i = 2; i < arguments.length; i++) + validateChildKeys(arguments[i]); + i = {}; + var key = null; + if (null != config) + for (propName in (didWarnAboutOldJSXRuntime || + !("__self" in config) || + "key" in config || + ((didWarnAboutOldJSXRuntime = !0), + console.warn( + "Your app (or one of its dependencies) is using an outdated JSX transform. Update to the modern JSX transform for faster performance: https://react.dev/link/new-jsx-transform" + )), + hasValidKey(config) && + (checkKeyStringCoercion(config.key), (key = "" + config.key)), + config)) + hasOwnProperty.call(config, propName) && + "key" !== propName && + "__self" !== propName && + "__source" !== propName && + (i[propName] = config[propName]); + var childrenLength = arguments.length - 2; + if (1 === childrenLength) i.children = children; + else if (1 < childrenLength) { + for ( + var childArray = Array(childrenLength), _i = 0; + _i < childrenLength; + _i++ + ) + childArray[_i] = arguments[_i + 2]; + Object.freeze && Object.freeze(childArray); + i.children = childArray; + } + if (type && type.defaultProps) + for (propName in ((childrenLength = type.defaultProps), childrenLength)) + void 0 === i[propName] && (i[propName] = childrenLength[propName]); + key && + defineKeyPropWarningGetter( + i, + "function" === typeof type + ? type.displayName || type.name || "Unknown" + : type + ); + var propName = 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++; + return ReactElement( + type, + key, + i, + getOwner(), + propName ? Error("react-stack-top-frame") : unknownOwnerDebugStack, + propName ? createTask(getTaskName(type)) : unknownOwnerDebugTask + ); + }; + exports.createRef = function () { + var refObject = { current: null }; + Object.seal(refObject); + return refObject; + }; + exports.forwardRef = function (render) { + null != render && render.$$typeof === REACT_MEMO_TYPE + ? console.error( + "forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))." + ) + : "function" !== typeof render + ? console.error( + "forwardRef requires a render function but was given %s.", + null === render ? "null" : typeof render + ) + : 0 !== render.length && + 2 !== render.length && + console.error( + "forwardRef render functions accept exactly two parameters: props and ref. %s", + 1 === render.length + ? "Did you forget to use the ref parameter?" + : "Any additional parameter will be undefined." + ); + null != render && + null != render.defaultProps && + console.error( + "forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?" + ); + var elementType = { $$typeof: REACT_FORWARD_REF_TYPE, render: render }, + ownName; + Object.defineProperty(elementType, "displayName", { + enumerable: !1, + configurable: !0, + get: function () { + return ownName; + }, + set: function (name) { + ownName = name; + render.name || + render.displayName || + (Object.defineProperty(render, "name", { value: name }), + (render.displayName = name)); + } + }); + return elementType; + }; + exports.isValidElement = isValidElement; + exports.lazy = function (ctor) { + ctor = { _status: -1, _result: ctor }; + var lazyType = { + $$typeof: REACT_LAZY_TYPE, + _payload: ctor, + _init: lazyInitializer + }, + ioInfo = { + name: "lazy", + start: -1, + end: -1, + value: null, + owner: null, + debugStack: Error("react-stack-top-frame"), + debugTask: console.createTask ? console.createTask("lazy()") : null + }; + ctor._ioInfo = ioInfo; + lazyType._debugInfo = [{ awaited: ioInfo }]; + return lazyType; + }; + exports.memo = function (type, compare) { + null == type && + console.error( + "memo: The first argument must be a component. Instead received: %s", + null === type ? "null" : typeof type + ); + compare = { + $$typeof: REACT_MEMO_TYPE, + type: type, + compare: void 0 === compare ? null : compare + }; + var ownName; + Object.defineProperty(compare, "displayName", { + enumerable: !1, + configurable: !0, + get: function () { + return ownName; + }, + set: function (name) { + ownName = name; + type.name || + type.displayName || + (Object.defineProperty(type, "name", { value: name }), + (type.displayName = name)); + } + }); + return compare; + }; + exports.startTransition = function (scope) { + var prevTransition = ReactSharedInternals.T, + currentTransition = {}; + currentTransition._updatedFibers = new Set(); + ReactSharedInternals.T = currentTransition; + try { + var returnValue = scope(), + onStartTransitionFinish = ReactSharedInternals.S; + null !== onStartTransitionFinish && + onStartTransitionFinish(currentTransition, returnValue); + "object" === typeof returnValue && + null !== returnValue && + "function" === typeof returnValue.then && + (ReactSharedInternals.asyncTransitions++, + returnValue.then(releaseAsyncTransition, releaseAsyncTransition), + returnValue.then(noop, reportGlobalError)); + } catch (error) { + reportGlobalError(error); + } finally { + null === prevTransition && + currentTransition._updatedFibers && + ((scope = currentTransition._updatedFibers.size), + currentTransition._updatedFibers.clear(), + 10 < scope && + console.warn( + "Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table." + )), + null !== prevTransition && + null !== currentTransition.types && + (null !== prevTransition.types && + prevTransition.types !== currentTransition.types && + console.error( + "We expected inner Transitions to have transferred the outer types set and that you cannot add to the outer Transition while inside the inner.This is a bug in React." + ), + (prevTransition.types = currentTransition.types)), + (ReactSharedInternals.T = prevTransition); + } + }; + exports.unstable_useCacheRefresh = function () { + return resolveDispatcher().useCacheRefresh(); + }; + exports.use = function (usable) { + return resolveDispatcher().use(usable); + }; + exports.useActionState = function (action, initialState, permalink) { + return resolveDispatcher().useActionState( + action, + initialState, + permalink + ); + }; + exports.useCallback = function (callback, deps) { + return resolveDispatcher().useCallback(callback, deps); + }; + exports.useContext = function (Context) { + var dispatcher = resolveDispatcher(); + Context.$$typeof === REACT_CONSUMER_TYPE && + console.error( + "Calling useContext(Context.Consumer) is not supported and will cause bugs. Did you mean to call useContext(Context) instead?" + ); + return dispatcher.useContext(Context); + }; + exports.useDebugValue = function (value, formatterFn) { + return resolveDispatcher().useDebugValue(value, formatterFn); + }; + exports.useDeferredValue = function (value, initialValue) { + return resolveDispatcher().useDeferredValue(value, initialValue); + }; + exports.useEffect = function (create, deps) { + null == create && + console.warn( + "React Hook useEffect requires an effect callback. Did you forget to pass a callback to the hook?" + ); + return resolveDispatcher().useEffect(create, deps); + }; + exports.useEffectEvent = function (callback) { + return resolveDispatcher().useEffectEvent(callback); + }; + exports.useId = function () { + return resolveDispatcher().useId(); + }; + exports.useImperativeHandle = function (ref, create, deps) { + return resolveDispatcher().useImperativeHandle(ref, create, deps); + }; + exports.useInsertionEffect = function (create, deps) { + null == create && + console.warn( + "React Hook useInsertionEffect requires an effect callback. Did you forget to pass a callback to the hook?" + ); + return resolveDispatcher().useInsertionEffect(create, deps); + }; + exports.useLayoutEffect = function (create, deps) { + null == create && + console.warn( + "React Hook useLayoutEffect requires an effect callback. Did you forget to pass a callback to the hook?" + ); + return resolveDispatcher().useLayoutEffect(create, deps); + }; + exports.useMemo = function (create, deps) { + return resolveDispatcher().useMemo(create, deps); + }; + exports.useOptimistic = function (passthrough, reducer) { + return resolveDispatcher().useOptimistic(passthrough, reducer); + }; + exports.useReducer = function (reducer, initialArg, init) { + return resolveDispatcher().useReducer(reducer, initialArg, init); + }; + exports.useRef = function (initialValue) { + return resolveDispatcher().useRef(initialValue); + }; + exports.useState = function (initialState) { + return resolveDispatcher().useState(initialState); + }; + exports.useSyncExternalStore = function ( + subscribe, + getSnapshot, + getServerSnapshot + ) { + return resolveDispatcher().useSyncExternalStore( + subscribe, + getSnapshot, + getServerSnapshot + ); + }; + exports.useTransition = function () { + return resolveDispatcher().useTransition(); + }; + exports.version = "19.2.4"; + "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && + "function" === + typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && + __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); + })(); diff --git a/build/node_modules/react/cjs/react.production.js b/build/node_modules/react/cjs/react.production.js new file mode 100644 index 0000000..28eed1e --- /dev/null +++ b/build/node_modules/react/cjs/react.production.js @@ -0,0 +1,542 @@ +/** + * @license React + * react.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; +var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), + REACT_PORTAL_TYPE = Symbol.for("react.portal"), + REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), + REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), + REACT_PROFILER_TYPE = Symbol.for("react.profiler"), + REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), + REACT_CONTEXT_TYPE = Symbol.for("react.context"), + REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), + REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), + REACT_MEMO_TYPE = Symbol.for("react.memo"), + REACT_LAZY_TYPE = Symbol.for("react.lazy"), + REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), + MAYBE_ITERATOR_SYMBOL = Symbol.iterator; +function getIteratorFn(maybeIterable) { + if (null === maybeIterable || "object" !== typeof maybeIterable) return null; + maybeIterable = + (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) || + maybeIterable["@@iterator"]; + return "function" === typeof maybeIterable ? maybeIterable : null; +} +var ReactNoopUpdateQueue = { + isMounted: function () { + return !1; + }, + enqueueForceUpdate: function () {}, + enqueueReplaceState: function () {}, + enqueueSetState: function () {} + }, + assign = Object.assign, + emptyObject = {}; +function Component(props, context, updater) { + this.props = props; + this.context = context; + this.refs = emptyObject; + this.updater = updater || ReactNoopUpdateQueue; +} +Component.prototype.isReactComponent = {}; +Component.prototype.setState = function (partialState, callback) { + if ( + "object" !== typeof partialState && + "function" !== typeof partialState && + null != partialState + ) + throw Error( + "takes an object of state variables to update or a function which returns an object of state variables." + ); + this.updater.enqueueSetState(this, partialState, callback, "setState"); +}; +Component.prototype.forceUpdate = function (callback) { + this.updater.enqueueForceUpdate(this, callback, "forceUpdate"); +}; +function ComponentDummy() {} +ComponentDummy.prototype = Component.prototype; +function PureComponent(props, context, updater) { + this.props = props; + this.context = context; + this.refs = emptyObject; + this.updater = updater || ReactNoopUpdateQueue; +} +var pureComponentPrototype = (PureComponent.prototype = new ComponentDummy()); +pureComponentPrototype.constructor = PureComponent; +assign(pureComponentPrototype, Component.prototype); +pureComponentPrototype.isPureReactComponent = !0; +var isArrayImpl = Array.isArray; +function noop() {} +var ReactSharedInternals = { H: null, A: null, T: null, S: null }, + hasOwnProperty = Object.prototype.hasOwnProperty; +function ReactElement(type, key, props) { + var refProp = props.ref; + return { + $$typeof: REACT_ELEMENT_TYPE, + type: type, + key: key, + ref: void 0 !== refProp ? refProp : null, + props: props + }; +} +function cloneAndReplaceKey(oldElement, newKey) { + return ReactElement(oldElement.type, newKey, oldElement.props); +} +function isValidElement(object) { + return ( + "object" === typeof object && + null !== object && + object.$$typeof === REACT_ELEMENT_TYPE + ); +} +function escape(key) { + var escaperLookup = { "=": "=0", ":": "=2" }; + return ( + "$" + + key.replace(/[=:]/g, function (match) { + return escaperLookup[match]; + }) + ); +} +var userProvidedKeyEscapeRegex = /\/+/g; +function getElementKey(element, index) { + return "object" === typeof element && null !== element && null != element.key + ? escape("" + element.key) + : index.toString(36); +} +function resolveThenable(thenable) { + switch (thenable.status) { + case "fulfilled": + return thenable.value; + case "rejected": + throw thenable.reason; + default: + switch ( + ("string" === typeof thenable.status + ? thenable.then(noop, noop) + : ((thenable.status = "pending"), + thenable.then( + function (fulfilledValue) { + "pending" === thenable.status && + ((thenable.status = "fulfilled"), + (thenable.value = fulfilledValue)); + }, + function (error) { + "pending" === thenable.status && + ((thenable.status = "rejected"), (thenable.reason = error)); + } + )), + thenable.status) + ) { + case "fulfilled": + return thenable.value; + case "rejected": + throw thenable.reason; + } + } + throw thenable; +} +function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) { + var type = typeof children; + if ("undefined" === type || "boolean" === type) children = null; + var invokeCallback = !1; + if (null === children) invokeCallback = !0; + else + switch (type) { + case "bigint": + case "string": + case "number": + invokeCallback = !0; + break; + case "object": + switch (children.$$typeof) { + case REACT_ELEMENT_TYPE: + case REACT_PORTAL_TYPE: + invokeCallback = !0; + break; + case REACT_LAZY_TYPE: + return ( + (invokeCallback = children._init), + mapIntoArray( + invokeCallback(children._payload), + array, + escapedPrefix, + nameSoFar, + callback + ) + ); + } + } + if (invokeCallback) + return ( + (callback = callback(children)), + (invokeCallback = + "" === nameSoFar ? "." + getElementKey(children, 0) : nameSoFar), + isArrayImpl(callback) + ? ((escapedPrefix = ""), + null != invokeCallback && + (escapedPrefix = + invokeCallback.replace(userProvidedKeyEscapeRegex, "$&/") + "/"), + mapIntoArray(callback, array, escapedPrefix, "", function (c) { + return c; + })) + : null != callback && + (isValidElement(callback) && + (callback = cloneAndReplaceKey( + callback, + escapedPrefix + + (null == callback.key || + (children && children.key === callback.key) + ? "" + : ("" + callback.key).replace( + userProvidedKeyEscapeRegex, + "$&/" + ) + "/") + + invokeCallback + )), + array.push(callback)), + 1 + ); + invokeCallback = 0; + var nextNamePrefix = "" === nameSoFar ? "." : nameSoFar + ":"; + if (isArrayImpl(children)) + for (var i = 0; i < children.length; i++) + (nameSoFar = children[i]), + (type = nextNamePrefix + getElementKey(nameSoFar, i)), + (invokeCallback += mapIntoArray( + nameSoFar, + array, + escapedPrefix, + type, + callback + )); + else if (((i = getIteratorFn(children)), "function" === typeof i)) + for ( + children = i.call(children), i = 0; + !(nameSoFar = children.next()).done; + + ) + (nameSoFar = nameSoFar.value), + (type = nextNamePrefix + getElementKey(nameSoFar, i++)), + (invokeCallback += mapIntoArray( + nameSoFar, + array, + escapedPrefix, + type, + callback + )); + else if ("object" === type) { + if ("function" === typeof children.then) + return mapIntoArray( + resolveThenable(children), + array, + escapedPrefix, + nameSoFar, + callback + ); + array = String(children); + throw Error( + "Objects are not valid as a React child (found: " + + ("[object Object]" === array + ? "object with keys {" + Object.keys(children).join(", ") + "}" + : array) + + "). If you meant to render a collection of children, use an array instead." + ); + } + return invokeCallback; +} +function mapChildren(children, func, context) { + if (null == children) return children; + var result = [], + count = 0; + mapIntoArray(children, result, "", "", function (child) { + return func.call(context, child, count++); + }); + return result; +} +function lazyInitializer(payload) { + if (-1 === payload._status) { + var ctor = payload._result; + ctor = ctor(); + ctor.then( + function (moduleObject) { + if (0 === payload._status || -1 === payload._status) + (payload._status = 1), (payload._result = moduleObject); + }, + function (error) { + if (0 === payload._status || -1 === payload._status) + (payload._status = 2), (payload._result = error); + } + ); + -1 === payload._status && ((payload._status = 0), (payload._result = ctor)); + } + if (1 === payload._status) return payload._result.default; + throw payload._result; +} +var reportGlobalError = + "function" === typeof reportError + ? reportError + : function (error) { + if ( + "object" === typeof window && + "function" === typeof window.ErrorEvent + ) { + var event = new window.ErrorEvent("error", { + bubbles: !0, + cancelable: !0, + message: + "object" === typeof error && + null !== error && + "string" === typeof error.message + ? String(error.message) + : String(error), + error: error + }); + if (!window.dispatchEvent(event)) return; + } else if ( + "object" === typeof process && + "function" === typeof process.emit + ) { + process.emit("uncaughtException", error); + return; + } + console.error(error); + }, + Children = { + map: mapChildren, + forEach: function (children, forEachFunc, forEachContext) { + mapChildren( + children, + function () { + forEachFunc.apply(this, arguments); + }, + forEachContext + ); + }, + count: function (children) { + var n = 0; + mapChildren(children, function () { + n++; + }); + return n; + }, + toArray: function (children) { + return ( + mapChildren(children, function (child) { + return child; + }) || [] + ); + }, + only: function (children) { + if (!isValidElement(children)) + throw Error( + "React.Children.only expected to receive a single React element child." + ); + return children; + } + }; +exports.Activity = REACT_ACTIVITY_TYPE; +exports.Children = Children; +exports.Component = Component; +exports.Fragment = REACT_FRAGMENT_TYPE; +exports.Profiler = REACT_PROFILER_TYPE; +exports.PureComponent = PureComponent; +exports.StrictMode = REACT_STRICT_MODE_TYPE; +exports.Suspense = REACT_SUSPENSE_TYPE; +exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = + ReactSharedInternals; +exports.__COMPILER_RUNTIME = { + __proto__: null, + c: function (size) { + return ReactSharedInternals.H.useMemoCache(size); + } +}; +exports.cache = function (fn) { + return function () { + return fn.apply(null, arguments); + }; +}; +exports.cacheSignal = function () { + return null; +}; +exports.cloneElement = function (element, config, children) { + if (null === element || void 0 === element) + throw Error( + "The argument must be a React element, but you passed " + element + "." + ); + var props = assign({}, element.props), + key = element.key; + if (null != config) + for (propName in (void 0 !== config.key && (key = "" + config.key), config)) + !hasOwnProperty.call(config, propName) || + "key" === propName || + "__self" === propName || + "__source" === propName || + ("ref" === propName && void 0 === config.ref) || + (props[propName] = config[propName]); + var propName = arguments.length - 2; + if (1 === propName) props.children = children; + else if (1 < propName) { + for (var childArray = Array(propName), i = 0; i < propName; i++) + childArray[i] = arguments[i + 2]; + props.children = childArray; + } + return ReactElement(element.type, key, props); +}; +exports.createContext = function (defaultValue) { + defaultValue = { + $$typeof: REACT_CONTEXT_TYPE, + _currentValue: defaultValue, + _currentValue2: defaultValue, + _threadCount: 0, + Provider: null, + Consumer: null + }; + defaultValue.Provider = defaultValue; + defaultValue.Consumer = { + $$typeof: REACT_CONSUMER_TYPE, + _context: defaultValue + }; + return defaultValue; +}; +exports.createElement = function (type, config, children) { + var propName, + props = {}, + key = null; + if (null != config) + for (propName in (void 0 !== config.key && (key = "" + config.key), config)) + hasOwnProperty.call(config, propName) && + "key" !== propName && + "__self" !== propName && + "__source" !== propName && + (props[propName] = config[propName]); + var childrenLength = arguments.length - 2; + if (1 === childrenLength) props.children = children; + else if (1 < childrenLength) { + for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++) + childArray[i] = arguments[i + 2]; + props.children = childArray; + } + if (type && type.defaultProps) + for (propName in ((childrenLength = type.defaultProps), childrenLength)) + void 0 === props[propName] && + (props[propName] = childrenLength[propName]); + return ReactElement(type, key, props); +}; +exports.createRef = function () { + return { current: null }; +}; +exports.forwardRef = function (render) { + return { $$typeof: REACT_FORWARD_REF_TYPE, render: render }; +}; +exports.isValidElement = isValidElement; +exports.lazy = function (ctor) { + return { + $$typeof: REACT_LAZY_TYPE, + _payload: { _status: -1, _result: ctor }, + _init: lazyInitializer + }; +}; +exports.memo = function (type, compare) { + return { + $$typeof: REACT_MEMO_TYPE, + type: type, + compare: void 0 === compare ? null : compare + }; +}; +exports.startTransition = function (scope) { + var prevTransition = ReactSharedInternals.T, + currentTransition = {}; + ReactSharedInternals.T = currentTransition; + try { + var returnValue = scope(), + onStartTransitionFinish = ReactSharedInternals.S; + null !== onStartTransitionFinish && + onStartTransitionFinish(currentTransition, returnValue); + "object" === typeof returnValue && + null !== returnValue && + "function" === typeof returnValue.then && + returnValue.then(noop, reportGlobalError); + } catch (error) { + reportGlobalError(error); + } finally { + null !== prevTransition && + null !== currentTransition.types && + (prevTransition.types = currentTransition.types), + (ReactSharedInternals.T = prevTransition); + } +}; +exports.unstable_useCacheRefresh = function () { + return ReactSharedInternals.H.useCacheRefresh(); +}; +exports.use = function (usable) { + return ReactSharedInternals.H.use(usable); +}; +exports.useActionState = function (action, initialState, permalink) { + return ReactSharedInternals.H.useActionState(action, initialState, permalink); +}; +exports.useCallback = function (callback, deps) { + return ReactSharedInternals.H.useCallback(callback, deps); +}; +exports.useContext = function (Context) { + return ReactSharedInternals.H.useContext(Context); +}; +exports.useDebugValue = function () {}; +exports.useDeferredValue = function (value, initialValue) { + return ReactSharedInternals.H.useDeferredValue(value, initialValue); +}; +exports.useEffect = function (create, deps) { + return ReactSharedInternals.H.useEffect(create, deps); +}; +exports.useEffectEvent = function (callback) { + return ReactSharedInternals.H.useEffectEvent(callback); +}; +exports.useId = function () { + return ReactSharedInternals.H.useId(); +}; +exports.useImperativeHandle = function (ref, create, deps) { + return ReactSharedInternals.H.useImperativeHandle(ref, create, deps); +}; +exports.useInsertionEffect = function (create, deps) { + return ReactSharedInternals.H.useInsertionEffect(create, deps); +}; +exports.useLayoutEffect = function (create, deps) { + return ReactSharedInternals.H.useLayoutEffect(create, deps); +}; +exports.useMemo = function (create, deps) { + return ReactSharedInternals.H.useMemo(create, deps); +}; +exports.useOptimistic = function (passthrough, reducer) { + return ReactSharedInternals.H.useOptimistic(passthrough, reducer); +}; +exports.useReducer = function (reducer, initialArg, init) { + return ReactSharedInternals.H.useReducer(reducer, initialArg, init); +}; +exports.useRef = function (initialValue) { + return ReactSharedInternals.H.useRef(initialValue); +}; +exports.useState = function (initialState) { + return ReactSharedInternals.H.useState(initialState); +}; +exports.useSyncExternalStore = function ( + subscribe, + getSnapshot, + getServerSnapshot +) { + return ReactSharedInternals.H.useSyncExternalStore( + subscribe, + getSnapshot, + getServerSnapshot + ); +}; +exports.useTransition = function () { + return ReactSharedInternals.H.useTransition(); +}; +exports.version = "19.2.4"; diff --git a/build/node_modules/react/compiler-runtime.js b/build/node_modules/react/compiler-runtime.js new file mode 100644 index 0000000..ab6aabb --- /dev/null +++ b/build/node_modules/react/compiler-runtime.js @@ -0,0 +1,14 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +'use strict'; + +if (process.env.NODE_ENV === 'production') { + module.exports = require('./cjs/react-compiler-runtime.production.js'); +} else { + module.exports = require('./cjs/react-compiler-runtime.development.js'); +} diff --git a/build/node_modules/react/index.js b/build/node_modules/react/index.js new file mode 100644 index 0000000..d830d7a --- /dev/null +++ b/build/node_modules/react/index.js @@ -0,0 +1,7 @@ +'use strict'; + +if (process.env.NODE_ENV === 'production') { + module.exports = require('./cjs/react.production.js'); +} else { + module.exports = require('./cjs/react.development.js'); +} diff --git a/build/node_modules/react/jsx-dev-runtime.js b/build/node_modules/react/jsx-dev-runtime.js new file mode 100644 index 0000000..0a80857 --- /dev/null +++ b/build/node_modules/react/jsx-dev-runtime.js @@ -0,0 +1,7 @@ +'use strict'; + +if (process.env.NODE_ENV === 'production') { + module.exports = require('./cjs/react-jsx-dev-runtime.production.js'); +} else { + module.exports = require('./cjs/react-jsx-dev-runtime.development.js'); +} diff --git a/build/node_modules/react/jsx-runtime.js b/build/node_modules/react/jsx-runtime.js new file mode 100644 index 0000000..8679b72 --- /dev/null +++ b/build/node_modules/react/jsx-runtime.js @@ -0,0 +1,7 @@ +'use strict'; + +if (process.env.NODE_ENV === 'production') { + module.exports = require('./cjs/react-jsx-runtime.production.js'); +} else { + module.exports = require('./cjs/react-jsx-runtime.development.js'); +} diff --git a/build/node_modules/react/package.json b/build/node_modules/react/package.json new file mode 100644 index 0000000..da45a9d --- /dev/null +++ b/build/node_modules/react/package.json @@ -0,0 +1,51 @@ +{ + "name": "react", + "description": "React is a JavaScript library for building user interfaces.", + "keywords": [ + "react" + ], + "version": "19.2.4", + "homepage": "https://react.dev/", + "bugs": "https://github.com/facebook/react/issues", + "license": "MIT", + "files": [ + "LICENSE", + "README.md", + "index.js", + "cjs/", + "compiler-runtime.js", + "jsx-runtime.js", + "jsx-runtime.react-server.js", + "jsx-dev-runtime.js", + "jsx-dev-runtime.react-server.js", + "react.react-server.js" + ], + "main": "index.js", + "exports": { + ".": { + "react-server": "./react.react-server.js", + "default": "./index.js" + }, + "./package.json": "./package.json", + "./jsx-runtime": { + "react-server": "./jsx-runtime.react-server.js", + "default": "./jsx-runtime.js" + }, + "./jsx-dev-runtime": { + "react-server": "./jsx-dev-runtime.react-server.js", + "default": "./jsx-dev-runtime.js" + }, + "./compiler-runtime": { + "react-server": "./compiler-runtime.js", + "default": "./compiler-runtime.js" + } + }, + "repository": { + "type": "git", + "url": "https://github.com/facebook/react.git", + "directory": "packages/react" + }, + "engines": { + "node": ">=0.10.0" + } +} \ No newline at end of file diff --git a/build/node_modules/sharp/lib/channel.js b/build/node_modules/sharp/lib/channel.js new file mode 100644 index 0000000..3c6c0b4 --- /dev/null +++ b/build/node_modules/sharp/lib/channel.js @@ -0,0 +1,177 @@ +/*! + Copyright 2013 Lovell Fuller and others. + SPDX-License-Identifier: Apache-2.0 +*/ + +const is = require('./is'); + +/** + * Boolean operations for bandbool. + * @private + */ +const bool = { + and: 'and', + or: 'or', + eor: 'eor' +}; + +/** + * Remove alpha channels, if any. This is a no-op if the image does not have an alpha channel. + * + * See also {@link /api-operation/#flatten flatten}. + * + * @example + * sharp('rgba.png') + * .removeAlpha() + * .toFile('rgb.png', function(err, info) { + * // rgb.png is a 3 channel image without an alpha channel + * }); + * + * @returns {Sharp} + */ +function removeAlpha () { + this.options.removeAlpha = true; + return this; +} + +/** + * Ensure the output image has an alpha transparency channel. + * If missing, the added alpha channel will have the specified + * transparency level, defaulting to fully-opaque (1). + * This is a no-op if the image already has an alpha channel. + * + * @since 0.21.2 + * + * @example + * // rgba.png will be a 4 channel image with a fully-opaque alpha channel + * await sharp('rgb.jpg') + * .ensureAlpha() + * .toFile('rgba.png') + * + * @example + * // rgba is a 4 channel image with a fully-transparent alpha channel + * const rgba = await sharp(rgb) + * .ensureAlpha(0) + * .toBuffer(); + * + * @param {number} [alpha=1] - alpha transparency level (0=fully-transparent, 1=fully-opaque) + * @returns {Sharp} + * @throws {Error} Invalid alpha transparency level + */ +function ensureAlpha (alpha) { + if (is.defined(alpha)) { + if (is.number(alpha) && is.inRange(alpha, 0, 1)) { + this.options.ensureAlpha = alpha; + } else { + throw is.invalidParameterError('alpha', 'number between 0 and 1', alpha); + } + } else { + this.options.ensureAlpha = 1; + } + return this; +} + +/** + * Extract a single channel from a multi-channel image. + * + * The output colourspace will be either `b-w` (8-bit) or `grey16` (16-bit). + * + * @example + * // green.jpg is a greyscale image containing the green channel of the input + * await sharp(input) + * .extractChannel('green') + * .toFile('green.jpg'); + * + * @example + * // red1 is the red value of the first pixel, red2 the second pixel etc. + * const [red1, red2, ...] = await sharp(input) + * .extractChannel(0) + * .raw() + * .toBuffer(); + * + * @param {number|string} channel - zero-indexed channel/band number to extract, or `red`, `green`, `blue` or `alpha`. + * @returns {Sharp} + * @throws {Error} Invalid channel + */ +function extractChannel (channel) { + const channelMap = { red: 0, green: 1, blue: 2, alpha: 3 }; + if (Object.keys(channelMap).includes(channel)) { + channel = channelMap[channel]; + } + if (is.integer(channel) && is.inRange(channel, 0, 4)) { + this.options.extractChannel = channel; + } else { + throw is.invalidParameterError('channel', 'integer or one of: red, green, blue, alpha', channel); + } + return this; +} + +/** + * Join one or more channels to the image. + * The meaning of the added channels depends on the output colourspace, set with `toColourspace()`. + * By default the output image will be web-friendly sRGB, with additional channels interpreted as alpha channels. + * Channel ordering follows vips convention: + * - sRGB: 0: Red, 1: Green, 2: Blue, 3: Alpha. + * - CMYK: 0: Magenta, 1: Cyan, 2: Yellow, 3: Black, 4: Alpha. + * + * Buffers may be any of the image formats supported by sharp. + * For raw pixel input, the `options` object should contain a `raw` attribute, which follows the format of the attribute of the same name in the `sharp()` constructor. + * + * @param {Array<string|Buffer>|string|Buffer} images - one or more images (file paths, Buffers). + * @param {Object} options - image options, see `sharp()` constructor. + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function joinChannel (images, options) { + if (Array.isArray(images)) { + images.forEach(function (image) { + this.options.joinChannelIn.push(this._createInputDescriptor(image, options)); + }, this); + } else { + this.options.joinChannelIn.push(this._createInputDescriptor(images, options)); + } + return this; +} + +/** + * Perform a bitwise boolean operation on all input image channels (bands) to produce a single channel output image. + * + * @example + * sharp('3-channel-rgb-input.png') + * .bandbool(sharp.bool.and) + * .toFile('1-channel-output.png', function (err, info) { + * // The output will be a single channel image where each pixel `P = R & G & B`. + * // If `I(1,1) = [247, 170, 14] = [0b11110111, 0b10101010, 0b00001111]` + * // then `O(1,1) = 0b11110111 & 0b10101010 & 0b00001111 = 0b00000010 = 2`. + * }); + * + * @param {string} boolOp - one of `and`, `or` or `eor` to perform that bitwise operation, like the C logic operators `&`, `|` and `^` respectively. + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function bandbool (boolOp) { + if (is.string(boolOp) && is.inArray(boolOp, ['and', 'or', 'eor'])) { + this.options.bandBoolOp = boolOp; + } else { + throw is.invalidParameterError('boolOp', 'one of: and, or, eor', boolOp); + } + return this; +} + +/** + * Decorate the Sharp prototype with channel-related functions. + * @module Sharp + * @private + */ +module.exports = (Sharp) => { + Object.assign(Sharp.prototype, { + // Public instance functions + removeAlpha, + ensureAlpha, + extractChannel, + joinChannel, + bandbool + }); + // Class attributes + Sharp.bool = bool; +}; diff --git a/build/node_modules/sharp/lib/colour.js b/build/node_modules/sharp/lib/colour.js new file mode 100644 index 0000000..e61c248 --- /dev/null +++ b/build/node_modules/sharp/lib/colour.js @@ -0,0 +1,195 @@ +/*! + Copyright 2013 Lovell Fuller and others. + SPDX-License-Identifier: Apache-2.0 +*/ + +const color = require('@img/colour'); +const is = require('./is'); + +/** + * Colourspaces. + * @private + */ +const colourspace = { + multiband: 'multiband', + 'b-w': 'b-w', + bw: 'b-w', + cmyk: 'cmyk', + srgb: 'srgb' +}; + +/** + * Tint the image using the provided colour. + * An alpha channel may be present and will be unchanged by the operation. + * + * @example + * const output = await sharp(input) + * .tint({ r: 255, g: 240, b: 16 }) + * .toBuffer(); + * + * @param {string|Object} tint - Parsed by the [color](https://www.npmjs.org/package/color) module. + * @returns {Sharp} + * @throws {Error} Invalid parameter + */ +function tint (tint) { + this._setBackgroundColourOption('tint', tint); + return this; +} + +/** + * Convert to 8-bit greyscale; 256 shades of grey. + * This is a linear operation. If the input image is in a non-linear colour space such as sRGB, use `gamma()` with `greyscale()` for the best results. + * By default the output image will be web-friendly sRGB and contain three (identical) colour channels. + * This may be overridden by other sharp operations such as `toColourspace('b-w')`, + * which will produce an output image containing one colour channel. + * An alpha channel may be present, and will be unchanged by the operation. + * + * @example + * const output = await sharp(input).greyscale().toBuffer(); + * + * @param {Boolean} [greyscale=true] + * @returns {Sharp} + */ +function greyscale (greyscale) { + this.options.greyscale = is.bool(greyscale) ? greyscale : true; + return this; +} + +/** + * Alternative spelling of `greyscale`. + * @param {Boolean} [grayscale=true] + * @returns {Sharp} + */ +function grayscale (grayscale) { + return this.greyscale(grayscale); +} + +/** + * Set the pipeline colourspace. + * + * The input image will be converted to the provided colourspace at the start of the pipeline. + * All operations will use this colourspace before converting to the output colourspace, + * as defined by {@link #tocolourspace toColourspace}. + * + * @since 0.29.0 + * + * @example + * // Run pipeline in 16 bits per channel RGB while converting final result to 8 bits per channel sRGB. + * await sharp(input) + * .pipelineColourspace('rgb16') + * .toColourspace('srgb') + * .toFile('16bpc-pipeline-to-8bpc-output.png') + * + * @param {string} [colourspace] - pipeline colourspace e.g. `rgb16`, `scrgb`, `lab`, `grey16` [...](https://www.libvips.org/API/current/enum.Interpretation.html) + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function pipelineColourspace (colourspace) { + if (!is.string(colourspace)) { + throw is.invalidParameterError('colourspace', 'string', colourspace); + } + this.options.colourspacePipeline = colourspace; + return this; +} + +/** + * Alternative spelling of `pipelineColourspace`. + * @param {string} [colorspace] - pipeline colorspace. + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function pipelineColorspace (colorspace) { + return this.pipelineColourspace(colorspace); +} + +/** + * Set the output colourspace. + * By default output image will be web-friendly sRGB, with additional channels interpreted as alpha channels. + * + * @example + * // Output 16 bits per pixel RGB + * await sharp(input) + * .toColourspace('rgb16') + * .toFile('16-bpp.png') + * + * @param {string} [colourspace] - output colourspace e.g. `srgb`, `rgb`, `cmyk`, `lab`, `b-w` [...](https://www.libvips.org/API/current/enum.Interpretation.html) + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function toColourspace (colourspace) { + if (!is.string(colourspace)) { + throw is.invalidParameterError('colourspace', 'string', colourspace); + } + this.options.colourspace = colourspace; + return this; +} + +/** + * Alternative spelling of `toColourspace`. + * @param {string} [colorspace] - output colorspace. + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function toColorspace (colorspace) { + return this.toColourspace(colorspace); +} + +/** + * Create a RGBA colour array from a given value. + * @private + * @param {string|Object} value + * @throws {Error} Invalid value + */ +function _getBackgroundColourOption (value) { + if ( + is.object(value) || + (is.string(value) && value.length >= 3 && value.length <= 200) + ) { + const colour = color(value); + return [ + colour.red(), + colour.green(), + colour.blue(), + Math.round(colour.alpha() * 255) + ]; + } else { + throw is.invalidParameterError('background', 'object or string', value); + } +} + +/** + * Update a colour attribute of the this.options Object. + * @private + * @param {string} key + * @param {string|Object} value + * @throws {Error} Invalid value + */ +function _setBackgroundColourOption (key, value) { + if (is.defined(value)) { + this.options[key] = _getBackgroundColourOption(value); + } +} + +/** + * Decorate the Sharp prototype with colour-related functions. + * @module Sharp + * @private + */ +module.exports = (Sharp) => { + Object.assign(Sharp.prototype, { + // Public + tint, + greyscale, + grayscale, + pipelineColourspace, + pipelineColorspace, + toColourspace, + toColorspace, + // Private + _getBackgroundColourOption, + _setBackgroundColourOption + }); + // Class attributes + Sharp.colourspace = colourspace; + Sharp.colorspace = colourspace; +}; diff --git a/build/node_modules/sharp/lib/composite.js b/build/node_modules/sharp/lib/composite.js new file mode 100644 index 0000000..1c3e5e6 --- /dev/null +++ b/build/node_modules/sharp/lib/composite.js @@ -0,0 +1,212 @@ +/*! + Copyright 2013 Lovell Fuller and others. + SPDX-License-Identifier: Apache-2.0 +*/ + +const is = require('./is'); + +/** + * Blend modes. + * @member + * @private + */ +const blend = { + clear: 'clear', + source: 'source', + over: 'over', + in: 'in', + out: 'out', + atop: 'atop', + dest: 'dest', + 'dest-over': 'dest-over', + 'dest-in': 'dest-in', + 'dest-out': 'dest-out', + 'dest-atop': 'dest-atop', + xor: 'xor', + add: 'add', + saturate: 'saturate', + multiply: 'multiply', + screen: 'screen', + overlay: 'overlay', + darken: 'darken', + lighten: 'lighten', + 'colour-dodge': 'colour-dodge', + 'color-dodge': 'colour-dodge', + 'colour-burn': 'colour-burn', + 'color-burn': 'colour-burn', + 'hard-light': 'hard-light', + 'soft-light': 'soft-light', + difference: 'difference', + exclusion: 'exclusion' +}; + +/** + * Composite image(s) over the processed (resized, extracted etc.) image. + * + * The images to composite must be the same size or smaller than the processed image. + * If both `top` and `left` options are provided, they take precedence over `gravity`. + * + * Other operations in the same processing pipeline (e.g. resize, rotate, flip, + * flop, extract) will always be applied to the input image before composition. + * + * The `blend` option can be one of `clear`, `source`, `over`, `in`, `out`, `atop`, + * `dest`, `dest-over`, `dest-in`, `dest-out`, `dest-atop`, + * `xor`, `add`, `saturate`, `multiply`, `screen`, `overlay`, `darken`, `lighten`, + * `colour-dodge`, `color-dodge`, `colour-burn`,`color-burn`, + * `hard-light`, `soft-light`, `difference`, `exclusion`. + * + * More information about blend modes can be found at + * https://www.libvips.org/API/current/enum.BlendMode.html + * and https://www.cairographics.org/operators/ + * + * @since 0.22.0 + * + * @example + * await sharp(background) + * .composite([ + * { input: layer1, gravity: 'northwest' }, + * { input: layer2, gravity: 'southeast' }, + * ]) + * .toFile('combined.png'); + * + * @example + * const output = await sharp('input.gif', { animated: true }) + * .composite([ + * { input: 'overlay.png', tile: true, blend: 'saturate' } + * ]) + * .toBuffer(); + * + * @example + * sharp('input.png') + * .rotate(180) + * .resize(300) + * .flatten( { background: '#ff6600' } ) + * .composite([{ input: 'overlay.png', gravity: 'southeast' }]) + * .sharpen() + * .withMetadata() + * .webp( { quality: 90 } ) + * .toBuffer() + * .then(function(outputBuffer) { + * // outputBuffer contains upside down, 300px wide, alpha channel flattened + * // onto orange background, composited with overlay.png with SE gravity, + * // sharpened, with metadata, 90% quality WebP image data. Phew! + * }); + * + * @param {Object[]} images - Ordered list of images to composite + * @param {Buffer|String} [images[].input] - Buffer containing image data, String containing the path to an image file, or Create object (see below) + * @param {Object} [images[].input.create] - describes a blank overlay to be created. + * @param {Number} [images[].input.create.width] + * @param {Number} [images[].input.create.height] + * @param {Number} [images[].input.create.channels] - 3-4 + * @param {String|Object} [images[].input.create.background] - parsed by the [color](https://www.npmjs.org/package/color) module to extract values for red, green, blue and alpha. + * @param {Object} [images[].input.text] - describes a new text image to be created. + * @param {string} [images[].input.text.text] - text to render as a UTF-8 string. It can contain Pango markup, for example `<i>Le</i>Monde`. + * @param {string} [images[].input.text.font] - font name to render with. + * @param {string} [images[].input.text.fontfile] - absolute filesystem path to a font file that can be used by `font`. + * @param {number} [images[].input.text.width=0] - integral number of pixels to word-wrap at. Lines of text wider than this will be broken at word boundaries. + * @param {number} [images[].input.text.height=0] - integral number of pixels high. When defined, `dpi` will be ignored and the text will automatically fit the pixel resolution defined by `width` and `height`. Will be ignored if `width` is not specified or set to 0. + * @param {string} [images[].input.text.align='left'] - text alignment (`'left'`, `'centre'`, `'center'`, `'right'`). + * @param {boolean} [images[].input.text.justify=false] - set this to true to apply justification to the text. + * @param {number} [images[].input.text.dpi=72] - the resolution (size) at which to render the text. Does not take effect if `height` is specified. + * @param {boolean} [images[].input.text.rgba=false] - set this to true to enable RGBA output. This is useful for colour emoji rendering, or support for Pango markup features like `<span foreground="red">Red!</span>`. + * @param {number} [images[].input.text.spacing=0] - text line height in points. Will use the font line height if none is specified. + * @param {Boolean} [images[].autoOrient=false] - set to true to use EXIF orientation data, if present, to orient the image. + * @param {String} [images[].blend='over'] - how to blend this image with the image below. + * @param {String} [images[].gravity='centre'] - gravity at which to place the overlay. + * @param {Number} [images[].top] - the pixel offset from the top edge. + * @param {Number} [images[].left] - the pixel offset from the left edge. + * @param {Boolean} [images[].tile=false] - set to true to repeat the overlay image across the entire image with the given `gravity`. + * @param {Boolean} [images[].premultiplied=false] - set to true to avoid premultiplying the image below. Equivalent to the `--premultiplied` vips option. + * @param {Number} [images[].density=72] - number representing the DPI for vector overlay image. + * @param {Object} [images[].raw] - describes overlay when using raw pixel data. + * @param {Number} [images[].raw.width] + * @param {Number} [images[].raw.height] + * @param {Number} [images[].raw.channels] + * @param {boolean} [images[].animated=false] - Set to `true` to read all frames/pages of an animated image. + * @param {string} [images[].failOn='warning'] - @see {@link /api-constructor/ constructor parameters} + * @param {number|boolean} [images[].limitInputPixels=268402689] - @see {@link /api-constructor/ constructor parameters} + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function composite (images) { + if (!Array.isArray(images)) { + throw is.invalidParameterError('images to composite', 'array', images); + } + this.options.composite = images.map(image => { + if (!is.object(image)) { + throw is.invalidParameterError('image to composite', 'object', image); + } + const inputOptions = this._inputOptionsFromObject(image); + const composite = { + input: this._createInputDescriptor(image.input, inputOptions, { allowStream: false }), + blend: 'over', + tile: false, + left: 0, + top: 0, + hasOffset: false, + gravity: 0, + premultiplied: false + }; + if (is.defined(image.blend)) { + if (is.string(blend[image.blend])) { + composite.blend = blend[image.blend]; + } else { + throw is.invalidParameterError('blend', 'valid blend name', image.blend); + } + } + if (is.defined(image.tile)) { + if (is.bool(image.tile)) { + composite.tile = image.tile; + } else { + throw is.invalidParameterError('tile', 'boolean', image.tile); + } + } + if (is.defined(image.left)) { + if (is.integer(image.left)) { + composite.left = image.left; + } else { + throw is.invalidParameterError('left', 'integer', image.left); + } + } + if (is.defined(image.top)) { + if (is.integer(image.top)) { + composite.top = image.top; + } else { + throw is.invalidParameterError('top', 'integer', image.top); + } + } + if (is.defined(image.top) !== is.defined(image.left)) { + throw new Error('Expected both left and top to be set'); + } else { + composite.hasOffset = is.integer(image.top) && is.integer(image.left); + } + if (is.defined(image.gravity)) { + if (is.integer(image.gravity) && is.inRange(image.gravity, 0, 8)) { + composite.gravity = image.gravity; + } else if (is.string(image.gravity) && is.integer(this.constructor.gravity[image.gravity])) { + composite.gravity = this.constructor.gravity[image.gravity]; + } else { + throw is.invalidParameterError('gravity', 'valid gravity', image.gravity); + } + } + if (is.defined(image.premultiplied)) { + if (is.bool(image.premultiplied)) { + composite.premultiplied = image.premultiplied; + } else { + throw is.invalidParameterError('premultiplied', 'boolean', image.premultiplied); + } + } + return composite; + }); + return this; +} + +/** + * Decorate the Sharp prototype with composite-related functions. + * @module Sharp + * @private + */ +module.exports = (Sharp) => { + Sharp.prototype.composite = composite; + Sharp.blend = blend; +}; diff --git a/build/node_modules/sharp/lib/constructor.js b/build/node_modules/sharp/lib/constructor.js new file mode 100644 index 0000000..9aac810 --- /dev/null +++ b/build/node_modules/sharp/lib/constructor.js @@ -0,0 +1,499 @@ +/*! + Copyright 2013 Lovell Fuller and others. + SPDX-License-Identifier: Apache-2.0 +*/ + +const util = require('node:util'); +const stream = require('node:stream'); +const is = require('./is'); + +require('./sharp'); + +// Use NODE_DEBUG=sharp to enable libvips warnings +const debuglog = util.debuglog('sharp'); + +const queueListener = (queueLength) => { + Sharp.queue.emit('change', queueLength); +}; + +/** + * Constructor factory to create an instance of `sharp`, to which further methods are chained. + * + * JPEG, PNG, WebP, GIF, AVIF or TIFF format image data can be streamed out from this object. + * When using Stream based output, derived attributes are available from the `info` event. + * + * Non-critical problems encountered during processing are emitted as `warning` events. + * + * Implements the [stream.Duplex](http://nodejs.org/api/stream.html#stream_class_stream_duplex) class. + * + * When loading more than one page/frame of an animated image, + * these are combined as a vertically-stacked "toilet roll" image + * where the overall height is the `pageHeight` multiplied by the number of `pages`. + * + * @constructs Sharp + * + * @emits Sharp#info + * @emits Sharp#warning + * + * @example + * sharp('input.jpg') + * .resize(300, 200) + * .toFile('output.jpg', function(err) { + * // output.jpg is a 300 pixels wide and 200 pixels high image + * // containing a scaled and cropped version of input.jpg + * }); + * + * @example + * // Read image data from remote URL, + * // resize to 300 pixels wide, + * // emit an 'info' event with calculated dimensions + * // and finally write image data to writableStream + * const { body } = fetch('https://...'); + * const readableStream = Readable.fromWeb(body); + * const transformer = sharp() + * .resize(300) + * .on('info', ({ height }) => { + * console.log(`Image height is ${height}`); + * }); + * readableStream.pipe(transformer).pipe(writableStream); + * + * @example + * // Create a blank 300x200 PNG image of semi-translucent red pixels + * sharp({ + * create: { + * width: 300, + * height: 200, + * channels: 4, + * background: { r: 255, g: 0, b: 0, alpha: 0.5 } + * } + * }) + * .png() + * .toBuffer() + * .then( ... ); + * + * @example + * // Convert an animated GIF to an animated WebP + * await sharp('in.gif', { animated: true }).toFile('out.webp'); + * + * @example + * // Read a raw array of pixels and save it to a png + * const input = Uint8Array.from([255, 255, 255, 0, 0, 0]); // or Uint8ClampedArray + * const image = sharp(input, { + * // because the input does not contain its dimensions or how many channels it has + * // we need to specify it in the constructor options + * raw: { + * width: 2, + * height: 1, + * channels: 3 + * } + * }); + * await image.toFile('my-two-pixels.png'); + * + * @example + * // Generate RGB Gaussian noise + * await sharp({ + * create: { + * width: 300, + * height: 200, + * channels: 3, + * noise: { + * type: 'gaussian', + * mean: 128, + * sigma: 30 + * } + * } + * }).toFile('noise.png'); + * + * @example + * // Generate an image from text + * await sharp({ + * text: { + * text: 'Hello, world!', + * width: 400, // max width + * height: 300 // max height + * } + * }).toFile('text_bw.png'); + * + * @example + * // Generate an rgba image from text using pango markup and font + * await sharp({ + * text: { + * text: '<span foreground="red">Red!</span><span background="cyan">blue</span>', + * font: 'sans', + * rgba: true, + * dpi: 300 + * } + * }).toFile('text_rgba.png'); + * + * @example + * // Join four input images as a 2x2 grid with a 4 pixel gutter + * const data = await sharp( + * [image1, image2, image3, image4], + * { join: { across: 2, shim: 4 } } + * ).toBuffer(); + * + * @example + * // Generate a two-frame animated image from emoji + * const images = ['😀', '😛'].map(text => ({ + * text: { text, width: 64, height: 64, channels: 4, rgba: true } + * })); + * await sharp(images, { join: { animated: true } }).toFile('out.gif'); + * + * @param {(Buffer|ArrayBuffer|Uint8Array|Uint8ClampedArray|Int8Array|Uint16Array|Int16Array|Uint32Array|Int32Array|Float32Array|Float64Array|string|Array)} [input] - if present, can be + * a Buffer / ArrayBuffer / Uint8Array / Uint8ClampedArray containing JPEG, PNG, WebP, AVIF, GIF, SVG or TIFF image data, or + * a TypedArray containing raw pixel image data, or + * a String containing the filesystem path to an JPEG, PNG, WebP, AVIF, GIF, SVG or TIFF image file. + * An array of inputs can be provided, and these will be joined together. + * JPEG, PNG, WebP, AVIF, GIF, SVG, TIFF or raw pixel image data can be streamed into the object when not present. + * @param {Object} [options] - if present, is an Object with optional attributes. + * @param {string} [options.failOn='warning'] - When to abort processing of invalid pixel data, one of (in order of sensitivity, least to most): 'none', 'truncated', 'error', 'warning'. Higher levels imply lower levels. Invalid metadata will always abort. + * @param {number|boolean} [options.limitInputPixels=268402689] - Do not process input images where the number of pixels + * (width x height) exceeds this limit. Assumes image dimensions contained in the input metadata can be trusted. + * An integral Number of pixels, zero or false to remove limit, true to use default limit of 268402689 (0x3FFF x 0x3FFF). + * @param {boolean} [options.unlimited=false] - Set this to `true` to remove safety features that help prevent memory exhaustion (JPEG, PNG, SVG, HEIF). + * @param {boolean} [options.autoOrient=false] - Set this to `true` to rotate/flip the image to match EXIF `Orientation`, if any. + * @param {boolean} [options.sequentialRead=true] - Set this to `false` to use random access rather than sequential read. Some operations will do this automatically. + * @param {number} [options.density=72] - number representing the DPI for vector images in the range 1 to 100000. + * @param {number} [options.ignoreIcc=false] - should the embedded ICC profile, if any, be ignored. + * @param {number} [options.pages=1] - Number of pages to extract for multi-page input (GIF, WebP, TIFF), use -1 for all pages. + * @param {number} [options.page=0] - Page number to start extracting from for multi-page input (GIF, WebP, TIFF), zero based. + * @param {boolean} [options.animated=false] - Set to `true` to read all frames/pages of an animated image (GIF, WebP, TIFF), equivalent of setting `pages` to `-1`. + * @param {Object} [options.raw] - describes raw pixel input image data. See `raw()` for pixel ordering. + * @param {number} [options.raw.width] - integral number of pixels wide. + * @param {number} [options.raw.height] - integral number of pixels high. + * @param {number} [options.raw.channels] - integral number of channels, between 1 and 4. + * @param {boolean} [options.raw.premultiplied] - specifies that the raw input has already been premultiplied, set to `true` + * to avoid sharp premultiplying the image. (optional, default `false`) + * @param {number} [options.raw.pageHeight] - The pixel height of each page/frame for animated images, must be an integral factor of `raw.height`. + * @param {Object} [options.create] - describes a new image to be created. + * @param {number} [options.create.width] - integral number of pixels wide. + * @param {number} [options.create.height] - integral number of pixels high. + * @param {number} [options.create.channels] - integral number of channels, either 3 (RGB) or 4 (RGBA). + * @param {string|Object} [options.create.background] - parsed by the [color](https://www.npmjs.org/package/color) module to extract values for red, green, blue and alpha. + * @param {number} [options.create.pageHeight] - The pixel height of each page/frame for animated images, must be an integral factor of `create.height`. + * @param {Object} [options.create.noise] - describes a noise to be created. + * @param {string} [options.create.noise.type] - type of generated noise, currently only `gaussian` is supported. + * @param {number} [options.create.noise.mean=128] - Mean value of pixels in the generated noise. + * @param {number} [options.create.noise.sigma=30] - Standard deviation of pixel values in the generated noise. + * @param {Object} [options.text] - describes a new text image to be created. + * @param {string} [options.text.text] - text to render as a UTF-8 string. It can contain Pango markup, for example `<i>Le</i>Monde`. + * @param {string} [options.text.font] - font name to render with. + * @param {string} [options.text.fontfile] - absolute filesystem path to a font file that can be used by `font`. + * @param {number} [options.text.width=0] - Integral number of pixels to word-wrap at. Lines of text wider than this will be broken at word boundaries. + * @param {number} [options.text.height=0] - Maximum integral number of pixels high. When defined, `dpi` will be ignored and the text will automatically fit the pixel resolution defined by `width` and `height`. Will be ignored if `width` is not specified or set to 0. + * @param {string} [options.text.align='left'] - Alignment style for multi-line text (`'left'`, `'centre'`, `'center'`, `'right'`). + * @param {boolean} [options.text.justify=false] - set this to true to apply justification to the text. + * @param {number} [options.text.dpi=72] - the resolution (size) at which to render the text. Does not take effect if `height` is specified. + * @param {boolean} [options.text.rgba=false] - set this to true to enable RGBA output. This is useful for colour emoji rendering, or support for pango markup features like `<span foreground="red">Red!</span>`. + * @param {number} [options.text.spacing=0] - text line height in points. Will use the font line height if none is specified. + * @param {string} [options.text.wrap='word'] - word wrapping style when width is provided, one of: 'word', 'char', 'word-char' (prefer word, fallback to char) or 'none'. + * @param {Object} [options.join] - describes how an array of input images should be joined. + * @param {number} [options.join.across=1] - number of images to join horizontally. + * @param {boolean} [options.join.animated=false] - set this to `true` to join the images as an animated image. + * @param {number} [options.join.shim=0] - number of pixels to insert between joined images. + * @param {string|Object} [options.join.background] - parsed by the [color](https://www.npmjs.org/package/color) module to extract values for red, green, blue and alpha. + * @param {string} [options.join.halign='left'] - horizontal alignment style for images joined horizontally (`'left'`, `'centre'`, `'center'`, `'right'`). + * @param {string} [options.join.valign='top'] - vertical alignment style for images joined vertically (`'top'`, `'centre'`, `'center'`, `'bottom'`). + * @param {Object} [options.tiff] - Describes TIFF specific options. + * @param {number} [options.tiff.subifd=-1] - Sub Image File Directory to extract for OME-TIFF, defaults to main image. + * @param {Object} [options.svg] - Describes SVG specific options. + * @param {string} [options.svg.stylesheet] - Custom CSS for SVG input, applied with a User Origin during the CSS cascade. + * @param {boolean} [options.svg.highBitdepth=false] - Set to `true` to render SVG input at 32-bits per channel (128-bit) instead of 8-bits per channel (32-bit) RGBA. + * @param {Object} [options.pdf] - Describes PDF specific options. Requires the use of a globally-installed libvips compiled with support for PDFium, Poppler, ImageMagick or GraphicsMagick. + * @param {string|Object} [options.pdf.background] - Background colour to use when PDF is partially transparent. Parsed by the [color](https://www.npmjs.org/package/color) module to extract values for red, green, blue and alpha. + * @param {Object} [options.openSlide] - Describes OpenSlide specific options. Requires the use of a globally-installed libvips compiled with support for OpenSlide. + * @param {number} [options.openSlide.level=0] - Level to extract from a multi-level input, zero based. + * @param {Object} [options.jp2] - Describes JPEG 2000 specific options. Requires the use of a globally-installed libvips compiled with support for OpenJPEG. + * @param {boolean} [options.jp2.oneshot=false] - Set to `true` to decode tiled JPEG 2000 images in a single operation, improving compatibility. + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +const Sharp = function (input, options) { + // biome-ignore lint/complexity/noArguments: constructor factory + if (arguments.length === 1 && !is.defined(input)) { + throw new Error('Invalid input'); + } + if (!(this instanceof Sharp)) { + return new Sharp(input, options); + } + stream.Duplex.call(this); + this.options = { + // resize options + topOffsetPre: -1, + leftOffsetPre: -1, + widthPre: -1, + heightPre: -1, + topOffsetPost: -1, + leftOffsetPost: -1, + widthPost: -1, + heightPost: -1, + width: -1, + height: -1, + canvas: 'crop', + position: 0, + resizeBackground: [0, 0, 0, 255], + angle: 0, + rotationAngle: 0, + rotationBackground: [0, 0, 0, 255], + rotateBefore: false, + orientBefore: false, + flip: false, + flop: false, + extendTop: 0, + extendBottom: 0, + extendLeft: 0, + extendRight: 0, + extendBackground: [0, 0, 0, 255], + extendWith: 'background', + withoutEnlargement: false, + withoutReduction: false, + affineMatrix: [], + affineBackground: [0, 0, 0, 255], + affineIdx: 0, + affineIdy: 0, + affineOdx: 0, + affineOdy: 0, + affineInterpolator: this.constructor.interpolators.bilinear, + kernel: 'lanczos3', + fastShrinkOnLoad: true, + // operations + tint: [-1, 0, 0, 0], + flatten: false, + flattenBackground: [0, 0, 0], + unflatten: false, + negate: false, + negateAlpha: true, + medianSize: 0, + blurSigma: 0, + precision: 'integer', + minAmpl: 0.2, + sharpenSigma: 0, + sharpenM1: 1, + sharpenM2: 2, + sharpenX1: 2, + sharpenY2: 10, + sharpenY3: 20, + threshold: 0, + thresholdGrayscale: true, + trimBackground: [], + trimThreshold: -1, + trimLineArt: false, + dilateWidth: 0, + erodeWidth: 0, + gamma: 0, + gammaOut: 0, + greyscale: false, + normalise: false, + normaliseLower: 1, + normaliseUpper: 99, + claheWidth: 0, + claheHeight: 0, + claheMaxSlope: 3, + brightness: 1, + saturation: 1, + hue: 0, + lightness: 0, + booleanBufferIn: null, + booleanFileIn: '', + joinChannelIn: [], + extractChannel: -1, + removeAlpha: false, + ensureAlpha: -1, + colourspace: 'srgb', + colourspacePipeline: 'last', + composite: [], + // output + fileOut: '', + formatOut: 'input', + streamOut: false, + keepMetadata: 0, + withMetadataOrientation: -1, + withMetadataDensity: 0, + withIccProfile: '', + withExif: {}, + withExifMerge: true, + withXmp: '', + resolveWithObject: false, + loop: -1, + delay: [], + // output format + jpegQuality: 80, + jpegProgressive: false, + jpegChromaSubsampling: '4:2:0', + jpegTrellisQuantisation: false, + jpegOvershootDeringing: false, + jpegOptimiseScans: false, + jpegOptimiseCoding: true, + jpegQuantisationTable: 0, + pngProgressive: false, + pngCompressionLevel: 6, + pngAdaptiveFiltering: false, + pngPalette: false, + pngQuality: 100, + pngEffort: 7, + pngBitdepth: 8, + pngDither: 1, + jp2Quality: 80, + jp2TileHeight: 512, + jp2TileWidth: 512, + jp2Lossless: false, + jp2ChromaSubsampling: '4:4:4', + webpQuality: 80, + webpAlphaQuality: 100, + webpLossless: false, + webpNearLossless: false, + webpSmartSubsample: false, + webpSmartDeblock: false, + webpPreset: 'default', + webpEffort: 4, + webpMinSize: false, + webpMixed: false, + gifBitdepth: 8, + gifEffort: 7, + gifDither: 1, + gifInterFrameMaxError: 0, + gifInterPaletteMaxError: 3, + gifKeepDuplicateFrames: false, + gifReuse: true, + gifProgressive: false, + tiffQuality: 80, + tiffCompression: 'jpeg', + tiffBigtiff: false, + tiffPredictor: 'horizontal', + tiffPyramid: false, + tiffMiniswhite: false, + tiffBitdepth: 8, + tiffTile: false, + tiffTileHeight: 256, + tiffTileWidth: 256, + tiffXres: 1.0, + tiffYres: 1.0, + tiffResolutionUnit: 'inch', + heifQuality: 50, + heifLossless: false, + heifCompression: 'av1', + heifEffort: 4, + heifChromaSubsampling: '4:4:4', + heifBitdepth: 8, + jxlDistance: 1, + jxlDecodingTier: 0, + jxlEffort: 7, + jxlLossless: false, + rawDepth: 'uchar', + tileSize: 256, + tileOverlap: 0, + tileContainer: 'fs', + tileLayout: 'dz', + tileFormat: 'last', + tileDepth: 'last', + tileAngle: 0, + tileSkipBlanks: -1, + tileBackground: [255, 255, 255, 255], + tileCentre: false, + tileId: 'https://example.com/iiif', + tileBasename: '', + timeoutSeconds: 0, + linearA: [], + linearB: [], + pdfBackground: [255, 255, 255, 255], + // Function to notify of libvips warnings + debuglog: warning => { + this.emit('warning', warning); + debuglog(warning); + }, + // Function to notify of queue length changes + queueListener + }; + this.options.input = this._createInputDescriptor(input, options, { allowStream: true }); + return this; +}; +Object.setPrototypeOf(Sharp.prototype, stream.Duplex.prototype); +Object.setPrototypeOf(Sharp, stream.Duplex); + +/** + * Take a "snapshot" of the Sharp instance, returning a new instance. + * Cloned instances inherit the input of their parent instance. + * This allows multiple output Streams and therefore multiple processing pipelines to share a single input Stream. + * + * @example + * const pipeline = sharp().rotate(); + * pipeline.clone().resize(800, 600).pipe(firstWritableStream); + * pipeline.clone().extract({ left: 20, top: 20, width: 100, height: 100 }).pipe(secondWritableStream); + * readableStream.pipe(pipeline); + * // firstWritableStream receives auto-rotated, resized readableStream + * // secondWritableStream receives auto-rotated, extracted region of readableStream + * + * @example + * // Create a pipeline that will download an image, resize it and format it to different files + * // Using Promises to know when the pipeline is complete + * const fs = require("fs"); + * const got = require("got"); + * const sharpStream = sharp({ failOn: 'none' }); + * + * const promises = []; + * + * promises.push( + * sharpStream + * .clone() + * .jpeg({ quality: 100 }) + * .toFile("originalFile.jpg") + * ); + * + * promises.push( + * sharpStream + * .clone() + * .resize({ width: 500 }) + * .jpeg({ quality: 80 }) + * .toFile("optimized-500.jpg") + * ); + * + * promises.push( + * sharpStream + * .clone() + * .resize({ width: 500 }) + * .webp({ quality: 80 }) + * .toFile("optimized-500.webp") + * ); + * + * // https://github.com/sindresorhus/got/blob/main/documentation/3-streams.md + * got.stream("https://www.example.com/some-file.jpg").pipe(sharpStream); + * + * Promise.all(promises) + * .then(res => { console.log("Done!", res); }) + * .catch(err => { + * console.error("Error processing files, let's clean it up", err); + * try { + * fs.unlinkSync("originalFile.jpg"); + * fs.unlinkSync("optimized-500.jpg"); + * fs.unlinkSync("optimized-500.webp"); + * } catch (e) {} + * }); + * + * @returns {Sharp} + */ +function clone () { + // Clone existing options + const clone = this.constructor.call(); + const { debuglog, queueListener, ...options } = this.options; + clone.options = structuredClone(options); + clone.options.debuglog = debuglog; + clone.options.queueListener = queueListener; + // Pass 'finish' event to clone for Stream-based input + if (this._isStreamInput()) { + this.on('finish', () => { + // Clone inherits input data + this._flattenBufferIn(); + clone.options.input.buffer = this.options.input.buffer; + clone.emit('finish'); + }); + } + return clone; +} +Object.assign(Sharp.prototype, { clone }); + +/** + * Export constructor. + * @module Sharp + * @private + */ +module.exports = Sharp; diff --git a/build/node_modules/sharp/lib/index.js b/build/node_modules/sharp/lib/index.js new file mode 100644 index 0000000..b80191d --- /dev/null +++ b/build/node_modules/sharp/lib/index.js @@ -0,0 +1,16 @@ +/*! + Copyright 2013 Lovell Fuller and others. + SPDX-License-Identifier: Apache-2.0 +*/ + +const Sharp = require('./constructor'); +require('./input')(Sharp); +require('./resize')(Sharp); +require('./composite')(Sharp); +require('./operation')(Sharp); +require('./colour')(Sharp); +require('./channel')(Sharp); +require('./output')(Sharp); +require('./utility')(Sharp); + +module.exports = Sharp; diff --git a/build/node_modules/sharp/lib/input.js b/build/node_modules/sharp/lib/input.js new file mode 100644 index 0000000..728b718 --- /dev/null +++ b/build/node_modules/sharp/lib/input.js @@ -0,0 +1,809 @@ +/*! + Copyright 2013 Lovell Fuller and others. + SPDX-License-Identifier: Apache-2.0 +*/ + +const is = require('./is'); +const sharp = require('./sharp'); + +/** + * Justification alignment + * @member + * @private + */ +const align = { + left: 'low', + top: 'low', + low: 'low', + center: 'centre', + centre: 'centre', + right: 'high', + bottom: 'high', + high: 'high' +}; + +const inputStreamParameters = [ + // Limits and error handling + 'failOn', 'limitInputPixels', 'unlimited', + // Format-generic + 'animated', 'autoOrient', 'density', 'ignoreIcc', 'page', 'pages', 'sequentialRead', + // Format-specific + 'jp2', 'openSlide', 'pdf', 'raw', 'svg', 'tiff', + // Deprecated + 'failOnError', 'openSlideLevel', 'pdfBackground', 'tiffSubifd' +]; + +/** + * Extract input options, if any, from an object. + * @private + */ +function _inputOptionsFromObject (obj) { + const params = inputStreamParameters + .filter(p => is.defined(obj[p])) + .map(p => ([p, obj[p]])); + return params.length + ? Object.fromEntries(params) + : undefined; +} + +/** + * Create Object containing input and input-related options. + * @private + */ +function _createInputDescriptor (input, inputOptions, containerOptions) { + const inputDescriptor = { + autoOrient: false, + failOn: 'warning', + limitInputPixels: 0x3FFF ** 2, + ignoreIcc: false, + unlimited: false, + sequentialRead: true + }; + if (is.string(input)) { + // filesystem + inputDescriptor.file = input; + } else if (is.buffer(input)) { + // Buffer + if (input.length === 0) { + throw Error('Input Buffer is empty'); + } + inputDescriptor.buffer = input; + } else if (is.arrayBuffer(input)) { + if (input.byteLength === 0) { + throw Error('Input bit Array is empty'); + } + inputDescriptor.buffer = Buffer.from(input, 0, input.byteLength); + } else if (is.typedArray(input)) { + if (input.length === 0) { + throw Error('Input Bit Array is empty'); + } + inputDescriptor.buffer = Buffer.from(input.buffer, input.byteOffset, input.byteLength); + } else if (is.plainObject(input) && !is.defined(inputOptions)) { + // Plain Object descriptor, e.g. create + inputOptions = input; + if (_inputOptionsFromObject(inputOptions)) { + // Stream with options + inputDescriptor.buffer = []; + } + } else if (!is.defined(input) && !is.defined(inputOptions) && is.object(containerOptions) && containerOptions.allowStream) { + // Stream without options + inputDescriptor.buffer = []; + } else if (Array.isArray(input)) { + if (input.length > 1) { + // Join images together + if (!this.options.joining) { + this.options.joining = true; + this.options.join = input.map(i => this._createInputDescriptor(i)); + } else { + throw new Error('Recursive join is unsupported'); + } + } else { + throw new Error('Expected at least two images to join'); + } + } else { + throw new Error(`Unsupported input '${input}' of type ${typeof input}${ + is.defined(inputOptions) ? ` when also providing options of type ${typeof inputOptions}` : '' + }`); + } + if (is.object(inputOptions)) { + // Deprecated: failOnError + if (is.defined(inputOptions.failOnError)) { + if (is.bool(inputOptions.failOnError)) { + inputDescriptor.failOn = inputOptions.failOnError ? 'warning' : 'none'; + } else { + throw is.invalidParameterError('failOnError', 'boolean', inputOptions.failOnError); + } + } + // failOn + if (is.defined(inputOptions.failOn)) { + if (is.string(inputOptions.failOn) && is.inArray(inputOptions.failOn, ['none', 'truncated', 'error', 'warning'])) { + inputDescriptor.failOn = inputOptions.failOn; + } else { + throw is.invalidParameterError('failOn', 'one of: none, truncated, error, warning', inputOptions.failOn); + } + } + // autoOrient + if (is.defined(inputOptions.autoOrient)) { + if (is.bool(inputOptions.autoOrient)) { + inputDescriptor.autoOrient = inputOptions.autoOrient; + } else { + throw is.invalidParameterError('autoOrient', 'boolean', inputOptions.autoOrient); + } + } + // Density + if (is.defined(inputOptions.density)) { + if (is.inRange(inputOptions.density, 1, 100000)) { + inputDescriptor.density = inputOptions.density; + } else { + throw is.invalidParameterError('density', 'number between 1 and 100000', inputOptions.density); + } + } + // Ignore embeddded ICC profile + if (is.defined(inputOptions.ignoreIcc)) { + if (is.bool(inputOptions.ignoreIcc)) { + inputDescriptor.ignoreIcc = inputOptions.ignoreIcc; + } else { + throw is.invalidParameterError('ignoreIcc', 'boolean', inputOptions.ignoreIcc); + } + } + // limitInputPixels + if (is.defined(inputOptions.limitInputPixels)) { + if (is.bool(inputOptions.limitInputPixels)) { + inputDescriptor.limitInputPixels = inputOptions.limitInputPixels + ? 0x3FFF ** 2 + : 0; + } else if (is.integer(inputOptions.limitInputPixels) && is.inRange(inputOptions.limitInputPixels, 0, Number.MAX_SAFE_INTEGER)) { + inputDescriptor.limitInputPixels = inputOptions.limitInputPixels; + } else { + throw is.invalidParameterError('limitInputPixels', 'positive integer', inputOptions.limitInputPixels); + } + } + // unlimited + if (is.defined(inputOptions.unlimited)) { + if (is.bool(inputOptions.unlimited)) { + inputDescriptor.unlimited = inputOptions.unlimited; + } else { + throw is.invalidParameterError('unlimited', 'boolean', inputOptions.unlimited); + } + } + // sequentialRead + if (is.defined(inputOptions.sequentialRead)) { + if (is.bool(inputOptions.sequentialRead)) { + inputDescriptor.sequentialRead = inputOptions.sequentialRead; + } else { + throw is.invalidParameterError('sequentialRead', 'boolean', inputOptions.sequentialRead); + } + } + // Raw pixel input + if (is.defined(inputOptions.raw)) { + if ( + is.object(inputOptions.raw) && + is.integer(inputOptions.raw.width) && inputOptions.raw.width > 0 && + is.integer(inputOptions.raw.height) && inputOptions.raw.height > 0 && + is.integer(inputOptions.raw.channels) && is.inRange(inputOptions.raw.channels, 1, 4) + ) { + inputDescriptor.rawWidth = inputOptions.raw.width; + inputDescriptor.rawHeight = inputOptions.raw.height; + inputDescriptor.rawChannels = inputOptions.raw.channels; + switch (input.constructor) { + case Uint8Array: + case Uint8ClampedArray: + inputDescriptor.rawDepth = 'uchar'; + break; + case Int8Array: + inputDescriptor.rawDepth = 'char'; + break; + case Uint16Array: + inputDescriptor.rawDepth = 'ushort'; + break; + case Int16Array: + inputDescriptor.rawDepth = 'short'; + break; + case Uint32Array: + inputDescriptor.rawDepth = 'uint'; + break; + case Int32Array: + inputDescriptor.rawDepth = 'int'; + break; + case Float32Array: + inputDescriptor.rawDepth = 'float'; + break; + case Float64Array: + inputDescriptor.rawDepth = 'double'; + break; + default: + inputDescriptor.rawDepth = 'uchar'; + break; + } + } else { + throw new Error('Expected width, height and channels for raw pixel input'); + } + inputDescriptor.rawPremultiplied = false; + if (is.defined(inputOptions.raw.premultiplied)) { + if (is.bool(inputOptions.raw.premultiplied)) { + inputDescriptor.rawPremultiplied = inputOptions.raw.premultiplied; + } else { + throw is.invalidParameterError('raw.premultiplied', 'boolean', inputOptions.raw.premultiplied); + } + } + inputDescriptor.rawPageHeight = 0; + if (is.defined(inputOptions.raw.pageHeight)) { + if (is.integer(inputOptions.raw.pageHeight) && inputOptions.raw.pageHeight > 0 && inputOptions.raw.pageHeight <= inputOptions.raw.height) { + if (inputOptions.raw.height % inputOptions.raw.pageHeight !== 0) { + throw new Error(`Expected raw.height ${inputOptions.raw.height} to be a multiple of raw.pageHeight ${inputOptions.raw.pageHeight}`); + } + inputDescriptor.rawPageHeight = inputOptions.raw.pageHeight; + } else { + throw is.invalidParameterError('raw.pageHeight', 'positive integer', inputOptions.raw.pageHeight); + } + } + } + // Multi-page input (GIF, TIFF, PDF) + if (is.defined(inputOptions.animated)) { + if (is.bool(inputOptions.animated)) { + inputDescriptor.pages = inputOptions.animated ? -1 : 1; + } else { + throw is.invalidParameterError('animated', 'boolean', inputOptions.animated); + } + } + if (is.defined(inputOptions.pages)) { + if (is.integer(inputOptions.pages) && is.inRange(inputOptions.pages, -1, 100000)) { + inputDescriptor.pages = inputOptions.pages; + } else { + throw is.invalidParameterError('pages', 'integer between -1 and 100000', inputOptions.pages); + } + } + if (is.defined(inputOptions.page)) { + if (is.integer(inputOptions.page) && is.inRange(inputOptions.page, 0, 100000)) { + inputDescriptor.page = inputOptions.page; + } else { + throw is.invalidParameterError('page', 'integer between 0 and 100000', inputOptions.page); + } + } + // OpenSlide specific options + if (is.object(inputOptions.openSlide) && is.defined(inputOptions.openSlide.level)) { + if (is.integer(inputOptions.openSlide.level) && is.inRange(inputOptions.openSlide.level, 0, 256)) { + inputDescriptor.openSlideLevel = inputOptions.openSlide.level; + } else { + throw is.invalidParameterError('openSlide.level', 'integer between 0 and 256', inputOptions.openSlide.level); + } + } else if (is.defined(inputOptions.level)) { + // Deprecated + if (is.integer(inputOptions.level) && is.inRange(inputOptions.level, 0, 256)) { + inputDescriptor.openSlideLevel = inputOptions.level; + } else { + throw is.invalidParameterError('level', 'integer between 0 and 256', inputOptions.level); + } + } + // TIFF specific options + if (is.object(inputOptions.tiff) && is.defined(inputOptions.tiff.subifd)) { + if (is.integer(inputOptions.tiff.subifd) && is.inRange(inputOptions.tiff.subifd, -1, 100000)) { + inputDescriptor.tiffSubifd = inputOptions.tiff.subifd; + } else { + throw is.invalidParameterError('tiff.subifd', 'integer between -1 and 100000', inputOptions.tiff.subifd); + } + } else if (is.defined(inputOptions.subifd)) { + // Deprecated + if (is.integer(inputOptions.subifd) && is.inRange(inputOptions.subifd, -1, 100000)) { + inputDescriptor.tiffSubifd = inputOptions.subifd; + } else { + throw is.invalidParameterError('subifd', 'integer between -1 and 100000', inputOptions.subifd); + } + } + // SVG specific options + if (is.object(inputOptions.svg)) { + if (is.defined(inputOptions.svg.stylesheet)) { + if (is.string(inputOptions.svg.stylesheet)) { + inputDescriptor.svgStylesheet = inputOptions.svg.stylesheet; + } else { + throw is.invalidParameterError('svg.stylesheet', 'string', inputOptions.svg.stylesheet); + } + } + if (is.defined(inputOptions.svg.highBitdepth)) { + if (is.bool(inputOptions.svg.highBitdepth)) { + inputDescriptor.svgHighBitdepth = inputOptions.svg.highBitdepth; + } else { + throw is.invalidParameterError('svg.highBitdepth', 'boolean', inputOptions.svg.highBitdepth); + } + } + } + // PDF specific options + if (is.object(inputOptions.pdf) && is.defined(inputOptions.pdf.background)) { + inputDescriptor.pdfBackground = this._getBackgroundColourOption(inputOptions.pdf.background); + } else if (is.defined(inputOptions.pdfBackground)) { + // Deprecated + inputDescriptor.pdfBackground = this._getBackgroundColourOption(inputOptions.pdfBackground); + } + // JPEG 2000 specific options + if (is.object(inputOptions.jp2) && is.defined(inputOptions.jp2.oneshot)) { + if (is.bool(inputOptions.jp2.oneshot)) { + inputDescriptor.jp2Oneshot = inputOptions.jp2.oneshot; + } else { + throw is.invalidParameterError('jp2.oneshot', 'boolean', inputOptions.jp2.oneshot); + } + } + // Create new image + if (is.defined(inputOptions.create)) { + if ( + is.object(inputOptions.create) && + is.integer(inputOptions.create.width) && inputOptions.create.width > 0 && + is.integer(inputOptions.create.height) && inputOptions.create.height > 0 && + is.integer(inputOptions.create.channels) + ) { + inputDescriptor.createWidth = inputOptions.create.width; + inputDescriptor.createHeight = inputOptions.create.height; + inputDescriptor.createChannels = inputOptions.create.channels; + inputDescriptor.createPageHeight = 0; + if (is.defined(inputOptions.create.pageHeight)) { + if (is.integer(inputOptions.create.pageHeight) && inputOptions.create.pageHeight > 0 && inputOptions.create.pageHeight <= inputOptions.create.height) { + if (inputOptions.create.height % inputOptions.create.pageHeight !== 0) { + throw new Error(`Expected create.height ${inputOptions.create.height} to be a multiple of create.pageHeight ${inputOptions.create.pageHeight}`); + } + inputDescriptor.createPageHeight = inputOptions.create.pageHeight; + } else { + throw is.invalidParameterError('create.pageHeight', 'positive integer', inputOptions.create.pageHeight); + } + } + // Noise + if (is.defined(inputOptions.create.noise)) { + if (!is.object(inputOptions.create.noise)) { + throw new Error('Expected noise to be an object'); + } + if (inputOptions.create.noise.type !== 'gaussian') { + throw new Error('Only gaussian noise is supported at the moment'); + } + inputDescriptor.createNoiseType = inputOptions.create.noise.type; + if (!is.inRange(inputOptions.create.channels, 1, 4)) { + throw is.invalidParameterError('create.channels', 'number between 1 and 4', inputOptions.create.channels); + } + inputDescriptor.createNoiseMean = 128; + if (is.defined(inputOptions.create.noise.mean)) { + if (is.number(inputOptions.create.noise.mean) && is.inRange(inputOptions.create.noise.mean, 0, 10000)) { + inputDescriptor.createNoiseMean = inputOptions.create.noise.mean; + } else { + throw is.invalidParameterError('create.noise.mean', 'number between 0 and 10000', inputOptions.create.noise.mean); + } + } + inputDescriptor.createNoiseSigma = 30; + if (is.defined(inputOptions.create.noise.sigma)) { + if (is.number(inputOptions.create.noise.sigma) && is.inRange(inputOptions.create.noise.sigma, 0, 10000)) { + inputDescriptor.createNoiseSigma = inputOptions.create.noise.sigma; + } else { + throw is.invalidParameterError('create.noise.sigma', 'number between 0 and 10000', inputOptions.create.noise.sigma); + } + } + } else if (is.defined(inputOptions.create.background)) { + if (!is.inRange(inputOptions.create.channels, 3, 4)) { + throw is.invalidParameterError('create.channels', 'number between 3 and 4', inputOptions.create.channels); + } + inputDescriptor.createBackground = this._getBackgroundColourOption(inputOptions.create.background); + } else { + throw new Error('Expected valid noise or background to create a new input image'); + } + delete inputDescriptor.buffer; + } else { + throw new Error('Expected valid width, height and channels to create a new input image'); + } + } + // Create a new image with text + if (is.defined(inputOptions.text)) { + if (is.object(inputOptions.text) && is.string(inputOptions.text.text)) { + inputDescriptor.textValue = inputOptions.text.text; + if (is.defined(inputOptions.text.height) && is.defined(inputOptions.text.dpi)) { + throw new Error('Expected only one of dpi or height'); + } + if (is.defined(inputOptions.text.font)) { + if (is.string(inputOptions.text.font)) { + inputDescriptor.textFont = inputOptions.text.font; + } else { + throw is.invalidParameterError('text.font', 'string', inputOptions.text.font); + } + } + if (is.defined(inputOptions.text.fontfile)) { + if (is.string(inputOptions.text.fontfile)) { + inputDescriptor.textFontfile = inputOptions.text.fontfile; + } else { + throw is.invalidParameterError('text.fontfile', 'string', inputOptions.text.fontfile); + } + } + if (is.defined(inputOptions.text.width)) { + if (is.integer(inputOptions.text.width) && inputOptions.text.width > 0) { + inputDescriptor.textWidth = inputOptions.text.width; + } else { + throw is.invalidParameterError('text.width', 'positive integer', inputOptions.text.width); + } + } + if (is.defined(inputOptions.text.height)) { + if (is.integer(inputOptions.text.height) && inputOptions.text.height > 0) { + inputDescriptor.textHeight = inputOptions.text.height; + } else { + throw is.invalidParameterError('text.height', 'positive integer', inputOptions.text.height); + } + } + if (is.defined(inputOptions.text.align)) { + if (is.string(inputOptions.text.align) && is.string(this.constructor.align[inputOptions.text.align])) { + inputDescriptor.textAlign = this.constructor.align[inputOptions.text.align]; + } else { + throw is.invalidParameterError('text.align', 'valid alignment', inputOptions.text.align); + } + } + if (is.defined(inputOptions.text.justify)) { + if (is.bool(inputOptions.text.justify)) { + inputDescriptor.textJustify = inputOptions.text.justify; + } else { + throw is.invalidParameterError('text.justify', 'boolean', inputOptions.text.justify); + } + } + if (is.defined(inputOptions.text.dpi)) { + if (is.integer(inputOptions.text.dpi) && is.inRange(inputOptions.text.dpi, 1, 1000000)) { + inputDescriptor.textDpi = inputOptions.text.dpi; + } else { + throw is.invalidParameterError('text.dpi', 'integer between 1 and 1000000', inputOptions.text.dpi); + } + } + if (is.defined(inputOptions.text.rgba)) { + if (is.bool(inputOptions.text.rgba)) { + inputDescriptor.textRgba = inputOptions.text.rgba; + } else { + throw is.invalidParameterError('text.rgba', 'bool', inputOptions.text.rgba); + } + } + if (is.defined(inputOptions.text.spacing)) { + if (is.integer(inputOptions.text.spacing) && is.inRange(inputOptions.text.spacing, -1000000, 1000000)) { + inputDescriptor.textSpacing = inputOptions.text.spacing; + } else { + throw is.invalidParameterError('text.spacing', 'integer between -1000000 and 1000000', inputOptions.text.spacing); + } + } + if (is.defined(inputOptions.text.wrap)) { + if (is.string(inputOptions.text.wrap) && is.inArray(inputOptions.text.wrap, ['word', 'char', 'word-char', 'none'])) { + inputDescriptor.textWrap = inputOptions.text.wrap; + } else { + throw is.invalidParameterError('text.wrap', 'one of: word, char, word-char, none', inputOptions.text.wrap); + } + } + delete inputDescriptor.buffer; + } else { + throw new Error('Expected a valid string to create an image with text.'); + } + } + // Join images together + if (is.defined(inputOptions.join)) { + if (is.defined(this.options.join)) { + if (is.defined(inputOptions.join.animated)) { + if (is.bool(inputOptions.join.animated)) { + inputDescriptor.joinAnimated = inputOptions.join.animated; + } else { + throw is.invalidParameterError('join.animated', 'boolean', inputOptions.join.animated); + } + } + if (is.defined(inputOptions.join.across)) { + if (is.integer(inputOptions.join.across) && is.inRange(inputOptions.join.across, 1, 1000000)) { + inputDescriptor.joinAcross = inputOptions.join.across; + } else { + throw is.invalidParameterError('join.across', 'integer between 1 and 100000', inputOptions.join.across); + } + } + if (is.defined(inputOptions.join.shim)) { + if (is.integer(inputOptions.join.shim) && is.inRange(inputOptions.join.shim, 0, 1000000)) { + inputDescriptor.joinShim = inputOptions.join.shim; + } else { + throw is.invalidParameterError('join.shim', 'integer between 0 and 100000', inputOptions.join.shim); + } + } + if (is.defined(inputOptions.join.background)) { + inputDescriptor.joinBackground = this._getBackgroundColourOption(inputOptions.join.background); + } + if (is.defined(inputOptions.join.halign)) { + if (is.string(inputOptions.join.halign) && is.string(this.constructor.align[inputOptions.join.halign])) { + inputDescriptor.joinHalign = this.constructor.align[inputOptions.join.halign]; + } else { + throw is.invalidParameterError('join.halign', 'valid alignment', inputOptions.join.halign); + } + } + if (is.defined(inputOptions.join.valign)) { + if (is.string(inputOptions.join.valign) && is.string(this.constructor.align[inputOptions.join.valign])) { + inputDescriptor.joinValign = this.constructor.align[inputOptions.join.valign]; + } else { + throw is.invalidParameterError('join.valign', 'valid alignment', inputOptions.join.valign); + } + } + } else { + throw new Error('Expected input to be an array of images to join'); + } + } + } else if (is.defined(inputOptions)) { + throw new Error(`Invalid input options ${inputOptions}`); + } + return inputDescriptor; +} + +/** + * Handle incoming Buffer chunk on Writable Stream. + * @private + * @param {Buffer} chunk + * @param {string} encoding - unused + * @param {Function} callback + */ +function _write (chunk, _encoding, callback) { + if (Array.isArray(this.options.input.buffer)) { + if (is.buffer(chunk)) { + if (this.options.input.buffer.length === 0) { + this.on('finish', () => { + this.streamInFinished = true; + }); + } + this.options.input.buffer.push(chunk); + callback(); + } else { + callback(new Error('Non-Buffer data on Writable Stream')); + } + } else { + callback(new Error('Unexpected data on Writable Stream')); + } +} + +/** + * Flattens the array of chunks accumulated in input.buffer. + * @private + */ +function _flattenBufferIn () { + if (this._isStreamInput()) { + this.options.input.buffer = Buffer.concat(this.options.input.buffer); + } +} + +/** + * Are we expecting Stream-based input? + * @private + * @returns {boolean} + */ +function _isStreamInput () { + return Array.isArray(this.options.input.buffer); +} + +/** + * Fast access to (uncached) image metadata without decoding any compressed pixel data. + * + * This is read from the header of the input image. + * It does not take into consideration any operations to be applied to the output image, + * such as resize or rotate. + * + * Dimensions in the response will respect the `page` and `pages` properties of the + * {@link /api-constructor/ constructor parameters}. + * + * A `Promise` is returned when `callback` is not provided. + * + * - `format`: Name of decoder used to decompress image data e.g. `jpeg`, `png`, `webp`, `gif`, `svg` + * - `size`: Total size of image in bytes, for Stream and Buffer input only + * - `width`: Number of pixels wide (EXIF orientation is not taken into consideration, see example below) + * - `height`: Number of pixels high (EXIF orientation is not taken into consideration, see example below) + * - `space`: Name of colour space interpretation e.g. `srgb`, `rgb`, `cmyk`, `lab`, `b-w` [...](https://www.libvips.org/API/current/enum.Interpretation.html) + * - `channels`: Number of bands e.g. `3` for sRGB, `4` for CMYK + * - `depth`: Name of pixel depth format e.g. `uchar`, `char`, `ushort`, `float` [...](https://www.libvips.org/API/current/enum.BandFormat.html) + * - `density`: Number of pixels per inch (DPI), if present + * - `chromaSubsampling`: String containing JPEG chroma subsampling, `4:2:0` or `4:4:4` for RGB, `4:2:0:4` or `4:4:4:4` for CMYK + * - `isProgressive`: Boolean indicating whether the image is interlaced using a progressive scan + * - `isPalette`: Boolean indicating whether the image is palette-based (GIF, PNG). + * - `bitsPerSample`: Number of bits per sample for each channel (GIF, PNG, HEIF). + * - `pages`: Number of pages/frames contained within the image, with support for TIFF, HEIF, PDF, animated GIF and animated WebP + * - `pageHeight`: Number of pixels high each page in a multi-page image will be. + * - `loop`: Number of times to loop an animated image, zero refers to a continuous loop. + * - `delay`: Delay in ms between each page in an animated image, provided as an array of integers. + * - `pagePrimary`: Number of the primary page in a HEIF image + * - `levels`: Details of each level in a multi-level image provided as an array of objects, requires libvips compiled with support for OpenSlide + * - `subifds`: Number of Sub Image File Directories in an OME-TIFF image + * - `background`: Default background colour, if present, for PNG (bKGD) and GIF images + * - `compression`: The encoder used to compress an HEIF file, `av1` (AVIF) or `hevc` (HEIC) + * - `resolutionUnit`: The unit of resolution (density), either `inch` or `cm`, if present + * - `hasProfile`: Boolean indicating the presence of an embedded ICC profile + * - `hasAlpha`: Boolean indicating the presence of an alpha transparency channel + * - `orientation`: Number value of the EXIF Orientation header, if present + * - `exif`: Buffer containing raw EXIF data, if present + * - `icc`: Buffer containing raw [ICC](https://www.npmjs.com/package/icc) profile data, if present + * - `iptc`: Buffer containing raw IPTC data, if present + * - `xmp`: Buffer containing raw XMP data, if present + * - `xmpAsString`: String containing XMP data, if valid UTF-8. + * - `tifftagPhotoshop`: Buffer containing raw TIFFTAG_PHOTOSHOP data, if present + * - `formatMagick`: String containing format for images loaded via *magick + * - `comments`: Array of keyword/text pairs representing PNG text blocks, if present. + * + * @example + * const metadata = await sharp(input).metadata(); + * + * @example + * const image = sharp(inputJpg); + * image + * .metadata() + * .then(function(metadata) { + * return image + * .resize(Math.round(metadata.width / 2)) + * .webp() + * .toBuffer(); + * }) + * .then(function(data) { + * // data contains a WebP image half the width and height of the original JPEG + * }); + * + * @example + * // Get dimensions taking EXIF Orientation into account. + * const { autoOrient } = await sharp(input).metadata(); + * const { width, height } = autoOrient; + * + * @param {Function} [callback] - called with the arguments `(err, metadata)` + * @returns {Promise<Object>|Sharp} + */ +function metadata (callback) { + const stack = Error(); + if (is.fn(callback)) { + if (this._isStreamInput()) { + this.on('finish', () => { + this._flattenBufferIn(); + sharp.metadata(this.options, (err, metadata) => { + if (err) { + callback(is.nativeError(err, stack)); + } else { + callback(null, metadata); + } + }); + }); + } else { + sharp.metadata(this.options, (err, metadata) => { + if (err) { + callback(is.nativeError(err, stack)); + } else { + callback(null, metadata); + } + }); + } + return this; + } else { + if (this._isStreamInput()) { + return new Promise((resolve, reject) => { + const finished = () => { + this._flattenBufferIn(); + sharp.metadata(this.options, (err, metadata) => { + if (err) { + reject(is.nativeError(err, stack)); + } else { + resolve(metadata); + } + }); + }; + if (this.writableFinished) { + finished(); + } else { + this.once('finish', finished); + } + }); + } else { + return new Promise((resolve, reject) => { + sharp.metadata(this.options, (err, metadata) => { + if (err) { + reject(is.nativeError(err, stack)); + } else { + resolve(metadata); + } + }); + }); + } + } +} + +/** + * Access to pixel-derived image statistics for every channel in the image. + * A `Promise` is returned when `callback` is not provided. + * + * - `channels`: Array of channel statistics for each channel in the image. Each channel statistic contains + * - `min` (minimum value in the channel) + * - `max` (maximum value in the channel) + * - `sum` (sum of all values in a channel) + * - `squaresSum` (sum of squared values in a channel) + * - `mean` (mean of the values in a channel) + * - `stdev` (standard deviation for the values in a channel) + * - `minX` (x-coordinate of one of the pixel where the minimum lies) + * - `minY` (y-coordinate of one of the pixel where the minimum lies) + * - `maxX` (x-coordinate of one of the pixel where the maximum lies) + * - `maxY` (y-coordinate of one of the pixel where the maximum lies) + * - `isOpaque`: Is the image fully opaque? Will be `true` if the image has no alpha channel or if every pixel is fully opaque. + * - `entropy`: Histogram-based estimation of greyscale entropy, discarding alpha channel if any. + * - `sharpness`: Estimation of greyscale sharpness based on the standard deviation of a Laplacian convolution, discarding alpha channel if any. + * - `dominant`: Object containing most dominant sRGB colour based on a 4096-bin 3D histogram. + * + * **Note**: Statistics are derived from the original input image. Any operations performed on the image must first be + * written to a buffer in order to run `stats` on the result (see third example). + * + * @example + * const image = sharp(inputJpg); + * image + * .stats() + * .then(function(stats) { + * // stats contains the channel-wise statistics array and the isOpaque value + * }); + * + * @example + * const { entropy, sharpness, dominant } = await sharp(input).stats(); + * const { r, g, b } = dominant; + * + * @example + * const image = sharp(input); + * // store intermediate result + * const part = await image.extract(region).toBuffer(); + * // create new instance to obtain statistics of extracted region + * const stats = await sharp(part).stats(); + * + * @param {Function} [callback] - called with the arguments `(err, stats)` + * @returns {Promise<Object>} + */ +function stats (callback) { + const stack = Error(); + if (is.fn(callback)) { + if (this._isStreamInput()) { + this.on('finish', () => { + this._flattenBufferIn(); + sharp.stats(this.options, (err, stats) => { + if (err) { + callback(is.nativeError(err, stack)); + } else { + callback(null, stats); + } + }); + }); + } else { + sharp.stats(this.options, (err, stats) => { + if (err) { + callback(is.nativeError(err, stack)); + } else { + callback(null, stats); + } + }); + } + return this; + } else { + if (this._isStreamInput()) { + return new Promise((resolve, reject) => { + this.on('finish', function () { + this._flattenBufferIn(); + sharp.stats(this.options, (err, stats) => { + if (err) { + reject(is.nativeError(err, stack)); + } else { + resolve(stats); + } + }); + }); + }); + } else { + return new Promise((resolve, reject) => { + sharp.stats(this.options, (err, stats) => { + if (err) { + reject(is.nativeError(err, stack)); + } else { + resolve(stats); + } + }); + }); + } + } +} + +/** + * Decorate the Sharp prototype with input-related functions. + * @module Sharp + * @private + */ +module.exports = (Sharp) => { + Object.assign(Sharp.prototype, { + // Private + _inputOptionsFromObject, + _createInputDescriptor, + _write, + _flattenBufferIn, + _isStreamInput, + // Public + metadata, + stats + }); + // Class attributes + Sharp.align = align; +}; diff --git a/build/node_modules/sharp/lib/is.js b/build/node_modules/sharp/lib/is.js new file mode 100644 index 0000000..3ac9a1a --- /dev/null +++ b/build/node_modules/sharp/lib/is.js @@ -0,0 +1,143 @@ +/*! + Copyright 2013 Lovell Fuller and others. + SPDX-License-Identifier: Apache-2.0 +*/ + +/** + * Is this value defined and not null? + * @private + */ +const defined = (val) => typeof val !== 'undefined' && val !== null; + +/** + * Is this value an object? + * @private + */ +const object = (val) => typeof val === 'object'; + +/** + * Is this value a plain object? + * @private + */ +const plainObject = (val) => Object.prototype.toString.call(val) === '[object Object]'; + +/** + * Is this value a function? + * @private + */ +const fn = (val) => typeof val === 'function'; + +/** + * Is this value a boolean? + * @private + */ +const bool = (val) => typeof val === 'boolean'; + +/** + * Is this value a Buffer object? + * @private + */ +const buffer = (val) => val instanceof Buffer; + +/** + * Is this value a typed array object?. E.g. Uint8Array or Uint8ClampedArray? + * @private + */ +const typedArray = (val) => { + if (defined(val)) { + switch (val.constructor) { + case Uint8Array: + case Uint8ClampedArray: + case Int8Array: + case Uint16Array: + case Int16Array: + case Uint32Array: + case Int32Array: + case Float32Array: + case Float64Array: + return true; + } + } + + return false; +}; + +/** + * Is this value an ArrayBuffer object? + * @private + */ +const arrayBuffer = (val) => val instanceof ArrayBuffer; + +/** + * Is this value a non-empty string? + * @private + */ +const string = (val) => typeof val === 'string' && val.length > 0; + +/** + * Is this value a real number? + * @private + */ +const number = (val) => typeof val === 'number' && !Number.isNaN(val); + +/** + * Is this value an integer? + * @private + */ +const integer = (val) => Number.isInteger(val); + +/** + * Is this value within an inclusive given range? + * @private + */ +const inRange = (val, min, max) => val >= min && val <= max; + +/** + * Is this value within the elements of an array? + * @private + */ +const inArray = (val, list) => list.includes(val); + +/** + * Create an Error with a message relating to an invalid parameter. + * + * @param {string} name - parameter name. + * @param {string} expected - description of the type/value/range expected. + * @param {*} actual - the value received. + * @returns {Error} Containing the formatted message. + * @private + */ +const invalidParameterError = (name, expected, actual) => new Error( + `Expected ${expected} for ${name} but received ${actual} of type ${typeof actual}` + ); + +/** + * Ensures an Error from C++ contains a JS stack. + * + * @param {Error} native - Error with message from C++. + * @param {Error} context - Error with stack from JS. + * @returns {Error} Error with message and stack. + * @private + */ +const nativeError = (native, context) => { + context.message = native.message; + return context; +}; + +module.exports = { + defined, + object, + plainObject, + fn, + bool, + buffer, + typedArray, + arrayBuffer, + string, + number, + integer, + inRange, + inArray, + invalidParameterError, + nativeError +}; diff --git a/build/node_modules/sharp/lib/libvips.js b/build/node_modules/sharp/lib/libvips.js new file mode 100644 index 0000000..881dc5c --- /dev/null +++ b/build/node_modules/sharp/lib/libvips.js @@ -0,0 +1,207 @@ +/*! + Copyright 2013 Lovell Fuller and others. + SPDX-License-Identifier: Apache-2.0 +*/ + +const { spawnSync } = require('node:child_process'); +const { createHash } = require('node:crypto'); +const semverCoerce = require('semver/functions/coerce'); +const semverGreaterThanOrEqualTo = require('semver/functions/gte'); +const semverSatisfies = require('semver/functions/satisfies'); +const detectLibc = require('detect-libc'); + +const { config, engines, optionalDependencies } = require('../package.json'); + +/* node:coverage ignore next */ +const minimumLibvipsVersionLabelled = process.env.npm_package_config_libvips || config.libvips; +const minimumLibvipsVersion = semverCoerce(minimumLibvipsVersionLabelled).version; + +const prebuiltPlatforms = [ + 'darwin-arm64', 'darwin-x64', + 'linux-arm', 'linux-arm64', 'linux-ppc64', 'linux-riscv64', 'linux-s390x', 'linux-x64', + 'linuxmusl-arm64', 'linuxmusl-x64', + 'win32-arm64', 'win32-ia32', 'win32-x64' +]; + +const spawnSyncOptions = { + encoding: 'utf8', + shell: true +}; + +const log = (item) => { + if (item instanceof Error) { + console.error(`sharp: Installation error: ${item.message}`); + } else { + console.log(`sharp: ${item}`); + } +}; + +/* node:coverage ignore next */ +const runtimeLibc = () => detectLibc.isNonGlibcLinuxSync() ? detectLibc.familySync() : ''; + +const runtimePlatformArch = () => `${process.platform}${runtimeLibc()}-${process.arch}`; + +const buildPlatformArch = () => { + /* node:coverage ignore next 3 */ + if (isEmscripten()) { + return 'wasm32'; + } + const { npm_config_arch, npm_config_platform, npm_config_libc } = process.env; + const libc = typeof npm_config_libc === 'string' ? npm_config_libc : runtimeLibc(); + return `${npm_config_platform || process.platform}${libc}-${npm_config_arch || process.arch}`; +}; + +const buildSharpLibvipsIncludeDir = () => { + try { + return require(`@img/sharp-libvips-dev-${buildPlatformArch()}/include`); + } catch { + /* node:coverage ignore next 5 */ + try { + return require('@img/sharp-libvips-dev/include'); + } catch {} + } + return ''; +}; + +const buildSharpLibvipsCPlusPlusDir = () => { + /* node:coverage ignore next 4 */ + try { + return require('@img/sharp-libvips-dev/cplusplus'); + } catch {} + return ''; +}; + +const buildSharpLibvipsLibDir = () => { + try { + return require(`@img/sharp-libvips-dev-${buildPlatformArch()}/lib`); + } catch { + /* node:coverage ignore next 5 */ + try { + return require(`@img/sharp-libvips-${buildPlatformArch()}/lib`); + } catch {} + } + return ''; +}; + +/* node:coverage disable */ + +const isUnsupportedNodeRuntime = () => { + if (process.release?.name === 'node' && process.versions) { + if (!semverSatisfies(process.versions.node, engines.node)) { + return { found: process.versions.node, expected: engines.node }; + } + } +}; + +const isEmscripten = () => { + const { CC } = process.env; + return Boolean(CC?.endsWith('/emcc')); +}; + +const isRosetta = () => { + if (process.platform === 'darwin' && process.arch === 'x64') { + const translated = spawnSync('sysctl sysctl.proc_translated', spawnSyncOptions).stdout; + return (translated || '').trim() === 'sysctl.proc_translated: 1'; + } + return false; +}; + +/* node:coverage enable */ + +const sha512 = (s) => createHash('sha512').update(s).digest('hex'); + +const yarnLocator = () => { + try { + const identHash = sha512(`imgsharp-libvips-${buildPlatformArch()}`); + const npmVersion = semverCoerce(optionalDependencies[`@img/sharp-libvips-${buildPlatformArch()}`], { + includePrerelease: true + }).version; + return sha512(`${identHash}npm:${npmVersion}`).slice(0, 10); + } catch {} + return ''; +}; + +/* node:coverage disable */ + +const spawnRebuild = () => + spawnSync(`node-gyp rebuild --directory=src ${isEmscripten() ? '--nodedir=emscripten' : ''}`, { + ...spawnSyncOptions, + stdio: 'inherit' + }).status; + +const globalLibvipsVersion = () => { + if (process.platform !== 'win32') { + const globalLibvipsVersion = spawnSync('pkg-config --modversion vips-cpp', { + ...spawnSyncOptions, + env: { + ...process.env, + PKG_CONFIG_PATH: pkgConfigPath() + } + }).stdout; + return (globalLibvipsVersion || '').trim(); + } else { + return ''; + } +}; + +/* node:coverage enable */ + +const pkgConfigPath = () => { + if (process.platform !== 'win32') { + /* node:coverage ignore next 4 */ + const brewPkgConfigPath = spawnSync( + 'which brew >/dev/null 2>&1 && brew environment --plain | grep PKG_CONFIG_LIBDIR | cut -d" " -f2', + spawnSyncOptions + ).stdout || ''; + return [ + brewPkgConfigPath.trim(), + process.env.PKG_CONFIG_PATH, + '/usr/local/lib/pkgconfig', + '/usr/lib/pkgconfig', + '/usr/local/libdata/pkgconfig', + '/usr/libdata/pkgconfig' + ].filter(Boolean).join(':'); + } else { + return ''; + } +}; + +const skipSearch = (status, reason, logger) => { + if (logger) { + logger(`Detected ${reason}, skipping search for globally-installed libvips`); + } + return status; +}; + +const useGlobalLibvips = (logger) => { + if (Boolean(process.env.SHARP_IGNORE_GLOBAL_LIBVIPS) === true) { + return skipSearch(false, 'SHARP_IGNORE_GLOBAL_LIBVIPS', logger); + } + if (Boolean(process.env.SHARP_FORCE_GLOBAL_LIBVIPS) === true) { + return skipSearch(true, 'SHARP_FORCE_GLOBAL_LIBVIPS', logger); + } + /* node:coverage ignore next 3 */ + if (isRosetta()) { + return skipSearch(false, 'Rosetta', logger); + } + const globalVipsVersion = globalLibvipsVersion(); + /* node:coverage ignore next */ + return !!globalVipsVersion && semverGreaterThanOrEqualTo(globalVipsVersion, minimumLibvipsVersion); +}; + +module.exports = { + minimumLibvipsVersion, + prebuiltPlatforms, + buildPlatformArch, + buildSharpLibvipsIncludeDir, + buildSharpLibvipsCPlusPlusDir, + buildSharpLibvipsLibDir, + isUnsupportedNodeRuntime, + runtimePlatformArch, + log, + yarnLocator, + spawnRebuild, + globalLibvipsVersion, + pkgConfigPath, + useGlobalLibvips +}; diff --git a/build/node_modules/sharp/lib/operation.js b/build/node_modules/sharp/lib/operation.js new file mode 100644 index 0000000..ebbf54e --- /dev/null +++ b/build/node_modules/sharp/lib/operation.js @@ -0,0 +1,1016 @@ +/*! + Copyright 2013 Lovell Fuller and others. + SPDX-License-Identifier: Apache-2.0 +*/ + +const is = require('./is'); + +/** + * How accurate an operation should be. + * @member + * @private + */ +const vipsPrecision = { + integer: 'integer', + float: 'float', + approximate: 'approximate' +}; + +/** + * Rotate the output image. + * + * The provided angle is converted to a valid positive degree rotation. + * For example, `-450` will produce a 270 degree rotation. + * + * When rotating by an angle other than a multiple of 90, + * the background colour can be provided with the `background` option. + * + * For backwards compatibility, if no angle is provided, `.autoOrient()` will be called. + * + * Only one rotation can occur per pipeline (aside from an initial call without + * arguments to orient via EXIF data). Previous calls to `rotate` in the same + * pipeline will be ignored. + * + * Multi-page images can only be rotated by 180 degrees. + * + * Method order is important when rotating, resizing and/or extracting regions, + * for example `.rotate(x).extract(y)` will produce a different result to `.extract(y).rotate(x)`. + * + * @example + * const rotateThenResize = await sharp(input) + * .rotate(90) + * .resize({ width: 16, height: 8, fit: 'fill' }) + * .toBuffer(); + * const resizeThenRotate = await sharp(input) + * .resize({ width: 16, height: 8, fit: 'fill' }) + * .rotate(90) + * .toBuffer(); + * + * @param {number} [angle=auto] angle of rotation. + * @param {Object} [options] - if present, is an Object with optional attributes. + * @param {string|Object} [options.background="#000000"] parsed by the [color](https://www.npmjs.org/package/color) module to extract values for red, green, blue and alpha. + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function rotate (angle, options) { + if (!is.defined(angle)) { + return this.autoOrient(); + } + if (this.options.angle || this.options.rotationAngle) { + this.options.debuglog('ignoring previous rotate options'); + this.options.angle = 0; + this.options.rotationAngle = 0; + } + if (is.integer(angle) && !(angle % 90)) { + this.options.angle = angle; + } else if (is.number(angle)) { + this.options.rotationAngle = angle; + if (is.object(options) && options.background) { + this._setBackgroundColourOption('rotationBackground', options.background); + } + } else { + throw is.invalidParameterError('angle', 'numeric', angle); + } + return this; +} + +/** + * Auto-orient based on the EXIF `Orientation` tag, then remove the tag. + * Mirroring is supported and may infer the use of a flip operation. + * + * Previous or subsequent use of `rotate(angle)` and either `flip()` or `flop()` + * will logically occur after auto-orientation, regardless of call order. + * + * @example + * const output = await sharp(input).autoOrient().toBuffer(); + * + * @example + * const pipeline = sharp() + * .autoOrient() + * .resize(null, 200) + * .toBuffer(function (err, outputBuffer, info) { + * // outputBuffer contains 200px high JPEG image data, + * // auto-oriented using EXIF Orientation tag + * // info.width and info.height contain the dimensions of the resized image + * }); + * readableStream.pipe(pipeline); + * + * @returns {Sharp} + */ +function autoOrient () { + this.options.input.autoOrient = true; + return this; +} + +/** + * Mirror the image vertically (up-down) about the x-axis. + * This always occurs before rotation, if any. + * + * This operation does not work correctly with multi-page images. + * + * @example + * const output = await sharp(input).flip().toBuffer(); + * + * @param {Boolean} [flip=true] + * @returns {Sharp} + */ +function flip (flip) { + this.options.flip = is.bool(flip) ? flip : true; + return this; +} + +/** + * Mirror the image horizontally (left-right) about the y-axis. + * This always occurs before rotation, if any. + * + * @example + * const output = await sharp(input).flop().toBuffer(); + * + * @param {Boolean} [flop=true] + * @returns {Sharp} + */ +function flop (flop) { + this.options.flop = is.bool(flop) ? flop : true; + return this; +} + +/** + * Perform an affine transform on an image. This operation will always occur after resizing, extraction and rotation, if any. + * + * You must provide an array of length 4 or a 2x2 affine transformation matrix. + * By default, new pixels are filled with a black background. You can provide a background colour with the `background` option. + * A particular interpolator may also be specified. Set the `interpolator` option to an attribute of the `sharp.interpolators` Object e.g. `sharp.interpolators.nohalo`. + * + * In the case of a 2x2 matrix, the transform is: + * - X = `matrix[0, 0]` \* (x + `idx`) + `matrix[0, 1]` \* (y + `idy`) + `odx` + * - Y = `matrix[1, 0]` \* (x + `idx`) + `matrix[1, 1]` \* (y + `idy`) + `ody` + * + * where: + * - x and y are the coordinates in input image. + * - X and Y are the coordinates in output image. + * - (0,0) is the upper left corner. + * + * @since 0.27.0 + * + * @example + * const pipeline = sharp() + * .affine([[1, 0.3], [0.1, 0.7]], { + * background: 'white', + * interpolator: sharp.interpolators.nohalo + * }) + * .toBuffer((err, outputBuffer, info) => { + * // outputBuffer contains the transformed image + * // info.width and info.height contain the new dimensions + * }); + * + * inputStream + * .pipe(pipeline); + * + * @param {Array<Array<number>>|Array<number>} matrix - affine transformation matrix + * @param {Object} [options] - if present, is an Object with optional attributes. + * @param {String|Object} [options.background="#000000"] - parsed by the [color](https://www.npmjs.org/package/color) module to extract values for red, green, blue and alpha. + * @param {Number} [options.idx=0] - input horizontal offset + * @param {Number} [options.idy=0] - input vertical offset + * @param {Number} [options.odx=0] - output horizontal offset + * @param {Number} [options.ody=0] - output vertical offset + * @param {String} [options.interpolator=sharp.interpolators.bicubic] - interpolator + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function affine (matrix, options) { + const flatMatrix = [].concat(...matrix); + if (flatMatrix.length === 4 && flatMatrix.every(is.number)) { + this.options.affineMatrix = flatMatrix; + } else { + throw is.invalidParameterError('matrix', '1x4 or 2x2 array', matrix); + } + + if (is.defined(options)) { + if (is.object(options)) { + this._setBackgroundColourOption('affineBackground', options.background); + if (is.defined(options.idx)) { + if (is.number(options.idx)) { + this.options.affineIdx = options.idx; + } else { + throw is.invalidParameterError('options.idx', 'number', options.idx); + } + } + if (is.defined(options.idy)) { + if (is.number(options.idy)) { + this.options.affineIdy = options.idy; + } else { + throw is.invalidParameterError('options.idy', 'number', options.idy); + } + } + if (is.defined(options.odx)) { + if (is.number(options.odx)) { + this.options.affineOdx = options.odx; + } else { + throw is.invalidParameterError('options.odx', 'number', options.odx); + } + } + if (is.defined(options.ody)) { + if (is.number(options.ody)) { + this.options.affineOdy = options.ody; + } else { + throw is.invalidParameterError('options.ody', 'number', options.ody); + } + } + if (is.defined(options.interpolator)) { + if (is.inArray(options.interpolator, Object.values(this.constructor.interpolators))) { + this.options.affineInterpolator = options.interpolator; + } else { + throw is.invalidParameterError('options.interpolator', 'valid interpolator name', options.interpolator); + } + } + } else { + throw is.invalidParameterError('options', 'object', options); + } + } + + return this; +} + +/** + * Sharpen the image. + * + * When used without parameters, performs a fast, mild sharpen of the output image. + * + * When a `sigma` is provided, performs a slower, more accurate sharpen of the L channel in the LAB colour space. + * Fine-grained control over the level of sharpening in "flat" (m1) and "jagged" (m2) areas is available. + * + * See {@link https://www.libvips.org/API/current/method.Image.sharpen.html libvips sharpen} operation. + * + * @example + * const data = await sharp(input).sharpen().toBuffer(); + * + * @example + * const data = await sharp(input).sharpen({ sigma: 2 }).toBuffer(); + * + * @example + * const data = await sharp(input) + * .sharpen({ + * sigma: 2, + * m1: 0, + * m2: 3, + * x1: 3, + * y2: 15, + * y3: 15, + * }) + * .toBuffer(); + * + * @param {Object|number} [options] - if present, is an Object with attributes + * @param {number} [options.sigma] - the sigma of the Gaussian mask, where `sigma = 1 + radius / 2`, between 0.000001 and 10 + * @param {number} [options.m1=1.0] - the level of sharpening to apply to "flat" areas, between 0 and 1000000 + * @param {number} [options.m2=2.0] - the level of sharpening to apply to "jagged" areas, between 0 and 1000000 + * @param {number} [options.x1=2.0] - threshold between "flat" and "jagged", between 0 and 1000000 + * @param {number} [options.y2=10.0] - maximum amount of brightening, between 0 and 1000000 + * @param {number} [options.y3=20.0] - maximum amount of darkening, between 0 and 1000000 + * @param {number} [flat] - (deprecated) see `options.m1`. + * @param {number} [jagged] - (deprecated) see `options.m2`. + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function sharpen (options, flat, jagged) { + if (!is.defined(options)) { + // No arguments: default to mild sharpen + this.options.sharpenSigma = -1; + } else if (is.bool(options)) { + // Deprecated boolean argument: apply mild sharpen? + this.options.sharpenSigma = options ? -1 : 0; + } else if (is.number(options) && is.inRange(options, 0.01, 10000)) { + // Deprecated numeric argument: specific sigma + this.options.sharpenSigma = options; + // Deprecated control over flat areas + if (is.defined(flat)) { + if (is.number(flat) && is.inRange(flat, 0, 10000)) { + this.options.sharpenM1 = flat; + } else { + throw is.invalidParameterError('flat', 'number between 0 and 10000', flat); + } + } + // Deprecated control over jagged areas + if (is.defined(jagged)) { + if (is.number(jagged) && is.inRange(jagged, 0, 10000)) { + this.options.sharpenM2 = jagged; + } else { + throw is.invalidParameterError('jagged', 'number between 0 and 10000', jagged); + } + } + } else if (is.plainObject(options)) { + if (is.number(options.sigma) && is.inRange(options.sigma, 0.000001, 10)) { + this.options.sharpenSigma = options.sigma; + } else { + throw is.invalidParameterError('options.sigma', 'number between 0.000001 and 10', options.sigma); + } + if (is.defined(options.m1)) { + if (is.number(options.m1) && is.inRange(options.m1, 0, 1000000)) { + this.options.sharpenM1 = options.m1; + } else { + throw is.invalidParameterError('options.m1', 'number between 0 and 1000000', options.m1); + } + } + if (is.defined(options.m2)) { + if (is.number(options.m2) && is.inRange(options.m2, 0, 1000000)) { + this.options.sharpenM2 = options.m2; + } else { + throw is.invalidParameterError('options.m2', 'number between 0 and 1000000', options.m2); + } + } + if (is.defined(options.x1)) { + if (is.number(options.x1) && is.inRange(options.x1, 0, 1000000)) { + this.options.sharpenX1 = options.x1; + } else { + throw is.invalidParameterError('options.x1', 'number between 0 and 1000000', options.x1); + } + } + if (is.defined(options.y2)) { + if (is.number(options.y2) && is.inRange(options.y2, 0, 1000000)) { + this.options.sharpenY2 = options.y2; + } else { + throw is.invalidParameterError('options.y2', 'number between 0 and 1000000', options.y2); + } + } + if (is.defined(options.y3)) { + if (is.number(options.y3) && is.inRange(options.y3, 0, 1000000)) { + this.options.sharpenY3 = options.y3; + } else { + throw is.invalidParameterError('options.y3', 'number between 0 and 1000000', options.y3); + } + } + } else { + throw is.invalidParameterError('sigma', 'number between 0.01 and 10000', options); + } + return this; +} + +/** + * Apply median filter. + * When used without parameters the default window is 3x3. + * + * @example + * const output = await sharp(input).median().toBuffer(); + * + * @example + * const output = await sharp(input).median(5).toBuffer(); + * + * @param {number} [size=3] square mask size: size x size + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function median (size) { + if (!is.defined(size)) { + // No arguments: default to 3x3 + this.options.medianSize = 3; + } else if (is.integer(size) && is.inRange(size, 1, 1000)) { + // Numeric argument: specific sigma + this.options.medianSize = size; + } else { + throw is.invalidParameterError('size', 'integer between 1 and 1000', size); + } + return this; +} + +/** + * Blur the image. + * + * When used without parameters, performs a fast 3x3 box blur (equivalent to a box linear filter). + * + * When a `sigma` is provided, performs a slower, more accurate Gaussian blur. + * + * @example + * const boxBlurred = await sharp(input) + * .blur() + * .toBuffer(); + * + * @example + * const gaussianBlurred = await sharp(input) + * .blur(5) + * .toBuffer(); + * + * @param {Object|number|Boolean} [options] + * @param {number} [options.sigma] a value between 0.3 and 1000 representing the sigma of the Gaussian mask, where `sigma = 1 + radius / 2`. + * @param {string} [options.precision='integer'] How accurate the operation should be, one of: integer, float, approximate. + * @param {number} [options.minAmplitude=0.2] A value between 0.001 and 1. A smaller value will generate a larger, more accurate mask. + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function blur (options) { + let sigma; + if (is.number(options)) { + sigma = options; + } else if (is.plainObject(options)) { + if (!is.number(options.sigma)) { + throw is.invalidParameterError('options.sigma', 'number between 0.3 and 1000', sigma); + } + sigma = options.sigma; + if ('precision' in options) { + if (is.string(vipsPrecision[options.precision])) { + this.options.precision = vipsPrecision[options.precision]; + } else { + throw is.invalidParameterError('precision', 'one of: integer, float, approximate', options.precision); + } + } + if ('minAmplitude' in options) { + if (is.number(options.minAmplitude) && is.inRange(options.minAmplitude, 0.001, 1)) { + this.options.minAmpl = options.minAmplitude; + } else { + throw is.invalidParameterError('minAmplitude', 'number between 0.001 and 1', options.minAmplitude); + } + } + } + + if (!is.defined(options)) { + // No arguments: default to mild blur + this.options.blurSigma = -1; + } else if (is.bool(options)) { + // Boolean argument: apply mild blur? + this.options.blurSigma = options ? -1 : 0; + } else if (is.number(sigma) && is.inRange(sigma, 0.3, 1000)) { + // Numeric argument: specific sigma + this.options.blurSigma = sigma; + } else { + throw is.invalidParameterError('sigma', 'number between 0.3 and 1000', sigma); + } + + return this; +} + +/** + * Expand foreground objects using the dilate morphological operator. + * + * @example + * const output = await sharp(input) + * .dilate() + * .toBuffer(); + * + * @param {Number} [width=1] dilation width in pixels. + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function dilate (width) { + if (!is.defined(width)) { + this.options.dilateWidth = 1; + } else if (is.integer(width) && width > 0) { + this.options.dilateWidth = width; + } else { + throw is.invalidParameterError('dilate', 'positive integer', dilate); + } + return this; +} + +/** + * Shrink foreground objects using the erode morphological operator. + * + * @example + * const output = await sharp(input) + * .erode() + * .toBuffer(); + * + * @param {Number} [width=1] erosion width in pixels. + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function erode (width) { + if (!is.defined(width)) { + this.options.erodeWidth = 1; + } else if (is.integer(width) && width > 0) { + this.options.erodeWidth = width; + } else { + throw is.invalidParameterError('erode', 'positive integer', erode); + } + return this; +} + +/** + * Merge alpha transparency channel, if any, with a background, then remove the alpha channel. + * + * See also {@link /api-channel#removealpha removeAlpha}. + * + * @example + * await sharp(rgbaInput) + * .flatten({ background: '#F0A703' }) + * .toBuffer(); + * + * @param {Object} [options] + * @param {string|Object} [options.background={r: 0, g: 0, b: 0}] - background colour, parsed by the [color](https://www.npmjs.org/package/color) module, defaults to black. + * @returns {Sharp} + */ +function flatten (options) { + this.options.flatten = is.bool(options) ? options : true; + if (is.object(options)) { + this._setBackgroundColourOption('flattenBackground', options.background); + } + return this; +} + +/** + * Ensure the image has an alpha channel + * with all white pixel values made fully transparent. + * + * Existing alpha channel values for non-white pixels remain unchanged. + * + * This feature is experimental and the API may change. + * + * @since 0.32.1 + * + * @example + * await sharp(rgbInput) + * .unflatten() + * .toBuffer(); + * + * @example + * await sharp(rgbInput) + * .threshold(128, { grayscale: false }) // converter bright pixels to white + * .unflatten() + * .toBuffer(); + */ +function unflatten () { + this.options.unflatten = true; + return this; +} + +/** + * Apply a gamma correction by reducing the encoding (darken) pre-resize at a factor of `1/gamma` + * then increasing the encoding (brighten) post-resize at a factor of `gamma`. + * This can improve the perceived brightness of a resized image in non-linear colour spaces. + * JPEG and WebP input images will not take advantage of the shrink-on-load performance optimisation + * when applying a gamma correction. + * + * Supply a second argument to use a different output gamma value, otherwise the first value is used in both cases. + * + * @param {number} [gamma=2.2] value between 1.0 and 3.0. + * @param {number} [gammaOut] value between 1.0 and 3.0. (optional, defaults to same as `gamma`) + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function gamma (gamma, gammaOut) { + if (!is.defined(gamma)) { + // Default gamma correction of 2.2 (sRGB) + this.options.gamma = 2.2; + } else if (is.number(gamma) && is.inRange(gamma, 1, 3)) { + this.options.gamma = gamma; + } else { + throw is.invalidParameterError('gamma', 'number between 1.0 and 3.0', gamma); + } + if (!is.defined(gammaOut)) { + // Default gamma correction for output is same as input + this.options.gammaOut = this.options.gamma; + } else if (is.number(gammaOut) && is.inRange(gammaOut, 1, 3)) { + this.options.gammaOut = gammaOut; + } else { + throw is.invalidParameterError('gammaOut', 'number between 1.0 and 3.0', gammaOut); + } + return this; +} + +/** + * Produce the "negative" of the image. + * + * @example + * const output = await sharp(input) + * .negate() + * .toBuffer(); + * + * @example + * const output = await sharp(input) + * .negate({ alpha: false }) + * .toBuffer(); + * + * @param {Object} [options] + * @param {Boolean} [options.alpha=true] Whether or not to negate any alpha channel + * @returns {Sharp} + */ +function negate (options) { + this.options.negate = is.bool(options) ? options : true; + if (is.plainObject(options) && 'alpha' in options) { + if (!is.bool(options.alpha)) { + throw is.invalidParameterError('alpha', 'should be boolean value', options.alpha); + } else { + this.options.negateAlpha = options.alpha; + } + } + return this; +} + +/** + * Enhance output image contrast by stretching its luminance to cover a full dynamic range. + * + * Uses a histogram-based approach, taking a default range of 1% to 99% to reduce sensitivity to noise at the extremes. + * + * Luminance values below the `lower` percentile will be underexposed by clipping to zero. + * Luminance values above the `upper` percentile will be overexposed by clipping to the max pixel value. + * + * @example + * const output = await sharp(input) + * .normalise() + * .toBuffer(); + * + * @example + * const output = await sharp(input) + * .normalise({ lower: 0, upper: 100 }) + * .toBuffer(); + * + * @param {Object} [options] + * @param {number} [options.lower=1] - Percentile below which luminance values will be underexposed. + * @param {number} [options.upper=99] - Percentile above which luminance values will be overexposed. + * @returns {Sharp} + */ +function normalise (options) { + if (is.plainObject(options)) { + if (is.defined(options.lower)) { + if (is.number(options.lower) && is.inRange(options.lower, 0, 99)) { + this.options.normaliseLower = options.lower; + } else { + throw is.invalidParameterError('lower', 'number between 0 and 99', options.lower); + } + } + if (is.defined(options.upper)) { + if (is.number(options.upper) && is.inRange(options.upper, 1, 100)) { + this.options.normaliseUpper = options.upper; + } else { + throw is.invalidParameterError('upper', 'number between 1 and 100', options.upper); + } + } + } + if (this.options.normaliseLower >= this.options.normaliseUpper) { + throw is.invalidParameterError('range', 'lower to be less than upper', + `${this.options.normaliseLower} >= ${this.options.normaliseUpper}`); + } + this.options.normalise = true; + return this; +} + +/** + * Alternative spelling of normalise. + * + * @example + * const output = await sharp(input) + * .normalize() + * .toBuffer(); + * + * @param {Object} [options] + * @param {number} [options.lower=1] - Percentile below which luminance values will be underexposed. + * @param {number} [options.upper=99] - Percentile above which luminance values will be overexposed. + * @returns {Sharp} + */ +function normalize (options) { + return this.normalise(options); +} + +/** + * Perform contrast limiting adaptive histogram equalization + * {@link https://en.wikipedia.org/wiki/Adaptive_histogram_equalization#Contrast_Limited_AHE CLAHE}. + * + * This will, in general, enhance the clarity of the image by bringing out darker details. + * + * @since 0.28.3 + * + * @example + * const output = await sharp(input) + * .clahe({ + * width: 3, + * height: 3, + * }) + * .toBuffer(); + * + * @param {Object} options + * @param {number} options.width - Integral width of the search window, in pixels. + * @param {number} options.height - Integral height of the search window, in pixels. + * @param {number} [options.maxSlope=3] - Integral level of brightening, between 0 and 100, where 0 disables contrast limiting. + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function clahe (options) { + if (is.plainObject(options)) { + if (is.integer(options.width) && options.width > 0) { + this.options.claheWidth = options.width; + } else { + throw is.invalidParameterError('width', 'integer greater than zero', options.width); + } + if (is.integer(options.height) && options.height > 0) { + this.options.claheHeight = options.height; + } else { + throw is.invalidParameterError('height', 'integer greater than zero', options.height); + } + if (is.defined(options.maxSlope)) { + if (is.integer(options.maxSlope) && is.inRange(options.maxSlope, 0, 100)) { + this.options.claheMaxSlope = options.maxSlope; + } else { + throw is.invalidParameterError('maxSlope', 'integer between 0 and 100', options.maxSlope); + } + } + } else { + throw is.invalidParameterError('options', 'plain object', options); + } + return this; +} + +/** + * Convolve the image with the specified kernel. + * + * @example + * sharp(input) + * .convolve({ + * width: 3, + * height: 3, + * kernel: [-1, 0, 1, -2, 0, 2, -1, 0, 1] + * }) + * .raw() + * .toBuffer(function(err, data, info) { + * // data contains the raw pixel data representing the convolution + * // of the input image with the horizontal Sobel operator + * }); + * + * @param {Object} kernel + * @param {number} kernel.width - width of the kernel in pixels. + * @param {number} kernel.height - height of the kernel in pixels. + * @param {Array<number>} kernel.kernel - Array of length `width*height` containing the kernel values. + * @param {number} [kernel.scale=sum] - the scale of the kernel in pixels. + * @param {number} [kernel.offset=0] - the offset of the kernel in pixels. + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function convolve (kernel) { + if (!is.object(kernel) || !Array.isArray(kernel.kernel) || + !is.integer(kernel.width) || !is.integer(kernel.height) || + !is.inRange(kernel.width, 3, 1001) || !is.inRange(kernel.height, 3, 1001) || + kernel.height * kernel.width !== kernel.kernel.length + ) { + // must pass in a kernel + throw new Error('Invalid convolution kernel'); + } + // Default scale is sum of kernel values + if (!is.integer(kernel.scale)) { + kernel.scale = kernel.kernel.reduce((a, b) => a + b, 0); + } + // Clip scale to a minimum value of 1 + if (kernel.scale < 1) { + kernel.scale = 1; + } + if (!is.integer(kernel.offset)) { + kernel.offset = 0; + } + this.options.convKernel = kernel; + return this; +} + +/** + * Any pixel value greater than or equal to the threshold value will be set to 255, otherwise it will be set to 0. + * @param {number} [threshold=128] - a value in the range 0-255 representing the level at which the threshold will be applied. + * @param {Object} [options] + * @param {Boolean} [options.greyscale=true] - convert to single channel greyscale. + * @param {Boolean} [options.grayscale=true] - alternative spelling for greyscale. + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function threshold (threshold, options) { + if (!is.defined(threshold)) { + this.options.threshold = 128; + } else if (is.bool(threshold)) { + this.options.threshold = threshold ? 128 : 0; + } else if (is.integer(threshold) && is.inRange(threshold, 0, 255)) { + this.options.threshold = threshold; + } else { + throw is.invalidParameterError('threshold', 'integer between 0 and 255', threshold); + } + if (!is.object(options) || options.greyscale === true || options.grayscale === true) { + this.options.thresholdGrayscale = true; + } else { + this.options.thresholdGrayscale = false; + } + return this; +} + +/** + * Perform a bitwise boolean operation with operand image. + * + * This operation creates an output image where each pixel is the result of + * the selected bitwise boolean `operation` between the corresponding pixels of the input images. + * + * @param {Buffer|string} operand - Buffer containing image data or string containing the path to an image file. + * @param {string} operator - one of `and`, `or` or `eor` to perform that bitwise operation, like the C logic operators `&`, `|` and `^` respectively. + * @param {Object} [options] + * @param {Object} [options.raw] - describes operand when using raw pixel data. + * @param {number} [options.raw.width] + * @param {number} [options.raw.height] + * @param {number} [options.raw.channels] + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function boolean (operand, operator, options) { + this.options.boolean = this._createInputDescriptor(operand, options); + if (is.string(operator) && is.inArray(operator, ['and', 'or', 'eor'])) { + this.options.booleanOp = operator; + } else { + throw is.invalidParameterError('operator', 'one of: and, or, eor', operator); + } + return this; +} + +/** + * Apply the linear formula `a` * input + `b` to the image to adjust image levels. + * + * When a single number is provided, it will be used for all image channels. + * When an array of numbers is provided, the array length must match the number of channels. + * + * @example + * await sharp(input) + * .linear(0.5, 2) + * .toBuffer(); + * + * @example + * await sharp(rgbInput) + * .linear( + * [0.25, 0.5, 0.75], + * [150, 100, 50] + * ) + * .toBuffer(); + * + * @param {(number|number[])} [a=[]] multiplier + * @param {(number|number[])} [b=[]] offset + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function linear (a, b) { + if (!is.defined(a) && is.number(b)) { + a = 1.0; + } else if (is.number(a) && !is.defined(b)) { + b = 0.0; + } + if (!is.defined(a)) { + this.options.linearA = []; + } else if (is.number(a)) { + this.options.linearA = [a]; + } else if (Array.isArray(a) && a.length && a.every(is.number)) { + this.options.linearA = a; + } else { + throw is.invalidParameterError('a', 'number or array of numbers', a); + } + if (!is.defined(b)) { + this.options.linearB = []; + } else if (is.number(b)) { + this.options.linearB = [b]; + } else if (Array.isArray(b) && b.length && b.every(is.number)) { + this.options.linearB = b; + } else { + throw is.invalidParameterError('b', 'number or array of numbers', b); + } + if (this.options.linearA.length !== this.options.linearB.length) { + throw new Error('Expected a and b to be arrays of the same length'); + } + return this; +} + +/** + * Recombine the image with the specified matrix. + * + * @since 0.21.1 + * + * @example + * sharp(input) + * .recomb([ + * [0.3588, 0.7044, 0.1368], + * [0.2990, 0.5870, 0.1140], + * [0.2392, 0.4696, 0.0912], + * ]) + * .raw() + * .toBuffer(function(err, data, info) { + * // data contains the raw pixel data after applying the matrix + * // With this example input, a sepia filter has been applied + * }); + * + * @param {Array<Array<number>>} inputMatrix - 3x3 or 4x4 Recombination matrix + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function recomb (inputMatrix) { + if (!Array.isArray(inputMatrix)) { + throw is.invalidParameterError('inputMatrix', 'array', inputMatrix); + } + if (inputMatrix.length !== 3 && inputMatrix.length !== 4) { + throw is.invalidParameterError('inputMatrix', '3x3 or 4x4 array', inputMatrix.length); + } + const recombMatrix = inputMatrix.flat().map(Number); + if (recombMatrix.length !== 9 && recombMatrix.length !== 16) { + throw is.invalidParameterError('inputMatrix', 'cardinality of 9 or 16', recombMatrix.length); + } + this.options.recombMatrix = recombMatrix; + return this; +} + +/** + * Transforms the image using brightness, saturation, hue rotation, and lightness. + * Brightness and lightness both operate on luminance, with the difference being that + * brightness is multiplicative whereas lightness is additive. + * + * @since 0.22.1 + * + * @example + * // increase brightness by a factor of 2 + * const output = await sharp(input) + * .modulate({ + * brightness: 2 + * }) + * .toBuffer(); + * + * @example + * // hue-rotate by 180 degrees + * const output = await sharp(input) + * .modulate({ + * hue: 180 + * }) + * .toBuffer(); + * + * @example + * // increase lightness by +50 + * const output = await sharp(input) + * .modulate({ + * lightness: 50 + * }) + * .toBuffer(); + * + * @example + * // decrease brightness and saturation while also hue-rotating by 90 degrees + * const output = await sharp(input) + * .modulate({ + * brightness: 0.5, + * saturation: 0.5, + * hue: 90, + * }) + * .toBuffer(); + * + * @param {Object} [options] + * @param {number} [options.brightness] Brightness multiplier + * @param {number} [options.saturation] Saturation multiplier + * @param {number} [options.hue] Degrees for hue rotation + * @param {number} [options.lightness] Lightness addend + * @returns {Sharp} + */ +function modulate (options) { + if (!is.plainObject(options)) { + throw is.invalidParameterError('options', 'plain object', options); + } + if ('brightness' in options) { + if (is.number(options.brightness) && options.brightness >= 0) { + this.options.brightness = options.brightness; + } else { + throw is.invalidParameterError('brightness', 'number above zero', options.brightness); + } + } + if ('saturation' in options) { + if (is.number(options.saturation) && options.saturation >= 0) { + this.options.saturation = options.saturation; + } else { + throw is.invalidParameterError('saturation', 'number above zero', options.saturation); + } + } + if ('hue' in options) { + if (is.integer(options.hue)) { + this.options.hue = options.hue % 360; + } else { + throw is.invalidParameterError('hue', 'number', options.hue); + } + } + if ('lightness' in options) { + if (is.number(options.lightness)) { + this.options.lightness = options.lightness; + } else { + throw is.invalidParameterError('lightness', 'number', options.lightness); + } + } + return this; +} + +/** + * Decorate the Sharp prototype with operation-related functions. + * @module Sharp + * @private + */ +module.exports = (Sharp) => { + Object.assign(Sharp.prototype, { + autoOrient, + rotate, + flip, + flop, + affine, + sharpen, + erode, + dilate, + median, + blur, + flatten, + unflatten, + gamma, + negate, + normalise, + normalize, + clahe, + convolve, + threshold, + boolean, + linear, + recomb, + modulate + }); +}; diff --git a/build/node_modules/sharp/lib/output.js b/build/node_modules/sharp/lib/output.js new file mode 100644 index 0000000..27a6ac4 --- /dev/null +++ b/build/node_modules/sharp/lib/output.js @@ -0,0 +1,1666 @@ +/*! + Copyright 2013 Lovell Fuller and others. + SPDX-License-Identifier: Apache-2.0 +*/ + +const path = require('node:path'); +const is = require('./is'); +const sharp = require('./sharp'); + +const formats = new Map([ + ['heic', 'heif'], + ['heif', 'heif'], + ['avif', 'avif'], + ['jpeg', 'jpeg'], + ['jpg', 'jpeg'], + ['jpe', 'jpeg'], + ['tile', 'tile'], + ['dz', 'tile'], + ['png', 'png'], + ['raw', 'raw'], + ['tiff', 'tiff'], + ['tif', 'tiff'], + ['webp', 'webp'], + ['gif', 'gif'], + ['jp2', 'jp2'], + ['jpx', 'jp2'], + ['j2k', 'jp2'], + ['j2c', 'jp2'], + ['jxl', 'jxl'] +]); + +const jp2Regex = /\.(jp[2x]|j2[kc])$/i; + +const errJp2Save = () => new Error('JP2 output requires libvips with support for OpenJPEG'); + +const bitdepthFromColourCount = (colours) => 1 << 31 - Math.clz32(Math.ceil(Math.log2(colours))); + +/** + * Write output image data to a file. + * + * If an explicit output format is not selected, it will be inferred from the extension, + * with JPEG, PNG, WebP, AVIF, TIFF, GIF, DZI, and libvips' V format supported. + * Note that raw pixel data is only supported for buffer output. + * + * By default all metadata will be removed, which includes EXIF-based orientation. + * See {@link #withmetadata withMetadata} for control over this. + * + * The caller is responsible for ensuring directory structures and permissions exist. + * + * A `Promise` is returned when `callback` is not provided. + * + * @example + * sharp(input) + * .toFile('output.png', (err, info) => { ... }); + * + * @example + * sharp(input) + * .toFile('output.png') + * .then(info => { ... }) + * .catch(err => { ... }); + * + * @param {string} fileOut - the path to write the image data to. + * @param {Function} [callback] - called on completion with two arguments `(err, info)`. + * `info` contains the output image `format`, `size` (bytes), `width`, `height`, + * `channels` and `premultiplied` (indicating if premultiplication was used). + * When using a crop strategy also contains `cropOffsetLeft` and `cropOffsetTop`. + * When using the attention crop strategy also contains `attentionX` and `attentionY`, the focal point of the cropped region. + * Animated output will also contain `pageHeight` and `pages`. + * May also contain `textAutofitDpi` (dpi the font was rendered at) if image was created from text. + * @returns {Promise<Object>} - when no callback is provided + * @throws {Error} Invalid parameters + */ +function toFile (fileOut, callback) { + let err; + if (!is.string(fileOut)) { + err = new Error('Missing output file path'); + } else if (is.string(this.options.input.file) && path.resolve(this.options.input.file) === path.resolve(fileOut)) { + err = new Error('Cannot use same file for input and output'); + } else if (jp2Regex.test(path.extname(fileOut)) && !this.constructor.format.jp2k.output.file) { + err = errJp2Save(); + } + if (err) { + if (is.fn(callback)) { + callback(err); + } else { + return Promise.reject(err); + } + } else { + this.options.fileOut = fileOut; + const stack = Error(); + return this._pipeline(callback, stack); + } + return this; +} + +/** + * Write output to a Buffer. + * JPEG, PNG, WebP, AVIF, TIFF, GIF and raw pixel data output are supported. + * + * Use {@link #toformat toFormat} or one of the format-specific functions such as {@link #jpeg jpeg}, {@link #png png} etc. to set the output format. + * + * If no explicit format is set, the output format will match the input image, except SVG input which becomes PNG output. + * + * By default all metadata will be removed, which includes EXIF-based orientation. + * See {@link #withmetadata withMetadata} for control over this. + * + * `callback`, if present, gets three arguments `(err, data, info)` where: + * - `err` is an error, if any. + * - `data` is the output image data. + * - `info` contains the output image `format`, `size` (bytes), `width`, `height`, + * `channels` and `premultiplied` (indicating if premultiplication was used). + * When using a crop strategy also contains `cropOffsetLeft` and `cropOffsetTop`. + * Animated output will also contain `pageHeight` and `pages`. + * May also contain `textAutofitDpi` (dpi the font was rendered at) if image was created from text. + * + * A `Promise` is returned when `callback` is not provided. + * + * @example + * sharp(input) + * .toBuffer((err, data, info) => { ... }); + * + * @example + * sharp(input) + * .toBuffer() + * .then(data => { ... }) + * .catch(err => { ... }); + * + * @example + * sharp(input) + * .png() + * .toBuffer({ resolveWithObject: true }) + * .then(({ data, info }) => { ... }) + * .catch(err => { ... }); + * + * @example + * const { data, info } = await sharp('my-image.jpg') + * // output the raw pixels + * .raw() + * .toBuffer({ resolveWithObject: true }); + * + * // create a more type safe way to work with the raw pixel data + * // this will not copy the data, instead it will change `data`s underlying ArrayBuffer + * // so `data` and `pixelArray` point to the same memory location + * const pixelArray = new Uint8ClampedArray(data.buffer); + * + * // When you are done changing the pixelArray, sharp takes the `pixelArray` as an input + * const { width, height, channels } = info; + * await sharp(pixelArray, { raw: { width, height, channels } }) + * .toFile('my-changed-image.jpg'); + * + * @param {Object} [options] + * @param {boolean} [options.resolveWithObject] Resolve the Promise with an Object containing `data` and `info` properties instead of resolving only with `data`. + * @param {Function} [callback] + * @returns {Promise<Buffer>} - when no callback is provided + */ +function toBuffer (options, callback) { + if (is.object(options)) { + this._setBooleanOption('resolveWithObject', options.resolveWithObject); + } else if (this.options.resolveWithObject) { + this.options.resolveWithObject = false; + } + this.options.fileOut = ''; + const stack = Error(); + return this._pipeline(is.fn(options) ? options : callback, stack); +} + +/** + * Keep all EXIF metadata from the input image in the output image. + * + * EXIF metadata is unsupported for TIFF output. + * + * @since 0.33.0 + * + * @example + * const outputWithExif = await sharp(inputWithExif) + * .keepExif() + * .toBuffer(); + * + * @returns {Sharp} + */ +function keepExif () { + this.options.keepMetadata |= 0b00001; + return this; +} + +/** + * Set EXIF metadata in the output image, ignoring any EXIF in the input image. + * + * @since 0.33.0 + * + * @example + * const dataWithExif = await sharp(input) + * .withExif({ + * IFD0: { + * Copyright: 'The National Gallery' + * }, + * IFD3: { + * GPSLatitudeRef: 'N', + * GPSLatitude: '51/1 30/1 3230/100', + * GPSLongitudeRef: 'W', + * GPSLongitude: '0/1 7/1 4366/100' + * } + * }) + * .toBuffer(); + * + * @param {Object<string, Object<string, string>>} exif Object keyed by IFD0, IFD1 etc. of key/value string pairs to write as EXIF data. + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function withExif (exif) { + if (is.object(exif)) { + for (const [ifd, entries] of Object.entries(exif)) { + if (is.object(entries)) { + for (const [k, v] of Object.entries(entries)) { + if (is.string(v)) { + this.options.withExif[`exif-${ifd.toLowerCase()}-${k}`] = v; + } else { + throw is.invalidParameterError(`${ifd}.${k}`, 'string', v); + } + } + } else { + throw is.invalidParameterError(ifd, 'object', entries); + } + } + } else { + throw is.invalidParameterError('exif', 'object', exif); + } + this.options.withExifMerge = false; + return this.keepExif(); +} + +/** + * Update EXIF metadata from the input image in the output image. + * + * @since 0.33.0 + * + * @example + * const dataWithMergedExif = await sharp(inputWithExif) + * .withExifMerge({ + * IFD0: { + * Copyright: 'The National Gallery' + * } + * }) + * .toBuffer(); + * + * @param {Object<string, Object<string, string>>} exif Object keyed by IFD0, IFD1 etc. of key/value string pairs to write as EXIF data. + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function withExifMerge (exif) { + this.withExif(exif); + this.options.withExifMerge = true; + return this; +} + +/** + * Keep ICC profile from the input image in the output image. + * + * When input and output colour spaces differ, use with {@link /api-colour/#tocolourspace toColourspace} and optionally {@link /api-colour/#pipelinecolourspace pipelineColourspace}. + * + * @since 0.33.0 + * + * @example + * const outputWithIccProfile = await sharp(inputWithIccProfile) + * .keepIccProfile() + * .toBuffer(); + * + * @example + * const cmykOutputWithIccProfile = await sharp(cmykInputWithIccProfile) + * .pipelineColourspace('cmyk') + * .toColourspace('cmyk') + * .keepIccProfile() + * .toBuffer(); + * + * @returns {Sharp} + */ +function keepIccProfile () { + this.options.keepMetadata |= 0b01000; + return this; +} + +/** + * Transform using an ICC profile and attach to the output image. + * + * This can either be an absolute filesystem path or + * built-in profile name (`srgb`, `p3`, `cmyk`). + * + * @since 0.33.0 + * + * @example + * const outputWithP3 = await sharp(input) + * .withIccProfile('p3') + * .toBuffer(); + * + * @param {string} icc - Absolute filesystem path to output ICC profile or built-in profile name (srgb, p3, cmyk). + * @param {Object} [options] + * @param {number} [options.attach=true] Should the ICC profile be included in the output image metadata? + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function withIccProfile (icc, options) { + if (is.string(icc)) { + this.options.withIccProfile = icc; + } else { + throw is.invalidParameterError('icc', 'string', icc); + } + this.keepIccProfile(); + if (is.object(options)) { + if (is.defined(options.attach)) { + if (is.bool(options.attach)) { + if (!options.attach) { + this.options.keepMetadata &= ~0b01000; + } + } else { + throw is.invalidParameterError('attach', 'boolean', options.attach); + } + } + } + return this; +} + +/** + * Keep XMP metadata from the input image in the output image. + * + * @since 0.34.3 + * + * @example + * const outputWithXmp = await sharp(inputWithXmp) + * .keepXmp() + * .toBuffer(); + * + * @returns {Sharp} + */ +function keepXmp () { + this.options.keepMetadata |= 0b00010; + return this; +} + +/** + * Set XMP metadata in the output image. + * + * Supported by PNG, JPEG, WebP, and TIFF output. + * + * @since 0.34.3 + * + * @example + * const xmpString = ` + * <?xml version="1.0"?> + * <x:xmpmeta xmlns:x="adobe:ns:meta/"> + * <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + * <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/"> + * <dc:creator><rdf:Seq><rdf:li>John Doe</rdf:li></rdf:Seq></dc:creator> + * </rdf:Description> + * </rdf:RDF> + * </x:xmpmeta>`; + * + * const data = await sharp(input) + * .withXmp(xmpString) + * .toBuffer(); + * + * @param {string} xmp String containing XMP metadata to be embedded in the output image. + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function withXmp (xmp) { + if (is.string(xmp) && xmp.length > 0) { + this.options.withXmp = xmp; + this.options.keepMetadata |= 0b00010; + } else { + throw is.invalidParameterError('xmp', 'non-empty string', xmp); + } + return this; +} + +/** + * Keep all metadata (EXIF, ICC, XMP, IPTC) from the input image in the output image. + * + * The default behaviour, when `keepMetadata` is not used, is to convert to the device-independent + * sRGB colour space and strip all metadata, including the removal of any ICC profile. + * + * @since 0.33.0 + * + * @example + * const outputWithMetadata = await sharp(inputWithMetadata) + * .keepMetadata() + * .toBuffer(); + * + * @returns {Sharp} + */ +function keepMetadata () { + this.options.keepMetadata = 0b11111; + return this; +} + +/** + * Keep most metadata (EXIF, XMP, IPTC) from the input image in the output image. + * + * This will also convert to and add a web-friendly sRGB ICC profile if appropriate. + * + * Allows orientation and density to be set or updated. + * + * @example + * const outputSrgbWithMetadata = await sharp(inputRgbWithMetadata) + * .withMetadata() + * .toBuffer(); + * + * @example + * // Set output metadata to 96 DPI + * const data = await sharp(input) + * .withMetadata({ density: 96 }) + * .toBuffer(); + * + * @param {Object} [options] + * @param {number} [options.orientation] Used to update the EXIF `Orientation` tag, integer between 1 and 8. + * @param {number} [options.density] Number of pixels per inch (DPI). + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function withMetadata (options) { + this.keepMetadata(); + this.withIccProfile('srgb'); + if (is.object(options)) { + if (is.defined(options.orientation)) { + if (is.integer(options.orientation) && is.inRange(options.orientation, 1, 8)) { + this.options.withMetadataOrientation = options.orientation; + } else { + throw is.invalidParameterError('orientation', 'integer between 1 and 8', options.orientation); + } + } + if (is.defined(options.density)) { + if (is.number(options.density) && options.density > 0) { + this.options.withMetadataDensity = options.density; + } else { + throw is.invalidParameterError('density', 'positive number', options.density); + } + } + if (is.defined(options.icc)) { + this.withIccProfile(options.icc); + } + if (is.defined(options.exif)) { + this.withExifMerge(options.exif); + } + } + return this; +} + +/** + * Force output to a given format. + * + * @example + * // Convert any input to PNG output + * const data = await sharp(input) + * .toFormat('png') + * .toBuffer(); + * + * @param {(string|Object)} format - as a string or an Object with an 'id' attribute + * @param {Object} options - output options + * @returns {Sharp} + * @throws {Error} unsupported format or options + */ +function toFormat (format, options) { + const actualFormat = formats.get((is.object(format) && is.string(format.id) ? format.id : format).toLowerCase()); + if (!actualFormat) { + throw is.invalidParameterError('format', `one of: ${[...formats.keys()].join(', ')}`, format); + } + return this[actualFormat](options); +} + +/** + * Use these JPEG options for output image. + * + * @example + * // Convert any input to very high quality JPEG output + * const data = await sharp(input) + * .jpeg({ + * quality: 100, + * chromaSubsampling: '4:4:4' + * }) + * .toBuffer(); + * + * @example + * // Use mozjpeg to reduce output JPEG file size (slower) + * const data = await sharp(input) + * .jpeg({ mozjpeg: true }) + * .toBuffer(); + * + * @param {Object} [options] - output options + * @param {number} [options.quality=80] - quality, integer 1-100 + * @param {boolean} [options.progressive=false] - use progressive (interlace) scan + * @param {string} [options.chromaSubsampling='4:2:0'] - set to '4:4:4' to prevent chroma subsampling otherwise defaults to '4:2:0' chroma subsampling + * @param {boolean} [options.optimiseCoding=true] - optimise Huffman coding tables + * @param {boolean} [options.optimizeCoding=true] - alternative spelling of optimiseCoding + * @param {boolean} [options.mozjpeg=false] - use mozjpeg defaults, equivalent to `{ trellisQuantisation: true, overshootDeringing: true, optimiseScans: true, quantisationTable: 3 }` + * @param {boolean} [options.trellisQuantisation=false] - apply trellis quantisation + * @param {boolean} [options.overshootDeringing=false] - apply overshoot deringing + * @param {boolean} [options.optimiseScans=false] - optimise progressive scans, forces progressive + * @param {boolean} [options.optimizeScans=false] - alternative spelling of optimiseScans + * @param {number} [options.quantisationTable=0] - quantization table to use, integer 0-8 + * @param {number} [options.quantizationTable=0] - alternative spelling of quantisationTable + * @param {boolean} [options.force=true] - force JPEG output, otherwise attempt to use input format + * @returns {Sharp} + * @throws {Error} Invalid options + */ +function jpeg (options) { + if (is.object(options)) { + if (is.defined(options.quality)) { + if (is.integer(options.quality) && is.inRange(options.quality, 1, 100)) { + this.options.jpegQuality = options.quality; + } else { + throw is.invalidParameterError('quality', 'integer between 1 and 100', options.quality); + } + } + if (is.defined(options.progressive)) { + this._setBooleanOption('jpegProgressive', options.progressive); + } + if (is.defined(options.chromaSubsampling)) { + if (is.string(options.chromaSubsampling) && is.inArray(options.chromaSubsampling, ['4:2:0', '4:4:4'])) { + this.options.jpegChromaSubsampling = options.chromaSubsampling; + } else { + throw is.invalidParameterError('chromaSubsampling', 'one of: 4:2:0, 4:4:4', options.chromaSubsampling); + } + } + const optimiseCoding = is.bool(options.optimizeCoding) ? options.optimizeCoding : options.optimiseCoding; + if (is.defined(optimiseCoding)) { + this._setBooleanOption('jpegOptimiseCoding', optimiseCoding); + } + if (is.defined(options.mozjpeg)) { + if (is.bool(options.mozjpeg)) { + if (options.mozjpeg) { + this.options.jpegTrellisQuantisation = true; + this.options.jpegOvershootDeringing = true; + this.options.jpegOptimiseScans = true; + this.options.jpegProgressive = true; + this.options.jpegQuantisationTable = 3; + } + } else { + throw is.invalidParameterError('mozjpeg', 'boolean', options.mozjpeg); + } + } + const trellisQuantisation = is.bool(options.trellisQuantization) ? options.trellisQuantization : options.trellisQuantisation; + if (is.defined(trellisQuantisation)) { + this._setBooleanOption('jpegTrellisQuantisation', trellisQuantisation); + } + if (is.defined(options.overshootDeringing)) { + this._setBooleanOption('jpegOvershootDeringing', options.overshootDeringing); + } + const optimiseScans = is.bool(options.optimizeScans) ? options.optimizeScans : options.optimiseScans; + if (is.defined(optimiseScans)) { + this._setBooleanOption('jpegOptimiseScans', optimiseScans); + if (optimiseScans) { + this.options.jpegProgressive = true; + } + } + const quantisationTable = is.number(options.quantizationTable) ? options.quantizationTable : options.quantisationTable; + if (is.defined(quantisationTable)) { + if (is.integer(quantisationTable) && is.inRange(quantisationTable, 0, 8)) { + this.options.jpegQuantisationTable = quantisationTable; + } else { + throw is.invalidParameterError('quantisationTable', 'integer between 0 and 8', quantisationTable); + } + } + } + return this._updateFormatOut('jpeg', options); +} + +/** + * Use these PNG options for output image. + * + * By default, PNG output is full colour at 8 bits per pixel. + * + * Indexed PNG input at 1, 2 or 4 bits per pixel is converted to 8 bits per pixel. + * Set `palette` to `true` for slower, indexed PNG output. + * + * For 16 bits per pixel output, convert to `rgb16` via + * {@link /api-colour/#tocolourspace toColourspace}. + * + * @example + * // Convert any input to full colour PNG output + * const data = await sharp(input) + * .png() + * .toBuffer(); + * + * @example + * // Convert any input to indexed PNG output (slower) + * const data = await sharp(input) + * .png({ palette: true }) + * .toBuffer(); + * + * @example + * // Output 16 bits per pixel RGB(A) + * const data = await sharp(input) + * .toColourspace('rgb16') + * .png() + * .toBuffer(); + * + * @param {Object} [options] + * @param {boolean} [options.progressive=false] - use progressive (interlace) scan + * @param {number} [options.compressionLevel=6] - zlib compression level, 0 (fastest, largest) to 9 (slowest, smallest) + * @param {boolean} [options.adaptiveFiltering=false] - use adaptive row filtering + * @param {boolean} [options.palette=false] - quantise to a palette-based image with alpha transparency support + * @param {number} [options.quality=100] - use the lowest number of colours needed to achieve given quality, sets `palette` to `true` + * @param {number} [options.effort=7] - CPU effort, between 1 (fastest) and 10 (slowest), sets `palette` to `true` + * @param {number} [options.colours=256] - maximum number of palette entries, sets `palette` to `true` + * @param {number} [options.colors=256] - alternative spelling of `options.colours`, sets `palette` to `true` + * @param {number} [options.dither=1.0] - level of Floyd-Steinberg error diffusion, sets `palette` to `true` + * @param {boolean} [options.force=true] - force PNG output, otherwise attempt to use input format + * @returns {Sharp} + * @throws {Error} Invalid options + */ +function png (options) { + if (is.object(options)) { + if (is.defined(options.progressive)) { + this._setBooleanOption('pngProgressive', options.progressive); + } + if (is.defined(options.compressionLevel)) { + if (is.integer(options.compressionLevel) && is.inRange(options.compressionLevel, 0, 9)) { + this.options.pngCompressionLevel = options.compressionLevel; + } else { + throw is.invalidParameterError('compressionLevel', 'integer between 0 and 9', options.compressionLevel); + } + } + if (is.defined(options.adaptiveFiltering)) { + this._setBooleanOption('pngAdaptiveFiltering', options.adaptiveFiltering); + } + const colours = options.colours || options.colors; + if (is.defined(colours)) { + if (is.integer(colours) && is.inRange(colours, 2, 256)) { + this.options.pngBitdepth = bitdepthFromColourCount(colours); + } else { + throw is.invalidParameterError('colours', 'integer between 2 and 256', colours); + } + } + if (is.defined(options.palette)) { + this._setBooleanOption('pngPalette', options.palette); + } else if ([options.quality, options.effort, options.colours, options.colors, options.dither].some(is.defined)) { + this._setBooleanOption('pngPalette', true); + } + if (this.options.pngPalette) { + if (is.defined(options.quality)) { + if (is.integer(options.quality) && is.inRange(options.quality, 0, 100)) { + this.options.pngQuality = options.quality; + } else { + throw is.invalidParameterError('quality', 'integer between 0 and 100', options.quality); + } + } + if (is.defined(options.effort)) { + if (is.integer(options.effort) && is.inRange(options.effort, 1, 10)) { + this.options.pngEffort = options.effort; + } else { + throw is.invalidParameterError('effort', 'integer between 1 and 10', options.effort); + } + } + if (is.defined(options.dither)) { + if (is.number(options.dither) && is.inRange(options.dither, 0, 1)) { + this.options.pngDither = options.dither; + } else { + throw is.invalidParameterError('dither', 'number between 0.0 and 1.0', options.dither); + } + } + } + } + return this._updateFormatOut('png', options); +} + +/** + * Use these WebP options for output image. + * + * @example + * // Convert any input to lossless WebP output + * const data = await sharp(input) + * .webp({ lossless: true }) + * .toBuffer(); + * + * @example + * // Optimise the file size of an animated WebP + * const outputWebp = await sharp(inputWebp, { animated: true }) + * .webp({ effort: 6 }) + * .toBuffer(); + * + * @param {Object} [options] - output options + * @param {number} [options.quality=80] - quality, integer 1-100 + * @param {number} [options.alphaQuality=100] - quality of alpha layer, integer 0-100 + * @param {boolean} [options.lossless=false] - use lossless compression mode + * @param {boolean} [options.nearLossless=false] - use near_lossless compression mode + * @param {boolean} [options.smartSubsample=false] - use high quality chroma subsampling + * @param {boolean} [options.smartDeblock=false] - auto-adjust the deblocking filter, can improve low contrast edges (slow) + * @param {string} [options.preset='default'] - named preset for preprocessing/filtering, one of: default, photo, picture, drawing, icon, text + * @param {number} [options.effort=4] - CPU effort, between 0 (fastest) and 6 (slowest) + * @param {number} [options.loop=0] - number of animation iterations, use 0 for infinite animation + * @param {number|number[]} [options.delay] - delay(s) between animation frames (in milliseconds) + * @param {boolean} [options.minSize=false] - prevent use of animation key frames to minimise file size (slow) + * @param {boolean} [options.mixed=false] - allow mixture of lossy and lossless animation frames (slow) + * @param {boolean} [options.force=true] - force WebP output, otherwise attempt to use input format + * @returns {Sharp} + * @throws {Error} Invalid options + */ +function webp (options) { + if (is.object(options)) { + if (is.defined(options.quality)) { + if (is.integer(options.quality) && is.inRange(options.quality, 1, 100)) { + this.options.webpQuality = options.quality; + } else { + throw is.invalidParameterError('quality', 'integer between 1 and 100', options.quality); + } + } + if (is.defined(options.alphaQuality)) { + if (is.integer(options.alphaQuality) && is.inRange(options.alphaQuality, 0, 100)) { + this.options.webpAlphaQuality = options.alphaQuality; + } else { + throw is.invalidParameterError('alphaQuality', 'integer between 0 and 100', options.alphaQuality); + } + } + if (is.defined(options.lossless)) { + this._setBooleanOption('webpLossless', options.lossless); + } + if (is.defined(options.nearLossless)) { + this._setBooleanOption('webpNearLossless', options.nearLossless); + } + if (is.defined(options.smartSubsample)) { + this._setBooleanOption('webpSmartSubsample', options.smartSubsample); + } + if (is.defined(options.smartDeblock)) { + this._setBooleanOption('webpSmartDeblock', options.smartDeblock); + } + if (is.defined(options.preset)) { + if (is.string(options.preset) && is.inArray(options.preset, ['default', 'photo', 'picture', 'drawing', 'icon', 'text'])) { + this.options.webpPreset = options.preset; + } else { + throw is.invalidParameterError('preset', 'one of: default, photo, picture, drawing, icon, text', options.preset); + } + } + if (is.defined(options.effort)) { + if (is.integer(options.effort) && is.inRange(options.effort, 0, 6)) { + this.options.webpEffort = options.effort; + } else { + throw is.invalidParameterError('effort', 'integer between 0 and 6', options.effort); + } + } + if (is.defined(options.minSize)) { + this._setBooleanOption('webpMinSize', options.minSize); + } + if (is.defined(options.mixed)) { + this._setBooleanOption('webpMixed', options.mixed); + } + } + trySetAnimationOptions(options, this.options); + return this._updateFormatOut('webp', options); +} + +/** + * Use these GIF options for the output image. + * + * The first entry in the palette is reserved for transparency. + * + * The palette of the input image will be re-used if possible. + * + * @since 0.30.0 + * + * @example + * // Convert PNG to GIF + * await sharp(pngBuffer) + * .gif() + * .toBuffer(); + * + * @example + * // Convert animated WebP to animated GIF + * await sharp('animated.webp', { animated: true }) + * .toFile('animated.gif'); + * + * @example + * // Create a 128x128, cropped, non-dithered, animated thumbnail of an animated GIF + * const out = await sharp('in.gif', { animated: true }) + * .resize({ width: 128, height: 128 }) + * .gif({ dither: 0 }) + * .toBuffer(); + * + * @example + * // Lossy file size reduction of animated GIF + * await sharp('in.gif', { animated: true }) + * .gif({ interFrameMaxError: 8 }) + * .toFile('optim.gif'); + * + * @param {Object} [options] - output options + * @param {boolean} [options.reuse=true] - re-use existing palette, otherwise generate new (slow) + * @param {boolean} [options.progressive=false] - use progressive (interlace) scan + * @param {number} [options.colours=256] - maximum number of palette entries, including transparency, between 2 and 256 + * @param {number} [options.colors=256] - alternative spelling of `options.colours` + * @param {number} [options.effort=7] - CPU effort, between 1 (fastest) and 10 (slowest) + * @param {number} [options.dither=1.0] - level of Floyd-Steinberg error diffusion, between 0 (least) and 1 (most) + * @param {number} [options.interFrameMaxError=0] - maximum inter-frame error for transparency, between 0 (lossless) and 32 + * @param {number} [options.interPaletteMaxError=3] - maximum inter-palette error for palette reuse, between 0 and 256 + * @param {boolean} [options.keepDuplicateFrames=false] - keep duplicate frames in the output instead of combining them + * @param {number} [options.loop=0] - number of animation iterations, use 0 for infinite animation + * @param {number|number[]} [options.delay] - delay(s) between animation frames (in milliseconds) + * @param {boolean} [options.force=true] - force GIF output, otherwise attempt to use input format + * @returns {Sharp} + * @throws {Error} Invalid options + */ +function gif (options) { + if (is.object(options)) { + if (is.defined(options.reuse)) { + this._setBooleanOption('gifReuse', options.reuse); + } + if (is.defined(options.progressive)) { + this._setBooleanOption('gifProgressive', options.progressive); + } + const colours = options.colours || options.colors; + if (is.defined(colours)) { + if (is.integer(colours) && is.inRange(colours, 2, 256)) { + this.options.gifBitdepth = bitdepthFromColourCount(colours); + } else { + throw is.invalidParameterError('colours', 'integer between 2 and 256', colours); + } + } + if (is.defined(options.effort)) { + if (is.number(options.effort) && is.inRange(options.effort, 1, 10)) { + this.options.gifEffort = options.effort; + } else { + throw is.invalidParameterError('effort', 'integer between 1 and 10', options.effort); + } + } + if (is.defined(options.dither)) { + if (is.number(options.dither) && is.inRange(options.dither, 0, 1)) { + this.options.gifDither = options.dither; + } else { + throw is.invalidParameterError('dither', 'number between 0.0 and 1.0', options.dither); + } + } + if (is.defined(options.interFrameMaxError)) { + if (is.number(options.interFrameMaxError) && is.inRange(options.interFrameMaxError, 0, 32)) { + this.options.gifInterFrameMaxError = options.interFrameMaxError; + } else { + throw is.invalidParameterError('interFrameMaxError', 'number between 0.0 and 32.0', options.interFrameMaxError); + } + } + if (is.defined(options.interPaletteMaxError)) { + if (is.number(options.interPaletteMaxError) && is.inRange(options.interPaletteMaxError, 0, 256)) { + this.options.gifInterPaletteMaxError = options.interPaletteMaxError; + } else { + throw is.invalidParameterError('interPaletteMaxError', 'number between 0.0 and 256.0', options.interPaletteMaxError); + } + } + if (is.defined(options.keepDuplicateFrames)) { + if (is.bool(options.keepDuplicateFrames)) { + this._setBooleanOption('gifKeepDuplicateFrames', options.keepDuplicateFrames); + } else { + throw is.invalidParameterError('keepDuplicateFrames', 'boolean', options.keepDuplicateFrames); + } + } + } + trySetAnimationOptions(options, this.options); + return this._updateFormatOut('gif', options); +} + +/** + * Use these JP2 options for output image. + * + * Requires libvips compiled with support for OpenJPEG. + * The prebuilt binaries do not include this - see + * {@link /install#custom-libvips installing a custom libvips}. + * + * @example + * // Convert any input to lossless JP2 output + * const data = await sharp(input) + * .jp2({ lossless: true }) + * .toBuffer(); + * + * @example + * // Convert any input to very high quality JP2 output + * const data = await sharp(input) + * .jp2({ + * quality: 100, + * chromaSubsampling: '4:4:4' + * }) + * .toBuffer(); + * + * @since 0.29.1 + * + * @param {Object} [options] - output options + * @param {number} [options.quality=80] - quality, integer 1-100 + * @param {boolean} [options.lossless=false] - use lossless compression mode + * @param {number} [options.tileWidth=512] - horizontal tile size + * @param {number} [options.tileHeight=512] - vertical tile size + * @param {string} [options.chromaSubsampling='4:4:4'] - set to '4:2:0' to use chroma subsampling + * @returns {Sharp} + * @throws {Error} Invalid options + */ +function jp2 (options) { + /* node:coverage ignore next 41 */ + if (!this.constructor.format.jp2k.output.buffer) { + throw errJp2Save(); + } + if (is.object(options)) { + if (is.defined(options.quality)) { + if (is.integer(options.quality) && is.inRange(options.quality, 1, 100)) { + this.options.jp2Quality = options.quality; + } else { + throw is.invalidParameterError('quality', 'integer between 1 and 100', options.quality); + } + } + if (is.defined(options.lossless)) { + if (is.bool(options.lossless)) { + this.options.jp2Lossless = options.lossless; + } else { + throw is.invalidParameterError('lossless', 'boolean', options.lossless); + } + } + if (is.defined(options.tileWidth)) { + if (is.integer(options.tileWidth) && is.inRange(options.tileWidth, 1, 32768)) { + this.options.jp2TileWidth = options.tileWidth; + } else { + throw is.invalidParameterError('tileWidth', 'integer between 1 and 32768', options.tileWidth); + } + } + if (is.defined(options.tileHeight)) { + if (is.integer(options.tileHeight) && is.inRange(options.tileHeight, 1, 32768)) { + this.options.jp2TileHeight = options.tileHeight; + } else { + throw is.invalidParameterError('tileHeight', 'integer between 1 and 32768', options.tileHeight); + } + } + if (is.defined(options.chromaSubsampling)) { + if (is.string(options.chromaSubsampling) && is.inArray(options.chromaSubsampling, ['4:2:0', '4:4:4'])) { + this.options.jp2ChromaSubsampling = options.chromaSubsampling; + } else { + throw is.invalidParameterError('chromaSubsampling', 'one of: 4:2:0, 4:4:4', options.chromaSubsampling); + } + } + } + return this._updateFormatOut('jp2', options); +} + +/** + * Set animation options if available. + * @private + * + * @param {Object} [source] - output options + * @param {number} [source.loop=0] - number of animation iterations, use 0 for infinite animation + * @param {number[]} [source.delay] - list of delays between animation frames (in milliseconds) + * @param {Object} [target] - target object for valid options + * @throws {Error} Invalid options + */ +function trySetAnimationOptions (source, target) { + if (is.object(source) && is.defined(source.loop)) { + if (is.integer(source.loop) && is.inRange(source.loop, 0, 65535)) { + target.loop = source.loop; + } else { + throw is.invalidParameterError('loop', 'integer between 0 and 65535', source.loop); + } + } + if (is.object(source) && is.defined(source.delay)) { + // We allow singular values as well + if (is.integer(source.delay) && is.inRange(source.delay, 0, 65535)) { + target.delay = [source.delay]; + } else if ( + Array.isArray(source.delay) && + source.delay.every(is.integer) && + source.delay.every(v => is.inRange(v, 0, 65535))) { + target.delay = source.delay; + } else { + throw is.invalidParameterError('delay', 'integer or an array of integers between 0 and 65535', source.delay); + } + } +} + +/** + * Use these TIFF options for output image. + * + * The `density` can be set in pixels/inch via {@link #withmetadata withMetadata} + * instead of providing `xres` and `yres` in pixels/mm. + * + * @example + * // Convert SVG input to LZW-compressed, 1 bit per pixel TIFF output + * sharp('input.svg') + * .tiff({ + * compression: 'lzw', + * bitdepth: 1 + * }) + * .toFile('1-bpp-output.tiff') + * .then(info => { ... }); + * + * @param {Object} [options] - output options + * @param {number} [options.quality=80] - quality, integer 1-100 + * @param {boolean} [options.force=true] - force TIFF output, otherwise attempt to use input format + * @param {string} [options.compression='jpeg'] - compression options: none, jpeg, deflate, packbits, ccittfax4, lzw, webp, zstd, jp2k + * @param {boolean} [options.bigtiff=false] - use BigTIFF variant (has no effect when compression is none) + * @param {string} [options.predictor='horizontal'] - compression predictor options: none, horizontal, float + * @param {boolean} [options.pyramid=false] - write an image pyramid + * @param {boolean} [options.tile=false] - write a tiled tiff + * @param {number} [options.tileWidth=256] - horizontal tile size + * @param {number} [options.tileHeight=256] - vertical tile size + * @param {number} [options.xres=1.0] - horizontal resolution in pixels/mm + * @param {number} [options.yres=1.0] - vertical resolution in pixels/mm + * @param {string} [options.resolutionUnit='inch'] - resolution unit options: inch, cm + * @param {number} [options.bitdepth=8] - reduce bitdepth to 1, 2 or 4 bit + * @param {boolean} [options.miniswhite=false] - write 1-bit images as miniswhite + * @returns {Sharp} + * @throws {Error} Invalid options + */ +function tiff (options) { + if (is.object(options)) { + if (is.defined(options.quality)) { + if (is.integer(options.quality) && is.inRange(options.quality, 1, 100)) { + this.options.tiffQuality = options.quality; + } else { + throw is.invalidParameterError('quality', 'integer between 1 and 100', options.quality); + } + } + if (is.defined(options.bitdepth)) { + if (is.integer(options.bitdepth) && is.inArray(options.bitdepth, [1, 2, 4, 8])) { + this.options.tiffBitdepth = options.bitdepth; + } else { + throw is.invalidParameterError('bitdepth', '1, 2, 4 or 8', options.bitdepth); + } + } + // tiling + if (is.defined(options.tile)) { + this._setBooleanOption('tiffTile', options.tile); + } + if (is.defined(options.tileWidth)) { + if (is.integer(options.tileWidth) && options.tileWidth > 0) { + this.options.tiffTileWidth = options.tileWidth; + } else { + throw is.invalidParameterError('tileWidth', 'integer greater than zero', options.tileWidth); + } + } + if (is.defined(options.tileHeight)) { + if (is.integer(options.tileHeight) && options.tileHeight > 0) { + this.options.tiffTileHeight = options.tileHeight; + } else { + throw is.invalidParameterError('tileHeight', 'integer greater than zero', options.tileHeight); + } + } + // miniswhite + if (is.defined(options.miniswhite)) { + this._setBooleanOption('tiffMiniswhite', options.miniswhite); + } + // pyramid + if (is.defined(options.pyramid)) { + this._setBooleanOption('tiffPyramid', options.pyramid); + } + // resolution + if (is.defined(options.xres)) { + if (is.number(options.xres) && options.xres > 0) { + this.options.tiffXres = options.xres; + } else { + throw is.invalidParameterError('xres', 'number greater than zero', options.xres); + } + } + if (is.defined(options.yres)) { + if (is.number(options.yres) && options.yres > 0) { + this.options.tiffYres = options.yres; + } else { + throw is.invalidParameterError('yres', 'number greater than zero', options.yres); + } + } + // compression + if (is.defined(options.compression)) { + if (is.string(options.compression) && is.inArray(options.compression, ['none', 'jpeg', 'deflate', 'packbits', 'ccittfax4', 'lzw', 'webp', 'zstd', 'jp2k'])) { + this.options.tiffCompression = options.compression; + } else { + throw is.invalidParameterError('compression', 'one of: none, jpeg, deflate, packbits, ccittfax4, lzw, webp, zstd, jp2k', options.compression); + } + } + // bigtiff + if (is.defined(options.bigtiff)) { + this._setBooleanOption('tiffBigtiff', options.bigtiff); + } + // predictor + if (is.defined(options.predictor)) { + if (is.string(options.predictor) && is.inArray(options.predictor, ['none', 'horizontal', 'float'])) { + this.options.tiffPredictor = options.predictor; + } else { + throw is.invalidParameterError('predictor', 'one of: none, horizontal, float', options.predictor); + } + } + // resolutionUnit + if (is.defined(options.resolutionUnit)) { + if (is.string(options.resolutionUnit) && is.inArray(options.resolutionUnit, ['inch', 'cm'])) { + this.options.tiffResolutionUnit = options.resolutionUnit; + } else { + throw is.invalidParameterError('resolutionUnit', 'one of: inch, cm', options.resolutionUnit); + } + } + } + return this._updateFormatOut('tiff', options); +} + +/** + * Use these AVIF options for output image. + * + * AVIF image sequences are not supported. + * Prebuilt binaries support a bitdepth of 8 only. + * + * This feature is experimental on the Windows ARM64 platform + * and requires a CPU with ARM64v8.4 or later. + * + * @example + * const data = await sharp(input) + * .avif({ effort: 2 }) + * .toBuffer(); + * + * @example + * const data = await sharp(input) + * .avif({ lossless: true }) + * .toBuffer(); + * + * @since 0.27.0 + * + * @param {Object} [options] - output options + * @param {number} [options.quality=50] - quality, integer 1-100 + * @param {boolean} [options.lossless=false] - use lossless compression + * @param {number} [options.effort=4] - CPU effort, between 0 (fastest) and 9 (slowest) + * @param {string} [options.chromaSubsampling='4:4:4'] - set to '4:2:0' to use chroma subsampling + * @param {number} [options.bitdepth=8] - set bitdepth to 8, 10 or 12 bit + * @returns {Sharp} + * @throws {Error} Invalid options + */ +function avif (options) { + return this.heif({ ...options, compression: 'av1' }); +} + +/** + * Use these HEIF options for output image. + * + * Support for patent-encumbered HEIC images using `hevc` compression requires the use of a + * globally-installed libvips compiled with support for libheif, libde265 and x265. + * + * @example + * const data = await sharp(input) + * .heif({ compression: 'hevc' }) + * .toBuffer(); + * + * @since 0.23.0 + * + * @param {Object} options - output options + * @param {string} options.compression - compression format: av1, hevc + * @param {number} [options.quality=50] - quality, integer 1-100 + * @param {boolean} [options.lossless=false] - use lossless compression + * @param {number} [options.effort=4] - CPU effort, between 0 (fastest) and 9 (slowest) + * @param {string} [options.chromaSubsampling='4:4:4'] - set to '4:2:0' to use chroma subsampling + * @param {number} [options.bitdepth=8] - set bitdepth to 8, 10 or 12 bit + * @returns {Sharp} + * @throws {Error} Invalid options + */ +function heif (options) { + if (is.object(options)) { + if (is.string(options.compression) && is.inArray(options.compression, ['av1', 'hevc'])) { + this.options.heifCompression = options.compression; + } else { + throw is.invalidParameterError('compression', 'one of: av1, hevc', options.compression); + } + if (is.defined(options.quality)) { + if (is.integer(options.quality) && is.inRange(options.quality, 1, 100)) { + this.options.heifQuality = options.quality; + } else { + throw is.invalidParameterError('quality', 'integer between 1 and 100', options.quality); + } + } + if (is.defined(options.lossless)) { + if (is.bool(options.lossless)) { + this.options.heifLossless = options.lossless; + } else { + throw is.invalidParameterError('lossless', 'boolean', options.lossless); + } + } + if (is.defined(options.effort)) { + if (is.integer(options.effort) && is.inRange(options.effort, 0, 9)) { + this.options.heifEffort = options.effort; + } else { + throw is.invalidParameterError('effort', 'integer between 0 and 9', options.effort); + } + } + if (is.defined(options.chromaSubsampling)) { + if (is.string(options.chromaSubsampling) && is.inArray(options.chromaSubsampling, ['4:2:0', '4:4:4'])) { + this.options.heifChromaSubsampling = options.chromaSubsampling; + } else { + throw is.invalidParameterError('chromaSubsampling', 'one of: 4:2:0, 4:4:4', options.chromaSubsampling); + } + } + if (is.defined(options.bitdepth)) { + if (is.integer(options.bitdepth) && is.inArray(options.bitdepth, [8, 10, 12])) { + if (options.bitdepth !== 8 && this.constructor.versions.heif) { + throw is.invalidParameterError('bitdepth when using prebuilt binaries', 8, options.bitdepth); + } + this.options.heifBitdepth = options.bitdepth; + } else { + throw is.invalidParameterError('bitdepth', '8, 10 or 12', options.bitdepth); + } + } + } else { + throw is.invalidParameterError('options', 'Object', options); + } + return this._updateFormatOut('heif', options); +} + +/** + * Use these JPEG-XL (JXL) options for output image. + * + * This feature is experimental, please do not use in production systems. + * + * Requires libvips compiled with support for libjxl. + * The prebuilt binaries do not include this - see + * {@link /install/#custom-libvips installing a custom libvips}. + * + * @since 0.31.3 + * + * @param {Object} [options] - output options + * @param {number} [options.distance=1.0] - maximum encoding error, between 0 (highest quality) and 15 (lowest quality) + * @param {number} [options.quality] - calculate `distance` based on JPEG-like quality, between 1 and 100, overrides distance if specified + * @param {number} [options.decodingTier=0] - target decode speed tier, between 0 (highest quality) and 4 (lowest quality) + * @param {boolean} [options.lossless=false] - use lossless compression + * @param {number} [options.effort=7] - CPU effort, between 1 (fastest) and 9 (slowest) + * @param {number} [options.loop=0] - number of animation iterations, use 0 for infinite animation + * @param {number|number[]} [options.delay] - delay(s) between animation frames (in milliseconds) + * @returns {Sharp} + * @throws {Error} Invalid options + */ +function jxl (options) { + if (is.object(options)) { + if (is.defined(options.quality)) { + if (is.integer(options.quality) && is.inRange(options.quality, 1, 100)) { + // https://github.com/libjxl/libjxl/blob/0aeea7f180bafd6893c1db8072dcb67d2aa5b03d/tools/cjxl_main.cc#L640-L644 + this.options.jxlDistance = options.quality >= 30 + ? 0.1 + (100 - options.quality) * 0.09 + : 53 / 3000 * options.quality * options.quality - 23 / 20 * options.quality + 25; + } else { + throw is.invalidParameterError('quality', 'integer between 1 and 100', options.quality); + } + } else if (is.defined(options.distance)) { + if (is.number(options.distance) && is.inRange(options.distance, 0, 15)) { + this.options.jxlDistance = options.distance; + } else { + throw is.invalidParameterError('distance', 'number between 0.0 and 15.0', options.distance); + } + } + if (is.defined(options.decodingTier)) { + if (is.integer(options.decodingTier) && is.inRange(options.decodingTier, 0, 4)) { + this.options.jxlDecodingTier = options.decodingTier; + } else { + throw is.invalidParameterError('decodingTier', 'integer between 0 and 4', options.decodingTier); + } + } + if (is.defined(options.lossless)) { + if (is.bool(options.lossless)) { + this.options.jxlLossless = options.lossless; + } else { + throw is.invalidParameterError('lossless', 'boolean', options.lossless); + } + } + if (is.defined(options.effort)) { + if (is.integer(options.effort) && is.inRange(options.effort, 1, 9)) { + this.options.jxlEffort = options.effort; + } else { + throw is.invalidParameterError('effort', 'integer between 1 and 9', options.effort); + } + } + } + trySetAnimationOptions(options, this.options); + return this._updateFormatOut('jxl', options); +} + +/** + * Force output to be raw, uncompressed pixel data. + * Pixel ordering is left-to-right, top-to-bottom, without padding. + * Channel ordering will be RGB or RGBA for non-greyscale colourspaces. + * + * @example + * // Extract raw, unsigned 8-bit RGB pixel data from JPEG input + * const { data, info } = await sharp('input.jpg') + * .raw() + * .toBuffer({ resolveWithObject: true }); + * + * @example + * // Extract alpha channel as raw, unsigned 16-bit pixel data from PNG input + * const data = await sharp('input.png') + * .ensureAlpha() + * .extractChannel(3) + * .toColourspace('b-w') + * .raw({ depth: 'ushort' }) + * .toBuffer(); + * + * @param {Object} [options] - output options + * @param {string} [options.depth='uchar'] - bit depth, one of: char, uchar (default), short, ushort, int, uint, float, complex, double, dpcomplex + * @returns {Sharp} + * @throws {Error} Invalid options + */ +function raw (options) { + if (is.object(options)) { + if (is.defined(options.depth)) { + if (is.string(options.depth) && is.inArray(options.depth, + ['char', 'uchar', 'short', 'ushort', 'int', 'uint', 'float', 'complex', 'double', 'dpcomplex'] + )) { + this.options.rawDepth = options.depth; + } else { + throw is.invalidParameterError('depth', 'one of: char, uchar, short, ushort, int, uint, float, complex, double, dpcomplex', options.depth); + } + } + } + return this._updateFormatOut('raw'); +} + +/** + * Use tile-based deep zoom (image pyramid) output. + * + * Set the format and options for tile images via the `toFormat`, `jpeg`, `png` or `webp` functions. + * Use a `.zip` or `.szi` file extension with `toFile` to write to a compressed archive file format. + * + * The container will be set to `zip` when the output is a Buffer or Stream, otherwise it will default to `fs`. + * + * @example + * sharp('input.tiff') + * .png() + * .tile({ + * size: 512 + * }) + * .toFile('output.dz', function(err, info) { + * // output.dzi is the Deep Zoom XML definition + * // output_files contains 512x512 tiles grouped by zoom level + * }); + * + * @example + * const zipFileWithTiles = await sharp(input) + * .tile({ basename: "tiles" }) + * .toBuffer(); + * + * @example + * const iiififier = sharp().tile({ layout: "iiif" }); + * readableStream + * .pipe(iiififier) + * .pipe(writeableStream); + * + * @param {Object} [options] + * @param {number} [options.size=256] tile size in pixels, a value between 1 and 8192. + * @param {number} [options.overlap=0] tile overlap in pixels, a value between 0 and 8192. + * @param {number} [options.angle=0] tile angle of rotation, must be a multiple of 90. + * @param {string|Object} [options.background={r: 255, g: 255, b: 255, alpha: 1}] - background colour, parsed by the [color](https://www.npmjs.org/package/color) module, defaults to white without transparency. + * @param {string} [options.depth] how deep to make the pyramid, possible values are `onepixel`, `onetile` or `one`, default based on layout. + * @param {number} [options.skipBlanks=-1] Threshold to skip tile generation. Range is 0-255 for 8-bit images, 0-65535 for 16-bit images. Default is 5 for `google` layout, -1 (no skip) otherwise. + * @param {string} [options.container='fs'] tile container, with value `fs` (filesystem) or `zip` (compressed file). + * @param {string} [options.layout='dz'] filesystem layout, possible values are `dz`, `iiif`, `iiif3`, `zoomify` or `google`. + * @param {boolean} [options.centre=false] centre image in tile. + * @param {boolean} [options.center=false] alternative spelling of centre. + * @param {string} [options.id='https://example.com/iiif'] when `layout` is `iiif`/`iiif3`, sets the `@id`/`id` attribute of `info.json` + * @param {string} [options.basename] the name of the directory within the zip file when container is `zip`. + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function tile (options) { + if (is.object(options)) { + // Size of square tiles, in pixels + if (is.defined(options.size)) { + if (is.integer(options.size) && is.inRange(options.size, 1, 8192)) { + this.options.tileSize = options.size; + } else { + throw is.invalidParameterError('size', 'integer between 1 and 8192', options.size); + } + } + // Overlap of tiles, in pixels + if (is.defined(options.overlap)) { + if (is.integer(options.overlap) && is.inRange(options.overlap, 0, 8192)) { + if (options.overlap > this.options.tileSize) { + throw is.invalidParameterError('overlap', `<= size (${this.options.tileSize})`, options.overlap); + } + this.options.tileOverlap = options.overlap; + } else { + throw is.invalidParameterError('overlap', 'integer between 0 and 8192', options.overlap); + } + } + // Container + if (is.defined(options.container)) { + if (is.string(options.container) && is.inArray(options.container, ['fs', 'zip'])) { + this.options.tileContainer = options.container; + } else { + throw is.invalidParameterError('container', 'one of: fs, zip', options.container); + } + } + // Layout + if (is.defined(options.layout)) { + if (is.string(options.layout) && is.inArray(options.layout, ['dz', 'google', 'iiif', 'iiif3', 'zoomify'])) { + this.options.tileLayout = options.layout; + } else { + throw is.invalidParameterError('layout', 'one of: dz, google, iiif, iiif3, zoomify', options.layout); + } + } + // Angle of rotation, + if (is.defined(options.angle)) { + if (is.integer(options.angle) && !(options.angle % 90)) { + this.options.tileAngle = options.angle; + } else { + throw is.invalidParameterError('angle', 'positive/negative multiple of 90', options.angle); + } + } + // Background colour + this._setBackgroundColourOption('tileBackground', options.background); + // Depth of tiles + if (is.defined(options.depth)) { + if (is.string(options.depth) && is.inArray(options.depth, ['onepixel', 'onetile', 'one'])) { + this.options.tileDepth = options.depth; + } else { + throw is.invalidParameterError('depth', 'one of: onepixel, onetile, one', options.depth); + } + } + // Threshold to skip blank tiles + if (is.defined(options.skipBlanks)) { + if (is.integer(options.skipBlanks) && is.inRange(options.skipBlanks, -1, 65535)) { + this.options.tileSkipBlanks = options.skipBlanks; + } else { + throw is.invalidParameterError('skipBlanks', 'integer between -1 and 255/65535', options.skipBlanks); + } + } else if (is.defined(options.layout) && options.layout === 'google') { + this.options.tileSkipBlanks = 5; + } + // Center image in tile + const centre = is.bool(options.center) ? options.center : options.centre; + if (is.defined(centre)) { + this._setBooleanOption('tileCentre', centre); + } + // @id attribute for IIIF layout + if (is.defined(options.id)) { + if (is.string(options.id)) { + this.options.tileId = options.id; + } else { + throw is.invalidParameterError('id', 'string', options.id); + } + } + // Basename for zip container + if (is.defined(options.basename)) { + if (is.string(options.basename)) { + this.options.tileBasename = options.basename; + } else { + throw is.invalidParameterError('basename', 'string', options.basename); + } + } + } + // Format + if (is.inArray(this.options.formatOut, ['jpeg', 'png', 'webp'])) { + this.options.tileFormat = this.options.formatOut; + } else if (this.options.formatOut !== 'input') { + throw is.invalidParameterError('format', 'one of: jpeg, png, webp', this.options.formatOut); + } + return this._updateFormatOut('dz'); +} + +/** + * Set a timeout for processing, in seconds. + * Use a value of zero to continue processing indefinitely, the default behaviour. + * + * The clock starts when libvips opens an input image for processing. + * Time spent waiting for a libuv thread to become available is not included. + * + * @example + * // Ensure processing takes no longer than 3 seconds + * try { + * const data = await sharp(input) + * .blur(1000) + * .timeout({ seconds: 3 }) + * .toBuffer(); + * } catch (err) { + * if (err.message.includes('timeout')) { ... } + * } + * + * @since 0.29.2 + * + * @param {Object} options + * @param {number} options.seconds - Number of seconds after which processing will be stopped + * @returns {Sharp} + */ +function timeout (options) { + if (!is.plainObject(options)) { + throw is.invalidParameterError('options', 'object', options); + } + if (is.integer(options.seconds) && is.inRange(options.seconds, 0, 3600)) { + this.options.timeoutSeconds = options.seconds; + } else { + throw is.invalidParameterError('seconds', 'integer between 0 and 3600', options.seconds); + } + return this; +} + +/** + * Update the output format unless options.force is false, + * in which case revert to input format. + * @private + * @param {string} formatOut + * @param {Object} [options] + * @param {boolean} [options.force=true] - force output format, otherwise attempt to use input format + * @returns {Sharp} + */ +function _updateFormatOut (formatOut, options) { + if (!(is.object(options) && options.force === false)) { + this.options.formatOut = formatOut; + } + return this; +} + +/** + * Update a boolean attribute of the this.options Object. + * @private + * @param {string} key + * @param {boolean} val + * @throws {Error} Invalid key + */ +function _setBooleanOption (key, val) { + if (is.bool(val)) { + this.options[key] = val; + } else { + throw is.invalidParameterError(key, 'boolean', val); + } +} + +/** + * Called by a WriteableStream to notify us it is ready for data. + * @private + */ +function _read () { + if (!this.options.streamOut) { + this.options.streamOut = true; + const stack = Error(); + this._pipeline(undefined, stack); + } +} + +/** + * Invoke the C++ image processing pipeline + * Supports callback, stream and promise variants + * @private + */ +function _pipeline (callback, stack) { + if (typeof callback === 'function') { + // output=file/buffer + if (this._isStreamInput()) { + // output=file/buffer, input=stream + this.on('finish', () => { + this._flattenBufferIn(); + sharp.pipeline(this.options, (err, data, info) => { + if (err) { + callback(is.nativeError(err, stack)); + } else { + callback(null, data, info); + } + }); + }); + } else { + // output=file/buffer, input=file/buffer + sharp.pipeline(this.options, (err, data, info) => { + if (err) { + callback(is.nativeError(err, stack)); + } else { + callback(null, data, info); + } + }); + } + return this; + } else if (this.options.streamOut) { + // output=stream + if (this._isStreamInput()) { + // output=stream, input=stream + this.once('finish', () => { + this._flattenBufferIn(); + sharp.pipeline(this.options, (err, data, info) => { + if (err) { + this.emit('error', is.nativeError(err, stack)); + } else { + this.emit('info', info); + this.push(data); + } + this.push(null); + this.on('end', () => this.emit('close')); + }); + }); + if (this.streamInFinished) { + this.emit('finish'); + } + } else { + // output=stream, input=file/buffer + sharp.pipeline(this.options, (err, data, info) => { + if (err) { + this.emit('error', is.nativeError(err, stack)); + } else { + this.emit('info', info); + this.push(data); + } + this.push(null); + this.on('end', () => this.emit('close')); + }); + } + return this; + } else { + // output=promise + if (this._isStreamInput()) { + // output=promise, input=stream + return new Promise((resolve, reject) => { + this.once('finish', () => { + this._flattenBufferIn(); + sharp.pipeline(this.options, (err, data, info) => { + if (err) { + reject(is.nativeError(err, stack)); + } else { + if (this.options.resolveWithObject) { + resolve({ data, info }); + } else { + resolve(data); + } + } + }); + }); + }); + } else { + // output=promise, input=file/buffer + return new Promise((resolve, reject) => { + sharp.pipeline(this.options, (err, data, info) => { + if (err) { + reject(is.nativeError(err, stack)); + } else { + if (this.options.resolveWithObject) { + resolve({ data, info }); + } else { + resolve(data); + } + } + }); + }); + } + } +} + +/** + * Decorate the Sharp prototype with output-related functions. + * @module Sharp + * @private + */ +module.exports = (Sharp) => { + Object.assign(Sharp.prototype, { + // Public + toFile, + toBuffer, + keepExif, + withExif, + withExifMerge, + keepIccProfile, + withIccProfile, + keepXmp, + withXmp, + keepMetadata, + withMetadata, + toFormat, + jpeg, + jp2, + png, + webp, + tiff, + avif, + heif, + jxl, + gif, + raw, + tile, + timeout, + // Private + _updateFormatOut, + _setBooleanOption, + _read, + _pipeline + }); +}; diff --git a/build/node_modules/sharp/lib/resize.js b/build/node_modules/sharp/lib/resize.js new file mode 100644 index 0000000..544fbba --- /dev/null +++ b/build/node_modules/sharp/lib/resize.js @@ -0,0 +1,595 @@ +/*! + Copyright 2013 Lovell Fuller and others. + SPDX-License-Identifier: Apache-2.0 +*/ + +const is = require('./is'); + +/** + * Weighting to apply when using contain/cover fit. + * @member + * @private + */ +const gravity = { + center: 0, + centre: 0, + north: 1, + east: 2, + south: 3, + west: 4, + northeast: 5, + southeast: 6, + southwest: 7, + northwest: 8 +}; + +/** + * Position to apply when using contain/cover fit. + * @member + * @private + */ +const position = { + top: 1, + right: 2, + bottom: 3, + left: 4, + 'right top': 5, + 'right bottom': 6, + 'left bottom': 7, + 'left top': 8 +}; + +/** + * How to extend the image. + * @member + * @private + */ +const extendWith = { + background: 'background', + copy: 'copy', + repeat: 'repeat', + mirror: 'mirror' +}; + +/** + * Strategies for automagic cover behaviour. + * @member + * @private + */ +const strategy = { + entropy: 16, + attention: 17 +}; + +/** + * Reduction kernels. + * @member + * @private + */ +const kernel = { + nearest: 'nearest', + linear: 'linear', + cubic: 'cubic', + mitchell: 'mitchell', + lanczos2: 'lanczos2', + lanczos3: 'lanczos3', + mks2013: 'mks2013', + mks2021: 'mks2021' +}; + +/** + * Methods by which an image can be resized to fit the provided dimensions. + * @member + * @private + */ +const fit = { + contain: 'contain', + cover: 'cover', + fill: 'fill', + inside: 'inside', + outside: 'outside' +}; + +/** + * Map external fit property to internal canvas property. + * @member + * @private + */ +const mapFitToCanvas = { + contain: 'embed', + cover: 'crop', + fill: 'ignore_aspect', + inside: 'max', + outside: 'min' +}; + +/** + * @private + */ +function isRotationExpected (options) { + return (options.angle % 360) !== 0 || options.rotationAngle !== 0; +} + +/** + * @private + */ +function isResizeExpected (options) { + return options.width !== -1 || options.height !== -1; +} + +/** + * Resize image to `width`, `height` or `width x height`. + * + * When both a `width` and `height` are provided, the possible methods by which the image should **fit** these are: + * - `cover`: (default) Preserving aspect ratio, attempt to ensure the image covers both provided dimensions by cropping/clipping to fit. + * - `contain`: Preserving aspect ratio, contain within both provided dimensions using "letterboxing" where necessary. + * - `fill`: Ignore the aspect ratio of the input and stretch to both provided dimensions. + * - `inside`: Preserving aspect ratio, resize the image to be as large as possible while ensuring its dimensions are less than or equal to both those specified. + * - `outside`: Preserving aspect ratio, resize the image to be as small as possible while ensuring its dimensions are greater than or equal to both those specified. + * + * Some of these values are based on the [object-fit](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit) CSS property. + * + * <img alt="Examples of various values for the fit property when resizing" width="100%" style="aspect-ratio: 998/243" src="/api-resize-fit.svg"> + * + * When using a **fit** of `cover` or `contain`, the default **position** is `centre`. Other options are: + * - `sharp.position`: `top`, `right top`, `right`, `right bottom`, `bottom`, `left bottom`, `left`, `left top`. + * - `sharp.gravity`: `north`, `northeast`, `east`, `southeast`, `south`, `southwest`, `west`, `northwest`, `center` or `centre`. + * - `sharp.strategy`: `cover` only, dynamically crop using either the `entropy` or `attention` strategy. + * + * Some of these values are based on the [object-position](https://developer.mozilla.org/en-US/docs/Web/CSS/object-position) CSS property. + * + * The strategy-based approach initially resizes so one dimension is at its target length + * then repeatedly ranks edge regions, discarding the edge with the lowest score based on the selected strategy. + * - `entropy`: focus on the region with the highest [Shannon entropy](https://en.wikipedia.org/wiki/Entropy_%28information_theory%29). + * - `attention`: focus on the region with the highest luminance frequency, colour saturation and presence of skin tones. + * + * Possible downsizing kernels are: + * - `nearest`: Use [nearest neighbour interpolation](http://en.wikipedia.org/wiki/Nearest-neighbor_interpolation). + * - `linear`: Use a [triangle filter](https://en.wikipedia.org/wiki/Triangular_function). + * - `cubic`: Use a [Catmull-Rom spline](https://en.wikipedia.org/wiki/Centripetal_Catmull%E2%80%93Rom_spline). + * - `mitchell`: Use a [Mitchell-Netravali spline](https://www.cs.utexas.edu/~fussell/courses/cs384g-fall2013/lectures/mitchell/Mitchell.pdf). + * - `lanczos2`: Use a [Lanczos kernel](https://en.wikipedia.org/wiki/Lanczos_resampling#Lanczos_kernel) with `a=2`. + * - `lanczos3`: Use a Lanczos kernel with `a=3` (the default). + * - `mks2013`: Use a [Magic Kernel Sharp](https://johncostella.com/magic/mks.pdf) 2013 kernel, as adopted by Facebook. + * - `mks2021`: Use a Magic Kernel Sharp 2021 kernel, with more accurate (reduced) sharpening than the 2013 version. + * + * When upsampling, these kernels map to `nearest`, `linear` and `cubic` interpolators. + * Downsampling kernels without a matching upsampling interpolator map to `cubic`. + * + * Only one resize can occur per pipeline. + * Previous calls to `resize` in the same pipeline will be ignored. + * + * @example + * sharp(input) + * .resize({ width: 100 }) + * .toBuffer() + * .then(data => { + * // 100 pixels wide, auto-scaled height + * }); + * + * @example + * sharp(input) + * .resize({ height: 100 }) + * .toBuffer() + * .then(data => { + * // 100 pixels high, auto-scaled width + * }); + * + * @example + * sharp(input) + * .resize(200, 300, { + * kernel: sharp.kernel.nearest, + * fit: 'contain', + * position: 'right top', + * background: { r: 255, g: 255, b: 255, alpha: 0.5 } + * }) + * .toFile('output.png') + * .then(() => { + * // output.png is a 200 pixels wide and 300 pixels high image + * // containing a nearest-neighbour scaled version + * // contained within the north-east corner of a semi-transparent white canvas + * }); + * + * @example + * const transformer = sharp() + * .resize({ + * width: 200, + * height: 200, + * fit: sharp.fit.cover, + * position: sharp.strategy.entropy + * }); + * // Read image data from readableStream + * // Write 200px square auto-cropped image data to writableStream + * readableStream + * .pipe(transformer) + * .pipe(writableStream); + * + * @example + * sharp(input) + * .resize(200, 200, { + * fit: sharp.fit.inside, + * withoutEnlargement: true + * }) + * .toFormat('jpeg') + * .toBuffer() + * .then(function(outputBuffer) { + * // outputBuffer contains JPEG image data + * // no wider and no higher than 200 pixels + * // and no larger than the input image + * }); + * + * @example + * sharp(input) + * .resize(200, 200, { + * fit: sharp.fit.outside, + * withoutReduction: true + * }) + * .toFormat('jpeg') + * .toBuffer() + * .then(function(outputBuffer) { + * // outputBuffer contains JPEG image data + * // of at least 200 pixels wide and 200 pixels high while maintaining aspect ratio + * // and no smaller than the input image + * }); + * + * @example + * const scaleByHalf = await sharp(input) + * .metadata() + * .then(({ width }) => sharp(input) + * .resize(Math.round(width * 0.5)) + * .toBuffer() + * ); + * + * @param {number} [width] - How many pixels wide the resultant image should be. Use `null` or `undefined` to auto-scale the width to match the height. + * @param {number} [height] - How many pixels high the resultant image should be. Use `null` or `undefined` to auto-scale the height to match the width. + * @param {Object} [options] + * @param {number} [options.width] - An alternative means of specifying `width`. If both are present this takes priority. + * @param {number} [options.height] - An alternative means of specifying `height`. If both are present this takes priority. + * @param {String} [options.fit='cover'] - How the image should be resized/cropped to fit the target dimension(s), one of `cover`, `contain`, `fill`, `inside` or `outside`. + * @param {String} [options.position='centre'] - A position, gravity or strategy to use when `fit` is `cover` or `contain`. + * @param {String|Object} [options.background={r: 0, g: 0, b: 0, alpha: 1}] - background colour when `fit` is `contain`, parsed by the [color](https://www.npmjs.org/package/color) module, defaults to black without transparency. + * @param {String} [options.kernel='lanczos3'] - The kernel to use for image reduction and the inferred interpolator to use for upsampling. Use the `fastShrinkOnLoad` option to control kernel vs shrink-on-load. + * @param {Boolean} [options.withoutEnlargement=false] - Do not scale up if the width *or* height are already less than the target dimensions, equivalent to GraphicsMagick's `>` geometry option. This may result in output dimensions smaller than the target dimensions. + * @param {Boolean} [options.withoutReduction=false] - Do not scale down if the width *or* height are already greater than the target dimensions, equivalent to GraphicsMagick's `<` geometry option. This may still result in a crop to reach the target dimensions. + * @param {Boolean} [options.fastShrinkOnLoad=true] - Take greater advantage of the JPEG and WebP shrink-on-load feature, which can lead to a slight moiré pattern or round-down of an auto-scaled dimension. + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function resize (widthOrOptions, height, options) { + if (isResizeExpected(this.options)) { + this.options.debuglog('ignoring previous resize options'); + } + if (this.options.widthPost !== -1) { + this.options.debuglog('operation order will be: extract, resize, extract'); + } + if (is.defined(widthOrOptions)) { + if (is.object(widthOrOptions) && !is.defined(options)) { + options = widthOrOptions; + } else if (is.integer(widthOrOptions) && widthOrOptions > 0) { + this.options.width = widthOrOptions; + } else { + throw is.invalidParameterError('width', 'positive integer', widthOrOptions); + } + } else { + this.options.width = -1; + } + if (is.defined(height)) { + if (is.integer(height) && height > 0) { + this.options.height = height; + } else { + throw is.invalidParameterError('height', 'positive integer', height); + } + } else { + this.options.height = -1; + } + if (is.object(options)) { + // Width + if (is.defined(options.width)) { + if (is.integer(options.width) && options.width > 0) { + this.options.width = options.width; + } else { + throw is.invalidParameterError('width', 'positive integer', options.width); + } + } + // Height + if (is.defined(options.height)) { + if (is.integer(options.height) && options.height > 0) { + this.options.height = options.height; + } else { + throw is.invalidParameterError('height', 'positive integer', options.height); + } + } + // Fit + if (is.defined(options.fit)) { + const canvas = mapFitToCanvas[options.fit]; + if (is.string(canvas)) { + this.options.canvas = canvas; + } else { + throw is.invalidParameterError('fit', 'valid fit', options.fit); + } + } + // Position + if (is.defined(options.position)) { + const pos = is.integer(options.position) + ? options.position + : strategy[options.position] || position[options.position] || gravity[options.position]; + if (is.integer(pos) && (is.inRange(pos, 0, 8) || is.inRange(pos, 16, 17))) { + this.options.position = pos; + } else { + throw is.invalidParameterError('position', 'valid position/gravity/strategy', options.position); + } + } + // Background + this._setBackgroundColourOption('resizeBackground', options.background); + // Kernel + if (is.defined(options.kernel)) { + if (is.string(kernel[options.kernel])) { + this.options.kernel = kernel[options.kernel]; + } else { + throw is.invalidParameterError('kernel', 'valid kernel name', options.kernel); + } + } + // Without enlargement + if (is.defined(options.withoutEnlargement)) { + this._setBooleanOption('withoutEnlargement', options.withoutEnlargement); + } + // Without reduction + if (is.defined(options.withoutReduction)) { + this._setBooleanOption('withoutReduction', options.withoutReduction); + } + // Shrink on load + if (is.defined(options.fastShrinkOnLoad)) { + this._setBooleanOption('fastShrinkOnLoad', options.fastShrinkOnLoad); + } + } + if (isRotationExpected(this.options) && isResizeExpected(this.options)) { + this.options.rotateBefore = true; + } + return this; +} + +/** + * Extend / pad / extrude one or more edges of the image with either + * the provided background colour or pixels derived from the image. + * This operation will always occur after resizing and extraction, if any. + * + * @example + * // Resize to 140 pixels wide, then add 10 transparent pixels + * // to the top, left and right edges and 20 to the bottom edge + * sharp(input) + * .resize(140) + * .extend({ + * top: 10, + * bottom: 20, + * left: 10, + * right: 10, + * background: { r: 0, g: 0, b: 0, alpha: 0 } + * }) + * ... + * +* @example + * // Add a row of 10 red pixels to the bottom + * sharp(input) + * .extend({ + * bottom: 10, + * background: 'red' + * }) + * ... + * + * @example + * // Extrude image by 8 pixels to the right, mirroring existing right hand edge + * sharp(input) + * .extend({ + * right: 8, + * background: 'mirror' + * }) + * ... + * + * @param {(number|Object)} extend - single pixel count to add to all edges or an Object with per-edge counts + * @param {number} [extend.top=0] + * @param {number} [extend.left=0] + * @param {number} [extend.bottom=0] + * @param {number} [extend.right=0] + * @param {String} [extend.extendWith='background'] - populate new pixels using this method, one of: background, copy, repeat, mirror. + * @param {String|Object} [extend.background={r: 0, g: 0, b: 0, alpha: 1}] - background colour, parsed by the [color](https://www.npmjs.org/package/color) module, defaults to black without transparency. + * @returns {Sharp} + * @throws {Error} Invalid parameters +*/ +function extend (extend) { + if (is.integer(extend) && extend > 0) { + this.options.extendTop = extend; + this.options.extendBottom = extend; + this.options.extendLeft = extend; + this.options.extendRight = extend; + } else if (is.object(extend)) { + if (is.defined(extend.top)) { + if (is.integer(extend.top) && extend.top >= 0) { + this.options.extendTop = extend.top; + } else { + throw is.invalidParameterError('top', 'positive integer', extend.top); + } + } + if (is.defined(extend.bottom)) { + if (is.integer(extend.bottom) && extend.bottom >= 0) { + this.options.extendBottom = extend.bottom; + } else { + throw is.invalidParameterError('bottom', 'positive integer', extend.bottom); + } + } + if (is.defined(extend.left)) { + if (is.integer(extend.left) && extend.left >= 0) { + this.options.extendLeft = extend.left; + } else { + throw is.invalidParameterError('left', 'positive integer', extend.left); + } + } + if (is.defined(extend.right)) { + if (is.integer(extend.right) && extend.right >= 0) { + this.options.extendRight = extend.right; + } else { + throw is.invalidParameterError('right', 'positive integer', extend.right); + } + } + this._setBackgroundColourOption('extendBackground', extend.background); + if (is.defined(extend.extendWith)) { + if (is.string(extendWith[extend.extendWith])) { + this.options.extendWith = extendWith[extend.extendWith]; + } else { + throw is.invalidParameterError('extendWith', 'one of: background, copy, repeat, mirror', extend.extendWith); + } + } + } else { + throw is.invalidParameterError('extend', 'integer or object', extend); + } + return this; +} + +/** + * Extract/crop a region of the image. + * + * - Use `extract` before `resize` for pre-resize extraction. + * - Use `extract` after `resize` for post-resize extraction. + * - Use `extract` twice and `resize` once for extract-then-resize-then-extract in a fixed operation order. + * + * @example + * sharp(input) + * .extract({ left: left, top: top, width: width, height: height }) + * .toFile(output, function(err) { + * // Extract a region of the input image, saving in the same format. + * }); + * @example + * sharp(input) + * .extract({ left: leftOffsetPre, top: topOffsetPre, width: widthPre, height: heightPre }) + * .resize(width, height) + * .extract({ left: leftOffsetPost, top: topOffsetPost, width: widthPost, height: heightPost }) + * .toFile(output, function(err) { + * // Extract a region, resize, then extract from the resized image + * }); + * + * @param {Object} options - describes the region to extract using integral pixel values + * @param {number} options.left - zero-indexed offset from left edge + * @param {number} options.top - zero-indexed offset from top edge + * @param {number} options.width - width of region to extract + * @param {number} options.height - height of region to extract + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function extract (options) { + const suffix = isResizeExpected(this.options) || this.options.widthPre !== -1 ? 'Post' : 'Pre'; + if (this.options[`width${suffix}`] !== -1) { + this.options.debuglog('ignoring previous extract options'); + } + ['left', 'top', 'width', 'height'].forEach(function (name) { + const value = options[name]; + if (is.integer(value) && value >= 0) { + this.options[name + (name === 'left' || name === 'top' ? 'Offset' : '') + suffix] = value; + } else { + throw is.invalidParameterError(name, 'integer', value); + } + }, this); + // Ensure existing rotation occurs before pre-resize extraction + if (isRotationExpected(this.options) && !isResizeExpected(this.options)) { + if (this.options.widthPre === -1 || this.options.widthPost === -1) { + this.options.rotateBefore = true; + } + } + if (this.options.input.autoOrient) { + this.options.orientBefore = true; + } + return this; +} + +/** + * Trim pixels from all edges that contain values similar to the given background colour, which defaults to that of the top-left pixel. + * + * Images with an alpha channel will use the combined bounding box of alpha and non-alpha channels. + * + * If the result of this operation would trim an image to nothing then no change is made. + * + * The `info` response Object will contain `trimOffsetLeft` and `trimOffsetTop` properties. + * + * @example + * // Trim pixels with a colour similar to that of the top-left pixel. + * await sharp(input) + * .trim() + * .toFile(output); + * + * @example + * // Trim pixels with the exact same colour as that of the top-left pixel. + * await sharp(input) + * .trim({ + * threshold: 0 + * }) + * .toFile(output); + * + * @example + * // Assume input is line art and trim only pixels with a similar colour to red. + * const output = await sharp(input) + * .trim({ + * background: "#FF0000", + * lineArt: true + * }) + * .toBuffer(); + * + * @example + * // Trim all "yellow-ish" pixels, being more lenient with the higher threshold. + * const output = await sharp(input) + * .trim({ + * background: "yellow", + * threshold: 42, + * }) + * .toBuffer(); + * + * @param {Object} [options] + * @param {string|Object} [options.background='top-left pixel'] - Background colour, parsed by the [color](https://www.npmjs.org/package/color) module, defaults to that of the top-left pixel. + * @param {number} [options.threshold=10] - Allowed difference from the above colour, a positive number. + * @param {boolean} [options.lineArt=false] - Does the input more closely resemble line art (e.g. vector) rather than being photographic? + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function trim (options) { + this.options.trimThreshold = 10; + if (is.defined(options)) { + if (is.object(options)) { + if (is.defined(options.background)) { + this._setBackgroundColourOption('trimBackground', options.background); + } + if (is.defined(options.threshold)) { + if (is.number(options.threshold) && options.threshold >= 0) { + this.options.trimThreshold = options.threshold; + } else { + throw is.invalidParameterError('threshold', 'positive number', options.threshold); + } + } + if (is.defined(options.lineArt)) { + this._setBooleanOption('trimLineArt', options.lineArt); + } + } else { + throw is.invalidParameterError('trim', 'object', options); + } + } + if (isRotationExpected(this.options)) { + this.options.rotateBefore = true; + } + return this; +} + +/** + * Decorate the Sharp prototype with resize-related functions. + * @module Sharp + * @private + */ +module.exports = (Sharp) => { + Object.assign(Sharp.prototype, { + resize, + extend, + extract, + trim + }); + // Class attributes + Sharp.gravity = gravity; + Sharp.strategy = strategy; + Sharp.kernel = kernel; + Sharp.fit = fit; + Sharp.position = position; +}; diff --git a/build/node_modules/sharp/lib/sharp.js b/build/node_modules/sharp/lib/sharp.js new file mode 100644 index 0000000..1081c93 --- /dev/null +++ b/build/node_modules/sharp/lib/sharp.js @@ -0,0 +1,121 @@ +/*! + Copyright 2013 Lovell Fuller and others. + SPDX-License-Identifier: Apache-2.0 +*/ + +// Inspects the runtime environment and exports the relevant sharp.node binary + +const { familySync, versionSync } = require('detect-libc'); + +const { runtimePlatformArch, isUnsupportedNodeRuntime, prebuiltPlatforms, minimumLibvipsVersion } = require('./libvips'); +const runtimePlatform = runtimePlatformArch(); + +const paths = [ + `../src/build/Release/sharp-${runtimePlatform}.node`, + '../src/build/Release/sharp-wasm32.node', + `@img/sharp-${runtimePlatform}/sharp.node`, + '@img/sharp-wasm32/sharp.node' +]; + +/* node:coverage disable */ + +let path, sharp; +const errors = []; +for (path of paths) { + try { + sharp = require(path); + break; + } catch (err) { + errors.push(err); + } +} + +if (sharp && path.startsWith('@img/sharp-linux-x64') && !sharp._isUsingX64V2()) { + const err = new Error('Prebuilt binaries for linux-x64 require v2 microarchitecture'); + err.code = 'Unsupported CPU'; + errors.push(err); + sharp = null; +} + +if (sharp) { + module.exports = sharp; +} else { + const [isLinux, isMacOs, isWindows] = ['linux', 'darwin', 'win32'].map(os => runtimePlatform.startsWith(os)); + + const help = [`Could not load the "sharp" module using the ${runtimePlatform} runtime`]; + errors.forEach(err => { + if (err.code !== 'MODULE_NOT_FOUND') { + help.push(`${err.code}: ${err.message}`); + } + }); + const messages = errors.map(err => err.message).join(' '); + help.push('Possible solutions:'); + // Common error messages + if (isUnsupportedNodeRuntime()) { + const { found, expected } = isUnsupportedNodeRuntime(); + help.push( + '- Please upgrade Node.js:', + ` Found ${found}`, + ` Requires ${expected}` + ); + } else if (prebuiltPlatforms.includes(runtimePlatform)) { + const [os, cpu] = runtimePlatform.split('-'); + const libc = os.endsWith('musl') ? ' --libc=musl' : ''; + help.push( + '- Ensure optional dependencies can be installed:', + ' npm install --include=optional sharp', + '- Ensure your package manager supports multi-platform installation:', + ' See https://sharp.pixelplumbing.com/install#cross-platform', + '- Add platform-specific dependencies:', + ` npm install --os=${os.replace('musl', '')}${libc} --cpu=${cpu} sharp` + ); + } else { + help.push( + `- Manually install libvips >= ${minimumLibvipsVersion}`, + '- Add experimental WebAssembly-based dependencies:', + ' npm install --cpu=wasm32 sharp', + ' npm install @img/sharp-wasm32' + ); + } + if (isLinux && /(symbol not found|CXXABI_)/i.test(messages)) { + try { + const { config } = require(`@img/sharp-libvips-${runtimePlatform}/package`); + const libcFound = `${familySync()} ${versionSync()}`; + const libcRequires = `${config.musl ? 'musl' : 'glibc'} ${config.musl || config.glibc}`; + help.push( + '- Update your OS:', + ` Found ${libcFound}`, + ` Requires ${libcRequires}` + ); + } catch (_errEngines) {} + } + if (isLinux && /\/snap\/core[0-9]{2}/.test(messages)) { + help.push( + '- Remove the Node.js Snap, which does not support native modules', + ' snap remove node' + ); + } + if (isMacOs && /Incompatible library version/.test(messages)) { + help.push( + '- Update Homebrew:', + ' brew update && brew upgrade vips' + ); + } + if (errors.some(err => err.code === 'ERR_DLOPEN_DISABLED')) { + help.push('- Run Node.js without using the --no-addons flag'); + } + // Link to installation docs + if (isWindows && /The specified procedure could not be found/.test(messages)) { + help.push( + '- Using the canvas package on Windows?', + ' See https://sharp.pixelplumbing.com/install#canvas-and-windows', + '- Check for outdated versions of sharp in the dependency tree:', + ' npm ls sharp' + ); + } + help.push( + '- Consult the installation documentation:', + ' See https://sharp.pixelplumbing.com/install' + ); + throw new Error(help.join('\n')); +} diff --git a/build/node_modules/sharp/lib/utility.js b/build/node_modules/sharp/lib/utility.js new file mode 100644 index 0000000..c0ad39f --- /dev/null +++ b/build/node_modules/sharp/lib/utility.js @@ -0,0 +1,291 @@ +/*! + Copyright 2013 Lovell Fuller and others. + SPDX-License-Identifier: Apache-2.0 +*/ + +const events = require('node:events'); +const detectLibc = require('detect-libc'); + +const is = require('./is'); +const { runtimePlatformArch } = require('./libvips'); +const sharp = require('./sharp'); + +const runtimePlatform = runtimePlatformArch(); +const libvipsVersion = sharp.libvipsVersion(); + +/** + * An Object containing nested boolean values representing the available input and output formats/methods. + * @member + * @example + * console.log(sharp.format); + * @returns {Object} + */ +const format = sharp.format(); +format.heif.output.alias = ['avif', 'heic']; +format.jpeg.output.alias = ['jpe', 'jpg']; +format.tiff.output.alias = ['tif']; +format.jp2k.output.alias = ['j2c', 'j2k', 'jp2', 'jpx']; + +/** + * An Object containing the available interpolators and their proper values + * @readonly + * @enum {string} + */ +const interpolators = { + /** [Nearest neighbour interpolation](http://en.wikipedia.org/wiki/Nearest-neighbor_interpolation). Suitable for image enlargement only. */ + nearest: 'nearest', + /** [Bilinear interpolation](http://en.wikipedia.org/wiki/Bilinear_interpolation). Faster than bicubic but with less smooth results. */ + bilinear: 'bilinear', + /** [Bicubic interpolation](http://en.wikipedia.org/wiki/Bicubic_interpolation) (the default). */ + bicubic: 'bicubic', + /** [LBB interpolation](https://github.com/libvips/libvips/blob/master/libvips/resample/lbb.cpp#L100). Prevents some "[acutance](http://en.wikipedia.org/wiki/Acutance)" but typically reduces performance by a factor of 2. */ + locallyBoundedBicubic: 'lbb', + /** [Nohalo interpolation](http://eprints.soton.ac.uk/268086/). Prevents acutance but typically reduces performance by a factor of 3. */ + nohalo: 'nohalo', + /** [VSQBS interpolation](https://github.com/libvips/libvips/blob/master/libvips/resample/vsqbs.cpp#L48). Prevents "staircasing" when enlarging. */ + vertexSplitQuadraticBasisSpline: 'vsqbs' +}; + +/** + * An Object containing the version numbers of sharp, libvips + * and (when using prebuilt binaries) its dependencies. + * + * @member + * @example + * console.log(sharp.versions); + */ +let versions = { + vips: libvipsVersion.semver +}; +/* node:coverage ignore next 15 */ +if (!libvipsVersion.isGlobal) { + if (!libvipsVersion.isWasm) { + try { + versions = require(`@img/sharp-${runtimePlatform}/versions`); + } catch (_) { + try { + versions = require(`@img/sharp-libvips-${runtimePlatform}/versions`); + } catch (_) {} + } + } else { + try { + versions = require('@img/sharp-wasm32/versions'); + } catch (_) {} + } +} +versions.sharp = require('../package.json').version; + +/* node:coverage ignore next 5 */ +if (versions.heif && format.heif) { + // Prebuilt binaries provide AV1 + format.heif.input.fileSuffix = ['.avif']; + format.heif.output.alias = ['avif']; +} + +/** + * Gets or, when options are provided, sets the limits of _libvips'_ operation cache. + * Existing entries in the cache will be trimmed after any change in limits. + * This method always returns cache statistics, + * useful for determining how much working memory is required for a particular task. + * + * @example + * const stats = sharp.cache(); + * @example + * sharp.cache( { items: 200 } ); + * sharp.cache( { files: 0 } ); + * sharp.cache(false); + * + * @param {Object|boolean} [options=true] - Object with the following attributes, or boolean where true uses default cache settings and false removes all caching + * @param {number} [options.memory=50] - is the maximum memory in MB to use for this cache + * @param {number} [options.files=20] - is the maximum number of files to hold open + * @param {number} [options.items=100] - is the maximum number of operations to cache + * @returns {Object} + */ +function cache (options) { + if (is.bool(options)) { + if (options) { + // Default cache settings of 50MB, 20 files, 100 items + return sharp.cache(50, 20, 100); + } else { + return sharp.cache(0, 0, 0); + } + } else if (is.object(options)) { + return sharp.cache(options.memory, options.files, options.items); + } else { + return sharp.cache(); + } +} +cache(true); + +/** + * Gets or, when a concurrency is provided, sets + * the maximum number of threads _libvips_ should use to process _each image_. + * These are from a thread pool managed by glib, + * which helps avoid the overhead of creating new threads. + * + * This method always returns the current concurrency. + * + * The default value is the number of CPU cores, + * except when using glibc-based Linux without jemalloc, + * where the default is `1` to help reduce memory fragmentation. + * + * A value of `0` will reset this to the number of CPU cores. + * + * Some image format libraries spawn additional threads, + * e.g. libaom manages its own 4 threads when encoding AVIF images, + * and these are independent of the value set here. + * + * :::note + * Further {@link /performance/ control over performance} is available. + * ::: + * + * @example + * const threads = sharp.concurrency(); // 4 + * sharp.concurrency(2); // 2 + * sharp.concurrency(0); // 4 + * + * @param {number} [concurrency] + * @returns {number} concurrency + */ +function concurrency (concurrency) { + return sharp.concurrency(is.integer(concurrency) ? concurrency : null); +} +/* node:coverage ignore next 7 */ +if (detectLibc.familySync() === detectLibc.GLIBC && !sharp._isUsingJemalloc()) { + // Reduce default concurrency to 1 when using glibc memory allocator + sharp.concurrency(1); +} else if (detectLibc.familySync() === detectLibc.MUSL && sharp.concurrency() === 1024) { + // Reduce default concurrency when musl thread over-subscription detected + sharp.concurrency(require('node:os').availableParallelism()); +} + +/** + * An EventEmitter that emits a `change` event when a task is either: + * - queued, waiting for _libuv_ to provide a worker thread + * - complete + * @member + * @example + * sharp.queue.on('change', function(queueLength) { + * console.log('Queue contains ' + queueLength + ' task(s)'); + * }); + */ +const queue = new events.EventEmitter(); + +/** + * Provides access to internal task counters. + * - queue is the number of tasks this module has queued waiting for _libuv_ to provide a worker thread from its pool. + * - process is the number of resize tasks currently being processed. + * + * @example + * const counters = sharp.counters(); // { queue: 2, process: 4 } + * + * @returns {Object} + */ +function counters () { + return sharp.counters(); +} + +/** + * Get and set use of SIMD vector unit instructions. + * Requires libvips to have been compiled with highway support. + * + * Improves the performance of `resize`, `blur` and `sharpen` operations + * by taking advantage of the SIMD vector unit of the CPU, e.g. Intel SSE and ARM NEON. + * + * @example + * const simd = sharp.simd(); + * // simd is `true` if the runtime use of highway is currently enabled + * @example + * const simd = sharp.simd(false); + * // prevent libvips from using highway at runtime + * + * @param {boolean} [simd=true] + * @returns {boolean} + */ +function simd (simd) { + return sharp.simd(is.bool(simd) ? simd : null); +} + +/** + * Block libvips operations at runtime. + * + * This is in addition to the `VIPS_BLOCK_UNTRUSTED` environment variable, + * which when set will block all "untrusted" operations. + * + * @since 0.32.4 + * + * @example <caption>Block all TIFF input.</caption> + * sharp.block({ + * operation: ['VipsForeignLoadTiff'] + * }); + * + * @param {Object} options + * @param {Array<string>} options.operation - List of libvips low-level operation names to block. + */ +function block (options) { + if (is.object(options)) { + if (Array.isArray(options.operation) && options.operation.every(is.string)) { + sharp.block(options.operation, true); + } else { + throw is.invalidParameterError('operation', 'Array<string>', options.operation); + } + } else { + throw is.invalidParameterError('options', 'object', options); + } +} + +/** + * Unblock libvips operations at runtime. + * + * This is useful for defining a list of allowed operations. + * + * @since 0.32.4 + * + * @example <caption>Block all input except WebP from the filesystem.</caption> + * sharp.block({ + * operation: ['VipsForeignLoad'] + * }); + * sharp.unblock({ + * operation: ['VipsForeignLoadWebpFile'] + * }); + * + * @example <caption>Block all input except JPEG and PNG from a Buffer or Stream.</caption> + * sharp.block({ + * operation: ['VipsForeignLoad'] + * }); + * sharp.unblock({ + * operation: ['VipsForeignLoadJpegBuffer', 'VipsForeignLoadPngBuffer'] + * }); + * + * @param {Object} options + * @param {Array<string>} options.operation - List of libvips low-level operation names to unblock. + */ +function unblock (options) { + if (is.object(options)) { + if (Array.isArray(options.operation) && options.operation.every(is.string)) { + sharp.block(options.operation, false); + } else { + throw is.invalidParameterError('operation', 'Array<string>', options.operation); + } + } else { + throw is.invalidParameterError('options', 'object', options); + } +} + +/** + * Decorate the Sharp class with utility-related functions. + * @module Sharp + * @private + */ +module.exports = (Sharp) => { + Sharp.cache = cache; + Sharp.concurrency = concurrency; + Sharp.counters = counters; + Sharp.simd = simd; + Sharp.format = format; + Sharp.interpolators = interpolators; + Sharp.versions = versions; + Sharp.queue = queue; + Sharp.block = block; + Sharp.unblock = unblock; +}; diff --git a/build/node_modules/sharp/node_modules/semver/classes/comparator.js b/build/node_modules/sharp/node_modules/semver/classes/comparator.js new file mode 100644 index 0000000..647c1f0 --- /dev/null +++ b/build/node_modules/sharp/node_modules/semver/classes/comparator.js @@ -0,0 +1,143 @@ +'use strict' + +const ANY = Symbol('SemVer ANY') +// hoisted class for cyclic dependency +class Comparator { + static get ANY () { + return ANY + } + + constructor (comp, options) { + options = parseOptions(options) + + if (comp instanceof Comparator) { + if (comp.loose === !!options.loose) { + return comp + } else { + comp = comp.value + } + } + + comp = comp.trim().split(/\s+/).join(' ') + debug('comparator', comp, options) + this.options = options + this.loose = !!options.loose + this.parse(comp) + + if (this.semver === ANY) { + this.value = '' + } else { + this.value = this.operator + this.semver.version + } + + debug('comp', this) + } + + parse (comp) { + const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] + const m = comp.match(r) + + if (!m) { + throw new TypeError(`Invalid comparator: ${comp}`) + } + + this.operator = m[1] !== undefined ? m[1] : '' + if (this.operator === '=') { + this.operator = '' + } + + // if it literally is just '>' or '' then allow anything. + if (!m[2]) { + this.semver = ANY + } else { + this.semver = new SemVer(m[2], this.options.loose) + } + } + + toString () { + return this.value + } + + test (version) { + debug('Comparator.test', version, this.options.loose) + + if (this.semver === ANY || version === ANY) { + return true + } + + if (typeof version === 'string') { + try { + version = new SemVer(version, this.options) + } catch (er) { + return false + } + } + + return cmp(version, this.operator, this.semver, this.options) + } + + intersects (comp, options) { + if (!(comp instanceof Comparator)) { + throw new TypeError('a Comparator is required') + } + + if (this.operator === '') { + if (this.value === '') { + return true + } + return new Range(comp.value, options).test(this.value) + } else if (comp.operator === '') { + if (comp.value === '') { + return true + } + return new Range(this.value, options).test(comp.semver) + } + + options = parseOptions(options) + + // Special cases where nothing can possibly be lower + if (options.includePrerelease && + (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) { + return false + } + if (!options.includePrerelease && + (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) { + return false + } + + // Same direction increasing (> or >=) + if (this.operator.startsWith('>') && comp.operator.startsWith('>')) { + return true + } + // Same direction decreasing (< or <=) + if (this.operator.startsWith('<') && comp.operator.startsWith('<')) { + return true + } + // same SemVer and both sides are inclusive (<= or >=) + if ( + (this.semver.version === comp.semver.version) && + this.operator.includes('=') && comp.operator.includes('=')) { + return true + } + // opposite directions less than + if (cmp(this.semver, '<', comp.semver, options) && + this.operator.startsWith('>') && comp.operator.startsWith('<')) { + return true + } + // opposite directions greater than + if (cmp(this.semver, '>', comp.semver, options) && + this.operator.startsWith('<') && comp.operator.startsWith('>')) { + return true + } + return false + } +} + +module.exports = Comparator + +const parseOptions = require('../internal/parse-options') +const { safeRe: re, t } = require('../internal/re') +const cmp = require('../functions/cmp') +const debug = require('../internal/debug') +const SemVer = require('./semver') +const Range = require('./range') diff --git a/build/node_modules/sharp/node_modules/semver/classes/range.js b/build/node_modules/sharp/node_modules/semver/classes/range.js new file mode 100644 index 0000000..c2e605e --- /dev/null +++ b/build/node_modules/sharp/node_modules/semver/classes/range.js @@ -0,0 +1,564 @@ +'use strict' + +const SPACE_CHARACTERS = /\s+/g + +// hoisted class for cyclic dependency +class Range { + constructor (range, options) { + options = parseOptions(options) + + if (range instanceof Range) { + if ( + range.loose === !!options.loose && + range.includePrerelease === !!options.includePrerelease + ) { + return range + } else { + return new Range(range.raw, options) + } + } + + if (range instanceof Comparator) { + // just put it in the set and return + this.raw = range.value + this.set = [[range]] + this.formatted = undefined + return this + } + + this.options = options + this.loose = !!options.loose + this.includePrerelease = !!options.includePrerelease + + // First reduce all whitespace as much as possible so we do not have to rely + // on potentially slow regexes like \s*. This is then stored and used for + // future error messages as well. + this.raw = range.trim().replace(SPACE_CHARACTERS, ' ') + + // First, split on || + this.set = this.raw + .split('||') + // map the range to a 2d array of comparators + .map(r => this.parseRange(r.trim())) + // throw out any comparator lists that are empty + // this generally means that it was not a valid range, which is allowed + // in loose mode, but will still throw if the WHOLE range is invalid. + .filter(c => c.length) + + if (!this.set.length) { + throw new TypeError(`Invalid SemVer Range: ${this.raw}`) + } + + // if we have any that are not the null set, throw out null sets. + if (this.set.length > 1) { + // keep the first one, in case they're all null sets + const first = this.set[0] + this.set = this.set.filter(c => !isNullSet(c[0])) + if (this.set.length === 0) { + this.set = [first] + } else if (this.set.length > 1) { + // if we have any that are *, then the range is just * + for (const c of this.set) { + if (c.length === 1 && isAny(c[0])) { + this.set = [c] + break + } + } + } + } + + this.formatted = undefined + } + + get range () { + if (this.formatted === undefined) { + this.formatted = '' + for (let i = 0; i < this.set.length; i++) { + if (i > 0) { + this.formatted += '||' + } + const comps = this.set[i] + for (let k = 0; k < comps.length; k++) { + if (k > 0) { + this.formatted += ' ' + } + this.formatted += comps[k].toString().trim() + } + } + } + return this.formatted + } + + format () { + return this.range + } + + toString () { + return this.range + } + + parseRange (range) { + // strip build metadata so it can't bleed into the version + range = range.replace(BUILDSTRIPRE, '') + + // memoize range parsing for performance. + // this is a very hot path, and fully deterministic. + const memoOpts = + (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) | + (this.options.loose && FLAG_LOOSE) + const memoKey = memoOpts + ':' + range + const cached = cache.get(memoKey) + if (cached) { + return cached + } + + const loose = this.options.loose + // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` + const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE] + range = range.replace(hr, hyphenReplace(this.options.includePrerelease)) + debug('hyphen replace', range) + + // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` + range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace) + debug('comparator trim', range) + + // `~ 1.2.3` => `~1.2.3` + range = range.replace(re[t.TILDETRIM], tildeTrimReplace) + debug('tilde trim', range) + + // `^ 1.2.3` => `^1.2.3` + range = range.replace(re[t.CARETTRIM], caretTrimReplace) + debug('caret trim', range) + + // At this point, the range is completely trimmed and + // ready to be split into comparators. + + let rangeList = range + .split(' ') + .map(comp => parseComparator(comp, this.options)) + .join(' ') + .split(/\s+/) + // >=0.0.0 is equivalent to * + .map(comp => replaceGTE0(comp, this.options)) + + if (loose) { + // in loose mode, throw out any that are not valid comparators + rangeList = rangeList.filter(comp => { + debug('loose invalid filter', comp, this.options) + return !!comp.match(re[t.COMPARATORLOOSE]) + }) + } + debug('range list', rangeList) + + // if any comparators are the null set, then replace with JUST null set + // if more than one comparator, remove any * comparators + // also, don't include the same comparator more than once + const rangeMap = new Map() + const comparators = rangeList.map(comp => new Comparator(comp, this.options)) + for (const comp of comparators) { + if (isNullSet(comp)) { + return [comp] + } + rangeMap.set(comp.value, comp) + } + if (rangeMap.size > 1 && rangeMap.has('')) { + rangeMap.delete('') + } + + const result = [...rangeMap.values()] + cache.set(memoKey, result) + return result + } + + intersects (range, options) { + if (!(range instanceof Range)) { + throw new TypeError('a Range is required') + } + + return this.set.some((thisComparators) => { + return ( + isSatisfiable(thisComparators, options) && + range.set.some((rangeComparators) => { + return ( + isSatisfiable(rangeComparators, options) && + thisComparators.every((thisComparator) => { + return rangeComparators.every((rangeComparator) => { + return thisComparator.intersects(rangeComparator, options) + }) + }) + ) + }) + ) + }) + } + + // if ANY of the sets match ALL of its comparators, then pass + test (version) { + if (!version) { + return false + } + + if (typeof version === 'string') { + try { + version = new SemVer(version, this.options) + } catch (er) { + return false + } + } + + for (let i = 0; i < this.set.length; i++) { + if (testSet(this.set[i], version, this.options)) { + return true + } + } + return false + } +} + +module.exports = Range + +const LRU = require('../internal/lrucache') +const cache = new LRU() + +const parseOptions = require('../internal/parse-options') +const Comparator = require('./comparator') +const debug = require('../internal/debug') +const SemVer = require('./semver') +const { + safeRe: re, + src, + t, + comparatorTrimReplace, + tildeTrimReplace, + caretTrimReplace, +} = require('../internal/re') +const { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants') + +// unbounded global build-metadata stripper used by parseRange +const BUILDSTRIPRE = new RegExp(src[t.BUILD], 'g') + +const isNullSet = c => c.value === '<0.0.0-0' +const isAny = c => c.value === '' + +// take a set of comparators and determine whether there +// exists a version which can satisfy it +const isSatisfiable = (comparators, options) => { + let result = true + const remainingComparators = comparators.slice() + let testComparator = remainingComparators.pop() + + while (result && remainingComparators.length) { + result = remainingComparators.every((otherComparator) => { + return testComparator.intersects(otherComparator, options) + }) + + testComparator = remainingComparators.pop() + } + + return result +} + +// comprised of xranges, tildes, stars, and gtlt's at this point. +// already replaced the hyphen ranges +// turn into a set of JUST comparators. +const parseComparator = (comp, options) => { + comp = comp.replace(re[t.BUILD], '') + debug('comp', comp, options) + comp = replaceCarets(comp, options) + debug('caret', comp) + comp = replaceTildes(comp, options) + debug('tildes', comp) + comp = replaceXRanges(comp, options) + debug('xrange', comp) + comp = replaceStars(comp, options) + debug('stars', comp) + return comp +} + +const isX = id => !id || id.toLowerCase() === 'x' || id === '*' + +// ~, ~> --> * (any, kinda silly) +// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0 +// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0 +// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0 +// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0 +// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0 +// ~0.0.1 --> >=0.0.1 <0.1.0-0 +const replaceTildes = (comp, options) => { + return comp + .trim() + .split(/\s+/) + .map((c) => replaceTilde(c, options)) + .join(' ') +} + +const replaceTilde = (comp, options) => { + const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE] + return comp.replace(r, (_, M, m, p, pr) => { + debug('tilde', comp, _, M, m, p, pr) + let ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = `>=${M}.0.0 <${+M + 1}.0.0-0` + } else if (isX(p)) { + // ~1.2 == >=1.2.0 <1.3.0-0 + ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0` + } else if (pr) { + debug('replaceTilde pr', pr) + ret = `>=${M}.${m}.${p}-${pr + } <${M}.${+m + 1}.0-0` + } else { + // ~1.2.3 == >=1.2.3 <1.3.0-0 + ret = `>=${M}.${m}.${p + } <${M}.${+m + 1}.0-0` + } + + debug('tilde return', ret) + return ret + }) +} + +// ^ --> * (any, kinda silly) +// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0 +// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0 +// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0 +// ^1.2.3 --> >=1.2.3 <2.0.0-0 +// ^1.2.0 --> >=1.2.0 <2.0.0-0 +// ^0.0.1 --> >=0.0.1 <0.0.2-0 +// ^0.1.0 --> >=0.1.0 <0.2.0-0 +const replaceCarets = (comp, options) => { + return comp + .trim() + .split(/\s+/) + .map((c) => replaceCaret(c, options)) + .join(' ') +} + +const replaceCaret = (comp, options) => { + debug('caret', comp, options) + const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET] + const z = options.includePrerelease ? '-0' : '' + return comp.replace(r, (_, M, m, p, pr) => { + debug('caret', comp, _, M, m, p, pr) + let ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0` + } else if (isX(p)) { + if (M === '0') { + ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0` + } else { + ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0` + } + } else if (pr) { + debug('replaceCaret pr', pr) + if (M === '0') { + if (m === '0') { + ret = `>=${M}.${m}.${p}-${pr + } <${M}.${m}.${+p + 1}-0` + } else { + ret = `>=${M}.${m}.${p}-${pr + } <${M}.${+m + 1}.0-0` + } + } else { + ret = `>=${M}.${m}.${p}-${pr + } <${+M + 1}.0.0-0` + } + } else { + debug('no pr') + if (M === '0') { + if (m === '0') { + ret = `>=${M}.${m}.${p + }${z} <${M}.${m}.${+p + 1}-0` + } else { + ret = `>=${M}.${m}.${p + }${z} <${M}.${+m + 1}.0-0` + } + } else { + ret = `>=${M}.${m}.${p + } <${+M + 1}.0.0-0` + } + } + + debug('caret return', ret) + return ret + }) +} + +const replaceXRanges = (comp, options) => { + debug('replaceXRanges', comp, options) + return comp + .split(/\s+/) + .map((c) => replaceXRange(c, options)) + .join(' ') +} + +const replaceXRange = (comp, options) => { + comp = comp.trim() + const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE] + return comp.replace(r, (ret, gtlt, M, m, p, pr) => { + debug('xRange', comp, ret, gtlt, M, m, p, pr) + const xM = isX(M) + const xm = xM || isX(m) + const xp = xm || isX(p) + const anyX = xp + + if (gtlt === '=' && anyX) { + gtlt = '' + } + + // if we're including prereleases in the match, then we need + // to fix this to -0, the lowest possible prerelease value + pr = options.includePrerelease ? '-0' : '' + + if (xM) { + if (gtlt === '>' || gtlt === '<') { + // nothing is allowed + ret = '<0.0.0-0' + } else { + // nothing is forbidden + ret = '*' + } + } else if (gtlt && anyX) { + // we know patch is an x, because we have any x at all. + // replace X with 0 + if (xm) { + m = 0 + } + p = 0 + + if (gtlt === '>') { + // >1 => >=2.0.0 + // >1.2 => >=1.3.0 + gtlt = '>=' + if (xm) { + M = +M + 1 + m = 0 + p = 0 + } else { + m = +m + 1 + p = 0 + } + } else if (gtlt === '<=') { + // <=0.7.x is actually <0.8.0, since any 0.7.x should + // pass. Similarly, <=7.x is actually <8.0.0, etc. + gtlt = '<' + if (xm) { + M = +M + 1 + } else { + m = +m + 1 + } + } + + if (gtlt === '<') { + pr = '-0' + } + + ret = `${gtlt + M}.${m}.${p}${pr}` + } else if (xm) { + ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0` + } else if (xp) { + ret = `>=${M}.${m}.0${pr + } <${M}.${+m + 1}.0-0` + } + + debug('xRange return', ret) + + return ret + }) +} + +// Because * is AND-ed with everything else in the comparator, +// and '' means "any version", just remove the *s entirely. +const replaceStars = (comp, options) => { + debug('replaceStars', comp, options) + // Looseness is ignored here. star is always as loose as it gets! + return comp + .trim() + .replace(re[t.STAR], '') +} + +const replaceGTE0 = (comp, options) => { + debug('replaceGTE0', comp, options) + return comp + .trim() + .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '') +} + +// This function is passed to string.replace(re[t.HYPHENRANGE]) +// M, m, patch, prerelease, build +// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 +// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do +// 1.2 - 3.4 => >=1.2.0 <3.5.0-0 +// TODO build? +const hyphenReplace = incPr => ($0, + from, fM, fm, fp, fpr, fb, + to, tM, tm, tp, tpr) => { + if (isX(fM)) { + from = '' + } else if (isX(fm)) { + from = `>=${fM}.0.0${incPr ? '-0' : ''}` + } else if (isX(fp)) { + from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}` + } else if (fpr) { + from = `>=${from}` + } else { + from = `>=${from}${incPr ? '-0' : ''}` + } + + if (isX(tM)) { + to = '' + } else if (isX(tm)) { + to = `<${+tM + 1}.0.0-0` + } else if (isX(tp)) { + to = `<${tM}.${+tm + 1}.0-0` + } else if (tpr) { + to = `<=${tM}.${tm}.${tp}-${tpr}` + } else if (incPr) { + to = `<${tM}.${tm}.${+tp + 1}-0` + } else { + to = `<=${to}` + } + + return `${from} ${to}`.trim() +} + +const testSet = (set, version, options) => { + for (let i = 0; i < set.length; i++) { + if (!set[i].test(version)) { + return false + } + } + + if (version.prerelease.length && !options.includePrerelease) { + // Find the set of versions that are allowed to have prereleases + // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 + // That should allow `1.2.3-pr.2` to pass. + // However, `1.2.4-alpha.notready` should NOT be allowed, + // even though it's within the range set by the comparators. + for (let i = 0; i < set.length; i++) { + debug(set[i].semver) + if (set[i].semver === Comparator.ANY) { + continue + } + + if (set[i].semver.prerelease.length > 0) { + const allowed = set[i].semver + if (allowed.major === version.major && + allowed.minor === version.minor && + allowed.patch === version.patch) { + return true + } + } + } + + // Version has a -pre, but it's not one of the ones we like. + return false + } + + return true +} diff --git a/build/node_modules/sharp/node_modules/semver/classes/semver.js b/build/node_modules/sharp/node_modules/semver/classes/semver.js new file mode 100644 index 0000000..92254be --- /dev/null +++ b/build/node_modules/sharp/node_modules/semver/classes/semver.js @@ -0,0 +1,333 @@ +'use strict' + +const debug = require('../internal/debug') +const { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants') +const { safeRe: re, t } = require('../internal/re') + +const parseOptions = require('../internal/parse-options') +const { compareIdentifiers } = require('../internal/identifiers') +class SemVer { + constructor (version, options) { + options = parseOptions(options) + + if (version instanceof SemVer) { + if (version.loose === !!options.loose && + version.includePrerelease === !!options.includePrerelease) { + return version + } else { + version = version.version + } + } else if (typeof version !== 'string') { + throw new TypeError(`Invalid version. Must be a string. Got type "${typeof version}".`) + } + + if (version.length > MAX_LENGTH) { + throw new TypeError( + `version is longer than ${MAX_LENGTH} characters` + ) + } + + debug('SemVer', version, options) + this.options = options + this.loose = !!options.loose + // this isn't actually relevant for versions, but keep it so that we + // don't run into trouble passing this.options around. + this.includePrerelease = !!options.includePrerelease + + const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]) + + if (!m) { + throw new TypeError(`Invalid Version: ${version}`) + } + + this.raw = version + + // these are actually numbers + this.major = +m[1] + this.minor = +m[2] + this.patch = +m[3] + + if (this.major > MAX_SAFE_INTEGER || this.major < 0) { + throw new TypeError('Invalid major version') + } + + if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { + throw new TypeError('Invalid minor version') + } + + if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { + throw new TypeError('Invalid patch version') + } + + // numberify any prerelease numeric ids + if (!m[4]) { + this.prerelease = [] + } else { + this.prerelease = m[4].split('.').map((id) => { + if (/^[0-9]+$/.test(id)) { + const num = +id + if (num >= 0 && num < MAX_SAFE_INTEGER) { + return num + } + } + return id + }) + } + + this.build = m[5] ? m[5].split('.') : [] + this.format() + } + + format () { + this.version = `${this.major}.${this.minor}.${this.patch}` + if (this.prerelease.length) { + this.version += `-${this.prerelease.join('.')}` + } + return this.version + } + + toString () { + return this.version + } + + compare (other) { + debug('SemVer.compare', this.version, this.options, other) + if (!(other instanceof SemVer)) { + if (typeof other === 'string' && other === this.version) { + return 0 + } + other = new SemVer(other, this.options) + } + + if (other.version === this.version) { + return 0 + } + + return this.compareMain(other) || this.comparePre(other) + } + + compareMain (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + if (this.major < other.major) { + return -1 + } + if (this.major > other.major) { + return 1 + } + if (this.minor < other.minor) { + return -1 + } + if (this.minor > other.minor) { + return 1 + } + if (this.patch < other.patch) { + return -1 + } + if (this.patch > other.patch) { + return 1 + } + return 0 + } + + comparePre (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + // NOT having a prerelease is > having one + if (this.prerelease.length && !other.prerelease.length) { + return -1 + } else if (!this.prerelease.length && other.prerelease.length) { + return 1 + } else if (!this.prerelease.length && !other.prerelease.length) { + return 0 + } + + let i = 0 + do { + const a = this.prerelease[i] + const b = other.prerelease[i] + debug('prerelease compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) + } + + compareBuild (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + let i = 0 + do { + const a = this.build[i] + const b = other.build[i] + debug('build compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) + } + + // preminor will bump the version up to the next minor release, and immediately + // down to pre-release. premajor and prepatch work the same way. + inc (release, identifier, identifierBase) { + if (release.startsWith('pre')) { + if (!identifier && identifierBase === false) { + throw new Error('invalid increment argument: identifier is empty') + } + // Avoid an invalid semver results + if (identifier) { + const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE]) + if (!match || match[1] !== identifier) { + throw new Error(`invalid identifier: ${identifier}`) + } + } + } + + switch (release) { + case 'premajor': + this.prerelease.length = 0 + this.patch = 0 + this.minor = 0 + this.major++ + this.inc('pre', identifier, identifierBase) + break + case 'preminor': + this.prerelease.length = 0 + this.patch = 0 + this.minor++ + this.inc('pre', identifier, identifierBase) + break + case 'prepatch': + // If this is already a prerelease, it will bump to the next version + // drop any prereleases that might already exist, since they are not + // relevant at this point. + this.prerelease.length = 0 + this.inc('patch', identifier, identifierBase) + this.inc('pre', identifier, identifierBase) + break + // If the input is a non-prerelease version, this acts the same as + // prepatch. + case 'prerelease': + if (this.prerelease.length === 0) { + this.inc('patch', identifier, identifierBase) + } + this.inc('pre', identifier, identifierBase) + break + case 'release': + if (this.prerelease.length === 0) { + throw new Error(`version ${this.raw} is not a prerelease`) + } + this.prerelease.length = 0 + break + + case 'major': + // If this is a pre-major version, bump up to the same major version. + // Otherwise increment major. + // 1.0.0-5 bumps to 1.0.0 + // 1.1.0 bumps to 2.0.0 + if ( + this.minor !== 0 || + this.patch !== 0 || + this.prerelease.length === 0 + ) { + this.major++ + } + this.minor = 0 + this.patch = 0 + this.prerelease = [] + break + case 'minor': + // If this is a pre-minor version, bump up to the same minor version. + // Otherwise increment minor. + // 1.2.0-5 bumps to 1.2.0 + // 1.2.1 bumps to 1.3.0 + if (this.patch !== 0 || this.prerelease.length === 0) { + this.minor++ + } + this.patch = 0 + this.prerelease = [] + break + case 'patch': + // If this is not a pre-release version, it will increment the patch. + // If it is a pre-release it will bump up to the same patch version. + // 1.2.0-5 patches to 1.2.0 + // 1.2.0 patches to 1.2.1 + if (this.prerelease.length === 0) { + this.patch++ + } + this.prerelease = [] + break + // This probably shouldn't be used publicly. + // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction. + case 'pre': { + const base = Number(identifierBase) ? 1 : 0 + + if (this.prerelease.length === 0) { + this.prerelease = [base] + } else { + let i = this.prerelease.length + while (--i >= 0) { + if (typeof this.prerelease[i] === 'number') { + this.prerelease[i]++ + i = -2 + } + } + if (i === -1) { + // didn't increment anything + if (identifier === this.prerelease.join('.') && identifierBase === false) { + throw new Error('invalid increment argument: identifier already exists') + } + this.prerelease.push(base) + } + } + if (identifier) { + // 1.2.0-beta.1 bumps to 1.2.0-beta.2, + // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 + let prerelease = [identifier, base] + if (identifierBase === false) { + prerelease = [identifier] + } + if (compareIdentifiers(this.prerelease[0], identifier) === 0) { + if (isNaN(this.prerelease[1])) { + this.prerelease = prerelease + } + } else { + this.prerelease = prerelease + } + } + break + } + default: + throw new Error(`invalid increment argument: ${release}`) + } + this.raw = this.format() + if (this.build.length) { + this.raw += `+${this.build.join('.')}` + } + return this + } +} + +module.exports = SemVer diff --git a/build/node_modules/sharp/node_modules/semver/functions/cmp.js b/build/node_modules/sharp/node_modules/semver/functions/cmp.js new file mode 100644 index 0000000..77487dc --- /dev/null +++ b/build/node_modules/sharp/node_modules/semver/functions/cmp.js @@ -0,0 +1,54 @@ +'use strict' + +const eq = require('./eq') +const neq = require('./neq') +const gt = require('./gt') +const gte = require('./gte') +const lt = require('./lt') +const lte = require('./lte') + +const cmp = (a, op, b, loose) => { + switch (op) { + case '===': + if (typeof a === 'object') { + a = a.version + } + if (typeof b === 'object') { + b = b.version + } + return a === b + + case '!==': + if (typeof a === 'object') { + a = a.version + } + if (typeof b === 'object') { + b = b.version + } + return a !== b + + case '': + case '=': + case '==': + return eq(a, b, loose) + + case '!=': + return neq(a, b, loose) + + case '>': + return gt(a, b, loose) + + case '>=': + return gte(a, b, loose) + + case '<': + return lt(a, b, loose) + + case '<=': + return lte(a, b, loose) + + default: + throw new TypeError(`Invalid operator: ${op}`) + } +} +module.exports = cmp diff --git a/build/node_modules/sharp/node_modules/semver/functions/coerce.js b/build/node_modules/sharp/node_modules/semver/functions/coerce.js new file mode 100644 index 0000000..cfe0275 --- /dev/null +++ b/build/node_modules/sharp/node_modules/semver/functions/coerce.js @@ -0,0 +1,62 @@ +'use strict' + +const SemVer = require('../classes/semver') +const parse = require('./parse') +const { safeRe: re, t } = require('../internal/re') + +const coerce = (version, options) => { + if (version instanceof SemVer) { + return version + } + + if (typeof version === 'number') { + version = String(version) + } + + if (typeof version !== 'string') { + return null + } + + options = options || {} + + let match = null + if (!options.rtl) { + match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE]) + } else { + // Find the right-most coercible string that does not share + // a terminus with a more left-ward coercible string. + // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4' + // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4' + // + // Walk through the string checking with a /g regexp + // Manually set the index so as to pick up overlapping matches. + // Stop when we get a match that ends at the string end, since no + // coercible string can be more right-ward without the same terminus. + const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL] + let next + while ((next = coerceRtlRegex.exec(version)) && + (!match || match.index + match[0].length !== version.length) + ) { + if (!match || + next.index + next[0].length !== match.index + match[0].length) { + match = next + } + coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length + } + // leave it in a clean state + coerceRtlRegex.lastIndex = -1 + } + + if (match === null) { + return null + } + + const major = match[2] + const minor = match[3] || '0' + const patch = match[4] || '0' + const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : '' + const build = options.includePrerelease && match[6] ? `+${match[6]}` : '' + + return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options) +} +module.exports = coerce diff --git a/build/node_modules/sharp/node_modules/semver/functions/compare.js b/build/node_modules/sharp/node_modules/semver/functions/compare.js new file mode 100644 index 0000000..63d8090 --- /dev/null +++ b/build/node_modules/sharp/node_modules/semver/functions/compare.js @@ -0,0 +1,7 @@ +'use strict' + +const SemVer = require('../classes/semver') +const compare = (a, b, loose) => + new SemVer(a, loose).compare(new SemVer(b, loose)) + +module.exports = compare diff --git a/build/node_modules/sharp/node_modules/semver/functions/eq.js b/build/node_modules/sharp/node_modules/semver/functions/eq.js new file mode 100644 index 0000000..5f0eead --- /dev/null +++ b/build/node_modules/sharp/node_modules/semver/functions/eq.js @@ -0,0 +1,5 @@ +'use strict' + +const compare = require('./compare') +const eq = (a, b, loose) => compare(a, b, loose) === 0 +module.exports = eq diff --git a/build/node_modules/sharp/node_modules/semver/functions/gt.js b/build/node_modules/sharp/node_modules/semver/functions/gt.js new file mode 100644 index 0000000..84a57dd --- /dev/null +++ b/build/node_modules/sharp/node_modules/semver/functions/gt.js @@ -0,0 +1,5 @@ +'use strict' + +const compare = require('./compare') +const gt = (a, b, loose) => compare(a, b, loose) > 0 +module.exports = gt diff --git a/build/node_modules/sharp/node_modules/semver/functions/gte.js b/build/node_modules/sharp/node_modules/semver/functions/gte.js new file mode 100644 index 0000000..7c52bdf --- /dev/null +++ b/build/node_modules/sharp/node_modules/semver/functions/gte.js @@ -0,0 +1,5 @@ +'use strict' + +const compare = require('./compare') +const gte = (a, b, loose) => compare(a, b, loose) >= 0 +module.exports = gte diff --git a/build/node_modules/sharp/node_modules/semver/functions/lt.js b/build/node_modules/sharp/node_modules/semver/functions/lt.js new file mode 100644 index 0000000..2fb32a0 --- /dev/null +++ b/build/node_modules/sharp/node_modules/semver/functions/lt.js @@ -0,0 +1,5 @@ +'use strict' + +const compare = require('./compare') +const lt = (a, b, loose) => compare(a, b, loose) < 0 +module.exports = lt diff --git a/build/node_modules/sharp/node_modules/semver/functions/lte.js b/build/node_modules/sharp/node_modules/semver/functions/lte.js new file mode 100644 index 0000000..da9ee8f --- /dev/null +++ b/build/node_modules/sharp/node_modules/semver/functions/lte.js @@ -0,0 +1,5 @@ +'use strict' + +const compare = require('./compare') +const lte = (a, b, loose) => compare(a, b, loose) <= 0 +module.exports = lte diff --git a/build/node_modules/sharp/node_modules/semver/functions/neq.js b/build/node_modules/sharp/node_modules/semver/functions/neq.js new file mode 100644 index 0000000..84326b7 --- /dev/null +++ b/build/node_modules/sharp/node_modules/semver/functions/neq.js @@ -0,0 +1,5 @@ +'use strict' + +const compare = require('./compare') +const neq = (a, b, loose) => compare(a, b, loose) !== 0 +module.exports = neq diff --git a/build/node_modules/sharp/node_modules/semver/functions/parse.js b/build/node_modules/sharp/node_modules/semver/functions/parse.js new file mode 100644 index 0000000..d544d33 --- /dev/null +++ b/build/node_modules/sharp/node_modules/semver/functions/parse.js @@ -0,0 +1,18 @@ +'use strict' + +const SemVer = require('../classes/semver') +const parse = (version, options, throwErrors = false) => { + if (version instanceof SemVer) { + return version + } + try { + return new SemVer(version, options) + } catch (er) { + if (!throwErrors) { + return null + } + throw er + } +} + +module.exports = parse diff --git a/build/node_modules/sharp/node_modules/semver/functions/satisfies.js b/build/node_modules/sharp/node_modules/semver/functions/satisfies.js new file mode 100644 index 0000000..a0264a2 --- /dev/null +++ b/build/node_modules/sharp/node_modules/semver/functions/satisfies.js @@ -0,0 +1,12 @@ +'use strict' + +const Range = require('../classes/range') +const satisfies = (version, range, options) => { + try { + range = new Range(range, options) + } catch (er) { + return false + } + return range.test(version) +} +module.exports = satisfies diff --git a/build/node_modules/sharp/node_modules/semver/internal/constants.js b/build/node_modules/sharp/node_modules/semver/internal/constants.js new file mode 100644 index 0000000..6d1db91 --- /dev/null +++ b/build/node_modules/sharp/node_modules/semver/internal/constants.js @@ -0,0 +1,37 @@ +'use strict' + +// Note: this is the semver.org version of the spec that it implements +// Not necessarily the package version of this code. +const SEMVER_SPEC_VERSION = '2.0.0' + +const MAX_LENGTH = 256 +const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || +/* istanbul ignore next */ 9007199254740991 + +// Max safe segment length for coercion. +const MAX_SAFE_COMPONENT_LENGTH = 16 + +// Max safe length for a build identifier. The max length minus 6 characters for +// the shortest version with a build 0.0.0+BUILD. +const MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6 + +const RELEASE_TYPES = [ + 'major', + 'premajor', + 'minor', + 'preminor', + 'patch', + 'prepatch', + 'prerelease', +] + +module.exports = { + MAX_LENGTH, + MAX_SAFE_COMPONENT_LENGTH, + MAX_SAFE_BUILD_LENGTH, + MAX_SAFE_INTEGER, + RELEASE_TYPES, + SEMVER_SPEC_VERSION, + FLAG_INCLUDE_PRERELEASE: 0b001, + FLAG_LOOSE: 0b010, +} diff --git a/build/node_modules/sharp/node_modules/semver/internal/debug.js b/build/node_modules/sharp/node_modules/semver/internal/debug.js new file mode 100644 index 0000000..20d1e9d --- /dev/null +++ b/build/node_modules/sharp/node_modules/semver/internal/debug.js @@ -0,0 +1,11 @@ +'use strict' + +const debug = ( + typeof process === 'object' && + process.env && + process.env.NODE_DEBUG && + /\bsemver\b/i.test(process.env.NODE_DEBUG) +) ? (...args) => console.error('SEMVER', ...args) + : () => {} + +module.exports = debug diff --git a/build/node_modules/sharp/node_modules/semver/internal/identifiers.js b/build/node_modules/sharp/node_modules/semver/internal/identifiers.js new file mode 100644 index 0000000..d053472 --- /dev/null +++ b/build/node_modules/sharp/node_modules/semver/internal/identifiers.js @@ -0,0 +1,29 @@ +'use strict' + +const numeric = /^[0-9]+$/ +const compareIdentifiers = (a, b) => { + if (typeof a === 'number' && typeof b === 'number') { + return a === b ? 0 : a < b ? -1 : 1 + } + + const anum = numeric.test(a) + const bnum = numeric.test(b) + + if (anum && bnum) { + a = +a + b = +b + } + + return a === b ? 0 + : (anum && !bnum) ? -1 + : (bnum && !anum) ? 1 + : a < b ? -1 + : 1 +} + +const rcompareIdentifiers = (a, b) => compareIdentifiers(b, a) + +module.exports = { + compareIdentifiers, + rcompareIdentifiers, +} diff --git a/build/node_modules/sharp/node_modules/semver/internal/lrucache.js b/build/node_modules/sharp/node_modules/semver/internal/lrucache.js new file mode 100644 index 0000000..b8bf526 --- /dev/null +++ b/build/node_modules/sharp/node_modules/semver/internal/lrucache.js @@ -0,0 +1,42 @@ +'use strict' + +class LRUCache { + constructor () { + this.max = 1000 + this.map = new Map() + } + + get (key) { + const value = this.map.get(key) + if (value === undefined) { + return undefined + } else { + // Remove the key from the map and add it to the end + this.map.delete(key) + this.map.set(key, value) + return value + } + } + + delete (key) { + return this.map.delete(key) + } + + set (key, value) { + const deleted = this.delete(key) + + if (!deleted && value !== undefined) { + // If cache is full, delete the least recently used item + if (this.map.size >= this.max) { + const firstKey = this.map.keys().next().value + this.delete(firstKey) + } + + this.map.set(key, value) + } + + return this + } +} + +module.exports = LRUCache diff --git a/build/node_modules/sharp/node_modules/semver/internal/parse-options.js b/build/node_modules/sharp/node_modules/semver/internal/parse-options.js new file mode 100644 index 0000000..5295454 --- /dev/null +++ b/build/node_modules/sharp/node_modules/semver/internal/parse-options.js @@ -0,0 +1,17 @@ +'use strict' + +// parse out just the options we care about +const looseOption = Object.freeze({ loose: true }) +const emptyOpts = Object.freeze({ }) +const parseOptions = options => { + if (!options) { + return emptyOpts + } + + if (typeof options !== 'object') { + return looseOption + } + + return options +} +module.exports = parseOptions diff --git a/build/node_modules/sharp/node_modules/semver/internal/re.js b/build/node_modules/sharp/node_modules/semver/internal/re.js new file mode 100644 index 0000000..2ec2c22 --- /dev/null +++ b/build/node_modules/sharp/node_modules/semver/internal/re.js @@ -0,0 +1,223 @@ +'use strict' + +const { + MAX_SAFE_COMPONENT_LENGTH, + MAX_SAFE_BUILD_LENGTH, + MAX_LENGTH, +} = require('./constants') +const debug = require('./debug') +exports = module.exports = {} + +// The actual regexps go on exports.re +const re = exports.re = [] +const safeRe = exports.safeRe = [] +const src = exports.src = [] +const safeSrc = exports.safeSrc = [] +const t = exports.t = {} +let R = 0 + +const LETTERDASHNUMBER = '[a-zA-Z0-9-]' + +// Replace some greedy regex tokens to prevent regex dos issues. These regex are +// used internally via the safeRe object since all inputs in this library get +// normalized first to trim and collapse all extra whitespace. The original +// regexes are exported for userland consumption and lower level usage. A +// future breaking change could export the safer regex only with a note that +// all input should have extra whitespace removed. +const safeRegexReplacements = [ + ['\\s', 1], + ['\\d', MAX_LENGTH], + [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH], +] + +const makeSafeRegex = (value) => { + for (const [token, max] of safeRegexReplacements) { + value = value + .split(`${token}*`).join(`${token}{0,${max}}`) + .split(`${token}+`).join(`${token}{1,${max}}`) + } + return value +} + +const createToken = (name, value, isGlobal) => { + const safe = makeSafeRegex(value) + const index = R++ + debug(name, index, value) + t[name] = index + src[index] = value + safeSrc[index] = safe + re[index] = new RegExp(value, isGlobal ? 'g' : undefined) + safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined) +} + +// The following Regular Expressions can be used for tokenizing, +// validating, and parsing SemVer version strings. + +// ## Numeric Identifier +// A single `0`, or a non-zero digit followed by zero or more digits. + +createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*') +createToken('NUMERICIDENTIFIERLOOSE', '\\d+') + +// ## Non-numeric Identifier +// Zero or more digits, followed by a letter or hyphen, and then zero or +// more letters, digits, or hyphens. + +createToken('NONNUMERICIDENTIFIER', `\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`) + +// ## Main Version +// Three dot-separated numeric identifiers. + +createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` + + `(${src[t.NUMERICIDENTIFIER]})\\.` + + `(${src[t.NUMERICIDENTIFIER]})`) + +createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + + `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + + `(${src[t.NUMERICIDENTIFIERLOOSE]})`) + +// ## Pre-release Version Identifier +// A numeric identifier, or a non-numeric identifier. +// Non-numeric identifiers include numeric identifiers but can be longer. +// Therefore non-numeric identifiers must go first. + +createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER] +}|${src[t.NUMERICIDENTIFIER]})`) + +createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NONNUMERICIDENTIFIER] +}|${src[t.NUMERICIDENTIFIERLOOSE]})`) + +// ## Pre-release Version +// Hyphen, followed by one or more dot-separated pre-release version +// identifiers. + +createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER] +}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`) + +createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE] +}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`) + +// ## Build Metadata Identifier +// Any combination of digits, letters, or hyphens. + +createToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`) + +// ## Build Metadata +// Plus sign, followed by one or more period-separated build metadata +// identifiers. + +createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER] +}(?:\\.${src[t.BUILDIDENTIFIER]})*))`) + +// ## Full Version String +// A main version, followed optionally by a pre-release version and +// build metadata. + +// Note that the only major, minor, patch, and pre-release sections of +// the version string are capturing groups. The build metadata is not a +// capturing group, because it should not ever be used in version +// comparison. + +createToken('FULLPLAIN', `v?${src[t.MAINVERSION] +}${src[t.PRERELEASE]}?${ + src[t.BUILD]}?`) + +createToken('FULL', `^${src[t.FULLPLAIN]}$`) + +// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. +// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty +// common in the npm registry. +createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE] +}${src[t.PRERELEASELOOSE]}?${ + src[t.BUILD]}?`) + +createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`) + +createToken('GTLT', '((?:<|>)?=?)') + +// Something like "2.*" or "1.2.x". +// Note that "x.x" is a valid xRange identifier, meaning "any version" +// Only the first item is strictly required. +createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`) +createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`) + +createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + + `(?:${src[t.PRERELEASE]})?${ + src[t.BUILD]}?` + + `)?)?`) + +createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:${src[t.PRERELEASELOOSE]})?${ + src[t.BUILD]}?` + + `)?)?`) + +createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`) +createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`) + +// Coercion. +// Extract anything that could conceivably be a part of a valid semver +createToken('COERCEPLAIN', `${'(^|[^\\d])' + + '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` + + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`) +createToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\d])`) +createToken('COERCEFULL', src[t.COERCEPLAIN] + + `(?:${src[t.PRERELEASE]})?` + + `(?:${src[t.BUILD]})?` + + `(?:$|[^\\d])`) +createToken('COERCERTL', src[t.COERCE], true) +createToken('COERCERTLFULL', src[t.COERCEFULL], true) + +// Tilde ranges. +// Meaning is "reasonably at or greater than" +createToken('LONETILDE', '(?:~>?)') + +createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true) +exports.tildeTrimReplace = '$1~' + +createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`) +createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`) + +// Caret ranges. +// Meaning is "at least and backwards compatible with" +createToken('LONECARET', '(?:\\^)') + +createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true) +exports.caretTrimReplace = '$1^' + +createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`) +createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`) + +// A simple gt/lt/eq thing, or just "" to indicate "any version" +createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`) +createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`) + +// An expression to strip any whitespace between the gtlt and the thing +// it modifies, so that `> 1.2.3` ==> `>1.2.3` +createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT] +}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true) +exports.comparatorTrimReplace = '$1$2$3' + +// Something like `1.2.3 - 1.2.4` +// Note that these all use the loose form, because they'll be +// checked against either the strict or loose comparator form +// later. +createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` + + `\\s+-\\s+` + + `(${src[t.XRANGEPLAIN]})` + + `\\s*$`) + +createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` + + `\\s+-\\s+` + + `(${src[t.XRANGEPLAINLOOSE]})` + + `\\s*$`) + +// Star ranges basically just allow anything at all. +createToken('STAR', '(<|>)?=?\\s*\\*') +// >=0.0.0 is like a star +createToken('GTE0', '^\\s*>=\\s*0\\.0\\.0\\s*$') +createToken('GTE0PRE', '^\\s*>=\\s*0\\.0\\.0-0\\s*$') diff --git a/build/node_modules/sharp/node_modules/semver/package.json b/build/node_modules/sharp/node_modules/semver/package.json new file mode 100644 index 0000000..6edb9ab --- /dev/null +++ b/build/node_modules/sharp/node_modules/semver/package.json @@ -0,0 +1,78 @@ +{ + "name": "semver", + "version": "7.8.1", + "description": "The semantic version parser used by npm.", + "main": "index.js", + "scripts": { + "test": "tap", + "snap": "tap", + "lint": "npm run eslint", + "postlint": "template-oss-check", + "lintfix": "npm run eslint -- --fix", + "posttest": "npm run lint", + "template-oss-apply": "template-oss-apply --force", + "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"" + }, + "devDependencies": { + "@npmcli/eslint-config": "^6.0.0", + "@npmcli/template-oss": "5.0.0", + "benchmark": "^2.1.4", + "tap": "^16.0.0" + }, + "license": "ISC", + "repository": { + "type": "git", + "url": "git+https://github.com/npm/node-semver.git" + }, + "bin": { + "semver": "bin/semver.js" + }, + "files": [ + "bin/", + "lib/", + "classes/", + "functions/", + "internal/", + "ranges/", + "index.js", + "preload.js", + "range.bnf" + ], + "tap": { + "timeout": 30, + "coverage-map": "map.js", + "nyc-arg": [ + "--exclude", + "tap-snapshots/**" + ] + }, + "engines": { + "node": ">=10" + }, + "author": "GitHub Inc.", + "templateOSS": { + "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", + "version": "5.0.0", + "engines": ">=10", + "distPaths": [ + "classes/", + "functions/", + "internal/", + "ranges/", + "index.js", + "preload.js", + "range.bnf" + ], + "allowPaths": [ + "/classes/", + "/functions/", + "/internal/", + "/ranges/", + "/index.js", + "/preload.js", + "/range.bnf", + "/benchmarks" + ], + "publish": "true" + } +} diff --git a/build/node_modules/sharp/package.json b/build/node_modules/sharp/package.json new file mode 100644 index 0000000..0c0d009 --- /dev/null +++ b/build/node_modules/sharp/package.json @@ -0,0 +1,202 @@ +{ + "name": "sharp", + "description": "High performance Node.js image processing, the fastest module to resize JPEG, PNG, WebP, GIF, AVIF and TIFF images", + "version": "0.34.5", + "author": "Lovell Fuller <npm@lovell.info>", + "homepage": "https://sharp.pixelplumbing.com", + "contributors": [ + "Pierre Inglebert <pierre.inglebert@gmail.com>", + "Jonathan Ong <jonathanrichardong@gmail.com>", + "Chanon Sajjamanochai <chanon.s@gmail.com>", + "Juliano Julio <julianojulio@gmail.com>", + "Daniel Gasienica <daniel@gasienica.ch>", + "Julian Walker <julian@fiftythree.com>", + "Amit Pitaru <pitaru.amit@gmail.com>", + "Brandon Aaron <hello.brandon@aaron.sh>", + "Andreas Lind <andreas@one.com>", + "Maurus Cuelenaere <mcuelenaere@gmail.com>", + "Linus Unnebäck <linus@folkdatorn.se>", + "Victor Mateevitsi <mvictoras@gmail.com>", + "Alaric Holloway <alaric.holloway@gmail.com>", + "Bernhard K. Weisshuhn <bkw@codingforce.com>", + "Chris Riley <criley@primedia.com>", + "David Carley <dacarley@gmail.com>", + "John Tobin <john@limelightmobileinc.com>", + "Kenton Gray <kentongray@gmail.com>", + "Felix Bünemann <Felix.Buenemann@gmail.com>", + "Samy Al Zahrani <samyalzahrany@gmail.com>", + "Chintan Thakkar <lemnisk8@gmail.com>", + "F. Orlando Galashan <frulo@gmx.de>", + "Kleis Auke Wolthuizen <info@kleisauke.nl>", + "Matt Hirsch <mhirsch@media.mit.edu>", + "Matthias Thoemmes <thoemmes@gmail.com>", + "Patrick Paskaris <patrick@paskaris.gr>", + "Jérémy Lal <kapouer@melix.org>", + "Rahul Nanwani <r.nanwani@gmail.com>", + "Alice Monday <alice0meta@gmail.com>", + "Kristo Jorgenson <kristo.jorgenson@gmail.com>", + "YvesBos <yves_bos@outlook.com>", + "Guy Maliar <guy@tailorbrands.com>", + "Nicolas Coden <nicolas@ncoden.fr>", + "Matt Parrish <matt.r.parrish@gmail.com>", + "Marcel Bretschneider <marcel.bretschneider@gmail.com>", + "Matthew McEachen <matthew+github@mceachen.org>", + "Jarda Kotěšovec <jarda.kotesovec@gmail.com>", + "Kenric D'Souza <kenric.dsouza@gmail.com>", + "Oleh Aleinyk <oleg.aleynik@gmail.com>", + "Marcel Bretschneider <marcel.bretschneider@gmail.com>", + "Andrea Bianco <andrea.bianco@unibas.ch>", + "Rik Heywood <rik@rik.org>", + "Thomas Parisot <hi@oncletom.io>", + "Nathan Graves <nathanrgraves+github@gmail.com>", + "Tom Lokhorst <tom@lokhorst.eu>", + "Espen Hovlandsdal <espen@hovlandsdal.com>", + "Sylvain Dumont <sylvain.dumont35@gmail.com>", + "Alun Davies <alun.owain.davies@googlemail.com>", + "Aidan Hoolachan <ajhoolachan21@gmail.com>", + "Axel Eirola <axel.eirola@iki.fi>", + "Freezy <freezy@xbmc.org>", + "Daiz <taneli.vatanen@gmail.com>", + "Julian Aubourg <j@ubourg.net>", + "Keith Belovay <keith@picthrive.com>", + "Michael B. Klein <mbklein@gmail.com>", + "Jordan Prudhomme <jordan@raboland.fr>", + "Ilya Ovdin <iovdin@gmail.com>", + "Andargor <andargor@yahoo.com>", + "Paul Neave <paul.neave@gmail.com>", + "Brendan Kennedy <brenwken@gmail.com>", + "Brychan Bennett-Odlum <git@brychan.io>", + "Edward Silverton <e.silverton@gmail.com>", + "Roman Malieiev <aromaleev@gmail.com>", + "Tomas Szabo <tomas.szabo@deftomat.com>", + "Robert O'Rourke <robert@o-rourke.org>", + "Guillermo Alfonso Varela Chouciño <guillevch@gmail.com>", + "Christian Flintrup <chr@gigahost.dk>", + "Manan Jadhav <manan@motionden.com>", + "Leon Radley <leon@radley.se>", + "alza54 <alza54@thiocod.in>", + "Jacob Smith <jacob@frende.me>", + "Michael Nutt <michael@nutt.im>", + "Brad Parham <baparham@gmail.com>", + "Taneli Vatanen <taneli.vatanen@gmail.com>", + "Joris Dugué <zaruike10@gmail.com>", + "Chris Banks <christopher.bradley.banks@gmail.com>", + "Ompal Singh <ompal.hitm09@gmail.com>", + "Brodan <christopher.hranj@gmail.com>", + "Ankur Parihar <ankur.github@gmail.com>", + "Brahim Ait elhaj <brahima@gmail.com>", + "Mart Jansink <m.jansink@gmail.com>", + "Lachlan Newman <lachnewman007@gmail.com>", + "Dennis Beatty <dennis@dcbeatty.com>", + "Ingvar Stepanyan <me@rreverser.com>", + "Don Denton <don@happycollision.com>" + ], + "scripts": { + "build": "node install/build.js", + "install": "node install/check.js || npm run build", + "clean": "rm -rf src/build/ .nyc_output/ coverage/ test/fixtures/output.*", + "test": "npm run lint && npm run test-unit", + "lint": "npm run lint-cpp && npm run lint-js && npm run lint-types", + "lint-cpp": "cpplint --quiet src/*.h src/*.cc", + "lint-js": "biome lint", + "lint-types": "tsd --files ./test/types/sharp.test-d.ts", + "test-leak": "./test/leak/leak.sh", + "test-unit": "node --experimental-test-coverage test/unit.mjs", + "package-from-local-build": "node npm/from-local-build.js", + "package-release-notes": "node npm/release-notes.js", + "docs-build": "node docs/build.mjs", + "docs-serve": "cd docs && npm start", + "docs-publish": "cd docs && npm run build && npx firebase-tools deploy --project pixelplumbing --only hosting:pixelplumbing-sharp" + }, + "type": "commonjs", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "files": [ + "install", + "lib", + "src/*.{cc,h,gyp}" + ], + "repository": { + "type": "git", + "url": "git://github.com/lovell/sharp.git" + }, + "keywords": [ + "jpeg", + "png", + "webp", + "avif", + "tiff", + "gif", + "svg", + "jp2", + "dzi", + "image", + "resize", + "thumbnail", + "crop", + "embed", + "libvips", + "vips" + ], + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + }, + "devDependencies": { + "@biomejs/biome": "^2.3.4", + "@cpplint/cli": "^0.1.0", + "@emnapi/runtime": "^1.7.0", + "@img/sharp-libvips-dev": "1.2.4", + "@img/sharp-libvips-dev-wasm32": "1.2.4", + "@img/sharp-libvips-win32-arm64": "1.2.4", + "@img/sharp-libvips-win32-ia32": "1.2.4", + "@img/sharp-libvips-win32-x64": "1.2.4", + "@types/node": "*", + "emnapi": "^1.7.0", + "exif-reader": "^2.0.2", + "extract-zip": "^2.0.1", + "icc": "^3.0.0", + "jsdoc-to-markdown": "^9.1.3", + "node-addon-api": "^8.5.0", + "node-gyp": "^11.5.0", + "tar-fs": "^3.1.1", + "tsd": "^0.33.0" + }, + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "config": { + "libvips": ">=8.17.3" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } +} diff --git a/build/node_modules/styled-jsx/dist/index/index.js b/build/node_modules/styled-jsx/dist/index/index.js new file mode 100644 index 0000000..190dd18 --- /dev/null +++ b/build/node_modules/styled-jsx/dist/index/index.js @@ -0,0 +1,499 @@ +require('client-only'); +var React = require('react'); + +function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } + +var React__default = /*#__PURE__*/_interopDefaultLegacy(React); + +/* +Based on Glamor's sheet +https://github.com/threepointone/glamor/blob/667b480d31b3721a905021b26e1290ce92ca2879/src/sheet.js +*/ function _defineProperties(target, props) { + for(var i = 0; i < props.length; i++){ + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } +} +function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; +} +var isProd = typeof process !== "undefined" && process.env && process.env.NODE_ENV === "production"; +var isString = function(o) { + return Object.prototype.toString.call(o) === "[object String]"; +}; +var StyleSheet = /*#__PURE__*/ function() { + function StyleSheet(param) { + var ref = param === void 0 ? {} : param, _name = ref.name, name = _name === void 0 ? "stylesheet" : _name, _optimizeForSpeed = ref.optimizeForSpeed, optimizeForSpeed = _optimizeForSpeed === void 0 ? isProd : _optimizeForSpeed; + invariant$1(isString(name), "`name` must be a string"); + this._name = name; + this._deletedRulePlaceholder = "#" + name + "-deleted-rule____{}"; + invariant$1(typeof optimizeForSpeed === "boolean", "`optimizeForSpeed` must be a boolean"); + this._optimizeForSpeed = optimizeForSpeed; + this._serverSheet = undefined; + this._tags = []; + this._injected = false; + this._rulesCount = 0; + var node = typeof window !== "undefined" && document.querySelector('meta[property="csp-nonce"]'); + this._nonce = node ? node.getAttribute("content") : null; + } + var _proto = StyleSheet.prototype; + _proto.setOptimizeForSpeed = function setOptimizeForSpeed(bool) { + invariant$1(typeof bool === "boolean", "`setOptimizeForSpeed` accepts a boolean"); + invariant$1(this._rulesCount === 0, "optimizeForSpeed cannot be when rules have already been inserted"); + this.flush(); + this._optimizeForSpeed = bool; + this.inject(); + }; + _proto.isOptimizeForSpeed = function isOptimizeForSpeed() { + return this._optimizeForSpeed; + }; + _proto.inject = function inject() { + var _this = this; + invariant$1(!this._injected, "sheet already injected"); + this._injected = true; + if (typeof window !== "undefined" && this._optimizeForSpeed) { + this._tags[0] = this.makeStyleTag(this._name); + this._optimizeForSpeed = "insertRule" in this.getSheet(); + if (!this._optimizeForSpeed) { + if (!isProd) { + console.warn("StyleSheet: optimizeForSpeed mode not supported falling back to standard mode."); + } + this.flush(); + this._injected = true; + } + return; + } + this._serverSheet = { + cssRules: [], + insertRule: function(rule, index) { + if (typeof index === "number") { + _this._serverSheet.cssRules[index] = { + cssText: rule + }; + } else { + _this._serverSheet.cssRules.push({ + cssText: rule + }); + } + return index; + }, + deleteRule: function(index) { + _this._serverSheet.cssRules[index] = null; + } + }; + }; + _proto.getSheetForTag = function getSheetForTag(tag) { + if (tag.sheet) { + return tag.sheet; + } + // this weirdness brought to you by firefox + for(var i = 0; i < document.styleSheets.length; i++){ + if (document.styleSheets[i].ownerNode === tag) { + return document.styleSheets[i]; + } + } + }; + _proto.getSheet = function getSheet() { + return this.getSheetForTag(this._tags[this._tags.length - 1]); + }; + _proto.insertRule = function insertRule(rule, index) { + invariant$1(isString(rule), "`insertRule` accepts only strings"); + if (typeof window === "undefined") { + if (typeof index !== "number") { + index = this._serverSheet.cssRules.length; + } + this._serverSheet.insertRule(rule, index); + return this._rulesCount++; + } + if (this._optimizeForSpeed) { + var sheet = this.getSheet(); + if (typeof index !== "number") { + index = sheet.cssRules.length; + } + // this weirdness for perf, and chrome's weird bug + // https://stackoverflow.com/questions/20007992/chrome-suddenly-stopped-accepting-insertrule + try { + sheet.insertRule(rule, index); + } catch (error) { + if (!isProd) { + console.warn("StyleSheet: illegal rule: \n\n" + rule + "\n\nSee https://stackoverflow.com/q/20007992 for more info"); + } + return -1; + } + } else { + var insertionPoint = this._tags[index]; + this._tags.push(this.makeStyleTag(this._name, rule, insertionPoint)); + } + return this._rulesCount++; + }; + _proto.replaceRule = function replaceRule(index, rule) { + if (this._optimizeForSpeed || typeof window === "undefined") { + var sheet = typeof window !== "undefined" ? this.getSheet() : this._serverSheet; + if (!rule.trim()) { + rule = this._deletedRulePlaceholder; + } + if (!sheet.cssRules[index]) { + // @TBD Should we throw an error? + return index; + } + sheet.deleteRule(index); + try { + sheet.insertRule(rule, index); + } catch (error) { + if (!isProd) { + console.warn("StyleSheet: illegal rule: \n\n" + rule + "\n\nSee https://stackoverflow.com/q/20007992 for more info"); + } + // In order to preserve the indices we insert a deleteRulePlaceholder + sheet.insertRule(this._deletedRulePlaceholder, index); + } + } else { + var tag = this._tags[index]; + invariant$1(tag, "old rule at index `" + index + "` not found"); + tag.textContent = rule; + } + return index; + }; + _proto.deleteRule = function deleteRule(index) { + if (typeof window === "undefined") { + this._serverSheet.deleteRule(index); + return; + } + if (this._optimizeForSpeed) { + this.replaceRule(index, ""); + } else { + var tag = this._tags[index]; + invariant$1(tag, "rule at index `" + index + "` not found"); + tag.parentNode.removeChild(tag); + this._tags[index] = null; + } + }; + _proto.flush = function flush() { + this._injected = false; + this._rulesCount = 0; + if (typeof window !== "undefined") { + this._tags.forEach(function(tag) { + return tag && tag.parentNode.removeChild(tag); + }); + this._tags = []; + } else { + // simpler on server + this._serverSheet.cssRules = []; + } + }; + _proto.cssRules = function cssRules() { + var _this = this; + if (typeof window === "undefined") { + return this._serverSheet.cssRules; + } + return this._tags.reduce(function(rules, tag) { + if (tag) { + rules = rules.concat(Array.prototype.map.call(_this.getSheetForTag(tag).cssRules, function(rule) { + return rule.cssText === _this._deletedRulePlaceholder ? null : rule; + })); + } else { + rules.push(null); + } + return rules; + }, []); + }; + _proto.makeStyleTag = function makeStyleTag(name, cssString, relativeToTag) { + if (cssString) { + invariant$1(isString(cssString), "makeStyleTag accepts only strings as second parameter"); + } + var tag = document.createElement("style"); + if (this._nonce) tag.setAttribute("nonce", this._nonce); + tag.type = "text/css"; + tag.setAttribute("data-" + name, ""); + if (cssString) { + tag.appendChild(document.createTextNode(cssString)); + } + var head = document.head || document.getElementsByTagName("head")[0]; + if (relativeToTag) { + head.insertBefore(tag, relativeToTag); + } else { + head.appendChild(tag); + } + return tag; + }; + _createClass(StyleSheet, [ + { + key: "length", + get: function get() { + return this._rulesCount; + } + } + ]); + return StyleSheet; +}(); +function invariant$1(condition, message) { + if (!condition) { + throw new Error("StyleSheet: " + message + "."); + } +} + +function hash(str) { + var _$hash = 5381, i = str.length; + while(i){ + _$hash = _$hash * 33 ^ str.charCodeAt(--i); + } + /* JavaScript does bitwise operations (like XOR, above) on 32-bit signed + * integers. Since we want the results to be always positive, convert the + * signed int to an unsigned by doing an unsigned bitshift. */ return _$hash >>> 0; +} +var stringHash = hash; + +var sanitize = function(rule) { + return rule.replace(/\/style/gi, "\\/style"); +}; +var cache = {}; +/** + * computeId + * + * Compute and memoize a jsx id from a basedId and optionally props. + */ function computeId(baseId, props) { + if (!props) { + return "jsx-" + baseId; + } + var propsToString = String(props); + var key = baseId + propsToString; + if (!cache[key]) { + cache[key] = "jsx-" + stringHash(baseId + "-" + propsToString); + } + return cache[key]; +} +/** + * computeSelector + * + * Compute and memoize dynamic selectors. + */ function computeSelector(id, css) { + var selectoPlaceholderRegexp = /__jsx-style-dynamic-selector/g; + // Sanitize SSR-ed CSS. + // Client side code doesn't need to be sanitized since we use + // document.createTextNode (dev) and the CSSOM api sheet.insertRule (prod). + if (typeof window === "undefined") { + css = sanitize(css); + } + var idcss = id + css; + if (!cache[idcss]) { + cache[idcss] = css.replace(selectoPlaceholderRegexp, id); + } + return cache[idcss]; +} + +function mapRulesToStyle(cssRules, options) { + if (options === void 0) options = {}; + return cssRules.map(function(args) { + var id = args[0]; + var css = args[1]; + return /*#__PURE__*/ React__default["default"].createElement("style", { + id: "__" + id, + // Avoid warnings upon render with a key + key: "__" + id, + nonce: options.nonce ? options.nonce : undefined, + dangerouslySetInnerHTML: { + __html: css + } + }); + }); +} +var StyleSheetRegistry = /*#__PURE__*/ function() { + function StyleSheetRegistry(param) { + var ref = param === void 0 ? {} : param, _styleSheet = ref.styleSheet, styleSheet = _styleSheet === void 0 ? null : _styleSheet, _optimizeForSpeed = ref.optimizeForSpeed, optimizeForSpeed = _optimizeForSpeed === void 0 ? false : _optimizeForSpeed; + this._sheet = styleSheet || new StyleSheet({ + name: "styled-jsx", + optimizeForSpeed: optimizeForSpeed + }); + this._sheet.inject(); + if (styleSheet && typeof optimizeForSpeed === "boolean") { + this._sheet.setOptimizeForSpeed(optimizeForSpeed); + this._optimizeForSpeed = this._sheet.isOptimizeForSpeed(); + } + this._fromServer = undefined; + this._indices = {}; + this._instancesCounts = {}; + } + var _proto = StyleSheetRegistry.prototype; + _proto.add = function add(props) { + var _this = this; + if (undefined === this._optimizeForSpeed) { + this._optimizeForSpeed = Array.isArray(props.children); + this._sheet.setOptimizeForSpeed(this._optimizeForSpeed); + this._optimizeForSpeed = this._sheet.isOptimizeForSpeed(); + } + if (typeof window !== "undefined" && !this._fromServer) { + this._fromServer = this.selectFromServer(); + this._instancesCounts = Object.keys(this._fromServer).reduce(function(acc, tagName) { + acc[tagName] = 0; + return acc; + }, {}); + } + var ref = this.getIdAndRules(props), styleId = ref.styleId, rules = ref.rules; + // Deduping: just increase the instances count. + if (styleId in this._instancesCounts) { + this._instancesCounts[styleId] += 1; + return; + } + var indices = rules.map(function(rule) { + return _this._sheet.insertRule(rule); + })// Filter out invalid rules + .filter(function(index) { + return index !== -1; + }); + this._indices[styleId] = indices; + this._instancesCounts[styleId] = 1; + }; + _proto.remove = function remove(props) { + var _this = this; + var styleId = this.getIdAndRules(props).styleId; + invariant(styleId in this._instancesCounts, "styleId: `" + styleId + "` not found"); + this._instancesCounts[styleId] -= 1; + if (this._instancesCounts[styleId] < 1) { + var tagFromServer = this._fromServer && this._fromServer[styleId]; + if (tagFromServer) { + tagFromServer.parentNode.removeChild(tagFromServer); + delete this._fromServer[styleId]; + } else { + this._indices[styleId].forEach(function(index) { + return _this._sheet.deleteRule(index); + }); + delete this._indices[styleId]; + } + delete this._instancesCounts[styleId]; + } + }; + _proto.update = function update(props, nextProps) { + this.add(nextProps); + this.remove(props); + }; + _proto.flush = function flush() { + this._sheet.flush(); + this._sheet.inject(); + this._fromServer = undefined; + this._indices = {}; + this._instancesCounts = {}; + }; + _proto.cssRules = function cssRules() { + var _this = this; + var fromServer = this._fromServer ? Object.keys(this._fromServer).map(function(styleId) { + return [ + styleId, + _this._fromServer[styleId] + ]; + }) : []; + var cssRules = this._sheet.cssRules(); + return fromServer.concat(Object.keys(this._indices).map(function(styleId) { + return [ + styleId, + _this._indices[styleId].map(function(index) { + return cssRules[index].cssText; + }).join(_this._optimizeForSpeed ? "" : "\n") + ]; + })// filter out empty rules + .filter(function(rule) { + return Boolean(rule[1]); + })); + }; + _proto.styles = function styles(options) { + return mapRulesToStyle(this.cssRules(), options); + }; + _proto.getIdAndRules = function getIdAndRules(props) { + var css = props.children, dynamic = props.dynamic, id = props.id; + if (dynamic) { + var styleId = computeId(id, dynamic); + return { + styleId: styleId, + rules: Array.isArray(css) ? css.map(function(rule) { + return computeSelector(styleId, rule); + }) : [ + computeSelector(styleId, css) + ] + }; + } + return { + styleId: computeId(id), + rules: Array.isArray(css) ? css : [ + css + ] + }; + }; + /** + * selectFromServer + * + * Collects style tags from the document with id __jsx-XXX + */ _proto.selectFromServer = function selectFromServer() { + var elements = Array.prototype.slice.call(document.querySelectorAll('[id^="__jsx-"]')); + return elements.reduce(function(acc, element) { + var id = element.id.slice(2); + acc[id] = element; + return acc; + }, {}); + }; + return StyleSheetRegistry; +}(); +function invariant(condition, message) { + if (!condition) { + throw new Error("StyleSheetRegistry: " + message + "."); + } +} +var StyleSheetContext = /*#__PURE__*/ React.createContext(null); +StyleSheetContext.displayName = "StyleSheetContext"; +function createStyleRegistry() { + return new StyleSheetRegistry(); +} +function StyleRegistry(param) { + var configuredRegistry = param.registry, children = param.children; + var rootRegistry = React.useContext(StyleSheetContext); + var ref = React.useState(function() { + return rootRegistry || configuredRegistry || createStyleRegistry(); + }), registry = ref[0]; + return /*#__PURE__*/ React__default["default"].createElement(StyleSheetContext.Provider, { + value: registry + }, children); +} +function useStyleRegistry() { + return React.useContext(StyleSheetContext); +} + +// Opt-into the new `useInsertionEffect` API in React 18, fallback to `useLayoutEffect`. +// https://github.com/reactwg/react-18/discussions/110 +var useInsertionEffect = React__default["default"].useInsertionEffect || React__default["default"].useLayoutEffect; +var defaultRegistry = typeof window !== "undefined" ? createStyleRegistry() : undefined; +function JSXStyle(props) { + var registry = defaultRegistry ? defaultRegistry : useStyleRegistry(); + // If `registry` does not exist, we do nothing here. + if (!registry) { + return null; + } + if (typeof window === "undefined") { + registry.add(props); + return null; + } + useInsertionEffect(function() { + registry.add(props); + return function() { + registry.remove(props); + }; + // props.children can be string[], will be striped since id is identical + }, [ + props.id, + String(props.dynamic) + ]); + return null; +} +JSXStyle.dynamic = function(info) { + return info.map(function(tagInfo) { + var baseId = tagInfo[0]; + var props = tagInfo[1]; + return computeId(baseId, props); + }).join(" "); +}; + +exports.StyleRegistry = StyleRegistry; +exports.createStyleRegistry = createStyleRegistry; +exports.style = JSXStyle; +exports.useStyleRegistry = useStyleRegistry; diff --git a/build/node_modules/styled-jsx/index.js b/build/node_modules/styled-jsx/index.js new file mode 100644 index 0000000..aae5903 --- /dev/null +++ b/build/node_modules/styled-jsx/index.js @@ -0,0 +1 @@ +module.exports = require('./dist/index') diff --git a/build/node_modules/styled-jsx/package.json b/build/node_modules/styled-jsx/package.json new file mode 100644 index 0000000..f7926c1 --- /dev/null +++ b/build/node_modules/styled-jsx/package.json @@ -0,0 +1,132 @@ +{ + "name": "styled-jsx", + "version": "5.1.6", + "license": "MIT", + "repository": "vercel/styled-jsx", + "description": "Full CSS support for JSX without compromises", + "files": [ + "dist", + "lib", + "global.d.ts", + "index.d.ts", + "index.js", + "babel.js", + "babel-test.js", + "style.js", + "style.d.ts", + "macro.js", + "macro.d.ts", + "css.js", + "css.d.ts", + "webpack.js", + "license.md" + ], + "typings": "./index.d.ts", + "scripts": { + "build-babel": "bunchee src/babel.js -f cjs -e babel-plugin-macros --runtime node -o dist/babel/index.js", + "build": "rm -rf dist && rm -rf out && yarn build-webpack && yarn build-index && yarn build-babel", + "build-webpack": "bunchee src/webpack.js -f cjs --runtime node -o dist/webpack/index.js", + "build-index": "bunchee src/index.js -f cjs --runtime node -o dist/index/index.js", + "test": "ava", + "test-types": "tsc --project tsconfig.json --noEmit", + "lint": "eslint ./src", + "format": "prettier --write \"./{src,test}/**/*.{js,css}\"", + "prepublishOnly": "yarn build && yarn test && yarn lint --quiet" + }, + "husky": { + "hooks": { + "pre-commit": "pretty-quick --staged" + } + }, + "ava": { + "require": [ + "@babel/register" + ] + }, + "eslintConfig": { + "env": { + "node": true, + "browser": true, + "es6": true + }, + "extends": [ + "eslint:recommended", + "prettier" + ], + "parserOptions": { + "ecmaVersion": 11, + "sourceType": "module" + }, + "rules": { + "no-empty": 0, + "capitalized-comments": 0, + "valid-jsdoc": 0, + "prefer-destructuring": 0, + "padding-line-between-statements": 0 + } + }, + "devDependencies": { + "@babel/cli": "7.18.10", + "@babel/core": "7.12.3", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.14.5", + "@babel/plugin-transform-arrow-functions": "7.12.1", + "@babel/plugin-transform-modules-commonjs": "7.12.1", + "@babel/plugin-transform-runtime": "7.12.1", + "@babel/preset-env": "7.12.1", + "@babel/preset-react": "7.12.5", + "@babel/register": "7.12.1", + "@babel/runtime": "7.12.5", + "@babel/types": "7.15.0", + "@types/react": "18.3.3", + "ava": "4.3.1", + "babel-plugin-macros": "2.8.0", + "bunchee": "2.1.5", + "convert-source-map": "1.7.0", + "eslint": "7.32.0", + "eslint-config-prettier": "4.0.0", + "husky": "4.3.0", + "loader-utils": "1.4.2", + "prettier": "1.16.4", + "pretty-quick": "3.1.0", + "react": "17.0.1", + "react-dom": "17.0.1", + "semantic-release": "17.2.2", + "source-map": "0.7.3", + "string-hash": "1.1.3", + "stylis": "3.5.4", + "stylis-rule-sheet": "0.0.10", + "typescript": "~5.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + }, + "release": { + "branches": [ + "main", + "alpha", + "beta" + ] + }, + "engines": { + "node": ">= 12.0.0" + }, + "keywords": [ + "babel-plugin-macros", + "vercel", + "zeit", + "css-in-js", + "css" + ], + "dependencies": { + "client-only": "0.0.1" + } +} diff --git a/build/node_modules/styled-jsx/style.js b/build/node_modules/styled-jsx/style.js new file mode 100644 index 0000000..db67e98 --- /dev/null +++ b/build/node_modules/styled-jsx/style.js @@ -0,0 +1 @@ +module.exports = require('./dist/index').style diff --git a/build/package.json b/build/package.json new file mode 100644 index 0000000..d31b392 --- /dev/null +++ b/build/package.json @@ -0,0 +1,52 @@ +{ + "name": "doormile-next", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "build:css": "bash scripts/build-css.sh", + "start": "next start", + "lint": "eslint", + "test": "jest", + "test:watch": "jest --watch", + "test:coverage": "jest --coverage" + }, + "dependencies": { + "@emailjs/browser": "^4.4.1", + "@react-three/drei": "^10.7.7", + "@react-three/fiber": "^9.6.1", + "@react-three/postprocessing": "^3.0.4", + "framer-motion": "^12.40.0", + "gsap": "^3.15.0", + "leaflet": "^1.9.4", + "lenis": "^1.3.23", + "maath": "^0.10.8", + "next": "16.2.6", + "nodemailer": "^9.0.0", + "react": "19.2.4", + "react-dom": "19.2.4", + "react-leaflet": "^5.0.0", + "three": "0.171.0", + "zustand": "^5.0.14" + }, + "devDependencies": { + "@tailwindcss/postcss": "^4", + "@testing-library/jest-dom": "^6.9.1", + "@testing-library/react": "^16.3.2", + "@types/jest": "^30.0.0", + "@types/leaflet": "^1.9.21", + "@types/node": "^20", + "@types/nodemailer": "^8.0.1", + "@types/react": "^19", + "@types/react-dom": "^19", + "@types/three": "^0.184.0", + "eslint": "^9", + "eslint-config-next": "16.2.6", + "jest": "^30.4.2", + "jest-environment-jsdom": "^30.4.1", + "tailwindcss": "^4", + "ts-node": "^10.9.2", + "typescript": "^5" + } +} diff --git a/build/privacy-policy.html b/build/privacy-policy.html deleted file mode 100644 index bad6165..0000000 --- a/build/privacy-policy.html +++ /dev/null @@ -1,853 +0,0 @@ -<!DOCTYPE html><html lang="en-US" data-scroll-behavior="smooth" class="manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="/images/doormile-white.png"/><link rel="preload" as="image" href="/images/doormile-black.png"/><link rel="stylesheet" href="/_next/static/chunks/0w9rs8fz9m7so.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/098a0lm-b~rn..js"/><script src="/_next/static/chunks/0tldj~reb5~dn.js" async=""></script><script src="/_next/static/chunks/110q6k5sdl4es.js" async=""></script><script src="/_next/static/chunks/14w_kqlcp4t3-.js" async=""></script><script src="/_next/static/chunks/07uz2g0_38qia.js" async=""></script><script src="/_next/static/chunks/turbopack-0srbdy.l3xhmj.js" async=""></script><script src="/_next/static/chunks/06n0m6ck5r8gy.js" async=""></script><script src="/_next/static/chunks/08hj-sa49t6qk.js" async=""></script><script src="/_next/static/chunks/074ch-b_0x~v-.js" async=""></script><script src="/_next/static/chunks/04xui0pxt.et1.js" async=""></script><script src="/_next/static/chunks/0d3shmwh5_nmn.js" async=""></script><link rel="preload" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css" as="style"/><link rel="preload" href="/css/site.css" as="style"/><meta name="next-size-adjust" content=""/><title>Privacy Policy – Doormile

    Doormile

    Doormile logo
    Address
    Hyderabad

    5th Floor, Vision Ultima,
    Street No.3, Jayabheri Enclave,
    Gachibowli, Hyderabad,
    Telangana 500032.

    Coimbatore

    Mayflower Valencia,
    Near Nava India Bus Stop,
    Avinashi Road,
    Udayampalayam,
    Tamil Nadu 641037.

    Bengaluru

    C612, 6th Floor,
    Trifecta Starlight,
    ITPL Road,
    Garudacharapalya,
    Mahadevapura,
    Bangalore 560048,
    Karnataka, India.

    Contact Us

    Tel : +91 86886 97941

    Email

    care@doormile.com

    \ No newline at end of file diff --git a/build/privacy-policy.txt b/build/privacy-policy.txt deleted file mode 100644 index 9b7d566..0000000 --- a/build/privacy-policy.txt +++ /dev/null @@ -1,222 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -19:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","privacy-policy"],"q":"","i":false,"f":[[["",{"children":["privacy-policy",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","section",null,{"className":"dm-legal","aria-label":"Privacy Policy","children":[["$","div",null,{"className":"dm-legal__wrap","children":[["$","aside",null,{"className":"dm-legal__toc","aria-label":"On this page","children":["$","div",null,{"className":"dm-legal__toc-inner","children":[["$","p",null,{"className":"dm-legal__toc-label","children":"On this page"}],["$","nav",null,{"children":["$","ul",null,{"children":[["$","li","Information We Collect",{"children":["$","a",null,{"href":"#information-we-collect","children":"Information We Collect"}]}],["$","li","How We Use Your Information",{"children":["$","a",null,{"href":"#how-we-use-your-information","children":"How We Use Your Information"}]}],"$Lc","$Ld","$Le","$Lf","$L10","$L11","$L12","$L13"]}]}]]}]}],"$L14"]}],"$L15"]}]}]}]}],null,"$L16"]}],{},null,false,null]},null,false,"$@17"]},null,false,null],"$L18",false]],"m":"$undefined","G":["$19",["$L1a"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -20:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -21:"$Sreact.suspense" -24:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -26:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -c:["$","li","Information Sharing",{"children":["$","a",null,{"href":"#information-sharing","children":"Information Sharing"}]}] -d:["$","li","Data Security",{"children":["$","a",null,{"href":"#data-security","children":"Data Security"}]}] -e:["$","li","Data Retention",{"children":["$","a",null,{"href":"#data-retention","children":"Data Retention"}]}] -f:["$","li","Cookies and Tracking Technologies",{"children":["$","a",null,{"href":"#cookies-and-tracking-technologies","children":"Cookies and Tracking Technologies"}]}] -10:["$","li","Your Rights",{"children":["$","a",null,{"href":"#your-rights","children":"Your Rights"}]}] -11:["$","li","Third-Party Links",{"children":["$","a",null,{"href":"#third-party-links","children":"Third-Party Links"}]}] -12:["$","li","Policy Updates",{"children":["$","a",null,{"href":"#policy-updates","children":"Policy Updates"}]}] -13:["$","li","Contact Us",{"children":["$","a",null,{"href":"#contact-us","children":"Contact Us"}]}] -14:["$","div",null,{"className":"dm-legal__main","children":[["$","header",null,{"className":"dm-legal__hero","children":[["$","h1",null,{"className":"dm-legal__title","children":"Privacy Policy"}],["$","p",null,{"className":"dm-legal__updated","children":["Last Updated: ","June 2026"]}],["$","p",null,{"className":"dm-legal__lead","children":"At Doormile, we are committed to protecting your privacy and maintaining the security of the information you share with us. This Privacy Policy outlines how we collect, use, store, and protect your information when you visit our website, interact with our services, or communicate with us."}]]}],["$","article",null,{"className":"dm-legal__content","children":[["$","section","Information We Collect",{"id":"information-we-collect","className":"dm-legal__section","children":[["$","h2",null,{"className":"dm-legal__h2","children":"Information We Collect"}],[["$","p","0",{"className":"dm-legal__p","children":"We may collect the following information:"}],["$","ul","1",{"className":"dm-legal__ul","children":[["$","li","0",{"children":"Full name"}],["$","li","1",{"children":"Email address"}],["$","li","2",{"children":"Phone number"}],["$","li","3",{"children":"Company name"}],["$","li","4",{"children":"Job title"}],["$","li","5",{"children":"Information submitted through contact forms"}],["$","li","6",{"children":"Service inquiry details"}],["$","li","7",{"children":"Website usage data and analytics"}],["$","li","8",{"children":"Browser, device, and IP information"}]]}]]]}],["$","section","How We Use Your Information",{"id":"how-we-use-your-information","className":"dm-legal__section","children":[["$","h2",null,{"className":"dm-legal__h2","children":"How We Use Your Information"}],[["$","p","0",{"className":"dm-legal__p","children":"We use your information to:"}],["$","ul","1",{"className":"dm-legal__ul","children":[["$","li","0",{"children":"Respond to inquiries and support requests"}],["$","li","1",{"children":"Provide information about our services"}],["$","li","2",{"children":"Improve website performance and user experience"}],["$","li","3",{"children":"Analyze usage trends and platform effectiveness"}],["$","li","4",{"children":"Maintain security and prevent unauthorized access"}],["$","li","5",{"children":"Communicate service updates and business information"}],["$","li","6",{"children":"Comply with legal and regulatory requirements"}]]}]]]}],["$","section","Information Sharing",{"id":"information-sharing","className":"dm-legal__section","children":[["$","h2",null,{"className":"dm-legal__h2","children":"Information Sharing"}],[["$","p","0",{"className":"dm-legal__p","children":"Doormile does not sell, rent, or trade personal information. Information may be shared with trusted service providers that assist with website hosting, analytics, communications, and operational support, subject to appropriate confidentiality and security obligations."}]]]}],["$","section","Data Security",{"id":"data-security","className":"dm-legal__section","children":[["$","h2",null,{"className":"dm-legal__h2","children":"Data Security"}],[["$","p","0",{"className":"dm-legal__p","children":"We implement industry-standard administrative, technical, and organizational safeguards designed to protect personal information from unauthorized access, disclosure, alteration, or destruction."}]]]}],["$","section","Data Retention",{"id":"data-retention","className":"dm-legal__section","children":[["$","h2",null,{"className":"dm-legal__h2","children":"Data Retention"}],[["$","p","0",{"className":"dm-legal__p","children":"We retain information only for as long as necessary to fulfill the purposes described in this policy, comply with legal obligations, resolve disputes, and enforce agreements."}]]]}],["$","section","Cookies and Tracking Technologies",{"id":"cookies-and-tracking-technologies","className":"dm-legal__section","children":[["$","h2",null,{"className":"dm-legal__h2","children":"Cookies and Tracking Technologies"}],[["$","p","0",{"className":"dm-legal__p","children":"We use cookies and similar technologies to improve website functionality, measure performance, understand user behavior, and enhance user experience."}]]]}],"$L1b","$L1c","$L1d","$L1e"]}]]}] -1f:T15aa, -.dm-legal { - background: #ffffff; - color: #334155; - /* Top padding clears the fixed/absolute floating navbar (~104px) + breathing room. */ - padding: clamp(132px, 16vh, 184px) 0 clamp(72px, 10vw, 96px); - font-family: var(--font-manrope), system-ui, -apple-system, sans-serif; -} - -.dm-legal__wrap { - max-width: 1180px; - margin: 0 auto; - padding: 0 clamp(20px, 5vw, 40px); - display: grid; - grid-template-columns: minmax(0, 1fr); - gap: 0; -} - -/* ---- Sticky table of contents (desktop only) ---- */ -.dm-legal__toc { display: none; } - -@media (min-width: 1080px) { - .dm-legal__wrap { - grid-template-columns: 248px minmax(0, 800px); - justify-content: center; - gap: 64px; - } - .dm-legal__toc { display: block; } -} - -.dm-legal__toc-inner { position: sticky; top: 128px; } -.dm-legal__toc-label { - margin: 0 0 14px; - font-size: 12px; - font-weight: 700; - letter-spacing: 0.14em; - text-transform: uppercase; - color: #94a3b8; -} -.dm-legal__toc nav ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; } -.dm-legal__toc nav a { - display: block; - font-size: 14px; - line-height: 1.4; - color: #64748b; - text-decoration: none; - border-left: 2px solid transparent; - padding-left: 12px; - transition: color 0.2s ease, border-color 0.2s ease; -} -.dm-legal__toc nav a:hover { color: #c01227; border-left-color: #c01227; } - -/* ---- Reading column (max 800px) ---- */ -.dm-legal__main { min-width: 0; max-width: 800px; } - -.dm-legal__hero { margin-bottom: clamp(40px, 6vw, 56px); } -.dm-legal__title { - margin: 0 !important; - padding: 0 !important; - /* !important / text-transform override the global ".elementor-kit-5 h1" - (uppercase + kit font-size) so headings render in normal case at the spec sizes. */ - font-size: clamp(40px, 6vw, 60px) !important; - font-weight: 800 !important; - line-height: 1.08 !important; - letter-spacing: -0.02em !important; - text-transform: none !important; - color: #0f172a !important; -} -.dm-legal__updated { - margin: 16px 0 0; - font-size: 14px; - font-weight: 700; - letter-spacing: 0.08em; - text-transform: uppercase; - color: #94a3b8; -} - -.dm-legal__lead { - margin: 24px 0 0; - font-size: clamp(18px, 1.6vw, 20px); - line-height: 1.7; - color: #475569; -} -.dm-legal__hero .dm-legal__lead { margin-top: 24px; } - -/* ---- Sections ---- */ -.dm-legal__content { display: flex; flex-direction: column; } -.dm-legal__section { padding-top: 32px; } -.dm-legal__section:first-child { padding-top: 0; } - -.dm-legal__h2 { - margin: 0 0 16px !important; - padding: 0 !important; - font-size: clamp(24px, 3vw, 32px) !important; - font-weight: 700 !important; - line-height: 1.2 !important; - letter-spacing: -0.01em !important; - text-transform: none !important; - color: #0f172a !important; - /* Offset anchor jumps so the heading isn't hidden under the fixed navbar. */ - scroll-margin-top: 120px; -} -.dm-legal__h3 { - margin: 24px 0 8px !important; - padding: 0 !important; - font-size: 20px !important; - font-weight: 700 !important; - line-height: 1.35 !important; - text-transform: none !important; - color: #0f172a !important; -} -.dm-legal__p { - margin: 0 0 16px; - font-size: 18px; - line-height: 1.7; - color: #334155; -} -.dm-legal__p:last-child { margin-bottom: 0; } - -.dm-legal__ul { margin: 4px 0 16px; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 10px; } -.dm-legal__ul li { - position: relative; - padding-left: 26px; - font-size: 18px; - line-height: 1.7; - color: #334155; -} -/* Extra .dm-legal prefix raises specificity above the global theme rule - ".logico-front-end ul li:before" (a fontello glyph), so our clean red dot - replaces the inherited checkmark marker. */ -.dm-legal .dm-legal__ul li::before { - content: "" !important; - position: absolute; - left: 4px; - top: 0.62em; - width: 7px; - height: 7px; - border-radius: 50%; - background: #c01227; - font-size: 0; -} -/* TOC links are inside a
      too — suppress the same inherited glyph marker. */ -.dm-legal .dm-legal__toc nav li::before { content: none !important; } - -.dm-legal__link { color: #c01227; font-weight: 600; text-decoration: none; border-bottom: 1px solid rgba(192,18,39,0.35); } -.dm-legal__link:hover { border-bottom-color: #c01227; } - -@media (max-width: 1079px) { - .dm-legal__main { margin: 0 auto; } -} - -/* ============================================================ - Navbar visibility — LEGAL PAGES ONLY. - This
      FMCG logistics

      FMCG

      FMCG logistics demands speed, precision, and continuous fulfillment across high-volume delivery networks. Businesses must balance tight delivery timelines, inventory movement, and operational efficiency without compromising product availability.

      • Unpredictable demand spikes create delivery pressure and reduce operational efficiency during peak periods.
      • Fresh product expiry constraints require faster, precisely timed deliveries to maintain product quality.
      • Multi-stop route complexity increases travel time, operational costs, and delivery coordination challenges.
      • Inventory stockout risks increase when delivery delays disrupt fast-moving product distribution.
      Pharma logistics

      Pharma

      Pharma logistics requires precision, compliance, and real-time monitoring so every shipment arrives safely and on time — from temperature-sensitive medicines to urgent emergency deliveries.

      • Cold chain integrity demands precise temperature control throughout transit.
      • Regulatory compliance must be tracked and documented on every delivery.
      • Critical delivery time windows require highly accurate scheduling.
      • Emergency shipments need instant dispatch and zero-delay execution.
      Enterprise and B2B logistics

      Enterprise & B2B

      Enterprise and B2B logistics require coordination and reliability to manage high-value shipments at scale — with appointment scheduling, white-glove standards, and strict SLA commitments.

      • Appointment scheduling requires precise timing across many locations.
      • White-glove delivery standards demand premium handling and accuracy.
      • Multi-location routing complexity grows with large-scale operations.
      • Strict SLA commitments pressure teams to stay timely and error-free.
    \ No newline at end of file diff --git a/build/solutions.txt b/build/solutions.txt deleted file mode 100644 index 7d968f1..0000000 --- a/build/solutions.txt +++ /dev/null @@ -1,76 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -12:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -c:T5ca, - /* Fix "Why Businesses Choose Doormile" section — anchor absolute image left, push content right */ - .elementor-element.elementor-element-ead59d3 { - position: relative; - overflow: hidden; - } - .elementor-element.elementor-element-f35119c { - position: absolute !important; - left: -2% !important; - top: 50% !important; - transform: translateY(-50%) !important; - width: 48% !important; - max-width: 520px !important; - opacity: 0.18 !important; - z-index: 0 !important; - pointer-events: none; - } - .elementor-element.elementor-element-56ecbb3 { - position: relative !important; - z-index: 1 !important; - width: 55% !important; - max-width: 55% !important; - margin-left: auto !important; - margin-right: 4% !important; - } - .elementor-element.elementor-element-56ecbb3 .e-con-inner { - max-width: 100% !important; - padding-left: 0 !important; - padding-right: 0 !important; - } - @media (max-width: 1020px) { - .elementor-element.elementor-element-f35119c { display: none !important; } - .elementor-element.elementor-element-56ecbb3 { - width: 100% !important; - max-width: 100% !important; - margin: 0 !important; - } - } - 0:{"P":null,"c":["","solutions"],"q":"","i":false,"f":[[["",{"children":["solutions",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$c"}}],"$Ld"],["$Le"],"$Lf"]}],{},null,false,null]},null,false,"$@10"]},null,false,null],"$L11",false]],"m":"$undefined","G":["$12",["$L13"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -14:I[89937,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yd8cyhuvvzan.js"],"default"] -15:I[40086,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yd8cyhuvvzan.js"],"default"] -16:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -17:"$Sreact.suspense" -1a:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -1c:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -d:["$","div",null,{"id":"solutions","className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","div",null,{"data-elementor-type":"wp-page","data-elementor-id":"59","className":"elementor elementor-59","children":[["$","$L14",null,{}],["$","$L15",null,{}]]}]}]}]}] -e:["$","script","script-0",{"src":"/_next/static/chunks/0yd8cyhuvvzan.js","async":true,"nonce":"$undefined"}] -f:["$","$L16",null,{"children":["$","$17",null,{"name":"Next.MetadataOutlet","children":"$@18"}]}] -19:[] -10:"$W19" -11:["$","$1","h",{"children":[null,["$","$L1a",null,{"children":"$L1b"}],["$","div",null,{"hidden":true,"children":["$","$L1c",null,{"children":["$","$17",null,{"name":"Next.Metadata","children":"$L1d"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] -13:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] -1b:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -1e:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -18:null -1d:[["$","title","0",{"children":"Solutions – Doormile"}],["$","meta","1",{"name":"description","content":"Discover how Doormile's connected logistics platform serves diverse industries (FMCG, Pharma, and Enterprise) with tailored solutions."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","4",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","5",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","6",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L1e","7",{}]] diff --git a/build/solutions/__next._full.txt b/build/solutions/__next._full.txt deleted file mode 100644 index 7d968f1..0000000 --- a/build/solutions/__next._full.txt +++ /dev/null @@ -1,76 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -12:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -c:T5ca, - /* Fix "Why Businesses Choose Doormile" section — anchor absolute image left, push content right */ - .elementor-element.elementor-element-ead59d3 { - position: relative; - overflow: hidden; - } - .elementor-element.elementor-element-f35119c { - position: absolute !important; - left: -2% !important; - top: 50% !important; - transform: translateY(-50%) !important; - width: 48% !important; - max-width: 520px !important; - opacity: 0.18 !important; - z-index: 0 !important; - pointer-events: none; - } - .elementor-element.elementor-element-56ecbb3 { - position: relative !important; - z-index: 1 !important; - width: 55% !important; - max-width: 55% !important; - margin-left: auto !important; - margin-right: 4% !important; - } - .elementor-element.elementor-element-56ecbb3 .e-con-inner { - max-width: 100% !important; - padding-left: 0 !important; - padding-right: 0 !important; - } - @media (max-width: 1020px) { - .elementor-element.elementor-element-f35119c { display: none !important; } - .elementor-element.elementor-element-56ecbb3 { - width: 100% !important; - max-width: 100% !important; - margin: 0 !important; - } - } - 0:{"P":null,"c":["","solutions"],"q":"","i":false,"f":[[["",{"children":["solutions",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$c"}}],"$Ld"],["$Le"],"$Lf"]}],{},null,false,null]},null,false,"$@10"]},null,false,null],"$L11",false]],"m":"$undefined","G":["$12",["$L13"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -14:I[89937,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yd8cyhuvvzan.js"],"default"] -15:I[40086,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yd8cyhuvvzan.js"],"default"] -16:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -17:"$Sreact.suspense" -1a:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -1c:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -d:["$","div",null,{"id":"solutions","className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","div",null,{"data-elementor-type":"wp-page","data-elementor-id":"59","className":"elementor elementor-59","children":[["$","$L14",null,{}],["$","$L15",null,{}]]}]}]}]}] -e:["$","script","script-0",{"src":"/_next/static/chunks/0yd8cyhuvvzan.js","async":true,"nonce":"$undefined"}] -f:["$","$L16",null,{"children":["$","$17",null,{"name":"Next.MetadataOutlet","children":"$@18"}]}] -19:[] -10:"$W19" -11:["$","$1","h",{"children":[null,["$","$L1a",null,{"children":"$L1b"}],["$","div",null,{"hidden":true,"children":["$","$L1c",null,{"children":["$","$17",null,{"name":"Next.Metadata","children":"$L1d"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] -13:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] -1b:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] -1e:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -18:null -1d:[["$","title","0",{"children":"Solutions – Doormile"}],["$","meta","1",{"name":"description","content":"Discover how Doormile's connected logistics platform serves diverse industries (FMCG, Pharma, and Enterprise) with tailored solutions."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","4",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","5",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","6",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L1e","7",{}]] diff --git a/build/solutions/__next._head.txt b/build/solutions/__next._head.txt deleted file mode 100644 index 6616402..0000000 --- a/build/solutions/__next._head.txt +++ /dev/null @@ -1,6 +0,0 @@ -1:"$Sreact.fragment" -2:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -3:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -4:"$Sreact.suspense" -5:I[27201,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] -0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Solutions – Doormile"}],["$","meta","1",{"name":"description","content":"Discover how Doormile's connected logistics platform serves diverse industries (FMCG, Pharma, and Enterprise) with tailored solutions."}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"shortcut icon","href":"/images/cropped-image-2.png"}],["$","link","4",{"rel":"icon","href":"/favicon.ico?favicon.14w3bhkxgz946.ico","sizes":"40x40","type":"image/x-icon"}],["$","link","5",{"rel":"icon","href":"/images/cropped-image-2.png"}],["$","link","6",{"rel":"apple-touch-icon","href":"/images/cropped-image-2.png"}],["$","$L5","7",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/solutions/__next._index.txt b/build/solutions/__next._index.txt deleted file mode 100644 index d0b3355..0000000 --- a/build/solutions/__next._index.txt +++ /dev/null @@ -1,15 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","template":["$","$La",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/solutions/__next._tree.txt b/build/solutions/__next._tree.txt deleted file mode 100644 index 44986c1..0000000 --- a/build/solutions/__next._tree.txt +++ /dev/null @@ -1,9 +0,0 @@ -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"solutions","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/solutions/__next.solutions.__PAGE__.txt b/build/solutions/__next.solutions.__PAGE__.txt deleted file mode 100644 index fdc02e4..0000000 --- a/build/solutions/__next.solutions.__PAGE__.txt +++ /dev/null @@ -1,45 +0,0 @@ -1:"$Sreact.fragment" -3:I[89937,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yd8cyhuvvzan.js"],"default"] -4:I[40086,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0yd8cyhuvvzan.js"],"default"] -5:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -6:"$Sreact.suspense" -2:T5ca, - /* Fix "Why Businesses Choose Doormile" section — anchor absolute image left, push content right */ - .elementor-element.elementor-element-ead59d3 { - position: relative; - overflow: hidden; - } - .elementor-element.elementor-element-f35119c { - position: absolute !important; - left: -2% !important; - top: 50% !important; - transform: translateY(-50%) !important; - width: 48% !important; - max-width: 520px !important; - opacity: 0.18 !important; - z-index: 0 !important; - pointer-events: none; - } - .elementor-element.elementor-element-56ecbb3 { - position: relative !important; - z-index: 1 !important; - width: 55% !important; - max-width: 55% !important; - margin-left: auto !important; - margin-right: 4% !important; - } - .elementor-element.elementor-element-56ecbb3 .e-con-inner { - max-width: 100% !important; - padding-left: 0 !important; - padding-right: 0 !important; - } - @media (max-width: 1020px) { - .elementor-element.elementor-element-f35119c { display: none !important; } - .elementor-element.elementor-element-56ecbb3 { - width: 100% !important; - max-width: 100% !important; - margin: 0 !important; - } - } - 0:{"rsc":["$","$1","c",{"children":[[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"$2"}}],["$","div",null,{"id":"solutions","className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","div",null,{"data-elementor-type":"wp-page","data-elementor-id":"59","className":"elementor elementor-59","children":[["$","$L3",null,{}],["$","$L4",null,{}]]}]}]}]}]],[["$","script","script-0",{"src":"/_next/static/chunks/0yd8cyhuvvzan.js","async":true}]],["$","$L5",null,{"children":["$","$6",null,{"name":"Next.MetadataOutlet","children":"$@7"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"kmSVPuUqY3Rhw5xy4D2nn"} -7:null diff --git a/build/solutions/__next.solutions.txt b/build/solutions/__next.solutions.txt deleted file mode 100644 index e0935ae..0000000 --- a/build/solutions/__next.solutions.txt +++ /dev/null @@ -1,5 +0,0 @@ -1:"$Sreact.fragment" -2:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:[] -0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"kmSVPuUqY3Rhw5xy4D2nn"} diff --git a/build/terms-of-service.html b/build/terms-of-service.html deleted file mode 100644 index 1a8a3a5..0000000 --- a/build/terms-of-service.html +++ /dev/null @@ -1,853 +0,0 @@ -Terms of Service – Doormile

    Doormile

    Doormile logo
    Address
    Hyderabad

    5th Floor, Vision Ultima,
    Street No.3, Jayabheri Enclave,
    Gachibowli, Hyderabad,
    Telangana 500032.

    Coimbatore

    Mayflower Valencia,
    Near Nava India Bus Stop,
    Avinashi Road,
    Udayampalayam,
    Tamil Nadu 641037.

    Bengaluru

    C612, 6th Floor,
    Trifecta Starlight,
    ITPL Road,
    Garudacharapalya,
    Mahadevapura,
    Bangalore 560048,
    Karnataka, India.

    Contact Us

    Tel : +91 86886 97941

    Email

    care@doormile.com

    \ No newline at end of file diff --git a/build/terms-of-service.txt b/build/terms-of-service.txt deleted file mode 100644 index 42ac732..0000000 --- a/build/terms-of-service.txt +++ /dev/null @@ -1,223 +0,0 @@ -1:"$Sreact.fragment" -2:I[67989,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -3:I[8971,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -4:I[48064,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -5:I[26290,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -6:I[82637,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"HeaderUIProvider"] -7:I[92260,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -8:I[3374,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -9:I[39756,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -a:I[37457,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -b:I[58234,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] -1a:I[68027,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] -:HL["/_next/static/chunks/0w9rs8fz9m7so.css","style"] -:HL["/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2","font",{"crossOrigin":"","type":"font/woff2"}] -:HL["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css","style"] -:HL["/css/site.css","style"] -0:{"P":null,"c":["","terms-of-service"],"q":"","i":false,"f":[[["",{"children":["terms-of-service",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0w9rs8fz9m7so.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06n0m6ck5r8gy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/08hj-sa49t6qk.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/074ch-b_0x~v-.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/04xui0pxt.et1.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en-US","data-scroll-behavior":"smooth","className":"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"stylesheet","href":"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"}],["$","link",null,{"rel":"stylesheet","href":"/css/site.css"}]]}],["$","body",null,{"className":"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page","suppressHydrationWarning":true,"children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"children":[["$","$L7",null,{}],["$","div",null,{"className":"body-container","children":["$","div",null,{"id":"page","className":"hfeed site","children":[["$","$L8",null,{}],["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$Lb",null,{}]]}]}]]}]]}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L9",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$La",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","div",null,{"className":"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none","children":["$","div",null,{"className":"content","children":["$","div",null,{"className":"content-inner","children":["$","section",null,{"className":"dm-legal","aria-label":"Terms of Service","children":[["$","div",null,{"className":"dm-legal__wrap","children":[["$","aside",null,{"className":"dm-legal__toc","aria-label":"On this page","children":["$","div",null,{"className":"dm-legal__toc-inner","children":[["$","p",null,{"className":"dm-legal__toc-label","children":"On this page"}],["$","nav",null,{"children":["$","ul",null,{"children":[["$","li","Acceptance of Terms",{"children":["$","a",null,{"href":"#acceptance-of-terms","children":"Acceptance of Terms"}]}],["$","li","Permitted Use",{"children":["$","a",null,{"href":"#permitted-use","children":"Permitted Use"}]}],["$","li","Intellectual Property Rights",{"children":"$Lc"}],"$Ld","$Le","$Lf","$L10","$L11","$L12","$L13","$L14"]}]}]]}]}],"$L15"]}],"$L16"]}]}]}]}],null,"$L17"]}],{},null,false,null]},null,false,"$@18"]},null,false,null],"$L19",false]],"m":"$undefined","G":["$1a",["$L1b"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"kmSVPuUqY3Rhw5xy4D2nn"} -21:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] -22:"$Sreact.suspense" -25:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] -27:I[97367,["/_next/static/chunks/06n0m6ck5r8gy.js","/_next/static/chunks/08hj-sa49t6qk.js","/_next/static/chunks/074ch-b_0x~v-.js","/_next/static/chunks/04xui0pxt.et1.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] -c:["$","a",null,{"href":"#intellectual-property-rights","children":"Intellectual Property Rights"}] -d:["$","li","User Submissions",{"children":["$","a",null,{"href":"#user-submissions","children":"User Submissions"}]}] -e:["$","li","Service Availability",{"children":["$","a",null,{"href":"#service-availability","children":"Service Availability"}]}] -f:["$","li","Disclaimer of Warranties",{"children":["$","a",null,{"href":"#disclaimer-of-warranties","children":"Disclaimer of Warranties"}]}] -10:["$","li","Limitation of Liability",{"children":["$","a",null,{"href":"#limitation-of-liability","children":"Limitation of Liability"}]}] -11:["$","li","Indemnification",{"children":["$","a",null,{"href":"#indemnification","children":"Indemnification"}]}] -12:["$","li","Modifications",{"children":["$","a",null,{"href":"#modifications","children":"Modifications"}]}] -13:["$","li","Governing Law",{"children":["$","a",null,{"href":"#governing-law","children":"Governing Law"}]}] -14:["$","li","Contact Us",{"children":["$","a",null,{"href":"#contact-us","children":"Contact Us"}]}] -15:["$","div",null,{"className":"dm-legal__main","children":[["$","header",null,{"className":"dm-legal__hero","children":[["$","h1",null,{"className":"dm-legal__title","children":"Terms of Service"}],["$","p",null,{"className":"dm-legal__updated","children":["Last Updated: ","June 2026"]}],["$","p",null,{"className":"dm-legal__lead","children":"These Terms of Service govern your access to and use of the Doormile website and related services. By accessing or using our website, you agree to comply with these terms."}]]}],["$","article",null,{"className":"dm-legal__content","children":[["$","section","Acceptance of Terms",{"id":"acceptance-of-terms","className":"dm-legal__section","children":[["$","h2",null,{"className":"dm-legal__h2","children":"Acceptance of Terms"}],[["$","p","0",{"className":"dm-legal__p","children":"By accessing this website, you acknowledge that you have read, understood, and agreed to these Terms of Service and all applicable laws and regulations."}]]]}],["$","section","Permitted Use",{"id":"permitted-use","className":"dm-legal__section","children":[["$","h2",null,{"className":"dm-legal__h2","children":"Permitted Use"}],[["$","p","0",{"className":"dm-legal__p","children":"You agree to use the website and services only for lawful purposes and in accordance with these terms."}],["$","p","1",{"className":"dm-legal__p","children":"You agree not to:"}],["$","ul","2",{"className":"dm-legal__ul","children":[["$","li","0",{"children":"Violate applicable laws or regulations"}],["$","li","1",{"children":"Attempt unauthorized access to systems or networks"}],["$","li","2",{"children":"Interfere with website functionality or security"}],["$","li","3",{"children":"Distribute malicious software or harmful code"}],["$","li","4",{"children":"Misrepresent your identity or organization"}],["$","li","5",{"children":"Use website content without authorization"}]]}]]]}],["$","section","Intellectual Property Rights",{"id":"intellectual-property-rights","className":"dm-legal__section","children":[["$","h2",null,{"className":"dm-legal__h2","children":"Intellectual Property Rights"}],[["$","p","0",{"className":"dm-legal__p","children":"All content, technology, software, graphics, trademarks, logos, text, designs, and other materials available on this website are the property of Doormile or its licensors and are protected by applicable intellectual property laws."}]]]}],["$","section","User Submissions",{"id":"user-submissions","className":"dm-legal__section","children":[["$","h2",null,{"className":"dm-legal__h2","children":"User Submissions"}],[["$","p","0",{"className":"dm-legal__p","children":"Any information submitted through forms, inquiries, or communications must be accurate and lawful. Users are responsible for the content they submit."}]]]}],["$","section","Service Availability",{"id":"service-availability","className":"dm-legal__section","children":[["$","h2",null,{"className":"dm-legal__h2","children":"Service Availability"}],[["$","p","0",{"className":"dm-legal__p","children":"While we strive to maintain uninterrupted access, we do not guarantee that the website or services will always be available, secure, or error-free."}]]]}],["$","section","Disclaimer of Warranties",{"id":"disclaimer-of-warranties","className":"dm-legal__section","children":[["$","h2",null,{"className":"dm-legal__h2","children":"Disclaimer of Warranties"}],[["$","p","0",{"className":"dm-legal__p","children":"The website and services are provided on an \"as is\" and \"as available\" basis without warranties of any kind, whether express or implied."}]]]}],["$","section","Limitation of Liability",{"id":"limitation-of-liability","className":"dm-legal__section","children":[["$","h2",null,{"className":"dm-legal__h2","children":"Limitation of Liability"}],[["$","p","0",{"className":"dm-legal__p","children":"To the maximum extent permitted by law, Doormile shall not be liable for any indirect, incidental, special, consequential, or punitive damages arising from or related to the use of the website or services."}]]]}],"$L1c","$L1d","$L1e","$L1f"]}]]}] -20:T15aa, -.dm-legal { - background: #ffffff; - color: #334155; - /* Top padding clears the fixed/absolute floating navbar (~104px) + breathing room. */ - padding: clamp(132px, 16vh, 184px) 0 clamp(72px, 10vw, 96px); - font-family: var(--font-manrope), system-ui, -apple-system, sans-serif; -} - -.dm-legal__wrap { - max-width: 1180px; - margin: 0 auto; - padding: 0 clamp(20px, 5vw, 40px); - display: grid; - grid-template-columns: minmax(0, 1fr); - gap: 0; -} - -/* ---- Sticky table of contents (desktop only) ---- */ -.dm-legal__toc { display: none; } - -@media (min-width: 1080px) { - .dm-legal__wrap { - grid-template-columns: 248px minmax(0, 800px); - justify-content: center; - gap: 64px; - } - .dm-legal__toc { display: block; } -} - -.dm-legal__toc-inner { position: sticky; top: 128px; } -.dm-legal__toc-label { - margin: 0 0 14px; - font-size: 12px; - font-weight: 700; - letter-spacing: 0.14em; - text-transform: uppercase; - color: #94a3b8; -} -.dm-legal__toc nav ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; } -.dm-legal__toc nav a { - display: block; - font-size: 14px; - line-height: 1.4; - color: #64748b; - text-decoration: none; - border-left: 2px solid transparent; - padding-left: 12px; - transition: color 0.2s ease, border-color 0.2s ease; -} -.dm-legal__toc nav a:hover { color: #c01227; border-left-color: #c01227; } - -/* ---- Reading column (max 800px) ---- */ -.dm-legal__main { min-width: 0; max-width: 800px; } - -.dm-legal__hero { margin-bottom: clamp(40px, 6vw, 56px); } -.dm-legal__title { - margin: 0 !important; - padding: 0 !important; - /* !important / text-transform override the global ".elementor-kit-5 h1" - (uppercase + kit font-size) so headings render in normal case at the spec sizes. */ - font-size: clamp(40px, 6vw, 60px) !important; - font-weight: 800 !important; - line-height: 1.08 !important; - letter-spacing: -0.02em !important; - text-transform: none !important; - color: #0f172a !important; -} -.dm-legal__updated { - margin: 16px 0 0; - font-size: 14px; - font-weight: 700; - letter-spacing: 0.08em; - text-transform: uppercase; - color: #94a3b8; -} - -.dm-legal__lead { - margin: 24px 0 0; - font-size: clamp(18px, 1.6vw, 20px); - line-height: 1.7; - color: #475569; -} -.dm-legal__hero .dm-legal__lead { margin-top: 24px; } - -/* ---- Sections ---- */ -.dm-legal__content { display: flex; flex-direction: column; } -.dm-legal__section { padding-top: 32px; } -.dm-legal__section:first-child { padding-top: 0; } - -.dm-legal__h2 { - margin: 0 0 16px !important; - padding: 0 !important; - font-size: clamp(24px, 3vw, 32px) !important; - font-weight: 700 !important; - line-height: 1.2 !important; - letter-spacing: -0.01em !important; - text-transform: none !important; - color: #0f172a !important; - /* Offset anchor jumps so the heading isn't hidden under the fixed navbar. */ - scroll-margin-top: 120px; -} -.dm-legal__h3 { - margin: 24px 0 8px !important; - padding: 0 !important; - font-size: 20px !important; - font-weight: 700 !important; - line-height: 1.35 !important; - text-transform: none !important; - color: #0f172a !important; -} -.dm-legal__p { - margin: 0 0 16px; - font-size: 18px; - line-height: 1.7; - color: #334155; -} -.dm-legal__p:last-child { margin-bottom: 0; } - -.dm-legal__ul { margin: 4px 0 16px; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 10px; } -.dm-legal__ul li { - position: relative; - padding-left: 26px; - font-size: 18px; - line-height: 1.7; - color: #334155; -} -/* Extra .dm-legal prefix raises specificity above the global theme rule - ".logico-front-end ul li:before" (a fontello glyph), so our clean red dot - replaces the inherited checkmark marker. */ -.dm-legal .dm-legal__ul li::before { - content: "" !important; - position: absolute; - left: 4px; - top: 0.62em; - width: 7px; - height: 7px; - border-radius: 50%; - background: #c01227; - font-size: 0; -} -/* TOC links are inside a
      too — suppress the same inherited glyph marker. */ -.dm-legal .dm-legal__toc nav li::before { content: none !important; } - -.dm-legal__link { color: #c01227; font-weight: 600; text-decoration: none; border-bottom: 1px solid rgba(192,18,39,0.35); } -.dm-legal__link:hover { border-bottom-color: #c01227; } - -@media (max-width: 1079px) { - .dm-legal__main { margin: 0 auto; } -} - -/* ============================================================ - Navbar visibility — LEGAL PAGES ONLY. - This